/home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/Compressed/ruby34.zip
PK#J[߫i�bin/rakenuȯ��#!/opt/alt/ruby34/bin/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_bin_path)
load Gem.activate_bin_path('rake', 'rake', version)
else
gem "rake", version
load Gem.bin_path("rake", "rake", version)
end
PK#J[SHجVVbin/syntax_suggestnuȯ��#!/opt/alt/ruby34/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'syntax_suggest' 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_bin_path)
load Gem.activate_bin_path('syntax_suggest', 'syntax_suggest', version)
else
gem "syntax_suggest", version
load Gem.bin_path("syntax_suggest", "syntax_suggest", version)
end
PK#J[��A&&
bin/rackupnuȯ��#!/opt/alt/ruby34/bin/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_bin_path)
load Gem.activate_bin_path('rackup', 'rackup', version)
else
gem "rackup", version
load Gem.bin_path("rackup", "rackup", version)
end
PK#J[*Z�bin/rinuȯ��#!/opt/alt/ruby34/bin/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_bin_path)
load Gem.activate_bin_path('rdoc', 'ri', version)
else
gem "rdoc", version
load Gem.bin_path("rdoc", "ri", version)
end
PK#J[��	bin/rdocnuȯ��#!/opt/alt/ruby34/bin/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_bin_path)
load Gem.activate_bin_path('rdoc', 'rdoc', version)
else
gem "rdoc", version
load Gem.bin_path("rdoc", "rdoc", version)
end
PK#J[ci�bin/gemnuȯ��#!/opt/alt/ruby34/bin/ruby
# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require "rubygems/gem_runner"

Gem::GemRunner.new.run ARGV.clone
PK#J[j$��bin/erbnuȯ��#!/opt/alt/ruby34/bin/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_bin_path)
load Gem.activate_bin_path('erb', 'erb', version)
else
gem "erb", version
load Gem.bin_path("erb", "erb", version)
end
PK#J[���;;
bin/bundlenuȯ��#!/opt/alt/ruby34/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'bundler' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0.a"

str = ARGV.first
if str
  str = str.b[/\A_(.*)_\z/, 1]
  if str and Gem::Version.correct?(str)
    version = str
    ENV['BUNDLER_VERSION'] = str

    ARGV.shift
  end
end

if Gem.respond_to?(:activate_bin_path)
load Gem.activate_bin_path('bundler', 'bundle', version)
else
gem "bundler", version
load Gem.bin_path("bundler", "bundle", version)
end
PK$J[g���==bin/bundlernuȯ��#!/opt/alt/ruby34/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'bundler' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0.a"

str = ARGV.first
if str
  str = str.b[/\A_(.*)_\z/, 1]
  if str and Gem::Version.correct?(str)
    version = str
    ENV['BUNDLER_VERSION'] = str

    ARGV.shift
  end
end

if Gem.respond_to?(:activate_bin_path)
load Gem.activate_bin_path('bundler', 'bundler', version)
else
gem "bundler", version
load Gem.bin_path("bundler", "bundler", version)
end
PK$J[]�rH/H/bin/rubynuȯ��ELF>�
@�'@8@@@@hh����
�
 �� �     �����  ���DDS�td���  P�td```<<Q�tdR�td�� � /lib64/ld-linux-x86-64.so.2GNU�GNUGNUq���X����W}K�m*/�
�Q! e�
j	Cֺ�|CE��:�2b��K�����qX
�U c m ; "�z�i  E  2  k   o�
/ZXv�e9  J@libruby.so.3.4__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTableruby_run_noderuby_initruby_optionsruby_init_stackruby_sysinitlibz.so.1librt.so.1libgmp.so.10libdl.so.2libcrypt.so.1libm.so.6libpthread.so.0libc.so.6setlocale__stack_chk_fail__cxa_finalize__libc_start_main_edata__bss_start_end__libc_csu_fini_IO_stdin_used__data_start__libc_csu_initGLIBC_2.4GLIBC_2.2.5/opt/alt/ruby34/lib64�ii
�ui	�� �� �� � � � � � � � � � � � 	� 
� � ��H��H�� H��t��H����5B �%C ��h�������h��������h�������h�������h�������h�������h�������h��q�������%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D��USH��(�|$1�H�4$H�5�dH�%(H�D$1����H��H�|$���H�,$�\$H�|$����<���H����B���H������H�T$dH3%(uH��([]��N���f.�@��1�I��^H��H���PTL�FH�
�H�=H����� �H�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=y u+UH�=b H��tH�=V �Y����d����Q ]������w������AWI��AVI��AUA��ATL�%� UH�-� SL)�H������H��t1��L��L��D��A��H��H9�u�H��[]A\A]A^A_�ff.������H��H���;<��pp����������Xp������(zRx� ���/D$4h����FJw�?:*3$"\����,t8����E�A�D@p
AAAD�����eF�E�E �E(�H0�H8�G@n8A0A(B BBB�������� ���������	
H� � ���o0�x
�� �X��	���o���oh���o�o:���o P	`	p	�	�	�	�	�	GA$3a1	GA$3p1113P
EGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*GOW*�P
�
GA$3a1UGA*GOW*�E
GA*FORTIFYGA+GLIBCXX_ASSERTIONSruby-3.4.4-3.el8.x86_64.debug��Mt�7zXZ�ִF!t/���I]?�E�h=��ڊ�2N�������X��q�`��Sժ��u;f�i�h����H���~|a��Qq�O����`��4s��(
o�[�s�"�8"u�ޖ��v0^|��W%;@�D�2���T���`R;K��'�V�=�i.-��D,b�x�!� |'e���T�h�kޡ^�\���ݩ�U�7��*����d��@P	��+Y���H�4e�;%M<��}s�)��-3�f���J�#��b�fD,���4�~#�Ӱ�4�K��w,��Nk�_8y@���|˽jY�MB	�A�qL�3�Zc���'�ڙh�Ǚ��_�����FV���`�5pShS8���@�<�c^���h/F�
5�-UG���;��^��[V?iPV�6kx>�x�|yB$�ʑ A2ZS�C��l�ʷͧ�FT��Zb����Yf����F5)n�!��p_�N�6��;�_J���E1ׇH{��c�>����"��߸#��va^1��� �4�g|���M*�rI��G&�M[����y��D{��A�	:�����,��](���ZE����[�i2_�J��o������6a����n'��/��$�=f�RƇ��E����œ+����βr�F_��i�ib�A%��ҷ�PpnS0��ME	V��Pc��!���oIbA0ԉ	���)�_���0�T�$��)�\	�{��3��ih���=M���q��#Gs��_0D�4��/fUI��f?�-�)g߹��0S*��|�ilG�H�r�U���!�2#(��!��/�K1����7�֤$�7j�'��B�/iNc(�F��[(Fae
8H�A��mM[��Z��H/��V�P��g�YZ.shstrtab.interp.note.gnu.property.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata���� &�� 4$G���o00HQxxY���a���o::,n���ohh0}����BXX��		�@	@	���	�	��P
P
��HH
�XX�``<����� ��� ��� �� ��� ���      
 ` � �"$/�"�H&>PK$J[�O�!�!)share/systemtap/tapset/libruby.so.3.4.stpnu�[���/* SystemTap tapset to make it easier to trace Ruby 2.0
 *
 * All probes provided by Ruby can be listed using following command
 * (the path to the library must be adjuste appropriately):
 *
 * stap -L 'process("/opt/alt/ruby34/lib*\/libruby.so.3.4").mark("*")'
 */

/**
 * probe ruby.array.create - Allocation of new array.
 *
 * @size: Number of elements (an int)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.array.create =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("array__create")
{
	size = $arg1
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.cmethod.entry - Fired just before a method implemented in C is entered.
 *
 * @classname: Name of the class (string)
 * @methodname: The method about bo be executed (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.cmethod.entry =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("cmethod__entry")
{
	classname  = user_string($arg1)
	methodname = user_string($arg2)
	file = user_string($arg3)
	line = $arg4
}

/**
 * probe ruby.cmethod.return - Fired just after a method implemented in C has returned.
 *
 * @classname: Name of the class (string)
 * @methodname: The executed method (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.cmethod.return =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("cmethod__return")
{
	classname  = user_string($arg1)
	methodname = user_string($arg2)
	file = user_string($arg3)
	line = $arg4
}

/**
 * probe ruby.find.require.entry - Fired when require starts to search load
 * path for suitable file to require.
 *
 * @requiredfile: The name of the file to be required (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.find.require.entry =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("find__require__entry")
{
	requiredfile = user_string($arg1)
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.find.require.return - Fired just after require has finished
 * search of load path for suitable file to require.
 *
 * @requiredfile: The name of the file to be required (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.find.require.return =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("find__require__return")
{
	requiredfile = user_string($arg1)
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.gc.mark.begin - Fired when a GC mark phase is about to start.
 *
 * It takes no arguments.
 */
probe ruby.gc.mark.begin =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("gc__mark__begin")
{
}

/**
 * probe ruby.gc.mark.end - Fired when a GC mark phase has ended.
 *
 * It takes no arguments.
 */
probe ruby.gc.mark.end =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("gc__mark__end")
{
}

/**
 * probe ruby.gc.sweep.begin - Fired when a GC sweep phase is about to start.
 *
 * It takes no arguments.
 */
probe ruby.gc.sweep.begin =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("gc__sweep__begin")
{
}

/**
 * probe ruby.gc.sweep.end - Fired when a GC sweep phase has ended.
 *
 * It takes no arguments.
 */
probe ruby.gc.sweep.end =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("gc__sweep__end")
{
}

/**
 * probe ruby.hash.create - Allocation of new hash.
 *
 * @size: Number of elements (int)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.hash.create =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("hash__create")
{
	size = $arg1
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.load.entry - Fired when calls to "load" are made.
 *
 * @loadedfile: The name of the file to be loaded (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.load.entry =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("load__entry")
{
	loadedfile = user_string($arg1)
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.load.return - Fired just after require has finished
 * search of load path for suitable file to require.
 *
 * @loadedfile: The name of the file that was loaded (string)
 */
probe ruby.load.return =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("load__return")
{
	loadedfile = user_string($arg1)
}

/**
 * probe ruby.method.entry - Fired just before a method implemented in Ruby is entered.
 *
 * @classname: Name of the class (string)
 * @methodname: The method about bo be executed (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.method.entry =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("method__entry")
{
	classname  = user_string($arg1)
	methodname = user_string($arg2)
	file = user_string($arg3)
	line = $arg4
}

/**
 * probe ruby.method.return - Fired just after a method implemented in Ruby has returned.
 *
 * @classname: Name of the class (string)
 * @methodname: The executed method (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.method.return =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("method__return")
{
	classname  = user_string($arg1)
	methodname = user_string($arg2)
	file = user_string($arg3)
	line = $arg4
}

/**
 * probe ruby.object.create - Allocation of new object.
 *
 * @classname: Name of the class (string)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.object.create =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("object__create")
{
	classname = user_string($arg1)
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.parse.begin - Fired just before a Ruby source file is parsed.
 *
 * @parsedfile: The name of the file to be parsed (string)
 * @parsedline: The line number of beginning of parsing (int)
 */
probe ruby.parse.begin =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("parse__begin")
{
	parsedfile = user_string($arg1)
	parsedline = $arg2
}

/**
 * probe ruby.parse.end - Fired just after a Ruby source file was parsed.
 *
 * @parsedfile: The name of parsed the file (string)
 * @parsedline: The line number of beginning of parsing (int)
 */
probe ruby.parse.end =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("parse__end")
{
	parsedfile = user_string($arg1)
	parsedline = $arg2
}

/**
 * probe ruby.raise - Fired when an exception is raised.
 *
 * @classname: The class name of the raised exception (string)
 * @file: The name of the file where the exception was raised (string)
 * @line: The line number in the file where the exception was raised (int)
 */
probe ruby.raise =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("raise")
{
	classname  = user_string($arg1)
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.require.entry - Fired on calls to rb_require_safe (when a file
 * is required).
 *
 * @requiredfile: The name of the file to be required (string)
 * @file: The file that called "require" (string)
 * @line: The line number where the call to require was made(int)
 */
probe ruby.require.entry =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("require__entry")
{
	requiredfile = user_string($arg1)
	file = user_string($arg2)
	line = $arg3
}

/**
 * probe ruby.require.return - Fired just after require has finished
 * search of load path for suitable file to require.
 *
 * @requiredfile: The file that was required (string)
 */
probe ruby.require.return =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("require__return")
{
	requiredfile = user_string($arg1)
}

/**
 * probe ruby.string.create - Allocation of new string.
 *
 * @size: Number of elements (an int)
 * @file: The file name where the method is being called (string)
 * @line: The line number where the method is being called (int)
 */
probe ruby.string.create =
      process("/opt/alt/ruby34/lib*/libruby.so.3.4").mark("string__create")
{
	size = $arg1
	file = user_string($arg2)
	line = $arg3
}
PK$J[vP��
�
#share/doc/alt-ruby34-libs/README.mdnu�[���[![Actions Status: MinGW](https://github.com/ruby/ruby/workflows/MinGW/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW")
[![Actions Status: RJIT](https://github.com/ruby/ruby/workflows/RJIT/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"RJIT")
[![Actions Status: Ubuntu](https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Ubuntu")
[![Actions Status: Windows](https://github.com/ruby/ruby/workflows/Windows/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Windows")
[![Travis Status](https://app.travis-ci.com/ruby/ruby.svg?branch=master)](https://app.travis-ci.com/ruby/ruby)

# What is Ruby?

Ruby is an interpreted object-oriented programming language often
used for web development. It also offers many scripting features
to process plain text and serialized files, or manage system tasks.
It is simple, straightforward, and extensible.

## Features of Ruby

* Simple Syntax
* **Normal** Object-oriented Features (e.g. class, method calls)
* **Advanced** Object-oriented Features (e.g. mix-in, singleton-method)
* Operator Overloading
* Exception Handling
* Iterators and Closures
* Garbage Collection
* Dynamic Loading of Object Files (on some architectures)
* Highly Portable (works on many Unix-like/POSIX compatible platforms as
  well as Windows, macOS, etc.) cf.
    https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers

## How to get Ruby

For a complete list of ways to install Ruby, including using third-party tools
like rvm, see:

https://www.ruby-lang.org/en/downloads/

You can download release packages and the snapshot of the repository. If you want to
download whole versions of Ruby, please visit https://www.ruby-lang.org/en/downloads/releases/.

### Download with Git

The mirror of the Ruby source tree can be checked out with the following command:

    $ git clone https://github.com/ruby/ruby.git

There are some other branches under development. Try the following command
to see the list of branches:

    $ git ls-remote https://github.com/ruby/ruby.git

You may also want to use https://git.ruby-lang.org/ruby.git (actual master of Ruby source)
if you are a committer.

## How to build

See [Building Ruby](https://docs.ruby-lang.org/en/master/contributing/building_ruby_md.html)

## Ruby home page

https://www.ruby-lang.org/

## Documentation

- [English](https://docs.ruby-lang.org/en/master/index.html)
- [Japanese](https://docs.ruby-lang.org/ja/master/index.html)

## Mailing list

There is a mailing list to discuss Ruby. To subscribe to this list, please
send the following phrase:

    join

in the mail subject (not body) to the address [ruby-talk-request@ml.ruby-lang.org].

[ruby-talk-request@ml.ruby-lang.org]: mailto:ruby-talk-request@ml.ruby-lang.org?subject=join

## Copying

See the file [COPYING](rdoc-ref:COPYING).

## Feedback

Questions about the Ruby language can be asked on the [Ruby-Talk](https://www.ruby-lang.org/en/community/mailing-lists) mailing list
or on websites like https://stackoverflow.com.

Bugs should be reported at https://bugs.ruby-lang.org. Read ["Reporting Issues"](https://docs.ruby-lang.org/en/master/contributing/reporting_issues_md.html) for more information.

## Contributing

See ["Contributing to Ruby"](https://docs.ruby-lang.org/en/master/contributing_md.html), which includes setup and build instructions.

## The Author

Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995.

<matz@ruby-lang.org>
PK$J[�b�e��!share/doc/alt-ruby34-libs/NEWS.mdnu�[���# NEWS for Ruby 3.4.0

This document is a list of user-visible feature changes
since the **3.3.0** release, except for bug fixes.

Note that each entry is kept to a minimum, see links for details.

## Language changes

* `it` is added to reference a block parameter. [[Feature #18980]]

* String literals in files without a `frozen_string_literal` comment now emit a deprecation warning
  when they are mutated.
  These warnings can be enabled with `-W:deprecated` or by setting `Warning[:deprecated] = true`.
  To disable this change, you can run Ruby with the `--disable-frozen-string-literal`
  command line argument. [[Feature #20205]]

    * `String#+@` now duplicates when mutating the string would emit
      a deprecation warning, offered as a replacement for the
      `str.dup if str.frozen?` pattern.

* Keyword splatting `nil` when calling methods is now supported.
  `**nil` is treated similarly to `**{}`, passing no keywords,
  and not calling any conversion methods.  [[Bug #20064]]

* Block passing is no longer allowed in index assignment
  (e.g. `a[0, &b] = 1`).  [[Bug #19918]]

* Keyword arguments are no longer allowed in index assignment
  (e.g. `a[0, kw: 1] = 2`).  [[Bug #20218]]

* The toplevel name `::Ruby` is reserved now, and the definition will be warned
  when `Warning[:deprecated]`.  [[Feature #20884]]

## Core classes updates

Note: We're only listing outstanding class updates.


* Array

    * `Array#fetch_values` was added. [[Feature #20702]]

* Exception

    * `Exception#set_backtrace` now accepts arrays of `Thread::Backtrace::Location`.
      `Kernel#raise`, `Thread#raise` and `Fiber#raise` also accept this new format. [[Feature #13557]]

* Fiber::Scheduler

    * An optional `Fiber::Scheduler#blocking_operation_wait` hook allows blocking operations to be moved out of the
      event loop in order to reduce latency and improve multi-core processor utilization. [[Feature #20876]]

* GC

    * `GC.config` added to allow setting configuration variables on the Garbage
      Collector. [[Feature #20443]]

    * GC configuration parameter `rgengc_allow_full_mark` introduced.  When `false`
      GC will only mark young objects. Default is `true`.  [[Feature #20443]]

* Hash

    * `Hash.new` now accepts an optional `capacity:` argument, to preallocate the hash with a given capacity.
      This can improve performance when building large hashes incrementally by saving on reallocation and
      rehashing of keys. [[Feature #19236]]

* IO::Buffer

    * `IO::Buffer#copy` can release the GVL, allowing other threads to run while copying data. [[Feature #20902]]

* Integer

    * `Integer#**` used to return `Float::INFINITY` when the return value is large, but now returns an `Integer`.
      If the return value is extremely large, it raises an exception.
      [[Feature #20811]]

* MatchData

    * `MatchData#bytebegin` and `MatchData#byteend` have been added. [[Feature #20576]]

* Object

    * `Object#singleton_method` now returns methods in modules prepended to or included in the
      receiver's singleton class. [[Bug #20620]]

        ```rb
        o = Object.new
        o.extend(Module.new{def a = 1})
        o.singleton_method(:a).call #=> 1
        ```

* Ractor

    * `require` in Ractor is allowed. The requiring process will be run on
      the main Ractor.
      `Ractor._require(feature)` is added to run requiring process on the
      main Ractor.
      [[Feature #20627]]

    * `Ractor.main?` is added. [[Feature #20627]]

    * `Ractor.[]` and `Ractor.[]=` are added to access the ractor local storage
      of the current Ractor. [[Feature #20715]]

    * `Ractor.store_if_absent(key){ init }` is added to initialize ractor local
      variables in thread-safety. [[Feature #20875]]

* Range

    * `Range#size` now raises `TypeError` if the range is not iterable. [[Misc #18984]]
    * `Range#step` now consistently has a semantics of iterating by using `+` operator
      for all types, not only numerics. [[Feature #18368]]

        ```ruby
        (Time.utc(2022, 2, 24)..).step(24*60*60).take(3)
        #=> [2022-02-24 00:00:00 UTC, 2022-02-25 00:00:00 UTC, 2022-02-26 00:00:00 UTC]
        ```

* Rational

    * `Rational#**` used to return `Float::INFINITY` or `Float::NAN`
      when the numerator of the return value is large, but now returns an `Rational`.
      If it is extremely large, it raises an exception. [[Feature #20811]]

* RubyVM::AbstractSyntaxTree

    * Add `RubyVM::AbstractSyntaxTree::Node#locations` method which returns location objects
      associated with the AST node. [[Feature #20624]]
    * Add `RubyVM::AbstractSyntaxTree::Location` class which holds location information. [[Feature #20624]]


* String

    * `String#append_as_bytes` was added to more easily and efficiently work with binary buffers and protocols.
      It directly concatenate the arguments into the string without any encoding validation or conversion.
      [[Feature #20594]]

* Symbol

    * The string returned by `Symbol#to_s` now emits a deprecation warning when mutated, and will be
      frozen in a future version of Ruby.
      These warnings can be enabled with `-W:deprecated` or by setting `Warning[:deprecated] = true`.
      [[Feature #20350]]

* Time

    * On Windows, now `Time#zone` encodes the system timezone name in UTF-8
      instead of the active code page, if it contains non-ASCII characters.
      [[Bug #20929]]

    * `Time#xmlschema`, and its `Time#iso8601` alias have been moved into the core Time
      class while previously it was an extension provided by the `time` gem. [[Feature #20707]]

* Warning

    * Add `Warning.categories` method which returns a list of possible warning categories.
      [[Feature #20293]]

## Stdlib updates

We only list stdlib changes that are notable feature changes.

* RubyGems
    * Add `--attestation` option to gem push. It enabled to store signature of build artifact to sigstore.dev.

* Bundler
    * Add a `lockfile_checksums` configuration to include checksums in fresh lockfiles.
    * Add bundle lock `--add-checksums` to add checksums to an existing lockfile.

* JSON

    * Performance improvements `JSON.parse` about 1.5 times faster than json-2.7.x.

* Tempfile

    * The keyword argument `anonymous: true` is implemented for Tempfile.create.
      `Tempfile.create(anonymous: true)` removes the created temporary file immediately.
      So applications don't need to remove the file.
      [[Feature #20497]]

* win32/sspi.rb

    * This library is now extracted from the Ruby repository to [ruby/net-http-sspi].
      [[Feature #20775]]

* Socket

    * `Socket::ResolutionError` and `Socket::ResolutionError#error_code` was added.
      [[Feature #20018]]

* IRB

    * Interactive method completion is now improved with type information by default.
      [[Feature #20778]]

Other changes are listed in the following sections. we also listed release history from the previous bundled version that is Ruby 3.3.0 if it has GitHub releases.

The following default gem is added.

* win32-registry 0.1.0

The following default gems are updated.

* [RubyGems][RubyGems] 3.6.2
    * 3.5.3 to [v3.5.4][RubyGems-v3.5.4], [v3.5.5][RubyGems-v3.5.5], [v3.5.6][RubyGems-v3.5.6], [v3.5.7][RubyGems-v3.5.7], [v3.5.8][RubyGems-v3.5.8], [v3.5.9][RubyGems-v3.5.9], [v3.5.10][RubyGems-v3.5.10], [v3.5.11][RubyGems-v3.5.11], [v3.5.12][RubyGems-v3.5.12], [v3.5.13][RubyGems-v3.5.13], [v3.5.14][RubyGems-v3.5.14], [v3.5.15][RubyGems-v3.5.15], [v3.5.16][RubyGems-v3.5.16], [v3.5.17][RubyGems-v3.5.17], [v3.5.18][RubyGems-v3.5.18], [v3.5.19][RubyGems-v3.5.19], [v3.5.20][RubyGems-v3.5.20], [v3.5.21][RubyGems-v3.5.21], [v3.5.22][RubyGems-v3.5.22], [v3.5.23][RubyGems-v3.5.23], [v3.6.0][RubyGems-v3.6.0], [v3.6.1][RubyGems-v3.6.1], [v3.6.2][RubyGems-v3.6.2]
* [benchmark][benchmark] 0.4.0
    * 0.3.0 to [v0.4.0][benchmark-v0.4.0]
* [bundler][bundler] 2.6.2
    * 2.5.3 to [v2.5.4][bundler-v2.5.4], [v2.5.5][bundler-v2.5.5], [v2.5.6][bundler-v2.5.6], [v2.5.7][bundler-v2.5.7], [v2.5.8][bundler-v2.5.8], [v2.5.9][bundler-v2.5.9], [v2.5.10][bundler-v2.5.10], [v2.5.11][bundler-v2.5.11], [v2.5.12][bundler-v2.5.12], [v2.5.13][bundler-v2.5.13], [v2.5.14][bundler-v2.5.14], [v2.5.15][bundler-v2.5.15], [v2.5.16][bundler-v2.5.16], [v2.5.17][bundler-v2.5.17], [v2.5.18][bundler-v2.5.18], [v2.5.19][bundler-v2.5.19], [v2.5.20][bundler-v2.5.20], [v2.5.21][bundler-v2.5.21], [v2.5.22][bundler-v2.5.22], [v2.5.23][bundler-v2.5.23], [v2.6.0][bundler-v2.6.0], [v2.6.1][bundler-v2.6.1], [v2.6.2][bundler-v2.6.2]
* [date][date] 3.4.1
    * 3.3.4 to [v3.4.0][date-v3.4.0], [v3.4.1][date-v3.4.1]
* [delegate][delegate] 0.4.0
    * 0.3.1 to [v0.4.0][delegate-v0.4.0]
* [did_you_mean][did_you_mean] 2.0.0
    * 1.6.3 to [v2.0.0][did_you_mean-v2.0.0]
* [digest][digest] 3.2.0
    * 3.1.1 to [v3.2.0.pre0][digest-v3.2.0.pre0], [v3.2.0][digest-v3.2.0]
* [erb][erb] 4.0.4
    * 4.0.3 to [v4.0.4][erb-v4.0.4]
* [error_highlight][error_highlight] 0.7.0
    * 0.6.0 to [v0.7.0][error_highlight-v0.7.0]
* [etc][etc] 1.4.5
    * 1.4.3 to [v1.4.4][etc-v1.4.4], [v1.4.5][etc-v1.4.5]
* [fcntl][fcntl] 1.2.0
    * 1.1.0 to [v1.2.0][fcntl-v1.2.0]
* [fiddle][fiddle] 1.1.6
    * 1.1.2 to [v1.1.3][fiddle-v1.1.3], [v1.1.4][fiddle-v1.1.4], [v1.1.5][fiddle-v1.1.5], [v1.1.6][fiddle-v1.1.6]
* [fileutils][fileutils] 1.7.3
    * 1.7.2 to [v1.7.3][fileutils-v1.7.3]
* [io-console][io-console] 0.8.0
    * 0.7.1 to [v0.7.2][io-console-v0.7.2], [v0.8.0.beta1][io-console-v0.8.0.beta1], [v0.8.0][io-console-v0.8.0]
* [io-nonblock][io-nonblock] 0.3.1
    * 0.3.0 to [v0.3.1][io-nonblock-v0.3.1]
* [ipaddr][ipaddr] 1.2.7
    * 1.2.6 to [v1.2.7][ipaddr-v1.2.7]
* [irb][irb] 1.14.3
    * 1.11.0 to [v1.11.1][irb-v1.11.1], [v1.11.2][irb-v1.11.2], [v1.12.0][irb-v1.12.0], [v1.13.0][irb-v1.13.0], [v1.13.1][irb-v1.13.1], [v1.13.2][irb-v1.13.2], [v1.14.0][irb-v1.14.0], [v1.14.1][irb-v1.14.1], [v1.14.2][irb-v1.14.2], [v1.14.3][irb-v1.14.3]
* [json][json] 2.9.1
    * 2.7.1 to [v2.7.2][json-v2.7.2], [v2.7.3.rc1][json-v2.7.3.rc1], [v2.7.3][json-v2.7.3], [v2.7.4][json-v2.7.4], [v2.7.5][json-v2.7.5], [v2.7.6][json-v2.7.6], [v2.8.0][json-v2.8.0], [v2.8.1][json-v2.8.1], [v2.8.2][json-v2.8.2], [v2.9.0][json-v2.9.0], [v2.9.1][json-v2.9.1]
* [logger][logger] 1.6.4
    * 1.6.0 to [v1.6.1][logger-v1.6.1], [v1.6.2][logger-v1.6.2], [v1.6.3][logger-v1.6.3], [v1.6.4][logger-v1.6.4]
* [net-http][net-http] 0.6.0
    * 0.4.0 to [v0.4.1][net-http-v0.4.1], [v0.5.0][net-http-v0.5.0], [v0.6.0][net-http-v0.6.0]
* [open-uri][open-uri] 0.5.0
    * 0.4.1 to [v0.5.0][open-uri-v0.5.0]
* [optparse][optparse] 0.6.0
    * 0.4.0 to [v0.5.0][optparse-v0.5.0], [v0.6.0][optparse-v0.6.0]
* [ostruct][ostruct] 0.6.1
    * 0.6.0 to [v0.6.1][ostruct-v0.6.1]
* [pathname][pathname] 0.4.0
    * 0.3.0 to [v0.4.0][pathname-v0.4.0]
* [pp][pp] 0.6.2
    * 0.5.0 to [v0.6.0][pp-v0.6.0], [v0.6.1][pp-v0.6.1], [v0.6.2][pp-v0.6.2]
* [prism][prism] 1.2.0
    * 0.19.0 to [v0.20.0][prism-v0.20.0], [v0.21.0][prism-v0.21.0], [v0.22.0][prism-v0.22.0], [v0.23.0][prism-v0.23.0], [v0.24.0][prism-v0.24.0], [v0.25.0][prism-v0.25.0], [v0.26.0][prism-v0.26.0], [v0.27.0][prism-v0.27.0], [v0.28.0][prism-v0.28.0], [v0.29.0][prism-v0.29.0], [v0.30.0][prism-v0.30.0], [v1.0.0][prism-v1.0.0], [v1.1.0][prism-v1.1.0], [v1.2.0][prism-v1.2.0]
* [pstore][pstore] 0.1.4
    * 0.1.3 to [v0.1.4][pstore-v0.1.4]
* [psych][psych] 5.2.2
    * 5.1.2 to [v5.2.0.beta1][psych-v5.2.0.beta1], [v5.2.0.beta2][psych-v5.2.0.beta2], [v5.2.0.beta3][psych-v5.2.0.beta3], [v5.2.0.beta4][psych-v5.2.0.beta4], [v5.2.0.beta5][psych-v5.2.0.beta5], [v5.2.0.beta6][psych-v5.2.0.beta6], [v5.2.0.beta7][psych-v5.2.0.beta7], [v5.2.0][psych-v5.2.0], [v5.2.1][psych-v5.2.1], [v5.2.2][psych-v5.2.2]
* [rdoc][rdoc] 6.10.0
    * 6.6.2 to [v6.7.0][rdoc-v6.7.0], [v6.8.0][rdoc-v6.8.0], [v6.8.1][rdoc-v6.8.1], [v6.9.0][rdoc-v6.9.0], [v6.9.1][rdoc-v6.9.1], [v6.10.0][rdoc-v6.10.0]
* [reline][reline] 0.6.0
    * 0.4.1 to [v0.4.2][reline-v0.4.2], [v0.4.3][reline-v0.4.3], [v0.5.0.pre.1][reline-v0.5.0.pre.1], [v0.5.0][reline-v0.5.0], [v0.5.1][reline-v0.5.1], [v0.5.2][reline-v0.5.2], [v0.5.3][reline-v0.5.3], [v0.5.4][reline-v0.5.4], [v0.5.5][reline-v0.5.5], [v0.5.6][reline-v0.5.6], [v0.5.7][reline-v0.5.7], [v0.5.8][reline-v0.5.8], [v0.5.9][reline-v0.5.9], [v0.5.10][reline-v0.5.10], [v0.5.11][reline-v0.5.11], [v0.5.12][reline-v0.5.12], [v0.6.0][reline-v0.6.0]
* [resolv][resolv] 0.6.0
    * 0.3.0 to [v0.4.0][resolv-v0.4.0], [v0.5.0][resolv-v0.5.0], [v0.6.0][resolv-v0.6.0]
* [securerandom][securerandom] 0.4.1
    * 0.3.1 to [v0.3.2][securerandom-v0.3.2], [v0.4.0][securerandom-v0.4.0], [v0.4.1][securerandom-v0.4.1]
* [set][set] 1.1.1
    * 1.1.0 to [v1.1.1][set-v1.1.1]
* [shellwords][shellwords] 0.2.2
    * 0.2.0 to [v0.2.1][shellwords-v0.2.1], [v0.2.2][shellwords-v0.2.2]
* [singleton][singleton] 0.3.0
    * 0.2.0 to [v0.3.0][singleton-v0.3.0]
* [stringio][stringio] 3.1.2
    * 3.1.0 to [v3.1.1][stringio-v3.1.1], [v3.1.2][stringio-v3.1.2]
* [strscan][strscan] 3.1.2
    * 3.0.7 to [v3.0.8][strscan-v3.0.8], [v3.0.9][strscan-v3.0.9], [v3.1.0][strscan-v3.1.0], [v3.1.1][strscan-v3.1.1], [v3.1.2][strscan-v3.1.2]
* [syntax_suggest][syntax_suggest] 2.0.2
    * 2.0.0 to [v2.0.1][syntax_suggest-v2.0.1], [v2.0.2][syntax_suggest-v2.0.2]
* [tempfile][tempfile] 0.3.1
    * 0.2.1 to [v0.3.0][tempfile-v0.3.0], [v0.3.1][tempfile-v0.3.1]
* [time][time] 0.4.1
    * 0.3.0 to [v0.4.0][time-v0.4.0], [v0.4.1][time-v0.4.1]
* [timeout][timeout] 0.4.3
    * 0.4.1 to [v0.4.2][timeout-v0.4.2], [v0.4.3][timeout-v0.4.3]
* [tmpdir][tmpdir] 0.3.1
    * 0.2.0 to [v0.3.0][tmpdir-v0.3.0], [v0.3.1][tmpdir-v0.3.1]
* [uri][uri] 1.0.2
    * 0.13.0 to [v0.13.1][uri-v0.13.1], [v1.0.0][uri-v1.0.0], [v1.0.1][uri-v1.0.1], [v1.0.2][uri-v1.0.2]
* [win32ole][win32ole] 1.9.1
    * 1.8.10 to [v1.9.0][win32ole-v1.9.0], [v1.9.1][win32ole-v1.9.1]
* [yaml][yaml] 0.4.0
    * 0.3.0 to [v0.4.0][yaml-v0.4.0]
* [zlib][zlib] 3.2.1
    * 3.1.0 to [v3.1.1][zlib-v3.1.1], [v3.2.0][zlib-v3.2.0], [v3.2.1][zlib-v3.2.1]

The following bundled gem is added.

* [repl_type_completor][repl_type_completor] 0.1.9

The following bundled gems are updated.

* [minitest][minitest] 5.25.4
    * 5.20.0 to [v5.25.4][minitest-v5.25.4]
* [power_assert][power_assert] 2.0.5
    * 2.0.3 to [v2.0.4][power_assert-v2.0.4], [v2.0.5][power_assert-v2.0.5]
* [rake][rake] 13.2.1
    * 13.1.0 to [v13.2.0][rake-v13.2.0], [v13.2.1][rake-v13.2.1]
* [test-unit][test-unit] 3.6.7
    * 3.6.1 to [3.6.2][test-unit-3.6.2], [3.6.3][test-unit-3.6.3], [3.6.4][test-unit-3.6.4], [3.6.5][test-unit-3.6.5], [3.6.6][test-unit-3.6.6], [3.6.7][test-unit-3.6.7]
* [rexml][rexml] 3.4.0
    * 3.2.6 to [v3.2.7][rexml-v3.2.7], [v3.2.8][rexml-v3.2.8], [v3.2.9][rexml-v3.2.9], [v3.3.0][rexml-v3.3.0], [v3.3.1][rexml-v3.3.1], [v3.3.2][rexml-v3.3.2], [v3.3.3][rexml-v3.3.3], [v3.3.4][rexml-v3.3.4], [v3.3.5][rexml-v3.3.5], [v3.3.6][rexml-v3.3.6], [v3.3.7][rexml-v3.3.7], [v3.3.8][rexml-v3.3.8], [v3.3.9][rexml-v3.3.9], [v3.4.0][rexml-v3.4.0]
* [rss][rss] 0.3.1
    * 0.3.0 to [0.3.1][rss-0.3.1]
* [net-ftp][net-ftp] 0.3.8
    * 0.3.3 to [v0.3.4][net-ftp-v0.3.4], [v0.3.5][net-ftp-v0.3.5], [v0.3.6][net-ftp-v0.3.6], [v0.3.7][net-ftp-v0.3.7], [v0.3.8][net-ftp-v0.3.8]
* [net-imap][net-imap] 0.5.4
    * 0.4.9 to [v0.4.9.1][net-imap-v0.4.9.1], [v0.4.10][net-imap-v0.4.10], [v0.4.11][net-imap-v0.4.11], [v0.4.12][net-imap-v0.4.12], [v0.4.13][net-imap-v0.4.13], [v0.4.14][net-imap-v0.4.14], [v0.4.15][net-imap-v0.4.15], [v0.4.16][net-imap-v0.4.16], [v0.4.17][net-imap-v0.4.17], [v0.5.0][net-imap-v0.5.0], [v0.4.18][net-imap-v0.4.18], [v0.5.1][net-imap-v0.5.1], [v0.5.2][net-imap-v0.5.2], [v0.5.3][net-imap-v0.5.3], [v0.5.4][net-imap-v0.5.4]
* [net-smtp][net-smtp] 0.5.0
    * 0.4.0 to [v0.4.0.1][net-smtp-v0.4.0.1], [v0.5.0][net-smtp-v0.5.0]
* [prime][prime] 0.1.3
    * 0.1.2 to [v0.1.3][prime-v0.1.3]
* [rbs][rbs] 3.8.0
    * 3.4.0 to [v3.4.1][rbs-v3.4.1], [v3.4.2][rbs-v3.4.2], [v3.4.3][rbs-v3.4.3], [v3.4.4][rbs-v3.4.4], [v3.5.0.pre.1][rbs-v3.5.0.pre.1], [v3.5.0.pre.2][rbs-v3.5.0.pre.2], [v3.5.0][rbs-v3.5.0], [v3.5.1][rbs-v3.5.1], [v3.5.2][rbs-v3.5.2], [v3.5.3][rbs-v3.5.3], [v3.6.0.dev.1][rbs-v3.6.0.dev.1], [v3.6.0.pre.1][rbs-v3.6.0.pre.1], [v3.6.0.pre.2][rbs-v3.6.0.pre.2], [v3.6.0.pre.3][rbs-v3.6.0.pre.3], [v3.6.0][rbs-v3.6.0], [v3.6.1][rbs-v3.6.1], [v3.7.0.dev.1][rbs-v3.7.0.dev.1], [v3.7.0.pre.1][rbs-v3.7.0.pre.1], [v3.7.0][rbs-v3.7.0], [v3.8.0.pre.1][rbs-v3.8.0.pre.1] [v3.8.0][rbs-v3.8.0]
* [typeprof][typeprof] 0.30.1
    * 0.21.9 to [v0.30.1][typeprof-v0.30.1]
* [debug][debug] 1.10.0
    * 1.9.1 to [v1.9.2][debug-v1.9.2], [v1.10.0][debug-v1.10.0]
* [racc][racc] 1.8.1
    * 1.7.3 to [v1.8.0][racc-v1.8.0], [v1.8.1][racc-v1.8.1]

The following bundled gems are promoted from default gems.

* [mutex_m][mutex_m] 0.3.0
    * 0.2.0 to [v0.3.0][mutex_m-v0.3.0]
* [getoptlong][getoptlong] 0.2.1
* [base64][base64] 0.2.0
* [bigdecimal][bigdecimal] 3.1.8
    * 3.1.5 to [v3.1.6][bigdecimal-v3.1.6], [v3.1.7][bigdecimal-v3.1.7], [v3.1.8][bigdecimal-v3.1.8]
* [observer][observer] 0.1.2
* [abbrev][abbrev] 0.1.2
* [resolv-replace][resolv-replace] 0.1.1
* [rinda][rinda] 0.2.0
* [drb][drb] 2.2.1
    * 2.2.0 to [v2.2.1][drb-v2.2.1]
* [nkf][nkf] 0.2.0
    * 0.1.3 to [v0.2.0][nkf-v0.2.0]
* [syslog][syslog] 0.2.0
    * 0.1.2 to [v0.2.0][syslog-v0.2.0]
* [csv][csv] 3.3.2
    * 3.2.8 to [v3.2.9][csv-v3.2.9], [v3.3.0][csv-v3.3.0], [v3.3.1][csv-v3.3.1], [v3.3.2][csv-v3.3.2]

## Supported platforms

## Compatibility issues

* Error messages and backtrace displays have been changed.

    * Use a single quote instead of a backtick as an opening quote. [[Feature #16495]]
    * Display a class name before a method name (only when the class has a permanent name). [[Feature #19117]]
    * Extra `rescue`/`ensure` frames are no longer available on the backtrace. [[Feature #20275]]
    * `Kernel#caller`, `Thread::Backtrace::Location`’s methods, etc. are also changed accordingly.

        Old:
        ```
        test.rb:1:in `foo': undefined method `time' for an instance of Integer
                from test.rb:2:in `<main>'
        ```

        New:
        ```
        test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer
                from test.rb:2:in '<main>'
        ```

* `Hash#inspect` rendering have been changed. [[Bug #20433]]

    * Symbol keys are displayed using the modern symbol key syntax: `"{user: 1}"`
    * Other keys now have spaces around `=>`: `'{"user" => 1}'`, while previously they didn't: `'{"user"=>1}'`

* `Kernel#Float()` now accepts a decimal string with decimal part omitted. [[Feature #20705]]

    ```rb
    Float("1.")    #=> 1.0 (previously, an ArgumentError was raised)
    Float("1.E-1") #=> 0.1 (previously, an ArgumentError was raised)
    ```

* `String#to_f` now accepts a decimal string with decimal part omitted. [[Feature #20705]]
  Note that the result changes when an exponent is specified.

    ```rb
    "1.".to_f    #=> 1.0
    "1.E-1".to_f #=> 0.1 (previously, 1.0 was returned)
    ```

* `Refinement#refined_class` has been removed. [[Feature #19714]]

## Stdlib compatibility issues

* DidYouMean

    * `DidYouMean::SPELL_CHECKERS[]=` and `DidYouMean::SPELL_CHECKERS.merge!` are removed.

* Net::HTTP

    * Removed the following deprecated constants:
        * `Net::HTTP::ProxyMod`
        * `Net::NetPrivate::HTTPRequest`
        * `Net::HTTPInformationCode`
        * `Net::HTTPSuccessCode`
        * `Net::HTTPRedirectionCode`
        * `Net::HTTPRetriableCode`
        * `Net::HTTPClientErrorCode`
        * `Net::HTTPFatalErrorCode`
        * `Net::HTTPServerErrorCode`
        * `Net::HTTPResponseReceiver`
        * `Net::HTTPResponceReceiver`

      These constants were deprecated from 2012.

* Timeout

    * Reject negative values for `Timeout.timeout`. [[Bug #20795]]

* URI

    * Switched default parser to RFC 3986 compliant from RFC 2396 compliant.
      [[Bug #19266]]

## C API updates

* `rb_newobj` and `rb_newobj_of` (and corresponding macros `RB_NEWOBJ`, `RB_NEWOBJ_OF`, `NEWOBJ`, `NEWOBJ_OF`) have been removed. [[Feature #20265]]
* Removed deprecated function `rb_gc_force_recycle`. [[Feature #18290]]

## Implementation improvements

* The default parser is now Prism.
  To use the conventional parser, use the command-line argument `--parser=parse.y`.
  [[Feature #20564]]

* Happy Eyeballs version 2 (RFC8305), an algorithm that ensures faster and more reliable connections
  by attempting IPv6 and IPv4 concurrently, is used in `Socket.tcp` and `TCPSocket.new`.
  To disable it globally, set the environment variable `RUBY_TCP_NO_FAST_FALLBACK=1` or
  call `Socket.tcp_fast_fallback=false`.
  Or to disable it on a per-method basis, use the keyword argument `fast_fallback: false`.
  [[Feature #20108]] [[Feature #20782]]

* Alternative garbage collector (GC) implementations can be loaded dynamically
  through the modular garbage collector feature. To enable this feature,
  configure Ruby with `--with-modular-gc` at build time. GC libraries can be
  loaded at runtime using the environment variable `RUBY_GC_LIBRARY`.
  [[Feature #20351]]

* Ruby's built-in garbage collector has been split into a separate file at
  `gc/default/default.c` and interacts with Ruby using an API defined in
  `gc/gc_impl.h`. The built-in garbage collector can now also be built as a
  library using `make modular-gc MODULAR_GC=default` and enabled using the
  environment variable `RUBY_GC_LIBRARY=default`. [[Feature #20470]]

* An experimental GC library is provided based on [MMTk](https://www.mmtk.io/).
  This GC library can be built using `make modular-gc MODULAR_GC=mmtk` and
  enabled using the environment variable `RUBY_GC_LIBRARY=mmtk`. This requires
  the Rust toolchain on the build machine. [[Feature #20860]]

### YJIT

#### New features

* Command-line options
    * `--yjit-mem-size` introduces a unified memory limit (default 128MiB) to track total YJIT memory usage,
      providing a more intuitive alternative to the old `--yjit-exec-mem-size` option.
    * `--yjit-trace-exits=COUNTER` allows tracing of counted exits and fallbacks.
    * `--yjit-perf=codegen` allows profiling of JIT code based on YJIT's codegen functions.
    * `--yjit-log` enables a compilation log to track what gets compiled.
* Ruby API
    * `RubyVM::YJIT.enable(log: true)` also enables a compilation log.
    * `RubyVM::YJIT.log` provides access to the tail of the compilation log at run-time.
* YJIT stats
    * `RubyVM::YJIT.runtime_stats` now always provides additional statistics on
      invalidation, inlining, and metadata encoding.
    * `RubyVM::YJIT.runtime_stats[:iseq_calls]` is added to profile non-inlined Ruby method calls.
    * `RubyVM::YJIT.runtime_stats[:cfunc_calls]` is truncated to the top 20 entries for better performance.

#### New optimizations

* Compressed context reduces memory needed to store YJIT metadata
* Allocate registers for local variables and Ruby method arguments
* When YJIT is enabled, use more Core primitives written in Ruby:
    * `Array#each`, `Array#select`, `Array#map` rewritten in Ruby for better performance [[Feature #20182]].
* Ability to inline small/trivial methods such as:
    * Empty methods
    * Methods returning a constant
    * Methods returning `self`
    * Methods directly returning an argument
* Specialized codegen for many more runtime methods
* Optimize `String#getbyte`, `String#setbyte` and other string methods
* Optimize bitwise operations to speed up low-level bit/byte manipulation
* Support shareable constants in multi-ractor mode
* Various other incremental optimizations

## Miscellaneous changes

* Passing a block to a method which doesn't use the passed block will show
  a warning on verbose mode (`-w`).
  In connection with this, a new `strict_unused_block` warning category was introduced.
  Turn them on with `-W:strict_unused_block` or `Warning[:strict_unused_block] = true`.
  [[Feature #15554]]

* Redefining some core methods that are specially optimized by the interpreter
  and JIT like `String#freeze` or `Integer#+` now emits a performance class
  warning (`-W:performance` or `Warning[:performance] = true`).
  [[Feature #20429]]

[Feature #13557]: https://bugs.ruby-lang.org/issues/13557
[Feature #15554]: https://bugs.ruby-lang.org/issues/15554
[Feature #16495]: https://bugs.ruby-lang.org/issues/16495
[Feature #18290]: https://bugs.ruby-lang.org/issues/18290
[Feature #18368]: https://bugs.ruby-lang.org/issues/18368
[Feature #18980]: https://bugs.ruby-lang.org/issues/18980
[Misc #18984]:    https://bugs.ruby-lang.org/issues/18984
[Feature #19117]: https://bugs.ruby-lang.org/issues/19117
[Feature #19236]: https://bugs.ruby-lang.org/issues/19236
[Bug #19266]:     https://bugs.ruby-lang.org/issues/19266
[Feature #19714]: https://bugs.ruby-lang.org/issues/19714
[Bug #19918]:     https://bugs.ruby-lang.org/issues/19918
[Feature #20018]: https://bugs.ruby-lang.org/issues/20018
[Bug #20064]:     https://bugs.ruby-lang.org/issues/20064
[Feature #20108]: https://bugs.ruby-lang.org/issues/20108
[Feature #20182]: https://bugs.ruby-lang.org/issues/20182
[Feature #20205]: https://bugs.ruby-lang.org/issues/20205
[Bug #20218]:     https://bugs.ruby-lang.org/issues/20218
[Feature #20265]: https://bugs.ruby-lang.org/issues/20265
[Feature #20275]: https://bugs.ruby-lang.org/issues/20275
[Feature #20293]: https://bugs.ruby-lang.org/issues/20293
[Feature #20350]: https://bugs.ruby-lang.org/issues/20350
[Feature #20351]: https://bugs.ruby-lang.org/issues/20351
[Feature #20429]: https://bugs.ruby-lang.org/issues/20429
[Bug #20433]:     https://bugs.ruby-lang.org/issues/20433
[Feature #20443]: https://bugs.ruby-lang.org/issues/20443
[Feature #20470]: https://bugs.ruby-lang.org/issues/20470
[Feature #20497]: https://bugs.ruby-lang.org/issues/20497
[Feature #20564]: https://bugs.ruby-lang.org/issues/20564
[Feature #20576]: https://bugs.ruby-lang.org/issues/20576
[Feature #20594]: https://bugs.ruby-lang.org/issues/20594
[Bug #20620]:     https://bugs.ruby-lang.org/issues/20620
[Feature #20624]: https://bugs.ruby-lang.org/issues/20624
[Feature #20627]: https://bugs.ruby-lang.org/issues/20627
[Feature #20702]: https://bugs.ruby-lang.org/issues/20702
[Feature #20705]: https://bugs.ruby-lang.org/issues/20705
[Feature #20707]: https://bugs.ruby-lang.org/issues/20707
[Feature #20715]: https://bugs.ruby-lang.org/issues/20715
[Feature #20775]: https://bugs.ruby-lang.org/issues/20775
[Feature #20778]: https://bugs.ruby-lang.org/issues/20778
[Feature #20782]: https://bugs.ruby-lang.org/issues/20782
[Bug #20795]:     https://bugs.ruby-lang.org/issues/20795
[Feature #20811]: https://bugs.ruby-lang.org/issues/20811
[Feature #20860]: https://bugs.ruby-lang.org/issues/20860
[Feature #20875]: https://bugs.ruby-lang.org/issues/20875
[Feature #20876]: https://bugs.ruby-lang.org/issues/20876
[Feature #20884]: https://bugs.ruby-lang.org/issues/20884
[Feature #20902]: https://bugs.ruby-lang.org/issues/20902
[Bug #20929]:     https://bugs.ruby-lang.org/issues/20929
[RubyGems-v3.5.4]: https://github.com/rubygems/rubygems/releases/tag/v3.5.4
[RubyGems-v3.5.5]: https://github.com/rubygems/rubygems/releases/tag/v3.5.5
[RubyGems-v3.5.6]: https://github.com/rubygems/rubygems/releases/tag/v3.5.6
[RubyGems-v3.5.7]: https://github.com/rubygems/rubygems/releases/tag/v3.5.7
[RubyGems-v3.5.8]: https://github.com/rubygems/rubygems/releases/tag/v3.5.8
[RubyGems-v3.5.9]: https://github.com/rubygems/rubygems/releases/tag/v3.5.9
[RubyGems-v3.5.10]: https://github.com/rubygems/rubygems/releases/tag/v3.5.10
[RubyGems-v3.5.11]: https://github.com/rubygems/rubygems/releases/tag/v3.5.11
[RubyGems-v3.5.12]: https://github.com/rubygems/rubygems/releases/tag/v3.5.12
[RubyGems-v3.5.13]: https://github.com/rubygems/rubygems/releases/tag/v3.5.13
[RubyGems-v3.5.14]: https://github.com/rubygems/rubygems/releases/tag/v3.5.14
[RubyGems-v3.5.15]: https://github.com/rubygems/rubygems/releases/tag/v3.5.15
[RubyGems-v3.5.16]: https://github.com/rubygems/rubygems/releases/tag/v3.5.16
[RubyGems-v3.5.17]: https://github.com/rubygems/rubygems/releases/tag/v3.5.17
[RubyGems-v3.5.18]: https://github.com/rubygems/rubygems/releases/tag/v3.5.18
[RubyGems-v3.5.19]: https://github.com/rubygems/rubygems/releases/tag/v3.5.19
[RubyGems-v3.5.20]: https://github.com/rubygems/rubygems/releases/tag/v3.5.20
[RubyGems-v3.5.21]: https://github.com/rubygems/rubygems/releases/tag/v3.5.21
[RubyGems-v3.5.22]: https://github.com/rubygems/rubygems/releases/tag/v3.5.22
[RubyGems-v3.5.23]: https://github.com/rubygems/rubygems/releases/tag/v3.5.23
[RubyGems-v3.6.0]: https://github.com/rubygems/rubygems/releases/tag/v3.6.0
[RubyGems-v3.6.1]: https://github.com/rubygems/rubygems/releases/tag/v3.6.1
[RubyGems-v3.6.2]: https://github.com/rubygems/rubygems/releases/tag/v3.6.2
[benchmark-v0.4.0]: https://github.com/ruby/benchmark/releases/tag/v0.4.0
[bundler-v2.5.4]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.4
[bundler-v2.5.5]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.5
[bundler-v2.5.6]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.6
[bundler-v2.5.7]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.7
[bundler-v2.5.8]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.8
[bundler-v2.5.9]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.9
[bundler-v2.5.10]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.10
[bundler-v2.5.11]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.11
[bundler-v2.5.12]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.12
[bundler-v2.5.13]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.13
[bundler-v2.5.14]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.14
[bundler-v2.5.15]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.15
[bundler-v2.5.16]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.16
[bundler-v2.5.17]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.17
[bundler-v2.5.18]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.18
[bundler-v2.5.19]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.19
[bundler-v2.5.20]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.20
[bundler-v2.5.21]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.21
[bundler-v2.5.22]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.22
[bundler-v2.5.23]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.5.23
[bundler-v2.6.0]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.6.0
[bundler-v2.6.1]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.6.1
[bundler-v2.6.2]: https://github.com/rubygems/rubygems/releases/tag/bundler-v2.6.2
[date-v3.4.0]: https://github.com/ruby/date/releases/tag/v3.4.0
[date-v3.4.1]: https://github.com/ruby/date/releases/tag/v3.4.1
[delegate-v0.4.0]: https://github.com/ruby/delegate/releases/tag/v0.4.0
[did_you_mean-v2.0.0]: https://github.com/ruby/did_you_mean/releases/tag/v2.0.0
[digest-v3.2.0.pre0]: https://github.com/ruby/digest/releases/tag/v3.2.0.pre0
[digest-v3.2.0]: https://github.com/ruby/digest/releases/tag/v3.2.0
[erb-v4.0.4]: https://github.com/ruby/erb/releases/tag/v4.0.4
[etc-v1.4.4]: https://github.com/ruby/etc/releases/tag/v1.4.4
[etc-v1.4.5]: https://github.com/ruby/etc/releases/tag/v1.4.5
[fcntl-v1.2.0]: https://github.com/ruby/fcntl/releases/tag/v1.2.0
[fiddle-v1.1.3]: https://github.com/ruby/fiddle/releases/tag/v1.1.3
[fiddle-v1.1.4]: https://github.com/ruby/fiddle/releases/tag/v1.1.4
[fiddle-v1.1.5]: https://github.com/ruby/fiddle/releases/tag/v1.1.5
[fiddle-v1.1.6]: https://github.com/ruby/fiddle/releases/tag/v1.1.6
[fileutils-v1.7.3]: https://github.com/ruby/fileutils/releases/tag/v1.7.3
[io-console-v0.7.2]: https://github.com/ruby/io-console/releases/tag/v0.7.2
[io-console-v0.8.0.beta1]: https://github.com/ruby/io-console/releases/tag/v0.8.0.beta1
[io-console-v0.8.0]: https://github.com/ruby/io-console/releases/tag/v0.8.0
[io-nonblock-v0.3.1]: https://github.com/ruby/io-nonblock/releases/tag/v0.3.1
[ipaddr-v1.2.7]: https://github.com/ruby/ipaddr/releases/tag/v1.2.7
[irb-v1.11.1]: https://github.com/ruby/irb/releases/tag/v1.11.1
[irb-v1.11.2]: https://github.com/ruby/irb/releases/tag/v1.11.2
[irb-v1.12.0]: https://github.com/ruby/irb/releases/tag/v1.12.0
[irb-v1.13.0]: https://github.com/ruby/irb/releases/tag/v1.13.0
[irb-v1.13.1]: https://github.com/ruby/irb/releases/tag/v1.13.1
[irb-v1.13.2]: https://github.com/ruby/irb/releases/tag/v1.13.2
[irb-v1.14.0]: https://github.com/ruby/irb/releases/tag/v1.14.0
[irb-v1.14.1]: https://github.com/ruby/irb/releases/tag/v1.14.1
[irb-v1.14.2]: https://github.com/ruby/irb/releases/tag/v1.14.2
[irb-v1.14.3]: https://github.com/ruby/irb/releases/tag/v1.14.3
[json-v2.7.2]: https://github.com/ruby/json/releases/tag/v2.7.2
[json-v2.7.3.rc1]: https://github.com/ruby/json/releases/tag/v2.7.3.rc1
[json-v2.7.3]: https://github.com/ruby/json/releases/tag/v2.7.3
[json-v2.7.4]: https://github.com/ruby/json/releases/tag/v2.7.4
[json-v2.7.5]: https://github.com/ruby/json/releases/tag/v2.7.5
[json-v2.7.6]: https://github.com/ruby/json/releases/tag/v2.7.6
[json-v2.8.0]: https://github.com/ruby/json/releases/tag/v2.8.0
[json-v2.8.1]: https://github.com/ruby/json/releases/tag/v2.8.1
[json-v2.8.2]: https://github.com/ruby/json/releases/tag/v2.8.2
[json-v2.9.0]: https://github.com/ruby/json/releases/tag/v2.9.0
[json-v2.9.1]: https://github.com/ruby/json/releases/tag/v2.9.1
[logger-v1.6.1]: https://github.com/ruby/logger/releases/tag/v1.6.1
[logger-v1.6.2]: https://github.com/ruby/logger/releases/tag/v1.6.2
[logger-v1.6.3]: https://github.com/ruby/logger/releases/tag/v1.6.3
[logger-v1.6.4]: https://github.com/ruby/logger/releases/tag/v1.6.4
[net-http-v0.4.1]: https://github.com/ruby/net-http/releases/tag/v0.4.1
[net-http-v0.5.0]: https://github.com/ruby/net-http/releases/tag/v0.5.0
[net-http-v0.6.0]: https://github.com/ruby/net-http/releases/tag/v0.6.0
[open-uri-v0.5.0]: https://github.com/ruby/open-uri/releases/tag/v0.5.0
[optparse-v0.5.0]: https://github.com/ruby/optparse/releases/tag/v0.5.0
[optparse-v0.6.0]: https://github.com/ruby/optparse/releases/tag/v0.6.0
[ostruct-v0.6.1]: https://github.com/ruby/ostruct/releases/tag/v0.6.1
[pathname-v0.4.0]: https://github.com/ruby/pathname/releases/tag/v0.4.0
[pp-v0.6.0]: https://github.com/ruby/pp/releases/tag/v0.6.0
[pp-v0.6.1]: https://github.com/ruby/pp/releases/tag/v0.6.1
[pp-v0.6.2]: https://github.com/ruby/pp/releases/tag/v0.6.2
[prism-v0.20.0]: https://github.com/ruby/prism/releases/tag/v0.20.0
[prism-v0.21.0]: https://github.com/ruby/prism/releases/tag/v0.21.0
[prism-v0.22.0]: https://github.com/ruby/prism/releases/tag/v0.22.0
[prism-v0.23.0]: https://github.com/ruby/prism/releases/tag/v0.23.0
[prism-v0.24.0]: https://github.com/ruby/prism/releases/tag/v0.24.0
[prism-v0.25.0]: https://github.com/ruby/prism/releases/tag/v0.25.0
[prism-v0.26.0]: https://github.com/ruby/prism/releases/tag/v0.26.0
[prism-v0.27.0]: https://github.com/ruby/prism/releases/tag/v0.27.0
[prism-v0.28.0]: https://github.com/ruby/prism/releases/tag/v0.28.0
[prism-v0.29.0]: https://github.com/ruby/prism/releases/tag/v0.29.0
[prism-v0.30.0]: https://github.com/ruby/prism/releases/tag/v0.30.0
[prism-v1.0.0]: https://github.com/ruby/prism/releases/tag/v1.0.0
[prism-v1.1.0]: https://github.com/ruby/prism/releases/tag/v1.1.0
[prism-v1.2.0]: https://github.com/ruby/prism/releases/tag/v1.2.0
[pstore-v0.1.4]: https://github.com/ruby/pstore/releases/tag/v0.1.4
[psych-v5.2.0.beta1]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta1
[psych-v5.2.0]: https://github.com/ruby/psych/releases/tag/v5.2.0
[psych-v5.2.0.beta2]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta2
[psych-v5.2.0.beta3]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta3
[psych-v5.2.0.beta4]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta4
[psych-v5.2.0.beta5]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta5
[psych-v5.2.0.beta6]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta6
[psych-v5.2.0.beta7]: https://github.com/ruby/psych/releases/tag/v5.2.0.beta7
[psych-v5.2.1]: https://github.com/ruby/psych/releases/tag/v5.2.1
[psych-v5.2.2]: https://github.com/ruby/psych/releases/tag/v5.2.2
[rdoc-v6.7.0]: https://github.com/ruby/rdoc/releases/tag/v6.7.0
[rdoc-v6.8.0]: https://github.com/ruby/rdoc/releases/tag/v6.8.0
[rdoc-v6.8.1]: https://github.com/ruby/rdoc/releases/tag/v6.8.1
[rdoc-v6.9.0]: https://github.com/ruby/rdoc/releases/tag/v6.9.0
[rdoc-v6.9.1]: https://github.com/ruby/rdoc/releases/tag/v6.9.1
[rdoc-v6.10.0]: https://github.com/ruby/rdoc/releases/tag/v6.10.0
[reline-v0.5.0.pre.1]: https://github.com/ruby/reline/releases/tag/v0.5.0.pre.1
[reline-v0.4.2]: https://github.com/ruby/reline/releases/tag/v0.4.2
[reline-v0.4.3]: https://github.com/ruby/reline/releases/tag/v0.4.3
[reline-v0.5.0]: https://github.com/ruby/reline/releases/tag/v0.5.0
[reline-v0.5.1]: https://github.com/ruby/reline/releases/tag/v0.5.1
[reline-v0.5.2]: https://github.com/ruby/reline/releases/tag/v0.5.2
[reline-v0.5.3]: https://github.com/ruby/reline/releases/tag/v0.5.3
[reline-v0.5.4]: https://github.com/ruby/reline/releases/tag/v0.5.4
[reline-v0.5.5]: https://github.com/ruby/reline/releases/tag/v0.5.5
[reline-v0.5.6]: https://github.com/ruby/reline/releases/tag/v0.5.6
[reline-v0.5.7]: https://github.com/ruby/reline/releases/tag/v0.5.7
[reline-v0.5.8]: https://github.com/ruby/reline/releases/tag/v0.5.8
[reline-v0.5.9]: https://github.com/ruby/reline/releases/tag/v0.5.9
[reline-v0.5.10]: https://github.com/ruby/reline/releases/tag/v0.5.10
[reline-v0.5.11]: https://github.com/ruby/reline/releases/tag/v0.5.11
[reline-v0.5.12]: https://github.com/ruby/reline/releases/tag/v0.5.12
[reline-v0.6.0]: https://github.com/ruby/reline/releases/tag/v0.6.0
[resolv-v0.4.0]: https://github.com/ruby/resolv/releases/tag/v0.4.0
[resolv-v0.5.0]: https://github.com/ruby/resolv/releases/tag/v0.5.0
[resolv-v0.6.0]: https://github.com/ruby/resolv/releases/tag/v0.6.0
[securerandom-v0.3.2]: https://github.com/ruby/securerandom/releases/tag/v0.3.2
[securerandom-v0.4.0]: https://github.com/ruby/securerandom/releases/tag/v0.4.0
[securerandom-v0.4.1]: https://github.com/ruby/securerandom/releases/tag/v0.4.1
[set-v1.1.1]: https://github.com/ruby/set/releases/tag/v1.1.1
[shellwords-v0.2.1]: https://github.com/ruby/shellwords/releases/tag/v0.2.1
[shellwords-v0.2.2]: https://github.com/ruby/shellwords/releases/tag/v0.2.2
[singleton-v0.3.0]: https://github.com/ruby/singleton/releases/tag/v0.3.0
[stringio-v3.1.1]: https://github.com/ruby/stringio/releases/tag/v3.1.1
[stringio-v3.1.2]: https://github.com/ruby/stringio/releases/tag/v3.1.2
[strscan-v3.0.8]: https://github.com/ruby/strscan/releases/tag/v3.0.8
[strscan-v3.0.9]: https://github.com/ruby/strscan/releases/tag/v3.0.9
[strscan-v3.1.0]: https://github.com/ruby/strscan/releases/tag/v3.1.0
[strscan-v3.1.1]: https://github.com/ruby/strscan/releases/tag/v3.1.1
[strscan-v3.1.2]: https://github.com/ruby/strscan/releases/tag/v3.1.2
[syntax_suggest-v2.0.1]: https://github.com/ruby/syntax_suggest/releases/tag/v2.0.1
[syntax_suggest-v2.0.2]: https://github.com/ruby/syntax_suggest/releases/tag/v2.0.2
[tempfile-v0.3.0]: https://github.com/ruby/tempfile/releases/tag/v0.3.0
[tempfile-v0.3.1]: https://github.com/ruby/tempfile/releases/tag/v0.3.1
[time-v0.4.0]: https://github.com/ruby/time/releases/tag/v0.4.0
[time-v0.4.1]: https://github.com/ruby/time/releases/tag/v0.4.1
[timeout-v0.4.2]: https://github.com/ruby/timeout/releases/tag/v0.4.2
[timeout-v0.4.3]: https://github.com/ruby/timeout/releases/tag/v0.4.3
[tmpdir-v0.3.0]: https://github.com/ruby/tmpdir/releases/tag/v0.3.0
[tmpdir-v0.3.1]: https://github.com/ruby/tmpdir/releases/tag/v0.3.1
[uri-v0.13.1]: https://github.com/ruby/uri/releases/tag/v0.13.1
[uri-v1.0.0]: https://github.com/ruby/uri/releases/tag/v1.0.0
[uri-v1.0.1]: https://github.com/ruby/uri/releases/tag/v1.0.1
[uri-v1.0.2]: https://github.com/ruby/uri/releases/tag/v1.0.2
[win32ole-v1.9.0]: https://github.com/ruby/win32ole/releases/tag/v1.9.0
[win32ole-v1.9.1]: https://github.com/ruby/win32ole/releases/tag/v1.9.1
[yaml-v0.4.0]: https://github.com/ruby/yaml/releases/tag/v0.4.0
[zlib-v3.1.1]: https://github.com/ruby/zlib/releases/tag/v3.1.1
[zlib-v3.2.0]: https://github.com/ruby/zlib/releases/tag/v3.2.0
[zlib-v3.2.1]: https://github.com/ruby/zlib/releases/tag/v3.2.1
[minitest-v5.25.4]: https://github.com/seattlerb/minitest/releases/tag/v5.25.4
[power_assert-v2.0.4]:  https://github.com/ruby/power_assert/releases/tag/v2.0.4
[power_assert-v2.0.5]:  https://github.com/ruby/power_assert/releases/tag/v2.0.5
[rake-v13.2.0]: https://github.com/ruby/rake/releases/tag/v13.2.0
[rake-v13.2.1]: https://github.com/ruby/rake/releases/tag/v13.2.1
[test-unit-3.6.2]: https://github.com/test-unit/test-unit/releases/tag/3.6.2
[test-unit-3.6.3]: https://github.com/test-unit/test-unit/releases/tag/3.6.3
[test-unit-3.6.4]: https://github.com/test-unit/test-unit/releases/tag/3.6.4
[test-unit-3.6.5]: https://github.com/test-unit/test-unit/releases/tag/3.6.5
[test-unit-3.6.6]: https://github.com/test-unit/test-unit/releases/tag/3.6.6
[test-unit-3.6.7]: https://github.com/test-unit/test-unit/releases/tag/3.6.7
[rexml-v3.2.7]: https://github.com/ruby/rexml/releases/tag/v3.2.7
[rexml-v3.2.8]: https://github.com/ruby/rexml/releases/tag/v3.2.8
[rexml-v3.2.9]: https://github.com/ruby/rexml/releases/tag/v3.2.9
[rexml-v3.3.0]: https://github.com/ruby/rexml/releases/tag/v3.3.0
[rexml-v3.3.1]: https://github.com/ruby/rexml/releases/tag/v3.3.1
[rexml-v3.3.2]: https://github.com/ruby/rexml/releases/tag/v3.3.2
[rexml-v3.3.3]: https://github.com/ruby/rexml/releases/tag/v3.3.3
[rexml-v3.3.4]: https://github.com/ruby/rexml/releases/tag/v3.3.4
[rexml-v3.3.5]: https://github.com/ruby/rexml/releases/tag/v3.3.5
[rexml-v3.3.6]: https://github.com/ruby/rexml/releases/tag/v3.3.6
[rexml-v3.3.7]: https://github.com/ruby/rexml/releases/tag/v3.3.7
[rexml-v3.3.8]: https://github.com/ruby/rexml/releases/tag/v3.3.8
[rexml-v3.3.9]: https://github.com/ruby/rexml/releases/tag/v3.3.9
[rexml-v3.4.0]: https://github.com/ruby/rexml/releases/tag/v3.4.0
[rss-0.3.1]: https://github.com/ruby/rss/releases/tag/0.3.1
[net-ftp-v0.3.4]: https://github.com/ruby/net-ftp/releases/tag/v0.3.4
[net-ftp-v0.3.5]: https://github.com/ruby/net-ftp/releases/tag/v0.3.5
[net-ftp-v0.3.6]: https://github.com/ruby/net-ftp/releases/tag/v0.3.6
[net-ftp-v0.3.7]: https://github.com/ruby/net-ftp/releases/tag/v0.3.7
[net-ftp-v0.3.8]: https://github.com/ruby/net-ftp/releases/tag/v0.3.8
[net-imap-v0.4.9.1]: https://github.com/ruby/net-imap/releases/tag/v0.4.9.1
[net-imap-v0.4.10]: https://github.com/ruby/net-imap/releases/tag/v0.4.10
[net-imap-v0.4.11]: https://github.com/ruby/net-imap/releases/tag/v0.4.11
[net-imap-v0.4.12]: https://github.com/ruby/net-imap/releases/tag/v0.4.12
[net-imap-v0.4.13]: https://github.com/ruby/net-imap/releases/tag/v0.4.13
[net-imap-v0.4.14]: https://github.com/ruby/net-imap/releases/tag/v0.4.14
[net-imap-v0.4.15]: https://github.com/ruby/net-imap/releases/tag/v0.4.15
[net-imap-v0.4.16]: https://github.com/ruby/net-imap/releases/tag/v0.4.16
[net-imap-v0.4.17]: https://github.com/ruby/net-imap/releases/tag/v0.4.17
[net-imap-v0.5.0]: https://github.com/ruby/net-imap/releases/tag/v0.5.0
[net-imap-v0.4.18]: https://github.com/ruby/net-imap/releases/tag/v0.4.18
[net-imap-v0.5.1]: https://github.com/ruby/net-imap/releases/tag/v0.5.1
[net-imap-v0.5.2]: https://github.com/ruby/net-imap/releases/tag/v0.5.2
[net-imap-v0.5.3]: https://github.com/ruby/net-imap/releases/tag/v0.5.3
[net-imap-v0.5.4]: https://github.com/ruby/net-imap/releases/tag/v0.5.4
[net-smtp-v0.4.0.1]: https://github.com/ruby/net-smtp/releases/tag/v0.4.0.1
[net-smtp-v0.5.0]: https://github.com/ruby/net-smtp/releases/tag/v0.5.0
[prime-v0.1.3]: https://github.com/ruby/prime/releases/tag/v0.1.3
[rbs-v3.4.1]: https://github.com/ruby/rbs/releases/tag/v3.4.1
[rbs-v3.4.2]: https://github.com/ruby/rbs/releases/tag/v3.4.2
[rbs-v3.4.3]: https://github.com/ruby/rbs/releases/tag/v3.4.3
[rbs-v3.4.4]: https://github.com/ruby/rbs/releases/tag/v3.4.4
[rbs-v3.5.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.5.0.pre.1
[rbs-v3.5.0.pre.2]: https://github.com/ruby/rbs/releases/tag/v3.5.0.pre.2
[rbs-v3.5.0]: https://github.com/ruby/rbs/releases/tag/v3.5.0
[rbs-v3.5.1]: https://github.com/ruby/rbs/releases/tag/v3.5.1
[rbs-v3.5.2]: https://github.com/ruby/rbs/releases/tag/v3.5.2
[rbs-v3.5.3]: https://github.com/ruby/rbs/releases/tag/v3.5.3
[rbs-v3.6.0.dev.1]: https://github.com/ruby/rbs/releases/tag/v3.6.0.dev.1
[rbs-v3.6.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.6.0.pre.1
[rbs-v3.6.0.pre.2]: https://github.com/ruby/rbs/releases/tag/v3.6.0.pre.2
[rbs-v3.6.0.pre.3]: https://github.com/ruby/rbs/releases/tag/v3.6.0.pre.3
[rbs-v3.6.0]: https://github.com/ruby/rbs/releases/tag/v3.6.0
[rbs-v3.6.1]: https://github.com/ruby/rbs/releases/tag/v3.6.1
[rbs-v3.7.0.dev.1]: https://github.com/ruby/rbs/releases/tag/v3.7.0.dev.1
[rbs-v3.7.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.7.0.pre.1
[rbs-v3.7.0]: https://github.com/ruby/rbs/releases/tag/v3.7.0
[rbs-v3.8.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.8.0.pre.1
[rbs-v3.8.0]: https://github.com/ruby/rbs/releases/tag/v3.8.0
[debug-v1.9.2]: https://github.com/ruby/debug/releases/tag/v1.9.2
[debug-v1.10.0]: https://github.com/ruby/debug/releases/tag/v1.10.0
[racc-v1.8.0]: https://github.com/ruby/racc/releases/tag/v1.8.0
[racc-v1.8.1]: https://github.com/ruby/racc/releases/tag/v1.8.1
[mutex_m-v0.3.0]: https://github.com/ruby/mutex_m/releases/tag/v0.3.0
[bigdecimal-v3.1.6]: https://github.com/ruby/bigdecimal/releases/tag/v3.1.6
[bigdecimal-v3.1.7]: https://github.com/ruby/bigdecimal/releases/tag/v3.1.7
[bigdecimal-v3.1.8]: https://github.com/ruby/bigdecimal/releases/tag/v3.1.8
[drb-v2.2.1]: https://github.com/ruby/drb/releases/tag/v2.2.1
[nkf-v0.2.0]: https://github.com/ruby/nkf/releases/tag/v0.2.0
[syslog-v0.2.0]: https://github.com/ruby/syslog/releases/tag/v0.2.0
[csv-v3.2.9]: https://github.com/ruby/csv/releases/tag/v3.2.9
[csv-v3.3.0]: https://github.com/ruby/csv/releases/tag/v3.3.0
[csv-v3.3.1]: https://github.com/ruby/csv/releases/tag/v3.3.1
[csv-v3.3.2]: https://github.com/ruby/csv/releases/tag/v3.3.2
[ruby/net-http-sspi]: https://github.com/ruby/net-http-sspi
[typeprof-v0.30.1]: https://github.com/ruby/typeprof/releases/tag/v0.30.1

[RubyGems]: https://github.com/rubygems/rubygems
[benchmark]: https://github.com/ruby/benchmark
[bundler]: https://github.com/rubygems/rubygems
[date]: https://github.com/ruby/date
[delegate]: https://github.com/ruby/delegate
[did_you_mean]: https://github.com/ruby/did_you_mean
[digest]: https://github.com/ruby/digest
[erb]: https://github.com/ruby/erb
[error_highlight]: https://github.com/ruby/error_highlight
[etc]: https://github.com/ruby/etc
[fcntl]: https://github.com/ruby/fcntl
[fiddle]: https://github.com/ruby/fiddle
[fileutils]: https://github.com/ruby/fileutils
[io-console]: https://github.com/ruby/io-console
[io-nonblock]: https://github.com/ruby/io-nonblock
[ipaddr]: https://github.com/ruby/ipaddr
[irb]: https://github.com/ruby/irb
[json]: https://github.com/ruby/json
[logger]: https://github.com/ruby/logger
[net-http]: https://github.com/ruby/net-http
[open-uri]: https://github.com/ruby/open-uri
[optparse]: https://github.com/ruby/optparse
[ostruct]: https://github.com/ruby/ostruct
[pathname]: https://github.com/ruby/pathname
[pp]: https://github.com/ruby/pp
[prism]: https://github.com/ruby/prism
[pstore]: https://github.com/ruby/pstore
[psych]: https://github.com/ruby/psych
[rdoc]: https://github.com/ruby/rdoc
[reline]: https://github.com/ruby/reline
[resolv]: https://github.com/ruby/resolv
[securerandom]: https://github.com/ruby/securerandom
[set]: https://github.com/ruby/set
[shellwords]: https://github.com/ruby/shellwords
[singleton]: https://github.com/ruby/singleton
[stringio]: https://github.com/ruby/stringio
[strscan]: https://github.com/ruby/strscan
[syntax_suggest]: https://github.com/ruby/syntax_suggest
[tempfile]: https://github.com/ruby/tempfile
[time]: https://github.com/ruby/time
[timeout]: https://github.com/ruby/timeout
[tmpdir]: https://github.com/ruby/tmpdir
[uri]: https://github.com/ruby/uri
[win32ole]: https://github.com/ruby/win32ole
[yaml]: https://github.com/ruby/yaml
[zlib]: https://github.com/ruby/zlib

[repl_type_completor]: https://github.com/ruby/repl_type_completor
[minitest]: https://github.com/seattlerb/minitest
[power_assert]: https://github.com/ruby/power_assert
[rake]: https://github.com/ruby/rake
[test-unit]: https://github.com/test-unit/test-unit
[rexml]: https://github.com/ruby/rexml
[rss]: https://github.com/ruby/rss
[net-ftp]: https://github.com/ruby/net-ftp
[net-imap]: https://github.com/ruby/net-imap
[net-smtp]: https://github.com/ruby/net-smtp
[prime]: https://github.com/ruby/prime
[rbs]: https://github.com/ruby/rbs
[typeprof]: https://github.com/ruby/typeprof
[debug]: https://github.com/ruby/debug
[racc]: https://github.com/ruby/racc
[mutex_m]: https://github.com/ruby/mutex_m
[getoptlong]: https://github.com/ruby/getoptlong
[base64]: https://github.com/ruby/base64
[bigdecimal]: https://github.com/ruby/bigdecimal
[observer]: https://github.com/ruby/observer
[abbrev]: https://github.com/ruby/abbrev
[resolv-replace]: https://github.com/ruby/resolv-replace
[rinda]: https://github.com/ruby/rinda
[drb]: https://github.com/ruby/drb
[nkf]: https://github.com/ruby/nkf
[syslog]: https://github.com/ruby/syslog
[csv]: https://github.com/ruby/csv
PK$J[�Z�����share/rubygems/rubygems.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require "rbconfig"

module Gem
  VERSION = "3.6.7"
end

# Must be first since it unloads the prelude from 1.9.2
require_relative "rubygems/compatibility"

require_relative "rubygems/defaults"
require_relative "rubygems/deprecate"
require_relative "rubygems/errors"
require_relative "rubygems/target_rbconfig"

##
# RubyGems is the Ruby standard for publishing and managing third party
# libraries.
#
# For user documentation, see:
#
# * <tt>gem help</tt> and <tt>gem help [command]</tt>
# * {RubyGems User Guide}[https://guides.rubygems.org/]
# * {Frequently Asked Questions}[https://guides.rubygems.org/faqs]
#
# For gem developer documentation see:
#
# * {Creating Gems}[https://guides.rubygems.org/make-your-own-gem]
# * Gem::Specification
# * Gem::Version for version dependency notes
#
# Further RubyGems documentation can be found at:
#
# * {RubyGems Guides}[https://guides.rubygems.org]
# * {RubyGems API}[https://www.rubydoc.info/github/rubygems/rubygems] (also available from
#   <tt>gem server</tt>)
#
# == RubyGems Plugins
#
# RubyGems will load plugins in the latest version of each installed gem or
# $LOAD_PATH.  Plugins must be named 'rubygems_plugin' (.rb, .so, etc) and
# placed at the root of your gem's #require_path.  Plugins are installed at a
# special location and loaded on boot.
#
# For an example plugin, see the {Graph gem}[https://github.com/seattlerb/graph]
# which adds a <tt>gem graph</tt> command.
#
# == RubyGems Defaults, Packaging
#
# RubyGems defaults are stored in lib/rubygems/defaults.rb.  If you're packaging
# RubyGems or implementing Ruby you can change RubyGems' defaults.
#
# For RubyGems packagers, provide lib/rubygems/defaults/operating_system.rb
# and override any defaults from lib/rubygems/defaults.rb.
#
# For Ruby implementers, provide lib/rubygems/defaults/#{RUBY_ENGINE}.rb and
# override any defaults from lib/rubygems/defaults.rb.
#
# If you need RubyGems to perform extra work on install or uninstall, your
# defaults override file can set pre/post install and uninstall hooks.
# See Gem::pre_install, Gem::pre_uninstall, Gem::post_install,
# Gem::post_uninstall.
#
# == Bugs
#
# You can submit bugs to the
# {RubyGems bug tracker}[https://github.com/rubygems/rubygems/issues]
# on GitHub
#
# == Credits
#
# RubyGems is currently maintained by Eric Hodel.
#
# RubyGems was originally developed at RubyConf 2003 by:
#
# * Rich Kilmer  -- rich(at)infoether.com
# * Chad Fowler  -- chad(at)chadfowler.com
# * David Black  -- dblack(at)wobblini.net
# * Paul Brannan -- paul(at)atdesk.com
# * Jim Weirich   -- jim(at)weirichhouse.org
#
# Contributors:
#
# * Gavin Sinclair     -- gsinclair(at)soyabean.com.au
# * George Marrows     -- george.marrows(at)ntlworld.com
# * Dick Davies        -- rasputnik(at)hellooperator.net
# * Mauricio Fernandez -- batsman.geo(at)yahoo.com
# * Simon Strandgaard  -- neoneye(at)adslhome.dk
# * Dave Glasser       -- glasser(at)mit.edu
# * Paul Duncan        -- pabs(at)pablotron.org
# * Ville Aine         -- vaine(at)cs.helsinki.fi
# * Eric Hodel         -- drbrain(at)segment7.net
# * Daniel Berger      -- djberg96(at)gmail.com
# * Phil Hagelberg     -- technomancy(at)gmail.com
# * Ryan Davis         -- ryand-ruby(at)zenspider.com
# * Evan Phoenix       -- evan(at)fallingsnow.net
# * Steve Klabnik      -- steve(at)steveklabnik.com
#
# (If your name is missing, PLEASE let us know!)
#
# == License
#
# See {LICENSE.txt}[https://github.com/rubygems/rubygems/blob/master/LICENSE.txt] for permissions.
#
# Thanks!
#
# -The RubyGems Team

module Gem
  RUBYGEMS_DIR = __dir__

  ##
  # An Array of Regexps that match windows Ruby platforms.

  WIN_PATTERNS = [
    /bccwin/i,
    /cygwin/i,
    /djgpp/i,
    /mingw/i,
    /mswin/i,
    /wince/i,
  ].freeze

  GEM_DEP_FILES = %w[
    gem.deps.rb
    gems.rb
    Gemfile
    Isolate
  ].freeze

  ##
  # Subdirectories in a gem repository

  REPOSITORY_SUBDIRECTORIES = %w[
    build_info
    cache
    doc
    extensions
    gems
    plugins
    specifications
  ].freeze

  ##
  # Subdirectories in a gem repository for default gems

  REPOSITORY_DEFAULT_GEM_SUBDIRECTORIES = %w[
    gems
    specifications/default
  ].freeze

  ##
  # The default value for SOURCE_DATE_EPOCH if not specified.
  # We want a date after 1980-01-01, to prevent issues with Zip files.
  # This particular timestamp is for 1980-01-02 00:00:00 GMT.

  DEFAULT_SOURCE_DATE_EPOCH = 315_619_200

  @@win_platform = nil

  @configuration = nil
  @gemdeps = nil
  @loaded_specs = {}
  LOADED_SPECS_MUTEX = Thread::Mutex.new
  @path_to_default_spec_map = {}
  @platforms = []
  @ruby = nil
  @ruby_api_version = nil
  @sources = nil

  @post_build_hooks     ||= []
  @post_install_hooks   ||= []
  @post_uninstall_hooks ||= []
  @pre_uninstall_hooks  ||= []
  @pre_install_hooks    ||= []
  @pre_reset_hooks      ||= []
  @post_reset_hooks     ||= []

  @default_source_date_epoch = nil

  @discover_gems_on_require = true

  @target_rbconfig = nil

  ##
  # Try to activate a gem containing +path+. Returns true if
  # activation succeeded or wasn't needed because it was already
  # activated. Returns false if it can't find the path in a gem.

  def self.try_activate(path)
    # finds the _latest_ version... regardless of loaded specs and their deps
    # if another gem had a requirement that would mean we shouldn't
    # activate the latest version, then either it would already be activated
    # or if it was ambiguous (and thus unresolved) the code in our custom
    # require will try to activate the more specific version.

    spec = Gem::Specification.find_by_path path
    return false unless spec
    return true if spec.activated?

    begin
      spec.activate
    rescue Gem::LoadError => e # this could fail due to gem dep collisions, go lax
      spec_by_name = Gem::Specification.find_by_name(spec.name)
      if spec_by_name.nil?
        raise e
      else
        spec_by_name.activate
      end
    end

    true
  end

  def self.needs
    rs = Gem::RequestSet.new

    yield rs

    finish_resolve rs
  end

  def self.finish_resolve(request_set=Gem::RequestSet.new)
    request_set.import Gem::Specification.unresolved_deps.values
    request_set.import Gem.loaded_specs.values.map {|s| Gem::Dependency.new(s.name, s.version) }

    request_set.resolve_current.each do |s|
      s.full_spec.activate
    end
  end

  ##
  # Find the full path to the executable for gem +name+.  If the +exec_name+
  # is not given, an exception will be raised, otherwise the
  # specified executable's path is returned.  +requirements+ allows
  # you to specify specific gem versions.

  def self.bin_path(name, exec_name = nil, *requirements)
    requirements = Gem::Requirement.default if
      requirements.empty?

    find_spec_for_exe(name, exec_name, requirements).bin_file exec_name
  end

  def self.find_spec_for_exe(name, exec_name, requirements)
    raise ArgumentError, "you must supply exec_name" unless exec_name

    dep = Gem::Dependency.new name, requirements

    loaded = Gem.loaded_specs[name]

    return loaded if loaded && dep.matches_spec?(loaded)

    specs = dep.matching_specs(true)

    specs = specs.find_all do |spec|
      spec.executables.include? exec_name
    end if exec_name

    unless spec = specs.first
      msg = "can't find gem #{dep} with executable #{exec_name}"
      raise Gem::GemNotFoundException, msg
    end

    spec
  end
  private_class_method :find_spec_for_exe

  ##
  # Find the full path to the executable for gem +name+.  If the +exec_name+
  # is not given, an exception will be raised, otherwise the
  # specified executable's path is returned.  +requirements+ allows
  # you to specify specific gem versions.
  #
  # A side effect of this method is that it will activate the gem that
  # contains the executable.
  #
  # This method should *only* be used in bin stub files.

  def self.activate_bin_path(name, exec_name = nil, *requirements) # :nodoc:
    spec = find_spec_for_exe name, exec_name, requirements
    Gem::LOADED_SPECS_MUTEX.synchronize do
      spec.activate
      finish_resolve
    end
    spec.bin_file exec_name
  end

  ##
  # The mode needed to read a file as straight binary.

  def self.binary_mode
    "rb"
  end

  ##
  # The path where gem executables are to be installed.

  def self.bindir(install_dir=Gem.dir)
    return File.join install_dir, "bin" unless
      install_dir.to_s == Gem.default_dir.to_s
    Gem.default_bindir
  end

  ##
  # The path were rubygems plugins are to be installed.

  def self.plugindir(install_dir=Gem.dir)
    File.join install_dir, "plugins"
  end

  ##
  # Reset the +dir+ and +path+ values.  The next time +dir+ or +path+
  # is requested, the values will be calculated from scratch.  This is
  # mainly used by the unit tests to provide test isolation.

  def self.clear_paths
    @paths         = nil
    @user_home     = nil
    Gem::Specification.reset
    Gem::Security.reset if defined?(Gem::Security)
  end

  ##
  # The standard configuration object for gems.

  def self.configuration
    @configuration ||= Gem::ConfigFile.new []
  end

  ##
  # Use the given configuration object (which implements the ConfigFile
  # protocol) as the standard configuration object.

  def self.configuration=(config)
    @configuration = config
  end

  ##
  # A Zlib::Deflate.deflate wrapper

  def self.deflate(data)
    require "zlib"
    Zlib::Deflate.deflate data
  end

  # Retrieve the PathSupport object that RubyGems uses to
  # lookup files.

  def self.paths
    @paths ||= Gem::PathSupport.new(ENV)
  end

  # Initialize the filesystem paths to use from +env+.
  # +env+ is a hash-like object (typically ENV) that
  # is queried for 'GEM_HOME', 'GEM_PATH', and 'GEM_SPEC_CACHE'
  # Keys for the +env+ hash should be Strings, and values of the hash should
  # be Strings or +nil+.

  def self.paths=(env)
    clear_paths
    target = {}
    env.each_pair do |k,v|
      case k
      when "GEM_HOME", "GEM_PATH", "GEM_SPEC_CACHE"
        case v
        when nil, String
          target[k] = v
        when Array
          unless Gem::Deprecate.skip
            warn <<-EOWARN
Array values in the parameter to `Gem.paths=` are deprecated.
Please use a String or nil.
An Array (#{env.inspect}) was passed in from #{caller[3]}
            EOWARN
          end
          target[k] = v.join File::PATH_SEPARATOR
        end
      else
        target[k] = v
      end
    end
    @paths = Gem::PathSupport.new ENV.to_hash.merge(target)
    Gem::Specification.dirs = @paths.path
  end

  ##
  # The path where gems are to be installed.

  def self.dir
    paths.home
  end

  def self.path
    paths.path
  end

  def self.spec_cache_dir
    paths.spec_cache_dir
  end

  ##
  # The RbConfig object for the deployment target platform.
  #
  # This is usually the same as the running platform, but may be
  # different if you are cross-compiling.

  def self.target_rbconfig
    @target_rbconfig || Gem::TargetRbConfig.for_running_ruby
  end

  def self.set_target_rbconfig(rbconfig_path)
    @target_rbconfig = Gem::TargetRbConfig.from_path(rbconfig_path)
    Gem::Platform.local(refresh: true)
    Gem.platforms << Gem::Platform.local unless Gem.platforms.include? Gem::Platform.local
    @target_rbconfig
  end

  ##
  # Quietly ensure the Gem directory +dir+ contains all the proper
  # subdirectories.  If we can't create a directory due to a permission
  # problem, then we will silently continue.
  #
  # If +mode+ is given, missing directories are created with this mode.
  #
  # World-writable directories will never be created.

  def self.ensure_gem_subdirectories(dir = Gem.dir, mode = nil)
    ensure_subdirectories(dir, mode, REPOSITORY_SUBDIRECTORIES)
  end

  ##
  # Quietly ensure the Gem directory +dir+ contains all the proper
  # subdirectories for handling default gems.  If we can't create a
  # directory due to a permission problem, then we will silently continue.
  #
  # If +mode+ is given, missing directories are created with this mode.
  #
  # World-writable directories will never be created.

  def self.ensure_default_gem_subdirectories(dir = Gem.dir, mode = nil)
    ensure_subdirectories(dir, mode, REPOSITORY_DEFAULT_GEM_SUBDIRECTORIES)
  end

  def self.ensure_subdirectories(dir, mode, subdirs) # :nodoc:
    old_umask = File.umask
    File.umask old_umask | 0o002

    options = {}

    options[:mode] = mode if mode

    subdirs.each do |name|
      subdir = File.join dir, name
      next if File.exist? subdir

      require "fileutils"

      begin
        FileUtils.mkdir_p subdir, **options
      rescue SystemCallError
      end
    end
  ensure
    File.umask old_umask
  end

  ##
  # The extension API version of ruby.  This includes the static vs non-static
  # distinction as extensions cannot be shared between the two.

  def self.extension_api_version # :nodoc:
    if target_rbconfig["ENABLE_SHARED"] == "no"
      "#{ruby_api_version}-static"
    else
      ruby_api_version
    end
  end

  ##
  # Returns a list of paths matching +glob+ that can be used by a gem to pick
  # up features from other gems.  For example:
  #
  #   Gem.find_files('rdoc/discover').each do |path| load path end
  #
  # if +check_load_path+ is true (the default), then find_files also searches
  # $LOAD_PATH for files as well as gems.
  #
  # Note that find_files will return all files even if they are from different
  # versions of the same gem.  See also find_latest_files

  def self.find_files(glob, check_load_path=true)
    files = []

    files = find_files_from_load_path glob if check_load_path

    gem_specifications = @gemdeps ? Gem.loaded_specs.values : Gem::Specification.stubs

    files.concat gem_specifications.flat_map {|spec|
      spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
    }

    # $LOAD_PATH might contain duplicate entries or reference
    # the spec dirs directly, so we prune.
    files.uniq! if check_load_path

    files
  end

  def self.find_files_from_load_path(glob) # :nodoc:
    glob_with_suffixes = "#{glob}#{Gem.suffix_pattern}"
    $LOAD_PATH.flat_map do |load_path|
      Gem::Util.glob_files_in_dir(glob_with_suffixes, load_path)
    end.select {|file| File.file? file }
  end

  ##
  # Returns a list of paths matching +glob+ from the latest gems that can be
  # used by a gem to pick up features from other gems.  For example:
  #
  #   Gem.find_latest_files('rdoc/discover').each do |path| load path end
  #
  # if +check_load_path+ is true (the default), then find_latest_files also
  # searches $LOAD_PATH for files as well as gems.
  #
  # Unlike find_files, find_latest_files will return only files from the
  # latest version of a gem.

  def self.find_latest_files(glob, check_load_path=true)
    files = []

    files = find_files_from_load_path glob if check_load_path

    files.concat Gem::Specification.latest_specs(true).flat_map {|spec|
      spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
    }

    # $LOAD_PATH might contain duplicate entries or reference
    # the spec dirs directly, so we prune.
    files.uniq! if check_load_path

    files
  end

  ##
  # Top level install helper method. Allows you to install gems interactively:
  #
  #   % irb
  #   >> Gem.install "minitest"
  #   Fetching: minitest-5.14.0.gem (100%)
  #   => [#<Gem::Specification:0x1013b4528 @name="minitest", ...>]

  def self.install(name, version = Gem::Requirement.default, *options)
    require_relative "rubygems/dependency_installer"
    inst = Gem::DependencyInstaller.new(*options)
    inst.install name, version
    inst.installed_gems
  end

  ##
  # Get the default RubyGems API host. This is normally
  # <tt>https://rubygems.org</tt>.

  def self.host
    @host ||= Gem::DEFAULT_HOST
  end

  ## Set the default RubyGems API host.

  def self.host=(host)
    @host = host
  end

  ##
  # The index to insert activated gem paths into the $LOAD_PATH. The activated
  # gem's paths are inserted before site lib directory by default.

  def self.load_path_insert_index
    $LOAD_PATH.each_with_index do |path, i|
      return i if path.instance_variable_defined?(:@gem_prelude_index)
    end

    index = $LOAD_PATH.index RbConfig::CONFIG["sitelibdir"]

    index || 0
  end

  ##
  # The number of paths in the +$LOAD_PATH+ from activated gems. Used to
  # prioritize +-I+ and <code>ENV['RUBYLIB']</code> entries during +require+.

  def self.activated_gem_paths
    @activated_gem_paths ||= 0
  end

  ##
  # Add a list of paths to the $LOAD_PATH at the proper place.

  def self.add_to_load_path(*paths)
    @activated_gem_paths = activated_gem_paths + paths.size

    # gem directories must come after -I and ENV['RUBYLIB']
    $LOAD_PATH.insert(Gem.load_path_insert_index, *paths)
  end

  @yaml_loaded = false

  ##
  # Loads YAML, preferring Psych

  def self.load_yaml
    return if @yaml_loaded

    require "psych"
    require_relative "rubygems/psych_tree"

    require_relative "rubygems/safe_yaml"

    @yaml_loaded = true
  end

  @safe_marshal_loaded = false

  def self.load_safe_marshal
    return if @safe_marshal_loaded

    require_relative "rubygems/safe_marshal"

    @safe_marshal_loaded = true
  end

  ##
  # The file name and line number of the caller of the caller of this method.
  #
  # +depth+ is how many layers up the call stack it should go.
  #
  # e.g.,
  #
  # def a; Gem.location_of_caller; end
  # a #=> ["x.rb", 2]  # (it'll vary depending on file name and line number)
  #
  # def b; c; end
  # def c; Gem.location_of_caller(2); end
  # b #=> ["x.rb", 6]  # (it'll vary depending on file name and line number)

  def self.location_of_caller(depth = 1)
    caller[depth] =~ /(.*?):(\d+).*?$/i
    file = $1
    lineno = $2.to_i

    [file, lineno]
  end

  ##
  # The version of the Marshal format for your Ruby.

  def self.marshal_version
    "#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}"
  end

  ##
  # Set array of platforms this RubyGems supports (primarily for testing).

  def self.platforms=(platforms)
    @platforms = platforms
  end

  ##
  # Array of platforms this RubyGems supports.

  def self.platforms
    @platforms ||= []
    if @platforms.empty?
      @platforms = [Gem::Platform::RUBY, Gem::Platform.local]
    end
    @platforms
  end

  ##
  # Adds a post-build hook that will be passed an Gem::Installer instance
  # when Gem::Installer#install is called.  The hook is called after the gem
  # has been extracted and extensions have been built but before the
  # executables or gemspec has been written.  If the hook returns +false+ then
  # the gem's files will be removed and the install will be aborted.

  def self.post_build(&hook)
    @post_build_hooks << hook
  end

  ##
  # Adds a post-install hook that will be passed an Gem::Installer instance
  # when Gem::Installer#install is called

  def self.post_install(&hook)
    @post_install_hooks << hook
  end

  ##
  # Adds a post-installs hook that will be passed a Gem::DependencyInstaller
  # and a list of installed specifications when
  # Gem::DependencyInstaller#install is complete

  def self.done_installing(&hook)
    @done_installing_hooks << hook
  end

  ##
  # Adds a hook that will get run after Gem::Specification.reset is
  # run.

  def self.post_reset(&hook)
    @post_reset_hooks << hook
  end

  ##
  # Adds a post-uninstall hook that will be passed a Gem::Uninstaller instance
  # and the spec that was uninstalled when Gem::Uninstaller#uninstall is
  # called

  def self.post_uninstall(&hook)
    @post_uninstall_hooks << hook
  end

  ##
  # Adds a pre-install hook that will be passed an Gem::Installer instance
  # when Gem::Installer#install is called.  If the hook returns +false+ then
  # the install will be aborted.

  def self.pre_install(&hook)
    @pre_install_hooks << hook
  end

  ##
  # Adds a hook that will get run before Gem::Specification.reset is
  # run.

  def self.pre_reset(&hook)
    @pre_reset_hooks << hook
  end

  ##
  # Adds a pre-uninstall hook that will be passed an Gem::Uninstaller instance
  # and the spec that will be uninstalled when Gem::Uninstaller#uninstall is
  # called

  def self.pre_uninstall(&hook)
    @pre_uninstall_hooks << hook
  end

  ##
  # The directory prefix this RubyGems was installed at. If your
  # prefix is in a standard location (ie, rubygems is installed where
  # you'd expect it to be), then prefix returns nil.

  def self.prefix
    prefix = File.dirname RUBYGEMS_DIR

    if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) &&
       prefix != File.expand_path(RbConfig::CONFIG["libdir"]) &&
       File.basename(RUBYGEMS_DIR) == "lib"
      prefix
    end
  end

  ##
  # Refresh available gems from disk.

  def self.refresh
    Gem::Specification.reset
  end

  ##
  # Safely read a file in binary mode on all platforms.

  def self.read_binary(path)
    File.binread(path)
  end

  ##
  # Safely write a file in binary mode on all platforms.

  def self.write_binary(path, data)
    File.binwrite(path, data)
  rescue Errno::ENOSPC
    # If we ran out of space but the file exists, it's *guaranteed* to be corrupted.
    File.delete(path) if File.exist?(path)
    raise
  end

  ##
  # Open a file with given flags

  def self.open_file(path, flags, &block)
    File.open(path, flags, &block)
  end

  ##
  # Open a file with given flags, and protect access with a file lock

  def self.open_file_with_lock(path, &block)
    file_lock = "#{path}.lock"
    open_file_with_flock(file_lock, &block)
  ensure
    require "fileutils"
    FileUtils.rm_f file_lock
  end

  ##
  # Open a file with given flags, and protect access with flock

  def self.open_file_with_flock(path, &block)
    # read-write mode is used rather than read-only in order to support NFS
    mode = IO::RDWR | IO::APPEND | IO::CREAT | IO::BINARY
    mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE)

    File.open(path, mode) do |io|
      begin
        # Try to get a lock without blocking.
        # If we do, the file is locked.
        # Otherwise, explain why we're waiting and get a lock, but block this time.
        if io.flock(File::LOCK_EX | File::LOCK_NB) != 0
          warn "Waiting for another process to let go of lock: #{path}"
          io.flock(File::LOCK_EX)
        end
        io.puts(Process.pid)
      rescue Errno::ENOSYS, Errno::ENOTSUP
      end
      yield io
    end
  end

  ##
  # The path to the running Ruby interpreter.

  def self.ruby
    if @ruby.nil?
      @ruby = RbConfig.ruby

      @ruby = "\"#{@ruby}\"" if /\s/.match?(@ruby)
    end

    @ruby
  end

  ##
  # Returns a String containing the API compatibility version of Ruby

  def self.ruby_api_version
    @ruby_api_version ||= target_rbconfig["ruby_version"].dup
  end

  def self.env_requirement(gem_name)
    @env_requirements_by_name ||= {}
    @env_requirements_by_name[gem_name] ||= begin
      req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || ">= 0"
      Gem::Requirement.create(req)
    end
  end
  post_reset { @env_requirements_by_name = {} }

  ##
  # Returns the latest release-version specification for the gem +name+.

  def self.latest_spec_for(name)
    dependency   = Gem::Dependency.new name
    fetcher      = Gem::SpecFetcher.fetcher
    spec_tuples, = fetcher.spec_for_dependency dependency

    spec, = spec_tuples.last

    spec
  end

  ##
  # Returns the latest release version of RubyGems.

  def self.latest_rubygems_version
    latest_version_for("rubygems-update") ||
      raise("Can't find 'rubygems-update' in any repo. Check `gem source list`.")
  end

  ##
  # Returns the version of the latest release-version of gem +name+

  def self.latest_version_for(name)
    latest_spec_for(name)&.version
  end

  ##
  # A Gem::Version for the currently running Ruby.

  def self.ruby_version
    return @ruby_version if defined? @ruby_version
    version = RUBY_VERSION.dup

    if RUBY_PATCHLEVEL == -1
      if RUBY_ENGINE == "ruby"
        desc = RUBY_DESCRIPTION[/\Aruby #{Regexp.quote(RUBY_VERSION)}([^ ]+) /, 1]
      else
        desc = RUBY_DESCRIPTION[/\A#{RUBY_ENGINE} #{Regexp.quote(RUBY_ENGINE_VERSION)} \(#{RUBY_VERSION}([^ ]+)\) /, 1]
      end
      version << ".#{desc}" if desc
    end

    @ruby_version = Gem::Version.new version
  end

  ##
  # A Gem::Version for the currently running RubyGems

  def self.rubygems_version
    return @rubygems_version if defined? @rubygems_version
    @rubygems_version = Gem::Version.new Gem::VERSION
  end

  ##
  # Returns an Array of sources to fetch remote gems from. Uses
  # default_sources if the sources list is empty.

  def self.sources
    source_list = configuration.sources || default_sources
    @sources ||= Gem::SourceList.from(source_list)
  end

  ##
  # Need to be able to set the sources without calling
  # Gem.sources.replace since that would cause an infinite loop.
  #
  # DOC: This comment is not documentation about the method itself, it's
  # more of a code comment about the implementation.

  def self.sources=(new_sources)
    if !new_sources
      @sources = nil
    else
      @sources = Gem::SourceList.from(new_sources)
    end
  end

  ##
  # Glob pattern for require-able path suffixes.

  def self.suffix_pattern
    @suffix_pattern ||= "{#{suffixes.join(",")}}"
  end

  ##
  # Regexp for require-able path suffixes.

  def self.suffix_regexp
    @suffix_regexp ||= /#{Regexp.union(suffixes)}\z/
  end

  ##
  # Glob pattern for require-able plugin suffixes.

  def self.plugin_suffix_pattern
    @plugin_suffix_pattern ||= "_plugin#{suffix_pattern}"
  end

  ##
  # Regexp for require-able plugin suffixes.

  def self.plugin_suffix_regexp
    @plugin_suffix_regexp ||= /_plugin#{suffix_regexp}\z/
  end

  ##
  # Suffixes for require-able paths.

  def self.suffixes
    @suffixes ||= ["",
                   ".rb",
                   *%w[DLEXT DLEXT2].map do |key|
                     val = RbConfig::CONFIG[key]
                     next unless val && !val.empty?
                     ".#{val}"
                   end].compact.uniq
  end

  ##
  # Suffixes for dynamic library require-able paths.

  def self.dynamic_library_suffixes
    @dynamic_library_suffixes ||= suffixes - [".rb"]
  end

  ##
  # Prints the amount of time the supplied block takes to run using the debug
  # UI output.

  def self.time(msg, width = 0, display = Gem.configuration.verbose)
    now = Time.now

    value = yield

    elapsed = Time.now - now

    ui.say format("%2$*1$s: %3$3.3fs", -width, msg, elapsed) if display

    value
  end

  ##
  # Lazily loads DefaultUserInteraction and returns the default UI.

  def self.ui
    require_relative "rubygems/user_interaction"

    Gem::DefaultUserInteraction.ui
  end

  ##
  # Use the +home+ and +paths+ values for Gem.dir and Gem.path.  Used mainly
  # by the unit tests to provide environment isolation.

  def self.use_paths(home, *paths)
    paths.flatten!
    paths.compact!
    hash = { "GEM_HOME" => home, "GEM_PATH" => paths.empty? ? home : paths.join(File::PATH_SEPARATOR) }
    hash.delete_if {|_, v| v.nil? }
    self.paths = hash
  end

  ##
  # Is this a windows platform?

  def self.win_platform?
    if @@win_platform.nil?
      ruby_platform = RbConfig::CONFIG["host_os"]
      @@win_platform = !WIN_PATTERNS.find {|r| ruby_platform =~ r }.nil?
    end

    @@win_platform
  end

  ##
  # Is this a java platform?

  def self.java_platform?
    RUBY_PLATFORM == "java"
  end

  ##
  # Is this platform Solaris?

  def self.solaris_platform?
    RUBY_PLATFORM.include?("solaris")
  end

  ##
  # Is this platform FreeBSD

  def self.freebsd_platform?
    RbConfig::CONFIG["host_os"].to_s.include?("bsd")
  end

  ##
  # Load +plugins+ as Ruby files

  def self.load_plugin_files(plugins) # :nodoc:
    plugins.each do |plugin|
      # Skip older versions of the GemCutter plugin: Its commands are in
      # RubyGems proper now.

      next if /gemcutter-0\.[0-3]/.match?(plugin)

      begin
        load plugin
      rescue ScriptError, StandardError => e
        details = "#{plugin.inspect}: #{e.message} (#{e.class})"
        warn "Error loading RubyGems plugin #{details}"
      end
    end
  end

  ##
  # Find rubygems plugin files in the standard location and load them

  def self.load_plugins
    Gem.path.each do |gem_path|
      load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir(gem_path))
    end
  end

  ##
  # Find all 'rubygems_plugin' files in $LOAD_PATH and load them

  def self.load_env_plugins
    load_plugin_files find_files_from_load_path("rubygems_plugin")
  end

  ##
  # Looks for a gem dependency file at +path+ and activates the gems in the
  # file if found.  If the file is not found an ArgumentError is raised.
  #
  # If +path+ is not given the RUBYGEMS_GEMDEPS environment variable is used,
  # but if no file is found no exception is raised.
  #
  # If '-' is given for +path+ RubyGems searches up from the current working
  # directory for gem dependency files (gem.deps.rb, Gemfile, Isolate) and
  # activates the gems in the first one found.
  #
  # You can run this automatically when rubygems starts.  To enable, set
  # the <code>RUBYGEMS_GEMDEPS</code> environment variable to either the path
  # of your gem dependencies file or "-" to auto-discover in parent
  # directories.
  #
  # NOTE: Enabling automatic discovery on multiuser systems can lead to
  # execution of arbitrary code when used from directories outside your
  # control.

  def self.use_gemdeps(path = nil)
    raise_exception = path

    path ||= ENV["RUBYGEMS_GEMDEPS"]
    return unless path

    path = path.dup

    if path == "-"
      Gem::Util.traverse_parents Dir.pwd do |directory|
        dep_file = GEM_DEP_FILES.find {|f| File.file?(f) }

        next unless dep_file

        path = File.join directory, dep_file
        break
      end
    end

    unless File.file? path
      return unless raise_exception

      raise ArgumentError, "Unable to find gem dependencies file at #{path}"
    end

    ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
    require_relative "rubygems/user_interaction"
    require "bundler"
    begin
      Gem::DefaultUserInteraction.use_ui(ui) do
        Bundler.ui.silence do
          @gemdeps = Bundler.setup
        end
      ensure
        Gem::DefaultUserInteraction.ui.close
      end
    rescue Bundler::BundlerError => e
      warn e.message
      warn "You may need to `bundle install` to install missing gems"
      warn ""
    end
  end

  ##
  # If the SOURCE_DATE_EPOCH environment variable is set, returns it's value.
  # Otherwise, returns DEFAULT_SOURCE_DATE_EPOCH as a string.
  #
  # NOTE(@duckinator): The implementation is a tad weird because we want to:
  #   1. Make builds reproducible by default, by having this function always
  #      return the same result during a given run.
  #   2. Allow changing ENV['SOURCE_DATE_EPOCH'] at runtime, since multiple
  #      tests that set this variable will be run in a single process.
  #
  # If you simplify this function and a lot of tests fail, that is likely
  # due to #2 above.
  #
  # Details on SOURCE_DATE_EPOCH:
  # https://reproducible-builds.org/specs/source-date-epoch/

  def self.source_date_epoch_string
    specified_epoch = ENV["SOURCE_DATE_EPOCH"]

    # If it's empty or just whitespace, treat it like it wasn't set at all.
    specified_epoch = nil if !specified_epoch.nil? && specified_epoch.strip.empty?

    epoch = specified_epoch || DEFAULT_SOURCE_DATE_EPOCH.to_s

    epoch.strip
  end

  ##
  # Returns the value of Gem.source_date_epoch_string, as a Time object.
  #
  # This is used throughout RubyGems for enabling reproducible builds.

  def self.source_date_epoch
    Time.at(source_date_epoch_string.to_i).utc.freeze
  end

  # FIX: Almost everywhere else we use the `def self.` way of defining class
  # methods, and then we switch over to `class << self` here. Pick one or the
  # other.
  class << self
    ##
    # RubyGems distributors (like operating system package managers) can
    # disable RubyGems update by setting this to error message printed to
    # end-users on gem update --system instead of actual update.

    attr_accessor :disable_system_update_message

    ##
    # Whether RubyGems should enhance builtin `require` to automatically
    # check whether the path required is present in installed gems, and
    # automatically activate them and add them to `$LOAD_PATH`.

    attr_accessor :discover_gems_on_require

    ##
    # Hash of loaded Gem::Specification keyed by name

    attr_reader :loaded_specs

    ##
    # GemDependencyAPI object, which is set when .use_gemdeps is called.
    # This contains all the information from the Gemfile.

    attr_reader :gemdeps

    ##
    # Register a Gem::Specification for default gem.
    #
    # Two formats for the specification are supported:
    #
    # * MRI 2.0 style, where spec.files contains unprefixed require names.
    #   The spec's filenames will be registered as-is.
    # * New style, where spec.files contains files prefixed with paths
    #   from spec.require_paths. The prefixes are stripped before
    #   registering the spec's filenames. Unprefixed files are omitted.
    #

    def register_default_spec(spec)
      extended_require_paths = spec.require_paths.map {|f| f + "/" }
      new_format = extended_require_paths.any? {|path| spec.files.any? {|f| f.start_with? path } }

      if new_format
        prefix_group = extended_require_paths.join("|")
        prefix_pattern = /^(#{prefix_group})/
      end

      spec.files.each do |file|
        if new_format
          file = file.sub(prefix_pattern, "")
          next unless $~
        end

        spec.activate if already_loaded?(file)

        @path_to_default_spec_map[file] = spec
        @path_to_default_spec_map[file.sub(suffix_regexp, "")] = spec
      end
    end

    ##
    # Find a Gem::Specification of default gem from +path+

    def find_default_spec(path)
      @path_to_default_spec_map[path]
    end

    ##
    # Find an unresolved Gem::Specification of default gem from +path+

    def find_unresolved_default_spec(path)
      default_spec = @path_to_default_spec_map[path]
      default_spec if default_spec && loaded_specs[default_spec.name] != default_spec
    end

    ##
    # Clear default gem related variables. It is for test

    def clear_default_specs
      @path_to_default_spec_map.clear
    end

    ##
    # The list of hooks to be run after Gem::Installer#install extracts files
    # and builds extensions

    attr_reader :post_build_hooks

    ##
    # The list of hooks to be run after Gem::Installer#install completes
    # installation

    attr_reader :post_install_hooks

    ##
    # The list of hooks to be run after Gem::DependencyInstaller installs a
    # set of gems

    attr_reader :done_installing_hooks

    ##
    # The list of hooks to be run after Gem::Specification.reset is run.

    attr_reader :post_reset_hooks

    ##
    # The list of hooks to be run after Gem::Uninstaller#uninstall completes
    # installation

    attr_reader :post_uninstall_hooks

    ##
    # The list of hooks to be run before Gem::Installer#install does any work

    attr_reader :pre_install_hooks

    ##
    # The list of hooks to be run before Gem::Specification.reset is run.

    attr_reader :pre_reset_hooks

    ##
    # The list of hooks to be run before Gem::Uninstaller#uninstall does any
    # work

    attr_reader :pre_uninstall_hooks

    private

    def already_loaded?(file)
      $LOADED_FEATURES.any? do |feature_path|
        feature_path.end_with?(file) && default_gem_load_paths.any? {|load_path_entry| feature_path == "#{load_path_entry}/#{file}" }
      end
    end

    def default_gem_load_paths
      @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1].map do |lp|
        expanded = File.expand_path(lp)
        next expanded unless File.exist?(expanded)

        File.realpath(expanded)
      end
    end
  end

  ##
  # Location of Marshal quick gemspecs on remote repositories

  MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/".freeze

  autoload :ConfigFile,         File.expand_path("rubygems/config_file", __dir__)
  autoload :CIDetector,         File.expand_path("rubygems/ci_detector", __dir__)
  autoload :Dependency,         File.expand_path("rubygems/dependency", __dir__)
  autoload :DependencyList,     File.expand_path("rubygems/dependency_list", __dir__)
  autoload :Installer,          File.expand_path("rubygems/installer", __dir__)
  autoload :Licenses,           File.expand_path("rubygems/util/licenses", __dir__)
  autoload :NameTuple,          File.expand_path("rubygems/name_tuple", __dir__)
  autoload :PathSupport,        File.expand_path("rubygems/path_support", __dir__)
  autoload :RequestSet,         File.expand_path("rubygems/request_set", __dir__)
  autoload :Requirement,        File.expand_path("rubygems/requirement", __dir__)
  autoload :Resolver,           File.expand_path("rubygems/resolver", __dir__)
  autoload :Source,             File.expand_path("rubygems/source", __dir__)
  autoload :SourceList,         File.expand_path("rubygems/source_list", __dir__)
  autoload :SpecFetcher,        File.expand_path("rubygems/spec_fetcher", __dir__)
  autoload :SpecificationPolicy, File.expand_path("rubygems/specification_policy", __dir__)
  autoload :Util,               File.expand_path("rubygems/util", __dir__)
  autoload :Version,            File.expand_path("rubygems/version", __dir__)
end

require_relative "rubygems/exceptions"
require_relative "rubygems/specification"

# REFACTOR: This should be pulled out into some kind of hacks file.
begin
  ##
  # Defaults the operating system (or packager) wants to provide for RubyGems.

  require "rubygems/defaults/operating_system"
rescue LoadError
  # Ignored
rescue StandardError => e
  path = e.backtrace_locations.reverse.find {|l| l.path.end_with?("rubygems/defaults/operating_system.rb") }.path
  msg = "#{e.message}\n" \
    "Loading the #{path} file caused an error. " \
    "This file is owned by your OS, not by rubygems upstream. " \
    "Please find out which OS package this file belongs to and follow the guidelines from your OS to report " \
    "the problem and ask for help."
  raise e.class, msg
end

begin
  ##
  # Defaults the Ruby implementation wants to provide for RubyGems

  require "rubygems/defaults/#{RUBY_ENGINE}"
rescue LoadError
end

##
# Loads the default specs.
Gem::Specification.load_defaults

require_relative "rubygems/core_ext/kernel_gem"

path = File.join(__dir__, "rubygems/core_ext/kernel_require.rb")
# When https://bugs.ruby-lang.org/issues/17259 is available, there is no need to override Kernel#warn
if RUBY_ENGINE == "truffleruby" ||
   RUBY_ENGINE == "ruby"
  file = "<internal:#{path}>"
else
  require_relative "rubygems/core_ext/kernel_warn"
  file = path
end
eval File.read(path), nil, file

require ENV["BUNDLER_SETUP"] if ENV["BUNDLER_SETUP"] && !defined?(Bundler)
PK$J[kRF��*share/rubygems/rubygems/target_rbconfig.rbnu�[���# frozen_string_literal: true

require "rbconfig"

##
# A TargetConfig is a wrapper around an RbConfig object that provides a
# consistent interface for querying configuration for *deployment target
# platform*, where the gem being installed is intended to run on.
#
# The TargetConfig is typically created from the RbConfig of the running Ruby
# process, but can also be created from an RbConfig file on disk for cross-
# compiling gems.

class Gem::TargetRbConfig
  attr_reader :path

  def initialize(rbconfig, path)
    @rbconfig = rbconfig
    @path = path
  end

  ##
  # Creates a TargetRbConfig for the platform that RubyGems is running on.

  def self.for_running_ruby
    new(::RbConfig, nil)
  end

  ##
  # Creates a TargetRbConfig from the RbConfig file at the given path.
  # Typically used for cross-compiling gems.

  def self.from_path(rbconfig_path)
    namespace = Module.new do |m|
      # Load the rbconfig.rb file within a new anonymous module to avoid
      # conflicts with the rbconfig for the running platform.
      Kernel.load rbconfig_path, m
    end
    rbconfig = namespace.const_get(:RbConfig)

    new(rbconfig, rbconfig_path)
  end

  ##
  # Queries the configuration for the given key.

  def [](key)
    @rbconfig::CONFIG[key]
  end
end
PK$J[�/��3?3?"share/rubygems/rubygems/command.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "vendored_optparse"
require_relative "requirement"
require_relative "user_interaction"

##
# Base class for all Gem commands.  When creating a new gem command, define
# #initialize, #execute, #arguments, #defaults_str, #description and #usage
# (as appropriate).  See the above mentioned methods for details.
#
# A very good example to look at is Gem::Commands::ContentsCommand

class Gem::Command
  include Gem::UserInteraction

  Gem::OptionParser.accept Symbol, &:to_sym

  ##
  # The name of the command.

  attr_reader :command

  ##
  # The options for the command.

  attr_reader :options

  ##
  # The default options for the command.

  attr_accessor :defaults

  ##
  # The name of the command for command-line invocation.

  attr_accessor :program_name

  ##
  # A short description of the command.

  attr_accessor :summary

  ##
  # Arguments used when building gems

  def self.build_args
    @build_args ||= []
  end

  def self.build_args=(value)
    @build_args = value
  end

  def self.common_options
    @common_options ||= []
  end

  def self.add_common_option(*args, &handler)
    Gem::Command.common_options << [args, handler]
  end

  def self.extra_args
    @extra_args ||= []
  end

  def self.extra_args=(value)
    case value
    when Array
      @extra_args = value
    when String
      @extra_args = value.split(" ")
    end
  end

  ##
  # Return an array of extra arguments for the command.  The extra arguments
  # come from the gem configuration file read at program startup.

  def self.specific_extra_args(cmd)
    specific_extra_args_hash[cmd]
  end

  ##
  # Add a list of extra arguments for the given command.  +args+ may be an
  # array or a string to be split on white space.

  def self.add_specific_extra_args(cmd,args)
    args = args.split(/\s+/) if args.is_a? String
    specific_extra_args_hash[cmd] = args
  end

  ##
  # Accessor for the specific extra args hash (self initializing).

  def self.specific_extra_args_hash
    @specific_extra_args_hash ||= Hash.new do |h,k|
      h[k] = Array.new
    end
  end

  ##
  # Initializes a generic gem command named +command+.  +summary+ is a short
  # description displayed in `gem help commands`.  +defaults+ are the default
  # options.  Defaults should be mirrored in #defaults_str, unless there are
  # none.
  #
  # When defining a new command subclass, use add_option to add command-line
  # switches.
  #
  # Unhandled arguments (gem names, files, etc.) are left in
  # <tt>options[:args]</tt>.

  def initialize(command, summary=nil, defaults={})
    @command = command
    @summary = summary
    @program_name = "gem #{command}"
    @defaults = defaults
    @options = defaults.dup
    @option_groups = Hash.new {|h,k| h[k] = [] }
    @deprecated_options = { command => {} }
    @parser = nil
    @when_invoked = nil
  end

  ##
  # True if +long+ begins with the characters from +short+.

  def begins?(long, short)
    return false if short.nil?
    long[0, short.length] == short
  end

  ##
  # Override to provide command handling.
  #
  # #options will be filled in with your parsed options, unparsed options will
  # be left in <tt>options[:args]</tt>.
  #
  # See also: #get_all_gem_names, #get_one_gem_name,
  # #get_one_optional_argument

  def execute
    raise Gem::Exception, "generic command has no actions"
  end

  ##
  # Display to the user that a gem couldn't be found and reasons why
  #--

  def show_lookup_failure(gem_name, version, errors, suppress_suggestions = false, required_by = nil)
    gem = "'#{gem_name}' (#{version})"
    msg = String.new "Could not find a valid gem #{gem}"

    if errors && !errors.empty?
      msg << ", here is why:\n"
      errors.each {|x| msg << "          #{x.wordy}\n" }
    else
      if required_by && gem != required_by
        msg << " (required by #{required_by}) in any repository"
      else
        msg << " in any repository"
      end
    end

    alert_error msg

    unless suppress_suggestions
      suggestions = Gem::SpecFetcher.fetcher.suggest_gems_from_name(gem_name, :latest, 10)
      unless suggestions.empty?
        alert_error "Possible alternatives: #{suggestions.join(", ")}"
      end
    end
  end

  ##
  # Get all gem names from the command line.

  def get_all_gem_names
    args = options[:args]

    if args.nil? || args.empty?
      raise Gem::CommandLineError,
            "Please specify at least one gem name (e.g. gem build GEMNAME)"
    end

    args.reject {|arg| arg.start_with?("-") }
  end

  ##
  # Get all [gem, version] from the command line.
  #
  # An argument in the form gem:ver is pull apart into the gen name and version,
  # respectively.
  def get_all_gem_names_and_versions
    get_all_gem_names.map do |name|
      extract_gem_name_and_version(name)
    end
  end

  def extract_gem_name_and_version(name) # :nodoc:
    if /\A(.*):(#{Gem::Requirement::PATTERN_RAW})\z/ =~ name
      [$1, $2]
    else
      [name]
    end
  end

  ##
  # Get a single gem name from the command line.  Fail if there is no gem name
  # or if there is more than one gem name given.

  def get_one_gem_name
    args = options[:args]

    if args.nil? || args.empty?
      raise Gem::CommandLineError,
            "Please specify a gem name on the command line (e.g. gem build GEMNAME)"
    end

    if args.size > 1
      raise Gem::CommandLineError,
            "Too many gem names (#{args.join(", ")}); please specify only one"
    end

    args.first
  end

  ##
  # Get a single optional argument from the command line.  If more than one
  # argument is given, return only the first. Return nil if none are given.

  def get_one_optional_argument
    args = options[:args] || []
    args.first
  end

  ##
  # Override to provide details of the arguments a command takes.  It should
  # return a left-justified string, one argument per line.
  #
  # For example:
  #
  #   def usage
  #     "#{program_name} FILE [FILE ...]"
  #   end
  #
  #   def arguments
  #     "FILE          name of file to find"
  #   end

  def arguments
    ""
  end

  ##
  # Override to display the default values of the command options. (similar to
  # +arguments+, but displays the default values).
  #
  # For example:
  #
  #   def defaults_str
  #     --no-gems-first --no-all
  #   end

  def defaults_str
    ""
  end

  ##
  # Override to display a longer description of what this command does.

  def description
    nil
  end

  ##
  # Override to display the usage for an individual gem command.
  #
  # The text "[options]" is automatically appended to the usage text.

  def usage
    program_name
  end

  ##
  # Display the help message for the command.

  def show_help
    parser.program_name = usage
    say parser
  end

  ##
  # Invoke the command with the given list of arguments.

  def invoke(*args)
    invoke_with_build_args args, nil
  end

  ##
  # Invoke the command with the given list of normal arguments
  # and additional build arguments.

  def invoke_with_build_args(args, build_args)
    handle_options args

    options[:build_args] = build_args

    if options[:silent]
      old_ui = ui
      self.ui = ui = Gem::SilentUI.new
    end

    if options[:help]
      show_help
    elsif @when_invoked
      @when_invoked.call options
    else
      execute
    end
  ensure
    if ui
      self.ui = old_ui
      ui.close
    end
  end

  ##
  # Call the given block when invoked.
  #
  # Normal command invocations just executes the +execute+ method of the
  # command.  Specifying an invocation block allows the test methods to
  # override the normal action of a command to determine that it has been
  # invoked correctly.

  def when_invoked(&block)
    @when_invoked = block
  end

  ##
  # Add a command-line option and handler to the command.
  #
  # See Gem::OptionParser#make_switch for an explanation of +opts+.
  #
  # +handler+ will be called with two values, the value of the argument and
  # the options hash.
  #
  # If the first argument of add_option is a Symbol, it's used to group
  # options in output.  See `gem help list` for an example.

  def add_option(*opts, &handler) # :yields: value, options
    group_name = Symbol === opts.first ? opts.shift : :options

    raise "Do not pass an empty string in opts" if opts.include?("")

    @option_groups[group_name] << [opts, handler]
  end

  ##
  # Remove previously defined command-line argument +name+.

  def remove_option(name)
    @option_groups.each do |_, option_list|
      option_list.reject! {|args, _| args.any? {|x| x.is_a?(String) && x =~ /^#{name}/ } }
    end
  end

  ##
  # Mark a command-line option as deprecated, and optionally specify a
  # deprecation horizon.
  #
  # Note that with the current implementation, every version of the option needs
  # to be explicitly deprecated, so to deprecate an option defined as
  #
  #   add_option('-t', '--[no-]test', 'Set test mode') do |value, options|
  #     # ... stuff ...
  #   end
  #
  # you would need to explicitly add a call to `deprecate_option` for every
  # version of the option you want to deprecate, like
  #
  #   deprecate_option('-t')
  #   deprecate_option('--test')
  #   deprecate_option('--no-test')

  def deprecate_option(name, version: nil, extra_msg: nil)
    @deprecated_options[command].merge!({ name => { "rg_version_to_expire" => version, "extra_msg" => extra_msg } })
  end

  def check_deprecated_options(options)
    options.each do |option|
      next unless option_is_deprecated?(option)
      deprecation = @deprecated_options[command][option]
      version_to_expire = deprecation["rg_version_to_expire"]

      deprecate_option_msg = if version_to_expire
        "The \"#{option}\" option has been deprecated and will be removed in Rubygems #{version_to_expire}."
      else
        "The \"#{option}\" option has been deprecated and will be removed in future versions of Rubygems."
      end

      extra_msg = deprecation["extra_msg"]

      deprecate_option_msg += " #{extra_msg}" if extra_msg

      alert_warning(deprecate_option_msg)
    end
  end

  ##
  # Merge a set of command options with the set of default options (without
  # modifying the default option hash).

  def merge_options(new_options)
    @options = @defaults.clone
    new_options.each {|k,v| @options[k] = v }
  end

  ##
  # True if the command handles the given argument list.

  def handles?(args)
    parser.parse!(args.dup)
    true
  rescue StandardError
    false
  end

  ##
  # Handle the given list of arguments by parsing them and recording the
  # results.

  def handle_options(args)
    args = add_extra_args(args)
    check_deprecated_options(args)
    @options = Marshal.load Marshal.dump @defaults # deep copy
    parser.parse!(args)
    @options[:args] = args
  end

  ##
  # Adds extra args from ~/.gemrc

  def add_extra_args(args)
    result = []

    s_extra = Gem::Command.specific_extra_args(@command)
    extra = Gem::Command.extra_args + s_extra

    until extra.empty? do
      ex = []
      ex << extra.shift
      ex << extra.shift if /^[^-]/.match?(extra.first.to_s)
      result << ex if handles?(ex)
    end

    result.flatten!
    result.concat(args)
    result
  end

  def deprecated?
    false
  end

  private

  def option_is_deprecated?(option)
    @deprecated_options[command].key?(option)
  end

  def add_parser_description # :nodoc:
    return unless description

    formatted = description.split("\n\n").map do |chunk|
      wrap chunk, 80 - 4
    end.join "\n"

    @parser.separator nil
    @parser.separator "  Description:"
    formatted.each_line do |line|
      @parser.separator "    #{line.rstrip}"
    end
  end

  def add_parser_options # :nodoc:
    @parser.separator nil

    regular_options = @option_groups.delete :options

    configure_options "", regular_options

    @option_groups.sort_by {|n,_| n.to_s }.each do |group_name, option_list|
      @parser.separator nil
      configure_options group_name, option_list
    end
  end

  ##
  # Adds a section with +title+ and +content+ to the parser help view.  Used
  # for adding command arguments and default arguments.

  def add_parser_run_info(title, content)
    return if content.empty?

    @parser.separator nil
    @parser.separator "  #{title}:"
    content.each_line do |line|
      @parser.separator "    #{line.rstrip}"
    end
  end

  def add_parser_summary # :nodoc:
    return unless @summary

    @parser.separator nil
    @parser.separator "  Summary:"
    wrap(@summary, 80 - 4).each_line do |line|
      @parser.separator "    #{line.strip}"
    end
  end

  ##
  # Create on demand parser.

  def parser
    create_option_parser if @parser.nil?
    @parser
  end

  ##
  # Creates an option parser and fills it in with the help info for the
  # command.

  def create_option_parser
    @parser = Gem::OptionParser.new

    add_parser_options

    @parser.separator nil
    configure_options "Common", Gem::Command.common_options

    add_parser_run_info "Arguments", arguments
    add_parser_summary
    add_parser_description
    add_parser_run_info "Defaults", defaults_str
  end

  def configure_options(header, option_list)
    return if option_list.nil? || option_list.empty?

    header = header.to_s.empty? ? "" : "#{header} "
    @parser.separator "  #{header}Options:"

    option_list.each do |args, handler|
      @parser.on(*args) do |value|
        handler.call(value, @options)
      end
    end

    @parser.separator ""
  end

  ##
  # Wraps +text+ to +width+

  def wrap(text, width) # :doc:
    text.gsub(/(.{1,#{width}})( +|$\n?)|(.{1,#{width}})/, "\\1\\3\n")
  end

  # ----------------------------------------------------------------
  # Add the options common to all commands.

  add_common_option("-h", "--help",
                    "Get help on this command") do |_value, options|
    options[:help] = true
  end

  add_common_option("-V", "--[no-]verbose",
                    "Set the verbose level of output") do |value, _options|
    # Set us to "really verbose" so the progress meter works
    if Gem.configuration.verbose && value
      Gem.configuration.verbose = 1
    else
      Gem.configuration.verbose = value
    end
  end

  add_common_option("-q", "--quiet", "Silence command progress meter") do |_value, _options|
    Gem.configuration.verbose = false
  end

  add_common_option("--silent",
                    "Silence RubyGems output") do |_value, options|
    options[:silent] = true
  end

  # Backtrace and config-file are added so they show up in the help
  # commands.  Both options are actually handled before the other
  # options get parsed.

  add_common_option("--config-file FILE",
                    "Use this config file instead of default") do
  end

  add_common_option("--backtrace",
                    "Show stack backtrace on errors") do
  end

  add_common_option("--debug",
                    "Turn on Ruby debugging") do
  end

  add_common_option("--norc",
                    "Avoid loading any .gemrc file") do
  end

  # :stopdoc:

  HELP = <<-HELP
RubyGems is a package manager for Ruby.

  Usage:
    gem -h/--help
    gem -v/--version
    gem [global options...] command [arguments...] [options...]

  Global options:
    -C PATH                      run as if gem was started in <PATH>
                                 instead of the current working directory

  Examples:
    gem install rake
    gem list --local
    gem build package.gemspec
    gem push package-0.0.1.gem
    gem help install

  Further help:
    gem help commands            list all 'gem' commands
    gem help examples            show some examples of usage
    gem help gem_dependencies    gem dependencies file guide
    gem help platforms           gem platforms guide
    gem help <COMMAND>           show help on COMMAND
                                   (e.g. 'gem help install')
  Further information:
    https://guides.rubygems.org
  HELP

  # :startdoc:
end

##
# \Commands will be placed in this namespace

module Gem::Commands
end
PK$J[�B!share/rubygems/rubygems/errors.rbnu�[���# frozen_string_literal: true

#--
# This file contains all the various exceptions and other errors that are used
# inside of RubyGems.
#
# DOC: Confirm _all_
#++

module Gem
  ##
  # Raised when RubyGems is unable to load or activate a gem.  Contains the
  # name and version requirements of the gem that either conflicts with
  # already activated gems or that RubyGems is otherwise unable to activate.

  class LoadError < ::LoadError
    # Name of gem
    attr_accessor :name

    # Version requirement of gem
    attr_accessor :requirement
  end

  ##
  # Raised when trying to activate a gem, and that gem does not exist on the
  # system.  Instead of rescuing from this class, make sure to rescue from the
  # superclass Gem::LoadError to catch all types of load errors.
  class MissingSpecError < Gem::LoadError
    def initialize(name, requirement, extra_message=nil)
      @name        = name
      @requirement = requirement
      @extra_message = extra_message
      super(message)
    end

    def message # :nodoc:
      build_message +
        "Checked in 'GEM_PATH=#{Gem.path.join(File::PATH_SEPARATOR)}' #{@extra_message}, execute `gem env` for more information"
    end

    private

    def build_message
      total = Gem::Specification.stubs.size
      "Could not find '#{name}' (#{requirement}) among #{total} total gem(s)\n"
    end
  end

  ##
  # Raised when trying to activate a gem, and the gem exists on the system, but
  # not the requested version. Instead of rescuing from this class, make sure to
  # rescue from the superclass Gem::LoadError to catch all types of load errors.
  class MissingSpecVersionError < MissingSpecError
    attr_reader :specs

    def initialize(name, requirement, specs)
      @specs = specs
      super(name, requirement)
    end

    private

    def build_message
      names = specs.map(&:full_name)
      "Could not find '#{name}' (#{requirement}) - did find: [#{names.join ","}]\n"
    end
  end

  # Raised when there are conflicting gem specs loaded

  class ConflictError < LoadError
    ##
    # A Hash mapping conflicting specifications to the dependencies that
    # caused the conflict

    attr_reader :conflicts

    ##
    # The specification that had the conflict

    attr_reader :target

    def initialize(target, conflicts)
      @target    = target
      @conflicts = conflicts
      @name      = target.name

      reason = conflicts.map do |act, dependencies|
        "#{act.full_name} conflicts with #{dependencies.join(", ")}"
      end.join ", "

      # TODO: improve message by saying who activated `con`

      super("Unable to activate #{target.full_name}, because #{reason}")
    end
  end

  class ErrorReason; end

  # Generated when trying to lookup a gem to indicate that the gem
  # was found, but that it isn't usable on the current platform.
  #
  # fetch and install read these and report them to the user to aid
  # in figuring out why a gem couldn't be installed.
  #
  class PlatformMismatch < ErrorReason
    ##
    # the name of the gem
    attr_reader :name

    ##
    # the version
    attr_reader :version

    ##
    # The platforms that are mismatched
    attr_reader :platforms

    def initialize(name, version)
      @name = name
      @version = version
      @platforms = []
    end

    ##
    # append a platform to the list of mismatched platforms.
    #
    # Platforms are added via this instead of injected via the constructor
    # so that we can loop over a list of mismatches and just add them rather
    # than perform some kind of calculation mismatch summary before creation.
    def add_platform(platform)
      @platforms << platform
    end

    ##
    # A wordy description of the error.
    def wordy
      format("Found %s (%s), but was for platform%s %s", @name, @version, @platforms.size == 1 ? "" : "s", @platforms.join(" ,"))
    end
  end

  ##
  # An error that indicates we weren't able to fetch some
  # data from a source

  class SourceFetchProblem < ErrorReason
    ##
    # Creates a new SourceFetchProblem for the given +source+ and +error+.

    def initialize(source, error)
      @source = source
      @error = error
    end

    ##
    # The source that had the fetch problem.

    attr_reader :source

    ##
    # The fetch error which is an Exception subclass.

    attr_reader :error

    ##
    # An English description of the error.

    def wordy
      "Unable to download data from #{Gem::Uri.redact(@source.uri)} - #{@error.message}"
    end

    ##
    # The "exception" alias allows you to call raise on a SourceFetchProblem.

    alias_method :exception, :error
  end
end
PK$J[���r�	�	*share/rubygems/rubygems/yaml_serializer.rbnu�[���# frozen_string_literal: true

module Gem
  # A stub yaml serializer that can handle only hashes and strings (as of now).
  module YAMLSerializer
    module_function

    def dump(hash)
      yaml = String.new("---")
      yaml << dump_hash(hash)
    end

    def dump_hash(hash)
      yaml = String.new("\n")
      hash.each do |k, v|
        yaml << k << ":"
        if v.is_a?(Hash)
          yaml << dump_hash(v).gsub(/^(?!$)/, "  ") # indent all non-empty lines
        elsif v.is_a?(Array) # Expected to be array of strings
          if v.empty?
            yaml << " []\n"
          else
            yaml << "\n- " << v.map {|s| s.to_s.gsub(/\s+/, " ").inspect }.join("\n- ") << "\n"
          end
        else
          yaml << " " << v.to_s.gsub(/\s+/, " ").inspect << "\n"
        end
      end
      yaml
    end

    ARRAY_REGEX = /
      ^
      (?:[ ]*-[ ]) # '- ' before array items
      (['"]?) # optional opening quote
      (.*) # value
      \1 # matching closing quote
      $
    /xo

    HASH_REGEX = /
      ^
      ([ ]*) # indentations
      ([^#]+) # key excludes comment char '#'
      (?::(?=(?:\s|$))) # :  (without the lookahead the #key includes this when : is present in value)
      [ ]?
      (['"]?) # optional opening quote
      (.*) # value
      \3 # matching closing quote
      $
    /xo

    def load(str)
      res = {}
      stack = [res]
      last_hash = nil
      last_empty_key = nil
      str.split(/\r?\n/) do |line|
        if match = HASH_REGEX.match(line)
          indent, key, quote, val = match.captures
          val = strip_comment(val)

          depth = indent.size / 2
          if quote.empty? && val.empty?
            new_hash = {}
            stack[depth][key] = new_hash
            stack[depth + 1] = new_hash
            last_empty_key = key
            last_hash = stack[depth]
          else
            val = [] if val == "[]" # empty array
            stack[depth][key] = val
          end
        elsif match = ARRAY_REGEX.match(line)
          _, val = match.captures
          val = strip_comment(val)

          last_hash[last_empty_key] = [] unless last_hash[last_empty_key].is_a?(Array)

          last_hash[last_empty_key].push(val)
        end
      end
      res
    end

    def strip_comment(val)
      if val.include?("#") && !val.start_with?("#")
        val.split("#", 2).first.strip
      else
        val
      end
    end

    class << self
      private :dump_hash
    end
  end
end
PK$J[��5i  (share/rubygems/rubygems/specification.rbnu�[���# frozen_string_literal: true

#
#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "deprecate"
require_relative "basic_specification"
require_relative "stub_specification"
require_relative "platform"
require_relative "specification_record"
require_relative "util/list"

require "rbconfig"

##
# The Specification class contains the information for a gem.  Typically
# defined in a .gemspec file or a Rakefile, and looks like this:
#
#   Gem::Specification.new do |s|
#     s.name        = 'example'
#     s.version     = '0.1.0'
#     s.licenses    = ['MIT']
#     s.summary     = "This is an example!"
#     s.description = "Much longer explanation of the example!"
#     s.authors     = ["Ruby Coder"]
#     s.email       = 'rubycoder@example.com'
#     s.files       = ["lib/example.rb"]
#     s.homepage    = 'https://rubygems.org/gems/example'
#     s.metadata    = { "source_code_uri" => "https://github.com/example/example" }
#   end
#
# Starting in RubyGems 2.0, a Specification can hold arbitrary
# metadata.  See #metadata for restrictions on the format and size of metadata
# items you may add to a specification.

class Gem::Specification < Gem::BasicSpecification
  extend Gem::Deprecate

  # REFACTOR: Consider breaking out this version stuff into a separate
  # module. There's enough special stuff around it that it may justify
  # a separate class.

  ##
  # The version number of a specification that does not specify one
  # (i.e. RubyGems 0.7 or earlier).

  NONEXISTENT_SPECIFICATION_VERSION = -1

  ##
  # The specification version applied to any new Specification instances
  # created.  This should be bumped whenever something in the spec format
  # changes.
  #
  # Specification Version History:
  #
  #   spec   ruby
  #    ver    ver yyyy-mm-dd description
  #     -1 <0.8.0            pre-spec-version-history
  #      1  0.8.0 2004-08-01 Deprecated "test_suite_file" for "test_files"
  #                          "test_file=x" is a shortcut for "test_files=[x]"
  #      2  0.9.5 2007-10-01 Added "required_rubygems_version"
  #                          Now forward-compatible with future versions
  #      3  1.3.2 2009-01-03 Added Fixnum validation to specification_version
  #      4  1.9.0 2011-06-07 Added metadata
  #--
  # When updating this number, be sure to also update #to_ruby.
  #
  # NOTE RubyGems < 1.2 cannot load specification versions > 2.

  CURRENT_SPECIFICATION_VERSION = 4 # :nodoc:

  ##
  # An informal list of changes to the specification.  The highest-valued
  # key should be equal to the CURRENT_SPECIFICATION_VERSION.

  SPECIFICATION_VERSION_HISTORY = { # :nodoc:
    -1 => ["(RubyGems versions up to and including 0.7 did not have versioned specifications)"],
    1 => [
      'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
      '"test_file=x" is a shortcut for "test_files=[x]"',
    ],
    2 => [
      'Added "required_rubygems_version"',
      "Now forward-compatible with future versions",
    ],
    3 => [
      "Added Fixnum validation to the specification_version",
    ],
    4 => [
      "Added sandboxed freeform metadata to the specification version.",
    ],
  }.freeze

  MARSHAL_FIELDS = { # :nodoc:
    -1 => 16,
    1 => 16,
    2 => 16,
    3 => 17,
    4 => 18,
  }.freeze

  today = Time.now.utc
  TODAY = Time.utc(today.year, today.month, today.day) # :nodoc:

  @load_cache = {} # :nodoc:
  @load_cache_mutex = Thread::Mutex.new

  VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:

  # :startdoc:

  ##
  # List of attribute names: [:name, :version, ...]

  @@required_attributes = [:rubygems_version,
                           :specification_version,
                           :name,
                           :version,
                           :date,
                           :summary,
                           :require_paths]

  ##
  # Map of attribute names to default values.

  @@default_value = {
    authors: [],
    autorequire: nil,
    bindir: "bin",
    cert_chain: [],
    date: nil,
    dependencies: [],
    description: nil,
    email: nil,
    executables: [],
    extensions: [],
    extra_rdoc_files: [],
    files: [],
    homepage: nil,
    licenses: [],
    metadata: {},
    name: nil,
    platform: Gem::Platform::RUBY,
    post_install_message: nil,
    rdoc_options: [],
    require_paths: ["lib"],
    required_ruby_version: Gem::Requirement.default,
    required_rubygems_version: Gem::Requirement.default,
    requirements: [],
    rubygems_version: Gem::VERSION,
    signing_key: nil,
    specification_version: CURRENT_SPECIFICATION_VERSION,
    summary: nil,
    test_files: [],
    version: nil,
  }.freeze

  # rubocop:disable Style/MutableConstant
  INITIALIZE_CODE_FOR_DEFAULTS = {} # :nodoc:
  # rubocop:enable Style/MutableConstant

  @@default_value.each do |k,v|
    INITIALIZE_CODE_FOR_DEFAULTS[k] = case v
                                      when [], {}, true, false, nil, Numeric, Symbol
                                        v.inspect
                                      when String
                                        v.dump
                                      else
                                        "default_value(:#{k}).dup"
    end
  end

  @@attributes = @@default_value.keys.sort_by(&:to_s)
  @@array_attributes = @@default_value.select {|_k,v| v.is_a?(Array) }.keys
  @@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
    @@default_value[k].nil?
  end

  # Sentinel object to represent "not found" stubs
  NOT_FOUND = Struct.new(:to_spec, :this).new # :nodoc:
  deprecate_constant :NOT_FOUND

  # Tracking removed method calls to warn users during build time.
  REMOVED_METHODS = [:rubyforge_project=, :mark_version].freeze # :nodoc:
  def removed_method_calls
    @removed_method_calls ||= []
  end

  ######################################################################
  # :section: Required gemspec attributes

  ##
  # This gem's name.
  #
  # Usage:
  #
  #   spec.name = 'rake'

  attr_accessor :name

  ##
  # This gem's version.
  #
  # The version string can contain numbers and periods, such as +1.0.0+.
  # A gem is a 'prerelease' gem if the version has a letter in it, such as
  # +1.0.0.pre+.
  #
  # Usage:
  #
  #   spec.version = '0.4.1'

  attr_reader :version

  ##
  # A short summary of this gem's description.  Displayed in <tt>gem list -d</tt>.
  #
  # The #description should be more detailed than the summary.
  #
  # Usage:
  #
  #   spec.summary = "This is a small summary of my gem"

  attr_reader :summary

  ##
  # Files included in this gem.  You cannot append to this accessor, you must
  # assign to it.
  #
  # Only add files you can require to this list, not directories, etc.
  #
  # Directories are automatically stripped from this list when building a gem,
  # other non-files cause an error.
  #
  # Usage:
  #
  #   require 'rake'
  #   spec.files = FileList['lib/**/*.rb',
  #                         'bin/*',
  #                         '[A-Z]*'].to_a
  #
  #   # or without Rake...
  #   spec.files = Dir['lib/**/*.rb'] + Dir['bin/*']
  #   spec.files += Dir['[A-Z]*']
  #   spec.files.reject! { |fn| fn.include? "CVS" }

  def files
    # DO NOT CHANGE TO ||= ! This is not a normal accessor. (yes, it sucks)
    # DOC: Why isn't it normal? Why does it suck? How can we fix this?
    @files = [@files,
              @test_files,
              add_bindir(@executables),
              @extra_rdoc_files,
              @extensions].flatten.compact.uniq.sort
  end

  ##
  # A list of authors for this gem.
  #
  # Alternatively, a single author can be specified by assigning a string to
  # +spec.author+
  #
  # Usage:
  #
  #   spec.authors = ['John Jones', 'Mary Smith']

  def authors=(value)
    @authors = Array(value).flatten.grep(String)
  end

  ######################################################################
  # :section: Recommended gemspec attributes

  ##
  # The version of Ruby required by this gem
  #
  # Usage:
  #
  #   spec.required_ruby_version = '>= 2.7.0'

  attr_reader :required_ruby_version

  ##
  # A long description of this gem
  #
  # The description should be more detailed than the summary but not
  # excessively long.  A few paragraphs is a recommended length with no
  # examples or formatting.
  #
  # Usage:
  #
  #   spec.description = <<~EOF
  #     Rake is a Make-like program implemented in Ruby. Tasks and
  #     dependencies are specified in standard Ruby syntax.
  #   EOF

  attr_reader :description

  ##
  # A contact email address (or addresses) for this gem
  #
  # Usage:
  #
  #   spec.email = 'john.jones@example.com'
  #   spec.email = ['jack@example.com', 'jill@example.com']

  attr_accessor :email

  ##
  # The URL of this gem's home page
  #
  # Usage:
  #
  #   spec.homepage = 'https://github.com/ruby/rake'

  attr_accessor :homepage

  ##
  # The license for this gem.
  #
  # The license must be no more than 64 characters.
  #
  # This should just be the name of your license. The full text of the license
  # should be inside of the gem (at the top level) when you build it.
  #
  # The simplest way is to specify the standard SPDX ID
  # https://spdx.org/licenses/ for the license.
  # Ideally, you should pick one that is OSI (Open Source Initiative)
  # https://opensource.org/licenses/ approved.
  #
  # The most commonly used OSI-approved licenses are MIT and Apache-2.0.
  # GitHub also provides a license picker at https://choosealicense.com/.
  #
  # You can also use a custom license file along with your gemspec and specify
  # a LicenseRef-<idstring>, where idstring is the name of the file containing
  # the license text.
  #
  # You should specify a license for your gem so that people know how they are
  # permitted to use it and any restrictions you're placing on it.  Not
  # specifying a license means all rights are reserved; others have no right
  # to use the code for any purpose.
  #
  # You can set multiple licenses with #licenses=
  #
  # Usage:
  #   spec.license = 'MIT'

  def license=(o)
    self.licenses = [o]
  end

  ##
  # The license(s) for the library.
  #
  # Each license must be a short name, no more than 64 characters.
  #
  # This should just be the name of your license. The full
  # text of the license should be inside of the gem when you build it.
  #
  # See #license= for more discussion
  #
  # Usage:
  #   spec.licenses = ['MIT', 'GPL-2.0']

  def licenses=(licenses)
    @licenses = Array licenses
  end

  ##
  # The metadata holds extra data for this gem that may be useful to other
  # consumers and is settable by gem authors.
  #
  # Metadata items have the following restrictions:
  #
  # * The metadata must be a Hash object
  # * All keys and values must be Strings
  # * Keys can be a maximum of 128 bytes and values can be a maximum of 1024
  #   bytes
  # * All strings must be UTF-8, no binary data is allowed
  #
  # You can use metadata to specify links to your gem's homepage, codebase,
  # documentation, wiki, mailing list, issue tracker and changelog.
  #
  #   s.metadata = {
  #     "bug_tracker_uri"   => "https://example.com/user/bestgemever/issues",
  #     "changelog_uri"     => "https://example.com/user/bestgemever/CHANGELOG.md",
  #     "documentation_uri" => "https://www.example.info/gems/bestgemever/0.0.1",
  #     "homepage_uri"      => "https://bestgemever.example.io",
  #     "mailing_list_uri"  => "https://groups.example.com/bestgemever",
  #     "source_code_uri"   => "https://example.com/user/bestgemever",
  #     "wiki_uri"          => "https://example.com/user/bestgemever/wiki",
  #     "funding_uri"       => "https://example.com/donate"
  #   }
  #
  # These links will be used on your gem's page on rubygems.org and must pass
  # validation against following regex.
  #
  #   %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}

  attr_accessor :metadata

  ######################################################################
  # :section: Optional gemspec attributes

  ##
  # Singular (alternative) writer for #authors
  #
  # Usage:
  #
  #   spec.author = 'John Jones'

  def author=(o)
    self.authors = [o]
  end

  ##
  # The path in the gem for executable scripts.  Usually 'exe'
  #
  # Usage:
  #
  #   spec.bindir = 'exe'

  attr_accessor :bindir

  ##
  # The certificate chain used to sign this gem.  See Gem::Security for
  # details.

  attr_accessor :cert_chain

  ##
  # A message that gets displayed after the gem is installed.
  #
  # Usage:
  #
  #   spec.post_install_message = "Thanks for installing!"

  attr_accessor :post_install_message

  ##
  # The platform this gem runs on.
  #
  # This is usually Gem::Platform::RUBY or Gem::Platform::CURRENT.
  #
  # Most gems contain pure Ruby code; they should simply leave the default
  # value in place.  Some gems contain C (or other) code to be compiled into a
  # Ruby "extension".  The gem should leave the default value in place unless
  # the code will only compile on a certain type of system.  Some gems consist
  # of pre-compiled code ("binary gems").  It's especially important that they
  # set the platform attribute appropriately.  A shortcut is to set the
  # platform to Gem::Platform::CURRENT, which will cause the gem builder to set
  # the platform to the appropriate value for the system on which the build is
  # being performed.
  #
  # If this attribute is set to a non-default value, it will be included in
  # the filename of the gem when it is built such as:
  # nokogiri-1.6.0-x86-mingw32.gem
  #
  # Usage:
  #
  #   spec.platform = Gem::Platform.local

  def platform=(platform)
    @original_platform = platform

    case platform
    when Gem::Platform::CURRENT then
      @new_platform = Gem::Platform.local
      @original_platform = @new_platform.to_s

    when Gem::Platform then
      @new_platform = platform

    # legacy constants
    when nil, Gem::Platform::RUBY then
      @new_platform = Gem::Platform::RUBY
    when "mswin32" then # was Gem::Platform::WIN32
      @new_platform = Gem::Platform.new "x86-mswin32"
    when "i586-linux" then # was Gem::Platform::LINUX_586
      @new_platform = Gem::Platform.new "x86-linux"
    when "powerpc-darwin" then # was Gem::Platform::DARWIN
      @new_platform = Gem::Platform.new "ppc-darwin"
    else
      @new_platform = Gem::Platform.new platform
    end

    @platform = @new_platform.to_s

    invalidate_memoized_attributes
  end

  ##
  # Paths in the gem to add to <code>$LOAD_PATH</code> when this gem is
  # activated.
  #--
  # See also #require_paths
  #++
  # If you have an extension you do not need to add <code>"ext"</code> to the
  # require path, the extension build process will copy the extension files
  # into "lib" for you.
  #
  # The default value is <code>"lib"</code>
  #
  # Usage:
  #
  #   # If all library files are in the root directory...
  #   spec.require_paths = ['.']

  def require_paths=(val)
    @require_paths = Array(val)
  end

  ##
  # The RubyGems version required by this gem

  attr_reader :required_rubygems_version

  ##
  # The key used to sign this gem.  See Gem::Security for details.

  attr_accessor :signing_key

  ##
  # Adds a development dependency named +gem+ with +requirements+ to this
  # gem.
  #
  # Usage:
  #
  #   spec.add_development_dependency 'example', '~> 1.1', '>= 1.1.4'
  #
  # Development dependencies aren't installed by default and aren't
  # activated when a gem is required.

  def add_development_dependency(gem, *requirements)
    add_dependency_with_type(gem, :development, requirements)
  end

  ##
  # Adds a runtime dependency named +gem+ with +requirements+ to this gem.
  #
  # Usage:
  #
  #   spec.add_dependency 'example', '~> 1.1', '>= 1.1.4'

  def add_dependency(gem, *requirements)
    if requirements.uniq.size != requirements.size
      warn "WARNING: duplicated #{gem} dependency #{requirements}"
    end

    add_dependency_with_type(gem, :runtime, requirements)
  end

  ##
  # Executables included in the gem.
  #
  # For example, the rake gem has rake as an executable. You don't specify the
  # full path (as in bin/rake); all application-style files are expected to be
  # found in bindir.  These files must be executable Ruby files.  Files that
  # use bash or other interpreters will not work.
  #
  # Executables included may only be ruby scripts, not scripts for other
  # languages or compiled binaries.
  #
  # Usage:
  #
  #   spec.executables << 'rake'

  def executables
    @executables ||= []
  end

  ##
  # Extensions to build when installing the gem, specifically the paths to
  # extconf.rb-style files used to compile extensions.
  #
  # These files will be run when the gem is installed, causing the C (or
  # whatever) code to be compiled on the user's machine.
  #
  # Usage:
  #
  #  spec.extensions << 'ext/rmagic/extconf.rb'
  #
  # See Gem::Ext::Builder for information about writing extensions for gems.

  def extensions
    @extensions ||= []
  end

  ##
  # Extra files to add to RDoc such as README or doc/examples.txt
  #
  # When the user elects to generate the RDoc documentation for a gem (typically
  # at install time), all the library files are sent to RDoc for processing.
  # This option allows you to have some non-code files included for a more
  # complete set of documentation.
  #
  # Usage:
  #
  #  spec.extra_rdoc_files = ['README', 'doc/user-guide.txt']

  def extra_rdoc_files
    @extra_rdoc_files ||= []
  end

  ##
  # The version of RubyGems that installed this gem.  Returns
  # <code>Gem::Version.new(0)</code> for gems installed by versions earlier
  # than RubyGems 2.2.0.

  def installed_by_version # :nodoc:
    @installed_by_version ||= Gem::Version.new(0)
  end

  ##
  # Sets the version of RubyGems that installed this gem.  See also
  # #installed_by_version.

  def installed_by_version=(version) # :nodoc:
    @installed_by_version = Gem::Version.new version
  end

  ##
  # Specifies the rdoc options to be used when generating API documentation.
  #
  # Usage:
  #
  #   spec.rdoc_options << '--title' << 'Rake -- Ruby Make' <<
  #     '--main' << 'README' <<
  #     '--line-numbers'

  def rdoc_options
    @rdoc_options ||= []
  end

  LATEST_RUBY_WITHOUT_PATCH_VERSIONS = Gem::Version.new("2.1")

  ##
  # The version of Ruby required by this gem.  The ruby version can be
  # specified to the patch-level:
  #
  #   $ ruby -v -e 'p Gem.ruby_version'
  #   ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
  #   #<Gem::Version "2.0.0.247">
  #
  # Prereleases can also be specified.
  #
  # Usage:
  #
  #  # This gem will work with 1.8.6 or greater...
  #  spec.required_ruby_version = '>= 1.8.6'
  #
  #  # Only with final releases of major version 2 where minor version is at least 3
  #  spec.required_ruby_version = '~> 2.3'
  #
  #  # Only prereleases or final releases after 2.6.0.preview2
  #  spec.required_ruby_version = '> 2.6.0.preview2'
  #
  #  # This gem will work with 2.3.0 or greater, including major version 3, but lesser than 4.0.0
  #  spec.required_ruby_version = '>= 2.3', '< 4'

  def required_ruby_version=(req)
    @required_ruby_version = Gem::Requirement.create req

    @required_ruby_version.requirements.map! do |op, v|
      if v >= LATEST_RUBY_WITHOUT_PATCH_VERSIONS && v.release.segments.size == 4
        [op == "~>" ? "=" : op, Gem::Version.new(v.segments.tap {|s| s.delete_at(3) }.join("."))]
      else
        [op, v]
      end
    end
  end

  ##
  # The RubyGems version required by this gem

  def required_rubygems_version=(req)
    @required_rubygems_version = Gem::Requirement.create req
  end

  ##
  # Lists the external (to RubyGems) requirements that must be met for this gem
  # to work.  It's simply information for the user.
  #
  # Usage:
  #
  #   spec.requirements << 'libmagick, v6.0'
  #   spec.requirements << 'A good graphics card'

  def requirements
    @requirements ||= []
  end

  ##
  # A collection of unit test files.  They will be loaded as unit tests when
  # the user requests a gem to be unit tested.
  #
  # Usage:
  #   spec.test_files = Dir.glob('test/tc_*.rb')
  #   spec.test_files = ['tests/test-suite.rb']

  def test_files=(files) # :nodoc:
    @test_files = Array files
  end

  ######################################################################
  # :section: Read-only attributes

  ##
  # The version of RubyGems used to create this gem.

  attr_accessor :rubygems_version

  ##
  # The path where this gem installs its extensions.

  def extensions_dir
    @extensions_dir ||= super
  end

  ######################################################################
  # :section: Specification internals

  ##
  # True when this gemspec has been activated. This attribute is not persisted.

  attr_accessor :activated

  alias_method :activated?, :activated

  ##
  # Autorequire was used by old RubyGems to automatically require a file.
  #
  # Deprecated: It is neither supported nor functional.

  attr_accessor :autorequire # :nodoc:

  ##
  # Sets the default executable for this gem.
  #
  # Deprecated: You must now specify the executable name to  Gem.bin_path.

  attr_writer :default_executable
  rubygems_deprecate :default_executable=

  ##
  # Allows deinstallation of gems with legacy platforms.

  attr_writer :original_platform # :nodoc:

  ##
  # The Gem::Specification version of this gemspec.
  #
  # Do not set this, it is set automatically when the gem is packaged.

  attr_accessor :specification_version

  def self._all # :nodoc:
    specification_record.all
  end

  def self.clear_load_cache # :nodoc:
    @load_cache_mutex.synchronize do
      @load_cache.clear
    end
  end
  private_class_method :clear_load_cache

  def self.gem_path # :nodoc:
    Gem.path
  end
  private_class_method :gem_path

  def self.each_gemspec(dirs) # :nodoc:
    dirs.each do |dir|
      Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path|
        yield path
      end
    end
  end

  def self.gemspec_stubs_in(dir, pattern) # :nodoc:
    Gem::Util.glob_files_in_dir(pattern, dir).map {|path| yield path }.select(&:valid?)
  end

  def self.each_spec(dirs) # :nodoc:
    each_gemspec(dirs) do |path|
      spec = self.load path
      yield spec if spec
    end
  end

  ##
  # Returns a Gem::StubSpecification for every installed gem

  def self.stubs
    specification_record.stubs
  end

  ##
  # Returns a Gem::StubSpecification for default gems

  def self.default_stubs(pattern = "*.gemspec")
    base_dir = Gem.default_dir
    gems_dir = File.join base_dir, "gems"
    gemspec_stubs_in(Gem.default_specifications_dir, pattern) do |path|
      Gem::StubSpecification.default_gemspec_stub(path, base_dir, gems_dir)
    end
  end

  ##
  # Returns a Gem::StubSpecification for installed gem named +name+
  # only returns stubs that match Gem.platforms

  def self.stubs_for(name)
    specification_record.stubs_for(name)
  end

  ##
  # Finds stub specifications matching a pattern from the standard locations,
  # optionally filtering out specs not matching the current platform
  #
  def self.stubs_for_pattern(pattern, match_platform = true) # :nodoc:
    specification_record.stubs_for_pattern(pattern, match_platform)
  end

  def self._resort!(specs) # :nodoc:
    specs.sort! do |a, b|
      names = a.name <=> b.name
      next names if names.nonzero?
      versions = b.version <=> a.version
      next versions if versions.nonzero?
      platforms = Gem::Platform.sort_priority(b.platform) <=> Gem::Platform.sort_priority(a.platform)
      next platforms if platforms.nonzero?
      default_gem = a.default_gem_priority <=> b.default_gem_priority
      next default_gem if default_gem.nonzero?
      a.base_dir_priority(gem_path) <=> b.base_dir_priority(gem_path)
    end
  end

  ##
  # Loads the default specifications. It should be called only once.

  def self.load_defaults
    each_spec([Gem.default_specifications_dir]) do |spec|
      # #load returns nil if the spec is bad, so we just ignore
      # it at this stage
      Gem.register_default_spec(spec)
    end
  end

  ##
  # Adds +spec+ to the known specifications, keeping the collection
  # properly sorted.

  def self.add_spec(spec)
    specification_record.add_spec(spec)
  end

  ##
  # Removes +spec+ from the known specs.

  def self.remove_spec(spec)
    specification_record.remove_spec(spec)
  end

  ##
  # Returns all specifications. This method is discouraged from use.
  # You probably want to use one of the Enumerable methods instead.

  def self.all
    warn "NOTE: Specification.all called from #{caller(1, 1).first}" unless
      Gem::Deprecate.skip
    _all
  end

  ##
  # Sets the known specs to +specs+.

  def self.all=(specs)
    specification_record.all = specs
  end

  ##
  # Return full names of all specs in sorted order.

  def self.all_names
    specification_record.all_names
  end

  ##
  # Return the list of all array-oriented instance variables.
  #--
  # Not sure why we need to use so much stupid reflection in here...

  def self.array_attributes
    @@array_attributes.dup
  end

  ##
  # Return the list of all instance variables.
  #--
  # Not sure why we need to use so much stupid reflection in here...

  def self.attribute_names
    @@attributes.dup
  end

  ##
  # Return the directories that Specification uses to find specs.

  def self.dirs
    @@dirs ||= Gem::SpecificationRecord.dirs_from(gem_path)
  end

  ##
  # Set the directories that Specification uses to find specs. Setting
  # this resets the list of known specs.

  def self.dirs=(dirs)
    reset

    @@dirs = Gem::SpecificationRecord.dirs_from(Array(dirs))
  end

  extend Enumerable

  ##
  # Enumerate every known spec.  See ::dirs= and ::add_spec to set the list of
  # specs.

  def self.each(&block)
    specification_record.each(&block)
  end

  ##
  # Returns every spec that matches +name+ and optional +requirements+.

  def self.find_all_by_name(name, *requirements)
    specification_record.find_all_by_name(name, *requirements)
  end

  ##
  # Returns every spec that has the given +full_name+

  def self.find_all_by_full_name(full_name)
    stubs.select {|s| s.full_name == full_name }.map(&:to_spec)
  end

  ##
  # Find the best specification matching a +name+ and +requirements+. Raises
  # if the dependency doesn't resolve to a valid specification.

  def self.find_by_name(name, *requirements)
    requirements = Gem::Requirement.default if requirements.empty?

    Gem::Dependency.new(name, *requirements).to_spec
  end

  ##
  # Find the best specification matching a +full_name+.
  def self.find_by_full_name(full_name)
    stubs.find {|s| s.full_name == full_name }&.to_spec
  end

  ##
  # Return the best specification that contains the file matching +path+.

  def self.find_by_path(path)
    specification_record.find_by_path(path)
  end

  ##
  # Return the best specification that contains the file matching +path+
  # amongst the specs that are not activated.

  def self.find_inactive_by_path(path)
    specification_record.find_inactive_by_path(path)
  end

  ##
  # Return the best specification that contains the file matching +path+, among
  # those already activated.

  def self.find_active_stub_by_path(path)
    specification_record.find_active_stub_by_path(path)
  end

  ##
  # Return currently unresolved specs that contain the file matching +path+.

  def self.find_in_unresolved(path)
    unresolved_specs.find_all {|spec| spec.contains_requirable_file? path }
  end

  ##
  # Search through all unresolved deps and sub-dependencies and return
  # specs that contain the file matching +path+.

  def self.find_in_unresolved_tree(path)
    unresolved_specs.each do |spec|
      spec.traverse do |_from_spec, _dep, to_spec, trail|
        if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
          :next
        else
          return trail.reverse if to_spec.contains_requirable_file? path
        end
      end
    end

    []
  end

  def self.unresolved_specs
    unresolved_deps.values.flat_map(&:to_specs)
  end
  private_class_method :unresolved_specs

  ##
  # Special loader for YAML files.  When a Specification object is loaded
  # from a YAML file, it bypasses the normal Ruby object initialization
  # routine (#initialize).  This method makes up for that and deals with
  # gems of different ages.
  #
  # +input+ can be anything that YAML.load() accepts: String or IO.

  def self.from_yaml(input)
    Gem.load_yaml

    input = normalize_yaml_input input
    spec = Gem::SafeYAML.safe_load input

    if spec && spec.class == FalseClass
      raise Gem::EndOfYAMLException
    end

    unless Gem::Specification === spec
      raise Gem::Exception, "YAML data doesn't evaluate to gem specification"
    end

    spec.specification_version ||= NONEXISTENT_SPECIFICATION_VERSION
    spec.reset_nil_attributes_to_default
    spec.flatten_require_paths

    spec
  end

  ##
  # Return the latest specs, optionally including prerelease specs if
  # +prerelease+ is true.

  def self.latest_specs(prerelease = false)
    specification_record.latest_specs(prerelease)
  end

  ##
  # Return the latest installed spec for gem +name+.

  def self.latest_spec_for(name)
    specification_record.latest_spec_for(name)
  end

  def self._latest_specs(specs, prerelease = false) # :nodoc:
    result = {}

    specs.reverse_each do |spec|
      unless prerelease
        next if spec.version.prerelease?
      end

      result[spec.name] = spec
    end

    result.flat_map(&:last).sort_by(&:name)
  end

  ##
  # Loads Ruby format gemspec from +file+.

  def self.load(file)
    return unless file

    spec = @load_cache_mutex.synchronize { @load_cache[file] }
    return spec if spec

    return unless File.file?(file)

    code = Gem.open_file(file, "r:UTF-8:-", &:read)

    begin
      spec = eval code, binding, file

      if Gem::Specification === spec
        spec.loaded_from = File.expand_path file.to_s
        @load_cache_mutex.synchronize do
          prev = @load_cache[file]
          if prev
            spec = prev
          else
            @load_cache[file] = spec
          end
        end
        return spec
      end

      warn "[#{file}] isn't a Gem::Specification (#{spec.class} instead)."
    rescue SignalException, SystemExit
      raise
    rescue SyntaxError, StandardError => e
      warn "Invalid gemspec in [#{file}]: #{e}"
    end

    nil
  end

  ##
  # Specification attributes that must be non-nil

  def self.non_nil_attributes
    @@non_nil_attributes.dup
  end

  ##
  # Make sure the YAML specification is properly formatted with dashes

  def self.normalize_yaml_input(input)
    result = input.respond_to?(:read) ? input.read : input
    result = "--- " + result unless result.start_with?("--- ")
    result = result.dup
    result.gsub!(/ !!null \n/, " \n")
    # date: 2011-04-26 00:00:00.000000000Z
    # date: 2011-04-26 00:00:00.000000000 Z
    result.gsub!(/^(date: \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+?)Z/, '\1 Z')
    result
  end

  ##
  # Return a list of all outdated local gem names.  This method is HEAVY
  # as it must go fetch specifications from the server.
  #
  # Use outdated_and_latest_version if you wish to retrieve the latest remote
  # version as well.

  def self.outdated
    outdated_and_latest_version.map {|local, _| local.name }
  end

  ##
  # Enumerates the outdated local gems yielding the local specification and
  # the latest remote version.
  #
  # This method may take some time to return as it must check each local gem
  # against the server's index.

  def self.outdated_and_latest_version
    return enum_for __method__ unless block_given?

    # TODO: maybe we should switch to rubygems' version service?
    fetcher = Gem::SpecFetcher.fetcher

    latest_specs(true).each do |local_spec|
      dependency =
        Gem::Dependency.new local_spec.name, ">= #{local_spec.version}"

      remotes, = fetcher.search_for_dependency dependency
      remotes  = remotes.map {|n, _| n.version }

      latest_remote = remotes.sort.last

      yield [local_spec, latest_remote] if
        latest_remote && local_spec.version < latest_remote
    end

    nil
  end

  ##
  # Is +name+ a required attribute?

  def self.required_attribute?(name)
    @@required_attributes.include? name.to_sym
  end

  ##
  # Required specification attributes

  def self.required_attributes
    @@required_attributes.dup
  end

  ##
  # Reset the list of known specs, running pre and post reset hooks
  # registered in Gem.

  def self.reset
    @@dirs = nil
    Gem.pre_reset_hooks.each(&:call)
    @specification_record = nil
    clear_load_cache

    unless unresolved_deps.empty?
      unresolved = unresolved_deps.filter_map do |name, dep|
        matching_versions = find_all_by_name(name)
        next if dep.latest_version? && matching_versions.any?(&:default_gem?)

        [dep, matching_versions.uniq(&:full_name)]
      end.to_h

      unless unresolved.empty?
        warn "WARN: Unresolved or ambiguous specs during Gem::Specification.reset:"
        unresolved.each do |dep, versions|
          warn "      #{dep}"

          unless versions.empty?
            warn "      Available/installed versions of this gem:"
            versions.each {|s| warn "      - #{s.version}" }
          end
        end
        warn "WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
        warn "Please report a bug if this causes problems."
      end

      unresolved_deps.clear
    end
    Gem.post_reset_hooks.each(&:call)
  end

  ##
  # Keeps track of all currently known specifications

  def self.specification_record
    @specification_record ||= Gem::SpecificationRecord.new(dirs)
  end

  # DOC: This method needs documented or nodoc'd
  def self.unresolved_deps
    @unresolved_deps ||= Hash.new {|h, n| h[n] = Gem::Dependency.new n }
  end

  ##
  # Load custom marshal format, re-initializing defaults as needed

  def self._load(str)
    Gem.load_yaml
    Gem.load_safe_marshal

    yaml_set = false
    retry_count = 0

    array = begin
      Gem::SafeMarshal.safe_load str
    rescue ArgumentError => e
      # Avoid an infinite retry loop when the argument error has nothing to do
      # with the classes not being defined.
      # 1 retry each allowed in case all 3 of
      # - YAML
      # - YAML::Syck::DefaultKey
      # - YAML::PrivateType
      # need to be defined
      raise if retry_count >= 3

      #
      # Some very old marshaled specs included references to `YAML::PrivateType`
      # and `YAML::Syck::DefaultKey` constants due to bugs in the old emitter
      # that generated them. Workaround the issue by defining the necessary
      # constants and retrying.
      #
      message = e.message
      raise unless message.include?("YAML::")

      unless Object.const_defined?(:YAML)
        Object.const_set "YAML", Psych
        yaml_set = true
      end

      if message.include?("YAML::Syck::")
        YAML.const_set "Syck", YAML unless YAML.const_defined?(:Syck)

        YAML::Syck.const_set "DefaultKey", Class.new if message.include?("YAML::Syck::DefaultKey") && !YAML::Syck.const_defined?(:DefaultKey)
      elsif message.include?("YAML::PrivateType") && !YAML.const_defined?(:PrivateType)
        YAML.const_set "PrivateType", Class.new
      end

      retry_count += 1
      retry
    ensure
      Object.__send__(:remove_const, "YAML") if yaml_set
    end

    spec = Gem::Specification.new
    spec.instance_variable_set :@specification_version, array[1]

    current_version = CURRENT_SPECIFICATION_VERSION

    field_count = if spec.specification_version > current_version
      spec.instance_variable_set :@specification_version,
                                 current_version
      MARSHAL_FIELDS[current_version]
    else
      MARSHAL_FIELDS[spec.specification_version]
    end

    if array.size < field_count
      raise TypeError, "invalid Gem::Specification format #{array.inspect}"
    end

    spec.instance_variable_set :@rubygems_version,          array[0]
    # spec version
    spec.instance_variable_set :@name,                      array[2]
    spec.instance_variable_set :@version,                   array[3]
    spec.date =                                             array[4]
    spec.instance_variable_set :@summary,                   array[5]
    spec.instance_variable_set :@required_ruby_version,     array[6]
    spec.instance_variable_set :@required_rubygems_version, array[7]
    spec.platform =                                         array[8]
    spec.instance_variable_set :@dependencies,              array[9]
    # offset due to rubyforge_project removal
    spec.instance_variable_set :@email,                     array[11]
    spec.instance_variable_set :@authors,                   array[12]
    spec.instance_variable_set :@description,               array[13]
    spec.instance_variable_set :@homepage,                  array[14]
    spec.instance_variable_set :@has_rdoc,                  array[15]
    spec.instance_variable_set :@licenses,                  array[17]
    spec.instance_variable_set :@metadata,                  array[18]
    spec.instance_variable_set :@loaded,                    false
    spec.instance_variable_set :@activated,                 false

    spec
  end

  def <=>(other) # :nodoc:
    sort_obj <=> other.sort_obj
  end

  def ==(other) # :nodoc:
    self.class === other &&
      name == other.name &&
      version == other.version &&
      platform == other.platform
  end

  ##
  # Dump only crucial instance variables.
  #--
  # MAINTAIN ORDER!
  # (down with the man)

  def _dump(limit)
    Marshal.dump [
      @rubygems_version,
      @specification_version,
      @name,
      @version,
      date,
      @summary,
      @required_ruby_version,
      @required_rubygems_version,
      @original_platform,
      @dependencies,
      "", # rubyforge_project
      @email,
      @authors,
      @description,
      @homepage,
      true, # has_rdoc
      @new_platform,
      @licenses,
      @metadata,
    ]
  end

  ##
  # Activate this spec, registering it as a loaded spec and adding
  # it's lib paths to $LOAD_PATH. Returns true if the spec was
  # activated, false if it was previously activated. Freaks out if
  # there are conflicts upon activation.

  def activate
    other = Gem.loaded_specs[name]
    if other
      check_version_conflict other
      return false
    end

    raise_if_conflicts

    activate_dependencies
    add_self_to_load_path

    Gem.loaded_specs[name] = self
    @activated = true
    @loaded = true

    true
  end

  ##
  # Activate all unambiguously resolved runtime dependencies of this
  # spec. Add any ambiguous dependencies to the unresolved list to be
  # resolved later, as needed.

  def activate_dependencies
    unresolved = Gem::Specification.unresolved_deps

    runtime_dependencies.each do |spec_dep|
      if loaded = Gem.loaded_specs[spec_dep.name]
        next if spec_dep.matches_spec? loaded

        msg = "can't satisfy '#{spec_dep}', already activated '#{loaded.full_name}'"
        e = Gem::LoadError.new msg
        e.name = spec_dep.name

        raise e
      end

      specs = spec_dep.matching_specs(true).uniq(&:full_name)

      if specs.size == 0
        raise Gem::MissingSpecError.new(spec_dep.name, spec_dep.requirement, "at: #{spec_file}")
      elsif specs.size == 1
        specs.first.activate
      else
        name = spec_dep.name
        unresolved[name] = unresolved[name].merge spec_dep
      end
    end

    unresolved.delete self.name
  end

  ##
  # Abbreviate the spec for downloading.  Abbreviated specs are only used for
  # searching, downloading and related activities and do not need deployment
  # specific information (e.g. list of files).  So we abbreviate the spec,
  # making it much smaller for quicker downloads.

  def abbreviate
    self.files = []
    self.test_files = []
    self.rdoc_options = []
    self.extra_rdoc_files = []
    self.cert_chain = []
  end

  ##
  # Sanitize the descriptive fields in the spec.  Sometimes non-ASCII
  # characters will garble the site index.  Non-ASCII characters will
  # be replaced by their XML entity equivalent.

  def sanitize
    self.summary              = sanitize_string(summary)
    self.description          = sanitize_string(description)
    self.post_install_message = sanitize_string(post_install_message)
    self.authors              = authors.collect {|a| sanitize_string(a) }
  end

  ##
  # Sanitize a single string.

  def sanitize_string(string)
    return string unless string

    # HACK: the #to_s is in here because RSpec has an Array of Arrays of
    # Strings for authors.  Need a way to disallow bad values on gemspec
    # generation.  (Probably won't happen.)
    string.to_s
  end

  ##
  # Returns an array with bindir attached to each executable in the
  # +executables+ list

  def add_bindir(executables)
    return nil if executables.nil?

    if @bindir
      Array(executables).map {|e| File.join(@bindir, e) }
    else
      executables
    end
  rescue StandardError
    nil
  end

  ##
  # Adds a dependency on gem +dependency+ with type +type+ that requires
  # +requirements+.  Valid types are currently <tt>:runtime</tt> and
  # <tt>:development</tt>.

  def add_dependency_with_type(dependency, type, requirements)
    requirements = if requirements.empty?
      Gem::Requirement.default
    else
      requirements.flatten
    end

    unless dependency.respond_to?(:name) &&
           dependency.respond_to?(:requirement)
      dependency = Gem::Dependency.new(dependency.to_s, requirements, type)
    end

    dependencies << dependency
  end

  private :add_dependency_with_type

  alias_method :add_runtime_dependency, :add_dependency

  ##
  # Adds this spec's require paths to LOAD_PATH, in the proper location.

  def add_self_to_load_path
    return if default_gem?

    paths = full_require_paths

    Gem.add_to_load_path(*paths)
  end

  ##
  # Singular reader for #authors.  Returns the first author in the list

  def author
    (val = authors) && val.first
  end

  ##
  # The list of author names who wrote this gem.
  #
  #   spec.authors = ['Chad Fowler', 'Jim Weirich', 'Rich Kilmer']

  def authors
    @authors ||= []
  end

  ##
  # Returns the full path to installed gem's bin directory.
  #
  # NOTE: do not confuse this with +bindir+, which is just 'bin', not
  # a full path.

  def bin_dir
    @bin_dir ||= File.join gem_dir, bindir
  end

  ##
  # Returns the full path to an executable named +name+ in this gem.

  def bin_file(name)
    File.join bin_dir, name
  end

  ##
  # Returns the build_args used to install the gem

  def build_args
    if File.exist? build_info_file
      build_info = File.readlines build_info_file
      build_info = build_info.map(&:strip)
      build_info.delete ""
      build_info
    else
      []
    end
  end

  ##
  # Builds extensions for this platform if the gem has extensions listed and
  # the gem.build_complete file is missing.

  def build_extensions # :nodoc:
    return if extensions.empty?
    return if default_gem?
    # we need to fresh build when same name and version of default gems
    return if self.class.find_by_full_name(full_name)&.default_gem?
    return if File.exist? gem_build_complete_path
    return unless File.writable?(base_dir)
    return unless File.exist?(File.join(base_dir, "extensions"))

    begin
      # We need to require things in $LOAD_PATH without looking for the
      # extension we are about to build.
      unresolved_deps = Gem::Specification.unresolved_deps.dup
      Gem::Specification.unresolved_deps.clear

      require_relative "config_file"
      require_relative "ext"
      require_relative "user_interaction"

      ui = Gem::SilentUI.new
      Gem::DefaultUserInteraction.use_ui ui do
        builder = Gem::Ext::Builder.new self
        builder.build_extensions
      end
    ensure
      ui&.close
      Gem::Specification.unresolved_deps.replace unresolved_deps
    end
  end

  ##
  # Returns the full path to the build info directory

  def build_info_dir
    File.join base_dir, "build_info"
  end

  ##
  # Returns the full path to the file containing the build
  # information generated when the gem was installed

  def build_info_file
    File.join build_info_dir, "#{full_name}.info"
  end

  ##
  # Returns the full path to the cache directory containing this
  # spec's cached gem.

  def cache_dir
    @cache_dir ||= File.join base_dir, "cache"
  end

  ##
  # Returns the full path to the cached gem for this spec.

  def cache_file
    @cache_file ||= File.join cache_dir, "#{full_name}.gem"
  end

  ##
  # Return any possible conflicts against the currently loaded specs.

  def conflicts
    conflicts = {}
    runtime_dependencies.each do |dep|
      spec = Gem.loaded_specs[dep.name]
      if spec && !spec.satisfies_requirement?(dep)
        (conflicts[spec] ||= []) << dep
      end
    end
    env_req = Gem.env_requirement(name)
    (conflicts[self] ||= []) << env_req unless env_req.satisfied_by? version
    conflicts
  end

  ##
  # return true if there will be conflict when spec if loaded together with the list of specs.

  def conficts_when_loaded_with?(list_of_specs) # :nodoc:
    result = list_of_specs.any? do |spec|
      spec.runtime_dependencies.any? {|dep| (dep.name == name) && !satisfies_requirement?(dep) }
    end
    result
  end

  ##
  # Return true if there are possible conflicts against the currently loaded specs.

  def has_conflicts?
    return true unless Gem.env_requirement(name).satisfied_by?(version)
    runtime_dependencies.any? do |dep|
      spec = Gem.loaded_specs[dep.name]
      spec && !spec.satisfies_requirement?(dep)
    end
  rescue ArgumentError => e
    raise e, "#{name} #{version}: #{e.message}"
  end

  # The date this gem was created.
  #
  # If SOURCE_DATE_EPOCH is set as an environment variable, use that to support
  # reproducible builds; otherwise, default to the current UTC date.
  #
  # Details on SOURCE_DATE_EPOCH:
  # https://reproducible-builds.org/specs/source-date-epoch/

  def date
    @date ||= Time.utc(*Gem.source_date_epoch.utc.to_a[3..5].reverse)
  end

  DateLike = Object.new # :nodoc:
  def DateLike.===(obj) # :nodoc:
    defined?(::Date) && Date === obj
  end

  DateTimeFormat = # :nodoc:
    /\A
     (\d{4})-(\d{2})-(\d{2})
     (\s+ \d{2}:\d{2}:\d{2}\.\d+ \s* (Z | [-+]\d\d:\d\d) )?
     \Z/x

  ##
  # The date this gem was created
  #
  # DO NOT set this, it is set automatically when the gem is packaged.

  def date=(date)
    # We want to end up with a Time object with one-day resolution.
    # This is the cleanest, most-readable, faster-than-using-Date
    # way to do it.
    @date = case date
            when String then
              if DateTimeFormat =~ date
                Time.utc($1.to_i, $2.to_i, $3.to_i)
              else
                raise(Gem::InvalidSpecificationException,
                      "invalid date format in specification: #{date.inspect}")
              end
            when Time, DateLike then
              Time.utc(date.year, date.month, date.day)
            else
              TODAY
    end
  end

  ##
  # The default executable for this gem.
  #
  # Deprecated: The name of the gem is assumed to be the name of the
  # executable now.  See Gem.bin_path.

  def default_executable # :nodoc:
    if defined?(@default_executable) && @default_executable
      result = @default_executable
    elsif @executables && @executables.size == 1
      result = Array(@executables).first
    else
      result = nil
    end
    result
  end
  rubygems_deprecate :default_executable

  ##
  # The default value for specification attribute +name+

  def default_value(name)
    @@default_value[name]
  end

  ##
  # A list of Gem::Dependency objects this gem depends on.
  #
  # Use #add_dependency or #add_development_dependency to add dependencies to
  # a gem.

  def dependencies
    @dependencies ||= []
  end

  ##
  # Return a list of all gems that have a dependency on this gemspec.  The
  # list is structured with entries that conform to:
  #
  #   [depending_gem, dependency, [list_of_gems_that_satisfy_dependency]]

  def dependent_gems(check_dev=true)
    out = []
    Gem::Specification.each do |spec|
      deps = check_dev ? spec.dependencies : spec.runtime_dependencies
      deps.each do |dep|
        next unless satisfies_requirement?(dep)
        sats = []
        find_all_satisfiers(dep) do |sat|
          sats << sat
        end
        out << [spec, dep, sats]
      end
    end
    out
  end

  ##
  # Returns all specs that matches this spec's runtime dependencies.

  def dependent_specs
    runtime_dependencies.flat_map(&:to_specs)
  end

  ##
  # A detailed description of this gem.  See also #summary

  def description=(str)
    @description = str.to_s
  end

  ##
  # List of dependencies that are used for development

  def development_dependencies
    dependencies.select {|d| d.type == :development }
  end

  ##
  # Returns the full path to this spec's documentation directory.  If +type+
  # is given it will be appended to the end.  For example:
  #
  #   spec.doc_dir      # => "/path/to/gem_repo/doc/a-1"
  #
  #   spec.doc_dir 'ri' # => "/path/to/gem_repo/doc/a-1/ri"

  def doc_dir(type = nil)
    @doc_dir ||= File.join base_dir, "doc", full_name

    if type
      File.join @doc_dir, type
    else
      @doc_dir
    end
  end

  def encode_with(coder) # :nodoc:
    coder.add "name", @name
    coder.add "version", @version
    coder.add "platform", platform.to_s
    coder.add "original_platform", original_platform.to_s if platform.to_s != original_platform.to_s

    attributes = @@attributes.map(&:to_s) - %w[name version platform]
    attributes.each do |name|
      value = instance_variable_get("@#{name}")
      coder.add name, value unless value.nil?
    end
  end

  def eql?(other) # :nodoc:
    self.class === other && same_attributes?(other)
  end

  ##
  # Singular accessor for #executables

  def executable
    (val = executables) && val.first
  end

  ##
  # Singular accessor for #executables

  def executable=(o)
    self.executables = [o]
  end

  ##
  # Sets executables to +value+, ensuring it is an array.

  def executables=(value)
    @executables = Array(value)
  end

  ##
  # Sets extensions to +extensions+, ensuring it is an array.

  def extensions=(extensions)
    @extensions = Array extensions
  end

  ##
  # Sets extra_rdoc_files to +files+, ensuring it is an array.

  def extra_rdoc_files=(files)
    @extra_rdoc_files = Array files
  end

  ##
  # The default (generated) file name of the gem.  See also #spec_name.
  #
  #   spec.file_name # => "example-1.0.gem"

  def file_name
    "#{full_name}.gem"
  end

  ##
  # Sets files to +files+, ensuring it is an array.

  def files=(files)
    @files = Array files
  end

  ##
  # Finds all gems that satisfy +dep+

  def find_all_satisfiers(dep)
    Gem::Specification.each do |spec|
      yield spec if spec.satisfies_requirement? dep
    end
  end

  private :find_all_satisfiers

  ##
  # Creates a duplicate spec without large blobs that aren't used at runtime.

  def for_cache
    spec = dup

    spec.files = nil
    spec.test_files = nil

    spec
  end

  def full_name
    @full_name ||= super
  end

  ##
  # Work around old bundler versions removing my methods
  # Can be removed once RubyGems can no longer install Bundler 2.5

  def gem_dir # :nodoc:
    super
  end

  def gems_dir
    @gems_dir ||= File.join(base_dir, "gems")
  end

  ##
  # Deprecated and ignored, defaults to true.
  #
  # Formerly used to indicate this gem was RDoc-capable.

  def has_rdoc # :nodoc:
    true
  end
  rubygems_deprecate :has_rdoc

  ##
  # Deprecated and ignored.
  #
  # Formerly used to indicate this gem was RDoc-capable.

  def has_rdoc=(ignored) # :nodoc:
    @has_rdoc = true
  end
  rubygems_deprecate :has_rdoc=

  alias_method :has_rdoc?, :has_rdoc # :nodoc:
  rubygems_deprecate :has_rdoc?

  ##
  # True if this gem has files in test_files

  def has_unit_tests? # :nodoc:
    !test_files.empty?
  end

  # :stopdoc:
  alias_method :has_test_suite?, :has_unit_tests?
  # :startdoc:

  def hash # :nodoc:
    name.hash ^ version.hash
  end

  def init_with(coder) # :nodoc:
    @installed_by_version ||= nil
    yaml_initialize coder.tag, coder.map
  end

  eval <<-RUBY, binding, __FILE__, __LINE__ + 1
    # frozen_string_literal: true

    def set_nil_attributes_to_nil
      #{@@nil_attributes.map {|key| "@#{key} = nil" }.join "; "}
    end
    private :set_nil_attributes_to_nil

    def set_not_nil_attributes_to_default_values
      #{@@non_nil_attributes.map {|key| "@#{key} = #{INITIALIZE_CODE_FOR_DEFAULTS[key]}" }.join ";"}
    end
    private :set_not_nil_attributes_to_default_values
  RUBY

  ##
  # Specification constructor. Assigns the default values to the attributes
  # and yields itself for further initialization.  Optionally takes +name+ and
  # +version+.

  def initialize(name = nil, version = nil)
    super()
    @gems_dir              = nil
    @base_dir              = nil
    @loaded = false
    @activated = false
    @loaded_from = nil
    @original_platform = nil
    @installed_by_version = nil

    set_nil_attributes_to_nil
    set_not_nil_attributes_to_default_values

    @new_platform = Gem::Platform::RUBY

    self.name = name if name
    self.version = version if version

    if (platform = Gem.platforms.last) && platform != Gem::Platform::RUBY && platform != Gem::Platform.local
      self.platform = platform
    end

    yield self if block_given?
  end

  ##
  # Duplicates Array and Gem::Requirement attributes from +other_spec+ so state isn't shared.
  #

  def initialize_copy(other_spec)
    self.class.array_attributes.each do |name|
      name = :"@#{name}"
      next unless other_spec.instance_variable_defined? name

      begin
        val = other_spec.instance_variable_get(name)
        if val
          instance_variable_set name, val.dup
        elsif Gem.configuration.really_verbose
          warn "WARNING: #{full_name} has an invalid nil value for #{name}"
        end
      rescue TypeError
        e = Gem::FormatException.new \
          "#{full_name} has an invalid value for #{name}"

        e.file_path = loaded_from
        raise e
      end
    end

    @required_ruby_version = other_spec.required_ruby_version.dup
    @required_rubygems_version = other_spec.required_rubygems_version.dup
  end

  def base_dir
    return Gem.dir unless loaded_from
    @base_dir ||= if default_gem?
      File.dirname File.dirname File.dirname loaded_from
    else
      File.dirname File.dirname loaded_from
    end
  end

  ##
  # Expire memoized instance variables that can incorrectly generate, replace
  # or miss files due changes in certain attributes used to compute them.

  def invalidate_memoized_attributes
    @full_name = nil
    @cache_file = nil
  end

  private :invalidate_memoized_attributes

  def inspect # :nodoc:
    if $DEBUG
      super
    else
      "#{super[0..-2]} #{full_name}>"
    end
  end

  ##
  # Files in the Gem under one of the require_paths

  def lib_files
    @files.select do |file|
      require_paths.any? do |path|
        file.start_with? path
      end
    end
  end

  ##
  # Singular accessor for #licenses

  def license
    licenses.first
  end

  ##
  # Plural accessor for setting licenses
  #
  # See #license= for details

  def licenses
    @licenses ||= []
  end

  def internal_init # :nodoc:
    super
    @bin_dir       = nil
    @cache_dir     = nil
    @cache_file    = nil
    @doc_dir       = nil
    @ri_dir        = nil
    @spec_dir      = nil
    @spec_file     = nil
  end

  ##
  # Track removed method calls to warn about during build time.
  # Warn about unknown attributes while loading a spec.

  def method_missing(sym, *a, &b) # :nodoc:
    if REMOVED_METHODS.include?(sym)
      removed_method_calls << sym
      return
    end

    if @specification_version > CURRENT_SPECIFICATION_VERSION &&
       sym.to_s.end_with?("=")
      warn "ignoring #{sym} loading #{full_name}" if $DEBUG
    else
      super
    end
  end

  ##
  # Is this specification missing its extensions?  When this returns true you
  # probably want to build_extensions

  def missing_extensions?
    return false if extensions.empty?
    return false if default_gem?
    return false if File.exist? gem_build_complete_path

    true
  end

  ##
  # Normalize the list of files so that:
  # * All file lists have redundancies removed.
  # * Files referenced in the extra_rdoc_files are included in the package
  #   file list.

  def normalize
    if defined?(@extra_rdoc_files) && @extra_rdoc_files
      @extra_rdoc_files.uniq!
      @files ||= []
      @files.concat(@extra_rdoc_files)
    end

    @files            = @files.uniq.sort if @files
    @extensions       = @extensions.uniq.sort if @extensions
    @test_files       = @test_files.uniq.sort if @test_files
    @executables      = @executables.uniq.sort if @executables
    @extra_rdoc_files = @extra_rdoc_files.uniq.sort if @extra_rdoc_files
  end

  ##
  # Return a NameTuple that represents this Specification

  def name_tuple
    Gem::NameTuple.new name, version, original_platform
  end

  ##
  # Returns the full name (name-version) of this gemspec using the original
  # platform.  For use with legacy gems.

  def original_name # :nodoc:
    if platform == Gem::Platform::RUBY || platform.nil?
      "#{@name}-#{@version}"
    else
      "#{@name}-#{@version}-#{@original_platform}"
    end
  end

  ##
  # Cruft. Use +platform+.

  def original_platform # :nodoc:
    @original_platform ||= platform
  end

  ##
  # The platform this gem runs on.  See Gem::Platform for details.

  def platform
    @new_platform ||= Gem::Platform::RUBY # rubocop:disable Naming/MemoizedInstanceVariableName
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "Gem::Specification.new do |s|", "end" do
      q.breakable

      attributes = @@attributes - [:name, :version]
      attributes.unshift :installed_by_version
      attributes.unshift :version
      attributes.unshift :name

      attributes.each do |attr_name|
        current_value = send attr_name
        current_value = current_value.sort if [:files, :test_files].include? attr_name
        next unless current_value != default_value(attr_name) ||
                    self.class.required_attribute?(attr_name)

        q.text "s.#{attr_name} = "

        if attr_name == :date
          current_value = current_value.utc

          q.text "Time.utc(#{current_value.year}, #{current_value.month}, #{current_value.day})"
        else
          q.pp current_value
        end

        q.breakable
      end
    end
  end

  ##
  # Raise an exception if the version of this spec conflicts with the one
  # that is already loaded (+other+)

  def check_version_conflict(other) # :nodoc:
    return if version == other.version

    # This gem is already loaded.  If the currently loaded gem is not in the
    # list of candidate gems, then we have a version conflict.

    msg = "can't activate #{full_name}, already activated #{other.full_name}"

    e = Gem::LoadError.new msg
    e.name = name

    raise e
  end

  private :check_version_conflict

  ##
  # Check the spec for possible conflicts and freak out if there are any.

  def raise_if_conflicts # :nodoc:
    if has_conflicts?
      raise Gem::ConflictError.new self, conflicts
    end
  end

  ##
  # Sets rdoc_options to +value+, ensuring it is an array.

  def rdoc_options=(options)
    @rdoc_options = Array options
  end

  ##
  # Singular accessor for #require_paths

  def require_path
    (val = require_paths) && val.first
  end

  ##
  # Singular accessor for #require_paths

  def require_path=(path)
    self.require_paths = Array(path)
  end

  ##
  # Set requirements to +req+, ensuring it is an array.

  def requirements=(req)
    @requirements = Array req
  end

  def respond_to_missing?(m, include_private = false) # :nodoc:
    false
  end

  ##
  # Returns the full path to this spec's ri directory.

  def ri_dir
    @ri_dir ||= File.join base_dir, "ri", full_name
  end

  ##
  # Return a string containing a Ruby code representation of the given
  # object.

  def ruby_code(obj)
    case obj
    when String             then obj.dump + ".freeze"
    when Array              then "[" + obj.map {|x| ruby_code x }.join(", ") + "]"
    when Hash               then
      seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
      "{ #{seg.join(", ")} }"
    when Gem::Version       then ruby_code(obj.to_s)
    when DateLike           then obj.strftime("%Y-%m-%d").dump
    when Time               then obj.strftime("%Y-%m-%d").dump
    when Numeric            then obj.inspect
    when true, false, nil   then obj.inspect
    when Gem::Platform      then "Gem::Platform.new(#{ruby_code obj.to_a})"
    when Gem::Requirement   then
      list = obj.as_list
      "Gem::Requirement.new(#{ruby_code(list.size == 1 ? obj.to_s : list)})"
    else raise Gem::Exception, "ruby_code case not handled: #{obj.class}"
    end
  end

  private :ruby_code

  ##
  # List of dependencies that will automatically be activated at runtime.

  def runtime_dependencies
    dependencies.select(&:runtime?)
  end

  ##
  # True if this gem has the same attributes as +other+.

  def same_attributes?(spec)
    @@attributes.all? {|name, _default| send(name) == spec.send(name) }
  end

  private :same_attributes?

  ##
  # Checks if this specification meets the requirement of +dependency+.

  def satisfies_requirement?(dependency)
    @name == dependency.name &&
      dependency.requirement.satisfied_by?(@version)
  end

  ##
  # Returns an object you can use to sort specifications in #sort_by.

  def sort_obj
    [@name, @version, Gem::Platform.sort_priority(@new_platform)]
  end

  ##
  # Used by Gem::Resolver to order Gem::Specification objects

  def source # :nodoc:
    Gem::Source::Installed.new
  end

  ##
  # Returns the full path to the directory containing this spec's
  # gemspec file. eg: /usr/local/lib/ruby/gems/1.8/specifications

  def spec_dir
    @spec_dir ||= File.join base_dir, "specifications"
  end

  ##
  # Returns the full path to this spec's gemspec file.
  # eg: /usr/local/lib/ruby/gems/1.8/specifications/mygem-1.0.gemspec

  def spec_file
    @spec_file ||= File.join spec_dir, "#{full_name}.gemspec"
  end

  ##
  # The default name of the gemspec.  See also #file_name
  #
  #   spec.spec_name # => "example-1.0.gemspec"

  def spec_name
    "#{full_name}.gemspec"
  end

  ##
  # A short summary of this gem's description.

  def summary=(str)
    @summary = str.to_s.strip.
      gsub(/(\w-)\n[ \t]*(\w)/, '\1\2').gsub(/\n[ \t]*/, " ") # so. weird.
  end

  ##
  # Singular accessor for #test_files

  def test_file # :nodoc:
    (val = test_files) && val.first
  end

  ##
  # Singular mutator for #test_files

  def test_file=(file) # :nodoc:
    self.test_files = [file]
  end

  ##
  # Test files included in this gem.  You cannot append to this accessor, you
  # must assign to it.

  def test_files # :nodoc:
    # Handle the possibility that we have @test_suite_file but not
    # @test_files.  This will happen when an old gem is loaded via
    # YAML.
    if defined? @test_suite_file
      @test_files = [@test_suite_file].flatten
      @test_suite_file = nil
    end
    if defined?(@test_files) && @test_files
      @test_files
    else
      @test_files = []
    end
  end

  ##
  # Returns a Ruby code representation of this specification, such that it can
  # be eval'ed and reconstruct the same specification later.  Attributes that
  # still have their default values are omitted.

  def to_ruby
    result = []
    result << "# -*- encoding: utf-8 -*-"
    result << "#{Gem::StubSpecification::PREFIX}#{name} #{version} #{platform} #{raw_require_paths.join("\0")}"
    result << "#{Gem::StubSpecification::PREFIX}#{extensions.join "\0"}" unless
      extensions.empty?
    result << nil
    result << "Gem::Specification.new do |s|"

    result << "  s.name = #{ruby_code name}"
    result << "  s.version = #{ruby_code version}"
    unless platform.nil? || platform == Gem::Platform::RUBY
      result << "  s.platform = #{ruby_code original_platform}"
    end
    result << ""
    result << "  s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version="

    if metadata && !metadata.empty?
      result << "  s.metadata = #{ruby_code metadata} if s.respond_to? :metadata="
    end
    result << "  s.require_paths = #{ruby_code raw_require_paths}"

    handled = [
      :dependencies,
      :name,
      :platform,
      :require_paths,
      :required_rubygems_version,
      :specification_version,
      :version,
      :has_rdoc,
      :default_executable,
      :metadata,
      :signing_key,
    ]

    @@attributes.each do |attr_name|
      next if handled.include? attr_name
      current_value = send(attr_name)
      if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
        result << "  s.#{attr_name} = #{ruby_code current_value}"
      end
    end

    if String === signing_key
      result << "  s.signing_key = #{ruby_code signing_key}"
    end

    if @installed_by_version
      result << nil
      result << "  s.installed_by_version = #{ruby_code Gem::VERSION}"
    end

    unless dependencies.empty?
      result << nil
      result << "  s.specification_version = #{specification_version}"
      result << nil

      dependencies.each do |dep|
        dep.instance_variable_set :@type, :runtime if dep.type.nil? # HACK
        result << "  s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{ruby_code dep.requirements_list})"
      end
    end

    result << "end"
    result << nil

    result.join "\n"
  end

  ##
  # Returns a Ruby lighter-weight code representation of this specification,
  # used for indexing only.
  #
  # See #to_ruby.

  def to_ruby_for_cache
    for_cache.to_ruby
  end

  def to_s # :nodoc:
    "#<Gem::Specification name=#{@name} version=#{@version}>"
  end

  ##
  # Returns self

  def to_spec
    self
  end

  def to_yaml(opts = {}) # :nodoc:
    Gem.load_yaml

    # Because the user can switch the YAML engine behind our
    # back, we have to check again here to make sure that our
    # psych code was properly loaded, and load it if not.
    unless Gem.const_defined?(:NoAliasYAMLTree)
      require_relative "psych_tree"
    end

    builder = Gem::NoAliasYAMLTree.create
    builder << self
    ast = builder.tree

    require "stringio"
    io = StringIO.new
    io.set_encoding Encoding::UTF_8

    Psych::Visitors::Emitter.new(io).accept(ast)

    io.string.gsub(/ !!null \n/, " \n")
  end

  ##
  # Recursively walk dependencies of this spec, executing the +block+ for each
  # hop.

  def traverse(trail = [], visited = {}, &block)
    trail.push(self)
    begin
      runtime_dependencies.each do |dep|
        dep.matching_specs(true).each do |dep_spec|
          next if visited.key?(dep_spec)
          visited[dep_spec] = true
          trail.push(dep_spec)
          begin
            result = block[self, dep, dep_spec, trail]
          ensure
            trail.pop
          end
          next if result == :next
          spec_name = dep_spec.name
          dep_spec.traverse(trail, visited, &block) unless
            trail.any? {|s| s.name == spec_name }
        end
      end
    ensure
      trail.pop
    end
  end

  ##
  # Checks that the specification contains all required fields, and does a
  # very basic sanity check.
  #
  # Raises InvalidSpecificationException if the spec does not pass the
  # checks..

  def validate(packaging = true, strict = false)
    normalize

    validation_policy = Gem::SpecificationPolicy.new(self)
    validation_policy.packaging = packaging
    validation_policy.validate(strict)
  end

  def keep_only_files_and_directories
    @executables.delete_if      {|x| File.directory?(File.join(@bindir, x)) }
    @extensions.delete_if       {|x| File.directory?(x) && !File.symlink?(x) }
    @extra_rdoc_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
    @files.delete_if            {|x| File.directory?(x) && !File.symlink?(x) }
    @test_files.delete_if       {|x| File.directory?(x) && !File.symlink?(x) }
  end

  def validate_for_resolution
    Gem::SpecificationPolicy.new(self).validate_for_resolution
  end

  def validate_metadata
    Gem::SpecificationPolicy.new(self).validate_metadata
  end
  rubygems_deprecate :validate_metadata

  def validate_dependencies
    Gem::SpecificationPolicy.new(self).validate_dependencies
  end
  rubygems_deprecate :validate_dependencies

  def validate_permissions
    Gem::SpecificationPolicy.new(self).validate_permissions
  end
  rubygems_deprecate :validate_permissions

  ##
  # Set the version to +version+.

  def version=(version)
    @version = Gem::Version.create(version)
    return if @version.nil?

    invalidate_memoized_attributes
  end

  def stubbed?
    false
  end

  def yaml_initialize(tag, vals) # :nodoc:
    vals.each do |ivar, val|
      case ivar
      when "date"
        # Force Date to go through the extra coerce logic in date=
        self.date = val
      when "platform"
        self.platform = val
      else
        instance_variable_set "@#{ivar}", val
      end
    end
  end

  ##
  # Reset nil attributes to their default values to make the spec valid

  def reset_nil_attributes_to_default
    nil_attributes = self.class.non_nil_attributes.find_all do |name|
      !instance_variable_defined?("@#{name}") || instance_variable_get("@#{name}").nil?
    end

    nil_attributes.each do |attribute|
      default = default_value attribute

      value = case default
              when Time, Numeric, Symbol, true, false, nil then default
              else default.dup
      end

      instance_variable_set "@#{attribute}", value
    end

    @installed_by_version ||= nil

    nil
  end

  def flatten_require_paths # :nodoc:
    return unless raw_require_paths.first.is_a?(Array)

    warn "#{name} #{version} includes a gemspec with `require_paths` set to an array of arrays. Newer versions of this gem might've already fixed this"
    raw_require_paths.flatten!
  end

  def raw_require_paths # :nodoc:
    @require_paths
  end
end
PK$J[Gϝ��#share/rubygems/rubygems/defaults.rbnu�[���# frozen_string_literal: true

module Gem
  DEFAULT_HOST = "https://rubygems.org"

  @post_install_hooks ||= []
  @done_installing_hooks ||= []
  @post_uninstall_hooks ||= []
  @pre_uninstall_hooks  ||= []
  @pre_install_hooks    ||= []

  ##
  # An Array of the default sources that come with RubyGems

  def self.default_sources
    %w[https://rubygems.org/]
  end

  ##
  # Default spec directory path to be used if an alternate value is not
  # specified in the environment

  def self.default_spec_cache_dir
    default_spec_cache_dir = File.join Gem.user_home, ".gem", "specs"

    unless File.exist?(default_spec_cache_dir)
      default_spec_cache_dir = File.join Gem.cache_home, "gem", "specs"
    end

    default_spec_cache_dir
  end

  ##
  # Default home directory path to be used if an alternate value is not
  # specified in the environment

  def self.default_dir
    @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"])
  end

  ##
  # Returns binary extensions dir for specified RubyGems base dir or nil
  # if such directory cannot be determined.
  #
  # By default, the binary extensions are located side by side with their
  # Ruby counterparts, therefore nil is returned

  def self.default_ext_dir_for(base_dir)
    nil
  end

  ##
  # Paths where RubyGems' .rb files and bin files are installed

  def self.default_rubygems_dirs
    nil # default to standard layout
  end

  ##
  # Path to specification files of default gems.

  def self.default_specifications_dir
    @default_specifications_dir ||= File.join(Gem.default_dir, "specifications", "default")
  end

  ##
  # Finds the user's home directory.
  #--
  # Some comments from the ruby-talk list regarding finding the home
  # directory:
  #
  #   I have HOME, USERPROFILE and HOMEDRIVE + HOMEPATH. Ruby seems
  #   to be depending on HOME in those code samples. I propose that
  #   it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at
  #   least on Win32).
  #++
  #--
  #
  #++

  def self.find_home
    Dir.home.dup
  rescue StandardError
    if Gem.win_platform?
      File.expand_path File.join(ENV["HOMEDRIVE"] || ENV["SystemDrive"], "/")
    else
      File.expand_path "/"
    end
  end

  private_class_method :find_home

  ##
  # The home directory for the user.

  def self.user_home
    @user_home ||= find_home
  end

  ##
  # Path for gems in the user's home directory

  def self.user_dir
    gem_dir = File.join(Gem.user_home, ".gem")
    gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir)
    parts = [gem_dir, ruby_engine]
    ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
    parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
    File.join parts
  end

  ##
  # The path to standard location of the user's configuration directory.

  def self.config_home
    @config_home ||= ENV["XDG_CONFIG_HOME"] || File.join(Gem.user_home, ".config")
  end

  ##
  # Finds the user's config file

  def self.find_config_file
    gemrc = File.join Gem.user_home, ".gemrc"
    if File.exist? gemrc
      gemrc
    else
      File.join Gem.config_home, "gem", "gemrc"
    end
  end

  ##
  # The path to standard location of the user's .gemrc file.

  def self.config_file
    @config_file ||= find_config_file
  end

  ##
  # The path to standard location of the user's state file.

  def self.state_file
    @state_file ||= File.join(Gem.state_home, "gem", "last_update_check")
  end

  ##
  # The path to standard location of the user's cache directory.

  def self.cache_home
    @cache_home ||= ENV["XDG_CACHE_HOME"] || File.join(Gem.user_home, ".cache")
  end

  ##
  # The path to standard location of the user's data directory.

  def self.data_home
    @data_home ||= ENV["XDG_DATA_HOME"] || File.join(Gem.user_home, ".local", "share")
  end

  ##
  # The path to standard location of the user's state directory.

  def self.state_home
    @state_home ||= ENV["XDG_STATE_HOME"] || File.join(Gem.user_home, ".local", "state")
  end

  ##
  # How String Gem paths should be split.  Overridable for esoteric platforms.

  def self.path_separator
    File::PATH_SEPARATOR
  end

  ##
  # Default gem load path

  def self.default_path
    path = []
    path << user_dir if user_home && File.exist?(user_home)
    path << default_dir
    path << vendor_dir if vendor_dir && File.directory?(vendor_dir)
    path
  end

  ##
  # Deduce Ruby's --program-prefix and --program-suffix from its install name

  def self.default_exec_format
    exec_format = begin
                    RbConfig::CONFIG["ruby_install_name"].sub("ruby", "%s")
                  rescue StandardError
                    "%s"
                  end

    unless exec_format.include?("%s")
      raise Gem::Exception,
        "[BUG] invalid exec_format #{exec_format.inspect}, no %s"
    end

    exec_format
  end

  ##
  # The default directory for binaries

  def self.default_bindir
    RbConfig::CONFIG["bindir"]
  end

  def self.ruby_engine
    RUBY_ENGINE
  end

  ##
  # The default signing key path

  def self.default_key_path
    default_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"

    unless File.exist?(default_key_path)
      default_key_path = File.join Gem.data_home, "gem", "gem-private_key.pem"
    end

    default_key_path
  end

  ##
  # The default signing certificate chain path

  def self.default_cert_path
    default_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"

    unless File.exist?(default_cert_path)
      default_cert_path = File.join Gem.data_home, "gem", "gem-public_cert.pem"
    end

    default_cert_path
  end

  ##
  # Enables automatic installation into user directory

  def self.default_user_install # :nodoc:
    if !ENV.key?("GEM_HOME") && File.exist?(Gem.dir) && !File.writable?(Gem.dir)
      Gem.ui.say "Defaulting to user installation because default installation directory (#{Gem.dir}) is not writable."
      return true
    end

    false
  end

  ##
  # Install extensions into lib as well as into the extension directory.

  def self.install_extension_in_lib # :nodoc:
    Gem.configuration.install_extension_in_lib
  end

  ##
  # Directory where vendor gems are installed.

  def self.vendor_dir # :nodoc:
    if vendor_dir = ENV["GEM_VENDOR"]
      return vendor_dir.dup
    end

    return nil unless RbConfig::CONFIG.key? "vendordir"

    File.join RbConfig::CONFIG["vendordir"], "gems",
              RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
  end

  ##
  # Default options for gem commands for Ruby packagers.
  #
  # The options here should be structured as an array of string "gem"
  # command names as keys and a string of the default options as values.
  #
  # Example:
  #
  # def self.operating_system_defaults
  #   {
  #       'install' => '--no-rdoc --no-ri --env-shebang',
  #       'update' => '--no-rdoc --no-ri --env-shebang'
  #   }
  # end

  def self.operating_system_defaults
    {}
  end

  ##
  # Default options for gem commands for Ruby implementers.
  #
  # The options here should be structured as an array of string "gem"
  # command names as keys and a string of the default options as values.
  #
  # Example:
  #
  # def self.platform_defaults
  #   {
  #       'install' => '--no-rdoc --no-ri --env-shebang',
  #       'update' => '--no-rdoc --no-ri --env-shebang'
  #   }
  # end

  def self.platform_defaults
    {}
  end
end
PK$J[<$��'�'/share/rubygems/rubygems/dependency_installer.rbnu�[���# frozen_string_literal: true

require_relative "../rubygems"
require_relative "dependency_list"
require_relative "package"
require_relative "installer"
require_relative "spec_fetcher"
require_relative "user_interaction"
require_relative "available_set"
require_relative "deprecate"

##
# Installs a gem along with all its dependencies from local and remote gems.

class Gem::DependencyInstaller
  include Gem::UserInteraction
  extend Gem::Deprecate

  DEFAULT_OPTIONS = { # :nodoc:
    env_shebang: false,
    document: %w[ri],
    domain: :both, # HACK: dup
    force: false,
    format_executable: false, # HACK: dup
    ignore_dependencies: false,
    prerelease: false,
    security_policy: nil, # HACK: NoSecurity requires OpenSSL. AlmostNo? Low?
    wrappers: true,
    build_args: nil,
    build_docs_in_background: false,
    install_as_default: false,
  }.freeze

  ##
  # Documentation types.  For use by the Gem.done_installing hook

  attr_reader :document

  ##
  # Errors from SpecFetcher while searching for remote specifications

  attr_reader :errors

  ##
  # List of gems installed by #install in alphabetic order

  attr_reader :installed_gems

  ##
  # Creates a new installer instance.
  #
  # Options are:
  # :cache_dir:: Alternate repository path to store .gem files in.
  # :domain:: :local, :remote, or :both.  :local only searches gems in the
  #           current directory.  :remote searches only gems in Gem::sources.
  #           :both searches both.
  # :env_shebang:: See Gem::Installer::new.
  # :force:: See Gem::Installer#install.
  # :format_executable:: See Gem::Installer#initialize.
  # :ignore_dependencies:: Don't install any dependencies.
  # :install_dir:: See Gem::Installer#install.
  # :prerelease:: Allow prerelease versions.  See #install.
  # :security_policy:: See Gem::Installer::new and Gem::Security.
  # :user_install:: See Gem::Installer.new
  # :wrappers:: See Gem::Installer::new
  # :build_args:: See Gem::Installer::new

  def initialize(options = {})
    @only_install_dir = !options[:install_dir].nil?
    @install_dir = options[:install_dir] || Gem.dir
    @build_root = options[:build_root]

    options = DEFAULT_OPTIONS.merge options

    @bin_dir             = options[:bin_dir]
    @dev_shallow         = options[:dev_shallow]
    @development         = options[:development]
    @document            = options[:document]
    @domain              = options[:domain]
    @env_shebang         = options[:env_shebang]
    @force               = options[:force]
    @format_executable   = options[:format_executable]
    @ignore_dependencies = options[:ignore_dependencies]
    @prerelease          = options[:prerelease]
    @security_policy     = options[:security_policy]
    @user_install        = options[:user_install]
    @wrappers            = options[:wrappers]
    @build_args          = options[:build_args]
    @build_docs_in_background = options[:build_docs_in_background]
    @install_as_default = options[:install_as_default]
    @dir_mode = options[:dir_mode]
    @data_mode = options[:data_mode]
    @prog_mode = options[:prog_mode]

    # Indicates that we should not try to update any deps unless
    # we absolutely must.
    @minimal_deps = options[:minimal_deps]

    @available      = nil
    @installed_gems = []
    @toplevel_specs = nil

    @cache_dir = options[:cache_dir] || @install_dir

    @errors = []
  end

  ##
  # Indicated, based on the requested domain, if local
  # gems should be considered.

  def consider_local?
    @domain == :both || @domain == :local
  end

  ##
  # Indicated, based on the requested domain, if remote
  # gems should be considered.

  def consider_remote?
    @domain == :both || @domain == :remote
  end

  ##
  # Returns a list of pairs of gemspecs and source_uris that match
  # Gem::Dependency +dep+ from both local (Dir.pwd) and remote (Gem.sources)
  # sources.  Gems are sorted with newer gems preferred over older gems, and
  # local gems preferred over remote gems.

  def find_gems_with_sources(dep, best_only=false) # :nodoc:
    set = Gem::AvailableSet.new

    if consider_local?
      sl = Gem::Source::Local.new

      if spec = sl.find_gem(dep.name)
        if dep.matches_spec? spec
          set.add spec, sl
        end
      end
    end

    if consider_remote?
      begin
        # This is pulled from #spec_for_dependency to allow
        # us to filter tuples before fetching specs.
        tuples, errors = Gem::SpecFetcher.fetcher.search_for_dependency dep

        if best_only && !tuples.empty?
          tuples.sort! do |a,b|
            if b[0].version == a[0].version
              if b[0].platform != Gem::Platform::RUBY
                1
              else
                -1
              end
            else
              b[0].version <=> a[0].version
            end
          end
          tuples = [tuples.first]
        end

        specs = []
        tuples.each do |tup, source|
          spec = source.fetch_spec(tup)
        rescue Gem::RemoteFetcher::FetchError => e
          errors << Gem::SourceFetchProblem.new(source, e)
        else
          specs << [spec, source]
        end

        if @errors
          @errors += errors
        else
          @errors = errors
        end

        set << specs
      rescue Gem::RemoteFetcher::FetchError => e
        # FIX if there is a problem talking to the network, we either need to always tell
        # the user (no really_verbose) or fail hard, not silently tell them that we just
        # couldn't find their requested gem.
        verbose do
          "Error fetching remote data:\t\t#{e.message}\n" \
            "Falling back to local-only install"
        end
        @domain = :local
      end
    end

    set
  end
  rubygems_deprecate :find_gems_with_sources

  def in_background(what) # :nodoc:
    fork_happened = false
    if @build_docs_in_background && Process.respond_to?(:fork)
      begin
        Process.fork do
          yield
        end
        fork_happened = true
        say "#{what} in a background process."
      rescue NotImplementedError
      end
    end
    yield unless fork_happened
  end

  ##
  # Installs the gem +dep_or_name+ and all its dependencies.  Returns an Array
  # of installed gem specifications.
  #
  # If the +:prerelease+ option is set and there is a prerelease for
  # +dep_or_name+ the prerelease version will be installed.
  #
  # Unless explicitly specified as a prerelease dependency, prerelease gems
  # that +dep_or_name+ depend on will not be installed.
  #
  # If c-1.a depends on b-1 and a-1.a and there is a gem b-1.a available then
  # c-1.a, b-1 and a-1.a will be installed.  b-1.a will need to be installed
  # separately.

  def install(dep_or_name, version = Gem::Requirement.default)
    request_set = resolve_dependencies dep_or_name, version

    @installed_gems = []

    options = {
      bin_dir: @bin_dir,
      build_args: @build_args,
      document: @document,
      env_shebang: @env_shebang,
      force: @force,
      format_executable: @format_executable,
      ignore_dependencies: @ignore_dependencies,
      prerelease: @prerelease,
      security_policy: @security_policy,
      user_install: @user_install,
      wrappers: @wrappers,
      build_root: @build_root,
      install_as_default: @install_as_default,
      dir_mode: @dir_mode,
      data_mode: @data_mode,
      prog_mode: @prog_mode,
    }
    options[:install_dir] = @install_dir if @only_install_dir

    request_set.install options do |_, installer|
      @installed_gems << installer.spec if installer
    end

    @installed_gems.sort!

    # Since this is currently only called for docs, we can be lazy and just say
    # it's documentation. Ideally the hook adder could decide whether to be in
    # the background or not, and what to call it.
    in_background "Installing documentation" do
      Gem.done_installing_hooks.each do |hook|
        hook.call self, @installed_gems
      end
    end unless Gem.done_installing_hooks.empty?

    @installed_gems
  end

  def install_development_deps # :nodoc:
    if @development && @dev_shallow
      :shallow
    elsif @development
      :all
    else
      :none
    end
  end

  def resolve_dependencies(dep_or_name, version) # :nodoc:
    request_set = Gem::RequestSet.new
    request_set.development         = @development
    request_set.development_shallow = @dev_shallow
    request_set.soft_missing = @force
    request_set.prerelease = @prerelease

    installer_set = Gem::Resolver::InstallerSet.new @domain
    installer_set.ignore_installed = (@minimal_deps == false) || @only_install_dir
    installer_set.force = @force

    if consider_local?
      if dep_or_name =~ /\.gem$/ && File.file?(dep_or_name)
        src = Gem::Source::SpecificFile.new dep_or_name
        installer_set.add_local dep_or_name, src.spec, src
        version = src.spec.version if version == Gem::Requirement.default
      elsif dep_or_name =~ /\.gem$/ # rubocop:disable Performance/RegexpMatch
        Dir[dep_or_name].each do |name|
          src = Gem::Source::SpecificFile.new name
          installer_set.add_local dep_or_name, src.spec, src
        rescue Gem::Package::FormatError
        end
        # else This is a dependency. InstallerSet handles this case
      end
    end

    dependency =
      if spec = installer_set.local?(dep_or_name)
        installer_set.remote = nil if spec.dependencies.none?
        Gem::Dependency.new spec.name, version
      elsif String === dep_or_name
        Gem::Dependency.new dep_or_name, version
      else
        dep_or_name
      end

    dependency.prerelease = @prerelease

    request_set.import [dependency]

    installer_set.add_always_install dependency

    request_set.always_install = installer_set.always_install
    request_set.remote = installer_set.consider_remote?

    if @ignore_dependencies
      installer_set.ignore_dependencies = true
      request_set.ignore_dependencies   = true
      request_set.soft_missing          = true
    end

    request_set.resolve installer_set

    @errors.concat request_set.errors

    request_set
  end
end
PK$J[v4k��V�V#share/rubygems/rubygems/security.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "exceptions"
require_relative "openssl"

##
# = Signing gems
#
# The Gem::Security implements cryptographic signatures for gems.  The section
# below is a step-by-step guide to using signed gems and generating your own.
#
# == Walkthrough
#
# === Building your certificate
#
# In order to start signing your gems, you'll need to build a private key and
# a self-signed certificate.  Here's how:
#
#   # build a private key and certificate for yourself:
#   $ gem cert --build you@example.com
#
# This could take anywhere from a few seconds to a minute or two, depending on
# the speed of your computer (public key algorithms aren't exactly the
# speediest crypto algorithms in the world).  When it's finished, you'll see
# the files "gem-private_key.pem" and "gem-public_cert.pem" in the current
# directory.
#
# First things first: Move both files to ~/.gem if you don't already have a
# key and certificate in that directory.  Ensure the file permissions make the
# key unreadable by others (by default the file is saved securely).
#
# Keep your private key hidden; if it's compromised, someone can sign packages
# as you (note: PKI has ways of mitigating the risk of stolen keys; more on
# that later).
#
# === Signing Gems
#
# In RubyGems 2 and newer there is no extra work to sign a gem.  RubyGems will
# automatically find your key and certificate in your home directory and use
# them to sign newly packaged gems.
#
# If your certificate is not self-signed (signed by a third party) RubyGems
# will attempt to load the certificate chain from the trusted certificates.
# Use <code>gem cert --add signing_cert.pem</code> to add your signers as
# trusted certificates.  See below for further information on certificate
# chains.
#
# If you build your gem it will automatically be signed.  If you peek inside
# your gem file, you'll see a couple of new files have been added:
#
#   $ tar tf your-gem-1.0.gem
#   metadata.gz
#   metadata.gz.sig # metadata signature
#   data.tar.gz
#   data.tar.gz.sig # data signature
#   checksums.yaml.gz
#   checksums.yaml.gz.sig # checksums signature
#
# === Manually signing gems
#
# If you wish to store your key in a separate secure location you'll need to
# set your gems up for signing by hand.  To do this, set the
# <code>signing_key</code> and <code>cert_chain</code> in the gemspec before
# packaging your gem:
#
#   s.signing_key = '/secure/path/to/gem-private_key.pem'
#   s.cert_chain = %w[/secure/path/to/gem-public_cert.pem]
#
# When you package your gem with these options set RubyGems will automatically
# load your key and certificate from the secure paths.
#
# === Signed gems and security policies
#
# Now let's verify the signature.  Go ahead and install the gem, but add the
# following options: <code>-P HighSecurity</code>, like this:
#
#   # install the gem with using the security policy "HighSecurity"
#   $ sudo gem install your.gem -P HighSecurity
#
# The <code>-P</code> option sets your security policy -- we'll talk about
# that in just a minute.  Eh, what's this?
#
#   $ gem install -P HighSecurity your-gem-1.0.gem
#   ERROR:  While executing gem ... (Gem::Security::Exception)
#       root cert /CN=you/DC=example is not trusted
#
# The culprit here is the security policy.  RubyGems has several different
# security policies.  Let's take a short break and go over the security
# policies.  Here's a list of the available security policies, and a brief
# description of each one:
#
# * NoSecurity - Well, no security at all.  Signed packages are treated like
#   unsigned packages.
# * LowSecurity - Pretty much no security.  If a package is signed then
#   RubyGems will make sure the signature matches the signing
#   certificate, and that the signing certificate hasn't expired, but
#   that's it.  A malicious user could easily circumvent this kind of
#   security.
# * MediumSecurity - Better than LowSecurity and NoSecurity, but still
#   fallible.  Package contents are verified against the signing
#   certificate, and the signing certificate is checked for validity,
#   and checked against the rest of the certificate chain (if you don't
#   know what a certificate chain is, stay tuned, we'll get to that).
#   The biggest improvement over LowSecurity is that MediumSecurity
#   won't install packages that are signed by untrusted sources.
#   Unfortunately, MediumSecurity still isn't totally secure -- a
#   malicious user can still unpack the gem, strip the signatures, and
#   distribute the gem unsigned.
# * HighSecurity - Here's the bugger that got us into this mess.
#   The HighSecurity policy is identical to the MediumSecurity policy,
#   except that it does not allow unsigned gems.  A malicious user
#   doesn't have a whole lot of options here; they can't modify the
#   package contents without invalidating the signature, and they can't
#   modify or remove signature or the signing certificate chain, or
#   RubyGems will simply refuse to install the package.  Oh well, maybe
#   they'll have better luck causing problems for CPAN users instead :).
#
# The reason RubyGems refused to install your shiny new signed gem was because
# it was from an untrusted source.  Well, your code is infallible (naturally),
# so you need to add yourself as a trusted source:
#
#   # add trusted certificate
#   gem cert --add ~/.gem/gem-public_cert.pem
#
# You've now added your public certificate as a trusted source.  Now you can
# install packages signed by your private key without any hassle.  Let's try
# the install command above again:
#
#   # install the gem with using the HighSecurity policy (and this time
#   # without any shenanigans)
#   $ gem install -P HighSecurity your-gem-1.0.gem
#   Successfully installed your-gem-1.0
#   1 gem installed
#
# This time RubyGems will accept your signed package and begin installing.
#
# While you're waiting for RubyGems to work it's magic, have a look at some of
# the other security commands by running <code>gem help cert</code>:
#
#   Options:
#     -a, --add CERT                   Add a trusted certificate.
#     -l, --list [FILTER]              List trusted certificates where the
#                                      subject contains FILTER
#     -r, --remove FILTER              Remove trusted certificates where the
#                                      subject contains FILTER
#     -b, --build EMAIL_ADDR           Build private key and self-signed
#                                      certificate for EMAIL_ADDR
#     -C, --certificate CERT           Signing certificate for --sign
#     -K, --private-key KEY            Key for --sign or --build
#     -A, --key-algorithm ALGORITHM    Select key algorithm for --build from RSA, DSA, or EC. Defaults to RSA.
#     -s, --sign CERT                  Signs CERT with the key from -K
#                                      and the certificate from -C
#     -d, --days NUMBER_OF_DAYS        Days before the certificate expires
#     -R, --re-sign                    Re-signs the certificate from -C with the key from -K
#
# We've already covered the <code>--build</code> option, and the
# <code>--add</code>, <code>--list</code>, and <code>--remove</code> commands
# seem fairly straightforward; they allow you to add, list, and remove the
# certificates in your trusted certificate list.  But what's with this
# <code>--sign</code> option?
#
# === Certificate chains
#
# To answer that question, let's take a look at "certificate chains", a
# concept I mentioned earlier.  There are a couple of problems with
# self-signed certificates: first of all, self-signed certificates don't offer
# a whole lot of security.  Sure, the certificate says Yukihiro Matsumoto, but
# how do I know it was actually generated and signed by matz himself unless he
# gave me the certificate in person?
#
# The second problem is scalability.  Sure, if there are 50 gem authors, then
# I have 50 trusted certificates, no problem.  What if there are 500 gem
# authors?  1000?  Having to constantly add new trusted certificates is a
# pain, and it actually makes the trust system less secure by encouraging
# RubyGems users to blindly trust new certificates.
#
# Here's where certificate chains come in.  A certificate chain establishes an
# arbitrarily long chain of trust between an issuing certificate and a child
# certificate.  So instead of trusting certificates on a per-developer basis,
# we use the PKI concept of certificate chains to build a logical hierarchy of
# trust.  Here's a hypothetical example of a trust hierarchy based (roughly)
# on geography:
#
#                         --------------------------
#                         | rubygems@rubygems.org |
#                         --------------------------
#                                     |
#                   -----------------------------------
#                   |                                 |
#       ----------------------------    -----------------------------
#       |  seattlerb@seattlerb.org |    | dcrubyists@richkilmer.com |
#       ----------------------------    -----------------------------
#            |                |                 |             |
#     ---------------   ----------------   -----------   --------------
#     |   drbrain   |   |   zenspider  |   | pabs@dc |   | tomcope@dc |
#     ---------------   ----------------   -----------   --------------
#
#
# Now, rather than having 4 trusted certificates (one for drbrain, zenspider,
# pabs@dc, and tomecope@dc), a user could actually get by with one
# certificate, the "rubygems@rubygems.org" certificate.
#
# Here's how it works:
#
# I install "rdoc-3.12.gem", a package signed by "drbrain".  I've never heard
# of "drbrain", but his certificate has a valid signature from the
# "seattle.rb@seattlerb.org" certificate, which in turn has a valid signature
# from the "rubygems@rubygems.org" certificate.  Voila!  At this point, it's
# much more reasonable for me to trust a package signed by "drbrain", because
# I can establish a chain to "rubygems@rubygems.org", which I do trust.
#
# === Signing certificates
#
# The <code>--sign</code> option allows all this to happen.  A developer
# creates their build certificate with the <code>--build</code> option, then
# has their certificate signed by taking it with them to their next regional
# Ruby meetup (in our hypothetical example), and it's signed there by the
# person holding the regional RubyGems signing certificate, which is signed at
# the next RubyConf by the holder of the top-level RubyGems certificate.  At
# each point the issuer runs the same command:
#
#   # sign a certificate with the specified key and certificate
#   # (note that this modifies client_cert.pem!)
#   $ gem cert -K /mnt/floppy/issuer-priv_key.pem -C issuer-pub_cert.pem
#      --sign client_cert.pem
#
# Then the holder of issued certificate (in this case, your buddy "drbrain"),
# can start using this signed certificate to sign RubyGems.  By the way, in
# order to let everyone else know about his new fancy signed certificate,
# "drbrain" would save his newly signed certificate as
# <code>~/.gem/gem-public_cert.pem</code>
#
# Obviously this RubyGems trust infrastructure doesn't exist yet.  Also, in
# the "real world", issuers actually generate the child certificate from a
# certificate request, rather than sign an existing certificate.  And our
# hypothetical infrastructure is missing a certificate revocation system.
# These are that can be fixed in the future...
#
# At this point you should know how to do all of these new and interesting
# things:
#
# * build a gem signing key and certificate
# * adjust your security policy
# * modify your trusted certificate list
# * sign a certificate
#
# == Manually verifying signatures
#
# In case you don't trust RubyGems you can verify gem signatures manually:
#
# 1. Fetch and unpack the gem
#
#      gem fetch some_signed_gem
#      tar -xf some_signed_gem-1.0.gem
#
# 2. Grab the public key from the gemspec
#
#      gem spec some_signed_gem-1.0.gem cert_chain | \
#        ruby -rpsych -e 'puts Psych.load($stdin)' > public_key.crt
#
# 3. Generate a SHA1 hash of the data.tar.gz
#
#      openssl dgst -sha1 < data.tar.gz > my.hash
#
# 4. Verify the signature
#
#      openssl rsautl -verify -inkey public_key.crt -certin \
#        -in data.tar.gz.sig > verified.hash
#
# 5. Compare your hash to the verified hash
#
#      diff -s verified.hash my.hash
#
# 6. Repeat 5 and 6 with metadata.gz
#
# == OpenSSL Reference
#
# The .pem files generated by --build and --sign are PEM files.  Here's a
# couple of useful OpenSSL commands for manipulating them:
#
#   # convert a PEM format X509 certificate into DER format:
#   # (note: Windows .cer files are X509 certificates in DER format)
#   $ openssl x509 -in input.pem -outform der -out output.der
#
#   # print out the certificate in a human-readable format:
#   $ openssl x509 -in input.pem -noout -text
#
# And you can do the same thing with the private key file as well:
#
#   # convert a PEM format RSA key into DER format:
#   $ openssl rsa -in input_key.pem -outform der -out output_key.der
#
#   # print out the key in a human readable format:
#   $ openssl rsa -in input_key.pem -noout -text
#
# == Bugs/TODO
#
# * There's no way to define a system-wide trust list.
# * custom security policies (from a YAML file, etc)
# * Simple method to generate a signed certificate request
# * Support for OCSP, SCVP, CRLs, or some other form of cert status check
#   (list is in order of preference)
# * Support for encrypted private keys
# * Some sort of semi-formal trust hierarchy (see long-winded explanation
#   above)
# * Path discovery (for gem certificate chains that don't have a self-signed
#   root) -- by the way, since we don't have this, THE ROOT OF THE CERTIFICATE
#   CHAIN MUST BE SELF SIGNED if Policy#verify_root is true (and it is for the
#   MediumSecurity and HighSecurity policies)
# * Better explanation of X509 naming (ie, we don't have to use email
#   addresses)
# * Honor AIA field (see note about OCSP above)
# * Honor extension restrictions
# * Might be better to store the certificate chain as a PKCS#7 or PKCS#12
#   file, instead of an array embedded in the metadata.
#
# == Original author
#
# Paul Duncan <pabs@pablotron.org>
# https://pablotron.org/

module Gem::Security
  ##
  # Gem::Security default exception type

  class Exception < Gem::Exception; end

  ##
  # Used internally to select the signing digest from all computed digests

  DIGEST_NAME = "SHA256" # :nodoc:

  ##
  # Length of keys created by RSA and DSA keys

  RSA_DSA_KEY_LENGTH = 3072

  ##
  # Default algorithm to use when building a key pair

  DEFAULT_KEY_ALGORITHM = "RSA"

  ##
  # Named curve used for Elliptic Curve

  EC_NAME = "secp384r1"

  ##
  # Cipher used to encrypt the key pair used to sign gems.
  # Must be in the list returned by OpenSSL::Cipher.ciphers

  KEY_CIPHER = OpenSSL::Cipher.new("AES-256-CBC") if defined?(OpenSSL::Cipher)

  ##
  # One day in seconds

  ONE_DAY = 86_400

  ##
  # One year in seconds

  ONE_YEAR = ONE_DAY * 365

  ##
  # The default set of extensions are:
  #
  # * The certificate is not a certificate authority
  # * The key for the certificate may be used for key and data encipherment
  #   and digital signatures
  # * The certificate contains a subject key identifier

  EXTENSIONS = {
    "basicConstraints" => "CA:FALSE",
    "keyUsage" =>
      "keyEncipherment,dataEncipherment,digitalSignature",
    "subjectKeyIdentifier" => "hash",
  }.freeze

  def self.alt_name_or_x509_entry(certificate, x509_entry)
    alt_name = certificate.extensions.find do |extension|
      extension.oid == "#{x509_entry}AltName"
    end

    return alt_name.value if alt_name

    certificate.send x509_entry
  end

  ##
  # Creates an unsigned certificate for +subject+ and +key+.  The lifetime of
  # the key is from the current time to +age+ which defaults to one year.
  #
  # The +extensions+ restrict the key to the indicated uses.

  def self.create_cert(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
    cert = OpenSSL::X509::Certificate.new

    cert.public_key = get_public_key(key)
    cert.version    = 2
    cert.serial     = serial

    cert.not_before = Time.now
    cert.not_after  = Time.now + age

    cert.subject    = subject

    ef = OpenSSL::X509::ExtensionFactory.new nil, cert

    cert.extensions = extensions.map do |ext_name, value|
      ef.create_extension ext_name, value
    end

    cert
  end

  ##
  # Gets the right public key from a PKey instance

  def self.get_public_key(key)
    # Ruby 3.0 (Ruby/OpenSSL 2.2) or later
    return OpenSSL::PKey.read(key.public_to_der) if key.respond_to?(:public_to_der)
    return key.public_key unless key.is_a?(OpenSSL::PKey::EC)

    ec_key = OpenSSL::PKey::EC.new(key.group.curve_name)
    ec_key.public_key = key.public_key
    ec_key
  end

  ##
  # Creates a self-signed certificate with an issuer and subject from +email+,
  # a subject alternative name of +email+ and the given +extensions+ for the
  # +key+.

  def self.create_cert_email(email, key, age = ONE_YEAR, extensions = EXTENSIONS)
    subject = email_to_name email

    extensions = extensions.merge "subjectAltName" => "email:#{email}"

    create_cert_self_signed subject, key, age, extensions
  end

  ##
  # Creates a self-signed certificate with an issuer and subject of +subject+
  # and the given +extensions+ for the +key+.

  def self.create_cert_self_signed(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
    certificate = create_cert subject, key, age, extensions

    sign certificate, key, certificate, age, extensions, serial
  end

  ##
  # Creates a new digest instance using the specified +algorithm+. The default
  # is SHA256.

  def self.create_digest(algorithm = DIGEST_NAME)
    OpenSSL::Digest.new(algorithm)
  end

  ##
  # Creates a new key pair of the specified +algorithm+. RSA, DSA, and EC
  # are supported.

  def self.create_key(algorithm)
    if defined?(OpenSSL::PKey)
      case algorithm.downcase
      when "dsa"
        OpenSSL::PKey::DSA.new(RSA_DSA_KEY_LENGTH)
      when "rsa"
        OpenSSL::PKey::RSA.new(RSA_DSA_KEY_LENGTH)
      when "ec"
        OpenSSL::PKey::EC.generate(EC_NAME)
      else
        raise Gem::Security::Exception,
        "#{algorithm} algorithm not found. RSA, DSA, and EC algorithms are supported."
      end
    end
  end

  ##
  # Turns +email_address+ into an OpenSSL::X509::Name

  def self.email_to_name(email_address)
    email_address = email_address.gsub(/[^\w@.-]+/i, "_")

    cn, dcs = email_address.split "@"

    dcs = dcs.split "."

    OpenSSL::X509::Name.new([
      ["CN", cn],
      *dcs.map {|dc| ["DC", dc] },
    ])
  end

  ##
  # Signs +expired_certificate+ with +private_key+ if the keys match and the
  # expired certificate was self-signed.
  #--
  # TODO increment serial

  def self.re_sign(expired_certificate, private_key, age = ONE_YEAR, extensions = EXTENSIONS)
    raise Gem::Security::Exception,
          "incorrect signing key for re-signing " +
          expired_certificate.subject.to_s unless
      expired_certificate.check_private_key(private_key)

    unless expired_certificate.subject.to_s ==
           expired_certificate.issuer.to_s
      subject = alt_name_or_x509_entry expired_certificate, :subject
      issuer  = alt_name_or_x509_entry expired_certificate, :issuer

      raise Gem::Security::Exception,
            "#{subject} is not self-signed, contact #{issuer} " \
            "to obtain a valid certificate"
    end

    serial = expired_certificate.serial + 1

    create_cert_self_signed(expired_certificate.subject, private_key, age,
                            extensions, serial)
  end

  ##
  # Resets the trust directory for verifying gems.

  def self.reset
    @trust_dir = nil
  end

  ##
  # Sign the public key from +certificate+ with the +signing_key+ and
  # +signing_cert+, using the Gem::Security::DIGEST_NAME.  Uses the
  # default certificate validity range and extensions.
  #
  # Returns the newly signed certificate.

  def self.sign(certificate, signing_key, signing_cert, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
    signee_subject = certificate.subject
    signee_key     = certificate.public_key

    alt_name = certificate.extensions.find do |extension|
      extension.oid == "subjectAltName"
    end

    extensions = extensions.merge "subjectAltName" => alt_name.value if
      alt_name

    issuer_alt_name = signing_cert.extensions.find do |extension|
      extension.oid == "subjectAltName"
    end

    extensions = extensions.merge "issuerAltName" => issuer_alt_name.value if
      issuer_alt_name

    signed = create_cert signee_subject, signee_key, age, extensions, serial
    signed.issuer = signing_cert.subject

    signed.sign signing_key, Gem::Security::DIGEST_NAME
  end

  ##
  # Returns a Gem::Security::TrustDir which wraps the directory where trusted
  # certificates live.

  def self.trust_dir
    return @trust_dir if @trust_dir

    dir = File.join Gem.user_home, ".gem", "trust"

    @trust_dir ||= Gem::Security::TrustDir.new dir
  end

  ##
  # Enumerates the trusted certificates via Gem::Security::TrustDir.

  def self.trusted_certificates(&block)
    trust_dir.each_certificate(&block)
  end

  ##
  # Writes +pemmable+, which must respond to +to_pem+ to +path+ with the given
  # +permissions+. If passed +cipher+ and +passphrase+ those arguments will be
  # passed to +to_pem+.

  def self.write(pemmable, path, permissions = 0o600, passphrase = nil, cipher = KEY_CIPHER)
    path = File.expand_path path

    File.open path, "wb", permissions do |io|
      if passphrase && cipher
        io.write pemmable.to_pem cipher, passphrase
      else
        io.write pemmable.to_pem
      end
    end

    path
  end

  reset
end

if Gem::HAVE_OPENSSL
  require_relative "security/policy"
  require_relative "security/policies"
  require_relative "security/trust_dir"
end

require_relative "security/signer"
PK$J[�J�'""!share/rubygems/rubygems/source.rbnu�[���# frozen_string_literal: true

require_relative "text"
##
# A Source knows how to list and fetch gems from a RubyGems marshal index.
#
# There are other Source subclasses for installed gems, local gems, the
# bundler dependency API and so-forth.

class Gem::Source
  include Comparable
  include Gem::Text

  FILES = { # :nodoc:
    released: "specs",
    latest: "latest_specs",
    prerelease: "prerelease_specs",
  }.freeze

  ##
  # The URI this source will fetch gems from.

  attr_reader :uri

  ##
  # Creates a new Source which will use the index located at +uri+.

  def initialize(uri)
    require_relative "uri"
    @uri = Gem::Uri.parse!(uri)
    @update_cache = nil
  end

  ##
  # Sources are ordered by installation preference.

  def <=>(other)
    case other
    when Gem::Source::Installed,
         Gem::Source::Local,
         Gem::Source::Lock,
         Gem::Source::SpecificFile,
         Gem::Source::Git,
         Gem::Source::Vendor then
      -1
    when Gem::Source then
      unless @uri
        return 0 unless other.uri
        return 1
      end

      return -1 unless other.uri

      # Returning 1 here ensures that when sorting a list of sources, the
      # original ordering of sources supplied by the user is preserved.
      return 1 unless @uri.to_s == other.uri.to_s

      0
    end
  end

  def ==(other) # :nodoc:
    self.class === other && @uri == other.uri
  end

  alias_method :eql?, :== # :nodoc:

  ##
  # Returns a Set that can fetch specifications from this source.

  def dependency_resolver_set # :nodoc:
    return Gem::Resolver::IndexSet.new self if uri.scheme == "file"

    fetch_uri = if uri.host == "rubygems.org"
      index_uri = uri.dup
      index_uri.host = "index.rubygems.org"
      index_uri
    else
      uri
    end

    bundler_api_uri = enforce_trailing_slash(fetch_uri) + "versions"

    begin
      fetcher = Gem::RemoteFetcher.fetcher
      response = fetcher.fetch_path bundler_api_uri, nil, true
    rescue Gem::RemoteFetcher::FetchError
      Gem::Resolver::IndexSet.new self
    else
      Gem::Resolver::APISet.new response.uri + "./info/"
    end
  end

  def hash # :nodoc:
    @uri.hash
  end

  ##
  # Returns the local directory to write +uri+ to.

  def cache_dir(uri)
    # Correct for windows paths
    escaped_path = uri.path.sub(%r{^/([a-z]):/}i, '/\\1-/')

    File.join Gem.spec_cache_dir, "#{uri.host}%#{uri.port}", File.dirname(escaped_path)
  end

  ##
  # Returns true when it is possible and safe to update the cache directory.

  def update_cache?
    return @update_cache unless @update_cache.nil?
    @update_cache =
      begin
        File.stat(Gem.user_home).uid == Process.uid
      rescue Errno::ENOENT
        false
      end
  end

  ##
  # Fetches a specification for the given +name_tuple+.

  def fetch_spec(name_tuple)
    fetcher = Gem::RemoteFetcher.fetcher

    spec_file_name = name_tuple.spec_name

    source_uri = enforce_trailing_slash(uri) + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}"

    cache_dir = cache_dir source_uri

    local_spec = File.join cache_dir, spec_file_name

    if File.exist? local_spec
      spec = Gem.read_binary local_spec
      Gem.load_safe_marshal
      spec = begin
               Gem::SafeMarshal.safe_load(spec)
             rescue StandardError
               nil
             end
      return spec if spec
    end

    source_uri.path << ".rz"

    spec = fetcher.fetch_path source_uri
    spec = Gem::Util.inflate spec

    if update_cache?
      require "fileutils"
      FileUtils.mkdir_p cache_dir

      File.open local_spec, "wb" do |io|
        io.write spec
      end
    end

    Gem.load_safe_marshal
    # TODO: Investigate setting Gem::Specification#loaded_from to a URI
    Gem::SafeMarshal.safe_load spec
  end

  ##
  # Loads +type+ kind of specs fetching from +@uri+ if the on-disk cache is
  # out of date.
  #
  # +type+ is one of the following:
  #
  # :released   => Return the list of all released specs
  # :latest     => Return the list of only the highest version of each gem
  # :prerelease => Return the list of all prerelease only specs
  #

  def load_specs(type)
    file       = FILES[type]
    fetcher    = Gem::RemoteFetcher.fetcher
    file_name  = "#{file}.#{Gem.marshal_version}"
    spec_path  = enforce_trailing_slash(uri) + "#{file_name}.gz"
    cache_dir  = cache_dir spec_path
    local_file = File.join(cache_dir, file_name)
    retried    = false

    if update_cache?
      require "fileutils"
      FileUtils.mkdir_p cache_dir
    end

    spec_dump = fetcher.cache_update_path spec_path, local_file, update_cache?

    Gem.load_safe_marshal
    begin
      Gem::NameTuple.from_list Gem::SafeMarshal.safe_load(spec_dump)
    rescue ArgumentError
      if update_cache? && !retried
        FileUtils.rm local_file
        retried = true
        retry
      else
        raise Gem::Exception.new("Invalid spec cache file in #{local_file}")
      end
    end
  end

  ##
  # Downloads +spec+ and writes it to +dir+.  See also
  # Gem::RemoteFetcher#download.

  def download(spec, dir=Dir.pwd)
    fetcher = Gem::RemoteFetcher.fetcher
    fetcher.download spec, uri.to_s, dir
  end

  def pretty_print(q) # :nodoc:
    q.object_group(self) do
      q.group 2, "[Remote:", "]" do
        q.breakable
        q.text @uri.to_s

        if api = uri
          q.breakable
          q.text "API URI: "
          q.text api.to_s
        end
      end
    end
  end

  def typo_squatting?(host, distance_threshold=4)
    return if @uri.host.nil?
    levenshtein_distance(@uri.host, host).between? 1, distance_threshold
  end

  private

  def enforce_trailing_slash(uri)
    uri.merge(uri.path.gsub(%r{/+$}, "") + "/")
  end
end

require_relative "source/git"
require_relative "source/installed"
require_relative "source/specific_file"
require_relative "source/local"
require_relative "source/lock"
require_relative "source/vendor"
PK$J[< n�WW%share/rubygems/rubygems/psych_tree.rbnu�[���# frozen_string_literal: true

module Gem
  if defined? ::Psych::Visitors
    class NoAliasYAMLTree < Psych::Visitors::YAMLTree
      def self.create
        new({})
      end unless respond_to? :create

      def visit_String(str)
        return super unless str == "=" # or whatever you want

        quote = Psych::Nodes::Scalar::SINGLE_QUOTED
        @emitter.scalar str, nil, nil, false, true, quote
      end

      def visit_Hash(o)
        super(o.compact)
      end

      # Noop this out so there are no anchors
      def register(target, obj)
      end

      # This is ported over from the yaml_tree in 1.9.3
      def format_time(time)
        if time.utc?
          time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
        else
          time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
        end
      end

      private :format_time
    end
  end
end
PK$J[�9�BB%share/rubygems/rubygems/shellwords.rbnu�[���# frozen_string_literal: true

autoload :Shellwords, "shellwords"
PK$J[|�+�44*share/rubygems/rubygems/dependency_list.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "vendored_tsort"
require_relative "deprecate"

##
# Gem::DependencyList is used for installing and uninstalling gems in the
# correct order to avoid conflicts.
#--
# TODO: It appears that all but topo-sort functionality is being duplicated
# (or is planned to be duplicated) elsewhere in rubygems.  Is the majority of
# this class necessary anymore?  Especially #ok?, #why_not_ok?

class Gem::DependencyList
  attr_reader :specs

  include Enumerable
  include Gem::TSort

  ##
  # Allows enabling/disabling use of development dependencies

  attr_accessor :development

  ##
  # Creates a DependencyList from the current specs.

  def self.from_specs
    list = new
    list.add(*Gem::Specification.to_a)
    list
  end

  ##
  # Creates a new DependencyList.  If +development+ is true, development
  # dependencies will be included.

  def initialize(development = false)
    @specs = []

    @development = development
  end

  ##
  # Adds +gemspecs+ to the dependency list.

  def add(*gemspecs)
    @specs.concat gemspecs
  end

  def clear
    @specs.clear
  end

  ##
  # Return a list of the gem specifications in the dependency list, sorted in
  # order so that no gemspec in the list depends on a gemspec earlier in the
  # list.
  #
  # This is useful when removing gems from a set of installed gems.  By
  # removing them in the returned order, you don't get into as many dependency
  # issues.
  #
  # If there are circular dependencies (yuck!), then gems will be returned in
  # order until only the circular dependents and anything they reference are
  # left.  Then arbitrary gemspecs will be returned until the circular
  # dependency is broken, after which gems will be returned in dependency
  # order again.

  def dependency_order
    sorted = strongly_connected_components.flatten

    result = []
    seen = {}

    sorted.each do |spec|
      if index = seen[spec.name]
        if result[index].version < spec.version
          result[index] = spec
        end
      else
        seen[spec.name] = result.length
        result << spec
      end
    end

    result.reverse
  end

  ##
  # Iterator over dependency_order

  def each(&block)
    dependency_order.each(&block)
  end

  def find_name(full_name)
    @specs.find {|spec| spec.full_name == full_name }
  end

  def inspect # :nodoc:
    format("%s %p>", super[0..-2], map(&:full_name))
  end

  ##
  # Are all the dependencies in the list satisfied?

  def ok?
    why_not_ok?(:quick).empty?
  end

  def why_not_ok?(quick = false)
    unsatisfied = Hash.new {|h,k| h[k] = [] }
    each do |spec|
      spec.runtime_dependencies.each do |dep|
        inst = Gem::Specification.any? do |installed_spec|
          dep.name == installed_spec.name &&
            dep.requirement.satisfied_by?(installed_spec.version)
        end

        unless inst || @specs.find {|s| s.satisfies_requirement? dep }
          unsatisfied[spec.name] << dep
          return unsatisfied if quick
        end
      end
    end

    unsatisfied
  end

  ##
  # It is ok to remove a gemspec from the dependency list?
  #
  # If removing the gemspec creates breaks a currently ok dependency, then it
  # is NOT ok to remove the gemspec.

  def ok_to_remove?(full_name, check_dev=true)
    gem_to_remove = find_name full_name

    # If the state is inconsistent, at least don't crash
    return true unless gem_to_remove

    siblings = @specs.find_all do |s|
      s.name == gem_to_remove.name &&
        s.full_name != gem_to_remove.full_name
    end

    deps = []

    @specs.each do |spec|
      check = check_dev ? spec.dependencies : spec.runtime_dependencies

      check.each do |dep|
        deps << dep if gem_to_remove.satisfies_requirement?(dep)
      end
    end

    deps.all? do |dep|
      siblings.any? do |s|
        s.satisfies_requirement? dep
      end
    end
  end

  ##
  # Remove everything in the DependencyList that matches but doesn't
  # satisfy items in +dependencies+ (a hash of gem names to arrays of
  # dependencies).

  def remove_specs_unsatisfied_by(dependencies)
    specs.reject! do |spec|
      dep = dependencies[spec.name]
      dep && !dep.requirement.satisfied_by?(spec.version)
    end
  end

  ##
  # Removes the gemspec matching +full_name+ from the dependency list

  def remove_by_name(full_name)
    @specs.delete_if {|spec| spec.full_name == full_name }
  end

  ##
  # Return a hash of predecessors.  <tt>result[spec]</tt> is an Array of
  # gemspecs that have a dependency satisfied by the named gemspec.

  def spec_predecessors
    result = Hash.new {|h,k| h[k] = [] }

    specs = @specs.sort.reverse

    specs.each do |spec|
      specs.each do |other|
        next if spec == other

        other.dependencies.each do |dep|
          if spec.satisfies_requirement? dep
            result[spec] << other
          end
        end
      end
    end

    result
  end

  def tsort_each_node(&block)
    @specs.each(&block)
  end

  def tsort_each_child(node)
    specs = @specs.sort.reverse

    dependencies = node.runtime_dependencies
    dependencies.push(*node.development_dependencies) if @development

    dependencies.each do |dep|
      specs.each do |spec|
        if spec.satisfies_requirement? dep
          yield spec
          break
        end
      end
    end
  end

  private

  ##
  # Count the number of gemspecs in the list +specs+ that are not in
  # +ignored+.

  def active_count(specs, ignored)
    specs.count {|spec| ignored[spec.full_name].nil? }
  end
end
PK$J[�TBB1share/rubygems/rubygems/install_update_options.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "../rubygems"
require_relative "security_option"

##
# Mixin methods for install and update options for Gem::Commands

module Gem::InstallUpdateOptions
  include Gem::SecurityOption

  ##
  # Add the install/update options to the option parser.

  def add_install_update_options
    add_option(:"Install/Update", "-i", "--install-dir DIR",
               "Gem repository directory to get installed",
               "gems") do |value, options|
      options[:install_dir] = File.expand_path(value)
    end

    add_option(:"Install/Update", "-n", "--bindir DIR",
               "Directory where executables will be",
               "placed when the gem is installed") do |value, options|
      options[:bin_dir] = File.expand_path(value)
    end

    add_option(:"Install/Update", "--document [TYPES]", Array,
               "Generate documentation for installed gems",
               "List the documentation types you wish to",
               "generate.  For example: rdoc,ri") do |value, options|
      options[:document] = case value
                           when nil   then %w[ri]
                           when false then []
                           else value
      end
    end

    add_option(:"Install/Update", "--build-root DIR",
               "Temporary installation root. Useful for building",
               "packages. Do not use this when installing remote gems.") do |value, options|
      options[:build_root] = File.expand_path(value)
    end

    add_option(:"Install/Update", "--vendor",
               "Install gem into the vendor directory.",
               "Only for use by gem repackagers.") do |_value, options|
      unless Gem.vendor_dir
        raise Gem::OptionParser::InvalidOption.new "your platform is not supported"
      end

      options[:vendor] = true
      options[:install_dir] = Gem.vendor_dir
    end

    add_option(:"Install/Update", "-N", "--no-document",
               "Disable documentation generation") do |_value, options|
      options[:document] = []
    end

    add_option(:"Install/Update", "-E", "--[no-]env-shebang",
               "Rewrite the shebang line on installed",
               "scripts to use /usr/bin/env") do |value, options|
      options[:env_shebang] = value
    end

    add_option(:"Install/Update", "-f", "--[no-]force",
               "Force gem to install, bypassing dependency",
               "checks") do |value, options|
      options[:force] = value
    end

    add_option(:"Install/Update", "-w", "--[no-]wrappers",
               "Use bin wrappers for executables",
               "Not available on dosish platforms") do |value, options|
      options[:wrappers] = value
    end

    add_security_option

    add_option(:"Install/Update", "--ignore-dependencies",
               "Do not install any required dependent gems") do |value, options|
      options[:ignore_dependencies] = value
    end

    add_option(:"Install/Update", "--[no-]format-executable",
               "Make installed executable names match Ruby.",
               "If Ruby is ruby18, foo_exec will be",
               "foo_exec18") do |value, options|
      options[:format_executable] = value
    end

    add_option(:"Install/Update", "--[no-]user-install",
               "Install in user's home directory instead",
               "of GEM_HOME.") do |value, options|
      options[:user_install] = value
    end

    add_option(:"Install/Update", "--development",
                "Install additional development",
                "dependencies") do |_value, options|
      options[:development] = true
      options[:dev_shallow] = true
    end

    add_option(:"Install/Update", "--development-all",
                "Install development dependencies for all",
                "gems (including dev deps themselves)") do |_value, options|
      options[:development] = true
      options[:dev_shallow] = false
    end

    add_option(:"Install/Update", "--conservative",
                "Don't attempt to upgrade gems already",
                "meeting version requirement") do |_value, options|
      options[:conservative] = true
      options[:minimal_deps] = true
    end

    add_option(:"Install/Update", "--[no-]minimal-deps",
                "Don't upgrade any dependencies that already",
                "meet version requirements") do |value, options|
      options[:minimal_deps] = value
    end

    add_option(:"Install/Update", "--[no-]post-install-message",
                "Print post install message") do |value, options|
      options[:post_install_message] = value
    end

    add_option(:"Install/Update", "-g", "--file [FILE]",
               "Read from a gem dependencies API file and",
               "install the listed gems") do |v,_o|
      v ||= Gem::GEM_DEP_FILES.find do |file|
        File.exist? file
      end

      unless v
        message = v ? v : "(tried #{Gem::GEM_DEP_FILES.join ", "})"

        raise Gem::OptionParser::InvalidArgument,
                "cannot find gem dependencies file #{message}"
      end

      options[:gemdeps] = v
    end

    add_option(:"Install/Update", "--without GROUPS", Array,
               "Omit the named groups (comma separated)",
               "when installing from a gem dependencies",
               "file") do |v,_o|
      options[:without_groups].concat v.map(&:intern)
    end

    add_option(:"Install/Update", "--default",
               "Add the gem's full specification to",
               "specifications/default and extract only its bin") do |v,_o|
      options[:install_as_default] = v
    end

    add_option(:"Install/Update", "--explain",
               "Rather than install the gems, indicate which would",
               "be installed") do |v,_o|
      options[:explain] = v
    end

    add_option(:"Install/Update", "--[no-]lock",
               "Create a lock file (when used with -g/--file)") do |v,_o|
      options[:lock] = v
    end

    add_option(:"Install/Update", "--[no-]suggestions",
               "Suggest alternates when gems are not found") do |v,_o|
      options[:suggest_alternate] = v
    end

    add_option(:"Install/Update", "--target-rbconfig [FILE]",
                "rbconfig.rb for the deployment target platform") do |v, _o|
      Gem.set_target_rbconfig(v)
    end
  end

  ##
  # Default options for the gem install and update commands.

  def install_update_options
    {
      document: %w[ri],
    }
  end

  ##
  # Default description for the gem install and update commands.

  def install_update_defaults_str
    "--document=ri"
  end
end
PK$J[��Ȉ0share/rubygems/rubygems/ext/configure_builder.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
  def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd,
    target_rbconfig=Gem.target_rbconfig)
    if target_rbconfig.path
      warn "--target-rbconfig is not yet supported for configure-based extensions. Ignoring"
    end

    unless File.exist?(File.join(configure_dir, "Makefile"))
      cmd = ["sh", "./configure", "--prefix=#{dest_path}", *args]

      run cmd, results, class_name, configure_dir
    end

    make dest_path, results, configure_dir, target_rbconfig: target_rbconfig

    results
  end
end
PK$J[�HK~7
7
/share/rubygems/rubygems/ext/ext_conf_builder.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
  def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd,
    target_rbconfig=Gem.target_rbconfig)
    require "fileutils"
    require "tempfile"

    tmp_dest = Dir.mktmpdir(".gem.", extension_dir)

    # Some versions of `mktmpdir` return absolute paths, which will break make
    # if the paths contain spaces.
    #
    # As such, we convert to a relative path.
    tmp_dest_relative = get_relative_path(tmp_dest.clone, extension_dir)

    destdir = ENV["DESTDIR"]

    begin
      cmd = ruby << File.basename(extension)
      cmd << "--target-rbconfig=#{target_rbconfig.path}" if target_rbconfig.path
      cmd.push(*args)

      run(cmd, results, class_name, extension_dir) do |s, r|
        mkmf_log = File.join(extension_dir, "mkmf.log")
        if File.exist? mkmf_log
          unless s.success?
            r << "To see why this extension failed to compile, please check" \
              " the mkmf.log which can be found here:\n"
            r << "  " + File.join(dest_path, "mkmf.log") + "\n"
          end
          FileUtils.mv mkmf_log, dest_path
        end
      end

      ENV["DESTDIR"] = nil

      make dest_path, results, extension_dir, tmp_dest_relative, target_rbconfig: target_rbconfig

      full_tmp_dest = File.join(extension_dir, tmp_dest_relative)

      is_cross_compiling = target_rbconfig["platform"] != RbConfig::CONFIG["platform"]
      # Do not copy extension libraries by default when cross-compiling
      # not to conflict with the one already built for the host platform.
      if Gem.install_extension_in_lib && lib_dir && !is_cross_compiling
        FileUtils.mkdir_p lib_dir
        entries = Dir.entries(full_tmp_dest) - %w[. ..]
        entries = entries.map {|entry| File.join full_tmp_dest, entry }
        FileUtils.cp_r entries, lib_dir, remove_destination: true
      end

      FileUtils::Entry_.new(full_tmp_dest).traverse do |ent|
        destent = ent.class.new(dest_path, ent.rel)
        destent.exist? || FileUtils.mv(ent.path, destent.path)
      end

      make dest_path, results, extension_dir, tmp_dest_relative, ["clean"], target_rbconfig: target_rbconfig
    ensure
      ENV["DESTDIR"] = destdir
    end

    results
  ensure
    FileUtils.rm_rf tmp_dest if tmp_dest
  end

  def self.get_relative_path(path, base)
    path[0..base.length - 1] = "." if path.start_with?(base)
    path
  end
end
PK$J[�r�֛�,share/rubygems/rubygems/ext/cmake_builder.rbnu�[���# frozen_string_literal: true

class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
  def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd,
    target_rbconfig=Gem.target_rbconfig)
    if target_rbconfig.path
      warn "--target-rbconfig is not yet supported for CMake extensions. Ignoring"
    end

    unless File.exist?(File.join(cmake_dir, "Makefile"))
      require_relative "../command"
      cmd = ["cmake", ".", "-DCMAKE_INSTALL_PREFIX=#{dest_path}", *Gem::Command.build_args]

      run cmd, results, class_name, cmake_dir
    end

    make dest_path, results, cmake_dir, target_rbconfig: target_rbconfig

    results
  end
end
PK$J[�ɧ�mm&share/rubygems/rubygems/ext/builder.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "../user_interaction"
require_relative "../shellwords"

class Gem::Ext::Builder
  include Gem::UserInteraction

  attr_accessor :build_args # :nodoc:

  def self.class_name
    name =~ /Ext::(.*)Builder/
    $1.downcase
  end

  def self.make(dest_path, results, make_dir = Dir.pwd, sitedir = nil, targets = ["clean", "", "install"],
    target_rbconfig: Gem.target_rbconfig)
    unless File.exist? File.join(make_dir, "Makefile")
      raise Gem::InstallError, "Makefile not found"
    end

    # try to find make program from Ruby configure arguments first
    target_rbconfig["configure_args"] =~ /with-make-prog\=(\w+)/
    make_program_name = ENV["MAKE"] || ENV["make"] || $1
    make_program_name ||= RUBY_PLATFORM.include?("mswin") ? "nmake" : "make"
    make_program = Shellwords.split(make_program_name)

    # The installation of the bundled gems is failed when DESTDIR is empty in mswin platform.
    destdir = /\bnmake/i !~ make_program_name || ENV["DESTDIR"] && ENV["DESTDIR"] != "" ? format("DESTDIR=%s", ENV["DESTDIR"]) : ""

    env = [destdir]

    if sitedir
      env << format("sitearchdir=%s", sitedir)
      env << format("sitelibdir=%s", sitedir)
    end

    targets.each do |target|
      # Pass DESTDIR via command line to override what's in MAKEFLAGS
      cmd = [
        *make_program,
        *env,
        target,
      ].reject(&:empty?)
      begin
        run(cmd, results, "make #{target}".rstrip, make_dir)
      rescue Gem::InstallError
        raise unless target == "clean" # ignore clean failure
      end
    end
  end

  def self.ruby
    # Gem.ruby is quoted if it contains whitespace
    cmd = Shellwords.split(Gem.ruby)

    # This load_path is only needed when running rubygems test without a proper installation.
    # Prepending it in a normal installation will cause problem with order of $LOAD_PATH.
    # Therefore only add load_path if it is not present in the default $LOAD_PATH.
    load_path = File.expand_path("../..", __dir__)
    case load_path
    when RbConfig::CONFIG["sitelibdir"], RbConfig::CONFIG["vendorlibdir"], RbConfig::CONFIG["rubylibdir"]
      cmd
    else
      cmd << "-I#{load_path}"
    end
  end

  def self.run(command, results, command_name = nil, dir = Dir.pwd, env = {})
    verbose = Gem.configuration.really_verbose

    begin
      rubygems_gemdeps = ENV["RUBYGEMS_GEMDEPS"]
      ENV["RUBYGEMS_GEMDEPS"] = nil
      if verbose
        puts("current directory: #{dir}")
        p(command)
      end
      results << "current directory: #{dir}"
      results << Shellwords.join(command)

      require "open3"
      # Set $SOURCE_DATE_EPOCH for the subprocess.
      build_env = { "SOURCE_DATE_EPOCH" => Gem.source_date_epoch_string }.merge(env)
      output, status = begin
                         Open3.popen2e(build_env, *command, chdir: dir) do |_stdin, stdouterr, wait_thread|
                           output = String.new
                           while line = stdouterr.gets
                             output << line
                             if verbose
                               print line
                             end
                           end
                           [output, wait_thread.value]
                         end
                       rescue StandardError => error
                         raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
                       end
      unless verbose
        results << output
      end
    ensure
      ENV["RUBYGEMS_GEMDEPS"] = rubygems_gemdeps
    end

    unless status.success?
      results << "Building has failed. See above output for more information on the failure." if verbose
    end

    yield(status, results) if block_given?

    unless status.success?
      exit_reason =
        if status.exited?
          ", exit code #{status.exitstatus}"
        elsif status.signaled?
          ", uncaught signal #{status.termsig}"
        end

      raise Gem::InstallError, "#{command_name || class_name} failed#{exit_reason}"
    end
  end

  ##
  # Creates a new extension builder for +spec+.  If the +spec+ does not yet
  # have build arguments, saved, set +build_args+ which is an ARGV-style
  # array.

  def initialize(spec, build_args = spec.build_args, target_rbconfig = Gem.target_rbconfig)
    @spec       = spec
    @build_args = build_args
    @gem_dir    = spec.full_gem_path
    @target_rbconfig = target_rbconfig

    @ran_rake = false
  end

  ##
  # Chooses the extension builder class for +extension+

  def builder_for(extension) # :nodoc:
    case extension
    when /extconf/ then
      Gem::Ext::ExtConfBuilder
    when /configure/ then
      Gem::Ext::ConfigureBuilder
    when /rakefile/i, /mkrf_conf/i then
      @ran_rake = true
      Gem::Ext::RakeBuilder
    when /CMakeLists.txt/ then
      Gem::Ext::CmakeBuilder
    when /Cargo.toml/ then
      Gem::Ext::CargoBuilder.new
    else
      build_error("No builder for extension '#{extension}'")
    end
  end

  ##
  # Logs the build +output+, then raises Gem::Ext::BuildError.

  def build_error(output, backtrace = nil) # :nodoc:
    gem_make_out = write_gem_make_out output

    message = <<-EOF
ERROR: Failed to build gem native extension.

    #{output}

Gem files will remain installed in #{@gem_dir} for inspection.
Results logged to #{gem_make_out}
EOF

    raise Gem::Ext::BuildError, message, backtrace
  end

  def build_extension(extension, dest_path) # :nodoc:
    results = []

    builder = builder_for(extension)

    extension_dir =
      File.expand_path File.join(@gem_dir, File.dirname(extension))
    lib_dir = File.join @spec.full_gem_path, @spec.raw_require_paths.first

    begin
      FileUtils.mkdir_p dest_path

      results = builder.build(extension, dest_path,
                              results, @build_args, lib_dir, extension_dir, @target_rbconfig)

      verbose { results.join("\n") }

      write_gem_make_out results.join "\n"
    rescue StandardError => e
      results << e.message
      build_error(results.join("\n"), $@)
    end
  end

  ##
  # Builds extensions.  Valid types of extensions are extconf.rb files,
  # configure scripts and rakefiles or mkrf_conf files.

  def build_extensions
    return if @spec.extensions.empty?

    if @build_args.empty?
      say "Building native extensions. This could take a while..."
    else
      say "Building native extensions with: '#{@build_args.join " "}'"
      say "This could take a while..."
    end

    dest_path = @spec.extension_dir

    require "fileutils"
    FileUtils.rm_f @spec.gem_build_complete_path

    @spec.extensions.each do |extension|
      break if @ran_rake

      build_extension extension, dest_path
    end

    FileUtils.touch @spec.gem_build_complete_path
  end

  ##
  # Writes +output+ to gem_make.out in the extension install directory.

  def write_gem_make_out(output) # :nodoc:
    destination = File.join @spec.extension_dir, "gem_make.out"

    FileUtils.mkdir_p @spec.extension_dir

    File.open destination, "wb" do |io|
      io.puts output
    end

    destination
  end
end
PK$J[���266+share/rubygems/rubygems/ext/rake_builder.rbnu�[���# frozen_string_literal: true

require_relative "../shellwords"

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

class Gem::Ext::RakeBuilder < Gem::Ext::Builder
  def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd,
    target_rbconfig=Gem.target_rbconfig)
    if target_rbconfig.path
      warn "--target-rbconfig is not yet supported for Rake extensions. Ignoring"
    end

    if /mkrf_conf/i.match?(File.basename(extension))
      run([Gem.ruby, File.basename(extension), *args], results, class_name, extension_dir)
    end

    rake = ENV["rake"]

    if rake
      rake = Shellwords.split(rake)
    else
      begin
        rake = ruby << "-rrubygems" << Gem.bin_path("rake", "rake")
      rescue Gem::Exception
        rake = [Gem.default_exec_format % "rake"]
      end
    end

    rake_args = ["RUBYARCHDIR=#{dest_path}", "RUBYLIBDIR=#{dest_path}", *args]
    run(rake + rake_args, results, class_name, extension_dir)

    results
  end
end
PK$J[\r]�e(e(,share/rubygems/rubygems/ext/cargo_builder.rbnu�[���# frozen_string_literal: true

require_relative "../shellwords"

# This class is used by rubygems to build Rust extensions. It is a thin-wrapper
# over the `cargo rustc` command which takes care of building Rust code in a way
# that Ruby can use.
class Gem::Ext::CargoBuilder < Gem::Ext::Builder
  attr_accessor :spec, :runner, :profile

  def initialize
    require_relative "../command"
    require_relative "cargo_builder/link_flag_converter"

    @runner = self.class.method(:run)
    @profile = :release
  end

  def build(extension, dest_path, results, args = [], lib_dir = nil, cargo_dir = Dir.pwd,
    target_rbconfig=Gem.target_rbconfig)
    require "tempfile"
    require "fileutils"

    if target_rbconfig.path
      warn "--target-rbconfig is not yet supported for Rust extensions. Ignoring"
    end

    # Where's the Cargo.toml of the crate we're building
    cargo_toml = File.join(cargo_dir, "Cargo.toml")
    # What's the crate's name
    crate_name = cargo_crate_name(cargo_dir, cargo_toml, results)

    begin
      # Create a tmp dir to do the build in
      tmp_dest = Dir.mktmpdir(".gem.", cargo_dir)

      # Run the build
      cmd = cargo_command(cargo_toml, tmp_dest, args, crate_name)
      runner.call(cmd, results, "cargo", cargo_dir, build_env)

      # Where do we expect Cargo to write the compiled library
      dylib_path = cargo_dylib_path(tmp_dest, crate_name)

      # Helpful error if we didn't find the compiled library
      raise DylibNotFoundError, tmp_dest unless File.exist?(dylib_path)

      # Cargo and Ruby differ on how the library should be named, rename from
      # what Cargo outputs to what Ruby expects
      dlext_name = "#{crate_name}.#{makefile_config("DLEXT")}"
      dlext_path = File.join(File.dirname(dylib_path), dlext_name)
      FileUtils.cp(dylib_path, dlext_path)

      nesting = extension_nesting(extension)

      if Gem.install_extension_in_lib && lib_dir
        nested_lib_dir = File.join(lib_dir, nesting)
        FileUtils.mkdir_p nested_lib_dir
        FileUtils.cp_r dlext_path, nested_lib_dir, remove_destination: true
      end

      # move to final destination
      nested_dest_path = File.join(dest_path, nesting)
      FileUtils.mkdir_p nested_dest_path
      FileUtils.cp_r dlext_path, nested_dest_path, remove_destination: true
    ensure
      # clean up intermediary build artifacts
      FileUtils.rm_rf tmp_dest if tmp_dest
    end

    results
  end

  def build_env
    build_env = rb_config_env
    build_env["RUBY_STATIC"] = "true" if ruby_static? && ENV.key?("RUBY_STATIC")
    cfg = "--cfg=rb_sys_gem --cfg=rubygems --cfg=rubygems_#{Gem::VERSION.tr(".", "_")}"
    build_env["RUSTFLAGS"] = [ENV["RUSTFLAGS"], cfg].compact.join(" ")
    build_env
  end

  def cargo_command(cargo_toml, dest_path, args = [], crate_name = nil)
    cmd = []
    cmd += [cargo, "rustc"]
    cmd += ["--crate-type", "cdylib"]
    cmd += ["--target", ENV["CARGO_BUILD_TARGET"]] if ENV["CARGO_BUILD_TARGET"]
    cmd += ["--target-dir", dest_path]
    cmd += ["--manifest-path", cargo_toml]
    cmd += ["--lib"]
    cmd += ["--profile", profile.to_s]
    cmd += ["--locked"]
    cmd += Gem::Command.build_args
    cmd += args
    cmd += ["--"]
    cmd += [*cargo_rustc_args(dest_path, crate_name)]
    cmd
  end

  private

  def cargo
    ENV.fetch("CARGO", "cargo")
  end

  # returns the directory nesting of the extension, ignoring the first part, so
  # "ext/foo/bar/Cargo.toml" becomes "foo/bar"
  def extension_nesting(extension)
    parts = extension.to_s.split(Regexp.union([File::SEPARATOR, File::ALT_SEPARATOR].compact))

    parts = parts.each_with_object([]) do |segment, final|
      next if segment == "."
      if segment == ".."
        raise Gem::InstallError, "extension outside of gem root" if final.empty?
        next final.pop
      end
      final << segment
    end

    File.join(parts[1...-1])
  end

  def rb_config_env
    result = {}
    RbConfig::CONFIG.each {|k, v| result["RBCONFIG_#{k}"] = v }
    result
  end

  def cargo_rustc_args(dest_dir, crate_name)
    [
      *linker_args,
      *mkmf_libpath,
      *rustc_dynamic_linker_flags(dest_dir, crate_name),
      *rustc_lib_flags(dest_dir),
      *platform_specific_rustc_args(dest_dir),
    ]
  end

  def platform_specific_rustc_args(dest_dir, flags = [])
    if mingw_target?
      # On mingw platforms, mkmf adds libruby to the linker flags
      flags += libruby_args(dest_dir)

      # Make sure ALSR is used on mingw
      # see https://github.com/rust-lang/rust/pull/75406/files
      flags += ["-C", "link-arg=-Wl,--dynamicbase"]
      flags += ["-C", "link-arg=-Wl,--disable-auto-image-base"]

      # If the gem is installed on a host with build tools installed, but is
      # run on one that isn't the missing libraries will cause the extension
      # to fail on start.
      flags += ["-C", "link-arg=-static-libgcc"]
    elsif darwin_target?
      # Ventura does not always have this flag enabled
      flags += ["-C", "link-arg=-Wl,-undefined,dynamic_lookup"]
    end

    flags
  end

  # We want to use the same linker that Ruby uses, so that the linker flags from
  # mkmf work properly.
  def linker_args
    cc_flag = Shellwords.split(makefile_config("CC"))
    linker = cc_flag.shift
    link_args = cc_flag.flat_map {|a| ["-C", "link-arg=#{a}"] }

    return mswin_link_args if linker == "cl"

    ["-C", "linker=#{linker}", *link_args]
  end

  def mswin_link_args
    args = []
    args += ["-l", makefile_config("LIBRUBYARG_SHARED").chomp(".lib")]
    args += split_flags("LIBS").flat_map {|lib| ["-l", lib.chomp(".lib")] }
    args += split_flags("LOCAL_LIBS").flat_map {|lib| ["-l", lib.chomp(".lib")] }
    args
  end

  def libruby_args(dest_dir)
    libs = makefile_config(ruby_static? ? "LIBRUBYARG_STATIC" : "LIBRUBYARG_SHARED")
    raw_libs = Shellwords.split(libs)
    raw_libs.flat_map {|l| ldflag_to_link_modifier(l) }
  end

  def ruby_static?
    return true if %w[1 true].include?(ENV["RUBY_STATIC"])

    makefile_config("ENABLE_SHARED") == "no"
  end

  def cargo_dylib_path(dest_path, crate_name)
    so_ext = RbConfig::CONFIG["SOEXT"]
    prefix = so_ext == "dll" ? "" : "lib"
    path_parts = [dest_path]
    path_parts << ENV["CARGO_BUILD_TARGET"] if ENV["CARGO_BUILD_TARGET"]
    path_parts += ["release", "#{prefix}#{crate_name}.#{so_ext}"]
    File.join(*path_parts)
  end

  def cargo_crate_name(cargo_dir, manifest_path, results)
    require "open3"
    Gem.load_yaml

    output, status =
      begin
        Open3.capture2e(cargo, "metadata", "--no-deps", "--format-version", "1", chdir: cargo_dir)
      rescue StandardError => error
        raise Gem::InstallError, "cargo metadata failed #{error.message}"
      end

    unless status.success?
      if Gem.configuration.really_verbose
        puts output
      else
        results << output
      end

      exit_reason =
        if status.exited?
          ", exit code #{status.exitstatus}"
        elsif status.signaled?
          ", uncaught signal #{status.termsig}"
        end

      raise Gem::InstallError, "cargo metadata failed#{exit_reason}"
    end

    # cargo metadata output is specified as json, but with the
    # --format-version 1 option the output is compatible with YAML, so we can
    # avoid the json dependency
    metadata = Gem::SafeYAML.safe_load(output)
    package = metadata["packages"].find {|pkg| normalize_path(pkg["manifest_path"]) == manifest_path }
    unless package
      found = metadata["packages"].map {|md| "#{md["name"]} at #{md["manifest_path"]}" }
      raise Gem::InstallError, <<-EOF
failed to determine cargo package name

looking for: #{manifest_path}

found:
#{found.join("\n")}
EOF
    end
    package["name"].tr("-", "_")
  end

  def normalize_path(path)
    return path unless File::ALT_SEPARATOR

    path.tr(File::ALT_SEPARATOR, File::SEPARATOR)
  end

  def rustc_dynamic_linker_flags(dest_dir, crate_name)
    split_flags("DLDFLAGS").
      filter_map {|arg| maybe_resolve_ldflag_variable(arg, dest_dir, crate_name) }.
      flat_map {|arg| ldflag_to_link_modifier(arg) }
  end

  def rustc_lib_flags(dest_dir)
    split_flags("LIBS").flat_map {|arg| ldflag_to_link_modifier(arg) }
  end

  def split_flags(var)
    Shellwords.split(RbConfig::CONFIG.fetch(var, ""))
  end

  def ldflag_to_link_modifier(arg)
    LinkFlagConverter.convert(arg)
  end

  def msvc_target?
    makefile_config("target_os").include?("msvc")
  end

  def darwin_target?
    makefile_config("target_os").include?("darwin")
  end

  def mingw_target?
    makefile_config("target_os").include?("mingw")
  end

  def win_target?
    target_platform = RbConfig::CONFIG["target_os"]
    !!Gem::WIN_PATTERNS.find {|r| target_platform =~ r }
  end

  # Interpolate substitution vars in the arg (i.e. $(DEFFILE))
  def maybe_resolve_ldflag_variable(input_arg, dest_dir, crate_name)
    var_matches = input_arg.match(/\$\((\w+)\)/)

    return input_arg unless var_matches

    var_name = var_matches[1]

    return input_arg if var_name.nil? || var_name.chomp.empty?

    case var_name
    # On windows, it is assumed that mkmf has setup an exports file for the
    # extension, so we have to create one ourselves.
    when "DEFFILE"
      write_deffile(dest_dir, crate_name)
    else
      RbConfig::CONFIG[var_name]
    end
  end

  def write_deffile(dest_dir, crate_name)
    deffile_path = File.join(dest_dir, "#{crate_name}-#{RbConfig::CONFIG["arch"]}.def")
    export_prefix = makefile_config("EXPORT_PREFIX") || ""

    File.open(deffile_path, "w") do |f|
      f.puts "EXPORTS"
      f.puts "#{export_prefix.strip}Init_#{crate_name}"
    end

    deffile_path
  end

  # Corresponds to $(LIBPATH) in mkmf
  def mkmf_libpath
    ["-L", "native=#{makefile_config("libdir")}"]
  end

  def makefile_config(var_name)
    val = RbConfig::MAKEFILE_CONFIG[var_name]

    return unless val

    RbConfig.expand(val.dup)
  end

  # Error raised when no cdylib artifact was created
  class DylibNotFoundError < StandardError
    def initialize(dir)
      files = Dir.glob(File.join(dir, "**", "*")).map {|f| "- #{f}" }.join "\n"

      super <<~MSG
        Dynamic library not found for Rust extension (in #{dir})

        Make sure you set "crate-type" in Cargo.toml to "cdylib"

        Found files:
        #{files}
      MSG
    end
  end
end
PK$J[�>���@share/rubygems/rubygems/ext/cargo_builder/link_flag_converter.rbnu�[���# frozen_string_literal: true

class Gem::Ext::CargoBuilder < Gem::Ext::Builder
  # Converts Ruby link flags into something cargo understands
  class LinkFlagConverter
    FILTERED_PATTERNS = [
      /compress-debug-sections/, # Not supported by all linkers, and not required for Rust
    ].freeze

    def self.convert(arg)
      return [] if FILTERED_PATTERNS.any? {|p| p.match?(arg) }

      case arg.chomp
      when /^-L\s*(.+)$/
        ["-L", "native=#{$1}"]
      when /^--library=(\w+\S+)$/, /^-l\s*(\w+\S+)$/
        ["-l", $1]
      when /^-l\s*([^:\s])+/ # -lfoo, but not -l:libfoo.a
        ["-l", $1]
      when /^-F\s*(.*)$/
        ["-l", "framework=#{$1}"]
      else
        ["-C", "link-args=#{arg}"]
      end
    end
  end
end
PK$J[[�W���*share/rubygems/rubygems/ext/build_error.rbnu�[���# frozen_string_literal: true

##
# Raised when there is an error while building extensions.

require_relative "../exceptions"

class Gem::Ext::BuildError < Gem::InstallError
end
PK$J[Q�e��%�%)share/rubygems/rubygems/remote_fetcher.rbnu�[���# frozen_string_literal: true

require_relative "../rubygems"
require_relative "request"
require_relative "request/connection_pools"
require_relative "s3_uri_signer"
require_relative "uri_formatter"
require_relative "uri"
require_relative "user_interaction"

##
# RemoteFetcher handles the details of fetching gems and gem information from
# a remote source.

class Gem::RemoteFetcher
  include Gem::UserInteraction

  ##
  # A FetchError exception wraps up the various possible IO and HTTP failures
  # that could happen while downloading from the internet.

  class FetchError < Gem::Exception
    ##
    # The URI which was being accessed when the exception happened.

    attr_accessor :uri, :original_uri

    def initialize(message, uri)
      uri = Gem::Uri.new(uri)

      super uri.redact_credentials_from(message)

      @original_uri = uri.to_s
      @uri = uri.redacted.to_s
    end

    def to_s # :nodoc:
      "#{super} (#{uri})"
    end
  end

  ##
  # A FetchError that indicates that the reason for not being
  # able to fetch data was that the host could not be contacted

  class UnknownHostError < FetchError
  end
  deprecate_constant(:UnknownHostError)

  @fetcher = nil

  ##
  # Cached RemoteFetcher instance.

  def self.fetcher
    @fetcher ||= new Gem.configuration[:http_proxy]
  end

  attr_accessor :headers

  ##
  # Initialize a remote fetcher using the source URI and possible proxy
  # information.
  #
  # +proxy+
  # * [String]: explicit specification of proxy; overrides any environment
  #             variable setting
  # * nil: respect environment variables (HTTP_PROXY, HTTP_PROXY_USER,
  #        HTTP_PROXY_PASS)
  # * <tt>:no_proxy</tt>: ignore environment variables and _don't_ use a proxy
  #
  # +headers+: A set of additional HTTP headers to be sent to the server when
  #            fetching the gem.

  def initialize(proxy=nil, dns=nil, headers={})
    require_relative "core_ext/tcpsocket_init" if Gem.configuration.ipv4_fallback_enabled
    require_relative "vendored_net_http"
    require_relative "vendor/uri/lib/uri"

    Socket.do_not_reverse_lookup = true

    @proxy = proxy
    @pools = {}
    @pool_lock = Thread::Mutex.new
    @cert_files = Gem::Request.get_cert_files

    @headers = headers
  end

  ##
  # Given a name and requirement, downloads this gem into cache and returns the
  # filename. Returns nil if the gem cannot be located.
  #--
  # Should probably be integrated with #download below, but that will be a
  # larger, more encompassing effort. -erikh

  def download_to_cache(dependency)
    found, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dependency

    return if found.empty?

    spec, source = found.max_by {|(s,_)| s.version }

    download spec, source.uri
  end

  ##
  # Moves the gem +spec+ from +source_uri+ to the cache dir unless it is
  # already there.  If the source_uri is local the gem cache dir copy is
  # always replaced.

  def download(spec, source_uri, install_dir = Gem.dir)
    install_cache_dir = File.join install_dir, "cache"
    cache_dir =
      if Dir.pwd == install_dir # see fetch_command
        install_dir
      elsif File.writable?(install_cache_dir) || (File.writable?(install_dir) && !File.exist?(install_cache_dir))
        install_cache_dir
      else
        File.join Gem.user_dir, "cache"
      end

    gem_file_name = File.basename spec.cache_file
    local_gem_path = File.join cache_dir, gem_file_name

    require "fileutils"
    begin
      FileUtils.mkdir_p cache_dir
    rescue StandardError
      nil
    end unless File.exist? cache_dir

    source_uri = Gem::Uri.new(source_uri)

    scheme = source_uri.scheme

    # Gem::URI.parse gets confused by MS Windows paths with forward slashes.
    scheme = nil if /^[a-z]$/i.match?(scheme)

    # REFACTOR: split this up and dispatch on scheme (eg download_http)
    # REFACTOR: be sure to clean up fake fetcher when you do this... cleaner
    case scheme
    when "http", "https", "s3" then
      unless File.exist? local_gem_path
        begin
          verbose "Downloading gem #{gem_file_name}"

          remote_gem_path = source_uri + "gems/#{gem_file_name}"

          cache_update_path remote_gem_path, local_gem_path
        rescue FetchError
          raise if spec.original_platform == spec.platform

          alternate_name = "#{spec.original_name}.gem"

          verbose "Failed, downloading gem #{alternate_name}"

          remote_gem_path = source_uri + "gems/#{alternate_name}"

          cache_update_path remote_gem_path, local_gem_path
        end
      end
    when "file" then
      begin
        path = source_uri.path
        path = File.dirname(path) if File.extname(path) == ".gem"

        remote_gem_path = Gem::Util.correct_for_windows_path(File.join(path, "gems", gem_file_name))

        FileUtils.cp(remote_gem_path, local_gem_path)
      rescue Errno::EACCES
        local_gem_path = source_uri.to_s
      end

      verbose "Using local gem #{local_gem_path}"
    when nil then # TODO: test for local overriding cache
      source_path = if Gem.win_platform? && source_uri.scheme &&
                       !source_uri.path.include?(":")
        "#{source_uri.scheme}:#{source_uri.path}"
      else
        source_uri.path
      end

      source_path = Gem::UriFormatter.new(source_path).unescape

      begin
        FileUtils.cp source_path, local_gem_path unless
          File.identical?(source_path, local_gem_path)
      rescue Errno::EACCES
        local_gem_path = source_uri.to_s
      end

      verbose "Using local gem #{local_gem_path}"
    else
      raise ArgumentError, "unsupported URI scheme #{source_uri.scheme}"
    end

    local_gem_path
  end

  ##
  # File Fetcher. Dispatched by +fetch_path+. Use it instead.

  def fetch_file(uri, *_)
    Gem.read_binary Gem::Util.correct_for_windows_path uri.path
  end

  ##
  # HTTP Fetcher. Dispatched by +fetch_path+. Use it instead.

  def fetch_http(uri, last_modified = nil, head = false, depth = 0)
    fetch_type = head ? Gem::Net::HTTP::Head : Gem::Net::HTTP::Get
    response   = request uri, fetch_type, last_modified do |req|
      headers.each {|k,v| req.add_field(k,v) }
    end

    case response
    when Gem::Net::HTTPOK, Gem::Net::HTTPNotModified then
      response.uri = uri
      head ? response : response.body
    when Gem::Net::HTTPMovedPermanently, Gem::Net::HTTPFound, Gem::Net::HTTPSeeOther,
         Gem::Net::HTTPTemporaryRedirect then
      raise FetchError.new("too many redirects", uri) if depth > 10

      unless location = response["Location"]
        raise FetchError.new("redirecting but no redirect location was given", uri)
      end
      location = Gem::Uri.new location

      if https?(uri) && !https?(location)
        raise FetchError.new("redirecting to non-https resource: #{location}", uri)
      end

      fetch_http(location, last_modified, head, depth + 1)
    else
      raise FetchError.new("bad response #{response.message} #{response.code}", uri)
    end
  end

  alias_method :fetch_https, :fetch_http

  ##
  # Downloads +uri+ and returns it as a String.

  def fetch_path(uri, mtime = nil, head = false)
    uri = Gem::Uri.new uri

    unless uri.scheme
      raise ArgumentError, "uri scheme is invalid: #{uri.scheme.inspect}"
    end

    data = send "fetch_#{uri.scheme}", uri, mtime, head

    if data && !head && uri.to_s.end_with?(".gz")
      begin
        data = Gem::Util.gunzip data
      rescue Zlib::GzipFile::Error
        raise FetchError.new("server did not return a valid file", uri)
      end
    end

    data
  rescue Gem::Timeout::Error, IOError, SocketError, SystemCallError,
         *(OpenSSL::SSL::SSLError if Gem::HAVE_OPENSSL) => e
    raise FetchError.new("#{e.class}: #{e}", uri)
  end

  def fetch_s3(uri, mtime = nil, head = false)
    begin
      public_uri = s3_uri_signer(uri).sign
    rescue Gem::S3URISigner::ConfigurationError, Gem::S3URISigner::InstanceProfileError => e
      raise FetchError.new(e.message, "s3://#{uri.host}")
    end
    fetch_https public_uri, mtime, head
  end

  # we have our own signing code here to avoid a dependency on the aws-sdk gem
  def s3_uri_signer(uri)
    Gem::S3URISigner.new(uri)
  end

  ##
  # Downloads +uri+ to +path+ if necessary. If no path is given, it just
  # passes the data.

  def cache_update_path(uri, path = nil, update = true)
    mtime = begin
              path && File.stat(path).mtime
            rescue StandardError
              nil
            end

    data = fetch_path(uri, mtime)

    if data.nil? # indicates the server returned 304 Not Modified
      return Gem.read_binary(path)
    end

    if update && path
      Gem.write_binary(path, data)
    end

    data
  end

  ##
  # Performs a Gem::Net::HTTP request of type +request_class+ on +uri+ returning
  # a Gem::Net::HTTP response object.  request maintains a table of persistent
  # connections to reduce connect overhead.

  def request(uri, request_class, last_modified = nil)
    proxy = proxy_for @proxy, uri
    pool  = pools_for(proxy).pool_for uri

    request = Gem::Request.new uri, request_class, last_modified, pool

    request.fetch do |req|
      yield req if block_given?
    end
  end

  def https?(uri)
    uri.scheme.casecmp("https").zero?
  end

  def close_all
    @pools.each_value(&:close_all)
  end

  private

  def proxy_for(proxy, uri)
    Gem::Request.proxy_uri(proxy || Gem::Request.get_proxy_from_env(uri.scheme))
  end

  def pools_for(proxy)
    @pool_lock.synchronize do
      @pools[proxy] ||= Gem::Request::ConnectionPools.new proxy, @cert_files
    end
  end
end
PK%J[L�����0share/rubygems/rubygems/commands/list_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../query_utils"

##
# Searches for gems starting with the supplied argument.

class Gem::Commands::ListCommand < Gem::Command
  include Gem::QueryUtils

  def initialize
    super "list", "Display local gems whose name matches REGEXP",
         domain: :local, details: false, versions: true,
         installed: nil, version: Gem::Requirement.default

    add_query_options
  end

  def arguments # :nodoc:
    "REGEXP        regexp to look for in gem name"
  end

  def defaults_str # :nodoc:
    "--local --no-details"
  end

  def description # :nodoc:
    <<-EOF
The list command is used to view the gems you have installed locally.

The --details option displays additional details including the summary, the
homepage, the author, the locations of different versions of the gem.

To search for remote gems use the search command.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [REGEXP ...]"
  end
end
PK%J[��d���:share/rubygems/rubygems/commands/generate_index_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

unless defined? Gem::Commands::GenerateIndexCommand
  class Gem::Commands::GenerateIndexCommand < Gem::Command
    module RubygemsTrampoline
      def description # :nodoc:
        <<~EOF
          The generate_index command has been moved to the rubygems-generate_index gem.
        EOF
      end

      def execute
        alert_error "Install the rubygems-generate_index gem for the generate_index command"
      end

      def invoke_with_build_args(args, build_args)
        name = "rubygems-generate_index"
        spec = begin
          Gem::Specification.find_by_name(name)
        rescue Gem::LoadError
          require "rubygems/dependency_installer"
          Gem.install(name, Gem::Requirement.default, Gem::DependencyInstaller::DEFAULT_OPTIONS).find {|s| s.name == name }
        end

        # remove the methods defined in this file so that the methods defined in the gem are used instead,
        # and without a method redefinition warning
        %w[description execute invoke_with_build_args].each do |method|
          RubygemsTrampoline.remove_method(method)
        end
        self.class.singleton_class.remove_method(:new)

        spec.activate
        Gem.load_plugin_files spec.matches_for_glob("rubygems_plugin#{Gem.suffix_pattern}")

        self.class.new.invoke_with_build_args(args, build_args)
      end
    end
    private_constant :RubygemsTrampoline

    # remove_method(:initialize) warns, but removing new does not warn
    def self.new
      command = allocate
      command.send(:initialize, "generate_index", "Generates the index files for a gem server directory (requires rubygems-generate_index)")
      command
    end

    prepend(RubygemsTrampoline)
  end
end
PK%J[�
���0share/rubygems/rubygems/commands/exec_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../dependency_installer"
require_relative "../gem_runner"
require_relative "../package"
require_relative "../version_option"

class Gem::Commands::ExecCommand < Gem::Command
  include Gem::VersionOption

  def initialize
    super "exec", "Run a command from a gem", {
      version: Gem::Requirement.default,
    }

    add_version_option
    add_prerelease_option "to be installed"

    add_option "-g", "--gem GEM", "run the executable from the given gem" do |value, options|
      options[:gem_name] = value
    end

    add_option(:"Install/Update", "--conservative",
      "Prefer the most recent installed version, ",
      "rather than the latest version overall") do |_value, options|
      options[:conservative] = true
    end
  end

  def arguments # :nodoc:
    "COMMAND  the executable command to run"
  end

  def defaults_str # :nodoc:
    "--version '#{Gem::Requirement.default}'"
  end

  def description # :nodoc:
    <<-EOF
The exec command handles installing (if necessary) and running an executable
from a gem, regardless of whether that gem is currently installed.

The exec command can be thought of as a shortcut to running `gem install` and
then the executable from the installed gem.

For example, `gem exec rails new .` will run `rails new .` in the current
directory, without having to manually run `gem install rails`.
Additionally, the exec command ensures the most recent version of the gem
is used (unless run with `--conservative`), and that the gem is not installed
to the same gem path as user-installed gems.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [options --] COMMAND [args]"
  end

  def execute
    check_executable

    print_command
    if options[:gem_name] == "gem" && options[:executable] == "gem"
      set_gem_exec_install_paths
      Gem::GemRunner.new.run options[:args]
      return
    elsif options[:conservative]
      install_if_needed
    else
      install
      activate!
    end

    load!
  end

  private

  def handle_options(args)
    args = add_extra_args(args)
    check_deprecated_options(args)
    @options = Marshal.load Marshal.dump @defaults # deep copy
    parser.order!(args) do |v|
      # put the non-option back at the front of the list of arguments
      args.unshift(v)

      # stop parsing once we hit the first non-option,
      # so you can call `gem exec rails --version` and it prints the rails
      # version rather than rubygem's
      break
    end
    @options[:args] = args

    options[:executable], gem_version = extract_gem_name_and_version(options[:args].shift)
    options[:gem_name] ||= options[:executable]

    if gem_version
      if options[:version].none?
        options[:version] = Gem::Requirement.new(gem_version)
      else
        options[:version].concat [gem_version]
      end
    end

    if options[:prerelease] && !options[:version].prerelease?
      if options[:version].none?
        options[:version] = Gem::Requirement.default_prerelease
      else
        options[:version].concat [Gem::Requirement.default_prerelease]
      end
    end
  end

  def check_executable
    if options[:executable].nil?
      raise Gem::CommandLineError,
        "Please specify an executable to run (e.g. #{program_name} COMMAND)"
    end
  end

  def print_command
    verbose "running #{program_name} with:\n"
    opts = options.reject {|_, v| v.nil? || Array(v).empty? }
    max_length = opts.map {|k, _| k.size }.max
    opts.each do |k, v|
      next if v.nil?
      verbose "\t#{k.to_s.rjust(max_length)}: #{v}"
    end
    verbose ""
  end

  def install_if_needed
    activate!
  rescue Gem::MissingSpecError
    verbose "#{Gem::Dependency.new(options[:gem_name], options[:version])} not available locally, installing from remote"
    install
    activate!
  end

  def set_gem_exec_install_paths
    home = Gem.dir

    ENV["GEM_PATH"] = ([home] + Gem.path).join(File::PATH_SEPARATOR)
    ENV["GEM_HOME"] = home
    Gem.clear_paths
  end

  def install
    set_gem_exec_install_paths

    gem_name = options[:gem_name]
    gem_version = options[:version]

    install_options = options.merge(
      minimal_deps: false,
      wrappers: true
    )

    suppress_always_install do
      dep_installer = Gem::DependencyInstaller.new install_options

      request_set = dep_installer.resolve_dependencies gem_name, gem_version

      verbose "Gems to install:"
      request_set.sorted_requests.each do |activation_request|
        verbose "\t#{activation_request.full_name}"
      end

      request_set.install install_options
    end

    Gem::Specification.reset
  rescue Gem::InstallError => e
    alert_error "Error installing #{gem_name}:\n\t#{e.message}"
    terminate_interaction 1
  rescue Gem::GemNotFoundException => e
    show_lookup_failure e.name, e.version, e.errors, false

    terminate_interaction 2
  rescue Gem::UnsatisfiableDependencyError => e
    show_lookup_failure e.name, e.version, e.errors, false,
                        "'#{gem_name}' (#{gem_version})"

    terminate_interaction 2
  end

  def activate!
    gem(options[:gem_name], options[:version])
    Gem.finish_resolve

    verbose "activated #{options[:gem_name]} (#{Gem.loaded_specs[options[:gem_name]].version})"
  end

  def load!
    argv = ARGV.clone
    ARGV.replace options[:args]

    executable = options[:executable]

    contains_executable = Gem.loaded_specs.values.select do |spec|
      spec.executables.include?(executable)
    end

    if contains_executable.any? {|s| s.name == executable }
      contains_executable.select! {|s| s.name == executable }
    end

    if contains_executable.empty?
      spec = Gem.loaded_specs[executable]

      if spec.nil? || spec.executables.empty?
        alert_error "Failed to load executable `#{executable}`," \
              " are you sure the gem `#{options[:gem_name]}` contains it?"
        terminate_interaction 1
      end

      if spec.executables.size > 1
        alert_error "Ambiguous which executable from gem `#{executable}` should be run: " \
              "the options are #{spec.executables.sort}, specify one via COMMAND, and use `-g` and `-v` to specify gem and version"
        terminate_interaction 1
      end

      contains_executable << spec
      executable = spec.executable
    end

    if contains_executable.size > 1
      alert_error "Ambiguous which gem `#{executable}` should come from: " \
            "the options are #{contains_executable.map(&:name)}, " \
            "specify one via `-g`"
      terminate_interaction 1
    end

    old_exe = $0
    $0 = executable
    load Gem.activate_bin_path(contains_executable.first.name, executable, ">= 0.a")
  ensure
    $0 = old_exe if old_exe
    ARGV.replace argv
  end

  def suppress_always_install
    name = :always_install
    cls = ::Gem::Resolver::InstallerSet
    method = cls.instance_method(name)
    cls.remove_method(name)
    cls.define_method(name) { [] }

    begin
      yield
    ensure
      cls.remove_method(name)
      cls.define_method(name, method)
    end
  end
end
PK%J[�� ��3share/rubygems/rubygems/commands/sources_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../remote_fetcher"
require_relative "../spec_fetcher"
require_relative "../local_remote_options"

class Gem::Commands::SourcesCommand < Gem::Command
  include Gem::LocalRemoteOptions

  def initialize
    require "fileutils"

    super "sources",
          "Manage the sources and cache file RubyGems uses to search for gems"

    add_option "-a", "--add SOURCE_URI", "Add source" do |value, options|
      options[:add] = value
    end

    add_option "-l", "--list", "List sources" do |value, options|
      options[:list] = value
    end

    add_option "-r", "--remove SOURCE_URI", "Remove source" do |value, options|
      options[:remove] = value
    end

    add_option "-c", "--clear-all",
               "Remove all sources (clear the cache)" do |value, options|
      options[:clear_all] = value
    end

    add_option "-u", "--update", "Update source cache" do |value, options|
      options[:update] = value
    end

    add_option "-f", "--[no-]force", "Do not show any confirmation prompts and behave as if 'yes' was always answered" do |value, options|
      options[:force] = value
    end

    add_proxy_option
  end

  def add_source(source_uri) # :nodoc:
    check_rubygems_https source_uri

    source = Gem::Source.new source_uri

    check_typo_squatting(source)

    begin
      if Gem.sources.include? source
        say "source #{source_uri} already present in the cache"
      else
        source.load_specs :released
        Gem.sources << source
        Gem.configuration.write

        say "#{source_uri} added to sources"
      end
    rescue Gem::URI::Error, ArgumentError
      say "#{source_uri} is not a URI"
      terminate_interaction 1
    rescue Gem::RemoteFetcher::FetchError => e
      say "Error fetching #{Gem::Uri.redact(source.uri)}:\n\t#{e.message}"
      terminate_interaction 1
    end
  end

  def check_typo_squatting(source)
    if source.typo_squatting?("rubygems.org")
      question = <<-QUESTION.chomp
#{source.uri} is too similar to https://rubygems.org

Do you want to add this source?
      QUESTION

      terminate_interaction 1 unless options[:force] || ask_yes_no(question)
    end
  end

  def check_rubygems_https(source_uri) # :nodoc:
    uri = Gem::URI source_uri

    if uri.scheme && uri.scheme.casecmp("http").zero? &&
       uri.host.casecmp("rubygems.org").zero?
      question = <<-QUESTION.chomp
https://rubygems.org is recommended for security over #{uri}

Do you want to add this insecure source?
      QUESTION

      terminate_interaction 1 unless options[:force] || ask_yes_no(question)
    end
  end

  def clear_all # :nodoc:
    path = Gem.spec_cache_dir
    FileUtils.rm_rf path

    if File.exist? path
      if File.writable? path
        say "*** Unable to remove source cache ***"
      else
        say "*** Unable to remove source cache (write protected) ***"
      end

      terminate_interaction 1
    else
      say "*** Removed specs cache ***"
    end
  end

  def defaults_str # :nodoc:
    "--list"
  end

  def description # :nodoc:
    <<-EOF
RubyGems fetches gems from the sources you have configured (stored in your
~/.gemrc).

The default source is https://rubygems.org, but you may have other sources
configured.  This guide will help you update your sources or configure
yourself to use your own gem server.

Without any arguments the sources lists your currently configured sources:

  $ gem sources
  *** CURRENT SOURCES ***

  https://rubygems.org

This may list multiple sources or non-rubygems sources.  You probably
configured them before or have an old `~/.gemrc`.  If you have sources you
do not recognize you should remove them.

RubyGems has been configured to serve gems via the following URLs through
its history:

* http://gems.rubyforge.org (RubyGems 1.3.5 and earlier)
* http://rubygems.org       (RubyGems 1.3.6 through 1.8.30, and 2.0.0)
* https://rubygems.org      (RubyGems 2.0.1 and newer)

Since all of these sources point to the same set of gems you only need one
of them in your list.  https://rubygems.org is recommended as it brings the
protections of an SSL connection to gem downloads.

To add a source use the --add argument:

    $ gem sources --add https://rubygems.org
    https://rubygems.org added to sources

RubyGems will check to see if gems can be installed from the source given
before it is added.

To remove a source use the --remove argument:

    $ gem sources --remove https://rubygems.org/
    https://rubygems.org/ removed from sources

    EOF
  end

  def list # :nodoc:
    say "*** CURRENT SOURCES ***"
    say

    Gem.sources.each do |src|
      say src
    end
  end

  def list? # :nodoc:
    !(options[:add] ||
      options[:clear_all] ||
      options[:remove] ||
      options[:update])
  end

  def execute
    clear_all if options[:clear_all]

    source_uri = options[:add]
    add_source source_uri if source_uri

    source_uri = options[:remove]
    remove_source source_uri if source_uri

    update if options[:update]

    list if list?
  end

  def remove_source(source_uri) # :nodoc:
    if Gem.sources.include? source_uri
      Gem.sources.delete source_uri
      Gem.configuration.write

      say "#{source_uri} removed from sources"
    else
      say "source #{source_uri} not present in cache"
    end
  end

  def update # :nodoc:
    Gem.sources.each_source do |src|
      src.load_specs :released
      src.load_specs :latest
    end

    say "source cache successfully updated"
  end

  def remove_cache_file(desc, path) # :nodoc:
    FileUtils.rm_rf path

    if !File.exist?(path)
      say "*** Removed #{desc} source cache ***"
    elsif !File.writable?(path)
      say "*** Unable to remove #{desc} source cache (write protected) ***"
    else
      say "*** Unable to remove #{desc} source cache ***"
    end
  end
end
PK%J[N��X��2share/rubygems/rubygems/commands/unpack_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../version_option"
require_relative "../security_option"
require_relative "../remote_fetcher"
require_relative "../package"

# forward-declare

module Gem::Security # :nodoc:
  class Policy # :nodoc:
  end
end

class Gem::Commands::UnpackCommand < Gem::Command
  include Gem::VersionOption
  include Gem::SecurityOption

  def initialize
    require "fileutils"

    super "unpack", "Unpack an installed gem to the current directory",
          version: Gem::Requirement.default,
          target: Dir.pwd

    add_option("--target=DIR",
               "target directory for unpacking") do |value, options|
      options[:target] = value
    end

    add_option("--spec", "unpack the gem specification") do |_value, options|
      options[:spec] = true
    end

    add_security_option
    add_version_option
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to unpack"
  end

  def defaults_str # :nodoc:
    "--version '#{Gem::Requirement.default}'"
  end

  def description
    <<-EOF
The unpack command allows you to examine the contents of a gem or modify
them to help diagnose a bug.

You can add the contents of the unpacked gem to the load path using the
RUBYLIB environment variable or -I:

  $ gem unpack my_gem
  Unpacked gem: '.../my_gem-1.0'
  [edit my_gem-1.0/lib/my_gem.rb]
  $ ruby -Imy_gem-1.0/lib -S other_program

You can repackage an unpacked gem using the build command.  See the build
command help for an example.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEMNAME"
  end

  #--
  # TODO: allow, e.g., 'gem unpack rake-0.3.1'.  Find a general solution for
  # this, so that it works for uninstall as well.  (And check other commands
  # at the same time.)

  def execute
    security_policy = options[:security_policy]

    get_all_gem_names.each do |name|
      dependency = Gem::Dependency.new name, options[:version]
      path = get_path dependency

      unless path
        alert_error "Gem '#{name}' not installed nor fetchable."
        next
      end

      if @options[:spec]
        spec, metadata = Gem::Package.raw_spec(path, security_policy)

        if metadata.nil?
          alert_error "--spec is unsupported on '#{name}' (old format gem)"
          next
        end

        spec_file = File.basename spec.spec_file

        FileUtils.mkdir_p @options[:target] if @options[:target]

        destination = if @options[:target]
          File.join @options[:target], spec_file
        else
          spec_file
        end

        File.open destination, "w" do |io|
          io.write metadata
        end
      else
        basename = File.basename path, ".gem"
        target_dir = File.expand_path basename, options[:target]

        package = Gem::Package.new path, security_policy
        package.extract_files target_dir

        say "Unpacked gem: '#{target_dir}'"
      end
    end
  end

  ##
  #
  # Find cached filename in Gem.path. Returns nil if the file cannot be found.
  #
  #--
  # TODO: see comments in get_path() about general service.

  def find_in_cache(filename)
    Gem.path.each do |path|
      this_path = File.join(path, "cache", filename)
      return this_path if File.exist? this_path
    end

    nil
  end

  ##
  # Return the full path to the cached gem file matching the given
  # name and version requirement.  Returns 'nil' if no match.
  #
  # Example:
  #
  #   get_path 'rake', '> 0.4' # "/usr/lib/ruby/gems/1.8/cache/rake-0.4.2.gem"
  #   get_path 'rake', '< 0.1' # nil
  #   get_path 'rak'           # nil (exact name required)
  #--

  def get_path(dependency)
    return dependency.name if /\.gem$/i.match?(dependency.name)

    specs = dependency.matching_specs

    selected = specs.max_by(&:version)

    return Gem::RemoteFetcher.fetcher.download_to_cache(dependency) unless
      selected

    return unless /^#{selected.name}$/i.match?(dependency.name)

    # We expect to find (basename).gem in the 'cache' directory.  Furthermore,
    # the name match must be exact (ignoring case).

    path = find_in_cache File.basename selected.cache_file

    return Gem::RemoteFetcher.fetcher.download_to_cache(dependency) unless path

    path
  end
end
PK%J[Xi�^3share/rubygems/rubygems/commands/cleanup_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../dependency_list"
require_relative "../uninstaller"

class Gem::Commands::CleanupCommand < Gem::Command
  def initialize
    super "cleanup",
          "Clean up old versions of installed gems",
          force: false, install_dir: Gem.dir,
          check_dev: true

    add_option("-n", "-d", "--dry-run",
               "Do not uninstall gems") do |_value, options|
      options[:dryrun] = true
    end

    add_option(:Deprecated, "--dryrun",
               "Do not uninstall gems") do |_value, options|
      options[:dryrun] = true
    end
    deprecate_option("--dryrun", extra_msg: "Use --dry-run instead")

    add_option("-D", "--[no-]check-development",
               "Check development dependencies while uninstalling",
               "(default: true)") do |value, options|
      options[:check_dev] = value
    end

    add_option("--[no-]user-install",
               "Cleanup in user's home directory instead",
               "of GEM_HOME.") do |value, options|
      options[:user_install] = value
    end

    @candidate_gems  = nil
    @default_gems    = []
    @full            = nil
    @gems_to_cleanup = nil
    @primary_gems    = nil
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to cleanup"
  end

  def defaults_str # :nodoc:
    "--no-dry-run"
  end

  def description # :nodoc:
    <<-EOF
The cleanup command removes old versions of gems from GEM_HOME that are not
required to meet a dependency.  If a gem is installed elsewhere in GEM_PATH
the cleanup command won't delete it.

If no gems are named all gems in GEM_HOME are cleaned.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [GEMNAME ...]"
  end

  def execute
    say "Cleaning up installed gems..."

    if options[:args].empty?
      done     = false
      last_set = nil

      until done do
        clean_gems

        this_set = @gems_to_cleanup.map(&:full_name).sort

        done = this_set.empty? || last_set == this_set

        last_set = this_set
      end
    else
      clean_gems
    end

    say "Clean up complete"

    verbose do
      skipped = @default_gems.map(&:full_name)

      "Skipped default gems: #{skipped.join ", "}"
    end
  end

  def clean_gems
    get_primary_gems
    get_candidate_gems
    get_gems_to_cleanup

    @full = Gem::DependencyList.from_specs

    deplist = Gem::DependencyList.new
    @gems_to_cleanup.each {|spec| deplist.add spec }

    deps = deplist.strongly_connected_components.flatten

    deps.reverse_each do |spec|
      uninstall_dep spec
    end
  end

  def get_candidate_gems
    @candidate_gems = if options[:args].empty?
      Gem::Specification.to_a
    else
      options[:args].flat_map do |gem_name|
        Gem::Specification.find_all_by_name gem_name
      end
    end
  end

  def get_gems_to_cleanup
    gems_to_cleanup = @candidate_gems.select do |spec|
      @primary_gems[spec.name].version != spec.version
    end

    default_gems, gems_to_cleanup = gems_to_cleanup.partition(&:default_gem?)

    uninstall_from = options[:user_install] ? Gem.user_dir : Gem.dir

    gems_to_cleanup = gems_to_cleanup.select do |spec|
      spec.base_dir == uninstall_from
    end

    @default_gems += default_gems
    @default_gems.uniq!
    @gems_to_cleanup = gems_to_cleanup.uniq
  end

  def get_primary_gems
    @primary_gems = {}

    Gem::Specification.each do |spec|
      if @primary_gems[spec.name].nil? ||
         @primary_gems[spec.name].version < spec.version
        @primary_gems[spec.name] = spec
      end
    end
  end

  def uninstall_dep(spec)
    return unless @full.ok_to_remove?(spec.full_name, options[:check_dev])

    if options[:dryrun]
      say "Dry Run Mode: Would uninstall #{spec.full_name}"
      return
    end

    say "Attempting to uninstall #{spec.full_name}"

    uninstall_options = {
      executables: false,
      version: "= #{spec.version}",
    }

    uninstall_options[:user_install] = Gem.user_dir == spec.base_dir

    uninstaller = Gem::Uninstaller.new spec.name, uninstall_options

    begin
      uninstaller.uninstall
    rescue Gem::DependencyRemovalException, Gem::InstallError,
           Gem::GemNotInHomeException, Gem::FilePermissionError => e
      say "Unable to uninstall #{spec.full_name}:"
      say "\t#{e.class}: #{e.message}"
    end
  end
end
PK%J[��L�$�$0share/rubygems/rubygems/commands/cert_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../security"

class Gem::Commands::CertCommand < Gem::Command
  def initialize
    super "cert", "Manage RubyGems certificates and signing settings",
          add: [], remove: [], list: [], build: [], sign: []

    add_option("-a", "--add CERT",
               "Add a trusted certificate.") do |cert_file, options|
      options[:add] << open_cert(cert_file)
    end

    add_option("-l", "--list [FILTER]",
               "List trusted certificates where the",
               "subject contains FILTER") do |filter, options|
      filter ||= ""

      options[:list] << filter
    end

    add_option("-r", "--remove FILTER",
               "Remove trusted certificates where the",
               "subject contains FILTER") do |filter, options|
      options[:remove] << filter
    end

    add_option("-b", "--build EMAIL_ADDR",
               "Build private key and self-signed",
               "certificate for EMAIL_ADDR") do |email_address, options|
      options[:build] << email_address
    end

    add_option("-C", "--certificate CERT",
               "Signing certificate for --sign") do |cert_file, options|
      options[:issuer_cert] = open_cert(cert_file)
      options[:issuer_cert_file] = cert_file
    end

    add_option("-K", "--private-key KEY",
               "Key for --sign or --build") do |key_file, options|
      options[:key] = open_private_key(key_file)
    end

    add_option("-A", "--key-algorithm ALGORITHM",
               "Select which key algorithm to use for --build") do |algorithm, options|
      options[:key_algorithm] = algorithm
    end

    add_option("-s", "--sign CERT",
               "Signs CERT with the key from -K",
               "and the certificate from -C") do |cert_file, options|
      raise Gem::OptionParser::InvalidArgument, "#{cert_file}: does not exist" unless
        File.file? cert_file

      options[:sign] << cert_file
    end

    add_option("-d", "--days NUMBER_OF_DAYS",
               "Days before the certificate expires") do |days, options|
      options[:expiration_length_days] = days.to_i
    end

    add_option("-R", "--re-sign",
               "Re-signs the certificate from -C with the key from -K") do |resign, options|
      options[:resign] = resign
    end
  end

  def add_certificate(certificate) # :nodoc:
    Gem::Security.trust_dir.trust_cert certificate

    say "Added '#{certificate.subject}'"
  end

  def check_openssl
    return if Gem::HAVE_OPENSSL

    alert_error "OpenSSL library is required for the cert command"
    terminate_interaction 1
  end

  def open_cert(certificate_file)
    check_openssl
    OpenSSL::X509::Certificate.new File.read certificate_file
  rescue Errno::ENOENT
    raise Gem::OptionParser::InvalidArgument, "#{certificate_file}: does not exist"
  rescue OpenSSL::X509::CertificateError
    raise Gem::OptionParser::InvalidArgument,
      "#{certificate_file}: invalid X509 certificate"
  end

  def open_private_key(key_file)
    check_openssl
    passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
    key = OpenSSL::PKey.read File.read(key_file), passphrase
    raise Gem::OptionParser::InvalidArgument,
      "#{key_file}: private key not found" unless key.private?
    key
  rescue Errno::ENOENT
    raise Gem::OptionParser::InvalidArgument, "#{key_file}: does not exist"
  rescue OpenSSL::PKey::PKeyError, ArgumentError
    raise Gem::OptionParser::InvalidArgument, "#{key_file}: invalid RSA, DSA, or EC key"
  end

  def execute
    check_openssl

    options[:add].each do |certificate|
      add_certificate certificate
    end

    options[:remove].each do |filter|
      remove_certificates_matching filter
    end

    options[:list].each do |filter|
      list_certificates_matching filter
    end

    options[:build].each do |email|
      build email
    end

    if options[:resign]
      re_sign_cert(
        options[:issuer_cert],
        options[:issuer_cert_file],
        options[:key]
      )
    end

    sign_certificates unless options[:sign].empty?
  end

  def build(email)
    unless valid_email?(email)
      raise Gem::CommandLineError, "Invalid email address #{email}"
    end

    key, key_path = build_key
    cert_path = build_cert email, key

    say "Certificate: #{cert_path}"

    if key_path
      say "Private Key: #{key_path}"
      say "Don't forget to move the key file to somewhere private!"
    end
  end

  def build_cert(email, key) # :nodoc:
    expiration_length_days = options[:expiration_length_days] ||
                             Gem.configuration.cert_expiration_length_days

    cert = Gem::Security.create_cert_email(
      email,
      key,
      (Gem::Security::ONE_DAY * expiration_length_days)
    )

    Gem::Security.write cert, "gem-public_cert.pem"
  end

  def build_key # :nodoc:
    return options[:key] if options[:key]

    passphrase = ask_for_password "Passphrase for your Private Key:"
    say "\n"

    passphrase_confirmation = ask_for_password "Please repeat the passphrase for your Private Key:"
    say "\n"

    raise Gem::CommandLineError,
          "Passphrase and passphrase confirmation don't match" unless passphrase == passphrase_confirmation

    algorithm = options[:key_algorithm] || Gem::Security::DEFAULT_KEY_ALGORITHM
    key = Gem::Security.create_key(algorithm)
    key_path = Gem::Security.write key, "gem-private_key.pem", 0o600, passphrase

    [key, key_path]
  end

  def certificates_matching(filter)
    return enum_for __method__, filter unless block_given?

    Gem::Security.trusted_certificates.select do |certificate, _|
      subject = certificate.subject.to_s
      subject.downcase.index filter
    end.sort_by do |certificate, _|
      certificate.subject.to_a.map {|name, data,| [name, data] }
    end.each do |certificate, path|
      yield certificate, path
    end
  end

  def description # :nodoc:
    <<-EOF
The cert command manages signing keys and certificates for creating signed
gems.  Your signing certificate and private key are typically stored in
~/.gem/gem-public_cert.pem and ~/.gem/gem-private_key.pem respectively.

To build a certificate for signing gems:

  gem cert --build you@example

If you already have an RSA key, or are creating a new certificate for an
existing key:

  gem cert --build you@example --private-key /path/to/key.pem

If you wish to trust a certificate you can add it to the trust list with:

  gem cert --add /path/to/cert.pem

You can list trusted certificates with:

  gem cert --list

or:

  gem cert --list cert_subject_substring

If you wish to remove a previously trusted certificate:

  gem cert --remove cert_subject_substring

To sign another gem author's certificate:

  gem cert --sign /path/to/other_cert.pem

For further reading on signing gems see `ri Gem::Security`.
    EOF
  end

  def list_certificates_matching(filter) # :nodoc:
    certificates_matching filter do |certificate, _|
      # this could probably be formatted more gracefully
      say certificate.subject.to_s
    end
  end

  def load_default_cert
    cert_file = File.join Gem.default_cert_path
    cert = File.read cert_file
    options[:issuer_cert] = OpenSSL::X509::Certificate.new cert
  rescue Errno::ENOENT
    alert_error \
      "--certificate not specified and ~/.gem/gem-public_cert.pem does not exist"

    terminate_interaction 1
  rescue OpenSSL::X509::CertificateError
    alert_error \
      "--certificate not specified and ~/.gem/gem-public_cert.pem is not valid"

    terminate_interaction 1
  end

  def load_default_key
    key_file = File.join Gem.default_key_path
    key = File.read key_file
    passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
    options[:key] = OpenSSL::PKey.read key, passphrase
  rescue Errno::ENOENT
    alert_error \
      "--private-key not specified and ~/.gem/gem-private_key.pem does not exist"

    terminate_interaction 1
  rescue OpenSSL::PKey::PKeyError
    alert_error \
      "--private-key not specified and ~/.gem/gem-private_key.pem is not valid"

    terminate_interaction 1
  end

  def load_defaults # :nodoc:
    load_default_cert unless options[:issuer_cert]
    load_default_key  unless options[:key]
  end

  def remove_certificates_matching(filter) # :nodoc:
    certificates_matching filter do |certificate, path|
      FileUtils.rm path
      say "Removed '#{certificate.subject}'"
    end
  end

  def sign(cert_file)
    cert = File.read cert_file
    cert = OpenSSL::X509::Certificate.new cert

    permissions = File.stat(cert_file).mode & 0o777

    issuer_cert = options[:issuer_cert]
    issuer_key = options[:key]

    cert = Gem::Security.sign cert, issuer_key, issuer_cert

    Gem::Security.write cert, cert_file, permissions
  end

  def sign_certificates # :nodoc:
    load_defaults unless options[:sign].empty?

    options[:sign].each do |cert_file|
      sign cert_file
    end
  end

  def re_sign_cert(cert, cert_path, private_key)
    Gem::Security::Signer.re_sign_cert(cert, cert_path, private_key) do |expired_cert_path, new_expired_cert_path|
      alert("Your certificate #{expired_cert_path} has been re-signed")
      alert("Your expired certificate will be located at: #{new_expired_cert_path}")
    end
  end

  private

  def valid_email?(email)
    # It's simple, but is all we need
    email =~ /\A.+@.+\z/
  end
end
PK%J[�X9ll5share/rubygems/rubygems/commands/uninstall_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../version_option"
require_relative "../uninstaller"
require "fileutils"

##
# Gem uninstaller command line tool
#
# See `gem help uninstall`

class Gem::Commands::UninstallCommand < Gem::Command
  include Gem::VersionOption

  def initialize
    super "uninstall", "Uninstall gems from the local repository",
          version: Gem::Requirement.default, user_install: true,
          check_dev: false, vendor: false

    add_option("-a", "--[no-]all",
      "Uninstall all matching versions") do |value, options|
      options[:all] = value
    end

    add_option("-I", "--[no-]ignore-dependencies",
               "Ignore dependency requirements while",
               "uninstalling") do |value, options|
      options[:ignore] = value
    end

    add_option("-D", "--[no-]check-development",
               "Check development dependencies while uninstalling",
               "(default: false)") do |value, options|
      options[:check_dev] = value
    end

    add_option("-x", "--[no-]executables",
                 "Uninstall applicable executables without",
                 "confirmation") do |value, options|
      options[:executables] = value
    end

    add_option("-i", "--install-dir DIR",
               "Directory to uninstall gem from") do |value, options|
      options[:install_dir] = File.expand_path(value)
    end

    add_option("-n", "--bindir DIR",
               "Directory to remove executables from") do |value, options|
      options[:bin_dir] = File.expand_path(value)
    end

    add_option("--[no-]user-install",
               "Uninstall from user's home directory",
               "in addition to GEM_HOME.") do |value, options|
      options[:user_install] = value
    end

    add_option("--[no-]format-executable",
               "Assume executable names match Ruby's prefix and suffix.") do |value, options|
      options[:format_executable] = value
    end

    add_option("--[no-]force",
               "Uninstall all versions of the named gems",
               "ignoring dependencies") do |value, options|
      options[:force] = value
    end

    add_option("--[no-]abort-on-dependent",
               "Prevent uninstalling gems that are",
               "depended on by other gems.") do |value, options|
      options[:abort_on_dependent] = value
    end

    add_version_option
    add_platform_option

    add_option("--vendor",
               "Uninstall gem from the vendor directory.",
               "Only for use by gem repackagers.") do |_value, options|
      unless Gem.vendor_dir
        raise Gem::OptionParser::InvalidOption.new "your platform is not supported"
      end

      alert_warning "Use your OS package manager to uninstall vendor gems"
      options[:vendor] = true
      options[:install_dir] = Gem.vendor_dir
    end
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to uninstall"
  end

  def defaults_str # :nodoc:
    "--version '#{Gem::Requirement.default}' --no-force " \
      "--user-install"
  end

  def description # :nodoc:
    <<-EOF
The uninstall command removes a previously installed gem.

RubyGems will ask for confirmation if you are attempting to uninstall a gem
that is a dependency of an existing gem.  You can use the
--ignore-dependencies option to skip this check.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEMNAME [GEMNAME ...]"
  end

  def check_version # :nodoc:
    if options[:version] != Gem::Requirement.default &&
       get_all_gem_names.size > 1
      alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
                  " version requirements using `gem uninstall 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
      terminate_interaction 1
    end
  end

  def execute
    check_version

    # Consider only gem specifications installed at `--install-dir`
    Gem::Specification.dirs = options[:install_dir] if options[:install_dir]

    if options[:all] && !options[:args].empty?
      uninstall_specific
    elsif options[:all]
      uninstall_all
    else
      uninstall_specific
    end
  end

  def uninstall_all
    specs = Gem::Specification.reject(&:default_gem?)

    specs.each do |spec|
      options[:version] = spec.version
      uninstall_gem spec.name
    end

    alert "Uninstalled all gems in #{options[:install_dir] || Gem.dir}"
  end

  def uninstall_specific
    deplist = Gem::DependencyList.new
    original_gem_version = {}

    get_all_gem_names_and_versions.each do |name, version|
      original_gem_version[name] = version || options[:version]

      gem_specs = Gem::Specification.find_all_by_name(name, original_gem_version[name])

      if gem_specs.empty?
        say("Gem '#{name}' is not installed")
      else
        gem_specs.reject!(&:default_gem?) if gem_specs.size > 1

        gem_specs.each do |spec|
          deplist.add spec
        end
      end
    end

    deps = deplist.strongly_connected_components.flatten.reverse

    gems_to_uninstall = {}

    deps.each do |dep|
      if original_gem_version[dep.name] == Gem::Requirement.default
        next if gems_to_uninstall[dep.name]
        gems_to_uninstall[dep.name] = true
      else
        options[:version] = dep.version
      end

      uninstall_gem(dep.name)
    end
  end

  def uninstall_gem(gem_name)
    uninstall(gem_name)
  rescue Gem::GemNotInHomeException => e
    spec = e.spec
    alert("In order to remove #{spec.name}, please execute:\n" \
          "\tgem uninstall #{spec.name} --install-dir=#{spec.base_dir}")
  rescue Gem::UninstallError => e
    spec = e.spec
    alert_error("Error: unable to successfully uninstall '#{spec.name}' which is " \
          "located at '#{spec.full_gem_path}'. This is most likely because" \
          "the current user does not have the appropriate permissions")
    terminate_interaction 1
  end

  def uninstall(gem_name)
    Gem::Uninstaller.new(gem_name, options).uninstall
  end
end
PK%J[�Q BB0share/rubygems/rubygems/commands/info_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../query_utils"

class Gem::Commands::InfoCommand < Gem::Command
  include Gem::QueryUtils

  def initialize
    super "info", "Show information for the given gem",
         name: //, domain: :local, details: false, versions: true,
         installed: nil, version: Gem::Requirement.default

    add_query_options

    remove_option("-d")

    defaults[:details] = true
    defaults[:exact] = true
  end

  def description # :nodoc:
    "Info prints information about the gem such as name,"\
    " description, website, license and installed paths"
  end

  def usage # :nodoc:
    "#{program_name} GEMNAME"
  end

  def arguments # :nodoc:
    "GEMNAME        name of the gem to print information about"
  end

  def defaults_str
    "--local"
  end
end
PK%J[D^dl�
�
1share/rubygems/rubygems/commands/fetch_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../local_remote_options"
require_relative "../version_option"

class Gem::Commands::FetchCommand < Gem::Command
  include Gem::LocalRemoteOptions
  include Gem::VersionOption

  def initialize
    defaults = {
      suggest_alternate: true,
      version: Gem::Requirement.default,
    }

    super "fetch", "Download a gem and place it in the current directory", defaults

    add_bulk_threshold_option
    add_proxy_option
    add_source_option
    add_clear_sources_option

    add_version_option
    add_platform_option
    add_prerelease_option

    add_option "--[no-]suggestions", "Suggest alternates when gems are not found" do |value, options|
      options[:suggest_alternate] = value
    end
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to download"
  end

  def defaults_str # :nodoc:
    "--version '#{Gem::Requirement.default}'"
  end

  def description # :nodoc:
    <<-EOF
The fetch command fetches gem files that can be stored for later use or
unpacked to examine their contents.

See the build command help for an example of unpacking a gem, modifying it,
then repackaging it.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEMNAME [GEMNAME ...]"
  end

  def check_version # :nodoc:
    if options[:version] != Gem::Requirement.default &&
       get_all_gem_names.size > 1
      alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
                  " version requirements using `gem fetch 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
      terminate_interaction 1
    end
  end

  def execute
    check_version

    exit_code = fetch_gems

    terminate_interaction exit_code
  end

  private

  def fetch_gems
    exit_code = 0

    version = options[:version]

    platform  = Gem.platforms.last
    gem_names = get_all_gem_names_and_versions

    gem_names.each do |gem_name, gem_version|
      gem_version ||= version
      dep = Gem::Dependency.new gem_name, gem_version
      dep.prerelease = options[:prerelease]
      suppress_suggestions = !options[:suggest_alternate]

      specs_and_sources, errors =
        Gem::SpecFetcher.fetcher.spec_for_dependency dep

      if platform
        filtered = specs_and_sources.select {|s,| s.platform == platform }
        specs_and_sources = filtered unless filtered.empty?
      end

      spec, source = specs_and_sources.max_by {|s,| s }

      if spec.nil?
        show_lookup_failure gem_name, gem_version, errors, suppress_suggestions, options[:domain]
        exit_code |= 2
        next
      end
      source.download spec
      say "Downloaded #{spec.full_name}"
    end

    exit_code
  end
end
PK%J[G`SOGG1share/rubygems/rubygems/commands/setup_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

##
# Installs RubyGems itself.  This command is ordinarily only available from a
# RubyGems checkout or tarball.

class Gem::Commands::SetupCommand < Gem::Command
  HISTORY_HEADER = %r{^#\s*[\d.a-zA-Z]+\s*/\s*\d{4}-\d{2}-\d{2}\s*$}
  VERSION_MATCHER = %r{^#\s*([\d.a-zA-Z]+)\s*/\s*\d{4}-\d{2}-\d{2}\s*$}

  ENV_PATHS = %w[/usr/bin/env /bin/env].freeze

  def initialize
    super "setup", "Install RubyGems",
          format_executable: false, document: %w[ri],
          force: true,
          site_or_vendor: "sitelibdir",
          destdir: "", prefix: "", previous_version: "",
          regenerate_binstubs: true,
          regenerate_plugins: true

    add_option "--previous-version=VERSION",
               "Previous version of RubyGems",
               "Used for changelog processing" do |version, options|
      options[:previous_version] = version
    end

    add_option "--prefix=PREFIX",
               "Prefix path for installing RubyGems",
               "Will not affect gem repository location" do |prefix, options|
      options[:prefix] = File.expand_path prefix
    end

    add_option "--destdir=DESTDIR",
               "Root directory to install RubyGems into",
               "Mainly used for packaging RubyGems" do |destdir, options|
      options[:destdir] = File.expand_path destdir
    end

    add_option "--[no-]vendor",
               "Install into vendorlibdir not sitelibdir" do |vendor, options|
      options[:site_or_vendor] = vendor ? "vendorlibdir" : "sitelibdir"
    end

    add_option "--[no-]format-executable",
               "Makes `gem` match ruby",
               "If Ruby is ruby18, gem will be gem18" do |value, options|
      options[:format_executable] = value
    end

    add_option "--[no-]document [TYPES]", Array,
               "Generate documentation for RubyGems",
               "List the documentation types you wish to",
               "generate.  For example: rdoc,ri" do |value, options|
      options[:document] = case value
                           when nil   then %w[rdoc ri]
                           when false then []
                           else value
      end
    end

    add_option "--[no-]rdoc",
               "Generate RDoc documentation for RubyGems" do |value, options|
      if value
        options[:document] << "rdoc"
      else
        options[:document].delete "rdoc"
      end

      options[:document].uniq!
    end

    add_option "--[no-]ri",
               "Generate RI documentation for RubyGems" do |value, options|
      if value
        options[:document] << "ri"
      else
        options[:document].delete "ri"
      end

      options[:document].uniq!
    end

    add_option "--[no-]regenerate-binstubs",
               "Regenerate gem binstubs" do |value, options|
      options[:regenerate_binstubs] = value
    end

    add_option "--[no-]regenerate-plugins",
               "Regenerate gem plugins" do |value, options|
      options[:regenerate_plugins] = value
    end

    add_option "-f", "--[no-]force",
               "Forcefully overwrite binstubs" do |value, options|
      options[:force] = value
    end

    add_option("-E", "--[no-]env-shebang",
               "Rewrite executables with a shebang",
               "of /usr/bin/env") do |value, options|
      options[:env_shebang] = value
    end

    @verbose = nil
  end

  def defaults_str # :nodoc:
    "--format-executable --document ri --regenerate-binstubs"
  end

  def description # :nodoc:
    <<-EOF
Installs RubyGems itself.

RubyGems installs RDoc for itself in GEM_HOME.  By default this is:
  #{Gem.dir}

If you prefer a different directory, set the GEM_HOME environment variable.

RubyGems will install the gem command with a name matching ruby's
prefix and suffix.  If ruby was installed as `ruby18`, gem will be
installed as `gem18`.

By default, this RubyGems will install gem as:
  #{Gem.default_exec_format % "gem"}
    EOF
  end

  module MakeDirs
    def mkdir_p(path, **opts)
      super
      (@mkdirs ||= []) << path
    end
  end

  def execute
    @verbose = Gem.configuration.really_verbose

    require "fileutils"
    if Gem.configuration.really_verbose
      extend FileUtils::Verbose
    else
      extend FileUtils
    end
    extend MakeDirs

    lib_dir, bin_dir = make_destination_dirs
    man_dir = generate_default_man_dir

    install_lib lib_dir

    install_executables bin_dir

    remove_old_bin_files bin_dir

    remove_old_lib_files lib_dir

    # Can be removed one we drop support for bundler 2.2.3 (the last version installing man files to man_dir)
    remove_old_man_files man_dir if man_dir && File.exist?(man_dir)

    install_default_bundler_gem bin_dir

    if mode = options[:dir_mode]
      @mkdirs.uniq!
      File.chmod(mode, @mkdirs)
    end

    say "RubyGems #{Gem::VERSION} installed"

    regenerate_binstubs(bin_dir) if options[:regenerate_binstubs]
    regenerate_plugins(bin_dir) if options[:regenerate_plugins]

    uninstall_old_gemcutter

    documentation_success = install_rdoc

    say
    if @verbose
      say "-" * 78
      say
    end

    if options[:previous_version].empty?
      options[:previous_version] = Gem::VERSION.sub(/[0-9]+$/, "0")
    end

    options[:previous_version] = Gem::Version.new(options[:previous_version])

    show_release_notes

    say
    say "-" * 78
    say

    say "RubyGems installed the following executables:"
    say bin_file_names.map {|name| "\t#{name}\n" }
    say

    unless bin_file_names.grep(/#{File::SEPARATOR}gem$/)
      say "If `gem` was installed by a previous RubyGems installation, you may need"
      say "to remove it by hand."
      say
    end

    if documentation_success
      if options[:document].include? "rdoc"
        say "Rdoc documentation was installed. You may now invoke:"
        say "  gem server"
        say "and then peruse beautifully formatted documentation for your gems"
        say "with your web browser."
        say "If you do not wish to install this documentation in the future, use the"
        say "--no-document flag, or set it as the default in your ~/.gemrc file. See"
        say "'gem help env' for details."
        say
      end

      if options[:document].include? "ri"
        say "Ruby Interactive (ri) documentation was installed. ri is kind of like man "
        say "pages for Ruby libraries. You may access it like this:"
        say "  ri Classname"
        say "  ri Classname.class_method"
        say "  ri Classname#instance_method"
        say "If you do not wish to install this documentation in the future, use the"
        say "--no-document flag, or set it as the default in your ~/.gemrc file. See"
        say "'gem help env' for details."
        say
      end
    end
  end

  def install_executables(bin_dir)
    prog_mode = options[:prog_mode] || 0o755

    executables = { "gem" => "exe" }
    executables.each do |tool, path|
      say "Installing #{tool} executable" if @verbose

      Dir.chdir path do
        bin_file = "gem"

        require "tmpdir"

        dest_file = target_bin_path(bin_dir, bin_file)
        bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"

        begin
          bin = File.readlines bin_file
          bin[0] = shebang

          File.open bin_tmp_file, "w" do |fp|
            fp.puts bin.join
          end

          install bin_tmp_file, dest_file, mode: prog_mode
          bin_file_names << dest_file
        ensure
          rm bin_tmp_file
        end

        next unless Gem.win_platform?

        begin
          bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"

          File.open bin_cmd_file, "w" do |file|
            file.puts <<-TEXT
  @ECHO OFF
  @"%~dp0#{File.basename(Gem.ruby).chomp('"')}" "%~dpn0" %*
  TEXT
          end

          install bin_cmd_file, "#{dest_file}.bat", mode: prog_mode
        ensure
          rm bin_cmd_file
        end
      end
    end
  end

  def shebang
    if options[:env_shebang]
      ruby_name = RbConfig::CONFIG["ruby_install_name"]
      @env_path ||= ENV_PATHS.find {|env_path| File.executable? env_path }
      "#!#{@env_path} #{ruby_name}\n"
    else
      "#!#{Gem.ruby}\n"
    end
  end

  def install_lib(lib_dir)
    libs = { "RubyGems" => "lib" }
    libs["Bundler"] = "bundler/lib"
    libs.each do |tool, path|
      say "Installing #{tool}" if @verbose

      lib_files = files_in path

      Dir.chdir path do
        install_file_list(lib_files, lib_dir)
      end
    end
  end

  def install_rdoc
    gem_doc_dir = File.join Gem.dir, "doc"
    rubygems_name = "rubygems-#{Gem::VERSION}"
    rubygems_doc_dir = File.join gem_doc_dir, rubygems_name

    begin
      Gem.ensure_gem_subdirectories Gem.dir
    rescue SystemCallError
      # ignore
    end

    if File.writable?(gem_doc_dir) &&
       (!File.exist?(rubygems_doc_dir) ||
        File.writable?(rubygems_doc_dir))
      say "Removing old RubyGems RDoc and ri" if @verbose
      Dir[File.join(Gem.dir, "doc", "rubygems-[0-9]*")].each do |dir|
        rm_rf dir
      end

      require_relative "../rdoc"

      return false unless defined?(Gem::RDoc)

      fake_spec = Gem::Specification.new "rubygems", Gem::VERSION
      def fake_spec.full_gem_path
        File.expand_path "../../..", __dir__
      end

      generate_ri   = options[:document].include? "ri"
      generate_rdoc = options[:document].include? "rdoc"

      rdoc = Gem::RDoc.new fake_spec, generate_rdoc, generate_ri
      rdoc.generate

      return true
    elsif @verbose
      say "Skipping RDoc generation, #{gem_doc_dir} not writable"
      say "Set the GEM_HOME environment variable if you want RDoc generated"
    end

    false
  end

  def install_default_bundler_gem(bin_dir)
    current_default_spec = Gem::Specification.default_stubs.find {|s| s.name == "bundler" }
    specs_dir = if current_default_spec && default_dir == Gem.default_dir
      all_specs_current_version = Gem::Specification.stubs.select {|s| s.full_name == current_default_spec.full_name }

      Gem::Specification.remove_spec current_default_spec
      loaded_from = current_default_spec.loaded_from
      File.delete(loaded_from)

      # Remove previous default gem executables if they were not shadowed by a regular gem
      FileUtils.rm_rf current_default_spec.full_gem_path if all_specs_current_version.size == 1

      File.dirname(loaded_from)
    else
      target_specs_dir = File.join(default_dir, "specifications", "default")
      mkdir_p target_specs_dir, mode: 0o755
      target_specs_dir
    end

    new_bundler_spec = Dir.chdir("bundler") { Gem::Specification.load("bundler.gemspec") }
    full_name = new_bundler_spec.full_name
    gemspec_path = "#{full_name}.gemspec"

    default_spec_path = File.join(specs_dir, gemspec_path)
    Gem.write_binary(default_spec_path, new_bundler_spec.to_ruby)

    bundler_spec = Gem::Specification.load(default_spec_path)

    # Remove gemspec that was same version of vendored bundler.
    normal_gemspec = File.join(default_dir, "specifications", gemspec_path)
    if File.file? normal_gemspec
      File.delete normal_gemspec
    end

    # Remove gem files that were same version of vendored bundler.
    if File.directory? bundler_spec.gems_dir
      Dir.entries(bundler_spec.gems_dir).
        select {|default_gem| File.basename(default_gem) == full_name }.
        each {|default_gem| rm_r File.join(bundler_spec.gems_dir, default_gem) }
    end

    require_relative "../installer"

    Dir.chdir("bundler") do
      built_gem = Gem::Package.build(new_bundler_spec)
      begin
        Gem::Installer.at(
          built_gem,
          env_shebang: options[:env_shebang],
          format_executable: options[:format_executable],
          force: options[:force],
          install_as_default: true,
          bin_dir: bin_dir,
          install_dir: default_dir,
          wrappers: true
        ).install
      ensure
        FileUtils.rm_f built_gem
      end
    end

    new_bundler_spec.executables.each {|executable| bin_file_names << target_bin_path(bin_dir, executable) }

    say "Bundler #{new_bundler_spec.version} installed"
  end

  def make_destination_dirs
    lib_dir, bin_dir = Gem.default_rubygems_dirs

    unless lib_dir
      lib_dir, bin_dir = generate_default_dirs
    end

    mkdir_p lib_dir, mode: 0o755
    mkdir_p bin_dir, mode: 0o755

    [lib_dir, bin_dir]
  end

  def generate_default_man_dir
    prefix = options[:prefix]

    if prefix.empty?
      man_dir = RbConfig::CONFIG["mandir"]
      return unless man_dir
    else
      man_dir = File.join prefix, "man"
    end

    prepend_destdir_if_present(man_dir)
  end

  def generate_default_dirs
    prefix = options[:prefix]
    site_or_vendor = options[:site_or_vendor]

    if prefix.empty?
      lib_dir = RbConfig::CONFIG[site_or_vendor]
      bin_dir = RbConfig::CONFIG["bindir"]
    else
      lib_dir = File.join prefix, "lib"
      bin_dir = File.join prefix, "bin"
    end

    [prepend_destdir_if_present(lib_dir), prepend_destdir_if_present(bin_dir)]
  end

  def files_in(dir)
    Dir.chdir dir do
      Dir.glob(File.join("**", "*"), File::FNM_DOTMATCH).
        select {|f| !File.directory?(f) }
    end
  end

  def remove_old_bin_files(bin_dir)
    old_bin_files = {
      "gem_mirror" => "gem mirror",
      "gem_server" => "gem server",
      "gemlock" => "gem lock",
      "gemri" => "ri",
      "gemwhich" => "gem which",
      "index_gem_repository.rb" => "gem generate_index",
    }

    old_bin_files.each do |old_bin_file, new_name|
      old_bin_path = File.join bin_dir, old_bin_file
      next unless File.exist? old_bin_path

      deprecation_message = "`#{old_bin_file}` has been deprecated. Use `#{new_name}` instead."

      File.open old_bin_path, "w" do |fp|
        fp.write <<-EOF
#!#{Gem.ruby}

abort "#{deprecation_message}"
    EOF
      end

      next unless Gem.win_platform?

      File.open "#{old_bin_path}.bat", "w" do |fp|
        fp.puts %(@ECHO.#{deprecation_message})
      end
    end
  end

  def remove_old_lib_files(lib_dir)
    lib_dirs = { File.join(lib_dir, "rubygems") => "lib/rubygems" }
    lib_dirs[File.join(lib_dir, "bundler")] = "bundler/lib/bundler"
    lib_dirs.each do |old_lib_dir, new_lib_dir|
      lib_files = files_in(new_lib_dir)

      old_lib_files = files_in(old_lib_dir)

      to_remove = old_lib_files - lib_files

      gauntlet_rubygems = File.join(lib_dir, "gauntlet_rubygems.rb")
      to_remove << gauntlet_rubygems if File.exist? gauntlet_rubygems

      to_remove.delete_if do |file|
        file.start_with? "defaults"
      end

      remove_file_list(to_remove, old_lib_dir)
    end
  end

  def remove_old_man_files(old_man_dir)
    old_man1_dir = "#{old_man_dir}/man1"

    if File.exist?(old_man1_dir)
      man1_to_remove = Dir.chdir(old_man1_dir) { Dir["bundle*.1{,.txt,.ronn}"] }

      remove_file_list(man1_to_remove, old_man1_dir)
    end

    old_man5_dir = "#{old_man_dir}/man5"

    if File.exist?(old_man5_dir)
      man5_to_remove = Dir.chdir(old_man5_dir) { Dir["gemfile.5{,.txt,.ronn}"] }

      remove_file_list(man5_to_remove, old_man5_dir)
    end
  end

  def show_release_notes
    release_notes = File.join Dir.pwd, "CHANGELOG.md"

    release_notes =
      if File.exist? release_notes
        history = File.read release_notes

        history.force_encoding Encoding::UTF_8

        text = history.split(HISTORY_HEADER)
        text.shift # correct an off-by-one generated by split
        version_lines = history.scan(HISTORY_HEADER)
        versions = history.scan(VERSION_MATCHER).flatten.map do |x|
          Gem::Version.new(x)
        end

        history_string = ""

        until versions.length == 0 ||
              versions.shift <= options[:previous_version] do
          history_string += version_lines.shift + text.shift
        end

        history_string
      else
        "Oh-no! Unable to find release notes!"
      end

    say release_notes
  end

  def uninstall_old_gemcutter
    require_relative "../uninstaller"

    ui = Gem::Uninstaller.new("gemcutter", all: true, ignore: true,
                                           version: "< 0.4")
    ui.uninstall
  rescue Gem::InstallError
  end

  def regenerate_binstubs(bindir)
    require_relative "pristine_command"
    say "Regenerating binstubs"

    args = %w[--all --only-executables --silent]
    args << "--bindir=#{bindir}"
    args << "--install-dir=#{default_dir}"

    if options[:env_shebang]
      args << "--env-shebang"
    end

    command = Gem::Commands::PristineCommand.new
    command.invoke(*args)
  end

  def regenerate_plugins(bindir)
    require_relative "pristine_command"
    say "Regenerating plugins"

    args = %w[--all --only-plugins --silent]
    args << "--bindir=#{bindir}"
    args << "--install-dir=#{default_dir}"

    command = Gem::Commands::PristineCommand.new
    command.invoke(*args)
  end

  private

  def default_dir
    prefix = options[:prefix]

    if prefix.empty?
      dir = Gem.default_dir
    else
      dir = prefix
    end

    prepend_destdir_if_present(dir)
  end

  def prepend_destdir_if_present(path)
    destdir = options[:destdir]
    return path if destdir.empty?

    File.join(options[:destdir], path.gsub(/^[a-zA-Z]:/, ""))
  end

  def install_file_list(files, dest_dir)
    files.each do |file|
      install_file file, dest_dir
    end
  end

  def install_file(file, dest_dir)
    dest_file = File.join dest_dir, file
    dest_dir = File.dirname dest_file
    unless File.directory? dest_dir
      mkdir_p dest_dir, mode: 0o755
    end

    install file, dest_file, mode: options[:data_mode] || 0o644
  end

  def remove_file_list(files, dir)
    Dir.chdir dir do
      files.each do |file|
        FileUtils.rm_f file

        warn "unable to remove old file #{file} please remove it by hand" if
          File.exist? file
      end
    end
  end

  def target_bin_path(bin_dir, bin_file)
    bin_file_formatted = if options[:format_executable]
      Gem.default_exec_format % bin_file
    else
      bin_file
    end
    File.join bin_dir, bin_file_formatted
  end

  def bin_file_names
    @bin_file_names ||= []
  end
end
PK%J[D��p
p
1share/rubygems/rubygems/commands/owner_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../local_remote_options"
require_relative "../gemcutter_utilities"
require_relative "../text"

class Gem::Commands::OwnerCommand < Gem::Command
  include Gem::Text
  include Gem::LocalRemoteOptions
  include Gem::GemcutterUtilities

  def description # :nodoc:
    <<-EOF
The owner command lets you add and remove owners of a gem on a push
server (the default is https://rubygems.org). Multiple owners can be
added or removed at the same time, if the flag is given multiple times.

The supported user identifiers are dependent on the push server.
For rubygems.org, both e-mail and handle are supported, even though the
user identifier field is called "email".

The owner of a gem has the permission to push new versions, yank existing
versions or edit the HTML page of the gem.  Be careful of who you give push
permission to.
    EOF
  end

  def arguments # :nodoc:
    "GEM       gem to manage owners for"
  end

  def usage # :nodoc:
    "#{program_name} GEM"
  end

  def initialize
    super "owner", "Manage gem owners of a gem on the push server"
    add_proxy_option
    add_key_option
    add_otp_option
    defaults.merge! add: [], remove: []

    add_option "-a", "--add NEW_OWNER", "Add an owner by user identifier" do |value, options|
      options[:add] << value
    end

    add_option "-r", "--remove OLD_OWNER", "Remove an owner by user identifier" do |value, options|
      options[:remove] << value
    end

    add_option "-h", "--host HOST",
               "Use another gemcutter-compatible host",
               "  (e.g. https://rubygems.org)" do |value, options|
      options[:host] = value
    end
  end

  def execute
    @host = options[:host]

    sign_in(scope: get_owner_scope)
    name = get_one_gem_name

    add_owners    name, options[:add]
    remove_owners name, options[:remove]
    show_owners   name
  end

  def show_owners(name)
    Gem.load_yaml

    response = rubygems_api_request :get, "api/v1/gems/#{name}/owners.yaml" do |request|
      request.add_field "Authorization", api_key
    end

    with_response response do |resp|
      owners = Gem::SafeYAML.load clean_text(resp.body)

      say "Owners for gem: #{name}"
      owners.each do |owner|
        say "- #{owner["email"] || owner["handle"] || owner["id"]}"
      end
    end
  end

  def add_owners(name, owners)
    manage_owners :post, name, owners
  end

  def remove_owners(name, owners)
    manage_owners :delete, name, owners
  end

  def manage_owners(method, name, owners)
    owners.each do |owner|
      response = send_owner_request(method, name, owner)
      action = method == :delete ? "Removing" : "Adding"

      with_response response, "#{action} #{owner}"
    rescue Gem::WebauthnVerificationError => e
      raise e
    rescue StandardError
      # ignore early exits to allow for completing the iteration of all owners
    end
  end

  private

  def send_owner_request(method, name, owner)
    rubygems_api_request method, "api/v1/gems/#{name}/owners", scope: get_owner_scope(method: method) do |request|
      request.set_form_data "email" => owner
      request.add_field "Authorization", api_key
    end
  end

  def get_owner_scope(method: nil)
    if method == :post || options.any? && options[:add].any?
      :add_owner
    elsif method == :delete || options.any? && options[:remove].any?
      :remove_owner
    end
  end
end
PK&J[bF葝�0share/rubygems/rubygems/commands/open_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../version_option"

class Gem::Commands::OpenCommand < Gem::Command
  include Gem::VersionOption

  def initialize
    super "open", "Open gem sources in editor"

    add_option("-e", "--editor COMMAND", String,
               "Prepends COMMAND to gem path. Could be used to specify editor.") do |command, options|
      options[:editor] = command || get_env_editor
    end
    add_option("-v", "--version VERSION", String,
               "Opens specific gem version") do |version|
      options[:version] = version
    end
  end

  def arguments # :nodoc:
    "GEMNAME     name of gem to open in editor"
  end

  def defaults_str # :nodoc:
    "-e #{get_env_editor}"
  end

  def description # :nodoc:
    <<-EOF
        The open command opens gem in editor and changes current path
        to gem's source directory.
        Editor command can be specified with -e option, otherwise rubygems
        will look for editor in $EDITOR, $VISUAL and $GEM_EDITOR variables.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [-e COMMAND] GEMNAME"
  end

  def get_env_editor
    ENV["GEM_EDITOR"] ||
      ENV["VISUAL"] ||
      ENV["EDITOR"] ||
      "vi"
  end

  def execute
    @version = options[:version] || Gem::Requirement.default
    @editor  = options[:editor] || get_env_editor

    found = open_gem(get_one_gem_name)

    terminate_interaction 1 unless found
  end

  def open_gem(name)
    spec = spec_for name

    return false unless spec

    if spec.default_gem?
      say "'#{name}' is a default gem and can't be opened."
      return false
    end

    open_editor(spec.full_gem_path)
  end

  def open_editor(path)
    system(*@editor.split(/\s+/) + [path], { chdir: path })
  end

  def spec_for(name)
    spec = Gem::Specification.find_all_by_name(name, @version).first

    return spec if spec

    say "Unable to find gem '#{name}'"
  end
end
PK&J[�	U1��3share/rubygems/rubygems/commands/signout_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

class Gem::Commands::SignoutCommand < Gem::Command
  def initialize
    super "signout", "Sign out from all the current sessions."
  end

  def description # :nodoc:
    "The `signout` command is used to sign out from all current sessions,"\
    " allowing you to sign in using a different set of credentials."
  end

  def usage # :nodoc:
    program_name
  end

  def execute
    credentials_path = Gem.configuration.credentials_path

    if !File.exist?(credentials_path)
      alert_error "You are not currently signed in."
    elsif !File.writable?(credentials_path)
      alert_error "File '#{Gem.configuration.credentials_path}' is read-only."\
                  " Please make sure it is writable."
    else
      Gem.configuration.unset_api_key!
      say "You have successfully signed out from all sessions."
    end
  end
end
PK&J[����2share/rubygems/rubygems/commands/server_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

unless defined? Gem::Commands::ServerCommand
  class Gem::Commands::ServerCommand < Gem::Command
    def initialize
      super("server", "Starts up a web server that hosts the RDoc (requires rubygems-server)")
      begin
        Gem::Specification.find_by_name("rubygems-server").activate
      rescue Gem::LoadError
        # no-op
      end
    end

    def description # :nodoc:
      <<-EOF
The server command has been moved to the rubygems-server gem.
      EOF
    end

    def execute
      alert_error "Install the rubygems-server gem for the server command"
    end
  end
end
PK&J[��4``4share/rubygems/rubygems/commands/outdated_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../local_remote_options"
require_relative "../spec_fetcher"
require_relative "../version_option"

class Gem::Commands::OutdatedCommand < Gem::Command
  include Gem::LocalRemoteOptions
  include Gem::VersionOption

  def initialize
    super "outdated", "Display all gems that need updates"

    add_local_remote_options
    add_platform_option
  end

  def description # :nodoc:
    <<-EOF
The outdated command lists gems you may wish to upgrade to a newer version.

You can check for dependency mismatches using the dependency command and
update the gems with the update or install commands.
    EOF
  end

  def execute
    Gem::Specification.outdated_and_latest_version.each do |spec, remote_version|
      say "#{spec.name} (#{spec.version} < #{remote_version})"
    end
  end
end
PK&J[�ؿ�d	d	0share/rubygems/rubygems/commands/yank_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../local_remote_options"
require_relative "../version_option"
require_relative "../gemcutter_utilities"

class Gem::Commands::YankCommand < Gem::Command
  include Gem::LocalRemoteOptions
  include Gem::VersionOption
  include Gem::GemcutterUtilities

  def description # :nodoc:
    <<-EOF
The yank command permanently removes a gem you pushed to a server.

Once you have pushed a gem several downloads will happen automatically
via the webhooks. If you accidentally pushed passwords or other sensitive
data you will need to change them immediately and yank your gem.
    EOF
  end

  def arguments # :nodoc:
    "GEM       name of gem"
  end

  def usage # :nodoc:
    "#{program_name} -v VERSION [-p PLATFORM] [--key KEY_NAME] [--host HOST] GEM"
  end

  def initialize
    super "yank", "Remove a pushed gem from the index"

    add_version_option("remove")
    add_platform_option("remove")
    add_otp_option

    add_option("--host HOST",
               "Yank from another gemcutter-compatible host",
               "  (e.g. https://rubygems.org)") do |value, options|
      options[:host] = value
    end

    add_key_option
    @host = nil
  end

  def execute
    @host = options[:host]

    sign_in @host, scope: get_yank_scope

    version   = get_version_from_requirements(options[:version])
    platform  = get_platform_from_requirements(options)

    if version
      yank_gem(version, platform)
    else
      say "A version argument is required: #{usage}"
      terminate_interaction
    end
  end

  def yank_gem(version, platform)
    say "Yanking gem from #{host}..."
    args = [:delete, version, platform, "api/v1/gems/yank"]
    response = yank_api_request(*args)

    say response.body
  end

  private

  def yank_api_request(method, version, platform, api)
    name = get_one_gem_name
    response = rubygems_api_request(method, api, host, scope: get_yank_scope) do |request|
      request.add_field("Authorization", api_key)

      data = {
        "gem_name" => name,
        "version" => version,
      }
      data["platform"] = platform if platform

      request.set_form_data data
    end
    response
  end

  def get_version_from_requirements(requirements)
    requirements.requirements.first[1].version
  rescue StandardError
    nil
  end

  def get_yank_scope
    :yank_rubygem
  end
end
PK&J[��Y���0share/rubygems/rubygems/commands/push_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../local_remote_options"
require_relative "../gemcutter_utilities"
require_relative "../package"

class Gem::Commands::PushCommand < Gem::Command
  include Gem::LocalRemoteOptions
  include Gem::GemcutterUtilities

  def description # :nodoc:
    <<-EOF
The push command uploads a gem to the push server (the default is
https://rubygems.org) and adds it to the index.

The gem can be removed from the index and deleted from the server using the yank
command.  For further discussion see the help for the yank command.

The push command will use ~/.gem/credentials to authenticate to a server, but you can use the RubyGems environment variable GEM_HOST_API_KEY to set the api key to authenticate.
    EOF
  end

  def arguments # :nodoc:
    "GEM       built gem to push up"
  end

  def usage # :nodoc:
    "#{program_name} GEM"
  end

  def initialize
    super "push", "Push a gem up to the gem server", host: host, attestations: []

    @user_defined_host = false

    add_proxy_option
    add_key_option
    add_otp_option

    add_option("--host HOST",
               "Push to another gemcutter-compatible host",
               "  (e.g. https://rubygems.org)") do |value, options|
      options[:host] = value
      @user_defined_host = true
    end

    add_option("--attestation FILE",
                "Push with sigstore attestations") do |value, options|
      options[:attestations] << value
    end

    @host = nil
  end

  def execute
    gem_name = get_one_gem_name
    default_gem_server, push_host = get_hosts_for(gem_name)

    @host = if @user_defined_host
      options[:host]
    elsif default_gem_server
      default_gem_server
    elsif push_host
      push_host
    else
      options[:host]
    end

    sign_in @host, scope: get_push_scope

    send_gem(gem_name)
  end

  def send_gem(name)
    args = [:post, "api/v1/gems"]

    _, push_host = get_hosts_for(name)

    @host ||= push_host

    # Always include @host, even if it's nil
    args += [@host, push_host]

    say "Pushing gem to #{@host || Gem.host}..."

    response = send_push_request(name, args)

    with_response response
  end

  private

  def send_push_request(name, args)
    rubygems_api_request(*args, scope: get_push_scope) do |request|
      body = Gem.read_binary name
      if options[:attestations].any?
        request.set_form([
          ["gem", body, { filename: name, content_type: "application/octet-stream" }],
          get_attestations_part,
        ], "multipart/form-data")
      else
        request.body = body
        request.add_field "Content-Type",   "application/octet-stream"
        request.add_field "Content-Length", request.body.size
      end
      request.add_field "Authorization", api_key
    end
  end

  def get_hosts_for(name)
    gem_metadata = Gem::Package.new(name).spec.metadata

    [
      gem_metadata["default_gem_server"],
      gem_metadata["allowed_push_host"],
    ]
  end

  def get_push_scope
    :push_rubygem
  end

  def get_attestations_part
    bundles = "[" + options[:attestations].map do |attestation|
      Gem.read_binary(attestation)
    end.join(",") + "]"
    [
      "attestations",
      bundles,
      { content_type: "application/json" },
    ]
  end
end
PK&J[�v�(�(0share/rubygems/rubygems/commands/help_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

class Gem::Commands::HelpCommand < Gem::Command
  # :stopdoc:
  EXAMPLES = <<-EOF
Some examples of 'gem' usage.

* Install 'rake', either from local directory or remote server:

    gem install rake

* Install 'rake', only from remote server:

    gem install rake --remote

* Install 'rake', but only version 0.3.1, even if dependencies
  are not met, and into a user-specific directory:

    gem install rake --version 0.3.1 --force --user-install

* List local gems whose name begins with 'D':

    gem list D

* List local and remote gems whose name contains 'log':

    gem search log --both

* List only remote gems whose name contains 'log':

    gem search log --remote

* Uninstall 'rake':

    gem uninstall rake

* Create a gem:

    See https://guides.rubygems.org/make-your-own-gem/

* See information about RubyGems:

    gem environment

* Update all gems on your system:

    gem update

* Update your local version of RubyGems

    gem update --system
  EOF

  GEM_DEPENDENCIES = <<-EOF
A gem dependencies file allows installation of a consistent set of gems across
multiple environments.  The RubyGems implementation is designed to be
compatible with Bundler's Gemfile format.  You can see additional
documentation on the format at:

  https://bundler.io

RubyGems automatically looks for these gem dependencies files:

* gem.deps.rb
* Gemfile
* Isolate

These files are looked up automatically using `gem install -g`, or you can
specify a custom file.

When the RUBYGEMS_GEMDEPS environment variable is set to a gem dependencies
file the gems from that file will be activated at startup time.  Set it to a
specific filename or to "-" to have RubyGems automatically discover the gem
dependencies file by walking up from the current directory.

You can also activate gem dependencies at program startup using
Gem.use_gemdeps.

NOTE: Enabling automatic discovery on multiuser systems can lead to execution
of arbitrary code when used from directories outside your control.

Gem Dependencies
================

Use #gem to declare which gems you directly depend upon:

  gem 'rake'

To depend on a specific set of versions:

  gem 'rake', '~> 10.3', '>= 10.3.2'

RubyGems will require the gem name when activating the gem using
the RUBYGEMS_GEMDEPS environment variable or Gem::use_gemdeps.  Use the
require: option to override this behavior if the gem does not have a file of
that name or you don't want to require those files:

  gem 'my_gem', require: 'other_file'

To prevent RubyGems from requiring any files use:

  gem 'my_gem', require: false

To load dependencies from a .gemspec file:

  gemspec

RubyGems looks for the first .gemspec file in the current directory.  To
override this use the name: option:

  gemspec name: 'specific_gem'

To look in a different directory use the path: option:

  gemspec name: 'specific_gem', path: 'gemspecs'

To depend on a gem unpacked into a local directory:

  gem 'modified_gem', path: 'vendor/modified_gem'

To depend on a gem from git:

  gem 'private_gem', git: 'git@my.company.example:private_gem.git'

To depend on a gem from github:

  gem 'private_gem', github: 'my_company/private_gem'

To depend on a gem from a github gist:

  gem 'bang', gist: '1232884'

Git, github and gist support the ref:, branch: and tag: options to specify a
commit reference or hash, branch or tag respectively to use for the gem.

Setting the submodules: option to true for git, github and gist dependencies
causes fetching of submodules when fetching the repository.

You can depend on multiple gems from a single repository with the git method:

  git 'https://github.com/rails/rails.git' do
    gem 'activesupport'
    gem 'activerecord'
  end

Gem Sources
===========

RubyGems uses the default sources for regular `gem install` for gem
dependencies files.  Unlike bundler, you do need to specify a source.

You can override the sources used for downloading gems with:

  source 'https://gem_server.example'

You may specify multiple sources.  Unlike bundler the prepend: option is not
supported. Sources are used in-order, to prepend a source place it at the
front of the list.

Gem Platform
============

You can restrict gem dependencies to specific platforms with the #platform
and #platforms methods:

  platform :ruby_21 do
    gem 'debugger'
  end

See the bundler Gemfile manual page for a list of platforms supported in a gem
dependencies file.:

  https://bundler.io/v2.5/man/gemfile.5.html

Ruby Version and Engine Dependency
==================================

You can specify the version, engine and engine version of ruby to use with
your gem dependencies file.  If you are not running the specified version
RubyGems will raise an exception.

To depend on a specific version of ruby:

  ruby '2.1.2'

To depend on a specific ruby engine:

  ruby '1.9.3', engine: 'jruby'

To depend on a specific ruby engine version:

  ruby '1.9.3', engine: 'jruby', engine_version: '1.7.11'

Grouping Dependencies
=====================

Gem dependencies may be placed in groups that can be excluded from install.
Dependencies required for development or testing of your code may be excluded
when installed in a production environment.

A #gem dependency may be placed in a group using the group: option:

  gem 'minitest', group: :test

To install dependencies from a gemfile without specific groups use the
`--without` option for `gem install -g`:

  $ gem install -g --without test

The group: option also accepts multiple groups if the gem fits in multiple
categories.

Multiple groups may be excluded during install by comma-separating the groups for `--without` or by specifying `--without` multiple times.

The #group method can also be used to place gems in groups:

  group :test do
    gem 'minitest'
    gem 'minitest-emoji'
  end

The #group method allows multiple groups.

The #gemspec development dependencies are placed in the :development group by
default.  This may be overridden with the :development_group option:

  gemspec development_group: :other

  EOF

  PLATFORMS = <<-'EOF'
RubyGems platforms are composed of three parts, a CPU, an OS, and a
version.  These values are taken from values in rbconfig.rb.  You can view
your current platform by running `gem environment`.

RubyGems matches platforms as follows:

  * The CPU must match exactly unless one of the platforms has
    "universal" as the CPU or the local CPU starts with "arm" and the gem's
    CPU is exactly "arm" (for gems that support generic ARM architecture).
  * The OS must match exactly.
  * The versions must match exactly unless one of the versions is nil.

For commands that install, uninstall and list gems, you can override what
RubyGems thinks your platform is with the --platform option.  The platform
you pass must match "#{cpu}-#{os}" or "#{cpu}-#{os}-#{version}".  On mswin
platforms, the version is the compiler version, not the OS version.  (Ruby
compiled with VC6 uses "60" as the compiler version, VC8 uses "80".)

For the ARM architecture, gems with a platform of "arm-linux" should run on a
reasonable set of ARM CPUs and not depend on instructions present on a limited
subset of the architecture.  For example, the binary should run on platforms
armv5, armv6hf, armv6l, armv7, etc.  If you use the "arm-linux" platform
please test your gem on a variety of ARM hardware before release to ensure it
functions correctly.

Example platforms:

  x86-freebsd        # Any FreeBSD version on an x86 CPU
  universal-darwin-8 # Darwin 8 only gems that run on any CPU
  x86-mswin32-80     # Windows gems compiled with VC8
  armv7-linux        # Gem complied for an ARMv7 CPU running linux
  arm-linux          # Gem compiled for any ARM CPU running linux

When building platform gems, set the platform in the gem specification to
Gem::Platform::CURRENT.  This will correctly mark the gem with your ruby's
platform.
  EOF

  # NOTE: when updating also update Gem::Command::HELP

  SUBCOMMANDS = [
    ["commands",         :show_commands],
    ["options",          Gem::Command::HELP],
    ["examples",         EXAMPLES],
    ["gem_dependencies", GEM_DEPENDENCIES],
    ["platforms",        PLATFORMS],
  ].freeze
  # :startdoc:

  def initialize
    super "help", "Provide help on the 'gem' command"

    @command_manager = Gem::CommandManager.instance
  end

  def usage # :nodoc:
    "#{program_name} ARGUMENT"
  end

  def execute
    arg = options[:args][0]

    _, help = SUBCOMMANDS.find do |command,|
      begins? command, arg
    end

    if help
      if Symbol === help
        send help
      else
        say help
      end
      return
    end

    if options[:help]
      show_help

    elsif arg
      show_command_help arg

    else
      say Gem::Command::HELP
    end
  end

  def show_commands # :nodoc:
    out = []
    out << "GEM commands are:"
    out << nil

    margin_width = 4

    desc_width = @command_manager.command_names.map(&:size).max + 4

    summary_width = 80 - margin_width - desc_width
    wrap_indent = " " * (margin_width + desc_width)
    format = "#{" " * margin_width}%-#{desc_width}s%s"

    @command_manager.command_names.each do |cmd_name|
      command = @command_manager[cmd_name]

      next if command&.deprecated?

      summary =
        if command
          command.summary
        else
          "[No command found for #{cmd_name}]"
        end

      summary = wrap(summary, summary_width).split "\n"
      out << format(format, cmd_name, summary.shift)
      until summary.empty? do
        out << "#{wrap_indent}#{summary.shift}"
      end
    end

    out << nil
    out << "For help on a particular command, use 'gem help COMMAND'."
    out << nil
    out << "Commands may be abbreviated, so long as they are unambiguous."
    out << "e.g. 'gem i rake' is short for 'gem install rake'."

    say out.join("\n")
  end

  def show_command_help(command_name) # :nodoc:
    command_name = command_name.downcase

    possibilities = @command_manager.find_command_possibilities command_name

    if possibilities.size == 1
      command = @command_manager[possibilities.first]
      command.invoke("--help")
    elsif possibilities.size > 1
      alert_warning "Ambiguous command #{command_name} (#{possibilities.join(", ")})"
    else
      alert_warning "Unknown command #{command_name}. Try: gem help commands"
    end
  end
end
PK&J[�Z�!!3share/rubygems/rubygems/commands/rebuild_command.rbnu�[���# frozen_string_literal: true

require "date"
require "digest"
require "fileutils"
require "tmpdir"
require_relative "../gemspec_helpers"
require_relative "../package"

class Gem::Commands::RebuildCommand < Gem::Command
  include Gem::GemspecHelpers

  def initialize
    super "rebuild", "Attempt to reproduce a build of a gem."

    add_option "--diff", "If the files don't match, compare them using diffoscope." do |_value, options|
      options[:diff] = true
    end

    add_option "--force", "Skip validation of the spec." do |_value, options|
      options[:force] = true
    end

    add_option "--strict", "Consider warnings as errors when validating the spec." do |_value, options|
      options[:strict] = true
    end

    add_option "--source GEM_SOURCE", "Specify the source to download the gem from." do |value, options|
      options[:source] = value
    end

    add_option "--original GEM_FILE", "Specify a local file to compare against (instead of downloading it)." do |value, options|
      options[:original_gem_file] = value
    end

    add_option "--gemspec GEMSPEC_FILE", "Specify the name of the gemspec file." do |value, options|
      options[:gemspec_file] = value
    end

    add_option "-C PATH", "Run as if gem build was started in <PATH> instead of the current working directory." do |value, options|
      options[:build_path] = value
    end
  end

  def arguments # :nodoc:
    "GEM_NAME      gem name on gem server\n" \
    "GEM_VERSION   gem version you are attempting to rebuild"
  end

  def description # :nodoc:
    <<-EOF
The rebuild command allows you to (attempt to) reproduce a build of a gem
from a ruby gemspec.

This command assumes the gemspec can be built with the `gem build` command.
If you use any of `gem build`, `rake build`, or`rake release` in the
build/release process for a gem, it is a potential candidate.

You will need to match the RubyGems version used, since this is included in
the Gem metadata.

If the gem includes lockfiles (e.g. Gemfile.lock) and similar, it will
require more effort to reproduce a build. For example, it might require
more precisely matched versions of Ruby and/or Bundler to be used.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEM_NAME GEM_VERSION"
  end

  def execute
    gem_name, gem_version = get_gem_name_and_version

    old_dir, new_dir = prep_dirs

    gem_filename = "#{gem_name}-#{gem_version}.gem"
    old_file = File.join(old_dir, gem_filename)
    new_file = File.join(new_dir, gem_filename)

    if options[:original_gem_file]
      FileUtils.copy_file(options[:original_gem_file], old_file)
    else
      download_gem(gem_name, gem_version, old_file)
    end

    rg_version = rubygems_version(old_file)
    unless rg_version == Gem::VERSION
      alert_error <<-EOF
You need to use the same RubyGems version #{gem_name} v#{gem_version} was built with.

#{gem_name} v#{gem_version} was built using RubyGems v#{rg_version}.
Gem files include the version of RubyGems used to build them.
This means in order to reproduce #{gem_filename}, you must also use RubyGems v#{rg_version}.

You're using RubyGems v#{Gem::VERSION}.

Please install RubyGems v#{rg_version} and try again.
      EOF
      terminate_interaction 1
    end

    source_date_epoch = get_timestamp(old_file).to_s

    if build_path = options[:build_path]
      Dir.chdir(build_path) { build_gem(gem_name, source_date_epoch, new_file) }
    else
      build_gem(gem_name, source_date_epoch, new_file)
    end

    compare(source_date_epoch, old_file, new_file)
  end

  private

  def sha256(file)
    Digest::SHA256.hexdigest(Gem.read_binary(file))
  end

  def get_timestamp(file)
    mtime = nil
    File.open(file, Gem.binary_mode) do |f|
      Gem::Package::TarReader.new(f) do |tar|
        mtime = tar.seek("metadata.gz") {|tf| tf.header.mtime }
      end
    end

    mtime
  end

  def compare(source_date_epoch, old_file, new_file)
    date = Time.at(source_date_epoch.to_i).strftime("%F %T %Z")

    old_hash = sha256(old_file)
    new_hash = sha256(new_file)

    say
    say "Built at: #{date} (#{source_date_epoch})"
    say "Original build saved to:   #{old_file}"
    say "Reproduced build saved to: #{new_file}"
    say "Working directory: #{options[:build_path] || Dir.pwd}"
    say
    say "Hash comparison:"
    say "  #{old_hash}\t#{old_file}"
    say "  #{new_hash}\t#{new_file}"
    say

    if old_hash == new_hash
      say "SUCCESS - original and rebuild hashes matched"
    else
      say "FAILURE - original and rebuild hashes did not match"
      say

      if options[:diff]
        if system("diffoscope", old_file, new_file).nil?
          alert_error "error: could not find `diffoscope` executable"
        end
      else
        say "Pass --diff for more details (requires diffoscope to be installed)."
      end

      terminate_interaction 1
    end
  end

  def prep_dirs
    rebuild_dir = Dir.mktmpdir("gem_rebuild")
    old_dir = File.join(rebuild_dir, "old")
    new_dir = File.join(rebuild_dir, "new")

    FileUtils.mkdir_p(old_dir)
    FileUtils.mkdir_p(new_dir)

    [old_dir, new_dir]
  end

  def get_gem_name_and_version
    args = options[:args] || []
    if args.length == 2
      gem_name, gem_version = args
    elsif args.length > 2
      raise Gem::CommandLineError, "Too many arguments"
    else
      raise Gem::CommandLineError, "Expected GEM_NAME and GEM_VERSION arguments (gem rebuild GEM_NAME GEM_VERSION)"
    end

    [gem_name, gem_version]
  end

  def build_gem(gem_name, source_date_epoch, output_file)
    gemspec = options[:gemspec_file] || find_gemspec("#{gem_name}.gemspec")

    if gemspec
      build_package(gemspec, source_date_epoch, output_file)
    else
      alert_error error_message(gem_name)
      terminate_interaction(1)
    end
  end

  def build_package(gemspec, source_date_epoch, output_file)
    with_source_date_epoch(source_date_epoch) do
      spec = Gem::Specification.load(gemspec)
      if spec
        Gem::Package.build(
          spec,
          options[:force],
          options[:strict],
          output_file
        )
      else
        alert_error "Error loading gemspec. Aborting."
        terminate_interaction 1
      end
    end
  end

  def with_source_date_epoch(source_date_epoch)
    old_sde = ENV["SOURCE_DATE_EPOCH"]
    ENV["SOURCE_DATE_EPOCH"] = source_date_epoch.to_s

    yield
  ensure
    ENV["SOURCE_DATE_EPOCH"] = old_sde
  end

  def error_message(gem_name)
    if gem_name
      "Couldn't find a gemspec file matching '#{gem_name}' in #{Dir.pwd}"
    else
      "Couldn't find a gemspec file in #{Dir.pwd}"
    end
  end

  def download_gem(gem_name, gem_version, old_file)
    # This code was based loosely off the `gem fetch` command.
    version = "= #{gem_version}"
    dep = Gem::Dependency.new gem_name, version

    specs_and_sources, errors =
      Gem::SpecFetcher.fetcher.spec_for_dependency dep

    # There should never be more than one item in specs_and_sources,
    # since we search for an exact version.
    spec, source = specs_and_sources[0]

    if spec.nil?
      show_lookup_failure gem_name, version, errors, options[:domain]
      terminate_interaction 1
    end

    download_path = source.download spec

    FileUtils.move(download_path, old_file)

    say "Downloaded #{gem_name} version #{gem_version} as #{old_file}."
  end

  def rubygems_version(gem_file)
    Gem::Package.new(gem_file).spec.rubygems_version
  end
end
PK&J[�V�-	-	1share/rubygems/rubygems/commands/check_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../version_option"
require_relative "../validator"
require_relative "../doctor"

class Gem::Commands::CheckCommand < Gem::Command
  include Gem::VersionOption

  def initialize
    super "check", "Check a gem repository for added or missing files",
          alien: true, doctor: false, dry_run: false, gems: true

    add_option("-a", "--[no-]alien",
               'Report "unmanaged" or rogue files in the',
               "gem repository") do |value, options|
      options[:alien] = value
    end

    add_option("--[no-]doctor",
               "Clean up uninstalled gems and broken",
               "specifications") do |value, options|
      options[:doctor] = value
    end

    add_option("--[no-]dry-run",
               "Do not remove files, only report what",
               "would be removed") do |value, options|
      options[:dry_run] = value
    end

    add_option("--[no-]gems",
               "Check installed gems for problems") do |value, options|
      options[:gems] = value
    end

    add_version_option "check"
  end

  def check_gems
    say "Checking gems..."
    say
    gems = begin
             get_all_gem_names
           rescue StandardError
             []
           end

    Gem::Validator.new.alien(gems).sort.each do |key, val|
      if val.empty?
        say "#{key} is error-free" if Gem.configuration.verbose
      else
        say "#{key} has #{val.size} problems"
        val.each do |error_entry|
          say "  #{error_entry.path}:"
          say "    #{error_entry.problem}"
        end
      end
      say
    end
  end

  def doctor
    say "Checking for files from uninstalled gems..."
    say

    Gem.path.each do |gem_repo|
      doctor = Gem::Doctor.new gem_repo, options[:dry_run]
      doctor.doctor
    end
  end

  def execute
    check_gems if options[:gems]
    doctor if options[:doctor]
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to check"
  end

  def defaults_str # :nodoc:
    "--gems --alien"
  end

  def description # :nodoc:
    <<-EOF
The check command can list and repair problems with installed gems and
specifications and will clean up gems that have been partially uninstalled.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [OPTIONS] [GEMNAME ...]"
  end
end
PK&J[�A��
�
0share/rubygems/rubygems/commands/lock_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

class Gem::Commands::LockCommand < Gem::Command
  def initialize
    super "lock", "Generate a lockdown list of gems",
          strict: false

    add_option "-s", "--[no-]strict",
               "fail if unable to satisfy a dependency" do |strict, options|
      options[:strict] = strict
    end
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to lock\nVERSION       version of gem to lock"
  end

  def defaults_str # :nodoc:
    "--no-strict"
  end

  def description # :nodoc:
    <<-EOF
The lock command will generate a list of +gem+ statements that will lock down
the versions for the gem given in the command line.  It will specify exact
versions in the requirements list to ensure that the gems loaded will always
be consistent.  A full recursive search of all effected gems will be
generated.

Example:

  gem lock rails-1.0.0 > lockdown.rb

will produce in lockdown.rb:

  require "rubygems"
  gem 'rails', '= 1.0.0'
  gem 'rake', '= 0.7.0.1'
  gem 'activesupport', '= 1.2.5'
  gem 'activerecord', '= 1.13.2'
  gem 'actionpack', '= 1.11.2'
  gem 'actionmailer', '= 1.1.5'
  gem 'actionwebservice', '= 1.0.0'

Just load lockdown.rb from your application to ensure that the current
versions are loaded.  Make sure that lockdown.rb is loaded *before* any
other require statements.

Notice that rails 1.0.0 only requires that rake 0.6.2 or better be used.
Rake-0.7.0.1 is the most recent version installed that satisfies that, so we
lock it down to the exact version.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEMNAME-VERSION [GEMNAME-VERSION ...]"
  end

  def complain(message)
    if options[:strict]
      raise Gem::Exception, message
    else
      say "# #{message}"
    end
  end

  def execute
    say "require 'rubygems'"

    locked = {}

    pending = options[:args]

    until pending.empty? do
      full_name = pending.shift

      spec = Gem::Specification.load spec_path(full_name)

      if spec.nil?
        complain "Could not find gem #{full_name}, try using the full name"
        next
      end

      say "gem '#{spec.name}', '= #{spec.version}'" unless locked[spec.name]
      locked[spec.name] = true

      spec.runtime_dependencies.each do |dep|
        next if locked[dep.name]
        candidates = dep.matching_specs

        if candidates.empty?
          complain "Unable to satisfy '#{dep}' from currently installed gems"
        else
          pending << candidates.last.full_name
        end
      end
    end
  end

  def spec_path(gem_full_name)
    gemspecs = Gem.path.map do |path|
      File.join path, "specifications", "#{gem_full_name}.gemspec"
    end

    gemspecs.find {|path| File.exist? path }
  end
end
PK&J[��r�2!2!2share/rubygems/rubygems/commands/update_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../command_manager"
require_relative "../dependency_installer"
require_relative "../install_update_options"
require_relative "../local_remote_options"
require_relative "../spec_fetcher"
require_relative "../version_option"
require_relative "../install_message" # must come before rdoc for messaging
require_relative "../rdoc"

class Gem::Commands::UpdateCommand < Gem::Command
  include Gem::InstallUpdateOptions
  include Gem::LocalRemoteOptions
  include Gem::VersionOption

  attr_reader :installer # :nodoc:

  attr_reader :updated # :nodoc:

  def initialize
    options = {
      force: false,
    }

    options.merge!(install_update_options)

    super "update", "Update installed gems to the latest version", options

    add_install_update_options

    Gem::OptionParser.accept Gem::Version do |value|
      Gem::Version.new value

      value
    end

    add_option("--system [VERSION]", Gem::Version,
               "Update the RubyGems system software") do |value, opts|
      value ||= true

      opts[:system] = value
    end

    add_local_remote_options
    add_platform_option
    add_prerelease_option "as update targets"

    @updated   = []
    @installer = nil
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to update"
  end

  def defaults_str # :nodoc:
    "--no-force --install-dir #{Gem.dir}\n" +
      install_update_defaults_str
  end

  def description # :nodoc:
    <<-EOF
The update command will update your gems to the latest version.

The update command does not remove the previous version. Use the cleanup
command to remove old versions.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEMNAME [GEMNAME ...]"
  end

  def check_latest_rubygems(version) # :nodoc:
    if Gem.rubygems_version == version
      say "Latest version already installed. Done."
      terminate_interaction
    end
  end

  def check_oldest_rubygems(version) # :nodoc:
    if oldest_supported_version > version
      alert_error "rubygems #{version} is not supported on #{RUBY_VERSION}. The oldest version supported by this ruby is #{oldest_supported_version}"
      terminate_interaction 1
    end
  end

  def check_update_arguments # :nodoc:
    unless options[:args].empty?
      alert_error "Gem names are not allowed with the --system option"
      terminate_interaction 1
    end
  end

  def execute
    if options[:system]
      update_rubygems
      return
    end

    gems_to_update = which_to_update(
      highest_installed_gems,
      options[:args].uniq
    )

    if options[:explain]
      say "Gems to update:"

      gems_to_update.each do |name_tuple|
        say "  #{name_tuple.full_name}"
      end

      return
    end

    say "Updating installed gems"

    updated = update_gems gems_to_update

    installed_names = highest_installed_gems.keys
    updated_names = updated.map(&:name)
    not_updated_names = options[:args].uniq - updated_names
    not_installed_names = not_updated_names - installed_names
    up_to_date_names = not_updated_names - not_installed_names

    if updated.empty?
      say "Nothing to update"
    else
      say "Gems updated: #{updated_names.join(" ")}"
    end
    say "Gems already up-to-date: #{up_to_date_names.join(" ")}" unless up_to_date_names.empty?
    say "Gems not currently installed: #{not_installed_names.join(" ")}" unless not_installed_names.empty?
  end

  def fetch_remote_gems(spec) # :nodoc:
    dependency = Gem::Dependency.new spec.name, "> #{spec.version}"
    dependency.prerelease = options[:prerelease]

    fetcher = Gem::SpecFetcher.fetcher

    spec_tuples, errors = fetcher.search_for_dependency dependency

    error = errors.find {|e| e.respond_to? :exception }

    raise error if error

    spec_tuples
  end

  def highest_installed_gems # :nodoc:
    hig = {} # highest installed gems

    # Get only gem specifications installed as --user-install
    Gem::Specification.dirs = Gem.user_dir if options[:user_install]

    Gem::Specification.each do |spec|
      if hig[spec.name].nil? || hig[spec.name].version < spec.version
        hig[spec.name] = spec
      end
    end

    hig
  end

  def highest_remote_name_tuple(spec) # :nodoc:
    spec_tuples = fetch_remote_gems spec

    highest_remote_gem = spec_tuples.max
    return unless highest_remote_gem

    highest_remote_gem.first
  end

  def install_rubygems(spec) # :nodoc:
    args = update_rubygems_arguments
    version = spec.version

    update_dir = File.join spec.base_dir, "gems", "rubygems-update-#{version}"

    Dir.chdir update_dir do
      say "Installing RubyGems #{version}" unless options[:silent]

      installed = preparing_gem_layout_for(version) do
        system Gem.ruby, "--disable-gems", "setup.rb", *args
      end

      unless options[:silent]
        say "RubyGems system software updated" if installed
      end
    end
  end

  def preparing_gem_layout_for(version)
    if Gem::Version.new(version) >= Gem::Version.new("3.2.a")
      yield
    else
      require "tmpdir"
      Dir.mktmpdir("gem_update") do |tmpdir|
        FileUtils.mv Gem.plugindir, tmpdir

        status = yield

        unless status
          FileUtils.mv File.join(tmpdir, "plugins"), Gem.plugindir
        end

        status
      end
    end
  end

  def rubygems_target_version
    version = options[:system]
    update_latest = version == true

    unless update_latest
      version     = Gem::Version.new     version
      requirement = Gem::Requirement.new version

      return version, requirement
    end

    version     = Gem::Version.new     Gem::VERSION
    requirement = Gem::Requirement.new ">= #{Gem::VERSION}"

    rubygems_update         = Gem::Specification.new
    rubygems_update.name    = "rubygems-update"
    rubygems_update.version = version

    highest_remote_tup = highest_remote_name_tuple(rubygems_update)
    target = highest_remote_tup ? highest_remote_tup.version : version

    [target, requirement]
  end

  def update_gem(name, version = Gem::Requirement.default)
    return if @updated.any? {|spec| spec.name == name }

    update_options = options.dup
    update_options[:prerelease] = version.prerelease?

    @installer = Gem::DependencyInstaller.new update_options

    say "Updating #{name}" unless options[:system]
    begin
      @installer.install name, Gem::Requirement.new(version)
    rescue Gem::InstallError, Gem::DependencyError => e
      alert_error "Error installing #{name}:\n\t#{e.message}"
    end

    @installer.installed_gems.each do |spec|
      @updated << spec
    end
  end

  def update_gems(gems_to_update)
    gems_to_update.uniq.sort.each do |name_tuple|
      update_gem name_tuple.name, name_tuple.version
    end

    @updated
  end

  ##
  # Update RubyGems software to the latest version.

  def update_rubygems
    if Gem.disable_system_update_message
      alert_error Gem.disable_system_update_message
      terminate_interaction 1
    end

    check_update_arguments

    version, requirement = rubygems_target_version

    check_latest_rubygems version

    check_oldest_rubygems version

    installed_gems = Gem::Specification.find_all_by_name "rubygems-update", requirement
    installed_gems = update_gem("rubygems-update", requirement) if installed_gems.empty? || installed_gems.first.version != version
    return if installed_gems.empty?

    install_rubygems installed_gems.first
  end

  def update_rubygems_arguments # :nodoc:
    args = []
    args << "--silent" if options[:silent]
    args << "--prefix" << Gem.prefix if Gem.prefix
    args << "--no-document" unless options[:document].include?("rdoc") || options[:document].include?("ri")
    args << "--no-format-executable" if options[:no_format_executable]
    args << "--previous-version" << Gem::VERSION
    args
  end

  def which_to_update(highest_installed_gems, gem_names)
    result = []

    highest_installed_gems.each do |_l_name, l_spec|
      next if !gem_names.empty? &&
              gem_names.none? {|name| name == l_spec.name }

      highest_remote_tup = highest_remote_name_tuple l_spec
      next unless highest_remote_tup

      result << highest_remote_tup
    end

    result
  end

  private

  #
  # Oldest version we support downgrading to. This is the version that
  # originally ships with the oldest supported patch version of ruby.
  #
  def oldest_supported_version
    @oldest_supported_version ||=
      Gem::Version.new("3.3.3")
  end
end
PK&J[
6}�VV6share/rubygems/rubygems/commands/dependency_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../local_remote_options"
require_relative "../version_option"

class Gem::Commands::DependencyCommand < Gem::Command
  include Gem::LocalRemoteOptions
  include Gem::VersionOption

  def initialize
    super "dependency",
          "Show the dependencies of an installed gem",
          version: Gem::Requirement.default, domain: :local

    add_version_option
    add_platform_option
    add_prerelease_option

    add_option("-R", "--[no-]reverse-dependencies",
               "Include reverse dependencies in the output") do |value, options|
      options[:reverse_dependencies] = value
    end

    add_option("-p", "--pipe",
               "Pipe Format (name --version ver)") do |value, options|
      options[:pipe_format] = value
    end

    add_local_remote_options
  end

  def arguments # :nodoc:
    "REGEXP        show dependencies for gems whose names start with REGEXP"
  end

  def defaults_str # :nodoc:
    "--local --version '#{Gem::Requirement.default}' --no-reverse-dependencies"
  end

  def description # :nodoc:
    <<-EOF
The dependency commands lists which other gems a given gem depends on.  For
local gems only the reverse dependencies can be shown (which gems depend on
the named gem).

The dependency list can be displayed in a format suitable for piping for
use with other commands.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} REGEXP"
  end

  def fetch_remote_specs(name, requirement, prerelease) # :nodoc:
    fetcher = Gem::SpecFetcher.fetcher

    specs_type = prerelease ? :complete : :released

    ss = if name.nil?
      fetcher.detect(specs_type) { true }
    else
      fetcher.detect(specs_type) do |name_tuple|
        name === name_tuple.name && requirement.satisfied_by?(name_tuple.version)
      end
    end

    ss.map {|tuple, source| source.fetch_spec(tuple) }
  end

  def fetch_specs(name_pattern, requirement, prerelease) # :nodoc:
    specs = []

    if local?
      specs.concat Gem::Specification.stubs.find_all {|spec|
        name_matches = name_pattern ? name_pattern =~ spec.name : true
        version_matches = requirement.satisfied_by?(spec.version)

        name_matches && version_matches
      }.map(&:to_spec)
    end

    specs.concat fetch_remote_specs name_pattern, requirement, prerelease if remote?

    ensure_specs specs

    specs.uniq.sort
  end

  def display_pipe(specs) # :nodoc:
    specs.each do |spec|
      next if spec.dependencies.empty?
      spec.dependencies.sort_by(&:name).each do |dep|
        say "#{dep.name} --version '#{dep.requirement}'"
      end
    end
  end

  def display_readable(specs, reverse) # :nodoc:
    response = String.new

    specs.each do |spec|
      response << print_dependencies(spec)
      unless reverse[spec.full_name].empty?
        response << "  Used by\n"
        reverse[spec.full_name].each do |sp, dep|
          response << "    #{sp} (#{dep})\n"
        end
      end
      response << "\n"
    end

    say response
  end

  def execute
    ensure_local_only_reverse_dependencies

    pattern = name_pattern options[:args]
    requirement = Gem::Requirement.new options[:version]

    specs = fetch_specs pattern, requirement, options[:prerelease]

    reverse = reverse_dependencies specs

    if options[:pipe_format]
      display_pipe specs
    else
      display_readable specs, reverse
    end
  end

  def ensure_local_only_reverse_dependencies # :nodoc:
    if options[:reverse_dependencies] && remote? && !local?
      alert_error "Only reverse dependencies for local gems are supported."
      terminate_interaction 1
    end
  end

  def ensure_specs(specs) # :nodoc:
    return unless specs.empty?

    patterns = options[:args].join ","
    say "No gems found matching #{patterns} (#{options[:version]})" if
      Gem.configuration.verbose

    terminate_interaction 1
  end

  def print_dependencies(spec, level = 0) # :nodoc:
    response = String.new
    response << "  " * level + "Gem #{spec.full_name}\n"
    unless spec.dependencies.empty?
      spec.dependencies.sort_by(&:name).each do |dep|
        response << "  " * level + "  #{dep}\n"
      end
    end
    response
  end

  def reverse_dependencies(specs) # :nodoc:
    reverse = Hash.new {|h, k| h[k] = [] }

    return reverse unless options[:reverse_dependencies]

    specs.each do |spec|
      reverse[spec.full_name] = find_reverse_dependencies spec
    end

    reverse
  end

  ##
  # Returns an Array of [specification, dep] that are satisfied by +spec+.

  def find_reverse_dependencies(spec) # :nodoc:
    result = []

    Gem::Specification.each do |sp|
      sp.dependencies.each do |dep|
        dep = Gem::Dependency.new(*dep) unless Gem::Dependency === dep

        if spec.name == dep.name &&
           dep.requirement.satisfied_by?(spec.version)
          result << [sp.full_name, dep]
        end
      end
    end

    result
  end

  private

  def name_pattern(args)
    return if args.empty?

    if args.length == 1 && args.first =~ /\A(.*)(i)?\z/m
      flags = $2 ? Regexp::IGNORECASE : nil
      Regexp.new $1, flags
    else
      /\A#{Regexp.union(*args)}/
    end
  end
end
PK&J[ZAQ
��2share/rubygems/rubygems/commands/search_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../query_utils"

class Gem::Commands::SearchCommand < Gem::Command
  include Gem::QueryUtils

  def initialize
    super "search", "Display remote gems whose name matches REGEXP",
         domain: :remote, details: false, versions: true,
         installed: nil, version: Gem::Requirement.default

    add_query_options
  end

  def arguments # :nodoc:
    "REGEXP        regexp to search for in gem name"
  end

  def defaults_str # :nodoc:
    "--remote --no-details"
  end

  def description # :nodoc:
    <<-EOF
The search command displays remote gems whose name matches the given
regexp.

The --details option displays additional details from the gem but will
take a little longer to complete as it must download the information
individually from the index.

To list local gems use the list command.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [REGEXP]"
  end
end
PK&J[9�:4��1share/rubygems/rubygems/commands/query_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../query_utils"
require_relative "../deprecate"

class Gem::Commands::QueryCommand < Gem::Command
  extend Gem::Deprecate
  rubygems_deprecate_command

  include Gem::QueryUtils

  alias_method :warning_without_suggested_alternatives, :deprecation_warning
  def deprecation_warning
    warning_without_suggested_alternatives

    message = "It is recommended that you use `gem search` or `gem list` instead.\n"
    alert_warning message unless Gem::Deprecate.skip
  end

  def initialize(name = "query", summary = "Query gem information in local or remote repositories")
    super name, summary,
         domain: :local, details: false, versions: true,
         installed: nil, version: Gem::Requirement.default

    add_option("-n", "--name-matches REGEXP",
               "Name of gem(s) to query on matches the",
               "provided REGEXP") do |value, options|
      options[:name] = /#{value}/i
    end

    add_query_options
  end

  def description # :nodoc:
    <<-EOF
The query command is the basis for the list and search commands.

You should really use the list and search commands instead.  This command
is too hard to use.
    EOF
  end
end
PK&J[gpY��
�
9share/rubygems/rubygems/commands/specification_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../local_remote_options"
require_relative "../version_option"
require_relative "../package"

class Gem::Commands::SpecificationCommand < Gem::Command
  include Gem::LocalRemoteOptions
  include Gem::VersionOption

  def initialize
    Gem.load_yaml

    super "specification", "Display gem specification (in yaml)",
          domain: :local, version: Gem::Requirement.default,
          format: :yaml

    add_version_option("examine")
    add_platform_option
    add_prerelease_option

    add_option("--all", "Output specifications for all versions of",
               "the gem") do |_value, options|
      options[:all] = true
    end

    add_option("--ruby", "Output ruby format") do |_value, options|
      options[:format] = :ruby
    end

    add_option("--yaml", "Output YAML format") do |_value, options|
      options[:format] = :yaml
    end

    add_option("--marshal", "Output Marshal format") do |_value, options|
      options[:format] = :marshal
    end

    add_local_remote_options
  end

  def arguments # :nodoc:
    <<-ARGS
GEMFILE       name of gem to show the gemspec for
FIELD         name of gemspec field to show
    ARGS
  end

  def defaults_str # :nodoc:
    "--local --version '#{Gem::Requirement.default}' --yaml"
  end

  def description # :nodoc:
    <<-EOF
The specification command allows you to extract the specification from
a gem for examination.

The specification can be output in YAML, ruby or Marshal formats.

Specific fields in the specification can be extracted in YAML format:

  $ gem spec rake summary
  --- Ruby based make-like utility.
  ...

    EOF
  end

  def usage # :nodoc:
    "#{program_name} [GEMFILE] [FIELD]"
  end

  def execute
    specs = []
    gem = options[:args].shift

    unless gem
      raise Gem::CommandLineError,
            "Please specify a gem name or file on the command line"
    end

    case v = options[:version]
    when String
      req = Gem::Requirement.create v
    when Gem::Requirement
      req = v
    else
      raise Gem::CommandLineError, "Unsupported version type: '#{v}'"
    end

    if !req.none? && options[:all]
      alert_error "Specify --all or -v, not both"
      terminate_interaction 1
    end

    if options[:all]
      dep = Gem::Dependency.new gem
    else
      dep = Gem::Dependency.new gem, req
    end

    field = get_one_optional_argument

    raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if
      field && options[:format] == :ruby

    if local?
      if File.exist? gem
        begin
          specs << Gem::Package.new(gem).spec
        rescue StandardError
          nil
        end
      end

      if specs.empty?
        specs.push(*dep.matching_specs)
      end
    end

    if remote?
      dep.prerelease = options[:prerelease]
      found, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dep

      specs.push(*found.map {|spec,| spec })
    end

    if specs.empty?
      alert_error "No gem matching '#{dep}' found"
      terminate_interaction 1
    end

    platform = get_platform_from_requirements(options)

    if platform
      specs = specs.select {|s| s.platform.to_s == platform }
    end

    unless options[:all]
      specs = [specs.max_by(&:version)]
    end

    specs.each do |s|
      s = s.send field if field

      say case options[:format]
          when :ruby then s.to_ruby
          when :marshal then Marshal.dump s
          else s.to_yaml
      end

      say "\n"
    end
  end
end
PK'J[�m�a��4share/rubygems/rubygems/commands/pristine_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../package"
require_relative "../installer"
require_relative "../version_option"

class Gem::Commands::PristineCommand < Gem::Command
  include Gem::VersionOption

  def initialize
    super "pristine",
          "Restores installed gems to pristine condition from files located in the gem cache",
          version: Gem::Requirement.default,
          extensions: true,
          extensions_set: false,
          all: false

    add_option("--all",
               "Restore all installed gems to pristine",
               "condition") do |value, options|
      options[:all] = value
    end

    add_option("--skip=gem_name",
               "used on --all, skip if name == gem_name") do |value, options|
      options[:skip] ||= []
      options[:skip] << value
    end

    add_option("--[no-]extensions",
               "Restore gems with extensions",
               "in addition to regular gems") do |value, options|
      options[:extensions_set] = true
      options[:extensions]     = value
    end

    add_option("--only-missing-extensions",
               "Only restore gems with missing extensions") do |value, options|
      options[:only_missing_extensions] = value
    end

    add_option("--only-executables",
               "Only restore executables") do |value, options|
      options[:only_executables] = value
    end

    add_option("--only-plugins",
               "Only restore plugins") do |value, options|
      options[:only_plugins] = value
    end

    add_option("-E", "--[no-]env-shebang",
               "Rewrite executables with a shebang",
               "of /usr/bin/env") do |value, options|
      options[:env_shebang] = value
    end

    add_option("-i", "--install-dir DIR",
               "Gem repository to get gems restored") do |value, options|
      options[:install_dir] = File.expand_path(value)
    end

    add_option("-n", "--bindir DIR",
               "Directory where executables are",
               "located") do |value, options|
      options[:bin_dir] = File.expand_path(value)
    end

    add_version_option("restore to", "pristine condition")
  end

  def arguments # :nodoc:
    "GEMNAME       gem to restore to pristine condition (unless --all)"
  end

  def defaults_str # :nodoc:
    "--extensions"
  end

  def description # :nodoc:
    <<-EOF
The pristine command compares an installed gem with the contents of its
cached .gem file and restores any files that don't match the cached .gem's
copy.

If you have made modifications to an installed gem, the pristine command
will revert them.  All extensions are rebuilt and all bin stubs for the gem
are regenerated after checking for modifications.

If the cached gem cannot be found it will be downloaded.

If --no-extensions is provided pristine will not attempt to restore a gem
with an extension.

If --extensions is given (but not --all or gem names) only gems with
extensions will be restored.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [GEMNAME ...]"
  end

  def execute
    install_dir = options[:install_dir]

    specification_record = install_dir ? Gem::SpecificationRecord.from_path(install_dir) : Gem::Specification.specification_record

    specs = if options[:all]
      specification_record.map

    # `--extensions` must be explicitly given to pristine only gems
    # with extensions.
    elsif options[:extensions_set] &&
          options[:extensions] && options[:args].empty?
      specification_record.select do |spec|
        spec.extensions && !spec.extensions.empty?
      end
    elsif options[:only_missing_extensions]
      specification_record.select(&:missing_extensions?)
    else
      get_all_gem_names.sort.flat_map do |gem_name|
        specification_record.find_all_by_name(gem_name, options[:version]).reverse
      end
    end

    specs = specs.select {|spec| spec.platform == RUBY_ENGINE || Gem::Platform.local === spec.platform || spec.platform == Gem::Platform::RUBY }

    if specs.to_a.empty?
      raise Gem::Exception,
            "Failed to find gems #{options[:args]} #{options[:version]}"
    end

    say "Restoring gems to pristine condition..."

    specs.group_by(&:full_name_with_location).values.each do |grouped_specs|
      spec = grouped_specs.find {|s| !s.default_gem? } || grouped_specs.first

      unless only_executables_or_plugins?
        # Default gemspecs include changes provided by ruby-core installer that
        # can't currently be pristined (inclusion of compiled extension targets in
        # the file list). So stick to resetting executables if it's a default gem.
        options[:only_executables] = true if spec.default_gem?
      end

      if options.key? :skip
        if options[:skip].include? spec.name
          say "Skipped #{spec.full_name}, it was given through options"
          next
        end
      end

      unless spec.extensions.empty? || options[:extensions] || only_executables_or_plugins?
        say "Skipped #{spec.full_name_with_location}, it needs to compile an extension"
        next
      end

      gem = spec.cache_file

      unless File.exist?(gem) || only_executables_or_plugins?
        require_relative "../remote_fetcher"

        say "Cached gem for #{spec.full_name_with_location} not found, attempting to fetch..."

        dep = Gem::Dependency.new spec.name, spec.version
        found, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dep

        if found.empty?
          say "Skipped #{spec.full_name}, it was not found from cache and remote sources"
          next
        end

        spec_candidate, source = found.first
        Gem::RemoteFetcher.fetcher.download spec_candidate, source.uri.to_s, spec.base_dir
      end

      env_shebang =
        if options.include? :env_shebang
          options[:env_shebang]
        else
          install_defaults = Gem::ConfigFile::PLATFORM_DEFAULTS["install"]
          install_defaults.to_s["--env-shebang"]
        end

      bin_dir = options[:bin_dir] if options[:bin_dir]

      installer_options = {
        wrappers: true,
        force: true,
        install_dir: install_dir || spec.base_dir,
        env_shebang: env_shebang,
        build_args: spec.build_args,
        bin_dir: bin_dir,
      }

      if options[:only_executables]
        installer = Gem::Installer.for_spec(spec, installer_options)
        installer.generate_bin
      elsif options[:only_plugins]
        installer = Gem::Installer.for_spec(spec, installer_options)
        installer.generate_plugins
      else
        installer = Gem::Installer.at(gem, installer_options)
        installer.install
      end

      say "Restored #{spec.full_name_with_location}"
    end
  end

  private

  def only_executables_or_plugins?
    options[:only_executables] || options[:only_plugins]
  end
end
PK'J[�])�[[1share/rubygems/rubygems/commands/which_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

class Gem::Commands::WhichCommand < Gem::Command
  def initialize
    super "which", "Find the location of a library file you can require",
          search_gems_first: false, show_all: false

    add_option "-a", "--[no-]all", "show all matching files" do |show_all, options|
      options[:show_all] = show_all
    end

    add_option "-g", "--[no-]gems-first",
               "search gems before non-gems" do |gems_first, options|
      options[:search_gems_first] = gems_first
    end
  end

  def arguments # :nodoc:
    "FILE          name of file to find"
  end

  def defaults_str # :nodoc:
    "--no-gems-first --no-all"
  end

  def description # :nodoc:
    <<-EOF
The which command is like the shell which command and shows you where
the file you wish to require lives.

You can use the which command to help determine why you are requiring a
version you did not expect or to look at the content of a file you are
requiring to see why it does not behave as you expect.
    EOF
  end

  def execute
    found = true

    options[:args].each do |arg|
      arg = arg.sub(/#{Regexp.union(*Gem.suffixes)}$/, "")
      dirs = $LOAD_PATH

      spec = Gem::Specification.find_by_path arg

      if spec
        if options[:search_gems_first]
          dirs = spec.full_require_paths + $LOAD_PATH
        else
          dirs = $LOAD_PATH + spec.full_require_paths
        end
      end

      paths = find_paths arg, dirs

      if paths.empty?
        alert_error "Can't find Ruby library file or shared library #{arg}"
        found = false
      else
        say paths
      end
    end

    terminate_interaction 1 unless found
  end

  def find_paths(package_name, dirs)
    result = []

    dirs.each do |dir|
      Gem.suffixes.each do |ext|
        full_path = File.join dir, "#{package_name}#{ext}"
        if File.exist?(full_path) && !File.directory?(full_path)
          result << full_path
          return result unless options[:show_all]
        end
      end
    end

    result
  end

  def usage # :nodoc:
    "#{program_name} FILE [FILE ...]"
  end
end
PK'J[LT�b��2share/rubygems/rubygems/commands/signin_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../gemcutter_utilities"

class Gem::Commands::SigninCommand < Gem::Command
  include Gem::GemcutterUtilities

  def initialize
    super "signin", "Sign in to any gemcutter-compatible host. "\
          "It defaults to https://rubygems.org"

    add_option("--host HOST", "Push to another gemcutter-compatible host") do |value, options|
      options[:host] = value
    end

    add_otp_option
  end

  def description # :nodoc:
    "The signin command executes host sign in for a push server (the default is"\
    " https://rubygems.org). The host can be provided with the host flag or can"\
    " be inferred from the provided gem. Host resolution matches the resolution"\
    " strategy for the push command."
  end

  def usage # :nodoc:
    program_name
  end

  def execute
    sign_in options[:host]
  end
end
PK'J[U�+��7share/rubygems/rubygems/commands/environment_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

class Gem::Commands::EnvironmentCommand < Gem::Command
  def initialize
    super "environment", "Display information about the RubyGems environment"
  end

  def arguments # :nodoc:
    args = <<-EOF
          home            display the path where gems are installed. Aliases: gemhome, gemdir, GEM_HOME
          path            display path used to search for gems. Aliases: gempath, GEM_PATH
          user_gemhome    display the path where gems are installed when `--user-install` is given. Aliases: user_gemdir
          version         display the gem format version
          remotesources   display the remote gem servers
          platform        display the supported gem platforms
          credentials     display the path where credentials are stored
          <omitted>       display everything
    EOF
    args.gsub(/^\s+/, "")
  end

  def description # :nodoc:
    <<-EOF
The environment command lets you query rubygems for its configuration for
use in shell scripts or as a debugging aid.

The RubyGems environment can be controlled through command line arguments,
gemrc files, environment variables and built-in defaults.

Command line argument defaults and some RubyGems defaults can be set in a
~/.gemrc file for individual users and a gemrc in the SYSTEM CONFIGURATION
DIRECTORY for all users. These files are YAML files with the following YAML
keys:

  :sources: A YAML array of remote gem repositories to install gems from
  :verbose: Verbosity of the gem command. false, true, and :really are the
            levels
  :update_sources: Enable/disable automatic updating of repository metadata
  :backtrace: Print backtrace when RubyGems encounters an error
  :gempath: The paths in which to look for gems
  :disable_default_gem_server: Force specification of gem server host on push
  <gem_command>: A string containing arguments for the specified gem command

Example:

  :verbose: false
  install: --no-wrappers
  update: --no-wrappers
  :disable_default_gem_server: true

RubyGems' default local repository can be overridden with the GEM_PATH and
GEM_HOME environment variables. GEM_HOME sets the default repository to
install into. GEM_PATH allows multiple local repositories to be searched for
gems.

If you are behind a proxy server, RubyGems uses the HTTP_PROXY,
HTTP_PROXY_USER and HTTP_PROXY_PASS environment variables to discover the
proxy server.

If you would like to push gems to a private gem server the RUBYGEMS_HOST
environment variable can be set to the URI for that server.

If you are packaging RubyGems all of RubyGems' defaults are in
lib/rubygems/defaults.rb.  You may override these in
lib/rubygems/defaults/operating_system.rb
    EOF
  end

  def usage # :nodoc:
    "#{program_name} [arg]"
  end

  def execute
    out = String.new
    arg = options[:args][0]
    out <<
      case arg
      when /^version/ then
        Gem::VERSION
      when /^gemdir/, /^gemhome/, /^home/, /^GEM_HOME/ then
        Gem.dir
      when /^gempath/, /^path/, /^GEM_PATH/ then
        Gem.path.join(File::PATH_SEPARATOR)
      when /^user_gemdir/, /^user_gemhome/ then
        Gem.user_dir
      when /^remotesources/ then
        Gem.sources.to_a.join("\n")
      when /^platform/ then
        Gem.platforms.join(File::PATH_SEPARATOR)
      when /^credentials/, /^creds/ then
        Gem.configuration.credentials_path
      when nil then
        show_environment
      else
        raise Gem::CommandLineError, "Unknown environment option [#{arg}]"
      end
    say out
    true
  end

  def add_path(out, path)
    path.each do |component|
      out << "     - #{component}\n"
    end
  end

  def show_environment # :nodoc:
    out = "RubyGems Environment:\n".dup

    out << "  - RUBYGEMS VERSION: #{Gem::VERSION}\n"

    out << "  - RUBY VERSION: #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]\n"

    out << "  - INSTALLATION DIRECTORY: #{Gem.dir}\n"

    out << "  - USER INSTALLATION DIRECTORY: #{Gem.user_dir}\n"

    out << "  - CREDENTIALS FILE: #{Gem.configuration.credentials_path}\n"

    out << "  - RUBYGEMS PREFIX: #{Gem.prefix}\n" unless Gem.prefix.nil?

    out << "  - RUBY EXECUTABLE: #{Gem.ruby}\n"

    out << "  - GIT EXECUTABLE: #{git_path}\n"

    out << "  - EXECUTABLE DIRECTORY: #{Gem.bindir}\n"

    out << "  - SPEC CACHE DIRECTORY: #{Gem.spec_cache_dir}\n"

    out << "  - SYSTEM CONFIGURATION DIRECTORY: #{Gem::ConfigFile::SYSTEM_CONFIG_PATH}\n"

    out << "  - RUBYGEMS PLATFORMS:\n"
    Gem.platforms.each do |platform|
      out << "     - #{platform}\n"
    end

    out << "  - GEM PATHS:\n"
    out << "     - #{Gem.dir}\n"

    gem_path = Gem.path.dup
    gem_path.delete Gem.dir
    add_path out, gem_path

    out << "  - GEM CONFIGURATION:\n"
    Gem.configuration.each do |name, value|
      value = value.gsub(/./, "*") if name == "gemcutter_key"
      out << "     - #{name.inspect} => #{value.inspect}\n"
    end

    out << "  - REMOTE SOURCES:\n"
    Gem.sources.each do |s|
      out << "     - #{s}\n"
    end

    out << "  - SHELL PATH:\n"

    shell_path = ENV["PATH"].split(File::PATH_SEPARATOR)
    add_path out, shell_path

    out
  end

  private

  ##
  # Git binary path

  def git_path
    exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
    ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
      exts.each do |ext|
        exe = File.join(path, "git#{ext}")
        return exe if File.executable?(exe) && !File.directory?(exe)
      end
    end

    nil
  end
end
PK'J[K=@BB4share/rubygems/rubygems/commands/contents_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../version_option"

class Gem::Commands::ContentsCommand < Gem::Command
  include Gem::VersionOption

  def initialize
    super "contents", "Display the contents of the installed gems",
          specdirs: [], lib_only: false, prefix: true,
          show_install_dir: false

    add_version_option

    add_option("--all",
               "Contents for all gems") do |all, options|
      options[:all] = all
    end

    add_option("-s", "--spec-dir a,b,c", Array,
               "Search for gems under specific paths") do |spec_dirs, options|
      options[:specdirs] = spec_dirs
    end

    add_option("-l", "--[no-]lib-only",
               "Only return files in the Gem's lib_dirs") do |lib_only, options|
      options[:lib_only] = lib_only
    end

    add_option("--[no-]prefix",
               "Don't include installed path prefix") do |prefix, options|
      options[:prefix] = prefix
    end

    add_option("--[no-]show-install-dir",
               "Show only the gem install dir") do |show, options|
      options[:show_install_dir] = show
    end

    @path_kind = nil
    @spec_dirs = nil
    @version   = nil
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to list contents for"
  end

  def defaults_str # :nodoc:
    "--no-lib-only --prefix"
  end

  def description # :nodoc:
    <<-EOF
The contents command lists the files in an installed gem.  The listing can
be given as full file names, file names without the installed directory
prefix or only the files that are requireable.
    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEMNAME [GEMNAME ...]"
  end

  def execute
    @version   = options[:version] || Gem::Requirement.default
    @spec_dirs = specification_directories
    @path_kind = path_description @spec_dirs

    names = gem_names

    names.each do |name|
      found =
        if options[:show_install_dir]
          gem_install_dir name
        else
          gem_contents name
        end

      terminate_interaction 1 unless found || names.length > 1
    end
  end

  def files_in(spec)
    if spec.default_gem?
      files_in_default_gem spec
    else
      files_in_gem spec
    end
  end

  def files_in_gem(spec)
    gem_path  = spec.full_gem_path
    extra     = "/{#{spec.require_paths.join ","}}" if options[:lib_only]
    glob      = "#{gem_path}#{extra}/**/*"
    prefix_re = %r{#{Regexp.escape(gem_path)}/}

    Dir[glob].map do |file|
      [gem_path, file.sub(prefix_re, "")]
    end
  end

  def files_in_default_gem(spec)
    spec.files.filter_map do |file|
      if file.start_with?("#{spec.bindir}/")
        [RbConfig::CONFIG["bindir"], file.delete_prefix("#{spec.bindir}/")]
      else
        gem spec.name, spec.version

        require_path = spec.require_paths.find do |path|
          file.start_with?("#{path}/")
        end

        requirable_part = file.delete_prefix("#{require_path}/")

        resolve = $LOAD_PATH.resolve_feature_path(requirable_part)&.last
        next unless resolve

        [resolve.delete_suffix(requirable_part), requirable_part]
      end
    end
  end

  def gem_contents(name)
    spec = spec_for name

    return false unless spec

    files = files_in spec

    show_files files

    true
  end

  def gem_install_dir(name)
    spec = spec_for name

    return false unless spec

    say spec.gem_dir

    true
  end

  def gem_names # :nodoc:
    if options[:all]
      Gem::Specification.map(&:name)
    else
      get_all_gem_names
    end
  end

  def path_description(spec_dirs) # :nodoc:
    if spec_dirs.empty?
      "default gem paths"
    else
      "specified path"
    end
  end

  def show_files(files)
    files.sort.each do |prefix, basename|
      absolute_path = File.join(prefix, basename)
      next if File.directory? absolute_path

      if options[:prefix]
        say absolute_path
      else
        say basename
      end
    end
  end

  def spec_for(name)
    spec = Gem::Specification.find_all_by_name(name, @version).first

    return spec if spec

    say "Unable to find gem '#{name}' in #{@path_kind}"

    if Gem.configuration.verbose
      say "\nDirectories searched:"
      @spec_dirs.sort.each {|dir| say dir }
    end

    nil
  end

  def specification_directories # :nodoc:
    options[:specdirs].flat_map do |i|
      [i, File.join(i, "specifications")]
    end
  end
end
PK'J[���&&3share/rubygems/rubygems/commands/install_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../install_update_options"
require_relative "../dependency_installer"
require_relative "../local_remote_options"
require_relative "../validator"
require_relative "../version_option"
require_relative "../update_suggestion"

##
# Gem installer command line tool
#
# See `gem help install`

class Gem::Commands::InstallCommand < Gem::Command
  attr_reader :installed_specs # :nodoc:

  include Gem::VersionOption
  include Gem::LocalRemoteOptions
  include Gem::InstallUpdateOptions
  include Gem::UpdateSuggestion

  def initialize
    defaults = Gem::DependencyInstaller::DEFAULT_OPTIONS.merge({
      format_executable: false,
      lock: true,
      suggest_alternate: true,
      version: Gem::Requirement.default,
      without_groups: [],
    })

    defaults.merge!(install_update_options)

    super "install", "Install a gem into the local repository", defaults

    add_install_update_options
    add_local_remote_options
    add_platform_option
    add_version_option
    add_prerelease_option "to be installed. (Only for listed gems)"

    @installed_specs = []
  end

  def arguments # :nodoc:
    "GEMNAME       name of gem to install"
  end

  def defaults_str # :nodoc:
    "--both --version '#{Gem::Requirement.default}' --no-force\n" \
      "--install-dir #{Gem.dir} --lock\n" +
      install_update_defaults_str
  end

  def description # :nodoc:
    <<-EOF
The install command installs local or remote gem into a gem repository.

For gems with executables ruby installs a wrapper file into the executable
directory by default.  This can be overridden with the --no-wrappers option.
The wrapper allows you to choose among alternate gem versions using _version_.

For example `rake _0.7.3_ --version` will run rake version 0.7.3 if a newer
version is also installed.

Gem Dependency Files
====================

RubyGems can install a consistent set of gems across multiple environments
using `gem install -g` when a gem dependencies file (gem.deps.rb, Gemfile or
Isolate) is present.  If no explicit file is given RubyGems attempts to find
one in the current directory.

When the RUBYGEMS_GEMDEPS environment variable is set to a gem dependencies
file the gems from that file will be activated at startup time.  Set it to a
specific filename or to "-" to have RubyGems automatically discover the gem
dependencies file by walking up from the current directory.

NOTE: Enabling automatic discovery on multiuser systems can lead to
execution of arbitrary code when used from directories outside your control.

Extension Install Failures
==========================

If an extension fails to compile during gem installation the gem
specification is not written out, but the gem remains unpacked in the
repository.  You may need to specify the path to the library's headers and
libraries to continue.  You can do this by adding a -- between RubyGems'
options and the extension's build options:

  $ gem install some_extension_gem
  [build fails]
  Gem files will remain installed in \\
  /path/to/gems/some_extension_gem-1.0 for inspection.
  Results logged to /path/to/gems/some_extension_gem-1.0/gem_make.out
  $ gem install some_extension_gem -- --with-extension-lib=/path/to/lib
  [build succeeds]
  $ gem list some_extension_gem

  *** LOCAL GEMS ***

  some_extension_gem (1.0)
  $

If you correct the compilation errors by editing the gem files you will need
to write the specification by hand.  For example:

  $ gem install some_extension_gem
  [build fails]
  Gem files will remain installed in \\
  /path/to/gems/some_extension_gem-1.0 for inspection.
  Results logged to /path/to/gems/some_extension_gem-1.0/gem_make.out
  $ [cd /path/to/gems/some_extension_gem-1.0]
  $ [edit files or what-have-you and run make]
  $ gem spec ../../cache/some_extension_gem-1.0.gem --ruby > \\
             ../../specifications/some_extension_gem-1.0.gemspec
  $ gem list some_extension_gem

  *** LOCAL GEMS ***

  some_extension_gem (1.0)
  $

Command Alias
==========================

You can use `i` command instead of `install`.

  $ gem i GEMNAME

    EOF
  end

  def usage # :nodoc:
    "#{program_name} [options] GEMNAME [GEMNAME ...] -- --build-flags"
  end

  def check_version # :nodoc:
    if options[:version] != Gem::Requirement.default &&
       get_all_gem_names.size > 1
      alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
                  " version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
      terminate_interaction 1
    end
  end

  def execute
    if options.include? :gemdeps
      install_from_gemdeps
      return # not reached
    end

    @installed_specs = []

    ENV.delete "GEM_PATH" if options[:install_dir].nil?

    check_version

    load_hooks

    exit_code = install_gems

    show_installed

    say update_suggestion if eligible_for_update?

    terminate_interaction exit_code
  end

  def install_from_gemdeps # :nodoc:
    require_relative "../request_set"
    rs = Gem::RequestSet.new

    specs = rs.install_from_gemdeps options do |req, inst|
      s = req.full_spec

      if inst
        say "Installing #{s.name} (#{s.version})"
      else
        say "Using #{s.name} (#{s.version})"
      end
    end

    @installed_specs = specs

    terminate_interaction
  end

  def install_gem(name, version) # :nodoc:
    return if options[:conservative] &&
              !Gem::Dependency.new(name, version).matching_specs.empty?

    req = Gem::Requirement.create(version)

    dinst = Gem::DependencyInstaller.new options

    request_set = dinst.resolve_dependencies name, req

    if options[:explain]
      say "Gems to install:"

      request_set.sorted_requests.each do |activation_request|
        say "  #{activation_request.full_name}"
      end
    else
      @installed_specs.concat request_set.install options
    end

    show_install_errors dinst.errors
  end

  def install_gems # :nodoc:
    exit_code = 0

    get_all_gem_names_and_versions.each do |gem_name, gem_version|
      gem_version ||= options[:version]
      domain = options[:domain]
      domain = :local unless options[:suggest_alternate]
      suppress_suggestions = (domain == :local)

      begin
        install_gem gem_name, gem_version
      rescue Gem::InstallError => e
        alert_error "Error installing #{gem_name}:\n\t#{e.message}"
        exit_code |= 1
      rescue Gem::UnsatisfiableDependencyError => e
        show_lookup_failure e.name, e.version, e.errors, suppress_suggestions,
                            "'#{gem_name}' (#{gem_version})"

        exit_code |= 2
      end
    end

    exit_code
  end

  ##
  # Loads post-install hooks

  def load_hooks # :nodoc:
    if options[:install_as_default]
      require_relative "../install_default_message"
    else
      require_relative "../install_message"
    end
    require_relative "../rdoc"
  end

  def show_install_errors(errors) # :nodoc:
    return unless errors

    errors.each do |x|
      next unless Gem::SourceFetchProblem === x

      require_relative "../uri"
      msg = "Unable to pull data from '#{Gem::Uri.redact(x.source.uri)}': #{x.error.message}"

      alert_warning msg
    end
  end

  def show_installed # :nodoc:
    return if @installed_specs.empty?

    gems = @installed_specs.length == 1 ? "gem" : "gems"
    say "#{@installed_specs.length} #{gems} installed"
  end
end
PK'J[��R���1share/rubygems/rubygems/commands/stale_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

class Gem::Commands::StaleCommand < Gem::Command
  def initialize
    super("stale", "List gems along with access times")
  end

  def description # :nodoc:
    <<-EOF
The stale command lists the latest access time for all the files in your
installed gems.

You can use this command to discover gems and gem versions you are no
longer using.
    EOF
  end

  def usage # :nodoc:
    program_name.to_s
  end

  def execute
    gem_to_atime = {}
    Gem::Specification.each do |spec|
      name = spec.full_name
      Dir["#{spec.full_gem_path}/**/*.*"].each do |file|
        next if File.directory?(file)
        stat = File.stat(file)
        gem_to_atime[name] ||= stat.atime
        gem_to_atime[name] = stat.atime if gem_to_atime[name] < stat.atime
      end
    end

    gem_to_atime.sort_by {|_, atime| atime }.each do |name, atime|
      say "#{name} at #{atime.strftime "%c"}"
    end
  end
end
PK'J[]h&<��1share/rubygems/rubygems/commands/build_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../gemspec_helpers"
require_relative "../package"
require_relative "../version_option"

class Gem::Commands::BuildCommand < Gem::Command
  include Gem::VersionOption
  include Gem::GemspecHelpers

  def initialize
    super "build", "Build a gem from a gemspec"

    add_platform_option

    add_option "--force", "skip validation of the spec" do |_value, options|
      options[:force] = true
    end

    add_option "--strict", "consider warnings as errors when validating the spec" do |_value, options|
      options[:strict] = true
    end

    add_option "-o", "--output FILE", "output gem with the given filename" do |value, options|
      options[:output] = value
    end

    add_option "-C PATH", "Run as if gem build was started in <PATH> instead of the current working directory." do |value, options|
      options[:build_path] = value
    end
    deprecate_option "-C",
                     version: "4.0",
                     extra_msg: "-C is a global flag now. Use `gem -C PATH build GEMSPEC_FILE [options]` instead"
  end

  def arguments # :nodoc:
    "GEMSPEC_FILE  gemspec file name to build a gem for"
  end

  def description # :nodoc:
    <<-EOF
The build command allows you to create a gem from a ruby gemspec.

The best way to build a gem is to use a Rakefile and the Gem::PackageTask
which ships with RubyGems.

The gemspec can either be created by hand or extracted from an existing gem
with gem spec:

  $ gem unpack my_gem-1.0.gem
  Unpacked gem: '.../my_gem-1.0'
  $ gem spec my_gem-1.0.gem --ruby > my_gem-1.0/my_gem-1.0.gemspec
  $ cd my_gem-1.0
  [edit gem contents]
  $ gem build my_gem-1.0.gemspec

Gems can be saved to a specified filename with the output option:

  $ gem build my_gem-1.0.gemspec --output=release.gem

    EOF
  end

  def usage # :nodoc:
    "#{program_name} GEMSPEC_FILE"
  end

  def execute
    if build_path = options[:build_path]
      Dir.chdir(build_path) { build_gem }
      return
    end

    build_gem
  end

  private

  def build_gem
    gemspec = resolve_gem_name

    if gemspec
      build_package(gemspec)
    else
      alert_error error_message
      terminate_interaction(1)
    end
  end

  def build_package(gemspec)
    spec = Gem::Specification.load(gemspec)
    if spec
      Gem::Package.build(
        spec,
        options[:force],
        options[:strict],
        options[:output]
      )
    else
      alert_error "Error loading gemspec. Aborting."
      terminate_interaction 1
    end
  end

  def resolve_gem_name
    return find_gemspec unless gem_name

    if File.exist?(gem_name)
      gem_name
    else
      find_gemspec("#{gem_name}.gemspec") || find_gemspec(gem_name)
    end
  end

  def error_message
    if gem_name
      "Couldn't find a gemspec file matching '#{gem_name}' in #{Dir.pwd}"
    else
      "Couldn't find a gemspec file in #{Dir.pwd}"
    end
  end

  def gem_name
    get_one_optional_argument
  end
end
PK'J[ߘ�|��0share/rubygems/rubygems/commands/rdoc_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"
require_relative "../version_option"
require_relative "../rdoc"
require "fileutils"

class Gem::Commands::RdocCommand < Gem::Command
  include Gem::VersionOption

  def initialize
    super "rdoc", "Generates RDoc for pre-installed gems",
          version: Gem::Requirement.default,
          include_rdoc: false, include_ri: true, overwrite: false

    add_option("--all",
               "Generate RDoc/RI documentation for all",
               "installed gems") do |value, options|
      options[:all] = value
    end

    add_option("--[no-]rdoc",
               "Generate RDoc HTML") do |value, options|
      options[:include_rdoc] = value
    end

    add_option("--[no-]ri",
               "Generate RI data") do |value, options|
      options[:include_ri] = value
    end

    add_option("--[no-]overwrite",
               "Overwrite installed documents") do |value, options|
      options[:overwrite] = value
    end

    add_version_option
  end

  def arguments # :nodoc:
    "GEMNAME       gem to generate documentation for (unless --all)"
  end

  def defaults_str # :nodoc:
    "--version '#{Gem::Requirement.default}' --ri --no-overwrite"
  end

  def description # :nodoc:
    <<-DESC
The rdoc command builds documentation for installed gems.  By default
only documentation is built using rdoc, but additional types of
documentation may be built through rubygems plugins and the
Gem.post_installs hook.

Use --overwrite to force rebuilding of documentation.
    DESC
  end

  def usage # :nodoc:
    "#{program_name} [args]"
  end

  def execute
    specs = if options[:all]
      Gem::Specification.to_a
    else
      get_all_gem_names.flat_map do |name|
        Gem::Specification.find_by_name name, options[:version]
      end.uniq
    end

    if specs.empty?
      alert_error "No matching gems found"
      terminate_interaction 1
    end

    specs.each do |spec|
      doc = Gem::RDoc.new spec, options[:include_rdoc], options[:include_ri]

      doc.force = options[:overwrite]

      if options[:overwrite]
        FileUtils.rm_rf File.join(spec.doc_dir, "ri")
        FileUtils.rm_rf File.join(spec.doc_dir, "rdoc")
      end

      doc.generate
    end
  end
end
PK'J[��ss2share/rubygems/rubygems/commands/mirror_command.rbnu�[���# frozen_string_literal: true

require_relative "../command"

unless defined? Gem::Commands::MirrorCommand
  class Gem::Commands::MirrorCommand < Gem::Command
    def initialize
      super("mirror", "Mirror all gem files (requires rubygems-mirror)")
      begin
        Gem::Specification.find_by_name("rubygems-mirror").activate
      rescue Gem::LoadError
        # no-op
      end
    end

    def description # :nodoc:
      <<-EOF
The mirror command has been moved to the rubygems-mirror gem.
      EOF
    end

    def execute
      alert_error "Install the rubygems-mirror gem for the mirror command"
    end
  end
end
PK'J[�[!lkk,share/rubygems/rubygems/update_suggestion.rbnu�[���# frozen_string_literal: true

##
# Mixin methods for Gem::Command to promote available RubyGems update

module Gem::UpdateSuggestion
  ONE_WEEK = 7 * 24 * 60 * 60

  ##
  # Message to promote available RubyGems update with related gem update command.

  def update_suggestion
    <<-MESSAGE

A new release of RubyGems is available: #{Gem.rubygems_version} → #{Gem.latest_rubygems_version}!
Run `gem update --system #{Gem.latest_rubygems_version}` to update your installation.

    MESSAGE
  end

  ##
  # Determines if current environment is eligible for update suggestion.

  def eligible_for_update?
    # explicit opt-out
    return false if Gem.configuration[:prevent_update_suggestion]
    return false if ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"]

    # focus only on human usage of final RubyGems releases
    return false unless Gem.ui.tty?
    return false if Gem.rubygems_version.prerelease?
    return false if Gem.disable_system_update_message
    return false if Gem::CIDetector.ci?

    # check makes sense only when we can store timestamp of last try
    # otherwise we will not be able to prevent "annoying" update message
    # on each command call
    return unless Gem.configuration.state_file_writable?

    # load time of last check, ensure the difference is enough to repeat the suggestion
    check_time = Time.now.to_i
    last_update_check = Gem.configuration.last_update_check
    return false if (check_time - last_update_check) < ONE_WEEK

    # compare current and latest version, this is the part where
    # latest rubygems spec is fetched from remote
    (Gem.rubygems_version < Gem.latest_rubygems_version).tap do |eligible|
      # store the time of last successful check into state file
      Gem.configuration.last_update_check = check_time

      return eligible
    end
  rescue StandardError # don't block install command on any problem
    false
  end
end
PK'J[!�!���,share/rubygems/rubygems/vendored_net_http.rbnu�[���# frozen_string_literal: true

# Ruby 3.3 and RubyGems 3.5 is already load Gem::Timeout from lib/rubygems/net/http.rb
# We should avoid to load it again
require_relative "vendor/net-http/lib/net/http" unless defined?(Gem::Net::HTTP)
PK'J[��{]]2share/rubygems/rubygems/install_default_message.rbnu�[���# frozen_string_literal: true

require_relative "../rubygems"
require_relative "user_interaction"

##
# A post-install hook that displays "Successfully installed
# some_gem-1.0 as a default gem"

Gem.post_install do |installer|
  ui = Gem::DefaultUserInteraction.ui
  ui.say "Successfully installed #{installer.spec.full_name} as a default gem"
end
PK'J[s!,ނ�&share/rubygems/rubygems/requirement.rbnu�[���# frozen_string_literal: true

require_relative "version"

##
# A Requirement is a set of one or more version restrictions. It supports a
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
#
# See Gem::Version for a description on how versions and requirements work
# together in RubyGems.

class Gem::Requirement
  OPS = { # :nodoc:
    "=" => lambda {|v, r| v == r },
    "!=" => lambda {|v, r| v != r },
    ">" => lambda {|v, r| v > r },
    "<" => lambda {|v, r| v < r },
    ">=" => lambda {|v, r| v >= r },
    "<=" => lambda {|v, r| v <= r },
    "~>" => lambda {|v, r| v >= r && v.release < r.bump },
  }.freeze

  SOURCE_SET_REQUIREMENT = Struct.new(:for_lockfile).new "!" # :nodoc:

  quoted = Regexp.union(OPS.keys)
  PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*".freeze # :nodoc:

  ##
  # A regular expression that matches a requirement

  PATTERN = /\A#{PATTERN_RAW}\z/

  ##
  # The default requirement matches any non-prerelease version

  DefaultRequirement = [">=", Gem::Version.new(0)].freeze

  ##
  # The default requirement matches any version

  DefaultPrereleaseRequirement = [">=", Gem::Version.new("0.a")].freeze

  ##
  # Raised when a bad requirement is encountered

  class BadRequirementError < ArgumentError; end

  ##
  # Factory method to create a Gem::Requirement object.  Input may be
  # a Version, a String, or nil.  Intended to simplify client code.
  #
  # If the input is "weird", the default version requirement is
  # returned.

  def self.create(*inputs)
    return new inputs if inputs.length > 1

    input = inputs.shift

    case input
    when Gem::Requirement then
      input
    when Gem::Version, Array then
      new input
    when "!" then
      source_set
    else
      if input.respond_to? :to_str
        new [input.to_str]
      else
        default
      end
    end
  end

  def self.default
    new ">= 0"
  end

  def self.default_prerelease
    new ">= 0.a"
  end

  ###
  # A source set requirement, used for Gemfiles and lockfiles

  def self.source_set # :nodoc:
    SOURCE_SET_REQUIREMENT
  end

  ##
  # Parse +obj+, returning an <tt>[op, version]</tt> pair. +obj+ can
  # be a String or a Gem::Version.
  #
  # If +obj+ is a String, it can be either a full requirement
  # specification, like <tt>">= 1.2"</tt>, or a simple version number,
  # like <tt>"1.2"</tt>.
  #
  #     parse("> 1.0")                 # => [">", Gem::Version.new("1.0")]
  #     parse("1.0")                   # => ["=", Gem::Version.new("1.0")]
  #     parse(Gem::Version.new("1.0")) # => ["=,  Gem::Version.new("1.0")]

  def self.parse(obj)
    return ["=", obj] if Gem::Version === obj

    unless PATTERN =~ obj.to_s
      raise BadRequirementError, "Illformed requirement [#{obj.inspect}]"
    end
    op = -($1 || "=")
    version = -$2

    if op == ">=" && version == "0"
      DefaultRequirement
    elsif op == ">=" && version == "0.a"
      DefaultPrereleaseRequirement
    else
      [op, Gem::Version.new(version)]
    end
  end

  ##
  # An array of requirement pairs. The first element of the pair is
  # the op, and the second is the Gem::Version.

  attr_reader :requirements # :nodoc:

  ##
  # Constructs a requirement from +requirements+. Requirements can be
  # Strings, Gem::Versions, or Arrays of those. +nil+ and duplicate
  # requirements are ignored. An empty set of +requirements+ is the
  # same as <tt>">= 0"</tt>.

  def initialize(*requirements)
    requirements = requirements.flatten
    requirements.compact!
    requirements.uniq!

    if requirements.empty?
      @requirements = [DefaultRequirement]
    else
      @requirements = requirements.map! {|r| self.class.parse r }
    end
  end

  ##
  # Concatenates the +new+ requirements onto this requirement.

  def concat(new)
    new = new.flatten
    new.compact!
    new.uniq!
    new = new.map {|r| self.class.parse r }

    @requirements.concat new
  end

  ##
  # Formats this requirement for use in a Gem::RequestSet::Lockfile.

  def for_lockfile # :nodoc:
    return if @requirements == [DefaultRequirement]

    list = requirements.sort_by do |_, version|
      version
    end.map do |op, version|
      "#{op} #{version}"
    end.uniq

    " (#{list.join ", "})"
  end

  ##
  # true if this gem has no requirements.

  def none?
    if @requirements.size == 1
      @requirements[0] == DefaultRequirement
    else
      false
    end
  end

  ##
  # true if the requirement is for only an exact version

  def exact?
    return false unless @requirements.size == 1
    @requirements[0][0] == "="
  end

  def as_list # :nodoc:
    requirements.map {|op, version| "#{op} #{version}" }
  end

  def hash # :nodoc:
    requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash
  end

  def marshal_dump # :nodoc:
    [@requirements]
  end

  def marshal_load(array) # :nodoc:
    @requirements = array[0]

    raise TypeError, "wrong @requirements" unless Array === @requirements &&
                                                  @requirements.all? {|r| r.size == 2 && (r.first.is_a?(String) || r[0] = "=") && r.last.is_a?(Gem::Version) }
  end

  def yaml_initialize(tag, vals) # :nodoc:
    vals.each do |ivar, val|
      instance_variable_set "@#{ivar}", val
    end
  end

  def init_with(coder) # :nodoc:
    yaml_initialize coder.tag, coder.map
  end

  def encode_with(coder) # :nodoc:
    coder.add "requirements", @requirements
  end

  ##
  # A requirement is a prerelease if any of the versions inside of it
  # are prereleases

  def prerelease?
    requirements.any? {|r| r.last.prerelease? }
  end

  def pretty_print(q) # :nodoc:
    q.group 1, "Gem::Requirement.new(", ")" do
      q.pp as_list
    end
  end

  ##
  # True if +version+ satisfies this Requirement.

  def satisfied_by?(version)
    raise ArgumentError, "Need a Gem::Version: #{version.inspect}" unless
      Gem::Version === version
    requirements.all? {|op, rv| OPS.fetch(op).call version, rv }
  end

  alias_method :===, :satisfied_by?
  alias_method :=~, :satisfied_by?

  ##
  # True if the requirement will not always match the latest version.

  def specific?
    return true if @requirements.length > 1 # GIGO, > 1, > 2 is silly

    !%w[> >=].include? @requirements.first.first # grab the operator
  end

  def to_s # :nodoc:
    as_list.join ", "
  end

  def ==(other) # :nodoc:
    return unless Gem::Requirement === other

    # An == check is always necessary
    return false unless _sorted_requirements == other._sorted_requirements

    # An == check is sufficient unless any requirements use ~>
    return true unless _tilde_requirements.any?

    # If any requirements use ~> we use the stricter `#eql?` that also checks
    # that version precision is the same
    _tilde_requirements.eql?(other._tilde_requirements)
  end

  protected

  def _sorted_requirements
    @_sorted_requirements ||= requirements.sort_by(&:to_s)
  end

  def _tilde_requirements
    @_tilde_requirements ||= _sorted_requirements.select {|r| r.first == "~>" }
  end

  def initialize_copy(other) # :nodoc:
    @requirements = other.requirements.dup
    super
  end
end

class Gem::Version
  # This is needed for compatibility with older yaml
  # gemspecs.

  Requirement = Gem::Requirement # :nodoc:
end
PK'J[�f����$share/rubygems/rubygems/util/list.rbnu�[���# frozen_string_literal: true

module Gem
  # The Gem::List class is currently unused and will be removed in the next major rubygems version
  class List # :nodoc:
    include Enumerable
    attr_accessor :value, :tail

    def initialize(value = nil, tail = nil)
      @value = value
      @tail = tail
    end

    def each
      n = self
      while n
        yield n.value
        n = n.tail
      end
    end

    def to_a
      super.reverse
    end

    def prepend(value)
      List.new value, self
    end

    def pretty_print(q) # :nodoc:
      q.pp to_a
    end

    def self.prepend(list, value)
      return List.new(value) unless list
      List.new value, list
    end
  end
  deprecate_constant :List
end
PK(J[�Ŝ��8�8(share/rubygems/rubygems/util/licenses.rbnu�[���# frozen_string_literal: true

# This is generated by generate_spdx_license_list.rb, any edits to this
# file will be discarded.

require_relative "../text"

class Gem::Licenses
  extend Gem::Text

  NONSTANDARD = "Nonstandard"
  LICENSE_REF = "LicenseRef-.+"

  # Software Package Data Exchange (SPDX) standard open-source software
  # license identifiers
  LICENSE_IDENTIFIERS = %w[
    0BSD
    3D-Slicer-1.0
    AAL
    ADSL
    AFL-1.1
    AFL-1.2
    AFL-2.0
    AFL-2.1
    AFL-3.0
    AGPL-1.0-only
    AGPL-1.0-or-later
    AGPL-3.0-only
    AGPL-3.0-or-later
    AMD-newlib
    AMDPLPA
    AML
    AML-glslang
    AMPAS
    ANTLR-PD
    ANTLR-PD-fallback
    APAFML
    APL-1.0
    APSL-1.0
    APSL-1.1
    APSL-1.2
    APSL-2.0
    ASWF-Digital-Assets-1.0
    ASWF-Digital-Assets-1.1
    Abstyles
    AdaCore-doc
    Adobe-2006
    Adobe-Display-PostScript
    Adobe-Glyph
    Adobe-Utopia
    Afmparse
    Aladdin
    Apache-1.0
    Apache-1.1
    Apache-2.0
    App-s2p
    Arphic-1999
    Artistic-1.0
    Artistic-1.0-Perl
    Artistic-1.0-cl8
    Artistic-2.0
    BSD-1-Clause
    BSD-2-Clause
    BSD-2-Clause-Darwin
    BSD-2-Clause-Patent
    BSD-2-Clause-Views
    BSD-2-Clause-first-lines
    BSD-3-Clause
    BSD-3-Clause-Attribution
    BSD-3-Clause-Clear
    BSD-3-Clause-HP
    BSD-3-Clause-LBNL
    BSD-3-Clause-Modification
    BSD-3-Clause-No-Military-License
    BSD-3-Clause-No-Nuclear-License
    BSD-3-Clause-No-Nuclear-License-2014
    BSD-3-Clause-No-Nuclear-Warranty
    BSD-3-Clause-Open-MPI
    BSD-3-Clause-Sun
    BSD-3-Clause-acpica
    BSD-3-Clause-flex
    BSD-4-Clause
    BSD-4-Clause-Shortened
    BSD-4-Clause-UC
    BSD-4.3RENO
    BSD-4.3TAHOE
    BSD-Advertising-Acknowledgement
    BSD-Attribution-HPND-disclaimer
    BSD-Inferno-Nettverk
    BSD-Protection
    BSD-Source-Code
    BSD-Source-beginning-file
    BSD-Systemics
    BSD-Systemics-W3Works
    BSL-1.0
    BUSL-1.1
    Baekmuk
    Bahyph
    Barr
    Beerware
    BitTorrent-1.0
    BitTorrent-1.1
    Bitstream-Charter
    Bitstream-Vera
    BlueOak-1.0.0
    Boehm-GC
    Boehm-GC-without-fee
    Borceux
    Brian-Gladman-2-Clause
    Brian-Gladman-3-Clause
    C-UDA-1.0
    CAL-1.0
    CAL-1.0-Combined-Work-Exception
    CATOSL-1.1
    CC-BY-1.0
    CC-BY-2.0
    CC-BY-2.5
    CC-BY-2.5-AU
    CC-BY-3.0
    CC-BY-3.0-AT
    CC-BY-3.0-AU
    CC-BY-3.0-DE
    CC-BY-3.0-IGO
    CC-BY-3.0-NL
    CC-BY-3.0-US
    CC-BY-4.0
    CC-BY-NC-1.0
    CC-BY-NC-2.0
    CC-BY-NC-2.5
    CC-BY-NC-3.0
    CC-BY-NC-3.0-DE
    CC-BY-NC-4.0
    CC-BY-NC-ND-1.0
    CC-BY-NC-ND-2.0
    CC-BY-NC-ND-2.5
    CC-BY-NC-ND-3.0
    CC-BY-NC-ND-3.0-DE
    CC-BY-NC-ND-3.0-IGO
    CC-BY-NC-ND-4.0
    CC-BY-NC-SA-1.0
    CC-BY-NC-SA-2.0
    CC-BY-NC-SA-2.0-DE
    CC-BY-NC-SA-2.0-FR
    CC-BY-NC-SA-2.0-UK
    CC-BY-NC-SA-2.5
    CC-BY-NC-SA-3.0
    CC-BY-NC-SA-3.0-DE
    CC-BY-NC-SA-3.0-IGO
    CC-BY-NC-SA-4.0
    CC-BY-ND-1.0
    CC-BY-ND-2.0
    CC-BY-ND-2.5
    CC-BY-ND-3.0
    CC-BY-ND-3.0-DE
    CC-BY-ND-4.0
    CC-BY-SA-1.0
    CC-BY-SA-2.0
    CC-BY-SA-2.0-UK
    CC-BY-SA-2.1-JP
    CC-BY-SA-2.5
    CC-BY-SA-3.0
    CC-BY-SA-3.0-AT
    CC-BY-SA-3.0-DE
    CC-BY-SA-3.0-IGO
    CC-BY-SA-4.0
    CC-PDDC
    CC-PDM-1.0
    CC-SA-1.0
    CC0-1.0
    CDDL-1.0
    CDDL-1.1
    CDL-1.0
    CDLA-Permissive-1.0
    CDLA-Permissive-2.0
    CDLA-Sharing-1.0
    CECILL-1.0
    CECILL-1.1
    CECILL-2.0
    CECILL-2.1
    CECILL-B
    CECILL-C
    CERN-OHL-1.1
    CERN-OHL-1.2
    CERN-OHL-P-2.0
    CERN-OHL-S-2.0
    CERN-OHL-W-2.0
    CFITSIO
    CMU-Mach
    CMU-Mach-nodoc
    CNRI-Jython
    CNRI-Python
    CNRI-Python-GPL-Compatible
    COIL-1.0
    CPAL-1.0
    CPL-1.0
    CPOL-1.02
    CUA-OPL-1.0
    Caldera
    Caldera-no-preamble
    Catharon
    ClArtistic
    Clips
    Community-Spec-1.0
    Condor-1.1
    Cornell-Lossless-JPEG
    Cronyx
    Crossword
    CrystalStacker
    Cube
    D-FSL-1.0
    DEC-3-Clause
    DL-DE-BY-2.0
    DL-DE-ZERO-2.0
    DOC
    DRL-1.0
    DRL-1.1
    DSDP
    DocBook-Schema
    DocBook-Stylesheet
    DocBook-XML
    Dotseqn
    ECL-1.0
    ECL-2.0
    EFL-1.0
    EFL-2.0
    EPICS
    EPL-1.0
    EPL-2.0
    EUDatagrid
    EUPL-1.0
    EUPL-1.1
    EUPL-1.2
    Elastic-2.0
    Entessa
    ErlPL-1.1
    Eurosym
    FBM
    FDK-AAC
    FSFAP
    FSFAP-no-warranty-disclaimer
    FSFUL
    FSFULLR
    FSFULLRWD
    FTL
    Fair
    Ferguson-Twofish
    Frameworx-1.0
    FreeBSD-DOC
    FreeImage
    Furuseth
    GCR-docs
    GD
    GFDL-1.1-invariants-only
    GFDL-1.1-invariants-or-later
    GFDL-1.1-no-invariants-only
    GFDL-1.1-no-invariants-or-later
    GFDL-1.1-only
    GFDL-1.1-or-later
    GFDL-1.2-invariants-only
    GFDL-1.2-invariants-or-later
    GFDL-1.2-no-invariants-only
    GFDL-1.2-no-invariants-or-later
    GFDL-1.2-only
    GFDL-1.2-or-later
    GFDL-1.3-invariants-only
    GFDL-1.3-invariants-or-later
    GFDL-1.3-no-invariants-only
    GFDL-1.3-no-invariants-or-later
    GFDL-1.3-only
    GFDL-1.3-or-later
    GL2PS
    GLWTPL
    GPL-1.0-only
    GPL-1.0-or-later
    GPL-2.0-only
    GPL-2.0-or-later
    GPL-3.0-only
    GPL-3.0-or-later
    Giftware
    Glide
    Glulxe
    Graphics-Gems
    Gutmann
    HIDAPI
    HP-1986
    HP-1989
    HPND
    HPND-DEC
    HPND-Fenneberg-Livingston
    HPND-INRIA-IMAG
    HPND-Intel
    HPND-Kevlin-Henney
    HPND-MIT-disclaimer
    HPND-Markus-Kuhn
    HPND-Netrek
    HPND-Pbmplus
    HPND-UC
    HPND-UC-export-US
    HPND-doc
    HPND-doc-sell
    HPND-export-US
    HPND-export-US-acknowledgement
    HPND-export-US-modify
    HPND-export2-US
    HPND-merchantability-variant
    HPND-sell-MIT-disclaimer-xserver
    HPND-sell-regexpr
    HPND-sell-variant
    HPND-sell-variant-MIT-disclaimer
    HPND-sell-variant-MIT-disclaimer-rev
    HTMLTIDY
    HaskellReport
    Hippocratic-2.1
    IBM-pibs
    ICU
    IEC-Code-Components-EULA
    IJG
    IJG-short
    IPA
    IPL-1.0
    ISC
    ISC-Veillard
    ImageMagick
    Imlib2
    Info-ZIP
    Inner-Net-2.0
    InnoSetup
    Intel
    Intel-ACPI
    Interbase-1.0
    JPL-image
    JPNIC
    JSON
    Jam
    JasPer-2.0
    Kastrup
    Kazlib
    Knuth-CTAN
    LAL-1.2
    LAL-1.3
    LGPL-2.0-only
    LGPL-2.0-or-later
    LGPL-2.1-only
    LGPL-2.1-or-later
    LGPL-3.0-only
    LGPL-3.0-or-later
    LGPLLR
    LOOP
    LPD-document
    LPL-1.0
    LPL-1.02
    LPPL-1.0
    LPPL-1.1
    LPPL-1.2
    LPPL-1.3a
    LPPL-1.3c
    LZMA-SDK-9.11-to-9.20
    LZMA-SDK-9.22
    Latex2e
    Latex2e-translated-notice
    Leptonica
    LiLiQ-P-1.1
    LiLiQ-R-1.1
    LiLiQ-Rplus-1.1
    Libpng
    Linux-OpenIB
    Linux-man-pages-1-para
    Linux-man-pages-copyleft
    Linux-man-pages-copyleft-2-para
    Linux-man-pages-copyleft-var
    Lucida-Bitmap-Fonts
    MIPS
    MIT
    MIT-0
    MIT-CMU
    MIT-Click
    MIT-Festival
    MIT-Khronos-old
    MIT-Modern-Variant
    MIT-Wu
    MIT-advertising
    MIT-enna
    MIT-feh
    MIT-open-group
    MIT-testregex
    MITNFA
    MMIXware
    MPEG-SSG
    MPL-1.0
    MPL-1.1
    MPL-2.0
    MPL-2.0-no-copyleft-exception
    MS-LPL
    MS-PL
    MS-RL
    MTLL
    Mackerras-3-Clause
    Mackerras-3-Clause-acknowledgment
    MakeIndex
    Martin-Birgmeier
    McPhee-slideshow
    Minpack
    MirOS
    Motosoto
    MulanPSL-1.0
    MulanPSL-2.0
    Multics
    Mup
    NAIST-2003
    NASA-1.3
    NBPL-1.0
    NCBI-PD
    NCGL-UK-2.0
    NCL
    NCSA
    NGPL
    NICTA-1.0
    NIST-PD
    NIST-PD-fallback
    NIST-Software
    NLOD-1.0
    NLOD-2.0
    NLPL
    NOSL
    NPL-1.0
    NPL-1.1
    NPOSL-3.0
    NRL
    NTP
    NTP-0
    Naumen
    NetCDF
    Newsletr
    Nokia
    Noweb
    O-UDA-1.0
    OAR
    OCCT-PL
    OCLC-2.0
    ODC-By-1.0
    ODbL-1.0
    OFFIS
    OFL-1.0
    OFL-1.0-RFN
    OFL-1.0-no-RFN
    OFL-1.1
    OFL-1.1-RFN
    OFL-1.1-no-RFN
    OGC-1.0
    OGDL-Taiwan-1.0
    OGL-Canada-2.0
    OGL-UK-1.0
    OGL-UK-2.0
    OGL-UK-3.0
    OGTSL
    OLDAP-1.1
    OLDAP-1.2
    OLDAP-1.3
    OLDAP-1.4
    OLDAP-2.0
    OLDAP-2.0.1
    OLDAP-2.1
    OLDAP-2.2
    OLDAP-2.2.1
    OLDAP-2.2.2
    OLDAP-2.3
    OLDAP-2.4
    OLDAP-2.5
    OLDAP-2.6
    OLDAP-2.7
    OLDAP-2.8
    OLFL-1.3
    OML
    OPL-1.0
    OPL-UK-3.0
    OPUBL-1.0
    OSET-PL-2.1
    OSL-1.0
    OSL-1.1
    OSL-2.0
    OSL-2.1
    OSL-3.0
    OpenPBS-2.3
    OpenSSL
    OpenSSL-standalone
    OpenVision
    PADL
    PDDL-1.0
    PHP-3.0
    PHP-3.01
    PPL
    PSF-2.0
    Parity-6.0.0
    Parity-7.0.0
    Pixar
    Plexus
    PolyForm-Noncommercial-1.0.0
    PolyForm-Small-Business-1.0.0
    PostgreSQL
    Python-2.0
    Python-2.0.1
    QPL-1.0
    QPL-1.0-INRIA-2004
    Qhull
    RHeCos-1.1
    RPL-1.1
    RPL-1.5
    RPSL-1.0
    RSA-MD
    RSCPL
    Rdisc
    Ruby
    Ruby-pty
    SAX-PD
    SAX-PD-2.0
    SCEA
    SGI-B-1.0
    SGI-B-1.1
    SGI-B-2.0
    SGI-OpenGL
    SGP4
    SHL-0.5
    SHL-0.51
    SISSL
    SISSL-1.2
    SL
    SMAIL-GPL
    SMLNJ
    SMPPL
    SNIA
    SPL-1.0
    SSH-OpenSSH
    SSH-short
    SSLeay-standalone
    SSPL-1.0
    SWL
    Saxpath
    SchemeReport
    Sendmail
    Sendmail-8.23
    Sendmail-Open-Source-1.1
    SimPL-2.0
    Sleepycat
    Soundex
    Spencer-86
    Spencer-94
    Spencer-99
    SugarCRM-1.1.3
    Sun-PPP
    Sun-PPP-2000
    SunPro
    Symlinks
    TAPR-OHL-1.0
    TCL
    TCP-wrappers
    TGPPL-1.0
    TMate
    TORQUE-1.1
    TOSL
    TPDL
    TPL-1.0
    TTWL
    TTYP0
    TU-Berlin-1.0
    TU-Berlin-2.0
    TermReadKey
    ThirdEye
    TrustedQSL
    UCAR
    UCL-1.0
    UMich-Merit
    UPL-1.0
    URT-RLE
    Ubuntu-font-1.0
    Unicode-3.0
    Unicode-DFS-2015
    Unicode-DFS-2016
    Unicode-TOU
    UnixCrypt
    Unlicense
    VOSTROM
    VSL-1.0
    Vim
    W3C
    W3C-19980720
    W3C-20150513
    WTFPL
    Watcom-1.0
    Widget-Workshop
    Wsuipa
    X11
    X11-distribute-modifications-variant
    X11-swapped
    XFree86-1.1
    XSkat
    Xdebug-1.03
    Xerox
    Xfig
    Xnet
    YPL-1.0
    YPL-1.1
    ZPL-1.1
    ZPL-2.0
    ZPL-2.1
    Zed
    Zeeff
    Zend-2.0
    Zimbra-1.3
    Zimbra-1.4
    Zlib
    any-OSI
    any-OSI-perl-modules
    bcrypt-Solar-Designer
    blessing
    bzip2-1.0.6
    check-cvs
    checkmk
    copyleft-next-0.3.0
    copyleft-next-0.3.1
    curl
    cve-tou
    diffmark
    dtoa
    dvipdfm
    eGenix
    etalab-2.0
    fwlw
    gSOAP-1.3b
    generic-xts
    gnuplot
    gtkbook
    hdparm
    iMatix
    libpng-2.0
    libselinux-1.0
    libtiff
    libutil-David-Nugent
    lsof
    magaz
    mailprio
    metamail
    mpi-permissive
    mpich2
    mplus
    pkgconf
    pnmstitch
    psfrag
    psutils
    python-ldap
    radvd
    snprintf
    softSurfer
    ssh-keyscan
    swrule
    threeparttable
    ulem
    w3m
    wwl
    xinetd
    xkeyboard-config-Zinoviev
    xlock
    xpp
    xzoom
    zlib-acknowledgement
  ].freeze

  DEPRECATED_LICENSE_IDENTIFIERS = %w[
    AGPL-1.0
    AGPL-3.0
    BSD-2-Clause-FreeBSD
    BSD-2-Clause-NetBSD
    GFDL-1.1
    GFDL-1.2
    GFDL-1.3
    GPL-1.0
    GPL-1.0+
    GPL-2.0
    GPL-2.0+
    GPL-2.0-with-GCC-exception
    GPL-2.0-with-autoconf-exception
    GPL-2.0-with-bison-exception
    GPL-2.0-with-classpath-exception
    GPL-2.0-with-font-exception
    GPL-3.0
    GPL-3.0+
    GPL-3.0-with-GCC-exception
    GPL-3.0-with-autoconf-exception
    LGPL-2.0
    LGPL-2.0+
    LGPL-2.1
    LGPL-2.1+
    LGPL-3.0
    LGPL-3.0+
    Net-SNMP
    Nunit
    StandardML-NJ
    bzip2-1.0.5
    eCos-2.0
    wxWindows
  ].freeze

  # exception identifiers
  EXCEPTION_IDENTIFIERS = %w[
    389-exception
    Asterisk-exception
    Asterisk-linking-protocols-exception
    Autoconf-exception-2.0
    Autoconf-exception-3.0
    Autoconf-exception-generic
    Autoconf-exception-generic-3.0
    Autoconf-exception-macro
    Bison-exception-1.24
    Bison-exception-2.2
    Bootloader-exception
    CGAL-linking-exception
    CLISP-exception-2.0
    Classpath-exception-2.0
    DigiRule-FOSS-exception
    FLTK-exception
    Fawkes-Runtime-exception
    Font-exception-2.0
    GCC-exception-2.0
    GCC-exception-2.0-note
    GCC-exception-3.1
    GNAT-exception
    GNOME-examples-exception
    GNU-compiler-exception
    GPL-3.0-389-ds-base-exception
    GPL-3.0-interface-exception
    GPL-3.0-linking-exception
    GPL-3.0-linking-source-exception
    GPL-CC-1.0
    GStreamer-exception-2005
    GStreamer-exception-2008
    Gmsh-exception
    Independent-modules-exception
    KiCad-libraries-exception
    LGPL-3.0-linking-exception
    LLGPL
    LLVM-exception
    LZMA-exception
    Libtool-exception
    Linux-syscall-note
    OCCT-exception-1.0
    OCaml-LGPL-linking-exception
    OpenJDK-assembly-exception-1.0
    PCRE2-exception
    PS-or-PDF-font-exception-20170817
    QPL-1.0-INRIA-2004-exception
    Qt-GPL-exception-1.0
    Qt-LGPL-exception-1.1
    Qwt-exception-1.0
    RRDtool-FLOSS-exception-2.0
    SANE-exception
    SHL-2.0
    SHL-2.1
    SWI-exception
    Swift-exception
    Texinfo-exception
    UBDL-exception
    Universal-FOSS-exception-1.0
    WxWindows-exception-3.1
    cryptsetup-OpenSSL-exception
    eCos-exception-2.0
    erlang-otp-linking-exception
    fmt-exception
    freertos-exception-2.0
    gnu-javamail-exception
    harbour-exception
    i2p-gpl-java-exception
    libpri-OpenH323-exception
    mif-exception
    mxml-exception
    openvpn-openssl-exception
    romic-exception
    stunnel-exception
    u-boot-exception-2.0
    vsftpd-openssl-exception
    x11vnc-openssl-exception
  ].freeze

  DEPRECATED_EXCEPTION_IDENTIFIERS = %w[
    Nokia-Qt-exception-1.1
  ].freeze

  VALID_REGEXP = /
    \A
    (?:
      #{Regexp.union(LICENSE_IDENTIFIERS)}
      \+?
      (?:\s WITH \s #{Regexp.union(EXCEPTION_IDENTIFIERS)})?
      | #{NONSTANDARD}
      | #{LICENSE_REF}
    )
    \Z
  /ox

  DEPRECATED_LICENSE_REGEXP = /
    \A
    #{Regexp.union(DEPRECATED_LICENSE_IDENTIFIERS)}
    \+?
    (?:\s WITH \s .+?)?
    \Z
  /ox

  DEPRECATED_EXCEPTION_REGEXP = /
    \A
    .+?
    \+?
    (?:\s WITH \s #{Regexp.union(DEPRECATED_EXCEPTION_IDENTIFIERS)})
    \Z
  /ox

  def self.match?(license)
    VALID_REGEXP.match?(license)
  end

  def self.deprecated_license_id?(license)
    DEPRECATED_LICENSE_REGEXP.match?(license)
  end

  def self.deprecated_exception_id?(license)
    DEPRECATED_EXCEPTION_REGEXP.match?(license)
  end

  def self.suggestions(license)
    by_distance = LICENSE_IDENTIFIERS.group_by do |identifier|
      levenshtein_distance(identifier, license)
    end
    lowest = by_distance.keys.min
    return unless lowest < license.size
    by_distance[lowest]
  end
end
PK(J[HJ8��
�
0share/rubygems/rubygems/safe_marshal/elements.rbnu�[���# frozen_string_literal: true

module Gem
  module SafeMarshal
    module Elements
      class Element
      end

      class Symbol < Element
        def initialize(name)
          @name = name
        end
        attr_reader :name
      end

      class UserDefined < Element
        def initialize(name, binary_string)
          @name = name
          @binary_string = binary_string
        end

        attr_reader :name, :binary_string
      end

      class UserMarshal < Element
        def initialize(name, data)
          @name = name
          @data = data
        end

        attr_reader :name, :data
      end

      class String < Element
        def initialize(str)
          @str = str
        end

        attr_reader :str
      end

      class Hash < Element
        def initialize(pairs)
          @pairs = pairs
        end

        attr_reader :pairs
      end

      class HashWithDefaultValue < Hash
        def initialize(pairs, default)
          super(pairs)
          @default = default
        end

        attr_reader :default
      end

      class Array < Element
        def initialize(elements)
          @elements = elements
        end

        attr_reader :elements
      end

      class Integer < Element
        def initialize(int)
          @int = int
        end

        attr_reader :int
      end

      class True < Element
        def initialize
        end
        TRUE = new.freeze
      end

      class False < Element
        def initialize
        end

        FALSE = new.freeze
      end

      class WithIvars < Element
        def initialize(object, ivars)
          @object = object
          @ivars = ivars
        end

        attr_reader :object, :ivars
      end

      class Object < Element
        def initialize(name)
          @name = name
        end
        attr_reader :name
      end

      class Nil < Element
        NIL = new.freeze
      end

      class ObjectLink < Element
        def initialize(offset)
          @offset = offset
        end
        attr_reader :offset
      end

      class SymbolLink < Element
        def initialize(offset)
          @offset = offset
        end
        attr_reader :offset
      end

      class Float < Element
        def initialize(string)
          @string = string
        end
        attr_reader :string
      end

      class Bignum < Element # rubocop:disable Lint/UnifiedInteger
        def initialize(sign, data)
          @sign = sign
          @data = data
        end
        attr_reader :sign, :data
      end

      class UserClass < Element
        def initialize(name, wrapped_object)
          @name = name
          @wrapped_object = wrapped_object
        end
        attr_reader :name, :wrapped_object
      end
    end
  end
end
PK(J[��O%O%.share/rubygems/rubygems/safe_marshal/reader.rbnu�[���# frozen_string_literal: true

require_relative "elements"

module Gem
  module SafeMarshal
    class Reader
      class Error < StandardError
      end

      class UnsupportedVersionError < Error
      end

      class UnconsumedBytesError < Error
      end

      class NotImplementedError < Error
      end

      class EOFError < Error
      end

      class DataTooShortError < Error
      end

      class NegativeLengthError < Error
      end

      def initialize(io)
        @io = io
      end

      def read!
        read_header
        root = read_element
        raise UnconsumedBytesError, "expected EOF, got #{@io.read(10).inspect}... after top-level element #{root.class}" unless @io.eof?
        root
      end

      private

      MARSHAL_VERSION = [Marshal::MAJOR_VERSION, Marshal::MINOR_VERSION].map(&:chr).join.freeze
      private_constant :MARSHAL_VERSION

      def read_header
        v = @io.read(2)
        raise UnsupportedVersionError, "Unsupported marshal version #{v.bytes.map(&:ord).join(".")}, expected #{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}" unless v == MARSHAL_VERSION
      end

      def read_bytes(n)
        raise NegativeLengthError if n < 0
        str = @io.read(n)
        raise EOFError, "expected #{n} bytes, got EOF" if str.nil?
        raise DataTooShortError, "expected #{n} bytes, got #{str.inspect}" unless str.bytesize == n
        str
      end

      def read_byte
        @io.getbyte || raise(EOFError, "Unexpected EOF")
      end

      def read_integer
        b = read_byte

        case b
        when 0x00
          0
        when 0x01
          read_byte
        when 0x02
          read_byte | (read_byte << 8)
        when 0x03
          read_byte | (read_byte << 8) | (read_byte << 16)
        when 0x04
          read_byte | (read_byte << 8) | (read_byte << 16) | (read_byte << 24)
        when 0xFC
          read_byte | (read_byte << 8) | (read_byte << 16) | (read_byte << 24) | -0x100000000
        when 0xFD
          read_byte | (read_byte << 8) | (read_byte << 16) | -0x1000000
        when 0xFE
          read_byte | (read_byte << 8) | -0x10000
        when 0xFF
          read_byte | -0x100
        else
          signed = (b ^ 128) - 128
          if b >= 128
            signed + 5
          else
            signed - 5
          end
        end
      end

      def read_element
        type = read_byte
        case type
        when 34 then read_string # ?"
        when 48 then read_nil # ?0
        when 58 then read_symbol # ?:
        when 59 then read_symbol_link # ?;
        when 64 then read_object_link # ?@
        when 70 then read_false # ?F
        when 73 then read_object_with_ivars # ?I
        when 84 then read_true # ?T
        when 85 then read_user_marshal # ?U
        when 91 then read_array # ?[
        when 102 then read_float # ?f
        when 105 then Elements::Integer.new(read_integer) # ?i
        when 108 then read_bignum # ?l
        when 111 then read_object # ?o
        when 117 then read_user_defined # ?u
        when 123 then read_hash # ?{
        when 125 then read_hash_with_default_value # ?}
        when 101 then read_extended_object # ?e
        when 99 then read_class # ?c
        when 109 then read_module # ?m
        when 77 then read_class_or_module # ?M
        when 100 then read_data # ?d
        when 47 then read_regexp # ?/
        when 83 then read_struct # ?S
        when 67 then read_user_class # ?C
        else
          raise Error, "Unknown marshal type discriminator #{type.chr.inspect} (#{type})"
        end
      end

      STRING_E_SYMBOL = Elements::Symbol.new("E").freeze
      private_constant :STRING_E_SYMBOL

      def read_symbol
        len = read_integer
        if len == 1
          byte = read_byte
          if byte == 69 # ?E
            STRING_E_SYMBOL
          else
            Elements::Symbol.new(byte.chr)
          end
        else
          name = read_bytes(len)
          Elements::Symbol.new(name)
        end
      end

      EMPTY_STRING = Elements::String.new("".b.freeze).freeze
      private_constant :EMPTY_STRING

      def read_string
        length = read_integer
        return EMPTY_STRING if length == 0
        str = read_bytes(length)
        Elements::String.new(str)
      end

      def read_true
        Elements::True::TRUE
      end

      def read_false
        Elements::False::FALSE
      end

      def read_user_defined
        name = read_element
        binary_string = read_bytes(read_integer)
        Elements::UserDefined.new(name, binary_string)
      end

      EMPTY_ARRAY = Elements::Array.new([].freeze).freeze
      private_constant :EMPTY_ARRAY

      def read_array
        length = read_integer
        return EMPTY_ARRAY if length == 0
        raise NegativeLengthError if length < 0
        elements = Array.new(length) do
          read_element
        end
        Elements::Array.new(elements)
      end

      def read_object_with_ivars
        object = read_element
        length = read_integer
        raise NegativeLengthError if length < 0
        ivars = Array.new(length) do
          [read_element, read_element]
        end
        Elements::WithIvars.new(object, ivars)
      end

      def read_symbol_link
        offset = read_integer
        Elements::SymbolLink.new(offset)
      end

      def read_user_marshal
        name = read_element
        data = read_element
        Elements::UserMarshal.new(name, data)
      end

      # profiling bundle install --full-index shows that
      # offset 6 is by far the most common object link,
      # so we special case it to avoid allocating a new
      # object a third of the time.
      # the following are all the object links that
      # appear more than 10000 times in my profiling

      OBJECT_LINKS = {
        6 => Elements::ObjectLink.new(6).freeze,
        30 => Elements::ObjectLink.new(30).freeze,
        81 => Elements::ObjectLink.new(81).freeze,
        34 => Elements::ObjectLink.new(34).freeze,
        38 => Elements::ObjectLink.new(38).freeze,
        50 => Elements::ObjectLink.new(50).freeze,
        91 => Elements::ObjectLink.new(91).freeze,
        42 => Elements::ObjectLink.new(42).freeze,
        46 => Elements::ObjectLink.new(46).freeze,
        150 => Elements::ObjectLink.new(150).freeze,
        100 => Elements::ObjectLink.new(100).freeze,
        104 => Elements::ObjectLink.new(104).freeze,
        108 => Elements::ObjectLink.new(108).freeze,
        242 => Elements::ObjectLink.new(242).freeze,
        246 => Elements::ObjectLink.new(246).freeze,
        139 => Elements::ObjectLink.new(139).freeze,
        143 => Elements::ObjectLink.new(143).freeze,
        114 => Elements::ObjectLink.new(114).freeze,
        308 => Elements::ObjectLink.new(308).freeze,
        200 => Elements::ObjectLink.new(200).freeze,
        54 => Elements::ObjectLink.new(54).freeze,
        62 => Elements::ObjectLink.new(62).freeze,
        1_286_245 => Elements::ObjectLink.new(1_286_245).freeze,
      }.freeze
      private_constant :OBJECT_LINKS

      def read_object_link
        offset = read_integer
        OBJECT_LINKS[offset] || Elements::ObjectLink.new(offset)
      end

      EMPTY_HASH = Elements::Hash.new([].freeze).freeze
      private_constant :EMPTY_HASH

      def read_hash
        length = read_integer
        return EMPTY_HASH if length == 0
        pairs = Array.new(length) do
          [read_element, read_element]
        end
        Elements::Hash.new(pairs)
      end

      def read_hash_with_default_value
        length = read_integer
        raise NegativeLengthError if length < 0
        pairs = Array.new(length) do
          [read_element, read_element]
        end
        default = read_element
        Elements::HashWithDefaultValue.new(pairs, default)
      end

      def read_object
        name = read_element
        object = Elements::Object.new(name)
        length = read_integer
        raise NegativeLengthError if length < 0
        ivars = Array.new(length) do
          [read_element, read_element]
        end
        Elements::WithIvars.new(object, ivars)
      end

      def read_nil
        Elements::Nil::NIL
      end

      def read_float
        string = read_bytes(read_integer)
        Elements::Float.new(string)
      end

      def read_bignum
        sign = read_byte
        data = read_bytes(read_integer * 2)
        Elements::Bignum.new(sign, data)
      end

      def read_extended_object
        raise NotImplementedError, "Reading Marshal objects of type extended_object is not implemented"
      end

      def read_class
        raise NotImplementedError, "Reading Marshal objects of type class is not implemented"
      end

      def read_module
        raise NotImplementedError, "Reading Marshal objects of type module is not implemented"
      end

      def read_class_or_module
        raise NotImplementedError, "Reading Marshal objects of type class_or_module is not implemented"
      end

      def read_data
        raise NotImplementedError, "Reading Marshal objects of type data is not implemented"
      end

      def read_regexp
        raise NotImplementedError, "Reading Marshal objects of type regexp is not implemented"
      end

      def read_struct
        raise NotImplementedError, "Reading Marshal objects of type struct is not implemented"
      end

      def read_user_class
        name = read_element
        wrapped_object = read_element
        Elements::UserClass.new(name, wrapped_object)
      end
    end
  end
end
PK(J[�X�008share/rubygems/rubygems/safe_marshal/visitors/visitor.rbnu�[���# frozen_string_literal: true

module Gem::SafeMarshal::Visitors
  class Visitor
    def visit(target)
      send DISPATCH.fetch(target.class), target
    end

    private

    DISPATCH = Gem::SafeMarshal::Elements.constants.each_with_object({}) do |c, h|
      next if c == :Element

      klass = Gem::SafeMarshal::Elements.const_get(c)
      h[klass] = :"visit_#{klass.name.gsub("::", "_")}"
      h.default = :visit_unknown_element
    end.compare_by_identity.freeze
    private_constant :DISPATCH

    def visit_unknown_element(e)
      raise ArgumentError, "Attempting to visit unknown element #{e.inspect}"
    end

    def visit_Gem_SafeMarshal_Elements_Array(target)
      target.elements.each {|e| visit(e) }
    end

    def visit_Gem_SafeMarshal_Elements_Bignum(target); end
    def visit_Gem_SafeMarshal_Elements_False(target); end
    def visit_Gem_SafeMarshal_Elements_Float(target); end

    def visit_Gem_SafeMarshal_Elements_Hash(target)
      target.pairs.each do |k, v|
        visit(k)
        visit(v)
      end
    end

    def visit_Gem_SafeMarshal_Elements_HashWithDefaultValue(target)
      visit_Gem_SafeMarshal_Elements_Hash(target)
      visit(target.default)
    end

    def visit_Gem_SafeMarshal_Elements_Integer(target); end
    def visit_Gem_SafeMarshal_Elements_Nil(target); end

    def visit_Gem_SafeMarshal_Elements_Object(target)
      visit(target.name)
    end

    def visit_Gem_SafeMarshal_Elements_ObjectLink(target); end
    def visit_Gem_SafeMarshal_Elements_String(target); end
    def visit_Gem_SafeMarshal_Elements_Symbol(target); end
    def visit_Gem_SafeMarshal_Elements_SymbolLink(target); end
    def visit_Gem_SafeMarshal_Elements_True(target); end

    def visit_Gem_SafeMarshal_Elements_UserDefined(target)
      visit(target.name)
    end

    def visit_Gem_SafeMarshal_Elements_UserMarshal(target)
      visit(target.name)
      visit(target.data)
    end

    def visit_Gem_SafeMarshal_Elements_WithIvars(target)
      visit(target.object)
      target.ivars.each do |k, v|
        visit(k)
        visit(v)
      end
    end
  end
end
PK(J[�I�m��?share/rubygems/rubygems/safe_marshal/visitors/stream_printer.rbnu�[���# frozen_string_literal: true

require_relative "visitor"

module Gem::SafeMarshal
  module Visitors
    class StreamPrinter < Visitor
      def initialize(io, indent: "")
        @io = io
        @indent = indent
        @level = 0
      end

      def visit(target)
        @io.write("#{@indent * @level}#{target.class}")
        target.instance_variables.each do |ivar|
          value = target.instance_variable_get(ivar)
          next if Elements::Element === value || Array === value
          @io.write(" #{ivar}=#{value.inspect}")
        end
        @io.write("\n")
        begin
          @level += 1
          super
        ensure
          @level -= 1
        end
      end
    end
  end
end
PK(J[<VDs�.�.8share/rubygems/rubygems/safe_marshal/visitors/to_ruby.rbnu�[���# frozen_string_literal: true

require_relative "visitor"

module Gem::SafeMarshal
  module Visitors
    class ToRuby < Visitor
      def initialize(permitted_classes:, permitted_symbols:, permitted_ivars:)
        @permitted_classes = permitted_classes
        @permitted_symbols = ["E"].concat(permitted_symbols).concat(permitted_classes)
        @permitted_ivars = permitted_ivars

        @objects = []
        @symbols = []
        @class_cache = {}

        @stack = ["root"]
        @stack_idx = 1
      end

      def inspect # :nodoc:
        format("#<%s permitted_classes: %p permitted_symbols: %p permitted_ivars: %p>",
          self.class, @permitted_classes, @permitted_symbols, @permitted_ivars)
      end

      def visit(target)
        stack_idx = @stack_idx
        super
      ensure
        @stack_idx = stack_idx - 1
      end

      private

      def push_stack(element)
        @stack[@stack_idx] = element
        @stack_idx += 1
      end

      def visit_Gem_SafeMarshal_Elements_Array(a)
        array = register_object([])

        elements = a.elements
        size = elements.size
        idx = 0
        # not idiomatic, but there's a huge number of IMEMOs allocated here, so we avoid the block
        # because this is such a hot path when doing a bundle install with the full index
        while idx < size
          push_stack idx
          array << visit(elements[idx])
          idx += 1
        end

        array
      end

      def visit_Gem_SafeMarshal_Elements_Symbol(s)
        name = s.name
        raise UnpermittedSymbolError.new(symbol: name, stack: formatted_stack) unless @permitted_symbols.include?(name)
        visit_symbol_type(s)
      end

      def map_ivars(klass, ivars)
        stack_idx = @stack_idx
        ivars.map.with_index do |(k, v), i|
          @stack_idx = stack_idx

          push_stack "ivar_"
          push_stack i
          k = resolve_ivar(klass, k)

          @stack_idx = stack_idx
          push_stack k

          next k, visit(v)
        end
      end

      def visit_Gem_SafeMarshal_Elements_WithIvars(e)
        object_offset = @objects.size
        push_stack "object"
        object = visit(e.object)
        ivars = map_ivars(object.class, e.ivars)

        case e.object
        when Elements::UserDefined
          if object.class == ::Time
            internal = []

            ivars.reject! do |k, v|
              case k
              when :offset, :zone, :nano_num, :nano_den, :submicro
                internal << [k, v]
                true
              else
                false
              end
            end

            s = e.object.binary_string
            # 122 is the largest integer that can be represented in marshal in a single byte
            raise TimeTooLargeError.new("binary string too large", stack: formatted_stack) if s.bytesize > 122

            marshal_string = "\x04\bIu:\tTime".b
            marshal_string.concat(s.bytesize + 5)
            marshal_string << s
            # internal is limited to 5, so no overflow is possible
            marshal_string.concat(internal.size + 5)

            internal.each do |k, v|
              k = k.name
              # ivar name can't be too large because only known ivars are in the internal ivars list
              marshal_string.concat(":")
              marshal_string.concat(k.bytesize + 5)
              marshal_string.concat(k)
              dumped = Marshal.dump(v)
              dumped[0, 2] = ""
              marshal_string.concat(dumped)
            end

            object = @objects[object_offset] = Marshal.load(marshal_string)
          end
        when Elements::String
          enc = nil

          ivars.reject! do |k, v|
            case k
            when :E
              case v
              when TrueClass
                enc = "UTF-8"
              when FalseClass
                enc = "US-ASCII"
              else
                raise FormatError, "Unexpected value for String :E #{v.inspect}"
              end
            when :encoding
              enc = v
            else
              next false
            end
            true
          end

          object.force_encoding(enc) if enc
        end

        ivars.each do |k, v|
          object.instance_variable_set k, v
        end
        object
      end

      def visit_Gem_SafeMarshal_Elements_Hash(o)
        hash = register_object({})

        o.pairs.each_with_index do |(k, v), i|
          push_stack i
          k = visit(k)
          push_stack k
          hash[k] = visit(v)
        end

        hash
      end

      def visit_Gem_SafeMarshal_Elements_HashWithDefaultValue(o)
        hash = visit_Gem_SafeMarshal_Elements_Hash(o)
        push_stack :default
        hash.default = visit(o.default)
        hash
      end

      def visit_Gem_SafeMarshal_Elements_Object(o)
        register_object(resolve_class(o.name).allocate)
      end

      def visit_Gem_SafeMarshal_Elements_ObjectLink(o)
        @objects.fetch(o.offset)
      end

      def visit_Gem_SafeMarshal_Elements_SymbolLink(o)
        @symbols.fetch(o.offset)
      end

      def visit_Gem_SafeMarshal_Elements_UserDefined(o)
        register_object(call_method(resolve_class(o.name), :_load, o.binary_string))
      end

      def visit_Gem_SafeMarshal_Elements_UserMarshal(o)
        klass = resolve_class(o.name)
        compat = COMPAT_CLASSES.fetch(klass, nil)
        idx = @objects.size
        object = register_object(call_method(compat || klass, :allocate))

        push_stack :data
        ret = call_method(object, :marshal_load, visit(o.data))

        if compat
          object = @objects[idx] = ret
        end

        object
      end

      def visit_Gem_SafeMarshal_Elements_Integer(i)
        i.int
      end

      def visit_Gem_SafeMarshal_Elements_Nil(_)
        nil
      end

      def visit_Gem_SafeMarshal_Elements_True(_)
        true
      end

      def visit_Gem_SafeMarshal_Elements_False(_)
        false
      end

      def visit_Gem_SafeMarshal_Elements_String(s)
        register_object(+s.str)
      end

      def visit_Gem_SafeMarshal_Elements_Float(f)
        register_object(
          case f.string
          when "inf"
            ::Float::INFINITY
          when "-inf"
            -::Float::INFINITY
          when "nan"
            ::Float::NAN
          else
            f.string.to_f
          end
        )
      end

      def visit_Gem_SafeMarshal_Elements_Bignum(b)
        result = 0
        b.data.each_byte.with_index do |byte, exp|
          result += (byte * 2**(exp * 8))
        end

        case b.sign
        when 43 # ?+
          result
        when 45 # ?-
          -result
        else
          raise FormatError, "Unexpected sign for Bignum #{b.sign.chr.inspect} (#{b.sign})"
        end
      end

      def visit_Gem_SafeMarshal_Elements_UserClass(r)
        if resolve_class(r.name) == ::Hash && r.wrapped_object.is_a?(Elements::Hash)

          hash = register_object({}.compare_by_identity)

          o = r.wrapped_object
          o.pairs.each_with_index do |(k, v), i|
            push_stack i
            k = visit(k)
            push_stack k
            hash[k] = visit(v)
          end

          if o.is_a?(Elements::HashWithDefaultValue)
            push_stack :default
            hash.default = visit(o.default)
          end

          hash
        else
          raise UnsupportedError.new("Unsupported user class #{resolve_class(r.name)} in marshal stream", stack: formatted_stack)
        end
      end

      def resolve_class(n)
        @class_cache[n] ||= begin
          to_s = resolve_symbol_name(n)
          raise UnpermittedClassError.new(name: to_s, stack: formatted_stack) unless @permitted_classes.include?(to_s)
          visit_symbol_type(n)
          begin
            ::Object.const_get(to_s)
          rescue NameError
            raise ArgumentError, "Undefined class #{to_s.inspect}"
          end
        end
      end

      class RationalCompat
        def marshal_load(s)
          num, den = s
          raise ArgumentError, "Expected 2 ints" unless s.size == 2 && num.is_a?(Integer) && den.is_a?(Integer)
          Rational(num, den)
        end
      end
      private_constant :RationalCompat

      COMPAT_CLASSES = {}.tap do |h|
        h[Rational] = RationalCompat
      end.compare_by_identity.freeze
      private_constant :COMPAT_CLASSES

      def resolve_ivar(klass, name)
        to_s = resolve_symbol_name(name)

        raise UnpermittedIvarError.new(symbol: to_s, klass: klass, stack: formatted_stack) unless @permitted_ivars.fetch(klass.name, [].freeze).include?(to_s)

        visit_symbol_type(name)
      end

      def visit_symbol_type(element)
        case element
        when Elements::Symbol
          sym = element.name.to_sym
          @symbols << sym
          sym
        when Elements::SymbolLink
          visit_Gem_SafeMarshal_Elements_SymbolLink(element)
        end
      end

      # This is a hot method, so avoid respond_to? checks on every invocation
      if :read.respond_to?(:name)
        def resolve_symbol_name(element)
          case element
          when Elements::Symbol
            element.name
          when Elements::SymbolLink
            visit_Gem_SafeMarshal_Elements_SymbolLink(element).name
          else
            raise FormatError, "Expected symbol or symbol link, got #{element.inspect} @ #{formatted_stack.join(".")}"
          end
        end
      else
        def resolve_symbol_name(element)
          case element
          when Elements::Symbol
            element.name
          when Elements::SymbolLink
            visit_Gem_SafeMarshal_Elements_SymbolLink(element).to_s
          else
            raise FormatError, "Expected symbol or symbol link, got #{element.inspect} @ #{formatted_stack.join(".")}"
          end
        end
      end

      def register_object(o)
        @objects << o
        o
      end

      def call_method(receiver, method, *args)
        receiver.__send__(method, *args)
      rescue NoMethodError => e
        raise unless e.receiver == receiver

        raise MethodCallError, "Unable to call #{method.inspect} on #{receiver.inspect}, perhaps it is a class using marshal compat, which is not visible in ruby? #{e}"
      end

      def formatted_stack
        formatted = []
        @stack[0, @stack_idx].each do |e|
          if e.is_a?(Integer)
            if formatted.last == "ivar_"
              formatted[-1] = "ivar_#{e}"
            else
              formatted << "[#{e}]"
            end
          else
            formatted << e
          end
        end
        formatted
      end

      class Error < StandardError
      end

      class TimeTooLargeError < Error
        def initialize(message, stack:)
          super "#{message} @ #{stack.join "."}"
        end
      end

      class UnpermittedSymbolError < Error
        def initialize(symbol:, stack:)
          @symbol = symbol
          @stack = stack
          super "Attempting to load unpermitted symbol #{symbol.inspect} @ #{stack.join "."}"
        end
      end

      class UnpermittedIvarError < Error
        def initialize(symbol:, klass:, stack:)
          @symbol = symbol
          @klass = klass
          @stack = stack
          super "Attempting to set unpermitted ivar #{symbol.inspect} on object of class #{klass} @ #{stack.join "."}"
        end
      end

      class UnpermittedClassError < Error
        def initialize(name:, stack:)
          @name = name
          @stack = stack
          super "Attempting to load unpermitted class #{name.inspect} @ #{stack.join "."}"
        end
      end

      class UnsupportedError < Error
        def initialize(message, stack:)
          super "#{message} @ #{stack.join "."}"
        end
      end

      class FormatError < Error
      end

      class MethodCallError < Error
      end
    end
  end
end
PK(J[""5���share/rubygems/rubygems/rdoc.rbnu�[���# frozen_string_literal: true

require_relative "../rubygems"

begin
  require "rdoc/rubygems_hook"
  module Gem
    ##
    # Returns whether RDoc defines its own install hooks through a RubyGems
    # plugin. This and whatever is guarded by it can be removed once no
    # supported Ruby ships with RDoc older than 6.9.0.

    def self.rdoc_hooks_defined_via_plugin?
      Gem::Version.new(::RDoc::VERSION) >= Gem::Version.new("6.9.0")
    end

    if rdoc_hooks_defined_via_plugin?
      RDoc = ::RDoc::RubyGemsHook
    else
      RDoc = ::RDoc::RubygemsHook

      Gem.done_installing(&Gem::RDoc.method(:generation_hook))
    end
  end
rescue LoadError
end
PK(J[�t�
BBshare/rubygems/rubygems/text.rbnu�[���# frozen_string_literal: true

##
# A collection of text-wrangling methods

module Gem::Text
  ##
  # Remove any non-printable characters and make the text suitable for
  # printing.
  def clean_text(text)
    text.gsub(/[\000-\b\v-\f\016-\037\177]/, ".")
  end

  def truncate_text(text, description, max_length = 100_000)
    raise ArgumentError, "max_length must be positive" unless max_length > 0
    return text if text.size <= max_length
    "Truncating #{description} to #{max_length.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse} characters:\n" + text[0, max_length]
  end

  ##
  # Wraps +text+ to +wrap+ characters and optionally indents by +indent+
  # characters

  def format_text(text, wrap, indent=0)
    result = []
    work = clean_text(text)

    while work.length > wrap do
      if work =~ /^(.{0,#{wrap}})[ \n]/
        result << $1.rstrip
        work.slice!(0, $&.length)
      else
        result << work.slice!(0, wrap)
      end
    end

    result << work if work.length.nonzero?
    result.join("\n").gsub(/^/, " " * indent)
  end

  def min3(a, b, c) # :nodoc:
    if a < b && a < c
      a
    elsif b < c
      b
    else
      c
    end
  end

  # Returns a value representing the "cost" of transforming str1 into str2
  # Vendored version of DidYouMean::Levenshtein.distance from the ruby/did_you_mean gem @ 1.4.0
  # https://github.com/ruby/did_you_mean/blob/2ddf39b874808685965dbc47d344cf6c7651807c/lib/did_you_mean/levenshtein.rb#L7-L37
  def levenshtein_distance(str1, str2)
    n = str1.length
    m = str2.length
    return m if n.zero?
    return n if m.zero?

    d = (0..m).to_a
    x = nil

    # to avoid duplicating an enumerable object, create it outside of the loop
    str2_codepoints = str2.codepoints

    str1.each_codepoint.with_index(1) do |char1, i|
      j = 0
      while j < m
        cost = char1 == str2_codepoints[j] ? 0 : 1
        x = min3(
          d[j + 1] + 1, # insertion
          i + 1,      # deletion
          d[j] + cost # substitution
        )
        d[j] = i
        i = x

        j += 1
      end
      d[m] = x
    end

    x
  end
end
PK(J[0�VV�,�,.share/rubygems/rubygems/gemcutter_utilities.rbnu�[���# frozen_string_literal: true

require_relative "remote_fetcher"
require_relative "text"
require_relative "gemcutter_utilities/webauthn_listener"
require_relative "gemcutter_utilities/webauthn_poller"

##
# Utility methods for using the RubyGems API.

module Gem::GemcutterUtilities
  ERROR_CODE = 1
  API_SCOPES = [:index_rubygems, :push_rubygem, :yank_rubygem, :add_owner, :remove_owner, :access_webhooks].freeze
  EXCLUSIVELY_API_SCOPES = [:show_dashboard].freeze

  include Gem::Text

  attr_writer :host
  attr_writer :scope

  ##
  # Add the --key option

  def add_key_option
    add_option("-k", "--key KEYNAME", Symbol,
               "Use the given API key",
               "from #{Gem.configuration.credentials_path}") do |value,options|
      options[:key] = value
    end
  end

  ##
  # Add the --otp option

  def add_otp_option
    add_option("--otp CODE",
               "Digit code for multifactor authentication",
               "You can also use the environment variable GEM_HOST_OTP_CODE") do |value, options|
      options[:otp] = value
    end
  end

  ##
  # The API key from the command options or from the user's configuration.

  def api_key
    if ENV["GEM_HOST_API_KEY"]
      ENV["GEM_HOST_API_KEY"]
    elsif options[:key]
      verify_api_key options[:key]
    elsif Gem.configuration.api_keys.key?(host)
      Gem.configuration.api_keys[host]
    else
      Gem.configuration.rubygems_api_key
    end
  end

  ##
  # The OTP code from the command options or from the user's configuration.

  def otp
    options[:otp] || ENV["GEM_HOST_OTP_CODE"]
  end

  def webauthn_enabled?
    options[:webauthn]
  end

  ##
  # The host to connect to either from the RUBYGEMS_HOST environment variable
  # or from the user's configuration

  def host
    configured_host = Gem.host unless
      Gem.configuration.disable_default_gem_server

    @host ||=
      begin
        env_rubygems_host = ENV["RUBYGEMS_HOST"]
        env_rubygems_host = nil if env_rubygems_host&.empty?

        env_rubygems_host || configured_host
      end
  end

  ##
  # Creates an RubyGems API to +host+ and +path+ with the given HTTP +method+.
  #
  # If +allowed_push_host+ metadata is present, then it will only allow that host.

  def rubygems_api_request(method, path, host = nil, allowed_push_host = nil, scope: nil, credentials: {}, &block)
    require_relative "vendored_net_http"

    self.host = host if host
    unless self.host
      alert_error "You must specify a gem server"
      terminate_interaction(ERROR_CODE)
    end

    if allowed_push_host
      allowed_host_uri = Gem::URI.parse(allowed_push_host)
      host_uri         = Gem::URI.parse(self.host)

      unless (host_uri.scheme == allowed_host_uri.scheme) && (host_uri.host == allowed_host_uri.host)
        alert_error "#{self.host.inspect} is not allowed by the gemspec, which only allows #{allowed_push_host.inspect}"
        terminate_interaction(ERROR_CODE)
      end
    end

    uri = Gem::URI.parse "#{self.host}/#{path}"
    response = request_with_otp(method, uri, &block)

    if mfa_unauthorized?(response)
      fetch_otp(credentials)
      response = request_with_otp(method, uri, &block)
    end

    if api_key_forbidden?(response)
      update_scope(scope)
      request_with_otp(method, uri, &block)
    else
      response
    end
  end

  def mfa_unauthorized?(response)
    response.is_a?(Gem::Net::HTTPUnauthorized) && response.body.start_with?("You have enabled multifactor authentication")
  end

  def update_scope(scope)
    sign_in_host        = host
    pretty_host         = pretty_host(sign_in_host)
    update_scope_params = { scope => true }

    say "The existing key doesn't have access of #{scope} on #{pretty_host}. Please sign in to update access."

    identifier = ask "Username/email: "
    password   = ask_for_password "      Password: "

    response = rubygems_api_request(:put, "api/v1/api_key",
                                    sign_in_host, scope: scope) do |request|
      request.basic_auth identifier, password
      request.body = Gem::URI.encode_www_form({ api_key: api_key }.merge(update_scope_params))
    end

    with_response response do |_resp|
      say "Added #{scope} scope to the existing API key"
    end
  end

  ##
  # Signs in with the RubyGems API at +sign_in_host+ and sets the rubygems API
  # key.

  def sign_in(sign_in_host = nil, scope: nil)
    sign_in_host ||= host
    return if api_key

    pretty_host = pretty_host(sign_in_host)

    say "Enter your #{pretty_host} credentials."
    say "Don't have an account yet? " \
        "Create one at #{sign_in_host}/sign_up"

    identifier = ask "Username/email: "
    password   = ask_for_password "      Password: "
    say "\n"

    key_name     = get_key_name(scope)
    scope_params = get_scope_params(scope)
    profile      = get_user_profile(identifier, password)
    mfa_params   = get_mfa_params(profile)
    all_params   = scope_params.merge(mfa_params)
    warning      = profile["warning"]
    credentials  = { identifier: identifier, password: password }

    say "#{warning}\n" if warning

    response = rubygems_api_request(:post, "api/v1/api_key",
                                    sign_in_host, credentials: credentials, scope: scope) do |request|
      request.basic_auth identifier, password
      request.body = Gem::URI.encode_www_form({ name: key_name }.merge(all_params))
    end

    with_response response do |resp|
      say "Signed in with API key: #{key_name}."
      set_api_key host, resp.body
    end
  end

  ##
  # Retrieves the pre-configured API key +key+ or terminates interaction with
  # an error.

  def verify_api_key(key)
    if Gem.configuration.api_keys.key? key
      Gem.configuration.api_keys[key]
    else
      alert_error "No such API key. Please add it to your configuration (done automatically on initial `gem push`)."
      terminate_interaction(ERROR_CODE)
    end
  end

  ##
  # If +response+ is an HTTP Success (2XX) response, yields the response if a
  # block was given or shows the response body to the user.
  #
  # If the response was not successful, shows an error to the user including
  # the +error_prefix+ and the response body. If the response was a permanent redirect,
  # shows an error to the user including the redirect location.

  def with_response(response, error_prefix = nil)
    case response
    when Gem::Net::HTTPSuccess then
      if block_given?
        yield response
      else
        say clean_text(response.body)
      end
    when Gem::Net::HTTPPermanentRedirect, Gem::Net::HTTPRedirection then
      message = "The request has redirected permanently to #{response["location"]}. Please check your defined push host URL."
      message = "#{error_prefix}: #{message}" if error_prefix

      say clean_text(message)
      terminate_interaction(ERROR_CODE)
    else
      message = response.body
      message = "#{error_prefix}: #{message}" if error_prefix

      say clean_text(message)
      terminate_interaction(ERROR_CODE)
    end
  end

  ##
  # Returns true when the user has enabled multifactor authentication from
  # +response+ text and no otp provided by options.

  def set_api_key(host, key)
    if default_host?
      Gem.configuration.rubygems_api_key = key
    else
      Gem.configuration.set_api_key host, key
    end
  end

  private

  def request_with_otp(method, uri, &block)
    request_method = Gem::Net::HTTP.const_get method.to_s.capitalize

    Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
      req["OTP"] = otp if otp
      block.call(req)
    end
  ensure
    options[:otp] = nil if webauthn_enabled?
  end

  def fetch_otp(credentials)
    options[:otp] = if webauthn_url = webauthn_verification_url(credentials)
      server = TCPServer.new 0
      port = server.addr[1].to_s

      url_with_port = "#{webauthn_url}?port=#{port}"
      say "You have enabled multi-factor authentication. Please visit #{url_with_port} to authenticate via security device. If you can't verify using WebAuthn but have OTP enabled, you can re-run the gem signin command with the `--otp [your_code]` option."

      threads = [WebauthnListener.listener_thread(host, server), WebauthnPoller.poll_thread(options, host, webauthn_url, credentials)]
      otp_thread = wait_for_otp_thread(*threads)

      threads.each(&:join)

      if error = otp_thread[:error]
        alert_error error.message
        terminate_interaction(1)
      end

      options[:webauthn] = true

      say "You are verified with a security device. You may close the browser window."
      otp_thread[:otp]
    else
      say "You have enabled multi-factor authentication. Please enter OTP code."
      ask "Code: "
    end
  end

  def wait_for_otp_thread(*threads)
    loop do
      threads.each do |otp_thread|
        return otp_thread unless otp_thread.alive?
      end
      sleep 0.1
    end
  ensure
    threads.each(&:exit)
  end

  def webauthn_verification_url(credentials)
    response = rubygems_api_request(:post, "api/v1/webauthn_verification") do |request|
      if credentials.empty?
        request.add_field "Authorization", api_key
      else
        request.basic_auth credentials[:identifier], credentials[:password]
      end
    end
    response.is_a?(Gem::Net::HTTPSuccess) ? response.body : nil
  end

  def pretty_host(host)
    if default_host?
      "RubyGems.org"
    else
      host
    end
  end

  def get_scope_params(scope)
    scope_params = { index_rubygems: true }

    if scope
      scope_params = { scope => true }
    else
      say "The default access scope is:"
      scope_params.each do |k, _v|
        say "  #{k}: y"
      end
      say "\n"
      customise = ask_yes_no("Do you want to customise scopes?", false)
      if customise
        EXCLUSIVELY_API_SCOPES.each do |excl_scope|
          selected = ask_yes_no("#{excl_scope} (exclusive scope, answering yes will not prompt for other scopes)", false)
          next unless selected

          return { excl_scope => true }
        end

        scope_params = {}

        API_SCOPES.each do |s|
          selected = ask_yes_no(s.to_s, false)
          scope_params[s] = true if selected
        end
      end
      say "\n"
    end

    scope_params
  end

  def default_host?
    host == Gem::DEFAULT_HOST
  end

  def get_user_profile(identifier, password)
    return {} unless default_host?

    response = rubygems_api_request(:get, "api/v1/profile/me.yaml") do |request|
      request.basic_auth identifier, password
    end

    with_response response do |resp|
      Gem::ConfigFile.load_with_rubygems_config_hash(clean_text(resp.body))
    end
  end

  def get_mfa_params(profile)
    mfa_level = profile["mfa"]
    params = {}
    if ["ui_only", "ui_and_gem_signin"].include?(mfa_level)
      selected = ask_yes_no("Would you like to enable MFA for this key? (strongly recommended)")
      params["mfa"] = true if selected
    end
    params
  end

  def get_key_name(scope)
    hostname = Socket.gethostname || "unknown-host"
    user = ENV["USER"] || ENV["USERNAME"] || "unknown-user"
    ts = Time.now.strftime("%Y%m%d%H%M%S")
    default_key_name = "#{hostname}-#{user}-#{ts}"

    key_name = ask "API Key name [#{default_key_name}]: " unless scope
    if key_name.nil? || key_name.empty?
      default_key_name
    else
      key_name
    end
  end

  def api_key_forbidden?(response)
    response.is_a?(Gem::Net::HTTPForbidden) && response.body.start_with?("The API key doesn't have access")
  end
end
PK(J[}y�S��%share/rubygems/rubygems/exceptions.rbnu�[���# frozen_string_literal: true

require_relative "deprecate"
require_relative "unknown_command_spell_checker"

##
# Base exception class for RubyGems.  All exception raised by RubyGems are a
# subclass of this one.
class Gem::Exception < RuntimeError; end

class Gem::CommandLineError < Gem::Exception; end

class Gem::UnknownCommandError < Gem::Exception
  attr_reader :unknown_command

  def initialize(unknown_command)
    self.class.attach_correctable

    @unknown_command = unknown_command
    super("Unknown command #{unknown_command}")
  end

  def self.attach_correctable
    return if defined?(@attached)

    if defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
      if DidYouMean.respond_to?(:correct_error)
        DidYouMean.correct_error(Gem::UnknownCommandError, Gem::UnknownCommandSpellChecker)
      else
        DidYouMean::SPELL_CHECKERS["Gem::UnknownCommandError"] =
          Gem::UnknownCommandSpellChecker

        prepend DidYouMean::Correctable
      end
    end

    @attached = true
  end
end

class Gem::DependencyError < Gem::Exception; end

class Gem::DependencyRemovalException < Gem::Exception; end

##
# Raised by Gem::Resolver when a Gem::Dependency::Conflict reaches the
# toplevel.  Indicates which dependencies were incompatible through #conflict
# and #conflicting_dependencies

class Gem::DependencyResolutionError < Gem::DependencyError
  attr_reader :conflict

  def initialize(conflict)
    @conflict = conflict
    a, b = conflicting_dependencies

    super "conflicting dependencies #{a} and #{b}\n#{@conflict.explanation}"
  end

  def conflicting_dependencies
    @conflict.conflicting_dependencies
  end
end

##
# Raised when attempting to uninstall a gem that isn't in GEM_HOME.

class Gem::GemNotInHomeException < Gem::Exception
  attr_accessor :spec
end

###
# Raised when removing a gem with the uninstall command fails

class Gem::UninstallError < Gem::Exception
  attr_accessor :spec
end

class Gem::DocumentError < Gem::Exception; end

##
# Potentially raised when a specification is validated.
class Gem::EndOfYAMLException < Gem::Exception; end

##
# Signals that a file permission error is preventing the user from
# operating on the given directory.

class Gem::FilePermissionError < Gem::Exception
  attr_reader :directory

  def initialize(directory)
    @directory = directory

    super "You don't have write permissions for the #{directory} directory."
  end
end

##
# Used to raise parsing and loading errors
class Gem::FormatException < Gem::Exception
  attr_accessor :file_path
end

class Gem::GemNotFoundException < Gem::Exception; end

class Gem::SpecificGemNotFoundException < Gem::GemNotFoundException
  ##
  # Creates a new SpecificGemNotFoundException for a gem with the given +name+
  # and +version+.  Any +errors+ encountered when attempting to find the gem
  # are also stored.

  def initialize(name, version, errors=nil)
    super "Could not find a valid gem '#{name}' (#{version}) locally or in a repository"

    @name = name
    @version = version
    @errors = errors
  end

  ##
  # The name of the gem that could not be found.

  attr_reader :name

  ##
  # The version of the gem that could not be found.

  attr_reader :version

  ##
  # Errors encountered attempting to find the gem.

  attr_reader :errors
end

Gem.deprecate_constant :SpecificGemNotFoundException

##
# Raised by Gem::Resolver when dependencies conflict and create the
# inability to find a valid possible spec for a request.

class Gem::ImpossibleDependenciesError < Gem::Exception
  attr_reader :conflicts
  attr_reader :request

  def initialize(request, conflicts)
    @request   = request
    @conflicts = conflicts

    super build_message
  end

  def build_message # :nodoc:
    requester  = @request.requester
    requester  = requester ? requester.spec.full_name : "The user"
    dependency = @request.dependency

    message = "#{requester} requires #{dependency} but it conflicted:\n".dup

    @conflicts.each do |_, conflict|
      message << conflict.explanation
    end

    message
  end

  def dependency
    @request.dependency
  end
end

class Gem::InstallError < Gem::Exception; end

class Gem::RuntimeRequirementNotMetError < Gem::InstallError
  attr_accessor :suggestion
  def message
    [suggestion, super].compact.join("\n\t")
  end
end

##
# Potentially raised when a specification is validated.
class Gem::InvalidSpecificationException < Gem::Exception; end

class Gem::OperationNotSupportedError < Gem::Exception; end

##
# Signals that a remote operation cannot be conducted, probably due to not
# being connected (or just not finding host).
#--
# TODO: create a method that tests connection to the preferred gems server.
# All code dealing with remote operations will want this.  Failure in that
# method should raise this error.
class Gem::RemoteError < Gem::Exception; end

class Gem::RemoteInstallationCancelled < Gem::Exception; end

class Gem::RemoteInstallationSkipped < Gem::Exception; end

##
# Represents an error communicating via HTTP.
class Gem::RemoteSourceException < Gem::Exception; end

##
# Raised when a gem dependencies file specifies a ruby version that does not
# match the current version.

class Gem::RubyVersionMismatch < Gem::Exception; end

##
# Raised by Gem::Validator when something is not right in a gem.

class Gem::VerificationError < Gem::Exception; end

##
# Raised by Gem::WebauthnListener when an error occurs during security
# device verification.

class Gem::WebauthnVerificationError < Gem::Exception
  def initialize(message)
    super "Security device verification failed: #{message}"
  end
end

##
# Raised to indicate that a system exit should occur with the specified
# exit_code

class Gem::SystemExitException < SystemExit
  ##
  # The exit code for the process

  alias_method :exit_code, :status

  ##
  # Creates a new SystemExitException with the given +exit_code+

  def initialize(exit_code)
    super exit_code, "Exiting RubyGems with exit_code #{exit_code}"
  end
end

##
# Raised by Resolver when a dependency requests a gem for which
# there is no spec.

class Gem::UnsatisfiableDependencyError < Gem::DependencyError
  ##
  # The unsatisfiable dependency.  This is a
  # Gem::Resolver::DependencyRequest, not a Gem::Dependency

  attr_reader :dependency

  ##
  # Errors encountered which may have contributed to this exception

  attr_accessor :errors

  ##
  # Creates a new UnsatisfiableDependencyError for the unsatisfiable
  # Gem::Resolver::DependencyRequest +dep+

  def initialize(dep, platform_mismatch=nil)
    if platform_mismatch && !platform_mismatch.empty?
      plats = platform_mismatch.map {|x| x.platform.to_s }.sort.uniq
      super "Unable to resolve dependency: No match for '#{dep}' on this platform. Found: #{plats.join(", ")}"
    else
      if dep.explicit?
        super "Unable to resolve dependency: user requested '#{dep}'"
      else
        super "Unable to resolve dependency: '#{dep.request_context}' requires '#{dep}'"
      end
    end

    @dependency = dep
    @errors     = []
  end

  ##
  # The name of the unresolved dependency

  def name
    @dependency.name
  end

  ##
  # The Requirement of the unresolved dependency (not Version).

  def version
    @dependency.requirement
  end
end
PK(J[ovc���'share/rubygems/rubygems/spec_fetcher.rbnu�[���# frozen_string_literal: true

require_relative "remote_fetcher"
require_relative "user_interaction"
require_relative "errors"
require_relative "text"
require_relative "name_tuple"

##
# SpecFetcher handles metadata updates from remote gem repositories.

class Gem::SpecFetcher
  include Gem::UserInteraction
  include Gem::Text

  ##
  # Cache of latest specs

  attr_reader :latest_specs # :nodoc:

  ##
  # Sources for this SpecFetcher

  attr_reader :sources # :nodoc:

  ##
  # Cache of all released specs

  attr_reader :specs # :nodoc:

  ##
  # Cache of prerelease specs

  attr_reader :prerelease_specs # :nodoc:

  @fetcher = nil

  ##
  # Default fetcher instance.  Use this instead of ::new to reduce object
  # allocation.

  def self.fetcher
    @fetcher ||= new
  end

  def self.fetcher=(fetcher) # :nodoc:
    @fetcher = fetcher
  end

  ##
  # Creates a new SpecFetcher.  Ordinarily you want to use the default fetcher
  # from Gem::SpecFetcher::fetcher which uses the Gem.sources.
  #
  # If you need to retrieve specifications from a different +source+, you can
  # send it as an argument.

  def initialize(sources = nil)
    @sources = sources || Gem.sources

    @update_cache =
      begin
        File.stat(Gem.user_home).uid == Process.uid
      rescue Errno::EACCES, Errno::ENOENT
        false
      end

    @specs = {}
    @latest_specs = {}
    @prerelease_specs = {}

    @caches = {
      latest: @latest_specs,
      prerelease: @prerelease_specs,
      released: @specs,
    }

    @fetcher = Gem::RemoteFetcher.fetcher
  end

  ##
  #
  # Find and fetch gem name tuples that match +dependency+.
  #
  # If +matching_platform+ is false, gems for all platforms are returned.

  def search_for_dependency(dependency, matching_platform=true)
    found = {}

    rejected_specs = {}

    list, errors = available_specs(dependency.identity)

    list.each do |source, specs|
      if dependency.name.is_a?(String) && specs.respond_to?(:bsearch)
        start_index = (0...specs.length).bsearch {|i| specs[i].name >= dependency.name }
        end_index   = (0...specs.length).bsearch {|i| specs[i].name > dependency.name }
        specs = specs[start_index...end_index] if start_index && end_index
      end

      found[source] = specs.select do |tup|
        if dependency.match?(tup)
          if matching_platform && !Gem::Platform.match_gem?(tup.platform, tup.name)
            pm = (
              rejected_specs[dependency] ||= \
                Gem::PlatformMismatch.new(tup.name, tup.version))
            pm.add_platform tup.platform
            false
          else
            true
          end
        end
      end
    end

    errors += rejected_specs.values

    tuples = []

    found.each do |source, specs|
      specs.each do |s|
        tuples << [s, source]
      end
    end

    tuples = tuples.sort_by {|x| x[0].version }

    [tuples, errors]
  end

  ##
  # Return all gem name tuples who's names match +obj+

  def detect(type=:complete)
    tuples = []

    list, _ = available_specs(type)
    list.each do |source, specs|
      specs.each do |tup|
        if yield(tup)
          tuples << [tup, source]
        end
      end
    end

    tuples
  end

  ##
  # Find and fetch specs that match +dependency+.
  #
  # If +matching_platform+ is false, gems for all platforms are returned.

  def spec_for_dependency(dependency, matching_platform=true)
    tuples, errors = search_for_dependency(dependency, matching_platform)

    specs = []
    tuples.each do |tup, source|
      spec = source.fetch_spec(tup)
    rescue Gem::RemoteFetcher::FetchError => e
      errors << Gem::SourceFetchProblem.new(source, e)
    else
      specs << [spec, source]
    end

    [specs, errors]
  end

  ##
  # Suggests gems based on the supplied +gem_name+. Returns an array of
  # alternative gem names.

  def suggest_gems_from_name(gem_name, type = :latest, num_results = 5)
    gem_name = gem_name.downcase.tr("_-", "")

    # All results for 3-character-or-shorter (minus hyphens/underscores) gem
    # names get rejected, so we just return an empty array immediately instead.
    return [] if gem_name.length <= 3

    max   = gem_name.size / 2
    names = available_specs(type).first.values.flatten(1)

    min_length = gem_name.length - max
    max_length = gem_name.length + max

    gem_name_with_postfix = "#{gem_name}ruby"
    gem_name_with_prefix = "ruby#{gem_name}"

    matches = names.filter_map do |n|
      len = n.name.length
      # If the gem doesn't support the current platform, bail early.
      next unless n.match_platform?

      # If the length is min_length or shorter, we've done `max` deletions.
      # This would be rejected later, so we skip it for performance.
      next if len <= min_length

      # The candidate name, normalized the same as gem_name.
      normalized_name = n.name.downcase
      normalized_name.tr!("_-", "")

      # If the gem is "{NAME}-ruby" and "ruby-{NAME}", we want to return it.
      # But we already removed hyphens, so we check "{NAME}ruby" and "ruby{NAME}".
      next [n.name, 0] if normalized_name == gem_name_with_postfix
      next [n.name, 0] if normalized_name == gem_name_with_prefix

      # If the length is max_length or longer, we've done `max` insertions.
      # This would be rejected later, so we skip it for performance.
      next if len >= max_length

      # If we found an exact match (after stripping underscores and hyphens),
      # that's our most likely candidate.
      # Return it immediately, and skip the rest of the loop.
      return [n.name] if normalized_name == gem_name

      distance = levenshtein_distance gem_name, normalized_name

      # Skip current candidate, if the edit distance is greater than allowed.
      next if distance >= max

      # If all else fails, return the name and the calculated distance.
      [n.name, distance]
    end

    matches = if matches.empty? && type != :prerelease
      suggest_gems_from_name gem_name, :prerelease
    else
      matches.uniq.sort_by {|_name, dist| dist }
    end

    matches.map {|name, _dist| name }.uniq.first(num_results)
  end

  ##
  # Returns a list of gems available for each source in Gem::sources.
  #
  # +type+ can be one of 3 values:
  # :released   => Return the list of all released specs
  # :complete   => Return the list of all specs
  # :latest     => Return the list of only the highest version of each gem
  # :prerelease => Return the list of all prerelease only specs
  #

  def available_specs(type)
    errors = []
    list = {}

    @sources.each_source do |source|
      names = case type
              when :latest
                tuples_for source, :latest
              when :released
                tuples_for source, :released
              when :complete
                names =
                  tuples_for(source, :prerelease, true) +
                  tuples_for(source, :released)

                names.sort
              when :abs_latest
                names =
                  tuples_for(source, :prerelease, true) +
                  tuples_for(source, :latest)

                names.sort
              when :prerelease
                tuples_for(source, :prerelease)
              else
                raise Gem::Exception, "Unknown type - :#{type}"
      end
    rescue Gem::RemoteFetcher::FetchError => e
      errors << Gem::SourceFetchProblem.new(source, e)
    else
      list[source] = names
    end

    [list, errors]
  end

  ##
  # Retrieves NameTuples from +source+ of the given +type+ (:prerelease,
  # etc.).  If +gracefully_ignore+ is true, errors are ignored.

  def tuples_for(source, type, gracefully_ignore=false) # :nodoc:
    @caches[type][source.uri] ||=
      source.load_specs(type).sort_by(&:name)
  rescue Gem::RemoteFetcher::FetchError
    raise unless gracefully_ignore
    []
  end
end
PK(J[��N��%share/rubygems/rubygems/gem_runner.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "../rubygems"
require_relative "command_manager"
require_relative "deprecate"

##
# Run an instance of the gem program.
#
# Gem::GemRunner is only intended for internal use by RubyGems itself.  It
# does not form any public API and may change at any time for any reason.
#
# If you would like to duplicate functionality of `gem` commands, use the
# classes they call directly.

class Gem::GemRunner
  def initialize
    @command_manager_class = Gem::CommandManager
    @config_file_class = Gem::ConfigFile
  end

  ##
  # Run the gem command with the following arguments.

  def run(args)
    validate_encoding args
    build_args = extract_build_args args

    do_configuration args

    begin
      Gem.load_env_plugins
    rescue StandardError
      nil
    end
    Gem.load_plugins

    cmd = @command_manager_class.instance

    cmd.command_names.each do |command_name|
      config_args = Gem.configuration[command_name]
      config_args = case config_args
                    when String
                      config_args.split " "
                    else
                      Array(config_args)
      end
      Gem::Command.add_specific_extra_args command_name, config_args
    end

    cmd.run Gem.configuration.args, build_args
  end

  ##
  # Separates the build arguments (those following <code>--</code>) from the
  # other arguments in the list.

  def extract_build_args(args) # :nodoc:
    return [] unless offset = args.index("--")

    build_args = args.slice!(offset...args.length)

    build_args.shift

    build_args
  end

  private

  def validate_encoding(args)
    invalid_arg = args.find {|arg| !arg.valid_encoding? }

    if invalid_arg
      raise Gem::OptionParser::InvalidArgument.new("'#{invalid_arg.scrub}' has invalid encoding")
    end
  end

  def do_configuration(args)
    Gem.configuration = @config_file_class.new(args)
    Gem.use_paths Gem.configuration[:gemhome], Gem.configuration[:gempath]
    Gem::Command.extra_args = Gem.configuration[:gem]
  end
end
PK(J[���б�'share/rubygems/rubygems/safe_marshal.rbnu�[���# frozen_string_literal: true

require "stringio"

require_relative "safe_marshal/reader"
require_relative "safe_marshal/visitors/to_ruby"

module Gem
  ###
  # This module is used for safely loading Marshal specs from a gem.  The
  # `safe_load` method defined on this module is specifically designed for
  # loading Gem specifications.

  module SafeMarshal
    PERMITTED_CLASSES = %w[
      Date
      Time
      Rational

      Gem::Dependency
      Gem::NameTuple
      Gem::Platform
      Gem::Requirement
      Gem::Specification
      Gem::Version
      Gem::Version::Requirement

      YAML::Syck::DefaultKey
      YAML::PrivateType
    ].freeze
    private_constant :PERMITTED_CLASSES

    PERMITTED_SYMBOLS = %w[
      development
      runtime

      name
      number
      platform
      dependencies
    ].freeze
    private_constant :PERMITTED_SYMBOLS

    PERMITTED_IVARS = {
      "String" => %w[E encoding @taguri @debug_created_info],
      "Time" => %w[
        offset zone nano_num nano_den submicro
        @_zone @marshal_with_utc_coercion
      ],
      "Gem::Dependency" => %w[
        @name @requirement @prerelease @version_requirement @version_requirements @type
        @force_ruby_platform
      ],
      "Gem::NameTuple" => %w[@name @version @platform],
      "Gem::Platform" => %w[@os @cpu @version],
      "Psych::PrivateType" => %w[@value @type_id],
    }.freeze
    private_constant :PERMITTED_IVARS

    def self.safe_load(input)
      load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, permitted_ivars: PERMITTED_IVARS)
    end

    def self.load(input, permitted_classes: [::Symbol], permitted_symbols: [], permitted_ivars: {})
      root = Reader.new(StringIO.new(input, "r").binmode).read!

      Visitors::ToRuby.new(
        permitted_classes: permitted_classes,
        permitted_symbols: permitted_symbols,
        permitted_ivars: permitted_ivars,
      ).visit(root)
    end
  end
end
PK(J[zN�g\>\>/share/rubygems/rubygems/specification_policy.rbnu�[���# frozen_string_literal: true

require_relative "user_interaction"

class Gem::SpecificationPolicy
  include Gem::UserInteraction

  VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:

  SPECIAL_CHARACTERS = /\A[#{Regexp.escape(".-_")}]+/ # :nodoc:

  VALID_URI_PATTERN = %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z} # :nodoc:

  METADATA_LINK_KEYS = %w[
    homepage_uri
    changelog_uri
    source_code_uri
    documentation_uri
    wiki_uri
    mailing_list_uri
    bug_tracker_uri
    download_uri
    funding_uri
  ].freeze # :nodoc:

  def initialize(specification)
    @warnings = 0

    @specification = specification
  end

  ##
  # If set to true, run packaging-specific checks, as well.

  attr_accessor :packaging

  ##
  # Does a sanity check on the specification.
  #
  # Raises InvalidSpecificationException if the spec does not pass the
  # checks.
  #
  # It also performs some validations that do not raise but print warning
  # messages instead.

  def validate(strict = false)
    validate_required!
    validate_required_metadata!

    validate_optional(strict) if packaging || strict

    true
  end

  ##
  # Does a sanity check on the specification.
  #
  # Raises InvalidSpecificationException if the spec does not pass the
  # checks.
  #
  # Only runs checks that are considered necessary for the specification to be
  # functional.

  def validate_required!
    validate_nil_attributes

    validate_rubygems_version

    validate_required_attributes

    validate_name

    validate_require_paths

    @specification.keep_only_files_and_directories

    validate_non_files

    validate_self_inclusion_in_files_list

    validate_specification_version

    validate_platform

    validate_array_attributes

    validate_authors_field

    validate_licenses_length

    validate_duplicate_dependencies
  end

  def validate_required_metadata!
    validate_metadata

    validate_lazy_metadata
  end

  def validate_optional(strict)
    validate_licenses

    validate_permissions

    validate_values

    validate_dependencies

    validate_required_ruby_version

    validate_extensions

    validate_removed_attributes

    validate_unique_links

    if @warnings > 0
      if strict
        error "specification has warnings"
      else
        alert_warning help_text
      end
    end
  end

  ##
  # Implementation for Specification#validate_for_resolution

  def validate_for_resolution
    validate_required!
  end

  ##
  # Implementation for Specification#validate_metadata

  def validate_metadata
    metadata = @specification.metadata

    unless Hash === metadata
      error "metadata must be a hash"
    end

    metadata.each do |key, value|
      entry = "metadata['#{key}']"
      unless key.is_a?(String)
        error "metadata keys must be a String"
      end

      if key.size > 128
        error "metadata key is too large (#{key.size} > 128)"
      end

      unless value.is_a?(String)
        error "#{entry} value must be a String"
      end

      if value.size > 1024
        error "#{entry} value is too large (#{value.size} > 1024)"
      end

      next unless METADATA_LINK_KEYS.include? key
      unless VALID_URI_PATTERN.match?(value)
        error "#{entry} has invalid link: #{value.inspect}"
      end
    end
  end

  ##
  # Checks that no duplicate dependencies are specified.

  def validate_duplicate_dependencies # :nodoc:
    # NOTE: see REFACTOR note in Gem::Dependency about types - this might be brittle
    seen = Gem::Dependency::TYPES.inject({}) {|types, type| types.merge({ type => {} }) }

    error_messages = []
    @specification.dependencies.each do |dep|
      if prev = seen[dep.type][dep.name]
        error_messages << <<-MESSAGE
duplicate dependency on #{dep}, (#{prev.requirement}) use:
    add_#{dep.type}_dependency \"#{dep.name}\", \"#{dep.requirement}\", \"#{prev.requirement}\"
        MESSAGE
      end

      seen[dep.type][dep.name] = dep
    end
    if error_messages.any?
      error error_messages.join
    end
  end

  ##
  # Checks that the gem does not depend on itself.
  # Checks that dependencies use requirements as we recommend.  Warnings are
  # issued when dependencies are open-ended or overly strict for semantic
  # versioning.

  def validate_dependencies # :nodoc:
    warning_messages = []
    @specification.dependencies.each do |dep|
      if dep.name == @specification.name # warn on self reference
        warning_messages << "Self referencing dependency is unnecessary and strongly discouraged."
      end

      prerelease_dep = dep.requirements_list.any? do |req|
        Gem::Requirement.new(req).prerelease?
      end

      warning_messages << "prerelease dependency on #{dep} is not recommended" if
          prerelease_dep && !@specification.version.prerelease?

      open_ended = dep.requirement.requirements.all? do |op, version|
        !version.prerelease? && [">", ">="].include?(op)
      end

      next unless open_ended
      op, dep_version = dep.requirement.requirements.first

      segments = dep_version.segments

      base = segments.first 2

      recommendation = if [">", ">="].include?(op) && segments == [0]
        "  use a bounded requirement, such as \"~> x.y\""
      else
        bugfix = if op == ">"
          ", \"> #{dep_version}\""
        elsif op == ">=" && base != segments
          ", \">= #{dep_version}\""
        end

        "  if #{dep.name} is semantically versioned, use:\n" \
        "    add_#{dep.type}_dependency \"#{dep.name}\", \"~> #{base.join "."}\"#{bugfix}"
      end

      warning_messages << ["open-ended dependency on #{dep} is not recommended", recommendation].join("\n") + "\n"
    end
    if warning_messages.any?
      warning_messages.each {|warning_message| warning warning_message }
    end
  end

  def validate_required_ruby_version
    if @specification.required_ruby_version.requirements == [Gem::Requirement::DefaultRequirement]
      warning "make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute"
    end
  end

  ##
  # Issues a warning for each file to be packaged which is world-readable.
  #
  # Implementation for Specification#validate_permissions

  def validate_permissions
    return if Gem.win_platform?

    @specification.files.each do |file|
      next unless File.file?(file)
      next if File.stat(file).mode & 0o444 == 0o444
      warning "#{file} is not world-readable"
    end

    @specification.executables.each do |name|
      exec = File.join @specification.bindir, name
      next unless File.file?(exec)
      next if File.stat(exec).executable?
      warning "#{exec} is not executable"
    end
  end

  private

  def validate_nil_attributes
    nil_attributes = Gem::Specification.non_nil_attributes.select do |attrname|
      @specification.instance_variable_get("@#{attrname}").nil?
    end
    return if nil_attributes.empty?
    error "#{nil_attributes.join ", "} must not be nil"
  end

  def validate_rubygems_version
    return unless packaging

    rubygems_version = @specification.rubygems_version

    return if rubygems_version == Gem::VERSION

    warning "expected RubyGems version #{Gem::VERSION}, was #{rubygems_version}"

    @specification.rubygems_version = Gem::VERSION
  end

  def validate_required_attributes
    Gem::Specification.required_attributes.each do |symbol|
      unless @specification.send symbol
        error "missing value for attribute #{symbol}"
      end
    end
  end

  def validate_name
    name = @specification.name

    if !name.is_a?(String)
      error "invalid value for attribute name: \"#{name.inspect}\" must be a string"
    elsif !/[a-zA-Z]/.match?(name)
      error "invalid value for attribute name: #{name.dump} must include at least one letter"
    elsif !VALID_NAME_PATTERN.match?(name)
      error "invalid value for attribute name: #{name.dump} can only include letters, numbers, dashes, and underscores"
    elsif SPECIAL_CHARACTERS.match?(name)
      error "invalid value for attribute name: #{name.dump} cannot begin with a period, dash, or underscore"
    end
  end

  def validate_require_paths
    return unless @specification.raw_require_paths.empty?

    error "specification must have at least one require_path"
  end

  def validate_non_files
    return unless packaging

    non_files = @specification.files.reject {|x| File.file?(x) || File.symlink?(x) }

    unless non_files.empty?
      error "[\"#{non_files.join "\", \""}\"] are not files"
    end
  end

  def validate_self_inclusion_in_files_list
    file_name = @specification.file_name

    return unless @specification.files.include?(file_name)

    error "#{@specification.full_name} contains itself (#{file_name}), check your files list"
  end

  def validate_specification_version
    return if @specification.specification_version.is_a?(Integer)

    error "specification_version must be an Integer (did you mean version?)"
  end

  def validate_platform
    platform = @specification.platform

    case platform
    when Gem::Platform, Gem::Platform::RUBY # ok
    else
      error "invalid platform #{platform.inspect}, see Gem::Platform"
    end
  end

  def validate_array_attributes
    Gem::Specification.array_attributes.each do |field|
      validate_array_attribute(field)
    end
  end

  def validate_array_attribute(field)
    val = @specification.send(field)
    klass = case field
            when :dependencies then
              Gem::Dependency
            else
              String
    end

    unless Array === val && val.all? {|x| x.is_a?(klass) || (field == :licenses && x.nil?) }
      error "#{field} must be an Array of #{klass}"
    end
  end

  def validate_authors_field
    return unless @specification.authors.empty?

    error "authors may not be empty"
  end

  def validate_licenses_length
    licenses = @specification.licenses

    licenses.each do |license|
      next if license.nil?

      if license.length > 64
        error "each license must be 64 characters or less"
      end
    end
  end

  def validate_licenses
    licenses = @specification.licenses

    licenses.each do |license|
      next if Gem::Licenses.match?(license) || license.nil?
      license_id_deprecated = Gem::Licenses.deprecated_license_id?(license)
      exception_id_deprecated = Gem::Licenses.deprecated_exception_id?(license)
      suggestions = Gem::Licenses.suggestions(license)

      if license_id_deprecated
        main_message = "License identifier '#{license}' is deprecated"
      elsif exception_id_deprecated
        main_message = "Exception identifier at '#{license}' is deprecated"
      else
        main_message = "License identifier '#{license}' is invalid"
      end

      message = <<-WARNING
#{main_message}. Use an identifier from
https://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license,
or set it to nil if you don't want to specify a license.
      WARNING
      message += "Did you mean #{suggestions.map {|s| "'#{s}'" }.join(", ")}?\n" unless suggestions.nil?
      warning(message)
    end

    warning <<-WARNING if licenses.empty?
licenses is empty, but is recommended. Use an license identifier from
https://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license,
or set it to nil if you don't want to specify a license.
    WARNING
  end

  LAZY = '"FIxxxXME" or "TOxxxDO"'.gsub(/xxx/, "")
  LAZY_PATTERN = /\AFI XME|\ATO DO/x
  HOMEPAGE_URI_PATTERN = /\A[a-z][a-z\d+.-]*:/i

  def validate_lazy_metadata
    unless @specification.authors.grep(LAZY_PATTERN).empty?
      error "#{LAZY} is not an author"
    end

    unless Array(@specification.email).grep(LAZY_PATTERN).empty?
      error "#{LAZY} is not an email"
    end

    if LAZY_PATTERN.match?(@specification.description)
      error "#{LAZY} is not a description"
    end

    if LAZY_PATTERN.match?(@specification.summary)
      error "#{LAZY} is not a summary"
    end

    homepage = @specification.homepage

    # Make sure a homepage is valid HTTP/HTTPS URI
    if homepage && !homepage.empty?
      require_relative "vendor/uri/lib/uri"
      begin
        homepage_uri = Gem::URI.parse(homepage)
        unless [Gem::URI::HTTP, Gem::URI::HTTPS].member? homepage_uri.class
          error "\"#{homepage}\" is not a valid HTTP URI"
        end
      rescue Gem::URI::InvalidURIError
        error "\"#{homepage}\" is not a valid HTTP URI"
      end
    end
  end

  def validate_values
    %w[author homepage summary files].each do |attribute|
      validate_attribute_present(attribute)
    end

    if @specification.description == @specification.summary
      warning "description and summary are identical"
    end

    # TODO: raise at some given date
    warning "deprecated autorequire specified" if @specification.autorequire

    @specification.executables.each do |executable|
      validate_shebang_line_in(executable)
    end

    @specification.files.select {|f| File.symlink?(f) }.each do |file|
      warning "#{file} is a symlink, which is not supported on all platforms"
    end
  end

  def validate_attribute_present(attribute)
    value = @specification.send attribute
    warning("no #{attribute} specified") if value.nil? || value.empty?
  end

  def validate_shebang_line_in(executable)
    executable_path = File.join(@specification.bindir, executable)
    return if File.read(executable_path, 2) == "#!"

    warning "#{executable_path} is missing #! line"
  end

  def validate_removed_attributes # :nodoc:
    @specification.removed_method_calls.each do |attr|
      warning("#{attr} is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.")
    end
  end

  def validate_extensions # :nodoc:
    require_relative "ext"
    builder = Gem::Ext::Builder.new(@specification)

    validate_rake_extensions(builder)
    validate_rust_extensions(builder)
  end

  def validate_rust_extensions(builder) # :nodoc:
    rust_extension = @specification.extensions.any? {|s| builder.builder_for(s).is_a? Gem::Ext::CargoBuilder }
    missing_cargo_lock = !@specification.files.any? {|f| f.end_with?("Cargo.lock") }

    error <<-ERROR if rust_extension && missing_cargo_lock
You have specified rust based extension, but Cargo.lock is not part of the gem files. Please run `cargo generate-lockfile` or any other command to generate Cargo.lock and ensure it is added to your gem files section in gemspec.
    ERROR
  end

  def validate_rake_extensions(builder) # :nodoc:
    rake_extension = @specification.extensions.any? {|s| builder.builder_for(s) == Gem::Ext::RakeBuilder }
    rake_dependency = @specification.dependencies.any? {|d| d.name == "rake" && d.type == :runtime }

    warning <<-WARNING if rake_extension && !rake_dependency
You have specified rake based extension, but rake is not added as runtime dependency. It is recommended to add rake as a runtime dependency in gemspec since there's no guarantee rake will be already installed.
    WARNING
  end

  def validate_unique_links
    links = @specification.metadata.slice(*METADATA_LINK_KEYS)
    grouped = links.group_by {|_key, uri| uri }
    grouped.each do |uri, copies|
      next unless copies.length > 1
      keys = copies.map(&:first).join("\n  ")
      warning <<~WARNING
        You have specified the uri:
          #{uri}
        for all of the following keys:
          #{keys}
        Only the first one will be shown on rubygems.org
      WARNING
    end
  end

  def warning(statement) # :nodoc:
    @warnings += 1

    alert_warning statement
  end

  def error(statement) # :nodoc:
    raise Gem::InvalidSpecificationException, statement
  ensure
    alert_warning help_text
  end

  def help_text # :nodoc:
    "See https://guides.rubygems.org/specification-reference/ for help"
  end
end
PK(J[p��)4share/rubygems/rubygems/defaults/operating_system.rbnu�[���module Gem
  class << self

    ##
    # Returns full path of previous but one directory of dir in path
    # E.g. for '/usr/share/ruby', 'ruby', it returns '/usr'

    def previous_but_one_dir_to(path, dir)
      return unless path

      split_path = path.split(File::SEPARATOR)
      File.join(split_path.take_while { |one_dir| one_dir !~ /^#{dir}$/ }[0..-2])
    end
    private :previous_but_one_dir_to

    ##
    # Detects --install-dir option specified on command line.

    def opt_install_dir?
      @opt_install_dir ||= ARGV.include?('--install-dir') || ARGV.include?('-i')
    end
    private :opt_install_dir?

    ##
    # Detects --build-root option specified on command line.

    def opt_build_root?
      @opt_build_root ||= ARGV.include?('--build-root')
    end
    private :opt_build_root?

    ##
    # Tries to detect, if arguments and environment variables suggest that
    # 'gem install' is executed from rpmbuild.

    def rpmbuild?
      @rpmbuild ||= ENV['RPM_PACKAGE_NAME'] && (opt_install_dir? || opt_build_root?)
    end
    private :rpmbuild?

    ##
    # Default gems locations allowed on FHS system (/usr, /usr/share).
    # The locations are derived from directories specified during build
    # configuration.

    def default_locations
      @default_locations ||= {
        :system => previous_but_one_dir_to(RbConfig::CONFIG['vendordir'], RbConfig::CONFIG['RUBY_INSTALL_NAME']),
        :local => previous_but_one_dir_to(RbConfig::CONFIG['sitedir'], RbConfig::CONFIG['RUBY_INSTALL_NAME'])
      }
    end

    ##
    # For each location provides set of directories for binaries (:bin_dir)
    # platform independent (:gem_dir) and dependent (:ext_dir) files.

    def default_dirs
      @libdir ||= case RUBY_PLATFORM
      when 'java'
        RbConfig::CONFIG['datadir']
      else
        RbConfig::CONFIG['libdir']
      end

      @default_dirs ||= default_locations.inject(Hash.new) do |hash, location|
        destination, path = location

        hash[destination] = if path
          {
            :bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last),
            :gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'),
            :ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems')
          }
        else
          {
            :bin_dir => '',
            :gem_dir => '',
            :ext_dir => ''
          }
        end

        hash
      end
    end

    ##
    # Remove methods we are going to override. This avoids "method redefined;"
    # warnings otherwise issued by Ruby.

    remove_method :operating_system_defaults if method_defined? :operating_system_defaults
    remove_method :default_dir if method_defined? :default_dir
    remove_method :default_path if method_defined? :default_path
    remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for

    ##
    # Regular user installs into user directory, root manages /usr/local.

    def operating_system_defaults
      unless opt_build_root?
        options = if Process.uid == 0
          "--install-dir=#{Gem.default_dirs[:local][:gem_dir]} --bindir #{Gem.default_dirs[:local][:bin_dir]}"
        end

        {"gem" => options}
      else
        {}
      end
    end

    ##
    # RubyGems default overrides.

    def default_dir
      Gem.default_dirs[:system][:gem_dir]
    end

    def default_path
      path = default_dirs.collect {|location, paths| paths[:gem_dir]}
      path.unshift Gem.user_dir if File.exist? Gem.user_home
      path
    end

    def default_ext_dir_for base_dir
      dir = if rpmbuild?
        build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir]
        if build_dir != base_dir
          File.join build_dir, Gem.default_dirs[:system][:ext_dir]
        end
      else
        dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
        dirs && dirs.last[:ext_dir]
      end
      dir && File.join(dir, RbConfig::CONFIG['RUBY_INSTALL_NAME'])
    end

    # This method should be available since RubyGems 2.2 until RubyGems 3.0.
    # https://github.com/rubygems/rubygems/issues/749
    if method_defined? :install_extension_in_lib
      remove_method :install_extension_in_lib

      def install_extension_in_lib
        false
      end
    end
  end
end
PK(J[��{�6share/rubygems/rubygems/installer_uninstaller_utils.rbnu�[���# frozen_string_literal: true

##
# Helper methods for both Gem::Installer and Gem::Uninstaller

module Gem::InstallerUninstallerUtils
  def regenerate_plugins_for(spec, plugins_dir)
    plugins = spec.plugins
    return if plugins.empty?

    require "pathname"

    spec.plugins.each do |plugin|
      plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}"

      File.open plugin_script_path, "wb" do |file|
        file.puts "require_relative '#{Pathname.new(plugin).relative_path_from(Pathname.new(plugins_dir))}'"
      end

      verbose plugin_script_path
    end
  end

  def remove_plugins_for(spec, plugins_dir)
    FileUtils.rm_f Gem::Util.glob_files_in_dir("#{spec.name}#{Gem.plugin_suffix_pattern}", plugins_dir)
  end
end
PK(J[�?���*share/rubygems/rubygems/gemspec_helpers.rbnu�[���# frozen_string_literal: true

require_relative "../rubygems"

##
# Mixin methods for commands that work with gemspecs.

module Gem::GemspecHelpers
  def find_gemspec(glob = "*.gemspec")
    gemspecs = Dir.glob(glob).sort

    if gemspecs.size > 1
      alert_error "Multiple gemspecs found: #{gemspecs}, please specify one"
      terminate_interaction(1)
    end

    gemspecs.first
  end
end
PK(J[#�Y��(share/rubygems/rubygems/s3_uri_signer.rbnu�[���# frozen_string_literal: true

require_relative "openssl"

##
# S3URISigner implements AWS SigV4 for S3 Source to avoid a dependency on the aws-sdk-* gems
# More on AWS SigV4: https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
class Gem::S3URISigner
  class ConfigurationError < Gem::Exception
    def initialize(message)
      super message
    end

    def to_s # :nodoc:
      super.to_s
    end
  end

  class InstanceProfileError < Gem::Exception
    def initialize(message)
      super message
    end

    def to_s # :nodoc:
      super.to_s
    end
  end

  attr_accessor :uri

  def initialize(uri)
    @uri = uri
  end

  ##
  # Signs S3 URI using query-params according to the reference: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
  def sign(expiration = 86_400)
    s3_config = fetch_s3_config

    current_time = Time.now.utc
    date_time = current_time.strftime("%Y%m%dT%H%m%SZ")
    date = date_time[0,8]

    credential_info = "#{date}/#{s3_config.region}/s3/aws4_request"
    canonical_host = "#{uri.host}.s3.#{s3_config.region}.amazonaws.com"

    query_params = generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
    canonical_request = generate_canonical_request(canonical_host, query_params)
    string_to_sign = generate_string_to_sign(date_time, credential_info, canonical_request)
    signature = generate_signature(s3_config, date, string_to_sign)

    Gem::URI.parse("https://#{canonical_host}#{uri.path}?#{query_params}&X-Amz-Signature=#{signature}")
  end

  private

  S3Config = Struct.new :access_key_id, :secret_access_key, :security_token, :region

  def generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
    canonical_params = {}
    canonical_params["X-Amz-Algorithm"] = "AWS4-HMAC-SHA256"
    canonical_params["X-Amz-Credential"] = "#{s3_config.access_key_id}/#{credential_info}"
    canonical_params["X-Amz-Date"] = date_time
    canonical_params["X-Amz-Expires"] = expiration.to_s
    canonical_params["X-Amz-SignedHeaders"] = "host"
    canonical_params["X-Amz-Security-Token"] = s3_config.security_token if s3_config.security_token

    # Sorting is required to generate proper signature
    canonical_params.sort.to_h.map do |key, value|
      "#{base64_uri_escape(key)}=#{base64_uri_escape(value)}"
    end.join("&")
  end

  def generate_canonical_request(canonical_host, query_params)
    [
      "GET",
      uri.path,
      query_params,
      "host:#{canonical_host}",
      "", # empty params
      "host",
      "UNSIGNED-PAYLOAD",
    ].join("\n")
  end

  def generate_string_to_sign(date_time, credential_info, canonical_request)
    [
      "AWS4-HMAC-SHA256",
      date_time,
      credential_info,
      OpenSSL::Digest::SHA256.hexdigest(canonical_request),
    ].join("\n")
  end

  def generate_signature(s3_config, date, string_to_sign)
    date_key = OpenSSL::HMAC.digest("sha256", "AWS4" + s3_config.secret_access_key, date)
    date_region_key = OpenSSL::HMAC.digest("sha256", date_key, s3_config.region)
    date_region_service_key = OpenSSL::HMAC.digest("sha256", date_region_key, "s3")
    signing_key = OpenSSL::HMAC.digest("sha256", date_region_service_key, "aws4_request")
    OpenSSL::HMAC.hexdigest("sha256", signing_key, string_to_sign)
  end

  ##
  # Extracts S3 configuration for S3 bucket
  def fetch_s3_config
    return S3Config.new(uri.user, uri.password, nil, "us-east-1") if uri.user && uri.password

    s3_source = Gem.configuration[:s3_source] || Gem.configuration["s3_source"]
    host = uri.host
    raise ConfigurationError.new("no s3_source key exists in .gemrc") unless s3_source

    auth = s3_source[host] || s3_source[host.to_sym]
    raise ConfigurationError.new("no key for host #{host} in s3_source in .gemrc") unless auth

    provider = auth[:provider] || auth["provider"]
    case provider
    when "env"
      id = ENV["AWS_ACCESS_KEY_ID"]
      secret = ENV["AWS_SECRET_ACCESS_KEY"]
      security_token = ENV["AWS_SESSION_TOKEN"]
    when "instance_profile"
      credentials = ec2_metadata_credentials_json
      id = credentials["AccessKeyId"]
      secret = credentials["SecretAccessKey"]
      security_token = credentials["Token"]
    else
      id = auth[:id] || auth["id"]
      secret = auth[:secret] || auth["secret"]
      security_token = auth[:security_token] || auth["security_token"]
    end

    raise ConfigurationError.new("s3_source for #{host} missing id or secret") unless id && secret

    region = auth[:region] || auth["region"] || "us-east-1"
    S3Config.new(id, secret, security_token, region)
  end

  def base64_uri_escape(str)
    str.gsub(%r{[\+/=\n]}, BASE64_URI_TRANSLATE)
  end

  def ec2_metadata_credentials_json
    require_relative "vendored_net_http"
    require_relative "request"
    require_relative "request/connection_pools"
    require "json"

    iam_info = ec2_metadata_request(EC2_IAM_INFO)
    # Expected format: arn:aws:iam::<id>:instance-profile/<role_name>
    role_name = iam_info["InstanceProfileArn"].split("/").last
    ec2_metadata_request(EC2_IAM_SECURITY_CREDENTIALS + role_name)
  end

  def ec2_metadata_request(url)
    uri = Gem::URI(url)
    @request_pool ||= create_request_pool(uri)
    request = Gem::Request.new(uri, Gem::Net::HTTP::Get, nil, @request_pool)
    response = request.fetch

    case response
    when Gem::Net::HTTPOK then
      JSON.parse(response.body)
    else
      raise InstanceProfileError.new("Unable to fetch AWS metadata from #{uri}: #{response.message} #{response.code}")
    end
  end

  def create_request_pool(uri)
    proxy_uri = Gem::Request.proxy_uri(Gem::Request.get_proxy_from_env(uri.scheme))
    certs = Gem::Request.get_cert_files
    Gem::Request::ConnectionPools.new(proxy_uri, certs).pool_for(uri)
  end

  BASE64_URI_TRANSLATE = { "+" => "%2B", "/" => "%2F", "=" => "%3D", "\n" => "" }.freeze
  EC2_IAM_INFO = "http://169.254.169.254/latest/meta-data/iam/info"
  EC2_IAM_SECURITY_CREDENTIALS = "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
end
PK(J[[n65�!�!#share/rubygems/rubygems/platform.rbnu�[���# frozen_string_literal: true

require_relative "deprecate"

##
# Available list of platforms for targeting Gem installations.
#
# See `gem help platform` for information on platform matching.

class Gem::Platform
  @local = nil

  attr_accessor :cpu, :os, :version

  def self.local(refresh: false)
    return @local if @local && !refresh
    @local = begin
      arch = Gem.target_rbconfig["arch"]
      arch = "#{arch}_60" if /mswin(?:32|64)$/.match?(arch)
      new(arch)
    end
  end

  def self.match(platform)
    match_platforms?(platform, Gem.platforms)
  end

  class << self
    extend Gem::Deprecate
    rubygems_deprecate :match, "Gem::Platform.match_spec? or match_gem?"
  end

  def self.match_platforms?(platform, platforms)
    platform = Gem::Platform.new(platform) unless platform.is_a?(Gem::Platform)
    platforms.any? do |local_platform|
      platform.nil? ||
        local_platform == platform ||
        (local_platform != Gem::Platform::RUBY && platform =~ local_platform)
    end
  end
  private_class_method :match_platforms?

  def self.match_spec?(spec)
    match_gem?(spec.platform, spec.name)
  end

  if RUBY_ENGINE == "truffleruby"
    def self.match_gem?(platform, gem_name)
      raise "Not a string: #{gem_name.inspect}" unless String === gem_name

      if REUSE_AS_BINARY_ON_TRUFFLERUBY.include?(gem_name)
        match_platforms?(platform, [Gem::Platform::RUBY, Gem::Platform.local])
      else
        match_platforms?(platform, Gem.platforms)
      end
    end
  else
    def self.match_gem?(platform, gem_name)
      match_platforms?(platform, Gem.platforms)
    end
  end

  def self.sort_priority(platform)
    platform == Gem::Platform::RUBY ? -1 : 1
  end

  def self.installable?(spec)
    if spec.respond_to? :installable_platform?
      spec.installable_platform?
    else
      match_spec? spec
    end
  end

  def self.new(arch) # :nodoc:
    case arch
    when Gem::Platform::CURRENT then
      Gem::Platform.local
    when Gem::Platform::RUBY, nil, "" then
      Gem::Platform::RUBY
    else
      super
    end
  end

  def initialize(arch)
    case arch
    when Array then
      @cpu, @os, @version = arch
    when String then
      arch = arch.split "-"

      if arch.length > 2 && !arch.last.match?(/\d+(\.\d+)?$/) # reassemble x86-linux-{libc}
        extra = arch.pop
        arch.last << "-#{extra}"
      end

      cpu = arch.shift

      @cpu = case cpu
             when /i\d86/ then "x86"
             else cpu
      end

      if arch.length == 2 && arch.last.match?(/^\d+(\.\d+)?$/) # for command-line
        @os, @version = arch
        return
      end

      os, = arch
      if os.nil?
        @cpu = nil
        os = cpu
      end # legacy jruby

      @os, @version = case os
                      when /aix(\d+)?/ then             ["aix",       $1]
                      when /cygwin/ then                ["cygwin",    nil]
                      when /darwin(\d+)?/ then          ["darwin",    $1]
                      when /^macruby$/ then             ["macruby",   nil]
                      when /freebsd(\d+)?/ then         ["freebsd",   $1]
                      when /^java$/, /^jruby$/ then     ["java",      nil]
                      when /^java([\d.]*)/ then         ["java",      $1]
                      when /^dalvik(\d+)?$/ then        ["dalvik",    $1]
                      when /^dotnet$/ then              ["dotnet",    nil]
                      when /^dotnet([\d.]*)/ then       ["dotnet",    $1]
                      when /linux-?(\w+)?/ then         ["linux",     $1]
                      when /mingw32/ then               ["mingw32",   nil]
                      when /mingw-?(\w+)?/ then         ["mingw",     $1]
                      when /(mswin\d+)(\_(\d+))?/ then
                        os = $1
                        version = $3
                        @cpu = "x86" if @cpu.nil? && os =~ /32$/
                        [os, version]
                      when /netbsdelf/ then             ["netbsdelf", nil]
                      when /openbsd(\d+\.\d+)?/ then    ["openbsd",   $1]
                      when /solaris(\d+\.\d+)?/ then    ["solaris",   $1]
                      when /wasi/ then                  ["wasi",      nil]
                      # test
                      when /^(\w+_platform)(\d+)?/ then [$1,          $2]
                      else ["unknown", nil]
      end
    when Gem::Platform then
      @cpu = arch.cpu
      @os = arch.os
      @version = arch.version
    else
      raise ArgumentError, "invalid argument #{arch.inspect}"
    end
  end

  def to_a
    [@cpu, @os, @version]
  end

  def to_s
    to_a.compact.join "-"
  end

  ##
  # Is +other+ equal to this platform?  Two platforms are equal if they have
  # the same CPU, OS and version.

  def ==(other)
    self.class === other && to_a == other.to_a
  end

  alias_method :eql?, :==

  def hash # :nodoc:
    to_a.hash
  end

  ##
  # Does +other+ match this platform?  Two platforms match if they have the
  # same CPU, or either has a CPU of 'universal', they have the same OS, and
  # they have the same version, or either one has no version
  #
  # Additionally, the platform will match if the local CPU is 'arm' and the
  # other CPU starts with "armv" (for generic 32-bit ARM family support).
  #
  # Of note, this method is not commutative. Indeed the OS 'linux' has a
  # special case: the version is the libc name, yet while "no version" stands
  # as a wildcard for a binary gem platform (as for other OSes), for the
  # runtime platform "no version" stands for 'gnu'. To be able to distinguish
  # these, the method receiver is the gem platform, while the argument is
  # the runtime platform.
  #
  #--
  # NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`

  def ===(other)
    return nil unless Gem::Platform === other

    # universal-mingw32 matches x64-mingw-ucrt
    return true if (@cpu == "universal" || other.cpu == "universal") &&
                   @os.start_with?("mingw") && other.os.start_with?("mingw")

    # cpu
    ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
    (@cpu == "arm" && other.cpu.start_with?("armv"))) &&

      # os
      @os == other.os &&

      # version
      (
        (@os != "linux" && (@version.nil? || other.version.nil?)) ||
        (@os == "linux" && (normalized_linux_version == other.normalized_linux_version || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
        @version == other.version
      )
  end

  #--
  # NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`

  def normalized_linux_version
    return nil unless @version

    without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
    return nil if without_gnu_nor_abi_modifiers.empty?

    without_gnu_nor_abi_modifiers
  end

  ##
  # Does +other+ match this platform?  If +other+ is a String it will be
  # converted to a Gem::Platform first.  See #=== for matching rules.

  def =~(other)
    case other
    when Gem::Platform then # nop
    when String then
      # This data is from http://gems.rubyforge.org/gems/yaml on 19 Aug 2007
      other = case other
              when /^i686-darwin(\d)/     then ["x86",       "darwin",  $1]
              when /^i\d86-linux/         then ["x86",       "linux",   nil]
              when "java", "jruby"        then [nil,         "java",    nil]
              when /^dalvik(\d+)?$/       then [nil,         "dalvik",  $1]
              when /dotnet(\-(\d+\.\d+))?/ then ["universal","dotnet",  $2]
              when /mswin32(\_(\d+))?/    then ["x86",       "mswin32", $2]
              when /mswin64(\_(\d+))?/    then ["x64",       "mswin64", $2]
              when "powerpc-darwin"       then ["powerpc",   "darwin",  nil]
              when /powerpc-darwin(\d)/   then ["powerpc",   "darwin",  $1]
              when /sparc-solaris2.8/     then ["sparc",     "solaris", "2.8"]
              when /universal-darwin(\d)/ then ["universal", "darwin",  $1]
              else other
      end

      other = Gem::Platform.new other
    else
      return nil
    end

    self === other
  end

  ##
  # A pure-Ruby gem that may use Gem::Specification#extensions to build
  # binary files.

  RUBY = "ruby"

  ##
  # A platform-specific gem that is built for the packaging Ruby's platform.
  # This will be replaced with Gem::Platform::local.

  CURRENT = "current"
end
PK(J[��'share/rubygems/rubygems/path_support.rbnu�[���# frozen_string_literal: true

##
#
# Gem::PathSupport facilitates the GEM_HOME and GEM_PATH environment settings
# to the rest of RubyGems.
#
class Gem::PathSupport
  ##
  # The default system path for managing Gems.
  attr_reader :home

  ##
  # Array of paths to search for Gems.
  attr_reader :path

  ##
  # Directory with spec cache
  attr_reader :spec_cache_dir # :nodoc:

  ##
  #
  # Constructor. Takes a single argument which is to be treated like a
  # hashtable, or defaults to ENV, the system environment.
  #
  def initialize(env)
    @home = normalize_home_dir(env["GEM_HOME"] || Gem.default_dir)
    @path = split_gem_path env["GEM_PATH"], @home

    @spec_cache_dir = env["GEM_SPEC_CACHE"] || Gem.default_spec_cache_dir
  end

  private

  def normalize_home_dir(home)
    if File::ALT_SEPARATOR
      home = home.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
    end

    expand(home)
  end

  ##
  # Split the Gem search path (as reported by Gem.path).

  def split_gem_path(gpaths, home)
    # FIX: it should be [home, *path], not [*path, home]

    gem_path = []

    if gpaths
      gem_path = gpaths.split(Gem.path_separator)
      # Handle the path_separator being set to a regexp, which will cause
      # end_with? to error
      if /#{Gem.path_separator}\z/.match?(gpaths)
        gem_path += default_path
      end

      if File::ALT_SEPARATOR
        gem_path.map! do |this_path|
          this_path.gsub File::ALT_SEPARATOR, File::SEPARATOR
        end
      end

      gem_path << home
    else
      gem_path = default_path
    end

    gem_path.map {|path| expand(path) }.uniq
  end

  # Return the default Gem path
  def default_path
    Gem.default_path + [@home]
  end

  def expand(path)
    if File.directory?(path)
      File.realpath(path)
    else
      path
    end
  end
end
PK(J[��I��
�
Ishare/rubygems/rubygems/gemcutter_utilities/webauthn_listener/response.rbnu�[���# frozen_string_literal: true

##
# The WebauthnListener Response class is used by the WebauthnListener to create
# responses to be sent to the Gem host. It creates a Gem::Net::HTTPResponse instance
# when initialized and can be converted to the appropriate format to be sent by a socket using `to_s`.
# Gem::Net::HTTPResponse instances cannot be directly sent over a socket.
#
# Types of response classes:
#   - OkResponse
#   - NoContentResponse
#   - BadRequestResponse
#   - NotFoundResponse
#   - MethodNotAllowedResponse
#
# Example usage:
#
#   server = TCPServer.new(0)
#   socket = server.accept
#
#   response = OkResponse.for("https://rubygems.example")
#   socket.print response.to_s
#   socket.close
#

module Gem::GemcutterUtilities
  class WebauthnListener
    class Response
      attr_reader :http_response

      def self.for(host)
        new(host)
      end

      def initialize(host)
        @host = host

        build_http_response
      end

      def to_s
        status_line = "HTTP/#{@http_response.http_version} #{@http_response.code} #{@http_response.message}\r\n"
        headers = @http_response.to_hash.map {|header, value| "#{header}: #{value.join(", ")}\r\n" }.join + "\r\n"
        body = @http_response.body ? "#{@http_response.body}\n" : ""

        status_line + headers + body
      end

      private

      # Must be implemented in subclasses
      def code
        raise NotImplementedError
      end

      def reason_phrase
        raise NotImplementedError
      end

      def body; end

      def build_http_response
        response_class = Gem::Net::HTTPResponse::CODE_TO_OBJ[code.to_s]
        @http_response = response_class.new("1.1", code, reason_phrase)
        @http_response.instance_variable_set(:@read, true)

        add_connection_header
        add_access_control_headers
        add_body
      end

      def add_connection_header
        @http_response["connection"] = "close"
      end

      def add_access_control_headers
        @http_response["access-control-allow-origin"] = @host
        @http_response["access-control-allow-methods"] = "POST"
        @http_response["access-control-allow-headers"] = %w[Content-Type Authorization x-csrf-token]
      end

      def add_body
        return unless body
        @http_response["content-type"] = "text/plain; charset=utf-8"
        @http_response["content-length"] = body.bytesize
        @http_response.instance_variable_set(:@body, body)
      end
    end

    class OkResponse < Response
      private

      def code
        200
      end

      def reason_phrase
        "OK"
      end

      def body
        "success"
      end
    end

    class NoContentResponse < Response
      private

      def code
        204
      end

      def reason_phrase
        "No Content"
      end
    end

    class BadRequestResponse < Response
      private

      def code
        400
      end

      def reason_phrase
        "Bad Request"
      end

      def body
        "missing code parameter"
      end
    end

    class NotFoundResponse < Response
      private

      def code
        404
      end

      def reason_phrase
        "Not Found"
      end
    end

    class MethodNotAllowedResponse < Response
      private

      def code
        405
      end

      def reason_phrase
        "Method Not Allowed"
      end

      def add_access_control_headers
        super
        @http_response["allow"] = %w[GET OPTIONS]
      end
    end
  end
end
PK(J[0��

@share/rubygems/rubygems/gemcutter_utilities/webauthn_listener.rbnu�[���# frozen_string_literal: true

require_relative "webauthn_listener/response"

##
# The WebauthnListener class retrieves an OTP after a user successfully WebAuthns with the Gem host.
# An instance opens a socket using the TCPServer instance given and listens for a request from the Gem host.
# The request should be a GET request to the root path and contains the OTP code in the form
# of a query parameter `code`. The listener will return the code which will be used as the OTP for
# API requests.
#
# Types of responses sent by the listener after receiving a request:
#   - 200 OK: OTP code was successfully retrieved
#   - 204 No Content: If the request was an OPTIONS request
#   - 400 Bad Request: If the request did not contain a query parameter `code`
#   - 404 Not Found: The request was not to the root path
#   - 405 Method Not Allowed: OTP code was not retrieved because the request was not a GET/OPTIONS request
#
# Example usage:
#
#   thread = Gem::WebauthnListener.listener_thread("https://rubygems.example", server)
#   thread.join
#   otp = thread[:otp]
#   error = thread[:error]
#

module Gem::GemcutterUtilities
  class WebauthnListener
    attr_reader :host

    def initialize(host)
      @host = host
    end

    def self.listener_thread(host, server)
      Thread.new do
        thread = Thread.current
        thread.abort_on_exception = true
        thread.report_on_exception = false
        thread[:otp] = new(host).wait_for_otp_code(server)
      rescue Gem::WebauthnVerificationError => e
        thread[:error] = e
      ensure
        server.close
      end
    end

    def wait_for_otp_code(server)
      loop do
        socket = server.accept
        request_line = socket.gets

        method, req_uri, _protocol = request_line.split(" ")
        req_uri = Gem::URI.parse(req_uri)

        responder = SocketResponder.new(socket)

        unless root_path?(req_uri)
          responder.send(NotFoundResponse.for(host))
          raise Gem::WebauthnVerificationError, "Page at #{req_uri.path} not found."
        end

        case method.upcase
        when "OPTIONS"
          responder.send(NoContentResponse.for(host))
          next # will be GET
        when "GET"
          if otp = parse_otp_from_uri(req_uri)
            responder.send(OkResponse.for(host))
            return otp
          end
          responder.send(BadRequestResponse.for(host))
          raise Gem::WebauthnVerificationError, "Did not receive OTP from #{host}."
        else
          responder.send(MethodNotAllowedResponse.for(host))
          raise Gem::WebauthnVerificationError, "Invalid HTTP method #{method.upcase} received."
        end
      end
    end

    private

    def root_path?(uri)
      uri.path == "/"
    end

    def parse_otp_from_uri(uri)
      require "cgi"

      return if uri.query.nil?
      CGI.parse(uri.query).dig("code", 0)
    end

    class SocketResponder
      def initialize(socket)
        @socket = socket
      end

      def send(response)
        @socket.print response.to_s
        @socket.close
      end
    end
  end
end
PK(J[L]�
�
>share/rubygems/rubygems/gemcutter_utilities/webauthn_poller.rbnu�[���# frozen_string_literal: true

##
# The WebauthnPoller class retrieves an OTP after a user successfully WebAuthns. An instance
# polls the Gem host for the OTP code. The polling request (api/v1/webauthn_verification/<webauthn_token>/status.json)
# is sent to the Gem host every 5 seconds and will timeout after 5 minutes. If the status field in the json response
# is "success", the code field will contain the OTP code.
#
# Example usage:
#
#   thread = Gem::WebauthnPoller.poll_thread(
#     {},
#     "RubyGems.org",
#     "https://rubygems.org/api/v1/webauthn_verification/odow34b93t6aPCdY",
#     { email: "email@example.com", password: "password" }
#   )
#   thread.join
#   otp = thread[:otp]
#   error = thread[:error]
#

module Gem::GemcutterUtilities
  class WebauthnPoller
    include Gem::GemcutterUtilities
    TIMEOUT_IN_SECONDS = 300

    attr_reader :options, :host

    def initialize(options, host)
      @options = options
      @host = host
    end

    def self.poll_thread(options, host, webauthn_url, credentials)
      Thread.new do
        thread = Thread.current
        thread.abort_on_exception = true
        thread.report_on_exception = false
        thread[:otp] = new(options, host).poll_for_otp(webauthn_url, credentials)
      rescue Gem::WebauthnVerificationError, Gem::Timeout::Error => e
        thread[:error] = e
      end
    end

    def poll_for_otp(webauthn_url, credentials)
      Gem::Timeout.timeout(TIMEOUT_IN_SECONDS) do
        loop do
          response = webauthn_verification_poll_response(webauthn_url, credentials)
          raise Gem::WebauthnVerificationError, response.message unless response.is_a?(Gem::Net::HTTPSuccess)

          require "json"
          parsed_response = JSON.parse(response.body)
          case parsed_response["status"]
          when "pending"
            sleep 5
          when "success"
            return parsed_response["code"]
          else
            raise Gem::WebauthnVerificationError, parsed_response.fetch("message", "Invalid response from server")
          end
        end
      end
    end

    private

    def webauthn_verification_poll_response(webauthn_url, credentials)
      webauthn_token = %r{(?<=\/)[^\/]+(?=$)}.match(webauthn_url)[0]
      rubygems_api_request(:get, "api/v1/webauthn_verification/#{webauthn_token}/status.json") do |request|
        if credentials.empty?
          request.add_field "Authorization", api_key
        elsif credentials[:identifier] && credentials[:password]
          request.basic_auth credentials[:identifier], credentials[:password]
        else
          raise Gem::WebauthnVerificationError, "Provided missing credentials"
        end
      end
    end
  end
end
PK(J[��;}}"share/rubygems/rubygems/openssl.rbnu�[���# frozen_string_literal: true

autoload :OpenSSL, "openssl"

module Gem
  HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc:
end
PK(J[�2�<<*share/rubygems/rubygems/security_option.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "../rubygems"

# forward-declare

module Gem::Security # :nodoc:
  class Policy # :nodoc:
  end
end

##
# Mixin methods for security option for Gem::Commands

module Gem::SecurityOption
  def add_security_option
    Gem::OptionParser.accept Gem::Security::Policy do |value|
      require_relative "security"

      raise Gem::OptionParser::InvalidArgument, "OpenSSL not installed" unless
        defined?(Gem::Security::HighSecurity)

      policy = Gem::Security::Policies[value]
      unless policy
        valid = Gem::Security::Policies.keys.sort
        raise Gem::OptionParser::InvalidArgument, "#{value} (#{valid.join ", "} are valid)"
      end
      policy
    end

    add_option(:"Install/Update", "-P", "--trust-policy POLICY",
               Gem::Security::Policy,
               "Specify gem trust policy") do |value, options|
      options[:security_policy] = value
    end
  end
end
PK(J[�Gy�II)share/rubygems/rubygems/vendored_tsort.rbnu�[���# frozen_string_literal: true

require_relative "vendor/tsort/lib/tsort"
PK(J[ђSÛ�8share/rubygems/rubygems/unknown_command_spell_checker.rbnu�[���# frozen_string_literal: true

class Gem::UnknownCommandSpellChecker
  attr_reader :error

  def initialize(error)
    @error = error
  end

  def corrections
    @corrections ||=
      spell_checker.correct(error.unknown_command).map(&:inspect)
  end

  private

  def spell_checker
    dictionary = Gem::CommandManager.instance.command_names
    DidYouMean::SpellChecker.new(dictionary: dictionary)
  end
end
PK(J[]�Y(��)share/rubygems/rubygems/version_option.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "../rubygems"

##
# Mixin methods for --version and --platform Gem::Command options.

module Gem::VersionOption
  ##
  # Add the --platform option to the option parser.

  def add_platform_option(task = command, *wrap)
    Gem::OptionParser.accept Gem::Platform do |value|
      if value == Gem::Platform::RUBY
        value
      else
        Gem::Platform.new value
      end
    end

    add_option("--platform PLATFORM", Gem::Platform,
               "Specify the platform of gem to #{task}", *wrap) do |value, options|
      unless options[:added_platform]
        Gem.platforms = [Gem::Platform::RUBY]
        options[:added_platform] = true
      end

      Gem.platforms << value unless Gem.platforms.include? value
    end
  end

  ##
  # Add the --prerelease option to the option parser.

  def add_prerelease_option(*wrap)
    add_option("--[no-]prerelease",
               "Allow prerelease versions of a gem", *wrap) do |value, options|
      options[:prerelease] = value
      options[:explicit_prerelease] = true
    end
  end

  ##
  # Add the --version option to the option parser.

  def add_version_option(task = command, *wrap)
    Gem::OptionParser.accept Gem::Requirement do |value|
      Gem::Requirement.new(*value.split(/\s*,\s*/))
    end

    add_option("-v", "--version VERSION", Gem::Requirement,
               "Specify version of gem to #{task}", *wrap) do |value, options|
      # Allow handling for multiple --version operators
      if options[:version] && !options[:version].none?
        options[:version].concat([value])
      else
        options[:version] = value
      end

      explicit_prerelease_set = !options[:explicit_prerelease].nil?
      options[:explicit_prerelease] = false unless explicit_prerelease_set

      options[:prerelease] = value.prerelease? unless
        options[:explicit_prerelease]
    end
  end

  ##
  # Extract platform given on the command line

  def get_platform_from_requirements(requirements)
    Gem.platforms[1].to_s if requirements.key? :added_platform
  end
end
PK(J[�䌸..,share/rubygems/rubygems/package/io_source.rbnu�[���# frozen_string_literal: true

##
# Supports reading and writing gems from/to a generic IO object.  This is
# useful for other applications built on top of rubygems, such as
# rubygems.org.
#
# This is a private class, do not depend on it directly. Instead, pass an IO
# object to `Gem::Package.new`.

class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
  attr_reader :io

  def initialize(io)
    @io = io
  end

  def start
    @start ||= begin
      if io.pos > 0
        raise Gem::Package::Error, "Cannot read start unless IO is at start"
      end

      value = io.read 20
      io.rewind
      value
    end
  end

  def present?
    true
  end

  def with_read_io
    yield io
  ensure
    io.rewind
  end

  def with_write_io
    yield io
  ensure
    io.rewind
  end

  def path
  end
end
PK(J[k��{yy3share/rubygems/rubygems/package/tar_reader/entry.rbnu�[���# frozen_string_literal: true

# rubocop:disable Style/AsciiComments

# Copyright (C) 2004 Mauricio Julio Fernández Pradier
# See LICENSE.txt for additional licensing information.

# rubocop:enable Style/AsciiComments

##
# Class for reading entries out of a tar file

class Gem::Package::TarReader::Entry
  ##
  # Creates a new tar entry for +header+ that will be read from +io+
  # If a block is given, the entry is yielded and then closed.

  def self.open(header, io, &block)
    entry = new header, io
    return entry unless block_given?
    begin
      yield entry
    ensure
      entry.close
    end
  end

  ##
  # Header for this tar entry

  attr_reader :header

  ##
  # Creates a new tar entry for +header+ that will be read from +io+

  def initialize(header, io)
    @closed = false
    @header = header
    @io = io
    @orig_pos = @io.pos
    @end_pos = @orig_pos + @header.size
    @read = 0
  end

  def check_closed # :nodoc:
    raise IOError, "closed #{self.class}" if closed?
  end

  ##
  # Number of bytes read out of the tar entry

  def bytes_read
    @read
  end

  ##
  # Closes the tar entry

  def close
    return if closed?
    # Seek to the end of the entry if it wasn't fully read
    seek(0, IO::SEEK_END)
    # discard trailing zeros
    skip = (512 - (@header.size % 512)) % 512
    @io.read(skip)
    @closed = true
    nil
  end

  ##
  # Is the tar entry closed?

  def closed?
    @closed
  end

  ##
  # Are we at the end of the tar entry?

  def eof?
    check_closed

    @read >= @header.size
  end

  ##
  # Full name of the tar entry

  def full_name
    @header.full_name.force_encoding(Encoding::UTF_8)
  rescue ArgumentError => e
    raise unless e.message == "string contains null byte"
    raise Gem::Package::TarInvalidError,
          "tar is corrupt, name contains null byte"
  end

  ##
  # Read one byte from the tar entry

  def getc
    return nil if eof?

    ret = @io.getc
    @read += 1 if ret

    ret
  end

  ##
  # Is this tar entry a directory?

  def directory?
    @header.typeflag == "5"
  end

  ##
  # Is this tar entry a file?

  def file?
    @header.typeflag == "0"
  end

  ##
  # Is this tar entry a symlink?

  def symlink?
    @header.typeflag == "2"
  end

  ##
  # The position in the tar entry

  def pos
    check_closed

    bytes_read
  end

  ##
  # Seek to the position in the tar entry

  def pos=(new_pos)
    seek(new_pos, IO::SEEK_SET)
  end

  def size
    @header.size
  end

  alias_method :length, :size

  ##
  # Reads +maxlen+ bytes from the tar file entry, or the rest of the entry if nil

  def read(maxlen = nil)
    if eof?
      return maxlen.to_i.zero? ? "" : nil
    end

    max_read = [maxlen, @header.size - @read].compact.min

    ret = @io.read max_read
    if ret.nil?
      return maxlen ? nil : "" # IO.read returns nil on EOF with len argument
    end
    @read += ret.size

    ret
  end

  def readpartial(maxlen, outbuf = "".b)
    if eof? && maxlen > 0
      raise EOFError, "end of file reached"
    end

    max_read = [maxlen, @header.size - @read].min

    @io.readpartial(max_read, outbuf)
    @read += outbuf.size

    outbuf
  end

  ##
  # Seeks to +offset+ bytes into the tar file entry
  # +whence+ can be IO::SEEK_SET, IO::SEEK_CUR, or IO::SEEK_END

  def seek(offset, whence = IO::SEEK_SET)
    check_closed

    new_pos =
      case whence
      when IO::SEEK_SET then @orig_pos + offset
      when IO::SEEK_CUR then @io.pos + offset
      when IO::SEEK_END then @end_pos + offset
      else
        raise ArgumentError, "invalid whence"
      end

    if new_pos < @orig_pos
      new_pos = @orig_pos
    elsif new_pos > @end_pos
      new_pos = @end_pos
    end

    pending = new_pos - @io.pos

    return 0 if pending == 0

    if @io.respond_to?(:seek)
      begin
        # avoid reading if the @io supports seeking
        @io.seek new_pos, IO::SEEK_SET
        pending = 0
      rescue Errno::EINVAL
      end
    end

    # if seeking isn't supported or failed
    # negative seek requires that we rewind and read
    if pending < 0
      @io.rewind
      pending = new_pos
    end

    while pending > 0 do
      size_read = @io.read([pending, 4096].min)&.size
      raise(EOFError, "end of file reached") if size_read.nil?
      pending -= size_read
    end

    @read = @io.pos - @orig_pos

    0
  end

  ##
  # Rewinds to the beginning of the tar file entry

  def rewind
    check_closed
    seek(0, IO::SEEK_SET)
  end
end
PK(J[�^x{HH)share/rubygems/rubygems/package/source.rbnu�[���# frozen_string_literal: true

class Gem::Package::Source # :nodoc:
end
PK(J[�;��-share/rubygems/rubygems/package/tar_header.rbnu�[���# frozen_string_literal: true

# rubocop:disable Style/AsciiComments

# Copyright (C) 2004 Mauricio Julio Fernández Pradier
# See LICENSE.txt for additional licensing information.

# rubocop:enable Style/AsciiComments

##
#--
# struct tarfile_entry_posix {
#   char name[100];     # ASCII + (Z unless filled)
#   char mode[8];       # 0 padded, octal, null
#   char uid[8];        # ditto
#   char gid[8];        # ditto
#   char size[12];      # 0 padded, octal, null
#   char mtime[12];     # 0 padded, octal, null
#   char checksum[8];   # 0 padded, octal, null, space
#   char typeflag[1];   # file: "0"  dir: "5"
#   char linkname[100]; # ASCII + (Z unless filled)
#   char magic[6];      # "ustar\0"
#   char version[2];    # "00"
#   char uname[32];     # ASCIIZ
#   char gname[32];     # ASCIIZ
#   char devmajor[8];   # 0 padded, octal, null
#   char devminor[8];   # o padded, octal, null
#   char prefix[155];   # ASCII + (Z unless filled)
# };
#++
# A header for a tar file

class Gem::Package::TarHeader
  ##
  # Fields in the tar header

  FIELDS = [
    :checksum,
    :devmajor,
    :devminor,
    :gid,
    :gname,
    :linkname,
    :magic,
    :mode,
    :mtime,
    :name,
    :prefix,
    :size,
    :typeflag,
    :uid,
    :uname,
    :version,
  ].freeze

  ##
  # Pack format for a tar header

  PACK_FORMAT = "a100" + # name
                "a8"   + # mode
                "a8"   + # uid
                "a8"   + # gid
                "a12"  + # size
                "a12"  + # mtime
                "a7a"  + # chksum
                "a"    + # typeflag
                "a100" + # linkname
                "a6"   + # magic
                "a2"   + # version
                "a32"  + # uname
                "a32"  + # gname
                "a8"   + # devmajor
                "a8"   + # devminor
                "a155"   # prefix

  ##
  # Unpack format for a tar header

  UNPACK_FORMAT = "A100" + # name
                  "A8"   + # mode
                  "A8"   + # uid
                  "A8"   + # gid
                  "A12"  + # size
                  "A12"  + # mtime
                  "A8"   + # checksum
                  "A"    + # typeflag
                  "A100" + # linkname
                  "A6"   + # magic
                  "A2"   + # version
                  "A32"  + # uname
                  "A32"  + # gname
                  "A8"   + # devmajor
                  "A8"   + # devminor
                  "A155"   # prefix

  attr_reader(*FIELDS)

  EMPTY_HEADER = ("\0" * 512).b.freeze # :nodoc:

  ##
  # Creates a tar header from IO +stream+

  def self.from(stream)
    header = stream.read 512
    return EMPTY if header == EMPTY_HEADER

    fields = header.unpack UNPACK_FORMAT

    new name: fields.shift,
        mode: strict_oct(fields.shift),
        uid: oct_or_256based(fields.shift),
        gid: oct_or_256based(fields.shift),
        size: strict_oct(fields.shift),
        mtime: strict_oct(fields.shift),
        checksum: strict_oct(fields.shift),
        typeflag: fields.shift,
        linkname: fields.shift,
        magic: fields.shift,
        version: strict_oct(fields.shift),
        uname: fields.shift,
        gname: fields.shift,
        devmajor: strict_oct(fields.shift),
        devminor: strict_oct(fields.shift),
        prefix: fields.shift,

        empty: false
  end

  def self.strict_oct(str)
    str.strip!
    return str.oct if /\A[0-7]*\z/.match?(str)

    raise ArgumentError, "#{str.inspect} is not an octal string"
  end

  def self.oct_or_256based(str)
    # \x80 flags a positive 256-based number
    # \ff flags a negative 256-based number
    # In case we have a match, parse it as a signed binary value
    # in big-endian order, except that the high-order bit is ignored.

    return str.unpack1("@4N") if /\A[\x80\xff]/n.match?(str)
    strict_oct(str)
  end

  ##
  # Creates a new TarHeader using +vals+

  def initialize(vals)
    unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode]
      raise ArgumentError, ":name, :size, :prefix and :mode required"
    end

    @checksum = vals[:checksum] || ""
    @devmajor = vals[:devmajor] || 0
    @devminor = vals[:devminor] || 0
    @gid = vals[:gid] || 0
    @gname = vals[:gname] || "wheel"
    @linkname = vals[:linkname]
    @magic = vals[:magic] || "ustar"
    @mode = vals[:mode]
    @mtime = vals[:mtime] || 0
    @name = vals[:name]
    @prefix = vals[:prefix]
    @size = vals[:size]
    @typeflag = vals[:typeflag]
    @typeflag = "0" if @typeflag.nil? || @typeflag.empty?
    @uid = vals[:uid] || 0
    @uname = vals[:uname] || "wheel"
    @version = vals[:version] || "00"

    @empty = vals[:empty]
  end

  EMPTY = new({ # :nodoc:
    checksum: 0,
    gname: "",
    linkname: "",
    magic: "",
    mode: 0,
    name: "",
    prefix: "",
    size: 0,
    uname: "",
    version: 0,

    empty: true,
  }).freeze
  private_constant :EMPTY

  ##
  # Is the tar entry empty?

  def empty?
    @empty
  end

  def ==(other) # :nodoc:
    self.class === other &&
      @checksum == other.checksum &&
      @devmajor == other.devmajor &&
      @devminor == other.devminor &&
      @gid      == other.gid      &&
      @gname    == other.gname    &&
      @linkname == other.linkname &&
      @magic    == other.magic    &&
      @mode     == other.mode     &&
      @mtime    == other.mtime    &&
      @name     == other.name     &&
      @prefix   == other.prefix   &&
      @size     == other.size     &&
      @typeflag == other.typeflag &&
      @uid      == other.uid      &&
      @uname    == other.uname    &&
      @version  == other.version
  end

  def to_s # :nodoc:
    update_checksum
    header
  end

  ##
  # Updates the TarHeader's checksum

  def update_checksum
    header = header " " * 8
    @checksum = oct calculate_checksum(header), 6
  end

  ##
  # Header's full name, including prefix

  def full_name
    if prefix != ""
      File.join prefix, name
    else
      name
    end
  end

  private

  def calculate_checksum(header)
    header.sum(0)
  end

  def header(checksum = @checksum)
    header = [
      name,
      oct(mode, 7),
      oct(uid, 7),
      oct(gid, 7),
      oct(size, 11),
      oct(mtime, 11),
      checksum,
      " ",
      typeflag,
      linkname,
      magic,
      oct(version, 2),
      uname,
      gname,
      oct(devmajor, 7),
      oct(devminor, 7),
      prefix,
    ]

    header = header.pack PACK_FORMAT

    header.ljust 512, "\0"
  end

  def oct(num, len)
    format("%0#{len}o", num)
  end
end
PK(J[|�@��-share/rubygems/rubygems/package/tar_reader.rbnu�[���# frozen_string_literal: true

# rubocop:disable Style/AsciiComments

# Copyright (C) 2004 Mauricio Julio Fernández Pradier
# See LICENSE.txt for additional licensing information.

# rubocop:enable Style/AsciiComments

##
# TarReader reads tar files and allows iteration over their items

class Gem::Package::TarReader
  include Enumerable

  ##
  # Creates a new TarReader on +io+ and yields it to the block, if given.

  def self.new(io)
    reader = super

    return reader unless block_given?

    begin
      yield reader
    ensure
      reader.close
    end

    nil
  end

  ##
  # Creates a new tar file reader on +io+ which needs to respond to #pos,
  # #eof?, #read, #getc and #pos=

  def initialize(io)
    @io = io
    @init_pos = io.pos
  end

  ##
  # Close the tar file

  def close
  end

  ##
  # Iterates over files in the tarball yielding each entry

  def each
    return enum_for __method__ unless block_given?

    until @io.eof? do
      begin
        header = Gem::Package::TarHeader.from @io
      rescue ArgumentError => e
        # Specialize only exceptions from Gem::Package::TarHeader.strict_oct
        raise e unless e.message.match?(/ is not an octal string$/)
        raise Gem::Package::TarInvalidError, e.message
      end

      return if header.empty?
      entry = Gem::Package::TarReader::Entry.new header, @io
      yield entry
      entry.close
    end
  end

  alias_method :each_entry, :each

  ##
  # NOTE: Do not call #rewind during #each

  def rewind
    if @init_pos == 0
      @io.rewind
    else
      @io.pos = @init_pos
    end
  end

  ##
  # Seeks through the tar file until it finds the +entry+ with +name+ and
  # yields it.  Rewinds the tar file to the beginning when the block
  # terminates.

  def seek(name) # :yields: entry
    found = find do |entry|
      entry.full_name == name
    end

    return unless found

    yield found
  ensure
    rewind
  end
end

require_relative "tar_reader/entry"
PK(J[��c_MM,share/rubygems/rubygems/package/digest_io.rbnu�[���# frozen_string_literal: true

##
# IO wrapper that creates digests of contents written to the IO it wraps.

class Gem::Package::DigestIO
  ##
  # Collected digests for wrapped writes.
  #
  #   {
  #     'SHA1'   => #<OpenSSL::Digest: [...]>,
  #     'SHA512' => #<OpenSSL::Digest: [...]>,
  #   }

  attr_reader :digests

  ##
  # Wraps +io+ and updates digest for each of the digest algorithms in
  # the +digests+ Hash.  Returns the digests hash.  Example:
  #
  #   io = StringIO.new
  #   digests = {
  #     'SHA1'   => OpenSSL::Digest.new('SHA1'),
  #     'SHA512' => OpenSSL::Digest.new('SHA512'),
  #   }
  #
  #   Gem::Package::DigestIO.wrap io, digests do |digest_io|
  #     digest_io.write "hello"
  #   end
  #
  #   digests['SHA1'].hexdigest   #=> "aaf4c61d[...]"
  #   digests['SHA512'].hexdigest #=> "9b71d224[...]"

  def self.wrap(io, digests)
    digest_io = new io, digests

    yield digest_io

    digests
  end

  ##
  # Creates a new DigestIO instance.  Using ::wrap is recommended, see the
  # ::wrap documentation for documentation of +io+ and +digests+.

  def initialize(io, digests)
    @io = io
    @digests = digests
  end

  ##
  # Writes +data+ to the underlying IO and updates the digests

  def write(data)
    result = @io.write data

    @digests.each do |_, digest|
      digest << data
    end

    result
  end
end
PK(J[bb.share/rubygems/rubygems/package/file_source.rbnu�[���# frozen_string_literal: true

##
# The primary source of gems is a file on disk, including all usages
# internal to rubygems.
#
# This is a private class, do not depend on it directly. Instead, pass a path
# object to `Gem::Package.new`.

class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
  attr_reader :path

  def initialize(path)
    @path = path
  end

  def start
    @start ||= File.read path, 20
  end

  def present?
    File.exist? path
  end

  def with_write_io(&block)
    File.open path, "wb", &block
  end

  def with_read_io(&block)
    File.open path, "rb", &block
  end
end
PK(J[��-share/rubygems/rubygems/package/tar_writer.rbnu�[���# frozen_string_literal: true

# rubocop:disable Style/AsciiComments

# Copyright (C) 2004 Mauricio Julio Fernández Pradier
# See LICENSE.txt for additional licensing information.

# rubocop:enable Style/AsciiComments

##
# Allows writing of tar files

class Gem::Package::TarWriter
  class FileOverflow < StandardError; end

  ##
  # IO wrapper that allows writing a limited amount of data

  class BoundedStream
    ##
    # Maximum number of bytes that can be written

    attr_reader :limit

    ##
    # Number of bytes written

    attr_reader :written

    ##
    # Wraps +io+ and allows up to +limit+ bytes to be written

    def initialize(io, limit)
      @io = io
      @limit = limit
      @written = 0
    end

    ##
    # Writes +data+ onto the IO, raising a FileOverflow exception if the
    # number of bytes will be more than #limit

    def write(data)
      if data.bytesize + @written > @limit
        raise FileOverflow, "You tried to feed more data than fits in the file."
      end
      @io.write data
      @written += data.bytesize
      data.bytesize
    end
  end

  ##
  # IO wrapper that provides only #write

  class RestrictedStream
    ##
    # Creates a new RestrictedStream wrapping +io+

    def initialize(io)
      @io = io
    end

    ##
    # Writes +data+ onto the IO

    def write(data)
      @io.write data
    end
  end

  ##
  # Creates a new TarWriter, yielding it if a block is given

  def self.new(io)
    writer = super

    return writer unless block_given?

    begin
      yield writer
    ensure
      writer.close
    end

    nil
  end

  ##
  # Creates a new TarWriter that will write to +io+

  def initialize(io)
    @io = io
    @closed = false
  end

  ##
  # Adds file +name+ with permissions +mode+, and yields an IO for writing the
  # file to

  def add_file(name, mode) # :yields: io
    check_closed

    name, prefix = split_name name

    init_pos = @io.pos
    @io.write Gem::Package::TarHeader::EMPTY_HEADER # placeholder for the header

    yield RestrictedStream.new(@io) if block_given?

    size = @io.pos - init_pos - 512

    remainder = (512 - (size % 512)) % 512
    @io.write "\0" * remainder

    final_pos = @io.pos
    @io.pos = init_pos

    header = Gem::Package::TarHeader.new name: name, mode: mode,
                                         size: size, prefix: prefix,
                                         mtime: Gem.source_date_epoch

    @io.write header
    @io.pos = final_pos

    self
  end

  ##
  # Adds +name+ with permissions +mode+ to the tar, yielding +io+ for writing
  # the file.  The +digest_algorithm+ is written to a read-only +name+.sum
  # file following the given file contents containing the digest name and
  # hexdigest separated by a tab.
  #
  # The created digest object is returned.

  def add_file_digest(name, mode, digest_algorithms) # :yields: io
    digests = digest_algorithms.map do |digest_algorithm|
      digest = digest_algorithm.new
      digest_name =
        if digest.respond_to? :name
          digest.name
        else
          digest_algorithm.class.name[/::([^:]+)\z/, 1]
        end

      [digest_name, digest]
    end

    digests = Hash[*digests.flatten]

    add_file name, mode do |io|
      Gem::Package::DigestIO.wrap io, digests do |digest_io|
        yield digest_io
      end
    end

    digests
  end

  ##
  # Adds +name+ with permissions +mode+ to the tar, yielding +io+ for writing
  # the file.  The +signer+ is used to add a digest file using its
  # digest_algorithm per add_file_digest and a cryptographic signature in
  # +name+.sig.  If the signer has no key only the checksum file is added.
  #
  # Returns the digest.

  def add_file_signed(name, mode, signer)
    digest_algorithms = [
      signer.digest_algorithm,
      Gem::Security.create_digest("SHA512"),
    ].compact.uniq

    digests = add_file_digest name, mode, digest_algorithms do |io|
      yield io
    end

    signature_digest = digests.values.compact.find do |digest|
      digest_name =
        if digest.respond_to? :name
          digest.name
        else
          digest.class.name[/::([^:]+)\z/, 1]
        end

      digest_name == signer.digest_name
    end

    raise "no #{signer.digest_name} in #{digests.values.compact}" unless signature_digest

    if signer.key
      signature = signer.sign signature_digest.digest

      add_file_simple "#{name}.sig", 0o444, signature.length do |io|
        io.write signature
      end
    end

    digests
  end

  ##
  # Add file +name+ with permissions +mode+ +size+ bytes long.  Yields an IO
  # to write the file to.

  def add_file_simple(name, mode, size) # :yields: io
    check_closed

    name, prefix = split_name name

    header = Gem::Package::TarHeader.new(name: name, mode: mode,
                                         size: size, prefix: prefix,
                                         mtime: Gem.source_date_epoch).to_s

    @io.write header
    os = BoundedStream.new @io, size

    yield os if block_given?

    min_padding = size - os.written
    @io.write("\0" * min_padding)

    remainder = (512 - (size % 512)) % 512
    @io.write("\0" * remainder)

    self
  end

  ##
  # Adds symlink +name+ with permissions +mode+, linking to +target+.

  def add_symlink(name, target, mode)
    check_closed

    name, prefix = split_name name

    header = Gem::Package::TarHeader.new(name: name, mode: mode,
                                         size: 0, typeflag: "2",
                                         linkname: target,
                                         prefix: prefix,
                                         mtime: Gem.source_date_epoch).to_s

    @io.write header

    self
  end

  ##
  # Raises IOError if the TarWriter is closed

  def check_closed
    raise IOError, "closed #{self.class}" if closed?
  end

  ##
  # Closes the TarWriter

  def close
    check_closed

    @io.write "\0" * 1024
    flush

    @closed = true
  end

  ##
  # Is the TarWriter closed?

  def closed?
    @closed
  end

  ##
  # Flushes the TarWriter's IO

  def flush
    check_closed

    @io.flush if @io.respond_to? :flush
  end

  ##
  # Creates a new directory in the tar file +name+ with +mode+

  def mkdir(name, mode)
    check_closed

    name, prefix = split_name(name)

    header = Gem::Package::TarHeader.new name: name, mode: mode,
                                         typeflag: "5", size: 0,
                                         prefix: prefix,
                                         mtime: Gem.source_date_epoch

    @io.write header

    self
  end

  ##
  # Splits +name+ into a name and prefix that can fit in the TarHeader

  def split_name(name) # :nodoc:
    if name.bytesize > 256
      raise Gem::Package::TooLongFileName.new("File \"#{name}\" has a too long path (should be 256 or less)")
    end

    prefix = ""
    if name.bytesize > 100
      parts = name.split("/", -1) # parts are never empty here
      name = parts.pop            # initially empty for names with a trailing slash ("foo/.../bar/")
      prefix = parts.join("/")    # if empty, then it's impossible to split (parts is empty too)
      while !parts.empty? && (prefix.bytesize > 155 || name.empty?)
        name = parts.pop + "/" + name
        prefix = parts.join("/")
      end

      if name.bytesize > 100 || prefix.empty?
        raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
      end

      if prefix.bytesize > 155
        raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long base path (should be 155 or less)")
      end
    end

    [name, prefix]
  end
end
PK(J[���&share/rubygems/rubygems/package/old.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

##
# The format class knows the guts of the ancient .gem file format and provides
# the capability to read such ancient gems.
#
# Please pretend this doesn't exist.

class Gem::Package::Old < Gem::Package
  undef_method :spec=

  ##
  # Creates a new old-format package reader for +gem+.  Old-format packages
  # cannot be written.

  def initialize(gem, security_policy)
    require "fileutils"
    require "zlib"
    Gem.load_yaml

    @contents        = nil
    @gem             = gem
    @security_policy = security_policy
    @spec            = nil
  end

  ##
  # A list of file names contained in this gem

  def contents
    verify

    return @contents if @contents

    @gem.with_read_io do |io|
      read_until_dashes io # spec
      header = file_list io

      @contents = header.map {|file| file["path"] }
    end
  end

  ##
  # Extracts the files in this package into +destination_dir+

  def extract_files(destination_dir)
    verify

    errstr = "Error reading files from gem"

    @gem.with_read_io do |io|
      read_until_dashes io # spec
      header = file_list io
      raise Gem::Exception, errstr unless header

      header.each do |entry|
        full_name = entry["path"]

        destination = install_location full_name, destination_dir

        file_data = String.new

        read_until_dashes io do |line|
          file_data << line
        end

        file_data = file_data.strip.unpack1("m")
        file_data = Zlib::Inflate.inflate file_data

        raise Gem::Package::FormatError, "#{full_name} in #{@gem} is corrupt" if
          file_data.length != entry["size"].to_i

        FileUtils.rm_rf destination

        FileUtils.mkdir_p File.dirname(destination), mode: dir_mode && 0o755

        File.open destination, "wb", file_mode(entry["mode"]) do |out|
          out.write file_data
        end

        verbose destination
      end
    end
  rescue Zlib::DataError
    raise Gem::Exception, errstr
  end

  ##
  # Reads the file list section from the old-format gem +io+

  def file_list(io) # :nodoc:
    header = String.new

    read_until_dashes io do |line|
      header << line
    end

    Gem::SafeYAML.safe_load header
  end

  ##
  # Reads lines until a "---" separator is found

  def read_until_dashes(io) # :nodoc:
    while (line = io.gets) && line.chomp.strip != "---" do
      yield line if block_given?
    end
  end

  ##
  # Skips the Ruby self-install header in +io+.

  def skip_ruby(io) # :nodoc:
    loop do
      line = io.gets

      return if line.chomp == "__END__"
      break unless line
    end

    raise Gem::Exception, "Failed to find end of Ruby script while reading gem"
  end

  ##
  # The specification for this gem

  def spec
    verify

    return @spec if @spec

    yaml = String.new

    @gem.with_read_io do |io|
      skip_ruby io
      read_until_dashes io do |line|
        yaml << line
      end
    end

    begin
      @spec = Gem::Specification.from_yaml yaml
    rescue Psych::SyntaxError
      raise Gem::Exception, "Failed to parse gem specification out of gem file"
    end
  rescue ArgumentError
    raise Gem::Exception, "Failed to parse gem specification out of gem file"
  end

  ##
  # Raises an exception if a security policy that verifies data is active.
  # Old format gems cannot be verified as signed.

  def verify
    return true unless @security_policy

    raise Gem::Security::Exception,
          "old format gems do not contain signatures and cannot be verified" if
      @security_policy.verify_data

    true
  end
end
PK(J[Fj�'''share/rubygems/rubygems/package_task.rbnu�[���# frozen_string_literal: true

# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

require_relative "../rubygems"
require_relative "package"
require "rake/packagetask"

##
# Create a package based upon a Gem::Specification.  Gem packages, as well as
# zip files and tar/gzipped packages can be produced by this task.
#
# In addition to the Rake targets generated by Rake::PackageTask, a
# Gem::PackageTask will also generate the following tasks:
#
# [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.gem"</b>]
#   Create a RubyGems package with the given name and version.
#
# Example using a Gem::Specification:
#
#   require 'rubygems'
#   require 'rubygems/package_task'
#
#   spec = Gem::Specification.new do |s|
#     s.summary = "Ruby based make-like utility."
#     s.name = 'rake'
#     s.version = PKG_VERSION
#     s.requirements << 'none'
#     s.files = PKG_FILES
#     s.description = <<-EOF
#   Rake is a Make-like program implemented in Ruby. Tasks
#   and dependencies are specified in standard Ruby syntax.
#     EOF
#   end
#
#   Gem::PackageTask.new(spec) do |pkg|
#     pkg.need_zip = true
#     pkg.need_tar = true
#   end

class Gem::PackageTask < Rake::PackageTask
  ##
  # Ruby Gem::Specification containing the metadata for this package.  The
  # name, version and package_files are automatically determined from the
  # gemspec and don't need to be explicitly provided.

  attr_accessor :gem_spec

  ##
  # Create a Gem Package task library.  Automatically define the gem if a
  # block is given.  If no block is supplied, then #define needs to be called
  # to define the task.

  def initialize(gem_spec)
    init gem_spec
    yield self if block_given?
    define if block_given?
  end

  ##
  # Initialization tasks without the "yield self" or define operations.

  def init(gem)
    super gem.full_name, :noversion
    @gem_spec = gem
    @package_files += gem_spec.files if gem_spec.files
    @fileutils_output = $stdout
  end

  ##
  # Create the Rake tasks and actions specified by this Gem::PackageTask.
  # (+define+ is automatically called if a block is given to +new+).

  def define
    super

    gem_file = File.basename gem_spec.cache_file
    gem_path = File.join package_dir, gem_file
    gem_dir  = File.join package_dir, gem_spec.full_name

    task package: [:gem]

    directory package_dir
    directory gem_dir

    desc "Build the gem file #{gem_file}"
    task gem: [gem_path]

    trace = Rake.application.options.trace
    Gem.configuration.verbose = trace

    file gem_path => [package_dir, gem_dir] + @gem_spec.files do
      chdir(gem_dir) do
        when_writing "Creating #{gem_spec.file_name}" do
          Gem::Package.build gem_spec

          verbose trace do
            mv gem_file, ".."
          end
        end
      end
    end
  end
end
PK(J[I��5�"�""share/rubygems/rubygems/request.rbnu�[���# frozen_string_literal: true

require_relative "vendored_net_http"
require_relative "user_interaction"

class Gem::Request
  extend Gem::UserInteraction
  include Gem::UserInteraction

  ###
  # Legacy.  This is used in tests.
  def self.create_with_proxy(uri, request_class, last_modified, proxy) # :nodoc:
    cert_files = get_cert_files
    proxy ||= get_proxy_from_env(uri.scheme)
    pool = ConnectionPools.new proxy_uri(proxy), cert_files

    new(uri, request_class, last_modified, pool.pool_for(uri))
  end

  def self.proxy_uri(proxy) # :nodoc:
    require_relative "vendor/uri/lib/uri"
    case proxy
    when :no_proxy then nil
    when Gem::URI::HTTP then proxy
    else Gem::URI.parse(proxy)
    end
  end

  def initialize(uri, request_class, last_modified, pool)
    @uri = uri
    @request_class = request_class
    @last_modified = last_modified
    @requests = Hash.new(0).compare_by_identity
    @user_agent = user_agent

    @connection_pool = pool
  end

  def proxy_uri
    @connection_pool.proxy_uri
  end

  def cert_files
    @connection_pool.cert_files
  end

  def self.get_cert_files
    pattern = File.expand_path("./ssl_certs/*/*.pem", __dir__)
    Dir.glob(pattern)
  end

  def self.configure_connection_for_https(connection, cert_files)
    raise Gem::Exception.new("OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources") unless Gem::HAVE_OPENSSL

    connection.use_ssl = true
    connection.verify_mode =
      Gem.configuration.ssl_verify_mode || OpenSSL::SSL::VERIFY_PEER
    store = OpenSSL::X509::Store.new

    if Gem.configuration.ssl_client_cert
      pem = File.read Gem.configuration.ssl_client_cert
      connection.cert = OpenSSL::X509::Certificate.new pem
      connection.key = OpenSSL::PKey::RSA.new pem
    end

    store.set_default_paths
    cert_files.each do |ssl_cert_file|
      store.add_file ssl_cert_file
    end
    if Gem.configuration.ssl_ca_cert
      if File.directory? Gem.configuration.ssl_ca_cert
        store.add_path Gem.configuration.ssl_ca_cert
      else
        store.add_file Gem.configuration.ssl_ca_cert
      end
    end
    connection.cert_store = store

    connection.verify_callback = proc do |preverify_ok, store_context|
      verify_certificate store_context unless preverify_ok

      preverify_ok
    end

    connection
  end

  def self.verify_certificate(store_context)
    depth  = store_context.error_depth
    error  = store_context.error_string
    number = store_context.error
    cert   = store_context.current_cert

    ui.alert_error "SSL verification error at depth #{depth}: #{error} (#{number})"

    extra_message = verify_certificate_message number, cert

    ui.alert_error extra_message if extra_message
  end

  def self.verify_certificate_message(error_number, cert)
    return unless cert
    case error_number
    when OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED then
      require "time"
      "Certificate #{cert.subject} expired at #{cert.not_after.iso8601}"
    when OpenSSL::X509::V_ERR_CERT_NOT_YET_VALID then
      require "time"
      "Certificate #{cert.subject} not valid until #{cert.not_before.iso8601}"
    when OpenSSL::X509::V_ERR_CERT_REJECTED then
      "Certificate #{cert.subject} is rejected"
    when OpenSSL::X509::V_ERR_CERT_UNTRUSTED then
      "Certificate #{cert.subject} is not trusted"
    when OpenSSL::X509::V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT then
      "Certificate #{cert.issuer} is not trusted"
    when OpenSSL::X509::V_ERR_INVALID_CA then
      "Certificate #{cert.subject} is an invalid CA certificate"
    when OpenSSL::X509::V_ERR_INVALID_PURPOSE then
      "Certificate #{cert.subject} has an invalid purpose"
    when OpenSSL::X509::V_ERR_SELF_SIGNED_CERT_IN_CHAIN then
      "Root certificate is not trusted (#{cert.subject})"
    when OpenSSL::X509::V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY then
      "You must add #{cert.issuer} to your local trusted store"
    when
      OpenSSL::X509::V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE then
      "Cannot verify certificate issued by #{cert.issuer}"
    end
  end

  ##
  # Creates or an HTTP connection based on +uri+, or retrieves an existing
  # connection, using a proxy if needed.

  def connection_for(uri)
    @connection_pool.checkout
  rescue Gem::HAVE_OPENSSL ? OpenSSL::SSL::SSLError : Errno::EHOSTDOWN,
         Errno::EHOSTDOWN => e
    raise Gem::RemoteFetcher::FetchError.new(e.message, uri)
  end

  def fetch
    request = @request_class.new @uri.request_uri

    unless @uri.nil? || @uri.user.nil? || @uri.user.empty?
      request.basic_auth Gem::UriFormatter.new(@uri.user).unescape,
                         Gem::UriFormatter.new(@uri.password).unescape
    end

    request.add_field "User-Agent", @user_agent
    request.add_field "Connection", "keep-alive"
    request.add_field "Keep-Alive", "30"

    if @last_modified
      require "time"
      request.add_field "If-Modified-Since", @last_modified.httpdate
    end

    yield request if block_given?

    perform_request request
  end

  ##
  # Returns a proxy URI for the given +scheme+ if one is set in the
  # environment variables.

  def self.get_proxy_from_env(scheme = "http")
    downcase_scheme = scheme.downcase
    upcase_scheme = scheme.upcase
    env_proxy = ENV["#{downcase_scheme}_proxy"] || ENV["#{upcase_scheme}_PROXY"]

    no_env_proxy = env_proxy.nil? || env_proxy.empty?

    if no_env_proxy
      return ["https", "http"].include?(downcase_scheme) ? :no_proxy : get_proxy_from_env("http")
    end

    require "uri"
    uri = Gem::URI(Gem::UriFormatter.new(env_proxy).normalize)

    if uri && uri.user.nil? && uri.password.nil?
      user     = ENV["#{downcase_scheme}_proxy_user"] || ENV["#{upcase_scheme}_PROXY_USER"]
      password = ENV["#{downcase_scheme}_proxy_pass"] || ENV["#{upcase_scheme}_PROXY_PASS"]

      uri.user     = Gem::UriFormatter.new(user).escape
      uri.password = Gem::UriFormatter.new(password).escape
    end

    uri
  end

  def perform_request(request) # :nodoc:
    connection = connection_for @uri

    retried = false
    bad_response = false

    begin
      @requests[connection] += 1

      verbose "#{request.method} #{Gem::Uri.redact(@uri)}"

      file_name = File.basename(@uri.path)
      # perform download progress reporter only for gems
      if request.response_body_permitted? && file_name =~ /\.gem$/
        reporter = ui.download_reporter
        response = connection.request(request) do |incomplete_response|
          if Gem::Net::HTTPOK === incomplete_response
            reporter.fetch(file_name, incomplete_response.content_length)
            downloaded = 0
            data = String.new

            incomplete_response.read_body do |segment|
              data << segment
              downloaded += segment.length
              reporter.update(downloaded)
            end
            reporter.done
            if incomplete_response.respond_to? :body=
              incomplete_response.body = data
            else
              incomplete_response.instance_variable_set(:@body, data)
            end
          end
        end
      else
        response = connection.request request
      end

      verbose "#{response.code} #{response.message}"
    rescue Gem::Net::HTTPBadResponse
      verbose "bad response"

      reset connection

      raise Gem::RemoteFetcher::FetchError.new("too many bad responses", @uri) if bad_response

      bad_response = true
      retry
    rescue Gem::Net::HTTPFatalError
      verbose "fatal error"

      raise Gem::RemoteFetcher::FetchError.new("fatal error", @uri)
    # HACK: work around EOFError bug in Gem::Net::HTTP
    # NOTE Errno::ECONNABORTED raised a lot on Windows, and make impossible
    # to install gems.
    rescue EOFError, Gem::Timeout::Error,
           Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EPIPE

      requests = @requests[connection]
      verbose "connection reset after #{requests} requests, retrying"

      raise Gem::RemoteFetcher::FetchError.new("too many connection resets", @uri) if retried

      reset connection

      retried = true
      retry
    end

    response
  ensure
    @connection_pool.checkin connection
  end

  ##
  # Resets HTTP connection +connection+.

  def reset(connection)
    @requests.delete connection

    connection.finish
    connection.start
  end

  def user_agent
    ua = "RubyGems/#{Gem::VERSION} #{Gem::Platform.local}".dup

    ruby_version = RUBY_VERSION
    ruby_version += "dev" if RUBY_PATCHLEVEL == -1

    ua << " Ruby/#{ruby_version} (#{RUBY_RELEASE_DATE}"
    if RUBY_PATCHLEVEL >= 0
      ua << " patchlevel #{RUBY_PATCHLEVEL}"
    else
      ua << " revision #{RUBY_REVISION}"
    end
    ua << ")"

    ua << " #{RUBY_ENGINE}" if RUBY_ENGINE != "ruby"

    ua
  end
end

require_relative "request/http_pool"
require_relative "request/https_pool"
require_relative "request/connection_pools"
PK(J[��d5d5"share/rubygems/rubygems/version.rbnu�[���# frozen_string_literal: true

require_relative "deprecate"

##
# The Version class processes string versions into comparable
# values. A version string should normally be a series of numbers
# separated by periods. Each part (digits separated by periods) is
# considered its own number, and these are used for sorting. So for
# instance, 3.10 sorts higher than 3.2 because ten is greater than
# two.
#
# If any part contains letters (currently only a-z are supported) then
# that version is considered prerelease. Versions with a prerelease
# part in the Nth part sort less than versions with N-1
# parts. Prerelease parts are sorted alphabetically using the normal
# Ruby string sorting rules. If a prerelease part contains both
# letters and numbers, it will be broken into multiple parts to
# provide expected sort behavior (1.0.a10 becomes 1.0.a.10, and is
# greater than 1.0.a9).
#
# Prereleases sort between real releases (newest to oldest):
#
# 1. 1.0
# 2. 1.0.b1
# 3. 1.0.a.2
# 4. 0.9
#
# If you want to specify a version restriction that includes both prereleases
# and regular releases of the 1.x series this is the best way:
#
#   s.add_dependency 'example', '>= 1.0.0.a', '< 2.0.0'
#
# == How Software Changes
#
# Users expect to be able to specify a version constraint that gives them
# some reasonable expectation that new versions of a library will work with
# their software if the version constraint is true, and not work with their
# software if the version constraint is false.  In other words, the perfect
# system will accept all compatible versions of the library and reject all
# incompatible versions.
#
# Libraries change in 3 ways (well, more than 3, but stay focused here!).
#
# 1. The change may be an implementation detail only and have no effect on
#    the client software.
# 2. The change may add new features, but do so in a way that client software
#    written to an earlier version is still compatible.
# 3. The change may change the public interface of the library in such a way
#    that old software is no longer compatible.
#
# Some examples are appropriate at this point.  Suppose I have a Stack class
# that supports a <tt>push</tt> and a <tt>pop</tt> method.
#
# === Examples of Category 1 changes:
#
# * Switch from an array based implementation to a linked-list based
#   implementation.
# * Provide an automatic (and transparent) backing store for large stacks.
#
# === Examples of Category 2 changes might be:
#
# * Add a <tt>depth</tt> method to return the current depth of the stack.
# * Add a <tt>top</tt> method that returns the current top of stack (without
#   changing the stack).
# * Change <tt>push</tt> so that it returns the item pushed (previously it
#   had no usable return value).
#
# === Examples of Category 3 changes might be:
#
# * Changes <tt>pop</tt> so that it no longer returns a value (you must use
#   <tt>top</tt> to get the top of the stack).
# * Rename the methods to <tt>push_item</tt> and <tt>pop_item</tt>.
#
# == RubyGems Rational Versioning
#
# * Versions shall be represented by three non-negative integers, separated
#   by periods (e.g. 3.1.4).  The first integers is the "major" version
#   number, the second integer is the "minor" version number, and the third
#   integer is the "build" number.
#
# * A category 1 change (implementation detail) will increment the build
#   number.
#
# * A category 2 change (backwards compatible) will increment the minor
#   version number and reset the build number.
#
# * A category 3 change (incompatible) will increment the major build number
#   and reset the minor and build numbers.
#
# * Any "public" release of a gem should have a different version.  Normally
#   that means incrementing the build number.  This means a developer can
#   generate builds all day long, but as soon as they make a public release,
#   the version must be updated.
#
# === Examples
#
# Let's work through a project lifecycle using our Stack example from above.
#
# Version 0.0.1:: The initial Stack class is release.
# Version 0.0.2:: Switched to a linked=list implementation because it is
#                 cooler.
# Version 0.1.0:: Added a <tt>depth</tt> method.
# Version 1.0.0:: Added <tt>top</tt> and made <tt>pop</tt> return nil
#                 (<tt>pop</tt> used to return the  old top item).
# Version 1.1.0:: <tt>push</tt> now returns the value pushed (it used it
#                 return nil).
# Version 1.1.1:: Fixed a bug in the linked list implementation.
# Version 1.1.2:: Fixed a bug introduced in the last fix.
#
# Client A needs a stack with basic push/pop capability.  They write to the
# original interface (no <tt>top</tt>), so their version constraint looks like:
#
#   gem 'stack', '>= 0.0'
#
# Essentially, any version is OK with Client A.  An incompatible change to
# the library will cause them grief, but they are willing to take the chance
# (we call Client A optimistic).
#
# Client B is just like Client A except for two things: (1) They use the
# <tt>depth</tt> method and (2) they are worried about future
# incompatibilities, so they write their version constraint like this:
#
#   gem 'stack', '~> 0.1'
#
# The <tt>depth</tt> method was introduced in version 0.1.0, so that version
# or anything later is fine, as long as the version stays below version 1.0
# where incompatibilities are introduced.  We call Client B pessimistic
# because they are worried about incompatible future changes (it is OK to be
# pessimistic!).
#
# == Preventing Version Catastrophe:
#
# From: https://www.zenspider.com/ruby/2008/10/rubygems-how-to-preventing-catastrophe.html
#
# Let's say you're depending on the fnord gem version 2.y.z. If you
# specify your dependency as ">= 2.0.0" then, you're good, right? What
# happens if fnord 3.0 comes out and it isn't backwards compatible
# with 2.y.z? Your stuff will break as a result of using ">=". The
# better route is to specify your dependency with an "approximate" version
# specifier ("~>"). They're a tad confusing, so here is how the dependency
# specifiers work:
#
#   Specification From  ... To (exclusive)
#   ">= 3.0"      3.0   ... &infin;
#   "~> 3.0"      3.0   ... 4.0
#   "~> 3.0.0"    3.0.0 ... 3.1
#   "~> 3.5"      3.5   ... 4.0
#   "~> 3.5.0"    3.5.0 ... 3.6
#   "~> 3"        3.0   ... 4.0
#
# For the last example, single-digit versions are automatically extended with
# a zero to give a sensible result.

class Gem::Version
  include Comparable

  VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?' # :nodoc:
  ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc:

  ##
  # A string representation of this Version.

  def version
    @version
  end

  alias_method :to_s, :version

  ##
  # True if the +version+ string matches RubyGems' requirements.

  def self.correct?(version)
    nil_versions_are_discouraged! if version.nil?

    ANCHORED_VERSION_PATTERN.match?(version.to_s)
  end

  ##
  # Factory method to create a Version object. Input may be a Version
  # or a String. Intended to simplify client code.
  #
  #   ver1 = Version.create('1.3.17')   # -> (Version object)
  #   ver2 = Version.create(ver1)       # -> (ver1)
  #   ver3 = Version.create(nil)        # -> nil

  def self.create(input)
    if self === input # check yourself before you wreck yourself
      input
    elsif input.nil?
      nil_versions_are_discouraged!

      nil
    else
      new input
    end
  end

  @@all = {}
  @@bump = {}
  @@release = {}

  def self.new(version) # :nodoc:
    return super unless self == Gem::Version

    @@all[version] ||= super
  end

  def self.nil_versions_are_discouraged!
    unless Gem::Deprecate.skip
      warn "nil versions are discouraged and will be deprecated in Rubygems 4"
    end
  end

  private_class_method :nil_versions_are_discouraged!

  ##
  # Constructs a Version from the +version+ string.  A version string is a
  # series of digits or ASCII letters separated by dots.

  def initialize(version)
    unless self.class.correct?(version)
      raise ArgumentError, "Malformed version number string #{version}"
    end

    # If version is an empty string convert it to 0
    version = 0 if version.is_a?(String) && /\A\s*\Z/.match?(version)

    @version = version.to_s

    # optimization to avoid allocation when given an integer, since we know
    # it's to_s won't have any spaces or dashes
    unless version.is_a?(Integer)
      @version = @version.strip
      @version.gsub!("-",".pre.")
    end
    @version = -@version
    @segments = nil
  end

  ##
  # Return a new version object where the next to the last revision
  # number is one greater (e.g., 5.3.1 => 5.4).
  #
  # Pre-release (alpha) parts, e.g, 5.3.1.b.2 => 5.4, are ignored.

  def bump
    @@bump[self] ||= begin
                       segments = self.segments
                       segments.pop while segments.any? {|s| String === s }
                       segments.pop if segments.size > 1

                       segments[-1] = segments[-1].succ
                       self.class.new segments.join(".")
                     end
  end

  ##
  # A Version is only eql? to another version if it's specified to the
  # same precision. Version "1.0" is not the same as version "1".

  def eql?(other)
    self.class === other && @version == other.version
  end

  def hash # :nodoc:
    canonical_segments.hash
  end

  def init_with(coder) # :nodoc:
    yaml_initialize coder.tag, coder.map
  end

  def inspect # :nodoc:
    "#<#{self.class} #{version.inspect}>"
  end

  ##
  # Dump only the raw version string, not the complete object. It's a
  # string for backwards (RubyGems 1.3.5 and earlier) compatibility.

  def marshal_dump
    [@version]
  end

  ##
  # Load custom marshal format. It's a string for backwards (RubyGems
  # 1.3.5 and earlier) compatibility.

  def marshal_load(array)
    string = array[0]
    raise TypeError, "wrong version string" unless string.is_a?(String)

    initialize string
  end

  def yaml_initialize(tag, map) # :nodoc:
    @version = -map["version"]
    @segments = nil
    @hash = nil
  end

  def encode_with(coder) # :nodoc:
    coder.add "version", @version
  end

  ##
  # A version is considered a prerelease if it contains a letter.

  def prerelease?
    unless instance_variable_defined? :@prerelease
      @prerelease = /[a-zA-Z]/.match?(version)
    end
    @prerelease
  end

  def pretty_print(q) # :nodoc:
    q.text "Gem::Version.new(#{version.inspect})"
  end

  ##
  # The release for this version (e.g. 1.2.0.a -> 1.2.0).
  # Non-prerelease versions return themselves.

  def release
    @@release[self] ||= if prerelease?
      segments = self.segments
      segments.pop while segments.any? {|s| String === s }
      self.class.new segments.join(".")
    else
      self
    end
  end

  def segments # :nodoc:
    _segments.dup
  end

  ##
  # A recommended version for use with a ~> Requirement.

  def approximate_recommendation
    segments = self.segments

    segments.pop    while segments.any? {|s| String === s }
    segments.pop    while segments.size > 2
    segments.push 0 while segments.size < 2

    recommendation = "~> #{segments.join(".")}"
    recommendation += ".a" if prerelease?
    recommendation
  end

  ##
  # Compares this version with +other+ returning -1, 0, or 1 if the
  # other version is larger, the same, or smaller than this
  # one. Attempts to compare to something that's not a
  # <tt>Gem::Version</tt> or a valid version String return +nil+.

  def <=>(other)
    return self <=> self.class.new(other) if (String === other) && self.class.correct?(other)

    return unless Gem::Version === other
    return 0 if @version == other.version || canonical_segments == other.canonical_segments

    lhsegments = canonical_segments
    rhsegments = other.canonical_segments

    lhsize = lhsegments.size
    rhsize = rhsegments.size
    limit  = (lhsize > rhsize ? rhsize : lhsize)

    i = 0

    while i < limit
      lhs = lhsegments[i]
      rhs = rhsegments[i]
      i += 1

      next      if lhs == rhs
      return -1 if String  === lhs && Numeric === rhs
      return  1 if Numeric === lhs && String  === rhs

      return lhs <=> rhs
    end

    lhs = lhsegments[i]

    if lhs.nil?
      rhs = rhsegments[i]

      while i < rhsize
        return 1 if String === rhs
        return -1 unless rhs.zero?
        rhs = rhsegments[i += 1]
      end
    else
      while i < lhsize
        return -1 if String === lhs
        return 1 unless lhs.zero?
        lhs = lhsegments[i += 1]
      end
    end

    0
  end

  # remove trailing zeros segments before first letter or at the end of the version
  def canonical_segments
    @canonical_segments ||= begin
      # remove trailing 0 segments, using dot or letter as anchor
      # may leave a trailing dot which will be ignored by partition_segments
      canonical_version = @version.sub(/(?<=[a-zA-Z.])[.0]+\z/, "")
      # remove 0 segments before the first letter in a prerelease version
      canonical_version.sub!(/(?<=\.|\A)[0.]+(?=[a-zA-Z])/, "") if prerelease?
      partition_segments(canonical_version)
    end
  end

  def freeze
    prerelease?
    _segments
    canonical_segments
    super
  end

  protected

  def _segments
    # segments is lazy so it can pick up version values that come from
    # old marshaled versions, which don't go through marshal_load.
    # since this version object is cached in @@all, its @segments should be frozen
    @segments ||= partition_segments(@version)
  end

  def partition_segments(ver)
    ver.scan(/\d+|[a-z]+/i).map! do |s|
      /\A\d/.match?(s) ? s.to_i : -s
    end.freeze
  end
end
PK(J[�6
�!�!&share/rubygems/rubygems/query_utils.rbnu�[���# frozen_string_literal: true

require_relative "local_remote_options"
require_relative "spec_fetcher"
require_relative "version_option"
require_relative "text"

module Gem::QueryUtils
  include Gem::Text
  include Gem::LocalRemoteOptions
  include Gem::VersionOption

  def add_query_options
    add_option("-i", "--[no-]installed",
               "Check for installed gem") do |value, options|
      options[:installed] = value
    end

    add_option("-I", "Equivalent to --no-installed") do |_value, options|
      options[:installed] = false
    end

    add_version_option command, "for use with --installed"

    add_option("-d", "--[no-]details",
               "Display detailed information of gem(s)") do |value, options|
      options[:details] = value
    end

    add_option("--[no-]versions",
               "Display only gem names") do |value, options|
      options[:versions] = value
      options[:details] = false unless value
    end

    add_option("-a", "--all",
               "Display all gem versions") do |value, options|
      options[:all] = value
    end

    add_option("-e", "--exact",
               "Name of gem(s) to query on matches the",
               "provided STRING") do |value, options|
      options[:exact] = value
    end

    add_option("--[no-]prerelease",
               "Display prerelease versions") do |value, options|
      options[:prerelease] = value
    end

    add_local_remote_options
  end

  def defaults_str # :nodoc:
    "--local --no-details --versions --no-installed"
  end

  def execute
    gem_names = if args.empty?
      [options[:name]]
    else
      options[:exact] ? args.map {|arg| /\A#{Regexp.escape(arg)}\Z/ } : args.map {|arg| /#{arg}/i }
    end

    terminate_interaction(check_installed_gems(gem_names)) if check_installed_gems?

    gem_names.each {|n| show_gems(n) }
  end

  private

  def check_installed_gems(gem_names)
    exit_code = 0

    if args.empty? && !gem_name?
      alert_error "You must specify a gem name"
      exit_code = 4
    elsif gem_names.count > 1
      alert_error "You must specify only ONE gem!"
      exit_code = 4
    else
      installed = installed?(gem_names.first, options[:version])
      installed = !installed unless options[:installed]

      say(installed)
      exit_code = 1 unless installed
    end

    exit_code
  end

  def check_installed_gems?
    !options[:installed].nil?
  end

  def gem_name?
    !options[:name].nil?
  end

  def prerelease
    options[:prerelease]
  end

  def show_prereleases?
    prerelease.nil? || prerelease
  end

  def args
    options[:args].to_a
  end

  def display_header(type)
    if (ui.outs.tty? && Gem.configuration.verbose) || both?
      say
      say "*** #{type} GEMS ***"
      say
    end
  end

  # Guts of original execute
  def show_gems(name)
    show_local_gems(name)  if local?
    show_remote_gems(name) if remote?
  end

  def show_local_gems(name, req = Gem::Requirement.default)
    display_header("LOCAL")

    specs = Gem::Specification.find_all do |s|
      name_matches = name ? s.name =~ name : true
      version_matches = show_prereleases? || !s.version.prerelease?

      name_matches && version_matches
    end.uniq(&:full_name)

    spec_tuples = specs.map do |spec|
      [spec.name_tuple, spec]
    end

    output_query_results(spec_tuples)
  end

  def show_remote_gems(name)
    display_header("REMOTE")

    fetcher = Gem::SpecFetcher.fetcher

    spec_tuples = if name.nil?
      fetcher.detect(specs_type) { true }
    else
      fetcher.detect(specs_type) do |name_tuple|
        name === name_tuple.name && options[:version].satisfied_by?(name_tuple.version)
      end
    end

    output_query_results(spec_tuples)
  end

  def specs_type
    if options[:all] || options[:version].specific?
      if options[:prerelease]
        :complete
      else
        :released
      end
    elsif options[:prerelease]
      :prerelease
    else
      :latest
    end
  end

  ##
  # Check if gem +name+ version +version+ is installed.

  def installed?(name, req = Gem::Requirement.default)
    Gem::Specification.any? {|s| s.name =~ name && req =~ s.version }
  end

  def output_query_results(spec_tuples)
    output = []
    versions = Hash.new {|h,name| h[name] = [] }

    spec_tuples.each do |spec_tuple, source|
      versions[spec_tuple.name] << [spec_tuple, source]
    end

    versions = versions.sort_by do |(n,_),_|
      n.downcase
    end

    output_versions output, versions

    say output.join(options[:details] ? "\n\n" : "\n")
  end

  def output_versions(output, versions)
    versions.each do |_gem_name, matching_tuples|
      matching_tuples = matching_tuples.sort_by {|n,_| n.version }.reverse

      platforms = Hash.new {|h,version| h[version] = [] }

      matching_tuples.each do |n, _|
        platforms[n.version] << n.platform if n.platform
      end

      seen = {}

      matching_tuples.delete_if do |n,_|
        if seen[n.version]
          true
        else
          seen[n.version] = true
          false
        end
      end

      output << clean_text(make_entry(matching_tuples, platforms))
    end
  end

  def entry_details(entry, detail_tuple, specs, platforms)
    return unless options[:details]

    name_tuple, spec = detail_tuple

    spec = spec.fetch_spec(name_tuple)if spec.respond_to?(:fetch_spec)

    entry << "\n"

    spec_platforms   entry, platforms
    spec_authors     entry, spec
    spec_homepage    entry, spec
    spec_license     entry, spec
    spec_loaded_from entry, spec, specs
    spec_summary     entry, spec
  end

  def entry_versions(entry, name_tuples, platforms, specs)
    return unless options[:versions]

    list =
      if platforms.empty? || options[:details]
        name_tuples.map(&:version).uniq
      else
        platforms.sort.reverse.map do |version, pls|
          out = version.to_s

          if options[:domain] == :local
            default = specs.any? do |s|
              !s.is_a?(Gem::Source) && s.version == version && s.default_gem?
            end
            out = "default: #{out}" if default
          end

          if pls != [Gem::Platform::RUBY]
            platform_list = [pls.delete(Gem::Platform::RUBY), *pls.sort].compact
            out = platform_list.unshift(out).join(" ")
          end

          out
        end
      end

    entry << " (#{list.join ", "})"
  end

  def make_entry(entry_tuples, platforms)
    detail_tuple = entry_tuples.first

    name_tuples, specs = entry_tuples.flatten.partition do |item|
      Gem::NameTuple === item
    end

    entry = [name_tuples.first.name]

    entry_versions(entry, name_tuples, platforms, specs)
    entry_details(entry, detail_tuple, specs, platforms)

    entry.join
  end

  def spec_authors(entry, spec)
    authors = "Author#{spec.authors.length > 1 ? "s" : ""}: ".dup
    authors << spec.authors.join(", ")
    entry << format_text(authors, 68, 4)
  end

  def spec_homepage(entry, spec)
    return if spec.homepage.nil? || spec.homepage.empty?

    entry << "\n" << format_text("Homepage: #{spec.homepage}", 68, 4)
  end

  def spec_license(entry, spec)
    return if spec.license.nil? || spec.license.empty?

    licenses = "License#{spec.licenses.length > 1 ? "s" : ""}: ".dup
    licenses << spec.licenses.join(", ")
    entry << "\n" << format_text(licenses, 68, 4)
  end

  def spec_loaded_from(entry, spec, specs)
    return unless spec.loaded_from

    if specs.length == 1
      default = spec.default_gem? ? " (default)" : nil
      entry << "\n" << "    Installed at#{default}: #{spec.base_dir}"
    else
      label = "Installed at"
      specs.each do |s|
        version = s.version.to_s
        default = s.default_gem? ? ", default" : ""
        entry << "\n" << "    #{label} (#{version}#{default}): #{s.base_dir}"
        label = " " * label.length
      end
    end
  end

  def spec_platforms(entry, platforms)
    non_ruby = platforms.any? do |_, pls|
      pls.any? {|pl| pl != Gem::Platform::RUBY }
    end

    return unless non_ruby

    if platforms.length == 1
      title = platforms.values.length == 1 ? "Platform" : "Platforms"
      entry << "    #{title}: #{platforms.values.sort.join(", ")}\n"
    else
      entry << "    Platforms:\n"

      sorted_platforms = platforms.sort

      sorted_platforms.each do |version, pls|
        label = "        #{version}: "
        data = format_text pls.sort.join(", "), 68, label.length
        data[0, label.length] = label
        entry << data << "\n"
      end
    end
  end

  def spec_summary(entry, spec)
    summary = truncate_text(spec.summary, "the summary for #{spec.full_name}")
    entry << "\n\n" << format_text(summary, 68, 4)
  end
end
PK(J[$_l
/share/rubygems/rubygems/request_set/lockfile.rbnu�[���# frozen_string_literal: true

##
# Parses a gem.deps.rb.lock file and constructs a LockSet containing the
# dependencies found inside.  If the lock file is missing no LockSet is
# constructed.

class Gem::RequestSet::Lockfile
  ##
  # Raised when a lockfile cannot be parsed

  class ParseError < Gem::Exception
    ##
    # The column where the error was encountered

    attr_reader :column

    ##
    # The line where the error was encountered

    attr_reader :line

    ##
    # The location of the lock file

    attr_reader :path

    ##
    # Raises a ParseError with the given +message+ which was encountered at a
    # +line+ and +column+ while parsing.

    def initialize(message, column, line, path)
      @line   = line
      @column = column
      @path   = path
      super "#{message} (at line #{line} column #{column})"
    end
  end

  ##
  # Creates a new Lockfile for the given +request_set+ and +gem_deps_file+
  # location.

  def self.build(request_set, gem_deps_file, dependencies = nil)
    request_set.resolve
    dependencies ||= requests_to_deps request_set.sorted_requests
    new request_set, gem_deps_file, dependencies
  end

  def self.requests_to_deps(requests) # :nodoc:
    deps = {}

    requests.each do |request|
      spec        = request.spec
      name        = request.name
      requirement = request.request.dependency.requirement

      deps[name] = if [Gem::Resolver::VendorSpecification,
                       Gem::Resolver::GitSpecification].include? spec.class
        Gem::Requirement.source_set
      else
        requirement
      end
    end

    deps
  end

  ##
  # The platforms for this Lockfile

  attr_reader :platforms

  def initialize(request_set, gem_deps_file, dependencies)
    @set           = request_set
    @dependencies  = dependencies
    @gem_deps_file = File.expand_path(gem_deps_file)
    @gem_deps_dir  = File.dirname(@gem_deps_file)
    @platforms = []
  end

  def add_DEPENDENCIES(out) # :nodoc:
    out << "DEPENDENCIES"

    out.concat @dependencies.sort.map {|name, requirement|
      "  #{name}#{requirement.for_lockfile}"
    }

    out << nil
  end

  def add_GEM(out, spec_groups) # :nodoc:
    return if spec_groups.empty?

    source_groups = spec_groups.values.flatten.group_by do |request|
      request.spec.source.uri
    end

    source_groups.sort_by {|group,| group.to_s }.map do |group, requests|
      out << "GEM"
      out << "  remote: #{group}"
      out << "  specs:"

      requests.sort_by(&:name).each do |request|
        next if request.spec.name == "bundler"
        platform = "-#{request.spec.platform}" unless
          request.spec.platform == Gem::Platform::RUBY

        out << "    #{request.name} (#{request.version}#{platform})"

        request.full_spec.dependencies.sort.each do |dependency|
          next if dependency.type == :development

          requirement = dependency.requirement
          out << "      #{dependency.name}#{requirement.for_lockfile}"
        end
      end
      out << nil
    end
  end

  def add_GIT(out, git_requests)
    return if git_requests.empty?

    by_repository_revision = git_requests.group_by do |request|
      source = request.spec.source
      [source.repository, source.rev_parse]
    end

    by_repository_revision.each do |(repository, revision), requests|
      out << "GIT"
      out << "  remote: #{repository}"
      out << "  revision: #{revision}"
      out << "  specs:"

      requests.sort_by(&:name).each do |request|
        out << "    #{request.name} (#{request.version})"

        dependencies = request.spec.dependencies.sort_by(&:name)
        dependencies.each do |dep|
          out << "      #{dep.name}#{dep.requirement.for_lockfile}"
        end
      end
      out << nil
    end
  end

  def relative_path_from(dest, base) # :nodoc:
    dest = File.expand_path(dest)
    base = File.expand_path(base)

    if dest.index(base) == 0
      offset = dest[base.size + 1..-1]

      return "." unless offset

      offset
    else
      dest
    end
  end

  def add_PATH(out, path_requests) # :nodoc:
    return if path_requests.empty?

    out << "PATH"
    path_requests.each do |request|
      directory = File.expand_path(request.spec.source.uri)

      out << "  remote: #{relative_path_from directory, @gem_deps_dir}"
      out << "  specs:"
      out << "    #{request.name} (#{request.version})"
    end

    out << nil
  end

  def add_PLATFORMS(out) # :nodoc:
    out << "PLATFORMS"

    platforms = requests.map {|request| request.spec.platform }.uniq

    platforms = platforms.sort_by(&:to_s)

    platforms.each do |platform|
      out << "  #{platform}"
    end

    out << nil
  end

  def spec_groups
    requests.group_by {|request| request.spec.class }
  end

  ##
  # The contents of the lock file.

  def to_s
    out = []

    groups = spec_groups

    add_PATH out, groups.delete(Gem::Resolver::VendorSpecification) { [] }

    add_GIT out, groups.delete(Gem::Resolver::GitSpecification) { [] }

    add_GEM out, groups

    add_PLATFORMS out

    add_DEPENDENCIES out

    out.join "\n"
  end

  ##
  # Writes the lock file alongside the gem dependencies file

  def write
    content = to_s

    File.open "#{@gem_deps_file}.lock", "w" do |io|
      io.write content
    end
  end

  private

  def requests
    @set.sorted_requests
  end
end

require_relative "lockfile/tokenizer"
PK(J[��D3�
�
9share/rubygems/rubygems/request_set/lockfile/tokenizer.rbnu�[���# frozen_string_literal: true

# ) frozen_string_literal: true
require_relative "parser"

class Gem::RequestSet::Lockfile::Tokenizer
  Token = Struct.new :type, :value, :column, :line
  EOF   = Token.new :EOF

  def self.from_file(file)
    new File.read(file), file
  end

  def initialize(input, filename = nil, line = 0, pos = 0)
    @line     = line
    @line_pos = pos
    @tokens   = []
    @filename = filename
    tokenize input
  end

  def make_parser(set, platforms)
    Gem::RequestSet::Lockfile::Parser.new self, set, platforms, @filename
  end

  def to_a
    @tokens.map {|token| [token.type, token.value, token.column, token.line] }
  end

  def skip(type)
    @tokens.shift while !@tokens.empty? && peek.type == type
  end

  ##
  # Calculates the column (by byte) and the line of the current token based on
  # +byte_offset+.

  def token_pos(byte_offset) # :nodoc:
    [byte_offset - @line_pos, @line]
  end

  def empty?
    @tokens.empty?
  end

  def unshift(token)
    @tokens.unshift token
  end

  def next_token
    @tokens.shift
  end
  alias_method :shift, :next_token

  def peek
    @tokens.first || EOF
  end

  private

  def tokenize(input)
    require "strscan"
    s = StringScanner.new input

    until s.eos? do
      pos = s.pos

      pos = s.pos if leading_whitespace = s.scan(/ +/)

      if s.scan(/[<|=>]{7}/)
        message = "your #{@filename} contains merge conflict markers"
        column, line = token_pos pos

        raise Gem::RequestSet::Lockfile::ParseError.new message, column, line, @filename
      end

      @tokens <<
        if s.scan(/\r?\n/)

          token = Token.new(:newline, nil, *token_pos(pos))
          @line_pos = s.pos
          @line += 1
          token
        elsif s.scan(/[A-Z]+/)

          if leading_whitespace
            text = s.matched
            text += s.scan(/[^\s)]*/).to_s # in case of no match
            Token.new(:text, text, *token_pos(pos))
          else
            Token.new(:section, s.matched, *token_pos(pos))
          end
        elsif s.scan(/([a-z]+):\s/)

          s.pos -= 1 # rewind for possible newline
          Token.new(:entry, s[1], *token_pos(pos))
        elsif s.scan(/\(/)

          Token.new(:l_paren, nil, *token_pos(pos))
        elsif s.scan(/\)/)

          Token.new(:r_paren, nil, *token_pos(pos))
        elsif s.scan(/<=|>=|=|~>|<|>|!=/)

          Token.new(:requirement, s.matched, *token_pos(pos))
        elsif s.scan(/,/)

          Token.new(:comma, nil, *token_pos(pos))
        elsif s.scan(/!/)

          Token.new(:bang, nil, *token_pos(pos))
        elsif s.scan(/[^\s),!]*/)

          Token.new(:text, s.matched, *token_pos(pos))
        else
          raise "BUG: can't create token for: #{s.string[s.pos..-1].inspect}"
        end
    end

    @tokens
  end
end
PK(J[/W�2��6share/rubygems/rubygems/request_set/lockfile/parser.rbnu�[���# frozen_string_literal: true

class Gem::RequestSet::Lockfile::Parser
  ###
  # Parses lockfiles

  def initialize(tokenizer, set, platforms, filename = nil)
    @tokens    = tokenizer
    @filename  = filename
    @set       = set
    @platforms = platforms
  end

  def parse
    until @tokens.empty? do
      token = get

      case token.type
      when :section then
        @tokens.skip :newline

        case token.value
        when "DEPENDENCIES" then
          parse_DEPENDENCIES
        when "GIT" then
          parse_GIT
        when "GEM" then
          parse_GEM
        when "PATH" then
          parse_PATH
        when "PLATFORMS" then
          parse_PLATFORMS
        else
          token = get until @tokens.empty? || peek.first == :section
        end
      else
        raise "BUG: unhandled token #{token.type} (#{token.value.inspect}) at line #{token.line} column #{token.column}"
      end
    end
  end

  ##
  # Gets the next token for a Lockfile

  def get(expected_types = nil, expected_value = nil) # :nodoc:
    token = @tokens.shift

    if expected_types && !Array(expected_types).include?(token.type)
      unget token

      message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " \
                "expected #{expected_types.inspect}"

      raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
    end

    if expected_value && expected_value != token.value
      unget token

      message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " \
                "expected [#{expected_types.inspect}, " \
                "#{expected_value.inspect}]"

      raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
    end

    token
  end

  def parse_DEPENDENCIES # :nodoc:
    while !@tokens.empty? && peek.type == :text do
      token = get :text

      requirements = []

      case peek[0]
      when :bang then
        get :bang

        requirements << pinned_requirement(token.value)
      when :l_paren then
        get :l_paren

        loop do
          op      = get(:requirement).value
          version = get(:text).value

          requirements << "#{op} #{version}"

          break unless peek.type == :comma

          get :comma
        end

        get :r_paren

        if peek[0] == :bang
          requirements.clear
          requirements << pinned_requirement(token.value)

          get :bang
        end
      end

      @set.gem token.value, *requirements

      skip :newline
    end
  end

  def parse_GEM # :nodoc:
    sources = []

    while peek.first(2) == [:entry, "remote"] do
      get :entry, "remote"
      data = get(:text).value
      skip :newline

      sources << Gem::Source.new(data)
    end

    sources << Gem::Source.new(Gem::DEFAULT_HOST) if sources.empty?

    get :entry, "specs"

    skip :newline

    set = Gem::Resolver::LockSet.new sources
    last_specs = nil

    while !@tokens.empty? && peek.type == :text do
      token = get :text
      name = token.value
      column = token.column

      case peek[0]
      when :newline then
        last_specs.each do |spec|
          spec.add_dependency Gem::Dependency.new name if column == 6
        end
      when :l_paren then
        get :l_paren

        token = get [:text, :requirement]
        type = token.type
        data = token.value

        if type == :text && column == 4
          version, platform = data.split "-", 2

          platform =
            platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY

          last_specs = set.add name, version, platform
        else
          dependency = parse_dependency name, data

          last_specs.each do |spec|
            spec.add_dependency dependency
          end
        end

        get :r_paren
      else
        raise "BUG: unknown token #{peek}"
      end

      skip :newline
    end

    @set.sets << set
  end

  def parse_GIT # :nodoc:
    get :entry, "remote"
    repository = get(:text).value

    skip :newline

    get :entry, "revision"
    revision = get(:text).value

    skip :newline

    type = peek.type
    value = peek.value
    if type == :entry && %w[branch ref tag].include?(value)
      get
      get :text

      skip :newline
    end

    get :entry, "specs"

    skip :newline

    set = Gem::Resolver::GitSet.new
    set.root_dir = @set.install_dir

    last_spec = nil

    while !@tokens.empty? && peek.type == :text do
      token = get :text
      name = token.value
      column = token.column

      case peek[0]
      when :newline then
        last_spec.add_dependency Gem::Dependency.new name if column == 6
      when :l_paren then
        get :l_paren

        token = get [:text, :requirement]
        type = token.type
        data = token.value

        if type == :text && column == 4
          last_spec = set.add_git_spec name, data, repository, revision, true
        else
          dependency = parse_dependency name, data

          last_spec.add_dependency dependency
        end

        get :r_paren
      else
        raise "BUG: unknown token #{peek}"
      end

      skip :newline
    end

    @set.sets << set
  end

  def parse_PATH # :nodoc:
    get :entry, "remote"
    directory = get(:text).value

    skip :newline

    get :entry, "specs"

    skip :newline

    set = Gem::Resolver::VendorSet.new
    last_spec = nil

    while !@tokens.empty? && peek.first == :text do
      token = get :text
      name = token.value
      column = token.column

      case peek[0]
      when :newline then
        last_spec.add_dependency Gem::Dependency.new name if column == 6
      when :l_paren then
        get :l_paren

        token = get [:text, :requirement]
        type = token.type
        data = token.value

        if type == :text && column == 4
          last_spec = set.add_vendor_gem name, directory
        else
          dependency = parse_dependency name, data

          last_spec.dependencies << dependency
        end

        get :r_paren
      else
        raise "BUG: unknown token #{peek}"
      end

      skip :newline
    end

    @set.sets << set
  end

  def parse_PLATFORMS # :nodoc:
    while !@tokens.empty? && peek.first == :text do
      name = get(:text).value

      @platforms << name

      skip :newline
    end
  end

  ##
  # Parses the requirements following the dependency +name+ and the +op+ for
  # the first token of the requirements and returns a Gem::Dependency object.

  def parse_dependency(name, op) # :nodoc:
    return Gem::Dependency.new name, op unless peek[0] == :text

    version = get(:text).value

    requirements = ["#{op} #{version}"]

    while peek.type == :comma do
      get :comma
      op      = get(:requirement).value
      version = get(:text).value

      requirements << "#{op} #{version}"
    end

    Gem::Dependency.new name, requirements
  end

  private

  def skip(type) # :nodoc:
    @tokens.skip type
  end

  ##
  # Peeks at the next token for Lockfile

  def peek # :nodoc:
    @tokens.peek
  end

  def pinned_requirement(name) # :nodoc:
    requirement = Gem::Dependency.new name
    specification = @set.sets.flat_map do |set|
      set.find_all(requirement)
    end.compact.first

    specification&.version
  end

  ##
  # Ungets the last token retrieved by #get

  def unget(token) # :nodoc:
    @tokens.unshift token
  end
end
PK(J[�8~��V�V9share/rubygems/rubygems/request_set/gem_dependency_api.rbnu�[���# frozen_string_literal: true

##
# A semi-compatible DSL for the Bundler Gemfile and Isolate gem dependencies
# files.
#
# To work with both the Bundler Gemfile and Isolate formats this
# implementation takes some liberties to allow compatibility with each, most
# notably in #source.
#
# A basic gem dependencies file will look like the following:
#
#   source 'https://rubygems.org'
#
#   gem 'rails', '3.2.14a
#   gem 'devise', '~> 2.1', '>= 2.1.3'
#   gem 'cancan'
#   gem 'airbrake'
#   gem 'pg'
#
# RubyGems recommends saving this as gem.deps.rb over Gemfile or Isolate.
#
# To install the gems in this Gemfile use `gem install -g` to install it and
# create a lockfile.  The lockfile will ensure that when you make changes to
# your gem dependencies file a minimum amount of change is made to the
# dependencies of your gems.
#
# RubyGems can activate all the gems in your dependencies file at startup
# using the RUBYGEMS_GEMDEPS environment variable or through Gem.use_gemdeps.
# See Gem.use_gemdeps for details and warnings.
#
# See `gem help install` and `gem help gem_dependencies` for further details.

class Gem::RequestSet::GemDependencyAPI
  ENGINE_MAP = { # :nodoc:
    jruby: %w[jruby],
    jruby_18: %w[jruby],
    jruby_19: %w[jruby],
    maglev: %w[maglev],
    mri: %w[ruby],
    mri_18: %w[ruby],
    mri_19: %w[ruby],
    mri_20: %w[ruby],
    mri_21: %w[ruby],
    rbx: %w[rbx],
    truffleruby: %w[truffleruby],
    ruby: %w[ruby rbx maglev truffleruby],
    ruby_18: %w[ruby rbx maglev truffleruby],
    ruby_19: %w[ruby rbx maglev truffleruby],
    ruby_20: %w[ruby rbx maglev truffleruby],
    ruby_21: %w[ruby rbx maglev truffleruby],
  }.freeze

  mswin     = Gem::Platform.new "x86-mswin32"
  mswin64   = Gem::Platform.new "x64-mswin64"
  x86_mingw = Gem::Platform.new "x86-mingw32"
  x64_mingw = Gem::Platform.new "x64-mingw32"

  PLATFORM_MAP = { # :nodoc:
    jruby: Gem::Platform::RUBY,
    jruby_18: Gem::Platform::RUBY,
    jruby_19: Gem::Platform::RUBY,
    maglev: Gem::Platform::RUBY,
    mingw: x86_mingw,
    mingw_18: x86_mingw,
    mingw_19: x86_mingw,
    mingw_20: x86_mingw,
    mingw_21: x86_mingw,
    mri: Gem::Platform::RUBY,
    mri_18: Gem::Platform::RUBY,
    mri_19: Gem::Platform::RUBY,
    mri_20: Gem::Platform::RUBY,
    mri_21: Gem::Platform::RUBY,
    mswin: mswin,
    mswin_18: mswin,
    mswin_19: mswin,
    mswin_20: mswin,
    mswin_21: mswin,
    mswin64: mswin64,
    mswin64_19: mswin64,
    mswin64_20: mswin64,
    mswin64_21: mswin64,
    rbx: Gem::Platform::RUBY,
    ruby: Gem::Platform::RUBY,
    ruby_18: Gem::Platform::RUBY,
    ruby_19: Gem::Platform::RUBY,
    ruby_20: Gem::Platform::RUBY,
    ruby_21: Gem::Platform::RUBY,
    truffleruby: Gem::Platform::RUBY,
    x64_mingw: x64_mingw,
    x64_mingw_20: x64_mingw,
    x64_mingw_21: x64_mingw,
  }.freeze

  gt_eq_0        = Gem::Requirement.new ">= 0"
  tilde_gt_1_8_0 = Gem::Requirement.new "~> 1.8.0"
  tilde_gt_1_9_0 = Gem::Requirement.new "~> 1.9.0"
  tilde_gt_2_0_0 = Gem::Requirement.new "~> 2.0.0"
  tilde_gt_2_1_0 = Gem::Requirement.new "~> 2.1.0"

  VERSION_MAP = { # :nodoc:
    jruby: gt_eq_0,
    jruby_18: tilde_gt_1_8_0,
    jruby_19: tilde_gt_1_9_0,
    maglev: gt_eq_0,
    mingw: gt_eq_0,
    mingw_18: tilde_gt_1_8_0,
    mingw_19: tilde_gt_1_9_0,
    mingw_20: tilde_gt_2_0_0,
    mingw_21: tilde_gt_2_1_0,
    mri: gt_eq_0,
    mri_18: tilde_gt_1_8_0,
    mri_19: tilde_gt_1_9_0,
    mri_20: tilde_gt_2_0_0,
    mri_21: tilde_gt_2_1_0,
    mswin: gt_eq_0,
    mswin_18: tilde_gt_1_8_0,
    mswin_19: tilde_gt_1_9_0,
    mswin_20: tilde_gt_2_0_0,
    mswin_21: tilde_gt_2_1_0,
    mswin64: gt_eq_0,
    mswin64_19: tilde_gt_1_9_0,
    mswin64_20: tilde_gt_2_0_0,
    mswin64_21: tilde_gt_2_1_0,
    rbx: gt_eq_0,
    ruby: gt_eq_0,
    ruby_18: tilde_gt_1_8_0,
    ruby_19: tilde_gt_1_9_0,
    ruby_20: tilde_gt_2_0_0,
    ruby_21: tilde_gt_2_1_0,
    truffleruby: gt_eq_0,
    x64_mingw: gt_eq_0,
    x64_mingw_20: tilde_gt_2_0_0,
    x64_mingw_21: tilde_gt_2_1_0,
  }.freeze

  WINDOWS = { # :nodoc:
    mingw: :only,
    mingw_18: :only,
    mingw_19: :only,
    mingw_20: :only,
    mingw_21: :only,
    mri: :never,
    mri_18: :never,
    mri_19: :never,
    mri_20: :never,
    mri_21: :never,
    mswin: :only,
    mswin_18: :only,
    mswin_19: :only,
    mswin_20: :only,
    mswin_21: :only,
    mswin64: :only,
    mswin64_19: :only,
    mswin64_20: :only,
    mswin64_21: :only,
    rbx: :never,
    ruby: :never,
    ruby_18: :never,
    ruby_19: :never,
    ruby_20: :never,
    ruby_21: :never,
    x64_mingw: :only,
    x64_mingw_20: :only,
    x64_mingw_21: :only,
  }.freeze

  ##
  # The gems required by #gem statements in the gem.deps.rb file

  attr_reader :dependencies

  ##
  # A set of gems that are loaded via the +:git+ option to #gem

  attr_reader :git_set # :nodoc:

  ##
  # A Hash containing gem names and files to require from those gems.

  attr_reader :requires

  ##
  # A set of gems that are loaded via the +:path+ option to #gem

  attr_reader :vendor_set # :nodoc:

  ##
  # The groups of gems to exclude from installation

  attr_accessor :without_groups # :nodoc:

  ##
  # Creates a new GemDependencyAPI that will add dependencies to the
  # Gem::RequestSet +set+ based on the dependency API description in +path+.

  def initialize(set, path)
    @set = set
    @path = path

    @current_groups     = nil
    @current_platforms  = nil
    @current_repository = nil
    @dependencies       = {}
    @default_sources    = true
    @git_set            = @set.git_set
    @git_sources        = {}
    @installing         = false
    @requires           = Hash.new {|h, name| h[name] = [] }
    @vendor_set         = @set.vendor_set
    @source_set         = @set.source_set
    @gem_sources        = {}
    @without_groups     = []

    git_source :github do |repo_name|
      repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include? "/"

      "https://github.com/#{repo_name}.git"
    end

    git_source :bitbucket do |repo_name|
      repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include? "/"

      user, = repo_name.split "/", 2

      "https://#{user}@bitbucket.org/#{repo_name}.git"
    end
  end

  ##
  # Adds +dependencies+ to the request set if any of the +groups+ are allowed.
  # This is used for gemspec dependencies.

  def add_dependencies(groups, dependencies) # :nodoc:
    return unless (groups & @without_groups).empty?

    dependencies.each do |dep|
      @set.gem dep.name, *dep.requirement.as_list
    end
  end

  private :add_dependencies

  ##
  # Finds a gemspec with the given +name+ that lives at +path+.

  def find_gemspec(name, path) # :nodoc:
    glob = File.join path, "#{name}.gemspec"

    spec_files = Dir[glob]

    case spec_files.length
    when 1 then
      spec_file = spec_files.first

      spec = Gem::Specification.load spec_file

      return spec if spec

      raise ArgumentError, "invalid gemspec #{spec_file}"
    when 0 then
      raise ArgumentError, "no gemspecs found at #{Dir.pwd}"
    else
      raise ArgumentError,
        "found multiple gemspecs at #{Dir.pwd}, " \
        "use the name: option to specify the one you want"
    end
  end

  ##
  # Changes the behavior of gem dependency file loading to installing mode.
  # In installing mode certain restrictions are ignored such as ruby version
  # mismatch checks.

  def installing=(installing) # :nodoc:
    @installing = installing
  end

  ##
  # Loads the gem dependency file and returns self.

  def load
    instance_eval File.read(@path), @path, 1

    self
  end

  ##
  # :category: Gem Dependencies DSL
  #
  # :call-seq:
  #   gem(name)
  #   gem(name, *requirements)
  #   gem(name, *requirements, options)
  #
  # Specifies a gem dependency with the given +name+ and +requirements+.  You
  # may also supply +options+ following the +requirements+
  #
  # +options+ include:
  #
  # require: ::
  #   RubyGems does not provide any autorequire features so requires in a gem
  #   dependencies file are recorded but ignored.
  #
  #   In bundler the require: option overrides the file to require during
  #   Bundler.require.  By default the name of the dependency is required in
  #   Bundler.  A single file or an Array of files may be given.
  #
  #   To disable requiring any file give +false+:
  #
  #     gem 'rake', require: false
  #
  # group: ::
  #   Place the dependencies in the given dependency group.  A single group or
  #   an Array of groups may be given.
  #
  #   See also #group
  #
  # platform: ::
  #   Only install the dependency on the given platform.  A single platform or
  #   an Array of platforms may be given.
  #
  #   See #platform for a list of platforms available.
  #
  # path: ::
  #   Install this dependency from an unpacked gem in the given directory.
  #
  #     gem 'modified_gem', path: 'vendor/modified_gem'
  #
  # git: ::
  #   Install this dependency from a git repository:
  #
  #     gem 'private_gem', git: 'git@my.company.example:private_gem.git'
  #
  # gist: ::
  #   Install this dependency from the gist ID:
  #
  #     gem 'bang', gist: '1232884'
  #
  # github: ::
  #   Install this dependency from a github git repository:
  #
  #     gem 'private_gem', github: 'my_company/private_gem'
  #
  # submodules: ::
  #   Set to +true+ to include submodules when fetching the git repository for
  #   git:, gist: and github: dependencies.
  #
  # ref: ::
  #   Use the given commit name or SHA for git:, gist: and github:
  #   dependencies.
  #
  # branch: ::
  #   Use the given branch for git:, gist: and github: dependencies.
  #
  # tag: ::
  #   Use the given tag for git:, gist: and github: dependencies.

  def gem(name, *requirements)
    options = requirements.pop if requirements.last.is_a?(Hash)
    options ||= {}

    options[:git] = @current_repository if @current_repository

    source_set = false

    source_set ||= gem_path       name, options
    source_set ||= gem_git        name, options
    source_set ||= gem_git_source name, options
    source_set ||= gem_source     name, options

    duplicate = @dependencies.include? name

    @dependencies[name] =
      if requirements.empty? && !source_set
        Gem::Requirement.default
      elsif source_set
        Gem::Requirement.source_set
      else
        Gem::Requirement.create requirements
      end

    return unless gem_platforms name, options

    groups = gem_group name, options

    return unless (groups & @without_groups).empty?

    pin_gem_source name, :default unless source_set

    gem_requires name, options

    if duplicate
      warn <<-WARNING
Gem dependencies file #{@path} requires #{name} more than once.
      WARNING
    end

    @set.gem name, *requirements
  end

  ##
  # Handles the git: option from +options+ for gem +name+.
  #
  # Returns +true+ if the gist or git option was handled.

  def gem_git(name, options) # :nodoc:
    if gist = options.delete(:gist)
      options[:git] = "https://gist.github.com/#{gist}.git"
    end

    return unless repository = options.delete(:git)

    pin_gem_source name, :git, repository

    reference = gem_git_reference options

    submodules = options.delete :submodules

    @git_set.add_git_gem name, repository, reference, submodules

    true
  end

  ##
  # Handles the git options from +options+ for git gem.
  #
  # Returns reference for the git gem.

  def gem_git_reference(options) # :nodoc:
    ref    = options.delete :ref
    branch = options.delete :branch
    tag    = options.delete :tag

    reference = nil
    reference ||= ref
    reference ||= branch
    reference ||= tag

    if ref && branch
      warn <<-WARNING
Gem dependencies file #{@path} includes git reference for both ref and branch but only ref is used.
      WARNING
    end
    if (ref || branch) && tag
      warn <<-WARNING
Gem dependencies file #{@path} includes git reference for both ref/branch and tag but only ref/branch is used.
      WARNING
    end

    reference
  end

  private :gem_git

  ##
  # Handles a git gem option from +options+ for gem +name+ for a git source
  # registered through git_source.
  #
  # Returns +true+ if the custom source option was handled.

  def gem_git_source(name, options) # :nodoc:
    return unless git_source = (@git_sources.keys & options.keys).last

    source_callback = @git_sources[git_source]
    source_param = options.delete git_source

    git_url = source_callback.call source_param

    options[:git] = git_url

    gem_git name, options

    true
  end

  private :gem_git_source

  ##
  # Handles the :group and :groups +options+ for the gem with the given
  # +name+.

  def gem_group(name, options) # :nodoc:
    g = options.delete :group
    all_groups = g ? Array(g) : []

    groups = options.delete :groups
    all_groups |= groups if groups

    all_groups |= @current_groups if @current_groups

    all_groups
  end

  private :gem_group

  ##
  # Handles the path: option from +options+ for gem +name+.
  #
  # Returns +true+ if the path option was handled.

  def gem_path(name, options) # :nodoc:
    return unless directory = options.delete(:path)

    pin_gem_source name, :path, directory

    @vendor_set.add_vendor_gem name, directory

    true
  end

  private :gem_path

  ##
  # Handles the source: option from +options+ for gem +name+.
  #
  # Returns +true+ if the source option was handled.

  def gem_source(name, options) # :nodoc:
    return unless source = options.delete(:source)

    pin_gem_source name, :source, source

    @source_set.add_source_gem name, source

    true
  end

  private :gem_source

  ##
  # Handles the platforms: option from +options+.  Returns true if the
  # platform matches the current platform.

  def gem_platforms(name, options) # :nodoc:
    platform_names = Array(options.delete(:platform))
    platform_names.concat Array(options.delete(:platforms))
    platform_names.concat @current_platforms if @current_platforms

    return true if platform_names.empty?

    platform_names.any? do |platform_name|
      raise ArgumentError, "unknown platform #{platform_name.inspect}" unless
        platform = PLATFORM_MAP[platform_name]

      next false unless Gem::Platform.match_gem? platform, name

      if engines = ENGINE_MAP[platform_name]
        next false unless engines.include? Gem.ruby_engine
      end

      case WINDOWS[platform_name]
      when :only then
        next false unless Gem.win_platform?
      when :never then
        next false if Gem.win_platform?
      end

      VERSION_MAP[platform_name].satisfied_by? Gem.ruby_version
    end
  end

  private :gem_platforms

  ##
  # Records the require: option from +options+ and adds those files, or the
  # default file to the require list for +name+.

  def gem_requires(name, options) # :nodoc:
    if options.include? :require
      if requires = options.delete(:require)
        @requires[name].concat Array requires
      end
    else
      @requires[name] << name
    end
    raise ArgumentError, "Unhandled gem options #{options.inspect}" unless options.empty?
  end

  private :gem_requires

  ##
  # :category: Gem Dependencies DSL
  #
  # Block form for specifying gems from a git +repository+.
  #
  #   git 'https://github.com/rails/rails.git' do
  #     gem 'activesupport'
  #     gem 'activerecord'
  #   end

  def git(repository)
    @current_repository = repository

    yield
  ensure
    @current_repository = nil
  end

  ##
  # Defines a custom git source that uses +name+ to expand git repositories
  # for use in gems built from git repositories.  You must provide a block
  # that accepts a git repository name for expansion.

  def git_source(name, &callback)
    @git_sources[name] = callback
  end

  ##
  # Returns the basename of the file the dependencies were loaded from

  def gem_deps_file # :nodoc:
    File.basename @path
  end

  ##
  # :category: Gem Dependencies DSL
  #
  # Loads dependencies from a gemspec file.
  #
  # +options+ include:
  #
  # name: ::
  #   The name portion of the gemspec file.  Defaults to searching for any
  #   gemspec file in the current directory.
  #
  #     gemspec name: 'my_gem'
  #
  # path: ::
  #   The path the gemspec lives in.  Defaults to the current directory:
  #
  #     gemspec 'my_gem', path: 'gemspecs', name: 'my_gem'
  #
  # development_group: ::
  #   The group to add development dependencies to.  By default this is
  #   :development.  Only one group may be specified.

  def gemspec(options = {})
    name              = options.delete(:name) || "{,*}"
    path              = options.delete(:path) || "."
    development_group = options.delete(:development_group) || :development

    spec = find_gemspec name, path

    groups = gem_group spec.name, {}

    self_dep = Gem::Dependency.new spec.name, spec.version

    add_dependencies groups, [self_dep]
    add_dependencies groups, spec.runtime_dependencies

    @dependencies[spec.name] = Gem::Requirement.source_set

    spec.dependencies.each do |dep|
      @dependencies[dep.name] = dep.requirement
    end

    groups << development_group

    add_dependencies groups, spec.development_dependencies

    @vendor_set.add_vendor_gem spec.name, path
    gem_requires spec.name, options
  end

  ##
  # :category: Gem Dependencies DSL
  #
  # Block form for placing a dependency in the given +groups+.
  #
  #   group :development do
  #     gem 'debugger'
  #   end
  #
  #   group :development, :test do
  #     gem 'minitest'
  #   end
  #
  # Groups can be excluded at install time using `gem install -g --without
  # development`.  See `gem help install` and `gem help gem_dependencies` for
  # further details.

  def group(*groups)
    @current_groups = groups

    yield
  ensure
    @current_groups = nil
  end

  ##
  # Pins the gem +name+ to the given +source+.  Adding a gem with the same
  # name from a different +source+ will raise an exception.

  def pin_gem_source(name, type = :default, source = nil)
    source_description =
      case type
      when :default then "(default)"
      when :path    then "path: #{source}"
      when :git     then "git: #{source}"
      when :source  then "source: #{source}"
      else               "(unknown)"
      end

    raise ArgumentError,
      "duplicate source #{source_description} for gem #{name}" if
        @gem_sources.fetch(name, source) != source

    @gem_sources[name] = source
  end

  private :pin_gem_source

  ##
  # :category: Gem Dependencies DSL
  #
  # Block form for restricting gems to a set of platforms.
  #
  # The gem dependencies platform is different from Gem::Platform.  A platform
  # gem.deps.rb platform matches on the ruby engine, the ruby version and
  # whether or not windows is allowed.
  #
  # :ruby, :ruby_XY ::
  #   Matches non-windows, non-jruby implementations where X and Y can be used
  #   to match releases in the 1.8, 1.9, 2.0 or 2.1 series.
  #
  # :mri, :mri_XY ::
  #   Matches non-windows C Ruby (Matz Ruby) or only the 1.8, 1.9, 2.0 or
  #   2.1 series.
  #
  # :mingw, :mingw_XY ::
  #   Matches 32 bit C Ruby on MinGW or only the 1.8, 1.9, 2.0 or 2.1 series.
  #
  # :x64_mingw, :x64_mingw_XY ::
  #   Matches 64 bit C Ruby on MinGW or only the 1.8, 1.9, 2.0 or 2.1 series.
  #
  # :mswin, :mswin_XY ::
  #   Matches 32 bit C Ruby on Microsoft Windows or only the 1.8, 1.9, 2.0 or
  #   2.1 series.
  #
  # :mswin64, :mswin64_XY ::
  #   Matches 64 bit C Ruby on Microsoft Windows or only the 1.8, 1.9, 2.0 or
  #   2.1 series.
  #
  # :jruby, :jruby_XY ::
  #   Matches JRuby or JRuby in 1.8 or 1.9 mode.
  #
  # :maglev ::
  #   Matches Maglev
  #
  # :rbx ::
  #   Matches non-windows Rubinius
  #
  # NOTE:  There is inconsistency in what environment a platform matches.  You
  # may need to read the source to know the exact details.

  def platform(*platforms)
    @current_platforms = platforms

    yield
  ensure
    @current_platforms = nil
  end

  ##
  # :category: Gem Dependencies DSL
  #
  # Block form for restricting gems to a particular set of platforms.  See
  # #platform.

  alias_method :platforms, :platform

  ##
  # :category: Gem Dependencies DSL
  #
  # Restricts this gem dependencies file to the given ruby +version+.
  #
  # You may also provide +engine:+ and +engine_version:+ options to restrict
  # this gem dependencies file to a particular ruby engine and its engine
  # version.  This matching is performed by using the RUBY_ENGINE and
  # RUBY_ENGINE_VERSION constants.

  def ruby(version, options = {})
    engine         = options[:engine]
    engine_version = options[:engine_version]

    raise ArgumentError,
          "You must specify engine_version along with the Ruby engine" if
            engine && !engine_version

    return true if @installing

    unless version == RUBY_VERSION
      message = "Your Ruby version is #{RUBY_VERSION}, " \
                "but your #{gem_deps_file} requires #{version}"

      raise Gem::RubyVersionMismatch, message
    end

    if engine && engine != Gem.ruby_engine
      message = "Your Ruby engine is #{Gem.ruby_engine}, " \
                "but your #{gem_deps_file} requires #{engine}"

      raise Gem::RubyVersionMismatch, message
    end

    if engine_version
      if engine_version != RUBY_ENGINE_VERSION
        message =
          "Your Ruby engine version is #{Gem.ruby_engine} #{RUBY_ENGINE_VERSION}, " \
          "but your #{gem_deps_file} requires #{engine} #{engine_version}"

        raise Gem::RubyVersionMismatch, message
      end
    end

    true
  end

  ##
  # :category: Gem Dependencies DSL
  #
  # Sets +url+ as a source for gems for this dependency API.  RubyGems uses
  # the default configured sources if no source was given.  If a source is set
  # only that source is used.
  #
  # This method differs in behavior from Bundler:
  #
  # * The +:gemcutter+, # +:rubygems+ and +:rubyforge+ sources are not
  #   supported as they are deprecated in bundler.
  # * The +prepend:+ option is not supported.  If you wish to order sources
  #   then list them in your preferred order.

  def source(url)
    Gem.sources.clear if @default_sources

    @default_sources = false

    Gem.sources << url
  end
end
PK)J[�.�V
:
:1share/rubygems/rubygems/vendor/tsort/lib/tsort.rbnu�[���# frozen_string_literal: true

#--
# tsort.rb - provides a module for topological sorting and strongly connected components.
#++
#

#
# Gem::TSort implements topological sorting using Tarjan's algorithm for
# strongly connected components.
#
# Gem::TSort is designed to be able to be used with any object which can be
# interpreted as a directed graph.
#
# Gem::TSort requires two methods to interpret an object as a graph,
# tsort_each_node and tsort_each_child.
#
# * tsort_each_node is used to iterate for all nodes over a graph.
# * tsort_each_child is used to iterate for child nodes of a given node.
#
# The equality of nodes are defined by eql? and hash since
# Gem::TSort uses Hash internally.
#
# == A Simple Example
#
# The following example demonstrates how to mix the Gem::TSort module into an
# existing class (in this case, Hash). Here, we're treating each key in
# the hash as a node in the graph, and so we simply alias the required
# #tsort_each_node method to Hash's #each_key method. For each key in the
# hash, the associated value is an array of the node's child nodes. This
# choice in turn leads to our implementation of the required #tsort_each_child
# method, which fetches the array of child nodes and then iterates over that
# array using the user-supplied block.
#
#   require 'rubygems/vendor/tsort/lib/tsort'
#
#   class Hash
#     include Gem::TSort
#     alias tsort_each_node each_key
#     def tsort_each_child(node, &block)
#       fetch(node).each(&block)
#     end
#   end
#
#   {1=>[2, 3], 2=>[3], 3=>[], 4=>[]}.tsort
#   #=> [3, 2, 1, 4]
#
#   {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}.strongly_connected_components
#   #=> [[4], [2, 3], [1]]
#
# == A More Realistic Example
#
# A very simple `make' like tool can be implemented as follows:
#
#   require 'rubygems/vendor/tsort/lib/tsort'
#
#   class Make
#     def initialize
#       @dep = {}
#       @dep.default = []
#     end
#
#     def rule(outputs, inputs=[], &block)
#       triple = [outputs, inputs, block]
#       outputs.each {|f| @dep[f] = [triple]}
#       @dep[triple] = inputs
#     end
#
#     def build(target)
#       each_strongly_connected_component_from(target) {|ns|
#         if ns.length != 1
#           fs = ns.delete_if {|n| Array === n}
#           raise Gem::TSort::Cyclic.new("cyclic dependencies: #{fs.join ', '}")
#         end
#         n = ns.first
#         if Array === n
#           outputs, inputs, block = n
#           inputs_time = inputs.map {|f| File.mtime f}.max
#           begin
#             outputs_time = outputs.map {|f| File.mtime f}.min
#           rescue Errno::ENOENT
#             outputs_time = nil
#           end
#           if outputs_time == nil ||
#              inputs_time != nil && outputs_time <= inputs_time
#             sleep 1 if inputs_time != nil && inputs_time.to_i == Time.now.to_i
#             block.call
#           end
#         end
#       }
#     end
#
#     def tsort_each_child(node, &block)
#       @dep[node].each(&block)
#     end
#     include Gem::TSort
#   end
#
#   def command(arg)
#     print arg, "\n"
#     system arg
#   end
#
#   m = Make.new
#   m.rule(%w[t1]) { command 'date > t1' }
#   m.rule(%w[t2]) { command 'date > t2' }
#   m.rule(%w[t3]) { command 'date > t3' }
#   m.rule(%w[t4], %w[t1 t3]) { command 'cat t1 t3 > t4' }
#   m.rule(%w[t5], %w[t4 t2]) { command 'cat t4 t2 > t5' }
#   m.build('t5')
#
# == Bugs
#
# * 'tsort.rb' is wrong name because this library uses
#   Tarjan's algorithm for strongly connected components.
#   Although 'strongly_connected_components.rb' is correct but too long.
#
# == References
#
# R. E. Tarjan, "Depth First Search and Linear Graph Algorithms",
# <em>SIAM Journal on Computing</em>, Vol. 1, No. 2, pp. 146-160, June 1972.
#

module Gem::TSort

  VERSION = "0.2.0"

  class Cyclic < StandardError
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # If there is a cycle, Gem::TSort::Cyclic is raised.
  #
  #   class G
  #     include Gem::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.tsort #=> [4, 2, 3, 1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.tsort # raises Gem::TSort::Cyclic
  #
  def tsort
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Gem::TSort.tsort(each_node, each_child)
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  # If there is a cycle, Gem::TSort::Cyclic is raised.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Gem::TSort.tsort(each_node, each_child) #=> [4, 2, 3, 1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Gem::TSort.tsort(each_node, each_child) # raises Gem::TSort::Cyclic
  #
  def self.tsort(each_node, each_child)
    tsort_each(each_node, each_child).to_a
  end

  # The iterator version of the #tsort method.
  # <tt><em>obj</em>.tsort_each</tt> is similar to <tt><em>obj</em>.tsort.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #tsort_each returns +nil+.
  # If there is a cycle, Gem::TSort::Cyclic is raised.
  #
  #   class G
  #     include Gem::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.tsort_each {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def tsort_each(&block) # :yields: node
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Gem::TSort.tsort_each(each_node, each_child, &block)
  end

  # The iterator version of the Gem::TSort.tsort method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Gem::TSort.tsort_each(each_node, each_child) {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def self.tsort_each(each_node, each_child) # :yields: node
    return to_enum(__method__, each_node, each_child) unless block_given?

    each_strongly_connected_component(each_node, each_child) {|component|
      if component.size == 1
        yield component.first
      else
        raise Cyclic.new("topological sort failed: #{component.inspect}")
      end
    }
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  #   class G
  #     include Gem::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2], [3], [1]]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2, 3], [1]]
  #
  def strongly_connected_components
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Gem::TSort.strongly_connected_components(each_node, each_child)
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Gem::TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2], [3], [1]]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Gem::TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2, 3], [1]]
  #
  def self.strongly_connected_components(each_node, each_child)
    each_strongly_connected_component(each_node, each_child).to_a
  end

  # The iterator version of the #strongly_connected_components method.
  # <tt><em>obj</em>.each_strongly_connected_component</tt> is similar to
  # <tt><em>obj</em>.strongly_connected_components.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #each_strongly_connected_component returns +nil+.
  #
  #   class G
  #     include Gem::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def each_strongly_connected_component(&block) # :yields: nodes
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Gem::TSort.each_strongly_connected_component(each_node, each_child, &block)
  end

  # The iterator version of the Gem::TSort.strongly_connected_components method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Gem::TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Gem::TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component(each_node, each_child) # :yields: nodes
    return to_enum(__method__, each_node, each_child) unless block_given?

    id_map = {}
    stack = []
    each_node.call {|node|
      unless id_map.include? node
        each_strongly_connected_component_from(node, each_child, id_map, stack) {|c|
          yield c
        }
      end
    }
    nil
  end

  # Iterates over strongly connected component in the subgraph reachable from
  # _node_.
  #
  # Return value is unspecified.
  #
  # #each_strongly_connected_component_from doesn't call #tsort_each_node.
  #
  #   class G
  #     include Gem::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #
  def each_strongly_connected_component_from(node, id_map={}, stack=[], &block) # :yields: nodes
    Gem::TSort.each_strongly_connected_component_from(node, method(:tsort_each_child), id_map, stack, &block)
  end

  # Iterates over strongly connected components in a graph.
  # The graph is represented by _node_ and _each_child_.
  #
  # _node_ is the first node.
  # _each_child_ should have +call+ method which takes a node argument
  # and yields for each child node.
  #
  # Return value is unspecified.
  #
  # #Gem::TSort.each_strongly_connected_component_from is a class method and
  # it doesn't need a class to represent a graph which includes Gem::TSort.
  #
  #   graph = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_child = lambda {|n, &b| graph[n].each(&b) }
  #   Gem::TSort.each_strongly_connected_component_from(1, each_child) {|scc|
  #     p scc
  #   }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component_from(node, each_child, id_map={}, stack=[]) # :yields: nodes
    return to_enum(__method__, node, each_child, id_map, stack) unless block_given?

    minimum_id = node_id = id_map[node] = id_map.size
    stack_length = stack.length
    stack << node

    each_child.call(node) {|child|
      if id_map.include? child
        child_id = id_map[child]
        minimum_id = child_id if child_id && child_id < minimum_id
      else
        sub_minimum_id =
          each_strongly_connected_component_from(child, each_child, id_map, stack) {|c|
            yield c
          }
        minimum_id = sub_minimum_id if sub_minimum_id < minimum_id
      end
    }

    if node_id == minimum_id
      component = stack.slice!(stack_length .. -1)
      component.each {|n| id_map[n] = nil}
      yield component
    end

    minimum_id
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_node is used to iterate for all nodes over a graph.
  #
  def tsort_each_node # :yields: node
    raise NotImplementedError.new
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_child is used to iterate for child nodes of _node_.
  #
  def tsort_each_child(node) # :yields: child
    raise NotImplementedError.new
  end
end
PK)J[7O��V	V	?share/rubygems/rubygems/vendor/securerandom/lib/securerandom.rbnu�[���# -*- coding: us-ascii -*-
# frozen_string_literal: true

require 'random/formatter'

# == Secure random number generator interface.
#
# This library is an interface to secure random number generators which are
# suitable for generating session keys in HTTP cookies, etc.
#
# You can use this library in your application by requiring it:
#
#   require 'rubygems/vendor/securerandom/lib/securerandom'
#
# It supports the following secure random number generators:
#
# * openssl
# * /dev/urandom
# * Win32
#
# Gem::SecureRandom is extended by the Random::Formatter module which
# defines the following methods:
#
# * alphanumeric
# * base64
# * choose
# * gen_random
# * hex
# * rand
# * random_bytes
# * random_number
# * urlsafe_base64
# * uuid
#
# These methods are usable as class methods of Gem::SecureRandom such as
# +Gem::SecureRandom.hex+.
#
# If a secure random number generator is not available,
# +NotImplementedError+ is raised.

module Gem::SecureRandom

  # The version
  VERSION = "0.4.1"

  class << self
    # Returns a random binary string containing +size+ bytes.
    #
    # See Random.bytes
    def bytes(n)
      return gen_random(n)
    end

    # Compatibility methods for Ruby 3.2, we can remove this after dropping to support Ruby 3.2
    def alphanumeric(n = nil, chars: ALPHANUMERIC)
      n = 16 if n.nil?
      choose(chars, n)
    end if RUBY_VERSION < '3.3'

    private

    # :stopdoc:

    # Implementation using OpenSSL
    def gen_random_openssl(n)
      return OpenSSL::Random.random_bytes(n)
    end

    # Implementation using system random device
    def gen_random_urandom(n)
      ret = Random.urandom(n)
      unless ret
        raise NotImplementedError, "No random device"
      end
      unless ret.length == n
        raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes"
      end
      ret
    end

    begin
      # Check if Random.urandom is available
      Random.urandom(1)
      alias gen_random gen_random_urandom
    rescue RuntimeError
      begin
        require 'openssl'
      rescue NoMethodError
        raise NotImplementedError, "No random device"
      else
        alias gen_random gen_random_openssl
      end
    end

    # :startdoc:

    # Generate random data bytes for Random::Formatter
    public :gen_random
  end
end

Gem::SecureRandom.extend(Random::Formatter)
PK)J[1�`v]v]3share/rubygems/rubygems/vendor/resolv/lib/resolv.rbnu�[���# frozen_string_literal: true

require 'socket'
require_relative '../../timeout/lib/timeout'
require 'io/wait'
require_relative '../../../vendored_securerandom'

# Gem::Resolv is a thread-aware DNS resolver library written in Ruby.  Gem::Resolv can
# handle multiple DNS requests concurrently without blocking the entire Ruby
# interpreter.
#
# See also resolv-replace.rb to replace the libc resolver with Gem::Resolv.
#
# Gem::Resolv can look up various DNS resources using the DNS module directly.
#
# Examples:
#
#   p Gem::Resolv.getaddress "www.ruby-lang.org"
#   p Gem::Resolv.getname "210.251.121.214"
#
#   Gem::Resolv::DNS.open do |dns|
#     ress = dns.getresources "www.ruby-lang.org", Gem::Resolv::DNS::Resource::IN::A
#     p ress.map(&:address)
#     ress = dns.getresources "ruby-lang.org", Gem::Resolv::DNS::Resource::IN::MX
#     p ress.map { |r| [r.exchange.to_s, r.preference] }
#   end
#
#
# == Bugs
#
# * NIS is not supported.
# * /etc/nsswitch.conf is not supported.

class Gem::Resolv

  VERSION = "0.6.0"

  ##
  # Looks up the first IP address for +name+.

  def self.getaddress(name)
    DefaultResolver.getaddress(name)
  end

  ##
  # Looks up all IP address for +name+.

  def self.getaddresses(name)
    DefaultResolver.getaddresses(name)
  end

  ##
  # Iterates over all IP addresses for +name+.

  def self.each_address(name, &block)
    DefaultResolver.each_address(name, &block)
  end

  ##
  # Looks up the hostname of +address+.

  def self.getname(address)
    DefaultResolver.getname(address)
  end

  ##
  # Looks up all hostnames for +address+.

  def self.getnames(address)
    DefaultResolver.getnames(address)
  end

  ##
  # Iterates over all hostnames for +address+.

  def self.each_name(address, &proc)
    DefaultResolver.each_name(address, &proc)
  end

  ##
  # Creates a new Gem::Resolv using +resolvers+.
  #
  # If +resolvers+ is not given, a hash, or +nil+, uses a Hosts resolver and
  # and a DNS resolver.  If +resolvers+ is a hash, uses the hash as
  # configuration for the DNS resolver.

  def initialize(resolvers=(arg_not_set = true; nil), use_ipv6: (keyword_not_set = true; nil))
    if !keyword_not_set && !arg_not_set
      warn "Support for separate use_ipv6 keyword is deprecated, as it is ignored if an argument is provided. Do not provide a positional argument if using the use_ipv6 keyword argument.", uplevel: 1
    end

    @resolvers = case resolvers
    when Hash, nil
      [Hosts.new, DNS.new(DNS::Config.default_config_hash.merge(resolvers || {}))]
    else
      resolvers
    end
  end

  ##
  # Looks up the first IP address for +name+.

  def getaddress(name)
    each_address(name) {|address| return address}
    raise ResolvError.new("no address for #{name}")
  end

  ##
  # Looks up all IP address for +name+.

  def getaddresses(name)
    ret = []
    each_address(name) {|address| ret << address}
    return ret
  end

  ##
  # Iterates over all IP addresses for +name+.

  def each_address(name)
    if AddressRegex =~ name
      yield name
      return
    end
    yielded = false
    @resolvers.each {|r|
      r.each_address(name) {|address|
        yield address.to_s
        yielded = true
      }
      return if yielded
    }
  end

  ##
  # Looks up the hostname of +address+.

  def getname(address)
    each_name(address) {|name| return name}
    raise ResolvError.new("no name for #{address}")
  end

  ##
  # Looks up all hostnames for +address+.

  def getnames(address)
    ret = []
    each_name(address) {|name| ret << name}
    return ret
  end

  ##
  # Iterates over all hostnames for +address+.

  def each_name(address)
    yielded = false
    @resolvers.each {|r|
      r.each_name(address) {|name|
        yield name.to_s
        yielded = true
      }
      return if yielded
    }
  end

  ##
  # Indicates a failure to resolve a name or address.

  class ResolvError < StandardError; end

  ##
  # Indicates a timeout resolving a name or address.

  class ResolvTimeout < Gem::Timeout::Error; end

  ##
  # Gem::Resolv::Hosts is a hostname resolver that uses the system hosts file.

  class Hosts
    if /mswin|mingw|cygwin/ =~ RUBY_PLATFORM and
      begin
        require 'win32/resolv'
        DefaultFileName = Win32::Resolv.get_hosts_path || IO::NULL
      rescue LoadError
      end
    end
    DefaultFileName ||= '/etc/hosts'

    ##
    # Creates a new Gem::Resolv::Hosts, using +filename+ for its data source.

    def initialize(filename = DefaultFileName)
      @filename = filename
      @mutex = Thread::Mutex.new
      @initialized = nil
    end

    def lazy_initialize # :nodoc:
      @mutex.synchronize {
        unless @initialized
          @name2addr = {}
          @addr2name = {}
          File.open(@filename, 'rb') {|f|
            f.each {|line|
              line.sub!(/#.*/, '')
              addr, *hostnames = line.split(/\s+/)
              next unless addr
              (@addr2name[addr] ||= []).concat(hostnames)
              hostnames.each {|hostname| (@name2addr[hostname] ||= []) << addr}
            }
          }
          @name2addr.each {|name, arr| arr.reverse!}
          @initialized = true
        end
      }
      self
    end

    ##
    # Gets the IP address of +name+ from the hosts file.

    def getaddress(name)
      each_address(name) {|address| return address}
      raise ResolvError.new("#{@filename} has no name: #{name}")
    end

    ##
    # Gets all IP addresses for +name+ from the hosts file.

    def getaddresses(name)
      ret = []
      each_address(name) {|address| ret << address}
      return ret
    end

    ##
    # Iterates over all IP addresses for +name+ retrieved from the hosts file.

    def each_address(name, &proc)
      lazy_initialize
      @name2addr[name]&.each(&proc)
    end

    ##
    # Gets the hostname of +address+ from the hosts file.

    def getname(address)
      each_name(address) {|name| return name}
      raise ResolvError.new("#{@filename} has no address: #{address}")
    end

    ##
    # Gets all hostnames for +address+ from the hosts file.

    def getnames(address)
      ret = []
      each_name(address) {|name| ret << name}
      return ret
    end

    ##
    # Iterates over all hostnames for +address+ retrieved from the hosts file.

    def each_name(address, &proc)
      lazy_initialize
      @addr2name[address]&.each(&proc)
    end
  end

  ##
  # Gem::Resolv::DNS is a DNS stub resolver.
  #
  # Information taken from the following places:
  #
  # * STD0013
  # * RFC 1035
  # * ftp://ftp.isi.edu/in-notes/iana/assignments/dns-parameters
  # * etc.

  class DNS

    ##
    # Default DNS Port

    Port = 53

    ##
    # Default DNS UDP packet size

    UDPSize = 512

    ##
    # Creates a new DNS resolver.  See Gem::Resolv::DNS.new for argument details.
    #
    # Yields the created DNS resolver to the block, if given, otherwise
    # returns it.

    def self.open(*args)
      dns = new(*args)
      return dns unless block_given?
      begin
        yield dns
      ensure
        dns.close
      end
    end

    ##
    # Creates a new DNS resolver.
    #
    # +config_info+ can be:
    #
    # nil:: Uses /etc/resolv.conf.
    # String:: Path to a file using /etc/resolv.conf's format.
    # Hash:: Must contain :nameserver, :search and :ndots keys.
    # :nameserver_port can be used to specify port number of nameserver address.
    # :raise_timeout_errors can be used to raise timeout errors
    # as exceptions instead of treating the same as an NXDOMAIN response.
    #
    # The value of :nameserver should be an address string or
    # an array of address strings.
    # - :nameserver => '8.8.8.8'
    # - :nameserver => ['8.8.8.8', '8.8.4.4']
    #
    # The value of :nameserver_port should be an array of
    # pair of nameserver address and port number.
    # - :nameserver_port => [['8.8.8.8', 53], ['8.8.4.4', 53]]
    #
    # Example:
    #
    #   Gem::Resolv::DNS.new(:nameserver => ['210.251.121.21'],
    #                   :search => ['ruby-lang.org'],
    #                   :ndots => 1)

    def initialize(config_info=nil)
      @mutex = Thread::Mutex.new
      @config = Config.new(config_info)
      @initialized = nil
    end

    # Sets the resolver timeouts.  This may be a single positive number
    # or an array of positive numbers representing timeouts in seconds.
    # If an array is specified, a DNS request will retry and wait for
    # each successive interval in the array until a successful response
    # is received.  Specifying +nil+ reverts to the default timeouts:
    # [ 5, second = 5 * 2 / nameserver_count, 2 * second, 4 * second ]
    #
    # Example:
    #
    #   dns.timeouts = 3
    #
    def timeouts=(values)
      @config.timeouts = values
    end

    def lazy_initialize # :nodoc:
      @mutex.synchronize {
        unless @initialized
          @config.lazy_initialize
          @initialized = true
        end
      }
      self
    end

    ##
    # Closes the DNS resolver.

    def close
      @mutex.synchronize {
        if @initialized
          @initialized = false
        end
      }
    end

    ##
    # Gets the IP address of +name+ from the DNS resolver.
    #
    # +name+ can be a Gem::Resolv::DNS::Name or a String.  Retrieved address will
    # be a Gem::Resolv::IPv4 or Gem::Resolv::IPv6

    def getaddress(name)
      each_address(name) {|address| return address}
      raise ResolvError.new("DNS result has no information for #{name}")
    end

    ##
    # Gets all IP addresses for +name+ from the DNS resolver.
    #
    # +name+ can be a Gem::Resolv::DNS::Name or a String.  Retrieved addresses will
    # be a Gem::Resolv::IPv4 or Gem::Resolv::IPv6

    def getaddresses(name)
      ret = []
      each_address(name) {|address| ret << address}
      return ret
    end

    ##
    # Iterates over all IP addresses for +name+ retrieved from the DNS
    # resolver.
    #
    # +name+ can be a Gem::Resolv::DNS::Name or a String.  Retrieved addresses will
    # be a Gem::Resolv::IPv4 or Gem::Resolv::IPv6

    def each_address(name)
      if use_ipv6?
        each_resource(name, Resource::IN::AAAA) {|resource| yield resource.address}
      end
      each_resource(name, Resource::IN::A) {|resource| yield resource.address}
    end

    def use_ipv6? # :nodoc:
      @config.lazy_initialize unless @config.instance_variable_get(:@initialized)

      use_ipv6 = @config.use_ipv6?
      unless use_ipv6.nil?
        return use_ipv6
      end

      begin
        list = Socket.ip_address_list
      rescue NotImplementedError
        return true
      end
      list.any? {|a| a.ipv6? && !a.ipv6_loopback? && !a.ipv6_linklocal? }
    end
    private :use_ipv6?

    ##
    # Gets the hostname for +address+ from the DNS resolver.
    #
    # +address+ must be a Gem::Resolv::IPv4, Gem::Resolv::IPv6 or a String.  Retrieved
    # name will be a Gem::Resolv::DNS::Name.

    def getname(address)
      each_name(address) {|name| return name}
      raise ResolvError.new("DNS result has no information for #{address}")
    end

    ##
    # Gets all hostnames for +address+ from the DNS resolver.
    #
    # +address+ must be a Gem::Resolv::IPv4, Gem::Resolv::IPv6 or a String.  Retrieved
    # names will be Gem::Resolv::DNS::Name instances.

    def getnames(address)
      ret = []
      each_name(address) {|name| ret << name}
      return ret
    end

    ##
    # Iterates over all hostnames for +address+ retrieved from the DNS
    # resolver.
    #
    # +address+ must be a Gem::Resolv::IPv4, Gem::Resolv::IPv6 or a String.  Retrieved
    # names will be Gem::Resolv::DNS::Name instances.

    def each_name(address)
      case address
      when Name
        ptr = address
      when IPv4, IPv6
        ptr = address.to_name
      when IPv4::Regex
        ptr = IPv4.create(address).to_name
      when IPv6::Regex
        ptr = IPv6.create(address).to_name
      else
        raise ResolvError.new("cannot interpret as address: #{address}")
      end
      each_resource(ptr, Resource::IN::PTR) {|resource| yield resource.name}
    end

    ##
    # Look up the +typeclass+ DNS resource of +name+.
    #
    # +name+ must be a Gem::Resolv::DNS::Name or a String.
    #
    # +typeclass+ should be one of the following:
    #
    # * Gem::Resolv::DNS::Resource::IN::A
    # * Gem::Resolv::DNS::Resource::IN::AAAA
    # * Gem::Resolv::DNS::Resource::IN::ANY
    # * Gem::Resolv::DNS::Resource::IN::CNAME
    # * Gem::Resolv::DNS::Resource::IN::HINFO
    # * Gem::Resolv::DNS::Resource::IN::MINFO
    # * Gem::Resolv::DNS::Resource::IN::MX
    # * Gem::Resolv::DNS::Resource::IN::NS
    # * Gem::Resolv::DNS::Resource::IN::PTR
    # * Gem::Resolv::DNS::Resource::IN::SOA
    # * Gem::Resolv::DNS::Resource::IN::TXT
    # * Gem::Resolv::DNS::Resource::IN::WKS
    #
    # Returned resource is represented as a Gem::Resolv::DNS::Resource instance,
    # i.e. Gem::Resolv::DNS::Resource::IN::A.

    def getresource(name, typeclass)
      each_resource(name, typeclass) {|resource| return resource}
      raise ResolvError.new("DNS result has no information for #{name}")
    end

    ##
    # Looks up all +typeclass+ DNS resources for +name+.  See #getresource for
    # argument details.

    def getresources(name, typeclass)
      ret = []
      each_resource(name, typeclass) {|resource| ret << resource}
      return ret
    end

    ##
    # Iterates over all +typeclass+ DNS resources for +name+.  See
    # #getresource for argument details.

    def each_resource(name, typeclass, &proc)
      fetch_resource(name, typeclass) {|reply, reply_name|
        extract_resources(reply, reply_name, typeclass, &proc)
      }
    end

    def fetch_resource(name, typeclass)
      lazy_initialize
      truncated = {}
      requesters = {}
      udp_requester = begin
        make_udp_requester
      rescue Errno::EACCES
        # fall back to TCP
      end
      senders = {}

      begin
        @config.resolv(name) do |candidate, tout, nameserver, port|
          msg = Message.new
          msg.rd = 1
          msg.add_question(candidate, typeclass)

          requester = requesters.fetch([nameserver, port]) do
            if !truncated[candidate] && udp_requester
              udp_requester
            else
              requesters[[nameserver, port]] = make_tcp_requester(nameserver, port)
            end
          end

          unless sender = senders[[candidate, requester, nameserver, port]]
            sender = requester.sender(msg, candidate, nameserver, port)
            next if !sender
            senders[[candidate, requester, nameserver, port]] = sender
          end
          reply, reply_name = requester.request(sender, tout)
          case reply.rcode
          when RCode::NoError
            if reply.tc == 1 and not Requester::TCP === requester
              # Retry via TCP:
              truncated[candidate] = true
              redo
            else
              yield(reply, reply_name)
            end
            return
          when RCode::NXDomain
            raise Config::NXDomain.new(reply_name.to_s)
          else
            raise Config::OtherResolvError.new(reply_name.to_s)
          end
        end
      ensure
        udp_requester&.close
        requesters.each_value { |requester| requester&.close }
      end
    end

    def make_udp_requester # :nodoc:
      nameserver_port = @config.nameserver_port
      if nameserver_port.length == 1
        Requester::ConnectedUDP.new(*nameserver_port[0])
      else
        Requester::UnconnectedUDP.new(*nameserver_port)
      end
    end

    def make_tcp_requester(host, port) # :nodoc:
      return Requester::TCP.new(host, port)
    rescue Errno::ECONNREFUSED
      # Treat a refused TCP connection attempt to a nameserver like a timeout,
      # as Gem::Resolv::DNS::Config#resolv considers ResolvTimeout exceptions as a
      # hint to try the next nameserver:
      raise ResolvTimeout
    end

    def extract_resources(msg, name, typeclass) # :nodoc:
      if typeclass < Resource::ANY
        n0 = Name.create(name)
        msg.each_resource {|n, ttl, data|
          yield data if n0 == n
        }
      end
      yielded = false
      n0 = Name.create(name)
      msg.each_resource {|n, ttl, data|
        if n0 == n
          case data
          when typeclass
            yield data
            yielded = true
          when Resource::CNAME
            n0 = data.name
          end
        end
      }
      return if yielded
      msg.each_resource {|n, ttl, data|
        if n0 == n
          case data
          when typeclass
            yield data
          end
        end
      }
    end

    def self.random(arg) # :nodoc:
      begin
        Gem::SecureRandom.random_number(arg)
      rescue NotImplementedError
        rand(arg)
      end
    end

    RequestID = {} # :nodoc:
    RequestIDMutex = Thread::Mutex.new # :nodoc:

    def self.allocate_request_id(host, port) # :nodoc:
      id = nil
      RequestIDMutex.synchronize {
        h = (RequestID[[host, port]] ||= {})
        begin
          id = random(0x0000..0xffff)
        end while h[id]
        h[id] = true
      }
      id
    end

    def self.free_request_id(host, port, id) # :nodoc:
      RequestIDMutex.synchronize {
        key = [host, port]
        if h = RequestID[key]
          h.delete id
          if h.empty?
            RequestID.delete key
          end
        end
      }
    end

    def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
      begin
        port = random(1024..65535)
        udpsock.bind(bind_host, port)
      rescue Errno::EADDRINUSE, # POSIX
             Errno::EACCES, # SunOS: See PRIV_SYS_NFS in privileges(5)
             Errno::EPERM # FreeBSD: security.mac.portacl.port_high is configurable.  See mac_portacl(4).
        retry
      end
    end

    class Requester # :nodoc:
      def initialize
        @senders = {}
        @socks = nil
      end

      def request(sender, tout)
        start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
        timelimit = start + tout
        begin
          sender.send
        rescue Errno::EHOSTUNREACH, # multi-homed IPv6 may generate this
               Errno::ENETUNREACH
          raise ResolvTimeout
        end
        while true
          before_select = Process.clock_gettime(Process::CLOCK_MONOTONIC)
          timeout = timelimit - before_select
          if timeout <= 0
            raise ResolvTimeout
          end
          if @socks.size == 1
            select_result = @socks[0].wait_readable(timeout) ? [ @socks ] : nil
          else
            select_result = IO.select(@socks, nil, nil, timeout)
          end
          if !select_result
            after_select = Process.clock_gettime(Process::CLOCK_MONOTONIC)
            next if after_select < timelimit
            raise ResolvTimeout
          end
          begin
            reply, from = recv_reply(select_result[0])
          rescue Errno::ECONNREFUSED, # GNU/Linux, FreeBSD
                 Errno::ECONNRESET # Windows
            # No name server running on the server?
            # Don't wait anymore.
            raise ResolvTimeout
          end
          begin
            msg = Message.decode(reply)
          rescue DecodeError
            next # broken DNS message ignored
          end
          if sender == sender_for(from, msg)
            break
          else
            # unexpected DNS message ignored
          end
        end
        return msg, sender.data
      end

      def sender_for(addr, msg)
        @senders[[addr,msg.id]]
      end

      def close
        socks = @socks
        @socks = nil
        socks&.each(&:close)
      end

      class Sender # :nodoc:
        def initialize(msg, data, sock)
          @msg = msg
          @data = data
          @sock = sock
        end
      end

      class UnconnectedUDP < Requester # :nodoc:
        def initialize(*nameserver_port)
          super()
          @nameserver_port = nameserver_port
          @initialized = false
          @mutex = Thread::Mutex.new
        end

        def lazy_initialize
          @mutex.synchronize {
            next if @initialized
            @initialized = true
            @socks_hash = {}
            @socks = []
            @nameserver_port.each {|host, port|
              if host.index(':')
                bind_host = "::"
                af = Socket::AF_INET6
              else
                bind_host = "0.0.0.0"
                af = Socket::AF_INET
              end
              next if @socks_hash[bind_host]
              begin
                sock = UDPSocket.new(af)
              rescue Errno::EAFNOSUPPORT, Errno::EPROTONOSUPPORT
                next # The kernel doesn't support the address family.
              end
              @socks << sock
              @socks_hash[bind_host] = sock
              sock.do_not_reverse_lookup = true
              DNS.bind_random_port(sock, bind_host)
            }
          }
          self
        end

        def recv_reply(readable_socks)
          lazy_initialize
          reply, from = readable_socks[0].recvfrom(UDPSize)
          return reply, [from[3],from[1]]
        end

        def sender(msg, data, host, port=Port)
          host = Addrinfo.ip(host).ip_address
          lazy_initialize
          sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
          return nil if !sock
          service = [host, port]
          id = DNS.allocate_request_id(host, port)
          request = msg.encode
          request[0,2] = [id].pack('n')
          return @senders[[service, id]] =
            Sender.new(request, data, sock, host, port)
        end

        def close
          @mutex.synchronize {
            if @initialized
              super
              @senders.each_key {|service, id|
                DNS.free_request_id(service[0], service[1], id)
              }
              @initialized = false
            end
          }
        end

        class Sender < Requester::Sender # :nodoc:
          def initialize(msg, data, sock, host, port)
            super(msg, data, sock)
            @host = host
            @port = port
          end
          attr_reader :data

          def send
            raise "@sock is nil." if @sock.nil?
            @sock.send(@msg, 0, @host, @port)
          end
        end
      end

      class ConnectedUDP < Requester # :nodoc:
        def initialize(host, port=Port)
          super()
          @host = host
          @port = port
          @mutex = Thread::Mutex.new
          @initialized = false
        end

        def lazy_initialize
          @mutex.synchronize {
            next if @initialized
            @initialized = true
            is_ipv6 = @host.index(':')
            sock = UDPSocket.new(is_ipv6 ? Socket::AF_INET6 : Socket::AF_INET)
            @socks = [sock]
            sock.do_not_reverse_lookup = true
            DNS.bind_random_port(sock, is_ipv6 ? "::" : "0.0.0.0")
            sock.connect(@host, @port)
          }
          self
        end

        def recv_reply(readable_socks)
          lazy_initialize
          reply = readable_socks[0].recv(UDPSize)
          return reply, nil
        end

        def sender(msg, data, host=@host, port=@port)
          lazy_initialize
          unless host == @host && port == @port
            raise RequestError.new("host/port don't match: #{host}:#{port}")
          end
          id = DNS.allocate_request_id(@host, @port)
          request = msg.encode
          request[0,2] = [id].pack('n')
          return @senders[[nil,id]] = Sender.new(request, data, @socks[0])
        end

        def close
          @mutex.synchronize do
            if @initialized
              super
              @senders.each_key {|from, id|
                DNS.free_request_id(@host, @port, id)
              }
              @initialized = false
            end
          end
        end

        class Sender < Requester::Sender # :nodoc:
          def send
            raise "@sock is nil." if @sock.nil?
            @sock.send(@msg, 0)
          end
          attr_reader :data
        end
      end

      class MDNSOneShot < UnconnectedUDP # :nodoc:
        def sender(msg, data, host, port=Port)
          lazy_initialize
          id = DNS.allocate_request_id(host, port)
          request = msg.encode
          request[0,2] = [id].pack('n')
          sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
          return @senders[id] =
            UnconnectedUDP::Sender.new(request, data, sock, host, port)
        end

        def sender_for(addr, msg)
          lazy_initialize
          @senders[msg.id]
        end
      end

      class TCP < Requester # :nodoc:
        def initialize(host, port=Port)
          super()
          @host = host
          @port = port
          sock = TCPSocket.new(@host, @port)
          @socks = [sock]
          @senders = {}
        end

        def recv_reply(readable_socks)
          len = readable_socks[0].read(2).unpack('n')[0]
          reply = @socks[0].read(len)
          return reply, nil
        end

        def sender(msg, data, host=@host, port=@port)
          unless host == @host && port == @port
            raise RequestError.new("host/port don't match: #{host}:#{port}")
          end
          id = DNS.allocate_request_id(@host, @port)
          request = msg.encode
          request[0,2] = [request.length, id].pack('nn')
          return @senders[[nil,id]] = Sender.new(request, data, @socks[0])
        end

        class Sender < Requester::Sender # :nodoc:
          def send
            @sock.print(@msg)
            @sock.flush
          end
          attr_reader :data
        end

        def close
          super
          @senders.each_key {|from,id|
            DNS.free_request_id(@host, @port, id)
          }
        end
      end

      ##
      # Indicates a problem with the DNS request.

      class RequestError < StandardError
      end
    end

    class Config # :nodoc:
      def initialize(config_info=nil)
        @mutex = Thread::Mutex.new
        @config_info = config_info
        @initialized = nil
        @timeouts = nil
      end

      def timeouts=(values)
        if values
          values = Array(values)
          values.each do |t|
            Numeric === t or raise ArgumentError, "#{t.inspect} is not numeric"
            t > 0.0 or raise ArgumentError, "timeout=#{t} must be positive"
          end
          @timeouts = values
        else
          @timeouts = nil
        end
      end

      def Config.parse_resolv_conf(filename)
        nameserver = []
        search = nil
        ndots = 1
        File.open(filename, 'rb') {|f|
          f.each {|line|
            line.sub!(/[#;].*/, '')
            keyword, *args = line.split(/\s+/)
            next unless keyword
            case keyword
            when 'nameserver'
              nameserver.concat(args)
            when 'domain'
              next if args.empty?
              search = [args[0]]
            when 'search'
              next if args.empty?
              search = args
            when 'options'
              args.each {|arg|
                case arg
                when /\Andots:(\d+)\z/
                  ndots = $1.to_i
                end
              }
            end
          }
        }
        return { :nameserver => nameserver, :search => search, :ndots => ndots }
      end

      def Config.default_config_hash(filename="/etc/resolv.conf")
        if File.exist? filename
          config_hash = Config.parse_resolv_conf(filename)
        else
          if /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM
            require 'win32/resolv'
            search, nameserver = Win32::Resolv.get_resolv_info
            config_hash = {}
            config_hash[:nameserver] = nameserver if nameserver
            config_hash[:search] = [search].flatten if search
          end
        end
        config_hash || {}
      end

      def lazy_initialize
        @mutex.synchronize {
          unless @initialized
            @nameserver_port = []
            @use_ipv6 = nil
            @search = nil
            @ndots = 1
            case @config_info
            when nil
              config_hash = Config.default_config_hash
            when String
              config_hash = Config.parse_resolv_conf(@config_info)
            when Hash
              config_hash = @config_info.dup
              if String === config_hash[:nameserver]
                config_hash[:nameserver] = [config_hash[:nameserver]]
              end
              if String === config_hash[:search]
                config_hash[:search] = [config_hash[:search]]
              end
            else
              raise ArgumentError.new("invalid resolv configuration: #{@config_info.inspect}")
            end
            if config_hash.include? :nameserver
              @nameserver_port = config_hash[:nameserver].map {|ns| [ns, Port] }
            end
            if config_hash.include? :nameserver_port
              @nameserver_port = config_hash[:nameserver_port].map {|ns, port| [ns, (port || Port)] }
            end
            if config_hash.include? :use_ipv6
              @use_ipv6 = config_hash[:use_ipv6]
            end
            @search = config_hash[:search] if config_hash.include? :search
            @ndots = config_hash[:ndots] if config_hash.include? :ndots
            @raise_timeout_errors = config_hash[:raise_timeout_errors]

            if @nameserver_port.empty?
              @nameserver_port << ['0.0.0.0', Port]
            end
            if @search
              @search = @search.map {|arg| Label.split(arg) }
            else
              hostname = Socket.gethostname
              if /\./ =~ hostname
                @search = [Label.split($')]
              else
                @search = [[]]
              end
            end

            if !@nameserver_port.kind_of?(Array) ||
               @nameserver_port.any? {|ns_port|
                  !(Array === ns_port) ||
                  ns_port.length != 2
                  !(String === ns_port[0]) ||
                  !(Integer === ns_port[1])
               }
              raise ArgumentError.new("invalid nameserver config: #{@nameserver_port.inspect}")
            end

            if !@search.kind_of?(Array) ||
               !@search.all? {|ls| ls.all? {|l| Label::Str === l } }
              raise ArgumentError.new("invalid search config: #{@search.inspect}")
            end

            if !@ndots.kind_of?(Integer)
              raise ArgumentError.new("invalid ndots config: #{@ndots.inspect}")
            end

            @initialized = true
          end
        }
        self
      end

      def single?
        lazy_initialize
        if @nameserver_port.length == 1
          return @nameserver_port[0]
        else
          return nil
        end
      end

      def nameserver_port
        @nameserver_port
      end

      def use_ipv6?
        @use_ipv6
      end

      def generate_candidates(name)
        candidates = nil
        name = Name.create(name)
        if name.absolute?
          candidates = [name]
        else
          if @ndots <= name.length - 1
            candidates = [Name.new(name.to_a)]
          else
            candidates = []
          end
          candidates.concat(@search.map {|domain| Name.new(name.to_a + domain)})
          fname = Name.create("#{name}.")
          if !candidates.include?(fname)
            candidates << fname
          end
        end
        return candidates
      end

      InitialTimeout = 5

      def generate_timeouts
        ts = [InitialTimeout]
        ts << ts[-1] * 2 / @nameserver_port.length
        ts << ts[-1] * 2
        ts << ts[-1] * 2
        return ts
      end

      def resolv(name)
        candidates = generate_candidates(name)
        timeouts = @timeouts || generate_timeouts
        timeout_error = false
        begin
          candidates.each {|candidate|
            begin
              timeouts.each {|tout|
                @nameserver_port.each {|nameserver, port|
                  begin
                    yield candidate, tout, nameserver, port
                  rescue ResolvTimeout
                  end
                }
              }
              timeout_error = true
              raise ResolvError.new("DNS resolv timeout: #{name}")
            rescue NXDomain
            end
          }
        rescue ResolvError
          raise if @raise_timeout_errors && timeout_error
        end
      end

      ##
      # Indicates no such domain was found.

      class NXDomain < ResolvError
      end

      ##
      # Indicates some other unhandled resolver error was encountered.

      class OtherResolvError < ResolvError
      end
    end

    module OpCode # :nodoc:
      Query = 0
      IQuery = 1
      Status = 2
      Notify = 4
      Update = 5
    end

    module RCode # :nodoc:
      NoError = 0
      FormErr = 1
      ServFail = 2
      NXDomain = 3
      NotImp = 4
      Refused = 5
      YXDomain = 6
      YXRRSet = 7
      NXRRSet = 8
      NotAuth = 9
      NotZone = 10
      BADVERS = 16
      BADSIG = 16
      BADKEY = 17
      BADTIME = 18
      BADMODE = 19
      BADNAME = 20
      BADALG = 21
    end

    ##
    # Indicates that the DNS response was unable to be decoded.

    class DecodeError < StandardError
    end

    ##
    # Indicates that the DNS request was unable to be encoded.

    class EncodeError < StandardError
    end

    module Label # :nodoc:
      def self.split(arg)
        labels = []
        arg.scan(/[^\.]+/) {labels << Str.new($&)}
        return labels
      end

      class Str # :nodoc:
        def initialize(string)
          @string = string
          # case insensivity of DNS labels doesn't apply non-ASCII characters. [RFC 4343]
          # This assumes @string is given in ASCII compatible encoding.
          @downcase = string.b.downcase
        end
        attr_reader :string, :downcase

        def to_s
          return @string
        end

        def inspect
          return "#<#{self.class} #{self}>"
        end

        def ==(other)
          return self.class == other.class && @downcase == other.downcase
        end

        def eql?(other)
          return self == other
        end

        def hash
          return @downcase.hash
        end
      end
    end

    ##
    # A representation of a DNS name.

    class Name

      ##
      # Creates a new DNS name from +arg+.  +arg+ can be:
      #
      # Name:: returns +arg+.
      # String:: Creates a new Name.

      def self.create(arg)
        case arg
        when Name
          return arg
        when String
          return Name.new(Label.split(arg), /\.\z/ =~ arg ? true : false)
        else
          raise ArgumentError.new("cannot interpret as DNS name: #{arg.inspect}")
        end
      end

      def initialize(labels, absolute=true) # :nodoc:
        labels = labels.map {|label|
          case label
          when String then Label::Str.new(label)
          when Label::Str then label
          else
            raise ArgumentError, "unexpected label: #{label.inspect}"
          end
        }
        @labels = labels
        @absolute = absolute
      end

      def inspect # :nodoc:
        "#<#{self.class}: #{self}#{@absolute ? '.' : ''}>"
      end

      ##
      # True if this name is absolute.

      def absolute?
        return @absolute
      end

      def ==(other) # :nodoc:
        return false unless Name === other
        return false unless @absolute == other.absolute?
        return @labels == other.to_a
      end

      alias eql? == # :nodoc:

      ##
      # Returns true if +other+ is a subdomain.
      #
      # Example:
      #
      #   domain = Gem::Resolv::DNS::Name.create("y.z")
      #   p Gem::Resolv::DNS::Name.create("w.x.y.z").subdomain_of?(domain) #=> true
      #   p Gem::Resolv::DNS::Name.create("x.y.z").subdomain_of?(domain) #=> true
      #   p Gem::Resolv::DNS::Name.create("y.z").subdomain_of?(domain) #=> false
      #   p Gem::Resolv::DNS::Name.create("z").subdomain_of?(domain) #=> false
      #   p Gem::Resolv::DNS::Name.create("x.y.z.").subdomain_of?(domain) #=> false
      #   p Gem::Resolv::DNS::Name.create("w.z").subdomain_of?(domain) #=> false
      #

      def subdomain_of?(other)
        raise ArgumentError, "not a domain name: #{other.inspect}" unless Name === other
        return false if @absolute != other.absolute?
        other_len = other.length
        return false if @labels.length <= other_len
        return @labels[-other_len, other_len] == other.to_a
      end

      def hash # :nodoc:
        return @labels.hash ^ @absolute.hash
      end

      def to_a # :nodoc:
        return @labels
      end

      def length # :nodoc:
        return @labels.length
      end

      def [](i) # :nodoc:
        return @labels[i]
      end

      ##
      # returns the domain name as a string.
      #
      # The domain name doesn't have a trailing dot even if the name object is
      # absolute.
      #
      # Example:
      #
      #   p Gem::Resolv::DNS::Name.create("x.y.z.").to_s #=> "x.y.z"
      #   p Gem::Resolv::DNS::Name.create("x.y.z").to_s #=> "x.y.z"

      def to_s
        return @labels.join('.')
      end
    end

    class Message # :nodoc:
      @@identifier = -1

      def initialize(id = (@@identifier += 1) & 0xffff)
        @id = id
        @qr = 0
        @opcode = 0
        @aa = 0
        @tc = 0
        @rd = 0 # recursion desired
        @ra = 0 # recursion available
        @rcode = 0
        @question = []
        @answer = []
        @authority = []
        @additional = []
      end

      attr_accessor :id, :qr, :opcode, :aa, :tc, :rd, :ra, :rcode
      attr_reader :question, :answer, :authority, :additional

      def ==(other)
        return @id == other.id &&
               @qr == other.qr &&
               @opcode == other.opcode &&
               @aa == other.aa &&
               @tc == other.tc &&
               @rd == other.rd &&
               @ra == other.ra &&
               @rcode == other.rcode &&
               @question == other.question &&
               @answer == other.answer &&
               @authority == other.authority &&
               @additional == other.additional
      end

      def add_question(name, typeclass)
        @question << [Name.create(name), typeclass]
      end

      def each_question
        @question.each {|name, typeclass|
          yield name, typeclass
        }
      end

      def add_answer(name, ttl, data)
        @answer << [Name.create(name), ttl, data]
      end

      def each_answer
        @answer.each {|name, ttl, data|
          yield name, ttl, data
        }
      end

      def add_authority(name, ttl, data)
        @authority << [Name.create(name), ttl, data]
      end

      def each_authority
        @authority.each {|name, ttl, data|
          yield name, ttl, data
        }
      end

      def add_additional(name, ttl, data)
        @additional << [Name.create(name), ttl, data]
      end

      def each_additional
        @additional.each {|name, ttl, data|
          yield name, ttl, data
        }
      end

      def each_resource
        each_answer {|name, ttl, data| yield name, ttl, data}
        each_authority {|name, ttl, data| yield name, ttl, data}
        each_additional {|name, ttl, data| yield name, ttl, data}
      end

      def encode
        return MessageEncoder.new {|msg|
          msg.put_pack('nnnnnn',
            @id,
            (@qr & 1) << 15 |
            (@opcode & 15) << 11 |
            (@aa & 1) << 10 |
            (@tc & 1) << 9 |
            (@rd & 1) << 8 |
            (@ra & 1) << 7 |
            (@rcode & 15),
            @question.length,
            @answer.length,
            @authority.length,
            @additional.length)
          @question.each {|q|
            name, typeclass = q
            msg.put_name(name)
            msg.put_pack('nn', typeclass::TypeValue, typeclass::ClassValue)
          }
          [@answer, @authority, @additional].each {|rr|
            rr.each {|r|
              name, ttl, data = r
              msg.put_name(name)
              msg.put_pack('nnN', data.class::TypeValue, data.class::ClassValue, ttl)
              msg.put_length16 {data.encode_rdata(msg)}
            }
          }
        }.to_s
      end

      class MessageEncoder # :nodoc:
        def initialize
          @data = ''.dup
          @names = {}
          yield self
        end

        def to_s
          return @data
        end

        def put_bytes(d)
          @data << d
        end

        def put_pack(template, *d)
          @data << d.pack(template)
        end

        def put_length16
          length_index = @data.length
          @data << "\0\0"
          data_start = @data.length
          yield
          data_end = @data.length
          @data[length_index, 2] = [data_end - data_start].pack("n")
        end

        def put_string(d)
          self.put_pack("C", d.length)
          @data << d
        end

        def put_string_list(ds)
          ds.each {|d|
            self.put_string(d)
          }
        end

        def put_name(d, compress: true)
          put_labels(d.to_a, compress: compress)
        end

        def put_labels(d, compress: true)
          d.each_index {|i|
            domain = d[i..-1]
            if compress && idx = @names[domain]
              self.put_pack("n", 0xc000 | idx)
              return
            else
              if @data.length < 0x4000
                @names[domain] = @data.length
              end
              self.put_label(d[i])
            end
          }
          @data << "\0"
        end

        def put_label(d)
          self.put_string(d.to_s)
        end
      end

      def Message.decode(m)
        o = Message.new(0)
        MessageDecoder.new(m) {|msg|
          id, flag, qdcount, ancount, nscount, arcount =
            msg.get_unpack('nnnnnn')
          o.id = id
          o.tc = (flag >> 9) & 1
          o.rcode = flag & 15
          return o unless o.tc.zero?

          o.qr = (flag >> 15) & 1
          o.opcode = (flag >> 11) & 15
          o.aa = (flag >> 10) & 1
          o.rd = (flag >> 8) & 1
          o.ra = (flag >> 7) & 1
          (1..qdcount).each {
            name, typeclass = msg.get_question
            o.add_question(name, typeclass)
          }
          (1..ancount).each {
            name, ttl, data = msg.get_rr
            o.add_answer(name, ttl, data)
          }
          (1..nscount).each {
            name, ttl, data = msg.get_rr
            o.add_authority(name, ttl, data)
          }
          (1..arcount).each {
            name, ttl, data = msg.get_rr
            o.add_additional(name, ttl, data)
          }
        }
        return o
      end

      class MessageDecoder # :nodoc:
        def initialize(data)
          @data = data
          @index = 0
          @limit = data.bytesize
          yield self
        end

        def inspect
          "\#<#{self.class}: #{@data.byteslice(0, @index).inspect} #{@data.byteslice(@index..-1).inspect}>"
        end

        def get_length16
          len, = self.get_unpack('n')
          save_limit = @limit
          @limit = @index + len
          d = yield(len)
          if @index < @limit
            raise DecodeError.new("junk exists")
          elsif @limit < @index
            raise DecodeError.new("limit exceeded")
          end
          @limit = save_limit
          return d
        end

        def get_bytes(len = @limit - @index)
          raise DecodeError.new("limit exceeded") if @limit < @index + len
          d = @data.byteslice(@index, len)
          @index += len
          return d
        end

        def get_unpack(template)
          len = 0
          template.each_byte {|byte|
            byte = "%c" % byte
            case byte
            when ?c, ?C
              len += 1
            when ?n
              len += 2
            when ?N
              len += 4
            else
              raise StandardError.new("unsupported template: '#{byte.chr}' in '#{template}'")
            end
          }
          raise DecodeError.new("limit exceeded") if @limit < @index + len
          arr = @data.unpack("@#{@index}#{template}")
          @index += len
          return arr
        end

        def get_string
          raise DecodeError.new("limit exceeded") if @limit <= @index
          len = @data.getbyte(@index)
          raise DecodeError.new("limit exceeded") if @limit < @index + 1 + len
          d = @data.byteslice(@index + 1, len)
          @index += 1 + len
          return d
        end

        def get_string_list
          strings = []
          while @index < @limit
            strings << self.get_string
          end
          strings
        end

        def get_list
          [].tap do |values|
            while @index < @limit
              values << yield
            end
          end
        end

        def get_name
          return Name.new(self.get_labels)
        end

        def get_labels
          prev_index = @index
          save_index = nil
          d = []
          while true
            raise DecodeError.new("limit exceeded") if @limit <= @index
            case @data.getbyte(@index)
            when 0
              @index += 1
              if save_index
                @index = save_index
              end
              return d
            when 192..255
              idx = self.get_unpack('n')[0] & 0x3fff
              if prev_index <= idx
                raise DecodeError.new("non-backward name pointer")
              end
              prev_index = idx
              if !save_index
                save_index = @index
              end
              @index = idx
            else
              d << self.get_label
            end
          end
        end

        def get_label
          return Label::Str.new(self.get_string)
        end

        def get_question
          name = self.get_name
          type, klass = self.get_unpack("nn")
          return name, Resource.get_class(type, klass)
        end

        def get_rr
          name = self.get_name
          type, klass, ttl = self.get_unpack('nnN')
          typeclass = Resource.get_class(type, klass)
          res = self.get_length16 do
            begin
              typeclass.decode_rdata self
            rescue => e
              raise DecodeError, e.message, e.backtrace
            end
          end
          res.instance_variable_set :@ttl, ttl
          return name, ttl, res
        end
      end
    end

    ##
    # SvcParams for service binding RRs. [RFC9460]

    class SvcParams
      include Enumerable

      ##
      # Create a list of SvcParams with the given initial content.
      #
      # +params+ has to be an enumerable of +SvcParam+s.
      # If its content has +SvcParam+s with the duplicate key,
      # the one appears last takes precedence.

      def initialize(params = [])
        @params = {}

        params.each do |param|
          add param
        end
      end

      ##
      # Get SvcParam for the given +key+ in this list.

      def [](key)
        @params[canonical_key(key)]
      end

      ##
      # Get the number of SvcParams in this list.

      def count
        @params.count
      end

      ##
      # Get whether this list is empty.

      def empty?
        @params.empty?
      end

      ##
      # Add the SvcParam +param+ to this list, overwriting the existing one with the same key.

      def add(param)
        @params[param.class.key_number] = param
      end

      ##
      # Remove the +SvcParam+ with the given +key+ and return it.

      def delete(key)
        @params.delete(canonical_key(key))
      end

      ##
      # Enumerate the +SvcParam+s in this list.

      def each(&block)
        return enum_for(:each) unless block
        @params.each_value(&block)
      end

      def encode(msg) # :nodoc:
        @params.keys.sort.each do |key|
          msg.put_pack('n', key)
          msg.put_length16 do
            @params.fetch(key).encode(msg)
          end
        end
      end

      def self.decode(msg) # :nodoc:
        params = msg.get_list do
          key, = msg.get_unpack('n')
          msg.get_length16 do
            SvcParam::ClassHash[key].decode(msg)
          end
        end

        return self.new(params)
      end

      private

      def canonical_key(key) # :nodoc:
        case key
        when Integer
          key
        when /\Akey(\d+)\z/
          Integer($1)
        when Symbol
          SvcParam::ClassHash[key].key_number
        else
          raise TypeError, 'key must be either String or Symbol'
        end
      end
    end

    ##
    # Base class for SvcParam. [RFC9460]

    class SvcParam

      ##
      # Get the presentation name of the SvcParamKey.

      def self.key_name
        const_get(:KeyName)
      end

      ##
      # Get the registered number of the SvcParamKey.

      def self.key_number
        const_get(:KeyNumber)
      end

      ClassHash = Hash.new do |h, key| # :nodoc:
        case key
        when Integer
          Generic.create(key)
        when /\Akey(?<key>\d+)\z/
          Generic.create(key.to_int)
        when Symbol
          raise KeyError, "unknown key #{key}"
        else
          raise TypeError, 'key must be either String or Symbol'
        end
      end

      ##
      # Generic SvcParam abstract class.

      class Generic < SvcParam

        ##
        # SvcParamValue in wire-format byte string.

        attr_reader :value

        ##
        # Create generic SvcParam

        def initialize(value)
          @value = value
        end

        def encode(msg) # :nodoc:
          msg.put_bytes(@value)
        end

        def self.decode(msg) # :nodoc:
          return self.new(msg.get_bytes)
        end

        def self.create(key_number)
          c = Class.new(Generic)
          key_name = :"key#{key_number}"
          c.const_set(:KeyName, key_name)
          c.const_set(:KeyNumber, key_number)
          self.const_set(:"Key#{key_number}", c)
          ClassHash[key_name] = ClassHash[key_number] = c
          return c
        end
      end

      ##
      # "mandatory" SvcParam -- Mandatory keys in service binding RR

      class Mandatory < SvcParam
        KeyName = :mandatory
        KeyNumber = 0
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Mandatory keys.

        attr_reader :keys

        ##
        # Initialize "mandatory" ScvParam.

        def initialize(keys)
          @keys = keys.map(&:to_int)
        end

        def encode(msg) # :nodoc:
          @keys.sort.each do |key|
            msg.put_pack('n', key)
          end
        end

        def self.decode(msg) # :nodoc:
          keys = msg.get_list { msg.get_unpack('n')[0] }
          return self.new(keys)
        end
      end

      ##
      # "alpn" SvcParam -- Additional supported protocols

      class ALPN < SvcParam
        KeyName = :alpn
        KeyNumber = 1
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Supported protocol IDs.

        attr_reader :protocol_ids

        ##
        # Initialize "alpn" ScvParam.

        def initialize(protocol_ids)
          @protocol_ids = protocol_ids.map(&:to_str)
        end

        def encode(msg) # :nodoc:
          msg.put_string_list(@protocol_ids)
        end

        def self.decode(msg) # :nodoc:
          return self.new(msg.get_string_list)
        end
      end

      ##
      # "no-default-alpn" SvcParam -- No support for default protocol

      class NoDefaultALPN < SvcParam
        KeyName = :'no-default-alpn'
        KeyNumber = 2
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        def encode(msg) # :nodoc:
          # no payload
        end

        def self.decode(msg) # :nodoc:
          return self.new
        end
      end

      ##
      # "port" SvcParam -- Port for alternative endpoint

      class Port < SvcParam
        KeyName = :port
        KeyNumber = 3
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Port number.

        attr_reader :port

        ##
        # Initialize "port" ScvParam.

        def initialize(port)
          @port = port.to_int
        end

        def encode(msg) # :nodoc:
          msg.put_pack('n', @port)
        end

        def self.decode(msg) # :nodoc:
          port, = msg.get_unpack('n')
          return self.new(port)
        end
      end

      ##
      # "ipv4hint" SvcParam -- IPv4 address hints

      class IPv4Hint < SvcParam
        KeyName = :ipv4hint
        KeyNumber = 4
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Set of IPv4 addresses.

        attr_reader :addresses

        ##
        # Initialize "ipv4hint" ScvParam.

        def initialize(addresses)
          @addresses = addresses.map {|address| IPv4.create(address) }
        end

        def encode(msg) # :nodoc:
          @addresses.each do |address|
            msg.put_bytes(address.address)
          end
        end

        def self.decode(msg) # :nodoc:
          addresses = msg.get_list { IPv4.new(msg.get_bytes(4)) }
          return self.new(addresses)
        end
      end

      ##
      # "ipv6hint" SvcParam -- IPv6 address hints

      class IPv6Hint < SvcParam
        KeyName = :ipv6hint
        KeyNumber = 6
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Set of IPv6 addresses.

        attr_reader :addresses

        ##
        # Initialize "ipv6hint" ScvParam.

        def initialize(addresses)
          @addresses = addresses.map {|address| IPv6.create(address) }
        end

        def encode(msg) # :nodoc:
          @addresses.each do |address|
            msg.put_bytes(address.address)
          end
        end

        def self.decode(msg) # :nodoc:
          addresses = msg.get_list { IPv6.new(msg.get_bytes(16)) }
          return self.new(addresses)
        end
      end

      ##
      # "dohpath" SvcParam -- DNS over HTTPS path template [RFC9461]

      class DoHPath < SvcParam
        KeyName = :dohpath
        KeyNumber = 7
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # URI template for DoH queries.

        attr_reader :template

        ##
        # Initialize "dohpath" ScvParam.

        def initialize(template)
          @template = template.encode('utf-8')
        end

        def encode(msg) # :nodoc:
          msg.put_bytes(@template)
        end

        def self.decode(msg) # :nodoc:
          template = msg.get_bytes.force_encoding('utf-8')
          return self.new(template)
        end
      end
    end

    ##
    # A DNS query abstract class.

    class Query
      def encode_rdata(msg) # :nodoc:
        raise EncodeError.new("#{self.class} is query.")
      end

      def self.decode_rdata(msg) # :nodoc:
        raise DecodeError.new("#{self.class} is query.")
      end
    end

    ##
    # A DNS resource abstract class.

    class Resource < Query

      ##
      # Remaining Time To Live for this Resource.

      attr_reader :ttl

      ClassHash = {} # :nodoc:

      def encode_rdata(msg) # :nodoc:
        raise NotImplementedError.new
      end

      def self.decode_rdata(msg) # :nodoc:
        raise NotImplementedError.new
      end

      def ==(other) # :nodoc:
        return false unless self.class == other.class
        s_ivars = self.instance_variables
        s_ivars.sort!
        s_ivars.delete :@ttl
        o_ivars = other.instance_variables
        o_ivars.sort!
        o_ivars.delete :@ttl
        return s_ivars == o_ivars &&
          s_ivars.collect {|name| self.instance_variable_get name} ==
            o_ivars.collect {|name| other.instance_variable_get name}
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        h = 0
        vars = self.instance_variables
        vars.delete :@ttl
        vars.each {|name|
          h ^= self.instance_variable_get(name).hash
        }
        return h
      end

      def self.get_class(type_value, class_value) # :nodoc:
        return ClassHash[[type_value, class_value]] ||
               Generic.create(type_value, class_value)
      end

      ##
      # A generic resource abstract class.

      class Generic < Resource

        ##
        # Creates a new generic resource.

        def initialize(data)
          @data = data
        end

        ##
        # Data for this generic resource.

        attr_reader :data

        def encode_rdata(msg) # :nodoc:
          msg.put_bytes(data)
        end

        def self.decode_rdata(msg) # :nodoc:
          return self.new(msg.get_bytes)
        end

        def self.create(type_value, class_value) # :nodoc:
          c = Class.new(Generic)
          c.const_set(:TypeValue, type_value)
          c.const_set(:ClassValue, class_value)
          Generic.const_set("Type#{type_value}_Class#{class_value}", c)
          ClassHash[[type_value, class_value]] = c
          return c
        end
      end

      ##
      # Domain Name resource abstract class.

      class DomainName < Resource

        ##
        # Creates a new DomainName from +name+.

        def initialize(name)
          @name = name
        end

        ##
        # The name of this DomainName.

        attr_reader :name

        def encode_rdata(msg) # :nodoc:
          msg.put_name(@name)
        end

        def self.decode_rdata(msg) # :nodoc:
          return self.new(msg.get_name)
        end
      end

      # Standard (class generic) RRs

      ClassValue = nil # :nodoc:

      ##
      # An authoritative name server.

      class NS < DomainName
        TypeValue = 2 # :nodoc:
      end

      ##
      # The canonical name for an alias.

      class CNAME < DomainName
        TypeValue = 5 # :nodoc:
      end

      ##
      # Start Of Authority resource.

      class SOA < Resource

        TypeValue = 6 # :nodoc:

        ##
        # Creates a new SOA record.  See the attr documentation for the
        # details of each argument.

        def initialize(mname, rname, serial, refresh, retry_, expire, minimum)
          @mname = mname
          @rname = rname
          @serial = serial
          @refresh = refresh
          @retry = retry_
          @expire = expire
          @minimum = minimum
        end

        ##
        # Name of the host where the master zone file for this zone resides.

        attr_reader :mname

        ##
        # The person responsible for this domain name.

        attr_reader :rname

        ##
        # The version number of the zone file.

        attr_reader :serial

        ##
        # How often, in seconds, a secondary name server is to check for
        # updates from the primary name server.

        attr_reader :refresh

        ##
        # How often, in seconds, a secondary name server is to retry after a
        # failure to check for a refresh.

        attr_reader :retry

        ##
        # Time in seconds that a secondary name server is to use the data
        # before refreshing from the primary name server.

        attr_reader :expire

        ##
        # The minimum number of seconds to be used for TTL values in RRs.

        attr_reader :minimum

        def encode_rdata(msg) # :nodoc:
          msg.put_name(@mname)
          msg.put_name(@rname)
          msg.put_pack('NNNNN', @serial, @refresh, @retry, @expire, @minimum)
        end

        def self.decode_rdata(msg) # :nodoc:
          mname = msg.get_name
          rname = msg.get_name
          serial, refresh, retry_, expire, minimum = msg.get_unpack('NNNNN')
          return self.new(
            mname, rname, serial, refresh, retry_, expire, minimum)
        end
      end

      ##
      # A Pointer to another DNS name.

      class PTR < DomainName
        TypeValue = 12 # :nodoc:
      end

      ##
      # Host Information resource.

      class HINFO < Resource

        TypeValue = 13 # :nodoc:

        ##
        # Creates a new HINFO running +os+ on +cpu+.

        def initialize(cpu, os)
          @cpu = cpu
          @os = os
        end

        ##
        # CPU architecture for this resource.

        attr_reader :cpu

        ##
        # Operating system for this resource.

        attr_reader :os

        def encode_rdata(msg) # :nodoc:
          msg.put_string(@cpu)
          msg.put_string(@os)
        end

        def self.decode_rdata(msg) # :nodoc:
          cpu = msg.get_string
          os = msg.get_string
          return self.new(cpu, os)
        end
      end

      ##
      # Mailing list or mailbox information.

      class MINFO < Resource

        TypeValue = 14 # :nodoc:

        def initialize(rmailbx, emailbx)
          @rmailbx = rmailbx
          @emailbx = emailbx
        end

        ##
        # Domain name responsible for this mail list or mailbox.

        attr_reader :rmailbx

        ##
        # Mailbox to use for error messages related to the mail list or mailbox.

        attr_reader :emailbx

        def encode_rdata(msg) # :nodoc:
          msg.put_name(@rmailbx)
          msg.put_name(@emailbx)
        end

        def self.decode_rdata(msg) # :nodoc:
          rmailbx = msg.get_string
          emailbx = msg.get_string
          return self.new(rmailbx, emailbx)
        end
      end

      ##
      # Mail Exchanger resource.

      class MX < Resource

        TypeValue= 15 # :nodoc:

        ##
        # Creates a new MX record with +preference+, accepting mail at
        # +exchange+.

        def initialize(preference, exchange)
          @preference = preference
          @exchange = exchange
        end

        ##
        # The preference for this MX.

        attr_reader :preference

        ##
        # The host of this MX.

        attr_reader :exchange

        def encode_rdata(msg) # :nodoc:
          msg.put_pack('n', @preference)
          msg.put_name(@exchange)
        end

        def self.decode_rdata(msg) # :nodoc:
          preference, = msg.get_unpack('n')
          exchange = msg.get_name
          return self.new(preference, exchange)
        end
      end

      ##
      # Unstructured text resource.

      class TXT < Resource

        TypeValue = 16 # :nodoc:

        def initialize(first_string, *rest_strings)
          @strings = [first_string, *rest_strings]
        end

        ##
        # Returns an Array of Strings for this TXT record.

        attr_reader :strings

        ##
        # Returns the concatenated string from +strings+.

        def data
          @strings.join("")
        end

        def encode_rdata(msg) # :nodoc:
          msg.put_string_list(@strings)
        end

        def self.decode_rdata(msg) # :nodoc:
          strings = msg.get_string_list
          return self.new(*strings)
        end
      end

      ##
      # Location resource

      class LOC < Resource

        TypeValue = 29 # :nodoc:

        def initialize(version, ssize, hprecision, vprecision, latitude, longitude, altitude)
          @version    = version
          @ssize      = Gem::Resolv::LOC::Size.create(ssize)
          @hprecision = Gem::Resolv::LOC::Size.create(hprecision)
          @vprecision = Gem::Resolv::LOC::Size.create(vprecision)
          @latitude   = Gem::Resolv::LOC::Coord.create(latitude)
          @longitude  = Gem::Resolv::LOC::Coord.create(longitude)
          @altitude   = Gem::Resolv::LOC::Alt.create(altitude)
        end

        ##
        # Returns the version value for this LOC record which should always be 00

        attr_reader :version

        ##
        # The spherical size of this LOC
        # in meters using scientific notation as 2 integers of XeY

        attr_reader :ssize

        ##
        # The horizontal precision using ssize type values
        # in meters using scientific notation as 2 integers of XeY
        # for precision use value/2 e.g. 2m = +/-1m

        attr_reader :hprecision

        ##
        # The vertical precision using ssize type values
        # in meters using scientific notation as 2 integers of XeY
        # for precision use value/2 e.g. 2m = +/-1m

        attr_reader :vprecision

        ##
        # The latitude for this LOC where 2**31 is the equator
        # in thousandths of an arc second as an unsigned 32bit integer

        attr_reader :latitude

        ##
        # The longitude for this LOC where 2**31 is the prime meridian
        # in thousandths of an arc second as an unsigned 32bit integer

        attr_reader :longitude

        ##
        # The altitude of the LOC above a reference sphere whose surface sits 100km below the WGS84 spheroid
        # in centimeters as an unsigned 32bit integer

        attr_reader :altitude

        def encode_rdata(msg) # :nodoc:
          msg.put_bytes(@version)
          msg.put_bytes(@ssize.scalar)
          msg.put_bytes(@hprecision.scalar)
          msg.put_bytes(@vprecision.scalar)
          msg.put_bytes(@latitude.coordinates)
          msg.put_bytes(@longitude.coordinates)
          msg.put_bytes(@altitude.altitude)
        end

        def self.decode_rdata(msg) # :nodoc:
          version    = msg.get_bytes(1)
          ssize      = msg.get_bytes(1)
          hprecision = msg.get_bytes(1)
          vprecision = msg.get_bytes(1)
          latitude   = msg.get_bytes(4)
          longitude  = msg.get_bytes(4)
          altitude   = msg.get_bytes(4)
          return self.new(
            version,
            Gem::Resolv::LOC::Size.new(ssize),
            Gem::Resolv::LOC::Size.new(hprecision),
            Gem::Resolv::LOC::Size.new(vprecision),
            Gem::Resolv::LOC::Coord.new(latitude,"lat"),
            Gem::Resolv::LOC::Coord.new(longitude,"lon"),
            Gem::Resolv::LOC::Alt.new(altitude)
          )
        end
      end

      ##
      # A Query type requesting any RR.

      class ANY < Query
        TypeValue = 255 # :nodoc:
      end

      ##
      # CAA resource record defined in RFC 8659
      #
      # These records identify certificate authority allowed to issue
      # certificates for the given domain.

      class CAA < Resource
        TypeValue = 257

        ##
        # Creates a new CAA for +flags+, +tag+ and +value+.

        def initialize(flags, tag, value)
          unless (0..255) === flags
            raise ArgumentError.new('flags must be an Integer between 0 and 255')
          end
          unless (1..15) === tag.bytesize
            raise ArgumentError.new('length of tag must be between 1 and 15')
          end

          @flags = flags
          @tag = tag
          @value = value
        end

        ##
        # Flags for this proprty:
        # - Bit 0 : 0 = not critical, 1 = critical

        attr_reader :flags

        ##
        # Property tag ("issue", "issuewild", "iodef"...).

        attr_reader :tag

        ##
        # Property value.

        attr_reader :value

        ##
        # Whether the critical flag is set on this property.

        def critical?
          flags & 0x80 != 0
        end

        def encode_rdata(msg) # :nodoc:
          msg.put_pack('C', @flags)
          msg.put_string(@tag)
          msg.put_bytes(@value)
        end

        def self.decode_rdata(msg) # :nodoc:
          flags, = msg.get_unpack('C')
          tag = msg.get_string
          value = msg.get_bytes
          self.new flags, tag, value
        end
      end

      ClassInsensitiveTypes = [ # :nodoc:
        NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, LOC, ANY, CAA
      ]

      ##
      # module IN contains ARPA Internet specific RRs.

      module IN

        ClassValue = 1 # :nodoc:

        ClassInsensitiveTypes.each {|s|
          c = Class.new(s)
          c.const_set(:TypeValue, s::TypeValue)
          c.const_set(:ClassValue, ClassValue)
          ClassHash[[s::TypeValue, ClassValue]] = c
          self.const_set(s.name.sub(/.*::/, ''), c)
        }

        ##
        # IPv4 Address resource

        class A < Resource
          TypeValue = 1
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          ##
          # Creates a new A for +address+.

          def initialize(address)
            @address = IPv4.create(address)
          end

          ##
          # The Gem::Resolv::IPv4 address for this A.

          attr_reader :address

          def encode_rdata(msg) # :nodoc:
            msg.put_bytes(@address.address)
          end

          def self.decode_rdata(msg) # :nodoc:
            return self.new(IPv4.new(msg.get_bytes(4)))
          end
        end

        ##
        # Well Known Service resource.

        class WKS < Resource
          TypeValue = 11
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          def initialize(address, protocol, bitmap)
            @address = IPv4.create(address)
            @protocol = protocol
            @bitmap = bitmap
          end

          ##
          # The host these services run on.

          attr_reader :address

          ##
          # IP protocol number for these services.

          attr_reader :protocol

          ##
          # A bit map of enabled services on this host.
          #
          # If protocol is 6 (TCP) then the 26th bit corresponds to the SMTP
          # service (port 25).  If this bit is set, then an SMTP server should
          # be listening on TCP port 25; if zero, SMTP service is not
          # supported.

          attr_reader :bitmap

          def encode_rdata(msg) # :nodoc:
            msg.put_bytes(@address.address)
            msg.put_pack("n", @protocol)
            msg.put_bytes(@bitmap)
          end

          def self.decode_rdata(msg) # :nodoc:
            address = IPv4.new(msg.get_bytes(4))
            protocol, = msg.get_unpack("n")
            bitmap = msg.get_bytes
            return self.new(address, protocol, bitmap)
          end
        end

        ##
        # An IPv6 address record.

        class AAAA < Resource
          TypeValue = 28
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          ##
          # Creates a new AAAA for +address+.

          def initialize(address)
            @address = IPv6.create(address)
          end

          ##
          # The Gem::Resolv::IPv6 address for this AAAA.

          attr_reader :address

          def encode_rdata(msg) # :nodoc:
            msg.put_bytes(@address.address)
          end

          def self.decode_rdata(msg) # :nodoc:
            return self.new(IPv6.new(msg.get_bytes(16)))
          end
        end

        ##
        # SRV resource record defined in RFC 2782
        #
        # These records identify the hostname and port that a service is
        # available at.

        class SRV < Resource
          TypeValue = 33
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          # Create a SRV resource record.
          #
          # See the documentation for #priority, #weight, #port and #target
          # for +priority+, +weight+, +port and +target+ respectively.

          def initialize(priority, weight, port, target)
            @priority = priority.to_int
            @weight = weight.to_int
            @port = port.to_int
            @target = Name.create(target)
          end

          # The priority of this target host.
          #
          # A client MUST attempt to contact the target host with the
          # lowest-numbered priority it can reach; target hosts with the same
          # priority SHOULD be tried in an order defined by the weight field.
          # The range is 0-65535.  Note that it is not widely implemented and
          # should be set to zero.

          attr_reader :priority

          # A server selection mechanism.
          #
          # The weight field specifies a relative weight for entries with the
          # same priority. Larger weights SHOULD be given a proportionately
          # higher probability of being selected. The range of this number is
          # 0-65535.  Domain administrators SHOULD use Weight 0 when there
          # isn't any server selection to do, to make the RR easier to read
          # for humans (less noisy). Note that it is not widely implemented
          # and should be set to zero.

          attr_reader :weight

          # The port on this target host of this service.
          #
          # The range is 0-65535.

          attr_reader :port

          # The domain name of the target host.
          #
          # A target of "." means that the service is decidedly not available
          # at this domain.

          attr_reader :target

          def encode_rdata(msg) # :nodoc:
            msg.put_pack("n", @priority)
            msg.put_pack("n", @weight)
            msg.put_pack("n", @port)
            msg.put_name(@target, compress: false)
          end

          def self.decode_rdata(msg) # :nodoc:
            priority, = msg.get_unpack("n")
            weight,   = msg.get_unpack("n")
            port,     = msg.get_unpack("n")
            target    = msg.get_name
            return self.new(priority, weight, port, target)
          end
        end

        ##
        # Common implementation for SVCB-compatible resource records.

        class ServiceBinding

          ##
          # Create a service binding resource record.

          def initialize(priority, target, params = [])
            @priority = priority.to_int
            @target = Name.create(target)
            @params = SvcParams.new(params)
          end

          ##
          # The priority of this target host.
          #
          # The range is 0-65535.
          # If set to 0, this RR is in AliasMode. Otherwise, it is in ServiceMode.

          attr_reader :priority

          ##
          # The domain name of the target host.

          attr_reader :target

          ##
          # The service parameters for the target host.

          attr_reader :params

          ##
          # Whether this RR is in AliasMode.

          def alias_mode?
            self.priority == 0
          end

          ##
          # Whether this RR is in ServiceMode.

          def service_mode?
            !alias_mode?
          end

          def encode_rdata(msg) # :nodoc:
            msg.put_pack("n", @priority)
            msg.put_name(@target, compress: false)
            @params.encode(msg)
          end

          def self.decode_rdata(msg) # :nodoc:
            priority, = msg.get_unpack("n")
            target    = msg.get_name
            params    = SvcParams.decode(msg)
            return self.new(priority, target, params)
          end
        end

        ##
        # SVCB resource record [RFC9460]

        class SVCB < ServiceBinding
          TypeValue = 64
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:
        end

        ##
        # HTTPS resource record [RFC9460]

        class HTTPS < ServiceBinding
          TypeValue = 65
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:
        end
      end
    end
  end

  ##
  # A Gem::Resolv::DNS IPv4 address.

  class IPv4

    ##
    # Regular expression IPv4 addresses must match.

    Regex256 = /0
               |1(?:[0-9][0-9]?)?
               |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
               |[3-9][0-9]?/x
    Regex = /\A(#{Regex256})\.(#{Regex256})\.(#{Regex256})\.(#{Regex256})\z/

    def self.create(arg)
      case arg
      when IPv4
        return arg
      when Regex
        if (0..255) === (a = $1.to_i) &&
           (0..255) === (b = $2.to_i) &&
           (0..255) === (c = $3.to_i) &&
           (0..255) === (d = $4.to_i)
          return self.new([a, b, c, d].pack("CCCC"))
        else
          raise ArgumentError.new("IPv4 address with invalid value: " + arg)
        end
      else
        raise ArgumentError.new("cannot interpret as IPv4 address: #{arg.inspect}")
      end
    end

    def initialize(address) # :nodoc:
      unless address.kind_of?(String)
        raise ArgumentError, 'IPv4 address must be a string'
      end
      unless address.length == 4
        raise ArgumentError, "IPv4 address expects 4 bytes but #{address.length} bytes"
      end
      @address = address
    end

    ##
    # A String representation of this IPv4 address.

    ##
    # The raw IPv4 address as a String.

    attr_reader :address

    def to_s # :nodoc:
      return sprintf("%d.%d.%d.%d", *@address.unpack("CCCC"))
    end

    def inspect # :nodoc:
      return "#<#{self.class} #{self}>"
    end

    ##
    # Turns this IPv4 address into a Gem::Resolv::DNS::Name.

    def to_name
      return DNS::Name.create(
        '%d.%d.%d.%d.in-addr.arpa.' % @address.unpack('CCCC').reverse)
    end

    def ==(other) # :nodoc:
      return @address == other.address
    end

    def eql?(other) # :nodoc:
      return self == other
    end

    def hash # :nodoc:
      return @address.hash
    end
  end

  ##
  # A Gem::Resolv::DNS IPv6 address.

  class IPv6

    ##
    # IPv6 address format a:b:c:d:e:f:g:h
    Regex_8Hex = /\A
      (?:[0-9A-Fa-f]{1,4}:){7}
         [0-9A-Fa-f]{1,4}
      \z/x

    ##
    # Compressed IPv6 address format a::b

    Regex_CompressedHex = /\A
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
      \z/x

    ##
    # IPv4 mapped IPv6 address format a:b:c:d:e:f:w.x.y.z

    Regex_6Hex4Dec = /\A
      ((?:[0-9A-Fa-f]{1,4}:){6,6})
      (\d+)\.(\d+)\.(\d+)\.(\d+)
      \z/x

    ##
    # Compressed IPv4 mapped IPv6 address format a::b:w.x.y.z

    Regex_CompressedHex4Dec = /\A
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
      ((?:[0-9A-Fa-f]{1,4}:)*)
      (\d+)\.(\d+)\.(\d+)\.(\d+)
      \z/x

    ##
    # IPv6 link local address format fe80:b:c:d:e:f:g:h%em1
    Regex_8HexLinkLocal = /\A
      [Ff][Ee]80
      (?::[0-9A-Fa-f]{1,4}){7}
      %[-0-9A-Za-z._~]+
      \z/x

    ##
    # Compressed IPv6 link local address format fe80::b%em1

    Regex_CompressedHexLinkLocal = /\A
      [Ff][Ee]80:
      (?:
        ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
        ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
        |
        :((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
      )?
      :[0-9A-Fa-f]{1,4}%[-0-9A-Za-z._~]+
      \z/x

    ##
    # A composite IPv6 address Regexp.

    Regex = /
      (?:#{Regex_8Hex}) |
      (?:#{Regex_CompressedHex}) |
      (?:#{Regex_6Hex4Dec}) |
      (?:#{Regex_CompressedHex4Dec}) |
      (?:#{Regex_8HexLinkLocal}) |
      (?:#{Regex_CompressedHexLinkLocal})
      /x

    ##
    # Creates a new IPv6 address from +arg+ which may be:
    #
    # IPv6:: returns +arg+.
    # String:: +arg+ must match one of the IPv6::Regex* constants

    def self.create(arg)
      case arg
      when IPv6
        return arg
      when String
        address = ''.b
        if Regex_8Hex =~ arg
          arg.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
        elsif Regex_CompressedHex =~ arg
          prefix = $1
          suffix = $2
          a1 = ''.b
          a2 = ''.b
          prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
          suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
          omitlen = 16 - a1.length - a2.length
          address << a1 << "\0" * omitlen << a2
        elsif Regex_6Hex4Dec =~ arg
          prefix, a, b, c, d = $1, $2.to_i, $3.to_i, $4.to_i, $5.to_i
          if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
            prefix.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
            address << [a, b, c, d].pack('CCCC')
          else
            raise ArgumentError.new("not numeric IPv6 address: " + arg)
          end
        elsif Regex_CompressedHex4Dec =~ arg
          prefix, suffix, a, b, c, d = $1, $2, $3.to_i, $4.to_i, $5.to_i, $6.to_i
          if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
            a1 = ''.b
            a2 = ''.b
            prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
            suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
            omitlen = 12 - a1.length - a2.length
            address << a1 << "\0" * omitlen << a2 << [a, b, c, d].pack('CCCC')
          else
            raise ArgumentError.new("not numeric IPv6 address: " + arg)
          end
        else
          raise ArgumentError.new("not numeric IPv6 address: " + arg)
        end
        return IPv6.new(address)
      else
        raise ArgumentError.new("cannot interpret as IPv6 address: #{arg.inspect}")
      end
    end

    def initialize(address) # :nodoc:
      unless address.kind_of?(String) && address.length == 16
        raise ArgumentError.new('IPv6 address must be 16 bytes')
      end
      @address = address
    end

    ##
    # The raw IPv6 address as a String.

    attr_reader :address

    def to_s # :nodoc:
      sprintf("%x:%x:%x:%x:%x:%x:%x:%x", *@address.unpack("nnnnnnnn")).sub(/(^|:)0(:0)+(:|$)/, '::')
    end

    def inspect # :nodoc:
      return "#<#{self.class} #{self}>"
    end

    ##
    # Turns this IPv6 address into a Gem::Resolv::DNS::Name.
    #--
    # ip6.arpa should be searched too. [RFC3152]

    def to_name
      return DNS::Name.new(
        @address.unpack("H32")[0].split(//).reverse + ['ip6', 'arpa'])
    end

    def ==(other) # :nodoc:
      return @address == other.address
    end

    def eql?(other) # :nodoc:
      return self == other
    end

    def hash # :nodoc:
      return @address.hash
    end
  end

  ##
  # Gem::Resolv::MDNS is a one-shot Multicast DNS (mDNS) resolver.  It blindly
  # makes queries to the mDNS addresses without understanding anything about
  # multicast ports.
  #
  # Information taken form the following places:
  #
  # * RFC 6762

  class MDNS < DNS

    ##
    # Default mDNS Port

    Port = 5353

    ##
    # Default IPv4 mDNS address

    AddressV4 = '224.0.0.251'

    ##
    # Default IPv6 mDNS address

    AddressV6 = 'ff02::fb'

    ##
    # Default mDNS addresses

    Addresses = [
      [AddressV4, Port],
      [AddressV6, Port],
    ]

    ##
    # Creates a new one-shot Multicast DNS (mDNS) resolver.
    #
    # +config_info+ can be:
    #
    # nil::
    #   Uses the default mDNS addresses
    #
    # Hash::
    #   Must contain :nameserver or :nameserver_port like
    #   Gem::Resolv::DNS#initialize.

    def initialize(config_info=nil)
      if config_info then
        super({ nameserver_port: Addresses }.merge(config_info))
      else
        super(nameserver_port: Addresses)
      end
    end

    ##
    # Iterates over all IP addresses for +name+ retrieved from the mDNS
    # resolver, provided name ends with "local".  If the name does not end in
    # "local" no records will be returned.
    #
    # +name+ can be a Gem::Resolv::DNS::Name or a String.  Retrieved addresses will
    # be a Gem::Resolv::IPv4 or Gem::Resolv::IPv6

    def each_address(name)
      name = Gem::Resolv::DNS::Name.create(name)

      return unless name[-1].to_s == 'local'

      super(name)
    end

    def make_udp_requester # :nodoc:
      nameserver_port = @config.nameserver_port
      Requester::MDNSOneShot.new(*nameserver_port)
    end

  end

  module LOC

    ##
    # A Gem::Resolv::LOC::Size

    class Size

      Regex = /^(\d+\.*\d*)[m]$/

      ##
      # Creates a new LOC::Size from +arg+ which may be:
      #
      # LOC::Size:: returns +arg+.
      # String:: +arg+ must match the LOC::Size::Regex constant

      def self.create(arg)
        case arg
        when Size
          return arg
        when String
          scalar = ''
          if Regex =~ arg
            scalar = [(($1.to_f*(1e2)).to_i.to_s[0].to_i*(2**4)+(($1.to_f*(1e2)).to_i.to_s.length-1))].pack("C")
          else
            raise ArgumentError.new("not a properly formed Size string: " + arg)
          end
          return Size.new(scalar)
        else
          raise ArgumentError.new("cannot interpret as Size: #{arg.inspect}")
        end
      end

      def initialize(scalar)
        @scalar = scalar
      end

      ##
      # The raw size

      attr_reader :scalar

      def to_s # :nodoc:
        s = @scalar.unpack("H2").join.to_s
        return ((s[0].to_i)*(10**(s[1].to_i-2))).to_s << "m"
      end

      def inspect # :nodoc:
        return "#<#{self.class} #{self}>"
      end

      def ==(other) # :nodoc:
        return @scalar == other.scalar
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        return @scalar.hash
      end

    end

    ##
    # A Gem::Resolv::LOC::Coord

    class Coord

      Regex = /^(\d+)\s(\d+)\s(\d+\.\d+)\s([NESW])$/

      ##
      # Creates a new LOC::Coord from +arg+ which may be:
      #
      # LOC::Coord:: returns +arg+.
      # String:: +arg+ must match the LOC::Coord::Regex constant

      def self.create(arg)
        case arg
        when Coord
          return arg
        when String
          coordinates = ''
          if Regex =~ arg && $1.to_f < 180
            m = $~
            hemi = (m[4][/[NE]/]) || (m[4][/[SW]/]) ? 1 : -1
            coordinates = [ ((m[1].to_i*(36e5)) + (m[2].to_i*(6e4)) +
                             (m[3].to_f*(1e3))) * hemi+(2**31) ].pack("N")
            orientation = m[4][/[NS]/] ? 'lat' : 'lon'
          else
            raise ArgumentError.new("not a properly formed Coord string: " + arg)
          end
          return Coord.new(coordinates,orientation)
        else
          raise ArgumentError.new("cannot interpret as Coord: #{arg.inspect}")
        end
      end

      def initialize(coordinates,orientation)
        unless coordinates.kind_of?(String)
          raise ArgumentError.new("Coord must be a 32bit unsigned integer in hex format: #{coordinates.inspect}")
        end
        unless orientation.kind_of?(String) && orientation[/^lon$|^lat$/]
          raise ArgumentError.new('Coord expects orientation to be a String argument of "lat" or "lon"')
        end
        @coordinates = coordinates
        @orientation = orientation
      end

      ##
      # The raw coordinates

      attr_reader :coordinates

      ## The orientation of the hemisphere as 'lat' or 'lon'

      attr_reader :orientation

      def to_s # :nodoc:
          c = @coordinates.unpack("N").join.to_i
          val      = (c - (2**31)).abs
          fracsecs = (val % 1e3).to_i.to_s
          val      = val / 1e3
          secs     = (val % 60).to_i.to_s
          val      = val / 60
          mins     = (val % 60).to_i.to_s
          degs     = (val / 60).to_i.to_s
          posi = (c >= 2**31)
          case posi
          when true
            hemi = @orientation[/^lat$/] ? "N" : "E"
          else
            hemi = @orientation[/^lon$/] ? "W" : "S"
          end
          return degs << " " << mins << " " << secs << "." << fracsecs << " " << hemi
      end

      def inspect # :nodoc:
        return "#<#{self.class} #{self}>"
      end

      def ==(other) # :nodoc:
        return @coordinates == other.coordinates
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        return @coordinates.hash
      end

    end

    ##
    # A Gem::Resolv::LOC::Alt

    class Alt

      Regex = /^([+-]*\d+\.*\d*)[m]$/

      ##
      # Creates a new LOC::Alt from +arg+ which may be:
      #
      # LOC::Alt:: returns +arg+.
      # String:: +arg+ must match the LOC::Alt::Regex constant

      def self.create(arg)
        case arg
        when Alt
          return arg
        when String
          altitude = ''
          if Regex =~ arg
            altitude = [($1.to_f*(1e2))+(1e7)].pack("N")
          else
            raise ArgumentError.new("not a properly formed Alt string: " + arg)
          end
          return Alt.new(altitude)
        else
          raise ArgumentError.new("cannot interpret as Alt: #{arg.inspect}")
        end
      end

      def initialize(altitude)
        @altitude = altitude
      end

      ##
      # The raw altitude

      attr_reader :altitude

      def to_s # :nodoc:
        a = @altitude.unpack("N").join.to_i
        return ((a.to_f/1e2)-1e5).to_s + "m"
      end

      def inspect # :nodoc:
        return "#<#{self.class} #{self}>"
      end

      def ==(other) # :nodoc:
        return @altitude == other.altitude
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        return @altitude.hash
      end

    end

  end

  ##
  # Default resolver to use for Gem::Resolv class methods.

  DefaultResolver = self.new

  ##
  # Replaces the resolvers in the default resolver with +new_resolvers+.  This
  # allows resolvers to be changed for resolv-replace.

  def DefaultResolver.replace_resolvers new_resolvers
    @resolvers = new_resolvers
  end

  ##
  # Address Regexp to use for matching IP addresses.

  AddressRegex = /(?:#{IPv4::Regex})|(?:#{IPv6::Regex})/

end
PK)J[�?��pp@share/rubygems/rubygems/vendor/molinillo/lib/molinillo/errors.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  # An error that occurred during the resolution process
  class ResolverError < StandardError; end

  # An error caused by searching for a dependency that is completely unknown,
  # i.e. has no versions available whatsoever.
  class NoSuchDependencyError < ResolverError
    # @return [Object] the dependency that could not be found
    attr_accessor :dependency

    # @return [Array<Object>] the specifications that depended upon {#dependency}
    attr_accessor :required_by

    # Initializes a new error with the given missing dependency.
    # @param [Object] dependency @see {#dependency}
    # @param [Array<Object>] required_by @see {#required_by}
    def initialize(dependency, required_by = [])
      @dependency = dependency
      @required_by = required_by.uniq
      super()
    end

    # The error message for the missing dependency, including the specifications
    # that had this dependency.
    def message
      sources = required_by.map { |r| "`#{r}`" }.join(' and ')
      message = "Unable to find a specification for `#{dependency}`"
      message += " depended upon by #{sources}" unless sources.empty?
      message
    end
  end

  # An error caused by attempting to fulfil a dependency that was circular
  #
  # @note This exception will be thrown if and only if a {Vertex} is added to a
  #   {DependencyGraph} that has a {DependencyGraph::Vertex#path_to?} an
  #   existing {DependencyGraph::Vertex}
  class CircularDependencyError < ResolverError
    # [Set<Object>] the dependencies responsible for causing the error
    attr_reader :dependencies

    # Initializes a new error with the given circular vertices.
    # @param [Array<DependencyGraph::Vertex>] vertices the vertices in the dependency
    #   that caused the error
    def initialize(vertices)
      super "There is a circular dependency between #{vertices.map(&:name).join(' and ')}"
      @dependencies = vertices.map { |vertex| vertex.payload.possibilities.last }.to_set
    end
  end

  # An error caused by conflicts in version
  class VersionConflict < ResolverError
    # @return [{String => Resolution::Conflict}] the conflicts that caused
    #   resolution to fail
    attr_reader :conflicts

    # @return [SpecificationProvider] the specification provider used during
    #   resolution
    attr_reader :specification_provider

    # Initializes a new error with the given version conflicts.
    # @param [{String => Resolution::Conflict}] conflicts see {#conflicts}
    # @param [SpecificationProvider] specification_provider see {#specification_provider}
    def initialize(conflicts, specification_provider)
      pairs = []
      conflicts.values.flat_map(&:requirements).each do |conflicting|
        conflicting.each do |source, conflict_requirements|
          conflict_requirements.each do |c|
            pairs << [c, source]
          end
        end
      end

      super "Unable to satisfy the following requirements:\n\n" \
        "#{pairs.map { |r, d| "- `#{r}` required by `#{d}`" }.join("\n")}"

      @conflicts = conflicts
      @specification_provider = specification_provider
    end

    require_relative 'delegates/specification_provider'
    include Delegates::SpecificationProvider

    # @return [String] An error message that includes requirement trees,
    #   which is much more detailed & customizable than the default message
    # @param [Hash] opts the options to create a message with.
    # @option opts [String] :solver_name The user-facing name of the solver
    # @option opts [String] :possibility_type The generic name of a possibility
    # @option opts [Proc] :reduce_trees A proc that reduced the list of requirement trees
    # @option opts [Proc] :printable_requirement A proc that pretty-prints requirements
    # @option opts [Proc] :additional_message_for_conflict A proc that appends additional
    #   messages for each conflict
    # @option opts [Proc] :version_for_spec A proc that returns the version number for a
    #   possibility
    def message_with_trees(opts = {})
      solver_name = opts.delete(:solver_name) { self.class.name.split('::').first }
      possibility_type = opts.delete(:possibility_type) { 'possibility named' }
      reduce_trees = opts.delete(:reduce_trees) { proc { |trees| trees.uniq.sort_by(&:to_s) } }
      printable_requirement = opts.delete(:printable_requirement) { proc { |req| req.to_s } }
      additional_message_for_conflict = opts.delete(:additional_message_for_conflict) { proc {} }
      version_for_spec = opts.delete(:version_for_spec) { proc(&:to_s) }
      incompatible_version_message_for_conflict = opts.delete(:incompatible_version_message_for_conflict) do
        proc do |name, _conflict|
          %(#{solver_name} could not find compatible versions for #{possibility_type} "#{name}":)
        end
      end

      full_message_for_conflict = opts.delete(:full_message_for_conflict) do
        proc do |name, conflict|
          o = "\n".dup << incompatible_version_message_for_conflict.call(name, conflict) << "\n"
          if conflict.locked_requirement
            o << %(  In snapshot (#{name_for_locking_dependency_source}):\n)
            o << %(    #{printable_requirement.call(conflict.locked_requirement)}\n)
            o << %(\n)
          end
          o << %(  In #{name_for_explicit_dependency_source}:\n)
          trees = reduce_trees.call(conflict.requirement_trees)

          o << trees.map do |tree|
            t = ''.dup
            depth = 2
            tree.each do |req|
              t << '  ' * depth << printable_requirement.call(req)
              unless tree.last == req
                if spec = conflict.activated_by_name[name_for(req)]
                  t << %( was resolved to #{version_for_spec.call(spec)}, which)
                end
                t << %( depends on)
              end
              t << %(\n)
              depth += 1
            end
            t
          end.join("\n")

          additional_message_for_conflict.call(o, name, conflict)

          o
        end
      end

      conflicts.sort.reduce(''.dup) do |o, (name, conflict)|
        o << full_message_for_conflict.call(name, conflict)
      end.strip
    end
  end
end
PK)J[����$$?share/rubygems/rubygems/vendor/molinillo/lib/molinillo/state.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  # A state that a {Resolution} can be in
  # @attr [String] name the name of the current requirement
  # @attr [Array<Object>] requirements currently unsatisfied requirements
  # @attr [DependencyGraph] activated the graph of activated dependencies
  # @attr [Object] requirement the current requirement
  # @attr [Object] possibilities the possibilities to satisfy the current requirement
  # @attr [Integer] depth the depth of the resolution
  # @attr [Hash] conflicts unresolved conflicts, indexed by dependency name
  # @attr [Array<UnwindDetails>] unused_unwind_options unwinds for previous conflicts that weren't explored
  ResolutionState = Struct.new(
    :name,
    :requirements,
    :activated,
    :requirement,
    :possibilities,
    :depth,
    :conflicts,
    :unused_unwind_options
  )

  class ResolutionState
    # Returns an empty resolution state
    # @return [ResolutionState] an empty state
    def self.empty
      new(nil, [], DependencyGraph.new, nil, nil, 0, {}, [])
    end
  end

  # A state that encapsulates a set of {#requirements} with an {Array} of
  # possibilities
  class DependencyState < ResolutionState
    # Removes a possibility from `self`
    # @return [PossibilityState] a state with a single possibility,
    #  the possibility that was removed from `self`
    def pop_possibility_state
      PossibilityState.new(
        name,
        requirements.dup,
        activated,
        requirement,
        [possibilities.pop],
        depth + 1,
        conflicts.dup,
        unused_unwind_options.dup
      ).tap do |state|
        state.activated.tag(state)
      end
    end
  end

  # A state that encapsulates a single possibility to fulfill the given
  # {#requirement}
  class PossibilityState < ResolutionState
  end
end
PK)J[JT�܂���Dshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/resolution.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  class Resolver
    # A specific resolution from a given {Resolver}
    class Resolution
      # A conflict that the resolution process encountered
      # @attr [Object] requirement the requirement that immediately led to the conflict
      # @attr [{String,Nil=>[Object]}] requirements the requirements that caused the conflict
      # @attr [Object, nil] existing the existing spec that was in conflict with
      #   the {#possibility}
      # @attr [Object] possibility_set the set of specs that was unable to be
      #   activated due to a conflict.
      # @attr [Object] locked_requirement the relevant locking requirement.
      # @attr [Array<Array<Object>>] requirement_trees the different requirement
      #   trees that led to every requirement for the conflicting name.
      # @attr [{String=>Object}] activated_by_name the already-activated specs.
      # @attr [Object] underlying_error an error that has occurred during resolution, and
      #    will be raised at the end of it if no resolution is found.
      Conflict = Struct.new(
        :requirement,
        :requirements,
        :existing,
        :possibility_set,
        :locked_requirement,
        :requirement_trees,
        :activated_by_name,
        :underlying_error
      )

      class Conflict
        # @return [Object] a spec that was unable to be activated due to a conflict
        def possibility
          possibility_set && possibility_set.latest_version
        end
      end

      # A collection of possibility states that share the same dependencies
      # @attr [Array] dependencies the dependencies for this set of possibilities
      # @attr [Array] possibilities the possibilities
      PossibilitySet = Struct.new(:dependencies, :possibilities)

      class PossibilitySet
        # String representation of the possibility set, for debugging
        def to_s
          "[#{possibilities.join(', ')}]"
        end

        # @return [Object] most up-to-date dependency in the possibility set
        def latest_version
          possibilities.last
        end
      end

      # Details of the state to unwind to when a conflict occurs, and the cause of the unwind
      # @attr [Integer] state_index the index of the state to unwind to
      # @attr [Object] state_requirement the requirement of the state we're unwinding to
      # @attr [Array] requirement_tree for the requirement we're relaxing
      # @attr [Array] conflicting_requirements the requirements that combined to cause the conflict
      # @attr [Array] requirement_trees for the conflict
      # @attr [Array] requirements_unwound_to_instead array of unwind requirements that were chosen over this unwind
      UnwindDetails = Struct.new(
        :state_index,
        :state_requirement,
        :requirement_tree,
        :conflicting_requirements,
        :requirement_trees,
        :requirements_unwound_to_instead
      )

      class UnwindDetails
        include Comparable

        # We compare UnwindDetails when choosing which state to unwind to. If
        # two options have the same state_index we prefer the one most
        # removed from a requirement that caused the conflict. Both options
        # would unwind to the same state, but a `grandparent` option will
        # filter out fewer of its possibilities after doing so - where a state
        # is both a `parent` and a `grandparent` to requirements that have
        # caused a conflict this is the correct behaviour.
        # @param [UnwindDetail] other UnwindDetail to be compared
        # @return [Integer] integer specifying ordering
        def <=>(other)
          if state_index > other.state_index
            1
          elsif state_index == other.state_index
            reversed_requirement_tree_index <=> other.reversed_requirement_tree_index
          else
            -1
          end
        end

        # @return [Integer] index of state requirement in reversed requirement tree
        #    (the conflicting requirement itself will be at position 0)
        def reversed_requirement_tree_index
          @reversed_requirement_tree_index ||=
            if state_requirement
              requirement_tree.reverse.index(state_requirement)
            else
              999_999
            end
        end

        # @return [Boolean] where the requirement of the state we're unwinding
        #    to directly caused the conflict. Note: in this case, it is
        #    impossible for the state we're unwinding to be a parent of
        #    any of the other conflicting requirements (or we would have
        #    circularity)
        def unwinding_to_primary_requirement?
          requirement_tree.last == state_requirement
        end

        # @return [Array] array of sub-dependencies to avoid when choosing a
        #    new possibility for the state we've unwound to. Only relevant for
        #    non-primary unwinds
        def sub_dependencies_to_avoid
          @requirements_to_avoid ||=
            requirement_trees.map do |tree|
              index = tree.index(state_requirement)
              tree[index + 1] if index
            end.compact
        end

        # @return [Array] array of all the requirements that led to the need for
        #    this unwind
        def all_requirements
          @all_requirements ||= requirement_trees.flatten(1)
        end
      end

      # @return [SpecificationProvider] the provider that knows about
      #   dependencies, requirements, specifications, versions, etc.
      attr_reader :specification_provider

      # @return [UI] the UI that knows how to communicate feedback about the
      #   resolution process back to the user
      attr_reader :resolver_ui

      # @return [DependencyGraph] the base dependency graph to which
      #   dependencies should be 'locked'
      attr_reader :base

      # @return [Array] the dependencies that were explicitly required
      attr_reader :original_requested

      # Initializes a new resolution.
      # @param [SpecificationProvider] specification_provider
      #   see {#specification_provider}
      # @param [UI] resolver_ui see {#resolver_ui}
      # @param [Array] requested see {#original_requested}
      # @param [DependencyGraph] base see {#base}
      def initialize(specification_provider, resolver_ui, requested, base)
        @specification_provider = specification_provider
        @resolver_ui = resolver_ui
        @original_requested = requested
        @base = base
        @states = []
        @iteration_counter = 0
        @parents_of = Hash.new { |h, k| h[k] = [] }
      end

      # Resolves the {#original_requested} dependencies into a full dependency
      #   graph
      # @raise [ResolverError] if successful resolution is impossible
      # @return [DependencyGraph] the dependency graph of successfully resolved
      #   dependencies
      def resolve
        start_resolution

        while state
          break if !state.requirement && state.requirements.empty?
          indicate_progress
          if state.respond_to?(:pop_possibility_state) # DependencyState
            debug(depth) { "Creating possibility state for #{requirement} (#{possibilities.count} remaining)" }
            state.pop_possibility_state.tap do |s|
              if s
                states.push(s)
                activated.tag(s)
              end
            end
          end
          process_topmost_state
        end

        resolve_activated_specs
      ensure
        end_resolution
      end

      # @return [Integer] the number of resolver iterations in between calls to
      #   {#resolver_ui}'s {UI#indicate_progress} method
      attr_accessor :iteration_rate
      private :iteration_rate

      # @return [Time] the time at which resolution began
      attr_accessor :started_at
      private :started_at

      # @return [Array<ResolutionState>] the stack of states for the resolution
      attr_accessor :states
      private :states

      private

      # Sets up the resolution process
      # @return [void]
      def start_resolution
        @started_at = Time.now

        push_initial_state

        debug { "Starting resolution (#{@started_at})\nUser-requested dependencies: #{original_requested}" }
        resolver_ui.before_resolution
      end

      def resolve_activated_specs
        activated.vertices.each do |_, vertex|
          next unless vertex.payload

          latest_version = vertex.payload.possibilities.reverse_each.find do |possibility|
            vertex.requirements.all? { |req| requirement_satisfied_by?(req, activated, possibility) }
          end

          activated.set_payload(vertex.name, latest_version)
        end
        activated.freeze
      end

      # Ends the resolution process
      # @return [void]
      def end_resolution
        resolver_ui.after_resolution
        debug do
          "Finished resolution (#{@iteration_counter} steps) " \
          "(Took #{(ended_at = Time.now) - @started_at} seconds) (#{ended_at})"
        end
        debug { 'Unactivated: ' + Hash[activated.vertices.reject { |_n, v| v.payload }].keys.join(', ') } if state
        debug { 'Activated: ' + Hash[activated.vertices.select { |_n, v| v.payload }].keys.join(', ') } if state
      end

      require_relative 'state'
      require_relative 'modules/specification_provider'

      require_relative 'delegates/resolution_state'
      require_relative 'delegates/specification_provider'

      include Gem::Molinillo::Delegates::ResolutionState
      include Gem::Molinillo::Delegates::SpecificationProvider

      # Processes the topmost available {RequirementState} on the stack
      # @return [void]
      def process_topmost_state
        if possibility
          attempt_to_activate
        else
          create_conflict
          unwind_for_conflict
        end
      rescue CircularDependencyError => underlying_error
        create_conflict(underlying_error)
        unwind_for_conflict
      end

      # @return [Object] the current possibility that the resolution is trying
      #   to activate
      def possibility
        possibilities.last
      end

      # @return [RequirementState] the current state the resolution is
      #   operating upon
      def state
        states.last
      end

      # Creates and pushes the initial state for the resolution, based upon the
      # {#requested} dependencies
      # @return [void]
      def push_initial_state
        graph = DependencyGraph.new.tap do |dg|
          original_requested.each do |requested|
            vertex = dg.add_vertex(name_for(requested), nil, true)
            vertex.explicit_requirements << requested
          end
          dg.tag(:initial_state)
        end

        push_state_for_requirements(original_requested, true, graph)
      end

      # Unwinds the states stack because a conflict has been encountered
      # @return [void]
      def unwind_for_conflict
        details_for_unwind = build_details_for_unwind
        unwind_options = unused_unwind_options
        debug(depth) { "Unwinding for conflict: #{requirement} to #{details_for_unwind.state_index / 2}" }
        conflicts.tap do |c|
          sliced_states = states.slice!((details_for_unwind.state_index + 1)..-1)
          raise_error_unless_state(c)
          activated.rewind_to(sliced_states.first || :initial_state) if sliced_states
          state.conflicts = c
          state.unused_unwind_options = unwind_options
          filter_possibilities_after_unwind(details_for_unwind)
          index = states.size - 1
          @parents_of.each { |_, a| a.reject! { |i| i >= index } }
          state.unused_unwind_options.reject! { |uw| uw.state_index >= index }
        end
      end

      # Raises a VersionConflict error, or any underlying error, if there is no
      # current state
      # @return [void]
      def raise_error_unless_state(conflicts)
        return if state

        error = conflicts.values.map(&:underlying_error).compact.first
        raise error || VersionConflict.new(conflicts, specification_provider)
      end

      # @return [UnwindDetails] Details of the nearest index to which we could unwind
      def build_details_for_unwind
        # Get the possible unwinds for the current conflict
        current_conflict = conflicts[name]
        binding_requirements = binding_requirements_for_conflict(current_conflict)
        unwind_details = unwind_options_for_requirements(binding_requirements)

        last_detail_for_current_unwind = unwind_details.sort.last
        current_detail = last_detail_for_current_unwind

        # Look for past conflicts that could be unwound to affect the
        # requirement tree for the current conflict
        all_reqs = last_detail_for_current_unwind.all_requirements
        all_reqs_size = all_reqs.size
        relevant_unused_unwinds = unused_unwind_options.select do |alternative|
          diff_reqs = all_reqs - alternative.requirements_unwound_to_instead
          next if diff_reqs.size == all_reqs_size
          # Find the highest index unwind whilst looping through
          current_detail = alternative if alternative > current_detail
          alternative
        end

        # Add the current unwind options to the `unused_unwind_options` array.
        # The "used" option will be filtered out during `unwind_for_conflict`.
        state.unused_unwind_options += unwind_details.reject { |detail| detail.state_index == -1 }

        # Update the requirements_unwound_to_instead on any relevant unused unwinds
        relevant_unused_unwinds.each do |d|
          (d.requirements_unwound_to_instead << current_detail.state_requirement).uniq!
        end
        unwind_details.each do |d|
          (d.requirements_unwound_to_instead << current_detail.state_requirement).uniq!
        end

        current_detail
      end

      # @param [Array<Object>] binding_requirements array of requirements that combine to create a conflict
      # @return [Array<UnwindDetails>] array of UnwindDetails that have a chance
      #    of resolving the passed requirements
      def unwind_options_for_requirements(binding_requirements)
        unwind_details = []

        trees = []
        binding_requirements.reverse_each do |r|
          partial_tree = [r]
          trees << partial_tree
          unwind_details << UnwindDetails.new(-1, nil, partial_tree, binding_requirements, trees, [])

          # If this requirement has alternative possibilities, check if any would
          # satisfy the other requirements that created this conflict
          requirement_state = find_state_for(r)
          if conflict_fixing_possibilities?(requirement_state, binding_requirements)
            unwind_details << UnwindDetails.new(
              states.index(requirement_state),
              r,
              partial_tree,
              binding_requirements,
              trees,
              []
            )
          end

          # Next, look at the parent of this requirement, and check if the requirement
          # could have been avoided if an alternative PossibilitySet had been chosen
          parent_r = parent_of(r)
          next if parent_r.nil?
          partial_tree.unshift(parent_r)
          requirement_state = find_state_for(parent_r)
          if requirement_state.possibilities.any? { |set| !set.dependencies.include?(r) }
            unwind_details << UnwindDetails.new(
              states.index(requirement_state),
              parent_r,
              partial_tree,
              binding_requirements,
              trees,
              []
            )
          end

          # Finally, look at the grandparent and up of this requirement, looking
          # for any possibilities that wouldn't create their parent requirement
          grandparent_r = parent_of(parent_r)
          until grandparent_r.nil?
            partial_tree.unshift(grandparent_r)
            requirement_state = find_state_for(grandparent_r)
            if requirement_state.possibilities.any? { |set| !set.dependencies.include?(parent_r) }
              unwind_details << UnwindDetails.new(
                states.index(requirement_state),
                grandparent_r,
                partial_tree,
                binding_requirements,
                trees,
                []
              )
            end
            parent_r = grandparent_r
            grandparent_r = parent_of(parent_r)
          end
        end

        unwind_details
      end

      # @param [DependencyState] state
      # @param [Array] binding_requirements array of requirements
      # @return [Boolean] whether or not the given state has any possibilities
      #    that could satisfy the given requirements
      def conflict_fixing_possibilities?(state, binding_requirements)
        return false unless state

        state.possibilities.any? do |possibility_set|
          possibility_set.possibilities.any? do |poss|
            possibility_satisfies_requirements?(poss, binding_requirements)
          end
        end
      end

      # Filter's a state's possibilities to remove any that would not fix the
      # conflict we've just rewound from
      # @param [UnwindDetails] unwind_details details of the conflict just
      #   unwound from
      # @return [void]
      def filter_possibilities_after_unwind(unwind_details)
        return unless state && !state.possibilities.empty?

        if unwind_details.unwinding_to_primary_requirement?
          filter_possibilities_for_primary_unwind(unwind_details)
        else
          filter_possibilities_for_parent_unwind(unwind_details)
        end
      end

      # Filter's a state's possibilities to remove any that would not satisfy
      # the requirements in the conflict we've just rewound from
      # @param [UnwindDetails] unwind_details details of the conflict just unwound from
      # @return [void]
      def filter_possibilities_for_primary_unwind(unwind_details)
        unwinds_to_state = unused_unwind_options.select { |uw| uw.state_index == unwind_details.state_index }
        unwinds_to_state << unwind_details
        unwind_requirement_sets = unwinds_to_state.map(&:conflicting_requirements)

        state.possibilities.reject! do |possibility_set|
          possibility_set.possibilities.none? do |poss|
            unwind_requirement_sets.any? do |requirements|
              possibility_satisfies_requirements?(poss, requirements)
            end
          end
        end
      end

      # @param [Object] possibility a single possibility
      # @param [Array] requirements an array of requirements
      # @return [Boolean] whether the possibility satisfies all of the
      #    given requirements
      def possibility_satisfies_requirements?(possibility, requirements)
        name = name_for(possibility)

        activated.tag(:swap)
        activated.set_payload(name, possibility) if activated.vertex_named(name)
        satisfied = requirements.all? { |r| requirement_satisfied_by?(r, activated, possibility) }
        activated.rewind_to(:swap)

        satisfied
      end

      # Filter's a state's possibilities to remove any that would (eventually)
      # create a requirement in the conflict we've just rewound from
      # @param [UnwindDetails] unwind_details details of the conflict just unwound from
      # @return [void]
      def filter_possibilities_for_parent_unwind(unwind_details)
        unwinds_to_state = unused_unwind_options.select { |uw| uw.state_index == unwind_details.state_index }
        unwinds_to_state << unwind_details

        primary_unwinds = unwinds_to_state.select(&:unwinding_to_primary_requirement?).uniq
        parent_unwinds = unwinds_to_state.uniq - primary_unwinds

        allowed_possibility_sets = primary_unwinds.flat_map do |unwind|
          states[unwind.state_index].possibilities.select do |possibility_set|
            possibility_set.possibilities.any? do |poss|
              possibility_satisfies_requirements?(poss, unwind.conflicting_requirements)
            end
          end
        end

        requirements_to_avoid = parent_unwinds.flat_map(&:sub_dependencies_to_avoid)

        state.possibilities.reject! do |possibility_set|
          !allowed_possibility_sets.include?(possibility_set) &&
            (requirements_to_avoid - possibility_set.dependencies).empty?
        end
      end

      # @param [Conflict] conflict
      # @return [Array] minimal array of requirements that would cause the passed
      #    conflict to occur.
      def binding_requirements_for_conflict(conflict)
        return [conflict.requirement] if conflict.possibility.nil?

        possible_binding_requirements = conflict.requirements.values.flatten(1).uniq

        # When there's a `CircularDependency` error the conflicting requirement
        # (the one causing the circular) won't be `conflict.requirement`
        # (which won't be for the right state, because we won't have created it,
        # because it's circular).
        # We need to make sure we have that requirement in the conflict's list,
        # otherwise we won't be able to unwind properly, so we just return all
        # the requirements for the conflict.
        return possible_binding_requirements if conflict.underlying_error

        possibilities = search_for(conflict.requirement)

        # If all the requirements together don't filter out all possibilities,
        # then the only two requirements we need to consider are the initial one
        # (where the dependency's version was first chosen) and the last
        if binding_requirement_in_set?(nil, possible_binding_requirements, possibilities)
          return [conflict.requirement, requirement_for_existing_name(name_for(conflict.requirement))].compact
        end

        # Loop through the possible binding requirements, removing each one
        # that doesn't bind. Use a `reverse_each` as we want the earliest set of
        # binding requirements, and don't use `reject!` as we wish to refine the
        # array *on each iteration*.
        binding_requirements = possible_binding_requirements.dup
        possible_binding_requirements.reverse_each do |req|
          next if req == conflict.requirement
          unless binding_requirement_in_set?(req, binding_requirements, possibilities)
            binding_requirements -= [req]
          end
        end

        binding_requirements
      end

      # @param [Object] requirement we wish to check
      # @param [Array] possible_binding_requirements array of requirements
      # @param [Array] possibilities array of possibilities the requirements will be used to filter
      # @return [Boolean] whether or not the given requirement is required to filter
      #    out all elements of the array of possibilities.
      def binding_requirement_in_set?(requirement, possible_binding_requirements, possibilities)
        possibilities.any? do |poss|
          possibility_satisfies_requirements?(poss, possible_binding_requirements - [requirement])
        end
      end

      # @param [Object] requirement
      # @return [Object] the requirement that led to `requirement` being added
      #   to the list of requirements.
      def parent_of(requirement)
        return unless requirement
        return unless index = @parents_of[requirement].last
        return unless parent_state = @states[index]
        parent_state.requirement
      end

      # @param [String] name
      # @return [Object] the requirement that led to a version of a possibility
      #   with the given name being activated.
      def requirement_for_existing_name(name)
        return nil unless vertex = activated.vertex_named(name)
        return nil unless vertex.payload
        states.find { |s| s.name == name }.requirement
      end

      # @param [Object] requirement
      # @return [ResolutionState] the state whose `requirement` is the given
      #   `requirement`.
      def find_state_for(requirement)
        return nil unless requirement
        states.find { |i| requirement == i.requirement }
      end

      # @param [Object] underlying_error
      # @return [Conflict] a {Conflict} that reflects the failure to activate
      #   the {#possibility} in conjunction with the current {#state}
      def create_conflict(underlying_error = nil)
        vertex = activated.vertex_named(name)
        locked_requirement = locked_requirement_named(name)

        requirements = {}
        unless vertex.explicit_requirements.empty?
          requirements[name_for_explicit_dependency_source] = vertex.explicit_requirements
        end
        requirements[name_for_locking_dependency_source] = [locked_requirement] if locked_requirement
        vertex.incoming_edges.each do |edge|
          (requirements[edge.origin.payload.latest_version] ||= []).unshift(edge.requirement)
        end

        activated_by_name = {}
        activated.each { |v| activated_by_name[v.name] = v.payload.latest_version if v.payload }
        conflicts[name] = Conflict.new(
          requirement,
          requirements,
          vertex.payload && vertex.payload.latest_version,
          possibility,
          locked_requirement,
          requirement_trees,
          activated_by_name,
          underlying_error
        )
      end

      # @return [Array<Array<Object>>] The different requirement
      #   trees that led to every requirement for the current spec.
      def requirement_trees
        vertex = activated.vertex_named(name)
        vertex.requirements.map { |r| requirement_tree_for(r) }
      end

      # @param [Object] requirement
      # @return [Array<Object>] the list of requirements that led to
      #   `requirement` being required.
      def requirement_tree_for(requirement)
        tree = []
        while requirement
          tree.unshift(requirement)
          requirement = parent_of(requirement)
        end
        tree
      end

      # Indicates progress roughly once every second
      # @return [void]
      def indicate_progress
        @iteration_counter += 1
        @progress_rate ||= resolver_ui.progress_rate
        if iteration_rate.nil?
          if Time.now - started_at >= @progress_rate
            self.iteration_rate = @iteration_counter
          end
        end

        if iteration_rate && (@iteration_counter % iteration_rate) == 0
          resolver_ui.indicate_progress
        end
      end

      # Calls the {#resolver_ui}'s {UI#debug} method
      # @param [Integer] depth the depth of the {#states} stack
      # @param [Proc] block a block that yields a {#to_s}
      # @return [void]
      def debug(depth = 0, &block)
        resolver_ui.debug(depth, &block)
      end

      # Attempts to activate the current {#possibility}
      # @return [void]
      def attempt_to_activate
        debug(depth) { 'Attempting to activate ' + possibility.to_s }
        existing_vertex = activated.vertex_named(name)
        if existing_vertex.payload
          debug(depth) { "Found existing spec (#{existing_vertex.payload})" }
          attempt_to_filter_existing_spec(existing_vertex)
        else
          latest = possibility.latest_version
          possibility.possibilities.select! do |possibility|
            requirement_satisfied_by?(requirement, activated, possibility)
          end
          if possibility.latest_version.nil?
            # ensure there's a possibility for better error messages
            possibility.possibilities << latest if latest
            create_conflict
            unwind_for_conflict
          else
            activate_new_spec
          end
        end
      end

      # Attempts to update the existing vertex's `PossibilitySet` with a filtered version
      # @return [void]
      def attempt_to_filter_existing_spec(vertex)
        filtered_set = filtered_possibility_set(vertex)
        if !filtered_set.possibilities.empty?
          activated.set_payload(name, filtered_set)
          new_requirements = requirements.dup
          push_state_for_requirements(new_requirements, false)
        else
          create_conflict
          debug(depth) { "Unsatisfied by existing spec (#{vertex.payload})" }
          unwind_for_conflict
        end
      end

      # Generates a filtered version of the existing vertex's `PossibilitySet` using the
      # current state's `requirement`
      # @param [Object] vertex existing vertex
      # @return [PossibilitySet] filtered possibility set
      def filtered_possibility_set(vertex)
        PossibilitySet.new(vertex.payload.dependencies, vertex.payload.possibilities & possibility.possibilities)
      end

      # @param [String] requirement_name the spec name to search for
      # @return [Object] the locked spec named `requirement_name`, if one
      #   is found on {#base}
      def locked_requirement_named(requirement_name)
        vertex = base.vertex_named(requirement_name)
        vertex && vertex.payload
      end

      # Add the current {#possibility} to the dependency graph of the current
      # {#state}
      # @return [void]
      def activate_new_spec
        conflicts.delete(name)
        debug(depth) { "Activated #{name} at #{possibility}" }
        activated.set_payload(name, possibility)
        require_nested_dependencies_for(possibility)
      end

      # Requires the dependencies that the recently activated spec has
      # @param [Object] possibility_set the PossibilitySet that has just been
      #   activated
      # @return [void]
      def require_nested_dependencies_for(possibility_set)
        nested_dependencies = dependencies_for(possibility_set.latest_version)
        debug(depth) { "Requiring nested dependencies (#{nested_dependencies.join(', ')})" }
        nested_dependencies.each do |d|
          activated.add_child_vertex(name_for(d), nil, [name_for(possibility_set.latest_version)], d)
          parent_index = states.size - 1
          parents = @parents_of[d]
          parents << parent_index if parents.empty?
        end

        push_state_for_requirements(requirements + nested_dependencies, !nested_dependencies.empty?)
      end

      # Pushes a new {DependencyState} that encapsulates both existing and new
      # requirements
      # @param [Array] new_requirements
      # @param [Boolean] requires_sort
      # @param [Object] new_activated
      # @return [void]
      def push_state_for_requirements(new_requirements, requires_sort = true, new_activated = activated)
        new_requirements = sort_dependencies(new_requirements.uniq, new_activated, conflicts) if requires_sort
        new_requirement = nil
        loop do
          new_requirement = new_requirements.shift
          break if new_requirement.nil? || states.none? { |s| s.requirement == new_requirement }
        end
        new_name = new_requirement ? name_for(new_requirement) : ''.freeze
        possibilities = possibilities_for_requirement(new_requirement)
        handle_missing_or_push_dependency_state DependencyState.new(
          new_name, new_requirements, new_activated,
          new_requirement, possibilities, depth, conflicts.dup, unused_unwind_options.dup
        )
      end

      # Checks a proposed requirement with any existing locked requirement
      # before generating an array of possibilities for it.
      # @param [Object] requirement the proposed requirement
      # @param [Object] activated
      # @return [Array] possibilities
      def possibilities_for_requirement(requirement, activated = self.activated)
        return [] unless requirement
        if locked_requirement_named(name_for(requirement))
          return locked_requirement_possibility_set(requirement, activated)
        end

        group_possibilities(search_for(requirement))
      end

      # @param [Object] requirement the proposed requirement
      # @param [Object] activated
      # @return [Array] possibility set containing only the locked requirement, if any
      def locked_requirement_possibility_set(requirement, activated = self.activated)
        all_possibilities = search_for(requirement)
        locked_requirement = locked_requirement_named(name_for(requirement))

        # Longwinded way to build a possibilities array with either the locked
        # requirement or nothing in it. Required, since the API for
        # locked_requirement isn't guaranteed.
        locked_possibilities = all_possibilities.select do |possibility|
          requirement_satisfied_by?(locked_requirement, activated, possibility)
        end

        group_possibilities(locked_possibilities)
      end

      # Build an array of PossibilitySets, with each element representing a group of
      # dependency versions that all have the same sub-dependency version constraints
      # and are contiguous.
      # @param [Array] possibilities an array of possibilities
      # @return [Array<PossibilitySet>] an array of possibility sets
      def group_possibilities(possibilities)
        possibility_sets = []
        current_possibility_set = nil

        possibilities.reverse_each do |possibility|
          dependencies = dependencies_for(possibility)
          if current_possibility_set && dependencies_equal?(current_possibility_set.dependencies, dependencies)
            current_possibility_set.possibilities.unshift(possibility)
          else
            possibility_sets.unshift(PossibilitySet.new(dependencies, [possibility]))
            current_possibility_set = possibility_sets.first
          end
        end

        possibility_sets
      end

      # Pushes a new {DependencyState}.
      # If the {#specification_provider} says to
      # {SpecificationProvider#allow_missing?} that particular requirement, and
      # there are no possibilities for that requirement, then `state` is not
      # pushed, and the vertex in {#activated} is removed, and we continue
      # resolving the remaining requirements.
      # @param [DependencyState] state
      # @return [void]
      def handle_missing_or_push_dependency_state(state)
        if state.requirement && state.possibilities.empty? && allow_missing?(state.requirement)
          state.activated.detach_vertex_named(state.name)
          push_state_for_requirements(state.requirements.dup, false, state.activated)
        else
          states.push(state).tap { activated.tag(state) }
        end
      end
    end
  end
end
PK)J[�
5bbZshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/delegates/specification_provider.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  module Delegates
    # Delegates all {Gem::Molinillo::SpecificationProvider} methods to a
    # `#specification_provider` property.
    module SpecificationProvider
      # (see Gem::Molinillo::SpecificationProvider#search_for)
      def search_for(dependency)
        with_no_such_dependency_error_handling do
          specification_provider.search_for(dependency)
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#dependencies_for)
      def dependencies_for(specification)
        with_no_such_dependency_error_handling do
          specification_provider.dependencies_for(specification)
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#requirement_satisfied_by?)
      def requirement_satisfied_by?(requirement, activated, spec)
        with_no_such_dependency_error_handling do
          specification_provider.requirement_satisfied_by?(requirement, activated, spec)
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#dependencies_equal?)
      def dependencies_equal?(dependencies, other_dependencies)
        with_no_such_dependency_error_handling do
          specification_provider.dependencies_equal?(dependencies, other_dependencies)
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#name_for)
      def name_for(dependency)
        with_no_such_dependency_error_handling do
          specification_provider.name_for(dependency)
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#name_for_explicit_dependency_source)
      def name_for_explicit_dependency_source
        with_no_such_dependency_error_handling do
          specification_provider.name_for_explicit_dependency_source
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#name_for_locking_dependency_source)
      def name_for_locking_dependency_source
        with_no_such_dependency_error_handling do
          specification_provider.name_for_locking_dependency_source
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#sort_dependencies)
      def sort_dependencies(dependencies, activated, conflicts)
        with_no_such_dependency_error_handling do
          specification_provider.sort_dependencies(dependencies, activated, conflicts)
        end
      end

      # (see Gem::Molinillo::SpecificationProvider#allow_missing?)
      def allow_missing?(dependency)
        with_no_such_dependency_error_handling do
          specification_provider.allow_missing?(dependency)
        end
      end

      private

      # Ensures any raised {NoSuchDependencyError} has its
      # {NoSuchDependencyError#required_by} set.
      # @yield
      def with_no_such_dependency_error_handling
        yield
      rescue NoSuchDependencyError => error
        if state
          vertex = activated.vertex_named(name_for(error.dependency))
          error.required_by += vertex.incoming_edges.map { |e| e.origin.name }
          error.required_by << name_for_explicit_dependency_source unless vertex.explicit_requirements.empty?
        end
        raise
      end
    end
  end
end
PK)J[#:1V��Tshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  # @!visibility private
  module Delegates
    # Delegates all {Gem::Molinillo::ResolutionState} methods to a `#state` property.
    module ResolutionState
      # (see Gem::Molinillo::ResolutionState#name)
      def name
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.name
      end

      # (see Gem::Molinillo::ResolutionState#requirements)
      def requirements
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.requirements
      end

      # (see Gem::Molinillo::ResolutionState#activated)
      def activated
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.activated
      end

      # (see Gem::Molinillo::ResolutionState#requirement)
      def requirement
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.requirement
      end

      # (see Gem::Molinillo::ResolutionState#possibilities)
      def possibilities
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.possibilities
      end

      # (see Gem::Molinillo::ResolutionState#depth)
      def depth
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.depth
      end

      # (see Gem::Molinillo::ResolutionState#conflicts)
      def conflicts
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.conflicts
      end

      # (see Gem::Molinillo::ResolutionState#unused_unwind_options)
      def unused_unwind_options
        current_state = state || Gem::Molinillo::ResolutionState.empty
        current_state.unused_unwind_options
      end
    end
  end
end
PK)J[���wwFshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  # The version of Gem::Molinillo.
  VERSION = '0.8.0'.freeze
end
PK)J[�,�Bshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/resolver.rbnu�[���# frozen_string_literal: true

require_relative 'dependency_graph'

module Gem::Molinillo
  # This class encapsulates a dependency resolver.
  # The resolver is responsible for determining which set of dependencies to
  # activate, with feedback from the {#specification_provider}
  #
  #
  class Resolver
    require_relative 'resolution'

    # @return [SpecificationProvider] the specification provider used
    #   in the resolution process
    attr_reader :specification_provider

    # @return [UI] the UI module used to communicate back to the user
    #   during the resolution process
    attr_reader :resolver_ui

    # Initializes a new resolver.
    # @param  [SpecificationProvider] specification_provider
    #   see {#specification_provider}
    # @param  [UI] resolver_ui
    #   see {#resolver_ui}
    def initialize(specification_provider, resolver_ui)
      @specification_provider = specification_provider
      @resolver_ui = resolver_ui
    end

    # Resolves the requested dependencies into a {DependencyGraph},
    # locking to the base dependency graph (if specified)
    # @param [Array] requested an array of 'requested' dependencies that the
    #   {#specification_provider} can understand
    # @param [DependencyGraph,nil] base the base dependency graph to which
    #   dependencies should be 'locked'
    def resolve(requested, base = DependencyGraph.new)
      Resolution.new(specification_provider,
                     resolver_ui,
                     requested,
                     base).
        resolve
    end
  end
end
PK)J[�E�Dshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/modules/ui.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  # Conveys information about the resolution process to a user.
  module UI
    # The {IO} object that should be used to print output. `STDOUT`, by default.
    #
    # @return [IO]
    def output
      STDOUT
    end

    # Called roughly every {#progress_rate}, this method should convey progress
    # to the user.
    #
    # @return [void]
    def indicate_progress
      output.print '.' unless debug?
    end

    # How often progress should be conveyed to the user via
    # {#indicate_progress}, in seconds. A third of a second, by default.
    #
    # @return [Float]
    def progress_rate
      0.33
    end

    # Called before resolution begins.
    #
    # @return [void]
    def before_resolution
      output.print 'Resolving dependencies...'
    end

    # Called after resolution ends (either successfully or with an error).
    # By default, prints a newline.
    #
    # @return [void]
    def after_resolution
      output.puts
    end

    # Conveys debug information to the user.
    #
    # @param [Integer] depth the current depth of the resolution process.
    # @return [void]
    def debug(depth = 0)
      if debug?
        debug_info = yield
        debug_info = debug_info.inspect unless debug_info.is_a?(String)
        debug_info = debug_info.split("\n").map { |s| ":#{depth.to_s.rjust 4}: #{s}" }
        output.puts debug_info
      end
    end

    # Whether or not debug messages should be printed.
    # By default, whether or not the `MOLINILLO_DEBUG` environment variable is
    # set.
    #
    # @return [Boolean]
    def debug?
      return @debug_mode if defined?(@debug_mode)
      @debug_mode = ENV['MOLINILLO_DEBUG']
    end
  end
end
PK)J[�օSSXshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/modules/specification_provider.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  # Provides information about specifications and dependencies to the resolver,
  # allowing the {Resolver} class to remain generic while still providing power
  # and flexibility.
  #
  # This module contains the methods that users of Gem::Molinillo must to implement,
  # using knowledge of their own model classes.
  module SpecificationProvider
    # Search for the specifications that match the given dependency.
    # The specifications in the returned array will be considered in reverse
    # order, so the latest version ought to be last.
    # @note This method should be 'pure', i.e. the return value should depend
    #   only on the `dependency` parameter.
    #
    # @param [Object] dependency
    # @return [Array<Object>] the specifications that satisfy the given
    #   `dependency`.
    def search_for(dependency)
      []
    end

    # Returns the dependencies of `specification`.
    # @note This method should be 'pure', i.e. the return value should depend
    #   only on the `specification` parameter.
    #
    # @param [Object] specification
    # @return [Array<Object>] the dependencies that are required by the given
    #   `specification`.
    def dependencies_for(specification)
      []
    end

    # Determines whether the given `requirement` is satisfied by the given
    # `spec`, in the context of the current `activated` dependency graph.
    #
    # @param [Object] requirement
    # @param [DependencyGraph] activated the current dependency graph in the
    #   resolution process.
    # @param [Object] spec
    # @return [Boolean] whether `requirement` is satisfied by `spec` in the
    #   context of the current `activated` dependency graph.
    def requirement_satisfied_by?(requirement, activated, spec)
      true
    end

    # Determines whether two arrays of dependencies are equal, and thus can be
    # grouped.
    #
    # @param [Array<Object>] dependencies
    # @param [Array<Object>] other_dependencies
    # @return [Boolean] whether `dependencies` and `other_dependencies` should
    #   be considered equal.
    def dependencies_equal?(dependencies, other_dependencies)
      dependencies == other_dependencies
    end

    # Returns the name for the given `dependency`.
    # @note This method should be 'pure', i.e. the return value should depend
    #   only on the `dependency` parameter.
    #
    # @param [Object] dependency
    # @return [String] the name for the given `dependency`.
    def name_for(dependency)
      dependency.to_s
    end

    # @return [String] the name of the source of explicit dependencies, i.e.
    #   those passed to {Resolver#resolve} directly.
    def name_for_explicit_dependency_source
      'user-specified dependency'
    end

    # @return [String] the name of the source of 'locked' dependencies, i.e.
    #   those passed to {Resolver#resolve} directly as the `base`
    def name_for_locking_dependency_source
      'Lockfile'
    end

    # Sort dependencies so that the ones that are easiest to resolve are first.
    # Easiest to resolve is (usually) defined by:
    #   1) Is this dependency already activated?
    #   2) How relaxed are the requirements?
    #   3) Are there any conflicts for this dependency?
    #   4) How many possibilities are there to satisfy this dependency?
    #
    # @param [Array<Object>] dependencies
    # @param [DependencyGraph] activated the current dependency graph in the
    #   resolution process.
    # @param [{String => Array<Conflict>}] conflicts
    # @return [Array<Object>] a sorted copy of `dependencies`.
    def sort_dependencies(dependencies, activated, conflicts)
      dependencies.sort_by do |dependency|
        name = name_for(dependency)
        [
          activated.vertex_named(name).payload ? 0 : 1,
          conflicts[name] ? 0 : 1,
        ]
      end
    end

    # Returns whether this dependency, which has no possible matching
    # specifications, can safely be ignored.
    #
    # @param [Object] dependency
    # @return [Boolean] whether this dependency can safely be skipped.
    def allow_missing?(dependency)
      false
    end
  end
end
PK)J[��]�SSVshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Gem::Molinillo
  class DependencyGraph
    # @!visibility private
    # @see DependencyGraph#set_payload
    class SetPayload < Action # :nodoc:
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :set_payload
      end

      # (see Action#up)
      def up(graph)
        vertex = graph.vertex_named(name)
        @old_payload = vertex.payload
        vertex.payload = payload
      end

      # (see Action#down)
      def down(graph)
        graph.vertex_named(name).payload = @old_payload
      end

      # @!group SetPayload

      # @return [String] the name of the vertex
      attr_reader :name

      # @return [Object] the payload for the vertex
      attr_reader :payload

      # Initialize an action to add set the payload for a vertex in a dependency
      # graph
      # @param [String] name the name of the vertex
      # @param [Object] payload the payload for the vertex
      def initialize(name, payload)
        @name = name
        @payload = payload
      end
    end
  end
end
PK)J[J�N��Qshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/action.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  class DependencyGraph
    # An action that modifies a {DependencyGraph} that is reversible.
    # @abstract
    class Action
      # rubocop:disable Lint/UnusedMethodArgument

      # @return [Symbol] The name of the action.
      def self.action_name
        raise 'Abstract'
      end

      # Performs the action on the given graph.
      # @param  [DependencyGraph] graph the graph to perform the action on.
      # @return [Void]
      def up(graph)
        raise 'Abstract'
      end

      # Reverses the action on the given graph.
      # @param  [DependencyGraph] graph the graph to reverse the action on.
      # @return [Void]
      def down(graph)
        raise 'Abstract'
      end

      # @return [Action,Nil] The previous action
      attr_accessor :previous

      # @return [Action,Nil] The next action
      attr_accessor :next
    end
  end
end
PK)J[�19�DDQshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rbnu�[���# frozen_string_literal: true

module Gem::Molinillo
  class DependencyGraph
    # A vertex in a {DependencyGraph} that encapsulates a {#name} and a
    # {#payload}
    class Vertex
      # @return [String] the name of the vertex
      attr_accessor :name

      # @return [Object] the payload the vertex holds
      attr_accessor :payload

      # @return [Array<Object>] the explicit requirements that required
      #   this vertex
      attr_reader :explicit_requirements

      # @return [Boolean] whether the vertex is considered a root vertex
      attr_accessor :root
      alias root? root

      # Initializes a vertex with the given name and payload.
      # @param [String] name see {#name}
      # @param [Object] payload see {#payload}
      def initialize(name, payload)
        @name = name.frozen? ? name : name.dup.freeze
        @payload = payload
        @explicit_requirements = []
        @outgoing_edges = []
        @incoming_edges = []
      end

      # @return [Array<Object>] all of the requirements that required
      #   this vertex
      def requirements
        (incoming_edges.map(&:requirement) + explicit_requirements).uniq
      end

      # @return [Array<Edge>] the edges of {#graph} that have `self` as their
      #   {Edge#origin}
      attr_accessor :outgoing_edges

      # @return [Array<Edge>] the edges of {#graph} that have `self` as their
      #   {Edge#destination}
      attr_accessor :incoming_edges

      # @return [Array<Vertex>] the vertices of {#graph} that have an edge with
      #   `self` as their {Edge#destination}
      def predecessors
        incoming_edges.map(&:origin)
      end

      # @return [Set<Vertex>] the vertices of {#graph} where `self` is a
      #   {#descendent?}
      def recursive_predecessors
        _recursive_predecessors
      end

      # @param [Set<Vertex>] vertices the set to add the predecessors to
      # @return [Set<Vertex>] the vertices of {#graph} where `self` is a
      #   {#descendent?}
      def _recursive_predecessors(vertices = new_vertex_set)
        incoming_edges.each do |edge|
          vertex = edge.origin
          next unless vertices.add?(vertex)
          vertex._recursive_predecessors(vertices)
        end

        vertices
      end
      protected :_recursive_predecessors

      # @return [Array<Vertex>] the vertices of {#graph} that have an edge with
      #   `self` as their {Edge#origin}
      def successors
        outgoing_edges.map(&:destination)
      end

      # @return [Set<Vertex>] the vertices of {#graph} where `self` is an
      #   {#ancestor?}
      def recursive_successors
        _recursive_successors
      end

      # @param [Set<Vertex>] vertices the set to add the successors to
      # @return [Set<Vertex>] the vertices of {#graph} where `self` is an
      #   {#ancestor?}
      def _recursive_successors(vertices = new_vertex_set)
        outgoing_edges.each do |edge|
          vertex = edge.destination
          next unless vertices.add?(vertex)
          vertex._recursive_successors(vertices)
        end

        vertices
      end
      protected :_recursive_successors

      # @return [String] a string suitable for debugging
      def inspect
        "#{self.class}:#{name}(#{payload.inspect})"
      end

      # @return [Boolean] whether the two vertices are equal, determined
      #   by a recursive traversal of each {Vertex#successors}
      def ==(other)
        return true if equal?(other)
        shallow_eql?(other) &&
          successors.to_set == other.successors.to_set
      end

      # @param  [Vertex] other the other vertex to compare to
      # @return [Boolean] whether the two vertices are equal, determined
      #   solely by {#name} and {#payload} equality
      def shallow_eql?(other)
        return true if equal?(other)
        other &&
          name == other.name &&
          payload == other.payload
      end

      alias eql? ==

      # @return [Fixnum] a hash for the vertex based upon its {#name}
      def hash
        name.hash
      end

      # Is there a path from `self` to `other` following edges in the
      # dependency graph?
      # @return whether there is a path following edges within this {#graph}
      def path_to?(other)
        _path_to?(other)
      end

      alias descendent? path_to?

      # @param [Vertex] other the vertex to check if there's a path to
      # @param [Set<Vertex>] visited the vertices of {#graph} that have been visited
      # @return [Boolean] whether there is a path to `other` from `self`
      def _path_to?(other, visited = new_vertex_set)
        return false unless visited.add?(self)
        return true if equal?(other)
        successors.any? { |v| v._path_to?(other, visited) }
      end
      protected :_path_to?

      # Is there a path from `other` to `self` following edges in the
      # dependency graph?
      # @return whether there is a path following edges within this {#graph}
      def ancestor?(other)
        other.path_to?(self)
      end

      alias is_reachable_from? ancestor?

      def new_vertex_set
        require 'set'
        Set.new
      end
      private :new_vertex_set
    end
  end
end
PK)J[��?__Ushare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Gem::Molinillo
  class DependencyGraph
    # @!visibility private
    # (see DependencyGraph#add_vertex)
    class AddVertex < Action # :nodoc:
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :add_vertex
      end

      # (see Action#up)
      def up(graph)
        if existing = graph.vertices[name]
          @existing_payload = existing.payload
          @existing_root = existing.root
        end
        vertex = existing || Vertex.new(name, payload)
        graph.vertices[vertex.name] = vertex
        vertex.payload ||= payload
        vertex.root ||= root
        vertex
      end

      # (see Action#down)
      def down(graph)
        if defined?(@existing_payload)
          vertex = graph.vertices[name]
          vertex.payload = @existing_payload
          vertex.root = @existing_root
        else
          graph.vertices.delete(name)
        end
      end

      # @!group AddVertex

      # @return [String] the name of the vertex
      attr_reader :name

      # @return [Object] the payload for the vertex
      attr_reader :payload

      # @return [Boolean] whether the vertex is root or not
      attr_reader :root

      # Initialize an action to add a vertex to a dependency graph
      # @param [String] name the name of the vertex
      # @param [Object] payload the payload for the vertex
      # @param [Boolean] root whether the vertex is root or not
      def initialize(name, payload, root)
        @name = name
        @payload = payload
        @root = root
      end
    end
  end
end
PK)J[N�讟�Nshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/tag.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Gem::Molinillo
  class DependencyGraph
    # @!visibility private
    # @see DependencyGraph#tag
    class Tag < Action
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :tag
      end

      # (see Action#up)
      def up(graph)
      end

      # (see Action#down)
      def down(graph)
      end

      # @!group Tag

      # @return [Object] An opaque tag
      attr_reader :tag

      # Initialize an action to tag a state of a dependency graph
      # @param [Object] tag an opaque tag
      def initialize(tag)
        @tag = tag
      end
    end
  end
end
PK)J[U�=�Vshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Gem::Molinillo
  class DependencyGraph
    # @!visibility private
    # (see DependencyGraph#delete_edge)
    class DeleteEdge < Action
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :delete_edge
      end

      # (see Action#up)
      def up(graph)
        edge = make_edge(graph)
        edge.origin.outgoing_edges.delete(edge)
        edge.destination.incoming_edges.delete(edge)
      end

      # (see Action#down)
      def down(graph)
        edge = make_edge(graph)
        edge.origin.outgoing_edges << edge
        edge.destination.incoming_edges << edge
        edge
      end

      # @!group DeleteEdge

      # @return [String] the name of the origin of the edge
      attr_reader :origin_name

      # @return [String] the name of the destination of the edge
      attr_reader :destination_name

      # @return [Object] the requirement that the edge represents
      attr_reader :requirement

      # @param  [DependencyGraph] graph the graph to find vertices from
      # @return [Edge] The edge this action adds
      def make_edge(graph)
        Edge.new(
          graph.vertex_named(origin_name),
          graph.vertex_named(destination_name),
          requirement
        )
      end

      # Initialize an action to add an edge to a dependency graph
      # @param [String] origin_name the name of the origin of the edge
      # @param [String] destination_name the name of the destination of the edge
      # @param [Object] requirement the requirement that the edge represents
      def initialize(origin_name, destination_name, requirement)
        @origin_name = origin_name
        @destination_name = destination_name
        @requirement = requirement
      end
    end
  end
end
PK)J[f�gNshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/log.rbnu�[���# frozen_string_literal: true

require_relative 'add_edge_no_circular'
require_relative 'add_vertex'
require_relative 'delete_edge'
require_relative 'detach_vertex_named'
require_relative 'set_payload'
require_relative 'tag'

module Gem::Molinillo
  class DependencyGraph
    # A log for dependency graph actions
    class Log
      # Initializes an empty log
      def initialize
        @current_action = @first_action = nil
      end

      # @!macro [new] action
      #   {include:DependencyGraph#$0}
      #   @param [Graph] graph the graph to perform the action on
      #   @param (see DependencyGraph#$0)
      #   @return (see DependencyGraph#$0)

      # @macro action
      def tag(graph, tag)
        push_action(graph, Tag.new(tag))
      end

      # @macro action
      def add_vertex(graph, name, payload, root)
        push_action(graph, AddVertex.new(name, payload, root))
      end

      # @macro action
      def detach_vertex_named(graph, name)
        push_action(graph, DetachVertexNamed.new(name))
      end

      # @macro action
      def add_edge_no_circular(graph, origin, destination, requirement)
        push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement))
      end

      # {include:DependencyGraph#delete_edge}
      # @param [Graph] graph the graph to perform the action on
      # @param [String] origin_name
      # @param [String] destination_name
      # @param [Object] requirement
      # @return (see DependencyGraph#delete_edge)
      def delete_edge(graph, origin_name, destination_name, requirement)
        push_action(graph, DeleteEdge.new(origin_name, destination_name, requirement))
      end

      # @macro action
      def set_payload(graph, name, payload)
        push_action(graph, SetPayload.new(name, payload))
      end

      # Pops the most recent action from the log and undoes the action
      # @param [DependencyGraph] graph
      # @return [Action] the action that was popped off the log
      def pop!(graph)
        return unless action = @current_action
        unless @current_action = action.previous
          @first_action = nil
        end
        action.down(graph)
        action
      end

      extend Enumerable

      # @!visibility private
      # Enumerates each action in the log
      # @yield [Action]
      def each
        return enum_for unless block_given?
        action = @first_action
        loop do
          break unless action
          yield action
          action = action.next
        end
        self
      end

      # @!visibility private
      # Enumerates each action in the log in reverse order
      # @yield [Action]
      def reverse_each
        return enum_for(:reverse_each) unless block_given?
        action = @current_action
        loop do
          break unless action
          yield action
          action = action.previous
        end
        self
      end

      # @macro action
      def rewind_to(graph, tag)
        loop do
          action = pop!(graph)
          raise "No tag #{tag.inspect} found" unless action
          break if action.class.action_name == :tag && action.tag == tag
        end
      end

      private

      # Adds the given action to the log, running the action
      # @param [DependencyGraph] graph
      # @param [Action] action
      # @return The value returned by `action.up`
      def push_action(graph, action)
        action.previous = @current_action
        @current_action.next = action if @current_action
        @current_action = action
        @first_action ||= action
        action.up(graph)
      end
    end
  end
end
PK)J[��8��^share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Gem::Molinillo
  class DependencyGraph
    # @!visibility private
    # @see DependencyGraph#detach_vertex_named
    class DetachVertexNamed < Action
      # @!group Action

      # (see Action#name)
      def self.action_name
        :add_vertex
      end

      # (see Action#up)
      def up(graph)
        return [] unless @vertex = graph.vertices.delete(name)

        removed_vertices = [@vertex]
        @vertex.outgoing_edges.each do |e|
          v = e.destination
          v.incoming_edges.delete(e)
          if !v.root? && v.incoming_edges.empty?
            removed_vertices.concat graph.detach_vertex_named(v.name)
          end
        end

        @vertex.incoming_edges.each do |e|
          v = e.origin
          v.outgoing_edges.delete(e)
        end

        removed_vertices
      end

      # (see Action#down)
      def down(graph)
        return unless @vertex
        graph.vertices[@vertex.name] = @vertex
        @vertex.outgoing_edges.each do |e|
          e.destination.incoming_edges << e
        end
        @vertex.incoming_edges.each do |e|
          e.origin.outgoing_edges << e
        end
      end

      # @!group DetachVertexNamed

      # @return [String] the name of the vertex to detach
      attr_reader :name

      # Initialize an action to detach a vertex from a dependency graph
      # @param [String] name the name of the vertex to detach
      def initialize(name)
        @name = name
      end
    end
  end
end
PK)J[N��kk_share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Gem::Molinillo
  class DependencyGraph
    # @!visibility private
    # (see DependencyGraph#add_edge_no_circular)
    class AddEdgeNoCircular < Action
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :add_vertex
      end

      # (see Action#up)
      def up(graph)
        edge = make_edge(graph)
        edge.origin.outgoing_edges << edge
        edge.destination.incoming_edges << edge
        edge
      end

      # (see Action#down)
      def down(graph)
        edge = make_edge(graph)
        delete_first(edge.origin.outgoing_edges, edge)
        delete_first(edge.destination.incoming_edges, edge)
      end

      # @!group AddEdgeNoCircular

      # @return [String] the name of the origin of the edge
      attr_reader :origin

      # @return [String] the name of the destination of the edge
      attr_reader :destination

      # @return [Object] the requirement that the edge represents
      attr_reader :requirement

      # @param  [DependencyGraph] graph the graph to find vertices from
      # @return [Edge] The edge this action adds
      def make_edge(graph)
        Edge.new(graph.vertex_named(origin), graph.vertex_named(destination), requirement)
      end

      # Initialize an action to add an edge to a dependency graph
      # @param [String] origin the name of the origin of the edge
      # @param [String] destination the name of the destination of the edge
      # @param [Object] requirement the requirement that the edge represents
      def initialize(origin, destination, requirement)
        @origin = origin
        @destination = destination
        @requirement = requirement
      end

      private

      def delete_first(array, item)
        return unless index = array.index(item)
        array.delete_at(index)
      end
    end
  end
end
PK)J[�~R� � Jshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph.rbnu�[���# frozen_string_literal: true

require_relative '../../../../vendored_tsort'

require_relative 'dependency_graph/log'
require_relative 'dependency_graph/vertex'

module Gem::Molinillo
  # A directed acyclic graph that is tuned to hold named dependencies
  class DependencyGraph
    include Enumerable

    # Enumerates through the vertices of the graph.
    # @return [Array<Vertex>] The graph's vertices.
    def each
      return vertices.values.each unless block_given?
      vertices.values.each { |v| yield v }
    end

    include Gem::TSort

    # @!visibility private
    alias tsort_each_node each

    # @!visibility private
    def tsort_each_child(vertex, &block)
      vertex.successors.each(&block)
    end

    # Topologically sorts the given vertices.
    # @param [Enumerable<Vertex>] vertices the vertices to be sorted, which must
    #   all belong to the same graph.
    # @return [Array<Vertex>] The sorted vertices.
    def self.tsort(vertices)
      Gem::TSort.tsort(
        lambda { |b| vertices.each(&b) },
        lambda { |v, &b| (v.successors & vertices).each(&b) }
      )
    end

    # A directed edge of a {DependencyGraph}
    # @attr [Vertex] origin The origin of the directed edge
    # @attr [Vertex] destination The destination of the directed edge
    # @attr [Object] requirement The requirement the directed edge represents
    Edge = Struct.new(:origin, :destination, :requirement)

    # @return [{String => Vertex}] the vertices of the dependency graph, keyed
    #   by {Vertex#name}
    attr_reader :vertices

    # @return [Log] the op log for this graph
    attr_reader :log

    # Initializes an empty dependency graph
    def initialize
      @vertices = {}
      @log = Log.new
    end

    # Tags the current state of the dependency as the given tag
    # @param  [Object] tag an opaque tag for the current state of the graph
    # @return [Void]
    def tag(tag)
      log.tag(self, tag)
    end

    # Rewinds the graph to the state tagged as `tag`
    # @param  [Object] tag the tag to rewind to
    # @return [Void]
    def rewind_to(tag)
      log.rewind_to(self, tag)
    end

    # Initializes a copy of a {DependencyGraph}, ensuring that all {#vertices}
    # are properly copied.
    # @param [DependencyGraph] other the graph to copy.
    def initialize_copy(other)
      super
      @vertices = {}
      @log = other.log.dup
      traverse = lambda do |new_v, old_v|
        return if new_v.outgoing_edges.size == old_v.outgoing_edges.size
        old_v.outgoing_edges.each do |edge|
          destination = add_vertex(edge.destination.name, edge.destination.payload)
          add_edge_no_circular(new_v, destination, edge.requirement)
          traverse.call(destination, edge.destination)
        end
      end
      other.vertices.each do |name, vertex|
        new_vertex = add_vertex(name, vertex.payload, vertex.root?)
        new_vertex.explicit_requirements.replace(vertex.explicit_requirements)
        traverse.call(new_vertex, vertex)
      end
    end

    # @return [String] a string suitable for debugging
    def inspect
      "#{self.class}:#{vertices.values.inspect}"
    end

    # @param [Hash] options options for dot output.
    # @return [String] Returns a dot format representation of the graph
    def to_dot(options = {})
      edge_label = options.delete(:edge_label)
      raise ArgumentError, "Unknown options: #{options.keys}" unless options.empty?

      dot_vertices = []
      dot_edges = []
      vertices.each do |n, v|
        dot_vertices << "  #{n} [label=\"{#{n}|#{v.payload}}\"]"
        v.outgoing_edges.each do |e|
          label = edge_label ? edge_label.call(e) : e.requirement
          dot_edges << "  #{e.origin.name} -> #{e.destination.name} [label=#{label.to_s.dump}]"
        end
      end

      dot_vertices.uniq!
      dot_vertices.sort!
      dot_edges.uniq!
      dot_edges.sort!

      dot = dot_vertices.unshift('digraph G {').push('') + dot_edges.push('}')
      dot.join("\n")
    end

    # @param [DependencyGraph] other
    # @return [Boolean] whether the two dependency graphs are equal, determined
    #   by a recursive traversal of each {#root_vertices} and its
    #   {Vertex#successors}
    def ==(other)
      return false unless other
      return true if equal?(other)
      vertices.each do |name, vertex|
        other_vertex = other.vertex_named(name)
        return false unless other_vertex
        return false unless vertex.payload == other_vertex.payload
        return false unless other_vertex.successors.to_set == vertex.successors.to_set
      end
    end

    # @param [String] name
    # @param [Object] payload
    # @param [Array<String>] parent_names
    # @param [Object] requirement the requirement that is requiring the child
    # @return [void]
    def add_child_vertex(name, payload, parent_names, requirement)
      root = !parent_names.delete(nil) { true }
      vertex = add_vertex(name, payload, root)
      vertex.explicit_requirements << requirement if root
      parent_names.each do |parent_name|
        parent_vertex = vertex_named(parent_name)
        add_edge(parent_vertex, vertex, requirement)
      end
      vertex
    end

    # Adds a vertex with the given name, or updates the existing one.
    # @param [String] name
    # @param [Object] payload
    # @return [Vertex] the vertex that was added to `self`
    def add_vertex(name, payload, root = false)
      log.add_vertex(self, name, payload, root)
    end

    # Detaches the {#vertex_named} `name` {Vertex} from the graph, recursively
    # removing any non-root vertices that were orphaned in the process
    # @param [String] name
    # @return [Array<Vertex>] the vertices which have been detached
    def detach_vertex_named(name)
      log.detach_vertex_named(self, name)
    end

    # @param [String] name
    # @return [Vertex,nil] the vertex with the given name
    def vertex_named(name)
      vertices[name]
    end

    # @param [String] name
    # @return [Vertex,nil] the root vertex with the given name
    def root_vertex_named(name)
      vertex = vertex_named(name)
      vertex if vertex && vertex.root?
    end

    # Adds a new {Edge} to the dependency graph
    # @param [Vertex] origin
    # @param [Vertex] destination
    # @param [Object] requirement the requirement that this edge represents
    # @return [Edge] the added edge
    def add_edge(origin, destination, requirement)
      if destination.path_to?(origin)
        raise CircularDependencyError.new(path(destination, origin))
      end
      add_edge_no_circular(origin, destination, requirement)
    end

    # Deletes an {Edge} from the dependency graph
    # @param [Edge] edge
    # @return [Void]
    def delete_edge(edge)
      log.delete_edge(self, edge.origin.name, edge.destination.name, edge.requirement)
    end

    # Sets the payload of the vertex with the given name
    # @param [String] name the name of the vertex
    # @param [Object] payload the payload
    # @return [Void]
    def set_payload(name, payload)
      log.set_payload(self, name, payload)
    end

    private

    # Adds a new {Edge} to the dependency graph without checking for
    # circularity.
    # @param (see #add_edge)
    # @return (see #add_edge)
    def add_edge_no_circular(origin, destination, requirement)
      log.add_edge_no_circular(self, origin.name, destination.name, requirement)
    end

    # Returns the path between two vertices
    # @raise [ArgumentError] if there is no path between the vertices
    # @param [Vertex] from
    # @param [Vertex] to
    # @return [Array<Vertex>] the shortest path from `from` to `to`
    def path(from, to)
      distances = Hash.new(vertices.size + 1)
      distances[from.name] = 0
      predecessors = {}
      each do |vertex|
        vertex.successors.each do |successor|
          if distances[successor.name] > distances[vertex.name] + 1
            distances[successor.name] = distances[vertex.name] + 1
            predecessors[successor] = vertex
          end
        end
      end

      path = [to]
      while before = predecessors[to]
        path << before
        to = before
        break if to == from
      end

      unless path.last.equal?(from)
        raise ArgumentError, "There is no path from #{from.name} to #{to.name}"
      end

      path.reverse
    end
  end
end
PK)J[�,��QQ9share/rubygems/rubygems/vendor/molinillo/lib/molinillo.rbnu�[���# frozen_string_literal: true

require_relative 'molinillo/gem_metadata'
require_relative 'molinillo/errors'
require_relative 'molinillo/resolver'
require_relative 'molinillo/modules/ui'
require_relative 'molinillo/modules/specification_provider'

# Gem::Molinillo is a generic dependency resolution algorithm.
module Gem::Molinillo
end
PK)J[�Pyjj2share/rubygems/rubygems/vendor/uri/lib/uri/ldap.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# Author::
#  Takaaki Tateishi <ttate@jaist.ac.jp>
#  Akira Yamada <akira@ruby-lang.org>
# License::
#   Gem::URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada.
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'generic'

module Gem::URI

  #
  # LDAP Gem::URI SCHEMA (described in RFC2255).
  #--
  # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]]
  #++
  class LDAP < Generic

    # A Default port of 389 for Gem::URI::LDAP.
    DEFAULT_PORT = 389

    # An Array of the available components for Gem::URI::LDAP.
    COMPONENT = [
      :scheme,
      :host, :port,
      :dn,
      :attributes,
      :scope,
      :filter,
      :extensions,
    ].freeze

    # Scopes available for the starting point.
    #
    # * SCOPE_BASE - the Base DN
    # * SCOPE_ONE  - one level under the Base DN, not including the base DN and
    #   not including any entries under this
    # * SCOPE_SUB  - subtrees, all entries at all levels
    #
    SCOPE = [
      SCOPE_ONE = 'one',
      SCOPE_SUB = 'sub',
      SCOPE_BASE = 'base',
    ].freeze

    #
    # == Description
    #
    # Creates a new Gem::URI::LDAP object from components, with syntax checking.
    #
    # The components accepted are host, port, dn, attributes,
    # scope, filter, and extensions.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, port, dn, attributes, scope, filter, extensions]</code>.
    #
    # Example:
    #
    #     uri = Gem::URI::LDAP.build({:host => 'ldap.example.com',
    #       :dn => '/dc=example'})
    #
    #     uri = Gem::URI::LDAP.build(["ldap.example.com", nil,
    #       "/dc=example;dc=com", "query", nil, nil, nil])
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)

      if tmp[:dn]
        tmp[:path] = tmp[:dn]
      end

      query = []
      [:extensions, :filter, :scope, :attributes].collect do |x|
        next if !tmp[x] && query.size == 0
        query.unshift(tmp[x])
      end

      tmp[:query] = query.join('?')

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Gem::URI::LDAP object from generic Gem::URI components as per
    # RFC 2396. No LDAP-specific syntax checking is performed.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    # Example:
    #
    #     uri = Gem::URI::LDAP.new("ldap", nil, "ldap.example.com", nil, nil,
    #       "/dc=example;dc=com", nil, "query", nil)
    #
    # See also Gem::URI::Generic.new.
    #
    def initialize(*arg)
      super(*arg)

      if @fragment
        raise InvalidURIError, 'bad LDAP URL'
      end

      parse_dn
      parse_query
    end

    # Private method to cleanup +dn+ from using the +path+ component attribute.
    def parse_dn
      raise InvalidURIError, 'bad LDAP URL' unless @path
      @dn = @path[1..-1]
    end
    private :parse_dn

    # Private method to cleanup +attributes+, +scope+, +filter+, and +extensions+
    # from using the +query+ component attribute.
    def parse_query
      @attributes = nil
      @scope      = nil
      @filter     = nil
      @extensions = nil

      if @query
        attrs, scope, filter, extensions = @query.split('?')

        @attributes = attrs if attrs && attrs.size > 0
        @scope      = scope if scope && scope.size > 0
        @filter     = filter if filter && filter.size > 0
        @extensions = extensions if extensions && extensions.size > 0
      end
    end
    private :parse_query

    # Private method to assemble +query+ from +attributes+, +scope+, +filter+, and +extensions+.
    def build_path_query
      @path = '/' + @dn

      query = []
      [@extensions, @filter, @scope, @attributes].each do |x|
        next if !x && query.size == 0
        query.unshift(x)
      end
      @query = query.join('?')
    end
    private :build_path_query

    # Returns dn.
    def dn
      @dn
    end

    # Private setter for dn +val+.
    def set_dn(val)
      @dn = val
      build_path_query
      @dn
    end
    protected :set_dn

    # Setter for dn +val+.
    def dn=(val)
      set_dn(val)
      val
    end

    # Returns attributes.
    def attributes
      @attributes
    end

    # Private setter for attributes +val+.
    def set_attributes(val)
      @attributes = val
      build_path_query
      @attributes
    end
    protected :set_attributes

    # Setter for attributes +val+.
    def attributes=(val)
      set_attributes(val)
      val
    end

    # Returns scope.
    def scope
      @scope
    end

    # Private setter for scope +val+.
    def set_scope(val)
      @scope = val
      build_path_query
      @scope
    end
    protected :set_scope

    # Setter for scope +val+.
    def scope=(val)
      set_scope(val)
      val
    end

    # Returns filter.
    def filter
      @filter
    end

    # Private setter for filter +val+.
    def set_filter(val)
      @filter = val
      build_path_query
      @filter
    end
    protected :set_filter

    # Setter for filter +val+.
    def filter=(val)
      set_filter(val)
      val
    end

    # Returns extensions.
    def extensions
      @extensions
    end

    # Private setter for extensions +val+.
    def set_extensions(val)
      @extensions = val
      build_path_query
      @extensions
    end
    protected :set_extensions

    # Setter for extensions +val+.
    def extensions=(val)
      set_extensions(val)
      val
    end

    # Checks if Gem::URI has a path.
    # For Gem::URI::LDAP this will return +false+.
    def hierarchical?
      false
    end
  end

  register_scheme 'LDAP', LDAP
end
PK)J[�_�3share/rubygems/rubygems/vendor/uri/lib/uri/ldaps.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'ldap'

module Gem::URI

  # The default port for LDAPS URIs is 636, and the scheme is 'ldaps:' rather
  # than 'ldap:'. Other than that, LDAPS URIs are identical to LDAP URIs;
  # see Gem::URI::LDAP.
  class LDAPS < LDAP
    # A Default port of 636 for Gem::URI::LDAPS
    DEFAULT_PORT = 636
  end

  register_scheme 'LDAPS', LDAPS
end
PK)J[g� |C�C�5share/rubygems/rubygems/vendor/uri/lib/uri/generic.rbnu�[���# frozen_string_literal: true

# = uri/generic.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'common'
autoload :IPSocket, 'socket'
autoload :IPAddr, 'ipaddr'

module Gem::URI

  #
  # Base class for all Gem::URI classes.
  # Implements generic Gem::URI syntax as per RFC 2396.
  #
  class Generic
    include Gem::URI

    #
    # A Default port of nil for Gem::URI::Generic.
    #
    DEFAULT_PORT = nil

    #
    # Returns default port.
    #
    def self.default_port
      self::DEFAULT_PORT
    end

    #
    # Returns default port.
    #
    def default_port
      self.class.default_port
    end

    #
    # An Array of the available components for Gem::URI::Generic.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port, :registry,
      :path, :opaque,
      :query,
      :fragment
    ].freeze

    #
    # Components of the Gem::URI in the order.
    #
    def self.component
      self::COMPONENT
    end

    USE_REGISTRY = false # :nodoc:

    def self.use_registry # :nodoc:
      self::USE_REGISTRY
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # At first, tries to create a new Gem::URI::Generic instance using
    # Gem::URI::Generic::build. But, if exception Gem::URI::InvalidComponentError is raised,
    # then it does Gem::URI::Escape.escape all Gem::URI components and tries again.
    #
    def self.build2(args)
      begin
        return self.build(args)
      rescue InvalidComponentError
        if args.kind_of?(Array)
          return self.build(args.collect{|x|
            if x.is_a?(String)
              Gem::URI::RFC2396_PARSER.escape(x)
            else
              x
            end
          })
        elsif args.kind_of?(Hash)
          tmp = {}
          args.each do |key, value|
            tmp[key] = if value
                Gem::URI::RFC2396_PARSER.escape(value)
              else
                value
              end
          end
          return self.build(tmp)
        end
      end
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # Creates a new Gem::URI::Generic instance from components of Gem::URI::Generic
    # with check.  Components are: scheme, userinfo, host, port, registry, path,
    # opaque, query, and fragment. You can provide arguments either by an Array or a Hash.
    # See ::new for hash keys to use or for order of array items.
    #
    def self.build(args)
      if args.kind_of?(Array) &&
          args.size == ::Gem::URI::Generic::COMPONENT.size
        tmp = args.dup
      elsif args.kind_of?(Hash)
        tmp = ::Gem::URI::Generic::COMPONENT.collect do |c|
          if args.include?(c)
            args[c]
          else
            nil
          end
        end
      else
        component = self.class.component rescue ::Gem::URI::Generic::COMPONENT
        raise ArgumentError,
        "expected Array of or Hash of components of #{self.class} (#{component.join(', ')})"
      end

      tmp << nil
      tmp << true
      return self.new(*tmp)
    end

    #
    # == Args
    #
    # +scheme+::
    #   Protocol scheme, i.e. 'http','ftp','mailto' and so on.
    # +userinfo+::
    #   User name and password, i.e. 'sdmitry:bla'.
    # +host+::
    #   Server host name.
    # +port+::
    #   Server port.
    # +registry+::
    #   Registry of naming authorities.
    # +path+::
    #   Path on server.
    # +opaque+::
    #   Opaque part.
    # +query+::
    #   Query data.
    # +fragment+::
    #   Part of the Gem::URI after '#' character.
    # +parser+::
    #   Parser for internal use [Gem::URI::DEFAULT_PARSER by default].
    # +arg_check+::
    #   Check arguments [false by default].
    #
    # == Description
    #
    # Creates a new Gem::URI::Generic instance from ``generic'' components without check.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = DEFAULT_PARSER,
                   arg_check = false)
      @scheme = nil
      @user = nil
      @password = nil
      @host = nil
      @port = nil
      @path = nil
      @query = nil
      @opaque = nil
      @fragment = nil
      @parser = parser == DEFAULT_PARSER ? nil : parser

      if arg_check
        self.scheme = scheme
        self.userinfo = userinfo
        self.hostname = host
        self.port = port
        self.path = path
        self.query = query
        self.opaque = opaque
        self.fragment = fragment
      else
        self.set_scheme(scheme)
        self.set_userinfo(userinfo)
        self.set_host(host)
        self.set_port(port)
        self.set_path(path)
        self.query = query
        self.set_opaque(opaque)
        self.fragment=(fragment)
      end
      if registry
        raise InvalidURIError,
          "the scheme #{@scheme} does not accept registry part: #{registry} (or bad hostname?)"
      end

      @scheme&.freeze
      self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)
      self.set_port(self.default_port) if self.default_port && !@port
    end

    #
    # Returns the scheme component of the Gem::URI.
    #
    #   Gem::URI("http://foo/bar/baz").scheme #=> "http"
    #
    attr_reader :scheme

    # Returns the host component of the Gem::URI.
    #
    #   Gem::URI("http://foo/bar/baz").host #=> "foo"
    #
    # It returns nil if no host component exists.
    #
    #   Gem::URI("mailto:foo@example.org").host #=> nil
    #
    # The component does not contain the port number.
    #
    #   Gem::URI("http://foo:8080/bar/baz").host #=> "foo"
    #
    # Since IPv6 addresses are wrapped with brackets in URIs,
    # this method returns IPv6 addresses wrapped with brackets.
    # This form is not appropriate to pass to socket methods such as TCPSocket.open.
    # If unwrapped host names are required, use the #hostname method.
    #
    #   Gem::URI("http://[::1]/bar/baz").host     #=> "[::1]"
    #   Gem::URI("http://[::1]/bar/baz").hostname #=> "::1"
    #
    attr_reader :host

    # Returns the port component of the Gem::URI.
    #
    #   Gem::URI("http://foo/bar/baz").port      #=> 80
    #   Gem::URI("http://foo:8080/bar/baz").port #=> 8080
    #
    attr_reader :port

    def registry # :nodoc:
      nil
    end

    # Returns the path component of the Gem::URI.
    #
    #   Gem::URI("http://foo/bar/baz").path #=> "/bar/baz"
    #
    attr_reader :path

    # Returns the query component of the Gem::URI.
    #
    #   Gem::URI("http://foo/bar/baz?search=FooBar").query #=> "search=FooBar"
    #
    attr_reader :query

    # Returns the opaque part of the Gem::URI.
    #
    #   Gem::URI("mailto:foo@example.org").opaque #=> "foo@example.org"
    #   Gem::URI("http://foo/bar/baz").opaque     #=> nil
    #
    # The portion of the path that does not make use of the slash '/'.
    # The path typically refers to an absolute path or an opaque part.
    # (See RFC2396 Section 3 and 5.2.)
    #
    attr_reader :opaque

    # Returns the fragment component of the Gem::URI.
    #
    #   Gem::URI("http://foo/bar/baz?search=FooBar#ponies").fragment #=> "ponies"
    #
    attr_reader :fragment

    # Returns the parser to be used.
    #
    # Unless a Gem::URI::Parser is defined, DEFAULT_PARSER is used.
    #
    def parser
      if !defined?(@parser) || !@parser
        DEFAULT_PARSER
      else
        @parser || DEFAULT_PARSER
      end
    end

    # Replaces self by other Gem::URI object.
    #
    def replace!(oth)
      if self.class != oth.class
        raise ArgumentError, "expected #{self.class} object"
      end

      component.each do |c|
        self.__send__("#{c}=", oth.__send__(c))
      end
    end
    private :replace!

    #
    # Components of the Gem::URI in the order.
    #
    def component
      self.class.component
    end

    #
    # Checks the scheme +v+ component against the Gem::URI::Parser Regexp for :SCHEME.
    #
    def check_scheme(v)
      if v && parser.regexp[:SCHEME] !~ v
        raise InvalidComponentError,
          "bad component(expected scheme component): #{v}"
      end

      return true
    end
    private :check_scheme

    # Protected setter for the scheme component +v+.
    #
    # See also Gem::URI::Generic.scheme=.
    #
    def set_scheme(v)
      @scheme = v&.downcase
    end
    protected :set_scheme

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the scheme component +v+
    # (with validation).
    #
    # See also Gem::URI::Generic.check_scheme.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com")
    #   uri.scheme = "https"
    #   uri.to_s  #=> "https://my.example.com"
    #
    def scheme=(v)
      check_scheme(v)
      set_scheme(v)
      v
    end

    #
    # Checks the +user+ and +password+.
    #
    # If +password+ is not provided, then +user+ is
    # split, using Gem::URI::Generic.split_userinfo, to
    # pull +user+ and +password.
    #
    # See also Gem::URI::Generic.check_user, Gem::URI::Generic.check_password.
    #
    def check_userinfo(user, password = nil)
      if !password
        user, password = split_userinfo(user)
      end
      check_user(user)
      check_password(password, user)

      return true
    end
    private :check_userinfo

    #
    # Checks the user +v+ component for RFC2396 compliance
    # and against the Gem::URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_user(v)
      if @opaque
        raise InvalidURIError,
          "cannot set user with opaque"
      end

      return v unless v

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad component(expected userinfo component or user component): #{v}"
      end

      return true
    end
    private :check_user

    #
    # Checks the password +v+ component for RFC2396 compliance
    # and against the Gem::URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_password(v, user = @user)
      if @opaque
        raise InvalidURIError,
          "cannot set password with opaque"
      end
      return v unless v

      if !user
        raise InvalidURIError,
          "password component depends user component"
      end

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad password component"
      end

      return true
    end
    private :check_password

    #
    # Sets userinfo, argument is string like 'name:pass'.
    #
    def userinfo=(userinfo)
      if userinfo.nil?
        return nil
      end
      check_userinfo(*userinfo)
      set_userinfo(*userinfo)
      # returns userinfo
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +user+ component
    # (with validation).
    #
    # See also Gem::URI::Generic.check_user.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.user = "sam"
    #   uri.to_s  #=> "http://sam:V3ry_S3nsit1ve@my.example.com"
    #
    def user=(user)
      check_user(user)
      set_user(user)
      # returns user
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +password+ component
    # (with validation).
    #
    # See also Gem::URI::Generic.check_password.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.password = "V3ry_S3nsit1ve"
    #   uri.to_s  #=> "http://john:V3ry_S3nsit1ve@my.example.com"
    #
    def password=(password)
      check_password(password)
      set_password(password)
      # returns password
    end

    # Protected setter for the +user+ component, and +password+ if available
    # (with validation).
    #
    # See also Gem::URI::Generic.userinfo=.
    #
    def set_userinfo(user, password = nil)
      unless password
        user, password = split_userinfo(user)
      end
      @user     = user
      @password = password if password

      [@user, @password]
    end
    protected :set_userinfo

    # Protected setter for the user component +v+.
    #
    # See also Gem::URI::Generic.user=.
    #
    def set_user(v)
      set_userinfo(v, @password)
      v
    end
    protected :set_user

    # Protected setter for the password component +v+.
    #
    # See also Gem::URI::Generic.password=.
    #
    def set_password(v)
      @password = v
      # returns v
    end
    protected :set_password

    # Returns the userinfo +ui+ as <code>[user, password]</code>
    # if properly formatted as 'user:password'.
    def split_userinfo(ui)
      return nil, nil unless ui
      user, password = ui.split(':', 2)

      return user, password
    end
    private :split_userinfo

    # Escapes 'user:password' +v+ based on RFC 1738 section 3.1.
    def escape_userpass(v)
      parser.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/
    end
    private :escape_userpass

    # Returns the userinfo, either as 'user' or 'user:password'.
    def userinfo
      if @user.nil?
        nil
      elsif @password.nil?
        @user
      else
        @user + ':' + @password
      end
    end

    # Returns the user component (without Gem::URI decoding).
    def user
      @user
    end

    # Returns the password component (without Gem::URI decoding).
    def password
      @password
    end

    # Returns the user component after Gem::URI decoding.
    def decoded_user
      Gem::URI.decode_uri_component(@user) if @user
    end

    # Returns the password component after Gem::URI decoding.
    def decoded_password
      Gem::URI.decode_uri_component(@password) if @password
    end

    #
    # Checks the host +v+ component for RFC2396 compliance
    # and against the Gem::URI::Parser Regexp for :HOST.
    #
    # Can not have a registry or opaque component defined,
    # with a host component defined.
    #
    def check_host(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "cannot set host with registry or opaque"
      elsif parser.regexp[:HOST] !~ v
        raise InvalidComponentError,
          "bad component(expected host component): #{v}"
      end

      return true
    end
    private :check_host

    # Protected setter for the host component +v+.
    #
    # See also Gem::URI::Generic.host=.
    #
    def set_host(v)
      @host = v
    end
    protected :set_host

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the host component +v+
    # (with validation).
    #
    # See also Gem::URI::Generic.check_host.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com")
    #   uri.host = "foo.com"
    #   uri.to_s  #=> "http://foo.com"
    #
    def host=(v)
      check_host(v)
      set_host(v)
      v
    end

    # Extract the host part of the Gem::URI and unwrap brackets for IPv6 addresses.
    #
    # This method is the same as Gem::URI::Generic#host except
    # brackets for IPv6 (and future IP) addresses are removed.
    #
    #   uri = Gem::URI("http://[::1]/bar")
    #   uri.hostname      #=> "::1"
    #   uri.host          #=> "[::1]"
    #
    def hostname
      v = self.host
      v&.start_with?('[') && v.end_with?(']') ? v[1..-2] : v
    end

    # Sets the host part of the Gem::URI as the argument with brackets for IPv6 addresses.
    #
    # This method is the same as Gem::URI::Generic#host= except
    # the argument can be a bare IPv6 address.
    #
    #   uri = Gem::URI("http://foo/bar")
    #   uri.hostname = "::1"
    #   uri.to_s  #=> "http://[::1]/bar"
    #
    # If the argument seems to be an IPv6 address,
    # it is wrapped with brackets.
    #
    def hostname=(v)
      v = "[#{v}]" if !(v&.start_with?('[') && v&.end_with?(']')) && v&.index(':')
      self.host = v
    end

    #
    # Checks the port +v+ component for RFC2396 compliance
    # and against the Gem::URI::Parser Regexp for :PORT.
    #
    # Can not have a registry or opaque component defined,
    # with a port component defined.
    #
    def check_port(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "cannot set port with registry or opaque"
      elsif !v.kind_of?(Integer) && parser.regexp[:PORT] !~ v
        raise InvalidComponentError,
          "bad component(expected port component): #{v.inspect}"
      end

      return true
    end
    private :check_port

    # Protected setter for the port component +v+.
    #
    # See also Gem::URI::Generic.port=.
    #
    def set_port(v)
      v = v.empty? ? nil : v.to_i unless !v || v.kind_of?(Integer)
      @port = v
    end
    protected :set_port

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the port component +v+
    # (with validation).
    #
    # See also Gem::URI::Generic.check_port.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com")
    #   uri.port = 8080
    #   uri.to_s  #=> "http://my.example.com:8080"
    #
    def port=(v)
      check_port(v)
      set_port(v)
      port
    end

    def check_registry(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end
    private :check_registry

    def set_registry(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end
    protected :set_registry

    def registry=(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end

    #
    # Checks the path +v+ component for RFC2396 compliance
    # and against the Gem::URI::Parser Regexp
    # for :ABS_PATH and :REL_PATH.
    #
    # Can not have a opaque component defined,
    # with a path component defined.
    #
    def check_path(v)
      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if v && @opaque
        raise InvalidURIError,
          "path conflicts with opaque"
      end

      # If scheme is ftp, path may be relative.
      # See RFC 1738 section 3.2.2, and RFC 2396.
      if @scheme && @scheme != "ftp"
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected absolute path component): #{v}"
        end
      else
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v &&
           parser.regexp[:REL_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected relative path component): #{v}"
        end
      end

      return true
    end
    private :check_path

    # Protected setter for the path component +v+.
    #
    # See also Gem::URI::Generic.path=.
    #
    def set_path(v)
      @path = v
    end
    protected :set_path

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the path component +v+
    # (with validation).
    #
    # See also Gem::URI::Generic.check_path.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com/pub/files")
    #   uri.path = "/faq/"
    #   uri.to_s  #=> "http://my.example.com/faq/"
    #
    def path=(v)
      check_path(v)
      set_path(v)
      v
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the query component +v+.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com/?id=25")
    #   uri.query = "id=1"
    #   uri.to_s  #=> "http://my.example.com/?id=1"
    #
    def query=(v)
      return @query = nil unless v
      raise InvalidURIError, "query conflicts with opaque" if @opaque

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      raise InvalidURIError, "invalid percent escape: #{$1}" if /(%\H\H)/n.match(v)
      v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @query = v
    end

    #
    # Checks the opaque +v+ component for RFC2396 compliance and
    # against the Gem::URI::Parser Regexp for :OPAQUE.
    #
    # Can not have a host, port, user, or path component defined,
    # with an opaque component defined.
    #
    def check_opaque(v)
      return v unless v

      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if @host || @port || @user || @path  # userinfo = @user + ':' + @password
        raise InvalidURIError,
          "cannot set opaque with host, port, userinfo or path"
      elsif v && parser.regexp[:OPAQUE] !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      return true
    end
    private :check_opaque

    # Protected setter for the opaque component +v+.
    #
    # See also Gem::URI::Generic.opaque=.
    #
    def set_opaque(v)
      @opaque = v
    end
    protected :set_opaque

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the opaque component +v+
    # (with validation).
    #
    # See also Gem::URI::Generic.check_opaque.
    #
    def opaque=(v)
      check_opaque(v)
      set_opaque(v)
      v
    end

    #
    # Checks the fragment +v+ component against the Gem::URI::Parser Regexp for :FRAGMENT.
    #
    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the fragment component +v+
    # (with validation).
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com/?id=25#time=1305212049")
    #   uri.fragment = "time=1305212086"
    #   uri.to_s  #=> "http://my.example.com/?id=25#time=1305212086"
    #
    def fragment=(v)
      return @fragment = nil unless v

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @fragment = v
    end

    #
    # Returns true if Gem::URI is hierarchical.
    #
    # == Description
    #
    # Gem::URI has components listed in order of decreasing significance from left to right,
    # see RFC3986 https://www.rfc-editor.org/rfc/rfc3986 1.2.3.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com/")
    #   uri.hierarchical?
    #   #=> true
    #   uri = Gem::URI.parse("mailto:joe@example.com")
    #   uri.hierarchical?
    #   #=> false
    #
    def hierarchical?
      if @path
        true
      else
        false
      end
    end

    #
    # Returns true if Gem::URI has a scheme (e.g. http:// or https://) specified.
    #
    def absolute?
      if @scheme
        true
      else
        false
      end
    end
    alias absolute absolute?

    #
    # Returns true if Gem::URI does not have a scheme (e.g. http:// or https://) specified.
    #
    def relative?
      !absolute?
    end

    #
    # Returns an Array of the path split on '/'.
    #
    def split_path(path)
      path.split("/", -1)
    end
    private :split_path

    #
    # Merges a base path +base+, with relative path +rel+,
    # returns a modified base path.
    #
    def merge_path(base, rel)

      # RFC2396, Section 5.2, 5)
      # RFC2396, Section 5.2, 6)
      base_path = split_path(base)
      rel_path  = split_path(rel)

      # RFC2396, Section 5.2, 6), a)
      base_path << '' if base_path.last == '..'
      while i = base_path.index('..')
        base_path.slice!(i - 1, 2)
      end

      if (first = rel_path.first) and first.empty?
        base_path.clear
        rel_path.shift
      end

      # RFC2396, Section 5.2, 6), c)
      # RFC2396, Section 5.2, 6), d)
      rel_path.push('') if rel_path.last == '.' || rel_path.last == '..'
      rel_path.delete('.')

      # RFC2396, Section 5.2, 6), e)
      tmp = []
      rel_path.each do |x|
        if x == '..' &&
            !(tmp.empty? || tmp.last == '..')
          tmp.pop
        else
          tmp << x
        end
      end

      add_trailer_slash = !tmp.empty?
      if base_path.empty?
        base_path = [''] # keep '/' for root directory
      elsif add_trailer_slash
        base_path.pop
      end
      while x = tmp.shift
        if x == '..'
          # RFC2396, Section 4
          # a .. or . in an absolute path has no special meaning
          base_path.pop if base_path.size > 1
        else
          # if x == '..'
          #   valid absolute (but abnormal) path "/../..."
          # else
          #   valid absolute path
          # end
          base_path << x
          tmp.each {|t| base_path << t}
          add_trailer_slash = false
          break
        end
      end
      base_path.push('') if add_trailer_slash

      return base_path.join('/')
    end
    private :merge_path

    #
    # == Args
    #
    # +oth+::
    #    Gem::URI or String
    #
    # == Description
    #
    # Destructive form of #merge.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com")
    #   uri.merge!("/main.rbx?page=1")
    #   uri.to_s  # => "http://my.example.com/main.rbx?page=1"
    #
    def merge!(oth)
      t = merge(oth)
      if self == t
        nil
      else
        replace!(t)
        self
      end
    end

    #
    # == Args
    #
    # +oth+::
    #    Gem::URI or String
    #
    # == Description
    #
    # Merges two URIs.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com")
    #   uri.merge("/main.rbx?page=1")
    #   # => "http://my.example.com/main.rbx?page=1"
    #
    def merge(oth)
      rel = parser.__send__(:convert_to_uri, oth)

      if rel.absolute?
        #raise BadURIError, "both Gem::URI are absolute" if absolute?
        # hmm... should return oth for usability?
        return rel
      end

      unless self.absolute?
        raise BadURIError, "both Gem::URI are relative"
      end

      base = self.dup

      authority = rel.userinfo || rel.host || rel.port

      # RFC2396, Section 5.2, 2)
      if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query
        base.fragment=(rel.fragment) if rel.fragment
        return base
      end

      base.query = nil
      base.fragment=(nil)

      # RFC2396, Section 5.2, 4)
      if authority
        base.set_userinfo(rel.userinfo)
        base.set_host(rel.host)
        base.set_port(rel.port || base.default_port)
        base.set_path(rel.path)
      elsif base.path && rel.path
        base.set_path(merge_path(base.path, rel.path))
      end

      # RFC2396, Section 5.2, 7)
      base.query = rel.query       if rel.query
      base.fragment=(rel.fragment) if rel.fragment

      return base
    end # merge
    alias + merge

    # :stopdoc:
    def route_from_path(src, dst)
      case dst
      when src
        # RFC2396, Section 4.2
        return ''
      when %r{(?:\A|/)\.\.?(?:/|\z)}
        # dst has abnormal absolute path,
        # like "/./", "/../", "/x/../", ...
        return dst.dup
      end

      src_path = src.scan(%r{[^/]*/})
      dst_path = dst.scan(%r{[^/]*/?})

      # discard same parts
      while !dst_path.empty? && dst_path.first == src_path.first
        src_path.shift
        dst_path.shift
      end

      tmp = dst_path.join

      # calculate
      if src_path.empty?
        if tmp.empty?
          return './'
        elsif dst_path.first.include?(':') # (see RFC2396 Section 5)
          return './' + tmp
        else
          return tmp
        end
      end

      return '../' * src_path.size + tmp
    end
    private :route_from_path
    # :startdoc:

    # :stopdoc:
    def route_from0(oth)
      oth = parser.__send__(:convert_to_uri, oth)
      if self.relative?
        raise BadURIError,
          "relative Gem::URI: #{self}"
      end
      if oth.relative?
        raise BadURIError,
          "relative Gem::URI: #{oth}"
      end

      if self.scheme != oth.scheme
        return self, self.dup
      end
      rel = Gem::URI::Generic.new(nil, # it is relative Gem::URI
                             self.userinfo, self.host, self.port,
                             nil, self.path, self.opaque,
                             self.query, self.fragment, parser)

      if rel.userinfo != oth.userinfo ||
          rel.host.to_s.downcase != oth.host.to_s.downcase ||
          rel.port != oth.port

        if self.userinfo.nil? && self.host.nil?
          return self, self.dup
        end

        rel.set_port(nil) if rel.port == oth.default_port
        return rel, rel
      end
      rel.set_userinfo(nil)
      rel.set_host(nil)
      rel.set_port(nil)

      if rel.path && rel.path == oth.path
        rel.set_path('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      elsif rel.opaque && rel.opaque == oth.opaque
        rel.set_opaque('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      end

      # you can modify `rel', but cannot `oth'.
      return oth, rel
    end
    private :route_from0
    # :startdoc:

    #
    # == Args
    #
    # +oth+::
    #    Gem::URI or String
    #
    # == Description
    #
    # Calculates relative path from oth to self.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse('http://my.example.com/main.rbx?page=1')
    #   uri.route_from('http://my.example.com')
    #   #=> #<Gem::URI::Generic /main.rbx?page=1>
    #
    def route_from(oth)
      # you can modify `rel', but cannot `oth'.
      begin
        oth, rel = route_from0(oth)
      rescue
        raise $!.class, $!.message
      end
      if oth == rel
        return rel
      end

      rel.set_path(route_from_path(oth.path, self.path))
      if rel.path == './' && self.query
        # "./?foo" -> "?foo"
        rel.set_path('')
      end

      return rel
    end

    alias - route_from

    #
    # == Args
    #
    # +oth+::
    #    Gem::URI or String
    #
    # == Description
    #
    # Calculates relative path to oth from self.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse('http://my.example.com')
    #   uri.route_to('http://my.example.com/main.rbx?page=1')
    #   #=> #<Gem::URI::Generic /main.rbx?page=1>
    #
    def route_to(oth)
      parser.__send__(:convert_to_uri, oth).route_from(self)
    end

    #
    # Returns normalized Gem::URI.
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   Gem::URI("HTTP://my.EXAMPLE.com").normalize
    #   #=> #<Gem::URI::HTTP http://my.example.com/>
    #
    # Normalization here means:
    #
    # * scheme and host are converted to lowercase,
    # * an empty path component is set to "/".
    #
    def normalize
      uri = dup
      uri.normalize!
      uri
    end

    #
    # Destructive version of #normalize.
    #
    def normalize!
      if path&.empty?
        set_path('/')
      end
      if scheme && scheme != scheme.downcase
        set_scheme(self.scheme.downcase)
      end
      if host && host != host.downcase
        set_host(self.host.downcase)
      end
    end

    #
    # Constructs String from Gem::URI.
    #
    def to_s
      str = ''.dup
      if @scheme
        str << @scheme
        str << ':'
      end

      if @opaque
        str << @opaque
      else
        if @host || %w[file postgres].include?(@scheme)
          str << '//'
        end
        if self.userinfo
          str << self.userinfo
          str << '@'
        end
        if @host
          str << @host
        end
        if @port && @port != self.default_port
          str << ':'
          str << @port.to_s
        end
        if (@host || @port) && !@path.empty? && !@path.start_with?('/')
          str << '/'
        end
        str << @path
        if @query
          str << '?'
          str << @query
        end
      end
      if @fragment
        str << '#'
        str << @fragment
      end
      str
    end
    alias to_str to_s

    #
    # Compares two URIs.
    #
    def ==(oth)
      if self.class == oth.class
        self.normalize.component_ary == oth.normalize.component_ary
      else
        false
      end
    end

    # Returns the hash value.
    def hash
      self.component_ary.hash
    end

    # Compares with _oth_ for Hash.
    def eql?(oth)
      self.class == oth.class &&
      parser == oth.parser &&
      self.component_ary.eql?(oth.component_ary)
    end

    # Returns an Array of the components defined from the COMPONENT Array.
    def component_ary
      component.collect do |x|
        self.__send__(x)
      end
    end
    protected :component_ary

    # == Args
    #
    # +components+::
    #    Multiple Symbol arguments defined in Gem::URI::HTTP.
    #
    # == Description
    #
    # Selects specified components from Gem::URI.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse('http://myuser:mypass@my.example.com/test.rbx')
    #   uri.select(:userinfo, :host, :path)
    #   # => ["myuser:mypass", "my.example.com", "/test.rbx"]
    #
    def select(*components)
      components.collect do |c|
        if component.include?(c)
          self.__send__(c)
        else
          raise ArgumentError,
            "expected of components of #{self.class} (#{self.class.component.join(', ')})"
        end
      end
    end

    def inspect # :nodoc:
      "#<#{self.class} #{self}>"
    end

    #
    # == Args
    #
    # +v+::
    #    Gem::URI or String
    #
    # == Description
    #
    # Attempts to parse other Gem::URI +oth+,
    # returns [parsed_oth, self].
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("http://my.example.com")
    #   uri.coerce("http://foo.com")
    #   #=> [#<Gem::URI::HTTP http://foo.com>, #<Gem::URI::HTTP http://my.example.com>]
    #
    def coerce(oth)
      case oth
      when String
        oth = parser.parse(oth)
      else
        super
      end

      return oth, self
    end

    # Returns a proxy Gem::URI.
    # The proxy Gem::URI is obtained from environment variables such as http_proxy,
    # ftp_proxy, no_proxy, etc.
    # If there is no proper proxy, nil is returned.
    #
    # If the optional parameter +env+ is specified, it is used instead of ENV.
    #
    # Note that capitalized variables (HTTP_PROXY, FTP_PROXY, NO_PROXY, etc.)
    # are examined, too.
    #
    # But http_proxy and HTTP_PROXY is treated specially under CGI environment.
    # It's because HTTP_PROXY may be set by Proxy: header.
    # So HTTP_PROXY is not used.
    # http_proxy is not used too if the variable is case insensitive.
    # CGI_HTTP_PROXY can be used instead.
    def find_proxy(env=ENV)
      raise BadURIError, "relative Gem::URI: #{self}" if self.relative?
      name = self.scheme.downcase + '_proxy'
      proxy_uri = nil
      if name == 'http_proxy' && env.include?('REQUEST_METHOD') # CGI?
        # HTTP_PROXY conflicts with *_proxy for proxy settings and
        # HTTP_* for header information in CGI.
        # So it should be careful to use it.
        pairs = env.reject {|k, v| /\Ahttp_proxy\z/i !~ k }
        case pairs.length
        when 0 # no proxy setting anyway.
          proxy_uri = nil
        when 1
          k, _ = pairs.shift
          if k == 'http_proxy' && env[k.upcase] == nil
            # http_proxy is safe to use because ENV is case sensitive.
            proxy_uri = env[name]
          else
            proxy_uri = nil
          end
        else # http_proxy is safe to use because ENV is case sensitive.
          proxy_uri = env.to_hash[name]
        end
        if !proxy_uri
          # Use CGI_HTTP_PROXY.  cf. libwww-perl.
          proxy_uri = env["CGI_#{name.upcase}"]
        end
      elsif name == 'http_proxy'
        if RUBY_ENGINE == 'jruby' && p_addr = ENV_JAVA['http.proxyHost']
          p_port = ENV_JAVA['http.proxyPort']
          if p_user = ENV_JAVA['http.proxyUser']
            p_pass = ENV_JAVA['http.proxyPass']
            proxy_uri = "http://#{p_user}:#{p_pass}@#{p_addr}:#{p_port}"
          else
            proxy_uri = "http://#{p_addr}:#{p_port}"
          end
        else
          unless proxy_uri = env[name]
            if proxy_uri = env[name.upcase]
              warn 'The environment variable HTTP_PROXY is discouraged.  Use http_proxy.', uplevel: 1
            end
          end
        end
      else
        proxy_uri = env[name] || env[name.upcase]
      end

      if proxy_uri.nil? || proxy_uri.empty?
        return nil
      end

      if self.hostname
        begin
          addr = IPSocket.getaddress(self.hostname)
          return nil if /\A127\.|\A::1\z/ =~ addr
        rescue SocketError
        end
      end

      name = 'no_proxy'
      if no_proxy = env[name] || env[name.upcase]
        return nil unless Gem::URI::Generic.use_proxy?(self.hostname, addr, self.port, no_proxy)
      end
      Gem::URI.parse(proxy_uri)
    end

    def self.use_proxy?(hostname, addr, port, no_proxy) # :nodoc:
      hostname = hostname.downcase
      dothostname = ".#{hostname}"
      no_proxy.scan(/([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|
        if !p_port || port == p_port.to_i
          if p_host.start_with?('.')
            return false if hostname.end_with?(p_host.downcase)
          else
            return false if dothostname.end_with?(".#{p_host.downcase}")
          end
          if addr
            begin
              return false if IPAddr.new(p_host).include?(addr)
            rescue IPAddr::InvalidAddressError
              next
            end
          end
        end
      }
      true
    end
  end
end
PK)J[l���qq<share/rubygems/rubygems/vendor/uri/lib/uri/rfc3986_parser.rbnu�[���# frozen_string_literal: true
module Gem::URI
  class RFC3986_Parser # :nodoc:
    # Gem::URI defined in RFC3986
    HOST = %r[
      (?<IP-literal>\[(?:
          (?<IPv6address>
            (?:\h{1,4}:){6}
            (?<ls32>\h{1,4}:\h{1,4}
            | (?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)
                \.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>)
            )
          | ::(?:\h{1,4}:){5}\g<ls32>
          | \h{1,4}?::(?:\h{1,4}:){4}\g<ls32>
          | (?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>
          | (?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>
          | (?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>
          | (?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>
          | (?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}
          | (?:(?:\h{1,4}:){,6}\h{1,4})?::
          )
        | (?<IPvFuture>v\h++\.[!$&-.0-9:;=A-Z_a-z~]++)
        )\])
    | \g<IPv4address>
    | (?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*+)
    ]x

    USERINFO = /(?:%\h\h|[!$&-.0-9:;=A-Z_a-z~])*+/

    SCHEME = %r[[A-Za-z][+\-.0-9A-Za-z]*+].source
    SEG = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/])].source
    SEG_NC = %r[(?:%\h\h|[!$&-.0-9;=@A-Z_a-z~])].source
    FRAGMENT = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+].source

    RFC3986_URI = %r[\A
    (?<seg>#{SEG}){0}
    (?<Gem::URI>
      (?<scheme>#{SCHEME}):
      (?<hier-part>//
        (?<authority>
          (?:(?<userinfo>#{USERINFO.source})@)?
          (?<host>#{HOST.source.delete(" \n")})
          (?::(?<port>\d*+))?
        )
        (?<path-abempty>(?:/\g<seg>*+)?)
      | (?<path-absolute>/((?!/)\g<seg>++)?)
      | (?<path-rootless>(?!/)\g<seg>++)
      | (?<path-empty>)
      )
      (?:\?(?<query>[^\#]*+))?
      (?:\#(?<fragment>#{FRAGMENT}))?
    )\z]x

    RFC3986_relative_ref = %r[\A
    (?<seg>#{SEG}){0}
    (?<relative-ref>
      (?<relative-part>//
        (?<authority>
          (?:(?<userinfo>#{USERINFO.source})@)?
          (?<host>#{HOST.source.delete(" \n")}(?<!/))?
          (?::(?<port>\d*+))?
        )
        (?<path-abempty>(?:/\g<seg>*+)?)
      | (?<path-absolute>/\g<seg>*+)
      | (?<path-noscheme>#{SEG_NC}++(?:/\g<seg>*+)?)
      | (?<path-empty>)
      )
      (?:\?(?<query>[^#]*+))?
      (?:\#(?<fragment>#{FRAGMENT}))?
    )\z]x
    attr_reader :regexp

    def initialize
      @regexp = default_regexp.each_value(&:freeze).freeze
    end

    def split(uri) #:nodoc:
      begin
        uri = uri.to_str
      rescue NoMethodError
        raise InvalidURIError, "bad Gem::URI (is not Gem::URI?): #{uri.inspect}"
      end
      uri.ascii_only? or
        raise InvalidURIError, "Gem::URI must be ascii only #{uri.dump}"
      if m = RFC3986_URI.match(uri)
        query = m["query"]
        scheme = m["scheme"]
        opaque = m["path-rootless"]
        if opaque
          opaque << "?#{query}" if query
          [ scheme,
            nil, # userinfo
            nil, # host
            nil, # port
            nil, # registry
            nil, # path
            opaque,
            nil, # query
            m["fragment"]
          ]
        else # normal
          [ scheme,
            m["userinfo"],
            m["host"],
            m["port"],
            nil, # registry
            (m["path-abempty"] ||
             m["path-absolute"] ||
             m["path-empty"]),
            nil, # opaque
            query,
            m["fragment"]
          ]
        end
      elsif m = RFC3986_relative_ref.match(uri)
        [ nil, # scheme
          m["userinfo"],
          m["host"],
          m["port"],
          nil, # registry,
          (m["path-abempty"] ||
           m["path-absolute"] ||
           m["path-noscheme"] ||
           m["path-empty"]),
          nil, # opaque
          m["query"],
          m["fragment"]
        ]
      else
        raise InvalidURIError, "bad Gem::URI (is not Gem::URI?): #{uri.inspect}"
      end
    end

    def parse(uri) # :nodoc:
      Gem::URI.for(*self.split(uri), self)
    end

    def join(*uris) # :nodoc:
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    # Compatibility for RFC2396 parser
    def extract(str, schemes = nil, &block) # :nodoc:
      warn "Gem::URI::RFC3986_PARSER.extract is obsolete. Use Gem::URI::RFC2396_PARSER.extract explicitly.", uplevel: 1 if $VERBOSE
      RFC2396_PARSER.extract(str, schemes, &block)
    end

    # Compatibility for RFC2396 parser
    def make_regexp(schemes = nil) # :nodoc:
      warn "Gem::URI::RFC3986_PARSER.make_regexp is obsolete. Use Gem::URI::RFC2396_PARSER.make_regexp explicitly.", uplevel: 1 if $VERBOSE
      RFC2396_PARSER.make_regexp(schemes)
    end

    # Compatibility for RFC2396 parser
    def escape(str, unsafe = nil) # :nodoc:
      warn "Gem::URI::RFC3986_PARSER.escape is obsolete. Use Gem::URI::RFC2396_PARSER.escape explicitly.", uplevel: 1 if $VERBOSE
      unsafe ? RFC2396_PARSER.escape(str, unsafe) : RFC2396_PARSER.escape(str)
    end

    # Compatibility for RFC2396 parser
    def unescape(str, escaped = nil) # :nodoc:
      warn "Gem::URI::RFC3986_PARSER.unescape is obsolete. Use Gem::URI::RFC2396_PARSER.unescape explicitly.", uplevel: 1 if $VERBOSE
      escaped ? RFC2396_PARSER.unescape(str, escaped) : RFC2396_PARSER.unescape(str)
    end

    @@to_s = Kernel.instance_method(:to_s)
    if @@to_s.respond_to?(:bind_call)
      def inspect
        @@to_s.bind_call(self)
      end
    else
      def inspect
        @@to_s.bind(self).call
      end
    end

    private

    def default_regexp # :nodoc:
      {
        SCHEME: %r[\A#{SCHEME}\z]o,
        USERINFO: %r[\A#{USERINFO}\z]o,
        HOST: %r[\A#{HOST}\z]o,
        ABS_PATH: %r[\A/#{SEG}*+\z]o,
        REL_PATH: %r[\A(?!/)#{SEG}++\z]o,
        QUERY: %r[\A(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+\z],
        FRAGMENT: %r[\A#{FRAGMENT}\z]o,
        OPAQUE: %r[\A(?:[^/].*)?\z],
        PORT: /\A[\x09\x0a\x0c\x0d ]*+\d*[\x09\x0a\x0c\x0d ]*\z/,
      }
    end

    def convert_to_uri(uri)
      if uri.is_a?(Gem::URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected Gem::URI object or Gem::URI string)"
      end
    end

  end # class Parser
end # module Gem::URI
PK)J[�
�BB3share/rubygems/rubygems/vendor/uri/lib/uri/https.rbnu�[���# frozen_string_literal: false
# = uri/https.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'http'

module Gem::URI

  # The default port for HTTPS URIs is 443, and the scheme is 'https:' rather
  # than 'http:'. Other than that, HTTPS URIs are identical to HTTP URIs;
  # see Gem::URI::HTTP.
  class HTTPS < HTTP
    # A Default port of 443 for Gem::URI::HTTPS
    DEFAULT_PORT = 443
  end

  register_scheme 'HTTPS', HTTPS
end
PK)J[�T�0��5share/rubygems/rubygems/vendor/uri/lib/uri/version.rbnu�[���module Gem::URI
  # :stopdoc:
  VERSION_CODE = '010003'.freeze
  VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
  # :startdoc:
end
PK)J[u�2��1share/rubygems/rubygems/vendor/uri/lib/uri/ftp.rbnu�[���# frozen_string_literal: false
# = uri/ftp.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'generic'

module Gem::URI

  #
  # FTP Gem::URI syntax is defined by RFC1738 section 3.2.
  #
  # This class will be redesigned because of difference of implementations;
  # the structure of its path. draft-hoffman-ftp-uri-04 is a draft but it
  # is a good summary about the de facto spec.
  # https://datatracker.ietf.org/doc/html/draft-hoffman-ftp-uri-04
  #
  class FTP < Generic
    # A Default port of 21 for Gem::URI::FTP.
    DEFAULT_PORT = 21

    #
    # An Array of the available components for Gem::URI::FTP.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port,
      :path, :typecode
    ].freeze

    #
    # Typecode is "a", "i", or "d".
    #
    # * "a" indicates a text file (the FTP command was ASCII)
    # * "i" indicates a binary file (FTP command IMAGE)
    # * "d" indicates the contents of a directory should be displayed
    #
    TYPECODE = ['a', 'i', 'd'].freeze

    # Typecode prefix ";type=".
    TYPECODE_PREFIX = ';type='.freeze

    def self.new2(user, password, host, port, path,
                  typecode = nil, arg_check = true) # :nodoc:
      # Do not use this method!  Not tested.  [Bug #7301]
      # This methods remains just for compatibility,
      # Keep it undocumented until the active maintainer is assigned.
      typecode = nil if typecode.size == 0
      if typecode && !TYPECODE.include?(typecode)
        raise ArgumentError,
          "bad typecode is specified: #{typecode}"
      end

      # do escape

      self.new('ftp',
               [user, password],
               host, port, nil,
               typecode ? path + TYPECODE_PREFIX + typecode : path,
               nil, nil, nil, arg_check)
    end

    #
    # == Description
    #
    # Creates a new Gem::URI::FTP object from components, with syntax checking.
    #
    # The components accepted are +userinfo+, +host+, +port+, +path+, and
    # +typecode+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, typecode]</code>.
    #
    # If the path supplied is absolute, it will be escaped in order to
    # make it absolute in the Gem::URI.
    #
    # Examples:
    #
    #     require 'rubygems/vendor/uri/lib/uri'
    #
    #     uri1 = Gem::URI::FTP.build(['user:password', 'ftp.example.com', nil,
    #       '/path/file.zip', 'i'])
    #     uri1.to_s  # => "ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=i"
    #
    #     uri2 = Gem::URI::FTP.build({:host => 'ftp.example.com',
    #       :path => 'ruby/src'})
    #     uri2.to_s  # => "ftp://ftp.example.com/ruby/src"
    #
    def self.build(args)

      # Fix the incoming path to be generic URL syntax
      # FTP path  ->  URL path
      # foo/bar       /foo/bar
      # /foo/bar      /%2Ffoo/bar
      #
      if args.kind_of?(Array)
        args[3] = '/' + args[3].sub(/^\//, '%2F')
      else
        args[:path] = '/' + args[:path].sub(/^\//, '%2F')
      end

      tmp = Util::make_components_hash(self, args)

      if tmp[:typecode]
        if tmp[:typecode].size == 1
          tmp[:typecode] = TYPECODE_PREFIX + tmp[:typecode]
        end
        tmp[:path] << tmp[:typecode]
      end

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Gem::URI::FTP object from generic URL components with no
    # syntax checking.
    #
    # Unlike build(), this method does not escape the path component as
    # required by RFC1738; instead it is treated as per RFC2396.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = nil,
                   arg_check = false)
      raise InvalidURIError unless path
      path = path.sub(/^\//,'')
      path.sub!(/^%2F/,'/')
      super(scheme, userinfo, host, port, registry, path, opaque,
            query, fragment, parser, arg_check)
      @typecode = nil
      if tmp = @path.index(TYPECODE_PREFIX)
        typecode = @path[tmp + TYPECODE_PREFIX.size..-1]
        @path = @path[0..tmp - 1]

        if arg_check
          self.typecode = typecode
        else
          self.set_typecode(typecode)
        end
      end
    end

    # typecode accessor.
    #
    # See Gem::URI::FTP::COMPONENT.
    attr_reader :typecode

    # Validates typecode +v+,
    # returns +true+ or +false+.
    #
    def check_typecode(v)
      if TYPECODE.include?(v)
        return true
      else
        raise InvalidComponentError,
          "bad typecode(expected #{TYPECODE.join(', ')}): #{v}"
      end
    end
    private :check_typecode

    # Private setter for the typecode +v+.
    #
    # See also Gem::URI::FTP.typecode=.
    #
    def set_typecode(v)
      @typecode = v
    end
    protected :set_typecode

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the typecode +v+
    # (with validation).
    #
    # See also Gem::URI::FTP.check_typecode.
    #
    # == Usage
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("ftp://john@ftp.example.com/my_file.img")
    #   #=> #<Gem::URI::FTP ftp://john@ftp.example.com/my_file.img>
    #   uri.typecode = "i"
    #   uri
    #   #=> #<Gem::URI::FTP ftp://john@ftp.example.com/my_file.img;type=i>
    #
    def typecode=(typecode)
      check_typecode(typecode)
      set_typecode(typecode)
      typecode
    end

    def merge(oth) # :nodoc:
      tmp = super(oth)
      if self != tmp
        tmp.set_typecode(oth.typecode)
      end

      return tmp
    end

    # Returns the path from an FTP Gem::URI.
    #
    # RFC 1738 specifically states that the path for an FTP Gem::URI does not
    # include the / which separates the Gem::URI path from the Gem::URI host. Example:
    #
    # <code>ftp://ftp.example.com/pub/ruby</code>
    #
    # The above Gem::URI indicates that the client should connect to
    # ftp.example.com then cd to pub/ruby from the initial login directory.
    #
    # If you want to cd to an absolute directory, you must include an
    # escaped / (%2F) in the path. Example:
    #
    # <code>ftp://ftp.example.com/%2Fpub/ruby</code>
    #
    # This method will then return "/pub/ruby".
    #
    def path
      return @path.sub(/^\//,'').sub(/^%2F/,'/')
    end

    # Private setter for the path of the Gem::URI::FTP.
    def set_path(v)
      super("/" + v.sub(/^\//, "%2F"))
    end
    protected :set_path

    # Returns a String representation of the Gem::URI::FTP.
    def to_s
      save_path = nil
      if @typecode
        save_path = @path
        @path = @path + TYPECODE_PREFIX + @typecode
      end
      str = super
      if @typecode
        @path = save_path
      end

      return str
    end
  end

  register_scheme 'FTP', FTP
end
PK)J[0�xFF<share/rubygems/rubygems/vendor/uri/lib/uri/rfc2396_parser.rbnu�[���# frozen_string_literal: false
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

module Gem::URI
  #
  # Includes Gem::URI::REGEXP::PATTERN
  #
  module RFC2396_REGEXP
    #
    # Patterns used to parse Gem::URI's
    #
    module PATTERN
      # :stopdoc:

      # RFC 2396 (Gem::URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # alpha         = lowalpha | upalpha
      ALPHA = "a-zA-Z"
      # alphanum      = alpha | digit
      ALNUM = "#{ALPHA}\\d"

      # hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" |
      #                         "a" | "b" | "c" | "d" | "e" | "f"
      HEX     = "a-fA-F\\d"
      # escaped       = "%" hex hex
      ESCAPED = "%[#{HEX}]{2}"
      # mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
      #                 "(" | ")"
      # unreserved    = alphanum | mark
      UNRESERVED = "\\-_.!~*'()#{ALNUM}"
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | ","
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | "," | "[" | "]" (RFC 2732)
      RESERVED = ";/?:@&=+$,\\[\\]"

      # domainlabel   = alphanum | alphanum *( alphanum | "-" ) alphanum
      DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # toplabel      = alpha | alpha *( alphanum | "-" ) alphanum
      TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"

      # :startdoc:
    end # PATTERN

    # :startdoc:
  end # REGEXP

  # Class that parses String's into Gem::URI's.
  #
  # It contains a Hash set of patterns and Regexp's that match and validate.
  #
  class RFC2396_Parser
    include RFC2396_REGEXP

    #
    # == Synopsis
    #
    #   Gem::URI::Parser.new([opts])
    #
    # == Args
    #
    # The constructor accepts a hash as options for parser.
    # Keys of options are pattern names of Gem::URI components
    # and values of options are pattern strings.
    # The constructor generates set of regexps for parsing URIs.
    #
    # You can use the following keys:
    #
    #   * :ESCAPED (Gem::URI::PATTERN::ESCAPED in default)
    #   * :UNRESERVED (Gem::URI::PATTERN::UNRESERVED in default)
    #   * :DOMLABEL (Gem::URI::PATTERN::DOMLABEL in default)
    #   * :TOPLABEL (Gem::URI::PATTERN::TOPLABEL in default)
    #   * :HOSTNAME (Gem::URI::PATTERN::HOSTNAME in default)
    #
    # == Examples
    #
    #   p = Gem::URI::Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
    #   u = p.parse("http://example.jp/%uABCD") #=> #<Gem::URI::HTTP http://example.jp/%uABCD>
    #   Gem::URI.parse(u.to_s) #=> raises Gem::URI::InvalidURIError
    #
    #   s = "http://example.com/ABCD"
    #   u1 = p.parse(s) #=> #<Gem::URI::HTTP http://example.com/ABCD>
    #   u2 = Gem::URI.parse(s) #=> #<Gem::URI::HTTP http://example.com/ABCD>
    #   u1 == u2 #=> true
    #   u1.eql?(u2) #=> false
    #
    def initialize(opts = {})
      @pattern = initialize_pattern(opts)
      @pattern.each_value(&:freeze)
      @pattern.freeze

      @regexp = initialize_regexp(@pattern)
      @regexp.each_value(&:freeze)
      @regexp.freeze
    end

    # The Hash of patterns.
    #
    # See also Gem::URI::Parser.initialize_pattern.
    attr_reader :pattern

    # The Hash of Regexp.
    #
    # See also Gem::URI::Parser.initialize_regexp.
    attr_reader :regexp

    # Returns a split Gem::URI against +regexp[:ABS_URI]+.
    def split(uri)
      case uri
      when ''
        # null uri

      when @regexp[:ABS_URI]
        scheme, opaque, userinfo, host, port,
          registry, path, query, fragment = $~[1..-1]

        # Gem::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # absoluteURI   = scheme ":" ( hier_part | opaque_part )
        # hier_part     = ( net_path | abs_path ) [ "?" query ]
        # opaque_part   = uric_no_slash *uric

        # abs_path      = "/"  path_segments
        # net_path      = "//" authority [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

        if !scheme
          raise InvalidURIError,
            "bad Gem::URI (absolute but no scheme): #{uri}"
        end
        if !opaque && (!path && (!host && !registry))
          raise InvalidURIError,
            "bad Gem::URI (absolute but no path): #{uri}"
        end

      when @regexp[:REL_URI]
        scheme = nil
        opaque = nil

        userinfo, host, port, registry,
          rel_segment, abs_path, query, fragment = $~[1..-1]
        if rel_segment && abs_path
          path = rel_segment + abs_path
        elsif rel_segment
          path = rel_segment
        elsif abs_path
          path = abs_path
        end

        # Gem::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]

        # net_path      = "//" authority [ abs_path ]
        # abs_path      = "/"  path_segments
        # rel_path      = rel_segment [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

      else
        raise InvalidURIError, "bad Gem::URI (is not Gem::URI?): #{uri}"
      end

      path = '' if !path && !opaque # (see RFC2396 Section 5.2)
      ret = [
        scheme,
        userinfo, host, port,         # X
        registry,                     # X
        path,                         # Y
        opaque,                       # Y
        query,
        fragment
      ]
      return ret
    end

    #
    # == Args
    #
    # +uri+::
    #    String
    #
    # == Description
    #
    # Parses +uri+ and constructs either matching Gem::URI scheme object
    # (File, FTP, HTTP, HTTPS, LDAP, LDAPS, or MailTo) or Gem::URI::Generic.
    #
    # == Usage
    #
    #   p = Gem::URI::Parser.new
    #   p.parse("ldap://ldap.example.com/dc=example?user=john")
    #   #=> #<Gem::URI::LDAP ldap://ldap.example.com/dc=example?user=john>
    #
    def parse(uri)
      Gem::URI.for(*self.split(uri), self)
    end

    #
    # == Args
    #
    # +uris+::
    #    an Array of Strings
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    #
    def join(*uris)
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    #
    # :call-seq:
    #   extract( str )
    #   extract( str, schemes )
    #   extract( str, schemes ) {|item| block }
    #
    # == Args
    #
    # +str+::
    #    String to search
    # +schemes+::
    #    Patterns to apply to +str+
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    # If no +block+ given, then returns the result,
    # else it calls +block+ for each element in result.
    #
    # See also Gem::URI::Parser.make_regexp.
    #
    def extract(str, schemes = nil)
      if block_given?
        str.scan(make_regexp(schemes)) { yield $& }
        nil
      else
        result = []
        str.scan(make_regexp(schemes)) { result.push $& }
        result
      end
    end

    # Returns Regexp that is default +self.regexp[:ABS_URI_REF]+,
    # unless +schemes+ is provided. Then it is a Regexp.union with +self.pattern[:X_ABS_URI]+.
    def make_regexp(schemes = nil)
      unless schemes
        @regexp[:ABS_URI_REF]
      else
        /(?=#{Regexp.union(*schemes)}:)#{@pattern[:X_ABS_URI]}/x
      end
    end

    #
    # :call-seq:
    #   escape( str )
    #   escape( str, unsafe )
    #
    # == Args
    #
    # +str+::
    #    String to make safe
    # +unsafe+::
    #    Regexp to apply. Defaults to +self.regexp[:UNSAFE]+
    #
    # == Description
    #
    # Constructs a safe String from +str+, removing unsafe characters,
    # replacing them with codes.
    #
    def escape(str, unsafe = @regexp[:UNSAFE])
      unless unsafe.kind_of?(Regexp)
        # perhaps unsafe is String object
        unsafe = Regexp.new("[#{Regexp.quote(unsafe)}]", false)
      end
      str.gsub(unsafe) do
        us = $&
        tmp = ''
        us.each_byte do |uc|
          tmp << sprintf('%%%02X', uc)
        end
        tmp
      end.force_encoding(Encoding::US_ASCII)
    end

    #
    # :call-seq:
    #   unescape( str )
    #   unescape( str, escaped )
    #
    # == Args
    #
    # +str+::
    #    String to remove escapes from
    # +escaped+::
    #    Regexp to apply. Defaults to +self.regexp[:ESCAPED]+
    #
    # == Description
    #
    # Removes escapes from +str+.
    #
    def unescape(str, escaped = @regexp[:ESCAPED])
      enc = str.encoding
      enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
      str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
    end

    TO_S = Kernel.instance_method(:to_s) # :nodoc:
    if TO_S.respond_to?(:bind_call)
      def inspect # :nodoc:
        TO_S.bind_call(self)
      end
    else
      def inspect # :nodoc:
        TO_S.bind(self).call
      end
    end

    private

    # Constructs the default Hash of patterns.
    def initialize_pattern(opts = {})
      ret = {}
      ret[:ESCAPED] = escaped = (opts.delete(:ESCAPED) || PATTERN::ESCAPED)
      ret[:UNRESERVED] = unreserved = opts.delete(:UNRESERVED) || PATTERN::UNRESERVED
      ret[:RESERVED] = reserved = opts.delete(:RESERVED) || PATTERN::RESERVED
      ret[:DOMLABEL] = opts.delete(:DOMLABEL) || PATTERN::DOMLABEL
      ret[:TOPLABEL] = opts.delete(:TOPLABEL) || PATTERN::TOPLABEL
      ret[:HOSTNAME] = hostname = opts.delete(:HOSTNAME)

      # RFC 2396 (Gem::URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # uric          = reserved | unreserved | escaped
      ret[:URIC] = uric = "(?:[#{unreserved}#{reserved}]|#{escaped})"
      # uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
      #                 "&" | "=" | "+" | "$" | ","
      ret[:URIC_NO_SLASH] = uric_no_slash = "(?:[#{unreserved};?:@&=+$,]|#{escaped})"
      # query         = *uric
      ret[:QUERY] = query = "#{uric}*"
      # fragment      = *uric
      ret[:FRAGMENT] = fragment = "#{uric}*"

      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      # reg-name      = *( unreserved / pct-encoded / sub-delims ) # RFC3986
      unless hostname
        ret[:HOSTNAME] = hostname = "(?:[a-zA-Z0-9\\-.]|%\\h\\h)+"
      end

      # RFC 2373, APPENDIX B:
      # IPv6address = hexpart [ ":" IPv4address ]
      # IPv4address   = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      # hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
      # hexseq  = hex4 *( ":" hex4)
      # hex4    = 1*4HEXDIG
      #
      # XXX: This definition has a flaw. "::" + IPv4address must be
      # allowed too.  Here is a replacement.
      #
      # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      ret[:IPV4ADDR] = ipv4addr = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
      # hex4     = 1*4HEXDIG
      hex4 = "[#{PATTERN::HEX}]{1,4}"
      # lastpart = hex4 | IPv4address
      lastpart = "(?:#{hex4}|#{ipv4addr})"
      # hexseq1  = *( hex4 ":" ) hex4
      hexseq1 = "(?:#{hex4}:)*#{hex4}"
      # hexseq2  = *( hex4 ":" ) lastpart
      hexseq2 = "(?:#{hex4}:)*#{lastpart}"
      # IPv6address = hexseq2 | [ hexseq1 ] "::" [ hexseq2 ]
      ret[:IPV6ADDR] = ipv6addr = "(?:#{hexseq2}|(?:#{hexseq1})?::(?:#{hexseq2})?)"

      # IPv6prefix  = ( hexseq1 | [ hexseq1 ] "::" [ hexseq1 ] ) "/" 1*2DIGIT
      # unused

      # ipv6reference = "[" IPv6address "]" (RFC 2732)
      ret[:IPV6REF] = ipv6ref = "\\[#{ipv6addr}\\]"

      # host          = hostname | IPv4address
      # host          = hostname | IPv4address | IPv6reference (RFC 2732)
      ret[:HOST] = host = "(?:#{hostname}|#{ipv4addr}|#{ipv6ref})"
      # port          = *digit
      ret[:PORT] = port = '\d*'
      # hostport      = host [ ":" port ]
      ret[:HOSTPORT] = hostport = "#{host}(?::#{port})?"

      # userinfo      = *( unreserved | escaped |
      #                    ";" | ":" | "&" | "=" | "+" | "$" | "," )
      ret[:USERINFO] = userinfo = "(?:[#{unreserved};:&=+$,]|#{escaped})*"

      # pchar         = unreserved | escaped |
      #                 ":" | "@" | "&" | "=" | "+" | "$" | ","
      pchar = "(?:[#{unreserved}:@&=+$,]|#{escaped})"
      # param         = *pchar
      param = "#{pchar}*"
      # segment       = *pchar *( ";" param )
      segment = "#{pchar}*(?:;#{param})*"
      # path_segments = segment *( "/" segment )
      ret[:PATH_SEGMENTS] = path_segments = "#{segment}(?:/#{segment})*"

      # server        = [ [ userinfo "@" ] hostport ]
      server = "(?:#{userinfo}@)?#{hostport}"
      # reg_name      = 1*( unreserved | escaped | "$" | "," |
      #                     ";" | ":" | "@" | "&" | "=" | "+" )
      ret[:REG_NAME] = reg_name = "(?:[#{unreserved}$,;:@&=+]|#{escaped})+"
      # authority     = server | reg_name
      authority = "(?:#{server}|#{reg_name})"

      # rel_segment   = 1*( unreserved | escaped |
      #                     ";" | "@" | "&" | "=" | "+" | "$" | "," )
      ret[:REL_SEGMENT] = rel_segment = "(?:[#{unreserved};@&=+$,]|#{escaped})+"

      # scheme        = alpha *( alpha | digit | "+" | "-" | "." )
      ret[:SCHEME] = scheme = "[#{PATTERN::ALPHA}][\\-+.#{PATTERN::ALPHA}\\d]*"

      # abs_path      = "/"  path_segments
      ret[:ABS_PATH] = abs_path = "/#{path_segments}"
      # rel_path      = rel_segment [ abs_path ]
      ret[:REL_PATH] = rel_path = "#{rel_segment}(?:#{abs_path})?"
      # net_path      = "//" authority [ abs_path ]
      ret[:NET_PATH] = net_path = "//#{authority}(?:#{abs_path})?"

      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      ret[:HIER_PART] = hier_part = "(?:#{net_path}|#{abs_path})(?:\\?(?:#{query}))?"
      # opaque_part   = uric_no_slash *uric
      ret[:OPAQUE_PART] = opaque_part = "#{uric_no_slash}#{uric}*"

      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      ret[:ABS_URI] = abs_uri = "#{scheme}:(?:#{hier_part}|#{opaque_part})"
      # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
      ret[:REL_URI] = rel_uri = "(?:#{net_path}|#{abs_path}|#{rel_path})(?:\\?#{query})?"

      # Gem::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
      ret[:URI_REF] = "(?:#{abs_uri}|#{rel_uri})?(?:##{fragment})?"

      ret[:X_ABS_URI] = "
        (#{scheme}):                           (?# 1: scheme)
        (?:
           (#{opaque_part})                    (?# 2: opaque)
        |
           (?:(?:
             //(?:
                 (?:(?:(#{userinfo})@)?        (?# 3: userinfo)
                   (?:(#{host})(?::(\\d*))?))? (?# 4: host, 5: port)
               |
                 (#{reg_name})                 (?# 6: registry)
               )
             |
             (?!//))                           (?# XXX: '//' is the mark for hostport)
             (#{abs_path})?                    (?# 7: path)
           )(?:\\?(#{query}))?                 (?# 8: query)
        )
        (?:\\#(#{fragment}))?                  (?# 9: fragment)
      "

      ret[:X_REL_URI] = "
        (?:
          (?:
            //
            (?:
              (?:(#{userinfo})@)?       (?# 1: userinfo)
                (#{host})?(?::(\\d*))?  (?# 2: host, 3: port)
            |
              (#{reg_name})             (?# 4: registry)
            )
          )
        |
          (#{rel_segment})              (?# 5: rel_segment)
        )?
        (#{abs_path})?                  (?# 6: abs_path)
        (?:\\?(#{query}))?              (?# 7: query)
        (?:\\#(#{fragment}))?           (?# 8: fragment)
      "

      ret
    end

    # Constructs the default Hash of Regexp's.
    def initialize_regexp(pattern)
      ret = {}

      # for Gem::URI::split
      ret[:ABS_URI] = Regexp.new('\A\s*+' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
      ret[:REL_URI] = Regexp.new('\A\s*+' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)

      # for Gem::URI::extract
      ret[:URI_REF]     = Regexp.new(pattern[:URI_REF])
      ret[:ABS_URI_REF] = Regexp.new(pattern[:X_ABS_URI], Regexp::EXTENDED)
      ret[:REL_URI_REF] = Regexp.new(pattern[:X_REL_URI], Regexp::EXTENDED)

      # for Gem::URI::escape/unescape
      ret[:ESCAPED] = Regexp.new(pattern[:ESCAPED])
      ret[:UNSAFE]  = Regexp.new("[^#{pattern[:UNRESERVED]}#{pattern[:RESERVED]}]")

      # for Generic#initialize
      ret[:SCHEME]   = Regexp.new("\\A#{pattern[:SCHEME]}\\z")
      ret[:USERINFO] = Regexp.new("\\A#{pattern[:USERINFO]}\\z")
      ret[:HOST]     = Regexp.new("\\A#{pattern[:HOST]}\\z")
      ret[:PORT]     = Regexp.new("\\A#{pattern[:PORT]}\\z")
      ret[:OPAQUE]   = Regexp.new("\\A#{pattern[:OPAQUE_PART]}\\z")
      ret[:REGISTRY] = Regexp.new("\\A#{pattern[:REG_NAME]}\\z")
      ret[:ABS_PATH] = Regexp.new("\\A#{pattern[:ABS_PATH]}\\z")
      ret[:REL_PATH] = Regexp.new("\\A#{pattern[:REL_PATH]}\\z")
      ret[:QUERY]    = Regexp.new("\\A#{pattern[:QUERY]}\\z")
      ret[:FRAGMENT] = Regexp.new("\\A#{pattern[:FRAGMENT]}\\z")

      ret
    end

    def convert_to_uri(uri)
      if uri.is_a?(Gem::URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected Gem::URI object or Gem::URI string)"
      end
    end

  end # class Parser

  # Backward compatibility for Gem::URI::REGEXP::PATTERN::*
  RFC2396_Parser.new.pattern.each_pair do |sym, str|
    unless RFC2396_REGEXP::PATTERN.const_defined?(sym, false)
      RFC2396_REGEXP::PATTERN.const_set(sym, str)
    end
  end
end # module Gem::URI
PK)J[�
���4share/rubygems/rubygems/vendor/uri/lib/uri/mailto.rbnu�[���# frozen_string_literal: false
# = uri/mailto.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'generic'

module Gem::URI

  #
  # RFC6068, the mailto URL scheme.
  #
  class MailTo < Generic
    include RFC2396_REGEXP

    # A Default port of nil for Gem::URI::MailTo.
    DEFAULT_PORT = nil

    # An Array of the available components for Gem::URI::MailTo.
    COMPONENT = [ :scheme, :to, :headers ].freeze

    # :stopdoc:
    #  "hname" and "hvalue" are encodings of an RFC 822 header name and
    #  value, respectively. As with "to", all URL reserved characters must
    #  be encoded.
    #
    #  "#mailbox" is as specified in RFC 822 [RFC822]. This means that it
    #  consists of zero or more comma-separated mail addresses, possibly
    #  including "phrase" and "comment" components. Note that all URL
    #  reserved characters in "to" must be encoded: in particular,
    #  parentheses, commas, and the percent sign ("%"), which commonly occur
    #  in the "mailbox" syntax.
    #
    #  Within mailto URLs, the characters "?", "=", "&" are reserved.

    # ; RFC 6068
    # hfields      = "?" hfield *( "&" hfield )
    # hfield       = hfname "=" hfvalue
    # hfname       = *qchar
    # hfvalue      = *qchar
    # qchar        = unreserved / pct-encoded / some-delims
    # some-delims  = "!" / "$" / "'" / "(" / ")" / "*"
    #              / "+" / "," / ";" / ":" / "@"
    #
    # ; RFC3986
    # unreserved   = ALPHA / DIGIT / "-" / "." / "_" / "~"
    # pct-encoded  = "%" HEXDIG HEXDIG
    HEADER_REGEXP  = /\A(?<hfield>(?:%\h\h|[!$'-.0-;@-Z_a-z~])*=(?:%\h\h|[!$'-.0-;@-Z_a-z~])*)(?:&\g<hfield>)*\z/
    # practical regexp for email address
    # https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
    EMAIL_REGEXP = /\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/
    # :startdoc:

    #
    # == Description
    #
    # Creates a new Gem::URI::MailTo object from components, with syntax checking.
    #
    # Components can be provided as an Array or Hash. If an Array is used,
    # the components must be supplied as <code>[to, headers]</code>.
    #
    # If a Hash is used, the keys are the component names preceded by colons.
    #
    # The headers can be supplied as a pre-encoded string, such as
    # <code>"subject=subscribe&cc=address"</code>, or as an Array of Arrays
    # like <code>[['subject', 'subscribe'], ['cc', 'address']]</code>.
    #
    # Examples:
    #
    #    require 'rubygems/vendor/uri/lib/uri'
    #
    #    m1 = Gem::URI::MailTo.build(['joe@example.com', 'subject=Ruby'])
    #    m1.to_s  # => "mailto:joe@example.com?subject=Ruby"
    #
    #    m2 = Gem::URI::MailTo.build(['john@example.com', [['Subject', 'Ruby'], ['Cc', 'jack@example.com']]])
    #    m2.to_s  # => "mailto:john@example.com?Subject=Ruby&Cc=jack@example.com"
    #
    #    m3 = Gem::URI::MailTo.build({:to => 'listman@example.com', :headers => [['subject', 'subscribe']]})
    #    m3.to_s  # => "mailto:listman@example.com?subject=subscribe"
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)

      case tmp[:to]
      when Array
        tmp[:opaque] = tmp[:to].join(',')
      when String
        tmp[:opaque] = tmp[:to].dup
      else
        tmp[:opaque] = ''
      end

      if tmp[:headers]
        query =
          case tmp[:headers]
          when Array
            tmp[:headers].collect { |x|
              if x.kind_of?(Array)
                x[0] + '=' + x[1..-1].join
              else
                x.to_s
              end
            }.join('&')
          when Hash
            tmp[:headers].collect { |h,v|
              h + '=' + v
            }.join('&')
          else
            tmp[:headers].to_s
          end
        unless query.empty?
          tmp[:opaque] << '?' << query
        end
      end

      super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Gem::URI::MailTo object from generic URL components with
    # no syntax checking.
    #
    # This method is usually called from Gem::URI::parse, which checks
    # the validity of each component.
    #
    def initialize(*arg)
      super(*arg)

      @to = nil
      @headers = []

      # The RFC3986 parser does not normally populate opaque
      @opaque = "?#{@query}" if @query && !@opaque

      unless @opaque
        raise InvalidComponentError,
          "missing opaque part for mailto URL"
      end
      to, header = @opaque.split('?', 2)
      # allow semicolon as a addr-spec separator
      # http://support.microsoft.com/kb/820868
      unless /\A(?:[^@,;]+@[^@,;]+(?:\z|[,;]))*\z/ =~ to
        raise InvalidComponentError,
          "unrecognised opaque part for mailtoURL: #{@opaque}"
      end

      if arg[10] # arg_check
        self.to = to
        self.headers = header
      else
        set_to(to)
        set_headers(header)
      end
    end

    # The primary e-mail address of the URL, as a String.
    attr_reader :to

    # E-mail headers set by the URL, as an Array of Arrays.
    attr_reader :headers

    # Checks the to +v+ component.
    def check_to(v)
      return true unless v
      return true if v.size == 0

      v.split(/[,;]/).each do |addr|
        # check url safety as path-rootless
        if /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*\z/ !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as Gem::URI #{addr.dump}"
        end

        # check addr-spec
        # don't s/\+/ /g
        addr.gsub!(/%\h\h/, Gem::URI::TBLDECWWWCOMP_)
        if EMAIL_REGEXP !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as uri-escaped addr-spec #{addr.dump}"
        end
      end

      true
    end
    private :check_to

    # Private setter for to +v+.
    def set_to(v)
      @to = v
    end
    protected :set_to

    # Setter for to +v+.
    def to=(v)
      check_to(v)
      set_to(v)
      v
    end

    # Checks the headers +v+ component against either
    # * HEADER_REGEXP
    def check_headers(v)
      return true unless v
      return true if v.size == 0
      if HEADER_REGEXP !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      true
    end
    private :check_headers

    # Private setter for headers +v+.
    def set_headers(v)
      @headers = []
      if v
        v.split('&').each do |x|
          @headers << x.split(/=/, 2)
        end
      end
    end
    protected :set_headers

    # Setter for headers +v+.
    def headers=(v)
      check_headers(v)
      set_headers(v)
      v
    end

    # Constructs String from Gem::URI.
    def to_s
      @scheme + ':' +
        if @to
          @to
        else
          ''
        end +
        if @headers.size > 0
          '?' + @headers.collect{|x| x.join('=')}.join('&')
        else
          ''
        end +
        if @fragment
          '#' + @fragment
        else
          ''
        end
    end

    # Returns the RFC822 e-mail text equivalent of the URL, as a String.
    #
    # Example:
    #
    #   require 'rubygems/vendor/uri/lib/uri'
    #
    #   uri = Gem::URI.parse("mailto:ruby-list@ruby-lang.org?Subject=subscribe&cc=myaddr")
    #   uri.to_mailtext
    #   # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"
    #
    def to_mailtext
      to = Gem::URI.decode_www_form_component(@to)
      head = ''
      body = ''
      @headers.each do |x|
        case x[0]
        when 'body'
          body = Gem::URI.decode_www_form_component(x[1])
        when 'to'
          to << ', ' + Gem::URI.decode_www_form_component(x[1])
        else
          head << Gem::URI.decode_www_form_component(x[0]).capitalize + ': ' +
            Gem::URI.decode_www_form_component(x[1])  + "\n"
        end
      end

      "To: #{to}
#{head}
#{body}
"
    end
    alias to_rfc822text to_mailtext
  end

  register_scheme 'MAILTO', MailTo
end
PK)J[H�)<''1share/rubygems/rubygems/vendor/uri/lib/uri/wss.rbnu�[���# frozen_string_literal: false
# = uri/wss.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'ws'

module Gem::URI

  # The default port for WSS URIs is 443, and the scheme is 'wss:' rather
  # than 'ws:'. Other than that, WSS URIs are identical to WS URIs;
  # see Gem::URI::WS.
  class WSS < WS
    # A Default port of 443 for Gem::URI::WSS
    DEFAULT_PORT = 443
  end

  register_scheme 'WSS', WSS
end
PK)J[N�}d]	]	2share/rubygems/rubygems/vendor/uri/lib/uri/file.rbnu�[���# frozen_string_literal: true

require_relative 'generic'

module Gem::URI

  #
  # The "file" Gem::URI is defined by RFC8089.
  #
  class File < Generic
    # A Default port of nil for Gem::URI::File.
    DEFAULT_PORT = nil

    #
    # An Array of the available components for Gem::URI::File.
    #
    COMPONENT = [
      :scheme,
      :host,
      :path
    ].freeze

    #
    # == Description
    #
    # Creates a new Gem::URI::File object from components, with syntax checking.
    #
    # The components accepted are +host+ and +path+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, path]</code>.
    #
    # A path from e.g. the File class should be escaped before
    # being passed.
    #
    # Examples:
    #
    #     require 'rubygems/vendor/uri/lib/uri'
    #
    #     uri1 = Gem::URI::File.build(['host.example.com', '/path/file.zip'])
    #     uri1.to_s  # => "file://host.example.com/path/file.zip"
    #
    #     uri2 = Gem::URI::File.build({:host => 'host.example.com',
    #       :path => '/ruby/src'})
    #     uri2.to_s  # => "file://host.example.com/ruby/src"
    #
    #     uri3 = Gem::URI::File.build({:path => Gem::URI::escape('/path/my file.txt')})
    #     uri3.to_s  # => "file:///path/my%20file.txt"
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)
      super(tmp)
    end

    # Protected setter for the host component +v+.
    #
    # See also Gem::URI::Generic.host=.
    #
    def set_host(v)
      v = "" if v.nil? || v == "localhost"
      @host = v
    end

    # do nothing
    def set_port(v)
    end

    # raise InvalidURIError
    def check_userinfo(user)
      raise Gem::URI::InvalidURIError, "cannot set userinfo for file Gem::URI"
    end

    # raise InvalidURIError
    def check_user(user)
      raise Gem::URI::InvalidURIError, "cannot set user for file Gem::URI"
    end

    # raise InvalidURIError
    def check_password(user)
      raise Gem::URI::InvalidURIError, "cannot set password for file Gem::URI"
    end

    # do nothing
    def set_userinfo(v)
    end

    # do nothing
    def set_user(v)
    end

    # do nothing
    def set_password(v)
    end
  end

  register_scheme 'FILE', File
end
PK)J[r��	;	;	0share/rubygems/rubygems/vendor/uri/lib/uri/ws.rbnu�[���# frozen_string_literal: false
# = uri/ws.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'generic'

module Gem::URI

  #
  # The syntax of WS URIs is defined in RFC6455 section 3.
  #
  # Note that the Ruby Gem::URI library allows WS URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class WS < Generic
    # A Default port of 80 for Gem::URI::WS.
    DEFAULT_PORT = 80

    # An Array of the available components for Gem::URI::WS.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
    ].freeze

    #
    # == Description
    #
    # Creates a new Gem::URI::WS object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, and query.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query]</code>.
    #
    # Example:
    #
    #     uri = Gem::URI::WS.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = Gem::URI::WS.build([nil, "www.example.com", nil, "/path", "query"])
    #
    # Currently, if passed userinfo components this method generates
    # invalid WS URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for a WS Gem::URI, as required by Net::HTTP::Get.
    #
    # If the Gem::URI contains a query, the full path is Gem::URI#path + '?' + Gem::URI#query.
    # Otherwise, the path is simply Gem::URI#path.
    #
    # Example:
    #
    #     uri = Gem::URI::WS.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end
  end

  register_scheme 'WS', WS
end
PK)J[���k�k4share/rubygems/rubygems/vendor/uri/lib/uri/common.rbnu�[���# frozen_string_literal: true
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative "rfc2396_parser"
require_relative "rfc3986_parser"

module Gem::URI
  # The default parser instance for RFC 2396.
  RFC2396_PARSER = RFC2396_Parser.new
  Ractor.make_shareable(RFC2396_PARSER) if defined?(Ractor)

  # The default parser instance for RFC 3986.
  RFC3986_PARSER = RFC3986_Parser.new
  Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor)

  # The default parser instance.
  DEFAULT_PARSER = RFC3986_PARSER
  Ractor.make_shareable(DEFAULT_PARSER) if defined?(Ractor)

  # Set the default parser instance.
  def self.parser=(parser = RFC3986_PARSER)
    remove_const(:Parser) if defined?(::Gem::URI::Parser)
    const_set("Parser", parser.class)

    remove_const(:REGEXP) if defined?(::Gem::URI::REGEXP)
    remove_const(:PATTERN) if defined?(::Gem::URI::PATTERN)
    if Parser == RFC2396_Parser
      const_set("REGEXP", Gem::URI::RFC2396_REGEXP)
      const_set("PATTERN", Gem::URI::RFC2396_REGEXP::PATTERN)
    end

    Parser.new.regexp.each_pair do |sym, str|
      remove_const(sym) if const_defined?(sym, false)
      const_set(sym, str)
    end
  end
  self.parser = RFC3986_PARSER

  def self.const_missing(const) # :nodoc:
    if const == :REGEXP
      warn "Gem::URI::REGEXP is obsolete. Use Gem::URI::RFC2396_REGEXP explicitly.", uplevel: 1 if $VERBOSE
      Gem::URI::RFC2396_REGEXP
    elsif value = RFC2396_PARSER.regexp[const]
      warn "Gem::URI::#{const} is obsolete. Use RFC2396_PARSER.regexp[#{const.inspect}] explicitly.", uplevel: 1 if $VERBOSE
      value
    elsif value = RFC2396_Parser.const_get(const)
      warn "Gem::URI::#{const} is obsolete. Use RFC2396_Parser::#{const} explicitly.", uplevel: 1 if $VERBOSE
      value
    else
      super
    end
  end

  module Util # :nodoc:
    def make_components_hash(klass, array_hash)
      tmp = {}
      if array_hash.kind_of?(Array) &&
          array_hash.size == klass.component.size - 1
        klass.component[1..-1].each_index do |i|
          begin
            tmp[klass.component[i + 1]] = array_hash[i].clone
          rescue TypeError
            tmp[klass.component[i + 1]] = array_hash[i]
          end
        end

      elsif array_hash.kind_of?(Hash)
        array_hash.each do |key, value|
          begin
            tmp[key] = value.clone
          rescue TypeError
            tmp[key] = value
          end
        end
      else
        raise ArgumentError,
          "expected Array of or Hash of components of #{klass} (#{klass.component[1..-1].join(', ')})"
      end
      tmp[:scheme] = klass.to_s.sub(/\A.*::/, '').downcase

      return tmp
    end
    module_function :make_components_hash
  end

  module Schemes # :nodoc:
  end
  private_constant :Schemes

  # Registers the given +klass+ as the class to be instantiated
  # when parsing a \Gem::URI with the given +scheme+:
  #
  #   Gem::URI.register_scheme('MS_SEARCH', Gem::URI::Generic) # => Gem::URI::Generic
  #   Gem::URI.scheme_list['MS_SEARCH']                   # => Gem::URI::Generic
  #
  # Note that after calling String#upcase on +scheme+, it must be a valid
  # constant name.
  def self.register_scheme(scheme, klass)
    Schemes.const_set(scheme.to_s.upcase, klass)
  end

  # Returns a hash of the defined schemes:
  #
  #   Gem::URI.scheme_list
  #   # =>
  #   {"MAILTO"=>Gem::URI::MailTo,
  #    "LDAPS"=>Gem::URI::LDAPS,
  #    "WS"=>Gem::URI::WS,
  #    "HTTP"=>Gem::URI::HTTP,
  #    "HTTPS"=>Gem::URI::HTTPS,
  #    "LDAP"=>Gem::URI::LDAP,
  #    "FILE"=>Gem::URI::File,
  #    "FTP"=>Gem::URI::FTP}
  #
  # Related: Gem::URI.register_scheme.
  def self.scheme_list
    Schemes.constants.map { |name|
      [name.to_s.upcase, Schemes.const_get(name)]
    }.to_h
  end

  INITIAL_SCHEMES = scheme_list
  private_constant :INITIAL_SCHEMES
  Ractor.make_shareable(INITIAL_SCHEMES) if defined?(Ractor)

  # Returns a new object constructed from the given +scheme+, +arguments+,
  # and +default+:
  #
  # - The new object is an instance of <tt>Gem::URI.scheme_list[scheme.upcase]</tt>.
  # - The object is initialized by calling the class initializer
  #   using +scheme+ and +arguments+.
  #   See Gem::URI::Generic.new.
  #
  # Examples:
  #
  #   values = ['john.doe', 'www.example.com', '123', nil, '/forum/questions/', nil, 'tag=networking&order=newest', 'top']
  #   Gem::URI.for('https', *values)
  #   # => #<Gem::URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #   Gem::URI.for('foo', *values, default: Gem::URI::HTTP)
  #   # => #<Gem::URI::HTTP foo://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #
  def self.for(scheme, *arguments, default: Generic)
    const_name = scheme.to_s.upcase

    uri_class = INITIAL_SCHEMES[const_name]
    uri_class ||= if /\A[A-Z]\w*\z/.match?(const_name) && Schemes.const_defined?(const_name, false)
      Schemes.const_get(const_name, false)
    end
    uri_class ||= default

    return uri_class.new(scheme, *arguments)
  end

  #
  # Base class for all Gem::URI exceptions.
  #
  class Error < StandardError; end
  #
  # Not a Gem::URI.
  #
  class InvalidURIError < Error; end
  #
  # Not a Gem::URI component.
  #
  class InvalidComponentError < Error; end
  #
  # Gem::URI is valid, bad usage is not.
  #
  class BadURIError < Error; end

  # Returns a 9-element array representing the parts of the \Gem::URI
  # formed from the string +uri+;
  # each array element is a string or +nil+:
  #
  #   names = %w[scheme userinfo host port registry path opaque query fragment]
  #   values = Gem::URI.split('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   names.zip(values)
  #   # =>
  #   [["scheme", "https"],
  #    ["userinfo", "john.doe"],
  #    ["host", "www.example.com"],
  #    ["port", "123"],
  #    ["registry", nil],
  #    ["path", "/forum/questions/"],
  #    ["opaque", nil],
  #    ["query", "tag=networking&order=newest"],
  #    ["fragment", "top"]]
  #
  def self.split(uri)
    DEFAULT_PARSER.split(uri)
  end

  # Returns a new \Gem::URI object constructed from the given string +uri+:
  #
  #   Gem::URI.parse('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   # => #<Gem::URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #   Gem::URI.parse('http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   # => #<Gem::URI::HTTP http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #
  # It's recommended to first ::escape string +uri+
  # if it may contain invalid Gem::URI characters.
  #
  def self.parse(uri)
    DEFAULT_PARSER.parse(uri)
  end

  # Merges the given Gem::URI strings +str+
  # per {RFC 2396}[https://www.rfc-editor.org/rfc/rfc2396.html].
  #
  # Each string in +str+ is converted to an
  # {RFC3986 Gem::URI}[https://www.rfc-editor.org/rfc/rfc3986.html] before being merged.
  #
  # Examples:
  #
  #   Gem::URI.join("http://example.com/","main.rbx")
  #   # => #<Gem::URI::HTTP http://example.com/main.rbx>
  #
  #   Gem::URI.join('http://example.com', 'foo')
  #   # => #<Gem::URI::HTTP http://example.com/foo>
  #
  #   Gem::URI.join('http://example.com', '/foo', '/bar')
  #   # => #<Gem::URI::HTTP http://example.com/bar>
  #
  #   Gem::URI.join('http://example.com', '/foo', 'bar')
  #   # => #<Gem::URI::HTTP http://example.com/bar>
  #
  #   Gem::URI.join('http://example.com', '/foo/', 'bar')
  #   # => #<Gem::URI::HTTP http://example.com/foo/bar>
  #
  def self.join(*str)
    DEFAULT_PARSER.join(*str)
  end

  #
  # == Synopsis
  #
  #   Gem::URI::extract(str[, schemes][,&blk])
  #
  # == Args
  #
  # +str+::
  #   String to extract URIs from.
  # +schemes+::
  #   Limit Gem::URI matching to specific schemes.
  #
  # == Description
  #
  # Extracts URIs from a string. If block given, iterates through all matched URIs.
  # Returns nil if block given or array with matches.
  #
  # == Usage
  #
  #   require "rubygems/vendor/uri/lib/uri"
  #
  #   Gem::URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
  #   # => ["http://foo.example.com/bla", "mailto:test@example.com"]
  #
  def self.extract(str, schemes = nil, &block) # :nodoc:
    warn "Gem::URI.extract is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.extract(str, schemes, &block)
  end

  #
  # == Synopsis
  #
  #   Gem::URI::regexp([match_schemes])
  #
  # == Args
  #
  # +match_schemes+::
  #   Array of schemes. If given, resulting regexp matches to URIs
  #   whose scheme is one of the match_schemes.
  #
  # == Description
  #
  # Returns a Regexp object which matches to Gem::URI-like strings.
  # The Regexp object returned by this method includes arbitrary
  # number of capture group (parentheses).  Never rely on its number.
  #
  # == Usage
  #
  #   require 'rubygems/vendor/uri/lib/uri'
  #
  #   # extract first Gem::URI from html_string
  #   html_string.slice(Gem::URI.regexp)
  #
  #   # remove ftp URIs
  #   html_string.sub(Gem::URI.regexp(['ftp']), '')
  #
  #   # You should not rely on the number of parentheses
  #   html_string.scan(Gem::URI.regexp) do |*matches|
  #     p $&
  #   end
  #
  def self.regexp(schemes = nil)# :nodoc:
    warn "Gem::URI.regexp is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.make_regexp(schemes)
  end

  TBLENCWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
  end
  TBLENCURICOMP_ = TBLENCWWWCOMP_.dup.freeze # :nodoc:
  TBLENCWWWCOMP_[' '] = '+'
  TBLENCWWWCOMP_.freeze
  TBLDECWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    h, l = i>>4, i&15
    TBLDECWWWCOMP_[-('%%%X%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%X%x' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%x' % [h, l])] = -i.chr
  end
  TBLDECWWWCOMP_['+'] = ' '
  TBLDECWWWCOMP_.freeze

  # Returns a URL-encoded string derived from the given string +str+.
  #
  # The returned string:
  #
  # - Preserves:
  #
  #   - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
  #   - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
  #     and <tt>'0'..'9'</tt>.
  #
  #   Example:
  #
  #     Gem::URI.encode_www_form_component('*.-_azAZ09')
  #     # => "*.-_azAZ09"
  #
  # - Converts:
  #
  #   - Character <tt>' '</tt> to character <tt>'+'</tt>.
  #   - Any other character to "percent notation";
  #     the percent notation for character <i>c</i> is <tt>'%%%X' % c.ord</tt>.
  #
  #   Example:
  #
  #     Gem::URI.encode_www_form_component('Here are some punctuation characters: ,;?:')
  #     # => "Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A"
  #
  # Encoding:
  #
  # - If +str+ has encoding Encoding::ASCII_8BIT, argument +enc+ is ignored.
  # - Otherwise +str+ is converted first to Encoding::UTF_8
  #   (with suitable character replacements),
  #   and then to encoding +enc+.
  #
  # In either case, the returned string has forced encoding Encoding::US_ASCII.
  #
  # Related: Gem::URI.encode_uri_component (encodes <tt>' '</tt> as <tt>'%20'</tt>).
  def self.encode_www_form_component(str, enc=nil)
    _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCWWWCOMP_, str, enc)
  end

  # Returns a string decoded from the given \URL-encoded string +str+.
  #
  # The given string is first encoded as Encoding::ASCII-8BIT (using String#b),
  # then decoded (as below), and finally force-encoded to the given encoding +enc+.
  #
  # The returned string:
  #
  # - Preserves:
  #
  #   - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
  #   - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
  #     and <tt>'0'..'9'</tt>.
  #
  #   Example:
  #
  #     Gem::URI.decode_www_form_component('*.-_azAZ09')
  #     # => "*.-_azAZ09"
  #
  # - Converts:
  #
  #   - Character <tt>'+'</tt> to character <tt>' '</tt>.
  #   - Each "percent notation" to an ASCII character.
  #
  #   Example:
  #
  #     Gem::URI.decode_www_form_component('Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A')
  #     # => "Here are some punctuation characters: ,;?:"
  #
  # Related: Gem::URI.decode_uri_component (preserves <tt>'+'</tt>).
  def self.decode_www_form_component(str, enc=Encoding::UTF_8)
    _decode_uri_component(/\+|%\h\h/, str, enc)
  end

  # Like Gem::URI.encode_www_form_component, except that <tt>' '</tt> (space)
  # is encoded as <tt>'%20'</tt> (instead of <tt>'+'</tt>).
  def self.encode_uri_component(str, enc=nil)
    _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCURICOMP_, str, enc)
  end

  # Like Gem::URI.decode_www_form_component, except that <tt>'+'</tt> is preserved.
  def self.decode_uri_component(str, enc=Encoding::UTF_8)
    _decode_uri_component(/%\h\h/, str, enc)
  end

  def self._encode_uri_component(regexp, table, str, enc)
    str = str.to_s.dup
    if str.encoding != Encoding::ASCII_8BIT
      if enc && enc != Encoding::ASCII_8BIT
        str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace)
        str.encode!(enc, fallback: ->(x){"&##{x.ord};"})
      end
      str.force_encoding(Encoding::ASCII_8BIT)
    end
    str.gsub!(regexp, table)
    str.force_encoding(Encoding::US_ASCII)
  end
  private_class_method :_encode_uri_component

  def self._decode_uri_component(regexp, str, enc)
    raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/.match?(str)
    str.b.gsub(regexp, TBLDECWWWCOMP_).force_encoding(enc)
  end
  private_class_method :_decode_uri_component

  # Returns a URL-encoded string derived from the given
  # {Enumerable}[rdoc-ref:Enumerable@Enumerable+in+Ruby+Classes]
  # +enum+.
  #
  # The result is suitable for use as form data
  # for an \HTTP request whose <tt>Content-Type</tt> is
  # <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The returned string consists of the elements of +enum+,
  # each converted to one or more URL-encoded strings,
  # and all joined with character <tt>'&'</tt>.
  #
  # Simple examples:
  #
  #   Gem::URI.encode_www_form([['foo', 0], ['bar', 1], ['baz', 2]])
  #   # => "foo=0&bar=1&baz=2"
  #   Gem::URI.encode_www_form({foo: 0, bar: 1, baz: 2})
  #   # => "foo=0&bar=1&baz=2"
  #
  # The returned string is formed using method Gem::URI.encode_www_form_component,
  # which converts certain characters:
  #
  #   Gem::URI.encode_www_form('f#o': '/', 'b-r': '$', 'b z': '@')
  #   # => "f%23o=%2F&b-r=%24&b+z=%40"
  #
  # When +enum+ is Array-like, each element +ele+ is converted to a field:
  #
  # - If +ele+ is an array of two or more elements,
  #   the field is formed from its first two elements
  #   (and any additional elements are ignored):
  #
  #     name = Gem::URI.encode_www_form_component(ele[0], enc)
  #     value = Gem::URI.encode_www_form_component(ele[1], enc)
  #     "#{name}=#{value}"
  #
  #   Examples:
  #
  #     Gem::URI.encode_www_form([%w[foo bar], %w[baz bat bah]])
  #     # => "foo=bar&baz=bat"
  #     Gem::URI.encode_www_form([['foo', 0], ['bar', :baz, 'bat']])
  #     # => "foo=0&bar=baz"
  #
  # - If +ele+ is an array of one element,
  #   the field is formed from <tt>ele[0]</tt>:
  #
  #     Gem::URI.encode_www_form_component(ele[0])
  #
  #   Example:
  #
  #     Gem::URI.encode_www_form([['foo'], [:bar], [0]])
  #     # => "foo&bar&0"
  #
  # - Otherwise the field is formed from +ele+:
  #
  #     Gem::URI.encode_www_form_component(ele)
  #
  #   Example:
  #
  #     Gem::URI.encode_www_form(['foo', :bar, 0])
  #     # => "foo&bar&0"
  #
  # The elements of an Array-like +enum+ may be mixture:
  #
  #   Gem::URI.encode_www_form([['foo', 0], ['bar', 1, 2], ['baz'], :bat])
  #   # => "foo=0&bar=1&baz&bat"
  #
  # When +enum+ is Hash-like,
  # each +key+/+value+ pair is converted to one or more fields:
  #
  # - If +value+ is
  #   {Array-convertible}[rdoc-ref:implicit_conversion.rdoc@Array-Convertible+Objects],
  #   each element +ele+ in +value+ is paired with +key+ to form a field:
  #
  #     name = Gem::URI.encode_www_form_component(key, enc)
  #     value = Gem::URI.encode_www_form_component(ele, enc)
  #     "#{name}=#{value}"
  #
  #   Example:
  #
  #     Gem::URI.encode_www_form({foo: [:bar, 1], baz: [:bat, :bam, 2]})
  #     # => "foo=bar&foo=1&baz=bat&baz=bam&baz=2"
  #
  # - Otherwise, +key+ and +value+ are paired to form a field:
  #
  #     name = Gem::URI.encode_www_form_component(key, enc)
  #     value = Gem::URI.encode_www_form_component(value, enc)
  #     "#{name}=#{value}"
  #
  #   Example:
  #
  #     Gem::URI.encode_www_form({foo: 0, bar: 1, baz: 2})
  #     # => "foo=0&bar=1&baz=2"
  #
  # The elements of a Hash-like +enum+ may be mixture:
  #
  #   Gem::URI.encode_www_form({foo: [0, 1], bar: 2})
  #   # => "foo=0&foo=1&bar=2"
  #
  def self.encode_www_form(enum, enc=nil)
    enum.map do |k,v|
      if v.nil?
        encode_www_form_component(k, enc)
      elsif v.respond_to?(:to_ary)
        v.to_ary.map do |w|
          str = encode_www_form_component(k, enc)
          unless w.nil?
            str << '='
            str << encode_www_form_component(w, enc)
          end
        end.join('&')
      else
        str = encode_www_form_component(k, enc)
        str << '='
        str << encode_www_form_component(v, enc)
      end
    end.join('&')
  end

  # Returns name/value pairs derived from the given string +str+,
  # which must be an ASCII string.
  #
  # The method may be used to decode the body of Net::HTTPResponse object +res+
  # for which <tt>res['Content-Type']</tt> is <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The returned data is an array of 2-element subarrays;
  # each subarray is a name/value pair (both are strings).
  # Each returned string has encoding +enc+,
  # and has had invalid characters removed via
  # {String#scrub}[rdoc-ref:String#scrub].
  #
  # A simple example:
  #
  #   Gem::URI.decode_www_form('foo=0&bar=1&baz')
  #   # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
  #
  # The returned strings have certain conversions,
  # similar to those performed in Gem::URI.decode_www_form_component:
  #
  #   Gem::URI.decode_www_form('f%23o=%2F&b-r=%24&b+z=%40')
  #   # => [["f#o", "/"], ["b-r", "$"], ["b z", "@"]]
  #
  # The given string may contain consecutive separators:
  #
  #   Gem::URI.decode_www_form('foo=0&&bar=1&&baz=2')
  #   # => [["foo", "0"], ["", ""], ["bar", "1"], ["", ""], ["baz", "2"]]
  #
  # A different separator may be specified:
  #
  #   Gem::URI.decode_www_form('foo=0--bar=1--baz', separator: '--')
  #   # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
  #
  def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_: false, isindex: false)
    raise ArgumentError, "the input of #{self.name}.#{__method__} must be ASCII only string" unless str.ascii_only?
    ary = []
    return ary if str.empty?
    enc = Encoding.find(enc)
    str.b.each_line(separator) do |string|
      string.chomp!(separator)
      key, sep, val = string.partition('=')
      if isindex
        if sep.empty?
          val = key
          key = +''
        end
        isindex = false
      end

      if use__charset_ and key == '_charset_' and e = get_encoding(val)
        enc = e
        use__charset_ = false
      end

      key.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      if val
        val.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      else
        val = +''
      end

      ary << [key, val]
    end
    ary.each do |k, v|
      k.force_encoding(enc)
      k.scrub!
      v.force_encoding(enc)
      v.scrub!
    end
    ary
  end

  private
=begin command for WEB_ENCODINGS_
  curl https://encoding.spec.whatwg.org/encodings.json|
  ruby -rjson -e 'H={}
  h={
    "shift_jis"=>"Windows-31J",
    "euc-jp"=>"cp51932",
    "iso-2022-jp"=>"cp50221",
    "x-mac-cyrillic"=>"macCyrillic",
  }
  JSON($<.read).map{|x|x["encodings"]}.flatten.each{|x|
    Encoding.find(n=h.fetch(n=x["name"].downcase,n))rescue next
    x["labels"].each{|y|H[y]=n}
  }
  puts "{"
  H.each{|k,v|puts %[  #{k.dump}=>#{v.dump},]}
  puts "}"
'
=end
  WEB_ENCODINGS_ = {
    "unicode-1-1-utf-8"=>"utf-8",
    "utf-8"=>"utf-8",
    "utf8"=>"utf-8",
    "866"=>"ibm866",
    "cp866"=>"ibm866",
    "csibm866"=>"ibm866",
    "ibm866"=>"ibm866",
    "csisolatin2"=>"iso-8859-2",
    "iso-8859-2"=>"iso-8859-2",
    "iso-ir-101"=>"iso-8859-2",
    "iso8859-2"=>"iso-8859-2",
    "iso88592"=>"iso-8859-2",
    "iso_8859-2"=>"iso-8859-2",
    "iso_8859-2:1987"=>"iso-8859-2",
    "l2"=>"iso-8859-2",
    "latin2"=>"iso-8859-2",
    "csisolatin3"=>"iso-8859-3",
    "iso-8859-3"=>"iso-8859-3",
    "iso-ir-109"=>"iso-8859-3",
    "iso8859-3"=>"iso-8859-3",
    "iso88593"=>"iso-8859-3",
    "iso_8859-3"=>"iso-8859-3",
    "iso_8859-3:1988"=>"iso-8859-3",
    "l3"=>"iso-8859-3",
    "latin3"=>"iso-8859-3",
    "csisolatin4"=>"iso-8859-4",
    "iso-8859-4"=>"iso-8859-4",
    "iso-ir-110"=>"iso-8859-4",
    "iso8859-4"=>"iso-8859-4",
    "iso88594"=>"iso-8859-4",
    "iso_8859-4"=>"iso-8859-4",
    "iso_8859-4:1988"=>"iso-8859-4",
    "l4"=>"iso-8859-4",
    "latin4"=>"iso-8859-4",
    "csisolatincyrillic"=>"iso-8859-5",
    "cyrillic"=>"iso-8859-5",
    "iso-8859-5"=>"iso-8859-5",
    "iso-ir-144"=>"iso-8859-5",
    "iso8859-5"=>"iso-8859-5",
    "iso88595"=>"iso-8859-5",
    "iso_8859-5"=>"iso-8859-5",
    "iso_8859-5:1988"=>"iso-8859-5",
    "arabic"=>"iso-8859-6",
    "asmo-708"=>"iso-8859-6",
    "csiso88596e"=>"iso-8859-6",
    "csiso88596i"=>"iso-8859-6",
    "csisolatinarabic"=>"iso-8859-6",
    "ecma-114"=>"iso-8859-6",
    "iso-8859-6"=>"iso-8859-6",
    "iso-8859-6-e"=>"iso-8859-6",
    "iso-8859-6-i"=>"iso-8859-6",
    "iso-ir-127"=>"iso-8859-6",
    "iso8859-6"=>"iso-8859-6",
    "iso88596"=>"iso-8859-6",
    "iso_8859-6"=>"iso-8859-6",
    "iso_8859-6:1987"=>"iso-8859-6",
    "csisolatingreek"=>"iso-8859-7",
    "ecma-118"=>"iso-8859-7",
    "elot_928"=>"iso-8859-7",
    "greek"=>"iso-8859-7",
    "greek8"=>"iso-8859-7",
    "iso-8859-7"=>"iso-8859-7",
    "iso-ir-126"=>"iso-8859-7",
    "iso8859-7"=>"iso-8859-7",
    "iso88597"=>"iso-8859-7",
    "iso_8859-7"=>"iso-8859-7",
    "iso_8859-7:1987"=>"iso-8859-7",
    "sun_eu_greek"=>"iso-8859-7",
    "csiso88598e"=>"iso-8859-8",
    "csisolatinhebrew"=>"iso-8859-8",
    "hebrew"=>"iso-8859-8",
    "iso-8859-8"=>"iso-8859-8",
    "iso-8859-8-e"=>"iso-8859-8",
    "iso-ir-138"=>"iso-8859-8",
    "iso8859-8"=>"iso-8859-8",
    "iso88598"=>"iso-8859-8",
    "iso_8859-8"=>"iso-8859-8",
    "iso_8859-8:1988"=>"iso-8859-8",
    "visual"=>"iso-8859-8",
    "csisolatin6"=>"iso-8859-10",
    "iso-8859-10"=>"iso-8859-10",
    "iso-ir-157"=>"iso-8859-10",
    "iso8859-10"=>"iso-8859-10",
    "iso885910"=>"iso-8859-10",
    "l6"=>"iso-8859-10",
    "latin6"=>"iso-8859-10",
    "iso-8859-13"=>"iso-8859-13",
    "iso8859-13"=>"iso-8859-13",
    "iso885913"=>"iso-8859-13",
    "iso-8859-14"=>"iso-8859-14",
    "iso8859-14"=>"iso-8859-14",
    "iso885914"=>"iso-8859-14",
    "csisolatin9"=>"iso-8859-15",
    "iso-8859-15"=>"iso-8859-15",
    "iso8859-15"=>"iso-8859-15",
    "iso885915"=>"iso-8859-15",
    "iso_8859-15"=>"iso-8859-15",
    "l9"=>"iso-8859-15",
    "iso-8859-16"=>"iso-8859-16",
    "cskoi8r"=>"koi8-r",
    "koi"=>"koi8-r",
    "koi8"=>"koi8-r",
    "koi8-r"=>"koi8-r",
    "koi8_r"=>"koi8-r",
    "koi8-ru"=>"koi8-u",
    "koi8-u"=>"koi8-u",
    "dos-874"=>"windows-874",
    "iso-8859-11"=>"windows-874",
    "iso8859-11"=>"windows-874",
    "iso885911"=>"windows-874",
    "tis-620"=>"windows-874",
    "windows-874"=>"windows-874",
    "cp1250"=>"windows-1250",
    "windows-1250"=>"windows-1250",
    "x-cp1250"=>"windows-1250",
    "cp1251"=>"windows-1251",
    "windows-1251"=>"windows-1251",
    "x-cp1251"=>"windows-1251",
    "ansi_x3.4-1968"=>"windows-1252",
    "ascii"=>"windows-1252",
    "cp1252"=>"windows-1252",
    "cp819"=>"windows-1252",
    "csisolatin1"=>"windows-1252",
    "ibm819"=>"windows-1252",
    "iso-8859-1"=>"windows-1252",
    "iso-ir-100"=>"windows-1252",
    "iso8859-1"=>"windows-1252",
    "iso88591"=>"windows-1252",
    "iso_8859-1"=>"windows-1252",
    "iso_8859-1:1987"=>"windows-1252",
    "l1"=>"windows-1252",
    "latin1"=>"windows-1252",
    "us-ascii"=>"windows-1252",
    "windows-1252"=>"windows-1252",
    "x-cp1252"=>"windows-1252",
    "cp1253"=>"windows-1253",
    "windows-1253"=>"windows-1253",
    "x-cp1253"=>"windows-1253",
    "cp1254"=>"windows-1254",
    "csisolatin5"=>"windows-1254",
    "iso-8859-9"=>"windows-1254",
    "iso-ir-148"=>"windows-1254",
    "iso8859-9"=>"windows-1254",
    "iso88599"=>"windows-1254",
    "iso_8859-9"=>"windows-1254",
    "iso_8859-9:1989"=>"windows-1254",
    "l5"=>"windows-1254",
    "latin5"=>"windows-1254",
    "windows-1254"=>"windows-1254",
    "x-cp1254"=>"windows-1254",
    "cp1255"=>"windows-1255",
    "windows-1255"=>"windows-1255",
    "x-cp1255"=>"windows-1255",
    "cp1256"=>"windows-1256",
    "windows-1256"=>"windows-1256",
    "x-cp1256"=>"windows-1256",
    "cp1257"=>"windows-1257",
    "windows-1257"=>"windows-1257",
    "x-cp1257"=>"windows-1257",
    "cp1258"=>"windows-1258",
    "windows-1258"=>"windows-1258",
    "x-cp1258"=>"windows-1258",
    "x-mac-cyrillic"=>"macCyrillic",
    "x-mac-ukrainian"=>"macCyrillic",
    "chinese"=>"gbk",
    "csgb2312"=>"gbk",
    "csiso58gb231280"=>"gbk",
    "gb2312"=>"gbk",
    "gb_2312"=>"gbk",
    "gb_2312-80"=>"gbk",
    "gbk"=>"gbk",
    "iso-ir-58"=>"gbk",
    "x-gbk"=>"gbk",
    "gb18030"=>"gb18030",
    "big5"=>"big5",
    "big5-hkscs"=>"big5",
    "cn-big5"=>"big5",
    "csbig5"=>"big5",
    "x-x-big5"=>"big5",
    "cseucpkdfmtjapanese"=>"cp51932",
    "euc-jp"=>"cp51932",
    "x-euc-jp"=>"cp51932",
    "csiso2022jp"=>"cp50221",
    "iso-2022-jp"=>"cp50221",
    "csshiftjis"=>"Windows-31J",
    "ms932"=>"Windows-31J",
    "ms_kanji"=>"Windows-31J",
    "shift-jis"=>"Windows-31J",
    "shift_jis"=>"Windows-31J",
    "sjis"=>"Windows-31J",
    "windows-31j"=>"Windows-31J",
    "x-sjis"=>"Windows-31J",
    "cseuckr"=>"euc-kr",
    "csksc56011987"=>"euc-kr",
    "euc-kr"=>"euc-kr",
    "iso-ir-149"=>"euc-kr",
    "korean"=>"euc-kr",
    "ks_c_5601-1987"=>"euc-kr",
    "ks_c_5601-1989"=>"euc-kr",
    "ksc5601"=>"euc-kr",
    "ksc_5601"=>"euc-kr",
    "windows-949"=>"euc-kr",
    "utf-16be"=>"utf-16be",
    "utf-16"=>"utf-16le",
    "utf-16le"=>"utf-16le",
  } # :nodoc:
  Ractor.make_shareable(WEB_ENCODINGS_) if defined?(Ractor)

  # :nodoc:
  # return encoding or nil
  # http://encoding.spec.whatwg.org/#concept-encoding-get
  def self.get_encoding(label)
    Encoding.find(WEB_ENCODINGS_[label.to_str.strip.downcase]) rescue nil
  end
end # module Gem::URI

module Gem

  #
  # Returns a \Gem::URI object derived from the given +uri+,
  # which may be a \Gem::URI string or an existing \Gem::URI object:
  #
  #   # Returns a new Gem::URI.
  #   uri = Gem::URI('http://github.com/ruby/ruby')
  #   # => #<Gem::URI::HTTP http://github.com/ruby/ruby>
  #   # Returns the given Gem::URI.
  #   Gem::URI(uri)
  #   # => #<Gem::URI::HTTP http://github.com/ruby/ruby>
  #
  def URI(uri)
    if uri.is_a?(Gem::URI::Generic)
      uri
    elsif uri = String.try_convert(uri)
      Gem::URI.parse(uri)
    else
      raise ArgumentError,
        "bad argument (expected Gem::URI object or Gem::URI string)"
    end
  end
  module_function :URI
end
PK)J[�����2share/rubygems/rubygems/vendor/uri/lib/uri/http.rbnu�[���# frozen_string_literal: false
# = uri/http.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Gem::URI for general documentation
#

require_relative 'generic'

module Gem::URI

  #
  # The syntax of HTTP URIs is defined in RFC1738 section 3.3.
  #
  # Note that the Ruby Gem::URI library allows HTTP URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class HTTP < Generic
    # A Default port of 80 for Gem::URI::HTTP.
    DEFAULT_PORT = 80

    # An Array of the available components for Gem::URI::HTTP.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
      fragment
    ].freeze

    #
    # == Description
    #
    # Creates a new Gem::URI::HTTP object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, query, and
    # fragment.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query, fragment]</code>.
    #
    # Example:
    #
    #     uri = Gem::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = Gem::URI::HTTP.build([nil, "www.example.com", nil, "/path",
    #       "query", 'fragment'])
    #
    # Currently, if passed userinfo components this method generates
    # invalid HTTP URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for an HTTP request, as required by Net::HTTP::Get.
    #
    # If the Gem::URI contains a query, the full path is Gem::URI#path + '?' + Gem::URI#query.
    # Otherwise, the path is simply Gem::URI#path.
    #
    # Example:
    #
    #     uri = Gem::URI::HTTP.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end

    #
    # == Description
    #
    # Returns the authority for an HTTP uri, as defined in
    # https://www.rfc-editor.org/rfc/rfc3986#section-3.2.
    #
    #
    # Example:
    #
    #     Gem::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').authority #=> "www.example.com"
    #     Gem::URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').authority #=> "www.example.com:8000"
    #     Gem::URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').authority #=> "www.example.com"
    #
    def authority
      if port == default_port
        host
      else
        "#{host}:#{port}"
      end
    end

    #
    # == Description
    #
    # Returns the origin for an HTTP uri, as defined in
    # https://www.rfc-editor.org/rfc/rfc6454.
    #
    #
    # Example:
    #
    #     Gem::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').origin #=> "http://www.example.com"
    #     Gem::URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').origin #=> "http://www.example.com:8000"
    #     Gem::URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').origin #=> "http://www.example.com"
    #     Gem::URI::HTTPS.build(host: 'www.example.com', path: '/foo/bar').origin #=> "https://www.example.com"
    #
    def origin
      "#{scheme}://#{authority}"
    end
  end

  register_scheme 'HTTP', HTTP
end
PK)J[k��&
&
-share/rubygems/rubygems/vendor/uri/lib/uri.rbnu�[���# frozen_string_literal: false
# Gem::URI is a module providing classes to handle Uniform Resource Identifiers
# (RFC2396[https://www.rfc-editor.org/rfc/rfc2396]).
#
# == Features
#
# * Uniform way of handling URIs.
# * Flexibility to introduce custom Gem::URI schemes.
# * Flexibility to have an alternate Gem::URI::Parser (or just different patterns
#   and regexp's).
#
# == Basic example
#
#   require 'rubygems/vendor/uri/lib/uri'
#
#   uri = Gem::URI("http://foo.com/posts?id=30&limit=5#time=1305298413")
#   #=> #<Gem::URI::HTTP http://foo.com/posts?id=30&limit=5#time=1305298413>
#
#   uri.scheme    #=> "http"
#   uri.host      #=> "foo.com"
#   uri.path      #=> "/posts"
#   uri.query     #=> "id=30&limit=5"
#   uri.fragment  #=> "time=1305298413"
#
#   uri.to_s      #=> "http://foo.com/posts?id=30&limit=5#time=1305298413"
#
# == Adding custom URIs
#
#   module Gem::URI
#     class RSYNC < Generic
#       DEFAULT_PORT = 873
#     end
#     register_scheme 'RSYNC', RSYNC
#   end
#   #=> Gem::URI::RSYNC
#
#   Gem::URI.scheme_list
#   #=> {"FILE"=>Gem::URI::File, "FTP"=>Gem::URI::FTP, "HTTP"=>Gem::URI::HTTP,
#   #    "HTTPS"=>Gem::URI::HTTPS, "LDAP"=>Gem::URI::LDAP, "LDAPS"=>Gem::URI::LDAPS,
#   #    "MAILTO"=>Gem::URI::MailTo, "RSYNC"=>Gem::URI::RSYNC}
#
#   uri = Gem::URI("rsync://rsync.foo.com")
#   #=> #<Gem::URI::RSYNC rsync://rsync.foo.com>
#
# == RFC References
#
# A good place to view an RFC spec is http://www.ietf.org/rfc.html.
#
# Here is a list of all related RFC's:
# - RFC822[https://www.rfc-editor.org/rfc/rfc822]
# - RFC1738[https://www.rfc-editor.org/rfc/rfc1738]
# - RFC2255[https://www.rfc-editor.org/rfc/rfc2255]
# - RFC2368[https://www.rfc-editor.org/rfc/rfc2368]
# - RFC2373[https://www.rfc-editor.org/rfc/rfc2373]
# - RFC2396[https://www.rfc-editor.org/rfc/rfc2396]
# - RFC2732[https://www.rfc-editor.org/rfc/rfc2732]
# - RFC3986[https://www.rfc-editor.org/rfc/rfc3986]
#
# == Class tree
#
# - Gem::URI::Generic (in uri/generic.rb)
#   - Gem::URI::File - (in uri/file.rb)
#   - Gem::URI::FTP - (in uri/ftp.rb)
#   - Gem::URI::HTTP - (in uri/http.rb)
#     - Gem::URI::HTTPS - (in uri/https.rb)
#   - Gem::URI::LDAP - (in uri/ldap.rb)
#     - Gem::URI::LDAPS - (in uri/ldaps.rb)
#   - Gem::URI::MailTo - (in uri/mailto.rb)
# - Gem::URI::Parser - (in uri/common.rb)
# - Gem::URI::REGEXP - (in uri/common.rb)
#   - Gem::URI::REGEXP::PATTERN - (in uri/common.rb)
# - Gem::URI::Util - (in uri/common.rb)
# - Gem::URI::Error - (in uri/common.rb)
#   - Gem::URI::InvalidURIError - (in uri/common.rb)
#   - Gem::URI::InvalidComponentError - (in uri/common.rb)
#   - Gem::URI::BadURIError - (in uri/common.rb)
#
# == Copyright Info
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# Documentation::
#   Akira Yamada <akira@ruby-lang.org>
#   Dmitry V. Sabanin <sdmitry@lrn.ru>
#   Vincent Batts <vbatts@hashbangbash.com>
# License::
#  Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
#  You can redistribute it and/or modify it under the same term as Ruby.
#

module Gem::URI
end

require_relative 'uri/version'
require_relative 'uri/common'
require_relative 'uri/generic'
require_relative 'uri/file'
require_relative 'uri/ftp'
require_relative 'uri/http'
require_relative 'uri/https'
require_relative 'uri/ldap'
require_relative 'uri/ldaps'
require_relative 'uri/mailto'
require_relative 'uri/ws'
require_relative 'uri/wss'
PK)J[%^��335share/rubygems/rubygems/vendor/timeout/lib/timeout.rbnu�[���# frozen_string_literal: true
# Timeout long-running blocks
#
# == Synopsis
#
#   require 'rubygems/vendor/timeout/lib/timeout'
#   status = Gem::Timeout.timeout(5) {
#     # Something that should be interrupted if it takes more than 5 seconds...
#   }
#
# == Description
#
# Gem::Timeout provides a way to auto-terminate a potentially long-running
# operation if it hasn't finished in a fixed amount of time.
#
# == Copyright
#
# Copyright:: (C) 2000  Network Applied Communication Laboratory, Inc.
# Copyright:: (C) 2000  Information-technology Promotion Agency, Japan

module Gem::Timeout
  # The version
  VERSION = "0.4.3"

  # Internal error raised to when a timeout is triggered.
  class ExitException < Exception
    def exception(*) # :nodoc:
      self
    end
  end

  # Raised by Gem::Timeout.timeout when the block times out.
  class Error < RuntimeError
    def self.handle_timeout(message) # :nodoc:
      exc = ExitException.new(message)

      begin
        yield exc
      rescue ExitException => e
        raise new(message) if exc.equal?(e)
        raise
      end
    end
  end

  # :stopdoc:
  CONDVAR = ConditionVariable.new
  QUEUE = Queue.new
  QUEUE_MUTEX = Mutex.new
  TIMEOUT_THREAD_MUTEX = Mutex.new
  @timeout_thread = nil
  private_constant :CONDVAR, :QUEUE, :QUEUE_MUTEX, :TIMEOUT_THREAD_MUTEX

  class Request
    attr_reader :deadline

    def initialize(thread, timeout, exception_class, message)
      @thread = thread
      @deadline = GET_TIME.call(Process::CLOCK_MONOTONIC) + timeout
      @exception_class = exception_class
      @message = message

      @mutex = Mutex.new
      @done = false # protected by @mutex
    end

    def done?
      @mutex.synchronize do
        @done
      end
    end

    def expired?(now)
      now >= @deadline
    end

    def interrupt
      @mutex.synchronize do
        unless @done
          @thread.raise @exception_class, @message
          @done = true
        end
      end
    end

    def finished
      @mutex.synchronize do
        @done = true
      end
    end
  end
  private_constant :Request

  def self.create_timeout_thread
    watcher = Thread.new do
      requests = []
      while true
        until QUEUE.empty? and !requests.empty? # wait to have at least one request
          req = QUEUE.pop
          requests << req unless req.done?
        end
        closest_deadline = requests.min_by(&:deadline).deadline

        now = 0.0
        QUEUE_MUTEX.synchronize do
          while (now = GET_TIME.call(Process::CLOCK_MONOTONIC)) < closest_deadline and QUEUE.empty?
            CONDVAR.wait(QUEUE_MUTEX, closest_deadline - now)
          end
        end

        requests.each do |req|
          req.interrupt if req.expired?(now)
        end
        requests.reject!(&:done?)
      end
    end
    ThreadGroup::Default.add(watcher) unless watcher.group.enclosed?
    watcher.name = "Gem::Timeout stdlib thread"
    watcher.thread_variable_set(:"\0__detached_thread__", true)
    watcher
  end
  private_class_method :create_timeout_thread

  def self.ensure_timeout_thread_created
    unless @timeout_thread and @timeout_thread.alive?
      TIMEOUT_THREAD_MUTEX.synchronize do
        unless @timeout_thread and @timeout_thread.alive?
          @timeout_thread = create_timeout_thread
        end
      end
    end
  end

  # We keep a private reference so that time mocking libraries won't break
  # Gem::Timeout.
  GET_TIME = Process.method(:clock_gettime)
  private_constant :GET_TIME

  # :startdoc:

  # Perform an operation in a block, raising an error if it takes longer than
  # +sec+ seconds to complete.
  #
  # +sec+:: Number of seconds to wait for the block to terminate. Any non-negative number
  #         or nil may be used, including Floats to specify fractional seconds. A
  #         value of 0 or +nil+ will execute the block without any timeout.
  #         Any negative number will raise an ArgumentError.
  # +klass+:: Exception Class to raise if the block fails to terminate
  #           in +sec+ seconds.  Omitting will use the default, Gem::Timeout::Error
  # +message+:: Error message to raise with Exception Class.
  #             Omitting will use the default, "execution expired"
  #
  # Returns the result of the block *if* the block completed before
  # +sec+ seconds, otherwise throws an exception, based on the value of +klass+.
  #
  # The exception thrown to terminate the given block cannot be rescued inside
  # the block unless +klass+ is given explicitly. However, the block can use
  # ensure to prevent the handling of the exception.  For that reason, this
  # method cannot be relied on to enforce timeouts for untrusted blocks.
  #
  # If a scheduler is defined, it will be used to handle the timeout by invoking
  # Scheduler#timeout_after.
  #
  # Note that this is both a method of module Gem::Timeout, so you can <tt>include
  # Gem::Timeout</tt> into your classes so they have a #timeout method, as well as
  # a module method, so you can call it directly as Gem::Timeout.timeout().
  def timeout(sec, klass = nil, message = nil, &block)   #:yield: +sec+
    return yield(sec) if sec == nil or sec.zero?
    raise ArgumentError, "Timeout sec must be a non-negative number" if 0 > sec

    message ||= "execution expired"

    if Fiber.respond_to?(:current_scheduler) && (scheduler = Fiber.current_scheduler)&.respond_to?(:timeout_after)
      return scheduler.timeout_after(sec, klass || Error, message, &block)
    end

    Gem::Timeout.ensure_timeout_thread_created
    perform = Proc.new do |exc|
      request = Request.new(Thread.current, sec, exc, message)
      QUEUE_MUTEX.synchronize do
        QUEUE << request
        CONDVAR.signal
      end
      begin
        return yield(sec)
      ensure
        request.finished
      end
    end

    if klass
      perform.call(klass)
    else
      Error.handle_timeout(message, &perform)
    end
  end
  module_function :timeout
end
PK)J[L��;;;share/rubygems/rubygems/vendor/optparse/lib/optionparser.rbnu�[���# frozen_string_literal: false
require_relative 'optparse'
PK)J[7��>share/rubygems/rubygems/vendor/optparse/lib/optparse/kwargs.rbnu�[���# frozen_string_literal: true
require_relative '../optparse'

class Gem::OptionParser
  # :call-seq:
  #   define_by_keywords(options, method, **params)
  #
  # :include: ../../doc/optparse/creates_option.rdoc
  #
  # Defines options which set in to _options_ for keyword parameters
  # of _method_.
  #
  # Parameters for each keywords are given as elements of _params_.
  #
  def define_by_keywords(options, method, **params)
    method.parameters.each do |type, name|
      case type
      when :key, :keyreq
        op, cl = *(type == :key ? %w"[ ]" : ["", ""])
        define("--#{name}=#{op}#{name.upcase}#{cl}", *params[name]) do |o|
          options[name] = o
        end
      end
    end
    options
  end
end
PK)J[�ua���:share/rubygems/rubygems/vendor/optparse/lib/optparse/ac.rbnu�[���# frozen_string_literal: false
require_relative '../optparse'

#
# autoconf-like options.
#
class Gem::OptionParser::AC < Gem::OptionParser
  # :stopdoc:
  private

  def _check_ac_args(name, block)
    unless /\A\w[-\w]*\z/ =~ name
      raise ArgumentError, name
    end
    unless block
      raise ArgumentError, "no block given", ParseError.filter_backtrace(caller)
    end
  end

  ARG_CONV = proc {|val| val.nil? ? true : val}
  private_constant :ARG_CONV

  def _ac_arg_enable(prefix, name, help_string, block)
    _check_ac_args(name, block)

    sdesc = []
    ldesc = ["--#{prefix}-#{name}"]
    desc = [help_string]
    q = name.downcase
    ac_block = proc {|val| block.call(ARG_CONV.call(val))}
    enable = Switch::PlacedArgument.new(nil, ARG_CONV, sdesc, ldesc, nil, desc, ac_block)
    disable = Switch::NoArgument.new(nil, proc {false}, sdesc, ldesc, nil, desc, ac_block)
    top.append(enable, [], ["enable-" + q], disable, ['disable-' + q])
    enable
  end

  # :startdoc:

  public

  # Define <tt>--enable</tt> / <tt>--disable</tt> style option
  #
  # Appears as <tt>--enable-<i>name</i></tt> in help message.
  def ac_arg_enable(name, help_string, &block)
    _ac_arg_enable("enable", name, help_string, block)
  end

  # Define <tt>--enable</tt> / <tt>--disable</tt> style option
  #
  # Appears as <tt>--disable-<i>name</i></tt> in help message.
  def ac_arg_disable(name, help_string, &block)
    _ac_arg_enable("disable", name, help_string, block)
  end

  # Define <tt>--with</tt> / <tt>--without</tt> style option
  #
  # Appears as <tt>--with-<i>name</i></tt> in help message.
  def ac_arg_with(name, help_string, &block)
    _check_ac_args(name, block)

    sdesc = []
    ldesc = ["--with-#{name}"]
    desc = [help_string]
    q = name.downcase
    with = Switch::PlacedArgument.new(*search(:atype, String), sdesc, ldesc, nil, desc, block)
    without = Switch::NoArgument.new(nil, proc {}, sdesc, ldesc, nil, desc, block)
    top.append(with, [], ["with-" + q], without, ['without-' + q])
    with
  end
end
PK)J[O����<share/rubygems/rubygems/vendor/optparse/lib/optparse/date.rbnu�[���# frozen_string_literal: false
require_relative '../optparse'
require 'date'

Gem::OptionParser.accept(DateTime) do |s,|
  begin
    DateTime.parse(s) if s
  rescue ArgumentError
    raise Gem::OptionParser::InvalidArgument, s
  end
end
Gem::OptionParser.accept(Date) do |s,|
  begin
    Date.parse(s) if s
  rescue ArgumentError
    raise Gem::OptionParser::InvalidArgument, s
  end
end
PK)J["�j���Bshare/rubygems/rubygems/vendor/optparse/lib/optparse/shellwords.rbnu�[���# frozen_string_literal: false
# -*- ruby -*-

require 'shellwords'
require_relative '../optparse'

Gem::OptionParser.accept(Shellwords) {|s,| Shellwords.shellwords(s)}
PK)J[�.U��<share/rubygems/rubygems/vendor/optparse/lib/optparse/time.rbnu�[���# frozen_string_literal: false
require_relative '../optparse'
require 'time'

Gem::OptionParser.accept(Time) do |s,|
  begin
    (Time.httpdate(s) rescue Time.parse(s)) if s
  rescue
    raise Gem::OptionParser::InvalidArgument, s
  end
end
PK)J[�S�?��?share/rubygems/rubygems/vendor/optparse/lib/optparse/version.rbnu�[���# frozen_string_literal: false
# Gem::OptionParser internal utility

class << Gem::OptionParser
  #
  # Shows version string in packages if Version is defined.
  #
  # +pkgs+:: package list
  #
  def show_version(*pkgs)
    progname = ARGV.options.program_name
    result = false
    show = proc do |klass, cname, version|
      str = "#{progname}"
      unless klass == ::Object and cname == :VERSION
        version = version.join(".") if Array === version
        str << ": #{klass}" unless klass == Object
        str << " version #{version}"
      end
      [:Release, :RELEASE].find do |rel|
        if klass.const_defined?(rel)
          str << " (#{klass.const_get(rel)})"
        end
      end
      puts str
      result = true
    end
    if pkgs.size == 1 and pkgs[0] == "all"
      self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
        unless cname[1] == ?e and klass.const_defined?(:Version)
          show.call(klass, cname.intern, version)
        end
      end
    else
      pkgs.each do |pkg|
        begin
          pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
          v = case
              when pkg.const_defined?(:Version)
                pkg.const_get(n = :Version)
              when pkg.const_defined?(:VERSION)
                pkg.const_get(n = :VERSION)
              else
                n = nil
                "unknown"
              end
          show.call(pkg, n, v)
        rescue NameError
        end
      end
    end
    result
  end

  # :stopdoc:

  def each_const(path, base = ::Object)
    path.split(/::|\//).inject(base) do |klass, name|
      raise NameError, path unless Module === klass
      klass.constants.grep(/#{name}/i) do |c|
        klass.const_defined?(c) or next
        klass.const_get(c)
      end
    end
  end

  def search_const(klass, name)
    klasses = [klass]
    while klass = klasses.shift
      klass.constants.each do |cname|
        klass.const_defined?(cname) or next
        const = klass.const_get(cname)
        yield klass, cname, const if name === cname
        klasses << const if Module === const and const != ::Object
      end
    end
  end

  # :startdoc:
end
PK)J[l�V��;share/rubygems/rubygems/vendor/optparse/lib/optparse/uri.rbnu�[���# frozen_string_literal: false
# -*- ruby -*-

require_relative '../optparse'
require_relative '../../../uri/lib/uri'

Gem::OptionParser.accept(Gem::URI) {|s,| Gem::URI.parse(s) if s}
PK)J[:�V��7share/rubygems/rubygems/vendor/optparse/lib/optparse.rbnu�[���# frozen_string_literal: true
#
# optparse.rb - command-line option analysis with the Gem::OptionParser class.
#
# Author:: Nobu Nakada
# Documentation:: Nobu Nakada and Gavin Sinclair.
#
# See Gem::OptionParser for documentation.
#

#--
# == Developer Documentation (not for RDoc output)
#
# === Class tree
#
# - Gem::OptionParser:: front end
# - Gem::OptionParser::Switch:: each switches
# - Gem::OptionParser::List:: options list
# - Gem::OptionParser::ParseError:: errors on parsing
#   - Gem::OptionParser::AmbiguousOption
#   - Gem::OptionParser::NeedlessArgument
#   - Gem::OptionParser::MissingArgument
#   - Gem::OptionParser::InvalidOption
#   - Gem::OptionParser::InvalidArgument
#     - Gem::OptionParser::AmbiguousArgument
#
# === Object relationship diagram
#
#   +--------------+
#   | Gem::OptionParser |<>-----+
#   +--------------+       |                      +--------+
#                          |                    ,-| Switch |
#        on_head -------->+---------------+    /  +--------+
#        accept/reject -->| List          |<|>-
#                         |               |<|>-  +----------+
#        on ------------->+---------------+    `-| argument |
#                           :           :        |  class   |
#                         +---------------+      |==========|
#        on_tail -------->|               |      |pattern   |
#                         +---------------+      |----------|
#   Gem::OptionParser.accept ->| DefaultList   |      |converter |
#                reject   |(shared between|      +----------+
#                         | all instances)|
#                         +---------------+
#
#++
#
# == Gem::OptionParser
#
# === New to +Gem::OptionParser+?
#
# See the {Tutorial}[optparse/tutorial.rdoc].
#
# === Introduction
#
# Gem::OptionParser is a class for command-line option analysis.  It is much more
# advanced, yet also easier to use, than GetoptLong, and is a more Ruby-oriented
# solution.
#
# === Features
#
# 1. The argument specification and the code to handle it are written in the
#    same place.
# 2. It can output an option summary; you don't need to maintain this string
#    separately.
# 3. Optional and mandatory arguments are specified very gracefully.
# 4. Arguments can be automatically converted to a specified class.
# 5. Arguments can be restricted to a certain set.
#
# All of these features are demonstrated in the examples below.  See
# #make_switch for full documentation.
#
# === Minimal example
#
#   require 'rubygems/vendor/optparse/lib/optparse'
#
#   options = {}
#   Gem::OptionParser.new do |parser|
#     parser.banner = "Usage: example.rb [options]"
#
#     parser.on("-v", "--[no-]verbose", "Run verbosely") do |v|
#       options[:verbose] = v
#     end
#   end.parse!
#
#   p options
#   p ARGV
#
# === Generating Help
#
# Gem::OptionParser can be used to automatically generate help for the commands you
# write:
#
#   require 'rubygems/vendor/optparse/lib/optparse'
#
#   Options = Struct.new(:name)
#
#   class Parser
#     def self.parse(options)
#       args = Options.new("world")
#
#       opt_parser = Gem::OptionParser.new do |parser|
#         parser.banner = "Usage: example.rb [options]"
#
#         parser.on("-nNAME", "--name=NAME", "Name to say hello to") do |n|
#           args.name = n
#         end
#
#         parser.on("-h", "--help", "Prints this help") do
#           puts parser
#           exit
#         end
#       end
#
#       opt_parser.parse!(options)
#       return args
#     end
#   end
#   options = Parser.parse %w[--help]
#
#   #=>
#      # Usage: example.rb [options]
#      #     -n, --name=NAME                  Name to say hello to
#      #     -h, --help                       Prints this help
#
# === Required Arguments
#
# For options that require an argument, option specification strings may include an
# option name in all caps. If an option is used without the required argument,
# an exception will be raised.
#
#   require 'rubygems/vendor/optparse/lib/optparse'
#
#   options = {}
#   Gem::OptionParser.new do |parser|
#     parser.on("-r", "--require LIBRARY",
#               "Require the LIBRARY before executing your script") do |lib|
#       puts "You required #{lib}!"
#     end
#   end.parse!
#
# Used:
#
#   $ ruby optparse-test.rb -r
#   optparse-test.rb:9:in `<main>': missing argument: -r (Gem::OptionParser::MissingArgument)
#   $ ruby optparse-test.rb -r my-library
#   You required my-library!
#
# === Type Coercion
#
# Gem::OptionParser supports the ability to coerce command line arguments
# into objects for us.
#
# Gem::OptionParser comes with a few ready-to-use kinds of type
# coercion. They are:
#
# - Date  -- Anything accepted by +Date.parse+ (need to require +optparse/date+)
# - DateTime -- Anything accepted by +DateTime.parse+ (need to require +optparse/date+)
# - Time -- Anything accepted by +Time.httpdate+ or +Time.parse+ (need to require +optparse/time+)
# - URI  -- Anything accepted by +Gem::URI.parse+ (need to require +optparse/uri+)
# - Shellwords -- Anything accepted by +Shellwords.shellwords+ (need to require +optparse/shellwords+)
# - String -- Any non-empty string
# - Integer -- Any integer. Will convert octal. (e.g. 124, -3, 040)
# - Float -- Any float. (e.g. 10, 3.14, -100E+13)
# - Numeric -- Any integer, float, or rational (1, 3.4, 1/3)
# - DecimalInteger -- Like +Integer+, but no octal format.
# - OctalInteger -- Like +Integer+, but no decimal format.
# - DecimalNumeric -- Decimal integer or float.
# - TrueClass --  Accepts '+, yes, true, -, no, false' and
#   defaults as +true+
# - FalseClass -- Same as +TrueClass+, but defaults to +false+
# - Array -- Strings separated by ',' (e.g. 1,2,3)
# - Regexp -- Regular expressions. Also includes options.
#
# We can also add our own coercions, which we will cover below.
#
# ==== Using Built-in Conversions
#
# As an example, the built-in +Time+ conversion is used. The other built-in
# conversions behave in the same way.
# Gem::OptionParser will attempt to parse the argument
# as a +Time+. If it succeeds, that time will be passed to the
# handler block. Otherwise, an exception will be raised.
#
#   require 'rubygems/vendor/optparse/lib/optparse'
#   require 'rubygems/vendor/optparse/lib/optparse/time'
#   Gem::OptionParser.new do |parser|
#     parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
#       p time
#     end
#   end.parse!
#
# Used:
#
#   $ ruby optparse-test.rb  -t nonsense
#   ... invalid argument: -t nonsense (Gem::OptionParser::InvalidArgument)
#   $ ruby optparse-test.rb  -t 10-11-12
#   2010-11-12 00:00:00 -0500
#   $ ruby optparse-test.rb  -t 9:30
#   2014-08-13 09:30:00 -0400
#
# ==== Creating Custom Conversions
#
# The +accept+ method on Gem::OptionParser may be used to create converters.
# It specifies which conversion block to call whenever a class is specified.
# The example below uses it to fetch a +User+ object before the +on+ handler receives it.
#
#   require 'rubygems/vendor/optparse/lib/optparse'
#
#   User = Struct.new(:id, :name)
#
#   def find_user id
#     not_found = ->{ raise "No User Found for id #{id}" }
#     [ User.new(1, "Sam"),
#       User.new(2, "Gandalf") ].find(not_found) do |u|
#       u.id == id
#     end
#   end
#
#   op = Gem::OptionParser.new
#   op.accept(User) do |user_id|
#     find_user user_id.to_i
#   end
#
#   op.on("--user ID", User) do |user|
#     puts user
#   end
#
#   op.parse!
#
# Used:
#
#   $ ruby optparse-test.rb --user 1
#   #<struct User id=1, name="Sam">
#   $ ruby optparse-test.rb --user 2
#   #<struct User id=2, name="Gandalf">
#   $ ruby optparse-test.rb --user 3
#   optparse-test.rb:15:in `block in find_user': No User Found for id 3 (RuntimeError)
#
# === Store options to a Hash
#
# The +into+ option of +order+, +parse+ and so on methods stores command line options into a Hash.
#
#   require 'rubygems/vendor/optparse/lib/optparse'
#
#   options = {}
#   Gem::OptionParser.new do |parser|
#     parser.on('-a')
#     parser.on('-b NUM', Integer)
#     parser.on('-v', '--verbose')
#   end.parse!(into: options)
#
#   p options
#
# Used:
#
#   $ ruby optparse-test.rb -a
#   {:a=>true}
#   $ ruby optparse-test.rb -a -v
#   {:a=>true, :verbose=>true}
#   $ ruby optparse-test.rb -a -b 100
#   {:a=>true, :b=>100}
#
# === Complete example
#
# The following example is a complete Ruby program.  You can run it and see the
# effect of specifying various options.  This is probably the best way to learn
# the features of +optparse+.
#
#   require 'rubygems/vendor/optparse/lib/optparse'
#   require 'rubygems/vendor/optparse/lib/optparse/time'
#   require 'ostruct'
#   require 'pp'
#
#   class OptparseExample
#     Version = '1.0.0'
#
#     CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary]
#     CODE_ALIASES = { "jis" => "iso-2022-jp", "sjis" => "shift_jis" }
#
#     class ScriptOptions
#       attr_accessor :library, :inplace, :encoding, :transfer_type,
#                     :verbose, :extension, :delay, :time, :record_separator,
#                     :list
#
#       def initialize
#         self.library = []
#         self.inplace = false
#         self.encoding = "utf8"
#         self.transfer_type = :auto
#         self.verbose = false
#       end
#
#       def define_options(parser)
#         parser.banner = "Usage: example.rb [options]"
#         parser.separator ""
#         parser.separator "Specific options:"
#
#         # add additional options
#         perform_inplace_option(parser)
#         delay_execution_option(parser)
#         execute_at_time_option(parser)
#         specify_record_separator_option(parser)
#         list_example_option(parser)
#         specify_encoding_option(parser)
#         optional_option_argument_with_keyword_completion_option(parser)
#         boolean_verbose_option(parser)
#
#         parser.separator ""
#         parser.separator "Common options:"
#         # No argument, shows at tail.  This will print an options summary.
#         # Try it and see!
#         parser.on_tail("-h", "--help", "Show this message") do
#           puts parser
#           exit
#         end
#         # Another typical switch to print the version.
#         parser.on_tail("--version", "Show version") do
#           puts Version
#           exit
#         end
#       end
#
#       def perform_inplace_option(parser)
#         # Specifies an optional option argument
#         parser.on("-i", "--inplace [EXTENSION]",
#                   "Edit ARGV files in place",
#                   "(make backup if EXTENSION supplied)") do |ext|
#           self.inplace = true
#           self.extension = ext || ''
#           self.extension.sub!(/\A\.?(?=.)/, ".")  # Ensure extension begins with dot.
#         end
#       end
#
#       def delay_execution_option(parser)
#         # Cast 'delay' argument to a Float.
#         parser.on("--delay N", Float, "Delay N seconds before executing") do |n|
#           self.delay = n
#         end
#       end
#
#       def execute_at_time_option(parser)
#         # Cast 'time' argument to a Time object.
#         parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
#           self.time = time
#         end
#       end
#
#       def specify_record_separator_option(parser)
#         # Cast to octal integer.
#         parser.on("-F", "--irs [OCTAL]", Gem::OptionParser::OctalInteger,
#                   "Specify record separator (default \\0)") do |rs|
#           self.record_separator = rs
#         end
#       end
#
#       def list_example_option(parser)
#         # List of arguments.
#         parser.on("--list x,y,z", Array, "Example 'list' of arguments") do |list|
#           self.list = list
#         end
#       end
#
#       def specify_encoding_option(parser)
#         # Keyword completion.  We are specifying a specific set of arguments (CODES
#         # and CODE_ALIASES - notice the latter is a Hash), and the user may provide
#         # the shortest unambiguous text.
#         code_list = (CODE_ALIASES.keys + CODES).join(', ')
#         parser.on("--code CODE", CODES, CODE_ALIASES, "Select encoding",
#                   "(#{code_list})") do |encoding|
#           self.encoding = encoding
#         end
#       end
#
#       def optional_option_argument_with_keyword_completion_option(parser)
#         # Optional '--type' option argument with keyword completion.
#         parser.on("--type [TYPE]", [:text, :binary, :auto],
#                   "Select transfer type (text, binary, auto)") do |t|
#           self.transfer_type = t
#         end
#       end
#
#       def boolean_verbose_option(parser)
#         # Boolean switch.
#         parser.on("-v", "--[no-]verbose", "Run verbosely") do |v|
#           self.verbose = v
#         end
#       end
#     end
#
#     #
#     # Return a structure describing the options.
#     #
#     def parse(args)
#       # The options specified on the command line will be collected in
#       # *options*.
#
#       @options = ScriptOptions.new
#       @args = Gem::OptionParser.new do |parser|
#         @options.define_options(parser)
#         parser.parse!(args)
#       end
#       @options
#     end
#
#     attr_reader :parser, :options
#   end  # class OptparseExample
#
#   example = OptparseExample.new
#   options = example.parse(ARGV)
#   pp options # example.options
#   pp ARGV
#
# === Shell Completion
#
# For modern shells (e.g. bash, zsh, etc.), you can use shell
# completion for command line options.
#
# === Further documentation
#
# The above examples, along with the accompanying
# {Tutorial}[optparse/tutorial.rdoc],
# should be enough to learn how to use this class.
# If you have any questions, file a ticket at http://bugs.ruby-lang.org.
#
class Gem::OptionParser
  # The version string
  Gem::OptionParser::Version = "0.6.0"

  # :stopdoc:
  NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
  RequiredArgument = [REQUIRED_ARGUMENT = :REQUIRED, true].freeze
  OptionalArgument = [OPTIONAL_ARGUMENT = :OPTIONAL, false].freeze
  # :startdoc:

  #
  # Keyword completion module.  This allows partial arguments to be specified
  # and resolved against a list of acceptable values.
  #
  module Completion
    # :nodoc:

    def self.regexp(key, icase)
      Regexp.new('\A' + Regexp.quote(key).gsub(/\w+\b/, '\&\w*'), icase)
    end

    def self.candidate(key, icase = false, pat = nil, &block)
      pat ||= Completion.regexp(key, icase)
      candidates = []
      block.call do |k, *v|
        (if Regexp === k
           kn = ""
           k === key
         else
           kn = defined?(k.id2name) ? k.id2name : k
           pat === kn
         end) or next
        v << k if v.empty?
        candidates << [k, v, kn]
      end
      candidates
    end

    def candidate(key, icase = false, pat = nil, &_)
      Completion.candidate(key, icase, pat, &method(:each))
    end

    public
    def complete(key, icase = false, pat = nil)
      candidates = candidate(key, icase, pat, &method(:each)).sort_by {|k, v, kn| kn.size}
      if candidates.size == 1
        canon, sw, * = candidates[0]
      elsif candidates.size > 1
        canon, sw, cn = candidates.shift
        candidates.each do |k, v, kn|
          next if sw == v
          if String === cn and String === kn
            if cn.rindex(kn, 0)
              canon, sw, cn = k, v, kn
              next
            elsif kn.rindex(cn, 0)
              next
            end
          end
          throw :ambiguous, key
        end
      end
      if canon
        block_given? or return key, *sw
        yield(key, *sw)
      end
    end

    def convert(opt = nil, val = nil, *)
      val
    end
  end


  #
  # Map from option/keyword string to object with completion.
  #
  class OptionMap < Hash
    include Completion
  end


  #
  # Individual switch class.  Not important to the user.
  #
  # Defined within Switch are several Switch-derived classes: NoArgument,
  # RequiredArgument, etc.
  #
  class Switch
    # :nodoc:

    attr_reader :pattern, :conv, :short, :long, :arg, :desc, :block

    #
    # Guesses argument style from +arg+.  Returns corresponding
    # Gem::OptionParser::Switch class (OptionalArgument, etc.).
    #
    def self.guess(arg)
      case arg
      when ""
        t = self
      when /\A=?\[/
        t = Switch::OptionalArgument
      when /\A\s+\[/
        t = Switch::PlacedArgument
      else
        t = Switch::RequiredArgument
      end
      self >= t or incompatible_argument_styles(arg, t)
      t
    end

    def self.incompatible_argument_styles(arg, t)
      raise(ArgumentError, "#{arg}: incompatible argument styles\n  #{self}, #{t}",
            ParseError.filter_backtrace(caller(2)))
    end

    def self.pattern
      NilClass
    end

    def initialize(pattern = nil, conv = nil,
                   short = nil, long = nil, arg = nil,
                   desc = ([] if short or long), block = nil, &_block)
      raise if Array === pattern
      block ||= _block
      @pattern, @conv, @short, @long, @arg, @desc, @block =
        pattern, conv, short, long, arg, desc, block
    end

    #
    # Parses +arg+ and returns rest of +arg+ and matched portion to the
    # argument pattern. Yields when the pattern doesn't match substring.
    #
    def parse_arg(arg) # :nodoc:
      pattern or return nil, [arg]
      unless m = pattern.match(arg)
        yield(InvalidArgument, arg)
        return arg, []
      end
      if String === m
        m = [s = m]
      else
        m = m.to_a
        s = m[0]
        return nil, m unless String === s
      end
      raise InvalidArgument, arg unless arg.rindex(s, 0)
      return nil, m if s.length == arg.length
      yield(InvalidArgument, arg) # didn't match whole arg
      return arg[s.length..-1], m
    end
    private :parse_arg

    #
    # Parses argument, converts and returns +arg+, +block+ and result of
    # conversion. Yields at semi-error condition instead of raising an
    # exception.
    #
    def conv_arg(arg, val = []) # :nodoc:
      if conv
        val = conv.call(*val)
      else
        val = proc {|v| v}.call(*val)
      end
      return arg, block, val
    end
    private :conv_arg

    #
    # Produces the summary text. Each line of the summary is yielded to the
    # block (without newline).
    #
    # +sdone+::  Already summarized short style options keyed hash.
    # +ldone+::  Already summarized long style options keyed hash.
    # +width+::  Width of left side (option part). In other words, the right
    #            side (description part) starts after +width+ columns.
    # +max+::    Maximum width of left side -> the options are filled within
    #            +max+ columns.
    # +indent+:: Prefix string indents all summarized lines.
    #
    def summarize(sdone = {}, ldone = {}, width = 1, max = width - 1, indent = "")
      sopts, lopts = [], [], nil
      @short.each {|s| sdone.fetch(s) {sopts << s}; sdone[s] = true} if @short
      @long.each {|s| ldone.fetch(s) {lopts << s}; ldone[s] = true} if @long
      return if sopts.empty? and lopts.empty? # completely hidden

      left = [sopts.join(', ')]
      right = desc.dup

      while s = lopts.shift
        l = left[-1].length + s.length
        l += arg.length if left.size == 1 && arg
        l < max or sopts.empty? or left << +''
        left[-1] << (left[-1].empty? ? ' ' * 4 : ', ') << s
      end

      if arg
        left[0] << (left[1] ? arg.sub(/\A(\[?)=/, '\1') + ',' : arg)
      end
      mlen = left.collect {|ss| ss.length}.max.to_i
      while mlen > width and l = left.shift
        mlen = left.collect {|ss| ss.length}.max.to_i if l.length == mlen
        if l.length < width and (r = right[0]) and !r.empty?
          l = l.to_s.ljust(width) + ' ' + r
          right.shift
        end
        yield(indent + l)
      end

      while begin l = left.shift; r = right.shift; l or r end
        l = l.to_s.ljust(width) + ' ' + r if r and !r.empty?
        yield(indent + l)
      end

      self
    end

    def add_banner(to)  # :nodoc:
      unless @short or @long
        s = desc.join
        to << " [" + s + "]..." unless s.empty?
      end
      to
    end

    def match_nonswitch?(str)  # :nodoc:
      @pattern =~ str unless @short or @long
    end

    #
    # Main name of the switch.
    #
    def switch_name
      (long.first || short.first).sub(/\A-+(?:\[no-\])?/, '')
    end

    def compsys(sdone, ldone)   # :nodoc:
      sopts, lopts = [], []
      @short.each {|s| sdone.fetch(s) {sopts << s}; sdone[s] = true} if @short
      @long.each {|s| ldone.fetch(s) {lopts << s}; ldone[s] = true} if @long
      return if sopts.empty? and lopts.empty? # completely hidden

      (sopts+lopts).each do |opt|
        # "(-x -c -r)-l[left justify]"
        if /^--\[no-\](.+)$/ =~ opt
          o = $1
          yield("--#{o}", desc.join(""))
          yield("--no-#{o}", desc.join(""))
        else
          yield("#{opt}", desc.join(""))
        end
      end
    end

    def pretty_print_contents(q) # :nodoc:
      if @block
        q.text ":" + @block.source_location.join(":") + ":"
        first = false
      else
        first = true
      end
      [@short, @long].each do |list|
        list.each do |opt|
          if first
            q.text ":"
            first = false
          end
          q.breakable
          q.text opt
        end
      end
    end

    def pretty_print(q)         # :nodoc:
      q.object_group(self) {pretty_print_contents(q)}
    end

    def omitted_argument(val)   # :nodoc:
      val.pop if val.size == 3 and val.last.nil?
      val
    end

    #
    # Switch that takes no arguments.
    #
    class NoArgument < self

      #
      # Raises an exception if any arguments given.
      #
      def parse(arg, argv)
        yield(NeedlessArgument, arg) if arg
        conv_arg(arg)
      end

      def self.incompatible_argument_styles(*) # :nodoc:
      end

      def self.pattern          # :nodoc:
        Object
      end

      def pretty_head           # :nodoc:
        "NoArgument"
      end
    end

    #
    # Switch that takes an argument.
    #
    class RequiredArgument < self

      #
      # Raises an exception if argument is not present.
      #
      def parse(arg, argv, &_)
        unless arg
          raise MissingArgument if argv.empty?
          arg = argv.shift
        end
        conv_arg(*parse_arg(arg, &method(:raise)))
      end

      def pretty_head           # :nodoc:
        "Required"
      end
    end

    #
    # Switch that can omit argument.
    #
    class OptionalArgument < self

      #
      # Parses argument if given, or uses default value.
      #
      def parse(arg, argv, &error)
        if arg
          conv_arg(*parse_arg(arg, &error))
        else
          omitted_argument conv_arg(arg)
        end
      end

      def pretty_head           # :nodoc:
        "Optional"
      end
    end

    #
    # Switch that takes an argument, which does not begin with '-' or is '-'.
    #
    class PlacedArgument < self

      #
      # Returns nil if argument is not present or begins with '-' and is not '-'.
      #
      def parse(arg, argv, &error)
        if !(val = arg) and (argv.empty? or /\A-./ =~ (val = argv[0]))
          return nil, block
        end
        opt = (val = parse_arg(val, &error))[1]
        val = conv_arg(*val)
        if opt and !arg
          argv.shift
        else
          omitted_argument val
          val[0] = nil
        end
        val
      end

      def pretty_head           # :nodoc:
        "Placed"
      end
    end
  end

  #
  # Simple option list providing mapping from short and/or long option
  # string to Gem::OptionParser::Switch and mapping from acceptable argument to
  # matching pattern and converter pair. Also provides summary feature.
  #
  class List
    # :nodoc:

    # Map from acceptable argument types to pattern and converter pairs.
    attr_reader :atype

    # Map from short style option switches to actual switch objects.
    attr_reader :short

    # Map from long style option switches to actual switch objects.
    attr_reader :long

    # List of all switches and summary string.
    attr_reader :list

    #
    # Just initializes all instance variables.
    #
    def initialize
      @atype = {}
      @short = OptionMap.new
      @long = OptionMap.new
      @list = []
    end

    def pretty_print(q)         # :nodoc:
      q.group(1, "(", ")") do
        @list.each do |sw|
          next unless Switch === sw
          q.group(1, "(" + sw.pretty_head, ")") do
            sw.pretty_print_contents(q)
          end
        end
      end
    end

    #
    # See Gem::OptionParser.accept.
    #
    def accept(t, pat = /.*/m, &block)
      if pat
        pat.respond_to?(:match) or
          raise TypeError, "has no 'match'", ParseError.filter_backtrace(caller(2))
      else
        pat = t if t.respond_to?(:match)
      end
      unless block
        block = pat.method(:convert).to_proc if pat.respond_to?(:convert)
      end
      @atype[t] = [pat, block]
    end

    #
    # See Gem::OptionParser.reject.
    #
    def reject(t)
      @atype.delete(t)
    end

    #
    # Adds +sw+ according to +sopts+, +lopts+ and +nlopts+.
    #
    # +sw+::     Gem::OptionParser::Switch instance to be added.
    # +sopts+::  Short style option list.
    # +lopts+::  Long style option list.
    # +nlopts+:: Negated long style options list.
    #
    def update(sw, sopts, lopts, nsw = nil, nlopts = nil) # :nodoc:
      sopts.each {|o| @short[o] = sw} if sopts
      lopts.each {|o| @long[o] = sw} if lopts
      nlopts.each {|o| @long[o] = nsw} if nsw and nlopts
      used = @short.invert.update(@long.invert)
      @list.delete_if {|o| Switch === o and !used[o]}
    end
    private :update

    #
    # Inserts +switch+ at the head of the list, and associates short, long
    # and negated long options. Arguments are:
    #
    # +switch+::      Gem::OptionParser::Switch instance to be inserted.
    # +short_opts+::  List of short style options.
    # +long_opts+::   List of long style options.
    # +nolong_opts+:: List of long style options with "no-" prefix.
    #
    #   prepend(switch, short_opts, long_opts, nolong_opts)
    #
    def prepend(*args)
      update(*args)
      @list.unshift(args[0])
    end

    #
    # Appends +switch+ at the tail of the list, and associates short, long
    # and negated long options. Arguments are:
    #
    # +switch+::      Gem::OptionParser::Switch instance to be inserted.
    # +short_opts+::  List of short style options.
    # +long_opts+::   List of long style options.
    # +nolong_opts+:: List of long style options with "no-" prefix.
    #
    #   append(switch, short_opts, long_opts, nolong_opts)
    #
    def append(*args)
      update(*args)
      @list.push(args[0])
    end

    #
    # Searches +key+ in +id+ list. The result is returned or yielded if a
    # block is given. If it isn't found, nil is returned.
    #
    def search(id, key)
      if list = __send__(id)
        val = list.fetch(key) {return nil}
        block_given? ? yield(val) : val
      end
    end

    #
    # Searches list +id+ for +opt+ and the optional patterns for completion
    # +pat+. If +icase+ is true, the search is case insensitive. The result
    # is returned or yielded if a block is given. If it isn't found, nil is
    # returned.
    #
    def complete(id, opt, icase = false, *pat, &block)
      __send__(id).complete(opt, icase, *pat, &block)
    end

    def get_candidates(id)
      yield __send__(id).keys
    end

    #
    # Iterates over each option, passing the option to the +block+.
    #
    def each_option(&block)
      list.each(&block)
    end

    #
    # Creates the summary table, passing each line to the +block+ (without
    # newline). The arguments +args+ are passed along to the summarize
    # method which is called on every option.
    #
    def summarize(*args, &block)
      sum = []
      list.reverse_each do |opt|
        if opt.respond_to?(:summarize) # perhaps Gem::OptionParser::Switch
          s = []
          opt.summarize(*args) {|l| s << l}
          sum.concat(s.reverse)
        elsif !opt or opt.empty?
          sum << ""
        elsif opt.respond_to?(:each_line)
          sum.concat([*opt.each_line].reverse)
        else
          sum.concat([*opt.each].reverse)
        end
      end
      sum.reverse_each(&block)
    end

    def add_banner(to)  # :nodoc:
      list.each do |opt|
        if opt.respond_to?(:add_banner)
          opt.add_banner(to)
        end
      end
      to
    end

    def compsys(*args, &block)  # :nodoc:
      list.each do |opt|
        if opt.respond_to?(:compsys)
          opt.compsys(*args, &block)
        end
      end
    end
  end

  #
  # Hash with completion search feature. See Gem::OptionParser::Completion.
  #
  class CompletingHash < Hash
    include Completion

    #
    # Completion for hash key.
    #
    def match(key)
      *values = fetch(key) {
        raise AmbiguousArgument, catch(:ambiguous) {return complete(key)}
      }
      return key, *values
    end
  end

  # :stopdoc:

  #
  # Enumeration of acceptable argument styles. Possible values are:
  #
  # NO_ARGUMENT::       The switch takes no arguments. (:NONE)
  # REQUIRED_ARGUMENT:: The switch requires an argument. (:REQUIRED)
  # OPTIONAL_ARGUMENT:: The switch requires an optional argument. (:OPTIONAL)
  #
  # Use like --switch=argument (long style) or -Xargument (short style). For
  # short style, only portion matched to argument pattern is treated as
  # argument.
  #
  ArgumentStyle = {}
  NoArgument.each {|el| ArgumentStyle[el] = Switch::NoArgument}
  RequiredArgument.each {|el| ArgumentStyle[el] = Switch::RequiredArgument}
  OptionalArgument.each {|el| ArgumentStyle[el] = Switch::OptionalArgument}
  ArgumentStyle.freeze

  #
  # Switches common used such as '--', and also provides default
  # argument classes
  #
  DefaultList = List.new
  DefaultList.short['-'] = Switch::NoArgument.new {}
  DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}


  COMPSYS_HEADER = <<'XXX'      # :nodoc:

typeset -A opt_args
local context state line

_arguments -s -S \
XXX

  def compsys(to, name = File.basename($0)) # :nodoc:
    to << "#compdef #{name}\n"
    to << COMPSYS_HEADER
    visit(:compsys, {}, {}) {|o, d|
      to << %Q[  "#{o}[#{d.gsub(/[\\\"\[\]]/, '\\\\\&')}]" \\\n]
    }
    to << "  '*:file:_files' && return 0\n"
  end

  def help_exit
    if STDOUT.tty? && (pager = ENV.values_at(*%w[RUBY_PAGER PAGER]).find {|e| e && !e.empty?})
      less = ENV["LESS"]
      args = [{"LESS" => "#{!less || less.empty? ? '-' : less}Fe"}, pager, "w"]
      print = proc do |f|
        f.puts help
      rescue Errno::EPIPE
        # pager terminated
      end
      if Process.respond_to?(:fork) and false
        IO.popen("-") {|f| f ? Process.exec(*args, in: f) : print.call(STDOUT)}
        # unreachable
      end
      IO.popen(*args, &print)
    else
      puts help
    end
    exit
  end

  #
  # Default options for ARGV, which never appear in option summary.
  #
  Officious = {}

  #
  # --help
  # Shows option summary.
  #
  Officious['help'] = proc do |parser|
    Switch::NoArgument.new do |arg|
      parser.help_exit
    end
  end

  #
  # --*-completion-bash=WORD
  # Shows candidates for command line completion.
  #
  Officious['*-completion-bash'] = proc do |parser|
    Switch::RequiredArgument.new do |arg|
      puts parser.candidate(arg)
      exit
    end
  end

  #
  # --*-completion-zsh[=NAME:FILE]
  # Creates zsh completion file.
  #
  Officious['*-completion-zsh'] = proc do |parser|
    Switch::OptionalArgument.new do |arg|
      parser.compsys(STDOUT, arg)
      exit
    end
  end

  #
  # --version
  # Shows version string if Version is defined.
  #
  Officious['version'] = proc do |parser|
    Switch::OptionalArgument.new do |pkg|
      if pkg
        begin
          require_relative 'optparse/version'
        rescue LoadError
        else
          show_version(*pkg.split(/,/)) or
            abort("#{parser.program_name}: no version found in package #{pkg}")
          exit
        end
      end
      v = parser.ver or abort("#{parser.program_name}: version unknown")
      puts v
      exit
    end
  end

  # :startdoc:

  #
  # Class methods
  #

  #
  # Initializes a new instance and evaluates the optional block in context
  # of the instance. Arguments +args+ are passed to #new, see there for
  # description of parameters.
  #
  # This method is *deprecated*, its behavior corresponds to the older #new
  # method.
  #
  def self.with(*args, &block)
    opts = new(*args)
    opts.instance_eval(&block)
    opts
  end

  #
  # Returns an incremented value of +default+ according to +arg+.
  #
  def self.inc(arg, default = nil)
    case arg
    when Integer
      arg.nonzero?
    when nil
      default.to_i + 1
    end
  end

  #
  # See self.inc
  #
  def inc(*args)
    self.class.inc(*args)
  end

  #
  # Initializes the instance and yields itself if called with a block.
  #
  # +banner+:: Banner message.
  # +width+::  Summary width.
  # +indent+:: Summary indent.
  #
  def initialize(banner = nil, width = 32, indent = ' ' * 4)
    @stack = [DefaultList, List.new, List.new]
    @program_name = nil
    @banner = banner
    @summary_width = width
    @summary_indent = indent
    @default_argv = ARGV
    @require_exact = false
    @raise_unknown = true
    add_officious
    yield self if block_given?
  end

  def add_officious  # :nodoc:
    list = base()
    Officious.each do |opt, block|
      list.long[opt] ||= block.call(self)
    end
  end

  #
  # Terminates option parsing. Optional parameter +arg+ is a string pushed
  # back to be the first non-option argument.
  #
  def terminate(arg = nil)
    self.class.terminate(arg)
  end
  #
  # See #terminate.
  #
  def self.terminate(arg = nil)
    throw :terminate, arg
  end

  @stack = [DefaultList]
  #
  # Returns the global top option list.
  #
  # Do not use directly.
  #
  def self.top() DefaultList end

  #
  # Directs to accept specified class +t+. The argument string is passed to
  # the block in which it should be converted to the desired class.
  #
  # +t+::   Argument class specifier, any object including Class.
  # +pat+:: Pattern for argument, defaults to +t+ if it responds to match.
  #
  #   accept(t, pat, &block)
  #
  def accept(*args, &blk) top.accept(*args, &blk) end
  #
  # See #accept.
  #
  def self.accept(*args, &blk) top.accept(*args, &blk) end

  #
  # Directs to reject specified class argument.
  #
  # +type+:: Argument class specifier, any object including Class.
  #
  #   reject(type)
  #
  def reject(*args, &blk) top.reject(*args, &blk) end
  #
  # See #reject.
  #
  def self.reject(*args, &blk) top.reject(*args, &blk) end

  #
  # Instance methods
  #

  # Heading banner preceding summary.
  attr_writer :banner

  # Program name to be emitted in error message and default banner,
  # defaults to $0.
  attr_writer :program_name

  # Width for option list portion of summary. Must be Numeric.
  attr_accessor :summary_width

  # Indentation for summary. Must be String (or have + String method).
  attr_accessor :summary_indent

  # Strings to be parsed in default.
  attr_accessor :default_argv

  # Whether to require that options match exactly (disallows providing
  # abbreviated long option as short option).
  attr_accessor :require_exact

  # Whether to raise at unknown option.
  attr_accessor :raise_unknown

  #
  # Heading banner preceding summary.
  #
  def banner
    unless @banner
      @banner = +"Usage: #{program_name} [options]"
      visit(:add_banner, @banner)
    end
    @banner
  end

  #
  # Program name to be emitted in error message and default banner, defaults
  # to $0.
  #
  def program_name
    @program_name || File.basename($0, '.*')
  end

  # for experimental cascading :-)
  alias set_banner banner=
  alias set_program_name program_name=
  alias set_summary_width summary_width=
  alias set_summary_indent summary_indent=

  # Version
  attr_writer :version
  # Release code
  attr_writer :release

  #
  # Version
  #
  def version
    (defined?(@version) && @version) || (defined?(::Version) && ::Version)
  end

  #
  # Release code
  #
  def release
    (defined?(@release) && @release) || (defined?(::Release) && ::Release) || (defined?(::RELEASE) && ::RELEASE)
  end

  #
  # Returns version string from program_name, version and release.
  #
  def ver
    if v = version
      str = +"#{program_name} #{[v].join('.')}"
      str << " (#{v})" if v = release
      str
    end
  end

  #
  # Shows warning message with the program name
  #
  # +mesg+:: Message, defaulted to +$!+.
  #
  # See Kernel#warn.
  #
  def warn(mesg = $!)
    super("#{program_name}: #{mesg}")
  end

  #
  # Shows message with the program name then aborts.
  #
  # +mesg+:: Message, defaulted to +$!+.
  #
  # See Kernel#abort.
  #
  def abort(mesg = $!)
    super("#{program_name}: #{mesg}")
  end

  #
  # Subject of #on / #on_head, #accept / #reject
  #
  def top
    @stack[-1]
  end

  #
  # Subject of #on_tail.
  #
  def base
    @stack[1]
  end

  #
  # Pushes a new List.
  #
  # If a block is given, yields +self+ and returns the result of the
  # block, otherwise returns +self+.
  #
  def new
    @stack.push(List.new)
    if block_given?
      yield self
    else
      self
    end
  end

  #
  # Removes the last List.
  #
  def remove
    @stack.pop
  end

  #
  # Puts option summary into +to+ and returns +to+. Yields each line if
  # a block is given.
  #
  # +to+:: Output destination, which must have method <<. Defaults to [].
  # +width+:: Width of left side, defaults to @summary_width.
  # +max+:: Maximum length allowed for left side, defaults to +width+ - 1.
  # +indent+:: Indentation, defaults to @summary_indent.
  #
  def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
    nl = "\n"
    blk ||= proc {|l| to << (l.index(nl, -1) ? l : l + nl)}
    visit(:summarize, {}, {}, width, max, indent, &blk)
    to
  end

  #
  # Returns option summary string.
  #
  def help; summarize("#{banner}".sub(/\n?\z/, "\n")) end
  alias to_s help

  def pretty_print(q)           # :nodoc:
    q.object_group(self) do
      first = true
      if @stack.size > 2
        @stack.each_with_index do |s, i|
          next if i < 2
          next if s.list.empty?
          if first
            first = false
            q.text ":"
          end
          q.breakable
          s.pretty_print(q)
        end
      end
    end
  end

  def inspect                   # :nodoc:
    require 'pp'
    pretty_print_inspect
  end

  #
  # Returns option summary list.
  #
  def to_a; summarize("#{banner}".split(/^/)) end

  #
  # Checks if an argument is given twice, in which case an ArgumentError is
  # raised. Called from Gem::OptionParser#switch only.
  #
  # +obj+:: New argument.
  # +prv+:: Previously specified argument.
  # +msg+:: Exception message.
  #
  def notwice(obj, prv, msg) # :nodoc:
    unless !prv or prv == obj
      raise(ArgumentError, "argument #{msg} given twice: #{obj}",
            ParseError.filter_backtrace(caller(2)))
    end
    obj
  end
  private :notwice

  SPLAT_PROC = proc {|*a| a.length <= 1 ? a.first : a} # :nodoc:

  # :call-seq:
  #   make_switch(params, block = nil)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def make_switch(opts, block = nil)
    short, long, nolong, style, pattern, conv, not_pattern, not_conv, not_style = [], [], []
    ldesc, sdesc, desc, arg = [], [], []
    default_style = Switch::NoArgument
    default_pattern = nil
    klass = nil
    q, a = nil
    has_arg = false

    opts.each do |o|
      # argument class
      next if search(:atype, o) do |pat, c|
        klass = notwice(o, klass, 'type')
        if not_style and not_style != Switch::NoArgument
          not_pattern, not_conv = pat, c
        else
          default_pattern, conv = pat, c
        end
      end

      # directly specified pattern(any object possible to match)
      if (!(String === o || Symbol === o)) and o.respond_to?(:match)
        pattern = notwice(o, pattern, 'pattern')
        if pattern.respond_to?(:convert)
          conv = pattern.method(:convert).to_proc
        else
          conv = SPLAT_PROC
        end
        next
      end

      # anything others
      case o
      when Proc, Method
        block = notwice(o, block, 'block')
      when Array, Hash
        case pattern
        when CompletingHash
        when nil
          pattern = CompletingHash.new
          conv = pattern.method(:convert).to_proc if pattern.respond_to?(:convert)
        else
          raise ArgumentError, "argument pattern given twice"
        end
        o.each {|pat, *v| pattern[pat] = v.fetch(0) {pat}}
      when Module
        raise ArgumentError, "unsupported argument type: #{o}", ParseError.filter_backtrace(caller(4))
      when *ArgumentStyle.keys
        style = notwice(ArgumentStyle[o], style, 'style')
      when /^--no-([^\[\]=\s]*)(.+)?/
        q, a = $1, $2
        o = notwice(a ? Object : TrueClass, klass, 'type')
        not_pattern, not_conv = search(:atype, o) unless not_style
        not_style = (not_style || default_style).guess(arg = a) if a
        default_style = Switch::NoArgument
        default_pattern, conv = search(:atype, FalseClass) unless default_pattern
        ldesc << "--no-#{q}"
        (q = q.downcase).tr!('_', '-')
        long << "no-#{q}"
        nolong << q
      when /^--\[no-\]([^\[\]=\s]*)(.+)?/
        q, a = $1, $2
        o = notwice(a ? Object : TrueClass, klass, 'type')
        if a
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        end
        ldesc << "--[no-]#{q}"
        (o = q.downcase).tr!('_', '-')
        long << o
        not_pattern, not_conv = search(:atype, FalseClass) unless not_style
        not_style = Switch::NoArgument
        nolong << "no-#{o}"
      when /^--([^\[\]=\s]*)(.+)?/
        q, a = $1, $2
        if a
          o = notwice(NilClass, klass, 'type')
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        end
        ldesc << "--#{q}"
        (o = q.downcase).tr!('_', '-')
        long << o
      when /^-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/
        q, a = $1, $2
        o = notwice(Object, klass, 'type')
        if a
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        else
          has_arg = true
        end
        sdesc << "-#{q}"
        short << Regexp.new(q)
      when /^-(.)(.+)?/
        q, a = $1, $2
        if a
          o = notwice(NilClass, klass, 'type')
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        end
        sdesc << "-#{q}"
        short << q
      when /^=/
        style = notwice(default_style.guess(arg = o), style, 'style')
        default_pattern, conv = search(:atype, Object) unless default_pattern
      else
        desc.push(o) if o && !o.empty?
      end
    end

    default_pattern, conv = search(:atype, default_style.pattern) unless default_pattern
    if !(short.empty? and long.empty?)
      if has_arg and default_style == Switch::NoArgument
        default_style = Switch::RequiredArgument
      end
      s = (style || default_style).new(pattern || default_pattern,
                                       conv, sdesc, ldesc, arg, desc, block)
    elsif !block
      if style or pattern
        raise ArgumentError, "no switch given", ParseError.filter_backtrace(caller)
      end
      s = desc
    else
      short << pattern
      s = (style || default_style).new(pattern,
                                       conv, nil, nil, arg, desc, block)
    end
    return s, short, long,
      (not_style.new(not_pattern, not_conv, sdesc, ldesc, nil, desc, block) if not_style),
      nolong
  end

  # ----
  # Option definition phase methods
  #
  # These methods are used to define options, or to construct an
  # Gem::OptionParser instance in other words.

  # :call-seq:
  #   define(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def define(*opts, &block)
    top.append(*(sw = make_switch(opts, block)))
    sw[0]
  end

  # :call-seq:
  #   on(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def on(*opts, &block)
    define(*opts, &block)
    self
  end
  alias def_option define

  # :call-seq:
  #   define_head(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def define_head(*opts, &block)
    top.prepend(*(sw = make_switch(opts, block)))
    sw[0]
  end

  # :call-seq:
  #   on_head(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  # The new option is added at the head of the summary.
  #
  def on_head(*opts, &block)
    define_head(*opts, &block)
    self
  end
  alias def_head_option define_head

  # :call-seq:
  #   define_tail(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def define_tail(*opts, &block)
    base.append(*(sw = make_switch(opts, block)))
    sw[0]
  end

  #
  # :call-seq:
  #   on_tail(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  # The new option is added at the tail of the summary.
  #
  def on_tail(*opts, &block)
    define_tail(*opts, &block)
    self
  end
  alias def_tail_option define_tail

  #
  # Add separator in summary.
  #
  def separator(string)
    top.append(string, nil, nil)
  end

  # ----
  # Arguments parse phase methods
  #
  # These methods parse +argv+, convert, and store the results by
  # calling handlers.  As these methods do not modify +self+, +self+
  # can be frozen.

  #
  # Parses command line arguments +argv+ in order. When a block is given,
  # each non-option argument is yielded. When optional +into+ keyword
  # argument is provided, the parsed option values are stored there via
  # <code>[]=</code> method (so it can be Hash, or OpenStruct, or other
  # similar object).
  #
  # Returns the rest of +argv+ left unparsed.
  #
  def order(*argv, **keywords, &nonopt)
    argv = argv[0].dup if argv.size == 1 and Array === argv[0]
    order!(argv, **keywords, &nonopt)
  end

  #
  # Same as #order, but removes switches destructively.
  # Non-option arguments remain in +argv+.
  #
  def order!(argv = default_argv, into: nil, **keywords, &nonopt)
    setter = ->(name, val) {into[name.to_sym] = val} if into
    parse_in_order(argv, setter, **keywords, &nonopt)
  end

  def parse_in_order(argv = default_argv, setter = nil, exact: require_exact, **, &nonopt)  # :nodoc:
    opt, arg, val, rest = nil
    nonopt ||= proc {|a| throw :terminate, a}
    argv.unshift(arg) if arg = catch(:terminate) {
      while arg = argv.shift
        case arg
        # long option
        when /\A--([^=]*)(?:=(.*))?/m
          opt, rest = $1, $2
          opt.tr!('_', '-')
          begin
            if exact
              sw, = search(:long, opt)
            else
              sw, = complete(:long, opt, true)
            end
          rescue ParseError
            throw :terminate, arg unless raise_unknown
            raise $!.set_option(arg, true)
          else
            unless sw
              throw :terminate, arg unless raise_unknown
              raise InvalidOption, arg
            end
          end
          begin
            opt, cb, val = sw.parse(rest, argv) {|*exc| raise(*exc)}
            val = callback!(cb, 1, val) if cb
            callback!(setter, 2, sw.switch_name, val) if setter
          rescue ParseError
            raise $!.set_option(arg, rest)
          end

        # short option
        when /\A-(.)((=).*|.+)?/m
          eq, rest, opt = $3, $2, $1
          has_arg, val = eq, rest
          begin
            sw, = search(:short, opt)
            unless sw
              begin
                sw, = complete(:short, opt)
                # short option matched.
                val = arg.delete_prefix('-')
                has_arg = true
              rescue InvalidOption
                raise if exact
                # if no short options match, try completion with long
                # options.
                sw, = complete(:long, opt)
                eq ||= !rest
              end
            end
          rescue ParseError
            throw :terminate, arg unless raise_unknown
            raise $!.set_option(arg, true)
          end
          begin
            opt, cb, val = sw.parse(val, argv) {|*exc| raise(*exc) if eq}
          rescue ParseError
            raise $!.set_option(arg, arg.length > 2)
          else
            raise InvalidOption, arg if has_arg and !eq and arg == "-#{opt}"
          end
          begin
            argv.unshift(opt) if opt and (!rest or (opt = opt.sub(/\A-*/, '-')) != '-')
            val = callback!(cb, 1, val) if cb
            callback!(setter, 2, sw.switch_name, val) if setter
          rescue ParseError
            raise $!.set_option(arg, arg.length > 2)
          end

        # non-option argument
        else
          catch(:prune) do
            visit(:each_option) do |sw0|
              sw = sw0
              sw.block.call(arg) if Switch === sw and sw.match_nonswitch?(arg)
            end
            nonopt.call(arg)
          end
        end
      end

      nil
    }

    visit(:search, :short, nil) {|sw| sw.block.call(*argv) if !sw.pattern}

    argv
  end
  private :parse_in_order

  # Calls callback with _val_.
  def callback!(cb, max_arity, *args) # :nodoc:
    args.compact!

    if (size = args.size) < max_arity and cb.to_proc.lambda?
      (arity = cb.arity) < 0 and arity = (1-arity)
      arity = max_arity if arity > max_arity
      args[arity - 1] = nil if arity > size
    end
    cb.call(*args)
  end
  private :callback!

  #
  # Parses command line arguments +argv+ in permutation mode and returns
  # list of non-option arguments. When optional +into+ keyword
  # argument is provided, the parsed option values are stored there via
  # <code>[]=</code> method (so it can be Hash, or OpenStruct, or other
  # similar object).
  #
  def permute(*argv, **keywords)
    argv = argv[0].dup if argv.size == 1 and Array === argv[0]
    permute!(argv, **keywords)
  end

  #
  # Same as #permute, but removes switches destructively.
  # Non-option arguments remain in +argv+.
  #
  def permute!(argv = default_argv, **keywords)
    nonopts = []
    order!(argv, **keywords, &nonopts.method(:<<))
    argv[0, 0] = nonopts
    argv
  end

  #
  # Parses command line arguments +argv+ in order when environment variable
  # POSIXLY_CORRECT is set, and in permutation mode otherwise.
  # When optional +into+ keyword argument is provided, the parsed option
  # values are stored there via <code>[]=</code> method (so it can be Hash,
  # or OpenStruct, or other similar object).
  #
  def parse(*argv, **keywords)
    argv = argv[0].dup if argv.size == 1 and Array === argv[0]
    parse!(argv, **keywords)
  end

  #
  # Same as #parse, but removes switches destructively.
  # Non-option arguments remain in +argv+.
  #
  def parse!(argv = default_argv, **keywords)
    if ENV.include?('POSIXLY_CORRECT')
      order!(argv, **keywords)
    else
      permute!(argv, **keywords)
    end
  end

  #
  # Wrapper method for getopts.rb.
  #
  #   params = ARGV.getopts("ab:", "foo", "bar:", "zot:Z;zot option")
  #   # params["a"] = true   # -a
  #   # params["b"] = "1"    # -b1
  #   # params["foo"] = "1"  # --foo
  #   # params["bar"] = "x"  # --bar x
  #   # params["zot"] = "z"  # --zot Z
  #
  # Option +symbolize_names+ (boolean) specifies whether returned Hash keys should be Symbols; defaults to +false+ (use Strings).
  #
  #   params = ARGV.getopts("ab:", "foo", "bar:", "zot:Z;zot option", symbolize_names: true)
  #   # params[:a] = true   # -a
  #   # params[:b] = "1"    # -b1
  #   # params[:foo] = "1"  # --foo
  #   # params[:bar] = "x"  # --bar x
  #   # params[:zot] = "z"  # --zot Z
  #
  def getopts(*args, symbolize_names: false, **keywords)
    argv = Array === args.first ? args.shift : default_argv
    single_options, *long_options = *args

    result = {}

    single_options.scan(/(.)(:)?/) do |opt, val|
      if val
        result[opt] = nil
        define("-#{opt} VAL")
      else
        result[opt] = false
        define("-#{opt}")
      end
    end if single_options

    long_options.each do |arg|
      arg, desc = arg.split(';', 2)
      opt, val = arg.split(':', 2)
      if val
        result[opt] = val.empty? ? nil : val
        define("--#{opt}=#{result[opt] || "VAL"}", *[desc].compact)
      else
        result[opt] = false
        define("--#{opt}", *[desc].compact)
      end
    end

    parse_in_order(argv, result.method(:[]=), **keywords)
    symbolize_names ? result.transform_keys(&:to_sym) : result
  end

  #
  # See #getopts.
  #
  def self.getopts(*args, symbolize_names: false)
    new.getopts(*args, symbolize_names: symbolize_names)
  end

  #
  # Traverses @stack, sending each element method +id+ with +args+ and
  # +block+.
  #
  def visit(id, *args, &block) # :nodoc:
    @stack.reverse_each do |el|
      el.__send__(id, *args, &block)
    end
    nil
  end
  private :visit

  #
  # Searches +key+ in @stack for +id+ hash and returns or yields the result.
  #
  def search(id, key) # :nodoc:
    block_given = block_given?
    visit(:search, id, key) do |k|
      return block_given ? yield(k) : k
    end
  end
  private :search

  #
  # Completes shortened long style option switch and returns pair of
  # canonical switch and switch descriptor Gem::OptionParser::Switch.
  #
  # +typ+::   Searching table.
  # +opt+::   Searching key.
  # +icase+:: Search case insensitive if true.
  # +pat+::   Optional pattern for completion.
  #
  def complete(typ, opt, icase = false, *pat) # :nodoc:
    if pat.empty?
      search(typ, opt) {|sw| return [sw, opt]} # exact match or...
    end
    ambiguous = catch(:ambiguous) {
      visit(:complete, typ, opt, icase, *pat) {|o, *sw| return sw}
    }
    exc = ambiguous ? AmbiguousOption : InvalidOption
    raise exc.new(opt, additional: self.method(:additional_message).curry[typ])
  end
  private :complete

  #
  # Returns additional info.
  #
  def additional_message(typ, opt)
    return unless typ and opt and defined?(DidYouMean::SpellChecker)
    all_candidates = []
    visit(:get_candidates, typ) do |candidates|
      all_candidates.concat(candidates)
    end
    all_candidates.select! {|cand| cand.is_a?(String) }
    checker = DidYouMean::SpellChecker.new(dictionary: all_candidates)
    DidYouMean.formatter.message_for(all_candidates & checker.correct(opt))
  end

  #
  # Return candidates for +word+.
  #
  def candidate(word)
    list = []
    case word
    when '-'
      long = short = true
    when /\A--/
      word, arg = word.split(/=/, 2)
      argpat = Completion.regexp(arg, false) if arg and !arg.empty?
      long = true
    when /\A-/
      short = true
    end
    pat = Completion.regexp(word, long)
    visit(:each_option) do |opt|
      next unless Switch === opt
      opts = (long ? opt.long : []) + (short ? opt.short : [])
      opts = Completion.candidate(word, true, pat, &opts.method(:each)).map(&:first) if pat
      if /\A=/ =~ opt.arg
        opts.map! {|sw| sw + "="}
        if arg and CompletingHash === opt.pattern
          if opts = opt.pattern.candidate(arg, false, argpat)
            opts.map!(&:last)
          end
        end
      end
      list.concat(opts)
    end
    list
  end

  #
  # Loads options from file names as +filename+. Does nothing when the file
  # is not present. Returns whether successfully loaded.
  #
  # +filename+ defaults to basename of the program without suffix in a
  # directory ~/.options, then the basename with '.options' suffix
  # under XDG and Haiku standard places.
  #
  # The optional +into+ keyword argument works exactly like that accepted in
  # method #parse.
  #
  def load(filename = nil, **keywords)
    unless filename
      basename = File.basename($0, '.*')
      return true if load(File.expand_path(basename, '~/.options'), **keywords) rescue nil
      basename << ".options"
      return [
        # XDG
        ENV['XDG_CONFIG_HOME'],
        '~/.config',
        *ENV['XDG_CONFIG_DIRS']&.split(File::PATH_SEPARATOR),

        # Haiku
        '~/config/settings',
      ].any? {|dir|
        next if !dir or dir.empty?
        load(File.expand_path(basename, dir), **keywords) rescue nil
      }
    end
    begin
      parse(*File.readlines(filename, chomp: true), **keywords)
      true
    rescue Errno::ENOENT, Errno::ENOTDIR
      false
    end
  end

  #
  # Parses environment variable +env+ or its uppercase with splitting like a
  # shell.
  #
  # +env+ defaults to the basename of the program.
  #
  def environment(env = File.basename($0, '.*'), **keywords)
    env = ENV[env] || ENV[env.upcase] or return
    require 'shellwords'
    parse(*Shellwords.shellwords(env), **keywords)
  end

  #
  # Acceptable argument classes
  #

  #
  # Any string and no conversion. This is fall-back.
  #
  accept(Object) {|s,|s or s.nil?}

  accept(NilClass) {|s,|s}

  #
  # Any non-empty string, and no conversion.
  #
  accept(String, /.+/m) {|s,*|s}

  #
  # Ruby/C-like integer, octal for 0-7 sequence, binary for 0b, hexadecimal
  # for 0x, and decimal for others; with optional sign prefix. Converts to
  # Integer.
  #
  decimal = '\d+(?:_\d+)*'
  binary = 'b[01]+(?:_[01]+)*'
  hex = 'x[\da-f]+(?:_[\da-f]+)*'
  octal = "0(?:[0-7]+(?:_[0-7]+)*|#{binary}|#{hex})?"
  integer = "#{octal}|#{decimal}"

  accept(Integer, %r"\A[-+]?(?:#{integer})\z"io) {|s,|
    begin
      Integer(s)
    rescue ArgumentError
      raise Gem::OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Float number format, and converts to Float.
  #
  float = "(?:#{decimal}(?=(.)?)(?:\\.(?:#{decimal})?)?|\\.#{decimal})(?:E[-+]?#{decimal})?"
  floatpat = %r"\A[-+]?#{float}\z"io
  accept(Float, floatpat) {|s,| s.to_f if s}

  #
  # Generic numeric format, converts to Integer for integer format, Float
  # for float format, and Rational for rational format.
  #
  real = "[-+]?(?:#{octal}|#{float})"
  accept(Numeric, /\A(#{real})(?:\/(#{real}))?\z/io) {|s, d, f, n,|
    if n
      Rational(d, n)
    elsif f
      Float(s)
    else
      Integer(s)
    end
  }

  #
  # Decimal integer format, to be converted to Integer.
  #
  DecimalInteger = /\A[-+]?#{decimal}\z/io
  accept(DecimalInteger, DecimalInteger) {|s,|
    begin
      Integer(s, 10)
    rescue ArgumentError
      raise Gem::OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Ruby/C like octal/hexadecimal/binary integer format, to be converted to
  # Integer.
  #
  OctalInteger = /\A[-+]?(?:[0-7]+(?:_[0-7]+)*|0(?:#{binary}|#{hex}))\z/io
  accept(OctalInteger, OctalInteger) {|s,|
    begin
      Integer(s, 8)
    rescue ArgumentError
      raise Gem::OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Decimal integer/float number format, to be converted to Integer for
  # integer format, Float for float format.
  #
  DecimalNumeric = floatpat     # decimal integer is allowed as float also.
  accept(DecimalNumeric, floatpat) {|s, f|
    begin
      if f
        Float(s)
      else
        Integer(s)
      end
    rescue ArgumentError
      raise Gem::OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Boolean switch, which means whether it is present or not, whether it is
  # absent or not with prefix no-, or it takes an argument
  # yes/no/true/false/+/-.
  #
  yesno = CompletingHash.new
  %w[- no false].each {|el| yesno[el] = false}
  %w[+ yes true].each {|el| yesno[el] = true}
  yesno['nil'] = false          # should be nil?
  accept(TrueClass, yesno) {|arg, val| val == nil or val}
  #
  # Similar to TrueClass, but defaults to false.
  #
  accept(FalseClass, yesno) {|arg, val| val != nil and val}

  #
  # List of strings separated by ",".
  #
  accept(Array) do |s, |
    if s
      s = s.split(',').collect {|ss| ss unless ss.empty?}
    end
    s
  end

  #
  # Regular expression with options.
  #
  accept(Regexp, %r"\A/((?:\\.|[^\\])*)/([[:alpha:]]+)?\z|.*") do |all, s, o|
    f = 0
    if o
      f |= Regexp::IGNORECASE if /i/ =~ o
      f |= Regexp::MULTILINE if /m/ =~ o
      f |= Regexp::EXTENDED if /x/ =~ o
      case o = o.delete("imx")
      when ""
      when "u"
        s = s.encode(Encoding::UTF_8)
      when "e"
        s = s.encode(Encoding::EUC_JP)
      when "s"
        s = s.encode(Encoding::SJIS)
      when "n"
        f |= Regexp::NOENCODING
      else
        raise Gem::OptionParser::InvalidArgument, "unknown regexp option - #{o}"
      end
    else
      s ||= all
    end
    Regexp.new(s, f)
  end

  #
  # Exceptions
  #

  #
  # Base class of exceptions from Gem::OptionParser.
  #
  class ParseError < RuntimeError
    # Reason which caused the error.
    Reason = 'parse error'

    # :nodoc:
    def initialize(*args, additional: nil)
      @additional = additional
      @arg0, = args
      @args = args
      @reason = nil
    end

    attr_reader :args
    attr_writer :reason
    attr_accessor :additional

    #
    # Pushes back erred argument(s) to +argv+.
    #
    def recover(argv)
      argv[0, 0] = @args
      argv
    end

    def self.filter_backtrace(array)
      unless $DEBUG
        array.delete_if(&%r"\A#{Regexp.quote(__FILE__)}:"o.method(:=~))
      end
      array
    end

    def set_backtrace(array)
      super(self.class.filter_backtrace(array))
    end

    def set_option(opt, eq)
      if eq
        @args[0] = opt
      else
        @args.unshift(opt)
      end
      self
    end

    #
    # Returns error reason. Override this for I18N.
    #
    def reason
      @reason || self.class::Reason
    end

    def inspect
      "#<#{self.class}: #{args.join(' ')}>"
    end

    #
    # Default stringizing method to emit standard error message.
    #
    def message
      "#{reason}: #{args.join(' ')}#{additional[@arg0] if additional}"
    end

    alias to_s message
  end

  #
  # Raises when ambiguously completable string is encountered.
  #
  class AmbiguousOption < ParseError
    const_set(:Reason, 'ambiguous option')
  end

  #
  # Raises when there is an argument for a switch which takes no argument.
  #
  class NeedlessArgument < ParseError
    const_set(:Reason, 'needless argument')
  end

  #
  # Raises when a switch with mandatory argument has no argument.
  #
  class MissingArgument < ParseError
    const_set(:Reason, 'missing argument')
  end

  #
  # Raises when switch is undefined.
  #
  class InvalidOption < ParseError
    const_set(:Reason, 'invalid option')
  end

  #
  # Raises when the given argument does not match required format.
  #
  class InvalidArgument < ParseError
    const_set(:Reason, 'invalid argument')
  end

  #
  # Raises when the given argument word can't be completed uniquely.
  #
  class AmbiguousArgument < InvalidArgument
    const_set(:Reason, 'ambiguous argument')
  end

  #
  # Miscellaneous
  #

  #
  # Extends command line arguments array (ARGV) to parse itself.
  #
  module Arguable

    #
    # Sets Gem::OptionParser object, when +opt+ is +false+ or +nil+, methods
    # Gem::OptionParser::Arguable#options and Gem::OptionParser::Arguable#options= are
    # undefined. Thus, there is no ways to access the Gem::OptionParser object
    # via the receiver object.
    #
    def options=(opt)
      unless @optparse = opt
        class << self
          undef_method(:options)
          undef_method(:options=)
        end
      end
    end

    #
    # Actual Gem::OptionParser object, automatically created if nonexistent.
    #
    # If called with a block, yields the Gem::OptionParser object and returns the
    # result of the block. If an Gem::OptionParser::ParseError exception occurs
    # in the block, it is rescued, a error message printed to STDERR and
    # +nil+ returned.
    #
    def options
      @optparse ||= Gem::OptionParser.new
      @optparse.default_argv = self
      block_given? or return @optparse
      begin
        yield @optparse
      rescue ParseError
        @optparse.warn $!
        nil
      end
    end

    #
    # Parses +self+ destructively in order and returns +self+ containing the
    # rest arguments left unparsed.
    #
    def order!(**keywords, &blk) options.order!(self, **keywords, &blk) end

    #
    # Parses +self+ destructively in permutation mode and returns +self+
    # containing the rest arguments left unparsed.
    #
    def permute!(**keywords) options.permute!(self, **keywords) end

    #
    # Parses +self+ destructively and returns +self+ containing the
    # rest arguments left unparsed.
    #
    def parse!(**keywords) options.parse!(self, **keywords) end

    #
    # Substitution of getopts is possible as follows. Also see
    # Gem::OptionParser#getopts.
    #
    #   def getopts(*args)
    #     ($OPT = ARGV.getopts(*args)).each do |opt, val|
    #       eval "$OPT_#{opt.gsub(/[^A-Za-z0-9_]/, '_')} = val"
    #     end
    #   rescue Gem::OptionParser::ParseError
    #   end
    #
    def getopts(*args, symbolize_names: false, **keywords)
      options.getopts(self, *args, symbolize_names: symbolize_names, **keywords)
    end

    #
    # Initializes instance variable.
    #
    def self.extend_object(obj)
      super
      obj.instance_eval {@optparse = nil}
    end

    def initialize(*args)       # :nodoc:
      super
      @optparse = nil
    end
  end

  #
  # Acceptable argument classes. Now contains DecimalInteger, OctalInteger
  # and DecimalNumeric. See Acceptable argument classes (in source code).
  #
  module Acceptables
    const_set(:DecimalInteger, Gem::OptionParser::DecimalInteger)
    const_set(:OctalInteger, Gem::OptionParser::OctalInteger)
    const_set(:DecimalNumeric, Gem::OptionParser::DecimalNumeric)
  end
end

# ARGV is arguable by Gem::OptionParser
ARGV.extend(Gem::OptionParser::Arguable)
PK)J[݌���>share/rubygems/rubygems/vendor/net-http/lib/net/http/header.rbnu�[���# frozen_string_literal: true
#
# The \HTTPHeader module provides access to \HTTP headers.
#
# The module is included in:
#
# - Gem::Net::HTTPGenericRequest (and therefore Gem::Net::HTTPRequest).
# - Gem::Net::HTTPResponse.
#
# The headers are a hash-like collection of key/value pairs called _fields_.
#
# == Request and Response Fields
#
# Headers may be included in:
#
# - A Gem::Net::HTTPRequest object:
#   the object's headers will be sent with the request.
#   Any fields may be defined in the request;
#   see {Setters}[rdoc-ref:Gem::Net::HTTPHeader@Setters].
# - A Gem::Net::HTTPResponse object:
#   the objects headers are usually those returned from the host.
#   Fields may be retrieved from the object;
#   see {Getters}[rdoc-ref:Gem::Net::HTTPHeader@Getters]
#   and {Iterators}[rdoc-ref:Gem::Net::HTTPHeader@Iterators].
#
# Exactly which fields should be sent or expected depends on the host;
# see:
#
# - {Request fields}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields].
# - {Response fields}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields].
#
# == About the Examples
#
# :include: doc/net-http/examples.rdoc
#
# == Fields
#
# A header field is a key/value pair.
#
# === Field Keys
#
# A field key may be:
#
# - A string: Key <tt>'Accept'</tt> is treated as if it were
#   <tt>'Accept'.downcase</tt>;  i.e., <tt>'accept'</tt>.
# - A symbol: Key <tt>:Accept</tt> is treated as if it were
#   <tt>:Accept.to_s.downcase</tt>;  i.e., <tt>'accept'</tt>.
#
# Examples:
#
#   req = Gem::Net::HTTP::Get.new(uri)
#   req[:accept]  # => "*/*"
#   req['Accept'] # => "*/*"
#   req['ACCEPT'] # => "*/*"
#
#   req['accept'] = 'text/html'
#   req[:accept] = 'text/html'
#   req['ACCEPT'] = 'text/html'
#
# === Field Values
#
# A field value may be returned as an array of strings or as a string:
#
# - These methods return field values as arrays:
#
#   - #get_fields: Returns the array value for the given key,
#     or +nil+ if it does not exist.
#   - #to_hash: Returns a hash of all header fields:
#     each key is a field name; its value is the array value for the field.
#
# - These methods return field values as string;
#   the string value for a field is equivalent to
#   <tt>self[key.downcase.to_s].join(', '))</tt>:
#
#   - #[]: Returns the string value for the given key,
#     or +nil+ if it does not exist.
#   - #fetch: Like #[], but accepts a default value
#     to be returned if the key does not exist.
#
# The field value may be set:
#
# - #[]=: Sets the value for the given key;
#   the given value may be a string, a symbol, an array, or a hash.
# - #add_field: Adds a given value to a value for the given key
#   (not overwriting the existing value).
# - #delete: Deletes the field for the given key.
#
# Example field values:
#
# - \String:
#
#     req['Accept'] = 'text/html' # => "text/html"
#     req['Accept']               # => "text/html"
#     req.get_fields('Accept')    # => ["text/html"]
#
# - \Symbol:
#
#     req['Accept'] = :text    # => :text
#     req['Accept']            # => "text"
#     req.get_fields('Accept') # => ["text"]
#
# - Simple array:
#
#     req[:foo] = %w[bar baz bat]
#     req[:foo]            # => "bar, baz, bat"
#     req.get_fields(:foo) # => ["bar", "baz", "bat"]
#
# - Simple hash:
#
#     req[:foo] = {bar: 0, baz: 1, bat: 2}
#     req[:foo]            # => "bar, 0, baz, 1, bat, 2"
#     req.get_fields(:foo) # => ["bar", "0", "baz", "1", "bat", "2"]
#
# - Nested:
#
#     req[:foo] = [%w[bar baz], {bat: 0, bam: 1}]
#     req[:foo]            # => "bar, baz, bat, 0, bam, 1"
#     req.get_fields(:foo) # => ["bar", "baz", "bat", "0", "bam", "1"]
#
#     req[:foo] = {bar: %w[baz bat], bam: {bah: 0, bad: 1}}
#     req[:foo]            # => "bar, baz, bat, bam, bah, 0, bad, 1"
#     req.get_fields(:foo) # => ["bar", "baz", "bat", "bam", "bah", "0", "bad", "1"]
#
# == Convenience Methods
#
# Various convenience methods retrieve values, set values, query values,
# set form values, or iterate over fields.
#
# === Setters
#
# \Method #[]= can set any field, but does little to validate the new value;
# some of the other setter methods provide some validation:
#
# - #[]=: Sets the string or array value for the given key.
# - #add_field: Creates or adds to the array value for the given key.
# - #basic_auth: Sets the string authorization header for <tt>'Authorization'</tt>.
# - #content_length=: Sets the integer length for field <tt>'Content-Length</tt>.
# - #content_type=: Sets the string value for field <tt>'Content-Type'</tt>.
# - #proxy_basic_auth: Sets the string authorization header for <tt>'Proxy-Authorization'</tt>.
# - #set_range: Sets the value for field <tt>'Range'</tt>.
#
# === Form Setters
#
# - #set_form: Sets an HTML form data set.
# - #set_form_data: Sets header fields and a body from HTML form data.
#
# === Getters
#
# \Method #[] can retrieve the value of any field that exists,
# but always as a string;
# some of the other getter methods return something different
# from the simple string value:
#
# - #[]: Returns the string field value for the given key.
# - #content_length: Returns the integer value of field <tt>'Content-Length'</tt>.
# - #content_range: Returns the Range value of field <tt>'Content-Range'</tt>.
# - #content_type: Returns the string value of field <tt>'Content-Type'</tt>.
# - #fetch: Returns the string field value for the given key.
# - #get_fields: Returns the array field value for the given +key+.
# - #main_type: Returns first part of the string value of field <tt>'Content-Type'</tt>.
# - #sub_type: Returns second part of the string value of field <tt>'Content-Type'</tt>.
# - #range: Returns an array of Range objects of field <tt>'Range'</tt>, or +nil+.
# - #range_length: Returns the integer length of the range given in field <tt>'Content-Range'</tt>.
# - #type_params: Returns the string parameters for <tt>'Content-Type'</tt>.
#
# === Queries
#
# - #chunked?: Returns whether field <tt>'Transfer-Encoding'</tt> is set to <tt>'chunked'</tt>.
# - #connection_close?: Returns whether field <tt>'Connection'</tt> is set to <tt>'close'</tt>.
# - #connection_keep_alive?: Returns whether field <tt>'Connection'</tt> is set to <tt>'keep-alive'</tt>.
# - #key?: Returns whether a given key exists.
#
# === Iterators
#
# - #each_capitalized: Passes each field capitalized-name/value pair to the block.
# - #each_capitalized_name: Passes each capitalized field name to the block.
# - #each_header: Passes each field name/value pair to the block.
# - #each_name: Passes each field name to the block.
# - #each_value: Passes each string field value to the block.
#
module Gem::Net::HTTPHeader
  MAX_KEY_LENGTH = 1024
  MAX_FIELD_LENGTH = 65536

  def initialize_http_header(initheader) #:nodoc:
    @header = {}
    return unless initheader
    initheader.each do |key, value|
      warn "net/http: duplicated HTTP header: #{key}", uplevel: 3 if key?(key) and $VERBOSE
      if value.nil?
        warn "net/http: nil HTTP header: #{key}", uplevel: 3 if $VERBOSE
      else
        value = value.strip # raise error for invalid byte sequences
        if key.to_s.bytesize > MAX_KEY_LENGTH
          raise ArgumentError, "too long (#{key.bytesize} bytes) header: #{key[0, 30].inspect}..."
        end
        if value.to_s.bytesize > MAX_FIELD_LENGTH
          raise ArgumentError, "header #{key} has too long field value: #{value.bytesize}"
        end
        if value.count("\r\n") > 0
          raise ArgumentError, "header #{key} has field value #{value.inspect}, this cannot include CR/LF"
        end
        @header[key.downcase.to_s] = [value]
      end
    end
  end

  def size   #:nodoc: obsolete
    @header.size
  end

  alias length size   #:nodoc: obsolete

  # Returns the string field value for the case-insensitive field +key+,
  # or +nil+ if there is no such key;
  # see {Fields}[rdoc-ref:Gem::Net::HTTPHeader@Fields]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Connection'] # => "keep-alive"
  #   res['Nosuch']     # => nil
  #
  # Note that some field values may be retrieved via convenience methods;
  # see {Getters}[rdoc-ref:Gem::Net::HTTPHeader@Getters].
  def [](key)
    a = @header[key.downcase.to_s] or return nil
    a.join(', ')
  end

  # Sets the value for the case-insensitive +key+ to +val+,
  # overwriting the previous value if the field exists;
  # see {Fields}[rdoc-ref:Gem::Net::HTTPHeader@Fields]:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req['Accept'] # => "*/*"
  #   req['Accept'] = 'text/html'
  #   req['Accept'] # => "text/html"
  #
  # Note that some field values may be set via convenience methods;
  # see {Setters}[rdoc-ref:Gem::Net::HTTPHeader@Setters].
  def []=(key, val)
    unless val
      @header.delete key.downcase.to_s
      return val
    end
    set_field(key, val)
  end

  # Adds value +val+ to the value array for field +key+ if the field exists;
  # creates the field with the given +key+ and +val+ if it does not exist.
  # see {Fields}[rdoc-ref:Gem::Net::HTTPHeader@Fields]:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req.add_field('Foo', 'bar')
  #   req['Foo']            # => "bar"
  #   req.add_field('Foo', 'baz')
  #   req['Foo']            # => "bar, baz"
  #   req.add_field('Foo', %w[baz bam])
  #   req['Foo']            # => "bar, baz, baz, bam"
  #   req.get_fields('Foo') # => ["bar", "baz", "baz", "bam"]
  #
  def add_field(key, val)
    stringified_downcased_key = key.downcase.to_s
    if @header.key?(stringified_downcased_key)
      append_field_value(@header[stringified_downcased_key], val)
    else
      set_field(key, val)
    end
  end

  private def set_field(key, val)
    case val
    when Enumerable
      ary = []
      append_field_value(ary, val)
      @header[key.downcase.to_s] = ary
    else
      val = val.to_s # for compatibility use to_s instead of to_str
      if val.b.count("\r\n") > 0
        raise ArgumentError, 'header field value cannot include CR/LF'
      end
      @header[key.downcase.to_s] = [val]
    end
  end

  private def append_field_value(ary, val)
    case val
    when Enumerable
      val.each{|x| append_field_value(ary, x)}
    else
      val = val.to_s
      if /[\r\n]/n.match?(val.b)
        raise ArgumentError, 'header field value cannot include CR/LF'
      end
      ary.push val
    end
  end

  # Returns the array field value for the given +key+,
  # or +nil+ if there is no such field;
  # see {Fields}[rdoc-ref:Gem::Net::HTTPHeader@Fields]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res.get_fields('Connection') # => ["keep-alive"]
  #   res.get_fields('Nosuch')     # => nil
  #
  def get_fields(key)
    stringified_downcased_key = key.downcase.to_s
    return nil unless @header[stringified_downcased_key]
    @header[stringified_downcased_key].dup
  end

  # call-seq:
  #   fetch(key, default_val = nil) {|key| ... } -> object
  #   fetch(key, default_val = nil) -> value or default_val
  #
  # With a block, returns the string value for +key+ if it exists;
  # otherwise returns the value of the block;
  # ignores the +default_val+;
  # see {Fields}[rdoc-ref:Gem::Net::HTTPHeader@Fields]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #
  #   # Field exists; block not called.
  #   res.fetch('Connection') do |value|
  #     fail 'Cannot happen'
  #   end # => "keep-alive"
  #
  #   # Field does not exist; block called.
  #   res.fetch('Nosuch') do |value|
  #     value.downcase
  #   end # => "nosuch"
  #
  # With no block, returns the string value for +key+ if it exists;
  # otherwise, returns +default_val+ if it was given;
  # otherwise raises an exception:
  #
  #   res.fetch('Connection', 'Foo') # => "keep-alive"
  #   res.fetch('Nosuch', 'Foo')     # => "Foo"
  #   res.fetch('Nosuch')            # Raises KeyError.
  #
  def fetch(key, *args, &block)   #:yield: +key+
    a = @header.fetch(key.downcase.to_s, *args, &block)
    a.kind_of?(Array) ? a.join(', ') : a
  end

  # Calls the block with each key/value pair:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_header do |key, value|
  #     p [key, value] if key.start_with?('c')
  #   end
  #
  # Output:
  #
  #   ["content-type", "application/json; charset=utf-8"]
  #   ["connection", "keep-alive"]
  #   ["cache-control", "max-age=43200"]
  #   ["cf-cache-status", "HIT"]
  #   ["cf-ray", "771d17e9bc542cf5-ORD"]
  #
  # Returns an enumerator if no block is given.
  #
  # Gem::Net::HTTPHeader#each is an alias for Gem::Net::HTTPHeader#each_header.
  def each_header   #:yield: +key+, +value+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each do |k,va|
      yield k, va.join(', ')
    end
  end

  alias each each_header

  # Calls the block with each field key:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_key do |key|
  #     p key if key.start_with?('c')
  #   end
  #
  # Output:
  #
  #   "content-type"
  #   "connection"
  #   "cache-control"
  #   "cf-cache-status"
  #   "cf-ray"
  #
  # Returns an enumerator if no block is given.
  #
  # Gem::Net::HTTPHeader#each_name is an alias for Gem::Net::HTTPHeader#each_key.
  def each_name(&block)   #:yield: +key+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each_key(&block)
  end

  alias each_key each_name

  # Calls the block with each capitalized field name:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_capitalized_name do |key|
  #     p key if key.start_with?('C')
  #   end
  #
  # Output:
  #
  #   "Content-Type"
  #   "Connection"
  #   "Cache-Control"
  #   "Cf-Cache-Status"
  #   "Cf-Ray"
  #
  # The capitalization is system-dependent;
  # see {Case Mapping}[https://docs.ruby-lang.org/en/master/case_mapping_rdoc.html].
  #
  # Returns an enumerator if no block is given.
  def each_capitalized_name  #:yield: +key+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each_key do |k|
      yield capitalize(k)
    end
  end

  # Calls the block with each string field value:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_value do |value|
  #     p value if value.start_with?('c')
  #   end
  #
  # Output:
  #
  #   "chunked"
  #   "cf-q-config;dur=6.0000002122251e-06"
  #   "cloudflare"
  #
  # Returns an enumerator if no block is given.
  def each_value   #:yield: +value+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each_value do |va|
      yield va.join(', ')
    end
  end

  # Removes the header for the given case-insensitive +key+
  # (see {Fields}[rdoc-ref:Gem::Net::HTTPHeader@Fields]);
  # returns the deleted value, or +nil+ if no such field exists:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req.delete('Accept') # => ["*/*"]
  #   req.delete('Nosuch') # => nil
  #
  def delete(key)
    @header.delete(key.downcase.to_s)
  end

  # Returns +true+ if the field for the case-insensitive +key+ exists, +false+ otherwise:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req.key?('Accept') # => true
  #   req.key?('Nosuch') # => false
  #
  def key?(key)
    @header.key?(key.downcase.to_s)
  end

  # Returns a hash of the key/value pairs:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req.to_hash
  #   # =>
  #   {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"],
  #    "accept"=>["*/*"],
  #    "user-agent"=>["Ruby"],
  #    "host"=>["jsonplaceholder.typicode.com"]}
  #
  def to_hash
    @header.dup
  end

  # Like #each_header, but the keys are returned in capitalized form.
  #
  # Gem::Net::HTTPHeader#canonical_each is an alias for Gem::Net::HTTPHeader#each_capitalized.
  def each_capitalized
    block_given? or return enum_for(__method__) { @header.size }
    @header.each do |k,v|
      yield capitalize(k), v.join(', ')
    end
  end

  alias canonical_each each_capitalized

  def capitalize(name)
    name.to_s.split('-'.freeze).map {|s| s.capitalize }.join('-'.freeze)
  end
  private :capitalize

  # Returns an array of Range objects that represent
  # the value of field <tt>'Range'</tt>,
  # or +nil+ if there is no such field;
  # see {Range request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#range-request-header]:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req['Range'] = 'bytes=0-99,200-299,400-499'
  #   req.range # => [0..99, 200..299, 400..499]
  #   req.delete('Range')
  #   req.range # # => nil
  #
  def range
    return nil unless @header['range']

    value = self['Range']
    # byte-range-set = *( "," OWS ) ( byte-range-spec / suffix-byte-range-spec )
    #   *( OWS "," [ OWS ( byte-range-spec / suffix-byte-range-spec ) ] )
    # corrected collected ABNF
    # http://tools.ietf.org/html/draft-ietf-httpbis-p5-range-19#section-5.4.1
    # http://tools.ietf.org/html/draft-ietf-httpbis-p5-range-19#appendix-C
    # http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-19#section-3.2.5
    unless /\Abytes=((?:,[ \t]*)*(?:\d+-\d*|-\d+)(?:[ \t]*,(?:[ \t]*\d+-\d*|-\d+)?)*)\z/ =~ value
      raise Gem::Net::HTTPHeaderSyntaxError, "invalid syntax for byte-ranges-specifier: '#{value}'"
    end

    byte_range_set = $1
    result = byte_range_set.split(/,/).map {|spec|
      m = /(\d+)?\s*-\s*(\d+)?/i.match(spec) or
              raise Gem::Net::HTTPHeaderSyntaxError, "invalid byte-range-spec: '#{spec}'"
      d1 = m[1].to_i
      d2 = m[2].to_i
      if m[1] and m[2]
        if d1 > d2
          raise Gem::Net::HTTPHeaderSyntaxError, "last-byte-pos MUST greater than or equal to first-byte-pos but '#{spec}'"
        end
        d1..d2
      elsif m[1]
        d1..-1
      elsif m[2]
        -d2..-1
      else
        raise Gem::Net::HTTPHeaderSyntaxError, 'range is not specified'
      end
    }
    # if result.empty?
    # byte-range-set must include at least one byte-range-spec or suffix-byte-range-spec
    # but above regexp already denies it.
    if result.size == 1 && result[0].begin == 0 && result[0].end == -1
      raise Gem::Net::HTTPHeaderSyntaxError, 'only one suffix-byte-range-spec with zero suffix-length'
    end
    result
  end

  # call-seq:
  #   set_range(length) -> length
  #   set_range(offset, length) -> range
  #   set_range(begin..length) -> range
  #
  # Sets the value for field <tt>'Range'</tt>;
  # see {Range request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#range-request-header]:
  #
  # With argument +length+:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req.set_range(100)      # => 100
  #   req['Range']            # => "bytes=0-99"
  #
  # With arguments +offset+ and +length+:
  #
  #   req.set_range(100, 100) # => 100...200
  #   req['Range']            # => "bytes=100-199"
  #
  # With argument +range+:
  #
  #   req.set_range(100..199) # => 100..199
  #   req['Range']            # => "bytes=100-199"
  #
  # Gem::Net::HTTPHeader#range= is an alias for Gem::Net::HTTPHeader#set_range.
  def set_range(r, e = nil)
    unless r
      @header.delete 'range'
      return r
    end
    r = (r...r+e) if e
    case r
    when Numeric
      n = r.to_i
      rangestr = (n > 0 ? "0-#{n-1}" : "-#{-n}")
    when Range
      first = r.first
      last = r.end
      last -= 1 if r.exclude_end?
      if last == -1
        rangestr = (first > 0 ? "#{first}-" : "-#{-first}")
      else
        raise Gem::Net::HTTPHeaderSyntaxError, 'range.first is negative' if first < 0
        raise Gem::Net::HTTPHeaderSyntaxError, 'range.last is negative' if last < 0
        raise Gem::Net::HTTPHeaderSyntaxError, 'must be .first < .last' if first > last
        rangestr = "#{first}-#{last}"
      end
    else
      raise TypeError, 'Range/Integer is required'
    end
    @header['range'] = ["bytes=#{rangestr}"]
    r
  end

  alias range= set_range

  # Returns the value of field <tt>'Content-Length'</tt> as an integer,
  # or +nil+ if there is no such field;
  # see {Content-Length request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-length-request-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/nosuch/1')
  #   res.content_length # => 2
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res.content_length # => nil
  #
  def content_length
    return nil unless key?('Content-Length')
    len = self['Content-Length'].slice(/\d+/) or
        raise Gem::Net::HTTPHeaderSyntaxError, 'wrong Content-Length format'
    len.to_i
  end

  # Sets the value of field <tt>'Content-Length'</tt> to the given numeric;
  # see {Content-Length response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-length-response-header]:
  #
  #   _uri = uri.dup
  #   hostname = _uri.hostname           # => "jsonplaceholder.typicode.com"
  #   _uri.path = '/posts'               # => "/posts"
  #   req = Gem::Net::HTTP::Post.new(_uri)    # => #<Gem::Net::HTTP::Post POST>
  #   req.body = '{"title": "foo","body": "bar","userId": 1}'
  #   req.content_length = req.body.size # => 42
  #   req.content_type = 'application/json'
  #   res = Gem::Net::HTTP.start(hostname) do |http|
  #     http.request(req)
  #   end # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
  #
  def content_length=(len)
    unless len
      @header.delete 'content-length'
      return nil
    end
    @header['content-length'] = [len.to_i.to_s]
  end

  # Returns +true+ if field <tt>'Transfer-Encoding'</tt>
  # exists and has value <tt>'chunked'</tt>,
  # +false+ otherwise;
  # see {Transfer-Encoding response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#transfer-encoding-response-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Transfer-Encoding'] # => "chunked"
  #   res.chunked?             # => true
  #
  def chunked?
    return false unless @header['transfer-encoding']
    field = self['Transfer-Encoding']
    (/(?:\A|[^\-\w])chunked(?![\-\w])/i =~ field) ? true : false
  end

  # Returns a Range object representing the value of field
  # <tt>'Content-Range'</tt>, or +nil+ if no such field exists;
  # see {Content-Range response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range-response-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Content-Range'] # => nil
  #   res['Content-Range'] = 'bytes 0-499/1000'
  #   res['Content-Range'] # => "bytes 0-499/1000"
  #   res.content_range    # => 0..499
  #
  def content_range
    return nil unless @header['content-range']
    m = %r<\A\s*(\w+)\s+(\d+)-(\d+)/(\d+|\*)>.match(self['Content-Range']) or
        raise Gem::Net::HTTPHeaderSyntaxError, 'wrong Content-Range format'
    return unless m[1] == 'bytes'
    m[2].to_i .. m[3].to_i
  end

  # Returns the integer representing length of the value of field
  # <tt>'Content-Range'</tt>, or +nil+ if no such field exists;
  # see {Content-Range response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range-response-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Content-Range'] # => nil
  #   res['Content-Range'] = 'bytes 0-499/1000'
  #   res.range_length     # => 500
  #
  def range_length
    r = content_range() or return nil
    r.end - r.begin + 1
  end

  # Returns the {media type}[https://en.wikipedia.org/wiki/Media_type]
  # from the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.content_type    # => "application/json"
  #
  def content_type
    main = main_type()
    return nil unless main

    sub = sub_type()
    if sub
      "#{main}/#{sub}"
    else
      main
    end
  end

  # Returns the leading ('type') part of the
  # {media type}[https://en.wikipedia.org/wiki/Media_type]
  # from the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.main_type       # => "application"
  #
  def main_type
    return nil unless @header['content-type']
    self['Content-Type'].split(';').first.to_s.split('/')[0].to_s.strip
  end

  # Returns the trailing ('subtype') part of the
  # {media type}[https://en.wikipedia.org/wiki/Media_type]
  # from the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.sub_type        # => "json"
  #
  def sub_type
    return nil unless @header['content-type']
    _, sub = *self['Content-Type'].split(';').first.to_s.split('/')
    return nil unless sub
    sub.strip
  end

  # Returns the trailing ('parameters') part of the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Gem::Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.type_params     # => {"charset"=>"utf-8"}
  #
  def type_params
    result = {}
    list = self['Content-Type'].to_s.split(';')
    list.shift
    list.each do |param|
      k, v = *param.split('=', 2)
      result[k.strip] = v.strip
    end
    result
  end

  # Sets the value of field <tt>'Content-Type'</tt>;
  # returns the new value;
  # see {Content-Type request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-request-header]:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req.set_content_type('application/json') # => ["application/json"]
  #
  # Gem::Net::HTTPHeader#content_type= is an alias for Gem::Net::HTTPHeader#set_content_type.
  def set_content_type(type, params = {})
    @header['content-type'] = [type + params.map{|k,v|"; #{k}=#{v}"}.join('')]
  end

  alias content_type= set_content_type

  # Sets the request body to a URL-encoded string derived from argument +params+,
  # and sets request header field <tt>'Content-Type'</tt>
  # to <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The resulting request is suitable for HTTP request +POST+ or +PUT+.
  #
  # Argument +params+ must be suitable for use as argument +enum+ to
  # {Gem::URI.encode_www_form}[https://docs.ruby-lang.org/en/master/Gem::URI.html#method-c-encode_www_form].
  #
  # With only argument +params+ given,
  # sets the body to a URL-encoded string with the default separator <tt>'&'</tt>:
  #
  #   req = Gem::Net::HTTP::Post.new('example.com')
  #
  #   req.set_form_data(q: 'ruby', lang: 'en')
  #   req.body            # => "q=ruby&lang=en"
  #   req['Content-Type'] # => "application/x-www-form-urlencoded"
  #
  #   req.set_form_data([['q', 'ruby'], ['lang', 'en']])
  #   req.body            # => "q=ruby&lang=en"
  #
  #   req.set_form_data(q: ['ruby', 'perl'], lang: 'en')
  #   req.body            # => "q=ruby&q=perl&lang=en"
  #
  #   req.set_form_data([['q', 'ruby'], ['q', 'perl'], ['lang', 'en']])
  #   req.body            # => "q=ruby&q=perl&lang=en"
  #
  # With string argument +sep+ also given,
  # uses that string as the separator:
  #
  #   req.set_form_data({q: 'ruby', lang: 'en'}, '|')
  #   req.body # => "q=ruby|lang=en"
  #
  # Gem::Net::HTTPHeader#form_data= is an alias for Gem::Net::HTTPHeader#set_form_data.
  def set_form_data(params, sep = '&')
    query = Gem::URI.encode_www_form(params)
    query.gsub!(/&/, sep) if sep != '&'
    self.body = query
    self.content_type = 'application/x-www-form-urlencoded'
  end

  alias form_data= set_form_data

  # Stores form data to be used in a +POST+ or +PUT+ request.
  #
  # The form data given in +params+ consists of zero or more fields;
  # each field is:
  #
  # - A scalar value.
  # - A name/value pair.
  # - An IO stream opened for reading.
  #
  # Argument +params+ should be an
  # {Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html#module-Enumerable-label-Enumerable+in+Ruby+Classes]
  # (method <tt>params.map</tt> will be called),
  # and is often an array or hash.
  #
  # First, we set up a request:
  #
  #   _uri = uri.dup
  #   _uri.path ='/posts'
  #   req = Gem::Net::HTTP::Post.new(_uri)
  #
  # <b>Argument +params+ As an Array</b>
  #
  # When +params+ is an array,
  # each of its elements is a subarray that defines a field;
  # the subarray may contain:
  #
  # - One string:
  #
  #     req.set_form([['foo'], ['bar'], ['baz']])
  #
  # - Two strings:
  #
  #     req.set_form([%w[foo 0], %w[bar 1], %w[baz 2]])
  #
  # - When argument +enctype+ (see below) is given as
  #   <tt>'multipart/form-data'</tt>:
  #
  #   - A string name and an IO stream opened for reading:
  #
  #       require 'stringio'
  #       req.set_form([['file', StringIO.new('Ruby is cool.')]])
  #
  #   - A string name, an IO stream opened for reading,
  #     and an options hash, which may contain these entries:
  #
  #     - +:filename+: The name of the file to use.
  #     - +:content_type+: The content type of the uploaded file.
  #
  #     Example:
  #
  #       req.set_form([['file', file, {filename: "other-filename.foo"}]]
  #
  # The various forms may be mixed:
  #
  #   req.set_form(['foo', %w[bar 1], ['file', file]])
  #
  # <b>Argument +params+ As a Hash</b>
  #
  # When +params+ is a hash,
  # each of its entries is a name/value pair that defines a field:
  #
  # - The name is a string.
  # - The value may be:
  #
  #   - +nil+.
  #   - Another string.
  #   - An IO stream opened for reading
  #     (only when argument +enctype+ -- see below -- is given as
  #     <tt>'multipart/form-data'</tt>).
  #
  # Examples:
  #
  #   # Nil-valued fields.
  #   req.set_form({'foo' => nil, 'bar' => nil, 'baz' => nil})
  #
  #   # String-valued fields.
  #   req.set_form({'foo' => 0, 'bar' => 1, 'baz' => 2})
  #
  #   # IO-valued field.
  #   require 'stringio'
  #   req.set_form({'file' => StringIO.new('Ruby is cool.')})
  #
  #   # Mixture of fields.
  #   req.set_form({'foo' => nil, 'bar' => 1, 'file' => file})
  #
  # Optional argument +enctype+ specifies the value to be given
  # to field <tt>'Content-Type'</tt>, and must be one of:
  #
  # - <tt>'application/x-www-form-urlencoded'</tt> (the default).
  # - <tt>'multipart/form-data'</tt>;
  #   see {RFC 7578}[https://www.rfc-editor.org/rfc/rfc7578].
  #
  # Optional argument +formopt+ is a hash of options
  # (applicable only when argument +enctype+
  # is <tt>'multipart/form-data'</tt>)
  # that may include the following entries:
  #
  # - +:boundary+: The value is the boundary string for the multipart message.
  #   If not given, the boundary is a random string.
  #   See {Boundary}[https://www.rfc-editor.org/rfc/rfc7578#section-4.1].
  # - +:charset+: Value is the character set for the form submission.
  #   Field names and values of non-file fields should be encoded with this charset.
  #
  def set_form(params, enctype='application/x-www-form-urlencoded', formopt={})
    @body_data = params
    @body = nil
    @body_stream = nil
    @form_option = formopt
    case enctype
    when /\Aapplication\/x-www-form-urlencoded\z/i,
      /\Amultipart\/form-data\z/i
      self.content_type = enctype
    else
      raise ArgumentError, "invalid enctype: #{enctype}"
    end
  end

  # Sets header <tt>'Authorization'</tt> using the given
  # +account+ and +password+ strings:
  #
  #   req.basic_auth('my_account', 'my_password')
  #   req['Authorization']
  #   # => "Basic bXlfYWNjb3VudDpteV9wYXNzd29yZA=="
  #
  def basic_auth(account, password)
    @header['authorization'] = [basic_encode(account, password)]
  end

  # Sets header <tt>'Proxy-Authorization'</tt> using the given
  # +account+ and +password+ strings:
  #
  #   req.proxy_basic_auth('my_account', 'my_password')
  #   req['Proxy-Authorization']
  #   # => "Basic bXlfYWNjb3VudDpteV9wYXNzd29yZA=="
  #
  def proxy_basic_auth(account, password)
    @header['proxy-authorization'] = [basic_encode(account, password)]
  end

  def basic_encode(account, password)
    'Basic ' + ["#{account}:#{password}"].pack('m0')
  end
  private :basic_encode

# Returns whether the HTTP session is to be closed.
  def connection_close?
    token = /(?:\A|,)\s*close\s*(?:\z|,)/i
    @header['connection']&.grep(token) {return true}
    @header['proxy-connection']&.grep(token) {return true}
    false
  end

# Returns whether the HTTP session is to be kept alive.
  def connection_keep_alive?
    token = /(?:\A|,)\s*keep-alive\s*(?:\z|,)/i
    @header['connection']&.grep(token) {return true}
    @header['proxy-connection']&.grep(token) {return true}
    false
  end

end
PK)J[�!�.1.1Gshare/rubygems/rubygems/vendor/net-http/lib/net/http/generic_request.rbnu�[���# frozen_string_literal: true
#
# \HTTPGenericRequest is the parent of the Gem::Net::HTTPRequest class.
#
# Do not use this directly; instead, use a subclass of Gem::Net::HTTPRequest.
#
# == About the Examples
#
# :include: doc/net-http/examples.rdoc
#
class Gem::Net::HTTPGenericRequest

  include Gem::Net::HTTPHeader

  def initialize(m, reqbody, resbody, uri_or_path, initheader = nil) # :nodoc:
    @method = m
    @request_has_body = reqbody
    @response_has_body = resbody

    if Gem::URI === uri_or_path then
      raise ArgumentError, "not an HTTP Gem::URI" unless Gem::URI::HTTP === uri_or_path
      hostname = uri_or_path.hostname
      raise ArgumentError, "no host component for Gem::URI" unless (hostname && hostname.length > 0)
      @uri = uri_or_path.dup
      host = @uri.hostname.dup
      host << ":" << @uri.port.to_s if @uri.port != @uri.default_port
      @path = uri_or_path.request_uri
      raise ArgumentError, "no HTTP request path given" unless @path
    else
      @uri = nil
      host = nil
      raise ArgumentError, "no HTTP request path given" unless uri_or_path
      raise ArgumentError, "HTTP request path is empty" if uri_or_path.empty?
      @path = uri_or_path.dup
    end

    @decode_content = false

    if Gem::Net::HTTP::HAVE_ZLIB then
      if !initheader ||
         !initheader.keys.any? { |k|
           %w[accept-encoding range].include? k.downcase
         } then
        @decode_content = true if @response_has_body
        initheader = initheader ? initheader.dup : {}
        initheader["accept-encoding"] =
          "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
      end
    end

    initialize_http_header initheader
    self['Accept'] ||= '*/*'
    self['User-Agent'] ||= 'Ruby'
    self['Host'] ||= host if host
    @body = nil
    @body_stream = nil
    @body_data = nil
  end

  # Returns the string method name for the request:
  #
  #   Gem::Net::HTTP::Get.new(uri).method  # => "GET"
  #   Gem::Net::HTTP::Post.new(uri).method # => "POST"
  #
  attr_reader :method

  # Returns the string path for the request:
  #
  #   Gem::Net::HTTP::Get.new(uri).path # => "/"
  #   Gem::Net::HTTP::Post.new('example.com').path # => "example.com"
  #
  attr_reader :path

  # Returns the Gem::URI object for the request, or +nil+ if none:
  #
  #   Gem::Net::HTTP::Get.new(uri).uri
  #   # => #<Gem::URI::HTTPS https://jsonplaceholder.typicode.com/>
  #   Gem::Net::HTTP::Get.new('example.com').uri # => nil
  #
  attr_reader :uri

  # Returns +false+ if the request's header <tt>'Accept-Encoding'</tt>
  # has been set manually or deleted
  # (indicating that the user intends to handle encoding in the response),
  # +true+ otherwise:
  #
  #   req = Gem::Net::HTTP::Get.new(uri) # => #<Gem::Net::HTTP::Get GET>
  #   req['Accept-Encoding']        # => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
  #   req.decode_content            # => true
  #   req['Accept-Encoding'] = 'foo'
  #   req.decode_content            # => false
  #   req.delete('Accept-Encoding')
  #   req.decode_content            # => false
  #
  attr_reader :decode_content

  # Returns a string representation of the request:
  #
  #   Gem::Net::HTTP::Post.new(uri).inspect # => "#<Gem::Net::HTTP::Post POST>"
  #
  def inspect
    "\#<#{self.class} #{@method}>"
  end

  ##
  # Don't automatically decode response content-encoding if the user indicates
  # they want to handle it.

  def []=(key, val) # :nodoc:
    @decode_content = false if key.downcase == 'accept-encoding'

    super key, val
  end

  # Returns whether the request may have a body:
  #
  #   Gem::Net::HTTP::Post.new(uri).request_body_permitted? # => true
  #   Gem::Net::HTTP::Get.new(uri).request_body_permitted?  # => false
  #
  def request_body_permitted?
    @request_has_body
  end

  # Returns whether the response may have a body:
  #
  #   Gem::Net::HTTP::Post.new(uri).response_body_permitted? # => true
  #   Gem::Net::HTTP::Head.new(uri).response_body_permitted? # => false
  #
  def response_body_permitted?
    @response_has_body
  end

  def body_exist? # :nodoc:
    warn "Gem::Net::HTTPRequest#body_exist? is obsolete; use response_body_permitted?", uplevel: 1 if $VERBOSE
    response_body_permitted?
  end

  # Returns the string body for the request, or +nil+ if there is none:
  #
  #   req = Gem::Net::HTTP::Post.new(uri)
  #   req.body # => nil
  #   req.body = '{"title": "foo","body": "bar","userId": 1}'
  #   req.body # => "{\"title\": \"foo\",\"body\": \"bar\",\"userId\": 1}"
  #
  attr_reader :body

  # Sets the body for the request:
  #
  #   req = Gem::Net::HTTP::Post.new(uri)
  #   req.body # => nil
  #   req.body = '{"title": "foo","body": "bar","userId": 1}'
  #   req.body # => "{\"title\": \"foo\",\"body\": \"bar\",\"userId\": 1}"
  #
  def body=(str)
    @body = str
    @body_stream = nil
    @body_data = nil
    str
  end

  # Returns the body stream object for the request, or +nil+ if there is none:
  #
  #   req = Gem::Net::HTTP::Post.new(uri)          # => #<Gem::Net::HTTP::Post POST>
  #   req.body_stream                         # => nil
  #   require 'stringio'
  #   req.body_stream = StringIO.new('xyzzy') # => #<StringIO:0x0000027d1e5affa8>
  #   req.body_stream                         # => #<StringIO:0x0000027d1e5affa8>
  #
  attr_reader :body_stream

  # Sets the body stream for the request:
  #
  #   req = Gem::Net::HTTP::Post.new(uri)          # => #<Gem::Net::HTTP::Post POST>
  #   req.body_stream                         # => nil
  #   require 'stringio'
  #   req.body_stream = StringIO.new('xyzzy') # => #<StringIO:0x0000027d1e5affa8>
  #   req.body_stream                         # => #<StringIO:0x0000027d1e5affa8>
  #
  def body_stream=(input)
    @body = nil
    @body_stream = input
    @body_data = nil
    input
  end

  def set_body_internal(str)   #:nodoc: internal use only
    raise ArgumentError, "both of body argument and HTTPRequest#body set" if str and (@body or @body_stream)
    self.body = str if str
    if @body.nil? && @body_stream.nil? && @body_data.nil? && request_body_permitted?
      self.body = ''
    end
  end

  #
  # write
  #

  def exec(sock, ver, path)   #:nodoc: internal use only
    if @body
      send_request_with_body sock, ver, path, @body
    elsif @body_stream
      send_request_with_body_stream sock, ver, path, @body_stream
    elsif @body_data
      send_request_with_body_data sock, ver, path, @body_data
    else
      write_header sock, ver, path
    end
  end

  def update_uri(addr, port, ssl) # :nodoc: internal use only
    # reflect the connection and @path to @uri
    return unless @uri

    if ssl
      scheme = 'https'
      klass = Gem::URI::HTTPS
    else
      scheme = 'http'
      klass = Gem::URI::HTTP
    end

    if host = self['host']
      host.sub!(/:.*/m, '')
    elsif host = @uri.host
    else
     host = addr
    end
    # convert the class of the Gem::URI
    if @uri.is_a?(klass)
      @uri.host = host
      @uri.port = port
    else
      @uri = klass.new(
        scheme, @uri.userinfo,
        host, port, nil,
        @uri.path, nil, @uri.query, nil)
    end
  end

  private

  class Chunker #:nodoc:
    def initialize(sock)
      @sock = sock
      @prev = nil
    end

    def write(buf)
      # avoid memcpy() of buf, buf can huge and eat memory bandwidth
      rv = buf.bytesize
      @sock.write("#{rv.to_s(16)}\r\n", buf, "\r\n")
      rv
    end

    def finish
      @sock.write("0\r\n\r\n")
    end
  end

  def send_request_with_body(sock, ver, path, body)
    self.content_length = body.bytesize
    delete 'Transfer-Encoding'
    supply_default_content_type
    write_header sock, ver, path
    wait_for_continue sock, ver if sock.continue_timeout
    sock.write body
  end

  def send_request_with_body_stream(sock, ver, path, f)
    unless content_length() or chunked?
      raise ArgumentError,
          "Content-Length not given and Transfer-Encoding is not `chunked'"
    end
    supply_default_content_type
    write_header sock, ver, path
    wait_for_continue sock, ver if sock.continue_timeout
    if chunked?
      chunker = Chunker.new(sock)
      IO.copy_stream(f, chunker)
      chunker.finish
    else
      IO.copy_stream(f, sock)
    end
  end

  def send_request_with_body_data(sock, ver, path, params)
    if /\Amultipart\/form-data\z/i !~ self.content_type
      self.content_type = 'application/x-www-form-urlencoded'
      return send_request_with_body(sock, ver, path, Gem::URI.encode_www_form(params))
    end

    opt = @form_option.dup
    require 'securerandom' unless defined?(SecureRandom)
    opt[:boundary] ||= SecureRandom.urlsafe_base64(40)
    self.set_content_type(self.content_type, boundary: opt[:boundary])
    if chunked?
      write_header sock, ver, path
      encode_multipart_form_data(sock, params, opt)
    else
      require 'tempfile'
      file = Tempfile.new('multipart')
      file.binmode
      encode_multipart_form_data(file, params, opt)
      file.rewind
      self.content_length = file.size
      write_header sock, ver, path
      IO.copy_stream(file, sock)
      file.close(true)
    end
  end

  def encode_multipart_form_data(out, params, opt)
    charset = opt[:charset]
    boundary = opt[:boundary]
    require 'securerandom' unless defined?(SecureRandom)
    boundary ||= SecureRandom.urlsafe_base64(40)
    chunked_p = chunked?

    buf = +''
    params.each do |key, value, h={}|
      key = quote_string(key, charset)
      filename =
        h.key?(:filename) ? h[:filename] :
        value.respond_to?(:to_path) ? File.basename(value.to_path) :
        nil

      buf << "--#{boundary}\r\n"
      if filename
        filename = quote_string(filename, charset)
        type = h[:content_type] || 'application/octet-stream'
        buf << "Content-Disposition: form-data; " \
          "name=\"#{key}\"; filename=\"#{filename}\"\r\n" \
          "Content-Type: #{type}\r\n\r\n"
        if !out.respond_to?(:write) || !value.respond_to?(:read)
          # if +out+ is not an IO or +value+ is not an IO
          buf << (value.respond_to?(:read) ? value.read : value)
        elsif value.respond_to?(:size) && chunked_p
          # if +out+ is an IO and +value+ is a File, use IO.copy_stream
          flush_buffer(out, buf, chunked_p)
          out << "%x\r\n" % value.size if chunked_p
          IO.copy_stream(value, out)
          out << "\r\n" if chunked_p
        else
          # +out+ is an IO, and +value+ is not a File but an IO
          flush_buffer(out, buf, chunked_p)
          1 while flush_buffer(out, value.read(4096), chunked_p)
        end
      else
        # non-file field:
        #   HTML5 says, "The parts of the generated multipart/form-data
        #   resource that correspond to non-file fields must not have a
        #   Content-Type header specified."
        buf << "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
        buf << (value.respond_to?(:read) ? value.read : value)
      end
      buf << "\r\n"
    end
    buf << "--#{boundary}--\r\n"
    flush_buffer(out, buf, chunked_p)
    out << "0\r\n\r\n" if chunked_p
  end

  def quote_string(str, charset)
    str = str.encode(charset, fallback:->(c){'&#%d;'%c.encode("UTF-8").ord}) if charset
    str.gsub(/[\\"]/, '\\\\\&')
  end

  def flush_buffer(out, buf, chunked_p)
    return unless buf
    out << "%x\r\n"%buf.bytesize if chunked_p
    out << buf
    out << "\r\n" if chunked_p
    buf.clear
  end

  def supply_default_content_type
    return if content_type()
    warn 'net/http: Content-Type did not set; using application/x-www-form-urlencoded', uplevel: 1 if $VERBOSE
    set_content_type 'application/x-www-form-urlencoded'
  end

  ##
  # Waits up to the continue timeout for a response from the server provided
  # we're speaking HTTP 1.1 and are expecting a 100-continue response.

  def wait_for_continue(sock, ver)
    if ver >= '1.1' and @header['expect'] and
        @header['expect'].include?('100-continue')
      if sock.io.to_io.wait_readable(sock.continue_timeout)
        res = Gem::Net::HTTPResponse.read_new(sock)
        unless res.kind_of?(Gem::Net::HTTPContinue)
          res.decode_content = @decode_content
          throw :response, res
        end
      end
    end
  end

  def write_header(sock, ver, path)
    reqline = "#{@method} #{path} HTTP/#{ver}"
    if /[\r\n]/ =~ reqline
      raise ArgumentError, "A Request-Line must not contain CR or LF"
    end
    buf = +''
    buf << reqline << "\r\n"
    each_capitalized do |k,v|
      buf << "#{k}: #{v}\r\n"
    end
    buf << "\r\n"
    sock.write buf
  end

end

PK)J[T,u`�N�N@share/rubygems/rubygems/vendor/net-http/lib/net/http/response.rbnu�[���# frozen_string_literal: true

# This class is the base class for \Gem::Net::HTTP response classes.
#
# == About the Examples
#
# :include: doc/net-http/examples.rdoc
#
# == Returned Responses
#
# \Method Gem::Net::HTTP.get_response returns
# an instance of one of the subclasses of \Gem::Net::HTTPResponse:
#
#   Gem::Net::HTTP.get_response(uri)
#   # => #<Gem::Net::HTTPOK 200 OK readbody=true>
#   Gem::Net::HTTP.get_response(hostname, '/nosuch')
#   # => #<Gem::Net::HTTPNotFound 404 Not Found readbody=true>
#
# As does method Gem::Net::HTTP#request:
#
#   req = Gem::Net::HTTP::Get.new(uri)
#   Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end # => #<Gem::Net::HTTPOK 200 OK readbody=true>
#
# \Class \Gem::Net::HTTPResponse includes module Gem::Net::HTTPHeader,
# which provides access to response header values via (among others):
#
# - \Hash-like method <tt>[]</tt>.
# - Specific reader methods, such as +content_type+.
#
# Examples:
#
#   res = Gem::Net::HTTP.get_response(uri) # => #<Gem::Net::HTTPOK 200 OK readbody=true>
#   res['Content-Type']               # => "text/html; charset=UTF-8"
#   res.content_type                  # => "text/html"
#
# == Response Subclasses
#
# \Class \Gem::Net::HTTPResponse has a subclass for each
# {HTTP status code}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes].
# You can look up the response class for a given code:
#
#   Gem::Net::HTTPResponse::CODE_TO_OBJ['200'] # => Gem::Net::HTTPOK
#   Gem::Net::HTTPResponse::CODE_TO_OBJ['400'] # => Gem::Net::HTTPBadRequest
#   Gem::Net::HTTPResponse::CODE_TO_OBJ['404'] # => Gem::Net::HTTPNotFound
#
# And you can retrieve the status code for a response object:
#
#   Gem::Net::HTTP.get_response(uri).code                 # => "200"
#   Gem::Net::HTTP.get_response(hostname, '/nosuch').code # => "404"
#
# The response subclasses (indentation shows class hierarchy):
#
# - Gem::Net::HTTPUnknownResponse (for unhandled \HTTP extensions).
#
# - Gem::Net::HTTPInformation:
#
#   - Gem::Net::HTTPContinue (100)
#   - Gem::Net::HTTPSwitchProtocol (101)
#   - Gem::Net::HTTPProcessing (102)
#   - Gem::Net::HTTPEarlyHints (103)
#
# - Gem::Net::HTTPSuccess:
#
#   - Gem::Net::HTTPOK (200)
#   - Gem::Net::HTTPCreated (201)
#   - Gem::Net::HTTPAccepted (202)
#   - Gem::Net::HTTPNonAuthoritativeInformation (203)
#   - Gem::Net::HTTPNoContent (204)
#   - Gem::Net::HTTPResetContent (205)
#   - Gem::Net::HTTPPartialContent (206)
#   - Gem::Net::HTTPMultiStatus (207)
#   - Gem::Net::HTTPAlreadyReported (208)
#   - Gem::Net::HTTPIMUsed (226)
#
# - Gem::Net::HTTPRedirection:
#
#   - Gem::Net::HTTPMultipleChoices (300)
#   - Gem::Net::HTTPMovedPermanently (301)
#   - Gem::Net::HTTPFound (302)
#   - Gem::Net::HTTPSeeOther (303)
#   - Gem::Net::HTTPNotModified (304)
#   - Gem::Net::HTTPUseProxy (305)
#   - Gem::Net::HTTPTemporaryRedirect (307)
#   - Gem::Net::HTTPPermanentRedirect (308)
#
# - Gem::Net::HTTPClientError:
#
#   - Gem::Net::HTTPBadRequest (400)
#   - Gem::Net::HTTPUnauthorized (401)
#   - Gem::Net::HTTPPaymentRequired (402)
#   - Gem::Net::HTTPForbidden (403)
#   - Gem::Net::HTTPNotFound (404)
#   - Gem::Net::HTTPMethodNotAllowed (405)
#   - Gem::Net::HTTPNotAcceptable (406)
#   - Gem::Net::HTTPProxyAuthenticationRequired (407)
#   - Gem::Net::HTTPRequestTimeOut (408)
#   - Gem::Net::HTTPConflict (409)
#   - Gem::Net::HTTPGone (410)
#   - Gem::Net::HTTPLengthRequired (411)
#   - Gem::Net::HTTPPreconditionFailed (412)
#   - Gem::Net::HTTPRequestEntityTooLarge (413)
#   - Gem::Net::HTTPRequestURITooLong (414)
#   - Gem::Net::HTTPUnsupportedMediaType (415)
#   - Gem::Net::HTTPRequestedRangeNotSatisfiable (416)
#   - Gem::Net::HTTPExpectationFailed (417)
#   - Gem::Net::HTTPMisdirectedRequest (421)
#   - Gem::Net::HTTPUnprocessableEntity (422)
#   - Gem::Net::HTTPLocked (423)
#   - Gem::Net::HTTPFailedDependency (424)
#   - Gem::Net::HTTPUpgradeRequired (426)
#   - Gem::Net::HTTPPreconditionRequired (428)
#   - Gem::Net::HTTPTooManyRequests (429)
#   - Gem::Net::HTTPRequestHeaderFieldsTooLarge (431)
#   - Gem::Net::HTTPUnavailableForLegalReasons (451)
#
# - Gem::Net::HTTPServerError:
#
#   - Gem::Net::HTTPInternalServerError (500)
#   - Gem::Net::HTTPNotImplemented (501)
#   - Gem::Net::HTTPBadGateway (502)
#   - Gem::Net::HTTPServiceUnavailable (503)
#   - Gem::Net::HTTPGatewayTimeOut (504)
#   - Gem::Net::HTTPVersionNotSupported (505)
#   - Gem::Net::HTTPVariantAlsoNegotiates (506)
#   - Gem::Net::HTTPInsufficientStorage (507)
#   - Gem::Net::HTTPLoopDetected (508)
#   - Gem::Net::HTTPNotExtended (510)
#   - Gem::Net::HTTPNetworkAuthenticationRequired (511)
#
# There is also the Gem::Net::HTTPBadResponse exception which is raised when
# there is a protocol error.
#
class Gem::Net::HTTPResponse
  class << self
    # true if the response has a body.
    def body_permitted?
      self::HAS_BODY
    end

    def exception_type   # :nodoc: internal use only
      self::EXCEPTION_TYPE
    end

    def read_new(sock)   #:nodoc: internal use only
      httpv, code, msg = read_status_line(sock)
      res = response_class(code).new(httpv, code, msg)
      each_response_header(sock) do |k,v|
        res.add_field k, v
      end
      res
    end

    private

    def read_status_line(sock)
      str = sock.readline
      m = /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)(?:\s+(.*))?\z/in.match(str) or
        raise Gem::Net::HTTPBadResponse, "wrong status line: #{str.dump}"
      m.captures
    end

    def response_class(code)
      CODE_TO_OBJ[code] or
      CODE_CLASS_TO_OBJ[code[0,1]] or
      Gem::Net::HTTPUnknownResponse
    end

    def each_response_header(sock)
      key = value = nil
      while true
        line = sock.readuntil("\n", true).sub(/\s+\z/, '')
        break if line.empty?
        if line[0] == ?\s or line[0] == ?\t and value
          value << ' ' unless value.empty?
          value << line.strip
        else
          yield key, value if key
          key, value = line.strip.split(/\s*:\s*/, 2)
          raise Gem::Net::HTTPBadResponse, 'wrong header line format' if value.nil?
        end
      end
      yield key, value if key
    end
  end

  # next is to fix bug in RDoc, where the private inside class << self
  # spills out.
  public

  include Gem::Net::HTTPHeader

  def initialize(httpv, code, msg)   #:nodoc: internal use only
    @http_version = httpv
    @code         = code
    @message      = msg
    initialize_http_header nil
    @body = nil
    @read = false
    @uri  = nil
    @decode_content = false
    @body_encoding = false
    @ignore_eof = true
  end

  # The HTTP version supported by the server.
  attr_reader :http_version

  # The HTTP result code string. For example, '302'.  You can also
  # determine the response type by examining which response subclass
  # the response object is an instance of.
  attr_reader :code

  # The HTTP result message sent by the server. For example, 'Not Found'.
  attr_reader :message
  alias msg message   # :nodoc: obsolete

  # The Gem::URI used to fetch this response.  The response Gem::URI is only available
  # if a Gem::URI was used to create the request.
  attr_reader :uri

  # Set to true automatically when the request did not contain an
  # Accept-Encoding header from the user.
  attr_accessor :decode_content

  # Returns the value set by body_encoding=, or +false+ if none;
  # see #body_encoding=.
  attr_reader :body_encoding

  # Sets the encoding that should be used when reading the body:
  #
  # - If the given value is an Encoding object, that encoding will be used.
  # - Otherwise if the value is a string, the value of
  #   {Encoding#find(value)}[https://docs.ruby-lang.org/en/master/Encoding.html#method-c-find]
  #   will be used.
  # - Otherwise an encoding will be deduced from the body itself.
  #
  # Examples:
  #
  #   http = Gem::Net::HTTP.new(hostname)
  #   req = Gem::Net::HTTP::Get.new('/')
  #
  #   http.request(req) do |res|
  #     p res.body.encoding # => #<Encoding:ASCII-8BIT>
  #   end
  #
  #   http.request(req) do |res|
  #     res.body_encoding = "UTF-8"
  #     p res.body.encoding # => #<Encoding:UTF-8>
  #   end
  #
  def body_encoding=(value)
    value = Encoding.find(value) if value.is_a?(String)
    @body_encoding = value
  end

  # Whether to ignore EOF when reading bodies with a specified Content-Length
  # header.
  attr_accessor :ignore_eof

  def inspect
    "#<#{self.class} #{@code} #{@message} readbody=#{@read}>"
  end

  #
  # response <-> exception relationship
  #

  def code_type   #:nodoc:
    self.class
  end

  def error!   #:nodoc:
    message = @code
    message = "#{message} #{@message.dump}" if @message
    raise error_type().new(message, self)
  end

  def error_type   #:nodoc:
    self.class::EXCEPTION_TYPE
  end

  # Raises an HTTP error if the response is not 2xx (success).
  def value
    error! unless self.kind_of?(Gem::Net::HTTPSuccess)
  end

  def uri= uri # :nodoc:
    @uri = uri.dup if uri
  end

  #
  # header (for backward compatibility only; DO NOT USE)
  #

  def response   #:nodoc:
    warn "Gem::Net::HTTPResponse#response is obsolete", uplevel: 1 if $VERBOSE
    self
  end

  def header   #:nodoc:
    warn "Gem::Net::HTTPResponse#header is obsolete", uplevel: 1 if $VERBOSE
    self
  end

  def read_header   #:nodoc:
    warn "Gem::Net::HTTPResponse#read_header is obsolete", uplevel: 1 if $VERBOSE
    self
  end

  #
  # body
  #

  def reading_body(sock, reqmethodallowbody)  #:nodoc: internal use only
    @socket = sock
    @body_exist = reqmethodallowbody && self.class.body_permitted?
    begin
      yield
      self.body   # ensure to read body
    ensure
      @socket = nil
    end
  end

  # Gets the entity body returned by the remote HTTP server.
  #
  # If a block is given, the body is passed to the block, and
  # the body is provided in fragments, as it is read in from the socket.
  #
  # If +dest+ argument is given, response is read into that variable,
  # with <code>dest#<<</code> method (it could be String or IO, or any
  # other object responding to <code><<</code>).
  #
  # Calling this method a second or subsequent time for the same
  # HTTPResponse object will return the value already read.
  #
  #   http.request_get('/index.html') {|res|
  #     puts res.read_body
  #   }
  #
  #   http.request_get('/index.html') {|res|
  #     p res.read_body.object_id   # 538149362
  #     p res.read_body.object_id   # 538149362
  #   }
  #
  #   # using iterator
  #   http.request_get('/index.html') {|res|
  #     res.read_body do |segment|
  #       print segment
  #     end
  #   }
  #
  def read_body(dest = nil, &block)
    if @read
      raise IOError, "#{self.class}\#read_body called twice" if dest or block
      return @body
    end
    to = procdest(dest, block)
    stream_check
    if @body_exist
      read_body_0 to
      @body = to
    else
      @body = nil
    end
    @read = true
    return if @body.nil?

    case enc = @body_encoding
    when Encoding, false, nil
      # Encoding: force given encoding
      # false/nil: do not force encoding
    else
      # other value: detect encoding from body
      enc = detect_encoding(@body)
    end

    @body.force_encoding(enc) if enc

    @body
  end

  # Returns the string response body;
  # note that repeated calls for the unmodified body return a cached string:
  #
  #   path = '/todos/1'
  #   Gem::Net::HTTP.start(hostname) do |http|
  #     res = http.get(path)
  #     p res.body
  #     p http.head(path).body # No body.
  #   end
  #
  # Output:
  #
  #   "{\n  \"userId\": 1,\n  \"id\": 1,\n  \"title\": \"delectus aut autem\",\n  \"completed\": false\n}"
  #   nil
  #
  def body
    read_body()
  end

  # Sets the body of the response to the given value.
  def body=(value)
    @body = value
  end

  alias entity body   #:nodoc: obsolete

  private

  # :nodoc:
  def detect_encoding(str, encoding=nil)
    if encoding
    elsif encoding = type_params['charset']
    elsif encoding = check_bom(str)
    else
      encoding = case content_type&.downcase
      when %r{text/x(?:ht)?ml|application/(?:[^+]+\+)?xml}
        /\A<xml[ \t\r\n]+
          version[ \t\r\n]*=[ \t\r\n]*(?:"[0-9.]+"|'[0-9.]*')[ \t\r\n]+
          encoding[ \t\r\n]*=[ \t\r\n]*
          (?:"([A-Za-z][\-A-Za-z0-9._]*)"|'([A-Za-z][\-A-Za-z0-9._]*)')/x =~ str
        encoding = $1 || $2 || Encoding::UTF_8
      when %r{text/html.*}
        sniff_encoding(str)
      end
    end
    return encoding
  end

  # :nodoc:
  def sniff_encoding(str, encoding=nil)
    # the encoding sniffing algorithm
    # http://www.w3.org/TR/html5/parsing.html#determining-the-character-encoding
    if enc = scanning_meta(str)
      enc
    # 6. last visited page or something
    # 7. frequency
    elsif str.ascii_only?
      Encoding::US_ASCII
    elsif str.dup.force_encoding(Encoding::UTF_8).valid_encoding?
      Encoding::UTF_8
    end
    # 8. implementation-defined or user-specified
  end

  # :nodoc:
  def check_bom(str)
    case str.byteslice(0, 2)
    when "\xFE\xFF"
      return Encoding::UTF_16BE
    when "\xFF\xFE"
      return Encoding::UTF_16LE
    end
    if "\xEF\xBB\xBF" == str.byteslice(0, 3)
      return Encoding::UTF_8
    end
    nil
  end

  # :nodoc:
  def scanning_meta(str)
    require 'strscan'
    ss = StringScanner.new(str)
    if ss.scan_until(/<meta[\t\n\f\r ]*/)
      attrs = {} # attribute_list
      got_pragma = false
      need_pragma = nil
      charset = nil

      # step: Attributes
      while attr = get_attribute(ss)
        name, value = *attr
        next if attrs[name]
        attrs[name] = true
        case name
        when 'http-equiv'
          got_pragma = true if value == 'content-type'
        when 'content'
          encoding = extracting_encodings_from_meta_elements(value)
          unless charset
            charset = encoding
          end
          need_pragma = true
        when 'charset'
          need_pragma = false
          charset = value
        end
      end

      # step: Processing
      return if need_pragma.nil?
      return if need_pragma && !got_pragma

      charset = Encoding.find(charset) rescue nil
      return unless charset
      charset = Encoding::UTF_8 if charset == Encoding::UTF_16
      return charset # tentative
    end
    nil
  end

  def get_attribute(ss)
    ss.scan(/[\t\n\f\r \/]*/)
    if ss.peek(1) == '>'
      ss.getch
      return nil
    end
    name = ss.scan(/[^=\t\n\f\r \/>]*/)
    name.downcase!
    raise if name.empty?
    ss.skip(/[\t\n\f\r ]*/)
    if ss.getch != '='
      value = ''
      return [name, value]
    end
    ss.skip(/[\t\n\f\r ]*/)
    case ss.peek(1)
    when '"'
      ss.getch
      value = ss.scan(/[^"]+/)
      value.downcase!
      ss.getch
    when "'"
      ss.getch
      value = ss.scan(/[^']+/)
      value.downcase!
      ss.getch
    when '>'
      value = ''
    else
      value = ss.scan(/[^\t\n\f\r >]+/)
      value.downcase!
    end
    [name, value]
  end

  def extracting_encodings_from_meta_elements(value)
    # http://dev.w3.org/html5/spec/fetching-resources.html#algorithm-for-extracting-an-encoding-from-a-meta-element
    if /charset[\t\n\f\r ]*=(?:"([^"]*)"|'([^']*)'|["']|\z|([^\t\n\f\r ;]+))/i =~ value
      return $1 || $2 || $3
    end
    return nil
  end

  ##
  # Checks for a supported Content-Encoding header and yields an Inflate
  # wrapper for this response's socket when zlib is present.  If the
  # Content-Encoding is not supported or zlib is missing, the plain socket is
  # yielded.
  #
  # If a Content-Range header is present, a plain socket is yielded as the
  # bytes in the range may not be a complete deflate block.

  def inflater # :nodoc:
    return yield @socket unless Gem::Net::HTTP::HAVE_ZLIB
    return yield @socket unless @decode_content
    return yield @socket if self['content-range']

    v = self['content-encoding']
    case v&.downcase
    when 'deflate', 'gzip', 'x-gzip' then
      self.delete 'content-encoding'

      inflate_body_io = Inflater.new(@socket)

      begin
        yield inflate_body_io
        success = true
      ensure
        begin
          inflate_body_io.finish
          if self['content-length']
            self['content-length'] = inflate_body_io.bytes_inflated.to_s
          end
        rescue => err
          # Ignore #finish's error if there is an exception from yield
          raise err if success
        end
      end
    when 'none', 'identity' then
      self.delete 'content-encoding'

      yield @socket
    else
      yield @socket
    end
  end

  def read_body_0(dest)
    inflater do |inflate_body_io|
      if chunked?
        read_chunked dest, inflate_body_io
        return
      end

      @socket = inflate_body_io

      clen = content_length()
      if clen
        @socket.read clen, dest, @ignore_eof
        return
      end
      clen = range_length()
      if clen
        @socket.read clen, dest
        return
      end
      @socket.read_all dest
    end
  end

  ##
  # read_chunked reads from +@socket+ for chunk-size, chunk-extension, CRLF,
  # etc. and +chunk_data_io+ for chunk-data which may be deflate or gzip
  # encoded.
  #
  # See RFC 2616 section 3.6.1 for definitions

  def read_chunked(dest, chunk_data_io) # :nodoc:
    total = 0
    while true
      line = @socket.readline
      hexlen = line.slice(/[0-9a-fA-F]+/) or
          raise Gem::Net::HTTPBadResponse, "wrong chunk size line: #{line}"
      len = hexlen.hex
      break if len == 0
      begin
        chunk_data_io.read len, dest
      ensure
        total += len
        @socket.read 2   # \r\n
      end
    end
    until @socket.readline.empty?
      # none
    end
  end

  def stream_check
    raise IOError, 'attempt to read body out of block' if @socket.nil? || @socket.closed?
  end

  def procdest(dest, block)
    raise ArgumentError, 'both arg and block given for HTTP method' if
      dest and block
    if block
      Gem::Net::ReadAdapter.new(block)
    else
      dest || +''
    end
  end

  ##
  # Inflater is a wrapper around Gem::Net::BufferedIO that transparently inflates
  # zlib and gzip streams.

  class Inflater # :nodoc:

    ##
    # Creates a new Inflater wrapping +socket+

    def initialize socket
      @socket = socket
      # zlib with automatic gzip detection
      @inflate = Zlib::Inflate.new(32 + Zlib::MAX_WBITS)
    end

    ##
    # Finishes the inflate stream.

    def finish
      return if @inflate.total_in == 0
      @inflate.finish
    end

    ##
    # The number of bytes inflated, used to update the Content-Length of
    # the response.

    def bytes_inflated
      @inflate.total_out
    end

    ##
    # Returns a Gem::Net::ReadAdapter that inflates each read chunk into +dest+.
    #
    # This allows a large response body to be inflated without storing the
    # entire body in memory.

    def inflate_adapter(dest)
      if dest.respond_to?(:set_encoding)
        dest.set_encoding(Encoding::ASCII_8BIT)
      elsif dest.respond_to?(:force_encoding)
        dest.force_encoding(Encoding::ASCII_8BIT)
      end
      block = proc do |compressed_chunk|
        @inflate.inflate(compressed_chunk) do |chunk|
          compressed_chunk.clear
          dest << chunk
        end
      end

      Gem::Net::ReadAdapter.new(block)
    end

    ##
    # Reads +clen+ bytes from the socket, inflates them, then writes them to
    # +dest+.  +ignore_eof+ is passed down to Gem::Net::BufferedIO#read
    #
    # Unlike Gem::Net::BufferedIO#read, this method returns more than +clen+ bytes.
    # At this time there is no way for a user of Gem::Net::HTTPResponse to read a
    # specific number of bytes from the HTTP response body, so this internal
    # API does not return the same number of bytes as were requested.
    #
    # See https://bugs.ruby-lang.org/issues/6492 for further discussion.

    def read clen, dest, ignore_eof = false
      temp_dest = inflate_adapter(dest)

      @socket.read clen, temp_dest, ignore_eof
    end

    ##
    # Reads the rest of the socket, inflates it, then writes it to +dest+.

    def read_all dest
      temp_dest = inflate_adapter(dest)

      @socket.read_all temp_dest
    end

  end

end

PK)J[�q�^
8
8@share/rubygems/rubygems/vendor/net-http/lib/net/http/requests.rbnu�[���# frozen_string_literal: true

# HTTP/1.1 methods --- RFC2616

# \Class for representing
# {HTTP method GET}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#GET_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Get.new(uri) # => #<Gem::Net::HTTP::Get GET>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: yes.
#
# Related:
#
# - Gem::Net::HTTP.get: sends +GET+ request, returns response body.
# - Gem::Net::HTTP#get: sends +GET+ request, returns response object.
#
class Gem::Net::HTTP::Get < Gem::Net::HTTPRequest
  METHOD = 'GET'
  REQUEST_HAS_BODY  = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method HEAD}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#HEAD_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Head.new(uri) # => #<Gem::Net::HTTP::Head HEAD>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: no.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: yes.
#
# Related:
#
# - Gem::Net::HTTP#head: sends +HEAD+ request, returns response object.
#
class Gem::Net::HTTP::Head < Gem::Net::HTTPRequest
  METHOD = 'HEAD'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = false
end

# \Class for representing
# {HTTP method POST}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#POST_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts'
#   req = Gem::Net::HTTP::Post.new(uri) # => #<Gem::Net::HTTP::Post POST>
#   req.body = '{"title": "foo","body": "bar","userId": 1}'
#   req.content_type = 'application/json'
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: yes.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: no.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: yes.
#
# Related:
#
# - Gem::Net::HTTP.post: sends +POST+ request, returns response object.
# - Gem::Net::HTTP#post: sends +POST+ request, returns response object.
#
class Gem::Net::HTTP::Post < Gem::Net::HTTPRequest
  METHOD = 'POST'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method PUT}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#PUT_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts'
#   req = Gem::Net::HTTP::Put.new(uri) # => #<Gem::Net::HTTP::Put PUT>
#   req.body = '{"title": "foo","body": "bar","userId": 1}'
#   req.content_type = 'application/json'
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: yes.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Gem::Net::HTTP.put: sends +PUT+ request, returns response object.
# - Gem::Net::HTTP#put: sends +PUT+ request, returns response object.
#
class Gem::Net::HTTP::Put < Gem::Net::HTTPRequest
  METHOD = 'PUT'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method DELETE}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#DELETE_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts/1'
#   req = Gem::Net::HTTP::Delete.new(uri) # => #<Gem::Net::HTTP::Delete DELETE>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Gem::Net::HTTP#delete: sends +DELETE+ request, returns response object.
#
class Gem::Net::HTTP::Delete < Gem::Net::HTTPRequest
  METHOD = 'DELETE'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method OPTIONS}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#OPTIONS_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Options.new(uri) # => #<Gem::Net::HTTP::Options OPTIONS>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Gem::Net::HTTP#options: sends +OPTIONS+ request, returns response object.
#
class Gem::Net::HTTP::Options < Gem::Net::HTTPRequest
  METHOD = 'OPTIONS'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method TRACE}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#TRACE_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Trace.new(uri) # => #<Gem::Net::HTTP::Trace TRACE>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: no.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Gem::Net::HTTP#trace: sends +TRACE+ request, returns response object.
#
class Gem::Net::HTTP::Trace < Gem::Net::HTTPRequest
  METHOD = 'TRACE'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method PATCH}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#PATCH_method]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts'
#   req = Gem::Net::HTTP::Patch.new(uri) # => #<Gem::Net::HTTP::Patch PATCH>
#   req.body = '{"title": "foo","body": "bar","userId": 1}'
#   req.content_type = 'application/json'
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: yes.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: no.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Gem::Net::HTTP#patch: sends +PATCH+ request, returns response object.
#
class Gem::Net::HTTP::Patch < Gem::Net::HTTPRequest
  METHOD = 'PATCH'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

#
# WebDAV methods --- RFC2518
#

# \Class for representing
# {WebDAV method PROPFIND}[http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Propfind.new(uri) # => #<Gem::Net::HTTP::Propfind PROPFIND>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Gem::Net::HTTP#propfind: sends +PROPFIND+ request, returns response object.
#
class Gem::Net::HTTP::Propfind < Gem::Net::HTTPRequest
  METHOD = 'PROPFIND'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method PROPPATCH}[http://www.webdav.org/specs/rfc4918.html#METHOD_PROPPATCH]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Proppatch.new(uri) # => #<Gem::Net::HTTP::Proppatch PROPPATCH>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Gem::Net::HTTP#proppatch: sends +PROPPATCH+ request, returns response object.
#
class Gem::Net::HTTP::Proppatch < Gem::Net::HTTPRequest
  METHOD = 'PROPPATCH'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method MKCOL}[http://www.webdav.org/specs/rfc4918.html#METHOD_MKCOL]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Mkcol.new(uri) # => #<Gem::Net::HTTP::Mkcol MKCOL>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Gem::Net::HTTP#mkcol: sends +MKCOL+ request, returns response object.
#
class Gem::Net::HTTP::Mkcol < Gem::Net::HTTPRequest
  METHOD = 'MKCOL'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method COPY}[http://www.webdav.org/specs/rfc4918.html#METHOD_COPY]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Copy.new(uri) # => #<Gem::Net::HTTP::Copy COPY>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Gem::Net::HTTP#copy: sends +COPY+ request, returns response object.
#
class Gem::Net::HTTP::Copy < Gem::Net::HTTPRequest
  METHOD = 'COPY'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method MOVE}[http://www.webdav.org/specs/rfc4918.html#METHOD_MOVE]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Move.new(uri) # => #<Gem::Net::HTTP::Move MOVE>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Gem::Net::HTTP#move: sends +MOVE+ request, returns response object.
#
class Gem::Net::HTTP::Move < Gem::Net::HTTPRequest
  METHOD = 'MOVE'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method LOCK}[http://www.webdav.org/specs/rfc4918.html#METHOD_LOCK]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Lock.new(uri) # => #<Gem::Net::HTTP::Lock LOCK>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Gem::Net::HTTP#lock: sends +LOCK+ request, returns response object.
#
class Gem::Net::HTTP::Lock < Gem::Net::HTTPRequest
  METHOD = 'LOCK'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method UNLOCK}[http://www.webdav.org/specs/rfc4918.html#METHOD_UNLOCK]:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Gem::Net::HTTP::Unlock.new(uri) # => #<Gem::Net::HTTP::Unlock UNLOCK>
#   res = Gem::Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Gem::Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Gem::Net::HTTP#unlock: sends +UNLOCK+ request, returns response object.
#
class Gem::Net::HTTP::Unlock < Gem::Net::HTTPRequest
  METHOD = 'UNLOCK'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

PK)J[�sN�t�t�Ashare/rubygems/rubygems/vendor/net-http/lib/net/http/responses.rbnu�[���# frozen_string_literal: true
#--
# https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml

module Gem::Net

  class HTTPUnknownResponse < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPError                  #
  end

  # Parent class for informational (1xx) HTTP response classes.
  #
  # An informational response indicates that the request was received and understood.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.1xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_informational_response].
  #
  class HTTPInformation < HTTPResponse
    HAS_BODY = false
    EXCEPTION_TYPE = HTTPError                  #
  end

  # Parent class for success (2xx) HTTP response classes.
  #
  # A success response indicates the action requested by the client
  # was received, understood, and accepted.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.2xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_success].
  #
  class HTTPSuccess < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPError                  #
  end

  # Parent class for redirection (3xx) HTTP response classes.
  #
  # A redirection response indicates the client must take additional action
  # to complete the request.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.3xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_redirection].
  #
  class HTTPRedirection < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPRetriableError         #
  end

  # Parent class for client error (4xx) HTTP response classes.
  #
  # A client error response indicates that the client may have caused an error.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.4xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_client_errors].
  #
  class HTTPClientError < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPClientException        #
  end

  # Parent class for server error (5xx) HTTP response classes.
  #
  # A server error response indicates that the server failed to fulfill a request.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.5xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_server_errors].
  #
  class HTTPServerError < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPFatalError             #
  end

  # Response class for +Continue+ responses (status code 100).
  #
  # A +Continue+ response indicates that the server has received the request headers.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/100].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-100-continue].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#100].
  #
  class HTTPContinue < HTTPInformation
    HAS_BODY = false
  end

  # Response class for <tt>Switching Protocol</tt> responses (status code 101).
  #
  # The <tt>Switching Protocol<tt> response indicates that the server has received
  # a request to switch protocols, and has agreed to do so.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/101].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-101-switching-protocols].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#101].
  #
  class HTTPSwitchProtocol < HTTPInformation
    HAS_BODY = false
  end

  # Response class for +Processing+ responses (status code 102).
  #
  # The +Processing+ response indicates that the server has received
  # and is processing the request, but no response is available yet.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 2518}[https://www.rfc-editor.org/rfc/rfc2518#section-10.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#102].
  #
  class HTTPProcessing < HTTPInformation
    HAS_BODY = false
  end

  # Response class for <tt>Early Hints</tt> responses (status code 103).
  #
  # The <tt>Early Hints</tt> indicates that the server has received
  # and is processing the request, and contains certain headers;
  # the final response is not available yet.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103].
  # - {RFC 8297}[https://www.rfc-editor.org/rfc/rfc8297.html#section-2].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#103].
  #
  class HTTPEarlyHints < HTTPInformation
    HAS_BODY = false
  end

  # Response class for +OK+ responses (status code 200).
  #
  # The +OK+ response indicates that the server has received
  # a request and has responded successfully.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#200].
  #
  class HTTPOK < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for +Created+ responses (status code 201).
  #
  # The +Created+ response indicates that the server has received
  # and has fulfilled a request to create a new resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-201-created].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#201].
  #
  class HTTPCreated < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for +Accepted+ responses (status code 202).
  #
  # The +Accepted+ response indicates that the server has received
  # and is processing a request, but the processing has not yet been completed.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/202].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-202-accepted].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#202].
  #
  class HTTPAccepted < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Non-Authoritative Information</tt> responses (status code 203).
  #
  # The <tt>Non-Authoritative Information</tt> response indicates that the server
  # is a transforming proxy (such as a Web accelerator)
  # that received a 200 OK response from its origin,
  # and is returning a modified version of the origin's response.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/203].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-203-non-authoritative-infor].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#203].
  #
  class HTTPNonAuthoritativeInformation < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>No Content</tt> responses (status code 204).
  #
  # The <tt>No Content</tt> response indicates that the server
  # successfully processed the request, and is not returning any content.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-204-no-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#204].
  #
  class HTTPNoContent < HTTPSuccess
    HAS_BODY = false
  end

  # Response class for <tt>Reset Content</tt> responses (status code 205).
  #
  # The <tt>Reset Content</tt> response indicates that the server
  # successfully processed the request,
  # asks that the client reset its document view, and is not returning any content.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/205].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-205-reset-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#205].
  #
  class HTTPResetContent < HTTPSuccess
    HAS_BODY = false
  end

  # Response class for <tt>Partial Content</tt> responses (status code 206).
  #
  # The <tt>Partial Content</tt> response indicates that the server is delivering
  # only part of the resource (byte serving)
  # due to a Range header in the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-206-partial-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#206].
  #
  class HTTPPartialContent < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Multi-Status (WebDAV)</tt> responses (status code 207).
  #
  # The <tt>Multi-Status (WebDAV)</tt> response indicates that the server
  # has received the request,
  # and that the message body can contain a number of separate response codes.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 4818}[https://www.rfc-editor.org/rfc/rfc4918#section-11.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#207].
  #
  class HTTPMultiStatus < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Already Reported (WebDAV)</tt> responses (status code 208).
  #
  # The <tt>Already Reported (WebDAV)</tt> response indicates that the server
  # has received the request,
  # and that the members of a DAV binding have already been enumerated
  # in a preceding part of the (multi-status) response,
  # and are not being included again.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 5842}[https://www.rfc-editor.org/rfc/rfc5842.html#section-7.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#208].
  #
  class HTTPAlreadyReported < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>IM Used</tt> responses (status code 226).
  #
  # The <tt>IM Used</tt> response indicates that the server has fulfilled a request
  # for the resource, and the response is a representation of the result
  # of one or more instance-manipulations applied to the current instance.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 3229}[https://www.rfc-editor.org/rfc/rfc3229.html#section-10.4.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#226].
  #
  class HTTPIMUsed < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Multiple Choices</tt> responses (status code 300).
  #
  # The <tt>Multiple Choices</tt> response indicates that the server
  # offers multiple options for the resource from which the client may choose.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/300].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-300-multiple-choices].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#300].
  #
  class HTTPMultipleChoices < HTTPRedirection
    HAS_BODY = true
  end
  HTTPMultipleChoice = HTTPMultipleChoices

  # Response class for <tt>Moved Permanently</tt> responses (status code 301).
  #
  # The <tt>Moved Permanently</tt> response indicates that links or records
  # returning this response should be updated to use the given URL.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/301].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-301-moved-permanently].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#301].
  #
  class HTTPMovedPermanently < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Found</tt> responses (status code 302).
  #
  # The <tt>Found</tt> response indicates that the client
  # should look at (browse to) another URL.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-302-found].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#302].
  #
  class HTTPFound < HTTPRedirection
    HAS_BODY = true
  end
  HTTPMovedTemporarily = HTTPFound

  # Response class for <tt>See Other</tt> responses (status code 303).
  #
  # The response to the request can be found under another Gem::URI using the GET method.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/303].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-303-see-other].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#303].
  #
  class HTTPSeeOther < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Not Modified</tt> responses (status code 304).
  #
  # Indicates that the resource has not been modified since the version
  # specified by the request headers.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-304-not-modified].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#304].
  #
  class HTTPNotModified < HTTPRedirection
    HAS_BODY = false
  end

  # Response class for <tt>Use Proxy</tt> responses (status code 305).
  #
  # The requested resource is available only through a proxy,
  # whose address is provided in the response.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-305-use-proxy].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#305].
  #
  class HTTPUseProxy < HTTPRedirection
    HAS_BODY = false
  end

  # Response class for <tt>Temporary Redirect</tt> responses (status code 307).
  #
  # The request should be repeated with another Gem::URI;
  # however, future requests should still use the original Gem::URI.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-307-temporary-redirect].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#307].
  #
  class HTTPTemporaryRedirect < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Permanent Redirect</tt> responses (status code 308).
  #
  # This and all future requests should be directed to the given Gem::URI.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-308-permanent-redirect].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#308].
  #
  class HTTPPermanentRedirect < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Bad Request</tt> responses (status code 400).
  #
  # The server cannot or will not process the request due to an apparent client error.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-400-bad-request].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#400].
  #
  class HTTPBadRequest < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Unauthorized</tt> responses (status code 401).
  #
  # Authentication is required, but either was not provided or failed.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-401-unauthorized].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#401].
  #
  class HTTPUnauthorized < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Payment Required</tt> responses (status code 402).
  #
  # Reserved for future use.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/402].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-402-payment-required].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#402].
  #
  class HTTPPaymentRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Forbidden</tt> responses (status code 403).
  #
  # The request contained valid data and was understood by the server,
  # but the server is refusing action.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-403-forbidden].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#403].
  #
  class HTTPForbidden < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Not Found</tt> responses (status code 404).
  #
  # The requested resource could not be found but may be available in the future.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#404].
  #
  class HTTPNotFound < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Method Not Allowed</tt> responses (status code 405).
  #
  # The request method is not supported for the requested resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-405-method-not-allowed].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#405].
  #
  class HTTPMethodNotAllowed < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Not Acceptable</tt> responses (status code 406).
  #
  # The requested resource is capable of generating only content
  # that not acceptable according to the Accept headers sent in the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/406].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-406-not-acceptable].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#406].
  #
  class HTTPNotAcceptable < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Proxy Authentication Required</tt> responses (status code 407).
  #
  # The client must first authenticate itself with the proxy.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/407].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-407-proxy-authentication-re].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#407].
  #
  class HTTPProxyAuthenticationRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Request Gem::Timeout</tt> responses (status code 408).
  #
  # The server timed out waiting for the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-408-request-timeout].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#408].
  #
  class HTTPRequestTimeout < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestTimeOut = HTTPRequestTimeout

  # Response class for <tt>Conflict</tt> responses (status code 409).
  #
  # The request could not be processed because of conflict in the current state of the resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/409].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-409-conflict].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#409].
  #
  class HTTPConflict < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Gone</tt> responses (status code 410).
  #
  # The resource requested was previously in use but is no longer available
  # and will not be available again.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/410].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-410-gone].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#410].
  #
  class HTTPGone < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Length Required</tt> responses (status code 411).
  #
  # The request did not specify the length of its content,
  # which is required by the requested resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/411].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-411-length-required].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#411].
  #
  class HTTPLengthRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Precondition Failed</tt> responses (status code 412).
  #
  # The server does not meet one of the preconditions
  # specified in the request headers.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/412].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-412-precondition-failed].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#412].
  #
  class HTTPPreconditionFailed < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Payload Too Large</tt> responses (status code 413).
  #
  # The request is larger than the server is willing or able to process.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/413].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-413-content-too-large].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#413].
  #
  class HTTPPayloadTooLarge < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestEntityTooLarge = HTTPPayloadTooLarge

  # Response class for <tt>Gem::URI Too Long</tt> responses (status code 414).
  #
  # The Gem::URI provided was too long for the server to process.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/414].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-414-uri-too-long].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#414].
  #
  class HTTPURITooLong < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestURITooLong = HTTPURITooLong
  HTTPRequestURITooLarge = HTTPRequestURITooLong

  # Response class for <tt>Unsupported Media Type</tt> responses (status code 415).
  #
  # The request entity has a media type which the server or resource does not support.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/415].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-415-unsupported-media-type].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#415].
  #
  class HTTPUnsupportedMediaType < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Range Not Satisfiable</tt> responses (status code 416).
  #
  # The request entity has a media type which the server or resource does not support.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-416-range-not-satisfiable].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#416].
  #
  class HTTPRangeNotSatisfiable < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestedRangeNotSatisfiable = HTTPRangeNotSatisfiable

  # Response class for <tt>Expectation Failed</tt> responses (status code 417).
  #
  # The server cannot meet the requirements of the Expect request-header field.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/417].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-417-expectation-failed].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#417].
  #
  class HTTPExpectationFailed < HTTPClientError
    HAS_BODY = true
  end

  # 418 I'm a teapot - RFC 2324; a joke RFC
  # See https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#418.

  # 420 Enhance Your Calm - Twitter

  # Response class for <tt>Misdirected Request</tt> responses (status code 421).
  #
  # The request was directed at a server that is not able to produce a response.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-421-misdirected-request].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#421].
  #
  class HTTPMisdirectedRequest < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Unprocessable Entity</tt> responses (status code 422).
  #
  # The request was well-formed but had semantic errors.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-422-unprocessable-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#422].
  #
  class HTTPUnprocessableEntity < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Locked (WebDAV)</tt> responses (status code 423).
  #
  # The requested resource is locked.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 4918}[https://www.rfc-editor.org/rfc/rfc4918#section-11.3].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#423].
  #
  class HTTPLocked < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Failed Dependency (WebDAV)</tt> responses (status code 424).
  #
  # The request failed because it depended on another request and that request failed.
  # See {424 Failed Dependency (WebDAV)}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#424].
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 4918}[https://www.rfc-editor.org/rfc/rfc4918#section-11.4].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#424].
  #
  class HTTPFailedDependency < HTTPClientError
    HAS_BODY = true
  end

  # 425 Too Early
  # https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#425.

  # Response class for <tt>Upgrade Required</tt> responses (status code 426).
  #
  # The client should switch to the protocol given in the Upgrade header field.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/426].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-426-upgrade-required].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#426].
  #
  class HTTPUpgradeRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Precondition Required</tt> responses (status code 428).
  #
  # The origin server requires the request to be conditional.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/428].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-3].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#428].
  #
  class HTTPPreconditionRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Too Many Requests</tt> responses (status code 429).
  #
  # The user has sent too many requests in a given amount of time.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-4].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#429].
  #
  class HTTPTooManyRequests < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Request Header Fields Too Large</tt> responses (status code 431).
  #
  # An individual header field is too large,
  # or all the header fields collectively, are too large.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/431].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-5].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#431].
  #
  class HTTPRequestHeaderFieldsTooLarge < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Unavailable For Legal Reasons</tt> responses (status code 451).
  #
  # A server operator has received a legal demand to deny access to a resource or to a set of resources
  # that includes the requested resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/451].
  # - {RFC 7725}[https://www.rfc-editor.org/rfc/rfc7725.html#section-3].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#451].
  #
  class HTTPUnavailableForLegalReasons < HTTPClientError
    HAS_BODY = true
  end
  # 444 No Response - Nginx
  # 449 Retry With - Microsoft
  # 450 Blocked by Windows Parental Controls - Microsoft
  # 499 Client Closed Request - Nginx

  # Response class for <tt>Internal Server Error</tt> responses (status code 500).
  #
  # An unexpected condition was encountered and no more specific message is suitable.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-500-internal-server-error].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#500].
  #
  class HTTPInternalServerError < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Not Implemented</tt> responses (status code 501).
  #
  # The server either does not recognize the request method,
  # or it lacks the ability to fulfil the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-501-not-implemented].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#501].
  #
  class HTTPNotImplemented < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Bad Gateway</tt> responses (status code 502).
  #
  # The server was acting as a gateway or proxy
  # and received an invalid response from the upstream server.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-502-bad-gateway].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#502].
  #
  class HTTPBadGateway < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Service Unavailable</tt> responses (status code 503).
  #
  # The server cannot handle the request
  # (because it is overloaded or down for maintenance).
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-503-service-unavailable].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#503].
  #
  class HTTPServiceUnavailable < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Gateway Gem::Timeout</tt> responses (status code 504).
  #
  # The server was acting as a gateway or proxy
  # and did not receive a timely response from the upstream server.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/504].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-504-gateway-timeout].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#504].
  #
  class HTTPGatewayTimeout < HTTPServerError
    HAS_BODY = true
  end
  HTTPGatewayTimeOut = HTTPGatewayTimeout

  # Response class for <tt>HTTP Version Not Supported</tt> responses (status code 505).
  #
  # The server does not support the HTTP version used in the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/505].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-505-http-version-not-suppor].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#505].
  #
  class HTTPVersionNotSupported < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Variant Also Negotiates</tt> responses (status code 506).
  #
  # Transparent content negotiation for the request results in a circular reference.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/506].
  # - {RFC 2295}[https://www.rfc-editor.org/rfc/rfc2295#section-8.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#506].
  #
  class HTTPVariantAlsoNegotiates < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Insufficient Storage (WebDAV)</tt> responses (status code 507).
  #
  # The server is unable to store the representation needed to complete the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/507].
  # - {RFC 4918}[https://www.rfc-editor.org/rfc/rfc4918#section-11.5].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#507].
  #
  class HTTPInsufficientStorage < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Loop Detected (WebDAV)</tt> responses (status code 508).
  #
  # The server detected an infinite loop while processing the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/508].
  # - {RFC 5942}[https://www.rfc-editor.org/rfc/rfc5842.html#section-7.2].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#508].
  #
  class HTTPLoopDetected < HTTPServerError
    HAS_BODY = true
  end
  # 509 Bandwidth Limit Exceeded - Apache bw/limited extension

  # Response class for <tt>Not Extended</tt> responses (status code 510).
  #
  # Further extensions to the request are required for the server to fulfill it.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/510].
  # - {RFC 2774}[https://www.rfc-editor.org/rfc/rfc2774.html#section-7].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#510].
  #
  class HTTPNotExtended < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Network Authentication Required</tt> responses (status code 511).
  #
  # The client needs to authenticate to gain network access.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/511].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-6].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#511].
  #
  class HTTPNetworkAuthenticationRequired < HTTPServerError
    HAS_BODY = true
  end

end

class Gem::Net::HTTPResponse
  CODE_CLASS_TO_OBJ = {
    '1' => Gem::Net::HTTPInformation,
    '2' => Gem::Net::HTTPSuccess,
    '3' => Gem::Net::HTTPRedirection,
    '4' => Gem::Net::HTTPClientError,
    '5' => Gem::Net::HTTPServerError
  }
  CODE_TO_OBJ = {
    '100' => Gem::Net::HTTPContinue,
    '101' => Gem::Net::HTTPSwitchProtocol,
    '102' => Gem::Net::HTTPProcessing,
    '103' => Gem::Net::HTTPEarlyHints,

    '200' => Gem::Net::HTTPOK,
    '201' => Gem::Net::HTTPCreated,
    '202' => Gem::Net::HTTPAccepted,
    '203' => Gem::Net::HTTPNonAuthoritativeInformation,
    '204' => Gem::Net::HTTPNoContent,
    '205' => Gem::Net::HTTPResetContent,
    '206' => Gem::Net::HTTPPartialContent,
    '207' => Gem::Net::HTTPMultiStatus,
    '208' => Gem::Net::HTTPAlreadyReported,
    '226' => Gem::Net::HTTPIMUsed,

    '300' => Gem::Net::HTTPMultipleChoices,
    '301' => Gem::Net::HTTPMovedPermanently,
    '302' => Gem::Net::HTTPFound,
    '303' => Gem::Net::HTTPSeeOther,
    '304' => Gem::Net::HTTPNotModified,
    '305' => Gem::Net::HTTPUseProxy,
    '307' => Gem::Net::HTTPTemporaryRedirect,
    '308' => Gem::Net::HTTPPermanentRedirect,

    '400' => Gem::Net::HTTPBadRequest,
    '401' => Gem::Net::HTTPUnauthorized,
    '402' => Gem::Net::HTTPPaymentRequired,
    '403' => Gem::Net::HTTPForbidden,
    '404' => Gem::Net::HTTPNotFound,
    '405' => Gem::Net::HTTPMethodNotAllowed,
    '406' => Gem::Net::HTTPNotAcceptable,
    '407' => Gem::Net::HTTPProxyAuthenticationRequired,
    '408' => Gem::Net::HTTPRequestTimeout,
    '409' => Gem::Net::HTTPConflict,
    '410' => Gem::Net::HTTPGone,
    '411' => Gem::Net::HTTPLengthRequired,
    '412' => Gem::Net::HTTPPreconditionFailed,
    '413' => Gem::Net::HTTPPayloadTooLarge,
    '414' => Gem::Net::HTTPURITooLong,
    '415' => Gem::Net::HTTPUnsupportedMediaType,
    '416' => Gem::Net::HTTPRangeNotSatisfiable,
    '417' => Gem::Net::HTTPExpectationFailed,
    '421' => Gem::Net::HTTPMisdirectedRequest,
    '422' => Gem::Net::HTTPUnprocessableEntity,
    '423' => Gem::Net::HTTPLocked,
    '424' => Gem::Net::HTTPFailedDependency,
    '426' => Gem::Net::HTTPUpgradeRequired,
    '428' => Gem::Net::HTTPPreconditionRequired,
    '429' => Gem::Net::HTTPTooManyRequests,
    '431' => Gem::Net::HTTPRequestHeaderFieldsTooLarge,
    '451' => Gem::Net::HTTPUnavailableForLegalReasons,

    '500' => Gem::Net::HTTPInternalServerError,
    '501' => Gem::Net::HTTPNotImplemented,
    '502' => Gem::Net::HTTPBadGateway,
    '503' => Gem::Net::HTTPServiceUnavailable,
    '504' => Gem::Net::HTTPGatewayTimeout,
    '505' => Gem::Net::HTTPVersionNotSupported,
    '506' => Gem::Net::HTTPVariantAlsoNegotiates,
    '507' => Gem::Net::HTTPInsufficientStorage,
    '508' => Gem::Net::HTTPLoopDetected,
    '510' => Gem::Net::HTTPNotExtended,
    '511' => Gem::Net::HTTPNetworkAuthenticationRequired,
  }
end
PK)J[M?�iCshare/rubygems/rubygems/vendor/net-http/lib/net/http/proxy_delta.rbnu�[���# frozen_string_literal: true
module Gem::Net::HTTP::ProxyDelta   #:nodoc: internal use only
  private

  def conn_address
    proxy_address()
  end

  def conn_port
    proxy_port()
  end

  def edit_path(path)
    use_ssl? ? path : "http://#{addr_port()}#{path}"
  end
end

PK)J[���TTBshare/rubygems/rubygems/vendor/net-http/lib/net/http/exceptions.rbnu�[���# frozen_string_literal: true
module Gem::Net
  # Gem::Net::HTTP exception class.
  # You cannot use Gem::Net::HTTPExceptions directly; instead, you must use
  # its subclasses.
  module HTTPExceptions
    def initialize(msg, res)   #:nodoc:
      super msg
      @response = res
    end
    attr_reader :response
    alias data response    #:nodoc: obsolete
  end

  class HTTPError < ProtocolError
    include HTTPExceptions
  end

  class HTTPRetriableError < ProtoRetriableError
    include HTTPExceptions
  end

  class HTTPClientException < ProtoServerError
    include HTTPExceptions
  end

  class HTTPFatalError < ProtoFatalError
    include HTTPExceptions
  end

  # We cannot use the name "HTTPServerError", it is the name of the response.
  HTTPServerException = HTTPClientException # :nodoc:
  deprecate_constant(:HTTPServerException)
end
PK)J[`9d�
	
	>share/rubygems/rubygems/vendor/net-http/lib/net/http/status.rbnu�[���# frozen_string_literal: true

require_relative '../http'

if $0 == __FILE__
  require 'open-uri'
  File.foreach(__FILE__) do |line|
    puts line
    break if line.start_with?('end')
  end
  puts
  puts "Gem::Net::HTTP::STATUS_CODES = {"
  url = "https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv"
  Gem::URI(url).read.each_line do |line|
    code, mes, = line.split(',')
    next if ['(Unused)', 'Unassigned', 'Description'].include?(mes)
    puts "  #{code} => '#{mes}',"
  end
  puts "} # :nodoc:"
end

Gem::Net::HTTP::STATUS_CODES = {
  100 => 'Continue',
  101 => 'Switching Protocols',
  102 => 'Processing',
  103 => 'Early Hints',
  200 => 'OK',
  201 => 'Created',
  202 => 'Accepted',
  203 => 'Non-Authoritative Information',
  204 => 'No Content',
  205 => 'Reset Content',
  206 => 'Partial Content',
  207 => 'Multi-Status',
  208 => 'Already Reported',
  226 => 'IM Used',
  300 => 'Multiple Choices',
  301 => 'Moved Permanently',
  302 => 'Found',
  303 => 'See Other',
  304 => 'Not Modified',
  305 => 'Use Proxy',
  307 => 'Temporary Redirect',
  308 => 'Permanent Redirect',
  400 => 'Bad Request',
  401 => 'Unauthorized',
  402 => 'Payment Required',
  403 => 'Forbidden',
  404 => 'Not Found',
  405 => 'Method Not Allowed',
  406 => 'Not Acceptable',
  407 => 'Proxy Authentication Required',
  408 => 'Request Timeout',
  409 => 'Conflict',
  410 => 'Gone',
  411 => 'Length Required',
  412 => 'Precondition Failed',
  413 => 'Content Too Large',
  414 => 'URI Too Long',
  415 => 'Unsupported Media Type',
  416 => 'Range Not Satisfiable',
  417 => 'Expectation Failed',
  421 => 'Misdirected Request',
  422 => 'Unprocessable Content',
  423 => 'Locked',
  424 => 'Failed Dependency',
  425 => 'Too Early',
  426 => 'Upgrade Required',
  428 => 'Precondition Required',
  429 => 'Too Many Requests',
  431 => 'Request Header Fields Too Large',
  451 => 'Unavailable For Legal Reasons',
  500 => 'Internal Server Error',
  501 => 'Not Implemented',
  502 => 'Bad Gateway',
  503 => 'Service Unavailable',
  504 => 'Gateway Timeout',
  505 => 'HTTP Version Not Supported',
  506 => 'Variant Also Negotiates',
  507 => 'Insufficient Storage',
  508 => 'Loop Detected',
  510 => 'Not Extended (OBSOLETED)',
  511 => 'Network Authentication Required',
} # :nodoc:
PK)J[���?share/rubygems/rubygems/vendor/net-http/lib/net/http/request.rbnu�[���# frozen_string_literal: true

# This class is the base class for \Gem::Net::HTTP request classes.
# The class should not be used directly;
# instead you should use its subclasses, listed below.
#
# == Creating a Request
#
# An request object may be created with either a Gem::URI or a string hostname:
#
#   require 'rubygems/vendor/net-http/lib/net/http'
#   uri = Gem::URI('https://jsonplaceholder.typicode.com/')
#   req = Gem::Net::HTTP::Get.new(uri)          # => #<Gem::Net::HTTP::Get GET>
#   req = Gem::Net::HTTP::Get.new(uri.hostname) # => #<Gem::Net::HTTP::Get GET>
#
# And with any of the subclasses:
#
#   req = Gem::Net::HTTP::Head.new(uri) # => #<Gem::Net::HTTP::Head HEAD>
#   req = Gem::Net::HTTP::Post.new(uri) # => #<Gem::Net::HTTP::Post POST>
#   req = Gem::Net::HTTP::Put.new(uri)  # => #<Gem::Net::HTTP::Put PUT>
#   # ...
#
# The new instance is suitable for use as the argument to Gem::Net::HTTP#request.
#
# == Request Headers
#
# A new request object has these header fields by default:
#
#   req.to_hash
#   # =>
#   {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"],
#   "accept"=>["*/*"],
#   "user-agent"=>["Ruby"],
#   "host"=>["jsonplaceholder.typicode.com"]}
#
# See:
#
# - {Request header Accept-Encoding}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Accept-Encoding]
#   and {Compression and Decompression}[rdoc-ref:Gem::Net::HTTP@Compression+and+Decompression].
# - {Request header Accept}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#accept-request-header].
# - {Request header User-Agent}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#user-agent-request-header].
# - {Request header Host}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#host-request-header].
#
# You can add headers or override default headers:
#
#   #   res = Gem::Net::HTTP::Get.new(uri, {'foo' => '0', 'bar' => '1'})
#
# This class (and therefore its subclasses) also includes (indirectly)
# module Gem::Net::HTTPHeader, which gives access to its
# {methods for setting headers}[rdoc-ref:Gem::Net::HTTPHeader@Setters].
#
# == Request Subclasses
#
# Subclasses for HTTP requests:
#
# - Gem::Net::HTTP::Get
# - Gem::Net::HTTP::Head
# - Gem::Net::HTTP::Post
# - Gem::Net::HTTP::Put
# - Gem::Net::HTTP::Delete
# - Gem::Net::HTTP::Options
# - Gem::Net::HTTP::Trace
# - Gem::Net::HTTP::Patch
#
# Subclasses for WebDAV requests:
#
# - Gem::Net::HTTP::Propfind
# - Gem::Net::HTTP::Proppatch
# - Gem::Net::HTTP::Mkcol
# - Gem::Net::HTTP::Copy
# - Gem::Net::HTTP::Move
# - Gem::Net::HTTP::Lock
# - Gem::Net::HTTP::Unlock
#
class Gem::Net::HTTPRequest < Gem::Net::HTTPGenericRequest
  # Creates an HTTP request object for +path+.
  #
  # +initheader+ are the default headers to use.  Gem::Net::HTTP adds
  # Accept-Encoding to enable compression of the response body unless
  # Accept-Encoding or Range are supplied in +initheader+.

  def initialize(path, initheader = nil)
    super self.class::METHOD,
          self.class::REQUEST_HAS_BODY,
          self.class::RESPONSE_HAS_BODY,
          path, initheader
  end
end
PK)J[�_k#""8share/rubygems/rubygems/vendor/net-http/lib/net/https.rbnu�[���# frozen_string_literal: true
=begin

= net/https -- SSL/TLS enhancement for Gem::Net::HTTP.

  This file has been merged with net/http.  There is no longer any need to
  require_relative 'https' to use HTTPS.

  See Gem::Net::HTTP for details on how to make HTTPS connections.

== Info
  'OpenSSL for Ruby 2' project
  Copyright (C) 2001 GOTOU Yuuzou <gotoyuzo@notwork.org>
  All rights reserved.

== Licence
  This program is licensed under the same licence as Ruby.
  (See the file 'LICENCE'.)

=end

require_relative 'http'
require 'openssl'
PK)J[���_�_7share/rubygems/rubygems/vendor/net-http/lib/net/http.rbnu�[���# frozen_string_literal: true
#
# = net/http.rb
#
# Copyright (c) 1999-2007 Yukihiro Matsumoto
# Copyright (c) 1999-2007 Minero Aoki
# Copyright (c) 2001 GOTOU Yuuzou
#
# Written and maintained by Minero Aoki <aamine@loveruby.net>.
# HTTPS support added by GOTOU Yuuzou <gotoyuzo@notwork.org>.
#
# This file is derived from "http-access.rb".
#
# Documented by Minero Aoki; converted to RDoc by William Webber.
#
# This program is free software. You can re-distribute and/or
# modify this program under the same terms of ruby itself ---
# Ruby Distribution License or GNU General Public License.
#
# See Gem::Net::HTTP for an overview and examples.
#

require_relative '../../../net-protocol/lib/net/protocol'
require_relative '../../../uri/lib/uri'
require_relative '../../../resolv/lib/resolv'
autoload :OpenSSL, 'openssl'

module Gem::Net   #:nodoc:

  # :stopdoc:
  class HTTPBadResponse < StandardError; end
  class HTTPHeaderSyntaxError < StandardError; end
  # :startdoc:

  # \Class \Gem::Net::HTTP provides a rich library that implements the client
  # in a client-server model that uses the \HTTP request-response protocol.
  # For information about \HTTP, see:
  #
  # - {Hypertext Transfer Protocol}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol].
  # - {Technical overview}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Technical_overview].
  #
  # == About the Examples
  #
  # :include: doc/net-http/examples.rdoc
  #
  # == Strategies
  #
  # - If you will make only a few GET requests,
  #   consider using {OpenURI}[rdoc-ref:OpenURI].
  # - If you will make only a few requests of all kinds,
  #   consider using the various singleton convenience methods in this class.
  #   Each of the following methods automatically starts and finishes
  #   a {session}[rdoc-ref:Gem::Net::HTTP@Sessions] that sends a single request:
  #
  #     # Return string response body.
  #     Gem::Net::HTTP.get(hostname, path)
  #     Gem::Net::HTTP.get(uri)
  #
  #     # Write string response body to $stdout.
  #     Gem::Net::HTTP.get_print(hostname, path)
  #     Gem::Net::HTTP.get_print(uri)
  #
  #     # Return response as Gem::Net::HTTPResponse object.
  #     Gem::Net::HTTP.get_response(hostname, path)
  #     Gem::Net::HTTP.get_response(uri)
  #     data = '{"title": "foo", "body": "bar", "userId": 1}'
  #     Gem::Net::HTTP.post(uri, data)
  #     params = {title: 'foo', body: 'bar', userId: 1}
  #     Gem::Net::HTTP.post_form(uri, params)
  #     data = '{"title": "foo", "body": "bar", "userId": 1}'
  #     Gem::Net::HTTP.put(uri, data)
  #
  # - If performance is important, consider using sessions, which lower request overhead.
  #   This {session}[rdoc-ref:Gem::Net::HTTP@Sessions] has multiple requests for
  #   {HTTP methods}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods]
  #   and {WebDAV methods}[https://en.wikipedia.org/wiki/WebDAV#Implementation]:
  #
  #     Gem::Net::HTTP.start(hostname) do |http|
  #       # Session started automatically before block execution.
  #       http.get(path)
  #       http.head(path)
  #       body = 'Some text'
  #       http.post(path, body)  # Can also have a block.
  #       http.put(path, body)
  #       http.delete(path)
  #       http.options(path)
  #       http.trace(path)
  #       http.patch(path, body) # Can also have a block.
  #       http.copy(path)
  #       http.lock(path, body)
  #       http.mkcol(path, body)
  #       http.move(path)
  #       http.propfind(path, body)
  #       http.proppatch(path, body)
  #       http.unlock(path, body)
  #       # Session finished automatically at block exit.
  #     end
  #
  # The methods cited above are convenience methods that, via their few arguments,
  # allow minimal control over the requests.
  # For greater control, consider using {request objects}[rdoc-ref:Gem::Net::HTTPRequest].
  #
  # == URIs
  #
  # On the internet, a URI
  # ({Universal Resource Identifier}[https://en.wikipedia.org/wiki/Uniform_Resource_Identifier])
  # is a string that identifies a particular resource.
  # It consists of some or all of: scheme, hostname, path, query, and fragment;
  # see {URI syntax}[https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax].
  #
  # A Ruby {Gem::URI::Generic}[rdoc-ref:Gem::URI::Generic] object
  # represents an internet URI.
  # It provides, among others, methods
  # +scheme+, +hostname+, +path+, +query+, and +fragment+.
  #
  # === Schemes
  #
  # An internet \Gem::URI has
  # a {scheme}[https://en.wikipedia.org/wiki/List_of_URI_schemes].
  #
  # The two schemes supported in \Gem::Net::HTTP are <tt>'https'</tt> and <tt>'http'</tt>:
  #
  #   uri.scheme                       # => "https"
  #   Gem::URI('http://example.com').scheme # => "http"
  #
  # === Hostnames
  #
  # A hostname identifies a server (host) to which requests may be sent:
  #
  #   hostname = uri.hostname # => "jsonplaceholder.typicode.com"
  #   Gem::Net::HTTP.start(hostname) do |http|
  #     # Some HTTP stuff.
  #   end
  #
  # === Paths
  #
  # A host-specific path identifies a resource on the host:
  #
  #   _uri = uri.dup
  #   _uri.path = '/todos/1'
  #   hostname = _uri.hostname
  #   path = _uri.path
  #   Gem::Net::HTTP.get(hostname, path)
  #
  # === Queries
  #
  # A host-specific query adds name/value pairs to the URI:
  #
  #   _uri = uri.dup
  #   params = {userId: 1, completed: false}
  #   _uri.query = Gem::URI.encode_www_form(params)
  #   _uri # => #<Gem::URI::HTTPS https://jsonplaceholder.typicode.com?userId=1&completed=false>
  #   Gem::Net::HTTP.get(_uri)
  #
  # === Fragments
  #
  # A {URI fragment}[https://en.wikipedia.org/wiki/URI_fragment] has no effect
  # in \Gem::Net::HTTP;
  # the same data is returned, regardless of whether a fragment is included.
  #
  # == Request Headers
  #
  # Request headers may be used to pass additional information to the host,
  # similar to arguments passed in a method call;
  # each header is a name/value pair.
  #
  # Each of the \Gem::Net::HTTP methods that sends a request to the host
  # has optional argument +headers+,
  # where the headers are expressed as a hash of field-name/value pairs:
  #
  #   headers = {Accept: 'application/json', Connection: 'Keep-Alive'}
  #   Gem::Net::HTTP.get(uri, headers)
  #
  # See lists of both standard request fields and common request fields at
  # {Request Fields}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields].
  # A host may also accept other custom fields.
  #
  # == \HTTP Sessions
  #
  # A _session_ is a connection between a server (host) and a client that:
  #
  # - Is begun by instance method Gem::Net::HTTP#start.
  # - May contain any number of requests.
  # - Is ended by instance method Gem::Net::HTTP#finish.
  #
  # See example sessions at {Strategies}[rdoc-ref:Gem::Net::HTTP@Strategies].
  #
  # === Session Using \Gem::Net::HTTP.start
  #
  # If you have many requests to make to a single host (and port),
  # consider using singleton method Gem::Net::HTTP.start with a block;
  # the method handles the session automatically by:
  #
  # - Calling #start before block execution.
  # - Executing the block.
  # - Calling #finish after block execution.
  #
  # In the block, you can use these instance methods,
  # each of which that sends a single request:
  #
  # - {HTTP methods}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods]:
  #
  #   - #get, #request_get: GET.
  #   - #head, #request_head: HEAD.
  #   - #post, #request_post: POST.
  #   - #delete: DELETE.
  #   - #options: OPTIONS.
  #   - #trace: TRACE.
  #   - #patch: PATCH.
  #
  # - {WebDAV methods}[https://en.wikipedia.org/wiki/WebDAV#Implementation]:
  #
  #   - #copy: COPY.
  #   - #lock: LOCK.
  #   - #mkcol: MKCOL.
  #   - #move: MOVE.
  #   - #propfind: PROPFIND.
  #   - #proppatch: PROPPATCH.
  #   - #unlock: UNLOCK.
  #
  # === Session Using \Gem::Net::HTTP.start and \Gem::Net::HTTP.finish
  #
  # You can manage a session manually using methods #start and #finish:
  #
  #   http = Gem::Net::HTTP.new(hostname)
  #   http.start
  #   http.get('/todos/1')
  #   http.get('/todos/2')
  #   http.delete('/posts/1')
  #   http.finish # Needed to free resources.
  #
  # === Single-Request Session
  #
  # Certain convenience methods automatically handle a session by:
  #
  # - Creating an \HTTP object
  # - Starting a session.
  # - Sending a single request.
  # - Finishing the session.
  # - Destroying the object.
  #
  # Such methods that send GET requests:
  #
  # - ::get: Returns the string response body.
  # - ::get_print: Writes the string response body to $stdout.
  # - ::get_response: Returns a Gem::Net::HTTPResponse object.
  #
  # Such methods that send POST requests:
  #
  # - ::post: Posts data to the host.
  # - ::post_form: Posts form data to the host.
  #
  # == \HTTP Requests and Responses
  #
  # Many of the methods above are convenience methods,
  # each of which sends a request and returns a string
  # without directly using \Gem::Net::HTTPRequest and \Gem::Net::HTTPResponse objects.
  #
  # You can, however, directly create a request object, send the request,
  # and retrieve the response object; see:
  #
  # - Gem::Net::HTTPRequest.
  # - Gem::Net::HTTPResponse.
  #
  # == Following Redirection
  #
  # Each returned response is an instance of a subclass of Gem::Net::HTTPResponse.
  # See the {response class hierarchy}[rdoc-ref:Gem::Net::HTTPResponse@Response+Subclasses].
  #
  # In particular, class Gem::Net::HTTPRedirection is the parent
  # of all redirection classes.
  # This allows you to craft a case statement to handle redirections properly:
  #
  #   def fetch(uri, limit = 10)
  #     # You should choose a better exception.
  #     raise ArgumentError, 'Too many HTTP redirects' if limit == 0
  #
  #     res = Gem::Net::HTTP.get_response(Gem::URI(uri))
  #     case res
  #     when Gem::Net::HTTPSuccess     # Any success class.
  #       res
  #     when Gem::Net::HTTPRedirection # Any redirection class.
  #       location = res['Location']
  #       warn "Redirected to #{location}"
  #       fetch(location, limit - 1)
  #     else                      # Any other class.
  #       res.value
  #     end
  #   end
  #
  #   fetch(uri)
  #
  # == Basic Authentication
  #
  # Basic authentication is performed according to
  # {RFC2617}[http://www.ietf.org/rfc/rfc2617.txt]:
  #
  #   req = Gem::Net::HTTP::Get.new(uri)
  #   req.basic_auth('user', 'pass')
  #   res = Gem::Net::HTTP.start(hostname) do |http|
  #     http.request(req)
  #   end
  #
  # == Streaming Response Bodies
  #
  # By default \Gem::Net::HTTP reads an entire response into memory.  If you are
  # handling large files or wish to implement a progress bar you can instead
  # stream the body directly to an IO.
  #
  #   Gem::Net::HTTP.start(hostname) do |http|
  #     req = Gem::Net::HTTP::Get.new(uri)
  #     http.request(req) do |res|
  #       open('t.tmp', 'w') do |f|
  #         res.read_body do |chunk|
  #           f.write chunk
  #         end
  #       end
  #     end
  #   end
  #
  # == HTTPS
  #
  # HTTPS is enabled for an \HTTP connection by Gem::Net::HTTP#use_ssl=:
  #
  #   Gem::Net::HTTP.start(hostname, :use_ssl => true) do |http|
  #     req = Gem::Net::HTTP::Get.new(uri)
  #     res = http.request(req)
  #   end
  #
  # Or if you simply want to make a GET request, you may pass in a URI
  # object that has an \HTTPS URL. \Gem::Net::HTTP automatically turns on TLS
  # verification if the URI object has a 'https' :URI scheme:
  #
  #   uri # => #<Gem::URI::HTTPS https://jsonplaceholder.typicode.com/>
  #   Gem::Net::HTTP.get(uri)
  #
  # == Proxy Server
  #
  # An \HTTP object can have
  # a {proxy server}[https://en.wikipedia.org/wiki/Proxy_server].
  #
  # You can create an \HTTP object with a proxy server
  # using method Gem::Net::HTTP.new or method Gem::Net::HTTP.start.
  #
  # The proxy may be defined either by argument +p_addr+
  # or by environment variable <tt>'http_proxy'</tt>.
  #
  # === Proxy Using Argument +p_addr+ as a \String
  #
  # When argument +p_addr+ is a string hostname,
  # the returned +http+ has the given host as its proxy:
  #
  #   http = Gem::Net::HTTP.new(hostname, nil, 'proxy.example')
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => false
  #   http.proxy_address   # => "proxy.example"
  #   # These use default values.
  #   http.proxy_port      # => 80
  #   http.proxy_user      # => nil
  #   http.proxy_pass      # => nil
  #
  # The port, username, and password for the proxy may also be given:
  #
  #   http = Gem::Net::HTTP.new(hostname, nil, 'proxy.example', 8000, 'pname', 'ppass')
  #   # => #<Gem::Net::HTTP jsonplaceholder.typicode.com:80 open=false>
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => false
  #   http.proxy_address   # => "proxy.example"
  #   http.proxy_port      # => 8000
  #   http.proxy_user      # => "pname"
  #   http.proxy_pass      # => "ppass"
  #
  # === Proxy Using '<tt>ENV['http_proxy']</tt>'
  #
  # When environment variable <tt>'http_proxy'</tt>
  # is set to a \Gem::URI string,
  # the returned +http+ will have the server at that URI as its proxy;
  # note that the \Gem::URI string must have a protocol
  # such as <tt>'http'</tt> or <tt>'https'</tt>:
  #
  #   ENV['http_proxy'] = 'http://example.com'
  #   http = Gem::Net::HTTP.new(hostname)
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => true
  #   http.proxy_address   # => "example.com"
  #   # These use default values.
  #   http.proxy_port      # => 80
  #   http.proxy_user      # => nil
  #   http.proxy_pass      # => nil
  #
  # The \Gem::URI string may include proxy username, password, and port number:
  #
  #   ENV['http_proxy'] = 'http://pname:ppass@example.com:8000'
  #   http = Gem::Net::HTTP.new(hostname)
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => true
  #   http.proxy_address   # => "example.com"
  #   http.proxy_port      # => 8000
  #   http.proxy_user      # => "pname"
  #   http.proxy_pass      # => "ppass"
  #
  # === Filtering Proxies
  #
  # With method Gem::Net::HTTP.new (but not Gem::Net::HTTP.start),
  # you can use argument +p_no_proxy+ to filter proxies:
  #
  # - Reject a certain address:
  #
  #     http = Gem::Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example')
  #     http.proxy_address # => nil
  #
  # - Reject certain domains or subdomains:
  #
  #     http = Gem::Net::HTTP.new('example.com', nil, 'my.proxy.example', 8000, 'pname', 'ppass', 'proxy.example')
  #     http.proxy_address # => nil
  #
  # - Reject certain addresses and port combinations:
  #
  #     http = Gem::Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example:1234')
  #     http.proxy_address # => "proxy.example"
  #
  #     http = Gem::Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example:8000')
  #     http.proxy_address # => nil
  #
  # - Reject a list of the types above delimited using a comma:
  #
  #     http = Gem::Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'my.proxy,proxy.example:8000')
  #     http.proxy_address # => nil
  #
  #     http = Gem::Net::HTTP.new('example.com', nil, 'my.proxy', 8000, 'pname', 'ppass', 'my.proxy,proxy.example:8000')
  #     http.proxy_address # => nil
  #
  # == Compression and Decompression
  #
  # \Gem::Net::HTTP does not compress the body of a request before sending.
  #
  # By default, \Gem::Net::HTTP adds header <tt>'Accept-Encoding'</tt>
  # to a new {request object}[rdoc-ref:Gem::Net::HTTPRequest]:
  #
  #   Gem::Net::HTTP::Get.new(uri)['Accept-Encoding']
  #   # => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
  #
  # This requests the server to zip-encode the response body if there is one;
  # the server is not required to do so.
  #
  # \Gem::Net::HTTP does not automatically decompress a response body
  # if the response has header <tt>'Content-Range'</tt>.
  #
  # Otherwise decompression (or not) depends on the value of header
  # {Content-Encoding}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-encoding-response-header]:
  #
  # - <tt>'deflate'</tt>, <tt>'gzip'</tt>, or <tt>'x-gzip'</tt>:
  #   decompresses the body and deletes the header.
  # - <tt>'none'</tt> or <tt>'identity'</tt>:
  #   does not decompress the body, but deletes the header.
  # - Any other value:
  #   leaves the body and header unchanged.
  #
  # == What's Here
  #
  # First, what's elsewhere. Class Gem::Net::HTTP:
  #
  # - Inherits from {class Object}[rdoc-ref:Object@What-27s+Here].
  #
  # This is a categorized summary of methods and attributes.
  #
  # === \Gem::Net::HTTP Objects
  #
  # - {::new}[rdoc-ref:Gem::Net::HTTP.new]:
  #   Creates a new instance.
  # - {#inspect}[rdoc-ref:Gem::Net::HTTP#inspect]:
  #   Returns a string representation of +self+.
  #
  # === Sessions
  #
  # - {::start}[rdoc-ref:Gem::Net::HTTP.start]:
  #   Begins a new session in a new \Gem::Net::HTTP object.
  # - {#started?}[rdoc-ref:Gem::Net::HTTP#started?]
  #   (aliased as {#active?}[rdoc-ref:Gem::Net::HTTP#active?]):
  #   Returns whether in a session.
  # - {#finish}[rdoc-ref:Gem::Net::HTTP#finish]:
  #   Ends an active session.
  # - {#start}[rdoc-ref:Gem::Net::HTTP#start]:
  #   Begins a new session in an existing \Gem::Net::HTTP object (+self+).
  #
  # === Connections
  #
  # - {:continue_timeout}[rdoc-ref:Gem::Net::HTTP#continue_timeout]:
  #   Returns the continue timeout.
  # - {#continue_timeout=}[rdoc-ref:Gem::Net::HTTP#continue_timeout=]:
  #   Sets the continue timeout seconds.
  # - {:keep_alive_timeout}[rdoc-ref:Gem::Net::HTTP#keep_alive_timeout]:
  #   Returns the keep-alive timeout.
  # - {:keep_alive_timeout=}[rdoc-ref:Gem::Net::HTTP#keep_alive_timeout=]:
  #   Sets the keep-alive timeout.
  # - {:max_retries}[rdoc-ref:Gem::Net::HTTP#max_retries]:
  #   Returns the maximum retries.
  # - {#max_retries=}[rdoc-ref:Gem::Net::HTTP#max_retries=]:
  #   Sets the maximum retries.
  # - {:open_timeout}[rdoc-ref:Gem::Net::HTTP#open_timeout]:
  #   Returns the open timeout.
  # - {:open_timeout=}[rdoc-ref:Gem::Net::HTTP#open_timeout=]:
  #   Sets the open timeout.
  # - {:read_timeout}[rdoc-ref:Gem::Net::HTTP#read_timeout]:
  #   Returns the open timeout.
  # - {:read_timeout=}[rdoc-ref:Gem::Net::HTTP#read_timeout=]:
  #   Sets the read timeout.
  # - {:ssl_timeout}[rdoc-ref:Gem::Net::HTTP#ssl_timeout]:
  #   Returns the ssl timeout.
  # - {:ssl_timeout=}[rdoc-ref:Gem::Net::HTTP#ssl_timeout=]:
  #   Sets the ssl timeout.
  # - {:write_timeout}[rdoc-ref:Gem::Net::HTTP#write_timeout]:
  #   Returns the write timeout.
  # - {write_timeout=}[rdoc-ref:Gem::Net::HTTP#write_timeout=]:
  #   Sets the write timeout.
  #
  # === Requests
  #
  # - {::get}[rdoc-ref:Gem::Net::HTTP.get]:
  #   Sends a GET request and returns the string response body.
  # - {::get_print}[rdoc-ref:Gem::Net::HTTP.get_print]:
  #   Sends a GET request and write the string response body to $stdout.
  # - {::get_response}[rdoc-ref:Gem::Net::HTTP.get_response]:
  #   Sends a GET request and returns a response object.
  # - {::post_form}[rdoc-ref:Gem::Net::HTTP.post_form]:
  #   Sends a POST request with form data and returns a response object.
  # - {::post}[rdoc-ref:Gem::Net::HTTP.post]:
  #   Sends a POST request with data and returns a response object.
  # - {::put}[rdoc-ref:Gem::Net::HTTP.put]:
  #   Sends a PUT request with data and returns a response object.
  # - {#copy}[rdoc-ref:Gem::Net::HTTP#copy]:
  #   Sends a COPY request and returns a response object.
  # - {#delete}[rdoc-ref:Gem::Net::HTTP#delete]:
  #   Sends a DELETE request and returns a response object.
  # - {#get}[rdoc-ref:Gem::Net::HTTP#get]:
  #   Sends a GET request and returns a response object.
  # - {#head}[rdoc-ref:Gem::Net::HTTP#head]:
  #   Sends a HEAD request and returns a response object.
  # - {#lock}[rdoc-ref:Gem::Net::HTTP#lock]:
  #   Sends a LOCK request and returns a response object.
  # - {#mkcol}[rdoc-ref:Gem::Net::HTTP#mkcol]:
  #   Sends a MKCOL request and returns a response object.
  # - {#move}[rdoc-ref:Gem::Net::HTTP#move]:
  #   Sends a MOVE request and returns a response object.
  # - {#options}[rdoc-ref:Gem::Net::HTTP#options]:
  #   Sends a OPTIONS request and returns a response object.
  # - {#patch}[rdoc-ref:Gem::Net::HTTP#patch]:
  #   Sends a PATCH request and returns a response object.
  # - {#post}[rdoc-ref:Gem::Net::HTTP#post]:
  #   Sends a POST request and returns a response object.
  # - {#propfind}[rdoc-ref:Gem::Net::HTTP#propfind]:
  #   Sends a PROPFIND request and returns a response object.
  # - {#proppatch}[rdoc-ref:Gem::Net::HTTP#proppatch]:
  #   Sends a PROPPATCH request and returns a response object.
  # - {#put}[rdoc-ref:Gem::Net::HTTP#put]:
  #   Sends a PUT request and returns a response object.
  # - {#request}[rdoc-ref:Gem::Net::HTTP#request]:
  #   Sends a request and returns a response object.
  # - {#request_get}[rdoc-ref:Gem::Net::HTTP#request_get]
  #   (aliased as {#get2}[rdoc-ref:Gem::Net::HTTP#get2]):
  #   Sends a GET request and forms a response object;
  #   if a block given, calls the block with the object,
  #   otherwise returns the object.
  # - {#request_head}[rdoc-ref:Gem::Net::HTTP#request_head]
  #   (aliased as {#head2}[rdoc-ref:Gem::Net::HTTP#head2]):
  #   Sends a HEAD request and forms a response object;
  #   if a block given, calls the block with the object,
  #   otherwise returns the object.
  # - {#request_post}[rdoc-ref:Gem::Net::HTTP#request_post]
  #   (aliased as {#post2}[rdoc-ref:Gem::Net::HTTP#post2]):
  #   Sends a POST request and forms a response object;
  #   if a block given, calls the block with the object,
  #   otherwise returns the object.
  # - {#send_request}[rdoc-ref:Gem::Net::HTTP#send_request]:
  #   Sends a request and returns a response object.
  # - {#trace}[rdoc-ref:Gem::Net::HTTP#trace]:
  #   Sends a TRACE request and returns a response object.
  # - {#unlock}[rdoc-ref:Gem::Net::HTTP#unlock]:
  #   Sends an UNLOCK request and returns a response object.
  #
  # === Responses
  #
  # - {:close_on_empty_response}[rdoc-ref:Gem::Net::HTTP#close_on_empty_response]:
  #   Returns whether to close connection on empty response.
  # - {:close_on_empty_response=}[rdoc-ref:Gem::Net::HTTP#close_on_empty_response=]:
  #   Sets whether to close connection on empty response.
  # - {:ignore_eof}[rdoc-ref:Gem::Net::HTTP#ignore_eof]:
  #   Returns whether to ignore end-of-file when reading a response body
  #   with <tt>Content-Length</tt> headers.
  # - {:ignore_eof=}[rdoc-ref:Gem::Net::HTTP#ignore_eof=]:
  #   Sets whether to ignore end-of-file when reading a response body
  #   with <tt>Content-Length</tt> headers.
  # - {:response_body_encoding}[rdoc-ref:Gem::Net::HTTP#response_body_encoding]:
  #   Returns the encoding to use for the response body.
  # - {#response_body_encoding=}[rdoc-ref:Gem::Net::HTTP#response_body_encoding=]:
  #   Sets the response body encoding.
  #
  # === Proxies
  #
  # - {:proxy_address}[rdoc-ref:Gem::Net::HTTP#proxy_address]:
  #   Returns the proxy address.
  # - {:proxy_address=}[rdoc-ref:Gem::Net::HTTP#proxy_address=]:
  #   Sets the proxy address.
  # - {::proxy_class?}[rdoc-ref:Gem::Net::HTTP.proxy_class?]:
  #   Returns whether +self+ is a proxy class.
  # - {#proxy?}[rdoc-ref:Gem::Net::HTTP#proxy?]:
  #   Returns whether +self+ has a proxy.
  # - {#proxy_address}[rdoc-ref:Gem::Net::HTTP#proxy_address]
  #   (aliased as {#proxyaddr}[rdoc-ref:Gem::Net::HTTP#proxyaddr]):
  #   Returns the proxy address.
  # - {#proxy_from_env?}[rdoc-ref:Gem::Net::HTTP#proxy_from_env?]:
  #   Returns whether the proxy is taken from an environment variable.
  # - {:proxy_from_env=}[rdoc-ref:Gem::Net::HTTP#proxy_from_env=]:
  #   Sets whether the proxy is to be taken from an environment variable.
  # - {:proxy_pass}[rdoc-ref:Gem::Net::HTTP#proxy_pass]:
  #   Returns the proxy password.
  # - {:proxy_pass=}[rdoc-ref:Gem::Net::HTTP#proxy_pass=]:
  #   Sets the proxy password.
  # - {:proxy_port}[rdoc-ref:Gem::Net::HTTP#proxy_port]:
  #   Returns the proxy port.
  # - {:proxy_port=}[rdoc-ref:Gem::Net::HTTP#proxy_port=]:
  #   Sets the proxy port.
  # - {#proxy_user}[rdoc-ref:Gem::Net::HTTP#proxy_user]:
  #   Returns the proxy user name.
  # - {:proxy_user=}[rdoc-ref:Gem::Net::HTTP#proxy_user=]:
  #   Sets the proxy user.
  #
  # === Security
  #
  # - {:ca_file}[rdoc-ref:Gem::Net::HTTP#ca_file]:
  #   Returns the path to a CA certification file.
  # - {:ca_file=}[rdoc-ref:Gem::Net::HTTP#ca_file=]:
  #   Sets the path to a CA certification file.
  # - {:ca_path}[rdoc-ref:Gem::Net::HTTP#ca_path]:
  #   Returns the path of to CA directory containing certification files.
  # - {:ca_path=}[rdoc-ref:Gem::Net::HTTP#ca_path=]:
  #   Sets the path of to CA directory containing certification files.
  # - {:cert}[rdoc-ref:Gem::Net::HTTP#cert]:
  #   Returns the OpenSSL::X509::Certificate object to be used for client certification.
  # - {:cert=}[rdoc-ref:Gem::Net::HTTP#cert=]:
  #   Sets the OpenSSL::X509::Certificate object to be used for client certification.
  # - {:cert_store}[rdoc-ref:Gem::Net::HTTP#cert_store]:
  #   Returns the X509::Store to be used for verifying peer certificate.
  # - {:cert_store=}[rdoc-ref:Gem::Net::HTTP#cert_store=]:
  #   Sets the X509::Store to be used for verifying peer certificate.
  # - {:ciphers}[rdoc-ref:Gem::Net::HTTP#ciphers]:
  #   Returns the available SSL ciphers.
  # - {:ciphers=}[rdoc-ref:Gem::Net::HTTP#ciphers=]:
  #   Sets the available SSL ciphers.
  # - {:extra_chain_cert}[rdoc-ref:Gem::Net::HTTP#extra_chain_cert]:
  #   Returns the extra X509 certificates to be added to the certificate chain.
  # - {:extra_chain_cert=}[rdoc-ref:Gem::Net::HTTP#extra_chain_cert=]:
  #   Sets the extra X509 certificates to be added to the certificate chain.
  # - {:key}[rdoc-ref:Gem::Net::HTTP#key]:
  #   Returns the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
  # - {:key=}[rdoc-ref:Gem::Net::HTTP#key=]:
  #   Sets the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
  # - {:max_version}[rdoc-ref:Gem::Net::HTTP#max_version]:
  #   Returns the maximum SSL version.
  # - {:max_version=}[rdoc-ref:Gem::Net::HTTP#max_version=]:
  #   Sets the maximum SSL version.
  # - {:min_version}[rdoc-ref:Gem::Net::HTTP#min_version]:
  #   Returns the minimum SSL version.
  # - {:min_version=}[rdoc-ref:Gem::Net::HTTP#min_version=]:
  #   Sets the minimum SSL version.
  # - {#peer_cert}[rdoc-ref:Gem::Net::HTTP#peer_cert]:
  #   Returns the X509 certificate chain for the session's socket peer.
  # - {:ssl_version}[rdoc-ref:Gem::Net::HTTP#ssl_version]:
  #   Returns the SSL version.
  # - {:ssl_version=}[rdoc-ref:Gem::Net::HTTP#ssl_version=]:
  #   Sets the SSL version.
  # - {#use_ssl=}[rdoc-ref:Gem::Net::HTTP#use_ssl=]:
  #   Sets whether a new session is to use Transport Layer Security.
  # - {#use_ssl?}[rdoc-ref:Gem::Net::HTTP#use_ssl?]:
  #   Returns whether +self+ uses SSL.
  # - {:verify_callback}[rdoc-ref:Gem::Net::HTTP#verify_callback]:
  #   Returns the callback for the server certification verification.
  # - {:verify_callback=}[rdoc-ref:Gem::Net::HTTP#verify_callback=]:
  #   Sets the callback for the server certification verification.
  # - {:verify_depth}[rdoc-ref:Gem::Net::HTTP#verify_depth]:
  #   Returns the maximum depth for the certificate chain verification.
  # - {:verify_depth=}[rdoc-ref:Gem::Net::HTTP#verify_depth=]:
  #   Sets the maximum depth for the certificate chain verification.
  # - {:verify_hostname}[rdoc-ref:Gem::Net::HTTP#verify_hostname]:
  #   Returns the flags for server the certification verification at the beginning of the SSL/TLS session.
  # - {:verify_hostname=}[rdoc-ref:Gem::Net::HTTP#verify_hostname=]:
  #   Sets he flags for server the certification verification at the beginning of the SSL/TLS session.
  # - {:verify_mode}[rdoc-ref:Gem::Net::HTTP#verify_mode]:
  #   Returns the flags for server the certification verification at the beginning of the SSL/TLS session.
  # - {:verify_mode=}[rdoc-ref:Gem::Net::HTTP#verify_mode=]:
  #   Sets the flags for server the certification verification at the beginning of the SSL/TLS session.
  #
  # === Addresses and Ports
  #
  # - {:address}[rdoc-ref:Gem::Net::HTTP#address]:
  #   Returns the string host name or host IP.
  # - {::default_port}[rdoc-ref:Gem::Net::HTTP.default_port]:
  #   Returns integer 80, the default port to use for HTTP requests.
  # - {::http_default_port}[rdoc-ref:Gem::Net::HTTP.http_default_port]:
  #   Returns integer 80, the default port to use for HTTP requests.
  # - {::https_default_port}[rdoc-ref:Gem::Net::HTTP.https_default_port]:
  #   Returns integer 443, the default port to use for HTTPS requests.
  # - {#ipaddr}[rdoc-ref:Gem::Net::HTTP#ipaddr]:
  #   Returns the IP address for the connection.
  # - {#ipaddr=}[rdoc-ref:Gem::Net::HTTP#ipaddr=]:
  #   Sets the IP address for the connection.
  # - {:local_host}[rdoc-ref:Gem::Net::HTTP#local_host]:
  #   Returns the string local host used to establish the connection.
  # - {:local_host=}[rdoc-ref:Gem::Net::HTTP#local_host=]:
  #   Sets the string local host used to establish the connection.
  # - {:local_port}[rdoc-ref:Gem::Net::HTTP#local_port]:
  #   Returns the integer local port used to establish the connection.
  # - {:local_port=}[rdoc-ref:Gem::Net::HTTP#local_port=]:
  #   Sets the integer local port used to establish the connection.
  # - {:port}[rdoc-ref:Gem::Net::HTTP#port]:
  #   Returns the integer port number.
  #
  # === \HTTP Version
  #
  # - {::version_1_2?}[rdoc-ref:Gem::Net::HTTP.version_1_2?]
  #   (aliased as {::is_version_1_2?}[rdoc-ref:Gem::Net::HTTP.is_version_1_2?]
  #   and {::version_1_2}[rdoc-ref:Gem::Net::HTTP.version_1_2]):
  #   Returns true; retained for compatibility.
  #
  # === Debugging
  #
  # - {#set_debug_output}[rdoc-ref:Gem::Net::HTTP#set_debug_output]:
  #   Sets the output stream for debugging.
  #
  class HTTP < Protocol

    # :stopdoc:
    VERSION = "0.6.0"
    HTTPVersion = '1.1'
    begin
      require 'zlib'
      HAVE_ZLIB=true
    rescue LoadError
      HAVE_ZLIB=false
    end
    # :startdoc:

    # Returns +true+; retained for compatibility.
    def HTTP.version_1_2
      true
    end

    # Returns +true+; retained for compatibility.
    def HTTP.version_1_2?
      true
    end

    # Returns +false+; retained for compatibility.
    def HTTP.version_1_1?  #:nodoc:
      false
    end

    class << HTTP
      alias is_version_1_1? version_1_1?   #:nodoc:
      alias is_version_1_2? version_1_2?   #:nodoc:
    end

    # :call-seq:
    #   Gem::Net::HTTP.get_print(hostname, path, port = 80) -> nil
    #   Gem::Net::HTTP:get_print(uri, headers = {}, port = uri.port) -> nil
    #
    # Like Gem::Net::HTTP.get, but writes the returned body to $stdout;
    # returns +nil+.
    def HTTP.get_print(uri_or_host, path_or_headers = nil, port = nil)
      get_response(uri_or_host, path_or_headers, port) {|res|
        res.read_body do |chunk|
          $stdout.print chunk
        end
      }
      nil
    end

    # :call-seq:
    #   Gem::Net::HTTP.get(hostname, path, port = 80) -> body
    #   Gem::Net::HTTP:get(uri, headers = {}, port = uri.port) -> body
    #
    # Sends a GET request and returns the \HTTP response body as a string.
    #
    # With string arguments +hostname+ and +path+:
    #
    #   hostname = 'jsonplaceholder.typicode.com'
    #   path = '/todos/1'
    #   puts Gem::Net::HTTP.get(hostname, path)
    #
    # Output:
    #
    #   {
    #     "userId": 1,
    #     "id": 1,
    #     "title": "delectus aut autem",
    #     "completed": false
    #   }
    #
    # With URI object +uri+ and optional hash argument +headers+:
    #
    #   uri = Gem::URI('https://jsonplaceholder.typicode.com/todos/1')
    #   headers = {'Content-type' => 'application/json; charset=UTF-8'}
    #   Gem::Net::HTTP.get(uri, headers)
    #
    # Related:
    #
    # - Gem::Net::HTTP::Get: request class for \HTTP method +GET+.
    # - Gem::Net::HTTP#get: convenience method for \HTTP method +GET+.
    #
    def HTTP.get(uri_or_host, path_or_headers = nil, port = nil)
      get_response(uri_or_host, path_or_headers, port).body
    end

    # :call-seq:
    #   Gem::Net::HTTP.get_response(hostname, path, port = 80) -> http_response
    #   Gem::Net::HTTP:get_response(uri, headers = {}, port = uri.port) -> http_response
    #
    # Like Gem::Net::HTTP.get, but returns a Gem::Net::HTTPResponse object
    # instead of the body string.
    def HTTP.get_response(uri_or_host, path_or_headers = nil, port = nil, &block)
      if path_or_headers && !path_or_headers.is_a?(Hash)
        host = uri_or_host
        path = path_or_headers
        new(host, port || HTTP.default_port).start {|http|
          return http.request_get(path, &block)
        }
      else
        uri = uri_or_host
        headers = path_or_headers
        start(uri.hostname, uri.port,
              :use_ssl => uri.scheme == 'https') {|http|
          return http.request_get(uri, headers, &block)
        }
      end
    end

    # Posts data to a host; returns a Gem::Net::HTTPResponse object.
    #
    # Argument +url+ must be a URL;
    # argument +data+ must be a string:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   data = '{"title": "foo", "body": "bar", "userId": 1}'
    #   headers = {'content-type': 'application/json'}
    #   res = Gem::Net::HTTP.post(_uri, data, headers) # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #   puts res.body
    #
    # Output:
    #
    #   {
    #     "title": "foo",
    #     "body": "bar",
    #     "userId": 1,
    #     "id": 101
    #   }
    #
    # Related:
    #
    # - Gem::Net::HTTP::Post: request class for \HTTP method +POST+.
    # - Gem::Net::HTTP#post: convenience method for \HTTP method +POST+.
    #
    def HTTP.post(url, data, header = nil)
      start(url.hostname, url.port,
            :use_ssl => url.scheme == 'https' ) {|http|
        http.post(url, data, header)
      }
    end

    # Posts data to a host; returns a Gem::Net::HTTPResponse object.
    #
    # Argument +url+ must be a URI;
    # argument +data+ must be a hash:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   data = {title: 'foo', body: 'bar', userId: 1}
    #   res = Gem::Net::HTTP.post_form(_uri, data) # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #   puts res.body
    #
    # Output:
    #
    #   {
    #     "title": "foo",
    #     "body": "bar",
    #     "userId": "1",
    #     "id": 101
    #   }
    #
    def HTTP.post_form(url, params)
      req = Post.new(url)
      req.form_data = params
      req.basic_auth url.user, url.password if url.user
      start(url.hostname, url.port,
            :use_ssl => url.scheme == 'https' ) {|http|
        http.request(req)
      }
    end

    # Sends a PUT request to the server; returns a Gem::Net::HTTPResponse object.
    #
    # Argument +url+ must be a URL;
    # argument +data+ must be a string:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   data = '{"title": "foo", "body": "bar", "userId": 1}'
    #   headers = {'content-type': 'application/json'}
    #   res = Gem::Net::HTTP.put(_uri, data, headers) # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #   puts res.body
    #
    # Output:
    #
    #   {
    #     "title": "foo",
    #     "body": "bar",
    #     "userId": 1,
    #     "id": 101
    #   }
    #
    # Related:
    #
    # - Gem::Net::HTTP::Put: request class for \HTTP method +PUT+.
    # - Gem::Net::HTTP#put: convenience method for \HTTP method +PUT+.
    #
    def HTTP.put(url, data, header = nil)
      start(url.hostname, url.port,
            :use_ssl => url.scheme == 'https' ) {|http|
        http.put(url, data, header)
      }
    end

    #
    # \HTTP session management
    #

    # Returns integer +80+, the default port to use for \HTTP requests:
    #
    #   Gem::Net::HTTP.default_port # => 80
    #
    def HTTP.default_port
      http_default_port()
    end

    # Returns integer +80+, the default port to use for \HTTP requests:
    #
    #   Gem::Net::HTTP.http_default_port # => 80
    #
    def HTTP.http_default_port
      80
    end

    # Returns integer +443+, the default port to use for HTTPS requests:
    #
    #   Gem::Net::HTTP.https_default_port # => 443
    #
    def HTTP.https_default_port
      443
    end

    def HTTP.socket_type   #:nodoc: obsolete
      BufferedIO
    end

    # :call-seq:
    #   HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) -> http
    #   HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) {|http| ... } -> object
    #
    # Creates a new \Gem::Net::HTTP object, +http+, via \Gem::Net::HTTP.new:
    #
    # - For arguments +address+ and +port+, see Gem::Net::HTTP.new.
    # - For proxy-defining arguments +p_addr+ through +p_pass+,
    #   see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    # - For argument +opts+, see below.
    #
    # With no block given:
    #
    # - Calls <tt>http.start</tt> with no block (see #start),
    #   which opens a TCP connection and \HTTP session.
    # - Returns +http+.
    # - The caller should call #finish to close the session:
    #
    #     http = Gem::Net::HTTP.start(hostname)
    #     http.started? # => true
    #     http.finish
    #     http.started? # => false
    #
    # With a block given:
    #
    # - Calls <tt>http.start</tt> with the block (see #start), which:
    #
    #   - Opens a TCP connection and \HTTP session.
    #   - Calls the block,
    #     which may make any number of requests to the host.
    #   - Closes the \HTTP session and TCP connection on block exit.
    #   - Returns the block's value +object+.
    #
    # - Returns +object+.
    #
    # Example:
    #
    #   hostname = 'jsonplaceholder.typicode.com'
    #   Gem::Net::HTTP.start(hostname) do |http|
    #     puts http.get('/todos/1').body
    #     puts http.get('/todos/2').body
    #   end
    #
    # Output:
    #
    #   {
    #     "userId": 1,
    #     "id": 1,
    #     "title": "delectus aut autem",
    #     "completed": false
    #   }
    #   {
    #     "userId": 1,
    #     "id": 2,
    #     "title": "quis ut nam facilis et officia qui",
    #     "completed": false
    #   }
    #
    # If the last argument given is a hash, it is the +opts+ hash,
    # where each key is a method or accessor to be called,
    # and its value is the value to be set.
    #
    # The keys may include:
    #
    # - #ca_file
    # - #ca_path
    # - #cert
    # - #cert_store
    # - #ciphers
    # - #close_on_empty_response
    # - +ipaddr+ (calls #ipaddr=)
    # - #keep_alive_timeout
    # - #key
    # - #open_timeout
    # - #read_timeout
    # - #ssl_timeout
    # - #ssl_version
    # - +use_ssl+ (calls #use_ssl=)
    # - #verify_callback
    # - #verify_depth
    # - #verify_mode
    # - #write_timeout
    #
    # Note: If +port+ is +nil+ and <tt>opts[:use_ssl]</tt> is a truthy value,
    # the value passed to +new+ is Gem::Net::HTTP.https_default_port, not +port+.
    #
    def HTTP.start(address, *arg, &block) # :yield: +http+
      arg.pop if opt = Hash.try_convert(arg[-1])
      port, p_addr, p_port, p_user, p_pass = *arg
      p_addr = :ENV if arg.size < 2
      port = https_default_port if !port && opt && opt[:use_ssl]
      http = new(address, port, p_addr, p_port, p_user, p_pass)
      http.ipaddr = opt[:ipaddr] if opt && opt[:ipaddr]

      if opt
        if opt[:use_ssl]
          opt = {verify_mode: OpenSSL::SSL::VERIFY_PEER}.update(opt)
        end
        http.methods.grep(/\A(\w+)=\z/) do |meth|
          key = $1.to_sym
          opt.key?(key) or next
          http.__send__(meth, opt[key])
        end
      end

      http.start(&block)
    end

    class << HTTP
      alias newobj new # :nodoc:
    end

    # Returns a new \Gem::Net::HTTP object +http+
    # (but does not open a TCP connection or \HTTP session).
    #
    # With only string argument +address+ given
    # (and <tt>ENV['http_proxy']</tt> undefined or +nil+),
    # the returned +http+:
    #
    # - Has the given address.
    # - Has the default port number, Gem::Net::HTTP.default_port (80).
    # - Has no proxy.
    #
    # Example:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   # => #<Gem::Net::HTTP jsonplaceholder.typicode.com:80 open=false>
    #   http.address # => "jsonplaceholder.typicode.com"
    #   http.port    # => 80
    #   http.proxy?  # => false
    #
    # With integer argument +port+ also given,
    # the returned +http+ has the given port:
    #
    #   http = Gem::Net::HTTP.new(hostname, 8000)
    #   # => #<Gem::Net::HTTP jsonplaceholder.typicode.com:8000 open=false>
    #   http.port # => 8000
    #
    # For proxy-defining arguments +p_addr+ through +p_no_proxy+,
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    #
    def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil, p_use_ssl = nil)
      http = super address, port

      if proxy_class? then # from Gem::Net::HTTP::Proxy()
        http.proxy_from_env = @proxy_from_env
        http.proxy_address  = @proxy_address
        http.proxy_port     = @proxy_port
        http.proxy_user     = @proxy_user
        http.proxy_pass     = @proxy_pass
        http.proxy_use_ssl  = @proxy_use_ssl
      elsif p_addr == :ENV then
        http.proxy_from_env = true
      else
        if p_addr && p_no_proxy && !Gem::URI::Generic.use_proxy?(address, address, port, p_no_proxy)
          p_addr = nil
          p_port = nil
        end
        http.proxy_address = p_addr
        http.proxy_port    = p_port || default_port
        http.proxy_user    = p_user
        http.proxy_pass    = p_pass
        http.proxy_use_ssl = p_use_ssl
      end

      http
    end

    class << HTTP
      # Allows to set the default configuration that will be used
      # when creating a new connection.
      #
      # Example:
      #
      #   Gem::Net::HTTP.default_configuration = {
      #     read_timeout: 1,
      #     write_timeout: 1
      #   }
      #   http = Gem::Net::HTTP.new(hostname)
      #   http.open_timeout   # => 60
      #   http.read_timeout   # => 1
      #   http.write_timeout  # => 1
      #
      attr_accessor :default_configuration
    end

    # Creates a new \Gem::Net::HTTP object for the specified server address,
    # without opening the TCP connection or initializing the \HTTP session.
    # The +address+ should be a DNS hostname or IP address.
    def initialize(address, port = nil) # :nodoc:
      defaults = {
        keep_alive_timeout: 2,
        close_on_empty_response: false,
        open_timeout: 60,
        read_timeout: 60,
        write_timeout: 60,
        continue_timeout: nil,
        max_retries: 1,
        debug_output: nil,
        response_body_encoding: false,
        ignore_eof: true
      }
      options = defaults.merge(self.class.default_configuration || {})

      @address = address
      @port    = (port || HTTP.default_port)
      @ipaddr = nil
      @local_host = nil
      @local_port = nil
      @curr_http_version = HTTPVersion
      @keep_alive_timeout = options[:keep_alive_timeout]
      @last_communicated = nil
      @close_on_empty_response = options[:close_on_empty_response]
      @socket  = nil
      @started = false
      @open_timeout = options[:open_timeout]
      @read_timeout = options[:read_timeout]
      @write_timeout = options[:write_timeout]
      @continue_timeout = options[:continue_timeout]
      @max_retries = options[:max_retries]
      @debug_output = options[:debug_output]
      @response_body_encoding = options[:response_body_encoding]
      @ignore_eof = options[:ignore_eof]

      @proxy_from_env = false
      @proxy_uri      = nil
      @proxy_address  = nil
      @proxy_port     = nil
      @proxy_user     = nil
      @proxy_pass     = nil
      @proxy_use_ssl  = nil

      @use_ssl = false
      @ssl_context = nil
      @ssl_session = nil
      @sspi_enabled = false
      SSL_IVNAMES.each do |ivname|
        instance_variable_set ivname, nil
      end
    end

    # Returns a string representation of +self+:
    #
    #   Gem::Net::HTTP.new(hostname).inspect
    #   # => "#<Gem::Net::HTTP jsonplaceholder.typicode.com:80 open=false>"
    #
    def inspect
      "#<#{self.class} #{@address}:#{@port} open=#{started?}>"
    end

    # *WARNING* This method opens a serious security hole.
    # Never use this method in production code.
    #
    # Sets the output stream for debugging:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   File.open('t.tmp', 'w') do |file|
    #     http.set_debug_output(file)
    #     http.start
    #     http.get('/nosuch/1')
    #     http.finish
    #   end
    #   puts File.read('t.tmp')
    #
    # Output:
    #
    #   opening connection to jsonplaceholder.typicode.com:80...
    #   opened
    #   <- "GET /nosuch/1 HTTP/1.1\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: jsonplaceholder.typicode.com\r\n\r\n"
    #   -> "HTTP/1.1 404 Not Found\r\n"
    #   -> "Date: Mon, 12 Dec 2022 21:14:11 GMT\r\n"
    #   -> "Content-Type: application/json; charset=utf-8\r\n"
    #   -> "Content-Length: 2\r\n"
    #   -> "Connection: keep-alive\r\n"
    #   -> "X-Powered-By: Express\r\n"
    #   -> "X-Ratelimit-Limit: 1000\r\n"
    #   -> "X-Ratelimit-Remaining: 999\r\n"
    #   -> "X-Ratelimit-Reset: 1670879660\r\n"
    #   -> "Vary: Origin, Accept-Encoding\r\n"
    #   -> "Access-Control-Allow-Credentials: true\r\n"
    #   -> "Cache-Control: max-age=43200\r\n"
    #   -> "Pragma: no-cache\r\n"
    #   -> "Expires: -1\r\n"
    #   -> "X-Content-Type-Options: nosniff\r\n"
    #   -> "Etag: W/\"2-vyGp6PvFo4RvsFtPoIWeCReyIC8\"\r\n"
    #   -> "Via: 1.1 vegur\r\n"
    #   -> "CF-Cache-Status: MISS\r\n"
    #   -> "Server-Timing: cf-q-config;dur=1.3000000762986e-05\r\n"
    #   -> "Report-To: {\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=yOr40jo%2BwS1KHzhTlVpl54beJ5Wx2FcG4gGV0XVrh3X9OlR5q4drUn2dkt5DGO4GDcE%2BVXT7CNgJvGs%2BZleIyMu8CLieFiDIvOviOY3EhHg94m0ZNZgrEdpKD0S85S507l1vsEwEHkoTm%2Ff19SiO\"}],\"group\":\"cf-nel\",\"max_age\":604800}\r\n"
    #   -> "NEL: {\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}\r\n"
    #   -> "Server: cloudflare\r\n"
    #   -> "CF-RAY: 778977dc484ce591-DFW\r\n"
    #   -> "alt-svc: h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400\r\n"
    #   -> "\r\n"
    #   reading 2 bytes...
    #   -> "{}"
    #   read 2 bytes
    #   Conn keep-alive
    #
    def set_debug_output(output)
      warn 'Gem::Net::HTTP#set_debug_output called after HTTP started', uplevel: 1 if started?
      @debug_output = output
    end

    # Returns the string host name or host IP given as argument +address+ in ::new.
    attr_reader :address

    # Returns the integer port number given as argument +port+ in ::new.
    attr_reader :port

    # Sets or returns the string local host used to establish the connection;
    # initially +nil+.
    attr_accessor :local_host

    # Sets or returns the integer local port used to establish the connection;
    # initially +nil+.
    attr_accessor :local_port

    # Returns the encoding to use for the response body;
    # see #response_body_encoding=.
    attr_reader :response_body_encoding

    # Sets the encoding to be used for the response body;
    # returns the encoding.
    #
    # The given +value+ may be:
    #
    # - An Encoding object.
    # - The name of an encoding.
    # - An alias for an encoding name.
    #
    # See {Encoding}[rdoc-ref:Encoding].
    #
    # Examples:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.response_body_encoding = Encoding::US_ASCII # => #<Encoding:US-ASCII>
    #   http.response_body_encoding = 'US-ASCII'         # => "US-ASCII"
    #   http.response_body_encoding = 'ASCII'            # => "ASCII"
    #
    def response_body_encoding=(value)
      value = Encoding.find(value) if value.is_a?(String)
      @response_body_encoding = value
    end

    # Sets whether to determine the proxy from environment variable
    # '<tt>ENV['http_proxy']</tt>';
    # see {Proxy Using ENV['http_proxy']}[rdoc-ref:Gem::Net::HTTP@Proxy+Using+-27ENV-5B-27http_proxy-27-5D-27].
    attr_writer :proxy_from_env

    # Sets the proxy address;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    attr_writer :proxy_address

    # Sets the proxy port;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    attr_writer :proxy_port

    # Sets the proxy user;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    attr_writer :proxy_user

    # Sets the proxy password;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    attr_writer :proxy_pass
    attr_writer :proxy_use_ssl

    # Returns the IP address for the connection.
    #
    # If the session has not been started,
    # returns the value set by #ipaddr=,
    # or +nil+ if it has not been set:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.ipaddr # => nil
    #   http.ipaddr = '172.67.155.76'
    #   http.ipaddr # => "172.67.155.76"
    #
    # If the session has been started,
    # returns the IP address from the socket:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.start
    #   http.ipaddr # => "172.67.155.76"
    #   http.finish
    #
    def ipaddr
      started? ?  @socket.io.peeraddr[3] : @ipaddr
    end

    # Sets the IP address for the connection:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.ipaddr # => nil
    #   http.ipaddr = '172.67.155.76'
    #   http.ipaddr # => "172.67.155.76"
    #
    # The IP address may not be set if the session has been started.
    def ipaddr=(addr)
      raise IOError, "ipaddr value changed, but session already started" if started?
      @ipaddr = addr
    end

    # Sets or returns the numeric (\Integer or \Float) number of seconds
    # to wait for a connection to open;
    # initially 60.
    # If the connection is not made in the given interval,
    # an exception is raised.
    attr_accessor :open_timeout

    # Returns the numeric (\Integer or \Float) number of seconds
    # to wait for one block to be read (via one read(2) call);
    # see #read_timeout=.
    attr_reader :read_timeout

    # Returns the numeric (\Integer or \Float) number of seconds
    # to wait for one block to be written (via one write(2) call);
    # see #write_timeout=.
    attr_reader :write_timeout

    # Sets the maximum number of times to retry an idempotent request in case of
    # \Gem::Net::ReadTimeout, IOError, EOFError, Errno::ECONNRESET,
    # Errno::ECONNABORTED, Errno::EPIPE, OpenSSL::SSL::SSLError,
    # Gem::Timeout::Error.
    # The initial value is 1.
    #
    # Argument +retries+ must be a non-negative numeric value:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.max_retries = 2   # => 2
    #   http.max_retries       # => 2
    #
    def max_retries=(retries)
      retries = retries.to_int
      if retries < 0
        raise ArgumentError, 'max_retries should be non-negative integer number'
      end
      @max_retries = retries
    end

    # Returns the maximum number of times to retry an idempotent request;
    # see #max_retries=.
    attr_reader :max_retries

    # Sets the read timeout, in seconds, for +self+ to integer +sec+;
    # the initial value is 60.
    #
    # Argument +sec+ must be a non-negative numeric value:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.read_timeout # => 60
    #   http.get('/todos/1') # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #   http.read_timeout = 0
    #   http.get('/todos/1') # Raises Gem::Net::ReadTimeout.
    #
    def read_timeout=(sec)
      @socket.read_timeout = sec if @socket
      @read_timeout = sec
    end

    # Sets the write timeout, in seconds, for +self+ to integer +sec+;
    # the initial value is 60.
    #
    # Argument +sec+ must be a non-negative numeric value:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   body = 'bar' * 200000
    #   data = <<EOF
    #   {"title": "foo", "body": "#{body}", "userId": "1"}
    #   EOF
    #   headers = {'content-type': 'application/json'}
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.write_timeout # => 60
    #   http.post(_uri.path, data, headers)
    #   # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #   http.write_timeout = 0
    #   http.post(_uri.path, data, headers) # Raises Gem::Net::WriteTimeout.
    #
    def write_timeout=(sec)
      @socket.write_timeout = sec if @socket
      @write_timeout = sec
    end

    # Returns the continue timeout value;
    # see continue_timeout=.
    attr_reader :continue_timeout

    # Sets the continue timeout value,
    # which is the number of seconds to wait for an expected 100 Continue response.
    # If the \HTTP object does not receive a response in this many seconds
    # it sends the request body.
    def continue_timeout=(sec)
      @socket.continue_timeout = sec if @socket
      @continue_timeout = sec
    end

    # Sets or returns the numeric (\Integer or \Float) number of seconds
    # to keep the connection open after a request is sent;
    # initially 2.
    # If a new request is made during the given interval,
    # the still-open connection is used;
    # otherwise the connection will have been closed
    # and a new connection is opened.
    attr_accessor :keep_alive_timeout

    # Sets or returns whether to ignore end-of-file when reading a response body
    # with <tt>Content-Length</tt> headers;
    # initially +true+.
    attr_accessor :ignore_eof

    # Returns +true+ if the \HTTP session has been started:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.started? # => false
    #   http.start
    #   http.started? # => true
    #   http.finish # => nil
    #   http.started? # => false
    #
    #   Gem::Net::HTTP.start(hostname) do |http|
    #     http.started?
    #   end # => true
    #   http.started? # => false
    #
    def started?
      @started
    end

    alias active? started?   #:nodoc: obsolete

    # Sets or returns whether to close the connection when the response is empty;
    # initially +false+.
    attr_accessor :close_on_empty_response

    # Returns +true+ if +self+ uses SSL, +false+ otherwise.
    # See Gem::Net::HTTP#use_ssl=.
    def use_ssl?
      @use_ssl
    end

    # Sets whether a new session is to use
    # {Transport Layer Security}[https://en.wikipedia.org/wiki/Transport_Layer_Security]:
    #
    # Raises IOError if attempting to change during a session.
    #
    # Raises OpenSSL::SSL::SSLError if the port is not an HTTPS port.
    def use_ssl=(flag)
      flag = flag ? true : false
      if started? and @use_ssl != flag
        raise IOError, "use_ssl value changed, but session already started"
      end
      @use_ssl = flag
    end

    SSL_ATTRIBUTES = [
      :ca_file,
      :ca_path,
      :cert,
      :cert_store,
      :ciphers,
      :extra_chain_cert,
      :key,
      :ssl_timeout,
      :ssl_version,
      :min_version,
      :max_version,
      :verify_callback,
      :verify_depth,
      :verify_mode,
      :verify_hostname,
    ] # :nodoc:

    SSL_IVNAMES = SSL_ATTRIBUTES.map { |a| "@#{a}".to_sym } # :nodoc:

    # Sets or returns the path to a CA certification file in PEM format.
    attr_accessor :ca_file

    # Sets or returns the path of to CA directory
    # containing certification files in PEM format.
    attr_accessor :ca_path

    # Sets or returns the OpenSSL::X509::Certificate object
    # to be used for client certification.
    attr_accessor :cert

    # Sets or returns the X509::Store to be used for verifying peer certificate.
    attr_accessor :cert_store

    # Sets or returns the available SSL ciphers.
    # See {OpenSSL::SSL::SSLContext#ciphers=}[rdoc-ref:OpenSSL::SSL::SSLContext#ciphers-3D].
    attr_accessor :ciphers

    # Sets or returns the extra X509 certificates to be added to the certificate chain.
    # See {OpenSSL::SSL::SSLContext#add_certificate}[rdoc-ref:OpenSSL::SSL::SSLContext#add_certificate].
    attr_accessor :extra_chain_cert

    # Sets or returns the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
    attr_accessor :key

    # Sets or returns the SSL timeout seconds.
    attr_accessor :ssl_timeout

    # Sets or returns the SSL version.
    # See {OpenSSL::SSL::SSLContext#ssl_version=}[rdoc-ref:OpenSSL::SSL::SSLContext#ssl_version-3D].
    attr_accessor :ssl_version

    # Sets or returns the minimum SSL version.
    # See {OpenSSL::SSL::SSLContext#min_version=}[rdoc-ref:OpenSSL::SSL::SSLContext#min_version-3D].
    attr_accessor :min_version

    # Sets or returns the maximum SSL version.
    # See {OpenSSL::SSL::SSLContext#max_version=}[rdoc-ref:OpenSSL::SSL::SSLContext#max_version-3D].
    attr_accessor :max_version

    # Sets or returns the callback for the server certification verification.
    attr_accessor :verify_callback

    # Sets or returns the maximum depth for the certificate chain verification.
    attr_accessor :verify_depth

    # Sets or returns the flags for server the certification verification
    # at the beginning of the SSL/TLS session.
    # OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER are acceptable.
    attr_accessor :verify_mode

    # Sets or returns whether to verify that the server certificate is valid
    # for the hostname.
    # See {OpenSSL::SSL::SSLContext#verify_hostname=}[rdoc-ref:OpenSSL::SSL::SSLContext#attribute-i-verify_mode].
    attr_accessor :verify_hostname

    # Returns the X509 certificate chain (an array of strings)
    # for the session's socket peer,
    # or +nil+ if none.
    def peer_cert
      if not use_ssl? or not @socket
        return nil
      end
      @socket.io.peer_cert
    end

    # Starts an \HTTP session.
    #
    # Without a block, returns +self+:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   # => #<Gem::Net::HTTP jsonplaceholder.typicode.com:80 open=false>
    #   http.start
    #   # => #<Gem::Net::HTTP jsonplaceholder.typicode.com:80 open=true>
    #   http.started? # => true
    #   http.finish
    #
    # With a block, calls the block with +self+,
    # finishes the session when the block exits,
    # and returns the block's value:
    #
    #   http.start do |http|
    #     http
    #   end
    #   # => #<Gem::Net::HTTP jsonplaceholder.typicode.com:80 open=false>
    #   http.started? # => false
    #
    def start  # :yield: http
      raise IOError, 'HTTP session already opened' if @started
      if block_given?
        begin
          do_start
          return yield(self)
        ensure
          do_finish
        end
      end
      do_start
      self
    end

    def do_start
      connect
      @started = true
    end
    private :do_start

    def connect
      if use_ssl?
        # reference early to load OpenSSL before connecting,
        # as OpenSSL may take time to load.
        @ssl_context = OpenSSL::SSL::SSLContext.new
      end

      if proxy? then
        conn_addr = proxy_address
        conn_port = proxy_port
      else
        conn_addr = conn_address
        conn_port = port
      end

      debug "opening connection to #{conn_addr}:#{conn_port}..."
      s = Gem::Timeout.timeout(@open_timeout, Gem::Net::OpenTimeout) {
        begin
          TCPSocket.open(conn_addr, conn_port, @local_host, @local_port)
        rescue => e
          raise e, "Failed to open TCP connection to " +
            "#{conn_addr}:#{conn_port} (#{e.message})"
        end
      }
      s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
      debug "opened"
      if use_ssl?
        if proxy?
          if @proxy_use_ssl
            proxy_sock = OpenSSL::SSL::SSLSocket.new(s)
            ssl_socket_connect(proxy_sock, @open_timeout)
          else
            proxy_sock = s
          end
          proxy_sock = BufferedIO.new(proxy_sock, read_timeout: @read_timeout,
                                      write_timeout: @write_timeout,
                                      continue_timeout: @continue_timeout,
                                      debug_output: @debug_output)
          buf = +"CONNECT #{conn_address}:#{@port} HTTP/#{HTTPVersion}\r\n" \
            "Host: #{@address}:#{@port}\r\n"
          if proxy_user
            credential = ["#{proxy_user}:#{proxy_pass}"].pack('m0')
            buf << "Proxy-Authorization: Basic #{credential}\r\n"
          end
          buf << "\r\n"
          proxy_sock.write(buf)
          HTTPResponse.read_new(proxy_sock).value
          # assuming nothing left in buffers after successful CONNECT response
        end

        ssl_parameters = Hash.new
        iv_list = instance_variables
        SSL_IVNAMES.each_with_index do |ivname, i|
          if iv_list.include?(ivname)
            value = instance_variable_get(ivname)
            unless value.nil?
              ssl_parameters[SSL_ATTRIBUTES[i]] = value
            end
          end
        end
        @ssl_context.set_params(ssl_parameters)
        unless @ssl_context.session_cache_mode.nil? # a dummy method on JRuby
          @ssl_context.session_cache_mode =
              OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT |
                  OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_STORE
        end
        if @ssl_context.respond_to?(:session_new_cb) # not implemented under JRuby
          @ssl_context.session_new_cb = proc {|sock, sess| @ssl_session = sess }
        end

        # Still do the post_connection_check below even if connecting
        # to IP address
        verify_hostname = @ssl_context.verify_hostname

        # Server Name Indication (SNI) RFC 3546/6066
        case @address
        when Gem::Resolv::IPv4::Regex, Gem::Resolv::IPv6::Regex
          # don't set SNI, as IP addresses in SNI is not valid
          # per RFC 6066, section 3.

          # Avoid openssl warning
          @ssl_context.verify_hostname = false
        else
          ssl_host_address = @address
        end

        debug "starting SSL for #{conn_addr}:#{conn_port}..."
        s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context)
        s.sync_close = true
        s.hostname = ssl_host_address if s.respond_to?(:hostname=) && ssl_host_address

        if @ssl_session and
           Process.clock_gettime(Process::CLOCK_REALTIME) < @ssl_session.time.to_f + @ssl_session.timeout
          s.session = @ssl_session
        end
        ssl_socket_connect(s, @open_timeout)
        if (@ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE) && verify_hostname
          s.post_connection_check(@address)
        end
        debug "SSL established, protocol: #{s.ssl_version}, cipher: #{s.cipher[0]}"
      end
      @socket = BufferedIO.new(s, read_timeout: @read_timeout,
                               write_timeout: @write_timeout,
                               continue_timeout: @continue_timeout,
                               debug_output: @debug_output)
      @last_communicated = nil
      on_connect
    rescue => exception
      if s
        debug "Conn close because of connect error #{exception}"
        s.close
      end
      raise
    end
    private :connect

    def on_connect
    end
    private :on_connect

    # Finishes the \HTTP session:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.start
    #   http.started? # => true
    #   http.finish   # => nil
    #   http.started? # => false
    #
    # Raises IOError if not in a session.
    def finish
      raise IOError, 'HTTP session not yet started' unless started?
      do_finish
    end

    def do_finish
      @started = false
      @socket.close if @socket
      @socket = nil
    end
    private :do_finish

    #
    # proxy
    #

    public

    # no proxy
    @is_proxy_class = false
    @proxy_from_env = false
    @proxy_addr = nil
    @proxy_port = nil
    @proxy_user = nil
    @proxy_pass = nil
    @proxy_use_ssl = nil

    # Creates an \HTTP proxy class which behaves like \Gem::Net::HTTP, but
    # performs all access via the specified proxy.
    #
    # This class is obsolete.  You may pass these same parameters directly to
    # \Gem::Net::HTTP.new.  See Gem::Net::HTTP.new for details of the arguments.
    def HTTP.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_use_ssl = nil) #:nodoc:
      return self unless p_addr

      Class.new(self) {
        @is_proxy_class = true

        if p_addr == :ENV then
          @proxy_from_env = true
          @proxy_address = nil
          @proxy_port    = nil
        else
          @proxy_from_env = false
          @proxy_address = p_addr
          @proxy_port    = p_port || default_port
        end

        @proxy_user = p_user
        @proxy_pass = p_pass
        @proxy_use_ssl = p_use_ssl
      }
    end

    class << HTTP
      # Returns true if self is a class which was created by HTTP::Proxy.
      def proxy_class?
        defined?(@is_proxy_class) ? @is_proxy_class : false
      end

      # Returns the address of the proxy host, or +nil+ if none;
      # see Gem::Net::HTTP@Proxy+Server.
      attr_reader :proxy_address

      # Returns the port number of the proxy host, or +nil+ if none;
      # see Gem::Net::HTTP@Proxy+Server.
      attr_reader :proxy_port

      # Returns the user name for accessing the proxy, or +nil+ if none;
      # see Gem::Net::HTTP@Proxy+Server.
      attr_reader :proxy_user

      # Returns the password for accessing the proxy, or +nil+ if none;
      # see Gem::Net::HTTP@Proxy+Server.
      attr_reader :proxy_pass

      # Use SSL when talking to the proxy. If Gem::Net::HTTP does not use a proxy, nil.
      attr_reader :proxy_use_ssl
    end

    # Returns +true+ if a proxy server is defined, +false+ otherwise;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    def proxy?
      !!(@proxy_from_env ? proxy_uri : @proxy_address)
    end

    # Returns +true+ if the proxy server is defined in the environment,
    # +false+ otherwise;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    def proxy_from_env?
      @proxy_from_env
    end

    # The proxy URI determined from the environment for this connection.
    def proxy_uri # :nodoc:
      return if @proxy_uri == false
      @proxy_uri ||= Gem::URI::HTTP.new(
        "http", nil, address, port, nil, nil, nil, nil, nil
      ).find_proxy || false
      @proxy_uri || nil
    end

    # Returns the address of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    def proxy_address
      if @proxy_from_env then
        proxy_uri&.hostname
      else
        @proxy_address
      end
    end

    # Returns the port number of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    def proxy_port
      if @proxy_from_env then
        proxy_uri&.port
      else
        @proxy_port
      end
    end

    # Returns the user name of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    def proxy_user
      if @proxy_from_env
        user = proxy_uri&.user
        unescape(user) if user
      else
        @proxy_user
      end
    end

    # Returns the password of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Gem::Net::HTTP@Proxy+Server].
    def proxy_pass
      if @proxy_from_env
        pass = proxy_uri&.password
        unescape(pass) if pass
      else
        @proxy_pass
      end
    end

    alias proxyaddr proxy_address   #:nodoc: obsolete
    alias proxyport proxy_port      #:nodoc: obsolete

    private

    def unescape(value)
      require 'cgi/util'
      CGI.unescape(value)
    end

    # without proxy, obsolete

    def conn_address # :nodoc:
      @ipaddr || address()
    end

    def conn_port # :nodoc:
      port()
    end

    def edit_path(path)
      if proxy?
        if path.start_with?("ftp://") || use_ssl?
          path
        else
          "http://#{addr_port}#{path}"
        end
      else
        path
      end
    end

    #
    # HTTP operations
    #

    public

    # :call-seq:
    #    get(path, initheader = nil) {|res| ... }
    #
    # Sends a GET request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Get object
    # created from string +path+ and initial headers hash +initheader+.
    #
    # With a block given, calls the block with the response body:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.get('/todos/1') do |res|
    #     p res
    #   end # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   "{\n  \"userId\": 1,\n  \"id\": 1,\n  \"title\": \"delectus aut autem\",\n  \"completed\": false\n}"
    #
    # With no block given, simply returns the response object:
    #
    #   http.get('/') # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    # Related:
    #
    # - Gem::Net::HTTP::Get: request class for \HTTP method GET.
    # - Gem::Net::HTTP.get: sends GET request, returns response body.
    #
    def get(path, initheader = nil, dest = nil, &block) # :yield: +body_segment+
      res = nil

      request(Get.new(path, initheader)) {|r|
        r.read_body dest, &block
        res = r
      }
      res
    end

    # Sends a HEAD request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Head object
    # created from string +path+ and initial headers hash +initheader+:
    #
    #   res = http.head('/todos/1') # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #   res.body                    # => nil
    #   res.to_hash.take(3)
    #   # =>
    #   [["date", ["Wed, 15 Feb 2023 15:25:42 GMT"]],
    #    ["content-type", ["application/json; charset=utf-8"]],
    #    ["connection", ["close"]]]
    #
    def head(path, initheader = nil)
      request(Head.new(path, initheader))
    end

    # :call-seq:
    #    post(path, data, initheader = nil) {|res| ... }
    #
    # Sends a POST request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Post object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    # With a block given, calls the block with the response body:
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.post('/todos', data) do |res|
    #     p res
    #   end # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #
    # Output:
    #
    #   "{\n  \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\",\n  \"id\": 201\n}"
    #
    # With no block given, simply returns the response object:
    #
    #   http.post('/todos', data) # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #
    # Related:
    #
    # - Gem::Net::HTTP::Post: request class for \HTTP method POST.
    # - Gem::Net::HTTP.post: sends POST request, returns response body.
    #
    def post(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+
      send_entity(path, data, initheader, dest, Post, &block)
    end

    # :call-seq:
    #    patch(path, data, initheader = nil) {|res| ... }
    #
    # Sends a PATCH request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Patch object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    # With a block given, calls the block with the response body:
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.patch('/todos/1', data) do |res|
    #     p res
    #   end # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   "{\n  \"userId\": 1,\n  \"id\": 1,\n  \"title\": \"delectus aut autem\",\n  \"completed\": false,\n  \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\"\n}"
    #
    # With no block given, simply returns the response object:
    #
    #   http.patch('/todos/1', data) # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #
    def patch(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+
      send_entity(path, data, initheader, dest, Patch, &block)
    end

    # Sends a PUT request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Put object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.put('/todos/1', data) # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    # Related:
    #
    # - Gem::Net::HTTP::Put: request class for \HTTP method PUT.
    # - Gem::Net::HTTP.put: sends PUT request, returns response body.
    #
    def put(path, data, initheader = nil)
      request(Put.new(path, initheader), data)
    end

    # Sends a PROPPATCH request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Proppatch object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.proppatch('/todos/1', data)
    #
    def proppatch(path, body, initheader = nil)
      request(Proppatch.new(path, initheader), body)
    end

    # Sends a LOCK request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Lock object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.lock('/todos/1', data)
    #
    def lock(path, body, initheader = nil)
      request(Lock.new(path, initheader), body)
    end

    # Sends an UNLOCK request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Unlock object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.unlock('/todos/1', data)
    #
    def unlock(path, body, initheader = nil)
      request(Unlock.new(path, initheader), body)
    end

    # Sends an Options request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Options object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.options('/')
    #
    def options(path, initheader = nil)
      request(Options.new(path, initheader))
    end

    # Sends a PROPFIND request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Propfind object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.propfind('/todos/1', data)
    #
    def propfind(path, body = nil, initheader = {'Depth' => '0'})
      request(Propfind.new(path, initheader), body)
    end

    # Sends a DELETE request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Delete object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.delete('/todos/1')
    #
    def delete(path, initheader = {'Depth' => 'Infinity'})
      request(Delete.new(path, initheader))
    end

    # Sends a MOVE request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Move object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.move('/todos/1')
    #
    def move(path, initheader = nil)
      request(Move.new(path, initheader))
    end

    # Sends a COPY request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Copy object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.copy('/todos/1')
    #
    def copy(path, initheader = nil)
      request(Copy.new(path, initheader))
    end

    # Sends a MKCOL request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Mkcol object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http.mkcol('/todos/1', data)
    #   http = Gem::Net::HTTP.new(hostname)
    #
    def mkcol(path, body = nil, initheader = nil)
      request(Mkcol.new(path, initheader), body)
    end

    # Sends a TRACE request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Trace object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.trace('/todos/1')
    #
    def trace(path, initheader = nil)
      request(Trace.new(path, initheader))
    end

    # Sends a GET request to the server;
    # forms the response into a Gem::Net::HTTPResponse object.
    #
    # The request is based on the Gem::Net::HTTP::Get object
    # created from string +path+ and initial headers hash +initheader+.
    #
    # With no block given, returns the response object:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.request_get('/todos') # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    # With a block given, calls the block with the response object
    # and returns the response object:
    #
    #   http.request_get('/todos') do |res|
    #     p res
    #   end # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   #<Gem::Net::HTTPOK 200 OK readbody=false>
    #
    def request_get(path, initheader = nil, &block) # :yield: +response+
      request(Get.new(path, initheader), &block)
    end

    # Sends a HEAD request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Head object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.head('/todos/1') # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    def request_head(path, initheader = nil, &block)
      request(Head.new(path, initheader), &block)
    end

    # Sends a POST request to the server;
    # forms the response into a Gem::Net::HTTPResponse object.
    #
    # The request is based on the Gem::Net::HTTP::Post object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    # With no block given, returns the response object:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.post('/todos', 'xyzzy')
    #   # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #
    # With a block given, calls the block with the response body
    # and returns the response object:
    #
    #   http.post('/todos', 'xyzzy') do |res|
    #     p res
    #   end # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #
    # Output:
    #
    #   "{\n  \"xyzzy\": \"\",\n  \"id\": 201\n}"
    #
    def request_post(path, data, initheader = nil, &block) # :yield: +response+
      request Post.new(path, initheader), data, &block
    end

    # Sends a PUT request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTP::Put object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.put('/todos/1', 'xyzzy')
    #   # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    def request_put(path, data, initheader = nil, &block)   #:nodoc:
      request Put.new(path, initheader), data, &block
    end

    alias get2   request_get    #:nodoc: obsolete
    alias head2  request_head   #:nodoc: obsolete
    alias post2  request_post   #:nodoc: obsolete
    alias put2   request_put    #:nodoc: obsolete

    # Sends an \HTTP request to the server;
    # returns an instance of a subclass of Gem::Net::HTTPResponse.
    #
    # The request is based on the Gem::Net::HTTPRequest object
    # created from string +path+, string +data+, and initial headers hash +header+.
    # That object is an instance of the
    # {subclass of Gem::Net::HTTPRequest}[rdoc-ref:Gem::Net::HTTPRequest@Request+Subclasses],
    # that corresponds to the given uppercase string +name+,
    # which must be
    # an {HTTP request method}[https://en.wikipedia.org/wiki/HTTP#Request_methods]
    # or a {WebDAV request method}[https://en.wikipedia.org/wiki/WebDAV#Implementation].
    #
    # Examples:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #   http.send_request('GET', '/todos/1')
    #   # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #   http.send_request('POST', '/todos', 'xyzzy')
    #   # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #
    def send_request(name, path, data = nil, header = nil)
      has_response_body = name != 'HEAD'
      r = HTTPGenericRequest.new(name,(data ? true : false),has_response_body,path,header)
      request r, data
    end

    # Sends the given request +req+ to the server;
    # forms the response into a Gem::Net::HTTPResponse object.
    #
    # The given +req+ must be an instance of a
    # {subclass of Gem::Net::HTTPRequest}[rdoc-ref:Gem::Net::HTTPRequest@Request+Subclasses].
    # Argument +body+ should be given only if needed for the request.
    #
    # With no block given, returns the response object:
    #
    #   http = Gem::Net::HTTP.new(hostname)
    #
    #   req = Gem::Net::HTTP::Get.new('/todos/1')
    #   http.request(req)
    #   # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    #   req = Gem::Net::HTTP::Post.new('/todos')
    #   http.request(req, 'xyzzy')
    #   # => #<Gem::Net::HTTPCreated 201 Created readbody=true>
    #
    # With a block given, calls the block with the response and returns the response:
    #
    #   req = Gem::Net::HTTP::Get.new('/todos/1')
    #   http.request(req) do |res|
    #     p res
    #   end # => #<Gem::Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   #<Gem::Net::HTTPOK 200 OK readbody=false>
    #
    def request(req, body = nil, &block)  # :yield: +response+
      unless started?
        start {
          req['connection'] ||= 'close'
          return request(req, body, &block)
        }
      end
      if proxy_user()
        req.proxy_basic_auth proxy_user(), proxy_pass() unless use_ssl?
      end
      req.set_body_internal body
      res = transport_request(req, &block)
      if sspi_auth?(res)
        sspi_auth(req)
        res = transport_request(req, &block)
      end
      res
    end

    private

    # Executes a request which uses a representation
    # and returns its body.
    def send_entity(path, data, initheader, dest, type, &block)
      res = nil
      request(type.new(path, initheader), data) {|r|
        r.read_body dest, &block
        res = r
      }
      res
    end

    IDEMPOTENT_METHODS_ = %w/GET HEAD PUT DELETE OPTIONS TRACE/ # :nodoc:

    def transport_request(req)
      count = 0
      begin
        begin_transport req
        res = catch(:response) {
          begin
            req.exec @socket, @curr_http_version, edit_path(req.path)
          rescue Errno::EPIPE
            # Failure when writing full request, but we can probably
            # still read the received response.
          end

          begin
            res = HTTPResponse.read_new(@socket)
            res.decode_content = req.decode_content
            res.body_encoding = @response_body_encoding
            res.ignore_eof = @ignore_eof
          end while res.kind_of?(HTTPInformation)

          res.uri = req.uri

          res
        }
        res.reading_body(@socket, req.response_body_permitted?) {
          if block_given?
            count = max_retries # Don't restart in the middle of a download
            yield res
          end
        }
      rescue Gem::Net::OpenTimeout
        raise
      rescue Gem::Net::ReadTimeout, IOError, EOFError,
             Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, Errno::ETIMEDOUT,
             # avoid a dependency on OpenSSL
             defined?(OpenSSL::SSL) ? OpenSSL::SSL::SSLError : IOError,
             Gem::Timeout::Error => exception
        if count < max_retries && IDEMPOTENT_METHODS_.include?(req.method)
          count += 1
          @socket.close if @socket
          debug "Conn close because of error #{exception}, and retry"
          retry
        end
        debug "Conn close because of error #{exception}"
        @socket.close if @socket
        raise
      end

      end_transport req, res
      res
    rescue => exception
      debug "Conn close because of error #{exception}"
      @socket.close if @socket
      raise exception
    end

    def begin_transport(req)
      if @socket.closed?
        connect
      elsif @last_communicated
        if @last_communicated + @keep_alive_timeout < Process.clock_gettime(Process::CLOCK_MONOTONIC)
          debug 'Conn close because of keep_alive_timeout'
          @socket.close
          connect
        elsif @socket.io.to_io.wait_readable(0) && @socket.eof?
          debug "Conn close because of EOF"
          @socket.close
          connect
        end
      end

      if not req.response_body_permitted? and @close_on_empty_response
        req['connection'] ||= 'close'
      end

      req.update_uri address, port, use_ssl?
      req['host'] ||= addr_port()
    end

    def end_transport(req, res)
      @curr_http_version = res.http_version
      @last_communicated = nil
      if @socket.closed?
        debug 'Conn socket closed'
      elsif not res.body and @close_on_empty_response
        debug 'Conn close'
        @socket.close
      elsif keep_alive?(req, res)
        debug 'Conn keep-alive'
        @last_communicated = Process.clock_gettime(Process::CLOCK_MONOTONIC)
      else
        debug 'Conn close'
        @socket.close
      end
    end

    def keep_alive?(req, res)
      return false if req.connection_close?
      if @curr_http_version <= '1.0'
        res.connection_keep_alive?
      else   # HTTP/1.1 or later
        not res.connection_close?
      end
    end

    def sspi_auth?(res)
      return false unless @sspi_enabled
      if res.kind_of?(HTTPProxyAuthenticationRequired) and
          proxy? and res["Proxy-Authenticate"].include?("Negotiate")
        begin
          require 'win32/sspi'
          true
        rescue LoadError
          false
        end
      else
        false
      end
    end

    def sspi_auth(req)
      n = Win32::SSPI::NegotiateAuth.new
      req["Proxy-Authorization"] = "Negotiate #{n.get_initial_token}"
      # Some versions of ISA will close the connection if this isn't present.
      req["Connection"] = "Keep-Alive"
      req["Proxy-Connection"] = "Keep-Alive"
      res = transport_request(req)
      authphrase = res["Proxy-Authenticate"]  or return res
      req["Proxy-Authorization"] = "Negotiate #{n.complete_authentication(authphrase)}"
    rescue => err
      raise HTTPAuthenticationError.new('HTTP authentication failed', err)
    end

    #
    # utils
    #

    private

    def addr_port
      addr = address
      addr = "[#{addr}]" if addr.include?(":")
      default_port = use_ssl? ? HTTP.https_default_port : HTTP.http_default_port
      default_port == port ? addr : "#{addr}:#{port}"
    end

    # Adds a message to debugging output
    def debug(msg)
      return unless @debug_output
      @debug_output << msg
      @debug_output << "\n"
    end

    alias_method :D, :debug
  end

  # for backward compatibility until Ruby 3.5
  # https://bugs.ruby-lang.org/issues/20900
  # https://github.com/bblimke/webmock/pull/1081
  HTTPSession = HTTP
  deprecate_constant :HTTPSession
end

require_relative 'http/exceptions'

require_relative 'http/header'

require_relative 'http/generic_request'
require_relative 'http/request'
require_relative 'http/requests'

require_relative 'http/response'
require_relative 'http/responses'

require_relative 'http/proxy_delta'
PK)J[^�ژY.Y.?share/rubygems/rubygems/vendor/net-protocol/lib/net/protocol.rbnu�[���# frozen_string_literal: true
#
# = net/protocol.rb
#
#--
# Copyright (c) 1999-2004 Yukihiro Matsumoto
# Copyright (c) 1999-2004 Minero Aoki
#
# written and maintained by Minero Aoki <aamine@loveruby.net>
#
# This program is free software. You can re-distribute and/or
# modify this program under the same terms as Ruby itself,
# Ruby Distribute License or GNU General Public License.
#
# $Id$
#++
#
# WARNING: This file is going to remove.
# Do not rely on the implementation written in this file.
#

require 'socket'
require_relative '../../../timeout/lib/timeout'
require 'io/wait'

module Gem::Net # :nodoc:

  class Protocol   #:nodoc: internal use only
    VERSION = "0.2.2"

    private
    def Protocol.protocol_param(name, val)
      module_eval(<<-End, __FILE__, __LINE__ + 1)
        def #{name}
          #{val}
        end
      End
    end

    def ssl_socket_connect(s, timeout)
      if timeout
        while true
          raise Gem::Net::OpenTimeout if timeout <= 0
          start = Process.clock_gettime Process::CLOCK_MONOTONIC
          # to_io is required because SSLSocket doesn't have wait_readable yet
          case s.connect_nonblock(exception: false)
          when :wait_readable; s.to_io.wait_readable(timeout)
          when :wait_writable; s.to_io.wait_writable(timeout)
          else; break
          end
          timeout -= Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
        end
      else
        s.connect
      end
    end
  end


  class ProtocolError          < StandardError; end
  class ProtoSyntaxError       < ProtocolError; end
  class ProtoFatalError        < ProtocolError; end
  class ProtoUnknownError      < ProtocolError; end
  class ProtoServerError       < ProtocolError; end
  class ProtoAuthError         < ProtocolError; end
  class ProtoCommandError      < ProtocolError; end
  class ProtoRetriableError    < ProtocolError; end
  ProtocRetryError = ProtoRetriableError

  ##
  # OpenTimeout, a subclass of Gem::Timeout::Error, is raised if a connection cannot
  # be created within the open_timeout.

  class OpenTimeout            < Gem::Timeout::Error; end

  ##
  # ReadTimeout, a subclass of Gem::Timeout::Error, is raised if a chunk of the
  # response cannot be read within the read_timeout.

  class ReadTimeout < Gem::Timeout::Error
    def initialize(io = nil)
      @io = io
    end
    attr_reader :io

    def message
      msg = super
      if @io
        msg = "#{msg} with #{@io.inspect}"
      end
      msg
    end
  end

  ##
  # WriteTimeout, a subclass of Gem::Timeout::Error, is raised if a chunk of the
  # response cannot be written within the write_timeout.  Not raised on Windows.

  class WriteTimeout < Gem::Timeout::Error
    def initialize(io = nil)
      @io = io
    end
    attr_reader :io

    def message
      msg = super
      if @io
        msg = "#{msg} with #{@io.inspect}"
      end
      msg
    end
  end


  class BufferedIO   #:nodoc: internal use only
    def initialize(io, read_timeout: 60, write_timeout: 60, continue_timeout: nil, debug_output: nil)
      @io = io
      @read_timeout = read_timeout
      @write_timeout = write_timeout
      @continue_timeout = continue_timeout
      @debug_output = debug_output
      @rbuf = ''.b
      @rbuf_empty = true
      @rbuf_offset = 0
    end

    attr_reader :io
    attr_accessor :read_timeout
    attr_accessor :write_timeout
    attr_accessor :continue_timeout
    attr_accessor :debug_output

    def inspect
      "#<#{self.class} io=#{@io}>"
    end

    def eof?
      @io.eof?
    end

    def closed?
      @io.closed?
    end

    def close
      @io.close
    end

    #
    # Read
    #

    public

    def read(len, dest = ''.b, ignore_eof = false)
      LOG "reading #{len} bytes..."
      read_bytes = 0
      begin
        while read_bytes + rbuf_size < len
          if s = rbuf_consume_all
            read_bytes += s.bytesize
            dest << s
          end
          rbuf_fill
        end
        s = rbuf_consume(len - read_bytes)
        read_bytes += s.bytesize
        dest << s
      rescue EOFError
        raise unless ignore_eof
      end
      LOG "read #{read_bytes} bytes"
      dest
    end

    def read_all(dest = ''.b)
      LOG 'reading all...'
      read_bytes = 0
      begin
        while true
          if s = rbuf_consume_all
            read_bytes += s.bytesize
            dest << s
          end
          rbuf_fill
        end
      rescue EOFError
        ;
      end
      LOG "read #{read_bytes} bytes"
      dest
    end

    def readuntil(terminator, ignore_eof = false)
      offset = @rbuf_offset
      begin
        until idx = @rbuf.index(terminator, offset)
          offset = @rbuf.bytesize
          rbuf_fill
        end
        return rbuf_consume(idx + terminator.bytesize - @rbuf_offset)
      rescue EOFError
        raise unless ignore_eof
        return rbuf_consume
      end
    end

    def readline
      readuntil("\n").chop
    end

    private

    BUFSIZE = 1024 * 16

    def rbuf_fill
      tmp = @rbuf_empty ? @rbuf : nil
      case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)
      when String
        @rbuf_empty = false
        if rv.equal?(tmp)
          @rbuf_offset = 0
        else
          @rbuf << rv
          rv.clear
        end
        return
      when :wait_readable
        (io = @io.to_io).wait_readable(@read_timeout) or raise Gem::Net::ReadTimeout.new(io)
        # continue looping
      when :wait_writable
        # OpenSSL::Buffering#read_nonblock may fail with IO::WaitWritable.
        # http://www.openssl.org/support/faq.html#PROG10
        (io = @io.to_io).wait_writable(@read_timeout) or raise Gem::Net::ReadTimeout.new(io)
        # continue looping
      when nil
        raise EOFError, 'end of file reached'
      end while true
    end

    def rbuf_flush
      if @rbuf_empty
        @rbuf.clear
        @rbuf_offset = 0
      end
      nil
    end

    def rbuf_size
      @rbuf.bytesize - @rbuf_offset
    end

    def rbuf_consume_all
      rbuf_consume if rbuf_size > 0
    end

    def rbuf_consume(len = nil)
      if @rbuf_offset == 0 && (len.nil? || len == @rbuf.bytesize)
        s = @rbuf
        @rbuf = ''.b
        @rbuf_offset = 0
        @rbuf_empty = true
      elsif len.nil?
        s = @rbuf.byteslice(@rbuf_offset..-1)
        @rbuf = ''.b
        @rbuf_offset = 0
        @rbuf_empty = true
      else
        s = @rbuf.byteslice(@rbuf_offset, len)
        @rbuf_offset += len
        @rbuf_empty = @rbuf_offset == @rbuf.bytesize
        rbuf_flush
      end

      @debug_output << %Q[-> #{s.dump}\n] if @debug_output
      s
    end

    #
    # Write
    #

    public

    def write(*strs)
      writing {
        write0(*strs)
      }
    end

    alias << write

    def writeline(str)
      writing {
        write0 str + "\r\n"
      }
    end

    private

    def writing
      @written_bytes = 0
      @debug_output << '<- ' if @debug_output
      yield
      @debug_output << "\n" if @debug_output
      bytes = @written_bytes
      @written_bytes = nil
      bytes
    end

    def write0(*strs)
      @debug_output << strs.map(&:dump).join if @debug_output
      orig_written_bytes = @written_bytes
      strs.each_with_index do |str, i|
        need_retry = true
        case len = @io.write_nonblock(str, exception: false)
        when Integer
          @written_bytes += len
          len -= str.bytesize
          if len == 0
            if strs.size == i+1
              return @written_bytes - orig_written_bytes
            else
              need_retry = false
              # next string
            end
          elsif len < 0
            str = str.byteslice(len, -len)
          else # len > 0
            need_retry = false
            # next string
          end
          # continue looping
        when :wait_writable
          (io = @io.to_io).wait_writable(@write_timeout) or raise Gem::Net::WriteTimeout.new(io)
          # continue looping
        end while need_retry
      end
    end

    #
    # Logging
    #

    private

    def LOG_off
      @save_debug_out = @debug_output
      @debug_output = nil
    end

    def LOG_on
      @debug_output = @save_debug_out
    end

    def LOG(msg)
      return unless @debug_output
      @debug_output << msg + "\n"
    end
  end


  class InternetMessageIO < BufferedIO   #:nodoc: internal use only
    def initialize(*, **)
      super
      @wbuf = nil
    end

    #
    # Read
    #

    def each_message_chunk
      LOG 'reading message...'
      LOG_off()
      read_bytes = 0
      while (line = readuntil("\r\n")) != ".\r\n"
        read_bytes += line.size
        yield line.delete_prefix('.')
      end
      LOG_on()
      LOG "read message (#{read_bytes} bytes)"
    end

    # *library private* (cannot handle 'break')
    def each_list_item
      while (str = readuntil("\r\n")) != ".\r\n"
        yield str.chop
      end
    end

    def write_message_0(src)
      prev = @written_bytes
      each_crlf_line(src) do |line|
        write0 dot_stuff(line)
      end
      @written_bytes - prev
    end

    #
    # Write
    #

    def write_message(src)
      LOG "writing message from #{src.class}"
      LOG_off()
      len = writing {
        using_each_crlf_line {
          write_message_0 src
        }
      }
      LOG_on()
      LOG "wrote #{len} bytes"
      len
    end

    def write_message_by_block(&block)
      LOG 'writing message from block'
      LOG_off()
      len = writing {
        using_each_crlf_line {
          begin
            block.call(WriteAdapter.new(self.method(:write_message_0)))
          rescue LocalJumpError
            # allow `break' from writer block
          end
        }
      }
      LOG_on()
      LOG "wrote #{len} bytes"
      len
    end

    private

    def dot_stuff(s)
      s.sub(/\A\./, '..')
    end

    def using_each_crlf_line
      @wbuf = ''.b
      yield
      if not @wbuf.empty?   # unterminated last line
        write0 dot_stuff(@wbuf.chomp) + "\r\n"
      elsif @written_bytes == 0   # empty src
        write0 "\r\n"
      end
      write0 ".\r\n"
      @wbuf = nil
    end

    def each_crlf_line(src)
      buffer_filling(@wbuf, src) do
        while line = @wbuf.slice!(/\A[^\r\n]*(?:\n|\r(?:\n|(?!\z)))/)
          yield line.chomp("\n") + "\r\n"
        end
      end
    end

    def buffer_filling(buf, src)
      case src
      when String    # for speeding up.
        0.step(src.size - 1, 1024) do |i|
          buf << src[i, 1024]
          yield
        end
      when File    # for speeding up.
        while s = src.read(1024)
          buf << s
          yield
        end
      else    # generic reader
        src.each do |str|
          buf << str
          yield if buf.size > 1024
        end
        yield unless buf.empty?
      end
    end
  end


  #
  # The writer adapter class
  #
  class WriteAdapter
    def initialize(writer)
      @writer = writer
    end

    def inspect
      "#<#{self.class} writer=#{@writer.inspect}>"
    end

    def write(str)
      @writer.call(str)
    end

    alias print write

    def <<(str)
      write str
      self
    end

    def puts(str = '')
      write str.chomp("\n") + "\n"
    end

    def printf(*args)
      write sprintf(*args)
    end
  end


  class ReadAdapter   #:nodoc: internal use only
    def initialize(block)
      @block = block
    end

    def inspect
      "#<#{self.class}>"
    end

    def <<(str)
      call_block(str, &@block) if @block
    end

    private

    # This method is needed because @block must be called by yield,
    # not Proc#call.  You can see difference when using `break' in
    # the block.
    def call_block(str)
      yield str
    end
  end


  module NetPrivate   #:nodoc: obsolete
    Socket = ::Gem::Net::InternetMessageIO
  end

end   # module Gem::Net
PK)J[,8�e��1share/rubygems/rubygems/bundler_version_finder.rbnu�[���# frozen_string_literal: true

module Gem::BundlerVersionFinder
  def self.bundler_version
    v = ENV["BUNDLER_VERSION"]

    v ||= bundle_update_bundler_version
    return if v == true

    v ||= lockfile_version
    return unless v

    Gem::Version.new(v)
  end

  def self.prioritize!(specs)
    exact_match_index = specs.find_index {|spec| spec.version == bundler_version }
    return unless exact_match_index

    specs.unshift(specs.delete_at(exact_match_index))
  end

  def self.bundle_update_bundler_version
    return unless ["bundle", "bundler"].include? File.basename($0)
    return unless "update".start_with?(ARGV.first || " ")
    bundler_version = nil
    update_index = nil
    ARGV.each_with_index do |a, i|
      if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
        bundler_version = a
      end
      next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
      bundler_version = $1 || true
      update_index = i
    end
    bundler_version
  end
  private_class_method :bundle_update_bundler_version

  def self.lockfile_version
    return unless contents = lockfile_contents
    regexp = /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
    return unless contents =~ regexp
    $1
  end
  private_class_method :lockfile_version

  def self.lockfile_contents
    gemfile = ENV["BUNDLE_GEMFILE"]
    gemfile = nil if gemfile&.empty?

    unless gemfile
      begin
        Gem::Util.traverse_parents(Dir.pwd) do |directory|
          next unless gemfile = Gem::GEM_DEP_FILES.find {|f| File.file?(f) }

          gemfile = File.join directory, gemfile
          break
        end
      rescue Errno::ENOENT
        return
      end
    end

    return unless gemfile

    lockfile = case gemfile
               when "gems.rb" then "gems.locked"
               else "#{gemfile}.lock"
    end

    return unless File.file?(lockfile)

    File.read(lockfile)
  end
  private_class_method :lockfile_contents
end
PK)J[���n�n$share/rubygems/rubygems/installer.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "installer_uninstaller_utils"
require_relative "exceptions"
require_relative "deprecate"
require_relative "package"
require_relative "ext"
require_relative "user_interaction"

##
# The installer installs the files contained in the .gem into the Gem.home.
#
# Gem::Installer does the work of putting files in all the right places on the
# filesystem including unpacking the gem into its gem dir, installing the
# gemspec in the specifications dir, storing the cached gem in the cache dir,
# and installing either wrappers or symlinks for executables.
#
# The installer invokes pre and post install hooks.  Hooks can be added either
# through a rubygems_plugin.rb file in an installed gem or via a
# rubygems/defaults/#{RUBY_ENGINE}.rb or rubygems/defaults/operating_system.rb
# file.  See Gem.pre_install and Gem.post_install for details.

class Gem::Installer
  extend Gem::Deprecate

  ##
  # Paths where env(1) might live.  Some systems are broken and have it in
  # /bin

  ENV_PATHS = %w[/usr/bin/env /bin/env].freeze

  ##
  # Deprecated in favor of Gem::Ext::BuildError

  ExtensionBuildError = Gem::Ext::BuildError # :nodoc:

  include Gem::UserInteraction

  include Gem::InstallerUninstallerUtils

  ##
  # The directory a gem's executables will be installed into

  attr_reader :bin_dir

  attr_reader :build_root # :nodoc:

  ##
  # The gem repository the gem will be installed into

  attr_reader :gem_home

  ##
  # The options passed when the Gem::Installer was instantiated.

  attr_reader :options

  ##
  # The gem package instance.

  attr_reader :package

  class << self
    #
    # Changes in rubygems to lazily loading `rubygems/command` (in order to
    # lazily load `optparse` as a side effect) affect bundler's custom installer
    # which uses `Gem::Command` without requiring it (up until bundler 2.2.29).
    # This hook is to compensate for that missing require.
    #
    # TODO: Remove when rubygems no longer supports running on bundler older
    # than 2.2.29.

    def inherited(klass)
      if klass.name == "Bundler::RubyGemsGemInstaller"
        require "rubygems/command"
      end

      super(klass)
    end

    ##
    # Overrides the executable format.
    #
    # This is a sprintf format with a "%s" which will be replaced with the
    # executable name.  It is based off the ruby executable name's difference
    # from "ruby".

    attr_writer :exec_format

    # Defaults to use Ruby's program prefix and suffix.
    def exec_format
      @exec_format ||= Gem.default_exec_format
    end
  end

  ##
  # Construct an installer object for the gem file located at +path+

  def self.at(path, options = {})
    security_policy = options[:security_policy]
    package = Gem::Package.new path, security_policy
    new package, options
  end

  class FakePackage
    attr_accessor :spec

    attr_accessor :dir_mode
    attr_accessor :prog_mode
    attr_accessor :data_mode

    def initialize(spec)
      @spec = spec
    end

    def extract_files(destination_dir, pattern = "*")
      FileUtils.mkdir_p destination_dir

      spec.files.each do |file|
        file = File.join destination_dir, file
        next if File.exist? file
        FileUtils.mkdir_p File.dirname(file)
        File.open file, "w" do |fp|
          fp.puts "# #{file}"
        end
      end
    end

    def copy_to(path)
    end
  end

  ##
  # Construct an installer object for an ephemeral gem (one where we don't
  # actually have a .gem file, just a spec)

  def self.for_spec(spec, options = {})
    # FIXME: we should have a real Package class for this
    new FakePackage.new(spec), options
  end

  ##
  # Constructs an Installer instance that will install the gem at +package+ which
  # can either be a path or an instance of Gem::Package.  +options+ is a Hash
  # with the following keys:
  #
  # :bin_dir:: Where to put a bin wrapper if needed.
  # :development:: Whether or not development dependencies should be installed.
  # :env_shebang:: Use /usr/bin/env in bin wrappers.
  # :force:: Overrides all version checks and security policy checks, except
  #          for a signed-gems-only policy.
  # :format_executable:: Format the executable the same as the Ruby executable.
  #                      If your Ruby is ruby18, foo_exec will be installed as
  #                      foo_exec18.
  # :ignore_dependencies:: Don't raise if a dependency is missing.
  # :install_dir:: The directory to install the gem into.
  # :security_policy:: Use the specified security policy.  See Gem::Security
  # :user_install:: Indicate that the gem should be unpacked into the users
  #                 personal gem directory.
  # :only_install_dir:: Only validate dependencies against what is in the
  #                     install_dir
  # :wrappers:: Install wrappers if true, symlinks if false.
  # :build_args:: An Array of arguments to pass to the extension builder
  #               process. If not set, then Gem::Command.build_args is used
  # :post_install_message:: Print gem post install message if true

  def initialize(package, options={})
    require "fileutils"

    @options = options
    @package = package

    process_options

    @package.dir_mode = options[:dir_mode]
    @package.prog_mode = options[:prog_mode]
    @package.data_mode = options[:data_mode]
  end

  ##
  # Checks if +filename+ exists in +@bin_dir+.
  #
  # If +@force+ is set +filename+ is overwritten.
  #
  # If +filename+ exists and it is a RubyGems wrapper for a different gem, then
  # the user is consulted.
  #
  # If +filename+ exists and +@bin_dir+ is Gem.default_bindir (/usr/local) the
  # user is consulted.
  #
  # Otherwise +filename+ is overwritten.

  def check_executable_overwrite(filename) # :nodoc:
    return if @force

    generated_bin = File.join @bin_dir, formatted_program_filename(filename)

    return unless File.exist? generated_bin

    ruby_executable = false
    existing = nil

    File.open generated_bin, "rb" do |io|
      line = io.gets
      shebang = /^#!.*ruby/o

      # TruffleRuby uses a bash prelude in default launchers
      if load_relative_enabled? || RUBY_ENGINE == "truffleruby"
        until line.nil? || shebang.match?(line) do
          line = io.gets
        end
      end

      next unless line&.match?(shebang)

      io.gets # blankline

      # TODO: detect a specially formatted comment instead of trying
      # to find a string inside Ruby code.
      next unless io.gets&.include?("This file was generated by RubyGems")

      ruby_executable = true
      existing = io.read.slice(/
          ^\s*(
            gem \s |
            load \s Gem\.bin_path\( |
            load \s Gem\.activate_bin_path\(
          )
          (['"])(.*?)(\2),
        /x, 3)
    end

    return if spec.name == existing

    # somebody has written to RubyGems' directory, overwrite, too bad
    return if Gem.default_bindir != @bin_dir && !ruby_executable

    question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup

    if ruby_executable
      question << (existing || "an unknown executable")

      return if ask_yes_no "#{question}\nOverwrite the executable?", false

      conflict = "installed executable from #{existing}"
    else
      question << generated_bin

      return if ask_yes_no "#{question}\nOverwrite the executable?", false

      conflict = generated_bin
    end

    raise Gem::InstallError,
      "\"#{filename}\" from #{spec.name} conflicts with #{conflict}"
  end

  ##
  # Lazy accessor for the spec's gem directory.

  def gem_dir
    @gem_dir ||= File.join(gem_home, "gems", spec.full_name)
  end

  ##
  # Lazy accessor for the installer's spec.

  def spec
    @package.spec
  end

  ##
  # Installs the gem and returns a loaded Gem::Specification for the installed
  # gem.
  #
  # The gem will be installed with the following structure:
  #
  #   @gem_home/
  #     cache/<gem-version>.gem #=> a cached copy of the installed gem
  #     gems/<gem-version>/... #=> extracted files
  #     specifications/<gem-version>.gemspec #=> the Gem::Specification

  def install
    pre_install_checks

    run_pre_install_hooks

    # Set loaded_from to ensure extension_dir is correct
    if @options[:install_as_default]
      spec.loaded_from = default_spec_file
    else
      spec.loaded_from = spec_file
    end

    # Completely remove any previous gem files
    FileUtils.rm_rf gem_dir
    FileUtils.rm_rf spec.extension_dir

    dir_mode = options[:dir_mode]
    FileUtils.mkdir_p gem_dir, mode: dir_mode && 0o755

    if @options[:install_as_default]
      extract_bin
      write_default_spec
    else
      extract_files

      build_extensions
      write_build_info_file
      run_post_build_hooks
    end

    generate_bin
    generate_plugins

    unless @options[:install_as_default]
      write_spec
      write_cache_file
    end

    File.chmod(dir_mode, gem_dir) if dir_mode

    say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?

    Gem::Specification.add_spec(spec) unless @install_dir

    load_plugin

    run_post_install_hooks

    spec
  rescue Errno::EACCES => e
    # Permission denied - /path/to/foo
    raise Gem::FilePermissionError, e.message.split(" - ").last
  end

  def run_pre_install_hooks # :nodoc:
    Gem.pre_install_hooks.each do |hook|
      next unless hook.call(self) == false
      location = " at #{$1}" if hook.inspect =~ /[ @](.*:\d+)/

      message = "pre-install hook#{location} failed for #{spec.full_name}"
      raise Gem::InstallError, message
    end
  end

  def run_post_build_hooks # :nodoc:
    Gem.post_build_hooks.each do |hook|
      next unless hook.call(self) == false
      FileUtils.rm_rf gem_dir

      location = " at #{$1}" if hook.inspect =~ /[ @](.*:\d+)/

      message = "post-build hook#{location} failed for #{spec.full_name}"
      raise Gem::InstallError, message
    end
  end

  def run_post_install_hooks # :nodoc:
    Gem.post_install_hooks.each do |hook|
      hook.call self
    end
  end

  ##
  #
  # Return an Array of Specifications contained within the gem_home
  # we'll be installing into.

  def installed_specs
    @installed_specs ||= begin
      specs = []

      Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
        spec = Gem::Specification.load path
        specs << spec if spec
      end

      specs
    end
  end

  ##
  # Ensure that the dependency is satisfied by the current installation of
  # gem.  If it is not an exception is raised.
  #
  # spec       :: Gem::Specification
  # dependency :: Gem::Dependency

  def ensure_dependency(spec, dependency)
    unless installation_satisfies_dependency? dependency
      raise Gem::InstallError, "#{spec.name} requires #{dependency}"
    end
    true
  end

  ##
  # True if the gems in the system satisfy +dependency+.

  def installation_satisfies_dependency?(dependency)
    return true if @options[:development] && dependency.type == :development
    return true if installed_specs.detect {|s| dependency.matches_spec? s }
    return false if @only_install_dir
    !dependency.matching_specs.empty?
  end

  ##
  # Unpacks the gem into the given directory.

  def unpack(directory)
    @gem_dir = directory
    extract_files
  end
  rubygems_deprecate :unpack

  ##
  # The location of the spec file that is installed.
  #

  def spec_file
    File.join gem_home, "specifications", "#{spec.full_name}.gemspec"
  end

  ##
  # The location of the default spec file for default gems.
  #

  def default_spec_file
    File.join gem_home, "specifications", "default", "#{spec.full_name}.gemspec"
  end

  ##
  # Writes the .gemspec specification (in Ruby) to the gem home's
  # specifications directory.

  def write_spec
    spec.installed_by_version = Gem.rubygems_version

    Gem.write_binary(spec_file, spec.to_ruby_for_cache)
  end

  ##
  # Writes the full .gemspec specification (in Ruby) to the gem home's
  # specifications/default directory.
  #
  # In contrast to #write_spec, this keeps file lists, so the `gem contents`
  # command works.

  def write_default_spec
    Gem.write_binary(default_spec_file, spec.to_ruby)
  end

  ##
  # Creates windows .bat files for easy running of commands

  def generate_windows_script(filename, bindir)
    if Gem.win_platform?
      script_name = formatted_program_filename(filename) + ".bat"
      script_path = File.join bindir, File.basename(script_name)
      File.open script_path, "w" do |file|
        file.puts windows_stub_script(bindir, filename)
      end

      verbose script_path
    end
  end

  def generate_bin # :nodoc:
    executables = spec.executables
    return if executables.nil? || executables.empty?

    if @gem_home == Gem.user_dir
      # If we get here, then one of the following likely happened:
      # - `--user-install` was specified
      # - `Gem::PathSupport#home` fell back to `Gem.user_dir`
      # - GEM_HOME was manually set to `Gem.user_dir`

      check_that_user_bin_dir_is_in_path(executables)
    end

    ensure_writable_dir @bin_dir

    executables.each do |filename|
      bin_path = File.join gem_dir, spec.bindir, filename
      next unless File.exist? bin_path

      mode = File.stat(bin_path).mode
      dir_mode = options[:prog_mode] || (mode | 0o111)

      unless dir_mode == mode
        File.chmod dir_mode, bin_path
      end

      check_executable_overwrite filename

      if @wrappers
        generate_bin_script filename, @bin_dir
      else
        generate_bin_symlink filename, @bin_dir
      end
    end
  end

  def generate_plugins # :nodoc:
    latest = Gem::Specification.latest_spec_for(spec.name)
    return if latest && latest.version > spec.version

    ensure_writable_dir @plugins_dir

    if spec.plugins.empty?
      remove_plugins_for(spec, @plugins_dir)
    else
      regenerate_plugins_for(spec, @plugins_dir)
    end
  rescue ArgumentError => e
    raise e, "#{latest.name} #{latest.version} #{spec.name} #{spec.version}: #{e.message}"
  end

  ##
  # Creates the scripts to run the applications in the gem.
  #--
  # The Windows script is generated in addition to the regular one due to a
  # bug or misfeature in the Windows shell's pipe.  See
  # https://blade.ruby-lang.org/ruby-talk/193379

  def generate_bin_script(filename, bindir)
    bin_script_path = File.join bindir, formatted_program_filename(filename)

    Gem.open_file_with_lock(bin_script_path) do
      require "fileutils"
      FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers

      File.open(bin_script_path, "wb", 0o755) do |file|
        file.write app_script_text(filename)
        file.chmod(options[:prog_mode] || 0o755)
      end
    end

    verbose bin_script_path

    generate_windows_script filename, bindir
  end

  ##
  # Creates the symlinks to run the applications in the gem.  Moves
  # the symlink if the gem being installed has a newer version.

  def generate_bin_symlink(filename, bindir)
    src = File.join gem_dir, spec.bindir, filename
    dst = File.join bindir, formatted_program_filename(filename)

    if File.exist? dst
      if File.symlink? dst
        link = File.readlink(dst).split File::SEPARATOR
        cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ""))
        return if spec.version < cur_version
      end
      File.unlink dst
    end

    FileUtils.symlink src, dst, verbose: Gem.configuration.really_verbose
  rescue NotImplementedError, SystemCallError
    alert_warning "Unable to use symlinks, installing wrapper"
    generate_bin_script filename, bindir
  end

  ##
  # Generates a #! line for +bin_file_name+'s wrapper copying arguments if
  # necessary.
  #
  # If the :custom_shebang config is set, then it is used as a template
  # for how to create the shebang used for to run a gem's executables.
  #
  # The template supports 4 expansions:
  #
  #  $env    the path to the unix env utility
  #  $ruby   the path to the currently running ruby interpreter
  #  $exec   the path to the gem's executable
  #  $name   the name of the gem the executable is for
  #

  def shebang(bin_file_name)
    path = File.join gem_dir, spec.bindir, bin_file_name
    first_line = File.open(path, "rb", &:gets) || ""

    if first_line.start_with?("#!")
      # Preserve extra words on shebang line, like "-w".  Thanks RPA.
      shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}")
      opts = $1
      shebang.strip! # Avoid nasty ^M issues.
    end

    if which = Gem.configuration[:custom_shebang]
      # replace bin_file_name with "ruby" to avoid endless loops
      which = which.gsub(/ #{bin_file_name}$/," #{ruby_install_name}")

      which = which.gsub(/\$(\w+)/) do
        case $1
        when "env"
          @env_path ||= ENV_PATHS.find {|env_path| File.executable? env_path }
        when "ruby"
          "#{Gem.ruby}#{opts}"
        when "exec"
          bin_file_name
        when "name"
          spec.name
        end
      end

      "#!#{which}"
    elsif @env_shebang
      # Create a plain shebang line.
      @env_path ||= ENV_PATHS.find {|env_path| File.executable? env_path }
      "#!#{@env_path} #{ruby_install_name}"
    else
      "#{bash_prolog_script}#!#{Gem.ruby}#{opts}"
    end
  end

  ##
  # Ensures the Gem::Specification written out for this gem is loadable upon
  # installation.

  def ensure_loadable_spec
    ruby = spec.to_ruby_for_cache

    begin
      eval ruby
    rescue StandardError, SyntaxError => e
      raise Gem::InstallError,
            "The specification for #{spec.full_name} is corrupt (#{e.class})"
    end
  end

  def ensure_dependencies_met # :nodoc:
    deps = spec.runtime_dependencies
    deps |= spec.development_dependencies if @development

    deps.each do |dep_gem|
      ensure_dependency spec, dep_gem
    end
  end

  def process_options # :nodoc:
    @options = {
      bin_dir: nil,
      env_shebang: false,
      force: false,
      only_install_dir: false,
      post_install_message: true,
    }.merge options

    @env_shebang         = options[:env_shebang]
    @force               = options[:force]
    @install_dir         = options[:install_dir]
    @user_install        = options[:user_install]
    @ignore_dependencies = options[:ignore_dependencies]
    @format_executable   = options[:format_executable]
    @wrappers            = options[:wrappers]
    @only_install_dir    = options[:only_install_dir]

    @bin_dir             = options[:bin_dir]
    @development         = options[:development]
    @build_root          = options[:build_root]

    @build_args = options[:build_args]

    @gem_home = @install_dir || user_install_dir || Gem.dir

    # If the user has asked for the gem to be installed in a directory that is
    # the system gem directory, then use the system bin directory, else create
    # (or use) a new bin dir under the gem_home.
    @bin_dir ||= Gem.bindir(@gem_home)

    @plugins_dir = Gem.plugindir(@gem_home)

    unless @build_root.nil?
      @bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ""))
      @gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ""))
      @plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/, ""))
      alert_warning "You build with buildroot.\n  Build root: #{@build_root}\n  Bin dir: #{@bin_dir}\n  Gem home: #{@gem_home}\n  Plugins dir: #{@plugins_dir}"
    end
  end

  def check_that_user_bin_dir_is_in_path(executables) # :nodoc:
    user_bin_dir = @bin_dir || Gem.bindir(gem_home)
    user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR

    path = ENV["PATH"]
    path = path.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR

    if Gem.win_platform?
      path = path.downcase
      user_bin_dir = user_bin_dir.downcase
    end

    path = path.split(File::PATH_SEPARATOR)

    unless path.include? user_bin_dir
      unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~"))
        alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t  gem executables (#{executables.join(", ")}) will not run."
      end
    end
  end

  def verify_gem_home # :nodoc:
    FileUtils.mkdir_p gem_home, mode: options[:dir_mode] && 0o755
  end

  def verify_spec
    unless Gem::Specification::VALID_NAME_PATTERN.match?(spec.name)
      raise Gem::InstallError, "#{spec} has an invalid name"
    end

    if spec.raw_require_paths.any? {|path| path =~ /\R/ }
      raise Gem::InstallError, "#{spec} has an invalid require_paths"
    end

    if spec.extensions.any? {|ext| ext =~ /\R/ }
      raise Gem::InstallError, "#{spec} has an invalid extensions"
    end

    if /\R/.match?(spec.platform.to_s)
      raise Gem::InstallError, "#{spec.platform} is an invalid platform"
    end

    unless /\A\d+\z/.match?(spec.specification_version.to_s)
      raise Gem::InstallError, "#{spec} has an invalid specification_version"
    end

    if spec.dependencies.any? {|dep| dep.type != :runtime && dep.type != :development }
      raise Gem::InstallError, "#{spec} has an invalid dependencies"
    end

    if spec.dependencies.any? {|dep| dep.name =~ /(?:\R|[<>])/ }
      raise Gem::InstallError, "#{spec} has an invalid dependencies"
    end
  end

  ##
  # Return the text for an application file.

  def app_script_text(bin_file_name)
    # NOTE: that the `load` lines cannot be indented, as old RG versions match
    # against the beginning of the line
    <<-TEXT
#{shebang bin_file_name}
#
# This file was generated by RubyGems.
#
# The application '#{spec.name}' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'
#{gemdeps_load(spec.name)}
version = "#{Gem::Requirement.default_prerelease}"

str = ARGV.first
if str
  str = str.b[/\\A_(.*)_\\z/, 1]
  if str and Gem::Version.correct?(str)
    #{explicit_version_requirement(spec.name)}
    ARGV.shift
  end
end

if Gem.respond_to?(:activate_bin_path)
load Gem.activate_bin_path('#{spec.name}', '#{bin_file_name}', version)
else
gem #{spec.name.dump}, version
load Gem.bin_path(#{spec.name.dump}, #{bin_file_name.dump}, version)
end
TEXT
  end

  def gemdeps_load(name)
    return "" if name == "bundler"

    <<-TEXT

Gem.use_gemdeps
TEXT
  end

  def explicit_version_requirement(name)
    code = "version = str"
    return code unless name == "bundler"

    code += <<-TEXT

    ENV['BUNDLER_VERSION'] = str
TEXT
  end

  ##
  # return the stub script text used to launch the true Ruby script

  def windows_stub_script(bindir, bin_file_name)
    rb_topdir = RbConfig::TOPDIR || File.dirname(rb_config["bindir"])

    # get ruby executable file name from RbConfig
    ruby_exe = "#{rb_config["RUBY_INSTALL_NAME"]}#{rb_config["EXEEXT"]}"
    ruby_exe = "ruby.exe" if ruby_exe.empty?

    if File.exist?(File.join(bindir, ruby_exe))
      # stub & ruby.exe within same folder.  Portable
      <<-TEXT
@ECHO OFF
@"%~dp0#{ruby_exe}" "%~dpn0" %*
      TEXT
    elsif bindir.downcase.start_with? rb_topdir.downcase
      # stub within ruby folder, but not standard bin.  Portable
      require "pathname"
      from = Pathname.new bindir
      to   = Pathname.new "#{rb_topdir}/bin"
      rel  = to.relative_path_from from
      <<-TEXT
@ECHO OFF
@"%~dp0#{rel}/#{ruby_exe}" "%~dpn0" %*
      TEXT
    else
      # outside ruby folder, maybe -user-install or bundler.  Portable, but ruby
      # is dependent on PATH
      <<-TEXT
@ECHO OFF
@#{ruby_exe} "%~dpn0" %*
      TEXT
    end
  end
  ##
  # Builds extensions.  Valid types of extensions are extconf.rb files,
  # configure scripts and rakefiles or mkrf_conf files.

  def build_extensions
    builder = Gem::Ext::Builder.new spec, build_args, Gem.target_rbconfig

    builder.build_extensions
  end

  ##
  # Reads the file index and extracts each file into the gem directory.
  #
  # Ensures that files can't be installed outside the gem directory.

  def extract_files
    @package.extract_files gem_dir
  end

  ##
  # Extracts only the bin/ files from the gem into the gem directory.
  # This is used by default gems to allow a gem-aware stub to function
  # without the full gem installed.

  def extract_bin
    @package.extract_files gem_dir, "#{spec.bindir}/*"
  end

  ##
  # Prefix and suffix the program filename the same as ruby.

  def formatted_program_filename(filename)
    if @format_executable
      self.class.exec_format % File.basename(filename)
    else
      filename
    end
  end

  ##
  #
  # Return the target directory where the gem is to be installed. This
  # directory is not guaranteed to be populated.
  #

  def dir
    gem_dir.to_s
  end

  ##
  # Filename of the gem being installed.

  def gem
    @package.gem.path
  end

  ##
  # Performs various checks before installing the gem such as the install
  # repository is writable and its directories exist, required Ruby and
  # rubygems versions are met and that dependencies are installed.
  #
  # Version and dependency checks are skipped if this install is forced.
  #
  # The dependent check will be skipped if the install is ignoring dependencies.

  def pre_install_checks
    verify_gem_home

    # The name and require_paths must be verified first, since it could contain
    # ruby code that would be eval'ed in #ensure_loadable_spec
    verify_spec

    ensure_loadable_spec

    if options[:install_as_default]
      Gem.ensure_default_gem_subdirectories gem_home
    else
      Gem.ensure_gem_subdirectories gem_home
    end

    return true if @force

    ensure_dependencies_met unless @ignore_dependencies

    true
  end

  ##
  # Writes the file containing the arguments for building this gem's
  # extensions.

  def write_build_info_file
    return if build_args.empty?

    build_info_dir = File.join gem_home, "build_info"

    dir_mode = options[:dir_mode]
    FileUtils.mkdir_p build_info_dir, mode: dir_mode && 0o755

    build_info_file = File.join build_info_dir, "#{spec.full_name}.info"

    File.open build_info_file, "w" do |io|
      build_args.each do |arg|
        io.puts arg
      end
    end

    File.chmod(dir_mode, build_info_dir) if dir_mode
  end

  ##
  # Writes the .gem file to the cache directory

  def write_cache_file
    cache_file = File.join gem_home, "cache", spec.file_name
    @package.copy_to cache_file
  end

  def ensure_writable_dir(dir) # :nodoc:
    begin
      Dir.mkdir dir, *[options[:dir_mode] && 0o755].compact
    rescue SystemCallError
      raise unless File.directory? dir
    end

    raise Gem::FilePermissionError.new(dir) unless File.writable? dir
  end

  private

  def user_install_dir
    # never install to user home in --build-root mode
    return unless @build_root.nil?

    # Please note that @user_install might have three states:
    # * `true`: `--user-install`
    # * `false`: `--no-user-install` and
    # * `nil`: option was not specified
    if @user_install || (@user_install.nil? && Gem.default_user_install)
      Gem.user_dir
    end
  end

  def build_args
    @build_args ||= begin
                      require_relative "command"
                      Gem::Command.build_args
                    end
  end

  def rb_config
    Gem.target_rbconfig
  end

  def ruby_install_name
    rb_config["ruby_install_name"]
  end

  def load_relative_enabled?
    rb_config["LIBRUBY_RELATIVE"] == "yes"
  end

  def bash_prolog_script
    if load_relative_enabled?
      <<~EOS
        #!/bin/sh
        # -*- ruby -*-
        _=_\\
        =begin
        bindir="${0%/*}"
        ruby="$bindir/#{ruby_install_name}"
        if [ ! -f "$ruby" ]; then
          ruby="#{ruby_install_name}"
        fi
        exec "$ruby" "-x" "$0" "$@"
        =end
      EOS
    else
      ""
    end
  end

  def load_plugin
    specs = Gem::Specification.find_all_by_name(spec.name)
    # If old version already exists, this plugin isn't loaded
    # immediately. It's for avoiding a case that multiple versions
    # are loaded at the same time.
    return unless specs.size == 1

    plugin_files = spec.plugins.map do |plugin|
      File.join(@plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}")
    end
    Gem.load_plugin_files(plugin_files)
  end
end
PK)J[`���	�	%share/rubygems/rubygems/name_tuple.rbnu�[���# frozen_string_literal: true

##
#
# Represents a gem of name +name+ at +version+ of +platform+. These
# wrap the data returned from the indexes.

class Gem::NameTuple
  def initialize(name, version, platform=Gem::Platform::RUBY)
    @name = name
    @version = version

    platform &&= platform.to_s
    platform = Gem::Platform::RUBY if !platform || platform.empty?
    @platform = platform
  end

  attr_reader :name, :version, :platform

  ##
  # Turn an array of [name, version, platform] into an array of
  # NameTuple objects.

  def self.from_list(list)
    list.map {|t| new(*t) }
  end

  ##
  # Turn an array of NameTuple objects back into an array of
  # [name, version, platform] tuples.

  def self.to_basic(list)
    list.map(&:to_a)
  end

  ##
  # A null NameTuple, ie name=nil, version=0

  def self.null
    new nil, Gem::Version.new(0), nil
  end

  ##
  # Returns the full name (name-version) of this Gem.  Platform information is
  # included if it is not the default Ruby platform.  This mimics the behavior
  # of Gem::Specification#full_name.

  def full_name
    case @platform
    when nil, "", Gem::Platform::RUBY
      "#{@name}-#{@version}"
    else
      "#{@name}-#{@version}-#{@platform}"
    end
  end

  ##
  # Indicate if this NameTuple matches the current platform.

  def match_platform?
    Gem::Platform.match_gem? @platform, @name
  end

  ##
  # Indicate if this NameTuple is for a prerelease version.
  def prerelease?
    @version.prerelease?
  end

  ##
  # Return the name that the gemspec file would be

  def spec_name
    "#{full_name}.gemspec"
  end

  ##
  # Convert back to the [name, version, platform] tuple

  def to_a
    [@name, @version, @platform]
  end

  def inspect # :nodoc:
    "#<Gem::NameTuple #{@name}, #{@version}, #{@platform}>"
  end

  alias_method :to_s, :inspect # :nodoc:

  def <=>(other)
    [@name, @version, Gem::Platform.sort_priority(@platform)] <=>
      [other.name, other.version, Gem::Platform.sort_priority(other.platform)]
  end

  include Comparable

  ##
  # Compare with +other+. Supports another NameTuple or an Array
  # in the [name, version, platform] format.

  def ==(other)
    case other
    when self.class
      @name == other.name &&
        @version == other.version &&
        @platform == other.platform
    when Array
      to_a == other
    else
      false
    end
  end

  alias_method :eql?, :==

  def hash
    to_a.hash
  end
end
PK)J[JNBg�	�	share/rubygems/rubygems/uri.rbnu�[���# frozen_string_literal: true

##
# The Uri handles rubygems source URIs.
#

class Gem::Uri
  ##
  # Parses and redacts uri

  def self.redact(uri)
    new(uri).redacted
  end

  ##
  # Parses uri, raising if it's invalid

  def self.parse!(uri)
    require_relative "vendor/uri/lib/uri"

    raise Gem::URI::InvalidURIError unless uri

    return uri unless uri.is_a?(String)

    # Always escape URI's to deal with potential spaces and such
    # It should also be considered that source_uri may already be
    # a valid URI with escaped characters. e.g. "{DESede}" is encoded
    # as "%7BDESede%7D". If this is escaped again the percentage
    # symbols will be escaped.
    begin
      Gem::URI.parse(uri)
    rescue Gem::URI::InvalidURIError
      Gem::URI.parse(Gem::URI::RFC2396_PARSER.escape(uri))
    end
  end

  ##
  # Parses uri, returning the original uri if it's invalid

  def self.parse(uri)
    parse!(uri)
  rescue Gem::URI::InvalidURIError
    uri
  end

  def initialize(source_uri)
    @parsed_uri = parse(source_uri)
  end

  def redacted
    return self unless valid_uri?

    if token? || oauth_basic?
      with_redacted_user
    elsif password?
      with_redacted_password
    else
      self
    end
  end

  def to_s
    @parsed_uri.to_s
  end

  def redact_credentials_from(text)
    return text unless valid_uri? && password? && text.include?(to_s)

    text.sub(password, "REDACTED")
  end

  def method_missing(method_name, *args, &blk)
    if @parsed_uri.respond_to?(method_name)
      @parsed_uri.send(method_name, *args, &blk)
    else
      super
    end
  end

  def respond_to_missing?(method_name, include_private = false)
    @parsed_uri.respond_to?(method_name, include_private) || super
  end

  protected

  # Add a protected reader for the cloned instance to access the original object's parsed uri
  attr_reader :parsed_uri

  private

  def parse!(uri)
    self.class.parse!(uri)
  end

  def parse(uri)
    self.class.parse(uri)
  end

  def with_redacted_user
    clone.tap {|uri| uri.user = "REDACTED" }
  end

  def with_redacted_password
    clone.tap {|uri| uri.password = "REDACTED" }
  end

  def valid_uri?
    !@parsed_uri.is_a?(String)
  end

  def password?
    !!password
  end

  def oauth_basic?
    password == "x-oauth-basic"
  end

  def token?
    !user.nil? && password.nil?
  end

  def initialize_copy(original)
    @parsed_uri = original.parsed_uri.clone
  end
end
PK)J[U���''$share/rubygems/rubygems/deprecate.rbnu�[���# frozen_string_literal: true

##
# Provides 3 methods for declaring when something is going away.
#
# +deprecate(name, repl, year, month)+:
#     Indicate something may be removed on/after a certain date.
#
# +rubygems_deprecate(name, replacement=:none)+:
#     Indicate something will be removed in the next major RubyGems version,
#     and (optionally) a replacement for it.
#
# +rubygems_deprecate_command+:
#     Indicate a RubyGems command (in +lib/rubygems/commands/*.rb+) will be
#     removed in the next RubyGems version.
#
# Also provides +skip_during+ for temporarily turning off deprecation warnings.
# This is intended to be used in the test suite, so deprecation warnings
# don't cause test failures if you need to make sure stderr is otherwise empty.
#
#
# Example usage of +deprecate+ and +rubygems_deprecate+:
#
#     class Legacy
#       def self.some_class_method
#         # ...
#       end
#
#       def some_instance_method
#         # ...
#       end
#
#       def some_old_method
#         # ...
#       end
#
#       extend Gem::Deprecate
#       deprecate :some_instance_method, "X.z", 2011, 4
#       rubygems_deprecate :some_old_method, "Modern#some_new_method"
#
#       class << self
#         extend Gem::Deprecate
#         deprecate :some_class_method, :none, 2011, 4
#       end
#     end
#
#
# Example usage of +rubygems_deprecate_command+:
#
#     class Gem::Commands::QueryCommand < Gem::Command
#       extend Gem::Deprecate
#       rubygems_deprecate_command
#
#       # ...
#     end
#
#
# Example usage of +skip_during+:
#
#     class TestSomething < Gem::Testcase
#       def test_some_thing_with_deprecations
#         Gem::Deprecate.skip_during do
#           actual_stdout, actual_stderr = capture_output do
#             Gem.something_deprecated
#           end
#           assert_empty actual_stdout
#           assert_equal(expected, actual_stderr)
#         end
#       end
#     end

module Gem
  module Deprecate
    def self.skip # :nodoc:
      @skip ||= false
    end

    def self.skip=(v) # :nodoc:
      @skip = v
    end

    ##
    # Temporarily turn off warnings. Intended for tests only.

    def skip_during
      original = Gem::Deprecate.skip
      Gem::Deprecate.skip = true
      yield
    ensure
      Gem::Deprecate.skip = original
    end

    def self.next_rubygems_major_version # :nodoc:
      Gem::Version.new(Gem.rubygems_version.segments.first).bump
    end

    ##
    # Simple deprecation method that deprecates +name+ by wrapping it up
    # in a dummy method. It warns on each call to the dummy method
    # telling the user of +repl+ (unless +repl+ is :none) and the
    # year/month that it is planned to go away.

    def deprecate(name, repl, year, month)
      class_eval do
        old = "_deprecated_#{name}"
        alias_method old, name
        define_method name do |*args, &block|
          klass = is_a? Module
          target = klass ? "#{self}." : "#{self.class}#"
          msg = [
            "NOTE: #{target}#{name} is deprecated",
            repl == :none ? " with no replacement" : "; use #{repl} instead",
            format(". It will be removed on or after %4d-%02d.", year, month),
            "\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
          ]
          warn "#{msg.join}." unless Gem::Deprecate.skip
          send old, *args, &block
        end
        ruby2_keywords name if respond_to?(:ruby2_keywords, true)
      end
    end

    ##
    # Simple deprecation method that deprecates +name+ by wrapping it up
    # in a dummy method. It warns on each call to the dummy method
    # telling the user of +repl+ (unless +repl+ is :none) and the
    # Rubygems version that it is planned to go away.

    def rubygems_deprecate(name, replacement=:none)
      class_eval do
        old = "_deprecated_#{name}"
        alias_method old, name
        define_method name do |*args, &block|
          klass = is_a? Module
          target = klass ? "#{self}." : "#{self.class}#"
          msg = [
            "NOTE: #{target}#{name} is deprecated",
            replacement == :none ? " with no replacement" : "; use #{replacement} instead",
            ". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}",
            "\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
          ]
          warn "#{msg.join}." unless Gem::Deprecate.skip
          send old, *args, &block
        end
        ruby2_keywords name if respond_to?(:ruby2_keywords, true)
      end
    end

    # Deprecation method to deprecate Rubygems commands
    def rubygems_deprecate_command(version = Gem::Deprecate.next_rubygems_major_version)
      class_eval do
        define_method "deprecated?" do
          true
        end

        define_method "deprecation_warning" do
          msg = [
            "#{command} command is deprecated",
            ". It will be removed in Rubygems #{version}.\n",
          ]

          alert_warning msg.join.to_s unless Gem::Deprecate.skip
        end
      end
    end

    module_function :rubygems_deprecate, :rubygems_deprecate_command, :skip_during
  end
end
PK)J[5{�y&-&-&share/rubygems/rubygems/request_set.rbnu�[���# frozen_string_literal: true

require_relative "vendored_tsort"

##
# A RequestSet groups a request to activate a set of dependencies.
#
#   nokogiri = Gem::Dependency.new 'nokogiri', '~> 1.6'
#   pg = Gem::Dependency.new 'pg', '~> 0.14'
#
#   set = Gem::RequestSet.new nokogiri, pg
#
#   requests = set.resolve
#
#   p requests.map { |r| r.full_name }
#   #=> ["nokogiri-1.6.0", "mini_portile-0.5.1", "pg-0.17.0"]

class Gem::RequestSet
  include Gem::TSort

  ##
  # Array of gems to install even if already installed

  attr_accessor :always_install

  attr_reader :dependencies

  attr_accessor :development

  ##
  # Errors fetching gems during resolution.

  attr_reader :errors

  ##
  # Set to true if you want to install only direct development dependencies.

  attr_accessor :development_shallow

  ##
  # The set of git gems imported via load_gemdeps.

  attr_reader :git_set # :nodoc:

  ##
  # When true, dependency resolution is not performed, only the requested gems
  # are installed.

  attr_accessor :ignore_dependencies

  attr_reader :install_dir # :nodoc:

  ##
  # If true, allow dependencies to match prerelease gems.

  attr_accessor :prerelease

  ##
  # When false no remote sets are used for resolving gems.

  attr_accessor :remote

  attr_reader :resolver # :nodoc:

  ##
  # Sets used for resolution

  attr_reader :sets # :nodoc:

  ##
  # Treat missing dependencies as silent errors

  attr_accessor :soft_missing

  ##
  # The set of vendor gems imported via load_gemdeps.

  attr_reader :vendor_set # :nodoc:

  ##
  # The set of source gems imported via load_gemdeps.

  attr_reader :source_set

  ##
  # Creates a RequestSet for a list of Gem::Dependency objects, +deps+.  You
  # can then #resolve and #install the resolved list of dependencies.
  #
  #   nokogiri = Gem::Dependency.new 'nokogiri', '~> 1.6'
  #   pg = Gem::Dependency.new 'pg', '~> 0.14'
  #
  #   set = Gem::RequestSet.new nokogiri, pg

  def initialize(*deps)
    @dependencies = deps

    @always_install      = []
    @conservative        = false
    @dependency_names    = {}
    @development         = false
    @development_shallow = false
    @errors              = []
    @git_set             = nil
    @ignore_dependencies = false
    @install_dir         = Gem.dir
    @prerelease          = false
    @remote              = true
    @requests            = []
    @sets                = []
    @soft_missing        = false
    @sorted_requests     = nil
    @specs               = nil
    @vendor_set          = nil
    @source_set          = nil

    yield self if block_given?
  end

  ##
  # Declare that a gem of name +name+ with +reqs+ requirements is needed.

  def gem(name, *reqs)
    if dep = @dependency_names[name]
      dep.requirement.concat reqs
    else
      dep = Gem::Dependency.new name, *reqs
      @dependency_names[name] = dep
      @dependencies << dep
    end
  end

  ##
  # Add +deps+ Gem::Dependency objects to the set.

  def import(deps)
    @dependencies.concat deps
  end

  ##
  # Installs gems for this RequestSet using the Gem::Installer +options+.
  #
  # If a +block+ is given an activation +request+ and +installer+ are yielded.
  # The +installer+ will be +nil+ if a gem matching the request was already
  # installed.

  def install(options, &block) # :yields: request, installer
    if dir = options[:install_dir]
      requests = install_into dir, false, options, &block
      return requests
    end

    @prerelease = options[:prerelease]

    requests = []
    download_queue = Thread::Queue.new

    # Create a thread-safe list of gems to download
    sorted_requests.each do |req|
      download_queue << req
    end

    # Create N threads in a pool, have them download all the gems
    threads = Array.new(Gem.configuration.concurrent_downloads) do
      # When a thread pops this item, it knows to stop running. The symbol
      # is queued here so that there will be one symbol per thread.
      download_queue << :stop

      Thread.new do
        # The pop method will block waiting for items, so the only way
        # to stop a thread from running is to provide a final item that
        # means the thread should stop.
        while req = download_queue.pop
          break if req == :stop
          req.spec.download options unless req.installed?
        end
      end
    end

    # Wait for all the downloads to finish before continuing
    threads.each(&:value)

    # Install requested gems after they have been downloaded
    sorted_requests.each do |req|
      if req.installed?
        req.spec.spec.build_extensions

        if @always_install.none? {|spec| spec == req.spec.spec }
          yield req, nil if block_given?
          next
        end
      end

      spec =
        begin
          req.spec.install options do |installer|
            yield req, installer if block_given?
          end
        rescue Gem::RuntimeRequirementNotMetError => e
          suggestion = "There are no versions of #{req.request} compatible with your Ruby & RubyGems"
          suggestion += ". Maybe try installing an older version of the gem you're looking for?" unless @always_install.include?(req.spec.spec)
          e.suggestion = suggestion
          raise
        end

      requests << spec
    end

    return requests if options[:gemdeps]

    install_hooks requests, options

    requests
  end

  ##
  # Installs from the gem dependencies files in the +:gemdeps+ option in
  # +options+, yielding to the +block+ as in #install.
  #
  # If +:without_groups+ is given in the +options+, those groups in the gem
  # dependencies file are not used.  See Gem::Installer for other +options+.

  def install_from_gemdeps(options, &block)
    gemdeps = options[:gemdeps]

    @install_dir = options[:install_dir] || Gem.dir
    @prerelease  = options[:prerelease]
    @remote      = options[:domain] != :local
    @conservative = true if options[:conservative]

    gem_deps_api = load_gemdeps gemdeps, options[:without_groups], true

    resolve

    if options[:explain]
      puts "Gems to install:"

      sorted_requests.each do |spec|
        puts "  #{spec.full_name}"
      end

      if Gem.configuration.really_verbose
        @resolver.stats.display
      end
    else
      installed = install options, &block

      if options.fetch :lock, true
        lockfile =
          Gem::RequestSet::Lockfile.build self, gemdeps, gem_deps_api.dependencies
        lockfile.write
      end

      installed
    end
  end

  def install_into(dir, force = true, options = {})
    gem_home = ENV["GEM_HOME"]
    ENV["GEM_HOME"] = dir

    existing = force ? [] : specs_in(dir)
    existing.delete_if {|s| @always_install.include? s }

    dir = File.expand_path dir

    installed = []

    options[:development] = false
    options[:install_dir] = dir
    options[:only_install_dir] = true
    @prerelease = options[:prerelease]

    sorted_requests.each do |request|
      spec = request.spec

      if existing.find {|s| s.full_name == spec.full_name }
        yield request, nil if block_given?
        next
      end

      spec.install options do |installer|
        yield request, installer if block_given?
      end

      installed << request
    end

    install_hooks installed, options

    installed
  ensure
    ENV["GEM_HOME"] = gem_home
  end

  ##
  # Call hooks on installed gems

  def install_hooks(requests, options)
    specs = requests.map do |request|
      case request
      when Gem::Resolver::ActivationRequest then
        request.spec.spec
      else
        request
      end
    end

    require_relative "dependency_installer"
    inst = Gem::DependencyInstaller.new options
    inst.installed_gems.replace specs

    Gem.done_installing_hooks.each do |hook|
      hook.call inst, specs
    end unless Gem.done_installing_hooks.empty?
  end

  ##
  # Load a dependency management file.

  def load_gemdeps(path, without_groups = [], installing = false)
    @git_set    = Gem::Resolver::GitSet.new
    @vendor_set = Gem::Resolver::VendorSet.new
    @source_set = Gem::Resolver::SourceSet.new

    @git_set.root_dir = @install_dir

    lock_file = "#{File.expand_path(path)}.lock"
    begin
      tokenizer = Gem::RequestSet::Lockfile::Tokenizer.from_file lock_file
      parser = tokenizer.make_parser self, []
      parser.parse
    rescue Errno::ENOENT
    end

    gf = Gem::RequestSet::GemDependencyAPI.new self, path
    gf.installing = installing
    gf.without_groups = without_groups if without_groups
    gf.load
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[RequestSet:", "]" do
      q.breakable

      if @remote
        q.text "remote"
        q.breakable
      end

      if @prerelease
        q.text "prerelease"
        q.breakable
      end

      if @development_shallow
        q.text "shallow development"
        q.breakable
      elsif @development
        q.text "development"
        q.breakable
      end

      if @soft_missing
        q.text "soft missing"
      end

      q.group 2, "[dependencies:", "]" do
        q.breakable
        @dependencies.map do |dep|
          q.text dep.to_s
          q.breakable
        end
      end

      q.breakable
      q.text "sets:"

      q.breakable
      q.pp @sets.map(&:class)
    end
  end

  ##
  # Resolve the requested dependencies and return an Array of Specification
  # objects to be activated.

  def resolve(set = Gem::Resolver::BestSet.new)
    @sets << set
    @sets << @git_set
    @sets << @vendor_set
    @sets << @source_set

    set = Gem::Resolver.compose_sets(*@sets)
    set.remote = @remote
    set.prerelease = @prerelease

    resolver = Gem::Resolver.new @dependencies, set
    resolver.development         = @development
    resolver.development_shallow = @development_shallow
    resolver.ignore_dependencies = @ignore_dependencies
    resolver.soft_missing        = @soft_missing

    if @conservative
      installed_gems = {}
      Gem::Specification.find_all do |spec|
        (installed_gems[spec.name] ||= []) << spec
      end
      resolver.skip_gems = installed_gems
    end

    @resolver = resolver

    @requests = resolver.resolve

    @errors = set.errors

    @requests
  end

  ##
  # Resolve the requested dependencies against the gems available via Gem.path
  # and return an Array of Specification objects to be activated.

  def resolve_current
    resolve Gem::Resolver::CurrentSet.new
  end

  def sorted_requests
    @sorted_requests ||= strongly_connected_components.flatten
  end

  def specs
    @specs ||= @requests.map(&:full_spec)
  end

  def specs_in(dir)
    Gem::Util.glob_files_in_dir("*.gemspec", File.join(dir, "specifications")).map do |g|
      Gem::Specification.load g
    end
  end

  def tsort_each_node(&block) # :nodoc:
    @requests.each(&block)
  end

  def tsort_each_child(node) # :nodoc:
    node.spec.dependencies.each do |dep|
      next if dep.type == :development && !@development

      match = @requests.find do |r|
        dep.match?(r.spec.name, r.spec.version, r.spec.is_a?(Gem::Resolver::InstalledSpecification) || @prerelease)
      end

      unless match
        next if dep.type == :development && @development_shallow
        next if @soft_missing
        raise Gem::DependencyError,
              "Unresolved dependency found during sorting - #{dep} (requested by #{node.spec.full_name})"
      end

      yield match
    end
  end
end

require_relative "request_set/gem_dependency_api"
require_relative "request_set/lockfile"
require_relative "request_set/lockfile/tokenizer"
PK)J[O���!�!%share/rubygems/rubygems/dependency.rbnu�[���# frozen_string_literal: true

##
# The Dependency class holds a Gem name and a Gem::Requirement.

class Gem::Dependency
  ##
  # Valid dependency types.
  #--
  # When this list is updated, be sure to change
  # Gem::Specification::CURRENT_SPECIFICATION_VERSION as well.
  #
  # REFACTOR: This type of constant, TYPES, indicates we might want
  # two classes, used via inheritance or duck typing.

  TYPES = [
    :development,
    :runtime,
  ].freeze

  ##
  # Dependency name or regular expression.

  attr_accessor :name

  ##
  # Allows you to force this dependency to be a prerelease.

  attr_writer :prerelease

  ##
  # Constructs a dependency with +name+ and +requirements+. The last
  # argument can optionally be the dependency type, which defaults to
  # <tt>:runtime</tt>.

  def initialize(name, *requirements)
    case name
    when String then # ok
    when Regexp then
      msg = ["NOTE: Dependency.new w/ a regexp is deprecated.",
             "Dependency.new called from #{Gem.location_of_caller.join(":")}"]
      warn msg.join("\n") unless Gem::Deprecate.skip
    else
      raise ArgumentError,
            "dependency name must be a String, was #{name.inspect}"
    end

    type         = Symbol === requirements.last ? requirements.pop : :runtime
    requirements = requirements.first if requirements.length == 1 # unpack

    unless TYPES.include? type
      raise ArgumentError, "Valid types are #{TYPES.inspect}, " \
                           "not #{type.inspect}"
    end

    @name        = name
    @requirement = Gem::Requirement.create requirements
    @type        = type
    @prerelease  = false

    # This is for Marshal backwards compatibility. See the comments in
    # +requirement+ for the dirty details.

    @version_requirements = @requirement
  end

  ##
  # A dependency's hash is the XOR of the hashes of +name+, +type+,
  # and +requirement+.

  def hash # :nodoc:
    name.hash ^ type.hash ^ requirement.hash
  end

  def inspect # :nodoc:
    if prerelease?
      format("<%s type=%p name=%p requirements=%p prerelease=ok>", self.class, type, name, requirement.to_s)
    else
      format("<%s type=%p name=%p requirements=%p>", self.class, type, name, requirement.to_s)
    end
  end

  ##
  # Does this dependency require a prerelease?

  def prerelease?
    @prerelease || requirement.prerelease?
  end

  ##
  # Is this dependency simply asking for the latest version
  # of a gem?

  def latest_version?
    @requirement.none?
  end

  def pretty_print(q) # :nodoc:
    q.group 1, "Gem::Dependency.new(", ")" do
      q.pp name
      q.text ","
      q.breakable

      q.pp requirement

      q.text ","
      q.breakable

      q.pp type
    end
  end

  ##
  # What does this dependency require?

  def requirement
    return @requirement if defined?(@requirement) && @requirement

    # @version_requirements and @version_requirement are legacy ivar
    # names, and supported here because older gems need to keep
    # working and Dependency doesn't implement marshal_dump and
    # marshal_load. In a happier world, this would be an
    # attr_accessor. The horrifying instance_variable_get you see
    # below is also the legacy of some old restructurings.
    #
    # Note also that because of backwards compatibility (loading new
    # gems in an old RubyGems installation), we can't add explicit
    # marshaling to this class until we want to make a big
    # break. Maybe 2.0.
    #
    # Children, define explicit marshal and unmarshal behavior for
    # public classes. Marshal formats are part of your public API.

    # REFACTOR: See above

    if defined?(@version_requirement) && @version_requirement
      version = @version_requirement.instance_variable_get :@version
      @version_requirement = nil
      @version_requirements = Gem::Requirement.new version
    end

    @requirement = @version_requirements if defined?(@version_requirements)
  end

  def requirements_list
    requirement.as_list
  end

  def to_s # :nodoc:
    if type != :runtime
      "#{name} (#{requirement}, #{type})"
    else
      "#{name} (#{requirement})"
    end
  end

  ##
  # Dependency type.

  def type
    @type ||= :runtime
  end

  def runtime?
    @type == :runtime || !@type
  end

  def ==(other) # :nodoc:
    Gem::Dependency === other &&
      name        == other.name &&
      type        == other.type &&
      requirement == other.requirement
  end

  ##
  # Dependencies are ordered by name.

  def <=>(other)
    name <=> other.name
  end

  ##
  # Uses this dependency as a pattern to compare to +other+. This
  # dependency will match if the name matches the other's name, and
  # other has only an equal version requirement that satisfies this
  # dependency.

  def =~(other)
    unless Gem::Dependency === other
      return unless other.respond_to?(:name) && other.respond_to?(:version)
      other = Gem::Dependency.new other.name, other.version
    end

    return false unless name === other.name

    reqs = other.requirement.requirements

    return false unless reqs.length == 1
    return false unless reqs.first.first == "="

    version = reqs.first.last

    requirement.satisfied_by? version
  end

  alias_method :===, :=~

  ##
  # :call-seq:
  #   dep.match? name          => true or false
  #   dep.match? name, version => true or false
  #   dep.match? spec          => true or false
  #
  # Does this dependency match the specification described by +name+ and
  # +version+ or match +spec+?
  #
  # NOTE:  Unlike #matches_spec? this method does not return true when the
  # version is a prerelease version unless this is a prerelease dependency.

  def match?(obj, version=nil, allow_prerelease=false)
    if !version
      name = obj.name
      version = obj.version
    else
      name = obj
    end

    return false unless self.name === name

    version = Gem::Version.new version

    return true if requirement.none? && !version.prerelease?
    return false if version.prerelease? &&
                    !allow_prerelease &&
                    !prerelease?

    requirement.satisfied_by? version
  end

  ##
  # Does this dependency match +spec+?
  #
  # NOTE:  This is not a convenience method.  Unlike #match? this method
  # returns true when +spec+ is a prerelease version even if this dependency
  # is not a prerelease dependency.

  def matches_spec?(spec)
    return false unless name === spec.name
    return true  if requirement.none?

    requirement.satisfied_by?(spec.version)
  end

  ##
  # Merges the requirements of +other+ into this dependency

  def merge(other)
    unless name == other.name
      raise ArgumentError,
            "#{self} and #{other} have different names"
    end

    default = Gem::Requirement.default
    self_req = requirement
    other_req = other.requirement

    return self.class.new name, self_req  if other_req == default
    return self.class.new name, other_req if self_req  == default

    self.class.new name, self_req.as_list.concat(other_req.as_list)
  end

  def matching_specs(platform_only = false)
    matches = Gem::Specification.find_all_by_name(name, requirement)

    if platform_only
      matches.reject! do |spec|
        spec.nil? || !Gem::Platform.match_spec?(spec)
      end
    end

    matches.reject(&:ignored?)
  end

  ##
  # True if the dependency will not always match the latest version.

  def specific?
    @requirement.specific?
  end

  def to_specs
    matches = matching_specs true

    # TODO: check Gem.activated_spec[self.name] in case matches falls outside

    if matches.empty?
      specs = Gem::Specification.stubs_for name

      if specs.empty?
        raise Gem::MissingSpecError.new name, requirement
      else
        raise Gem::MissingSpecVersionError.new name, requirement, specs
      end
    end

    # TODO: any other resolver validations should go here

    matches
  end

  def to_spec
    matches = to_specs.compact

    active = matches.find(&:activated?)
    return active if active

    unless prerelease?
      # Consider prereleases only as a fallback
      pre, matches = matches.partition {|spec| spec.version.prerelease? }
      matches = pre if matches.empty?
    end

    matches.first
  end

  def identity
    if prerelease?
      if specific?
        :complete
      else
        :abs_latest
      end
    elsif latest_version?
      :latest
    else
      :released
    end
  end

  def encode_with(coder) # :nodoc:
    coder.add "name", @name
    coder.add "requirement", @requirement
    coder.add "type", @type
    coder.add "prerelease", @prerelease
    coder.add "version_requirements", @version_requirements
  end
end
PK)J[]�B#��/share/rubygems/rubygems/specification_record.rbnu�[���# frozen_string_literal: true

module Gem
  class SpecificationRecord
    def self.dirs_from(paths)
      paths.map do |path|
        File.join(path, "specifications")
      end
    end

    def self.from_path(path)
      new(dirs_from([path]))
    end

    def initialize(dirs)
      @all = nil
      @stubs = nil
      @stubs_by_name = {}
      @spec_with_requirable_file = {}
      @active_stub_with_requirable_file = {}

      @dirs = dirs
    end

    # Sentinel object to represent "not found" stubs
    NOT_FOUND = Struct.new(:to_spec, :this).new
    private_constant :NOT_FOUND

    ##
    # Returns the list of all specifications in the record

    def all
      @all ||= stubs.map(&:to_spec)
    end

    ##
    # Returns a Gem::StubSpecification for every specification in the record

    def stubs
      @stubs ||= begin
        pattern = "*.gemspec"
        stubs = stubs_for_pattern(pattern, false)

        @stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
        stubs
      end
    end

    ##
    # Returns a Gem::StubSpecification for every specification in the record
    # named +name+ only returns stubs that match Gem.platforms

    def stubs_for(name)
      if @stubs
        @stubs_by_name[name] || []
      else
        @stubs_by_name[name] ||= stubs_for_pattern("#{name}-*.gemspec").select do |s|
          s.name == name
        end
      end
    end

    ##
    # Finds stub specifications matching a pattern in the record, optionally
    # filtering out specs not matching the current platform

    def stubs_for_pattern(pattern, match_platform = true)
      installed_stubs = installed_stubs(pattern)
      installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
      stubs = installed_stubs + Gem::Specification.default_stubs(pattern)
      Gem::Specification._resort!(stubs)
      stubs
    end

    ##
    # Adds +spec+ to the the record, keeping the collection properly sorted.

    def add_spec(spec)
      return if all.include? spec

      all << spec
      stubs << spec
      (@stubs_by_name[spec.name] ||= []) << spec

      Gem::Specification._resort!(@stubs_by_name[spec.name])
      Gem::Specification._resort!(stubs)
    end

    ##
    # Removes +spec+ from the record.

    def remove_spec(spec)
      all.delete spec.to_spec
      stubs.delete spec
      (@stubs_by_name[spec.name] || []).delete spec
    end

    ##
    # Sets the specs known by the record to +specs+.

    def all=(specs)
      @stubs_by_name = specs.group_by(&:name)
      @all = @stubs = specs
    end

    ##
    # Return full names of all specs in the record in sorted order.

    def all_names
      all.map(&:full_name)
    end

    include Enumerable

    ##
    # Enumerate every known spec.

    def each
      return enum_for(:each) unless block_given?

      all.each do |x|
        yield x
      end
    end

    ##
    # Returns every spec in the record that matches +name+ and optional +requirements+.

    def find_all_by_name(name, *requirements)
      req = Gem::Requirement.create(*requirements)
      env_req = Gem.env_requirement(name)

      matches = stubs_for(name).find_all do |spec|
        req.satisfied_by?(spec.version) && env_req.satisfied_by?(spec.version)
      end.map(&:to_spec)

      if name == "bundler" && !req.specific?
        require_relative "bundler_version_finder"
        Gem::BundlerVersionFinder.prioritize!(matches)
      end

      matches
    end

    ##
    # Return the best specification in the record that contains the file matching +path+.

    def find_by_path(path)
      path = path.dup.freeze
      spec = @spec_with_requirable_file[path] ||= stubs.find do |s|
        s.contains_requirable_file? path
      end || NOT_FOUND

      spec.to_spec
    end

    ##
    # Return the best specification in the record that contains the file
    # matching +path+ amongst the specs that are not activated.

    def find_inactive_by_path(path)
      stub = stubs.find do |s|
        next if s.activated?
        s.contains_requirable_file? path
      end
      stub&.to_spec
    end

    ##
    # Return the best specification in the record that contains the file
    # matching +path+, among those already activated.

    def find_active_stub_by_path(path)
      stub = @active_stub_with_requirable_file[path] ||= stubs.find do |s|
        s.activated? && s.contains_requirable_file?(path)
      end || NOT_FOUND

      stub.this
    end

    ##
    # Return the latest specs in the record, optionally including prerelease
    # specs if +prerelease+ is true.

    def latest_specs(prerelease)
      Gem::Specification._latest_specs stubs, prerelease
    end

    ##
    # Return the latest installed spec in the record for gem +name+.

    def latest_spec_for(name)
      latest_specs(true).find {|installed_spec| installed_spec.name == name }
    end

    private

    def installed_stubs(pattern)
      map_stubs(pattern) do |path, base_dir, gems_dir|
        Gem::StubSpecification.gemspec_stub(path, base_dir, gems_dir)
      end
    end

    def map_stubs(pattern)
      @dirs.flat_map do |dir|
        base_dir = File.dirname dir
        gems_dir = File.join base_dir, "gems"
        Gem::Specification.gemspec_stubs_in(dir, pattern) {|path| yield path, base_dir, gems_dir }
      end
    end
  end
end
PK)J[�ǀ���share/rubygems/rubygems/ext.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

##
# Classes for building C extensions live here.

module Gem::Ext; end

require_relative "ext/build_error"
require_relative "ext/builder"
require_relative "ext/configure_builder"
require_relative "ext/ext_conf_builder"
require_relative "ext/rake_builder"
require_relative "ext/cmake_builder"
require_relative "ext/cargo_builder"
PK)J[��@D�	�	-share/rubygems/rubygems/security/trust_dir.rbnu�[���# frozen_string_literal: true

##
# The TrustDir manages the trusted certificates for gem signature
# verification.

class Gem::Security::TrustDir
  ##
  # Default permissions for the trust directory and its contents

  DEFAULT_PERMISSIONS = {
    trust_dir: 0o700,
    trusted_cert: 0o600,
  }.freeze

  ##
  # The directory where trusted certificates will be stored.

  attr_reader :dir

  ##
  # Creates a new TrustDir using +dir+ where the directory and file
  # permissions will be checked according to +permissions+

  def initialize(dir, permissions = DEFAULT_PERMISSIONS)
    @dir = dir
    @permissions = permissions

    @digester = Gem::Security.create_digest
  end

  ##
  # Returns the path to the trusted +certificate+

  def cert_path(certificate)
    name_path certificate.subject
  end

  ##
  # Enumerates trusted certificates.

  def each_certificate
    return enum_for __method__ unless block_given?

    glob = File.join @dir, "*.pem"

    Dir[glob].each do |certificate_file|
      certificate = load_certificate certificate_file

      yield certificate, certificate_file
    rescue OpenSSL::X509::CertificateError
      next # HACK: warn
    end
  end

  ##
  # Returns the issuer certificate of the given +certificate+ if it exists in
  # the trust directory.

  def issuer_of(certificate)
    path = name_path certificate.issuer

    return unless File.exist? path

    load_certificate path
  end

  ##
  # Returns the path to the trusted certificate with the given ASN.1 +name+

  def name_path(name)
    digest = @digester.hexdigest name.to_s

    File.join @dir, "cert-#{digest}.pem"
  end

  ##
  # Loads the given +certificate_file+

  def load_certificate(certificate_file)
    pem = File.read certificate_file

    OpenSSL::X509::Certificate.new pem
  end

  ##
  # Add a certificate to trusted certificate list.

  def trust_cert(certificate)
    verify

    destination = cert_path certificate

    File.open destination, "wb", 0o600 do |io|
      io.write certificate.to_pem
      io.chmod(@permissions[:trusted_cert])
    end
  end

  ##
  # Make sure the trust directory exists.  If it does exist, make sure it's
  # actually a directory.  If not, then create it with the appropriate
  # permissions.

  def verify
    require "fileutils"
    if File.exist? @dir
      raise Gem::Security::Exception,
        "trust directory #{@dir} is not a directory" unless
          File.directory? @dir

      FileUtils.chmod 0o700, @dir
    else
      FileUtils.mkdir_p @dir, mode: @permissions[:trust_dir]
    end
  end
end
PK)J[ݯg���*share/rubygems/rubygems/security/signer.rbnu�[���# frozen_string_literal: true

##
# Basic OpenSSL-based package signing class.

require_relative "../user_interaction"

class Gem::Security::Signer
  include Gem::UserInteraction

  ##
  # The chain of certificates for signing including the signing certificate

  attr_accessor :cert_chain

  ##
  # The private key for the signing certificate

  attr_accessor :key

  ##
  # The digest algorithm used to create the signature

  attr_reader :digest_algorithm

  ##
  # The name of the digest algorithm, used to pull digests out of the hash by
  # name.

  attr_reader :digest_name # :nodoc:

  ##
  # Gem::Security::Signer options

  attr_reader :options

  DEFAULT_OPTIONS = {
    expiration_length_days: 365,
  }.freeze

  ##
  # Attempts to re-sign an expired cert with a given private key
  def self.re_sign_cert(expired_cert, expired_cert_path, private_key)
    return unless expired_cert.not_after < Time.now

    expiry = expired_cert.not_after.strftime("%Y%m%d%H%M%S")
    expired_cert_file = "#{File.basename(expired_cert_path)}.expired.#{expiry}"
    new_expired_cert_path = File.join(Gem.user_home, ".gem", expired_cert_file)

    Gem::Security.write(expired_cert, new_expired_cert_path)

    re_signed_cert = Gem::Security.re_sign(
      expired_cert,
      private_key,
      (Gem::Security::ONE_DAY * Gem.configuration.cert_expiration_length_days)
    )

    Gem::Security.write(re_signed_cert, expired_cert_path)

    yield(expired_cert_path, new_expired_cert_path) if block_given?
  end

  ##
  # Creates a new signer with an RSA +key+ or path to a key, and a certificate
  # +chain+ containing X509 certificates, encoding certificates or paths to
  # certificates.

  def initialize(key, cert_chain, passphrase = nil, options = {})
    @cert_chain = cert_chain
    @key        = key
    @passphrase = passphrase
    @options = DEFAULT_OPTIONS.merge(options)

    unless @key
      default_key = File.join Gem.default_key_path
      @key = default_key if File.exist? default_key
    end

    unless @cert_chain
      default_cert = File.join Gem.default_cert_path
      @cert_chain = [default_cert] if File.exist? default_cert
    end

    @digest_name      = Gem::Security::DIGEST_NAME
    @digest_algorithm = Gem::Security.create_digest(@digest_name)

    if @key && !@key.is_a?(OpenSSL::PKey::PKey)
      @key = OpenSSL::PKey.read(File.read(@key), @passphrase)
    end

    if @cert_chain
      @cert_chain = @cert_chain.compact.map do |cert|
        next cert if OpenSSL::X509::Certificate === cert

        cert = File.read cert if File.exist? cert

        OpenSSL::X509::Certificate.new cert
      end

      load_cert_chain
    end
  end

  ##
  # Extracts the full name of +cert+.  If the certificate has a subjectAltName
  # this value is preferred, otherwise the subject is used.

  def extract_name(cert) # :nodoc:
    subject_alt_name = cert.extensions.find {|e| e.oid == "subjectAltName" }

    if subject_alt_name
      /\Aemail:/ =~ subject_alt_name.value # rubocop:disable Performance/StartWith

      $' || subject_alt_name.value
    else
      cert.subject
    end
  end

  ##
  # Loads any missing issuers in the cert chain from the trusted certificates.
  #
  # If the issuer does not exist it is ignored as it will be checked later.

  def load_cert_chain # :nodoc:
    return if @cert_chain.empty?

    while @cert_chain.first.issuer.to_s != @cert_chain.first.subject.to_s do
      issuer = Gem::Security.trust_dir.issuer_of @cert_chain.first

      break unless issuer # cert chain is verified later

      @cert_chain.unshift issuer
    end
  end

  ##
  # Sign data with given digest algorithm

  def sign(data)
    return unless @key

    raise Gem::Security::Exception, "no certs provided" if @cert_chain.empty?

    if @cert_chain.length == 1 && @cert_chain.last.not_after < Time.now
      alert("Your certificate has expired, trying to re-sign it...")

      re_sign_key(
        expiration_length: (Gem::Security::ONE_DAY * options[:expiration_length_days])
      )
    end

    full_name = extract_name @cert_chain.last

    Gem::Security::SigningPolicy.verify @cert_chain, @key, {}, {}, full_name

    @key.sign @digest_algorithm.new, data
  end

  ##
  # Attempts to re-sign the private key if the signing certificate is expired.
  #
  # The key will be re-signed if:
  # * The expired certificate is self-signed
  # * The expired certificate is saved at ~/.gem/gem-public_cert.pem
  #   and the private key is saved at ~/.gem/gem-private_key.pem
  # * There is no file matching the expiry date at
  #   ~/.gem/gem-public_cert.pem.expired.%Y%m%d%H%M%S
  #
  # If the signing certificate can be re-signed the expired certificate will
  # be saved as ~/.gem/gem-public_cert.pem.expired.%Y%m%d%H%M%S where the
  # expiry time (not after) is used for the timestamp.

  def re_sign_key(expiration_length: Gem::Security::ONE_YEAR) # :nodoc:
    old_cert = @cert_chain.last

    disk_cert_path = File.join(Gem.default_cert_path)
    disk_cert = begin
                  File.read(disk_cert_path)
                rescue StandardError
                  nil
                end

    disk_key_path = File.join(Gem.default_key_path)
    disk_key = begin
                 OpenSSL::PKey.read(File.read(disk_key_path), @passphrase)
               rescue StandardError
                 nil
               end

    return unless disk_key

    if disk_key.to_pem == @key.to_pem && disk_cert == old_cert.to_pem
      expiry = old_cert.not_after.strftime("%Y%m%d%H%M%S")
      old_cert_file = "gem-public_cert.pem.expired.#{expiry}"
      old_cert_path = File.join(Gem.user_home, ".gem", old_cert_file)

      unless File.exist?(old_cert_path)
        Gem::Security.write(old_cert, old_cert_path)

        cert = Gem::Security.re_sign(old_cert, @key, expiration_length)

        Gem::Security.write(cert, disk_cert_path)

        alert("Your cert: #{disk_cert_path} has been auto re-signed with the key: #{disk_key_path}")
        alert("Your expired cert will be located at: #{old_cert_path}")

        @cert_chain = [cert]
      end
    end
  end
end
PK)J[���T11*share/rubygems/rubygems/security/policy.rbnu�[���# frozen_string_literal: true

require_relative "../user_interaction"

##
# A Gem::Security::Policy object encapsulates the settings for verifying
# signed gem files.  This is the base class.  You can either declare an
# instance of this or use one of the preset security policies in
# Gem::Security::Policies.

class Gem::Security::Policy
  include Gem::UserInteraction

  attr_reader :name

  attr_accessor :only_signed
  attr_accessor :only_trusted
  attr_accessor :verify_chain
  attr_accessor :verify_data
  attr_accessor :verify_root
  attr_accessor :verify_signer

  ##
  # Create a new Gem::Security::Policy object with the given mode and
  # options.

  def initialize(name, policy = {}, opt = {})
    @name = name

    @opt = opt

    # Default to security
    @only_signed   = true
    @only_trusted  = true
    @verify_chain  = true
    @verify_data   = true
    @verify_root   = true
    @verify_signer = true

    policy.each_pair do |key, val|
      case key
      when :verify_data   then @verify_data   = val
      when :verify_signer then @verify_signer = val
      when :verify_chain  then @verify_chain  = val
      when :verify_root   then @verify_root   = val
      when :only_trusted  then @only_trusted  = val
      when :only_signed   then @only_signed   = val
      end
    end
  end

  ##
  # Verifies each certificate in +chain+ has signed the following certificate
  # and is valid for the given +time+.

  def check_chain(chain, time)
    raise Gem::Security::Exception, "missing signing chain" unless chain
    raise Gem::Security::Exception, "empty signing chain" if chain.empty?

    begin
      chain.each_cons 2 do |issuer, cert|
        check_cert cert, issuer, time
      end

      true
    rescue Gem::Security::Exception => e
      raise Gem::Security::Exception, "invalid signing chain: #{e.message}"
    end
  end

  ##
  # Verifies that +data+ matches the +signature+ created by +public_key+ and
  # the +digest+ algorithm.

  def check_data(public_key, digest, signature, data)
    raise Gem::Security::Exception, "invalid signature" unless
      public_key.verify digest, signature, data.digest

    true
  end

  ##
  # Ensures that +signer+ is valid for +time+ and was signed by the +issuer+.
  # If the +issuer+ is +nil+ no verification is performed.

  def check_cert(signer, issuer, time)
    raise Gem::Security::Exception, "missing signing certificate" unless
      signer

    message = "certificate #{signer.subject}"

    if (not_before = signer.not_before) && not_before > time
      raise Gem::Security::Exception,
            "#{message} not valid before #{not_before}"
    end

    if (not_after = signer.not_after) && not_after < time
      raise Gem::Security::Exception, "#{message} not valid after #{not_after}"
    end

    if issuer && !signer.verify(issuer.public_key)
      raise Gem::Security::Exception,
            "#{message} was not issued by #{issuer.subject}"
    end

    true
  end

  ##
  # Ensures the public key of +key+ matches the public key in +signer+

  def check_key(signer, key)
    unless signer && key
      return true unless @only_signed

      raise Gem::Security::Exception, "missing key or signature"
    end

    raise Gem::Security::Exception,
      "certificate #{signer.subject} does not match the signing key" unless
        signer.check_private_key(key)

    true
  end

  ##
  # Ensures the root certificate in +chain+ is self-signed and valid for
  # +time+.

  def check_root(chain, time)
    raise Gem::Security::Exception, "missing signing chain" unless chain

    root = chain.first

    raise Gem::Security::Exception, "missing root certificate" unless root

    raise Gem::Security::Exception,
          "root certificate #{root.subject} is not self-signed " \
          "(issuer #{root.issuer})" if
      root.issuer != root.subject

    check_cert root, root, time
  end

  ##
  # Ensures the root of +chain+ has a trusted certificate in +trust_dir+ and
  # the digests of the two certificates match according to +digester+

  def check_trust(chain, digester, trust_dir)
    raise Gem::Security::Exception, "missing signing chain" unless chain

    root = chain.first

    raise Gem::Security::Exception, "missing root certificate" unless root

    path = Gem::Security.trust_dir.cert_path root

    unless File.exist? path
      message = "root cert #{root.subject} is not trusted".dup

      message << " (root of signing cert #{chain.last.subject})" if
        chain.length > 1

      raise Gem::Security::Exception, message
    end

    save_cert = OpenSSL::X509::Certificate.new File.read path
    save_dgst = digester.digest save_cert.public_key.to_pem

    pkey_str = root.public_key.to_pem
    cert_dgst = digester.digest pkey_str

    raise Gem::Security::Exception,
          "trusted root certificate #{root.subject} checksum " \
          "does not match signing root certificate checksum" unless
      save_dgst == cert_dgst

    true
  end

  ##
  # Extracts the email or subject from +certificate+

  def subject(certificate) # :nodoc:
    certificate.extensions.each do |extension|
      next unless extension.oid == "subjectAltName"

      return extension.value
    end

    certificate.subject.to_s
  end

  def inspect # :nodoc:
    format("[Policy: %s - data: %p signer: %p chain: %p root: %p " \
     "signed-only: %p trusted-only: %p]", @name, @verify_chain, @verify_data, @verify_root, @verify_signer, @only_signed, @only_trusted)
  end

  ##
  # For +full_name+, verifies the certificate +chain+ is valid, the +digests+
  # match the signatures +signatures+ created by the signer depending on the
  # +policy+ settings.
  #
  # If +key+ is given it is used to validate the signing certificate.

  def verify(chain, key = nil, digests = {}, signatures = {}, full_name = "(unknown)")
    if signatures.empty?
      if @only_signed
        raise Gem::Security::Exception,
          "unsigned gems are not allowed by the #{name} policy"
      elsif digests.empty?
        # lack of signatures is irrelevant if there is nothing to check
        # against
      else
        alert_warning "#{full_name} is not signed"
        return
      end
    end

    opt       = @opt
    digester  = Gem::Security.create_digest
    trust_dir = opt[:trust_dir]
    time      = Time.now

    _, signer_digests = digests.find do |_algorithm, file_digests|
      file_digests.values.first.name == Gem::Security::DIGEST_NAME
    end

    if @verify_data
      raise Gem::Security::Exception, "no digests provided (probable bug)" if
        signer_digests.nil? || signer_digests.empty?
    else
      signer_digests = {}
    end

    signer = chain.last

    check_key signer, key if key

    check_cert signer, nil, time if @verify_signer

    check_chain chain, time if @verify_chain

    check_root chain, time if @verify_root

    if @only_trusted
      check_trust chain, digester, trust_dir
    elsif signatures.empty? && digests.empty?
      # trust is irrelevant if there's no signatures to verify
    else
      alert_warning "#{subject signer} is not trusted for #{full_name}"
    end

    signatures.each do |file, _|
      digest = signer_digests[file]

      raise Gem::Security::Exception, "missing digest for #{file}" unless
        digest
    end

    signer_digests.each do |file, digest|
      signature = signatures[file]

      raise Gem::Security::Exception, "missing signature for #{file}" unless
        signature

      check_data signer.public_key, digester, signature, digest if @verify_data
    end

    true
  end

  ##
  # Extracts the certificate chain from the +spec+ and calls #verify to ensure
  # the signatures and certificate chain is valid according to the policy..

  def verify_signatures(spec, digests, signatures)
    chain = spec.cert_chain.map do |cert_pem|
      OpenSSL::X509::Certificate.new cert_pem
    end

    verify chain, nil, digests, signatures, spec.full_name

    true
  end

  alias_method :to_s, :name # :nodoc:
end
PK)J[�ҽ�??,share/rubygems/rubygems/security/policies.rbnu�[���# frozen_string_literal: true

module Gem::Security
  ##
  # No security policy: all package signature checks are disabled.

  NoSecurity = Policy.new(
    "No Security",
    verify_data: false,
    verify_signer: false,
    verify_chain: false,
    verify_root: false,
    only_trusted: false,
    only_signed: false
  )

  ##
  # AlmostNo security policy: only verify that the signing certificate is the
  # one that actually signed the data.  Make no attempt to verify the signing
  # certificate chain.
  #
  # This policy is basically useless. better than nothing, but can still be
  # easily spoofed, and is not recommended.

  AlmostNoSecurity = Policy.new(
    "Almost No Security",
    verify_data: true,
    verify_signer: false,
    verify_chain: false,
    verify_root: false,
    only_trusted: false,
    only_signed: false
  )

  ##
  # Low security policy: only verify that the signing certificate is actually
  # the gem signer, and that the signing certificate is valid.
  #
  # This policy is better than nothing, but can still be easily spoofed, and
  # is not recommended.

  LowSecurity = Policy.new(
    "Low Security",
    verify_data: true,
    verify_signer: true,
    verify_chain: false,
    verify_root: false,
    only_trusted: false,
    only_signed: false
  )

  ##
  # Medium security policy: verify the signing certificate, verify the signing
  # certificate chain all the way to the root certificate, and only trust root
  # certificates that we have explicitly allowed trust for.
  #
  # This security policy is reasonable, but it allows unsigned packages, so a
  # malicious person could simply delete the package signature and pass the
  # gem off as unsigned.

  MediumSecurity = Policy.new(
    "Medium Security",
    verify_data: true,
    verify_signer: true,
    verify_chain: true,
    verify_root: true,
    only_trusted: true,
    only_signed: false
  )

  ##
  # High security policy: only allow signed gems to be installed, verify the
  # signing certificate, verify the signing certificate chain all the way to
  # the root certificate, and only trust root certificates that we have
  # explicitly allowed trust for.
  #
  # This security policy is significantly more difficult to bypass, and offers
  # a reasonable guarantee that the contents of the gem have not been altered.

  HighSecurity = Policy.new(
    "High Security",
    verify_data: true,
    verify_signer: true,
    verify_chain: true,
    verify_root: true,
    only_trusted: true,
    only_signed: true
  )

  ##
  # Policy used to verify a certificate and key when signing a gem

  SigningPolicy = Policy.new(
    "Signing Policy",
    verify_data: false,
    verify_signer: true,
    verify_chain: true,
    verify_root: true,
    only_trusted: false,
    only_signed: false
  )

  ##
  # Hash of configured security policies

  Policies = {
    "NoSecurity" => NoSecurity,
    "AlmostNoSecurity" => AlmostNoSecurity,
    "LowSecurity" => LowSecurity,
    "MediumSecurity" => MediumSecurity,
    "HighSecurity" => HighSecurity,
    # SigningPolicy is not intended for use by `gem -P` so do not list it
  }.freeze
end
PK)J[�z�ʄ�!share/rubygems/rubygems/doctor.rbnu�[���# frozen_string_literal: true

require_relative "../rubygems"
require_relative "user_interaction"

##
# Cleans up after a partially-failed uninstall or for an invalid
# Gem::Specification.
#
# If a specification was removed by hand this will remove any remaining files.
#
# If a corrupt specification was installed this will clean up warnings by
# removing the bogus specification.

class Gem::Doctor
  include Gem::UserInteraction

  ##
  # Maps a gem subdirectory to the files that are expected to exist in the
  # subdirectory.

  REPOSITORY_EXTENSION_MAP = [ # :nodoc:
    ["specifications", ".gemspec"],
    ["build_info",     ".info"],
    ["cache",          ".gem"],
    ["doc",            ""],
    ["extensions",     ""],
    ["gems",           ""],
    ["plugins",        ""],
  ].freeze

  missing =
    Gem::REPOSITORY_SUBDIRECTORIES.sort -
    REPOSITORY_EXTENSION_MAP.map {|(k,_)| k }.sort

  raise "Update REPOSITORY_EXTENSION_MAP, missing: #{missing.join ", "}" unless
    missing.empty?

  ##
  # Creates a new Gem::Doctor that will clean up +gem_repository+.  Only one
  # gem repository may be cleaned at a time.
  #
  # If +dry_run+ is true no files or directories will be removed.

  def initialize(gem_repository, dry_run = false)
    @gem_repository = gem_repository
    @dry_run        = dry_run

    @installed_specs = nil
  end

  ##
  # Specs installed in this gem repository

  def installed_specs # :nodoc:
    @installed_specs ||= Gem::Specification.map(&:full_name)
  end

  ##
  # Are we doctoring a gem repository?

  def gem_repository?
    !installed_specs.empty?
  end

  ##
  # Cleans up uninstalled files and invalid gem specifications

  def doctor
    @orig_home = Gem.dir
    @orig_path = Gem.path

    say "Checking #{@gem_repository}"

    Gem.use_paths @gem_repository.to_s

    unless gem_repository?
      say "This directory does not appear to be a RubyGems repository, " \
          "skipping"
      say
      return
    end

    doctor_children

    say
  ensure
    Gem.use_paths @orig_home, *@orig_path
  end

  ##
  # Cleans up children of this gem repository

  def doctor_children # :nodoc:
    REPOSITORY_EXTENSION_MAP.each do |sub_directory, extension|
      doctor_child sub_directory, extension
    end
  end

  ##
  # Removes files in +sub_directory+ with +extension+

  def doctor_child(sub_directory, extension) # :nodoc:
    directory = File.join(@gem_repository, sub_directory)

    Dir.entries(directory).sort.each do |ent|
      next if [".", ".."].include?(ent)

      child = File.join(directory, ent)
      next unless File.exist?(child)

      basename = File.basename(child, extension)
      next if installed_specs.include? basename
      next if /^rubygems-\d/.match?(basename)
      next if sub_directory == "specifications" && basename == "default"
      next if sub_directory == "plugins" && Gem.plugin_suffix_regexp =~ (basename)

      type = File.directory?(child) ? "directory" : "file"

      action = if @dry_run
        "Extra"
      else
        FileUtils.rm_r(child)
        "Removed"
      end

      say "#{action} #{type} #{sub_directory}/#{File.basename(child)}"
    end
  rescue Errno::ENOENT
    # ignore
  end
end
PK)J[��(++$share/rubygems/rubygems/safe_yaml.rbnu�[���# frozen_string_literal: true

module Gem
  ###
  # This module is used for safely loading YAML specs from a gem.  The
  # `safe_load` method defined on this module is specifically designed for
  # loading Gem specifications.  For loading other YAML safely, please see
  # Psych.safe_load

  module SafeYAML
    PERMITTED_CLASSES = %w[
      Symbol
      Time
      Date
      Gem::Dependency
      Gem::Platform
      Gem::Requirement
      Gem::Specification
      Gem::Version
      Gem::Version::Requirement
    ].freeze

    PERMITTED_SYMBOLS = %w[
      development
      runtime
    ].freeze

    @aliases_enabled = true
    def self.aliases_enabled=(value) # :nodoc:
      @aliases_enabled = !!value
    end

    def self.aliases_enabled? # :nodoc:
      @aliases_enabled
    end

    def self.safe_load(input)
      ::Psych.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases: @aliases_enabled)
    end

    def self.load(input)
      ::Psych.safe_load(input, permitted_classes: [::Symbol])
    end
  end
end
PK)J[ދL�<A<A&share/rubygems/rubygems/config_file.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "user_interaction"
require "rbconfig"

##
# Gem::ConfigFile RubyGems options and gem command options from gemrc.
#
# gemrc is a YAML file that uses strings to match gem command arguments and
# symbols to match RubyGems options.
#
# Gem command arguments use a String key that matches the command name and
# allow you to specify default arguments:
#
#   install: --no-rdoc --no-ri
#   update: --no-rdoc --no-ri
#
# You can use <tt>gem:</tt> to set default arguments for all commands.
#
# RubyGems options use symbol keys.  Valid options are:
#
# +:backtrace+:: See #backtrace
# +:sources+:: Sets Gem::sources
# +:verbose+:: See #verbose
# +:concurrent_downloads+:: See #concurrent_downloads
#
# gemrc files may exist in various locations and are read and merged in
# the following order:
#
# - system wide (/etc/gemrc)
# - per user (~/.gemrc)
# - per environment (gemrc files listed in the GEMRC environment variable)

class Gem::ConfigFile
  include Gem::UserInteraction

  DEFAULT_BACKTRACE = true
  DEFAULT_BULK_THRESHOLD = 1000
  DEFAULT_VERBOSITY = true
  DEFAULT_UPDATE_SOURCES = true
  DEFAULT_CONCURRENT_DOWNLOADS = 8
  DEFAULT_CERT_EXPIRATION_LENGTH_DAYS = 365
  DEFAULT_IPV4_FALLBACK_ENABLED = false
  # TODO: Use false as default value for this option in RubyGems 4.0
  DEFAULT_INSTALL_EXTENSION_IN_LIB = true

  ##
  # For Ruby packagers to set configuration defaults.  Set in
  # rubygems/defaults/operating_system.rb

  OPERATING_SYSTEM_DEFAULTS = Gem.operating_system_defaults

  ##
  # For Ruby implementers to set configuration defaults.  Set in
  # rubygems/defaults/#{RUBY_ENGINE}.rb

  PLATFORM_DEFAULTS = Gem.platform_defaults

  # :stopdoc:

  SYSTEM_CONFIG_PATH =
    begin
      require "etc"
      Etc.sysconfdir
    rescue LoadError, NoMethodError
      RbConfig::CONFIG["sysconfdir"] || "/etc"
    end

  # :startdoc:

  SYSTEM_WIDE_CONFIG_FILE = File.join SYSTEM_CONFIG_PATH, "gemrc"

  ##
  # List of arguments supplied to the config file object.

  attr_reader :args

  ##
  # Where to look for gems (deprecated)

  attr_accessor :path

  ##
  # Where to install gems (deprecated)

  attr_accessor :home

  ##
  # True if we print backtraces on errors.

  attr_writer :backtrace

  ##
  # Bulk threshold value.  If the number of missing gems are above this
  # threshold value, then a bulk download technique is used.  (deprecated)

  attr_accessor :bulk_threshold

  ##
  # Verbose level of output:
  # * false -- No output
  # * true -- Normal output
  # * :loud -- Extra output

  attr_accessor :verbose

  ##
  # Number of gem downloads that should be performed concurrently.

  attr_accessor :concurrent_downloads

  ##
  # True if we want to update the SourceInfoCache every time, false otherwise

  attr_accessor :update_sources

  ##
  # True if we want to force specification of gem server when pushing a gem

  attr_accessor :disable_default_gem_server

  # openssl verify mode value, used for remote https connection

  attr_reader :ssl_verify_mode

  ##
  # Path name of directory or file of openssl CA certificate, used for remote
  # https connection

  attr_accessor :ssl_ca_cert

  ##
  # sources to look for gems
  attr_accessor :sources

  ##
  # Expiration length to sign a certificate

  attr_accessor :cert_expiration_length_days

  ##
  # Install extensions into lib as well as into the extension directory.

  attr_accessor :install_extension_in_lib

  ##
  # == Experimental ==
  # Fallback to IPv4 when IPv6 is not reachable or slow (default: false)

  attr_accessor :ipv4_fallback_enabled

  ##
  # Path name of directory or file of openssl client certificate, used for remote https connection with client authentication

  attr_reader :ssl_client_cert

  ##
  # Create the config file object.  +args+ is the list of arguments
  # from the command line.
  #
  # The following command line options are handled early here rather
  # than later at the time most command options are processed.
  #
  # <tt>--config-file</tt>, <tt>--config-file==NAME</tt>::
  #   Obviously these need to be handled by the ConfigFile object to ensure we
  #   get the right config file.
  #
  # <tt>--backtrace</tt>::
  #   Backtrace needs to be turned on early so that errors before normal
  #   option parsing can be properly handled.
  #
  # <tt>--debug</tt>::
  #   Enable Ruby level debug messages.  Handled early for the same reason as
  #   --backtrace.
  #--
  # TODO: parse options upstream, pass in options directly

  def initialize(args)
    set_config_file_name(args)

    @backtrace = DEFAULT_BACKTRACE
    @bulk_threshold = DEFAULT_BULK_THRESHOLD
    @verbose = DEFAULT_VERBOSITY
    @update_sources = DEFAULT_UPDATE_SOURCES
    @concurrent_downloads = DEFAULT_CONCURRENT_DOWNLOADS
    @cert_expiration_length_days = DEFAULT_CERT_EXPIRATION_LENGTH_DAYS
    @install_extension_in_lib = DEFAULT_INSTALL_EXTENSION_IN_LIB
    @ipv4_fallback_enabled = ENV["IPV4_FALLBACK_ENABLED"] == "true" || DEFAULT_IPV4_FALLBACK_ENABLED

    operating_system_config = Marshal.load Marshal.dump(OPERATING_SYSTEM_DEFAULTS)
    platform_config = Marshal.load Marshal.dump(PLATFORM_DEFAULTS)
    system_config = load_file SYSTEM_WIDE_CONFIG_FILE
    user_config = load_file config_file_name

    environment_config = (ENV["GEMRC"] || "").
      split(File::PATH_SEPARATOR).inject({}) do |result, file|
        result.merge load_file file
      end

    @hash = operating_system_config.merge platform_config
    unless args.index "--norc"
      @hash = @hash.merge system_config
      @hash = @hash.merge user_config
      @hash = @hash.merge environment_config
    end

    @hash.transform_keys! do |k|
      # gemhome and gempath are not working with symbol keys
      if %w[backtrace bulk_threshold verbose update_sources cert_expiration_length_days
            install_extension_in_lib ipv4_fallback_enabled sources disable_default_gem_server
            ssl_verify_mode ssl_ca_cert ssl_client_cert].include?(k)
        k.to_sym
      else
        k
      end
    end

    # HACK: these override command-line args, which is bad
    @backtrace                   = @hash[:backtrace]                   if @hash.key? :backtrace
    @bulk_threshold              = @hash[:bulk_threshold]              if @hash.key? :bulk_threshold
    @verbose                     = @hash[:verbose]                     if @hash.key? :verbose
    @update_sources              = @hash[:update_sources]              if @hash.key? :update_sources
    # TODO: We should handle concurrent_downloads same as other options
    @cert_expiration_length_days = @hash[:cert_expiration_length_days] if @hash.key? :cert_expiration_length_days
    @install_extension_in_lib    = @hash[:install_extension_in_lib]    if @hash.key? :install_extension_in_lib
    @ipv4_fallback_enabled       = @hash[:ipv4_fallback_enabled]       if @hash.key? :ipv4_fallback_enabled

    @home                        = @hash[:gemhome]                     if @hash.key? :gemhome
    @path                        = @hash[:gempath]                     if @hash.key? :gempath
    @sources                     = @hash[:sources]                     if @hash.key? :sources
    @disable_default_gem_server  = @hash[:disable_default_gem_server]  if @hash.key? :disable_default_gem_server
    @ssl_verify_mode             = @hash[:ssl_verify_mode]             if @hash.key? :ssl_verify_mode
    @ssl_ca_cert                 = @hash[:ssl_ca_cert]                 if @hash.key? :ssl_ca_cert
    @ssl_client_cert             = @hash[:ssl_client_cert]             if @hash.key? :ssl_client_cert

    @api_keys         = nil
    @rubygems_api_key = nil

    handle_arguments args
  end

  ##
  # Hash of RubyGems.org and alternate API keys

  def api_keys
    load_api_keys unless @api_keys

    @api_keys
  end

  ##
  # Checks the permissions of the credentials file.  If they are not 0600 an
  # error message is displayed and RubyGems aborts.

  def check_credentials_permissions
    return if Gem.win_platform? # windows doesn't write 0600 as 0600
    return unless File.exist? credentials_path

    existing_permissions = File.stat(credentials_path).mode & 0o777

    return if existing_permissions == 0o600

    alert_error <<-ERROR
Your gem push credentials file located at:

\t#{credentials_path}

has file permissions of 0#{existing_permissions.to_s 8} but 0600 is required.

To fix this error run:

\tchmod 0600 #{credentials_path}

You should reset your credentials at:

\thttps://rubygems.org/profile/edit

if you believe they were disclosed to a third party.
    ERROR

    terminate_interaction 1
  end

  ##
  # Location of RubyGems.org credentials

  def credentials_path
    credentials = File.join Gem.user_home, ".gem", "credentials"
    if File.exist? credentials
      credentials
    else
      File.join Gem.data_home, "gem", "credentials"
    end
  end

  def load_api_keys
    check_credentials_permissions

    @api_keys = if File.exist? credentials_path
      load_file(credentials_path)
    else
      @hash
    end

    if @api_keys.key? :rubygems_api_key
      @rubygems_api_key    = @api_keys[:rubygems_api_key]
      @api_keys[:rubygems] = @api_keys.delete :rubygems_api_key unless
        @api_keys.key? :rubygems
    end
  end

  ##
  # Returns the RubyGems.org API key

  def rubygems_api_key
    load_api_keys unless @rubygems_api_key

    @rubygems_api_key
  end

  ##
  # Sets the RubyGems.org API key to +api_key+

  def rubygems_api_key=(api_key)
    set_api_key :rubygems_api_key, api_key

    @rubygems_api_key = api_key
  end

  ##
  # Set a specific host's API key to +api_key+

  def set_api_key(host, api_key)
    check_credentials_permissions

    config = load_file(credentials_path).merge(host => api_key)

    dirname = File.dirname credentials_path
    require "fileutils"
    FileUtils.mkdir_p(dirname)

    permissions = 0o600 & (~File.umask)
    File.open(credentials_path, "w", permissions) do |f|
      f.write self.class.dump_with_rubygems_yaml(config)
    end

    load_api_keys # reload
  end

  ##
  # Remove the +~/.gem/credentials+ file to clear all the current sessions.

  def unset_api_key!
    return false unless File.exist?(credentials_path)

    File.delete(credentials_path)
  end

  def load_file(filename)
    yaml_errors = [ArgumentError]

    return {} unless filename && !filename.empty? && File.exist?(filename)

    begin
      config = self.class.load_with_rubygems_config_hash(File.read(filename))
      if config.keys.any? {|k| k.to_s.gsub(%r{https?:\/\/}, "").include?(": ") }
        warn "Failed to load #{filename} because it doesn't contain valid YAML hash"
        return {}
      else
        return config
      end
    rescue *yaml_errors => e
      warn "Failed to load #{filename}, #{e}"
    rescue Errno::EACCES
      warn "Failed to load #{filename} due to permissions problem."
    end

    {}
  end

  # True if the backtrace option has been specified, or debug is on.
  def backtrace
    @backtrace || $DEBUG
  end

  # Check state file is writable. Creates empty file if not present to ensure we can write to it.
  def state_file_writable?
    if File.exist?(state_file_name)
      File.writable?(state_file_name)
    else
      require "fileutils"
      FileUtils.mkdir_p File.dirname(state_file_name)
      File.open(state_file_name, "w") {}
      true
    end
  rescue Errno::EACCES
    false
  end

  # The name of the configuration file.
  def config_file_name
    @config_file_name || Gem.config_file
  end

  # The name of the state file.
  def state_file_name
    Gem.state_file
  end

  # Reads time of last update check from state file
  def last_update_check
    if File.readable?(state_file_name)
      File.read(state_file_name).to_i
    else
      0
    end
  end

  # Writes time of last update check to state file
  def last_update_check=(timestamp)
    File.write(state_file_name, timestamp.to_s) if state_file_writable?
  end

  # Delegates to @hash
  def each(&block)
    hash = @hash.dup
    hash.delete :update_sources
    hash.delete :verbose
    hash.delete :backtrace
    hash.delete :bulk_threshold

    yield :update_sources, @update_sources
    yield :verbose, @verbose
    yield :backtrace, @backtrace
    yield :bulk_threshold, @bulk_threshold

    yield "config_file_name", @config_file_name if @config_file_name

    hash.each(&block)
  end

  # Handle the command arguments.
  def handle_arguments(arg_list)
    @args = []

    arg_list.each do |arg|
      case arg
      when /^--(backtrace|traceback)$/ then
        @backtrace = true
      when /^--debug$/ then
        $DEBUG = true

        warn "NOTE:  Debugging mode prints all exceptions even when rescued"
      else
        @args << arg
      end
    end
  end

  # Really verbose mode gives you extra output.
  def really_verbose
    case verbose
    when true, false, nil then
      false
    else
      true
    end
  end

  # to_yaml only overwrites things you can't override on the command line.
  def to_yaml # :nodoc:
    yaml_hash = {}
    yaml_hash[:backtrace] = @hash.fetch(:backtrace, DEFAULT_BACKTRACE)
    yaml_hash[:bulk_threshold] = @hash.fetch(:bulk_threshold, DEFAULT_BULK_THRESHOLD)
    yaml_hash[:sources] = Gem.sources.to_a
    yaml_hash[:update_sources] = @hash.fetch(:update_sources, DEFAULT_UPDATE_SOURCES)
    yaml_hash[:verbose] = @hash.fetch(:verbose, DEFAULT_VERBOSITY)

    yaml_hash[:concurrent_downloads] =
      @hash.fetch(:concurrent_downloads, DEFAULT_CONCURRENT_DOWNLOADS)

    yaml_hash[:install_extension_in_lib] =
      @hash.fetch(:install_extension_in_lib, DEFAULT_INSTALL_EXTENSION_IN_LIB)

    yaml_hash[:ssl_verify_mode] =
      @hash[:ssl_verify_mode] if @hash.key? :ssl_verify_mode

    yaml_hash[:ssl_ca_cert] =
      @hash[:ssl_ca_cert] if @hash.key? :ssl_ca_cert

    yaml_hash[:ssl_client_cert] =
      @hash[:ssl_client_cert] if @hash.key? :ssl_client_cert

    keys = yaml_hash.keys.map(&:to_s)
    keys << "debug"
    re = Regexp.union(*keys)

    @hash.each do |key, value|
      key = key.to_s
      next if key&.match?(re)
      yaml_hash[key.to_s] = value
    end

    self.class.dump_with_rubygems_yaml(yaml_hash)
  end

  # Writes out this config file, replacing its source.
  def write
    require "fileutils"
    FileUtils.mkdir_p File.dirname(config_file_name)

    File.open config_file_name, "w" do |io|
      io.write to_yaml
    end
  end

  # Return the configuration information for +key+.
  def [](key)
    @hash[key] || @hash[key.to_s]
  end

  # Set configuration option +key+ to +value+.
  def []=(key, value)
    @hash[key] = value
  end

  def ==(other) # :nodoc:
    self.class === other &&
      @backtrace == other.backtrace &&
      @bulk_threshold == other.bulk_threshold &&
      @verbose == other.verbose &&
      @update_sources == other.update_sources &&
      @hash == other.hash
  end

  attr_reader :hash
  protected :hash

  def self.dump_with_rubygems_yaml(content)
    content.transform_keys! do |k|
      k.is_a?(Symbol) ? ":#{k}" : k
    end

    require_relative "yaml_serializer"
    Gem::YAMLSerializer.dump(content)
  end

  def self.load_with_rubygems_config_hash(yaml)
    require_relative "yaml_serializer"

    content = Gem::YAMLSerializer.load(yaml)
    deep_transform_config_keys!(content)
  end

  private

  def self.deep_transform_config_keys!(config)
    config.transform_keys! do |k|
      if k.match?(/\A:(.*)\Z/)
        k[1..-1].to_sym
      elsif k.include?("__") || k.match?(%r{/\Z})
        if k.is_a?(Symbol)
          k.to_s.gsub(/__/,".").gsub(%r{/\Z}, "").to_sym
        else
          k.dup.gsub(/__/,".").gsub(%r{/\Z}, "")
        end
      else
        k
      end
    end

    config.transform_values! do |v|
      if v.is_a?(String)
        if v.match?(/\A:(.*)\Z/)
          v[1..-1].to_sym
        elsif v.match?(/\A[+-]?\d+\Z/)
          v.to_i
        elsif v.match?(/\Atrue|false\Z/)
          v == "true"
        elsif v.empty?
          nil
        else
          v
        end
      elsif v.empty?
        nil
      elsif v.is_a?(Hash)
        deep_transform_config_keys!(v)
      else
        v
      end
    end

    config
  end

  def set_config_file_name(args)
    @config_file_name = ENV["GEMRC"]
    need_config_file_name = false

    args.each do |arg|
      if need_config_file_name
        @config_file_name = arg
        need_config_file_name = false
      elsif arg =~ /^--config-file=(.*)/
        @config_file_name = $1
      elsif /^--config-file$/.match?(arg)
        need_config_file_name = true
      end
    end
  end
end
PK)J[�^	1QKQK"share/rubygems/rubygems/package.rbnu�[���# frozen_string_literal: true

# rubocop:disable Style/AsciiComments

# Copyright (C) 2004 Mauricio Julio Fernández Pradier
# See LICENSE.txt for additional licensing information.

# rubocop:enable Style/AsciiComments

require_relative "security"
require_relative "user_interaction"

##
# Example using a Gem::Package
#
# Builds a .gem file given a Gem::Specification. A .gem file is a tarball
# which contains a data.tar.gz, metadata.gz, checksums.yaml.gz and possibly
# signatures.
#
#   require 'rubygems'
#   require 'rubygems/package'
#
#   spec = Gem::Specification.new do |s|
#     s.summary = "Ruby based make-like utility."
#     s.name = 'rake'
#     s.version = PKG_VERSION
#     s.requirements << 'none'
#     s.files = PKG_FILES
#     s.description = <<-EOF
#   Rake is a Make-like program implemented in Ruby. Tasks
#   and dependencies are specified in standard Ruby syntax.
#     EOF
#   end
#
#   Gem::Package.build spec
#
# Reads a .gem file.
#
#   require 'rubygems'
#   require 'rubygems/package'
#
#   the_gem = Gem::Package.new(path_to_dot_gem)
#   the_gem.contents # get the files in the gem
#   the_gem.extract_files destination_directory # extract the gem into a directory
#   the_gem.spec # get the spec out of the gem
#   the_gem.verify # check the gem is OK (contains valid gem specification, contains a not corrupt contents archive)
#
# #files are the files in the .gem tar file, not the Ruby files in the gem
# #extract_files and #contents automatically call #verify

class Gem::Package
  include Gem::UserInteraction

  class Error < Gem::Exception; end

  class FormatError < Error
    attr_reader :path

    def initialize(message, source = nil)
      if source
        @path = source.is_a?(String) ? source : source.path

        message += " in #{path}" if path
      end

      super message
    end
  end

  class PathError < Error
    def initialize(destination, destination_dir)
      super format("installing into parent path %s of %s is not allowed", destination, destination_dir)
    end
  end

  class SymlinkError < Error
    def initialize(name, destination, destination_dir)
      super format("installing symlink '%s' pointing to parent path %s of %s is not allowed", name, destination, destination_dir)
    end
  end

  class NonSeekableIO < Error; end

  class TooLongFileName < Error; end

  ##
  # Raised when a tar file is corrupt

  class TarInvalidError < Error; end

  attr_accessor :build_time # :nodoc:

  ##
  # Checksums for the contents of the package

  attr_reader :checksums

  ##
  # The files in this package.  This is not the contents of the gem, just the
  # files in the top-level container.

  attr_reader :files

  ##
  # Reference to the gem being packaged.

  attr_reader :gem

  ##
  # The security policy used for verifying the contents of this package.

  attr_accessor :security_policy

  ##
  # Sets the Gem::Specification to use to build this package.

  attr_writer :spec

  ##
  # Permission for directories
  attr_accessor :dir_mode

  ##
  # Permission for program files
  attr_accessor :prog_mode

  ##
  # Permission for other files
  attr_accessor :data_mode

  def self.build(spec, skip_validation = false, strict_validation = false, file_name = nil)
    gem_file = file_name || spec.file_name

    package = new gem_file
    package.spec = spec
    package.build skip_validation, strict_validation

    gem_file
  end

  ##
  # Creates a new Gem::Package for the file at +gem+. +gem+ can also be
  # provided as an IO object.
  #
  # If +gem+ is an existing file in the old format a Gem::Package::Old will be
  # returned.

  def self.new(gem, security_policy = nil)
    gem = if gem.is_a?(Gem::Package::Source)
      gem
    elsif gem.respond_to? :read
      Gem::Package::IOSource.new gem
    else
      Gem::Package::FileSource.new gem
    end

    return super unless self == Gem::Package
    return super unless gem.present?

    return super unless gem.start
    return super unless gem.start.include? "MD5SUM ="

    Gem::Package::Old.new gem
  end

  ##
  # Extracts the Gem::Specification and raw metadata from the .gem file at
  # +path+.
  #--

  def self.raw_spec(path, security_policy = nil)
    format = new(path, security_policy)
    spec = format.spec

    metadata = nil

    File.open path, Gem.binary_mode do |io|
      tar = Gem::Package::TarReader.new io
      tar.each_entry do |entry|
        case entry.full_name
        when "metadata" then
          metadata = entry.read
        when "metadata.gz" then
          metadata = Gem::Util.gunzip entry.read
        end
      end
    end

    [spec, metadata]
  end

  ##
  # Creates a new package that will read or write to the file +gem+.

  def initialize(gem, security_policy) # :notnew:
    require "zlib"

    @gem = gem

    @build_time      = Gem.source_date_epoch
    @checksums       = {}
    @contents        = nil
    @digests         = Hash.new {|h, algorithm| h[algorithm] = {} }
    @files           = nil
    @security_policy = security_policy
    @signatures      = {}
    @signer          = nil
    @spec            = nil
  end

  ##
  # Copies this package to +path+ (if possible)

  def copy_to(path)
    FileUtils.cp @gem.path, path unless File.exist? path
  end

  ##
  # Adds a checksum for each entry in the gem to checksums.yaml.gz.

  def add_checksums(tar)
    Gem.load_yaml

    checksums_by_algorithm = Hash.new {|h, algorithm| h[algorithm] = {} }

    @checksums.each do |name, digests|
      digests.each do |algorithm, digest|
        checksums_by_algorithm[algorithm][name] = digest.hexdigest
      end
    end

    tar.add_file_signed "checksums.yaml.gz", 0o444, @signer do |io|
      gzip_to io do |gz_io|
        Psych.dump checksums_by_algorithm, gz_io
      end
    end
  end

  ##
  # Adds the files listed in the packages's Gem::Specification to data.tar.gz
  # and adds this file to the +tar+.

  def add_contents(tar) # :nodoc:
    digests = tar.add_file_signed "data.tar.gz", 0o444, @signer do |io|
      gzip_to io do |gz_io|
        Gem::Package::TarWriter.new gz_io do |data_tar|
          add_files data_tar
        end
      end
    end

    @checksums["data.tar.gz"] = digests
  end

  ##
  # Adds files included the package's Gem::Specification to the +tar+ file

  def add_files(tar) # :nodoc:
    @spec.files.each do |file|
      stat = File.lstat file

      if stat.symlink?
        tar.add_symlink file, File.readlink(file), stat.mode
      end

      next unless stat.file?

      tar.add_file_simple file, stat.mode, stat.size do |dst_io|
        File.open file, "rb" do |src_io|
          copy_stream(src_io, dst_io)
        end
      end
    end
  end

  ##
  # Adds the package's Gem::Specification to the +tar+ file

  def add_metadata(tar) # :nodoc:
    digests = tar.add_file_signed "metadata.gz", 0o444, @signer do |io|
      gzip_to io do |gz_io|
        gz_io.write @spec.to_yaml
      end
    end

    @checksums["metadata.gz"] = digests
  end

  ##
  # Builds this package based on the specification set by #spec=

  def build(skip_validation = false, strict_validation = false)
    raise ArgumentError, "skip_validation = true and strict_validation = true are incompatible" if skip_validation && strict_validation

    Gem.load_yaml

    @spec.validate true, strict_validation unless skip_validation

    setup_signer(
      signer_options: {
        expiration_length_days: Gem.configuration.cert_expiration_length_days,
      }
    )

    @gem.with_write_io do |gem_io|
      Gem::Package::TarWriter.new gem_io do |gem|
        add_metadata gem
        add_contents gem
        add_checksums gem
      end
    end

    say <<-EOM
  Successfully built RubyGem
  Name: #{@spec.name}
  Version: #{@spec.version}
  File: #{File.basename @gem.path}
EOM
  ensure
    @signer = nil
  end

  ##
  # A list of file names contained in this gem

  def contents
    return @contents if @contents

    verify unless @spec

    @contents = []

    @gem.with_read_io do |io|
      gem_tar = Gem::Package::TarReader.new io

      gem_tar.each do |entry|
        next unless entry.full_name == "data.tar.gz"

        open_tar_gz entry do |pkg_tar|
          pkg_tar.each do |contents_entry|
            @contents << contents_entry.full_name
          end
        end

        return @contents
      end
    end
  rescue Zlib::GzipFile::Error, EOFError, Gem::Package::TarInvalidError => e
    raise Gem::Package::FormatError.new e.message, @gem
  end

  ##
  # Creates a digest of the TarEntry +entry+ from the digest algorithm set by
  # the security policy.

  def digest(entry) # :nodoc:
    algorithms = if @checksums
      @checksums.to_h {|algorithm, _| [algorithm, Gem::Security.create_digest(algorithm)] }
    elsif Gem::Security::DIGEST_NAME
      { Gem::Security::DIGEST_NAME => Gem::Security.create_digest(Gem::Security::DIGEST_NAME) }
    end

    return @digests if algorithms.nil? || algorithms.empty?

    buf = String.new(capacity: 16_384, encoding: Encoding::BINARY)
    until entry.eof?
      entry.readpartial(16_384, buf)
      algorithms.each_value {|digester| digester << buf }
    end
    entry.rewind

    algorithms.each do |algorithm, digester|
      @digests[algorithm][entry.full_name] = digester
    end

    @digests
  end

  ##
  # Extracts the files in this package into +destination_dir+
  #
  # If +pattern+ is specified, only entries matching that glob will be
  # extracted.

  def extract_files(destination_dir, pattern = "*")
    verify unless @spec

    FileUtils.mkdir_p destination_dir, mode: dir_mode && 0o755

    @gem.with_read_io do |io|
      reader = Gem::Package::TarReader.new io

      reader.each do |entry|
        next unless entry.full_name == "data.tar.gz"

        extract_tar_gz entry, destination_dir, pattern

        break # ignore further entries
      end
    end
  rescue Zlib::GzipFile::Error, EOFError, Gem::Package::TarInvalidError => e
    raise Gem::Package::FormatError.new e.message, @gem
  end

  ##
  # Extracts all the files in the gzipped tar archive +io+ into
  # +destination_dir+.
  #
  # If an entry in the archive contains a relative path above
  # +destination_dir+ or an absolute path is encountered an exception is
  # raised.
  #
  # If +pattern+ is specified, only entries matching that glob will be
  # extracted.

  def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
    destination_dir = File.realpath(destination_dir)

    directories = []
    symlinks = []

    open_tar_gz io do |tar|
      tar.each do |entry|
        full_name = entry.full_name
        next unless File.fnmatch pattern, full_name, File::FNM_DOTMATCH

        destination = install_location full_name, destination_dir

        if entry.symlink?
          link_target = entry.header.linkname
          real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))

          raise Gem::Package::SymlinkError.new(full_name, real_destination, destination_dir) unless
            normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")

          symlinks << [full_name, link_target, destination, real_destination]
        end

        FileUtils.rm_rf destination

        mkdir =
          if entry.directory?
            destination
          else
            File.dirname destination
          end

        unless directories.include?(mkdir)
          FileUtils.mkdir_p mkdir, mode: dir_mode ? 0o755 : (entry.header.mode if entry.directory?)
          directories << mkdir
        end

        if entry.file?
          File.open(destination, "wb") {|out| copy_stream(entry, out) }
          FileUtils.chmod file_mode(entry.header.mode) & ~File.umask, destination
        end

        verbose destination
      end
    end

    symlinks.each do |name, target, destination, real_destination|
      if File.exist?(real_destination)
        File.symlink(target, destination)
      else
        alert_warning "#{@spec.full_name} ships with a dangling symlink named #{name} pointing to missing #{target} file. Ignoring"
      end
    end

    if dir_mode
      File.chmod(dir_mode, *directories)
    end
  end

  def file_mode(mode) # :nodoc:
    ((mode & 0o111).zero? ? data_mode : prog_mode) ||
      # If we're not using one of the default modes, then we're going to fall
      # back to the mode from the tarball. In this case we need to mask it down
      # to fit into 2^16 bits (the maximum value for a mode in CRuby since it
      # gets put into an unsigned short).
      (mode & ((1 << 16) - 1))
  end

  ##
  # Gzips content written to +gz_io+ to +io+.
  #--
  # Also sets the gzip modification time to the package build time to ease
  # testing.

  def gzip_to(io) # :yields: gz_io
    gz_io = Zlib::GzipWriter.new io, Zlib::BEST_COMPRESSION
    gz_io.mtime = @build_time

    yield gz_io
  ensure
    gz_io.close
  end

  ##
  # Returns the full path for installing +filename+.
  #
  # If +filename+ is not inside +destination_dir+ an exception is raised.

  def install_location(filename, destination_dir) # :nodoc:
    raise Gem::Package::PathError.new(filename, destination_dir) if
      filename.start_with? "/"

    destination_dir = File.realpath(destination_dir)
    destination = File.expand_path(filename, destination_dir)

    raise Gem::Package::PathError.new(destination, destination_dir) unless
      normalize_path(destination).start_with? normalize_path(destination_dir + "/")

    destination
  end

  def normalize_path(pathname)
    if Gem.win_platform?
      pathname.downcase
    else
      pathname
    end
  end

  ##
  # Loads a Gem::Specification from the TarEntry +entry+

  def load_spec(entry) # :nodoc:
    limit = 10 * 1024 * 1024
    case entry.full_name
    when "metadata" then
      @spec = Gem::Specification.from_yaml limit_read(entry, "metadata", limit)
    when "metadata.gz" then
      Zlib::GzipReader.wrap(entry, external_encoding: Encoding::UTF_8) do |gzio|
        @spec = Gem::Specification.from_yaml limit_read(gzio, "metadata.gz", limit)
      end
    end
  end

  ##
  # Opens +io+ as a gzipped tar archive

  def open_tar_gz(io) # :nodoc:
    Zlib::GzipReader.wrap io do |gzio|
      tar = Gem::Package::TarReader.new gzio

      yield tar
    end
  end

  ##
  # Reads and loads checksums.yaml.gz from the tar file +gem+

  def read_checksums(gem)
    Gem.load_yaml

    @checksums = gem.seek "checksums.yaml.gz" do |entry|
      Zlib::GzipReader.wrap entry do |gz_io|
        Gem::SafeYAML.safe_load limit_read(gz_io, "checksums.yaml.gz", 10 * 1024 * 1024)
      end
    end
  end

  ##
  # Prepares the gem for signing and checksum generation.  If a signing
  # certificate and key are not present only checksum generation is set up.

  def setup_signer(signer_options: {})
    passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
    if @spec.signing_key
      @signer =
        Gem::Security::Signer.new(
          @spec.signing_key,
          @spec.cert_chain,
          passphrase,
          signer_options
        )

      @spec.signing_key = nil
      @spec.cert_chain = @signer.cert_chain.map(&:to_s)
    else
      @signer = Gem::Security::Signer.new nil, nil, passphrase
      @spec.cert_chain = @signer.cert_chain.map(&:to_pem) if
        @signer.cert_chain
    end
  end

  ##
  # The spec for this gem.
  #
  # If this is a package for a built gem the spec is loaded from the
  # gem and returned.  If this is a package for a gem being built the provided
  # spec is returned.

  def spec
    verify unless @spec

    @spec
  end

  ##
  # Verifies that this gem:
  #
  # * Contains a valid gem specification
  # * Contains a contents archive
  # * The contents archive is not corrupt
  #
  # After verification the gem specification from the gem is available from
  # #spec

  def verify
    @files     = []
    @spec      = nil

    @gem.with_read_io do |io|
      Gem::Package::TarReader.new io do |reader|
        read_checksums reader

        verify_files reader
      end
    end

    verify_checksums @digests, @checksums

    @security_policy&.verify_signatures @spec, @digests, @signatures

    true
  rescue Gem::Security::Exception
    @spec = nil
    @files = []
    raise
  rescue Errno::ENOENT => e
    raise Gem::Package::FormatError.new e.message
  rescue Zlib::GzipFile::Error, EOFError, Gem::Package::TarInvalidError => e
    raise Gem::Package::FormatError.new e.message, @gem
  end

  ##
  # Verifies the +checksums+ against the +digests+.  This check is not
  # cryptographically secure.  Missing checksums are ignored.

  def verify_checksums(digests, checksums) # :nodoc:
    return unless checksums

    checksums.sort.each do |algorithm, gem_digests|
      gem_digests.sort.each do |file_name, gem_hexdigest|
        computed_digest = digests[algorithm][file_name]

        unless computed_digest.hexdigest == gem_hexdigest
          raise Gem::Package::FormatError.new \
            "#{algorithm} checksum mismatch for #{file_name}", @gem
        end
      end
    end
  end

  ##
  # Verifies +entry+ in a .gem file.

  def verify_entry(entry)
    file_name = entry.full_name
    @files << file_name

    case file_name
    when /\.sig$/ then
      @signatures[$`] = limit_read(entry, file_name, 1024 * 1024) if @security_policy
      return
    else
      digest entry
    end

    case file_name
    when "metadata", "metadata.gz" then
      load_spec entry
    when "data.tar.gz" then
      verify_gz entry
    end
  rescue StandardError
    warn "Exception while verifying #{@gem.path}"
    raise
  end

  ##
  # Verifies the files of the +gem+

  def verify_files(gem)
    gem.each do |entry|
      verify_entry entry
    end

    unless @spec
      raise Gem::Package::FormatError.new "package metadata is missing", @gem
    end

    unless @files.include? "data.tar.gz"
      raise Gem::Package::FormatError.new \
        "package content (data.tar.gz) is missing", @gem
    end

    if (duplicates = @files.group_by {|f| f }.select {|_k,v| v.size > 1 }.map(&:first)) && duplicates.any?
      raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(", ")})"
    end
  end

  ##
  # Verifies that +entry+ is a valid gzipped file.

  def verify_gz(entry) # :nodoc:
    Zlib::GzipReader.wrap entry do |gzio|
      # TODO: read into a buffer once zlib supports it
      gzio.read 16_384 until gzio.eof? # gzip checksum verification
    end
  rescue Zlib::GzipFile::Error => e
    raise Gem::Package::FormatError.new(e.message, entry.full_name)
  end

  if RUBY_ENGINE == "truffleruby"
    def copy_stream(src, dst) # :nodoc:
      dst.write src.read
    end
  else
    def copy_stream(src, dst) # :nodoc:
      IO.copy_stream(src, dst)
    end
  end

  def limit_read(io, name, limit)
    bytes = io.read(limit + 1)
    raise Gem::Package::FormatError, "#{name} is too big (over #{limit} bytes)" if bytes.size > limit
    bytes
  end
end

require_relative "package/digest_io"
require_relative "package/source"
require_relative "package/file_source"
require_relative "package/io_source"
require_relative "package/old"
require_relative "package/tar_header"
require_relative "package/tar_reader"
require_relative "package/tar_reader/entry"
require_relative "package/tar_writer"
PK)J[t�<M��*share/rubygems/rubygems/command_manager.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "command"
require_relative "user_interaction"
require_relative "text"

##
# The command manager registers and installs all the individual sub-commands
# supported by the gem command.
#
# Extra commands can be provided by writing a rubygems_plugin.rb
# file in an installed gem.  You should register your command against the
# Gem::CommandManager instance, like this:
#
#   # file rubygems_plugin.rb
#   require 'rubygems/command_manager'
#
#   Gem::CommandManager.instance.register_command :edit
#
# You should put the implementation of your command in rubygems/commands.
#
#   # file rubygems/commands/edit_command.rb
#   class Gem::Commands::EditCommand < Gem::Command
#     # ...
#   end
#
# See Gem::Command for instructions on writing gem commands.

class Gem::CommandManager
  include Gem::Text
  include Gem::UserInteraction

  BUILTIN_COMMANDS = [ # :nodoc:
    :build,
    :cert,
    :check,
    :cleanup,
    :contents,
    :dependency,
    :environment,
    :exec,
    :fetch,
    :generate_index,
    :help,
    :info,
    :install,
    :list,
    :lock,
    :mirror,
    :open,
    :outdated,
    :owner,
    :pristine,
    :push,
    :query,
    :rdoc,
    :rebuild,
    :search,
    :server,
    :signin,
    :signout,
    :sources,
    :specification,
    :stale,
    :uninstall,
    :unpack,
    :update,
    :which,
    :yank,
  ].freeze

  ALIAS_COMMANDS = {
    "i" => "install",
    "login" => "signin",
    "logout" => "signout",
  }.freeze

  ##
  # Return the authoritative instance of the command manager.

  def self.instance
    @instance ||= new
  end

  ##
  # Returns self. Allows a CommandManager instance to stand
  # in for the class itself.

  def instance
    self
  end

  ##
  # Reset the authoritative instance of the command manager.

  def self.reset
    @instance = nil
  end

  ##
  # Register all the subcommands supported by the gem command.

  def initialize
    require_relative "vendored_timeout"
    @commands = {}

    BUILTIN_COMMANDS.each do |name|
      register_command name
    end
  end

  ##
  # Register the Symbol +command+ as a gem command.

  def register_command(command, obj=false)
    @commands[command] = obj
  end

  ##
  # Unregister the Symbol +command+ as a gem command.

  def unregister_command(command)
    @commands.delete command
  end

  ##
  # Returns a Command instance for +command_name+

  def [](command_name)
    command_name = command_name.intern
    return nil if @commands[command_name].nil?
    @commands[command_name] ||= load_and_instantiate(command_name)
  end

  ##
  # Return a sorted list of all command names as strings.

  def command_names
    @commands.keys.collect(&:to_s).sort
  end

  ##
  # Run the command specified by +args+.

  def run(args, build_args=nil)
    process_args(args, build_args)
  rescue StandardError, Gem::Timeout::Error => ex
    if ex.respond_to?(:detailed_message)
      msg = ex.detailed_message(highlight: false).sub(/\A(.*?)(?: \(.+?\))/) { $1 }
    else
      msg = ex.message
    end
    alert_error clean_text("While executing gem ... (#{ex.class})\n    #{msg}")
    ui.backtrace ex

    terminate_interaction(1)
  rescue Interrupt
    alert_error clean_text("Interrupted")
    terminate_interaction(1)
  end

  def process_args(args, build_args=nil)
    if args.empty?
      say Gem::Command::HELP
      terminate_interaction 1
    end

    case args.first
    when "-h", "--help" then
      say Gem::Command::HELP
      terminate_interaction 0
    when "-v", "--version" then
      say Gem::VERSION
      terminate_interaction 0
    when "-C" then
      args.shift
      start_point = args.shift
      if Dir.exist?(start_point)
        Dir.chdir(start_point) { invoke_command(args, build_args) }
      else
        alert_error clean_text("#{start_point} isn't a directory.")
        terminate_interaction 1
      end
    when /^-/ then
      alert_error clean_text("Invalid option: #{args.first}. See 'gem --help'.")
      terminate_interaction 1
    else
      invoke_command(args, build_args)
    end
  end

  def find_command(cmd_name)
    cmd_name = find_alias_command cmd_name

    possibilities = find_command_possibilities cmd_name

    if possibilities.size > 1
      raise Gem::CommandLineError,
            "Ambiguous command #{cmd_name} matches [#{possibilities.join(", ")}]"
    elsif possibilities.empty?
      raise Gem::UnknownCommandError.new(cmd_name)
    end

    self[possibilities.first]
  end

  def find_alias_command(cmd_name)
    alias_name = ALIAS_COMMANDS[cmd_name]
    alias_name ? alias_name : cmd_name
  end

  def find_command_possibilities(cmd_name)
    len = cmd_name.length

    found = command_names.select {|name| cmd_name == name[0, len] }

    exact = found.find {|name| name == cmd_name }

    exact ? [exact] : found
  end

  private

  def load_and_instantiate(command_name)
    command_name = command_name.to_s
    const_name = command_name.capitalize.gsub(/_(.)/) { $1.upcase } << "Command"

    begin
      begin
        require "rubygems/commands/#{command_name}_command"
      rescue LoadError
        # it may have been defined from a rubygems_plugin.rb file
      end

      Gem::Commands.const_get(const_name).new
    rescue StandardError => e
      alert_error clean_text("Loading command: #{command_name} (#{e.class})\n\t#{e}")
      ui.backtrace e
    end
  end

  def invoke_command(args, build_args)
    cmd_name = args.shift.downcase
    cmd = find_command cmd_name
    terminate_interaction 1 unless cmd
    cmd.deprecation_warning if cmd.deprecated?
    cmd.invoke_with_build_args args, build_args
  end
end
PK)J[(��CC*share/rubygems/rubygems/install_message.rbnu�[���# frozen_string_literal: true

require_relative "../rubygems"
require_relative "user_interaction"

##
# A default post-install hook that displays "Successfully installed
# some_gem-1.0"

Gem.post_install do |installer|
  ui = Gem::DefaultUserInteraction.ui
  ui.say "Successfully installed #{installer.spec.full_name}"
end
PK)J[֖i=��$share/rubygems/rubygems/validator.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "package"
require_relative "installer"

##
# Validator performs various gem file and gem database validation

class Gem::Validator
  include Gem::UserInteraction

  def initialize # :nodoc:
    require "find"
  end

  private

  def find_files_for_gem(gem_directory)
    installed_files = []

    Find.find gem_directory do |file_name|
      fn = file_name[gem_directory.size..file_name.size - 1].sub(%r{^/}, "")
      installed_files << fn unless
        fn.empty? || fn.include?("CVS") || File.directory?(file_name)
    end

    installed_files
  end

  public

  ##
  # Describes a problem with a file in a gem.

  ErrorData = Struct.new :path, :problem do
    def <=>(other) # :nodoc:
      return nil unless self.class === other

      [path, problem] <=> [other.path, other.problem]
    end
  end

  ##
  # Checks the gem directory for the following potential
  # inconsistencies/problems:
  #
  # * Checksum gem itself
  # * For each file in each gem, check consistency of installed versions
  # * Check for files that aren't part of the gem but are in the gems directory
  # * 1 cache - 1 spec - 1 directory.
  #
  # returns a hash of ErrorData objects, keyed on the problem gem's name.
  #--
  # TODO needs further cleanup

  def alien(gems=[])
    errors = Hash.new {|h,k| h[k] = {} }

    Gem::Specification.each do |spec|
      unless gems.empty?
        next unless gems.include? spec.name
      end
      next if spec.default_gem?

      gem_name      = spec.file_name
      gem_path      = spec.cache_file
      spec_path     = spec.spec_file
      gem_directory = spec.full_gem_path

      unless File.directory? gem_directory
        errors[gem_name][spec.full_name] =
          "Gem registered but doesn't exist at #{gem_directory}"
        next
      end

      unless File.exist? spec_path
        errors[gem_name][spec_path] = "Spec file missing for installed gem"
      end

      begin
        unless File.readable?(gem_path)
          raise Gem::VerificationError, "missing gem file #{gem_path}"
        end

        good, gone, unreadable = nil, nil, nil, nil

        File.open gem_path, Gem.binary_mode do |_file|
          package = Gem::Package.new gem_path

          good, gone = package.contents.partition do |file_name|
            File.exist? File.join(gem_directory, file_name)
          end

          gone.sort.each do |path|
            errors[gem_name][path] = "Missing file"
          end

          good, unreadable = good.partition do |file_name|
            File.readable? File.join(gem_directory, file_name)
          end

          unreadable.sort.each do |path|
            errors[gem_name][path] = "Unreadable file"
          end

          good.each do |entry, data|
            next unless data # HACK: `gem check -a mkrf`

            source = File.join gem_directory, entry["path"]

            File.open source, Gem.binary_mode do |f|
              unless f.read == data
                errors[gem_name][entry["path"]] = "Modified from original"
              end
            end
          end
        end

        installed_files = find_files_for_gem(gem_directory)
        extras = installed_files - good - unreadable

        extras.each do |extra|
          errors[gem_name][extra] = "Extra file"
        end
      rescue Gem::VerificationError => e
        errors[gem_name][gem_path] = e.message
      end
    end

    errors.each do |name, subhash|
      errors[name] = subhash.map do |path, msg|
        ErrorData.new path, msg
      end.sort
    end

    errors
  end
end
PK)J[v����+share/rubygems/rubygems/vendored_timeout.rbnu�[���# frozen_string_literal: true

# Ruby 3.3 and RubyGems 3.5 is already load Gem::Timeout from lib/rubygems/timeout.rb
# We should avoid to load it again
require_relative "vendor/timeout/lib/timeout" unless defined?(Gem::Timeout)
PK)J[
Y+�+�+&share/rubygems/rubygems/uninstaller.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require "fileutils"
require_relative "../rubygems"
require_relative "installer_uninstaller_utils"
require_relative "dependency_list"
require_relative "user_interaction"

##
# An Uninstaller.
#
# The uninstaller fires pre and post uninstall hooks.  Hooks can be added
# either through a rubygems_plugin.rb file in an installed gem or via a
# rubygems/defaults/#{RUBY_ENGINE}.rb or rubygems/defaults/operating_system.rb
# file.  See Gem.pre_uninstall and Gem.post_uninstall for details.

class Gem::Uninstaller
  include Gem::UserInteraction

  include Gem::InstallerUninstallerUtils

  ##
  # The directory a gem's executables will be installed into

  attr_reader :bin_dir

  ##
  # The gem repository the gem will be uninstalled from

  attr_reader :gem_home

  ##
  # The Gem::Specification for the gem being uninstalled, only set during
  # #uninstall_gem

  attr_reader :spec

  ##
  # Constructs an uninstaller that will uninstall +gem+

  def initialize(gem, options = {})
    # TODO: document the valid options
    @gem                = gem
    @version            = options[:version] || Gem::Requirement.default
    @install_dir        = options[:install_dir]
    @gem_home           = File.realpath(@install_dir || Gem.dir)
    @user_dir           = File.exist?(Gem.user_dir) ? File.realpath(Gem.user_dir) : Gem.user_dir
    @force_executables  = options[:executables]
    @force_all          = options[:all]
    @force_ignore       = options[:ignore]
    @bin_dir            = options[:bin_dir]
    @format_executable  = options[:format_executable]
    @abort_on_dependent = options[:abort_on_dependent]

    # Indicate if development dependencies should be checked when
    # uninstalling. (default: false)
    #
    @check_dev = options[:check_dev]

    if options[:force]
      @force_all = true
      @force_ignore = true
    end

    # only add user directory if install_dir is not set
    @user_install = false
    @user_install = options[:user_install] unless @install_dir

    # Optimization: populated during #uninstall
    @default_specs_matching_uninstall_params = []
  end

  ##
  # Performs the uninstall of the gem.  This removes the spec, the Gem
  # directory, and the cached .gem file.

  def uninstall
    dependency = Gem::Dependency.new @gem, @version

    list = []

    specification_record.stubs.each do |spec|
      next unless dependency.matches_spec? spec

      list << spec
    end

    if list.empty?
      raise Gem::InstallError, "gem #{@gem.inspect} is not installed"
    end

    default_specs, list = list.partition(&:default_gem?)
    warn_cannot_uninstall_default_gems(default_specs - list)
    @default_specs_matching_uninstall_params = default_specs.map(&:to_spec)

    list, other_repo_specs = list.partition do |spec|
      @gem_home == spec.base_dir ||
        (@user_install && spec.base_dir == @user_dir)
    end

    list.sort!

    if list.empty?
      return unless other_repo_specs.any?

      other_repos = other_repo_specs.map(&:base_dir).uniq

      message = ["#{@gem} is not installed in GEM_HOME, try:"]
      message.concat other_repos.map {|repo|
        "\tgem uninstall -i #{repo} #{@gem}"
      }

      raise Gem::InstallError, message.join("\n")
    elsif @force_all
      remove_all list

    elsif list.size > 1
      gem_names = list.map(&:full_name_with_location)
      gem_names << "All versions"

      say
      _, index = choose_from_list "Select gem to uninstall:", gem_names

      if index == list.size
        remove_all list
      elsif index && index >= 0 && index < list.size
        uninstall_gem list[index]
      else
        say "Error: must enter a number [1-#{list.size + 1}]"
      end
    else
      uninstall_gem list.first
    end
  end

  ##
  # Uninstalls gem +spec+

  def uninstall_gem(stub)
    spec = stub.to_spec

    @spec = spec

    unless dependencies_ok? spec
      if abort_on_dependent? || !ask_if_ok(spec)
        raise Gem::DependencyRemovalException,
          "Uninstallation aborted due to dependent gem(s)"
      end
    end

    Gem.pre_uninstall_hooks.each do |hook|
      hook.call self
    end

    remove_executables @spec
    remove_plugins @spec
    remove @spec

    specification_record.remove_spec(stub)

    regenerate_plugins

    Gem.post_uninstall_hooks.each do |hook|
      hook.call self
    end

    @spec = nil
  end

  ##
  # Removes installed executables and batch files (windows only) for +spec+.

  def remove_executables(spec)
    return if spec.executables.empty? || default_spec_matches?(spec)

    executables = spec.executables.clone

    # Leave any executables created by other installed versions
    # of this gem installed.

    list = Gem::Specification.find_all do |s|
      s.name == spec.name && s.version != spec.version
    end

    list.each do |s|
      s.executables.each do |exe_name|
        executables.delete exe_name
      end
    end

    return if executables.empty?

    executables = executables.map {|exec| formatted_program_filename exec }

    remove = if @force_executables.nil?
      ask_yes_no("Remove executables:\n" \
                 "\t#{executables.join ", "}\n\n" \
                 "in addition to the gem?",
                 true)
    else
      @force_executables
    end

    if remove
      bin_dir = @bin_dir || Gem.bindir(spec.base_dir)

      raise Gem::FilePermissionError, bin_dir unless File.writable? bin_dir

      executables.each do |exe_name|
        say "Removing #{exe_name}"

        exe_file = File.join bin_dir, exe_name

        safe_delete { FileUtils.rm exe_file }
        safe_delete { FileUtils.rm "#{exe_file}.bat" }
      end
    else
      say "Executables and scripts will remain installed."
    end
  end

  ##
  # Removes all gems in +list+.
  #
  # NOTE: removes uninstalled gems from +list+.

  def remove_all(list)
    list.each {|spec| uninstall_gem spec }
  end

  ##
  # spec:: the spec of the gem to be uninstalled

  def remove(spec)
    unless path_ok?(@gem_home, spec) ||
           (@user_install && path_ok?(@user_dir, spec))
      e = Gem::GemNotInHomeException.new \
        "Gem '#{spec.full_name}' is not installed in directory #{@gem_home}"
      e.spec = spec

      raise e
    end

    raise Gem::FilePermissionError, spec.base_dir unless
      File.writable?(spec.base_dir)

    full_gem_path = spec.full_gem_path
    exclusions = []

    if default_spec_matches?(spec) && spec.executables.any?
      exclusions = spec.executables.map {|exe| File.join(spec.bin_dir, exe) }
      exclusions << File.dirname(exclusions.last) until exclusions.last == full_gem_path
    end

    safe_delete { rm_r full_gem_path, exclusions: exclusions }
    safe_delete { FileUtils.rm_r spec.extension_dir }

    old_platform_name = spec.original_name

    gem = spec.cache_file
    gem = File.join(spec.cache_dir, "#{old_platform_name}.gem") unless
      File.exist? gem

    safe_delete { FileUtils.rm_r gem }

    begin
      Gem::RDoc.new(spec).remove
    rescue NameError
    end

    gemspec = spec.spec_file

    unless File.exist? gemspec
      gemspec = File.join(File.dirname(gemspec), "#{old_platform_name}.gemspec")
    end

    safe_delete { FileUtils.rm_r gemspec }
    announce_deletion_of(spec)
  end

  ##
  # Remove any plugin wrappers for +spec+.

  def remove_plugins(spec) # :nodoc:
    return if spec.plugins.empty?

    remove_plugins_for(spec, plugin_dir_for(spec))
  end

  ##
  # Regenerates plugin wrappers after removal.

  def regenerate_plugins
    latest = specification_record.latest_spec_for(@spec.name)
    return if latest.nil?

    regenerate_plugins_for(latest, plugin_dir_for(@spec))
  end

  ##
  # Is +spec+ in +gem_dir+?

  def path_ok?(gem_dir, spec)
    full_path     = File.join gem_dir, "gems", spec.full_name
    original_path = File.join gem_dir, "gems", spec.original_name

    full_path == spec.full_gem_path || original_path == spec.full_gem_path
  end

  ##
  # Returns true if it is OK to remove +spec+ or this is a forced
  # uninstallation.

  def dependencies_ok?(spec) # :nodoc:
    return true if @force_ignore

    deplist = Gem::DependencyList.from_specs
    deplist.ok_to_remove?(spec.full_name, @check_dev)
  end

  ##
  # Should the uninstallation abort if a dependency will go unsatisfied?
  #
  # See ::new.

  def abort_on_dependent? # :nodoc:
    @abort_on_dependent
  end

  ##
  # Asks if it is OK to remove +spec+.  Returns true if it is OK.

  def ask_if_ok(spec) # :nodoc:
    msg = [""]
    msg << "You have requested to uninstall the gem:"
    msg << "\t#{spec.full_name}"
    msg << ""

    siblings = Gem::Specification.select do |s|
      s.name == spec.name && s.full_name != spec.full_name
    end

    spec.dependent_gems(@check_dev).each do |dep_spec, dep, _satlist|
      unless siblings.any? {|s| s.satisfies_requirement? dep }
        msg << "#{dep_spec.name}-#{dep_spec.version} depends on #{dep}"
      end
    end

    msg << "If you remove this gem, these dependencies will not be met."
    msg << "Continue with Uninstall?"
    ask_yes_no(msg.join("\n"), false)
  end

  ##
  # Returns the formatted version of the executable +filename+

  def formatted_program_filename(filename) # :nodoc:
    # TODO perhaps the installer should leave a small manifest
    # of what it did for us to find rather than trying to recreate
    # it again.
    if @format_executable
      require_relative "installer"
      Gem::Installer.exec_format % File.basename(filename)
    else
      filename
    end
  end

  def safe_delete(&block)
    block.call
  rescue Errno::ENOENT
    nil
  rescue Errno::EPERM
    e = Gem::UninstallError.new
    e.spec = @spec

    raise e
  end

  private

  def rm_r(path, exclusions:)
    FileUtils::Entry_.new(path).postorder_traverse do |ent|
      ent.remove unless exclusions.include?(ent.path)
    end
  end

  def specification_record
    @specification_record ||= @install_dir ? Gem::SpecificationRecord.from_path(@install_dir) : Gem::Specification.specification_record
  end

  def announce_deletion_of(spec)
    name = spec.full_name
    say "Successfully uninstalled #{name}"
    if default_spec_matches?(spec)
      say(
        "There was both a regular copy and a default copy of #{name}. The " \
          "regular copy was successfully uninstalled, but the default copy " \
          "was left around because default gems can't be removed."
      )
    end
  end

  # @return true if the specs of any default gems are `==` to the given `spec`.
  def default_spec_matches?(spec)
    !default_specs_that_match(spec).empty?
  end

  # @return [Array] specs of default gems that are `==` to the given `spec`.
  def default_specs_that_match(spec)
    @default_specs_matching_uninstall_params.select {|default_spec| spec == default_spec }
  end

  def warn_cannot_uninstall_default_gems(specs)
    specs.each do |spec|
      say "Gem #{spec.full_name} cannot be uninstalled because it is a default gem"
    end
  end

  def plugin_dir_for(spec)
    Gem.plugindir(spec.base_dir)
  end
end
PK)J[�H��-share/rubygems/rubygems/stub_specification.rbnu�[���# frozen_string_literal: true

##
# Gem::StubSpecification reads the stub: line from the gemspec.  This prevents
# us having to eval the entire gemspec in order to find out certain
# information.

class Gem::StubSpecification < Gem::BasicSpecification
  # :nodoc:
  PREFIX = "# stub: "

  # :nodoc:
  OPEN_MODE = "r:UTF-8:-"

  class StubLine # :nodoc: all
    attr_reader :name, :version, :platform, :require_paths, :extensions,
                :full_name

    NO_EXTENSIONS = [].freeze

    # These are common require paths.
    REQUIRE_PATHS = { # :nodoc:
      "lib" => "lib",
      "test" => "test",
      "ext" => "ext",
    }.freeze

    # These are common require path lists.  This hash is used to optimize
    # and consolidate require_path objects.  Most specs just specify "lib"
    # in their require paths, so lets take advantage of that by pre-allocating
    # a require path list for that case.
    REQUIRE_PATH_LIST = { # :nodoc:
      "lib" => ["lib"].freeze,
    }.freeze

    def initialize(data, extensions)
      parts          = data[PREFIX.length..-1].split(" ", 4)
      @name          = -parts[0]
      @version       = if Gem::Version.correct?(parts[1])
        Gem::Version.new(parts[1])
      else
        Gem::Version.new(0)
      end

      @platform      = Gem::Platform.new parts[2]
      @extensions    = extensions
      @full_name     = if platform == Gem::Platform::RUBY
        "#{name}-#{version}"
      else
        "#{name}-#{version}-#{platform}"
      end

      path_list = parts.last
      @require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0").map! do |x|
        REQUIRE_PATHS[x] || x
      end
    end
  end

  def self.default_gemspec_stub(filename, base_dir, gems_dir)
    new filename, base_dir, gems_dir, true
  end

  def self.gemspec_stub(filename, base_dir, gems_dir)
    new filename, base_dir, gems_dir, false
  end

  attr_reader :base_dir, :gems_dir

  def initialize(filename, base_dir, gems_dir, default_gem)
    super()

    self.loaded_from = filename
    @data            = nil
    @name            = nil
    @spec            = nil
    @base_dir        = base_dir
    @gems_dir        = gems_dir
    @default_gem     = default_gem
  end

  ##
  # True when this gem has been activated

  def activated?
    @activated ||= !loaded_spec.nil?
  end

  def default_gem?
    @default_gem
  end

  def build_extensions # :nodoc:
    return if default_gem?
    return if extensions.empty?

    to_spec.build_extensions
  end

  ##
  # If the gemspec contains a stubline, returns a StubLine instance. Otherwise
  # returns the full Gem::Specification.

  def data
    unless @data
      begin
        saved_lineno = $.

        Gem.open_file loaded_from, OPEN_MODE do |file|
          file.readline # discard encoding line
          stubline = file.readline
          if stubline.start_with?(PREFIX)
            extline = file.readline

            extensions =
              if extline.delete_prefix!(PREFIX)
                extline.chomp!
                extline.split "\0"
              else
                StubLine::NO_EXTENSIONS
              end

            stubline.chomp! # readline(chomp: true) allocates 3x as much as .readline.chomp!
            @data = StubLine.new stubline, extensions
          end
        rescue EOFError
        end
      ensure
        $. = saved_lineno
      end
    end

    @data ||= to_spec
  end

  private :data

  def raw_require_paths # :nodoc:
    data.require_paths
  end

  def missing_extensions?
    return false if default_gem?
    return false if extensions.empty?
    return false if File.exist? gem_build_complete_path

    to_spec.missing_extensions?
  end

  ##
  # Name of the gem

  def name
    data.name
  end

  ##
  # Platform of the gem

  def platform
    data.platform
  end

  ##
  # Extensions for this gem

  def extensions
    data.extensions
  end

  ##
  # Version of the gem

  def version
    data.version
  end

  def full_name
    data.full_name
  end

  ##
  # The full Gem::Specification for this gem, loaded from evalling its gemspec

  def spec
    @spec ||= loaded_spec if @data
    @spec ||= Gem::Specification.load(loaded_from)
  end
  alias_method :to_spec, :spec

  ##
  # Is this StubSpecification valid? i.e. have we found a stub line, OR does
  # the filename contain a valid gemspec?

  def valid?
    data
  end

  ##
  # Is there a stub line present for this StubSpecification?

  def stubbed?
    data.is_a? StubLine
  end

  def ==(other) # :nodoc:
    self.class === other &&
      name == other.name &&
      version == other.version &&
      platform == other.platform
  end

  alias_method :eql?, :== # :nodoc:

  def hash # :nodoc:
    name.hash ^ version.hash ^ platform.hash
  end

  def <=>(other) # :nodoc:
    sort_obj <=> other.sort_obj
  end

  def sort_obj # :nodoc:
    [name, version, Gem::Platform.sort_priority(platform)]
  end

  private

  def loaded_spec
    spec = Gem.loaded_specs[name]
    return unless spec && spec.version == version && spec.default_gem? == default_gem?

    spec
  end
end
PK)J[Lת�%�%#share/rubygems/rubygems/resolver.rbnu�[���# frozen_string_literal: true

require_relative "dependency"
require_relative "exceptions"
require_relative "util/list"

##
# Given a set of Gem::Dependency objects as +needed+ and a way to query the
# set of available specs via +set+, calculates a set of ActivationRequest
# objects which indicate all the specs that should be activated to meet the
# all the requirements.

class Gem::Resolver
  require_relative "vendored_molinillo"

  ##
  # If the DEBUG_RESOLVER environment variable is set then debugging mode is
  # enabled for the resolver.  This will display information about the state
  # of the resolver while a set of dependencies is being resolved.

  DEBUG_RESOLVER = !ENV["DEBUG_RESOLVER"].nil?

  ##
  # Set to true if all development dependencies should be considered.

  attr_accessor :development

  ##
  # Set to true if immediate development dependencies should be considered.

  attr_accessor :development_shallow

  ##
  # When true, no dependencies are looked up for requested gems.

  attr_accessor :ignore_dependencies

  ##
  # List of dependencies that could not be found in the configured sources.

  attr_reader :stats

  ##
  # Hash of gems to skip resolution.  Keyed by gem name, with arrays of
  # gem specifications as values.

  attr_accessor :skip_gems

  ##
  #

  attr_accessor :soft_missing

  ##
  # Combines +sets+ into a ComposedSet that allows specification lookup in a
  # uniform manner.  If one of the +sets+ is itself a ComposedSet its sets are
  # flattened into the result ComposedSet.

  def self.compose_sets(*sets)
    sets.compact!

    sets = sets.flat_map do |set|
      case set
      when Gem::Resolver::BestSet then
        set
      when Gem::Resolver::ComposedSet then
        set.sets
      else
        set
      end
    end

    case sets.length
    when 0 then
      raise ArgumentError, "one set in the composition must be non-nil"
    when 1 then
      sets.first
    else
      Gem::Resolver::ComposedSet.new(*sets)
    end
  end

  ##
  # Creates a Resolver that queries only against the already installed gems
  # for the +needed+ dependencies.

  def self.for_current_gems(needed)
    new needed, Gem::Resolver::CurrentSet.new
  end

  ##
  # Create Resolver object which will resolve the tree starting
  # with +needed+ Dependency objects.
  #
  # +set+ is an object that provides where to look for specifications to
  # satisfy the Dependencies. This defaults to IndexSet, which will query
  # rubygems.org.

  def initialize(needed, set = nil)
    @set = set || Gem::Resolver::IndexSet.new
    @needed = needed

    @development         = false
    @development_shallow = false
    @ignore_dependencies = false
    @skip_gems           = {}
    @soft_missing        = false
    @stats               = Gem::Resolver::Stats.new
  end

  def explain(stage, *data) # :nodoc:
    return unless DEBUG_RESOLVER

    d = data.map(&:pretty_inspect).join(", ")
    $stderr.printf "%10s %s\n", stage.to_s.upcase, d
  end

  def explain_list(stage) # :nodoc:
    return unless DEBUG_RESOLVER

    data = yield
    $stderr.printf "%10s (%d entries)\n", stage.to_s.upcase, data.size
    unless data.empty?
      require "pp"
      PP.pp data, $stderr
    end
  end

  ##
  # Creates an ActivationRequest for the given +dep+ and the last +possible+
  # specification.
  #
  # Returns the Specification and the ActivationRequest

  def activation_request(dep, possible) # :nodoc:
    spec = possible.pop

    explain :activate, [spec.full_name, possible.size]
    explain :possible, possible

    activation_request =
      Gem::Resolver::ActivationRequest.new spec, dep, possible

    [spec, activation_request]
  end

  def requests(s, act, reqs=[]) # :nodoc:
    return reqs if @ignore_dependencies

    s.fetch_development_dependencies if @development

    s.dependencies.reverse_each do |d|
      next if d.type == :development && !@development
      next if d.type == :development && @development_shallow &&
              act.development?
      next if d.type == :development && @development_shallow &&
              act.parent

      reqs << Gem::Resolver::DependencyRequest.new(d, act)
      @stats.requirement!
    end

    @set.prefetch reqs

    @stats.record_requirements reqs

    reqs
  end

  include Gem::Molinillo::UI

  def output
    @output ||= debug? ? $stdout : File.open(IO::NULL, "w")
  end

  def debug?
    DEBUG_RESOLVER
  end

  include Gem::Molinillo::SpecificationProvider

  ##
  # Proceed with resolution! Returns an array of ActivationRequest objects.

  def resolve
    Gem::Molinillo::Resolver.new(self, self).resolve(@needed.map {|d| DependencyRequest.new d, nil }).tsort.filter_map(&:payload)
  rescue Gem::Molinillo::VersionConflict => e
    conflict = e.conflicts.values.first
    raise Gem::DependencyResolutionError, Conflict.new(conflict.requirement_trees.first.first, conflict.existing, conflict.requirement)
  ensure
    @output.close if defined?(@output) && !debug?
  end

  ##
  # Extracts the specifications that may be able to fulfill +dependency+ and
  # returns those that match the local platform and all those that match.

  def find_possible(dependency) # :nodoc:
    all = @set.find_all dependency

    if (skip_dep_gems = skip_gems[dependency.name]) && !skip_dep_gems.empty?
      matching = all.select do |api_spec|
        skip_dep_gems.any? {|s| api_spec.version == s.version }
      end

      all = matching unless matching.empty?
    end

    matching_platform = select_local_platforms all

    [matching_platform, all]
  end

  ##
  # Returns the gems in +specs+ that match the local platform.

  def select_local_platforms(specs) # :nodoc:
    specs.select do |spec|
      Gem::Platform.installable? spec
    end
  end

  def search_for(dependency)
    possibles, all = find_possible(dependency)
    if !@soft_missing && possibles.empty?
      exc = Gem::UnsatisfiableDependencyError.new dependency, all
      exc.errors = @set.errors
      raise exc
    end

    groups = Hash.new {|hash, key| hash[key] = [] }

    # create groups & sources in the same loop
    sources = possibles.map do |spec|
      source = spec.source
      groups[source] << spec
      source
    end.uniq.reverse

    activation_requests = []

    sources.each do |source|
      groups[source].
        sort_by {|spec| [spec.version, spec.platform =~ Gem::Platform.local ? 1 : 0] }. # rubocop:disable Performance/RegexpMatch
        map {|spec| ActivationRequest.new spec, dependency }.
        each {|activation_request| activation_requests << activation_request }
    end

    activation_requests
  end

  def dependencies_for(specification)
    return [] if @ignore_dependencies
    spec = specification.spec
    requests(spec, specification)
  end

  def requirement_satisfied_by?(requirement, activated, spec)
    matches_spec = requirement.matches_spec? spec
    return matches_spec if @soft_missing

    matches_spec &&
      spec.spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
      spec.spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version)
  end

  def name_for(dependency)
    dependency.name
  end

  def allow_missing?(dependency)
    @soft_missing
  end

  def sort_dependencies(dependencies, activated, conflicts)
    dependencies.sort_by.with_index do |dependency, i|
      name = name_for(dependency)
      [
        activated.vertex_named(name).payload ? 0 : 1,
        amount_constrained(dependency),
        conflicts[name] ? 0 : 1,
        activated.vertex_named(name).payload ? 0 : search_for(dependency).count,
        i, # for stable sort
      ]
    end
  end

  SINGLE_POSSIBILITY_CONSTRAINT_PENALTY = 1_000_000
  private_constant :SINGLE_POSSIBILITY_CONSTRAINT_PENALTY if defined?(private_constant)

  # returns an integer \in (-\infty, 0]
  # a number closer to 0 means the dependency is less constraining
  #
  # dependencies w/ 0 or 1 possibilities (ignoring version requirements)
  # are given very negative values, so they _always_ sort first,
  # before dependencies that are unconstrained
  def amount_constrained(dependency)
    @amount_constrained ||= {}
    @amount_constrained[dependency.name] ||= begin
      name_dependency = Gem::Dependency.new(dependency.name)
      dependency_request_for_name = Gem::Resolver::DependencyRequest.new(name_dependency, dependency.requester)
      all = @set.find_all(dependency_request_for_name).size

      if all <= 1
        all - SINGLE_POSSIBILITY_CONSTRAINT_PENALTY
      else
        search = search_for(dependency).size
        search - all
      end
    end
  end
  private :amount_constrained
end

require_relative "resolver/activation_request"
require_relative "resolver/conflict"
require_relative "resolver/dependency_request"
require_relative "resolver/requirement_list"
require_relative "resolver/stats"

require_relative "resolver/set"
require_relative "resolver/api_set"
require_relative "resolver/composed_set"
require_relative "resolver/best_set"
require_relative "resolver/current_set"
require_relative "resolver/git_set"
require_relative "resolver/index_set"
require_relative "resolver/installer_set"
require_relative "resolver/lock_set"
require_relative "resolver/vendor_set"
require_relative "resolver/source_set"

require_relative "resolver/specification"
require_relative "resolver/spec_specification"
require_relative "resolver/api_specification"
require_relative "resolver/git_specification"
require_relative "resolver/index_specification"
require_relative "resolver/installed_specification"
require_relative "resolver/local_specification"
require_relative "resolver/lock_specification"
require_relative "resolver/vendor_specification"
PK)J[��':��(share/rubygems/rubygems/compatibility.rbnu�[���# frozen_string_literal: true

#--
# This file contains all sorts of little compatibility hacks that we've
# had to introduce over the years. Quarantining them into one file helps
# us know when we can get rid of them.
#
# Ruby 1.9.x has introduced some things that are awkward, and we need to
# support them, so we define some constants to use later.
#
# TODO remove at RubyGems 4
#++

module Gem
  # :stopdoc:

  RubyGemsVersion = VERSION
  deprecate_constant(:RubyGemsVersion)

  RbConfigPriorities = %w[
    MAJOR
    MINOR
    TEENY
    EXEEXT RUBY_SO_NAME arch bindir datadir libdir ruby_install_name
    ruby_version rubylibprefix sitedir sitelibdir vendordir vendorlibdir
    rubylibdir
  ].freeze

  if defined?(ConfigMap)
    RbConfigPriorities.each do |key|
      ConfigMap[key.to_sym] = RbConfig::CONFIG[key]
    end
  else
    ##
    # Configuration settings from ::RbConfig
    ConfigMap = Hash.new do |cm, key|
      cm[key] = RbConfig::CONFIG[key.to_s]
    end
    deprecate_constant(:ConfigMap)
  end
end
PK)J[��	@,share/rubygems/rubygems/request/http_pool.rbnu�[���# frozen_string_literal: true

##
# A connection "pool" that only manages one connection for now.  Provides
# thread safe `checkout` and `checkin` methods.  The pool consists of one
# connection that corresponds to `http_args`.  This class is private, do not
# use it.

class Gem::Request::HTTPPool # :nodoc:
  attr_reader :cert_files, :proxy_uri

  def initialize(http_args, cert_files, proxy_uri)
    @http_args  = http_args
    @cert_files = cert_files
    @proxy_uri  = proxy_uri
    @queue      = Thread::SizedQueue.new 1
    @queue << nil
  end

  def checkout
    @queue.pop || make_connection
  end

  def checkin(connection)
    @queue.push connection
  end

  def close_all
    until @queue.empty?
      if (connection = @queue.pop(true)) && connection.started?
        connection.finish
      end
    end
    @queue.push(nil)
  end

  private

  def make_connection
    setup_connection Gem::Request::ConnectionPools.client.new(*@http_args)
  end

  def setup_connection(connection)
    connection.start
    connection
  end
end
PK)J[Z_���	�	3share/rubygems/rubygems/request/connection_pools.rbnu�[���# frozen_string_literal: true

class Gem::Request::ConnectionPools # :nodoc:
  @client = Gem::Net::HTTP

  class << self
    attr_accessor :client
  end

  def initialize(proxy_uri, cert_files)
    @proxy_uri  = proxy_uri
    @cert_files = cert_files
    @pools      = {}
    @pool_mutex = Thread::Mutex.new
  end

  def pool_for(uri)
    http_args = net_http_args(uri, @proxy_uri)
    key       = http_args + [https?(uri)]
    @pool_mutex.synchronize do
      @pools[key] ||=
        if https? uri
          Gem::Request::HTTPSPool.new(http_args, @cert_files, @proxy_uri)
        else
          Gem::Request::HTTPPool.new(http_args, @cert_files, @proxy_uri)
        end
    end
  end

  def close_all
    @pools.each_value(&:close_all)
  end

  private

  ##
  # Returns list of no_proxy entries (if any) from the environment

  def get_no_proxy_from_env
    env_no_proxy = ENV["no_proxy"] || ENV["NO_PROXY"]

    return [] if env_no_proxy.nil? || env_no_proxy.empty?

    env_no_proxy.split(/\s*,\s*/)
  end

  def https?(uri)
    uri.scheme.casecmp("https").zero?
  end

  def no_proxy?(host, env_no_proxy)
    host = host.downcase

    env_no_proxy.any? do |pattern|
      env_no_proxy_pattern = pattern.downcase.dup

      # Remove dot in front of pattern for wildcard matching
      env_no_proxy_pattern[0] = "" if env_no_proxy_pattern[0] == "."

      host_tokens = host.split(".")
      pattern_tokens = env_no_proxy_pattern.split(".")

      intersection = (host_tokens - pattern_tokens) | (pattern_tokens - host_tokens)

      # When we do the split into tokens we miss a dot character, so add it back if we need it
      missing_dot = intersection.length > 0 ? 1 : 0
      start = intersection.join(".").size + missing_dot

      no_proxy_host = host[start..-1]

      env_no_proxy_pattern == no_proxy_host
    end
  end

  def net_http_args(uri, proxy_uri)
    hostname = uri.hostname
    net_http_args = [hostname, uri.port]

    no_proxy = get_no_proxy_from_env

    if proxy_uri && !no_proxy?(hostname, no_proxy)
      proxy_hostname = proxy_uri.respond_to?(:hostname) ? proxy_uri.hostname : proxy_uri.host
      net_http_args + [
        proxy_hostname,
        proxy_uri.port,
        Gem::UriFormatter.new(proxy_uri.user).unescape,
        Gem::UriFormatter.new(proxy_uri.password).unescape,
      ]
    elsif no_proxy? hostname, no_proxy
      net_http_args + [nil, nil]
    else
      net_http_args
    end
  end
end
PK)J[fޟ���-share/rubygems/rubygems/request/https_pool.rbnu�[���# frozen_string_literal: true

class Gem::Request::HTTPSPool < Gem::Request::HTTPPool # :nodoc:
  private

  def setup_connection(connection)
    Gem::Request.configure_connection_for_https(connection, @cert_files)
    super
  end
end
PK)J[�,7�WW0share/rubygems/rubygems/vendored_securerandom.rbnu�[���# frozen_string_literal: true

require_relative "vendor/securerandom/lib/securerandom"
PK)J[�_N��&share/rubygems/rubygems/source/lock.rbnu�[���# frozen_string_literal: true

##
# A Lock source wraps an installed gem's source and sorts before other sources
# during dependency resolution.  This allows RubyGems to prefer gems from
# dependency lock files.

class Gem::Source::Lock < Gem::Source
  ##
  # The wrapped Gem::Source

  attr_reader :wrapped

  ##
  # Creates a new Lock source that wraps +source+ and moves it earlier in the
  # sort list.

  def initialize(source)
    @wrapped = source
  end

  def <=>(other) # :nodoc:
    case other
    when Gem::Source::Lock then
      @wrapped <=> other.wrapped
    when Gem::Source then
      1
    end
  end

  def ==(other) # :nodoc:
    (self <=> other) == 0
  end

  def hash # :nodoc:
    @wrapped.hash ^ 3
  end

  ##
  # Delegates to the wrapped source's fetch_spec method.

  def fetch_spec(name_tuple)
    @wrapped.fetch_spec name_tuple
  end

  def uri # :nodoc:
    @wrapped.uri
  end
end
PK)J[~�}}��%share/rubygems/rubygems/source/git.rbnu�[���# frozen_string_literal: true

##
# A git gem for use in a gem dependencies file.
#
# Example:
#
#   source =
#     Gem::Source::Git.new 'rake', 'git@example:rake.git', 'rake-10.1.0', false
#
#   source.specs

class Gem::Source::Git < Gem::Source
  ##
  # The name of the gem created by this git gem.

  attr_reader :name

  ##
  # The commit reference used for checking out this git gem.

  attr_reader :reference

  ##
  # When false the cache for this repository will not be updated.

  attr_accessor :remote

  ##
  # The git repository this gem is sourced from.

  attr_reader :repository

  ##
  # The directory for cache and git gem installation

  attr_accessor :root_dir

  ##
  # Does this repository need submodules checked out too?

  attr_reader :need_submodules

  ##
  # Creates a new git gem source for a gems from loaded from +repository+ at
  # the given +reference+.  The +name+ is only used to track the repository
  # back to a gem dependencies file, it has no real significance as a git
  # repository may contain multiple gems.  If +submodules+ is true, submodules
  # will be checked out when the gem is installed.

  def initialize(name, repository, reference, submodules = false)
    require_relative "../uri"
    @uri = Gem::Uri.parse(repository)
    @name            = name
    @repository      = repository
    @reference       = reference || "HEAD"
    @need_submodules = submodules

    @remote   = true
    @root_dir = Gem.dir
  end

  def <=>(other)
    case other
    when Gem::Source::Git then
      0
    when Gem::Source::Vendor,
         Gem::Source::Lock then
      -1
    when Gem::Source then
      1
    end
  end

  def ==(other) # :nodoc:
    super &&
      @name            == other.name &&
      @repository      == other.repository &&
      @reference       == other.reference &&
      @need_submodules == other.need_submodules
  end

  def git_command
    ENV.fetch("git", "git")
  end

  ##
  # Checks out the files for the repository into the install_dir.

  def checkout # :nodoc:
    cache

    return false unless File.exist? repo_cache_dir

    unless File.exist? install_dir
      system git_command, "clone", "--quiet", "--no-checkout",
             repo_cache_dir, install_dir
    end

    Dir.chdir install_dir do
      system git_command, "fetch", "--quiet", "--force", "--tags", install_dir

      success = system git_command, "reset", "--quiet", "--hard", rev_parse

      if @need_submodules
        require "open3"
        _, status = Open3.capture2e(git_command, "submodule", "update", "--quiet", "--init", "--recursive")

        success &&= status.success?
      end

      success
    end
  end

  ##
  # Creates a local cache repository for the git gem.

  def cache # :nodoc:
    return unless @remote

    if File.exist? repo_cache_dir
      Dir.chdir repo_cache_dir do
        system git_command, "fetch", "--quiet", "--force", "--tags",
               @repository, "refs/heads/*:refs/heads/*"
      end
    else
      system git_command, "clone", "--quiet", "--bare", "--no-hardlinks",
             @repository, repo_cache_dir
    end
  end

  ##
  # Directory where git gems get unpacked and so-forth.

  def base_dir # :nodoc:
    File.join @root_dir, "bundler"
  end

  ##
  # A short reference for use in git gem directories

  def dir_shortref # :nodoc:
    rev_parse[0..11]
  end

  ##
  # Nothing to download for git gems

  def download(full_spec, path) # :nodoc:
  end

  ##
  # The directory where the git gem will be installed.

  def install_dir # :nodoc:
    return unless File.exist? repo_cache_dir

    File.join base_dir, "gems", "#{@name}-#{dir_shortref}"
  end

  def pretty_print(q) # :nodoc:
    q.object_group(self) do
      q.group 2, "[Git: ", "]" do
        q.breakable
        q.text @repository

        q.breakable
        q.text @reference
      end
    end
  end

  ##
  # The directory where the git gem's repository will be cached.

  def repo_cache_dir # :nodoc:
    File.join @root_dir, "cache", "bundler", "git", "#{@name}-#{uri_hash}"
  end

  ##
  # Converts the git reference for the repository into a commit hash.

  def rev_parse # :nodoc:
    hash = nil

    Dir.chdir repo_cache_dir do
      hash = Gem::Util.popen(git_command, "rev-parse", @reference).strip
    end

    raise Gem::Exception,
          "unable to find reference #{@reference} in #{@repository}" unless
            $?.success?

    hash
  end

  ##
  # Loads all gemspecs in the repository

  def specs
    checkout

    return [] unless install_dir

    Dir.chdir install_dir do
      Dir["{,*,*/*}.gemspec"].filter_map do |spec_file|
        directory = File.dirname spec_file
        file      = File.basename spec_file

        Dir.chdir directory do
          spec = Gem::Specification.load file
          if spec
            spec.base_dir = base_dir

            spec.extension_dir =
              File.join base_dir, "extensions", Gem::Platform.local.to_s,
                Gem.extension_api_version, "#{name}-#{dir_shortref}"

            spec.full_gem_path = File.dirname spec.loaded_from if spec
          end
          spec
        end
      end
    end
  end

  ##
  # A hash for the git gem based on the git repository Gem::URI.

  def uri_hash # :nodoc:
    require_relative "../openssl"

    normalized =
      if @repository.match?(%r{^\w+://(\w+@)?})
        uri = Gem::URI(@repository).normalize.to_s.sub %r{/$},""
        uri.sub(/\A(\w+)/) { $1.downcase }
      else
        @repository
      end

    OpenSSL::Digest::SHA1.hexdigest normalized
  end
end
PK)J[¨y-'share/rubygems/rubygems/source/local.rbnu�[���# frozen_string_literal: true

##
# The local source finds gems in the current directory for fulfilling
# dependencies.

class Gem::Source::Local < Gem::Source
  def initialize # :nodoc:
    @specs   = nil
    @api_uri = nil
    @uri     = nil
    @load_specs_names = {}
  end

  ##
  # Local sorts before Gem::Source and after Gem::Source::Installed

  def <=>(other)
    case other
    when Gem::Source::Installed,
         Gem::Source::Lock then
      -1
    when Gem::Source::Local then
      0
    when Gem::Source then
      1
    end
  end

  def inspect # :nodoc:
    keys = @specs ? @specs.keys.sort : "NOT LOADED"
    format("#<%s specs: %p>", self.class, keys)
  end

  def load_specs(type) # :nodoc:
    @load_specs_names[type] ||= begin
      names = []

      @specs = {}

      Dir["*.gem"].each do |file|
        pkg = Gem::Package.new(file)
        spec = pkg.spec
      rescue SystemCallError, Gem::Package::FormatError
        # ignore
      else
        tup = spec.name_tuple
        @specs[tup] = [File.expand_path(file), pkg]

        case type
        when :released
          unless pkg.spec.version.prerelease?
            names << pkg.spec.name_tuple
          end
        when :prerelease
          if pkg.spec.version.prerelease?
            names << pkg.spec.name_tuple
          end
        when :latest
          tup = pkg.spec.name_tuple

          cur = names.find {|x| x.name == tup.name }
          if !cur
            names << tup
          elsif cur.version < tup.version
            names.delete cur
            names << tup
          end
        else
          names << pkg.spec.name_tuple
        end
      end

      names
    end
  end

  def find_gem(gem_name, version = Gem::Requirement.default, prerelease = false) # :nodoc:
    load_specs :complete

    found = []

    @specs.each do |n, data|
      next unless n.name == gem_name
      s = data[1].spec

      if version.satisfied_by?(s.version)
        if prerelease
          found << s
        elsif !s.version.prerelease? || version.prerelease?
          found << s
        end
      end
    end

    found.max_by(&:version)
  end

  def fetch_spec(name) # :nodoc:
    load_specs :complete

    if data = @specs[name]
      data.last.spec
    else
      raise Gem::Exception, "Unable to find spec for #{name.inspect}"
    end
  end

  def download(spec, cache_dir = nil) # :nodoc:
    load_specs :complete

    @specs.each do |_name, data|
      return data[0] if data[1].spec == spec
    end

    raise Gem::Exception, "Unable to find file for '#{spec.full_name}'"
  end

  def pretty_print(q) # :nodoc:
    q.object_group(self) do
      q.group 2, "[Local gems:", "]" do
        q.breakable
        if @specs
          q.seplist @specs.keys do |v|
            q.text v.full_name
          end
        end
      end
    end
  end
end
PK)J[_t'+��(share/rubygems/rubygems/source/vendor.rbnu�[���# frozen_string_literal: true

##
# This represents a vendored source that is similar to an installed gem.

class Gem::Source::Vendor < Gem::Source::Installed
  ##
  # Creates a new Vendor source for a gem that was unpacked at +path+.

  def initialize(path)
    @uri = path
  end

  def <=>(other)
    case other
    when Gem::Source::Lock then
      -1
    when Gem::Source::Vendor then
      0
    when Gem::Source then
      1
    end
  end
end
PK)J[�Gc���+share/rubygems/rubygems/source/installed.rbnu�[���# frozen_string_literal: true

##
# Represents an installed gem.  This is used for dependency resolution.

class Gem::Source::Installed < Gem::Source
  def initialize # :nodoc:
    @uri = nil
  end

  ##
  # Installed sources sort before all other sources

  def <=>(other)
    case other
    when Gem::Source::Git,
         Gem::Source::Lock,
         Gem::Source::Vendor then
      -1
    when Gem::Source::Installed then
      0
    when Gem::Source then
      1
    end
  end

  ##
  # We don't need to download an installed gem

  def download(spec, path)
    nil
  end

  def pretty_print(q) # :nodoc:
    q.object_group(self) do
      q.text "[Installed]"
    end
  end
end
PK)J[��z�/share/rubygems/rubygems/source/specific_file.rbnu�[���# frozen_string_literal: true

##
# A source representing a single .gem file.  This is used for installation of
# local gems.

class Gem::Source::SpecificFile < Gem::Source
  ##
  # The path to the gem for this specific file.

  attr_reader :path

  ##
  # Creates a new SpecificFile for the gem in +file+

  def initialize(file)
    @uri = nil
    @path = ::File.expand_path(file)

    @package = Gem::Package.new @path
    @spec = @package.spec
    @name = @spec.name_tuple
  end

  ##
  # The Gem::Specification extracted from this .gem.

  attr_reader :spec

  def load_specs(*a) # :nodoc:
    [@name]
  end

  def fetch_spec(name) # :nodoc:
    return @spec if name == @name
    raise Gem::Exception, "Unable to find '#{name}'"
  end

  def download(spec, dir = nil) # :nodoc:
    return @path if spec == @spec
    raise Gem::Exception, "Unable to download '#{spec.full_name}'"
  end

  def pretty_print(q) # :nodoc:
    q.object_group(self) do
      q.group 2, "[SpecificFile:", "]" do
        q.breakable
        q.text @path
      end
    end
  end

  ##
  # Orders this source against +other+.
  #
  # If +other+ is a SpecificFile from a different gem name +nil+ is returned.
  #
  # If +other+ is a SpecificFile from the same gem name the versions are
  # compared using Gem::Version#<=>
  #
  # Otherwise Gem::Source#<=> is used.

  def <=>(other)
    case other
    when Gem::Source::SpecificFile then
      return nil if @spec.name != other.spec.name

      @spec.version <=> other.spec.version
    else
      super
    end
  end
end
PK)J[����
�
5share/rubygems/rubygems/resolver/api_specification.rbnu�[���# frozen_string_literal: true

##
# Represents a specification retrieved via the rubygems.org API.
#
# This is used to avoid loading the full Specification object when all we need
# is the name, version, and dependencies.

class Gem::Resolver::APISpecification < Gem::Resolver::Specification
  ##
  # We assume that all instances of this class are immutable;
  # so avoid duplicated generation for performance.
  @@cache = {}
  def self.new(set, api_data)
    cache_key = [set, api_data]
    cache = @@cache[cache_key]
    return cache if cache
    @@cache[cache_key] = super
  end

  ##
  # Creates an APISpecification for the given +set+ from the rubygems.org
  # +api_data+.
  #
  # See https://guides.rubygems.org/rubygems-org-api/#misc-methods for the
  # format of the +api_data+.

  def initialize(set, api_data)
    super()

    @set = set
    @name = api_data[:name]
    @version = Gem::Version.new(api_data[:number]).freeze
    @platform = Gem::Platform.new(api_data[:platform]).freeze
    @original_platform = api_data[:platform].freeze
    @dependencies = api_data[:dependencies].map do |name, ver|
      Gem::Dependency.new(name, ver.split(/\s*,\s*/)).freeze
    end.freeze
    @required_ruby_version = Gem::Requirement.new(api_data.dig(:requirements, :ruby)).freeze
    @required_rubygems_version = Gem::Requirement.new(api_data.dig(:requirements, :rubygems)).freeze
  end

  def ==(other) # :nodoc:
    self.class === other &&
      @set          == other.set &&
      @name         == other.name &&
      @version      == other.version &&
      @platform     == other.platform
  end

  def hash
    @set.hash ^ @name.hash ^ @version.hash ^ @platform.hash
  end

  def fetch_development_dependencies # :nodoc:
    spec = source.fetch_spec Gem::NameTuple.new @name, @version, @platform

    @dependencies = spec.dependencies
  end

  def installable_platform? # :nodoc:
    Gem::Platform.match_gem? @platform, @name
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[APISpecification", "]" do
      q.breakable
      q.text "name: #{name}"

      q.breakable
      q.text "version: #{version}"

      q.breakable
      q.text "platform: #{platform}"

      q.breakable
      q.text "dependencies:"
      q.breakable
      q.pp @dependencies

      q.breakable
      q.text "set uri: #{@set.dep_uri}"
    end
  end

  ##
  # Fetches a Gem::Specification for this APISpecification.

  def spec # :nodoc:
    @spec ||=
      begin
        tuple = Gem::NameTuple.new @name, @version, @platform
        source.fetch_spec tuple
      rescue Gem::RemoteFetcher::FetchError
        raise if @original_platform == @platform

        tuple = Gem::NameTuple.new @name, @version, @original_platform
        source.fetch_spec tuple
      end
  end

  def source # :nodoc:
    @set.source
  end
end
PK)J[V��å
�
1share/rubygems/rubygems/resolver/specification.rbnu�[���# frozen_string_literal: true

##
# A Resolver::Specification contains a subset of the information
# contained in a Gem::Specification.  Only the information necessary for
# dependency resolution in the resolver is included.

class Gem::Resolver::Specification
  ##
  # The dependencies of the gem for this specification

  attr_reader :dependencies

  ##
  # The name of the gem for this specification

  attr_reader :name

  ##
  # The platform this gem works on.

  attr_reader :platform

  ##
  # The set this specification came from.

  attr_reader :set

  ##
  # The source for this specification

  attr_reader :source

  ##
  # The Gem::Specification for this Resolver::Specification.
  #
  # Implementers, note that #install updates @spec, so be sure to cache the
  # Gem::Specification in @spec when overriding.

  attr_reader :spec

  ##
  # The version of the gem for this specification.

  attr_reader :version

  ##
  # The required_ruby_version constraint for this specification.

  attr_reader :required_ruby_version

  ##
  # The required_ruby_version constraint for this specification.

  attr_reader :required_rubygems_version

  ##
  # Sets default instance variables for the specification.

  def initialize
    @dependencies = nil
    @name         = nil
    @platform     = nil
    @set          = nil
    @source       = nil
    @version      = nil
    @required_ruby_version = Gem::Requirement.default
    @required_rubygems_version = Gem::Requirement.default
  end

  ##
  # Fetches development dependencies if the source does not provide them by
  # default (see APISpecification).

  def fetch_development_dependencies # :nodoc:
  end

  ##
  # The name and version of the specification.
  #
  # Unlike Gem::Specification#full_name, the platform is not included.

  def full_name
    "#{@name}-#{@version}"
  end

  ##
  # Installs this specification using the Gem::Installer +options+.  The
  # install method yields a Gem::Installer instance, which indicates the
  # gem will be installed, or +nil+, which indicates the gem is already
  # installed.
  #
  # After installation #spec is updated to point to the just-installed
  # specification.

  def install(options = {})
    require_relative "../installer"

    gem = download options

    installer = Gem::Installer.at gem, options

    yield installer if block_given?

    @spec = installer.install
  end

  def download(options)
    dir = options[:install_dir] || Gem.dir

    Gem.ensure_gem_subdirectories dir

    source.download spec, dir
  end

  ##
  # Returns true if this specification is installable on this platform.

  def installable_platform?
    Gem::Platform.match_spec? spec
  end

  def local? # :nodoc:
    false
  end
end
PK)J["�~��-share/rubygems/rubygems/resolver/index_set.rbnu�[���# frozen_string_literal: true

##
# The global rubygems pool represented via the traditional
# source index.

class Gem::Resolver::IndexSet < Gem::Resolver::Set
  def initialize(source = nil) # :nodoc:
    super()

    @f =
      if source
        sources = Gem::SourceList.from [source]

        Gem::SpecFetcher.new sources
      else
        Gem::SpecFetcher.fetcher
      end

    @all = Hash.new {|h,k| h[k] = [] }

    list, errors = @f.available_specs :complete

    @errors.concat errors

    list.each do |uri, specs|
      specs.each do |n|
        @all[n.name] << [uri, n]
      end
    end

    @specs = {}
  end

  ##
  # Return an array of IndexSpecification objects matching
  # DependencyRequest +req+.

  def find_all(req)
    res = []

    return res unless @remote

    name = req.dependency.name

    @all[name].each do |uri, n|
      next unless req.match? n, @prerelease
      res << Gem::Resolver::IndexSpecification.new(
        self, n.name, n.version, uri, n.platform
      )
    end

    res
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[IndexSet", "]" do
      q.breakable
      q.text "sources:"
      q.breakable
      q.pp @f.sources

      q.breakable
      q.text "specs:"

      q.breakable

      names = @all.values.flat_map do |tuples|
        tuples.map do |_, tuple|
          tuple.full_name
        end
      end

      q.seplist names do |name|
        q.text name
      end
    end
  end
end
PK)J[�h��		6share/rubygems/rubygems/resolver/dependency_request.rbnu�[���# frozen_string_literal: true

##
# Used Internally. Wraps a Dependency object to also track which spec
# contained the Dependency.

class Gem::Resolver::DependencyRequest
  ##
  # The wrapped Gem::Dependency

  attr_reader :dependency

  ##
  # The request for this dependency.

  attr_reader :requester

  ##
  # Creates a new DependencyRequest for +dependency+ from +requester+.
  # +requester may be nil if the request came from a user.

  def initialize(dependency, requester)
    @dependency = dependency
    @requester  = requester
  end

  def ==(other) # :nodoc:
    case other
    when Gem::Dependency
      @dependency == other
    when Gem::Resolver::DependencyRequest
      @dependency == other.dependency
    else
      false
    end
  end

  ##
  # Is this dependency a development dependency?

  def development?
    @dependency.type == :development
  end

  ##
  # Does this dependency request match +spec+?
  #
  # NOTE:  #match? only matches prerelease versions when #dependency is a
  # prerelease dependency.

  def match?(spec, allow_prerelease = false)
    @dependency.match? spec, nil, allow_prerelease
  end

  ##
  # Does this dependency request match +spec+?
  #
  # NOTE:  #matches_spec? matches prerelease versions.  See also #match?

  def matches_spec?(spec)
    @dependency.matches_spec? spec
  end

  ##
  # The name of the gem this dependency request is requesting.

  def name
    @dependency.name
  end

  def type
    @dependency.type
  end

  ##
  # Indicate that the request is for a gem explicitly requested by the user

  def explicit?
    @requester.nil?
  end

  ##
  # Indicate that the request is for a gem requested as a dependency of
  # another gem

  def implicit?
    !explicit?
  end

  ##
  # Return a String indicating who caused this request to be added (only
  # valid for implicit requests)

  def request_context
    @requester ? @requester.request : "(unknown)"
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[Dependency request ", "]" do
      q.breakable
      q.text @dependency.to_s

      q.breakable
      q.text " requested by "
      q.pp @requester
    end
  end

  ##
  # The version requirement for this dependency request

  def requirement
    @dependency.requirement
  end

  def to_s # :nodoc:
    @dependency.to_s
  end
end
PK)J[֚��.share/rubygems/rubygems/resolver/vendor_set.rbnu�[���# frozen_string_literal: true

##
# A VendorSet represents gems that have been unpacked into a specific
# directory that contains a gemspec.
#
# This is used for gem dependency file support.
#
# Example:
#
#   set = Gem::Resolver::VendorSet.new
#
#   set.add_vendor_gem 'rake', 'vendor/rake'
#
# The directory vendor/rake must contain an unpacked rake gem along with a
# rake.gemspec (watching the given name).

class Gem::Resolver::VendorSet < Gem::Resolver::Set
  ##
  # The specifications for this set.

  attr_reader :specs # :nodoc:

  def initialize # :nodoc:
    super()

    @directories = {}
    @specs       = {}
  end

  ##
  # Adds a specification to the set with the given +name+ which has been
  # unpacked into the given +directory+.

  def add_vendor_gem(name, directory) # :nodoc:
    gemspec = File.join directory, "#{name}.gemspec"

    spec = Gem::Specification.load gemspec

    raise Gem::GemNotFoundException,
          "unable to find #{gemspec} for gem #{name}" unless spec

    spec.full_gem_path = File.expand_path directory

    @specs[spec.name]  = spec
    @directories[spec] = directory

    spec
  end

  ##
  # Returns an Array of VendorSpecification objects matching the
  # DependencyRequest +req+.

  def find_all(req)
    @specs.values.select do |spec|
      req.match? spec
    end.map do |spec|
      source = Gem::Source::Vendor.new @directories[spec]
      Gem::Resolver::VendorSpecification.new self, spec, source
    end
  end

  ##
  # Loads a spec with the given +name+. +version+, +platform+ and +source+ are
  # ignored.

  def load_spec(name, version, platform, source) # :nodoc:
    @specs.fetch name
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[VendorSet", "]" do
      next if @directories.empty?
      q.breakable

      dirs = @directories.map do |spec, directory|
        "#{spec.full_name}: #{directory}"
      end

      q.seplist dirs do |dir|
        q.text dir
      end
    end
  end
end
PK)J[�K�j��)share/rubygems/rubygems/resolver/stats.rbnu�[���# frozen_string_literal: true

class Gem::Resolver::Stats
  def initialize
    @max_depth = 0
    @max_requirements = 0
    @requirements = 0
    @backtracking = 0
    @iterations = 0
  end

  def record_depth(stack)
    if stack.size > @max_depth
      @max_depth = stack.size
    end
  end

  def record_requirements(reqs)
    if reqs.size > @max_requirements
      @max_requirements = reqs.size
    end
  end

  def requirement!
    @requirements += 1
  end

  def backtracking!
    @backtracking += 1
  end

  def iteration!
    @iterations += 1
  end

  PATTERN = "%20s: %d\n"

  def display
    $stdout.puts "=== Resolver Statistics ==="
    $stdout.printf PATTERN, "Max Depth", @max_depth
    $stdout.printf PATTERN, "Total Requirements", @requirements
    $stdout.printf PATTERN, "Max Requirements", @max_requirements
    $stdout.printf PATTERN, "Backtracking #", @backtracking
    $stdout.printf PATTERN, "Iteration #", @iterations
  end
end
PK)J[����,share/rubygems/rubygems/resolver/lock_set.rbnu�[���# frozen_string_literal: true

##
# A set of gems from a gem dependencies lockfile.

class Gem::Resolver::LockSet < Gem::Resolver::Set
  attr_reader :specs # :nodoc:

  ##
  # Creates a new LockSet from the given +sources+

  def initialize(sources)
    super()

    @sources = sources.map do |source|
      Gem::Source::Lock.new source
    end

    @specs = []
  end

  ##
  # Creates a new IndexSpecification in this set using the given +name+,
  # +version+ and +platform+.
  #
  # The specification's set will be the current set, and the source will be
  # the current set's source.

  def add(name, version, platform) # :nodoc:
    version = Gem::Version.new version
    specs = [
      Gem::Resolver::LockSpecification.new(self, name, version, @sources, platform),
    ]

    @specs.concat specs

    specs
  end

  ##
  # Returns an Array of IndexSpecification objects matching the
  # DependencyRequest +req+.

  def find_all(req)
    @specs.select do |spec|
      req.match? spec
    end
  end

  ##
  # Loads a Gem::Specification with the given +name+, +version+ and
  # +platform+.  +source+ is ignored.

  def load_spec(name, version, platform, source) # :nodoc:
    dep = Gem::Dependency.new name, version

    found = @specs.find do |spec|
      dep.matches_spec?(spec) && spec.platform == platform
    end

    tuple = Gem::NameTuple.new found.name, found.version, found.platform

    found.source.fetch_spec tuple
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[LockSet", "]" do
      q.breakable
      q.text "source:"

      q.breakable
      q.pp @source

      q.breakable
      q.text "specs:"

      q.breakable
      q.pp @specs.map(&:full_name)
    end
  end
end
PK)J[	��@��.share/rubygems/rubygems/resolver/source_set.rbnu�[���# frozen_string_literal: true

##
# The SourceSet chooses the best available method to query a remote index.
#
# Kind off like BestSet but filters the sources for gems

class Gem::Resolver::SourceSet < Gem::Resolver::Set
  ##
  # Creates a SourceSet for the given +sources+ or Gem::sources if none are
  # specified.  +sources+ must be a Gem::SourceList.

  def initialize
    super()

    @links = {}
    @sets  = {}
  end

  def find_all(req) # :nodoc:
    if set = get_set(req.dependency.name)
      set.find_all req
    else
      []
    end
  end

  # potentially no-op
  def prefetch(reqs) # :nodoc:
    reqs.each do |req|
      if set = get_set(req.dependency.name)
        set.prefetch reqs
      end
    end
  end

  def add_source_gem(name, source)
    @links[name] = source
  end

  private

  def get_set(name)
    link = @links[name]
    @sets[link] ||= Gem::Source.new(link).dependency_resolver_set if link
  end
end
PK)J[���0share/rubygems/rubygems/resolver/composed_set.rbnu�[���# frozen_string_literal: true

##
# A ComposedSet allows multiple sets to be queried like a single set.
#
# To create a composed set with any number of sets use:
#
#   Gem::Resolver.compose_sets set1, set2
#
# This method will eliminate nesting of composed sets.

class Gem::Resolver::ComposedSet < Gem::Resolver::Set
  attr_reader :sets # :nodoc:

  ##
  # Creates a new ComposedSet containing +sets+.  Use
  # Gem::Resolver::compose_sets instead.

  def initialize(*sets)
    super()

    @sets = sets
  end

  ##
  # When +allow_prerelease+ is set to +true+ prereleases gems are allowed to
  # match dependencies.

  def prerelease=(allow_prerelease)
    super

    sets.each do |set|
      set.prerelease = allow_prerelease
    end
  end

  ##
  # Sets the remote network access for all composed sets.

  def remote=(remote)
    super

    @sets.each {|set| set.remote = remote }
  end

  def errors
    @errors + @sets.flat_map(&:errors)
  end

  ##
  # Finds all specs matching +req+ in all sets.

  def find_all(req)
    @sets.flat_map do |s|
      s.find_all req
    end
  end

  ##
  # Prefetches +reqs+ in all sets.

  def prefetch(reqs)
    @sets.each {|s| s.prefetch(reqs) }
  end
end
PK)J[Qh9���;share/rubygems/rubygems/resolver/installed_specification.rbnu�[���# frozen_string_literal: true

##
# An InstalledSpecification represents a gem that is already installed
# locally.

class Gem::Resolver::InstalledSpecification < Gem::Resolver::SpecSpecification
  def ==(other) # :nodoc:
    self.class === other &&
      @set  == other.set &&
      @spec == other.spec
  end

  ##
  # This is a null install as this specification is already installed.
  # +options+ are ignored.

  def install(options = {})
    yield nil
  end

  ##
  # Returns +true+ if this gem is installable for the current platform.

  def installable_platform?
    # BACKCOMPAT If the file is coming out of a specified file, then we
    # ignore the platform. This code can be removed in RG 3.0.
    return true if @source.is_a? Gem::Source::SpecificFile

    super
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[InstalledSpecification", "]" do
      q.breakable
      q.text "name: #{name}"

      q.breakable
      q.text "version: #{version}"

      q.breakable
      q.text "platform: #{platform}"

      q.breakable
      q.text "dependencies:"
      q.breakable
      q.pp spec.dependencies
    end
  end

  ##
  # The source for this specification

  def source
    @source ||= Gem::Source::Installed.new
  end
end
PK)J[q��XX4share/rubygems/rubygems/resolver/requirement_list.rbnu�[���# frozen_string_literal: true

##
# The RequirementList is used to hold the requirements being considered
# while resolving a set of gems.
#
# The RequirementList acts like a queue where the oldest items are removed
# first.

class Gem::Resolver::RequirementList
  include Enumerable

  ##
  # Creates a new RequirementList.

  def initialize
    @exact = []
    @list = []
  end

  def initialize_copy(other) # :nodoc:
    @exact = @exact.dup
    @list = @list.dup
  end

  ##
  # Adds Resolver::DependencyRequest +req+ to this requirements list.

  def add(req)
    if req.requirement.exact?
      @exact.push req
    else
      @list.push req
    end
    req
  end

  ##
  # Enumerates requirements in the list

  def each # :nodoc:
    return enum_for __method__ unless block_given?

    @exact.each do |requirement|
      yield requirement
    end

    @list.each do |requirement|
      yield requirement
    end
  end

  ##
  # How many elements are in the list

  def size
    @exact.size + @list.size
  end

  ##
  # Is the list empty?

  def empty?
    @exact.empty? && @list.empty?
  end

  ##
  # Remove the oldest DependencyRequest from the list.

  def remove
    return @exact.shift unless @exact.empty?
    @list.shift
  end

  ##
  # Returns the oldest five entries from the list.

  def next5
    x = @exact[0,5]
    x + @list[0,5 - x.size]
  end
end
PK)J[jaMG^^+share/rubygems/rubygems/resolver/git_set.rbnu�[���# frozen_string_literal: true

##
# A GitSet represents gems that are sourced from git repositories.
#
# This is used for gem dependency file support.
#
# Example:
#
#   set = Gem::Resolver::GitSet.new
#   set.add_git_gem 'rake', 'git://example/rake.git', tag: 'rake-10.1.0'

class Gem::Resolver::GitSet < Gem::Resolver::Set
  ##
  # The root directory for git gems in this set.  This is usually Gem.dir, the
  # installation directory for regular gems.

  attr_accessor :root_dir

  ##
  # Contains repositories needing submodules

  attr_reader :need_submodules # :nodoc:

  ##
  # A Hash containing git gem names for keys and a Hash of repository and
  # git commit reference as values.

  attr_reader :repositories # :nodoc:

  ##
  # A hash of gem names to Gem::Resolver::GitSpecifications

  attr_reader :specs # :nodoc:

  def initialize # :nodoc:
    super()

    @need_submodules = {}
    @repositories    = {}
    @root_dir        = Gem.dir
    @specs           = {}
  end

  def add_git_gem(name, repository, reference, submodules) # :nodoc:
    @repositories[name] = [repository, reference]
    @need_submodules[repository] = submodules
  end

  ##
  # Adds and returns a GitSpecification with the given +name+ and +version+
  # which came from a +repository+ at the given +reference+.  If +submodules+
  # is true they are checked out along with the repository.
  #
  # This fills in the prefetch information as enough information about the gem
  # is present in the arguments.

  def add_git_spec(name, version, repository, reference, submodules) # :nodoc:
    add_git_gem name, repository, reference, submodules

    source = Gem::Source::Git.new name, repository, reference
    source.root_dir = @root_dir

    spec = Gem::Specification.new do |s|
      s.name    = name
      s.version = version
    end

    git_spec = Gem::Resolver::GitSpecification.new self, spec, source

    @specs[spec.name] = git_spec

    git_spec
  end

  ##
  # Finds all git gems matching +req+

  def find_all(req)
    prefetch nil

    specs.values.select do |spec|
      req.match? spec
    end
  end

  ##
  # Prefetches specifications from the git repositories in this set.

  def prefetch(reqs)
    return unless @specs.empty?

    @repositories.each do |name, (repository, reference)|
      source = Gem::Source::Git.new name, repository, reference
      source.root_dir = @root_dir
      source.remote = @remote

      source.specs.each do |spec|
        git_spec = Gem::Resolver::GitSpecification.new self, spec, source

        @specs[spec.name] = git_spec
      end
    end
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[GitSet", "]" do
      next if @repositories.empty?
      q.breakable

      repos = @repositories.map do |name, (repository, reference)|
        "#{name}: #{repository}@#{reference}"
      end

      q.seplist repos do |repo|
        q.text repo
      end
    end
  end
end
PK)J[N��BB6share/rubygems/rubygems/resolver/lock_specification.rbnu�[���# frozen_string_literal: true

##
# The LockSpecification comes from a lockfile (Gem::RequestSet::Lockfile).
#
# A LockSpecification's dependency information is pre-filled from the
# lockfile.

class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
  attr_reader :sources

  def initialize(set, name, version, sources, platform)
    super()

    @name     = name
    @platform = platform
    @set      = set
    @source   = sources.first
    @sources  = sources
    @version  = version

    @dependencies = []
    @spec         = nil
  end

  ##
  # This is a null install as a locked specification is considered installed.
  # +options+ are ignored.

  def install(options = {})
    destination = options[:install_dir] || Gem.dir

    if File.exist? File.join(destination, "specifications", spec.spec_name)
      yield nil
      return
    end

    super
  end

  ##
  # Adds +dependency+ from the lockfile to this specification

  def add_dependency(dependency) # :nodoc:
    @dependencies << dependency
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[LockSpecification", "]" do
      q.breakable
      q.text "name: #{@name}"

      q.breakable
      q.text "version: #{@version}"

      unless @platform == Gem::Platform::RUBY
        q.breakable
        q.text "platform: #{@platform}"
      end

      unless @dependencies.empty?
        q.breakable
        q.text "dependencies:"
        q.breakable
        q.pp @dependencies
      end
    end
  end

  ##
  # A specification constructed from the lockfile is returned

  def spec
    @spec ||= Gem::Specification.find do |spec|
      spec.name == @name && spec.version == @version
    end

    @spec ||= Gem::Specification.new do |s|
      s.name     = @name
      s.version  = @version
      s.platform = @platform

      s.dependencies.concat @dependencies
    end
  end
end
PK)J[Mr����'share/rubygems/rubygems/resolver/set.rbnu�[���# frozen_string_literal: true

##
# Resolver sets are used to look up specifications (and their
# dependencies) used in resolution.  This set is abstract.

class Gem::Resolver::Set
  ##
  # Set to true to disable network access for this set

  attr_accessor :remote

  ##
  # Errors encountered when resolving gems

  attr_accessor :errors

  ##
  # When true, allows matching of requests to prerelease gems.

  attr_accessor :prerelease

  def initialize # :nodoc:
    @prerelease = false
    @remote     = true
    @errors     = []
  end

  ##
  # The find_all method must be implemented.  It returns all Resolver
  # Specification objects matching the given DependencyRequest +req+.

  def find_all(req)
    raise NotImplementedError
  end

  ##
  # The #prefetch method may be overridden, but this is not necessary.  This
  # default implementation does nothing, which is suitable for sets where
  # looking up a specification is cheap (such as installed gems).
  #
  # When overridden, the #prefetch method should look up specifications
  # matching +reqs+.

  def prefetch(reqs)
  end

  ##
  # When true, this set is allowed to access the network when looking up
  # specifications or dependencies.

  def remote? # :nodoc:
    @remote
  end
end
PK)J[N��h��,share/rubygems/rubygems/resolver/conflict.rbnu�[���# frozen_string_literal: true

##
# Used internally to indicate that a dependency conflicted
# with a spec that would be activated.

class Gem::Resolver::Conflict
  ##
  # The specification that was activated prior to the conflict

  attr_reader :activated

  ##
  # The dependency that is in conflict with the activated gem.

  attr_reader :dependency

  attr_reader :failed_dep # :nodoc:

  ##
  # Creates a new resolver conflict when +dependency+ is in conflict with an
  # already +activated+ specification.

  def initialize(dependency, activated, failed_dep=dependency)
    @dependency = dependency
    @activated = activated
    @failed_dep = failed_dep
  end

  def ==(other) # :nodoc:
    self.class === other &&
      @dependency == other.dependency &&
      @activated  == other.activated  &&
      @failed_dep == other.failed_dep
  end

  ##
  # A string explanation of the conflict.

  def explain
    "<Conflict wanted: #{@failed_dep}, had: #{activated.spec.full_name}>"
  end

  ##
  # Return the 2 dependency objects that conflicted

  def conflicting_dependencies
    [@failed_dep.dependency, @activated.request.dependency]
  end

  ##
  # Explanation of the conflict used by exceptions to print useful messages

  def explanation
    activated   = @activated.spec.full_name
    dependency  = @failed_dep.dependency
    requirement = dependency.requirement
    alternates  = dependency.matching_specs.map(&:full_name)

    unless alternates.empty?
      matching = <<-MATCHING.chomp

  Gems matching %s:
    %s
      MATCHING

      matching = format(matching, dependency, alternates.join(", "))
    end

    explanation = <<-EXPLANATION
  Activated %s
  which does not match conflicting dependency (%s)

  Conflicting dependency chains:
    %s

  versus:
    %s
%s
    EXPLANATION

    format(explanation, activated, requirement, request_path(@activated).reverse.join(", depends on\n    "), request_path(@failed_dep).reverse.join(", depends on\n    "), matching)
  end

  ##
  # Returns true if the conflicting dependency's name matches +spec+.

  def for_spec?(spec)
    @dependency.name == spec.name
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[Dependency conflict: ", "]" do
      q.breakable

      q.text "activated "
      q.pp @activated

      q.breakable
      q.text " dependency "
      q.pp @dependency

      q.breakable
      if @dependency == @failed_dep
        q.text " failed"
      else
        q.text " failed dependency "
        q.pp @failed_dep
      end
    end
  end

  ##
  # Path of activations from the +current+ list.

  def request_path(current)
    path = []

    while current do
      case current
      when Gem::Resolver::ActivationRequest then
        path <<
          "#{current.request.dependency}, #{current.spec.version} activated"

        current = current.parent
      when Gem::Resolver::DependencyRequest then
        path << current.dependency.to_s

        current = current.requester
      else
        raise Gem::Exception, "[BUG] unknown request class #{current.class}"
      end
    end

    path = ["user request (gem command or Gemfile)"] if path.empty?

    path
  end

  ##
  # Return the Specification that listed the dependency

  def requester
    @failed_dep.requester
  end
end
PK)J[޻ڢ��+share/rubygems/rubygems/resolver/api_set.rbnu�[���# frozen_string_literal: true

##
# The global rubygems pool, available via the rubygems.org API.
# Returns instances of APISpecification.

class Gem::Resolver::APISet < Gem::Resolver::Set
  autoload :GemParser, File.expand_path("api_set/gem_parser", __dir__)

  ##
  # The URI for the dependency API this APISet uses.

  attr_reader :dep_uri # :nodoc:

  ##
  # The Gem::Source that gems are fetched from

  attr_reader :source

  ##
  # The corresponding place to fetch gems.

  attr_reader :uri

  ##
  # Creates a new APISet that will retrieve gems from +uri+ using the RubyGems
  # API URL +dep_uri+ which is described at
  # https://guides.rubygems.org/rubygems-org-api

  def initialize(dep_uri = "https://index.rubygems.org/info/")
    super()

    dep_uri = Gem::URI dep_uri unless Gem::URI === dep_uri

    @dep_uri = dep_uri
    @uri     = dep_uri + ".."

    @data   = Hash.new {|h,k| h[k] = [] }
    @source = Gem::Source.new @uri

    @to_fetch = []
  end

  ##
  # Return an array of APISpecification objects matching
  # DependencyRequest +req+.

  def find_all(req)
    res = []

    return res unless @remote

    if @to_fetch.include?(req.name)
      prefetch_now
    end

    versions(req.name).each do |ver|
      if req.dependency.match? req.name, ver[:number], @prerelease
        res << Gem::Resolver::APISpecification.new(self, ver)
      end
    end

    res
  end

  ##
  # A hint run by the resolver to allow the Set to fetch
  # data for DependencyRequests +reqs+.

  def prefetch(reqs)
    return unless @remote
    names = reqs.map {|r| r.dependency.name }
    needed = names - @data.keys - @to_fetch

    @to_fetch += needed
  end

  def prefetch_now # :nodoc:
    needed = @to_fetch
    @to_fetch = []

    needed.sort.each do |name|
      versions(name)
    end
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[APISet", "]" do
      q.breakable
      q.text "URI: #{@dep_uri}"

      q.breakable
      q.text "gem names:"
      q.pp @data.keys
    end
  end

  ##
  # Return data for all versions of the gem +name+.

  def versions(name) # :nodoc:
    if @data.key?(name)
      return @data[name]
    end

    uri = @dep_uri + name

    begin
      str = Gem::RemoteFetcher.fetcher.fetch_path uri
    rescue Gem::RemoteFetcher::FetchError
      @data[name] = []
    else
      lines(str).each do |ver|
        number, platform, dependencies, requirements = parse_gem(ver)

        platform ||= "ruby"
        dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
        requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h

        @data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements }
      end
    end

    @data[name]
  end

  private

  def lines(str)
    lines = str.split("\n")
    header = lines.index("---")
    header ? lines[header + 1..-1] : lines
  end

  def parse_gem(string)
    @gem_parser ||= GemParser.new
    @gem_parser.parse(string)
  end
end
PK)J[]�Z^^1share/rubygems/rubygems/resolver/installer_set.rbnu�[���# frozen_string_literal: true

##
# A set of gems for installation sourced from remote sources and local .gem
# files

class Gem::Resolver::InstallerSet < Gem::Resolver::Set
  ##
  # List of Gem::Specification objects that must always be installed.

  attr_reader :always_install # :nodoc:

  ##
  # Only install gems in the always_install list

  attr_accessor :ignore_dependencies # :nodoc:

  ##
  # Do not look in the installed set when finding specifications.  This is
  # used by the --install-dir option to `gem install`

  attr_accessor :ignore_installed # :nodoc:

  ##
  # The remote_set looks up remote gems for installation.

  attr_reader :remote_set # :nodoc:

  ##
  # Ignore ruby & rubygems specification constraints.
  #

  attr_accessor :force # :nodoc:

  ##
  # Creates a new InstallerSet that will look for gems in +domain+.

  def initialize(domain)
    super()

    @domain = domain

    @f = Gem::SpecFetcher.fetcher

    @always_install      = []
    @ignore_dependencies = false
    @ignore_installed    = false
    @local               = {}
    @local_source        = Gem::Source::Local.new
    @remote_set          = Gem::Resolver::BestSet.new
    @force               = false
    @specs               = {}
  end

  ##
  # Looks up the latest specification for +dependency+ and adds it to the
  # always_install list.

  def add_always_install(dependency)
    request = Gem::Resolver::DependencyRequest.new dependency, nil

    found = find_all request

    found.delete_if do |s|
      s.version.prerelease? && !s.local?
    end unless dependency.prerelease?

    found = found.select do |s|
      Gem::Source::SpecificFile === s.source ||
        Gem::Platform.match_spec?(s)
    end

    found = found.sort_by do |s|
      [s.version, Gem::Platform.sort_priority(s.platform)]
    end

    newest = found.last

    unless newest
      exc = Gem::UnsatisfiableDependencyError.new request
      exc.errors = errors

      raise exc
    end

    unless @force
      found_matching_metadata = found.reverse.find do |spec|
        metadata_satisfied?(spec)
      end

      if found_matching_metadata.nil?
        ensure_required_ruby_version_met(newest.spec)
        ensure_required_rubygems_version_met(newest.spec)
      else
        newest = found_matching_metadata
      end
    end

    @always_install << newest.spec
  end

  ##
  # Adds a local gem requested using +dep_name+ with the given +spec+ that can
  # be loaded and installed using the +source+.

  def add_local(dep_name, spec, source)
    @local[dep_name] = [spec, source]
  end

  ##
  # Should local gems should be considered?

  def consider_local? # :nodoc:
    @domain == :both || @domain == :local
  end

  ##
  # Should remote gems should be considered?

  def consider_remote? # :nodoc:
    @domain == :both || @domain == :remote
  end

  ##
  # Errors encountered while resolving gems

  def errors
    @errors + @remote_set.errors
  end

  ##
  # Returns an array of IndexSpecification objects matching DependencyRequest
  # +req+.

  def find_all(req)
    res = []

    dep = req.dependency

    return res if @ignore_dependencies &&
                  @always_install.none? {|spec| dep.match? spec }

    name = dep.name

    dep.matching_specs.each do |gemspec|
      next if @always_install.any? {|spec| spec.name == gemspec.name }

      res << Gem::Resolver::InstalledSpecification.new(self, gemspec)
    end unless @ignore_installed

    matching_local = []

    if consider_local?
      matching_local = @local.values.select do |spec, _|
        req.match? spec
      end.map do |spec, source|
        Gem::Resolver::LocalSpecification.new self, spec, source
      end

      res.concat matching_local

      begin
        if local_spec = @local_source.find_gem(name, dep.requirement)
          res << Gem::Resolver::IndexSpecification.new(
            self, local_spec.name, local_spec.version,
            @local_source, local_spec.platform
          )
        end
      rescue Gem::Package::FormatError
        # ignore
      end
    end

    res.concat @remote_set.find_all req if consider_remote? && matching_local.empty?

    res
  end

  def prefetch(reqs)
    @remote_set.prefetch(reqs) if consider_remote?
  end

  def prerelease=(allow_prerelease)
    super

    @remote_set.prerelease = allow_prerelease
  end

  def inspect # :nodoc:
    always_install = @always_install.map(&:full_name)

    format("#<%s domain: %s specs: %p always install: %p>", self.class, @domain, @specs.keys, always_install)
  end

  ##
  # Called from IndexSpecification to get a true Specification
  # object.

  def load_spec(name, ver, platform, source) # :nodoc:
    key = "#{name}-#{ver}-#{platform}"

    @specs.fetch key do
      tuple = Gem::NameTuple.new name, ver, platform

      @specs[key] = source.fetch_spec tuple
    end
  end

  ##
  # Has a local gem for +dep_name+ been added to this set?

  def local?(dep_name) # :nodoc:
    spec, _ = @local[dep_name]

    spec
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[InstallerSet", "]" do
      q.breakable
      q.text "domain: #{@domain}"

      q.breakable
      q.text "specs: "
      q.pp @specs.keys

      q.breakable
      q.text "always install: "
      q.pp @always_install
    end
  end

  def remote=(remote) # :nodoc:
    case @domain
    when :local then
      @domain = :both if remote
    when :remote then
      @domain = nil unless remote
    when :both then
      @domain = :local unless remote
    end
  end

  private

  def metadata_satisfied?(spec)
    spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
      spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version)
  end

  def ensure_required_ruby_version_met(spec) # :nodoc:
    if rrv = spec.required_ruby_version
      ruby_version = Gem.ruby_version
      unless rrv.satisfied_by? ruby_version
        raise Gem::RuntimeRequirementNotMetError,
          "#{spec.full_name} requires Ruby version #{rrv}. The current ruby version is #{ruby_version}."
      end
    end
  end

  def ensure_required_rubygems_version_met(spec) # :nodoc:
    if rrgv = spec.required_rubygems_version
      unless rrgv.satisfied_by? Gem.rubygems_version
        rg_version = Gem::VERSION
        raise Gem::RuntimeRequirementNotMetError,
          "#{spec.full_name} requires RubyGems version #{rrgv}. The current RubyGems version is #{rg_version}. " \
          "Try 'gem update --system' to update RubyGems itself."
      end
    end
  end
end
PK)J[e�h���6share/rubygems/rubygems/resolver/spec_specification.rbnu�[���# frozen_string_literal: true

##
# The Resolver::SpecSpecification contains common functionality for
# Resolver specifications that are backed by a Gem::Specification.

class Gem::Resolver::SpecSpecification < Gem::Resolver::Specification
  ##
  # A SpecSpecification is created for a +set+ for a Gem::Specification in
  # +spec+.  The +source+ is either where the +spec+ came from, or should be
  # loaded from.

  def initialize(set, spec, source = nil)
    @set    = set
    @source = source
    @spec   = spec
  end

  ##
  # The dependencies of the gem for this specification

  def dependencies
    spec.dependencies
  end

  ##
  # The required_ruby_version constraint for this specification

  def required_ruby_version
    spec.required_ruby_version
  end

  ##
  # The required_rubygems_version constraint for this specification

  def required_rubygems_version
    spec.required_rubygems_version
  end

  ##
  # The name and version of the specification.
  #
  # Unlike Gem::Specification#full_name, the platform is not included.

  def full_name
    "#{spec.name}-#{spec.version}"
  end

  ##
  # The name of the gem for this specification

  def name
    spec.name
  end

  ##
  # The platform this gem works on.

  def platform
    spec.platform
  end

  ##
  # The version of the gem for this specification.

  def version
    spec.version
  end

  ##
  # The hash value for this specification.

  def hash
    spec.hash
  end
end
PK)J[��3=##7share/rubygems/rubygems/resolver/local_specification.rbnu�[���# frozen_string_literal: true

##
# A LocalSpecification comes from a .gem file on the local filesystem.

class Gem::Resolver::LocalSpecification < Gem::Resolver::SpecSpecification
  ##
  # Returns +true+ if this gem is installable for the current platform.

  def installable_platform?
    return true if @source.is_a? Gem::Source::SpecificFile

    super
  end

  def local? # :nodoc:
    true
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[LocalSpecification", "]" do
      q.breakable
      q.text "name: #{name}"

      q.breakable
      q.text "version: #{version}"

      q.breakable
      q.text "platform: #{platform}"

      q.breakable
      q.text "dependencies:"
      q.breakable
      q.pp dependencies

      q.breakable
      q.text "source: #{@source.path}"
    end
  end
end
PK)J[){Y%��,share/rubygems/rubygems/resolver/best_set.rbnu�[���# frozen_string_literal: true

##
# The BestSet chooses the best available method to query a remote index.
#
# It combines IndexSet and APISet

class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
  ##
  # Creates a BestSet for the given +sources+ or Gem::sources if none are
  # specified.  +sources+ must be a Gem::SourceList.

  def initialize(sources = Gem.sources)
    super()

    @sources = sources
  end

  ##
  # Picks which sets to use for the configured sources.

  def pick_sets # :nodoc:
    @sources.each_source do |source|
      @sets << source.dependency_resolver_set
    end
  end

  def find_all(req) # :nodoc:
    pick_sets if @remote && @sets.empty?

    super
  end

  def prefetch(reqs) # :nodoc:
    pick_sets if @remote && @sets.empty?

    super
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[BestSet", "]" do
      q.breakable
      q.text "sets:"

      q.breakable
      q.pp @sets
    end
  end
end
PK)J[���Ϙ�6share/rubygems/rubygems/resolver/activation_request.rbnu�[���# frozen_string_literal: true

##
# Specifies a Specification object that should be activated.  Also contains a
# dependency that was used to introduce this activation.

class Gem::Resolver::ActivationRequest
  ##
  # The parent request for this activation request.

  attr_reader :request

  ##
  # The specification to be activated.

  attr_reader :spec

  ##
  # Creates a new ActivationRequest that will activate +spec+.  The parent
  # +request+ is used to provide diagnostics in case of conflicts.

  def initialize(spec, request)
    @spec = spec
    @request = request
  end

  def ==(other) # :nodoc:
    case other
    when Gem::Specification
      @spec == other
    when Gem::Resolver::ActivationRequest
      @spec == other.spec
    else
      false
    end
  end

  def eql?(other)
    self == other
  end

  def hash
    @spec.hash
  end

  ##
  # Is this activation request for a development dependency?

  def development?
    @request.development?
  end

  ##
  # Downloads a gem at +path+ and returns the file path.

  def download(path)
    Gem.ensure_gem_subdirectories path

    if @spec.respond_to? :sources
      exception = nil
      path = @spec.sources.find do |source|
        source.download full_spec, path
      rescue exception
      end
      return path      if path
      raise  exception if exception

    elsif @spec.respond_to? :source
      source = @spec.source
      source.download full_spec, path

    else
      source = Gem.sources.first
      source.download full_spec, path
    end
  end

  ##
  # The full name of the specification to be activated.

  def full_name
    name_tuple.full_name
  end

  alias_method :to_s, :full_name

  ##
  # The Gem::Specification for this activation request.

  def full_spec
    Gem::Specification === @spec ? @spec : @spec.spec
  end

  def inspect # :nodoc:
    format("#<%s for %p from %s>", self.class, @spec, @request)
  end

  ##
  # True if the requested gem has already been installed.

  def installed?
    case @spec
    when Gem::Resolver::VendorSpecification then
      true
    else
      this_spec = full_spec

      Gem::Specification.any? do |s|
        s == this_spec && s.base_dir == this_spec.base_dir
      end
    end
  end

  ##
  # The name of this activation request's specification

  def name
    @spec.name
  end

  ##
  # Return the ActivationRequest that contained the dependency
  # that we were activated for.

  def parent
    @request.requester
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[Activation request", "]" do
      q.breakable
      q.pp @spec

      q.breakable
      q.text " for "
      q.pp @request
    end
  end

  ##
  # The version of this activation request's specification

  def version
    @spec.version
  end

  ##
  # The platform of this activation request's specification

  def platform
    @spec.platform
  end

  private

  def name_tuple
    @name_tuple ||= Gem::NameTuple.new(name, version, platform)
  end
end
PK)J[��͞AA8share/rubygems/rubygems/resolver/vendor_specification.rbnu�[���# frozen_string_literal: true

##
# A VendorSpecification represents a gem that has been unpacked into a project
# and is being loaded through a gem dependencies file through the +path:+
# option.

class Gem::Resolver::VendorSpecification < Gem::Resolver::SpecSpecification
  def ==(other) # :nodoc:
    self.class === other &&
      @set  == other.set &&
      @spec == other.spec &&
      @source == other.source
  end

  ##
  # This is a null install as this gem was unpacked into a directory.
  # +options+ are ignored.

  def install(options = {})
    yield nil
  end
end
PK)J[�^5share/rubygems/rubygems/resolver/git_specification.rbnu�[���# frozen_string_literal: true

##
# A GitSpecification represents a gem that is sourced from a git repository
# and is being loaded through a gem dependencies file through the +git:+
# option.

class Gem::Resolver::GitSpecification < Gem::Resolver::SpecSpecification
  def ==(other) # :nodoc:
    self.class === other &&
      @set  == other.set &&
      @spec == other.spec &&
      @source == other.source
  end

  def add_dependency(dependency) # :nodoc:
    spec.dependencies << dependency
  end

  ##
  # Installing a git gem only involves building the extensions and generating
  # the executables.

  def install(options = {})
    require_relative "../installer"

    installer = Gem::Installer.for_spec spec, options

    yield installer if block_given?

    installer.run_pre_install_hooks
    installer.build_extensions
    installer.run_post_build_hooks
    installer.generate_bin
    installer.run_post_install_hooks
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[GitSpecification", "]" do
      q.breakable
      q.text "name: #{name}"

      q.breakable
      q.text "version: #{version}"

      q.breakable
      q.text "dependencies:"
      q.breakable
      q.pp dependencies

      q.breakable
      q.text "source:"
      q.breakable
      q.pp @source
    end
  end
end
PK)J[��w	w	7share/rubygems/rubygems/resolver/index_specification.rbnu�[���# frozen_string_literal: true

##
# Represents a possible Specification object returned from IndexSet.  Used to
# delay needed to download full Specification objects when only the +name+
# and +version+ are needed.

class Gem::Resolver::IndexSpecification < Gem::Resolver::Specification
  ##
  # An IndexSpecification is created from the index format described in `gem
  # help generate_index`.
  #
  # The +set+ contains other specifications for this (URL) +source+.
  #
  # The +name+, +version+ and +platform+ are the name, version and platform of
  # the gem.

  def initialize(set, name, version, source, platform)
    super()

    @set = set
    @name = name
    @version = version
    @source = source
    @platform = Gem::Platform.new(platform.to_s)
    @original_platform = platform.to_s

    @spec = nil
  end

  ##
  # The dependencies of the gem for this specification

  def dependencies
    spec.dependencies
  end

  ##
  # The required_ruby_version constraint for this specification
  #
  # A fallback is included because when generated, some marshalled specs have it
  # set to +nil+.

  def required_ruby_version
    spec.required_ruby_version || Gem::Requirement.default
  end

  ##
  # The required_rubygems_version constraint for this specification
  #
  # A fallback is included because the original version of the specification
  # API didn't include that field, so some marshalled specs in the index have it
  # set to +nil+.

  def required_rubygems_version
    spec.required_rubygems_version || Gem::Requirement.default
  end

  def ==(other)
    self.class === other &&
      @name == other.name &&
      @version == other.version &&
      @platform == other.platform
  end

  def hash
    @name.hash ^ @version.hash ^ @platform.hash
  end

  def inspect # :nodoc:
    format("#<%s %s source %s>", self.class, full_name, @source)
  end

  def pretty_print(q) # :nodoc:
    q.group 2, "[Index specification", "]" do
      q.breakable
      q.text full_name

      unless @platform == Gem::Platform::RUBY
        q.breakable
        q.text @platform.to_s
      end

      q.breakable
      q.text "source "
      q.pp @source
    end
  end

  ##
  # Fetches a Gem::Specification for this IndexSpecification from the #source.

  def spec # :nodoc:
    @spec ||=
      begin
        tuple = Gem::NameTuple.new @name, @version, @original_platform

        @source.fetch_spec tuple
      end
  end
end
PK)J[A�=��6share/rubygems/rubygems/resolver/api_set/gem_parser.rbnu�[���# frozen_string_literal: true

class Gem::Resolver::APISet::GemParser
  def parse(line)
    version_and_platform, rest = line.split(" ", 2)
    version, platform = version_and_platform.split("-", 2)
    dependencies, requirements = rest.split("|", 2).map! {|s| s.split(",") } if rest
    dependencies = dependencies ? dependencies.map! {|d| parse_dependency(d) } : []
    requirements = requirements ? requirements.map! {|d| parse_dependency(d) } : []
    [version, platform, dependencies, requirements]
  end

  private

  def parse_dependency(string)
    dependency = string.split(":")
    dependency[-1] = dependency[-1].split("&") if dependency.size > 1
    dependency[0] = -dependency[0]
    dependency
  end
end
PK)J[F0T�/share/rubygems/rubygems/resolver/current_set.rbnu�[���# frozen_string_literal: true

##
# A set which represents the installed gems. Respects
# all the normal settings that control where to look
# for installed gems.

class Gem::Resolver::CurrentSet < Gem::Resolver::Set
  def find_all(req)
    req.dependency.matching_specs
  end
end
PK)J[�{G��	�	share/rubygems/rubygems/util.rbnu�[���# frozen_string_literal: true

require_relative "deprecate"

##
# This module contains various utility methods as module methods.

module Gem::Util
  ##
  # Zlib::GzipReader wrapper that unzips +data+.

  def self.gunzip(data)
    require "zlib"
    require "stringio"
    data = StringIO.new(data, "r")

    gzip_reader = begin
                    Zlib::GzipReader.new(data)
                  rescue Zlib::GzipFile::Error => e
                    raise e.class, e.inspect, e.backtrace
                  end

    unzipped = gzip_reader.read
    unzipped.force_encoding Encoding::BINARY
    unzipped
  end

  ##
  # Zlib::GzipWriter wrapper that zips +data+.

  def self.gzip(data)
    require "zlib"
    require "stringio"
    zipped = StringIO.new(String.new, "w")
    zipped.set_encoding Encoding::BINARY

    Zlib::GzipWriter.wrap zipped do |io|
      io.write data
    end

    zipped.string
  end

  ##
  # A Zlib::Inflate#inflate wrapper

  def self.inflate(data)
    require "zlib"
    Zlib::Inflate.inflate data
  end

  ##
  # This calls IO.popen and reads the result

  def self.popen(*command)
    IO.popen command, &:read
  end

  ##
  # Invokes system, but silences all output.

  def self.silent_system(*command)
    opt = { out: IO::NULL, err: [:child, :out] }
    if Hash === command.last
      opt.update(command.last)
      cmds = command[0...-1]
    else
      cmds = command.dup
    end
    system(*(cmds << opt))
  end

  class << self
    extend Gem::Deprecate

    rubygems_deprecate :silent_system
  end

  ##
  # Enumerates the parents of +directory+.

  def self.traverse_parents(directory, &block)
    return enum_for __method__, directory unless block_given?

    here = File.expand_path directory
    loop do
      begin
        Dir.chdir here, &block
      rescue StandardError
        Errno::EACCES
      end

      new_here = File.expand_path("..", here)
      return if new_here == here # toplevel
      here = new_here
    end
  end

  ##
  # Globs for files matching +pattern+ inside of +directory+,
  # returning absolute paths to the matching files.

  def self.glob_files_in_dir(glob, base_path)
    Dir.glob(glob, base: base_path).map! {|f| File.expand_path(f, base_path) }
  end

  ##
  # Corrects +path+ (usually returned by `Gem::URI.parse().path` on Windows), that
  # comes with a leading slash.

  def self.correct_for_windows_path(path)
    if path[0].chr == "/" && path[1].chr.match?(/[a-z]/i) && path[2].chr == ":"
      path[1..-1]
    else
      path
    end
  end
end
PK)J[Fߺ̎�2share/rubygems/rubygems/core_ext/tcpsocket_init.rbnu�[���# frozen_string_literal: true

require "socket"

module CoreExtensions
  module TCPSocketExt
    def self.prepended(base)
      base.prepend Initializer
    end

    module Initializer
      CONNECTION_TIMEOUT = 5
      IPV4_DELAY_SECONDS = 0.1

      def initialize(host, serv, *rest)
        mutex = Thread::Mutex.new
        addrs = []
        threads = []
        cond_var = Thread::ConditionVariable.new

        Addrinfo.foreach(host, serv, nil, :STREAM) do |addr|
          Thread.report_on_exception = false

          threads << Thread.new(addr) do
            # give head start to ipv6 addresses
            sleep IPV4_DELAY_SECONDS if addr.ipv4?

            # raises Errno::ECONNREFUSED when ip:port is unreachable
            Socket.tcp(addr.ip_address, serv, connect_timeout: CONNECTION_TIMEOUT).close
            mutex.synchronize do
              addrs << addr.ip_address
              cond_var.signal
            end
          end
        end

        mutex.synchronize do
          timeout_time = CONNECTION_TIMEOUT + Time.now.to_f
          while addrs.empty? && (remaining_time = timeout_time - Time.now.to_f) > 0
            cond_var.wait(mutex, remaining_time)
          end

          host = addrs.shift unless addrs.empty?
        end

        threads.each {|t| t.kill.join if t.alive? }

        super(host, serv, *rest)
      end
    end
  end
end

TCPSocket.prepend CoreExtensions::TCPSocketExt
PK)J[�i���.share/rubygems/rubygems/core_ext/kernel_gem.rbnu�[���# frozen_string_literal: true

module Kernel
  ##
  # Use Kernel#gem to activate a specific version of +gem_name+.
  #
  # +requirements+ is a list of version requirements that the
  # specified gem must match, most commonly "= example.version.number".  See
  # Gem::Requirement for how to specify a version requirement.
  #
  # If you will be activating the latest version of a gem, there is no need to
  # call Kernel#gem, Kernel#require will do the right thing for you.
  #
  # Kernel#gem returns true if the gem was activated, otherwise false.  If the
  # gem could not be found, didn't match the version requirements, or a
  # different version was already activated, an exception will be raised.
  #
  # Kernel#gem should be called *before* any require statements (otherwise
  # RubyGems may load a conflicting library version).
  #
  # Kernel#gem only loads prerelease versions when prerelease +requirements+
  # are given:
  #
  #   gem 'rake', '>= 1.1.a', '< 2'
  #
  # In older RubyGems versions, the environment variable GEM_SKIP could be
  # used to skip activation of specified gems, for example to test out changes
  # that haven't been installed yet.  Now RubyGems defers to -I and the
  # RUBYLIB environment variable to skip activation of a gem.
  #
  # Example:
  #
  #   GEM_SKIP=libA:libB ruby -I../libA -I../libB ./mycode.rb

  def gem(gem_name, *requirements) # :doc:
    skip_list = (ENV["GEM_SKIP"] || "").split(/:/)
    raise Gem::LoadError, "skipping #{gem_name}" if skip_list.include? gem_name

    if gem_name.is_a? Gem::Dependency
      unless Gem::Deprecate.skip
        warn "#{Gem.location_of_caller.join ":"}:Warning: Kernel.gem no longer "\
          "accepts a Gem::Dependency object, please pass the name "\
          "and requirements directly"
      end

      requirements = gem_name.requirement
      gem_name = gem_name.name
    end

    dep = Gem::Dependency.new(gem_name, *requirements)

    loaded = Gem.loaded_specs[gem_name]

    return false if loaded && dep.matches_spec?(loaded)

    spec = dep.to_spec

    if spec
      if Gem::LOADED_SPECS_MUTEX.owned?
        spec.activate
      else
        Gem::LOADED_SPECS_MUTEX.synchronize { spec.activate }
      end
    end
  end

  private :gem
end
PK)J[,f\���/share/rubygems/rubygems/core_ext/kernel_warn.rbnu�[���# frozen_string_literal: true

module Kernel
  rubygems_path = "#{__dir__}/" # Frames to be skipped start with this path.

  original_warn = instance_method(:warn)

  remove_method :warn

  class << self
    remove_method :warn
  end

  module_function define_method(:warn) {|*messages, **kw|
    unless uplevel = kw[:uplevel]
      return original_warn.bind_call(self, *messages, **kw)
    end

    # Ensure `uplevel` fits a `long`
    uplevel, = [uplevel].pack("l!").unpack("l!")

    if uplevel >= 0
      start = 0
      while uplevel >= 0
        loc, = caller_locations(start, 1)
        unless loc
          # No more backtrace
          start += uplevel
          break
        end

        start += 1

        next unless path = loc.path
        unless path.start_with?(rubygems_path, "<internal:")
          # Non-rubygems frames
          uplevel -= 1
        end
      end
      kw[:uplevel] = start
    end

    original_warn.bind_call(self, *messages, **kw)
  }
end
PK)J[����SS2share/rubygems/rubygems/core_ext/kernel_require.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require "monitor"

module Kernel
  RUBYGEMS_ACTIVATION_MONITOR = Monitor.new # :nodoc:

  # Make sure we have a reference to Ruby's original Kernel#require
  unless defined?(gem_original_require)
    # :stopdoc:
    alias_method :gem_original_require, :require
    private :gem_original_require
    # :startdoc:
  end

  ##
  # When RubyGems is required, Kernel#require is replaced with our own which
  # is capable of loading gems on demand.
  #
  # When you call <tt>require 'x'</tt>, this is what happens:
  # * If the file can be loaded from the existing Ruby loadpath, it
  #   is.
  # * Otherwise, installed gems are searched for a file that matches.
  #   If it's found in gem 'y', that gem is activated (added to the
  #   loadpath).
  #
  # The normal <tt>require</tt> functionality of returning false if
  # that file has already been loaded is preserved.

  def require(path) # :doc:
    return gem_original_require(path) unless Gem.discover_gems_on_require

    RUBYGEMS_ACTIVATION_MONITOR.synchronize do
      path = File.path(path)

      # If +path+ belongs to a default gem, we activate it and then go straight
      # to normal require

      if spec = Gem.find_default_spec(path)
        name = spec.name

        next if Gem.loaded_specs[name]

        # Ensure -I beats a default gem
        resolved_path = begin
          rp = nil
          load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths
          Gem.suffixes.find do |s|
            $LOAD_PATH[0...load_path_check_index].find do |lp|
              if File.symlink? lp # for backward compatibility
                next
              end

              full_path = File.expand_path(File.join(lp, "#{path}#{s}"))
              rp = full_path if File.file?(full_path)
            end
          end
          rp
        end

        Kernel.send(:gem, name, Gem::Requirement.default_prerelease) unless
          resolved_path

        next
      end

      # If there are no unresolved deps, then we can use just try
      # normal require handle loading a gem from the rescue below.

      if Gem::Specification.unresolved_deps.empty?
        next
      end

      # If +path+ is for a gem that has already been loaded, don't
      # bother trying to find it in an unresolved gem, just go straight
      # to normal require.
      #--
      # TODO request access to the C implementation of this to speed up RubyGems

      if Gem::Specification.find_active_stub_by_path(path)
        next
      end

      # Attempt to find +path+ in any unresolved gems...

      found_specs = Gem::Specification.find_in_unresolved path

      # If there are no directly unresolved gems, then try and find +path+
      # in any gems that are available via the currently unresolved gems.
      # For example, given:
      #
      #   a => b => c => d
      #
      # If a and b are currently active with c being unresolved and d.rb is
      # requested, then find_in_unresolved_tree will find d.rb in d because
      # it's a dependency of c.
      #
      if found_specs.empty?
        found_specs = Gem::Specification.find_in_unresolved_tree path

        found_specs.each(&:activate)

      # We found +path+ directly in an unresolved gem. Now we figure out, of
      # the possible found specs, which one we should activate.
      else

        # Check that all the found specs are just different
        # versions of the same gem
        names = found_specs.map(&:name).uniq

        if names.size > 1
          raise Gem::LoadError, "#{path} found in multiple gems: #{names.join ", "}"
        end

        # Ok, now find a gem that has no conflicts, starting
        # at the highest version.
        valid = found_specs.find {|s| !s.has_conflicts? }

        unless valid
          le = Gem::LoadError.new "unable to find a version of '#{names.first}' to activate"
          le.name = names.first
          raise le
        end

        valid.activate
      end
    end

    begin
      gem_original_require(path)
    rescue LoadError => load_error
      if load_error.path == path &&
         RUBYGEMS_ACTIVATION_MONITOR.synchronize { Gem.try_activate(path) }

        return gem_original_require(path)
      end

      raise load_error
    end
  end

  private :require
end
PK)J[:>��	�	&share/rubygems/rubygems/source_list.rbnu�[���# frozen_string_literal: true

##
# The SourceList represents the sources rubygems has been configured to use.
# A source may be created from an array of sources:
#
#   Gem::SourceList.from %w[https://rubygems.example https://internal.example]
#
# Or by adding them:
#
#   sources = Gem::SourceList.new
#   sources << 'https://rubygems.example'
#
# The most common way to get a SourceList is Gem.sources.

class Gem::SourceList
  include Enumerable

  ##
  # Creates a new SourceList

  def initialize
    @sources = []
  end

  ##
  # The sources in this list

  attr_reader :sources

  ##
  # Creates a new SourceList from an array of sources.

  def self.from(ary)
    list = new

    list.replace ary

    list
  end

  def initialize_copy(other) # :nodoc:
    @sources = @sources.dup
  end

  ##
  # Appends +obj+ to the source list which may be a Gem::Source, Gem::URI or URI
  # String.

  def <<(obj)
    src = case obj
          when Gem::Source
            obj
          else
            Gem::Source.new(obj)
    end

    @sources << src unless @sources.include?(src)
    src
  end

  ##
  # Replaces this SourceList with the sources in +other+  See #<< for
  # acceptable items in +other+.

  def replace(other)
    clear

    other.each do |x|
      self << x
    end

    self
  end

  ##
  # Removes all sources from the SourceList.

  def clear
    @sources.clear
  end

  ##
  # Yields each source URI in the list.

  def each
    @sources.each {|s| yield s.uri.to_s }
  end

  ##
  # Yields each source in the list.

  def each_source(&b)
    @sources.each(&b)
  end

  ##
  # Returns true if there are no sources in this SourceList.

  def empty?
    @sources.empty?
  end

  def ==(other) # :nodoc:
    to_a == other
  end

  ##
  # Returns an Array of source URI Strings.

  def to_a
    @sources.map {|x| x.uri.to_s }
  end

  alias_method :to_ary, :to_a

  ##
  # Returns the first source in the list.

  def first
    @sources.first
  end

  ##
  # Returns true if this source list includes +other+ which may be a
  # Gem::Source or a source URI.

  def include?(other)
    if other.is_a? Gem::Source
      @sources.include? other
    else
      @sources.find {|x| x.uri.to_s == other.to_s }
    end
  end

  ##
  # Deletes +source+ from the source list which may be a Gem::Source or a URI.

  def delete(source)
    if source.is_a? Gem::Source
      @sources.delete source
    else
      @sources.delete_if {|x| x.uri.to_s == source.to_s }
    end
  end
end
PK)J[a��i4i4+share/rubygems/rubygems/user_interaction.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "deprecate"
require_relative "text"

##
# Module that defines the default UserInteraction.  Any class including this
# module will have access to the +ui+ method that returns the default UI.

module Gem::DefaultUserInteraction
  include Gem::Text

  ##
  # The default UI is a class variable of the singleton class for this
  # module.

  @ui = nil

  ##
  # Return the default UI.

  def self.ui
    @ui ||= Gem::ConsoleUI.new
  end

  ##
  # Set the default UI.  If the default UI is never explicitly set, a simple
  # console based UserInteraction will be used automatically.

  def self.ui=(new_ui)
    @ui = new_ui
  end

  ##
  # Use +new_ui+ for the duration of +block+.

  def self.use_ui(new_ui)
    old_ui = @ui
    @ui = new_ui
    yield
  ensure
    @ui = old_ui
  end

  ##
  # See DefaultUserInteraction::ui

  def ui
    Gem::DefaultUserInteraction.ui
  end

  ##
  # See DefaultUserInteraction::ui=

  def ui=(new_ui)
    Gem::DefaultUserInteraction.ui = new_ui
  end

  ##
  # See DefaultUserInteraction::use_ui

  def use_ui(new_ui, &block)
    Gem::DefaultUserInteraction.use_ui(new_ui, &block)
  end
end

##
# UserInteraction allows RubyGems to interact with the user through standard
# methods that can be replaced with more-specific UI methods for different
# displays.
#
# Since UserInteraction dispatches to a concrete UI class you may need to
# reference other classes for specific behavior such as Gem::ConsoleUI or
# Gem::SilentUI.
#
# Example:
#
#   class X
#     include Gem::UserInteraction
#
#     def get_answer
#       n = ask("What is the meaning of life?")
#     end
#   end

module Gem::UserInteraction
  include Gem::DefaultUserInteraction

  ##
  # Displays an alert +statement+.  Asks a +question+ if given.

  def alert(statement, question = nil)
    ui.alert statement, question
  end

  ##
  # Displays an error +statement+ to the error output location.  Asks a
  # +question+ if given.

  def alert_error(statement, question = nil)
    ui.alert_error statement, question
  end

  ##
  # Displays a warning +statement+ to the warning output location.  Asks a
  # +question+ if given.

  def alert_warning(statement, question = nil)
    ui.alert_warning statement, question
  end

  ##
  # Asks a +question+ and returns the answer.

  def ask(question)
    ui.ask question
  end

  ##
  # Asks for a password with a +prompt+

  def ask_for_password(prompt)
    ui.ask_for_password prompt
  end

  ##
  # Asks a yes or no +question+.  Returns true for yes, false for no.

  def ask_yes_no(question, default = nil)
    ui.ask_yes_no question, default
  end

  ##
  # Asks the user to answer +question+ with an answer from the given +list+.

  def choose_from_list(question, list)
    ui.choose_from_list question, list
  end

  ##
  # Displays the given +statement+ on the standard output (or equivalent).

  def say(statement = "")
    ui.say statement
  end

  ##
  # Terminates the RubyGems process with the given +exit_code+

  def terminate_interaction(exit_code = 0)
    ui.terminate_interaction exit_code
  end

  ##
  # Calls +say+ with +msg+ or the results of the block if really_verbose
  # is true.

  def verbose(msg = nil)
    say(clean_text(msg || yield)) if Gem.configuration.really_verbose
  end
end

##
# Gem::StreamUI implements a simple stream based user interface.

class Gem::StreamUI
  extend Gem::Deprecate

  ##
  # The input stream

  attr_reader :ins

  ##
  # The output stream

  attr_reader :outs

  ##
  # The error stream

  attr_reader :errs

  ##
  # Creates a new StreamUI wrapping +in_stream+ for user input, +out_stream+
  # for standard output, +err_stream+ for error output.  If +usetty+ is true
  # then special operations (like asking for passwords) will use the TTY
  # commands to disable character echo.

  def initialize(in_stream, out_stream, err_stream=$stderr, usetty=true)
    @ins = in_stream
    @outs = out_stream
    @errs = err_stream
    @usetty = usetty
  end

  ##
  # Returns true if TTY methods should be used on this StreamUI.

  def tty?
    @usetty && @ins.tty?
  end

  ##
  # Prints a formatted backtrace to the errors stream if backtraces are
  # enabled.

  def backtrace(exception)
    return unless Gem.configuration.backtrace

    @errs.puts "\t#{exception.backtrace.join "\n\t"}"
  end

  ##
  # Choose from a list of options.  +question+ is a prompt displayed above
  # the list.  +list+ is a list of option strings.  Returns the pair
  # [option_name, option_index].

  def choose_from_list(question, list)
    @outs.puts question

    list.each_with_index do |item, index|
      @outs.puts " #{index + 1}. #{item}"
    end

    @outs.print "> "
    @outs.flush

    result = @ins.gets

    return nil, nil unless result

    result = result.strip.to_i - 1
    return nil, nil unless (0...list.size) === result
    [list[result], result]
  end

  ##
  # Ask a question.  Returns a true for yes, false for no.  If not connected
  # to a tty, raises an exception if default is nil, otherwise returns
  # default.

  def ask_yes_no(question, default=nil)
    unless tty?
      if default.nil?
        raise Gem::OperationNotSupportedError,
              "Not connected to a tty and no default specified"
      else
        return default
      end
    end

    default_answer = case default
                     when nil
                       "yn"
                     when true
                       "Yn"
                     else
                       "yN"
    end

    result = nil

    while result.nil? do
      result = case ask "#{question} [#{default_answer}]"
               when /^y/i then true
               when /^n/i then false
               when /^$/  then default
      end
    end

    result
  end

  ##
  # Ask a question.  Returns an answer if connected to a tty, nil otherwise.

  def ask(question)
    return nil unless tty?

    @outs.print(question + "  ")
    @outs.flush

    result = @ins.gets
    result&.chomp!
    result
  end

  ##
  # Ask for a password. Does not echo response to terminal.

  def ask_for_password(question)
    return nil unless tty?

    @outs.print(question, "  ")
    @outs.flush

    password = _gets_noecho
    @outs.puts
    password&.chomp!
    password
  end

  def require_io_console
    @require_io_console ||= begin
      begin
        require "io/console"
      rescue LoadError
      end
      true
    end
  end

  def _gets_noecho
    require_io_console
    @ins.noecho { @ins.gets }
  end

  ##
  # Display a statement.

  def say(statement="")
    @outs.puts statement
  end

  ##
  # Display an informational alert.  Will ask +question+ if it is not nil.

  def alert(statement, question=nil)
    @outs.puts "INFO:  #{statement}"
    ask(question) if question
  end

  ##
  # Display a warning on stderr.  Will ask +question+ if it is not nil.

  def alert_warning(statement, question=nil)
    @errs.puts "WARNING:  #{statement}"
    ask(question) if question
  end

  ##
  # Display an error message in a location expected to get error messages.
  # Will ask +question+ if it is not nil.

  def alert_error(statement, question=nil)
    @errs.puts "ERROR:  #{statement}"
    ask(question) if question
  end

  ##
  # Terminate the application with exit code +status+, running any exit
  # handlers that might have been defined.

  def terminate_interaction(status = 0)
    close
    raise Gem::SystemExitException, status
  end

  def close
  end

  ##
  # Return a progress reporter object chosen from the current verbosity.

  def progress_reporter(*args)
    case Gem.configuration.verbose
    when nil, false
      SilentProgressReporter.new(@outs, *args)
    when true
      SimpleProgressReporter.new(@outs, *args)
    else
      VerboseProgressReporter.new(@outs, *args)
    end
  end

  ##
  # An absolutely silent progress reporter.

  class SilentProgressReporter
    ##
    # The count of items is never updated for the silent progress reporter.

    attr_reader :count

    ##
    # Creates a silent progress reporter that ignores all input arguments.

    def initialize(out_stream, size, initial_message, terminal_message = nil)
    end

    ##
    # Does not print +message+ when updated as this object has taken a vow of
    # silence.

    def updated(message)
    end

    ##
    # Does not print anything when complete as this object has taken a vow of
    # silence.

    def done
    end
  end

  ##
  # A basic dotted progress reporter.

  class SimpleProgressReporter
    include Gem::DefaultUserInteraction

    ##
    # The number of progress items counted so far.

    attr_reader :count

    ##
    # Creates a new progress reporter that will write to +out_stream+ for
    # +size+ items.  Shows the given +initial_message+ when progress starts
    # and the +terminal_message+ when it is complete.

    def initialize(out_stream, size, initial_message, terminal_message = "complete")
      @out = out_stream
      @total = size
      @count = 0
      @terminal_message = terminal_message

      @out.puts initial_message
    end

    ##
    # Prints out a dot and ignores +message+.

    def updated(message)
      @count += 1
      @out.print "."
      @out.flush
    end

    ##
    # Prints out the terminal message.

    def done
      @out.puts "\n#{@terminal_message}"
    end
  end

  ##
  # A progress reporter that prints out messages about the current progress.

  class VerboseProgressReporter
    include Gem::DefaultUserInteraction

    ##
    # The number of progress items counted so far.

    attr_reader :count

    ##
    # Creates a new progress reporter that will write to +out_stream+ for
    # +size+ items.  Shows the given +initial_message+ when progress starts
    # and the +terminal_message+ when it is complete.

    def initialize(out_stream, size, initial_message, terminal_message = "complete")
      @out = out_stream
      @total = size
      @count = 0
      @terminal_message = terminal_message

      @out.puts initial_message
    end

    ##
    # Prints out the position relative to the total and the +message+.

    def updated(message)
      @count += 1
      @out.puts "#{@count}/#{@total}: #{message}"
    end

    ##
    # Prints out the terminal message.

    def done
      @out.puts @terminal_message
    end
  end

  ##
  # Return a download reporter object chosen from the current verbosity

  def download_reporter(*args)
    if [nil, false].include?(Gem.configuration.verbose) || !@outs.tty?
      SilentDownloadReporter.new(@outs, *args)
    else
      ThreadedDownloadReporter.new(@outs, *args)
    end
  end

  ##
  # An absolutely silent download reporter.

  class SilentDownloadReporter
    ##
    # The silent download reporter ignores all arguments

    def initialize(out_stream, *args)
    end

    ##
    # The silent download reporter does not display +filename+ or care about
    # +filesize+ because it is silent.

    def fetch(filename, filesize)
    end

    ##
    # Nothing can update the silent download reporter.

    def update(current)
    end

    ##
    # The silent download reporter won't tell you when the download is done.
    # Because it is silent.

    def done
    end
  end

  ##
  # A progress reporter that behaves nicely with threaded downloading.

  class ThreadedDownloadReporter
    MUTEX = Thread::Mutex.new

    ##
    # The current file name being displayed

    attr_reader :file_name

    ##
    # Creates a new threaded download reporter that will display on
    # +out_stream+.  The other arguments are ignored.

    def initialize(out_stream, *args)
      @file_name = nil
      @out = out_stream
    end

    ##
    # Tells the download reporter that the +file_name+ is being fetched.
    # The other arguments are ignored.

    def fetch(file_name, *args)
      if @file_name.nil?
        @file_name = file_name
        locked_puts "Fetching #{@file_name}"
      end
    end

    ##
    # Updates the threaded download reporter for the given number of +bytes+.

    def update(bytes)
      # Do nothing.
    end

    ##
    # Indicates the download is complete.

    def done
      # Do nothing.
    end

    private

    def locked_puts(message)
      MUTEX.synchronize do
        @out.puts message
      end
    end
  end
end

##
# Subclass of StreamUI that instantiates the user interaction using $stdin,
# $stdout, and $stderr.

class Gem::ConsoleUI < Gem::StreamUI
  ##
  # The Console UI has no arguments as it defaults to reading input from
  # stdin, output to stdout and warnings or errors to stderr.

  def initialize
    super $stdin, $stdout, $stderr, true
  end
end

##
# SilentUI is a UI choice that is absolutely silent.

class Gem::SilentUI < Gem::StreamUI
  ##
  # The SilentUI has no arguments as it does not use any stream.

  def initialize
    io = NullIO.new
    super io, io, io, false
  end

  def close
  end

  def download_reporter(*args) # :nodoc:
    SilentDownloadReporter.new(@outs, *args)
  end

  def progress_reporter(*args) # :nodoc:
    SilentProgressReporter.new(@outs, *args)
  end

  ##
  # An absolutely silent IO.

  class NullIO
    def puts(*args)
    end

    def print(*args)
    end

    def flush
    end

    def gets(*args)
    end

    def tty?
      false
    end
  end
end
PK)J[">O�QQ-share/rubygems/rubygems/vendored_molinillo.rbnu�[���# frozen_string_literal: true

require_relative "vendor/molinillo/lib/molinillo"
PK)J[�j�K[[/share/rubygems/rubygems/local_remote_options.rbnu�[���# frozen_string_literal: true

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

require_relative "vendor/uri/lib/uri"
require_relative "../rubygems"

##
# Mixin methods for local and remote Gem::Command options.

module Gem::LocalRemoteOptions
  ##
  # Allows Gem::OptionParser to handle HTTP URIs.

  def accept_uri_http
    Gem::OptionParser.accept Gem::URI::HTTP do |value|
      begin
        uri = Gem::URI.parse value
      rescue Gem::URI::InvalidURIError
        raise Gem::OptionParser::InvalidArgument, value
      end

      valid_uri_schemes = ["http", "https", "file", "s3"]
      unless valid_uri_schemes.include?(uri.scheme)
        msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map {|s| "#{s}://" }}"
        raise ArgumentError, msg
      end

      value
    end
  end

  ##
  # Add local/remote options to the command line parser.

  def add_local_remote_options
    add_option(:"Local/Remote", "-l", "--local",
               "Restrict operations to the LOCAL domain") do |_value, options|
      options[:domain] = :local
    end

    add_option(:"Local/Remote", "-r", "--remote",
      "Restrict operations to the REMOTE domain") do |_value, options|
      options[:domain] = :remote
    end

    add_option(:"Local/Remote", "-b", "--both",
               "Allow LOCAL and REMOTE operations") do |_value, options|
      options[:domain] = :both
    end

    add_bulk_threshold_option
    add_clear_sources_option
    add_source_option
    add_proxy_option
    add_update_sources_option
  end

  ##
  # Add the --bulk-threshold option

  def add_bulk_threshold_option
    add_option(:"Local/Remote", "-B", "--bulk-threshold COUNT",
               "Threshold for switching to bulk",
               "synchronization (default #{Gem.configuration.bulk_threshold})") do |value, _options|
      Gem.configuration.bulk_threshold = value.to_i
    end
  end

  ##
  # Add the --clear-sources option

  def add_clear_sources_option
    add_option(:"Local/Remote", "--clear-sources",
               "Clear the gem sources") do |_value, options|
      Gem.sources = nil
      options[:sources_cleared] = true
    end
  end

  ##
  # Add the --http-proxy option

  def add_proxy_option
    accept_uri_http

    add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", Gem::URI::HTTP,
               "Use HTTP proxy for remote operations") do |value, options|
      options[:http_proxy] = value == false ? :no_proxy : value
      Gem.configuration[:http_proxy] = options[:http_proxy]
    end
  end

  ##
  # Add the --source option

  def add_source_option
    accept_uri_http

    add_option(:"Local/Remote", "-s", "--source URL", Gem::URI::HTTP,
               "Append URL to list of remote gem sources") do |source, options|
      source << "/" unless source.end_with?("/")

      if options.delete :sources_cleared
        Gem.sources = [source]
      else
        Gem.sources << source unless Gem.sources.include?(source)
      end
    end
  end

  ##
  # Add the --update-sources option

  def add_update_sources_option
    add_option(:Deprecated, "-u", "--[no-]update-sources",
               "Update local source cache") do |value, _options|
      Gem.configuration.update_sources = value
    end
  end

  ##
  # Is fetching of local and remote information enabled?

  def both?
    options[:domain] == :both
  end

  ##
  # Is local fetching enabled?

  def local?
    [:local, :both].include?(options[:domain])
  end

  ##
  # Is remote fetching enabled?

  def remote?
    [:remote, :both].include?(options[:domain])
  end
end
PK)J[�7�XOO,share/rubygems/rubygems/vendored_optparse.rbnu�[���# frozen_string_literal: true

require_relative "vendor/optparse/lib/optparse"
PK)J[C���(share/rubygems/rubygems/available_set.rbnu�[���# frozen_string_literal: true

class Gem::AvailableSet
  include Enumerable

  Tuple = Struct.new(:spec, :source)

  attr_accessor :remote # :nodoc:

  def initialize
    @set = []
    @sorted = nil
    @remote = true
  end

  attr_reader :set

  def add(spec, source)
    @set << Tuple.new(spec, source)
    @sorted = nil
    self
  end

  def <<(o)
    case o
    when Gem::AvailableSet
      s = o.set
    when Array
      s = o.map do |sp,so|
        if !sp.is_a?(Gem::Specification) || !so.is_a?(Gem::Source)
          raise TypeError, "Array must be in [[spec, source], ...] form"
        end

        Tuple.new(sp,so)
      end
    else
      raise TypeError, "must be a Gem::AvailableSet"
    end

    @set += s
    @sorted = nil

    self
  end

  ##
  # Yields each Tuple in this AvailableSet

  def each
    return enum_for __method__ unless block_given?

    @set.each do |tuple|
      yield tuple
    end
  end

  ##
  # Yields the Gem::Specification for each Tuple in this AvailableSet

  def each_spec
    return enum_for __method__ unless block_given?

    each do |tuple|
      yield tuple.spec
    end
  end

  def empty?
    @set.empty?
  end

  def all_specs
    @set.map(&:spec)
  end

  def match_platform!
    @set.reject! {|t| !Gem::Platform.match_spec?(t.spec) }
    @sorted = nil
    self
  end

  def sorted
    @sorted ||= @set.sort do |a,b|
      i = b.spec <=> a.spec
      i != 0 ? i : (a.source <=> b.source)
    end
  end

  def size
    @set.size
  end

  def source_for(spec)
    f = @set.find {|t| t.spec == spec }
    f.source
  end

  ##
  # Converts this AvailableSet into a RequestSet that can be used to install
  # gems.
  #
  # If +development+ is :none then no development dependencies are installed.
  # Other options are :shallow for only direct development dependencies of the
  # gems in this set or :all for all development dependencies.

  def to_request_set(development = :none)
    request_set = Gem::RequestSet.new
    request_set.development = development == :all

    each_spec do |spec|
      request_set.always_install << spec

      request_set.gem spec.name, spec.version
      request_set.import spec.development_dependencies if
        development == :shallow
    end

    request_set
  end

  ##
  #
  # Used by the Resolver, the protocol to use a AvailableSet as a
  # search Set.

  def find_all(req)
    dep = req.dependency

    match = @set.find_all do |t|
      dep.match? t.spec
    end

    match.map do |t|
      Gem::Resolver::LocalSpecification.new(self, t.spec, t.source)
    end
  end

  def prefetch(reqs)
  end

  def pick_best!
    return self if empty?

    @set = [sorted.first]
    @sorted = nil
    self
  end

  def remove_installed!(dep)
    @set.reject! do |_t|
      # already locally installed
      Gem::Specification.any? do |installed_spec|
        dep.name == installed_spec.name &&
          dep.requirement.satisfied_by?(installed_spec.version)
      end
    end

    @sorted = nil
    self
  end

  def inject_into_list(dep_list)
    @set.each {|t| dep_list.add t.spec }
  end
end
PK)J[���V(share/rubygems/rubygems/uri_formatter.rbnu�[���# frozen_string_literal: true

##
# The UriFormatter handles URIs from user-input and escaping.
#
#   uf = Gem::UriFormatter.new 'example.com'
#
#   p uf.normalize #=> 'http://example.com'

class Gem::UriFormatter
  ##
  # The URI to be formatted.

  attr_reader :uri

  ##
  # Creates a new URI formatter for +uri+.

  def initialize(uri)
    require "cgi"

    @uri = uri
  end

  ##
  # Escapes the #uri for use as a CGI parameter

  def escape
    return unless @uri
    CGI.escape @uri
  end

  ##
  # Normalize the URI by adding "http://" if it is missing.

  def normalize
    /^(https?|ftp|file):/i.match?(@uri) ? @uri : "http://#{@uri}"
  end

  ##
  # Unescapes the #uri which came from a CGI parameter

  def unescape
    return unless @uri
    CGI.unescape @uri
  end
end
PK)J[<%�l� � .share/rubygems/rubygems/basic_specification.rbnu�[���# frozen_string_literal: true

##
# BasicSpecification is an abstract class which implements some common code
# used by both Specification and StubSpecification.

class Gem::BasicSpecification
  ##
  # Allows installation of extensions for git: gems.

  attr_writer :base_dir # :nodoc:

  ##
  # Sets the directory where extensions for this gem will be installed.

  attr_writer :extension_dir # :nodoc:

  ##
  # Is this specification ignored for activation purposes?

  attr_writer :ignored # :nodoc:

  ##
  # The path this gemspec was loaded from.  This attribute is not persisted.

  attr_accessor :loaded_from

  ##
  # Allows correct activation of git: and path: gems.

  attr_writer :full_gem_path # :nodoc:

  def initialize
    internal_init
  end

  def self.default_specifications_dir
    Gem.default_specifications_dir
  end

  class << self
    extend Gem::Deprecate
    rubygems_deprecate :default_specifications_dir, "Gem.default_specifications_dir"
  end

  ##
  # The path to the gem.build_complete file within the extension install
  # directory.

  def gem_build_complete_path # :nodoc:
    File.join extension_dir, "gem.build_complete"
  end

  ##
  # True when the gem has been activated

  def activated?
    raise NotImplementedError
  end

  ##
  # Returns the full path to the base gem directory.
  #
  # eg: /usr/local/lib/ruby/gems/1.8

  def base_dir
    raise NotImplementedError
  end

  ##
  # Return true if this spec can require +file+.

  def contains_requirable_file?(file)
    if ignored?
      if platform == Gem::Platform::RUBY || Gem::Platform.local === platform
        warn "Ignoring #{full_name} because its extensions are not built. " \
             "Try: gem pristine #{name} --version #{version}"
      end

      return false
    end

    is_soext = file.end_with?(".so", ".o")

    if is_soext
      have_file? file.delete_suffix(File.extname(file)), Gem.dynamic_library_suffixes
    else
      have_file? file, Gem.suffixes
    end
  end

  ##
  # Return true if this spec should be ignored because it's missing extensions.

  def ignored?
    return @ignored unless @ignored.nil?

    @ignored = missing_extensions?
  end

  def default_gem?
    !loaded_from.nil? &&
      File.dirname(loaded_from) == Gem.default_specifications_dir
  end

  ##
  # Regular gems take precedence over default gems

  def default_gem_priority
    default_gem? ? 1 : -1
  end

  ##
  # Gems higher up in +gem_path+ take precedence

  def base_dir_priority(gem_path)
    gem_path.index(base_dir) || gem_path.size
  end

  ##
  # Returns full path to the directory where gem's extensions are installed.

  def extension_dir
    @extension_dir ||= File.expand_path(File.join(extensions_dir, full_name))
  end

  ##
  # Returns path to the extensions directory.

  def extensions_dir
    Gem.default_ext_dir_for(base_dir) ||
      File.join(base_dir, "extensions", Gem::Platform.local.to_s,
                Gem.extension_api_version)
  end

  def find_full_gem_path # :nodoc:
    File.expand_path File.join(gems_dir, full_name)
  end

  private :find_full_gem_path

  ##
  # The full path to the gem (install path + full name).
  #
  # TODO: This is duplicated with #gem_dir. Eventually either of them should be deprecated.

  def full_gem_path
    @full_gem_path ||= find_full_gem_path
  end

  ##
  # Returns the full name (name-version) of this Gem.  Platform information
  # is included (name-version-platform) if it is specified and not the
  # default Ruby platform.

  def full_name
    if platform == Gem::Platform::RUBY || platform.nil?
      "#{name}-#{version}"
    else
      "#{name}-#{version}-#{platform}"
    end
  end

  ##
  # Returns the full name of this Gem (see `Gem::BasicSpecification#full_name`).
  # Information about where the gem is installed is also included if not
  # installed in the default GEM_HOME.

  def full_name_with_location
    if base_dir != Gem.dir
      "#{full_name} in #{base_dir}"
    else
      full_name
    end
  end

  ##
  # Full paths in the gem to add to <code>$LOAD_PATH</code> when this gem is
  # activated.

  def full_require_paths
    @full_require_paths ||=
      begin
        full_paths = raw_require_paths.map do |path|
          File.join full_gem_path, path
        end

        full_paths << extension_dir if have_extensions?

        full_paths
      end
  end

  ##
  # The path to the data directory for this gem.

  def datadir
    # TODO: drop the extra ", gem_name" which is uselessly redundant
    File.expand_path(File.join(gems_dir, full_name, "data", name))
  end

  ##
  # Full path of the target library file.
  # If the file is not in this gem, return nil.

  def to_fullpath(path)
    if activated?
      @paths_map ||= {}
      Gem.suffixes.each do |suf|
        full_require_paths.each do |dir|
          fullpath = "#{dir}/#{path}#{suf}"
          next unless File.file?(fullpath)
          @paths_map[path] ||= fullpath
        end
      end
      @paths_map[path]
    end
  end

  ##
  # Returns the full path to this spec's gem directory.
  # eg: /usr/local/lib/ruby/1.8/gems/mygem-1.0
  #
  # TODO: This is duplicated with #full_gem_path. Eventually either of them should be deprecated.

  def gem_dir
    @gem_dir ||= find_full_gem_path
  end

  ##
  # Returns the full path to the gems directory containing this spec's
  # gem directory. eg: /usr/local/lib/ruby/1.8/gems

  def gems_dir
    raise NotImplementedError
  end

  def internal_init # :nodoc:
    @extension_dir = nil
    @full_gem_path = nil
    @gem_dir = nil
    @ignored = nil
  end

  ##
  # Name of the gem

  def name
    raise NotImplementedError
  end

  ##
  # Platform of the gem

  def platform
    raise NotImplementedError
  end

  def raw_require_paths # :nodoc:
    raise NotImplementedError
  end

  ##
  # Paths in the gem to add to <code>$LOAD_PATH</code> when this gem is
  # activated.
  #
  # See also #require_paths=
  #
  # If you have an extension you do not need to add <code>"ext"</code> to the
  # require path, the extension build process will copy the extension files
  # into "lib" for you.
  #
  # The default value is <code>"lib"</code>
  #
  # Usage:
  #
  #   # If all library files are in the root directory...
  #   spec.require_path = '.'

  def require_paths
    return raw_require_paths unless have_extensions?

    [extension_dir].concat raw_require_paths
  end

  ##
  # Returns the paths to the source files for use with analysis and
  # documentation tools.  These paths are relative to full_gem_path.

  def source_paths
    paths = raw_require_paths.dup

    if have_extensions?
      ext_dirs = extensions.map do |extension|
        extension.split(File::SEPARATOR, 2).first
      end.uniq

      paths.concat ext_dirs
    end

    paths.uniq
  end

  ##
  # Return all files in this gem that match for +glob+.

  def matches_for_glob(glob) # TODO: rename?
    glob = File.join(lib_dirs_glob, glob)

    Dir[glob]
  end

  ##
  # Returns the list of plugins in this spec.

  def plugins
    matches_for_glob("rubygems#{Gem.plugin_suffix_pattern}")
  end

  ##
  # Returns a string usable in Dir.glob to match all requirable paths
  # for this spec.

  def lib_dirs_glob
    dirs = if raw_require_paths
      if raw_require_paths.size > 1
        "{#{raw_require_paths.join(",")}}"
      else
        raw_require_paths.first
      end
    else
      "lib" # default value for require_paths for bundler/inline
    end

    "#{full_gem_path}/#{dirs}"
  end

  ##
  # Return a Gem::Specification from this gem

  def to_spec
    raise NotImplementedError
  end

  ##
  # Version of the gem

  def version
    raise NotImplementedError
  end

  ##
  # Whether this specification is stubbed - i.e. we have information
  # about the gem from a stub line, without having to evaluate the
  # entire gemspec file.
  def stubbed?
    raise NotImplementedError
  end

  def this
    self
  end

  private

  def have_extensions?
    !extensions.empty?
  end

  def have_file?(file, suffixes)
    return true if raw_require_paths.any? do |path|
      base = File.join(gems_dir, full_name, path, file)
      suffixes.any? {|suf| File.file? base + suf }
    end

    if have_extensions?
      base = File.join extension_dir, file
      suffixes.any? {|suf| File.file? base + suf }
    else
      false
    end
  end
end
PK)J[�-�h��&share/rubygems/rubygems/ci_detector.rbnu�[���# frozen_string_literal: true

module Gem
  module CIDetector
    # NOTE: Any changes made here will need to be made to both lib/rubygems/ci_detector.rb and
    # bundler/lib/bundler/ci_detector.rb (which are enforced duplicates).
    # TODO: Drop that duplication once bundler drops support for RubyGems 3.4
    #
    # ## Recognized CI providers, their signifiers, and the relevant docs ##
    #
    # Travis CI   - CI, TRAVIS            https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
    # Cirrus CI   - CI, CIRRUS_CI         https://cirrus-ci.org/guide/writing-tasks/#environment-variables
    # Circle CI   - CI, CIRCLECI          https://circleci.com/docs/variables/#built-in-environment-variables
    # Gitlab CI   - CI, GITLAB_CI         https://docs.gitlab.com/ee/ci/variables/
    # AppVeyor    - CI, APPVEYOR          https://www.appveyor.com/docs/environment-variables/
    # CodeShip    - CI_NAME               https://docs.cloudbees.com/docs/cloudbees-codeship/latest/pro-builds-and-configuration/environment-variables#_default_environment_variables
    # dsari       - CI, DSARI             https://github.com/rfinnie/dsari#running
    # Jenkins     - BUILD_NUMBER          https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
    # TeamCity    - TEAMCITY_VERSION      https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html#Predefined+Server+Build+Parameters
    # Appflow     - CI_BUILD_ID           https://ionic.io/docs/appflow/automation/environments#predefined-environments
    # TaskCluster - TASKCLUSTER_ROOT_URL  https://docs.taskcluster.net/docs/manual/design/env-vars
    # Semaphore   - CI, SEMAPHORE         https://docs.semaphoreci.com/ci-cd-environment/environment-variables/
    # BuildKite   - CI, BUILDKITE         https://buildkite.com/docs/pipelines/environment-variables
    # GoCD        - GO_SERVER_URL         https://docs.gocd.org/current/faq/dev_use_current_revision_in_build.html
    # GH Actions  - CI, GITHUB_ACTIONS    https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
    #
    # ### Some "standard" ENVs that multiple providers may set ###
    #
    # * CI - this is set by _most_ (but not all) CI providers now; it's approaching a standard.
    # * CI_NAME - Not as frequently used, but some providers set this to specify their own name

    # Any of these being set is a reasonably reliable indicator that we are
    # executing in a CI environment.
    ENV_INDICATORS = [
      "CI",
      "CI_NAME",
      "CONTINUOUS_INTEGRATION",
      "BUILD_NUMBER",
      "CI_APP_ID",
      "CI_BUILD_ID",
      "CI_BUILD_NUMBER",
      "RUN_ID",
      "TASKCLUSTER_ROOT_URL",
    ].freeze

    # For each CI, this env suffices to indicate that we're on _that_ CI's
    # containers. (A few of them only supply a CI_NAME variable, which is also
    # nice). And if they set "CI" but we can't tell which one they are, we also
    # want to know that - a bare "ci" without another token tells us as much.
    ENV_DESCRIPTORS = {
      "TRAVIS" => "travis",
      "CIRCLECI" => "circle",
      "CIRRUS_CI" => "cirrus",
      "DSARI" => "dsari",
      "SEMAPHORE" => "semaphore",
      "JENKINS_URL" => "jenkins",
      "BUILDKITE" => "buildkite",
      "GO_SERVER_URL" => "go",
      "GITLAB_CI" => "gitlab",
      "GITHUB_ACTIONS" => "github",
      "TASKCLUSTER_ROOT_URL" => "taskcluster",
      "CI" => "ci",
    }.freeze

    def self.ci?
      ENV_INDICATORS.any? {|var| ENV.include?(var) }
    end

    def self.ci_strings
      matching_names = ENV_DESCRIPTORS.select {|env, _| ENV[env] }.values
      matching_names << ENV["CI_NAME"].downcase if ENV["CI_NAME"]
      matching_names.reject(&:empty?).sort.uniq
    end
  end
end
PK)J[z�x
\\share/man/man5/gemfile.5nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "GEMFILE" "5" "March 2025" ""
.SH "NAME"
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
.SH "SYNOPSIS"
A \fBGemfile\fR describes the gem dependencies required to execute associated Ruby code\.
.P
Place the \fBGemfile\fR in the root of the directory containing the associated code\. For instance, in a Rails application, place the \fBGemfile\fR in the same directory as the \fBRakefile\fR\.
.SH "SYNTAX"
A \fBGemfile\fR is evaluated as Ruby code, in a context which makes available a number of methods used to describe the gem requirements\.
.SH "GLOBAL SOURCE"
At the top of the \fBGemfile\fR, add a single line for the \fBRubyGems\fR source that contains the gems listed in the \fBGemfile\fR\.
.IP "" 4
.nf
source "https://rubygems\.org"
.fi
.IP "" 0
.P
You can add only one global source\. In Bundler 1\.13, adding multiple global sources was deprecated\. The \fBsource\fR \fBMUST\fR be a valid RubyGems repository\.
.P
To use more than one source of RubyGems, you should use \fI\fBsource\fR block\fR\.
.P
A source is checked for gems following the heuristics described in \fISOURCE PRIORITY\fR\.
.P
\fBNote about a behavior of the feature deprecated in Bundler 1\.13\fR: If a gem is found in more than one global source, Bundler will print a warning after installing the gem indicating which source was used, and listing the other sources where the gem is available\. A specific source can be selected for gems that need to use a non\-standard repository, suppressing this warning, by using the \fI\fB:source\fR option\fR or \fBsource\fR block\.
.SS "CREDENTIALS"
Some gem sources require a username and password\. Use bundle config(1) \fIbundle\-config\.1\.html\fR to set the username and password for any of the sources that need it\. The command must be run once on each computer that will install the Gemfile, but this keeps the credentials from being stored in plain text in version control\.
.IP "" 4
.nf
bundle config gems\.example\.com user:password
.fi
.IP "" 0
.P
For some sources, like a company Gemfury account, it may be easier to include the credentials in the Gemfile as part of the source URL\.
.IP "" 4
.nf
source "https://user:password@gems\.example\.com"
.fi
.IP "" 0
.P
Credentials in the source URL will take precedence over credentials set using \fBconfig\fR\.
.SH "RUBY"
If your application requires a specific Ruby version or engine, specify your requirements using the \fBruby\fR method, with the following arguments\. All parameters are \fBOPTIONAL\fR unless otherwise specified\.
.SS "VERSION (required)"
The version of Ruby that your application requires\. If your application requires an alternate Ruby engine, such as JRuby, TruffleRuby, etc\., this should be the Ruby version that the engine is compatible with\.
.IP "" 4
.nf
ruby "3\.1\.2"
.fi
.IP "" 0
.P
If you wish to derive your Ruby version from a version file (ie \.ruby\-version), you can use the \fBfile\fR option instead\.
.IP "" 4
.nf
ruby file: "\.ruby\-version"
.fi
.IP "" 0
.P
The version file should conform to any of the following formats:
.IP "\(bu" 4
\fB3\.1\.2\fR (\.ruby\-version)
.IP "\(bu" 4
\fBruby 3\.1\.2\fR (\.tool\-versions, read: https://asdf\-vm\.com/manage/configuration\.html#tool\-versions)
.IP "" 0
.SS "ENGINE"
Each application \fImay\fR specify a Ruby engine\. If an engine is specified, an engine version \fImust\fR also be specified\.
.P
What exactly is an Engine?
.IP "\(bu" 4
A Ruby engine is an implementation of the Ruby language\.
.IP "\(bu" 4
For background: the reference or original implementation of the Ruby programming language is called Matz's Ruby Interpreter \fIhttps://en\.wikipedia\.org/wiki/Ruby_MRI\fR, or MRI for short\. This is named after Ruby creator Yukihiro Matsumoto, also known as Matz\. MRI is also known as CRuby, because it is written in C\. MRI is the most widely used Ruby engine\.
.IP "\(bu" 4
Other implementations \fIhttps://www\.ruby\-lang\.org/en/about/\fR of Ruby exist\. Some of the more well\-known implementations include JRuby \fIhttps://www\.jruby\.org/\fR and TruffleRuby \fIhttps://www\.graalvm\.org/ruby/\fR\. Rubinius is an alternative implementation of Ruby written in Ruby\. JRuby is an implementation of Ruby on the JVM, short for Java Virtual Machine\. TruffleRuby is a Ruby implementation on the GraalVM, a language toolkit built on the JVM\.
.IP "" 0
.SS "ENGINE VERSION"
Each application \fImay\fR specify a Ruby engine version\. If an engine version is specified, an engine \fImust\fR also be specified\. If the engine is "ruby" the engine version specified \fImust\fR match the Ruby version\.
.IP "" 4
.nf
ruby "2\.6\.8", engine: "jruby", engine_version: "9\.3\.8\.0"
.fi
.IP "" 0
.SS "PATCHLEVEL"
Each application \fImay\fR specify a Ruby patchlevel\. Specifying the patchlevel has been meaningless since Ruby 2\.1\.0 was released as the patchlevel is now uniquely determined by a combination of major, minor, and teeny version numbers\.
.P
This option was implemented in Bundler 1\.4\.0 for Ruby 2\.0 or earlier\.
.IP "" 4
.nf
ruby "3\.1\.2", patchlevel: "20"
.fi
.IP "" 0
.SH "GEMS"
Specify gem requirements using the \fBgem\fR method, with the following arguments\. All parameters are \fBOPTIONAL\fR unless otherwise specified\.
.SS "NAME (required)"
For each gem requirement, list a single \fIgem\fR line\.
.IP "" 4
.nf
gem "nokogiri"
.fi
.IP "" 0
.SS "VERSION"
Each \fIgem\fR \fBMAY\fR have one or more version specifiers\.
.IP "" 4
.nf
gem "nokogiri", ">= 1\.4\.2"
gem "RedCloth", ">= 4\.1\.0", "< 4\.2\.0"
.fi
.IP "" 0
.SS "REQUIRE AS"
Each \fIgem\fR \fBMAY\fR specify files that should be used when autorequiring via \fBBundler\.require\fR\. You may pass an array with multiple files or \fBtrue\fR if the file you want \fBrequired\fR has the same name as \fIgem\fR or \fBfalse\fR to prevent any file from being autorequired\.
.IP "" 4
.nf
gem "redis", require: ["redis/connection/hiredis", "redis"]
gem "webmock", require: false
gem "byebug", require: true
.fi
.IP "" 0
.P
The argument defaults to the name of the gem\. For example, these are identical:
.IP "" 4
.nf
gem "nokogiri"
gem "nokogiri", require: "nokogiri"
gem "nokogiri", require: true
.fi
.IP "" 0
.SS "GROUPS"
Each \fIgem\fR \fBMAY\fR specify membership in one or more groups\. Any \fIgem\fR that does not specify membership in any group is placed in the \fBdefault\fR group\.
.IP "" 4
.nf
gem "rspec", group: :test
gem "wirble", groups: [:development, :test]
.fi
.IP "" 0
.P
The Bundler runtime allows its two main methods, \fBBundler\.setup\fR and \fBBundler\.require\fR, to limit their impact to particular groups\.
.IP "" 4
.nf
# setup adds gems to Ruby's load path
Bundler\.setup                    # defaults to all groups
require "bundler/setup"          # same as Bundler\.setup
Bundler\.setup(:default)          # only set up the _default_ group
Bundler\.setup(:test)             # only set up the _test_ group (but `not` _default_)
Bundler\.setup(:default, :test)   # set up the _default_ and _test_ groups, but no others

# require requires all of the gems in the specified groups
Bundler\.require                  # defaults to the _default_ group
Bundler\.require(:default)        # identical
Bundler\.require(:default, :test) # requires the _default_ and _test_ groups
Bundler\.require(:test)           # requires the _test_ group
.fi
.IP "" 0
.P
The Bundler CLI allows you to specify a list of groups whose gems \fBbundle install\fR should not install with the \fBwithout\fR configuration\.
.P
To specify multiple groups to ignore, specify a list of groups separated by spaces\.
.IP "" 4
.nf
bundle config set \-\-local without test
bundle config set \-\-local without development test
.fi
.IP "" 0
.P
Also, calling \fBBundler\.setup\fR with no parameters, or calling \fBrequire "bundler/setup"\fR will setup all groups except for the ones you excluded via \fB\-\-without\fR (since they are not available)\.
.P
Note that on \fBbundle install\fR, bundler downloads and evaluates all gems, in order to create a single canonical list of all of the required gems and their dependencies\. This means that you cannot list different versions of the same gems in different groups\. For more details, see Understanding Bundler \fIhttps://bundler\.io/rationale\.html\fR\.
.SS "PLATFORMS"
If a gem should only be used in a particular platform or set of platforms, you can specify them\. Platforms are essentially identical to groups, except that you do not need to use the \fB\-\-without\fR install\-time flag to exclude groups of gems for other platforms\.
.P
There are a number of \fBGemfile\fR platforms:
.TP
\fBruby\fR
C Ruby (MRI), Rubinius, or TruffleRuby, but not Windows
.TP
\fBmri\fR
C Ruby (MRI) only, but not Windows
.TP
\fBwindows\fR
Windows C Ruby (MRI), including RubyInstaller 32\-bit and 64\-bit versions
.TP
\fBmswin\fR
Windows C Ruby (MRI), including RubyInstaller 32\-bit versions
.TP
\fBmswin64\fR
Windows C Ruby (MRI), including RubyInstaller 64\-bit versions
.TP
\fBrbx\fR
Rubinius
.TP
\fBjruby\fR
JRuby
.TP
\fBtruffleruby\fR
TruffleRuby
.P
On platforms \fBruby\fR, \fBmri\fR, \fBmswin\fR, \fBmswin64\fR, and \fBwindows\fR, you may additionally specify a version by appending the major and minor version numbers without a delimiter\. For example, to specify that a gem should only be used on platform \fBruby\fR version 3\.1, use:
.IP "" 4
.nf
ruby_31
.fi
.IP "" 0
.P
As with groups (above), you may specify one or more platforms:
.IP "" 4
.nf
gem "weakling",   platforms: :jruby
gem "ruby\-debug", platforms: :mri_31
gem "nokogiri",   platforms: [:windows_31, :jruby]
.fi
.IP "" 0
.P
All operations involving groups (\fBbundle install\fR \fIbundle\-install\.1\.html\fR, \fBBundler\.setup\fR, \fBBundler\.require\fR) behave exactly the same as if any groups not matching the current platform were explicitly excluded\.
.P
The following platform values are deprecated and should be replaced with \fBwindows\fR:
.IP "\(bu" 4
\fBmswin\fR, \fBmswin64\fR, \fBmingw32\fR, \fBx64_mingw\fR
.IP "" 0
.P
Note that, while unfortunately using the same terminology, the values of this option are different from the values that \fBbundle lock \-\-add\-platform\fR can take\. The values of this option are more closer to "Ruby Implementation" while the values that \fBbundle lock \-\-add\-platform\fR understands are more related to OS and architecture of the different systems where your lockfile will be used\.
.SS "FORCE_RUBY_PLATFORM"
If you always want the pure ruby variant of a gem to be chosen over platform specific variants, you can use the \fBforce_ruby_platform\fR option:
.IP "" 4
.nf
gem "ffi", force_ruby_platform: true
.fi
.IP "" 0
.P
This can be handy (assuming the pure ruby variant works fine) when:
.IP "\(bu" 4
You're having issues with the platform specific variant\.
.IP "\(bu" 4
The platform specific variant does not yet support a newer ruby (and thus has a \fBrequired_ruby_version\fR upper bound), but you still want your Gemfile{\.lock} files to resolve under that ruby\.
.IP "" 0
.SS "SOURCE"
You can select an alternate RubyGems repository for a gem using the ':source' option\.
.IP "" 4
.nf
gem "some_internal_gem", source: "https://gems\.example\.com"
.fi
.IP "" 0
.P
This forces the gem to be loaded from this source and ignores the global source declared at the top level of the file\. If the gem does not exist in this source, it will not be installed\.
.P
Bundler will search for child dependencies of this gem by first looking in the source selected for the parent, but if they are not found there, it will fall back on the global source\.
.P
\fBNote about a behavior of the feature deprecated in Bundler 1\.13\fR: Selecting a specific source repository this way also suppresses the ambiguous gem warning described above in \fIGLOBAL SOURCE\fR\.
.P
Using the \fB:source\fR option for an individual gem will also make that source available as a possible global source for any other gems which do not specify explicit sources\. Thus, when adding gems with explicit sources, it is recommended that you also ensure all other gems in the Gemfile are using explicit sources\.
.SS "GIT"
If necessary, you can specify that a gem is located at a particular git repository using the \fB:git\fR parameter\. The repository can be accessed via several protocols:
.TP
\fBHTTP(S)\fR
gem "rails", git: "https://github\.com/rails/rails\.git"
.TP
\fBSSH\fR
gem "rails", git: "git@github\.com:rails/rails\.git"
.TP
\fBgit\fR
gem "rails", git: "git://github\.com/rails/rails\.git"
.P
If using SSH, the user that you use to run \fBbundle install\fR \fBMUST\fR have the appropriate keys available in their \fB$HOME/\.ssh\fR\.
.P
\fBNOTE\fR: \fBhttp://\fR and \fBgit://\fR URLs should be avoided if at all possible\. These protocols are unauthenticated, so a man\-in\-the\-middle attacker can deliver malicious code and compromise your system\. HTTPS and SSH are strongly preferred\.
.P
The \fBgroup\fR, \fBplatforms\fR, and \fBrequire\fR options are available and behave exactly the same as they would for a normal gem\.
.P
A git repository \fBSHOULD\fR have at least one file, at the root of the directory containing the gem, with the extension \fB\.gemspec\fR\. This file \fBMUST\fR contain a valid gem specification, as expected by the \fBgem build\fR command\.
.P
If a git repository does not have a \fB\.gemspec\fR, bundler will attempt to create one, but it will not contain any dependencies, executables, or C extension compilation instructions\. As a result, it may fail to properly integrate into your application\.
.P
If a git repository does have a \fB\.gemspec\fR for the gem you attached it to, a version specifier, if provided, means that the git repository is only valid if the \fB\.gemspec\fR specifies a version matching the version specifier\. If not, bundler will print a warning\.
.IP "" 4
.nf
gem "rails", "2\.3\.8", git: "https://github\.com/rails/rails\.git"
# bundle install will fail, because the \.gemspec in the rails
# repository's master branch specifies version 3\.0\.0
.fi
.IP "" 0
.P
If a git repository does \fBnot\fR have a \fB\.gemspec\fR for the gem you attached it to, a version specifier \fBMUST\fR be provided\. Bundler will use this version in the simple \fB\.gemspec\fR it creates\.
.P
Git repositories support a number of additional options\.
.TP
\fBbranch\fR, \fBtag\fR, and \fBref\fR
You \fBMUST\fR only specify at most one of these options\. The default is \fBbranch: "master"\fR\. For example:
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", branch: "5\-0\-stable"
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", tag: "v5\.0\.0"
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", ref: "4aded"
.TP
\fBsubmodules\fR
For reference, a git submodule \fIhttps://git\-scm\.com/book/en/v2/Git\-Tools\-Submodules\fR lets you have another git repository within a subfolder of your repository\. Specify \fBsubmodules: true\fR to cause bundler to expand any submodules included in the git repository
.P
If a git repository contains multiple \fB\.gemspecs\fR, each \fB\.gemspec\fR represents a gem located at the same place in the file system as the \fB\.gemspec\fR\.
.IP "" 4
.nf
|~rails                   [git root]
| |\-rails\.gemspec         [rails gem located here]
|~actionpack
| |\-actionpack\.gemspec    [actionpack gem located here]
|~activesupport
| |\-activesupport\.gemspec [activesupport gem located here]
|\|\.\|\.\|\.
.fi
.IP "" 0
.P
To install a gem located in a git repository, bundler changes to the directory containing the gemspec, runs \fBgem build name\.gemspec\fR and then installs the resulting gem\. The \fBgem build\fR command, which comes standard with Rubygems, evaluates the \fB\.gemspec\fR in the context of the directory in which it is located\.
.SS "GIT SOURCE"
A custom git source can be defined via the \fBgit_source\fR method\. Provide the source's name as an argument, and a block which receives a single argument and interpolates it into a string to return the full repo address:
.IP "" 4
.nf
git_source(:stash){ |repo_name| "https://stash\.corp\.acme\.pl/#{repo_name}\.git" }
gem 'rails', stash: 'forks/rails'
.fi
.IP "" 0
.P
In addition, if you wish to choose a specific branch:
.IP "" 4
.nf
gem "rails", stash: "forks/rails", branch: "branch_name"
.fi
.IP "" 0
.SS "GITHUB"
\fBNOTE\fR: This shorthand should be avoided until Bundler 2\.0, since it currently expands to an insecure \fBgit://\fR URL\. This allows a man\-in\-the\-middle attacker to compromise your system\.
.P
If the git repository you want to use is hosted on GitHub and is public, you can use the :github shorthand to specify the github username and repository name (without the trailing "\.git"), separated by a slash\. If both the username and repository name are the same, you can omit one\.
.IP "" 4
.nf
gem "rails", github: "rails/rails"
gem "rails", github: "rails"
.fi
.IP "" 0
.P
Are both equivalent to
.IP "" 4
.nf
gem "rails", git: "https://github\.com/rails/rails\.git"
.fi
.IP "" 0
.P
Since the \fBgithub\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.P
You can also directly pass a pull request URL:
.IP "" 4
.nf
gem "rails", github: "https://github\.com/rails/rails/pull/43753"
.fi
.IP "" 0
.P
Which is equivalent to:
.IP "" 4
.nf
gem "rails", github: "rails/rails", branch: "refs/pull/43753/head"
.fi
.IP "" 0
.SS "GIST"
If the git repository you want to use is hosted as a GitHub Gist and is public, you can use the :gist shorthand to specify the gist identifier (without the trailing "\.git")\.
.IP "" 4
.nf
gem "the_hatch", gist: "4815162342"
.fi
.IP "" 0
.P
Is equivalent to:
.IP "" 4
.nf
gem "the_hatch", git: "https://gist\.github\.com/4815162342\.git"
.fi
.IP "" 0
.P
Since the \fBgist\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.SS "BITBUCKET"
If the git repository you want to use is hosted on Bitbucket and is public, you can use the :bitbucket shorthand to specify the bitbucket username and repository name (without the trailing "\.git"), separated by a slash\. If both the username and repository name are the same, you can omit one\.
.IP "" 4
.nf
gem "rails", bitbucket: "rails/rails"
gem "rails", bitbucket: "rails"
.fi
.IP "" 0
.P
Are both equivalent to
.IP "" 4
.nf
gem "rails", git: "https://rails@bitbucket\.org/rails/rails\.git"
.fi
.IP "" 0
.P
Since the \fBbitbucket\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.SS "PATH"
You can specify that a gem is located in a particular location on the file system\. Relative paths are resolved relative to the directory containing the \fBGemfile\fR\.
.P
Similar to the semantics of the \fB:git\fR option, the \fB:path\fR option requires that the directory in question either contains a \fB\.gemspec\fR for the gem, or that you specify an explicit version that bundler should use\.
.P
Unlike \fB:git\fR, bundler does not compile C extensions for gems specified as paths\.
.IP "" 4
.nf
gem "rails", path: "vendor/rails"
.fi
.IP "" 0
.P
If you would like to use multiple local gems directly from the filesystem, you can set a global \fBpath\fR option to the path containing the gem's files\. This will automatically load gemspec files from subdirectories\.
.IP "" 4
.nf
path 'components' do
  gem 'admin_ui'
  gem 'public_ui'
end
.fi
.IP "" 0
.SH "BLOCK FORM OF SOURCE, GIT, PATH, GROUP and PLATFORMS"
The \fB:source\fR, \fB:git\fR, \fB:path\fR, \fB:group\fR, and \fB:platforms\fR options may be applied to a group of gems by using block form\.
.IP "" 4
.nf
source "https://gems\.example\.com" do
  gem "some_internal_gem"
  gem "another_internal_gem"
end

git "https://github\.com/rails/rails\.git" do
  gem "activesupport"
  gem "actionpack"
end

platforms :ruby do
  gem "ruby\-debug"
  gem "sqlite3"
end

group :development, optional: true do
  gem "wirble"
  gem "faker"
end
.fi
.IP "" 0
.P
In the case of the group block form the :optional option can be given to prevent a group from being installed unless listed in the \fB\-\-with\fR option given to the \fBbundle install\fR command\.
.P
In the case of the \fBgit\fR block form, the \fB:ref\fR, \fB:branch\fR, \fB:tag\fR, and \fB:submodules\fR options may be passed to the \fBgit\fR method, and all gems in the block will inherit those options\.
.P
The presence of a \fBsource\fR block in a Gemfile also makes that source available as a possible global source for any other gems which do not specify explicit sources\. Thus, when defining source blocks, it is recommended that you also ensure all other gems in the Gemfile are using explicit sources, either via source blocks or \fB:source\fR directives on individual gems\.
.SH "INSTALL_IF"
The \fBinstall_if\fR method allows gems to be installed based on a proc or lambda\. This is especially useful for optional gems that can only be used if certain software is installed or some other conditions are met\.
.IP "" 4
.nf
install_if \-> { RUBY_PLATFORM =~ /darwin/ } do
  gem "pasteboard"
end
.fi
.IP "" 0
.SH "GEMSPEC"
The \fB\.gemspec\fR \fIhttps://guides\.rubygems\.org/specification\-reference/\fR file is where you provide metadata about your gem to Rubygems\. Some required Gemspec attributes include the name, description, and homepage of your gem\. This is also where you specify the dependencies your gem needs to run\.
.P
If you wish to use Bundler to help install dependencies for a gem while it is being developed, use the \fBgemspec\fR method to pull in the dependencies listed in the \fB\.gemspec\fR file\.
.P
The \fBgemspec\fR method adds any runtime dependencies as gem requirements in the default group\. It also adds development dependencies as gem requirements in the \fBdevelopment\fR group\. Finally, it adds a gem requirement on your project (\fBpath: '\.'\fR)\. In conjunction with \fBBundler\.setup\fR, this allows you to require project files in your test code as you would if the project were installed as a gem; you need not manipulate the load path manually or require project files via relative paths\.
.P
The \fBgemspec\fR method supports optional \fB:path\fR, \fB:glob\fR, \fB:name\fR, and \fB:development_group\fR options, which control where bundler looks for the \fB\.gemspec\fR, the glob it uses to look for the gemspec (defaults to: \fB{,*,*/*}\.gemspec\fR), what named \fB\.gemspec\fR it uses (if more than one is present), and which group development dependencies are included in\.
.P
When a \fBgemspec\fR dependency encounters version conflicts during resolution, the local version under development will always be selected \-\- even if there are remote versions that better match other requirements for the \fBgemspec\fR gem\.
.SH "SOURCE PRIORITY"
When attempting to locate a gem to satisfy a gem requirement, bundler uses the following priority order:
.IP "1." 4
The source explicitly attached to the gem (using \fB:source\fR, \fB:path\fR, or \fB:git\fR)
.IP "2." 4
For implicit gems (dependencies of explicit gems), any source, git, or path repository declared on the parent\. This results in bundler prioritizing the ActiveSupport gem from the Rails git repository over ones from \fBrubygems\.org\fR
.IP "3." 4
If neither of the above conditions are met, the global source will be used\. If multiple global sources are specified, they will be prioritized from last to first, but this is deprecated since Bundler 1\.13, so Bundler prints a warning and will abort with an error in the future\.
.IP "" 0

PK)J[�=�ooshare/man/man1/bundle-doctor.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-DOCTOR" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-doctor\fR \- Checks the bundle for common problems
.SH "SYNOPSIS"
\fBbundle doctor\fR [\-\-quiet] [\-\-gemfile=GEMFILE]
.SH "DESCRIPTION"
Checks your Gemfile and gem environment for common problems\. If issues are detected, Bundler prints them and exits status 1\. Otherwise, Bundler prints a success message and exits status 0\.
.P
Examples of common problems caught by bundle\-doctor include:
.IP "\(bu" 4
Invalid Bundler settings
.IP "\(bu" 4
Mismatched Ruby versions
.IP "\(bu" 4
Mismatched platforms
.IP "\(bu" 4
Uninstalled gems
.IP "\(bu" 4
Missing dependencies
.IP "" 0
.SH "OPTIONS"
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.TP
\fB\-\-gemfile=GEMFILE\fR
The location of the Gemfile(5) which Bundler should use\. This defaults to a Gemfile(5) in the current working directory\. In general, Bundler will assume that the location of the Gemfile(5) is also the project's root and will try to find \fBGemfile\.lock\fR and \fBvendor/cache\fR relative to this location\.

PK)J[$��$DDshare/man/man1/bundle-exec.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-EXEC" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
.SH "SYNOPSIS"
\fBbundle exec\fR [\-\-keep\-file\-descriptors] [\-\-gemfile=GEMFILE] \fIcommand\fR
.SH "DESCRIPTION"
This command executes the command, making all gems specified in the [\fBGemfile(5)\fR][Gemfile(5)] available to \fBrequire\fR in Ruby programs\.
.P
Essentially, if you would normally have run something like \fBrspec spec/my_spec\.rb\fR, and you want to use the gems specified in the [\fBGemfile(5)\fR][Gemfile(5)] and installed via bundle install(1) \fIbundle\-install\.1\.html\fR, you should run \fBbundle exec rspec spec/my_spec\.rb\fR\.
.P
Note that \fBbundle exec\fR does not require that an executable is available on your shell's \fB$PATH\fR\.
.SH "OPTIONS"
.TP
\fB\-\-keep\-file\-descriptors\fR
Passes all file descriptors to the new processes\. Default is true from bundler version 2\.2\.26\. Setting it to false is now deprecated\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of [\fBGemfile(5)\fR][Gemfile(5)]\.
.SH "BUNDLE INSTALL \-\-BINSTUBS"
If you use the \fB\-\-binstubs\fR flag in bundle install(1) \fIbundle\-install\.1\.html\fR, Bundler will automatically create a directory (which defaults to \fBapp_root/bin\fR) containing all of the executables available from gems in the bundle\.
.P
After using \fB\-\-binstubs\fR, \fBbin/rspec spec/my_spec\.rb\fR is identical to \fBbundle exec rspec spec/my_spec\.rb\fR\.
.SH "ENVIRONMENT MODIFICATIONS"
\fBbundle exec\fR makes a number of changes to the shell environment, then executes the command you specify in full\.
.IP "\(bu" 4
make sure that it's still possible to shell out to \fBbundle\fR from inside a command invoked by \fBbundle exec\fR (using \fB$BUNDLE_BIN_PATH\fR)
.IP "\(bu" 4
put the directory containing executables (like \fBrails\fR, \fBrspec\fR, \fBrackup\fR) for your bundle on \fB$PATH\fR
.IP "\(bu" 4
make sure that if bundler is invoked in the subshell, it uses the same \fBGemfile\fR (by setting \fBBUNDLE_GEMFILE\fR)
.IP "\(bu" 4
add \fB\-rbundler/setup\fR to \fB$RUBYOPT\fR, which makes sure that Ruby programs invoked in the subshell can see the gems in the bundle
.IP "" 0
.P
It also modifies Rubygems:
.IP "\(bu" 4
disallow loading additional gems not in the bundle
.IP "\(bu" 4
modify the \fBgem\fR method to be a no\-op if a gem matching the requirements is in the bundle, and to raise a \fBGem::LoadError\fR if it's not
.IP "\(bu" 4
Define \fBGem\.refresh\fR to be a no\-op, since the source index is always frozen when using bundler, and to prevent gems from the system leaking into the environment
.IP "\(bu" 4
Override \fBGem\.bin_path\fR to use the gems in the bundle, making system executables work
.IP "\(bu" 4
Add all gems in the bundle into Gem\.loaded_specs
.IP "" 0
.P
Finally, \fBbundle exec\fR also implicitly modifies \fBGemfile\.lock\fR if the lockfile and the Gemfile do not match\. Bundler needs the Gemfile to determine things such as a gem's groups, \fBautorequire\fR, and platforms, etc\., and that information isn't stored in the lockfile\. The Gemfile and lockfile must be synced in order to \fBbundle exec\fR successfully, so \fBbundle exec\fR updates the lockfile beforehand\.
.SS "Loading"
By default, when attempting to \fBbundle exec\fR to a file with a ruby shebang, Bundler will \fBKernel\.load\fR that file instead of using \fBKernel\.exec\fR\. For the vast majority of cases, this is a performance improvement\. In a rare few cases, this could cause some subtle side\-effects (such as dependence on the exact contents of \fB$0\fR or \fB__FILE__\fR) and the optimization can be disabled by enabling the \fBdisable_exec_load\fR setting\.
.SS "Shelling out"
Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \fBwith_unbundled_env\fR method with a block\. Any subshells created inside the block will be given the environment present before Bundler was activated\. For example, Homebrew commands run Ruby, but don't work inside a bundle:
.IP "" 4
.nf
Bundler\.with_unbundled_env do
  `brew install wget`
end
.fi
.IP "" 0
.P
Using \fBwith_unbundled_env\fR is also necessary if you are shelling out to a different bundle\. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use \fBwith_unbundled_env\fR\.
.IP "" 4
.nf
Bundler\.with_unbundled_env do
  Dir\.chdir "/other/bundler/project" do
    `bundle exec \./script`
  end
end
.fi
.IP "" 0
.P
Bundler provides convenience helpers that wrap \fBsystem\fR and \fBexec\fR, and they can be used like this:
.IP "" 4
.nf
Bundler\.unbundled_system('brew install wget')
Bundler\.unbundled_exec('brew install wget')
.fi
.IP "" 0
.SH "RUBYGEMS PLUGINS"
At present, the Rubygems plugin system requires all files named \fBrubygems_plugin\.rb\fR on the load path of \fIany\fR installed gem when any Ruby code requires \fBrubygems\.rb\fR\. This includes executables installed into the system, like \fBrails\fR, \fBrackup\fR, and \fBrspec\fR\.
.P
Since Rubygems plugins can contain arbitrary Ruby code, they commonly end up activating themselves or their dependencies\.
.P
For instance, the \fBgemcutter 0\.5\fR gem depended on \fBjson_pure\fR\. If you had that version of gemcutter installed (even if you \fIalso\fR had a newer version without this problem), Rubygems would activate \fBgemcutter 0\.5\fR and \fBjson_pure <latest>\fR\.
.P
If your Gemfile(5) also contained \fBjson_pure\fR (or a gem with a dependency on \fBjson_pure\fR), the latest version on your system might conflict with the version in your Gemfile(5), or the snapshot version in your \fBGemfile\.lock\fR\.
.P
If this happens, bundler will say:
.IP "" 4
.nf
You have already activated json_pure 1\.4\.6 but your Gemfile
requires json_pure 1\.4\.3\. Consider using bundle exec\.
.fi
.IP "" 0
.P
In this situation, you almost certainly want to remove the underlying gem with the problematic gem plugin\. In general, the authors of these plugins (in this case, the \fBgemcutter\fR gem) have released newer versions that are more careful in their plugins\.
.P
You can find a list of all the gems containing gem plugins by running
.IP "" 4
.nf
ruby \-e "puts Gem\.find_files('rubygems_plugin\.rb')"
.fi
.IP "" 0
.P
At the very least, you should remove all but the newest version of each gem plugin, and also remove all gem plugins that you aren't using (\fBgem uninstall gem_name\fR)\.
PK)J[iI�rrshare/man/man1/bundle-plugin.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-PLUGIN" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-plugin\fR \- Manage Bundler plugins
.SH "SYNOPSIS"
\fBbundle plugin\fR install PLUGINS [\-\-source=\fISOURCE\fR] [\-\-version=\fIversion\fR] [\-\-git=\fIgit\-url\fR] [\-\-branch=\fIbranch\fR|\-\-ref=\fIrev\fR] [\-\-path=\fIpath\fR]
.br
\fBbundle plugin\fR uninstall PLUGINS
.br
\fBbundle plugin\fR list
.br
\fBbundle plugin\fR help [COMMAND]
.SH "DESCRIPTION"
You can install, uninstall, and list plugin(s) with this command to extend functionalities of Bundler\.
.SH "SUB\-COMMANDS"
.SS "install"
Install the given plugin(s)\.
.TP
\fBbundle plugin install bundler\-graph\fR
Install bundler\-graph gem from globally configured sources (defaults to RubyGems\.org)\. The global source, specified in source in Gemfile is ignored\.
.TP
\fBbundle plugin install bundler\-graph \-\-source https://example\.com\fR
Install bundler\-graph gem from example\.com\. The global source, specified in source in Gemfile is not considered\.
.TP
\fBbundle plugin install bundler\-graph \-\-version 0\.2\.1\fR
You can specify the version of the gem via \fB\-\-version\fR\.
.TP
\fBbundle plugin install bundler\-graph \-\-git https://github\.com/rubygems/bundler\-graph\fR
Install bundler\-graph gem from Git repository\. You can use standard Git URLs like:
.IP
\fBssh://[user@]host\.xz[:port]/path/to/repo\.git\fR
.br
\fBhttp[s]://host\.xz[:port]/path/to/repo\.git\fR
.br
\fB/path/to/repo\fR
.br
\fBfile:///path/to/repo\fR
.IP
When you specify \fB\-\-git\fR, you can use \fB\-\-branch\fR or \fB\-\-ref\fR to specify any branch, tag, or commit hash (revision) to use\.
.TP
\fBbundle plugin install bundler\-graph \-\-path \.\./bundler\-graph\fR
Install bundler\-graph gem from a local path\.
.SS "uninstall"
Uninstall the plugin(s) specified in PLUGINS\.
.SS "list"
List the installed plugins and available commands\.
.P
No options\.
.SS "help"
Describe subcommands or one specific subcommand\.
.P
No options\.
.SH "SEE ALSO"
.IP "\(bu" 4
How to write a Bundler plugin \fIhttps://bundler\.io/guides/bundler_plugins\.html\fR
.IP "" 0

PK)J[�Wj	RRshare/man/man1/bundle-env.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-ENV" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-env\fR \- Print information about the environment Bundler is running under
.SH "SYNOPSIS"
\fBbundle env\fR
.SH "DESCRIPTION"
Prints information about the environment Bundler is running under\.
PK)J[�(�share/man/man1/bundle-info.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INFO" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-info\fR \- Show information for the given gem in your bundle
.SH "SYNOPSIS"
\fBbundle info\fR [GEM_NAME] [\-\-path] [\-\-version]
.SH "DESCRIPTION"
Given a gem name present in your bundle, print the basic information about it such as homepage, version, path and summary\.
.SH "OPTIONS"
.TP
\fB\-\-path\fR
Print the path of the given gem
.TP
\fB\-\-version\fR
Print gem version

PK)J[�w.od6d6share/man/man1/bundle-update.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-UPDATE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-update\fR \- Update your gems to the latest available versions
.SH "SYNOPSIS"
\fBbundle update\fR \fI*gems\fR [\-\-all] [\-\-group=NAME] [\-\-source=NAME] [\-\-local] [\-\-ruby] [\-\-bundler[=VERSION]] [\-\-full\-index] [\-\-gemfile=GEMFILE] [\-\-jobs=NUMBER] [\-\-quiet] [\-\-patch|\-\-minor|\-\-major] [\-\-pre] [\-\-redownload] [\-\-strict] [\-\-conservative]
.SH "DESCRIPTION"
Update the gems specified (all gems, if \fB\-\-all\fR flag is used), ignoring the previously installed gems specified in the \fBGemfile\.lock\fR\. In general, you should use bundle install(1) \fIbundle\-install\.1\.html\fR to install the same exact gems and versions across machines\.
.P
You would use \fBbundle update\fR to explicitly update the version of a gem\.
.SH "OPTIONS"
.TP
\fB\-\-all\fR
Update all gems specified in Gemfile\.
.TP
\fB\-\-group=<list>\fR, \fB\-g=<list>\fR
Only update the gems in the specified group\. For instance, you can update all gems in the development group with \fBbundle update \-\-group development\fR\. You can also call \fBbundle update rails \-\-group test\fR to update the rails gem and all gems in the test group, for example\.
.TP
\fB\-\-source=<list>\fR
The name of a \fB:git\fR or \fB:path\fR source used in the Gemfile(5)\. For instance, with a \fB:git\fR source of \fBhttp://github\.com/rails/rails\.git\fR, you would call \fBbundle update \-\-source rails\fR
.TP
\fB\-\-local\fR
Do not attempt to fetch gems remotely and use the gem cache instead\.
.TP
\fB\-\-ruby\fR
Update the locked version of Ruby to the current version of Ruby\.
.TP
\fB\-\-bundler[=BUNDLER]\fR
Update the locked version of bundler to the invoked bundler version\.
.TP
\fB\-\-full\-index\fR
Fall back to using the single\-file index of all gems\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of [\fBGemfile(5)\fR][Gemfile(5)]\.
.TP
\fB\-\-jobs=<number>\fR, \fB\-j=<number>\fR
Specify the number of jobs to run in parallel\. The default is the number of available processors\.
.TP
\fB\-\-retry=[<number>]\fR
Retry failed network or git requests for \fInumber\fR times\.
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.TP
\fB\-\-redownload\fR, \fB\-\-force\fR
Force downloading every gem\.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.TP
\fB\-\-pre\fR
Always choose the highest allowed version, regardless of prerelease status\.
.TP
\fB\-\-strict\fR
Do not allow any gem to be updated past latest \fB\-\-patch\fR | \fB\-\-minor\fR | \fB\-\-major\fR\.
.TP
\fB\-\-conservative\fR
Use bundle install conservative update behavior and do not allow indirect dependencies to be updated\.
.SH "UPDATING ALL GEMS"
If you run \fBbundle update \-\-all\fR, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
.P
Consider the following Gemfile(5):
.IP "" 4
.nf
source "https://rubygems\.org"

gem "rails", "3\.0\.0\.rc"
gem "nokogiri"
.fi
.IP "" 0
.P
When you run bundle install(1) \fIbundle\-install\.1\.html\fR the first time, bundler will resolve all of the dependencies, all the way down, and install what you need:
.IP "" 4
.nf
Fetching gem metadata from https://rubygems\.org/\|\.\|\.\|\.\|\.\|\.\|\.\|\.\|\.\|\.
Resolving dependencies\|\.\|\.\|\.
Installing builder 2\.1\.2
Installing abstract 1\.0\.0
Installing rack 1\.2\.8
Using bundler 1\.7\.6
Installing rake 10\.4\.0
Installing polyglot 0\.3\.5
Installing mime\-types 1\.25\.1
Installing i18n 0\.4\.2
Installing mini_portile 0\.6\.1
Installing tzinfo 0\.3\.42
Installing rack\-mount 0\.6\.14
Installing rack\-test 0\.5\.7
Installing treetop 1\.4\.15
Installing thor 0\.14\.6
Installing activesupport 3\.0\.0\.rc
Installing erubis 2\.6\.6
Installing activemodel 3\.0\.0\.rc
Installing arel 0\.4\.0
Installing mail 2\.2\.20
Installing activeresource 3\.0\.0\.rc
Installing actionpack 3\.0\.0\.rc
Installing activerecord 3\.0\.0\.rc
Installing actionmailer 3\.0\.0\.rc
Installing railties 3\.0\.0\.rc
Installing rails 3\.0\.0\.rc
Installing nokogiri 1\.6\.5

Bundle complete! 2 Gemfile dependencies, 26 gems total\.
Use `bundle show [gemname]` to see where a bundled gem is installed\.
.fi
.IP "" 0
.P
As you can see, even though you have two gems in the Gemfile(5), your application needs 26 different gems in order to run\. Bundler remembers the exact versions it installed in \fBGemfile\.lock\fR\. The next time you run bundle install(1) \fIbundle\-install\.1\.html\fR, bundler skips the dependency resolution and installs the same gems as it installed last time\.
.P
After checking in the \fBGemfile\.lock\fR into version control and cloning it on another machine, running bundle install(1) \fIbundle\-install\.1\.html\fR will \fIstill\fR install the gems that you installed last time\. You don't need to worry that a new release of \fBerubis\fR or \fBmail\fR changes the gems you use\.
.P
However, from time to time, you might want to update the gems you are using to the newest versions that still match the gems in your Gemfile(5)\.
.P
To do this, run \fBbundle update \-\-all\fR, which will ignore the \fBGemfile\.lock\fR, and resolve all the dependencies again\. Keep in mind that this process can result in a significantly different set of the 25 gems, based on the requirements of new gems that the gem authors released since the last time you ran \fBbundle update \-\-all\fR\.
.SH "UPDATING A LIST OF GEMS"
Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.P
For instance, in the scenario above, imagine that \fBnokogiri\fR releases version \fB1\.4\.4\fR, and you want to update it \fIwithout\fR updating Rails and all of its dependencies\. To do this, run \fBbundle update nokogiri\fR\.
.P
Bundler will update \fBnokogiri\fR and any of its dependencies, but leave alone Rails and its dependencies\.
.SH "OVERLAPPING DEPENDENCIES"
Sometimes, multiple gems declared in your Gemfile(5) are satisfied by the same second\-level dependency\. For instance, consider the case of \fBthin\fR and \fBrack\-perftools\-profiler\fR\.
.IP "" 4
.nf
source "https://rubygems\.org"

gem "thin"
gem "rack\-perftools\-profiler"
.fi
.IP "" 0
.P
The \fBthin\fR gem depends on \fBrack >= 1\.0\fR, while \fBrack\-perftools\-profiler\fR depends on \fBrack ~> 1\.0\fR\. If you run bundle install, you get:
.IP "" 4
.nf
Fetching source index for https://rubygems\.org/
Installing daemons (1\.1\.0)
Installing eventmachine (0\.12\.10) with native extensions
Installing open4 (1\.0\.1)
Installing perftools\.rb (0\.4\.7) with native extensions
Installing rack (1\.2\.1)
Installing rack\-perftools_profiler (0\.0\.2)
Installing thin (1\.2\.7) with native extensions
Using bundler (1\.0\.0\.rc\.3)
.fi
.IP "" 0
.P
In this case, the two gems have their own set of dependencies, but they share \fBrack\fR in common\. If you run \fBbundle update thin\fR, bundler will update \fBdaemons\fR, \fBeventmachine\fR and \fBrack\fR, which are dependencies of \fBthin\fR, but not \fBopen4\fR or \fBperftools\.rb\fR, which are dependencies of \fBrack\-perftools_profiler\fR\. Note that \fBbundle update thin\fR will update \fBrack\fR even though it's \fIalso\fR a dependency of \fBrack\-perftools_profiler\fR\.
.P
In short, by default, when you update a gem using \fBbundle update\fR, bundler will update all dependencies of that gem, including those that are also dependencies of another gem\.
.P
To prevent updating indirect dependencies, prior to version 1\.14 the only option was the \fBCONSERVATIVE UPDATING\fR behavior in bundle install(1) \fIbundle\-install\.1\.html\fR:
.P
In this scenario, updating the \fBthin\fR version manually in the Gemfile(5), and then running bundle install(1) \fIbundle\-install\.1\.html\fR will only update \fBdaemons\fR and \fBeventmachine\fR, but not \fBrack\fR\. For more information, see the \fBCONSERVATIVE UPDATING\fR section of bundle install(1) \fIbundle\-install\.1\.html\fR\.
.P
Starting with 1\.14, specifying the \fB\-\-conservative\fR option will also prevent indirect dependencies from being updated\.
.SH "PATCH LEVEL OPTIONS"
Version 1\.14 introduced 4 patch\-level options that will influence how gem versions are resolved\. One of the following options can be used: \fB\-\-patch\fR, \fB\-\-minor\fR or \fB\-\-major\fR\. \fB\-\-strict\fR can be added to further influence resolution\.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.TP
\fB\-\-strict\fR
Do not allow any gem to be updated past latest \fB\-\-patch\fR | \fB\-\-minor\fR | \fB\-\-major\fR\.
.P
When Bundler is resolving what versions to use to satisfy declared requirements in the Gemfile or in parent gems, it looks up all available versions, filters out any versions that don't satisfy the requirement, and then, by default, sorts them from newest to oldest, considering them in that order\.
.P
Providing one of the patch level options (e\.g\. \fB\-\-patch\fR) changes the sort order of the satisfying versions, causing Bundler to consider the latest \fB\-\-patch\fR or \fB\-\-minor\fR version available before other versions\. Note that versions outside the stated patch level could still be resolved to if necessary to find a suitable dependency graph\.
.P
For example, if gem 'foo' is locked at 1\.0\.2, with no gem requirement defined in the Gemfile, and versions 1\.0\.3, 1\.0\.4, 1\.1\.0, 1\.1\.1, 2\.0\.0 all exist, the default order of preference by default (\fB\-\-major\fR) will be "2\.0\.0, 1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2"\.
.P
If the \fB\-\-patch\fR option is used, the order of preference will change to "1\.0\.4, 1\.0\.3, 1\.0\.2, 1\.1\.1, 1\.1\.0, 2\.0\.0"\.
.P
If the \fB\-\-minor\fR option is used, the order of preference will change to "1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2, 2\.0\.0"\.
.P
Combining the \fB\-\-strict\fR option with any of the patch level options will remove any versions beyond the scope of the patch level option, to ensure that no gem is updated that far\.
.P
To continue the previous example, if both \fB\-\-patch\fR and \fB\-\-strict\fR options are used, the available versions for resolution would be "1\.0\.4, 1\.0\.3, 1\.0\.2"\. If \fB\-\-minor\fR and \fB\-\-strict\fR are used, it would be "1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2"\.
.P
Gem requirements as defined in the Gemfile will still be the first determining factor for what versions are available\. If the gem requirement for \fBfoo\fR in the Gemfile is '~> 1\.0', that will accomplish the same thing as providing the \fB\-\-minor\fR and \fB\-\-strict\fR options\.
.SH "PATCH LEVEL EXAMPLES"
Given the following gem specifications:
.IP "" 4
.nf
foo 1\.4\.3, requires: ~> bar 2\.0
foo 1\.4\.4, requires: ~> bar 2\.0
foo 1\.4\.5, requires: ~> bar 2\.1
foo 1\.5\.0, requires: ~> bar 2\.1
foo 1\.5\.1, requires: ~> bar 3\.0
bar with versions 2\.0\.3, 2\.0\.4, 2\.1\.0, 2\.1\.1, 3\.0\.0
.fi
.IP "" 0
.P
Gemfile:
.IP "" 4
.nf
gem 'foo'
.fi
.IP "" 0
.P
Gemfile\.lock:
.IP "" 4
.nf
foo (1\.4\.3)
  bar (~> 2\.0)
bar (2\.0\.3)
.fi
.IP "" 0
.P
Cases:
.IP "" 4
.nf
#  Command Line                     Result
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
1  bundle update \-\-patch            'foo 1\.4\.5', 'bar 2\.1\.1'
2  bundle update \-\-patch foo        'foo 1\.4\.5', 'bar 2\.1\.1'
3  bundle update \-\-minor            'foo 1\.5\.1', 'bar 3\.0\.0'
4  bundle update \-\-minor \-\-strict   'foo 1\.5\.0', 'bar 2\.1\.1'
5  bundle update \-\-patch \-\-strict   'foo 1\.4\.4', 'bar 2\.0\.4'
.fi
.IP "" 0
.P
In case 1, bar is upgraded to 2\.1\.1, a minor version increase, because the dependency from foo 1\.4\.5 required it\.
.P
In case 2, only foo is requested to be unlocked, but bar is also allowed to move because it's not a declared dependency in the Gemfile\.
.P
In case 3, bar goes up a whole major release, because a minor increase is preferred now for foo, and when it goes to 1\.5\.1, it requires 3\.0\.0 of bar\.
.P
In case 4, foo is preferred up to a minor version, but 1\.5\.1 won't work because the \-\-strict flag removes bar 3\.0\.0 from consideration since it's a major increment\.
.P
In case 5, both foo and bar have any minor or major increments removed from consideration because of the \-\-strict flag, so the most they can move is up to 1\.4\.4 and 2\.0\.4\.
.SH "RECOMMENDED WORKFLOW"
In general, when working with an application managed with bundler, you should use the following workflow:
.IP "\(bu" 4
After you create your Gemfile(5) for the first time, run
.IP
$ bundle install
.IP "\(bu" 4
Check the resulting \fBGemfile\.lock\fR into version control
.IP
$ git add Gemfile\.lock
.IP "\(bu" 4
When checking out this repository on another development machine, run
.IP
$ bundle install
.IP "\(bu" 4
When checking out this repository on a deployment machine, run
.IP
$ bundle install \-\-deployment
.IP "\(bu" 4
After changing the Gemfile(5) to reflect a new or update dependency, run
.IP
$ bundle install
.IP "\(bu" 4
Make sure to check the updated \fBGemfile\.lock\fR into version control
.IP
$ git add Gemfile\.lock
.IP "\(bu" 4
If bundle install(1) \fIbundle\-install\.1\.html\fR reports a conflict, manually update the specific gems that you changed in the Gemfile(5)
.IP
$ bundle update rails thin
.IP "\(bu" 4
If you want to update all the gems to the latest possible versions that still match the gems listed in the Gemfile(5), run
.IP
$ bundle update \-\-all
.IP "" 0

PK)J[!��share/man/man1/bundle-open.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-OPEN" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
.SH "SYNOPSIS"
\fBbundle open\fR [GEM] [\-\-path=PATH]
.SH "DESCRIPTION"
Opens the source directory of the provided GEM in your editor\.
.P
For this to work the \fBEDITOR\fR or \fBBUNDLER_EDITOR\fR environment variable has to be set\.
.P
Example:
.IP "" 4
.nf
bundle open 'rack'
.fi
.IP "" 0
.P
Will open the source directory for the 'rack' gem in your bundle\.
.IP "" 4
.nf
bundle open 'rack' \-\-path 'README\.md'
.fi
.IP "" 0
.P
Will open the README\.md file of the 'rack' gem source in your bundle\.
.SH "OPTIONS"
.TP
\fB\-\-path[=PATH]\fR
Specify GEM source relative path to open\.

PK)J[�share/man/man1/bundle-issue.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-ISSUE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-issue\fR \- Get help reporting Bundler issues
.SH "SYNOPSIS"
\fBbundle issue\fR
.SH "DESCRIPTION"
Provides guidance on reporting Bundler issues and outputs detailed system information that should be included when filing a bug report\. This command:
.IP "1." 4
Displays links to troubleshooting resources
.IP "2." 4
Shows instructions for reporting issues
.IP "3." 4
Outputs comprehensive environment information needed for debugging
.IP "" 0
.P
The command helps ensure that bug reports include all necessary system details for effective troubleshooting\.
.SH "OUTPUT"
The command outputs several sections:
.IP "\(bu" 4
Troubleshooting links and resources
.IP "\(bu" 4
Link to the GitHub issue template
.IP "\(bu" 4
Environment information including: Bundler version and platforms, Ruby version and configuration, RubyGems version and paths, Development tool versions (Git, RVM, rbenv, chruby)
.IP "\(bu" 4
Bundler build metadata
.IP "\(bu" 4
Current Bundler settings
.IP "\(bu" 4
Bundle Doctor output
.IP "" 0
.SH "EXAMPLES"
Get issue reporting information:
.IP "" 4
.nf
$ bundle issue
.fi
.IP "" 0
.SH "SEE ALSO"
.IP "\(bu" 4
bundle\-doctor(1)
.IP "" 0

PK)J[w���share/man/man1/bundle-show.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-SHOW" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
.SH "SYNOPSIS"
\fBbundle show\fR [GEM] [\-\-paths] [\-\-outdated]
.SH "DESCRIPTION"
Without the [GEM] option, \fBshow\fR will print a list of the names and versions of all gems that are required by your [\fBGemfile(5)\fR][Gemfile(5)], sorted by name\.
.P
Calling show with [GEM] will list the exact location of that gem on your machine\.
.SH "OPTIONS"
.TP
\fB\-\-paths\fR
List the paths of all gems that are required by your [\fBGemfile(5)\fR][Gemfile(5)], sorted by gem name\.
.TP
\fB\-\-outdated\fR
Show verbose output including whether gems are outdated\.

PK)J[�ǘD��share/man/man1/bundle-console.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CONSOLE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-console\fR \- Open an IRB session with the bundle pre\-loaded
.SH "SYNOPSIS"
\fBbundle console\fR [GROUP]
.SH "DESCRIPTION"
Starts an interactive Ruby console session in the context of the current bundle\.
.P
If no \fBGROUP\fR is specified, all gems in the \fBdefault\fR group in the Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR are preliminarily loaded\.
.P
If \fBGROUP\fR is specified, all gems in the given group in the Gemfile in addition to the gems in \fBdefault\fR group are loaded\. Even if the given group does not exist in the Gemfile, IRB console starts without any warning or error\.
.P
The environment variable \fBBUNDLE_CONSOLE\fR or \fBbundle config set console\fR can be used to change the shell from the following:
.IP "\(bu" 4
\fBirb\fR (default)
.IP "\(bu" 4
\fBpry\fR (https://github\.com/pry/pry)
.IP "\(bu" 4
\fBripl\fR (https://github\.com/cldwalker/ripl)
.IP "" 0
.P
\fBbundle console\fR uses irb by default\. An alternative Pry or Ripl can be used with \fBbundle console\fR by adjusting the \fBconsole\fR Bundler setting\. Also make sure that \fBpry\fR or \fBripl\fR is in your Gemfile\.
.SH "EXAMPLE"
.nf
$ bundle config set console pry
$ bundle console
Resolving dependencies\|\.\|\.\|\.
[1] pry(main)>
.fi
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR
PK)J[�����share/man/man1/rake.1nu�[���.Dd June 12, 2016
.Dt RAKE 1
.Os rake 11.2.2
.Sh NAME
.Nm rake
.Nd make-like build utility for Ruby
.Sh SYNOPSIS
.Nm
.Op Fl f Ar rakefile
.Op Ar options
.Ar targets ...
.Sh DESCRIPTION
.Nm
is a
.Xr make 1 Ns -like
build utility for Ruby.
Tasks and dependencies are specified in standard Ruby syntax.
.Sh OPTIONS
.Bl -tag -width Ds
.It Fl m , Fl -multitask
Treat all tasks as multitasks.
.It Fl B , Fl -build-all
Build all prerequisites, including those which are up\-to\-date.
.It Fl j , Fl -jobs Ar num_jobs
Specifies the maximum number of tasks to execute in parallel (default is number of CPU cores + 4).
.El
.Ss Modules
.Bl -tag -width Ds
.It Fl I , Fl -libdir Ar libdir
Include
.Ar libdir
in the search path for required modules.
.It Fl r , Fl -require Ar module
Require
.Ar module
before executing
.Pa rakefile .
.El
.Ss Rakefile location
.Bl -tag -width Ds
.It Fl f , Fl -rakefile Ar filename
Use
.Ar filename
as the rakefile to search for.
.It Fl N , Fl -no-search , Fl -nosearch
Do not search parent directories for the Rakefile.
.It Fl G , Fl -no-system , Fl -nosystem
Use standard project Rakefile search paths, ignore system wide rakefiles.
.It Fl R , Fl -rakelib Ar rakelibdir , Fl -rakelibdir Ar rakelibdir
Auto-import any .rake files in
.Ar rakelibdir
(default is
.Sq rakelib )
.It Fl g , Fl -system
Use system-wide (global) rakefiles (usually
.Pa ~/.rake/*.rake ) .
.El
.Ss Debugging
.Bl -tag -width Ds
.It Fl -backtrace Ns = Ns Ar out
Enable full backtrace.
.Ar out
can be
.Dv stderr
(default) or
.Dv stdout .
.It Fl t , Fl -trace Ns = Ns Ar out
Turn on invoke/execute tracing, enable full backtrace.
.Ar out
can be
.Dv stderr
(default) or
.Dv stdout .
.It Fl -suppress-backtrace Ar pattern
Suppress backtrace lines matching regexp
.Ar pattern .
Ignored if
.Fl -trace
is on.
.It Fl -rules
Trace the rules resolution.
.It Fl n , Fl -dry-run
Do a dry run without executing actions.
.It Fl T , Fl -tasks Op Ar pattern
Display the tasks (matching optional
.Ar pattern )
with descriptions, then exit.
.It Fl D , Fl -describe Op Ar pattern
Describe the tasks (matching optional
.Ar pattern ) ,
then exit.
.It Fl W , Fl -where Op Ar pattern
Describe the tasks (matching optional
.Ar pattern ) ,
then exit.
.It Fl P , Fl -prereqs
Display the tasks and dependencies, then exit.
.It Fl e , Fl -execute Ar code
Execute some Ruby code and exit.
.It Fl p , Fl -execute-print Ar code
Execute some Ruby code, print the result, then exit.
.It Fl E , Fl -execute-continue Ar code
Execute some Ruby code, then continue with normal task processing.
.El
.Ss Information
.Bl -tag -width Ds
.It Fl v , Fl -verbose
Log message to standard output.
.It Fl q , Fl -quiet
Do not log messages to standard output.
.It Fl s , Fl -silent
Like
.Fl -quiet ,
but also suppresses the
.Sq in directory
announcement.
.It Fl X , Fl -no-deprecation-warnings
Disable the deprecation warnings.
.It Fl -comments
Show commented tasks only
.It Fl A , Fl -all
Show all tasks, even uncommented ones (in combination with
.Fl T
or
.Fl D )
.It Fl -job-stats Op Ar level
Display job statistics.
If
.Ar level
is
.Sq history ,
displays a complete job list.
.It Fl V , Fl -version
Display the program version.
.It Fl h , Fl H , Fl -help
Display a help message.
.El
.Sh SEE ALSO
The complete documentation for
.Nm rake
has been installed at
.Pa /usr/share/doc/rake-doc/html/index.html .
It is also available online at
.Lk https://ruby.github.io/rake .
.Sh AUTHORS
.An -nosplit
.Nm
was written by
.An Jim Weirich Aq Mt jim@weirichhouse.org .
.Pp
This manual was created by
.An Caitlin Matos Aq Mt caitlin.matos@zoho.com
for the Debian project (but may be used by others).
It was inspired by the manual by
.An Jani Monoses Aq Mt jani@iv.ro
for the Ubuntu project.
PK)J[?����share/man/man1/bundle-gem.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-GEM" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
.SH "SYNOPSIS"
\fBbundle gem\fR \fIGEM_NAME\fR \fIOPTIONS\fR
.SH "DESCRIPTION"
Generates a directory named \fBGEM_NAME\fR with a \fBRakefile\fR, \fBGEM_NAME\.gemspec\fR, and other supporting files and directories that can be used to develop a rubygem with that name\.
.P
Run \fBrake \-T\fR in the resulting project for a list of Rake tasks that can be used to test and publish the gem to rubygems\.org\.
.P
The generated project skeleton can be customized with OPTIONS, as explained below\. Note that these options can also be specified via Bundler's global configuration file using the following names:
.IP "\(bu" 4
\fBgem\.coc\fR
.IP "\(bu" 4
\fBgem\.mit\fR
.IP "\(bu" 4
\fBgem\.test\fR
.IP "" 0
.SH "OPTIONS"
.IP "\(bu" 4
\fB\-\-exe\fR, \fB\-\-bin\fR, \fB\-b\fR: Specify that Bundler should create a binary executable (as \fBexe/GEM_NAME\fR) in the generated rubygem project\. This binary will also be added to the \fBGEM_NAME\.gemspec\fR manifest\. This behavior is disabled by default\.
.IP "\(bu" 4
\fB\-\-no\-exe\fR: Do not create a binary (overrides \fB\-\-exe\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-coc\fR: Add a \fBCODE_OF_CONDUCT\.md\fR file to the root of the generated project\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-coc\fR: Do not create a \fBCODE_OF_CONDUCT\.md\fR (overrides \fB\-\-coc\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-changelog\fR Add a \fBCHANGELOG\.md\fR file to the root of the generated project\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-changelog\fR: Do not create a \fBCHANGELOG\.md\fR (overrides \fB\-\-changelog\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-ext=c\fR, \fB\-\-ext=rust\fR: Add boilerplate for C or Rust (currently magnus \fIhttps://docs\.rs/magnus\fR based) extension code to the generated project\. This behavior is disabled by default\.
.IP "\(bu" 4
\fB\-\-no\-ext\fR: Do not add extension code (overrides \fB\-\-ext\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-git\fR: Initialize a git repo inside your library\.
.IP "\(bu" 4
\fB\-\-github\-username=GITHUB_USERNAME\fR: Fill in GitHub username on README so that you don't have to do it manually\. Set a default with \fBbundle config set \-\-global gem\.github_username <your_username>\fR\.
.IP "\(bu" 4
\fB\-\-mit\fR: Add an MIT license to a \fBLICENSE\.txt\fR file in the root of the generated project\. Your name from the global git config is used for the copyright statement\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-mit\fR: Do not create a \fBLICENSE\.txt\fR (overrides \fB\-\-mit\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-t\fR, \fB\-\-test=minitest\fR, \fB\-\-test=rspec\fR, \fB\-\-test=test\-unit\fR: Specify the test framework that Bundler should use when generating the project\. Acceptable values are \fBminitest\fR, \fBrspec\fR and \fBtest\-unit\fR\. The \fBGEM_NAME\.gemspec\fR will be configured and a skeleton test/spec directory will be created based on this option\. Given no option is specified:
.IP
When Bundler is configured to generate tests, this defaults to Bundler's global config setting \fBgem\.test\fR\.
.IP
When Bundler is configured to not generate tests, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-test\fR: Do not use a test framework (overrides \fB\-\-test\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-changelog\fR: Generate changelog file\. Set a default with \fBbundle config set \-\-global gem\.changelog true\fR\.
.IP "\(bu" 4
\fB\-\-ci\fR, \fB\-\-ci=circle\fR, \fB\-\-ci=github\fR, \fB\-\-ci=gitlab\fR: Specify the continuous integration service that Bundler should use when generating the project\. Acceptable values are \fBgithub\fR, \fBgitlab\fR and \fBcircle\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
.IP
When Bundler is configured to generate CI files, this defaults to Bundler's global config setting \fBgem\.ci\fR\.
.IP
When Bundler is configured to not generate CI files, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-ci\fR: Do not use a continuous integration service (overrides \fB\-\-ci\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-linter\fR, \fB\-\-linter=rubocop\fR, \fB\-\-linter=standard\fR: Specify the linter and code formatter that Bundler should add to the project's development dependencies\. Acceptable values are \fBrubocop\fR and \fBstandard\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
.IP
When Bundler is configured to add a linter, this defaults to Bundler's global config setting \fBgem\.linter\fR\.
.IP
When Bundler is configured not to add a linter, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-linter\fR: Do not add a linter (overrides \fB\-\-linter\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-rubocop\fR: Add rubocop to the generated Rakefile and gemspec\. Set a default with \fBbundle config set \-\-global gem\.rubocop true\fR\.
.IP "\(bu" 4
\fB\-\-edit=EDIT\fR, \fB\-e=EDIT\fR: Open the resulting GEM_NAME\.gemspec in EDIT, or the default editor if not specified\. The default is \fB$BUNDLER_EDITOR\fR, \fB$VISUAL\fR, or \fB$EDITOR\fR\.
.IP "" 0
.SH "SEE ALSO"
.IP "\(bu" 4
bundle config(1) \fIbundle\-config\.1\.html\fR
.IP "" 0

PK)J[v�I��share/man/man1/bundle.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\fR \- Ruby Dependency Management
.SH "SYNOPSIS"
\fBbundle\fR COMMAND [\-\-no\-color] [\-\-verbose] [ARGS]
.SH "DESCRIPTION"
Bundler manages an \fBapplication's dependencies\fR through its entire life across many machines systematically and repeatably\.
.P
See the bundler website \fIhttps://bundler\.io\fR for information on getting started, and Gemfile(5) for more information on the \fBGemfile\fR format\.
.SH "OPTIONS"
.TP
\fB\-\-no\-color\fR
Print all output without color
.TP
\fB\-\-retry\fR, \fB\-r\fR
Specify the number of times you wish to attempt network commands
.TP
\fB\-\-verbose\fR, \fB\-V\fR
Print out additional logging information
.SH "BUNDLE COMMANDS"
We divide \fBbundle\fR subcommands into primary commands and utilities:
.SH "PRIMARY COMMANDS"
.TP
\fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR
Install the gems specified by the \fBGemfile\fR or \fBGemfile\.lock\fR
.TP
\fBbundle update(1)\fR \fIbundle\-update\.1\.html\fR
Update dependencies to their latest versions
.TP
\fBbundle cache(1)\fR \fIbundle\-cache\.1\.html\fR
Package the \.gem files required by your application into the \fBvendor/cache\fR directory (aliases: \fBbundle package\fR, \fBbundle pack\fR)
.TP
\fBbundle exec(1)\fR \fIbundle\-exec\.1\.html\fR
Execute a script in the current bundle
.TP
\fBbundle config(1)\fR \fIbundle\-config\.1\.html\fR
Specify and read configuration options for Bundler
.TP
\fBbundle help(1)\fR \fIbundle\-help\.1\.html\fR
Display detailed help for each subcommand
.SH "UTILITIES"
.TP
\fBbundle add(1)\fR \fIbundle\-add\.1\.html\fR
Add the named gem to the Gemfile and run \fBbundle install\fR
.TP
\fBbundle binstubs(1)\fR \fIbundle\-binstubs\.1\.html\fR
Generate binstubs for executables in a gem
.TP
\fBbundle check(1)\fR \fIbundle\-check\.1\.html\fR
Determine whether the requirements for your application are installed and available to Bundler
.TP
\fBbundle show(1)\fR \fIbundle\-show\.1\.html\fR
Show the source location of a particular gem in the bundle
.TP
\fBbundle outdated(1)\fR \fIbundle\-outdated\.1\.html\fR
Show all of the outdated gems in the current bundle
.TP
\fBbundle console(1)\fR (deprecated)
Start an IRB session in the current bundle
.TP
\fBbundle open(1)\fR \fIbundle\-open\.1\.html\fR
Open an installed gem in the editor
.TP
\fBbundle lock(1)\fR \fIbundle\-lock\.1\.html\fR
Generate a lockfile for your dependencies
.TP
\fBbundle viz(1)\fR \fIbundle\-viz\.1\.html\fR (deprecated)
Generate a visual representation of your dependencies
.TP
\fBbundle init(1)\fR \fIbundle\-init\.1\.html\fR
Generate a simple \fBGemfile\fR, placed in the current directory
.TP
\fBbundle gem(1)\fR \fIbundle\-gem\.1\.html\fR
Create a simple gem, suitable for development with Bundler
.TP
\fBbundle platform(1)\fR \fIbundle\-platform\.1\.html\fR
Display platform compatibility information
.TP
\fBbundle clean(1)\fR \fIbundle\-clean\.1\.html\fR
Clean up unused gems in your Bundler directory
.TP
\fBbundle doctor(1)\fR \fIbundle\-doctor\.1\.html\fR
Display warnings about common problems
.TP
\fBbundle remove(1)\fR \fIbundle\-remove\.1\.html\fR
Removes gems from the Gemfile
.TP
\fBbundle plugin(1)\fR \fIbundle\-plugin\.1\.html\fR
Manage Bundler plugins
.TP
\fBbundle version(1)\fR \fIbundle\-version\.1\.html\fR
Prints Bundler version information
.SH "PLUGINS"
When running a command that isn't listed in PRIMARY COMMANDS or UTILITIES, Bundler will try to find an executable on your path named \fBbundler\-<command>\fR and execute it, passing down any extra arguments to it\.
.SH "OBSOLETE"
These commands are obsolete and should no longer be used:
.IP "\(bu" 4
\fBbundle inject(1)\fR
.IP "" 0

PK)J[<�N77 share/man/man1/bundle-licenses.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-LICENSES" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-licenses\fR \- Print the license of all gems in the bundle
.SH "SYNOPSIS"
\fBbundle licenses\fR
.SH "DESCRIPTION"
Prints the license of all gems in the bundle\.
PK)J[_�B]]share/man/man1/ruby.1nu�[���.\"Ruby is copyrighted by Yukihiro Matsumoto <matz@netlab.jp>.
.Dd April 14, 2018
.Dt RUBY \&1 "Ruby Programmer's Reference Guide"
.Os UNIX
.Sh NAME
.Nm ruby
.Nd Interpreted object-oriented scripting language
.Sh SYNOPSIS
.Nm
.Op Fl -copyright
.Op Fl -version
.Op Fl SUacdlnpswvy
.Op Fl 0 Ns Op Ar octal
.Op Fl C Ar directory
.Op Fl E Ar external Ns Op : Ns Ar internal
.Op Fl F Ns Op Ar pattern
.Op Fl I Ar directory
.Op Fl K Ns Op Ar c
.Op Fl T Ns Op Ar level
.Op Fl W Ns Op Ar level
.Op Fl e Ar command
.Op Fl i Ns Op Ar extension
.Op Fl r Ar library
.Op Fl x Ns Op Ar directory
.Op Fl - Ns Bro Cm enable Ns | Ns Cm disable Brc Ns - Ns Ar FEATURE
.Op Fl -dump Ns = Ns Ar target
.Op Fl -verbose
.Op Fl -crash-report Ns = Ns Ar template
.Op Fl -
.Op Ar program_file
.Op Ar argument ...
.Sh DESCRIPTION
Ruby is an interpreted scripting language for quick and easy
object-oriented programming.  It has many features to process text
files and to do system management tasks (like in Perl).  It is simple,
straight-forward, and extensible.
.Pp
If you want a language for easy object-oriented programming, or you
don't like the Perl ugliness, or you do like the concept of LISP, but
don't like too many parentheses, Ruby might be your language of
choice.
.Sh FEATURES
Ruby's features are as follows:
.Bl -tag -width 6n
.It Sy "Interpretive"
Ruby is an interpreted language, so you don't have to recompile
programs written in Ruby to execute them.
.Pp
.It Sy "Variables have no type (dynamic typing)"
Variables in Ruby can contain data of any type.  You don't have to
worry about variable typing.  Consequently, it has a weaker compile
time check.
.Pp
.It Sy "No declaration needed"
You can use variables in your Ruby programs without any declarations.
Variable names denote their scope - global, class, instance, or local.
.Pp
.It Sy "Simple syntax"
Ruby has a simple syntax influenced slightly from Eiffel.
.Pp
.It Sy "No user-level memory management"
Ruby has automatic memory management.  Objects no longer referenced
from anywhere are automatically collected by the garbage collector
built into the interpreter.
.Pp
.It Sy "Everything is an object"
Ruby is a purely object-oriented language, and was so since its
creation.  Even such basic data as integers are seen as objects.
.Pp
.It Sy "Class, inheritance, and methods"
Being an object-oriented language, Ruby naturally has basic
features like classes, inheritance, and methods.
.Pp
.It Sy "Singleton methods"
Ruby has the ability to define methods for certain objects.  For
example, you can define a press-button action for certain widget by
defining a singleton method for the button.  Or, you can make up your
own prototype based object system using singleton methods, if you want
to.
.Pp
.It Sy "Mix-in by modules"
Ruby intentionally does not have the multiple inheritance as it is a
source of confusion.  Instead, Ruby has the ability to share
implementations across the inheritance tree.  This is often called a
.Sq Mix-in .
.Pp
.It Sy "Iterators"
Ruby has iterators for loop abstraction.
.Pp
.It Sy "Closures"
In Ruby, you can objectify the procedure.
.Pp
.It Sy "Text processing and regular expressions"
Ruby has a bunch of text processing features like in Perl.
.Pp
.It Sy "M17N, character set independent"
Ruby supports multilingualized programming. Easy to process texts
written in many different natural languages and encoded in many
different character encodings, without dependence on Unicode.
.Pp
.It Sy "Bignums"
With built-in bignums, you can for example calculate factorial(400).
.Pp
.It Sy "Reflection and domain-specific languages"
Class is also an instance of the Class class. Definition of classes and methods
is an expression just as 1+1 is. So your programs can even write and modify programs.
Thus, you can write your application in your own programming language on top of Ruby.
.Pp
.It Sy "Exception handling"
As in Java(tm).
.Pp
.It Sy "Direct access to the OS"
Ruby can use most
.Ux
system calls, often used in system programming.
.Pp
.It Sy "Dynamic loading"
On most
.Ux
systems, you can load object files into the Ruby interpreter
on-the-fly.
.It Sy "Rich libraries"
In addition to the
.Dq builtin libraries
and
.Dq standard libraries
that are bundled with Ruby, a vast amount of third-party libraries
.Pq Dq gems
are available via the package management system called
.Sq RubyGems ,
namely the
.Xr gem 1
command.  Visit RubyGems.org
.Pq Lk https://rubygems.org/
to find the gems you need, and explore GitHub
.Pq Lk https://github.com/
to see how they are being developed and used.
.El
.Pp
.Sh OPTIONS
The Ruby interpreter accepts the following command-line options (switches).
They are quite similar to those of
.Xr perl 1 .
.Bl -tag -width "1234567890123" -compact
.Pp
.It Fl -copyright
Prints the copyright notice, and quits immediately without running any
script.
.Pp
.It Fl -version
Prints the version of the Ruby interpreter, and quits immediately without
running any script.
.Pp
.It Fl 0 Ns Op Ar octal
(The digit
.Dq zero . )
Specifies the input record separator
.Pf ( Li "$/" )
as an octal number. If no digit is given, the null character is taken
as the separator.  Other switches may follow the digits.
.Fl 00
turns Ruby into paragraph mode.
.Fl 0777
makes Ruby read whole file at once as a single string since there is
no legal character with that value.
.Pp
.It Fl C Ar directory
.It Fl X Ar directory
Causes Ruby to switch to the directory.
.Pp
.It Fl E Ar external Ns Op : Ns Ar internal
.It Fl -encoding Ar external Ns Op : Ns Ar internal
Specifies the default value(s) for external encodings and internal encoding. Values should be separated with colon (:).
.Pp
You can omit the one for internal encodings, then the value
.Pf ( Li "Encoding.default_internal" ) will be nil.
.Pp
.It Fl -external-encoding Ns = Ns Ar encoding
.It Fl -internal-encoding Ns = Ns Ar encoding
Specify the default external or internal character encoding
.Pp
.It Fl F Ar pattern
Specifies input field separator
.Pf ( Li "$;" ) .
.Pp
.It Fl I Ar directory
Used to tell Ruby where to load the library scripts.  Directory path
will be added to the load-path variable
.Pf ( Li "$:" ) .
.Pp
.It Fl K Ar kcode
Specifies KANJI (Japanese) encoding. The default value for script encodings
.Pf ( Li "__ENCODING__" ) and external encodings ( Li "Encoding.default_external" ) will be the specified one.
.Ar kcode
can be one of
.Bl -hang -offset indent
.It Sy e
EUC-JP
.Pp
.It Sy s
Windows-31J (CP932)
.Pp
.It Sy u
UTF-8
.Pp
.It Sy n
ASCII-8BIT (BINARY)
.El
.Pp
.It Fl S
Makes Ruby use the
.Ev PATH
environment variable to search for script, unless its name begins
with a slash.  This is used to emulate
.Li #!
on machines that don't support it, in the following manner:
.Bd -literal -offset indent
#! /usr/local/bin/ruby
# This line makes the next one a comment in Ruby \e
  exec /usr/local/bin/ruby -S $0 $*
.Ed
.Pp
On some systems
.Li "$0"
does not always contain the full pathname, so you need the
.Fl S
switch to tell Ruby to search for the script if necessary (to handle embedded
spaces and such).  A better construct than
.Li "$*"
would be
.Li ${1+"$@"} ,
but it does not work if the script is being interpreted by
.Xr csh 1 .
.Pp
.It Fl T Ns Op Ar level=1
Turns on taint checks at the specified level (default 1).
.Pp
.It Fl U
Sets the default value for internal encodings
.Pf ( Li "Encoding.default_internal" ) to UTF-8.
.Pp
.It Fl W Ns Op Ar level=2
Turns on verbose mode at the specified level without printing the version
message at the beginning. The level can be;
.Bl -hang -offset indent
.It Sy 0
Verbose mode is "silence". It sets the
.Li "$VERBOSE"
to nil.
.Pp
.It Sy 1
Verbose mode is "medium". It sets the
.Li "$VERBOSE"
to false.
.Pp
.It Sy 2 (default)
Verbose mode is "verbose". It sets the
.Li "$VERBOSE"
to true.
.Fl W Ns
2 is the same as
.Fl w
.
.El
.Pp
.It Fl a
Turns on auto-split mode when used with
.Fl n
or
.Fl p .
In auto-split mode, Ruby executes
.Dl $F = $_.split
at beginning of each loop.
.Pp
.It Fl -backtrace-limit Ns = Ns Ar num
Limits the maximum length of backtraces to
.Ar num
lines (default -1, meaning no limit).
.Pp
.It Fl c
Causes Ruby to check the syntax of the script and exit without
executing. If there are no syntax errors, Ruby will print
.Dq Syntax OK
to the standard output.
.Pp
.It Fl d
.It Fl -debug
Turns on debug mode.
.Li "$DEBUG"
will be set to true.
.Pp
.It Fl e Ar command
Specifies script from command-line while telling Ruby not to search
the rest of the arguments for a script file name.
.Pp
.It Fl h
.It Fl -help
Prints a summary of the options.
.Pp
.It Fl i Ar extension
Specifies in-place-edit mode.  The extension, if specified, is added
to old file name to make a backup copy.  For example:
.Bd -literal -offset indent
% echo matz > /tmp/junk
% cat /tmp/junk
matz
% ruby -p -i.bak -e '$_.upcase!' /tmp/junk
% cat /tmp/junk
MATZ
% cat /tmp/junk.bak
matz
.Ed
.Pp
.It Fl l
(The lowercase letter
.Dq ell . )
Enables automatic line-ending processing, which means to firstly set
.Li "$\e"
to the value of
.Li "$/" ,
and secondly chops every line read using
.Li chomp! .
.Pp
.It Fl n
Causes Ruby to assume the following loop around your script, which
makes it iterate over file name arguments somewhat like
.Nm sed
.Fl n
or
.Nm awk .
.Bd -literal -offset indent
while gets
  ...
end
.Ed
.Pp
.It Fl p
Acts mostly same as -n switch, but print the value of variable
.Li "$_"
at the each end of the loop.  For example:
.Bd -literal -offset indent
% echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"'
MATZ
.Ed
.Pp
.It Fl r Ar library
Causes Ruby to load the library using require.  It is useful when using
.Fl n
or
.Fl p .
.Pp
.It Fl s
Enables some switch parsing for switches after script name but before
any file name arguments (or before a
.Fl - ) .
Any switches found there are removed from
.Li ARGV
and set the corresponding variable in the script.  For example:
.Bd -literal -offset indent
#! /usr/local/bin/ruby -s
# prints "true" if invoked with `-xyz' switch.
print "true\en" if $xyz
.Ed
.Pp
.It Fl v
Enables verbose mode.  Ruby will print its version at the beginning
and set the variable
.Li "$VERBOSE"
to true.  Some methods print extra messages if this variable is true.
If this switch is given, and no other switches are present, Ruby quits
after printing its version.
.Pp
.It Fl w
Enables verbose mode without printing version message at the
beginning.  It sets the
.Li "$VERBOSE"
variable to true.
.Pp
.It Fl x Ns Op Ar directory
Tells Ruby that the script is embedded in a message.  Leading garbage
will be discarded until the first line that starts with
.Dq #!
and contains the string,
.Dq ruby .
Any meaningful switches on that line will be applied.  The end of the script
must be specified with either
.Li EOF ,
.Li "^D" ( Li "control-D" ) ,
.Li "^Z" ( Li "control-Z" ) ,
or the reserved word
.Li __END__ .
If the directory name is specified, Ruby will switch to that directory
before executing script.
.Pp
.It Fl y
.It Fl -yydebug
This option is not guaranteed to be compatible.
.Pp
Turns on compiler debug mode.  Ruby will print a bunch of internal
state messages during compilation.  Only specify this switch you are going to
debug the Ruby interpreter.
.Pp
.It Fl -disable- Ns Ar FEATURE
.It Fl -enable- Ns Ar FEATURE
Disables (or enables) the specified
.Ar FEATURE .
.Bl -tag -width "--disable-rubyopt" -compact
.It Fl -disable-gems
.It Fl -enable-gems
Disables (or enables) RubyGems libraries.  By default, Ruby will load the latest
version of each installed gem. The
.Li Gem
constant is true if RubyGems is enabled, false if otherwise.
.Pp
.It Fl -disable-rubyopt
.It Fl -enable-rubyopt
Ignores (or considers) the
.Ev RUBYOPT
environment variable. By default, Ruby considers the variable.
.Pp
.It Fl -disable-all
.It Fl -enable-all
Disables (or enables) all features.
.Pp
.El
.Pp
.It Fl -dump Ns = Ns Ar target
Dump some information.
.Pp
Prints the specified target.
.Ar target
can be one of:
.Bl -hang -offset indent -width "version"
.It Sy version
Print version description (same as
.Fl -version).
.It Sy usage
Print a brief usage message (same as
.Fl h).
.It Sy help
Show long help message (same as
.Fl -help).
.It Sy syntax
Check syntax (same as
.Fl c
.Fl -yydebug).
.Pp
.El
.Pp
Or one of the following, which are intended for debugging the interpreter:
.Bl -hang -offset indent -width "parsetree"
.It Sy yydebug
Enable compiler debug mode (same as
.Fl -yydebug).
.It Sy parsetree
Print a textual representation of the Ruby AST for the program.
.It Sy insns
Print a list of disassembled bytecode instructions.
.It Sy -optimize
Disable various optimizations to print a list disassembled bytecode instructions.
.It Sy +error-tolerant
Enable error-tolerant parsing, when yydebug or parsetree.
.It Sy +comment
Annotate a textual representation of the Ruby AST for the program with the associated Ruby source code.
.El
.Pp
.It Fl -verbose
Enables verbose mode without printing version message at the
beginning.  It sets the
.Li "$VERBOSE"
variable to true.
If this switch is given, and no script arguments (script file or
.Fl e
options) are present, Ruby quits immediately.
.Pp
.It Fl -crash-report Ns = Ns Ar template
Sets the template of path name to save crash report.
See
.Ev RUBY_CRASH_REPORT
environment variable for details.
.El
.Pp
.Sh ENVIRONMENT
.Bl -tag -width "RUBYSHELL" -compact
.It Ev RUBYLIB
A colon-separated list of directories that are added to Ruby's
library load path
.Pf ( Li "$:" ) . Directories from this environment variable are searched
before the standard load path is searched.
.Pp
e.g.:
.Dl RUBYLIB="$HOME/lib/ruby:$HOME/lib/rubyext"
.Pp
.It Ev RUBYOPT
Additional Ruby options.
.Pp
e.g.
.Dl RUBYOPT="-w -Ke"
.Pp
Note that RUBYOPT can contain only
.Fl d , Fl E , Fl I , Fl K , Fl r , Fl T , Fl U , Fl v , Fl w , Fl W, Fl -debug ,
.Fl -disable- Ns Ar FEATURE
and
.Fl -enable- Ns Ar FEATURE .
.Pp
.It Ev RUBYPATH
A colon-separated list of directories that Ruby searches for
Ruby programs when the
.Fl S
flag is specified.  This variable precedes the
.Ev PATH
environment variable.
.Pp
.It Ev RUBYSHELL
The path to the system shell command.  This environment variable is
enabled for only mswin32, mingw32, and OS/2 platforms.  If this
variable is not defined, Ruby refers to
.Ev COMSPEC .
.Pp
.It Ev RUBY_FREE_AT_EXIT
If set, Ruby tries to free all dynamically allocated memories.
Introduced in Ruby 3.3, default: unset.
.Pp
.It Ev RUBY_IO_BUFFER_DEFAULT_SIZE
The custom default buffer size of
.Li IO::Buffer .
.Pp
.It Ev RUBY_MAX_CPU
The maximum number of native threads used by M:N Threads scheduler
Introduced in Ruby 3.3, default: 8.
.Pp
.It Ev RUBY_MN_THREADS
If set to
.Li 1 ,
M:N Thread scheduler is enabled on the main Ractor.
Introduced in Ruby 3.3, default: unset.
.Pp
.It Ev RUBY_PAGER
The pager command that will be used for
.Pp
.It Ev RUBY_THREAD_TIMESLICE
Sets the default thread time slice (thread quantum) in milliseconds.
Introduced in Ruby 3.4, default: 100ms.
.Fl -help
option.
Introduced in Ruby 3.0, default:
.Ev PAGER
environment variable.
.Pp
.It Ev PATH
Ruby refers to the
.Ev PATH
environment variable on calling Kernel#system.
.El
.Pp
And Ruby depends on some RubyGems related environment variables unless RubyGems is disabled.
See the help of
.Xr gem 1
as below.
.Bd -literal -offset indent
% gem help
.Ed
.Pp
.Sh GC ENVIRONMENT
The Ruby garbage collector (GC) tracks objects in fixed-sized slots,
but each object may have auxiliary memory allocations handled by the
malloc family of C standard library calls (
.Xr malloc 3 ,
.Xr calloc 3 ,
and
.Xr realloc 3 ) .
In this documentation, the "heap" refers to the Ruby object heap
of fixed-sized slots, while "malloc" refers to auxiliary
allocations commonly referred to as the "process heap".
Thus there are at least two possible ways to trigger GC:
.Bl -hang -offset indent
.It Sy 1
Reaching the object limit.
.It Sy 2
Reaching the malloc limit.
.Pp
.El
In Ruby 2.1, the generational GC was introduced and the limits are divided
into young and old generations, providing two additional ways to trigger
a GC:
.Bl -hang -offset indent
.It Sy 3
Reaching the old object limit.
.It Sy 4
Reaching the old malloc limit.
.El
.Pp
There are currently 4 possible areas where the GC may be tuned by
the following environment variables:
.Bl -hang -compact -width "RUBY_GC_HEAP_n_INIT_SLOTS"
.Pp
.It Ev RUBY_GC_HEAP_ Ns Ar n Ns Ev _INIT_SLOTS
Initial allocation of slots in a specific heap.
The available heaps can be found in the keys of
.Li GC.stat_heap .
.Ar n
is a decimal number between 0 and 4.
Introduced in Ruby 3.3.
.Pp
.It Ev RUBY_GC_HEAP_FREE_SLOTS
Prepare at least this amount of slots after GC.
Allocate this number slots if there are not enough slots.
Introduced in Ruby 2.1, default: 4096
.Pp
.It Ev RUBY_GC_HEAP_GROWTH_FACTOR
Increase allocation rate of heap slots by this factor.
Introduced in Ruby 2.1, default: 1.8, minimum: 1.0 (no growth)
.Pp
.It Ev RUBY_GC_HEAP_GROWTH_MAX_SLOTS
Allocation rate is limited to this number of slots,
preventing excessive allocation due to RUBY_GC_HEAP_GROWTH_FACTOR.
Introduced in Ruby 2.1, default: 0 (no limit)
.Pp
.It Ev RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR
Perform a full GC when the number of old objects is more than R * N,
where R is this factor and N is the number of old objects after the
last full GC.
Introduced in Ruby 2.1.1, default: 2.0
.Pp
.It Ev RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO
Used to calculate the
.Li remembered_wb_unprotected_objects_limit
using a ratio of
.Li old_objects .
Introduced in Ruby 3.3, default: 0.1, minimum: 0.0
.It Ev RUBY_GC_MALLOC_LIMIT
The initial limit of young generation allocation from the malloc-family.
GC will start when this limit is reached.
Default: 16MB
.Pp
.It Ev RUBY_GC_MALLOC_LIMIT_MAX
The maximum limit of young generation allocation from malloc before GC starts.
Prevents excessive malloc growth due to RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR.
Introduced in Ruby 2.1, default: 32MB.
.Pp
.It Ev RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR
Increases the limit of young generation malloc calls, reducing
GC frequency but increasing malloc growth until RUBY_GC_MALLOC_LIMIT_MAX
is reached.
Introduced in Ruby 2.1, default: 1.4, minimum: 1.0 (no growth)
.Pp
.It Ev RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO
Allocate additional pages when the number of free slots is
lower than the value
.Li (total_slots * (this ratio)) .
Introduced in Ruby 2.4, default: 0.2, minimum: 0.0, maximum: 1.0
.Pp
.It Ev RUBY_GC_HEAP_FREE_SLOTS_MAX_RATIO
Allow to free pages when the number of free slots is greater than the value
.Li (total_slots * (this ratio)) .
Introduced in Ruby 2.4, default: 0.4, minimum:
.Li RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO,
maximum: 1.0
.Pp
.It Ev RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO
Allocate slots to satisfy this formula:
.Li free_slots = total_slots * goal_ratio
In other words, prepare
.Li (total_slots * goal_ratio)
free slots.
if this value is 0.0, then use RUBY_GC_HEAP_GROWTH_FACTOR directly.
Introduced in Ruby 2.4, default: 0.65, minimum:
.Li RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO,
maximum:
.Li RUBY_GC_HEAP_FREE_SLOTS_MAX_RATIO
.Pp
.It Ev RUBY_GC_OLDMALLOC_LIMIT
The initial limit of old generation allocation from malloc,
a full GC will start when this limit is reached.
Introduced in Ruby 2.1, default: 16MB
.Pp
.It Ev RUBY_GC_OLDMALLOC_LIMIT_MAX
The maximum limit of old generation allocation from malloc before a
full GC starts.
Prevents excessive malloc growth due to RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR.
Introduced in Ruby 2.1, default: 128MB
.Pp
.It Ev RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR
Increases the limit of old generation malloc allocation, reducing full
GC frequency but increasing malloc growth until RUBY_GC_OLDMALLOC_LIMIT_MAX
is reached.
Introduced in Ruby 2.1, default: 1.2, minimum: 1.0 (no growth)
.Pp
.It Ev RUBY_SHARED_FIBER_POOL_FREE_STACKS
Frees stacks of pooled fibers, if set to 1.
Do not free the stacks if set to 0.
Introduced in Ruby 2.7, default: 1 (no growth)
.Pp
.El
.Sh STACK SIZE ENVIRONMENT
Stack size environment variables are implementation-dependent and
subject to change with different versions of Ruby.  The VM stack is used
for pure-Ruby code and managed by the virtual machine.  Machine stack is
used by the operating system and its usage is dependent on C extensions
as well as C compiler options.  Using lower values for these may allow
applications to keep more Fibers or Threads running; but increases the
chance of SystemStackError exceptions and segmentation faults (SIGSEGV).
These environment variables are available since Ruby 2.0.0.
All values are specified in bytes.
.Pp
.Bl -hang -compact -width "RUBY_THREAD_MACHINE_STACK_SIZE"
.It Ev RUBY_THREAD_VM_STACK_SIZE
VM stack size used at thread creation.
default: 524288 (32-bit CPU) or 1048575 (64-bit)
.Pp
.It Ev RUBY_THREAD_MACHINE_STACK_SIZE
Machine stack size used at thread creation.
default: 524288 or 1048575
.Pp
.It Ev RUBY_FIBER_VM_STACK_SIZE
VM stack size used at fiber creation.
default: 65536 or 131072
.Pp
.It Ev RUBY_FIBER_MACHINE_STACK_SIZE
Machine stack size used at fiber creation.
default: 262144 or 524288
.Pp
.El
.Sh CRASH REPORT ENVIRONMENT
.Pp
.Bl -tag -compact -width "RUBY_CRASH_REPORT"
.It Ev RUBY_CRASH_REPORT
The template of path name to save crash report.
default: none
.El
.Ss Naming crash report files
The template can contain
.Li \fB%\fP
specifiers which are substituted by the following values when a crash
report file is created:
.Pp
.Bl -hang -compact -width "%NNN"
.It Li \fB%%\fP
A single
.Li \fB%\fP
character.
.It Li \fB%e\fP
Basename of executable.
.It Li \fB%E\fP
Pathname of executable,
with slashes (\fB/\fP) replaced by exclamation marks (\fB!\fP).
.It Li \fB%f\fP
Basename of the program name,
.Li "$0" .
.It Li \fB%F\fP
Pathname of the program name,
.Li "$0",
with slashes (\fB/\fP) replaced by exclamation marks (\fB!\fP).
.It Li \fB%p\fP
PID of dumped process.
.It Li \fB%t\fP
Time of dump, expressed as seconds since the
Epoch, 1970-01-01 00:00:00 +0000 (UTC).
.It Li \fB%NNN\fP
A character code in octal.
.El
.Pp
A single
.Li \fB%\fP
at the end of the template is dropped from the core filename, as is
the combination of a
.Li \fB%\fP
followed by any character other than those listed above.  All other
characters in the template become a literal part of the core filename.
The template may include \(aq/\(aq characters, which are interpreted
as delimiters for directory names.
.Ss Piping crash reports to a program
If the first character of this file is a pipe symbol (\fB|\fP),
then the remainder of the line is interpreted as the command-line for
a program (or script) that is to be executed.
.Pp
The pipe template is split on spaces into an argument list before the
template parameters are expanded.
.Sh MISC ENVIRONMENT
.Pp
.Bl -hang -compact -width "RUBY_TCP_NO_FAST_FALLBACK"
.It Ev RUBY_TCP_NO_FAST_FALLBACK
If set to
.Li 1 ,
disables the fast fallback feature by default in TCPSocket.new and Socket.tcp.
When set to
.Li 0
or left unset, the fast fallback feature is enabled.
Introduced in Ruby 3.4, default: unset.
.Sh SEE ALSO
.Bl -hang -compact -width "https://www.ruby-toolbox.com/"
.It Lk https://www.ruby-lang.org/
The official web site.
.It Lk https://www.ruby-toolbox.com/
Comprehensive catalog of Ruby libraries.
.El
.Pp
.Sh REPORTING BUGS
.Bl -bullet
.It
Security vulnerabilities should be reported via an email to
.Mt security@ruby-lang.org .
Reported problems will be published after being fixed.
.Pp
.It
Other bugs and feature requests can be reported via the
Ruby Issue Tracking System
.Pq Lk https://bugs.ruby-lang.org/ .
Do not report security vulnerabilities
via this system because it publishes the vulnerabilities immediately.
.El
.Sh AUTHORS
Ruby is designed and implemented by
.An Yukihiro Matsumoto Aq matz@netlab.jp .
.Pp
See
.Aq Lk https://github.com/ruby/ruby/graphs/contributors
for contributors to Ruby.
PK)J[#��/�� share/man/man1/bundle-platform.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-PLATFORM" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-platform\fR \- Displays platform compatibility information
.SH "SYNOPSIS"
\fBbundle platform\fR [\-\-ruby]
.SH "DESCRIPTION"
\fBplatform\fR displays information from your Gemfile, Gemfile\.lock, and Ruby VM about your platform\.
.P
For instance, using this Gemfile(5):
.IP "" 4
.nf
source "https://rubygems\.org"

ruby "3\.1\.2"

gem "rack"
.fi
.IP "" 0
.P
If you run \fBbundle platform\fR on Ruby 3\.1\.2, it displays the following output:
.IP "" 4
.nf
Your platform is: x86_64\-linux

Your app has gems that work on these platforms:
* arm64\-darwin\-21
* ruby
* x64\-mingw\-ucrt
* x86_64\-linux

Your Gemfile specifies a Ruby version requirement:
* ruby 3\.1\.2

Your current platform satisfies the Ruby version requirement\.
.fi
.IP "" 0
.P
\fBplatform\fR lists all the platforms in your \fBGemfile\.lock\fR as well as the \fBruby\fR directive if applicable from your Gemfile(5)\. It also lets you know if the \fBruby\fR directive requirement has been met\. If \fBruby\fR directive doesn't match the running Ruby VM, it tells you what part does not\.
.SH "OPTIONS"
.TP
\fB\-\-ruby\fR
It will display the ruby directive information, so you don't have to parse it from the Gemfile(5)\.
.SH "SEE ALSO"
.IP "\(bu" 4
bundle\-lock(1) \fIbundle\-lock\.1\.html\fR
.IP "" 0

PK)J[nu#ZDDshare/man/man1/bundle-remove.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-REMOVE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-remove\fR \- Removes gems from the Gemfile
.SH "SYNOPSIS"
\fBbundle remove [GEM [GEM \|\.\|\.\|\.]] [\-\-install]\fR
.SH "DESCRIPTION"
Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid\. If a gem cannot be removed, a warning is printed\. If a gem is already absent from the Gemfile, and error is raised\.
.SH "OPTIONS"
.TP
\fB\-\-install\fR
Runs \fBbundle install\fR after the given gems have been removed from the Gemfile, which ensures that both the lockfile and the installed gems on disk are also updated to remove the given gem(s)\.
.P
Example:
.P
bundle remove rails
.P
bundle remove rails rack
.P
bundle remove rails rack \-\-install
PK)J[0���share/man/man1/erb.1nu�[���.\"Ruby is copyrighted by Yukihiro Matsumoto <matz@netlab.jp>.
.Dd December 16, 2018
.Dt ERB \&1 "Ruby Programmer's Reference Guide"
.Os UNIX
.Sh NAME
.Nm erb
.Nd Ruby Templating
.Sh SYNOPSIS
.Nm
.Op Fl -version
.Op Fl UPdnvx
.Op Fl E Ar ext Ns Op Ns : Ns int
.Op Fl S Ar level
.Op Fl T Ar mode
.Op Fl r Ar library
.Op Fl -
.Op file ...
.Pp
.Sh DESCRIPTION
.Nm
is a command line front-end for
.Li "ERB"
library, which is an implementation of eRuby.
.Pp
ERB provides an easy to use but powerful templating system for Ruby.
Using ERB, actual Ruby code can be added to any plain text document for the
purposes of generating document information details and/or flow control.
.Pp
.Nm
is a part of
.Nm Ruby .
.Pp
.Sh OPTIONS
.Bl -tag -width "1234567890123" -compact
.Pp
.It Fl -version
Prints the version of
.Nm .
.Pp
.It Fl E Ar external Ns Op : Ns Ar internal
.It Fl -encoding Ar external Ns Op : Ns Ar internal
Specifies the default value(s) for external encodings and internal encoding. Values should be separated with colon (:).
.Pp
You can omit the one for internal encodings, then the value
.Pf ( Li "Encoding.default_internal" ) will be nil.
.Pp
.It Fl P
Disables ruby code evaluation for lines beginning with
.Li "%" .
.Pp
.It Fl S Ar level
Specifies the safe level in which eRuby script will run.
.Pp
.It Fl T Ar mode
Specifies trim mode (default 0).
.Ar mode
can be one of
.Bl -hang -offset indent
.It Sy 0
EOL remains after the embedded ruby script is evaluated.
.Pp
.It Sy 1
EOL is removed if the line ends with
.Li "%>" .
.Pp
.It Sy 2
EOL is removed if the line starts with
.Li "<%"
and ends with
.Li "%>" .
.Pp
.It Sy -
EOL is removed if the line ends with
.Li "-%>" .
And leading whitespaces are removed if the erb directive starts with
.Li "<%-" .
.Pp
.El
.It Fl r
Load a library
.Pp
.It Fl U
can be one of
Sets the default value for internal encodings
.Pf ( Li "Encoding.default_internal" ) to UTF-8.
.Pp
.It Fl d
.It Fl -debug
Turns on debug mode.
.Li "$DEBUG"
will be set to true.
.Pp
.It Fl h
.It Fl -help
Prints a summary of the options.
.Pp
.It Fl n
Used with
.Fl x .
Prepends the line number to each line in the output.
.Pp
.It Fl v
Enables verbose mode.
.Li "$VERBOSE"
will be set to true.
.Pp
.It Fl x
Converts the eRuby script into Ruby script and prints it without line numbers.
.Pp
.El
.Pp
.Sh EXAMPLES
Here is an eRuby script
.Bd -literal -offset indent
<?xml version="1.0" ?>
<% require 'prime' -%>
<erb-example>
  <calc><%= 1+1 %></calc>
  <var><%= __FILE__ %></var>
  <library><%= Prime.each(10).to_a.join(", ") %></library>
</erb-example>
.Ed
.Pp
Command
.Dl "% erb -T - example.erb"
prints
.Bd -literal -offset indent
<?xml version="1.0" ?>
<erb-example>
  <calc>2</calc>
  <var>example.erb</var>
  <library>2, 3, 5, 7</library>
</erb-example>
.Ed
.Pp
.Sh SEE ALSO
.Xr ruby 1 .
.Pp
And see
.Xr ri 1
documentation for
.Li "ERB"
class.
.Pp
.Sh REPORTING BUGS
.Bl -bullet
.It
Security vulnerabilities should be reported via an email to
.Mt security@ruby-lang.org .
Reported problems will be published after being fixed.
.Pp
.It
Other bugs and feature requests can be reported via the
Ruby Issue Tracking System
.Pq Lk https://bugs.ruby-lang.org/ .
Do not report security vulnerabilities
via this system because it publishes the vulnerabilities immediately.
.El
.Sh AUTHORS
Written by Masatoshi SEKI.
PK)J[�����share/man/man1/bundle-inject.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INJECT" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
.SH "SYNOPSIS"
\fBbundle inject\fR [GEM] [VERSION] [\-\-source=SOURCE] [\-\-group=GROUP]
.SH "DESCRIPTION"
Adds the named gem(s) with their version requirements to the resolved [\fBGemfile(5)\fR][Gemfile(5)]\.
.P
This command will add the gem to both your [\fBGemfile(5)\fR][Gemfile(5)] and Gemfile\.lock if it isn't listed yet\.
.P
Example:
.IP "" 4
.nf
bundle install
bundle inject 'rack' '> 0'
.fi
.IP "" 0
.P
This will inject the 'rack' gem with a version greater than 0 in your [\fBGemfile(5)\fR][Gemfile(5)] and Gemfile\.lock\.
.P
The \fBbundle inject\fR command was deprecated in Bundler 2\.1 and will be removed in Bundler 3\.0\.
.SH "OPTIONS"
.TP
\fB\-\-source=SOURCE\fR
Install gem from the given source\.
.TP
\fB\-\-group=GROUP\fR
Install gem into a bundler group\.

PK)J[�s	vv share/man/man1/bundle-pristine.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-PRISTINE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
.SH "SYNOPSIS"
\fBbundle pristine\fR
.SH "DESCRIPTION"
\fBpristine\fR restores the installed gems in the bundle to their pristine condition using the local gem cache from RubyGems\. For git gems, a forced checkout will be performed\.
.P
For further explanation, \fBbundle pristine\fR ignores unpacked files on disk\. In other words, this command utilizes the local \fB\.gem\fR cache or the gem's git repository as if one were installing from scratch\.
.P
Note: the Bundler gem cannot be restored to its original state with \fBpristine\fR\. One also cannot use \fBbundle pristine\fR on gems with a 'path' option in the Gemfile, because bundler has no original copy it can restore from\.
.P
When is it practical to use \fBbundle pristine\fR?
.P
It comes in handy when a developer is debugging a gem\. \fBbundle pristine\fR is a great way to get rid of experimental changes to a gem that one may not want\.
.P
Why use \fBbundle pristine\fR over \fBgem pristine \-\-all\fR?
.P
Both commands are very similar\. For context: \fBbundle pristine\fR, without arguments, cleans all gems from the lockfile\. Meanwhile, \fBgem pristine \-\-all\fR cleans all installed gems for that Ruby version\.
.P
If a developer forgets which gems in their project they might have been debugging, the Rubygems \fBgem pristine [GEMNAME]\fR command may be inconvenient\. One can avoid waiting for \fBgem pristine \-\-all\fR, and instead run \fBbundle pristine\fR\.
PK)J[.�
F�� share/man/man1/bundle-binstubs.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-BINSTUBS" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
.SH "SYNOPSIS"
\fBbundle binstubs\fR \fIGEM_NAME\fR [\-\-force] [\-\-path PATH] [\-\-standalone] [\-\-all\-platforms]
.SH "DESCRIPTION"
Binstubs are scripts that wrap around executables\. Bundler creates a small Ruby file (a binstub) that loads Bundler, runs the command, and puts it into \fBbin/\fR\. Binstubs are a shortcut\-or alternative\- to always using \fBbundle exec\fR\. This gives you a file that can be run directly, and one that will always run the correct gem version used by the application\.
.P
For example, if you run \fBbundle binstubs rspec\-core\fR, Bundler will create the file \fBbin/rspec\fR\. That file will contain enough code to load Bundler, tell it to load the bundled gems, and then run rspec\.
.P
This command generates binstubs for executables in \fBGEM_NAME\fR\. Binstubs are put into \fBbin\fR, or the \fB\-\-path\fR directory if one has been set\. Calling binstubs with [GEM [GEM]] will create binstubs for all given gems\.
.SH "OPTIONS"
.TP
\fB\-\-force\fR
Overwrite existing binstubs if they exist\.
.TP
\fB\-\-path[=PATH]\fR
The location to install the specified binstubs to\. This defaults to \fBbin\fR\.
.TP
\fB\-\-standalone\fR
Makes binstubs that can work without depending on Rubygems or Bundler at runtime\.
.TP
\fB\-\-shebang=SHEBANG\fR
Specify a different shebang executable name than the default (default 'ruby')
.TP
\fB\-\-all\fR
Create binstubs for all gems in the bundle\.
.TP
\fB\-\-all\-platforms\fR
Install binstubs for all platforms\.

PK)J[��TTshare/man/man1/bundle-check.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CHECK" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
.SH "SYNOPSIS"
\fBbundle check\fR [\-\-dry\-run] [\-\-gemfile=FILE] [\-\-path=PATH]
.SH "DESCRIPTION"
\fBcheck\fR searches the local machine for each of the gems requested in the Gemfile\. If all gems are found, Bundler prints a success message and exits with a status of 0\.
.P
If not, the first missing gem is listed and Bundler exits status 1\.
.P
If the lockfile needs to be updated then it will be resolved using the gems installed on the local machine, if they satisfy the requirements\.
.SH "OPTIONS"
.TP
\fB\-\-dry\-run\fR
Locks the [\fBGemfile(5)\fR][Gemfile(5)] before running the command\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of the [\fBGemfile(5)\fR][Gemfile(5)]\.
.TP
\fB\-\-path=PATH\fR
Specify a different path than the system default (\fB$BUNDLE_PATH\fR or \fB$GEM_HOME\fR)\. Bundler will remember this value for future installs on this machine\.

PK)J[X��fnnshare/man/man1/bundle-fund.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-FUND" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-fund\fR \- Lists information about gems seeking funding assistance
.SH "SYNOPSIS"
\fBbundle fund\fR [\fIOPTIONS\fR]
.SH "DESCRIPTION"
\fBbundle fund\fR lists information about gems seeking funding assistance\.
.SH "OPTIONS"
.TP
\fB\-\-group=<list>\fR, \fB\-g=<list>\fR
Fetch funding information for a specific group\.
.SH "EXAMPLES"
.nf
# Lists funding information for all gems
bundle fund

# Lists funding information for a specific group
bundle fund \-\-group=security
.fi

PK)J[�� YTYTshare/man/man1/bundle-config.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CONFIG" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-config\fR \- Set bundler configuration options
.SH "SYNOPSIS"
\fBbundle config\fR list
.br
\fBbundle config\fR [get] NAME
.br
\fBbundle config\fR [set] NAME VALUE
.br
\fBbundle config\fR unset NAME
.SH "DESCRIPTION"
This command allows you to interact with Bundler's configuration system\.
.P
Bundler loads configuration settings in this order:
.IP "1." 4
Local config (\fB<project_root>/\.bundle/config\fR or \fB$BUNDLE_APP_CONFIG/config\fR)
.IP "2." 4
Environmental variables (\fBENV\fR)
.IP "3." 4
Global config (\fB~/\.bundle/config\fR)
.IP "4." 4
Bundler default config
.IP "" 0
.P
Executing \fBbundle config list\fR will print a list of all bundler configuration for the current bundle, and where that configuration was set\.
.P
Executing \fBbundle config get <name>\fR will print the value of that configuration setting, and where it was set\.
.P
Executing \fBbundle config set <name> <value>\fR defaults to setting \fBlocal\fR configuration if executing from within a local application, otherwise it will set \fBglobal\fR configuration\. See \fB\-\-local\fR and \fB\-\-global\fR options below\.
.P
Executing \fBbundle config set \-\-local <name> <value>\fR will set that configuration in the directory for the local application\. The configuration will be stored in \fB<project_root>/\.bundle/config\fR\. If \fBBUNDLE_APP_CONFIG\fR is set, the configuration will be stored in \fB$BUNDLE_APP_CONFIG/config\fR\.
.P
Executing \fBbundle config set \-\-global <name> <value>\fR will set that configuration to the value specified for all bundles executed as the current user\. The configuration will be stored in \fB~/\.bundle/config\fR\. If \fIname\fR already is set, \fIname\fR will be overridden and user will be warned\.
.P
Executing \fBbundle config unset <name>\fR will delete the configuration in both local and global sources\.
.P
Executing \fBbundle config unset \-\-global <name>\fR will delete the configuration only from the user configuration\.
.P
Executing \fBbundle config unset \-\-local <name>\fR will delete the configuration only from the local application\.
.P
Executing bundle with the \fBBUNDLE_IGNORE_CONFIG\fR environment variable set will cause it to ignore all configuration\.
.SH "REMEMBERING OPTIONS"
Flags passed to \fBbundle install\fR or the Bundler runtime, such as \fB\-\-path foo\fR or \fB\-\-without production\fR, are remembered between commands and saved to your local application's configuration (normally, \fB\./\.bundle/config\fR)\.
.P
However, this will be changed in bundler 3, so it's better not to rely on this behavior\. If these options must be remembered, it's better to set them using \fBbundle config\fR (e\.g\., \fBbundle config set \-\-local path foo\fR)\.
.P
The options that can be configured are:
.TP
\fBbin\fR
Creates a directory (defaults to \fB~/bin\fR) and place any executables from the gem there\. These executables run in Bundler's context\. If used, you might add this directory to your environment's \fBPATH\fR variable\. For instance, if the \fBrails\fR gem comes with a \fBrails\fR executable, this flag will create a \fBbin/rails\fR executable that ensures that all referred dependencies will be resolved using the bundled gems\.
.TP
\fBdeployment\fR
In deployment mode, Bundler will 'roll\-out' the bundle for \fBproduction\fR use\. Please check carefully if you want to have this option enabled in \fBdevelopment\fR or \fBtest\fR environments\.
.TP
\fBonly\fR
A space\-separated list of groups to install only gems of the specified groups\. Please check carefully if you want to install also gems without a group, cause they get put inside \fBdefault\fR group\. For example \fBonly test:default\fR will install all gems specified in test group and without one\.
.TP
\fBpath\fR
The location to install the specified gems to\. This defaults to Rubygems' setting\. Bundler shares this location with Rubygems, \fBgem install \|\.\|\.\|\.\fR will have gem installed there, too\. Therefore, gems installed without a \fB\-\-path \|\.\|\.\|\.\fR setting will show up by calling \fBgem list\fR\. Accordingly, gems installed to other locations will not get listed\.
.TP
\fBwithout\fR
A space\-separated or \fB:\fR\-separated list of groups referencing gems to skip during installation\.
.TP
\fBwith\fR
A space\-separated or \fB:\fR\-separated list of \fBoptional\fR groups referencing gems to include during installation\.
.SH "BUILD OPTIONS"
You can use \fBbundle config\fR to give Bundler the flags to pass to the gem installer every time bundler tries to install a particular gem\.
.P
A very common example, the \fBmysql\fR gem, requires Snow Leopard users to pass configuration flags to \fBgem install\fR to specify where to find the \fBmysql_config\fR executable\.
.IP "" 4
.nf
gem install mysql \-\- \-\-with\-mysql\-config=/usr/local/mysql/bin/mysql_config
.fi
.IP "" 0
.P
Since the specific location of that executable can change from machine to machine, you can specify these flags on a per\-machine basis\.
.IP "" 4
.nf
bundle config set \-\-global build\.mysql \-\-with\-mysql\-config=/usr/local/mysql/bin/mysql_config
.fi
.IP "" 0
.P
After running this command, every time bundler needs to install the \fBmysql\fR gem, it will pass along the flags you specified\.
.SH "CONFIGURATION KEYS"
Configuration keys in bundler have two forms: the canonical form and the environment variable form\.
.P
For instance, passing the \fB\-\-without\fR flag to bundle install(1) \fIbundle\-install\.1\.html\fR prevents Bundler from installing certain groups specified in the Gemfile(5)\. Bundler persists this value in \fBapp/\.bundle/config\fR so that calls to \fBBundler\.setup\fR do not try to find gems from the \fBGemfile\fR that you didn't install\. Additionally, subsequent calls to bundle install(1) \fIbundle\-install\.1\.html\fR remember this setting and skip those groups\.
.P
The canonical form of this configuration is \fB"without"\fR\. To convert the canonical form to the environment variable form, capitalize it, and prepend \fBBUNDLE_\fR\. The environment variable form of \fB"without"\fR is \fBBUNDLE_WITHOUT\fR\.
.P
Any periods in the configuration keys must be replaced with two underscores when setting it via environment variables\. The configuration key \fBlocal\.rack\fR becomes the environment variable \fBBUNDLE_LOCAL__RACK\fR\.
.SH "LIST OF AVAILABLE KEYS"
The following is a list of all configuration keys and their purpose\. You can learn more about their operation in bundle install(1) \fIbundle\-install\.1\.html\fR\.
.IP "\(bu" 4
\fBallow_offline_install\fR (\fBBUNDLE_ALLOW_OFFLINE_INSTALL\fR): Allow Bundler to use cached data when installing without network access\.
.IP "\(bu" 4
\fBauto_clean_without_path\fR (\fBBUNDLE_AUTO_CLEAN_WITHOUT_PATH\fR): Automatically run \fBbundle clean\fR after installing when an explicit \fBpath\fR has not been set and Bundler is not installing into the system gems\.
.IP "\(bu" 4
\fBauto_install\fR (\fBBUNDLE_AUTO_INSTALL\fR): Automatically run \fBbundle install\fR when gems are missing\.
.IP "\(bu" 4
\fBbin\fR (\fBBUNDLE_BIN\fR): Install executables from gems in the bundle to the specified directory\. Defaults to \fBfalse\fR\.
.IP "\(bu" 4
\fBcache_all\fR (\fBBUNDLE_CACHE_ALL\fR): Cache all gems, including path and git gems\. This needs to be explicitly configured on bundler 1 and bundler 2, but will be the default on bundler 3\.
.IP "\(bu" 4
\fBcache_all_platforms\fR (\fBBUNDLE_CACHE_ALL_PLATFORMS\fR): Cache gems for all platforms\.
.IP "\(bu" 4
\fBcache_path\fR (\fBBUNDLE_CACHE_PATH\fR): The directory that bundler will place cached gems in when running \fBbundle package\fR, and that bundler will look in when installing gems\. Defaults to \fBvendor/cache\fR\.
.IP "\(bu" 4
\fBclean\fR (\fBBUNDLE_CLEAN\fR): Whether Bundler should run \fBbundle clean\fR automatically after \fBbundle install\fR\.
.IP "\(bu" 4
\fBconsole\fR (\fBBUNDLE_CONSOLE\fR): The console that \fBbundle console\fR starts\. Defaults to \fBirb\fR\.
.IP "\(bu" 4
\fBdefault_install_uses_path\fR (\fBBUNDLE_DEFAULT_INSTALL_USES_PATH\fR): Whether a \fBbundle install\fR without an explicit \fB\-\-path\fR argument defaults to installing gems in \fB\.bundle\fR\.
.IP "\(bu" 4
\fBdeployment\fR (\fBBUNDLE_DEPLOYMENT\fR): Disallow changes to the \fBGemfile\fR\. When the \fBGemfile\fR is changed and the lockfile has not been updated, running Bundler commands will be blocked\.
.IP "\(bu" 4
\fBdisable_checksum_validation\fR (\fBBUNDLE_DISABLE_CHECKSUM_VALIDATION\fR): Allow installing gems even if they do not match the checksum provided by RubyGems\.
.IP "\(bu" 4
\fBdisable_exec_load\fR (\fBBUNDLE_DISABLE_EXEC_LOAD\fR): Stop Bundler from using \fBload\fR to launch an executable in\-process in \fBbundle exec\fR\.
.IP "\(bu" 4
\fBdisable_local_branch_check\fR (\fBBUNDLE_DISABLE_LOCAL_BRANCH_CHECK\fR): Allow Bundler to use a local git override without a branch specified in the Gemfile\.
.IP "\(bu" 4
\fBdisable_local_revision_check\fR (\fBBUNDLE_DISABLE_LOCAL_REVISION_CHECK\fR): Allow Bundler to use a local git override without checking if the revision present in the lockfile is present in the repository\.
.IP "\(bu" 4
\fBdisable_shared_gems\fR (\fBBUNDLE_DISABLE_SHARED_GEMS\fR): Stop Bundler from accessing gems installed to RubyGems' normal location\.
.IP "\(bu" 4
\fBdisable_version_check\fR (\fBBUNDLE_DISABLE_VERSION_CHECK\fR): Stop Bundler from checking if a newer Bundler version is available on rubygems\.org\.
.IP "\(bu" 4
\fBforce_ruby_platform\fR (\fBBUNDLE_FORCE_RUBY_PLATFORM\fR): Ignore the current machine's platform and install only \fBruby\fR platform gems\. As a result, gems with native extensions will be compiled from source\.
.IP "\(bu" 4
\fBfrozen\fR (\fBBUNDLE_FROZEN\fR): Disallow changes to the \fBGemfile\fR\. When the \fBGemfile\fR is changed and the lockfile has not been updated, running Bundler commands will be blocked\. Defaults to \fBtrue\fR when \fB\-\-deployment\fR is used\.
.IP "\(bu" 4
\fBgem\.github_username\fR (\fBBUNDLE_GEM__GITHUB_USERNAME\fR): Sets a GitHub username or organization to be used in \fBREADME\fR file when you create a new gem via \fBbundle gem\fR command\. It can be overridden by passing an explicit \fB\-\-github\-username\fR flag to \fBbundle gem\fR\.
.IP "\(bu" 4
\fBgem\.push_key\fR (\fBBUNDLE_GEM__PUSH_KEY\fR): Sets the \fB\-\-key\fR parameter for \fBgem push\fR when using the \fBrake release\fR command with a private gemstash server\.
.IP "\(bu" 4
\fBgemfile\fR (\fBBUNDLE_GEMFILE\fR): The name of the file that bundler should use as the \fBGemfile\fR\. This location of this file also sets the root of the project, which is used to resolve relative paths in the \fBGemfile\fR, among other things\. By default, bundler will search up from the current working directory until it finds a \fBGemfile\fR\.
.IP "\(bu" 4
\fBglobal_gem_cache\fR (\fBBUNDLE_GLOBAL_GEM_CACHE\fR): Whether Bundler should cache all gems globally, rather than locally to the installing Ruby installation\.
.IP "\(bu" 4
\fBignore_funding_requests\fR (\fBBUNDLE_IGNORE_FUNDING_REQUESTS\fR): When set, no funding requests will be printed\.
.IP "\(bu" 4
\fBignore_messages\fR (\fBBUNDLE_IGNORE_MESSAGES\fR): When set, no post install messages will be printed\. To silence a single gem, use dot notation like \fBignore_messages\.httparty true\fR\.
.IP "\(bu" 4
\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR): Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
.IP "\(bu" 4
\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to the number of available processors\.
.IP "\(bu" 4
\fBlockfile_checksums\fR (\fBBUNDLE_LOCKFILE_CHECKSUMS\fR): Whether Bundler should include a checksums section in new lockfiles, to protect from compromised gem sources\.
.IP "\(bu" 4
\fBno_install\fR (\fBBUNDLE_NO_INSTALL\fR): Whether \fBbundle package\fR should skip installing gems\.
.IP "\(bu" 4
\fBno_prune\fR (\fBBUNDLE_NO_PRUNE\fR): Whether Bundler should leave outdated gems unpruned when caching\.
.IP "\(bu" 4
\fBonly\fR (\fBBUNDLE_ONLY\fR): A space\-separated list of groups to install only gems of the specified groups\.
.IP "\(bu" 4
\fBpath\fR (\fBBUNDLE_PATH\fR): The location on disk where all gems in your bundle will be located regardless of \fB$GEM_HOME\fR or \fB$GEM_PATH\fR values\. Bundle gems not found in this location will be installed by \fBbundle install\fR\. Defaults to \fBGem\.dir\fR\. When \-\-deployment is used, defaults to vendor/bundle\.
.IP "\(bu" 4
\fBpath\.system\fR (\fBBUNDLE_PATH__SYSTEM\fR): Whether Bundler will install gems into the default system path (\fBGem\.dir\fR)\.
.IP "\(bu" 4
\fBpath_relative_to_cwd\fR (\fBBUNDLE_PATH_RELATIVE_TO_CWD\fR) Makes \fB\-\-path\fR relative to the CWD instead of the \fBGemfile\fR\.
.IP "\(bu" 4
\fBplugins\fR (\fBBUNDLE_PLUGINS\fR): Enable Bundler's experimental plugin system\.
.IP "\(bu" 4
\fBprefer_patch\fR (BUNDLE_PREFER_PATCH): Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\.
.IP "\(bu" 4
\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR): Print only version number from \fBbundler \-\-version\fR\.
.IP "\(bu" 4
\fBredirect\fR (\fBBUNDLE_REDIRECT\fR): The number of redirects allowed for network requests\. Defaults to \fB5\fR\.
.IP "\(bu" 4
\fBretry\fR (\fBBUNDLE_RETRY\fR): The number of times to retry failed network requests\. Defaults to \fB3\fR\.
.IP "\(bu" 4
\fBsetup_makes_kernel_gem_public\fR (\fBBUNDLE_SETUP_MAKES_KERNEL_GEM_PUBLIC\fR): Have \fBBundler\.setup\fR make the \fBKernel#gem\fR method public, even though RubyGems declares it as private\.
.IP "\(bu" 4
\fBshebang\fR (\fBBUNDLE_SHEBANG\fR): The program name that should be invoked for generated binstubs\. Defaults to the ruby install name used to generate the binstub\.
.IP "\(bu" 4
\fBsilence_deprecations\fR (\fBBUNDLE_SILENCE_DEPRECATIONS\fR): Whether Bundler should silence deprecation warnings for behavior that will be changed in the next major version\.
.IP "\(bu" 4
\fBsilence_root_warning\fR (\fBBUNDLE_SILENCE_ROOT_WARNING\fR): Silence the warning Bundler prints when installing gems as root\.
.IP "\(bu" 4
\fBssl_ca_cert\fR (\fBBUNDLE_SSL_CA_CERT\fR): Path to a designated CA certificate file or folder containing multiple certificates for trusted CAs in PEM format\.
.IP "\(bu" 4
\fBssl_client_cert\fR (\fBBUNDLE_SSL_CLIENT_CERT\fR): Path to a designated file containing a X\.509 client certificate and key in PEM format\.
.IP "\(bu" 4
\fBssl_verify_mode\fR (\fBBUNDLE_SSL_VERIFY_MODE\fR): The SSL verification mode Bundler uses when making HTTPS requests\. Defaults to verify peer\.
.IP "\(bu" 4
\fBsystem_bindir\fR (\fBBUNDLE_SYSTEM_BINDIR\fR): The location where RubyGems installs binstubs\. Defaults to \fBGem\.bindir\fR\.
.IP "\(bu" 4
\fBtimeout\fR (\fBBUNDLE_TIMEOUT\fR): The seconds allowed before timing out for network requests\. Defaults to \fB10\fR\.
.IP "\(bu" 4
\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
.IP "\(bu" 4
\fBuser_agent\fR (\fBBUNDLE_USER_AGENT\fR): The custom user agent fragment Bundler includes in API requests\.
.IP "\(bu" 4
\fBversion\fR (\fBBUNDLE_VERSION\fR): The version of Bundler to use when running under Bundler environment\. Defaults to \fBlockfile\fR\. You can also specify \fBsystem\fR or \fBx\.y\.z\fR\. \fBlockfile\fR will use the Bundler version specified in the \fBGemfile\.lock\fR, \fBsystem\fR will use the system version of Bundler, and \fBx\.y\.z\fR will use the specified version of Bundler\.
.IP "\(bu" 4
\fBwith\fR (\fBBUNDLE_WITH\fR): A space\-separated or \fB:\fR\-separated list of groups whose gems bundler should install\.
.IP "\(bu" 4
\fBwithout\fR (\fBBUNDLE_WITHOUT\fR): A space\-separated or \fB:\fR\-separated list of groups whose gems bundler should not install\.
.IP "" 0
.SH "LOCAL GIT REPOS"
Bundler also allows you to work against a git repository locally instead of using the remote version\. This can be achieved by setting up a local override:
.IP "" 4
.nf
bundle config set \-\-local local\.GEM_NAME /path/to/local/git/repository
.fi
.IP "" 0
.P
For example, in order to use a local Rack repository, a developer could call:
.IP "" 4
.nf
bundle config set \-\-local local\.rack ~/Work/git/rack
.fi
.IP "" 0
.P
Now instead of checking out the remote git repository, the local override will be used\. Similar to a path source, every time the local git repository change, changes will be automatically picked up by Bundler\. This means a commit in the local git repo will update the revision in the \fBGemfile\.lock\fR to the local git repo revision\. This requires the same attention as git submodules\. Before pushing to the remote, you need to ensure the local override was pushed, otherwise you may point to a commit that only exists in your local machine\. You'll also need to CGI escape your usernames and passwords as well\.
.P
Bundler does many checks to ensure a developer won't work with invalid references\. Particularly, we force a developer to specify a branch in the \fBGemfile\fR in order to use this feature\. If the branch specified in the \fBGemfile\fR and the current branch in the local git repository do not match, Bundler will abort\. This ensures that a developer is always working against the correct branches, and prevents accidental locking to a different branch\.
.P
Finally, Bundler also ensures that the current revision in the \fBGemfile\.lock\fR exists in the local git repository\. By doing this, Bundler forces you to fetch the latest changes in the remotes\.
.SH "MIRRORS OF GEM SOURCES"
Bundler supports overriding gem sources with mirrors\. This allows you to configure rubygems\.org as the gem source in your Gemfile while still using your mirror to fetch gems\.
.IP "" 4
.nf
bundle config set \-\-global mirror\.SOURCE_URL MIRROR_URL
.fi
.IP "" 0
.P
For example, to use a mirror of https://rubygems\.org hosted at https://example\.org:
.IP "" 4
.nf
bundle config set \-\-global mirror\.https://rubygems\.org https://example\.org
.fi
.IP "" 0
.P
Each mirror also provides a fallback timeout setting\. If the mirror does not respond within the fallback timeout, Bundler will try to use the original server instead of the mirror\.
.IP "" 4
.nf
bundle config set \-\-global mirror\.SOURCE_URL\.fallback_timeout TIMEOUT
.fi
.IP "" 0
.P
For example, to fall back to rubygems\.org after 3 seconds:
.IP "" 4
.nf
bundle config set \-\-global mirror\.https://rubygems\.org\.fallback_timeout 3
.fi
.IP "" 0
.P
The default fallback timeout is 0\.1 seconds, but the setting can currently only accept whole seconds (for example, 1, 15, or 30)\.
.SH "CREDENTIALS FOR GEM SOURCES"
Bundler allows you to configure credentials for any gem source, which allows you to avoid putting secrets into your Gemfile\.
.IP "" 4
.nf
bundle config set \-\-global SOURCE_HOSTNAME USERNAME:PASSWORD
.fi
.IP "" 0
.P
For example, to save the credentials of user \fBclaudette\fR for the gem source at \fBgems\.longerous\.com\fR, you would run:
.IP "" 4
.nf
bundle config set \-\-global gems\.longerous\.com claudette:s00pers3krit
.fi
.IP "" 0
.P
Or you can set the credentials as an environment variable like this:
.IP "" 4
.nf
export BUNDLE_GEMS__LONGEROUS__COM="claudette:s00pers3krit"
.fi
.IP "" 0
.P
For gems with a git source with HTTP(S) URL you can specify credentials like so:
.IP "" 4
.nf
bundle config set \-\-global https://github\.com/rubygems/rubygems\.git username:password
.fi
.IP "" 0
.P
Or you can set the credentials as an environment variable like so:
.IP "" 4
.nf
export BUNDLE_GITHUB__COM=username:password
.fi
.IP "" 0
.P
This is especially useful for private repositories on hosts such as GitHub, where you can use personal OAuth tokens:
.IP "" 4
.nf
export BUNDLE_GITHUB__COM=abcd0123generatedtoken:x\-oauth\-basic
.fi
.IP "" 0
.P
Note that any configured credentials will be redacted by informative commands such as \fBbundle config list\fR or \fBbundle config get\fR, unless you use the \fB\-\-parseable\fR flag\. This is to avoid unintentionally leaking credentials when copy\-pasting bundler output\.
.P
Also note that to guarantee a sane mapping between valid environment variable names and valid host names, bundler makes the following transformations:
.IP "\(bu" 4
Any \fB\-\fR characters in a host name are mapped to a triple underscore (\fB___\fR) in the corresponding environment variable\.
.IP "\(bu" 4
Any \fB\.\fR characters in a host name are mapped to a double underscore (\fB__\fR) in the corresponding environment variable\.
.IP "" 0
.P
This means that if you have a gem server named \fBmy\.gem\-host\.com\fR, you'll need to use the \fBBUNDLE_MY__GEM___HOST__COM\fR variable to configure credentials for it through ENV\.
.SH "CONFIGURE BUNDLER DIRECTORIES"
Bundler's home, cache and plugin directories and config file can be configured through environment variables\. The default location for Bundler's home directory is \fB~/\.bundle\fR, which all directories inherit from by default\. The following outlines the available environment variables and their default values
.IP "" 4
.nf
BUNDLE_USER_HOME : $HOME/\.bundle
BUNDLE_USER_CACHE : $BUNDLE_USER_HOME/cache
BUNDLE_USER_CONFIG : $BUNDLE_USER_HOME/config
BUNDLE_USER_PLUGIN : $BUNDLE_USER_HOME/plugin
.fi
.IP "" 0

PK)J[>��.��share/man/man1/bundle-cache.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CACHE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
.SH "SYNOPSIS"
\fBbundle cache\fR [\fIOPTIONS\fR]
.P
alias: \fBpackage\fR, \fBpack\fR
.SH "DESCRIPTION"
Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR, use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
.SH "OPTIONS"
.TP
\fB\-\-all\fR
Include all sources (including path and git)\.
.TP
\fB\-\-all\-platforms\fR
Include gems for all platforms present in the lockfile, not only the current one\.
.TP
\fB\-\-cache\-path=CACHE\-PATH\fR
Specify a different cache path than the default (vendor/cache)\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of Gemfile\.
.TP
\fB\-\-no\-install\fR
Don't install the gems, only update the cache\.
.TP
\fB\-\-no\-prune\fR
Don't remove stale gems from the cache\.
.TP
\fB\-\-path=PATH\fR
Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME)\.
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.TP
\fB\-\-frozen\fR
Do not allow the Gemfile\.lock to be updated after this bundle cache operation's install\.
.SH "GIT AND PATH GEMS"
The \fBbundle cache\fR command can also package \fB:git\fR and \fB:path\fR dependencies besides \.gem files\. This needs to be explicitly enabled via the \fB\-\-all\fR option\. Once used, the \fB\-\-all\fR option will be remembered\.
.SH "SUPPORT FOR MULTIPLE PLATFORMS"
When using gems that have different packages for different platforms, Bundler supports caching of gems for other platforms where the Gemfile has been resolved (i\.e\. present in the lockfile) in \fBvendor/cache\fR\. This needs to be enabled via the \fB\-\-all\-platforms\fR option\. This setting will be remembered in your local bundler configuration\.
.SH "REMOTE FETCHING"
By default, if you run \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR after running bundle cache(1) \fIbundle\-cache\.1\.html\fR, bundler will still connect to \fBrubygems\.org\fR to check whether a platform\-specific gem exists for any of the gems in \fBvendor/cache\fR\.
.P
For instance, consider this Gemfile(5):
.IP "" 4
.nf
source "https://rubygems\.org"

gem "nokogiri"
.fi
.IP "" 0
.P
If you run \fBbundle cache\fR under C Ruby, bundler will retrieve the version of \fBnokogiri\fR for the \fB"ruby"\fR platform\. If you deploy to JRuby and run \fBbundle install\fR, bundler is forced to check to see whether a \fB"java"\fR platformed \fBnokogiri\fR exists\.
.P
Even though the \fBnokogiri\fR gem for the Ruby platform is \fItechnically\fR acceptable on JRuby, it has a C extension that does not run on JRuby\. As a result, bundler will, by default, still connect to \fBrubygems\.org\fR to check whether it has a version of one of your gems more specific to your platform\.
.P
This problem is also not limited to the \fB"java"\fR platform\. A similar (common) problem can happen when developing on Windows and deploying to Linux, or even when developing on OSX and deploying to Linux\.
.P
If you know for sure that the gems packaged in \fBvendor/cache\fR are appropriate for the platform you are on, you can run \fBbundle install \-\-local\fR to skip checking for more appropriate gems, and use the ones in \fBvendor/cache\fR\.
.P
One way to be sure that you have the right platformed versions of all your gems is to run \fBbundle cache\fR on an identical machine and check in the gems\. For instance, you can run \fBbundle cache\fR on an identical staging box during your staging process, and check in the \fBvendor/cache\fR before deploying to production\.
.P
By default, bundle cache(1) \fIbundle\-cache\.1\.html\fR fetches and also installs the gems to the default location\. To package the dependencies to \fBvendor/cache\fR without installing them to the local install location, you can run \fBbundle cache \-\-no\-install\fR\.
.SH "HISTORY"
In Bundler 2\.1, \fBcache\fR took in the functionalities of \fBpackage\fR and now \fBpackage\fR and \fBpack\fR are aliases of \fBcache\fR\.
PK)J[v�U��share/man/man1/bundle-list.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-LIST" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-list\fR \- List all the gems in the bundle
.SH "SYNOPSIS"
\fBbundle list\fR [\-\-name\-only] [\-\-paths] [\-\-without\-group=GROUP[ GROUP\|\.\|\.\|\.]] [\-\-only\-group=GROUP[ GROUP\|\.\|\.\|\.]]
.SH "DESCRIPTION"
Prints a list of all the gems in the bundle including their version\.
.P
Example:
.P
bundle list \-\-name\-only
.P
bundle list \-\-paths
.P
bundle list \-\-without\-group test
.P
bundle list \-\-only\-group dev
.P
bundle list \-\-only\-group dev test \-\-paths
.SH "OPTIONS"
.TP
\fB\-\-name\-only\fR
Print only the name of each gem\.
.TP
\fB\-\-paths\fR
Print the path to each gem in the bundle\.
.TP
\fB\-\-without\-group=<list>\fR
A space\-separated list of groups of gems to skip during printing\.
.TP
\fB\-\-only\-group=<list>\fR
A space\-separated list of groups of gems to print\.

PK)J[��}jjshare/man/man1/bundle-version.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-VERSION" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-version\fR \- Prints Bundler version information
.SH "SYNOPSIS"
\fBbundle version\fR
.SH "DESCRIPTION"
Prints Bundler version information\.
.SH "OPTIONS"
No options\.
.SH "EXAMPLE"
Print the version of Bundler with build date and commit hash of the in the Git source\.
.IP "" 4
.nf
bundle version
.fi
.IP "" 0
.P
shows \fBBundler version 2\.3\.21 (2022\-08\-24 commit d54be5fdd8)\fR for example\.
.P
cf\. \fBbundle \-\-version\fR shows \fBBundler version 2\.3\.21\fR\.
PK)J[�h$u��share/man/man1/bundle-init.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INIT" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
.SH "SYNOPSIS"
\fBbundle init\fR [\-\-gemspec=FILE]
.SH "DESCRIPTION"
Init generates a default [\fBGemfile(5)\fR][Gemfile(5)] in the current working directory\. When adding a [\fBGemfile(5)\fR][Gemfile(5)] to a gem with a gemspec, the \fB\-\-gemspec\fR option will automatically add each dependency listed in the gemspec file to the newly created [\fBGemfile(5)\fR][Gemfile(5)]\.
.SH "OPTIONS"
.TP
\fB\-\-gemspec=GEMSPEC\fR
Use the specified \.gemspec to create the [\fBGemfile(5)\fR][Gemfile(5)]
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified name for the gemfile instead of \fBGemfile\fR
.SH "FILES"
Included in the default [\fBGemfile(5)\fR][Gemfile(5)] generated is the line \fB# frozen_string_literal: true\fR\. This is a magic comment supported for the first time in Ruby 2\.3\. The presence of this line results in all string literals in the file being implicitly frozen\.
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR
PK)J[��^���share/man/man1/bundle-viz.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-VIZ" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
.SH "SYNOPSIS"
\fBbundle viz\fR [\-\-file=FILE] [\-\-format=FORMAT] [\-\-requirements] [\-\-version] [\-\-without=GROUP GROUP]
.SH "DESCRIPTION"
\fBviz\fR generates a PNG file of the current \fBGemfile(5)\fR as a dependency graph\. \fBviz\fR requires the ruby\-graphviz gem (and its dependencies)\.
.P
The associated gems must also be installed via \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR\.
.P
\fBviz\fR command was deprecated in Bundler 2\.2\. Use bundler\-graph plugin \fIhttps://github\.com/rubygems/bundler\-graph\fR instead\.
.SH "OPTIONS"
.TP
\fB\-\-file=FILE\fR, \fB\-f=FILE\fR
The name to use for the generated file\. See \fB\-\-format\fR option
.TP
\fB\-\-format=FORMAT\fR, \fB\-F=FORMAT\fR
This is output format option\. Supported format is png, jpg, svg, dot \|\.\|\.\|\.
.TP
\fB\-\-requirements\fR, \fB\-R\fR
Set to show the version of each required dependency\.
.TP
\fB\-\-version\fR, \fB\-v\fR
Set to show each gem version\.
.TP
\fB\-\-without=<list>\fR, \fB\-W=<list>\fR
Exclude gems that are part of the specified named group\.

PK)J[�v|��share/man/man1/bundle-clean.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CLEAN" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
.SH "SYNOPSIS"
\fBbundle clean\fR [\-\-dry\-run] [\-\-force]
.SH "DESCRIPTION"
This command will remove all unused gems in your bundler directory\. This is useful when you have made many changes to your gem dependencies\.
.SH "OPTIONS"
.TP
\fB\-\-dry\-run\fR
Print the changes, but do not clean the unused gems\.
.TP
\fB\-\-force\fR
Forces cleaning up unused gems even if Bundler is configured to use globally installed gems\. As a consequence, removes all system gems except for the ones in the current application\.

PK)J[3�8:��share/man/man1/ri.1nu�[���.\"Ruby is copyrighted by Yukihiro Matsumoto <matz@netlab.jp>.
.Dd April 20, 2017
.Dt RI \&1 "Ruby Programmer's Reference Guide"
.Os UNIX
.Sh NAME
.Nm ri
.Nd Ruby API reference front end
.Sh SYNOPSIS
.Nm
.Op Fl ahilTv
.Op Fl d Ar DIRNAME
.Op Fl f Ar FORMAT
.Op Fl w Ar WIDTH
.Op Fl - Ns Oo Cm no- Oc Ns Cm pager
.Op Fl -server Ns Oo = Ns Ar PORT Oc
.Op Fl - Ns Oo Cm no- Oc Ns Cm list-doc-dirs
.Op Fl -no-standard-docs
.Op Fl - Ns Oo Cm no- Oc Ns Bro Cm system Ns | Ns Cm site Ns | Ns Cm gems Ns | Ns Cm home Brc
.Op Fl - Ns Oo Cm no- Oc Ns Cm profile
.Op Fl -dump Ns = Ns Ar CACHE
.Op Ar name ...
.Sh DESCRIPTION
.Nm
is a command-line front end for the Ruby API reference.
You can search and read the API reference for classes and methods with
.Nm .
.Pp
.Nm
is a part of Ruby.
.Pp
.Ar name
can be:
.Bl -diag -offset indent
.It Class | Module | Module::Class
.Pp
.It Class::method | Class#method | Class.method | method
.Pp
.It gem_name: | gem_name:README | gem_name:History
.El
.Pp
All class names may be abbreviated to their minimum unambiguous form.
If a name is ambiguous, all valid options will be listed.
.Pp
A
.Ql \&.
matches either class or instance methods, while #method
matches only instance and ::method matches only class methods.
.Pp
README and other files may be displayed by prefixing them with the gem name
they're contained in.  If the gem name is followed by a
.Ql \&:
all files in the gem will be shown.
The file name extension may be omitted where it is unambiguous.
.Pp
For example:
.Bd -literal -offset indent
ri Fil
ri File
ri File.new
ri zip
ri rdoc:README
.Ed
.Pp
Note that shell quoting or escaping may be required for method names
containing punctuation:
.Bd -literal -offset indent
ri 'Array.[]'
ri compact\e!
.Ed
.Pp
To see the default directories
.Nm
will search, run:
.Bd -literal -offset indent
ri --list-doc-dirs
.Ed
.Pp
Specifying the
.Fl -system , Fl -site , Fl -home , Fl -gems ,
or
.Fl -doc-dir
options will limit
.Nm
to searching only the specified directories.
.Pp
.Nm
options may be set in the
.Ev RI
environment variable.
.Pp
The
.Nm
pager can be set with the
.Ev RI_PAGER
environment variable or the
.Ev PAGER
environment variable.
.Pp
.Sh OPTIONS
.Bl -tag -width "1234567890123" -compact
.Pp
.It Fl i
.It Fl - Ns Oo Cm no- Oc Ns Cm interactive
In interactive mode you can repeatedly
look up methods with autocomplete.
.Pp
.It Fl a
.It Fl - Ns Oo Cm no- Oc Ns Cm all
Show all documentation for a class or module.
.Pp
.It Fl l
.It Fl - Ns Oo Cm no- Oc Ns Cm list
List classes
.Nm
knows about.
.Pp
.It Fl - Ns Oo Cm no- Oc Ns Cm pager
Send output to a pager,
rather than directly to stdout.
.Pp
.It Fl T
Synonym for
.Fl -no-pager .
.Pp
.It Fl w Ar WIDTH
.It Fl -width Ns = Ns Ar WIDTH
Set the width of the output.
.Pp
.It Fl -server Ns Oo = Ns Ar PORT Oc
Run RDoc server on the given port.
The default port is\~8214.
.Pp
.It Fl f Ar FORMAT
.It Fl -format Ns = Ns Ar FORMAT
Use the selected formatter.
The default formatter is
.Li bs
for paged output and
.Li ansi
otherwise.
Valid formatters are:
.Li ansi , Li bs , Li markdown , Li rdoc .
.Pp
.It Fl h
.It Fl -help
Show help and exit.
.Pp
.It Fl v
.It Fl -version
Output version information and exit.
.El
.Pp
Data source options:
.Bl -tag -width "1234567890123" -compact
.Pp
.It Fl - Ns Oo Cm no- Oc Ns Cm list-doc-dirs
List the directories from which
.Nm
will source documentation on stdout and exit.
.Pp
.It Fl d Ar DIRNAME
.It Fl -doc-dir Ns = Ns Ar DIRNAME
List of directories from which to source
documentation in addition to the standard
directories.  May be repeated.
.Pp
.It Fl -no-standard-docs
Do not include documentation from the Ruby standard library,
.Pa site_lib ,
installed gems, or
.Pa ~/.rdoc .
Use with
.Fl -doc-dir .
.Pp
.It Fl - Ns Oo Cm no- Oc Ns Cm system
Include documentation from Ruby's standard library.  Defaults to true.
.Pp
.It Fl - Ns Oo Cm no- Oc Ns Cm site
Include documentation from libraries installed in
.Pa site_lib .
Defaults to true.
.Pp
.It Fl - Ns Oo Cm no- Oc Ns Cm gems
Include documentation from RubyGems.  Defaults to true.
.Pp
.It Fl - Ns Oo Cm no- Oc Ns Cm home
Include documentation stored in
.Pa ~/.rdoc .
Defaults to true.
.El
.Pp
Debug options:
.Bl -tag -width "1234567890123" -compact
.Pp
.It Fl - Ns Oo Cm no- Oc Ns Cm profile
Run with the Ruby profiler.
.Pp
.It Fl -dump Ns = Ns Ar CACHE
Dump data from an ri cache or data file.
.El
.Pp
.Sh ENVIRONMENT
.Bl -tag -width "USERPROFILE" -compact
.Pp
.It Ev RI
Options to prepend to those specified on the command-line.
.Pp
.It Ev RI_PAGER
.It Ev PAGER
Pager program to use for displaying.
.Pp
.It Ev HOME
.It Ev USERPROFILE
.It Ev HOMEPATH
Path to the user's home directory.
.El
.Pp
.Sh FILES
.Bl -tag -width "USERPROFILE" -compact
.Pp
.It Pa ~/.rdoc
Path for ri data in the user's home directory.
.Pp
.El
.Pp
.Sh SEE ALSO
.Xr ruby 1 ,
.Xr rdoc 1 ,
.Xr gem 1
.Pp
.Sh REPORTING BUGS
.Bl -bullet
.It
Security vulnerabilities should be reported via an email to
.Mt security@ruby-lang.org .
Reported problems will be published after being fixed.
.Pp
.It
Other bugs and feature requests can be reported via the
Ruby Issue Tracking System
.Pq Lk https://bugs.ruby-lang.org/ .
Do not report security vulnerabilities
via this system because it publishes the vulnerabilities immediately.
.El
.Sh AUTHORS
Written by
.An Dave Thomas Aq dave@pragmaticprogrammer.com .
PK)J[n�0�yByBshare/man/man1/bundle-install.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INSTALL" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
.SH "SYNOPSIS"
\fBbundle install\fR [\-\-binstubs[=DIRECTORY]] [\-\-clean] [\-\-deployment] [\-\-frozen] [\-\-full\-index] [\-\-gemfile=GEMFILE] [\-\-jobs=NUMBER] [\-\-local] [\-\-no\-cache] [\-\-no\-prune] [\-\-path PATH] [\-\-prefer\-local] [\-\-quiet] [\-\-redownload] [\-\-retry=NUMBER] [\-\-shebang=SHEBANG] [\-\-standalone[=GROUP[ GROUP\|\.\|\.\|\.]]] [\-\-system] [\-\-trust\-policy=TRUST\-POLICY] [\-\-target\-rbconfig=TARGET\-RBCONFIG] [\-\-with=GROUP[ GROUP\|\.\|\.\|\.]] [\-\-without=GROUP[ GROUP\|\.\|\.\|\.]]
.SH "DESCRIPTION"
Install the gems specified in your Gemfile(5)\. If this is the first time you run bundle install (and a \fBGemfile\.lock\fR does not exist), Bundler will fetch all remote sources, resolve dependencies and install all needed gems\.
.P
If a \fBGemfile\.lock\fR does exist, and you have not updated your Gemfile(5), Bundler will fetch all remote sources, but use the dependencies specified in the \fBGemfile\.lock\fR instead of resolving dependencies\.
.P
If a \fBGemfile\.lock\fR does exist, and you have updated your Gemfile(5), Bundler will use the dependencies in the \fBGemfile\.lock\fR for all gems that you did not update, but will re\-resolve the dependencies of gems that you did update\. You can find more information about this update process below under \fICONSERVATIVE UPDATING\fR\.
.SH "OPTIONS"
The \fB\-\-clean\fR, \fB\-\-deployment\fR, \fB\-\-frozen\fR, \fB\-\-no\-prune\fR, \fB\-\-path\fR, \fB\-\-shebang\fR, \fB\-\-system\fR, \fB\-\-without\fR and \fB\-\-with\fR options are deprecated because they only make sense if they are applied to every subsequent \fBbundle install\fR run automatically and that requires \fBbundler\fR to silently remember them\. Since \fBbundler\fR will no longer remember CLI flags in future versions, \fBbundle config\fR (see bundle\-config(1)) should be used to apply them permanently\.
.TP
\fB\-\-binstubs[=BINSTUBS]\fR
Binstubs are scripts that wrap around executables\. Bundler creates a small Ruby file (a binstub) that loads Bundler, runs the command, and puts it in \fBbin/\fR\. This lets you link the binstub inside of an application to the exact gem version the application needs\.
.IP
Creates a directory (defaults to \fB~/bin\fR when the option is used without a value, or to the given \fB<BINSTUBS>\fR directory otherwise) and places any executables from the gem there\. These executables run in Bundler's context\. If used, you might add this directory to your environment's \fBPATH\fR variable\. For instance, if the \fBrails\fR gem comes with a \fBrails\fR executable, this flag will create a \fBbin/rails\fR executable that ensures that all referred dependencies will be resolved using the bundled gems\.
.TP
\fB\-\-clean\fR
On finishing the installation Bundler is going to remove any gems not present in the current Gemfile(5)\. Don't worry, gems currently in use will not be removed\.
.IP
This option is deprecated in favor of the \fBclean\fR setting\.
.TP
\fB\-\-deployment\fR
In \fIdeployment mode\fR, Bundler will 'roll\-out' the bundle for production or CI use\. Please check carefully if you want to have this option enabled in your development environment\.
.IP
This option is deprecated in favor of the \fBdeployment\fR setting\.
.TP
\fB\-\-redownload\fR, \fB\-\-force\fR
Force download every gem, even if the required versions are already available locally\.
.TP
\fB\-\-frozen\fR
Do not allow the Gemfile\.lock to be updated after this install\. Exits non\-zero if there are going to be changes to the Gemfile\.lock\.
.IP
This option is deprecated in favor of the \fBfrozen\fR setting\.
.TP
\fB\-\-full\-index\fR
Bundler will not call Rubygems' API endpoint (default) but download and cache a (currently big) index file of all gems\. Performance can be improved for large bundles that seldom change by enabling this option\.
.TP
\fB\-\-gemfile=GEMFILE\fR
The location of the Gemfile(5) which Bundler should use\. This defaults to a Gemfile(5) in the current working directory\. In general, Bundler will assume that the location of the Gemfile(5) is also the project's root and will try to find \fBGemfile\.lock\fR and \fBvendor/cache\fR relative to this location\.
.TP
\fB\-\-jobs=<number>\fR, \fB\-j=<number>\fR
The maximum number of parallel download and install jobs\. The default is the number of available processors\.
.TP
\fB\-\-local\fR
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems' cache or in \fBvendor/cache\fR\. Note that if an appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
.TP
\fB\-\-prefer\-local\fR
Force using locally installed gems, or gems already present in Rubygems' cache or in \fBvendor/cache\fR, when resolving, even if newer versions are available remotely\. Only attempt to connect to \fBrubygems\.org\fR for gems that are not present locally\.
.TP
\fB\-\-no\-cache\fR
Do not update the cache in \fBvendor/cache\fR with the newly bundled gems\. This does not remove any gems in the cache but keeps the newly bundled gems from being cached during the install\.
.TP
\fB\-\-no\-prune\fR
Don't remove stale gems from the cache when the installation finishes\.
.IP
This option is deprecated in favor of the \fBno_prune\fR setting\.
.TP
\fB\-\-path=PATH\fR
The location to install the specified gems to\. This defaults to Rubygems' setting\. Bundler shares this location with Rubygems, \fBgem install \|\.\|\.\|\.\fR will have gem installed there, too\. Therefore, gems installed without a \fB\-\-path \|\.\|\.\|\.\fR setting will show up by calling \fBgem list\fR\. Accordingly, gems installed to other locations will not get listed\.
.IP
This option is deprecated in favor of the \fBpath\fR setting\.
.TP
\fB\-\-quiet\fR
Do not print progress information to the standard output\.
.TP
\fB\-\-retry=[<number>]\fR
Retry failed network or git requests for \fInumber\fR times\.
.TP
\fB\-\-shebang=SHEBANG\fR
Uses the specified ruby executable (usually \fBruby\fR) to execute the scripts created with \fB\-\-binstubs\fR\. In addition, if you use \fB\-\-binstubs\fR together with \fB\-\-shebang jruby\fR these executables will be changed to execute \fBjruby\fR instead\.
.IP
This option is deprecated in favor of the \fBshebang\fR setting\.
.TP
\fB\-\-standalone[=<list>]\fR
Makes a bundle that can work without depending on Rubygems or Bundler at runtime\. A space separated list of groups to install can be specified\. Bundler creates a directory named \fBbundle\fR and installs the bundle there\. It also generates a \fBbundle/bundler/setup\.rb\fR file to replace Bundler's own setup in the manner required\. Using this option implicitly sets \fBpath\fR, which is a [remembered option][REMEMBERED OPTIONS]\.
.TP
\fB\-\-system\fR
Installs the gems specified in the bundle to the system's Rubygems location\. This overrides any previous configuration of \fB\-\-path\fR\.
.IP
This option is deprecated in favor of the \fBsystem\fR setting\.
.TP
\fB\-\-trust\-policy=TRUST\-POLICY\fR
Apply the Rubygems security policy \fIpolicy\fR, where policy is one of \fBHighSecurity\fR, \fBMediumSecurity\fR, \fBLowSecurity\fR, \fBAlmostNoSecurity\fR, or \fBNoSecurity\fR\. For more details, please see the Rubygems signing documentation linked below in \fISEE ALSO\fR\.
.TP
\fB\-\-target\-rbconfig=TARGET\-RBCONFIG\fR
Path to rbconfig\.rb for the deployment target platform\.
.TP
\fB\-\-with=<list>\fR
A space\-separated list of groups referencing gems to install\. If an optional group is given it is installed\. If a group is given that is in the remembered list of groups given to \-\-without, it is removed from that list\.
.IP
This option is deprecated in favor of the \fBwith\fR setting\.
.TP
\fB\-\-without=<list>\fR
A space\-separated list of groups referencing gems to skip during installation\. If a group is given that is in the remembered list of groups given to \-\-with, it is removed from that list\.
.IP
This option is deprecated in favor of the \fBwithout\fR setting\.
.SH "DEPLOYMENT MODE"
Bundler's defaults are optimized for development\. To switch to defaults optimized for deployment and for CI, use the \fB\-\-deployment\fR flag\. Do not activate deployment mode on development machines, as it will cause an error when the Gemfile(5) is modified\.
.IP "1." 4
A \fBGemfile\.lock\fR is required\.
.IP
To ensure that the same versions of the gems you developed with and tested with are also used in deployments, a \fBGemfile\.lock\fR is required\.
.IP
This is mainly to ensure that you remember to check your \fBGemfile\.lock\fR into version control\.
.IP "2." 4
The \fBGemfile\.lock\fR must be up to date
.IP
In development, you can modify your Gemfile(5) and re\-run \fBbundle install\fR to \fIconservatively update\fR your \fBGemfile\.lock\fR snapshot\.
.IP
In deployment, your \fBGemfile\.lock\fR should be up\-to\-date with changes made in your Gemfile(5)\.
.IP "3." 4
Gems are installed to \fBvendor/bundle\fR not your default system location
.IP
In development, it's convenient to share the gems used in your application with other applications and other scripts that run on the system\.
.IP
In deployment, isolation is a more important default\. In addition, the user deploying the application may not have permission to install gems to the system, or the web server may not have permission to read them\.
.IP
As a result, \fBbundle install \-\-deployment\fR installs gems to the \fBvendor/bundle\fR directory in the application\. This may be overridden using the \fB\-\-path\fR option\.
.IP "" 0
.SH "INSTALLING GROUPS"
By default, \fBbundle install\fR will install all gems in all groups in your Gemfile(5), except those declared for a different platform\.
.P
However, you can explicitly tell Bundler to skip installing certain groups with the \fB\-\-without\fR option\. This option takes a space\-separated list of groups\.
.P
While the \fB\-\-without\fR option will skip \fIinstalling\fR the gems in the specified groups, it will still \fIdownload\fR those gems and use them to resolve the dependencies of every gem in your Gemfile(5)\.
.P
This is so that installing a different set of groups on another machine (such as a production server) will not change the gems and versions that you have already developed and tested against\.
.P
\fBBundler offers a rock\-solid guarantee that the third\-party code you are running in development and testing is also the third\-party code you are running in production\. You can choose to exclude some of that code in different environments, but you will never be caught flat\-footed by different versions of third\-party code being used in different environments\.\fR
.P
For a simple illustration, consider the following Gemfile(5):
.IP "" 4
.nf
source 'https://rubygems\.org'

gem 'sinatra'

group :production do
  gem 'rack\-perftools\-profiler'
end
.fi
.IP "" 0
.P
In this case, \fBsinatra\fR depends on any version of Rack (\fB>= 1\.0\fR), while \fBrack\-perftools\-profiler\fR depends on 1\.x (\fB~> 1\.0\fR)\.
.P
When you run \fBbundle install \-\-without production\fR in development, we look at the dependencies of \fBrack\-perftools\-profiler\fR as well\. That way, you do not spend all your time developing against Rack 2\.0, using new APIs unavailable in Rack 1\.x, only to have Bundler switch to Rack 1\.2 when the \fBproduction\fR group \fIis\fR used\.
.P
This should not cause any problems in practice, because we do not attempt to \fBinstall\fR the gems in the excluded groups, and only evaluate as part of the dependency resolution process\.
.P
This also means that you cannot include different versions of the same gem in different groups, because doing so would result in different sets of dependencies used in development and production\. Because of the vagaries of the dependency resolution process, this usually affects more than the gems you list in your Gemfile(5), and can (surprisingly) radically change the gems you are using\.
.SH "THE GEMFILE\.LOCK"
When you run \fBbundle install\fR, Bundler will persist the full names and versions of all gems that you used (including dependencies of the gems specified in the Gemfile(5)) into a file called \fBGemfile\.lock\fR\.
.P
Bundler uses this file in all subsequent calls to \fBbundle install\fR, which guarantees that you always use the same exact code, even as your application moves across machines\.
.P
Because of the way dependency resolution works, even a seemingly small change (for instance, an update to a point\-release of a dependency of a gem in your Gemfile(5)) can result in radically different gems being needed to satisfy all dependencies\.
.P
As a result, you \fBSHOULD\fR check your \fBGemfile\.lock\fR into version control, in both applications and gems\. If you do not, every machine that checks out your repository (including your production server) will resolve all dependencies again, which will result in different versions of third\-party code being used if \fBany\fR of the gems in the Gemfile(5) or any of their dependencies have been updated\.
.P
When Bundler first shipped, the \fBGemfile\.lock\fR was included in the \fB\.gitignore\fR file included with generated gems\. Over time, however, it became clear that this practice forces the pain of broken dependencies onto new contributors, while leaving existing contributors potentially unaware of the problem\. Since \fBbundle install\fR is usually the first step towards a contribution, the pain of broken dependencies would discourage new contributors from contributing\. As a result, we have revised our guidance for gem authors to now recommend checking in the lock for gems\.
.SH "CONSERVATIVE UPDATING"
When you make a change to the Gemfile(5) and then run \fBbundle install\fR, Bundler will update only the gems that you modified\.
.P
In other words, if a gem that you \fBdid not modify\fR worked before you called \fBbundle install\fR, it will continue to use the exact same versions of all dependencies as it used before the update\.
.P
Let's take a look at an example\. Here's your original Gemfile(5):
.IP "" 4
.nf
source 'https://rubygems\.org'

gem 'actionpack', '2\.3\.8'
gem 'activemerchant'
.fi
.IP "" 0
.P
In this case, both \fBactionpack\fR and \fBactivemerchant\fR depend on \fBactivesupport\fR\. The \fBactionpack\fR gem depends on \fBactivesupport 2\.3\.8\fR and \fBrack ~> 1\.1\.0\fR, while the \fBactivemerchant\fR gem depends on \fBactivesupport >= 2\.3\.2\fR, \fBbraintree >= 2\.0\.0\fR, and \fBbuilder >= 2\.0\.0\fR\.
.P
When the dependencies are first resolved, Bundler will select \fBactivesupport 2\.3\.8\fR, which satisfies the requirements of both gems in your Gemfile(5)\.
.P
Next, you modify your Gemfile(5) to:
.IP "" 4
.nf
source 'https://rubygems\.org'

gem 'actionpack', '3\.0\.0\.rc'
gem 'activemerchant'
.fi
.IP "" 0
.P
The \fBactionpack 3\.0\.0\.rc\fR gem has a number of new dependencies, and updates the \fBactivesupport\fR dependency to \fB= 3\.0\.0\.rc\fR and the \fBrack\fR dependency to \fB~> 1\.2\.1\fR\.
.P
When you run \fBbundle install\fR, Bundler notices that you changed the \fBactionpack\fR gem, but not the \fBactivemerchant\fR gem\. It evaluates the gems currently being used to satisfy its requirements:
.TP
\fBactivesupport 2\.3\.8\fR
also used to satisfy a dependency in \fBactivemerchant\fR, which is not being updated
.TP
\fBrack ~> 1\.1\.0\fR
not currently being used to satisfy another dependency
.P
Because you did not explicitly ask to update \fBactivemerchant\fR, you would not expect it to suddenly stop working after updating \fBactionpack\fR\. However, satisfying the new \fBactivesupport 3\.0\.0\.rc\fR dependency of actionpack requires updating one of its dependencies\.
.P
Even though \fBactivemerchant\fR declares a very loose dependency that theoretically matches \fBactivesupport 3\.0\.0\.rc\fR, Bundler treats gems in your Gemfile(5) that have not changed as an atomic unit together with their dependencies\. In this case, the \fBactivemerchant\fR dependency is treated as \fBactivemerchant 1\.7\.1 + activesupport 2\.3\.8\fR, so \fBbundle install\fR will report that it cannot update \fBactionpack\fR\.
.P
To explicitly update \fBactionpack\fR, including its dependencies which other gems in the Gemfile(5) still depend on, run \fBbundle update actionpack\fR (see \fBbundle update(1)\fR)\.
.P
\fBSummary\fR: In general, after making a change to the Gemfile(5) , you should first try to run \fBbundle install\fR, which will guarantee that no other gem in the Gemfile(5) is impacted by the change\. If that does not work, run bundle update(1) \fIbundle\-update\.1\.html\fR\.
.SH "SEE ALSO"
.IP "\(bu" 4
Gem install docs \fIhttps://guides\.rubygems\.org/rubygems\-basics/#installing\-gems\fR
.IP "\(bu" 4
Rubygems signing docs \fIhttps://guides\.rubygems\.org/security/\fR
.IP "" 0

PK)J[�R���share/man/man1/bundle-help.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-HELP" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-help\fR \- Displays detailed help for each subcommand
.SH "SYNOPSIS"
\fBbundle help\fR [COMMAND]
.SH "DESCRIPTION"
Displays detailed help for the given subcommand\. You can specify a single \fBCOMMAND\fR at the same time\. When \fBCOMMAND\fR is omitted, help for \fBhelp\fR command will be displayed\.
PK)J[�` ��
�
 share/man/man1/bundle-outdated.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-OUTDATED" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-outdated\fR \- List installed gems with newer versions available
.SH "SYNOPSIS"
\fBbundle outdated\fR [GEM] [\-\-local] [\-\-pre] [\-\-source] [\-\-filter\-strict | \-\-strict] [\-\-update\-strict] [\-\-parseable | \-\-porcelain] [\-\-group=GROUP] [\-\-groups] [\-\-patch|\-\-minor|\-\-major] [\-\-filter\-major] [\-\-filter\-minor] [\-\-filter\-patch] [\-\-only\-explicit]
.SH "DESCRIPTION"
Outdated lists the names and versions of gems that have a newer version available in the given source\. Calling outdated with [GEM [GEM]] will only check for newer versions of the given gems\. Prerelease gems are ignored by default\. If your gems are up to date, Bundler will exit with a status of 0\. Otherwise, it will exit 1\.
.SH "OPTIONS"
.TP
\fB\-\-local\fR
Do not attempt to fetch gems remotely and use the gem cache instead\.
.TP
\fB\-\-pre\fR
Check for newer pre\-release gems\.
.TP
\fB\-\-source=<list>\fR
Check against a specific source\.
.TP
\fB\-\-filter\-strict\fR, \fB\-\-strict\fR
Only list newer versions allowed by your Gemfile requirements, also respecting conservative update flags (\-\-patch, \-\-minor, \-\-major)\.
.TP
\fB\-\-update\-strict\fR
Strict conservative resolution, do not allow any gem to be updated past latest \-\-patch | \-\-minor | \-\-major\.
.TP
\fB\-\-parseable\fR, \fB\-\-porcelain\fR
Use minimal formatting for more parseable output\.
.TP
\fB\-\-group=GROUP\fR
List gems from a specific group\.
.TP
\fB\-\-groups\fR
List gems organized by groups\.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.TP
\fB\-\-filter\-major\fR
Only list major newer versions\.
.TP
\fB\-\-filter\-minor\fR
Only list minor newer versions\.
.TP
\fB\-\-filter\-patch\fR
Only list patch newer versions\.
.TP
\fB\-\-only\-explicit\fR
Only list gems specified in your Gemfile, not their dependencies\.
.SH "PATCH LEVEL OPTIONS"
See bundle update(1) \fIbundle\-update\.1\.html\fR for details\.
.SH "FILTERING OUTPUT"
The 3 filtering options do not affect the resolution of versions, merely what versions are shown in the output\.
.P
If the regular output shows the following:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* faker     1\.6\.5    1\.6\.6   ~> 1\.4     development, test
* hashie    1\.2\.0    3\.4\.6   = 1\.2\.0    default
* headless  2\.2\.3    2\.3\.1   = 2\.2\.3    test
.fi
.IP "" 0
.P
\fB\-\-filter\-major\fR would only show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* hashie    1\.2\.0    3\.4\.6   = 1\.2\.0    default
.fi
.IP "" 0
.P
\fB\-\-filter\-minor\fR would only show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* headless  2\.2\.3    2\.3\.1   = 2\.2\.3    test
.fi
.IP "" 0
.P
\fB\-\-filter\-patch\fR would only show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* faker     1\.6\.5    1\.6\.6   ~> 1\.4     development, test
.fi
.IP "" 0
.P
Filter options can be combined\. \fB\-\-filter\-minor\fR and \fB\-\-filter\-patch\fR would show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* faker     1\.6\.5    1\.6\.6   ~> 1\.4     development, test
.fi
.IP "" 0
.P
Combining all three \fBfilter\fR options would be the same result as providing none of them\.
PK)J[��l���share/man/man1/bundle-lock.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-LOCK" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
.SH "SYNOPSIS"
\fBbundle lock\fR [\-\-update] [\-\-bundler[=BUNDLER]] [\-\-local] [\-\-print] [\-\-lockfile=PATH] [\-\-full\-index] [\-\-gemfile=GEMFILE] [\-\-add\-checksums] [\-\-add\-platform] [\-\-remove\-platform] [\-\-normalize\-platforms] [\-\-patch] [\-\-minor] [\-\-major] [\-\-pre] [\-\-strict] [\-\-conservative]
.SH "DESCRIPTION"
Lock the gems specified in Gemfile\.
.SH "OPTIONS"
.TP
\fB\-\-update[=<list>]\fR
Ignores the existing lockfile\. Resolve then updates lockfile\. Taking a list of gems or updating all gems if no list is given\.
.TP
\fB\-\-bundler[=BUNDLER]\fR
Update the locked version of bundler to the given version or the latest version if no version is given\.
.TP
\fB\-\-local\fR
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems' cache or in \fBvendor/cache\fR\. Note that if a appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
.TP
\fB\-\-print\fR
Prints the lockfile to STDOUT instead of writing to the file system\.
.TP
\fB\-\-lockfile=LOCKFILE\fR
The path where the lockfile should be written to\.
.TP
\fB\-\-full\-index\fR
Fall back to using the single\-file index of all gems\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of [\fBGemfile(5)\fR][Gemfile(5)]\.
.TP
\fB\-\-add\-checksums\fR
Add checksums to the lockfile\.
.TP
\fB\-\-add\-platform=<list>\fR
Add a new platform to the lockfile, re\-resolving for the addition of that platform\.
.TP
\fB\-\-remove\-platform=<list>\fR
Remove a platform from the lockfile\.
.TP
\fB\-\-normalize\-platforms\fR
Normalize lockfile platforms\.
.TP
\fB\-\-patch\fR
If updating, prefer updating only to next patch version\.
.TP
\fB\-\-minor\fR
If updating, prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
If updating, prefer updating to next major version (default)\.
.TP
\fB\-\-pre\fR
If updating, always choose the highest allowed version, regardless of prerelease status\.
.TP
\fB\-\-strict\fR
If updating, do not allow any gem to be updated past latest \-\-patch | \-\-minor | \-\-major\.
.TP
\fB\-\-conservative\fR
If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated\.
.SH "UPDATING ALL GEMS"
If you run \fBbundle lock\fR with \fB\-\-update\fR option without list of gems, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
.SH "UPDATING A LIST OF GEMS"
Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.P
For instance, you only want to update \fBnokogiri\fR, run \fBbundle lock \-\-update nokogiri\fR\.
.P
Bundler will update \fBnokogiri\fR and any of its dependencies, but leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.SH "SUPPORTING OTHER PLATFORMS"
If you want your bundle to support platforms other than the one you're running locally, you can run \fBbundle lock \-\-add\-platform PLATFORM\fR to add PLATFORM to the lockfile, force bundler to re\-resolve and consider the new platform when picking gems, all without needing to have a machine that matches PLATFORM handy to install those platform\-specific gems on\.
.P
For a full explanation of gem platforms, see \fBgem help platform\fR\.
.SH "PATCH LEVEL OPTIONS"
See bundle update(1) \fIbundle\-update\.1\.html\fR for details\.
PK)J[^F�((share/man/man1/bundle-add.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-ADD" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
.SH "SYNOPSIS"
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-path=PATH] [\-\-git=GIT|\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-quiet] [\-\-skip\-install] [\-\-strict|\-\-optimistic]
.SH "DESCRIPTION"
Adds the named gem to the [\fBGemfile(5)\fR][Gemfile(5)] and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\.
.SH "OPTIONS"
.TP
\fB\-\-version=VERSION\fR, \fB\-v=VERSION\fR
Specify version requirements(s) for the added gem\.
.TP
\fB\-\-group=GROUP\fR, \fB\-g=GROUP\fR
Specify the group(s) for the added gem\. Multiple groups should be separated by commas\.
.TP
\fB\-\-source=SOURCE\fR, \fB\-s=SOURCE\fR
Specify the source for the added gem\.
.TP
\fB\-\-require=REQUIRE\fR, \fB\-r=REQUIRE\fR
Adds require path to gem\. Provide false, or a path as a string\.
.TP
\fB\-\-path=PATH\fR
Specify the file system path for the added gem\.
.TP
\fB\-\-git=GIT\fR
Specify the git source for the added gem\.
.TP
\fB\-\-github=GITHUB\fR
Specify the github source for the added gem\.
.TP
\fB\-\-branch=BRANCH\fR
Specify the git branch for the added gem\.
.TP
\fB\-\-ref=REF\fR
Specify the git ref for the added gem\.
.TP
\fB\-\-glob=GLOB\fR
Specify the location of a dependency's \.gemspec, expanded within Ruby (single quotes recommended)\.
.TP
\fB\-\-quiet\fR
Do not print progress information to the standard output\.
.TP
\fB\-\-skip\-install\fR
Adds the gem to the Gemfile but does not install it\.
.TP
\fB\-\-optimistic\fR
Adds optimistic declaration of version\.
.TP
\fB\-\-strict\fR
Adds strict declaration of version\.
.SH "EXAMPLES"
.IP "1." 4
You can add the \fBrails\fR gem to the Gemfile without any version restriction\. The source of the gem will be the global source\.
.IP
\fBbundle add rails\fR
.IP "2." 4
You can add the \fBrails\fR gem with version greater than 1\.1 (not including 1\.1) and less than 3\.0\.
.IP
\fBbundle add rails \-\-version "> 1\.1, < 3\.0"\fR
.IP "3." 4
You can use the \fBhttps://gems\.example\.com\fR custom source and assign the gem to a group\.
.IP
\fBbundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"\fR
.IP "4." 4
The following adds the \fBgem\fR entry to the Gemfile without installing the gem\. You can install gems later via \fBbundle install\fR\.
.IP
\fBbundle add rails \-\-skip\-install\fR
.IP "5." 4
You can assign the gem to more than one group\.
.IP
\fBbundle add rails \-\-group "development, test"\fR
.IP "" 0
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR, bundle\-remove(1) \fIbundle\-remove\.1\.html\fR
PK)J[Lshare/gems/extensions/x86_64-linux/3.4.0/bigdecimal-3.1.8/gem.build_completenu�[���PK)J[I��>>!share/gems/cache/rackup-2.1.0.gemnu�[���metadata.gz0000444000000000000000000000127114364637605013455 0ustar00wheelwheel00000000000000��?�c�W]o�0}��0{�S>�
�,1		�@�eC �Pt��&f�cl��B�۹��ڮe�+K+%���>>>��(���拤�?a��B�Y,�Ldc���;(�[���<�bG��C�2iO�Ya�8M�Pm�����'���=!�С^��s0��l~n�C�riJ��;+Ѕ��AR>�1��ӣ(�D�G<ME�����߳-�M!��|{ϖ�j��,4��k觫bJ�H��:$��ɓ�>�����K�	K|�kM�	���R��(�+�
{!|C}�`��_�����O����(�P�5�B�w'�k"�8G�ر�����e��Ȁ>����*�G�S�RM*�Z�B�d�{�ߍ�#o�4�^�+��s����K􅓶�.����m�\
;�qo�MW��J
d�l�l&����mC��^ĕ� ��_gc����*�ګ���+<)*�Ӳq�UN�Fv���R�C�[�(�/H&�u�I�P��ٓ�N�EՍF9��z�$�u��E�QF���zM_�|�4��<�����4>�R�F�Y?%M?�ä���,��o��/�2��]snٴ�Un����[;���g�D���=���|;Ŷ��	�2�T�9.���U�1����?�t���'N��ɑ��{��&���jl�Ǭ[3�^��t��~data.tar.gz0000444000000000000000000002611414364637605013376 0ustar00wheelwheel00000000000000��?�c�}�v7�`�.��2!�Pԇ�/�6%�mIԐ�G��M;jv���9�߾��9�o�>��}��$[U������q�L�4K�(��P�*T�lwͷ���⛯�������o��O���ƃ�o6��?�zx���u�۸�7l��?�'
B�T.g�;��T��?��ʽ�(��F��{��h�,����}��0}�=:v�}�i�Џx����l�}�X�}�Y��Xs�\G�R�~7�}�_p��K���#��y[�Y�ā��G_��nm����o=z�y��_��+��n|�"w�}�8;�؁=�n���-��}6�ls}ss��_g�%�[�;��8�5�ҥ廬����������V��K��c���P�DB��ҧ�GH��+��7�N�K�Mu�͚�Ts%�NJw���a��F��O�Ç[w�����ܒ���/Vp��e/:�Ww�o���*����R����Gw����,��w�B�݅P؞[����K>���y�f��])���g��������������9Z�[a�KM<���=���w2������7�j���v�N4�S
�����l�#v_u�Z1TD��,��sf���I�l��(������b�ȭΗ�bQ{�� k~��y�D�尙̠��8[X�+��r4�����=�6���>�|[�f%m�e����La��>_���ș�,1���z�Pl�@�
���)��L��"h��#H�@���aC�y�O+@2&��]I���7,��bb���\��i�jkr�vH���x���m�wK(��	���3V�u�M-'�
GT��8<����7�sU�O��*
��:9%J�nlv�wc�ӝ|���_��@��8��Jھ�qk+�s�z>oh��GW��4F0k���:��7ɞ�E*	/�#$� Y⛴P��$I�l�/0�&�D�Ϛ�D�m��
�Uc1@���f��:�;h�`���C�=N�$o*��~������}��]]Ds'�I
�֘���TcᓰҚ�ܐ5�6w�Aނ��~2�²k$Ef��g��� ��ǖ�[ˏ̋��,e�J;	�1&�G�h׋��Pl�d�5d=ƞ��ѓ
�Rg�2�� ���2�ٔ��\��RU�7$�Ԭ�4�`d�[��x��K�l̵��eM��UK����~Жc�:Ͳk°����H��l�"g�Vp��D��>�d+��1���n�v�(��Ê�0�hd�>@��ѻs)'G�s���mK�:���
&&rP�A�ǐ�D
*�+l�[n��j3&Y�X1���)��M�smPp��v8�B]6�.�G6�jRN��9E!~��3m�煂�n��;'�\��@3Ō/=~�U��W�_�X~R2Y����^�)�vGz9���'v�O&�O1�����V���.��`F�7,������Y��k;i��t��Z�}f_��/ Vyc�]�c�R�Uƒ^���
����R��M���6�/�s�m
AD�V+%���e�?�y_��o��z�{�����_��˱y�R@�M�c҆��\�.*`��mVg�/L� �ѿ
‰�6F���0��ݠ�f	�i;����P���������`p<��
�G��A���`�\�!O�����+4E�eک�%P�fVmD�	l�UM�=�st�v�ހ㮧�ڽ^��7���g������a[����<u���F��!��yur��ƞ��,A�5�_Ɏ^3I�׷�އa���BK	�`����[�}	��6���qF���h	��@#�
mԮ���PVM7����
� ������ރI��*.<�z�Y�ʮW�u��VM�f.l/
`O�Q�i������nBPY]hͰg���E�E�E����2T��p:L�ӕ��W��E�7ƮJٿR��*�p�D1W�[��	F�+��ꈛ=ciN��s�vF��O<��C֥��gWr�i�~:�����}��S����w���?K`����K־-�%G����U4(:��J�����^�9�b�[��o�^�)�S�4��Q�b�B��A��8�/~�^���{�lE&�pq�U��2�CUo� ���<μ �zz3�mu`3�8�[�
ݵ�d��m��ꤹc���d[^@}��P�T��5��{�BU�^
[����?��=?z����:�1H��v� MG)���H���%'�AI��S�7\~Y�̕�Ԙ���S/<3�k:)cK�;��OT,`>·t�<Ӽ��,�:/,Ǟ%v����ޠ�U�~�f�������ʨ{�#Ԅsp�u�粪���ZYWg˸.���=�>5�G�}u�"2�B<@�ڋ�i�67ih})!_ݨڮ�0���<����,� Z@c)^�Љ�������yc���P(ڕ�B����g϶���-���EH��$Đ�Z� ���%}��#��t�η%��—�H��x���h���'��Y䞛
-���ӪP3�O�������F��T����H"�ϸ)Ό��J��`��l%�u�=�{(i.&�`�h��i	�^H�6�n�.�5��=�V���N|��&6�o�yh
/,?�1���mҌ��.0���Jۜh�n�EIB��dH��0�71�AbP[�"0iP���fR�`P����օu���k��A�^d��j���҃�ãIz�G�ᷰ�Y��r
�*F��%z3�YG���Y83�"�C��ĭ�oY��2����OI+���"t�ݟҩ�ͧ/nw+�!�@����X�iGx.;81fZL�!dlo�X��ĂJT�(���yv�O-���"�k����ܮvn���m��숕JX	x�:��s�W�N����c+�
'"�T��f���qΗu����X���tZ䇸SR�
X� xi���w��())Ƃ/��6�zϫd�4*���b ف/=tZ�1_��)NE��T�9��D�
!X��eO�`�
j~l���0**��o�@�TC�����yk	�~�:�Yh�Y�W����Bo�9�tQB�ˢřVNM�A��BjwGO:��q�,�o�>P�YR���2�.�;��T3��$̽��*�(����7v�s�,WԖ�My��	XCV��
<2�p��E�)�"���&��>C�Zx�4}�v��E�B}��(5�@TT+�0
N�eWgIdŸ�}�{��9�����n�_���|�qw�����f�O��nq�'�2�}-dv%/��؂Ōq�`�{B��ŁX�Jʆ�/J�GY*�'ȵ��f��NؔA{���2���v�{�l�t�<�u��5^�og����/�����_�O��'�._���o��ww���G?��O��[�?����������𧋳����'?X�޿��_�޽�\���7�{[���G�\���~�<�\����
g��a���z�j�錬7����q��X<8�\�t��5��y���8���Ï�u��`���a{�q���o�n���e���vAYhD�(U-Ͽ/�N�O�^s@����Lj�`��^�%	R�xk�<u�E9��Nܘ1!��J�O���sl�a�o�����Y��}�xƄ��$�3LV0t����
�֦�d�aX�!��Q�4�C�?�
�cۋ�{O���r=����Ӆ�%
Pܞ��Wy�a�]Y����*�'�zVVf����^0���T]�`,�/�;?0��OH;�ˑuO6�����߃�d�CXrk�p���g�e�Wuէ��*	mK�R Þ<�A_+�050>_�'b�3��Ӱ����ԅh�h��_F�VM�G���p�A��R�+_�b�-�jP��_�ˮ��D�`�Г׭l��6���Cȱo���"�����J��?�*����ͽ���:�oc�|�O,�y�h�	��_zv
�A��*��+��Wnͩ���]-I�4��ڷ�8Q����A{8�����r��Mֽ�nU�ͼ�!�
P��C�k /�8a��&��,�b;n��W@+�#6#���ju�G�M�d�	�5cTw�������7�o>J���N����"\X>���+���B�	2v�(���潏ͅ��s��wv�WH��P(�Ҍh3��P3߅|�@A�Y�/U~]A\�-�#2&�0L��[O��^\Ԑ������9S��W\�^	�a��1=��-��������7B��1�\�(�
�3�dB|����=�G4��G���N˥t�̬��M�B���u�4ZA����tut�U�'�����r�A稍����!�B��؛�r-�̓.����l�=>h�kw:G{`�`�؃@¨%�D쪔��D`9���x���-O�3�Vŗ��w޾�k��5D��5�|��xRK����)��+�]���=@�9��.��g�طaq�X�ֽ���x��q��tʐ����n�Jn?�uDG��G�N��t���K��A��Gn#V�[K���0�{t���0�� ?��3s�TcDe��tZS�
reIˣY6\c����9���Z�����:����̧�=���#rg�&�>��E����e�kѿ-�k��YΥ�H�@nl�m�`����^������l<���%8�5��y�����הKcz ��[V
g���W�T�\QA2�Q�%�O B�:Z�I��a�h��Y�Ex��F�*�b!�X`��#�ÿ��Q�W��E]���m� 7w�]����'��ZoۧX�׵=�K`� ��J�u��$A�&�*�`��e`�}�~�V5���
B��'��p	��e�\4^����[��ttJ���6X���\g�{S)>"���%�<?^)�ru/0^�������^����j�ar��N�+Co�ܞ�<-z���v|�%~1a�K3<s��M<�ä����u��dV�FE��m!������A���ؒk���m2�SQCHKv�'�
���j
B��;{�6��@���-�]�&K��{lǾ!%r�=��3���~�u�F�����k-�_Ɣc�.�mN��B��8ܸ��y��#�#��k1����Z�����Bl;�=~�`��0o��)(�D����;ey�n�P�4���\�KR찻GxK��eu���\Z����yp2Z�/�'��	x=���v��	�n��_��U�K�,��]�1�)��W�k��`E"�J~p=}n�Nw��v�C�v��3b��r?��x(�������Bڋ��[i?bpo���t��o\

�Ui�Ƙ��|�����Y�Y�[�vz^�����J�Ն0q����׬t0�L@�yC�Y+�F��h�i���񢒆,��V
��)�'y�ȩ��<.�����̟�$�q�V��i)�� ��oѧuF��O���t 0
u.��b�:Sv`,�웉pUHe<h�fre���
�ɉ%Qɤx0�ܓp�DM����Kn���ߪ��~Aղv�7k�]o̭p<{^�ե[a6�{P�T	H��C���:��ZW �Lg�"I@7Ӧ�2c�]����
��Lob�m�N�")�Ĕ�2�E�L77���a��X�_�NUS�M�"�y/����[��z~9��UW>gLq퀖c媆;�ܟ�ͥZȬ�rq�>:"0S���*����}�(e��<ª5D`��
{I��z�+[����ƄN!����(�G[�K�)���ʚ��
?���V��E��=Dd�X���
E?�����R$��[es��T��7k��b�Us��UE2[�eɸ�Β9V�1���DM匯�\�����U��=u7�
E+ӭ�g*@�"V7rE߮���Pr�؏\����
잎�.=ߙTN��48�u�?%�J�'Kj�/#B?&�u�r�6��Z"C�1�$�̄b�	�ҕ%s��B��x�Za��C賦bV��<�ex%�^���諑�K^�?JX�H��}�ɝ�V�:�%-�7F�2��������S�N�4"��`��4h"��1�T�e4l4�Pk����'��+s{����t��X�>���Iq�
��F��3�H[�jS_�lU�jQ�Bx@n�:3}�u"3�;3-,o�m �z.�.��з�qjp 撒�$�6�y0u�H�K5a��A!ŵ{E�����M��R8�M�A�:k0�$=��V�hl�j����X8[�u�i�bp�:�UA
���
a����q�lI�ٶp�"ȴ?�����v���v�֖Z��_o14�i�ZS���@���:Sk�K�@�y��F���*����p�搓gO[���+ix!���}
��c@V�֪�*
<d/6�Af��k�\:�t��
G�C!^ѩJ�P^�ڨ��T���oW/���m�D�d"��ݓ���<��*��q�m��6Z��-�?�z�">���.����Jlu��!�g�BBs]���k�xv1��v� GI���ְvP�����5yQ-i|�F-���4�Ed�������&
�={�Pʹ��i�Z�����j��:�`���Zd;�H
2���X?��S�J1�ȋt*��Pѵ~I�TpU��j�e}4Ѥ{���Ο�ԛի*,j�c��0�~8Wɽ��\$<�5��3�Nu_���?�]oλ���Z��	]�O�$QI�;��Mɤ,��MX��k�5Y9��=�C��B/-P<�κ���� ������@�OkeM��hq�"��T�u�
����1q���uuk{
��آV����&Ҧ�s���r�ᄚi�X���M׷մ$hG�aZ���Kk�0�^����_����N�Ş��ͭL��xcdɘ9�P�S�Q��c=[} en�O�A��X��+�a*��9�֞��$#ȟ���u�9̕���D�^J��*3�k�-�%a����%(�!�h+(�Q�8��Zc]���*��
f�4�~�*�d��3�Zr���+5��ܛ���H�t�-�be�H�E,2^�h�����^�-��|b�������^F�(��0�J�	C�rQ+1�V��2SLD܊R녶T����&Ƴ���C��c�a��U�N�z�7�^�1N۳D��DY CR7�y�AK:#R���`T.����@ >6�Uj�Z�,6��"u'��	��
PFnU����t~L���ra�J���O��N��U�D@�n?UYsb_���3���C�l�h����U�Q��ﮐg��ٌ��:���K7[��-�-s���L_�8anM�a���@���3��L��&�A�G�1�PO|��ў_�6� �5�d�K���5���j�i�a�,�y1�4�R��BB�r^���?��:W�)5n5�5	y�d�8�!+9d�����n���n5gؓ�H�� �3����͌r	ÑB��
�kݻ���y��I+��ԧQ�L/�lAJ�5�{���|AΣ��閠�֖��P����3gCt%���0�
���B]*%�iQ L#֌D^a{�� >*F�B��9�k��a\!�b�+��t�p�_a��ؼ4�y���=��m���8�ՋGnN(K�hdd����Z>Օ9=r)�a>t�
���
�kf�M�ؓ\�Nխ�a�&U�ŧ�ok"�	.�����JW��*cDr�z����q���}��d�GKЉ"4sfu�(L�w��^����C�Җ�����<Bm��j(��u��%w�䑂��AC�[�>��^I�W���̠��W��}�.��j�[�%~n��{�=��u�>���;��^[���Y�Z�*뻦Q\�n+�x�w>�|85QH�H�s�]h����ӓ�*Е�<{�n��B��$�����*�gA���X)H��S�$����>���6[/e&��[�#����f�@��jE)�`����S�ɭ~����g���pL�4Ć�ҽQn��t�����!��ʋ8_մ�D`��
���w�������������3��x�'�����Z�$��:�U
�6��٠�`P�e����[�S�c��0�B��ޣ�[z�Gh�� t@��>:�;�(�f�5�����V��Y}������O���Τ�q[��#۵�%���3����x8�AQ�G`��Fv8ԖT��UPr8��Q��/�^��L�������P.�m�Cy����K��2	jk�9_�U�槉Z����y�*��� *�+��R<�:m���0g��<G8��C��L!I?���?*��E��*���ԛ��3bd��'��a�`'������:9�b
&���8��"�H��_�6�Zd���%}�����gثU-2���S6���~������A�����2Ŧ��ɖ|�=S��:��
�k(ꋿe+�n�KF��g�Ё��%�7XX$��\� ��'u�Dܛ��1/������U��(ƥ���L\j�q1���ԛƺ�rŕ.g9�(s�`F4I��;�`�>y&�	�=�&-�
1�iFߠ�;Z�0�8�������(��z��XƑ�+kw_J�I
��9������˾ad�?�&�Hv!�vSIU���ż�*J~Zֿ�s��r�NE�$,zqV1Q�#�p#^N/�lW���>7.D�ko*��dY�tU���@Ԕ���d�bkI+Ri�T%�5�4��J\[����uqSK���FxSG���<L��5@�����L�-�h6w:G�އ��ww`�a�&�vbv��H
pA3�#��\%�(�ad��$ړ@���0�,����l�c
�93�[a5�
�?�z���9��sS
��	����"����h`r X�P���&z���1��O`ܩ�(E
�S.eЅ��T�ɁhU��M�)��`F����'�{��Ndb��j�VB#}/����u9%%�)�Jb]�NS���Q��u�6���B�[��Hk�.<[�{�x�`H	v��~��W�������9x����!zj�a\������%o�o%(�c�����,���}����M<s�kKy1u>�J������PJ�0�Y9��S�0t����k��eW���<�����w��D�p����BT���,�u����}/
Wϋµ��T�73l.�ݩO�{v�o\�`��R�^C|h\5��ii%�
a恧0�I�=),�NW٠��T�_e�ƶ/��qЊ��s�|]�iM���"n�}��'�3^'&�a��Яm�Ь��}&�N���nr1�A".�d-�Y4{��0��䵹�%����ƒs��w	�5�p$�D<�>YO�W9}/אD2N+E<�T)W�12M'�
q쒆+�qt(��K,�����5
ʫD�������H2S�Z�fH{�	I)}�g�6��"�#�64r�a��Ex3wbS��ͽ-s���9��7����뛛[��-(�;�����]���t�0��fc��^��8��y�O�^7��ͭ�)�����G��ͥ���돀�ן/pkƎxtn��w��`ء�W[������}�[�Ÿm�,t��)���@�ƺh��Y.۱B�]g�g������_q��ƣX;��"��^0�,v�y�>�&{c���l�� ����u r�#�>���z9`8�֚�
��y�`e{{�H���l���AW���"�Y~�v<?�T��7é�]��Z�~4'�#���{���y�Nra	�t��}��"�O����A/�Q��#�&򽉕�R߭�5�EA`��^
|~��{��9/k��o��c�^Z�@����g���s����,��u�‚�؛��^�;�`���� Dg��A�n�ΛL
�x�q��@�Ȳ����_´�ܺE@5�)�AH����g�o��ʖ�K�bL^�E{օ=a�ܱ��YS.���x�o���E���凍߀������'�?���b<s�a��Lͽ0,��<��/r�N
�LA��zE@���d!���8!���bfs��?��)zc}��ۇvr�H�h�^�<���X!U����{�gE0@��K��ؾ
����u��dE䉾p
���z�Z�Bo
���l[�\�����jg�ܴ� �������w�Z�����~��o>�" <�,u�P�X�̑�
Hl1�ޙB��1�O���r��3D'���2�Š<Ä���~����[�+�H�M�Kq����7���2�$	I���Y�/k�ku���rJ2��*��8��H�#�VՇ��	.{ 7=� (A��u�u�*����Ӱ�DӬ�&66=�0�#����Qx�fhէ-؀7�5�N�`@/$h(ID7�/g���JS��l��
��Q��%]�S��6�\�!h�Je������	�*P���dVeQ0��KU�!�8!K�O�%��-��_P�j�`g�۬�}9x��Y����u��{����s���w�ݷ�����d���M�h���?��>�J���N�u�v�b�o�����5w@w�F]�ʦ:�>6v�����ck�s�|��^vG���n���q�7��=h�����q�߆�٣��K�R��6�Wx���0�j�up�]�Zo���v��z�W����L�}���Z;m�j���9����a�U�ju��^	�v�~_a-�ow�f9?�ӃGLy��U�w��:k���+���=����P�K�@���hI͌|~�o�
��v���ce�n�|�<��]�&�����ol�}�����a\�8��L�'6(>��1�*l_$�ZUq���sD�ɽ��$7�-��J��n������P}M|�O�Ec��v�`m;��Ț��FpqV���E�n�\��=��˗VVXmD�!�`�?��o��Sn?�,�:�R���f�0a}�r�}�o�dF�҅yϜ��4�қ��J:��|\���c����X˅M��H�B�ߤ�yH>6i��@*^�+��]oNW�e��C!+�J�o��1�6�a��P�\Ĉ�@��X�#̀�P�*��͗�.�\�pk��}l����h�*T��(Y��ҚL@�e�
V߂��Q0Sچ����<%!��yL�q�Ԫ����(�O�Ǒ���_q�������6��� �ߗ+�{ ��`n��	N�k�7��2����:)��������������ZC
��checksums.yaml.gz0000444000000000000000000000045014364637605014621 0ustar00wheelwheel00000000000000��?�ce�=V@���"�o�[�����Z�Ryz7)��cfn����
e�^�ׯ�NJ{�|��^c$A+���4��2�a���0�h����n)�rm�V��{|?y3=}�kMG�^���Th�LF�W����]����f��)��|"D�e�YK��ljZu-i���P��G��d�u�3�q��/j���RF3�m��.�4цaB��Z��oN+9p-^�����r.qT�m2K�uB���YN3�5�G�S?�`�R὎��[�I[@8���As��*u_~�
���PK)J[�"����share/gems/cache/rack-3.0.8.gemnu�[���metadata.gz0000444000000000000000000000230414442217575013450 0ustar00wheelwheel00000000000000�}�d�X[O�F~����%���-!me�Q	Y$B�>�����=ݹ�saY��o��,��]����9gf�s�s>�1��b���7(]v
2ˮ(����q�"E%d��r݂�(�&�ԩ"B6F/�Y�]���H��DԻZ�E19Z��Kn�TPi�{n �
�7��Q	��eM9n�˯��_ijo⯏�l��?���1h@1P%���1�7�kD�y)���CA�D�rS�^=��x��������Y����ڄ��d��n� ���-��5�U*,<=߂�`��XǕ�9�aٹ����W��#�4���ƾ�	0��߆��%|��G�f`K��
�@�+A�Y�rT�6I���yA
���h�h!�p�,h	��=�VP�4�qm��K��5YT�y{ss��Mʶ��
�CX�Z�\6
Ȋ�I���x��x�3���[Dž���˳��M,��Aja�nV�,�9��z�V�gHn�ȗ�:.��p�^�`�UpZch,��H�a�H�L"����`��n��O��"��ҷ��l�;*�`�hhn�.�� ���y7O$��'o�/N���O��7Wg��9�h%�5O�����M|~v2��������$~�HIL��)
�"��E��Kk���6}V�l
jy9�`�ڱ�Ӥ��ܣUZ��G�P̽�c0���l�㥸[�6
CImI�GY{�6�j)�]U�}4ҳpwppW�����B�(���k��T���п*��#d���h3�8:D�-a'��hhVe"����+9�Q	OY�t��^���lJ.G��A�O�T��z�P��X�n�<�@��������n�o��H�|"�1]���0�5��r#y{��|*(;�a`�o*���\5~��+7N�E�0ᜭ�
ip	�гSZ�AΏ4�5{�ل30���荐�
qF
��Gr��ZBC+$�s��Ҵ�E����6�$�T�0#���GX�8�
���U:�L�
߿Sʭ�D�2|�S&���E�M�8�T�5t��=iG��F���:�j��]9�3Z{SB^jO#��8,�
֪kC̢v��.��l�����`a��,��=���kȾ�����ks�ar�̶AT �$�m
"6���~Y^)$<��Yd����(�^Jj�9�����8�cL��b�S�p�_�u:�(data.tar.gz0000444000000000000000000031257414442217575013403 0ustar00wheelwheel00000000000000�}�d��vٕ6��QT�-2��M��L�)���DIY�_�"@�$GHAU�V��?�{ܫ=�I�z�7�'���%��]]��U�L"��7��^���nO��+����t���#��������t�[�����[�{�{�~gko�A���yf���qM�i�������Qp4�Q4IG���d$i�&Q���H�b�,K��EpS�^�|%E4�D��I�^��2L�4	����4,��z��<��p0��8M���&Q�GA
�,J�Q��(��n����E1�67o�K�7����t3J6�ڝvgs��h<z|ܡ��?�`�����촶�6��mx�G�"��Y8��(�ig�8�A��n0o���ēnpN�Q��?>���=wQ�y�'�����l>�l��F3����h�Et&��
����Ңv���G�;n�O�{;�?��i<.���%�x��(Â�8y�-u8��Ωu�=��9:]�^���a2��o�~�}O�"�����w�����E������.g��`�ش��k���]�E43k�y��5�<�5���nP��|���[����mt>'I���9��t>)bZqq]�[�\�N�)m�Vo���`[E�b���־?�vkwwo���?���'I����Nk�3�E�R��ߝ:\���/�I�E�uoQD�?쥾۟�t{r�{���۠��䲸7'���I��,�9.o�+��������U7��Mx�<�{N��"�˜�}�eiF�~D��E؁PG��ϳ�ppBK�Mo,���D��&�R<� G!�`�^��:��N�[|�:�)AlWVL�<G����룳wW�ﮮ�~<?���*���{}���K��?lI�}^Ro��iQ�E>m`�ǟ�f�o#Bq��[Zp< D@��x *����s`�*M_�=��t�f�O�ԧ^������6=>|x�#�D��8}κ�<'pLҤ5�fY�A��W�tHM�Q�y�N�;9����JЎ�}�_�ݨ�����_g��~y��y<\'���q`7�=���l��Q��$D������O��DG{XuD�X2!rk_E>�&w<s��,��ƄZ�(�b�^:���іwx4;+1���9!�g՝W�o����$Mo��ЛM�s��~ۮ�B$��� 3+���:�*>d�l�ӌ`hF�=�π0��]&�A�H�C��fЍ���}bX����YX�W��.����z�϶v�϶Vb�b�y���ʻ�pc^�v��*5ݕ�<?>Rv)gZ���و�5�!t��8-������<`�{�q��I
���`WA)1z]4m��l^<p���{e
���8��q4���sy�A�9���9�G	��ٛ�t�9� �`y�*���EE��3�?=S�=#��|�2 �҂<��tBۧ�__9f�>�E�[�;{]Ԯ�o\�W��f3:-�ք�?��0K�DI�o�%I����R�� D�#9W�C:t�	��ķ�@Š.�4OdZ�Ƹ�E�כh�3iN�QJ�j^�o��߱uC(���{��i��I��vO�͘�T)1fA�	�5Ƹ>�(͉���SX`��#�
�%d�ؠ��L~1	֣�^^�x�1a��i�x���r�����$wE�q:�B�9$&,�m<��ށ���a]v�4����X#m�8�o�K�n6��j��}����ܛ�:�"> �^�]��m׍o�Qw����>qO�l�\�$���u넋��n�(���4a��	/�/~w|q}~qvuvtv���S�RׯIx��
����H�.��:L�ܾ�ƈ���;����/B=�6�dHO�}������&�p:�pN�3\�iס:�D.�I��dѾ���u��批��c�W概Y2-�i:����~?�� �o�����yQM�7��b���+_F�P���{�8pl�y����@��K������J��v^Q��H�P%(��T^M��1���
MF�����n��[�O�L-�����l<
c��^A���?�����0�q�y0� W�8	t�Ҕe#}��t�J��;#\�9i��m�mx�zI�;8�<zs����Û���ӓ�+,�B�( [�O�c�Q�
h�q�Į�}�M�����:�atG��
�
B���&���XD���W��һ°�j�8K�<"D=H1�,
F%�,�F��|�����v�rg	
N�e%SV֭���;�}T�R���H��L=����N���㾌2ZP����(�7�E�l��X�)"X���?p��5��#(�J"�ä���1�Ĥ(k1���%���4(��`��~]Fݎ���~8��i��`NT�
Y���	&�=s]X�y"ˎ��_"^e8N���������`�(h�R�G�	�[0P�ū�`{�9tG��,'eȭ��>Q�}�?{z�Ð0��u bC�Ce��L��d�&ΕՖ=�Sŷ�o��[��Ӯ(��C��z��)��.��<gu�Uw"��a<"�_��Q���$gѱȻ�_c��<�m�e
�o$���2+��ّfO;���U���x�y�#���a�=/����	�8�f�_�(�p�}�Jt/��a�0���0����DS��{��4��w�
/����GD'��0
�Ao�`y|<3BB�Q�n?Q�n/2��Wqh�=�����æ�v<݋	m�CL�$��rf��⽚�1<U%=��YHЮ����x�����'�^Gl�<.�ow��P9��ae	O�>l�Ԏ��N&���ڎ~ƬK+���hF({�y)qkK4��z�Ƈ�$�ȏME��T�����DԲ�\�����A(��0K�N�l���4/T5���J����Hu�3Zˠ���I��1dGX�� xu��^~�l���Wĉ��>��*l�2�*Y:���6+%�a�,���<IÁ|5���@`�Y^��t`S Y����]�x�UV��v$�V��Q���G#���q�Q/�	-�3�?��<�n�a-�U@��'=1��"z��-[}X�ELf���`J����!�Z�.�e����lؑd�Ω�2(�nZ�D.~��3��֛��<�w���$B�Zf@"��~���šО ������+W���vpp�fG�9�>�Vzq;~�;�]��4r�Qt
e��l�9�E����cz+a���DC�;h�o�xbxL��[ӡS;�-
�����K�qcc�1�և�1w
�%���3�"W,f�<5��5��>��Q��S\�&�g�h�"����$�ϋ�ޱ8�
���֝�gAwiv�G�@3ľ�!�Lϸ��~S[������ͩ�b�'l�](�#�@r���6��jz�U��{�2b��g.�0��}��)Z���0�����T,�q�z�U������|�j=k�����1�i�0�VQsR�Ԯ���u?����b�f�"���YDm#!~��^	v�;v$��p2��՛.Ia��}9,�a�*�=�< ��� S�Ή�����a�NՎ�2.�P_���u�g�PSB1��I5��P�aE�n�,!7���F���0��r!�Ō;C	}��ݧ�	|��vE4��N�
��[FbSB�l�?z��h��%�h�<�������&�Ô�E�=�j�F�Јz݃uV�
��#�E��>�8�T)������gG7�a����l��n:?�ug�ۀ��ԙvpu��@��JR�p'}9���]���&k7�����Y���z��#�ֳ�iڨ݆ȏ�T�m�����S=���K��%��M�h`T�Zwj�Y�
}UK�ѡjs0�����OkEc�I����g!�4�Y�cn��Z�� �\D���5����{p���"gxR�V�a)��t=�^�~�zD�l_;3�j�e�'¦��{�����SU;M�7a��v�O��](�xG�O���ᒱx���5{�+�c�q���@��g~7�E��9!4�ل��"����ΚO0֞��̸�Fb�&L�Io�(H@���/<�Yg7�g6���SCn�C�wy�8�w��&��]_�{�]7�?���N\�W����"L�„�~�0G-y�MJ^�K�/��u��nu��v:�¹'��{�n"1�v|���P,��@\�U�eu���
C�D�H�o���d�=
����=���L�Ny<�����ߎ�l��c7Aߟu����#���8"�7����
�x�N�5�.u�'b��U�������cp$7B�ͽu�:�֭�e���f�N��
n�����_���Mx�nsM��f���'��J�>3����bQ>�������>�Ў7����y�x������s�Ќ��A&<�#�nĬ6$2���z�t��;�vg	��
��Ɖ`�ՓL�i�a�&��S��1����݊BCg{�0����k��9XÐnb$@]P7�Ě	� |"Һ6O�=�X��XqƆFY��.GP�M8�g��O>m��|�r���<&�[�_�/���Y�N�R����/�̖0������UH�g����Nģ�R�mo��+�߯���;�>�w��17J
����g*M�|����TԹ佁K^�;��$y�@n?º�P+�U��*
�,����ɉS��%i={qre�J�'S�Vn#>�M��,P}��{�;|{�4��]\�i��͙x��e>} :x��_�a�����ʺ�R�50�e�(�Ɯ��@}*�оK��Y6���b&�o�)���wğ�!
]u3�{|�V�7tY�a�W�SG���
De����5�o�����O��=h��0m����D�OO��h����hA�b�U�����6u�^��/e���6F�i�����$���
�s��U�ʚ8�� r�o��։Q���A����a/g��E�x4�G��0*k���Ɨ@�W^����
�b��Ւo ;V�}���	ѷX����)㍾�S1۰}�{����׬�]C1����
yX��5�,�K��U�H�K�-f)m���ʊ1c<��X8:V����`*��c��w�%�k���:U��&���X=M�OP�|���9;h9…�M��x���Y�tث�.�xDwp1�W��d�/�uT����3i�R��&���K�4�ɰ��d��[���藷P�Ő&c�5TN|Q-���ͻ���o�Q�ϖX�	��Dt�(��������d��Oj�+�z7�h(^U�̊�G�B4�R<%y��r&�#ף���*_?�8�o��v�q�Ɨ���q��	^j��%���qUm�òӯ*���N�Ҿ��D�4���8(�ˉ"�*�n=X�������D���ݧ���g���
e�
T����X�5n�#�P�s�A�p�b��x��I�C���h���|�Fyy^J�r�r���K�*B߳���U^��	�JL@	2��-��E��b�ܢ��2ޘlc�|j�J�_����P໳�u%#��*�TK�̓�m��e�Rݥ�k9
�n�O0t�-U�IVQK�l��Y]ds�Sc��h��u�IwQ/O9�o�>�Tqn}��>�;��i���T����:���Q:x��,�2���͇Z!k��z��D�x
W�t旄*@ k����K���̈9"g��_�	�rJZ�{�m˒K��&�
�o��Y�^�4.Q������T�Rb_������l!k�@|Ì7��Ǔ�ۧ`F	�5�O-<�TBHٖH�'G���<�)~��v�v��6��t��
�h�(�����(n6��RV��7�uZ8E_@��u��~��_Z`���J���ᘨG�����(�V��.\�zP�œ����p�9<;4Zˍ���iz���P���.�tG�n���wꇗ郃�w�Nޝ\���d~~w�����w��;L�0�%��W��
�;��o�;�Jn��!Ur� �\Dڈ�qF"�1Fl��iDX&f��aM�D4���t
6|_f�Z>)�(LPr��v���e�g�,<��G�[����w'*bE5{�R�����8|���w�I�[�R��e��1�@E��&G_�X�f�/	�M᥎&i2Z�t�s�F�U��eU�n�!�د�Y1,�L�T�1*��[���(,�:iߋ�6KHJ�O���E4�;+#���5S��M���+�OUgV����y�fW2]�gMn��xU���87a��(��_٨�aq��s���a��"t����c�u������+�&,e42
��,��>�1�/d��
��3;����z!ZS����X.��m�5��M/QJ�>X�E!a_��"��ć��#���*�y�!t-��#��`3��PQC�aφ��r?�����x vM<'�q�:�W�9��^UnU(a0��f��c�t��`��kߋ�4����eè6����J����@��ރ����ܤ�Xԅ\S"R:!��2���ß��b=�$i{�{�O���O��ˣ��Ѻ/�dp(����^��qzwlTFFbe���8�J��Z%F��}���C�^+���aǠ
͒��
��ϵ~i%��9����N	A(~5�z/���4F�}yyz���g���r�4�k(���m4!A$a-+�+��$.�7�g��F��_�Y�3p�&�W]%8V�i����:<�4GQ�+�ON�e�G�I"��%�����0Oy���X����������o>ȩ��ʄI������tOk|�Ϛ��!��\�}Hwc�Y�/�]/5���ud�4(q��Y�S�uT>mh�=ُH:uq���ɻן���Ӂ(�V;�|r��N�y՘�<��#3��X`���"d�ya�`�vI�L-�ð�!�K��5d���"�G6���^�\d~p�x:Xo(���f>Y����(�|O�-�E);v�/���q/�(ψ?��A9��"&��덡�X�`�nTr����9��,�����_��3h&ƞ���/�' �aP�H���=q�]��T�ȖC/��i�b�1 �����ۨ�2���@��,2g�M�L�uF�"�}:�ƭ�/L�a~����,�[���gk��$����
�C�p3�LL�R�
lw�a�/jW'z�E���b���Nņ�W{�
�f�'��7�����.�����3Q���΄���Ţ>�$>,��|8�|˝9%\VD+q�g;P�8���b2���������K7;�#��&����4�!�w��V�h-�Q�i�VH�on��\���SΊ	.
�z}��|�G��!��]�~���/�)~��x�����-=U���A�x��4-Zln�e)
�LK8�4���m�� �b�M�����>���0Xn���o�o�z+s㽪�Y>���+$4��?_$}��…$u�[8&.1�@X�]���aE_�kZߖ�Y�����[�6����mA�U�xp���w+�c�!֨Eo=)��7���/��q���!t..�Z'-c�22<
��l\2ꅲ��f�a���Ȭf�p��1A���~��=�Qs����N��qC,���<J�i��!�M��G����Hd7�Y��$,�`�����L��	}�I�o��J��Q�ޱ��[�H�
���7ßLС	`�jF�`b$��(zG���H�I�P�b�z��Uq����F���%�ϋU�7�X�i=
�?��k�Oar�����$�ؤ^�^��/�r�A�6�կ�8{��tD���"~�7�(����s=%�W���ع�	{0�₄ޢ^�r��	u��>B[7]�0���8[���\�S�ޱ�3&a.�Q�|��W����\}�"N��7$y��:�i/���3*?��^�#*�Sb�&��u�Y���ݕ��4��|xzz���4��\|�!�".�7�����ܳw�tչ'�Xr�O�Do��q��
|�XZ�*����Kj�;��_�|J�3��xj�-I�
��z�d%��5np�^s-m�սF9QB+$�:!�}M�Qr���#�66���s6���i����[�8�{ͫ�r�h�֯ˑ�Bl��}-I	����(�!�'
�3�x�vq迢�������pcC���_��������JZ��Ed�j��
Y�����j�ue|M�u�[6cVZ��冷b��F����f-[Ǝ��J� ���}��>�W��S�(	J�Q��}c�
Hߊ��D�C����xs����

�i�������n��y8�ו��=�s�7�C���:���[��o贊/��j��\�[�@3�\���|4IZ]9<[����̤LdH�����
��}�Yg8v��=���=�E���K�K��W"E9~�� 9�(���RA8��A%+B�^�'ɉSE5{��㞉�����?[z�O��m?8��t����*@+���"(��f��jDN^rJ���&��ҵ�YY�>�Y�JV��ª��2pz?�{�OtE:��~��#�v�X����+mTBt�����t�=�p��B���x�nS|2bx`D�Xl+<�:�GF;^^���7U�	ZN�W�X-����2&�Ǵ�8Z�e���/U��F�����k�a1�\��$fA#�O�qb���I:�,�*��jH��8op�OD٠DU�t	��_õ̰��YEZ/�i4���h������=�-:�c�1�rnhXt�N��[	g�C�
�Lj��>u��y���j>ɉ˪�K��7{n�Qm�,=�>t�F� NB|�Lh�HC��3yZ�2
͎"~d��Y�D�O�jw�j�Z;[K��c��?M�B�`&
���S�����P2���p�B���
?�le,n��E�c�*;��$��)��%B�̗h�1����21�K8��<&nһ(��p�7R��Pj��\�毹=�N��A�6i:�j���J���*���P��
��}^�MBH������p2���xj�H]���)��%���|ّQ����Z8��Ұ�,Pq��7��ƒo�#��Ē/?�f�H��V/.Lu�?��Q>iä����"�H|��s��8��7��z�D`9��U�\��ȶ �sf$I�ж!"ͅ��Z�d|U�1��p֦E��L�!�͢D�M6�"j�z{Z	^�8fɆK4R�%���rW����Y=$�J�E$�,=6���d�g�d�z�ܜy4o�$��}*�Zf�-�20lw��j�
c��j{����H�[4
��&�d��v���˨T߽?=�r8_^.�fS���XH�l��U��o���V'1��vms"�B�$�+���z�����y
�뛸;���%��=Og�8D_�F|��};�l�Pi�i����o���04@�3`�+�Q�4��a<��M4%��ߧk����|·+��|�/�p��V�p��dx��##VE˨ѤtE�X�.����H�u'ї<�R�����)Ԧ�u�A�q�U�̑@I�>tz@�K��1k�\ֈ�fz�0�tE����S!���zj2�T����o/�ޭ`����8\�&I�a�ƣ�M�e,6�Ewyp���F��"�"M"0�%��{7Ń&�����Sx1�Qu�r|n�ZbL���Zd���M�Iz5��\j�J|���+����di�p2���=�� ��E�r�O�5��~a�t��80
�6f:�l�c�[�S����A
�1��$��������r��k3�pX_7XN:-zwC��y�<]���0M7��8�Œ����)���&��9���3M@�����?o�(N�R�M�������.Gz�ML�s�������øM��5t���hu���8T���ܫ0������ETĒ�E�NSxR��G��^b������/���~�0b�04��?�h�c*�x=>	��o��
�a�BP�#@�m�K���NJ�H<��U}B�$奱D��l�A'�0�/�RL�ۓ�6x�H��-D4rq�s�d��Zw��*��w����Di��'w���8�*i�U�8pҝ���)�Z+ɪ^���w$��+ş9Y�PKI�`j�{��E:ϪqA�WqH:Ϗ�Ĵ����Ҥt<\b��]9�-�{0�pa�4�w�T���G�E�Eawz�)�rA1��94ʡ���q�8w��y�da'��*"�1ۈI/�"��|5�����Wts���2xy|~q|txu���^�B~�!�>��m?���3�G㶲�O���vY`6%
ϑ^�{��w&��	e��MH�)�H
]~'l�ba]ġ^���c�T�ez��t&�&c�Y����k�k���4�-
���a��oV�E����=bN�K�(*J�Qˇ`v-���Hi���@^�-6�1�ջĞ�_�٫'�N�z���� �o�ž�^.8�Ðk]J���.^&`<��sޯ�'E���l|ٟ7�-'!��g��D�=��*d�fp�&E���8kȆ�2ߴ��m����=/ݪ(u���$�1g������K��E��#m�����!��~�j���ܽ\pH� �0�΍_�������b˸Ꭱ�ˀ�5~�yx������s����?��<�#z�
�7~���0��c~�G�3��>��U��a1.��
�A��Jq�X�{�FS���"$��u_]o�n��.�=0u�ck;oc#4	a�ڥ��$����Ϝ��+˥��Cɵ3瑘��l��j��OV�pb3GZ��N��#kᖠ��}�Ko�+42R؍\�pB+ȗs�$d��R��h�
Ns��=�e�?B�{�+�N����r^��6~�_E�s&=W)H�p<�0��D������4�������`��4�J��dG��~�=#
!�_��W�-}d$��3���}#W��$�I�œ�g�;P.�wG2�l.���d#��bԕ5�k{���Y}��_��dN!x�݉~�S�[��Ҋ��ǝG3�2SZa�u��ǽ����瑠°����j������fM,�Ȯ@g7��ӄ{���2)�2iB`�ϋ]��
�	~i�J�pNjã�߾?�:9?���>=y{r�!�|���v-c1�)�K�~����ow�o��#��xA?��
�5$�U��{����8�Ϻ�a,��0��'*f}��3;H�6R�}2����IK�A�A�̠EXXh��A*\~H��L�������4���t��������9V����g"uxtt|N�C����c��s���d���Mo30�OZ�FL4rl*�Oڣt �k4���\�zj3�c��-͌�%:o?ݒk��s���>�݅}�^�4�Gsv�^!<�y���ms�%
oJ������s��j���HXOk���?&k뛨L6
?��4H��^�I�O�	i@��xK�
g�v	�3���0=�Ay	xҙT��n�3./N�/�����%a�%���旰ñ�������4�.M�⅖S��D�T;�v�ל����tS���y�{��XR�򰌐������C#พE�~�u���2o#&)�>�I�L\ngg��RXQ��(4:]4a��O�A&Wo2\e��2�N�#Wi�yRw/�n�;�`1���a[�9�%��V@�=�9]t�H�Q D!��Q�����9�p�_�������λI���~��:�E�g�eF�jm+���<%��Q����0���#���f ���c�<�-%+��AU�DE{�5�;�>I[���2��ꪂ�3-W�&����1�����*��0I����w��Р�A���q�-�
��J<Q���Ph�7�!k�E*�l��,�h2��#o��WA�a��G?�'r�<�ưD�	��l{[?U7�N�-��"��b&����^�8��p�y	���k��&�O3��R������	�\�"��^�A4����-�u3}�O�{��H����#�Ǫ���תq��3����.
�t��ztq����.v�PY��G�\���d���0yܩWվ�#�ϧ��1�;�;�n�K*B�M�hMU͍����
�"S"��8 P�/�EBnK���*����JMZv&j���4�P�(�X]�w~�F$�_���QN&���{�-�fRc2����L��e���)���֍�#���$�qB{�2���5|�f�[Bdٰ���y�AQ����ʾ�X@��*��+.��@g�q[�g�DD�?wO��(vI{�Qk�
�;�+��P�}�k�Qd�Yvxꏗ�G��Ã~1XFy\��)"|·]Z؉"����yd��X��$����JI��?��<�!�!K��b�D�&�
B�B�u��u\:��Y'ͽ��>�*-恄Vӕ��la��s�l�L�8OM&Ŏ@%��^��b���ү֔k�R����v�<ȑ:Q:�j��Bb�=yƴW��u�8 z2b�W��Z�ƙ�N�g�D�ʉ��	�.���,vv�V8Nә�sڤ�D��??S��roN��&����;��
.q�"�E�
��@�G޶
��/���ٔ�חeRs�VX7y���u80��u��B�����j�2s(E��ih�9S��ޠ*�9I'��>=�Z.�����������i����L{,���]��U����5�j��{/�>[�f��+p҆O8h<8�T�,H��>yv���HV��M|}@	n���z�t�h8E~��q�㍟��Jm=�kj�;Q�1��+��J�� �g1�;�D1���[�2h�|�a-쑗s64��yR��m)���y_��^��Z\�.z��R��9Ѱ�k��w��.�iQ���`�W����2İ�똑A1"��[8�F+Jr�d�b�@�@��"~�^`�ё������
��籍����a�=��UX�O�:۬�VbPDr�j���W]���z����&4脮C6b�jbU\B��rL�LP�C0�ۚG]W9)���}�֊u�w;{u:	#��vvy]�..��2����J��&��7LJ/7I�W�y�EV�+qE�&�#�M�+az�z�q��x	��iUM�Y@�',��)��.$%f�ޟ�b���di>x)|�����!��p�I��޽���`e,��YsKI���$��$����Q:÷���k�]�Z�ȔY�Y��!�%f��W�٭���h9u2�	 �ˮ`�f.�j��D��txV���e�RΥ7���b���j�,E
�v�NJd*����3#�KA�d/S�-)���6M��X3��=�o\�=�q��Js�]�}8͛��DM��)xN��8'�x�\�ڀ�Y��)��1�s:�ѓ8����Ć����KZ�6眓�����#�����iI�3pDPU����|�K� j�Q�_Ei�L�����"kŊ@#�\m�'�������!��{D��R�0T������׏R�^�]�蝼
Q<y�c_E�w�W���gn��OL>�uN�Fh
���Q���%���ׯ�.>^��y��['����P��Mud���$�eh �^����<Ӽ��yg�q��i0�ln��ݵ�>IN�Mn�e�M���Ct:;m���c�+�$�\r�z) �fğh%
�7��7�����V�ik���8�=��Nk˙�P�`Zn�q���f�����p�
��*������D�&y�G�ic�$�v��!�_�p
tW'+{�����G8%f@K��]ˤ�2zM�A�
!�j�c��-w��³D��zK�
�F���b� ߃�u�ۤ#�'1�{�;����f�m����V�F[m(��
�S�!/0��Y����ܐ{a��c�aů�BD�q.�0�s(�����m�3�U�ct�NiۜҾJ�������YRzYA�q\{�ny���Q�[<쯿�m������r����^���#Ӌ�!���ke�65	�53oc>��R;��dB�&c_����e�9(]�/�r�ܢM���G�QV�+]��:a��U�t�@Y�]Έ�w"B���y�C�����2�e�)�O./�rR�{��E�1���n�
�$��jdz�84.���
Pʾ0�$X���r^\��hշ��!v���Z���Z}��r���v #�H.�%�{�n?�0�Ĥ��T�&�9�4��T�x�iv��u�
[I>g�-;�a�!%�|�R� N�άcaֶ6����F[l��Dg�9�]�a"$@��Lо���(��s���1OM�A��c>9u\�����د���7�$���(�M�fm{���zs�] �ɼ�v�<(�:�bC+��Of����?
�]`�e�4fδ������?G����>�h��?�d|B����p��hL�*���-ߣ�W:q4�V�-3����g�ط�<h�Î��>7�prk�}�w�'�*g�cY����`���FY�N6í���v+��A|�֞��69%��f�*�q(��\�E�p�����l�_�f� ��,XMֈV��ҞF��-eG�5�Q8�Z�pF t`�N���+�[q^��i�T��N��n�\�{!N�����-D�Va��]�S=q�}K	��{�����K
�bw�9p)�m�Gĵ���	��x�/g�(9y�z0�l�{m�iƒ�.Q�t��)�$��Čh��SP�kD�B�$Y!sy����B�%����eWV��U����� �bS����˺W�.����R��e�X�������#A�n�~暹�>����������A8��H����v:+�|��[/D=��~*����IBH�
*��=����������Oq�L�����=֐�0�������5x�K��sb��6��yb��~���Ü�*��P_��QR#�&V!)J$��4o��R�ᓶ���i��0$�����4�ȵ ʒ1S�E������Qqn��S6��lڹ�:�Ra����Y���9#:|M�_�L\�mHߪ�hՑ<�[u��4"��R�����k;�%>_8�!2ޥ8�a�=�3,���rć |���ͳuy-LJMlP�a3���
.D���id
��7h�f��!
%<��'2��|X0�"���v�HnS3�s"�@��h��;B�!iwL�Ë�t�)I���Q͎�n5������e�W �2H%є=�٬��\�n�@|��k���iji	�ma}���،<�R�Ѧ1�f�U��8�L���K��K�U��49;C�N�Ap
���=�l\���M�}
�ڷ߮��y���.���`����L��R�!to��U�0�����S:`�qO��=UQ<��������{U�{�؂�����;Vճ~�����ǭf�S{��:#�K�Qp�H3��cDSA�0�����!*�<b�.�"�pYJNO��u)D��{_�<����%�O*R��>��)�j��T)b�3�L�qUK��^��)N#ʔ�.���4���ڛ\Fs\�#�����#�2Ѯ��ή�}V���hd�s���;�w�������c+|Z^�i�B�Ϟ�,+꛱�H&��d��DN����%��%	+7]�վ����W5~S3.����@Ԋ�Wc��M���6�,ʱ>9+��(}�h��+��բ����Ic3�;��5���ڛ2�L�e8r�u�t�yE�y�[�2�j��(jM�5lC��^h�&���zT��^��r#W�sE�Q��NkŧrJ��F��^P�y��8�E�Zjg�r)q�\���� �Fc�/Xב�����gjd-U*���!�B`Xց�N}`C�
�і�ɨ�53�U�,�d�B�Y��OTʸ�YQ�4GG���8��exG$0���Z��B�y�d��R�x@�Δ0���g�!0����f���C�܀/7�-
7��y��D��3�?���u,��M��l)���+��a4E�Q�o��9�f��D����t��PbӚ�$��p�X�i�
�t��Z4��;�D�e\���1�����pJ���,�H(wt��,�]�E�C�<-�/�Ф
Oz^�O��j!������]ArFu��b(!�*��Ec�C��gk�e�cW�-�x,��1Z������ X��"�'e����I�C�v6�������L=�N����+vZ��@��h��V"z﬋�H�ۧn5u%z۞>�(?��!vv��UT�F�V�ͧ��G������4�X��SI�j���J��;l�t�j��OMV�)t`�qhOj˜��n
/}�X�+��WΘ7'�!�LbB�k�r����^�`�O�N�"����k�vxg!����w�m
¤��~ְPB���^L��1���Zj���~��*u��*st�:�������?����m�bkwww{{ko�����o�"�-`�Z
����v_�^���1J���ܤP�k4'ι
IR�Hr� /�}�%]�@�U���;�7����t�8����Y�yC�y�Q��za=��m�	"5Ys0�;g6�Wޟ#�;�|e4i�!X�v��,e�z���8�1�ķ����X2Xr�7T��ɰ�$D4S��m��7<A¤�Q�Ѻ%?���� �����F_Դ<bD�FH��>�oa<V�
��(�U:#���[ƍ�Sq�!z�Y�H[,+��L�;��3H�%w�YC����`p.�%�/v�g۰����ڒ��>^�٩�D\�xu�4���F�֗�"D=~J3��Ͳ[��C�\+Oѓ�գ.h���&�P1����{����vm�C���m�a�	�-� �%���d�x��Vm�<�V)�,W��W5�����6�����7��8�y+�����H���C�ks��(MC>NZׇH,h���`|$y�JO\���јM~�FtQ��+j6�U�|d��>��7�&Ѭ�]��K-{	�N}�-ʌ���ON�e���5IY��LJ/�Z��Ut�V.��6IG��L�/�- �iݯH���ZD/D��&�p�6�G"�	�����zF�k�d�%��9T�ͽ�~���?�V��a�<���9�z��q���Q��a$�4;�p���I���flu�;��ռۜ5j��S�v���(�����5�JZ��߃T�<C�j���.�C�&)�%�2F)����&�^�Q�?�c�Zb�d�e�-˰�G�=搲H�M2߀
�l����N.��&=�!?��H�� �r04v(�%�d��B3)��j��7���#�<p��$�V��SZ��_#����)�LM�s,�����'a$���i�j���-�Hy�{X	��Y��1��D�+��ɼ���+�˅��lR�Wh:��"m���E�Y��Y��
7�(iJ*�;�9���
�E
ݡ�����v}	�� ���쬍���gHlX,,pD��Q+�Gr�E��7�a~�D�=4X3�8�bz#�_qPG�Ch�oBV�78��?�Z98�����40���e�5�%9'o��(��;h�5p5�[S;��?*8�=�j����<�����o{k{�"�m�?������F#$a<���?6�#N2��֏6DմM�F�8x�o�c�ZA�n�؟9�a��������3z���H����EM����� �j�h��y:,��ǺH���'^��Gk��cm�4����f�e2�3b���]ċ����fS�|^&�n��ل>��o��m��&�R��ǜSp�9F{���1�4Bl����$�~8�B���k�n��8o�Y�;a�<�Y��8d1�i6M�F!`�i�E�A�M+��s߽S?��P�wj�[(����s�y�U��ﹼM�CWo��˳WW/��G����w'/�_k���Z3�pr���U@-.�]���
��p��e38������epv�8y{~zrL���;:}��S_P�wg�HBJ�^��P�:9��`o�/�l_�89=����xur�c�:� �YLO�ޟ^��/��.�i��4컓w�.h�����4+����.��������/.�Ǵ����2*������m3xy���5r�Q�n&	>�9�O
�����
~�bV�џM��ŕ����^�\b�.�hx���&'���ݱ��S
J�OM��c���LJ�4�%6�7n�]�_�+��縟�o?%�J��n���m����O�*�o"/��g��:��k���1�����R�L���n��S�WU��ADC��ǃ������/�[��.�C�r�!��Ɖv��-�ytS-�FR��,�+�H�«�xt3rQ�����4�
�M՚0�4-k[��D�$���pҔa&�
x�����f�P=�Q��؄���
�Vlu�~2���b���?�…-1܄(9O``���"�P>D�e�`ĉI�X��z�T��!�8��l
����,�-�#
?��
�g�Ě5�Zȗl�M��l��;���)��Sb(�s2n�6����IU}�g���G�Ԋ�6D�'�'3A�%6�1���?ڴ{|$��>�?�_Z��pC�k=�W�E�rFI�.��+4:e^r2(���h3qa��vK[���b,�^��e���E�h����5�H��RJ�.W!��ɦ8�t��<��
����
����]�W�x,�hV��s<�a()�8��k3,t5�O�i�S�*1�Ӏ�x����i�G�`��?�k3����X�4��f��ڧO
h�R��tn�����]X"9z� Аg�t���6�=�?���[��Xu�����톷h{b�%H4)I��έ��^e��G���[�R
�7���QZ_�8O�loo3�h�*��WT���l�9�6DD�yU;PS����7�`�8��W_��<E��17�i߽>y���}�!������,xr�����"�I��H,0��3�'����\���ΐ]�g�祪ŀ'�y���
=���q*K�#݊��0{&�"�6�����ޞy��**6��E��|}�m�.�-�v�6��>��i	Q�	���~���D���v������M��XچS:�p�� $�GvX˧uW��W�<([��Z�p��h�}�l�I�Z�	%���mDbRbpb���Lo�"�'6��9K�R%��/�ϙ�K��(K�Z�T�!7ϔ0���-���F``����~��gj��*)cNľS���0e���_\��n3���oy}Rŋ����/�S�D
a�����S���R�
�,B]�VT��o��wo�$�Ʈ����z�K��^�a����ɠ��"��Uk�fF���5ː&�a��HQm|��U]�p�M�������ޏ����e}8|1���ޅ�y��o���+�����6�.���E��,��xENv^_��У3�J�C������l�6'�y����$�/�-P|tM|�"�/�d�E���'�g���л"�&C^H^�"4���8��r>��$���zF�-IF"�����]u�G�z|�"�w�V��4�B�,d�����M`��Qo���n�tv��%�rũLj�P둊-��Hb��*`Ai8���f�"D�C��H4��-���Ec�Љ~Vo֞�,�	�P�zyL��VG4�v�y^��P�]�gS!�M��lqԕ����t�r��';�	Df%��t��,{N3m�paND.Mo�]�X����>��tN��Ħ�w�i��z%�Z��^���}<m*��r�'?���z��M�t��C��u�����]+�`�ꤙ'��E��ͽK}M3k���R�y��Eڗ_��_-���Vp�2��}!��nuXg�m,E��(����Ϛ��`"9P4HL�FlpPiR�7�irP�y�TN+%F������:��~t8�M�E�lC��H�hG��s��x�`������xdM�	�-�S�i�,��N
��X�<����8*Q'I� q����X5
�$�P��p�`��>'d��AP�,@��GW�M.(O���y�}���/���b6��=��s+���z�3-Ӕ�!@#�,��G�P��<3����8�����f��-���nӲ�e�h��4jE ��M��ͥhv��N���^��,Fy=f���zvA��p�4��6����_��}ȸ\m�͆��-91�YjRiIKJ�{NZ�N�5���)�ư�"�}���5��<uː0t[gT���b�]�7ժֆ~��e�-C��D��<����T3���@+q/g���"�4'���{)ih�%ʙj	rdUH��B���&I8���n!�6�겎e��F`�)��o
9-+G{0�ജV�r��ob" ˄[ޡ�f'2�����i�M��Q��
���P�}��$k�{YB`rp,u��ѰN�K)dY�Vx�bwprf�pۖMK�-2%��Py�K�״����\����<�e���(�2�^{����pk��_�J%/c�W��T��
�DSMf�x��c\�����_�i(�LwK����E�w��|\d(��h2g.e�.6���R�\).
v�
�u���k�	��X��}����c��w�z�+b}g������w��q�]\�7i�	��BAXg���R���U,�{�uM�з���w��b�Zn�F��glk�)�0rIMn�VQ*������\^ [��[Q0ǒ
�Fab2�ˌ� ���|��Tp�e���"�f ֆ���z:��L�˅�=:�������墮�NN���k�$f�4�4Ժ�B�e<ۭ͐+�ihƪ����rw�%�(�"������??��&'.�;���
N�34A�(>���j���oo���ï�,��_�e�4���ήOK���	�:�#��o%]���L�r�u+� �aWH�d�X���l��
h�0nBgHmқ��_>!���4�<\��Ͷq��b�J6op�m�����+#��3n���t��4Iٙ_����i�$����/��(|�lUSתI��mJR l]Y:�0+�L	L�<���_��J��5
���z�J	����8I#[��7�W�!gq.��J���
@rH����O!�ϗ��.��T��xzI�E�(vNvi71>�;|���1�#kP��^,�j��0xQ��k��lq)M���DqK�6>o�^�]�8Y6{
0f���X-��0ԖJ�q�T��p�h�6�~VܯϦ�����*y8��.�0���ۅ���!M�k���t%>9�h���kFO?09��5�p��DŽ���x�#V��cĿp������-�wL��2��|��߃@����0�
����O�[��"� \�8\�sF��r8�O��p� ��N��
!�����P?��`�A?�,=��� ?�:��V}�?�m03�5r֯�y�ǘ��Q���wH��r���H�Q��A��~Gǔ[G�0NWu��|�D����܇\0��l��~���3�\G)Ѩ%Fd�c>3�]��3�A5ѥ�	Ag>f7����	��R��U��e�A)WF�f�]J�٫&O��!��JY
|��*�1���	‚����bz%�J�ӕ���(N�X�G9_��?�9;L��J�^�I>��!�$�W7����򉴞D���F��0�B{�/!�?��ߨu�!��s�S�D3�[�4�[B�����ee��^���X?ZѩI���N���9���B��G�+���c��
��	�6��v�"�t���i�I�E�ӫ~K;������O��h}	���ī?��i3x%7qpE�����{�"Hܯ3��ǥ�~;�^�J'��I��?��H�Z�x1��u���"�d����9���y�*��G��|L�c�.�v�桻~���K��D�<�\ҡ�l�vrj��AV���!G�Oi��1�4�8#�2���71/�b�Ѭ	���Fq9:�T\:L8�ъ����i��l�R���RL�#TJ�C45�%�t�̹p�)�Ac��BCu��1�b�_��Q�M���V�p�$�s�V��G|d�۠a�%
-_gt=S�C����Iq2.�F��"�g��$�搄��)~ē@���#���E��(w43ʒbѪhی���%�s3�R^���8���5�&MS�B�T�m��ۤ+�DT��f����/4k��T��u4U�K�U�_QdN��T�roìO�~�dK�J`5!�f�@� ���ъ#���h�]���構3�
խZ��o �P5�� ��6`�{ ��䢠�w�	���}?7+p0]p9"P���q�U�%��H�O�^hĤZ��P��h[��O�Ǟ���������R�������6����2c�P�V~�qk�d
KIbf����:k$�{C2���(u���Y��:+Z��dHٱ8�,����<
���,bS�nXv�����8\�A�(Im�,����y�U
M�ʇ�.�Oڍ����8�s5T�16��O[�MC���%�a�~�LT6>�HH�i�������k�@IO��4��7p����Ʊ�Y��=ŝ�Os{�����`�9J>,�r�q��"��V�&�mB
ǎl��n/��)�Iٟ�)���Jѭ��t�>�K�������ο~�N��,o��8�hS��ա��6�j�R��l�`��Tlɣ��#�k7�-�__���˫��Wo�^~�I?����A��������>�Z�ip
I��p|�p8�E��f���)?I�V�M���9�Τ9\������'�����,^𥉽�l����_�>΃5�a��Y�?S��nu��+���dY��C�I��%h*��dU�58ϣ�9xx{Ǻ��9m�)��mtUo��eiZ����܅����D)���ć]?��@��(	-�zﱸC��DWZ �zŵk�ʁT��o��
��+�Y��2�Z�]������~q(@�땔��n$�!��%�=q�Ӥ �z����!�$WM������+���]���(@yV�m?�1��m��¢M����{��F���A�„Y0�k){j|{�P�-RQ��2�7��ޯ�P�������"8gTx%�a���6W�J ,��pG��`+�j���$��H\��t�8U���Y�-+����Ϛ����@~���e
�I��.�h&�]��	���({�<�
��0�ں�s7a�K{�6�=��}GU7�2\`qa6ൔ�rqvuvtvj�c��x��D�ͥ>t���fe�Hxr;�3@OS��=K[4��=�ƥB؃�e�:�<�}�����v�nz/�A|���J���,p��`���P���-����ϭц|��r�	�������+W�̬N���4��}�������a����z��[�I�Q1d�)T6�a}i����5���s�������	�ŪS����P��Y���:``礒�lr����42��	������?ij�C}�;VG_]�
3L���75��3$��E|�W�ݥ>�'��5�	�ؖl� 0,�jV���R�e���\��Ț��*�]�s�3�vUd[�rKj��M��J&[�nxe�}�)�r��f&	|�0����=���Iڞ8�Q���@n�o�
D���_��x�+D�-�牵m�IY�3�t���$���a�H�Y���z�&Z4�Aݰ_�=ߨ�����jF6ø}���1�B�ba�{�'Q���\��\nl��X���⁦�%!��e@�|W&��ϰ��t���RD�����d��Wo>zxsTxk�Eo>$��,7�'<�j���{�0,��S�ub�B��e\�><�c��nΓ���tW�߆1,p�ټ]�S �Z�[����..G��$�.�*7%X��}��vͮ��Gm82���u�kNG�QQ'g�t%� �)8}���g�r�#�kVS7%��Fp`5�&�R	Ɩ�`�w�&�V8�����6�H�ֲ�s#d�%����h��M��@I�A��%,e����Ǒ#-m�k"Ġ�l=���U��҉M��,�<�	�N:��X�`h�fPJKi(M�$R��Ę�i��Ge�mCJ` ��Ly$�!/�k���32UAY'�zS�>ā�]���/�Gc��吲�g��(M�����ݎ�,�����	82ڔ��"�p�:3���h�a�!<Nq3��,��&c!��7bŭDÉ�S��v�VZ��20
bNh�7����x	*����{}�F@h�'�*�6>�*��zP���z8d�%�&(N�Jf^�:������vL�/H���G''���(����R�hn�z����V��5f���xy	��&X�y��Č7���p5;^�8��^��Ww�9�Rg���z�Q;cɩ_8������`�B}���"����ש��bNw��2��‰��ՙ���?c�0�q�~5-����x֎�O��&8>�V/����Fs0fI�jM��݂E	S;
<[������UU�Z�Ҙh<��Q]#�<rXz�Bh�h�Q 7HIЌ�K���m��tdh�x�����s
���!e�\��p�-�RF7��X�t�0�HL�����bI�m�몃����J(5���m�J�
�Y$��fqTOl������8[�����	a�V�j�QS�y��#�@�Ys��E�޲~h၀=�'����ԣ(�	��NM�R�RR�7�*2>+/��7QH*"�5���t\mZ$9Vt+����r���5(e���5u�n�o��%��*��;���Z�Ti/o���
r>���I�.���'µ>���[���i�,K�Jהi
j��EL%��@s|��G�E]I�o:�G��<����4������G��>����ӆ�zt�(�4{��h �$ѩ�F��Z��wAgî�8�=����J�%���pz���l�D��S�QS�KP��r�$�*z�S��{��dI[V3-υd>D䬞
[C�0�П�]��������:hV���<S㚝�ٽ�(�VmYZg��������d���&$�8H�k����!�P�Tc3����2�1�?�A��#S!�G�
�OlbA+���Kf��s�h�v�YV�_fb6�����t̸��J%�g�)�X��Y@~"�<���e�\�uf1��p��H���3����/FΐG�E=�ʍ��m���g9�*��(�Y�K$c�*�ZY7���hI�ܭ��KP����uT
�fNkl�_�Ͳ�~KD��<f�.�d�I��yn�V�z��U!\���j�R���4����i.e��)^��`���6��������8�r�ڔ@����^�w��Q��1��t��Η6U�<�-J�]b�#Q?������q-�}q���y�.�y���bRN�%9lm�z@�woCੴ'_+n�p�H���J�X�����ܝu_[X�痗�̢�
��^2z�"m}M%a��]�r�N��;d�N��I8�j���y�w��iq�МQ��6�< ls�'��ē���">qjѱi��3����<S����JX
bC�k�0�,4=�.O��焰M"9%�o!)���
�[.���h�z�[�nA�+^����p�w���R��2�0�[4*9�<��_A� ��x�v-&��Ͽ��>v���}���W1^@�W�$`�8�X-��Ҩ�b�Y
.��R�*��T-��<�;Yk�彚�w)�r��DE
��w0,MI(��U�s�i�S�@eGDs�d�vi!
W�k��E�+jx7�P���@�ƒb��űQ~�գv����`O��IþKIH�N�G� }�
`" �捊˗�
�P�fm��j�<�%I��M�������(l9��(͡jMe���t<6NJ�k���'_�LXm����E����2#���ƻ]c�I�H�*��QvkJ���)/��-�U	d��`��ƛ��]mV'o�tD[V֤�oGm�am���Y��N`X0n/����1K��̓_}�ݯ����?|��]���_,��(wTU���a�o��q5G�:N+
h�M��t]��7�����0��K��&�����?����&5
��~+ђ9�r)��!������vg�%���n͔"�}}Ri�r�Fuڠ~Z /y1L��eug���XX�$���;vF@	!PNj֐�b�$��u��<K��7^O "�|F�tZ�ID��>A��g,?��*N��Vz�a�x���<�2����\����l��ۭr�{����a�2��[1
3��"�1eT�Z
�����Fem�@""*�A�m���Q���֛ٳ:���g�.�a�*L��0�砤uG�t���	�aϱI/E��ն �˻}̩$e�%����ud��cA�1�N�e֖��T�����W���:˩ָZ_7Io�J"րEIpV�M7�g��G�ro��XS����r.ڀ��۬ӎ����@�2e��$��T��R%�򄰼V�e��3�a��ܡ�R5}��D7|HG\�R�P��'v,d���JR�#+��Ir砬���ak��-��f-�g%�u=�l�S��5��^;�Tʏ�~���h�c?Q�`B�JKe@���˲���ș
#�0�N�F��m6
5�$r���^u��In������j2�[�o�A��pD%���
��\%����|R�ȥyA����N�vòdK�Gk�H��J]ʍV���4Nع?ĎF�P�)��;'9ǓxWd9�L� ����D⛥�8a�˂�ړP � >aJޔ=��#X�i�����蠤�p�XqH�����.�U��c҉k�l�3i�&lb�ڳ��)C���֙��e�i��U�:ްJniL��2�e�Zz����ɺk��ʜ������"<�%!���g�NM�5�o�m��n�D��ki$��Me!����Y�ӓ3�K� ؃KXM�i�1����ʫE��,��B6�MtV60���ES��Ͼ��m0Iγp$�WZ4fl�M$�M�	�y��h�i� ܏ɳ/&H�p�
QtBP��ھ�V�t�M�)���L�m���ٲ��b�@��9�����sg�x�c��!��A��jw��8y\�}�і��A�3�5e�Bs��?/W8�{��j�Ϫ����]�����������M�?Qm]�K���i�䀣P}�����@%�G�G�I"�����t2�� -q.�6Q�ؔ�#�d���,W��x�)ߤ��h�"ڧ�Rs�)�LRf�Qr��̸�K
�Lz���Ot����!ي��ca�Y�d��#�Y8/R��2YB�m�4ĭ��F�b�K���#��xɏ�-+1�ޑX��M�N�˂�n�%���}Mє?n4dK&ÌYnp��f��d��fO�\+�!��<K?/l+��z�_�
5O�i֗?+m�}?m#V�x�]lC��Z�
��r.����zK]��re��_K-\��!;�����'�-7����KL+�*��{��6�,Qt��S��q$Q�e;��1��Ӷ��L�JI*��B�QI�3���7����~V�$'��g:@ծ�_k����{�����=��@ՙz�Rd�mf���Vi�T����2i̥�z���n+I�U�*��6~��_q+�f�!�O����f��nL?��l�m>�4�o�w���vE��3��F�`��"&�5>���$97
�w���`�oO
�b~����R�����uE������f����I+o�����>��&�1��QJT�L��[�F����v��I@�/;�k�r �Vs6`yM)��nF�-�����c�N���NF����k���u���,���K=�,�
M��uD�W)h̪!�5?��DL�J.���[�T��eǘ�f�T�f;]tP퍽������U�G��o-���S��>=†X���e����T0��_}��?\{t���-�&�9_��E��Z>��N��>����K,��(p�Oyp�d���q�8u��X	��_���h<u�
�n\��.)�-��� �9��6���#����>����i�@��y'�(�1\����\�C�%$췸_����X0b�;C��46��Q���j�<��@�`�IPǟ�͋FU7;��BmW�&UͲ=�*6���jpczdRۋ`&ݍ�?х5���:��S�/��ߊ�����C��?Zٸ���0�W��fQ��
�TBZ��G�z�_@��Ť�'O�����[�����S�C����=ET��頿����8�p����`�G9P��d(�>7�am:N�Tv;U��F�V2=5@�o��c(��w!fJFk~�ȢswhX��@�Ͼ�v���������ޛ�_ۿ��U)$�y���r��N��c{�����c��!?�����p�|�F�i³(�O�);FpSt�k^.�'i竛f���G����x��������kBk���࣍[J
$�۲y���G^ ?
tE��,�z�����2K8�4䋨
�b���5��R���V~⊑���$h�E_�%���n
G$�Yl��&H�Ж�ގxX�~ҷ�(]w��g�ma���>	�
�b���D!�扺�j���P�Wu��z��yw�ޯ�ԃ0�-,�9��[��|�;)pf3����!
���N��V�~V����i7�7GW��a?��F1��D���r捗]íwD�}��a��V����z�`kK�ydQ�^C6/��U�u1X��Z����,܋hKz�Qc��x��̓���"e�����#��_�gm��f���+������Gw���-�ư�y��l�S��`8�Z���N�@9X�ʜ������j��y���@+X-R���[����V�M*Rv��!=�ee��T@��?�����|��_�
�%��#�@)�J+I
�����x;�V
�W�/�2��,�g���6����f	��d��M�*��R��+���\�ps3@/Y�v�Ա�A�L���Ax!)k�(6_�\��J�f�X=�N��8 ؀�`o�p�i9)UB��]21�W���<���W�"M\H�Bu�Ձ̏���*�צϛ`���T`�X*���q8X�ş���Ek�v��8���,��S��Z�-w��l�8�6�{�0�h�NMm�v�lmM=x~\�;�u{w�c}�c߲fe���!��I���B�{2t��Z���E�O��ij}v�����B�-��#�L)�& �>֏����8�8�
�	������#�k�P�#ӳ+��j�;�Z��^y��f��?}���ՠ����Ʌ�Qx�M������l���W+u�͌��,傓8=̀�B7�K�jۭ��?�W��*����8^�7�s����Z��8��"@�"y�C�`���q�IJ`��C
�ڪ!6�}	��@x���=��Bo�CEa����(��ر��@I>�l-^��P2Po��`�y0�
)�7-�;M�5ɔ}�%FVAF\��G�5�޿�-o��c�d���u�o#����}y�dͥ�)��������۝��ݟv�켒�� �Ic'A��,b���``$�)�$&g�;�Q���O��iQ(�	@A�r8�;�fEQ� ��
(�Ϫ�Sv��a�Zl��������Ј�8ݮeW��A��`-D�T�4�qŭ�<�0@`G�Ӭ�הp7���B-5�F�a�ײvhJ ��R:_؛�9esۑ0�v�~����%�t@��k
�X�ze�p?�C�~�\�<8�4�g�&Cz��VPD��Ԃ6�\����ǷP�i��J1F��mT�\���o)MI�^Dp�,�_�\��&0epy��sN_R 0�-�<�p���Bj�I��d��;.g��w�;Z���j�����.�)�Nl��8��WnG\1��FagK.�"
�2��Upn��uo��L��^ ف)t����D�=-]���4�Z�\�lJT��*�����I�P�%���}��S:�'��롋T�S�,�g�;�.�0'i�̯���5��U+ut<�B���|�=����7�֬�t�A�{oaTU��Zt�֨�Vp}�Z��l��<����t��m��F�@�7�MӘ��~Y�?�
��L�]h�RH�B��{��)������珙ƌ�e��]�xm-�����9������ڥ�C��{*G�U�a�#����`8����M�fQ���<*&�S6��)^@�Kد"�sD�/`y��!�"��E>�P��(��"4�u�u�)�p�X�<��9�4n;U
	Z/�t{����v��1~G/Q`㗨����ptgU�P�#����"��ǿ�WS�X�m��,��4@��W=���� �jV�Ȝ��s������N8��=��_{�
�8��RϿxj�$�v�;�ڝ��i�3_�8�gee��|�����O�W���hP�#	���揾�����û�w��Sο��������q�ww��s�W������������οI���l<Z����ο���C�b@9��د�|�`,U�R��T6pL+N����`_N�[�R����\�,6��9)q-�I�rLI��A\T
K�0
U���l�O9K�N��0JCa��g��R�T�^�S�x��׏��-�]=���
N"e�z��`��{0B��L.0��8�j��ی�����vM<NPՎ���˪�� cPS�N-4۞^
����3�0%��d���&-�"��ͱ���#.^F����E�̙�/8���D-tn�	�a7>M�&҇f�#��s�Тw&�k[Y_��:T���Y�lm+�L�]5�R-	��	�y�ȴ.�����d#���;o��%�^k|����b���Q���3�=�&Wȳ�𬄝�e�tf~k,i
�^�����&ݫ5�"SL�厢�[�l�۾����$s�sھ?"��mu��c����w��7p����Vͳlؖd�v�~�6�UN�`
O'�iԞ��sm�!t?�
4�\�F�y4J�U���i3X���h�D��3.�Dp8�+,����f��fg�Jon��qM'lq�fc���\G�lgE�5��-R��][�A���y�^#��%�v�J���+��C�&��ǃ�ۏ�%~����4��]d��g��iGս�V���_eѺ��o�v3�O�F3�����W���q/M�"C�Ǥ�	�D���K�&��.0�w�Ip�Ska�"EJpnK�9K.&G�Ӄ��T�	�~���@�Ź򪩫Ve��a��`�C��&�e�H4���ֿ�~�yy��e�r?�Z��/w��%�˓���ˀ���\��H���E�Ώ{�ч���n�wRUC���E�|Ҹ�L�4V��NJ���0���T,#�G�!y��4�����F��*�
���KN�C�5�EB�n(��٬q���WD 9
q_׍�Ȫ�C.��9���N'�.��T���Wan�q��P���<
�I����ת�^V�b�3d	ƒ�>G����G]�'Y4J;�n-�hx�ee��E5�>�D�E\#�aI	
,�;@|�rZ��:�D�J�<��L���@M�.zn	��?�Qf}2!U��q��g}�&��ʞ�	�qd<#\H�yc�\Wd��Pl�|5�؁�!��bUѽ����źh�Y�֢�á:.�Ti�UlZ�J�l��Z��"��W�H�j�^.Z�B�14��	r&}i0�R��@B�=���H!W%H c�^�t�o�w:@X2.m"�N���~ϔ���c�S�+��O\ ��.��S�>��_p�Ʀ��־��d����r.�+�{w..\�+���[��U��73L�};���i�@'M(�w����p	c�������E�|Po����(����+'�5�E����kzrmp LC����[�;>�>xv�L�"�!��~>x���9�}U��yz�!�^�I�q�F��1B�+�+�_鮓�F��xI�B6r~�X��b�n�hX�W|��G���`+���u��b�s�5�_Ag���Gp�޾j��������o~�h���3�\UZ
m�\�R��N�V�ZLu����H7k|�5���j�W
p���%$�`po�!�Q�ݤ�3�40��S)ukb.\�QR=���hk�L��*Y� X�leI�̢�*�SO�D�i�*#E�(Q<�=QJb��_K&��J���ib���"WՄ�e2{>E	�)z�$l+�� 6�O��X��X�c�"8�� 
cz��yFl��}��Vq��$e *����
_�^,u�햺M	zh4q�-����zW����/�P����S�rj]�Vz���E+ꆫ�f�y,Q���d�x�J'��Z�A5Jʢ��j̶\&*�P\A��b��J�Rqe���M_X�D�_����	�\�h?���+6Ք���Qj�O����(��c�YXXB�!�Wu5p��Q:�딫�&T��t�(hAK�[M<J�$1�ݰ�53��3����/Xa�DM��gHtcs���>��Y9T:��9�)�3��X ͧ�.�Lѭ6SJ����TU)6��wY��E�4)u=[�>m�*үϬ��1<���xi�s:��)=�j4T�S��0,>�E�ʇ�����h�Ηq4w�h<Ż�8�&l�(z(�ʀ쑓a��)<���7d�"̤��^��3��w߹��{�c�ϟ-�ú���>�#;��]���_���#AX�Z�7h�#^G`w㓴�N.���"�D`�*�/Ea8��XX{�fp���*o(2RϵQ�6-F񵄕�J�&R=����.F�VK3Lؤl��!�<��9?O�q��יU'�m��]B���W���KozXx�����}�UV_��p���C�	�q8�rnen-�M�ns������e�����T����-%K���iSL�4�isBdkFHSrUY��4J�F�r�q��1=�u5	�[��p�_�m�P�F��_$1F�V�yB:zZ�钙ƒ9�g :.�a.���MJj�7*�2��5�ښ�eKHm����s�Z�aX��M��D:*9��"�7=�[�	i�o�'G���q�(��9�j����0�:[7��Sq{:�~@���#R_�>�g"�
�څ&�TH��pJ�E���t���k���g�����_�Uz�o����޵�N]a���HD�M[��%�]~&C���%��ğ��(:��<��9�T4��b�ܕL���)?4}��N�5�
ws�}.�mI\	5̊���a2�r�c�������J�	T���R���[�R�F3i<�T='XJY�m&�S�l�;?�����X����b1�I���6ϊJ�HqE�^wr�
1Iؾa
;��P���`�O�E�52ۀ<���j?�4��B����.w?��R+�a�"G)q4��PS�R���o�-�V�|�����������w�_ߤ�Wy�7�&%|B�œ$;DyH<���d
K}�	��u�n�J��ace/�A-1�5H2��Al2O-��I�QVK�`�Rq�V�c���v)հ��$��dig���
U��e%�([�x_��ݣ��(([�����=��գG�_v��)ܺ	r:}�T��H��p<Gy|Ʃ�ic��8�BO#Y�83&he*�Y�h��瑂�[8�x�GT�>����w�m�D�;��odeOҨCL/��;b���-���4�!��L7
�J������^��Oi)-����fR�F�~�׭��v����X���|v������6�Hh�
=���][h�E��^.��7��%4'�T��3G7�Fjhs;2G��?U�o��C�4o��j["��mz�{G�7𩽻��B��o�ς,���#)��Oؤ"��\��.!�;��-*�K&%���+=�ab=��#ǭ�ǚ2��զO23&����k0|���<��h\�D���`��9�L����$���&+"�)�
{8$��7�F�}ats��i%�6�0��n�B��y���nb=�#'�$�X~M�<Ź�I��Ț��5�����1%$��F���ZA�L~��ξ�;���Td_q��f�%��Vaˍ�1�Ș�1+·�Y$��.�@jk]��X�W�
�����7�[Ji�-\ks�W_�N�)��&�p�|���ƣ�|��]��7��`Zéu\�1���.����o%� ��R�G�0;j�Q��Ƭ �i^�+M�
;�%C�j�W��� z)�|�B�� ��d��%�@Yj$��FH��]��d:j@�_��1q��U�8 cf��h8�tĬ�"?��y5�(X�g�d=��(�NU���)�t��[�&ر�elb�e�Qeˮ�!�Z�KyO��VC�q#צk�]�#�#B�<�b��&
�O��<@ͨE��}Y`�.F+���w�Y���/z|��
�j9�k�谽������C�Iz���
��,^�뛊I�~0Vv�\�sWcSX\�ݐW7h�I�B��A�9ڹ\�qr�o�[SD���sXn
����� ���q�^����	��S���s_a�jgn^��[�����8�w�]��G�
�� ��䐾P���a�湏:
�s��/l�<Ӂ�^T�I�C}ԓ���v|��9�K�..�S$�gd`˘H1nk�*#ҤR(�=:wy��oq��&��zET�PL^���7��2�Ue97��@��w}��諒��cf{U��QL����?�I��bDᮔ}Ձ@̾��;F�)7�K��!��I@#�
6mb�Â_��
��n��n�+�T��w��jQ>5TD��?�ش�/B�`R�iγ�D���0�>q>uj�n5\��P�t��b�]�_tD;���&���Pvs5\	jɐLf���BOW¿T�<&���'lkCT1+�k�4dz��!�)UU��;�TU_U+���9!AV~��S�tP��Ά�v���%�NƆ��{�q��|�.��PgL����w�)���\.�V�z�h
s��Ϡ�|�a+J%��|��[{��v�p��ޫc��n����ể�ϻ�/;o�:�7����t~�{�KH�axD�]p��1)ګ���_7:��ys���~�l��jO�m0�TV�j�V_h��ةY�ku���[ԇ��.��Rp?-���,������i�
��(2��jf���Wr����a�?��d+z��ĖY���E����ijDYE�)�n��t>%�^��j[��0q�����B�7G��j6�G?��Y��N�������D���|��_�بRSib ���n���{x�Bt�
nݽ�
8H�	��h,��<n�LN�p�k뭇߷Vւ啍����S�0hr��V��++������g�
�r?��T��}��~x��yAF����Z�l�����I�Atx���o7t�Ob׳6�1!혫}�w�v��nW�v.��7/�*�Q����.2m�c���iK�E,��D��0���/��_�•Q2m{��p����%��%+�݉�p4EKTAk	Y���Mŀkn�]������.wG�&���:1���^�)�6�XUal�3pgYt��3�-�BK<2}΁�h!��u�u���P�"��"�OV=�l��2�jC��[(���n50�lj�>��p��Z�ך�A6�E��n�=��n�/��	�e&ڡ�p���Ԣc����ۉ�T��ϔK�2ݍ�
�aׯ�$@�-�$V[qCA���W
u,x	�l��{LG�?-�v��Ke��3�D/gv��K%H�Ejˠd���W�U�`�\u7>��X�m+�J:=����{��<�H9
�\���FA/20���#�s하v��䆠���Dz����>�JnbhdQiv��vD���ߑ^��C�3��p|Rc
�X�&�SY��_�ƪ�n�b>!�Bkz�����*�����_Z�_��n�?�V��;��b̿�j�8�{�����࿣+�ı �*��T�����L_Oγ�bD��h%׏�+�$�<�.3xa6N�M>��Q�6�u�~x�$?��g�����?�Ti�K�M���+�U�m�����-��w�	��U�(���d�ĺC77U�.�4W.��}⇒	o�~�1�q|Q
�b�	FR%��O�cY�	=��fA���(��
�x�8���Ǩ�EV�Jw�N%��<̈́�;�"�9F��R�.C7J������%iu���V�/lv�	�
�_]��ӛ;����X���'�z��Q���õ�;���T�w��Bc~<D�'%M�yPFe�wr�<L���9���2><%�m���F�zI��� �8!�=�bH1�+�����
�qt�Ӊ�mӃP�
������Zu�}�y"$u���Fq6l���o��'
����xf���W6P`	^�؍{Ž����d
^�*�%�pC�G�!X�T�ˢ�
m�Z�t��i�/��	3p�
�L>�(���q�y?�ЉK^�-Ń௃$;K�0���k��SO�;��)�¤K�/�`��9|���n�6:уe�˸���ED��V�����W?��/�$I�񎴛��w�ό΢��Z5����̄��RdUBy}���������×{Ϗm�*��/�e{�y��B�@�"K�؅���?��ζY���G.[A���z�l��q�f��g7c��^j5��ZG<:���Y�ϵ��0���{/b'k;{��'[��/D�ň4e�=���R�Lh����Gt����a�H��lqEl�Rvv_t��iw@�|�Ҳ!��ٮ��s#�E�55����������睃�7��U2�|l�褷��ښ�Ϊ����7=?|ѕ��''�r�_	�����zY�h�����]]%6�w��em�i�W���cec�f|�$o�S䖭�� ��i:�B4����ӓ-d�%�
Di��T��Q��
��á	,�{�S0�_��^���(��Ț#�>���h��|�f�Ǧ"�(�π��n�"�m���|��8X�K���`�8$��u��XUO���
ٍ�VD��!��L;O%a#��JKɷ,OՐ�8��A
�{��Ȋ+x�w�n!��J�`>�U�Y���AB�1�[j)���,�bz�@��`\%�m�!W���}�3��܄h�z.��(��w��Y������h���׷X�G��|�B�21��<n�39�s4��`�q�3��s��s��O+�����z~��!����	f�[&�S��l��uUj���r�P��=��ϝY�_����
�l
�}�Y���$`V���
_��p����&Ͽ0Q����oY�_�j�f���aU�x���o�U�'<WZ�[m����•]����n��j@�Cld��F�Cl_��98��Ī������>��y��6,��,k;�������Vd��~�|�_y��<{��L�Oc��{�y����Q:�>\�Y�r�,�f�x�(I4B� �7ez�_ow���K	ՠ9t�J�?�`�	��yb��리
�Ɋg6�]\TI	d��0Q��O���;�~t}�R#�3B���W��6=�_i��;
W�W|���pw��>�_���7���+>z���#�Uf�����W���a�ϔN5�x&�$ht�%�9s�jU}v�~�������дEuy�lf�'�#�W{?��ޟ����W�o�M�*^L�����<r�� �YGm���B�.o>�����>oS�O��g饘��p^���n�U�α�$�&�A'��}�/_�o�1s�Β��fm�~�~��?�o?{��6lγW�?Ž	 ��X�j�߽:�}�����<��o��O���q؝��Y�w
�(<��yv���K	�ǝ���tX�9x�
���=x�~^6�8�3;ch�w:M ��:8�;.�:^��fC@)���v��Y�HV��lt�s���f�C`J_<a��S@0��zn1} ��Q8�<�0�7
f[��4��>ow��w�}��J�8=��B��(飗hr�Ŀ�:K����!�
3�`����G����I1��,n$5��=�P�$����^8g4���p̰�
:I>�r8�P�����l�������2��Ê�yBN�������v8+ 9䦹�#\�:��׾k��_�t��_�3���t��U@���#��룕G���3�G4+��l���I49�FA�J�C/�&�);�
'���:h�Q~�4]ڂ��rD���l*b�Z���?vz[���c�9L��
h���/�9:�\���67G)qF��1e�~��A�g�����-����:������w��o����Q*�O%��[�)V�܎��Ϩ�
��;���dETYޤD򵨐�����|\w��hj��E���=���N�'ϸr���T~�d&s҃���B~��e8FW���C���攲��&���hl$�K=!��J��J����(c�\����1����=u�Q5Z\p�}u�.�V���90,�B����ڏU�?��8���`a/�	�1jp�z�����Yv#���D�]R�N�\(YA���B��n�V����^M��5h;�n���n��Z��)'DH�������;�rZFEG��*���V�P���8<�0K���5��'V5�,~�U8�Z�!0i��eB���� Q�.7?У'��յ��6�;���[��6�&N�W�ů�:'��
V���\��Fү�a�S<�
��l�~߂���E�����e��mf���d���_�$����Q��hPd��!ؚ֪��j��t OfyV��9��L�u:<LP,����9�����0]�%`Jҋ3?�1�������2��,�S��4�#�A�FgJUcH�x�S����8�y��BVKxY,�G��*���x*[�n��X�8l>6�ep��w�n��[�.��I<��ho�w��E�eƩ���Q'����L�����7ucUY���xt��ŰG��v���W������y�)�u�C�6
�n�����Ð>2���>�sbV��+��6��ߕFEU�F�D+�dy������D�i4�ھ���
���|�10�Gkl�79!E�#@p�j��LՓ�H�q_Aqgv�禎=�w%ף���QQ���Ƴ\��)��ZT��r�k�n5zJ�IֹO�+�~��=ё�
���g�^���k�Ю2��]��tSN�
�������M�2Wq������r��
g���\��͑�\��_r:�`p:����7P���	f���e�2�c���/� 0�{���hV����U���p�L�G��^��%�Ճ�Cd��,��AuH�l���}��jgem�P�<5y7c?|��P�/\��~�Kusp���;�B��A�h1z!�[�ުdƔm���:����KCw��b����2+�9������R��3��=�_M��O�{Rzb�1!�iW�'�(J>ə�x��ҙ��d<V��))=������������Am��~��tr0�a�i���Ĩ��3�E;U(� ]񐂎�����$����/��mÈ^`
����Z�� �v��\��o�v��;����#N�uԯ9G��\�4�/��
^2��Ȭ���9ў:������h�C>kpO��L���?P�L'c���'�}e`�W� P�W��''T�5t@����{�j�ݫsS��-��b��Q�0�����R�)1�HK�F��'
_*�Ҹ�i�0?i�*I��l�:��j��iyK��N3[$F�r�f�5�Q�Rx�]-SB2>�pl�R��D�Kn�ne�l���
�}�R�Ҷ�r�+��`La��O
�P���	N�M]h�p��'d��,\.�R�e�ܻ���w����gQ֡ut�3�M����/�5������q�^8S%H�n=�E���k-[�����S|�ȫ��&�C�H���]Mو)��A~�\�`W�,,m�	��q�9�9��)w������)ȼr�����J.�c�߷d��"]�z��VE�ϩ��sq/�G{�p��;e�P�n�jm,��t���@��ޡ�T=�{)�o�s�������)�;��{.��{R*���Sl'�&�0@�(��a?�$���l$c�bA!+]\�ҝ�fl�'J����e�Pt��<��\/��7cQ����~��Qo�9=����VM0�'�Qp6�O������f3z�����M���R�d8�	ݪ��8��;?�;E�އQmn.ヅM\�'��mO��&pO��a�o��<Gd\&Ap�+[/mό@,Lj���d|��}%h�l|��$�m/��/�>��?>k%���?B\(x�-�Ar?��ɘ^��4d�&#̝Jm�CC]���D?��0�&����f��b9��l�~��#��&��k�w����o࿰�g�׼����׼��'S�Zv�f�PIlTC�o�����{{��7ejNM��&�%��Bu�9�BE(�\��d�'�0i�S������$�ϰi�ᑊ	@[{��o�k-.�"2W�U>�trv��^yZ��f�!��q֋.�.	���I����5����պW��������ܰ:9��8E[O}�΀�U��:�ؓ_���i�}Mf:<��3��0��)���^@j&�NQ�Hq?�|Q�Bd���m�Z���dN`�Ѩ�뷚M��f��J��UyD�����#e�	��a;+����Tşp�RI�Q��۝G۳��Q��*X����"��"�|��;��Ŵ���"tE[�QP��pϫ����a8�/�,@�_d����M;�1��a��tX苼UmYtK�x�4B�0���S�G�u��s�5	.�jA	%�8"��=�#/�+�7�h(����U8�1l�Ar���sD�B�s,(��X���Hp}i
���ì��*9{��\e�йZ5ɛai��3D|���$�H�I���;�{:ݨߑ�tdz�0�n���C�>G���=	�t!s�SF���נ'�-�v
{��d�wJIɓ*#'�n< ��3;w���|��ڔ����P��� Є���&p9���
��9��oS�az��F1R��H�ә֕O�R��B ���T8�����S�7:���3
6��x
��
[w1��j��jC�ٍb5!��)4�۵j�Ξ��{f�< ��Lj�6�9�H�:�� ��!��
9�Y���8�%k��c� �Ƶ�873!�/��4H�]��HF�Nb���l�F��>8�v���Ʀ0���ߚ�J�z��a��y�;E#�pЊ�ҟ2gs`���c��|�v)8ʭ��q�yA�$e�Z�ą��d�$%��U���/?X]��77�O�ŏ��X]7Ѡ~T�FTA�yQ����0��k�L�5.jgH?_Ӕa�k��gL���a'W2���[�᪘�o,�)����rP���(X+���2��H�� Gpr��"��[Mps�*���&�	)��p�)�Ѳ{!��$"����K���h4L[���=�FC��jo�K��'�<�K3�3	�b�n�\2�-�a&.��
�-'��84�7���Y�{��m�@�D�"B5�m������ϵ�
�.?��u��CJ<��g�&�Z{+7㌾��f�)��bK����8��Ʒr+��V#�4���y$�[)�����]��H
�z?\=9�6�U�v+�D��I�Y�߼Vo�7UoV՛c5��4�MΣa�w�T�8��dM��a2�b�7Sʖ�2!��3�rU��Xr��|4�%�,��lV�[_+�����ʝE��������3����7���}[��~r
k3;�֪_%,�һ;1M�����&6UG��n�������p�p�b��ݼ�:���jU��Er"&2��۲f�Ge��1G���O	�^��yv�r�b���Ε����d��nf�7�b6��tB���bƗ)
q�����R1Z*/��Ӓ�5��Oqa8��ui��ϴ����1QrɄ�dDU�t�3y�P�7�a�*_�㴨�G����x�p�M7���(&�<�h�b�0b�xL�R�(�h|�F����w�;nv��9�*
H�ZŽZ�-������),���ߪQQ�ޣ?6���fʩ�8�҄��F	�p��K�?%9�xɿt��W��N.��A�k?7�I��n*���yfF��w���p�ӝOp�}"���͉��s{�0w���� ����f�v�����`5�+I��1@��������w^z	���ݕc�F(�4<���\��0�s��;k�ª�l=�U��4�s�h)��-<�?�o$��^\[i���
�o��6���I�;�ku��F.���;��o3�˜���^1���hw���<M?wыG���D=2�:E�\�An�Ar��z����u3K9��+6ũf�1;V��ߋnD;��G��r`V1�I0�#�YW#k(DH���=v�C�"]�Gio�C��j�8"�j'Hq��4�dަ�I 3&\
y��*l\G4�n��Ak�d�{g���
��������3l��"8.U�.T�+?P���kx�ƒ��.��L��Fxl'��dDr]�Z�����A�GwU�>D2sY�|���r�ǰ�
���*_à�O&QH8�˸K�*��Y�•Wk���ݞ��O��(ҡ��*�E0a�{`���s���3��жdc�.�|2M�%a��{ۄ�j�&��õ%�G�pL��0��G�q��L(M�1�K��Tec��e2�Zs�co�����1ۢ6��m��w�r�ݫ�X�d�dr�
E
I`E���+��R�����CL.?*�̮���=�b�v�)��]�J���O2F_�1�H*�ܔ&i�Cl���Ў7R�$�+�5�=�/����7�#�{��Z��c�H����U�3��x����ݒLB��ݕ$�B6za���ЩV�i��	o�گ�B�t�������ڷ��m2r�!g�k �u��c"�̠�/#U������Q��rz�<��*Y_�ь4[���.�G�
pjdy_k�@��Z3o(b���q�WƼ_�����*Ulu�i>2�f��|D}Fn!�U������=1{ĝN�Q4���p��ĕ��*-��UI-iVԄKYc�‘Tn��1��5���,o�Gq���jdw��-��C�"$.�#��}FCu��hfHь���Q;8`��W����l��0��0�=��z5����cZ�x	P����;�H>�o+�H*(��wZ'�y������-�u�j:���P�JG�3ˋ�
Z(����LS��3?R���s��Q��r��P�}�~��
�k�5�����~�
�9�!?�"��ZsG�)��-%hَN�g��6�чXy
j��@�v�����&ÙuI�BT���9�!8��<p�3M]�fv�ա��S�;�c����b�S�S��8��>u�2��7�qښ=
��<Ү j
���2}B�[��—�����`��ݗ�LI�Sd~��T0w|Jz��h�~�e�RԹ}�m�(��w��F�>g��I�O�	h�I�����_
Z���W�6r�L	~�����ő���hTLl)����b�l��
�}Y�!$��z�Zi���w�3���;w�?�1柙���r�76nܝ�����0�/�̩J2p<�D���s.��x�~yN���=cuN�t��{rB7�ǃ�A����_�!��QF��f$�hp�f��_����Z{�RIU��?Kz�D�8���iB����X����5���I�_K8�%KÄ9��W��~n?�
�?bY��GX����ݱih"��8$s12�e�o�{���/˰����IRՔk[*�.L/�P.I�s��w��Y+��ĥ�E\�L˿�^o��^�&�4	���1)C1���\�N�d��y{FC�8!~o|���]m���,����ϖ�����j�Β��Je��Vɠ���T^��
��'3��cz�2�WQ�v��(Vzz0��n�P4���u]f:O�b�yw�����CA�OuW�~���F�CHl�wߩ�:�‰UQ���l�c�;�`X��P�u6_Rp�(+cS�Q
#�"���&��B�)�2���,FJ��!cph}����cK?��y��[�`��ވc���k����%��@�jI,E�T�K�TӺKt@�*�_9�x��cP��B1OG��9]
�du����6��bt���0�)L������abY�*Ļ/:������p���Y��@8=�
�Hz�%1��h�"W���O��<O(sqa�[L���p3[��oLϽ�@y��ǣ�^M�t��?\<t�[(���k�?��o�U�h��۬�ok�K����'Xn!�q����`�9��e)���������`�؜
�s��h�8��*�@;	m�,3���dZE�X>k�����T����J>�����N�C�PN�
�������MeV�u����F�y��@V�>=�4�[�=[^��:��[����3ڒ&G+����sY��G!��e�'��,�U�P�5o��	+GLP�}��x����^lGI����?FY�Kn)����5��k�_�[�@*'�	9�S��*�:Dm!O�m�G.���0�o�&iͣČSh��V��$%y��`ZrٔX�ܑK[�%�
�-c�S�c�N䅩
�z�m��k)��U�xeԭp��#��s��`��MuL�v��D4�NƦD�����K��d��ok�)�9 ��x�|�wz�7�������ƒ���/+�h�:��z�D"Y�d�>&��M69���s��1e맏b��4&Y�`�5!�l�E��e1a�y���_�,y�6a��Η�����r{����Bɼ��L]�DӋc�An��������xJb�֘���C��ؾ��A'ES<TȆ�~� X�nH:r�|�Xh$I�O�S;�~�/k
�����I E�,��v8�-oq@��^�z��W@�=6�� �2g�z�}�X$u'��o�D�p:FÊ�J|����ښ�����������7��VL����\wA>w:Խ�}���*}��̩�z�t�ʍ�c���%Q'��K��rNψA"Sч��X}G�F��c��|L"�F��Q�(�VtWy&{Fw�p�sʣP#�e�D?����#y��@S�z�)�/c��n�9INŽ:��{E��9E�˳T�'C���s�#������g[� �s������S쿫+�������;��7i��j�Z��(�E�f�Q�	�h5*��$�p_r�
0�+���{���7U��G���ݩ�N��61�ÏG��|�>8�n��{N��qf%�
�B;�W���PA�-�1_������B�ɧ��g����r���ʿr"M��6��@R�2e��I.��9�_e��b�MN�R~�c(!��hH�+���	�%������m?#@5�|�q���2�GTf�ѱ>G̬[+Ye��a2z)M�w.��&M�2�N£����3K�N�ҹ����ޖ%��
P�7~H�6��X
{s�M_*�j\/��r5-U���J����y����G��ѕ�;���q`Ge�Φ�w;�@]0g[V��@�";KNl��J8���1��\�SUE��Eg�S�+w��&�G��:c}"z[/�n_5�k�{x�댆'�8Ƅ�V;5��1F�<0/�}ٸ��PLX����C-�8��>���
�p)�*T����7#jV�K)�/t?9��|��4qg*�� t�f7*�-p�����p)њ?��\�w��|�C.r��E�n�LU�τ�c��?����
�ze�c���M��H_h7j�h��ş����x���͂w�\Ol�\5|��Jr�;���QL
h�s5@����^A�"��A�z�[�J�6�R��g��;(n:ߠP�7J{���Aן?}��9�t\�+���)lͯ����͚��c4mD���r��A
aF���6]v���u躠��$=T
ƣ��ˮ����T�qbēɚ���t�q�1��P�9�zx7���v3�����y:��{���k���B�G
ae�y`��,=�0�P�&�ȣ��KlZS��Z�ăi�Y抱�؃M|<�
��7�L�`l�g��g�:��c�U_t����ڞ�p�|{�w�ٟ�\�Jh�eXrE!W��!g��ہ�i-��w��Z�`8���{��a�������������N������l_F#r�z��}�IjUҾ]�GN^�!C�}\fѮ��yr��u�,�f��u�@�k���^˒�9�s3؟�W��4���λ×{��`v9�"���Q4l„/����<��)��(:Eg${�P��pU�
8�^BJ�K0
��@�Ŵᱯ��s�3�n�d��J&&��6 9�b��jX�c�%�e$s���<k�k<�:I�^c��!�AI����~��6��x 1M"�TĞ�!�c!�'���-��8��3c�0A�8���M�yu�^��\֋�O@d�T5܏�ѢNz
�����YBfg)̩��RA?�~]H}�y���8�#�|R쵣A�?s%<�a��v�J5�]�;���n�����+�[��ǢSw����~ /T籘p;J���D/[��S�jY)�[r԰c����)p�G���|�򄳔<�uJF��<p��
Q��MJN��W���S{��r����6%����<�kg���w��
���:X⵩|���2����?�FV�����F6�����`GS5>ű�ӭB<2��F�N$E,#�=��5T�+o����a���l�s��s#o*�n��+�a�{�䇩��Q!�1�`����D�s���RC���EH�����A��6~\{�����vK��ql6��%�
D��X])K��lk����b>���#���
?��Z;ns��4\��7EK�u#�����Ly���i��i�@�2��Dͫȏ���zL�J����B��h~�̯��,��+u�[*���M�?̡L�B�YB����U���
(@Q�qA�E�.�j�P@��)pe�I��<̥�U��`%ģ��f Y5�!��̆���e
�Sf1�_����v�F��0B
�Q8�z�%�x
�
a��{�o4٣�*��-<r��4�{i��eݸ�#/�dR�*b���Κʴ�N�@�~�+%�k��u0"/}g}kQ?�й�߶����7Gc���͋�"/��g�0LG����
�h�"�s&���R�ur$�d��		:�as<~���&<j�hn3�C�T�*�BrfQ���S����*o�+�P4�5c>0���"��Ldi��9�D��'�V�D{
��P��nN��9�~�����W���
d4���J��s�CT�r�=�����e`/���
�	��j1㞵3s�P{����Y�2 o+�W��)�a~guuK{_ٳ��&A;�.���!�~6���4ʼ�i��peLv<�0�f>���73���*�-�g���l�)g��Z�&+p4�RdԹ��&�Ӛ	8�����^�We �Qr��V!��	%����	��/���ƨb
�K��d�$�F�,�]m|ڕhx�盾�Uu����^�������w�) z�y7���EdR��(��H���f7�d�E�+����b����<��'��_�%e�\���Ɣ9��a~�Q������s.��R$U��d��Sr�/���q;���_H�=���}���?T�3�p(�{����i<ZB�^�J����y�I&\d�&�!y��<л&�>��3���@&9�h����;�{��J�XV�9�y�R!>S�!yA����N�:k�?Bz��c#��9��Vv҃��9�x^���\X����ҕՒ0��<K�yǁa��*f&^'�fNX�/(8���PO�]�{8fB3�����!�/͜@��0���*5��\�A<�'�/����!VO�+s#\
W�7b�8MY����z�hist��o�e��GAi��IR�U��2=�t�)E�4��?'S;ҝ
�/��~�r��X�7��<Vt`	Wa	7�~˖�˼���lM1C�'�BU����ӦwH����s�^�J��D+S�g�vs��k4�1�K��x.�O'~B���q���E{�:upSdž��2}:9���FQ�d����Kp��L�e<Lw;}]Z��[ǜ�	;�4���!�+,�
^Y%0v��f�f

ᣬK���U9�V�~�&�Ѳgq����ѭ��P	��]��3�k��A؜���XH��z.-��@�
��}�~v
�)�P�W�)�D;����d��h�T��݊e���FPN�u^G�&�x� h�-������X̎8�Jy�4��1�����{����d�_6}ˇt�	�'_q���O���Ł�/�8�gV�u�x�j%9)ƕ�|�m���3��f'w�&�5�
l�{q���d���ٓ4��� �2����n�#���Ϻ6ms��
�)��Ga��W{?��ޟ��R�1U>���j���i;5Y�F���@�6!�/%���N���js h_6	L���s�O��ؗ̀��t���2����0�E�/�}��&A�nM�tz��Ky�;�@`)�D�,��.��A�S*�J������G��
���q*�:��6=����F$+�ɻ/�,n�_U�T|]e�\�V����B���e�
�j�J��;|�_`��|�-k��|�s��ꤏ���:&���R�ކV�Q�Z�J�e6�d��nXwv���c�AFB"�m�[�ܤ���qp,��K��� �ҹ���Ɨ�(T�PV�H>����� ��j��HYDl�Q�/{���u(@<�׻�ۯ߾�}���yv������-�'ׅHi��o�1}д���[��Z!N4�pSK%�N47�*��~��[a��8���^�$u�cs��|γwh4r+*V�K��\��[�ҳp��Tj�a���	]F�w+�
1fԵ��V<h�H>�٘��W���A�C�4�>���L������'�"�N�?4e@p��C�,���:����Q'X'{��Q��/=������0�T�R)=[`�̎M�ҹ~�z2�a�<�2������s�Ƅ��K�K(�IEƗ������c`�,0Ly*���3ZV��)�&��QW\�zYWiv�{�>kQ��N�-I�\�z�
�^z�쉏!�g)\�W�i&ch�*����Í�Пh��nH�D�"	��]����Y��D��s��]K�7c�ϗ����̶������'��c���8����}�Ί�<֋��`~�뢚���k�MH�o�<��#��ul�+x:�v=aW�+�{��h�%�W+s*w"8�h��)ZX�E���!W���-z|o�_ۙaC�V��X�R�Q%g��p��r/�O�p�v��Dp�{���
�u7�[s��VJ�V��5��Ʋ{����������y�gG�py���L��_C�~�eƣ�,Z_/B��$�׹2Xp�xׇ��
����Ն��~����.���z���_)��F����q�0 �"�Y��^뢸�ʉӪS,�Z�JX�<���Z���J�j��g�[y��-e{���Pu)���	f���W�xٮ�,��:��r[~o�h�:�Pe����'h�����O''���N��/{�����J���x�6��ߴ�+�d~��U�dY��b�
��מ5�A�=X(oB2"܀9�p�>��o��
��:�\K\�_u��lQ�-��@�6:l�vX�������ۦfU
��~����ӗm�v����~g��T؛�]Jgl�� �.�b�gٗ���
�r}��l��9N?��v�a�y|�s������G˿�{����W}������Y>^z�[s*�xb��(nar~1I
}
���X�i�\�Q{�4��n�������"�J�Z����Ka}�_�R����w���3��|�o����?����F4]�J�tY��ʕ���X<>,�l�Z�s�_�)�g"���A!w�T��c��BGZa]P��5��,^��hbb�<;��4�b��9 ���2u�d���yz����8�a�R�]�Y�
��Uì��W�ؑ�h}�IZ"U��u��Ӭ�M$��ôT��j�gҕيwK(ee㾥o�T8*�:�j8�]�n�B&��N����c����_]HN9��(e�����YL-�*�gaE�,��[A$�w���ZR&9�O�!��������O4�DX�X;�9�C�@hdr��Z.�U�З^�:G#�D�m��������R�"�0*EC��Z���(�+���a��Ek!�-����bN3l�v��>x����y��f��e��&�2��6�&�K=�|Q�r�6Y�:S�z�y~~�"�\I$Aٖ�s��e��O�B�F�r(����jA�C�5��s6.v���:�����9�p&Ĕz����R�
�C���눝
E�RP1W��<q|�U3�c���M����>�����]b5���'�d��]�F��eD5�:g�†�wH�gH�%���xM?o�@'K،��u*�Ŋ�+���͎C�@=��HEU^���e��g	Ŗ@��.�%v	���<ja�F��6Xs^]G�~�+r+x��`�l[��5Û"��E�XXi(L�07��w�(��i��5�c�%�')�� sn�FF*��Pg0LK�C��{:c�^j\V���{<f0�J"<���]�+��[htEl&�1����a?�cb]�6�\�q�f.s���ݽE|깴펱F�R���Y7�����{g�=��d�^Sd�%�v��Q8Ƨ�aJ��jO(߁�q�Tr�6$Q����l�V�#�C�9�s���Kⵆ\��������4(��C!�@�9ǂ#��*L��4�����X
�c�wHW!�`�5�/,t���d1�;���J�wE/F�W���)%��Q{�:�k��y��ߥ��(EeL��%���s~���f>\�BH��,9�����i�6��)`���"B�'<9��}�!tGƙ��߮���z����N��2���ὯL)�V4\e_7�p�+�k���Bcfj�j��
�h��,��z���*��(\��ܜuA��]T|��
��f�W��G+�yD�1��E8Z��)��(�m�q�mJ\�|�
����/H�RuK��X�/�_5�:H��$�<e��T��g��<�"��Sn��[�o���[�|�,m����qx��G��q�\^�8��}w������[�朔Œ��M�\�='l�`�r�����^b��d0��q[��C��'5�C��*�_&�����Wx��yeOΧ�)�i�Ӽ`"�jU@�pj`��]y���ޒ�b�{�N��p{��Gv����|Lݑ((�0[�Ot&2ӱP�`7M�32[�5c����Qe���;�������#�D#���]#�??v�q9c���¥cnD�Th��p*۫���܎R�Tq�%�>�l��2S�0�
��%:��v��7�P8J*C
��ó!Gԇ���eJζɰ7�,X�y5�)[#�$�W2�M?*�Ct�I�guQ.:{&L�q+����
��n:>#+��I�$�tŗ�Z�xd�b� ��m/�U!��2}`�.v�[
uuk�a#'Þ
C0��c4�9p�{&�6�'8ҭ"@iΊc��wv�6���Xg�Z����ؒ׵rK�qw�g��E��u�c�U�L����0����A�]�Qـt��+� Q��X��h���L8��' �� dª��Q�D��I�
�Kt�°��Rn嗖���ϑ�!��.)��o�����U���|DY�r)Y��7��jɸq�� �ϒ$k�|P,Ӑ��M��"㊾��~��(E�"&�)eXu�.I����5˝\��wK�{K&)��N�V(K����s���Wx.�vJ�.��8��8�eN�,C���c�m�{��dv�LL�}"Qe{����Nf]][���R��i"�4��,sFUNTah��@�,�!�L٩&�PcЖ���W@�U�
�.ِ�(����X�ҌN�
��.ł��C�d&M0م��r:��.$*����;s���A!��\��AF�ZKŁ���94��h��PQ
�ch��E"v�"1}j4Ch��'R�W/W�*��&��K��S��|����7�"b(���<�"٧��,E3��{��@���wI�I�x@>��T��r�Tziǟ�`I�^[�]�Ƒ�tQ����=+����`+<���B�(���%bV}��'��謼.����9�a�.��U�ϹD^KހԕEL�@',+�o�ἇ�Q��X�����l&$�N	)�O�v�[��6Y�{Fpf�aL��E͵D�b�xW牾4u�+Q���w��)��`��r�H��;[�d��Ab7�� \��2T�����fZ]��r	�|��h4��Lϡ�S,�6߂o+���I��)7����e�W�� c�tR��VA㣓�e�Ur�Ϭ(8�y˓ո��t�Ce2Ic�dI
���:(�,1�8�yq����5�E�‡�q^S���`ng-1�}T�F/�����S�_�SKD~�Hm����HR?P�ɐX�CH<�w�ii�����E�x?��48nC�خ�0�����P�{��A�3�0��WdDH�*���K�%7��b���
�1� ��q(~�ޝo�e]����O�����|�wH^ÕZ��l����d�������&�-�в���YR,R�}��A��~���{��
ǣA�9c�e� WEu�r�H���ק��|��C6e�2��p���#�7s,���PLDý�ݘ�B{�M}��fAe`aC�����~Y��+�xc�\�]����h�>�wP���u��;خ20Xo��T��o�M����fSVL��^���7e͑0MzR؃���y����\+�7K�JMfeee�=48n����C\�֔�ùYI屌�<��ȍ��[/��v#W��w�=:��,%:
ذ��SÅ���A�?�+��H�݋kƚ�T\��l�w�t~�=|�y��i�9�=������_��V��8�$3M�v�jZ'�dH2��5���BD�1�D�f�K�,��o����2�~��D�)UwU������g|p>
�a͟�R��"E�Ɲ[�x&�P9�x��\�6=�-vJn9��
�<x�@:&'dHM�*�r��c�̣�K��8��ȏ1�\[4l��l�Kv��i�?t�b,�V���x)�}����#T׳.��r�Z[�8ҙ'���H[��MV�Y��v��̳�_�H1�VX�(�ͱp�9K�:�G.�$�Yc����>���
D�+�x�{��8��$��I��؅�"y[�����TO��:��u)�O�X4��p���{)����7|!,�0P�-O�.�A(����N��?���KOm����U�V�!�79�s�*�N� ���?�����]�B�����B/�G`�0��P�"���������0Y�uX�ȚNF�ˑ��T��K���9]��pO��Іއ��zHq3+_Y/���kHZe}w�r����L]����BG�'��r����W�tаM��rh�$�e~��I;��8��V^m�޲��/|�)�F!zy�5zE� .�g�Tv>!�2B螥`=Y�ɓ\�16V��w�4\vD��?[�ӟf����vٯ�n���O�b�*�#��'t�ڒ�W
:�}�a�j��J��C�vp����ρ�k��R�tN�q�%�鈪�k���YM�lV��*�%Ha��^)A�ݲ���#۝@kԥ��C[��K�
8fv���s���w	��cᛞ[Bm,��.Fi"��w���y��7����U�T�^R�G:����Px�p0���$�%d[x��|<�@^��C�|%6��D�h���_a֦sA	:
̂�Vy�0��d�m����b�9����T��ˆ`��B����&�]�E�w�W�{��0U�
�΂�L����{�0�2�(c��0����e�DA
�nypc���#v�/��(\7&O"��u��˕�)����BQurZ��šHmL��y!�~c�v�����Npni4�='�q�(��,�|5�rʷ��ϼ�%vTA���Z�]p]XoJ����)}�V)�N�)V^�?:DF*��jؕ]�Yմ\�’6a0�4�X`�v���8��mVs��*��ޢ�h��BS�gG0���ĕS��U$z��s9�����s,q�SEHQdF��Cg���aiK0��"�ɂ�A��Mx�*����[�W��C�����5K�-)ʄX�~GDQ�8����@�;�����(s���"�`+��?G���d;�a�-7�_B�=�.5�]�N�aynh��l]	u���7|N���dnH	�ms�GE��K��V(X��$/�kGق����՜Xw����T�'P����?
]$��y���8�્�� xG� 5���0�bƭ���aw@�FP��<l�\��s�9��su+��(�Na笜��u��4eǵ�H�s��ظB6���Qq��TODWr$9(�WV�G�"fD"�67��ˏ7�ߥ)�f�O�����y�G��zY���9I����HG?A*�|z~��K���Hh{!u�YdM&%�+j�t���>`�`aTc��u)xv2ׅgu������iig�R��H�1E�d��V/ý�r%{�E�ƅC�N
���>=C�.~��C*#(Ѣ��Xt��$FT�*0e[A3k�0���~��řYԯ���.�Z�V��M�-�Z���t��;t��u�N�q
��z�8܉?���@I�b"���[�m�>X#f1zu�����8�U��;���lzj��]���E~N���$�[���\�N
?d��Az���&�q���W�~J5(c���`}}=�����7x{#?�]A��h�VgW{\
WL�ً�"/�3�=/���1g���/̎
?ix��1��>�W1�]�����߷�o�t�(6��U8�}����<�����\]y��?V766��V?��WV7��u��g,�O&��,�S��z�O�_�ߢ��vXC���.��‚]�b�YP��>�[��Uua���~�̱��+@%TzȘJh��/�;ǟA&��ӊQ
�3��{*qs5읍�a:�8'.�-��B�M�n�{���5�D6H��zo/8D\s�VtR�A��
���-�%�L��-�xs�x����įi]�EzQ��~��)l�\b���v�Ӻ%�b0s���	Z�܋�|�;��m���ʣ�G>���zG���T=�E7��`Vp!`&��E`UΥ*����"�uZ	�r��K	�.
�D��
6l�(׻K�U#��l��+�*�D��n�Pu�=.,x��R���YE�ŸM`��?��ID��_��8�kx���p����
��b�5��!�DS���p' iIe2y�c�́m�2��A����}�{�y�sx����}����1�s
��e1c�5����M�T�2@���ʩ"唁Z49�W6@3�0��Ӱ���$�K%��4n^�d��d�xk2>Y���?��A��Z����F�{h$CΕ@3a3Ƅuef��qEZ#`�㸥�H������r�d��Rt,k�Nzk�V���Y�[���E��m �h��Z�V
?�б�a�]�՜]oku��8�.jߵ������Ջt+޾[�'ɂH5�l�辤E��s�x,@�~��`v���2����5l4�!���>�hhnbU1iBSd	�l�:9�* ��֓�Jp�Zj��`8�l�^^�P�|{�\%��ͬ�RU4��Q�_�U���:i�0!;��w��2xխ*�����>��u��E��N��T�q��>�H��Ajq
�x���o'~�Z�J��(�?{���6�$
�g�
�<Ӗ����n%nǝ(?��Yۙ�YۣP%1�-$uq�o�
	� %gһ}��>g'Q(�
��BUA�ڲ0� ��ػ���\d�k��t��mS%@��RXu�?�����?�=��C�$i�\�M8��F�4! �pң�@;7]\��;g%oߝ���^��{�����7g��̳�֫�7�޽�����?�;����{��N�^���'�m��7�Fpl�w��T���	��?z���7�f��]�ڨ�cd}��)�L|˂�x�S�;�ٱ�e�S���j�����Y-�c��O�����o�^/���_�鯳�y?���B��'�f�@���)#Y��ª��ӡل��
[~
�z���A�����Y<,����G�2��eU5Q��3��{��IV)H{۟FU��F�+�X��b�m��;�
��P��czv��_H� 7q��!���#+�1~��K�Ϩa����[D�p��<���n,O5�>q3tܔ漥�9��Er?ƛ�lՐ��;yq7�8��t.k
_�o#.����?�;��;���`�џ�?<���z�q��M����Lz	RS�`SS\l���-�B��c��>a�2�/�X��>^��[�=�-|�h����
���<2 ��M�"��ySy����3�d�P�7�#�
��E�Y�V�����irgJ�w�3�J7�7��™a�[�颭�R3Ou��d�Y��Q�����c7N9ʶ�%E`mG���:̲�Ւxv����%�λ��l�K-
v�	M�@(5��E�W��wcC�'�>��≙�:Ms!6�(��D,�+4�Z���ז��S�E:Bpf��=P�@�����&�X�N�D{�R|H���QHK�j���/7�S绠J�8r�Oo3}�K! ��q�f�K����`�ӏ`���f������r(�c���h�^�gO�JD�u%�K�&-6*=e�x�,�x�%���Q�^B�F/A�3��!{L�g�0 ����Q��ϭq��*m�G��9�5��.����yx���F�"�uu:��k�K�鋶9�!P�����t�(`�Tc��b��<),l�����q��M&�wMlD�Co�_l�$��
fa6c��bp>��Hq倅�� ��ʞ���}yB��J.s���,�0���Sc�x�o~:�4e*�AW|N�
{wo��Y?l���c��&*�����^g?��5�Q�7�J����G�P����
�e/�ޟ����$���;zOe6+���	tᄣ8�aJ�rm�����Xz�T�5�ms8F�H� Ǎkk�F^4I�x*�����
$2t���U��H��g
�Xi��#��cj�X
x�+�M���JA^�@,ئ�2h}�s҇N���~8YM��T��VRQ<�;�cmJ�q�����ʴ��G���K"N�z����f~�,W]�׍l��f���(h�+`�����6*��OC�t>��E�
������'��i�F!ȡr홺1��N�)�`��R�e�ŏ̀͆��)��xB�5����\�J���n:�+��Qp1P�q0ݫ�8�}�tfGNz��I*����ݘ�%f0~�&?J Q-
��{�ŏ�-��kdܧJ
���S��i�Q+�C�l�@���I��~^#P��^�A]5`a>Ɋó�Oå�t�T����h0�I�j�On��#׺vo�#��Ĕ��V����D�0FK�j �3�7J�Ei<7�K����[y����Md�4�e�Ǐ�4g&e:�B6XA
�9M]_!�iR�V���5ޔ*
���<�ʆz�rA�od|����/Mg�t��
>����O*��ܠ�Z#Mw�vC���f����/(�@ă�IFj�x��Y�v�:[�:0HP������cp�	���u�+��s*(�Ԋ1�(
"
�S�F2�)Kd@���U�Ԋ�7.^$�{8KA��b<S,�{[Q8V�Q��d�����e$�\�0�U��qc��WJ9�3�C�=��r����]�
�Rï稉�:I��a�'8KL8�V�BTQ�e"IU*I�zZE�M�*WJKS��d��b.C��n'���Z,*'s�C��\����3�e����%י�,��:�H;�Gäz�X�`$��ѨV�A�FF�U���M�%J��AM�܁�X�k��J���T;;Ú�� 0�Y8R�y��#U�y�:��ɔ9�0/s5�ȇ�L��5ց�;2�Q0���2
k,�����'H�HTa�F���lqgb�L�^���#{wO�Tw�F�ݲ˞�a~*7G���t^8A���(
dwV�ΰ�|Q;��� Ќ�JM�H'��j�/(�Lt#�l��[��Ljg��㌲�S/�;X,�e��!KU��a��
¹2´1�+0^
ߚ˺�h�0� �>kx�0�Ť�!,��Y�+��
�e�y��Q6�OpE-ש�����p
��\c�уwvڬ�37q�b�ʣ��P�V姇��P�\%p*v���n��(���ț'�Z�YKVݱb^)�f�a��g��=�5�L`:�/��J��}$�d<�qOf,n�Wlo�e��Y�֞*��8
3v�-W�+�H���Mk�a��>"��	!nZ+OA'����*�IHK]�C[�w<^��Z���SmQsB�Q��C��Қ�)���3�n?�T���F�F�'��7�=j����zp�����N�
�Q:u�9�j�`�(�c��;��O2�*�Ǹ'��h�u�Ēu��䇵���ێ}�	}�ld�U6��G��JT�o��K������+@�:�d��枊���h*��e��c���˒�8��P�蕇���a�d��)�I��d=���D��~��!�w�)P��U`W.��WUc���]3
��5�����j�'��q<��dD�ϕ�~J�ɧO7�F��+��fa�?v��8�s0I�h�vБc���o̰@s�;�IP�ڙBg���2YO��5:���'�A�(<a�k�eYѲ�dA�h3Q�o�xZO����S��㊑;c��;�BjJ�I�@��{�A�|L��{lB�6&Y..�e*�a�Y�,�|�Rd�
B�d{�d^���3O��'���n�^�MW��M��6t@�}̾
��@��ٙ�%�jA`ٙ*b������>�0�=G�Ǚ*�I�>6!������. �� �O2�'u��i�!��7ZU�)j>U������>>�����7͆&���a�]�u�v��8���4+{��}�
Rr��A浆�'p�@uF*����#O��y�^Œ��ջ�Aq�D�m��:��� ( ��JD>(��J��,א��F�AB�����.�ݓ�\Ù�%��`-L�zw��:6�vGa�>�2�I�+G���H�ޛ���\S�GH��7��p�q�!|SN ��Ou��?/HWB�����ݲ��%�*W�ěL�}⠪f��zO�č���[Ѷ&x�i⢗�w�7�׫�^��2>tT�8[��|��նt��@�T���،"f}pj��2;�l����;f��2���P��g+N���LMB?��G�ј�h��u*�Ҍ�L����l��\�!v˞��Q�����0�V�	ʺ!~�@�JYg�tLa�B��PQy�$[i�` R�q��܁[p��1]{�7c��(��DW����sbE��N�MVc4��;Ԗ���Э�m����Q�rJ��;S*�{S%���r^�;P�4��r��v*��ie�,F+[�.��.�<NY�<��� �1�x�7`c�3p||���y�E���J\���n�\>u$�7�}�FY4}>|X���h��r0��hR��n|�l\��c��1Y徇|6^��`R%�`�oH��oWu��_ī���T-؟��`��
�Xy��8e�A��A�
@�1e��SN6u1���Q*�^�CL5c�Β ��%�c�°x�u"�s�՚�]��z
���DU7��\wk��#�I��Jk
K��A�eH��%��
���h�)�Ѱ�jmܲ��S�cA���ɧz_�(sqE������x#�{꘼��X	S贈Xu0�����k�
�%����"pC@R���T@`��Y����Dװa�v�zm1P�тj	Ƽ����V#�sG{�AH�^81F�(�OAxSG�A*��Ad`xg��oLT@�m�O'^�I���*"1��U�6~�4L[I���X��u�a=�����I.�J�Jj9�T_U����gb��4A��F���.{<]�K��O�±o��y���R5\c6��J�x�D�Ns�⛕��^�T����:G�G�NR������q�ê��B�`L��H�~�u�S.��u�B�T�ܴl�>>U`�;����Τ��P������k�b@��|a(.q���47K����y�Zɂ���*���s�(��:P܂e�\�k)��I\6
�|�A���r��ڲv��_�]��k��W�e=��f~Bמc��	��vz�G��Z2�aͅ^�fC�+��D���65A4�kͅ�;��
J��"�T����>&ݐ+��z�����r��n�V��u��0\�Uq��ZU� �:����)�!&��*E���{J�����+�ҵ�����*
��G�v3,�kE臗�t�k�Q�O�C���&w�!3
�H���1pK�.nD�􎈘�MwӉF��h���`��&�:\A4�:�rM\�d�^ �R;�*z�nv��+	׌�k)،m�뮱�(���`�O�5�	�4�V����}�1b�w+F,���Γ�Ib�;�0CG(�ݝ�0�a����ք��|$ŏ�Џ���T���Q'P��Q�NK��a+��LINb'm�3��Wq�p�����|�TLQ����:/��6��_qW�
��&�/��\�,��H)Kd�J.+�k�w���Ǖ���
�l���~��'�h�=	kbb�n
��Dن��.���|�O��
���s�,���`���_{uQ�C�\_��FU�(�j�&�6�1�����)<0KNBg��N�N�?\CG(�θ~����$�����H�`��;,ŝR�vs�!�a��}5}T֓��TfeO�a�x�[
��Tg�y�i'�\pD,3��W�^�։����LY�6�_Ʊ�U����G�F^X7ĸ��`�X�Hq=���R#�8��a��3�A�O�Ѣv��7[ͼ=��m|���Q;�oG�jd�Բ���$qW�T��uɉA�X-"����|U\L��/N�>X�@5����l�qF���i�E@"�V�jݩ�G �}<���B��
�H2��4W�~�E�-�~`�v��d�*�#L�=�@;f�
$v߹���YV+��k�+l���rH��z�Cv!@7���+��A�wl��H5���5Ʋ���G�Uv�3r��|�*r���n��hJ��A��'�Ǚ�\��]R�4�j��	�v�s��@+n���S����0��Ph��8�9���hF�dPC�z�sWz3Uij0�g�	0���u�T+KP���ɨ�y���K�R�D��Y��R�`�\q20�~���=*|�b���+�9�9�v0�pZ�7\�� Q��5�j����G�&�H�9)��U$�A�P|�z�Ø<�)]���.Q���Y|lg�	'"5U'���_�Ut���7�k��M�L��s�|eW�i�Xu=�843(����ٝ*�u?V�`;�G8��\9%��F��>tK�V�Y:*��%�Ն�DqqL9o8Ռ��l}���j&ߴ>��TB������A�
.i�k7#zH��p�`:\ p�j�R��N+N]M;O��j	��uábeI��*��y��;���R��{�[�5��S5��'�6@�Y}��*�R�V·���nP�@�
�z�B���
t��2�1�ȭnP;2G�@�Lu�lK3
P�`\+lMoFID	^��J�v?��ӵ� �TkRu�o�
R
u�A�5N��ʯ�jHEI�#�H�Nor���W�1�f�g*���\>"���Hq�I�#��j�:�ң���PTb���#V��]İ�k N㵙y<�YY��&w�x�� �JA�]���ʰq-���o���յJ̸���,/-���j
N��i��E��/I���ԓ�ȹ6G��̥��\�V�i�H���^d!�W��Oob7���IY�"g3y�U��ᠸc�N�D�X?�*8�3��H���c�l���G}��7}-آ&uB:���g�v��\�g�A�9q����E]�ȜZ�S�2�������|��S}�z�^�W�gF�Mn{H�S�3�6�B3�*Qh��kԀ������
J6�g�(g�D5��=5SS��a���Ǜ;��ɖ>�j�f�!
�L�K5b�D-�k����%ވ`��jW�,q��\5sE��f���$�B�+!K
V� �S�jH��9Pl�q�6=
&˕Y5���#�����2w8�@�G*�ZVo���a�ܜ͖�H���:��3�9[f+�g��<ˋ0>�B�;�7ʠl��b<
�2�`�v��4D�Ff/,�9k��X�\�;�>�J(滋��0�8�H�ש�Ñ��o>v�C����p�C(�J͸K��|X{A0W�i����Q�Rs��
�-0O��1�B�t��y�vW��q���~�!f�,�����)V�����)&N��B5r��d2��ghi�M;�ܺ(�QM�'f�2l-��̏��>�d)�s2�}�5�UqA)��>*0��G	&0�_��PPNդ)��EPk��,C�"�G�d�v�P}qrM��H����KA�+�i�w�
��5V������US�j���S5��b�勦�z�Pr�[����kԃ��z���w��U��W���2�*�h�Z���Q!ˤ6��9t��R[��|����$� �#(�i��Y�^#�u=�M���|1����L]�z駰�?�`:1=#�ҩ�
@��9��uߴ��3Z^��4��.K���u�SgyY�O�Tmqǡɕݰ��a��T�_�Ro'�ӎ���ǣ:�=���y9�ɸKU�^��J�"�C^E���.�U�|�r�dx�+���J���޹��멶e
m@�鲾_�m&Q�Eu�~O뺘�y��o5(��`Y�˫�_T�F�;�l�h˨�Ű����˒�>���vB�_E�axle/V8OQ�8�rC�X�u'��q)B�>C�L�T'W��X�ي�O��;�W\����8D��LQ�7�*�2����qʗ~�M1���'�V���;�ֆ�y�+�)�?��2u���GJ6��HgRc��9y������?�l'��z;���v2�=�����y����wv=������>����`g�?����	 {te߯�[U���6�q}r�~�%^8��$�ߵ�J���7�^�ѵ,�段�t���[�_���ߘ��ݽ�k��������om�o��ŀ�h��!@ƒ9
�t��}0�
��.�S A8�7�n�5@�2Z��-����OhҺ�f	Y��`-�l�2�����7�;O����om,�£1�B�Q�wj˱8�[�Ʊޝ�"d���(�d;�eL������m�c�$n6K�*�޲!�ڳ��|�:4�лQjA��;F�L��*���hf
���U�y�S�5I��[��ݛ̘O��EV6e�*�L��'Y�s����6�ٵ��3ZH:v|��k�
\��rRY�Mu$c's|����`Ԏ�?��$!����)\"�L])�%\d8H%d>h��Ȯ
��X`���b��
�6	�dmI�B�!����u:1L�� (�M�n�Ց;�`�is���6�>�Р�����#ghh���?K��"�'sԍ���?�8z���{�w��N�������sIie�q|b��-�NOON��om�	��6���{�>�MXV1	O�Hp��^nZ��k$�_{�ŀ�;m��֙�Z���ۄ-��ն�8Kq��-6��	��V�R&,�ۓ���#M}]@�z�]x���`V?	�|�I8:�����#C/�> z��><������{!:��(u�e���wa�:�:j@쫨!�Nޞ��9��nn`�i�'���'�)�g'-��	�˿���ν��c���sAa�գ�OX�ykH$x^‰���v�y/�-��;v`��6�L��s�S��tJ���ف�L\��ˇ�j	���\�t�]�ܙ1=�0��|*�E�O]
���
�g*C�.$�,�B��Y�&�s�c�nõ� '5��hT�k쑱r����;�%��X���_L����٥����_}L=|e�Z�HN
=����¥�B:�amO_<���z(����q���IR��/A�>��/<�`���r�d<D(\���/_d�8
*CST�rʈ��DT�Z/��z�$*�	Ŷ��4��p�|_lL��dD��XO�o�Ӷ���Ԋ�A��'��,��~�}�(I#�-��|3	k\HóEMn�H"D|�|�2�S7P�,��s��́�z��ߞ���<;y���â�����������RA��yߋ�����y�����~N'��������OӦ ������mÚ���?�ع����
��Hb�=��R��i�?����{�/O�_�f5�a�teZ�o;���=��,y�^�H���\1��¡�S�]`GX
w�����=9=W�bR	��zM7~ܩ@�)�]&�+������%U��8�g���ͯWR��G��́����'WBz��P!���B�?{����!1��	���
�xve�A-3�V?m�45����@|��Z̍D�45 �����я@%i<�SNC-Y�/G�XlC�U���@�h���b�r4�2�O9����>-n�A��6m/�;�M��V	l���_%�=�d$ej}��_ƾ����Hb����yH\Sn�������y��y���o{
lFLY,�۠3K|�T9jHH�x�S���8�\y��b�6eC	���8�n��c��	"ȫޛ_�_6��tEh�=ɦ�?kkS��i���X��1C�̛����H�O��o�N����{���
�-�ҍ[{ye1����a�0W/�����'�ѹ�aY�A���@��,��>;�խܔ��R�RՀ\�j��}�Qh���t����i��8=��	J�m��'��7��H��<��-y~m�N��֗���E�_vH%�E*�'�J9����bY�P7�������`����%���ޟ�(��p�m���s�k����4�s�y�D�;��fsf/W�p
r��l�m�n��p+���7f.�F
v�=�r�A�e\9�T,�-��}»+>H��'OHY�;��='�.�,��%��%S�闓eI?�V��	��s��˦8U{��E5�S@0-]������J;���s�W��$�N��Rar`�|F:��ciL9Q
L��ZX.f@M�ymL9�~�',W��>Pu�%l�1�t;�#���E�<��f��qK�e�G�>��2h�j��B�#��
�*�"��{��6բ|ț֋���uq78
GW]�v�X�^w��L2�#+�d�M���q�������-���Fl-J%�#7bH�����#[��h�L�{}���V�n	�`����Z�}g�#�[�o5�5��:�e۶��l�pt�}��軆UH]l���.�"s	$�$7�"��p:���cnAQ���+S����!�����m[{;��΃+���l���Q��vC�DA�|��c�K�G�+lj7n�!���wW�Q�PeR�is������43��"��1��wV�V��GI��4K�[Œ�}M��,�;&5�f�2lH5�/��[a3��=�'	��ض�`�Z����=8�h���3o|�/�
(�hIF�`y��q��������la���N��ҔȰE��Z0�V�*�Q�k#�R�Q8^X_��T`��HZ�BU�`م�Qp��5v��U�ش�xLF��T�GY��Zʠ����I�������,�*� ��[�B�چ/�8��������@Co�Q��]i7��/�	~,��F�.k[��l�C��z�>�������ǣжZjF����p�Z����ު�xcƇgف�h���bǜ��o��º_���1��ٓ���^�w��Oɢg�-lxҔ����ʳ��s�7w^������?�?|�����h(���u�f����‘�á� `�l����gpT�u|��Q�[���NO��&y�d�5
[x�
Zދ3���
��m��Eټ�z������Qi)(������vq���L���:�� v�EV��!�/��>��s�-Ո�u�8Z�1u���kf7��7�F�-�gU�Q�r��<�~��U�������?邋��w�z��h�5׌�w/^�N�g��S��w�&�Y8�9}+��{Q[���2�v>���X�V�"M��Ұ9;b�ܴ�W
�X�(�|��e�;�H�_�9�d�n4-s���"���$�[U:�U�jROؖ�O��?}�����~+I`�����C���p���y��b|%�VdY���xR�c0�������(~*�x��� �o}����y@%�c%[{�j0�0�`�P�ըװȷ��_9�=_�P��u�1L0)0��ss/���u8;pbҎ�EW����T�|n��"�8��AC�f�v_`	�P7s�����Zԋ���x�;��]_��1[�*�W�z7�웑�*�+.�e�d�o�i��C�(6:���'�N�21\��lArb��v������%�'���W�#p��YR�!2��6�'�-��C�Y��f�_��,Ha
JbE���YDMӥX
u'�J{��ʁl=.���n�V�k���G��]����r�����UcC%7ӺU��X�H�mY��3F��"�
h�a$|>.��ۋ������vD�R�ۍ��f��5��=�^\[�-W���U��^!ulD�5]}��$&n��m�Q��P��[�c���(@%�q�����.=���Jc���l46�<��N^lT0��d��3��HJ)��kI>]�.4���¿�\�����lYC���
��!�_P|6p���E6�����e(s�o<h�@�&ʽ����A��n���X/�������?����b��Ѷg����6�{���<&[O��%����k��<֣4�z�Q��g����#��X��y�2�|����p�t� ͓?AnZL�x�M��R�u�Ɩz���gl{�n@�O^�����6��!<��tw���C'Q�q�b6�ef�NFxm�������;y�'�I��	���|�<*�}/w��l6/�u�xܾ�߂_Bf&<?�[�
�܆´�z�s�q��q�}yqyuxpu�����y~|��Lv�K��2����P�Ÿ��ߏ^��a�F�q~��W�u��E�2Կ��.�k�3o�־��\s�3a�mq��M�r���j�Z��a�n�ê�����1��U���_�+�ޛJ���e\��q�`X_���5���l�܊<Fcd�`*�wt~~z�˻�^��ˣSZ����.�;;����r�h�j���)[?�|[��zu���nm~V���U>�=�py�b��X��ޯ�^��a�G�{�<ECu���#�=���5`���n[��2b�L�����ˊF����Q���{�z9%������������D���7�����=},�o�֎^G�;��N�4Q)ʅ�t�/�e��ޖ���/X+G(�U�ң҂)
��r\����ˁ��FT�	a�4� *���!1j|�lo��}��������������E@��΃�?<z�KΡ��WGǸu���y�z'��ɩw�t�U
��_4�����F[��&"i
l�Φf�r@������j�A�N��������h
�y�
�|�"[
�z��pX^$���R@g	z�X;��,+쌚�2'�e��Xu���i�9Ɵ�~�J���t���#�˰ p�Ǭ�{bк�r݅�DOKpuU�,�\Y��B�(1��Xdn2W�n��"qHȅ1����gQS58�	g�]D�7�l�B�j[��C�3jc�rD�p�jx�!����C��!��Q�k<V	6�?%bU��njj[W-%�G�,����q[�ݘ��e���Y��\����DQ�O	���WyG��sSZ�(����f�l�t������;�`�7���\��<D��z���.N�?��Zg��D�G���ky�s.z<?ڱ�S/f1����Y�'A��+8_c�����ћ�Оg�����.�`�/�|*�ޓE�ĵ�4҆w+an5�ܐ�r6N�k��e�
�f��=XE
�z	�����-�w�;�"߇����5H/pQo$%H��f��t�'�)NͮJ�]ݺϳ��K1�|�I.���
��I�1�����נ�zé��@�;1u���6 ��ix��VK�u
�gk�����
���Q��9f!���:��O�p+���0o�.#��h1�������(j��c�"����:�Ġ��Y�%4��I	]��M�N�r�y�D�Pc%,g�;�%�YK˥yX3��Y����o~��c��AQ�<L�/@彼�n�@��>��T>絺���
�q���a+l�]��ݥ��m��)hY7������n����~[K�؛���2�X3��i��<^ՒT�j�W5MyJj�厹V/�n���7�W1犸*y9�?����K�w}!;a=��U&Kԋ�x�aF���/|e�h��F�}�@9��/̎�d$Զ̚D�������|^X�3�V�&�2�w̼��ծ�n�Q�Vi�AvݭX��?����P-nJ�tQ�2����b뮚w�fw��	q�G�h�z��e�y���p*
lbUV7��t*5�2�Q���[98vwž�1��,�/
ՄYe�M�RSe��u��^�������2��|`�bں���\I��Wa<U���6���#J1w�P��V�Q��IdŘ�_�1Kc!����Ʒ���/����~�>�D����avj�Dݲ���	�G���� �2hy�nɭA���U�ɇ����/���/NN;:}��.m]�`z:�6����I?�O>�
fKa��l�<�L��DG�T ��y�Ps�d�C���ˣ޴�bIl�EY1խ���im�d�m��݄sEH�+���C���ӁEư�$k[�G�#~�L���13��Ȭ���Y/�A`V��&O"�M����T
��t�Q��E�7��J�ֺ�ta^z�@�y2,^��]����7g�^��t
cƀQ U��vC���Ps!���bJU�_N����jI)��֞ax~򦷆2�2I��0c[�T�D�v�ׇ���;�p,"�N;�l����:�dΤp�)|�j!g�OUؠO����Y�Yv�� ����;o� 1�\�l5������c��<E�7G}.�'E���nP���Wz��ޜ.�*i��0�/�~�x賆)�Hf��K��k��W������T��ˮ�%�(�q����;�uٴ[�m�qy��P�aU�ab�["��ɺ�|�9:,�d���k�d@b�HC'�K���x~
�۲~�L#S2��uiPױ��Bߴ�#7'�b~�,qBvy*�!��2���
N�bF�.�C-�@�#�N�/Xʐk׍-��L�h�C�΄E
��GK=	��p�`bK�.��H�q.��zo�,�p@Y��L�7�b���t����d.<�'��\y^p�0������B�:s�=r}o�>ڈ~�8㌒UJ�O�#����7�r����Uf�t(;��m��뎔��X��/q~�\��Wڥ-@��m��
ZR�\.����!���{�_ѝz��՗��2�p�b��*2Sl��i
aXZD���%�yŀ6��k<*Y�W'���%6%H�����Pr�-i�0=����5[s�����tREm�
԰j����M��2}�MI�lii+Ў��ŭ�!/̮,mK��s�ϊ:��V�5őYr�	�����Z��%����#~6]k�<&;�C\n���SQ����l������O����UC9���B�Mj����mg���(ҭN�w2+Eb�;2A�����6.	�-�i���PT�2ګ܉�͝p���qDo�Y7�l঵r�6:lo~�ڸ������բ�CA�-��CQ�I�j�7,��,���������o�[{Ё�ڋ�^���"خn�W�J3�k��-�u�g�OӅ��4��N����>ᣀ�<���Ч�
�$$�u��g�u��Ԅ�1��J�b�WL�[�#��d3��#<q�J�'���T1��n�ҥ�����_+I"�&p�ӛ`����@�c15aq�,�]]����w�D��4��m՗�|{\�(�_��$i���/�eC/i6{'�P�ɏTP��ҐF�U�P��Bd5[3���CFE2�r�%��eJJ��)��
�NS8y�l�3}��p�Y�jc��#����m]iV����~[���/6�mk_;v�[�� A_U�����/��e�b�t1Wۍ
�_ߖr��~*�Mӆa~��l��>��[��$�1A_J����/氙��[R���`�q0���tU�G�����w0��ˋ]^6���M�^w��`�rw��eJ|�(ǀ`������d:i���*�>tr=롫x�JR7k�2N�!l�H �!���n�}�NLbgv�U��q�Jz�|�V���E��
��6;�ll����gt@�(�d�WܲJ��Hs��>,9��)�"6ðlSߩ�F�=P�5�ª�
̼�܆�b���z(�uۚ>S����Ŋ�Tw�k۝�+�!q�#f�� hos��o�GJ�N�eFk�#=��&��%���L(�A#���+�k�֤f�v}�YqXe7,�B����%E����45Y�L��P2<|�0�U��@����������=����9�O	��
\�r/��{�J<,��Lp��!H�aI^U�����$t���Z��V�v�?V�����0��6@b��G�*\�A��T��(	�n]��-9R�^�Uc�fU8�������*}�����gz�9��"7%��j�=��I��a����m�^]8��H�R#[ʨK�-�쪝�]�.WI��&{�ѢHP���Q|Cm7ي��Aȧ�S͢k,K�R�����/���܃�}Jj�or�ѐ����TA��α�s�����Ҹ���ܶ�
�5���s�{<u.�k[��_�-kS-*Z�S�
�u��ϊ���|��G��7
�_/�'��Z�χ�y����j�>;���"2�ʇ�@�=L�gO|u�믽�+�&��I{�R͉��f�D���o����}f��@�� )�m=Pz�m=�YxF�5��3ph=�ʃů��J�4���$��Y�	��T]������#����]_��O��#'s3�>F��L�}ī�{���Ωi�L�4韖����j{s��>�*�w��l����@�ì�7g4�:n�e7m񜆠��hΌÓ'� �h�����;硷�����_q�@�����ã�_;�ϟ�H��%^Ł��H8R&�n�Y��\|e��y��ׯO���V�q��ؾxL m��_����C#�lb��+�Y��²�� �Ag�t����@�Т�R��ʱ�[j5٣fX~"�E*���	ƾG1�dEHm5��޹'V���蘹��5��"��	���n2�r�y�¡+���'��[%���Q��u�5���Z1'{��]� �7!�͹�O��(ʤ�j��[8)�F�N�<Yv�,꧱3�;�0���ֈ'�}�ޒa���l�����D�\ܠ�<�x�B:|"��y�l\�q����?�0n
	Ƅ
�j[o}�|%A2f^�Q��X�*�y`+��\�o�z�:�xt�Z��hL��F'E~�֮AqG�÷:�p�X�ʰ�i����m�tiRw���d�(ǟ���T���)��T@�Yp��i�e�{���^ÈAal����i���ӯ9���tt`����;��"�PzX�b�[��[�e�3������;�r�\m�v��d�k8��.l�E��:b.��G��9���l87���-[{���V-u�bB�pH
z�(�,�K5��k~ќ{���\���7ѡ'쮵h��j'�E��^>ؾ����3�eu�C[zp).�x�%��;q��b��wMy�ʥ�,)R�5GT(�9y��0�t^�gZ@X�:zUuk�֕k���'@�2�wF��Ň�%�Ѽm�9+��YG�`H��3�4;@q茄��zN�
�;���1��q���'G�0�'�܅�mYI���eI��v��2�)�V"c'����k4��&,�O�c=��x9B
��
�a����:��L�[i�S#���U���ϒ�L�GI��/E\��+DڶvZ_E�&w���
���(�-����R�C%��7�˂^�K$j��!��<M�[*�GCa(0&	����	�x���%�r�͜��@���M��t<�"
lA=��B4��ϡ6k�4u�<i�r|���\����|�m*i�]�y�c�@�<�Օv��R�kT�&[
!�T�1�ӟMH��w���&�������V�(��h�n���)$
`+ҝ�0��`�#v�Cr�3J?�;yd�܅�5q�:�EQ������TJz5�.l�N�ܺv��R]��F
�ײ�$�LP��H
�(\�^�/�D��
]�Y��)�x44��y�_U���śn�gt���衡�f��L����?^*9�]\I^_��l,5��!�q�{��U6�<Ϛ�庢��g��>̭�za��5�2y��U��ԑbdʫt�j$�6y�Dg�6+�$
�3\c�]��+��V�BB��R5�|�A�W'#6.|yǕ�(��Gu��yE�`���6.۷�(�*8֋��W��Dy�
�*Q�]�qU�r}Ez��Hb��Զ�oX-F��	,zbpLL�����-Y�񱆭�/��go���F��-��v+��b5	1�dyquqse51b[��C-I�|^�w��ػb�I��ڔ<>��^N�Q$A�/���m�΃+��.���}��n�\p��2���3���C#3
S���S�ye���҇7��`|�O9lu0��HJ�����i�!��"�u_>5+�6u��9��[f	nŊ�Ҳ��ttx�[+g\�>��hN��9�3*CT����+�<ՉR	>�r_�ҊG����z�-���6o��h
���1�D4>l*
��4ϒVH4.�C�@�O�c=�K!@�l(O+@W��[��>�Z�ה���L8S��I;.��+)gJ�xj�]+�zO/bIx�h!�W�PfIn�Dg�6ޝ�#8JFn�XЅyE�(m��G[�*��)���IJ��ܜ���vq�T��S�gܛ����m(sM�=!
���U[/Q O%{.̐�O��l��#}51�y��NMlV�#㾳�a�S'vY��,�V�iˢ�ߐ�Up}�فsT��hbS�e���h[�-p<6i�,;��
�G/U�ijG��q���<�:O����b������0�6�o�"���91�M�]L�����c�J��60��X�F�Vn���
f껉f�HB7���%��	R�>N�W�6��{�fa�:��޷�_ܡ#T�f������I���|6M�ل%y�	��=�ca���Sf*wƮB�XE��	�#��:�r�8!��8V��qGņ̟�F��,,�m��E�	����~�O�r�$͡�g���Z���2v���X�SM�m�տ�y���p�Ӂ�|9�b͋�����s�fu��viHjr<	ѐ�7ٔ���ӆ���^m9S�:�xa	z��{�dTOKo1����T]�V�潔����o��w����������G�;�&��K�t���B���F��34�2�\$�IF�ȐR�2�>�&,y'C4� ��|���q�nn0��T*�a�ar�E�r"Q��͍܍I���'��*�*@{���pntQ�R($i1�v��D~z��W�cb_.�����yqr�c}��F���w�����O��z%��+=����0�]���ٹ�Q����?K�ޞ����vR��?�j���U������ޕ���n����O1,j��3�Ï@��ۆ�K%Z����E���r�����E(���1�`��X�oJ�HnLBP04�bI��*O��g�[t�RpP�k��¶�'��7�,���]�2���'<�s��G�
��G������
O�a��Y�{���=;=~{N8]����M&n�h�������{@��^�{���D��ō��Q�&� �yP���j �ܶ�X�\�ͦܰ'�E�<dWD���2�I�p��"/���B������Qp!o!A�h6���I�<$��t�y���<'���*�$�8�ʍVU9��:;�<y��~�W7D&�W�7���$���3Ր��ύ��ގ߼}w�p,�.���h��G�/9�K��&�^�[%�=��{����)���M�Y�$Jk�g-kog������k�O׷^���Ó��O'��0
~�(gFa���3��qAuj�]�����f7>zU�]�6�3ץ�W��zo�zx�N�,N���&�F�d�/RO�y�t�mI�E�Fi�T9��0>|,��A�d�,�%rɒ�?�<v���X�7�*��BC��)Z���
�hB!g�8�.1�8��D�� AUu�y�ܰ�jr%�?pY�=�FC���%Lc ���&��`��V=��*�̝R��py�Vp�W�͇�^3�N�hp�$,ɨ����IT�>Y`����I`E��5��<�_؈87��7C?O��N`�э����f}A�i\t���Q���\0wN���m�\;�&!m�+o�ڄ�PX�;m�LΆ9۝�B�p�S��>�0g%��$�7ħd#����إ������2ѿ��bE���%GA��j)�^7�F�{�3�@�<'ۚM��;JN!��vz�@����w�[5Z�`�z#�R����"`��o��z$����_�Dܘ�&=��-��	w�E��O�Q�a+u��.?Q����c�M	�zP�8���jC�:w
;"����,��ei��؏��F�5�����V�v4���E@D]��s�C�rTl�3ؔ
��t�]�aGxgIo�o	I5���W�೛0s��;����'�,q��—@^�|�ɀ�XNn��[I�F�6������:9�Ga_��ߝ�ή�Y�}ܐE}޲��x�m��E��g"*Y���ۗv3��fhn�%��	'�J�o�<Tyٻ�r&8Ʊ����"�S�Җ��s��h�ZD��_A��fӪ�]E��O;Ֆ��q�&��.��yEc�y:]�[�� �A��Q����}����E^�i���Z���z�<@|��6	xA*=MG)5�b��niFd�,�P�ܐ_'[1�lj�9+��n����-�nH�!b��Ln���5���
�����e�~�Dh���畆�>JA�px���6X���UI�E/�T/"i�����|fi<z��I�L<쟊WN��R�[�F�!?�R��.#�Y�C�jņ�U�]u��7'�����ϏO��g��^n�;������G ���3�ڟ��\�������ݝ�������?|��r!OW.ܑ�Q�=���.<�C�ip��
�2�����u%u�g�>I�֑���F}~܇C)MY�;�7�()TB2ǣ{4�-�z+r�ە����
�γC�7�Oo�-C�J6�
�U����_�B��S���d��/J(B�nҤ�{5hD�O��;�����h\ts���]��_�"�-?F���e��Q�>oϢ�f8^#���j��6���E��=a������.��zp�����I@���=��職§)��-|���T	���(8�xg��|�~2d+�>.��\$g��Bt�Id�,Һ;)YuX�6G��� %4�����@��10,�f�@y�b�f(MF?��!yX��$�3��w�p��e~:VDK-��uFW�2E���0�m�K��"'0 pv�(hYBr��suWEx�M]�r�a��v�gM���Z}A��x��b�e���{�>믲���K����PX�1��MG�&�W�1:#�rl�I�KL�O�)�@���	�J�*Uc���±�(�����h��kl�*�p��������
S�_}��ٽ:�?���
`�Z*6pw��$(�Q��3�}y���h�����}|��]}�iQE�c?~;`%���l��_��@g�h��ݭG�VsA�-��/��+���7���N��m����k+HE��d#wv,۶ƣ�X�����$��|�v�I����^<��c��+�2��'Z5c�g�>�wl��ߵ�~��Oj�'hq�Ᏽ���O���������nل��-uj���<B|\�[�r��CQh��������	#��������ɋ���W�N~�=�ng�ᯋ&���݌�)f���q⺟\����[P���>���S��vU�18�ǘj�y�51.�%{���&S���]���!S�����R���Y�P�L9�%���y5�l.��n�#�̕`�w-x	��������{i�����<<�	%�i������hDo��c���AJ6$z���;!5]l��]d0�Z�`�iͽgR�Lb��S���K��$v%�xM�+�4���cy��>;��w�pɭ�2�|�i���������QLa}���jXs��Xࠩ�cz���M������S���X/`x�,f��B���҅����g��3CpF�篢(Nso�F�m޿��q�X�H\*�kX[���'��xug��[0��{��.��K䕓C>�f�F#�Z`{8c��7�)/�����e��-�ʻ���X4�k�S���]��֖8w;'[kW��}o��*3>��q����F�v�R�h��UB��Cw{{�X؋}���e�t;��>�vRw���f��I�I�Pt���(�s���Eה�j�*m|->>U���
K�t���QuU�ן�z��92we%�h��&�\���㣏�Mr,�"��&�����G~��t��{eg2�%6퐫%Y�:<�?`�ۃx@�ח�UD�y��'���vr��]ߛxr�	Neѓm?�s8��}qr�������������P�)��$��e�CXg�O�h�h��S�*�ț��j�4W��3�̊���8��u�YCl�nT��O,�[|���W��XL�
�f�$	Ì=�>�k��LU�D#�����S�kˊ��b�Y�ެ�
�!i���
C9�H�~�g��r��^M���f�R���~
�����"�[r�i	^$���4��m�!�'<�湉�����j��蔮�ON1����1��UT#���d,Һ9�"�Y�it-7��y�T��Y��X[j��]�E�!s"_�oL[1��m�,v4�Tq�_��Z{{zr~bl�J�Ծ��>s3P �r���K�Ζ�'Ls��pXn��i<{e�óW[򩂏K=��UIB(�t[��mqH��U�?ֱI~�-z��.��i�,�I��%�J[&l��}�`��<�ܻ��kz�rl�k� Q`��Z�s\��Aj��uPܳ[kt�%�fWF����A)U�U��WMX��o[�7�Vke����)��!�Z��`$}�u��q	��wg��ѯ�ǭ�e��z
�k&*�W�����<��N�V-E%2|� G�85�Q��5����Y����
�(p��,�ʐmai���+�k�(��kz�?y�����+Q�]�IV������t�b8�94#ʶ6hIVн�a��;=�{�z罒p~��Ҷ!��0�oއ_{窡��1�&�;���$��=�-+�(�� �����R'8�A?ʝ��ߺ���MfN^x]5
�;L�K?X�S�C��;t�>�x)^1	�{L�;����!C�C΁�,��aV��~�.�{��,�X�.�j�)�Y��	�uFAs[Q�%qe�i6��.F����.ԺgUiV]F(�U[��R�r]��yz~�L��c/d��/���衭��0�%�"?�=7�]
_h
��LJhC���ϭ`�I�8$���m3͞'����{�2���Ӡ����luԪdv0�I.���R#�/ K�Q��0�L�:m�I��J���K|AU�H�2wS���"j;`Q_��R6RR�f��S����pi����汍��궻��nu9/4|�%Y��wYG*�U�@�yNu�t��Y�r`������oǽ�ˣ��-�#�,�13oS����%��Z�R�so]Qᠴ���qeF���N\�������S��l���y8�M�-��2R)�Oi�
/�k�H��+4�I
��ɵ���G�4�r�v�x�r9MM�༟��ߎ�_6��7���K���٨���:�#�S�C�>�ի��F�i��E�`O�#�Z
Ci[�v�90_[ы�TeC�L+�����p�
����x+�/��䏍�x�1P9(����V�%8�T�P���jst�sUۑ0��z@��ȟ3G�V9�H��HF�(.����Ֆ"��)��sϟ�8�����`��!��&�#N?Μ�@V$��'m�ak�O�¹WM�nEj9�{{ґ]"X9���j�HT
x��_��Ĝ�]�gFʒH �XK�q,%u*;�9����k)�'�*�Дs��,Q����--��h*�Y
,�W>��l��}�{�Q2��ʂ���C�����j�o��bl����\�#��1� �P=��z���Ua=��M%5){�������f�%*�3̬��ݩI��ا
rj~�IӼ�k��T��@�_1C /���J���[ִh��.W�J��Z
-�>ώ��"M�*�b)�.�2�Ϗjr�U�"Ƨ��'����[R���L
���\}�1��EiSo����Q�o��K`U�B�XX�~���|dY����<��"Fd��4C	L�Q��g��u�.�w�V�����g�"�AL�fO�ۤ��Z<'�@�c�}_Q�`m��	���X��(t��~)����&HJ�^���d��:�jc�*1o>>��3�M\�ޓ��A�o2��q�/�]�G�'D��.Kvb�7-oe0%M��6������l���HB�R�ʊ'��rD�iE��R�H�D������X���+��l���!y�/���}0�Ɲ��1��jP�e��@�ADQ7L���0J�1}@���}
��|�������ۏ$�V���k�?a�x?7ee���JI,��;R���%JCߖ�KD�KP���Dj5��b������VmK^���ˤ/�t�Z$iƈ����KX��&�*�}�=)?[[%9�lޭ<	�:�z�b	x��!�P�zɞ��:Aڛ��jH�&����qro`ti�|�"Eu��_J��7��3�ey
!l��{
i���A��]߼�{���8XD9�"z�_Z:>;��?uvm�ъW��4��]�='Yn�³�4�<�o*����,BM��g�x��ɧ;�1׼��+��>
�#`�"3sL�W���K�a_�މG��i��`L�����#��R�T�I�Y�{%Q��K�Wè y��]�'q��J�s���U�=�c�,�M��h��%������wzz���?9=����ѫ����jO��n2�~D��2J(��,Ҁ6+y�](v-b-&�r&X
��	�m?2Q��n��a@��6��.�� ��[u�=�-� q�.0���U�J�

O��Q��+nG�R��R�M�Z�n!�l�#��P^}��j��k����ޮ_�ۖ��Z��[�
2�U5�
��gIY��J���>Gc�|�K������[�}��U�K�Jum���?LIot�0���A��yxݧ���b���jq<1���s��1�%� �>��Ak�WIV�y���@_��[��n"�m��̦��f1	Ն6�Ve�N�	.<J�C��,T�Ѣxՙ]�k���Ҫ�e���ڒ!�~�哮^EJ���ƒ���ʷ���a�&�5��S�s��$GImcC�}�-I�9s�N�YG�%9��K�$�9�¹���3�r��"o�M�����nma6�<�&%Ӥ�R�V��N1{�w��n+��x�q��h�#�]޿���.pݥ�<����hJl�D��Q]�0{LWt�Ή����A��<���CV��&Z��i��:^9���3�8R�4��Ӧ8���9O�G��f��H�K� %�e{9P)�n,�0rY���Z�o/����_����u�Ϸ�k+�&X�0ˬ�۹��z�mC�I
��&1@��QrgM�-e���U)�x�h���Zi�L+��3��.Q�����D���𔻆�20����`�g�	E3������p)�#�,��&$����察��X��h����رZz9��zVCb#����J���<Ө@T^b.M)�I�w:3�ўgMd�/_�vG�2V��X�롋(dl��E�\�߈��I,:h��1Ɓ�L��<o�5�2Ԗ3��l͓q�W�R���ƮQn����;��t�5{�Pr� A�Lt��Ԗx /��_L�xw����ʝ��7�>%ؔ;1�H7Cœ�����+@���]�O%������	���e8Ӭ�c$�;����ۚ00��� �&�u��Y��y�����s�
��
�-�N8��&�-�:z�뻣_{�-�Y@n(�Gޘ��,O$��*�
�S���%J��Sxu�19��eE|�����n^\���Ɛ� �,�ܸ�
�X�:���8[$=G3�֛+<p2��F�����i��T��✮�v��i5%�W4�z�R_���qi�6�Oin��f��d��J��[�`����/��̜V-yI
�*O̊�A	�zR�c-]D��(�l�>����11+�g����_J~��^�5شzs�k��E.�j+�!��uX?f�ż�ro���+��D���¯�s�cEt�Fa�w'��f�Xpq��&��/�)![d�AY%�����
n)uN@�M�L9E
��/7K#dW��j�=I;�n\IG�D�8g���ap*�(�5���IMq߸��W��!T�*��J����N��+R<"��n�x*�.�_�w�Ö�>0�.�
f�ۖ���֙	t�a���#��3O�]{Gs�/p"+ؾ<�xм��W�[����J�Q�e�6ި�']H#൮VI���G$ċ�v�9�KO_<���d���\�)�|���
�Ybㅏk��;��n9��6�
�B��Bt�h�c1��i�mU��!�����`�R�yn������.16*+ I�m+mW/��6��H��Qz���6D�}��� �]�p��2/d|t��m��Ȑ��y$xV�p����Y�^Jl
�W!�C���Z�v���u^P�����n��#��T�x{ٮ�.R���Z�Z�VW��ݡު�����_��_���^]����ŋ��EϽ�qGAYnW���^t�����'���WU8�~�\�k�{��r5���UH�K��)�ų�w�/ON���y:s�G�}��<V.^��ax�N"Ϟ�KkZg�b��rYV��]^@\�y�3��֥�&���8�$� ̅,8�w��҃�z�-�גo?�Q�qqѝ��5�^}��ſ./.��{�S��_MX�'����ے���H&��$ξH�mu�/��Zo��N$��7-�11vwP,7�"Y���/���-~�Y*>�课GQ�ۨ�vQ�'��2�I_m�hȄy#2`������1��wJ)��g��,�V��ikޮݪ�5�m�Y�j���d���cg�視��/��Z(i���M��rM��3��*�s=\�n>�Չ���Z���Ѣ�R栒p.Xի
7��e��x�GI��y'�8M��zc}��?-㻚��f���o���Q\�Y%‘j	k��JuȈ��DWn���c ��f�(W���e"���]d���llZ�0F��!vo	.��`���ޒ���¢�l��������_�v�����k�z[��{0�Rn
�y*���:oŐ���O��.?C�3V�n��:{��)��B1�Fg�;�����XR������6�ݖ���C�0�;E[�$#�$�ؑ�1���?�I�aE;H�Z��jF1|����9�#�&�N���tW_���u�Ѽ�J���8��[
n�
�=
��D
�UJN��i��y���
�?�����㎸�7�`}H�J���>L.V<��f����Cԡ���dح�ST2�
Y��Ԟ(��f���"�?�,c�j"V�E��I�w�N��LKT���k�h)��+�d�1���lV�L�Н7����
EdËy�I%=:�>�pDQ���c���?x��]��u��ev&��Ü�G]��R. ����J�^�Y
���[��si� jqD�Ŕec�}�>��v��Tm͌b�T��D�}|Xy�3�Ɯ&Z��Q���4�
��ʒ�H�O����c7�q(+�R�4L�'��R�>���Kp���>����x���Zd{z��Pb�&)�d{�Xv������Iq��I��K��~�=�U��\�W�D�b�iN���S?+�0�N���ԏ��@�'
�/�9;^�� RVl�R�K�+x�Y� �ٚ�*.�2�YTfJڀaV��-i�jƁ�J
K��Ym�W$���*�p|-� �x�C���Ï�`	�(%�S%���b�^{�HEWP縂C��4e�~�i
?1��t8����?M�

n�az��T_d�j��0cE��&��K��Q�Ԣy�FmɊ��%� �J��H)<��k�Ji�u�]��tgɱYRc
���U{��٪���AD��I�Ӫ1X���E���3��6cz#{�9�u�6�Nf�E��z�Rّ3�4G2����TH���M#X@35s�Wͻ�[v��@�>�l�_�a��˾�s�3���-�������
8ig^
F�rF�c�ѶAȱ�]��K�#'}땢r�|
�k%�g�k�*�� ��j]���|+���D��wz���|�@��Z��r>:�-�xK�����|7��k[0D���݃V��j@�~[E	�9ya
�6�Aj�����dv��	�
]��!0���Q�Y"���p{��k*ȸ������p˱4u��I�cZ	��g�ip %B��E�BJ)-�|���]��/g�N$��/�R�%�K�ܹoz͊er�LR�殘��I�������C�Tu��}��L)����~:)�i�?I(�|ӕ�-��ێ!�p4Wȳ��Lf\�G�'��ch<3ۙ�*a�"
77���{O��l���ckϩ�y���R����/ڥE�&C���|��Fp����:�{�R!�*���ȏ/��uހs���2���0W��7�ø^�-C͊�t��"
ƒ;�l��3S/Բ�fg�B�u���re2��P�ǻ]�^L�k!��X���XfxtmzdUf�'(\#z����M�(sP�H�<GX/ ~:����i�oP�`
��:$�͔q���,I�|۞�ϑ��������#��P��Ƕ�
�Z�L��ߧ-���5�
��q���#@�U7}��4��*^�����I_tͤ�_zp�7�ʓ�0�M׏�箖��M�i�)X?�艍v�yI�+��?�MU�X�a�f@Y*�9mó������V
I�2�'������^
���ȡȀ2��3������֕Bz���`��O���A�z�ߓF�$�%x@�:��6�YP6��B�@�4 H��D���ď��Hkݩ?H�<B�zݓ"�����ʆ��>��;�+��)�!�=x�����Bz��7@���F�6�'_�'�)�?U�lH���F�:"�Q�mH�	�p8S~���ix��ꃱ@aۃ�!�.�T@�܍w������=ſ���[��<O�5���J��@�B)�3^���;��T�3Շ�c��)3��^�@���\�B�V�����l��������o#�ƀ��uC�+��2`V)�M����$���q��2O�	?��y��`,����I�Ʊgt�&��Z{�r�.�����z���o���v��8c�o��|�(K.�`d��@l�_$XƐ�%�DJ�U������n��~.���6�ǟʐ�k�ã]C�!�M�r��4'�A�I����f�
�Z��j%�
,h��0�[����36pԚ�:�v��u'H��5��ۡ?� ��t���Λ�"����X�'V����H�Se3`�+�9_47<��\{fd���z��r(N��8?��?r�t��M*� }Us���5��ڻ�|�w�{��zQ|��=2�P{S6Tk��
�r���E�'{P�<��I2�~H�b&iQ�q���ΊN��sPI�Z���Aޗ�ԇ�_���PC�D+��8ݨH{ߊ5iW��4�/�9�jz pa�@U�n��a׳���Y�>:l�T˭�l��]��ۻCk����얓�h�kj�Ŋ^�zv�8��^��v��(��h�a͒
�v��1w<�]���6i9l����R�J�;�)�8Дtns��(���\r(�|	�p�:�
��#H~�EY��/i��0١����@ �eD�@�q��'iks���-*��'(�+(.�gzZ��,��nВ����Z�����if����[gT��a{�X,���5T��d��{t����.1�H�c���*���>�-�V-̳^+40+2�����l6cM�f���r�\���]Nt_�:-�k�J��x���P�a����W3��_�шB�q���|��w{��t#c�����?c��|�J(��a��n��҃MÃ��,�k�3��!b�������(�F��
I��m����q��(�h�2�鍱�4O%Ǡ:�0���G~ː���k�Q/���&簛x^�I��GE�<��FM�3�M�� �|�bCv����oCI�(�s�C�����nd%=A�ųpIy�b�+�ʙ�|�2M�̯�X�؅H�p��#�"�g���T�D�o5�g7~E��	EX���^I�M�;���	=��LxBw����,
Z,����<��3�d�)�6�e��،L��X��C�zU���6��	��ĉZ3,��¹qn�]4�v���\���zJƘ����s͠��&��\[�Oq̊~CS9h�Qa��c@���gt
Ų��Az #�dɈe���s�t(꧈�F�ɐ>����x!.#`�MK��x*Et�ڄ�F%	[P\d4I9Hr�^�58\�N�E)��x�F8x�,�S��6�}q'۵/�ܬ��>*��`'稃��.�h��t�Q���c�G2�!�˗v�`}+;J1�P����$&k�$��b����9�{%Mt�5AR0O����)���&��$������4h�(���Z
+��Tl��ea�
�H�f���E��W��$
�c���nc��i@a������s�I��+#��j��T ��$j}aWpBk���;�b�j���~���}�cI`���~�k��Y�(܃)P��AL���VF�X���Úp���ȫ�c�u��O(K@X1�U��;(^�x��:���Ux�ΉN{u]<�
Y�>�S�3��1F5���ԃA>*�`{��[��e�l�B�)�)�{H��|��m�y��&ƽ+�d=�z�~��������Y<�?�U�$��q�n�7����[_/��?�.&���}��Γ��I{m����w��]�(�q$*�M�J��3^�Gt��,��x�.��I�ՠN�Z�J#�G:p�x��az6J�g���$�6�2uk�k�|��gn��7����E��B�	�\�ql�y�K2л�c��Ϲo���Y�O�Q<䓚c�����bk�L���o�3Z{�y��Xʋ���\Q��Bs�3�fU�(����B�*~�k��s�L�*������@O
��ʠ)���U+3l��,�����A�x�����}�c��N/�B���s��r�i��@?���O�謵�����+��S�_�/�@-st��ا�<��K�1���ѐ3�
Eȱ�x("Of��M^$9�,���!K<�A������ꑲh�^]��8;�G�'!
w���X�qԪr��G�Ȭ�$�m4�����g�h>�����m<����㆝��(�ƀ��L�Gr_t	+��s���D�pj(5�Q01k��a��Q"N�K]'!�%;z�nZ��b��T8����Ȟ��̅�1�є�fEإ�5^V��(Վ#�ԁ�I�̂*/�z=FG�8a@�(`�O�b1�	�"�б
d(abV !�~Lre���I%��>E��h��d��7��0��o�I�g��M������h��*�}Z�րp.!+�j�aإt�b��c�=}8|�Se�
/n<g����[��9�w�G�̓�@`I#�2�UZԱV��
8�Iꚝ��6Y�� 8�����:�;k�����zhB[v
�s�j��:E�\��P�~�_�K�&�o:��]ܖ�h�@//���Ξ[�T�v	��8I�>	�`���j��y����{���(���N�z���М�|��Av�(0cf��/�.,EPU+Г+W�
B�B�c@g��׆�u����ڭ���[�rDQ�	l�a�ԉ��_E�?�/�6K"T��ʤ1�&���K�*x��]�w"G�B�y�@�p�Z��0�� ����1o
b�J'�,�7	�7� ���(N��~~��a:������ؐz�q7��qwi��!�@{��VZ���Oa�.�4���$�IZ�I��@z:�Ke:�o��oH�
��(��o�67��V�,k]=��Y��C<�T�[ӂr�����$�Yg����`��
��J��9f���E9Xs�`o*�Y�.���:��􅤷3t5k���0*+L�-�j��{��ەF�ǎ���<�Xw6��0��5��)�������ļMŅd��٫�gW�x����g��	��XHD
�x
�(Hc՛֫x�t�ţ��۝x�"�-p�+gl\�t��X��e�(�}��9
���9�ԶJ��*;;A���1-]� ����쑡5	����k�`s�:�Ô�A`���k�/V[���*��o��}��h�����=��C�Zj�&�q���dy���0S�NY����d�{�Y��TLA�0�M�с�@b(�\�"B�6�d,:�6&��� Ē)vB���V�I��*�[L|�[SDϑ���3ND�A�R��xy&4*4���T����P��F)��YW�b񕡛2H�D�����z���h�P?u�5
=5Ƣ�����Ϫ�]+4e��,;�¯A&
�Cd[e1��32*d��k�BI�,��
-�e6�	�1y����PGn��;��F�Iv�c.-7D����F�(L������VU�:S��G�=Y��5A}��t)�l�t/vR�ٽ�,�J�٧��������{�Ԡ[
Q�v�u&�k\������
5�="�C�b@g����x욂�c����g�쥱%O=�{�9��*%L�$$�x�D{��IQ���:��]�N�߆^ŗ�ͬ}�"��%����j��,d-���C�)B^�:�����g�����1�,��DҎщIpV@N,2{{��U����s�eڂ��W�����i��'��Q��L�p�������C�49ܚ��H�-�H�٩k�%��?�4aw$���~�~o���	�$K��A�F��i�LXu�02��E�'T�W��Z6�. �@�+=��ê�����>�a��B�L�ͯ���y�?
��E���h��gmmm#���x�t����=�(�U�&�����孻4����N������ -۲Y
�����]O�u)˗}��D��4��L��H)�X�2����Jʜ�W��,�,�HאQi�rE&���h�8�(G
�Mڔ���y��pJ`Y�����R2v�QbE�>i<E�(�OS����R�L#�1G���p�<-35(��-�	X�72���c��Fפ!�ƾ�yD�N�w�{!��]uX")ta4�L
����B����P/+}6�'�Ō��$��޶�x([B�ha9ÒI^.�iz�MP/�LY��e���C8�U���&*�g�5�c��L��7
�1W�%�V��d$b�ߙ�jW=�~0'g��$י�G%��(]��w���8�.�����o�o�N��ݨ�J��uZ2�"��e�{o)��&6�ܺB��B{�ҵ���M��Ʈ�8UI����,6��d�u��gY��������i����J�<�������]E�y?�aT����?̞�N,PU}�S	���N��S��tϑf�@�s&�!��H;�P��<��AS,q+Q�����X�~� ��z}US�M��`<&�j
��j[�;ʔ����u/��@w+�ʟo0g(�D��h���J:F5��4�����"��f��U��=ުwk�߰�
#�*N��-;����m�tr_`���߬�����h(%�߬�>���y9�
��t�=s��H@Њ�^���2��8���@7v�ۑ�tC��0�׋��������E5$Y�^ēiQ�!����c$3�yP��P��J[�"��<� �erGd��䝎�!_�Up��Ш����,\�=S%e���wh5�[ӷ��\�G
t�F�<�.Y¦#�#PQ����.]tV������P��$���HuY�#�S$��ُ�c��j����br4�i|�����
��ֆuU�(>KIK�Ջ�ٲ"i^����`B��c�3~Y|H��Kj�8W�G�:ND�G��F��g��Z�ּ�����~xs���,�k(�{�=8�����wo�,9n�K&`m�jU'��|��`�8-,*����ގ�4[���Z��_�u���3?JB��j��WX��<>$ve�5��$�F騢2�n�1�Y�U��z
��d�ݜKAs�ě�e��Bo�jS>�S�\/0�vڛ�g�g��BC�֫���8M,�������Ý7{�u�a:^l~ۻ�C|��D'�/6[\�TOқ1�DdG�IR�S�\<��h�ȥ��\L��v�u��	c�촧�b�*,���+�Y������	�h3	f�Y���g(}J�uM��4�t;�tcF���h�V��H�ͫ�8@κ�)�
�x�
��,��
%S�$8$��g�o�S��Ywycc�-�閺�`"��{��dJ��Rm��
]��|�3��-{����s5��1\���P�����L�Wp�δBk����tӵ��^n��Q��s����Z5R�bT7�]�RPk���V�����s�x,�gd����a���!����a�5N�A"��˾7�S׭`�<`6��O��9Z���<�7=";��"���p|ӝ�Q�9�0"y�&�*W�(���
�[^�7*����U��"-u��><1�4��喻d�wMz�?��|�Af��G|5�tl&��H��ZD�*�C�r$��]L�&���D	��%�q�7��k�z�w��z�^��	.li���s8�%�0�I���E��I�06/��ar�=ܔ
-����c��܃�����VTzinv�S��v�ZØ
�
pg9�C��a}�ggÒ�t�ث �e($��%�ka/�d�(�-ij>^ve�	����� x<.���,����Օ�@�W�n�g��y1W��޼L��q���3p�k�D��:������0?�Q�6�k��L�
�_	��|l�6�/�,�hq���%=r�C��15��WG��1Eny
�(]Љ��F�r-��(%�sgk5�L�+�ŴfI<Jq�^��>w��5ʉao��x� �f�p�f�I�d���{�o-ָ��|�lڗa%9�]��H���M�pv������͎�s|A���z�&�Z��;��F�.3�P��(�?5�W�o���9���l�FM��`�����es@��C���e���A!՘PgFAf��+��C�U��h}�yݬ�L��L��g��?/��!)��5�#P�rU�)�P��ѓ>L���f�!*?6+�mƇ���T���J�_�?&��Xq[Y�|���z	8�<c:��8nZS�q�Fx���C9��ӳW�$�?/(��䈼vbMU�k#�|a#�]��~o:O.4�zQ{wK����E-����4�B�mT�A���ak�f��f4��
��`6s�9	��o&�%�5�"鬺�+�!ƃ���8���BN�ײ������Jt����33�p8�� � ���+�X᪥�8���W���z�2��rk�VY���o�F5
vDE�3Q�0r(�{��Bl�*Eɪ�n!�d��n�`�"����"���(�y9���*#��v'+a��b\E~�Z?i��5�K�ٔĤ�(w.��\k���'����3��I�0��I�z�S�;��0�����j6_�,�Z�ײ%}�$cR��M���^E�WC�y�y��*��~��*[
�f�_�ɭ�Z�SL��`�4_79U�H��Lg�q3�x����pޏ�I8g�4Š1��}�,�&J#��ݨ��s�o�����X��c7�S�.�$������iA�Jm�q&�`���͑5�s�
2`~"�(za��'P=̢�[�PK֢����|2�х5^�*��������8|�鋋Yp֫,9i"g_y����fˇ��{iq:9�����T���=$��
�KYew��⛭���}��ݮonw���&��5"U\B�:�|oo�R"
E�}$2��gqK����Wd	�
T^d{�����jtu����(7l^��|Y�E�UY�B�:���y����۴�ߖ��ѤW����qW:ؤ��q'�ŗu�,�ݘ^M����5��R�C��}P�W��z�WV�Mv�dz}W:��x\�(��-=t	4y�d���ye����K!�^�<O�^$'4�#��x�3��i!l�jl�Xk���z>Z���G�|���`w,ۑ��+sdHc+��O�,&���9�	��ȇO��G�.�,sg8�J���l�L]��z;+�0`Q�.m����]b</�LHf��L��.X.5�$���S���=��Vp�iq�q[�O(���I�Q*��|TR̐��-\{�
*�@
����dv>4gcr�Oݜ�؏�	Oo��n��Vȗc���W#��:�/$
֕�r-�D|(�nOT�8Რ��򜂰������+�>m�S���[Q\68UJ:���݁����Z:x�Zq����J��#�/F�?�f�|�4WM�g����b�[$
F������~�RP����#�AI��߅�`էr�W�M|c/r�u�bU�%�j��&(�
Z-�T��H�ٯ~���lc�w�{�??�tr񟟮=��g��=� R��z�	�?P�u���N�O��,��p�O� �F*T',㡹=ICl��	Ӊ�J0�49�L��߈\Jy�pY ���Y�n��92�[Bt
�Q�D2ǀ>�4LgĔ����Y�_�7�ޡ�;�R�,���=s�O���Td�>�L&�{x�e0dY�+C����A�G�/i-{e�A8��fO����SŐ�2:k�N�1�5�CF��5P.�{���6Z�P�u�ٵ��ћ�o8��=��{k|M~G��꟥|��!g�Z.��.yHʱ���=:�f	�}�,�9��w��Տ+�CR���8��(��!�=��
�M���/�<î�n���-�m�n�=闸(������t�_��e�K����=���[��T��d����R�H{�^>G�א��k+�{�k]G�/�\Z�t�w����-v.*1�B?�R��CѺ�u�*9W����[��{�X>
��|������B��z�,/�t�KĎ�5�@�g�H�RszY�~����]L���@�+k�Mu�.1!��Cֆ�F(���o_XvҐ�+�4�x��q�
�Y�t]ِ��ښ�[nR�Ƈ÷Nx��XӒ�iŝ�:K�Ƃb���Uii�F	`~��o���m_�Y���t�X��b�?"�׽�_�>}����o<���0��/�0	'AQ��L,	�_i�"�K�1��O���q�po��)���
�c	,]
A
����,���4#��By�A��y�X��_FZ��`,���$g`ђ�m�#!h*�.]�e@h.�〿)E��896�>��~K~�ȥve�S ;�'���d�^�I0
}�B��w��)e�H���U��10����׻N�u<\�Ul�.�l��N*�t�oz�l���@ �Q:tJ�$���g�
���^�%��jyu��D�v�Ӳc�#�\28�+�	/�r:�[1���L<�p@�S���̷��
Gu��?�\�s�~���p��Y��8���[=*$�h����(��kf�tpr`5o������s�E���r��O�aW��o�F�z���[�(`6]@tg�|�J��X]}�"9��F��x���#�F�Bo��J������)�l�P��.�`gA]�"�`Qϝ�B���,˝��xd��S��܇�~�� ��򆾈C��(�a��Sۀ��'����w�v}39��;����Z��re9�C�j]�&l*+1�|)|J~��^ru[\��dD=����zm5�Ԑ��ދ��������X%��ۺ�,B9�F�?�Aɟ�j{��U
���I=ߩ�d��7O�D�g��S����r��	Px�\���з����V���|����]j�~��izv�W���*�}�\�����/� ���S�/����LD̓fƒ�������6h�ČA]�xvHt	�E���D�,�0�!���nB��L��N�Α�P��\3�����C�\��6A���R�"<7(�"Q����%�(�@a�j��2���~���8!�̤tCET^��-���|�	wD��2�=�I��8��<g'F����ɤ�u�Y�p����8��º,v(u�%��	a��EB�Z��xT���hs���z:�T�UF�D�J�ɜ{���80o�u��Z����}����ZUH�� �YDfq�4c@�eCLӫjJ�D~��<>��Mj:|�"�i�Ɓs�6k���x���)fT̍���c��3
q?yWKN!�v�e*M�"/�'>ߕ+`�EP�O�e �0vg�e��ொ�G����A/����S�+>돚�5��+U���|�g�Ϋp�M�FF!k3"�l��
�=���l��q>��
2耋�,�S:��o��|���v�H����7����,�)�;�;ov�;<x�+n͊Յ����)ED�g5'/q��z�g�I�SY�v4���V�N� ����`\�Q��5�m�U����1,e��ʜ��i�

Ⳮ�?a��=fU�a�ʻ�4��kqK�jʏn��$nyh�enA�ڶ}g"�p���dA���B+�5�﷏���_�(�ŝ�O�;�Rm�b��y[ܑ�]��|ۯۡ.�a�h렳^pP���+�z��[O���ӖG�9EZ.�P���LJ�Vz���Z���������e�p�iU|�⭷��p:*7�N��Z���x��
f�m��/�#�dQ�
���i�߅��C�E���:)�-y�1‚���Zd��*�+eY��V)��o�$��cX�xI���ޖ.�����A�hi�W|��P��ea��_e_`����왜-|���(�m&��%��[�N�P7�[mMA�qn�ˁ��cH���b����5���3��[/��W�4���kg��=�C̱�jX&x�ڡ�f�l���tS�0���b��t�Ȇ��He��Gl,����`[���!���)��w����l�h�3�����j��a�k�F�^X>CK(P‚�Pq��N��̉��,������;��\����W������x�.I�nC|b�!��p	:���Ȥ�Ju�	rcJ�����B/Pw�w�s�vo�I���o��}�(�������2�bl�n�b��|�:�)LL�<��9mn.!�Ik�Q`"�0������6��|:�۳���Vr�щ��ם�U�Ոi���W��#ځa��>��'�'u����Z�J�H��KegZ����wl���-��SnWȶ���$vϱ�|x{�,��n���?�&����dh~V���J��L�I���Q�����;*R��]1���ιH����!į�{V�K�[2U�a<�+���H�GG������@(��$�G��3�����'��e��!MZ�U{��%�	�AH�\�~���w��.(�J�>J4MYje��qp�2@�
��RklX�(ނ֨�V`H)`�B�G�U��:�X�a�.Ђa�5-\
�cy�Rx�$7zk9ˆ�+��u�+��ד�P�PL��HB�,�E��,Q�O-�n��P��2��t`�L��H��~�c��^
.�%��T_�D�HU���y�d��_0c
���	u�w(}M��=�;A�c��%��4�7�V	�s��T���'d���,��^�����j'��p]��2[��N⌽cZ�▬���$��9q*"{O^m�H��k��|�e�AM�W��[�nl��}	U�r���dN�H�ĝ�7I��	\��/�gk�
��o]�bK4�_�X#��5Ň�����;��!�zԔ��K����T�)�ئ�\Ģ�b���C�7G�Ib8���=t��BDZ�B���@3$�ȱ��?�L�j�
���� 8�je��U����_w&)�+8�]��>+�-37K�}n�>�xs��OE�ſ��3��[S�Li��#Z�����¢�����~ ]�.P��`(�7uVY���f�?�)���,I�a�;�G�aU�'�+9="�� �*HTA>DuG��5�s6�GT����ѐ1�`o	���h��T*,F�vI�X&Si���#��R��760��sV��
���k���~���f�����&�d>�
{+ܤ�㷆�8�F�K8�.W�Z�F.g@��x!J<��Ɯr��:�'�|!Lj5/;�F��K6� $%<���<QC;*�V�R>*���V��U�����+<�cACK�)x3�{ y9]����Д��L���`o�o^��$���ߓ��Z������������57��u�i�c�\z��p>���(�r����Q?)I��������_��f0E/�Y�]y��TPTݍ5%_�8B�:��������*�4�������d���?�Wظ��Ư5)��N�/���3`��K��:@�潏Qaޏo��L�,����4'�n�U�1���º��L��q�
�iy�N	��j�����ǃ����'�x�ݻ������[ps��o;tu�5	��Iq���k$ܢ�`|&ɺ���������H�$f��2�8�S\���#����S`ya)I�1Us���%�r'�^���y�B��,<?'�7�<��$<e�:8�T�*	�n��],�m���̝,`�>Y���*4F�����t����8�w~�c�
A^�8
+u�TH՚N�u=�/����j���L�G0vU��g�E�~� iӑS�;跫m�Q`�#��0� ���pRݾ�L�
��t�M.toQ^�gp���!\��o�H�}� �,z�a=~,��>̀GA ���HB$8�
GA+g-.ra8uvbF�@=h,�����<ϴ+ꨀ�7�u��R���� �'�1Y��7bB��d$�p���,7�z�(h=����.<��
�[�`�������R7
�8���9'��:�V ŪStY���� �V�1��$�ĩ+E�B�#���#�C�U	�������� @�����=��V��Z/�eHR'�u8�OD4��e����{k�}nGÞئ$�Lvc	k�G7��SF��J��l��9x�U�\΍M��w*���N�(�y��iѸ𞹻���*��ۃ
F��x�v���q��ʠ��.�Y}V��sD�f�ԯ�${z07�/���5A�4V&#y� ;V8�,�M�����T����a�w75@d�iz��Z�1VRؑ���LX��d�7�Y���|ӟ����h0�M��}d
�D�n`����4��(���(_�!��������`A/�H�|׼N�!��1�����&`�ɓ����ޚ��G��
���^ם�?�9���Y��l���ƒ�������" �����ZKyd5�?��Y�$����q<ŶƗ���㦊�+�gKY���(�}���_��ܿ!�SG�L��^������C)h��`���6�S���<�2��#-�'���x��>�Rf��r&X6�K�V��뾸+���$���RL��|Z?���e��R�3���*�UJ����Jv�����R��}VC���M��	۹���~��C�ײ-4�.n�]���䨶�f�?��W`^?�͏t��g��2�4����t�рI�>�\*�X���u2���e�8�
�C�Ŏ�Z~َ���A���Jj�4�T�uߒ��K�c8nZ��
��U�IG��ķ�4�KC����s���f��GG��:^��O���	����_z���#��Roi!�*X�m)
���ӷɞkb|"�-+,Ԡ���pJN�y�N���)�B������N�W����|$��s����L6���考�>��i���0��,#�ί�VWM�pv�7����%P-
�uk�7��KRs�Ngq��m��l�N�U���l����Z`���o:�(�����D�L�5Y�K���ڴ@��f��:*Ɨs(�.���/+�`[�Km����9:�\Ldmd^�Ս�p��Tg��l�6 `�bg���h��j�ݐ����H̬sdN������4Lg���\̱��/�'��n�J1�1�hXJ(�,�:��r�*�̀@�-u���g�&;o$��VW��[���P@�-���âfOKj~O�%��wK���X��{��V�]mk��պx,��v]���V3���D}��\��{���~w ��T�p�;2}^i�����8�^��/��U�r�z��y]�T�5�;X�[����|x��ש����}cC1�0+�c���J׺,vY�cڌ��a����"������k�&��0
�$'+��,�1^)1�!�]����c9�����]@�F�ijU�+�#�0p�9�v�
S�)�0'���I����C�8&��`Vab�*e��x6��f�%��E�HZ;�MBz�M�q��GN��Wl邊���"ZA}��n�I2Yu
3J�t�d�
�kX�ꗹ�<�b��0��D�亃!�G~J䯬�%�^��p���7�߾E�p��yRmJ�Vд62�U�홛�md��@�������ˊZa�1��r�Ԭ��T�h6�+BE̦������~��B^eByZI�X4_�~�������*�X9ʋ_93��c���Ս'XII���(��I�'�_(o0��&l3���#;F�'����d�">��d� �+d)��'�3��qW'7WtrC��k/����,�҆�Vz/*�4�<�mW�&ͽ�p�]��B`�8�L��1��ǭh���4�Jݺ�?���i������ᨈ<�{U�"�@
���"�<��@>)S,���<���{:�r��Tr�#f:�
��*��.²���%D�d�Z͚!%A�z!�]��߷5�������Ƀ <�!B������G%Bb4�<�ʃip�����<NŲ��"<�_��Rd������ps�s�4!���<��-������9�p�N�.KjdUX�ZD\\{����)��!�B|��`}��63S���qI�#;Ŭ�7z�x^q��S$���U�;c�6�}jr�VN�8�Ŀ!�Q�/�hZ2$���x[aL^A^A�RfQ�j�Yw�NF8�K�т%��MF��W�$$�Eb���[�+�x�@X��e'�v����MKJ�T��������
�3�G�x��۫�i�̴'^c�x�@�$�i̖�hi��"N��$�W�!�e���j��[�ה�f�"�B$AzF��(R�Zd���r�U�P���v��f~~�V��PIeQF[��	�W7�F�"f�
ɳA!�����S �š�2j\iX�t����A���R턚���=�t�]AK�A��DŌ "����D�� ?S������p>��7dX�N��!Y9$���H緧���S8��I�`�!��ּ��<��\>�?˚�ܿ�He���
� $|0(�Uzo�wh6��.
C~E0�z�d]�(����|�p������D2��ؽ�W}+�F:%n�*�'j��Af���=��ԫ��گ�JY�I4��%�A�I��/��+�ލLt�y�L��}��8�N��s��z��P�ؿo�k���V�"�ڸ�����I!$�U
L\����SIQ$!��F3�9�-+AP�Y��)d3s�5�U�X��W��J��=�^$y���g�v�����d[�Ri�Pu���72l��������?���C�D|���ߩ��Lԣ�β�a�l�=�SL�=�hy��4Y���N9\���%�ŒX�������3��������hH�1r�-�G[�H�к� ���Qe+3�Kg�W~pϢ�夵D*�����:�0�*����P���+�oQ��n|���_�!�|�L�vd�_p�D�����}[�uF_����0�]�77�E�^�;5�.�pTrW(`�9}"����yP
!\3&�'[�ޢ��4�>�^A?0���vO���u�]OuE
�>j�p�D����7��Kӈ���ٺ����b�~6�1P0��q[����Y�C��,a%-1��m�/�
��;y��v��/~xw��4���Ԭ��7	f���,Y�jNh٫.�i�]o�ôZ�X�HSn���}�Қ_&�j�a��<R&��Ұ�j��w_�B�J1���+Ny�_9��b$O�CD�Nw�<���z}�q�tR�4h͋��v���16���=�Y��i�M�ą�2�p�a(���C�ݣ	E������~#��0k�lp�iR�K���aDbL����dЅ�-��N~���n���=4ݷ�5#���K#ǚk�d3�8�����jX������l��lu�����6���Y�AbxtV�NɊa)�@/����WŬ'�:,,ӯhS%~G[�0��*��
@U�2�N
�j��8"�&]9�@9�̰}����i��Q�S�4�����A�6Ռ��������?�V�\<?�����~�
,�;�毳�X�kO^�ۙv�x�zB�4J�ګ���9Z*<Ҟ���MG)(�pTv�T�v��
Δ2��j�jG!���~�)�n�YG;i���sߛ��V#���P�{X��ڔ�d~v^7qr��@{��W���R�[.�Z�f�2s�hb#�k��ږ���m똚��{'��e���d�D��7�]gָ�4�f��\fܿ����C
⋞�K��o|!'�́7��Tb�s6�\>�Yv���4����z��j4�yz1`1y�%1�wG:1�T�^.&q�\��u����ݮ1_Lda�2�Q�Nи��2�S"�'�����H��i�.��;�7�7�w<'B�RW$�qz�+�J-[9ch�fuCR}!�q�R�1��w�8#�]g���z�ɬ�
qZ���'!)���9���� ���i�x;�fC�A��L־7��0'�����NO�
�4���A��|��mO\���I�Ѻ;��Ԍ��)�%��(�U|�Ĕܝ��o>&�:#��TL�P�	^�7J�N�|Dq�=�]�ԛ��$�����Eh.�c��m��o���,e�9b-�6���JGa��m9���]7S��dB��j
������H�]`�l�^�3fs��!�F�B87���b
f�x����)�̍� �m-S��GMkU#'B����%���E�^���y��(��$T�^Z�S3�)���H�@�?
N�}*���=�s�yH$�mq5C!5���@N�eũ�'�{���C'�cC@#���O6�v�;�+)���Ge�����Z�P�]�"���\�Α2�%���Ҕ��J
��'�H.b��`�&�gE�D?�~j��*�|Ba��]�bd�	F������3м=e���H�
/
9�K�?�#��pIow�R�F@9�=ʿ)�h�=��a��@�2?��Q!���Ȥ�hS�Lt$h� �~��	�UxN4=iQ:{No�Ħ�4;�0��R5�,��Ԍ0�
�U���q�y�ިm=�q��c�C����znK
���A����i���ñUY��1�(���է��������F�ռt�<:�>�p4�9x�{d9Bt�m2�%��A��?t��!
��h�Y�2ҧ�M�Ok�iן��Ow�mU�y�7���á������;�~5����	q����S���j�^��U�(���t�qN���П�Z�)}�H�Mηm}|Ɲ�<�a��� V��;L�fޯ�	z��v.�f�*����Ƌ�/�7V	�8�?g��YC��2Y_����Yy����v[_x����������3lZExzt��E��D|��n}�9����o���
3��	C�(Qv�59?�S`"��bf�u9
���q�*솮�8�7��S�a�o�-:
H6����$j2[���xn�_��=���ux�~ �����-_��u�f&6�>��ñSfMM�8�59�c��X%x�0�}�-��ޑxI[}@�w���
�O"K�p*����*�s��~awW�6	F���VWe��햮���a�q�����<XnV�
� �y�8D
�/<�����ɯ��z���n��U��X_�8X�'�xM&�E+�D�+��u�o�s ����đ��D��=��Ā6G���}�TGo�=L������]q����c}S4kv	DPX����BȺ���D�\� ���%!��C�(���Qj�Ob���)����ʁ��nH��hݹݯgo�)�GJ(h}��u4�
G�)�R�L���r?c�)ѫ�Q�-';,�*��!ʸ9O�T���0SCV—RK��Ҡ�]o(���|�?�������{�?�?x�#���ߝ�j�dx^�/��0>���@��ԩ{��F�aZ;A��~]���������sQ �Xe���o(.P	�OW���ɑ��1�m�V[
QT���A�g��w6��u�-F����oK��/��ҫ�{@ሼ��=		F��
k���gզ2��BG
+KY��M!h�v��PO8'Y�_���B��������VLlL�B��(ʫ�_��A�Ș���?ڭ!9��T�v���%(�%��`��#
��^�2�UJ�↼)�ٮlpUF��܁������`n��
��t`�*�J]u4��4a�fW�``�+������?�>�|lW�"���j�饨�Q9n�\�_�Z
�^�c������|������t#�����_Pr?��޵�:�͟6�6��`|���%�J���"үI`�D{��+*�_,-/q�]�m����	�t$v.U_B_&+h컽�&G��L����Zl��vogw�hu�Jf�L�lP'd���=���JV�h�s2
q�.g1��p�˲�Jb�ɦ��>�q��/����,3G���	�<��oM�y�,�fA����.�0+��iLUue��U�g��B6��G:֣�J���@E
�Ҳ���`�NC��=\9Қj��@EV]Yz�T��po�<y:�Z�A�e��_�a-}�Ŗ\Y�z�e�GyA��>�w��n��浽gl��a`2 t:!D�i������bԔ���h���럯~�?����Ke�Bchecksums.yaml.gz0000444000000000000000000000045014442217575014616 0ustar00wheelwheel00000000000000�}�de�;r@D�=�^`���Μ�s}�H(G���CH�@�O�z�?������^���~�y{���-�y��x�r�L��N5"1���vNy��}�>��O|����2�Q�SL
cqD\vY �9�-3����ٟ>i�>tM�o8�[x͉]'?Ղ)�<I�u���%K�d�FGn6UQ�an�h��2u;�ZA��4h�Ap(݃ �͉s�i��̫m�R��b;��M�|oK���Vv�J4h��]��Xs3�魄#ԫ�n�is�'�ޅ����1e��PK)J[�U.share/gems/specifications/rackup-2.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rackup 2.1.0 ruby lib

Gem::Specification.new do |s|
  s.name = "rackup".freeze
  s.version = "2.1.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Samuel Williams".freeze, "Jeremy Evans".freeze]
  s.date = "2023-01-27"
  s.executables = ["rackup".freeze]
  s.files = ["bin/rackup".freeze]
  s.homepage = "https://github.com/rack/rackup".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.4.1".freeze
  s.summary = "A general server command for Rack applications.".freeze

  s.installed_by_version = "3.6.2".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<rack>.freeze, [">= 3".freeze])
  s.add_runtime_dependency(%q<webrick>.freeze, ["~> 1.8".freeze])
  s.add_development_dependency(%q<bundler>.freeze, [">= 0".freeze])
  s.add_development_dependency(%q<minitest>.freeze, ["~> 5.0".freeze])
  s.add_development_dependency(%q<minitest-global_expectations>.freeze, [">= 0".freeze])
  s.add_development_dependency(%q<minitest-sprint>.freeze, [">= 0".freeze])
  s.add_development_dependency(%q<rake>.freeze, [">= 0".freeze])
end
PK)J[�x-share/gems/specifications/rdoc-6.10.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rdoc 6.10.0 ruby lib

Gem::Specification.new do |s|
  s.name = "rdoc".freeze
  s.version = "6.10.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 2.2".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/rdoc/releases", "homepage_uri" => "https://ruby.github.io/rdoc", "source_code_uri" => "https://github.com/ruby/rdoc" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Eric Hodel".freeze, "Dave Thomas".freeze, "Phil Hagelberg".freeze, "Tony Strauss".freeze, "Zachary Scott".freeze, "Hiroshi SHIBATA".freeze, "ITOYANAGI Sakura".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "RDoc produces HTML and command-line documentation for Ruby projects.\nRDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentation from the command-line.\n".freeze
  s.email = ["drbrain@segment7.net".freeze, "".freeze, "".freeze, "".freeze, "mail@zzak.io".freeze, "hsbt@ruby-lang.org".freeze, "aycabta@gmail.com".freeze]
  s.executables = ["rdoc".freeze, "ri".freeze]
  s.extra_rdoc_files = ["CONTRIBUTING.rdoc".freeze, "CVE-2013-0256.rdoc".freeze, "ExampleMarkdown.md".freeze, "ExampleRDoc.rdoc".freeze, "History.rdoc".freeze, "LEGAL.rdoc".freeze, "LICENSE.rdoc".freeze, "README.rdoc".freeze, "RI.md".freeze, "TODO.rdoc".freeze]
  s.files = ["CONTRIBUTING.rdoc".freeze, "CVE-2013-0256.rdoc".freeze, "ExampleMarkdown.md".freeze, "ExampleRDoc.rdoc".freeze, "History.rdoc".freeze, "LEGAL.rdoc".freeze, "LICENSE.rdoc".freeze, "README.rdoc".freeze, "RI.md".freeze, "TODO.rdoc".freeze, "exe/rdoc".freeze, "exe/ri".freeze, "rdoc.rb".freeze, "rdoc/code_object.rb".freeze, "rdoc/code_object/alias.rb".freeze, "rdoc/code_object/anon_class.rb".freeze, "rdoc/code_object/any_method.rb".freeze, "rdoc/code_object/attr.rb".freeze, "rdoc/code_object/class_module.rb".freeze, "rdoc/code_object/constant.rb".freeze, "rdoc/code_object/context.rb".freeze, "rdoc/code_object/context/section.rb".freeze, "rdoc/code_object/extend.rb".freeze, "rdoc/code_object/ghost_method.rb".freeze, "rdoc/code_object/include.rb".freeze, "rdoc/code_object/meta_method.rb".freeze, "rdoc/code_object/method_attr.rb".freeze, "rdoc/code_object/mixin.rb".freeze, "rdoc/code_object/normal_class.rb".freeze, "rdoc/code_object/normal_module.rb".freeze, "rdoc/code_object/require.rb".freeze, "rdoc/code_object/single_class.rb".freeze, "rdoc/code_object/top_level.rb".freeze, "rdoc/code_objects.rb".freeze, "rdoc/comment.rb".freeze, "rdoc/cross_reference.rb".freeze, "rdoc/encoding.rb".freeze, "rdoc/erb_partial.rb".freeze, "rdoc/erbio.rb".freeze, "rdoc/generator.rb".freeze, "rdoc/generator/darkfish.rb".freeze, "rdoc/generator/json_index.rb".freeze, "rdoc/generator/markup.rb".freeze, "rdoc/generator/pot.rb".freeze, "rdoc/generator/pot/message_extractor.rb".freeze, "rdoc/generator/pot/po.rb".freeze, "rdoc/generator/pot/po_entry.rb".freeze, "rdoc/generator/ri.rb".freeze, "rdoc/i18n.rb".freeze, "rdoc/i18n/locale.rb".freeze, "rdoc/i18n/text.rb".freeze, "rdoc/known_classes.rb".freeze, "rdoc/markdown.rb".freeze, "rdoc/markdown/entities.rb".freeze, "rdoc/markdown/literals.rb".freeze, "rdoc/markup.rb".freeze, "rdoc/markup/attr_changer.rb".freeze, "rdoc/markup/attr_span.rb".freeze, "rdoc/markup/attribute_manager.rb".freeze, "rdoc/markup/attributes.rb".freeze, "rdoc/markup/blank_line.rb".freeze, "rdoc/markup/block_quote.rb".freeze, "rdoc/markup/document.rb".freeze, "rdoc/markup/formatter.rb".freeze, "rdoc/markup/hard_break.rb".freeze, "rdoc/markup/heading.rb".freeze, "rdoc/markup/include.rb".freeze, "rdoc/markup/indented_paragraph.rb".freeze, "rdoc/markup/list.rb".freeze, "rdoc/markup/list_item.rb".freeze, "rdoc/markup/paragraph.rb".freeze, "rdoc/markup/parser.rb".freeze, "rdoc/markup/pre_process.rb".freeze, "rdoc/markup/raw.rb".freeze, "rdoc/markup/regexp_handling.rb".freeze, "rdoc/markup/rule.rb".freeze, "rdoc/markup/table.rb".freeze, "rdoc/markup/to_ansi.rb".freeze, "rdoc/markup/to_bs.rb".freeze, "rdoc/markup/to_html.rb".freeze, "rdoc/markup/to_html_crossref.rb".freeze, "rdoc/markup/to_html_snippet.rb".freeze, "rdoc/markup/to_joined_paragraph.rb".freeze, "rdoc/markup/to_label.rb".freeze, "rdoc/markup/to_markdown.rb".freeze, "rdoc/markup/to_rdoc.rb".freeze, "rdoc/markup/to_table_of_contents.rb".freeze, "rdoc/markup/to_test.rb".freeze, "rdoc/markup/to_tt_only.rb".freeze, "rdoc/markup/verbatim.rb".freeze, "rdoc/options.rb".freeze, "rdoc/parser.rb".freeze, "rdoc/parser/c.rb".freeze, "rdoc/parser/changelog.rb".freeze, "rdoc/parser/markdown.rb".freeze, "rdoc/parser/prism_ruby.rb".freeze, "rdoc/parser/rd.rb".freeze, "rdoc/parser/ripper_state_lex.rb".freeze, "rdoc/parser/ruby.rb".freeze, "rdoc/parser/ruby_tools.rb".freeze, "rdoc/parser/simple.rb".freeze, "rdoc/parser/text.rb".freeze, "rdoc/rd.rb".freeze, "rdoc/rd/block_parser.rb".freeze, "rdoc/rd/inline.rb".freeze, "rdoc/rd/inline_parser.rb".freeze, "rdoc/rdoc.rb".freeze, "rdoc/ri.rb".freeze, "rdoc/ri/driver.rb".freeze, "rdoc/ri/formatter.rb".freeze, "rdoc/ri/paths.rb".freeze, "rdoc/ri/store.rb".freeze, "rdoc/ri/task.rb".freeze, "rdoc/rubygems_hook.rb".freeze, "rdoc/servlet.rb".freeze, "rdoc/stats.rb".freeze, "rdoc/stats/normal.rb".freeze, "rdoc/stats/quiet.rb".freeze, "rdoc/stats/verbose.rb".freeze, "rdoc/store.rb".freeze, "rdoc/task.rb".freeze, "rdoc/text.rb".freeze, "rdoc/token_stream.rb".freeze, "rdoc/tom_doc.rb".freeze, "rdoc/version.rb".freeze]
  s.homepage = "https://ruby.github.io/rdoc".freeze
  s.licenses = ["Ruby".freeze]
  s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "RDoc produces HTML and command-line documentation for Ruby projects".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<psych>.freeze, [">= 4.0.0".freeze])
end
PK)J[�kɟMM6share/gems/specifications/default/tmpdir-0.3.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: tmpdir 0.3.1 ruby lib

Gem::Specification.new do |s|
  s.name = "tmpdir".freeze
  s.version = "0.3.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/tmpdir", "source_code_uri" => "https://github.com/ruby/tmpdir" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Extends the Dir class to manage the OS temporary file path.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["tmpdir.rb".freeze]
  s.homepage = "https://github.com/ruby/tmpdir".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Extends the Dir class to manage the OS temporary file path.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<fileutils>.freeze, [">= 0".freeze])
end
PK)J[�'��3share/gems/specifications/default/erb-4.0.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: erb 4.0.4 ruby lib
# stub: ext/erb/escape/extconf.rb

Gem::Specification.new do |s|
  s.name = "erb".freeze
  s.version = "4.0.4".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/erb", "source_code_uri" => "https://github.com/ruby/erb" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Masatoshi SEKI".freeze, "Takashi Kokubun".freeze]
  s.bindir = "libexec".freeze
  s.date = "2025-05-14"
  s.description = "An easy to use but powerful templating system for Ruby.".freeze
  s.email = ["seki@ruby-lang.org".freeze, "k0kubun@ruby-lang.org".freeze]
  s.executables = ["erb".freeze]
  s.extensions = ["ext/erb/escape/extconf.rb".freeze]
  s.files = ["erb.rb".freeze, "erb/compiler.rb".freeze, "erb/def_method.rb".freeze, "erb/escape.so".freeze, "erb/util.rb".freeze, "erb/version.rb".freeze, "ext/erb/escape/extconf.rb".freeze, "libexec/erb".freeze]
  s.homepage = "https://github.com/ruby/erb".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "An easy to use but powerful templating system for Ruby.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<cgi>.freeze, [">= 0.3.3".freeze])
end
PK)J[���w��4share/gems/specifications/default/zlib-3.2.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: zlib 3.2.1 ruby lib
# stub: ext/zlib/extconf.rb

Gem::Specification.new do |s|
  s.name = "zlib".freeze
  s.version = "3.2.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze, "UENO Katsuhiro".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Ruby interface for the zlib compression/decompression library".freeze
  s.email = ["matz@ruby-lang.org".freeze, nil]
  s.extensions = ["ext/zlib/extconf.rb".freeze]
  s.files = ["ext/zlib/extconf.rb".freeze, "zlib.so".freeze]
  s.homepage = "https://github.com/ruby/zlib".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Ruby interface for the zlib compression/decompression library".freeze
end
PK)J[&
�@@5share/gems/specifications/default/prism-1.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: prism 1.2.0 ruby lib
# stub: ext/prism/extconf.rb

Gem::Specification.new do |s|
  s.name = "prism".freeze
  s.version = "1.2.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "allowed_push_host" => "https://rubygems.org", "changelog_uri" => "https://github.com/ruby/prism/blob/main/CHANGELOG.md", "source_code_uri" => "https://github.com/ruby/prism" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Shopify".freeze]
  s.date = "2025-05-14"
  s.email = ["ruby@shopify.com".freeze]
  s.extensions = ["ext/prism/extconf.rb".freeze]
  s.files = ["ext/prism/extconf.rb".freeze, "prism.rb".freeze, "prism/compiler.rb".freeze, "prism/desugar_compiler.rb".freeze, "prism/dispatcher.rb".freeze, "prism/dsl.rb".freeze, "prism/ffi.rb".freeze, "prism/inspect_visitor.rb".freeze, "prism/lex_compat.rb".freeze, "prism/mutation_compiler.rb".freeze, "prism/node.rb".freeze, "prism/node_ext.rb".freeze, "prism/pack.rb".freeze, "prism/parse_result.rb".freeze, "prism/parse_result/comments.rb".freeze, "prism/parse_result/errors.rb".freeze, "prism/parse_result/newlines.rb".freeze, "prism/pattern.rb".freeze, "prism/polyfill/byteindex.rb".freeze, "prism/polyfill/unpack1.rb".freeze, "prism/reflection.rb".freeze, "prism/relocation.rb".freeze, "prism/serialize.rb".freeze, "prism/string_query.rb".freeze, "prism/translation.rb".freeze, "prism/translation/parser.rb".freeze, "prism/translation/parser/compiler.rb".freeze, "prism/translation/parser/lexer.rb".freeze, "prism/translation/parser33.rb".freeze, "prism/translation/parser34.rb".freeze, "prism/translation/ripper.rb".freeze, "prism/translation/ripper/sexp.rb".freeze, "prism/translation/ripper/shim.rb".freeze, "prism/translation/ruby_parser.rb".freeze, "prism/visitor.rb".freeze]
  s.homepage = "https://github.com/ruby/prism".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Prism Ruby parser".freeze
end
PK)J[��??;share/gems/specifications/default/io-nonblock-0.3.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: io-nonblock 0.3.1 ruby lib
# stub: ext/io/nonblock/extconf.rb

Gem::Specification.new do |s|
  s.name = "io-nonblock".freeze
  s.version = "0.3.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/io-nonblock", "source_code_uri" => "https://github.com/ruby/io-nonblock" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.date = "2025-05-14"
  s.description = "Enables non-blocking mode with IO class".freeze
  s.email = ["nobu@ruby-lang.org".freeze]
  s.extensions = ["ext/io/nonblock/extconf.rb".freeze]
  s.files = ["ext/io/nonblock/extconf.rb".freeze, "io/nonblock.so".freeze]
  s.homepage = "https://github.com/ruby/io-nonblock".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Enables non-blocking mode with IO class".freeze
end
PK)J[S�
2share/gems/specifications/default/pp-0.6.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: pp 0.6.2 ruby lib

Gem::Specification.new do |s|
  s.name = "pp".freeze
  s.version = "0.6.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/pp", "source_code_uri" => "https://github.com/ruby/pp" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Provides a PrettyPrinter for Ruby objects".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["pp.rb".freeze]
  s.homepage = "https://github.com/ruby/pp".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides a PrettyPrinter for Ruby objects".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<prettyprint>.freeze, [">= 0".freeze])
end
PK)J[�x�%4	4	>share/gems/specifications/default/syntax_suggest-2.0.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: syntax_suggest 2.0.2 ruby lib

Gem::Specification.new do |s|
  s.name = "syntax_suggest".freeze
  s.version = "2.0.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/syntax_suggest.git", "source_code_uri" => "https://github.com/ruby/syntax_suggest.git" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["schneems".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "When you get an \"unexpected end\" in your syntax this gem helps you find it".freeze
  s.email = ["richard.schneeman+foo@gmail.com".freeze]
  s.executables = ["syntax_suggest".freeze]
  s.files = ["exe/syntax_suggest".freeze, "syntax_suggest.rb".freeze, "syntax_suggest/api.rb".freeze, "syntax_suggest/around_block_scan.rb".freeze, "syntax_suggest/block_expand.rb".freeze, "syntax_suggest/capture/before_after_keyword_ends.rb".freeze, "syntax_suggest/capture/falling_indent_lines.rb".freeze, "syntax_suggest/capture_code_context.rb".freeze, "syntax_suggest/clean_document.rb".freeze, "syntax_suggest/cli.rb".freeze, "syntax_suggest/code_block.rb".freeze, "syntax_suggest/code_frontier.rb".freeze, "syntax_suggest/code_line.rb".freeze, "syntax_suggest/code_search.rb".freeze, "syntax_suggest/core_ext.rb".freeze, "syntax_suggest/display_code_with_line_numbers.rb".freeze, "syntax_suggest/display_invalid_blocks.rb".freeze, "syntax_suggest/explain_syntax.rb".freeze, "syntax_suggest/left_right_lex_count.rb".freeze, "syntax_suggest/lex_all.rb".freeze, "syntax_suggest/lex_value.rb".freeze, "syntax_suggest/mini_stringio.rb".freeze, "syntax_suggest/parse_blocks_from_indent_line.rb".freeze, "syntax_suggest/pathname_from_message.rb".freeze, "syntax_suggest/priority_engulf_queue.rb".freeze, "syntax_suggest/priority_queue.rb".freeze, "syntax_suggest/ripper_errors.rb".freeze, "syntax_suggest/scan_history.rb".freeze, "syntax_suggest/unvisited_lines.rb".freeze, "syntax_suggest/version.rb".freeze]
  s.homepage = "https://github.com/ruby/syntax_suggest.git".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 3.0.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Find syntax errors in your source in a snap".freeze
end
PK)J[�!�$??6share/gems/specifications/default/resolv-0.6.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: resolv 0.6.0 ruby lib
# stub: ext/win32/resolv/extconf.rb

Gem::Specification.new do |s|
  s.name = "resolv".freeze
  s.version = "0.6.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/resolv", "source_code_uri" => "https://github.com/ruby/resolv" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Thread-aware DNS resolver library in Ruby.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.extensions = ["ext/win32/resolv/extconf.rb".freeze]
  s.files = ["ext/win32/resolv/extconf.rb".freeze, "resolv.rb".freeze]
  s.homepage = "https://github.com/ruby/resolv".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Thread-aware DNS resolver library in Ruby.".freeze
end
PK)J[#T���6share/gems/specifications/default/pstore-0.1.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: pstore 0.1.4 ruby lib

Gem::Specification.new do |s|
  s.name = "pstore".freeze
  s.version = "0.1.4".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/pstore", "source_code_uri" => "https://github.com/ruby/pstore" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Transactional File Storage for Ruby Objects".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["pstore.rb".freeze]
  s.homepage = "https://github.com/ruby/pstore".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Transactional File Storage for Ruby Objects".freeze
end
PK)J[��ɑ��<share/gems/specifications/default/securerandom-0.4.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: securerandom 0.4.1 ruby lib

Gem::Specification.new do |s|
  s.name = "securerandom".freeze
  s.version = "0.4.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/securerandom", "source_code_uri" => "https://github.com/ruby/securerandom" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Interface for secure random number generator.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["securerandom.rb".freeze]
  s.homepage = "https://github.com/ruby/securerandom".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 3.1.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Interface for secure random number generator.".freeze
end
PK)J[����8share/gems/specifications/default/open-uri-0.5.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: open-uri 0.5.0 ruby lib

Gem::Specification.new do |s|
  s.name = "open-uri".freeze
  s.version = "0.5.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/open-uri", "source_code_uri" => "https://github.com/ruby/open-uri" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.date = "2025-05-14"
  s.description = "An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["open-uri.rb".freeze]
  s.homepage = "https://github.com/ruby/open-uri".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<uri>.freeze, [">= 0".freeze])
  s.add_runtime_dependency(%q<stringio>.freeze, [">= 0".freeze])
  s.add_runtime_dependency(%q<time>.freeze, [">= 0".freeze])
end
PK)J[%~y''8share/gems/specifications/default/optparse-0.6.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: optparse 0.6.0 ruby lib

Gem::Specification.new do |s|
  s.name = "optparse".freeze
  s.version = "0.6.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/optparse", "source_code_uri" => "https://github.com/ruby/optparse" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "OptionParser is a class for command-line option analysis.".freeze
  s.email = ["nobu@ruby-lang.org".freeze]
  s.files = ["optionparser.rb".freeze, "optparse.rb".freeze, "optparse/ac.rb".freeze, "optparse/date.rb".freeze, "optparse/kwargs.rb".freeze, "optparse/shellwords.rb".freeze, "optparse/time.rb".freeze, "optparse/uri.rb".freeze, "optparse/version.rb".freeze]
  s.homepage = "https://github.com/ruby/optparse".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main=README.md".freeze, "--op=rdoc".freeze, "--page-dir=doc".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "OptionParser is a class for command-line option analysis.".freeze
end
PK)J[����##8share/gems/specifications/default/stringio-3.1.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: stringio 3.1.2 ruby lib
# stub: ext/stringio/extconf.rb

Gem::Specification.new do |s|
  s.name = "stringio".freeze
  s.version = "3.1.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze, "Charles Oliver Nutter".freeze]
  s.date = "2025-05-14"
  s.description = "Pseudo `IO` class from/to `String`.".freeze
  s.email = ["nobu@ruby-lang.org".freeze, "headius@headius.com".freeze]
  s.extensions = ["ext/stringio/extconf.rb".freeze]
  s.extra_rdoc_files = [".document".freeze, ".rdoc_options".freeze, "COPYING".freeze, "LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "docs/io.rb".freeze, "ext/stringio/.document".freeze]
  s.files = [".document".freeze, ".rdoc_options".freeze, "COPYING".freeze, "LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "docs/io.rb".freeze, "ext/stringio/.document".freeze, "ext/stringio/extconf.rb".freeze, "stringio.so".freeze]
  s.homepage = "https://github.com/ruby/stringio".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Pseudo IO on String".freeze
end
PK)J[����884share/gems/specifications/default/time-0.4.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: time 0.4.1 ruby lib

Gem::Specification.new do |s|
  s.name = "time".freeze
  s.version = "0.4.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/time", "source_code_uri" => "https://github.com/ruby/time" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Extends the Time class with methods for parsing and conversion.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["time.rb".freeze]
  s.homepage = "https://github.com/ruby/time".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Extends the Time class with methods for parsing and conversion.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<date>.freeze, [">= 0".freeze])
end
PK)J[�r�-??7share/gems/specifications/default/ostruct-0.6.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: ostruct 0.6.1 ruby lib

Gem::Specification.new do |s|
  s.name = "ostruct".freeze
  s.version = "0.6.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Marc-Andre Lafortune".freeze]
  s.date = "2025-05-14"
  s.description = "Class to build custom data structures, similar to a Hash.".freeze
  s.email = ["ruby-core@marc-andre.ca".freeze]
  s.files = ["ostruct.rb".freeze]
  s.homepage = "https://github.com/ruby/ostruct".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Class to build custom data structures, similar to a Hash.".freeze
end
PK)J[jwQQ7share/gems/specifications/default/io-wait-0.3.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: io-wait 0.3.1 ruby lib
# stub: ext/io/wait/extconf.rb

Gem::Specification.new do |s|
  s.name = "io-wait".freeze
  s.version = "0.3.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/io-wait", "source_code_uri" => "https://github.com/ruby/io-wait" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze, "Charles Oliver Nutter".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Waits until IO is readable or writable without blocking.".freeze
  s.email = ["nobu@ruby-lang.org".freeze, "headius@headius.com".freeze]
  s.extensions = ["ext/io/wait/extconf.rb".freeze]
  s.files = ["ext/io/wait/extconf.rb".freeze, "io/wait.so".freeze]
  s.homepage = "https://github.com/ruby/io-wait".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Waits until IO is readable or writable without blocking.".freeze
end
PK)J[$�t���9share/gems/specifications/default/benchmark-0.4.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: benchmark 0.4.0 ruby lib

Gem::Specification.new do |s|
  s.name = "benchmark".freeze
  s.version = "0.4.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/benchmark", "source_code_uri" => "https://github.com/ruby/benchmark" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "a performance benchmarking library".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["benchmark.rb".freeze]
  s.homepage = "https://github.com/ruby/benchmark".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.1.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "a performance benchmarking library".freeze
end
PK)J[���o6share/gems/specifications/default/logger-1.6.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: logger 1.6.4 ruby lib

Gem::Specification.new do |s|
  s.name = "logger".freeze
  s.version = "1.6.4".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Naotoshi Seo".freeze, "SHIBATA Hiroshi".freeze]
  s.date = "2025-05-14"
  s.description = "Provides a simple logging utility for outputting messages.".freeze
  s.email = ["sonots@gmail.com".freeze, "hsbt@ruby-lang.org".freeze]
  s.files = ["logger.rb".freeze, "logger/errors.rb".freeze, "logger/formatter.rb".freeze, "logger/log_device.rb".freeze, "logger/period.rb".freeze, "logger/severity.rb".freeze, "logger/version.rb".freeze]
  s.homepage = "https://github.com/ruby/logger".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides a simple logging utility for outputting messages.".freeze
end
PK)J[='�;share/gems/specifications/default/prettyprint-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: prettyprint 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "prettyprint".freeze
  s.version = "0.2.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/prettyprint", "source_code_uri" => "https://github.com/ruby/prettyprint" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Implements a pretty printing algorithm for readable structure.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["prettyprint.rb".freeze]
  s.homepage = "https://github.com/ruby/prettyprint".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Implements a pretty printing algorithm for readable structure.".freeze
end
PK)J[jLDz��4share/gems/specifications/default/yaml-0.4.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: yaml 0.4.0 ruby lib

Gem::Specification.new do |s|
  s.name = "yaml".freeze
  s.version = "0.4.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/yaml", "source_code_uri" => "https://github.com/ruby/yaml" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Aaron Patterson".freeze, "SHIBATA Hiroshi".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "YAML Ain't Markup Language".freeze
  s.email = ["aaron@tenderlovemaking.com".freeze, "hsbt@ruby-lang.org".freeze]
  s.files = ["yaml.rb".freeze, "yaml/dbm.rb".freeze, "yaml/store.rb".freeze]
  s.homepage = "https://github.com/ruby/yaml".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.6.7".freeze
  s.summary = "YAML Ain't Markup Language".freeze
end
PK)J[������6share/gems/specifications/default/reline-0.6.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: reline 0.6.0 ruby lib

Gem::Specification.new do |s|
  s.name = "reline".freeze
  s.version = "0.6.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/ruby/reline/issues", "changelog_uri" => "https://github.com/ruby/reline/releases", "source_code_uri" => "https://github.com/ruby/reline" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["aycabta".freeze]
  s.date = "2025-05-14"
  s.description = "Alternative GNU Readline or Editline implementation by pure Ruby.".freeze
  s.email = ["aycabta@gmail.com".freeze]
  s.files = ["reline.rb".freeze, "reline/config.rb".freeze, "reline/face.rb".freeze, "reline/history.rb".freeze, "reline/io.rb".freeze, "reline/io/ansi.rb".freeze, "reline/io/dumb.rb".freeze, "reline/io/windows.rb".freeze, "reline/key_actor.rb".freeze, "reline/key_actor/base.rb".freeze, "reline/key_actor/composite.rb".freeze, "reline/key_actor/emacs.rb".freeze, "reline/key_actor/vi_command.rb".freeze, "reline/key_actor/vi_insert.rb".freeze, "reline/key_stroke.rb".freeze, "reline/kill_ring.rb".freeze, "reline/line_editor.rb".freeze, "reline/unicode.rb".freeze, "reline/unicode/east_asian_width.rb".freeze, "reline/version.rb".freeze]
  s.homepage = "https://github.com/ruby/reline".freeze
  s.licenses = ["Ruby".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Alternative GNU Readline or Editline implementation by pure Ruby.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<io-console>.freeze, ["~> 0.5".freeze])
end
PK)J[���__6share/gems/specifications/default/digest-3.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: digest 3.2.0 ruby lib
# stub: ext/digest/bubblebabble/extconf.rbext/digest/extconf.rbext/digest/md5/extconf.rbext/digest/rmd160/extconf.rbext/digest/sha1/extconf.rbext/digest/sha2/extconf.rb

Gem::Specification.new do |s|
  s.name = "digest".freeze
  s.version = "3.2.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "msys2_mingw_dependencies" => "openssl" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Provides a framework for message digest libraries.".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.extensions = ["ext/digest/bubblebabble/extconf.rb".freeze, "ext/digest/extconf.rb".freeze, "ext/digest/md5/extconf.rb".freeze, "ext/digest/rmd160/extconf.rb".freeze, "ext/digest/sha1/extconf.rb".freeze, "ext/digest/sha2/extconf.rb".freeze]
  s.files = ["digest.rb".freeze, "digest.so".freeze, "digest/loader.rb".freeze, "digest/version.rb".freeze, "ext/digest/bubblebabble/extconf.rb".freeze, "ext/digest/extconf.rb".freeze, "ext/digest/md5/extconf.rb".freeze, "ext/digest/rmd160/extconf.rb".freeze, "ext/digest/sha1/extconf.rb".freeze, "ext/digest/sha2/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/digest".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides a framework for message digest libraries.".freeze
end
PK)J[l2@��9share/gems/specifications/default/fileutils-1.7.3.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: fileutils 1.7.3 ruby lib

Gem::Specification.new do |s|
  s.name = "fileutils".freeze
  s.version = "1.7.3".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "source_code_uri" => "https://github.com/ruby/fileutils" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Minero Aoki".freeze]
  s.date = "2025-05-14"
  s.description = "Several file utility methods for copying, moving, removing, etc.".freeze
  s.email = [nil]
  s.files = ["fileutils.rb".freeze]
  s.homepage = "https://github.com/ruby/fileutils".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Several file utility methods for copying, moving, removing, etc.".freeze
end
PK)J[���7share/gems/specifications/default/timeout-0.4.3.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: timeout 0.4.3 ruby lib

Gem::Specification.new do |s|
  s.name = "timeout".freeze
  s.version = "0.4.3".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/timeout/releases", "homepage_uri" => "https://github.com/ruby/timeout", "source_code_uri" => "https://github.com/ruby/timeout" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-05-14"
  s.description = "Auto-terminate potentially long-running operations in Ruby.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["timeout.rb".freeze]
  s.homepage = "https://github.com/ruby/timeout".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Auto-terminate potentially long-running operations in Ruby.".freeze
end
PK)J[�����3share/gems/specifications/default/cgi-0.4.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: cgi 0.4.2 ruby lib
# stub: ext/cgi/escape/extconf.rb

Gem::Specification.new do |s|
  s.name = "cgi".freeze
  s.version = "0.4.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/cgi", "source_code_uri" => "https://github.com/ruby/cgi" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-05-14"
  s.description = "Support for the Common Gateway Interface protocol.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.extensions = ["ext/cgi/escape/extconf.rb".freeze]
  s.files = ["cgi.rb".freeze, "cgi/cookie.rb".freeze, "cgi/core.rb".freeze, "cgi/escape.so".freeze, "cgi/html.rb".freeze, "cgi/session.rb".freeze, "cgi/session/pstore.rb".freeze, "cgi/util.rb".freeze, "ext/cgi/escape/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/cgi".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Support for the Common Gateway Interface protocol.".freeze
end
PK)J[=���5share/gems/specifications/default/tsort-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: tsort 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "tsort".freeze
  s.version = "0.2.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/tsort", "source_code_uri" => "https://github.com/ruby/tsort" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Topological sorting using Tarjan's algorithm".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["tsort.rb".freeze]
  s.homepage = "https://github.com/ruby/tsort".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Topological sorting using Tarjan's algorithm".freeze
end
PK)J[&�x���7share/gems/specifications/default/strscan-3.1.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: strscan 3.1.2 ruby lib
# stub: ext/strscan/extconf.rb

Gem::Specification.new do |s|
  s.name = "strscan".freeze
  s.version = "3.1.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Minero Aoki".freeze, "Sutou Kouhei".freeze, "Charles Oliver Nutter".freeze]
  s.date = "2025-05-14"
  s.description = "Provides lexical scanning operations on a String.".freeze
  s.email = [nil, "kou@cozmixng.org".freeze, "headius@headius.com".freeze]
  s.extensions = ["ext/strscan/extconf.rb".freeze]
  s.extra_rdoc_files = [".rdoc_options".freeze, "doc/strscan/helper_methods.md".freeze, "doc/strscan/link_refs.txt".freeze, "doc/strscan/methods".freeze, "doc/strscan/methods/get_byte.md".freeze, "doc/strscan/methods/get_charpos.md".freeze, "doc/strscan/methods/get_pos.md".freeze, "doc/strscan/methods/getch.md".freeze, "doc/strscan/methods/scan.md".freeze, "doc/strscan/methods/scan_until.md".freeze, "doc/strscan/methods/set_pos.md".freeze, "doc/strscan/methods/skip.md".freeze, "doc/strscan/methods/skip_until.md".freeze, "doc/strscan/methods/terminate.md".freeze, "doc/strscan/strscan.md".freeze]
  s.files = [".rdoc_options".freeze, "doc/strscan/helper_methods.md".freeze, "doc/strscan/link_refs.txt".freeze, "doc/strscan/methods".freeze, "doc/strscan/methods/get_byte.md".freeze, "doc/strscan/methods/get_charpos.md".freeze, "doc/strscan/methods/get_pos.md".freeze, "doc/strscan/methods/getch.md".freeze, "doc/strscan/methods/scan.md".freeze, "doc/strscan/methods/scan_until.md".freeze, "doc/strscan/methods/set_pos.md".freeze, "doc/strscan/methods/skip.md".freeze, "doc/strscan/methods/skip_until.md".freeze, "doc/strscan/methods/terminate.md".freeze, "doc/strscan/strscan.md".freeze, "ext/strscan/extconf.rb".freeze, "strscan.so".freeze, "strscan/strscan.rb".freeze]
  s.homepage = "https://github.com/ruby/strscan".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["-idoc".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides lexical scanning operations on a String.".freeze
end
PK)J[���?share/gems/specifications/default/error_highlight-0.7.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: error_highlight 0.7.0 ruby lib

Gem::Specification.new do |s|
  s.name = "error_highlight".freeze
  s.version = "0.7.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yusuke Endoh".freeze]
  s.date = "2025-05-14"
  s.description = "The gem enhances Exception#message by adding a short explanation where the exception is raised".freeze
  s.email = ["mame@ruby-lang.org".freeze]
  s.files = ["error_highlight.rb".freeze, "error_highlight/base.rb".freeze, "error_highlight/core_ext.rb".freeze, "error_highlight/formatter.rb".freeze, "error_highlight/version.rb".freeze]
  s.homepage = "https://github.com/ruby/error_highlight".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 3.1.0.dev".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Shows a one-line code snippet with an underline in the error backtrace".freeze
end
PK)J[�?��7share/gems/specifications/default/english-0.8.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: english 0.8.0 ruby lib

Gem::Specification.new do |s|
  s.name = "english".freeze
  s.version = "0.8.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/English", "source_code_uri" => "https://github.com/ruby/English" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-05-14"
  s.description = "Require 'English.rb' to reference global variables with less cryptic names.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["English.rb".freeze]
  s.homepage = "https://github.com/ruby/English".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Require 'English.rb' to reference global variables with less cryptic names.".freeze
end
PK)J[h�����9share/gems/specifications/default/singleton-0.3.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: singleton 0.3.0 ruby lib

Gem::Specification.new do |s|
  s.name = "singleton".freeze
  s.version = "0.3.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/singleton", "source_code_uri" => "https://github.com/ruby/singleton" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "The Singleton module implements the Singleton pattern.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["singleton.rb".freeze]
  s.homepage = "https://github.com/ruby/singleton".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.6.7".freeze
  s.summary = "The Singleton module implements the Singleton pattern.".freeze
end
PK)J[�E����8share/gems/specifications/default/pathname-0.4.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: pathname 0.4.0 ruby lib
# stub: ext/pathname/extconf.rb

Gem::Specification.new do |s|
  s.name = "pathname".freeze
  s.version = "0.4.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/pathname", "source_code_uri" => "https://github.com/ruby/pathname" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Representation of the name of a file or directory on the filesystem".freeze
  s.email = ["akr@fsij.org".freeze]
  s.extensions = ["ext/pathname/extconf.rb".freeze]
  s.files = ["ext/pathname/extconf.rb".freeze, "pathname.rb".freeze, "pathname.so".freeze]
  s.homepage = "https://github.com/ruby/pathname".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Representation of the name of a file or directory on the filesystem".freeze
end
PK)J[7Z�ss<share/gems/specifications/default/net-protocol-0.2.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: net-protocol 0.2.2 ruby lib

Gem::Specification.new do |s|
  s.name = "net-protocol".freeze
  s.version = "0.2.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/net-protocol/releases", "homepage_uri" => "https://github.com/ruby/net-protocol", "source_code_uri" => "https://github.com/ruby/net-protocol" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-05-14"
  s.description = "The abstract interface for net-* client.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["net/protocol.rb".freeze]
  s.homepage = "https://github.com/ruby/net-protocol".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "The abstract interface for net-* client.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<timeout>.freeze, [">= 0".freeze])
end
PK)J[�ƻ:333share/gems/specifications/default/set-1.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: set 1.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "set".freeze
  s.version = "1.1.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/set/blob/v1.1.1/CHANGELOG.md", "homepage_uri" => "https://github.com/ruby/set", "source_code_uri" => "https://github.com/ruby/set" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.date = "2025-05-14"
  s.description = "Provides a class to deal with collections of unordered, unique values".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.files = ["set.rb".freeze, "set/sorted_set.rb".freeze]
  s.homepage = "https://github.com/ruby/set".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 3.0.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides a class to deal with collections of unordered, unique values".freeze
end
PK)J[��G���7share/gems/specifications/default/openssl-3.3.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: openssl 3.3.0 ruby lib
# stub: ext/openssl/extconf.rb

Gem::Specification.new do |s|
  s.name = "openssl".freeze
  s.version = "3.3.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "msys2_mingw_dependencies" => "openssl" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Martin Bosslet".freeze, "SHIBATA Hiroshi".freeze, "Zachary Scott".freeze, "Kazuki Yamaguchi".freeze]
  s.date = "2025-05-14"
  s.description = "OpenSSL for Ruby provides access to SSL/TLS and general-purpose cryptography based on the OpenSSL library.".freeze
  s.email = ["ruby-core@ruby-lang.org".freeze]
  s.extensions = ["ext/openssl/extconf.rb".freeze]
  s.extra_rdoc_files = ["CONTRIBUTING.md".freeze, "NEWS.md".freeze, "README.ja.md".freeze, "README.md".freeze]
  s.files = ["CONTRIBUTING.md".freeze, "NEWS.md".freeze, "README.ja.md".freeze, "README.md".freeze, "ext/openssl/extconf.rb".freeze, "openssl.rb".freeze, "openssl.so".freeze, "openssl/asn1.rb".freeze, "openssl/bn.rb".freeze, "openssl/buffering.rb".freeze, "openssl/cipher.rb".freeze, "openssl/digest.rb".freeze, "openssl/hmac.rb".freeze, "openssl/marshal.rb".freeze, "openssl/pkcs5.rb".freeze, "openssl/pkey.rb".freeze, "openssl/ssl.rb".freeze, "openssl/version.rb".freeze, "openssl/x509.rb".freeze]
  s.homepage = "https://github.com/ruby/openssl".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "SSL/TLS and general-purpose cryptography for Ruby".freeze
end
PK)J[�iu߱�3share/gems/specifications/default/etc-1.4.5.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: etc 1.4.5 ruby lib
# stub: ext/etc/extconf.rb

Gem::Specification.new do |s|
  s.name = "etc".freeze
  s.version = "1.4.5".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Provides access to information typically stored in UNIX /etc directory.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.extensions = ["ext/etc/extconf.rb".freeze]
  s.extra_rdoc_files = ["BSDL".freeze, "COPYING".freeze, "ChangeLog".freeze, "README.md".freeze, "ext/etc/constdefs.h".freeze, "ext/etc/etc.c".freeze, "ext/etc/extconf.rb".freeze, "ext/etc/mkconstants.rb".freeze, "test/etc/test_etc.rb".freeze]
  s.files = ["BSDL".freeze, "COPYING".freeze, "ChangeLog".freeze, "README.md".freeze, "etc.so".freeze, "ext/etc/constdefs.h".freeze, "ext/etc/etc.c".freeze, "ext/etc/extconf.rb".freeze, "ext/etc/mkconstants.rb".freeze, "test/etc/test_etc.rb".freeze]
  s.homepage = "https://github.com/ruby/etc".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides access to information typically stored in UNIX /etc directory.".freeze
end
PK)J[�pL��5share/gems/specifications/default/open3-0.2.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: open3 0.2.1 ruby lib

Gem::Specification.new do |s|
  s.name = "open3".freeze
  s.version = "0.2.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/open3", "source_code_uri" => "https://github.com/ruby/open3" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Popen, but with stderr, too".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["open3.rb".freeze, "open3/version.rb".freeze]
  s.homepage = "https://github.com/ruby/open3".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Popen, but with stderr, too".freeze
end
PK)J[}\4share/gems/specifications/default/date-3.4.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: date 3.4.1 ruby lib
# stub: ext/date/extconf.rb

Gem::Specification.new do |s|
  s.name = "date".freeze
  s.version = "3.4.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/date/releases" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tadayoshi Funaba".freeze]
  s.date = "2025-05-14"
  s.description = "A subclass of Object includes Comparable module for handling dates.".freeze
  s.email = [nil]
  s.extensions = ["ext/date/extconf.rb".freeze]
  s.files = ["date.rb".freeze, "date_core.so".freeze, "ext/date/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/date".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "A subclass of Object includes Comparable module for handling dates.".freeze
end
PK)J[͕�~��;share/gems/specifications/default/forwardable-1.3.3.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: forwardable 1.3.3 ruby lib

Gem::Specification.new do |s|
  s.name = "forwardable".freeze
  s.version = "1.3.3".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Keiju ISHITSUKA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Provides delegation of specified methods to a designated object.".freeze
  s.email = ["keiju@ruby-lang.org".freeze]
  s.files = ["forwardable.rb".freeze, "forwardable/impl.rb".freeze]
  s.homepage = "https://github.com/ruby/forwardable".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides delegation of specified methods to a designated object.".freeze
end
PK)J[�O�2share/gems/specifications/default/un-0.3.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: un 0.3.0 ruby lib

Gem::Specification.new do |s|
  s.name = "un".freeze
  s.version = "0.3.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/un", "source_code_uri" => "https://github.com/ruby/un" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["WATANABE Hirofumi".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Utilities to replace common UNIX commands".freeze
  s.email = ["eban@ruby-lang.org".freeze]
  s.files = ["un.rb".freeze]
  s.homepage = "https://github.com/ruby/un".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Utilities to replace common UNIX commands".freeze
end
PK)J[#N�V==8share/gems/specifications/default/net-http-0.6.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: net-http 0.6.0 ruby lib

Gem::Specification.new do |s|
  s.name = "net-http".freeze
  s.version = "0.6.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/net-http", "source_code_uri" => "https://github.com/ruby/net-http" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["NARUSE, Yui".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "HTTP client api for Ruby.".freeze
  s.email = ["naruse@airemix.jp".freeze]
  s.files = ["net/http.rb".freeze, "net/http/exceptions.rb".freeze, "net/http/generic_request.rb".freeze, "net/http/header.rb".freeze, "net/http/proxy_delta.rb".freeze, "net/http/request.rb".freeze, "net/http/requests.rb".freeze, "net/http/response.rb".freeze, "net/http/responses.rb".freeze, "net/http/status.rb".freeze, "net/https.rb".freeze]
  s.homepage = "https://github.com/ruby/net-http".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "HTTP client api for Ruby.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<uri>.freeze, [">= 0".freeze])
end
PK)J[Pn����4share/gems/specifications/default/find-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: find 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "find".freeze
  s.version = "0.2.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/find", "source_code_uri" => "https://github.com/ruby/find" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Kazuki Tsujimoto".freeze]
  s.date = "2025-05-14"
  s.description = "This module supports top-down traversal of a set of file paths.".freeze
  s.email = ["kazuki@callcc.net".freeze]
  s.files = ["find.rb".freeze]
  s.homepage = "https://github.com/ruby/find".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "This module supports top-down traversal of a set of file paths.".freeze
end
PK)J[�!��3share/gems/specifications/default/uri-1.0.3.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: uri 1.0.3 ruby lib

Gem::Specification.new do |s|
  s.name = "uri".freeze
  s.version = "1.0.3".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/ruby/uri/issues", "changelog_uri" => "https://github.com/ruby/uri/releases", "documentation_uri" => "https://ruby.github.io/uri/", "homepage_uri" => "https://github.com/ruby/uri", "source_code_uri" => "https://github.com/ruby/uri" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akira Yamada".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "URI is a module providing classes to handle Uniform Resource Identifiers".freeze
  s.email = ["akira@ruby-lang.org".freeze]
  s.files = ["uri.rb".freeze, "uri/common.rb".freeze, "uri/file.rb".freeze, "uri/ftp.rb".freeze, "uri/generic.rb".freeze, "uri/http.rb".freeze, "uri/https.rb".freeze, "uri/ldap.rb".freeze, "uri/ldaps.rb".freeze, "uri/mailto.rb".freeze, "uri/rfc2396_parser.rb".freeze, "uri/rfc3986_parser.rb".freeze, "uri/version.rb".freeze, "uri/ws.rb".freeze, "uri/wss.rb".freeze]
  s.homepage = "https://github.com/ruby/uri".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "URI is a module providing classes to handle Uniform Resource Identifiers".freeze
end
PK)J[����:share/gems/specifications/default/shellwords-0.2.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: shellwords 0.2.2 ruby lib

Gem::Specification.new do |s|
  s.name = "shellwords".freeze
  s.version = "0.2.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/shellwords", "source_code_uri" => "https://github.com/ruby/shellwords" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Manipulates strings with word parsing rules of UNIX Bourne shell.".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.files = ["shellwords.rb".freeze]
  s.homepage = "https://github.com/ruby/shellwords".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Manipulates strings with word parsing rules of UNIX Bourne shell.".freeze
end
PK)J[��{(zz6share/gems/specifications/default/ipaddr-1.2.7.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: ipaddr 1.2.7 ruby lib

Gem::Specification.new do |s|
  s.name = "ipaddr".freeze
  s.version = "1.2.7".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze, "Hajimu UMEMOTO".freeze]
  s.date = "2025-05-14"
  s.description = "IPAddr provides a set of methods to manipulate an IP address.\nBoth IPv4 and IPv6 are supported.\n".freeze
  s.email = ["knu@idaemons.org".freeze, "ume@mahoroba.org".freeze]
  s.files = ["ipaddr.rb".freeze]
  s.homepage = "https://github.com/ruby/ipaddr".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "A class to manipulate an IP address in ruby".freeze
end
PK)J[�&o҅�>share/gems/specifications/default/ruby2_keywords-0.0.5.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: ruby2_keywords 0.0.5 ruby lib

Gem::Specification.new do |s|
  s.name = "ruby2_keywords".freeze
  s.version = "0.0.5".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobuyoshi Nakada".freeze]
  s.date = "2025-05-14"
  s.extra_rdoc_files = ["LICENSE".freeze, "README.md".freeze, "ChangeLog".freeze]
  s.files = ["ChangeLog".freeze, "LICENSE".freeze, "README.md".freeze, "ruby2_keywords.rb".freeze]
  s.homepage = "https://github.com/ruby/ruby2_keywords".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.0.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Shim library for Module#ruby2_keywords".freeze
end
PK)J[�����7share/gems/specifications/default/weakref-0.1.3.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: weakref 0.1.3 ruby lib

Gem::Specification.new do |s|
  s.name = "weakref".freeze
  s.version = "0.1.3".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/weakref", "source_code_uri" => "https://github.com/ruby/weakref" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Allows a referenced object to be garbage-collected.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["weakref.rb".freeze]
  s.homepage = "https://github.com/ruby/weakref".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Allows a referenced object to be garbage-collected.".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<delegate>.freeze, [">= 0".freeze])
end
PK)J[�>���8share/gems/specifications/default/tempfile-0.3.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: tempfile 0.3.1 ruby lib

Gem::Specification.new do |s|
  s.name = "tempfile".freeze
  s.version = "0.3.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/tempfile", "source_code_uri" => "https://github.com/ruby/tempfile" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-05-14"
  s.description = "A utility class for managing temporary files.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["tempfile.rb".freeze]
  s.homepage = "https://github.com/ruby/tempfile".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "A utility class for managing temporary files.".freeze
end
PK)J[-����5share/gems/specifications/default/fcntl-1.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: fcntl 1.2.0 ruby lib
# stub: ext/fcntl/extconf.rb

Gem::Specification.new do |s|
  s.name = "fcntl".freeze
  s.version = "1.2.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Loads constants defined in the OS fcntl.h C header file".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.extensions = ["ext/fcntl/extconf.rb".freeze]
  s.extra_rdoc_files = [".document".freeze, ".rdoc_options".freeze, "BSDL".freeze, "COPYING".freeze, "README.md".freeze]
  s.files = [".document".freeze, ".rdoc_options".freeze, "BSDL".freeze, "COPYING".freeze, "README.md".freeze, "ext/fcntl/extconf.rb".freeze, "fcntl.so".freeze]
  s.homepage = "https://github.com/ruby/fcntl".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Loads constants defined in the OS fcntl.h C header file".freeze
end
PK)J[�Hv���<share/gems/specifications/default/did_you_mean-2.0.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: did_you_mean 2.0.0 ruby lib

Gem::Specification.new do |s|
  s.name = "did_you_mean".freeze
  s.version = "2.0.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yuki Nishijima".freeze]
  s.date = "2025-05-14"
  s.description = "The gem that has been saving people from typos since 2014.".freeze
  s.email = ["mail@yukinishijima.net".freeze]
  s.files = ["did_you_mean.rb".freeze, "did_you_mean/core_ext/name_error.rb".freeze, "did_you_mean/experimental.rb".freeze, "did_you_mean/formatter.rb".freeze, "did_you_mean/formatters/plain_formatter.rb".freeze, "did_you_mean/formatters/verbose_formatter.rb".freeze, "did_you_mean/jaro_winkler.rb".freeze, "did_you_mean/levenshtein.rb".freeze, "did_you_mean/spell_checker.rb".freeze, "did_you_mean/spell_checkers/key_error_checker.rb".freeze, "did_you_mean/spell_checkers/method_name_checker.rb".freeze, "did_you_mean/spell_checkers/name_error_checkers.rb".freeze, "did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb".freeze, "did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb".freeze, "did_you_mean/spell_checkers/null_checker.rb".freeze, "did_you_mean/spell_checkers/pattern_key_name_checker.rb".freeze, "did_you_mean/spell_checkers/require_path_checker.rb".freeze, "did_you_mean/tree_spell_checker.rb".freeze, "did_you_mean/verbose.rb".freeze, "did_you_mean/version.rb".freeze]
  s.homepage = "https://github.com/ruby/did_you_mean".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "\"Did you mean?\" experience in Ruby".freeze
end
PK)J[�Q5e^^6share/gems/specifications/default/fiddle-1.1.6.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: fiddle 1.1.6 ruby lib
# stub: ext/fiddle/extconf.rb

Gem::Specification.new do |s|
  s.name = "fiddle".freeze
  s.version = "1.1.6".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/fiddle/releases", "msys2_mingw_dependencies" => "libffi" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Aaron Patterson".freeze, "SHIBATA Hiroshi".freeze]
  s.date = "2025-05-14"
  s.description = "A libffi wrapper for Ruby.".freeze
  s.email = ["aaron@tenderlovemaking.com".freeze, "hsbt@ruby-lang.org".freeze]
  s.extensions = ["ext/fiddle/extconf.rb".freeze]
  s.files = ["ext/fiddle/extconf.rb".freeze, "fiddle.rb".freeze, "fiddle.so".freeze, "fiddle/closure.rb".freeze, "fiddle/cparser.rb".freeze, "fiddle/ffi_backend.rb".freeze, "fiddle/function.rb".freeze, "fiddle/import.rb".freeze, "fiddle/pack.rb".freeze, "fiddle/struct.rb".freeze, "fiddle/types.rb".freeze, "fiddle/value.rb".freeze, "fiddle/version.rb".freeze]
  s.homepage = "https://github.com/ruby/fiddle".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "A libffi wrapper for Ruby.".freeze
end
PK)J[u*���8share/gems/specifications/default/delegate-0.4.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: delegate 0.4.0 ruby lib

Gem::Specification.new do |s|
  s.name = "delegate".freeze
  s.version = "0.4.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/delegate", "source_code_uri" => "https://github.com/ruby/delegate" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-05-14"
  s.description = "Provides three abilities to delegate method calls to an object.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["delegate.rb".freeze]
  s.homepage = "https://github.com/ruby/delegate".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 3.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Provides three abilities to delegate method calls to an object.".freeze
end
PK)J[��88share/gems/specifications/default/readline-0.0.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: readline 0.0.4 ruby lib

Gem::Specification.new do |s|
  s.name = "readline".freeze
  s.version = "0.0.4".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["aycabta".freeze]
  s.date = "2025-05-14"
  s.description = "This is just a loader for \"readline\". If Ruby has the \"readline-ext\" gem\nthat is a native extension, this gem will load it. If Ruby does not have\nthe \"readline-ext\" gem this gem will load \"reline\", a library that is\ncompatible with the \"readline-ext\" gem and implemented in pure Ruby.\n".freeze
  s.email = ["aycabta@gmail.com".freeze]
  s.files = ["readline.rb".freeze]
  s.homepage = "https://github.com/ruby/readline".freeze
  s.licenses = ["Ruby".freeze]
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Loader for \"readline\".".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<reline>.freeze, [">= 0".freeze])
end
PK)J[MRS���+share/gems/specifications/drb-2.2.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: drb 2.2.1 ruby lib

Gem::Specification.new do |s|
  s.name = "drb".freeze
  s.version = "2.2.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/drb", "source_code_uri" => "https://github.com/ruby/drb" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Masatoshi SEKI".freeze]
  s.date = "2025-05-14"
  s.description = "Distributed object system for Ruby".freeze
  s.email = ["seki@ruby-lang.org".freeze]
  s.homepage = "https://github.com/ruby/drb".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Distributed object system for Ruby".freeze

  s.installed_by_version = "3.6.7".freeze
end
PK)J[&���[[2share/gems/specifications/getoptlong-0.2.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: getoptlong 0.2.1 ruby lib

Gem::Specification.new do |s|
  s.name = "getoptlong".freeze
  s.version = "0.2.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/getoptlong", "source_code_uri" => "https://github.com/ruby/getoptlong" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-05-14"
  s.description = "GetoptLong for Ruby".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.homepage = "https://github.com/ruby/getoptlong".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.6.7".freeze
  s.summary = "GetoptLong for Ruby".freeze

  s.installed_by_version = "3.6.7".freeze
end
PK)J[�)��DD2share/gems/specifications/io-console-0.8.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: io-console 0.8.0 ruby lib
# stub: ext/io/console/extconf.rb

Gem::Specification.new do |s|
  s.name = "io-console".freeze
  s.version = "0.8.0".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/io-console/releases", "source_code_url" => "https://github.com/ruby/io-console" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.date = "2025-05-14"
  s.description = "add console capabilities to IO instances.".freeze
  s.email = "nobu@ruby-lang.org".freeze
  s.extensions = ["ext/io/console/extconf.rb".freeze]
  s.files = ["console/size.rb".freeze, "ext/io/console/extconf.rb".freeze, "io/console.so".freeze]
  s.homepage = "https://github.com/ruby/io-console".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Console interface".freeze
end
PK)J[�z�_s,s,/share/gems/specifications/bundler-2.6.7.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: bundler 2.6.7 ruby lib

Gem::Specification.new do |s|
  s.name = "bundler".freeze
  s.version = "2.6.7".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 3.3.3".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/rubygems/rubygems/issues?q=is%3Aopen+is%3Aissue+label%3ABundler", "changelog_uri" => "https://github.com/rubygems/rubygems/blob/master/bundler/CHANGELOG.md", "homepage_uri" => "https://bundler.io/", "source_code_uri" => "https://github.com/rubygems/rubygems/tree/master/bundler" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Andr\u00E9 Arko".freeze, "Samuel Giddins".freeze, "Colby Swandale".freeze, "Hiroshi Shibata".freeze, "David Rodr\u00EDguez".freeze, "Grey Baker".freeze, "Stephanie Morillo".freeze, "Chris Morris".freeze, "James Wen".freeze, "Tim Moore".freeze, "Andr\u00E9 Medeiros".freeze, "Jessica Lynn Suttles".freeze, "Terence Lee".freeze, "Carl Lerche".freeze, "Yehuda Katz".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably".freeze
  s.email = ["team@bundler.io".freeze]
  s.executables = ["bundle".freeze, "bundler".freeze]
  s.files = ["bundler.rb".freeze, "bundler/build_metadata.rb".freeze, "bundler/capistrano.rb".freeze, "bundler/checksum.rb".freeze, "bundler/ci_detector.rb".freeze, "bundler/cli.rb".freeze, "bundler/cli/add.rb".freeze, "bundler/cli/binstubs.rb".freeze, "bundler/cli/cache.rb".freeze, "bundler/cli/check.rb".freeze, "bundler/cli/clean.rb".freeze, "bundler/cli/common.rb".freeze, "bundler/cli/config.rb".freeze, "bundler/cli/console.rb".freeze, "bundler/cli/doctor.rb".freeze, "bundler/cli/exec.rb".freeze, "bundler/cli/fund.rb".freeze, "bundler/cli/gem.rb".freeze, "bundler/cli/info.rb".freeze, "bundler/cli/init.rb".freeze, "bundler/cli/inject.rb".freeze, "bundler/cli/install.rb".freeze, "bundler/cli/issue.rb".freeze, "bundler/cli/list.rb".freeze, "bundler/cli/lock.rb".freeze, "bundler/cli/open.rb".freeze, "bundler/cli/outdated.rb".freeze, "bundler/cli/platform.rb".freeze, "bundler/cli/plugin.rb".freeze, "bundler/cli/pristine.rb".freeze, "bundler/cli/remove.rb".freeze, "bundler/cli/show.rb".freeze, "bundler/cli/update.rb".freeze, "bundler/cli/viz.rb".freeze, "bundler/compact_index_client.rb".freeze, "bundler/compact_index_client/cache.rb".freeze, "bundler/compact_index_client/cache_file.rb".freeze, "bundler/compact_index_client/parser.rb".freeze, "bundler/compact_index_client/updater.rb".freeze, "bundler/constants.rb".freeze, "bundler/current_ruby.rb".freeze, "bundler/definition.rb".freeze, "bundler/dependency.rb".freeze, "bundler/deployment.rb".freeze, "bundler/deprecate.rb".freeze, "bundler/digest.rb".freeze, "bundler/dsl.rb".freeze, "bundler/endpoint_specification.rb".freeze, "bundler/env.rb".freeze, "bundler/environment_preserver.rb".freeze, "bundler/errors.rb".freeze, "bundler/feature_flag.rb".freeze, "bundler/fetcher.rb".freeze, "bundler/fetcher/base.rb".freeze, "bundler/fetcher/compact_index.rb".freeze, "bundler/fetcher/dependency.rb".freeze, "bundler/fetcher/downloader.rb".freeze, "bundler/fetcher/gem_remote_fetcher.rb".freeze, "bundler/fetcher/index.rb".freeze, "bundler/force_platform.rb".freeze, "bundler/friendly_errors.rb".freeze, "bundler/gem_helper.rb".freeze, "bundler/gem_helpers.rb".freeze, "bundler/gem_tasks.rb".freeze, "bundler/gem_version_promoter.rb".freeze, "bundler/graph.rb".freeze, "bundler/index.rb".freeze, "bundler/injector.rb".freeze, "bundler/inline.rb".freeze, "bundler/installer.rb".freeze, "bundler/installer/gem_installer.rb".freeze, "bundler/installer/parallel_installer.rb".freeze, "bundler/installer/standalone.rb".freeze, "bundler/lazy_specification.rb".freeze, "bundler/lockfile_generator.rb".freeze, "bundler/lockfile_parser.rb".freeze, "bundler/match_metadata.rb".freeze, "bundler/match_platform.rb".freeze, "bundler/match_remote_metadata.rb".freeze, "bundler/materialization.rb".freeze, "bundler/mirror.rb".freeze, "bundler/plugin.rb".freeze, "bundler/plugin/api.rb".freeze, "bundler/plugin/api/source.rb".freeze, "bundler/plugin/dsl.rb".freeze, "bundler/plugin/events.rb".freeze, "bundler/plugin/index.rb".freeze, "bundler/plugin/installer.rb".freeze, "bundler/plugin/installer/git.rb".freeze, "bundler/plugin/installer/path.rb".freeze, "bundler/plugin/installer/rubygems.rb".freeze, "bundler/plugin/source_list.rb".freeze, "bundler/process_lock.rb".freeze, "bundler/remote_specification.rb".freeze, "bundler/resolver.rb".freeze, "bundler/resolver/base.rb".freeze, "bundler/resolver/candidate.rb".freeze, "bundler/resolver/incompatibility.rb".freeze, "bundler/resolver/package.rb".freeze, "bundler/resolver/root.rb".freeze, "bundler/resolver/spec_group.rb".freeze, "bundler/resolver/strategy.rb".freeze, "bundler/retry.rb".freeze, "bundler/ruby_dsl.rb".freeze, "bundler/ruby_version.rb".freeze, "bundler/rubygems_ext.rb".freeze, "bundler/rubygems_gem_installer.rb".freeze, "bundler/rubygems_integration.rb".freeze, "bundler/runtime.rb".freeze, "bundler/safe_marshal.rb".freeze, "bundler/self_manager.rb".freeze, "bundler/settings.rb".freeze, "bundler/settings/validator.rb".freeze, "bundler/setup.rb".freeze, "bundler/shared_helpers.rb".freeze, "bundler/similarity_detector.rb".freeze, "bundler/source.rb".freeze, "bundler/source/gemspec.rb".freeze, "bundler/source/git.rb".freeze, "bundler/source/git/git_proxy.rb".freeze, "bundler/source/metadata.rb".freeze, "bundler/source/path.rb".freeze, "bundler/source/path/installer.rb".freeze, "bundler/source/rubygems.rb".freeze, "bundler/source/rubygems/remote.rb".freeze, "bundler/source/rubygems_aggregate.rb".freeze, "bundler/source_list.rb".freeze, "bundler/source_map.rb".freeze, "bundler/spec_set.rb".freeze, "bundler/stub_specification.rb".freeze, "bundler/ui.rb".freeze, "bundler/ui/rg_proxy.rb".freeze, "bundler/ui/shell.rb".freeze, "bundler/ui/silent.rb".freeze, "bundler/uri_credentials_filter.rb".freeze, "bundler/uri_normalizer.rb".freeze, "bundler/vendor/connection_pool/lib/connection_pool.rb".freeze, "bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb".freeze, "bundler/vendor/connection_pool/lib/connection_pool/version.rb".freeze, "bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb".freeze, "bundler/vendor/fileutils/lib/fileutils.rb".freeze, "bundler/vendor/net-http-persistent/lib/net/http/persistent.rb".freeze, "bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb".freeze, "bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb".freeze, "bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/assignment.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/package.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/strategy.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/term.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/version.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/version_range.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb".freeze, "bundler/vendor/pub_grub/lib/pub_grub/version_union.rb".freeze, "bundler/vendor/securerandom/lib/securerandom.rb".freeze, "bundler/vendor/thor/lib/thor.rb".freeze, "bundler/vendor/thor/lib/thor/actions.rb".freeze, "bundler/vendor/thor/lib/thor/actions/create_file.rb".freeze, "bundler/vendor/thor/lib/thor/actions/create_link.rb".freeze, "bundler/vendor/thor/lib/thor/actions/directory.rb".freeze, "bundler/vendor/thor/lib/thor/actions/empty_directory.rb".freeze, "bundler/vendor/thor/lib/thor/actions/file_manipulation.rb".freeze, "bundler/vendor/thor/lib/thor/actions/inject_into_file.rb".freeze, "bundler/vendor/thor/lib/thor/base.rb".freeze, "bundler/vendor/thor/lib/thor/command.rb".freeze, "bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb".freeze, "bundler/vendor/thor/lib/thor/error.rb".freeze, "bundler/vendor/thor/lib/thor/group.rb".freeze, "bundler/vendor/thor/lib/thor/invocation.rb".freeze, "bundler/vendor/thor/lib/thor/line_editor.rb".freeze, "bundler/vendor/thor/lib/thor/line_editor/basic.rb".freeze, "bundler/vendor/thor/lib/thor/line_editor/readline.rb".freeze, "bundler/vendor/thor/lib/thor/nested_context.rb".freeze, "bundler/vendor/thor/lib/thor/parser.rb".freeze, "bundler/vendor/thor/lib/thor/parser/argument.rb".freeze, "bundler/vendor/thor/lib/thor/parser/arguments.rb".freeze, "bundler/vendor/thor/lib/thor/parser/option.rb".freeze, "bundler/vendor/thor/lib/thor/parser/options.rb".freeze, "bundler/vendor/thor/lib/thor/rake_compat.rb".freeze, "bundler/vendor/thor/lib/thor/runner.rb".freeze, "bundler/vendor/thor/lib/thor/shell.rb".freeze, "bundler/vendor/thor/lib/thor/shell/basic.rb".freeze, "bundler/vendor/thor/lib/thor/shell/color.rb".freeze, "bundler/vendor/thor/lib/thor/shell/column_printer.rb".freeze, "bundler/vendor/thor/lib/thor/shell/html.rb".freeze, "bundler/vendor/thor/lib/thor/shell/table_printer.rb".freeze, "bundler/vendor/thor/lib/thor/shell/terminal.rb".freeze, "bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb".freeze, "bundler/vendor/thor/lib/thor/util.rb".freeze, "bundler/vendor/thor/lib/thor/version.rb".freeze, "bundler/vendor/tsort/lib/tsort.rb".freeze, "bundler/vendor/uri/lib/uri.rb".freeze, "bundler/vendor/uri/lib/uri/common.rb".freeze, "bundler/vendor/uri/lib/uri/file.rb".freeze, "bundler/vendor/uri/lib/uri/ftp.rb".freeze, "bundler/vendor/uri/lib/uri/generic.rb".freeze, "bundler/vendor/uri/lib/uri/http.rb".freeze, "bundler/vendor/uri/lib/uri/https.rb".freeze, "bundler/vendor/uri/lib/uri/ldap.rb".freeze, "bundler/vendor/uri/lib/uri/ldaps.rb".freeze, "bundler/vendor/uri/lib/uri/mailto.rb".freeze, "bundler/vendor/uri/lib/uri/rfc2396_parser.rb".freeze, "bundler/vendor/uri/lib/uri/rfc3986_parser.rb".freeze, "bundler/vendor/uri/lib/uri/version.rb".freeze, "bundler/vendor/uri/lib/uri/ws.rb".freeze, "bundler/vendor/uri/lib/uri/wss.rb".freeze, "bundler/vendored_fileutils.rb".freeze, "bundler/vendored_net_http.rb".freeze, "bundler/vendored_persistent.rb".freeze, "bundler/vendored_pub_grub.rb".freeze, "bundler/vendored_securerandom.rb".freeze, "bundler/vendored_thor.rb".freeze, "bundler/vendored_timeout.rb".freeze, "bundler/vendored_tsort.rb".freeze, "bundler/vendored_uri.rb".freeze, "bundler/version.rb".freeze, "bundler/vlad.rb".freeze, "bundler/worker.rb".freeze, "bundler/yaml_serializer.rb".freeze, "exe/bundle".freeze, "exe/bundler".freeze]
  s.homepage = "https://bundler.io".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 3.1.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "The best way to manage your application's dependencies".freeze
end
PK)J[��2L??-share/gems/specifications/rake-13.2.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rake 13.2.1 ruby lib

Gem::Specification.new do |s|
  s.name = "rake".freeze
  s.version = "13.2.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/ruby/rake/issues", "changelog_uri" => "https://github.com/ruby/rake/blob/v13.2.1/History.rdoc", "documentation_uri" => "https://ruby.github.io/rake", "source_code_uri" => "https://github.com/ruby/rake/tree/v13.2.1" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Hiroshi SHIBATA".freeze, "Eric Hodel".freeze, "Jim Weirich".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-05-14"
  s.description = "Rake is a Make-like program implemented in Ruby. Tasks and dependencies are\nspecified in standard Ruby syntax.\nRake has the following features:\n  * Rakefiles (rake's version of Makefiles) are completely defined in standard Ruby syntax.\n    No XML files to edit. No quirky Makefile syntax to worry about (is that a tab or a space?)\n  * Users can specify tasks with prerequisites.\n  * Rake supports rule patterns to synthesize implicit tasks.\n  * Flexible FileLists that act like arrays but know about manipulating file names and paths.\n  * Supports parallel execution of tasks.\n".freeze
  s.email = ["hsbt@ruby-lang.org".freeze, "drbrain@segment7.net".freeze, "".freeze]
  s.executables = ["rake".freeze]
  s.files = ["exe/rake".freeze]
  s.homepage = "https://github.com/ruby/rake".freeze
  s.licenses = ["MIT".freeze]
  s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Rake is a Make-like program implemented in Ruby".freeze

  s.installed_by_version = "3.6.7".freeze
end
PK)J[\]�’�,share/gems/specifications/json-2.9.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: json 2.9.1 ruby lib
# stub: ext/json/extconf.rbext/json/generator/extconf.rbext/json/parser/extconf.rb

Gem::Specification.new do |s|
  s.name = "json".freeze
  s.version = "2.9.1".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/ruby/json/issues", "changelog_uri" => "https://github.com/ruby/json/blob/master/CHANGES.md", "documentation_uri" => "https://ruby.github.io/json/doc/index.html", "homepage_uri" => "https://ruby.github.io/json", "source_code_uri" => "https://github.com/ruby/json", "wiki_uri" => "https://github.com/ruby/json/wiki" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Florian Frank".freeze]
  s.date = "2025-05-14"
  s.description = "This is a JSON implementation as a Ruby extension in C.".freeze
  s.email = "flori@ping.de".freeze
  s.extensions = ["ext/json/extconf.rb".freeze, "ext/json/generator/extconf.rb".freeze, "ext/json/parser/extconf.rb".freeze]
  s.extra_rdoc_files = ["README.md".freeze]
  s.files = ["README.md".freeze, "ext/json/extconf.rb".freeze, "ext/json/generator/extconf.rb".freeze, "ext/json/parser/extconf.rb".freeze, "json.rb".freeze, "json/add/bigdecimal.rb".freeze, "json/add/complex.rb".freeze, "json/add/core.rb".freeze, "json/add/date.rb".freeze, "json/add/date_time.rb".freeze, "json/add/exception.rb".freeze, "json/add/ostruct.rb".freeze, "json/add/range.rb".freeze, "json/add/rational.rb".freeze, "json/add/regexp.rb".freeze, "json/add/set.rb".freeze, "json/add/struct.rb".freeze, "json/add/symbol.rb".freeze, "json/add/time.rb".freeze, "json/common.rb".freeze, "json/ext.rb".freeze, "json/ext/generator/state.rb".freeze, "json/generic_object.rb".freeze, "json/version.rb".freeze]
  s.homepage = "https://ruby.github.io/json".freeze
  s.licenses = ["Ruby".freeze]
  s.rdoc_options = ["--title".freeze, "JSON implementation for Ruby".freeze, "--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "JSON Implementation for Ruby".freeze
end
PK)J[;
����2share/gems/specifications/bigdecimal-3.1.8.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: bigdecimal 3.1.8 ruby lib
# stub: ext/bigdecimal/extconf.rb

Gem::Specification.new do |s|
  s.name = "bigdecimal".freeze
  s.version = "3.1.8".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/bigdecimal/blob/master/CHANGES.md" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Kenta Murata".freeze, "Zachary Scott".freeze, "Shigeo Kobayashi".freeze]
  s.date = "2025-05-14"
  s.description = "This library provides arbitrary-precision decimal floating-point number class.".freeze
  s.email = ["mrkn@mrkn.jp".freeze]
  s.extensions = ["ext/bigdecimal/extconf.rb".freeze]
  s.files = ["ext/bigdecimal/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/bigdecimal".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Arbitrary-precision decimal floating-point number library.".freeze

  s.installed_by_version = "3.6.7".freeze
end
PK)J[MW�L��+share/gems/specifications/csv-3.3.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: csv 3.3.2 ruby lib

Gem::Specification.new do |s|
  s.name = "csv".freeze
  s.version = "3.3.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["James Edward Gray II".freeze, "Kouhei Sutou".freeze]
  s.date = "2025-05-14"
  s.description = "The CSV library provides a complete interface to CSV files and data. It offers tools to enable you to read and write to and from Strings or IO objects, as needed.".freeze
  s.email = [nil, "kou@cozmixng.org".freeze]
  s.extra_rdoc_files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "doc/csv/recipes/filtering.rdoc".freeze, "doc/csv/recipes/generating.rdoc".freeze, "doc/csv/recipes/parsing.rdoc".freeze, "doc/csv/recipes/recipes.rdoc".freeze]
  s.files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "doc/csv/recipes/filtering.rdoc".freeze, "doc/csv/recipes/generating.rdoc".freeze, "doc/csv/recipes/parsing.rdoc".freeze, "doc/csv/recipes/recipes.rdoc".freeze]
  s.homepage = "https://github.com/ruby/csv".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.4.20".freeze
  s.summary = "CSV Reading and Writing".freeze

  s.installed_by_version = "3.6.7".freeze
end
PK)J[0i���
�
-share/gems/specifications/psych-5.2.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: psych 5.2.2 ruby lib
# stub: ext/psych/extconf.rb

Gem::Specification.new do |s|
  s.name = "psych".freeze
  s.version = "5.2.2".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/psych/releases", "msys2_mingw_dependencies" => "libyaml" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Aaron Patterson".freeze, "SHIBATA Hiroshi".freeze, "Charles Oliver Nutter".freeze]
  s.date = "2025-05-14"
  s.description = "Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]\nfor its YAML parsing and emitting capabilities. In addition to wrapping libyaml,\nPsych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format.\n".freeze
  s.email = ["aaron@tenderlovemaking.com".freeze, "hsbt@ruby-lang.org".freeze, "headius@headius.com".freeze]
  s.extensions = ["ext/psych/extconf.rb".freeze]
  s.extra_rdoc_files = ["README.md".freeze]
  s.files = ["README.md".freeze, "ext/psych/extconf.rb".freeze, "psych.rb".freeze, "psych.so".freeze, "psych/class_loader.rb".freeze, "psych/coder.rb".freeze, "psych/core_ext.rb".freeze, "psych/exception.rb".freeze, "psych/handler.rb".freeze, "psych/handlers/document_stream.rb".freeze, "psych/handlers/recorder.rb".freeze, "psych/json/ruby_events.rb".freeze, "psych/json/stream.rb".freeze, "psych/json/tree_builder.rb".freeze, "psych/json/yaml_events.rb".freeze, "psych/nodes.rb".freeze, "psych/nodes/alias.rb".freeze, "psych/nodes/document.rb".freeze, "psych/nodes/mapping.rb".freeze, "psych/nodes/node.rb".freeze, "psych/nodes/scalar.rb".freeze, "psych/nodes/sequence.rb".freeze, "psych/nodes/stream.rb".freeze, "psych/omap.rb".freeze, "psych/parser.rb".freeze, "psych/scalar_scanner.rb".freeze, "psych/set.rb".freeze, "psych/stream.rb".freeze, "psych/streaming.rb".freeze, "psych/syntax_error.rb".freeze, "psych/tree_builder.rb".freeze, "psych/versions.rb".freeze, "psych/visitors.rb".freeze, "psych/visitors/depth_first.rb".freeze, "psych/visitors/emitter.rb".freeze, "psych/visitors/json_tree.rb".freeze, "psych/visitors/to_ruby.rb".freeze, "psych/visitors/visitor.rb".freeze, "psych/visitors/yaml_tree.rb".freeze, "psych/y.rb".freeze]
  s.homepage = "https://github.com/ruby/psych".freeze
  s.licenses = ["MIT".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.6.7".freeze
  s.summary = "Psych is a YAML parser and emitter".freeze

  s.specification_version = 4

  s.add_runtime_dependency(%q<stringio>.freeze, [">= 0".freeze])
  s.add_runtime_dependency(%q<date>.freeze, [">= 0".freeze])
end
PK)J[B�qR  ,share/gems/specifications/rack-3.0.8.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rack 3.0.8 ruby lib

Gem::Specification.new do |s|
  s.name = "rack".freeze
  s.version = "3.0.8".freeze

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/rack/rack/issues", "changelog_uri" => "https://github.com/rack/rack/blob/main/CHANGELOG.md", "documentation_uri" => "https://rubydoc.info/github/rack/rack", "source_code_uri" => "https://github.com/rack/rack" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Leah Neukirchen".freeze]
  s.date = "2023-06-14"
  s.description = "Rack provides a minimal, modular and adaptable interface for developing\nweb applications in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, it unifies and distills the API for web\nservers, web frameworks, and software in between (the so-called\nmiddleware) into a single method call.\n".freeze
  s.email = "leah@vuxu.org".freeze
  s.extra_rdoc_files = ["README.md".freeze, "CHANGELOG.md".freeze, "CONTRIBUTING.md".freeze]
  s.files = ["CHANGELOG.md".freeze, "CONTRIBUTING.md".freeze, "README.md".freeze]
  s.homepage = "https://github.com/rack/rack".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.4.7".freeze
  s.summary = "A modular Ruby webserver interface.".freeze

  s.installed_by_version = "3.6.2".freeze

  s.specification_version = 4

  s.add_development_dependency(%q<minitest>.freeze, ["~> 5.0".freeze])
  s.add_development_dependency(%q<minitest-global_expectations>.freeze, [">= 0".freeze])
  s.add_development_dependency(%q<bundler>.freeze, [">= 0".freeze])
  s.add_development_dependency(%q<rake>.freeze, [">= 0".freeze])
end
PK)J[�L���7share/gems/gems/io-console-0.8.0/lib/io/console/size.rbnu�[���# frozen_string_literal: false
# fallback to console window size
def IO.default_console_size
  [
    ENV["LINES"].to_i.nonzero? || 25,
    ENV["COLUMNS"].to_i.nonzero? || 80,
  ]
end

begin
  require 'io/console'
rescue LoadError
  class << IO
    alias console_size default_console_size
  end
else
  # returns console window size
  def IO.console_size
    console.winsize
  rescue NoMethodError
    default_console_size
  end
end
PK)J[�+��'share/gems/gems/drb-2.2.1/lib/drb/gw.rbnu�[���# frozen_string_literal: false
require_relative 'drb'
require 'monitor'

module DRb

  # Gateway id conversion forms a gateway between different DRb protocols or
  # networks.
  #
  # The gateway needs to install this id conversion and create servers for
  # each of the protocols or networks it will be a gateway between.  It then
  # needs to create a server that attaches to each of these networks.  For
  # example:
  #
  #   require 'drb/drb'
  #   require 'drb/unix'
  #   require 'drb/gw'
  #
  #   DRb.install_id_conv DRb::GWIdConv.new
  #   gw = DRb::GW.new
  #   s1 = DRb::DRbServer.new 'drbunix:/path/to/gateway', gw
  #   s2 = DRb::DRbServer.new 'druby://example:10000', gw
  #
  #   s1.thread.join
  #   s2.thread.join
  #
  # Each client must register services with the gateway, for example:
  #
  #   DRb.start_service 'drbunix:', nil # an anonymous server
  #   gw = DRbObject.new nil, 'drbunix:/path/to/gateway'
  #   gw[:unix] = some_service
  #   DRb.thread.join

  class GWIdConv < DRbIdConv
    def to_obj(ref) # :nodoc:
      if Array === ref && ref[0] == :DRbObject
        return DRbObject.new_with(ref[1], ref[2])
      end
      super(ref)
    end
  end

  # The GW provides a synchronized store for participants in the gateway to
  # communicate.

  class GW
    include MonitorMixin

    # Creates a new GW

    def initialize
      super()
      @hash = {}
    end

    # Retrieves +key+ from the GW

    def [](key)
      synchronize do
        @hash[key]
      end
    end

    # Stores value +v+ at +key+ in the GW

    def []=(key, v)
      synchronize do
        @hash[key] = v
      end
    end
  end

  class DRbObject # :nodoc:
    def self._load(s)
      uri, ref = Marshal.load(s)
      if DRb.uri == uri
        return ref ? DRb.to_obj(ref) : DRb.front
      end

      self.new_with(DRb.uri, [:DRbObject, uri, ref])
    end

    def _dump(lv)
      if DRb.uri == @uri
        if Array === @ref && @ref[0] == :DRbObject
          Marshal.dump([@ref[1], @ref[2]])
        else
          Marshal.dump([@uri, @ref]) # ??
        end
      else
        Marshal.dump([DRb.uri, [:DRbObject, @uri, @ref]])
      end
    end
  end
end

=begin
DRb.install_id_conv(DRb::GWIdConv.new)

front = DRb::GW.new

s1 = DRb::DRbServer.new('drbunix:/tmp/gw_b_a', front)
s2 = DRb::DRbServer.new('drbunix:/tmp/gw_b_c', front)

s1.thread.join
s2.thread.join
=end

=begin
# foo.rb

require 'drb/drb'

class Foo
  include DRbUndumped
  def initialize(name, peer=nil)
    @name = name
    @peer = peer
  end

  def ping(obj)
    puts "#{@name}: ping: #{obj.inspect}"
    @peer.ping(self) if @peer
  end
end
=end

=begin
# gw_a.rb
require 'drb/unix'
require 'foo'

obj = Foo.new('a')
DRb.start_service("drbunix:/tmp/gw_a", obj)

robj = DRbObject.new_with_uri('drbunix:/tmp/gw_b_a')
robj[:a] = obj

DRb.thread.join
=end

=begin
# gw_c.rb
require 'drb/unix'
require 'foo'

foo = Foo.new('c', nil)

DRb.start_service("drbunix:/tmp/gw_c", nil)

robj = DRbObject.new_with_uri("drbunix:/tmp/gw_b_c")

puts "c->b"
a = robj[:a]
sleep 2

a.ping(foo)

DRb.thread.join
=end

PK)J[Ic�)share/gems/gems/drb-2.2.1/lib/drb/unix.rbnu�[���# frozen_string_literal: false
require 'socket'
require_relative 'drb'
require 'tmpdir'

raise(LoadError, "UNIXServer is required") unless defined?(UNIXServer)

module DRb

  # Implements DRb over a UNIX socket
  #
  # DRb UNIX socket URIs look like <code>drbunix:<path>?<option></code>.  The
  # option is optional.

  class DRbUNIXSocket < DRbTCPSocket
    # :stopdoc:
    def self.parse_uri(uri)
      if /\Adrbunix:(.*?)(\?(.*))?\z/ =~ uri
        filename = $1
        option = $3
        [filename, option]
      else
        raise(DRbBadScheme, uri) unless uri.start_with?('drbunix:')
        raise(DRbBadURI, 'can\'t parse uri:' + uri)
      end
    end

    def self.open(uri, config)
      filename, = parse_uri(uri)
      soc = UNIXSocket.open(filename)
      self.new(uri, soc, config)
    end

    def self.open_server(uri, config)
      filename, = parse_uri(uri)
      if filename.size == 0
        soc = temp_server
        filename = soc.path
        uri = 'drbunix:' + soc.path
      else
        soc = UNIXServer.open(filename)
      end
      owner = config[:UNIXFileOwner]
      group = config[:UNIXFileGroup]
      if owner || group
        require 'etc'
        owner = Etc.getpwnam( owner ).uid  if owner
        group = Etc.getgrnam( group ).gid  if group
        File.chown owner, group, filename
      end
      mode = config[:UNIXFileMode]
      File.chmod(mode, filename) if mode

      self.new(uri, soc, config, true)
    end

    def self.uri_option(uri, config)
      filename, option = parse_uri(uri)
      return "drbunix:#{filename}", option
    end

    def initialize(uri, soc, config={}, server_mode = false)
      super(uri, soc, config)
      set_sockopt(@socket)
      @server_mode = server_mode
      @acl = nil
    end

    # import from tempfile.rb
    Max_try = 10
    private
    def self.temp_server
      tmpdir = Dir::tmpdir
      n = 0
      while true
        begin
          tmpname = sprintf('%s/druby%d.%d', tmpdir, $$, n)
          lock = tmpname + '.lock'
          unless File.exist?(tmpname) or File.exist?(lock)
            Dir.mkdir(lock)
            break
          end
        rescue
          raise "cannot generate tempfile '%s'" % tmpname if n >= Max_try
          #sleep(1)
        end
        n += 1
      end
      soc = UNIXServer.new(tmpname)
      Dir.rmdir(lock)
      soc
    end

    public
    def close
      return unless @socket
      shutdown # DRbProtocol#shutdown
      path = @socket.path if @server_mode
      @socket.close
      File.unlink(path) if @server_mode
      @socket = nil
      close_shutdown_pipe
    end

    def accept
      s = accept_or_shutdown
      return nil unless s
      self.class.new(nil, s, @config)
    end

    def set_sockopt(soc)
      # no-op for now
    end
  end

  DRbProtocol.add_protocol(DRbUNIXSocket)
  # :startdoc:
end
PK)J[D[���0share/gems/gems/drb-2.2.1/lib/drb/timeridconv.rbnu�[���# frozen_string_literal: false
require_relative 'drb'
require 'monitor'

module DRb

  # Timer id conversion keeps objects alive for a certain amount of time after
  # their last access.  The default time period is 600 seconds and can be
  # changed upon initialization.
  #
  # To use TimerIdConv:
  #
  #  DRb.install_id_conv TimerIdConv.new 60 # one minute

  class TimerIdConv < DRbIdConv
    class TimerHolder2 # :nodoc:
      include MonitorMixin

      class InvalidIndexError < RuntimeError; end

      def initialize(keeping=600)
        super()
        @sentinel = Object.new
        @gc = {}
        @renew = {}
        @keeping = keeping
        @expires = nil
      end

      def add(obj)
        synchronize do
          rotate
          key = obj.__id__
          @renew[key] = obj
          invoke_keeper
          return key
        end
      end

      def fetch(key)
        synchronize do
          rotate
          obj = peek(key)
          raise InvalidIndexError if obj == @sentinel
          @renew[key] = obj # KeepIt
          return obj
        end
      end

      private
      def peek(key)
        return @renew.fetch(key) { @gc.fetch(key, @sentinel) }
      end

      def invoke_keeper
        return if @expires
        @expires = Time.now + @keeping
        on_gc
      end

      def on_gc
        return unless Thread.main.alive?
        return if @expires.nil?
        Thread.new { rotate } if @expires < Time.now
        ObjectSpace.define_finalizer(Object.new) {on_gc}
      end

      def rotate
        synchronize do
          if @expires &.< Time.now
            @gc = @renew      # GCed
            @renew = {}
            @expires = @gc.empty? ? nil : Time.now + @keeping
          end
        end
      end
    end

    # Creates a new TimerIdConv which will hold objects for +keeping+ seconds.
    def initialize(keeping=600)
      @holder = TimerHolder2.new(keeping)
    end

    def to_obj(ref) # :nodoc:
      return super if ref.nil?
      @holder.fetch(ref)
    rescue TimerHolder2::InvalidIndexError
      raise "invalid reference"
    end

    def to_id(obj) # :nodoc:
      return @holder.add(obj)
    end
  end
end

# DRb.install_id_conv(TimerIdConv.new)
PK)J[��,�}}/share/gems/gems/drb-2.2.1/lib/drb/weakidconv.rbnu�[���# frozen_string_literal: false
require_relative 'drb'
require 'monitor'

module DRb

  # To use WeakIdConv:
  #
  #  DRb.start_service(nil, nil, {:idconv => DRb::WeakIdConv.new})

  class WeakIdConv < DRbIdConv
    class WeakSet
      include MonitorMixin
      def initialize
        super()
        @immutable = {}
        @map = ObjectSpace::WeakMap.new
      end

      def add(obj)
        synchronize do
          begin
            @map[obj] = self
          rescue ArgumentError
            @immutable[obj.__id__] = obj
          end
          return obj.__id__
        end
      end

      def fetch(ref)
        synchronize do
          @immutable.fetch(ref) {
            @map.each { |key, _|
              return key if key.__id__ == ref
            }
            raise RangeError.new("invalid reference")
          }
        end
      end
    end

    def initialize()
      super()
      @weak_set = WeakSet.new
    end

    def to_obj(ref) # :nodoc:
      return super if ref.nil?
      @weak_set.fetch(ref)
    end

    def to_id(obj) # :nodoc:
      return @weak_set.add(obj)
    end
  end
end

# DRb.install_id_conv(WeakIdConv.new)
PK)J[oS�)77-share/gems/gems/drb-2.2.1/lib/drb/extservm.rbnu�[���# frozen_string_literal: false
=begin
 external service manager
        Copyright (c) 2000 Masatoshi SEKI
=end

require_relative 'drb'
require 'monitor'

module DRb
  class ExtServManager
    include DRbUndumped
    include MonitorMixin

    @@command = {}

    def self.command
      @@command
    end

    def self.command=(cmd)
      @@command = cmd
    end

    def initialize
      super()
      @cond = new_cond
      @servers = {}
      @waiting = []
      @queue = Thread::Queue.new
      @thread = invoke_thread
      @uri = nil
    end
    attr_accessor :uri

    def service(name)
      synchronize do
        while true
          server = @servers[name]
          return server if server && server.alive? # server may be `false'
          invoke_service(name)
          @cond.wait
        end
      end
    end

    def register(name, ro)
      synchronize do
        @servers[name] = ro
        @cond.signal
      end
      self
    end
    alias regist register

    def unregister(name)
      synchronize do
        @servers.delete(name)
      end
    end
    alias unregist unregister

    private
    def invoke_thread
      Thread.new do
        while name = @queue.pop
          invoke_service_command(name, @@command[name])
        end
      end
    end

    def invoke_service(name)
      @queue.push(name)
    end

    def invoke_service_command(name, command)
      raise "invalid command. name: #{name}" unless command
      synchronize do
        return if @servers.include?(name)
        @servers[name] = false
      end
      uri = @uri || DRb.uri
      if command.respond_to? :to_ary
        command = command.to_ary + [uri, name]
        pid = spawn(*command)
      else
        pid = spawn("#{command} #{uri} #{name}")
      end
      th = Process.detach(pid)
      th[:drb_service] = name
      th
    end
  end
end
PK)J[:5��HH,share/gems/gems/drb-2.2.1/lib/drb/extserv.rbnu�[���# frozen_string_literal: false
=begin
 external service
        Copyright (c) 2000,2002 Masatoshi SEKI
=end

require_relative 'drb'
require 'monitor'

module DRb
  class ExtServ
    include MonitorMixin
    include DRbUndumped

    def initialize(there, name, server=nil)
      super()
      @server = server || DRb::primary_server
      @name = name
      ro = DRbObject.new(nil, there)
      synchronize do
        @invoker = ro.register(name, DRbObject.new(self, @server.uri))
      end
    end
    attr_reader :server

    def front
      DRbObject.new(nil, @server.uri)
    end

    def stop_service
      synchronize do
        @invoker.unregister(@name)
        server = @server
        @server = nil
        server.stop_service
        true
      end
    end

    def alive?
      @server ? @server.alive? : false
    end
  end
end
PK)J[��4'share/gems/gems/drb-2.2.1/lib/drb/eq.rbnu�[���# frozen_string_literal: false
module DRb
  class DRbObject # :nodoc:
    def ==(other)
      return false unless DRbObject === other
     (@ref == other.__drbref) && (@uri == other.__drburi)
    end

    def hash
      [@uri, @ref].hash
    end

    alias eql? ==
  end
end
PK)J[Nw3�##,share/gems/gems/drb-2.2.1/lib/drb/version.rbnu�[���module DRb
  VERSION = "2.2.1"
end
PK)J[ы>�qq(share/gems/gems/drb-2.2.1/lib/drb/acl.rbnu�[���# frozen_string_literal: false
# Copyright (c) 2000,2002,2003 Masatoshi SEKI
#
# acl.rb is copyrighted free software by Masatoshi SEKI.
# You can redistribute it and/or modify it under the same terms as Ruby.

require 'ipaddr'

##
# Simple Access Control Lists.
#
# Access control lists are composed of "allow" and "deny" halves to control
# access.  Use "all" or "*" to match any address.  To match a specific address
# use any address or address mask that IPAddr can understand.
#
# Example:
#
#   list = %w[
#     deny all
#     allow 192.168.1.1
#     allow ::ffff:192.168.1.2
#     allow 192.168.1.3
#   ]
#
#   # From Socket#peeraddr, see also ACL#allow_socket?
#   addr = ["AF_INET", 10, "lc630", "192.168.1.3"]
#
#   acl = ACL.new
#   p acl.allow_addr?(addr) # => true
#
#   acl = ACL.new(list, ACL::DENY_ALLOW)
#   p acl.allow_addr?(addr) # => true

class ACL

  ##
  # The current version of ACL

  VERSION=["2.0.0"]

  ##
  # An entry in an ACL

  class ACLEntry

    ##
    # Creates a new entry using +str+.
    #
    # +str+ may be "*" or "all" to match any address, an IP address string
    # to match a specific address, an IP address mask per IPAddr, or one
    # containing "*" to match part of an IPv4 address.
    #
    # IPAddr::InvalidPrefixError may be raised when an IP network
    # address with an invalid netmask/prefix is given.

    def initialize(str)
      if str == '*' or str == 'all'
        @pat = [:all]
      elsif str.include?('*')
        @pat = [:name, dot_pat(str)]
      else
        begin
          @pat = [:ip, IPAddr.new(str)]
        rescue IPAddr::InvalidPrefixError
          # In this case, `str` shouldn't be a host name pattern
          # because it contains a slash.
          raise
        rescue ArgumentError
          @pat = [:name, dot_pat(str)]
        end
      end
    end

    private

    ##
    # Creates a regular expression to match IPv4 addresses

    def dot_pat_str(str)
      list = str.split('.').collect { |s|
        (s == '*') ? '.+' : s
      }
      list.join("\\.")
    end

    private

    ##
    # Creates a Regexp to match an address.

    def dot_pat(str)
      /\A#{dot_pat_str(str)}\z/
    end

    public

    ##
    # Matches +addr+ against this entry.

    def match(addr)
      case @pat[0]
      when :all
        true
      when :ip
        begin
          ipaddr = IPAddr.new(addr[3])
          ipaddr = ipaddr.ipv4_mapped if @pat[1].ipv6? && ipaddr.ipv4?
        rescue ArgumentError
          return false
        end
        (@pat[1].include?(ipaddr)) ? true : false
      when :name
        (@pat[1] =~ addr[2]) ? true : false
      else
        false
      end
    end
  end

  ##
  # A list of ACLEntry objects.  Used to implement the allow and deny halves
  # of an ACL

  class ACLList

    ##
    # Creates an empty ACLList

    def initialize
      @list = []
    end

    public

    ##
    # Matches +addr+ against each ACLEntry in this list.

    def match(addr)
      @list.each do |e|
        return true if e.match(addr)
      end
      false
    end

    public

    ##
    # Adds +str+ as an ACLEntry in this list

    def add(str)
      @list.push(ACLEntry.new(str))
    end

  end

  ##
  # Default to deny

  DENY_ALLOW = 0

  ##
  # Default to allow

  ALLOW_DENY = 1

  ##
  # Creates a new ACL from +list+ with an evaluation +order+ of DENY_ALLOW or
  # ALLOW_DENY.
  #
  # An ACL +list+ is an Array of "allow" or "deny" and an address or address
  # mask or "all" or "*" to match any address:
  #
  #   %w[
  #     deny all
  #     allow 192.0.2.2
  #     allow 192.0.2.128/26
  #   ]

  def initialize(list=nil, order = DENY_ALLOW)
    @order = order
    @deny = ACLList.new
    @allow = ACLList.new
    install_list(list) if list
  end

  public

  ##
  # Allow connections from Socket +soc+?

  def allow_socket?(soc)
    allow_addr?(soc.peeraddr)
  end

  public

  ##
  # Allow connections from addrinfo +addr+?  It must be formatted like
  # Socket#peeraddr:
  #
  #   ["AF_INET", 10, "lc630", "192.0.2.1"]

  def allow_addr?(addr)
    case @order
    when DENY_ALLOW
      return true if @allow.match(addr)
      return false if @deny.match(addr)
      return true
    when ALLOW_DENY
      return false if @deny.match(addr)
      return true if @allow.match(addr)
      return false
    else
      false
    end
  end

  public

  ##
  # Adds +list+ of ACL entries to this ACL.

  def install_list(list)
    i = 0
    while i < list.size
      permission, domain = list.slice(i,2)
      case permission.downcase
      when 'allow'
        @allow.add(domain)
      when 'deny'
        @deny.add(domain)
      else
        raise "Invalid ACL entry #{list}"
      end
      i += 2
    end
  end

end
PK)J[��_�/�/(share/gems/gems/drb-2.2.1/lib/drb/ssl.rbnu�[���# frozen_string_literal: false
require 'socket'
require 'openssl'
require_relative 'drb'
require 'singleton'

module DRb

  # The protocol for DRb over an SSL socket
  #
  # The URI for a DRb socket over SSL is:
  # <code>drbssl://<host>:<port>?<option></code>.  The option is optional
  class DRbSSLSocket < DRbTCPSocket

    # SSLConfig handles the needed SSL information for establishing a
    # DRbSSLSocket connection, including generating the X509 / RSA pair.
    #
    # An instance of this config can be passed to DRbSSLSocket.new,
    # DRbSSLSocket.open and DRbSSLSocket.open_server
    #
    # See DRb::DRbSSLSocket::SSLConfig.new for more details
    class SSLConfig

      # Default values for a SSLConfig instance.
      #
      # See DRb::DRbSSLSocket::SSLConfig.new for more details
      DEFAULT = {
        :SSLCertificate       => nil,
        :SSLPrivateKey        => nil,
        :SSLClientCA          => nil,
        :SSLCACertificatePath => nil,
        :SSLCACertificateFile => nil,
        :SSLTmpDhCallback     => nil,
        :SSLVerifyMode        => ::OpenSSL::SSL::VERIFY_NONE,
        :SSLVerifyDepth       => nil,
        :SSLVerifyCallback    => nil,   # custom verification
        :SSLCertificateStore  => nil,
        # Must specify if you use auto generated certificate.
        :SSLCertName          => nil,   # e.g. [["CN","fqdn.example.com"]]
        :SSLCertComment       => "Generated by Ruby/OpenSSL"
      }

      # Create a new DRb::DRbSSLSocket::SSLConfig instance
      #
      # The DRb::DRbSSLSocket will take either a +config+ Hash or an instance
      # of SSLConfig, and will setup the certificate for its session for the
      # configuration. If want it to generate a generic certificate, the bare
      # minimum is to provide the :SSLCertName
      #
      # === Config options
      #
      # From +config+ Hash:
      #
      # :SSLCertificate ::
      #   An instance of OpenSSL::X509::Certificate.  If this is not provided,
      #   then a generic X509 is generated, with a correspond :SSLPrivateKey
      #
      # :SSLPrivateKey ::
      #   A private key instance, like OpenSSL::PKey::RSA.  This key must be
      #   the key that signed the :SSLCertificate
      #
      # :SSLClientCA ::
      #   An OpenSSL::X509::Certificate, or Array of certificates that will
      #   used as ClientCAs in the SSL Context
      #
      # :SSLCACertificatePath ::
      #   A path to the directory of CA certificates.  The certificates must
      #   be in PEM format.
      #
      # :SSLCACertificateFile ::
      #   A path to a CA certificate file, in PEM format.
      #
      # :SSLTmpDhCallback ::
      #   A DH callback. See OpenSSL::SSL::SSLContext.tmp_dh_callback
      #
      # :SSLMinVersion ::
      #   This is the minimum SSL version to allow.  See
      #   OpenSSL::SSL::SSLContext#min_version=.
      #
      # :SSLMaxVersion ::
      #   This is the maximum SSL version to allow.  See
      #   OpenSSL::SSL::SSLContext#max_version=.
      #
      # :SSLVerifyMode ::
      #   This is the SSL verification mode.  See OpenSSL::SSL::VERIFY_* for
      #   available modes.  The default is OpenSSL::SSL::VERIFY_NONE
      #
      # :SSLVerifyDepth ::
      #   Number of CA certificates to walk, when verifying a certificate
      #   chain.
      #
      # :SSLVerifyCallback ::
      #   A callback to be used for additional verification.  See
      #   OpenSSL::SSL::SSLContext.verify_callback
      #
      # :SSLCertificateStore ::
      #   A OpenSSL::X509::Store used for verification of certificates
      #
      # :SSLCertName ::
      #   Issuer name for the certificate.  This is required when generating
      #   the certificate (if :SSLCertificate and :SSLPrivateKey were not
      #   given).  The value of this is to be an Array of pairs:
      #
      #     [["C", "Raleigh"], ["ST","North Carolina"],
      #      ["CN","fqdn.example.com"]]
      #
      #   See also OpenSSL::X509::Name
      #
      # :SSLCertComment ::
      #   A comment to be used for generating the certificate.  The default is
      #   "Generated by Ruby/OpenSSL"
      #
      #
      # === Example
      #
      # These values can be added after the fact, like a Hash.
      #
      #   require 'drb/ssl'
      #   c = DRb::DRbSSLSocket::SSLConfig.new {}
      #   c[:SSLCertificate] =
      #     OpenSSL::X509::Certificate.new(File.read('mycert.crt'))
      #   c[:SSLPrivateKey] = OpenSSL::PKey::RSA.new(File.read('mycert.key'))
      #   c[:SSLVerifyMode] = OpenSSL::SSL::VERIFY_PEER
      #   c[:SSLCACertificatePath] = "/etc/ssl/certs/"
      #   c.setup_certificate
      #
      # or
      #
      #   require 'drb/ssl'
      #   c = DRb::DRbSSLSocket::SSLConfig.new({
      #           :SSLCertName => [["CN" => DRb::DRbSSLSocket.getservername]]
      #           })
      #   c.setup_certificate
      #
      def initialize(config)
        @config  = config
        @cert    = config[:SSLCertificate]
        @pkey    = config[:SSLPrivateKey]
        @ssl_ctx = nil
      end

      # A convenience method to access the values like a Hash
      def [](key);
        @config[key] || DEFAULT[key]
      end

      # Connect to IO +tcp+, with context of the current certificate
      # configuration
      def connect(tcp)
        ssl = ::OpenSSL::SSL::SSLSocket.new(tcp, @ssl_ctx)
        ssl.sync = true
        ssl.connect
        ssl
      end

      # Accept connection to IO +tcp+, with context of the current certificate
      # configuration
      def accept(tcp)
        ssl = OpenSSL::SSL::SSLSocket.new(tcp, @ssl_ctx)
        ssl.sync = true
        ssl.accept
        ssl
      end

      # Ensures that :SSLCertificate and :SSLPrivateKey have been provided
      # or that a new certificate is generated with the other parameters
      # provided.
      def setup_certificate
        if @cert && @pkey
          return
        end

        rsa = OpenSSL::PKey::RSA.new(2048){|p, n|
          next unless self[:verbose]
          case p
          when 0; $stderr.putc "."  # BN_generate_prime
          when 1; $stderr.putc "+"  # BN_generate_prime
          when 2; $stderr.putc "*"  # searching good prime,
                                    # n = #of try,
                                    # but also data from BN_generate_prime
          when 3; $stderr.putc "\n" # found good prime, n==0 - p, n==1 - q,
                                    # but also data from BN_generate_prime
          else;   $stderr.putc "*"  # BN_generate_prime
          end
        }

        cert = OpenSSL::X509::Certificate.new
        cert.version = 3
        cert.serial = 0
        name = OpenSSL::X509::Name.new(self[:SSLCertName])
        cert.subject = name
        cert.issuer = name
        cert.not_before = Time.now
        cert.not_after = Time.now + (365*24*60*60)
        cert.public_key = rsa.public_key

        ef = OpenSSL::X509::ExtensionFactory.new(nil,cert)
        cert.extensions = [
          ef.create_extension("basicConstraints","CA:FALSE"),
          ef.create_extension("subjectKeyIdentifier", "hash") ]
        ef.issuer_certificate = cert
        cert.add_extension(ef.create_extension("authorityKeyIdentifier",
                                               "keyid:always,issuer:always"))
        if comment = self[:SSLCertComment]
          cert.add_extension(ef.create_extension("nsComment", comment))
        end
        cert.sign(rsa, "SHA256")

        @cert = cert
        @pkey = rsa
      end

      # Establish the OpenSSL::SSL::SSLContext with the configuration
      # parameters provided.
      def setup_ssl_context
        ctx = ::OpenSSL::SSL::SSLContext.new
        ctx.cert            = @cert
        ctx.key             = @pkey
        ctx.min_version     = self[:SSLMinVersion]
        ctx.max_version     = self[:SSLMaxVersion]
        ctx.client_ca       = self[:SSLClientCA]
        ctx.ca_path         = self[:SSLCACertificatePath]
        ctx.ca_file         = self[:SSLCACertificateFile]
        ctx.tmp_dh_callback = self[:SSLTmpDhCallback]
        ctx.verify_mode     = self[:SSLVerifyMode]
        ctx.verify_depth    = self[:SSLVerifyDepth]
        ctx.verify_callback = self[:SSLVerifyCallback]
        ctx.cert_store      = self[:SSLCertificateStore]
        @ssl_ctx = ctx
      end
    end

    # Parse the dRuby +uri+ for an SSL connection.
    #
    # Expects drbssl://...
    #
    # Raises DRbBadScheme or DRbBadURI if +uri+ is not matching or malformed
    def self.parse_uri(uri) # :nodoc:
      if /\Adrbssl:\/\/(.*?):(\d+)(\?(.*))?\z/ =~ uri
        host = $1
        port = $2.to_i
        option = $4
        [host, port, option]
      else
        raise(DRbBadScheme, uri) unless uri.start_with?('drbssl:')
        raise(DRbBadURI, 'can\'t parse uri:' + uri)
      end
    end

    # Return an DRb::DRbSSLSocket instance as a client-side connection,
    # with the SSL connected.  This is called from DRb::start_service or while
    # connecting to a remote object:
    #
    #   DRb.start_service 'drbssl://localhost:0', front, config
    #
    # +uri+ is the URI we are connected to,
    # <code>'drbssl://localhost:0'</code> above, +config+ is our
    # configuration.  Either a Hash or DRb::DRbSSLSocket::SSLConfig
    def self.open(uri, config)
      host, port, = parse_uri(uri)
      soc = TCPSocket.open(host, port)
      ssl_conf = SSLConfig::new(config)
      ssl_conf.setup_ssl_context
      ssl = ssl_conf.connect(soc)
      self.new(uri, ssl, ssl_conf, true)
    end

    # Returns a DRb::DRbSSLSocket instance as a server-side connection, with
    # the SSL connected.  This is called from DRb::start_service or while
    # connecting to a remote object:
    #
    #   DRb.start_service 'drbssl://localhost:0', front, config
    #
    # +uri+ is the URI we are connected to,
    # <code>'drbssl://localhost:0'</code> above, +config+ is our
    # configuration.  Either a Hash or DRb::DRbSSLSocket::SSLConfig
    def self.open_server(uri, config)
      uri = 'drbssl://:0' unless uri
      host, port, = parse_uri(uri)
      if host.size == 0
        host = getservername
        soc = open_server_inaddr_any(host, port)
      else
        soc = TCPServer.open(host, port)
      end
      port = soc.addr[1] if port == 0
      @uri = "drbssl://#{host}:#{port}"

      ssl_conf = SSLConfig.new(config)
      ssl_conf.setup_certificate
      ssl_conf.setup_ssl_context
      self.new(@uri, soc, ssl_conf, false)
    end

    # This is a convenience method to parse +uri+ and separate out any
    # additional options appended in the +uri+.
    #
    # Returns an option-less uri and the option => [uri,option]
    #
    # The +config+ is completely unused, so passing nil is sufficient.
    def self.uri_option(uri, config) # :nodoc:
      host, port, option = parse_uri(uri)
      return "drbssl://#{host}:#{port}", option
    end

    # Create a DRb::DRbSSLSocket instance.
    #
    # +uri+ is the URI we are connected to.
    # +soc+ is the tcp socket we are bound to.
    # +config+ is our configuration. Either a Hash or SSLConfig
    # +is_established+ is a boolean of whether +soc+ is currently established
    #
    # This is called automatically based on the DRb protocol.
    def initialize(uri, soc, config, is_established)
      @ssl = is_established ? soc : nil
      super(uri, soc.to_io, config)
    end

    # Returns the SSL stream
    def stream; @ssl; end # :nodoc:

    # Closes the SSL stream before closing the dRuby connection.
    def close # :nodoc:
      if @ssl
        @ssl.close
        @ssl = nil
      end
      super
    end

    def accept # :nodoc:
      begin
      while true
        soc = accept_or_shutdown
        return nil unless soc
        break if (@acl ? @acl.allow_socket?(soc) : true)
        soc.close
      end
      begin
        ssl = @config.accept(soc)
      rescue Exception
        soc.close
        raise
      end
      self.class.new(uri, ssl, @config, true)
      rescue OpenSSL::SSL::SSLError
        warn("#{$!.message} (#{$!.class})", uplevel: 0) if @config[:verbose]
        retry
      end
    end
  end

  DRbProtocol.add_protocol(DRbSSLSocket)
end
PK)J[�K��-share/gems/gems/drb-2.2.1/lib/drb/observer.rbnu�[���# frozen_string_literal: false
require 'observer'

module DRb
  # The Observable module extended to DRb.  See Observable for details.
  module DRbObservable
    include Observable

    # Notifies observers of a change in state.  See also
    # Observable#notify_observers
    def notify_observers(*arg)
      if defined? @observer_state and @observer_state
        if defined? @observer_peers
          @observer_peers.each do |observer, method|
            begin
              observer.__send__(method, *arg)
            rescue
              delete_observer(observer)
            end
          end
        end
        @observer_state = false
      end
    end
  end
end
PK)J[*Y)		1share/gems/gems/drb-2.2.1/lib/drb/invokemethod.rbnu�[���# frozen_string_literal: false
# for ruby-1.8.0

module DRb # :nodoc: all
  class DRbServer
    module InvokeMethod18Mixin
      def block_yield(x)
        if x.size == 1 && x[0].class == Array
          x[0] = DRbArray.new(x[0])
        end
        @block.call(*x)
      end

      def perform_with_block
        @obj.__send__(@msg_id, *@argv) do |*x|
          jump_error = nil
          begin
            block_value = block_yield(x)
          rescue LocalJumpError
            jump_error = $!
          end
          if jump_error
            case jump_error.reason
            when :break
              break(jump_error.exit_value)
            else
              raise jump_error
            end
          end
          block_value
        end
      end
    end
  end
end
PK)J[)��f����(share/gems/gems/drb-2.2.1/lib/drb/drb.rbnu�[���# frozen_string_literal: false
#
# = drb/drb.rb
#
# Distributed Ruby: _dRuby_
#
# Copyright (c) 1999-2003 Masatoshi SEKI.  You can redistribute it and/or
# modify it under the same terms as Ruby.
#
# Author:: Masatoshi SEKI
#
# Documentation:: William Webber (william@williamwebber.com)
#
# == Overview
#
# dRuby is a distributed object system for Ruby.  It allows an object in one
# Ruby process to invoke methods on an object in another Ruby process on the
# same or a different machine.
#
# The Ruby standard library contains the core classes of the dRuby package.
# However, the full package also includes access control lists and the
# Rinda tuple-space distributed task management system, as well as a
# large number of samples.  The full dRuby package can be downloaded from
# the dRuby home page (see *References*).
#
# For an introduction and examples of usage see the documentation to the
# DRb module.
#
# == References
#
# [http://www2a.biglobe.ne.jp/~seki/ruby/druby.html]
#    The dRuby home page, in Japanese.  Contains the full dRuby package
#    and links to other Japanese-language sources.
#
# [http://www2a.biglobe.ne.jp/~seki/ruby/druby.en.html]
#    The English version of the dRuby home page.
#
# [http://pragprog.com/book/sidruby/the-druby-book]
#    The dRuby Book: Distributed and Parallel Computing with Ruby
#    by Masatoshi Seki and Makoto Inoue
#
# [http://www.ruby-doc.org/docs/ProgrammingRuby/html/ospace.html]
#   The chapter from *Programming* *Ruby* by Dave Thomas and Andy Hunt
#   which discusses dRuby.
#
# [http://www.clio.ne.jp/home/web-i31s/Flotuard/Ruby/PRC2K_seki/dRuby.en.html]
#   Translation of presentation on Ruby by Masatoshi Seki.

require 'socket'
require 'io/wait'
require 'monitor'
require_relative 'eq'
require_relative 'version'

#
# == Overview
#
# dRuby is a distributed object system for Ruby.  It is written in
# pure Ruby and uses its own protocol.  No add-in services are needed
# beyond those provided by the Ruby runtime, such as TCP sockets.  It
# does not rely on or interoperate with other distributed object
# systems such as CORBA, RMI, or .NET.
#
# dRuby allows methods to be called in one Ruby process upon a Ruby
# object located in another Ruby process, even on another machine.
# References to objects can be passed between processes.  Method
# arguments and return values are dumped and loaded in marshalled
# format.  All of this is done transparently to both the caller of the
# remote method and the object that it is called upon.
#
# An object in a remote process is locally represented by a
# DRb::DRbObject instance.  This acts as a sort of proxy for the
# remote object.  Methods called upon this DRbObject instance are
# forwarded to its remote object.  This is arranged dynamically at run
# time.  There are no statically declared interfaces for remote
# objects, such as CORBA's IDL.
#
# dRuby calls made into a process are handled by a DRb::DRbServer
# instance within that process.  This reconstitutes the method call,
# invokes it upon the specified local object, and returns the value to
# the remote caller.  Any object can receive calls over dRuby.  There
# is no need to implement a special interface, or mixin special
# functionality.  Nor, in the general case, does an object need to
# explicitly register itself with a DRbServer in order to receive
# dRuby calls.
#
# One process wishing to make dRuby calls upon another process must
# somehow obtain an initial reference to an object in the remote
# process by some means other than as the return value of a remote
# method call, as there is initially no remote object reference it can
# invoke a method upon.  This is done by attaching to the server by
# URI.  Each DRbServer binds itself to a URI such as
# 'druby://example.com:8787'.  A DRbServer can have an object attached
# to it that acts as the server's *front* *object*.  A DRbObject can
# be explicitly created from the server's URI.  This DRbObject's
# remote object will be the server's front object.  This front object
# can then return references to other Ruby objects in the DRbServer's
# process.
#
# Method calls made over dRuby behave largely the same as normal Ruby
# method calls made within a process.  Method calls with blocks are
# supported, as are raising exceptions.  In addition to a method's
# standard errors, a dRuby call may also raise one of the
# dRuby-specific errors, all of which are subclasses of DRb::DRbError.
#
# Any type of object can be passed as an argument to a dRuby call or
# returned as its return value.  By default, such objects are dumped
# or marshalled at the local end, then loaded or unmarshalled at the
# remote end.  The remote end therefore receives a copy of the local
# object, not a distributed reference to it; methods invoked upon this
# copy are executed entirely in the remote process, not passed on to
# the local original.  This has semantics similar to pass-by-value.
#
# However, if an object cannot be marshalled, a dRuby reference to it
# is passed or returned instead.  This will turn up at the remote end
# as a DRbObject instance.  All methods invoked upon this remote proxy
# are forwarded to the local object, as described in the discussion of
# DRbObjects.  This has semantics similar to the normal Ruby
# pass-by-reference.
#
# The easiest way to signal that we want an otherwise marshallable
# object to be passed or returned as a DRbObject reference, rather
# than marshalled and sent as a copy, is to include the
# DRb::DRbUndumped mixin module.
#
# dRuby supports calling remote methods with blocks.  As blocks (or
# rather the Proc objects that represent them) are not marshallable,
# the block executes in the local, not the remote, context.  Each
# value yielded to the block is passed from the remote object to the
# local block, then the value returned by each block invocation is
# passed back to the remote execution context to be collected, before
# the collected values are finally returned to the local context as
# the return value of the method invocation.
#
# == Examples of usage
#
# For more dRuby samples, see the +samples+ directory in the full
# dRuby distribution.
#
# === dRuby in client/server mode
#
# This illustrates setting up a simple client-server drb
# system.  Run the server and client code in different terminals,
# starting the server code first.
#
# ==== Server code
#
#   require 'drb/drb'
#
#   # The URI for the server to connect to
#   URI="druby://localhost:8787"
#
#   class TimeServer
#
#     def get_current_time
#       return Time.now
#     end
#
#   end
#
#   # The object that handles requests on the server
#   FRONT_OBJECT=TimeServer.new
#
#   DRb.start_service(URI, FRONT_OBJECT)
#   # Wait for the drb server thread to finish before exiting.
#   DRb.thread.join
#
# ==== Client code
#
#   require 'drb/drb'
#
#   # The URI to connect to
#   SERVER_URI="druby://localhost:8787"
#
#   # Start a local DRbServer to handle callbacks.
#   #
#   # Not necessary for this small example, but will be required
#   # as soon as we pass a non-marshallable object as an argument
#   # to a dRuby call.
#   #
#   # Note: this must be called at least once per process to take any effect.
#   # This is particularly important if your application forks.
#   DRb.start_service
#
#   timeserver = DRbObject.new_with_uri(SERVER_URI)
#   puts timeserver.get_current_time
#
# === Remote objects under dRuby
#
# This example illustrates returning a reference to an object
# from a dRuby call.  The Logger instances live in the server
# process.  References to them are returned to the client process,
# where methods can be invoked upon them.  These methods are
# executed in the server process.
#
# ==== Server code
#
#   require 'drb/drb'
#
#   URI="druby://localhost:8787"
#
#   class Logger
#
#       # Make dRuby send Logger instances as dRuby references,
#       # not copies.
#       include DRb::DRbUndumped
#
#       def initialize(n, fname)
#           @name = n
#           @filename = fname
#       end
#
#       def log(message)
#           File.open(@filename, "a") do |f|
#               f.puts("#{Time.now}: #{@name}: #{message}")
#           end
#       end
#
#   end
#
#   # We have a central object for creating and retrieving loggers.
#   # This retains a local reference to all loggers created.  This
#   # is so an existing logger can be looked up by name, but also
#   # to prevent loggers from being garbage collected.  A dRuby
#   # reference to an object is not sufficient to prevent it being
#   # garbage collected!
#   class LoggerFactory
#
#       def initialize(bdir)
#           @basedir = bdir
#           @loggers = {}
#       end
#
#       def get_logger(name)
#           if !@loggers.has_key? name
#               # make the filename safe, then declare it to be so
#               fname = name.gsub(/[.\/\\\:]/, "_")
#               @loggers[name] = Logger.new(name, @basedir + "/" + fname)
#           end
#           return @loggers[name]
#       end
#
#   end
#
#   FRONT_OBJECT=LoggerFactory.new("/tmp/dlog")
#
#   DRb.start_service(URI, FRONT_OBJECT)
#   DRb.thread.join
#
# ==== Client code
#
#   require 'drb/drb'
#
#   SERVER_URI="druby://localhost:8787"
#
#   DRb.start_service
#
#   log_service=DRbObject.new_with_uri(SERVER_URI)
#
#   ["loga", "logb", "logc"].each do |logname|
#
#       logger=log_service.get_logger(logname)
#
#       logger.log("Hello, world!")
#       logger.log("Goodbye, world!")
#       logger.log("=== EOT ===")
#
#   end
#
# == Security
#
# As with all network services, security needs to be considered when
# using dRuby.  By allowing external access to a Ruby object, you are
# not only allowing outside clients to call the methods you have
# defined for that object, but by default to execute arbitrary Ruby
# code on your server.  Consider the following:
#
#    # !!! UNSAFE CODE !!!
#    ro = DRbObject::new_with_uri("druby://your.server.com:8989")
#    class << ro
#      undef :instance_eval  # force call to be passed to remote object
#    end
#    ro.instance_eval("`rm -rf *`")
#
# The dangers posed by instance_eval and friends are such that a
# DRbServer should only be used when clients are trusted.
#
# A DRbServer can be configured with an access control list to
# selectively allow or deny access from specified IP addresses.  The
# main druby distribution provides the ACL class for this purpose.  In
# general, this mechanism should only be used alongside, rather than
# as a replacement for, a good firewall.
#
# == dRuby internals
#
# dRuby is implemented using three main components: a remote method
# call marshaller/unmarshaller; a transport protocol; and an
# ID-to-object mapper.  The latter two can be directly, and the first
# indirectly, replaced, in order to provide different behaviour and
# capabilities.
#
# Marshalling and unmarshalling of remote method calls is performed by
# a DRb::DRbMessage instance.  This uses the Marshal module to dump
# the method call before sending it over the transport layer, then
# reconstitute it at the other end.  There is normally no need to
# replace this component, and no direct way is provided to do so.
# However, it is possible to implement an alternative marshalling
# scheme as part of an implementation of the transport layer.
#
# The transport layer is responsible for opening client and server
# network connections and forwarding dRuby request across them.
# Normally, it uses DRb::DRbMessage internally to manage marshalling
# and unmarshalling.  The transport layer is managed by
# DRb::DRbProtocol.  Multiple protocols can be installed in
# DRbProtocol at the one time; selection between them is determined by
# the scheme of a dRuby URI.  The default transport protocol is
# selected by the scheme 'druby:', and implemented by
# DRb::DRbTCPSocket.  This uses plain TCP/IP sockets for
# communication.  An alternative protocol, using UNIX domain sockets,
# is implemented by DRb::DRbUNIXSocket in the file drb/unix.rb, and
# selected by the scheme 'drbunix:'.  A sample implementation over
# HTTP can be found in the samples accompanying the main dRuby
# distribution.
#
# The ID-to-object mapping component maps dRuby object ids to the
# objects they refer to, and vice versa.  The implementation to use
# can be specified as part of a DRb::DRbServer's configuration.  The
# default implementation is provided by DRb::DRbIdConv.  It uses an
# object's ObjectSpace id as its dRuby id.  This means that the dRuby
# reference to that object only remains meaningful for the lifetime of
# the object's process and the lifetime of the object within that
# process.  A modified implementation is provided by DRb::TimerIdConv
# in the file drb/timeridconv.rb.  This implementation retains a local
# reference to all objects exported over dRuby for a configurable
# period of time (defaulting to ten minutes), to prevent them being
# garbage-collected within this time.  Another sample implementation
# is provided in sample/name.rb in the main dRuby distribution.  This
# allows objects to specify their own id or "name".  A dRuby reference
# can be made persistent across processes by having each process
# register an object using the same dRuby name.
#
module DRb

  # Superclass of all errors raised in the DRb module.
  class DRbError < RuntimeError; end

  # Error raised when an error occurs on the underlying communication
  # protocol.
  class DRbConnError < DRbError; end

  # Class responsible for converting between an object and its id.
  #
  # This, the default implementation, uses an object's local ObjectSpace
  # __id__ as its id.  This means that an object's identification over
  # drb remains valid only while that object instance remains alive
  # within the server runtime.
  #
  # For alternative mechanisms, see DRb::TimerIdConv in drb/timeridconv.rb
  # and DRbNameIdConv in sample/name.rb in the full drb distribution.
  class DRbIdConv

    # Convert an object reference id to an object.
    #
    # This implementation looks up the reference id in the local object
    # space and returns the object it refers to.
    def to_obj(ref)
      ObjectSpace._id2ref(ref)
    end

    # Convert an object into a reference id.
    #
    # This implementation returns the object's __id__ in the local
    # object space.
    def to_id(obj)
      case obj
      when Object
        obj.nil? ? nil : obj.__id__
      when BasicObject
        obj.__id__
      end
    end
  end

  # Mixin module making an object undumpable or unmarshallable.
  #
  # If an object which includes this module is returned by method
  # called over drb, then the object remains in the server space
  # and a reference to the object is returned, rather than the
  # object being marshalled and moved into the client space.
  module DRbUndumped
    def _dump(dummy)  # :nodoc:
      raise TypeError, 'can\'t dump'
    end
  end

  # Error raised by the DRb module when an attempt is made to refer to
  # the context's current drb server but the context does not have one.
  # See #current_server.
  class DRbServerNotFound < DRbError; end

  # Error raised by the DRbProtocol module when it cannot find any
  # protocol implementation support the scheme specified in a URI.
  class DRbBadURI < DRbError; end

  # Error raised by a dRuby protocol when it doesn't support the
  # scheme specified in a URI.  See DRb::DRbProtocol.
  class DRbBadScheme < DRbError; end

  # An exception wrapping a DRb::DRbUnknown object
  class DRbUnknownError < DRbError

    # Create a new DRbUnknownError for the DRb::DRbUnknown object +unknown+
    def initialize(unknown)
      @unknown = unknown
      super(unknown.name)
    end

    # Get the wrapped DRb::DRbUnknown object.
    attr_reader :unknown

    def self._load(s)  # :nodoc:
      Marshal::load(s)
    end

    def _dump(lv) # :nodoc:
      Marshal::dump(@unknown)
    end
  end

  # An exception wrapping an error object
  class DRbRemoteError < DRbError

    # Creates a new remote error that wraps the Exception +error+
    def initialize(error)
      @reason = error.class.to_s
      super("#{error.message} (#{error.class})")
      set_backtrace(error.backtrace)
    end

    # the class of the error, as a string.
    attr_reader :reason
  end

  # Class wrapping a marshalled object whose type is unknown locally.
  #
  # If an object is returned by a method invoked over drb, but the
  # class of the object is unknown in the client namespace, or
  # the object is a constant unknown in the client namespace, then
  # the still-marshalled object is returned wrapped in a DRbUnknown instance.
  #
  # If this object is passed as an argument to a method invoked over
  # drb, then the wrapped object is passed instead.
  #
  # The class or constant name of the object can be read from the
  # +name+ attribute.  The marshalled object is held in the +buf+
  # attribute.
  class DRbUnknown

    # Create a new DRbUnknown object.
    #
    # +buf+ is a string containing a marshalled object that could not
    # be unmarshalled.  +err+ is the error message that was raised
    # when the unmarshalling failed.  It is used to determine the
    # name of the unmarshalled object.
    def initialize(err, buf)
      case err.to_s
      when /uninitialized constant (\S+)/
        @name = $1
      when /undefined class\/module (\S+)/
        @name = $1
      else
        @name = nil
      end
      @buf = buf
    end

    # The name of the unknown thing.
    #
    # Class name for unknown objects; variable name for unknown
    # constants.
    attr_reader :name

    # Buffer contained the marshalled, unknown object.
    attr_reader :buf

    def self._load(s) # :nodoc:
      begin
        Marshal::load(s)
      rescue NameError, ArgumentError
        DRbUnknown.new($!, s)
      end
    end

    def _dump(lv) # :nodoc:
      @buf
    end

    # Attempt to load the wrapped marshalled object again.
    #
    # If the class of the object is now known locally, the object
    # will be unmarshalled and returned.  Otherwise, a new
    # but identical DRbUnknown object will be returned.
    def reload
      self.class._load(@buf)
    end

    # Create a DRbUnknownError exception containing this object.
    def exception
      DRbUnknownError.new(self)
    end
  end

  # An Array wrapper that can be sent to another server via DRb.
  #
  # All entries in the array will be dumped or be references that point to
  # the local server.

  class DRbArray

    # Creates a new DRbArray that either dumps or wraps all the items in the
    # Array +ary+ so they can be loaded by a remote DRb server.

    def initialize(ary)
      @ary = ary.collect { |obj|
        if obj.kind_of? DRbUndumped
          DRbObject.new(obj)
        else
          begin
            Marshal.dump(obj)
            obj
          rescue
            DRbObject.new(obj)
          end
        end
      }
    end

    def self._load(s) # :nodoc:
      Marshal::load(s)
    end

    def _dump(lv) # :nodoc:
      Marshal.dump(@ary)
    end
  end

  # Handler for sending and receiving drb messages.
  #
  # This takes care of the low-level marshalling and unmarshalling
  # of drb requests and responses sent over the wire between server
  # and client.  This relieves the implementor of a new drb
  # protocol layer with having to deal with these details.
  #
  # The user does not have to directly deal with this object in
  # normal use.
  class DRbMessage
    def initialize(config) # :nodoc:
      @load_limit = config[:load_limit]
      @argc_limit = config[:argc_limit]
    end

    def dump(obj, error=false)  # :nodoc:
      case obj
      when DRbUndumped
        obj = make_proxy(obj, error)
      when Object
        # nothing
      else
        obj = make_proxy(obj, error)
      end
      begin
        str = Marshal::dump(obj)
      rescue
        str = Marshal::dump(make_proxy(obj, error))
      end
      [str.size].pack('N') + str
    end

    def load(soc)  # :nodoc:
      begin
        sz = soc.read(4)        # sizeof (N)
      rescue
        raise(DRbConnError, $!.message, $!.backtrace)
      end
      raise(DRbConnError, 'connection closed') if sz.nil?
      raise(DRbConnError, 'premature header') if sz.size < 4
      sz = sz.unpack('N')[0]
      raise(DRbConnError, "too large packet #{sz}") if @load_limit < sz
      begin
        str = soc.read(sz)
      rescue
        raise(DRbConnError, $!.message, $!.backtrace)
      end
      raise(DRbConnError, 'connection closed') if str.nil?
      raise(DRbConnError, 'premature marshal format(can\'t read)') if str.size < sz
      DRb.mutex.synchronize do
        begin
          Marshal::load(str)
        rescue NameError, ArgumentError
          DRbUnknown.new($!, str)
        end
      end
    end

    def send_request(stream, ref, msg_id, arg, b) # :nodoc:
      ary = []
      ary.push(dump(ref.__drbref))
      ary.push(dump(msg_id.id2name))
      ary.push(dump(arg.length))
      arg.each do |e|
        ary.push(dump(e))
      end
      ary.push(dump(b))
      stream.write(ary.join(''))
    rescue
      raise(DRbConnError, $!.message, $!.backtrace)
    end

    def recv_request(stream) # :nodoc:
      ref = load(stream)
      ro = DRb.to_obj(ref)
      msg = load(stream)
      argc = load(stream)
      raise(DRbConnError, "too many arguments") if @argc_limit < argc
      argv = Array.new(argc, nil)
      argc.times do |n|
        argv[n] = load(stream)
      end
      block = load(stream)
      return ro, msg, argv, block
    end

    def send_reply(stream, succ, result)  # :nodoc:
      stream.write(dump(succ) + dump(result, !succ))
    rescue
      raise(DRbConnError, $!.message, $!.backtrace)
    end

    def recv_reply(stream)  # :nodoc:
      succ = load(stream)
      result = load(stream)
      [succ, result]
    end

    private
    def make_proxy(obj, error=false) # :nodoc:
      if error
        DRbRemoteError.new(obj)
      else
        DRbObject.new(obj)
      end
    end
  end

  # Module managing the underlying network protocol(s) used by drb.
  #
  # By default, drb uses the DRbTCPSocket protocol.  Other protocols
  # can be defined.  A protocol must define the following class methods:
  #
  #   [open(uri, config)] Open a client connection to the server at +uri+,
  #                       using configuration +config+.  Return a protocol
  #                       instance for this connection.
  #   [open_server(uri, config)] Open a server listening at +uri+,
  #                              using configuration +config+.  Return a
  #                              protocol instance for this listener.
  #   [uri_option(uri, config)] Take a URI, possibly containing an option
  #                             component (e.g. a trailing '?param=val'),
  #                             and return a [uri, option] tuple.
  #
  # All of these methods should raise a DRbBadScheme error if the URI
  # does not identify the protocol they support (e.g. "druby:" for
  # the standard Ruby protocol).  This is how the DRbProtocol module,
  # given a URI, determines which protocol implementation serves that
  # protocol.
  #
  # The protocol instance returned by #open_server must have the
  # following methods:
  #
  # [accept] Accept a new connection to the server.  Returns a protocol
  #          instance capable of communicating with the client.
  # [close] Close the server connection.
  # [uri] Get the URI for this server.
  #
  # The protocol instance returned by #open must have the following methods:
  #
  # [send_request (ref, msg_id, arg, b)]
  #      Send a request to +ref+ with the given message id and arguments.
  #      This is most easily implemented by calling DRbMessage.send_request,
  #      providing a stream that sits on top of the current protocol.
  # [recv_reply]
  #      Receive a reply from the server and return it as a [success-boolean,
  #      reply-value] pair.  This is most easily implemented by calling
  #      DRb.recv_reply, providing a stream that sits on top of the
  #      current protocol.
  # [alive?]
  #      Is this connection still alive?
  # [close]
  #      Close this connection.
  #
  # The protocol instance returned by #open_server().accept() must have
  # the following methods:
  #
  # [recv_request]
  #     Receive a request from the client and return a [object, message,
  #     args, block] tuple.  This is most easily implemented by calling
  #     DRbMessage.recv_request, providing a stream that sits on top of
  #     the current protocol.
  # [send_reply(succ, result)]
  #     Send a reply to the client.  This is most easily implemented
  #     by calling DRbMessage.send_reply, providing a stream that sits
  #     on top of the current protocol.
  # [close]
  #     Close this connection.
  #
  # A new protocol is registered with the DRbProtocol module using
  # the add_protocol method.
  #
  # For examples of other protocols, see DRbUNIXSocket in drb/unix.rb,
  # and HTTP0 in sample/http0.rb and sample/http0serv.rb in the full
  # drb distribution.
  module DRbProtocol

    # Add a new protocol to the DRbProtocol module.
    def add_protocol(prot)
      @protocol.push(prot)
    end
    module_function :add_protocol

    # Open a client connection to +uri+ with the configuration +config+.
    #
    # The DRbProtocol module asks each registered protocol in turn to
    # try to open the URI.  Each protocol signals that it does not handle that
    # URI by raising a DRbBadScheme error.  If no protocol recognises the
    # URI, then a DRbBadURI error is raised.  If a protocol accepts the
    # URI, but an error occurs in opening it, a DRbConnError is raised.
    def open(uri, config, first=true)
      @protocol.each do |prot|
        begin
          return prot.open(uri, config)
        rescue DRbBadScheme
        rescue DRbConnError
          raise($!)
        rescue
          raise(DRbConnError, "#{uri} - #{$!.inspect}")
        end
      end
      if first && (config[:auto_load] != false)
        auto_load(uri)
        return open(uri, config, false)
      end
      raise DRbBadURI, 'can\'t parse uri:' + uri
    end
    module_function :open

    # Open a server listening for connections at +uri+ with
    # configuration +config+.
    #
    # The DRbProtocol module asks each registered protocol in turn to
    # try to open a server at the URI.  Each protocol signals that it does
    # not handle that URI by raising a DRbBadScheme error.  If no protocol
    # recognises the URI, then a DRbBadURI error is raised.  If a protocol
    # accepts the URI, but an error occurs in opening it, the underlying
    # error is passed on to the caller.
    def open_server(uri, config, first=true)
      @protocol.each do |prot|
        begin
          return prot.open_server(uri, config)
        rescue DRbBadScheme
        end
      end
      if first && (config[:auto_load] != false)
        auto_load(uri)
        return open_server(uri, config, false)
      end
      raise DRbBadURI, 'can\'t parse uri:' + uri
    end
    module_function :open_server

    # Parse +uri+ into a [uri, option] pair.
    #
    # The DRbProtocol module asks each registered protocol in turn to
    # try to parse the URI.  Each protocol signals that it does not handle that
    # URI by raising a DRbBadScheme error.  If no protocol recognises the
    # URI, then a DRbBadURI error is raised.
    def uri_option(uri, config, first=true)
      @protocol.each do |prot|
        begin
          uri, opt = prot.uri_option(uri, config)
          # opt = nil if opt == ''
          return uri, opt
        rescue DRbBadScheme
        end
      end
      if first && (config[:auto_load] != false)
        auto_load(uri)
        return uri_option(uri, config, false)
      end
      raise DRbBadURI, 'can\'t parse uri:' + uri
    end
    module_function :uri_option

    def auto_load(uri)  # :nodoc:
      if /\Adrb([a-z0-9]+):/ =~ uri
        require("drb/#{$1}") rescue nil
      end
    end
    module_function :auto_load
  end

  # The default drb protocol which communicates over a TCP socket.
  #
  # The DRb TCP protocol URI looks like:
  # <code>druby://<host>:<port>?<option></code>.  The option is optional.

  class DRbTCPSocket
    # :stopdoc:
    private
    def self.parse_uri(uri)
      if /\Adruby:\/\/(.*?):(\d+)(\?(.*))?\z/ =~ uri
        host = $1
        port = $2.to_i
        option = $4
        [host, port, option]
      else
        raise(DRbBadScheme, uri) unless uri.start_with?('druby:')
        raise(DRbBadURI, 'can\'t parse uri:' + uri)
      end
    end

    public

    # Open a client connection to +uri+ (DRb URI string) using configuration
    # +config+.
    #
    # This can raise DRb::DRbBadScheme or DRb::DRbBadURI if +uri+ is not for a
    # recognized protocol.  See DRb::DRbServer.new for information on built-in
    # URI protocols.
    def self.open(uri, config)
      host, port, = parse_uri(uri)
      soc = TCPSocket.open(host, port)
      self.new(uri, soc, config)
    end

    # Returns the hostname of this server
    def self.getservername
      host = Socket::gethostname
      begin
        Socket::getaddrinfo(host, nil,
                                  Socket::AF_UNSPEC,
                                  Socket::SOCK_STREAM,
                                  0,
                                  Socket::AI_PASSIVE)[0][3]
      rescue
        'localhost'
      end
    end

    # For the families available for +host+, returns a TCPServer on +port+.
    # If +port+ is 0 the first available port is used.  IPv4 servers are
    # preferred over IPv6 servers.
    def self.open_server_inaddr_any(host, port)
      infos = Socket::getaddrinfo(host, nil,
                                  Socket::AF_UNSPEC,
                                  Socket::SOCK_STREAM,
                                  0,
                                  Socket::AI_PASSIVE)
      families = Hash[*infos.collect { |af, *_| af }.uniq.zip([]).flatten]
      return TCPServer.open('0.0.0.0', port) if families.has_key?('AF_INET')
      return TCPServer.open('::', port) if families.has_key?('AF_INET6')
      return TCPServer.open(port)
      # :stopdoc:
    end

    # Open a server listening for connections at +uri+ using
    # configuration +config+.
    def self.open_server(uri, config)
      uri = 'druby://:0' unless uri
      host, port, _ = parse_uri(uri)
      config = {:tcp_original_host => host}.update(config)
      if host.size == 0
        host = getservername
        soc = open_server_inaddr_any(host, port)
      else
        soc = TCPServer.open(host, port)
      end
      port = soc.addr[1] if port == 0
      config[:tcp_port] = port
      uri = "druby://#{host}:#{port}"
      self.new(uri, soc, config)
    end

    # Parse +uri+ into a [uri, option] pair.
    def self.uri_option(uri, config)
      host, port, option = parse_uri(uri)
      return "druby://#{host}:#{port}", option
    end

    # Create a new DRbTCPSocket instance.
    #
    # +uri+ is the URI we are connected to.
    # +soc+ is the tcp socket we are bound to.  +config+ is our
    # configuration.
    def initialize(uri, soc, config={})
      @uri = uri
      @socket = soc
      @config = config
      @acl = config[:tcp_acl]
      @msg = DRbMessage.new(config)
      set_sockopt(@socket)
      @shutdown_pipe_r, @shutdown_pipe_w = IO.pipe
    end

    # Get the URI that we are connected to.
    attr_reader :uri

    # Get the address of our TCP peer (the other end of the socket
    # we are bound to.
    def peeraddr
      @socket.peeraddr
    end

    # Get the socket.
    def stream; @socket; end

    # On the client side, send a request to the server.
    def send_request(ref, msg_id, arg, b)
      @msg.send_request(stream, ref, msg_id, arg, b)
    end

    # On the server side, receive a request from the client.
    def recv_request
      @msg.recv_request(stream)
    end

    # On the server side, send a reply to the client.
    def send_reply(succ, result)
      @msg.send_reply(stream, succ, result)
    end

    # On the client side, receive a reply from the server.
    def recv_reply
      @msg.recv_reply(stream)
    end

    public

    # Close the connection.
    #
    # If this is an instance returned by #open_server, then this stops
    # listening for new connections altogether.  If this is an instance
    # returned by #open or by #accept, then it closes this particular
    # client-server session.
    def close
      shutdown
      if @socket
        @socket.close
        @socket = nil
      end
      close_shutdown_pipe
    end

    def close_shutdown_pipe
      @shutdown_pipe_w.close
      @shutdown_pipe_r.close
    end
    private :close_shutdown_pipe

    # On the server side, for an instance returned by #open_server,
    # accept a client connection and return a new instance to handle
    # the server's side of this client-server session.
    def accept
      while true
        s = accept_or_shutdown
        return nil unless s
        break if (@acl ? @acl.allow_socket?(s) : true)
        s.close
      end
      if @config[:tcp_original_host].to_s.size == 0
        uri = "druby://#{s.addr[3]}:#{@config[:tcp_port]}"
      else
        uri = @uri
      end
      self.class.new(uri, s, @config)
    end

    def accept_or_shutdown
      readables, = IO.select([@socket, @shutdown_pipe_r])
      if readables.include? @shutdown_pipe_r
        return nil
      end
      @socket.accept
    end
    private :accept_or_shutdown

    # Graceful shutdown
    def shutdown
      @shutdown_pipe_w.close
    end

    # Check to see if this connection is alive.
    def alive?
      return false unless @socket
      if @socket.to_io.wait_readable(0)
        close
        return false
      end
      true
    end

    def set_sockopt(soc) # :nodoc:
      soc.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
    rescue IOError, Errno::ECONNRESET, Errno::EINVAL
      # closed/shutdown socket, ignore error
    end
  end

  module DRbProtocol
    @protocol = [DRbTCPSocket] # default
  end

  class DRbURIOption  # :nodoc:  I don't understand the purpose of this class...
    def initialize(option)
      @option = option.to_s
    end
    attr_reader :option
    def to_s; @option; end

    def ==(other)
      return false unless DRbURIOption === other
      @option == other.option
    end

    def hash
      @option.hash
    end

    alias eql? ==
  end

  # Object wrapping a reference to a remote drb object.
  #
  # Method calls on this object are relayed to the remote
  # object that this object is a stub for.
  class DRbObject

    # Unmarshall a marshalled DRbObject.
    #
    # If the referenced object is located within the local server, then
    # the object itself is returned.  Otherwise, a new DRbObject is
    # created to act as a stub for the remote referenced object.
    def self._load(s)
      uri, ref = Marshal.load(s)

      if DRb.here?(uri)
        obj = DRb.to_obj(ref)
        return obj
      end

      self.new_with(uri, ref)
    end

    # Creates a DRb::DRbObject given the reference information to the remote
    # host +uri+ and object +ref+.

    def self.new_with(uri, ref)
      it = self.allocate
      it.instance_variable_set(:@uri, uri)
      it.instance_variable_set(:@ref, ref)
      it
    end

    # Create a new DRbObject from a URI alone.
    def self.new_with_uri(uri)
      self.new(nil, uri)
    end

    # Marshall this object.
    #
    # The URI and ref of the object are marshalled.
    def _dump(lv)
      Marshal.dump([@uri, @ref])
    end

    # Create a new remote object stub.
    #
    # +obj+ is the (local) object we want to create a stub for.  Normally
    # this is +nil+.  +uri+ is the URI of the remote object that this
    # will be a stub for.
    def initialize(obj, uri=nil)
      @uri = nil
      @ref = nil
      case obj
      when Object
        is_nil = obj.nil?
      when BasicObject
        is_nil = false
      end

      if is_nil
        return if uri.nil?
        @uri, option = DRbProtocol.uri_option(uri, DRb.config)
        @ref = DRbURIOption.new(option) unless option.nil?
      else
        @uri = uri ? uri : (DRb.uri rescue nil)
        @ref = obj ? DRb.to_id(obj) : nil
      end
    end

    # Get the URI of the remote object.
    def __drburi
      @uri
    end

    # Get the reference of the object, if local.
    def __drbref
      @ref
    end

    undef :to_s
    undef :to_a if respond_to?(:to_a)

    # Routes respond_to? to the referenced remote object.
    def respond_to?(msg_id, priv=false)
      case msg_id
      when :_dump
        true
      when :marshal_dump
        false
      else
        method_missing(:respond_to?, msg_id, priv)
      end
    end

    # Routes method calls to the referenced remote object.
    ruby2_keywords def method_missing(msg_id, *a, &b)
      if DRb.here?(@uri)
        obj = DRb.to_obj(@ref)
        DRb.current_server.check_insecure_method(obj, msg_id)
        return obj.__send__(msg_id, *a, &b)
      end

      succ, result = self.class.with_friend(@uri) do
        DRbConn.open(@uri) do |conn|
          conn.send_message(self, msg_id, a, b)
        end
      end

      if succ
        return result
      elsif DRbUnknown === result
        raise result
      else
        bt = self.class.prepare_backtrace(@uri, result)
        result.set_backtrace(bt + caller)
        raise result
      end
    end

    # Given the +uri+ of another host executes the block provided.
    def self.with_friend(uri) # :nodoc:
      friend = DRb.fetch_server(uri)
      return yield() unless friend

      save = Thread.current['DRb']
      Thread.current['DRb'] = { 'server' => friend }
      return yield
    ensure
      Thread.current['DRb'] = save if friend
    end

    # Returns a modified backtrace from +result+ with the +uri+ where each call
    # in the backtrace came from.
    def self.prepare_backtrace(uri, result) # :nodoc:
      prefix = "(#{uri}) "
      bt = []
      result.backtrace.each do |x|
        break if /[`']__send__'$/ =~ x
        if /\A\(druby:\/\// =~ x
          bt.push(x)
        else
          bt.push(prefix + x)
        end
      end
      bt
    end

    def pretty_print(q)   # :nodoc:
      q.pp_object(self)
    end

    def pretty_print_cycle(q)   # :nodoc:
      q.object_address_group(self) {
        q.breakable
        q.text '...'
      }
    end
  end

  class ThreadObject
    include MonitorMixin

    def initialize(&blk)
      super()
      @wait_ev = new_cond
      @req_ev = new_cond
      @res_ev = new_cond
      @status = :wait
      @req = nil
      @res = nil
      @thread = Thread.new(self, &blk)
    end

    def alive?
      @thread.alive?
    end

    def kill
      @thread.kill
      @thread.join
    end

    def method_missing(msg, *arg, &blk)
      synchronize do
        @wait_ev.wait_until { @status == :wait }
        @req = [msg] + arg
        @status = :req
        @req_ev.broadcast
        @res_ev.wait_until { @status == :res }
        value = @res
        @req = @res = nil
        @status = :wait
        @wait_ev.broadcast
        return value
      end
    end

    def _execute()
      synchronize do
        @req_ev.wait_until { @status == :req }
        @res = yield(@req)
        @status = :res
        @res_ev.signal
      end
    end
  end

  # Class handling the connection between a DRbObject and the
  # server the real object lives on.
  #
  # This class maintains a pool of connections, to reduce the
  # overhead of starting and closing down connections for each
  # method call.
  #
  # This class is used internally by DRbObject.  The user does
  # not normally need to deal with it directly.
  class DRbConn
    POOL_SIZE = 16  # :nodoc:

    def self.make_pool
      ThreadObject.new do |queue|
        pool = []
        while true
          queue._execute do |message|
            case(message[0])
            when :take then
              remote_uri = message[1]
              conn = nil
              new_pool = []
              pool.each do |c|
                if conn.nil? and c.uri == remote_uri
                  conn = c if c.alive?
                else
                  new_pool.push c
                end
              end
              pool = new_pool
              conn
            when :store then
              conn = message[1]
              pool.unshift(conn)
              pool.pop.close while pool.size > POOL_SIZE
              conn
            else
              nil
            end
          end
        end
      end
    end
    @pool_proxy = nil

    def self.stop_pool
      @pool_proxy&.kill
      @pool_proxy = nil
    end

    def self.open(remote_uri)  # :nodoc:
      begin
        @pool_proxy = make_pool unless @pool_proxy&.alive?

        conn = @pool_proxy.take(remote_uri)
        conn = self.new(remote_uri) unless conn
        succ, result = yield(conn)
        return succ, result

      ensure
        if conn
          if succ
            @pool_proxy.store(conn)
          else
            conn.close
          end
        end
      end
    end

    def initialize(remote_uri)  # :nodoc:
      @uri = remote_uri
      @protocol = DRbProtocol.open(remote_uri, DRb.config)
    end
    attr_reader :uri  # :nodoc:

    def send_message(ref, msg_id, arg, block)  # :nodoc:
      @protocol.send_request(ref, msg_id, arg, block)
      @protocol.recv_reply
    end

    def close  # :nodoc:
      @protocol.close
      @protocol = nil
    end

    def alive?  # :nodoc:
      return false unless @protocol
      @protocol.alive?
    end
  end

  # Class representing a drb server instance.
  #
  # A DRbServer must be running in the local process before any incoming
  # dRuby calls can be accepted, or any local objects can be passed as
  # dRuby references to remote processes, even if those local objects are
  # never actually called remotely. You do not need to start a DRbServer
  # in the local process if you are only making outgoing dRuby calls
  # passing marshalled parameters.
  #
  # Unless multiple servers are being used, the local DRbServer is normally
  # started by calling DRb.start_service.
  class DRbServer
    @@acl = nil
    @@idconv = DRbIdConv.new
    @@secondary_server = nil
    @@argc_limit = 256
    @@load_limit = 0xffffffff
    @@verbose = false

    # Set the default value for the :argc_limit option.
    #
    # See #new().  The initial default value is 256.
    def self.default_argc_limit(argc)
      @@argc_limit = argc
    end

    # Set the default value for the :load_limit option.
    #
    # See #new().  The initial default value is 25 MB.
    def self.default_load_limit(sz)
      @@load_limit = sz
    end

    # Set the default access control list to +acl+.  The default ACL is +nil+.
    #
    # See also DRb::ACL and #new()
    def self.default_acl(acl)
      @@acl = acl
    end

    # Set the default value for the :id_conv option.
    #
    # See #new().  The initial default value is a DRbIdConv instance.
    def self.default_id_conv(idconv)
      @@idconv = idconv
    end

    # Set the default value of the :verbose option.
    #
    # See #new().  The initial default value is false.
    def self.verbose=(on)
      @@verbose = on
    end

    # Get the default value of the :verbose option.
    def self.verbose
      @@verbose
    end

    def self.make_config(hash={})  # :nodoc:
      default_config = {
        :idconv => @@idconv,
        :verbose => @@verbose,
        :tcp_acl => @@acl,
        :load_limit => @@load_limit,
        :argc_limit => @@argc_limit,
      }
      default_config.update(hash)
    end

    # Create a new DRbServer instance.
    #
    # +uri+ is the URI to bind to.  This is normally of the form
    # 'druby://<hostname>:<port>' where <hostname> is a hostname of
    # the local machine.  If nil, then the system's default hostname
    # will be bound to, on a port selected by the system; these value
    # can be retrieved from the +uri+ attribute.  'druby:' specifies
    # the default dRuby transport protocol: another protocol, such
    # as 'drbunix:', can be specified instead.
    #
    # +front+ is the front object for the server, that is, the object
    # to which remote method calls on the server will be passed.  If
    # nil, then the server will not accept remote method calls.
    #
    # If +config_or_acl+ is a hash, it is the configuration to
    # use for this server.  The following options are recognised:
    #
    # :idconv :: an id-to-object conversion object.  This defaults
    #            to an instance of the class DRb::DRbIdConv.
    # :verbose :: if true, all unsuccessful remote calls on objects
    #             in the server will be logged to $stdout. false
    #             by default.
    # :tcp_acl :: the access control list for this server.  See
    #             the ACL class from the main dRuby distribution.
    # :load_limit :: the maximum message size in bytes accepted by
    #                the server.  Defaults to 25 MB (26214400).
    # :argc_limit :: the maximum number of arguments to a remote
    #                method accepted by the server.  Defaults to
    #                256.
    # The default values of these options can be modified on
    # a class-wide basis by the class methods #default_argc_limit,
    # #default_load_limit, #default_acl, #default_id_conv,
    # and #verbose=
    #
    # If +config_or_acl+ is not a hash, but is not nil, it is
    # assumed to be the access control list for this server.
    # See the :tcp_acl option for more details.
    #
    # If no other server is currently set as the primary server,
    # this will become the primary server.
    #
    # The server will immediately start running in its own thread.
    def initialize(uri=nil, front=nil, config_or_acl=nil)
      if Hash === config_or_acl
        config = config_or_acl.dup
      else
        acl = config_or_acl || @@acl
        config = {
          :tcp_acl => acl
        }
      end

      @config = self.class.make_config(config)

      @protocol = DRbProtocol.open_server(uri, @config)
      @uri = @protocol.uri
      @exported_uri = [@uri]

      @front = front
      @idconv = @config[:idconv]

      @grp = ThreadGroup.new
      @thread = run

      DRb.regist_server(self)
    end

    # The URI of this DRbServer.
    attr_reader :uri

    # The main thread of this DRbServer.
    #
    # This is the thread that listens for and accepts connections
    # from clients, not that handles each client's request-response
    # session.
    attr_reader :thread

    # The front object of the DRbServer.
    #
    # This object receives remote method calls made on the server's
    # URI alone, with an object id.
    attr_reader :front

    # The configuration of this DRbServer
    attr_reader :config

    # Set whether to operate in verbose mode.
    #
    # In verbose mode, failed calls are logged to stdout.
    def verbose=(v); @config[:verbose]=v; end

    # Get whether the server is in verbose mode.
    #
    # In verbose mode, failed calls are logged to stdout.
    def verbose; @config[:verbose]; end

    # Is this server alive?
    def alive?
      @thread.alive?
    end

    # Is +uri+ the URI for this server?
    def here?(uri)
      @exported_uri.include?(uri)
    end

    # Stop this server.
    def stop_service
      DRb.remove_server(self)
      if  Thread.current['DRb'] && Thread.current['DRb']['server'] == self
        Thread.current['DRb']['stop_service'] = true
      else
        shutdown
      end
    end

    # Convert a dRuby reference to the local object it refers to.
    def to_obj(ref)
      return front if ref.nil?
      return front[ref.to_s] if DRbURIOption === ref
      @idconv.to_obj(ref)
    end

    # Convert a local object to a dRuby reference.
    def to_id(obj)
      return nil if obj.__id__ == front.__id__
      @idconv.to_id(obj)
    end

    private

    def shutdown
      current = Thread.current
      if @protocol.respond_to? :shutdown
        @protocol.shutdown
      else
        [@thread, *@grp.list].each { |thread|
          thread.kill unless thread == current # xxx: Thread#kill
        }
      end
      @thread.join unless @thread == current
    end

    ##
    # Starts the DRb main loop in a new thread.

    def run
      Thread.start do
        begin
          while main_loop
          end
        ensure
          @protocol.close if @protocol
        end
      end
    end

    # List of insecure methods.
    #
    # These methods are not callable via dRuby.
    INSECURE_METHOD = [
      :__send__
    ]

    # Has a method been included in the list of insecure methods?
    def insecure_method?(msg_id)
      INSECURE_METHOD.include?(msg_id)
    end

    # Coerce an object to a string, providing our own representation if
    # to_s is not defined for the object.
    def any_to_s(obj)
      "#{obj}:#{obj.class}"
    rescue
      Kernel.instance_method(:to_s).bind_call(obj)
    end

    # Check that a method is callable via dRuby.
    #
    # +obj+ is the object we want to invoke the method on. +msg_id+ is the
    # method name, as a Symbol.
    #
    # If the method is an insecure method (see #insecure_method?) a
    # SecurityError is thrown.  If the method is private or undefined,
    # a NameError is thrown.
    def check_insecure_method(obj, msg_id)
      return true if Proc === obj && msg_id == :__drb_yield
      raise(ArgumentError, "#{any_to_s(msg_id)} is not a symbol") unless Symbol == msg_id.class
      raise(SecurityError, "insecure method '#{msg_id}'") if insecure_method?(msg_id)

      case obj
      when Object
        if obj.private_methods.include?(msg_id)
          desc = any_to_s(obj)
          raise NoMethodError, "private method '#{msg_id}' called for #{desc}"
        elsif obj.protected_methods.include?(msg_id)
          desc = any_to_s(obj)
          raise NoMethodError, "protected method '#{msg_id}' called for #{desc}"
        else
          true
        end
      else
        if Kernel.instance_method(:private_methods).bind(obj).call.include?(msg_id)
          desc = any_to_s(obj)
          raise NoMethodError, "private method '#{msg_id}' called for #{desc}"
        elsif Kernel.instance_method(:protected_methods).bind(obj).call.include?(msg_id)
          desc = any_to_s(obj)
          raise NoMethodError, "protected method '#{msg_id}' called for #{desc}"
        else
          true
        end
      end
    end
    public :check_insecure_method

    class InvokeMethod  # :nodoc:
      def initialize(drb_server, client)
        @drb_server = drb_server
        @client = client
      end

      def perform
        begin
          setup_message
        ensure
          @result = nil
          @succ = false
        end

        if @block
          @result = perform_with_block
        else
          @result = perform_without_block
        end
        @succ = true
        case @result
        when Array
          if @msg_id == :to_ary
            @result = DRbArray.new(@result)
          end
        end
        return @succ, @result
      rescue NoMemoryError, SystemExit, SystemStackError, SecurityError
        raise
      rescue Exception
        @result = $!
        return @succ, @result
      end

      private
      def init_with_client
        obj, msg, argv, block = @client.recv_request
        @obj = obj
        @msg_id = msg.intern
        @argv = argv
        @block = block
      end

      def check_insecure_method
        @drb_server.check_insecure_method(@obj, @msg_id)
      end

      def setup_message
        init_with_client
        check_insecure_method
      end

      def perform_without_block
        if Proc === @obj && @msg_id == :__drb_yield
          if @argv.size == 1
            ary = @argv
          else
            ary = [@argv]
          end
          ary.collect(&@obj)[0]
        else
          @obj.__send__(@msg_id, *@argv)
        end
      end

    end

    require_relative 'invokemethod'
    class InvokeMethod
      include InvokeMethod18Mixin
    end

    def error_print(exception)
      exception.backtrace.inject(true) do |first, x|
        if first
          $stderr.puts "#{x}: #{exception} (#{exception.class})"
        else
          $stderr.puts "\tfrom #{x}"
        end
        false
      end
    end

    # The main loop performed by a DRbServer's internal thread.
    #
    # Accepts a connection from a client, and starts up its own
    # thread to handle it.  This thread loops, receiving requests
    # from the client, invoking them on a local object, and
    # returning responses, until the client closes the connection
    # or a local method call fails.
    def main_loop
      client0 = @protocol.accept
      return nil if !client0
      Thread.start(client0) do |client|
        @grp.add Thread.current
        Thread.current['DRb'] = { 'client' => client ,
                                  'server' => self }
        DRb.mutex.synchronize do
          client_uri = client.uri
          @exported_uri << client_uri unless @exported_uri.include?(client_uri)
        end
        _last_invoke_method = nil
        loop do
          begin
            succ = false
            invoke_method = InvokeMethod.new(self, client)
            succ, result = invoke_method.perform
            error_print(result) if !succ && verbose
            unless DRbConnError === result && result.message == 'connection closed'
              client.send_reply(succ, result)
            end
          rescue Exception => e
            error_print(e) if verbose
          ensure
            _last_invoke_method = invoke_method
            client.close unless succ
            if Thread.current['DRb']['stop_service']
              shutdown
              break
            end
            break unless succ
          end
        end
      end
    end
  end

  @primary_server = nil

  # Start a dRuby server locally.
  #
  # The new dRuby server will become the primary server, even
  # if another server is currently the primary server.
  #
  # +uri+ is the URI for the server to bind to.  If nil,
  # the server will bind to random port on the default local host
  # name and use the default dRuby protocol.
  #
  # +front+ is the server's front object.  This may be nil.
  #
  # +config+ is the configuration for the new server.  This may
  # be nil.
  #
  # See DRbServer::new.
  def start_service(uri=nil, front=nil, config=nil)
    @primary_server = DRbServer.new(uri, front, config)
  end
  module_function :start_service

  # The primary local dRuby server.
  #
  # This is the server created by the #start_service call.
  attr_accessor :primary_server
  module_function :primary_server=, :primary_server

  # Get the 'current' server.
  #
  # In the context of execution taking place within the main
  # thread of a dRuby server (typically, as a result of a remote
  # call on the server or one of its objects), the current
  # server is that server.  Otherwise, the current server is
  # the primary server.
  #
  # If the above rule fails to find a server, a DRbServerNotFound
  # error is raised.
  def current_server
    drb = Thread.current['DRb']
    server = (drb && drb['server']) ? drb['server'] : @primary_server
    raise DRbServerNotFound unless server
    return server
  end
  module_function :current_server

  # Stop the local dRuby server.
  #
  # This operates on the primary server.  If there is no primary
  # server currently running, it is a noop.
  def stop_service
    @primary_server.stop_service if @primary_server
    @primary_server = nil
  end
  module_function :stop_service

  # Get the URI defining the local dRuby space.
  #
  # This is the URI of the current server.  See #current_server.
  def uri
    drb = Thread.current['DRb']
    client = (drb && drb['client'])
    if client
      uri = client.uri
      return uri if uri
    end
    current_server.uri
  end
  module_function :uri

  # Is +uri+ the URI for the current local server?
  def here?(uri)
    current_server.here?(uri) rescue false
    # (current_server.uri rescue nil) == uri
  end
  module_function :here?

  # Get the configuration of the current server.
  #
  # If there is no current server, this returns the default configuration.
  # See #current_server and DRbServer::make_config.
  def config
    current_server.config
  rescue
    DRbServer.make_config
  end
  module_function :config

  # Get the front object of the current server.
  #
  # This raises a DRbServerNotFound error if there is no current server.
  # See #current_server.
  def front
    current_server.front
  end
  module_function :front

  # Convert a reference into an object using the current server.
  #
  # This raises a DRbServerNotFound error if there is no current server.
  # See #current_server.
  def to_obj(ref)
    current_server.to_obj(ref)
  end

  # Get a reference id for an object using the current server.
  #
  # This raises a DRbServerNotFound error if there is no current server.
  # See #current_server.
  def to_id(obj)
    current_server.to_id(obj)
  end
  module_function :to_id
  module_function :to_obj

  # Get the thread of the primary server.
  #
  # This returns nil if there is no primary server.  See #primary_server.
  def thread
    @primary_server ? @primary_server.thread : nil
  end
  module_function :thread

  # Set the default id conversion object.
  #
  # This is expected to be an instance such as DRb::DRbIdConv that responds to
  # #to_id and #to_obj that can convert objects to and from DRb references.
  #
  # See DRbServer#default_id_conv.
  def install_id_conv(idconv)
    DRbServer.default_id_conv(idconv)
  end
  module_function :install_id_conv

  # Set the default ACL to +acl+.
  #
  # See DRb::DRbServer.default_acl.
  def install_acl(acl)
    DRbServer.default_acl(acl)
  end
  module_function :install_acl

  @mutex = Thread::Mutex.new
  def mutex # :nodoc:
    @mutex
  end
  module_function :mutex

  @server = {}
  # Registers +server+ with DRb.
  #
  # This is called when a new DRb::DRbServer is created.
  #
  # If there is no primary server then +server+ becomes the primary server.
  #
  # Example:
  #
  #  require 'drb'
  #
  #  s = DRb::DRbServer.new # automatically calls regist_server
  #  DRb.fetch_server s.uri #=> #<DRb::DRbServer:0x...>
  def regist_server(server)
    @server[server.uri] = server
    mutex.synchronize do
      @primary_server = server unless @primary_server
    end
  end
  module_function :regist_server

  # Removes +server+ from the list of registered servers.
  def remove_server(server)
    @server.delete(server.uri)
    mutex.synchronize do
      if @primary_server == server
        @primary_server = nil
      end
    end
  end
  module_function :remove_server

  # Retrieves the server with the given +uri+.
  #
  # See also regist_server and remove_server.
  def fetch_server(uri)
    @server[uri]
  end
  module_function :fetch_server
end

# :stopdoc:
DRbObject = DRb::DRbObject
DRbUndumped = DRb::DRbUndumped
DRbIdConv = DRb::DRbIdConv
PK)J[�"�22$share/gems/gems/drb-2.2.1/lib/drb.rbnu�[���# frozen_string_literal: false
require 'drb/drb'

PK)J[�qo%share/gems/gems/drb-2.2.1/LICENSE.txtnu�[���Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
PK)J[;�ff7share/gems/gems/syntax_suggest-2.0.2/exe/syntax_suggestnuȯ��#!/opt/alt/ruby34/bin/ruby

require "syntax_suggest/api"

SyntaxSuggest::Cli.new(
  argv: ARGV
).call
PK)J[��F�ll,share/gems/gems/getoptlong-0.2.1/bin/consolenu�[���#!/opt/alt/ruby34/bin/ruby

require "bundler/setup"
require "getoptlong"

require "irb"
IRB.start(__FILE__)
PK)J[�t/;JJ*share/gems/gems/getoptlong-0.2.1/bin/setupnu�[���#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
set -vx

bundle install
PK)J[y<���*share/gems/gems/getoptlong-0.2.1/README.mdnu�[���# Getoptlong

The GetoptLong class allows you to parse command line options similarly to
the GNU getopt_long() C library call. Note, however, that GetoptLong is a
pure Ruby implementation.

GetoptLong allows for POSIX-style options like <tt>--file</tt> as well
as single letter options like <tt>-f</tt>

The empty option <tt>--</tt> (two minus symbols) is used to end option
processing. This can be particularly important if options have optional
arguments.

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'getoptlong'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install getoptlong

## Usage

```ruby
require 'getoptlong'

opts = GetoptLong.new(
  [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
  [ '--repeat', '-n', GetoptLong::REQUIRED_ARGUMENT ],
  [ '--name', GetoptLong::OPTIONAL_ARGUMENT ]
)

dir = nil
name = nil
repetitions = 1
opts.each do |opt, arg|
  case opt
    when '--help'
      puts <<-EOF
hello [OPTION] ... DIR
-h, --help:
   show help
--repeat x, -n x:
   repeat x times
--name [name]:
   greet user by name, if name not supplied default is John
DIR: The directory in which to issue the greeting.
      EOF
    when '--repeat'
      repetitions = arg.to_i
    when '--name'
      if arg == ''
        name = 'John'
      else
        name = arg
      end
  end
end

if ARGV.length != 1
  puts "Missing dir argument (try --help)"
  exit 0
end

dir = ARGV.shift

Dir.chdir(dir)
for i in (1..repetitions)
  print "Hello"
  if name
    print ", #{name}"
  end
  puts
end
```

Example command line:

```
hello -n 6 --name -- /tmp
```

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/getoptlong.
PK)J[�r�::(share/gems/gems/getoptlong-0.2.1/Gemfilenu�[���source "https://rubygems.org"

gem "rake"
gem "test-unit"
PK)J[���QQ2share/gems/gems/getoptlong-0.2.1/lib/getoptlong.rbnu�[���# frozen_string_literal: true
#
# GetoptLong for Ruby
#
# Copyright (C) 1998, 1999, 2000  Motoyuki Kasahara.
#
# You may redistribute and/or modify this library under the same license
# terms as Ruby.

# \Class \GetoptLong provides parsing both for options
# and for regular arguments.
#
# Using \GetoptLong, you can define options for your program.
# The program can then capture and respond to whatever options
# are included in the command that executes the program.
#
# A simple example: file <tt>simple.rb</tt>:
#
#   :include: ../sample/getoptlong/simple.rb
#
# If you are somewhat familiar with options,
# you may want to skip to this
# {full example}[#class-GetoptLong-label-Full+Example].
#
# == Options
#
# A \GetoptLong option has:
#
# - A string <em>option name</em>.
# - Zero or more string <em>aliases</em> for the name.
# - An <em>option type</em>.
#
# Options may be defined by calling singleton method GetoptLong.new,
# which returns a new \GetoptLong object.
# Options may then be processed by calling other methods
# such as GetoptLong#each.
#
# === Option Name and Aliases
#
# In the array that defines an option,
# the first element is the string option name.
# Often the name takes the 'long' form, beginning with two hyphens.
#
# The option name may have any number of aliases,
# which are defined by additional string elements.
#
# The name and each alias must be of one of two forms:
#
# - Two hyphens, followed by one or more letters.
# - One hyphen, followed by a single letter.
#
# File <tt>aliases.rb</tt>:
#
#   :include: ../sample/getoptlong/aliases.rb
#
# An option may be cited by its name,
# or by any of its aliases;
# the parsed option always reports the name, not an alias:
#
#   $ ruby aliases.rb -a -p --xxx --aaa -x
#
# Output:
#
#   ["--xxx", ""]
#   ["--xxx", ""]
#   ["--xxx", ""]
#   ["--xxx", ""]
#   ["--xxx", ""]
#
#
# An option may also be cited by an abbreviation of its name or any alias,
# as long as that abbreviation is unique among the options.
#
# File <tt>abbrev.rb</tt>:
#
#   :include: ../sample/getoptlong/abbrev.rb
#
# Command line:
#
#   $ ruby abbrev.rb --xxx --xx --xyz --xy
#
# Output:
#
#   ["--xxx", ""]
#   ["--xxx", ""]
#   ["--xyz", ""]
#   ["--xyz", ""]
#
# This command line raises GetoptLong::AmbiguousOption:
#
#   $ ruby abbrev.rb --x
#
# === Repetition
#
# An option may be cited more than once:
#
#   $ ruby abbrev.rb --xxx --xyz --xxx --xyz
#
# Output:
#
#   ["--xxx", ""]
#   ["--xyz", ""]
#   ["--xxx", ""]
#   ["--xyz", ""]
#
# === Treating Remaining Options as Arguments
#
# A option-like token that appears
# anywhere after the token <tt>--</tt> is treated as an ordinary argument,
# and is not processed as an option:
#
#   $ ruby abbrev.rb --xxx --xyz -- --xxx --xyz
#
# Output:
#
#   ["--xxx", ""]
#   ["--xyz", ""]
#
# === Option Types
#
# Each option definition includes an option type,
# which controls whether the option takes an argument.
#
# File <tt>types.rb</tt>:
#
#   :include: ../sample/getoptlong/types.rb
#
# Note that an option type has to do with the <em>option argument</em>
# (whether it is required, optional, or forbidden),
# not with whether the option itself is required.
#
# ==== Option with Required Argument
#
# An option of type <tt>GetoptLong::REQUIRED_ARGUMENT</tt>
# must be followed by an argument, which is associated with that option:
#
#   $ ruby types.rb --xxx foo
#
# Output:
#
#   ["--xxx", "foo"]
#
# If the option is not last, its argument is whatever follows it
# (even if the argument looks like another option):
#
#   $ ruby types.rb --xxx --yyy
#
# Output:
#
#   ["--xxx", "--yyy"]
#
# If the option is last, an exception is raised:
#
#   $ ruby types.rb
#   # Raises GetoptLong::MissingArgument
#
# ==== Option with Optional Argument
#
# An option of type <tt>GetoptLong::OPTIONAL_ARGUMENT</tt>
# may be followed by an argument, which if given is associated with that option.
#
# If the option is last, it does not have an argument:
#
#   $ ruby types.rb --yyy
#
# Output:
#
#   ["--yyy", ""]
#
# If the option is followed by another option, it does not have an argument:
#
#   $ ruby types.rb --yyy --zzz
#
# Output:
#
#   ["--yyy", ""]
#   ["--zzz", ""]
#
# Otherwise the option is followed by its argument, which is associated
# with that option:
#
#   $ ruby types.rb --yyy foo
#
# Output:
#
#   ["--yyy", "foo"]
#
# ==== Option with No Argument
#
# An option of type <tt>GetoptLong::NO_ARGUMENT</tt> takes no argument:
#
#   ruby types.rb --zzz foo
#
# Output:
#
#   ["--zzz", ""]
#
# === ARGV
#
# You can process options either with method #each and a block,
# or with method #get.
#
# During processing, each found option is removed, along with its argument
# if there is one.
# After processing, each remaining element was neither an option
# nor the argument for an option.
#
# File <tt>argv.rb</tt>:
#
#   :include: ../sample/getoptlong/argv.rb
#
# Command line:
#
#   $ ruby argv.rb --xxx Foo --yyy Bar Baz --zzz Bat Bam
#
# Output:
#
#   Original ARGV: ["--xxx", "Foo", "--yyy", "Bar", "Baz", "--zzz", "Bat", "Bam"]
#   ["--xxx", "Foo"]
#   ["--yyy", "Bar"]
#   ["--zzz", ""]
#   Remaining ARGV: ["Baz", "Bat", "Bam"]
#
# === Ordering
#
# There are three settings that control the way the options
# are interpreted:
#
# - +PERMUTE+.
# - +REQUIRE_ORDER+.
# - +RETURN_IN_ORDER+.
#
# The initial setting for a new \GetoptLong object is +REQUIRE_ORDER+
# if environment variable +POSIXLY_CORRECT+ is defined, +PERMUTE+ otherwise.
#
# ==== PERMUTE Ordering
#
# In the +PERMUTE+ ordering, options and other, non-option,
# arguments may appear in any order and any mixture.
#
# File <tt>permute.rb</tt>:
#
#   :include: ../sample/getoptlong/permute.rb
#
# Command line:
#
#   $ ruby permute.rb Foo --zzz Bar --xxx Baz --yyy Bat Bam --xxx Bag Bah
#
# Output:
#
#   Original ARGV: ["Foo", "--zzz", "Bar", "--xxx", "Baz", "--yyy", "Bat", "Bam", "--xxx", "Bag", "Bah"]
#   ["--zzz", ""]
#   ["--xxx", "Baz"]
#   ["--yyy", "Bat"]
#   ["--xxx", "Bag"]
#   Remaining ARGV: ["Foo", "Bar", "Bam", "Bah"]
#
# ==== REQUIRE_ORDER Ordering
#
# In the +REQUIRE_ORDER+ ordering, all options precede all non-options;
# that is, each word after the first non-option word
# is treated as a non-option word (even if it begins with a hyphen).
#
# File <tt>require_order.rb</tt>:
#
#   :include: ../sample/getoptlong/require_order.rb
#
# Command line:
#
#   $ ruby require_order.rb --xxx Foo Bar --xxx Baz --yyy Bat -zzz
#
# Output:
#
#   Original ARGV: ["--xxx", "Foo", "Bar", "--xxx", "Baz", "--yyy", "Bat", "-zzz"]
#   ["--xxx", "Foo"]
#   Remaining ARGV: ["Bar", "--xxx", "Baz", "--yyy", "Bat", "-zzz"]
#
# ==== RETURN_IN_ORDER Ordering
#
# In the +RETURN_IN_ORDER+ ordering, every word is treated as an option.
# A word that begins with a hyphen (or two) is treated in the usual way;
# a word +word+ that does not so begin is treated as an option
# whose name is an empty string, and whose value is +word+.
#
# File <tt>return_in_order.rb</tt>:
#
#   :include: ../sample/getoptlong/return_in_order.rb
#
# Command line:
#
#   $ ruby return_in_order.rb Foo --xxx Bar Baz --zzz Bat Bam
#
# Output:
#
#   Original ARGV: ["Foo", "--xxx", "Bar", "Baz", "--zzz", "Bat", "Bam"]
#   ["", "Foo"]
#   ["--xxx", "Bar"]
#   ["", "Baz"]
#   ["--zzz", ""]
#   ["", "Bat"]
#   ["", "Bam"]
#   Remaining ARGV: []
#
# === Full Example
#
# File <tt>fibonacci.rb</tt>:
#
#   :include: ../sample/getoptlong/fibonacci.rb
#
# Command line:
#
#   $ ruby fibonacci.rb
#
# Output:
#
#   Option --number is required.
#   Usage:
#
#     -n n, --number n:
#       Compute Fibonacci number for n.
#     -v [boolean], --verbose [boolean]:
#       Show intermediate results; default is 'false'.
#     -h, --help:
#       Show this help.
#
# Command line:
#
#   $ ruby fibonacci.rb --number
#
# Raises GetoptLong::MissingArgument:
#
#   fibonacci.rb: option `--number' requires an argument
#
# Command line:
#
#   $ ruby fibonacci.rb --number 6
#
# Output:
#
#   8
#
# Command line:
#
#   $ ruby fibonacci.rb --number 6 --verbose
#
# Output:
#   1
#   2
#   3
#   5
#   8
#
# Command line:
#
#   $ ruby fibonacci.rb --number 6 --verbose yes
#
# Output:
#
#   --verbose argument must be true or false
#   Usage:
#
#     -n n, --number n:
#       Compute Fibonacci number for n.
#     -v [boolean], --verbose [boolean]:
#       Show intermediate results; default is 'false'.
#     -h, --help:
#       Show this help.
#
class GetoptLong
  # Version.
  VERSION = "0.2.1"

  #
  # Orderings.
  #
  ORDERINGS = [REQUIRE_ORDER = 0, PERMUTE = 1, RETURN_IN_ORDER = 2]

  #
  # Argument flags.
  #
  ARGUMENT_FLAGS = [NO_ARGUMENT = 0, REQUIRED_ARGUMENT = 1,
    OPTIONAL_ARGUMENT = 2]

  #
  # Status codes.
  #
  STATUS_YET, STATUS_STARTED, STATUS_TERMINATED = 0, 1, 2

  #
  # Error types.
  #
  class Error  < StandardError; end
  class AmbiguousOption   < Error; end
  class NeedlessArgument < Error; end
  class MissingArgument  < Error; end
  class InvalidOption    < Error; end

  #
  # Returns a new \GetoptLong object based on the given +arguments+.
  # See {Options}[#class-GetoptLong-label-Options].
  #
  # Example:
  #
  #   :include: ../sample/getoptlong/simple.rb
  #
  # Raises an exception if:
  #
  # - Any of +arguments+ is not an array.
  # - Any option name or alias is not a string.
  # - Any option type is invalid.
  #
  def initialize(*arguments)
    #
    # Current ordering.
    #
    if ENV.include?('POSIXLY_CORRECT')
      @ordering = REQUIRE_ORDER
    else
      @ordering = PERMUTE
    end

    #
    # Hash table of option names.
    # Keys of the table are option names, and their values are canonical
    # names of the options.
    #
    @canonical_names = Hash.new

    #
    # Hash table of argument flags.
    # Keys of the table are option names, and their values are argument
    # flags of the options.
    #
    @argument_flags = Hash.new

    #
    # Whether error messages are output to $stderr.
    #
    @quiet = false

    #
    # Status code.
    #
    @status = STATUS_YET

    #
    # Error code.
    #
    @error = nil

    #
    # Error message.
    #
    @error_message = nil

    #
    # Rest of catenated short options.
    #
    @rest_singles = ''

    #
    # List of non-option-arguments.
    # Append them to ARGV when option processing is terminated.
    #
    @non_option_arguments = Array.new

    if 0 < arguments.length
      set_options(*arguments)
    end
  end

  # Sets the ordering; see {Ordering}[#class-GetoptLong-label-Ordering];
  # returns the new ordering.
  #
  # If the given +ordering+ is +PERMUTE+ and environment variable
  # +POSIXLY_CORRECT+ is defined, sets the ordering to +REQUIRE_ORDER+;
  # otherwise sets the ordering to +ordering+:
  #
  #   options = GetoptLong.new
  #   options.ordering == GetoptLong::PERMUTE # => true
  #   options.ordering = GetoptLong::RETURN_IN_ORDER
  #   options.ordering == GetoptLong::RETURN_IN_ORDER # => true
  #   ENV['POSIXLY_CORRECT'] = 'true'
  #   options.ordering = GetoptLong::PERMUTE
  #   options.ordering == GetoptLong::REQUIRE_ORDER # => true
  #
  # Raises an exception if +ordering+ is invalid.
  #
  def ordering=(ordering)
    #
    # The method is failed if option processing has already started.
    #
    if @status != STATUS_YET
      set_error(ArgumentError, "argument error")
      raise RuntimeError,
        "invoke ordering=, but option processing has already started"
    end

    #
    # Check ordering.
    #
    if !ORDERINGS.include?(ordering)
      raise ArgumentError, "invalid ordering `#{ordering}'"
    end
    if ordering == PERMUTE && ENV.include?('POSIXLY_CORRECT')
      @ordering = REQUIRE_ORDER
    else
      @ordering = ordering
    end
  end

  #
  # Returns the ordering setting.
  #
  attr_reader :ordering

  #
  # Replaces existing options with those given by +arguments+,
  # which have the same form as the arguments to ::new;
  # returns +self+.
  #
  # Raises an exception if option processing has begun.
  #
  def set_options(*arguments)
    #
    # The method is failed if option processing has already started.
    #
    if @status != STATUS_YET
      raise RuntimeError,
        "invoke set_options, but option processing has already started"
    end

    #
    # Clear tables of option names and argument flags.
    #
    @canonical_names.clear
    @argument_flags.clear

    arguments.each do |arg|
      if !arg.is_a?(Array)
       raise ArgumentError, "the option list contains non-Array argument"
      end

      #
      # Find an argument flag and it set to `argument_flag'.
      #
      argument_flag = nil
      arg.each do |i|
        if ARGUMENT_FLAGS.include?(i)
          if argument_flag != nil
            raise ArgumentError, "too many argument-flags"
          end
          argument_flag = i
        end
      end

      raise ArgumentError, "no argument-flag" if argument_flag == nil

      canonical_name = nil
      arg.each do |i|
        #
        # Check an option name.
        #
        next if i == argument_flag
        begin
          if !i.is_a?(String) || i !~ /\A-([^-]|-.+)\z/
            raise ArgumentError, "an invalid option `#{i}'"
          end
          if (@canonical_names.include?(i))
            raise ArgumentError, "option redefined `#{i}'"
          end
        rescue
          @canonical_names.clear
          @argument_flags.clear
          raise
        end

        #
        # Register the option (`i') to the `@canonical_names' and
        # `@canonical_names' Hashes.
        #
        if canonical_name == nil
          canonical_name = i
        end
        @canonical_names[i] = canonical_name
        @argument_flags[i] = argument_flag
      end
      raise ArgumentError, "no option name" if canonical_name == nil
    end
    return self
  end

  #
  # Sets quiet mode and returns the given argument:
  #
  # - When +false+ or +nil+, error messages are written to <tt>$stdout</tt>.
  # - Otherwise, error messages are not written.
  #
  attr_writer :quiet

  #
  # Returns the quiet mode setting.
  #
  attr_reader :quiet
  alias quiet? quiet

  #
  # Terminate option processing;
  # returns +nil+ if processing has already terminated;
  # otherwise returns +self+.
  #
  def terminate
    return nil if @status == STATUS_TERMINATED
    raise RuntimeError, "an error has occurred" if @error != nil

    @status = STATUS_TERMINATED
    @non_option_arguments.reverse_each do |argument|
      ARGV.unshift(argument)
    end

    @canonical_names = nil
    @argument_flags = nil
    @rest_singles = nil
    @non_option_arguments = nil

    return self
  end

  #
  # Returns +true+ if option processing has terminated, +false+ otherwise.
  #
  def terminated?
    return @status == STATUS_TERMINATED
  end

  #
  # \Set an error (a protected method).
  #
  def set_error(type, message)
    $stderr.print("#{$0}: #{message}\n") if !@quiet

    @error = type
    @error_message = message
    @canonical_names = nil
    @argument_flags = nil
    @rest_singles = nil
    @non_option_arguments = nil

    raise type, message
  end
  protected :set_error

  #
  # Returns whether option processing has failed.
  #
  attr_reader :error
  alias error? error

  # Return the appropriate error message in POSIX-defined format.
  # If no error has occurred, returns +nil+.
  #
  def error_message
    return @error_message
  end

  #
  # Returns the next option as a 2-element array containing:
  #
  # - The option name (the name itself, not an alias).
  # - The option value.
  #
  # Returns +nil+ if there are no more options.
  #
  def get
    option_name, option_argument = nil, ''

    #
    # Check status.
    #
    return nil if @error != nil
    case @status
    when STATUS_YET
      @status = STATUS_STARTED
    when STATUS_TERMINATED
      return nil
    end

    #
    # Get next option argument.
    #
    if 0 < @rest_singles.length
      argument = '-' + @rest_singles
    elsif (ARGV.length == 0)
      terminate
      return nil
    elsif @ordering == PERMUTE
      while 0 < ARGV.length && ARGV[0] !~ /\A-./
        @non_option_arguments.push(ARGV.shift)
      end
      if ARGV.length == 0
        terminate
        return nil
      end
      argument = ARGV.shift
    elsif @ordering == REQUIRE_ORDER
      if (ARGV[0] !~ /\A-./)
        terminate
        return nil
      end
      argument = ARGV.shift
    else
      argument = ARGV.shift
    end

    #
    # Check the special argument `--'.
    # `--' indicates the end of the option list.
    #
    if argument == '--' && @rest_singles.length == 0
      terminate
      return nil
    end

    #
    # Check for long and short options.
    #
    if argument =~ /\A(--[^=]+)/ && @rest_singles.length == 0
      #
      # This is a long style option, which start with `--'.
      #
      pattern = $1
      if @canonical_names.include?(pattern)
        option_name = pattern
      else
        #
        # The option `option_name' is not registered in `@canonical_names'.
        # It may be an abbreviated.
        #
        matches = []
        @canonical_names.each_key do |key|
          if key.index(pattern) == 0
            option_name = key
            matches << key
          end
        end
        if 2 <= matches.length
          set_error(AmbiguousOption, "option `#{argument}' is ambiguous between #{matches.join(', ')}")
        elsif matches.length == 0
          set_error(InvalidOption, "unrecognized option `#{argument}'")
        end
      end

      #
      # Check an argument to the option.
      #
      if @argument_flags[option_name] == REQUIRED_ARGUMENT
        if argument =~ /=(.*)/m
          option_argument = $1
        elsif 0 < ARGV.length
          option_argument = ARGV.shift
        else
          set_error(MissingArgument,
                    "option `#{argument}' requires an argument")
        end
      elsif @argument_flags[option_name] == OPTIONAL_ARGUMENT
        if argument =~ /=(.*)/m
          option_argument = $1
        elsif 0 < ARGV.length && ARGV[0] !~ /\A-./
          option_argument = ARGV.shift
        else
          option_argument = ''
        end
      elsif argument =~ /=(.*)/m
        set_error(NeedlessArgument,
                  "option `#{option_name}' doesn't allow an argument")
      end

    elsif argument =~ /\A(-(.))(.*)/m
      #
      # This is a short style option, which start with `-' (not `--').
      # Short options may be catenated (e.g. `-l -g' is equivalent to
      # `-lg').
      #
      option_name, ch, @rest_singles = $1, $2, $3

      if @canonical_names.include?(option_name)
        #
        # The option `option_name' is found in `@canonical_names'.
        # Check its argument.
        #
        if @argument_flags[option_name] == REQUIRED_ARGUMENT
          if 0 < @rest_singles.length
            option_argument = @rest_singles
            @rest_singles = ''
          elsif 0 < ARGV.length
            option_argument = ARGV.shift
          else
            # 1003.2 specifies the format of this message.
            set_error(MissingArgument, "option requires an argument -- #{ch}")
          end
        elsif @argument_flags[option_name] == OPTIONAL_ARGUMENT
          if 0 < @rest_singles.length
            option_argument = @rest_singles
            @rest_singles = ''
          elsif 0 < ARGV.length && ARGV[0] !~ /\A-./
            option_argument = ARGV.shift
          else
            option_argument = ''
          end
        end
      else
        #
        # This is an invalid option.
        # 1003.2 specifies the format of this message.
        #
        if ENV.include?('POSIXLY_CORRECT')
          set_error(InvalidOption, "invalid option -- #{ch}")
        else
          set_error(InvalidOption, "invalid option -- #{ch}")
        end
      end
    else
      #
      # This is a non-option argument.
      # Only RETURN_IN_ORDER fell into here.
      #
      return '', argument
    end

    return @canonical_names[option_name], option_argument
  end
  alias get_option get

  #
  # Calls the given block with each option;
  # each option is a 2-element array containing:
  #
  # - The option name (the name itself, not an alias).
  # - The option value.
  #
  # Example:
  #
  #   :include: ../sample/getoptlong/each.rb
  #
  # Command line:
  #
  #    ruby each.rb -xxx Foo -x Bar --yyy Baz -y Bat --zzz
  #
  # Output:
  #
  #   Original ARGV: ["-xxx", "Foo", "-x", "Bar", "--yyy", "Baz", "-y", "Bat", "--zzz"]
  #   ["--xxx", "xx"]
  #   ["--xxx", "Bar"]
  #   ["--yyy", "Baz"]
  #   ["--yyy", "Bat"]
  #   ["--zzz", ""]
  #   Remaining ARGV: ["Foo"]
  #
  def each
    loop do
      option_name, option_argument = get_option
      break if option_name == nil
      yield option_name, option_argument
    end
  end
  alias each_option each
end
PK)J[�,��)share/gems/gems/getoptlong-0.2.1/Rakefilenu�[���require 'bundler/gem_tasks'
require 'rake/testtask'

Rake::TestTask.new(:test) do |t|
  t.libs << 'test'
  t.libs << 'lib'
  t.test_files = FileList['test/test_*.rb']
end

task :default => :test
PK)J[��pM**=share/gems/gems/getoptlong-0.2.1/sample/getoptlong/permute.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', GetoptLong::REQUIRED_ARGUMENT],
  ['--yyy', GetoptLong::OPTIONAL_ARGUMENT],
  ['--zzz', GetoptLong::NO_ARGUMENT]
)
puts "Original ARGV: #{ARGV}"
options.each do |option, argument|
  p [option, argument]
end
puts "Remaining ARGV: #{ARGV}"
PK)J[Ѐ�x��;share/gems/gems/getoptlong-0.2.1/sample/getoptlong/types.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', GetoptLong::REQUIRED_ARGUMENT],
  ['--yyy', GetoptLong::OPTIONAL_ARGUMENT],
  ['--zzz', GetoptLong::NO_ARGUMENT]
)
options.each do |option, argument|
  p [option, argument]
end
PK)J[�vR};;:share/gems/gems/getoptlong-0.2.1/sample/getoptlong/each.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', '-x', GetoptLong::REQUIRED_ARGUMENT],
  ['--yyy', '-y', GetoptLong::OPTIONAL_ARGUMENT],
  ['--zzz', '-z',GetoptLong::NO_ARGUMENT]
)
puts "Original ARGV: #{ARGV}"
options.each do |option, argument|
  p [option, argument]
end
puts "Remaining ARGV: #{ARGV}"
PK)J[jF��WWCshare/gems/gems/getoptlong-0.2.1/sample/getoptlong/require_order.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', GetoptLong::REQUIRED_ARGUMENT],
  ['--yyy', GetoptLong::OPTIONAL_ARGUMENT],
  ['--zzz', GetoptLong::NO_ARGUMENT]
)
options.ordering = GetoptLong::REQUIRE_ORDER
puts "Original ARGV: #{ARGV}"
options.each do |option, argument|
  p [option, argument]
end
puts "Remaining ARGV: #{ARGV}"
PK)J[���YYEshare/gems/gems/getoptlong-0.2.1/sample/getoptlong/return_in_order.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', GetoptLong::REQUIRED_ARGUMENT],
  ['--yyy', GetoptLong::OPTIONAL_ARGUMENT],
  ['--zzz', GetoptLong::NO_ARGUMENT]
)
options.ordering = GetoptLong::RETURN_IN_ORDER
puts "Original ARGV: #{ARGV}"
options.each do |option, argument|
  p [option, argument]
end
puts "Remaining ARGV: #{ARGV}"
PK)J[�p�g��<share/gems/gems/getoptlong-0.2.1/sample/getoptlong/abbrev.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', GetoptLong::NO_ARGUMENT],
  ['--xyz', GetoptLong::NO_ARGUMENT]
)
options.each do |option, argument|
  p [option, argument]
end
PK)J[�)ճ��=share/gems/gems/getoptlong-0.2.1/sample/getoptlong/aliases.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', '-x', '--aaa', '-a', '-p', GetoptLong::NO_ARGUMENT]
)
options.each do |option, argument|
  p [option, argument]
end
PK)J[�j���<share/gems/gems/getoptlong-0.2.1/sample/getoptlong/simple.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--number', '-n', GetoptLong::REQUIRED_ARGUMENT],
  ['--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT],
  ['--help', '-h', GetoptLong::NO_ARGUMENT]
)
PK)J[��pM**:share/gems/gems/getoptlong-0.2.1/sample/getoptlong/argv.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--xxx', GetoptLong::REQUIRED_ARGUMENT],
  ['--yyy', GetoptLong::OPTIONAL_ARGUMENT],
  ['--zzz', GetoptLong::NO_ARGUMENT]
)
puts "Original ARGV: #{ARGV}"
options.each do |option, argument|
  p [option, argument]
end
puts "Remaining ARGV: #{ARGV}"
PK)J[�uF���?share/gems/gems/getoptlong-0.2.1/sample/getoptlong/fibonacci.rbnu�[���require 'getoptlong'

options = GetoptLong.new(
  ['--number', '-n', GetoptLong::REQUIRED_ARGUMENT],
  ['--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT],
  ['--help', '-h', GetoptLong::NO_ARGUMENT]
)

def help(status = 0)
  puts <<~HELP
    Usage:

      -n n, --number n:
        Compute Fibonacci number for n.
      -v [boolean], --verbose [boolean]:
        Show intermediate results; default is 'false'.
      -h, --help:
        Show this help.
  HELP
  exit(status)
end

def print_fibonacci (number)
  return 0 if number == 0
  return 1 if number == 1 or number == 2
  i = 0
  j = 1
  (2..number).each do
    k = i + j
    i = j
    j = k
    puts j if @verbose
  end
  puts j unless @verbose
end

options.each do |option, argument|
  case option
  when '--number'
    @number = argument.to_i
  when '--verbose'
    @verbose = if argument.empty?
      true
    elsif argument.match(/true/i)
      true
    elsif argument.match(/false/i)
      false
    else
      puts '--verbose argument must be true or false'
      help(255)
    end
  when '--help'
    help
  end
end

unless @number
  puts 'Option --number is required.'
  help(255)
end

print_fibonacci(@number)
PK)J[�qo,share/gems/gems/getoptlong-0.2.1/LICENSE.txtnu�[���Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
PK)J[��idid(share/gems/gems/psych-5.2.2/lib/psych.rbnu�[���# frozen_string_literal: true
require 'date'

require_relative 'psych/versions'
case RUBY_ENGINE
when 'jruby'
  require_relative 'psych_jars'
  if JRuby::Util.respond_to?(:load_ext)
    JRuby::Util.load_ext('org.jruby.ext.psych.PsychLibrary')
  else
    require 'java'; require 'jruby'
    org.jruby.ext.psych.PsychLibrary.new.load(JRuby.runtime, false)
  end
else
  require 'psych.so'
end
require_relative 'psych/nodes'
require_relative 'psych/streaming'
require_relative 'psych/visitors'
require_relative 'psych/handler'
require_relative 'psych/tree_builder'
require_relative 'psych/parser'
require_relative 'psych/omap'
require_relative 'psych/set'
require_relative 'psych/coder'
require_relative 'psych/core_ext'
require_relative 'psych/stream'
require_relative 'psych/json/tree_builder'
require_relative 'psych/json/stream'
require_relative 'psych/handlers/document_stream'
require_relative 'psych/class_loader'

###
# = Overview
#
# Psych is a YAML parser and emitter.
# Psych leverages libyaml [Home page: https://pyyaml.org/wiki/LibYAML]
# or [git repo: https://github.com/yaml/libyaml] for its YAML parsing
# and emitting capabilities. In addition to wrapping libyaml, Psych also
# knows how to serialize and de-serialize most Ruby objects to and from
# the YAML format.
#
# = I NEED TO PARSE OR EMIT YAML RIGHT NOW!
#
#   # Parse some YAML
#   Psych.load("--- foo") # => "foo"
#
#   # Emit some YAML
#   Psych.dump("foo")     # => "--- foo\n...\n"
#   { :a => 'b'}.to_yaml  # => "---\n:a: b\n"
#
# Got more time on your hands?  Keep on reading!
#
# == YAML Parsing
#
# Psych provides a range of interfaces for parsing a YAML document ranging from
# low level to high level, depending on your parsing needs.  At the lowest
# level, is an event based parser.  Mid level is access to the raw YAML AST,
# and at the highest level is the ability to unmarshal YAML to Ruby objects.
#
# == YAML Emitting
#
# Psych provides a range of interfaces ranging from low to high level for
# producing YAML documents.  Very similar to the YAML parsing interfaces, Psych
# provides at the lowest level, an event based system, mid-level is building
# a YAML AST, and the highest level is converting a Ruby object straight to
# a YAML document.
#
# == High-level API
#
# === Parsing
#
# The high level YAML parser provided by Psych simply takes YAML as input and
# returns a Ruby data structure.  For information on using the high level parser
# see Psych.load
#
# ==== Reading from a string
#
#   Psych.safe_load("--- a")             # => 'a'
#   Psych.safe_load("---\n - a\n - b")   # => ['a', 'b']
#   # From a trusted string:
#   Psych.load("--- !ruby/range\nbegin: 0\nend: 42\nexcl: false\n") # => 0..42
#
# ==== Reading from a file
#
#   Psych.safe_load_file("data.yml", permitted_classes: [Date])
#   Psych.load_file("trusted_database.yml")
#
# ==== \Exception handling
#
#   begin
#     # The second argument changes only the exception contents
#     Psych.parse("--- `", "file.txt")
#   rescue Psych::SyntaxError => ex
#     ex.file    # => 'file.txt'
#     ex.message # => "(file.txt): found character that cannot start any token"
#   end
#
# === Emitting
#
# The high level emitter has the easiest interface.  Psych simply takes a Ruby
# data structure and converts it to a YAML document.  See Psych.dump for more
# information on dumping a Ruby data structure.
#
# ==== Writing to a string
#
#   # Dump an array, get back a YAML string
#   Psych.dump(['a', 'b'])  # => "---\n- a\n- b\n"
#
#   # Dump an array to an IO object
#   Psych.dump(['a', 'b'], StringIO.new)  # => #<StringIO:0x000001009d0890>
#
#   # Dump an array with indentation set
#   Psych.dump(['a', ['b']], :indentation => 3) # => "---\n- a\n-  - b\n"
#
#   # Dump an array to an IO with indentation set
#   Psych.dump(['a', ['b']], StringIO.new, :indentation => 3)
#
# ==== Writing to a file
#
# Currently there is no direct API for dumping Ruby structure to file:
#
#   File.open('database.yml', 'w') do |file|
#     file.write(Psych.dump(['a', 'b']))
#   end
#
# == Mid-level API
#
# === Parsing
#
# Psych provides access to an AST produced from parsing a YAML document.  This
# tree is built using the Psych::Parser and Psych::TreeBuilder.  The AST can
# be examined and manipulated freely.  Please see Psych::parse_stream,
# Psych::Nodes, and Psych::Nodes::Node for more information on dealing with
# YAML syntax trees.
#
# ==== Reading from a string
#
#   # Returns Psych::Nodes::Stream
#   Psych.parse_stream("---\n - a\n - b")
#
#   # Returns Psych::Nodes::Document
#   Psych.parse("---\n - a\n - b")
#
# ==== Reading from a file
#
#   # Returns Psych::Nodes::Stream
#   Psych.parse_stream(File.read('database.yml'))
#
#   # Returns Psych::Nodes::Document
#   Psych.parse_file('database.yml')
#
# ==== \Exception handling
#
#   begin
#     # The second argument changes only the exception contents
#     Psych.parse("--- `", "file.txt")
#   rescue Psych::SyntaxError => ex
#     ex.file    # => 'file.txt'
#     ex.message # => "(file.txt): found character that cannot start any token"
#   end
#
# === Emitting
#
# At the mid level is building an AST.  This AST is exactly the same as the AST
# used when parsing a YAML document.  Users can build an AST by hand and the
# AST knows how to emit itself as a YAML document.  See Psych::Nodes,
# Psych::Nodes::Node, and Psych::TreeBuilder for more information on building
# a YAML AST.
#
# ==== Writing to a string
#
#   # We need Psych::Nodes::Stream (not Psych::Nodes::Document)
#   stream = Psych.parse_stream("---\n - a\n - b")
#
#   stream.to_yaml # => "---\n- a\n- b\n"
#
# ==== Writing to a file
#
#   # We need Psych::Nodes::Stream (not Psych::Nodes::Document)
#   stream = Psych.parse_stream(File.read('database.yml'))
#
#   File.open('database.yml', 'w') do |file|
#     file.write(stream.to_yaml)
#   end
#
# == Low-level API
#
# === Parsing
#
# The lowest level parser should be used when the YAML input is already known,
# and the developer does not want to pay the price of building an AST or
# automatic detection and conversion to Ruby objects.  See Psych::Parser for
# more information on using the event based parser.
#
# ==== Reading to Psych::Nodes::Stream structure
#
#   parser = Psych::Parser.new(TreeBuilder.new) # => #<Psych::Parser>
#   parser = Psych.parser                       # it's an alias for the above
#
#   parser.parse("---\n - a\n - b")             # => #<Psych::Parser>
#   parser.handler                              # => #<Psych::TreeBuilder>
#   parser.handler.root                         # => #<Psych::Nodes::Stream>
#
# ==== Receiving an events stream
#
#   recorder = Psych::Handlers::Recorder.new
#   parser = Psych::Parser.new(recorder)
#
#   parser.parse("---\n - a\n - b")
#   recorder.events # => [list of [event, args] lists]
#                   # event is one of: Psych::Handler::EVENTS
#                   # args are the arguments passed to the event
#
# === Emitting
#
# The lowest level emitter is an event based system.  Events are sent to a
# Psych::Emitter object.  That object knows how to convert the events to a YAML
# document.  This interface should be used when document format is known in
# advance or speed is a concern.  See Psych::Emitter for more information.
#
# ==== Writing to a Ruby structure
#
#   Psych.parser.parse("--- a")       # => #<Psych::Parser>
#
#   parser.handler.first              # => #<Psych::Nodes::Stream>
#   parser.handler.first.to_ruby      # => ["a"]
#
#   parser.handler.root.first         # => #<Psych::Nodes::Document>
#   parser.handler.root.first.to_ruby # => "a"
#
#   # You can instantiate an Emitter manually
#   Psych::Visitors::ToRuby.new.accept(parser.handler.root.first)
#   # => "a"

module Psych
  # The version of libyaml Psych is using
  LIBYAML_VERSION = Psych.libyaml_version.join('.').freeze

  ###
  # Load +yaml+ in to a Ruby data structure.  If multiple documents are
  # provided, the object contained in the first document will be returned.
  # +filename+ will be used in the exception message if any exception
  # is raised while parsing.  If +yaml+ is empty, it returns
  # the specified +fallback+ return value, which defaults to +false+.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.unsafe_load("--- a")             # => 'a'
  #   Psych.unsafe_load("---\n - a\n - b")   # => ['a', 'b']
  #
  #   begin
  #     Psych.unsafe_load("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # When the optional +symbolize_names+ keyword argument is set to a
  # true value, returns symbols for keys in Hash objects (default: strings).
  #
  #   Psych.unsafe_load("---\n foo: bar")                         # => {"foo"=>"bar"}
  #   Psych.unsafe_load("---\n foo: bar", symbolize_names: true)  # => {:foo=>"bar"}
  #
  # Raises a TypeError when `yaml` parameter is NilClass
  #
  # NOTE: This method *should not* be used to parse untrusted documents, such as
  # YAML documents that are supplied via user input.  Instead, please use the
  # load method or the safe_load method.
  #
  def self.unsafe_load yaml, filename: nil, fallback: false, symbolize_names: false, freeze: false, strict_integer: false
    result = parse(yaml, filename: filename)
    return fallback unless result
    result.to_ruby(symbolize_names: symbolize_names, freeze: freeze, strict_integer: strict_integer)
  end

  ###
  # Safely load the yaml string in +yaml+.  By default, only the following
  # classes are allowed to be deserialized:
  #
  # * TrueClass
  # * FalseClass
  # * NilClass
  # * Integer
  # * Float
  # * String
  # * Array
  # * Hash
  #
  # Recursive data structures are not allowed by default.  Arbitrary classes
  # can be allowed by adding those classes to the +permitted_classes+ keyword argument.  They are
  # additive.  For example, to allow Date deserialization:
  #
  #   Psych.safe_load(yaml, permitted_classes: [Date])
  #
  # Now the Date class can be loaded in addition to the classes listed above.
  #
  # Aliases can be explicitly allowed by changing the +aliases+ keyword argument.
  # For example:
  #
  #   x = []
  #   x << x
  #   yaml = Psych.dump x
  #   Psych.safe_load yaml               # => raises an exception
  #   Psych.safe_load yaml, aliases: true # => loads the aliases
  #
  # A Psych::DisallowedClass exception will be raised if the yaml contains a
  # class that isn't in the +permitted_classes+ list.
  #
  # A Psych::AliasesNotEnabled exception will be raised if the yaml contains aliases
  # but the +aliases+ keyword argument is set to false.
  #
  # +filename+ will be used in the exception message if any exception is raised
  # while parsing.
  #
  # When the optional +symbolize_names+ keyword argument is set to a
  # true value, returns symbols for keys in Hash objects (default: strings).
  #
  #   Psych.safe_load("---\n foo: bar")                         # => {"foo"=>"bar"}
  #   Psych.safe_load("---\n foo: bar", symbolize_names: true)  # => {:foo=>"bar"}
  #
  def self.safe_load yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false
    result = parse(yaml, filename: filename)
    return fallback unless result

    class_loader = ClassLoader::Restricted.new(permitted_classes.map(&:to_s),
                                               permitted_symbols.map(&:to_s))
    scanner      = ScalarScanner.new class_loader, strict_integer: strict_integer
    visitor = if aliases
                Visitors::ToRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze
              else
                Visitors::NoAliasRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze
              end
    result = visitor.accept result
    result
  end

  ###
  # Load +yaml+ in to a Ruby data structure.  If multiple documents are
  # provided, the object contained in the first document will be returned.
  # +filename+ will be used in the exception message if any exception
  # is raised while parsing.  If +yaml+ is empty, it returns
  # the specified +fallback+ return value, which defaults to +nil+.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.load("--- a")             # => 'a'
  #   Psych.load("---\n - a\n - b")   # => ['a', 'b']
  #
  #   begin
  #     Psych.load("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # When the optional +symbolize_names+ keyword argument is set to a
  # true value, returns symbols for keys in Hash objects (default: strings).
  #
  #   Psych.load("---\n foo: bar")                         # => {"foo"=>"bar"}
  #   Psych.load("---\n foo: bar", symbolize_names: true)  # => {:foo=>"bar"}
  #
  # Raises a TypeError when `yaml` parameter is NilClass.  This method is
  # similar to `safe_load` except that `Symbol` objects are allowed by default.
  #
  def self.load yaml, permitted_classes: [Symbol], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false
    safe_load yaml, permitted_classes: permitted_classes,
                    permitted_symbols: permitted_symbols,
                    aliases: aliases,
                    filename: filename,
                    fallback: fallback,
                    symbolize_names: symbolize_names,
                    freeze: freeze,
                    strict_integer: strict_integer
  end

  ###
  # Parse a YAML string in +yaml+.  Returns the Psych::Nodes::Document.
  # +filename+ is used in the exception message if a Psych::SyntaxError is
  # raised.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.parse("---\n - a\n - b") # => #<Psych::Nodes::Document:0x00>
  #
  #   begin
  #     Psych.parse("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # See Psych::Nodes for more information about YAML AST.
  def self.parse yaml, filename: nil
    parse_stream(yaml, filename: filename) do |node|
      return node
    end

    false
  end

  ###
  # Parse a file at +filename+. Returns the Psych::Nodes::Document.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  def self.parse_file filename, fallback: false
    result = File.open filename, 'r:bom|utf-8' do |f|
      parse f, filename: filename
    end
    result || fallback
  end

  ###
  # Returns a default parser
  def self.parser
    Psych::Parser.new(TreeBuilder.new)
  end

  ###
  # Parse a YAML string in +yaml+.  Returns the Psych::Nodes::Stream.
  # This method can handle multiple YAML documents contained in +yaml+.
  # +filename+ is used in the exception message if a Psych::SyntaxError is
  # raised.
  #
  # If a block is given, a Psych::Nodes::Document node will be yielded to the
  # block as it's being parsed.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.parse_stream("---\n - a\n - b") # => #<Psych::Nodes::Stream:0x00>
  #
  #   Psych.parse_stream("--- a\n--- b") do |node|
  #     node # => #<Psych::Nodes::Document:0x00>
  #   end
  #
  #   begin
  #     Psych.parse_stream("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # Raises a TypeError when NilClass is passed.
  #
  # See Psych::Nodes for more information about YAML AST.
  def self.parse_stream yaml, filename: nil, &block
    if block_given?
      parser = Psych::Parser.new(Handlers::DocumentStream.new(&block))
      parser.parse yaml, filename
    else
      parser = self.parser
      parser.parse yaml, filename
      parser.handler.root
    end
  end

  ###
  # call-seq:
  #   Psych.dump(o)               -> string of yaml
  #   Psych.dump(o, options)      -> string of yaml
  #   Psych.dump(o, io)           -> io object passed in
  #   Psych.dump(o, io, options)  -> io object passed in
  #
  # Dump Ruby object +o+ to a YAML string.  Optional +options+ may be passed in
  # to control the output format.  If an IO object is passed in, the YAML will
  # be dumped to that IO object.
  #
  # Currently supported options are:
  #
  # [<tt>:indentation</tt>]   Number of space characters used to indent.
  #                           Acceptable value should be in <tt>0..9</tt> range,
  #                           otherwise option is ignored.
  #
  #                           Default: <tt>2</tt>.
  # [<tt>:line_width</tt>]    Max character to wrap line at.
  #                           For unlimited line width use <tt>-1</tt>.
  #
  #                           Default: <tt>0</tt> (meaning "wrap at 81").
  # [<tt>:canonical</tt>]     Write "canonical" YAML form (very verbose, yet
  #                           strictly formal).
  #
  #                           Default: <tt>false</tt>.
  # [<tt>:header</tt>]        Write <tt>%YAML [version]</tt> at the beginning of document.
  #
  #                           Default: <tt>false</tt>.
  #
  # [<tt>:stringify_names</tt>] Dump symbol keys in Hash objects as string.
  #
  #                             Default: <tt>false</tt>.
  #
  # Example:
  #
  #   # Dump an array, get back a YAML string
  #   Psych.dump(['a', 'b'])  # => "---\n- a\n- b\n"
  #
  #   # Dump an array to an IO object
  #   Psych.dump(['a', 'b'], StringIO.new)  # => #<StringIO:0x000001009d0890>
  #
  #   # Dump an array with indentation set
  #   Psych.dump(['a', ['b']], indentation: 3) # => "---\n- a\n-  - b\n"
  #
  #   # Dump an array to an IO with indentation set
  #   Psych.dump(['a', ['b']], StringIO.new, indentation: 3)
  #
  #   # Dump hash with symbol keys as string
  #   Psych.dump({a: "b"}, stringify_names: true) # => "---\na: b\n"
  def self.dump o, io = nil, options = {}
    if Hash === io
      options = io
      io      = nil
    end

    visitor = Psych::Visitors::YAMLTree.create options
    visitor << o
    visitor.tree.yaml io, options
  end

  ###
  # call-seq:
  #   Psych.safe_dump(o)               -> string of yaml
  #   Psych.safe_dump(o, options)      -> string of yaml
  #   Psych.safe_dump(o, io)           -> io object passed in
  #   Psych.safe_dump(o, io, options)  -> io object passed in
  #
  # Safely dump Ruby object +o+ to a YAML string. Optional +options+ may be passed in
  # to control the output format.  If an IO object is passed in, the YAML will
  # be dumped to that IO object. By default, only the following
  # classes are allowed to be serialized:
  #
  # * TrueClass
  # * FalseClass
  # * NilClass
  # * Integer
  # * Float
  # * String
  # * Array
  # * Hash
  #
  # Arbitrary classes can be allowed by adding those classes to the +permitted_classes+
  # keyword argument.  They are additive.  For example, to allow Date serialization:
  #
  #   Psych.safe_dump(yaml, permitted_classes: [Date])
  #
  # Now the Date class can be dumped in addition to the classes listed above.
  #
  # A Psych::DisallowedClass exception will be raised if the object contains a
  # class that isn't in the +permitted_classes+ list.
  #
  # Currently supported options are:
  #
  # [<tt>:indentation</tt>]   Number of space characters used to indent.
  #                           Acceptable value should be in <tt>0..9</tt> range,
  #                           otherwise option is ignored.
  #
  #                           Default: <tt>2</tt>.
  # [<tt>:line_width</tt>]    Max character to wrap line at.
  #                           For unlimited line width use <tt>-1</tt>.
  #
  #                           Default: <tt>0</tt> (meaning "wrap at 81").
  # [<tt>:canonical</tt>]     Write "canonical" YAML form (very verbose, yet
  #                           strictly formal).
  #
  #                           Default: <tt>false</tt>.
  # [<tt>:header</tt>]        Write <tt>%YAML [version]</tt> at the beginning of document.
  #
  #                           Default: <tt>false</tt>.
  #
  # [<tt>:stringify_names</tt>] Dump symbol keys in Hash objects as string.
  #
  #                             Default: <tt>false</tt>.
  #
  # Example:
  #
  #   # Dump an array, get back a YAML string
  #   Psych.safe_dump(['a', 'b'])  # => "---\n- a\n- b\n"
  #
  #   # Dump an array to an IO object
  #   Psych.safe_dump(['a', 'b'], StringIO.new)  # => #<StringIO:0x000001009d0890>
  #
  #   # Dump an array with indentation set
  #   Psych.safe_dump(['a', ['b']], indentation: 3) # => "---\n- a\n-  - b\n"
  #
  #   # Dump an array to an IO with indentation set
  #   Psych.safe_dump(['a', ['b']], StringIO.new, indentation: 3)
  #
  #   # Dump hash with symbol keys as string
  #   Psych.dump({a: "b"}, stringify_names: true) # => "---\na: b\n"
  def self.safe_dump o, io = nil, options = {}
    if Hash === io
      options = io
      io      = nil
    end

    visitor = Psych::Visitors::RestrictedYAMLTree.create options
    visitor << o
    visitor.tree.yaml io, options
  end

  ###
  # Dump a list of objects as separate documents to a document stream.
  #
  # Example:
  #
  #   Psych.dump_stream("foo\n  ", {}) # => "--- ! \"foo\\n  \"\n--- {}\n"
  def self.dump_stream *objects
    visitor = Psych::Visitors::YAMLTree.create({})
    objects.each do |o|
      visitor << o
    end
    visitor.tree.yaml
  end

  ###
  # Dump Ruby +object+ to a JSON string.
  def self.to_json object
    visitor = Psych::Visitors::JSONTree.create
    visitor << object
    visitor.tree.yaml
  end

  ###
  # Load multiple documents given in +yaml+.  Returns the parsed documents
  # as a list.  If a block is given, each document will be converted to Ruby
  # and passed to the block during parsing
  #
  # Example:
  #
  #   Psych.load_stream("--- foo\n...\n--- bar\n...") # => ['foo', 'bar']
  #
  #   list = []
  #   Psych.load_stream("--- foo\n...\n--- bar\n...") do |ruby|
  #     list << ruby
  #   end
  #   list # => ['foo', 'bar']
  #
  def self.load_stream yaml, filename: nil, fallback: [], **kwargs
    result = if block_given?
               parse_stream(yaml, filename: filename) do |node|
                 yield node.to_ruby(**kwargs)
               end
             else
               parse_stream(yaml, filename: filename).children.map { |node| node.to_ruby(**kwargs) }
             end

    return fallback if result.is_a?(Array) && result.empty?
    result
  end

  ###
  # Load the document contained in +filename+.  Returns the yaml contained in
  # +filename+ as a Ruby object, or if the file is empty, it returns
  # the specified +fallback+ return value, which defaults to +false+.
  #
  # NOTE: This method *should not* be used to parse untrusted documents, such as
  # YAML documents that are supplied via user input.  Instead, please use the
  # safe_load_file method.
  def self.unsafe_load_file filename, **kwargs
    File.open(filename, 'r:bom|utf-8') { |f|
      self.unsafe_load f, filename: filename, **kwargs
    }
  end

  ###
  # Safely loads the document contained in +filename+.  Returns the yaml contained in
  # +filename+ as a Ruby object, or if the file is empty, it returns
  # the specified +fallback+ return value, which defaults to +nil+.
  # See safe_load for options.
  def self.safe_load_file filename, **kwargs
    File.open(filename, 'r:bom|utf-8') { |f|
      self.safe_load f, filename: filename, **kwargs
    }
  end

  ###
  # Loads the document contained in +filename+.  Returns the yaml contained in
  # +filename+ as a Ruby object, or if the file is empty, it returns
  # the specified +fallback+ return value, which defaults to +nil+.
  # See load for options.
  def self.load_file filename, **kwargs
    File.open(filename, 'r:bom|utf-8') { |f|
      self.load f, filename: filename, **kwargs
    }
  end

  # :stopdoc:
  def self.add_domain_type domain, type_tag, &block
    key = ['tag', domain, type_tag].join ':'
    domain_types[key] = [key, block]
    domain_types["tag:#{type_tag}"] = [key, block]
  end

  def self.add_builtin_type type_tag, &block
    domain = 'yaml.org,2002'
    key = ['tag', domain, type_tag].join ':'
    domain_types[key] = [key, block]
  end

  def self.remove_type type_tag
    domain_types.delete type_tag
  end

  def self.add_tag tag, klass
    load_tags[tag] = klass.name
    dump_tags[klass] = tag
  end

  class << self
    if defined?(Ractor)
      class Config
        attr_accessor :load_tags, :dump_tags, :domain_types
        def initialize
          @load_tags = {}
          @dump_tags = {}
          @domain_types = {}
        end
      end

      def config
        Ractor.current[:PsychConfig] ||= Config.new
      end

      def load_tags
        config.load_tags
      end

      def dump_tags
        config.dump_tags
      end

      def domain_types
        config.domain_types
      end

      def load_tags=(value)
        config.load_tags = value
      end

      def dump_tags=(value)
        config.dump_tags = value
      end

      def domain_types=(value)
        config.domain_types = value
      end
    else
      attr_accessor :load_tags
      attr_accessor :dump_tags
      attr_accessor :domain_types
    end
  end
  self.load_tags = {}
  self.dump_tags = {}
  self.domain_types = {}
  # :startdoc:
end
PK)J[��'K��*share/gems/gems/psych-5.2.2/lib/psych/y.rbnu�[���# frozen_string_literal: true
module Kernel
  ###
  # An alias for Psych.dump_stream meant to be used with IRB.
  def y *objects
    puts Psych.dump_stream(*objects)
  end
  private :y
end

PK)J[Ե���2share/gems/gems/psych-5.2.2/lib/psych/exception.rbnu�[���# frozen_string_literal: true
module Psych
  class Exception < RuntimeError
  end

  class BadAlias < Exception
  end

  # Subclasses `BadAlias` for backwards compatibility
  class AliasesNotEnabled < BadAlias
    def initialize
      super "Alias parsing was not enabled. To enable it, pass `aliases: true` to `Psych::load` or `Psych::safe_load`."
    end
  end

  # Subclasses `BadAlias` for backwards compatibility
  class AnchorNotDefined < BadAlias
    def initialize anchor_name
      super "An alias referenced an unknown anchor: #{anchor_name}"
    end
  end

  class DisallowedClass < Exception
    def initialize action, klass_name
      super "Tried to #{action} unspecified class: #{klass_name}"
    end
  end
end
PK)J[E���7share/gems/gems/psych-5.2.2/lib/psych/scalar_scanner.rbnu�[���# frozen_string_literal: true

module Psych
  ###
  # Scan scalars for built in types
  class ScalarScanner
    # Taken from http://yaml.org/type/timestamp.html
    TIME = /^-?\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/

    # Taken from http://yaml.org/type/float.html
    # Base 60, [-+]inf and NaN are handled separately
    FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10))$/x

    # Taken from http://yaml.org/type/int.html and modified to ensure at least one numerical symbol exists
    INTEGER_STRICT = /^(?:[-+]?0b[_]*[0-1][0-1_]*             (?# base 2)
                         |[-+]?0[_]*[0-7][0-7_]*              (?# base 8)
                         |[-+]?(0|[1-9][0-9_]*)               (?# base 10)
                         |[-+]?0x[_]*[0-9a-fA-F][0-9a-fA-F_]* (?# base 16))$/x

    # Same as above, but allows commas.
    # Not to YML spec, but kept for backwards compatibility
    INTEGER_LEGACY = /^(?:[-+]?0b[_,]*[0-1][0-1_,]*                (?# base 2)
                         |[-+]?0[_,]*[0-7][0-7_,]*                 (?# base 8)
                         |[-+]?(?:0|[1-9](?:[0-9]|,[0-9]|_[0-9])*) (?# base 10)
                         |[-+]?0x[_,]*[0-9a-fA-F][0-9a-fA-F_,]*    (?# base 16))$/x

    attr_reader :class_loader

    # Create a new scanner
    def initialize class_loader, strict_integer: false
      @symbol_cache = {}
      @class_loader = class_loader
      @strict_integer = strict_integer
    end

    # Tokenize +string+ returning the Ruby object
    def tokenize string
      return nil if string.empty?
      return @symbol_cache[string] if @symbol_cache.key?(string)
      integer_regex = @strict_integer ? INTEGER_STRICT : INTEGER_LEGACY
      # Check for a String type, being careful not to get caught by hash keys, hex values, and
      # special floats (e.g., -.inf).
      if string.match?(%r{^[^\d.:-]?[[:alpha:]_\s!@#$%\^&*(){}<>|/\\~;=]+}) || string.match?(/\n/)
        return string if string.length > 5

        if string.match?(/^[^ytonf~]/i)
          string
        elsif string == '~' || string.match?(/^null$/i)
          nil
        elsif string.match?(/^(yes|true|on)$/i)
          true
        elsif string.match?(/^(no|false|off)$/i)
          false
        else
          string
        end
      elsif string.match?(TIME)
        begin
          parse_time string
        rescue ArgumentError
          string
        end
      elsif string.match?(/^\d{4}-(?:1[012]|0\d|\d)-(?:[12]\d|3[01]|0\d|\d)$/)
        begin
          class_loader.date.strptime(string, '%F', Date::GREGORIAN)
        rescue ArgumentError
          string
        end
      elsif string.match?(/^\+?\.inf$/i)
        Float::INFINITY
      elsif string.match?(/^-\.inf$/i)
        -Float::INFINITY
      elsif string.match?(/^\.nan$/i)
        Float::NAN
      elsif string.match?(/^:./)
        if string =~ /^:(["'])(.*)\1/
          @symbol_cache[string] = class_loader.symbolize($2.sub(/^:/, ''))
        else
          @symbol_cache[string] = class_loader.symbolize(string.sub(/^:/, ''))
        end
      elsif string.match?(/^[-+]?[0-9][0-9_]*(:[0-5]?[0-9]){1,2}$/)
        i = 0
        string.split(':').each_with_index do |n,e|
          i += (n.to_i * 60 ** (e - 2).abs)
        end
        i
      elsif string.match?(/^[-+]?[0-9][0-9_]*(:[0-5]?[0-9]){1,2}\.[0-9_]*$/)
        i = 0
        string.split(':').each_with_index do |n,e|
          i += (n.to_f * 60 ** (e - 2).abs)
        end
        i
      elsif string.match?(FLOAT)
        if string.match?(/\A[-+]?\.\Z/)
          string
        else
          Float(string.delete(',_').gsub(/\.([Ee]|$)/, '\1'))
        end
      elsif string.match?(integer_regex)
        parse_int string
      else
        string
      end
    end

    ###
    # Parse and return an int from +string+
    def parse_int string
      Integer(string.delete(',_'))
    end

    ###
    # Parse and return a Time from +string+
    def parse_time string
      klass = class_loader.load 'Time'

      date, time = *(string.split(/[ tT]/, 2))
      (yy, m, dd) = date.match(/^(-?\d{4})-(\d{1,2})-(\d{1,2})/).captures.map { |x| x.to_i }
      md = time.match(/(\d+:\d+:\d+)(?:\.(\d*))?\s*(Z|[-+]\d+(:\d\d)?)?/)

      (hh, mm, ss) = md[1].split(':').map { |x| x.to_i }
      us = (md[2] ? Rational("0.#{md[2]}") : 0) * 1000000

      time = klass.utc(yy, m, dd, hh, mm, ss, us)

      return time if 'Z' == md[3]
      return klass.at(time.to_i, us) unless md[3]

      tz = md[3].match(/^([+\-]?\d{1,2})\:?(\d{1,2})?$/)[1..-1].compact.map { |digit| Integer(digit, 10) }
      offset = tz.first * 3600

      if offset < 0
        offset -= ((tz[1] || 0) * 60)
      else
        offset += ((tz[1] || 0) * 60)
      end

      klass.new(yy, m, dd, hh, mm, ss+us/(1_000_000r), offset)
    end
  end
end
PK)J[u�>22.share/gems/gems/psych-5.2.2/lib/psych/coder.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # If an object defines +encode_with+, then an instance of Psych::Coder will
  # be passed to the method when the object is being serialized.  The Coder
  # automatically assumes a Psych::Nodes::Mapping is being emitted.  Other
  # objects like Sequence and Scalar may be emitted if +seq=+ or +scalar=+ are
  # called, respectively.
  class Coder
    attr_accessor :tag, :style, :implicit, :object
    attr_reader   :type, :seq

    def initialize tag
      @map      = {}
      @seq      = []
      @implicit = false
      @type     = :map
      @tag      = tag
      @style    = Psych::Nodes::Mapping::BLOCK
      @scalar   = nil
      @object   = nil
    end

    def scalar *args
      if args.length > 0
        warn "#{caller[0]}: Coder#scalar(a,b,c) is deprecated" if $VERBOSE
        @tag, @scalar, _ = args
        @type = :scalar
      end
      @scalar
    end

    # Emit a map.  The coder will be yielded to the block.
    def map tag = @tag, style = @style
      @tag   = tag
      @style = style
      yield self if block_given?
      @map
    end

    # Emit a scalar with +value+ and +tag+
    def represent_scalar tag, value
      self.tag    = tag
      self.scalar = value
    end

    # Emit a sequence with +list+ and +tag+
    def represent_seq tag, list
      @tag = tag
      self.seq = list
    end

    # Emit a sequence with +map+ and +tag+
    def represent_map tag, map
      @tag = tag
      self.map = map
    end

    # Emit an arbitrary object +obj+ and +tag+
    def represent_object tag, obj
      @tag    = tag
      @type   = :object
      @object = obj
    end

    # Emit a scalar with +value+
    def scalar= value
      @type   = :scalar
      @scalar = value
    end

    # Emit a map with +value+
    def map= map
      @type = :map
      @map  = map
    end

    def []= k, v
      @type = :map
      @map[k] = v
    end
    alias :add :[]=

    def [] k
      @type = :map
      @map[k]
    end

    # Emit a sequence of +list+
    def seq= list
      @type = :seq
      @seq  = list
    end
  end
end
PK)J[��,��0share/gems/gems/psych-5.2.2/lib/psych/handler.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # Psych::Handler is an abstract base class that defines the events used
  # when dealing with Psych::Parser.  Clients who want to use Psych::Parser
  # should implement a class that inherits from Psych::Handler and define
  # events that they can handle.
  #
  # Psych::Handler defines all events that Psych::Parser can possibly send to
  # event handlers.
  #
  # See Psych::Parser for more details
  class Handler
    ###
    # Configuration options for dumping YAML.
    class DumperOptions
      attr_accessor :line_width, :indentation, :canonical

      def initialize
        @line_width  = 0
        @indentation = 2
        @canonical   = false
      end
    end

    # Default dumping options
    OPTIONS = DumperOptions.new

    # Events that a Handler should respond to.
    EVENTS = [ :alias,
               :empty,
               :end_document,
               :end_mapping,
               :end_sequence,
               :end_stream,
               :scalar,
               :start_document,
               :start_mapping,
               :start_sequence,
               :start_stream ]

    ###
    # Called with +encoding+ when the YAML stream starts.  This method is
    # called once per stream.  A stream may contain multiple documents.
    #
    # See the constants in Psych::Parser for the possible values of +encoding+.
    def start_stream encoding
    end

    ###
    # Called when the document starts with the declared +version+,
    # +tag_directives+, if the document is +implicit+.
    #
    # +version+ will be an array of integers indicating the YAML version being
    # dealt with, +tag_directives+ is a list of tuples indicating the prefix
    # and suffix of each tag, and +implicit+ is a boolean indicating whether
    # the document is started implicitly.
    #
    # === Example
    #
    # Given the following YAML:
    #
    #   %YAML 1.1
    #   %TAG ! tag:tenderlovemaking.com,2009:
    #   --- !squee
    #
    # The parameters for start_document must be this:
    #
    #   version         # => [1, 1]
    #   tag_directives  # => [["!", "tag:tenderlovemaking.com,2009:"]]
    #   implicit        # => false
    def start_document version, tag_directives, implicit
    end

    ###
    # Called with the document ends.  +implicit+ is a boolean value indicating
    # whether or not the document has an implicit ending.
    #
    # === Example
    #
    # Given the following YAML:
    #
    #   ---
    #     hello world
    #
    # +implicit+ will be true.  Given this YAML:
    #
    #   ---
    #     hello world
    #   ...
    #
    # +implicit+ will be false.
    def end_document implicit
    end

    ###
    # Called when an alias is found to +anchor+.  +anchor+ will be the name
    # of the anchor found.
    #
    # === Example
    #
    # Here we have an example of an array that references itself in YAML:
    #
    #   --- &ponies
    #   - first element
    #   - *ponies
    #
    # &ponies is the anchor, *ponies is the alias.  In this case, alias is
    # called with "ponies".
    def alias anchor
    end

    ###
    # Called when a scalar +value+ is found.  The scalar may have an
    # +anchor+, a +tag+, be implicitly +plain+ or implicitly +quoted+
    #
    # +value+ is the string value of the scalar
    # +anchor+ is an associated anchor or nil
    # +tag+ is an associated tag or nil
    # +plain+ is a boolean value
    # +quoted+ is a boolean value
    # +style+ is an integer indicating the string style
    #
    # See the constants in Psych::Nodes::Scalar for the possible values of
    # +style+
    #
    # === Example
    #
    # Here is a YAML document that exercises most of the possible ways this
    # method can be called:
    #
    #   ---
    #   - !str "foo"
    #   - &anchor fun
    #   - many
    #     lines
    #   - |
    #     many
    #     newlines
    #
    # The above YAML document contains a list with four strings.  Here are
    # the parameters sent to this method in the same order:
    #
    #   # value               anchor    tag     plain   quoted  style
    #   ["foo",               nil,      "!str", false,  false,  3    ]
    #   ["fun",               "anchor", nil,    true,   false,  1    ]
    #   ["many lines",        nil,      nil,    true,   false,  1    ]
    #   ["many\nnewlines\n",  nil,      nil,    false,  true,   4    ]
    #
    def scalar value, anchor, tag, plain, quoted, style
    end

    ###
    # Called when a sequence is started.
    #
    # +anchor+ is the anchor associated with the sequence or nil.
    # +tag+ is the tag associated with the sequence or nil.
    # +implicit+ a boolean indicating whether or not the sequence was implicitly
    # started.
    # +style+ is an integer indicating the list style.
    #
    # See the constants in Psych::Nodes::Sequence for the possible values of
    # +style+.
    #
    # === Example
    #
    # Here is a YAML document that exercises most of the possible ways this
    # method can be called:
    #
    #   ---
    #   - !!seq [
    #     a
    #   ]
    #   - &pewpew
    #     - b
    #
    # The above YAML document consists of three lists, an outer list that
    # contains two inner lists.  Here is a matrix of the parameters sent
    # to represent these lists:
    #
    #   # anchor    tag                       implicit  style
    #   [nil,       nil,                      true,     1     ]
    #   [nil,       "tag:yaml.org,2002:seq",  false,    2     ]
    #   ["pewpew",  nil,                      true,     1     ]

    def start_sequence anchor, tag, implicit, style
    end

    ###
    # Called when a sequence ends.
    def end_sequence
    end

    ###
    # Called when a map starts.
    #
    # +anchor+ is the anchor associated with the map or +nil+.
    # +tag+ is the tag associated with the map or +nil+.
    # +implicit+ is a boolean indicating whether or not the map was implicitly
    # started.
    # +style+ is an integer indicating the mapping style.
    #
    # See the constants in Psych::Nodes::Mapping for the possible values of
    # +style+.
    #
    # === Example
    #
    # Here is a YAML document that exercises most of the possible ways this
    # method can be called:
    #
    #   ---
    #   k: !!map { hello: world }
    #   v: &pewpew
    #     hello: world
    #
    # The above YAML document consists of three maps, an outer map that contains
    # two inner maps.  Below is a matrix of the parameters sent in order to
    # represent these three maps:
    #
    #   # anchor    tag                       implicit  style
    #   [nil,       nil,                      true,     1     ]
    #   [nil,       "tag:yaml.org,2002:map",  false,    2     ]
    #   ["pewpew",  nil,                      true,     1     ]

    def start_mapping anchor, tag, implicit, style
    end

    ###
    # Called when a map ends
    def end_mapping
    end

    ###
    # Called when an empty event happens. (Which, as far as I can tell, is
    # never).
    def empty
    end

    ###
    # Called when the YAML stream ends
    def end_stream
    end

    ###
    # Called before each event with line/column information.
    def event_location(start_line, start_column, end_line, end_column)
    end

    ###
    # Is this handler a streaming handler?
    def streaming?
      false
    end
  end
end
PK)J[O�xf/share/gems/gems/psych-5.2.2/lib/psych/parser.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # YAML event parser class.  This class parses a YAML document and calls
  # events on the handler that is passed to the constructor.  The events can
  # be used for things such as constructing a YAML AST or deserializing YAML
  # documents.  It can even be fed back to Psych::Emitter to emit the same
  # document that was parsed.
  #
  # See Psych::Handler for documentation on the events that Psych::Parser emits.
  #
  # Here is an example that prints out ever scalar found in a YAML document:
  #
  #   # Handler for detecting scalar values
  #   class ScalarHandler < Psych::Handler
  #     def scalar value, anchor, tag, plain, quoted, style
  #       puts value
  #     end
  #   end
  #
  #   parser = Psych::Parser.new(ScalarHandler.new)
  #   parser.parse(yaml_document)
  #
  # Here is an example that feeds the parser back in to Psych::Emitter.  The
  # YAML document is read from STDIN and written back out to STDERR:
  #
  #   parser = Psych::Parser.new(Psych::Emitter.new($stderr))
  #   parser.parse($stdin)
  #
  # Psych uses Psych::Parser in combination with Psych::TreeBuilder to
  # construct an AST of the parsed YAML document.

  class Parser
    class Mark < Struct.new(:index, :line, :column)
    end

    # The handler on which events will be called
    attr_accessor :handler

    # Set the encoding for this parser to +encoding+
    attr_writer :external_encoding

    ###
    # Creates a new Psych::Parser instance with +handler+.  YAML events will
    # be called on +handler+.  See Psych::Parser for more details.

    def initialize handler = Handler.new
      @handler = handler
      @external_encoding = ANY
    end

    ###
    # call-seq:
    #    parser.parse(yaml)
    #
    # Parse the YAML document contained in +yaml+.  Events will be called on
    # the handler set on the parser instance.
    #
    # See Psych::Parser and Psych::Parser#handler

    def parse yaml, path = yaml.respond_to?(:path) ? yaml.path : "<unknown>"
      _native_parse @handler, yaml, path
    end
  end
end
PK)J[��R:��1share/gems/gems/psych-5.2.2/lib/psych/visitors.rbnu�[���# frozen_string_literal: true
require_relative 'visitors/visitor'
require_relative 'visitors/to_ruby'
require_relative 'visitors/emitter'
require_relative 'visitors/yaml_tree'
require_relative 'visitors/json_tree'
require_relative 'visitors/depth_first'
PK)J[�y2K��2share/gems/gems/psych-5.2.2/lib/psych/streaming.rbnu�[���# frozen_string_literal: true
module Psych
  module Streaming
    module ClassMethods
      ###
      # Create a new streaming emitter.  Emitter will print to +io+.  See
      # Psych::Stream for an example.
      def new io
        emitter      = const_get(:Emitter).new(io)
        class_loader = ClassLoader.new
        ss           = ScalarScanner.new class_loader
        super(emitter, ss, {})
      end
    end

    ###
    # Start streaming using +encoding+
    def start encoding = Nodes::Stream::UTF8
      super.tap { yield self if block_given?  }
    ensure
      finish if block_given?
    end

    private
    def register target, obj
    end
  end
end
PK)J[r���/share/gems/gems/psych-5.2.2/lib/psych/stream.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # Psych::Stream is a streaming YAML emitter.  It will not buffer your YAML,
  # but send it straight to an IO.
  #
  # Here is an example use:
  #
  #   stream = Psych::Stream.new($stdout)
  #   stream.start
  #   stream.push({:foo => 'bar'})
  #   stream.finish
  #
  # YAML will be immediately emitted to $stdout with no buffering.
  #
  # Psych::Stream#start will take a block and ensure that Psych::Stream#finish
  # is called, so you can do this form:
  #
  #   stream = Psych::Stream.new($stdout)
  #   stream.start do |em|
  #     em.push(:foo => 'bar')
  #   end
  #
  class Stream < Psych::Visitors::YAMLTree
    class Emitter < Psych::Emitter # :nodoc:
      def end_document implicit_end = !streaming?
        super
      end

      def streaming?
        true
      end
    end

    include Psych::Streaming
    extend Psych::Streaming::ClassMethods
  end
end
PK)J[�L5share/gems/gems/psych-5.2.2/lib/psych/tree_builder.rbnu�[���# frozen_string_literal: true
require_relative 'handler'

module Psych
  ###
  # This class works in conjunction with Psych::Parser to build an in-memory
  # parse tree that represents a YAML document.
  #
  # == Example
  #
  #   parser = Psych::Parser.new Psych::TreeBuilder.new
  #   parser.parse('--- foo')
  #   tree = parser.handler.root
  #
  # See Psych::Handler for documentation on the event methods used in this
  # class.
  class TreeBuilder < Psych::Handler
    # Returns the root node for the built tree
    attr_reader :root

    # Create a new TreeBuilder instance
    def initialize
      @stack = []
      @last  = nil
      @root  = nil

      @start_line   = nil
      @start_column = nil
      @end_line     = nil
      @end_column   = nil
    end

    def event_location(start_line, start_column, end_line, end_column)
      @start_line   = start_line
      @start_column = start_column
      @end_line     = end_line
      @end_column   = end_column
    end

    %w{
      Sequence
      Mapping
    }.each do |node|
      class_eval <<~RUBY, __FILE__, __LINE__ + 1
        def start_#{node.downcase}(anchor, tag, implicit, style)
          n = Nodes::#{node}.new(anchor, tag, implicit, style)
          set_start_location(n)
          @last.children << n
          push n
        end

        def end_#{node.downcase}
          n = pop
          set_end_location(n)
          n
        end
        RUBY
    end

    ###
    # Handles start_document events with +version+, +tag_directives+,
    # and +implicit+ styling.
    #
    # See Psych::Handler#start_document
    def start_document version, tag_directives, implicit
      n = Nodes::Document.new version, tag_directives, implicit
      set_start_location(n)
      @last.children << n
      push n
    end

    ###
    # Handles end_document events with +version+, +tag_directives+,
    # and +implicit+ styling.
    #
    # See Psych::Handler#start_document
    def end_document implicit_end = !streaming?
      @last.implicit_end = implicit_end
      n = pop
      set_end_location(n)
      n
    end

    def start_stream encoding
      @root = Nodes::Stream.new(encoding)
      set_start_location(@root)
      push @root
    end

    def end_stream
      n = pop
      set_end_location(n)
      n
    end

    def scalar value, anchor, tag, plain, quoted, style
      s = Nodes::Scalar.new(value,anchor,tag,plain,quoted,style)
      set_location(s)
      @last.children << s
      s
    end

    def alias anchor
      a = Nodes::Alias.new(anchor)
      set_location(a)
      @last.children << a
      a
    end

    private
    def push value
      @stack.push value
      @last = value
    end

    def pop
      x = @stack.pop
      @last = @stack.last
      x
    end

    def set_location(node)
      set_start_location(node)
      set_end_location(node)
    end

    def set_start_location(node)
      node.start_line   = @start_line
      node.start_column = @start_column
    end

    def set_end_location(node)
      node.end_line   = @end_line
      node.end_column = @end_column
    end
  end
end
PK)J[.�^{{:share/gems/gems/psych-5.2.2/lib/psych/handlers/recorder.rbnu�[���# frozen_string_literal: true
require_relative '../handler'

module Psych
  module Handlers
    ###
    # This handler will capture an event and record the event.  Recorder events
    # are available vial Psych::Handlers::Recorder#events.
    #
    # For example:
    #
    #   recorder = Psych::Handlers::Recorder.new
    #   parser = Psych::Parser.new recorder
    #   parser.parse '--- foo'
    #
    #   recorder.events # => [list of events]
    #
    #   # Replay the events
    #
    #   emitter = Psych::Emitter.new $stdout
    #   recorder.events.each do |m, args|
    #     emitter.send m, *args
    #   end

    class Recorder < Psych::Handler
      attr_reader :events

      def initialize
        @events = []
        super
      end

      EVENTS.each do |event|
        define_method event do |*args|
          @events << [event, args]
        end
      end
    end
  end
end
PK)J[:�Ashare/gems/gems/psych-5.2.2/lib/psych/handlers/document_stream.rbnu�[���# frozen_string_literal: true
require_relative '../tree_builder'

module Psych
  module Handlers
    class DocumentStream < Psych::TreeBuilder # :nodoc:
      def initialize &block
        super
        @block = block
      end

      def start_document version, tag_directives, implicit
        n = Nodes::Document.new version, tag_directives, implicit
        push n
      end

      def end_document implicit_end = !streaming?
        @last.implicit_end = implicit_end
        @block.call pop
      end
    end
  end
end
PK)J[H��LL5share/gems/gems/psych-5.2.2/lib/psych/syntax_error.rbnu�[���# frozen_string_literal: true
require_relative 'exception'

module Psych
  class SyntaxError < Psych::Exception
    attr_reader :file, :line, :column, :offset, :problem, :context

    def initialize file, line, col, offset, problem, context
      err      = [problem, context].compact.join ' '
      filename = file || '<unknown>'
      message  = "(%s): %s at line %d column %d" % [filename, err, line, col]

      @file    = file
      @line    = line
      @column  = col
      @offset  = offset
      @problem = problem
      @context = context
      super(message)
    end
  end
end
PK)J[��	��1share/gems/gems/psych-5.2.2/lib/psych/versions.rbnu�[���# frozen_string_literal: true

module Psych
  # The version of Psych you are using
  VERSION = '5.2.2'

  if RUBY_ENGINE == 'jruby'
    DEFAULT_SNAKEYAML_VERSION = '2.7'.freeze
  end
end
PK)J[/��	�	.share/gems/gems/psych-5.2.2/lib/psych/nodes.rbnu�[���# frozen_string_literal: true
require_relative 'nodes/node'
require_relative 'nodes/stream'
require_relative 'nodes/document'
require_relative 'nodes/sequence'
require_relative 'nodes/scalar'
require_relative 'nodes/mapping'
require_relative 'nodes/alias'

module Psych
  ###
  # = Overview
  #
  # When using Psych.load to deserialize a YAML document, the document is
  # translated to an intermediary AST.  That intermediary AST is then
  # translated in to a Ruby object graph.
  #
  # In the opposite direction, when using Psych.dump, the Ruby object graph is
  # translated to an intermediary AST which is then converted to a YAML
  # document.
  #
  # Psych::Nodes contains all of the classes that make up the nodes of a YAML
  # AST.  You can manually build an AST and use one of the visitors (see
  # Psych::Visitors) to convert that AST to either a YAML document or to a
  # Ruby object graph.
  #
  # Here is an example of building an AST that represents a list with one
  # scalar:
  #
  #   # Create our nodes
  #   stream = Psych::Nodes::Stream.new
  #   doc    = Psych::Nodes::Document.new
  #   seq    = Psych::Nodes::Sequence.new
  #   scalar = Psych::Nodes::Scalar.new('foo')
  #
  #   # Build up our tree
  #   stream.children << doc
  #   doc.children    << seq
  #   seq.children    << scalar
  #
  # The stream is the root of the tree.  We can then convert the tree to YAML:
  #
  #   stream.to_yaml => "---\n- foo\n"
  #
  # Or convert it to Ruby:
  #
  #   stream.to_ruby => [["foo"]]
  #
  # == YAML AST Requirements
  #
  # A valid YAML AST *must* have one Psych::Nodes::Stream at the root.  A
  # Psych::Nodes::Stream node must have 1 or more Psych::Nodes::Document nodes
  # as children.
  #
  # Psych::Nodes::Document nodes must have one and *only* one child.  That child
  # may be one of:
  #
  # * Psych::Nodes::Sequence
  # * Psych::Nodes::Mapping
  # * Psych::Nodes::Scalar
  #
  # Psych::Nodes::Sequence and Psych::Nodes::Mapping nodes may have many
  # children, but Psych::Nodes::Mapping nodes should have an even number of
  # children.
  #
  # All of these are valid children for Psych::Nodes::Sequence and
  # Psych::Nodes::Mapping nodes:
  #
  # * Psych::Nodes::Sequence
  # * Psych::Nodes::Mapping
  # * Psych::Nodes::Scalar
  # * Psych::Nodes::Alias
  #
  # Psych::Nodes::Scalar and Psych::Nodes::Alias are both terminal nodes and
  # should not have any children.
  module Nodes
  end
end
PK)J[�����9share/gems/gems/psych-5.2.2/lib/psych/json/ruby_events.rbnu�[���# frozen_string_literal: true
module Psych
  module JSON
    module RubyEvents # :nodoc:
      def visit_Time o
        formatted = format_time o
        @emitter.scalar formatted, nil, nil, false, true, Nodes::Scalar::DOUBLE_QUOTED
      end

      def visit_DateTime o
        visit_Time o.to_time
      end

      def visit_String o
        @emitter.scalar o.to_s, nil, nil, false, true, Nodes::Scalar::DOUBLE_QUOTED
      end
      alias :visit_Symbol :visit_String
    end
  end
end
PK)J[��9share/gems/gems/psych-5.2.2/lib/psych/json/yaml_events.rbnu�[���# frozen_string_literal: true
module Psych
  module JSON
    module YAMLEvents # :nodoc:
      def start_document version, tag_directives, implicit
        super(version, tag_directives, !streaming?)
      end

      def end_document implicit_end = !streaming?
        super(implicit_end)
      end

      def start_mapping anchor, tag, implicit, style
        super(anchor, nil, true, Nodes::Mapping::FLOW)
      end

      def start_sequence anchor, tag, implicit, style
        super(anchor, nil, true, Nodes::Sequence::FLOW)
      end

      def scalar value, anchor, tag, plain, quoted, style
        if "tag:yaml.org,2002:null" == tag
          super('null', nil, nil, true, false, Nodes::Scalar::PLAIN)
        else
          super
        end
      end
    end
  end
end
PK)J[��:���4share/gems/gems/psych-5.2.2/lib/psych/json/stream.rbnu�[���# frozen_string_literal: true
require_relative 'ruby_events'
require_relative 'yaml_events'

module Psych
  module JSON
    class Stream < Psych::Visitors::JSONTree
      include Psych::JSON::RubyEvents
      include Psych::Streaming
      extend Psych::Streaming::ClassMethods

      class Emitter < Psych::Stream::Emitter # :nodoc:
        include Psych::JSON::YAMLEvents
      end
    end
  end
end
PK)J[�Хcc:share/gems/gems/psych-5.2.2/lib/psych/json/tree_builder.rbnu�[���# frozen_string_literal: true
require_relative 'yaml_events'

module Psych
  module JSON
    ###
    # Psych::JSON::TreeBuilder is an event based AST builder.  Events are sent
    # to an instance of Psych::JSON::TreeBuilder and a JSON AST is constructed.
    class TreeBuilder < Psych::TreeBuilder
      include Psych::JSON::YAMLEvents
    end
  end
end
PK)J[*JJ,share/gems/gems/psych-5.2.2/lib/psych/set.rbnu�[���# frozen_string_literal: true
module Psych
  class Set < ::Hash
  end
end
PK)J[���KK-share/gems/gems/psych-5.2.2/lib/psych/omap.rbnu�[���# frozen_string_literal: true
module Psych
  class Omap < ::Hash
  end
end
PK)J[�m��

5share/gems/gems/psych-5.2.2/lib/psych/class_loader.rbnu�[���# frozen_string_literal: true
require_relative 'omap'
require_relative 'set'

module Psych
  class ClassLoader # :nodoc:
    BIG_DECIMAL = 'BigDecimal'
    COMPLEX     = 'Complex'
    DATE        = 'Date'
    DATE_TIME   = 'DateTime'
    EXCEPTION   = 'Exception'
    OBJECT      = 'Object'
    PSYCH_OMAP  = 'Psych::Omap'
    PSYCH_SET   = 'Psych::Set'
    RANGE       = 'Range'
    RATIONAL    = 'Rational'
    REGEXP      = 'Regexp'
    STRUCT      = 'Struct'
    SYMBOL      = 'Symbol'

    def initialize
      @cache = CACHE.dup
    end

    def load klassname
      return nil if !klassname || klassname.empty?

      find klassname
    end

    def symbolize sym
      symbol
      sym.to_sym
    end

    constants.each do |const|
      konst = const_get const
      class_eval <<~RUBY, __FILE__, __LINE__ + 1
        def #{const.to_s.downcase}
          load #{konst.inspect}
        end
      RUBY
    end

    private

    def find klassname
      @cache[klassname] ||= resolve(klassname)
    end

    def resolve klassname
      name    = klassname
      retried = false

      begin
        path2class(name)
      rescue ArgumentError, NameError => ex
        unless retried
          name    = "Struct::#{name}"
          retried = ex
          retry
        end
        raise retried
      end
    end

    CACHE = Hash[constants.map { |const|
      val = const_get const
      begin
        [val, ::Object.const_get(val)]
      rescue
        nil
      end
    }.compact].freeze

    class Restricted < ClassLoader
      def initialize classes, symbols
        @classes = classes
        @symbols = symbols
        super()
      end

      def symbolize sym
        return super if @symbols.empty?

        if @symbols.include? sym
          super
        else
          raise DisallowedClass.new('load', 'Symbol')
        end
      end

      private

      def find klassname
        if @classes.include? klassname
          super
        else
          raise DisallowedClass.new('load', klassname)
        end
      end
    end
  end
end
PK)J[�믍!!7share/gems/gems/psych-5.2.2/lib/psych/nodes/sequence.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a
    # {YAML sequence}[http://yaml.org/spec/1.1/#sequence/syntax].
    #
    # A YAML sequence is basically a list, and looks like this:
    #
    #   %YAML 1.1
    #   ---
    #   - I am
    #   - a Sequence
    #
    # A YAML sequence may have an anchor like this:
    #
    #   %YAML 1.1
    #   ---
    #   &A [
    #     "This sequence",
    #     "has an anchor"
    #   ]
    #
    # A YAML sequence may also have a tag like this:
    #
    #   %YAML 1.1
    #   ---
    #   !!seq [
    #     "This sequence",
    #     "has a tag"
    #   ]
    #
    # This class represents a sequence in a YAML document.  A
    # Psych::Nodes::Sequence node may have 0 or more children.  Valid children
    # for this node are:
    #
    # * Psych::Nodes::Sequence
    # * Psych::Nodes::Mapping
    # * Psych::Nodes::Scalar
    # * Psych::Nodes::Alias
    class Sequence < Psych::Nodes::Node
      # Any Styles, emitter chooses
      ANY   = 0

      # Block style sequence
      BLOCK = 1

      # Flow style sequence
      FLOW  = 2

      # The anchor for this sequence (if any)
      attr_accessor :anchor

      # The tag name for this sequence (if any)
      attr_accessor :tag

      # Is this sequence started implicitly?
      attr_accessor :implicit

      # The sequence style used
      attr_accessor :style

      ###
      # Create a new object representing a YAML sequence.
      #
      # +anchor+ is the anchor associated with the sequence or nil.
      # +tag+ is the tag associated with the sequence or nil.
      # +implicit+ a boolean indicating whether or not the sequence was
      # implicitly started.
      # +style+ is an integer indicating the list style.
      #
      # See Psych::Handler#start_sequence
      def initialize anchor = nil, tag = nil, implicit = true, style = BLOCK
        super()
        @anchor   = anchor
        @tag      = tag
        @implicit = implicit
        @style    = style
      end

      def sequence?; true; end
    end
  end
end
PK)J[)��))6share/gems/gems/psych-5.2.2/lib/psych/nodes/mapping.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a {YAML Mapping}[http://yaml.org/spec/1.1/#mapping].
    #
    # A Psych::Nodes::Mapping node may have 0 or more children, but must have
    # an even number of children.  Here are the valid children a
    # Psych::Nodes::Mapping node may have:
    #
    # * Psych::Nodes::Sequence
    # * Psych::Nodes::Mapping
    # * Psych::Nodes::Scalar
    # * Psych::Nodes::Alias
    class Mapping < Psych::Nodes::Node
      # Any Map Style
      ANY   = 0

      # Block Map Style
      BLOCK = 1

      # Flow Map Style
      FLOW  = 2

      # The optional anchor for this mapping
      attr_accessor :anchor

      # The optional tag for this mapping
      attr_accessor :tag

      # Is this an implicit mapping?
      attr_accessor :implicit

      # The style of this mapping
      attr_accessor :style

      ###
      # Create a new Psych::Nodes::Mapping object.
      #
      # +anchor+ is the anchor associated with the map or +nil+.
      # +tag+ is the tag associated with the map or +nil+.
      # +implicit+ is a boolean indicating whether or not the map was implicitly
      # started.
      # +style+ is an integer indicating the mapping style.
      #
      # == See Also
      # See also Psych::Handler#start_mapping
      def initialize anchor = nil, tag = nil, implicit = true, style = BLOCK
        super()
        @anchor   = anchor
        @tag      = tag
        @implicit = implicit
        @style    = style
      end

      def mapping?; true; end
    end
  end
end
PK)J[�ɉ4share/gems/gems/psych-5.2.2/lib/psych/nodes/alias.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a {YAML Alias}[http://yaml.org/spec/1.1/#alias].
    # It points to an +anchor+.
    #
    # A Psych::Nodes::Alias is a terminal node and may have no children.
    class Alias < Psych::Nodes::Node
      # The anchor this alias links to
      attr_accessor :anchor

      # Create a new Alias that points to an +anchor+
      def initialize anchor
        @anchor = anchor
      end

      def alias?; true; end
    end
  end
end
PK)J[Ϧ[5share/gems/gems/psych-5.2.2/lib/psych/nodes/stream.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # Represents a YAML stream.  This is the root node for any YAML parse
    # tree.  This node must have one or more child nodes.  The only valid
    # child node for a Psych::Nodes::Stream node is Psych::Nodes::Document.
    class Stream < Psych::Nodes::Node

      # Encodings supported by Psych (and libyaml)

      # Any encoding
      ANY     = Psych::Parser::ANY

      # UTF-8 encoding
      UTF8    = Psych::Parser::UTF8

      # UTF-16LE encoding
      UTF16LE = Psych::Parser::UTF16LE

      # UTF-16BE encoding
      UTF16BE = Psych::Parser::UTF16BE

      # The encoding used for this stream
      attr_accessor :encoding

      ###
      # Create a new Psych::Nodes::Stream node with an +encoding+ that
      # defaults to Psych::Nodes::Stream::UTF8.
      #
      # See also Psych::Handler#start_stream
      def initialize encoding = UTF8
        super()
        @encoding = encoding
      end

      def stream?; true; end
    end
  end
end
PK)J[��AA7share/gems/gems/psych-5.2.2/lib/psych/nodes/document.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This represents a YAML Document.  This node must be a child of
    # Psych::Nodes::Stream.  A Psych::Nodes::Document must have one child,
    # and that child may be one of the following:
    #
    # * Psych::Nodes::Sequence
    # * Psych::Nodes::Mapping
    # * Psych::Nodes::Scalar
    class Document < Psych::Nodes::Node
      # The version of the YAML document
      attr_accessor :version

      # A list of tag directives for this document
      attr_accessor :tag_directives

      # Was this document implicitly created?
      attr_accessor :implicit

      # Is the end of the document implicit?
      attr_accessor :implicit_end

      ###
      # Create a new Psych::Nodes::Document object.
      #
      # +version+ is a list indicating the YAML version.
      # +tags_directives+ is a list of tag directive declarations
      # +implicit+ is a flag indicating whether the document will be implicitly
      # started.
      #
      # == Example:
      # This creates a YAML document object that represents a YAML 1.1 document
      # with one tag directive, and has an implicit start:
      #
      #   Psych::Nodes::Document.new(
      #     [1,1],
      #     [["!", "tag:tenderlovemaking.com,2009:"]],
      #     true
      #   )
      #
      # == See Also
      # See also Psych::Handler#start_document
      def initialize version = [], tag_directives = [], implicit = false
        super()
        @version        = version
        @tag_directives = tag_directives
        @implicit       = implicit
        @implicit_end   = true
      end

      ###
      # Returns the root node.  A Document may only have one root node:
      # http://yaml.org/spec/1.1/#id898031
      def root
        children.first
      end

      def document?; true; end
    end
  end
end
PK)J[�����5share/gems/gems/psych-5.2.2/lib/psych/nodes/scalar.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a {YAML Scalar}[http://yaml.org/spec/1.1/#id858081].
    #
    # This node type is a terminal node and should not have any children.
    class Scalar < Psych::Nodes::Node
      # Any style scalar, the emitter chooses
      ANY           = 0

      # Plain scalar style
      PLAIN         = 1

      # Single quoted style
      SINGLE_QUOTED = 2

      # Double quoted style
      DOUBLE_QUOTED = 3

      # Literal style
      LITERAL       = 4

      # Folded style
      FOLDED        = 5

      # The scalar value
      attr_accessor :value

      # The anchor value (if there is one)
      attr_accessor :anchor

      # The tag value (if there is one)
      attr_accessor :tag

      # Is this a plain scalar?
      attr_accessor :plain

      # Is this scalar quoted?
      attr_accessor :quoted

      # The style of this scalar
      attr_accessor :style

      ###
      # Create a new Psych::Nodes::Scalar object.
      #
      # +value+ is the string value of the scalar
      # +anchor+ is an associated anchor or nil
      # +tag+ is an associated tag or nil
      # +plain+ is a boolean value
      # +quoted+ is a boolean value
      # +style+ is an integer indicating the string style
      #
      # == See Also
      #
      # See also Psych::Handler#scalar
      def initialize value, anchor = nil, tag = nil, plain = true, quoted = false, style = ANY
        @value  = value
        @anchor = anchor
        @tag    = tag
        @plain  = plain
        @quoted = quoted
        @style  = style
      end

      def scalar?; true; end
    end
  end
end
PK)J[���J��3share/gems/gems/psych-5.2.2/lib/psych/nodes/node.rbnu�[���# frozen_string_literal: true
require_relative '../class_loader'
require_relative '../scalar_scanner'

module Psych
  module Nodes
    ###
    # The base class for any Node in a YAML parse tree.  This class should
    # never be instantiated.
    class Node
      include Enumerable

      # The children of this node
      attr_reader :children

      # An associated tag
      attr_reader :tag

      # The line number where this node start
      attr_accessor :start_line

      # The column number where this node start
      attr_accessor :start_column

      # The line number where this node ends
      attr_accessor :end_line

      # The column number where this node ends
      attr_accessor :end_column

      # Create a new Psych::Nodes::Node
      def initialize
        @children = []
      end

      ###
      # Iterate over each node in the tree. Yields each node to +block+ depth
      # first.
      def each &block
        return enum_for :each unless block_given?
        Visitors::DepthFirst.new(block).accept self
      end

      ###
      # Convert this node to Ruby.
      #
      # See also Psych::Visitors::ToRuby
      def to_ruby(symbolize_names: false, freeze: false, strict_integer: false)
        Visitors::ToRuby.create(symbolize_names: symbolize_names, freeze: freeze, strict_integer: strict_integer).accept(self)
      end
      alias :transform :to_ruby

      ###
      # Convert this node to YAML.
      #
      # See also Psych::Visitors::Emitter
      def yaml io = nil, options = {}
        require "stringio"
        real_io = io || StringIO.new(''.encode('utf-8'))

        Visitors::Emitter.new(real_io, options).accept self
        return real_io.string unless io
        io
      end
      alias :to_yaml :yaml

      def alias?;    false; end
      def document?; false; end
      def mapping?;  false; end
      def scalar?;   false; end
      def sequence?; false; end
      def stream?;   false; end
    end
  end
end
PK)J[���Z��9share/gems/gems/psych-5.2.2/lib/psych/visitors/emitter.rbnu�[���# frozen_string_literal: true
module Psych
  module Visitors
    class Emitter < Psych::Visitors::Visitor
      def initialize io, options = {}
        opts = [:indentation, :canonical, :line_width].find_all { |opt|
          options.key?(opt)
        }

        if opts.empty?
          @handler = Psych::Emitter.new io
        else
          du = Handler::DumperOptions.new
          opts.each { |option| du.send :"#{option}=", options[option] }
          @handler = Psych::Emitter.new io, du
        end
      end

      def visit_Psych_Nodes_Stream o
        @handler.start_stream o.encoding
        o.children.each { |c| accept c }
        @handler.end_stream
      end

      def visit_Psych_Nodes_Document o
        @handler.start_document o.version, o.tag_directives, o.implicit
        o.children.each { |c| accept c }
        @handler.end_document o.implicit_end
      end

      def visit_Psych_Nodes_Scalar o
        @handler.scalar o.value, o.anchor, o.tag, o.plain, o.quoted, o.style
      end

      def visit_Psych_Nodes_Sequence o
        @handler.start_sequence o.anchor, o.tag, o.implicit, o.style
        o.children.each { |c| accept c }
        @handler.end_sequence
      end

      def visit_Psych_Nodes_Mapping o
        @handler.start_mapping o.anchor, o.tag, o.implicit, o.style
        o.children.each { |c| accept c }
        @handler.end_mapping
      end

      def visit_Psych_Nodes_Alias o
        @handler.alias o.anchor
      end
    end
  end
end
PK)J[R��(rr=share/gems/gems/psych-5.2.2/lib/psych/visitors/depth_first.rbnu�[���# frozen_string_literal: true
module Psych
  module Visitors
    class DepthFirst < Psych::Visitors::Visitor
      def initialize block
        @block = block
      end

      private

      def nary o
        o.children.each { |x| visit x }
        @block.call o
      end
      alias :visit_Psych_Nodes_Stream   :nary
      alias :visit_Psych_Nodes_Document :nary
      alias :visit_Psych_Nodes_Sequence :nary
      alias :visit_Psych_Nodes_Mapping  :nary

      def terminal o
        @block.call o
      end
      alias :visit_Psych_Nodes_Scalar :terminal
      alias :visit_Psych_Nodes_Alias  :terminal
    end
  end
end
PK)J[��{>QQ;share/gems/gems/psych-5.2.2/lib/psych/visitors/json_tree.rbnu�[���# frozen_string_literal: true
require_relative '../json/ruby_events'

module Psych
  module Visitors
    class JSONTree < YAMLTree
      include Psych::JSON::RubyEvents

      def self.create options = {}
        emitter = Psych::JSON::TreeBuilder.new
        class_loader = ClassLoader.new
        ss           = ScalarScanner.new class_loader
        new(emitter, ss, options)
      end

      def accept target
        if target.respond_to?(:encode_with)
          dump_coder target
        else
          send(@dispatch_cache[target.class], target)
        end
      end
    end
  end
end
PK)J[��LALA;share/gems/gems/psych-5.2.2/lib/psych/visitors/yaml_tree.rbnu�[���# frozen_string_literal: true
require_relative '../tree_builder'
require_relative '../scalar_scanner'
require_relative '../class_loader'

module Psych
  module Visitors
    ###
    # YAMLTree builds a YAML ast given a Ruby object.  For example:
    #
    #   builder = Psych::Visitors::YAMLTree.new
    #   builder << { :foo => 'bar' }
    #   builder.tree # => #<Psych::Nodes::Stream .. }
    #
    class YAMLTree < Psych::Visitors::Visitor
      class Registrar # :nodoc:
        def initialize
          @obj_to_id   = {}.compare_by_identity
          @obj_to_node = {}.compare_by_identity
          @counter     = 0
        end

        def register target, node
          @obj_to_node[target] = node
        end

        def key? target
          @obj_to_node.key? target
        end

        def id_for target
          @obj_to_id[target] ||= (@counter += 1)
        end

        def node_for target
          @obj_to_node[target]
        end
      end

      attr_reader :started, :finished
      alias :finished? :finished
      alias :started? :started

      def self.create options = {}, emitter = nil
        emitter      ||= TreeBuilder.new
        class_loader = ClassLoader.new
        ss           = ScalarScanner.new class_loader
        new(emitter, ss, options)
      end

      def initialize emitter, ss, options
        super()
        @started    = false
        @finished   = false
        @emitter    = emitter
        @st         = Registrar.new
        @ss         = ss
        @options    = options
        @line_width = options[:line_width]
        if @line_width && @line_width < 0
          if @line_width == -1
            # Treat -1 as unlimited line-width, same as libyaml does.
            @line_width = nil
          else
            fail(ArgumentError, "Invalid line_width #{@line_width}, must be non-negative or -1 for unlimited.")
          end
        end
        @stringify_names = options[:stringify_names]
        @coders     = []

        @dispatch_cache = Hash.new do |h,klass|
          method = "visit_#{(klass.name || '').split('::').join('_')}"

          method = respond_to?(method) ? method : h[klass.superclass]

          raise(TypeError, "Can't dump #{target.class}") unless method

          h[klass] = method
        end.compare_by_identity
      end

      def start encoding = Nodes::Stream::UTF8
        @emitter.start_stream(encoding).tap do
          @started = true
        end
      end

      def finish
        @emitter.end_stream.tap do
          @finished = true
        end
      end

      def tree
        finish unless finished?
        @emitter.root
      end

      def push object
        start unless started?
        version = []
        version = [1,1] if @options[:header]

        case @options[:version]
        when Array
          version = @options[:version]
        when String
          version = @options[:version].split('.').map { |x| x.to_i }
        else
          version = [1,1]
        end if @options.key? :version

        @emitter.start_document version, [], false
        accept object
        @emitter.end_document !@emitter.streaming?
      end
      alias :<< :push

      def accept target
        # return any aliases we find
        if @st.key? target
          oid         = @st.id_for target
          node        = @st.node_for target
          anchor      = oid.to_s
          node.anchor = anchor
          return @emitter.alias anchor
        end

        if target.respond_to?(:encode_with)
          dump_coder target
        else
          send(@dispatch_cache[target.class], target)
        end
      end

      def visit_Psych_Omap o
        seq = @emitter.start_sequence(nil, 'tag:yaml.org,2002:omap', false, Nodes::Sequence::BLOCK)
        register(o, seq)

        o.each { |k,v| visit_Hash k => v }
        @emitter.end_sequence
      end

      def visit_Encoding o
        tag = "!ruby/encoding"
        @emitter.scalar o.name, nil, tag, false, false, Nodes::Scalar::ANY
      end

      def visit_Object o
        tag = Psych.dump_tags[o.class]
        unless tag
          klass = o.class == Object ? nil : o.class.name
          tag   = ['!ruby/object', klass].compact.join(':')
        end

        map = @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
        register(o, map)

        dump_ivars o
        @emitter.end_mapping
      end

      alias :visit_Delegator :visit_Object

      def visit_Struct o
        tag = ['!ruby/struct', o.class.name].compact.join(':')

        register o, @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
        o.members.each do |member|
          @emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY
          accept o[member]
        end

        dump_ivars o

        @emitter.end_mapping
      end

      def visit_Exception o
        dump_exception o, o.message.to_s
      end

      def visit_NameError o
        dump_exception o, o.message.to_s
      end

      def visit_Regexp o
        register o, @emitter.scalar(o.inspect, nil, '!ruby/regexp', false, false, Nodes::Scalar::ANY)
      end

      def visit_Date o
        register o, visit_Integer(o.gregorian)
      end

      def visit_DateTime o
        t = o.italy
        formatted = format_time t, t.offset.zero?
        tag = '!ruby/object:DateTime'
        register o, @emitter.scalar(formatted, nil, tag, false, false, Nodes::Scalar::ANY)
      end

      def visit_Time o
        formatted = format_time o
        register o, @emitter.scalar(formatted, nil, nil, true, false, Nodes::Scalar::ANY)
      end

      def visit_Rational o
        register o, @emitter.start_mapping(nil, '!ruby/object:Rational', false, Nodes::Mapping::BLOCK)

        [
          'denominator', o.denominator.to_s,
          'numerator', o.numerator.to_s
        ].each do |m|
          @emitter.scalar m, nil, nil, true, false, Nodes::Scalar::ANY
        end

        @emitter.end_mapping
      end

      def visit_Complex o
        register o, @emitter.start_mapping(nil, '!ruby/object:Complex', false, Nodes::Mapping::BLOCK)

        ['real', o.real.to_s, 'image', o.imag.to_s].each do |m|
          @emitter.scalar m, nil, nil, true, false, Nodes::Scalar::ANY
        end

        @emitter.end_mapping
      end

      def visit_Integer o
        @emitter.scalar o.to_s, nil, nil, true, false, Nodes::Scalar::ANY
      end
      alias :visit_TrueClass :visit_Integer
      alias :visit_FalseClass :visit_Integer

      def visit_Float o
        if o.nan?
          @emitter.scalar '.nan', nil, nil, true, false, Nodes::Scalar::ANY
        elsif o.infinite?
          @emitter.scalar((o.infinite? > 0 ? '.inf' : '-.inf'),
            nil, nil, true, false, Nodes::Scalar::ANY)
        else
          @emitter.scalar o.to_s, nil, nil, true, false, Nodes::Scalar::ANY
        end
      end

      def visit_BigDecimal o
        @emitter.scalar o._dump, nil, '!ruby/object:BigDecimal', false, false, Nodes::Scalar::ANY
      end

      def visit_String o
        plain = true
        quote = true
        style = Nodes::Scalar::PLAIN
        tag   = nil

        if binary?(o)
          o     = [o].pack('m0')
          tag   = '!binary' # FIXME: change to below when syck is removed
          #tag   = 'tag:yaml.org,2002:binary'
          style = Nodes::Scalar::LITERAL
          plain = false
          quote = false
        elsif o.match?(/\n(?!\Z)/)  # match \n except blank line at the end of string
          style = Nodes::Scalar::LITERAL
        elsif o == '<<'
          style = Nodes::Scalar::SINGLE_QUOTED
          tag   = 'tag:yaml.org,2002:str'
          plain = false
          quote = false
        elsif o == 'y' || o == 'Y' || o == 'n' || o == 'N'
          style = Nodes::Scalar::DOUBLE_QUOTED
        elsif @line_width && o.length > @line_width
          style = Nodes::Scalar::FOLDED
        elsif o.match?(/^[^[:word:]][^"]*$/)
          style = Nodes::Scalar::DOUBLE_QUOTED
        elsif not String === @ss.tokenize(o) or /\A0[0-7]*[89]/.match?(o)
          style = Nodes::Scalar::SINGLE_QUOTED
        end

        is_primitive = o.class == ::String
        ivars = is_primitive ? [] : o.instance_variables

        if ivars.empty?
          unless is_primitive
            tag = "!ruby/string:#{o.class}"
            plain = false
            quote = false
          end
          @emitter.scalar o, nil, tag, plain, quote, style
        else
          maptag = '!ruby/string'.dup
          maptag << ":#{o.class}" unless o.class == ::String

          register o, @emitter.start_mapping(nil, maptag, false, Nodes::Mapping::BLOCK)
          @emitter.scalar 'str', nil, nil, true, false, Nodes::Scalar::ANY
          @emitter.scalar o, nil, tag, plain, quote, style

          dump_ivars o

          @emitter.end_mapping
        end
      end

      def visit_Module o
        raise TypeError, "can't dump anonymous module: #{o}" unless o.name
        register o, @emitter.scalar(o.name, nil, '!ruby/module', false, false, Nodes::Scalar::SINGLE_QUOTED)
      end

      def visit_Class o
        raise TypeError, "can't dump anonymous class: #{o}" unless o.name
        register o, @emitter.scalar(o.name, nil, '!ruby/class', false, false, Nodes::Scalar::SINGLE_QUOTED)
      end

      def visit_Range o
        register o, @emitter.start_mapping(nil, '!ruby/range', false, Nodes::Mapping::BLOCK)
        ['begin', o.begin, 'end', o.end, 'excl', o.exclude_end?].each do |m|
          accept m
        end
        @emitter.end_mapping
      end

      def visit_Hash o
        if o.class == ::Hash
          register(o, @emitter.start_mapping(nil, nil, true, Psych::Nodes::Mapping::BLOCK))
          o.each do |k,v|
            accept(@stringify_names && Symbol === k ? k.to_s : k)
            accept v
          end
          @emitter.end_mapping
        else
          visit_hash_subclass o
        end
      end

      def visit_Psych_Set o
        register(o, @emitter.start_mapping(nil, '!set', false, Psych::Nodes::Mapping::BLOCK))

        o.each do |k,v|
          accept(@stringify_names && Symbol === k ? k.to_s : k)
          accept v
        end

        @emitter.end_mapping
      end

      def visit_Array o
        if o.class == ::Array
          visit_Enumerator o
        else
          visit_array_subclass o
        end
      end

      def visit_Enumerator o
        register o, @emitter.start_sequence(nil, nil, true, Nodes::Sequence::BLOCK)
        o.each { |c| accept c }
        @emitter.end_sequence
      end

      def visit_NilClass o
        @emitter.scalar('', nil, 'tag:yaml.org,2002:null', true, false, Nodes::Scalar::ANY)
      end

      def visit_Symbol o
        if o.empty?
          @emitter.scalar "", nil, '!ruby/symbol', false, false, Nodes::Scalar::ANY
        else
          @emitter.scalar ":#{o}", nil, nil, true, false, Nodes::Scalar::ANY
        end
      end

      def visit_BasicObject o
        tag = Psych.dump_tags[o.class]
        tag ||= "!ruby/marshalable:#{o.class.name}"

        map = @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
        register(o, map)

        o.marshal_dump.each(&method(:accept))

        @emitter.end_mapping
      end

      private

      def binary? string
        string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?
      end

      def visit_array_subclass o
        tag = "!ruby/array:#{o.class}"
        ivars = o.instance_variables
        if ivars.empty?
          node = @emitter.start_sequence(nil, tag, false, Nodes::Sequence::BLOCK)
          register o, node
          o.each { |c| accept c }
          @emitter.end_sequence
        else
          node = @emitter.start_mapping(nil, tag, false, Nodes::Sequence::BLOCK)
          register o, node

          # Dump the internal list
          accept 'internal'
          @emitter.start_sequence(nil, nil, true, Nodes::Sequence::BLOCK)
          o.each { |c| accept c }
          @emitter.end_sequence

          # Dump the ivars
          accept 'ivars'
          @emitter.start_mapping(nil, nil, true, Nodes::Sequence::BLOCK)
          ivars.each do |ivar|
            accept ivar
            accept o.instance_variable_get ivar
          end
          @emitter.end_mapping

          @emitter.end_mapping
        end
      end

      def visit_hash_subclass o
        ivars = o.instance_variables
        if ivars.any?
          tag = "!ruby/hash-with-ivars:#{o.class}"
          node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
          register(o, node)

          # Dump the ivars
          accept 'ivars'
          @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
          o.instance_variables.each do |ivar|
            accept ivar
            accept o.instance_variable_get ivar
          end
          @emitter.end_mapping

          # Dump the elements
          accept 'elements'
          @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
          o.each do |k,v|
            accept k
            accept v
          end
          @emitter.end_mapping

          @emitter.end_mapping
        else
          tag = "!ruby/hash:#{o.class}"
          node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
          register(o, node)
          o.each do |k,v|
            accept k
            accept v
          end
          @emitter.end_mapping
        end
      end

      def dump_list o
      end

      def dump_exception o, msg
        tag = ['!ruby/exception', o.class.name].join ':'

        @emitter.start_mapping nil, tag, false, Nodes::Mapping::BLOCK

        if msg
          @emitter.scalar 'message', nil, nil, true, false, Nodes::Scalar::ANY
          accept msg
        end

        @emitter.scalar 'backtrace', nil, nil, true, false, Nodes::Scalar::ANY
        accept o.backtrace

        dump_ivars o

        @emitter.end_mapping
      end

      def format_time time, utc = time.utc?
        if utc
          time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
        else
          time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
        end
      end

      def register target, yaml_obj
        @st.register target, yaml_obj
        yaml_obj
      end

      def dump_coder o
        @coders << o
        tag = Psych.dump_tags[o.class]
        unless tag
          klass = o.class == Object ? nil : o.class.name
          tag   = ['!ruby/object', klass].compact.join(':')
        end

        c = Psych::Coder.new(tag)
        o.encode_with(c)
        emit_coder c, o
      end

      def emit_coder c, o
        case c.type
        when :scalar
          @emitter.scalar c.scalar, nil, c.tag, c.tag.nil?, false, c.style
        when :seq
          @emitter.start_sequence nil, c.tag, c.tag.nil?, c.style
          c.seq.each do |thing|
            accept thing
          end
          @emitter.end_sequence
        when :map
          register o, @emitter.start_mapping(nil, c.tag, c.implicit, c.style)
          c.map.each do |k,v|
            accept k
            accept v
          end
          @emitter.end_mapping
        when :object
          accept c.object
        end
      end

      def dump_ivars target
        target.instance_variables.each do |iv|
          @emitter.scalar("#{iv.to_s.sub(/^@/, '')}", nil, nil, true, false, Nodes::Scalar::ANY)
          accept target.instance_variable_get(iv)
        end
      end
    end

    class RestrictedYAMLTree < YAMLTree
      DEFAULT_PERMITTED_CLASSES = {
        TrueClass => true,
        FalseClass => true,
        NilClass => true,
        Integer => true,
        Float => true,
        String => true,
        Array => true,
        Hash => true,
      }.compare_by_identity.freeze

      def initialize emitter, ss, options
        super
        @permitted_classes = DEFAULT_PERMITTED_CLASSES.dup
        Array(options[:permitted_classes]).each do |klass|
          @permitted_classes[klass] = true
        end
        @permitted_symbols = {}.compare_by_identity
        Array(options[:permitted_symbols]).each do |symbol|
          @permitted_symbols[symbol] = true
        end
        @aliases = options.fetch(:aliases, false)
      end

      def accept target
        if !@aliases && @st.key?(target)
          raise BadAlias, "Tried to dump an aliased object"
        end

        unless Symbol === target || @permitted_classes[target.class]
          raise DisallowedClass.new('dump', target.class.name || target.class.inspect)
        end

        super
      end

      def visit_Symbol sym
        unless @permitted_classes[Symbol] || @permitted_symbols[sym]
          raise DisallowedClass.new('dump', "Symbol(#{sym.inspect})")
        end

        super
      end
    end
  end
end
PK)J[MA�+��9share/gems/gems/psych-5.2.2/lib/psych/visitors/visitor.rbnu�[���# frozen_string_literal: true
module Psych
  module Visitors
    class Visitor
      def accept target
        visit target
      end

      private

      # @api private
      def self.dispatch_cache
        Hash.new do |hash, klass|
          hash[klass] = :"visit_#{klass.name.gsub('::', '_')}"
        end.compare_by_identity
      end

      if defined?(Ractor)
        def dispatch
          @dispatch_cache ||= (Ractor.current[:Psych_Visitors_Visitor] ||= Visitor.dispatch_cache)
        end
      else
        DISPATCH = dispatch_cache
        def dispatch
          DISPATCH
        end
      end

      def visit target
        send dispatch[target.class], target
      end
    end
  end
end
PK)J[�MԓT1T19share/gems/gems/psych-5.2.2/lib/psych/visitors/to_ruby.rbnu�[���# frozen_string_literal: true
require_relative '../scalar_scanner'
require_relative '../class_loader'
require_relative '../exception'

unless defined?(Regexp::NOENCODING)
  Regexp::NOENCODING = 32
end

module Psych
  module Visitors
    ###
    # This class walks a YAML AST, converting each node to Ruby
    class ToRuby < Psych::Visitors::Visitor
      def self.create(symbolize_names: false, freeze: false, strict_integer: false)
        class_loader = ClassLoader.new
        scanner      = ScalarScanner.new class_loader, strict_integer: strict_integer
        new(scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze)
      end

      attr_reader :class_loader

      def initialize ss, class_loader, symbolize_names: false, freeze: false
        super()
        @st = {}
        @ss = ss
        @load_tags = Psych.load_tags
        @domain_types = Psych.domain_types
        @class_loader = class_loader
        @symbolize_names = symbolize_names
        @freeze = freeze
      end

      def accept target
        result = super

        unless @domain_types.empty? || !target.tag
          key = target.tag.sub(/^[!\/]*/, '').sub(/(,\d+)\//, '\1:')
          key = "tag:#{key}" unless key.match?(/^(?:tag:|x-private)/)

          if @domain_types.key? key
            value, block = @domain_types[key]
            result = block.call value, result
          end
        end

        result = deduplicate(result).freeze if @freeze
        result
      end

      def deserialize o
        if klass = resolve_class(@load_tags[o.tag])
          instance = klass.allocate

          if instance.respond_to?(:init_with)
            coder = Psych::Coder.new(o.tag)
            coder.scalar = o.value
            instance.init_with coder
          end

          return instance
        end

        return o.value if o.quoted
        return @ss.tokenize(o.value) unless o.tag

        case o.tag
        when '!binary', 'tag:yaml.org,2002:binary'
          o.value.unpack('m').first
        when /^!(?:str|ruby\/string)(?::(.*))?$/, 'tag:yaml.org,2002:str'
          klass = resolve_class($1)
          if klass
            klass.allocate.replace o.value
          else
            o.value
          end
        when '!ruby/object:BigDecimal'
          require 'bigdecimal' unless defined? BigDecimal
          class_loader.big_decimal._load o.value
        when "!ruby/object:DateTime"
          class_loader.date_time
          t = @ss.parse_time(o.value)
          DateTime.civil(*t.to_a[0, 6].reverse, Rational(t.utc_offset, 86400)) +
            (t.subsec/86400)
        when '!ruby/encoding'
          ::Encoding.find o.value
        when "!ruby/object:Complex"
          class_loader.complex
          Complex(o.value)
        when "!ruby/object:Rational"
          class_loader.rational
          Rational(o.value)
        when "!ruby/class", "!ruby/module"
          resolve_class o.value
        when "tag:yaml.org,2002:float", "!float"
          Float(@ss.tokenize(o.value))
        when "!ruby/regexp"
          klass = class_loader.regexp
          o.value =~ /^\/(.*)\/([mixn]*)$/m
          source  = $1
          options = 0
          lang    = nil
          $2&.each_char do |option|
            case option
            when 'x' then options |= Regexp::EXTENDED
            when 'i' then options |= Regexp::IGNORECASE
            when 'm' then options |= Regexp::MULTILINE
            when 'n' then options |= Regexp::NOENCODING
            else lang = option
            end
          end
          klass.new(*[source, options, lang].compact)
        when "!ruby/range"
          klass = class_loader.range
          args = o.value.split(/([.]{2,3})/, 2).map { |s|
            accept Nodes::Scalar.new(s)
          }
          args.push(args.delete_at(1) == '...')
          klass.new(*args)
        when /^!ruby\/sym(bol)?:?(.*)?$/
          class_loader.symbolize o.value
        else
          @ss.tokenize o.value
        end
      end
      private :deserialize

      def visit_Psych_Nodes_Scalar o
        register o, deserialize(o)
      end

      def visit_Psych_Nodes_Sequence o
        if klass = resolve_class(@load_tags[o.tag])
          instance = klass.allocate

          if instance.respond_to?(:init_with)
            coder = Psych::Coder.new(o.tag)
            coder.seq = o.children.map { |c| accept c }
            instance.init_with coder
          end

          return instance
        end

        case o.tag
        when nil
          register_empty(o)
        when '!omap', 'tag:yaml.org,2002:omap'
          map = register(o, Psych::Omap.new)
          o.children.each { |a|
            map[accept(a.children.first)] = accept a.children.last
          }
          map
        when /^!(?:seq|ruby\/array):(.*)$/
          klass = resolve_class($1)
          list  = register(o, klass.allocate)
          o.children.each { |c| list.push accept c }
          list
        else
          register_empty(o)
        end
      end

      def visit_Psych_Nodes_Mapping o
        if @load_tags[o.tag]
          return revive(resolve_class(@load_tags[o.tag]), o)
        end
        return revive_hash(register(o, {}), o) unless o.tag

        case o.tag
        when /^!ruby\/struct:?(.*)?$/
          klass = resolve_class($1) if $1

          if klass
            s = register(o, klass.allocate)

            members = {}
            struct_members = s.members.map { |x| class_loader.symbolize x }
            o.children.each_slice(2) do |k,v|
              member = accept(k)
              value  = accept(v)
              if struct_members.include?(class_loader.symbolize(member))
                s.send("#{member}=", value)
              else
                members[member.to_s.sub(/^@/, '')] = value
              end
            end
            init_with(s, members, o)
          else
            klass = class_loader.struct
            members = o.children.map { |c| accept c }
            h = Hash[*members]
            s = klass.new(*h.map { |k,v|
              class_loader.symbolize k
            }).new(*h.map { |k,v| v })
            register(o, s)
            s
          end

        when /^!ruby\/object:?(.*)?$/
          name = $1 || 'Object'

          if name == 'Complex'
            class_loader.complex
            h = Hash[*o.children.map { |c| accept c }]
            register o, Complex(h['real'], h['image'])
          elsif name == 'Rational'
            class_loader.rational
            h = Hash[*o.children.map { |c| accept c }]
            register o, Rational(h['numerator'], h['denominator'])
          elsif name == 'Hash'
            revive_hash(register(o, {}), o)
          else
            obj = revive((resolve_class(name) || class_loader.object), o)
            obj
          end

        when /^!(?:str|ruby\/string)(?::(.*))?$/, 'tag:yaml.org,2002:str'
          klass   = resolve_class($1)
          members = {}
          string  = nil

          o.children.each_slice(2) do |k,v|
            key   = accept k
            value = accept v

            if key == 'str'
              if klass
                string = klass.allocate.replace value
              else
                string = value
              end
              register(o, string)
            else
              members[key] = value
            end
          end
          init_with(string, members.map { |k,v| [k.to_s.sub(/^@/, ''),v] }, o)
        when /^!ruby\/array:(.*)$/
          klass = resolve_class($1)
          list  = register(o, klass.allocate)

          members = Hash[o.children.map { |c| accept c }.each_slice(2).to_a]
          list.replace members['internal']

          members['ivars'].each do |ivar, v|
            list.instance_variable_set ivar, v
          end
          list

        when '!ruby/range'
          klass = class_loader.range
          h = Hash[*o.children.map { |c| accept c }]
          register o, klass.new(h['begin'], h['end'], h['excl'])

        when /^!ruby\/exception:?(.*)?$/
          h = Hash[*o.children.map { |c| accept c }]

          e = build_exception((resolve_class($1) || class_loader.exception),
                              h.delete('message'))

          e.set_backtrace h.delete('backtrace') if h.key? 'backtrace'
          init_with(e, h, o)

        when '!set', 'tag:yaml.org,2002:set'
          set = class_loader.psych_set.new
          @st[o.anchor] = set if o.anchor
          o.children.each_slice(2) do |k,v|
            set[accept(k)] = accept(v)
          end
          set

        when /^!ruby\/hash-with-ivars(?::(.*))?$/
          hash = $1 ? resolve_class($1).allocate : {}
          register o, hash
          o.children.each_slice(2) do |key, value|
            case key.value
            when 'elements'
              revive_hash hash, value
            when 'ivars'
              value.children.each_slice(2) do |k,v|
                hash.instance_variable_set accept(k), accept(v)
              end
            end
          end
          hash

        when /^!map:(.*)$/, /^!ruby\/hash:(.*)$/
          revive_hash register(o, resolve_class($1).allocate), o

        when '!omap', 'tag:yaml.org,2002:omap'
          map = register(o, class_loader.psych_omap.new)
          o.children.each_slice(2) do |l,r|
            map[accept(l)] = accept r
          end
          map

        when /^!ruby\/marshalable:(.*)$/
          name = $1
          klass = resolve_class(name)
          obj = register(o, klass.allocate)

          if obj.respond_to?(:init_with)
            init_with(obj, revive_hash({}, o), o)
          elsif obj.respond_to?(:marshal_load)
            marshal_data = o.children.map(&method(:accept))
            obj.marshal_load(marshal_data)
            obj
          else
            raise ArgumentError, "Cannot deserialize #{name}"
          end

        else
          revive_hash(register(o, {}), o)
        end
      end

      def visit_Psych_Nodes_Document o
        accept o.root
      end

      def visit_Psych_Nodes_Stream o
        o.children.map { |c| accept c }
      end

      def visit_Psych_Nodes_Alias o
        @st.fetch(o.anchor) { raise AnchorNotDefined, o.anchor }
      end

      private

      def register node, object
        @st[node.anchor] = object if node.anchor
        object
      end

      def register_empty object
        list = register(object, [])
        object.children.each { |c| list.push accept c }
        list
      end

      def revive_hash hash, o, tagged= false
        o.children.each_slice(2) { |k,v|
          key = accept(k)
          val = accept(v)

          if key == '<<' && k.tag != "tag:yaml.org,2002:str"
            case v
            when Nodes::Alias, Nodes::Mapping
              begin
                hash.merge! val
              rescue TypeError
                hash[key] = val
              end
            when Nodes::Sequence
              begin
                h = {}
                val.reverse_each do |value|
                  h.merge! value
                end
                hash.merge! h
              rescue TypeError
                hash[key] = val
              end
            else
              hash[key] = val
            end
          else
            if !tagged && @symbolize_names && key.is_a?(String)
              key = key.to_sym
            elsif !@freeze
              key = deduplicate(key)
            end

            hash[key] = val
          end

        }
        hash
      end

      if RUBY_VERSION < '2.7'
        def deduplicate key
          if key.is_a?(String)
            # It is important to untaint the string, otherwise it won't
            # be deduplicated into an fstring, but simply frozen.
            -(key.untaint)
          else
            key
          end
        end
      else
        def deduplicate key
          if key.is_a?(String)
            -key
          else
            key
          end
        end
      end

      def merge_key hash, key, val
      end

      def revive klass, node
        s = register(node, klass.allocate)
        init_with(s, revive_hash({}, node, true), node)
      end

      def init_with o, h, node
        c = Psych::Coder.new(node.tag)
        c.map = h

        if o.respond_to?(:init_with)
          o.init_with c
        else
          h.each { |k,v| o.instance_variable_set(:"@#{k}", v) }
        end
        o
      end

      # Convert +klassname+ to a Class
      def resolve_class klassname
        class_loader.load klassname
      end
    end

    class NoAliasRuby < ToRuby
      def visit_Psych_Nodes_Alias o
        raise AliasesNotEnabled
      end
    end
  end
end
PK)J[g��jj1share/gems/gems/psych-5.2.2/lib/psych/core_ext.rbnu�[���# frozen_string_literal: true
class Object
  def self.yaml_tag url
    Psych.add_tag(url, self)
  end

  ###
  # call-seq: to_yaml(options = {})
  #
  # Convert an object to YAML.  See Psych.dump for more information on the
  # available +options+.
  def to_yaml options = {}
    Psych.dump self, options
  end
end

if defined?(::IRB)
  require_relative 'y'
end
PK)J[\g�3share/gems/gems/csv-3.3.2/doc/csv/arguments/io.rdocnu�[���* Argument +io+ should be an IO object that is:
  * Open for reading; on return, the IO object will be closed.
  * Positioned at the beginning.
    To position at the end, for appending, use method CSV.generate.
    For any other positioning, pass a preset \StringIO object instead.
PK)J[K'�tWtW6share/gems/gems/csv-3.3.2/doc/csv/recipes/parsing.rdocnu�[���== Recipes for Parsing \CSV

These recipes are specific code examples for specific \CSV parsing tasks.

For other recipes, see {Recipes for CSV}[./recipes_rdoc.html].

All code snippets on this page assume that the following has been executed:
  require 'csv'

=== Contents

- {Source Formats}[#label-Source+Formats]
  - {Parsing from a String}[#label-Parsing+from+a+String]
    - {Recipe: Parse from String with Headers}[#label-Recipe-3A+Parse+from+String+with+Headers]
    - {Recipe: Parse from String Without Headers}[#label-Recipe-3A+Parse+from+String+Without+Headers]
  - {Parsing from a File}[#label-Parsing+from+a+File]
    - {Recipe: Parse from File with Headers}[#label-Recipe-3A+Parse+from+File+with+Headers]
    - {Recipe: Parse from File Without Headers}[#label-Recipe-3A+Parse+from+File+Without+Headers]
  - {Parsing from an IO Stream}[#label-Parsing+from+an+IO+Stream]
    - {Recipe: Parse from IO Stream with Headers}[#label-Recipe-3A+Parse+from+IO+Stream+with+Headers]
    - {Recipe: Parse from IO Stream Without Headers}[#label-Recipe-3A+Parse+from+IO+Stream+Without+Headers]
- {RFC 4180 Compliance}[#label-RFC+4180+Compliance]
  - {Row Separator}[#label-Row+Separator]
    - {Recipe: Handle Compliant Row Separator}[#label-Recipe-3A+Handle+Compliant+Row+Separator]
    - {Recipe: Handle Non-Compliant Row Separator}[#label-Recipe-3A+Handle+Non-Compliant+Row+Separator]
  - {Column Separator}[#label-Column+Separator]
    - {Recipe: Handle Compliant Column Separator}[#label-Recipe-3A+Handle+Compliant+Column+Separator]
    - {Recipe: Handle Non-Compliant Column Separator}[#label-Recipe-3A+Handle+Non-Compliant+Column+Separator]
  - {Quote Character}[#label-Quote+Character]
    - {Recipe: Handle Compliant Quote Character}[#label-Recipe-3A+Handle+Compliant+Quote+Character]
    - {Recipe: Handle Non-Compliant Quote Character}[#label-Recipe-3A+Handle+Non-Compliant+Quote+Character]
  - {Recipe: Allow Liberal Parsing}[#label-Recipe-3A+Allow+Liberal+Parsing]
- {Special Handling}[#label-Special+Handling]
  - {Special Line Handling}[#label-Special+Line+Handling]
    - {Recipe: Ignore Blank Lines}[#label-Recipe-3A+Ignore+Blank+Lines]
    - {Recipe: Ignore Selected Lines}[#label-Recipe-3A+Ignore+Selected+Lines]
  - {Special Field Handling}[#label-Special+Field+Handling]
    - {Recipe: Strip Fields}[#label-Recipe-3A+Strip+Fields]
    - {Recipe: Handle Null Fields}[#label-Recipe-3A+Handle+Null+Fields]
    - {Recipe: Handle Empty Fields}[#label-Recipe-3A+Handle+Empty+Fields]
- {Converting Fields}[#label-Converting+Fields]
  - {Converting Fields to Objects}[#label-Converting+Fields+to+Objects]
    - {Recipe: Convert Fields to Integers}[#label-Recipe-3A+Convert+Fields+to+Integers]
    - {Recipe: Convert Fields to Floats}[#label-Recipe-3A+Convert+Fields+to+Floats]
    - {Recipe: Convert Fields to Numerics}[#label-Recipe-3A+Convert+Fields+to+Numerics]
    - {Recipe: Convert Fields to Dates}[#label-Recipe-3A+Convert+Fields+to+Dates]
    - {Recipe: Convert Fields to DateTimes}[#label-Recipe-3A+Convert+Fields+to+DateTimes]
    - {Recipe: Convert Fields to Times}[#label-Recipe-3A+Convert+Fields+to+Times]
    - {Recipe: Convert Assorted Fields to Objects}[#label-Recipe-3A+Convert+Assorted+Fields+to+Objects]
    - {Recipe: Convert Fields to Other Objects}[#label-Recipe-3A+Convert+Fields+to+Other+Objects]
  - {Recipe: Filter Field Strings}[#label-Recipe-3A+Filter+Field+Strings]
  - {Recipe: Register Field Converters}[#label-Recipe-3A+Register+Field+Converters]
  - {Using Multiple Field Converters}[#label-Using+Multiple+Field+Converters]
    - {Recipe: Specify Multiple Field Converters in Option :converters}[#label-Recipe-3A+Specify+Multiple+Field+Converters+in+Option+-3Aconverters]
    - {Recipe: Specify Multiple Field Converters in a Custom Converter List}[#label-Recipe-3A+Specify+Multiple+Field+Converters+in+a+Custom+Converter+List]
- {Converting Headers}[#label-Converting+Headers]
  - {Recipe: Convert Headers to Lowercase}[#label-Recipe-3A+Convert+Headers+to+Lowercase]
  - {Recipe: Convert Headers to Symbols}[#label-Recipe-3A+Convert+Headers+to+Symbols]
  - {Recipe: Filter Header Strings}[#label-Recipe-3A+Filter+Header+Strings]
  - {Recipe: Register Header Converters}[#label-Recipe-3A+Register+Header+Converters]
  - {Using Multiple Header Converters}[#label-Using+Multiple+Header+Converters]
    - {Recipe: Specify Multiple Header Converters in Option :header_converters}[#label-Recipe-3A+Specify+Multiple+Header+Converters+in+Option+-3Aheader_converters]
    - {Recipe: Specify Multiple Header Converters in a Custom Header Converter List}[#label-Recipe-3A+Specify+Multiple+Header+Converters+in+a+Custom+Header+Converter+List]
- {Diagnostics}[#label-Diagnostics]
  - {Recipe: Capture Unconverted Fields}[#label-Recipe-3A+Capture+Unconverted+Fields]
  - {Recipe: Capture Field Info}[#label-Recipe-3A+Capture+Field+Info]

=== Source Formats

You can parse \CSV data from a \String, from a \File (via its path), or from an \IO stream.

==== Parsing from a \String

You can parse \CSV data from a \String, with or without headers.

===== Recipe: Parse from \String with Headers

Use class method CSV.parse with option +headers+ to read a source \String all at once
(may have memory resource implications):
  string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  CSV.parse(string, headers: true) # => #<CSV::Table mode:col_or_row row_count:4>

Use instance method CSV#each with option +headers+ to read a source \String one row at a time:
  CSV.new(string, headers: true).each do |row|
    p row
  end
Output:
  #<CSV::Row "Name":"foo" "Value":"0">
  #<CSV::Row "Name":"bar" "Value":"1">
  #<CSV::Row "Name":"baz" "Value":"2">

===== Recipe: Parse from \String Without Headers

Use class method CSV.parse without option +headers+ to read a source \String all at once
(may have memory resource implications):
  string = "foo,0\nbar,1\nbaz,2\n"
  CSV.parse(string) # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Use instance method CSV#each without option +headers+ to read a source \String one row at a time:
  CSV.new(string).each do |row|
    p row
  end
Output:
  ["foo", "0"]
  ["bar", "1"]
  ["baz", "2"]

==== Parsing from a \File

You can parse \CSV data from a \File, with or without headers.

===== Recipe: Parse from \File with Headers

Use class method CSV.read with option +headers+ to read a file all at once:
  string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.write(path, string)
  CSV.read(path, headers: true) # => #<CSV::Table mode:col_or_row row_count:4>

Use class method CSV.foreach with option +headers+ to read one row at a time:
  CSV.foreach(path, headers: true) do |row|
    p row
  end
Output:
  #<CSV::Row "Name":"foo" "Value":"0">
  #<CSV::Row "Name":"bar" "Value":"1">
  #<CSV::Row "Name":"baz" "Value":"2">

===== Recipe: Parse from \File Without Headers

Use class method CSV.read without option +headers+ to read a file all at once:
  string = "foo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.write(path, string)
  CSV.read(path) # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Use class method CSV.foreach without option +headers+ to read one row at a time:
  CSV.foreach(path) do |row|
    p row
  end
Output:
  ["foo", "0"]
  ["bar", "1"]
  ["baz", "2"]

==== Parsing from an \IO Stream

You can parse \CSV data from an \IO stream, with or without headers.

===== Recipe: Parse from \IO Stream with Headers

Use class method CSV.parse with option +headers+ to read an \IO stream all at once:
  string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.write(path, string)
  File.open(path) do |file|
    CSV.parse(file, headers: true)
  end # => #<CSV::Table mode:col_or_row row_count:4>

Use class method CSV.foreach with option +headers+ to read one row at a time:
  File.open(path) do |file|
    CSV.foreach(file, headers: true) do |row|
      p row
    end
  end
Output:
  #<CSV::Row "Name":"foo" "Value":"0">
  #<CSV::Row "Name":"bar" "Value":"1">
  #<CSV::Row "Name":"baz" "Value":"2">

===== Recipe: Parse from \IO Stream Without Headers

Use class method CSV.parse without option +headers+ to read an \IO stream all at once:
  string = "foo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.write(path, string)
  File.open(path) do |file|
    CSV.parse(file)
  end # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Use class method CSV.foreach without option +headers+ to read one row at a time:
  File.open(path) do |file|
    CSV.foreach(file) do |row|
      p row
    end
  end
Output:
  ["foo", "0"]
  ["bar", "1"]
  ["baz", "2"]

=== RFC 4180 Compliance

By default, \CSV parses data that is compliant with
{RFC 4180}[https://www.rfc-editor.org/rfc/rfc4180]
with respect to:
- Row separator.
- Column separator.
- Quote character.

==== Row Separator

RFC 4180 specifies the row separator CRLF (Ruby <tt>"\r\n"</tt>).

Although the \CSV default row separator is <tt>"\n"</tt>,
the parser also by default handles row separator <tt>"\r"</tt> and the RFC-compliant <tt>"\r\n"</tt>.

===== Recipe: Handle Compliant Row Separator

For strict compliance, use option +:row_sep+ to specify row separator <tt>"\r\n"</tt>,
which allows the compliant row separator:
  source = "foo,1\r\nbar,1\r\nbaz,2\r\n"
  CSV.parse(source, row_sep: "\r\n") # => [["foo", "1"], ["bar", "1"], ["baz", "2"]]
But rejects other row separators:
  source = "foo,1\nbar,1\nbaz,2\n"
  CSV.parse(source, row_sep: "\r\n") # Raised MalformedCSVError
  source = "foo,1\rbar,1\rbaz,2\r"
  CSV.parse(source, row_sep: "\r\n") # Raised MalformedCSVError
  source = "foo,1\n\rbar,1\n\rbaz,2\n\r"
  CSV.parse(source, row_sep: "\r\n") # Raised MalformedCSVError

===== Recipe: Handle Non-Compliant Row Separator

For data with non-compliant row separators, use option +:row_sep+.
This example source uses semicolon (<tt>";"</tt>) as its row separator:
  source = "foo,1;bar,1;baz,2;"
  CSV.parse(source, row_sep: ';') # => [["foo", "1"], ["bar", "1"], ["baz", "2"]]

==== Column Separator

RFC 4180 specifies column separator COMMA (Ruby <tt>","</tt>).

===== Recipe: Handle Compliant Column Separator

Because the \CSV default comma separator is ',',
you need not specify option +:col_sep+ for compliant data:
  source = "foo,1\nbar,1\nbaz,2\n"
  CSV.parse(source) # => [["foo", "1"], ["bar", "1"], ["baz", "2"]]

===== Recipe: Handle Non-Compliant Column Separator

For data with non-compliant column separators, use option +:col_sep+.
This example source uses TAB (<tt>"\t"</tt>) as its column separator:
  source = "foo,1\tbar,1\tbaz,2"
  CSV.parse(source, col_sep: "\t") # => [["foo", "1"], ["bar", "1"], ["baz", "2"]]

==== Quote Character

RFC 4180 specifies quote character DQUOTE (Ruby <tt>"\""</tt>).

===== Recipe: Handle Compliant Quote Character

Because the \CSV default quote character is <tt>"\""</tt>,
you need not specify option +:quote_char+ for compliant data:
  source = "\"foo\",\"1\"\n\"bar\",\"1\"\n\"baz\",\"2\"\n"
  CSV.parse(source) # => [["foo", "1"], ["bar", "1"], ["baz", "2"]]

===== Recipe: Handle Non-Compliant Quote Character

For data with non-compliant quote characters, use option +:quote_char+.
This example source uses SQUOTE (<tt>"'"</tt>) as its quote character:
  source = "'foo','1'\n'bar','1'\n'baz','2'\n"
  CSV.parse(source, quote_char: "'") # => [["foo", "1"], ["bar", "1"], ["baz", "2"]]

==== Recipe: Allow Liberal Parsing

Use option +:liberal_parsing+ to specify that \CSV should
attempt to parse input not conformant with RFC 4180, such as double quotes in unquoted fields:
  source = 'is,this "three, or four",fields'
  CSV.parse(source) # Raises MalformedCSVError
  CSV.parse(source, liberal_parsing: true) # => [["is", "this \"three", " or four\"", "fields"]]

=== Special Handling

You can use parsing options to specify special handling for certain lines and fields.

==== Special Line Handling

Use parsing options to specify special handling for blank lines, or for other selected lines.

===== Recipe: Ignore Blank Lines

Use option +:skip_blanks+ to ignore blank lines:
  source = <<-EOT
  foo,0

  bar,1
  baz,2

  ,
  EOT
  parsed = CSV.parse(source, skip_blanks: true)
  parsed # => [["foo", "0"], ["bar", "1"], ["baz", "2"], [nil, nil]]

===== Recipe: Ignore Selected Lines

Use option +:skip_lines+ to ignore selected lines.
  source = <<-EOT
  # Comment
  foo,0
  bar,1
  baz,2
  # Another comment
  EOT
  parsed = CSV.parse(source, skip_lines: /^#/)
  parsed # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

==== Special Field Handling

Use parsing options to specify special handling for certain field values.

===== Recipe: Strip Fields

Use option +:strip+ to strip parsed field values:
  CSV.parse_line(' a , b ', strip: true) # => ["a", "b"]

===== Recipe: Handle Null Fields

Use option +:nil_value+ to specify a value that will replace each field
that is null (no text):
  CSV.parse_line('a,,b,,c', nil_value: 0) # => ["a", 0, "b", 0, "c"]

===== Recipe: Handle Empty Fields

Use option +:empty_value+ to specify a value that will replace each field
that is empty (\String of length 0);
  CSV.parse_line('a,"",b,"",c', empty_value: 'x') # => ["a", "x", "b", "x", "c"]

=== Converting Fields

You can use field converters to change parsed \String fields into other objects,
or to otherwise modify the \String fields.

==== Converting Fields to Objects

Use field converters to change parsed \String objects into other, more specific, objects.

There are built-in field converters for converting to objects of certain classes:
- \Float
- \Integer
- \Date
- \DateTime
- \Time

Other built-in field converters include:
- +:numeric+: converts to \Integer and \Float.
- +:all+: converts to \DateTime, \Integer, \Float.

You can also define field converters to convert to objects of other classes.

===== Recipe: Convert Fields to Integers

Convert fields to \Integer objects using built-in converter +:integer+:
  source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, converters: :integer)
  parsed.map {|row| row['Value'].class} # => [Integer, Integer, Integer]

===== Recipe: Convert Fields to Floats

Convert fields to \Float objects using built-in converter +:float+:
  source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, converters: :float)
  parsed.map {|row| row['Value'].class} # => [Float, Float, Float]

===== Recipe: Convert Fields to Numerics

Convert fields to \Integer and \Float objects using built-in converter +:numeric+:
  source = "Name,Value\nfoo,0\nbar,1.1\nbaz,2.2\n"
  parsed = CSV.parse(source, headers: true, converters: :numeric)
  parsed.map {|row| row['Value'].class} # => [Integer, Float, Float]

===== Recipe: Convert Fields to Dates

Convert fields to \Date objects using built-in converter +:date+:
  source = "Name,Date\nfoo,2001-02-03\nbar,2001-02-04\nbaz,2001-02-03\n"
  parsed = CSV.parse(source, headers: true, converters: :date)
  parsed.map {|row| row['Date'].class} # => [Date, Date, Date]

===== Recipe: Convert Fields to DateTimes

Convert fields to \DateTime objects using built-in converter +:date_time+:
  source = "Name,DateTime\nfoo,2001-02-03\nbar,2001-02-04\nbaz,2020-05-07T14:59:00-05:00\n"
  parsed = CSV.parse(source, headers: true, converters: :date_time)
  parsed.map {|row| row['DateTime'].class} # => [DateTime, DateTime, DateTime]

===== Recipe: Convert Fields to Times

Convert fields to \Time objects using built-in converter +:time+:
  source = "Name,Time\nfoo,2001-02-03\nbar,2001-02-04\nbaz,2020-05-07T14:59:00-05:00\n"
  parsed = CSV.parse(source, headers: true, converters: :time)
  parsed.map {|row| row['Time'].class} # => [Time, Time, Time]

===== Recipe: Convert Assorted Fields to Objects

Convert assorted fields to objects using built-in converter +:all+:
  source = "Type,Value\nInteger,0\nFloat,1.0\nDateTime,2001-02-04\n"
  parsed = CSV.parse(source, headers: true, converters: :all)
  parsed.map {|row| row['Value'].class} # => [Integer, Float, DateTime]

===== Recipe: Convert Fields to Other Objects

Define a custom field converter to convert \String fields into other objects.
This example defines and uses a custom field converter
that converts each column-1 value to a \Rational object:
  rational_converter = proc do |field, field_context|
    field_context.index == 1 ? field.to_r : field
  end
  source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, converters: rational_converter)
  parsed.map {|row| row['Value'].class} # => [Rational, Rational, Rational]

==== Recipe: Filter Field Strings

Define a custom field converter to modify \String fields.
This example defines and uses a custom field converter
that strips whitespace from each field value:
  strip_converter = proc {|field| field.strip }
  source = "Name,Value\n foo , 0 \n bar , 1 \n baz , 2 \n"
  parsed = CSV.parse(source, headers: true, converters: strip_converter)
  parsed['Name'] # => ["foo", "bar", "baz"]
  parsed['Value'] # => ["0", "1", "2"]

==== Recipe: Register Field Converters

Register a custom field converter, assigning it a name;
then refer to the converter by its name:
  rational_converter = proc do |field, field_context|
    field_context.index == 1 ? field.to_r : field
  end
  CSV::Converters[:rational] = rational_converter
  source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, converters: :rational)
  parsed['Value'] # => [(0/1), (1/1), (2/1)]

==== Using Multiple Field Converters

You can use multiple field converters in either of these ways:
- Specify converters in option +:converters+.
- Specify converters in a custom converter list.

===== Recipe: Specify Multiple Field Converters in Option +:converters+

Apply multiple field converters by specifying them in option +:converters+:
  source = "Name,Value\nfoo,0\nbar,1.0\nbaz,2.0\n"
  parsed = CSV.parse(source, headers: true, converters: [:integer, :float])
  parsed['Value'] # => [0, 1.0, 2.0]

===== Recipe: Specify Multiple Field Converters in a Custom Converter List

Apply multiple field converters by defining and registering a custom converter list:
  strip_converter = proc {|field| field.strip }
  CSV::Converters[:strip] = strip_converter
  CSV::Converters[:my_converters] = [:integer, :float, :strip]
  source = "Name,Value\n foo , 0 \n bar , 1.0 \n baz , 2.0 \n"
  parsed = CSV.parse(source, headers: true, converters: :my_converters)
  parsed['Name'] # => ["foo", "bar", "baz"]
  parsed['Value'] # => [0, 1.0, 2.0]

=== Converting Headers

You can use header converters to modify parsed \String headers.

Built-in header converters include:
- +:symbol+: converts \String header to \Symbol.
- +:downcase+: converts \String header to lowercase.

You can also define header converters to otherwise modify header \Strings.

==== Recipe: Convert Headers to Lowercase

Convert headers to lowercase using built-in converter +:downcase+:
  source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, header_converters: :downcase)
  parsed.headers # => ["name", "value"]

==== Recipe: Convert Headers to Symbols

Convert headers to downcased Symbols using built-in converter +:symbol+:
  source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, header_converters: :symbol)
  parsed.headers # => [:name, :value]
  parsed.headers.map {|header| header.class} # => [Symbol, Symbol]

==== Recipe: Filter Header Strings

Define a custom header converter to modify \String fields.
This example defines and uses a custom header converter
that capitalizes each header \String:
  capitalize_converter = proc {|header| header.capitalize }
  source = "NAME,VALUE\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, header_converters: capitalize_converter)
  parsed.headers # => ["Name", "Value"]

==== Recipe: Register Header Converters

Register a custom header converter, assigning it a name;
then refer to the converter by its name:
  capitalize_converter = proc {|header| header.capitalize }
  CSV::HeaderConverters[:capitalize] = capitalize_converter
  source = "NAME,VALUE\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, headers: true, header_converters: :capitalize)
  parsed.headers # => ["Name", "Value"]

==== Using Multiple Header Converters

You can use multiple header converters in either of these ways:
- Specify header converters in option +:header_converters+.
- Specify header converters in a custom header converter list.

===== Recipe: Specify Multiple Header Converters in Option :header_converters

Apply multiple header converters by specifying them in option +:header_converters+:
  source = "Name,Value\nfoo,0\nbar,1.0\nbaz,2.0\n"
  parsed = CSV.parse(source, headers: true, header_converters: [:downcase, :symbol])
  parsed.headers # => [:name, :value]

===== Recipe: Specify Multiple Header Converters in a Custom Header Converter List

Apply multiple header converters by defining and registering a custom header converter list:
  CSV::HeaderConverters[:my_header_converters] = [:symbol, :downcase]
  source = "NAME,VALUE\nfoo,0\nbar,1.0\nbaz,2.0\n"
  parsed = CSV.parse(source, headers: true, header_converters: :my_header_converters)
  parsed.headers # => [:name, :value]

=== Diagnostics

==== Recipe: Capture Unconverted Fields

To capture unconverted field values, use option +:unconverted_fields+:
  source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  parsed = CSV.parse(source, converters: :integer, unconverted_fields: true)
  parsed # => [["Name", "Value"], ["foo", 0], ["bar", 1], ["baz", 2]]
  parsed.each {|row| p row.unconverted_fields }
Output:
  ["Name", "Value"]
  ["foo", "0"]
  ["bar", "1"]
  ["baz", "2"]

==== Recipe: Capture Field Info

To capture field info in a custom converter, accept two block arguments.
The first is the field value; the second is a +CSV::FieldInfo+ object:
  strip_converter = proc {|field, field_info| p field_info; field.strip }
  source = " foo , 0 \n bar , 1 \n baz , 2 \n"
  parsed = CSV.parse(source, converters: strip_converter)
  parsed # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
Output:
  #<struct CSV::FieldInfo index=0, line=1, header=nil>
  #<struct CSV::FieldInfo index=1, line=1, header=nil>
  #<struct CSV::FieldInfo index=0, line=2, header=nil>
  #<struct CSV::FieldInfo index=1, line=2, header=nil>
  #<struct CSV::FieldInfo index=0, line=3, header=nil>
  #<struct CSV::FieldInfo index=1, line=3, header=nil>
PK)J[{�d��"�"8share/gems/gems/csv-3.3.2/doc/csv/recipes/filtering.rdocnu�[���== Recipes for Filtering \CSV

These recipes are specific code examples for specific \CSV filtering tasks.

For other recipes, see {Recipes for CSV}[./recipes_rdoc.html].

All code snippets on this page assume that the following has been executed:
  require 'csv'

=== Contents

- {Source and Output Formats}[#label-Source+and+Output+Formats]
  - {Filtering String to String}[#label-Filtering+String+to+String]
    - {Recipe: Filter String to String parsing Headers}[#label-Recipe-3A+Filter+String+to+String+parsing+Headers]
    - {Recipe: Filter String to String parsing and writing Headers}[#label-Recipe-3A+Filter+String+to+String+parsing+and+writing+Headers]
    - {Recipe: Filter String to String Without Headers}[#label-Recipe-3A+Filter+String+to+String+Without+Headers]
  - {Filtering String to IO Stream}[#label-Filtering+String+to+IO+Stream]
    - {Recipe: Filter String to IO Stream parsing Headers}[#label-Recipe-3A+Filter+String+to+IO+Stream+parsing+Headers]
    - {Recipe: Filter String to IO Stream parsing and writing Headers}[#label-Recipe-3A+Filter+String+to+IO+Stream+parsing+and+writing+Headers]
    - {Recipe: Filter String to IO Stream Without Headers}[#label-Recipe-3A+Filter+String+to+IO+Stream+Without+Headers]
  - {Filtering IO Stream to String}[#label-Filtering+IO+Stream+to+String]
    - {Recipe: Filter IO Stream to String parsing Headers}[#label-Recipe-3A+Filter+IO+Stream+to+String+parsing+Headers]
    - {Recipe: Filter IO Stream to String parsing and writing Headers}[#label-Recipe-3A+Filter+IO+Stream+to+String+parsing+and+writing+Headers]
    - {Recipe: Filter IO Stream to String Without Headers}[#label-Recipe-3A+Filter+IO+Stream+to+String+Without+Headers]
  - {Filtering IO Stream to IO Stream}[#label-Filtering+IO+Stream+to+IO+Stream]
    - {Recipe: Filter IO Stream to IO Stream parsing Headers}[#label-Recipe-3A+Filter+IO+Stream+to+IO+Stream+parsing+Headers]
    - {Recipe: Filter IO Stream to IO Stream parsing and writing Headers}[#label-Recipe-3A+Filter+IO+Stream+to+IO+Stream+parsing+and+writing+Headers]
    - {Recipe: Filter IO Stream to IO Stream Without Headers}[#label-Recipe-3A+Filter+IO+Stream+to+IO+Stream+Without+Headers]

=== Source and Output Formats

You can use a Unix-style "filter" for \CSV data.
The filter reads source \CSV data and writes output \CSV data as modified by the filter.
The input and output \CSV data may be any mixture of \Strings and \IO streams.

==== Filtering \String to \String

You can filter one \String to another, with or without headers.

===== Recipe: Filter \String to \String parsing Headers

Use class method CSV.filter with option +headers+ to filter a \String to another \String:
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  out_string = ''
  CSV.filter(in_string, out_string, headers: true) do |row|
    row['Name'] = row['Name'].upcase
    row['Value'] *= 4
  end
  out_string # => "FOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \String to \String parsing and writing Headers

Use class method CSV.filter with option +headers+ and +out_write_headers+ to filter a \String to another \String including header row:
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  out_string = ''
  CSV.filter(in_string, out_string, headers: true, out_write_headers: true) do |row|
    unless row.is_a?(Array)
      row['Name'] = row['Name'].upcase
      row['Value'] *= 4
    end
  end
  out_string # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \String to \String Without Headers

Use class method CSV.filter without option +headers+ to filter a \String to another \String:
  in_string = "foo,0\nbar,1\nbaz,2\n"
  out_string = ''
  CSV.filter(in_string, out_string) do |row|
    row[0] = row[0].upcase
    row[1] *= 4
  end
  out_string # => "FOO,0000\nBAR,1111\nBAZ,2222\n"

==== Filtering \String to \IO Stream

You can filter a \String to an \IO stream, with or without headers.

===== Recipe: Filter \String to \IO Stream parsing Headers

Use class method CSV.filter with option +headers+ to filter a \String to an \IO stream:
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.open(path, 'w') do |out_io|
    CSV.filter(in_string, out_io, headers: true) do |row|
      row['Name'] = row['Name'].upcase
      row['Value'] *= 4
    end
  end
  p File.read(path) # => "FOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \String to \IO Stream parsing and writing Headers

Use class method CSV.filter with option +headers+ and +out_write_headers+ to filter a \String to an \IO stream including header row:
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.open(path, 'w') do |out_io|
    CSV.filter(in_string, out_io, headers: true, out_write_headers: true ) do |row|
      unless row.is_a?(Array)
        row['Name'] = row['Name'].upcase
        row['Value'] *= 4
      end
    end
  end
  p File.read(path) # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \String to \IO Stream Without Headers

Use class method CSV.filter without option +headers+ to filter a \String to an \IO stream:
  in_string = "foo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.open(path, 'w') do |out_io|
    CSV.filter(in_string, out_io) do |row|
      row[0] = row[0].upcase
      row[1] *= 4
    end
  end
  p File.read(path) # => "FOO,0000\nBAR,1111\nBAZ,2222\n"

==== Filtering \IO Stream to \String

You can filter an \IO stream to a \String, with or without headers.

===== Recipe: Filter \IO Stream to \String parsing Headers

Use class method CSV.filter with option +headers+ to filter an \IO stream to a \String:
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.write(path, in_string)
  out_string = ''
  File.open(path) do |in_io|
    CSV.filter(in_io, out_string, headers: true) do |row|
      row['Name'] = row['Name'].upcase
      row['Value'] *= 4
    end
  end
  out_string # => "FOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \IO Stream to \String parsing and writing Headers

Use class method CSV.filter with option +headers+ and +out_write_headers+ to filter an \IO stream to a \String including header row:
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.write(path, in_string)
  out_string = ''
  File.open(path) do |in_io|
    CSV.filter(in_io, out_string, headers: true, out_write_headers: true) do |row|
      unless row.is_a?(Array)
        row['Name'] = row['Name'].upcase
        row['Value'] *= 4
      end
    end
  end
  out_string # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \IO Stream to \String Without Headers

Use class method CSV.filter without option +headers+ to filter an \IO stream to a \String:
  in_string = "foo,0\nbar,1\nbaz,2\n"
  path = 't.csv'
  File.write(path, in_string)
  out_string = ''
  File.open(path) do |in_io|
    CSV.filter(in_io, out_string) do |row|
      row[0] = row[0].upcase
      row[1] *= 4
    end
  end
  out_string # => "FOO,0000\nBAR,1111\nBAZ,2222\n"

==== Filtering \IO Stream to \IO Stream

You can filter an \IO stream to another \IO stream, with or without headers.

===== Recipe: Filter \IO Stream to \IO Stream parsing Headers

Use class method CSV.filter with option +headers+ to filter an \IO stream to another \IO stream:
  in_path = 't.csv'
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  File.write(in_path, in_string)
  out_path = 'u.csv'
  File.open(in_path) do |in_io|
    File.open(out_path, 'w') do |out_io|
      CSV.filter(in_io, out_io, headers: true) do |row|
        row['Name'] = row['Name'].upcase
        row['Value'] *= 4
      end
    end
  end
  p File.read(out_path) # => "FOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \IO Stream to \IO Stream parsing and writing Headers

Use class method CSV.filter with option +headers+ and +out_write_headers+ to filter an \IO stream to another \IO stream including header row:
  in_path = 't.csv'
  in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  File.write(in_path, in_string)
  out_path = 'u.csv'
  File.open(in_path) do |in_io|
    File.open(out_path, 'w') do |out_io|
      CSV.filter(in_io, out_io, headers: true, out_write_headers: true) do |row|
        unless row.is_a?(Array)
          row['Name'] = row['Name'].upcase
          row['Value'] *= 4
        end
      end
    end
  end
  p File.read(out_path) # => "Name,Value\nFOO,0000\nBAR,1111\nBAZ,2222\n"

===== Recipe: Filter \IO Stream to \IO Stream Without Headers

Use class method CSV.filter without option +headers+ to filter an \IO stream to another \IO stream:
  in_path = 't.csv'
  in_string = "foo,0\nbar,1\nbaz,2\n"
  File.write(in_path, in_string)
  out_path = 'u.csv'
  File.open(in_path) do |in_io|
    File.open(out_path, 'w') do |out_io|
      CSV.filter(in_io, out_io) do |row|
        row[0] = row[0].upcase
        row[1] *= 4
      end
    end
  end
  p File.read(out_path) # => "FOO,0000\nBAR,1111\nBAZ,2222\n"
PK)J[rDM��6share/gems/gems/csv-3.3.2/doc/csv/recipes/recipes.rdocnu�[���== Recipes for \CSV

The recipes are specific code examples for specific tasks. See:
- {Recipes for Parsing CSV}[./parsing_rdoc.html]
- {Recipes for Generating CSV}[./generating_rdoc.html]
- {Recipes for Filtering CSV}[./filtering_rdoc.html]
PK)J[c%�73)3)9share/gems/gems/csv-3.3.2/doc/csv/recipes/generating.rdocnu�[���== Recipes for Generating \CSV

These recipes are specific code examples for specific \CSV generating tasks.

For other recipes, see {Recipes for CSV}[./recipes_rdoc.html].

All code snippets on this page assume that the following has been executed:
  require 'csv'

=== Contents

- {Output Formats}[#label-Output+Formats]
  - {Generating to a String}[#label-Generating+to+a+String]
    - {Recipe: Generate to String with Headers}[#label-Recipe-3A+Generate+to+String+with+Headers]
    - {Recipe: Generate to String Without Headers}[#label-Recipe-3A+Generate+to+String+Without+Headers]
  - {Generating to a File}[#label-Generating+to+a+File]
    - {Recipe: Generate to File with Headers}[#label-Recipe-3A+Generate+to+File+with+Headers]
    - {Recipe: Generate to File Without Headers}[#label-Recipe-3A+Generate+to+File+Without+Headers]
  - {Generating to IO an Stream}[#label-Generating+to+an+IO+Stream]
    - {Recipe: Generate to IO Stream with Headers}[#label-Recipe-3A+Generate+to+IO+Stream+with+Headers]
    - {Recipe: Generate to IO Stream Without Headers}[#label-Recipe-3A+Generate+to+IO+Stream+Without+Headers]
- {Converting Fields}[#label-Converting+Fields]
  - {Recipe: Filter Generated Field Strings}[#label-Recipe-3A+Filter+Generated+Field+Strings]
  - {Recipe: Specify Multiple Write Converters}[#label-Recipe-3A+Specify+Multiple+Write+Converters]
- {RFC 4180 Compliance}[#label-RFC+4180+Compliance]
  - {Row Separator}[#label-Row+Separator]
    - {Recipe: Generate Compliant Row Separator}[#label-Recipe-3A+Generate+Compliant+Row+Separator]
    - {Recipe: Generate Non-Compliant Row Separator}[#label-Recipe-3A+Generate+Non-Compliant+Row+Separator]
  - {Column Separator}[#label-Column+Separator]
    - {Recipe: Generate Compliant Column Separator}[#label-Recipe-3A+Generate+Compliant+Column+Separator]
    - {Recipe: Generate Non-Compliant Column Separator}[#label-Recipe-3A+Generate+Non-Compliant+Column+Separator]
  - {Quotes}[#label-Quotes]
    - {Recipe: Quote All Fields}[#label-Recipe-3A+Quote+All+Fields]
    - {Recipe: Quote Empty Fields}[#label-Recipe-3A+Quote+Empty+Fields]
    - {Recipe: Generate Compliant Quote Character}[#label-Recipe-3A+Generate+Compliant+Quote+Character]
    - {Recipe: Generate Non-Compliant Quote Character}[#label-Recipe-3A+Generate+Non-Compliant+Quote+Character]

=== Output Formats

You can generate \CSV output to a \String, to a \File (via its path), or to an \IO stream.

==== Generating to a \String

You can generate \CSV output to a \String, with or without headers.

===== Recipe: Generate to \String with Headers

Use class method CSV.generate with option +headers+ to generate to a \String.

This example uses method CSV#<< to append the rows
that are to be generated:
  output_string = CSV.generate('', headers: ['Name', 'Value'], write_headers: true) do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "Name,Value\nFoo,0\nBar,1\nBaz,2\n"

===== Recipe: Generate to \String Without Headers

Use class method CSV.generate without option +headers+ to generate to a \String.

This example uses method CSV#<< to append the rows
that are to be generated:
  output_string = CSV.generate do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "Foo,0\nBar,1\nBaz,2\n"

==== Generating to a \File

You can generate /CSV data to a \File, with or without headers.

===== Recipe: Generate to \File with Headers

Use class method CSV.open with option +headers+ generate to a \File.

This example uses method CSV#<< to append the rows
that are to be generated:
  path = 't.csv'
  CSV.open(path, 'w', headers: ['Name', 'Value'], write_headers: true) do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  p File.read(path) # => "Name,Value\nFoo,0\nBar,1\nBaz,2\n"

===== Recipe: Generate to \File Without Headers

Use class method CSV.open without option +headers+ to generate to a \File.

This example uses method CSV#<< to append the rows
that are to be generated:
  path = 't.csv'
  CSV.open(path, 'w') do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  p File.read(path) # => "Foo,0\nBar,1\nBaz,2\n"

==== Generating to an \IO Stream

You can generate \CSV data to an \IO stream, with or without headers.

==== Recipe: Generate to \IO Stream with Headers

Use class method CSV.new with option +headers+ to generate \CSV data to an \IO stream:
  path = 't.csv'
  File.open(path, 'w') do |file|
    csv = CSV.new(file, headers: ['Name', 'Value'], write_headers: true)
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  p File.read(path) # => "Name,Value\nFoo,0\nBar,1\nBaz,2\n"

===== Recipe: Generate to \IO Stream Without Headers

Use class method CSV.new without option +headers+ to generate \CSV data to an \IO stream:
  path = 't.csv'
  File.open(path, 'w') do |file|
    csv = CSV.new(file)
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  p File.read(path) # => "Foo,0\nBar,1\nBaz,2\n"

=== Converting Fields

You can use _write_ _converters_ to convert fields when generating \CSV.

==== Recipe: Filter Generated Field Strings

Use option <tt>:write_converters</tt> and a custom converter to convert field values when generating \CSV.

This example defines and uses a custom write converter to strip whitespace from generated fields:
  strip_converter = proc {|field| field.respond_to?(:strip) ? field.strip : field }
  output_string = CSV.generate(write_converters: strip_converter) do |csv|
    csv << [' foo ', 0]
    csv << [' bar ', 1]
    csv << [' baz ', 2]
  end
  output_string # => "foo,0\nbar,1\nbaz,2\n"

==== Recipe: Specify Multiple Write Converters

Use option <tt>:write_converters</tt> and multiple custom converters
to convert field values when generating \CSV.

This example defines and uses two custom write converters to strip and upcase generated fields:
  strip_converter = proc {|field| field.respond_to?(:strip) ? field.strip : field }
  upcase_converter = proc {|field| field.respond_to?(:upcase) ? field.upcase : field }
  converters = [strip_converter, upcase_converter]
  output_string = CSV.generate(write_converters: converters) do |csv|
    csv << [' foo ', 0]
    csv << [' bar ', 1]
    csv << [' baz ', 2]
  end
  output_string # => "FOO,0\nBAR,1\nBAZ,2\n"

=== RFC 4180 Compliance

By default, \CSV generates data that is compliant with
{RFC 4180}[https://www.rfc-editor.org/rfc/rfc4180]
with respect to:
- Column separator.
- Quote character.

==== Row Separator

RFC 4180 specifies the row separator CRLF (Ruby <tt>"\r\n"</tt>).

===== Recipe: Generate Compliant Row Separator

For strict compliance, use option +:row_sep+ to specify row separator <tt>"\r\n"</tt>:
  output_string = CSV.generate('', row_sep: "\r\n") do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "Foo,0\r\nBar,1\r\nBaz,2\r\n"

===== Recipe: Generate Non-Compliant Row Separator

For data with non-compliant row separators, use option +:row_sep+ with a different value:
This example source uses semicolon (<tt>";'</tt>) as its row separator:
  output_string = CSV.generate('', row_sep: ";") do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "Foo,0;Bar,1;Baz,2;"

==== Column Separator

RFC 4180 specifies column separator COMMA (Ruby <tt>","</tt>).

===== Recipe: Generate Compliant Column Separator

Because the \CSV default comma separator is <tt>","</tt>,
you need not specify option +:col_sep+ for compliant data:
  output_string = CSV.generate('') do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "Foo,0\nBar,1\nBaz,2\n"

===== Recipe: Generate Non-Compliant Column Separator

For data with non-compliant column separators, use option +:col_sep+.
This example source uses TAB (<tt>"\t"</tt>) as its column separator:
  output_string = CSV.generate('', col_sep: "\t") do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "Foo\t0\nBar\t1\nBaz\t2\n"

==== Quotes

IFC 4180 allows most fields to be quoted or not.
By default, \CSV does not quote most fields.

However, a field containing the current row separator, column separator,
or quote character is automatically quoted, producing IFC 4180 compliance:
  # Field contains row separator.
  output_string = CSV.generate('') do |csv|
    row_sep = csv.row_sep
    csv << ["Foo#{row_sep}Foo", 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "\"Foo\nFoo\",0\nBar,1\nBaz,2\n"
  # Field contains column separator.
  output_string = CSV.generate('') do |csv|
    col_sep = csv.col_sep
    csv << ["Foo#{col_sep}Foo", 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "\"Foo,Foo\",0\nBar,1\nBaz,2\n"
  # Field contains quote character.
  output_string = CSV.generate('') do |csv|
    quote_char = csv.quote_char
    csv << ["Foo#{quote_char}Foo", 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "\"Foo\"\"Foo\",0\nBar,1\nBaz,2\n"

===== Recipe: Quote All Fields

Use option +:force_quotes+ to force quoted fields:
  output_string = CSV.generate('', force_quotes: true) do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "\"Foo\",\"0\"\n\"Bar\",\"1\"\n\"Baz\",\"2\"\n"

===== Recipe: Quote Empty Fields

Use option +:quote_empty+ to force quoting for empty fields:
  output_string = CSV.generate('', quote_empty: true) do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['', 2]
  end
  output_string # => "Foo,0\nBar,1\n\"\",2\n"

===== Recipe: Generate Compliant Quote Character

RFC 4180 specifies quote character DQUOTE (Ruby <tt>"\""</tt>).

Because the \CSV default quote character is also <tt>"\""</tt>,
you need not specify option +:quote_char+ for compliant data:
  output_string = CSV.generate('', force_quotes: true) do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "\"Foo\",\"0\"\n\"Bar\",\"1\"\n\"Baz\",\"2\"\n"

===== Recipe: Generate Non-Compliant Quote Character

For data with non-compliant quote characters, use option +:quote_char+.
This example source uses SQUOTE (<tt>"'"</tt>) as its quote character:
  output_string = CSV.generate('', quote_char: "'", force_quotes: true) do |csv|
    csv << ['Foo', 0]
    csv << ['Bar', 1]
    csv << ['Baz', 2]
  end
  output_string # => "'Foo','0'\n'Bar','1'\n'Baz','2'\n"
PK)J[7�B���=share/gems/gems/csv-3.3.2/doc/csv/options/common/col_sep.rdocnu�[���====== Option +col_sep+

Specifies the \String column separator to be used
for both parsing and generating.
The \String will be transcoded into the data's \Encoding before use.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:col_sep) # => "," (comma)

Using the default (comma):
  str = CSV.generate do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo,0\nbar,1\nbaz,2\n"
  ary = CSV.parse(str)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Using +:+ (colon):
  col_sep = ':'
  str = CSV.generate(col_sep: col_sep) do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo:0\nbar:1\nbaz:2\n"
  ary = CSV.parse(str, col_sep: col_sep)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Using +::+ (two colons):
  col_sep = '::'
  str = CSV.generate(col_sep: col_sep) do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo::0\nbar::1\nbaz::2\n"
  ary = CSV.parse(str, col_sep: col_sep)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Using <tt>''</tt> (empty string):
  col_sep = ''
  str = CSV.generate(col_sep: col_sep) do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo0\nbar1\nbaz2\n"

---

Raises an exception if parsing with the empty \String:
  col_sep = ''
  # Raises ArgumentError (:col_sep must be 1 or more characters: "")
  CSV.parse("foo0\nbar1\nbaz2\n", col_sep: col_sep)

PK)J[�[B�
�
=share/gems/gems/csv-3.3.2/doc/csv/options/common/row_sep.rdocnu�[���====== Option +row_sep+

Specifies the row separator, a \String or the \Symbol <tt>:auto</tt> (see below),
to be used for both parsing and generating.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:row_sep) # => :auto

---

When +row_sep+ is a \String, that \String becomes the row separator.
The String will be transcoded into the data's Encoding before use.

Using <tt>"\n"</tt>:
  row_sep = "\n"
  str = CSV.generate(row_sep: row_sep) do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo,0\nbar,1\nbaz,2\n"
  ary = CSV.parse(str)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Using <tt>|</tt> (pipe):
  row_sep = '|'
  str = CSV.generate(row_sep: row_sep) do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo,0|bar,1|baz,2|"
  ary = CSV.parse(str, row_sep: row_sep)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Using <tt>--</tt> (two hyphens):
  row_sep = '--'
  str = CSV.generate(row_sep: row_sep) do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo,0--bar,1--baz,2--"
  ary = CSV.parse(str, row_sep: row_sep)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Using <tt>''</tt> (empty string):
  row_sep = ''
  str = CSV.generate(row_sep: row_sep) do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo,0bar,1baz,2"
  ary = CSV.parse(str, row_sep: row_sep)
  ary # => [["foo", "0bar", "1baz", "2"]]

---

When +row_sep+ is the \Symbol +:auto+ (the default),
generating uses <tt>"\n"</tt> as the row separator:
  str = CSV.generate do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo,0\nbar,1\nbaz,2\n"

Parsing, on the other hand, invokes auto-discovery of the row separator.

Auto-discovery reads ahead in the data looking for the next <tt>\r\n</tt>, +\n+, or +\r+ sequence.
The sequence will be selected even if it occurs in a quoted field,
assuming that you would have the same line endings there.

Example:
  str = CSV.generate do |csv|
    csv << [:foo, 0]
    csv << [:bar, 1]
    csv << [:baz, 2]
  end
  str # => "foo,0\nbar,1\nbaz,2\n"
  ary = CSV.parse(str)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

The default <tt>$INPUT_RECORD_SEPARATOR</tt> (<tt>$/</tt>) is used
if any of the following is true:
* None of those sequences is found.
* Data is +ARGF+, +STDIN+, +STDOUT+, or +STDERR+.
* The stream is only available for output.

Obviously, discovery takes a little time. Set manually if speed is important. Also note that IO objects should be opened in binary mode on Windows if this feature will be used as the line-ending translation can cause problems with resetting the document position to where it was before the read ahead.
PK)J[�E1�mm@share/gems/gems/csv-3.3.2/doc/csv/options/common/quote_char.rdocnu�[���====== Option +quote_char+

Specifies the character (\String of length 1) used used to quote fields
in both parsing and generating.
This String will be transcoded into the data's \Encoding before use.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:quote_char) # => "\"" (double quote)

This is useful for an application that incorrectly uses <tt>'</tt> (single-quote)
to quote fields, instead of the correct <tt>"</tt> (double-quote).

Using the default (double quote):
  str = CSV.generate do |csv|
    csv << ['foo', 0]
    csv << ["'bar'", 1]
    csv << ['"baz"', 2]
  end
  str # => "foo,0\n'bar',1\n\"\"\"baz\"\"\",2\n"
  ary = CSV.parse(str)
  ary # => [["foo", "0"], ["'bar'", "1"], ["\"baz\"", "2"]]

Using <tt>'</tt> (single-quote):
  quote_char = "'"
  str = CSV.generate(quote_char: quote_char) do |csv|
    csv << ['foo', 0]
    csv << ["'bar'", 1]
    csv << ['"baz"', 2]
  end
  str # => "foo,0\n'''bar''',1\n\"baz\",2\n"
  ary = CSV.parse(str, quote_char: quote_char)
  ary # => [["foo", "0"], ["'bar'", "1"], ["\"baz\"", "2"]]

---

Raises an exception if the \String length is greater than 1:
  # Raises ArgumentError (:quote_char has to be nil or a single character String)
  CSV.new('', quote_char: 'xx')

Raises an exception if the value is not a \String:
  # Raises ArgumentError (:quote_char has to be nil or a single character String)
  CSV.new('', quote_char: :foo)
PK)J[��jd��Fshare/gems/gems/csv-3.3.2/doc/csv/options/generating/force_quotes.rdocnu�[���====== Option +force_quotes+

Specifies the boolean that determines whether each output field is to be double-quoted.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:force_quotes) # => false

For examples in this section:
  ary = ['foo', 0, nil]

Using the default, +false+:
  str = CSV.generate_line(ary)
  str # => "foo,0,\n"

Using +true+:
  str = CSV.generate_line(ary, force_quotes: true)
  str # => "\"foo\",\"0\",\"\"\n"
PK)J[`a|]~~Ishare/gems/gems/csv-3.3.2/doc/csv/options/generating/write_nil_value.rdocnu�[���====== Option +write_nil_value+

Specifies the object that is to be substituted for each +nil+-valued field.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:write_nil_value) # => nil

Without the option:
  str = CSV.generate_line(['a', nil, 'c', nil])
  str # => "a,,c,\n"

With the option:
  str = CSV.generate_line(['a', nil, 'c', nil], write_nil_value: "x")
  str # => "a,x,c,x\n"
PK)J[>J0��Kshare/gems/gems/csv-3.3.2/doc/csv/options/generating/write_empty_value.rdocnu�[���====== Option +write_empty_value+

Specifies the object that is to be substituted for each field
that has an empty \String.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:write_empty_value) # => ""

Without the option:
  str = CSV.generate_line(['a', '', 'c', ''])
  str # => "a,\"\",c,\"\"\n"

With the option:
  str = CSV.generate_line(['a', '', 'c', ''], write_empty_value: "x")
  str # => "a,x,c,x\n"
PK)J[l|�^^Eshare/gems/gems/csv-3.3.2/doc/csv/options/generating/quote_empty.rdocnu�[���====== Option +quote_empty+

Specifies the boolean that determines whether an empty value is to be double-quoted.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:quote_empty) # => true

With the default +true+:
  CSV.generate_line(['"', ""]) # => "\"\"\"\",\"\"\n"

With +false+:
    CSV.generate_line(['"', ""], quote_empty: false) # => "\"\"\"\",\n"
PK)J[�����Gshare/gems/gems/csv-3.3.2/doc/csv/options/generating/write_headers.rdocnu�[���====== Option +write_headers+

Specifies the boolean that determines whether a header row is included in the output;
ignored if there are no headers.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:write_headers) # => nil

Without +write_headers+:
  file_path = 't.csv'
  CSV.open(file_path,'w',
      :headers => ['Name','Value']
    ) do |csv|
      csv << ['foo', '0']
  end
  CSV.open(file_path) do |csv|
    csv.shift
  end # => ["foo", "0"]

With +write_headers+":
  CSV.open(file_path,'w',
      :write_headers => true,
      :headers => ['Name','Value']
    ) do |csv|
      csv << ['foo', '0']
  end
  CSV.open(file_path) do |csv|
    csv.shift
  end # => ["Name", "Value"]
PK)J[LH�yyJshare/gems/gems/csv-3.3.2/doc/csv/options/generating/write_converters.rdocnu�[���====== Option +write_converters+

Specifies converters to be used in generating fields.
See {Write Converters}[#class-CSV-label-Write+Converters]

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:write_converters) # => nil

With no write converter:
  str = CSV.generate_line(["\na\n", "\tb\t", " c "])
  str # => "\"\na\n\",\tb\t, c \n"

With a write converter:
  strip_converter = proc {|field| field.strip }
  str = CSV.generate_line(["\na\n", "\tb\t", " c "], write_converters: strip_converter)
  str # => "a,b,c\n"

With two write converters (called in order):
  upcase_converter = proc {|field| field.upcase }
  downcase_converter = proc {|field| field.downcase }
  write_converters = [upcase_converter, downcase_converter]
  str = CSV.generate_line(['a', 'b', 'c'], write_converters: write_converters)
  str # => "a,b,c\n"

See also {Write Converters}[#class-CSV-label-Write+Converters]
PK)J[�^;h__@share/gems/gems/csv-3.3.2/doc/csv/options/parsing/nil_value.rdocnu�[���====== Option +nil_value+

Specifies the object that is to be substituted for each null (no-text) field.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:nil_value) # => nil

With the default, +nil+:
  CSV.parse_line('a,,b,,c') # => ["a", nil, "b", nil, "c"]

With a different object:
  CSV.parse_line('a,,b,,c', nil_value: 0) # => ["a", 0, "b", 0, "c"]
PK)J[`ꐟ��Ishare/gems/gems/csv-3.3.2/doc/csv/options/parsing/unconverted_fields.rdocnu�[���====== Option +unconverted_fields+

Specifies the boolean that determines whether unconverted field values are to be available.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:unconverted_fields) # => nil

The unconverted field values are those found in the source data,
prior to any conversions performed via option +converters+.

When option +unconverted_fields+ is +true+,
each returned row (\Array or \CSV::Row) has an added method,
+unconverted_fields+, that returns the unconverted field values:
  str = <<-EOT
  foo,0
  bar,1
  baz,2
  EOT
  # Without unconverted_fields
  csv = CSV.parse(str, converters: :integer)
  csv # => [["foo", 0], ["bar", 1], ["baz", 2]]
  csv.first.respond_to?(:unconverted_fields) # => false
  # With unconverted_fields
  csv = CSV.parse(str, converters: :integer, unconverted_fields: true)
  csv # => [["foo", 0], ["bar", 1], ["baz", 2]]
  csv.first.respond_to?(:unconverted_fields) # => true
  csv.first.unconverted_fields # => ["foo", "0"]
PK)J[��<<Ashare/gems/gems/csv-3.3.2/doc/csv/options/parsing/skip_lines.rdocnu�[���====== Option +skip_lines+

Specifies an object to use in identifying comment lines in the input that are to be ignored:
* If a \Regexp, ignores lines that match it.
* If a \String, converts it to a \Regexp, ignores lines that match it.
* If +nil+, no lines are considered to be comments.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:skip_lines) # => nil

For examples in this section:
  str = <<-EOT
  # Comment
  foo,0
  bar,1
  baz,2
  # Another comment
  EOT
  str # => "# Comment\nfoo,0\nbar,1\nbaz,2\n# Another comment\n"

Using the default, +nil+:
  ary = CSV.parse(str)
  ary # => [["# Comment"], ["foo", "0"], ["bar", "1"], ["baz", "2"], ["# Another comment"]]

Using a \Regexp:
  ary = CSV.parse(str, skip_lines: /^#/)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

Using a \String:
  ary = CSV.parse(str, skip_lines: '#')
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

---

Raises an exception if given an object that is not a \Regexp, a \String, or +nil+:
  # Raises ArgumentError (:skip_lines has to respond to #match: 0)
  CSV.parse(str, skip_lines: 0)
PK)J[nj�n��>share/gems/gems/csv-3.3.2/doc/csv/options/parsing/headers.rdocnu�[���====== Option +headers+

Specifies a boolean, \Symbol, \Array, or \String to be used
to define column headers.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:headers) # => false

---

Without +headers+:
  str = <<-EOT
  Name,Count
  foo,0
  bar,1
  bax,2
  EOT
  csv = CSV.new(str)
  csv # => #<CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
  csv.headers # => nil
  csv.shift # => ["Name", "Count"]

---

If set to +true+ or the \Symbol +:first_row+,
the first row of the data is treated as a row of headers:
  str = <<-EOT
  Name,Count
  foo,0
  bar,1
  bax,2
  EOT
  csv = CSV.new(str, headers: true)
  csv # => #<CSV io_type:StringIO encoding:UTF-8 lineno:2 col_sep:"," row_sep:"\n" quote_char:"\"" headers:["Name", "Count"]>
  csv.headers # => ["Name", "Count"]
  csv.shift # => #<CSV::Row "Name":"bar" "Count":"1">

---

If set to an \Array, the \Array elements are treated as headers:
  str = <<-EOT
  foo,0
  bar,1
  bax,2
  EOT
  csv = CSV.new(str, headers: ['Name', 'Count'])
  csv
  csv.headers # => ["Name", "Count"]
  csv.shift # => #<CSV::Row "Name":"bar" "Count":"1">

---

If set to a \String +str+, method <tt>CSV::parse_line(str, options)</tt> is called
with the current +options+, and the returned \Array is treated as headers:
  str = <<-EOT
  foo,0
  bar,1
  bax,2
  EOT
  csv = CSV.new(str, headers: 'Name,Count')
  csv
  csv.headers # => ["Name", "Count"]
  csv.shift # => #<CSV::Row "Name":"bar" "Count":"1">
PK)J[�����Fshare/gems/gems/csv-3.3.2/doc/csv/options/parsing/liberal_parsing.rdocnu�[���====== Option +liberal_parsing+

Specifies the boolean or hash value that determines whether
CSV will attempt to parse input not conformant with RFC 4180,
such as double quotes in unquoted fields.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:liberal_parsing) # => false

For the next two examples:
  str = 'is,this "three, or four",fields'

Without +liberal_parsing+:
  # Raises CSV::MalformedCSVError (Illegal quoting in str 1.)
  CSV.parse_line(str)

With +liberal_parsing+:
  ary = CSV.parse_line(str, liberal_parsing: true)
  ary # => ["is", "this \"three", " or four\"", "fields"]

Use the +backslash_quote+ sub-option to parse values that use
a backslash to escape a double-quote character.  This
causes the parser to treat <code>\"</code> as if it were
<code>""</code>.

For the next two examples:
  str = 'Show,"Harry \"Handcuff\" Houdini, the one and only","Tampa Theater"'

With +liberal_parsing+, but without the +backslash_quote+ sub-option:
  # Incorrect interpretation of backslash; incorrectly interprets the quoted comma as a field separator.
  ary = CSV.parse_line(str, liberal_parsing: true)
  ary # => ["Show", "\"Harry \\\"Handcuff\\\" Houdini", " the one and only\"", "Tampa Theater"]
  puts ary[1] # => "Harry \"Handcuff\" Houdini

With +liberal_parsing+ and its +backslash_quote+ sub-option:
  ary = CSV.parse_line(str, liberal_parsing: { backslash_quote: true })
  ary # => ["Show", "Harry \"Handcuff\" Houdini, the one and only", "Tampa Theater"]
  puts ary[1] # => Harry "Handcuff" Houdini, the one and only
PK)J[����Gshare/gems/gems/csv-3.3.2/doc/csv/options/parsing/field_size_limit.rdocnu�[���====== Option +field_size_limit+

Specifies the \Integer field size limit.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:field_size_limit) # => nil

This is a maximum size CSV will read ahead looking for the closing quote for a field.
(In truth, it reads to the first line ending beyond this size.)
If a quote cannot be found within the limit CSV will raise a MalformedCSVError,
assuming the data is faulty.
You can use this limit to prevent what are effectively DoS attacks on the parser.
However, this limit can cause a legitimate parse to fail;
therefore the default value is +nil+ (no limit).

For the examples in this section:
  str = <<~EOT
    "a","b"
    "
    2345
    ",""
  EOT
  str # => "\"a\",\"b\"\n\"\n2345\n\",\"\"\n"

Using the default +nil+:
  ary = CSV.parse(str)
  ary # => [["a", "b"], ["\n2345\n", ""]]

Using <tt>50</tt>:
  field_size_limit = 50
  ary = CSV.parse(str, field_size_limit: field_size_limit)
  ary # => [["a", "b"], ["\n2345\n", ""]]

---

Raises an exception if a field is too long:
  big_str = "123456789\n" * 1024
  # Raises CSV::MalformedCSVError (Field size exceeded in line 1.)
  CSV.parse('valid,fields,"' + big_str + '"', field_size_limit: 2048)
PK)J[���88Eshare/gems/gems/csv-3.3.2/doc/csv/options/parsing/return_headers.rdocnu�[���====== Option +return_headers+

Specifies the boolean that determines whether method #shift
returns or ignores the header row.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:return_headers) # => false

Examples:
  str = <<-EOT
  Name,Count
  foo,0
  bar,1
  bax,2
  EOT
  # Without return_headers first row is str.
  csv = CSV.new(str, headers: true)
  csv.shift # => #<CSV::Row "Name":"foo" "Count":"0">
  # With return_headers first row is headers.
  csv = CSV.new(str, headers: true, return_headers: true)
  csv.shift # => #<CSV::Row "Name":"Name" "Count":"Count">

PK)J[J�>��Bshare/gems/gems/csv-3.3.2/doc/csv/options/parsing/empty_value.rdocnu�[���====== Option +empty_value+

Specifies the object that is to be substituted
for each field that has an empty \String.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:empty_value) # => "" (empty string)

With the default, <tt>""</tt>:
  CSV.parse_line('a,"",b,"",c') # => ["a", "", "b", "", "c"]

With a different object:
  CSV.parse_line('a,"",b,"",c', empty_value: 'x') # => ["a", "x", "b", "x", "c"]
PK)J[�9;�Bshare/gems/gems/csv-3.3.2/doc/csv/options/parsing/skip_blanks.rdocnu�[���====== Option +skip_blanks+

Specifies a boolean that determines whether blank lines in the input will be ignored;
a line that contains a column separator is not considered to be blank.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:skip_blanks) # => false

See also option {skiplines}[#class-CSV-label-Option+skip_lines].

For examples in this section:
  str = <<-EOT
  foo,0

  bar,1
  baz,2

  ,
  EOT

Using the default, +false+:
  ary = CSV.parse(str)
  ary # => [["foo", "0"], [], ["bar", "1"], ["baz", "2"], [], [nil, nil]]

Using +true+:
  ary = CSV.parse(str, skip_blanks: true)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"], [nil, nil]]

Using a truthy value:
  ary = CSV.parse(str, skip_blanks: :foo)
  ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"], [nil, nil]]
PK)J[��R{��Ashare/gems/gems/csv-3.3.2/doc/csv/options/parsing/converters.rdocnu�[���====== Option +converters+

Specifies converters to be used in parsing fields.
See {Field Converters}[#class-CSV-label-Field+Converters]

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:converters) # => nil

The value may be a field converter name
(see {Stored Converters}[#class-CSV-label-Stored+Converters]):
  str = '1,2,3'
  # Without a converter
  array = CSV.parse_line(str)
  array # => ["1", "2", "3"]
  # With built-in converter :integer
  array = CSV.parse_line(str, converters: :integer)
  array # => [1, 2, 3]

The value may be a converter list
(see {Converter Lists}[#class-CSV-label-Converter+Lists]):
  str = '1,3.14159'
  # Without converters
  array = CSV.parse_line(str)
  array # => ["1", "3.14159"]
  # With built-in converters
  array = CSV.parse_line(str, converters: [:integer, :float])
  array # => [1, 3.14159]

The value may be a \Proc custom converter:
(see {Custom Field Converters}[#class-CSV-label-Custom+Field+Converters]):
  str = ' foo  ,  bar  ,  baz  '
  # Without a converter
  array = CSV.parse_line(str)
  array # => [" foo  ", "  bar  ", "  baz  "]
  # With a custom converter
  array = CSV.parse_line(str, converters: proc {|field| field.strip })
  array # => ["foo", "bar", "baz"]

See also {Custom Field Converters}[#class-CSV-label-Custom+Field+Converters]

---

Raises an exception if the converter is not a converter name or a \Proc:
  str = 'foo,0'
  # Raises NoMethodError (undefined method `arity' for nil:NilClass)
  CSV.parse(str, converters: :foo)
PK)J[v�6��Hshare/gems/gems/csv-3.3.2/doc/csv/options/parsing/header_converters.rdocnu�[���====== Option +header_converters+

Specifies converters to be used in parsing headers.
See {Header Converters}[#class-CSV-label-Header+Converters]

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:header_converters) # => nil

Identical in functionality to option {converters}[#class-CSV-label-Option+converters]
except that:
- The converters apply only to the header row.
- The built-in header converters are +:downcase+ and +:symbol+.

This section assumes prior execution of:
  str = <<-EOT
  Name,Value
  foo,0
  bar,1
  baz,2
  EOT
  # With no header converter
  table = CSV.parse(str, headers: true)
  table.headers # => ["Name", "Value"]

The value may be a header converter name
(see {Stored Converters}[#class-CSV-label-Stored+Converters]):
  table = CSV.parse(str, headers: true, header_converters: :downcase)
  table.headers # => ["name", "value"]

The value may be a converter list
(see {Converter Lists}[#class-CSV-label-Converter+Lists]):
  header_converters = [:downcase, :symbol]
  table = CSV.parse(str, headers: true, header_converters: header_converters)
  table.headers # => [:name, :value]

The value may be a \Proc custom converter
(see {Custom Header Converters}[#class-CSV-label-Custom+Header+Converters]):
  upcase_converter = proc {|field| field.upcase }
  table = CSV.parse(str, headers: true, header_converters: upcase_converter)
  table.headers # => ["NAME", "VALUE"]

See also {Custom Header Converters}[#class-CSV-label-Custom+Header+Converters]

PK)J[x*^kk<share/gems/gems/csv-3.3.2/doc/csv/options/parsing/strip.rdocnu�[���====== Option +strip+

Specifies the boolean value that determines whether
whitespace is stripped from each input field.

Default value:
  CSV::DEFAULT_OPTIONS.fetch(:strip) # => false

With default value +false+:
  ary = CSV.parse_line(' a , b ')
  ary # => [" a ", " b "]

With value +true+:
  ary = CSV.parse_line(' a , b ', strip: true)
  ary # => ["a", "b"]
PK)J[��R8VV#share/gems/gems/csv-3.3.2/README.mdnu�[���# CSV

This library provides a complete interface to CSV files and data. It offers tools to enable you to read and write to and from Strings or IO objects, as needed.

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'csv'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install csv

## Usage

```ruby
require "csv"

CSV.foreach("path/to/file.csv") do |row|
  # use row here...
end
```

## Documentation

- [API](https://ruby.github.io/csv/):  all classes, methods, and constants.
- [Recipes](https://ruby.github.io/csv/doc/csv/recipes/recipes_rdoc.html):  specific code for specific tasks.

## Development

After checking out the repo, run `ruby run-test.rb` to check if your changes can pass the test.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/csv.

### NOTE: About RuboCop

We don't use RuboCop because we can manage our coding style by ourselves. We want to accept small fluctuations in our coding style because we use Ruby.
Please do not submit issues and PRs that aim to introduce RuboCop in this repository.

## License

The gem is available as open source under the terms of the [2-Clause BSD License](https://opensource.org/licenses/BSD-2-Clause).

See LICENSE.txt for details.
PK)J[��&�XKXK!share/gems/gems/csv-3.3.2/NEWS.mdnu�[���# News

## 3.3.2 - 2024-12-21

### Fixes

  * Fixed a parse bug with a quoted line with `col_sep` and an empty
    line. This was introduced in 3.3.1.
    * GH-324
    * Reported by stoodfarback

### Thanks

  * stoodfarback

## 3.3.1 - 2024-12-15

### Improvements

  * `CSV.open`: Changed to detect BOM by default. Note that this isn't
    enabled on Windows because Ruby may have a bug. See also:
    https://bugs.ruby-lang.org/issues/20526
    * GH-301
    * Reported by Junichi Ito

  * Improved performance.
    * GH-311
    * GH-312
    * Patch by Vladimir Kochnev

  * `CSV.open`: Added support for `StringIO` as an input.
    * GH-300
    * GH-302
    * Patch by Marcelo

  * Added a built-in time converter. You can use it by `converters:
    :time`.
    * GH-313
    * Patch by Bart de Water

  * Added `CSV::TSV` for tab-separated values.
    * GH-272
    * GH-319
    * Reported by kojix2
    * Patch by Jas

### Thanks

  * Junichi Ito

  * Vladimir Kochnev

  * Marcelo

  * Bart de Water

  * kojix2

  * Jas

## 3.3.0 - 2024-03-22

### Fixes

  * Fixed a regression parse bug in 3.2.9 that parsing with
    `:skip_lines` may cause wrong result.

## 3.2.9 - 2024-03-22

### Fixes

  * Fixed a parse bug that wrong result may be happen when:

    * `:skip_lines` is used
    * `:row_separator` is `"\r\n"`
    * There is a line that includes `\n` as a column value

    Reported by Ryo Tsukamoto.

    GH-296

### Thanks

  * Ryo Tsukamoto

## 3.2.8 - 2023-11-08

### Improvements

  * Added `CSV::InvalidEncodingError`.

    Patch by Kosuke Shibata.

    GH-287

### Thanks

  * Kosuke Shibata

## 3.2.7 - 2023-06-26

### Improvements

  * Removed an unused internal variable.
    [GH-273](https://github.com/ruby/csv/issues/273)
    [Patch by Mau Magnaguagno]

  * Changed to use `https://` instead of `http://` in documents.
    [GH-274](https://github.com/ruby/csv/issues/274)
    [Patch by Vivek Bharath Akupatni]

  * Added prefix to a helper module in test.
    [GH-278](https://github.com/ruby/csv/issues/278)
    [Patch by Luke Gruber]

  * Added a documentation for `liberal_parsing: {backslash_quotes: true}`.
    [GH-280](https://github.com/ruby/csv/issues/280)
    [Patch by Mark Schneider]

### Fixes

  * Fixed a wrong execution result in documents.
    [GH-276](https://github.com/ruby/csv/issues/276)
    [Patch by Yuki Tsujimoto]

  * Fixed a bug that the same line is used multiple times.
    [GH-279](https://github.com/ruby/csv/issues/279)
    [Reported by Gabriel Nagy]

### Thanks

  * Mau Magnaguagno

  * Vivek Bharath Akupatni

  * Yuki Tsujimoto

  * Luke Gruber

  * Mark Schneider

  * Gabriel Nagy

## 3.2.6 - 2022-12-08

### Improvements

  * `CSV#read` consumes the same lines with other methods like
    `CSV#shift`.
    [[GitHub#258](https://github.com/ruby/csv/issues/258)]
    [Reported by Lhoussaine Ghallou]

  * All `Enumerable` based methods consume the same lines with other
    methods. This may have a performance penalty.
    [[GitHub#260](https://github.com/ruby/csv/issues/260)]
    [Reported by Lhoussaine Ghallou]

  * Simplify some implementations.
    [[GitHub#262](https://github.com/ruby/csv/pull/262)]
    [[GitHub#263](https://github.com/ruby/csv/pull/263)]
    [Patch by Mau Magnaguagno]

### Fixes

  * Fixed `CSV.generate_lines` document.
    [[GitHub#257](https://github.com/ruby/csv/pull/257)]
    [Patch by Sampat Badhe]

### Thanks

  * Sampat Badhe

  * Lhoussaine Ghallou

  * Mau Magnaguagno

## 3.2.5 - 2022-08-26

### Improvements

  * Added `CSV.generate_lines`.
    [[GitHub#255](https://github.com/ruby/csv/issues/255)]
    [Reported by OKURA Masafumi]
    [[GitHub#256](https://github.com/ruby/csv/pull/256)]
    [Patch by Eriko Sugiyama]

### Thanks

  * OKURA Masafumi

  * Eriko Sugiyama

## 3.2.4 - 2022-08-22

### Improvements

  * Cleaned up internal implementations.
    [[GitHub#249](https://github.com/ruby/csv/pull/249)]
    [[GitHub#250](https://github.com/ruby/csv/pull/250)]
    [[GitHub#251](https://github.com/ruby/csv/pull/251)]
    [Patch by Mau Magnaguagno]

  * Added support for RFC 3339 style time.
    [[GitHub#248](https://github.com/ruby/csv/pull/248)]
    [Patch by Thierry Lambert]

  * Added support for transcoding String CSV. Syntax is
    `from-encoding:to-encoding`.
    [[GitHub#254](https://github.com/ruby/csv/issues/254)]
    [Reported by Richard Stueven]

  * Added quoted information to `CSV::FieldInfo`.
    [[GitHub#254](https://github.com/ruby/csv/pull/253)]
    [Reported by Hirokazu SUZUKI]

### Fixes

  * Fixed a link in documents.
    [[GitHub#244](https://github.com/ruby/csv/pull/244)]
    [Patch by Peter Zhu]

### Thanks

  * Peter Zhu

  * Mau Magnaguagno

  * Thierry Lambert

  * Richard Stueven

  * Hirokazu SUZUKI

## 3.2.3 - 2022-04-09

### Improvements

  * Added contents summary to `CSV::Table#inspect`.
    [GitHub#229][Patch by Eriko Sugiyama]
    [GitHub#235][Patch by Sampat Badhe]

  * Suppressed `$INPUT_RECORD_SEPARATOR` deprecation warning by
    `Warning.warn`.
    [GitHub#233][Reported by Jean byroot Boussier]

  * Improved error message for liberal parsing with quoted values.
    [GitHub#231][Patch by Nikolay Rys]

  * Fixed typos in documentation.
    [GitHub#236][Patch by Sampat Badhe]

  * Added `:max_field_size` option and deprecated `:field_size_limit` option.
    [GitHub#238][Reported by Dan Buettner]

  * Added `:symbol_raw` to built-in header converters.
    [GitHub#237][Reported by taki]
    [GitHub#239][Patch by Eriko Sugiyama]

### Fixes

  * Fixed a bug that some texts may be dropped unexpectedly.
    [Bug #18245][ruby-core:105587][Reported by Hassan Abdul Rehman]

  * Fixed a bug that `:field_size_limit` doesn't work with not complex row.
    [GitHub#238][Reported by Dan Buettner]

### Thanks

  * Hassan Abdul Rehman

  * Eriko Sugiyama

  * Jean byroot Boussier

  * Nikolay Rys

  * Sampat Badhe

  * Dan Buettner

  * taki

## 3.2.2 - 2021-12-24

### Improvements

  * Added a validation for invalid option combination.
    [GitHub#225][Patch by adamroyjones]

  * Improved documentation for developers.
    [GitHub#227][Patch by Eriko Sugiyama]

### Fixes

  * Fixed a bug that all of `ARGF` contents may not be consumed.
    [GitHub#228][Reported by Rafael Navaza]

### Thanks

  * adamroyjones

  * Eriko Sugiyama

  * Rafael Navaza

## 3.2.1 - 2021-10-23

### Improvements

  * doc: Fixed wrong class name.
    [GitHub#217][Patch by Vince]

  * Changed to always use `"\n"` for the default row separator on Ruby
    3.0 or later because `$INPUT_RECORD_SEPARATOR` was deprecated
    since Ruby 3.0.

  * Added support for Ractor.
    [GitHub#218][Patch by rm155]

    * Users who want to use the built-in converters in non-main
      Ractors need to call `Ractor.make_shareable(CSV::Converters)`
      and/or `Ractor.make_shareable(CSV::HeaderConverters)` before
      creating non-main Ractors.

### Thanks

  * Vince

  * Joakim Antman

  * rm155

## 3.2.0 - 2021-06-06

### Improvements

  * `CSV.open`: Added support for `:newline` option.
    [GitHub#198][Patch by Nobuyoshi Nakada]

  * `CSV::Table#each`: Added support for column mode with duplicated
    headers.
    [GitHub#206][Reported by Yaroslav Berezovskiy]

  * `Object#CSV`: Added support for Ruby 3.0.

  * `CSV::Row`: Added support for pattern matching.
    [GitHub#207][Patch by Kevin Newton]

### Fixes

  * Fixed typos in documentation.
    [GitHub#196][GitHub#205][Patch by Sampat Badhe]

### Thanks

  * Sampat Badhe

  * Nobuyoshi Nakada

  * Yaroslav Berezovskiy

  * Kevin Newton

## 3.1.9 - 2020-11-23

### Fixes

  * Fixed a compatibility bug that the line to be processed by
    `skip_lines:` has a row separator.
    [GitHub#194][Reported by Josef Šimánek]

### Thanks

  * Josef Šimánek

## 3.1.8 - 2020-11-18

### Improvements

  * Improved documentation.
    [Patch by Burdette Lamar]

### Thanks

  * Burdette Lamar

## 3.1.7 - 2020-08-04

### Improvements

  * Improved document.
    [GitHub#158][GitHub#160][GitHub#161]
    [Patch by Burdette Lamar]

  * Updated required Ruby version to 2.5.0 or later.
    [GitHub#159]
    [Patch by Gabriel Nagy]

  * Removed stringio 0.1.3 or later dependency.

### Thanks

  * Burdette Lamar

  * Gabriel Nagy

## 3.1.6 - 2020-07-20

### Improvements

  * Improved document.
    [GitHub#127][GitHub#135][GitHub#136][GitHub#137][GitHub#139][GitHub#140]
    [GitHub#141][GitHub#142][GitHub#143][GitHub#145][GitHub#146][GitHub#148]
    [GitHub#148][GitHub#151][GitHub#152][GitHub#154][GitHub#155][GitHub#157]
    [Patch by Burdette Lamar]

  * `CSV.open`: Added support for `undef: :replace`.
    [GitHub#129][Patch by Koichi ITO]

  * `CSV.open`: Added support for `invalid: :replace`.
    [GitHub#129][Patch by Koichi ITO]

  * Don't run quotable check for invalid encoding field values.
    [GitHub#131][Patch by Koichi ITO]

  * Added support for specifying the target indexes and names to
    `force_quotes:`.
    [GitHub#153][Reported by Aleksandr]

  * `CSV.generate`: Changed to use the encoding of the first non-ASCII
    field rather than the encoding of ASCII only field.

  * Changed to require the stringio gem 0.1.3 or later.

### Thanks

  * Burdette Lamar

  * Koichi ITO

  * Aleksandr

## 3.1.5 - 2020-05-18

### Improvements

  * Improved document.
    [GitHub#124][Patch by Burdette Lamar]

### Fixes

  * Added missing document files.
    [GitHub#125][Reported by joast]

### Thanks

  * Burdette Lamar

  * joast

## 3.1.4 - 2020-05-17

### Improvements

  * Improved document.
    [GitHub#122][Patch by Burdette Lamar]

  * Stopped to dropping stack trace for exception caused by
    `CSV.parse_line`.
    [GitHub#120][Reported by Kyle d'Oliveira]

### Fixes

  * Fixed a bug that `:write_nil_value` or `:write_empty_value` don't
    work with non `String` objects.
    [GitHub#123][Reported by asm256]

### Thanks

  * Burdette Lamar

  * asm256

  * Kyle d'Oliveira

## 3.1.3 - 2020-05-09

### Improvements

  * `CSV::Row#dup`: Copied deeply.
    [GitHub#108][Patch by Jim Kane]

### Fixes

  * Fixed a infinite loop bug for zero length match `skip_lines`.
    [GitHub#110][Patch by Mike MacDonald]

  * `CSV.generate`: Fixed a bug that encoding isn't set correctly.
    [GitHub#110][Patch by Seiei Miyagi]

  * Fixed document for the `:strip` option.
    [GitHub#114][Patch by TOMITA Masahiro]

  * Fixed a parse bug when split charcter exists in middle of column
    value.
    [GitHub#115][Reported by TOMITA Masahiro]

### Thanks

  * Jim Kane

  * Mike MacDonald

  * Seiei Miyagi

  * TOMITA Masahiro

## 3.1.2 - 2019-10-12

### Improvements

  * Added `:col_sep` check.
    [GitHub#94][Reported by Florent Beaurain]

  * Suppressed warnings.
    [GitHub#96][Patch by Nobuyoshi Nakada]

  * Improved documentation.
    [GitHub#101][GitHub#102][Patch by Vitor Oliveira]

### Fixes

  * Fixed a typo in documentation.
    [GitHub#95][Patch by Yuji Yaginuma]

  * Fixed a multibyte character handling bug.
    [GitHub#97][Patch by koshigoe]

  * Fixed typos in documentation.
    [GitHub#100][Patch by Vitor Oliveira]

  * Fixed a bug that seeked `StringIO` isn't accepted.
    [GitHub#98][Patch by MATSUMOTO Katsuyoshi]

  * Fixed a bug that `CSV.generate_line` doesn't work with
    `Encoding.default_internal`.
    [GitHub#105][Reported by David Rodríguez]

### Thanks

  * Florent Beaurain

  * Yuji Yaginuma

  * Nobuyoshi Nakada

  * koshigoe

  * Vitor Oliveira

  * MATSUMOTO Katsuyoshi

  * David Rodríguez

## 3.1.1 - 2019-04-26

### Improvements

  * Added documentation for `strip` option.
    [GitHub#88][Patch by hayashiyoshino]

  * Added documentation for `write_converters`, `write_nil_value` and
    `write_empty_value` options.
    [GitHub#87][Patch by Masafumi Koba]

  * Added documentation for `quote_empty` option.
    [GitHub#89][Patch by kawa\_tech]

### Fixes

  * Fixed a bug that `strip; true` removes a newline.

### Thanks

  * hayashiyoshino

  * Masafumi Koba

  * kawa\_tech

## 3.1.0 - 2019-04-17

### Fixes

  * Fixed a backward incompatibility bug that `CSV#eof?` may raises an
    error.
    [GitHub#86][Reported by krororo]

### Thanks

  * krororo

## 3.0.9 - 2019-04-15

### Fixes

  * Fixed a test for Windows.

## 3.0.8 - 2019-04-11

### Fixes

  * Fixed a bug that `strip: String` doesn't work.

## 3.0.7 - 2019-04-08

### Improvements

  * Improve parse performance 1.5x by introducing loose parser.

### Fixes

  * Fix performance regression in 3.0.5.

  * Fix a bug that `CSV#line` returns wrong value when you
    use `quote_char: nil`.

## 3.0.6 - 2019-03-30

### Improvements

  * `CSV.foreach`: Added support for `mode`.

## 3.0.5 - 2019-03-24

### Improvements

  * Added `:liberal_parsing => {backslash_quote: true}` option.
    [GitHub#74][Patch by 284km]

  * Added `:write_converters` option.
    [GitHub#73][Patch by Danillo Souza]

  * Added `:write_nil_value` option.

  * Added `:write_empty_value` option.

  * Improved invalid byte line number detection.
    [GitHub#78][Patch by Alyssa Ross]

  * Added `quote_char: nil` optimization.
    [GitHub#79][Patch by 284km]

  * Improved error message.
    [GitHub#81][Patch by Andrés Torres]

  * Improved IO-like implementation for `StringIO` data.
    [GitHub#80][Patch by Genadi Samokovarov]

  * Added `:strip` option.
    [GitHub#58]

### Fixes

  * Fixed a compatibility bug that `CSV#each` doesn't care `CSV#shift`.
    [GitHub#76][Patch by Alyssa Ross]

  * Fixed a compatibility bug that `CSV#eof?` doesn't care `CSV#each`
    and `CSV#shift`.
    [GitHub#77][Reported by Chi Leung]

  * Fixed a compatibility bug that invalid line isn't ignored.
    [GitHub#82][Reported by krororo]

  * Fixed a bug that `:skip_lines` doesn't work with multibyte characters data.
    [GitHub#83][Reported by ff2248]

### Thanks

  * Alyssa Ross

  * 284km

  * Chi Leung

  * Danillo Souza

  * Andrés Torres

  * Genadi Samokovarov

  * krororo

  * ff2248

## 3.0.4 - 2019-01-25

### Improvements

  * Removed duplicated `CSV::Row#include?` implementations.
    [GitHub#69][Patch by Max Schwenk]

  * Removed duplicated `CSV::Row#header?` implementations.
    [GitHub#70][Patch by Max Schwenk]

### Fixes

  * Fixed a typo in document.
    [GitHub#72][Patch by Artur Beljajev]

  * Fixed a compatibility bug when row headers are changed.
    [GitHub#71][Reported by tomoyuki kosaka]

### Thanks

  * Max Schwenk

  * Artur Beljajev

  * tomoyuki kosaka

## 3.0.3 - 2019-01-12

### Improvements

  * Migrated benchmark tool to benchmark-driver from benchmark-ips.
    [GitHub#57][Patch by 284km]

  * Added `liberal_parsing: {double_quote_outside_quote: true}` parse
    option.
    [GitHub#66][Reported by Watson]

  * Added `quote_empty:` write option.
    [GitHub#35][Reported by Dave Myron]

### Fixes

  * Fixed a compatibility bug that `CSV.generate` always return
    `ASCII-8BIT` encoding string.
    [GitHub#63][Patch by Watson]

  * Fixed a compatibility bug that `CSV.parse("", headers: true)`
    doesn't return `CSV::Table`.
    [GitHub#64][Reported by Watson][Patch by 284km]

  * Fixed a compatibility bug that multiple-characters column
    separator doesn't work.
    [GitHub#67][Reported by Jesse Reiss]

  * Fixed a compatibility bug that double `#each` parse twice.
    [GitHub#68][Reported by Max Schwenk]

### Thanks

  * Watson

  * 284km

  * Jesse Reiss

  * Dave Myron

  * Max Schwenk

## 3.0.2 - 2018-12-23

### Improvements

  * Changed to use strscan in parser.
    [GitHub#52][Patch by 284km]

  * Improves CSV write performance.
    3.0.2 will be about 2 times faster than 3.0.1.

  * Improves CSV parse performance for complex case.
    3.0.2 will be about 2 times faster than 3.0.1.

### Fixes

  * Fixed a parse error bug for new line only input with `headers` option.
    [GitHub#53][Reported by Chris Beer]

  * Fixed some typos in document.
    [GitHub#54][Patch by Victor Shepelev]

### Thanks

  * 284km

  * Chris Beer

  * Victor Shepelev

## 3.0.1 - 2018-12-07

### Improvements

  * Added a test.
    [GitHub#38][Patch by 284km]

  * `CSV::Row#dup`: Changed to duplicate internal data.
    [GitHub#39][Reported by André Guimarães Sakata]

  * Documented `:nil_value` and `:empty_value` options.
    [GitHub#41][Patch by OwlWorks]

  * Added support for separator detection for non-seekable inputs.
    [GitHub#45][Patch by Ilmari Karonen]

  * Removed needless code.
    [GitHub#48][Patch by Espartaco Palma]

  * Added support for parsing header only CSV with `headers: true`.
    [GitHub#47][Patch by Kazuma Shibasaka]

  * Added support for coverage report in CI.
    [GitHub#48][Patch by Espartaco Palma]

  * Improved auto CR row separator detection.
    [GitHub#51][Reported by Yuki Kurihara]

### Fixes

  * Fixed a typo in document.
    [GitHub#40][Patch by Marcus Stollsteimer]

### Thanks

  * 284km

  * André Guimarães Sakata

  * Marcus Stollsteimer

  * OwlWorks

  * Ilmari Karonen

  * Espartaco Palma

  * Kazuma Shibasaka

  * Yuki Kurihara

## 3.0.0 - 2018-06-06

### Fixes

  * Fixed a bug that header isn't returned for empty row.
    [GitHub#37][Patch by Grace Lee]

### Thanks

  * Grace Lee

## 1.0.2 - 2018-05-03

### Improvements

  * Split file for CSV::VERSION

  * Code cleanup: Split csv.rb into a more manageable structure
    [GitHub#19][Patch by Espartaco Palma]
    [GitHub#20][Patch by Steven Daniels]

  * Use CSV::MalformedCSVError for invalid encoding line
    [GitHub#26][Reported by deepj]

  * Support implicit Row <-> Array conversion
    [Bug #10013][ruby-core:63582][Reported by Dawid Janczak]

  * Update class docs
    [GitHub#32][Patch by zverok]

  * Add `Row#each_pair`
    [GitHub#33][Patch by zverok]

  * Improve CSV performance
    [GitHub#30][Patch by Watson]

  * Add :nil_value and :empty_value option

### Fixes

  * Fix a bug that "bom|utf-8" doesn't work
    [GitHub#23][Reported by Pavel Lobashov]

  * `CSV::Row#to_h`, `#to_hash`: uses the same value as `Row#[]`
    [Bug #14482][Reported by tomoya ishida]

  * Make row separator detection more robust
    [GitHub#25][Reported by deepj]

  * Fix a bug that too much separator when col_sep is `" "`
    [Bug #8784][ruby-core:63582][Reported by Sylvain Laperche]

### Thanks

  * Espartaco Palma

  * Steven Daniels

  * deepj

  * Dawid Janczak

  * zverok

  * Watson

  * Pavel Lobashov

  * tomoya ishida

  * Sylvain Laperche

  * Ryunosuke Sato

## 1.0.1 - 2018-02-09

### Improvements

  * `CSV::Table#delete`: Added bulk delete support. You can delete
    multiple rows and columns at once.
    [GitHub#4][Patch by Vladislav]

  * Updated Gem description.
    [GitHub#11][Patch by Marcus Stollsteimer]

  * Code cleanup.
    [GitHub#12][Patch by Marcus Stollsteimer]
    [GitHub#14][Patch by Steven Daniels]
    [GitHub#18][Patch by takkanm]

  * `CSV::Table#dig`: Added.
    [GitHub#15][Patch by Tomohiro Ogoke]

  * `CSV::Row#dig`: Added.
    [GitHub#15][Patch by Tomohiro Ogoke]

  * Added ISO 8601 support to date time converter.
    [GitHub#16]

### Fixes

  * Fixed wrong `CSV::VERSION`.
    [GitHub#10][Reported by Marcus Stollsteimer]

  * `CSV.generate`: Fixed a regression bug that `String` argument is
    ignored.
    [GitHub#13][Patch by pavel]

### Thanks

  * Vladislav

  * Marcus Stollsteimer

  * Steven Daniels

  * takkanm

  * Tomohiro Ogoke

  * pavel
PK)J[Y[Nj��*share/gems/gems/csv-3.3.2/lib/csv/table.rbnu�[���# frozen_string_literal: true

require "forwardable"

class CSV
  # = \CSV::Table
  # A \CSV::Table instance represents \CSV data.
  # (see {class CSV}[../CSV.html]).
  #
  # The instance may have:
  # - Rows: each is a Table::Row object.
  # - Headers: names for the columns.
  #
  # === Instance Methods
  #
  # \CSV::Table has three groups of instance methods:
  # - Its own internally defined instance methods.
  # - Methods included by module Enumerable.
  # - Methods delegated to class Array.:
  #   * Array#empty?
  #   * Array#length
  #   * Array#size
  #
  # == Creating a \CSV::Table Instance
  #
  # Commonly, a new \CSV::Table instance is created by parsing \CSV source
  # using headers:
  #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   table = CSV.parse(source, headers: true)
  #   table.class # => CSV::Table
  #
  # You can also create an instance directly. See ::new.
  #
  # == Headers
  #
  # If a table has headers, the headers serve as labels for the columns of data.
  # Each header serves as the label for its column.
  #
  # The headers for a \CSV::Table object are stored as an \Array of Strings.
  #
  # Commonly, headers are defined in the first row of \CSV source:
  #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   table = CSV.parse(source, headers: true)
  #   table.headers # => ["Name", "Value"]
  #
  # If no headers are defined, the \Array is empty:
  #   table = CSV::Table.new([])
  #   table.headers # => []
  #
  # == Access Modes
  #
  # \CSV::Table provides three modes for accessing table data:
  # - \Row mode.
  # - Column mode.
  # - Mixed mode (the default for a new table).
  #
  # The access mode for a\CSV::Table instance affects the behavior
  # of some of its instance methods:
  # - #[]
  # - #[]=
  # - #delete
  # - #delete_if
  # - #each
  # - #values_at
  #
  # === \Row Mode
  #
  # Set a table to row mode with method #by_row!:
  #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   table = CSV.parse(source, headers: true)
  #   table.by_row! # => #<CSV::Table mode:row row_count:4>
  #
  # Specify a single row by an \Integer index:
  #   # Get a row.
  #   table[1] # => #<CSV::Row "Name":"bar" "Value":"1">
  #   # Set a row, then get it.
  #   table[1] = CSV::Row.new(['Name', 'Value'], ['bam', 3])
  #   table[1] # => #<CSV::Row "Name":"bam" "Value":3>
  #
  # Specify a sequence of rows by a \Range:
  #   # Get rows.
  #   table[1..2] # => [#<CSV::Row "Name":"bam" "Value":3>, #<CSV::Row "Name":"baz" "Value":"2">]
  #   # Set rows, then get them.
  #   table[1..2] = [
  #     CSV::Row.new(['Name', 'Value'], ['bat', 4]),
  #     CSV::Row.new(['Name', 'Value'], ['bad', 5]),
  #   ]
  #   table[1..2] # => [["Name", #<CSV::Row "Name":"bat" "Value":4>], ["Value", #<CSV::Row "Name":"bad" "Value":5>]]
  #
  # === Column Mode
  #
  # Set a table to column mode with method #by_col!:
  #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   table = CSV.parse(source, headers: true)
  #   table.by_col! # => #<CSV::Table mode:col row_count:4>
  #
  # Specify a column by an \Integer index:
  #   # Get a column.
  #   table[0]
  #   # Set a column, then get it.
  #   table[0] = ['FOO', 'BAR', 'BAZ']
  #   table[0] # => ["FOO", "BAR", "BAZ"]
  #
  # Specify a column by its \String header:
  #   # Get a column.
  #   table['Name'] # => ["FOO", "BAR", "BAZ"]
  #   # Set a column, then get it.
  #   table['Name'] = ['Foo', 'Bar', 'Baz']
  #   table['Name'] # => ["Foo", "Bar", "Baz"]
  #
  # === Mixed Mode
  #
  # In mixed mode, you can refer to either rows or columns:
  # - An \Integer index refers to a row.
  # - A \Range index refers to multiple rows.
  # - A \String index refers to a column.
  #
  # Set a table to mixed mode with method #by_col_or_row!:
  #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   table = CSV.parse(source, headers: true)
  #   table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
  #
  # Specify a single row by an \Integer index:
  #   # Get a row.
  #   table[1] # => #<CSV::Row "Name":"bar" "Value":"1">
  #   # Set a row, then get it.
  #   table[1] = CSV::Row.new(['Name', 'Value'], ['bam', 3])
  #   table[1] # => #<CSV::Row "Name":"bam" "Value":3>
  #
  # Specify a sequence of rows by a \Range:
  #   # Get rows.
  #   table[1..2] # => [#<CSV::Row "Name":"bam" "Value":3>, #<CSV::Row "Name":"baz" "Value":"2">]
  #   # Set rows, then get them.
  #   table[1] = CSV::Row.new(['Name', 'Value'], ['bat', 4])
  #   table[2] = CSV::Row.new(['Name', 'Value'], ['bad', 5])
  #   table[1..2] # => [["Name", #<CSV::Row "Name":"bat" "Value":4>], ["Value", #<CSV::Row "Name":"bad" "Value":5>]]
  #
  # Specify a column by its \String header:
  #   # Get a column.
  #   table['Name'] # => ["foo", "bat", "bad"]
  #   # Set a column, then get it.
  #   table['Name'] = ['Foo', 'Bar', 'Baz']
  #   table['Name'] # => ["Foo", "Bar", "Baz"]
  class Table
    # :call-seq:
    #   CSV::Table.new(array_of_rows, headers = nil) -> csv_table
    #
    # Returns a new \CSV::Table object.
    #
    # - Argument +array_of_rows+ must be an \Array of CSV::Row objects.
    # - Argument +headers+, if given, may be an \Array of Strings.
    #
    # ---
    #
    # Create an empty \CSV::Table object:
    #   table = CSV::Table.new([])
    #   table # => #<CSV::Table mode:col_or_row row_count:1>
    #
    # Create a non-empty \CSV::Table object:
    #   rows = [
    #     CSV::Row.new([], []),
    #     CSV::Row.new([], []),
    #     CSV::Row.new([], []),
    #   ]
    #   table  = CSV::Table.new(rows)
    #   table # => #<CSV::Table mode:col_or_row row_count:4>
    #
    # ---
    #
    # If argument +headers+ is an \Array of Strings,
    # those Strings become the table's headers:
    #   table = CSV::Table.new([], headers: ['Name', 'Age'])
    #   table.headers # => ["Name", "Age"]
    #
    # If argument +headers+ is not given and the table has rows,
    # the headers are taken from the first row:
    #   rows = [
    #     CSV::Row.new(['Foo', 'Bar'], []),
    #     CSV::Row.new(['foo', 'bar'], []),
    #     CSV::Row.new(['FOO', 'BAR'], []),
    #   ]
    #   table  = CSV::Table.new(rows)
    #   table.headers # => ["Foo", "Bar"]
    #
    # If argument +headers+ is not given and the table is empty (has no rows),
    # the headers are also empty:
    #   table  = CSV::Table.new([])
    #   table.headers # => []
    #
    # ---
    #
    # Raises an exception if argument +array_of_rows+ is not an \Array object:
    #   # Raises NoMethodError (undefined method `first' for :foo:Symbol):
    #   CSV::Table.new(:foo)
    #
    # Raises an exception if an element of +array_of_rows+ is not a \CSV::Table object:
    #   # Raises NoMethodError (undefined method `headers' for :foo:Symbol):
    #   CSV::Table.new([:foo])
    def initialize(array_of_rows, headers: nil)
      @table = array_of_rows
      @headers = headers
      unless @headers
        if @table.empty?
          @headers = []
        else
          @headers = @table.first.headers
        end
      end

      @mode  = :col_or_row
    end

    # The current access mode for indexing and iteration.
    attr_reader :mode

    # Internal data format used to compare equality.
    attr_reader :table
    protected   :table

    ### Array Delegation ###

    extend Forwardable
    def_delegators :@table, :empty?, :length, :size

    # :call-seq:
    #   table.by_col -> table_dup
    #
    # Returns a duplicate of +self+, in column mode
    # (see {Column Mode}[#class-CSV::Table-label-Column+Mode]):
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.mode # => :col_or_row
    #   dup_table = table.by_col
    #   dup_table.mode # => :col
    #   dup_table.equal?(table) # => false # It's a dup
    #
    # This may be used to chain method calls without changing the mode
    # (but also will affect performance and memory usage):
    #   dup_table.by_col['Name']
    #
    # Also note that changes to the duplicate table will not affect the original.
    def by_col
      self.class.new(@table.dup).by_col!
    end

    # :call-seq:
    #   table.by_col! -> self
    #
    # Sets the mode for +self+ to column mode
    # (see {Column Mode}[#class-CSV::Table-label-Column+Mode]); returns +self+:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.mode # => :col_or_row
    #   table1 = table.by_col!
    #   table.mode # => :col
    #   table1.equal?(table) # => true # Returned self
    def by_col!
      @mode = :col

      self
    end

    # :call-seq:
    #   table.by_col_or_row -> table_dup
    #
    # Returns a duplicate of +self+, in mixed mode
    # (see {Mixed Mode}[#class-CSV::Table-label-Mixed+Mode]):
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true).by_col!
    #   table.mode # => :col
    #   dup_table = table.by_col_or_row
    #   dup_table.mode # => :col_or_row
    #   dup_table.equal?(table) # => false # It's a dup
    #
    # This may be used to chain method calls without changing the mode
    # (but also will affect performance and memory usage):
    #   dup_table.by_col_or_row['Name']
    #
    # Also note that changes to the duplicate table will not affect the original.
    def by_col_or_row
      self.class.new(@table.dup).by_col_or_row!
    end

    # :call-seq:
    #   table.by_col_or_row! -> self
    #
    # Sets the mode for +self+ to mixed mode
    # (see {Mixed Mode}[#class-CSV::Table-label-Mixed+Mode]); returns +self+:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true).by_col!
    #   table.mode # => :col
    #   table1 = table.by_col_or_row!
    #   table.mode # => :col_or_row
    #   table1.equal?(table) # => true # Returned self
    def by_col_or_row!
      @mode = :col_or_row

      self
    end

    # :call-seq:
    #   table.by_row -> table_dup
    #
    # Returns a duplicate of +self+, in row mode
    # (see {Row Mode}[#class-CSV::Table-label-Row+Mode]):
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.mode # => :col_or_row
    #   dup_table = table.by_row
    #   dup_table.mode # => :row
    #   dup_table.equal?(table) # => false # It's a dup
    #
    # This may be used to chain method calls without changing the mode
    # (but also will affect performance and memory usage):
    #   dup_table.by_row[1]
    #
    # Also note that changes to the duplicate table will not affect the original.
    def by_row
      self.class.new(@table.dup).by_row!
    end

    # :call-seq:
    #   table.by_row! -> self
    #
    # Sets the mode for +self+ to row mode
    # (see {Row Mode}[#class-CSV::Table-label-Row+Mode]); returns +self+:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.mode # => :col_or_row
    #   table1 = table.by_row!
    #   table.mode # => :row
    #   table1.equal?(table) # => true # Returned self
    def by_row!
      @mode = :row

      self
    end

    # :call-seq:
    #   table.headers -> array_of_headers
    #
    # Returns a new \Array containing the \String headers for the table.
    #
    # If the table is not empty, returns the headers from the first row:
    #   rows = [
    #     CSV::Row.new(['Foo', 'Bar'], []),
    #     CSV::Row.new(['FOO', 'BAR'], []),
    #     CSV::Row.new(['foo', 'bar'], []),
    #   ]
    #   table  = CSV::Table.new(rows)
    #   table.headers # => ["Foo", "Bar"]
    #   table.delete(0)
    #   table.headers # => ["FOO", "BAR"]
    #   table.delete(0)
    #   table.headers # => ["foo", "bar"]
    #
    # If the table is empty, returns a copy of the headers in the table itself:
    #   table.delete(0)
    #   table.headers # => ["Foo", "Bar"]
    def headers
      if @table.empty?
        @headers.dup
      else
        @table.first.headers
      end
    end

    # :call-seq:
    #   table[n] -> row or column_data
    #   table[range] -> array_of_rows or array_of_column_data
    #   table[header] -> array_of_column_data
    #
    # Returns data from the table;  does not modify the table.
    #
    # ---
    #
    # Fetch a \Row by Its \Integer Index::
    # - Form: <tt>table[n]</tt>, +n+ an integer.
    # - Access mode: <tt>:row</tt> or <tt>:col_or_row</tt>.
    # - Return value: _nth_ row of the table, if that row exists;
    #   otherwise +nil+.
    #
    # Returns the _nth_ row of the table if that row exists:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   table[1] # => #<CSV::Row "Name":"bar" "Value":"1">
    #   table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
    #   table[1] # => #<CSV::Row "Name":"bar" "Value":"1">
    #
    # Counts backward from the last row if +n+ is negative:
    #   table[-1] # => #<CSV::Row "Name":"baz" "Value":"2">
    #
    # Returns +nil+ if +n+ is too large or too small:
    #   table[4] # => nil
    #   table[-4] # => nil
    #
    # Raises an exception if the access mode is <tt>:row</tt>
    # and +n+ is not an \Integer:
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   # Raises TypeError (no implicit conversion of String into Integer):
    #   table['Name']
    #
    # ---
    #
    # Fetch a Column by Its \Integer Index::
    # - Form: <tt>table[n]</tt>, +n+ an \Integer.
    # - Access mode: <tt>:col</tt>.
    # - Return value: _nth_ column of the table, if that column exists;
    #   otherwise an \Array of +nil+ fields of length <tt>self.size</tt>.
    #
    # Returns the _nth_ column of the table if that column exists:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #   table[1] # => ["0", "1", "2"]
    #
    # Counts backward from the last column if +n+ is negative:
    #   table[-2] # => ["foo", "bar", "baz"]
    #
    # Returns an \Array of +nil+ fields if +n+ is too large or too small:
    #   table[4] # => [nil, nil, nil]
    #   table[-4] # => [nil, nil, nil]
    #
    # ---
    #
    # Fetch Rows by \Range::
    # - Form: <tt>table[range]</tt>, +range+ a \Range object.
    # - Access mode: <tt>:row</tt> or <tt>:col_or_row</tt>.
    # - Return value: rows from the table, beginning at row <tt>range.start</tt>,
    #   if those rows exists.
    #
    # Returns rows from the table, beginning at row <tt>range.first</tt>,
    # if those rows exist:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   rows = table[1..2] # => #<CSV::Row "Name":"bar" "Value":"1">
    #   rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
    #   table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
    #   rows = table[1..2] # => #<CSV::Row "Name":"bar" "Value":"1">
    #   rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
    #
    # If there are too few rows, returns all from <tt>range.start</tt> to the end:
    #   rows = table[1..50] # => #<CSV::Row "Name":"bar" "Value":"1">
    #   rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
    #
    # Special case: if <tt>range.start == table.size</tt>, returns an empty \Array:
    #   table[table.size..50] # => []
    #
    # If <tt>range.end</tt> is negative, calculates the ending index from the end:
    #   rows = table[0..-1]
    #   rows # => [#<CSV::Row "Name":"foo" "Value":"0">, #<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
    #
    # If <tt>range.start</tt> is negative, calculates the starting index from the end:
    #   rows = table[-1..2]
    #   rows # => [#<CSV::Row "Name":"baz" "Value":"2">]
    #
    # If <tt>range.start</tt> is larger than <tt>table.size</tt>, returns +nil+:
    #   table[4..4] # => nil
    #
    # ---
    #
    # Fetch Columns by \Range::
    # - Form: <tt>table[range]</tt>, +range+ a \Range object.
    # - Access mode: <tt>:col</tt>.
    # - Return value: column data from the table, beginning at column <tt>range.start</tt>,
    #   if those columns exist.
    #
    # Returns column values from the table, if the column exists;
    # the values are arranged by row:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_col!
    #   table[0..1] # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
    #
    # Special case: if <tt>range.start == headers.size</tt>,
    # returns an \Array (size: <tt>table.size</tt>) of empty \Arrays:
    #   table[table.headers.size..50] # => [[], [], []]
    #
    # If <tt>range.end</tt> is negative, calculates the ending index from the end:
    #   table[0..-1] # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
    #
    # If <tt>range.start</tt> is negative, calculates the starting index from the end:
    #   table[-2..2] # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
    #
    # If <tt>range.start</tt> is larger than <tt>table.size</tt>,
    # returns an \Array of +nil+ values:
    #   table[4..4] # => [nil, nil, nil]
    #
    # ---
    #
    # Fetch a Column by Its \String Header::
    # - Form: <tt>table[header]</tt>, +header+ a \String header.
    # - Access mode: <tt>:col</tt> or <tt>:col_or_row</tt>
    # - Return value: column data from the table, if that +header+ exists.
    #
    # Returns column values from the table, if the column exists:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #   table['Name'] # => ["foo", "bar", "baz"]
    #   table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
    #   col = table['Name']
    #   col # => ["foo", "bar", "baz"]
    #
    # Modifying the returned column values does not modify the table:
    #   col[0] = 'bat'
    #   col # => ["bat", "bar", "baz"]
    #   table['Name'] # => ["foo", "bar", "baz"]
    #
    # Returns an \Array of +nil+ values if there is no such column:
    #   table['Nosuch'] # => [nil, nil, nil]
    def [](index_or_header)
      if @mode == :row or  # by index
         (@mode == :col_or_row and (index_or_header.is_a?(Integer) or index_or_header.is_a?(Range)))
        @table[index_or_header]
      else                 # by header
        @table.map { |row| row[index_or_header] }
      end
    end

    # :call-seq:
    #   table[n] = row -> row
    #   table[n] = field_or_array_of_fields -> field_or_array_of_fields
    #   table[header] = field_or_array_of_fields -> field_or_array_of_fields
    #
    # Puts data onto the table.
    #
    # ---
    #
    # Set a \Row by Its \Integer Index::
    # - Form: <tt>table[n] = row</tt>, +n+ an \Integer,
    #   +row+ a \CSV::Row instance or an \Array of fields.
    # - Access mode: <tt>:row</tt> or <tt>:col_or_row</tt>.
    # - Return value: +row+.
    #
    # If the row exists, it is replaced:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   new_row = CSV::Row.new(['Name', 'Value'], ['bat', 3])
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   return_value = table[0] = new_row
    #   return_value.equal?(new_row) # => true # Returned the row
    #   table[0].to_h # => {"Name"=>"bat", "Value"=>3}
    #
    # With access mode <tt>:col_or_row</tt>:
    #   table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
    #   table[0] = CSV::Row.new(['Name', 'Value'], ['bam', 4])
    #   table[0].to_h # => {"Name"=>"bam", "Value"=>4}
    #
    # With an \Array instead of a \CSV::Row, inherits headers from the table:
    #   array = ['bad', 5]
    #   return_value = table[0] = array
    #   return_value.equal?(array) # => true # Returned the array
    #   table[0].to_h # => {"Name"=>"bad", "Value"=>5}
    #
    # If the row does not exist, extends the table by adding rows:
    # assigns rows with +nil+ as needed:
    #   table.size # => 3
    #   table[5] = ['bag', 6]
    #   table.size # => 6
    #   table[3] # => nil
    #   table[4]# => nil
    #   table[5].to_h # => {"Name"=>"bag", "Value"=>6}
    #
    # Note that the +nil+ rows are actually +nil+, not a row of +nil+ fields.
    #
    # ---
    #
    # Set a Column by Its \Integer Index::
    # - Form: <tt>table[n] = array_of_fields</tt>, +n+ an \Integer,
    #   +array_of_fields+ an \Array of \String fields.
    # - Access mode: <tt>:col</tt>.
    # - Return value: +array_of_fields+.
    #
    # If the column exists, it is replaced:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   new_col = [3, 4, 5]
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #   return_value = table[1] = new_col
    #   return_value.equal?(new_col) # => true # Returned the column
    #   table[1] # => [3, 4, 5]
    #   # The rows, as revised:
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   table[0].to_h # => {"Name"=>"foo", "Value"=>3}
    #   table[1].to_h # => {"Name"=>"bar", "Value"=>4}
    #   table[2].to_h # => {"Name"=>"baz", "Value"=>5}
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #
    # If there are too few values, fills with +nil+ values:
    #   table[1] = [0]
    #   table[1] # => [0, nil, nil]
    #
    # If there are too many values, ignores the extra values:
    #   table[1] = [0, 1, 2, 3, 4]
    #   table[1] # => [0, 1, 2]
    #
    # If a single value is given, replaces all fields in the column with that value:
    #   table[1] = 'bat'
    #   table[1] # => ["bat", "bat", "bat"]
    #
    # ---
    #
    # Set a Column by Its \String Header::
    # - Form: <tt>table[header] = field_or_array_of_fields</tt>,
    #   +header+ a \String header, +field_or_array_of_fields+ a field value
    #   or an \Array of \String fields.
    # - Access mode: <tt>:col</tt> or <tt>:col_or_row</tt>.
    # - Return value: +field_or_array_of_fields+.
    #
    # If the column exists, it is replaced:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   new_col = [3, 4, 5]
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #   return_value = table['Value'] = new_col
    #   return_value.equal?(new_col) # => true # Returned the column
    #   table['Value'] # => [3, 4, 5]
    #   # The rows, as revised:
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   table[0].to_h # => {"Name"=>"foo", "Value"=>3}
    #   table[1].to_h # => {"Name"=>"bar", "Value"=>4}
    #   table[2].to_h # => {"Name"=>"baz", "Value"=>5}
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #
    # If there are too few values, fills with +nil+ values:
    #   table['Value'] = [0]
    #   table['Value'] # => [0, nil, nil]
    #
    # If there are too many values, ignores the extra values:
    #   table['Value'] = [0, 1, 2, 3, 4]
    #   table['Value'] # => [0, 1, 2]
    #
    # If the column does not exist, extends the table by adding columns:
    #   table['Note'] = ['x', 'y', 'z']
    #   table['Note'] # => ["x", "y", "z"]
    #   # The rows, as revised:
    #   table.by_row!
    #   table[0].to_h # => {"Name"=>"foo", "Value"=>0, "Note"=>"x"}
    #   table[1].to_h # => {"Name"=>"bar", "Value"=>1, "Note"=>"y"}
    #   table[2].to_h # => {"Name"=>"baz", "Value"=>2, "Note"=>"z"}
    #   table.by_col!
    #
    # If a single value is given, replaces all fields in the column with that value:
    #   table['Value'] = 'bat'
    #   table['Value'] # => ["bat", "bat", "bat"]
    def []=(index_or_header, value)
      if @mode == :row or  # by index
         (@mode == :col_or_row and index_or_header.is_a? Integer)
        if value.is_a? Array
          @table[index_or_header] = Row.new(headers, value)
        else
          @table[index_or_header] = value
        end
      else                 # set column
        unless index_or_header.is_a? Integer
          index = @headers.index(index_or_header) || @headers.size
          @headers[index] = index_or_header
        end
        if value.is_a? Array  # multiple values
          @table.each_with_index do |row, i|
            if row.header_row?
              row[index_or_header] = index_or_header
            else
              row[index_or_header] = value[i]
            end
          end
        else                  # repeated value
          @table.each do |row|
            if row.header_row?
              row[index_or_header] = index_or_header
            else
              row[index_or_header] = value
            end
          end
        end
      end
    end

    # :call-seq:
    #   table.values_at(*indexes) -> array_of_rows
    #   table.values_at(*headers) -> array_of_columns_data
    #
    # If the access mode is <tt>:row</tt> or <tt>:col_or_row</tt>,
    # and each argument is either an \Integer or a \Range,
    # returns rows.
    # Otherwise, returns columns data.
    #
    # In either case, the returned values are in the order
    # specified by the arguments.  Arguments may be repeated.
    #
    # ---
    #
    # Returns rows as an \Array of \CSV::Row objects.
    #
    # No argument:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.values_at # => []
    #
    # One index:
    #   values = table.values_at(0)
    #   values # => [#<CSV::Row "Name":"foo" "Value":"0">]
    #
    # Two indexes:
    #   values = table.values_at(2, 0)
    #   values # => [#<CSV::Row "Name":"baz" "Value":"2">, #<CSV::Row "Name":"foo" "Value":"0">]
    #
    # One \Range:
    #   values = table.values_at(1..2)
    #   values # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
    #
    # \Ranges and indexes:
    #   values = table.values_at(0..1, 1..2, 0, 2)
    #   pp values
    # Output:
    #   [#<CSV::Row "Name":"foo" "Value":"0">,
    #    #<CSV::Row "Name":"bar" "Value":"1">,
    #    #<CSV::Row "Name":"bar" "Value":"1">,
    #    #<CSV::Row "Name":"baz" "Value":"2">,
    #    #<CSV::Row "Name":"foo" "Value":"0">,
    #    #<CSV::Row "Name":"baz" "Value":"2">]
    #
    # ---
    #
    # Returns columns data as row Arrays,
    # each consisting of the specified columns data for that row:
    #   values = table.values_at('Name')
    #   values # => [["foo"], ["bar"], ["baz"]]
    #   values = table.values_at('Value', 'Name')
    #   values # => [["0", "foo"], ["1", "bar"], ["2", "baz"]]
    def values_at(*indices_or_headers)
      if @mode == :row or  # by indices
         ( @mode == :col_or_row and indices_or_headers.all? do |index|
                                      index.is_a?(Integer)         or
                                      ( index.is_a?(Range)         and
                                        index.first.is_a?(Integer) and
                                        index.last.is_a?(Integer) )
                                    end )
        @table.values_at(*indices_or_headers)
      else                 # by headers
        @table.map { |row| row.values_at(*indices_or_headers) }
      end
    end

    # :call-seq:
    #   table << row_or_array -> self
    #
    # If +row_or_array+ is a \CSV::Row object,
    # it is appended to the table:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table << CSV::Row.new(table.headers, ['bat', 3])
    #   table[3] # => #<CSV::Row "Name":"bat" "Value":3>
    #
    # If +row_or_array+ is an \Array, it is used to create a new
    # \CSV::Row object which is then appended to the table:
    #   table << ['bam', 4]
    #   table[4] # => #<CSV::Row "Name":"bam" "Value":4>
    def <<(row_or_array)
      if row_or_array.is_a? Array  # append Array
        @table << Row.new(headers, row_or_array)
      else                         # append Row
        @table << row_or_array
      end

      self # for chaining
    end

    #
    # :call-seq:
    #   table.push(*rows_or_arrays) -> self
    #
    # A shortcut for appending multiple rows. Equivalent to:
    #   rows.each {|row| self << row }
    #
    # Each argument may be either a \CSV::Row object or an \Array:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   rows = [
    #     CSV::Row.new(table.headers, ['bat', 3]),
    #     ['bam', 4]
    #   ]
    #   table.push(*rows)
    #   table[3..4] # => [#<CSV::Row "Name":"bat" "Value":3>, #<CSV::Row "Name":"bam" "Value":4>]
    def push(*rows)
      rows.each { |row| self << row }

      self # for chaining
    end

    # :call-seq:
    #   table.delete(*indexes) -> deleted_values
    #   table.delete(*headers) -> deleted_values
    #
    # If the access mode is <tt>:row</tt> or <tt>:col_or_row</tt>,
    # and each argument is either an \Integer or a \Range,
    # returns deleted rows.
    # Otherwise, returns deleted columns data.
    #
    # In either case, the returned values are in the order
    # specified by the arguments.  Arguments may be repeated.
    #
    # ---
    #
    # Returns rows as an \Array of \CSV::Row objects.
    #
    # One index:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   deleted_values = table.delete(0)
    #   deleted_values # => [#<CSV::Row "Name":"foo" "Value":"0">]
    #
    # Two indexes:
    #   table = CSV.parse(source, headers: true)
    #   deleted_values = table.delete(2, 0)
    #   deleted_values # => [#<CSV::Row "Name":"baz" "Value":"2">, #<CSV::Row "Name":"foo" "Value":"0">]
    #
    # ---
    #
    # Returns columns data as column Arrays.
    #
    # One header:
    #   table = CSV.parse(source, headers: true)
    #   deleted_values = table.delete('Name')
    #   deleted_values # => ["foo", "bar", "baz"]
    #
    # Two headers:
    #   table = CSV.parse(source, headers: true)
    #   deleted_values = table.delete('Value', 'Name')
    #   deleted_values # => [["0", "1", "2"], ["foo", "bar", "baz"]]
    def delete(*indexes_or_headers)
      if indexes_or_headers.empty?
        raise ArgumentError, "wrong number of arguments (given 0, expected 1+)"
      end
      deleted_values = indexes_or_headers.map do |index_or_header|
        if @mode == :row or  # by index
            (@mode == :col_or_row and index_or_header.is_a? Integer)
          @table.delete_at(index_or_header)
        else                 # by header
          if index_or_header.is_a? Integer
            @headers.delete_at(index_or_header)
          else
            @headers.delete(index_or_header)
          end
          @table.map { |row| row.delete(index_or_header).last }
        end
      end
      if indexes_or_headers.size == 1
        deleted_values[0]
      else
        deleted_values
      end
    end

    # :call-seq:
    #   table.delete_if {|row_or_column| ... } -> self
    #
    # Removes rows or columns for which the block returns a truthy value;
    # returns +self+.
    #
    # Removes rows when the access mode is <tt>:row</tt> or <tt>:col_or_row</tt>;
    # calls the block with each \CSV::Row object:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   table.size # => 3
    #   table.delete_if {|row| row['Name'].start_with?('b') }
    #   table.size # => 1
    #
    # Removes columns when the access mode is <tt>:col</tt>;
    # calls the block with each column as a 2-element array
    # containing the header and an \Array of column fields:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #   table.headers.size # => 2
    #   table.delete_if {|column_data| column_data[1].include?('2') }
    #   table.headers.size # => 1
    #
    # Returns a new \Enumerator if no block is given:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.delete_if # => #<Enumerator: #<CSV::Table mode:col_or_row row_count:4>:delete_if>
    def delete_if(&block)
      return enum_for(__method__) { @mode == :row or @mode == :col_or_row ? size : headers.size } unless block_given?

      if @mode == :row or @mode == :col_or_row  # by index
        @table.delete_if(&block)
      else                                      # by header
        headers.each do |header|
          delete(header) if yield([header, self[header]])
        end
      end

      self # for chaining
    end

    include Enumerable

    # :call-seq:
    #  table.each {|row_or_column| ... ) -> self
    #
    # Calls the block with each row or column; returns +self+.
    #
    # When the access mode is <tt>:row</tt> or <tt>:col_or_row</tt>,
    # calls the block with each \CSV::Row object:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.by_row! # => #<CSV::Table mode:row row_count:4>
    #   table.each {|row| p row }
    # Output:
    #   #<CSV::Row "Name":"foo" "Value":"0">
    #   #<CSV::Row "Name":"bar" "Value":"1">
    #   #<CSV::Row "Name":"baz" "Value":"2">
    #
    # When the access mode is <tt>:col</tt>,
    # calls the block with each column as a 2-element array
    # containing the header and an \Array of column fields:
    #   table.by_col! # => #<CSV::Table mode:col row_count:4>
    #   table.each {|column_data| p column_data }
    # Output:
    #   ["Name", ["foo", "bar", "baz"]]
    #   ["Value", ["0", "1", "2"]]
    #
    # Returns a new \Enumerator if no block is given:
    #   table.each # => #<Enumerator: #<CSV::Table mode:col row_count:4>:each>
    def each(&block)
      return enum_for(__method__) { @mode == :col ? headers.size : size } unless block_given?

      if @mode == :col
        headers.each.with_index do |header, i|
          yield([header, @table.map {|row| row[header, i]}])
        end
      else
        @table.each(&block)
      end

      self # for chaining
    end

    # :call-seq:
    #   table == other_table -> true or false
    #
    # Returns +true+ if all each row of +self+ <tt>==</tt>
    # the corresponding row of +other_table+, otherwise, +false+.
    #
    # The access mode does no affect the result.
    #
    # Equal tables:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   other_table = CSV.parse(source, headers: true)
    #   table == other_table # => true
    #
    # Different row count:
    #   other_table.delete(2)
    #   table == other_table # => false
    #
    # Different last row:
    #   other_table << ['bat', 3]
    #   table == other_table # => false
    def ==(other)
      return @table == other.table if other.is_a? CSV::Table
      @table == other
    end

    # :call-seq:
    #   table.to_a -> array_of_arrays
    #
    # Returns the table as an \Array of \Arrays;
    # the headers are in the first row:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.to_a # => [["Name", "Value"], ["foo", "0"], ["bar", "1"], ["baz", "2"]]
    def to_a
      array = [headers]
      @table.each do |row|
        array.push(row.fields) unless row.header_row?
      end

      array
    end

    # :call-seq:
    #   table.to_csv(**options) -> csv_string
    #
    # Returns the table as \CSV string.
    # See {Options for Generating}[../CSV.html#class-CSV-label-Options+for+Generating].
    #
    # Defaults option +write_headers+ to +true+:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.to_csv # => "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #
    # Omits the headers if option +write_headers+ is given as +false+
    # (see {Option +write_headers+}[../CSV.html#class-CSV-label-Option+write_headers]):
    #   table.to_csv(write_headers: false) # => "foo,0\nbar,1\nbaz,2\n"
    #
    # Limit rows if option +limit+ is given like +2+:
    #   table.to_csv(limit: 2) # => "Name,Value\nfoo,0\nbar,1\n"
    def to_csv(write_headers: true, limit: nil, **options)
      array = write_headers ? [headers.to_csv(**options)] : []
      limit ||= @table.size
      limit = @table.size + 1 + limit if limit < 0
      limit = 0 if limit < 0
      @table.first(limit).each do |row|
        array.push(row.fields.to_csv(**options)) unless row.header_row?
      end

      array.join("")
    end
    alias_method :to_s, :to_csv

    #
    # Extracts the nested value specified by the sequence of +index+ or +header+ objects by calling dig at each step,
    # returning nil if any intermediate step is nil.
    #
    def dig(index_or_header, *index_or_headers)
      value = self[index_or_header]
      if value.nil?
        nil
      elsif index_or_headers.empty?
        value
      else
        unless value.respond_to?(:dig)
          raise TypeError, "#{value.class} does not have \#dig method"
        end
        value.dig(*index_or_headers)
      end
    end

    # :call-seq:
    #   table.inspect => string
    #
    # Returns a <tt>US-ASCII</tt>-encoded \String showing table:
    # - Class: <tt>CSV::Table</tt>.
    # - Access mode: <tt>:row</tt>, <tt>:col</tt>, or <tt>:col_or_row</tt>.
    # - Size:  Row count, including the header row.
    #
    # Example:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   table.inspect # => "#<CSV::Table mode:col_or_row row_count:4>\nName,Value\nfoo,0\nbar,1\nbaz,2\n"
    #
    def inspect
      inspected = +"#<#{self.class} mode:#{@mode} row_count:#{to_a.size}>"
      summary = to_csv(limit: 5)
      inspected << "\n" << summary if summary.encoding.ascii_compatible?
      inspected
    end
  end
end
PK)J[��g��+share/gems/gems/csv-3.3.2/lib/csv/parser.rbnu�[���# frozen_string_literal: true

require "strscan"

require_relative "input_record_separator"
require_relative "row"
require_relative "table"

class CSV
  # Note: Don't use this class directly. This is an internal class.
  class Parser
    #
    # A CSV::Parser is m17n aware. The parser works in the Encoding of the IO
    # or String object being read from or written to. Your data is never transcoded
    # (unless you ask Ruby to transcode it for you) and will literally be parsed in
    # the Encoding it is in. Thus CSV will return Arrays or Rows of Strings in the
    # Encoding of your data. This is accomplished by transcoding the parser itself
    # into your Encoding.
    #

    # Raised when encoding is invalid.
    class InvalidEncoding < StandardError
    end

    # Raised when unexpected case is happen.
    class UnexpectedError < StandardError
    end

    #
    # CSV::Scanner receives a CSV output, scans it and return the content.
    # It also controls the life cycle of the object with its methods +keep_start+,
    # +keep_end+, +keep_back+, +keep_drop+.
    #
    # Uses StringScanner (the official strscan gem). Strscan provides lexical
    # scanning operations on a String. We inherit its object and take advantage
    # on the methods. For more information, please visit:
    # https://ruby-doc.org/stdlib-2.6.1/libdoc/strscan/rdoc/StringScanner.html
    #
    class Scanner < StringScanner
      alias_method :scan_all, :scan

      def initialize(*args)
        super
        @keeps = []
      end

      def each_line(row_separator)
        position = pos
        rest.each_line(row_separator) do |line|
          position += line.bytesize
          self.pos = position
          yield(line)
        end
      end

      def keep_start
        @keeps.push(pos)
      end

      def keep_end
        start = @keeps.pop
        string.byteslice(start, pos - start)
      end

      def keep_back
        self.pos = @keeps.pop
      end

      def keep_drop
        @keeps.pop
      end
    end

    #
    # CSV::InputsScanner receives IO inputs, encoding and the chunk_size.
    # It also controls the life cycle of the object with its methods +keep_start+,
    # +keep_end+, +keep_back+, +keep_drop+.
    #
    # CSV::InputsScanner.scan() tries to match with pattern at the current position.
    # If there's a match, the scanner advances the "scan pointer" and returns the matched string.
    # Otherwise, the scanner returns nil.
    #
    # CSV::InputsScanner.rest() returns the "rest" of the string (i.e. everything after the scan pointer).
    # If there is no more data (eos? = true), it returns "".
    #
    class InputsScanner
      def initialize(inputs, encoding, row_separator, chunk_size: 8192)
        @inputs = inputs.dup
        @encoding = encoding
        @row_separator = row_separator
        @chunk_size = chunk_size
        @last_scanner = @inputs.empty?
        @keeps = []
        read_chunk
      end

      def each_line(row_separator)
        return enum_for(__method__, row_separator) unless block_given?
        buffer = nil
        input = @scanner.rest
        position = @scanner.pos
        offset = 0
        n_row_separator_chars = row_separator.size
        # trace(__method__, :start, input)
        while true
          input.each_line(row_separator) do |line|
            @scanner.pos += line.bytesize
            if buffer
              if n_row_separator_chars == 2 and
                buffer.end_with?(row_separator[0]) and
                line.start_with?(row_separator[1])
                buffer << line[0]
                line = line[1..-1]
                position += buffer.bytesize + offset
                @scanner.pos = position
                offset = 0
                yield(buffer)
                buffer = nil
                next if line.empty?
              else
                buffer << line
                line = buffer
                buffer = nil
              end
            end
            if line.end_with?(row_separator)
              position += line.bytesize + offset
              @scanner.pos = position
              offset = 0
              yield(line)
            else
              buffer = line
            end
          end
          break unless read_chunk
          input = @scanner.rest
          position = @scanner.pos
          offset = -buffer.bytesize if buffer
        end
        yield(buffer) if buffer
      end

      def scan(pattern)
        # trace(__method__, pattern, :start)
        value = @scanner.scan(pattern)
        # trace(__method__, pattern, :done, :last, value) if @last_scanner
        return value if @last_scanner

        read_chunk if value and @scanner.eos?
        # trace(__method__, pattern, :done, value)
        value
      end

      def scan_all(pattern)
        # trace(__method__, pattern, :start)
        value = @scanner.scan(pattern)
        # trace(__method__, pattern, :done, :last, value) if @last_scanner
        return value if @last_scanner

        # trace(__method__, pattern, :done, :nil) if value.nil?
        return nil if value.nil?
        while @scanner.eos? and read_chunk and (sub_value = @scanner.scan(pattern))
          # trace(__method__, pattern, :sub, sub_value)
          value << sub_value
        end
        # trace(__method__, pattern, :done, value)
        value
      end

      def eos?
        @scanner.eos?
      end

      def keep_start
        # trace(__method__, :start)
        adjust_last_keep
        @keeps.push([@scanner, @scanner.pos, nil])
        # trace(__method__, :done)
      end

      def keep_end
        # trace(__method__, :start)
        scanner, start, buffer = @keeps.pop
        if scanner == @scanner
          keep = @scanner.string.byteslice(start, @scanner.pos - start)
        else
          keep = @scanner.string.byteslice(0, @scanner.pos)
        end
        if buffer
          buffer << keep
          keep = buffer
        end
        # trace(__method__, :done, keep)
        keep
      end

      def keep_back
        # trace(__method__, :start)
        scanner, start, buffer = @keeps.pop
        if buffer
          # trace(__method__, :rescan, start, buffer)
          string = @scanner.string
          if scanner == @scanner
            keep = string.byteslice(start,
                                    string.bytesize - @scanner.pos - start)
          else
            keep = string
          end
          if keep and not keep.empty?
            @inputs.unshift(StringIO.new(keep))
            @last_scanner = false
          end
          @scanner = StringScanner.new(buffer)
        else
          if @scanner != scanner
            message = "scanners are different but no buffer: "
            message += "#{@scanner.inspect}(#{@scanner.object_id}): "
            message += "#{scanner.inspect}(#{scanner.object_id})"
            raise UnexpectedError, message
          end
          # trace(__method__, :repos, start, buffer)
          @scanner.pos = start
          last_scanner, last_start, last_buffer = @keeps.last
          # Drop the last buffer when the last buffer is the same data
          # in the last keep. If we keep it, we have duplicated data
          # by the next keep_back.
          if last_scanner == @scanner and
            last_buffer and
            last_buffer == last_scanner.string.byteslice(last_start, start)
            @keeps.last[2] = nil
          end
        end
        read_chunk if @scanner.eos?
      end

      def keep_drop
        _, _, buffer = @keeps.pop
        # trace(__method__, :done, :empty) unless buffer
        return unless buffer

        last_keep = @keeps.last
        # trace(__method__, :done, :no_last_keep) unless last_keep
        return unless last_keep

        if last_keep[2]
          last_keep[2] << buffer
        else
          last_keep[2] = buffer
        end
        # trace(__method__, :done)
      end

      def rest
        @scanner.rest
      end

      def check(pattern)
        @scanner.check(pattern)
      end

      private
      def trace(*args)
        pp([*args, @scanner, @scanner&.string, @scanner&.pos, @keeps])
      end

      def adjust_last_keep
        # trace(__method__, :start)

        keep = @keeps.last
        # trace(__method__, :done, :empty) if keep.nil?
        return if keep.nil?

        scanner, start, buffer = keep
        string = @scanner.string
        if @scanner != scanner
          start = 0
        end
        if start == 0 and @scanner.eos?
          keep_data = string
        else
          keep_data = string.byteslice(start, @scanner.pos - start)
        end
        if keep_data
          if buffer
            buffer << keep_data
          else
            keep[2] = keep_data.dup
          end
        end

        # trace(__method__, :done)
      end

      def read_chunk
        return false if @last_scanner

        adjust_last_keep

        input = @inputs.first
        case input
        when StringIO
          string = input.read
          raise InvalidEncoding unless string.valid_encoding?
          # trace(__method__, :stringio, string)
          @scanner = StringScanner.new(string)
          @inputs.shift
          @last_scanner = @inputs.empty?
          true
        else
          chunk = input.gets(@row_separator, @chunk_size)
          if chunk
            raise InvalidEncoding unless chunk.valid_encoding?
            # trace(__method__, :chunk, chunk)
            @scanner = StringScanner.new(chunk)
            if input.respond_to?(:eof?) and input.eof?
              @inputs.shift
              @last_scanner = @inputs.empty?
            end
            true
          else
            # trace(__method__, :no_chunk)
            @scanner = StringScanner.new("".encode(@encoding))
            @inputs.shift
            @last_scanner = @inputs.empty?
            if @last_scanner
              false
            else
              read_chunk
            end
          end
        end
      end
    end

    def initialize(input, options)
      @input = input
      @options = options
      @samples = []

      prepare
    end

    def column_separator
      @column_separator
    end

    def row_separator
      @row_separator
    end

    def quote_character
      @quote_character
    end

    def field_size_limit
      @max_field_size&.succ
    end

    def max_field_size
      @max_field_size
    end

    def skip_lines
      @skip_lines
    end

    def unconverted_fields?
      @unconverted_fields
    end

    def headers
      @headers
    end

    def header_row?
      @use_headers and @headers.nil?
    end

    def return_headers?
      @return_headers
    end

    def skip_blanks?
      @skip_blanks
    end

    def liberal_parsing?
      @liberal_parsing
    end

    def lineno
      @lineno
    end

    def line
      last_line
    end

    def parse(&block)
      return to_enum(__method__) unless block_given?

      if @return_headers and @headers and @raw_headers
        headers = Row.new(@headers, @raw_headers, true)
        if @unconverted_fields
          headers = add_unconverted_fields(headers, [])
        end
        yield headers
      end

      begin
        @scanner ||= build_scanner
        __send__(@parse_method, &block)
      rescue InvalidEncoding
        if @scanner
          ignore_broken_line
          lineno = @lineno
        else
          lineno = @lineno + 1
        end
        raise InvalidEncodingError.new(@encoding, lineno)
      rescue UnexpectedError => error
        if @scanner
          ignore_broken_line
          lineno = @lineno
        else
          lineno = @lineno + 1
        end
        message = "This should not be happen: #{error.message}: "
        message += "Please report this to https://github.com/ruby/csv/issues"
        raise MalformedCSVError.new(message, lineno)
      end
    end

    def use_headers?
      @use_headers
    end

    private
    # A set of tasks to prepare the file in order to parse it
    def prepare
      prepare_variable
      prepare_quote_character
      prepare_backslash
      prepare_skip_lines
      prepare_strip
      prepare_separators
      validate_strip_and_col_sep_options
      prepare_quoted
      prepare_unquoted
      prepare_line
      prepare_header
      prepare_parser
    end

    def prepare_variable
      @encoding = @options[:encoding]
      liberal_parsing = @options[:liberal_parsing]
      if liberal_parsing
        @liberal_parsing = true
        if liberal_parsing.is_a?(Hash)
          @double_quote_outside_quote =
            liberal_parsing[:double_quote_outside_quote]
          @backslash_quote = liberal_parsing[:backslash_quote]
        else
          @double_quote_outside_quote = false
          @backslash_quote = false
        end
      else
        @liberal_parsing = false
        @backslash_quote = false
      end
      @unconverted_fields = @options[:unconverted_fields]
      @max_field_size = @options[:max_field_size]
      @skip_blanks = @options[:skip_blanks]
      @fields_converter = @options[:fields_converter]
      @header_fields_converter = @options[:header_fields_converter]
    end

    def prepare_quote_character
      @quote_character = @options[:quote_character]
      if @quote_character.nil?
        @escaped_quote_character = nil
        @escaped_quote = nil
      else
        @quote_character = @quote_character.to_s.encode(@encoding)
        if @quote_character.length != 1
          message = ":quote_char has to be nil or a single character String"
          raise ArgumentError, message
        end
        @escaped_quote_character = Regexp.escape(@quote_character)
        @escaped_quote = Regexp.new(@escaped_quote_character)
      end
    end

    def prepare_backslash
      return unless @backslash_quote

      @backslash_character = "\\".encode(@encoding)

      @escaped_backslash_character = Regexp.escape(@backslash_character)
      @escaped_backslash = Regexp.new(@escaped_backslash_character)
      if @quote_character.nil?
        @backslash_quote_character = nil
      else
        @backslash_quote_character =
          @backslash_character + @escaped_quote_character
      end
    end

    def prepare_skip_lines
      skip_lines = @options[:skip_lines]
      case skip_lines
      when String
        @skip_lines = skip_lines.encode(@encoding)
      when Regexp, nil
        @skip_lines = skip_lines
      else
        unless skip_lines.respond_to?(:match)
          message =
            ":skip_lines has to respond to \#match: #{skip_lines.inspect}"
          raise ArgumentError, message
        end
        @skip_lines = skip_lines
      end
    end

    def prepare_strip
      @strip = @options[:strip]
      @escaped_strip = nil
      @strip_value = nil
      @rstrip_value = nil
      if @strip.is_a?(String)
        case @strip.length
        when 0
          raise ArgumentError, ":strip must not be an empty String"
        when 1
          # ok
        else
          raise ArgumentError, ":strip doesn't support 2 or more characters yet"
        end
        @strip = @strip.encode(@encoding)
        @escaped_strip = Regexp.escape(@strip)
        if @quote_character
          @strip_value = Regexp.new(@escaped_strip +
                                    "+".encode(@encoding))
          @rstrip_value = Regexp.new(@escaped_strip +
                                     "+\\z".encode(@encoding))
        end
      elsif @strip
        strip_values = " \t\f\v"
        @escaped_strip = strip_values.encode(@encoding)
        if @quote_character
          @strip_value = Regexp.new("[#{strip_values}]+".encode(@encoding))
          @rstrip_value = Regexp.new("[#{strip_values}]+\\z".encode(@encoding))
        end
      end
    end

    begin
      StringScanner.new("x").scan("x")
    rescue TypeError
      STRING_SCANNER_SCAN_ACCEPT_STRING = false
    else
      STRING_SCANNER_SCAN_ACCEPT_STRING = true
    end

    def prepare_separators
      column_separator = @options[:column_separator]
      @column_separator = column_separator.to_s.encode(@encoding)
      if @column_separator.size < 1
        message = ":col_sep must be 1 or more characters: "
        message += column_separator.inspect
        raise ArgumentError, message
      end
      @row_separator =
        resolve_row_separator(@options[:row_separator]).encode(@encoding)

      @escaped_column_separator = Regexp.escape(@column_separator)
      @escaped_first_column_separator = Regexp.escape(@column_separator[0])
      if @column_separator.size > 1
        @column_end = Regexp.new(@escaped_column_separator)
        @column_ends = @column_separator.each_char.collect do |char|
          Regexp.new(Regexp.escape(char))
        end
        @first_column_separators = Regexp.new(@escaped_first_column_separator +
                                              "+".encode(@encoding))
      else
        if STRING_SCANNER_SCAN_ACCEPT_STRING
          @column_end = @column_separator
        else
          @column_end = Regexp.new(@escaped_column_separator)
        end
        @column_ends = nil
        @first_column_separators = nil
      end

      escaped_row_separator = Regexp.escape(@row_separator)
      @row_end = Regexp.new(escaped_row_separator)
      if @row_separator.size > 1
        @row_ends = @row_separator.each_char.collect do |char|
          Regexp.new(Regexp.escape(char))
        end
      else
        @row_ends = nil
      end

      @cr = "\r".encode(@encoding)
      @lf = "\n".encode(@encoding)
      @line_end = Regexp.new("\r\n|\n|\r".encode(@encoding))
      @not_line_end = Regexp.new("[^\r\n]+".encode(@encoding))
    end

    # This method verifies that there are no (obvious) ambiguities with the
    # provided +col_sep+ and +strip+ parsing options. For example, if +col_sep+
    # and +strip+ were both equal to +\t+, then there would be no clear way to
    # parse the input.
    def validate_strip_and_col_sep_options
      return unless @strip

      if @strip.is_a?(String)
        if @column_separator.start_with?(@strip) || @column_separator.end_with?(@strip)
          raise ArgumentError,
                "The provided strip (#{@escaped_strip}) and " \
                "col_sep (#{@escaped_column_separator}) options are incompatible."
        end
      else
        if Regexp.new("\\A[#{@escaped_strip}]|[#{@escaped_strip}]\\z").match?(@column_separator)
          raise ArgumentError,
                "The provided strip (true) and " \
                "col_sep (#{@escaped_column_separator}) options are incompatible."
        end
      end
    end

    def prepare_quoted
      if @quote_character
        @quotes = Regexp.new(@escaped_quote_character +
                             "+".encode(@encoding))
        no_quoted_values = @escaped_quote_character.dup
        if @backslash_quote
          no_quoted_values << @escaped_backslash_character
        end
        @quoted_value = Regexp.new("[^".encode(@encoding) +
                                   no_quoted_values +
                                   "]+".encode(@encoding))
      end
      if @escaped_strip
        @split_column_separator = Regexp.new(@escaped_strip +
                                             "*".encode(@encoding) +
                                             @escaped_column_separator +
                                             @escaped_strip +
                                             "*".encode(@encoding))
      else
        if @column_separator == " ".encode(@encoding)
          @split_column_separator = Regexp.new(@escaped_column_separator)
        else
          @split_column_separator = @column_separator
        end
      end
    end

    def prepare_unquoted
      return if @quote_character.nil?

      no_unquoted_values = "\r\n".encode(@encoding)
      no_unquoted_values << @escaped_first_column_separator
      unless @liberal_parsing
        no_unquoted_values << @escaped_quote_character
      end
      @unquoted_value = Regexp.new("[^".encode(@encoding) +
                                   no_unquoted_values +
                                   "]+".encode(@encoding))
    end

    def resolve_row_separator(separator)
      if separator == :auto
        cr = "\r".encode(@encoding)
        lf = "\n".encode(@encoding)
        if @input.is_a?(StringIO)
          pos = @input.pos
          separator = detect_row_separator(@input.read, cr, lf)
          @input.seek(pos)
        elsif @input.respond_to?(:gets)
          if @input.is_a?(File)
            chunk_size = 32 * 1024
          else
            chunk_size = 1024
          end
          begin
            while separator == :auto
              #
              # if we run out of data, it's probably a single line
              # (ensure will set default value)
              #
              break unless sample = @input.gets(nil, chunk_size)

              # extend sample if we're unsure of the line ending
              if sample.end_with?(cr)
                sample << (@input.gets(nil, 1) || "")
              end

              @samples << sample

              separator = detect_row_separator(sample, cr, lf)
            end
          rescue IOError
            # do nothing:  ensure will set default
          end
        end
        separator = InputRecordSeparator.value if separator == :auto
      end
      separator.to_s.encode(@encoding)
    end

    def detect_row_separator(sample, cr, lf)
      lf_index = sample.index(lf)
      if lf_index
        cr_index = sample[0, lf_index].index(cr)
      else
        cr_index = sample.index(cr)
      end
      if cr_index and lf_index
        if cr_index + 1 == lf_index
          cr + lf
        elsif cr_index < lf_index
          cr
        else
          lf
        end
      elsif cr_index
        cr
      elsif lf_index
        lf
      else
        :auto
      end
    end

    def prepare_line
      @lineno = 0
      @last_line = nil
      @scanner = nil
    end

    def last_line
      if @scanner
        @last_line ||= @scanner.keep_end
      else
        @last_line
      end
    end

    def prepare_header
      @return_headers = @options[:return_headers]

      headers = @options[:headers]
      case headers
      when Array
        @raw_headers = headers
        quoted_fields = FieldsConverter::NO_QUOTED_FIELDS
        @use_headers = true
      when String
        @raw_headers, quoted_fields = parse_headers(headers)
        @use_headers = true
      when nil, false
        @raw_headers = nil
        @use_headers = false
      else
        @raw_headers = nil
        @use_headers = true
      end
      if @raw_headers
        @headers = adjust_headers(@raw_headers, quoted_fields)
      else
        @headers = nil
      end
    end

    def parse_headers(row)
      quoted_fields = []
      converter = lambda do |field, info|
        quoted_fields << info.quoted?
        field
      end
      headers = CSV.parse_line(row,
                               col_sep:    @column_separator,
                               row_sep:    @row_separator,
                               quote_char: @quote_character,
                               converters: [converter])
      [headers, quoted_fields]
    end

    def adjust_headers(headers, quoted_fields)
      adjusted_headers = @header_fields_converter.convert(headers, nil, @lineno, quoted_fields)
      adjusted_headers.each {|h| h.freeze if h.is_a? String}
      adjusted_headers
    end

    def prepare_parser
      @may_quoted = may_quoted?
      if @quote_character.nil?
        @parse_method = :parse_no_quote
      elsif @liberal_parsing or @strip
        @parse_method = :parse_quotable_robust
      else
        @parse_method = :parse_quotable_loose
      end
    end

    def may_quoted?
      return false if @quote_character.nil?

      if @input.is_a?(StringIO)
        pos = @input.pos
        sample = @input.read
        @input.seek(pos)
      else
        return false if @samples.empty?
        sample = @samples.first
      end
      sample[0, 128].index(@quote_character)
    end

    class UnoptimizedStringIO # :nodoc:
      def initialize(string)
        @io = StringIO.new(string, "rb:#{string.encoding}")
      end

      def gets(*args)
        @io.gets(*args)
      end

      def each_line(*args, &block)
        @io.each_line(*args, &block)
      end

      def eof?
        @io.eof?
      end
    end

    SCANNER_TEST = (ENV["CSV_PARSER_SCANNER_TEST"] == "yes")
    if SCANNER_TEST
      SCANNER_TEST_CHUNK_SIZE_NAME = "CSV_PARSER_SCANNER_TEST_CHUNK_SIZE"
      SCANNER_TEST_CHUNK_SIZE_VALUE = ENV[SCANNER_TEST_CHUNK_SIZE_NAME]
      def build_scanner
        inputs = @samples.collect do |sample|
          UnoptimizedStringIO.new(sample)
        end
        if @input.is_a?(StringIO)
          inputs << UnoptimizedStringIO.new(@input.read)
        else
          inputs << @input
        end
        begin
          chunk_size_value = ENV[SCANNER_TEST_CHUNK_SIZE_NAME]
        rescue # Ractor::IsolationError
          # Ractor on Ruby 3.0 can't read ENV value.
          chunk_size_value = SCANNER_TEST_CHUNK_SIZE_VALUE
        end
        chunk_size = Integer((chunk_size_value || "1"), 10)
        InputsScanner.new(inputs,
                          @encoding,
                          @row_separator,
                          chunk_size: chunk_size)
      end
    else
      def build_scanner
        string = nil
        if @samples.empty? and @input.is_a?(StringIO)
          string = @input.read
        elsif @samples.size == 1 and
              @input != ARGF and
              @input.respond_to?(:eof?) and
              @input.eof?
          string = @samples[0]
        end
        if string
          unless string.valid_encoding?
            index = string.lines(@row_separator).index do |line|
              !line.valid_encoding?
            end
            if index
              raise InvalidEncodingError.new(@encoding, @lineno + index + 1)
            end
          end
          Scanner.new(string)
        else
          inputs = @samples.collect do |sample|
            StringIO.new(sample)
          end
          inputs << @input
          InputsScanner.new(inputs, @encoding, @row_separator)
        end
      end
    end

    def skip_needless_lines
      return unless @skip_lines

      until @scanner.eos?
        @scanner.keep_start
        line = @scanner.scan_all(@not_line_end) || "".encode(@encoding)
        line << @row_separator if parse_row_end
        if skip_line?(line)
          @lineno += 1
          @scanner.keep_drop
        else
          @scanner.keep_back
          return
        end
      end
    end

    def skip_line?(line)
      line = line.delete_suffix(@row_separator)
      case @skip_lines
      when String
        line.include?(@skip_lines)
      when Regexp
        @skip_lines.match?(line)
      else
        @skip_lines.match(line)
      end
    end

    def validate_field_size(field)
      return unless @max_field_size
      return if field.size <= @max_field_size
      ignore_broken_line
      message = "Field size exceeded: #{field.size} > #{@max_field_size}"
      raise MalformedCSVError.new(message, @lineno)
    end

    def parse_no_quote(&block)
      @scanner.each_line(@row_separator) do |line|
        next if @skip_lines and skip_line?(line)
        original_line = line
        line = line.delete_suffix(@row_separator)

        if line.empty?
          next if @skip_blanks
          row = []
        else
          line = strip_value(line)
          row = line.split(@split_column_separator, -1)
          if @max_field_size
            row.each do |column|
              validate_field_size(column)
            end
          end
          n_columns = row.size
          i = 0
          while i < n_columns
            row[i] = nil if row[i].empty?
            i += 1
          end
        end
        @last_line = original_line
        emit_row(row, &block)
      end
    end

    def parse_quotable_loose(&block)
      @scanner.keep_start
      @scanner.each_line(@row_separator) do |line|
        if @skip_lines and skip_line?(line)
          @scanner.keep_drop
          @scanner.keep_start
          next
        end
        original_line = line
        line = line.delete_suffix(@row_separator)

        if line.empty?
          if @skip_blanks
            @scanner.keep_drop
            @scanner.keep_start
            next
          end
          row = []
          quoted_fields = FieldsConverter::NO_QUOTED_FIELDS
        elsif line.include?(@cr) or line.include?(@lf)
          @scanner.keep_back
          @parse_method = :parse_quotable_robust
          return parse_quotable_robust(&block)
        else
          row = line.split(@split_column_separator, -1)
          quoted_fields = []
          n_columns = row.size
          i = 0
          while i < n_columns
            column = row[i]
            if column.empty?
              quoted_fields << false
              row[i] = nil
            else
              n_quotes = column.count(@quote_character)
              if n_quotes.zero?
                quoted_fields << false
                # no quote
              elsif n_quotes == 2 and
                   column.start_with?(@quote_character) and
                   column.end_with?(@quote_character)
                quoted_fields << true
                row[i] = column[1..-2]
              else
                @scanner.keep_back
                @parse_method = :parse_quotable_robust
                return parse_quotable_robust(&block)
              end
              validate_field_size(row[i])
            end
            i += 1
          end
        end
        @scanner.keep_drop
        @scanner.keep_start
        @last_line = original_line
        emit_row(row, quoted_fields, &block)
      end
      @scanner.keep_drop
    end

    def parse_quotable_robust(&block)
      row = []
      quoted_fields = []
      skip_needless_lines
      start_row
      while true
        @quoted_column_value = false
        @unquoted_column_value = false
        @scanner.scan_all(@strip_value) if @strip_value
        value = parse_column_value
        if value
          @scanner.scan_all(@strip_value) if @strip_value
          validate_field_size(value)
        end
        if parse_column_end
          row << value
          quoted_fields << @quoted_column_value
        elsif parse_row_end
          if row.empty? and value.nil?
            emit_row([], &block) unless @skip_blanks
          else
            row << value
            quoted_fields << @quoted_column_value
            emit_row(row, quoted_fields, &block)
            row = []
            quoted_fields.clear
          end
          skip_needless_lines
          start_row
        elsif @scanner.eos?
          break if row.empty? and value.nil?
          row << value
          quoted_fields << @quoted_column_value
          emit_row(row, quoted_fields, &block)
          break
        else
          if @quoted_column_value
            if liberal_parsing? and (new_line = @scanner.check(@line_end))
              message =
                "Illegal end-of-line sequence outside of a quoted field " +
                "<#{new_line.inspect}>"
            else
              message = "Any value after quoted field isn't allowed"
            end
            ignore_broken_line
            raise MalformedCSVError.new(message, @lineno)
          elsif @unquoted_column_value and
                (new_line = @scanner.scan(@line_end))
            ignore_broken_line
            message = "Unquoted fields do not allow new line " +
                      "<#{new_line.inspect}>"
            raise MalformedCSVError.new(message, @lineno)
          elsif @scanner.rest.start_with?(@quote_character)
            ignore_broken_line
            message = "Illegal quoting"
            raise MalformedCSVError.new(message, @lineno)
          elsif (new_line = @scanner.scan(@line_end))
            ignore_broken_line
            message = "New line must be <#{@row_separator.inspect}> " +
                      "not <#{new_line.inspect}>"
            raise MalformedCSVError.new(message, @lineno)
          else
            ignore_broken_line
            raise MalformedCSVError.new("TODO: Meaningful message",
                                        @lineno)
          end
        end
      end
    end

    def parse_column_value
      if @liberal_parsing
        quoted_value = parse_quoted_column_value
        if quoted_value
          @scanner.scan_all(@strip_value) if @strip_value
          unquoted_value = parse_unquoted_column_value
          if unquoted_value
            if @double_quote_outside_quote
              unquoted_value = unquoted_value.gsub(@quote_character * 2,
                                                   @quote_character)
              if quoted_value.empty? # %Q{""...} case
                return @quote_character + unquoted_value
              end
            end
            @quote_character + quoted_value + @quote_character + unquoted_value
          else
            quoted_value
          end
        else
          parse_unquoted_column_value
        end
      elsif @may_quoted
        parse_quoted_column_value ||
          parse_unquoted_column_value
      else
        parse_unquoted_column_value ||
          parse_quoted_column_value
      end
    end

    def parse_unquoted_column_value
      value = @scanner.scan_all(@unquoted_value)
      return nil unless value

      @unquoted_column_value = true
      if @first_column_separators
        while true
          @scanner.keep_start
          is_column_end = @column_ends.all? do |column_end|
            @scanner.scan(column_end)
          end
          @scanner.keep_back
          break if is_column_end
          sub_separator = @scanner.scan_all(@first_column_separators)
          break if sub_separator.nil?
          value << sub_separator
          sub_value = @scanner.scan_all(@unquoted_value)
          break if sub_value.nil?
          value << sub_value
        end
      end
      value.gsub!(@backslash_quote_character, @quote_character) if @backslash_quote
      if @rstrip_value
        value.gsub!(@rstrip_value, "")
      end
      value
    end

    def parse_quoted_column_value
      quotes = @scanner.scan_all(@quotes)
      return nil unless quotes

      @quoted_column_value = true
      n_quotes = quotes.size
      if (n_quotes % 2).zero?
        quotes[0, (n_quotes - 2) / 2]
      else
        value = quotes[0, n_quotes / 2]
        while true
          quoted_value = @scanner.scan_all(@quoted_value)
          value << quoted_value if quoted_value
          if @backslash_quote
            if @scanner.scan(@escaped_backslash)
              if @scanner.scan(@escaped_quote)
                value << @quote_character
              else
                value << @backslash_character
              end
              next
            end
          end

          quotes = @scanner.scan_all(@quotes)
          unless quotes
            ignore_broken_line
            message = "Unclosed quoted field"
            raise MalformedCSVError.new(message, @lineno)
          end
          n_quotes = quotes.size
          if n_quotes == 1
            break
          else
            value << quotes[0, n_quotes / 2]
            break if (n_quotes % 2) == 1
          end
        end
        value
      end
    end

    def parse_column_end
      return true if @scanner.scan(@column_end)
      return false unless @column_ends

      @scanner.keep_start
      if @column_ends.all? {|column_end| @scanner.scan(column_end)}
        @scanner.keep_drop
        true
      else
        @scanner.keep_back
        false
      end
    end

    def parse_row_end
      return true if @scanner.scan(@row_end)
      return false unless @row_ends
      @scanner.keep_start
      if @row_ends.all? {|row_end| @scanner.scan(row_end)}
        @scanner.keep_drop
        true
      else
        @scanner.keep_back
        false
      end
    end

    def strip_value(value)
      return value unless @strip
      return value if value.nil?

      case @strip
      when String
        while value.delete_prefix!(@strip)
          # do nothing
        end
        while value.delete_suffix!(@strip)
          # do nothing
        end
      else
        value.strip!
      end
      value
    end

    def ignore_broken_line
      @scanner.scan_all(@not_line_end)
      @scanner.scan_all(@line_end)
      @lineno += 1
    end

    def start_row
      if @last_line
        @last_line = nil
      else
        @scanner.keep_drop
      end
      @scanner.keep_start
    end

    def emit_row(row, quoted_fields=FieldsConverter::NO_QUOTED_FIELDS, &block)
      @lineno += 1

      raw_row = row
      if @use_headers
        if @headers.nil?
          @headers = adjust_headers(row, quoted_fields)
          return unless @return_headers
          row = Row.new(@headers, row, true)
        else
          row = Row.new(@headers,
                        @fields_converter.convert(raw_row, @headers, @lineno, quoted_fields))
        end
      else
        # convert fields, if needed...
        row = @fields_converter.convert(raw_row, nil, @lineno, quoted_fields)
      end

      # inject unconverted fields and accessor, if requested...
      if @unconverted_fields and not row.respond_to?(:unconverted_fields)
        add_unconverted_fields(row, raw_row)
      end

      yield(row)
    end

    # This method injects an instance variable <tt>unconverted_fields</tt> into
    # +row+ and an accessor method for +row+ called unconverted_fields().  The
    # variable is set to the contents of +fields+.
    def add_unconverted_fields(row, fields)
      class << row
        attr_reader :unconverted_fields
      end
      row.instance_variable_set(:@unconverted_fields, fields)
      row
    end
  end
end
PK)J[A��\�`�`(share/gems/gems/csv-3.3.2/lib/csv/row.rbnu�[���# frozen_string_literal: true

require "forwardable"

class CSV
  # = \CSV::Row
  # A \CSV::Row instance represents a \CSV table row.
  # (see {class CSV}[../CSV.html]).
  #
  # The instance may have:
  # - Fields: each is an object, not necessarily a \String.
  # - Headers: each serves a key, and also need not be a \String.
  #
  # === Instance Methods
  #
  # \CSV::Row has three groups of instance methods:
  # - Its own internally defined instance methods.
  # - Methods included by module Enumerable.
  # - Methods delegated to class Array.:
  #   * Array#empty?
  #   * Array#length
  #   * Array#size
  #
  # == Creating a \CSV::Row Instance
  #
  # Commonly, a new \CSV::Row instance is created by parsing \CSV source
  # that has headers:
  #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   table = CSV.parse(source, headers: true)
  #   table.each {|row| p row }
  # Output:
  #   #<CSV::Row "Name":"foo" "Value":"0">
  #   #<CSV::Row "Name":"bar" "Value":"1">
  #   #<CSV::Row "Name":"baz" "Value":"2">
  #
  # You can also create a row directly. See ::new.
  #
  # == Headers
  #
  # Like a \CSV::Table, a \CSV::Row has headers.
  #
  # A \CSV::Row that was created by parsing \CSV source
  # inherits its headers from the table:
  #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   table = CSV.parse(source, headers: true)
  #   row = table.first
  #   row.headers # => ["Name", "Value"]
  #
  # You can also create a new row with headers;
  # like the keys in a \Hash, the headers need not be Strings:
  #   row = CSV::Row.new([:name, :value], ['foo', 0])
  #   row.headers # => [:name, :value]
  #
  # The new row retains its headers even if added to a table
  # that has headers:
  #   table << row # => #<CSV::Table mode:col_or_row row_count:5>
  #   row.headers # => [:name, :value]
  #   row[:name] # => "foo"
  #   row['Name'] # => nil
  #
  #
  #
  # == Accessing Fields
  #
  # You may access a field in a \CSV::Row with either its \Integer index
  # (\Array-style) or its header (\Hash-style).
  #
  # Fetch a field using method #[]:
  #   row = CSV::Row.new(['Name', 'Value'], ['foo', 0])
  #   row[1] # => 0
  #   row['Value'] # => 0
  #
  # Set a field using method #[]=:
  #   row = CSV::Row.new(['Name', 'Value'], ['foo', 0])
  #   row # => #<CSV::Row "Name":"foo" "Value":0>
  #   row[0] = 'bar'
  #   row['Value'] = 1
  #   row # => #<CSV::Row "Name":"bar" "Value":1>
  #
  class Row
    # :call-seq:
    #   CSV::Row.new(headers, fields, header_row = false) -> csv_row
    #
    # Returns the new \CSV::Row instance constructed from
    # arguments +headers+ and +fields+; both should be Arrays;
    # note that the fields need not be Strings:
    #   row = CSV::Row.new(['Name', 'Value'], ['foo', 0])
    #   row # => #<CSV::Row "Name":"foo" "Value":0>
    #
    # If the \Array lengths are different, the shorter is +nil+-filled:
    #   row = CSV::Row.new(['Name', 'Value', 'Date', 'Size'], ['foo', 0])
    #   row # => #<CSV::Row "Name":"foo" "Value":0 "Date":nil "Size":nil>
    #
    # Each \CSV::Row object is either a <i>field row</i> or a <i>header row</i>;
    # by default, a new row is a field row;  for the row created above:
    #   row.field_row? # => true
    #   row.header_row? # => false
    #
    # If the optional argument +header_row+ is given as +true+,
    # the created row is a header row:
    #   row = CSV::Row.new(['Name', 'Value'], ['foo', 0], header_row = true)
    #   row # => #<CSV::Row "Name":"foo" "Value":0>
    #   row.field_row? # => false
    #   row.header_row? # => true
    def initialize(headers, fields, header_row = false)
      @header_row = header_row
      headers.each { |h| h.freeze if h.is_a? String }

      # handle extra headers or fields
      @row = if headers.size >= fields.size
        headers.zip(fields)
      else
        fields.zip(headers).each(&:reverse!)
      end
    end

    # Internal data format used to compare equality.
    attr_reader :row
    protected   :row

    ### Array Delegation ###

    extend Forwardable
    def_delegators :@row, :empty?, :length, :size

    # :call-seq:
    #   row.initialize_copy(other_row) -> self
    #
    # Calls superclass method.
    def initialize_copy(other)
      super_return_value = super
      @row = @row.collect(&:dup)
      super_return_value
    end

    # :call-seq:
    #   row.header_row? -> true or false
    #
    # Returns +true+ if this is a header row, +false+ otherwise.
    def header_row?
      @header_row
    end

    # :call-seq:
    #   row.field_row? -> true or false
    #
    # Returns +true+ if this is a field row, +false+ otherwise.
    def field_row?
      not header_row?
    end

    # :call-seq:
    #    row.headers -> array_of_headers
    #
    # Returns the headers for this row:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table.first
    #   row.headers # => ["Name", "Value"]
    def headers
      @row.map(&:first)
    end

    # :call-seq:
    #   field(index) -> value
    #   field(header) -> value
    #   field(header, offset) -> value
    #
    # Returns the field value for the given +index+ or +header+.
    #
    # ---
    #
    # Fetch field value by \Integer index:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.field(0) # => "foo"
    #   row.field(1) # => "bar"
    #
    # Counts backward from the last column if +index+ is negative:
    #   row.field(-1) # => "0"
    #   row.field(-2) # => "foo"
    #
    # Returns +nil+ if +index+ is out of range:
    #   row.field(2) # => nil
    #   row.field(-3) # => nil
    #
    # ---
    #
    # Fetch field value by header (first found):
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.field('Name') # => "Foo"
    #
    # Fetch field value by header, ignoring +offset+ leading fields:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.field('Name', 2) # => "Baz"
    #
    # Returns +nil+ if the header does not exist.
    def field(header_or_index, minimum_index = 0)
      # locate the pair
      finder = (header_or_index.is_a?(Integer) || header_or_index.is_a?(Range)) ? :[] : :assoc
      pair   = @row[minimum_index..-1].public_send(finder, header_or_index)

      # return the field if we have a pair
      if pair.nil?
        nil
      else
        header_or_index.is_a?(Range) ? pair.map(&:last) : pair.last
      end
    end
    alias_method :[], :field

    #
    # :call-seq:
    #   fetch(header) -> value
    #   fetch(header, default) -> value
    #   fetch(header) {|row| ... } -> value
    #
    # Returns the field value as specified by +header+.
    #
    # ---
    #
    # With the single argument +header+, returns the field value
    # for that header (first found):
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.fetch('Name') # => "Foo"
    #
    # Raises exception +KeyError+ if the header does not exist.
    #
    # ---
    #
    # With arguments +header+ and +default+ given,
    # returns the field value for the header (first found)
    # if the header exists, otherwise returns +default+:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.fetch('Name', '') # => "Foo"
    #   row.fetch(:nosuch, '') # => ""
    #
    # ---
    #
    # With argument +header+ and a block given,
    # returns the field value for the header (first found)
    # if the header exists; otherwise calls the block
    # and returns its return value:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.fetch('Name') {|header| fail 'Cannot happen' } # => "Foo"
    #   row.fetch(:nosuch) {|header| "Header '#{header} not found'" } # => "Header 'nosuch not found'"
    def fetch(header, *varargs)
      raise ArgumentError, "Too many arguments" if varargs.length > 1
      pair = @row.assoc(header)
      if pair
        pair.last
      else
        if block_given?
          yield header
        elsif varargs.empty?
          raise KeyError, "key not found: #{header}"
        else
          varargs.first
        end
      end
    end

    # :call-seq:
    #   row.has_key?(header) -> true or false
    #
    # Returns +true+ if there is a field with the given +header+,
    # +false+ otherwise.
    def has_key?(header)
      !!@row.assoc(header)
    end
    alias_method :include?, :has_key?
    alias_method :key?,     :has_key?
    alias_method :member?,  :has_key?
    alias_method :header?,  :has_key?

    #
    # :call-seq:
    #   row[index] = value -> value
    #   row[header, offset] = value -> value
    #   row[header] = value -> value
    #
    # Assigns the field value for the given +index+ or +header+;
    # returns +value+.
    #
    # ---
    #
    # Assign field value by \Integer index:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row[0] = 'Bat'
    #   row[1] = 3
    #   row # => #<CSV::Row "Name":"Bat" "Value":3>
    #
    # Counts backward from the last column if +index+ is negative:
    #   row[-1] = 4
    #   row[-2] = 'Bam'
    #   row # => #<CSV::Row "Name":"Bam" "Value":4>
    #
    # Extends the row with <tt>nil:nil</tt> if positive +index+ is not in the row:
    #   row[4] = 5
    #   row # => #<CSV::Row "Name":"bad" "Value":4 nil:nil nil:nil nil:5>
    #
    # Raises IndexError if negative +index+ is too small (too far from zero).
    #
    # ---
    #
    # Assign field value by header (first found):
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row['Name'] = 'Bat'
    #   row # => #<CSV::Row "Name":"Bat" "Name":"Bar" "Name":"Baz">
    #
    # Assign field value by header, ignoring +offset+ leading fields:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row['Name', 2] = 4
    #   row # => #<CSV::Row "Name":"Foo" "Name":"Bar" "Name":4>
    #
    # Append new field by (new) header:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row['New'] = 6
    #   row# => #<CSV::Row "Name":"foo" "Value":"0" "New":6>
    def []=(*args)
      value = args.pop

      if args.first.is_a? Integer
        if @row[args.first].nil?  # extending past the end with index
          @row[args.first] = [nil, value]
          @row.map! { |pair| pair.nil? ? [nil, nil] : pair }
        else                      # normal index assignment
          @row[args.first][1] = value
        end
      else
        index = index(*args)
        if index.nil?             # appending a field
          self << [args.first, value]
        else                      # normal header assignment
          @row[index][1] = value
        end
      end
    end

    #
    # :call-seq:
    #   row << [header, value] -> self
    #   row << hash -> self
    #   row << value -> self
    #
    # Adds a field to +self+; returns +self+:
    #
    # If the argument is a 2-element \Array <tt>[header, value]</tt>,
    # a field is added with the given +header+ and +value+:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row << ['NAME', 'Bat']
    #   row # => #<CSV::Row "Name":"Foo" "Name":"Bar" "Name":"Baz" "NAME":"Bat">
    #
    # If the argument is a \Hash, each <tt>key-value</tt> pair is added
    # as a field with header +key+ and value +value+.
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row << {NAME: 'Bat', name: 'Bam'}
    #   row # => #<CSV::Row "Name":"Foo" "Name":"Bar" "Name":"Baz" NAME:"Bat" name:"Bam">
    #
    # Otherwise, the given +value+ is added as a field with no header.
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row << 'Bag'
    #   row # => #<CSV::Row "Name":"Foo" "Name":"Bar" "Name":"Baz" nil:"Bag">
    def <<(arg)
      if arg.is_a?(Array) and arg.size == 2  # appending a header and name
        @row << arg
      elsif arg.is_a?(Hash)                  # append header and name pairs
        arg.each { |pair| @row << pair }
      else                                   # append field value
        @row << [nil, arg]
      end

      self  # for chaining
    end

    # :call-seq:
    #   row.push(*values) -> self
    #
    # Appends each of the given +values+ to +self+ as a field; returns +self+:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.push('Bat', 'Bam')
    #   row # => #<CSV::Row "Name":"Foo" "Name":"Bar" "Name":"Baz" nil:"Bat" nil:"Bam">
    def push(*args)
      args.each { |arg| self << arg }

      self  # for chaining
    end

    #
    # :call-seq:
    #   delete(index) -> [header, value] or nil
    #   delete(header) -> [header, value] or empty_array
    #   delete(header, offset) -> [header, value] or empty_array
    #
    # Removes a specified field from +self+; returns the 2-element \Array
    # <tt>[header, value]</tt> if the field exists.
    #
    # If an \Integer argument +index+ is given,
    # removes and returns the field at offset +index+,
    # or returns +nil+ if the field does not exist:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.delete(1) # => ["Name", "Bar"]
    #   row.delete(50) # => nil
    #
    # Otherwise, if the single argument +header+ is given,
    # removes and returns the first-found field with the given header,
    # of returns a new empty \Array if the field does not exist:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.delete('Name') # => ["Name", "Foo"]
    #   row.delete('NAME') # => []
    #
    # If argument +header+ and \Integer argument +offset+ are given,
    # removes and returns the first-found field with the given header
    # whose +index+ is at least as large as +offset+:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.delete('Name', 1) # => ["Name", "Bar"]
    #   row.delete('NAME', 1) # => []
    def delete(header_or_index, minimum_index = 0)
      if header_or_index.is_a? Integer                 # by index
        @row.delete_at(header_or_index)
      elsif i = index(header_or_index, minimum_index)  # by header
        @row.delete_at(i)
      else
        [ ]
      end
    end

    # :call-seq:
    #   row.delete_if {|header, value| ... } -> self
    #
    # Removes fields from +self+ as selected by the block; returns +self+.
    #
    # Removes each field for which the block returns a truthy value:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.delete_if {|header, value| value.start_with?('B') } # => true
    #   row # => #<CSV::Row "Name":"Foo">
    #   row.delete_if {|header, value| header.start_with?('B') } # => false
    #
    # If no block is given, returns a new Enumerator:
    #   row.delete_if # => #<Enumerator: #<CSV::Row "Name":"Foo">:delete_if>
    def delete_if(&block)
      return enum_for(__method__) { size } unless block_given?

      @row.delete_if(&block)

      self  # for chaining
    end

    # :call-seq:
    #   self.fields(*specifiers) -> array_of_fields
    #
    # Returns field values per the given +specifiers+, which may be any mixture of:
    # - \Integer index.
    # - \Range of \Integer indexes.
    # - 2-element \Array containing a header and offset.
    # - Header.
    # - \Range of headers.
    #
    # For +specifier+ in one of the first four cases above,
    # returns the result of <tt>self.field(specifier)</tt>;  see #field.
    #
    # Although there may be any number of +specifiers+,
    # the examples here will illustrate one at a time.
    #
    # When the specifier is an \Integer +index+,
    # returns <tt>self.field(index)</tt>L
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.fields(1) # => ["Bar"]
    #
    # When the specifier is a \Range of \Integers +range+,
    # returns <tt>self.field(range)</tt>:
    #   row.fields(1..2) # => ["Bar", "Baz"]
    #
    # When the specifier is a 2-element \Array +array+,
    # returns <tt>self.field(array)</tt>L
    #   row.fields('Name', 1) # => ["Foo", "Bar"]
    #
    # When the specifier is a header +header+,
    # returns <tt>self.field(header)</tt>L
    #   row.fields('Name') # => ["Foo"]
    #
    # When the specifier is a \Range of headers +range+,
    # forms a new \Range +new_range+ from the indexes of
    # <tt>range.start</tt> and <tt>range.end</tt>,
    # and returns <tt>self.field(new_range)</tt>:
    #   source = "Name,NAME,name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.fields('Name'..'NAME') # => ["Foo", "Bar"]
    #
    # Returns all fields if no argument given:
    #   row.fields # => ["Foo", "Bar", "Baz"]
    def fields(*headers_and_or_indices)
      if headers_and_or_indices.empty?  # return all fields--no arguments
        @row.map(&:last)
      else                              # or work like values_at()
        all = []
        headers_and_or_indices.each do |h_or_i|
          if h_or_i.is_a? Range
            index_begin = h_or_i.begin.is_a?(Integer) ? h_or_i.begin :
                                                        index(h_or_i.begin)
            index_end   = h_or_i.end.is_a?(Integer)   ? h_or_i.end :
                                                        index(h_or_i.end)
            new_range   = h_or_i.exclude_end? ? (index_begin...index_end) :
                                                (index_begin..index_end)
            all.concat(fields.values_at(new_range))
          else
            all << field(*Array(h_or_i))
          end
        end
        return all
      end
    end
    alias_method :values_at, :fields

    # :call-seq:
    #   index(header) -> index
    #   index(header, offset) -> index
    #
    # Returns the index for the given header, if it exists;
    # otherwise returns +nil+.
    #
    # With the single argument +header+, returns the index
    # of the first-found field with the given +header+:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.index('Name') # => 0
    #   row.index('NAME') # => nil
    #
    # With arguments +header+ and +offset+,
    # returns the index of the first-found field with given +header+,
    # but ignoring the first +offset+ fields:
    #   row.index('Name', 1) # => 1
    #   row.index('Name', 3) # => nil
    def index(header, minimum_index = 0)
      # find the pair
      index = headers[minimum_index..-1].index(header)
      # return the index at the right offset, if we found one
      index.nil? ? nil : index + minimum_index
    end

    # :call-seq:
    #   row.field?(value) -> true or false
    #
    # Returns +true+ if +value+ is a field in this row, +false+ otherwise:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.field?('Bar') # => true
    #   row.field?('BAR') # => false
    def field?(data)
      fields.include? data
    end

    include Enumerable

    # :call-seq:
    #   row.each {|header, value| ... } -> self
    #
    # Calls the block with each header-value pair; returns +self+:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.each {|header, value| p [header, value] }
    # Output:
    #   ["Name", "Foo"]
    #   ["Name", "Bar"]
    #   ["Name", "Baz"]
    #
    # If no block is given, returns a new Enumerator:
    #   row.each # => #<Enumerator: #<CSV::Row "Name":"Foo" "Name":"Bar" "Name":"Baz">:each>
    def each(&block)
      return enum_for(__method__) { size } unless block_given?

      @row.each(&block)

      self  # for chaining
    end

    alias_method :each_pair, :each

    # :call-seq:
    #   row == other -> true or false
    #
    # Returns +true+ if +other+ is a /CSV::Row that has the same
    # fields (headers and values) in the same order as +self+;
    # otherwise returns +false+:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   other_row = table[0]
    #   row == other_row # => true
    #   other_row = table[1]
    #   row == other_row # => false
    def ==(other)
      return @row == other.row if other.is_a? CSV::Row
      @row == other
    end

    # :call-seq:
    #   row.to_h -> hash
    #
    # Returns the new \Hash formed by adding each header-value pair in +self+
    # as a key-value pair in the \Hash.
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.to_h # => {"Name"=>"foo", "Value"=>"0"}
    #
    # Header order is preserved, but repeated headers are ignored:
    #   source = "Name,Name,Name\nFoo,Bar,Baz\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.to_h # => {"Name"=>"Foo"}
    def to_h
      hash = {}
      each do |key, _value|
        hash[key] = self[key] unless hash.key?(key)
      end
      hash
    end
    alias_method :to_hash, :to_h

    # :call-seq:
    #   row.deconstruct_keys(keys) -> hash
    #
    # Returns the new \Hash suitable for pattern matching containing only the
    # keys specified as an argument.
    def deconstruct_keys(keys)
      if keys.nil?
        to_h
      else
        keys.to_h { |key| [key, self[key]] }
      end
    end

    alias_method :to_ary, :to_a

    # :call-seq:
    #   row.deconstruct -> array
    #
    # Returns the new \Array suitable for pattern matching containing the values
    # of the row.
    def deconstruct
      fields
    end

    # :call-seq:
    #   row.to_csv -> csv_string
    #
    # Returns the row as a \CSV String. Headers are not included:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.to_csv # => "foo,0\n"
    def to_csv(**options)
      fields.to_csv(**options)
    end
    alias_method :to_s, :to_csv

    # :call-seq:
    #   row.dig(index_or_header, *identifiers) -> object
    #
    # Finds and returns the object in nested object that is specified
    # by +index_or_header+ and +specifiers+.
    #
    # The nested objects may be instances of various classes.
    # See {Dig Methods}[rdoc-ref:dig_methods.rdoc].
    #
    # Examples:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.dig(1) # => "0"
    #   row.dig('Value') # => "0"
    #   row.dig(5) # => nil
    def dig(index_or_header, *indexes)
      value = field(index_or_header)
      if value.nil?
        nil
      elsif indexes.empty?
        value
      else
        unless value.respond_to?(:dig)
          raise TypeError, "#{value.class} does not have \#dig method"
        end
        value.dig(*indexes)
      end
    end

    # :call-seq:
    #   row.inspect -> string
    #
    # Returns an ASCII-compatible \String showing:
    # - Class \CSV::Row.
    # - Header-value pairs.
    # Example:
    #   source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   table = CSV.parse(source, headers: true)
    #   row = table[0]
    #   row.inspect # => "#<CSV::Row \"Name\":\"foo\" \"Value\":\"0\">"
    def inspect
      str = ["#<", self.class.to_s]
      each do |header, field|
        str << " " << (header.is_a?(Symbol) ? header.to_s : header.inspect) <<
               ":" << field.inspect
      end
      str << ">"
      begin
        str.join('')
      rescue  # any encoding error
        str.map do |s|
          e = Encoding::Converter.asciicompat_encoding(s.encoding)
          e ? s.encode(e) : s.force_encoding("ASCII-8BIT")
        end.join('')
      end
    end
  end
end
PK)J[�a��kk,share/gems/gems/csv-3.3.2/lib/csv/version.rbnu�[���# frozen_string_literal: true

class CSV
  # The version of the installed library.
  VERSION = "3.3.2"
end
PK)J[�mLa�
�
5share/gems/gems/csv-3.3.2/lib/csv/fields_converter.rbnu�[���# frozen_string_literal: true

class CSV
  # Note: Don't use this class directly. This is an internal class.
  class FieldsConverter
    include Enumerable

    NO_QUOTED_FIELDS = [] # :nodoc:
    def NO_QUOTED_FIELDS.[](_index)
      false
    end
    NO_QUOTED_FIELDS.freeze

    #
    # A CSV::FieldsConverter is a data structure for storing the
    # fields converter properties to be passed as a parameter
    # when parsing a new file (e.g. CSV::Parser.new(@io, parser_options))
    #

    def initialize(options={})
      @converters = []
      @nil_value = options[:nil_value]
      @empty_value = options[:empty_value]
      @empty_value_is_empty_string = (@empty_value == "")
      @accept_nil = options[:accept_nil]
      @builtin_converters_name = options[:builtin_converters_name]
      @need_static_convert = need_static_convert?
    end

    def add_converter(name=nil, &converter)
      if name.nil?  # custom converter
        @converters << converter
      else          # named converter
        combo = builtin_converters[name]
        case combo
        when Array  # combo converter
          combo.each do |sub_name|
            add_converter(sub_name)
          end
        else        # individual named converter
          @converters << combo
        end
      end
    end

    def each(&block)
      @converters.each(&block)
    end

    def empty?
      @converters.empty?
    end

    def convert(fields, headers, lineno, quoted_fields=NO_QUOTED_FIELDS)
      return fields unless need_convert?

      fields.collect.with_index do |field, index|
        if field.nil?
          field = @nil_value
        elsif field.is_a?(String) and field.empty?
          field = @empty_value unless @empty_value_is_empty_string
        end
        @converters.each do |converter|
          break if field.nil? and @accept_nil
          if converter.arity == 1  # straight field converter
            field = converter[field]
          else                     # FieldInfo converter
            if headers
              header = headers[index]
            else
              header = nil
            end
            quoted = quoted_fields[index]
            field = converter[field, FieldInfo.new(index, lineno, header, quoted)]
          end
          break unless field.is_a?(String)  # short-circuit pipeline for speed
        end
        field  # final state of each field, converted or original
      end
    end

    private
    def need_static_convert?
      not (@nil_value.nil? and @empty_value_is_empty_string)
    end

    def need_convert?
      @need_static_convert or
        (not @converters.empty?)
    end

    def builtin_converters
      @builtin_converters ||= ::CSV.const_get(@builtin_converters_name)
    end
  end
end
PK)J[��P�;share/gems/gems/csv-3.3.2/lib/csv/input_record_separator.rbnu�[���require "English"
require "stringio"

class CSV
  module InputRecordSeparator
    class << self
      if RUBY_VERSION >= "3.0.0"
        def value
          "\n"
        end
      else
        def value
          $INPUT_RECORD_SEPARATOR
        end
      end
    end
  end
end
PK)J[r�z*>>+share/gems/gems/csv-3.3.2/lib/csv/writer.rbnu�[���# frozen_string_literal: true

require_relative "input_record_separator"
require_relative "row"

class CSV
  # Note: Don't use this class directly. This is an internal class.
  class Writer
    #
    # A CSV::Writer receives an output, prepares the header, format and output.
    # It allows us to write new rows in the object and rewind it.
    #
    attr_reader :lineno
    attr_reader :headers

    def initialize(output, options)
      @output = output
      @options = options
      @lineno = 0
      @fields_converter = nil
      prepare
      if @options[:write_headers] and @headers
        self << @headers
      end
      @fields_converter = @options[:fields_converter]
    end

    #
    # Adds a new row
    #
    def <<(row)
      case row
      when Row
        row = row.fields
      when Hash
        row = @headers.collect {|header| row[header]}
      end

      @headers ||= row if @use_headers
      @lineno += 1

      if @fields_converter
        row = @fields_converter.convert(row, nil, lineno)
      end

      i = -1
      converted_row = row.collect do |field|
        i += 1
        quote(field, i)
      end
      line = converted_row.join(@column_separator) + @row_separator
      if @output_encoding
        line = line.encode(@output_encoding)
      end
      @output << line

      self
    end

    #
    # Winds back to the beginning
    #
    def rewind
      @lineno = 0
      @headers = nil if @options[:headers].nil?
    end

    private
    def prepare
      @encoding = @options[:encoding]

      prepare_header
      prepare_format
      prepare_output
    end

    def prepare_header
      headers = @options[:headers]
      case headers
      when Array
        @headers = headers
        @use_headers = true
      when String
        @headers = CSV.parse_line(headers,
                                  col_sep: @options[:column_separator],
                                  row_sep: @options[:row_separator],
                                  quote_char: @options[:quote_character])
        @use_headers = true
      when true
        @headers = nil
        @use_headers = true
      else
        @headers = nil
        @use_headers = false
      end
      return unless @headers

      converter = @options[:header_fields_converter]
      @headers = converter.convert(@headers, nil, 0, [])
      @headers.each do |header|
        header.freeze if header.is_a?(String)
      end
    end

    def prepare_force_quotes_fields(force_quotes)
      @force_quotes_fields = {}
      force_quotes.each do |name_or_index|
        case name_or_index
        when Integer
          index = name_or_index
          @force_quotes_fields[index] = true
        when String, Symbol
          name = name_or_index.to_s
          if @headers.nil?
            message = ":headers is required when you use field name " +
                      "in :force_quotes: " +
                      "#{name_or_index.inspect}: #{force_quotes.inspect}"
            raise ArgumentError, message
          end
          index = @headers.index(name)
          next if index.nil?
          @force_quotes_fields[index] = true
        else
          message = ":force_quotes element must be " +
                    "field index or field name: " +
                    "#{name_or_index.inspect}: #{force_quotes.inspect}"
          raise ArgumentError, message
        end
      end
    end

    def prepare_format
      @column_separator = @options[:column_separator].to_s.encode(@encoding)
      row_separator = @options[:row_separator]
      if row_separator == :auto
        @row_separator = InputRecordSeparator.value.encode(@encoding)
      else
        @row_separator = row_separator.to_s.encode(@encoding)
      end
      @quote_character = @options[:quote_character]
      force_quotes = @options[:force_quotes]
      if force_quotes.is_a?(Array)
        prepare_force_quotes_fields(force_quotes)
        @force_quotes = false
      elsif force_quotes
        @force_quotes_fields = nil
        @force_quotes = true
      else
        @force_quotes_fields = nil
        @force_quotes = false
      end
      unless @force_quotes
        @quotable_pattern =
          Regexp.new("[\r\n".encode(@encoding) +
                     Regexp.escape(@column_separator) +
                     Regexp.escape(@quote_character.encode(@encoding)) +
                     "]".encode(@encoding))
      end
      @quote_empty = @options.fetch(:quote_empty, true)
    end

    def prepare_output
      @output_encoding = nil
      return unless @output.is_a?(StringIO)

      output_encoding = @output.internal_encoding || @output.external_encoding
      if @encoding != output_encoding
        if @options[:force_encoding]
          @output_encoding = output_encoding
        else
          compatible_encoding = Encoding.compatible?(@encoding, output_encoding)
          if compatible_encoding
            @output.set_encoding(compatible_encoding)
            @output.seek(0, IO::SEEK_END)
          end
        end
      end
    end

    def quote_field(field)
      field = String(field)
      encoded_quote_character = @quote_character.encode(field.encoding)
      encoded_quote_character +
        field.gsub(encoded_quote_character,
                   encoded_quote_character * 2) +
        encoded_quote_character
    end

    def quote(field, i)
      if @force_quotes
        quote_field(field)
      elsif @force_quotes_fields and @force_quotes_fields[i]
        quote_field(field)
      else
        if field.nil?  # represent +nil+ fields as empty unquoted fields
          ""
        else
          field = String(field)  # Stringify fields
          # represent empty fields as empty quoted fields
          if (@quote_empty and field.empty?) or (field.valid_encoding? and @quotable_pattern.match?(field))
            quote_field(field)
          else
            field  # unquoted field
          end
        end
      end
    end
  end
end
PK)J[K~%\��4share/gems/gems/csv-3.3.2/lib/csv/core_ext/string.rbnu�[���class String
  # Equivalent to CSV::parse_line(self, options)
  #
  #   "CSV,data".parse_csv
  #     #=> ["CSV", "data"]
  def parse_csv(**options)
    CSV.parse_line(self, **options)
  end
end
PK)J[�#����3share/gems/gems/csv-3.3.2/lib/csv/core_ext/array.rbnu�[���class Array
  # Equivalent to CSV::generate_line(self, options)
  #
  #   ["CSV", "data"].to_csv
  #     #=> "CSV,data\n"
  def to_csv(**options)
    CSV.generate_line(self, **options)
  end
end
PK)J[�'�P6�6�$share/gems/gems/csv-3.3.2/lib/csv.rbnu�[���# encoding: US-ASCII
# frozen_string_literal: true
# = csv.rb -- CSV Reading and Writing
#
# Created by James Edward Gray II on 2005-10-31.
#
# See CSV for documentation.
#
# == Description
#
# Welcome to the new and improved CSV.
#
# This version of the CSV library began its life as FasterCSV. FasterCSV was
# intended as a replacement to Ruby's then standard CSV library. It was
# designed to address concerns users of that library had and it had three
# primary goals:
#
# 1.  Be significantly faster than CSV while remaining a pure Ruby library.
# 2.  Use a smaller and easier to maintain code base. (FasterCSV eventually
#     grew larger, was also but considerably richer in features. The parsing
#     core remains quite small.)
# 3.  Improve on the CSV interface.
#
# Obviously, the last one is subjective. I did try to defer to the original
# interface whenever I didn't have a compelling reason to change it though, so
# hopefully this won't be too radically different.
#
# We must have met our goals because FasterCSV was renamed to CSV and replaced
# the original library as of Ruby 1.9. If you are migrating code from 1.8 or
# earlier, you may have to change your code to comply with the new interface.
#
# == What's the Different From the Old CSV?
#
# I'm sure I'll miss something, but I'll try to mention most of the major
# differences I am aware of, to help others quickly get up to speed:
#
# === \CSV Parsing
#
# * This parser is m17n aware. See CSV for full details.
# * This library has a stricter parser and will throw MalformedCSVErrors on
#   problematic data.
# * This library has a less liberal idea of a line ending than CSV. What you
#   set as the <tt>:row_sep</tt> is law. It can auto-detect your line endings
#   though.
# * The old library returned empty lines as <tt>[nil]</tt>. This library calls
#   them <tt>[]</tt>.
# * This library has a much faster parser.
#
# === Interface
#
# * CSV now uses keyword parameters to set options.
# * CSV no longer has generate_row() or parse_row().
# * The old CSV's Reader and Writer classes have been dropped.
# * CSV::open() is now more like Ruby's open().
# * CSV objects now support most standard IO methods.
# * CSV now has a new() method used to wrap objects like String and IO for
#   reading and writing.
# * CSV::generate() is different from the old method.
# * CSV no longer supports partial reads. It works line-by-line.
# * CSV no longer allows the instance methods to override the separators for
#   performance reasons. They must be set in the constructor.
#
# If you use this library and find yourself missing any functionality I have
# trimmed, please {let me know}[mailto:james@grayproductions.net].
#
# == Documentation
#
# See CSV for documentation.
#
# == What is CSV, really?
#
# CSV maintains a pretty strict definition of CSV taken directly from
# {the RFC}[https://www.ietf.org/rfc/rfc4180.txt]. I relax the rules in only one
# place and that is to make using this library easier. CSV will parse all valid
# CSV.
#
# What you don't want to do is to feed CSV invalid data. Because of the way the
# CSV format works, it's common for a parser to need to read until the end of
# the file to be sure a field is invalid. This consumes a lot of time and memory.
#
# Luckily, when working with invalid CSV, Ruby's built-in methods will almost
# always be superior in every way. For example, parsing non-quoted fields is as
# easy as:
#
#   data.split(",")
#
# == Questions and/or Comments
#
# Feel free to email {James Edward Gray II}[mailto:james@grayproductions.net]
# with any questions.

require "forwardable"
require "date"
require "time"
require "stringio"

require_relative "csv/fields_converter"
require_relative "csv/input_record_separator"
require_relative "csv/parser"
require_relative "csv/row"
require_relative "csv/table"
require_relative "csv/writer"

# == \CSV
#
# === \CSV Data
#
# \CSV (comma-separated values) data is a text representation of a table:
# - A _row_ _separator_ delimits table rows.
#   A common row separator is the newline character <tt>"\n"</tt>.
# - A _column_ _separator_ delimits fields in a row.
#   A common column separator is the comma character <tt>","</tt>.
#
# This \CSV \String, with row separator <tt>"\n"</tt>
# and column separator <tt>","</tt>,
# has three rows and two columns:
#   "foo,0\nbar,1\nbaz,2\n"
#
# Despite the name \CSV, a \CSV representation can use different separators.
#
# For more about tables, see the Wikipedia article
# "{Table (information)}[https://en.wikipedia.org/wiki/Table_(information)]",
# especially its section
# "{Simple table}[https://en.wikipedia.org/wiki/Table_(information)#Simple_table]"
#
# == \Class \CSV
#
# Class \CSV provides methods for:
# - Parsing \CSV data from a \String object, a \File (via its file path), or an \IO object.
# - Generating \CSV data to a \String object.
#
# To make \CSV available:
#   require 'csv'
#
# All examples here assume that this has been done.
#
# == Keeping It Simple
#
# A \CSV object has dozens of instance methods that offer fine-grained control
# of parsing and generating \CSV data.
# For many needs, though, simpler approaches will do.
#
# This section summarizes the singleton methods in \CSV
# that allow you to parse and generate without explicitly
# creating \CSV objects.
# For details, follow the links.
#
# === Simple Parsing
#
# Parsing methods commonly return either of:
# - An \Array of Arrays of Strings:
#   - The outer \Array is the entire "table".
#   - Each inner \Array is a row.
#   - Each \String is a field.
# - A CSV::Table object.  For details, see
#   {\CSV with Headers}[#class-CSV-label-CSV+with+Headers].
#
# ==== Parsing a \String
#
# The input to be parsed can be a string:
#   string = "foo,0\nbar,1\nbaz,2\n"
#
# \Method CSV.parse returns the entire \CSV data:
#   CSV.parse(string) # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# \Method CSV.parse_line returns only the first row:
#   CSV.parse_line(string) # => ["foo", "0"]
#
# \CSV extends class \String with instance method String#parse_csv,
# which also returns only the first row:
#   string.parse_csv # => ["foo", "0"]
#
# ==== Parsing Via a \File Path
#
# The input to be parsed can be in a file:
#   string = "foo,0\nbar,1\nbaz,2\n"
#   path = 't.csv'
#   File.write(path, string)
#
# \Method CSV.read returns the entire \CSV data:
#  CSV.read(path) # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# \Method CSV.foreach iterates, passing each row to the given block:
#  CSV.foreach(path) do |row|
#    p row
#  end
# Output:
#   ["foo", "0"]
#   ["bar", "1"]
#   ["baz", "2"]
#
# \Method CSV.table returns the entire \CSV data as a CSV::Table object:
#   CSV.table(path) # => #<CSV::Table mode:col_or_row row_count:3>
#
# ==== Parsing from an Open \IO Stream
#
# The input to be parsed can be in an open \IO stream:
#
# \Method CSV.read returns the entire \CSV data:
#   File.open(path) do |file|
#     CSV.read(file)
#   end # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# As does method CSV.parse:
#   File.open(path) do |file|
#     CSV.parse(file)
#   end # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# \Method CSV.parse_line returns only the first row:
#   File.open(path) do |file|
#    CSV.parse_line(file)
#   end # => ["foo", "0"]
#
# \Method CSV.foreach iterates, passing each row to the given block:
#   File.open(path) do |file|
#     CSV.foreach(file) do |row|
#       p row
#     end
#   end
# Output:
#   ["foo", "0"]
#   ["bar", "1"]
#   ["baz", "2"]
#
# \Method CSV.table returns the entire \CSV data as a CSV::Table object:
#   File.open(path) do |file|
#     CSV.table(file)
#   end # => #<CSV::Table mode:col_or_row row_count:3>
#
# === Simple Generating
#
# \Method CSV.generate returns a \String;
# this example uses method CSV#<< to append the rows
# that are to be generated:
#   output_string = CSV.generate do |csv|
#     csv << ['foo', 0]
#     csv << ['bar', 1]
#     csv << ['baz', 2]
#   end
#   output_string # => "foo,0\nbar,1\nbaz,2\n"
#
# \Method CSV.generate_line returns a \String containing the single row
# constructed from an \Array:
#   CSV.generate_line(['foo', '0']) # => "foo,0\n"
#
# \CSV extends class \Array with instance method <tt>Array#to_csv</tt>,
# which forms an \Array into a \String:
#   ['foo', '0'].to_csv # => "foo,0\n"
#
# === "Filtering" \CSV
#
# \Method CSV.filter provides a Unix-style filter for \CSV data.
# The input data is processed to form the output data:
#   in_string = "foo,0\nbar,1\nbaz,2\n"
#   out_string = ''
#   CSV.filter(in_string, out_string) do |row|
#     row[0] = row[0].upcase
#     row[1] *= 4
#   end
#   out_string # => "FOO,0000\nBAR,1111\nBAZ,2222\n"
#
# == \CSV Objects
#
# There are three ways to create a \CSV object:
# - \Method CSV.new returns a new \CSV object.
# - \Method CSV.instance returns a new or cached \CSV object.
# - \Method \CSV() also returns a new or cached \CSV object.
#
# === Instance Methods
#
# \CSV has three groups of instance methods:
# - Its own internally defined instance methods.
# - Methods included by module Enumerable.
# - Methods delegated to class IO. See below.
#
# ==== Delegated Methods
#
# For convenience, a CSV object will delegate to many methods in class IO.
# (A few have wrapper "guard code" in \CSV.) You may call:
# * IO#binmode
# * #binmode?
# * IO#close
# * IO#close_read
# * IO#close_write
# * IO#closed?
# * #eof
# * #eof?
# * IO#external_encoding
# * IO#fcntl
# * IO#fileno
# * #flock
# * IO#flush
# * IO#fsync
# * IO#internal_encoding
# * #ioctl
# * IO#isatty
# * #path
# * IO#pid
# * IO#pos
# * IO#pos=
# * IO#reopen
# * #rewind
# * IO#seek
# * #stat
# * IO#string
# * IO#sync
# * IO#sync=
# * IO#tell
# * #to_i
# * #to_io
# * IO#truncate
# * IO#tty?
#
# === Options
#
# The default values for options are:
#   DEFAULT_OPTIONS = {
#     # For both parsing and generating.
#     col_sep:            ",",
#     row_sep:            :auto,
#     quote_char:         '"',
#     # For parsing.
#     field_size_limit:   nil,
#     converters:         nil,
#     unconverted_fields: nil,
#     headers:            false,
#     return_headers:     false,
#     header_converters:  nil,
#     skip_blanks:        false,
#     skip_lines:         nil,
#     liberal_parsing:    false,
#     nil_value:          nil,
#     empty_value:        "",
#     strip:              false,
#     # For generating.
#     write_headers:      nil,
#     quote_empty:        true,
#     force_quotes:       false,
#     write_converters:   nil,
#     write_nil_value:    nil,
#     write_empty_value:  "",
#   }
#
# ==== Options for Parsing
#
# Options for parsing, described in detail below, include:
# - +row_sep+: Specifies the row separator; used to delimit rows.
# - +col_sep+: Specifies the column separator; used to delimit fields.
# - +quote_char+: Specifies the quote character; used to quote fields.
# - +field_size_limit+: Specifies the maximum field size + 1 allowed.
#   Deprecated since 3.2.3. Use +max_field_size+ instead.
# - +max_field_size+: Specifies the maximum field size allowed.
# - +converters+: Specifies the field converters to be used.
# - +unconverted_fields+: Specifies whether unconverted fields are to be available.
# - +headers+: Specifies whether data contains headers,
#   or specifies the headers themselves.
# - +return_headers+: Specifies whether headers are to be returned.
# - +header_converters+: Specifies the header converters to be used.
# - +skip_blanks+: Specifies whether blanks lines are to be ignored.
# - +skip_lines+: Specifies how comments lines are to be recognized.
# - +strip+: Specifies whether leading and trailing whitespace are to be
#   stripped from fields. This must be compatible with +col_sep+; if it is not,
#   then an +ArgumentError+ exception will be raised.
# - +liberal_parsing+: Specifies whether \CSV should attempt to parse
#   non-compliant data.
# - +nil_value+: Specifies the object that is to be substituted for each null (no-text) field.
# - +empty_value+: Specifies the object that is to be substituted for each empty field.
#
# :include: ../doc/csv/options/common/row_sep.rdoc
#
# :include: ../doc/csv/options/common/col_sep.rdoc
#
# :include: ../doc/csv/options/common/quote_char.rdoc
#
# :include: ../doc/csv/options/parsing/field_size_limit.rdoc
#
# :include: ../doc/csv/options/parsing/converters.rdoc
#
# :include: ../doc/csv/options/parsing/unconverted_fields.rdoc
#
# :include: ../doc/csv/options/parsing/headers.rdoc
#
# :include: ../doc/csv/options/parsing/return_headers.rdoc
#
# :include: ../doc/csv/options/parsing/header_converters.rdoc
#
# :include: ../doc/csv/options/parsing/skip_blanks.rdoc
#
# :include: ../doc/csv/options/parsing/skip_lines.rdoc
#
# :include: ../doc/csv/options/parsing/strip.rdoc
#
# :include: ../doc/csv/options/parsing/liberal_parsing.rdoc
#
# :include: ../doc/csv/options/parsing/nil_value.rdoc
#
# :include: ../doc/csv/options/parsing/empty_value.rdoc
#
# ==== Options for Generating
#
# Options for generating, described in detail below, include:
# - +row_sep+: Specifies the row separator; used to delimit rows.
# - +col_sep+: Specifies the column separator; used to delimit fields.
# - +quote_char+: Specifies the quote character; used to quote fields.
# - +write_headers+: Specifies whether headers are to be written.
# - +force_quotes+: Specifies whether each output field is to be quoted.
# - +quote_empty+: Specifies whether each empty output field is to be quoted.
# - +write_converters+: Specifies the field converters to be used in writing.
# - +write_nil_value+: Specifies the object that is to be substituted for each +nil+-valued field.
# - +write_empty_value+: Specifies the object that is to be substituted for each empty field.
#
# :include: ../doc/csv/options/common/row_sep.rdoc
#
# :include: ../doc/csv/options/common/col_sep.rdoc
#
# :include: ../doc/csv/options/common/quote_char.rdoc
#
# :include: ../doc/csv/options/generating/write_headers.rdoc
#
# :include: ../doc/csv/options/generating/force_quotes.rdoc
#
# :include: ../doc/csv/options/generating/quote_empty.rdoc
#
# :include: ../doc/csv/options/generating/write_converters.rdoc
#
# :include: ../doc/csv/options/generating/write_nil_value.rdoc
#
# :include: ../doc/csv/options/generating/write_empty_value.rdoc
#
# === \CSV with Headers
#
# CSV allows to specify column names of CSV file, whether they are in data, or
# provided separately. If headers are specified, reading methods return an instance
# of CSV::Table, consisting of CSV::Row.
#
#   # Headers are part of data
#   data = CSV.parse(<<~ROWS, headers: true)
#     Name,Department,Salary
#     Bob,Engineering,1000
#     Jane,Sales,2000
#     John,Management,5000
#   ROWS
#
#   data.class      #=> CSV::Table
#   data.first      #=> #<CSV::Row "Name":"Bob" "Department":"Engineering" "Salary":"1000">
#   data.first.to_h #=> {"Name"=>"Bob", "Department"=>"Engineering", "Salary"=>"1000"}
#
#   # Headers provided by developer
#   data = CSV.parse('Bob,Engineering,1000', headers: %i[name department salary])
#   data.first      #=> #<CSV::Row name:"Bob" department:"Engineering" salary:"1000">
#
# === \Converters
#
# By default, each value (field or header) parsed by \CSV is formed into a \String.
# You can use a _field_ _converter_ or  _header_ _converter_
# to intercept and modify the parsed values:
# - See {Field Converters}[#class-CSV-label-Field+Converters].
# - See {Header Converters}[#class-CSV-label-Header+Converters].
#
# Also by default, each value to be written during generation is written 'as-is'.
# You can use a _write_ _converter_ to modify values before writing.
# - See {Write Converters}[#class-CSV-label-Write+Converters].
#
# ==== Specifying \Converters
#
# You can specify converters for parsing or generating in the +options+
# argument to various \CSV methods:
# - Option +converters+ for converting parsed field values.
# - Option +header_converters+ for converting parsed header values.
# - Option +write_converters+ for converting values to be written (generated).
#
# There are three forms for specifying converters:
# - A converter proc: executable code to be used for conversion.
# - A converter name: the name of a stored converter.
# - A converter list: an array of converter procs, converter names, and converter lists.
#
# ===== Converter Procs
#
# This converter proc, +strip_converter+, accepts a value +field+
# and returns <tt>field.strip</tt>:
#   strip_converter = proc {|field| field.strip }
# In this call to <tt>CSV.parse</tt>,
# the keyword argument <tt>converters: string_converter</tt>
# specifies that:
# - \Proc +string_converter+ is to be called for each parsed field.
# - The converter's return value is to replace the +field+ value.
# Example:
#   string = " foo , 0 \n bar , 1 \n baz , 2 \n"
#   array = CSV.parse(string, converters: strip_converter)
#   array # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# A converter proc can receive a second argument, +field_info+,
# that contains details about the field.
# This modified +strip_converter+ displays its arguments:
#   strip_converter = proc do |field, field_info|
#     p [field, field_info]
#     field.strip
#   end
#   string = " foo , 0 \n bar , 1 \n baz , 2 \n"
#   array = CSV.parse(string, converters: strip_converter)
#   array # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
# Output:
#  [" foo ", #<struct CSV::FieldInfo index=0, line=1, header=nil>]
#  [" 0 ", #<struct CSV::FieldInfo index=1, line=1, header=nil>]
#  [" bar ", #<struct CSV::FieldInfo index=0, line=2, header=nil>]
#  [" 1 ", #<struct CSV::FieldInfo index=1, line=2, header=nil>]
#  [" baz ", #<struct CSV::FieldInfo index=0, line=3, header=nil>]
#  [" 2 ", #<struct CSV::FieldInfo index=1, line=3, header=nil>]
# Each CSV::FieldInfo object shows:
# - The 0-based field index.
# - The 1-based line index.
# - The field header, if any.
#
# ===== Stored \Converters
#
# A converter may be given a name and stored in a structure where
# the parsing methods can find it by name.
#
# The storage structure for field converters is the \Hash CSV::Converters.
# It has several built-in converter procs:
# - <tt>:integer</tt>: converts each \String-embedded integer into a true \Integer.
# - <tt>:float</tt>: converts each \String-embedded float into a true \Float.
# - <tt>:date</tt>: converts each \String-embedded date into a true \Date.
# - <tt>:date_time</tt>: converts each \String-embedded date-time into a true \DateTime
# - <tt>:time</tt>: converts each \String-embedded time into a true \Time
# .
# This example creates a converter proc, then stores it:
#   strip_converter = proc {|field| field.strip }
#   CSV::Converters[:strip] = strip_converter
# Then the parsing method call can refer to the converter
# by its name, <tt>:strip</tt>:
#   string = " foo , 0 \n bar , 1 \n baz , 2 \n"
#   array = CSV.parse(string, converters: :strip)
#   array # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# The storage structure for header converters is the \Hash CSV::HeaderConverters,
# which works in the same way.
# It also has built-in converter procs:
# - <tt>:downcase</tt>: Downcases each header.
# - <tt>:symbol</tt>: Converts each header to a \Symbol.
#
# There is no such storage structure for write headers.
#
# In order for the parsing methods to access stored converters in non-main-Ractors, the
# storage structure must be made shareable first.
# Therefore, <tt>Ractor.make_shareable(CSV::Converters)</tt> and
# <tt>Ractor.make_shareable(CSV::HeaderConverters)</tt> must be called before the creation
# of Ractors that use the converters stored in these structures. (Since making the storage
# structures shareable involves freezing them, any custom converters that are to be used
# must be added first.)
#
# ===== Converter Lists
#
# A _converter_ _list_ is an \Array that may include any assortment of:
# - Converter procs.
# - Names of stored converters.
# - Nested converter lists.
#
# Examples:
#   numeric_converters = [:integer, :float]
#   date_converters = [:date, :date_time]
#   [numeric_converters, strip_converter]
#   [strip_converter, date_converters, :float]
#
# Like a converter proc, a converter list may be named and stored in either
# \CSV::Converters or CSV::HeaderConverters:
#   CSV::Converters[:custom] = [strip_converter, date_converters, :float]
#   CSV::HeaderConverters[:custom] = [:downcase, :symbol]
#
# There are two built-in converter lists:
#   CSV::Converters[:numeric] # => [:integer, :float]
#   CSV::Converters[:all] # => [:date_time, :numeric]
#
# ==== Field \Converters
#
# With no conversion, all parsed fields in all rows become Strings:
#   string = "foo,0\nbar,1\nbaz,2\n"
#   ary = CSV.parse(string)
#   ary # => # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# When you specify a field converter, each parsed field is passed to the converter;
# its return value becomes the stored value for the field.
# A converter might, for example, convert an integer embedded in a \String
# into a true \Integer.
# (In fact, that's what built-in field converter +:integer+ does.)
#
# There are three ways to use field \converters.
#
# - Using option {converters}[#class-CSV-label-Option+converters] with a parsing method:
#     ary = CSV.parse(string, converters: :integer)
#     ary # => [0, 1, 2] # => [["foo", 0], ["bar", 1], ["baz", 2]]
# - Using option {converters}[#class-CSV-label-Option+converters] with a new \CSV instance:
#     csv = CSV.new(string, converters: :integer)
#     # Field converters in effect:
#     csv.converters # => [:integer]
#     csv.read # => [["foo", 0], ["bar", 1], ["baz", 2]]
# - Using method #convert to add a field converter to a \CSV instance:
#     csv = CSV.new(string)
#     # Add a converter.
#     csv.convert(:integer)
#     csv.converters # => [:integer]
#     csv.read # => [["foo", 0], ["bar", 1], ["baz", 2]]
#
# Installing a field converter does not affect already-read rows:
#   csv = CSV.new(string)
#   csv.shift # => ["foo", "0"]
#   # Add a converter.
#   csv.convert(:integer)
#   csv.converters # => [:integer]
#   csv.read # => [["bar", 1], ["baz", 2]]
#
# There are additional built-in \converters, and custom \converters are also supported.
#
# ===== Built-In Field \Converters
#
# The built-in field converters are in \Hash CSV::Converters:
# - Each key is a field converter name.
# - Each value is one of:
#   - A \Proc field converter.
#   - An \Array of field converter names.
#
# Display:
#   CSV::Converters.each_pair do |name, value|
#     if value.kind_of?(Proc)
#       p [name, value.class]
#     else
#       p [name, value]
#     end
#   end
# Output:
#   [:integer, Proc]
#   [:float, Proc]
#   [:numeric, [:integer, :float]]
#   [:date, Proc]
#   [:date_time, Proc]
#   [:time, Proc]
#   [:all, [:date_time, :numeric]]
#
# Each of these converters transcodes values to UTF-8 before attempting conversion.
# If a value cannot be transcoded to UTF-8 the conversion will
# fail and the value will remain unconverted.
#
# Converter +:integer+ converts each field that Integer() accepts:
#   data = '0,1,2,x'
#   # Without the converter
#   csv = CSV.parse_line(data)
#   csv # => ["0", "1", "2", "x"]
#   # With the converter
#   csv = CSV.parse_line(data, converters: :integer)
#   csv # => [0, 1, 2, "x"]
#
# Converter +:float+ converts each field that Float() accepts:
#   data = '1.0,3.14159,x'
#   # Without the converter
#   csv = CSV.parse_line(data)
#   csv # => ["1.0", "3.14159", "x"]
#   # With the converter
#   csv = CSV.parse_line(data, converters: :float)
#   csv # => [1.0, 3.14159, "x"]
#
# Converter +:numeric+ converts with both +:integer+ and +:float+..
#
# Converter +:date+ converts each field that Date::parse accepts:
#   data = '2001-02-03,x'
#   # Without the converter
#   csv = CSV.parse_line(data)
#   csv # => ["2001-02-03", "x"]
#   # With the converter
#   csv = CSV.parse_line(data, converters: :date)
#   csv # => [#<Date: 2001-02-03 ((2451944j,0s,0n),+0s,2299161j)>, "x"]
#
# Converter +:date_time+ converts each field that DateTime::parse accepts:
#   data = '2020-05-07T14:59:00-05:00,x'
#   # Without the converter
#   csv = CSV.parse_line(data)
#   csv # => ["2020-05-07T14:59:00-05:00", "x"]
#   # With the converter
#   csv = CSV.parse_line(data, converters: :date_time)
#   csv # => [#<DateTime: 2020-05-07T14:59:00-05:00 ((2458977j,71940s,0n),-18000s,2299161j)>, "x"]
#
# Converter +time+ converts each field that Time::parse accepts:
#   data = '2020-05-07T14:59:00-05:00,x'
#   # Without the converter
#   csv = CSV.parse_line(data)
#   csv # => ["2020-05-07T14:59:00-05:00", "x"]
#   # With the converter
#   csv = CSV.parse_line(data, converters: :time)
#   csv # => [2020-05-07 14:59:00 -0500, "x"]
#
# Converter +:numeric+ converts with both +:date_time+ and +:numeric+..
#
# As seen above, method #convert adds \converters to a \CSV instance,
# and method #converters returns an \Array of the \converters in effect:
#   csv = CSV.new('0,1,2')
#   csv.converters # => []
#   csv.convert(:integer)
#   csv.converters # => [:integer]
#   csv.convert(:date)
#   csv.converters # => [:integer, :date]
#
# ===== Custom Field \Converters
#
# You can define a custom field converter:
#   strip_converter = proc {|field| field.strip }
#   string = " foo , 0 \n bar , 1 \n baz , 2 \n"
#   array = CSV.parse(string, converters: strip_converter)
#   array # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
# You can register the converter in \Converters \Hash,
# which allows you to refer to it by name:
#   CSV::Converters[:strip] = strip_converter
#   string = " foo , 0 \n bar , 1 \n baz , 2 \n"
#   array = CSV.parse(string, converters: :strip)
#   array # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
#
# ==== Header \Converters
#
# Header converters operate only on headers (and not on other rows).
#
# There are three ways to use header \converters;
# these examples use built-in header converter +:downcase+,
# which downcases each parsed header.
#
# - Option +header_converters+ with a singleton parsing method:
#     string = "Name,Count\nFoo,0\n,Bar,1\nBaz,2"
#     tbl = CSV.parse(string, headers: true, header_converters: :downcase)
#     tbl.class # => CSV::Table
#     tbl.headers # => ["name", "count"]
#
# - Option +header_converters+ with a new \CSV instance:
#     csv = CSV.new(string, header_converters: :downcase)
#     # Header converters in effect:
#     csv.header_converters # => [:downcase]
#     tbl = CSV.parse(string, headers: true)
#     tbl.headers # => ["Name", "Count"]
#
# - Method #header_convert adds a header converter to a \CSV instance:
#     csv = CSV.new(string)
#     # Add a header converter.
#     csv.header_convert(:downcase)
#     csv.header_converters # => [:downcase]
#     tbl = CSV.parse(string, headers: true)
#     tbl.headers # => ["Name", "Count"]
#
# ===== Built-In Header \Converters
#
# The built-in header \converters are in \Hash CSV::HeaderConverters.
# The keys there are the names of the \converters:
#   CSV::HeaderConverters.keys # => [:downcase, :symbol]
#
# Converter +:downcase+ converts each header by downcasing it:
#   string = "Name,Count\nFoo,0\n,Bar,1\nBaz,2"
#   tbl = CSV.parse(string, headers: true, header_converters: :downcase)
#   tbl.class # => CSV::Table
#   tbl.headers # => ["name", "count"]
#
# Converter +:symbol+ converts each header by making it into a \Symbol:
#   string = "Name,Count\nFoo,0\n,Bar,1\nBaz,2"
#   tbl = CSV.parse(string, headers: true, header_converters: :symbol)
#   tbl.headers # => [:name, :count]
# Details:
# - Strips leading and trailing whitespace.
# - Downcases the header.
# - Replaces embedded spaces with underscores.
# - Removes non-word characters.
# - Makes the string into a \Symbol.
#
# ===== Custom Header \Converters
#
# You can define a custom header converter:
#   upcase_converter = proc {|header| header.upcase }
#   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
#   table = CSV.parse(string, headers: true, header_converters: upcase_converter)
#   table # => #<CSV::Table mode:col_or_row row_count:4>
#   table.headers # => ["NAME", "VALUE"]
# You can register the converter in \HeaderConverters \Hash,
# which allows you to refer to it by name:
#   CSV::HeaderConverters[:upcase] = upcase_converter
#   table = CSV.parse(string, headers: true, header_converters: :upcase)
#   table # => #<CSV::Table mode:col_or_row row_count:4>
#   table.headers # => ["NAME", "VALUE"]
#
# ===== Write \Converters
#
# When you specify a write converter for generating \CSV,
# each field to be written is passed to the converter;
# its return value becomes the new value for the field.
# A converter might, for example, strip whitespace from a field.
#
# Using no write converter (all fields unmodified):
#   output_string = CSV.generate do |csv|
#     csv << [' foo ', 0]
#     csv << [' bar ', 1]
#     csv << [' baz ', 2]
#   end
#   output_string # => " foo ,0\n bar ,1\n baz ,2\n"
# Using option +write_converters+ with two custom write converters:
#   strip_converter = proc {|field| field.respond_to?(:strip) ? field.strip : field }
#   upcase_converter = proc {|field| field.respond_to?(:upcase) ? field.upcase : field }
#   write_converters = [strip_converter, upcase_converter]
#   output_string = CSV.generate(write_converters: write_converters) do |csv|
#     csv << [' foo ', 0]
#     csv << [' bar ', 1]
#     csv << [' baz ', 2]
#   end
#   output_string # => "FOO,0\nBAR,1\nBAZ,2\n"
#
# === Character Encodings (M17n or Multilingualization)
#
# This new CSV parser is m17n savvy.  The parser works in the Encoding of the IO
# or String object being read from or written to. Your data is never transcoded
# (unless you ask Ruby to transcode it for you) and will literally be parsed in
# the Encoding it is in. Thus CSV will return Arrays or Rows of Strings in the
# Encoding of your data. This is accomplished by transcoding the parser itself
# into your Encoding.
#
# Some transcoding must take place, of course, to accomplish this multiencoding
# support. For example, <tt>:col_sep</tt>, <tt>:row_sep</tt>, and
# <tt>:quote_char</tt> must be transcoded to match your data.  Hopefully this
# makes the entire process feel transparent, since CSV's defaults should just
# magically work for your data. However, you can set these values manually in
# the target Encoding to avoid the translation.
#
# It's also important to note that while all of CSV's core parser is now
# Encoding agnostic, some features are not. For example, the built-in
# converters will try to transcode data to UTF-8 before making conversions.
# Again, you can provide custom converters that are aware of your Encodings to
# avoid this translation. It's just too hard for me to support native
# conversions in all of Ruby's Encodings.
#
# Anyway, the practical side of this is simple: make sure IO and String objects
# passed into CSV have the proper Encoding set and everything should just work.
# CSV methods that allow you to open IO objects (CSV::foreach(), CSV::open(),
# CSV::read(), and CSV::readlines()) do allow you to specify the Encoding.
#
# One minor exception comes when generating CSV into a String with an Encoding
# that is not ASCII compatible. There's no existing data for CSV to use to
# prepare itself and thus you will probably need to manually specify the desired
# Encoding for most of those cases. It will try to guess using the fields in a
# row of output though, when using CSV::generate_line() or Array#to_csv().
#
# I try to point out any other Encoding issues in the documentation of methods
# as they come up.
#
# This has been tested to the best of my ability with all non-"dummy" Encodings
# Ruby ships with. However, it is brave new code and may have some bugs.
# Please feel free to {report}[mailto:james@grayproductions.net] any issues you
# find with it.
#
class CSV

  # The error thrown when the parser encounters illegal CSV formatting.
  class MalformedCSVError < RuntimeError
    attr_reader :line_number
    alias_method :lineno, :line_number
    def initialize(message, line_number)
      @line_number = line_number
      super("#{message} in line #{line_number}.")
    end
  end

  # The error thrown when the parser encounters invalid encoding in CSV.
  class InvalidEncodingError < MalformedCSVError
    attr_reader :encoding
    def initialize(encoding, line_number)
      @encoding = encoding
      super("Invalid byte sequence in #{encoding}", line_number)
    end
  end

  #
  # A FieldInfo Struct contains details about a field's position in the data
  # source it was read from.  CSV will pass this Struct to some blocks that make
  # decisions based on field structure.  See CSV.convert_fields() for an
  # example.
  #
  # <b><tt>index</tt></b>::  The zero-based index of the field in its row.
  # <b><tt>line</tt></b>::   The line of the data source this row is from.
  # <b><tt>header</tt></b>:: The header for the column, when available.
  # <b><tt>quoted?</tt></b>:: True or false, whether the original value is quoted or not.
  #
  FieldInfo = Struct.new(:index, :line, :header, :quoted?)

  # A Regexp used to find and convert some common Date formats.
  DateMatcher     = / \A(?: (\w+,?\s+)?\w+\s+\d{1,2},?\s+\d{2,4} |
                            \d{4}-\d{2}-\d{2} )\z /x
  # A Regexp used to find and convert some common (Date)Time formats.
  DateTimeMatcher =
    / \A(?: (\w+,?\s+)?\w+\s+\d{1,2}\s+\d{1,2}:\d{1,2}:\d{1,2},?\s+\d{2,4} |
            # ISO-8601 and RFC-3339 (space instead of T) recognized by (Date)Time.parse
            \d{4}-\d{2}-\d{2}
              (?:[T\s]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?(?:[+-]\d{2}(?::\d{2})|Z)?)?)?
        )\z /x

  # The encoding used by all converters.
  ConverterEncoding = Encoding.find("UTF-8")

  # A \Hash containing the names and \Procs for the built-in field converters.
  # See {Built-In Field Converters}[#class-CSV-label-Built-In+Field+Converters].
  #
  # This \Hash is intentionally left unfrozen, and may be extended with
  # custom field converters.
  # See {Custom Field Converters}[#class-CSV-label-Custom+Field+Converters].
  Converters  = {
    integer:   lambda { |f|
      Integer(f.encode(ConverterEncoding)) rescue f
    },
    float:     lambda { |f|
      Float(f.encode(ConverterEncoding)) rescue f
    },
    numeric:   [:integer, :float],
    date:      lambda { |f|
      begin
        e = f.encode(ConverterEncoding)
        e.match?(DateMatcher) ? Date.parse(e) : f
      rescue  # encoding conversion or date parse errors
        f
      end
    },
    date_time: lambda { |f|
      begin
        e = f.encode(ConverterEncoding)
        e.match?(DateTimeMatcher) ? DateTime.parse(e) : f
      rescue  # encoding conversion or date parse errors
        f
      end
    },
    time: lambda { |f|
      begin
        e = f.encode(ConverterEncoding)
        e.match?(DateTimeMatcher) ? Time.parse(e) : f
      rescue  # encoding conversion or parse errors
        f
      end
    },
    all:       [:date_time, :numeric],
  }

  # A \Hash containing the names and \Procs for the built-in header converters.
  # See {Built-In Header Converters}[#class-CSV-label-Built-In+Header+Converters].
  #
  # This \Hash is intentionally left unfrozen, and may be extended with
  # custom field converters.
  # See {Custom Header Converters}[#class-CSV-label-Custom+Header+Converters].
  HeaderConverters = {
    downcase: lambda { |h| h.encode(ConverterEncoding).downcase },
    symbol:   lambda { |h|
      h.encode(ConverterEncoding).downcase.gsub(/[^\s\w]+/, "").strip.
                                           gsub(/\s+/, "_").to_sym
    },
    symbol_raw: lambda { |h| h.encode(ConverterEncoding).to_sym }
  }

  # Default values for method options.
  DEFAULT_OPTIONS = {
    # For both parsing and generating.
    col_sep:            ",",
    row_sep:            :auto,
    quote_char:         '"',
    # For parsing.
    field_size_limit:   nil,
    max_field_size:     nil,
    converters:         nil,
    unconverted_fields: nil,
    headers:            false,
    return_headers:     false,
    header_converters:  nil,
    skip_blanks:        false,
    skip_lines:         nil,
    liberal_parsing:    false,
    nil_value:          nil,
    empty_value:        "",
    strip:              false,
    # For generating.
    write_headers:      nil,
    quote_empty:        true,
    force_quotes:       false,
    write_converters:   nil,
    write_nil_value:    nil,
    write_empty_value:  "",
  }.freeze

  class << self
    # :call-seq:
    #   instance(string, **options)
    #   instance(io = $stdout, **options)
    #   instance(string, **options) {|csv| ... }
    #   instance(io = $stdout, **options) {|csv| ... }
    #
    # Creates or retrieves cached \CSV objects.
    # For arguments and options, see CSV.new.
    #
    # This API is not Ractor-safe.
    #
    # ---
    #
    # With no block given, returns a \CSV object.
    #
    # The first call to +instance+ creates and caches a \CSV object:
    #   s0 = 's0'
    #   csv0 = CSV.instance(s0)
    #   csv0.class # => CSV
    #
    # Subsequent calls to +instance+ with that _same_ +string+ or +io+
    # retrieve that same cached object:
    #   csv1 = CSV.instance(s0)
    #   csv1.class # => CSV
    #   csv1.equal?(csv0) # => true # Same CSV object
    #
    # A subsequent call to +instance+ with a _different_ +string+ or +io+
    # creates and caches a _different_ \CSV object.
    #   s1 = 's1'
    #   csv2 = CSV.instance(s1)
    #   csv2.equal?(csv0) # => false # Different CSV object
    #
    # All the cached objects remains available:
    #   csv3 = CSV.instance(s0)
    #   csv3.equal?(csv0) # true # Same CSV object
    #   csv4 = CSV.instance(s1)
    #   csv4.equal?(csv2) # true # Same CSV object
    #
    # ---
    #
    # When a block is given, calls the block with the created or retrieved
    # \CSV object; returns the block's return value:
    #   CSV.instance(s0) {|csv| :foo } # => :foo
    def instance(data = $stdout, **options)
      # create a _signature_ for this method call, data object and options
      sig = [data.object_id] +
            options.values_at(*DEFAULT_OPTIONS.keys)

      # fetch or create the instance for this signature
      @@instances ||= Hash.new
      instance = (@@instances[sig] ||= new(data, **options))

      if block_given?
        yield instance  # run block, if given, returning result
      else
        instance        # or return the instance
      end
    end

    # :call-seq:
    #   filter(in_string_or_io, **options) {|row| ... } -> array_of_arrays or csv_table
    #   filter(in_string_or_io, out_string_or_io, **options) {|row| ... } -> array_of_arrays or csv_table
    #   filter(**options) {|row| ... } -> array_of_arrays or csv_table
    #
    # - Parses \CSV from a source (\String, \IO stream, or ARGF).
    # - Calls the given block with each parsed row:
    #   - Without headers, each row is an \Array.
    #   - With headers, each row is a CSV::Row.
    # - Generates \CSV to an output (\String, \IO stream, or STDOUT).
    # - Returns the parsed source:
    #   - Without headers, an \Array of \Arrays.
    #   - With headers, a CSV::Table.
    #
    # When +in_string_or_io+ is given, but not +out_string_or_io+,
    # parses from the given +in_string_or_io+
    # and generates to STDOUT.
    #
    # \String input without headers:
    #
    #   in_string = "foo,0\nbar,1\nbaz,2"
    #   CSV.filter(in_string) do |row|
    #     row[0].upcase!
    #     row[1] = - row[1].to_i
    #   end # => [["FOO", 0], ["BAR", -1], ["BAZ", -2]]
    #
    # Output (to STDOUT):
    #
    #   FOO,0
    #   BAR,-1
    #   BAZ,-2
    #
    # \String input with headers:
    #
    #   in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2"
    #   CSV.filter(in_string, headers: true) do |row|
    #     row[0].upcase!
    #     row[1] = - row[1].to_i
    #   end # => #<CSV::Table mode:col_or_row row_count:4>
    #
    # Output (to STDOUT):
    #
    #   Name,Value
    #   FOO,0
    #   BAR,-1
    #   BAZ,-2
    #
    # \IO stream input without headers:
    #
    #   File.write('t.csv', "foo,0\nbar,1\nbaz,2")
    #   File.open('t.csv') do |in_io|
    #     CSV.filter(in_io) do |row|
    #       row[0].upcase!
    #       row[1] = - row[1].to_i
    #     end
    #   end # => [["FOO", 0], ["BAR", -1], ["BAZ", -2]]
    #
    # Output (to STDOUT):
    #
    #   FOO,0
    #   BAR,-1
    #   BAZ,-2
    #
    # \IO stream input with headers:
    #
    #   File.write('t.csv', "Name,Value\nfoo,0\nbar,1\nbaz,2")
    #   File.open('t.csv') do |in_io|
    #     CSV.filter(in_io, headers: true) do |row|
    #       row[0].upcase!
    #       row[1] = - row[1].to_i
    #     end
    #   end # => #<CSV::Table mode:col_or_row row_count:4>
    #
    # Output (to STDOUT):
    #
    #   Name,Value
    #   FOO,0
    #   BAR,-1
    #   BAZ,-2
    #
    # When both +in_string_or_io+ and +out_string_or_io+ are given,
    # parses from +in_string_or_io+ and generates to +out_string_or_io+.
    #
    # \String output without headers:
    #
    #   in_string = "foo,0\nbar,1\nbaz,2"
    #   out_string = ''
    #   CSV.filter(in_string, out_string) do |row|
    #     row[0].upcase!
    #     row[1] = - row[1].to_i
    #   end # => [["FOO", 0], ["BAR", -1], ["BAZ", -2]]
    #   out_string # => "FOO,0\nBAR,-1\nBAZ,-2\n"
    #
    # \String output with headers:
    #
    #   in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2"
    #   out_string = ''
    #   CSV.filter(in_string, out_string, headers: true) do |row|
    #     row[0].upcase!
    #     row[1] = - row[1].to_i
    #   end # => #<CSV::Table mode:col_or_row row_count:4>
    #   out_string # => "Name,Value\nFOO,0\nBAR,-1\nBAZ,-2\n"
    #
    # \IO stream output without headers:
    #
    #   in_string = "foo,0\nbar,1\nbaz,2"
    #   File.open('t.csv', 'w') do |out_io|
    #     CSV.filter(in_string, out_io) do |row|
    #       row[0].upcase!
    #       row[1] = - row[1].to_i
    #     end
    #   end # => [["FOO", 0], ["BAR", -1], ["BAZ", -2]]
    #   File.read('t.csv') # => "FOO,0\nBAR,-1\nBAZ,-2\n"
    #
    # \IO stream output with headers:
    #
    #   in_string = "Name,Value\nfoo,0\nbar,1\nbaz,2"
    #   File.open('t.csv', 'w') do |out_io|
    #     CSV.filter(in_string, out_io, headers: true) do |row|
    #       row[0].upcase!
    #       row[1] = - row[1].to_i
    #     end
    #   end # => #<CSV::Table mode:col_or_row row_count:4>
    #   File.read('t.csv') # => "Name,Value\nFOO,0\nBAR,-1\nBAZ,-2\n"
    #
    # When neither +in_string_or_io+ nor +out_string_or_io+ given,
    # parses from {ARGF}[rdoc-ref:ARGF]
    # and generates to STDOUT.
    #
    # Without headers:
    #
    #   # Put Ruby code into a file.
    #   ruby = <<-EOT
    #     require 'csv'
    #     CSV.filter do |row|
    #       row[0].upcase!
    #       row[1] = - row[1].to_i
    #     end
    #   EOT
    #   File.write('t.rb', ruby)
    #   # Put some CSV into a file.
    #   File.write('t.csv', "foo,0\nbar,1\nbaz,2")
    #   # Run the Ruby code with CSV filename as argument.
    #   system(Gem.ruby, "t.rb", "t.csv")
    #
    # Output (to STDOUT):
    #
    #   FOO,0
    #   BAR,-1
    #   BAZ,-2
    #
    # With headers:
    #
    #   # Put Ruby code into a file.
    #   ruby = <<-EOT
    #     require 'csv'
    #     CSV.filter(headers: true) do |row|
    #       row[0].upcase!
    #       row[1] = - row[1].to_i
    #     end
    #   EOT
    #   File.write('t.rb', ruby)
    #   # Put some CSV into a file.
    #   File.write('t.csv', "Name,Value\nfoo,0\nbar,1\nbaz,2")
    #   # Run the Ruby code with CSV filename as argument.
    #   system(Gem.ruby, "t.rb", "t.csv")
    #
    # Output (to STDOUT):
    #
    #   Name,Value
    #   FOO,0
    #   BAR,-1
    #   BAZ,-2
    #
    # Arguments:
    #
    # * Argument +in_string_or_io+ must be a \String or an \IO stream.
    # * Argument +out_string_or_io+ must be a \String or an \IO stream.
    # * Arguments <tt>**options</tt> must be keyword options.
    #
    #   - Each option defined as an {option for parsing}[#class-CSV-label-Options+for+Parsing]
    #     is used for parsing the filter input.
    #   - Each option defined as an {option for generating}[#class-CSV-label-Options+for+Generating]
    #     is used for generator the filter input.
    #
    # However, there are three options that may be used for both parsing and generating:
    # +col_sep+, +quote_char+, and +row_sep+.
    #
    # Therefore for method +filter+ (and method +filter+ only),
    # there are special options that allow these parsing and generating options
    # to be specified separately:
    #
    # - Options +input_col_sep+ and +output_col_sep+
    #   (and their aliases +in_col_sep+ and +out_col_sep+)
    #   specify the column separators for parsing and generating.
    # - Options +input_quote_char+ and +output_quote_char+
    #   (and their aliases +in_quote_char+ and +out_quote_char+)
    #   specify the quote characters for parsing and generting.
    # - Options +input_row_sep+ and +output_row_sep+
    #   (and their aliases +in_row_sep+ and +out_row_sep+)
    #   specify the row separators for parsing and generating.
    #
    # Example options (for column separators):
    #
    #   CSV.filter                                    # Default for both parsing and generating.
    #   CSV.filter(in_col_sep: ';')                   # ';' for parsing, default for generating.
    #   CSV.filter(out_col_sep: '|')                  # Default for parsing, '|' for generating.
    #   CSV.filter(in_col_sep: ';', out_col_sep: '|') # ';' for parsing, '|' for generating.
    #
    # Note that for a special option (e.g., +input_col_sep+)
    # and its corresponding "regular" option (e.g., +col_sep+),
    # the two are mutually overriding.
    #
    # Another example (possibly surprising):
    #
    #   CSV.filter(in_col_sep: ';', col_sep: '|') # '|' for both parsing(!) and generating.
    #
    def filter(input=nil, output=nil, **options)
      # parse options for input, output, or both
      in_options, out_options = Hash.new, {row_sep: InputRecordSeparator.value}
      options.each do |key, value|
        case key
        when /\Ain(?:put)?_(.+)\Z/
          in_options[$1.to_sym] = value
        when /\Aout(?:put)?_(.+)\Z/
          out_options[$1.to_sym] = value
        else
          in_options[key]  = value
          out_options[key] = value
        end
      end

      # build input and output wrappers
      input  = new(input  || ARGF, **in_options)
      output = new(output || $stdout, **out_options)

      # process headers
      need_manual_header_output =
        (in_options[:headers] and
         out_options[:headers] == true and
         out_options[:write_headers])
      if need_manual_header_output
        first_row = input.shift
        if first_row
          if first_row.is_a?(Row)
            headers = first_row.headers
            yield headers
            output << headers
          end
          yield first_row
          output << first_row
        end
      end

      # read, yield, write
      input.each do |row|
        yield row
        output << row
      end
    end

    #
    # :call-seq:
    #   foreach(path_or_io, mode='r', **options) {|row| ... )
    #   foreach(path_or_io, mode='r', **options) -> new_enumerator
    #
    # Calls the block with each row read from source +path_or_io+.
    #
    # \Path input without headers:
    #
    #   string = "foo,0\nbar,1\nbaz,2\n"
    #   in_path = 't.csv'
    #   File.write(in_path, string)
    #   CSV.foreach(in_path) {|row| p row }
    #
    # Output:
    #
    #   ["foo", "0"]
    #   ["bar", "1"]
    #   ["baz", "2"]
    #
    # \Path input with headers:
    #
    #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   in_path = 't.csv'
    #   File.write(in_path, string)
    #   CSV.foreach(in_path, headers: true) {|row| p row }
    #
    # Output:
    #
    #   <CSV::Row "Name":"foo" "Value":"0">
    #   <CSV::Row "Name":"bar" "Value":"1">
    #   <CSV::Row "Name":"baz" "Value":"2">
    #
    # \IO stream input without headers:
    #
    #   string = "foo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #   File.open('t.csv') do |in_io|
    #     CSV.foreach(in_io) {|row| p row }
    #   end
    #
    # Output:
    #
    #   ["foo", "0"]
    #   ["bar", "1"]
    #   ["baz", "2"]
    #
    # \IO stream input with headers:
    #
    #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #   File.open('t.csv') do |in_io|
    #     CSV.foreach(in_io, headers: true) {|row| p row }
    #   end
    #
    # Output:
    #
    #   <CSV::Row "Name":"foo" "Value":"0">
    #   <CSV::Row "Name":"bar" "Value":"1">
    #   <CSV::Row "Name":"baz" "Value":"2">
    #
    # With no block given, returns an \Enumerator:
    #
    #   string = "foo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #   CSV.foreach(path) # => #<Enumerator: CSV:foreach("t.csv", "r")>
    #
    # Arguments:
    # * Argument +path_or_io+ must be a file path or an \IO stream.
    # * Argument +mode+, if given, must be a \File mode.
    #   See {Access Modes}[https://docs.ruby-lang.org/en/master/File.html#class-File-label-Access+Modes].
    # * Arguments <tt>**options</tt> must be keyword options.
    #   See {Options for Parsing}[#class-CSV-label-Options+for+Parsing].
    # * This method optionally accepts an additional <tt>:encoding</tt> option
    #   that you can use to specify the Encoding of the data read from +path+ or +io+.
    #   You must provide this unless your data is in the encoding
    #   given by <tt>Encoding::default_external</tt>.
    #   Parsing will use this to determine how to parse the data.
    #   You may provide a second Encoding to
    #   have the data transcoded as it is read. For example,
    #     encoding: 'UTF-32BE:UTF-8'
    #   would read +UTF-32BE+ data from the file
    #   but transcode it to +UTF-8+ before parsing.
    def foreach(path, mode="r", **options, &block)
      return to_enum(__method__, path, mode, **options) unless block_given?
      open(path, mode, **options) do |csv|
        csv.each(&block)
      end
    end

    #
    # :call-seq:
    #   generate(csv_string, **options) {|csv| ... }
    #   generate(**options) {|csv| ... }
    #
    # * Argument +csv_string+, if given, must be a \String object;
    #   defaults to a new empty \String.
    # * Arguments +options+, if given, should be generating options.
    #   See {Options for Generating}[#class-CSV-label-Options+for+Generating].
    #
    # ---
    #
    # Creates a new \CSV object via <tt>CSV.new(csv_string, **options)</tt>;
    # calls the block with the \CSV object, which the block may modify;
    # returns the \String generated from the \CSV object.
    #
    # Note that a passed \String *is* modified by this method.
    # Pass <tt>csv_string</tt>.dup if the \String must be preserved.
    #
    # This method has one additional option: <tt>:encoding</tt>,
    # which sets the base Encoding for the output if no no +str+ is specified.
    # CSV needs this hint if you plan to output non-ASCII compatible data.
    #
    # ---
    #
    # Add lines:
    #   input_string = "foo,0\nbar,1\nbaz,2\n"
    #   output_string = CSV.generate(input_string) do |csv|
    #     csv << ['bat', 3]
    #     csv << ['bam', 4]
    #   end
    #   output_string # => "foo,0\nbar,1\nbaz,2\nbat,3\nbam,4\n"
    #   input_string # => "foo,0\nbar,1\nbaz,2\nbat,3\nbam,4\n"
    #   output_string.equal?(input_string) # => true # Same string, modified
    #
    # Add lines into new string, preserving old string:
    #   input_string = "foo,0\nbar,1\nbaz,2\n"
    #   output_string = CSV.generate(input_string.dup) do |csv|
    #     csv << ['bat', 3]
    #     csv << ['bam', 4]
    #   end
    #   output_string # => "foo,0\nbar,1\nbaz,2\nbat,3\nbam,4\n"
    #   input_string # => "foo,0\nbar,1\nbaz,2\n"
    #   output_string.equal?(input_string) # => false # Different strings
    #
    # Create lines from nothing:
    #   output_string = CSV.generate do |csv|
    #     csv << ['foo', 0]
    #     csv << ['bar', 1]
    #     csv << ['baz', 2]
    #   end
    #   output_string # => "foo,0\nbar,1\nbaz,2\n"
    #
    # ---
    #
    # Raises an exception if +csv_string+ is not a \String object:
    #   # Raises TypeError (no implicit conversion of Integer into String)
    #   CSV.generate(0)
    #
    def generate(str=nil, **options)
      encoding = options[:encoding]
      # add a default empty String, if none was given
      if str
        str = StringIO.new(str)
        str.seek(0, IO::SEEK_END)
        str.set_encoding(encoding) if encoding
      else
        str = +""
        str.force_encoding(encoding) if encoding
      end
      csv = new(str, **options) # wrap
      yield csv         # yield for appending
      csv.string        # return final String
    end

    # :call-seq:
    #   CSV.generate_line(ary)
    #   CSV.generate_line(ary, **options)
    #
    # Returns the \String created by generating \CSV from +ary+
    # using the specified +options+.
    #
    # Argument +ary+ must be an \Array.
    #
    # Special options:
    # * Option <tt>:row_sep</tt> defaults to <tt>"\n"> on Ruby 3.0 or later
    #   and <tt>$INPUT_RECORD_SEPARATOR</tt> (<tt>$/</tt>) otherwise.:
    #     $INPUT_RECORD_SEPARATOR # => "\n"
    # * This method accepts an additional option, <tt>:encoding</tt>, which sets the base
    #   Encoding for the output. This method will try to guess your Encoding from
    #   the first non-+nil+ field in +row+, if possible, but you may need to use
    #   this parameter as a backup plan.
    #
    # For other +options+,
    # see {Options for Generating}[#class-CSV-label-Options+for+Generating].
    #
    # ---
    #
    # Returns the \String generated from an \Array:
    #   CSV.generate_line(['foo', '0']) # => "foo,0\n"
    #
    # ---
    #
    # Raises an exception if +ary+ is not an \Array:
    #   # Raises NoMethodError (undefined method `find' for :foo:Symbol)
    #   CSV.generate_line(:foo)
    #
    def generate_line(row, **options)
      options = {row_sep: InputRecordSeparator.value}.merge(options)
      str = +""
      if options[:encoding]
        str.force_encoding(options[:encoding])
      else
        fallback_encoding = nil
        output_encoding = nil
        row.each do |field|
          next unless field.is_a?(String)
          fallback_encoding ||= field.encoding
          next if field.ascii_only?
          output_encoding = field.encoding
          break
        end
        output_encoding ||= fallback_encoding
        if output_encoding
          str.force_encoding(output_encoding)
        end
      end
      (new(str, **options) << row).string
    end

    # :call-seq:
    #   CSV.generate_lines(rows)
    #   CSV.generate_lines(rows, **options)
    #
    # Returns the \String created by generating \CSV from
    # using the specified +options+.
    #
    # Argument +rows+ must be an \Array of row. Row is \Array of \String or \CSV::Row.
    #
    # Special options:
    # * Option <tt>:row_sep</tt> defaults to <tt>"\n"</tt> on Ruby 3.0 or later
    #   and <tt>$INPUT_RECORD_SEPARATOR</tt> (<tt>$/</tt>) otherwise.:
    #     $INPUT_RECORD_SEPARATOR # => "\n"
    # * This method accepts an additional option, <tt>:encoding</tt>, which sets the base
    #   Encoding for the output. This method will try to guess your Encoding from
    #   the first non-+nil+ field in +row+, if possible, but you may need to use
    #   this parameter as a backup plan.
    #
    # For other +options+,
    # see {Options for Generating}[#class-CSV-label-Options+for+Generating].
    #
    # ---
    #
    # Returns the \String generated from an
    #   CSV.generate_lines([['foo', '0'], ['bar', '1'], ['baz', '2']]) # => "foo,0\nbar,1\nbaz,2\n"
    #
    # ---
    #
    # Raises an exception
    #   # Raises NoMethodError (undefined method `each' for :foo:Symbol)
    #   CSV.generate_lines(:foo)
    #
    def generate_lines(rows, **options)
      self.generate(**options) do |csv|
        rows.each do |row|
          csv << row
        end
      end
    end

    #
    # :call-seq:
    #   open(path_or_io, mode = "rb", **options ) -> new_csv
    #   open(path_or_io, mode = "rb", **options ) { |csv| ... } -> object
    #
    # possible options elements:
    #   keyword form:
    #     :invalid => nil      # raise error on invalid byte sequence (default)
    #     :invalid => :replace # replace invalid byte sequence
    #     :undef => :replace   # replace undefined conversion
    #     :replace => string   # replacement string ("?" or "\uFFFD" if not specified)
    #
    # * Argument +path_or_io+, must be a file path or an \IO stream.
    # :include: ../doc/csv/arguments/io.rdoc
    # * Argument +mode+, if given, must be a \File mode.
    #   See {Access Modes}[https://docs.ruby-lang.org/en/master/File.html#class-File-label-Access+Modes].
    # * Arguments <tt>**options</tt> must be keyword options.
    #   See {Options for Generating}[#class-CSV-label-Options+for+Generating].
    # * This method optionally accepts an additional <tt>:encoding</tt> option
    #   that you can use to specify the Encoding of the data read from +path+ or +io+.
    #   You must provide this unless your data is in the encoding
    #   given by <tt>Encoding::default_external</tt>.
    #   Parsing will use this to determine how to parse the data.
    #   You may provide a second Encoding to
    #   have the data transcoded as it is read. For example,
    #     encoding: 'UTF-32BE:UTF-8'
    #   would read +UTF-32BE+ data from the file
    #   but transcode it to +UTF-8+ before parsing.
    #
    # ---
    #
    # These examples assume prior execution of:
    #   string = "foo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #
    #   string_io = StringIO.new
    #   string_io << "foo,0\nbar,1\nbaz,2\n"
    #
    # ---
    #
    # With no block given, returns a new \CSV object.
    #
    # Create a \CSV object using a file path:
    #   csv = CSV.open(path)
    #   csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    #
    # Create a \CSV object using an open \File:
    #   csv = CSV.open(File.open(path))
    #   csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    #
    # Create a \CSV object using a \StringIO:
    #   csv = CSV.open(string_io)
    #   csv # => #<CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    # ---
    #
    # With a block given, calls the block with the created \CSV object;
    # returns the block's return value:
    #
    # Using a file path:
    #   csv = CSV.open(path) {|csv| p csv}
    #   csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    # Output:
    #   #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    #
    # Using an open \File:
    #   csv = CSV.open(File.open(path)) {|csv| p csv}
    #   csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    # Output:
    #   #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    #
    # Using a \StringIO:
    #   csv = CSV.open(string_io) {|csv| p csv}
    #   csv # => #<CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    # Output:
    #   #<CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
    # ---
    #
    # Raises an exception if the argument is not a \String object or \IO object:
    #   # Raises TypeError (no implicit conversion of Symbol into String)
    #   CSV.open(:foo)
    def open(filename_or_io, mode="r", **options)
      # wrap a File opened with the remaining +args+ with no newline
      # decorator
      file_opts = {}
      may_enable_bom_detection_automatically(filename_or_io,
                                             mode,
                                             options,
                                             file_opts)
      file_opts.merge!(options)
      unless file_opts.key?(:newline)
        file_opts[:universal_newline] ||= false
      end
      options.delete(:invalid)
      options.delete(:undef)
      options.delete(:replace)
      options.delete_if {|k, _| /newline\z/.match?(k)}

      if filename_or_io.is_a?(StringIO)
        f = create_stringio(filename_or_io.string, mode, **file_opts)
      else
        begin
          f = File.open(filename_or_io, mode, **file_opts)
        rescue ArgumentError => e
          raise unless /needs binmode/.match?(e.message) and mode == "r"
          mode = "rb"
          file_opts = {encoding: Encoding.default_external}.merge(file_opts)
          retry
        end
      end

      begin
        csv = new(f, **options)
      rescue Exception
        f.close
        raise
      end

      # handle blocks like Ruby's open(), not like the CSV library
      if block_given?
        begin
          yield csv
        ensure
          csv.close
        end
      else
        csv
      end
    end

    #
    # :call-seq:
    #   parse(string) -> array_of_arrays
    #   parse(io) -> array_of_arrays
    #   parse(string, headers: ..., **options) -> csv_table
    #   parse(io, headers: ..., **options) -> csv_table
    #   parse(string, **options) {|row| ... }
    #   parse(io, **options) {|row| ... }
    #
    # Parses +string+ or +io+ using the specified +options+.
    #
    # - Argument +string+ should be a \String object;
    #   it will be put into a new StringIO object positioned at the beginning.
    # :include: ../doc/csv/arguments/io.rdoc
    # - Argument +options+: see {Options for Parsing}[#class-CSV-label-Options+for+Parsing]
    #
    # ====== Without Option +headers+
    #
    # Without {option +headers+}[#class-CSV-label-Option+headers] case.
    #
    # These examples assume prior execution of:
    #   string = "foo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #
    # ---
    #
    # With no block given, returns an \Array of Arrays formed from the source.
    #
    # Parse a \String:
    #   a_of_a = CSV.parse(string)
    #   a_of_a # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
    #
    # Parse an open \File:
    #   a_of_a = File.open(path) do |file|
    #     CSV.parse(file)
    #   end
    #   a_of_a # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
    #
    # ---
    #
    # With a block given, calls the block with each parsed row:
    #
    # Parse a \String:
    #   CSV.parse(string) {|row| p row }
    #
    # Output:
    #   ["foo", "0"]
    #   ["bar", "1"]
    #   ["baz", "2"]
    #
    # Parse an open \File:
    #   File.open(path) do |file|
    #     CSV.parse(file) {|row| p row }
    #   end
    #
    # Output:
    #   ["foo", "0"]
    #   ["bar", "1"]
    #   ["baz", "2"]
    #
    # ====== With Option +headers+
    #
    # With {option +headers+}[#class-CSV-label-Option+headers] case.
    #
    # These examples assume prior execution of:
    #   string = "Name,Count\nfoo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #
    # ---
    #
    # With no block given, returns a CSV::Table object formed from the source.
    #
    # Parse a \String:
    #   csv_table = CSV.parse(string, headers: ['Name', 'Count'])
    #   csv_table # => #<CSV::Table mode:col_or_row row_count:5>
    #
    # Parse an open \File:
    #   csv_table = File.open(path) do |file|
    #     CSV.parse(file, headers: ['Name', 'Count'])
    #   end
    #   csv_table # => #<CSV::Table mode:col_or_row row_count:4>
    #
    # ---
    #
    # With a block given, calls the block with each parsed row,
    # which has been formed into a CSV::Row object:
    #
    # Parse a \String:
    #   CSV.parse(string, headers: ['Name', 'Count']) {|row| p row }
    #
    # Output:
    #   # <CSV::Row "Name":"foo" "Count":"0">
    #   # <CSV::Row "Name":"bar" "Count":"1">
    #   # <CSV::Row "Name":"baz" "Count":"2">
    #
    # Parse an open \File:
    #   File.open(path) do |file|
    #     CSV.parse(file, headers: ['Name', 'Count']) {|row| p row }
    #   end
    #
    # Output:
    #   # <CSV::Row "Name":"foo" "Count":"0">
    #   # <CSV::Row "Name":"bar" "Count":"1">
    #   # <CSV::Row "Name":"baz" "Count":"2">
    #
    # ---
    #
    # Raises an exception if the argument is not a \String object or \IO object:
    #   # Raises NoMethodError (undefined method `close' for :foo:Symbol)
    #   CSV.parse(:foo)
    #
    # ---
    #
    # Please make sure if your text contains \BOM or not. CSV.parse will not remove
    # \BOM automatically. You might want to remove \BOM before calling CSV.parse :
    #   # remove BOM on calling File.open
    #   File.open(path, encoding: 'bom|utf-8') do |file|
    #     CSV.parse(file, headers: true) do |row|
    #       # you can get value by column name because BOM is removed
    #       p row['Name']
    #     end
    #   end
    #
    # Output:
    #   # "foo"
    #   # "bar"
    #   # "baz"
    def parse(str, **options, &block)
      csv = new(str, **options)

      return csv.each(&block) if block_given?

      # slurp contents, if no block is given
      begin
        csv.read
      ensure
        csv.close
      end
    end

    # :call-seq:
    #   CSV.parse_line(string) -> new_array or nil
    #   CSV.parse_line(io) -> new_array or nil
    #   CSV.parse_line(string, **options) -> new_array or nil
    #   CSV.parse_line(io, **options) -> new_array or nil
    #   CSV.parse_line(string, headers: true, **options) -> csv_row or nil
    #   CSV.parse_line(io, headers: true, **options) -> csv_row or nil
    #
    # Returns the data created by parsing the first line of +string+ or +io+
    # using the specified +options+.
    #
    # - Argument +string+ should be a \String object;
    #   it will be put into a new StringIO object positioned at the beginning.
    # :include: ../doc/csv/arguments/io.rdoc
    # - Argument +options+: see {Options for Parsing}[#class-CSV-label-Options+for+Parsing]
    #
    # ====== Without Option +headers+
    #
    # Without option +headers+, returns the first row as a new \Array.
    #
    # These examples assume prior execution of:
    #   string = "foo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #
    # Parse the first line from a \String object:
    #   CSV.parse_line(string) # => ["foo", "0"]
    #
    # Parse the first line from a File object:
    #   File.open(path) do |file|
    #     CSV.parse_line(file) # => ["foo", "0"]
    #   end # => ["foo", "0"]
    #
    # Returns +nil+ if the argument is an empty \String:
    #   CSV.parse_line('') # => nil
    #
    # ====== With Option +headers+
    #
    # With {option +headers+}[#class-CSV-label-Option+headers],
    # returns the first row as a CSV::Row object.
    #
    # These examples assume prior execution of:
    #   string = "Name,Count\nfoo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #
    # Parse the first line from a \String object:
    #   CSV.parse_line(string, headers: true) # => #<CSV::Row "Name":"foo" "Count":"0">
    #
    # Parse the first line from a File object:
    #   File.open(path) do |file|
    #     CSV.parse_line(file, headers: true)
    #   end # => #<CSV::Row "Name":"foo" "Count":"0">
    #
    # ---
    #
    # Raises an exception if the argument is +nil+:
    #   # Raises ArgumentError (Cannot parse nil as CSV):
    #   CSV.parse_line(nil)
    #
    def parse_line(line, **options)
      new(line, **options).each.first
    end

    #
    # :call-seq:
    #   read(source, **options) -> array_of_arrays
    #   read(source, headers: true, **options) -> csv_table
    #
    # Opens the given +source+ with the given +options+ (see CSV.open),
    # reads the source (see CSV#read), and returns the result,
    # which will be either an \Array of Arrays or a CSV::Table.
    #
    # Without headers:
    #   string = "foo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #   CSV.read(path) # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
    #
    # With headers:
    #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #   CSV.read(path, headers: true) # => #<CSV::Table mode:col_or_row row_count:4>
    def read(path, **options)
      open(path, **options) { |csv| csv.read }
    end

    # :call-seq:
    #   CSV.readlines(source, **options)
    #
    # Alias for CSV.read.
    def readlines(path, **options)
      read(path, **options)
    end

    # :call-seq:
    #   CSV.table(source, **options)
    #
    # Calls CSV.read with +source+, +options+, and certain default options:
    # - +headers+: +true+
    # - +converters+: +:numeric+
    # - +header_converters+: +:symbol+
    #
    # Returns a CSV::Table object.
    #
    # Example:
    #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
    #   path = 't.csv'
    #   File.write(path, string)
    #   CSV.table(path) # => #<CSV::Table mode:col_or_row row_count:4>
    def table(path, **options)
      default_options = {
        headers:           true,
        converters:        :numeric,
        header_converters: :symbol,
      }
      options = default_options.merge(options)
      read(path, **options)
    end

    ON_WINDOWS = /mingw|mswin/.match?(RUBY_PLATFORM)
    private_constant :ON_WINDOWS

    private
    def may_enable_bom_detection_automatically(filename_or_io,
                                               mode,
                                               options,
                                               file_opts)
      if filename_or_io.is_a?(StringIO)
        # Support to StringIO was dropped for Ruby 2.6 and earlier without BOM support:
        # https://github.com/ruby/stringio/pull/47
        return if RUBY_VERSION < "2.7"
      else
        # "bom|utf-8" may be buggy on Windows:
        # https://bugs.ruby-lang.org/issues/20526
        return if ON_WINDOWS
      end
      return unless Encoding.default_external == Encoding::UTF_8
      return if options.key?(:encoding)
      return if options.key?(:external_encoding)
      return if mode.include?(":")
      file_opts[:encoding] = "bom|utf-8"
    end

    if RUBY_VERSION < "2.7"
      def create_stringio(str, mode, opts)
        opts.delete_if {|k, _| k == :universal_newline or DEFAULT_OPTIONS.key?(k)}
        raise ArgumentError, "Unsupported options parsing StringIO: #{opts.keys}" unless opts.empty?
        StringIO.new(str, mode)
      end
    else
      def create_stringio(str, mode, opts)
        StringIO.new(str, mode, **opts)
      end
    end
  end

  # :call-seq:
  #   CSV.new(string)
  #   CSV.new(io)
  #   CSV.new(string, **options)
  #   CSV.new(io, **options)
  #
  # Returns the new \CSV object created using +string+ or +io+
  # and the specified +options+.
  #
  # - Argument +string+ should be a \String object;
  #   it will be put into a new StringIO object positioned at the beginning.
  # :include: ../doc/csv/arguments/io.rdoc
  # - Argument +options+: See:
  #   * {Options for Parsing}[#class-CSV-label-Options+for+Parsing]
  #   * {Options for Generating}[#class-CSV-label-Options+for+Generating]
  #   For performance reasons, the options cannot be overridden
  #   in a \CSV object, so those specified here will endure.
  #
  # In addition to the \CSV instance methods, several \IO methods are delegated.
  # See {Delegated Methods}[#class-CSV-label-Delegated+Methods].
  #
  # ---
  #
  # Create a \CSV object from a \String object:
  #   csv = CSV.new('foo,0')
  #   csv # => #<CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
  #
  # Create a \CSV object from a \File object:
  #   File.write('t.csv', 'foo,0')
  #   csv = CSV.new(File.open('t.csv'))
  #   csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">
  #
  # ---
  #
  # Raises an exception if the argument is +nil+:
  #   # Raises ArgumentError (Cannot parse nil as CSV):
  #   CSV.new(nil)
  #
  def initialize(data,
                 col_sep: ",",
                 row_sep: :auto,
                 quote_char: '"',
                 field_size_limit: nil,
                 max_field_size: nil,
                 converters: nil,
                 unconverted_fields: nil,
                 headers: false,
                 return_headers: false,
                 write_headers: nil,
                 header_converters: nil,
                 skip_blanks: false,
                 force_quotes: false,
                 skip_lines: nil,
                 liberal_parsing: false,
                 internal_encoding: nil,
                 external_encoding: nil,
                 encoding: nil,
                 nil_value: nil,
                 empty_value: "",
                 strip: false,
                 quote_empty: true,
                 write_converters: nil,
                 write_nil_value: nil,
                 write_empty_value: "")
    raise ArgumentError.new("Cannot parse nil as CSV") if data.nil?

    if data.is_a?(String)
      if encoding
        if encoding.is_a?(String)
          data_external_encoding, data_internal_encoding = encoding.split(":", 2)
          if data_internal_encoding
            data = data.encode(data_internal_encoding, data_external_encoding)
          else
            data = data.dup.force_encoding(data_external_encoding)
          end
        else
          data = data.dup.force_encoding(encoding)
        end
      end
      @io = StringIO.new(data)
    else
      @io = data
    end
    @encoding = determine_encoding(encoding, internal_encoding)

    @base_fields_converter_options = {
      nil_value: nil_value,
      empty_value: empty_value,
    }
    @write_fields_converter_options = {
      nil_value: write_nil_value,
      empty_value: write_empty_value,
    }
    @initial_converters = converters
    @initial_header_converters = header_converters
    @initial_write_converters = write_converters

    if max_field_size.nil? and field_size_limit
      max_field_size = field_size_limit - 1
    end
    @parser_options = {
      column_separator: col_sep,
      row_separator: row_sep,
      quote_character: quote_char,
      max_field_size: max_field_size,
      unconverted_fields: unconverted_fields,
      headers: headers,
      return_headers: return_headers,
      skip_blanks: skip_blanks,
      skip_lines: skip_lines,
      liberal_parsing: liberal_parsing,
      encoding: @encoding,
      nil_value: nil_value,
      empty_value: empty_value,
      strip: strip,
    }
    @parser = nil
    @parser_enumerator = nil
    @eof_error = nil

    @writer_options = {
      encoding: @encoding,
      force_encoding: (not encoding.nil?),
      force_quotes: force_quotes,
      headers: headers,
      write_headers: write_headers,
      column_separator: col_sep,
      row_separator: row_sep,
      quote_character: quote_char,
      quote_empty: quote_empty,
    }

    @writer = nil
    writer if @writer_options[:write_headers]
  end

  class TSV < CSV
    def initialize(data, **options)
      super(data, **({col_sep: "\t"}.merge(options)))
    end
  end

  # :call-seq:
  #   csv.col_sep -> string
  #
  # Returns the encoded column separator; used for parsing and writing;
  # see {Option +col_sep+}[#class-CSV-label-Option+col_sep]:
  #   CSV.new('').col_sep # => ","
  def col_sep
    parser.column_separator
  end

  # :call-seq:
  #   csv.row_sep -> string
  #
  # Returns the encoded row separator; used for parsing and writing;
  # see {Option +row_sep+}[#class-CSV-label-Option+row_sep]:
  #   CSV.new('').row_sep # => "\n"
  def row_sep
    parser.row_separator
  end

  # :call-seq:
  #   csv.quote_char -> character
  #
  # Returns the encoded quote character; used for parsing and writing;
  # see {Option +quote_char+}[#class-CSV-label-Option+quote_char]:
  #   CSV.new('').quote_char # => "\""
  def quote_char
    parser.quote_character
  end

  # :call-seq:
  #   csv.field_size_limit -> integer or nil
  #
  # Returns the limit for field size; used for parsing;
  # see {Option +field_size_limit+}[#class-CSV-label-Option+field_size_limit]:
  #   CSV.new('').field_size_limit # => nil
  #
  # Deprecated since 3.2.3. Use +max_field_size+ instead.
  def field_size_limit
    parser.field_size_limit
  end

  # :call-seq:
  #   csv.max_field_size -> integer or nil
  #
  # Returns the limit for field size; used for parsing;
  # see {Option +max_field_size+}[#class-CSV-label-Option+max_field_size]:
  #   CSV.new('').max_field_size # => nil
  #
  # Since 3.2.3.
  def max_field_size
    parser.max_field_size
  end

  # :call-seq:
  #   csv.skip_lines -> regexp or nil
  #
  # Returns the \Regexp used to identify comment lines; used for parsing;
  # see {Option +skip_lines+}[#class-CSV-label-Option+skip_lines]:
  #   CSV.new('').skip_lines # => nil
  def skip_lines
    parser.skip_lines
  end

  # :call-seq:
  #   csv.converters -> array
  #
  # Returns an \Array containing field converters;
  # see {Field Converters}[#class-CSV-label-Field+Converters]:
  #   csv = CSV.new('')
  #   csv.converters # => []
  #   csv.convert(:integer)
  #   csv.converters # => [:integer]
  #   csv.convert(proc {|x| x.to_s })
  #   csv.converters
  #
  # Notes that you need to call
  # +Ractor.make_shareable(CSV::Converters)+ on the main Ractor to use
  # this method.
  def converters
    parser_fields_converter.map do |converter|
      name = Converters.rassoc(converter)
      name ? name.first : converter
    end
  end

  # :call-seq:
  #   csv.unconverted_fields? -> object
  #
  # Returns the value that determines whether unconverted fields are to be
  # available; used for parsing;
  # see {Option +unconverted_fields+}[#class-CSV-label-Option+unconverted_fields]:
  #   CSV.new('').unconverted_fields? # => nil
  def unconverted_fields?
    parser.unconverted_fields?
  end

  # :call-seq:
  #   csv.headers -> object
  #
  # Returns the value that determines whether headers are used; used for parsing;
  # see {Option +headers+}[#class-CSV-label-Option+headers]:
  #   CSV.new('').headers # => nil
  def headers
    if @writer
      @writer.headers
    else
      parsed_headers = parser.headers
      return parsed_headers if parsed_headers
      raw_headers = @parser_options[:headers]
      raw_headers = nil if raw_headers == false
      raw_headers
    end
  end

  # :call-seq:
  #   csv.return_headers? -> true or false
  #
  # Returns the value that determines whether headers are to be returned; used for parsing;
  # see {Option +return_headers+}[#class-CSV-label-Option+return_headers]:
  #   CSV.new('').return_headers? # => false
  def return_headers?
    parser.return_headers?
  end

  # :call-seq:
  #   csv.write_headers? -> true or false
  #
  # Returns the value that determines whether headers are to be written; used for generating;
  # see {Option +write_headers+}[#class-CSV-label-Option+write_headers]:
  #   CSV.new('').write_headers? # => nil
  def write_headers?
    @writer_options[:write_headers]
  end

  # :call-seq:
  #   csv.header_converters -> array
  #
  # Returns an \Array containing header converters; used for parsing;
  # see {Header Converters}[#class-CSV-label-Header+Converters]:
  #   CSV.new('').header_converters # => []
  #
  # Notes that you need to call
  # +Ractor.make_shareable(CSV::HeaderConverters)+ on the main Ractor
  # to use this method.
  def header_converters
    header_fields_converter.map do |converter|
      name = HeaderConverters.rassoc(converter)
      name ? name.first : converter
    end
  end

  # :call-seq:
  #   csv.skip_blanks? -> true or false
  #
  # Returns the value that determines whether blank lines are to be ignored; used for parsing;
  # see {Option +skip_blanks+}[#class-CSV-label-Option+skip_blanks]:
  #   CSV.new('').skip_blanks? # => false
  def skip_blanks?
    parser.skip_blanks?
  end

  # :call-seq:
  #   csv.force_quotes? -> true or false
  #
  # Returns the value that determines whether all output fields are to be quoted;
  # used for generating;
  # see {Option +force_quotes+}[#class-CSV-label-Option+force_quotes]:
  #   CSV.new('').force_quotes? # => false
  def force_quotes?
    @writer_options[:force_quotes]
  end

  # :call-seq:
  #   csv.liberal_parsing? -> true or false
  #
  # Returns the value that determines whether illegal input is to be handled; used for parsing;
  # see {Option +liberal_parsing+}[#class-CSV-label-Option+liberal_parsing]:
  #   CSV.new('').liberal_parsing? # => false
  def liberal_parsing?
    parser.liberal_parsing?
  end

  # :call-seq:
  #   csv.encoding -> encoding
  #
  # Returns the encoding used for parsing and generating;
  # see {Character Encodings (M17n or Multilingualization)}[#class-CSV-label-Character+Encodings+-28M17n+or+Multilingualization-29]:
  #   CSV.new('').encoding # => #<Encoding:UTF-8>
  attr_reader :encoding

  # :call-seq:
  #   csv.line_no -> integer
  #
  # Returns the count of the rows parsed or generated.
  #
  # Parsing:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   path = 't.csv'
  #   File.write(path, string)
  #   CSV.open(path) do |csv|
  #     csv.each do |row|
  #       p [csv.lineno, row]
  #     end
  #   end
  # Output:
  #   [1, ["foo", "0"]]
  #   [2, ["bar", "1"]]
  #   [3, ["baz", "2"]]
  #
  # Generating:
  #   CSV.generate do |csv|
  #     p csv.lineno; csv << ['foo', 0]
  #     p csv.lineno; csv << ['bar', 1]
  #     p csv.lineno; csv << ['baz', 2]
  #   end
  # Output:
  #   0
  #   1
  #   2
  def lineno
    if @writer
      @writer.lineno
    else
      parser.lineno
    end
  end

  # :call-seq:
  #   csv.line -> array
  #
  # Returns the line most recently read:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   path = 't.csv'
  #   File.write(path, string)
  #   CSV.open(path) do |csv|
  #     csv.each do |row|
  #       p [csv.lineno, csv.line]
  #     end
  #   end
  # Output:
  #   [1, "foo,0\n"]
  #   [2, "bar,1\n"]
  #   [3, "baz,2\n"]
  def line
    parser.line
  end

  ### IO and StringIO Delegation ###

  extend Forwardable
  def_delegators :@io, :binmode, :close, :close_read, :close_write,
                       :closed?, :external_encoding, :fcntl,
                       :fileno, :flush, :fsync, :internal_encoding,
                       :isatty, :pid, :pos, :pos=, :reopen,
                       :seek, :string, :sync, :sync=, :tell,
                       :truncate, :tty?

  def binmode?
    if @io.respond_to?(:binmode?)
      @io.binmode?
    else
      false
    end
  end

  def flock(*args)
    raise NotImplementedError unless @io.respond_to?(:flock)
    @io.flock(*args)
  end

  def ioctl(*args)
    raise NotImplementedError unless @io.respond_to?(:ioctl)
    @io.ioctl(*args)
  end

  def path
    @io.path if @io.respond_to?(:path)
  end

  def stat(*args)
    raise NotImplementedError unless @io.respond_to?(:stat)
    @io.stat(*args)
  end

  def to_i
    raise NotImplementedError unless @io.respond_to?(:to_i)
    @io.to_i
  end

  def to_io
    @io.respond_to?(:to_io) ? @io.to_io : @io
  end

  def eof?
    return false if @eof_error
    begin
      parser_enumerator.peek
      false
    rescue MalformedCSVError => error
      @eof_error = error
      false
    rescue StopIteration
      true
    end
  end
  alias_method :eof, :eof?

  # Rewinds the underlying IO object and resets CSV's lineno() counter.
  def rewind
    @parser = nil
    @parser_enumerator = nil
    @eof_error = nil
    @writer.rewind if @writer
    @io.rewind
  end

  ### End Delegation ###

  # :call-seq:
  #   csv << row -> self
  #
  # Appends a row to +self+.
  #
  # - Argument +row+ must be an \Array object or a CSV::Row object.
  # - The output stream must be open for writing.
  #
  # ---
  #
  # Append Arrays:
  #   CSV.generate do |csv|
  #     csv << ['foo', 0]
  #     csv << ['bar', 1]
  #     csv << ['baz', 2]
  #   end # => "foo,0\nbar,1\nbaz,2\n"
  #
  # Append CSV::Rows:
  #   headers = []
  #   CSV.generate do |csv|
  #     csv << CSV::Row.new(headers, ['foo', 0])
  #     csv << CSV::Row.new(headers, ['bar', 1])
  #     csv << CSV::Row.new(headers, ['baz', 2])
  #   end # => "foo,0\nbar,1\nbaz,2\n"
  #
  # Headers in CSV::Row objects are not appended:
  #   headers = ['Name', 'Count']
  #   CSV.generate do |csv|
  #     csv << CSV::Row.new(headers, ['foo', 0])
  #     csv << CSV::Row.new(headers, ['bar', 1])
  #     csv << CSV::Row.new(headers, ['baz', 2])
  #   end # => "foo,0\nbar,1\nbaz,2\n"
  #
  # ---
  #
  # Raises an exception if +row+ is not an \Array or \CSV::Row:
  #   CSV.generate do |csv|
  #     # Raises NoMethodError (undefined method `collect' for :foo:Symbol)
  #     csv << :foo
  #   end
  #
  # Raises an exception if the output stream is not opened for writing:
  #   path = 't.csv'
  #   File.write(path, '')
  #   File.open(path) do |file|
  #     CSV.open(file) do |csv|
  #       # Raises IOError (not opened for writing)
  #       csv << ['foo', 0]
  #     end
  #   end
  def <<(row)
    writer << row
    self
  end
  alias_method :add_row, :<<
  alias_method :puts,    :<<

  # :call-seq:
  #   convert(converter_name) -> array_of_procs
  #   convert {|field, field_info| ... } -> array_of_procs
  #
  # - With no block, installs a field converter (a \Proc).
  # - With a block, defines and installs a custom field converter.
  # - Returns the \Array of installed field converters.
  #
  # - Argument +converter_name+, if given, should be the name
  #   of an existing field converter.
  #
  # See {Field Converters}[#class-CSV-label-Field+Converters].
  # ---
  #
  # With no block, installs a field converter:
  #   csv = CSV.new('')
  #   csv.convert(:integer)
  #   csv.convert(:float)
  #   csv.convert(:date)
  #   csv.converters # => [:integer, :float, :date]
  #
  # ---
  #
  # The block, if given, is called for each field:
  # - Argument +field+ is the field value.
  # - Argument +field_info+ is a CSV::FieldInfo object
  #   containing details about the field.
  #
  # The examples here assume the prior execution of:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   path = 't.csv'
  #   File.write(path, string)
  #
  # Example giving a block:
  #   csv = CSV.open(path)
  #   csv.convert {|field, field_info| p [field, field_info]; field.upcase }
  #   csv.read # => [["FOO", "0"], ["BAR", "1"], ["BAZ", "2"]]
  #
  # Output:
  #   ["foo", #<struct CSV::FieldInfo index=0, line=1, header=nil>]
  #   ["0", #<struct CSV::FieldInfo index=1, line=1, header=nil>]
  #   ["bar", #<struct CSV::FieldInfo index=0, line=2, header=nil>]
  #   ["1", #<struct CSV::FieldInfo index=1, line=2, header=nil>]
  #   ["baz", #<struct CSV::FieldInfo index=0, line=3, header=nil>]
  #   ["2", #<struct CSV::FieldInfo index=1, line=3, header=nil>]
  #
  # The block need not return a \String object:
  #   csv = CSV.open(path)
  #   csv.convert {|field, field_info| field.to_sym }
  #   csv.read # => [[:foo, :"0"], [:bar, :"1"], [:baz, :"2"]]
  #
  # If +converter_name+ is given, the block is not called:
  #   csv = CSV.open(path)
  #   csv.convert(:integer) {|field, field_info| fail 'Cannot happen' }
  #   csv.read # => [["foo", 0], ["bar", 1], ["baz", 2]]
  #
  # ---
  #
  # Raises a parse-time exception if +converter_name+ is not the name of a built-in
  # field converter:
  #   csv = CSV.open(path)
  #   csv.convert(:nosuch) => [nil]
  #   # Raises NoMethodError (undefined method `arity' for nil:NilClass)
  #   csv.read
  def convert(name = nil, &converter)
    parser_fields_converter.add_converter(name, &converter)
  end

  # :call-seq:
  #   header_convert(converter_name) -> array_of_procs
  #   header_convert {|header, field_info| ... } -> array_of_procs
  #
  # - With no block, installs a header converter (a \Proc).
  # - With a block, defines and installs a custom header converter.
  # - Returns the \Array of installed header converters.
  #
  # - Argument +converter_name+, if given, should be the name
  #   of an existing header converter.
  #
  # See {Header Converters}[#class-CSV-label-Header+Converters].
  # ---
  #
  # With no block, installs a header converter:
  #   csv = CSV.new('')
  #   csv.header_convert(:symbol)
  #   csv.header_convert(:downcase)
  #   csv.header_converters # => [:symbol, :downcase]
  #
  # ---
  #
  # The block, if given, is called for each header:
  # - Argument +header+ is the header value.
  # - Argument +field_info+ is a CSV::FieldInfo object
  #   containing details about the header.
  #
  # The examples here assume the prior execution of:
  #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   path = 't.csv'
  #   File.write(path, string)
  #
  # Example giving a block:
  #   csv = CSV.open(path, headers: true)
  #   csv.header_convert {|header, field_info| p [header, field_info]; header.upcase }
  #   table = csv.read
  #   table # => #<CSV::Table mode:col_or_row row_count:4>
  #   table.headers # => ["NAME", "VALUE"]
  #
  # Output:
  #   ["Name", #<struct CSV::FieldInfo index=0, line=1, header=nil>]
  #   ["Value", #<struct CSV::FieldInfo index=1, line=1, header=nil>]

  # The block need not return a \String object:
  #   csv = CSV.open(path, headers: true)
  #   csv.header_convert {|header, field_info| header.to_sym }
  #   table = csv.read
  #   table.headers # => [:Name, :Value]
  #
  # If +converter_name+ is given, the block is not called:
  #   csv = CSV.open(path, headers: true)
  #   csv.header_convert(:downcase) {|header, field_info| fail 'Cannot happen' }
  #   table = csv.read
  #   table.headers # => ["name", "value"]
  # ---
  #
  # Raises a parse-time exception if +converter_name+ is not the name of a built-in
  # field converter:
  #   csv = CSV.open(path, headers: true)
  #   csv.header_convert(:nosuch)
  #   # Raises NoMethodError (undefined method `arity' for nil:NilClass)
  #   csv.read
  def header_convert(name = nil, &converter)
    header_fields_converter.add_converter(name, &converter)
  end

  include Enumerable

  # :call-seq:
  #   csv.each -> enumerator
  #   csv.each {|row| ...}
  #
  # Calls the block with each successive row.
  # The data source must be opened for reading.
  #
  # Without headers:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string)
  #   csv.each do |row|
  #     p row
  #   end
  # Output:
  #   ["foo", "0"]
  #   ["bar", "1"]
  #   ["baz", "2"]
  #
  # With headers:
  #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string, headers: true)
  #   csv.each do |row|
  #     p row
  #   end
  # Output:
  #   <CSV::Row "Name":"foo" "Value":"0">
  #   <CSV::Row "Name":"bar" "Value":"1">
  #   <CSV::Row "Name":"baz" "Value":"2">
  #
  # ---
  #
  # Raises an exception if the source is not opened for reading:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string)
  #   csv.close
  #   # Raises IOError (not opened for reading)
  #   csv.each do |row|
  #     p row
  #   end
  def each(&block)
    return to_enum(__method__) unless block_given?
    begin
      while true
        yield(parser_enumerator.next)
      end
    rescue StopIteration
    end
  end

  # :call-seq:
  #   csv.read -> array or csv_table
  #
  # Forms the remaining rows from +self+ into:
  # - A CSV::Table object, if headers are in use.
  # - An \Array of Arrays, otherwise.
  #
  # The data source must be opened for reading.
  #
  # Without headers:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   path = 't.csv'
  #   File.write(path, string)
  #   csv = CSV.open(path)
  #   csv.read # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]
  #
  # With headers:
  #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   path = 't.csv'
  #   File.write(path, string)
  #   csv = CSV.open(path, headers: true)
  #   csv.read # => #<CSV::Table mode:col_or_row row_count:4>
  #
  # ---
  #
  # Raises an exception if the source is not opened for reading:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string)
  #   csv.close
  #   # Raises IOError (not opened for reading)
  #   csv.read
  def read
    rows = to_a
    if parser.use_headers?
      Table.new(rows, headers: parser.headers)
    else
      rows
    end
  end
  alias_method :readlines, :read

  # :call-seq:
  #   csv.header_row? -> true or false
  #
  # Returns +true+ if the next row to be read is a header row\;
  # +false+ otherwise.
  #
  # Without headers:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string)
  #   csv.header_row? # => false
  #
  # With headers:
  #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string, headers: true)
  #   csv.header_row? # => true
  #   csv.shift # => #<CSV::Row "Name":"foo" "Value":"0">
  #   csv.header_row? # => false
  #
  # ---
  #
  # Raises an exception if the source is not opened for reading:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string)
  #   csv.close
  #   # Raises IOError (not opened for reading)
  #   csv.header_row?
  def header_row?
    parser.header_row?
  end

  # :call-seq:
  #   csv.shift -> array, csv_row, or nil
  #
  # Returns the next row of data as:
  # - An \Array if no headers are used.
  # - A CSV::Row object if headers are used.
  #
  # The data source must be opened for reading.
  #
  # Without headers:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string)
  #   csv.shift # => ["foo", "0"]
  #   csv.shift # => ["bar", "1"]
  #   csv.shift # => ["baz", "2"]
  #   csv.shift # => nil
  #
  # With headers:
  #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string, headers: true)
  #   csv.shift # => #<CSV::Row "Name":"foo" "Value":"0">
  #   csv.shift # => #<CSV::Row "Name":"bar" "Value":"1">
  #   csv.shift # => #<CSV::Row "Name":"baz" "Value":"2">
  #   csv.shift # => nil
  #
  # ---
  #
  # Raises an exception if the source is not opened for reading:
  #   string = "foo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string)
  #   csv.close
  #   # Raises IOError (not opened for reading)
  #   csv.shift
  def shift
    if @eof_error
      eof_error, @eof_error = @eof_error, nil
      raise eof_error
    end
    begin
      parser_enumerator.next
    rescue StopIteration
      nil
    end
  end
  alias_method :gets,     :shift
  alias_method :readline, :shift

  # :call-seq:
  #   csv.inspect -> string
  #
  # Returns a \String showing certain properties of +self+:
  #   string = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
  #   csv = CSV.new(string, headers: true)
  #   s = csv.inspect
  #   s # => "#<CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:\",\" row_sep:\"\\n\" quote_char:\"\\\"\" headers:true>"
  def inspect
    str = ["#<", self.class.to_s, " io_type:"]
    # show type of wrapped IO
    if    @io == $stdout then str << "$stdout"
    elsif @io == $stdin  then str << "$stdin"
    elsif @io == $stderr then str << "$stderr"
    else                      str << @io.class.to_s
    end
    # show IO.path(), if available
    if @io.respond_to?(:path) and (p = @io.path)
      str << " io_path:" << p.inspect
    end
    # show encoding
    str << " encoding:" << @encoding.name
    # show other attributes
    ["lineno", "col_sep", "row_sep", "quote_char"].each do |attr_name|
      if a = __send__(attr_name)
        str << " " << attr_name << ":" << a.inspect
      end
    end
    ["skip_blanks", "liberal_parsing"].each do |attr_name|
      if a = __send__("#{attr_name}?")
        str << " " << attr_name << ":" << a.inspect
      end
    end
    _headers = headers
    str << " headers:" << _headers.inspect if _headers
    str << ">"
    begin
      str.join('')
    rescue  # any encoding error
      str.map do |s|
        e = Encoding::Converter.asciicompat_encoding(s.encoding)
        e ? s.encode(e) : s.force_encoding("ASCII-8BIT")
      end.join('')
    end
  end

  private

  def determine_encoding(encoding, internal_encoding)
    # honor the IO encoding if we can, otherwise default to ASCII-8BIT
    io_encoding = raw_encoding
    return io_encoding if io_encoding

    return Encoding.find(internal_encoding) if internal_encoding

    if encoding
      encoding, = encoding.split(":", 2) if encoding.is_a?(String)
      return Encoding.find(encoding)
    end

    Encoding.default_internal || Encoding.default_external
  end

  def normalize_converters(converters)
    converters ||= []
    unless converters.is_a?(Array)
      converters = [converters]
    end
    converters.collect do |converter|
      case converter
      when Proc # custom code block
        [nil, converter]
      else # by name
        [converter, nil]
      end
    end
  end

  #
  # Processes +fields+ with <tt>@converters</tt>, or <tt>@header_converters</tt>
  # if +headers+ is passed as +true+, returning the converted field set. Any
  # converter that changes the field into something other than a String halts
  # the pipeline of conversion for that field. This is primarily an efficiency
  # shortcut.
  #
  def convert_fields(fields, headers = false)
    if headers
      header_fields_converter.convert(fields, nil, 0)
    else
      parser_fields_converter.convert(fields, @headers, lineno)
    end
  end

  #
  # Returns the encoding of the internal IO object.
  #
  def raw_encoding
    if @io.respond_to? :internal_encoding
      @io.internal_encoding || @io.external_encoding
    elsif @io.respond_to? :encoding
      @io.encoding
    else
      nil
    end
  end

  def parser_fields_converter
    @parser_fields_converter ||= build_parser_fields_converter
  end

  def build_parser_fields_converter
    specific_options = {
      builtin_converters_name: :Converters,
    }
    options = @base_fields_converter_options.merge(specific_options)
    build_fields_converter(@initial_converters, options)
  end

  def header_fields_converter
    @header_fields_converter ||= build_header_fields_converter
  end

  def build_header_fields_converter
    specific_options = {
      builtin_converters_name: :HeaderConverters,
      accept_nil: true,
    }
    options = @base_fields_converter_options.merge(specific_options)
    build_fields_converter(@initial_header_converters, options)
  end

  def writer_fields_converter
    @writer_fields_converter ||= build_writer_fields_converter
  end

  def build_writer_fields_converter
    build_fields_converter(@initial_write_converters,
                           @write_fields_converter_options)
  end

  def build_fields_converter(initial_converters, options)
    fields_converter = FieldsConverter.new(options)
    normalize_converters(initial_converters).each do |name, converter|
      fields_converter.add_converter(name, &converter)
    end
    fields_converter
  end

  def parser
    @parser ||= Parser.new(@io, parser_options)
  end

  def parser_options
    @parser_options.merge(header_fields_converter: header_fields_converter,
                          fields_converter: parser_fields_converter)
  end

  def parser_enumerator
    @parser_enumerator ||= parser.parse
  end

  def writer
    @writer ||= Writer.new(@io, writer_options)
  end

  def writer_options
    @writer_options.merge(header_fields_converter: header_fields_converter,
                          fields_converter: writer_fields_converter)
  end
end

# Passes +args+ to CSV::instance.
#
#   CSV("CSV,data").read
#     #=> [["CSV", "data"]]
#
# If a block is given, the instance is passed the block and the return value
# becomes the return value of the block.
#
#   CSV("CSV,data") { |c|
#     c.read.any? { |a| a.include?("data") }
#   } #=> true
#
#   CSV("CSV,data") { |c|
#     c.read.any? { |a| a.include?("zombies") }
#   } #=> false
#
# CSV options may also be given.
#
#   io = StringIO.new
#   CSV(io, col_sep: ";") { |csv| csv << ["a", "b", "c"] }
#
# This API is not Ractor-safe.
#
def CSV(*args, **options, &block)
  CSV.instance(*args, **options, &block)
end

require_relative "csv/version"
require_relative "csv/core_ext/array"
require_relative "csv/core_ext/string"
PK)J[w�srr%share/gems/gems/csv-3.3.2/LICENSE.txtnu�[���Copyright (C) 2005-2016 James Edward Gray II. All rights reserved.
Copyright (C) 2007-2017 Yukihiro Matsumoto. All rights reserved.
Copyright (C) 2017 SHIBATA Hiroshi. All rights reserved.
Copyright (C) 2017 Olivier Lacan. All rights reserved.
Copyright (C) 2017 Espartaco Palma. All rights reserved.
Copyright (C) 2017 Marcus Stollsteimer. All rights reserved.
Copyright (C) 2017 pavel. All rights reserved.
Copyright (C) 2017-2018 Steven Daniels. All rights reserved.
Copyright (C) 2018 Tomohiro Ogoke. All rights reserved.
Copyright (C) 2018 Kouhei Sutou. All rights reserved.
Copyright (C) 2018 Mitsutaka Mimura. All rights reserved.
Copyright (C) 2018 Vladislav. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
PK)J[���	�	(share/gems/gems/bigdecimal-3.1.8/LICENSEnu�[���Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
You can redistribute it and/or modify it under either the terms of the
2-clause BSDL (see the file BSDL), or the conditions below:

  1. You may make and give away verbatim copies of the source form of the
     software without restriction, provided that you duplicate all of the
     original copyright notices and associated disclaimers.

  2. You may modify your copy of the software in any way, provided that
     you do at least ONE of the following:

       a) place your modifications in the Public Domain or otherwise
          make them Freely Available, such as by posting said
	  modifications to Usenet or an equivalent medium, or by allowing
	  the author to include your modifications in the software.

       b) use the modified software only within your corporation or
          organization.

       c) give non-standard binaries non-standard names, with
          instructions on where to get the original software distribution.

       d) make other distribution arrangements with the author.

  3. You may distribute the software in object code or binary form,
     provided that you do at least ONE of the following:

       a) distribute the binaries and library files of the software,
	  together with instructions (in the manual page or equivalent)
	  on where to get the original distribution.

       b) accompany the distribution with the machine-readable source of
	  the software.

       c) give non-standard binaries non-standard names, with
          instructions on where to get the original software distribution.

       d) make other distribution arrangements with the author.

  4. You may modify and include the part of the software into any other
     software (possibly commercial).  But some files in the distribution
     are not written by the author, so that they are not under these terms.

     For the list of those files and their copying conditions, see the
     file LEGAL.

  5. The scripts and library files supplied as input to or produced as 
     output from the software do not automatically fall under the
     copyright of the software, but belong to whomever generated them, 
     and may be sold commercially, and may be aggregated with this
     software.

  6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
     IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     PURPOSE.
PK)J[�uS���2share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal.rbnu�[���if RUBY_ENGINE == 'jruby'
  JRuby::Util.load_ext("org.jruby.ext.bigdecimal.BigDecimalLibrary")
else
  require 'bigdecimal.so'
end
PK)J[�Jmqq;share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/jacobian.rbnu�[���# frozen_string_literal: false

require 'bigdecimal'

# require 'bigdecimal/jacobian'
#
# Provides methods to compute the Jacobian matrix of a set of equations at a
# point x. In the methods below:
#
# f is an Object which is used to compute the Jacobian matrix of the equations.
# It must provide the following methods:
#
# f.values(x):: returns the values of all functions at x
#
# f.zero:: returns 0.0
# f.one:: returns 1.0
# f.two:: returns 2.0
# f.ten:: returns 10.0
#
# f.eps:: returns the convergence criterion (epsilon value) used to determine whether two values are considered equal. If |a-b| < epsilon, the two values are considered equal.
#
# x is the point at which to compute the Jacobian.
#
# fx is f.values(x).
#
module Jacobian
  module_function

  # Determines the equality of two numbers by comparing to zero, or using the epsilon value
  def isEqual(a,b,zero=0.0,e=1.0e-8)
    aa = a.abs
    bb = b.abs
    if aa == zero &&  bb == zero then
      true
    else
      if ((a-b)/(aa+bb)).abs < e then
        true
      else
        false
      end
    end
  end


  # Computes the derivative of +f[i]+ at +x[i]+.
  # +fx+ is the value of +f+ at +x+.
  def dfdxi(f,fx,x,i)
    nRetry = 0
    n = x.size
    xSave = x[i]
    ok = 0
    ratio = f.ten*f.ten*f.ten
    dx = x[i].abs/ratio
    dx = fx[i].abs/ratio if isEqual(dx,f.zero,f.zero,f.eps)
    dx = f.one/f.ten     if isEqual(dx,f.zero,f.zero,f.eps)
    until ok>0 do
      deriv = []
      nRetry += 1
      if nRetry > 100
        raise "Singular Jacobian matrix. No change at x[" + i.to_s + "]"
      end
      dx = dx*f.two
      x[i] += dx
      fxNew = f.values(x)
      for j in 0...n do
        if !isEqual(fxNew[j],fx[j],f.zero,f.eps) then
          ok += 1
          deriv <<= (fxNew[j]-fx[j])/dx
        else
          deriv <<= f.zero
        end
      end
      x[i] = xSave
    end
    deriv
  end

  # Computes the Jacobian of +f+ at +x+. +fx+ is the value of +f+ at +x+.
  def jacobian(f,fx,x)
    n = x.size
    dfdx = Array.new(n*n)
    for i in 0...n do
      df = dfdxi(f,fx,x,i)
      for j in 0...n do
        dfdx[j*n+i] = df[j]
      end
    end
    dfdx
  end
end
PK)J[�,���7share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/math.rbnu�[���# frozen_string_literal: false
require 'bigdecimal'

#
#--
# Contents:
#   sqrt(x, prec)
#   sin (x, prec)
#   cos (x, prec)
#   atan(x, prec)  Note: |x|<1, x=0.9999 may not converge.
#   PI  (prec)
#   E   (prec) == exp(1.0,prec)
#
# where:
#   x    ... BigDecimal number to be computed.
#            |x| must be small enough to get convergence.
#   prec ... Number of digits to be obtained.
#++
#
# Provides mathematical functions.
#
# Example:
#
#   require "bigdecimal/math"
#
#   include BigMath
#
#   a = BigDecimal((PI(100)/2).to_s)
#   puts sin(a,100) # => 0.99999999999999999999......e0
#
module BigMath
  module_function

  # call-seq:
  #   sqrt(decimal, numeric) -> BigDecimal
  #
  # Computes the square root of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  #   BigMath.sqrt(BigDecimal('2'), 16).to_s
  #   #=> "0.1414213562373095048801688724e1"
  #
  def sqrt(x, prec)
    x.sqrt(prec)
  end

  # call-seq:
  #   sin(decimal, numeric) -> BigDecimal
  #
  # Computes the sine of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  # If +decimal+ is Infinity or NaN, returns NaN.
  #
  #   BigMath.sin(BigMath.PI(5)/4, 5).to_s
  #   #=> "0.70710678118654752440082036563292800375e0"
  #
  def sin(x, prec)
    raise ArgumentError, "Zero or negative precision for sin" if prec <= 0
    return BigDecimal("NaN") if x.infinite? || x.nan?
    n    = prec + BigDecimal.double_fig
    one  = BigDecimal("1")
    two  = BigDecimal("2")
    x = -x if neg = x < 0
    if x > (twopi = two * BigMath.PI(prec))
      if x > 30
        x %= twopi
      else
        x -= twopi while x > twopi
      end
    end
    x1   = x
    x2   = x.mult(x,n)
    sign = 1
    y    = x
    d    = y
    i    = one
    z    = one
    while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      sign = -sign
      x1  = x2.mult(x1,n)
      i  += two
      z  *= (i-one) * i
      d   = sign * x1.div(z,m)
      y  += d
    end
    neg ? -y : y
  end

  # call-seq:
  #   cos(decimal, numeric) -> BigDecimal
  #
  # Computes the cosine of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  # If +decimal+ is Infinity or NaN, returns NaN.
  #
  #   BigMath.cos(BigMath.PI(4), 16).to_s
  #   #=> "-0.999999999999999999999999999999856613163740061349e0"
  #
  def cos(x, prec)
    raise ArgumentError, "Zero or negative precision for cos" if prec <= 0
    return BigDecimal("NaN") if x.infinite? || x.nan?
    n    = prec + BigDecimal.double_fig
    one  = BigDecimal("1")
    two  = BigDecimal("2")
    x = -x if x < 0
    if x > (twopi = two * BigMath.PI(prec))
      if x > 30
        x %= twopi
      else
        x -= twopi while x > twopi
      end
    end
    x1 = one
    x2 = x.mult(x,n)
    sign = 1
    y = one
    d = y
    i = BigDecimal("0")
    z = one
    while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      sign = -sign
      x1  = x2.mult(x1,n)
      i  += two
      z  *= (i-one) * i
      d   = sign * x1.div(z,m)
      y  += d
    end
    y
  end

  # call-seq:
  #   atan(decimal, numeric) -> BigDecimal
  #
  # Computes the arctangent of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  # If +decimal+ is NaN, returns NaN.
  #
  #   BigMath.atan(BigDecimal('-1'), 16).to_s
  #   #=> "-0.785398163397448309615660845819878471907514682065e0"
  #
  def atan(x, prec)
    raise ArgumentError, "Zero or negative precision for atan" if prec <= 0
    return BigDecimal("NaN") if x.nan?
    pi = PI(prec)
    x = -x if neg = x < 0
    return pi.div(neg ? -2 : 2, prec) if x.infinite?
    return pi / (neg ? -4 : 4) if x.round(prec) == 1
    x = BigDecimal("1").div(x, prec) if inv = x > 1
    x = (-1 + sqrt(1 + x**2, prec))/x if dbl = x > 0.5
    n    = prec + BigDecimal.double_fig
    y = x
    d = y
    t = x
    r = BigDecimal("3")
    x2 = x.mult(x,n)
    while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      t = -t.mult(x2,n)
      d = t.div(r,m)
      y += d
      r += 2
    end
    y *= 2 if dbl
    y = pi / 2 - y if inv
    y = -y if neg
    y
  end

  # call-seq:
  #   PI(numeric) -> BigDecimal
  #
  # Computes the value of pi to the specified number of digits of precision,
  # +numeric+.
  #
  #   BigMath.PI(10).to_s
  #   #=> "0.3141592653589793238462643388813853786957412e1"
  #
  def PI(prec)
    raise ArgumentError, "Zero or negative precision for PI" if prec <= 0
    n      = prec + BigDecimal.double_fig
    zero   = BigDecimal("0")
    one    = BigDecimal("1")
    two    = BigDecimal("2")

    m25    = BigDecimal("-0.04")
    m57121 = BigDecimal("-57121")

    pi     = zero

    d = one
    k = one
    t = BigDecimal("-80")
    while d.nonzero? && ((m = n - (pi.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      t   = t*m25
      d   = t.div(k,m)
      k   = k+two
      pi  = pi + d
    end

    d = one
    k = one
    t = BigDecimal("956")
    while d.nonzero? && ((m = n - (pi.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      t   = t.div(m57121,n)
      d   = t.div(k,m)
      pi  = pi + d
      k   = k+two
    end
    pi
  end

  # call-seq:
  #   E(numeric) -> BigDecimal
  #
  # Computes e (the base of natural logarithms) to the specified number of
  # digits of precision, +numeric+.
  #
  #   BigMath.E(10).to_s
  #   #=> "0.271828182845904523536028752390026306410273e1"
  #
  def E(prec)
    raise ArgumentError, "Zero or negative precision for E" if prec <= 0
    BigMath.exp(1, prec)
  end
end
PK)J[ь��9share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/ludcmp.rbnu�[���# frozen_string_literal: false
require 'bigdecimal'

#
# Solves a*x = b for x, using LU decomposition.
#
module LUSolve
  module_function

  # Performs LU decomposition of the n by n matrix a.
  def ludecomp(a,n,zero=0,one=1)
    prec = BigDecimal.limit(nil)
    ps     = []
    scales = []
    for i in 0...n do  # pick up largest(abs. val.) element in each row.
      ps <<= i
      nrmrow  = zero
      ixn = i*n
      for j in 0...n do
        biggst = a[ixn+j].abs
        nrmrow = biggst if biggst>nrmrow
      end
      if nrmrow>zero then
        scales <<= one.div(nrmrow,prec)
      else
        raise "Singular matrix"
      end
    end
    n1          = n - 1
    for k in 0...n1 do # Gaussian elimination with partial pivoting.
      biggst  = zero;
      for i in k...n do
        size = a[ps[i]*n+k].abs*scales[ps[i]]
        if size>biggst then
          biggst = size
          pividx  = i
        end
      end
      raise "Singular matrix" if biggst<=zero
      if pividx!=k then
        j = ps[k]
        ps[k] = ps[pividx]
        ps[pividx] = j
      end
      pivot   = a[ps[k]*n+k]
      for i in (k+1)...n do
        psin = ps[i]*n
        a[psin+k] = mult = a[psin+k].div(pivot,prec)
        if mult!=zero then
          pskn = ps[k]*n
          for j in (k+1)...n do
            a[psin+j] -= mult.mult(a[pskn+j],prec)
          end
        end
      end
    end
    raise "Singular matrix" if a[ps[n1]*n+n1] == zero
    ps
  end

  # Solves a*x = b for x, using LU decomposition.
  #
  # a is a matrix, b is a constant vector, x is the solution vector.
  #
  # ps is the pivot, a vector which indicates the permutation of rows performed
  # during LU decomposition.
  def lusolve(a,b,ps,zero=0.0)
    prec = BigDecimal.limit(nil)
    n = ps.size
    x = []
    for i in 0...n do
      dot = zero
      psin = ps[i]*n
      for j in 0...i do
        dot = a[psin+j].mult(x[j],prec) + dot
      end
      x <<= b[ps[i]] - dot
    end
    (n-1).downto(0) do |i|
      dot = zero
      psin = ps[i]*n
      for j in (i+1)...n do
        dot = a[psin+j].mult(x[j],prec) + dot
      end
      x[i]  = (x[i]-dot).div(a[psin+i],prec)
    end
    x
  end
end
PK)J[h"A�ZZ9share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/newton.rbnu�[���# frozen_string_literal: false
require "bigdecimal/ludcmp"
require "bigdecimal/jacobian"

#
# newton.rb
#
# Solves the nonlinear algebraic equation system f = 0 by Newton's method.
# This program is not dependent on BigDecimal.
#
# To call:
#    n = nlsolve(f,x)
#  where n is the number of iterations required,
#        x is the initial value vector
#        f is an Object which is used to compute the values of the equations to be solved.
# It must provide the following methods:
#
# f.values(x):: returns the values of all functions at x
#
# f.zero:: returns 0.0
# f.one:: returns 1.0
# f.two:: returns 2.0
# f.ten:: returns 10.0
#
# f.eps:: returns the convergence criterion (epsilon value) used to determine whether two values are considered equal. If |a-b| < epsilon, the two values are considered equal.
#
# On exit, x is the solution vector.
#
module Newton
  include LUSolve
  include Jacobian
  module_function

  def norm(fv,zero=0.0) # :nodoc:
    s = zero
    n = fv.size
    for i in 0...n do
      s += fv[i]*fv[i]
    end
    s
  end

  # See also Newton
  def nlsolve(f,x)
    nRetry = 0
    n = x.size

    f0 = f.values(x)
    zero = f.zero
    one  = f.one
    two  = f.two
    p5 = one/two
    d  = norm(f0,zero)
    minfact = f.ten*f.ten*f.ten
    minfact = one/minfact
    e = f.eps
    while d >= e do
      nRetry += 1
      # Not yet converged. => Compute Jacobian matrix
      dfdx = jacobian(f,f0,x)
      # Solve dfdx*dx = -f0 to estimate dx
      dx = lusolve(dfdx,f0,ludecomp(dfdx,n,zero,one),zero)
      fact = two
      xs = x.dup
      begin
        fact *= p5
        if fact < minfact then
          raise "Failed to reduce function values."
        end
        for i in 0...n do
          x[i] = xs[i] - dx[i]*fact
        end
        f0 = f.values(x)
        dn = norm(f0,zero)
      end while(dn>=d)
      d = dn
    end
    nRetry
  end
end
PK)J[ubB��7share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/util.rbnu�[���# frozen_string_literal: false
#
#--
# bigdecimal/util extends various native classes to provide the #to_d method,
# and provides BigDecimal#to_d and BigDecimal#to_digits.
#++

require 'bigdecimal'

class Integer < Numeric
  # call-seq:
  #     int.to_d  -> bigdecimal
  #
  # Returns the value of +int+ as a BigDecimal.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     42.to_d   # => 0.42e2
  #
  # See also Kernel.BigDecimal.
  #
  def to_d
    BigDecimal(self)
  end
end


class Float < Numeric
  # call-seq:
  #     float.to_d             -> bigdecimal
  #     float.to_d(precision)  -> bigdecimal
  #
  # Returns the value of +float+ as a BigDecimal.
  # The +precision+ parameter is used to determine the number of
  # significant digits for the result. When +precision+ is set to +0+,
  # the number of digits to represent the float being converted is determined
  # automatically.
  # The default +precision+ is +0+.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     0.5.to_d         # => 0.5e0
  #     1.234.to_d       # => 0.1234e1
  #     1.234.to_d(2)    # => 0.12e1
  #
  # See also Kernel.BigDecimal.
  #
  def to_d(precision=0)
    BigDecimal(self, precision)
  end
end


class String
  # call-seq:
  #     str.to_d  -> bigdecimal
  #
  # Returns the result of interpreting leading characters in +str+
  # as a BigDecimal.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     "0.5".to_d             # => 0.5e0
  #     "123.45e1".to_d        # => 0.12345e4
  #     "45.67 degrees".to_d   # => 0.4567e2
  #
  # See also Kernel.BigDecimal.
  #
  def to_d
    BigDecimal.interpret_loosely(self)
  end
end


class BigDecimal < Numeric
  # call-seq:
  #     a.to_digits -> string
  #
  # Converts a BigDecimal to a String of the form "nnnnnn.mmm".
  # This method is deprecated; use BigDecimal#to_s("F") instead.
  #
  #     require 'bigdecimal/util'
  #
  #     d = BigDecimal("3.14")
  #     d.to_digits                  # => "3.14"
  #
  def to_digits
    if self.nan? || self.infinite? || self.zero?
      self.to_s
    else
      i       = self.to_i.to_s
      _,f,_,z = self.frac.split
      i + "." + ("0"*(-z)) + f
    end
  end

  # call-seq:
  #     a.to_d -> bigdecimal
  #
  # Returns self.
  #
  #     require 'bigdecimal/util'
  #
  #     d = BigDecimal("3.14")
  #     d.to_d                       # => 0.314e1
  #
  def to_d
    self
  end
end


class Rational < Numeric
  # call-seq:
  #     rat.to_d(precision)  -> bigdecimal
  #
  # Returns the value as a BigDecimal.
  #
  # The required +precision+ parameter is used to determine the number of
  # significant digits for the result.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     Rational(22, 7).to_d(3)   # => 0.314e1
  #
  # See also Kernel.BigDecimal.
  #
  def to_d(precision)
    BigDecimal(self, precision)
  end
end


class Complex < Numeric
  # call-seq:
  #     cmp.to_d             -> bigdecimal
  #     cmp.to_d(precision)  -> bigdecimal
  #
  # Returns the value as a BigDecimal.
  #
  # The +precision+ parameter is required for a rational complex number.
  # This parameter is used to determine the number of significant digits
  # for the result.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     Complex(0.1234567, 0).to_d(4)   # => 0.1235e0
  #     Complex(Rational(22, 7), 0).to_d(3)   # => 0.314e1
  #
  # See also Kernel.BigDecimal.
  #
  def to_d(*args)
    BigDecimal(self) unless self.imag.zero? # to raise eerror

    if args.length == 0
      case self.real
      when Rational
        BigDecimal(self.real) # to raise error
      end
    end
    self.real.to_d(*args)
  end
end


class NilClass
  # call-seq:
  #     nil.to_d -> bigdecimal
  #
  # Returns nil represented as a BigDecimal.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     nil.to_d   # => 0.0
  #
  def to_d
    BigDecimal(0)
  end
end
PK)J[H �_\\1share/gems/gems/bigdecimal-3.1.8/sample/linear.rbnu�[���#!/usr/local/bin/ruby
# frozen_string_literal: false

#
# linear.rb
#
# Solves linear equation system(A*x = b) by LU decomposition method.
#  where  A is a coefficient matrix,x is an answer vector,b is a constant vector.
#
# USAGE:
#   ruby linear.rb [input file solved]
#

# :stopdoc:
require "bigdecimal"
require "bigdecimal/ludcmp"

#
# NOTE:
#   Change following BigDecimal.limit() if needed.
BigDecimal.limit(100)
#

include LUSolve
def rd_order(na)
   printf("Number of equations ?") if(na <= 0)
   n = ARGF.gets().to_i
end

na   = ARGV.size
zero = BigDecimal("0.0")
one  = BigDecimal("1.0")

while (n=rd_order(na))>0
  a = []
  as= []
  b = []
  if na <= 0
     # Read data from console.
     printf("\nEnter coefficient matrix element A[i,j]\n")
     for i in 0...n do
       for j in 0...n do
         printf("A[%d,%d]? ",i,j); s = ARGF.gets
         a  << BigDecimal(s)
         as << BigDecimal(s)
       end
       printf("Contatant vector element b[%d] ? ",i)
       b << BigDecimal(ARGF.gets)
     end
  else
     # Read data from specified file.
     printf("Coefficient matrix and constant vector.\n")
     for i in 0...n do
       s = ARGF.gets
       printf("%d) %s",i,s)
       s = s.split
       for j in 0...n do
         a  << BigDecimal(s[j])
         as << BigDecimal(s[j])
       end
       b << BigDecimal(s[n])
     end
  end
  x = lusolve(a,b,ludecomp(a,n,zero,one),zero)
  printf("Answer(x[i] & (A*x-b)[i]) follows\n")
  for i in 0...n do
     printf("x[%d]=%s ",i,x[i].to_s)
     s = zero
     for j in 0...n do
       s = s + as[i*n+j]*x[j]
     end
     printf(" & %s\n",(s-b[i]).to_s)
  end
end
PK)J[��SS2share/gems/gems/bigdecimal-3.1.8/sample/nlsolve.rbnu�[���#!/usr/local/bin/ruby
# frozen_string_literal: false

#
# nlsolve.rb
# An example for solving nonlinear algebraic equation system.
#

require "bigdecimal"
require "bigdecimal/newton"
include Newton

class Function # :nodoc: all
  def initialize()
    @zero = BigDecimal("0.0")
    @one  = BigDecimal("1.0")
    @two  = BigDecimal("2.0")
    @ten  = BigDecimal("10.0")
    @eps  = BigDecimal("1.0e-16")
  end
  def zero;@zero;end
  def one ;@one ;end
  def two ;@two ;end
  def ten ;@ten ;end
  def eps ;@eps ;end
  def values(x) # <= defines functions solved
    f = []
    f1 = x[0]*x[0] + x[1]*x[1] - @two # f1 = x**2 + y**2 - 2 => 0
    f2 = x[0] - x[1]                  # f2 = x    - y        => 0
    f <<= f1
    f <<= f2
    f
  end
end

f = BigDecimal.limit(100)
f = Function.new
x = [f.zero,f.zero]      # Initial values
n = nlsolve(f,x)
p x
PK)J[��1_}}-share/gems/gems/bigdecimal-3.1.8/sample/pi.rbnu�[���#!/usr/local/bin/ruby
# frozen_string_literal: false

#
# pi.rb
#
# Calculates 3.1415.... (the number of times that a circle's diameter
# will fit around the circle) using J. Machin's formula.
#

require "bigdecimal"
require "bigdecimal/math.rb"

include BigMath

if ARGV.size == 1
    print "PI("+ARGV[0]+"):\n"
    p PI(ARGV[0].to_i)
else
    print "TRY: ruby pi.rb 1000 \n"
end
PK)J[��@u,u,(share/gems/gems/rake-13.2.1/doc/jamis.rbnu�[���# frozen_string_literal: true
module RDoc
module Page

FONTS = "\"Bitstream Vera Sans\", Verdana, Arial, Helvetica, sans-serif"

STYLE = <<CSS
a {
  color: #00F;
  text-decoration: none;
}

a:hover {
  color: #77F;
  text-decoration: underline;
}

body, td, p {
  font-family: %fonts%;
  background: #FFF;
  color: #000;
  margin: 0px;
  font-size: small;
}

#content {
  margin: 2em;
}

#description p {
  margin-bottom: 0.5em;
}

.sectiontitle {
  margin-top: 1em;
  margin-bottom: 1em;
  padding: 0.5em;
  padding-left: 2em;
  background: #005;
  color: #FFF;
  font-weight: bold;
  border: 1px dotted black;
}

.attr-rw {
  padding-left: 1em;
  padding-right: 1em;
  text-align: center;
  color: #055;
}

.attr-name {
  font-weight: bold;
}

.attr-desc {
}

.attr-value {
  font-family: monospace;
}

.file-title-prefix {
  font-size: large;
}

.file-title {
  font-size: large;
  font-weight: bold;
  background: #005;
  color: #FFF;
}

.banner {
  background: #005;
  color: #FFF;
  border: 1px solid black;
  padding: 1em;
}

.banner td {
  background: transparent;
  color: #FFF;
}

h1 a, h2 a, .sectiontitle a, .banner a {
  color: #FF0;
}

h1 a:hover, h2 a:hover, .sectiontitle a:hover, .banner a:hover {
  color: #FF7;
}

.dyn-source {
  display: none;
  background: #FFE;
  color: #000;
  border: 1px dotted black;
  margin: 0.5em 2em 0.5em 2em;
  padding: 0.5em;
}

.dyn-source .cmt {
  color: #00F;
  font-style: italic;
}

.dyn-source .kw {
  color: #070;
  font-weight: bold;
}

.method {
  margin-left: 1em;
  margin-right: 1em;
  margin-bottom: 1em;
}

.description pre {
  padding: 0.5em;
  border: 1px dotted black;
  background: #FFE;
}

.method .title {
  font-family: monospace;
  font-size: large;
  border-bottom: 1px dashed black;
  margin-bottom: 0.3em;
  padding-bottom: 0.1em;
}

.method .description, .method .sourcecode {
  margin-left: 1em;
}

.description p, .sourcecode p {
  margin-bottom: 0.5em;
}

.method .sourcecode p.source-link {
  text-indent: 0em;
  margin-top: 0.5em;
}

.method .aka {
  margin-top: 0.3em;
  margin-left: 1em;
  font-style: italic;
  text-indent: 2em;
}

h1 {
  padding: 1em;
  border: 1px solid black;
  font-size: x-large;
  font-weight: bold;
  color: #FFF;
  background: #007;
}

h2 {
  padding: 0.5em 1em 0.5em 1em;
  border: 1px solid black;
  font-size: large;
  font-weight: bold;
  color: #FFF;
  background: #009;
}

h3, h4, h5, h6 {
  padding: 0.2em 1em 0.2em 1em;
  border: 1px dashed black;
  color: #000;
  background: #AAF;
}

.sourcecode > pre {
  padding: 0.5em;
  border: 1px dotted black;
  background: #FFE;
}

CSS

XHTML_PREAMBLE = %{<?xml version="1.0" encoding="%charset%"?>
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
}

HEADER = XHTML_PREAMBLE + <<ENDHEADER
<html>
  <head>
    <title>%title%</title>
    <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
    <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />

    <script language="JavaScript" type="text/javascript">
    // <![CDATA[

        function toggleSource( id )
        {
          var elem
          var link

          if( document.getElementById )
          {
            elem = document.getElementById( id )
            link = document.getElementById( "l_" + id )
          }
          else if ( document.all )
          {
            elem = eval( "document.all." + id )
            link = eval( "document.all.l_" + id )
          }
          else
            return false;

          if( elem.style.display == "block" )
          {
            elem.style.display = "none"
            link.innerHTML = "show source"
          }
          else
          {
            elem.style.display = "block"
            link.innerHTML = "hide source"
          }
        }

        function openCode( url )
        {
          window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
        }
      // ]]>
    </script>
  </head>

  <body>
ENDHEADER

FILE_PAGE = <<HTML
<table border='0' cellpadding='0' cellspacing='0' width="100%" class='banner'>
  <tr><td>
    <table width="100%" border='0' cellpadding='0' cellspacing='0'><tr>
      <td class="file-title" colspan="2"><span class="file-title-prefix">File</span><br />%short_name%</td>
      <td align="right">
        <table border='0' cellspacing="0" cellpadding="2">
          <tr>
            <td>Path:</td>
            <td>%full_path%
IF:cvsurl
              &nbsp;(<a href="%cvsurl%">CVS</a>)
ENDIF:cvsurl
            </td>
          </tr>
          <tr>
            <td>Modified:</td>
            <td>%dtm_modified%</td>
          </tr>
        </table>
      </td></tr>
    </table>
  </td></tr>
</table><br>
HTML

###################################################################

CLASS_PAGE = <<HTML
<table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
  <td class="file-title"><span class="file-title-prefix">%classmod%</span><br />%full_name%</td>
  <td align="right">
    <table cellspacing=0 cellpadding=2>
      <tr valign="top">
        <td>In:</td>
        <td>
START:infiles
HREF:full_path_url:full_path:
IF:cvsurl
&nbsp;(<a href="%cvsurl%">CVS</a>)
ENDIF:cvsurl
END:infiles
        </td>
      </tr>
IF:parent
    <tr>
      <td>Parent:</td>
      <td>
IF:par_url
        <a href="%par_url%">
ENDIF:par_url
%parent%
IF:par_url
         </a>
ENDIF:par_url
     </td>
   </tr>
ENDIF:parent
         </table>
        </td>
        </tr>
      </table>
HTML

###################################################################

METHOD_LIST = <<HTML
  <div id="content">
IF:diagram
  <table cellpadding='0' cellspacing='0' border='0' width="100%"><tr><td align="center">
    %diagram%
  </td></tr></table>
ENDIF:diagram

IF:description
  <div class="description">%description%</div>
ENDIF:description

IF:requires
  <div class="sectiontitle">Required Files</div>
  <ul>
START:requires
  <li>HREF:aref:name:</li>
END:requires
  </ul>
ENDIF:requires

IF:toc
  <div class="sectiontitle">Contents</div>
  <ul>
START:toc
  <li><a href="#%href%">%secname%</a></li>
END:toc
  </ul>
ENDIF:toc

IF:methods
  <div class="sectiontitle">Methods</div>
  <ul>
START:methods
  <li>HREF:aref:name:</li>
END:methods
  </ul>
ENDIF:methods

IF:includes
<div class="sectiontitle">Included Modules</div>
<ul>
START:includes
  <li>HREF:aref:name:</li>
END:includes
</ul>
ENDIF:includes

START:sections
IF:sectitle
<div class="sectiontitle"><a nem="%secsequence%">%sectitle%</a></div>
IF:seccomment
<div class="description">
%seccomment%
</div>
ENDIF:seccomment
ENDIF:sectitle

IF:classlist
  <div class="sectiontitle">Classes and Modules</div>
  %classlist%
ENDIF:classlist

IF:constants
  <div class="sectiontitle">Constants</div>
  <table border='0' cellpadding='5'>
START:constants
  <tr valign='top'>
    <td class="attr-name">%name%</td>
    <td>=</td>
    <td class="attr-value">%value%</td>
  </tr>
IF:desc
  <tr valign='top'>
    <td>&nbsp;</td>
    <td colspan="2" class="attr-desc">%desc%</td>
  </tr>
ENDIF:desc
END:constants
  </table>
ENDIF:constants

IF:attributes
  <div class="sectiontitle">Attributes</div>
  <table border='0' cellpadding='5'>
START:attributes
  <tr valign='top'>
    <td class='attr-rw'>
IF:rw
[%rw%]
ENDIF:rw
    </td>
    <td class='attr-name'>%name%</td>
    <td class='attr-desc'>%a_desc%</td>
  </tr>
END:attributes
  </table>
ENDIF:attributes

IF:method_list
START:method_list
IF:methods
<div class="sectiontitle">%type% %category% methods</div>
START:methods
<div class="method">
  <div class="title">
IF:callseq
    <a name="%aref%"></a><b>%callseq%</b>
ENDIF:callseq
IFNOT:callseq
    <a name="%aref%"></a><b>%name%</b>%params%
ENDIF:callseq
IF:codeurl
[ <a href="javascript:openCode('%codeurl%')">source</a> ]
ENDIF:codeurl
  </div>
IF:m_desc
  <div class="description">
  %m_desc%
  </div>
ENDIF:m_desc
IF:aka
<div class="aka">
  This method is also aliased as
START:aka
  <a href="%aref%">%name%</a>
END:aka
</div>
ENDIF:aka
IF:sourcecode
<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('%aref%_source')" id="l_%aref%_source">show source</a> ]</p>
  <div id="%aref%_source" class="dyn-source">
<pre>
%sourcecode%
</pre>
  </div>
</div>
ENDIF:sourcecode
</div>
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
END:sections
</div>
HTML

FOOTER = <<ENDFOOTER
  </body>
</html>
ENDFOOTER

BODY = HEADER + <<ENDBODY
  !INCLUDE! <!-- banner header -->

  <div id="bodyContent">
    #{METHOD_LIST}
  </div>

  #{FOOTER}
ENDBODY

########################## Source code ##########################

SRC_PAGE = XHTML_PREAMBLE + <<HTML
<html>
<head><title>%title%</title>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<style>
.ruby-comment    { color: green; font-style: italic }
.ruby-constant   { color: #4433aa; font-weight: bold; }
.ruby-identifier { color: #222222;  }
.ruby-ivar       { color: #2233dd; }
.ruby-keyword    { color: #3333FF; font-weight: bold }
.ruby-node       { color: #777777; }
.ruby-operator   { color: #111111;  }
.ruby-regexp     { color: #662222; }
.ruby-value      { color: #662222; font-style: italic }
  .kw { color: #3333FF; font-weight: bold }
  .cmt { color: green; font-style: italic }
  .str { color: #662222; font-style: italic }
  .re  { color: #662222; }
</style>
</head>
<body bgcolor="white">
<pre>%code%</pre>
</body>
</html>
HTML

########################## Index ################################

FR_INDEX_BODY = <<HTML
!INCLUDE!
HTML

FILE_INDEX = XHTML_PREAMBLE + <<HTML
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<style>
<!--
  body {
    background-color: #EEE;
    font-family: #{FONTS};
    color: #000;
    margin: 0px;
  }
  .banner {
    background: #005;
    color: #FFF;
    padding: 0.2em;
    font-size: small;
    font-weight: bold;
    text-align: center;
  }
  .entries {
    margin: 0.25em 1em 0 1em;
    font-size: x-small;
  }
  a {
    color: #00F;
    text-decoration: none;
    white-space: nowrap;
  }
  a:hover {
    color: #77F;
    text-decoration: underline;
  }
-->
</style>
<base target="docwin">
</head>
<body>
<div class="banner">%list_title%</div>
<div class="entries">
START:entries
<a href="%href%">%name%</a><br>
END:entries
</div>
</body></html>
HTML

CLASS_INDEX = FILE_INDEX
METHOD_INDEX = FILE_INDEX

INDEX = XHTML_PREAMBLE + <<HTML
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>%title%</title>
  <meta http-equiv="Content-Type" content="text/html; charset=%charset%">
</head>

<frameset cols="20%,*">
    <frameset rows="15%,35%,50%">
        <frame src="fr_file_index.html"   title="Files" name="Files" />
        <frame src="fr_class_index.html"  name="Classes" />
        <frame src="fr_method_index.html" name="Methods" />
    </frameset>
IF:inline_source
      <frame  src="%initial_page%" name="docwin">
ENDIF:inline_source
IFNOT:inline_source
    <frameset rows="80%,20%">
      <frame  src="%initial_page%" name="docwin">
      <frame  src="blank.html" name="source">
    </frameset>
ENDIF:inline_source
    <noframes>
          <body bgcolor="white">
            Click <a href="html/index.html">here</a> for a non-frames
            version of this page.
          </body>
    </noframes>
</frameset>

</html>
HTML

end
end


PK)J[�A2��	�	/share/gems/gems/rake-13.2.1/doc/proto_rake.rdocnu�[���= Original Prototype Rake

This is the original 100 line prototype rake program.

---
 #!/opt/alt/ruby34/bin/ruby

 require 'ftools'

 class Task
   TASKS = Hash.new

   attr_reader :prerequisites

   def initialize(task_name)
     @name = task_name
     @prerequisites = []
     @actions = []
   end

   def enhance(deps=nil, &block)
     @prerequisites |= deps if deps
     @actions << block if block_given?
     self
   end

   def name
     @name.to_s
   end

   def invoke
     @prerequisites.each { |n| Task[n].invoke }
     execute if needed?
   end

   def execute
     return if @triggered
     @triggered = true
     @actions.collect { |act| result = act.call(self) }.last
   end

   def needed?
     true
   end

   def timestamp
     Time.now
   end

   class << self
     def [](task_name)
       TASKS[intern(task_name)] or fail "Don't know how to rake #{task_name}"
     end

     def define_task(args, &block)
       case args
       when Hash
 	fail "Too Many Target Names: #{args.keys.join(' ')}" if args.size > 1
 	fail "No Task Name Given" if args.size < 1
 	task_name = args.keys[0]
 	deps = args[task_name]
       else
 	task_name = args
 	deps = []
       end
       deps = deps.collect {|d| intern(d) }
       get(task_name).enhance(deps, &block)
     end

     def get(task_name)
       name = intern(task_name)
       TASKS[name] ||= self.new(name)
     end

     def intern(task_name)
       (Symbol === task_name) ? task_name : task_name.intern
     end
   end
 end

 class FileTask < Task
   def needed?
     return true unless File.exist?(name)
     latest_prereq = @prerequisites.collect{|n| Task[n].timestamp}.max
     return false if latest_prereq.nil?
     timestamp < latest_prereq
   end

   def timestamp
     File.new(name.to_s).mtime
   end
 end

 def task(args, &block)
   Task.define_task(args, &block)
 end

 def file(args, &block)
   FileTask.define_task(args, &block)
 end

 def sys(cmd)
   puts cmd
   system(cmd) or fail "Command Failed: [#{cmd}]"
 end

 def rake
   begin
     here = Dir.pwd
     while ! File.exist?("Rakefile")
       Dir.chdir("..")
       fail "No Rakefile found" if Dir.pwd == here
       here = Dir.pwd
     end
     puts "(in #{Dir.pwd})"
     load "./Rakefile"
     ARGV.push("default") if ARGV.size == 0
     ARGV.each { |task_name| Task[task_name].invoke }
   rescue Exception => ex
     puts "rake aborted ... #{ex.message}"
     puts ex.backtrace.find {|str| str =~ /Rakefile/ } || ""
   end
 end

 if __FILE__ == $0 then
   rake
 end
PK)J[�'S{��-share/gems/gems/rake-13.2.1/doc/glossary.rdocnu�[���= Glossary

action ::
  Code to be executed in order to perform a task.  Actions in a Rakefile are
  specified in a code block. (Usually delimited by +do+/+end+ pairs.)

execute ::
  When a task is executed, all of its actions are performed in the order they
  were defined.  Note that, unlike <tt>invoke</tt>, <tt>execute</tt> always
  executes the actions (without invoking or executing the prerequisites).

file task (Rake::FileTask) ::
  A file task is a task whose purpose is to create a file (which has the same
  name as the task).  When invoked, a file task will only execute if one or
  more of the following conditions are true.

  1. The associated file does not exist.
  2. A prerequisite has a later time stamp than the existing file.

  Because normal Tasks always have the current time as timestamp, a FileTask
  that has a normal Task prerequisite will always execute.

invoke ::
  When a task is invoked, first we check to see if it has been invoked before.
  If it has been, then nothing else is done.  If this is the first time it has
  been invoked, then we invoke each of its prerequisites.  Finally, we check
  to see if we need to execute the actions of this task by calling
  Rake::Task#needed?.  If the task is needed, we execute its actions.

  NOTE: Prerequisites are still invoked even if the task is not needed.

prerequisites ::
  Every task has a (possibly empty) set of prerequisites.  A prerequisite P to
  Task T is itself a task that must be invoked before Task T.

rule ::
  A rule is a recipe for synthesizing a task when no task is explicitly
  defined.  Rules generally synthesize file tasks.

task (Rake::Task) ::
  The basic unit of work in a Rakefile.  A task has a name, a set of 
  prerequisites, and a list of actions to be performed.
PK)J[v3�HH-share/gems/gems/rake-13.2.1/doc/rational.rdocnu�[���= Why rake?

Ok, let me state from the beginning that I never intended to write this
code.  I'm not convinced it is useful, and I'm not convinced anyone
would even be interested in it.  All I can say is that Why's onion truck
must by been passing through the Ohio valley.

What am I talking about? ... A Ruby version of Make.

See, I can sense you cringing already, and I agree.  The world certainly
doesn't need yet another reworking of the "make" program.  I mean, we
already have "ant".  Isn't that enough?

It started yesterday.  I was helping a coworker fix a problem in one of
the Makefiles we use in our project.  Not a particularly tough problem,
but during the course of the conversation I began lamenting some of the
shortcomings of make.  In particular, in one of my makefiles I wanted to
determine the name of a file dynamically and had to resort to some
simple scripting (in Ruby) to make it work.  "Wouldn't it be nice if you
could just use Ruby inside a Makefile" I said.

My coworker (a recent convert to Ruby) agreed, but wondered what it
would look like.  So I sketched the following on the whiteboard...

    "What if you could specify the make tasks in Ruby, like this ..."

      task "build" do
        java_compile(...args, etc ...)
      end

    "The task function would register "build" as a target to be made,
    and the block would be the action executed whenever the build
    system determined that it was time to do the build target."

We agreed that would be cool, but writing make from scratch would be WAY
too much work.  And that was the end of that!

... Except I couldn't get the thought out of my head.  What exactly
would be needed to make the about syntax work as a make file?  Hmmm, you
would need to register the tasks, you need some way of specifying
dependencies between tasks, and some way of kicking off the process.
Hey!  What if we did ... and fifteen minutes later I had a working
prototype of Ruby make, complete with dependencies and actions.

I showed the code to my coworker and we had a good laugh.  It was just
about a page worth of code that reproduced an amazing amount of the
functionality of make.  We were both truly stunned with the power of
Ruby.

But it didn't do everything make did.  In particular, it didn't have
timestamp based file dependencies (where a file is rebuilt if any of its
prerequisite files have a later timestamp).  Obviously THAT would be a
pain to add and so Ruby Make would remain an interesting experiment.

... Except as I walked back to my desk, I started thinking about what
file based dependencies would really need.  Rats!  I was hooked again,
and by adding a new class and two new methods, file/timestamp
dependencies were implemented.

Ok, now I was really hooked.  Last night (during CSI!) I massaged the
code and cleaned it up a bit.  The result is a bare-bones replacement
for make in exactly 100 lines of code.

For the curious, you can see it at ...
* doc/proto_rake.rdoc

Oh, about the name.  When I wrote the example Ruby Make task on my
whiteboard, my coworker exclaimed "Oh! I have the perfect name: Rake ...
Get it?  Ruby-Make. Rake!"  He said he envisioned the tasks as leaves
and Rake would clean them up  ... or something like that.  Anyways, the
name stuck.

Some quick examples ...

A simple task to delete backup files ...

   task :clean do
     Dir['*~'].each {|fn| rm fn rescue nil}
   end

Note that task names are symbols (they are slightly easier to type
than quoted strings ... but you may use quoted string if you would
rather). Rake makes the methods of the FileUtils module directly
available, so we take advantage of the <tt>rm</tt> command.  Also note
the use of "rescue nil" to trap and ignore errors in the <tt>rm</tt>
command.

To run it, just type "rake clean".  Rake will automatically find a
Rakefile in the current directory (or above!) and will invoke the
targets named on the command line.  If there are no targets explicitly
named, rake will invoke the task "default".

Here's another task with dependencies ...

   task :clobber => [:clean] do
     rm_r "tempdir"
   end

Task :clobber depends upon task :clean, so :clean will be run before
:clobber is executed.

Files are specified by using the "file" command.  It is similar to the
task command, except that the task name represents a file, and the task
will be run only if the file doesn't exist, or if its modification time
is earlier than any of its prerequisites.

Here is a file based dependency that will compile "hello.cc" to
"hello.o".

   file "hello.cc"
   file "hello.o" => ["hello.cc"] do |t|
     srcfile = t.name.sub(/\.o$/, ".cc")
     sh %{g++ #{srcfile} -c -o #{t.name}}
   end

I normally specify file tasks with string (rather than symbols).  Some
file names can't be represented by symbols.  Plus it makes the
distinction between them more clear to the casual reader.

Currently writing a task for each and every file in the project would be
tedious at best.  I envision a set of libraries to make this job
easier.  For instance, perhaps something like this ...

   require 'rake/ctools'
   Dir['*.c'].each do |fn|
     c_source_file(fn)
   end

where "c_source_file" will create all the tasks need to compile all the
C source files in a directory.  Any number of useful libraries could be
created for rake.

That's it.  There's no documentation (other than whats in this
message).  Does this sound interesting to anyone?  If so, I'll continue
to clean it up and write it up and publish it on RAA.  Otherwise, I'll
leave it as an interesting exercise and a tribute to the power of Ruby.

Why /might/ rake be interesting to Ruby programmers.  I don't know,
perhaps ...

* No weird make syntax (only weird Ruby syntax :-)
* No need to edit or read XML (a la ant)
* Platform independent build scripts.
* Will run anywhere Ruby exists, so no need to have "make" installed.
  If you stay away from the "sys" command and use things like
  'ftools', you can have a perfectly platform independent
  build script.  Also rake is only 100 lines of code, so it can
  easily be packaged along with the rest of your code.

So ... Sorry for the long rambling message.  Like I said, I never
intended to write this code at all.
PK)J[����P�P-share/gems/gems/rake-13.2.1/doc/rakefile.rdocnu�[���= Rakefile Format

First of all, there is no special format for a Rakefile.  A Rakefile
contains executable Ruby code.  Anything legal in a ruby script is
allowed in a Rakefile.

Now that we understand there is no special syntax in a Rakefile, there
are some conventions that are used in a Rakefile that are a little
unusual in a typical Ruby program.  Since a Rakefile is tailored to
specifying tasks and actions, the idioms used in a Rakefile are
designed to support that.

So, what goes into a Rakefile?

== Tasks

Tasks are the main unit of work in a Rakefile.  Tasks have a name
(usually given as a symbol or a string), a list of prerequisites (more
symbols or strings) and a list of actions (given as a block).

=== Simple Tasks

A task is declared by using the +task+ method.  +task+ takes a single
parameter that is the name of the task.

  task :name

=== Tasks with Prerequisites

Any prerequisites are given as a list (enclosed in square brackets)
following the name and an arrow (=>).

  task name: [:prereq1, :prereq2]

*NOTE:* Although this syntax looks a little funky, it is legal
Ruby.  We are constructing a hash where the key is :name and the value
for that key is the list of prerequisites.  It is equivalent to the
following ...

  hash = Hash.new
  hash[:name] = [:prereq1, :prereq2]
  task(hash)

You can also use strings for task names and prerequisites, rake doesn't care.
This is the same task definition:

  task 'name' => %w[prereq1 prereq2]

As is this:

  task name: %w[prereq1 prereq2]

We'll prefer this style for regular tasks with prerequisites throughout the
rest of the document.  Using an array of strings for the prerequisites means
you will need to make fewer changes if you need to move tasks into namespaces
or perform other refactorings.

=== Tasks with Actions

Actions are defined by passing a block to the +task+ method.  Any Ruby
code can be placed in the block.  The block may reference the task
object via the block parameter.

  task name: [:prereq1, :prereq2] do |t|
    # actions (may reference t)
  end

=== Multiple Definitions

A task may be specified more than once.  Each specification adds its
prerequisites and actions to the existing definition.  This allows one
part of a rakefile to specify the actions and a different rakefile
(perhaps separately generated) to specify the dependencies.

For example, the following is equivalent to the single task
specification given above.

  task :name
  task name: :prereq1
  task name: %w[prereq2]
  task :name do |t|
    # actions
  end

== File Tasks

Some tasks are designed to create a file from one or more other files.
Tasks that generate these files may be skipped if the file already
exists.  File tasks are used to specify file creation tasks.

File tasks are declared using the +file+ method (instead of the +task+
method).  In addition, file tasks are usually named with a string
rather than a symbol.

The following file task creates a executable program (named +prog+)
given two object files named +a.o+ and +b.o+.  The tasks
for creating +a.o+ and +b.o+ are not shown.

  file "prog" => ["a.o", "b.o"] do |t|
    sh "cc -o #{t.name} #{t.prerequisites.join(' ')}"
  end

== Directory Tasks

It is common to need to create directories upon demand.  The
+directory+ convenience method is a short-hand for creating a FileTask
that creates the directory.  For example, the following declaration
...

  directory "testdata/examples/doc"

is equivalent to ...

  file "testdata" do |t| mkdir t.name end
  file "testdata/examples" => ["testdata"] do |t| mkdir t.name end
  file "testdata/examples/doc" => ["testdata/examples"] do |t| mkdir t.name end

The +directory+ method does not accept prerequisites or actions, but
both prerequisites and actions can be added later.  For example ...

  directory "testdata"
  file "testdata" => ["otherdata"]
  file "testdata" do
    cp Dir["standard_data/*.data"], "testdata"
  end

== Tasks with Parallel Prerequisites

Rake allows parallel execution of prerequisites using the following syntax:

  multitask copy_files: %w[copy_src copy_doc copy_bin] do
    puts "All Copies Complete"
  end

In this example, +copy_files+ is a normal rake task.  Its actions are
executed whenever all of its prerequisites are done.  The big
difference is that the prerequisites (+copy_src+, +copy_bin+ and
+copy_doc+) are executed in parallel.  Each of the prerequisites are
run in their own Ruby thread, possibly allowing faster overall runtime.

=== Secondary Prerequisites

If any of the primary prerequisites of a multitask have common secondary
prerequisites, all of the primary/parallel prerequisites will wait
until the common prerequisites have been run.

For example, if the <tt>copy_<em>xxx</em></tt> tasks have the
following prerequisites:

  task copy_src: :prep_for_copy
  task copy_bin: :prep_for_copy
  task copy_doc: :prep_for_copy

Then the +prep_for_copy+ task is run before starting all the copies in
parallel.  Once +prep_for_copy+ is complete, +copy_src+, +copy_bin+,
and +copy_doc+ are all run in parallel.  Note that +prep_for_copy+ is
run only once, even though it is referenced in multiple threads.

=== Thread Safety

The Rake internal data structures are thread-safe with respect
to the multitask parallel execution, so there is no need for the user
to do extra synchronization for Rake's benefit.  However, if there are
user data structures shared between the parallel prerequisites, the
user must do whatever is necessary to prevent race conditions.

== Tasks with Arguments

Prior to version 0.8.0, rake was only able to handle command line
arguments of the form NAME=VALUE that were passed into Rake via the
ENV hash.  Many folks had asked for some kind of simple command line
arguments, perhaps using "--" to separate regular task names from
argument values on the command line.  The problem is that there was no
easy way to associate positional arguments on the command line with
different tasks.  Suppose both tasks :a and :b expect a command line
argument: does the first value go with :a?  What if :b is run first?
Should it then get the first command line argument.

Rake 0.8.0 solves this problem by explicitly passing values directly
to the tasks that need them.  For example, if I had a release task
that required a version number, I could say:

   rake release[0.8.2]

And the string "0.8.2" will be passed to the :release task.  Multiple
arguments can be passed by separating them with a comma, for example:

   rake name[john,doe]

Just a few words of caution.  The rake task name and its arguments
need to be a single command line argument to rake.  This generally
means no spaces.  If spaces are needed, then the entire name +
argument string should be quoted.  Something like this:

   rake "name[billy bob, smith]"

(Quoting rules vary between operating systems and shells, so make sure
you consult the proper docs for your OS/shell).

=== Tasks that Expect Parameters

Parameters are only given to tasks that are setup to expect them.  In
order to handle named parameters, the task declaration syntax for
tasks has been extended slightly.

For example, a task that needs a first name and last name might be
declared as:

   task :name, [:first_name, :last_name]

The first argument is still the name of the task (:name in this case).
The next two arguments are the names of the parameters expected by
:name in an array (:first_name and :last_name in the example).

To access the values of the parameters, the block defining the task
behaviour can now accept a second parameter:

   task :name, [:first_name, :last_name] do |t, args|
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

The first argument of the block "t" is always bound to the current
task object.  The second argument "args" is an open-struct like object
that allows access to the task arguments.  Extra command line
arguments to a task are ignored.

If you wish to specify default values for the arguments, you can use
the with_defaults method in the task body.  Here is the above example
where we specify default values for the first and last names:

   task :name, [:first_name, :last_name] do |t, args|
     args.with_defaults(:first_name => "John", :last_name => "Dough")
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

=== Tasks that Expect Parameters and Have Prerequisites

Tasks that use parameters have a slightly different format for
prerequisites.  Use the arrow notation to indicate the prerequisites
for tasks with arguments.  For example:

   task :name, [:first_name, :last_name] => [:pre_name] do |t, args|
     args.with_defaults(:first_name => "John", :last_name => "Dough")
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

=== Tasks that take Variable-length Parameters

Tasks that need to handle a list of values as a parameter can use the
extras method of the args variable.  This allows for tasks that can
loop over a variable number of values, and its compatible with named
parameters as well:

   task :email, [:message] do |t, args|
     mail = Mail.new(args.message)
     recipients = args.extras
     recipients.each do |target|
       mail.send_to(target)
     end
   end

There is also the convenience method to_a that returns all parameters
in the sequential order they were given, including those associated
with named parameters.

=== Deprecated Task Parameters Format

There is an older format for declaring task parameters that omitted
the task argument array and used the :needs keyword to introduce the
dependencies.  That format is still supported for compatibility, but
is not recommended for use.  The older format may be dropped in future
versions of rake.

== Accessing Task Programmatically

Sometimes it is useful to manipulate tasks programmatically in a
Rakefile. To find a task object use Rake::Task.[].

=== Programmatic Task Example

For example, the following Rakefile defines two tasks.  The :doit task
simply prints a simple "DONE" message.  The :dont class will lookup
the doit class and remove (clear) all of its prerequisites and
actions.

   task :doit do
     puts "DONE"
   end

   task :dont do
     Rake::Task[:doit].clear
   end

Running this example:

  $ rake doit
  (in /Users/jim/working/git/rake/x)
  DONE
  $ rake dont doit
  (in /Users/jim/working/git/rake/x)
  $

The ability to programmatically manipulate tasks gives rake very
powerful meta-programming capabilities w.r.t. task execution, but
should be used with caution.

== Rules

When a file is named as a prerequisite, but does not have a file task
defined for it, Rake will attempt to synthesize a task by looking at a
list of rules supplied in the Rakefile.

Suppose we were trying to invoke task "mycode.o", but no task is
defined for it.  But the rakefile has a rule that look like this ...

  rule '.o' => ['.c'] do |t|
    sh "cc #{t.source} -c -o #{t.name}"
  end

This rule will synthesize any task that ends in ".o".  It has a
prerequisite a source file with an extension of ".c" must exist.  If
Rake is able to find a file named "mycode.c", it will automatically
create a task that builds "mycode.o" from "mycode.c".

If the file "mycode.c" does not exist, rake will attempt
to recursively synthesize a rule for it.

When a task is synthesized from a rule, the +source+ attribute of the
task is set to the matching source file.  This allows us to write
rules with actions that reference the source file.

=== Advanced Rules

Any regular expression may be used as the rule pattern.  Additionally,
a proc may be used to calculate the name of the source file.  This
allows for complex patterns and sources.

The following rule is equivalent to the example above.

  rule( /\.o$/ => [
    proc {|task_name| task_name.sub(/\.[^.]+$/, '.c') }
  ]) do |t|
    sh "cc #{t.source} -c -o #{t.name}"
  end

*NOTE:* Because of a _quirk_ in Ruby syntax, parenthesis are
required on *rule* when the first argument is a regular expression.

The following rule might be used for Java files ...

  rule '.class' => [
    proc { |tn| tn.sub(/\.class$/, '.java').sub(/^classes\//, 'src/') }
  ] do |t|
    java_compile(t.source, t.name)
  end

*NOTE:* +java_compile+ is a hypothetical method that invokes the
java compiler.

== Importing Dependencies

Any ruby file (including other rakefiles) can be included with a
standard Ruby +require+ command.  The rules and declarations in the
required file are just added to the definitions already accumulated.

Because the files are loaded _before_ the rake targets are evaluated,
the loaded files must be "ready to go" when the rake command is
invoked. This makes generated dependency files difficult to use. By
the time rake gets around to updating the dependencies file, it is too
late to load it.

The +import+ command addresses this by specifying a file to be loaded
_after_ the main rakefile is loaded, but _before_ any targets on the
command line are invoked. In addition, if the file name matches an
explicit task, that task is invoked before loading the file. This
allows dependency files to be generated and used in a single rake
command invocation.

Example:

  require 'rake/loaders/makefile'

  file ".depends.mf" => [SRC_LIST] do |t|
    sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}"
  end

  import ".depends.mf"

If ".depends" does not exist, or is out of date w.r.t. the source
files, a new ".depends" file is generated using +makedepend+ before
loading.

== Comments

Standard Ruby comments (beginning with "#") can be used anywhere it is
legal in Ruby source code, including comments for tasks and rules.
However, if you wish a task to be described using the "-T" switch,
then you need to use the +desc+ command to describe the task.

Example:

  desc "Create a distribution package"
  task package: %w[ ... ] do ... end

The "-T" switch (or "--tasks" if you like to spell things out) will
display a list of tasks that have a description.  If you use +desc+ to
describe your major tasks, you have a semi-automatic way of generating
a summary of your Rake file.

  $ rake -T
  (in /home/.../rake)
  rake clean            # Remove any temporary products.
  rake clobber          # Remove any generated file.
  rake clobber_rdoc     # Remove rdoc products
  rake contrib_test     # Run tests for contrib_test
  rake default          # Default Task
  rake install          # Install the application
  rake lines            # Count lines in the main rake file
  rake rdoc             # Build the rdoc HTML Files
  rake rerdoc           # Force a rebuild of the RDOC files
  rake test             # Run tests
  rake testall          # Run all test targets

Only tasks with descriptions will be displayed with the "-T" switch.
Use "-P" (or "--prereqs") to get a list of all tasks and their
prerequisites.

== Namespaces

As projects grow (and along with it, the number of tasks), it is
common for task names to begin to clash.  For example, if you might
have a main program and a set of sample programs built by a single
Rakefile.  By placing the tasks related to the main program in one
namespace, and the tasks for building the sample programs in a
different namespace, the task names will not interfere with each other.

For example:

  namespace "main" do
    task :build do
      # Build the main program
    end
  end

  namespace "samples" do
    task :build do
      # Build the sample programs
    end
  end

  task build: %w[main:build samples:build]

Referencing a task in a separate namespace can be achieved by
prefixing the task name with the namespace and a colon
(e.g. "main:build" refers to the :build task in the +main+ namespace).
Nested namespaces are supported.

Note that the name given in the +task+ command is always the unadorned
task name without any namespace prefixes.  The +task+ command always
defines a task in the current namespace.

=== FileTasks

File task names are not scoped by the namespace command.  Since the
name of a file task is the name of an actual file in the file system,
it makes little sense to include file task names in name space.
Directory tasks (created by the +directory+ command) are a type of
file task and are also not affected by namespaces.

=== Name Resolution

When looking up a task name, rake will start with the current
namespace and attempt to find the name there.  If it fails to find a
name in the current namespace, it will search the parent namespaces
until a match is found (or an error occurs if there is no match).

The "rake" namespace is a special implicit namespace that refers to
the toplevel names.

If a task name begins with a "^" character, the name resolution will
start in the parent namespace.  Multiple "^" characters are allowed.

Here is an example file with multiple :run tasks and how various names
resolve in different locations.

  task :run

  namespace "one" do
    task :run

    namespace "two" do
      task :run

      # :run            => "one:two:run"
      # "two:run"       => "one:two:run"
      # "one:two:run"   => "one:two:run"
      # "one:run"       => "one:run"
      # "^run"          => "one:run"
      # "^^run"         => "rake:run" (the top level task)
      # "rake:run"      => "rake:run" (the top level task)
    end

    # :run       => "one:run"
    # "two:run"  => "one:two:run"
    # "^run"     => "rake:run"
  end

  # :run           => "rake:run"
  # "one:run"      => "one:run"
  # "one:two:run"  => "one:two:run"

== FileLists

FileLists are the way Rake manages lists of files.  You can treat a
FileList as an array of strings for the most part, but FileLists
support some additional operations.

=== Creating a FileList

Creating a file list is easy.  Just give it the list of file names:

   fl = FileList['file1.rb', file2.rb']

Or give it a glob pattern:

   fl = FileList['*.rb']

== Odds and Ends

=== do/end versus { }

Blocks may be specified with either a +do+/+end+ pair, or with curly
braces in Ruby.  We _strongly_ recommend using +do+/+end+ to specify the
actions for tasks and rules.  Because the rakefile idiom tends to
leave off parentheses on the task/file/rule methods, unusual
ambiguities can arise when using curly braces.

For example, suppose that the method +object_files+ returns a list of
object files in a project.  Now we use +object_files+ as the
prerequisites in a rule specified with actions in curly braces.

  # DON'T DO THIS!
  file "prog" => object_files {
    # Actions are expected here (but it doesn't work)!
  }

Because curly braces have a higher precedence than +do+/+end+, the
block is associated with the +object_files+ method rather than the
+file+ method.

This is the proper way to specify the task ...

  # THIS IS FINE
  file "prog" => object_files do
    # Actions go here
  end

== Rakefile Path

When issuing the +rake+ command in a terminal, Rake will look
for a Rakefile in the current directory. If a Rakefile  is not found,
it will search parent directories until one is found.

For example, if a Rakefile resides in the +project/+ directory,
moving deeper into the project's directory tree will not have an adverse
effect on rake tasks:

  $ pwd
  /home/user/project

  $ cd lib/foo/bar
  $ pwd
  /home/user/project/lib/foo/bar

  $ rake run_pwd
  /home/user/project

As far as rake is concerned, all tasks are run from the directory in
which the Rakefile resides.

=== Multiple Rake Files

Not all tasks need to be included in a single Rakefile. Additional
rake files (with the file extension "+.rake+") may be placed in
+rakelib+ directory located at the top level of a project (i.e.
the same directory that contains the main +Rakefile+).

Also, rails projects may include additional rake files in the
+lib/tasks+ directory.

=== Clean and Clobber Tasks

Through <tt>require 'rake/clean'</tt> Rake provides +clean+ and +clobber+
tasks:

+clean+ ::
  Clean up the project by deleting scratch files and backup files.  Add files
  to the +CLEAN+ FileList to have the +clean+ target handle them.

+clobber+ ::
  Clobber all generated and non-source files in a project.  The task depends
  on +clean+, so all the +CLEAN+ files will be deleted as well as files in the
  +CLOBBER+ FileList.  The intent of this task is to return a project to its
  pristine, just unpacked state.

You can add file names or glob patterns to both the +CLEAN+ and +CLOBBER+
lists.

=== Phony Task

The phony task can be used as a dependency to allow file-based tasks to use
non-file-based-tasks as prerequisites without forcing them to rebuild.  You
can <tt>require 'rake/phony'</tt> to add the +phony+ task.

----

== See

* README.rdoc -- Main documentation for Rake.
PK)J[�_�bgg.share/gems/gems/rake-13.2.1/doc/example/main.cnu�[���#include <stdio.h>

extern void a();
extern void b();

int main ()
{
    a();
    b();
    return 0;
}
PK)J[۸	���1share/gems/gems/rake-13.2.1/doc/example/Rakefile1nu�[���# Example Rakefile -*- ruby -*-

task :default => [:main]

file "a.o" => ["a.c"] do |t|
  src = t.name.sub(/\.o$/, '.c')
  sh "gcc #{src} -c -o #{t.name}"
end

file "b.o" => ["b.c"] do |t|
  src = t.name.sub(/\.o$/, '.c')
  sh "gcc #{src} -c -o #{t.name}"
end

file "main.o" => ["main.c"] do |t|
  src = t.name.sub(/\.o$/, '.c')
  sh "gcc #{src} -c -o #{t.name}"
end

OBJFILES = ["a.o", "b.o", "main.o"]
task :obj => OBJFILES

file "main" => OBJFILES do |t|
  sh "gcc -o #{t.name} main.o a.o b.o"
end

task :clean do
  rm_f FileList['*.o']
  Dir['*~'].each { |fn| rm_f fn }
end

task :clobber => [:clean] do
  rm_f "main"
end

task :run => ["main"] do
  sh "./main"
end
PK)J[��AA+share/gems/gems/rake-13.2.1/doc/example/b.cnu�[���#include <stdio.h>

void b()
{
    printf ("In function b\n");
}
PK)J["�;WW1share/gems/gems/rake-13.2.1/doc/example/Rakefile2nu�[���# Example Rakefile -*- ruby -*-
# Using the power of Ruby

task :default => [:main]

def ext(fn, newext)
  fn.sub(/\.[^.]+$/, newext)
end

SRCFILES = Dir['*.c']
OBJFILES = SRCFILES.collect { |fn| ext(fn,".o") }

OBJFILES.each do |objfile|
  srcfile = ext(objfile, ".c")
  file objfile => [srcfile] do |t|
    sh "gcc #{srcfile} -c -o #{t.name}"
  end
end

file "main" => OBJFILES do |t|
  sh "gcc -o #{t.name} main.o a.o b.o"
end

task :clean do
  rm_f FileList['*.o']
  Dir['*~'].each { |fn| rm_f fn }
end

task :clobber => [:clean] do
  rm_f "main"
end

task :run => ["main"] do
  sh "./main"
end
PK)J[Oq�AA+share/gems/gems/rake-13.2.1/doc/example/a.cnu�[���#include <stdio.h>

void a()
{
    printf ("In function a\n");
}
PK)J[�?qFF7share/gems/gems/rake-13.2.1/doc/command_line_usage.rdocnu�[���= Rake Command Line Usage

Rake is invoked from the command line using:

    % rake [options ...]  [VAR=VALUE ...]  [targets ...]

Options are:

[<tt><em>name</em>=<em>value</em></tt>]
    Set the environment variable <em>name</em> to <em>value</em>
    during the execution of the <b>rake</b> command.  You can access
    the value by using ENV['<em>name</em>'].

[<tt>--all</tt> (-A)]
    Used in combination with the -T and -D options, will force
    those options to show all the tasks, even the ones without comments.

[<tt>--backtrace</tt>{=_output_} (-n)]
    Enable a full backtrace (i.e. like --trace, but without the task
    tracing details). The _output_ parameter is optional, but if
    specified it controls where the backtrace output is sent. If
    _output_ is <tt>stdout</tt>, then backtrace output is directed to
    standard output. If _output_ is <tt>stderr</tt>, or if it is
    missing, then the backtrace output is sent to standard error.

[<tt>--comments</tt>]
    Used in combination with the -W options to force the output to
    contain commented options only. This is the reverse of
    <tt>--all</tt>.

[<tt>--describe</tt> _pattern_ (-D)]
    Describe the tasks (matching optional PATTERN), then exit.

[<tt>--dry-run</tt> (-n)]
    Do a dry run.  Print the tasks invoked and executed, but do not
    actually execute any of the actions.

[<tt>--execute</tt> _code_ (-e)]
    Execute some Ruby code and exit.

[<tt>--execute-print</tt> _code_ (-p)]
    Execute some Ruby code, print the result, and exit.

[<tt>--execute-continue</tt> _code_ (-E)]
    Execute some Ruby code, then continue with normal task processing.

[<tt>--help</tt>  (-H)]
    Display some help text and exit.

[<tt>--jobs</tt> _number_  (-j)]

    Specifies the maximum number of concurrent threads allowed. Rake
    will allocate threads as needed up to this maximum number.

    If omitted, Rake will attempt to estimate the number of CPUs on
    the system and add 4 to that number.

    The concurrent threads are used to execute the <tt>multitask</tt>
    prerequisites. Also see the <tt>-m</tt> option which turns all
    tasks into multitasks.

    Sample values:
       (no -j)   : Allow up to (# of CPUs + 4) number of threads
       --jobs    : Allow unlimited number of threads
       --jobs=1  : Allow only one thread (the main thread)
       --jobs=16 : Allow up to 16 concurrent threads

[<tt>--job-stats</tt> _level_]

    Display job statistics at the completion of the run. By default,
    this will display the requested number of active threads (from the
    -j options) and the maximum number of threads in play at any given
    time.

    If the optional _level_ is <tt>history</tt>, then a complete trace
    of task history will be displayed on standard output.

[<tt>--libdir</tt> _directory_  (-I)]
    Add _directory_ to the list of directories searched for require.

[<tt>--multitask</tt> (-m)]
    Treat all tasks as multitasks. ('make/drake' semantics)

[<tt>--nosearch</tt>  (-N)]
    Do not search for a Rakefile in parent directories.

[<tt>--prereqs</tt>  (-P)]
    Display a list of all tasks and their immediate prerequisites.

[<tt>--quiet</tt> (-q)]
    Do not echo commands from FileUtils.

[<tt>--rakefile</tt> _filename_ (-f)]
    Use _filename_ as the name of the rakefile. The default rakefile
    names are +rakefile+ and +Rakefile+ (with +rakefile+ taking
    precedence). If the rakefile is not found in the current
    directory, +rake+ will search parent directories for a match. The
    directory where the Rakefile is found will become the current
    directory for the actions executed in the Rakefile.

[<tt>--rakelibdir</tt> _rakelibdir_ (-R)]
    Auto-import any .rake files in RAKELIBDIR. (default is 'rakelib')

[<tt>--require</tt> _name_ (-r)]
    Require _name_ before executing the Rakefile.

[<tt>--rules</tt>]
    Trace the rules resolution.

[<tt>--silent (-s)</tt>]
    Like --quiet, but also suppresses the 'in directory' announcement.

[<tt>--suppress-backtrace _pattern_ </tt>]
    Line matching the regular expression _pattern_ will be removed
    from the backtrace output. Note that the --backtrace option is the
    full backtrace without these lines suppressed.

[<tt>--system</tt> (-g)]
    Use the system wide (global) rakefiles. The project Rakefile is
    ignored. By default, the system wide rakefiles are used only if no
    project Rakefile is found. On Unix-like system, the system wide
    rake files are located in $HOME/.rake. On a windows system they
    are stored in $APPDATA/Rake.

[<tt>--no-system</tt> (-G)]
    Use the project level Rakefile, ignoring the system-wide (global)
    rakefiles.

[<tt>--tasks</tt> <em>pattern</em> (-T)]
    Display a list of the major tasks and their comments.  Comments
    are defined using the "desc" command.  If a pattern is given, then
    only tasks matching the pattern are displayed.

[<tt>--trace</tt>{=_output_} (-t)]
    Turn on invoke/execute tracing. Also enable full backtrace on
    errors. The _output_ parameter is optional, but if specified it
    controls where the trace output is sent. If _output_ is
    <tt>stdout</tt>, then trace output is directed to standard output.
    If _output_ is <tt>stderr</tt>, or if it is missing, then trace
    output is sent to standard error.

[<tt>--verbose</tt> (-v)]
    Echo the Sys commands to standard output.

[<tt>--version</tt> (-V)]
    Display the program version and exit.

[<tt>--where</tt> <em>pattern</em> (-W)]
    Display tasks that match <em>pattern</em> and the file and line
    number where the task is defined. By default this option will
    display all tasks, not just the tasks that have descriptions.

[<tt>--no-deprecation-warnings</tt> (-X)]
    Do not display the deprecation warnings.

In addition, any command line option of the form
<em>VAR</em>=<em>VALUE</em> will be added to the environment hash
<tt>ENV</tt> and may be tested in the Rakefile.
PK)J[��@�WW'share/gems/gems/rake-13.2.1/README.rdocnu�[���= RAKE -- Ruby Make

home :: https://github.com/ruby/rake
bugs :: https://github.com/ruby/rake/issues
docs :: https://ruby.github.io/rake

== Description

Rake is a Make-like program implemented in Ruby. Tasks and dependencies are
specified in standard Ruby syntax.

Rake has the following features:

* Rakefiles (rake's version of Makefiles) are completely defined in
  standard Ruby syntax.  No XML files to edit.  No quirky Makefile
  syntax to worry about (is that a tab or a space?)

* Users can specify tasks with prerequisites.

* Rake supports rule patterns to synthesize implicit tasks.

* Flexible FileLists that act like arrays but know about manipulating
  file names and paths.

* A library of prepackaged tasks to make building rakefiles easier. For example,
  tasks for building tarballs. (Formerly
  tasks for building RDoc, Gems, and publishing to FTP were included in rake but they're now
  available in RDoc, RubyGems, and rake-contrib respectively.)

* Supports parallel execution of tasks.

== Installation

=== Gem Installation

Download and install rake with the following.

  gem install rake

== Usage

=== Simple Example

First, you must write a "Rakefile" file which contains the build rules. Here's
a simple example:

  task default: %w[test]

  task :test do
    ruby "test/unittest.rb"
  end

This Rakefile has two tasks:

* A task named "test", which -- upon invocation -- will run a unit test file
  in Ruby.
* A task named "default". This task does nothing by itself, but it has exactly
  one dependency, namely the "test" task. Invoking the "default" task will
  cause Rake to invoke the "test" task as well.

Running the "rake" command without any options will cause it to run the
"default" task in the Rakefile:

  % ls
  Rakefile     test/
  % rake
  (in /home/some_user/Projects/rake)
  ruby test/unittest.rb
  ....unit test output here...

Type "rake --help" for all available options.

== Resources

=== Rake Information

* {Rake command-line}[link:doc/command_line_usage.rdoc]
* {Writing Rakefiles}[link:doc/rakefile.rdoc]
* The original {Rake announcement}[link:doc/rational.rdoc]
* Rake {glossary}[link:doc/glossary.rdoc]

=== Presentations and Articles about Rake

* Avdi Grimm's rake series:
  1. {Rake Basics}[https://avdi.codes/rake-part-1-basics/]
  2. {Rake File Lists}[https://avdi.codes/rake-part-2-file-lists-2/]
  3. {Rake Rules}[https://avdi.codes/rake-part-3-rules/]
  4. {Rake Pathmap}[https://avdi.codes/rake-part-4-pathmap/]
  5. {File Operations}[https://avdi.codes/rake-part-5-file-operations/]
  6. {Clean and Clobber}[https://avdi.codes/rake-part-6-clean-and-clobber/]
  7. {MultiTask}[https://avdi.codes/rake-part-7-multitask/]
* {Jim Weirich's 2003 RubyConf presentation}[https://web.archive.org/web/20140221123354/http://onestepback.org/articles/buildingwithrake/]
* Martin Fowler's article on Rake: https://martinfowler.com/articles/rake.html

== Other Make Re-envisionings ...

Rake is a late entry in the make replacement field.  Here are links to
other projects with similar (and not so similar) goals.

* https://directory.fsf.org/wiki/Bras -- Bras, one of earliest
  implementations of "make in a scripting language".
* http://www.a-a-p.org -- Make in Python
* https://ant.apache.org -- The Ant project
* https://search.cpan.org/search?query=PerlBuildSystem -- The Perl Build System
* https://www.rubydoc.info/gems/rant/0.5.7/frames -- Rant, another Ruby make tool.

== Credits

[<b>Jim Weirich</b>] Who originally created Rake.

[<b>Ryan Dlugosz</b>] For the initial conversation that sparked Rake.

[<b>Nobuyoshi Nakada <nobu@ruby-lang.org></b>] For the initial patch for rule support.

[<b>Tilman Sauerbeck <tilman@code-monkey.de></b>] For the recursive rule patch.

[<b>Eric Hodel</b>] For aid in maintaining rake.

[<b>Hiroshi SHIBATA</b>] Maintainer of Rake 10 and later

== License

Rake is available under an MIT-style license.

:include: MIT-LICENSE

---

= Other stuff

Author::   Jim Weirich <jim.weirich@gmail.com>
Requires:: Ruby 2.0.0 or later
License::  Copyright Jim Weirich.
           Released under an MIT-style license.  See the MIT-LICENSE
           file included in the distribution.

== Warranty

This software is provided "as is" and without any express or implied
warranties, including, without limitation, the implied warranties of
merchantability and fitness for a particular purpose.

== Historical

Rake was originally created by Jim Weirich, who unfortunately passed away in
February 2014. This repository was originally hosted at
{github.com/jimweirich/rake}[https://github.com/jimweirich/rake/], however
with his passing, has been moved to {ruby/rake}[https://github.com/ruby/rake].

You can view Jim's last commit here:
https://github.com/jimweirich/rake/tree/336559f28f55bce418e2ebcc0a57548dcbac4025

You can {read more about Jim}[https://en.wikipedia.org/wiki/Jim_Weirich] at Wikipedia.

Thank you for this great tool, Jim. We'll remember you.
PK)J[�
i��(share/gems/gems/rake-13.2.1/History.rdocnu�[���=== 13.0.6

* Additional fix for #389
  Pull request #390 by hsbt

=== 13.0.5

* Fixed the regression of #388
  Pull request #389 by hsbt

=== 13.0.4

* Fix rake test loader swallowing useful error information.
  Pull request #367 by deivid-rodriguez
* Add -C/--directory option the same as GNU make.
  Pull request #376 by nobu

=== 13.0.3

* Fix breaking change of execution order on TestTask.
  Pull request #368 by ysakasin

=== 13.0.2

==== Enhancements

* Fix tests to work with current FileUtils
  Pull Request #358 by jeremyevans
* Simplify default rake test loader
  Pull Request #357 by deivid-rodriguez
* Update rdoc
  Pull Request #366 by bahasalien
* Update broken links to rake articles from Avdi in README
  Pull Request #360 by svl7

=== 13.0.1

==== Bug fixes

* Fixed bug: Reenabled task raises previous exception on second invokation 
  Pull Request #271 by thorsteneckel
* Fix an incorrectly resolved arg pattern
  Pull Request #327 by mjbellantoni

=== 13.0.0

==== Enhancements

* Follows recent changes on keyword arguments in ruby 2.7.
  Pull Request #326 by nobu
* Make `PackageTask` be able to omit parent directory while packing files 
  Pull Request #310 by tonytonyjan
* Add order only dependency
  Pull Request #269 by take-cheeze

==== Compatibility changes

* Drop old ruby versions(< 2.2)

=== 12.3.3

==== Bug fixes

* Use the application's name in error message if a task is not found.
  Pull Request #303 by tmatilai

==== Enhancements:

* Use File.open explicitly.

=== 12.3.2

==== Bug fixes

* Fixed test fails caused by 2.6 warnings.
  Pull Request #297 by hsbt

==== Enhancements:

* Rdoc improvements.
  Pull Request #293 by colby-swandale
* Improve multitask performance.
  Pull Request #273 by jsm
* Add alias `prereqs`.
  Pull Request #268 by take-cheeze

=== 12.3.1

==== Bug fixes

* Support did_you_mean >= v1.2.0 which has a breaking change on formatters.
  Pull request #262 by FUJI Goro.

==== Enhancements:

* Don't run task if it depends on already invoked but failed task.
  Pull request #252 by Gonzalo Rodriguez.
* Make space trimming consistent for all task arguments.
  Pull request #259 by Gonzalo Rodriguez.
* Removes duplicated inclusion of Rake::DSL in tests.
  Pull request #254 by Gonzalo Rodriguez.
* Re-raise a LoadError that didn't come from require in the test loader.
  Pull request #250 by Dylan Thacker-Smith.

=== 12.3.0

==== Compatibility Changes

* Bump `required_ruby_version` to Ruby 2.0.0. Rake has already
  removed support for Ruby 1.9.x.

==== Enhancements:

* Support `test-bundled-gems` task on ruby core.

=== 12.2.1

==== Bug fixes

* Fixed to break Capistrano::Application on capistrano3.

=== 12.2.0

==== Enhancements:

* Make rake easier to use as a library
  Pull request #211 by @drbrain
* Fix quadratic performance in FileTask#out_of_date?
  Pull request #224 by @doudou
* Clarify output when printing nested exception traces
  Pull request #232 by @urbanautomaton

==== Bug fixes

* Account for a file that match 2 or more patterns.
  Pull request #231 by @styd

=== 12.1.0

==== Enhancements:

* Added did_you_mean feature for invalid rake task.
  Pull request #221 by @xtina-starr
* Enabled to dependency chained by extensions. Pull request #39 by Petr Skocik.
* Make all of string literals to frozen objects on Ruby 2.4 or later.

==== Bug fixes

* Typo fixes in rakefile.rdoc. Pull request #180 by Yuta Kurotaki.
* Fix unexpected behavior of file task with dryrun option.
  Pull request #183 by @aycabta.
* Make LoadError from running tests more obvious. Pull request #195
  by Eric Hodel.
* Fix unexpected TypeError with hash style option. Pull request #202
  by Kuniaki IGARASHI.

=== 12.0.0

==== Compatibility Changes

* Removed arguments on clear #157 by Jesse Bowes
* Removed `rake/contrib` packages. These are extracted to `rake-contrib` gem.
* Removed deprecated method named `last\_comment`.

==== Enhancements:

* Re-use trace option on `cleanup` task. #164 by Brian Henderson
* Actions adore keyword arguments #174 by Josh Cheek
* Rake::TaskArguments#key? alias of #has_key? #175 by Paul Annesley

=== 11.3.0 / 2016-09-20

==== Enhancements:

* Remove to reference `Fixnum` constant. Pull request #160 by nobu

=== 11.2.2 / 2016-06-12

==== Bug fixes

* Fix unexpected behavior with multiple dependencies on Rake::TestTask

=== 11.2.1 / 2016-06-12

==== Bug fixes

* Fix regression of dependencies handling on Rake::TestTask. Report #139

=== 11.2.0 / 2016-06-11

==== Bug fixes

* Fix unexpected cut-out behavior on task description using triple dots
  and exclamation. Report #106 from Stephan Kämper and Pull request #134 by Lee
* Fix empty argument assignment with `with_defaults` option. Pull request #135
  by bakunyo
* Ignore to use `hwprefs` on Darwin platform. Use sysctl now. Report #128

==== Enhancements

* Spawn options for sh Pull equest #138 by Eric Hodel.
* Allow to specify dependencies(prerequisites) for Rake::TestTask
  Pull request #117 by Tim Maslyuchenko
* Use Bundler task instead of hoe for gem release.
* Remove explicitly load to rubygems for Ruby 1.8.
* Unify to declare `Rake::VERSION`.
* Support xz format for PackageTask.

=== 11.1.2 / 2016-03-28

==== Bug fixes

* Remove `-W` option when Rake::TestTask#verbose enabled. It's misunderstanding
  specification change with Rake 11. Partly revert #67

=== 11.1.1 / 2016-03-14

==== Bug fixes

* Use `-W` instead of `--verbose` when Rake::TestTask#verbose enabled.
  JRuby doesn't have `--verbose` option.

=== 11.1.0 / 2016-03-11

==== Compatibility Changes

* Revert to remove `last\_comment`. It will remove Rake 12.

=== 11.0.1 / 2016-03-09

==== Bug fixes

* Fixed packaging manifest.

=== 11.0.0 / 2016-03-09

==== Bug fixes

* Correctly handle bad encoding in exception messages. Pull request #113
  by Tomer Brisker
* Fix verbose option at TestTask. Pull request #67 by Mike Blumtritt

==== Enhancements

* Make FileList#exclude more analogous to FileList#include.
* Use IO.open instead of Open3.popen3 for CPU counter.
* Make Rake::Task#already_invoked publicly accessible.
  Pull request #93 by Joe Rafaniello
* Lookup prerequisites with same name outside of scope instead of
  matching self. Pull request #96 by Sandy Vanderbleek
* Make FileList#pathmap behave like String#pathmap.
  Pull request #61 by Daniel Tamai
* Add fetch method to task arguments.
  Pull request #12 by Chris Keathley
* Use ruby warnings by default. Pull request #97 by Harold Giménez

==== Compatibility Changes

* Removed to support Ruby 1.8.x
* Removed constant named `RAKEVERSION`
* Removed Rake::AltSystem
* Removed Rake::RubyForgePublisher
* Removed Rake::TaskManager#last\_comment. Use last\_description.
* Removed Rake::TaskLib#paste
* Removed Top-level SshDirPublisher, SshFreshDirPublisher, SshFilePublisher
  and CompositePublisher from lib/rake/contrib/publisher.rb
* Removed "rake/runtest.rb"

=== 10.5.0 / 2016-01-13

==== Enhancements

* Removed monkey patching for Ruby 1.8. Pull request #46 by Pablo Herrero.
* Inheritance class of Rake::FileList returns always self class.
  Pull request #74 by Thomas Scholz

=== 10.4.2 / 2014-12-02

==== Bug fixes

* Rake no longer edits ARGV.  This allows you to re-exec rake from a rake
  task.  Pull requset #9 by Matt Palmer.
* Documented how Rake::DSL#desc handles sentences in task descriptions.
  Issue #7 by Raza Sayed.
* Fixed test error on 1.9.3 with legacy RubyGems.  Issue #8 by Matt Palmer.
* Deleted duplicated History entry.  Pull request #10 by Yuji Yamamoto.

=== 10.4.1 / 2014-12-01

==== Bug fixes

* Reverted fix for #277 as it caused numerous issues for rake users.
  rails/spring issue #366 by Gustavo Dutra.

=== 10.4.0 / 2014-11-22

==== Enhancements

* Upgraded to minitest 5.  Pull request #292 by Teo Ljungberg.
* Added support for Pathname in rake tasks.  Pull request #271 by Randy
  Coulman.
* Rake now ignores falsy dependencies which allows for easier programmatic
  creation of tasks.  Pull request #273 by Manav.
* Rake no longer edits ARGV.  This allows you to re-exec rake from a rake
  task.  Issue #277 by Matt Palmer.
* Etc.nprocessors is used for counting the number of CPUs.

==== Bug fixes

* Updated rake manpage.  Issue #283 by Nathan Long, pull request #291 by
  skittleys.
* Add Rake::LATE to allow rebuilding of files that depend on deleted files.
  Bug #286, pull request #287 by David Grayson.
* Fix relinking of files when repackaging.  Bug #276 by Muenze.
* Fixed some typos.  Pull request #280 by Jed Northridge.
* Try counting CPUs via cpuinfo if host_os was not matched.  Pull request
  #282 by Edouard B.

=== 10.3.2 / 2014-05-15

==== Bug fixes

* Rake no longer infinitely loops when showing exception causes that refer to
  each other.  Bug #272 by Chris Bandy.
* Fixed documentation typos.  Bug #275 by Jake Worth.

=== 10.3.1 / 2014-04-17

==== Bug fixes

* Really stop reporting an error when cleaning already-deleted files.  Pull
  request #269 by Randy Coulman
* Fixed infinite loop when cleaning already-deleted files on windows.

=== 10.3 / 2014-04-15

==== Enhancements

* Added --build-all option to rake which treats all file prerequisites as
  out-of-date.  Pull request #254 by Andrew Gilbert.
* Added Rake::NameSpace#scope.  Issue #263 by Jon San Miguel.

==== Bug fixes

* Suppress org.jruby package files in rake error messages for JRuby users.
  Issue #213 by Charles Nutter.
* Fixed typo, removed extra "h".  Pull request #267 by Hsing-Hui Hsu.
* Rake no longer reports an error when cleaning already-deleted files.  Pull
  request #266 by Randy Coulman.
* Consume stderr while determining CPU count to avoid hang.  Issue #268 by
  Albert Sun.

=== 10.2.2 / 2014-03-27

==== Bug fixes

* Restored Ruby 1.8.7 compatibility

=== 10.2.1 / 2014-03-25

==== Bug fixes

* File tasks including a ':' are now top-level tasks again.  Issue #262 by
  Josh Holtrop.
* Use sysctl for CPU count for all BSDs.  Pull request #261 by Joshua Stein.
* Fixed CPU detection for unknown platforms.

=== 10.2.0 / 2014-03-24

==== Enhancements

* Rake now requires Ruby 1.9 or newer.  For me, this is a breaking change, but
  it seems that Jim planned to release it with Rake 10.2.  See also pull
  request #247 by Philip Arndt.
* Rake now allows you to declare tasks under a namespace like:

    task 'a:b' do ... end

  Pull request #232 by Judson Lester.
* Task#source defaults to the first prerequisite in non-rule tasks.  Pull
  request #215 by Avdi Grimm.
* Rake now automatically rebuilds and reloads imported files.  Pull request
  #209 by Randy Coulman.
* The rake task arguments can contain escaped commas.  Pull request #214 by
  Filip Hrbek.
* Rake now prints the exception class on errors.  Patch #251 by David Cornu.

==== Bug fixes

* Fixed typos.  Pull request #256 by Valera Rozuvan, #250 via Jake Worth, #260
  by Zachary Scott.
* Fixed documentation for calling tasks with arguments.  Pull request #235 by
  John Varghese.
* Clarified `rake -f` usage message.  Pull request #252 by Marco Pfatschbacher.
* Fixed a test failure on windows.  Pull request #231 by Hiroshi Shirosaki.
* Fixed corrupted rake.1.gz.  Pull request #225 by Michel Boaventura.
* Fixed bug in can\_detect\_signals? in test.  Patch from #243 by Alexey
  Borzenkov.

=== 10.1.1

* Use http://github.com/jimweirich/rake instead of http://rake.rubyforge.org for
  canonical project url.

=== 10.1.0

==== Changes

===== New Features

* Add support for variable length task argument lists. If more actual
  arguments are supplied than named arguments, then the extra
  arguments values will be in args.extras.

* Application name is not displayed in the help banner. (Previously
  "rake" was hardcoded, now rake-based applications can display their
  own names).

===== Bug Fixes

Bug fixes include:

* Fix backtrace suppression issues.

* Rules now explicit get task arguments passed to them.

* Rename FileList#exclude? to FileList#exclude\_from\_list? to avoid
  conflict with new Rails method.

* Clean / Clobber tasks now report failure to remove files.

* Plus heaps of internal code cleanup.

==== Thanks

As usual, it was input from users that drove a lot of these changes.
The following people contributed patches, made suggestions or made
otherwise helpful comments. Thanks to ...

* Michael Nikitochkin (general code cleanup)
* Vipul A M (general code cleanup)
* Dennis Bell (variable length task argument lists)
* Jacob Swanner (rules arguments)
* Rafael Rosa Fu (documentation typo)
* Stuart Nelson (install.rb fixes)
* Lee Hambley (application name in help banner)

-- Jim Weirich

=== 10.0.3

  "Jim, when will Rake reach version 1.0?"

Over the past several years I've been asked that question at
conferences, panels and over twitter. Due to historical reasons (or
maybe just plain laziness) Rake has (incorrectly) been treating the
second digit of the version as the major release number. So in my head
Rake was already at version 9.

Well, it's time to fix things. This next version of Rake drops old,
crufty, backwards compatibility hacks such as top level constants, DSL
methods defined in Object and numerous other features that are just no
longer desired. It's also time to drop the leading zero from the
version number as well and call this new version of rake what it
really is: Version 10.

So, welcome to Rake 10.0!

Rake 10 is actually feature identical to the latest version of Rake 9
(that would be the version spelled 0.9.3), *except* that Rake 10 drops
all the sundry deprecated features that have accumulated over the years.

If your Rakefile is up to date and current with all the new features
of Rake 10, you are ready to go. If your Rakefile still uses a few
deprecated feeatures, feel free to use Rake 9 (0.9.3) with the same
feature set. Just be aware that future features will be in Rake 10
family line.

==== Changes

As mentioned above, there are no new features in Rake 10. However,
there are a number of features missing:

* Classic namespaces are now gone. Rake is no longer able to reflect
  the options settings in the global variables ($rakefile, $show\_tasks,
  $show\_prereqs, $trace, $dryrun and $silent). The
  <tt>--classic-namespace</tt> option is no longer supported.

* Global constants are no longer supported. This includes
  <tt>Task</tt>, <tt>FileTask</tt>, <tt>FileCreationTask</tt> and
  <tt>RakeApp</tt>). The constant missing hook to warn about using
  global rake constants has been removed.

* The Rake DSL methods (task, file, directory, etc) are in their own
  module (Rake::DSL). The stub versions of these methods (that printed
  warnings) in Object have been removed. However, the DSL methods are
  added to the top-level <tt>main</tt> object. Since <tt>main</tt> is
  not in the inheritance tree, the presence of the DSL methods in main
  should be low impact on other libraries.

  If you want to use the Rake DSL commands from your own code, just
  include <tt>Rake::DSL</tt> into your own classes and modules.

* The deprecated syntax for task arguments (the one using
  <tt>:needs</tt>) has been removed.

* The <tt>--reduce-compat</tt> flag has been removed (it's not needed
  anymore).

* The deprecated <tt>rake/sys.rb</tt> library has been removed.

* The deprecated <tt>rake/rdoctask.rb</tt> library has been removed.
  RDoc supplies its own rake task now.

* The deprecated <tt>rake/gempackagetask.rb</tt> library has been
  removed. Gem supplies its own package task now.

There is one small behavioral change:

* Non-file tasks now always report the current time as their time
  stamp. This is different from the previous behavior where non-file
  tasks reported current time only if there were no prerequisites, and
  the max prerequisite timestamp otherwise. This lead to inconsistent
  and surprising behavior when adding prerequisites to tasks that in
  turn were prequisites to file tasks. The new behavior is more
  consistent and predictable.

==== Changes (from 0.9.3, 0.9.4, 0.9.5)

Since Rake 10 includes the changes from the last version of Rake 9,
we'll repeat the changes for versions 0.9.3 through 0.9.5 here.

===== New Features (in 0.9.3)

* Multitask tasks now use a thread pool. Use -j to limit the number of
  available threads.

* Use -m to turn regular tasks into multitasks (use at your own risk).

* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to
  programatically add rake task libraries.

* You can specific backtrace suppression patterns (see
  --suppress-backtrace)

* Directory tasks can now take prerequisites and actions

* Use --backtrace to request a full backtrace without the task trace.

* You can say "--backtrace=stdout" and "--trace=stdout" to route trace
  output to standard output rather than standard error.

* Optional 'phony' target (enable with 'require 'rake/phony'") for
  special purpose builds.

* Task#clear now clears task comments as well as actions and
  prerequisites. Task#clear_comment will specifically target comments.

* The --all option will force -T and -D to consider all the tasks,
  with and without descriptions.

===== Bug Fixes (in 0.9.3)

* Semi-colons in windows rakefile paths now work.

* Improved Control-C support when invoking multiple test suites.

* egrep method now reads files in text mode (better support for
  Windows)

* Better deprecation line number reporting.

* The -W option now works with all tasks, whether they have a
  description or not.

* File globs in rake should not be sorted alphabetically, independent
  of file system and platform.

* Numerous internal improvements.

* Documentation typos and fixes.

===== Bug Fixes (in 0.9.4)

* Exit status with failing tests is not correctly set to non-zero.

* Simplified syntax for phony task (for older versions of RDoc).

* Stand alone FileList usage gets glob function (without loading in
  extra dependencies)

===== Bug Fixes (in 0.9.5)

* --trace and --backtrace no longer swallow following task names.

==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 10.0.2

==== Changes

===== Bug Fixes

* --trace and --backtrace no longer swallow following task names.

==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 10.0.1

==== Changes

===== Bug Fixes

* Exit status with failing tests is not correctly set to non-zero.

* Simplified syntax for phony task (for older versions of RDoc).

* Stand alone FileList usage gets glob function (without loading in
  extra dependencies)

==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 10.0.0

  "Jim, when will Rake reach version 1.0?"

Over the past several years I've been asked that question at
conferences, panels and over twitter. Due to historical reasons (or
maybe just plain laziness) Rake has (incorrectly) been treating the
second digit of the version as the major release number. So in my head
Rake was already at version 9.

Well, it's time to fix things. This next version of Rake drops old,
crufty, backwards compatibility hacks such as top level constants, DSL
methods defined in Object and numerous other features that are just no
longer desired. It's also time to drop the leading zero from the
version number as well and call this new version of rake what it
really is: Version 10.

So, welcome to Rake 10.0!

Rake 10 is actually feature identical to the latest version of Rake 9
(that would be the version spelled 0.9.3), *except* that Rake 10 drops
all the sundry deprecated features that have accumulated over the years.

If your Rakefile is up to date and current with all the new features
of Rake 10, you are ready to go. If your Rakefile still uses a few
deprecated feeatures, feel free to use Rake 9 (0.9.3) with the same
feature set. Just be aware that future features will be in Rake 10
family line.

==== Changes in 10.0

As mentioned above, there are no new features in Rake 10. However,
there are a number of features missing:

* Classic namespaces are now gone. Rake is no longer able to reflect
  the options settings in the global variables ($rakefile, $show\_tasks,
  $show\_prereqs, $trace, $dryrun and $silent). The
  <tt>--classic-namespace</tt> option is no longer supported.

* Global constants are no longer supported. This includes
  <tt>Task</tt>, <tt>FileTask</tt>, <tt>FileCreationTask</tt> and
  <tt>RakeApp</tt>). The constant missing hook to warn about using
  global rake constants has been removed.

* The Rake DSL methods (task, file, directory, etc) are in their own
  module (Rake::DSL). The stub versions of these methods (that printed
  warnings) in Object have been removed. However, the DSL methods are
  added to the top-level <tt>main</tt> object. Since <tt>main</tt> is
  not in the inheritance tree, the presence of the DSL methods in main
  should be low impact on other libraries.

  If you want to use the Rake DSL commands from your own code, just
  include <tt>Rake::DSL</tt> into your own classes and modules.

* The deprecated syntax for task arguments (the one using
  <tt>:needs</tt>) has been removed.

* The <tt>--reduce-compat</tt> flag has been removed (it's not needed
  anymore).

* The deprecated <tt>rake/sys.rb</tt> library has been removed.

* The deprecated <tt>rake/rdoctask.rb</tt> library has been removed.
  RDoc supplies its own rake task now.

* The deprecated <tt>rake/gempackagetask.rb</tt> library has been
  removed. Gem supplies its own package task now.

There is one small behavioral change:

* Non-file tasks now always report the current time as their time
  stamp. This is different from the previous behavior where non-file
  tasks reported current time only if there were no prerequisites, and
  the max prerequisite timestamp otherwise. This lead to inconsistent
  and surprising behavior when adding prerequisites to tasks that in
  turn were prequisites to file tasks. The new behavior is more
  consistent and predictable.

==== Changes (from 0.9.3)

Since Rake 10 includes the changes from the last version of Rake 9,
we'll repeat the changes for version 0.9.3 here.

===== New Features

* Multitask tasks now use a thread pool. Use -j to limit the number of
  available threads.

* Use -m to turn regular tasks into multitasks (use at your own risk).

* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to
  programatically add rake task libraries.

* You can specific backtrace suppression patterns (see
  --suppress-backtrace)

* Directory tasks can now take prerequisites and actions

* Use --backtrace to request a full backtrace without the task trace.

* You can say "--backtrace=stdout" and "--trace=stdout" to route trace
  output to standard output rather than standard error.

* Optional 'phony' target (enable with 'require 'rake/phony'") for
  special purpose builds.

* Task#clear now clears task comments as well as actions and
  prerequisites. Task#clear_comment will specifically target comments.

* The --all option will force -T and -D to consider all the tasks,
  with and without descriptions.

===== Bug Fixes

* Semi-colons in windows rakefile paths now work.

* Improved Control-C support when invoking multiple test suites.

* egrep method now reads files in text mode (better support for
  Windows)

* Better deprecation line number reporting.

* The -W option now works with all tasks, whether they have a
  description or not.

* File globs in rake should not be sorted alphabetically, independent
  of file system and platform.

* Numerous internal improvements.

* Documentation typos and fixes.


==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.6

Rake version 0.9.6 contains a number of fixes mainly for merging
Rake into the Ruby source tree and fixing tests.

==== Changes

===== Bug Fixes (0.9.6)

* Better trace output when using a multi-threaded Rakefile.
* Arg parsing is now consistent for tasks and multitasks.
* Skip exit code test in versions of Ruby that don't support it well.

Changes for better integration with the Ruby source tree:

* Fix version literal for Ruby source tree build.
* Better loading of libraries for testing in Ruby build.
* Use the ruby version provided by Ruby's tests.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.5

Rake version 0.9.5 contains a number of bug fixes.

==== Changes

===== Bug Fixes (0.9.5)

* --trace and --backtrace no longer swallow following task names.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.4

Rake version 0.9.4 contains a number of bug fixes.

==== Changes

===== Bug Fixes (0.9.4)

* Exit status with failing tests is not correctly set to non-zero.

* Simplified syntax for phony task (for older versions of RDoc).

* Stand alone FileList usage gets glob function (without loading in
  extra dependencies)

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.3

Rake version 0.9.3 contains some new, backwards compatible features and
a number of bug fixes.

==== Changes

===== New Features

* Multitask tasks now use a thread pool. Use -j to limit the number of
  available threads.

* Use -m to turn regular tasks into multitasks (use at your own risk).

* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to
  programatically add rake task libraries.

* You can specific backtrace suppression patterns (see
  --suppress-backtrace)

* Directory tasks can now take prerequisites and actions

* Use --backtrace to request a full backtrace without the task trace.

* You can say "--backtrace=stdout" and "--trace=stdout" to route trace
  output to standard output rather than standard error.

* Optional 'phony' target (enable with 'require 'rake/phony'") for
  special purpose builds.

* Task#clear now clears task comments as well as actions and
  prerequisites. Task#clear_comment will specifically target comments.

* The --all option will force -T and -D to consider all the tasks,
  with and without descriptions.

===== Bug Fixes

* Semi-colons in windows rakefile paths now work.

* Improved Control-C support when invoking multiple test suites.

* egrep method now reads files in text mode (better support for
  Windows)

* Better deprecation line number reporting.

* The -W option now works with all tasks, whether they have a
  description or not.

* File globs in rake should not be sorted alphabetically, independent
  of file system and platform.

* Numerous internal improvements.

* Documentation typos and fixes.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== Rake 0.9.2.2

Rake version 0.9.2.2 is mainly bug fixes.

==== Changes

* The rake test loader now removes arguments it has processed.  Issue #51
* Rake::TaskArguments now responds to #values\_at
* RakeFileUtils.verbose_flag = nil silences output the same as 0.8.7
* Rake tests are now directory-independent
* Rake tests are no longer require flexmock
* Commands constant is no longer polluting top level namespace.
* Show only the interesting portion of the backtrace by default (James M. Lawrence).
* Added --reduce-compat option to remove backward compatible DSL hacks (James M. Lawrence).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich

=== 0.9.2

Rake version 0.9.2 has a few small fixes.  See below for details.

==== Changes

* Support for Ruby 1.8.6 was fixed.
* Global DSL warnings now honor --no-deprecate

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich

=== 0.9.1

Rake version 0.9.1 has a number of bug fixes and enhancments (see
below for more details).  Additionally, the internals have be slightly
restructured and improved.

==== Changes

Rake 0.9.1 adds back the global DSL methods, but with deprecation
messages.  This allows Rake 0.9.1 to be used with older rakefiles with
warning messages.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich

=== 0.9.0

Rake version 0.9.0 has a number of bug fixes and enhancments (see
below for more details).  Additionally, the internals have be slightly
restructured and improved.

==== Changes

===== New Features / Enhancements / Bug Fixes in Version 0.9.0

* Rake now warns when the deprecated :needs syntax used (and suggests
  the proper syntax in the warning).

* Moved Rake DSL commands to top level ruby object 'main'.  Rake DSL
  commands are no longer private methods in Object. (Suggested by
  James M. Lawrence/quix)

* Rake now uses case-insensitive comparisons to find the Rakefile on Windows.
  Based on patch by Roger Pack.

* Rake now requires (instead of loads) files in the test task.  Patch by Cezary
  Baginski.

* Fixed typos.  Patches by Sean Scot August Moon and R.T. Lechow.

* Rake now prints the Rakefile directory only when it's different from the
  current directory.  Patch by Alex Chaffee.

* Improved rakefile_location discovery on Windows.  Patch by James Tucker.

* Rake now recognizes "Windows Server" as a windows system.  Patch by Matthias
  Lüdtke

* Rake::RDocTask is deprecated.  Use RDoc::Task from RDoc 2.4.2+ (require
  'rdoc/task')

* Rake::GemPackageTask is deprecated.  Use Gem::PackageTask (require
  'rubygems/package\_task')

* Rake now outputs various messages to $stderr instead of $stdout.

* Rake no longer emits warnings for Config.  Patch by Santiago Pastorino.

* Removed Rake's DSL methods from the top level scope.  If you need to
  call 'task :xzy' in your code, include Rake::DSL into your class, or
  put the code in a Rake::DSL.environment do ... end block.

* Split rake.rb into individual files.

* Support for the --where (-W) flag for showing where a task is defined.

* Fixed quoting in test task.
  (http://onestepback.org/redmine/issues/show/44,
  http://www.pivotaltracker.com/story/show/1223138)

* Fixed the silent option parsing problem.
  (http://onestepback.org/redmine/issues/show/47)

* Fixed :verbose=>false flag on sh and ruby commands.

* Rake command line options may be given by default in a RAKEOPT
  environment variable.

* Errors in Rake will now display the task invocation chain in effect
  at the time of the error.

* Accepted change by warnickr to not expand test patterns in shell
  (allowing more files in the test suite).

* Fixed that file tasks did not perform prereq lookups in scope
  (Redmine #57).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich


=== 0.8.7

Rake version 0.8.5 introduced greatly improved support for executing
commands on Windows.  The "sh" command now has the same semantics on
Windows that it has on Unix based platforms.

Rake version 0.8.6 includes minor fixes the the RDoc generation.
Rake version 0.8.7 includes a minor fix for JRuby running on windows.

==== Changes

===== New Features / Enhancements in Version 0.8.5

* Improved implementation of the Rake system command for Windows.
  (patch from James M. Lawrence/quix)

* Support for Ruby 1.9's improved system command.  (patch from James
  M. Lawrence/quix)

* Rake now includes the configured extension when invoking an
  executable (Config::CONFIG['EXEEXT])

===== Bug Fixes in Version 0.8.5

* Environment variable keys are now correctly cased (it matters in
  some implementations).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Charles Nutter

-- Jim Weirich

=== 0.8.6

Rake version 0.8.5 introduced greatly improved support for executing
commands on Windows.  The "sh" command now has the same semantics on
Windows that it has on Unix based platforms.

Rake version 0.8.5 includes minor fixes the the RDoc generation.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence/quix
* Luis Lavena

-- Jim Weirich

=== 0.8.5

Rake version 0.8.5 is a new release of Rake with greatly improved
support for executing commands on Windows.  The "sh" command now has
the same semantics on Windows that it has on Unix based platforms.

==== Changes

===== New Features / Enhancements in Version 0.8.5

* Improved implementation of the Rake system command for Windows.
  (patch from James M. Lawrence/quix)

* Support for Ruby 1.9's improved system command.  (patch from James
  M. Lawrence/quix)

* Rake now includes the configured extension when invoking an
  executable (Config::CONFIG['EXEEXT])

===== Bug Fixes in Version 0.8.5

* Environment variable keys are now correctly cased (it matters in
  some implementations).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence/quix
* Luis Lavena

-- Jim Weirich

=== 0.8.4

Rake version 0.8.4 is a bug-fix release of rake.

NOTE: The version of Rake that comes with Ruby 1.9 has diverged
      slightly from the core Rake code base.  Rake 0.8.4 will work
      with Ruby 1.9, but is not a strict upgrade for the Rake that
      comes with Ruby 1.9.  A (near) future release of Rake will unify
      those two codebases.

==== Letter Writing Campaign

Thanks to Aaron Patterson (@tenderlove) and Eric Hodel (@drbrain) for
their encouraging support in organizing a letter writing campaign to
lobby for the "Warning Free" release of rake 0.8.4.  A special callout
goes to Jonathan D. Lord, Sr (Dr. Wingnut) whose postcard was the
first to actually reach me. (see
http://tenderlovemaking.com/2009/02/26/we-need-a-new-version-of-rake/
for details)

==== Changes

===== New Features / Enhancements in Version 0.8.4

* Case is preserved on rakefile names. (patch from James
  M. Lawrence/quix)

* Improved Rakefile case insensitivity testing (patch from Luis
  Lavena).

* Windows system dir search order is now: HOME, HOMEDRIVE + HOMEPATH,
  APPDATA, USERPROFILE (patch from Luis Lavena)

* MingGW is now recognized as a windows platform.  (patch from Luis
  Lavena)

===== Bug Fixes in Version 0.8.4

* Removed reference to manage_gem to fix the warning produced by the
  gem package task.

* Fixed stray ARGV option problem that was interfering with
  Test::Unit::Runner. (patch from Pivotal Labs)

===== Infrastructure Improvements in Version 0.8.4

* Numerous fixes to the windows test suite (patch from Luis Lavena).

* Improved Rakefile case insensitivity testing (patch from Luis
  Lavena).

* Better support for windows paths in the test task (patch from Simon
  Chiang/bahuvrihi)

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence/quix
* Luis Lavena
* Pivotal Labs
* Simon Chiang/bahuvrihi

-- Jim Weirich

=== 0.8.3

Rake version 0.8.3 is a bug-fix release of rake.

==== Changes

===== Bug Fixes in Version 0.8.3

* Enhanced the system directory detection in windows. We now check
  HOMEDRIVE/HOMEPATH and USERPROFILE if APPDATA isn't found. (Patch
  supplied by James Tucker). Rake no long aborts if it can't find the
  directory.

* Added fix to handle ruby installations in directories with spaces in
  their name.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Edwin Pratomo
* Gavin Stark
* Adam Q. Salter
* Adam Majer
* Emanuel Indermühle
* Ittay Dror
* Bheeshmar Redheendran (for spending an afternoon with me debugging
  windows issues)

-- Jim Weirich


=== 0.8.2

Rake version 0.8.2 is a new release of rake that includes a number of
new features and numerous bug fixes.

==== Changes

===== New Features in Version 0.8.2

* Switched from getoptlong to optparse (patches supplied by Edwin
  Pratomo).

* The -T option will now attempt to dynamically sense the size of the
  terminal. The -T output will only self-truncate if the output is a
  tty. However, if RAKE_COLUMNS is explicitly set, it will be honored
  in any case. (Patch provided by Gavin Stark).

* The following public methods have been added to rake task objects:

  * task.clear -- Clear both the prerequisites and actions of the
    target rake task.
  * task.clear_prerequisites -- Clear all the existing prerequisites
    from the target rake task.
  * task.clear_actions -- Clear all the existing actions from the
    target rake task.
  * task.reenable -- Re-enable a task, allowing its actions to be
    executed again if the task is invoked.

* Changed RDoc test task to have no default template. This makes it
  easier for the tempate to pick up the template from the environment.

* Default values for task arguments can easily be specified with the
  :with_defaults method. (Idea for default argument merging supplied
  by (Adam Q. Salter)

===== Bug Fixes in Version 0.8.2

* Fixed bug in package task so that it will include the subdir
  directory in the package for testing. (Bug found by Adam Majer)

* Fixed filename dependency order bug in test\_inspect\_pending and
  test\_to\_s\_pending. (Bug found by Adam Majer)

* Fixed check for file utils options to make them immune to the
  symbol/string differences. (Patch supplied by Edwin Pratomo)

* Fixed bug with rules involving multiple source, where only the first
  dependency of a rule has any effect (Patch supplied by Emanuel
  Indermühle)

* FileList#clone and FileList#dup have better sematics w.r.t. taint
  and freeze.

* Changed from using Mutex to Monitor. Evidently Mutex causes thread
  join errors when Ruby is compiled with -disable-pthreads. (Patch
  supplied by Ittay Dror)

* Fixed bug in makefile parser that had problems with extra spaces in
  file task names. (Patch supplied by Ittay Dror)

==== Other changes in Version 0.8.2

* Added ENV var to rake's own Rakefile to prevent OS X from including
  extended attribute junk in the rake package tar file. (Bug found by
  Adam Majer)

* Added a performance patch for reading large makefile dependency
  files. (Patch supplied by Ittay Dror)

==== Task Argument Examples

Prior to version 0.8.0, rake was only able to handle command line
arguments of the form NAME=VALUE that were passed into Rake via the
ENV hash.  Many folks had asked for some kind of simple command line
arguments, perhaps using "--" to separate regular task names from
argument values on the command line.  The problem is that there was no
easy way to associate positional arguments on the command line with
different tasks.  Suppose both tasks :a and :b expect a command line
argument: does the first value go with :a?  What if :b is run first?
Should it then get the first command line argument.

Rake 0.8.0 solves this problem by explicitly passing values directly
to the tasks that need them.  For example, if I had a release task
that required a version number, I could say:

   rake release[0.8.2]

And the string "0.8.2" will be passed to the :release task.  Multiple
arguments can be passed by separating them with a comma, for example:

   rake name[john,doe]

Just a few words of caution.  The rake task name and its arguments
need to be a single command line argument to rake.  This generally
means no spaces.  If spaces are needed, then the entire rake +
argument string should be quoted.  Something like this:

   rake "name[billy bob, smith]"

(Quoting rules vary between operating systems and shells, so make sure
you consult the proper docs for your OS/shell).

===== Tasks that Expect Parameters

Parameters are only given to tasks that are setup to expect them.  In
order to handle named parameters, the task declaration syntax for
tasks has been extended slightly.

For example, a task that needs a first name and last name might be
declared as:

   task :name, :first_name, :last_name

The first argument is still the name of the task (:name in this case).
The next to argumements are the names of the parameters expected by
:name (:first_name and :last_name in the example).

To access the values of the parameters, the block defining the task
behaviour can now accept a second parameter:

   task :name, :first_name, :last_name do |t, args|
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

The first argument of the block "t" is always bound to the current
task object.  The second argument "args" is an open-struct like object
that allows access to the task arguments.  Extra command line
arguments to a task are ignored.  Missing command line arguments are
given the nil value.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Edwin Pratomo
* Gavin Stark
* Adam Q. Salter
* Adam Majer
* Emanuel Indermühle
* Ittay Dror
* Bheeshmar Redheendran (for spending an afternoon with me debugging
  windows issues)

-- Jim Weirich

=== 0.8.0/0.8.1

Rake version 0.8.0 is a new release of rake that includes serveral new
features.

==== Changes

===== New Features in Version 0.8.0

* Tasks can now receive command line parameters.  See the examples
  below for more details.

* Comments are limited to 80 columns on output, but full comments can
  be seen by using the -D parameter. (feature suggested by Jamis
  Buck).

* Explicit exit(n) calls will now set the exit status to n. (patch
  provided by Stephen Touset).

* Rake is now compatible with Ruby 1.9.

Version 0.8.1 is a minor update that includes additional Ruby 1.9
compatibility fixes.

==== Task Argument Examples

Prior to version 0.8.0, rake was only able to handle command line
arguments of the form NAME=VALUE that were passed into Rake via the
ENV hash.  Many folks had asked for some kind of simple command line
arguments, perhaps using "--" to separate regular task names from
argument values on the command line.  The problem is that there was no
easy way to associate positional arguments on the command line with
different tasks.  Suppose both tasks :a and :b expect a command line
argument: does the first value go with :a?  What if :b is run first?
Should it then get the first command line argument.

Rake 0.8.0 solves this problem by explicitly passing values directly
to the tasks that need them.  For example, if I had a release task
that required a version number, I could say:

   rake release[0.8.0]

And the string "0.8.0" will be passed to the :release task.  Multiple
arguments can be passed by separating them with a comma, for example:

   rake name[john,doe]

Just a few words of caution.  The rake task name and its arguments
need to be a single command line argument to rake.  This generally
means no spaces.  If spaces are needed, then the entire rake +
argument string should be quoted.  Something like this:

   rake "name[billy bob, smith]"

(Quoting rules vary between operating systems and shells, so make sure
you consult the proper docs for your OS/shell).

===== Tasks that Expect Parameters

Parameters are only given to tasks that are setup to expect them.  In
order to handle named parameters, the task declaration syntax for
tasks has been extended slightly.

For example, a task that needs a first name and last name might be
declared as:

   task :name, :first_name, :last_name

The first argument is still the name of the task (:name in this case).
The next to argumements are the names of the parameters expected by
:name (:first_name and :last_name in the example).

To access the values of the parameters, the block defining the task
behaviour can now accept a second parameter:

   task :name, :first_name, :last_name do |t, args|
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

The first argument of the block "t" is always bound to the current
task object.  The second argument "args" is an open-struct like object
that allows access to the task arguments.  Extra command line
arguments to a task are ignored.  Missing command line arguments are
given the nil value.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Jamis Buck (for comment formatting suggestions)
* Stephen Touset (for exit status patch).

-- Jim Weirich


=== 0.7.3

Rake version 0.7.3 is a minor release that includes some refactoring to better
support custom Rake applications.

==== Changes

===== New Features in Version 0.7.3

* Added the +init+ and +top_level+ methods to make the creation of custom Rake applications a bit easier.  E.g.

    gem 'rake', ">= 0.7.3"
    require 'rake'

    Rake.application.init('myrake')

    task :default do
      something_interesting
    end

    Rake.application.top_level

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments. Thanks to ...

-- Jim Weirich


=== 0.7.2


Version 0.7.2 supplies a bug fix and a few minor enhancements. In
particular, the new version fixes an incompatibility with the soon to
be released Ruby 1.8.6.  We strongly recommend upgrading to Rake 0.7.2
in order to be compatible with the new version of Ruby.

==== Changes

===== Bug Fixes in 0.7.2

There are quite a number of bug fixes in the new 0.7.2 version of
Rake:

* Removed dependency on internal fu_xxx functions from FileUtils.

* Error messages are now send to stderr rather than stdout (from
  Payton Quackenbush).

* Better error handling on invalid command line arguments (from Payton
  Quackenbush).

* Fixed some bugs where the application object was going to the global
  appliation instead of using its own data.

* Fixed the method name leak from FileUtils (bug found by Glenn
  Vanderburg).

* Added test for noop, bad_option and verbose flags to sh command.

* Added a description to the gem task in GemPackageTask.

* Fixed a bug when rules have multiple prerequisites (patch by Joel
  VanderWerf)

* Added the handful of RakeFileUtils to the private method as well.

===== New Features in 0.7.2

The following new features are available in Rake version 0.7.2:

* Added square and curly bracket patterns to FileList#include (Tilman
  Sauerbeck).

* FileLists can now pass a block to FileList#exclude to exclude files
  based on calculated values.

* Added plain filename support to rule dependents (suggested by Nobu
  Nakada).

* Added pathmap support to rule dependents.  In other words, if a
  pathmap format (beginning with a '%') is given as a Rake rule
  dependent, then the name of the depend will be the name of the
  target with the pathmap format applied.

* Added a 'tasks' method to a namespace to get a list of tasks
  associated with the namespace.

* Added tar_command and zip_command options to the Package task.

* The clean task will no longer delete 'core' if it is a directory.

===== Internal Rake Improvements

The following changes will are mainly internal improvements and
refactorings and have little effect on the end user.  But they may be
of interest to the general public.

* Added rcov task and updated unit testing for better code coverage.

* Added a 'shame' task to the Rakefile.

* Added rake_extension to handle detection of extension collisions.

* Added a protected 'require "rubygems"' to test/test_application to
  unbreak cruisecontrol.rb.

* Removed rake\_dup.  Now we just simply rescue a bad dup.

* Refactored the FileList reject logic to remove duplication.

* Removed if \_\_FILE\_\_ at the end of the rake.rb file.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* Payton Quackenbush -- For several error handling improvements.

* Glenn Vanderburg -- For finding and fixing the method name leak from
  FileUtils.

* Joel VanderWerf -- for finding and fixing a bug in the handling of
  multiple prerequisites.

* Tilman Sauerbeck -- For some enhancing FileList to support more
  advanced file globbing.

* Nobu Nakada -- For suggesting plain file name support to rule dependents.

-- Jim Weirich

=== 0.7.1

Version 0.7.1 supplies a bug fix and a few minor enhancements.

==== Changes

===== Bug Fixes in 0.7.1

* Changes in the exception reported for the FileUtils.ln caused
  safe_ln to fail with a NotImplementedError.  Rake 0.7.1 will now
  catch that error or any StandardError and properly fall back to
  using +cp+.

===== New Features in 0.7.1

* You can filter the results of the --task option by supplying an
  optional regular expression.  This allows the user to easily find a
  particular task name in a long list of possible names.

* Transforming procs in a rule may now return a list of prerequisites.
  This allows more flexible rule formation.

* FileList and String now support a +pathmap+ melthod that makes the
  transforming paths a bit easier.  See the API docs for +pathmap+ for
  details.

* The -f option without a value will disable the search for a
  Rakefile.  This allows the Rakefile to be defined entirely in a
  library (and loaded with the -r option).  The current working
  directory is not changed when this is done.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* James Britt and Assaph Mehr for reporting and helping to debug the
  safe_ln issue.

-- Jim Weirich


=== 0.7.0

These changes for Rake have been brewing for a long time.  Here they
are, I hope you enjoy them.

==== Changes

===== New Features

* Name space support for task names (see below).
* Prerequisites can be executed in parallel (see below).
* Added safe_ln support for openAFS (via Ludvig Omholt).
* RDoc defaults to internal (in-process) invocation.  The old behavior
  is still available by setting the +external+ flag to true.
* Rakefiles are now loaded with the expanded path to prevent
  accidental pollution from the Ruby load path.
* Task objects my now be used in prerequisite lists directly.
* Task objects (in addition to task names) may now be included in the
  prerequisite list of a task.
* Internals cleanup and refactoring.

===== Bug Fixes

* Compatibility fixes for Ruby 1.8.4 FileUtils changes.

===== Namespaces

Tasks can now be nested inside their own namespaces.  Tasks within one
namespace will not accidentally interfer with tasks named in a different
namespace.

For example:

  namespace "main" do
    task :build do
      # Build the main program
    end
  end

  namespace "samples" do
    task :build do
      # Build the sample programs
    end
  end

  task :build_all => ["main:build", "samples:build"]

Even though both tasks are named :build, they are separate tasks in
their own namespaces.  The :build_all task (defined in the toplevel
namespace) references both build tasks in its prerequisites.

You may invoke each of the individual build tasks with the following
commands:

  rake main:build
  rake samples:build

Or invoke both via the :build_all command:

  rake build_all

Namespaces may be nested arbitrarily.  Since the name of file tasks
correspond to the name of a file in the external file system,
FileTasks are not affected by the namespaces.

See the Rakefile format documentation (in the Rake API documents) for
more information.

===== Parallel Tasks

Sometimes you have several tasks that can be executed in parallel.  By
specifying these tasks as prerequisites to a +multitask+ task.

In the following example the tasks copy\_src, copy\_doc and copy\_bin
will all execute in parallel in their own thread.

  multitask :copy_files => [:copy_src, :copy_doc, :copy_bin] do
    puts "All Copies Complete"
  end

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* Doug Young (inspiration for the parallel task)
* David Heinemeier Hansson (for --trace message enhancement and for
  pushing for namespace support).
* Ludvig Omholt (for the openAFS fix)

-- Jim Weirich

=== 0.6.1

* Rebuilt 0.6.0 gem without signing.

=== 0.6.0

Its time for some long requested enhancements and lots of bug fixes
... And a whole new web page.

==== New Web Page

The primary documentation for rake has moved from the RubyForge based
wiki to its own Hieraki based web site.  Constant spam on the wiki
made it a difficult to keep clean.  The new site will be easier to
update and organize.

Check out the new documentation at: http://docs.rubyrake.org

We will be adding new documentation to the site as time goes on.

In addition to the new docs page, make sure you check out Martin
Fowlers article on rake at http://martinfowler.com/articles/rake.html

==== Changes

===== New Features

* Multiple prerequisites on Rake rules now allowed.  However, keep the
  following in mind:

  1. All the prerequisites of a rule must be available before a rule
     is triggered, where "enabled" means (a) an existing file, (b) a
     defined rule, or (c) another rule which also must be
     trigger-able.
  2. Rules are checked in order of definition, so it is important to
     order your rules properly.  If a file can be created by two
     different rules, put the more specific rule first (otherwise the
     more general rule will trigger first and the specific one will
     never be triggered).
  3. The <tt>source</tt> method now returns the name of the first
     prerequisite listed in the rule.  <tt>sources</tt> returns the
     names of all the rule prerequisites, ordered as they are defined
     in the rule.  If the task has other prerequisites not defined in
     the rule (but defined in an explicit task definition), then they
     will _not_ be included in the sources list.

* FileLists may now use the egrep command.  This popular enhancement
  is now a core part of the FileList object.  If you want to get a
  list of all your to-dos, fixmes and TBD comments, add the following
  to your Rakefile.

    desc "Look for TODO and FIXME tags in the code"
    task :todo do
      FileList['**/*.rb'].egrep /#.*(FIXME|TODO|TBD)/
    end

* The <tt>investigation</tt> method was added to task object to dump
  out some important values.  This makes it a bit easier to debug Rake
  tasks.

  For example, if you are having problems with a particular task, just
  print it out:

    task :huh do
      puts Rake::Task['huh'].investigation
    end

* The Rake::TestTask class now supports a "ruby\_opts" option to pass
  arbitrary ruby options to a test subprocess.

===== Some Incompatibilities

* When using the <tt>ruby</tt> command to start a Ruby subprocess, the
  Ruby interpreter that is currently running rake is used by default.
  This makes it easier to use rake in an environment with multiple
  ruby installation.  (Previously, the first ruby command found in the
  PATH was used).

  If you wish to chose a different Ruby interpreter, you can
  explicitly choose the interpreter via the <tt>sh</tt> command.

* The major rake classes (Task, FileTask, FileCreationTask, RakeApp)
  have been moved out of the toplevel scope and are now accessible as
  Rake::Task, Rake::FileTask, Rake::FileCreationTask and
  Rake::Application.  If your Rakefile
  directly references any one of these tasks, you may:

  1. Update your Rakefile to use the new classnames
  2. Use the --classic-namespace option on the rake command to get the
     old behavior,
  3. Add <code>require 'rake/classic_namespace'</code> to the
     Rakefile to get the old behavior.

  <tt>rake</tt> will print a rather annoying warning whenever a
  deprecated class name is referenced without enabling classic
  namespace.

===== Bug Fixes

* Several unit tests and functional tests were fixed to run better
  under windows.

* Directory tasks are now a specialized version of a File task.  A
  directory task will only be triggered if it doesn't exist.  It will
  not be triggered if it is out of date w.r.t. any of its
  prerequisites.

* Fixed a bug in the Rake::GemPackageTask class so that the gem now
  properly contains the platform name.

* Fixed a bug where a prerequisite on a <tt>file</tt> task would cause
  an exception if the prerequisite did not exist.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* Greg Fast (better ruby_opt test options)
* Kelly Felkins (requested by better namespace support)
* Martin Fowler (suggested Task.investigation)
* Stuart Jansen (send initial patch for multiple prerequisites).
* Masao Mutch (better support for non-ruby Gem platforms)
* Philipp Neubeck (patch for file task exception fix)

-- Jim Weirich

=== 0.5.4

Time for some minor bug fixes and small enhancements

==== Changes

Here are the changes for version 0.5.4 ...

* Added double quotes to the test runner.  This allows the location of
  the tests (and runner) to be in a directory path that contains
  spaces (e.g. "C:/Program Files/ruby/bin").
* Added .svn to default ignore list.  Now subversion project metadata
  is automatically ignored by Rake's FileList.
* Updated FileList#include to support nested arrays and filelists.
  FileLists are flat lists of file names.  Using a FileList in an
  include will flatten out the nested file names.

== Thanks

As usual, it was input from users that drove a alot of these changes.
Thanks to ...

* Tilman Sauerbeck for the nested FileList suggestion.
* Josh Knowles for pointing out the spaces in directory name problem.

-- Jim Weirich

=== 0.5.3

Although it has only been two weeks since the last release, we have
enough updates to the Rake program to make it time for another
release.

==== Changes

Here are the changes for version 0.5.3 ...

* FileLists have been extensively changed so that they mimic the
  behavior of real arrays even more closely.  In particular,
  operations on FileLists that return a new collection (e.g. collect,
  reject) will now return a FileList rather than an array.  In
  addition, several places where FileLists were not properly expanded
  before use have been fixed.
* A method (+ext+) to simplify the handling of file extensions was
  added to String and to Array.
* The 'testrb' script in test/unit tends to silently swallow syntax
  errors in test suites.  Because of that, the default test loader is
  now a rake-provided script.  You can still use 'testrb' by setting
  the loader flag in the test task to :testrb.  (See the API documents
  for TestTask for all the loader flag values).
* FileUtil methods (e.g. cp, mv, install) are now declared to be
  private.  This will cut down on the interference with user defined
  methods of the same name.
* Fixed the verbose flag in the TestTask so that the test code is
  controlled by the flag.  Also shortened up some failure messages.
  (Thanks to Tobias Luetke for the suggestion).
* Rules will now properly detect a task that can generate a source
  file.  Previously rules would only consider source files that were
  already present.
* Added an +import+ command that allows Rake to dynamically import
  dependendencies into a running Rake session.  The +import+ command
  can run tasks to update the dependency file before loading them.
  Dependency files can be in rake or make format, allowing rake to
  work with tools designed to generate dependencies for make.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
Thanks to ...

* Brian Gernhardt for the rules fix (especially for the patience to
  explain the problem to me until I got what he was talking about).
* Stefan Lang for pointing out problems in the dark corners of the
  FileList implementation.
* Alexey Verkhovsky pointing out the silently swallows syntax errors
  in tests.
* Tobias Luetke for beautifying the test task output.
* Sam Roberts for some of the ideas behind dependency loading.

-- Jim Weirich


=== 0.5.0

It has been a long time in coming, but we finally have a new version
of Rake available.

==== Changes

* Fixed documentation that was lacking the Rake module name (Tilman
  Sauerbeck).
* Added tar.gz and tar.bz2 support to package task (Tilman Sauerbeck).
* Recursive rules are now supported (Tilman Sauerbeck).
* Added warning option for the Test Task (requested by Eric Hodel).
* The jamis rdoc template is only used if it exists.
* Added fix for Ruby 1.8.2 test/unit and rails problem.
* Added contributed rake man file (Jani Monoses).
* Added Brian Candler's fix for problems in --trace and --dry-run
  mode.

==== Thanks

Lots of people provided input to this release.  Thanks to Tilman
Sauerbeck for numerous patches, documentation fixes and suggestions.
And for also pushing me to get this release out.  Also, thanks to
Brian Candler for the finding and fixing --trace/dry-run fix.  That
was an obscure bug.  Also to Eric Hodel for some good suggestions.

-- Jim Weirich

=== 0.4.15

==== Changes

Version 0.4.15 is a bug fix update for the Ruby 1.8.2 compatibility
changes.  This release includes:

* Fixed a bug that prevented the TESTOPTS flag from working with the
  revised for 1.8.2 test task.
* Updated the docs on --trace to indicate that it also enables a full
  backtrace on errors.
* Several fixes for new warnings generated.

==== Mini-Roadmap

I will continue to issue Rake updates in the 0.4.xx series as new
Ruby-1.8.2 issues become manifest.  Once the codebase stabilizes, I
will release a 0.5.0 version incorporating all the changes.  If you
are not using Ruby-1.8.2 and wish to avoid version churn, I recommend
staying with a release prior to Rake-0.4.14.

=== 0.4.14

Version 0.4.14 is a compatibility fix to allow Rake's test task to
work under Ruby 1.8.2.  A change in the Test::Unit autorun feature
prevented Rake from running any tests.  This release fixes the
problem.

Rake 0.4.14 is the recommended release for anyone using Ruby 1.8.2.

=== 0.4.13

* Fixed the dry-run flag so it is operating again.
* Multiple arguments to sh and ruby commands will not be interpreted
  by the shell (patch provided by Jonathan Paisley).

=== 0.4.12

* Added --silent (-s) to suppress the (in directory) rake message.

=== 0.4.11

* Changed the "don't know how to rake" message (finally)
* Changes references to a literal "Rakefile" to reference the global
  variable $rakefile (which contains the actual name of the rakefile).

=== 0.4.10

* Added block support to the "sh" command, allowing users to take
  special actions on the result of the system call.  E.g.

    sh "shell_command" do |ok, res|
      puts "Program returned #{res.exitstatus}" if ! ok
    end

=== 0.4.9

* Switched to Jamis Buck's RDoc template.
* Removed autorequire from Rake's gem spec.  This prevents the Rake
  libraries from loading while using rails.

=== 0.4.8

* Added support for .rb versions of Rakefile.
* Removed \\\n's from test task.
* Fixed Ruby 1.9 compatibility issue with FileList.

=== 0.4.7

* Fixed problem in FileList that caused Ruby 1.9 to go into infinite
  recursion.  Since to_a was removed from Object, it does not need to
  added back into the list of methods to rewrite in FileList.  (Thanks
  to Kent Sibilev for pointing this out).

=== 0.4.6
* Removed test version of ln in FileUtils that prevented safe_ln from
  using ln.

=== 0.4.5
* Upgraded comments in TestTask.
* FileList to_s and inspect now automatically resolve pending changes.
* FileList#exclude properly returns the FileList.

=== 0.4.4
* Fixed initialization problem with @comment.
* Now using multi -r technique in TestTask.  Switch Rakefile back to
  using the built-in test task macros because the rake runtime is no
  longer needed.
* Added 'TEST=filename' and 'TESTOPTS=options' to the Test Task
  macros.
* Allow a +test_files+ attribute in test tasks.  This allows more
  flexibility in specifying test files.

=== 0.4.3
* Fixed Comment leakage.

=== 0.4.2
* Added safe_ln that falls back to a copy if a file link is not supported.
* Package builder now uses safe\_ln.

=== 0.4.1
* Task comments are now additive, combined with "/".
* Works with (soon to be released) rubygems 0.6.2 (or 0.7.0)

=== 0.4.0
* FileList now uses deferred loading.  The file system is not searched
  until the first call that needs the file names.
* VAR=VALUE options are now accepted on the command line and are
  treated like environment variables.  The values may be tested in a
  Rakefile by referencing ENV['VAR'].
* File.mtime is now used (instead of File.new().mtime).

=== 0.3.2.x

* Removed some hidden dependencies on rubygems.  Tests now will test
  gems only if they are installed.
* Removed Sys from some example files.  I believe that is that last
  reference to Sys outside of the contrib area.
* Updated all copyright notices to include 2004.

=== 0.3.2

* GEM Installation now works with the application stub.

=== 0.3.1

* FileLists now automatically ignore CVS, .bak, !
* GEM Installation now works.

=== 0.3.0

Promoted 0.2.10.

=== 0.2.10
General

* Added title to Rake's rdocs
* Contrib packages are no longer included in the documentation.

RDoc Issues

* Removed default for the '--main' option
* Fixed rendering of the rdoc options
* Fixed clean/clobber confusion with rerdoc
* 'title' attribute added

Package Task Library Issues

* Version (or explicit :noversion) is required.
* +package_file+ attribute is now writable

FileList Issues

* Dropped bang version of exclude.  Now using ant-like include/exclude semantics.
* Enabled the "yield self" idiom in FileList#initialize.

=== 0.2.9

This version contains numerous changes as the RubyConf.new(2003)
presentation was being prepared.  The changes include:

* The monolithic rubyapp task library is in the process of being
  dropped in favor of lighter weight task libraries.

=== 0.2.7

* Added "desc" for task descriptions.
* -T will now display tasks with descriptions.
* -P will display tasks and prerequisites.
* Dropped the Sys module in favor of the 1.8.x FileUtils module.  Sys
  is still supported in the contrib area.

=== 0.2.6

* Moved to RubyForge

=== 0.2.5

* Switched to standard ruby app builder.
* Added no_match option to file matcher.

=== 0.2.4

* Fixed indir, which neglected to actually change directories.

=== 0.2.3

* Added rake module for a help target
* Added 'for\_files' to Sys
* Added a $rakefile constant
* Added test for selecting proper rule with multiple targets.
PK)J[����$share/gems/gems/rake-13.2.1/exe/rakenuȯ��#!/opt/alt/ruby34/bin/ruby

#--
# Copyright (c) 2003, 2004, 2005, 2006, 2007  Jim Weirich
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#++

require "rake"

Rake.application.run
PK)J[��K\��8share/gems/gems/rake-13.2.1/lib/rake/invocation_chain.rbnu�[���# frozen_string_literal: true
module Rake

  # InvocationChain tracks the chain of task invocations to detect
  # circular dependencies.
  class InvocationChain < LinkedList

    # Is the invocation already in the chain?
    def member?(invocation)
      head == invocation || tail.member?(invocation)
    end

    # Append an invocation to the chain of invocations. It is an error
    # if the invocation already listed.
    def append(invocation)
      if member?(invocation)
        fail RuntimeError, "Circular dependency detected: #{to_s} => #{invocation}"
      end
      conj(invocation)
    end

    # Convert to string, ie: TOP => invocation => invocation
    def to_s
      "#{prefix}#{head}"
    end

    # Class level append.
    def self.append(invocation, chain)
      chain.append(invocation)
    end

    private

    def prefix
      "#{tail} => "
    end

    # Null object for an empty chain.
    class EmptyInvocationChain < LinkedList::EmptyLinkedList
      @parent = InvocationChain

      def member?(obj)
        false
      end

      def append(invocation)
        conj(invocation)
      end

      def to_s
        "TOP"
      end
    end

    EMPTY = EmptyInvocationChain.new
  end
end
PK)J[�2��bb8share/gems/gems/rake-13.2.1/lib/rake/loaders/makefile.rbnu�[���# frozen_string_literal: true
module Rake

  # Makefile loader to be used with the import file loader.  Use this to
  # import dependencies from make dependency tools:
  #
  #   require 'rake/loaders/makefile'
  #
  #   file ".depends.mf" => [SRC_LIST] do |t|
  #     sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}"
  #   end
  #
  #   import ".depends.mf"
  #
  # See {Importing Dependencies}[link:doc/rakefile_rdoc.html#label-Importing+Dependencies]
  # for further details.

  class MakefileLoader
    include Rake::DSL

    SPACE_MARK = "\0" # :nodoc:

    # Load the makefile dependencies in +fn+.
    def load(fn) # :nodoc:
      lines = File.read fn
      lines.gsub!(/\\ /, SPACE_MARK)
      lines.gsub!(/#[^\n]*\n/m, "")
      lines.gsub!(/\\\n/, " ")
      lines.each_line do |line|
        process_line(line)
      end
    end

    private

    # Process one logical line of makefile data.
    def process_line(line) # :nodoc:
      file_tasks, args = line.split(":", 2)
      return if args.nil?
      dependents = args.split.map { |d| respace(d) }
      file_tasks.scan(/\S+/) do |file_task|
        file_task = respace(file_task)
        file file_task => dependents
      end
    end

    def respace(str) # :nodoc:
      str.tr SPACE_MARK, " "
    end
  end

  # Install the handler
  Rake.application.add_loader("mf", MakefileLoader.new)
end
PK)J[?�{Hrr2share/gems/gems/rake-13.2.1/lib/rake/early_time.rbnu�[���# frozen_string_literal: true
module Rake

  # EarlyTime is a fake timestamp that occurs _before_ any other time value.
  class EarlyTime
    include Comparable
    include Singleton

    ##
    # The EarlyTime always comes before +other+!

    def <=>(other)
      -1
    end

    def to_s # :nodoc:
      "<EARLY TIME>"
    end
  end

  EARLY = EarlyTime.instance
end
PK)J[E��.��/share/gems/gems/rake-13.2.1/lib/rake/tasklib.rbnu�[���# frozen_string_literal: true
require "rake"

module Rake

  # Base class for Task Libraries.
  class TaskLib
    include Cloneable
    include Rake::DSL
  end

end
PK)J[Ӭ�s~~Eshare/gems/gems/rake-13.2.1/lib/rake/rule_recursion_overflow_error.rbnu�[���# frozen_string_literal: true
module Rake

  # Error indicating a recursion overflow error in task selection.
  class RuleRecursionOverflowError < StandardError
    def initialize(*args)
      super
      @targets = []
    end

    def add_target(target)
      @targets << target
    end

    def message
      super + ": [" + @targets.reverse.join(" => ") + "]"
    end
  end

end
PK)J[�
�HH6share/gems/gems/rake-13.2.1/lib/rake/dsl_definition.rbnu�[���# frozen_string_literal: true
# Rake DSL functions.
require "rake/file_utils_ext"

module Rake

  ##
  # DSL is a module that provides #task, #desc, #namespace, etc.  Use this
  # when you'd like to use rake outside the top level scope.
  #
  # For a Rakefile you run from the command line this module is automatically
  # included.

  module DSL

    #--
    # Include the FileUtils file manipulation functions in the top
    # level module, but mark them private so that they don't
    # unintentionally define methods on other objects.
    #++

    include FileUtilsExt
    private(*FileUtils.instance_methods(false))
    private(*FileUtilsExt.instance_methods(false))

    private

    # :call-seq:
    #   task(task_name)
    #   task(task_name: dependencies)
    #   task(task_name, arguments => dependencies)
    #
    # Declare a basic task.  The +task_name+ is always the first argument.  If
    # the task name contains a ":" it is defined in that namespace.
    #
    # The +dependencies+ may be a single task name or an Array of task names.
    # The +argument+ (a single name) or +arguments+ (an Array of names) define
    # the arguments provided to the task.
    #
    # The task, argument and dependency names may be either symbols or
    # strings.
    #
    # A task with a single dependency:
    #
    #   task clobber: %w[clean] do
    #     rm_rf "html"
    #   end
    #
    # A task with an argument and a dependency:
    #
    #   task :package, [:version] => :test do |t, args|
    #     # ...
    #   end
    #
    # To invoke this task from the command line:
    #
    #   $ rake package[1.2.3]
    #
    def task(*args, &block) # :doc:
      Rake::Task.define_task(*args, &block)
    end

    # Declare a file task.
    #
    # Example:
    #   file "config.cfg" => ["config.template"] do
    #     open("config.cfg", "w") do |outfile|
    #       open("config.template") do |infile|
    #         while line = infile.gets
    #           outfile.puts line
    #         end
    #       end
    #     end
    #  end
    #
    def file(*args, &block) # :doc:
      Rake::FileTask.define_task(*args, &block)
    end

    # Declare a file creation task.
    # (Mainly used for the directory command).
    def file_create(*args, &block)
      Rake::FileCreationTask.define_task(*args, &block)
    end

    # Declare a set of files tasks to create the given directories on
    # demand.
    #
    # Example:
    #   directory "testdata/doc"
    #
    def directory(*args, &block) # :doc:
      args = args.flat_map { |arg| arg.is_a?(FileList) ? arg.to_a.flatten : arg }
      result = file_create(*args, &block)
      dir, _ = *Rake.application.resolve_args(args)
      dir = Rake.from_pathname(dir)
      Rake.each_dir_parent(dir) do |d|
        file_create d do |t|
          mkdir_p t.name unless File.exist?(t.name)
        end
      end
      result
    end

    # Declare a task that performs its prerequisites in
    # parallel. Multitasks does *not* guarantee that its prerequisites
    # will execute in any given order (which is obvious when you think
    # about it)
    #
    # Example:
    #   multitask deploy: %w[deploy_gem deploy_rdoc]
    #
    def multitask(*args, &block) # :doc:
      Rake::MultiTask.define_task(*args, &block)
    end

    # Create a new rake namespace and use it for evaluating the given
    # block.  Returns a NameSpace object that can be used to lookup
    # tasks defined in the namespace.
    #
    # Example:
    #
    #   ns = namespace "nested" do
    #     # the "nested:run" task
    #     task :run
    #   end
    #   task_run = ns[:run] # find :run in the given namespace.
    #
    # Tasks can also be defined in a namespace by using a ":" in the task
    # name:
    #
    #   task "nested:test" do
    #     # ...
    #   end
    #
    def namespace(name=nil, &block) # :doc:
      name = name.to_s if name.kind_of?(Symbol)
      name = name.to_str if name.respond_to?(:to_str)
      unless name.kind_of?(String) || name.nil?
        raise ArgumentError, "Expected a String or Symbol for a namespace name"
      end
      Rake.application.in_namespace(name, &block)
    end

    # Declare a rule for auto-tasks.
    #
    # Example:
    #  rule '.o' => '.c' do |t|
    #    sh 'cc', '-c', '-o', t.name, t.source
    #  end
    #
    def rule(*args, &block) # :doc:
      Rake::Task.create_rule(*args, &block)
    end

    # Describes the next rake task.  Duplicate descriptions are discarded.
    # Descriptions are shown with <code>rake -T</code> (up to the first
    # sentence) and <code>rake -D</code> (the entire description).
    #
    # Example:
    #   desc "Run the Unit Tests"
    #   task test: [:build] do
    #     # ... run tests
    #   end
    #
    def desc(description) # :doc:
      Rake.application.last_description = description
    end

    # Import the partial Rakefiles +fn+.  Imported files are loaded
    # _after_ the current file is completely loaded.  This allows the
    # import statement to appear anywhere in the importing file, and yet
    # allowing the imported files to depend on objects defined in the
    # importing file.
    #
    # A common use of the import statement is to include files
    # containing dependency declarations.
    #
    # See also the --rakelibdir command line option.
    #
    # Example:
    #   import ".depend", "my_rules"
    #
    def import(*fns) # :doc:
      fns.each do |fn|
        Rake.application.add_import(fn)
      end
    end
  end
  extend FileUtilsExt
end

# Extend the main object with the DSL commands. This allows top-level
# calls to task, etc. to work from a Rakefile without polluting the
# object inheritance tree.
self.extend Rake::DSL
PK)J[n�#��;share/gems/gems/rake-13.2.1/lib/rake/task_argument_error.rbnu�[���# frozen_string_literal: true
module Rake

  # Error indicating an ill-formed task declaration.
  class TaskArgumentError < ArgumentError
  end

end
PK)J[u����0share/gems/gems/rake-13.2.1/lib/rake/ext/core.rbnu�[���# frozen_string_literal: true
class Module
  # Check for an existing method in the current class before extending.  If
  # the method already exists, then a warning is printed and the extension is
  # not added.  Otherwise the block is yielded and any definitions in the
  # block will take effect.
  #
  # Usage:
  #
  #   class String
  #     rake_extension("xyz") do
  #       def xyz
  #         ...
  #       end
  #     end
  #   end
  #
  def rake_extension(method) # :nodoc:
    if method_defined?(method)
      $stderr.puts "WARNING: Possible conflict with Rake extension: " +
        "#{self}##{method} already exists"
    else
      yield
    end
  end
end
PK)J[yOu�rr2share/gems/gems/rake-13.2.1/lib/rake/ext/string.rbnu�[���# frozen_string_literal: true
require "rake/ext/core"

class String

  rake_extension("ext") do
    # Replace the file extension with +newext+.  If there is no extension on
    # the string, append the new extension to the end.  If the new extension
    # is not given, or is the empty string, remove any existing extension.
    #
    # +ext+ is a user added method for the String class.
    #
    # This String extension comes from Rake
    def ext(newext="")
      return self.dup if [".", ".."].include? self
      if newext != ""
        newext = "." + newext unless newext =~ /^\./
      end
      self.chomp(File.extname(self)) << newext
    end
  end

  rake_extension("pathmap") do
    # Explode a path into individual components.  Used by +pathmap+.
    #
    # This String extension comes from Rake
    def pathmap_explode
      head, tail = File.split(self)
      return [self] if head == self
      return [tail] if head == "." || tail == "/"
      return [head, tail] if head == "/"
      return head.pathmap_explode + [tail]
    end
    protected :pathmap_explode

    # Extract a partial path from the path.  Include +n+ directories from the
    # front end (left hand side) if +n+ is positive.  Include |+n+|
    # directories from the back end (right hand side) if +n+ is negative.
    #
    # This String extension comes from Rake
    def pathmap_partial(n)
      dirs = File.dirname(self).pathmap_explode
      partial_dirs =
        if n > 0
          dirs[0...n]
        elsif n < 0
          dirs.reverse[0...-n].reverse
        else
          "."
        end
      File.join(partial_dirs)
    end
    protected :pathmap_partial

    # Perform the pathmap replacement operations on the given path. The
    # patterns take the form 'pat1,rep1;pat2,rep2...'.
    #
    # This String extension comes from Rake
    def pathmap_replace(patterns, &block)
      result = self
      patterns.split(";").each do |pair|
        pattern, replacement = pair.split(",")
        pattern = Regexp.new(pattern)
        if replacement == "*" && block_given?
          result = result.sub(pattern, &block)
        elsif replacement
          result = result.sub(pattern, replacement)
        else
          result = result.sub(pattern, "")
        end
      end
      result
    end
    protected :pathmap_replace

    # Map the path according to the given specification.  The specification
    # controls the details of the mapping.  The following special patterns are
    # recognized:
    #
    # <tt>%p</tt> :: The complete path.
    # <tt>%f</tt> :: The base file name of the path, with its file extension,
    #                but without any directories.
    # <tt>%n</tt> :: The file name of the path without its file extension.
    # <tt>%d</tt> :: The directory list of the path.
    # <tt>%x</tt> :: The file extension of the path.  An empty string if there
    #                is no extension.
    # <tt>%X</tt> :: Everything *but* the file extension.
    # <tt>%s</tt> :: The alternate file separator if defined, otherwise use #
    #                the standard file separator.
    # <tt>%%</tt> :: A percent sign.
    #
    # The <tt>%d</tt> specifier can also have a numeric prefix (e.g. '%2d').
    # If the number is positive, only return (up to) +n+ directories in the
    # path, starting from the left hand side.  If +n+ is negative, return (up
    # to) +n+ directories from the right hand side of the path.
    #
    # Examples:
    #
    #   'a/b/c/d/file.txt'.pathmap("%2d")   => 'a/b'
    #   'a/b/c/d/file.txt'.pathmap("%-2d")  => 'c/d'
    #
    # Also the <tt>%d</tt>, <tt>%p</tt>, <tt>%f</tt>, <tt>%n</tt>,
    # <tt>%x</tt>, and <tt>%X</tt> operators can take a pattern/replacement
    # argument to perform simple string substitutions on a particular part of
    # the path.  The pattern and replacement are separated by a comma and are
    # enclosed by curly braces.  The replacement spec comes after the %
    # character but before the operator letter.  (e.g. "%{old,new}d").
    # Multiple replacement specs should be separated by semi-colons (e.g.
    # "%{old,new;src,bin}d").
    #
    # Regular expressions may be used for the pattern, and back refs may be
    # used in the replacement text.  Curly braces, commas and semi-colons are
    # excluded from both the pattern and replacement text (let's keep parsing
    # reasonable).
    #
    # For example:
    #
    #    "src/org/onestepback/proj/A.java".pathmap("%{^src,class}X.class")
    #
    # returns:
    #
    #    "class/org/onestepback/proj/A.class"
    #
    # If the replacement text is '*', then a block may be provided to perform
    # some arbitrary calculation for the replacement.
    #
    # For example:
    #
    #   "/path/to/file.TXT".pathmap("%X%{.*,*}x") { |ext|
    #      ext.downcase
    #   }
    #
    # Returns:
    #
    #  "/path/to/file.txt"
    #
    # This String extension comes from Rake
    def pathmap(spec=nil, &block)
      return self if spec.nil?
      result = "".dup
      spec.scan(/%\{[^}]*\}-?\d*[sdpfnxX%]|%-?\d+d|%.|[^%]+/) do |frag|
        case frag
        when "%f"
          result << File.basename(self)
        when "%n"
          result << File.basename(self).ext
        when "%d"
          result << File.dirname(self)
        when "%x"
          result << File.extname(self)
        when "%X"
          result << self.ext
        when "%p"
          result << self
        when "%s"
          result << (File::ALT_SEPARATOR || File::SEPARATOR)
        when "%-"
          # do nothing
        when "%%"
          result << "%"
        when /%(-?\d+)d/
          result << pathmap_partial($1.to_i)
        when /^%\{([^}]*)\}(\d*[dpfnxX])/
          patterns, operator = $1, $2
          result << pathmap("%" + operator).pathmap_replace(patterns, &block)
        when /^%/
          fail ArgumentError, "Unknown pathmap specifier #{frag} in '#{spec}'"
        else
          result << frag
        end
      end
      result
    end
  end

end
PK)J[���^		/share/gems/gems/rake-13.2.1/lib/rake/promise.rbnu�[���# frozen_string_literal: true
module Rake

  # A Promise object represents a promise to do work (a chore) in the
  # future. The promise is created with a block and a list of
  # arguments for the block. Calling value will return the value of
  # the promised chore.
  #
  # Used by ThreadPool.
  #
  class Promise               # :nodoc: all
    NOT_SET = Object.new.freeze # :nodoc:

    attr_accessor :recorder

    # Create a promise to do the chore specified by the block.
    def initialize(args, &block)
      @mutex = Mutex.new
      @result = NOT_SET
      @error = NOT_SET
      @args = args
      @block = block
    end

    # Return the value of this promise.
    #
    # If the promised chore is not yet complete, then do the work
    # synchronously. We will wait.
    def value
      unless complete?
        stat :sleeping_on, item_id: object_id
        @mutex.synchronize do
          stat :has_lock_on, item_id: object_id
          chore
          stat :releasing_lock_on, item_id: object_id
        end
      end
      error? ? raise(@error) : @result
    end

    # If no one else is working this promise, go ahead and do the chore.
    def work
      stat :attempting_lock_on, item_id: object_id
      if @mutex.try_lock
        stat :has_lock_on, item_id: object_id
        chore
        stat :releasing_lock_on, item_id: object_id
        @mutex.unlock
      else
        stat :bailed_on, item_id: object_id
      end
    end

    private

    # Perform the chore promised
    def chore
      if complete?
        stat :found_completed, item_id: object_id
        return
      end
      stat :will_execute, item_id: object_id
      begin
        @result = @block.call(*@args)
      rescue Exception => e
        @error = e
      end
      stat :did_execute, item_id: object_id
      discard
    end

    # Do we have a result for the promise
    def result?
      !@result.equal?(NOT_SET)
    end

    # Did the promise throw an error
    def error?
      !@error.equal?(NOT_SET)
    end

    # Are we done with the promise
    def complete?
      result? || error?
    end

    # free up these items for the GC
    def discard
      @args = nil
      @block = nil
    end

    # Record execution statistics if there is a recorder
    def stat(*args)
      @recorder.call(*args) if @recorder
    end

  end

end
PK)J[��m��>share/gems/gems/rake-13.2.1/lib/rake/thread_history_display.rbnu�[���# frozen_string_literal: true
require "rake/private_reader"

module Rake

  class ThreadHistoryDisplay    # :nodoc: all
    include Rake::PrivateReader

    private_reader :stats, :items, :threads

    def initialize(stats)
      @stats   = stats
      @items   = { _seq_: 1  }
      @threads = { _seq_: "A" }
    end

    def show
      puts "Job History:"
      stats.each do |stat|
        stat[:data] ||= {}
        rename(stat, :thread, threads)
        rename(stat[:data], :item_id, items)
        rename(stat[:data], :new_thread, threads)
        rename(stat[:data], :deleted_thread, threads)
        printf("%8d %2s %-20s %s\n",
          (stat[:time] * 1_000_000).round,
          stat[:thread],
          stat[:event],
          stat[:data].map do |k, v| "#{k}:#{v}" end.join(" "))
      end
    end

    private

    def rename(hash, key, renames)
      if hash && hash[key]
        original = hash[key]
        value = renames[original]
        unless value
          value = renames[:_seq_]
          renames[:_seq_] = renames[:_seq_].succ
          renames[original] = value
        end
        hash[key] = value
      end
    end
  end

end
PK)J[�g�n2share/gems/gems/rake-13.2.1/lib/rake/file_utils.rbnu�[���# frozen_string_literal: true
require "rbconfig"
require "fileutils"

#--
# This a FileUtils extension that defines several additional commands to be
# added to the FileUtils utility functions.
module FileUtils
  # Path to the currently running Ruby program
  RUBY = ENV["RUBY"] || File.join(
    RbConfig::CONFIG["bindir"],
    RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]).
    sub(/.*\s.*/m, '"\&"')

  # Run the system command +cmd+.  If multiple arguments are given the command
  # is run directly (without the shell, same semantics as Kernel::exec and
  # Kernel::system).
  #
  # It is recommended you use the multiple argument form over interpolating
  # user input for both usability and security reasons.  With the multiple
  # argument form you can easily process files with spaces or other shell
  # reserved characters in them.  With the multiple argument form your rake
  # tasks are not vulnerable to users providing an argument like
  # <code>; rm # -rf /</code>.
  #
  # If a block is given, upon command completion the block is called with an
  # OK flag (true on a zero exit status) and a Process::Status object.
  # Without a block a RuntimeError is raised when the command exits non-zero.
  #
  # Examples:
  #
  #   sh 'ls -ltr'
  #
  #   sh 'ls', 'file with spaces'
  #
  #   # check exit status after command runs
  #   sh %{grep pattern file} do |ok, res|
  #     if !ok
  #       puts "pattern not found (status = #{res.exitstatus})"
  #     end
  #   end
  #
  def sh(*cmd, &block)
    options = (Hash === cmd.last) ? cmd.pop : {}
    shell_runner = block_given? ? block : create_shell_runner(cmd)

    set_verbose_option(options)
    verbose = options.delete :verbose
    noop    = options.delete(:noop) || Rake::FileUtilsExt.nowrite_flag

    Rake.rake_output_message sh_show_command cmd if verbose

    unless noop
      res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, options)
      status = $?
      status = Rake::PseudoStatus.new(1) if !res && status.nil?
      shell_runner.call(res, status)
    end
  end

  def create_shell_runner(cmd) # :nodoc:
    show_command = sh_show_command cmd
    lambda do |ok, status|
      ok or
        fail "Command failed with status (#{status.exitstatus}): " +
        "[#{show_command}]"
    end
  end
  private :create_shell_runner

  def sh_show_command(cmd) # :nodoc:
    cmd = cmd.dup

    if Hash === cmd.first
      env = cmd.first
      env = env.map { |name, value| "#{name}=#{value}" }.join " "
      cmd[0] = env
    end

    cmd.join " "
  end
  private :sh_show_command

  def set_verbose_option(options) # :nodoc:
    unless options.key? :verbose
      options[:verbose] =
        (Rake::FileUtilsExt.verbose_flag == Rake::FileUtilsExt::DEFAULT) ||
        Rake::FileUtilsExt.verbose_flag
    end
  end
  private :set_verbose_option

  # Run a Ruby interpreter with the given arguments.
  #
  # Example:
  #   ruby %{-pe '$_.upcase!' <README}
  #
  def ruby(*args, **options, &block)
    if args.length > 1
      sh(RUBY, *args, **options, &block)
    else
      sh("#{RUBY} #{args.first}", **options, &block)
    end
  end

  LN_SUPPORTED = [true]

  #  Attempt to do a normal file link, but fall back to a copy if the link
  #  fails.
  def safe_ln(*args, **options)
    if LN_SUPPORTED[0]
      begin
        return options.empty? ? ln(*args) : ln(*args, **options)
      rescue StandardError, NotImplementedError
        LN_SUPPORTED[0] = false
      end
    end
    options.empty? ? cp(*args) : cp(*args, **options)
  end

  # Split a file path into individual directory names.
  #
  # Example:
  #   split_all("a/b/c") =>  ['a', 'b', 'c']
  #
  def split_all(path)
    head, tail = File.split(path)
    return [tail] if head == "." || tail == "/"
    return [head, tail] if head == "/"
    return split_all(head) + [tail]
  end
end
PK)J[�d���1�11share/gems/gems/rake-13.2.1/lib/rake/file_list.rbnu�[���# frozen_string_literal: true
require "rake/cloneable"
require "rake/file_utils_ext"
require "rake/ext/string"

module Rake

  ##
  # A FileList is essentially an array with a few helper methods defined to
  # make file manipulation a bit easier.
  #
  # FileLists are lazy.  When given a list of glob patterns for possible files
  # to be included in the file list, instead of searching the file structures
  # to find the files, a FileList holds the pattern for latter use.
  #
  # This allows us to define a number of FileList to match any number of
  # files, but only search out the actual files when then FileList itself is
  # actually used.  The key is that the first time an element of the
  # FileList/Array is requested, the pending patterns are resolved into a real
  # list of file names.
  #
  class FileList

    include Cloneable

    # == Method Delegation
    #
    # The lazy evaluation magic of FileLists happens by implementing all the
    # array specific methods to call +resolve+ before delegating the heavy
    # lifting to an embedded array object (@items).
    #
    # In addition, there are two kinds of delegation calls.  The regular kind
    # delegates to the @items array and returns the result directly.  Well,
    # almost directly.  It checks if the returned value is the @items object
    # itself, and if so will return the FileList object instead.
    #
    # The second kind of delegation call is used in methods that normally
    # return a new Array object.  We want to capture the return value of these
    # methods and wrap them in a new FileList object.  We enumerate these
    # methods in the +SPECIAL_RETURN+ list below.

    # List of array methods (that are not in +Object+) that need to be
    # delegated.
    ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map(&:to_s)

    # List of additional methods that must be delegated.
    MUST_DEFINE = %w[inspect <=>]

    # List of methods that should not be delegated here (we define special
    # versions of them explicitly below).
    MUST_NOT_DEFINE = %w[to_a to_ary partition * <<]

    # List of delegated methods that return new array values which need
    # wrapping.
    SPECIAL_RETURN = %w[
      map collect sort sort_by select find_all reject grep
      compact flatten uniq values_at
      + - & |
    ]

    DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).map(&:to_s).sort.uniq

    # Now do the delegation.
    DELEGATING_METHODS.each do |sym|
      if SPECIAL_RETURN.include?(sym)
        ln = __LINE__ + 1
        class_eval %{
          def #{sym}(*args, &block)
            resolve
            result = @items.send(:#{sym}, *args, &block)
            self.class.new.import(result)
          end
        }, __FILE__, ln
      else
        ln = __LINE__ + 1
        class_eval %{
          def #{sym}(*args, &block)
            resolve
            result = @items.send(:#{sym}, *args, &block)
            result.object_id == @items.object_id ? self : result
          end
        }, __FILE__, ln
      end
    end

    GLOB_PATTERN = %r{[*?\[\{]}

    # Create a file list from the globbable patterns given.  If you wish to
    # perform multiple includes or excludes at object build time, use the
    # "yield self" pattern.
    #
    # Example:
    #   file_list = FileList.new('lib/**/*.rb', 'test/test*.rb')
    #
    #   pkg_files = FileList.new('lib/**/*') do |fl|
    #     fl.exclude(/\bCVS\b/)
    #   end
    #
    def initialize(*patterns)
      @pending_add = []
      @pending = false
      @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
      @exclude_procs = DEFAULT_IGNORE_PROCS.dup
      @items = []
      patterns.each { |pattern| include(pattern) }
      yield self if block_given?
    end

    # Add file names defined by glob patterns to the file list.  If an array
    # is given, add each element of the array.
    #
    # Example:
    #   file_list.include("*.java", "*.cfg")
    #   file_list.include %w( math.c lib.h *.o )
    #
    def include(*filenames)
      # TODO: check for pending
      filenames.each do |fn|
        if fn.respond_to? :to_ary
          include(*fn.to_ary)
        else
          @pending_add << Rake.from_pathname(fn)
        end
      end
      @pending = true
      self
    end
    alias :add :include

    # Register a list of file name patterns that should be excluded from the
    # list.  Patterns may be regular expressions, glob patterns or regular
    # strings.  In addition, a block given to exclude will remove entries that
    # return true when given to the block.
    #
    # Note that glob patterns are expanded against the file system. If a file
    # is explicitly added to a file list, but does not exist in the file
    # system, then an glob pattern in the exclude list will not exclude the
    # file.
    #
    # Examples:
    #   FileList['a.c', 'b.c'].exclude("a.c") => ['b.c']
    #   FileList['a.c', 'b.c'].exclude(/^a/)  => ['b.c']
    #
    # If "a.c" is a file, then ...
    #   FileList['a.c', 'b.c'].exclude("a.*") => ['b.c']
    #
    # If "a.c" is not a file, then ...
    #   FileList['a.c', 'b.c'].exclude("a.*") => ['a.c', 'b.c']
    #
    def exclude(*patterns, &block)
      patterns.each do |pat|
        if pat.respond_to? :to_ary
          exclude(*pat.to_ary)
        else
          @exclude_patterns << Rake.from_pathname(pat)
        end
      end
      @exclude_procs << block if block_given?
      resolve_exclude unless @pending
      self
    end

    # Clear all the exclude patterns so that we exclude nothing.
    def clear_exclude
      @exclude_patterns = []
      @exclude_procs = []
      self
    end

    # A FileList is equal through array equality.
    def ==(array)
      to_ary == array
    end

    # Return the internal array object.
    def to_a
      resolve
      @items
    end

    # Return the internal array object.
    def to_ary
      to_a
    end

    # Lie about our class.
    def is_a?(klass)
      klass == Array || super(klass)
    end
    alias kind_of? is_a?

    # Redefine * to return either a string or a new file list.
    def *(other)
      result = @items * other
      case result
      when Array
        self.class.new.import(result)
      else
        result
      end
    end

    def <<(obj)
      resolve
      @items << Rake.from_pathname(obj)
      self
    end

    # Resolve all the pending adds now.
    def resolve
      if @pending
        @pending = false
        @pending_add.each do |fn| resolve_add(fn) end
        @pending_add = []
        resolve_exclude
      end
      self
    end

    def resolve_add(fn) # :nodoc:
      case fn
      when GLOB_PATTERN
        add_matching(fn)
      else
        self << fn
      end
    end
    private :resolve_add

    def resolve_exclude # :nodoc:
      reject! { |fn| excluded_from_list?(fn) }
      self
    end
    private :resolve_exclude

    # Return a new FileList with the results of running +sub+ against each
    # element of the original list.
    #
    # Example:
    #   FileList['a.c', 'b.c'].sub(/\.c$/, '.o')  => ['a.o', 'b.o']
    #
    def sub(pat, rep)
      inject(self.class.new) { |res, fn| res << fn.sub(pat, rep) }
    end

    # Return a new FileList with the results of running +gsub+ against each
    # element of the original list.
    #
    # Example:
    #   FileList['lib/test/file', 'x/y'].gsub(/\//, "\\")
    #      => ['lib\\test\\file', 'x\\y']
    #
    def gsub(pat, rep)
      inject(self.class.new) { |res, fn| res << fn.gsub(pat, rep) }
    end

    # Same as +sub+ except that the original file list is modified.
    def sub!(pat, rep)
      each_with_index { |fn, i| self[i] = fn.sub(pat, rep) }
      self
    end

    # Same as +gsub+ except that the original file list is modified.
    def gsub!(pat, rep)
      each_with_index { |fn, i| self[i] = fn.gsub(pat, rep) }
      self
    end

    # Apply the pathmap spec to each of the included file names, returning a
    # new file list with the modified paths.  (See String#pathmap for
    # details.)
    def pathmap(spec=nil, &block)
      collect { |fn| fn.pathmap(spec, &block) }
    end

    # Return a new FileList with <tt>String#ext</tt> method applied to
    # each member of the array.
    #
    # This method is a shortcut for:
    #
    #    array.collect { |item| item.ext(newext) }
    #
    # +ext+ is a user added method for the Array class.
    def ext(newext="")
      collect { |fn| fn.ext(newext) }
    end

    # Grep each of the files in the filelist using the given pattern. If a
    # block is given, call the block on each matching line, passing the file
    # name, line number, and the matching line of text.  If no block is given,
    # a standard emacs style file:linenumber:line message will be printed to
    # standard out.  Returns the number of matched items.
    def egrep(pattern, *options)
      matched = 0
      each do |fn|
        begin
          File.open(fn, "r", *options) do |inf|
            count = 0
            inf.each do |line|
              count += 1
              if pattern.match(line)
                matched += 1
                if block_given?
                  yield fn, count, line
                else
                  puts "#{fn}:#{count}:#{line}"
                end
              end
            end
          end
        rescue StandardError => ex
          $stderr.puts "Error while processing '#{fn}': #{ex}"
        end
      end
      matched
    end

    # Return a new file list that only contains file names from the current
    # file list that exist on the file system.
    def existing
      select { |fn| File.exist?(fn) }.uniq
    end

    # Modify the current file list so that it contains only file name that
    # exist on the file system.
    def existing!
      resolve
      @items = @items.select { |fn| File.exist?(fn) }.uniq
      self
    end

    # FileList version of partition.  Needed because the nested arrays should
    # be FileLists in this version.
    def partition(&block)       # :nodoc:
      resolve
      result = @items.partition(&block)
      [
        self.class.new.import(result[0]),
        self.class.new.import(result[1]),
      ]
    end

    # Convert a FileList to a string by joining all elements with a space.
    def to_s
      resolve
      self.join(" ")
    end

    # Add matching glob patterns.
    def add_matching(pattern)
      self.class.glob(pattern).each do |fn|
        self << fn unless excluded_from_list?(fn)
      end
    end
    private :add_matching

    # Should the given file name be excluded from the list?
    #
    # NOTE: This method was formerly named "exclude?", but Rails
    # introduced an exclude? method as an array method and setup a
    # conflict with file list. We renamed the method to avoid
    # confusion. If you were using "FileList#exclude?" in your user
    # code, you will need to update.
    def excluded_from_list?(fn)
      return true if @exclude_patterns.any? do |pat|
        case pat
        when Regexp
          fn =~ pat
        when GLOB_PATTERN
          flags = File::FNM_PATHNAME
          # Ruby <= 1.9.3 does not support File::FNM_EXTGLOB
          flags |= File::FNM_EXTGLOB if defined? File::FNM_EXTGLOB
          File.fnmatch?(pat, fn, flags)
        else
          fn == pat
        end
      end
      @exclude_procs.any? { |p| p.call(fn) }
    end

    DEFAULT_IGNORE_PATTERNS = [
      /(^|[\/\\])CVS([\/\\]|$)/,
      /(^|[\/\\])\.svn([\/\\]|$)/,
      /\.bak$/,
      /~$/
    ]
    DEFAULT_IGNORE_PROCS = [
      proc { |fn| fn =~ /(^|[\/\\])core$/ && !File.directory?(fn) }
    ]

    def import(array) # :nodoc:
      @items = array
      self
    end

    class << self
      # Create a new file list including the files listed. Similar to:
      #
      #   FileList.new(*args)
      def [](*args)
        new(*args)
      end

      # Get a sorted list of files matching the pattern. This method
      # should be preferred to Dir[pattern] and Dir.glob(pattern) because
      # the files returned are guaranteed to be sorted.
      def glob(pattern, *args)
        Dir.glob(pattern, *args).sort
      end
    end
  end
end

module Rake
  class << self

    # Yield each file or directory component.
    def each_dir_parent(dir)    # :nodoc:
      old_length = nil
      while dir != "." && dir.length != old_length
        yield(dir)
        old_length = dir.length
        dir = File.dirname(dir)
      end
    end

    # Convert Pathname and Pathname-like objects to strings;
    # leave everything else alone
    def from_pathname(path)    # :nodoc:
      path = path.to_path if path.respond_to?(:to_path)
      path = path.to_str if path.respond_to?(:to_str)
      path
    end
  end
end # module Rake
PK)J[���''1share/gems/gems/rake-13.2.1/lib/rake/late_time.rbnu�[���# frozen_string_literal: true
module Rake
  # LateTime is a fake timestamp that occurs _after_ any other time value.
  class LateTime
    include Comparable
    include Singleton

    def <=>(other)
      1
    end

    def to_s
      "<LATE TIME>"
    end
  end

  LATE = LateTime.instance
end
PK)J["]���g�g3share/gems/gems/rake-13.2.1/lib/rake/application.rbnu�[���# frozen_string_literal: true
require "optparse"

require "rake/task_manager"
require "rake/file_list"
require "rake/thread_pool"
require "rake/thread_history_display"
require "rake/trace_output"
require "rake/win32"

module Rake

  CommandLineOptionError = Class.new(StandardError)

  ##
  # Rake main application object.  When invoking +rake+ from the
  # command line, a Rake::Application object is created and run.

  class Application
    include TaskManager
    include TraceOutput

    # The name of the application (typically 'rake')
    attr_reader :name

    # The original directory where rake was invoked.
    attr_reader :original_dir

    # Name of the actual rakefile used.
    attr_reader :rakefile

    # Number of columns on the terminal
    attr_accessor :terminal_columns

    # List of the top level task names (task names from the command line).
    attr_reader :top_level_tasks

    # Override the detected TTY output state (mostly for testing)
    attr_writer :tty_output

    DEFAULT_RAKEFILES = [
      "rakefile",
      "Rakefile",
      "rakefile.rb",
      "Rakefile.rb"
    ].freeze

    # Initialize a Rake::Application object.
    def initialize
      super
      @name = "rake"
      @rakefiles = DEFAULT_RAKEFILES.dup
      @rakefile = nil
      @pending_imports = []
      @imported = []
      @loaders = {}
      @default_loader = Rake::DefaultLoader.new
      @original_dir = Dir.pwd
      @top_level_tasks = []
      add_loader("rb", DefaultLoader.new)
      add_loader("rf", DefaultLoader.new)
      add_loader("rake", DefaultLoader.new)
      @tty_output = STDOUT.tty?
      @terminal_columns = ENV["RAKE_COLUMNS"].to_i

      set_default_options
    end

    # Run the Rake application.  The run method performs the following
    # three steps:
    #
    # * Initialize the command line options (+init+).
    # * Define the tasks (+load_rakefile+).
    # * Run the top level tasks (+top_level+).
    #
    # If you wish to build a custom rake command, you should call
    # +init+ on your application.  Then define any tasks.  Finally,
    # call +top_level+ to run your top level tasks.
    def run(argv = ARGV)
      standard_exception_handling do
        init "rake", argv
        load_rakefile
        top_level
      end
    end

    # Initialize the command line parameters and app name.
    def init(app_name="rake", argv = ARGV)
      standard_exception_handling do
        @name = app_name
        begin
          args = handle_options argv
        rescue ArgumentError
          # Backward compatibility for capistrano
          args = handle_options
        end
        load_debug_at_stop_feature
        collect_command_line_tasks(args)
      end
    end

    def load_debug_at_stop_feature
      return unless ENV["RAKE_DEBUG"]
      require "debug/session"
      DEBUGGER__::start no_sigint_hook: true, nonstop: true
      Rake::Task.prepend Module.new {
        def execute(*)
          exception = DEBUGGER__::SESSION.capture_exception_frames(/(exe|bin|lib)\/rake/) do
            super
          end

          if exception
            STDERR.puts exception.message
            DEBUGGER__::SESSION.enter_postmortem_session exception
            raise exception
          end
        end
      }
    rescue LoadError
    end
    private :load_debug_at_stop_feature

    # Find the rakefile and then load it and any pending imports.
    def load_rakefile
      standard_exception_handling do
        raw_load_rakefile
      end
    end

    # Run the top level tasks of a Rake application.
    def top_level
      run_with_threads do
        if options.show_tasks
          display_tasks_and_comments
        elsif options.show_prereqs
          display_prerequisites
        else
          top_level_tasks.each { |task_name| invoke_task(task_name) }
        end
      end
    end

    # Run the given block with the thread startup and shutdown.
    def run_with_threads
      thread_pool.gather_history if options.job_stats == :history

      yield

      thread_pool.join if defined?(@thread_pool)
      if options.job_stats
        stats = thread_pool.statistics
        puts "Maximum active threads: #{stats[:max_active_threads]} + main"
        puts "Total threads in play:  #{stats[:total_threads_in_play]} + main"
      end
      ThreadHistoryDisplay.new(thread_pool.history).show if
        options.job_stats == :history
    end

    # Add a loader to handle imported files ending in the extension
    # +ext+.
    def add_loader(ext, loader)
      ext = ".#{ext}" unless ext =~ /^\./
      @loaders[ext] = loader
    end

    # Application options from the command line
    def options
      @options ||= Struct.new(
        :always_multitask, :backtrace, :build_all, :dryrun,
        :ignore_deprecate, :ignore_system, :job_stats, :load_system,
        :nosearch, :rakelib, :show_all_tasks, :show_prereqs,
        :show_task_pattern, :show_tasks, :silent, :suppress_backtrace_pattern,
        :thread_pool_size, :trace, :trace_output, :trace_rules
      ).new
    end

    # Return the thread pool used for multithreaded processing.
    def thread_pool             # :nodoc:
      @thread_pool ||= ThreadPool.new(options.thread_pool_size || Rake.suggested_thread_count-1)
    end

    # internal ----------------------------------------------------------------

    # Invokes a task with arguments that are extracted from +task_string+
    def invoke_task(task_string) # :nodoc:
      name, args = parse_task_string(task_string)
      t = self[name]
      t.invoke(*args)
    end

    def parse_task_string(string) # :nodoc:
      /^([^\[]+)(?:\[(.*)\])$/ =~ string.to_s

      name           = $1
      remaining_args = $2

      return string, [] unless name
      return name,   [] if     remaining_args.empty?

      args = []

      begin
        /\s*((?:[^\\,]|\\.)*?)\s*(?:,\s*(.*))?$/ =~ remaining_args

        remaining_args = $2
        args << $1.gsub(/\\(.)/, '\1')
      end while remaining_args

      return name, args
    end

    # Provide standard exception handling for the given block.
    def standard_exception_handling # :nodoc:
      yield
    rescue SystemExit
      # Exit silently with current status
      raise
    rescue OptionParser::InvalidOption => ex
      $stderr.puts ex.message
      exit(false)
    rescue Exception => ex
      # Exit with error message
      display_error_message(ex)
      exit_because_of_exception(ex)
    end

    # Exit the program because of an unhandled exception.
    # (may be overridden by subclasses)
    def exit_because_of_exception(ex) # :nodoc:
      exit(false)
    end

    # Display the error message that caused the exception.
    def display_error_message(ex) # :nodoc:
      trace "#{name} aborted!"
      display_exception_details(ex)
      trace "Tasks: #{ex.chain}" if has_chain?(ex)
      trace "(See full trace by running task with --trace)" unless
         options.backtrace
    end

    def display_exception_details(ex) # :nodoc:
      display_exception_details_seen << ex

      display_exception_message_details(ex)
      display_exception_backtrace(ex) if ex.backtrace
      display_cause_details(ex.cause) if has_cause?(ex)
    end

    def display_cause_details(ex) # :nodoc:
      return if display_exception_details_seen.include? ex

      trace "\nCaused by:"
      display_exception_details(ex)
    end

    def display_exception_details_seen # :nodoc:
      Thread.current[:rake_display_exception_details_seen] ||= []
    end

    def has_cause?(ex) # :nodoc:
      ex.respond_to?(:cause) && ex.cause
    end

    def display_exception_message_details(ex) # :nodoc:
      if ex.instance_of?(RuntimeError)
        trace ex.message
      elsif ex.respond_to?(:detailed_message)
        trace "#{ex.class.name}: #{ex.detailed_message(highlight: false)}"
      else
        trace "#{ex.class.name}: #{ex.message}"
      end
    end

    def display_exception_backtrace(ex) # :nodoc:
      if options.backtrace
        trace ex.backtrace.join("\n")
      else
        trace Backtrace.collapse(ex.backtrace).join("\n")
      end
    end

    # Warn about deprecated usage.
    #
    # Example:
    #    Rake.application.deprecate("import", "Rake.import", caller.first)
    #
    def deprecate(old_usage, new_usage, call_site) # :nodoc:
      unless options.ignore_deprecate
        $stderr.puts "WARNING: '#{old_usage}' is deprecated.  " +
          "Please use '#{new_usage}' instead.\n" +
          "    at #{call_site}"
      end
    end

    # Does the exception have a task invocation chain?
    def has_chain?(exception) # :nodoc:
      exception.respond_to?(:chain) && exception.chain
    end
    private :has_chain?

    # True if one of the files in RAKEFILES is in the current directory.
    # If a match is found, it is copied into @rakefile.
    def have_rakefile # :nodoc:
      @rakefiles.each do |fn|
        if File.exist?(fn)
          others = FileList.glob(fn, File::FNM_CASEFOLD)
          return others.size == 1 ? others.first : fn
        elsif fn == ""
          return fn
        end
      end
      return nil
    end

    # True if we are outputting to TTY, false otherwise
    def tty_output? # :nodoc:
      @tty_output
    end

    # We will truncate output if we are outputting to a TTY or if we've been
    # given an explicit column width to honor
    def truncate_output? # :nodoc:
      tty_output? || @terminal_columns.nonzero?
    end

    # Display the tasks and comments.
    def display_tasks_and_comments # :nodoc:
      displayable_tasks = tasks.select { |t|
        (options.show_all_tasks || t.comment) &&
          t.name =~ options.show_task_pattern
      }
      case options.show_tasks
      when :tasks
        width = displayable_tasks.map { |t| t.name_with_args.length }.max || 10
        if truncate_output?
          max_column = terminal_width - name.size - width - 7
        else
          max_column = nil
        end

        displayable_tasks.each do |t|
          printf("#{name} %-#{width}s  # %s\n",
            t.name_with_args,
            max_column ? truncate(t.comment, max_column) : t.comment)
        end
      when :describe
        displayable_tasks.each do |t|
          puts "#{name} #{t.name_with_args}"
          comment = t.full_comment || ""
          comment.split("\n").each do |line|
            puts "    #{line}"
          end
          puts
        end
      when :lines
        displayable_tasks.each do |t|
          t.locations.each do |loc|
            printf "#{name} %-30s %s\n", t.name_with_args, loc
          end
        end
      else
        fail "Unknown show task mode: '#{options.show_tasks}'"
      end
    end

    def terminal_width # :nodoc:
      if @terminal_columns.nonzero?
        result = @terminal_columns
      else
        result = unix? ? dynamic_width : 80
      end
      (result < 10) ? 80 : result
    rescue
      80
    end

    # Calculate the dynamic width of the
    def dynamic_width # :nodoc:
      @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
    end

    def dynamic_width_stty # :nodoc:
      %x{stty size 2>/dev/null}.split[1].to_i
    end

    def dynamic_width_tput # :nodoc:
      %x{tput cols 2>/dev/null}.to_i
    end

    def unix? # :nodoc:
      RbConfig::CONFIG["host_os"] =~
        /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
    end

    def windows? # :nodoc:
      Win32.windows?
    end

    def truncate(string, width) # :nodoc:
      if string.nil?
        ""
      elsif string.length <= width
        string
      else
        (string[0, width - 3] || "") + "..."
      end
    end

    # Display the tasks and prerequisites
    def display_prerequisites # :nodoc:
      tasks.each do |t|
        puts "#{name} #{t.name}"
        t.prerequisites.each { |pre| puts "    #{pre}" }
      end
    end

    def trace(*strings) # :nodoc:
      options.trace_output ||= $stderr
      trace_on(options.trace_output, *strings)
    end

    def sort_options(options) # :nodoc:
      options.sort_by { |opt|
        opt.select { |o| o.is_a?(String) && o =~ /^-/ }.map(&:downcase).sort.reverse
      }
    end
    private :sort_options

    # A list of all the standard options used in rake, suitable for
    # passing to OptionParser.
    def standard_rake_options # :nodoc:
      sort_options(
        [
          ["--all", "-A",
            "Show all tasks, even uncommented ones (in combination with -T or -D)",
            lambda { |value|
              options.show_all_tasks = value
            }
          ],
          ["--backtrace=[OUT]",
            "Enable full backtrace.  OUT can be stderr (default) or stdout.",
            lambda { |value|
              options.backtrace = true
              select_trace_output(options, "backtrace", value)
            }
          ],
          ["--build-all", "-B",
           "Build all prerequisites, including those which are up-to-date.",
           lambda { |value|
             options.build_all = true
           }
          ],
          ["--comments",
            "Show commented tasks only",
            lambda { |value|
              options.show_all_tasks = !value
            }
          ],
          ["--describe", "-D [PATTERN]",
            "Describe the tasks (matching optional PATTERN), then exit.",
            lambda { |value|
              select_tasks_to_show(options, :describe, value)
            }
          ],
          ["--directory", "-C [DIRECTORY]",
            "Change to DIRECTORY before doing anything.",
            lambda { |value|
              Dir.chdir value
              @original_dir = Dir.pwd
            }
          ],
          ["--dry-run", "-n",
            "Do a dry run without executing actions.",
            lambda { |value|
              Rake.verbose(true)
              Rake.nowrite(true)
              options.dryrun = true
              options.trace = true
            }
          ],
          ["--execute", "-e CODE",
            "Execute some Ruby code and exit.",
            lambda { |value|
              eval(value)
              exit
            }
          ],
          ["--execute-print", "-p CODE",
            "Execute some Ruby code, print the result, then exit.",
            lambda { |value|
              puts eval(value)
              exit
            }
          ],
          ["--execute-continue",  "-E CODE",
            "Execute some Ruby code, " +
            "then continue with normal task processing.",
            lambda { |value| eval(value) }
          ],
          ["--jobs",  "-j [NUMBER]",
            "Specifies the maximum number of tasks to execute in parallel. " +
            "(default is number of CPU cores + 4)",
            lambda { |value|
              if value.nil? || value == ""
                value = Float::INFINITY
              elsif value =~ /^\d+$/
                value = value.to_i
              else
                value = Rake.suggested_thread_count
              end
              value = 1 if value < 1
              options.thread_pool_size = value - 1
            }
          ],
          ["--job-stats [LEVEL]",
            "Display job statistics. " +
            "LEVEL=history displays a complete job list",
            lambda { |value|
              if value =~ /^history/i
                options.job_stats = :history
              else
                options.job_stats = true
              end
            }
          ],
          ["--libdir", "-I LIBDIR",
            "Include LIBDIR in the search path for required modules.",
            lambda { |value| $:.push(value) }
          ],
          ["--multitask", "-m",
            "Treat all tasks as multitasks.",
            lambda { |value| options.always_multitask = true }
          ],
          ["--no-search", "--nosearch",
            "-N", "Do not search parent directories for the Rakefile.",
            lambda { |value| options.nosearch = true }
          ],
          ["--prereqs", "-P",
            "Display the tasks and dependencies, then exit.",
            lambda { |value| options.show_prereqs = true }
          ],
          ["--quiet", "-q",
            "Do not log messages to standard output.",
            lambda { |value| Rake.verbose(false) }
          ],
          ["--rakefile", "-f [FILENAME]",
            "Use FILENAME as the rakefile to search for.",
            lambda { |value|
              value ||= ""
              @rakefiles.clear
              @rakefiles << value
            }
          ],
          ["--rakelibdir", "--rakelib", "-R RAKELIBDIR",
            "Auto-import any .rake files in RAKELIBDIR. " +
            "(default is 'rakelib')",
            lambda { |value|
              options.rakelib = value.split(File::PATH_SEPARATOR)
            }
          ],
          ["--require", "-r MODULE",
            "Require MODULE before executing rakefile.",
            lambda { |value|
              begin
                require value
              rescue LoadError => ex
                begin
                  rake_require value
                rescue LoadError
                  raise ex
                end
              end
            }
          ],
          ["--rules",
            "Trace the rules resolution.",
            lambda { |value| options.trace_rules = true }
          ],
          ["--silent", "-s",
            "Like --quiet, but also suppresses the " +
            "'in directory' announcement.",
            lambda { |value|
              Rake.verbose(false)
              options.silent = true
            }
          ],
          ["--suppress-backtrace PATTERN",
            "Suppress backtrace lines matching regexp PATTERN. " +
            "Ignored if --trace is on.",
            lambda { |value|
              options.suppress_backtrace_pattern = Regexp.new(value)
            }
          ],
          ["--system",  "-g",
            "Using system wide (global) rakefiles " +
            "(usually '~/.rake/*.rake').",
            lambda { |value| options.load_system = true }
          ],
          ["--no-system", "--nosystem", "-G",
            "Use standard project Rakefile search paths, " +
            "ignore system wide rakefiles.",
            lambda { |value| options.ignore_system = true }
          ],
          ["--tasks", "-T [PATTERN]",
            "Display the tasks (matching optional PATTERN) " +
            "with descriptions, then exit. " +
            "-AT combination displays all the tasks, including those without descriptions.",
            lambda { |value|
              select_tasks_to_show(options, :tasks, value)
            }
          ],
          ["--trace=[OUT]", "-t",
            "Turn on invoke/execute tracing, enable full backtrace. " +
            "OUT can be stderr (default) or stdout.",
            lambda { |value|
              options.trace = true
              options.backtrace = true
              select_trace_output(options, "trace", value)
              Rake.verbose(true)
            }
          ],
          ["--verbose", "-v",
            "Log message to standard output.",
            lambda { |value| Rake.verbose(true) }
          ],
          ["--version", "-V",
            "Display the program version.",
            lambda { |value|
              puts "rake, version #{Rake::VERSION}"
              exit
            }
          ],
          ["--where", "-W [PATTERN]",
            "Describe the tasks (matching optional PATTERN), then exit.",
            lambda { |value|
              select_tasks_to_show(options, :lines, value)
              options.show_all_tasks = true
            }
          ],
          ["--no-deprecation-warnings", "-X",
            "Disable the deprecation warnings.",
            lambda { |value|
              options.ignore_deprecate = true
            }
          ],
        ])
    end

    def select_tasks_to_show(options, show_tasks, value) # :nodoc:
      options.show_tasks = show_tasks
      options.show_task_pattern = Regexp.new(value || "")
      Rake::TaskManager.record_task_metadata = true
    end
    private :select_tasks_to_show

    def select_trace_output(options, trace_option, value) # :nodoc:
      value = value.strip unless value.nil?
      case value
      when "stdout"
        options.trace_output = $stdout
      when "stderr", nil
        options.trace_output = $stderr
      else
        fail CommandLineOptionError,
          "Unrecognized --#{trace_option} option '#{value}'"
      end
    end
    private :select_trace_output

    # Read and handle the command line options.  Returns the command line
    # arguments that we didn't understand, which should (in theory) be just
    # task names and env vars.
    def handle_options(argv) # :nodoc:
      set_default_options

      OptionParser.new do |opts|
        opts.banner = "#{Rake.application.name} [-f rakefile] {options} targets..."
        opts.separator ""
        opts.separator "Options are ..."

        opts.on_tail("-h", "--help", "-H", "Display this help message.") do
          puts opts
          exit
        end

        standard_rake_options.each { |args| opts.on(*args) }
        opts.environment("RAKEOPT")
      end.parse(argv)
    end

    # Similar to the regular Ruby +require+ command, but will check
    # for *.rake files in addition to *.rb files.
    def rake_require(file_name, paths=$LOAD_PATH, loaded=$") # :nodoc:
      fn = file_name + ".rake"
      return false if loaded.include?(fn)
      paths.each do |path|
        full_path = File.join(path, fn)
        if File.exist?(full_path)
          Rake.load_rakefile(full_path)
          loaded << fn
          return true
        end
      end
      fail LoadError, "Can't find #{file_name}"
    end

    def find_rakefile_location # :nodoc:
      here = Dir.pwd
      until (fn = have_rakefile)
        Dir.chdir("..")
        return nil if Dir.pwd == here || options.nosearch
        here = Dir.pwd
      end
      [fn, here]
    ensure
      Dir.chdir(Rake.original_dir)
    end

    def print_rakefile_directory(location) # :nodoc:
      $stderr.puts "(in #{Dir.pwd})" unless
        options.silent or original_dir == location
    end

    def raw_load_rakefile # :nodoc:
      rakefile, location = find_rakefile_location
      if (!options.ignore_system) &&
          (options.load_system || rakefile.nil?) &&
          system_dir && File.directory?(system_dir)
        print_rakefile_directory(location)
        glob("#{system_dir}/*.rake") do |name|
          add_import name
        end
      else
        fail "No Rakefile found (looking for: #{@rakefiles.join(', ')})" if
          rakefile.nil?
        @rakefile = rakefile
        Dir.chdir(location)
        print_rakefile_directory(location)
        Rake.load_rakefile(File.expand_path(@rakefile)) if
          @rakefile && @rakefile != ""
        options.rakelib.each do |rlib|
          glob("#{rlib}/*.rake") do |name|
            add_import name
          end
        end
      end
      load_imports
    end

    def glob(path, &block) # :nodoc:
      FileList.glob(path.tr("\\", "/")).each(&block)
    end
    private :glob

    # The directory path containing the system wide rakefiles.
    def system_dir # :nodoc:
      @system_dir ||=
        begin
          if ENV["RAKE_SYSTEM"]
            ENV["RAKE_SYSTEM"]
          else
            standard_system_dir
          end
        end
    end

    # The standard directory containing system wide rake files.
    if Win32.windows?
      def standard_system_dir #:nodoc:
        Win32.win32_system_dir
      end
    else
      def standard_system_dir #:nodoc:
        File.join(File.expand_path("~"), ".rake")
      end
    end
    private :standard_system_dir

    # Collect the list of tasks on the command line.  If no tasks are
    # given, return a list containing only the default task.
    # Environmental assignments are processed at this time as well.
    #
    # `args` is the list of arguments to peruse to get the list of tasks.
    # It should be the command line that was given to rake, less any
    # recognised command-line options, which OptionParser.parse will
    # have taken care of already.
    def collect_command_line_tasks(args) # :nodoc:
      @top_level_tasks = []
      args.each do |arg|
        if arg =~ /^(\w+)=(.*)$/m
          ENV[$1] = $2
        else
          @top_level_tasks << arg unless arg =~ /^-/
        end
      end
      @top_level_tasks.push(default_task_name) if @top_level_tasks.empty?
    end

    # Default task name ("default").
    # (May be overridden by subclasses)
    def default_task_name # :nodoc:
      "default"
    end

    # Add a file to the list of files to be imported.
    def add_import(fn) # :nodoc:
      @pending_imports << fn
    end

    # Load the pending list of imported files.
    def load_imports # :nodoc:
      while fn = @pending_imports.shift
        next if @imported.member?(fn)
        fn_task = lookup(fn) and fn_task.invoke
        ext = File.extname(fn)
        loader = @loaders[ext] || @default_loader
        loader.load(fn)
        if fn_task = lookup(fn) and fn_task.needed?
          fn_task.reenable
          fn_task.invoke
          loader.load(fn)
        end
        @imported << fn
      end
    end

    def rakefile_location(backtrace=caller) # :nodoc:
      backtrace.map { |t| t[/([^:]+):/, 1] }

      re = /^#{@rakefile}$/
      re = /#{re.source}/i if windows?

      backtrace.find { |str| str =~ re } || ""
    end

    def set_default_options # :nodoc:
      options.always_multitask           = false
      options.backtrace                  = false
      options.build_all                  = false
      options.dryrun                     = false
      options.ignore_deprecate           = false
      options.ignore_system              = false
      options.job_stats                  = false
      options.load_system                = false
      options.nosearch                   = false
      options.rakelib                    = %w[rakelib]
      options.show_all_tasks             = false
      options.show_prereqs               = false
      options.show_task_pattern          = nil
      options.show_tasks                 = nil
      options.silent                     = false
      options.suppress_backtrace_pattern = nil
      options.thread_pool_size           = Rake.suggested_thread_count
      options.trace                      = false
      options.trace_output               = $stderr
      options.trace_rules                = false
    end

  end
end
PK)J[�R��3share/gems/gems/rake-13.2.1/lib/rake/linked_list.rbnu�[���# frozen_string_literal: true
module Rake

  # Polylithic linked list structure used to implement several data
  # structures in Rake.
  class LinkedList
    include Enumerable
    attr_reader :head, :tail

    # Polymorphically add a new element to the head of a list. The
    # type of head node will be the same list type as the tail.
    def conj(item)
      self.class.cons(item, self)
    end

    # Is the list empty?
    # .make guards against a list being empty making any instantiated LinkedList
    # object not empty by default
    # You should consider overriding this method if you implement your own .make method
    def empty?
      false
    end

    # Lists are structurally equivalent.
    def ==(other)
      current = self
      while !current.empty? && !other.empty?
        return false if current.head != other.head
        current = current.tail
        other = other.tail
      end
      current.empty? && other.empty?
    end

    # Convert to string: LL(item, item...)
    def to_s
      items = map(&:to_s).join(", ")
      "LL(#{items})"
    end

    # Same as +to_s+, but with inspected items.
    def inspect
      items = map(&:inspect).join(", ")
      "LL(#{items})"
    end

    # For each item in the list.
    def each
      current = self
      while !current.empty?
        yield(current.head)
        current = current.tail
      end
      self
    end

    # Make a list out of the given arguments. This method is
    # polymorphic
    def self.make(*args)
      # return an EmptyLinkedList if there are no arguments
      return empty if !args || args.empty?

      # build a LinkedList by starting at the tail and iterating
      # through each argument
      # inject takes an EmptyLinkedList to start
      args.reverse.inject(empty) do |list, item|
        list = cons(item, list)
        list # return the newly created list for each item in the block
      end
    end

    # Cons a new head onto the tail list.
    def self.cons(head, tail)
      new(head, tail)
    end

    # The standard empty list class for the given LinkedList class.
    def self.empty
      self::EMPTY
    end

    protected

    def initialize(head, tail=EMPTY)
      @head = head
      @tail = tail
    end

    # Represent an empty list, using the Null Object Pattern.
    #
    # When inheriting from the LinkedList class, you should implement
    # a type specific Empty class as well. Make sure you set the class
    # instance variable @parent to the associated list class (this
    # allows conj, cons and make to work polymorphically).
    class EmptyLinkedList < LinkedList
      @parent = LinkedList

      def initialize
      end

      def empty?
        true
      end

      def self.cons(head, tail)
        @parent.cons(head, tail)
      end
    end

    EMPTY = EmptyLinkedList.new
  end
end
PK)J[~�y�	�	6share/gems/gems/rake-13.2.1/lib/rake/task_arguments.rbnu�[���# frozen_string_literal: true
module Rake

  ##
  # TaskArguments manage the arguments passed to a task.
  #
  class TaskArguments
    include Enumerable

    # Argument names
    attr_reader :names

    # Create a TaskArgument object with a list of argument +names+ and a set
    # of associated +values+.  +parent+ is the parent argument object.
    def initialize(names, values, parent=nil)
      @names = names
      @parent = parent
      @hash = {}
      @values = values
      names.each_with_index { |name, i|
        next if values[i].nil? || values[i] == ""
        @hash[name.to_sym] = values[i]
      }
    end

    # Retrieve the complete array of sequential values
    def to_a
      @values.dup
    end

    # Retrieve the list of values not associated with named arguments
    def extras
      @values[@names.length..-1] || []
    end

    # Create a new argument scope using the prerequisite argument
    # names.
    def new_scope(names)
      values = names.map { |n| self[n] }
      self.class.new(names, values + extras, self)
    end

    # Find an argument value by name or index.
    def [](index)
      lookup(index.to_sym)
    end

    # Specify a hash of default values for task arguments. Use the
    # defaults only if there is no specific value for the given
    # argument.
    def with_defaults(defaults)
      @hash = defaults.merge(@hash)
    end

    # Enumerates the arguments and their values
    def each(&block)
      @hash.each(&block)
    end

    # Extracts the argument values at +keys+
    def values_at(*keys)
      keys.map { |k| lookup(k) }
    end

    # Returns the value of the given argument via method_missing
    def method_missing(sym, *args)
      lookup(sym.to_sym)
    end

    # Returns a Hash of arguments and their values
    def to_hash
      @hash.dup
    end

    def to_s # :nodoc:
      inspect
    end

    def inspect # :nodoc:
      inspection = @hash.map do |k,v|
        "#{k.to_s}: #{v.to_s}"
      end.join(", ")

      "#<#{self.class} #{inspection}>"
    end

    # Returns true if +key+ is one of the arguments
    def has_key?(key)
      @hash.has_key?(key)
    end
    alias key? has_key?

    def fetch(*args, &block)
      @hash.fetch(*args, &block)
    end

    protected

    def lookup(name) # :nodoc:
      if @hash.has_key?(name)
        @hash[name]
      elsif @parent
        @parent.lookup(name)
      end
    end
  end

  EMPTY_TASK_ARGS = TaskArguments.new([], []) # :nodoc:
end
PK)J[���YY2share/gems/gems/rake-13.2.1/lib/rake/multi_task.rbnu�[���# frozen_string_literal: true
module Rake

  # Same as a regular task, but the immediate prerequisites are done in
  # parallel using Ruby threads.
  #
  class MultiTask < Task
    private

    def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
      invoke_prerequisites_concurrently(task_args, invocation_chain)
    end
  end
end
PK)J[QG�-share/gems/gems/rake-13.2.1/lib/rake/clean.rbnu�[���# frozen_string_literal: true
# The 'rake/clean' file defines two file lists (CLEAN and CLOBBER) and
# two rake tasks (:clean and :clobber).
#
# [:clean] Clean up the project by deleting scratch files and backup
#          files.  Add files to the CLEAN file list to have the :clean
#          target handle them.
#
# [:clobber] Clobber all generated and non-source files in a project.
#            The task depends on :clean, so all the clean files will
#            be deleted as well as files in the CLOBBER file list.
#            The intent of this task is to return a project to its
#            pristine, just unpacked state.

require "rake"

# :stopdoc:

module Rake
  module Cleaner
    extend FileUtils

    module_function

    def cleanup_files(file_names)
      file_names.each do |file_name|
        cleanup(file_name)
      end
    end

    def cleanup(file_name, **opts)
      begin
        opts = { verbose: Rake.application.options.trace }.merge(opts)
        rm_r file_name, **opts
      rescue StandardError => ex
        puts "Failed to remove #{file_name}: #{ex}" unless file_already_gone?(file_name)
      end
    end

    def file_already_gone?(file_name)
      return false if File.exist?(file_name)

      path = file_name
      prev = nil

      while path = File.dirname(path)
        return false if cant_be_deleted?(path)
        break if [prev, "."].include?(path)
        prev = path
      end
      true
    end
    private_class_method :file_already_gone?

    def cant_be_deleted?(path_name)
      File.exist?(path_name) &&
        (!File.readable?(path_name) || !File.executable?(path_name))
    end
    private_class_method :cant_be_deleted?
  end
end

CLEAN = ::Rake::FileList["**/*~", "**/*.bak", "**/core"]
CLEAN.clear_exclude.exclude { |fn|
  fn.pathmap("%f").downcase == "core" && File.directory?(fn)
}

desc "Remove any temporary products."
task :clean do
  Rake::Cleaner.cleanup_files(CLEAN)
end

CLOBBER = ::Rake::FileList.new

desc "Remove any generated files."
task clobber: [:clean] do
  Rake::Cleaner.cleanup_files(CLOBBER)
end
PK)J[��l��:share/gems/gems/rake-13.2.1/lib/rake/file_creation_task.rbnu�[���# frozen_string_literal: true
require "rake/file_task"
require "rake/early_time"

module Rake

  # A FileCreationTask is a file task that when used as a dependency will be
  # needed if and only if the file has not been created.  Once created, it is
  # not re-triggered if any of its dependencies are newer, nor does trigger
  # any rebuilds of tasks that depend on it whenever it is updated.
  #
  class FileCreationTask < FileTask
    # Is this file task needed?  Yes if it doesn't exist.
    def needed?
      !File.exist?(name)
    end

    # Time stamp for file creation task.  This time stamp is earlier
    # than any other time stamp.
    def timestamp
      Rake::EARLY
    end
  end

end
PK)J[�.*C}}-share/gems/gems/rake-13.2.1/lib/rake/phony.rbnu�[���# frozen_string_literal: true
# Defines a :phony task that you can use as a dependency. This allows
# file-based tasks to use non-file-based tasks as prerequisites
# without forcing them to rebuild.
#
# See FileTask#out_of_date? and Task#timestamp for more info.

require "rake"

task :phony

Rake::Task[:phony].tap do |task|
  def task.timestamp # :nodoc:
    Time.at 0
  end
end
PK)J[�l�??4share/gems/gems/rake-13.2.1/lib/rake/trace_output.rbnu�[���# frozen_string_literal: true
module Rake
  module TraceOutput # :nodoc: all

    # Write trace output to output stream +out+.
    #
    # The write is done as a single IO call (to print) to lessen the
    # chance that the trace output is interrupted by other tasks also
    # producing output.
    def trace_on(out, *strings)
      sep = $\ || "\n"
      if strings.empty?
        output = sep
      else
        output = strings.map { |s|
          next if s.nil?
          s.end_with?(sep) ? s : s + sep
        }.join
      end
      out.print(output)
    end
  end
end
PK)J[|��^��0share/gems/gems/rake-13.2.1/lib/rake/testtask.rbnu�[���# frozen_string_literal: true
require "rake"
require "rake/tasklib"

module Rake

  # Create a task that runs a set of tests.
  #
  # Example:
  #   require "rake/testtask"
  #
  #   Rake::TestTask.new do |t|
  #     t.libs << "test"
  #     t.test_files = FileList['test/test*.rb']
  #     t.verbose = true
  #   end
  #
  # If rake is invoked with a "TEST=filename" command line option,
  # then the list of test files will be overridden to include only the
  # filename specified on the command line.  This provides an easy way
  # to run just one test.
  #
  # If rake is invoked with a "TESTOPTS=options" command line option,
  # then the given options are passed to the test process after a
  # '--'.  This allows Test::Unit options to be passed to the test
  # suite.
  #
  # Examples:
  #
  #   rake test                           # run tests normally
  #   rake test TEST=just_one_file.rb     # run just one test file.
  #   rake test TESTOPTS="-v"             # run in verbose mode
  #   rake test TESTOPTS="--runner=fox"   # use the fox test runner
  #
  class TestTask < TaskLib

    # Name of test task. (default is :test)
    attr_accessor :name

    # List of directories added to $LOAD_PATH before running the
    # tests. (default is 'lib')
    attr_accessor :libs

    # True if verbose test output desired. (default is false)
    attr_accessor :verbose

    # Test options passed to the test suite.  An explicit
    # TESTOPTS=opts on the command line will override this. (default
    # is NONE)
    attr_accessor :options

    # Request that the tests be run with the warning flag set.
    # E.g. warning=true implies "ruby -w" used to run the tests.
    # (default is true)
    attr_accessor :warning

    # Glob pattern to match test files. (default is 'test/test*.rb')
    attr_accessor :pattern

    # Style of test loader to use.  Options are:
    #
    # * :rake -- Rake provided test loading script (default).
    # * :testrb -- Ruby provided test loading script.
    # * :direct -- Load tests using command line loader.
    #
    attr_accessor :loader

    # Array of command line options to pass to ruby when running test loader.
    attr_accessor :ruby_opts

    # Description of the test task. (default is 'Run tests')
    attr_accessor :description

    # Task prerequisites.
    attr_accessor :deps

    # Explicitly define the list of test files to be included in a
    # test.  +list+ is expected to be an array of file names (a
    # FileList is acceptable).  If both +pattern+ and +test_files+ are
    # used, then the list of test files is the union of the two.
    def test_files=(list)
      @test_files = list
    end

    # Create a testing task.
    def initialize(name=:test)
      @name = name
      @libs = ["lib"]
      @pattern = nil
      @options = nil
      @test_files = nil
      @verbose = false
      @warning = true
      @loader = :rake
      @ruby_opts = []
      @description = "Run tests" + (@name == :test ? "" : " for #{@name}")
      @deps = []
      if @name.is_a?(Hash)
        @deps = @name.values.first
        @name = @name.keys.first
      end
      yield self if block_given?
      @pattern = "test/test*.rb" if @pattern.nil? && @test_files.nil?
      define
    end

    # Create the tasks defined by this task lib.
    def define
      desc @description
      task @name => Array(deps) do
        FileUtilsExt.verbose(@verbose) do
          puts "Use TESTOPTS=\"--verbose\" to pass --verbose" \
            ", etc. to runners." if ARGV.include? "--verbose"
          args =
            "#{ruby_opts_string} #{run_code} " +
            "#{file_list_string} #{option_list}"
          ruby args do |ok, status|
            if !ok && status.respond_to?(:signaled?) && status.signaled?
              raise SignalException.new(status.termsig)
            elsif !ok
              status  = "Command failed with status (#{status.exitstatus})"
              details = ": [ruby #{args}]"
              message =
                if Rake.application.options.trace or @verbose
                  status + details
                else
                  status
                end

              fail message
            end
          end
        end
      end
      self
    end

    def option_list # :nodoc:
      (ENV["TESTOPTS"] ||
        ENV["TESTOPT"] ||
        ENV["TEST_OPTS"] ||
        ENV["TEST_OPT"] ||
        @options ||
        "")
    end

    def ruby_opts_string # :nodoc:
      opts = @ruby_opts.dup
      opts.unshift("-I\"#{lib_path}\"") unless @libs.empty?
      opts.unshift("-w") if @warning
      opts.join(" ")
    end

    def lib_path # :nodoc:
      @libs.join(File::PATH_SEPARATOR)
    end

    def file_list_string # :nodoc:
      file_list.map { |fn| "\"#{fn}\"" }.join(" ")
    end

    def file_list # :nodoc:
      if ENV["TEST"]
        FileList[ENV["TEST"]]
      else
        result = []
        result += @test_files.to_a if @test_files
        result += FileList[@pattern].to_a if @pattern
        result
      end
    end

    def ruby_version # :nodoc:
      RUBY_VERSION
    end

    def run_code # :nodoc:
      case @loader
      when :direct
        "-e \"ARGV.each{|f| require f}\""
      when :testrb
        "-S testrb"
      when :rake
        "#{__dir__}/rake_test_loader.rb"
      end
    end

  end
end
PK)J[�����/share/gems/gems/rake-13.2.1/lib/rake/version.rbnu�[���# frozen_string_literal: true
module Rake
  VERSION = "13.2.1"

  module Version # :nodoc: all
    MAJOR, MINOR, BUILD, *OTHER = Rake::VERSION.split "."

    NUMBERS = [MAJOR, MINOR, BUILD, *OTHER]
  end
end
PK)J[�((4share/gems/gems/rake-13.2.1/lib/rake/task_manager.rbnu�[���# frozen_string_literal: true
module Rake

  # The TaskManager module is a mixin for managing tasks.
  module TaskManager
    # Track the last comment made in the Rakefile.
    attr_accessor :last_description

    def initialize # :nodoc:
      super
      @tasks = Hash.new
      @rules = Array.new
      @scope = Scope.make
      @last_description = nil
    end

    def create_rule(*args, &block) # :nodoc:
      pattern, args, deps, order_only = resolve_args(args)
      pattern = Regexp.new(Regexp.quote(pattern) + "$") if String === pattern
      @rules << [pattern, args, deps, order_only, block]
    end

    def define_task(task_class, *args, &block) # :nodoc:
      task_name, arg_names, deps, order_only = resolve_args(args)

      original_scope = @scope
      if String === task_name and
         not task_class.ancestors.include? Rake::FileTask
        task_name, *definition_scope = *(task_name.split(":").reverse)
        @scope = Scope.make(*(definition_scope + @scope.to_a))
      end

      task_name = task_class.scope_name(@scope, task_name)
      task = intern(task_class, task_name)
      task.set_arg_names(arg_names) unless arg_names.empty?
      if Rake::TaskManager.record_task_metadata
        add_location(task)
        task.add_description(get_description(task))
      end
      task.enhance(Task.format_deps(deps), &block)
      task | order_only unless order_only.nil?
      task
    ensure
      @scope = original_scope
    end

    # Lookup a task.  Return an existing task if found, otherwise
    # create a task of the current type.
    def intern(task_class, task_name)
      @tasks[task_name.to_s] ||= task_class.new(task_name, self)
    end

    # Find a matching task for +task_name+.
    def [](task_name, scopes=nil)
      task_name = task_name.to_s
      self.lookup(task_name, scopes) or
        enhance_with_matching_rule(task_name) or
        synthesize_file_task(task_name) or
        fail generate_message_for_undefined_task(task_name)
    end

    def generate_message_for_undefined_task(task_name)
      message = "Don't know how to build task '#{task_name}' "\
                "(See the list of available tasks with `#{Rake.application.name} --tasks`)"
      message + generate_did_you_mean_suggestions(task_name)
    end

    def generate_did_you_mean_suggestions(task_name)
      return "" unless defined?(::DidYouMean::SpellChecker)

      suggestions = ::DidYouMean::SpellChecker.new(dictionary: @tasks.keys).correct(task_name.to_s)
      if ::DidYouMean.respond_to?(:formatter)# did_you_mean v1.2.0 or later
        ::DidYouMean.formatter.message_for(suggestions)
      elsif defined?(::DidYouMean::Formatter) # before did_you_mean v1.2.0
        ::DidYouMean::Formatter.new(suggestions).to_s
      else
        ""
      end
    end

    def synthesize_file_task(task_name) # :nodoc:
      return nil unless File.exist?(task_name)
      define_task(Rake::FileTask, task_name)
    end

    # Resolve the arguments for a task/rule.  Returns a tuple of
    # [task_name, arg_name_list, prerequisites, order_only_prerequisites].
    def resolve_args(args)
      if args.last.is_a?(Hash)
        deps = args.pop
        resolve_args_with_dependencies(args, deps)
      else
        resolve_args_without_dependencies(args)
      end
    end

    # Resolve task arguments for a task or rule when there are no
    # dependencies declared.
    #
    # The patterns recognized by this argument resolving function are:
    #
    #   task :t
    #   task :t, [:a]
    #
    def resolve_args_without_dependencies(args)
      task_name = args.shift
      if args.size == 1 && args.first.respond_to?(:to_ary)
        arg_names = args.first.to_ary
      else
        arg_names = args
      end
      [task_name, arg_names, [], nil]
    end
    private :resolve_args_without_dependencies

    # Resolve task arguments for a task or rule when there are
    # dependencies declared.
    #
    # The patterns recognized by this argument resolving function are:
    #
    #   task :t, order_only: [:e]
    #   task :t => [:d]
    #   task :t => [:d], order_only: [:e]
    #   task :t, [a] => [:d]
    #   task :t, [a] => [:d], order_only: [:e]
    #
    def resolve_args_with_dependencies(args, hash) # :nodoc:
      fail "Task Argument Error" if
        hash.size != 1 &&
        (hash.size != 2 || !hash.key?(:order_only))
      order_only = hash.delete(:order_only)
      key, value = hash.map { |k, v| [k, v] }.first
      if args.empty?
        task_name = key
        arg_names = []
        deps = value || []
      else
        task_name = args.shift
        arg_names = key || args.shift|| []
        deps = value || []
      end
      deps = [deps] unless deps.respond_to?(:to_ary)
      [task_name, arg_names, deps, order_only]
    end
    private :resolve_args_with_dependencies

    # If a rule can be found that matches the task name, enhance the
    # task with the prerequisites and actions from the rule.  Set the
    # source attribute of the task appropriately for the rule.  Return
    # the enhanced task or nil of no rule was found.
    def enhance_with_matching_rule(task_name, level=0)
      fail Rake::RuleRecursionOverflowError,
        "Rule Recursion Too Deep" if level >= 16
      @rules.each do |pattern, args, extensions, order_only, block|
        if pattern && pattern.match(task_name)
          task = attempt_rule(task_name, pattern, args, extensions, block, level)
          task | order_only unless order_only.nil?
          return task if task
        end
      end
      nil
    rescue Rake::RuleRecursionOverflowError => ex
      ex.add_target(task_name)
      fail ex
    end

    # List of all defined tasks in this application.
    def tasks
      @tasks.values.sort_by { |t| t.name }
    end

    # List of all the tasks defined in the given scope (and its
    # sub-scopes).
    def tasks_in_scope(scope)
      prefix = scope.path
      tasks.select { |t|
        /^#{prefix}:/ =~ t.name
      }
    end

    # Clear all tasks in this application.
    def clear
      @tasks.clear
      @rules.clear
    end

    # Lookup a task, using scope and the scope hints in the task name.
    # This method performs straight lookups without trying to
    # synthesize file tasks or rules.  Special scope names (e.g. '^')
    # are recognized.  If no scope argument is supplied, use the
    # current scope.  Return nil if the task cannot be found.
    def lookup(task_name, initial_scope=nil)
      initial_scope ||= @scope
      task_name = task_name.to_s
      if task_name =~ /^rake:/
        scopes = Scope.make
        task_name = task_name.sub(/^rake:/, "")
      elsif task_name =~ /^(\^+)/
        scopes = initial_scope.trim($1.size)
        task_name = task_name.sub(/^(\^+)/, "")
      else
        scopes = initial_scope
      end
      lookup_in_scope(task_name, scopes)
    end

    # Lookup the task name
    def lookup_in_scope(name, scope)
      loop do
        tn = scope.path_with_task_name(name)
        task = @tasks[tn]
        return task if task
        break if scope.empty?
        scope = scope.tail
      end
      nil
    end
    private :lookup_in_scope

    # Return the list of scope names currently active in the task
    # manager.
    def current_scope
      @scope
    end

    # Evaluate the block in a nested namespace named +name+.  Create
    # an anonymous namespace if +name+ is nil.
    def in_namespace(name)
      name ||= generate_name
      @scope = Scope.new(name, @scope)
      ns = NameSpace.new(self, @scope)
      yield(ns)
      ns
    ensure
      @scope = @scope.tail
    end

    private

    # Add a location to the locations field of the given task.
    def add_location(task)
      loc = find_location
      task.locations << loc if loc
      task
    end

    # Find the location that called into the dsl layer.
    def find_location
      locations = caller
      i = 0
      while locations[i]
        return locations[i + 1] if locations[i] =~ /rake\/dsl_definition.rb/
        i += 1
      end
      nil
    end

    # Generate an anonymous namespace name.
    def generate_name
      @seed ||= 0
      @seed += 1
      "_anon_#{@seed}"
    end

    def trace_rule(level, message) # :nodoc:
      options.trace_output.puts "#{"    " * level}#{message}" if
        Rake.application.options.trace_rules
    end

    # Attempt to create a rule given the list of prerequisites.
    def attempt_rule(task_name, task_pattern, args, extensions, block, level)
      sources = make_sources(task_name, task_pattern, extensions)
      prereqs = sources.map { |source|
        trace_rule level, "Attempting Rule #{task_name} => #{source}"
        if File.exist?(source) || Rake::Task.task_defined?(source)
          trace_rule level, "(#{task_name} => #{source} ... EXIST)"
          source
        elsif parent = enhance_with_matching_rule(source, level + 1)
          trace_rule level, "(#{task_name} => #{source} ... ENHANCE)"
          parent.name
        else
          trace_rule level, "(#{task_name} => #{source} ... FAIL)"
          return nil
        end
      }
      task = FileTask.define_task(task_name, { args => prereqs }, &block)
      task.sources = prereqs
      task
    end

    # Make a list of sources from the list of file name extensions /
    # translation procs.
    def make_sources(task_name, task_pattern, extensions)
      result = extensions.map { |ext|
        case ext
        when /%/
          task_name.pathmap(ext)
        when %r{/}
          ext
        when /^\./
          source = task_name.sub(task_pattern, ext)
          source == ext ? task_name.ext(ext) : source
        when String, Symbol
          ext.to_s
        when Proc, Method
          if ext.arity == 1
            ext.call(task_name)
          else
            ext.call
          end
        else
          fail "Don't know how to handle rule dependent: #{ext.inspect}"
        end
      }
      result.flatten
    end

    # Return the current description, clearing it in the process.
    def get_description(task)
      desc = @last_description
      @last_description = nil
      desc
    end

    class << self
      attr_accessor :record_task_metadata # :nodoc:
      TaskManager.record_task_metadata = false
    end
  end

end
PK)J[��M	M	3share/gems/gems/rake-13.2.1/lib/rake/cpu_counter.rbnu�[���# frozen_string_literal: true
module Rake

  # Based on a script at:
  #   http://stackoverflow.com/questions/891537/ruby-detect-number-of-cpus-installed
  class CpuCounter # :nodoc: all
    def self.count
      new.count_with_default
    end

    def count_with_default(default=4)
      count || default
    rescue StandardError
      default
    end

    begin
      require "etc"
    rescue LoadError
    else
      if Etc.respond_to?(:nprocessors)
        def count
          return Etc.nprocessors
        end
      end
    end
  end
end

unless Rake::CpuCounter.method_defined?(:count)
  Rake::CpuCounter.class_eval <<-'end;', __FILE__, __LINE__+1
    require 'rbconfig'

    def count
      if RUBY_PLATFORM == 'java'
        count_via_java_runtime
      else
        case RbConfig::CONFIG['host_os']
        when /linux/
          count_via_cpuinfo
        when /darwin|bsd/
          count_via_sysctl
        when /mswin|mingw/
          count_via_win32
        else
          # Try everything
          count_via_win32 ||
          count_via_sysctl ||
          count_via_cpuinfo
        end
      end
    end

    def count_via_java_runtime
      Java::Java.lang.Runtime.getRuntime.availableProcessors
    rescue StandardError
      nil
    end

    def count_via_win32
      require 'win32ole'
      wmi = WIN32OLE.connect("winmgmts://")
      cpu = wmi.ExecQuery("select NumberOfCores from Win32_Processor") # TODO count hyper-threaded in this
      cpu.to_enum.first.NumberOfCores
    rescue StandardError, LoadError
      nil
    end

    def count_via_cpuinfo
      open('/proc/cpuinfo') { |f| f.readlines }.grep(/processor/).size
    rescue StandardError
      nil
    end

    def count_via_sysctl
      run 'sysctl', '-n', 'hw.ncpu'
    end

    def run(command, *args)
      cmd = resolve_command(command)
      if cmd
        IO.popen [cmd, *args] do |io|
          io.read.to_i
        end
      else
        nil
      end
    end

    def resolve_command(command)
      look_for_command("/usr/sbin", command) ||
        look_for_command("/sbin", command) ||
        in_path_command(command)
    end

    def look_for_command(dir, command)
      path = File.join(dir, command)
      File.exist?(path) ? path : nil
    end

    def in_path_command(command)
      IO.popen ['which', command] do |io|
        io.eof? ? nil : command
      end
    end
  end;
end
PK)J[(��?,,1share/gems/gems/rake-13.2.1/lib/rake/file_task.rbnu�[���# frozen_string_literal: true
require "rake/task"
require "rake/early_time"

module Rake

  # A FileTask is a task that includes time based dependencies.  If any of a
  # FileTask's prerequisites have a timestamp that is later than the file
  # represented by this task, then the file must be rebuilt (using the
  # supplied actions).
  #
  class FileTask < Task

    # Is this file task needed?  Yes if it doesn't exist, or if its time stamp
    # is out of date.
    def needed?
      begin
        out_of_date?(File.mtime(name)) || @application.options.build_all
      rescue Errno::ENOENT
        true
      end
    end

    # Time stamp for file task.
    def timestamp
      begin
        File.mtime(name)
      rescue Errno::ENOENT
        Rake::LATE
      end
    end

    private

    # Are there any prerequisites with a later time than the given time stamp?
    def out_of_date?(stamp)
      all_prerequisite_tasks.any? { |prereq|
        prereq_task = application[prereq, @scope]
        if prereq_task.instance_of?(Rake::FileTask)
          prereq_task.timestamp > stamp || @application.options.build_all
        else
          prereq_task.timestamp > stamp
        end
      }
    end

    # ----------------------------------------------------------------
    # Task class methods.
    #
    class << self
      # Apply the scope to the task name according to the rules for this kind
      # of task.  File based tasks ignore the scope when creating the name.
      def scope_name(scope, task_name)
        Rake.from_pathname(task_name)
      end
    end
  end
end
PK)J[��i		6share/gems/gems/rake-13.2.1/lib/rake/default_loader.rbnu�[���# frozen_string_literal: true
module Rake

  # Default Rakefile loader used by +import+.
  class DefaultLoader

    ##
    # Loads a rakefile into the current application from +fn+

    def load(fn)
      Rake.load_rakefile(File.expand_path(fn))
    end
  end

end
PK)J[�#&D��1share/gems/gems/rake-13.2.1/lib/rake/backtrace.rbnu�[���# frozen_string_literal: true
module Rake
  module Backtrace # :nodoc: all
    SYS_KEYS  = RbConfig::CONFIG.keys.grep(/(?:[a-z]prefix|libdir)\z/)
    SYS_PATHS = RbConfig::CONFIG.values_at(*SYS_KEYS).uniq +
      [ File.join(File.dirname(__FILE__), "..") ]

    SUPPRESSED_PATHS = SYS_PATHS.
      map { |s| s.tr("\\", "/") }.
      map { |f| File.expand_path(f) }.
      reject { |s| s.nil? || s =~ /^ *$/ }
    SUPPRESSED_PATHS_RE = SUPPRESSED_PATHS.map { |f| Regexp.quote(f) }.join("|")
    SUPPRESSED_PATHS_RE << "|^<internal:\\w+>"
    SUPPRESSED_PATHS_RE << "|^org\\/jruby\\/\\w+\\.java" if
      Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == "jruby"

    SUPPRESS_PATTERN = %r!(\A(#{SUPPRESSED_PATHS_RE})|bin/rake:\d+)!i

    def self.collapse(backtrace)
      pattern = Rake.application.options.suppress_backtrace_pattern ||
                SUPPRESS_PATTERN
      backtrace.reject { |elem| elem =~ pattern }
    end
  end
end
PK)J[ڔY�2�2,share/gems/gems/rake-13.2.1/lib/rake/task.rbnu�[���# frozen_string_literal: true
require "rake/invocation_exception_mixin"

module Rake

  ##
  # A Task is the basic unit of work in a Rakefile.  Tasks have associated
  # actions (possibly more than one) and a list of prerequisites.  When
  # invoked, a task will first ensure that all of its prerequisites have an
  # opportunity to run and then it will execute its own actions.
  #
  # Tasks are not usually created directly using the new method, but rather
  # use the +file+ and +task+ convenience methods.
  #
  class Task
    # List of prerequisites for a task.
    attr_reader :prerequisites
    alias prereqs prerequisites

    # List of order only prerequisites for a task.
    attr_reader :order_only_prerequisites

    # List of actions attached to a task.
    attr_reader :actions

    # Application owning this task.
    attr_accessor :application

    # Array of nested namespaces names used for task lookup by this task.
    attr_reader :scope

    # File/Line locations of each of the task definitions for this
    # task (only valid if the task was defined with the detect
    # location option set).
    attr_reader :locations

    # Has this task already been invoked?  Already invoked tasks
    # will be skipped unless you reenable them.
    attr_reader :already_invoked

    # Return task name
    def to_s
      name
    end

    def inspect # :nodoc:
      "<#{self.class} #{name} => [#{prerequisites.join(', ')}]>"
    end

    # List of sources for task.
    attr_writer :sources
    def sources
      if defined?(@sources)
        @sources
      else
        prerequisites
      end
    end

    # List of prerequisite tasks
    def prerequisite_tasks
      (prerequisites + order_only_prerequisites).map { |pre| lookup_prerequisite(pre) }
    end

    def lookup_prerequisite(prerequisite_name) # :nodoc:
      scoped_prerequisite_task = application[prerequisite_name, @scope]
      if scoped_prerequisite_task == self
        unscoped_prerequisite_task = application[prerequisite_name]
      end
      unscoped_prerequisite_task || scoped_prerequisite_task
    end
    private :lookup_prerequisite

    # List of all unique prerequisite tasks including prerequisite tasks'
    # prerequisites.
    # Includes self when cyclic dependencies are found.
    def all_prerequisite_tasks
      seen = {}
      collect_prerequisites(seen)
      seen.values
    end

    def collect_prerequisites(seen) # :nodoc:
      prerequisite_tasks.each do |pre|
        next if seen[pre.name]
        seen[pre.name] = pre
        pre.collect_prerequisites(seen)
      end
    end
    protected :collect_prerequisites

    # First source from a rule (nil if no sources)
    def source
      sources.first
    end

    # Create a task named +task_name+ with no actions or prerequisites. Use
    # +enhance+ to add actions and prerequisites.
    def initialize(task_name, app)
      @name            = task_name.to_s
      @prerequisites   = []
      @actions         = []
      @already_invoked = false
      @comments        = []
      @lock            = Monitor.new
      @application     = app
      @scope           = app.current_scope
      @arg_names       = nil
      @locations       = []
      @invocation_exception = nil
      @order_only_prerequisites = []
    end

    # Enhance a task with prerequisites or actions.  Returns self.
    def enhance(deps=nil, &block)
      @prerequisites |= deps if deps
      @actions << block if block_given?
      self
    end

    # Name of the task, including any namespace qualifiers.
    def name
      @name.to_s
    end

    # Name of task with argument list description.
    def name_with_args # :nodoc:
      if arg_description
        "#{name}#{arg_description}"
      else
        name
      end
    end

    # Argument description (nil if none).
    def arg_description # :nodoc:
      @arg_names ? "[#{arg_names.join(',')}]" : nil
    end

    # Name of arguments for this task.
    def arg_names
      @arg_names || []
    end

    # Reenable the task, allowing its tasks to be executed if the task
    # is invoked again.
    def reenable
      @already_invoked = false
      @invocation_exception = nil
    end

    # Clear the existing prerequisites, actions, comments, and arguments of a rake task.
    def clear
      clear_prerequisites
      clear_actions
      clear_comments
      clear_args
      self
    end

    # Clear the existing prerequisites of a rake task.
    def clear_prerequisites
      prerequisites.clear
      self
    end

    # Clear the existing actions on a rake task.
    def clear_actions
      actions.clear
      self
    end

    # Clear the existing comments on a rake task.
    def clear_comments
      @comments = []
      self
    end

    # Clear the existing arguments on a rake task.
    def clear_args
      @arg_names = nil
      self
    end

    # Invoke the task if it is needed.  Prerequisites are invoked first.
    def invoke(*args)
      task_args = TaskArguments.new(arg_names, args)
      invoke_with_call_chain(task_args, InvocationChain::EMPTY)
    end

    # Same as invoke, but explicitly pass a call chain to detect
    # circular dependencies.
    #
    # If multiple tasks depend on this
    # one in parallel, they will all fail if the first execution of
    # this task fails.
    def invoke_with_call_chain(task_args, invocation_chain)
      new_chain = Rake::InvocationChain.append(self, invocation_chain)
      @lock.synchronize do
        begin
          if application.options.trace
            application.trace "** Invoke #{name} #{format_trace_flags}"
          end

          if @already_invoked
            if @invocation_exception
              if application.options.trace
                application.trace "** Previous invocation of #{name} failed #{format_trace_flags}"
              end
              raise @invocation_exception
            else
              return
            end
          end

          @already_invoked = true

          invoke_prerequisites(task_args, new_chain)
          execute(task_args) if needed?
        rescue Exception => ex
          add_chain_to(ex, new_chain)
          @invocation_exception = ex
          raise ex
        end
      end
    end
    protected :invoke_with_call_chain

    def add_chain_to(exception, new_chain) # :nodoc:
      exception.extend(InvocationExceptionMixin) unless
        exception.respond_to?(:chain)
      exception.chain = new_chain if exception.chain.nil?
    end
    private :add_chain_to

    # Invoke all the prerequisites of a task.
    def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
      if application.options.always_multitask
        invoke_prerequisites_concurrently(task_args, invocation_chain)
      else
        prerequisite_tasks.each { |p|
          prereq_args = task_args.new_scope(p.arg_names)
          p.invoke_with_call_chain(prereq_args, invocation_chain)
        }
      end
    end

    # Invoke all the prerequisites of a task in parallel.
    def invoke_prerequisites_concurrently(task_args, invocation_chain)# :nodoc:
      futures = prerequisite_tasks.map do |p|
        prereq_args = task_args.new_scope(p.arg_names)
        application.thread_pool.future(p) do |r|
          r.invoke_with_call_chain(prereq_args, invocation_chain)
        end
      end
      # Iterate in reverse to improve performance related to thread waiting and switching
      futures.reverse_each(&:value)
    end

    # Format the trace flags for display.
    def format_trace_flags
      flags = []
      flags << "first_time" unless @already_invoked
      flags << "not_needed" unless needed?
      flags.empty? ? "" : "(" + flags.join(", ") + ")"
    end
    private :format_trace_flags

    # Execute the actions associated with this task.
    def execute(args=nil)
      args ||= EMPTY_TASK_ARGS
      if application.options.dryrun
        application.trace "** Execute (dry run) #{name}"
        return
      end
      application.trace "** Execute #{name}" if application.options.trace
      application.enhance_with_matching_rule(name) if @actions.empty?
      if opts = Hash.try_convert(args) and !opts.empty?
        @actions.each { |act| act.call(self, args, **opts) }
      else
        @actions.each { |act| act.call(self, args) }
      end
    end

    # Is this task needed?
    def needed?
      true
    end

    # Timestamp for this task.  Basic tasks return the current time for their
    # time stamp.  Other tasks can be more sophisticated.
    def timestamp
      Time.now
    end

    # Add a description to the task.  The description can consist of an option
    # argument list (enclosed brackets) and an optional comment.
    def add_description(description)
      return unless description
      comment = description.strip
      add_comment(comment) if comment && !comment.empty?
    end

    def comment=(comment) # :nodoc:
      add_comment(comment)
    end

    def add_comment(comment) # :nodoc:
      return if comment.nil?
      @comments << comment unless @comments.include?(comment)
    end
    private :add_comment

    # Full collection of comments. Multiple comments are separated by
    # newlines.
    def full_comment
      transform_comments("\n")
    end

    # First line (or sentence) of all comments. Multiple comments are
    # separated by a "/".
    def comment
      transform_comments(" / ") { |c| first_sentence(c) }
    end

    # Transform the list of comments as specified by the block and
    # join with the separator.
    def transform_comments(separator, &block)
      if @comments.empty?
        nil
      else
        block ||= lambda { |c| c }
        @comments.map(&block).join(separator)
      end
    end
    private :transform_comments

    # Get the first sentence in a string. The sentence is terminated
    # by the first period, exclamation mark, or the end of the line.
    # Decimal points do not count as periods.
    def first_sentence(string)
      string.split(/(?<=\w)(\.|!)[ \t]|(\.$|!)|\n/).first
    end
    private :first_sentence

    # Set the names of the arguments for this task. +args+ should be
    # an array of symbols, one for each argument name.
    def set_arg_names(args)
      @arg_names = args.map(&:to_sym)
    end

    # Return a string describing the internal state of a task.  Useful for
    # debugging.
    def investigation
      result = "------------------------------\n".dup
      result << "Investigating #{name}\n"
      result << "class: #{self.class}\n"
      result <<  "task needed: #{needed?}\n"
      result <<  "timestamp: #{timestamp}\n"
      result << "pre-requisites: \n"
      prereqs = prerequisite_tasks
      prereqs.sort! { |a, b| a.timestamp <=> b.timestamp }
      prereqs.each do |p|
        result << "--#{p.name} (#{p.timestamp})\n"
      end
      latest_prereq = prerequisite_tasks.map(&:timestamp).max
      result <<  "latest-prerequisite time: #{latest_prereq}\n"
      result << "................................\n\n"
      return result
    end

    # Format dependencies parameter to pass to task.
    def self.format_deps(deps)
      deps = [deps] unless deps.respond_to?(:to_ary)
      deps.map { |d| Rake.from_pathname(d).to_s }
    end

    # Add order only dependencies.
    def |(deps)
      @order_only_prerequisites |= Task.format_deps(deps) - @prerequisites
      self
    end

    # ----------------------------------------------------------------
    # Rake Module Methods
    #
    class << self

      # Clear the task list.  This cause rake to immediately forget all the
      # tasks that have been assigned.  (Normally used in the unit tests.)
      def clear
        Rake.application.clear
      end

      # List of all defined tasks.
      def tasks
        Rake.application.tasks
      end

      # Return a task with the given name.  If the task is not currently
      # known, try to synthesize one from the defined rules.  If no rules are
      # found, but an existing file matches the task name, assume it is a file
      # task with no dependencies or actions.
      def [](task_name)
        Rake.application[task_name]
      end

      # TRUE if the task name is already defined.
      def task_defined?(task_name)
        Rake.application.lookup(task_name) != nil
      end

      # Define a task given +args+ and an option block.  If a rule with the
      # given name already exists, the prerequisites and actions are added to
      # the existing task.  Returns the defined task.
      def define_task(*args, &block)
        Rake.application.define_task(self, *args, &block)
      end

      # Define a rule for synthesizing tasks.
      def create_rule(*args, &block)
        Rake.application.create_rule(*args, &block)
      end

      # Apply the scope to the task name according to the rules for
      # this kind of task.  Generic tasks will accept the scope as
      # part of the name.
      def scope_name(scope, task_name)
        scope.path_with_task_name(task_name)
      end

    end # class << Rake::Task
  end # class Rake::Task
end
PK)J[�lD��2share/gems/gems/rake-13.2.1/lib/rake/name_space.rbnu�[���# frozen_string_literal: true
##
# The NameSpace class will lookup task names in the scope defined by a
# +namespace+ command.

class Rake::NameSpace

  ##
  # Create a namespace lookup object using the given task manager
  # and the list of scopes.

  def initialize(task_manager, scope_list)
    @task_manager = task_manager
    @scope = scope_list.dup
  end

  ##
  # Lookup a task named +name+ in the namespace.

  def [](name)
    @task_manager.lookup(name, @scope)
  end

  ##
  # The scope of the namespace (a LinkedList)

  def scope
    @scope.dup
  end

  ##
  # Return the list of tasks defined in this and nested namespaces.

  def tasks
    @task_manager.tasks_in_scope(@scope)
  end

end
PK)J[����Bshare/gems/gems/rake-13.2.1/lib/rake/invocation_exception_mixin.rbnu�[���# frozen_string_literal: true
module Rake
  module InvocationExceptionMixin
    # Return the invocation chain (list of Rake tasks) that were in
    # effect when this exception was detected by rake.  May be null if
    # no tasks were active.
    def chain
      @rake_invocation_chain ||= nil
    end

    # Set the invocation chain in effect when this exception was
    # detected.
    def chain=(value)
      @rake_invocation_chain = value
    end
  end
end
PK)J[ʬZ3share/gems/gems/rake-13.2.1/lib/rake/packagetask.rbnu�[���# frozen_string_literal: true
# Define a package task library to aid in the definition of
# redistributable package files.

require "rake"
require "rake/tasklib"

module Rake

  # Create a packaging task that will package the project into
  # distributable files (e.g zip archive or tar files).
  #
  # The PackageTask will create the following targets:
  #
  # +:package+ ::
  #   Create all the requested package files.
  #
  # +:clobber_package+ ::
  #   Delete all the package files.  This target is automatically
  #   added to the main clobber target.
  #
  # +:repackage+ ::
  #   Rebuild the package files from scratch, even if they are not out
  #   of date.
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</tt> ::
  #   Create a gzipped tar package (if <em>need_tar</em> is true).
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</tt> ::
  #   Create a gzipped tar package (if <em>need_tar_gz</em> is true).
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</tt> ::
  #   Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</tt> ::
  #   Create a zip package archive (if <em>need_zip</em> is true).
  #
  # Example:
  #
  #   Rake::PackageTask.new("rake", "1.2.3") do |p|
  #     p.need_tar = true
  #     p.package_files.include("lib/**/*.rb")
  #   end
  #
  class PackageTask < TaskLib
    # Name of the package (from the GEM Spec).
    attr_accessor :name

    # Version of the package (e.g. '1.3.2').
    attr_accessor :version

    # Directory used to store the package files (default is 'pkg').
    attr_accessor :package_dir

    # True if a gzipped tar file (tgz) should be produced (default is
    # false).
    attr_accessor :need_tar

    # True if a gzipped tar file (tar.gz) should be produced (default
    # is false).
    attr_accessor :need_tar_gz

    # True if a bzip2'd tar file (tar.bz2) should be produced (default
    # is false).
    attr_accessor :need_tar_bz2

    # True if a xz'd tar file (tar.xz) should be produced (default is false)
    attr_accessor :need_tar_xz

    # True if a zip file should be produced (default is false)
    attr_accessor :need_zip

    # List of files to be included in the package.
    attr_accessor :package_files

    # Tar command for gzipped or bzip2ed archives.  The default is 'tar'.
    attr_accessor :tar_command

    # Zip command for zipped archives.  The default is 'zip'.
    attr_accessor :zip_command

    # True if parent directory should be omitted (default is false)
    attr_accessor :without_parent_dir

    # Create a Package Task with the given name and version.  Use +:noversion+
    # as the version to build a package without a version or to provide a
    # fully-versioned package name.

    def initialize(name=nil, version=nil)
      init(name, version)
      yield self if block_given?
      define unless name.nil?
    end

    # Initialization that bypasses the "yield self" and "define" step.
    def init(name, version)
      @name = name
      @version = version
      @package_files = Rake::FileList.new
      @package_dir = "pkg"
      @need_tar = false
      @need_tar_gz = false
      @need_tar_bz2 = false
      @need_tar_xz = false
      @need_zip = false
      @tar_command = "tar"
      @zip_command = "zip"
      @without_parent_dir = false
    end

    # Create the tasks defined by this task library.
    def define
      fail "Version required (or :noversion)" if @version.nil?
      @version = nil if :noversion == @version

      desc "Build all the packages"
      task :package

      desc "Force a rebuild of the package files"
      task repackage: [:clobber_package, :package]

      desc "Remove package products"
      task :clobber_package do
        rm_r package_dir rescue nil
      end

      task clobber: [:clobber_package]

      [
        [need_tar, tgz_file, "z"],
        [need_tar_gz, tar_gz_file, "z"],
        [need_tar_bz2, tar_bz2_file, "j"],
        [need_tar_xz, tar_xz_file, "J"]
      ].each do |need, file, flag|
        if need
          task package: ["#{package_dir}/#{file}"]
          file "#{package_dir}/#{file}" =>
            [package_dir_path] + package_files do
            chdir(working_dir) { sh @tar_command, "#{flag}cvf", file, target_dir }
            mv "#{package_dir_path}/#{target_dir}", package_dir if without_parent_dir
          end
        end
      end

      if need_zip
        task package: ["#{package_dir}/#{zip_file}"]
        file "#{package_dir}/#{zip_file}" =>
          [package_dir_path] + package_files do
          chdir(working_dir) { sh @zip_command, "-r", zip_file, target_dir }
          mv "#{package_dir_path}/#{zip_file}", package_dir if without_parent_dir
        end
      end

      directory package_dir_path => @package_files do
        @package_files.each do |fn|
          f = File.join(package_dir_path, fn)
          fdir = File.dirname(f)
          mkdir_p(fdir) unless File.exist?(fdir)
          if File.directory?(fn)
            mkdir_p(f)
          else
            rm_f f
            safe_ln(fn, f)
          end
        end
      end
      self
    end

    # The name of this package

    def package_name
      @version ? "#{@name}-#{@version}" : @name
    end

    # The directory this package will be built in

    def package_dir_path
      "#{package_dir}/#{package_name}"
    end

    # The package name with .tgz added

    def tgz_file
      "#{package_name}.tgz"
    end

    # The package name with .tar.gz added

    def tar_gz_file
      "#{package_name}.tar.gz"
    end

    # The package name with .tar.bz2 added

    def tar_bz2_file
      "#{package_name}.tar.bz2"
    end

    # The package name with .tar.xz added

    def tar_xz_file
      "#{package_name}.tar.xz"
    end

    # The package name with .zip added

    def zip_file
      "#{package_name}.zip"
    end

    def working_dir
      without_parent_dir ? package_dir_path : package_dir
    end

    # target directory relative to working_dir
    def target_dir
      without_parent_dir ? "." : package_name
    end
  end

end
PK)J[n����3share/gems/gems/rake-13.2.1/lib/rake/thread_pool.rbnu�[���# frozen_string_literal: true

require "rake/promise"
require "set"

module Rake

  class ThreadPool # :nodoc: all

    # Creates a ThreadPool object.  The +thread_count+ parameter is the size
    # of the pool.
    def initialize(thread_count)
      @max_active_threads = [thread_count, 0].max
      @threads = Set.new
      @threads_mon = Monitor.new
      @queue = Queue.new
      @join_cond = @threads_mon.new_cond

      @history_start_time = nil
      @history = []
      @history_mon = Monitor.new
      @total_threads_in_play = 0
    end

    # Creates a future executed by the +ThreadPool+.
    #
    # The args are passed to the block when executing (similarly to
    # Thread#new) The return value is an object representing
    # a future which has been created and added to the queue in the
    # pool. Sending #value to the object will sleep the
    # current thread until the future is finished and will return the
    # result (or raise an exception thrown from the future)
    def future(*args, &block)
      promise = Promise.new(args, &block)
      promise.recorder = lambda { |*stats| stat(*stats) }

      @queue.enq promise
      stat :queued, item_id: promise.object_id
      start_thread
      promise
    end

    # Waits until the queue of futures is empty and all threads have exited.
    def join
      @threads_mon.synchronize do
        begin
          stat :joining
          @join_cond.wait unless @threads.empty?
          stat :joined
        rescue Exception => e
          stat :joined
          $stderr.puts e
          $stderr.print "Queue contains #{@queue.size} items. " +
            "Thread pool contains #{@threads.count} threads\n"
          $stderr.print "Current Thread #{Thread.current} status = " +
            "#{Thread.current.status}\n"
          $stderr.puts e.backtrace.join("\n")
          @threads.each do |t|
            $stderr.print "Thread #{t} status = #{t.status}\n"
            $stderr.puts t.backtrace.join("\n")
          end
          raise e
        end
      end
    end

    # Enable the gathering of history events.
    def gather_history          #:nodoc:
      @history_start_time = Time.now if @history_start_time.nil?
    end

    # Return a array of history events for the thread pool.
    #
    # History gathering must be enabled to be able to see the events
    # (see #gather_history). Best to call this when the job is
    # complete (i.e. after ThreadPool#join is called).
    def history                 # :nodoc:
      @history_mon.synchronize { @history.dup }.
        sort_by { |i| i[:time] }.
        each { |i| i[:time] -= @history_start_time }
    end

    # Return a hash of always collected statistics for the thread pool.
    def statistics              #  :nodoc:
      {
        total_threads_in_play: @total_threads_in_play,
        max_active_threads: @max_active_threads,
      }
    end

    private

    # processes one item on the queue. Returns true if there was an
    # item to process, false if there was no item
    def process_queue_item      #:nodoc:
      return false if @queue.empty?

      # Even though we just asked if the queue was empty, it
      # still could have had an item which by this statement
      # is now gone. For this reason we pass true to Queue#deq
      # because we will sleep indefinitely if it is empty.
      promise = @queue.deq(true)
      stat :dequeued, item_id: promise.object_id
      promise.work
      return true

    rescue ThreadError # this means the queue is empty
      false
    end

    def safe_thread_count
      @threads_mon.synchronize do
        @threads.count
      end
    end

    def start_thread # :nodoc:
      @threads_mon.synchronize do
        next unless @threads.count < @max_active_threads

        t = Thread.new do
          begin
            while safe_thread_count <= @max_active_threads
              break unless process_queue_item
            end
          ensure
            @threads_mon.synchronize do
              @threads.delete Thread.current
              stat :ended, thread_count: @threads.count
              @join_cond.broadcast if @threads.empty?
            end
          end
        end

        @threads << t
        stat(
          :spawned,
          new_thread: t.object_id,
          thread_count: @threads.count)
        @total_threads_in_play = @threads.count if
          @threads.count > @total_threads_in_play
      end
    end

    def stat(event, data=nil) # :nodoc:
      return if @history_start_time.nil?
      info = {
        event: event,
        data: data,
        time: Time.now,
        thread: Thread.current.object_id,
      }
      @history_mon.synchronize { @history << info }
    end

    # for testing only

    def __queue__ # :nodoc:
      @queue
    end
  end

end
PK)J[�j��-share/gems/gems/rake-13.2.1/lib/rake/win32.rbnu�[���# frozen_string_literal: true
require "rbconfig"

module Rake
  # Win 32 interface methods for Rake. Windows specific functionality
  # will be placed here to collect that knowledge in one spot.
  module Win32 # :nodoc: all

    # Error indicating a problem in locating the home directory on a
    # Win32 system.
    class Win32HomeError < RuntimeError
    end

    class << self
      # True if running on a windows system.
      def windows?
        RbConfig::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw|[Ww]indows)!
      end

      # The standard directory containing system wide rake files on
      # Win 32 systems. Try the following environment variables (in
      # order):
      #
      # * HOME
      # * HOMEDRIVE + HOMEPATH
      # * APPDATA
      # * USERPROFILE
      #
      # If the above are not defined, the return nil.
      def win32_system_dir #:nodoc:
        win32_shared_path = ENV["HOME"]
        if win32_shared_path.nil? && ENV["HOMEDRIVE"] && ENV["HOMEPATH"]
          win32_shared_path = ENV["HOMEDRIVE"] + ENV["HOMEPATH"]
        end

        win32_shared_path ||= ENV["APPDATA"]
        win32_shared_path ||= ENV["USERPROFILE"]
        raise Win32HomeError,
          "Unable to determine home path environment variable." if
            win32_shared_path.nil? or win32_shared_path.empty?
        normalize(File.join(win32_shared_path, "Rake"))
      end

      # Normalize a win32 path so that the slashes are all forward slashes.
      def normalize(path)
        path.gsub(/\\/, "/")
      end

    end
  end
end
PK)J[�����-share/gems/gems/rake-13.2.1/lib/rake/scope.rbnu�[���# frozen_string_literal: true
module Rake
  class Scope < LinkedList # :nodoc: all

    # Path for the scope.
    def path
      map(&:to_s).reverse.join(":")
    end

    # Path for the scope + the named path.
    def path_with_task_name(task_name)
      "#{path}:#{task_name}"
    end

    # Trim +n+ innermost scope levels from the scope. In no case will
    # this trim beyond the toplevel scope.
    def trim(n)
      result = self
      while n > 0 && !result.empty?
        result = result.tail
        n -= 1
      end
      result
    end

    # Scope lists always end with an EmptyScope object. See Null
    # Object Pattern)
    class EmptyScope < EmptyLinkedList
      @parent = Scope

      def path
        ""
      end

      def path_with_task_name(task_name)
        task_name
      end
    end

    # Singleton null object for an empty scope.
    EMPTY = EmptyScope.new
  end
end
PK)J[<9��8share/gems/gems/rake-13.2.1/lib/rake/rake_test_loader.rbnu�[���# frozen_string_literal: true

require "rake/file_list"

# Load the test files from the command line.
argv = ARGV.select do |argument|
  case argument
  when /^-/ then
    argument
  when /\*/ then
    Rake::FileList[argument].to_a.each do |file|
      require File.expand_path file
    end

    false
  else
    path = File.expand_path argument

    abort "\nFile does not exist: #{path}\n\n" unless File.exist?(path)

    require path

    false
  end
end

ARGV.replace argv
PK)J[�����1share/gems/gems/rake-13.2.1/lib/rake/cloneable.rbnu�[���# frozen_string_literal: true
module Rake
  ##
  # Mixin for creating easily cloned objects.

  module Cloneable # :nodoc:
    # The hook that is invoked by 'clone' and 'dup' methods.
    def initialize_copy(source)
      super
      source.instance_variables.each do |var|
        src_value  = source.instance_variable_get(var)
        value = src_value.clone rescue src_value
        instance_variable_set(var, value)
      end
    end
  end
end
PK)J[0Z�R��6share/gems/gems/rake-13.2.1/lib/rake/private_reader.rbnu�[���# frozen_string_literal: true
module Rake

  # Include PrivateReader to use +private_reader+.
  module PrivateReader           # :nodoc: all

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods

      # Declare a list of private accessors
      def private_reader(*names)
        attr_reader(*names)
        private(*names)
      end
    end

  end
end
PK)J[��s�ZZ6share/gems/gems/rake-13.2.1/lib/rake/file_utils_ext.rbnu�[���# frozen_string_literal: true
require "rake/file_utils"

module Rake
  #
  # FileUtilsExt provides a custom version of the FileUtils methods
  # that respond to the <tt>verbose</tt> and <tt>nowrite</tt>
  # commands.
  #
  module FileUtilsExt
    include FileUtils

    class << self
      attr_accessor :verbose_flag, :nowrite_flag
    end

    DEFAULT = Object.new

    FileUtilsExt.verbose_flag = DEFAULT
    FileUtilsExt.nowrite_flag = false

    FileUtils.commands.each do |name|
      opts = FileUtils.options_of name
      default_options = []
      if opts.include?("verbose")
        default_options << "verbose: FileUtilsExt.verbose_flag"
      end
      if opts.include?("noop")
        default_options << "noop: FileUtilsExt.nowrite_flag"
      end

      next if default_options.empty?
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
      def #{name}(*args, **options, &block)
        super(*args,
            #{default_options.join(', ')},
            **options, &block)
      end
      EOS
    end

    # Get/set the verbose flag controlling output from the FileUtils
    # utilities.  If verbose is true, then the utility method is
    # echoed to standard output.
    #
    # Examples:
    #    verbose              # return the current value of the
    #                         # verbose flag
    #    verbose(v)           # set the verbose flag to _v_.
    #    verbose(v) { code }  # Execute code with the verbose flag set
    #                         # temporarily to _v_.  Return to the
    #                         # original value when code is done.
    def verbose(value=nil)
      oldvalue = FileUtilsExt.verbose_flag
      FileUtilsExt.verbose_flag = value unless value.nil?
      if block_given?
        begin
          yield
        ensure
          FileUtilsExt.verbose_flag = oldvalue
        end
      end
      FileUtilsExt.verbose_flag
    end

    # Get/set the nowrite flag controlling output from the FileUtils
    # utilities.  If verbose is true, then the utility method is
    # echoed to standard output.
    #
    # Examples:
    #    nowrite              # return the current value of the
    #                         # nowrite flag
    #    nowrite(v)           # set the nowrite flag to _v_.
    #    nowrite(v) { code }  # Execute code with the nowrite flag set
    #                         # temporarily to _v_. Return to the
    #                         # original value when code is done.
    def nowrite(value=nil)
      oldvalue = FileUtilsExt.nowrite_flag
      FileUtilsExt.nowrite_flag = value unless value.nil?
      if block_given?
        begin
          yield
        ensure
          FileUtilsExt.nowrite_flag = oldvalue
        end
      end
      oldvalue
    end

    # Use this function to prevent potentially destructive ruby code
    # from running when the :nowrite flag is set.
    #
    # Example:
    #
    #   when_writing("Building Project") do
    #     project.build
    #   end
    #
    # The following code will build the project under normal
    # conditions. If the nowrite(true) flag is set, then the example
    # will print:
    #
    #      DRYRUN: Building Project
    #
    # instead of actually building the project.
    #
    def when_writing(msg=nil)
      if FileUtilsExt.nowrite_flag
        $stderr.puts "DRYRUN: #{msg}" if msg
      else
        yield
      end
    end

    # Send the message to the default rake output (which is $stderr).
    def rake_output_message(message)
      $stderr.puts(message)
    end

    # Check that the options do not contain options not listed in
    # +optdecl+.  An ArgumentError exception is thrown if non-declared
    # options are found.
    def rake_check_options(options, *optdecl)
      h = options.dup
      optdecl.each do |name|
        h.delete name
      end
      raise ArgumentError, "no such option: #{h.keys.join(' ')}" unless
        h.empty?
    end

    extend self
  end
end
PK)J[��K��5share/gems/gems/rake-13.2.1/lib/rake/pseudo_status.rbnu�[���# frozen_string_literal: true
module Rake

  ##
  # Exit status class for times the system just gives us a nil.
  class PseudoStatus # :nodoc: all
    attr_reader :exitstatus

    def initialize(code=0)
      @exitstatus = code
    end

    def to_i
      @exitstatus << 8
    end

    def >>(n)
      to_i >> n
    end

    def stopped?
      false
    end

    def exited?
      true
    end
  end

end
PK)J[���Q��3share/gems/gems/rake-13.2.1/lib/rake/rake_module.rbnu�[���# frozen_string_literal: true
require "rake/application"

module Rake

  class << self
    # Current Rake Application
    def application
      @application ||= Rake::Application.new
    end

    # Set the current Rake application object.
    def application=(app)
      @application = app
    end

    def suggested_thread_count # :nodoc:
      @cpu_count ||= Rake::CpuCounter.count
      @cpu_count + 4
    end

    # Return the original directory where the Rake application was started.
    def original_dir
      application.original_dir
    end

    # Load a rakefile.
    def load_rakefile(path)
      load(path)
    end

    # Add files to the rakelib list
    def add_rakelib(*files)
      application.options.rakelib ||= []
      application.options.rakelib.concat(files)
    end

    # Make +block_application+ the default rake application inside a block so
    # you can load rakefiles into a different application.
    #
    # This is useful when you want to run rake tasks inside a library without
    # running rake in a sub-shell.
    #
    # Example:
    #
    #   Dir.chdir 'other/directory'
    #
    #   other_rake = Rake.with_application do |rake|
    #     rake.load_rakefile
    #   end
    #
    #   puts other_rake.tasks

    def with_application(block_application = Rake::Application.new)
      orig_application = Rake.application

      Rake.application = block_application

      yield block_application

      block_application
    ensure
      Rake.application = orig_application
    end
  end

end
PK)J[h�>``'share/gems/gems/rake-13.2.1/lib/rake.rbnu�[���# frozen_string_literal: true
#--
# Copyright 2003-2010 by Jim Weirich (jim.weirich@gmail.com)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#++

module Rake; end

require "rake/version"

require "rbconfig"
require "fileutils"
require "singleton"
require "monitor"
require "optparse"

require "rake/ext/string"

require "rake/win32"

require "rake/linked_list"
require "rake/cpu_counter"
require "rake/scope"
require "rake/task_argument_error"
require "rake/rule_recursion_overflow_error"
require "rake/rake_module"
require "rake/trace_output"
require "rake/pseudo_status"
require "rake/task_arguments"
require "rake/invocation_chain"
require "rake/task"
require "rake/file_task"
require "rake/file_creation_task"
require "rake/multi_task"
require "rake/dsl_definition"
require "rake/file_utils_ext"
require "rake/file_list"
require "rake/default_loader"
require "rake/early_time"
require "rake/late_time"
require "rake/name_space"
require "rake/task_manager"
require "rake/application"
require "rake/backtrace"

$trace = false

# :stopdoc:
#
# Some top level Constants.

FileList = Rake::FileList
RakeFileUtils = Rake::FileUtilsExt
PK)J[W��'share/gems/gems/rake-13.2.1/MIT-LICENSEnu�[���Copyright (c) Jim Weirich

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

PK)J[Ɇ�S��"share/gems/gems/rdoc-6.10.0/exe/rinuȯ��#!/opt/alt/ruby34/bin/ruby

begin
  gem 'rdoc'
rescue NameError => e # --disable-gems
  raise unless e.name == :gem
rescue Gem::LoadError
end

require 'rdoc/ri/driver'

RDoc::RI::Driver.run ARGV
PK)J[��v��$share/gems/gems/rdoc-6.10.0/exe/rdocnuȯ��#!/opt/alt/ruby34/bin/ruby
#
#  RDoc: Documentation tool for source code
#        (see lib/rdoc/rdoc.rb for more information)
#
#  Copyright (c) 2003 Dave Thomas
#  Released under the same terms as Ruby

begin
  gem 'rdoc'
rescue NameError => e # --disable-gems
  raise unless e.name == :gem
rescue Gem::LoadError
end

require 'rdoc/rdoc'

begin
  r = RDoc::RDoc.new
  r.document ARGV
rescue Errno::ENOSPC
  $stderr.puts 'Ran out of space creating documentation'
  $stderr.puts
  $stderr.puts 'Please free up some space and try again'
rescue SystemExit
  raise
rescue Exception => e
  if $DEBUG_RDOC then
    $stderr.puts e.message
    $stderr.puts "#{e.backtrace.join "\n\t"}"
    $stderr.puts
  elsif Interrupt === e then
    $stderr.puts
    $stderr.puts 'Interrupted'
  else
    $stderr.puts "uh-oh! RDoc had a problem:"
    $stderr.puts e.message
    $stderr.puts
    $stderr.puts "run with --debug for full backtrace"
  end

  exit 1
end
PK)J[�`zC��'share/gems/gems/rdoc-6.10.0/lib/rdoc.rbnu�[���# frozen_string_literal: true
$DEBUG_RDOC = nil

##
# RDoc produces documentation for Ruby source files by parsing the source and
# extracting the definition for classes, modules, methods, includes and
# requires.  It associates these with optional documentation contained in an
# immediately preceding comment block then renders the result using an output
# formatter.
#
# For a simple introduction to writing or generating documentation using RDoc
# see the README.
#
# == Roadmap
#
# If you think you found a bug in RDoc see CONTRIBUTING@Bugs
#
# If you want to use RDoc to create documentation for your Ruby source files,
# see RDoc::Markup and refer to <tt>rdoc --help</tt> for command line usage.
#
# If you want to set the default markup format see
# RDoc::Markup@Markup+Formats
#
# If you want to store rdoc configuration in your gem (such as the default
# markup format) see RDoc::Options@Saved+Options
#
# If you want to write documentation for Ruby files see RDoc::Parser::Ruby
#
# If you want to write documentation for extensions written in C see
# RDoc::Parser::C
#
# If you want to generate documentation using <tt>rake</tt> see RDoc::Task.
#
# If you want to drive RDoc programmatically, see RDoc::RDoc.
#
# If you want to use the library to format text blocks into HTML or other
# formats, look at RDoc::Markup.
#
# If you want to make an RDoc plugin such as a generator or directive handler
# see RDoc::RDoc.
#
# If you want to write your own output generator see RDoc::Generator.
#
# If you want an overview of how RDoc works see CONTRIBUTING
#
# == Credits
#
# RDoc is currently being maintained by Eric Hodel <drbrain@segment7.net>.
#
# Dave Thomas <dave@pragmaticprogrammer.com> is the original author of RDoc.
#
# * The Ruby parser in rdoc/parse.rb is based heavily on the outstanding
#   work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby
#   parser for irb and the rtags package.

module RDoc

  ##
  # Exception thrown by any rdoc error.

  class Error < RuntimeError; end

  require_relative 'rdoc/version'

  ##
  # Method visibilities

  VISIBILITIES = [:public, :protected, :private]

  ##
  # Name of the dotfile that contains the description of files to be processed
  # in the current directory

  DOT_DOC_FILENAME = ".document"

  ##
  # General RDoc modifiers

  GENERAL_MODIFIERS = %w[nodoc].freeze

  ##
  # RDoc modifiers for classes

  CLASS_MODIFIERS = GENERAL_MODIFIERS

  ##
  # RDoc modifiers for attributes

  ATTR_MODIFIERS = GENERAL_MODIFIERS

  ##
  # RDoc modifiers for constants

  CONSTANT_MODIFIERS = GENERAL_MODIFIERS

  ##
  # RDoc modifiers for methods

  METHOD_MODIFIERS = GENERAL_MODIFIERS +
    %w[arg args yield yields notnew not-new not_new doc]

  ##
  # Loads the best available YAML library.

  def self.load_yaml
    begin
      gem 'psych'
    rescue NameError => e # --disable-gems
      raise unless e.name == :gem
    rescue Gem::LoadError
    end

    begin
      require 'psych'
    rescue ::LoadError
    ensure
      require 'yaml'
    end
  end

  ##
  # Searches and returns the directory for settings.
  #
  # 1. <tt>$HOME/.rdoc</tt> directory, if it exists.
  # 2. The +rdoc+ directory under the path specified by the
  #    +XDG_DATA_HOME+ environment variable, if it is set.
  # 3. <tt>$HOME/.local/share/rdoc</tt> directory.
  #
  # Other than the home directory, the containing directory will be
  # created automatically.

  def self.home
    rdoc_dir = begin
                File.expand_path('~/.rdoc')
              rescue ArgumentError
              end

    if File.directory?(rdoc_dir)
      rdoc_dir
    else
      require 'fileutils'
      begin
        # XDG
        xdg_data_home = ENV["XDG_DATA_HOME"] || File.join(File.expand_path("~"), '.local', 'share')
        unless File.exist?(xdg_data_home)
          FileUtils.mkdir_p xdg_data_home
        end
        File.join xdg_data_home, "rdoc"
      rescue Errno::EACCES
      end
    end
  end

  autoload :RDoc,           "#{__dir__}/rdoc/rdoc"

  autoload :CrossReference, "#{__dir__}/rdoc/cross_reference"
  autoload :ERBIO,          "#{__dir__}/rdoc/erbio"
  autoload :ERBPartial,     "#{__dir__}/rdoc/erb_partial"
  autoload :Encoding,       "#{__dir__}/rdoc/encoding"
  autoload :Generator,      "#{__dir__}/rdoc/generator"
  autoload :Options,        "#{__dir__}/rdoc/options"
  autoload :Parser,         "#{__dir__}/rdoc/parser"
  autoload :Servlet,        "#{__dir__}/rdoc/servlet"
  autoload :RI,             "#{__dir__}/rdoc/ri"
  autoload :Stats,          "#{__dir__}/rdoc/stats"
  autoload :Store,          "#{__dir__}/rdoc/store"
  autoload :Task,           "#{__dir__}/rdoc/task"
  autoload :Text,           "#{__dir__}/rdoc/text"

  autoload :Markdown,       "#{__dir__}/rdoc/markdown"
  autoload :Markup,         "#{__dir__}/rdoc/markup"
  autoload :RD,             "#{__dir__}/rdoc/rd"
  autoload :TomDoc,         "#{__dir__}/rdoc/tom_doc"

  autoload :KNOWN_CLASSES,  "#{__dir__}/rdoc/known_classes"

  autoload :TokenStream,    "#{__dir__}/rdoc/token_stream"

  autoload :Comment,        "#{__dir__}/rdoc/comment"

  require_relative 'rdoc/i18n'

  # code objects
  #
  # We represent the various high-level code constructs that appear in Ruby
  # programs: classes, modules, methods, and so on.
  autoload :CodeObject,     "#{__dir__}/rdoc/code_object"

  autoload :Context,        "#{__dir__}/rdoc/code_object/context"
  autoload :TopLevel,       "#{__dir__}/rdoc/code_object/top_level"

  autoload :AnonClass,      "#{__dir__}/rdoc/code_object/anon_class"
  autoload :ClassModule,    "#{__dir__}/rdoc/code_object/class_module"
  autoload :NormalClass,    "#{__dir__}/rdoc/code_object/normal_class"
  autoload :NormalModule,   "#{__dir__}/rdoc/code_object/normal_module"
  autoload :SingleClass,    "#{__dir__}/rdoc/code_object/single_class"

  autoload :Alias,          "#{__dir__}/rdoc/code_object/alias"
  autoload :AnyMethod,      "#{__dir__}/rdoc/code_object/any_method"
  autoload :MethodAttr,     "#{__dir__}/rdoc/code_object/method_attr"
  autoload :GhostMethod,    "#{__dir__}/rdoc/code_object/ghost_method"
  autoload :MetaMethod,     "#{__dir__}/rdoc/code_object/meta_method"
  autoload :Attr,           "#{__dir__}/rdoc/code_object/attr"

  autoload :Constant,       "#{__dir__}/rdoc/code_object/constant"
  autoload :Mixin,          "#{__dir__}/rdoc/code_object/mixin"
  autoload :Include,        "#{__dir__}/rdoc/code_object/include"
  autoload :Extend,         "#{__dir__}/rdoc/code_object/extend"
  autoload :Require,        "#{__dir__}/rdoc/code_object/require"

end
PK)J[������4share/gems/gems/rdoc-6.10.0/lib/rdoc/token_stream.rbnu�[���# frozen_string_literal: true
##
# A TokenStream is a list of tokens, gathered during the parse of some entity
# (say a method). Entities populate these streams by being registered with the
# lexer. Any class can collect tokens by including TokenStream. From the
# outside, you use such an object by calling the start_collecting_tokens
# method, followed by calls to add_token and pop_token.

module RDoc::TokenStream

  ##
  # Converts +token_stream+ to HTML wrapping various tokens with
  # <tt><span></tt> elements. Some tokens types are wrapped in spans
  # with the given class names. Other token types are not wrapped in spans.

  def self.to_html token_stream
    starting_title = false

    token_stream.map do |t|
      next unless t

      style = case t[:kind]
              when :on_const   then 'ruby-constant'
              when :on_kw      then 'ruby-keyword'
              when :on_ivar    then 'ruby-ivar'
              when :on_cvar    then 'ruby-identifier'
              when :on_gvar    then 'ruby-identifier'
              when '=' != t[:text] && :on_op
                               then 'ruby-operator'
              when :on_tlambda then 'ruby-operator'
              when :on_ident   then 'ruby-identifier'
              when :on_label   then 'ruby-value'
              when :on_backref, :on_dstring
                               then 'ruby-node'
              when :on_comment then 'ruby-comment'
              when :on_embdoc  then 'ruby-comment'
              when :on_regexp  then 'ruby-regexp'
              when :on_tstring then 'ruby-string'
              when :on_int, :on_float,
                   :on_rational, :on_imaginary,
                   :on_heredoc,
                   :on_symbol, :on_CHAR then 'ruby-value'
              when :on_heredoc_beg, :on_heredoc_end
                               then 'ruby-identifier'
              end

      comment_with_nl = false
      if :on_comment == t[:kind] or :on_embdoc == t[:kind] or :on_heredoc_end == t[:kind]
        comment_with_nl = true if "\n" == t[:text][-1]
        text = t[:text].rstrip
      else
        text = t[:text]
      end

      if :on_ident == t[:kind] && starting_title
        starting_title = false
        style = 'ruby-identifier ruby-title'
      end

      if :on_kw == t[:kind] and 'def' == t[:text]
        starting_title = true
      end

      text = CGI.escapeHTML text

      if style then
        "<span class=\"#{style}\">#{text}</span>#{"\n" if comment_with_nl}"
      else
        text
      end
    end.join
  end

  ##
  # Adds +tokens+ to the collected tokens

  def add_tokens(tokens)
    @token_stream.concat(tokens)
  end

  ##
  # Adds one +token+ to the collected tokens

  def add_token(token)
    @token_stream.push(token)
  end

  ##
  # Starts collecting tokens

  def collect_tokens
    @token_stream = []
  end

  alias start_collecting_tokens collect_tokens

  ##
  # Remove the last token from the collected tokens

  def pop_token
    @token_stream.pop
  end

  ##
  # Current token stream

  def token_stream
    @token_stream
  end

  ##
  # Returns a string representation of the token stream

  def tokens_to_s
    (token_stream or return '').compact.map { |token| token[:text] }.join ''
  end

end
PK)J[<!�."�"�8share/gems/gems/rdoc-6.10.0/lib/rdoc/rd/inline_parser.rbnu�[���# frozen_string_literal: true
#
# DO NOT MODIFY!!!!
# This file is automatically generated by Racc 1.8.1
# from Racc grammar file "inline_parser.ry".
#

###### racc/parser.rb begin
unless $".find {|p| p.end_with?('/racc/parser.rb')}
$".push "#{__dir__}/racc/parser.rb"
#--
# Copyright (c) 1999-2006 Minero Aoki
#
# This program is free software.
# You can distribute/modify this program under the same terms of ruby.
#
# As a special exception, when this code is copied by Racc
# into a Racc output file, you may use that output file
# without restriction.
#++

unless $".find {|p| p.end_with?('/racc/info.rb')}
$".push "#{__dir__}/racc/info.rb"

module Racc
  VERSION   = '1.8.1'
  Version = VERSION
  Copyright = 'Copyright (c) 1999-2006 Minero Aoki'
end

end


module Racc
  class ParseError < StandardError; end
end
unless defined?(::ParseError)
  ParseError = Racc::ParseError # :nodoc:
end

# Racc is an LALR(1) parser generator.
# It is written in Ruby itself, and generates Ruby programs.
#
# == Command-line Reference
#
#     racc [-o<var>filename</var>] [--output-file=<var>filename</var>]
#          [-e<var>rubypath</var>] [--executable=<var>rubypath</var>]
#          [-v] [--verbose]
#          [-O<var>filename</var>] [--log-file=<var>filename</var>]
#          [-g] [--debug]
#          [-E] [--embedded]
#          [-l] [--no-line-convert]
#          [-c] [--line-convert-all]
#          [-a] [--no-omit-actions]
#          [-C] [--check-only]
#          [-S] [--output-status]
#          [--version] [--copyright] [--help] <var>grammarfile</var>
#
# [+grammarfile+]
#   Racc grammar file. Any extension is permitted.
# [-o+outfile+, --output-file=+outfile+]
#   A filename for output. default is <+filename+>.tab.rb
# [-O+filename+, --log-file=+filename+]
#   Place logging output in file +filename+.
#   Default log file name is <+filename+>.output.
# [-e+rubypath+, --executable=+rubypath+]
#   output executable file(mode 755). where +path+ is the Ruby interpreter.
# [-v, --verbose]
#   verbose mode. create +filename+.output file, like yacc's y.output file.
# [-g, --debug]
#   add debug code to parser class. To display debugging information,
#   use this '-g' option and set @yydebug true in parser class.
# [-E, --embedded]
#   Output parser which doesn't need runtime files (racc/parser.rb).
# [-F, --frozen]
#   Output parser which declares frozen_string_literals: true
# [-C, --check-only]
#   Check syntax of racc grammar file and quit.
# [-S, --output-status]
#   Print messages time to time while compiling.
# [-l, --no-line-convert]
#   turns off line number converting.
# [-c, --line-convert-all]
#   Convert line number of actions, inner, header and footer.
# [-a, --no-omit-actions]
#   Call all actions, even if an action is empty.
# [--version]
#   print Racc version and quit.
# [--copyright]
#   Print copyright and quit.
# [--help]
#   Print usage and quit.
#
# == Generating Parser Using Racc
#
# To compile Racc grammar file, simply type:
#
#   $ racc parse.y
#
# This creates Ruby script file "parse.tab.y". The -o option can change the output filename.
#
# == Writing A Racc Grammar File
#
# If you want your own parser, you have to write a grammar file.
# A grammar file contains the name of your parser class, grammar for the parser,
# user code, and anything else.
# When writing a grammar file, yacc's knowledge is helpful.
# If you have not used yacc before, Racc is not too difficult.
#
# Here's an example Racc grammar file.
#
#   class Calcparser
#   rule
#     target: exp { print val[0] }
#
#     exp: exp '+' exp
#        | exp '*' exp
#        | '(' exp ')'
#        | NUMBER
#   end
#
# Racc grammar files resemble yacc files.
# But (of course), this is Ruby code.
# yacc's $$ is the 'result', $0, $1... is
# an array called 'val', and $-1, $-2... is an array called '_values'.
#
# See the {Grammar File Reference}[rdoc-ref:lib/racc/rdoc/grammar.en.rdoc] for
# more information on grammar files.
#
# == Parser
#
# Then you must prepare the parse entry method. There are two types of
# parse methods in Racc, Racc::Parser#do_parse and Racc::Parser#yyparse
#
# Racc::Parser#do_parse is simple.
#
# It's yyparse() of yacc, and Racc::Parser#next_token is yylex().
# This method must returns an array like [TOKENSYMBOL, ITS_VALUE].
# EOF is [false, false].
# (TOKENSYMBOL is a Ruby symbol (taken from String#intern) by default.
# If you want to change this, see the grammar reference.
#
# Racc::Parser#yyparse is little complicated, but useful.
# It does not use Racc::Parser#next_token, instead it gets tokens from any iterator.
#
# For example, <code>yyparse(obj, :scan)</code> causes
# calling +obj#scan+, and you can return tokens by yielding them from +obj#scan+.
#
# == Debugging
#
# When debugging, "-v" or/and the "-g" option is helpful.
#
# "-v" creates verbose log file (.output).
# "-g" creates a "Verbose Parser".
# Verbose Parser prints the internal status when parsing.
# But it's _not_ automatic.
# You must use -g option and set +@yydebug+ to +true+ in order to get output.
# -g option only creates the verbose parser.
#
# === Racc reported syntax error.
#
# Isn't there too many "end"?
# grammar of racc file is changed in v0.10.
#
# Racc does not use '%' mark, while yacc uses huge number of '%' marks..
#
# === Racc reported "XXXX conflicts".
#
# Try "racc -v xxxx.y".
# It causes producing racc's internal log file, xxxx.output.
#
# === Generated parsers does not work correctly
#
# Try "racc -g xxxx.y".
# This command let racc generate "debugging parser".
# Then set @yydebug=true in your parser.
# It produces a working log of your parser.
#
# == Re-distributing Racc runtime
#
# A parser, which is created by Racc, requires the Racc runtime module;
# racc/parser.rb.
#
# Ruby 1.8.x comes with Racc runtime module,
# you need NOT distribute Racc runtime files.
#
# If you want to include the Racc runtime module with your parser.
# This can be done by using '-E' option:
#
#   $ racc -E -omyparser.rb myparser.y
#
# This command creates myparser.rb which `includes' Racc runtime.
# Only you must do is to distribute your parser file (myparser.rb).
#
# Note: parser.rb is ruby license, but your parser is not.
# Your own parser is completely yours.
module Racc

  unless defined?(Racc_No_Extensions)
    Racc_No_Extensions = false # :nodoc:
  end

  class Parser

    Racc_Runtime_Version = ::Racc::VERSION
    Racc_Runtime_Core_Version_R = ::Racc::VERSION

    begin
      if Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
        require 'jruby'
        require 'racc/cparse-jruby.jar'
        com.headius.racc.Cparse.new.load(JRuby.runtime, false)
      else
        require 'racc/cparse'
      end

      unless new.respond_to?(:_racc_do_parse_c, true)
        raise LoadError, 'old cparse.so'
      end
      if Racc_No_Extensions
        raise LoadError, 'selecting ruby version of racc runtime core'
      end

      Racc_Main_Parsing_Routine    = :_racc_do_parse_c # :nodoc:
      Racc_YY_Parse_Method         = :_racc_yyparse_c # :nodoc:
      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_C # :nodoc:
      Racc_Runtime_Type            = 'c' # :nodoc:
    rescue LoadError
      Racc_Main_Parsing_Routine    = :_racc_do_parse_rb
      Racc_YY_Parse_Method         = :_racc_yyparse_rb
      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_R
      Racc_Runtime_Type            = 'ruby'
    end

    def Parser.racc_runtime_type # :nodoc:
      Racc_Runtime_Type
    end

    def _racc_setup
      @yydebug = false unless self.class::Racc_debug_parser
      @yydebug = false unless defined?(@yydebug)
      if @yydebug
        @racc_debug_out = $stderr unless defined?(@racc_debug_out)
        @racc_debug_out ||= $stderr
      end
      arg = self.class::Racc_arg
      arg[13] = true if arg.size < 14
      arg
    end

    def _racc_init_sysvars
      @racc_state  = [0]
      @racc_tstack = []
      @racc_vstack = []

      @racc_t = nil
      @racc_val = nil

      @racc_read_next = true

      @racc_user_yyerror = false
      @racc_error_status = 0
    end

    # The entry point of the parser. This method is used with #next_token.
    # If Racc wants to get token (and its value), calls next_token.
    #
    # Example:
    #     def parse
    #       @q = [[1,1],
    #             [2,2],
    #             [3,3],
    #             [false, '$']]
    #       do_parse
    #     end
    #
    #     def next_token
    #       @q.shift
    #     end
    class_eval <<~RUBY, __FILE__, __LINE__ + 1
    def do_parse
      #{Racc_Main_Parsing_Routine}(_racc_setup(), false)
    end
    RUBY

    # The method to fetch next token.
    # If you use #do_parse method, you must implement #next_token.
    #
    # The format of return value is [TOKEN_SYMBOL, VALUE].
    # +token-symbol+ is represented by Ruby's symbol by default, e.g. :IDENT
    # for 'IDENT'.  ";" (String) for ';'.
    #
    # The final symbol (End of file) must be false.
    def next_token
      raise NotImplementedError, "#{self.class}\#next_token is not defined"
    end

    def _racc_do_parse_rb(arg, in_debug)
      action_table, action_check, action_default, action_pointer,
      _,            _,            _,              _,
      _,            _,            token_table,    * = arg

      _racc_init_sysvars
      tok = act = i = nil

      catch(:racc_end_parse) {
        while true
          if i = action_pointer[@racc_state[-1]]
            if @racc_read_next
              if @racc_t != 0   # not EOF
                tok, @racc_val = next_token()
                unless tok      # EOF
                  @racc_t = 0
                else
                  @racc_t = (token_table[tok] or 1)   # error token
                end
                racc_read_token(@racc_t, tok, @racc_val) if @yydebug
                @racc_read_next = false
              end
            end
            i += @racc_t
            unless i >= 0 and
                   act = action_table[i] and
                   action_check[i] == @racc_state[-1]
              act = action_default[@racc_state[-1]]
            end
          else
            act = action_default[@racc_state[-1]]
          end
          while act = _racc_evalact(act, arg)
            ;
          end
        end
      }
    end

    # Another entry point for the parser.
    # If you use this method, you must implement RECEIVER#METHOD_ID method.
    #
    # RECEIVER#METHOD_ID is a method to get next token.
    # It must 'yield' the token, which format is [TOKEN-SYMBOL, VALUE].
    class_eval <<~RUBY, __FILE__, __LINE__ + 1
    def yyparse(recv, mid)
      #{Racc_YY_Parse_Method}(recv, mid, _racc_setup(), false)
    end
    RUBY

    def _racc_yyparse_rb(recv, mid, arg, c_debug)
      action_table, action_check, action_default, action_pointer,
      _,            _,            _,              _,
      _,            _,            token_table,    * = arg

      _racc_init_sysvars

      catch(:racc_end_parse) {
        until i = action_pointer[@racc_state[-1]]
          while act = _racc_evalact(action_default[@racc_state[-1]], arg)
            ;
          end
        end
        recv.__send__(mid) do |tok, val|
          unless tok
            @racc_t = 0
          else
            @racc_t = (token_table[tok] or 1)   # error token
          end
          @racc_val = val
          @racc_read_next = false

          i += @racc_t
          unless i >= 0 and
                 act = action_table[i] and
                 action_check[i] == @racc_state[-1]
            act = action_default[@racc_state[-1]]
          end
          while act = _racc_evalact(act, arg)
            ;
          end

          while !(i = action_pointer[@racc_state[-1]]) ||
                ! @racc_read_next ||
                @racc_t == 0  # $
            unless i and i += @racc_t and
                   i >= 0 and
                   act = action_table[i] and
                   action_check[i] == @racc_state[-1]
              act = action_default[@racc_state[-1]]
            end
            while act = _racc_evalact(act, arg)
              ;
            end
          end
        end
      }
    end

    ###
    ### common
    ###

    def _racc_evalact(act, arg)
      action_table, action_check, _, action_pointer,
      _,            _,            _, _,
      _,            _,            _, shift_n,
      reduce_n,     * = arg
      nerr = 0   # tmp

      if act > 0 and act < shift_n
        #
        # shift
        #
        if @racc_error_status > 0
          @racc_error_status -= 1 unless @racc_t <= 1 # error token or EOF
        end
        @racc_vstack.push @racc_val
        @racc_state.push act
        @racc_read_next = true
        if @yydebug
          @racc_tstack.push @racc_t
          racc_shift @racc_t, @racc_tstack, @racc_vstack
        end

      elsif act < 0 and act > -reduce_n
        #
        # reduce
        #
        code = catch(:racc_jump) {
          @racc_state.push _racc_do_reduce(arg, act)
          false
        }
        if code
          case code
          when 1 # yyerror
            @racc_user_yyerror = true   # user_yyerror
            return -reduce_n
          when 2 # yyaccept
            return shift_n
          else
            raise '[Racc Bug] unknown jump code'
          end
        end

      elsif act == shift_n
        #
        # accept
        #
        racc_accept if @yydebug
        throw :racc_end_parse, @racc_vstack[0]

      elsif act == -reduce_n
        #
        # error
        #
        case @racc_error_status
        when 0
          unless arg[21]    # user_yyerror
            nerr += 1
            on_error @racc_t, @racc_val, @racc_vstack
          end
        when 3
          if @racc_t == 0   # is $
            # We're at EOF, and another error occurred immediately after
            # attempting auto-recovery
            throw :racc_end_parse, nil
          end
          @racc_read_next = true
        end
        @racc_user_yyerror = false
        @racc_error_status = 3
        while true
          if i = action_pointer[@racc_state[-1]]
            i += 1   # error token
            if  i >= 0 and
                (act = action_table[i]) and
                action_check[i] == @racc_state[-1]
              break
            end
          end
          throw :racc_end_parse, nil if @racc_state.size <= 1
          @racc_state.pop
          @racc_vstack.pop
          if @yydebug
            @racc_tstack.pop
            racc_e_pop @racc_state, @racc_tstack, @racc_vstack
          end
        end
        return act

      else
        raise "[Racc Bug] unknown action #{act.inspect}"
      end

      racc_next_state(@racc_state[-1], @racc_state) if @yydebug

      nil
    end

    def _racc_do_reduce(arg, act)
      _,          _,            _,            _,
      goto_table, goto_check,   goto_default, goto_pointer,
      nt_base,    reduce_table, _,            _,
      _,          use_result,   * = arg

      state = @racc_state
      vstack = @racc_vstack
      tstack = @racc_tstack

      i = act * -3
      len       = reduce_table[i]
      reduce_to = reduce_table[i+1]
      method_id = reduce_table[i+2]
      void_array = []

      tmp_t = tstack[-len, len] if @yydebug
      tmp_v = vstack[-len, len]
      tstack[-len, len] = void_array if @yydebug
      vstack[-len, len] = void_array
      state[-len, len]  = void_array

      # tstack must be updated AFTER method call
      if use_result
        vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0])
      else
        vstack.push __send__(method_id, tmp_v, vstack)
      end
      tstack.push reduce_to

      racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug

      k1 = reduce_to - nt_base
      if i = goto_pointer[k1]
        i += state[-1]
        if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1
          return curstate
        end
      end
      goto_default[k1]
    end

    # This method is called when a parse error is found.
    #
    # ERROR_TOKEN_ID is an internal ID of token which caused error.
    # You can get string representation of this ID by calling
    # #token_to_str.
    #
    # ERROR_VALUE is a value of error token.
    #
    # value_stack is a stack of symbol values.
    # DO NOT MODIFY this object.
    #
    # This method raises ParseError by default.
    #
    # If this method returns, parsers enter "error recovering mode".
    def on_error(t, val, vstack)
      raise ParseError, sprintf("parse error on value %s (%s)",
                                val.inspect, token_to_str(t) || '?')
    end

    # Enter error recovering mode.
    # This method does not call #on_error.
    def yyerror
      throw :racc_jump, 1
    end

    # Exit parser.
    # Return value is +Symbol_Value_Stack[0]+.
    def yyaccept
      throw :racc_jump, 2
    end

    # Leave error recovering mode.
    def yyerrok
      @racc_error_status = 0
    end

    # For debugging output
    def racc_read_token(t, tok, val)
      @racc_debug_out.print 'read    '
      @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '
      @racc_debug_out.puts val.inspect
      @racc_debug_out.puts
    end

    def racc_shift(tok, tstack, vstack)
      @racc_debug_out.puts "shift   #{racc_token2str tok}"
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_reduce(toks, sim, tstack, vstack)
      out = @racc_debug_out
      out.print 'reduce '
      if toks.empty?
        out.print ' <none>'
      else
        toks.each {|t| out.print ' ', racc_token2str(t) }
      end
      out.puts " --> #{racc_token2str(sim)}"
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_accept
      @racc_debug_out.puts 'accept'
      @racc_debug_out.puts
    end

    def racc_e_pop(state, tstack, vstack)
      @racc_debug_out.puts 'error recovering mode: pop token'
      racc_print_states state
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_next_state(curstate, state)
      @racc_debug_out.puts  "goto    #{curstate}"
      racc_print_states state
      @racc_debug_out.puts
    end

    def racc_print_stacks(t, v)
      out = @racc_debug_out
      out.print '        ['
      t.each_index do |i|
        out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')'
      end
      out.puts ' ]'
    end

    def racc_print_states(s)
      out = @racc_debug_out
      out.print '        ['
      s.each {|st| out.print ' ', st }
      out.puts ' ]'
    end

    def racc_token2str(tok)
      self.class::Racc_token_to_s_table[tok] or
          raise "[Racc Bug] can't convert token #{tok} to string"
    end

    # Convert internal ID of token symbol to the string.
    def token_to_str(t)
      self.class::Racc_token_to_s_table[t]
    end

  end

end

end
###### racc/parser.rb end

require 'strscan'

class RDoc::RD

##
# RD format parser for inline markup such as emphasis, links, footnotes, etc.

class InlineParser < Racc::Parser


# :stopdoc:

EM_OPEN = '((*'
EM_OPEN_RE = /\A#{Regexp.quote(EM_OPEN)}/
EM_CLOSE = '*))'
EM_CLOSE_RE = /\A#{Regexp.quote(EM_CLOSE)}/
CODE_OPEN = '(({'
CODE_OPEN_RE = /\A#{Regexp.quote(CODE_OPEN)}/
CODE_CLOSE = '}))'
CODE_CLOSE_RE = /\A#{Regexp.quote(CODE_CLOSE)}/
VAR_OPEN = '((|'
VAR_OPEN_RE = /\A#{Regexp.quote(VAR_OPEN)}/
VAR_CLOSE = '|))'
VAR_CLOSE_RE = /\A#{Regexp.quote(VAR_CLOSE)}/
KBD_OPEN = '((%'
KBD_OPEN_RE = /\A#{Regexp.quote(KBD_OPEN)}/
KBD_CLOSE = '%))'
KBD_CLOSE_RE = /\A#{Regexp.quote(KBD_CLOSE)}/
INDEX_OPEN = '((:'
INDEX_OPEN_RE = /\A#{Regexp.quote(INDEX_OPEN)}/
INDEX_CLOSE = ':))'
INDEX_CLOSE_RE = /\A#{Regexp.quote(INDEX_CLOSE)}/
REF_OPEN = '((<'
REF_OPEN_RE = /\A#{Regexp.quote(REF_OPEN)}/
REF_CLOSE = '>))'
REF_CLOSE_RE = /\A#{Regexp.quote(REF_CLOSE)}/
FOOTNOTE_OPEN = '((-'
FOOTNOTE_OPEN_RE = /\A#{Regexp.quote(FOOTNOTE_OPEN)}/
FOOTNOTE_CLOSE = '-))'
FOOTNOTE_CLOSE_RE = /\A#{Regexp.quote(FOOTNOTE_CLOSE)}/
VERB_OPEN = "(('"
VERB_OPEN_RE = /\A#{Regexp.quote(VERB_OPEN)}/
VERB_CLOSE = "'))"
VERB_CLOSE_RE = /\A#{Regexp.quote(VERB_CLOSE)}/

BAR = "|"
BAR_RE = /\A#{Regexp.quote(BAR)}/
QUOTE = '"'
QUOTE_RE = /\A#{Regexp.quote(QUOTE)}/
SLASH = "/"
SLASH_RE = /\A#{Regexp.quote(SLASH)}/
BACK_SLASH = "\\"
BACK_SLASH_RE = /\A#{Regexp.quote(BACK_SLASH)}/
URL = "URL:"
URL_RE = /\A#{Regexp.quote(URL)}/

other_re_mode = Regexp::EXTENDED
other_re_mode |= Regexp::MULTILINE

OTHER_RE = Regexp.new(
  "\\A.+?(?=#{Regexp.quote(EM_OPEN)}|#{Regexp.quote(EM_CLOSE)}|
              #{Regexp.quote(CODE_OPEN)}|#{Regexp.quote(CODE_CLOSE)}|
              #{Regexp.quote(VAR_OPEN)}|#{Regexp.quote(VAR_CLOSE)}|
              #{Regexp.quote(KBD_OPEN)}|#{Regexp.quote(KBD_CLOSE)}|
              #{Regexp.quote(INDEX_OPEN)}|#{Regexp.quote(INDEX_CLOSE)}|
              #{Regexp.quote(REF_OPEN)}|#{Regexp.quote(REF_CLOSE)}|
            #{Regexp.quote(FOOTNOTE_OPEN)}|#{Regexp.quote(FOOTNOTE_CLOSE)}|
              #{Regexp.quote(VERB_OPEN)}|#{Regexp.quote(VERB_CLOSE)}|
              #{Regexp.quote(BAR)}|
              #{Regexp.quote(QUOTE)}|
              #{Regexp.quote(SLASH)}|
              #{Regexp.quote(BACK_SLASH)}|
              #{Regexp.quote(URL)})", other_re_mode)

# :startdoc:

##
# Creates a new parser for inline markup in the rd format.  The +block_parser+
# is used to for footnotes and labels in the inline text.

def initialize block_parser
  @block_parser = block_parser
end

##
# Parses the +inline+ text from RD format into RDoc format.

def parse inline
  @inline = inline
  @src = StringScanner.new inline
  @pre = "".dup
  @yydebug = true
  do_parse.to_s
end

##
# Returns the next token from the inline text

def next_token
  return [false, false] if @src.eos?
#  p @src.rest if @yydebug
  if ret = @src.scan(EM_OPEN_RE)
    @pre << ret
    [:EM_OPEN, ret]
  elsif ret = @src.scan(EM_CLOSE_RE)
    @pre << ret
    [:EM_CLOSE, ret]
  elsif ret = @src.scan(CODE_OPEN_RE)
    @pre << ret
    [:CODE_OPEN, ret]
  elsif ret = @src.scan(CODE_CLOSE_RE)
    @pre << ret
    [:CODE_CLOSE, ret]
  elsif ret = @src.scan(VAR_OPEN_RE)
    @pre << ret
    [:VAR_OPEN, ret]
  elsif ret = @src.scan(VAR_CLOSE_RE)
    @pre << ret
    [:VAR_CLOSE, ret]
  elsif ret = @src.scan(KBD_OPEN_RE)
    @pre << ret
    [:KBD_OPEN, ret]
  elsif ret = @src.scan(KBD_CLOSE_RE)
    @pre << ret
    [:KBD_CLOSE, ret]
  elsif ret = @src.scan(INDEX_OPEN_RE)
    @pre << ret
    [:INDEX_OPEN, ret]
  elsif ret = @src.scan(INDEX_CLOSE_RE)
    @pre << ret
    [:INDEX_CLOSE, ret]
  elsif ret = @src.scan(REF_OPEN_RE)
    @pre << ret
    [:REF_OPEN, ret]
  elsif ret = @src.scan(REF_CLOSE_RE)
    @pre << ret
    [:REF_CLOSE, ret]
  elsif ret = @src.scan(FOOTNOTE_OPEN_RE)
    @pre << ret
    [:FOOTNOTE_OPEN, ret]
  elsif ret = @src.scan(FOOTNOTE_CLOSE_RE)
    @pre << ret
    [:FOOTNOTE_CLOSE, ret]
  elsif ret = @src.scan(VERB_OPEN_RE)
    @pre << ret
    [:VERB_OPEN, ret]
  elsif ret = @src.scan(VERB_CLOSE_RE)
    @pre << ret
    [:VERB_CLOSE, ret]
  elsif ret = @src.scan(BAR_RE)
    @pre << ret
    [:BAR, ret]
  elsif ret = @src.scan(QUOTE_RE)
    @pre << ret
    [:QUOTE, ret]
  elsif ret = @src.scan(SLASH_RE)
    @pre << ret
    [:SLASH, ret]
  elsif ret = @src.scan(BACK_SLASH_RE)
    @pre << ret
    [:BACK_SLASH, ret]
  elsif ret = @src.scan(URL_RE)
    @pre << ret
    [:URL, ret]
  elsif ret = @src.scan(OTHER_RE)
    @pre << ret
    [:OTHER, ret]
  else
    ret = @src.rest
    @pre << ret
    @src.terminate
    [:OTHER, ret]
  end
end

##
# Raises a ParseError when invalid formatting is found

def on_error(et, ev, values)
  lines_of_rest = @src.rest.lines.to_a.length
  prev_words = prev_words_on_error(ev)
  at = 4 + prev_words.length

  message = <<-MSG
RD syntax error: line #{@block_parser.line_index - lines_of_rest}:
...#{prev_words} #{(ev||'')} #{next_words_on_error()} ...
  MSG

  message << " " * at + "^" * (ev ? ev.length : 0) + "\n"
  raise ParseError, message
end

##
# Returns words before the error

def prev_words_on_error(ev)
  pre = @pre
  if ev and /#{Regexp.quote(ev)}$/ =~ pre
    pre = $`
  end
  last_line(pre)
end

##
# Returns the last line of +src+

def last_line(src)
  if n = src.rindex("\n")
    src[(n+1) .. -1]
  else
    src
  end
end
private :last_line

##
# Returns words following an error

def next_words_on_error
  if n = @src.rest.index("\n")
    @src.rest[0 .. (n-1)]
  else
    @src.rest
  end
end

##
# Creates a new RDoc::RD::Inline for the +rdoc+ markup and the raw +reference+

def inline rdoc, reference = rdoc
  RDoc::RD::Inline.new rdoc, reference
end

# :stopdoc:
##### State transition tables begin ###

racc_action_table = [
   104,   103,   102,   100,   101,    99,   115,   116,   117,    29,
   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
    84,   118,   119,    63,    64,    65,    61,    81,    62,    76,
    78,    79,    85,    66,    67,    68,    69,    70,    71,    72,
    73,    74,    75,    77,    80,   149,    63,    64,    65,   153,
    81,    62,    76,    78,    79,    86,    66,    67,    68,    69,
    70,    71,    72,    73,    74,    75,    77,    80,   152,   104,
   103,   102,   100,   101,    99,   115,   116,   117,    87,   105,
   106,   107,   108,   109,   110,   111,   112,   113,   114,    88,
   118,   119,   104,   103,   102,   100,   101,    99,   115,   116,
   117,    89,   105,   106,   107,   108,   109,   110,   111,   112,
   113,   114,    96,   118,   119,   104,   103,   102,   100,   101,
    99,   115,   116,   117,   124,   105,   106,   107,   108,   109,
   110,   111,   112,   113,   114,   137,   118,   119,    22,    23,
    24,    25,    26,    21,    18,    19,   176,   177,    13,   148,
    14,   154,    15,   137,    16,   161,    17,   164,   173,    20,
    22,    23,    24,    25,    26,    21,    18,    19,   175,   177,
    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,   nil,
   nil,    20,    22,    23,    24,    25,    26,    21,    18,    19,
   nil,   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,
    17,   nil,   nil,    20,    22,    23,    24,    25,    26,    21,
    18,    19,   nil,   nil,    13,   nil,    14,   nil,    15,   nil,
    16,   nil,    17,   nil,   nil,    20,    22,    23,    24,    25,
    26,    21,    18,    19,   nil,   nil,    13,   nil,    14,   nil,
    15,   nil,    16,   nil,    17,   nil,   nil,    20,    22,    23,
    24,    25,    26,    21,    18,    19,   nil,   nil,    13,   nil,
    14,   nil,    15,   nil,    16,   nil,    17,   nil,   nil,    20,
    22,    23,    24,    25,    26,    21,    18,    19,   nil,   nil,
    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,    42,
   nil,    20,    54,    38,    53,    55,    56,    57,   nil,    13,
   nil,    14,   nil,    15,   nil,    16,   nil,    17,   nil,   nil,
    20,    22,    23,    24,    25,    26,    21,    18,    19,   nil,
   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,
   nil,   nil,    20,    63,    64,    65,    61,    81,    62,    76,
    78,    79,   nil,    66,    67,    68,    69,    70,    71,    72,
    73,    74,    75,    77,    80,   122,   nil,   nil,    54,   nil,
    53,    55,    56,    57,   nil,    13,   nil,    14,   nil,    15,
   nil,    16,   nil,    17,   145,   nil,    20,    54,   133,    53,
    55,    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,
    16,   nil,    17,   145,   nil,    20,    54,   133,    53,    55,
    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,
   nil,    17,   145,   nil,    20,    54,   133,    53,    55,    56,
    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,
    17,   145,   nil,    20,    54,   133,    53,    55,    56,    57,
   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,
   nil,   nil,    20,   135,   136,    54,   133,    53,    55,    56,
    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,
    17,   nil,   nil,    20,   135,   136,    54,   133,    53,    55,
    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,
   nil,    17,   nil,   nil,    20,   135,   136,    54,   133,    53,
    55,    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,
    16,   nil,    17,    95,   nil,    20,    54,    91,    53,    55,
    56,    57,   145,   nil,   nil,    54,   133,    53,    55,    56,
    57,   158,   nil,   nil,    54,   nil,    53,    55,    56,    57,
   165,   135,   136,    54,   133,    53,    55,    56,    57,   145,
   nil,   nil,    54,   133,    53,    55,    56,    57,   172,   135,
   136,    54,   133,    53,    55,    56,    57,   174,   135,   136,
    54,   133,    53,    55,    56,    57,   178,   135,   136,    54,
   133,    53,    55,    56,    57,   135,   136,    54,   133,    53,
    55,    56,    57,   135,   136,    54,   133,    53,    55,    56,
    57,   135,   136,    54,   133,    53,    55,    56,    57,    22,
    23,    24,    25,    26,    21 ]

racc_action_check = [
    38,    38,    38,    38,    38,    38,    38,    38,    38,     1,
    38,    38,    38,    38,    38,    38,    38,    38,    38,    38,
    29,    38,    38,    59,    59,    59,    59,    59,    59,    59,
    59,    59,    31,    59,    59,    59,    59,    59,    59,    59,
    59,    59,    59,    59,    59,    59,    61,    61,    61,    61,
    61,    61,    61,    61,    61,    32,    61,    61,    61,    61,
    61,    61,    61,    61,    61,    61,    61,    61,    61,    91,
    91,    91,    91,    91,    91,    91,    91,    91,    33,    91,
    91,    91,    91,    91,    91,    91,    91,    91,    91,    34,
    91,    91,    97,    97,    97,    97,    97,    97,    97,    97,
    97,    35,    97,    97,    97,    97,    97,    97,    97,    97,
    97,    97,    37,    97,    97,   155,   155,   155,   155,   155,
   155,   155,   155,   155,    41,   155,   155,   155,   155,   155,
   155,   155,   155,   155,   155,    43,   155,   155,     0,     0,
     0,     0,     0,     0,     0,     0,   165,   165,     0,    58,
     0,    90,     0,    94,     0,   100,     0,   125,   162,     0,
     2,     2,     2,     2,     2,     2,     2,     2,   164,   172,
     2,   nil,     2,   nil,     2,   nil,     2,   nil,     2,   nil,
   nil,     2,    13,    13,    13,    13,    13,    13,    13,    13,
   nil,   nil,    13,   nil,    13,   nil,    13,   nil,    13,   nil,
    13,   nil,   nil,    13,    14,    14,    14,    14,    14,    14,
    14,    14,   nil,   nil,    14,   nil,    14,   nil,    14,   nil,
    14,   nil,    14,   nil,   nil,    14,    15,    15,    15,    15,
    15,    15,    15,    15,   nil,   nil,    15,   nil,    15,   nil,
    15,   nil,    15,   nil,    15,   nil,   nil,    15,    16,    16,
    16,    16,    16,    16,    16,    16,   nil,   nil,    16,   nil,
    16,   nil,    16,   nil,    16,   nil,    16,   nil,   nil,    16,
    17,    17,    17,    17,    17,    17,    17,    17,   nil,   nil,
    17,   nil,    17,   nil,    17,   nil,    17,   nil,    17,    18,
   nil,    17,    18,    18,    18,    18,    18,    18,   nil,    18,
   nil,    18,   nil,    18,   nil,    18,   nil,    18,   nil,   nil,
    18,    19,    19,    19,    19,    19,    19,    19,    19,   nil,
   nil,    19,   nil,    19,   nil,    19,   nil,    19,   nil,    19,
   nil,   nil,    19,    20,    20,    20,    20,    20,    20,    20,
    20,    20,   nil,    20,    20,    20,    20,    20,    20,    20,
    20,    20,    20,    20,    20,    39,   nil,   nil,    39,   nil,
    39,    39,    39,    39,   nil,    39,   nil,    39,   nil,    39,
   nil,    39,   nil,    39,    44,   nil,    39,    44,    44,    44,
    44,    44,    44,   nil,    44,   nil,    44,   nil,    44,   nil,
    44,   nil,    44,    45,   nil,    44,    45,    45,    45,    45,
    45,    45,   nil,    45,   nil,    45,   nil,    45,   nil,    45,
   nil,    45,   138,   nil,    45,   138,   138,   138,   138,   138,
   138,   nil,   138,   nil,   138,   nil,   138,   nil,   138,   nil,
   138,   146,   nil,   138,   146,   146,   146,   146,   146,   146,
   nil,   146,   nil,   146,   nil,   146,   nil,   146,   nil,   146,
   nil,   nil,   146,    42,    42,    42,    42,    42,    42,    42,
    42,   nil,    42,   nil,    42,   nil,    42,   nil,    42,   nil,
    42,   nil,   nil,    42,   122,   122,   122,   122,   122,   122,
   122,   122,   nil,   122,   nil,   122,   nil,   122,   nil,   122,
   nil,   122,   nil,   nil,   122,   127,   127,   127,   127,   127,
   127,   127,   127,   nil,   127,   nil,   127,   nil,   127,   nil,
   127,   nil,   127,    36,   nil,   127,    36,    36,    36,    36,
    36,    36,    52,   nil,   nil,    52,    52,    52,    52,    52,
    52,    92,   nil,   nil,    92,   nil,    92,    92,    92,    92,
   126,   126,   126,   126,   126,   126,   126,   126,   126,   142,
   nil,   nil,   142,   142,   142,   142,   142,   142,   159,   159,
   159,   159,   159,   159,   159,   159,   159,   163,   163,   163,
   163,   163,   163,   163,   163,   163,   171,   171,   171,   171,
   171,   171,   171,   171,   171,    95,    95,    95,    95,    95,
    95,    95,    95,   158,   158,   158,   158,   158,   158,   158,
   158,   168,   168,   168,   168,   168,   168,   168,   168,    27,
    27,    27,    27,    27,    27 ]

racc_action_pointer = [
   135,     9,   157,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   179,   201,   223,   245,   267,   286,   308,
   330,   nil,   nil,   nil,   nil,   nil,   nil,   606,   nil,    20,
   nil,    18,    39,    60,    69,    79,   510,    89,    -3,   352,
   nil,   120,   449,   130,   371,   390,   nil,   nil,   nil,   nil,
   nil,   nil,   519,   nil,   nil,   nil,   nil,   nil,   138,    20,
   nil,    43,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   128,    66,   528,   nil,   148,   581,   nil,    89,   nil,   nil,
   149,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   470,   nil,   nil,   154,   537,   491,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   409,   nil,
   nil,   nil,   546,   nil,   nil,   nil,   428,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   112,   nil,   nil,   589,   555,
   nil,   nil,   155,   564,   164,   142,   nil,   nil,   597,   nil,
   nil,   573,   164,   nil,   nil,   nil,   nil,   nil,   nil ]

racc_action_default = [
  -138,  -138,    -1,    -3,    -4,    -5,    -6,    -7,    -8,    -9,
   -10,   -11,   -12,  -138,  -138,  -138,  -138,  -138,  -138,  -138,
  -138,  -103,  -104,  -105,  -106,  -107,  -108,  -111,  -110,  -138,
    -2,  -138,  -138,  -138,  -138,  -138,  -138,  -138,  -138,   -27,
   -26,   -35,  -138,   -58,   -41,   -40,   -47,   -48,   -49,   -50,
   -51,   -52,   -63,   -66,   -67,   -68,   -69,   -70,  -138,  -138,
  -112,  -138,  -116,  -117,  -118,  -119,  -120,  -121,  -122,  -123,
  -124,  -125,  -126,  -127,  -128,  -129,  -130,  -131,  -132,  -133,
  -134,  -135,  -137,  -109,   179,   -13,   -14,   -15,   -16,   -17,
  -138,  -138,   -23,   -22,   -33,  -138,   -19,   -24,   -79,   -80,
  -138,   -82,   -83,   -84,   -85,   -86,   -87,   -88,   -89,   -90,
   -91,   -92,   -93,   -94,   -95,   -96,   -97,   -98,   -99,  -100,
   -25,   -35,  -138,   -58,   -28,  -138,   -59,   -42,   -46,   -55,
   -56,   -65,   -71,   -72,   -75,   -76,   -77,   -31,   -38,   -44,
   -53,   -54,   -57,   -61,   -73,   -74,   -39,   -62,  -101,  -102,
  -136,  -113,  -114,  -115,   -18,   -20,   -21,   -33,  -138,  -138,
   -78,   -81,  -138,   -59,   -36,   -37,   -64,   -45,   -59,   -43,
   -60,  -138,   -34,   -36,   -37,   -29,   -30,   -32,   -34 ]

racc_goto_table = [
   126,    44,   125,    43,   144,   144,   160,    93,    97,    52,
   166,    82,   144,    40,    41,    39,   138,   146,   169,    30,
    36,    94,    44,     1,   123,   129,   169,    52,    90,    37,
    52,   167,   147,    92,   120,   121,    31,    32,    33,    34,
    35,   170,    58,   166,    59,    83,   170,   166,   151,   nil,
   150,   nil,   166,   159,     4,   166,     4,   nil,   nil,   nil,
   nil,   155,   nil,   156,   160,   nil,   nil,     4,     4,     4,
     4,     4,   nil,     4,     5,   nil,     5,   157,   nil,   nil,
   163,   nil,   162,    52,   nil,   168,   nil,     5,     5,     5,
     5,     5,   nil,     5,   nil,   nil,   nil,   nil,   144,   nil,
   nil,   nil,   144,   nil,   nil,   129,   144,   144,   nil,     6,
   129,     6,   nil,   nil,   nil,   nil,   171,     7,   nil,     7,
   nil,   nil,     6,     6,     6,     6,     6,     8,     6,     8,
     7,     7,     7,     7,     7,    11,     7,    11,   nil,   nil,
     8,     8,     8,     8,     8,   nil,     8,   nil,    11,    11,
    11,    11,    11,   nil,    11 ]

racc_goto_check = [
    22,    24,    21,    23,    36,    36,    37,    18,    16,    34,
    35,    41,    36,    19,    20,    17,    25,    25,    28,     3,
    13,    23,    24,     1,    23,    24,    28,    34,    14,    15,
    34,    29,    32,    17,    19,    20,     1,     1,     1,     1,
     1,    33,     1,    35,    38,    39,    33,    35,    42,   nil,
    41,   nil,    35,    22,     4,    35,     4,   nil,   nil,   nil,
   nil,    16,   nil,    18,    37,   nil,   nil,     4,     4,     4,
     4,     4,   nil,     4,     5,   nil,     5,    23,   nil,   nil,
    22,   nil,    21,    34,   nil,    22,   nil,     5,     5,     5,
     5,     5,   nil,     5,   nil,   nil,   nil,   nil,    36,   nil,
   nil,   nil,    36,   nil,   nil,    24,    36,    36,   nil,     6,
    24,     6,   nil,   nil,   nil,   nil,    22,     7,   nil,     7,
   nil,   nil,     6,     6,     6,     6,     6,     8,     6,     8,
     7,     7,     7,     7,     7,    11,     7,    11,   nil,   nil,
     8,     8,     8,     8,     8,   nil,     8,   nil,    11,    11,
    11,    11,    11,   nil,    11 ]

racc_goto_pointer = [
   nil,    23,   nil,    17,    54,    74,   109,   117,   127,   nil,
   nil,   135,   nil,     2,    -8,    11,   -30,    -3,   -29,    -5,
    -4,   -40,   -42,   -15,   -17,   -28,   nil,   nil,  -120,   -96,
   nil,   nil,   -20,  -101,    -9,  -116,   -40,   -91,    24,    18,
   nil,    -9,   -13 ]

racc_goto_default = [
   nil,   nil,     2,     3,    46,    47,    48,    49,    50,     9,
    10,    51,    12,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   140,   nil,    45,   127,   139,   128,
   141,   130,   142,   143,   132,   131,   134,    98,   nil,    28,
    27,   nil,    60 ]

racc_reduce_table = [
  0, 0, :racc_error,
  1, 27, :_reduce_none,
  2, 28, :_reduce_2,
  1, 28, :_reduce_3,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  3, 30, :_reduce_13,
  3, 31, :_reduce_14,
  3, 32, :_reduce_15,
  3, 33, :_reduce_16,
  3, 34, :_reduce_17,
  4, 35, :_reduce_18,
  3, 35, :_reduce_19,
  2, 40, :_reduce_20,
  2, 40, :_reduce_21,
  1, 40, :_reduce_22,
  1, 40, :_reduce_23,
  2, 41, :_reduce_24,
  2, 41, :_reduce_25,
  1, 41, :_reduce_26,
  1, 41, :_reduce_27,
  2, 39, :_reduce_none,
  4, 39, :_reduce_29,
  4, 39, :_reduce_30,
  2, 43, :_reduce_31,
  4, 43, :_reduce_32,
  1, 44, :_reduce_33,
  3, 44, :_reduce_34,
  1, 45, :_reduce_none,
  3, 45, :_reduce_36,
  3, 45, :_reduce_37,
  2, 46, :_reduce_38,
  2, 46, :_reduce_39,
  1, 46, :_reduce_40,
  1, 46, :_reduce_41,
  1, 47, :_reduce_none,
  2, 51, :_reduce_43,
  1, 51, :_reduce_44,
  2, 53, :_reduce_45,
  1, 53, :_reduce_46,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 54, :_reduce_none,
  1, 54, :_reduce_none,
  1, 55, :_reduce_none,
  1, 55, :_reduce_none,
  1, 56, :_reduce_57,
  1, 52, :_reduce_58,
  1, 57, :_reduce_59,
  2, 58, :_reduce_60,
  1, 58, :_reduce_none,
  2, 49, :_reduce_62,
  1, 49, :_reduce_none,
  2, 48, :_reduce_64,
  1, 48, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 62, :_reduce_none,
  1, 62, :_reduce_none,
  1, 59, :_reduce_none,
  1, 59, :_reduce_none,
  1, 61, :_reduce_none,
  1, 61, :_reduce_none,
  1, 61, :_reduce_none,
  2, 42, :_reduce_78,
  1, 42, :_reduce_none,
  1, 63, :_reduce_none,
  2, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  3, 36, :_reduce_101,
  3, 37, :_reduce_102,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  2, 66, :_reduce_109,
  1, 66, :_reduce_none,
  1, 38, :_reduce_111,
  1, 67, :_reduce_none,
  2, 67, :_reduce_113,
  2, 67, :_reduce_114,
  2, 67, :_reduce_115,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  2, 64, :_reduce_136,
  1, 64, :_reduce_none ]

racc_reduce_n = 138

racc_shift_n = 179

racc_token_table = {
  false => 0,
  :error => 1,
  :EX_LOW => 2,
  :QUOTE => 3,
  :BAR => 4,
  :SLASH => 5,
  :BACK_SLASH => 6,
  :URL => 7,
  :OTHER => 8,
  :REF_OPEN => 9,
  :FOOTNOTE_OPEN => 10,
  :FOOTNOTE_CLOSE => 11,
  :EX_HIGH => 12,
  :EM_OPEN => 13,
  :EM_CLOSE => 14,
  :CODE_OPEN => 15,
  :CODE_CLOSE => 16,
  :VAR_OPEN => 17,
  :VAR_CLOSE => 18,
  :KBD_OPEN => 19,
  :KBD_CLOSE => 20,
  :INDEX_OPEN => 21,
  :INDEX_CLOSE => 22,
  :REF_CLOSE => 23,
  :VERB_OPEN => 24,
  :VERB_CLOSE => 25 }

racc_nt_base = 26

racc_use_result_var = true

Racc_arg = [
  racc_action_table,
  racc_action_check,
  racc_action_default,
  racc_action_pointer,
  racc_goto_table,
  racc_goto_check,
  racc_goto_default,
  racc_goto_pointer,
  racc_nt_base,
  racc_reduce_table,
  racc_token_table,
  racc_shift_n,
  racc_reduce_n,
  racc_use_result_var ]
Ractor.make_shareable(Racc_arg) if defined?(Ractor)

Racc_token_to_s_table = [
  "$end",
  "error",
  "EX_LOW",
  "QUOTE",
  "BAR",
  "SLASH",
  "BACK_SLASH",
  "URL",
  "OTHER",
  "REF_OPEN",
  "FOOTNOTE_OPEN",
  "FOOTNOTE_CLOSE",
  "EX_HIGH",
  "EM_OPEN",
  "EM_CLOSE",
  "CODE_OPEN",
  "CODE_CLOSE",
  "VAR_OPEN",
  "VAR_CLOSE",
  "KBD_OPEN",
  "KBD_CLOSE",
  "INDEX_OPEN",
  "INDEX_CLOSE",
  "REF_CLOSE",
  "VERB_OPEN",
  "VERB_CLOSE",
  "$start",
  "content",
  "elements",
  "element",
  "emphasis",
  "code",
  "var",
  "keyboard",
  "index",
  "reference",
  "footnote",
  "verb",
  "normal_str_ele",
  "substitute",
  "ref_label",
  "ref_label2",
  "ref_url_strings",
  "filename",
  "element_label",
  "element_label2",
  "ref_subst_content",
  "ref_subst_content_q",
  "ref_subst_strings_q",
  "ref_subst_strings_first",
  "ref_subst_ele2",
  "ref_subst_eles",
  "ref_subst_str_ele_first",
  "ref_subst_eles_q",
  "ref_subst_ele",
  "ref_subst_ele_q",
  "ref_subst_str_ele",
  "ref_subst_str_ele_q",
  "ref_subst_strings",
  "ref_subst_string3",
  "ref_subst_string",
  "ref_subst_string_q",
  "ref_subst_string2",
  "ref_url_string",
  "verb_strings",
  "normal_string",
  "normal_strings",
  "verb_string",
  "verb_normal_string" ]
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)

Racc_debug_parser = false

##### State transition tables end #####

# reduce 0 omitted

# reduce 1 omitted

def _reduce_2(val, _values, result)
 result.append val[1]
    result
end

def _reduce_3(val, _values, result)
 result = val[0]
    result
end

# reduce 4 omitted

# reduce 5 omitted

# reduce 6 omitted

# reduce 7 omitted

# reduce 8 omitted

# reduce 9 omitted

# reduce 10 omitted

# reduce 11 omitted

# reduce 12 omitted

def _reduce_13(val, _values, result)
      content = val[1]
      result = inline "<em>#{content}</em>", content

    result
end

def _reduce_14(val, _values, result)
      content = val[1]
      result = inline "<code>#{content}</code>", content

    result
end

def _reduce_15(val, _values, result)
      content = val[1]
      result = inline "+#{content}+", content

    result
end

def _reduce_16(val, _values, result)
      content = val[1]
      result = inline "<tt>#{content}</tt>", content

    result
end

def _reduce_17(val, _values, result)
      label = val[1]
      @block_parser.add_label label.reference
      result = "<span id=\"label-#{label}\">#{label}</span>"

    result
end

def _reduce_18(val, _values, result)
      result = "{#{val[1]}}[#{val[2].join}]"

    result
end

def _reduce_19(val, _values, result)
      scheme, inline = val[1]

      result = "{#{inline}}[#{scheme}#{inline.reference}]"

    result
end

def _reduce_20(val, _values, result)
      result = [nil, inline(val[1])]

    result
end

def _reduce_21(val, _values, result)
      result = [
        'rdoc-label:',
        inline("#{val[0].reference}/#{val[1].reference}")
      ]

    result
end

def _reduce_22(val, _values, result)
      result = ['rdoc-label:', val[0].reference]

    result
end

def _reduce_23(val, _values, result)
      result = ['rdoc-label:', "#{val[0].reference}/"]

    result
end

def _reduce_24(val, _values, result)
      result = [nil, inline(val[1])]

    result
end

def _reduce_25(val, _values, result)
      result = [
        'rdoc-label:',
        inline("#{val[0].reference}/#{val[1].reference}")
      ]

    result
end

def _reduce_26(val, _values, result)
      result = ['rdoc-label:', val[0]]

    result
end

def _reduce_27(val, _values, result)
      ref = val[0].reference
      result = ['rdoc-label:', inline(ref, "#{ref}/")]

    result
end

# reduce 28 omitted

def _reduce_29(val, _values, result)
 result = val[1]
    result
end

def _reduce_30(val, _values, result)
 result = val[1]
    result
end

def _reduce_31(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_32(val, _values, result)
      result = inline "\"#{val[1]}\""

    result
end

def _reduce_33(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_34(val, _values, result)
      result = inline "\"#{val[1]}\""

    result
end

# reduce 35 omitted

def _reduce_36(val, _values, result)
 result = val[1]
    result
end

def _reduce_37(val, _values, result)
 result = inline val[1]
    result
end

def _reduce_38(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_39(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_40(val, _values, result)
      result = val[0]

    result
end

def _reduce_41(val, _values, result)
      result = inline val[0]

    result
end

# reduce 42 omitted

def _reduce_43(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_44(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_45(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_46(val, _values, result)
      result = val[0]

    result
end

# reduce 47 omitted

# reduce 48 omitted

# reduce 49 omitted

# reduce 50 omitted

# reduce 51 omitted

# reduce 52 omitted

# reduce 53 omitted

# reduce 54 omitted

# reduce 55 omitted

# reduce 56 omitted

def _reduce_57(val, _values, result)
      result = val[0]

    result
end

def _reduce_58(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_59(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_60(val, _values, result)
 result << val[1]
    result
end

# reduce 61 omitted

def _reduce_62(val, _values, result)
      result << val[1]

    result
end

# reduce 63 omitted

def _reduce_64(val, _values, result)
      result << val[1]

    result
end

# reduce 65 omitted

# reduce 66 omitted

# reduce 67 omitted

# reduce 68 omitted

# reduce 69 omitted

# reduce 70 omitted

# reduce 71 omitted

# reduce 72 omitted

# reduce 73 omitted

# reduce 74 omitted

# reduce 75 omitted

# reduce 76 omitted

# reduce 77 omitted

def _reduce_78(val, _values, result)
 result << val[1]
    result
end

# reduce 79 omitted

# reduce 80 omitted

# reduce 81 omitted

# reduce 82 omitted

# reduce 83 omitted

# reduce 84 omitted

# reduce 85 omitted

# reduce 86 omitted

# reduce 87 omitted

# reduce 88 omitted

# reduce 89 omitted

# reduce 90 omitted

# reduce 91 omitted

# reduce 92 omitted

# reduce 93 omitted

# reduce 94 omitted

# reduce 95 omitted

# reduce 96 omitted

# reduce 97 omitted

# reduce 98 omitted

# reduce 99 omitted

# reduce 100 omitted

def _reduce_101(val, _values, result)
      index = @block_parser.add_footnote val[1].rdoc
      result = "{*#{index}}[rdoc-label:foottext-#{index}:footmark-#{index}]"

    result
end

def _reduce_102(val, _values, result)
      result = inline "<tt>#{val[1]}</tt>", val[1]

    result
end

# reduce 103 omitted

# reduce 104 omitted

# reduce 105 omitted

# reduce 106 omitted

# reduce 107 omitted

# reduce 108 omitted

def _reduce_109(val, _values, result)
 result << val[1]
    result
end

# reduce 110 omitted

def _reduce_111(val, _values, result)
      result = inline val[0]

    result
end

# reduce 112 omitted

def _reduce_113(val, _values, result)
 result = val[1]
    result
end

def _reduce_114(val, _values, result)
 result = val[1]
    result
end

def _reduce_115(val, _values, result)
 result = val[1]
    result
end

# reduce 116 omitted

# reduce 117 omitted

# reduce 118 omitted

# reduce 119 omitted

# reduce 120 omitted

# reduce 121 omitted

# reduce 122 omitted

# reduce 123 omitted

# reduce 124 omitted

# reduce 125 omitted

# reduce 126 omitted

# reduce 127 omitted

# reduce 128 omitted

# reduce 129 omitted

# reduce 130 omitted

# reduce 131 omitted

# reduce 132 omitted

# reduce 133 omitted

# reduce 134 omitted

# reduce 135 omitted

def _reduce_136(val, _values, result)
 result << val[1]
    result
end

# reduce 137 omitted

def _reduce_none(val, _values, result)
  val[0]
end

end   # class InlineParser

end
PK)J[�U�����7share/gems/gems/rdoc-6.10.0/lib/rdoc/rd/block_parser.rbnu�[���# frozen_string_literal: true
#
# DO NOT MODIFY!!!!
# This file is automatically generated by Racc 1.8.1
# from Racc grammar file "block_parser.ry".
#

###### racc/parser.rb begin
unless $".find {|p| p.end_with?('/racc/parser.rb')}
$".push "#{__dir__}/racc/parser.rb"
#--
# Copyright (c) 1999-2006 Minero Aoki
#
# This program is free software.
# You can distribute/modify this program under the same terms of ruby.
#
# As a special exception, when this code is copied by Racc
# into a Racc output file, you may use that output file
# without restriction.
#++

unless $".find {|p| p.end_with?('/racc/info.rb')}
$".push "#{__dir__}/racc/info.rb"

module Racc
  VERSION   = '1.8.1'
  Version = VERSION
  Copyright = 'Copyright (c) 1999-2006 Minero Aoki'
end

end


module Racc
  class ParseError < StandardError; end
end
unless defined?(::ParseError)
  ParseError = Racc::ParseError # :nodoc:
end

# Racc is an LALR(1) parser generator.
# It is written in Ruby itself, and generates Ruby programs.
#
# == Command-line Reference
#
#     racc [-o<var>filename</var>] [--output-file=<var>filename</var>]
#          [-e<var>rubypath</var>] [--executable=<var>rubypath</var>]
#          [-v] [--verbose]
#          [-O<var>filename</var>] [--log-file=<var>filename</var>]
#          [-g] [--debug]
#          [-E] [--embedded]
#          [-l] [--no-line-convert]
#          [-c] [--line-convert-all]
#          [-a] [--no-omit-actions]
#          [-C] [--check-only]
#          [-S] [--output-status]
#          [--version] [--copyright] [--help] <var>grammarfile</var>
#
# [+grammarfile+]
#   Racc grammar file. Any extension is permitted.
# [-o+outfile+, --output-file=+outfile+]
#   A filename for output. default is <+filename+>.tab.rb
# [-O+filename+, --log-file=+filename+]
#   Place logging output in file +filename+.
#   Default log file name is <+filename+>.output.
# [-e+rubypath+, --executable=+rubypath+]
#   output executable file(mode 755). where +path+ is the Ruby interpreter.
# [-v, --verbose]
#   verbose mode. create +filename+.output file, like yacc's y.output file.
# [-g, --debug]
#   add debug code to parser class. To display debugging information,
#   use this '-g' option and set @yydebug true in parser class.
# [-E, --embedded]
#   Output parser which doesn't need runtime files (racc/parser.rb).
# [-F, --frozen]
#   Output parser which declares frozen_string_literals: true
# [-C, --check-only]
#   Check syntax of racc grammar file and quit.
# [-S, --output-status]
#   Print messages time to time while compiling.
# [-l, --no-line-convert]
#   turns off line number converting.
# [-c, --line-convert-all]
#   Convert line number of actions, inner, header and footer.
# [-a, --no-omit-actions]
#   Call all actions, even if an action is empty.
# [--version]
#   print Racc version and quit.
# [--copyright]
#   Print copyright and quit.
# [--help]
#   Print usage and quit.
#
# == Generating Parser Using Racc
#
# To compile Racc grammar file, simply type:
#
#   $ racc parse.y
#
# This creates Ruby script file "parse.tab.y". The -o option can change the output filename.
#
# == Writing A Racc Grammar File
#
# If you want your own parser, you have to write a grammar file.
# A grammar file contains the name of your parser class, grammar for the parser,
# user code, and anything else.
# When writing a grammar file, yacc's knowledge is helpful.
# If you have not used yacc before, Racc is not too difficult.
#
# Here's an example Racc grammar file.
#
#   class Calcparser
#   rule
#     target: exp { print val[0] }
#
#     exp: exp '+' exp
#        | exp '*' exp
#        | '(' exp ')'
#        | NUMBER
#   end
#
# Racc grammar files resemble yacc files.
# But (of course), this is Ruby code.
# yacc's $$ is the 'result', $0, $1... is
# an array called 'val', and $-1, $-2... is an array called '_values'.
#
# See the {Grammar File Reference}[rdoc-ref:lib/racc/rdoc/grammar.en.rdoc] for
# more information on grammar files.
#
# == Parser
#
# Then you must prepare the parse entry method. There are two types of
# parse methods in Racc, Racc::Parser#do_parse and Racc::Parser#yyparse
#
# Racc::Parser#do_parse is simple.
#
# It's yyparse() of yacc, and Racc::Parser#next_token is yylex().
# This method must returns an array like [TOKENSYMBOL, ITS_VALUE].
# EOF is [false, false].
# (TOKENSYMBOL is a Ruby symbol (taken from String#intern) by default.
# If you want to change this, see the grammar reference.
#
# Racc::Parser#yyparse is little complicated, but useful.
# It does not use Racc::Parser#next_token, instead it gets tokens from any iterator.
#
# For example, <code>yyparse(obj, :scan)</code> causes
# calling +obj#scan+, and you can return tokens by yielding them from +obj#scan+.
#
# == Debugging
#
# When debugging, "-v" or/and the "-g" option is helpful.
#
# "-v" creates verbose log file (.output).
# "-g" creates a "Verbose Parser".
# Verbose Parser prints the internal status when parsing.
# But it's _not_ automatic.
# You must use -g option and set +@yydebug+ to +true+ in order to get output.
# -g option only creates the verbose parser.
#
# === Racc reported syntax error.
#
# Isn't there too many "end"?
# grammar of racc file is changed in v0.10.
#
# Racc does not use '%' mark, while yacc uses huge number of '%' marks..
#
# === Racc reported "XXXX conflicts".
#
# Try "racc -v xxxx.y".
# It causes producing racc's internal log file, xxxx.output.
#
# === Generated parsers does not work correctly
#
# Try "racc -g xxxx.y".
# This command let racc generate "debugging parser".
# Then set @yydebug=true in your parser.
# It produces a working log of your parser.
#
# == Re-distributing Racc runtime
#
# A parser, which is created by Racc, requires the Racc runtime module;
# racc/parser.rb.
#
# Ruby 1.8.x comes with Racc runtime module,
# you need NOT distribute Racc runtime files.
#
# If you want to include the Racc runtime module with your parser.
# This can be done by using '-E' option:
#
#   $ racc -E -omyparser.rb myparser.y
#
# This command creates myparser.rb which `includes' Racc runtime.
# Only you must do is to distribute your parser file (myparser.rb).
#
# Note: parser.rb is ruby license, but your parser is not.
# Your own parser is completely yours.
module Racc

  unless defined?(Racc_No_Extensions)
    Racc_No_Extensions = false # :nodoc:
  end

  class Parser

    Racc_Runtime_Version = ::Racc::VERSION
    Racc_Runtime_Core_Version_R = ::Racc::VERSION

    begin
      if Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
        require 'jruby'
        require 'racc/cparse-jruby.jar'
        com.headius.racc.Cparse.new.load(JRuby.runtime, false)
      else
        require 'racc/cparse'
      end

      unless new.respond_to?(:_racc_do_parse_c, true)
        raise LoadError, 'old cparse.so'
      end
      if Racc_No_Extensions
        raise LoadError, 'selecting ruby version of racc runtime core'
      end

      Racc_Main_Parsing_Routine    = :_racc_do_parse_c # :nodoc:
      Racc_YY_Parse_Method         = :_racc_yyparse_c # :nodoc:
      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_C # :nodoc:
      Racc_Runtime_Type            = 'c' # :nodoc:
    rescue LoadError
      Racc_Main_Parsing_Routine    = :_racc_do_parse_rb
      Racc_YY_Parse_Method         = :_racc_yyparse_rb
      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_R
      Racc_Runtime_Type            = 'ruby'
    end

    def Parser.racc_runtime_type # :nodoc:
      Racc_Runtime_Type
    end

    def _racc_setup
      @yydebug = false unless self.class::Racc_debug_parser
      @yydebug = false unless defined?(@yydebug)
      if @yydebug
        @racc_debug_out = $stderr unless defined?(@racc_debug_out)
        @racc_debug_out ||= $stderr
      end
      arg = self.class::Racc_arg
      arg[13] = true if arg.size < 14
      arg
    end

    def _racc_init_sysvars
      @racc_state  = [0]
      @racc_tstack = []
      @racc_vstack = []

      @racc_t = nil
      @racc_val = nil

      @racc_read_next = true

      @racc_user_yyerror = false
      @racc_error_status = 0
    end

    # The entry point of the parser. This method is used with #next_token.
    # If Racc wants to get token (and its value), calls next_token.
    #
    # Example:
    #     def parse
    #       @q = [[1,1],
    #             [2,2],
    #             [3,3],
    #             [false, '$']]
    #       do_parse
    #     end
    #
    #     def next_token
    #       @q.shift
    #     end
    class_eval <<~RUBY, __FILE__, __LINE__ + 1
    def do_parse
      #{Racc_Main_Parsing_Routine}(_racc_setup(), false)
    end
    RUBY

    # The method to fetch next token.
    # If you use #do_parse method, you must implement #next_token.
    #
    # The format of return value is [TOKEN_SYMBOL, VALUE].
    # +token-symbol+ is represented by Ruby's symbol by default, e.g. :IDENT
    # for 'IDENT'.  ";" (String) for ';'.
    #
    # The final symbol (End of file) must be false.
    def next_token
      raise NotImplementedError, "#{self.class}\#next_token is not defined"
    end

    def _racc_do_parse_rb(arg, in_debug)
      action_table, action_check, action_default, action_pointer,
      _,            _,            _,              _,
      _,            _,            token_table,    * = arg

      _racc_init_sysvars
      tok = act = i = nil

      catch(:racc_end_parse) {
        while true
          if i = action_pointer[@racc_state[-1]]
            if @racc_read_next
              if @racc_t != 0   # not EOF
                tok, @racc_val = next_token()
                unless tok      # EOF
                  @racc_t = 0
                else
                  @racc_t = (token_table[tok] or 1)   # error token
                end
                racc_read_token(@racc_t, tok, @racc_val) if @yydebug
                @racc_read_next = false
              end
            end
            i += @racc_t
            unless i >= 0 and
                   act = action_table[i] and
                   action_check[i] == @racc_state[-1]
              act = action_default[@racc_state[-1]]
            end
          else
            act = action_default[@racc_state[-1]]
          end
          while act = _racc_evalact(act, arg)
            ;
          end
        end
      }
    end

    # Another entry point for the parser.
    # If you use this method, you must implement RECEIVER#METHOD_ID method.
    #
    # RECEIVER#METHOD_ID is a method to get next token.
    # It must 'yield' the token, which format is [TOKEN-SYMBOL, VALUE].
    class_eval <<~RUBY, __FILE__, __LINE__ + 1
    def yyparse(recv, mid)
      #{Racc_YY_Parse_Method}(recv, mid, _racc_setup(), false)
    end
    RUBY

    def _racc_yyparse_rb(recv, mid, arg, c_debug)
      action_table, action_check, action_default, action_pointer,
      _,            _,            _,              _,
      _,            _,            token_table,    * = arg

      _racc_init_sysvars

      catch(:racc_end_parse) {
        until i = action_pointer[@racc_state[-1]]
          while act = _racc_evalact(action_default[@racc_state[-1]], arg)
            ;
          end
        end
        recv.__send__(mid) do |tok, val|
          unless tok
            @racc_t = 0
          else
            @racc_t = (token_table[tok] or 1)   # error token
          end
          @racc_val = val
          @racc_read_next = false

          i += @racc_t
          unless i >= 0 and
                 act = action_table[i] and
                 action_check[i] == @racc_state[-1]
            act = action_default[@racc_state[-1]]
          end
          while act = _racc_evalact(act, arg)
            ;
          end

          while !(i = action_pointer[@racc_state[-1]]) ||
                ! @racc_read_next ||
                @racc_t == 0  # $
            unless i and i += @racc_t and
                   i >= 0 and
                   act = action_table[i] and
                   action_check[i] == @racc_state[-1]
              act = action_default[@racc_state[-1]]
            end
            while act = _racc_evalact(act, arg)
              ;
            end
          end
        end
      }
    end

    ###
    ### common
    ###

    def _racc_evalact(act, arg)
      action_table, action_check, _, action_pointer,
      _,            _,            _, _,
      _,            _,            _, shift_n,
      reduce_n,     * = arg
      nerr = 0   # tmp

      if act > 0 and act < shift_n
        #
        # shift
        #
        if @racc_error_status > 0
          @racc_error_status -= 1 unless @racc_t <= 1 # error token or EOF
        end
        @racc_vstack.push @racc_val
        @racc_state.push act
        @racc_read_next = true
        if @yydebug
          @racc_tstack.push @racc_t
          racc_shift @racc_t, @racc_tstack, @racc_vstack
        end

      elsif act < 0 and act > -reduce_n
        #
        # reduce
        #
        code = catch(:racc_jump) {
          @racc_state.push _racc_do_reduce(arg, act)
          false
        }
        if code
          case code
          when 1 # yyerror
            @racc_user_yyerror = true   # user_yyerror
            return -reduce_n
          when 2 # yyaccept
            return shift_n
          else
            raise '[Racc Bug] unknown jump code'
          end
        end

      elsif act == shift_n
        #
        # accept
        #
        racc_accept if @yydebug
        throw :racc_end_parse, @racc_vstack[0]

      elsif act == -reduce_n
        #
        # error
        #
        case @racc_error_status
        when 0
          unless arg[21]    # user_yyerror
            nerr += 1
            on_error @racc_t, @racc_val, @racc_vstack
          end
        when 3
          if @racc_t == 0   # is $
            # We're at EOF, and another error occurred immediately after
            # attempting auto-recovery
            throw :racc_end_parse, nil
          end
          @racc_read_next = true
        end
        @racc_user_yyerror = false
        @racc_error_status = 3
        while true
          if i = action_pointer[@racc_state[-1]]
            i += 1   # error token
            if  i >= 0 and
                (act = action_table[i]) and
                action_check[i] == @racc_state[-1]
              break
            end
          end
          throw :racc_end_parse, nil if @racc_state.size <= 1
          @racc_state.pop
          @racc_vstack.pop
          if @yydebug
            @racc_tstack.pop
            racc_e_pop @racc_state, @racc_tstack, @racc_vstack
          end
        end
        return act

      else
        raise "[Racc Bug] unknown action #{act.inspect}"
      end

      racc_next_state(@racc_state[-1], @racc_state) if @yydebug

      nil
    end

    def _racc_do_reduce(arg, act)
      _,          _,            _,            _,
      goto_table, goto_check,   goto_default, goto_pointer,
      nt_base,    reduce_table, _,            _,
      _,          use_result,   * = arg

      state = @racc_state
      vstack = @racc_vstack
      tstack = @racc_tstack

      i = act * -3
      len       = reduce_table[i]
      reduce_to = reduce_table[i+1]
      method_id = reduce_table[i+2]
      void_array = []

      tmp_t = tstack[-len, len] if @yydebug
      tmp_v = vstack[-len, len]
      tstack[-len, len] = void_array if @yydebug
      vstack[-len, len] = void_array
      state[-len, len]  = void_array

      # tstack must be updated AFTER method call
      if use_result
        vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0])
      else
        vstack.push __send__(method_id, tmp_v, vstack)
      end
      tstack.push reduce_to

      racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug

      k1 = reduce_to - nt_base
      if i = goto_pointer[k1]
        i += state[-1]
        if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1
          return curstate
        end
      end
      goto_default[k1]
    end

    # This method is called when a parse error is found.
    #
    # ERROR_TOKEN_ID is an internal ID of token which caused error.
    # You can get string representation of this ID by calling
    # #token_to_str.
    #
    # ERROR_VALUE is a value of error token.
    #
    # value_stack is a stack of symbol values.
    # DO NOT MODIFY this object.
    #
    # This method raises ParseError by default.
    #
    # If this method returns, parsers enter "error recovering mode".
    def on_error(t, val, vstack)
      raise ParseError, sprintf("parse error on value %s (%s)",
                                val.inspect, token_to_str(t) || '?')
    end

    # Enter error recovering mode.
    # This method does not call #on_error.
    def yyerror
      throw :racc_jump, 1
    end

    # Exit parser.
    # Return value is +Symbol_Value_Stack[0]+.
    def yyaccept
      throw :racc_jump, 2
    end

    # Leave error recovering mode.
    def yyerrok
      @racc_error_status = 0
    end

    # For debugging output
    def racc_read_token(t, tok, val)
      @racc_debug_out.print 'read    '
      @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '
      @racc_debug_out.puts val.inspect
      @racc_debug_out.puts
    end

    def racc_shift(tok, tstack, vstack)
      @racc_debug_out.puts "shift   #{racc_token2str tok}"
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_reduce(toks, sim, tstack, vstack)
      out = @racc_debug_out
      out.print 'reduce '
      if toks.empty?
        out.print ' <none>'
      else
        toks.each {|t| out.print ' ', racc_token2str(t) }
      end
      out.puts " --> #{racc_token2str(sim)}"
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_accept
      @racc_debug_out.puts 'accept'
      @racc_debug_out.puts
    end

    def racc_e_pop(state, tstack, vstack)
      @racc_debug_out.puts 'error recovering mode: pop token'
      racc_print_states state
      racc_print_stacks tstack, vstack
      @racc_debug_out.puts
    end

    def racc_next_state(curstate, state)
      @racc_debug_out.puts  "goto    #{curstate}"
      racc_print_states state
      @racc_debug_out.puts
    end

    def racc_print_stacks(t, v)
      out = @racc_debug_out
      out.print '        ['
      t.each_index do |i|
        out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')'
      end
      out.puts ' ]'
    end

    def racc_print_states(s)
      out = @racc_debug_out
      out.print '        ['
      s.each {|st| out.print ' ', st }
      out.puts ' ]'
    end

    def racc_token2str(tok)
      self.class::Racc_token_to_s_table[tok] or
          raise "[Racc Bug] can't convert token #{tok} to string"
    end

    # Convert internal ID of token symbol to the string.
    def token_to_str(t)
      self.class::Racc_token_to_s_table[t]
    end

  end

end

end
###### racc/parser.rb end

class RDoc::RD

##
# RD format parser for headings, paragraphs, lists, verbatim sections that
# exist as blocks.

class BlockParser < Racc::Parser


# :stopdoc:

MARK_TO_LEVEL = {
  '='    => 1,
  '=='   => 2,
  '==='  => 3,
  '====' => 4,
  '+'    => 5,
  '++'   => 6,
}

# :startdoc:

##
# Footnotes for this document

attr_reader :footnotes

##
# Labels for items in this document

attr_reader :labels

##
# Path to find included files in

attr_accessor :include_path

##
# Creates a new RDoc::RD::BlockParser.  Use #parse to parse an rd-format
# document.

def initialize
  @inline_parser = RDoc::RD::InlineParser.new self
  @include_path = []

  # for testing
  @footnotes = []
  @labels    = {}
end

##
# Parses +src+ and returns an RDoc::Markup::Document.

def parse src
  @src = src
  @src.push false

  @footnotes = []
  @labels    = {}

  # @i: index(line no.) of src
  @i = 0

  # stack for current indentation
  @indent_stack = []

  # how indented.
  @current_indent = @indent_stack.join("")

  # RDoc::RD::BlockParser for tmp src
  @subparser = nil

  # which part is in now
  @in_part = nil
  @part_content = []

  @in_verbatim = false

  @yydebug = true

  document = do_parse

  unless @footnotes.empty? then
    blankline = document.parts.pop

    document.parts << RDoc::Markup::Rule.new(1)
    document.parts.concat @footnotes

    document.parts.push blankline
  end

  document
end

##
# Returns the next token from the document

def next_token # :nodoc:
  # preprocessing
  # if it is not in RD part
  # => method
  while @in_part != "rd"
    line = @src[@i]
    @i += 1 # next line

    case line
    # src end
    when false
      return [false, false]
    # RD part begin
    when /^=begin\s*(?:\bRD\b.*)?\s*$/
      if @in_part # if in non-RD part
        @part_content.push(line)
      else
        @in_part = "rd"
        return [:WHITELINE, "=begin\n"] # <= for textblockand
      end
    # non-RD part begin
    when /^=begin\s+(\w+)/
      part = $1
=begin # not imported to RDoc
      if @in_part # if in non-RD part
        @part_content.push(line)
      else
        @in_part = part if @tree.filter[part] # if filter exists
#  p "BEGIN_PART: #{@in_part}" # DEBUG
      end
=end
      @in_part = part
    # non-RD part end
    when /^=end(?:$|[\s\0\C-d\C-z])/
      if @in_part # if in non-RD part
=begin # not imported to RDoc
#  p "END_PART: #{@in_part}" # DEBUG
        # make Part-in object
        part = RDoc::RD::Part.new(@part_content.join(""), @tree, "r")
        @part_content.clear
        # call filter, part_out is output(Part object)
        part_out = @tree.filter[@in_part].call(part)

        if @tree.filter[@in_part].mode == :rd # if output is RD formatted
          subtree = parse_subtree(part_out.to_a)
        else # if output is target formatted
          basename = Tempfile.create(["rdtmp", ".#{@in_part}"], @tree.tmp_dir) do |tmpfile|
            tmpfile.print(part_out)
            File.basename(tmpfile.path)
          end
          subtree = parse_subtree(["=begin\n", "<<< #{basename}\n", "=end\n"])
        end
        @in_part = nil
        return [:SUBTREE, subtree]
=end
      end
    else
=begin # not imported to RDoc
      if @in_part # if in non-RD part
        @part_content.push(line)
      end
=end
    end
  end

  @current_indent = @indent_stack.join("")
  line = @src[@i]
  case line
  when false
    if_current_indent_equal("") do
      [false, false]
    end
  when /^=end/
    if_current_indent_equal("") do
      @in_part = nil
      [:WHITELINE, "=end"] # MUST CHANGE??
    end
  when /^\s*$/
    @i += 1 # next line
    return [:WHITELINE, ':WHITELINE']
  when /^\#/  # comment line
    @i += 1 # next line
    self.next_token()
  when /^(={1,4})(?!=)\s*(?=\S)/, /^(\+{1,2})(?!\+)\s*(?=\S)/
    rest = $'                    # '
    rest.strip!
    mark = $1
    if_current_indent_equal("") do
      return [:HEADLINE, [MARK_TO_LEVEL[mark], rest]]
    end
  when /^<<<\s*(\S+)/
    file = $1
    if_current_indent_equal("") do
      suffix = file[-3 .. -1]
      if suffix == ".rd" or suffix == ".rb"
        subtree = parse_subtree(get_included(file))
        [:SUBTREE, subtree]
      else
        [:INCLUDE, file]
      end
    end
  when /^(\s*)\*(\s*)/
    rest = $'                   # '
    newIndent = $2
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s" + newIndent)
        [:ITEMLISTLINE, rest]
      end
    end
  when /^(\s*)(\(\d+\))(\s*)/
    rest = $'                     # '
    mark = $2
    newIndent = $3
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s" * mark.size + newIndent)
        [:ENUMLISTLINE, rest]
      end
    end
  when /^(\s*):(\s*)/
    rest = $'                    # '
    newIndent = $2
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s#{$2}")
        [:DESCLISTLINE, rest]
      end
    end
  when /^(\s*)---(?!-|\s*$)/
    indent = $1
    rest = $'
    /\s*/ === rest
    term = $'
    new_indent = $&
    if_current_indent_equal(indent) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s\s\s" + new_indent)
        [:METHODLISTLINE, term]
      end
    end
  when /^(\s*)/
    if_current_indent_equal($1) do
      [:STRINGLINE, line]
    end
  else
    raise "[BUG] parsing error may occurred."
  end
end

##
# Yields to the given block if +indent+ matches the current indent, otherwise
# an indentation token is processed.

def if_current_indent_equal(indent)
  indent = indent.sub(/\t/, "\s" * 8)
  if @current_indent == indent
    @i += 1 # next line
    yield
  elsif indent.index(@current_indent) == 0
    @indent_stack.push(indent[@current_indent.size .. -1])
    [:INDENT, ":INDENT"]
  else
    @indent_stack.pop
    [:DEDENT, ":DEDENT"]
  end
end
private :if_current_indent_equal

##
# Cuts off excess whitespace in +src+

def cut_off(src)
  ret = []
  whiteline_buf = []

  line = src.shift
  /^\s*/ =~ line

  indent = Regexp.quote($&)
  ret.push($')

  while line = src.shift
    if /^(\s*)$/ =~ line
      whiteline_buf.push(line)
    elsif /^#{indent}/ =~ line
      unless whiteline_buf.empty?
        ret.concat(whiteline_buf)
        whiteline_buf.clear
      end
      ret.push($')
    else
      raise "[BUG]: probably Parser Error while cutting off.\n"
    end
  end
  ret
end
private :cut_off

def set_term_to_element(parent, term)
#  parent.set_term_under_document_struct(term, @tree.document_struct)
  parent.set_term_without_document_struct(term)
end
private :set_term_to_element

##
# Raises a ParseError when invalid formatting is found

def on_error(et, ev, _values)
  prv, cur, nxt = format_line_num(@i, @i+1, @i+2)

  raise ParseError, <<Msg

RD syntax error: line #{@i+1}:
  #{prv}  |#{@src[@i-1].chomp}
  #{cur}=>|#{@src[@i].chomp}
  #{nxt}  |#{@src[@i+1].chomp}

Msg
end

##
# Current line number

def line_index
  @i
end

##
# Parses subtree +src+

def parse_subtree src
  @subparser ||= RDoc::RD::BlockParser.new

  @subparser.parse src
end
private :parse_subtree

##
# Retrieves the content for +file+ from the include_path

def get_included(file)
  included = []

  @include_path.each do |dir|
    file_name = File.join dir, file

    if File.exist? file_name then
      included = File.readlines file_name
      break
    end
  end

  included
end
private :get_included

##
# Formats line numbers +line_numbers+ prettily

def format_line_num(*line_numbers)
  width = line_numbers.collect{|i| i.to_s.length }.max
  line_numbers.collect{|i| sprintf("%#{width}d", i) }
end
private :format_line_num

##
# Retrieves the content of +values+ as a single String

def content values
 values.map { |value| value.content }.join
end

##
# Creates a paragraph for +value+

def paragraph value
  content = cut_off(value).join(' ').rstrip
  contents = @inline_parser.parse content

  RDoc::Markup::Paragraph.new(*contents)
end

##
# Adds footnote +content+ to the document

def add_footnote content
  index = @footnotes.length / 2 + 1

  footmark_link = "{^#{index}}[rdoc-label:footmark-#{index}:foottext-#{index}]"

  @footnotes << RDoc::Markup::Paragraph.new(footmark_link, ' ', *content)
  @footnotes << RDoc::Markup::BlankLine.new

  index
end

##
# Adds label +label+ to the document

def add_label label
  @labels[label] = true

  label
end

# :stopdoc:

##### State transition tables begin ###

racc_action_table = [
    34,    35,    30,    33,    40,    34,    35,    30,    33,    40,
    65,    34,    35,    30,    33,    14,    73,    36,    38,    34,
    15,    88,    34,    35,    30,    33,    14,     9,    10,    11,
    12,    15,    34,    35,    30,    33,    14,     9,    10,    11,
    12,    15,    34,    35,    30,    33,    35,    47,    30,    54,
    33,    15,    34,    35,    30,    33,    54,    47,    14,    14,
    59,    15,    34,    35,    30,    33,    14,    73,    67,    76,
    77,    15,    34,    35,    30,    33,    14,    73,    54,    81,
    38,    15,    34,    35,    30,    33,    14,    73,    38,    40,
    83,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,    61,    63,
   nil,    15,    14,    62,    60,    61,    63,    79,    61,    63,
    62,    87,   nil,    62,    34,    35,    30,    33 ]

racc_action_check = [
    41,    41,    41,    41,    41,    15,    15,    15,    15,    15,
    41,    86,    86,    86,    86,    86,    86,     1,    13,    22,
    86,    86,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,    24,    24,    24,    24,    25,    24,    28,    30,
    31,    24,    27,    27,    27,    27,    33,    27,    34,    35,
    36,    27,    45,    45,    45,    45,    45,    45,    44,    49,
    51,    45,    46,    46,    46,    46,    46,    46,    54,    56,
    57,    46,    47,    47,    47,    47,    47,    47,    58,    62,
    66,    47,    68,    68,    68,    68,    68,    68,   nil,   nil,
   nil,    68,    74,    74,    74,    74,    74,    74,   nil,   nil,
   nil,    74,    75,    75,    75,    75,    75,    75,   nil,   nil,
   nil,    75,    78,    78,    78,    78,    78,    78,   nil,   nil,
   nil,    78,    79,    79,    79,    79,    79,    79,   nil,   nil,
   nil,    79,    85,    85,    85,    85,    85,    85,    39,    39,
   nil,    85,    52,    39,    39,    82,    82,    52,    64,    64,
    82,    82,   nil,    64,    20,    20,    20,    20 ]

racc_action_pointer = [
    19,    17,    29,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,    11,   nil,     2,   nil,   nil,   nil,   nil,
   161,   nil,    16,   nil,    39,    42,   nil,    49,    43,   nil,
    41,    44,   nil,    48,    51,    52,    60,   nil,   nil,   141,
   nil,    -3,   nil,   nil,    55,    59,    69,    79,   nil,    56,
   nil,    57,   145,   nil,    70,   nil,    66,    73,    81,   nil,
   nil,   nil,    82,   nil,   151,   nil,    77,   nil,    89,   nil,
   nil,   nil,   nil,   nil,    99,   109,   nil,   nil,   119,   129,
   nil,   nil,   148,   nil,   nil,   139,     8,   nil,   nil ]

racc_action_default = [
    -2,   -73,    -1,    -4,    -5,    -6,    -7,    -8,    -9,   -10,
   -11,   -12,   -13,   -14,   -16,   -73,   -23,   -24,   -25,   -26,
   -27,   -31,   -32,   -34,   -72,   -36,   -38,   -72,   -40,   -42,
   -59,   -44,   -46,   -59,   -63,   -65,   -73,    -3,   -15,   -73,
   -22,   -73,   -30,   -33,   -73,   -69,   -70,   -71,   -37,   -73,
   -41,   -73,   -51,   -58,   -61,   -45,   -73,   -62,   -64,    89,
   -17,   -19,   -73,   -21,   -18,   -28,   -73,   -35,   -66,   -53,
   -54,   -55,   -56,   -57,   -67,   -68,   -39,   -43,   -49,   -73,
   -60,   -47,   -73,   -29,   -52,   -48,   -73,   -20,   -50 ]

racc_goto_table = [
     4,    39,     4,    68,    74,    75,     5,     6,     5,     6,
    44,    42,    51,    49,     3,    56,    37,    57,    58,     1,
     2,    66,    84,    41,    43,    48,    50,    64,    84,    84,
    45,    46,    42,    45,    46,    55,    85,    86,    80,    84,
    84,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    82,   nil,
   nil,   nil,    78 ]

racc_goto_check = [
     4,    10,     4,    31,    31,    31,     5,     6,     5,     6,
    21,    12,    27,    21,     3,    27,     3,     9,     9,     1,
     2,    11,    32,    17,    19,    23,    26,    10,    32,    32,
     5,     6,    12,     5,     6,    29,    31,    31,    33,    32,
    32,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    10,   nil,
   nil,   nil,     4 ]

racc_goto_pointer = [
   nil,    19,    20,    14,     0,     6,     7,   nil,   nil,   -17,
   -14,   -20,    -9,   nil,   nil,   nil,   nil,     8,   nil,     2,
   nil,   -14,   nil,     0,   nil,   nil,    -2,   -18,   nil,     4,
   nil,   -42,   -46,   -16 ]

racc_goto_default = [
   nil,   nil,   nil,   nil,    70,    71,    72,     7,     8,    13,
   nil,   nil,    21,    16,    17,    18,    19,    20,    22,    23,
    24,   nil,    25,    26,    27,    28,    29,   nil,    31,    32,
    52,   nil,    69,    53 ]

racc_reduce_table = [
  0, 0, :racc_error,
  1, 15, :_reduce_1,
  0, 15, :_reduce_2,
  2, 16, :_reduce_3,
  1, 16, :_reduce_4,
  1, 17, :_reduce_5,
  1, 17, :_reduce_6,
  1, 17, :_reduce_none,
  1, 17, :_reduce_8,
  1, 17, :_reduce_9,
  1, 17, :_reduce_10,
  1, 17, :_reduce_11,
  1, 21, :_reduce_12,
  1, 22, :_reduce_13,
  1, 18, :_reduce_14,
  2, 23, :_reduce_15,
  1, 23, :_reduce_16,
  3, 19, :_reduce_17,
  1, 25, :_reduce_18,
  2, 24, :_reduce_19,
  4, 24, :_reduce_20,
  2, 24, :_reduce_21,
  1, 24, :_reduce_22,
  1, 26, :_reduce_none,
  1, 26, :_reduce_none,
  1, 26, :_reduce_none,
  1, 26, :_reduce_none,
  1, 20, :_reduce_27,
  3, 20, :_reduce_28,
  4, 20, :_reduce_29,
  2, 31, :_reduce_30,
  1, 31, :_reduce_31,
  1, 27, :_reduce_32,
  2, 32, :_reduce_33,
  1, 32, :_reduce_34,
  3, 33, :_reduce_35,
  1, 28, :_reduce_36,
  2, 36, :_reduce_37,
  1, 36, :_reduce_38,
  3, 37, :_reduce_39,
  1, 29, :_reduce_40,
  2, 39, :_reduce_41,
  1, 39, :_reduce_42,
  3, 40, :_reduce_43,
  1, 30, :_reduce_44,
  2, 42, :_reduce_45,
  1, 42, :_reduce_46,
  3, 43, :_reduce_47,
  3, 41, :_reduce_48,
  2, 41, :_reduce_49,
  4, 41, :_reduce_50,
  1, 41, :_reduce_51,
  2, 45, :_reduce_52,
  1, 45, :_reduce_none,
  1, 46, :_reduce_54,
  1, 46, :_reduce_55,
  1, 46, :_reduce_none,
  1, 46, :_reduce_57,
  1, 44, :_reduce_none,
  0, 44, :_reduce_none,
  2, 47, :_reduce_none,
  1, 47, :_reduce_none,
  2, 34, :_reduce_62,
  1, 34, :_reduce_63,
  2, 38, :_reduce_64,
  1, 38, :_reduce_65,
  2, 35, :_reduce_66,
  2, 35, :_reduce_67,
  2, 35, :_reduce_68,
  1, 35, :_reduce_69,
  1, 35, :_reduce_none,
  1, 35, :_reduce_71,
  0, 35, :_reduce_72 ]

racc_reduce_n = 73

racc_shift_n = 89

racc_token_table = {
  false => 0,
  :error => 1,
  :DUMMY => 2,
  :ITEMLISTLINE => 3,
  :ENUMLISTLINE => 4,
  :DESCLISTLINE => 5,
  :METHODLISTLINE => 6,
  :STRINGLINE => 7,
  :WHITELINE => 8,
  :SUBTREE => 9,
  :HEADLINE => 10,
  :INCLUDE => 11,
  :INDENT => 12,
  :DEDENT => 13 }

racc_nt_base = 14

racc_use_result_var = true

Racc_arg = [
  racc_action_table,
  racc_action_check,
  racc_action_default,
  racc_action_pointer,
  racc_goto_table,
  racc_goto_check,
  racc_goto_default,
  racc_goto_pointer,
  racc_nt_base,
  racc_reduce_table,
  racc_token_table,
  racc_shift_n,
  racc_reduce_n,
  racc_use_result_var ]
Ractor.make_shareable(Racc_arg) if defined?(Ractor)

Racc_token_to_s_table = [
  "$end",
  "error",
  "DUMMY",
  "ITEMLISTLINE",
  "ENUMLISTLINE",
  "DESCLISTLINE",
  "METHODLISTLINE",
  "STRINGLINE",
  "WHITELINE",
  "SUBTREE",
  "HEADLINE",
  "INCLUDE",
  "INDENT",
  "DEDENT",
  "$start",
  "document",
  "blocks",
  "block",
  "textblock",
  "verbatim",
  "lists",
  "headline",
  "include",
  "textblockcontent",
  "verbatimcontent",
  "verbatim_after_lists",
  "list",
  "itemlist",
  "enumlist",
  "desclist",
  "methodlist",
  "lists2",
  "itemlistitems",
  "itemlistitem",
  "first_textblock_in_itemlist",
  "other_blocks_in_list",
  "enumlistitems",
  "enumlistitem",
  "first_textblock_in_enumlist",
  "desclistitems",
  "desclistitem",
  "description_part",
  "methodlistitems",
  "methodlistitem",
  "whitelines",
  "blocks_in_list",
  "block_in_list",
  "whitelines2" ]
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)

Racc_debug_parser = false

##### State transition tables end #####

# reduce 0 omitted

def _reduce_1(val, _values, result)
 result = RDoc::Markup::Document.new(*val[0])
    result
end

def _reduce_2(val, _values, result)
 raise ParseError, "file empty"
    result
end

def _reduce_3(val, _values, result)
 result = val[0].concat val[1]
    result
end

def _reduce_4(val, _values, result)
 result = val[0]
    result
end

def _reduce_5(val, _values, result)
 result = val
    result
end

def _reduce_6(val, _values, result)
 result = val
    result
end

# reduce 7 omitted

def _reduce_8(val, _values, result)
 result = val
    result
end

def _reduce_9(val, _values, result)
 result = val
    result
end

def _reduce_10(val, _values, result)
 result = [RDoc::Markup::BlankLine.new]
    result
end

def _reduce_11(val, _values, result)
 result = val[0].parts
    result
end

def _reduce_12(val, _values, result)
      # val[0] is like [level, title]
      title = @inline_parser.parse(val[0][1])
      result = RDoc::Markup::Heading.new(val[0][0], title)

    result
end

def _reduce_13(val, _values, result)
      result = RDoc::Markup::Include.new val[0], @include_path

    result
end

def _reduce_14(val, _values, result)
      # val[0] is Array of String
      result = paragraph val[0]

    result
end

def _reduce_15(val, _values, result)
 result << val[1].rstrip
    result
end

def _reduce_16(val, _values, result)
 result = [val[0].rstrip]
    result
end

def _reduce_17(val, _values, result)
      # val[1] is Array of String
      content = cut_off val[1]
      result = RDoc::Markup::Verbatim.new(*content)

      # imform to lexer.
      @in_verbatim = false

    result
end

def _reduce_18(val, _values, result)
      # val[0] is Array of String
      content = cut_off val[0]
      result = RDoc::Markup::Verbatim.new(*content)

      # imform to lexer.
      @in_verbatim = false

    result
end

def _reduce_19(val, _values, result)
      result << val[1]

    result
end

def _reduce_20(val, _values, result)
      result.concat val[2]

    result
end

def _reduce_21(val, _values, result)
      result << "\n"

    result
end

def _reduce_22(val, _values, result)
      result = val
      # inform to lexer.
      @in_verbatim = true

    result
end

# reduce 23 omitted

# reduce 24 omitted

# reduce 25 omitted

# reduce 26 omitted

def _reduce_27(val, _values, result)
      result = val[0]

    result
end

def _reduce_28(val, _values, result)
      result = val[1]

    result
end

def _reduce_29(val, _values, result)
      result = val[1].push(val[2])

    result
end

def _reduce_30(val, _values, result)
 result = val[0] << val[1]
    result
end

def _reduce_31(val, _values, result)
 result = [val[0]]
    result
end

def _reduce_32(val, _values, result)
      result = RDoc::Markup::List.new :BULLET, *val[0]

    result
end

def _reduce_33(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_34(val, _values, result)
 result = val
    result
end

def _reduce_35(val, _values, result)
      result = RDoc::Markup::ListItem.new nil, val[0], *val[1]

    result
end

def _reduce_36(val, _values, result)
      result = RDoc::Markup::List.new :NUMBER, *val[0]

    result
end

def _reduce_37(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_38(val, _values, result)
 result = val
    result
end

def _reduce_39(val, _values, result)
      result = RDoc::Markup::ListItem.new nil, val[0], *val[1]

    result
end

def _reduce_40(val, _values, result)
      result = RDoc::Markup::List.new :NOTE, *val[0]

    result
end

def _reduce_41(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_42(val, _values, result)
 result = val
    result
end

def _reduce_43(val, _values, result)
      term = @inline_parser.parse val[0].strip

      result = RDoc::Markup::ListItem.new term, *val[1]

    result
end

def _reduce_44(val, _values, result)
      result = RDoc::Markup::List.new :LABEL, *val[0]

    result
end

def _reduce_45(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_46(val, _values, result)
 result = val
    result
end

def _reduce_47(val, _values, result)
      result = RDoc::Markup::ListItem.new "<tt>#{val[0].strip}</tt>", *val[1]

    result
end

def _reduce_48(val, _values, result)
      result = [val[1]].concat(val[2])

    result
end

def _reduce_49(val, _values, result)
      result = [val[1]]

    result
end

def _reduce_50(val, _values, result)
      result = val[2]

    result
end

def _reduce_51(val, _values, result)
      result = []

    result
end

def _reduce_52(val, _values, result)
 result.concat val[1]
    result
end

# reduce 53 omitted

def _reduce_54(val, _values, result)
 result = val
    result
end

def _reduce_55(val, _values, result)
 result = val
    result
end

# reduce 56 omitted

def _reduce_57(val, _values, result)
 result = []
    result
end

# reduce 58 omitted

# reduce 59 omitted

# reduce 60 omitted

# reduce 61 omitted

def _reduce_62(val, _values, result)
      result = paragraph [val[0]].concat(val[1])

    result
end

def _reduce_63(val, _values, result)
      result = paragraph [val[0]]

    result
end

def _reduce_64(val, _values, result)
      result = paragraph [val[0]].concat(val[1])

    result
end

def _reduce_65(val, _values, result)
      result = paragraph [val[0]]

    result
end

def _reduce_66(val, _values, result)
      result = [val[0]].concat(val[1])

    result
end

def _reduce_67(val, _values, result)
 result.concat val[1]
    result
end

def _reduce_68(val, _values, result)
 result = val[1]
    result
end

def _reduce_69(val, _values, result)
 result = val
    result
end

# reduce 70 omitted

def _reduce_71(val, _values, result)
 result = []
    result
end

def _reduce_72(val, _values, result)
 result = []
    result
end

def _reduce_none(val, _values, result)
  val[0]
end

end   # class BlockParser

end
PK)J[$翫��1share/gems/gems/rdoc-6.10.0/lib/rdoc/rd/inline.rbnu�[���# frozen_string_literal: true
##
# Inline keeps track of markup and labels to create proper links.

class RDoc::RD::Inline

  ##
  # The text of the reference

  attr_reader :reference

  ##
  # The markup of this reference in RDoc format

  attr_reader :rdoc

  ##
  # Creates a new Inline for +rdoc+ and +reference+.
  #
  # +rdoc+ may be another Inline or a String.  If +reference+ is not given it
  # will use the text from +rdoc+.

  def self.new rdoc, reference = rdoc
    if self === rdoc and reference.equal? rdoc then
      rdoc
    else
      super
    end
  end

  ##
  # Initializes the Inline with +rdoc+ and +inline+

  def initialize rdoc, reference # :not-new:
    @reference = reference.equal?(rdoc) ? reference.dup : reference

    # unpack
    @reference = @reference.reference if self.class === @reference
    @rdoc      = rdoc
  end

  def == other # :nodoc:
    self.class === other and
      @reference == other.reference and @rdoc == other.rdoc
  end

  ##
  # Appends +more+ to this inline.  +more+ may be a String or another Inline.

  def append more
    case more
    when String then
      @reference += more
      @rdoc      += more
    when RDoc::RD::Inline then
      @reference += more.reference
      @rdoc      += more.rdoc
    else
      raise "unknown thingy #{more}"
    end

    self
  end

  def inspect # :nodoc:
    "(inline: #{self})"
  end

  alias to_s rdoc # :nodoc:

end
PK)J[`�1�%�%3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object.rbnu�[���# frozen_string_literal: true
##
# Base class for the RDoc code tree.
#
# We contain the common stuff for contexts (which are containers) and other
# elements (methods, attributes and so on)
#
# Here's the tree of the CodeObject subclasses:
#
# * RDoc::Context
#   * RDoc::TopLevel
#   * RDoc::ClassModule
#     * RDoc::AnonClass (never used so far)
#     * RDoc::NormalClass
#     * RDoc::NormalModule
#     * RDoc::SingleClass
# * RDoc::MethodAttr
#   * RDoc::Attr
#   * RDoc::AnyMethod
#     * RDoc::GhostMethod
#     * RDoc::MetaMethod
# * RDoc::Alias
# * RDoc::Constant
# * RDoc::Mixin
#   * RDoc::Require
#   * RDoc::Include

class RDoc::CodeObject

  include RDoc::Text

  ##
  # Our comment

  attr_reader :comment

  ##
  # Do we document our children?

  attr_reader :document_children

  ##
  # Do we document ourselves?

  attr_reader :document_self

  ##
  # Are we done documenting (ie, did we come across a :enddoc:)?

  attr_reader :done_documenting

  ##
  # Which file this code object was defined in

  attr_reader :file

  ##
  # Force documentation of this CodeObject

  attr_reader :force_documentation

  ##
  # Line in #file where this CodeObject was defined

  attr_accessor :line

  ##
  # Hash of arbitrary metadata for this CodeObject

  attr_reader :metadata

  ##
  # Sets the parent CodeObject

  attr_writer :parent

  ##
  # Did we ever receive a +:nodoc:+ directive?

  attr_reader :received_nodoc

  ##
  # Set the section this CodeObject is in

  attr_writer :section

  ##
  # The RDoc::Store for this object.

  attr_reader :store

  ##
  # We are the model of the code, but we know that at some point we will be
  # worked on by viewers. By implementing the Viewable protocol, viewers can
  # associated themselves with these objects.

  attr_accessor :viewer

  ##
  # When mixed-in to a class, this points to the Context in which it was originally defined.

  attr_accessor :mixin_from

  ##
  # Creates a new CodeObject that will document itself and its children

  def initialize
    @metadata         = {}
    @comment          = ''
    @parent           = nil
    @parent_name      = nil # for loading
    @parent_class     = nil # for loading
    @section          = nil
    @section_title    = nil # for loading
    @file             = nil
    @full_name        = nil
    @store            = nil
    @track_visibility = true
    @mixin_from       = nil

    initialize_visibility
  end

  ##
  # Initializes state for visibility of this CodeObject and its children.

  def initialize_visibility # :nodoc:
    @document_children   = true
    @document_self       = true
    @done_documenting    = false
    @force_documentation = false
    @received_nodoc      = false
    @ignored             = false
    @suppressed          = false
    @track_visibility    = true
  end

  ##
  # Replaces our comment with +comment+, unless it is empty.

  def comment=(comment)
    @comment = case comment
               when NilClass               then ''
               when RDoc::Markup::Document then comment
               when RDoc::Comment          then comment.normalize
               else
                 if comment and not comment.empty? then
                   normalize_comment comment
                 else
                   # HACK correct fix is to have #initialize create @comment
                   #      with the correct encoding
                   if String === @comment and @comment.empty? then
                     @comment = RDoc::Encoding.change_encoding @comment, comment.encoding
                   end
                   @comment
                 end
               end
  end

  ##
  # Should this CodeObject be displayed in output?
  #
  # A code object should be displayed if:
  #
  # * The item didn't have a nodoc or wasn't in a container that had nodoc
  # * The item wasn't ignored
  # * The item has documentation and was not suppressed

  def display?
    @document_self and not @ignored and
      (documented? or not @suppressed)
  end

  ##
  # Enables or disables documentation of this CodeObject's children unless it
  # has been turned off by :enddoc:

  def document_children=(document_children)
    return unless @track_visibility

    @document_children = document_children unless @done_documenting
  end

  ##
  # Enables or disables documentation of this CodeObject unless it has been
  # turned off by :enddoc:.  If the argument is +nil+ it means the
  # documentation is turned off by +:nodoc:+.

  def document_self=(document_self)
    return unless @track_visibility
    return if @done_documenting

    @document_self = document_self
    @received_nodoc = true if document_self.nil?
  end

  ##
  # Does this object have a comment with content or is #received_nodoc true?

  def documented?
    @received_nodoc or !@comment.empty?
  end

  ##
  # Turns documentation on/off, and turns on/off #document_self
  # and #document_children.
  #
  # Once documentation has been turned off (by +:enddoc:+),
  # the object will refuse to turn #document_self or
  # #document_children on, so +:doc:+ and +:start_doc:+ directives
  # will have no effect in the current file.

  def done_documenting=(value)
    return unless @track_visibility
    @done_documenting  = value
    @document_self     = !value
    @document_children = @document_self
  end

  ##
  # Yields each parent of this CodeObject.  See also
  # RDoc::ClassModule#each_ancestor

  def each_parent
    code_object = self

    while code_object = code_object.parent do
      yield code_object
    end

    self
  end

  ##
  # File name where this CodeObject was found.
  #
  # See also RDoc::Context#in_files

  def file_name
    return unless @file

    @file.absolute_name
  end

  ##
  # Force the documentation of this object unless documentation
  # has been turned off by :enddoc:
  #--
  # HACK untested, was assigning to an ivar

  def force_documentation=(value)
    @force_documentation = value unless @done_documenting
  end

  ##
  # Sets the full_name overriding any computed full name.
  #
  # Set to +nil+ to clear RDoc's cached value

  def full_name= full_name
    @full_name = full_name
  end

  ##
  # Use this to ignore a CodeObject and all its children until found again
  # (#record_location is called).  An ignored item will not be displayed in
  # documentation.
  #
  # See github issue #55
  #
  # The ignored status is temporary in order to allow implementation details
  # to be hidden.  At the end of processing a file RDoc allows all classes
  # and modules to add new documentation to previously created classes.
  #
  # If a class was ignored (via stopdoc) then reopened later with additional
  # documentation it should be displayed.  If a class was ignored and never
  # reopened it should not be displayed.  The ignore flag allows this to
  # occur.

  def ignore
    return unless @track_visibility

    @ignored = true

    stop_doc
  end

  ##
  # Has this class been ignored?
  #
  # See also #ignore

  def ignored?
    @ignored
  end

  ##
  # The options instance from the store this CodeObject is attached to, or a
  # default options instance if the CodeObject is not attached.
  #
  # This is used by Text#snippet

  def options
    if @store and @store.rdoc then
      @store.rdoc.options
    else
      RDoc::Options.new
    end
  end

  ##
  # Our parent CodeObject.  The parent may be missing for classes loaded from
  # legacy RI data stores.

  def parent
    return @parent if @parent
    return nil unless @parent_name

    if @parent_class == RDoc::TopLevel then
      @parent = @store.add_file @parent_name
    else
      @parent = @store.find_class_or_module @parent_name

      return @parent if @parent

      begin
        @parent = @store.load_class @parent_name
      rescue RDoc::Store::MissingFileError
        nil
      end
    end
  end

  ##
  # File name of our parent

  def parent_file_name
    @parent ? @parent.base_name : '(unknown)'
  end

  ##
  # Name of our parent

  def parent_name
    @parent ? @parent.full_name : '(unknown)'
  end

  ##
  # Records the RDoc::TopLevel (file) where this code object was defined

  def record_location top_level
    @ignored    = false
    @suppressed = false
    @file       = top_level
  end

  ##
  # The section this CodeObject is in.  Sections allow grouping of constants,
  # attributes and methods inside a class or module.

  def section
    return @section if @section

    @section = parent.add_section @section_title if parent
  end

  ##
  # Enable capture of documentation unless documentation has been
  # turned off by :enddoc:

  def start_doc
    return if @done_documenting

    @document_self = true
    @document_children = true
    @ignored    = false
    @suppressed = false
  end

  ##
  # Disable capture of documentation

  def stop_doc
    return unless @track_visibility

    @document_self = false
    @document_children = false
  end

  ##
  # Sets the +store+ that contains this CodeObject

  def store= store
    @store = store

    return unless @track_visibility

    if :nodoc == options.visibility then
      initialize_visibility
      @track_visibility = false
    end
  end

  ##
  # Use this to suppress a CodeObject and all its children until the next file
  # it is seen in or documentation is discovered.  A suppressed item with
  # documentation will be displayed while an ignored item with documentation
  # may not be displayed.

  def suppress
    return unless @track_visibility

    @suppressed = true

    stop_doc
  end

  ##
  # Has this class been suppressed?
  #
  # See also #suppress

  def suppressed?
    @suppressed
  end

end
PK)J[�'�vv*share/gems/gems/rdoc-6.10.0/lib/rdoc/ri.rbnu�[���# frozen_string_literal: true
require_relative '../rdoc'

##
# Namespace for the ri command line tool's implementation.
#
# See <tt>ri --help</tt> for details.

module RDoc::RI

  ##
  # Base RI error class

  class Error < RDoc::Error; end

  autoload :Driver, "#{__dir__}/ri/driver"
  autoload :Paths,  "#{__dir__}/ri/paths"
  autoload :Store,  "#{__dir__}/ri/store"

end
PK)J['ខUU-share/gems/gems/rdoc-6.10.0/lib/rdoc/erbio.rbnu�[���# frozen_string_literal: true
require 'erb'

##
# A subclass of ERB that writes directly to an IO.  Credit to Aaron Patterson
# and Masatoshi SEKI.
#
# To use:
#
#   erbio = RDoc::ERBIO.new '<%= "hello world" %>', nil, nil
#
#   File.open 'hello.txt', 'w' do |io|
#     erbio.result binding
#   end
#
# Note that binding must enclose the io you wish to output on.

class RDoc::ERBIO < ERB

  ##
  # Defaults +eoutvar+ to 'io', otherwise is identical to ERB's initialize

  def initialize str, trim_mode: nil, eoutvar: 'io'
    super(str, trim_mode: trim_mode, eoutvar: eoutvar)
  end

  ##
  # Instructs +compiler+ how to write to +io_variable+

  def set_eoutvar compiler, io_variable
    compiler.put_cmd    = "#{io_variable}.write"
    compiler.insert_cmd = "#{io_variable}.write"
    compiler.pre_cmd    = []
    compiler.post_cmd   = []
  end

end
PK)J[ѓ#R�)�)-share/gems/gems/rdoc-6.10.0/lib/rdoc/stats.rbnu�[���# frozen_string_literal: true
##
# RDoc statistics collector which prints a summary and report of a project's
# documentation totals.

class RDoc::Stats

  include RDoc::Text

  ##
  # Output level for the coverage report

  attr_reader :coverage_level

  ##
  # Count of files parsed during parsing

  attr_reader :files_so_far

  ##
  # Total number of files found

  attr_reader :num_files

  ##
  # Creates a new Stats that will have +num_files+.  +verbosity+ defaults to 1
  # which will create an RDoc::Stats::Normal outputter.

  def initialize store, num_files, verbosity = 1
    @num_files = num_files
    @store     = store

    @coverage_level   = 0
    @doc_items        = nil
    @files_so_far     = 0
    @fully_documented = false
    @num_params       = 0
    @percent_doc      = nil
    @start            = Time.now
    @undoc_params     = 0

    @display = case verbosity
               when 0 then Quiet.new   num_files
               when 1 then Normal.new  num_files
               else        Verbose.new num_files
               end
  end

  ##
  # Records the parsing of an alias +as+.

  def add_alias as
    @display.print_alias as
  end

  ##
  # Records the parsing of an attribute +attribute+

  def add_attribute attribute
    @display.print_attribute attribute
  end

  ##
  # Records the parsing of a class +klass+

  def add_class klass
    @display.print_class klass
  end

  ##
  # Records the parsing of +constant+

  def add_constant constant
    @display.print_constant constant
  end

  ##
  # Records the parsing of +file+

  def add_file(file)
    @files_so_far += 1
    @display.print_file @files_so_far, file
  end

  ##
  # Records the parsing of +method+

  def add_method(method)
    @display.print_method method
  end

  ##
  # Records the parsing of a module +mod+

  def add_module(mod)
    @display.print_module mod
  end

  ##
  # Call this to mark the beginning of parsing for display purposes

  def begin_adding
    @display.begin_adding
  end

  ##
  # Calculates documentation totals and percentages for classes, modules,
  # constants, attributes and methods.

  def calculate
    return if @doc_items

    ucm = @store.unique_classes_and_modules

    classes = @store.unique_classes.reject { |cm| cm.full_name == 'Object' }

    constants = []
    ucm.each { |cm| constants.concat cm.constants }

    methods = []
    ucm.each { |cm| methods.concat cm.method_list }

    attributes = []
    ucm.each { |cm| attributes.concat cm.attributes }

    @num_attributes, @undoc_attributes = doc_stats attributes
    @num_classes,    @undoc_classes    = doc_stats classes
    @num_constants,  @undoc_constants  = doc_stats constants
    @num_methods,    @undoc_methods    = doc_stats methods
    @num_modules,    @undoc_modules    = doc_stats @store.unique_modules

    @num_items =
      @num_attributes +
      @num_classes +
      @num_constants +
      @num_methods +
      @num_modules +
      @num_params

    @undoc_items =
      @undoc_attributes +
      @undoc_classes +
      @undoc_constants +
      @undoc_methods +
      @undoc_modules +
      @undoc_params

    @doc_items = @num_items - @undoc_items
  end

  ##
  # Sets coverage report level.  Accepted values are:
  #
  # false or nil:: No report
  # 0:: Classes, modules, constants, attributes, methods
  # 1:: Level 0 + method parameters

  def coverage_level= level
    level = -1 unless level

    @coverage_level = level
  end

  ##
  # Returns the length and number of undocumented items in +collection+.

  def doc_stats collection
    visible = collection.select { |item| item.display? }
    [visible.length, visible.count { |item| not item.documented? }]
  end

  ##
  # Call this to mark the end of parsing for display purposes

  def done_adding
    @display.done_adding
  end

  ##
  # The documentation status of this project.  +true+ when 100%, +false+ when
  # less than 100% and +nil+ when unknown.
  #
  # Set by calling #calculate

  def fully_documented?
    @fully_documented
  end

  ##
  # A report that says you did a great job!

  def great_job
    report = RDoc::Markup::Document.new

    report << RDoc::Markup::Paragraph.new('100% documentation!')
    report << RDoc::Markup::Paragraph.new('Great Job!')

    report
  end

  ##
  # Calculates the percentage of items documented.

  def percent_doc
    return @percent_doc if @percent_doc

    @fully_documented = (@num_items - @doc_items) == 0

    @percent_doc = @doc_items.to_f / @num_items * 100 if @num_items.nonzero?
    @percent_doc ||= 0

    @percent_doc
  end

  ##
  # Returns a report on which items are not documented

  def report
    if @coverage_level > 0 then
      extend RDoc::Text
    end

    if @coverage_level.zero? then
      calculate

      return great_job if @num_items == @doc_items
    end

    ucm = @store.unique_classes_and_modules

    report = RDoc::Markup::Document.new
    report << RDoc::Markup::Paragraph.new('The following items are not documented:')
    report << RDoc::Markup::BlankLine.new

    ucm.sort.each do |cm|
      body = report_class_module(cm) {
        [
          report_constants(cm),
          report_attributes(cm),
          report_methods(cm),
        ].compact
      }

      report << body if body
    end

    if @coverage_level > 0 then
      calculate

      return great_job if @num_items == @doc_items
    end

    report
  end

  ##
  # Returns a report on undocumented attributes in ClassModule +cm+

  def report_attributes cm
    return if cm.attributes.empty?

    report = []

    cm.each_attribute do |attr|
      next if attr.documented?
      line = attr.line ? ":#{attr.line}" : nil
      report << "  #{attr.definition} :#{attr.name} # in file #{attr.file.full_name}#{line}\n"
      report << "\n"
    end

    report
  end

  ##
  # Returns a report on undocumented items in ClassModule +cm+

  def report_class_module cm
    return if cm.fully_documented? and @coverage_level.zero?
    return unless cm.display?

    report = RDoc::Markup::Document.new

    if cm.in_files.empty? then
      report << RDoc::Markup::Paragraph.new("#{cm.definition} is referenced but empty.")
      report << RDoc::Markup::Paragraph.new("It probably came from another project.  I'm sorry I'm holding it against you.")

      return report
    elsif cm.documented? then
      documented = true
      klass = RDoc::Markup::Verbatim.new("#{cm.definition} # is documented\n")
    else
      report << RDoc::Markup::Paragraph.new('In files:')

      list = RDoc::Markup::List.new :BULLET

      cm.in_files.each do |file|
        para = RDoc::Markup::Paragraph.new file.full_name
        list << RDoc::Markup::ListItem.new(nil, para)
      end

      report << list
      report << RDoc::Markup::BlankLine.new

      klass = RDoc::Markup::Verbatim.new("#{cm.definition}\n")
    end

    klass << "\n"

    body = yield.flatten # HACK remove #flatten

    if body.empty? then
      return if documented

      klass.parts.pop
    else
      klass.parts.concat body
    end

    klass << "end\n"

    report << klass

    report
  end

  ##
  # Returns a report on undocumented constants in ClassModule +cm+

  def report_constants cm
    return if cm.constants.empty?

    report = []

    cm.each_constant do |constant|
      # TODO constant aliases are listed in the summary but not reported
      # figure out what to do here
      next if constant.documented? || constant.is_alias_for

      line = constant.line ? ":#{constant.line}" : line
      report << "  # in file #{constant.file.full_name}#{line}\n"
      report << "  #{constant.name} = nil\n"
      report << "\n"
    end

    report
  end

  ##
  # Returns a report on undocumented methods in ClassModule +cm+

  def report_methods cm
    return if cm.method_list.empty?

    report = []

    cm.each_method do |method|
      next if method.documented? and @coverage_level.zero?

      if @coverage_level > 0 then
        params, undoc = undoc_params method

        @num_params += params

        unless undoc.empty? then
          @undoc_params += undoc.length

          undoc = undoc.map do |param| "+#{param}+" end
          param_report = "  # #{undoc.join ', '} is not documented\n"
        end
      end

      next if method.documented? and not param_report

      line = method.line ? ":#{method.line}" : nil
      scope = method.singleton ? 'self.' : nil

      report << "  # in file #{method.file.full_name}#{line}\n"
      report << param_report if param_report
      report << "  def #{scope}#{method.name}#{method.params}; end\n"
      report << "\n"
    end

    report
  end

  ##
  # Returns a summary of the collected statistics.

  def summary
    calculate

    num_width = [@num_files, @num_items].max.to_s.length
    undoc_width = [
      @undoc_attributes,
      @undoc_classes,
      @undoc_constants,
      @undoc_items,
      @undoc_methods,
      @undoc_modules,
      @undoc_params,
    ].max.to_s.length

    report = RDoc::Markup::Verbatim.new

    report << "Files:      %*d\n" % [num_width, @num_files]

    report << "\n"

    report << "Classes:    %*d (%*d undocumented)\n" % [
      num_width, @num_classes, undoc_width, @undoc_classes]
    report << "Modules:    %*d (%*d undocumented)\n" % [
      num_width, @num_modules, undoc_width, @undoc_modules]
    report << "Constants:  %*d (%*d undocumented)\n" % [
      num_width, @num_constants, undoc_width, @undoc_constants]
    report << "Attributes: %*d (%*d undocumented)\n" % [
      num_width, @num_attributes, undoc_width, @undoc_attributes]
    report << "Methods:    %*d (%*d undocumented)\n" % [
      num_width, @num_methods, undoc_width, @undoc_methods]
    report << "Parameters: %*d (%*d undocumented)\n" % [
      num_width, @num_params, undoc_width, @undoc_params] if
        @coverage_level > 0

    report << "\n"

    report << "Total:      %*d (%*d undocumented)\n" % [
      num_width, @num_items, undoc_width, @undoc_items]

    report << "%6.2f%% documented\n" % percent_doc
    report << "\n"
    report << "Elapsed: %0.1fs\n" % (Time.now - @start)

    RDoc::Markup::Document.new report
  end

  ##
  # Determines which parameters in +method+ were not documented.  Returns a
  # total parameter count and an Array of undocumented methods.

  def undoc_params method
    @formatter ||= RDoc::Markup::ToTtOnly.new

    params = method.param_list

    params = params.map { |param| param.gsub(/^\*\*?/, '') }

    return 0, [] if params.empty?

    document = parse method.comment

    tts = document.accept @formatter

    undoc = params - tts

    [params.length, undoc]
  end

  autoload :Quiet,   "#{__dir__}/stats/quiet"
  autoload :Normal,  "#{__dir__}/stats/normal"
  autoload :Verbose, "#{__dir__}/stats/verbose"

end
PK)J[�z	^^.share/gems/gems/rdoc-6.10.0/lib/rdoc/markup.rbnu�[���# frozen_string_literal: true
##
# RDoc::Markup parses plain text documents and attempts to decompose them into
# their constituent parts.  Some of these parts are high-level: paragraphs,
# chunks of verbatim text, list entries and the like.  Other parts happen at
# the character level: a piece of bold text, a word in code font.  This markup
# is similar in spirit to that used on WikiWiki webs, where folks create web
# pages using a simple set of formatting rules.
#
# RDoc::Markup and other markup formats do no output formatting, this is
# handled by the RDoc::Markup::Formatter subclasses.
#
# = Markup Formats
#
# +RDoc+ supports these markup formats:
#
# - +rdoc+:
#   the +RDoc+ markup format;
#   see RDoc::MarkupReference.
# - +markdown+:
#   The +markdown+ markup format as described in
#   the {Markdown Guide}[https://www.markdownguide.org];
#   see RDoc::Markdown.
# - +rd+:
#   the +rd+ markup format format;
#   see RDoc::RD.
# - +tomdoc+:
#   the TomDoc format as described in
#   {TomDoc for Ruby}[http://tomdoc.org];
#   see RDoc::TomDoc.
#
# You can choose a markup format using the following methods:
#
# per project::
#   If you build your documentation with rake use RDoc::Task#markup.
#
#   If you build your documentation by hand run:
#
#      rdoc --markup your_favorite_format --write-options
#
#   and commit <tt>.rdoc_options</tt> and ship it with your packaged gem.
# per file::
#   At the top of the file use the <tt>:markup:</tt> directive to set the
#   default format for the rest of the file.
# per comment::
#   Use the <tt>:markup:</tt> directive at the top of a comment you want
#   to write in a different format.
#
# = RDoc::Markup
#
# RDoc::Markup is extensible at runtime: you can add \new markup elements to
# be recognized in the documents that RDoc::Markup parses.
#
# RDoc::Markup is intended to be the basis for a family of tools which share
# the common requirement that simple, plain-text should be rendered in a
# variety of different output formats and media.  It is envisaged that
# RDoc::Markup could be the basis for formatting RDoc style comment blocks,
# Wiki entries, and online FAQs.
#
# == Synopsis
#
# This code converts +input_string+ to HTML.  The conversion takes place in
# the +convert+ method, so you can use the same RDoc::Markup converter to
# convert multiple input strings.
#
#   require 'rdoc'
#
#   h = RDoc::Markup::ToHtml.new(RDoc::Options.new)
#
#   puts h.convert(input_string)
#
# You can extend the RDoc::Markup parser to recognize new markup
# sequences, and to add regexp handling. Here we make WikiWords significant to
# the parser, and also make the sequences {word} and \<no>text...</no> signify
# strike-through text.  We then subclass the HTML output class to deal
# with these:
#
#   require 'rdoc'
#
#   class WikiHtml < RDoc::Markup::ToHtml
#     def handle_regexp_WIKIWORD(target)
#       "<font color=red>" + target.text + "</font>"
#     end
#   end
#
#   markup = RDoc::Markup.new
#   markup.add_word_pair("{", "}", :STRIKE)
#   markup.add_html("no", :STRIKE)
#
#   markup.add_regexp_handling(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)
#
#   wh = WikiHtml.new RDoc::Options.new, markup
#   wh.add_tag(:STRIKE, "<strike>", "</strike>")
#
#   puts "<body>#{wh.convert ARGF.read}</body>"
#
# == Encoding
#
# Where Encoding support is available, RDoc will automatically convert all
# documents to the same output encoding.  The output encoding can be set via
# RDoc::Options#encoding and defaults to Encoding.default_external.
#
# = \RDoc Markup Reference
#
# See RDoc::MarkupReference.
#
#--
# Original Author:: Dave Thomas,  dave@pragmaticprogrammer.com
# License:: Ruby license

class RDoc::Markup

  ##
  # An AttributeManager which handles inline markup.

  attr_reader :attribute_manager

  ##
  # Parses +str+ into an RDoc::Markup::Document.

  def self.parse str
    RDoc::Markup::Parser.parse str
  rescue RDoc::Markup::Parser::Error => e
    $stderr.puts <<-EOF
While parsing markup, RDoc encountered a #{e.class}:

#{e}
\tfrom #{e.backtrace.join "\n\tfrom "}

---8<---
#{text}
---8<---

RDoc #{RDoc::VERSION}

Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} #{RUBY_RELEASE_DATE}

Please file a bug report with the above information at:

https://github.com/ruby/rdoc/issues

    EOF
    raise
  end

  ##
  # Take a block of text and use various heuristics to determine its
  # structure (paragraphs, lists, and so on).  Invoke an event handler as we
  # identify significant chunks.

  def initialize attribute_manager = nil
    @attribute_manager = attribute_manager || RDoc::Markup::AttributeManager.new
    @output = nil
  end

  ##
  # Add to the sequences used to add formatting to an individual word (such
  # as *bold*).  Matching entries will generate attributes that the output
  # formatters can recognize by their +name+.

  def add_word_pair(start, stop, name)
    @attribute_manager.add_word_pair(start, stop, name)
  end

  ##
  # Add to the sequences recognized as general markup.

  def add_html(tag, name)
    @attribute_manager.add_html(tag, name)
  end

  ##
  # Add to other inline sequences.  For example, we could add WikiWords using
  # something like:
  #
  #    parser.add_regexp_handling(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)
  #
  # Each wiki word will be presented to the output formatter.

  def add_regexp_handling(pattern, name)
    @attribute_manager.add_regexp_handling(pattern, name)
  end

  ##
  # We take +input+, parse it if necessary, then invoke the output +formatter+
  # using a Visitor to render the result.

  def convert input, formatter
    document = case input
               when RDoc::Markup::Document then
                 input
               else
                 RDoc::Markup::Parser.parse input
               end

    document.accept formatter
  end

  autoload :Parser,                "#{__dir__}/markup/parser"
  autoload :PreProcess,            "#{__dir__}/markup/pre_process"

  # Inline markup classes
  autoload :AttrChanger,           "#{__dir__}/markup/attr_changer"
  autoload :AttrSpan,              "#{__dir__}/markup/attr_span"
  autoload :Attributes,            "#{__dir__}/markup/attributes"
  autoload :AttributeManager,      "#{__dir__}/markup/attribute_manager"
  autoload :RegexpHandling,        "#{__dir__}/markup/regexp_handling"

  # RDoc::Markup AST
  autoload :BlankLine,             "#{__dir__}/markup/blank_line"
  autoload :BlockQuote,            "#{__dir__}/markup/block_quote"
  autoload :Document,              "#{__dir__}/markup/document"
  autoload :HardBreak,             "#{__dir__}/markup/hard_break"
  autoload :Heading,               "#{__dir__}/markup/heading"
  autoload :Include,               "#{__dir__}/markup/include"
  autoload :IndentedParagraph,     "#{__dir__}/markup/indented_paragraph"
  autoload :List,                  "#{__dir__}/markup/list"
  autoload :ListItem,              "#{__dir__}/markup/list_item"
  autoload :Paragraph,             "#{__dir__}/markup/paragraph"
  autoload :Table,                 "#{__dir__}/markup/table"
  autoload :Raw,                   "#{__dir__}/markup/raw"
  autoload :Rule,                  "#{__dir__}/markup/rule"
  autoload :Verbatim,              "#{__dir__}/markup/verbatim"

  # Formatters
  autoload :Formatter,             "#{__dir__}/markup/formatter"

  autoload :ToAnsi,                "#{__dir__}/markup/to_ansi"
  autoload :ToBs,                  "#{__dir__}/markup/to_bs"
  autoload :ToHtml,                "#{__dir__}/markup/to_html"
  autoload :ToHtmlCrossref,        "#{__dir__}/markup/to_html_crossref"
  autoload :ToHtmlSnippet,         "#{__dir__}/markup/to_html_snippet"
  autoload :ToLabel,               "#{__dir__}/markup/to_label"
  autoload :ToMarkdown,            "#{__dir__}/markup/to_markdown"
  autoload :ToRdoc,                "#{__dir__}/markup/to_rdoc"
  autoload :ToTableOfContents,     "#{__dir__}/markup/to_table_of_contents"
  autoload :ToTest,                "#{__dir__}/markup/to_test"
  autoload :ToTtOnly,              "#{__dir__}/markup/to_tt_only"

end
PK)J[]a��@@.share/gems/gems/rdoc-6.10.0/lib/rdoc/parser.rbnu�[���# -*- coding: us-ascii -*-
# frozen_string_literal: true

##
# A parser is simple a class that subclasses RDoc::Parser and implements #scan
# to fill in an RDoc::TopLevel with parsed data.
#
# The initialize method takes an RDoc::TopLevel to fill with parsed content,
# the name of the file to be parsed, the content of the file, an RDoc::Options
# object and an RDoc::Stats object to inform the user of parsed items.  The
# scan method is then called to parse the file and must return the
# RDoc::TopLevel object.  By calling super these items will be set for you.
#
# In order to be used by RDoc the parser needs to register the file extensions
# it can parse.  Use ::parse_files_matching to register extensions.
#
#   require 'rdoc'
#
#   class RDoc::Parser::Xyz < RDoc::Parser
#     parse_files_matching /\.xyz$/
#
#     def initialize top_level, file_name, content, options, stats
#       super
#
#       # extra initialization if needed
#     end
#
#     def scan
#       # parse file and fill in @top_level
#     end
#   end

class RDoc::Parser

  @parsers = []

  class << self

    ##
    # An Array of arrays that maps file extension (or name) regular
    # expressions to parser classes that will parse matching filenames.
    #
    # Use parse_files_matching to register a parser's file extensions.

    attr_reader :parsers

  end

  ##
  # The name of the file being parsed

  attr_reader :file_name

  ##
  # Alias an extension to another extension. After this call, files ending
  # "new_ext" will be parsed using the same parser as "old_ext"

  def self.alias_extension(old_ext, new_ext)
    old_ext = old_ext.sub(/^\.(.*)/, '\1')
    new_ext = new_ext.sub(/^\.(.*)/, '\1')

    parser = can_parse_by_name "xxx.#{old_ext}"
    return false unless parser

    RDoc::Parser.parsers.unshift [/\.#{new_ext}$/, parser]

    true
  end

  ##
  # Determines if the file is a "binary" file which basically means it has
  # content that an RDoc parser shouldn't try to consume.

  def self.binary?(file)
    return false if file =~ /\.(rdoc|txt)$/

    s = File.read(file, 1024) or return false

    return true if s[0, 2] == Marshal.dump('')[0, 2] or s.index("\x00")

    mode = 'r:utf-8' # default source encoding has been changed to utf-8
    s.sub!(/\A#!.*\n/, '')     # assume shebang line isn't longer than 1024.
    encoding = s[/^\s*\#\s*(?:-\*-\s*)?(?:en)?coding:\s*([^\s;]+?)(?:-\*-|[\s;])/, 1]
    mode = "rb:#{encoding}" if encoding
    s = File.open(file, mode) {|f| f.gets(nil, 1024)}

    not s.valid_encoding?
  end

  ##
  # Checks if +file+ is a zip file in disguise.  Signatures from
  # http://www.garykessler.net/library/file_sigs.html

  def self.zip? file
    zip_signature = File.read file, 4

    zip_signature == "PK\x03\x04" or
      zip_signature == "PK\x05\x06" or
      zip_signature == "PK\x07\x08"
  rescue
    false
  end

  ##
  # Return a parser that can handle a particular extension

  def self.can_parse file_name
    parser = can_parse_by_name file_name

    # HACK Selenium hides a jar file using a .txt extension
    return if parser == RDoc::Parser::Simple and zip? file_name

    parser
  end

  ##
  # Returns a parser that can handle the extension for +file_name+.  This does
  # not depend upon the file being readable.

  def self.can_parse_by_name file_name
    _, parser = RDoc::Parser.parsers.find { |regexp,| regexp =~ file_name }

    # The default parser must not parse binary files
    ext_name = File.extname file_name
    return parser if ext_name.empty?

    if parser == RDoc::Parser::Simple and ext_name !~ /txt|rdoc/ then
      case mode = check_modeline(file_name)
      when nil, 'rdoc' then # continue
      else
        RDoc::Parser.parsers.find { |_, p| return p if mode.casecmp?(p.name[/\w+\z/]) }
        return nil
      end
    end

    parser
  rescue Errno::EACCES
  end

  ##
  # Returns the file type from the modeline in +file_name+

  def self.check_modeline file_name
    line = File.open file_name do |io|
      io.gets
    end

    /-\*-\s*(.*?\S)\s*-\*-/ =~ line

    return nil unless type = $1

    if /;/ =~ type then
      return nil unless /(?:\s|\A)mode:\s*([^\s;]+)/i =~ type
      type = $1
    end

    return nil if /coding:/i =~ type

    type.downcase
  rescue ArgumentError
  rescue Encoding::InvalidByteSequenceError # invalid byte sequence

  end

  ##
  # Finds and instantiates the correct parser for the given +file_name+ and
  # +content+.

  def self.for top_level, content, options, stats
    file_name = top_level.absolute_name
    return if binary? file_name

    parser = use_markup content

    unless parser then
      parse_name = file_name

      # If no extension, look for shebang
      if file_name !~ /\.\w+$/ && content =~ %r{\A#!(.+)} then
        shebang = $1
        case shebang
        when %r{env\s+ruby}, %r{/ruby}
          parse_name = 'dummy.rb'
        end
      end

      parser = can_parse parse_name
    end

    return unless parser

    content = remove_modeline content

    parser.new top_level, file_name, content, options, stats
  rescue SystemCallError
    nil
  end

  ##
  # Record which file types this parser can understand.
  #
  # It is ok to call this multiple times.

  def self.parse_files_matching(regexp)
    RDoc::Parser.parsers.unshift [regexp, self]
  end

  ##
  # Removes an emacs-style modeline from the first line of the document

  def self.remove_modeline content
    content.sub(/\A.*-\*-\s*(.*?\S)\s*-\*-.*\r?\n/, '')
  end

  ##
  # If there is a <tt>markup: parser_name</tt> comment at the front of the
  # file, use it to determine the parser.  For example:
  #
  #   # markup: rdoc
  #   # Class comment can go here
  #
  #   class C
  #   end
  #
  # The comment should appear as the first line of the +content+.
  #
  # If the content contains a shebang or editor modeline the comment may
  # appear on the second or third line.
  #
  # Any comment style may be used to hide the markup comment.

  def self.use_markup content
    markup = content.lines.first(3).grep(/markup:\s+(\w+)/) { $1 }.first

    return unless markup

    # TODO Ruby should be returned only when the filename is correct
    return RDoc::Parser::Ruby if %w[tomdoc markdown].include? markup

    markup = Regexp.escape markup

    _, selected = RDoc::Parser.parsers.find do |_, parser|
      /^#{markup}$/i =~ parser.name.sub(/.*:/, '')
    end

    selected
  end

  ##
  # Creates a new Parser storing +top_level+, +file_name+, +content+,
  # +options+ and +stats+ in instance variables.  In +@preprocess+ an
  # RDoc::Markup::PreProcess object is created which allows processing of
  # directives.

  def initialize top_level, file_name, content, options, stats
    @top_level = top_level
    @top_level.parser = self.class
    @store = @top_level.store

    @file_name = file_name
    @content = content
    @options = options
    @stats = stats

    @preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include
    @preprocess.options = @options
  end

  autoload :RubyTools, "#{__dir__}/parser/ruby_tools"
  autoload :Text,      "#{__dir__}/parser/text"

  ##
  # Normalizes tabs in +body+

  def handle_tab_width(body)
    if /\t/ =~ body
      tab_width = @options.tab_width
      body.split(/\n/).map do |line|
        1 while line.gsub!(/\t+/) do
          b, e = $~.offset(0)
          ' ' * (tab_width * (e-b) - b % tab_width)
        end
        line
      end.join "\n"
    else
      body
    end
  end
end

# simple must come first in order to show up last in the parsers list
require_relative 'parser/simple'
require_relative 'parser/c'
require_relative 'parser/changelog'
require_relative 'parser/markdown'
require_relative 'parser/rd'
require_relative 'parser/ruby'
PK)J[S�2��1share/gems/gems/rdoc-6.10.0/lib/rdoc/i18n/text.rbnu�[���# frozen_string_literal: true
##
# An i18n supported text.
#
# This object provides the following two features:
#
#   * Extracts translation messages from wrapped raw text.
#   * Translates wrapped raw text in specified locale.
#
# Wrapped raw text is one of String, RDoc::Comment or Array of them.

class RDoc::I18n::Text

  ##
  # Creates a new i18n supported text for +raw+ text.

  def initialize(raw)
    @raw = raw
  end

  ##
  # Extracts translation target messages and yields each message.
  #
  # Each yielded message is a Hash. It consists of the followings:
  #
  # :type      :: :paragraph
  # :paragraph :: String (The translation target message itself.)
  # :line_no   :: Integer (The line number of the :paragraph is started.)
  #
  # The above content may be added in the future.

  def extract_messages
    parse do |part|
      case part[:type]
      when :empty_line
        # ignore
      when :paragraph
        yield(part)
      end
    end
  end

  # Translates raw text into +locale+.
  def translate(locale)
    translated_text = ''
    parse do |part|
      case part[:type]
      when :paragraph
        translated_text += locale.translate(part[:paragraph])
      when :empty_line
        translated_text += part[:line]
      else
        raise "should not reach here: unexpected type: #{type}"
      end
    end
    translated_text
  end

  private
  def parse(&block)
    paragraph = ''
    paragraph_start_line = 0
    line_no = 0

    each_line(@raw) do |line|
      line_no += 1
      case line
      when /\A\s*\z/
        if paragraph.empty?
          emit_empty_line_event(line, line_no, &block)
        else
          paragraph += line
          emit_paragraph_event(paragraph, paragraph_start_line, line_no,
                               &block)
          paragraph = ''
        end
      else
        paragraph_start_line = line_no if paragraph.empty?
        paragraph += line
      end
    end

    unless paragraph.empty?
      emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
    end
  end

  def each_line(raw, &block)
    case raw
    when RDoc::Comment
      raw.text.each_line(&block)
    when Array
      raw.each do |comment, location|
        each_line(comment, &block)
      end
    else
      raw.each_line(&block)
    end
  end

  def emit_empty_line_event(line, line_no)
    part = {
      :type => :empty_line,
      :line => line,
      :line_no => line_no,
    }
    yield(part)
  end

  def emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
    paragraph_part = {
      :type => :paragraph,
      :line_no => paragraph_start_line,
    }
    match_data = /(\s*)\z/.match(paragraph)
    if match_data
      paragraph_part[:paragraph] = match_data.pre_match
      yield(paragraph_part)
      emit_empty_line_event(match_data[1], line_no, &block)
    else
      paragraph_part[:paragraph] = paragraph
      yield(paragraph_part)
    end
  end

end
PK)J[KzVf	f	3share/gems/gems/rdoc-6.10.0/lib/rdoc/i18n/locale.rbnu�[���# frozen_string_literal: true
##
# A message container for a locale.
#
# This object provides the following two features:
#
#   * Loads translated messages from .po file.
#   * Translates a message into the locale.

class RDoc::I18n::Locale

  @@locales = {} # :nodoc:

  class << self

    ##
    # Returns the locale object for +locale_name+.

    def [](locale_name)
      @@locales[locale_name] ||= new(locale_name)
    end

    ##
    # Sets the locale object for +locale_name+.
    #
    # Normally, this method is not used. This method is useful for
    # testing.

    def []=(locale_name, locale)
      @@locales[locale_name] = locale
    end

  end

  ##
  # The name of the locale. It uses IETF language tag format
  # +[language[_territory][.codeset][@modifier]]+.
  #
  # See also {BCP 47 - Tags for Identifying
  # Languages}[http://tools.ietf.org/rfc/bcp/bcp47.txt].

  attr_reader :name

  ##
  # Creates a new locale object for +name+ locale. +name+ must
  # follow IETF language tag format.

  def initialize(name)
    @name = name
    @messages = {}
  end

  ##
  # Loads translation messages from +locale_directory+/+@name+/rdoc.po
  # or +locale_directory+/+@name+.po. The former has high priority.
  #
  # This method requires gettext gem for parsing .po file. If you
  # don't have gettext gem, this method doesn't load .po file. This
  # method warns and returns +false+.
  #
  # Returns +true+ if succeeded, +false+ otherwise.

  def load(locale_directory)
    return false if @name.nil?

    po_file_candidates = [
      File.join(locale_directory, @name, 'rdoc.po'),
      File.join(locale_directory, "#{@name}.po"),
    ]
    po_file = po_file_candidates.find do |po_file_candidate|
      File.exist?(po_file_candidate)
    end
    return false unless po_file

    begin
      require 'gettext/po_parser'
      require 'gettext/mo'
    rescue LoadError
      warn('Need gettext gem for i18n feature:')
      warn('  gem install gettext')
      return false
    end

    po_parser = GetText::POParser.new
    messages = GetText::MO.new
    po_parser.report_warning = false
    po_parser.parse_file(po_file, messages)

    @messages.merge!(messages)

    true
  end

  ##
  # Translates the +message+ into locale. If there is no translation
  # messages for +message+ in locale, +message+ itself is returned.

  def translate(message)
    @messages[message] || message
  end

end
PK)J[4�}TT0share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/store.rbnu�[���# frozen_string_literal: true
module RDoc::RI

  Store = RDoc::Store # :nodoc:

end
PK)J[��n�==/share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/task.rbnu�[���# frozen_string_literal: true
begin
  gem 'rdoc'
rescue Gem::LoadError
end unless defined?(RDoc)

require_relative '../task'

##
# RDoc::RI::Task creates ri data in <code>./.rdoc</code> for your project.
#
# It contains the following tasks:
#
# [ri]
#   Build ri data
#
# [clobber_ri]
#   Delete ri data files.  This target is automatically added to the main
#   clobber target.
#
# [reri]
#   Rebuild the ri data from scratch even if they are not out of date.
#
# Simple example:
#
#   require 'rdoc/ri/task'
#
#   RDoc::RI::Task.new do |ri|
#     ri.main = 'README.rdoc'
#     ri.rdoc_files.include 'README.rdoc', 'lib/**/*.rb'
#   end
#
# For further configuration details see RDoc::Task.

class RDoc::RI::Task < RDoc::Task

  DEFAULT_NAMES = { # :nodoc:
    :clobber_rdoc => :clobber_ri,
    :rdoc         => :ri,
    :rerdoc       => :reri,
  }

  ##
  # Create an ri task with the given name. See RDoc::Task for documentation on
  # setting names.

  def initialize name = DEFAULT_NAMES # :yield: self
    super
  end

  def clobber_task_description # :nodoc:
    "Remove RI data files"
  end

  ##
  # Sets default task values

  def defaults
    super

    @rdoc_dir = '.rdoc'
  end

  def rdoc_task_description # :nodoc:
    'Build RI data files'
  end

  def rerdoc_task_description # :nodoc:
    'Rebuild RI data files'
  end
end
PK)J[�Ų^^0share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/paths.rbnu�[���# frozen_string_literal: true
require_relative '../rdoc'

##
# The directories where ri data lives.  Paths can be enumerated via ::each, or
# queried individually via ::system_dir, ::site_dir, ::home_dir and ::gem_dir.

module RDoc::RI::Paths

  #:stopdoc:
  require 'rbconfig'

  version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']

  BASE    = File.join RbConfig::CONFIG['ridir'], version

  HOMEDIR = RDoc.home
  #:startdoc:

  ##
  # Iterates over each selected path yielding the directory and type.
  #
  # Yielded types:
  # :system:: Where Ruby's ri data is stored.  Yielded when +system+ is
  #           true
  # :site:: Where ri for installed libraries are stored.  Yielded when
  #         +site+ is true.  Normally no ri data is stored here.
  # :home:: ~/.rdoc.  Yielded when +home+ is true.
  # :gem:: ri data for an installed gem.  Yielded when +gems+ is true.
  # :extra:: ri data directory from the command line.  Yielded for each
  #          entry in +extra_dirs+

  def self.each system = true, site = true, home = true, gems = :latest, *extra_dirs # :yields: directory, type
    return enum_for __method__, system, site, home, gems, *extra_dirs unless
      block_given?

    extra_dirs.each do |dir|
      yield dir, :extra
    end

    yield system_dir,  :system if system
    yield site_dir,    :site   if site
    yield home_dir,    :home   if home and HOMEDIR

    gemdirs(gems).each do |dir|
      yield dir, :gem
    end if gems

    nil
  end

  ##
  # The ri directory for the gem with +gem_name+.

  def self.gem_dir name, version
    req = Gem::Requirement.new "= #{version}"

    spec = Gem::Specification.find_by_name name, req

    File.join spec.doc_dir, 'ri'
  end

  ##
  # The latest installed gems' ri directories.  +filter+ can be :all or
  # :latest.
  #
  # A +filter+ :all includes all versions of gems and includes gems without
  # ri documentation.

  def self.gemdirs filter = :latest
    ri_paths = {}

    all = Gem::Specification.map do |spec|
      [File.join(spec.doc_dir, 'ri'), spec.name, spec.version]
    end

    if filter == :all then
      gemdirs = []

      all.group_by do |_, name, _|
        name
      end.sort_by do |group, _|
        group
      end.map do |group, items|
        items.sort_by do |_, _, version|
          version
        end.reverse_each do |dir,|
          gemdirs << dir
        end
      end

      return gemdirs
    end

    all.each do |dir, name, ver|
      next unless File.exist? dir

      if ri_paths[name].nil? or ver > ri_paths[name].first then
        ri_paths[name] = [ver, name, dir]
      end
    end

    ri_paths.sort_by { |_, (_, name, _)| name }.map { |k, v| v.last }
  rescue LoadError
    []
  end

  ##
  # The location of the rdoc data in the user's home directory.
  #
  # Like ::system, ri data in the user's home directory is rare and predates
  # libraries distributed via RubyGems.  ri data is rarely generated into this
  # directory.

  def self.home_dir
    HOMEDIR
  end

  ##
  # Returns existing directories from the selected documentation directories
  # as an Array.
  #
  # See also ::each

  def self.path(system = true, site = true, home = true, gems = :latest, *extra_dirs)
    path = raw_path system, site, home, gems, *extra_dirs

    path.select { |directory| File.directory? directory }
  end

  ##
  # Returns selected documentation directories including nonexistent
  # directories.
  #
  # See also ::each

  def self.raw_path(system, site, home, gems, *extra_dirs)
    path = []

    each(system, site, home, gems, *extra_dirs) do |dir, type|
      path << dir
    end

    path.compact
  end

  ##
  # The location of ri data installed into the site dir.
  #
  # Historically this was available for documentation installed by Ruby
  # libraries predating RubyGems.  It is unlikely to contain any content for
  # modern Ruby installations.

  def self.site_dir
    File.join BASE, 'site'
  end

  ##
  # The location of the built-in ri data.
  #
  # This data is built automatically when `make` is run when Ruby is
  # installed.  If you did not install Ruby by hand you may need to install
  # the documentation yourself.  Please consult the documentation for your
  # package manager or Ruby installer for details.  You can also use the
  # rdoc-data gem to install system ri data for common versions of Ruby.

  def self.system_dir
    File.join BASE, 'system'
  end

end
PK)J[V�nrr4share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/formatter.rbnu�[���# frozen_string_literal: true
##
# For RubyGems backwards compatibility

module RDoc::RI::Formatter # :nodoc:
end
PK)J[Us�����1share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/driver.rbnu�[���# frozen_string_literal: true
require 'optparse'

require_relative '../../rdoc'

require_relative 'formatter' # For RubyGems backwards compatibility
# TODO: Fix weird documentation with `require_relative`

##
# The RI driver implements the command-line ri tool.
#
# The driver supports:
# * loading RI data from:
#   * Ruby's standard library
#   * RubyGems
#   * ~/.rdoc
#   * A user-supplied directory
# * Paging output (uses RI_PAGER environment variable, PAGER environment
#   variable or the less, more and pager programs)
# * Interactive mode with tab-completion
# * Abbreviated names (ri Zl shows Zlib documentation)
# * Colorized output
# * Merging output from multiple RI data sources

class RDoc::RI::Driver

  ##
  # Base Driver error class

  class Error < RDoc::RI::Error; end

  ##
  # Raised when a name isn't found in the ri data stores

  class NotFoundError < Error

    def initialize(klass, suggestion_proc = nil) # :nodoc:
      @klass = klass
      @suggestion_proc = suggestion_proc
    end

    ##
    # Name that wasn't found

    def name
      @klass
    end

    def message # :nodoc:
      str = "Nothing known about #{@klass}"
      suggestions = @suggestion_proc&.call
      if suggestions and !suggestions.empty?
        str += "\nDid you mean?  #{suggestions.join("\n               ")}"
      end
      str
    end
  end

  ##
  # Show all method documentation following a class or module

  attr_accessor :show_all

  ##
  # An RDoc::RI::Store for each entry in the RI path

  attr_accessor :stores

  ##
  # Controls the user of the pager vs $stdout

  attr_accessor :use_stdout

  ##
  # Default options for ri

  def self.default_options
    options = {}
    options[:interactive] = false
    options[:profile]     = false
    options[:show_all]    = false
    options[:expand_refs] = true
    options[:use_stdout]  = !$stdout.tty?
    options[:width]       = 72

    # By default all standard paths are used.
    options[:use_system]     = true
    options[:use_site]       = true
    options[:use_home]       = true
    options[:use_gems]       = true
    options[:extra_doc_dirs] = []

    return options
  end

  ##
  # Dump +data_path+ using pp

  def self.dump data_path
    require 'pp'

    File.open data_path, 'rb' do |io|
      pp Marshal.load(io.read)
    end
  end

  ##
  # Parses +argv+ and returns a Hash of options

  def self.process_args argv
    options = default_options

    opts = OptionParser.new do |opt|
      opt.program_name = File.basename $0
      opt.version = RDoc::VERSION
      opt.release = nil
      opt.summary_indent = ' ' * 4

      opt.banner = <<-EOT
Usage: #{opt.program_name} [options] [name ...]

Where name can be:

  Class | Module | Module::Class

  Class::method | Class#method | Class.method | method

  gem_name: | gem_name:README | gem_name:History

  ruby: | ruby:NEWS | ruby:globals

All class names may be abbreviated to their minimum unambiguous form.
If a name is ambiguous, all valid options will be listed.

A '.' matches either class or instance methods, while #method
matches only instance and ::method matches only class methods.

README and other files may be displayed by prefixing them with the gem name
they're contained in.  If the gem name is followed by a ':' all files in the
gem will be shown.  The file name extension may be omitted where it is
unambiguous.

'ruby' can be used as a pseudo gem name to display files from the Ruby
core documentation. Use 'ruby:' by itself to get a list of all available
core documentation files.

For example:

    #{opt.program_name} Fil
    #{opt.program_name} File
    #{opt.program_name} File.new
    #{opt.program_name} zip
    #{opt.program_name} rdoc:README
    #{opt.program_name} ruby:comments

Note that shell quoting or escaping may be required for method names
containing punctuation:

    #{opt.program_name} 'Array.[]'
    #{opt.program_name} compact\\!

To see the default directories #{opt.program_name} will search, run:

    #{opt.program_name} --list-doc-dirs

Specifying the --system, --site, --home, --gems, or --doc-dir options
will limit ri to searching only the specified directories.

ri options may be set in the RI environment variable.

The ri pager can be set with the RI_PAGER environment variable
or the PAGER environment variable.
      EOT

      opt.separator nil
      opt.separator "Options:"

      opt.separator nil

      opt.on("--[no-]interactive", "-i",
             "In interactive mode you can repeatedly",
             "look up methods with autocomplete.") do |interactive|
        options[:interactive] = interactive
      end

      opt.separator nil

      opt.on("--[no-]all", "-a",
             "Show all documentation for a class or",
             "module.") do |show_all|
        options[:show_all] = show_all
      end

      opt.separator nil

      opt.on("--[no-]list", "-l",
             "List classes ri knows about.") do |list|
        options[:list] = list
      end

      opt.separator nil

      opt.on("--[no-]pager",
             "Send output to a pager,",
             "rather than directly to stdout.") do |use_pager|
        options[:use_stdout] = !use_pager
      end

      opt.separator nil

      opt.on("-T",
             "Synonym for --no-pager.") do
        options[:use_stdout] = true
      end

      opt.separator nil

      opt.on("--width=WIDTH", "-w", OptionParser::DecimalInteger,
             "Set the width of the output.") do |width|
        options[:width] = width
      end

      opt.separator nil

      opt.on("--server[=PORT]", Integer,
             "Run RDoc server on the given port.",
             "The default port is 8214.") do |port|
        options[:server] = port || 8214
      end

      opt.separator nil

      formatters = RDoc::Markup.constants.grep(/^To[A-Z][a-z]+$/).sort
      formatters = formatters.sort.map do |formatter|
        formatter.to_s.sub('To', '').downcase
      end
      formatters -= %w[html label test] # remove useless output formats

      opt.on("--format=NAME", "-f",
             "Use the selected formatter.  The default",
             "formatter is bs for paged output and ansi",
             "otherwise.  Valid formatters are:",
             "#{formatters.join(', ')}.", formatters) do |value|
        options[:formatter] = RDoc::Markup.const_get "To#{value.capitalize}"
      end

      opt.separator nil

      opt.on("--[no-]expand-refs", "Expand rdoc-refs at the end of output") do |value|
        options[:expand_refs] = value
      end

      opt.separator nil

      opt.on("--help", "-h",
             "Show help and exit.") do
        puts opts
        exit
      end

      opt.separator nil

      opt.on("--version", "-v",
             "Output version information and exit.") do
        puts "#{opts.program_name} #{opts.version}"
        exit
      end

      opt.separator nil
      opt.separator "Data source options:"
      opt.separator nil

      opt.on("--[no-]list-doc-dirs",
             "List the directories from which ri will",
             "source documentation on stdout and exit.") do |list_doc_dirs|
        options[:list_doc_dirs] = list_doc_dirs
      end

      opt.separator nil

      opt.on("--doc-dir=DIRNAME", "-d", Array,
             "List of directories from which to source",
             "documentation in addition to the standard",
             "directories.  May be repeated.") do |value|
        value.each do |dir|
          unless File.directory? dir then
            raise OptionParser::InvalidArgument, "#{dir} is not a directory"
          end

          options[:extra_doc_dirs] << File.expand_path(dir)
        end
      end

      opt.separator nil

      opt.on("--no-standard-docs",
             "Do not include documentation from",
             "the Ruby standard library, site_lib,",
             "installed gems, or ~/.rdoc.",
             "Use with --doc-dir.") do
        options[:use_system] = false
        options[:use_site] = false
        options[:use_gems] = false
        options[:use_home] = false
      end

      opt.separator nil

      opt.on("--[no-]system",
             "Include documentation from Ruby's",
             "standard library.  Defaults to true.") do |value|
        options[:use_system] = value
      end

      opt.separator nil

      opt.on("--[no-]site",
             "Include documentation from libraries",
             "installed in site_lib.",
             "Defaults to true.") do |value|
        options[:use_site] = value
      end

      opt.separator nil

      opt.on("--[no-]gems",
             "Include documentation from RubyGems.",
             "Defaults to true.") do |value|
        options[:use_gems] = value
      end

      opt.separator nil

      opt.on("--[no-]home",
             "Include documentation stored in ~/.rdoc.",
             "Defaults to true.") do |value|
        options[:use_home] = value
      end

      opt.separator nil
      opt.separator "Debug options:"
      opt.separator nil

      opt.on("--[no-]profile",
             "Run with the ruby profiler.") do |value|
        options[:profile] = value
      end

      opt.separator nil

      opt.on("--dump=CACHE",
             "Dump data from an ri cache or data file.") do |value|
        unless File.readable?(value)
          abort "#{value.inspect} is not readable"
        end

        if File.directory?(value)
          abort "#{value.inspect} is a directory"
        end

        options[:dump_path] = File.new(value)
      end
    end

    argv = ENV['RI'].to_s.split(' ').concat argv

    opts.parse! argv

    options[:names] = argv

    options[:use_stdout] ||= !$stdout.tty?
    options[:use_stdout] ||= options[:interactive]
    options[:width] ||= 72

    options

  rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e
    puts opts
    puts
    puts e
    exit 1
  end

  ##
  # Runs the ri command line executable using +argv+

  def self.run argv = ARGV
    options = process_args argv

    if options[:dump_path] then
      dump options[:dump_path]
      return
    end

    ri = new options
    ri.run
  end

  ##
  # Creates a new driver using +initial_options+ from ::process_args

  def initialize initial_options = {}
    @paging = false
    @classes = nil

    options = self.class.default_options.update(initial_options)

    @formatter_klass = options[:formatter]

    require 'profile' if options[:profile]

    @names = options[:names]
    @list = options[:list]

    @doc_dirs = []
    @stores   = []

    RDoc::RI::Paths.each(options[:use_system], options[:use_site],
                         options[:use_home], options[:use_gems],
                         *options[:extra_doc_dirs]) do |path, type|
      @doc_dirs << path

      store = RDoc::RI::Store.new path, type
      store.load_cache
      @stores << store
    end

    @list_doc_dirs = options[:list_doc_dirs]

    @interactive = options[:interactive]
    @server      = options[:server]
    @use_stdout  = options[:use_stdout]
    @show_all    = options[:show_all]
    @width       = options[:width]
    @expand_refs = options[:expand_refs]
  end

  ##
  # Adds paths for undocumented classes +also_in+ to +out+

  def add_also_in out, also_in
    return if also_in.empty?

    out << RDoc::Markup::Rule.new(1)
    out << RDoc::Markup::Paragraph.new("Also found in:")

    paths = RDoc::Markup::Verbatim.new
    also_in.each do |store|
      paths.parts.push store.friendly_path, "\n"
    end
    out << paths
  end

  ##
  # Adds a class header to +out+ for class +name+ which is described in
  # +classes+.

  def add_class out, name, classes
    heading = if classes.all? { |klass| klass.module? } then
                name
              else
                superclass = classes.map do |klass|
                  klass.superclass unless klass.module?
                end.compact.shift || 'Object'

                superclass = superclass.full_name unless String === superclass

                "#{name} < #{superclass}"
              end

    out << RDoc::Markup::Heading.new(1, heading)
    out << RDoc::Markup::BlankLine.new
  end

  ##
  # Adds "(from ...)" to +out+ for +store+

  def add_from out, store
    out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")
  end

  ##
  # Adds +extends+ to +out+

  def add_extends out, extends
    add_extension_modules out, 'Extended by', extends
  end

  ##
  # Adds a list of +extensions+ to this module of the given +type+ to +out+.
  # add_includes and add_extends call this, so you should use those directly.

  def add_extension_modules out, type, extensions
    return if extensions.empty?

    out << RDoc::Markup::Rule.new(1)
    out << RDoc::Markup::Heading.new(1, "#{type}:")

    extensions.each do |modules, store|
      if modules.length == 1 then
        add_extension_modules_single out, store, modules.first
      else
        add_extension_modules_multiple out, store, modules
      end
    end
  end

  ##
  # Renders multiple included +modules+ from +store+ to +out+.

  def add_extension_modules_multiple out, store, modules # :nodoc:
    out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")

    wout, with = modules.partition { |incl| incl.comment.empty? }

    out << RDoc::Markup::BlankLine.new unless with.empty?

    with.each do |incl|
      out << RDoc::Markup::Paragraph.new(incl.name)
      out << RDoc::Markup::BlankLine.new
      out << incl.comment
    end

    unless wout.empty? then
      verb = RDoc::Markup::Verbatim.new

      wout.each do |incl|
        verb.push incl.name, "\n"
      end

      out << verb
    end
  end

  ##
  # Adds a single extension module +include+ from +store+ to +out+

  def add_extension_modules_single out, store, include # :nodoc:
    name = include.name
    path = store.friendly_path
    out << RDoc::Markup::Paragraph.new("#{name} (from #{path})")

    if include.comment then
      out << RDoc::Markup::BlankLine.new
      out << include.comment
    end
  end

  ##
  # Adds +includes+ to +out+

  def add_includes out, includes
    add_extension_modules out, 'Includes', includes
  end

  ##
  # Looks up the method +name+ and adds it to +out+

  def add_method out, name
    filtered = lookup_method name
    method_document out, name, filtered
  end

  ##
  # Adds documentation for all methods in +klass+ to +out+

  def add_method_documentation out, klass
    klass.method_list.each do |method|
      begin
        add_method out, method.full_name
      rescue NotFoundError
        next
      end
    end
  end

  ##
  # Adds a list of +methods+ to +out+ with a heading of +name+

  def add_method_list out, methods, name
    return if methods.empty?

    out << RDoc::Markup::Heading.new(1, "#{name}:")
    out << RDoc::Markup::BlankLine.new

    if @use_stdout and !@interactive then
      out.concat methods.map { |method|
        RDoc::Markup::Verbatim.new method
      }
    else
      out << RDoc::Markup::IndentedParagraph.new(2, methods.join(', '))
    end

    out << RDoc::Markup::BlankLine.new
  end

  ##
  # Returns ancestor classes of +klass+

  def ancestors_of klass
    ancestors = []

    unexamined = [klass]
    seen = []

    loop do
      break if unexamined.empty?
      current = unexamined.shift
      seen << current

      stores = classes[current]

      next unless stores and not stores.empty?

      klasses = stores.flat_map do |store|
        store.ancestors[current] || []
      end.uniq

      klasses = klasses - seen

      ancestors.concat klasses
      unexamined.concat klasses
    end

    ancestors.reverse
  end

  ##
  # For RubyGems backwards compatibility

  def class_cache # :nodoc:
  end

  ##
  # Builds a RDoc::Markup::Document from +found+, +klasess+ and +includes+

  def class_document name, found, klasses, includes, extends
    also_in = []

    out = RDoc::Markup::Document.new

    add_class out, name, klasses

    add_includes out, includes
    add_extends  out, extends

    found.each do |store, klass|
      render_class out, store, klass, also_in
    end

    add_also_in out, also_in

    expand_rdoc_refs_at_the_bottom(out)
    out
  end

  ##
  # Adds the class +comment+ to +out+.

  def class_document_comment out, comment # :nodoc:
    unless comment.empty? then
      out << RDoc::Markup::Rule.new(1)

      if comment.merged? then
        parts = comment.parts
        parts = parts.zip [RDoc::Markup::BlankLine.new] * parts.length
        parts.flatten!
        parts.pop

        out.concat parts
      else
        out << comment
      end
    end
  end

  ##
  # Adds the constants from +klass+ to the Document +out+.

  def class_document_constants out, klass # :nodoc:
    return if klass.constants.empty?

    out << RDoc::Markup::Heading.new(1, "Constants:")
    out << RDoc::Markup::BlankLine.new
    list = RDoc::Markup::List.new :NOTE

    constants = klass.constants.sort_by { |constant| constant.name }

    list.items.concat constants.map { |constant|
      parts = constant.comment.parts if constant.comment
      parts << RDoc::Markup::Paragraph.new('[not documented]') if
        parts.empty?

      RDoc::Markup::ListItem.new(constant.name, *parts)
    }

    out << list
    out << RDoc::Markup::BlankLine.new
  end

  ##
  # Hash mapping a known class or module to the stores it can be loaded from

  def classes
    return @classes if @classes

    @classes = {}

    @stores.each do |store|
      store.cache[:modules].each do |mod|
        # using default block causes searched-for modules to be added
        @classes[mod] ||= []
        @classes[mod] << store
      end
    end

    @classes
  end

  ##
  # Returns the stores wherein +name+ is found along with the classes,
  # extends and includes that match it

  def classes_and_includes_and_extends_for name
    klasses = []
    extends = []
    includes = []

    found = @stores.map do |store|
      begin
        klass = store.load_class name
        klasses  << klass
        extends  << [klass.extends,  store] if klass.extends
        includes << [klass.includes, store] if klass.includes
        [store, klass]
      rescue RDoc::Store::MissingFileError
      end
    end.compact

    extends.reject!  do |modules,| modules.empty? end
    includes.reject! do |modules,| modules.empty? end

    [found, klasses, includes, extends]
  end

  ##
  # Completes +name+ based on the caches.  For Readline

  def complete name
    completions = []

    klass, selector, method = parse_name name

    complete_klass  name, klass, selector, method, completions
    complete_method name, klass, selector,         completions

    completions.sort.uniq
  end

  def complete_klass name, klass, selector, method, completions # :nodoc:
    klasses = classes.keys

    # may need to include Foo when given Foo::
    klass_name = method ? name : klass

    if name !~ /#|\./ then
      completions.replace klasses.grep(/^#{Regexp.escape klass_name}[^:]*$/)
      completions.concat klasses.grep(/^#{Regexp.escape name}[^:]*$/) if
        name =~ /::$/

      completions << klass if classes.key? klass # to complete a method name
    elsif selector then
      completions << klass if classes.key? klass
    elsif classes.key? klass_name then
      completions << klass_name
    end
  end

  def complete_method name, klass, selector, completions # :nodoc:
    if completions.include? klass and name =~ /#|\.|::/ then
      methods = list_methods_matching name

      if not methods.empty? then
        # remove Foo if given Foo:: and a method was found
        completions.delete klass
      elsif selector then
        # replace Foo with Foo:: as given
        completions.delete klass
        completions << "#{klass}#{selector}"
      end

      completions.concat methods
    end
  end

  ##
  # Converts +document+ to text and writes it to the pager

  def display document
    page do |io|
      f = formatter(io)
      f.width = @width if @width and f.respond_to?(:width)
      text = document.accept f

      io.write text
    end
  end

  ##
  # Outputs formatted RI data for class +name+.  Groups undocumented classes

  def display_class name
    return if name =~ /#|\./

    found, klasses, includes, extends =
      classes_and_includes_and_extends_for name

    return if found.empty?

    out = class_document name, found, klasses, includes, extends

    display out
  end

  ##
  # Outputs formatted RI data for method +name+

  def display_method name
    out = RDoc::Markup::Document.new

    add_method out, name

    expand_rdoc_refs_at_the_bottom(out)

    display out
  end

  ##
  # Outputs formatted RI data for the class or method +name+.
  #
  # Returns true if +name+ was found, false if it was not an alternative could
  # be guessed, raises an error if +name+ couldn't be guessed.

  def display_name name
    if name =~ /\w:(\w|$)/ then
      display_page name
      return true
    end

    return true if display_class name

    display_method name if name =~ /::|#|\./

    true
  rescue NotFoundError
    matches = list_methods_matching name if name =~ /::|#|\./
    matches = classes.keys.grep(/^#{Regexp.escape name}/) if matches.empty?

    raise if matches.empty?

    page do |io|
      io.puts "#{name} not found, maybe you meant:"
      io.puts
      io.puts matches.sort.join("\n")
    end

    false
  end

  ##
  # Displays each name in +name+

  def display_names names
    names.each do |name|
      name = expand_name name

      display_name name
    end
  end

  ##
  # Outputs formatted RI data for page +name+.

  def display_page name
    store_name, page_name = name.split ':', 2

    store = @stores.find { |s| s.source == store_name }

    return display_page_list store if page_name.empty?

    pages = store.cache[:pages]

    unless pages.include? page_name then
      found_names = pages.select do |n|
        n =~ /#{Regexp.escape page_name}\.[^.]+$/
      end

      if found_names.length.zero? then
        return display_page_list store, pages
      elsif found_names.length > 1 then
        return display_page_list store, found_names, page_name
      end

      page_name = found_names.first
    end

    page = store.load_page page_name

    display page.comment
  end

  ##
  # Outputs a formatted RI page list for the pages in +store+.

  def display_page_list store, pages = store.cache[:pages], search = nil
    out = RDoc::Markup::Document.new

    title = if search then
              "#{search} pages"
            else
              'Pages'
            end

    out << RDoc::Markup::Heading.new(1, "#{title} in #{store.friendly_path}")
    out << RDoc::Markup::BlankLine.new

    list = RDoc::Markup::List.new(:BULLET)

    pages.each do |page|
      list << RDoc::Markup::Paragraph.new(page)
    end

    out << list

    display out
  end

  def check_did_you_mean # :nodoc:
    if defined? DidYouMean::SpellChecker
      true
    else
      begin
        require 'did_you_mean'
        if defined? DidYouMean::SpellChecker
          true
        else
          false
        end
      rescue LoadError
        false
      end
    end
  end

  ##
  # Expands abbreviated klass +klass+ into a fully-qualified class.  "Zl::Da"
  # will be expanded to Zlib::DataError.

  def expand_class klass
    class_names = classes.keys
    ary = class_names.grep(Regexp.new("\\A#{klass.gsub(/(?=::|\z)/, '[^:]*')}\\z"))
    if ary.length != 1 && ary.first != klass
      if check_did_you_mean
        suggestion_proc = -> { DidYouMean::SpellChecker.new(dictionary: class_names).correct(klass) }
        raise NotFoundError.new(klass, suggestion_proc)
      else
        raise NotFoundError, klass
      end
    end
    ary.first
  end

  ##
  # Expands the class portion of +name+ into a fully-qualified class.  See
  # #expand_class.

  def expand_name name
    klass, selector, method = parse_name name

    return [selector, method].join if klass.empty?

    case selector
    when ':' then
      [find_store(klass),   selector, method]
    else
      [expand_class(klass), selector, method]
    end.join
  end

  ##
  # Filters the methods in +found+ trying to find a match for +name+.

  def filter_methods found, name
    regexp = name_regexp name

    filtered = found.find_all do |store, methods|
      methods.any? { |method| method.full_name =~ regexp }
    end

    return filtered unless filtered.empty?

    found
  end

  ##
  # Yields items matching +name+ including the store they were found in, the
  # class being searched for, the class they were found in (an ancestor) the
  # types of methods to look up (from #method_type), and the method name being
  # searched for

  def find_methods name
    klass, selector, method = parse_name name

    types = method_type selector

    klasses = nil
    ambiguous = klass.empty?

    if ambiguous then
      klasses = classes.keys
    else
      klasses = ancestors_of klass
      klasses.unshift klass
    end

    methods = []

    klasses.each do |ancestor|
      ancestors = classes[ancestor]

      next unless ancestors

      klass = ancestor if ambiguous

      ancestors.each do |store|
        methods << [store, klass, ancestor, types, method]
      end
    end

    methods = methods.sort_by do |_, k, a, _, m|
      [k, a, m].compact
    end

    methods.each do |item|
      yield(*item) # :yields: store, klass, ancestor, types, method
    end

    self
  end

  ##
  # Finds a store that matches +name+ which can be the name of a gem, "ruby",
  # "home" or "site".
  #
  # See also RDoc::Store#source

  def find_store name
    @stores.each do |store|
      source = store.source

      return source if source == name

      return source if
        store.type == :gem and source =~ /^#{Regexp.escape name}-\d/
    end

    raise RDoc::RI::Driver::NotFoundError, name
  end

  ##
  # Creates a new RDoc::Markup::Formatter.  If a formatter is given with -f,
  # use it.  If we're outputting to a pager, use bs, otherwise ansi.

  def formatter(io)
    if @formatter_klass then
      @formatter_klass.new
    elsif paging? or !io.tty? then
      RDoc::Markup::ToBs.new
    else
      RDoc::Markup::ToAnsi.new
    end
  end

  ##
  # Runs ri interactively using Readline if it is available.

  def interactive
    puts "\nEnter the method name you want to look up."

    begin
      require 'readline'
    rescue LoadError
    end
    if defined? Readline then
      Readline.completion_proc = method :complete
      puts "You can use tab to autocomplete."
    end

    puts "Enter a blank line to exit.\n\n"

    loop do
      name = if defined? Readline then
               Readline.readline ">> ", true
             else
               print ">> "
               $stdin.gets
             end

      return if name.nil? or name.empty?

      begin
        display_name expand_name(name.strip)
      rescue NotFoundError => e
        puts e.message
      end
    end

  rescue Interrupt
    exit
  end

  ##
  # Lists classes known to ri starting with +names+.  If +names+ is empty all
  # known classes are shown.

  def list_known_classes names = []
    classes = []

    stores.each do |store|
      classes << store.module_names
    end

    classes = classes.flatten.uniq.sort

    unless names.empty? then
      filter = Regexp.union names.map { |name| /^#{name}/ }

      classes = classes.grep filter
    end

    page do |io|
      if paging? or io.tty? then
        if names.empty? then
          io.puts "Classes and Modules known to ri:"
        else
          io.puts "Classes and Modules starting with #{names.join ', '}:"
        end
        io.puts
      end

      io.puts classes.join("\n")
    end
  end

  ##
  # Returns an Array of methods matching +name+

  def list_methods_matching name
    found = []

    find_methods name do |store, klass, ancestor, types, method|
      if types == :instance or types == :both then
        methods = store.instance_methods[ancestor]

        if methods then
          matches = methods.grep(/^#{Regexp.escape method.to_s}/)

          matches = matches.map do |match|
            "#{klass}##{match}"
          end

          found.concat matches
        end
      end

      if types == :class or types == :both then
        methods = store.class_methods[ancestor]

        next unless methods
        matches = methods.grep(/^#{Regexp.escape method.to_s}/)

        matches = matches.map do |match|
          "#{klass}::#{match}"
        end

        found.concat matches
      end
    end

    found.uniq
  end

  ##
  # Loads RI data for method +name+ on +klass+ from +store+.  +type+ and
  # +cache+ indicate if it is a class or instance method.

  def load_method store, cache, klass, type, name
    methods = store.public_send(cache)[klass]

    return unless methods

    method = methods.find do |method_name|
      method_name == name
    end

    return unless method

    store.load_method klass, "#{type}#{method}"
  rescue RDoc::Store::MissingFileError => e
    comment = RDoc::Comment.new("missing documentation at #{e.file}").parse

    method = RDoc::AnyMethod.new nil, name
    method.comment = comment
    method
  end

  ##
  # Returns an Array of RI data for methods matching +name+

  def load_methods_matching name
    found = []

    find_methods name do |store, klass, ancestor, types, method|
      methods = []

      methods << load_method(store, :class_methods, ancestor, '::',  method) if
        [:class, :both].include? types

      methods << load_method(store, :instance_methods, ancestor, '#',  method) if
        [:instance, :both].include? types

      found << [store, methods.compact]
    end

    found.reject do |path, methods| methods.empty? end
  end

  ##
  # Returns a filtered list of methods matching +name+

  def lookup_method name
    found = load_methods_matching name

    if found.empty?
      if check_did_you_mean
        methods = []
        _, _, method_name = parse_name name
        find_methods name do |store, klass, ancestor, types, method|
          methods.push(*store.class_methods[klass]) if [:class, :both].include? types
          methods.push(*store.instance_methods[klass]) if [:instance, :both].include? types
        end
        methods = methods.uniq
        suggestion_proc = -> { DidYouMean::SpellChecker.new(dictionary: methods).correct(method_name) }
        raise NotFoundError.new(name, suggestion_proc)
      else
        raise NotFoundError, name
      end
    end

    filter_methods found, name
  end

  ##
  # Builds a RDoc::Markup::Document from +found+, +klasses+ and +includes+

  def method_document out, name, filtered
    out << RDoc::Markup::Heading.new(1, name)
    out << RDoc::Markup::BlankLine.new

    filtered.each do |store, methods|
      methods.each do |method|
        render_method out, store, method, name
      end
    end

    out
  end

  ##
  # Returns the type of method (:both, :instance, :class) for +selector+

  def method_type selector
    case selector
    when '.', nil then :both
    when '#'      then :instance
    else               :class
    end
  end

  ##
  # Returns a regular expression for +name+ that will match an
  # RDoc::AnyMethod's name.

  def name_regexp name
    klass, type, name = parse_name name

    case type
    when '#', '::' then
      /^#{klass}#{type}#{Regexp.escape name}$/
    else
      /^#{klass}(#|::)#{Regexp.escape name}$/
    end
  end

  ##
  # Paginates output through a pager program.

  def page
    if pager = setup_pager then
      begin
        yield pager
      ensure
        pager.close
      end
    else
      yield $stdout
    end
  rescue Errno::EPIPE
  ensure
    @paging = false
  end

  ##
  # Are we using a pager?

  def paging?
    @paging
  end

  ##
  # Extracts the class, selector and method name parts from +name+ like
  # Foo::Bar#baz.
  #
  # NOTE: Given Foo::Bar, Bar is considered a class even though it may be a
  # method

  def parse_name name
    parts = name.split(/(::?|#|\.)/)

    if parts.length == 1 then
      if parts.first =~ /^[a-z]|^([%&*+\/<>^`|~-]|\+@|-@|<<|<=>?|===?|=>|=~|>>|\[\]=?|~@)$/ then
        type = '.'
        meth = parts.pop
      else
        type = nil
        meth = nil
      end
    elsif parts.length == 2 or parts.last =~ /::|#|\./ then
      type = parts.pop
      meth = nil
    elsif parts[1] == ':' then
      klass = parts.shift
      type  = parts.shift
      meth  = parts.join
    elsif parts[-2] != '::' or parts.last !~ /^[A-Z]/ then
      meth = parts.pop
      type = parts.pop
    end

    klass ||= parts.join

    [klass, type, meth]
  end

  ##
  # Renders the +klass+ from +store+ to +out+.  If the klass has no
  # documentable items the class is added to +also_in+ instead.

  def render_class out, store, klass, also_in # :nodoc:
    comment = klass.comment
    # TODO the store's cache should always return an empty Array
    class_methods    = store.class_methods[klass.full_name]    || []
    instance_methods = store.instance_methods[klass.full_name] || []
    attributes       = store.attributes[klass.full_name]       || []

    if comment.empty? and
       instance_methods.empty? and class_methods.empty? then
      also_in << store
      return
    end

    add_from out, store

    class_document_comment out, comment

    if class_methods or instance_methods or not klass.constants.empty? then
      out << RDoc::Markup::Rule.new(1)
    end

    class_document_constants out, klass

    add_method_list out, class_methods,    'Class methods'
    add_method_list out, instance_methods, 'Instance methods'
    add_method_list out, attributes,       'Attributes'

    add_method_documentation out, klass if @show_all
  end

  def render_method out, store, method, name # :nodoc:
    out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")

    unless name =~ /^#{Regexp.escape method.parent_name}/ then
      out << RDoc::Markup::Heading.new(3, "Implementation from #{method.parent_name}")
    end

    out << RDoc::Markup::Rule.new(1)

    render_method_arguments out, method.arglists
    render_method_superclass out, method
    if method.is_alias_for
      al = method.is_alias_for
      alias_for = store.load_method al.parent_name, "#{al.name_prefix}#{al.name}"
      render_method_comment out, method, alias_for
    else
      render_method_comment out, method
    end
  end

  def render_method_arguments out, arglists # :nodoc:
    return unless arglists

    arglists = arglists.chomp.split "\n"
    arglists = arglists.map { |line| line + "\n" }
    out << RDoc::Markup::Verbatim.new(*arglists)
    out << RDoc::Markup::Rule.new(1)
  end

  def render_method_comment out, method, alias_for = nil# :nodoc:
    if alias_for
      unless method.comment.nil? or method.comment.empty?
        out << RDoc::Markup::BlankLine.new
        out << method.comment
      end
      out << RDoc::Markup::BlankLine.new
      out << RDoc::Markup::Paragraph.new("(This method is an alias for #{alias_for.full_name}.)")
      out << RDoc::Markup::BlankLine.new
      out << alias_for.comment
      out << RDoc::Markup::BlankLine.new
    else
      out << RDoc::Markup::BlankLine.new
      out << method.comment
      out << RDoc::Markup::BlankLine.new
    end
  end

  def render_method_superclass out, method # :nodoc:
    return unless
      method.respond_to?(:superclass_method) and method.superclass_method

    out << RDoc::Markup::BlankLine.new
    out << RDoc::Markup::Heading.new(4, "(Uses superclass method #{method.superclass_method})")
    out << RDoc::Markup::Rule.new(1)
  end

  ##
  # Looks up and displays ri data according to the options given.

  def run
    if @list_doc_dirs then
      puts @doc_dirs
    elsif @list then
      list_known_classes @names
    elsif @server then
      start_server
    elsif @interactive or @names.empty? then
      interactive
    else
      display_names @names
    end
  rescue NotFoundError => e
    abort e.message
  end

  ##
  # Sets up a pager program to pass output through.  Tries the RI_PAGER and
  # PAGER environment variables followed by pager, less then more.

  def setup_pager
    return if @use_stdout

    pagers = [ENV['RI_PAGER'], ENV['PAGER'], 'pager', 'less', 'more']

    require 'shellwords'
    pagers.compact.uniq.each do |pager|
      pager = Shellwords.split(pager)
      next if pager.empty?

      io = IO.popen(pager, 'w') rescue next
      next if $? and $?.pid == io.pid and $?.exited? # pager didn't work

      @paging = true

      return io
    end

    @use_stdout = true

    nil
  end

  ##
  # Starts a WEBrick server for ri.

  def start_server
    begin
      require 'webrick'
    rescue LoadError
      abort "webrick is not found. You may need to `gem install webrick` to install webrick."
    end

    server = WEBrick::HTTPServer.new :Port => @server

    extra_doc_dirs = @stores.map {|s| s.type == :extra ? s.path : nil}.compact

    server.mount '/', RDoc::Servlet, nil, extra_doc_dirs

    trap 'INT'  do server.shutdown end
    trap 'TERM' do server.shutdown end

    server.start
  end

  RDOC_REFS_REGEXP = /\[rdoc-ref:([\w.]+)(@.*)?\]/

  def expand_rdoc_refs_at_the_bottom(out)
    return unless @expand_refs

    extracted_rdoc_refs = []

    out.each do |part|
      content = if part.respond_to?(:text)
        part.text
      else
        next
      end

      rdoc_refs = content.scan(RDOC_REFS_REGEXP).uniq.map do |file_name, _anchor|
        file_name
      end

      extracted_rdoc_refs.concat(rdoc_refs)
    end

    found_pages = extracted_rdoc_refs.map do |ref|
      begin
        @stores.first.load_page(ref)
      rescue RDoc::Store::MissingFileError
      end
    end.compact

    found_pages.each do |page|
      out << RDoc::Markup::Heading.new(4, "Expanded from #{page.full_name}")
      out << RDoc::Markup::BlankLine.new
      out << page.comment
    end
  end
end
PK)J[��"�7�7,share/gems/gems/rdoc-6.10.0/lib/rdoc/rdoc.rbnu�[���# frozen_string_literal: true
require_relative '../rdoc'

require 'find'
require 'fileutils'
require 'pathname'
require 'time'

##
# This is the driver for generating RDoc output.  It handles file parsing and
# generation of output.
#
# To use this class to generate RDoc output via the API, the recommended way
# is:
#
#   rdoc = RDoc::RDoc.new
#   options = RDoc::Options.load_options # returns an RDoc::Options instance
#   # set extra options
#   rdoc.document options
#
# You can also generate output like the +rdoc+ executable:
#
#   rdoc = RDoc::RDoc.new
#   rdoc.document argv
#
# Where +argv+ is an array of strings, each corresponding to an argument you'd
# give rdoc on the command line.  See <tt>rdoc --help</tt> for details.

class RDoc::RDoc

  @current = nil

  ##
  # This is the list of supported output generators

  GENERATORS = {}

  ##
  # List of directory names always skipped

  UNCONDITIONALLY_SKIPPED_DIRECTORIES = %w[CVS .svn .git].freeze

  ##
  # List of directory names skipped if test suites should be skipped

  TEST_SUITE_DIRECTORY_NAMES = %w[spec test].freeze


  ##
  # Generator instance used for creating output

  attr_accessor :generator

  ##
  # Hash of files and their last modified times.

  attr_reader :last_modified

  ##
  # RDoc options

  attr_accessor :options

  ##
  # Accessor for statistics.  Available after each call to parse_files

  attr_reader :stats

  ##
  # The current documentation store

  attr_reader :store

  ##
  # Add +klass+ that can generate output after parsing

  def self.add_generator(klass)
    name = klass.name.sub(/^RDoc::Generator::/, '').downcase
    GENERATORS[name] = klass
  end

  ##
  # Active RDoc::RDoc instance

  def self.current
    @current
  end

  ##
  # Sets the active RDoc::RDoc instance

  def self.current= rdoc
    @current = rdoc
  end

  ##
  # Creates a new RDoc::RDoc instance.  Call #document to parse files and
  # generate documentation.

  def initialize
    @current       = nil
    @generator     = nil
    @last_modified = {}
    @old_siginfo   = nil
    @options       = nil
    @stats         = nil
    @store         = nil
  end

  ##
  # Report an error message and exit

  def error(msg)
    raise RDoc::Error, msg
  end

  ##
  # Gathers a set of parseable files from the files and directories listed in
  # +files+.

  def gather_files files
    files = [@options.root.to_s] if files.empty?

    file_list = normalized_file_list files, true, @options.exclude

    file_list = remove_unparseable(file_list)

    if file_list.count {|name, mtime|
         file_list[name] = @last_modified[name] unless mtime
         mtime
       } > 0
      @last_modified.replace file_list
      file_list.keys.sort
    else
      []
    end
  end

  ##
  # Turns RDoc from stdin into HTML

  def handle_pipe
    @html = RDoc::Markup::ToHtml.new @options

    parser = RDoc::Text::MARKUP_FORMAT[@options.markup]

    document = parser.parse $stdin.read

    out = @html.convert document

    $stdout.write out
  end

  ##
  # Installs a siginfo handler that prints the current filename.

  def install_siginfo_handler
    return unless Signal.list.include? 'INFO'

    @old_siginfo = trap 'INFO' do
      puts @current if @current
    end
  end

  ##
  # Create an output dir if it doesn't exist. If it does exist, but doesn't
  # contain the flag file <tt>created.rid</tt> then we refuse to use it, as
  # we may clobber some manually generated documentation

  def setup_output_dir(dir, force)
    flag_file = output_flag_file dir

    last = {}

    if @options.dry_run then
      # do nothing
    elsif File.exist? dir then
      error "#{dir} exists and is not a directory" unless File.directory? dir

      begin
        File.open flag_file do |io|
          unless force then
            Time.parse io.gets

            io.each do |line|
              file, time = line.split "\t", 2
              time = Time.parse(time) rescue next
              last[file] = time
            end
          end
        end
      rescue SystemCallError, TypeError
        error <<-ERROR

Directory #{dir} already exists, but it looks like it isn't an RDoc directory.

Because RDoc doesn't want to risk destroying any of your existing files,
you'll need to specify a different output directory name (using the --op <dir>
option)

        ERROR
      end unless @options.force_output
    else
      FileUtils.mkdir_p dir
      FileUtils.touch flag_file
    end

    last
  end

  ##
  # Sets the current documentation tree to +store+ and sets the store's rdoc
  # driver to this instance.

  def store= store
    @store = store
    @store.rdoc = self
  end

  ##
  # Update the flag file in an output directory.

  def update_output_dir(op_dir, time, last = {})
    return if @options.dry_run or not @options.update_output_dir
    unless ENV['SOURCE_DATE_EPOCH'].nil?
      time = Time.at(ENV['SOURCE_DATE_EPOCH'].to_i).gmtime
    end

    File.open output_flag_file(op_dir), "w" do |f|
      f.puts time.rfc2822
      last.each do |n, t|
        f.puts "#{n}\t#{t.rfc2822}"
      end
    end
  end

  ##
  # Return the path name of the flag file in an output directory.

  def output_flag_file(op_dir)
    File.join op_dir, "created.rid"
  end

  ##
  # The .document file contains a list of file and directory name patterns,
  # representing candidates for documentation. It may also contain comments
  # (starting with '#')

  def parse_dot_doc_file in_dir, filename
    # read and strip comments
    patterns = File.read(filename).gsub(/#.*/, '')

    result = {}

    patterns.split(' ').each do |patt|
      candidates = Dir.glob(File.join(in_dir, patt))
      result.update normalized_file_list(candidates, false, @options.exclude)
    end

    result
  end

  ##
  # Given a list of files and directories, create a list of all the Ruby
  # files they contain.
  #
  # If +force_doc+ is true we always add the given files, if false, only
  # add files that we guarantee we can parse.  It is true when looking at
  # files given on the command line, false when recursing through
  # subdirectories.
  #
  # The effect of this is that if you want a file with a non-standard
  # extension parsed, you must name it explicitly.

  def normalized_file_list(relative_files, force_doc = false,
                           exclude_pattern = nil)
    file_list = {}

    relative_files.each do |rel_file_name|
      rel_file_name = rel_file_name.sub(/^\.\//, '')
      next if rel_file_name.end_with? 'created.rid'
      next if exclude_pattern && exclude_pattern =~ rel_file_name
      stat = File.stat rel_file_name rescue next

      case type = stat.ftype
      when "file" then
        mtime = (stat.mtime unless (last_modified = @last_modified[rel_file_name] and
                                    stat.mtime.to_i <= last_modified.to_i))

        if force_doc or RDoc::Parser.can_parse(rel_file_name) then
          file_list[rel_file_name] = mtime
        end
      when "directory" then
        next if UNCONDITIONALLY_SKIPPED_DIRECTORIES.include?(rel_file_name)

        basename = File.basename(rel_file_name)
        next if options.skip_tests && TEST_SUITE_DIRECTORY_NAMES.include?(basename)

        created_rid = File.join rel_file_name, "created.rid"
        next if File.file? created_rid

        dot_doc = File.join rel_file_name, RDoc::DOT_DOC_FILENAME

        if File.file? dot_doc then
          file_list.update(parse_dot_doc_file(rel_file_name, dot_doc))
        else
          file_list.update(list_files_in_directory(rel_file_name))
        end
      else
        warn "rdoc can't parse the #{type} #{rel_file_name}"
      end
    end

    file_list
  end

  ##
  # Return a list of the files to be processed in a directory. We know that
  # this directory doesn't have a .document file, so we're looking for real
  # files. However we may well contain subdirectories which must be tested
  # for .document files.

  def list_files_in_directory dir
    files = Dir.glob File.join(dir, "*")

    normalized_file_list files, false, @options.exclude
  end

  ##
  # Parses +filename+ and returns an RDoc::TopLevel

  def parse_file filename
    encoding = @options.encoding
    filename = filename.encode encoding

    @stats.add_file filename

    return if RDoc::Parser.binary? filename

    content = RDoc::Encoding.read_file filename, encoding

    return unless content

    filename_path = Pathname(filename).expand_path
    begin
      relative_path = filename_path.relative_path_from @options.root
    rescue ArgumentError
      relative_path = filename_path
    end

    if @options.page_dir and
       relative_path.to_s.start_with? @options.page_dir.to_s then
      relative_path =
        relative_path.relative_path_from @options.page_dir
    end

    top_level = @store.add_file filename, relative_name: relative_path.to_s

    parser = RDoc::Parser.for top_level, content, @options, @stats

    return unless parser

    parser.scan

    # restart documentation for the classes & modules found
    top_level.classes_or_modules.each do |cm|
      cm.done_documenting = false
    end

    top_level

  rescue Errno::EACCES => e
    $stderr.puts <<-EOF
Unable to read #{filename}, #{e.message}

Please check the permissions for this file.  Perhaps you do not have access to
it or perhaps the original author's permissions are to restrictive.  If the
this is not your library please report a bug to the author.
    EOF
  rescue => e
    $stderr.puts <<-EOF
Before reporting this, could you check that the file you're documenting
has proper syntax:

  #{Gem.ruby} -c #{filename}

RDoc is not a full Ruby parser and will fail when fed invalid ruby programs.

The internal error was:

\t(#{e.class}) #{e.message}

    EOF

    $stderr.puts e.backtrace.join("\n\t") if $DEBUG_RDOC

    raise e
  end

  ##
  # Parse each file on the command line, recursively entering directories.

  def parse_files files
    file_list = gather_files files
    @stats = RDoc::Stats.new @store, file_list.length, @options.verbosity

    return [] if file_list.empty?

    # This workaround can be removed after the :main: directive is removed
    original_options = @options.dup
    @stats.begin_adding

    file_info = file_list.map do |filename|
      @current = filename
      parse_file filename
    end.compact

    @store.resolve_c_superclasses

    @stats.done_adding
    @options = original_options

    file_info
  end

  ##
  # Removes file extensions known to be unparseable from +files+ and TAGS
  # files for emacs and vim.

  def remove_unparseable files
    files.reject do |file, *|
      file =~ /\.(?:class|eps|erb|scpt\.txt|svg|ttf|yml)$/i or
        (file =~ /tags$/i and
         /\A(\f\n[^,]+,\d+$|!_TAG_)/.match?(File.binread(file, 100)))
    end
  end

  ##
  # Generates documentation or a coverage report depending upon the settings
  # in +options+.
  #
  # +options+ can be either an RDoc::Options instance or an array of strings
  # equivalent to the strings that would be passed on the command line like
  # <tt>%w[-q -o doc -t My\ Doc\ Title]</tt>.  #document will automatically
  # call RDoc::Options#finish if an options instance was given.
  #
  # For a list of options, see either RDoc::Options or <tt>rdoc --help</tt>.
  #
  # By default, output will be stored in a directory called "doc" below the
  # current directory, so make sure you're somewhere writable before invoking.

  def document options
    self.store = RDoc::Store.new

    if RDoc::Options === options then
      @options = options
    else
      @options = RDoc::Options.load_options
      @options.parse options
    end
    @options.finish

    if @options.pipe then
      handle_pipe
      exit
    end

    unless @options.coverage_report then
      @last_modified = setup_output_dir @options.op_dir, @options.force_update
    end

    @store.encoding = @options.encoding
    @store.dry_run  = @options.dry_run
    @store.main     = @options.main_page
    @store.title    = @options.title
    @store.path     = @options.op_dir

    @start_time = Time.now

    @store.load_cache

    file_info = parse_files @options.files

    @options.default_title = "RDoc Documentation"

    @store.complete @options.visibility

    @stats.coverage_level = @options.coverage_report

    if @options.coverage_report then
      puts

      puts @stats.report.accept RDoc::Markup::ToRdoc.new
    elsif file_info.empty? then
      $stderr.puts "\nNo newer files." unless @options.quiet
    else
      gen_klass = @options.generator

      @generator = gen_klass.new @store, @options

      generate
    end

    if @stats and (@options.coverage_report or not @options.quiet) then
      puts
      puts @stats.summary.accept RDoc::Markup::ToRdoc.new
    end

    exit @stats.fully_documented? if @options.coverage_report
  end

  ##
  # Generates documentation for +file_info+ (from #parse_files) into the
  # output dir using the generator selected
  # by the RDoc options

  def generate
    if @options.dry_run then
      # do nothing
      @generator.generate
    else
      Dir.chdir @options.op_dir do
        unless @options.quiet then
          $stderr.puts "\nGenerating #{@generator.class.name.sub(/^.*::/, '')} format into #{Dir.pwd}..."
          $stderr.puts "\nYou can visit the home page at: \e]8;;file://#{Dir.pwd}/index.html\e\\file://#{Dir.pwd}/index.html\e]8;;\e\\"
        end

        @generator.generate
        update_output_dir '.', @start_time, @last_modified
      end
    end
  end

  ##
  # Removes a siginfo handler and replaces the previous

  def remove_siginfo_handler
    return unless Signal.list.key? 'INFO'

    handler = @old_siginfo || 'DEFAULT'

    trap 'INFO', handler
  end

end

begin
  require 'rubygems'

  rdoc_extensions = Gem.find_latest_files 'rdoc/discover'

  rdoc_extensions.each do |extension|
    begin
      load extension
    rescue => e
      warn "error loading #{extension.inspect}: #{e.message} (#{e.class})"
      warn "\t#{e.backtrace.join "\n\t"}" if $DEBUG
    end
  end
rescue LoadError
end

# require built-in generators after discovery in case they've been replaced
require_relative 'generator/darkfish'
require_relative 'generator/ri'
require_relative 'generator/pot'
PK)J[
����,share/gems/gems/rdoc-6.10.0/lib/rdoc/i18n.rbnu�[���# frozen_string_literal: true
##
# This module provides i18n related features.

module RDoc::I18n

  autoload :Locale, "#{__dir__}/i18n/locale"
  require_relative 'i18n/text'

end
PK)J[1�u6pp,share/gems/gems/rdoc-6.10.0/lib/rdoc/text.rbnu�[���# frozen_string_literal: true

##
# For RDoc::Text#to_html

require 'strscan'

##
# Methods for manipulating comment text

module RDoc::Text

  ##
  # The language for this text.  This affects stripping comments
  # markers.

  attr_accessor :language

  ##
  # Maps markup formats to classes that can parse them.  If the format is
  # unknown, "rdoc" format is used.

  MARKUP_FORMAT = {
    'markdown' => RDoc::Markdown,
    'rdoc'     => RDoc::Markup,
    'rd'       => RDoc::RD,
    'tomdoc'   => RDoc::TomDoc,
  }

  MARKUP_FORMAT.default = RDoc::Markup

  ##
  # Maps an encoding to a Hash of characters properly transcoded for that
  # encoding.
  #
  # See also encode_fallback.

  TO_HTML_CHARACTERS = Hash.new do |h, encoding|
    h[encoding] = {
      :close_dquote => encode_fallback('”', encoding, '"'),
      :close_squote => encode_fallback('’', encoding, '\''),
      :copyright    => encode_fallback('©', encoding, '(c)'),
      :ellipsis     => encode_fallback('…', encoding, '...'),
      :em_dash      => encode_fallback('—', encoding, '---'),
      :en_dash      => encode_fallback('–', encoding, '--'),
      :open_dquote  => encode_fallback('“', encoding, '"'),
      :open_squote  => encode_fallback('‘', encoding, '\''),
      :trademark    => encode_fallback('®', encoding, '(r)'),
    }
  end

  ##
  # Transcodes +character+ to +encoding+ with a +fallback+ character.

  def self.encode_fallback character, encoding, fallback
    character.encode(encoding, :fallback => { character => fallback },
                     :undef => :replace, :replace => fallback)
  end

  ##
  # Expands tab characters in +text+ to eight spaces

  def expand_tabs text
    expanded = []

    text.each_line do |line|
      nil while line.gsub!(/(?:\G|\r)((?:.{8})*?)([^\t\r\n]{0,7})\t/) do
        r = "#{$1}#{$2}#{' ' * (8 - $2.size)}"
        r = RDoc::Encoding.change_encoding r, text.encoding
        r
      end

      expanded << line
    end

    expanded.join
  end

  ##
  # Flush +text+ left based on the shortest line

  def flush_left text
    indent = 9999

    text.each_line do |line|
      line_indent = line =~ /\S/ || 9999
      indent = line_indent if indent > line_indent
    end

    empty = ''
    empty = RDoc::Encoding.change_encoding empty, text.encoding

    text.gsub(/^ {0,#{indent}}/, empty)
  end

  ##
  # Convert a string in markup format into HTML.
  #
  # Requires the including class to implement #formatter

  def markup text
    if @store.rdoc.options
      locale = @store.rdoc.options.locale
    else
      locale = nil
    end
    if locale
      i18n_text = RDoc::I18n::Text.new(text)
      text = i18n_text.translate(locale)
    end
    parse(text).accept formatter
  end

  ##
  # Strips hashes, expands tabs then flushes +text+ to the left

  def normalize_comment text
    return text if text.empty?

    case language
    when :ruby
      text = strip_hashes text
    when :c
      text = strip_stars text
    end
    text = expand_tabs    text
    text = flush_left     text
    text = strip_newlines text
    text
  end

  ##
  # Normalizes +text+ then builds a RDoc::Markup::Document from it

  def parse text, format = 'rdoc'
    return text if RDoc::Markup::Document === text
    return text.parse if RDoc::Comment === text

    text = normalize_comment text # TODO remove, should not be necessary

    return RDoc::Markup::Document.new if text =~ /\A\n*\z/

    MARKUP_FORMAT[format].parse text
  end

  ##
  # The first +limit+ characters of +text+ as HTML

  def snippet text, limit = 100
    document = parse text

    RDoc::Markup::ToHtmlSnippet.new(options, limit).convert document
  end

  ##
  # Strips leading # characters from +text+

  def strip_hashes text
    return text if text =~ /^(?>\s*)[^\#]/

    empty = ''
    empty = RDoc::Encoding.change_encoding empty, text.encoding

    text.gsub(/^\s*(#+)/) { $1.tr '#', ' ' }.gsub(/^\s+$/, empty)
  end

  ##
  # Strips leading and trailing \n characters from +text+

  def strip_newlines text
    text.gsub(/\A\n*(.*?)\n*\z/m) do $1 end # block preserves String encoding
  end

  ##
  # Strips /* */ style comments

  def strip_stars text
    return text unless text =~ %r%/\*.*\*/%m

    encoding = text.encoding

    text = text.gsub %r%Document-method:\s+[\w:.#=!?|^&<>~+\-/*\%@`\[\]]+%, ''

    space = ' '
    space = RDoc::Encoding.change_encoding space, encoding if encoding

    text.sub!  %r%/\*+%       do space * $&.length end
    text.sub!  %r%\*+/%       do space * $&.length end
    text.gsub! %r%^[ \t]*\*%m do space * $&.length end

    empty = ''
    empty = RDoc::Encoding.change_encoding empty, encoding if encoding
    text.gsub(/^\s+$/, empty)
  end

  ##
  # Converts ampersand, dashes, ellipsis, quotes, copyright and registered
  # trademark symbols in +text+ to properly encoded characters.

  def to_html text
    html = (''.encode text.encoding).dup

    encoded = RDoc::Text::TO_HTML_CHARACTERS[text.encoding]

    s = StringScanner.new text
    insquotes = false
    indquotes = false
    after_word = nil

    until s.eos? do
      case
      when s.scan(/<(tt|code)>.*?<\/\1>/) then # skip contents of tt
        html << s.matched.gsub('\\\\', '\\')
      when s.scan(/<(tt|code)>.*?/) then
        warn "mismatched <#{s[1]}> tag" # TODO signal file/line
        html << s.matched
      when s.scan(/<[^>]+\/?s*>/) then # skip HTML tags
        html << s.matched
      when s.scan(/\\(\S)/) then # unhandled suppressed crossref
        html << s[1]
        after_word = nil
      when s.scan(/\.\.\.(\.?)/) then
        html << s[1] << encoded[:ellipsis]
        after_word = nil
      when s.scan(/\(c\)/i) then
        html << encoded[:copyright]
        after_word = nil
      when s.scan(/\(r\)/i) then
        html << encoded[:trademark]
        after_word = nil
      when s.scan(/---/) then
        html << encoded[:em_dash]
        after_word = nil
      when s.scan(/--/) then
        html << encoded[:en_dash]
        after_word = nil
      when s.scan(/&quot;|"/) then
        html << encoded[indquotes ? :close_dquote : :open_dquote]
        indquotes = !indquotes
        after_word = nil
      when s.scan(/``/) then # backtick double quote
        html << encoded[:open_dquote]
        after_word = nil
      when s.scan(/(?:&#39;|'){2}/) then # tick double quote
        html << encoded[:close_dquote]
        after_word = nil
      when s.scan(/`/) then # backtick
        if insquotes or after_word
          html << '`'
          after_word = false
        else
          html << encoded[:open_squote]
          insquotes = true
        end
      when s.scan(/&#39;|'/) then # single quote
        if insquotes
          html << encoded[:close_squote]
          insquotes = false
        elsif after_word
          # Mary's dog, my parents' house: do not start paired quotes
          html << encoded[:close_squote]
        else
          html << encoded[:open_squote]
          insquotes = true
        end

        after_word = nil
      else # advance to the next potentially significant character
        match = s.scan(/.+?(?=[<\\.("'`&-])/) #"

        if match then
          html << match
          after_word = match =~ /\w$/
        else
          html << s.rest
          break
        end
      end
    end

    html
  end

  ##
  # Wraps +txt+ to +line_len+

  def wrap(txt, line_len = 76)
    res = []
    sp = 0
    ep = txt.length

    while sp < ep
      # scan back for a space
      p = sp + line_len - 1
      if p >= ep
        p = ep
      else
        while p > sp and txt[p] != ?\s
          p -= 1
        end
        if p <= sp
          p = sp + line_len
          while p < ep and txt[p] != ?\s
            p += 1
          end
        end
      end
      res << txt[sp...p] << "\n"
      sp = p
      sp += 1 while sp < ep and txt[sp] == ?\s
    end

    res.join.strip
  end

  ##
  # Character class to be separated by a space when concatenating
  # lines.

  SPACE_SEPARATED_LETTER_CLASS = /[\p{Nd}\p{Lc}\p{Pc}]|[!-~&&\W]/

end
PK)J[�S�/�/�3share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/ruby.rbnu�[���# frozen_string_literal: true
##
# This file contains stuff stolen outright from:
#
#   rtags.rb -
#   ruby-lex.rb - ruby lexcal analyzer
#   ruby-token.rb - ruby tokens
#       by Keiju ISHITSUKA (Nippon Rational Inc.)
#

if ENV['RDOC_USE_PRISM_PARSER']
  require 'rdoc/parser/prism_ruby'
  RDoc::Parser.const_set(:Ruby, RDoc::Parser::PrismRuby)
  puts "========================================================================="
  puts "RDoc is using the experimental Prism parser to generate the documentation"
  puts "========================================================================="
  return
end

require 'ripper'
require_relative 'ripper_state_lex'

##
# Extracts code elements from a source file returning a TopLevel object
# containing the constituent file elements.
#
# This file is based on rtags
#
# RubyParser understands how to document:
# * classes
# * modules
# * methods
# * constants
# * aliases
# * private, public, protected
# * private_class_function, public_class_function
# * private_constant, public_constant
# * module_function
# * attr, attr_reader, attr_writer, attr_accessor
# * extra accessors given on the command line
# * metaprogrammed methods
# * require
# * include
#
# == Method Arguments
#
#--
# NOTE: I don't think this works, needs tests, remove the paragraph following
# this block when known to work
#
# The parser extracts the arguments from the method definition.  You can
# override this with a custom argument definition using the :args: directive:
#
#   ##
#   # This method tries over and over until it is tired
#
#   def go_go_go(thing_to_try, tries = 10) # :args: thing_to_try
#     puts thing_to_try
#     go_go_go thing_to_try, tries - 1
#   end
#
# If you have a more-complex set of overrides you can use the :call-seq:
# directive:
#++
#
# The parser extracts the arguments from the method definition.  You can
# override this with a custom argument definition using the :call-seq:
# directive:
#
#   ##
#   # This method can be called with a range or an offset and length
#   #
#   # :call-seq:
#   #   my_method(Range)
#   #   my_method(offset, length)
#
#   def my_method(*args)
#   end
#
# The parser extracts +yield+ expressions from method bodies to gather the
# yielded argument names.  If your method manually calls a block instead of
# yielding or you want to override the discovered argument names use
# the :yields: directive:
#
#   ##
#   # My method is awesome
#
#   def my_method(&block) # :yields: happy, times
#     block.call 1, 2
#   end
#
# == Metaprogrammed Methods
#
# To pick up a metaprogrammed method, the parser looks for a comment starting
# with '##' before an identifier:
#
#   ##
#   # This is a meta-programmed method!
#
#   add_my_method :meta_method, :arg1, :arg2
#
# The parser looks at the token after the identifier to determine the name, in
# this example, :meta_method.  If a name cannot be found, a warning is printed
# and 'unknown is used.
#
# You can force the name of a method using the :method: directive:
#
#   ##
#   # :method: some_method!
#
# By default, meta-methods are instance methods.  To indicate that a method is
# a singleton method instead use the :singleton-method: directive:
#
#   ##
#   # :singleton-method:
#
# You can also use the :singleton-method: directive with a name:
#
#   ##
#   # :singleton-method: some_method!
#
# You can define arguments for metaprogrammed methods via either the
# :call-seq:, :arg: or :args: directives.
#
# Additionally you can mark a method as an attribute by
# using :attr:, :attr_reader:, :attr_writer: or :attr_accessor:.  Just like
# for :method:, the name is optional.
#
#   ##
#   # :attr_reader: my_attr_name
#
# == Hidden methods and attributes
#
# You can provide documentation for methods that don't appear using
# the :method:, :singleton-method: and :attr: directives:
#
#   ##
#   # :attr_writer: ghost_writer
#   # There is an attribute here, but you can't see it!
#
#   ##
#   # :method: ghost_method
#   # There is a method here, but you can't see it!
#
#   ##
#   # this is a comment for a regular method
#
#   def regular_method() end
#
# Note that by default, the :method: directive will be ignored if there is a
# standard rdocable item following it.

class RDoc::Parser::Ruby < RDoc::Parser

  parse_files_matching(/\.rbw?$/)

  include RDoc::TokenStream
  include RDoc::Parser::RubyTools

  ##
  # RDoc::NormalClass type

  NORMAL = "::"

  ##
  # RDoc::SingleClass type

  SINGLE = "<<"

  ##
  # Creates a new Ruby parser.

  def initialize(top_level, file_name, content, options, stats)
    super

    content = handle_tab_width(content)

    @size = 0
    @token_listeners = nil
    content = RDoc::Encoding.remove_magic_comment content
    @scanner = RDoc::Parser::RipperStateLex.parse(content)
    @content = content
    @scanner_point = 0
    @prev_seek = nil
    @markup = @options.markup
    @track_visibility = :nodoc != @options.visibility
    @encoding = @options.encoding

    reset
  end

  ##
  # Return +true+ if +tk+ is a newline.

  def tk_nl?(tk)
    :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]
  end

  ##
  # Retrieves the read token stream and replaces +pattern+ with +replacement+
  # using gsub.  If the result is only a ";" returns an empty string.

  def get_tkread_clean pattern, replacement # :nodoc:
    read = get_tkread.gsub(pattern, replacement).strip
    return '' if read == ';'
    read
  end

  ##
  # Extracts the visibility information for the visibility token +tk+
  # and +single+ class type identifier.
  #
  # Returns the visibility type (a string), the visibility (a symbol) and
  # +singleton+ if the methods following should be converted to singleton
  # methods.

  def get_visibility_information tk, single # :nodoc:
    vis_type  = tk[:text]
    singleton = single == SINGLE

    vis =
      case vis_type
      when 'private'   then :private
      when 'protected' then :protected
      when 'public'    then :public
      when 'private_class_method' then
        singleton = true
        :private
      when 'public_class_method' then
        singleton = true
        :public
      when 'module_function' then
        singleton = true
        :public
      else
        raise RDoc::Error, "Invalid visibility: #{tk.name}"
      end

    return vis_type, vis, singleton
  end

  ##
  # Look for the first comment in a file that isn't a shebang line.

  def collect_first_comment
    skip_tkspace
    comment = ''.dup
    comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
    first_line = true
    first_comment_tk_kind = nil
    line_no = nil

    tk = get_tk

    while tk && (:on_comment == tk[:kind] or :on_embdoc == tk[:kind])
      comment_body = retrieve_comment_body(tk)
      if first_line and comment_body =~ /\A#!/ then
        skip_tkspace
        tk = get_tk
      elsif first_line and comment_body =~ /\A#\s*-\*-/ then
        first_line = false
        skip_tkspace
        tk = get_tk
      else
        break if first_comment_tk_kind and not first_comment_tk_kind === tk[:kind]
        first_comment_tk_kind = tk[:kind]

        line_no = tk[:line_no] if first_line
        first_line = false
        comment << comment_body
        tk = get_tk

        if :on_nl === tk then
          skip_tkspace_without_nl
          tk = get_tk
        end
      end
    end

    unget_tk tk

    new_comment comment, line_no
  end

  ##
  # Consumes trailing whitespace from the token stream

  def consume_trailing_spaces # :nodoc:
    skip_tkspace_without_nl
  end

  ##
  # Creates a new attribute in +container+ with +name+.

  def create_attr container, single, name, rw, comment # :nodoc:
    att = RDoc::Attr.new get_tkread, name, rw, comment, single == SINGLE
    record_location att

    container.add_attribute att
    @stats.add_attribute att

    att
  end

  ##
  # Creates a module alias in +container+ at +rhs_name+ (or at the top-level
  # for "::") with the name from +constant+.

  def create_module_alias container, constant, rhs_name # :nodoc:
    mod = if rhs_name =~ /^::/ then
            @store.find_class_or_module rhs_name
          else
            container.find_module_named rhs_name
          end

    container.add_module_alias mod, rhs_name, constant, @top_level
  end

  ##
  # Aborts with +msg+

  def error(msg)
    msg = make_message msg

    abort msg
  end

  ##
  # Looks for a true or false token.

  def get_bool
    skip_tkspace
    tk = get_tk
    if :on_kw == tk[:kind] && 'true' == tk[:text]
      true
    elsif :on_kw == tk[:kind] && ('false' == tk[:text] || 'nil' == tk[:text])
      false
    else
      unget_tk tk
      true
    end
  end

  ##
  # Look for the name of a class of module (optionally with a leading :: or
  # with :: separated named) and return the ultimate name, the associated
  # container, and the given name (with the ::).

  def get_class_or_module container, ignore_constants = false
    skip_tkspace
    name_t = get_tk
    given_name = ''.dup

    # class ::A -> A is in the top level
    if :on_op == name_t[:kind] and '::' == name_t[:text] then # bug
      name_t = get_tk
      container = @top_level
      given_name << '::'
    end

    skip_tkspace_without_nl
    given_name << name_t[:text]

    is_self = name_t[:kind] == :on_op && name_t[:text] == '<<'
    new_modules = []
    while !is_self && (tk = peek_tk) and :on_op == tk[:kind] and '::' == tk[:text] do
      prev_container = container
      container = container.find_module_named name_t[:text]
      container ||=
        if ignore_constants then
          c = RDoc::NormalModule.new name_t[:text]
          c.store = @store
          new_modules << [prev_container, c]
          c
        else
          c = prev_container.add_module RDoc::NormalModule, name_t[:text]
          c.ignore unless prev_container.document_children
          @top_level.add_to_classes_or_modules c
          c
        end

      record_location container

      get_tk
      skip_tkspace
      if :on_lparen == peek_tk[:kind] # ProcObjectInConstant::()
        parse_method_or_yield_parameters
        break
      end
      name_t = get_tk
      unless :on_const == name_t[:kind] || :on_ident == name_t[:kind]
        raise RDoc::Error, "Invalid class or module definition: #{given_name}"
      end
      if prev_container == container and !ignore_constants
        given_name = name_t[:text]
      else
        given_name << '::' + name_t[:text]
      end
    end

    skip_tkspace_without_nl

    return [container, name_t, given_name, new_modules]
  end

  ##
  # Skip opening parentheses and yield the block.
  # Skip closing parentheses too when exists.

  def skip_parentheses(&block)
    left_tk = peek_tk

    if :on_lparen == left_tk[:kind]
      get_tk

      ret = skip_parentheses(&block)

      right_tk = peek_tk
      if :on_rparen == right_tk[:kind]
        get_tk
      end

      ret
    else
      yield
    end
  end

  ##
  # Return a superclass, which can be either a constant of an expression

  def get_class_specification
    tk = peek_tk
    if tk.nil?
      return ''
    elsif :on_kw == tk[:kind] && 'self' == tk[:text]
      return 'self'
    elsif :on_gvar == tk[:kind]
      return ''
    end

    res = get_constant

    skip_tkspace_without_nl

    get_tkread # empty out read buffer

    tk = get_tk
    return res unless tk

    case tk[:kind]
    when :on_nl, :on_comment, :on_embdoc, :on_semicolon then
      unget_tk(tk)
      return res
    end

    res += parse_call_parameters(tk)
    res
  end

  ##
  # Parse a constant, which might be qualified by one or more class or module
  # names

  def get_constant
    res = ""
    skip_tkspace_without_nl
    tk = get_tk

    while tk && ((:on_op == tk[:kind] && '::' == tk[:text]) || :on_const == tk[:kind]) do
      res += tk[:text]
      tk = get_tk
    end

    unget_tk(tk)
    res
  end

  ##
  # Get an included module that may be surrounded by parens

  def get_included_module_with_optional_parens
    skip_tkspace_without_nl
    get_tkread
    tk = get_tk
    end_token = get_end_token tk
    return '' unless end_token

    nest = 0
    continue = false
    only_constant = true

    while tk != nil do
      is_element_of_constant = false
      case tk[:kind]
      when :on_semicolon then
        break if nest == 0
      when :on_lbracket then
        nest += 1
      when :on_rbracket then
        nest -= 1
      when :on_lbrace then
        nest += 1
      when :on_rbrace then
        nest -= 1
        if nest <= 0
          # we might have a.each { |i| yield i }
          unget_tk(tk) if nest < 0
          break
        end
      when :on_lparen then
        nest += 1
      when end_token[:kind] then
        if end_token[:kind] == :on_rparen
          nest -= 1
          break if nest <= 0
        else
          break if nest <= 0
        end
      when :on_rparen then
        nest -= 1
      when :on_comment, :on_embdoc then
        @read.pop
        if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
          (!continue or (tk[:state] & Ripper::EXPR_LABEL) != 0) then
          break if !continue and nest <= 0
        end
      when :on_comma then
        continue = true
      when :on_ident then
        continue = false if continue
      when :on_kw then
        case tk[:text]
        when 'def', 'do', 'case', 'for', 'begin', 'class', 'module'
          nest += 1
        when 'if', 'unless', 'while', 'until', 'rescue'
          # postfix if/unless/while/until/rescue must be EXPR_LABEL
          nest += 1 unless (tk[:state] & Ripper::EXPR_LABEL) != 0
        when 'end'
          nest -= 1
          break if nest == 0
        end
      when :on_const then
        is_element_of_constant = true
      when :on_op then
        is_element_of_constant = true if '::' == tk[:text]
      end
      only_constant = false unless is_element_of_constant
      tk = get_tk
    end

    if only_constant
      get_tkread_clean(/\s+/, ' ')
    else
      ''
    end
  end

  ##
  # Little hack going on here. In the statement:
  #
  #   f = 2*(1+yield)
  #
  # We see the RPAREN as the next token, so we need to exit early.  This still
  # won't catch all cases (such as "a = yield + 1"

  def get_end_token tk # :nodoc:
    case tk[:kind]
    when :on_lparen
      token = RDoc::Parser::RipperStateLex::Token.new
      token[:kind] = :on_rparen
      token[:text] = ')'
      token
    when :on_rparen
      nil
    else
      token = RDoc::Parser::RipperStateLex::Token.new
      token[:kind] = :on_nl
      token[:text] = "\n"
      token
    end
  end

  ##
  # Retrieves the method container for a singleton method.

  def get_method_container container, name_t # :nodoc:
    prev_container = container
    container = container.find_module_named(name_t[:text])

    unless container then
      constant = prev_container.constants.find do |const|
        const.name == name_t[:text]
      end

      if constant then
        parse_method_dummy prev_container
        return
      end
    end

    unless container then
      # TODO seems broken, should starting at Object in @store
      obj = name_t[:text].split("::").inject(Object) do |state, item|
        state.const_get(item)
      end rescue nil

      type = obj.class == Class ? RDoc::NormalClass : RDoc::NormalModule

      unless [Class, Module].include?(obj.class) then
        warn("Couldn't find #{name_t[:text]}. Assuming it's a module")
      end

      if type == RDoc::NormalClass then
        sclass = obj.superclass ? obj.superclass.name : nil
        container = prev_container.add_class type, name_t[:text], sclass
      else
        container = prev_container.add_module type, name_t[:text]
      end

      record_location container
    end

    container
  end

  ##
  # Extracts a name or symbol from the token stream.

  def get_symbol_or_name
    tk = get_tk
    case tk[:kind]
    when :on_symbol then
      text = tk[:text].sub(/^:/, '')

      next_tk = peek_tk
      if next_tk && :on_op == next_tk[:kind] && '=' == next_tk[:text] then
        get_tk
        text << '='
      end

      text
    when :on_ident, :on_const, :on_gvar, :on_cvar, :on_ivar, :on_op, :on_kw then
      tk[:text]
    when :on_tstring, :on_dstring then
      tk[:text][1..-2]
    else
      raise RDoc::Error, "Name or symbol expected (got #{tk})"
    end
  end

  ##
  # Marks containers between +container+ and +ancestor+ as ignored

  def suppress_parents container, ancestor # :nodoc:
    while container and container != ancestor do
      container.suppress unless container.documented?
      container = container.parent
    end
  end

  ##
  # Look for directives in a normal comment block:
  #
  #   # :stopdoc:
  #   # Don't display comment from this point forward
  #
  # This routine modifies its +comment+ parameter.

  def look_for_directives_in container, comment
    @preprocess.handle comment, container do |directive, param|
      case directive
      when 'method', 'singleton-method',
           'attr', 'attr_accessor', 'attr_reader', 'attr_writer' then
        false # handled elsewhere
      when 'section' then
        break unless container.kind_of?(RDoc::Context)
        container.set_current_section param, comment.dup
        comment.text = ''
        break
      end
    end

    comment.remove_private
  end

  ##
  # Adds useful info about the parser to +message+

  def make_message message
    prefix = "#{@file_name}:".dup

    tk = peek_tk
    prefix << "#{tk[:line_no]}:#{tk[:char_no]}:" if tk

    "#{prefix} #{message}"
  end

  ##
  # Creates a comment with the correct format

  def new_comment comment, line_no = nil
    c = RDoc::Comment.new comment, @top_level, :ruby
    c.line = line_no
    c.format = @markup
    c
  end

  ##
  # Creates an RDoc::Attr for the name following +tk+, setting the comment to
  # +comment+.

  def parse_attr(context, single, tk, comment)
    line_no = tk[:line_no]

    args = parse_symbol_arg 1
    if args.size > 0 then
      name = args[0]
      rw = "R"
      skip_tkspace_without_nl
      tk = get_tk

      if :on_comma == tk[:kind] then
        rw = "RW" if get_bool
      else
        unget_tk tk
      end

      att = create_attr context, single, name, rw, comment
      att.line   = line_no

      read_documentation_modifiers att, RDoc::ATTR_MODIFIERS
    else
      warn "'attr' ignored - looks like a variable"
    end
  end

  ##
  # Creates an RDoc::Attr for each attribute listed after +tk+, setting the
  # comment for each to +comment+.

  def parse_attr_accessor(context, single, tk, comment)
    line_no = tk[:line_no]

    args = parse_symbol_arg
    rw = "?"

    tmp = RDoc::CodeObject.new
    read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS
    # TODO In most other places we let the context keep track of document_self
    # and add found items appropriately but here we do not.  I'm not sure why.
    return if @track_visibility and not tmp.document_self

    case tk[:text]
    when "attr_reader"   then rw = "R"
    when "attr_writer"   then rw = "W"
    when "attr_accessor" then rw = "RW"
    else
      rw = '?'
    end

    for name in args
      att = create_attr context, single, name, rw, comment
      att.line   = line_no
    end
  end

  ##
  # Parses an +alias+ in +context+ with +comment+

  def parse_alias(context, single, tk, comment)
    line_no = tk[:line_no]

    skip_tkspace

    if :on_lparen === peek_tk[:kind] then
      get_tk
      skip_tkspace
    end

    new_name = get_symbol_or_name

    skip_tkspace
    if :on_comma === peek_tk[:kind] then
      get_tk
      skip_tkspace
    end

    begin
      old_name = get_symbol_or_name
    rescue RDoc::Error
      return
    end

    al = RDoc::Alias.new(get_tkread, old_name, new_name, comment,
                         single == SINGLE)
    record_location al
    al.line   = line_no

    read_documentation_modifiers al, RDoc::ATTR_MODIFIERS
    if al.document_self or not @track_visibility
      context.add_alias al
      @stats.add_alias al
    end

    al
  end

  ##
  # Extracts call parameters from the token stream.

  def parse_call_parameters(tk)
    end_token = case tk[:kind]
                when :on_lparen
                  :on_rparen
                when :on_rparen
                  return ""
                else
                  :on_nl
                end
    nest = 0

    loop do
      break if tk.nil?
      case tk[:kind]
      when :on_semicolon
        break
      when :on_lparen
        nest += 1
      when end_token
        if end_token == :on_rparen
          nest -= 1
          break if RDoc::Parser::RipperStateLex.end?(tk) and nest <= 0
        else
          break if RDoc::Parser::RipperStateLex.end?(tk)
        end
      when :on_comment, :on_embdoc
        unget_tk(tk)
        break
      when :on_op
        if tk[:text] =~ /^(.{1,2})?=$/
          unget_tk(tk)
          break
        end
      end
      tk = get_tk
    end

    get_tkread_clean "\n", " "
  end

  ##
  # Parses a class in +context+ with +comment+

  def parse_class container, single, tk, comment
    line_no = tk[:line_no]

    declaration_context = container
    container, name_t, given_name, = get_class_or_module container

    if name_t[:kind] == :on_const
      cls = parse_class_regular container, declaration_context, single,
        name_t, given_name, comment
    elsif name_t[:kind] == :on_op && name_t[:text] == '<<'
      case name = skip_parentheses { get_class_specification }
      when 'self', container.name
        read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
        parse_statements container, SINGLE
        return # don't update line
      else
        cls = parse_class_singleton container, name, comment
      end
    else
      warn "Expected class name or '<<'. Got #{name_t[:kind]}: #{name_t[:text].inspect}"
      return
    end

    cls.line   = line_no

    # after end modifiers
    read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS

    cls
  end

  ##
  # Parses and creates a regular class

  def parse_class_regular container, declaration_context, single, # :nodoc:
                          name_t, given_name, comment
    superclass = '::Object'

    if given_name =~ /^::/ then
      declaration_context = @top_level
      given_name = $'
    end

    tk = peek_tk
    if tk[:kind] == :on_op && tk[:text] == '<' then
      get_tk
      skip_tkspace
      superclass = get_class_specification
      superclass = '(unknown)' if superclass.empty?
    end

    cls_type = single == SINGLE ? RDoc::SingleClass : RDoc::NormalClass
    cls = declaration_context.add_class cls_type, given_name, superclass
    cls.ignore unless container.document_children

    read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
    record_location cls

    cls.add_comment comment, @top_level

    @top_level.add_to_classes_or_modules cls
    @stats.add_class cls

    suppress_parents container, declaration_context unless cls.document_self

    parse_statements cls

    cls
  end

  ##
  # Parses a singleton class in +container+ with the given +name+ and
  # +comment+.

  def parse_class_singleton container, name, comment # :nodoc:
    other = @store.find_class_named name

    unless other then
      if name =~ /^::/ then
        name = $'
        container = @top_level
      end

      other = container.add_module RDoc::NormalModule, name
      record_location other

      # class << $gvar
      other.ignore if name.empty?

      other.add_comment comment, @top_level
    end

    # notify :nodoc: all if not a constant-named class/module
    # (and remove any comment)
    unless name =~ /\A(::)?[A-Z]/ then
      other.document_self = nil
      other.document_children = false
      other.clear_comment
    end

    @top_level.add_to_classes_or_modules other
    @stats.add_class other

    read_documentation_modifiers other, RDoc::CLASS_MODIFIERS
    parse_statements(other, SINGLE)

    other
  end

  ##
  # Parses a constant in +context+ with +comment+.  If +ignore_constants+ is
  # true, no found constants will be added to RDoc.

  def parse_constant container, tk, comment, ignore_constants = false
    line_no = tk[:line_no]

    name = tk[:text]
    skip_tkspace_without_nl

    return unless name =~ /^\w+$/

    new_modules = []
    if :on_op == peek_tk[:kind] && '::' == peek_tk[:text] then
      unget_tk tk

      container, name_t, _, new_modules = get_class_or_module container, true

      name = name_t[:text]
    end

    is_array_or_hash = false
    if peek_tk && :on_lbracket == peek_tk[:kind]
      get_tk
      nest = 1
      while bracket_tk = get_tk
        case bracket_tk[:kind]
        when :on_lbracket
          nest += 1
        when :on_rbracket
          nest -= 1
          break if nest == 0
        end
      end
      skip_tkspace_without_nl
      is_array_or_hash = true
    end

    unless peek_tk && :on_op == peek_tk[:kind] && '=' == peek_tk[:text] then
      return false
    end
    get_tk

    unless ignore_constants
      new_modules.each do |prev_c, new_module|
        prev_c.add_module_by_normal_module new_module
        new_module.ignore unless prev_c.document_children
        @top_level.add_to_classes_or_modules new_module
      end
    end

    value = ''
    con = RDoc::Constant.new name, value, comment

    body = parse_constant_body container, con, is_array_or_hash

    return unless body

    con.value = body
    record_location con
    con.line   = line_no
    read_documentation_modifiers con, RDoc::CONSTANT_MODIFIERS

    return if is_array_or_hash

    @stats.add_constant con
    container.add_constant con

    true
  end

  def parse_constant_body container, constant, is_array_or_hash # :nodoc:
    nest     = 0
    rhs_name = ''.dup

    get_tkread

    tk = get_tk

    body = nil
    loop do
      break if tk.nil?
      if :on_semicolon == tk[:kind] then
        break if nest <= 0
      elsif [:on_tlambeg, :on_lparen, :on_lbrace, :on_lbracket].include?(tk[:kind]) then
        nest += 1
      elsif (:on_kw == tk[:kind] && 'def' == tk[:text]) then
        nest += 1
      elsif (:on_kw == tk[:kind] && %w{do if unless case begin}.include?(tk[:text])) then
        if (tk[:state] & Ripper::EXPR_LABEL) == 0
          nest += 1
        end
      elsif [:on_rparen, :on_rbrace, :on_rbracket].include?(tk[:kind]) ||
            (:on_kw == tk[:kind] && 'end' == tk[:text]) then
        nest -= 1
      elsif (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) then
        unget_tk tk
        if nest <= 0 and RDoc::Parser::RipperStateLex.end?(tk) then
          body = get_tkread_clean(/^[ \t]+/, '')
          read_documentation_modifiers constant, RDoc::CONSTANT_MODIFIERS
          break
        else
          read_documentation_modifiers constant, RDoc::CONSTANT_MODIFIERS
        end
      elsif :on_const == tk[:kind] then
        rhs_name << tk[:text]

        next_tk = peek_tk
        if nest <= 0 and (next_tk.nil? || :on_nl == next_tk[:kind]) then
          create_module_alias container, constant, rhs_name unless is_array_or_hash
          break
        end
      elsif :on_nl == tk[:kind] then
        if nest <= 0 and RDoc::Parser::RipperStateLex.end?(tk) then
          unget_tk tk
          break
        end
      elsif :on_op == tk[:kind] && '::' == tk[:text]
        rhs_name << '::'
      end
      tk = get_tk
    end

    body ? body : get_tkread_clean(/^[ \t]+/, '')
  end

  ##
  # Generates an RDoc::Method or RDoc::Attr from +comment+ by looking for
  # :method: or :attr: directives in +comment+.

  def parse_comment container, tk, comment
    return parse_comment_tomdoc container, tk, comment if @markup == 'tomdoc'
    column  = tk[:char_no]
    line_no = comment.line.nil? ? tk[:line_no] : comment.line

    comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3')
    singleton = !!$~

    co =
      if (comment.text = comment.text.sub(/^# +:?method: *(\S*).*?\n/i, '')) && !!$~ then
        line_no += $`.count("\n")
        parse_comment_ghost container, comment.text, $1, column, line_no, comment
      elsif (comment.text = comment.text.sub(/# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i, '')) && !!$~ then
        parse_comment_attr container, $1, $3, comment
      end

    if co then
      co.singleton = singleton
      co.line      = line_no
    end

    true
  end

  ##
  # Parse a comment that is describing an attribute in +container+ with the
  # given +name+ and +comment+.

  def parse_comment_attr container, type, name, comment # :nodoc:
    return if name.empty?

    rw = case type
         when 'attr_reader' then 'R'
         when 'attr_writer' then 'W'
         else 'RW'
         end

    create_attr container, NORMAL, name, rw, comment
  end

  def parse_comment_ghost container, text, name, column, line_no, # :nodoc:
                          comment
    name = nil if name.empty?

    meth = RDoc::GhostMethod.new get_tkread, name
    record_location meth

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [position_comment, newline, indent]

    meth.params =
      if text.sub!(/^#\s+:?args?:\s*(.*?)\s*$/i, '') then
        $1
      else
        ''
      end

    comment.normalize
    comment.extract_call_seq meth

    return unless meth.name

    container.add_method meth

    meth.comment = comment

    @stats.add_method meth

    meth
  end

  ##
  # Creates an RDoc::Method on +container+ from +comment+ if there is a
  # Signature section in the comment

  def parse_comment_tomdoc container, tk, comment
    return unless signature = RDoc::TomDoc.signature(comment)
    column  = tk[:char_no]
    line_no = tk[:line_no]

    name, = signature.split %r%[ \(]%, 2

    meth = RDoc::GhostMethod.new get_tkread, name
    record_location meth
    meth.line      = line_no

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [position_comment, newline, indent]

    meth.call_seq = signature

    comment.normalize

    return unless meth.name

    container.add_method meth

    meth.comment = comment

    @stats.add_method meth
  end

  ##
  # Parses an +include+ or +extend+, indicated by the +klass+ and adds it to
  # +container+ # with +comment+

  def parse_extend_or_include klass, container, comment # :nodoc:
    loop do
      skip_tkspace_comment

      name = get_included_module_with_optional_parens

      unless name.empty? then
        obj = container.add klass, name, comment
        record_location obj
      end

      return if peek_tk.nil? || :on_comma != peek_tk[:kind]

      get_tk
    end
  end

  ##
  # Parses an +included+ with a block feature of ActiveSupport::Concern.

  def parse_included_with_activesupport_concern container, comment # :nodoc:
    skip_tkspace_without_nl
    tk = get_tk
    unless tk[:kind] == :on_lbracket || (tk[:kind] == :on_kw && tk[:text] == 'do')
      unget_tk tk
      return nil # should be a block
    end

    parse_statements container

    container
  end

  ##
  # Parses identifiers that can create new methods or change visibility.
  #
  # Returns true if the comment was not consumed.

  def parse_identifier container, single, tk, comment # :nodoc:
    case tk[:text]
    when 'private', 'protected', 'public', 'private_class_method',
         'public_class_method', 'module_function' then
      parse_visibility container, single, tk
      return true
    when 'private_constant', 'public_constant'
      parse_constant_visibility container, single, tk
      return true
    when 'attr' then
      parse_attr container, single, tk, comment
    when /^attr_(reader|writer|accessor)$/ then
      parse_attr_accessor container, single, tk, comment
    when 'alias_method' then
      parse_alias container, single, tk, comment
    when 'require', 'include' then
      # ignore
    else
      if comment.text =~ /\A#\#$/ then
        case comment.text
        when /^# +:?attr(_reader|_writer|_accessor)?:/ then
          parse_meta_attr container, single, tk, comment
        else
          method = parse_meta_method container, single, tk, comment
          method.params = container.params if
            container.params
          method.block_params = container.block_params if
            container.block_params
        end
      end
    end

    false
  end

  ##
  # Parses a meta-programmed attribute and creates an RDoc::Attr.
  #
  # To create foo and bar attributes on class C with comment "My attributes":
  #
  #   class C
  #
  #     ##
  #     # :attr:
  #     #
  #     # My attributes
  #
  #     my_attr :foo, :bar
  #
  #   end
  #
  # To create a foo attribute on class C with comment "My attribute":
  #
  #   class C
  #
  #     ##
  #     # :attr: foo
  #     #
  #     # My attribute
  #
  #     my_attr :foo, :bar
  #
  #   end

  def parse_meta_attr(context, single, tk, comment)
    args = parse_symbol_arg
    rw = "?"

    # If nodoc is given, don't document any of them

    tmp = RDoc::CodeObject.new
    read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS

    regexp = /^# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i
    if regexp =~ comment.text then
      comment.text = comment.text.sub(regexp, '')
      rw = case $1
           when 'attr_reader' then 'R'
           when 'attr_writer' then 'W'
           else 'RW'
           end
      name = $3 unless $3.empty?
    end

    if name then
      att = create_attr context, single, name, rw, comment
    else
      args.each do |attr_name|
        att = create_attr context, single, attr_name, rw, comment
      end
    end

    att
  end

  ##
  # Parses a meta-programmed method

  def parse_meta_method(container, single, tk, comment)
    column  = tk[:char_no]
    line_no = tk[:line_no]

    start_collecting_tokens
    add_token tk
    add_token_listener self

    skip_tkspace_without_nl

    comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3')
    singleton = !!$~

    name = parse_meta_method_name comment, tk

    return unless name

    meth = RDoc::MetaMethod.new get_tkread, name
    record_location meth
    meth.line   = line_no
    meth.singleton = singleton

    remove_token_listener self

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [position_comment, newline, indent]
    meth.add_tokens @token_stream

    parse_meta_method_params container, single, meth, tk, comment

    meth.comment = comment

    @stats.add_method meth

    meth
  end

  ##
  # Parses the name of a metaprogrammed method.  +comment+ is used to
  # determine the name while +tk+ is used in an error message if the name
  # cannot be determined.

  def parse_meta_method_name comment, tk # :nodoc:
    if comment.text.sub!(/^# +:?method: *(\S*).*?\n/i, '') then
      return $1 unless $1.empty?
    end

    name_t = get_tk

    if :on_symbol == name_t[:kind] then
      name_t[:text][1..-1]
    elsif :on_tstring == name_t[:kind] then
      name_t[:text][1..-2]
    elsif :on_op == name_t[:kind] && '=' == name_t[:text] then # ignore
      remove_token_listener self

      nil
    else
      warn "unknown name token #{name_t.inspect} for meta-method '#{tk[:text]}'"
      'unknown'
    end
  end

  ##
  # Parses the parameters and block for a meta-programmed method.

  def parse_meta_method_params container, single, meth, tk, comment # :nodoc:
    token_listener meth do
      meth.params = ''

      look_for_directives_in meth, comment
      comment.normalize
      comment.extract_call_seq meth

      container.add_method meth

      last_tk = tk

      while tk = get_tk do
        if :on_semicolon == tk[:kind] then
          break
        elsif :on_nl == tk[:kind] then
          break unless last_tk and :on_comma == last_tk[:kind]
        elsif :on_sp == tk[:kind] then
          # expression continues
        elsif :on_kw == tk[:kind] && 'do' == tk[:text] then
          parse_statements container, single, meth
          break
        else
          last_tk = tk
        end
      end
    end
  end

  ##
  # Parses a normal method defined by +def+

  def parse_method(container, single, tk, comment)
    singleton = nil
    added_container = false
    name = nil
    column  = tk[:char_no]
    line_no = tk[:line_no]

    start_collecting_tokens
    add_token tk

    token_listener self do
      prev_container = container
      name, container, singleton = parse_method_name container
      added_container = container != prev_container
    end

    return unless name

    meth = RDoc::AnyMethod.new get_tkread, name
    look_for_directives_in meth, comment
    meth.singleton = single == SINGLE ? true : singleton
    if singleton
      # `current_line_visibility' is useless because it works against
      # the normal method named as same as the singleton method, after
      # the latter was defined.  Of course these are different things.
      container.current_line_visibility = :public
    end

    record_location meth
    meth.line   = line_no

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    token = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    token[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [token, newline, indent]
    meth.add_tokens @token_stream

    parse_method_params_and_body container, single, meth, added_container

    comment.normalize
    comment.extract_call_seq meth

    meth.comment = comment

    # after end modifiers
    read_documentation_modifiers meth, RDoc::METHOD_MODIFIERS

    @stats.add_method meth
  end

  ##
  # Parses the parameters and body of +meth+

  def parse_method_params_and_body container, single, meth, added_container
    token_listener meth do
      parse_method_parameters meth

      if meth.document_self or not @track_visibility then
        container.add_method meth
      elsif added_container then
        container.document_self = false
      end

      # Having now read the method parameters and documentation modifiers, we
      # now know whether we have to rename #initialize to ::new

      if meth.name == "initialize" && !meth.singleton then
        if meth.dont_rename_initialize then
          meth.visibility = :protected
        else
          meth.singleton = true
          meth.name = "new"
          meth.visibility = :public
        end
      end

      parse_statements container, single, meth
    end
  end

  ##
  # Parses a method that needs to be ignored.

  def parse_method_dummy container
    dummy = RDoc::Context.new
    dummy.parent = container
    dummy.store  = container.store
    skip_method dummy
  end

  ##
  # Parses the name of a method in +container+.
  #
  # Returns the method name, the container it is in (for def Foo.name) and if
  # it is a singleton or regular method.

  def parse_method_name container # :nodoc:
    skip_tkspace
    name_t = get_tk
    back_tk = skip_tkspace_without_nl
    singleton = false

    dot = get_tk
    if dot[:kind] == :on_period || (dot[:kind] == :on_op && dot[:text] == '::') then
      singleton = true

      name, container = parse_method_name_singleton container, name_t
    else
      unget_tk dot
      back_tk.reverse_each do |token|
        unget_tk token
      end

      name = parse_method_name_regular container, name_t
    end

    return name, container, singleton
  end

  ##
  # For the given +container+ and initial name token +name_t+ the method name
  # is parsed from the token stream for a regular method.

  def parse_method_name_regular container, name_t # :nodoc:
    if :on_op == name_t[:kind] && (%w{* & [] []= <<}.include?(name_t[:text])) then
      name_t[:text]
    else
      unless [:on_kw, :on_const, :on_ident].include?(name_t[:kind]) then
        warn "expected method name token, . or ::, got #{name_t.inspect}"
        skip_method container
        return
      end
      name_t[:text]
    end
  end

  ##
  # For the given +container+ and initial name token +name_t+ the method name
  # and the new +container+ (if necessary) are parsed from the token stream
  # for a singleton method.

  def parse_method_name_singleton container, name_t # :nodoc:
    skip_tkspace
    name_t2 = get_tk

    if (:on_kw == name_t[:kind] && 'self' == name_t[:text]) || (:on_op == name_t[:kind] && '%' == name_t[:text]) then
      # NOTE: work around '[' being consumed early
      if :on_lbracket == name_t2[:kind]
        get_tk
        name = '[]'
      else
        name = name_t2[:text]
      end
    elsif :on_const == name_t[:kind] then
      name = name_t2[:text]

      container = get_method_container container, name_t

      return unless container

      name
    elsif :on_ident == name_t[:kind] || :on_ivar == name_t[:kind] || :on_gvar == name_t[:kind] then
      parse_method_dummy container

      name = nil
    elsif (:on_kw == name_t[:kind]) && ('true' == name_t[:text] || 'false' == name_t[:text] || 'nil' == name_t[:text]) then
      klass_name = "#{name_t[:text].capitalize}Class"
      container = @store.find_class_named klass_name
      container ||= @top_level.add_class RDoc::NormalClass, klass_name

      name = name_t2[:text]
    else
      warn "unexpected method name token #{name_t.inspect}"
      # break
      skip_method container

      name = nil
    end

    return name, container
  end

  ##
  # Extracts +yield+ parameters from +method+

  def parse_method_or_yield_parameters(method = nil,
                                       modifiers = RDoc::METHOD_MODIFIERS)
    skip_tkspace_without_nl
    tk = get_tk
    end_token = get_end_token tk
    return '' unless end_token

    nest = 0
    continue = false

    while tk != nil do
      case tk[:kind]
      when :on_semicolon then
        break if nest == 0
      when :on_lbracket then
        nest += 1
      when :on_rbracket then
        nest -= 1
      when :on_lbrace then
        nest += 1
      when :on_rbrace then
        nest -= 1
        if nest <= 0
          # we might have a.each { |i| yield i }
          unget_tk(tk) if nest < 0
          break
        end
      when :on_lparen then
        nest += 1
      when end_token[:kind] then
        if end_token[:kind] == :on_rparen
          nest -= 1
          break if nest <= 0
        else
          break
        end
      when :on_rparen then
        nest -= 1
      when :on_comment, :on_embdoc then
        @read.pop
        if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
          (!continue or (tk[:state] & Ripper::EXPR_LABEL) != 0) then
          if method && method.block_params.nil? then
            unget_tk tk
            read_documentation_modifiers method, modifiers
          end
          break if !continue and nest <= 0
        end
      when :on_comma then
        continue = true
      when :on_ident then
        continue = false if continue
      end
      tk = get_tk
    end

    get_tkread_clean(/\s+/, ' ')
  end

  ##
  # Capture the method's parameters. Along the way, look for a comment
  # containing:
  #
  #    # yields: ....
  #
  # and add this as the block_params for the method

  def parse_method_parameters method
    res = parse_method_or_yield_parameters method

    res = "(#{res})" unless res =~ /\A\(/
    method.params = res unless method.params

    return if  method.block_params

    skip_tkspace_without_nl
    read_documentation_modifiers method, RDoc::METHOD_MODIFIERS
  end

  ##
  # Parses an RDoc::NormalModule in +container+ with +comment+

  def parse_module container, single, tk, comment
    container, name_t, = get_class_or_module container

    name = name_t[:text]

    mod = container.add_module RDoc::NormalModule, name
    mod.ignore unless container.document_children
    record_location mod

    read_documentation_modifiers mod, RDoc::CLASS_MODIFIERS
    mod.add_comment comment, @top_level
    parse_statements mod

    # after end modifiers
    read_documentation_modifiers mod, RDoc::CLASS_MODIFIERS

    @stats.add_module mod
  end

  ##
  # Parses an RDoc::Require in +context+ containing +comment+

  def parse_require(context, comment)
    skip_tkspace_comment
    tk = get_tk

    if :on_lparen == tk[:kind] then
      skip_tkspace_comment
      tk = get_tk
    end

    name = tk[:text][1..-2] if :on_tstring == tk[:kind]

    if name then
      @top_level.add_require RDoc::Require.new(name, comment)
    else
      unget_tk tk
    end
  end

  ##
  # Parses a rescue

  def parse_rescue
    skip_tkspace_without_nl

    while tk = get_tk
      case tk[:kind]
      when :on_nl, :on_semicolon, :on_comment then
        break
      when :on_comma then
        skip_tkspace_without_nl

        get_tk if :on_nl == peek_tk[:kind]
      end

      skip_tkspace_without_nl
    end
  end

  ##
  # Retrieve comment body without =begin/=end

  def retrieve_comment_body(tk)
    if :on_embdoc == tk[:kind]
      tk[:text].gsub(/\A=begin.*\n/, '').gsub(/=end\n?\z/, '')
    else
      tk[:text]
    end
  end

  ##
  # The core of the Ruby parser.

  def parse_statements(container, single = NORMAL, current_method = nil,
                       comment = new_comment(''))
    raise 'no' unless RDoc::Comment === comment
    comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding

    nest = 1
    save_visibility = container.visibility
    container.visibility = :public unless current_method

    non_comment_seen = true

    while tk = get_tk do
      keep_comment = false
      try_parse_comment = false

      non_comment_seen = true unless (:on_comment == tk[:kind] or :on_embdoc == tk[:kind])

      case tk[:kind]
      when :on_nl, :on_ignored_nl, :on_comment, :on_embdoc then
        if :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]
          skip_tkspace
          tk = get_tk
        else
          past_tokens = @read.size > 1 ? @read[0..-2] : []
          nl_position = 0
          past_tokens.reverse.each_with_index do |read_tk, i|
            if read_tk =~ /^\n$/ then
              nl_position = (past_tokens.size - 1) - i
              break
            elsif read_tk =~ /^#.*\n$/ then
              nl_position = ((past_tokens.size - 1) - i) + 1
              break
            end
          end
          comment_only_line = past_tokens[nl_position..-1].all?{ |c| c =~ /^\s+$/ }
          unless comment_only_line then
            tk = get_tk
          end
        end

        if tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) then
          if non_comment_seen then
            # Look for RDoc in a comment about to be thrown away
            non_comment_seen = parse_comment container, tk, comment unless
              comment.empty?

            comment = ''
            comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
          end

          line_no = nil
          while tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) do
            comment_body = retrieve_comment_body(tk)
            line_no = tk[:line_no] if comment.empty?
            comment += comment_body
            comment << "\n" unless comment_body =~ /\n\z/

            if comment_body.size > 1 && comment_body =~ /\n\z/ then
              skip_tkspace_without_nl # leading spaces
            end
            tk = get_tk
          end

          comment = new_comment comment, line_no

          unless comment.empty? then
            look_for_directives_in container, comment

            if container.done_documenting then
              throw :eof if RDoc::TopLevel === container
              container.ongoing_visibility = save_visibility
            end
          end

          keep_comment = true
        else
          non_comment_seen = true
        end

        unget_tk tk
        keep_comment = true
        container.current_line_visibility = nil

      when :on_kw then
        case tk[:text]
        when 'class' then
          parse_class container, single, tk, comment

        when 'module' then
          parse_module container, single, tk, comment

        when 'def' then
          parse_method container, single, tk, comment

        when 'alias' then
          parse_alias container, single, tk, comment unless current_method

        when 'yield' then
          if current_method.nil? then
            warn "Warning: yield outside of method" if container.document_self
          else
            parse_yield container, single, tk, current_method
          end

        when 'until', 'while' then
          if (tk[:state] & Ripper::EXPR_LABEL) == 0
            nest += 1
            skip_optional_do_after_expression
          end

        # Until and While can have a 'do', which shouldn't increase the nesting.
        # We can't solve the general case, but we can handle most occurrences by
        # ignoring a do at the end of a line.

        # 'for' is trickier
        when 'for' then
          nest += 1
          skip_for_variable
          skip_optional_do_after_expression

        when 'case', 'do', 'if', 'unless', 'begin' then
          if (tk[:state] & Ripper::EXPR_LABEL) == 0
            nest += 1
          end

        when 'super' then
          current_method.calls_super = true if current_method

        when 'rescue' then
          parse_rescue

        when 'end' then
          nest -= 1
          if nest == 0 then
            container.ongoing_visibility = save_visibility

            parse_comment container, tk, comment unless comment.empty?

            return
          end
        end

      when :on_const then
        unless parse_constant container, tk, comment, current_method then
          try_parse_comment = true
        end

      when :on_ident then
        if nest == 1 and current_method.nil? then
          keep_comment = parse_identifier container, single, tk, comment
        end

        case tk[:text]
        when "require" then
          parse_require container, comment
        when "include" then
          parse_extend_or_include RDoc::Include, container, comment
        when "extend" then
          parse_extend_or_include RDoc::Extend, container, comment
        when "included" then
          parse_included_with_activesupport_concern container, comment
        end

      else
        try_parse_comment = nest == 1
      end

      if try_parse_comment then
        non_comment_seen = parse_comment container, tk, comment unless
          comment.empty?

        keep_comment = false
      end

      unless keep_comment then
        comment = new_comment ''
        comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
        container.params = nil
        container.block_params = nil
      end

      consume_trailing_spaces
    end

    container.params = nil
    container.block_params = nil
  end

  ##
  # Parse up to +no+ symbol arguments

  def parse_symbol_arg(no = nil)
    skip_tkspace_comment

    tk = get_tk
    if tk[:kind] == :on_lparen
      parse_symbol_arg_paren no
    else
      parse_symbol_arg_space no, tk
    end
  end

  ##
  # Parses up to +no+ symbol arguments surrounded by () and places them in
  # +args+.

  def parse_symbol_arg_paren no # :nodoc:
    args = []

    loop do
      skip_tkspace_comment
      if tk1 = parse_symbol_in_arg
        args.push tk1
        break if no and args.size >= no
      end

      skip_tkspace_comment
      case (tk2 = get_tk)[:kind]
      when :on_rparen
        break
      when :on_comma
      else
        warn("unexpected token: '#{tk2.inspect}'") if $DEBUG_RDOC
        break
      end
    end

    args
  end

  ##
  # Parses up to +no+ symbol arguments separated by spaces and places them in
  # +args+.

  def parse_symbol_arg_space no, tk # :nodoc:
    args = []

    unget_tk tk
    if tk = parse_symbol_in_arg
      args.push tk
      return args if no and args.size >= no
    end

    loop do
      skip_tkspace_without_nl

      tk1 = get_tk
      if tk1.nil? || :on_comma != tk1[:kind] then
        unget_tk tk1
        break
      end

      skip_tkspace_comment
      if tk = parse_symbol_in_arg
        args.push tk
        break if no and args.size >= no
      end
    end

    args
  end

  ##
  # Returns symbol text from the next token

  def parse_symbol_in_arg
    tk = get_tk
    if :on_symbol == tk[:kind] then
      tk[:text].sub(/^:/, '')
    elsif :on_tstring == tk[:kind] then
      tk[:text][1..-2]
    elsif :on_dstring == tk[:kind] or :on_ident == tk[:kind] then
      nil # ignore
    else
      warn("Expected symbol or string, got #{tk.inspect}") if $DEBUG_RDOC
      nil
    end
  end

  ##
  # Parses statements in the top-level +container+

  def parse_top_level_statements container
    comment = collect_first_comment

    look_for_directives_in container, comment

    throw :eof if container.done_documenting

    @markup = comment.format

    # HACK move if to RDoc::Context#comment=
    container.comment = comment if container.document_self unless comment.empty?

    parse_statements container, NORMAL, nil, comment
  end

  ##
  # Determines the visibility in +container+ from +tk+

  def parse_visibility(container, single, tk)
    vis_type, vis, singleton = get_visibility_information tk, single

    skip_tkspace_comment false

    ptk = peek_tk
    # Ryan Davis suggested the extension to ignore modifiers, because he
    # often writes
    #
    #   protected unless $TESTING
    #
    if [:on_nl, :on_semicolon].include?(ptk[:kind]) || (:on_kw == ptk[:kind] && (['if', 'unless'].include?(ptk[:text]))) then
      container.ongoing_visibility = vis
    elsif :on_kw == ptk[:kind] && 'def' == ptk[:text]
      container.current_line_visibility = vis
    else
      update_visibility container, vis_type, vis, singleton
    end
  end

  ##
  # Parses a Module#private_constant or Module#public_constant call from +tk+.

  def parse_constant_visibility(container, single, tk)
    args = parse_symbol_arg
    case tk[:text]
    when 'private_constant'
      vis = :private
    when 'public_constant'
      vis = :public
    else
      raise RDoc::Error, 'Unreachable'
    end
    container.set_constant_visibility_for args, vis
  end

  ##
  # Determines the block parameter for +context+

  def parse_yield(context, single, tk, method)
    return if method.block_params

    get_tkread
    method.block_params = parse_method_or_yield_parameters
  end

  ##
  # Directives are modifier comments that can appear after class, module, or
  # method names. For example:
  #
  #   def fred # :yields: a, b
  #
  # or:
  #
  #   class MyClass # :nodoc:
  #
  # We return the directive name and any parameters as a two element array if
  # the name is in +allowed+.  A directive can be found anywhere up to the end
  # of the current line.

  def read_directive allowed
    tokens = []

    while tk = get_tk do
      tokens << tk

      if :on_nl == tk[:kind] or (:on_kw == tk[:kind] && 'def' == tk[:text]) then
        return
      elsif :on_comment == tk[:kind] or :on_embdoc == tk[:kind] then
        return unless tk[:text] =~ /:?\b([\w-]+):\s*(.*)/

        directive = $1.downcase

        return [directive, $2] if allowed.include? directive

        return
      end
    end
  ensure
    unless tokens.length == 1 and (:on_comment == tokens.first[:kind] or :on_embdoc == tokens.first[:kind]) then
      tokens.reverse_each do |token|
        unget_tk token
      end
    end
  end

  ##
  # Handles directives following the definition for +context+ (any
  # RDoc::CodeObject) if the directives are +allowed+ at this point.
  #
  # See also RDoc::Markup::PreProcess#handle_directive

  def read_documentation_modifiers context, allowed
    skip_tkspace_without_nl
    directive, value = read_directive allowed

    return unless directive

    @preprocess.handle_directive '', directive, value, context do |dir, param|
      if %w[notnew not_new not-new].include? dir then
        context.dont_rename_initialize = true

        true
      end
    end
  end

  ##
  # Records the location of this +container+ in the file for this parser and
  # adds it to the list of classes and modules in the file.

  def record_location container # :nodoc:
    case container
    when RDoc::ClassModule then
      @top_level.add_to_classes_or_modules container
    end

    container.record_location @top_level
  end

  ##
  # Scans this Ruby file for Ruby constructs

  def scan
    reset

    catch :eof do
      begin
        parse_top_level_statements @top_level

      rescue StandardError => e
        if @content.include?('<%') and @content.include?('%>') then
          # Maybe, this is ERB.
          $stderr.puts "\033[2KRDoc detects ERB file. Skips it for compatibility:"
          $stderr.puts @file_name
          return
        end

        if @scanner_point >= @scanner.size
          now_line_no = @scanner[@scanner.size - 1][:line_no]
        else
          now_line_no = peek_tk[:line_no]
        end
        first_tk_index = @scanner.find_index { |tk| tk[:line_no] == now_line_no }
        last_tk_index = @scanner.find_index { |tk| tk[:line_no] == now_line_no + 1 }
        last_tk_index = last_tk_index ? last_tk_index - 1 : @scanner.size - 1
        code = @scanner[first_tk_index..last_tk_index].map{ |t| t[:text] }.join

        $stderr.puts <<-EOF

#{self.class} failure around line #{now_line_no} of
#{@file_name}

        EOF

        unless code.empty? then
          $stderr.puts code
          $stderr.puts
        end

        raise e
      end
    end

    @top_level
  end

  ##
  # while, until, and for have an optional do

  def skip_optional_do_after_expression
    skip_tkspace_without_nl
    tk = get_tk

    b_nest = 0
    nest = 0

    loop do
      break unless tk
      case tk[:kind]
      when :on_semicolon, :on_nl, :on_ignored_nl then
        break if b_nest.zero?
      when :on_lparen then
        nest += 1
      when :on_rparen then
        nest -= 1
      when :on_kw then
        case tk[:text]
        when 'begin'
          b_nest += 1
        when 'end'
          b_nest -= 1
        when 'do'
          break if nest.zero?
        end
      when :on_comment, :on_embdoc then
        if b_nest.zero? and "\n" == tk[:text][-1] then
          break
        end
      end
      tk = get_tk
    end

    skip_tkspace_without_nl

    get_tk if peek_tk && :on_kw == peek_tk[:kind] && 'do' == peek_tk[:text]
  end

  ##
  # skip the var [in] part of a 'for' statement

  def skip_for_variable
    skip_tkspace_without_nl
    get_tk
    skip_tkspace_without_nl
    tk = get_tk
    unget_tk(tk) unless :on_kw == tk[:kind] and 'in' == tk[:text]
  end

  ##
  # Skips the next method in +container+

  def skip_method container
    meth = RDoc::AnyMethod.new "", "anon"
    parse_method_parameters meth
    parse_statements container, false, meth
  end

  ##
  # Skip spaces until a comment is found

  def skip_tkspace_comment(skip_nl = true)
    loop do
      skip_nl ? skip_tkspace : skip_tkspace_without_nl
      next_tk = peek_tk
      return if next_tk.nil? || (:on_comment != next_tk[:kind] and :on_embdoc != next_tk[:kind])
      get_tk
    end
  end

  ##
  # Updates visibility in +container+ from +vis_type+ and +vis+.

  def update_visibility container, vis_type, vis, singleton # :nodoc:
    new_methods = []

    case vis_type
    when 'module_function' then
      args = parse_symbol_arg
      container.set_visibility_for args, :private, false

      container.methods_matching args do |m|
        s_m = m.dup
        record_location s_m
        s_m.singleton = true
        new_methods << s_m
      end
    when 'public_class_method', 'private_class_method' then
      args = parse_symbol_arg

      container.methods_matching args, true do |m|
        if m.parent != container then
          m = m.dup
          record_location m
          new_methods << m
        end

        m.visibility = vis
      end
    else
      args = parse_symbol_arg
      container.set_visibility_for args, vis, singleton
    end

    new_methods.each do |method|
      case method
      when RDoc::AnyMethod then
        container.add_method method
      when RDoc::Attr then
        container.add_attribute method
      end
      method.visibility = vis
    end
  end

  ##
  # Prints +message+ to +$stderr+ unless we're being quiet

  def warn message
    @options.warn make_message message
  end

end
PK)J[���/223share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/text.rbnu�[���# frozen_string_literal: true
##
# Indicates this parser is text and doesn't contain code constructs.
#
# Include this module in a RDoc::Parser subclass to make it show up as a file,
# not as part of a class or module.
#--
# This is not named File to avoid overriding ::File

module RDoc::Parser::Text
end
PK)J[N��D0�0�0share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/c.rbnu�[���# frozen_string_literal: true
require 'tsort'

##
# RDoc::Parser::C attempts to parse C extension files.  It looks for
# the standard patterns that you find in extensions: +rb_define_class+,
# +rb_define_method+ and so on.  It tries to find the corresponding
# C source for the methods and extract comments, but if we fail
# we don't worry too much.
#
# The comments associated with a Ruby method are extracted from the C
# comment block associated with the routine that _implements_ that
# method, that is to say the method whose name is given in the
# +rb_define_method+ call. For example, you might write:
#
#   /*
#    * Returns a new array that is a one-dimensional flattening of this
#    * array (recursively). That is, for every element that is an array,
#    * extract its elements into the new array.
#    *
#    *    s = [ 1, 2, 3 ]           #=> [1, 2, 3]
#    *    t = [ 4, 5, 6, [7, 8] ]   #=> [4, 5, 6, [7, 8]]
#    *    a = [ s, t, 9, 10 ]       #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
#    *    a.flatten                 #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#    */
#    static VALUE
#    rb_ary_flatten(VALUE ary)
#    {
#        ary = rb_obj_dup(ary);
#        rb_ary_flatten_bang(ary);
#        return ary;
#    }
#
#    ...
#
#    void
#    Init_Array(void)
#    {
#      ...
#      rb_define_method(rb_cArray, "flatten", rb_ary_flatten, 0);
#
# Here RDoc will determine from the +rb_define_method+ line that there's a
# method called "flatten" in class Array, and will look for the implementation
# in the method +rb_ary_flatten+. It will then use the comment from that
# method in the HTML output. This method must be in the same source file
# as the +rb_define_method+.
#
# The comment blocks may include special directives:
#
# [Document-class: +name+]
#   Documentation for the named class.
#
# [Document-module: +name+]
#   Documentation for the named module.
#
# [Document-const: +name+]
#   Documentation for the named +rb_define_const+.
#
#   Constant values can be supplied on the first line of the comment like so:
#
#     /* 300: The highest possible score in bowling */
#     rb_define_const(cFoo, "PERFECT", INT2FIX(300));
#
#   The value can contain internal colons so long as they are escaped with a \
#
# [Document-global: +name+]
#   Documentation for the named +rb_define_global_const+
#
# [Document-variable: +name+]
#   Documentation for the named +rb_define_variable+
#
# [Document-method\: +method_name+]
#   Documentation for the named method.  Use this when the method name is
#   unambiguous.
#
# [Document-method\: <tt>ClassName::method_name</tt>]
#   Documentation for a singleton method in the given class.  Use this when
#   the method name alone is ambiguous.
#
# [Document-method\: <tt>ClassName#method_name</tt>]
#   Documentation for a instance method in the given class.  Use this when the
#   method name alone is ambiguous.
#
# [Document-attr: +name+]
#   Documentation for the named attribute.
#
# [call-seq:  <i>text up to an empty line</i>]
#   Because C source doesn't give descriptive names to Ruby-level parameters,
#   you need to document the calling sequence explicitly
#
# In addition, RDoc assumes by default that the C method implementing a
# Ruby function is in the same source file as the rb_define_method call.
# If this isn't the case, add the comment:
#
#   rb_define_method(....);  // in filename
#
# As an example, we might have an extension that defines multiple classes
# in its Init_xxx method. We could document them using
#
#   /*
#    * Document-class:  MyClass
#    *
#    * Encapsulate the writing and reading of the configuration
#    * file. ...
#    */
#
#   /*
#    * Document-method: read_value
#    *
#    * call-seq:
#    *   cfg.read_value(key)            -> value
#    *   cfg.read_value(key} { |key| }  -> value
#    *
#    * Return the value corresponding to +key+ from the configuration.
#    * In the second form, if the key isn't found, invoke the
#    * block and return its value.
#    */

class RDoc::Parser::C < RDoc::Parser

  parse_files_matching(/\.(?:([CcHh])\1?|c([+xp])\2|y)\z/)

  include RDoc::Text

  # :stopdoc:
  BOOL_ARG_PATTERN = /\s*+\b([01]|Q?(?:true|false)|TRUE|FALSE)\b\s*/
  TRUE_VALUES = ['1', 'TRUE', 'true', 'Qtrue'].freeze
  # :startdoc:

  ##
  # Maps C variable names to names of Ruby classes or modules

  attr_reader :classes

  ##
  # C file the parser is parsing

  attr_accessor :content

  ##
  # Dependencies from a missing enclosing class to the classes in
  # missing_dependencies that depend upon it.

  attr_reader :enclosure_dependencies

  ##
  # Maps C variable names to names of Ruby classes (and singleton classes)

  attr_reader :known_classes

  ##
  # Classes found while parsing the C file that were not yet registered due to
  # a missing enclosing class.  These are processed by do_missing

  attr_reader :missing_dependencies

  ##
  # Maps C variable names to names of Ruby singleton classes

  attr_reader :singleton_classes

  ##
  # The TopLevel items in the parsed file belong to

  attr_reader :top_level

  ##
  # Prepares for parsing a C file.  See RDoc::Parser#initialize for details on
  # the arguments.

  def initialize top_level, file_name, content, options, stats
    super

    @known_classes = RDoc::KNOWN_CLASSES.dup
    @content = handle_tab_width handle_ifdefs_in @content
    @file_dir = File.dirname @file_name

    @classes           = load_variable_map :c_class_variables
    @singleton_classes = load_variable_map :c_singleton_class_variables

    @markup = @options.markup

    # class_variable => { function => [method, ...] }
    @methods = Hash.new { |h, f| h[f] = Hash.new { |i, m| i[m] = [] } }

    # missing variable => [handle_class_module arguments]
    @missing_dependencies = {}

    # missing enclosure variable => [dependent handle_class_module arguments]
    @enclosure_dependencies = Hash.new { |h, k| h[k] = [] }
    @enclosure_dependencies.instance_variable_set :@missing_dependencies,
                                                  @missing_dependencies

    @enclosure_dependencies.extend TSort

    def @enclosure_dependencies.tsort_each_node &block
      each_key(&block)
    rescue TSort::Cyclic => e
      cycle_vars = e.message.scan(/"(.*?)"/).flatten

      cycle = cycle_vars.sort.map do |var_name|
        delete var_name

        var_name, type, mod_name, = @missing_dependencies[var_name]

        "#{type} #{mod_name} (#{var_name})"
      end.join ', '

      warn "Unable to create #{cycle} due to a cyclic class or module creation"

      retry
    end

    def @enclosure_dependencies.tsort_each_child node, &block
      fetch(node, []).each(&block)
    end
  end

  ##
  # Scans #content for rb_define_alias

  def do_aliases
    @content.scan(/rb_define_alias\s*\(
                   \s*(\w+),
                   \s*"(.+?)",
                   \s*"(.+?)"
                   \s*\)/xm) do |var_name, new_name, old_name|
      class_name = @known_classes[var_name]

      unless class_name then
        @options.warn "Enclosing class or module %p for alias %s %s is not known" % [
          var_name, new_name, old_name]
        next
      end

      class_obj = find_class var_name, class_name
      comment = find_alias_comment var_name, new_name, old_name
      comment.normalize
      if comment.to_s.empty? and existing_method = class_obj.method_list.find { |m| m.name == old_name}
        comment = existing_method.comment
      end
      add_alias(var_name, class_obj, old_name, new_name, comment)
    end
  end

  ##
  # Add alias, either from a direct alias definition, or from two
  # method that reference the same function.

  def add_alias(var_name, class_obj, old_name, new_name, comment)
    al = RDoc::Alias.new '', old_name, new_name, ''
    al.singleton = @singleton_classes.key? var_name
    al.comment = comment
    al.record_location @top_level
    class_obj.add_alias al
    @stats.add_alias al
    al
  end

  ##
  # Scans #content for rb_attr and rb_define_attr

  def do_attrs
    @content.scan(/rb_attr\s*\(
                   \s*(\w+),
                   \s*([\w"()]+),
                   #{BOOL_ARG_PATTERN},
                   #{BOOL_ARG_PATTERN},
                   \s*\w+\);/xmo) do |var_name, attr_name, read, write|
      handle_attr var_name, attr_name, read, write
    end

    @content.scan(%r%rb_define_attr\(
                             \s*([\w\.]+),
                             \s*"([^"]+)",
                             #{BOOL_ARG_PATTERN},
                             #{BOOL_ARG_PATTERN}\);
                %xmo) do |var_name, attr_name, read, write|
      handle_attr var_name, attr_name, read, write
    end
  end

  ##
  # Scans #content for boot_defclass

  def do_boot_defclass
    @content.scan(/(\w+)\s*=\s*boot_defclass\s*\(\s*"(\w+?)",\s*(\w+?)\s*\)/) do
      |var_name, class_name, parent|
      parent = nil if parent == "0"
      handle_class_module(var_name, :class, class_name, parent, nil)
    end
  end

  ##
  # Scans #content for rb_define_class, boot_defclass, rb_define_class_under
  # and rb_singleton_class

  def do_classes_and_modules
    do_boot_defclass if @file_name == "class.c"

    @content.scan(
      %r(
        (?<open>\s*\(\s*) {0}
        (?<close>\s*\)\s*) {0}
        (?<name>\s*"(?<class_name>\w+)") {0}
        (?<parent>\s*(?:
          (?<parent_name>[\w\*\s\(\)\.\->]+) |
          rb_path2class\s*\(\s*"(?<path>[\w:]+)"\s*\)
        )) {0}
        (?<under>\w+) {0}

        (?<var_name>[\w\.]+)\s* =
        \s*rb_(?:
          define_(?:
            class(?: # rb_define_class(name, parent_name)
              \(\s*
                \g<name>,
                \g<parent>
              \s*\)
            |
              _under\g<open> # rb_define_class_under(under, name, parent_name...)
                \g<under>,
                \g<name>,
                \g<parent>
              \g<close>
            )
          |
            (?<module>)
            module(?: # rb_define_module(name)
              \g<open>
                \g<name>
              \g<close>
            |
              _under\g<open> # rb_define_module_under(under, name)
                \g<under>,
                \g<name>
              \g<close>
            )
          )
      |
        (?<attributes>(?:\s*"\w+",)*\s*NULL\s*) {0}
        struct_define(?:
          \g<open> # rb_struct_define(name, ...)
            \g<name>,
        |
          _under\g<open> # rb_struct_define_under(under, name, ...)
            \g<under>,
            \g<name>,
        |
          _without_accessor(?:
            \g<open> # rb_struct_define_without_accessor(name, parent_name, ...)
          |
            _under\g<open> # rb_struct_define_without_accessor_under(under, name, parent_name, ...)
              \g<under>,
          )
            \g<name>,
            \g<parent>,
            \s*\w+,        # Allocation function
        )
          \g<attributes>
        \g<close>
      |
        singleton_class\g<open> # rb_singleton_class(target_class_name)
          (?<target_class_name>\w+)
        \g<close>
        )
      )mx
    ) do
      if target_class_name = $~[:target_class_name]
        # rb_singleton_class(target_class_name)
        handle_singleton $~[:var_name], target_class_name
        next
      end

      var_name = $~[:var_name]
      type = $~[:module] ? :module : :class
      class_name = $~[:class_name]
      parent_name = $~[:parent_name] || $~[:path]
      under = $~[:under]
      attributes = $~[:attributes]

      handle_class_module(var_name, type, class_name, parent_name, under)
      if attributes and !parent_name # rb_struct_define *not* without_accessor
        true_flag = 'Qtrue'
        attributes.scan(/"\K\w+(?=")/) do |attr_name|
          handle_attr var_name, attr_name, true_flag, true_flag
        end
      end
    end
  end

  ##
  # Scans #content for rb_define_variable, rb_define_readonly_variable,
  # rb_define_const and rb_define_global_const

  def do_constants
    @content.scan(%r%\Wrb_define_
                   ( variable          |
                     readonly_variable |
                     const             |
                     global_const        )
               \s*\(
                 (?:\s*(\w+),)?
                 \s*"(\w+)",
                 \s*(.*?)\s*\)\s*;
                 %xm) do |type, var_name, const_name, definition|
      var_name = "rb_cObject" if !var_name or var_name == "rb_mKernel"
      type = "const" if type == "global_const"
      handle_constants type, var_name, const_name, definition
    end

    @content.scan(%r%
                  \Wrb_curses_define_const
                  \s*\(
                    \s*
                    (\w+)
                    \s*
                  \)
                  \s*;%xm) do |consts|
      const = consts.first

      handle_constants 'const', 'mCurses', const, "UINT2NUM(#{const})"
    end

    @content.scan(%r%
                  \Wrb_file_const
                  \s*\(
                    \s*
                    "([^"]+)",
                    \s*
                    (.*?)
                    \s*
                  \)
                  \s*;%xm) do |name, value|
      handle_constants 'const', 'rb_mFConst', name, value
    end
  end


  ##
  # Scans #content for rb_include_module

  def do_includes
    @content.scan(/rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/) do |c, m|
      next unless cls = @classes[c]
      m = @known_classes[m] || m

      comment = new_comment '', @top_level, :c
      incl = cls.add_include RDoc::Include.new(m, comment)
      incl.record_location @top_level
    end
  end

  ##
  # Scans #content for rb_define_method, rb_define_singleton_method,
  # rb_define_module_function, rb_define_private_method,
  # rb_define_global_function and define_filetest_function

  def do_methods
    @content.scan(%r%rb_define_
                   (
                      singleton_method |
                      method           |
                      module_function  |
                      private_method
                   )
                   \s*\(\s*([\w\.]+),
                     \s*"([^"]+)",
                     \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\(|\(METHOD\))?(\w+)\)?,
                     \s*(-?\w+)\s*\)
                   (?:;\s*/[*/]\s+in\s+(\w+?\.(?:cpp|c|y)))?
                 %xm) do |type, var_name, meth_name, function, param_count, source_file|

      # Ignore top-object and weird struct.c dynamic stuff
      next if var_name == "ruby_top_self"
      next if var_name == "nstr"

      var_name = "rb_cObject" if var_name == "rb_mKernel"
      handle_method(type, var_name, meth_name, function, param_count,
                    source_file)
    end

    @content.scan(%r%rb_define_global_function\s*\(
                             \s*"([^"]+)",
                             \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
                             \s*(-?\w+)\s*\)
                (?:;\s*/[*/]\s+in\s+(\w+?\.[cy]))?
                %xm) do |meth_name, function, param_count, source_file|
      handle_method("method", "rb_mKernel", meth_name, function, param_count,
                    source_file)
    end

    @content.scan(/define_filetest_function\s*\(
                     \s*"([^"]+)",
                     \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
                     \s*(-?\w+)\s*\)/xm) do |meth_name, function, param_count|

      handle_method("method", "rb_mFileTest", meth_name, function, param_count)
      handle_method("singleton_method", "rb_cFile", meth_name, function,
                    param_count)
    end
  end

  ##
  # Creates classes and module that were missing were defined due to the file
  # order being different than the declaration order.

  def do_missing
    return if @missing_dependencies.empty?

    @enclosure_dependencies.tsort.each do |in_module|
      arguments = @missing_dependencies.delete in_module

      next unless arguments # dependency on existing class

      handle_class_module(*arguments)
    end
  end

  ##
  # Finds the comment for an alias on +class_name+ from +new_name+ to
  # +old_name+

  def find_alias_comment class_name, new_name, old_name
    content =~ %r%((?>/\*.*?\*/\s+))
                  rb_define_alias\(\s*#{Regexp.escape class_name}\s*,
                                   \s*"#{Regexp.escape new_name}"\s*,
                                   \s*"#{Regexp.escape old_name}"\s*\);%xm

    new_comment($1 || '', @top_level, :c)
  end

  ##
  # Finds a comment for rb_define_attr, rb_attr or Document-attr.
  #
  # +var_name+ is the C class variable the attribute is defined on.
  # +attr_name+ is the attribute's name.
  #
  # +read+ and +write+ are the read/write flags ('1' or '0').  Either both or
  # neither must be provided.

  def find_attr_comment var_name, attr_name, read = nil, write = nil
    attr_name = Regexp.escape attr_name

    rw = if read and write then
           /\s*#{read}\s*,\s*#{write}\s*/xm
         else
           /.*?/m
         end

    comment = if @content =~ %r%((?>/\*.*?\*/\s+))
                                rb_define_attr\((?:\s*#{var_name},)?\s*
                                                "#{attr_name}"\s*,
                                                #{rw}\)\s*;%xm then
                $1
              elsif @content =~ %r%((?>/\*.*?\*/\s+))
                                   rb_attr\(\s*#{var_name}\s*,
                                            \s*#{attr_name}\s*,
                                            #{rw},.*?\)\s*;%xm then
                $1
              elsif @content =~ %r%(/\*.*?(?:\s*\*\s*)?)
                                   Document-attr:\s#{attr_name}\s*?\n
                                   ((?>(.|\n)*?\*/))%x then
                "#{$1}\n#{$2}"
              else
                ''
              end

    new_comment comment, @top_level, :c
  end

  ##
  # Generate a Ruby-method table

  def gen_body_table file_content
    table = {}
    file_content.scan(%r{
      ((?>/\*.*?\*/\s*)?)
      ((?:\w+\s+){0,2} VALUE\s+(\w+)
        \s*(?:\([^\)]*\))(?:[^\);]|$))
    | ((?>/\*.*?\*/\s*))^\s*(\#\s*define\s+(\w+)\s+(\w+))
    | ^\s*\#\s*define\s+(\w+)\s+(\w+)
    }xm) do
      case
      when name = $3
        table[name] = [:func_def, $1, $2, $~.offset(2)] if !(t = table[name]) || t[0] != :func_def
      when name = $6
        table[name] = [:macro_def, $4, $5, $~.offset(5), $7] if !(t = table[name]) || t[0] == :macro_alias
      when name = $8
        table[name] ||= [:macro_alias, $9]
      end
    end
    table
  end

  ##
  # Find the C code corresponding to a Ruby method

  def find_body class_name, meth_name, meth_obj, file_content, quiet = false
    if file_content
      @body_table ||= {}
      @body_table[file_content] ||= gen_body_table file_content
      type, *args = @body_table[file_content][meth_name]
    end

    case type
    when :func_def
      comment = new_comment args[0], @top_level, :c
      body = args[1]
      offset, = args[2]

      comment.remove_private if comment

      # try to find the whole body
      body = $& if /#{Regexp.escape body}[^(]*?\{.*?^\}/m =~ file_content

      # The comment block may have been overridden with a 'Document-method'
      # block. This happens in the interpreter when multiple methods are
      # vectored through to the same C method but those methods are logically
      # distinct (for example Kernel.hash and Kernel.object_id share the same
      # implementation

      override_comment = find_override_comment class_name, meth_obj
      comment = override_comment if override_comment

      comment.normalize
      find_modifiers comment, meth_obj if comment

      #meth_obj.params = params
      meth_obj.start_collecting_tokens
      tk = { :line_no => 1, :char_no => 1, :text => body }
      meth_obj.add_token tk
      meth_obj.comment = comment
      meth_obj.line    = file_content[0, offset].count("\n") + 1

      body
    when :macro_def
      comment = new_comment args[0], @top_level, :c
      body = args[1]
      offset, = args[2]

      find_body class_name, args[3], meth_obj, file_content, true

      comment.normalize
      find_modifiers comment, meth_obj

      meth_obj.start_collecting_tokens
      tk = { :line_no => 1, :char_no => 1, :text => body }
      meth_obj.add_token tk
      meth_obj.comment = comment
      meth_obj.line    = file_content[0, offset].count("\n") + 1

      body
    when :macro_alias
      # with no comment we hope the aliased definition has it and use it's
      # definition

      body = find_body(class_name, args[0], meth_obj, file_content, true)

      return body if body

      @options.warn "No definition for #{meth_name}"
      false
    else # No body, but might still have an override comment
      comment = find_override_comment class_name, meth_obj

      if comment then
        comment.normalize
        find_modifiers comment, meth_obj
        meth_obj.comment = comment

        ''
      else
        @options.warn "No definition for #{meth_name}"
        false
      end
    end
  end

  ##
  # Finds a RDoc::NormalClass or RDoc::NormalModule for +raw_name+

  def find_class(raw_name, name, base_name = nil)
    unless @classes[raw_name]
      if raw_name =~ /^rb_m/
        container = @top_level.add_module RDoc::NormalModule, name
      else
        container = @top_level.add_class RDoc::NormalClass, name
      end
      container.name = base_name if base_name

      container.record_location @top_level
      @classes[raw_name] = container
    end
    @classes[raw_name]
  end

  ##
  # Look for class or module documentation above Init_+class_name+(void),
  # in a Document-class +class_name+ (or module) comment or above an
  # rb_define_class (or module).  If a comment is supplied above a matching
  # Init_ and a rb_define_class the Init_ comment is used.
  #
  #   /*
  #    * This is a comment for Foo
  #    */
  #   Init_Foo(void) {
  #       VALUE cFoo = rb_define_class("Foo", rb_cObject);
  #   }
  #
  #   /*
  #    * Document-class: Foo
  #    * This is a comment for Foo
  #    */
  #   Init_foo(void) {
  #       VALUE cFoo = rb_define_class("Foo", rb_cObject);
  #   }
  #
  #   /*
  #    * This is a comment for Foo
  #    */
  #   VALUE cFoo = rb_define_class("Foo", rb_cObject);

  def find_class_comment class_name, class_mod
    comment = nil

    if @content =~ %r%
        ((?>/\*.*?\*/\s+))
        (static\s+)?
        void\s+
        Init(?:VM)?_(?i:#{class_name})\s*(?:_\(\s*)?\(\s*(?:void\s*)?\)%xm then
      comment = $1.sub(%r%Document-(?:class|module):\s+#{class_name}%, '')
    elsif @content =~ %r%Document-(?:class|module):\s+#{class_name}\s*?
                         (?:<\s+[:,\w]+)?\n((?>.*?\*/))%xm then
      comment = "/*\n#{$1}"
    elsif @content =~ %r%((?>/\*.*?\*/\s+))
                         ([\w\.\s]+\s* = \s+)?rb_define_(class|module)[\t (]*?"(#{class_name})"%xm then
      comment = $1
    elsif @content =~ %r%((?>/\*.*?\*/\s+))
                         ([\w\. \t]+ = \s+)?rb_define_(class|module)_under[\t\w, (]*?"(#{class_name.split('::').last})"%xm then
      comment = $1
    else
      comment = ''
    end

    comment = new_comment comment, @top_level, :c
    comment.normalize

    look_for_directives_in class_mod, comment

    class_mod.add_comment comment, @top_level
  end

  ##
  # Generate a const table

  def gen_const_table file_content
    table = {}
    @content.scan(%r{
      (?<doc>(?>^\s*/\*.*?\*/\s+))
        rb_define_(?<type>\w+)\(\s*(?:\w+),\s*
                           "(?<name>\w+)"\s*,
                           .*?\)\s*;
    | (?<doc>(?>^\s*/\*.*?\*/\s+))
        rb_define_global_(?<type>const)\(\s*
                           "(?<name>\w+)"\s*,
                           .*?\)\s*;
    |  (?<doc>(?>^\s*/\*.*?\*/\s+))
        rb_file_(?<type>const)\(\s*
                           "(?<name>\w+)"\s*,
                           .*?\)\s*;
    |  (?<doc>(?>^\s*/\*.*?\*/\s+))
        rb_curses_define_(?<type>const)\(\s*
                           (?<name>\w+)
                           \s*\)\s*;
    | Document-(?:const|global|variable):\s
        (?<name>(?:\w+::)*\w+)
        \s*?\n(?<doc>(?>.*?\*/))
    }mxi) do
      name, doc, type = $~.values_at(:name, :doc, :type)
      if type
        table[[type, name]] = doc
      else
        table[name] = "/*\n" + doc
      end
    end
    table
  end

  ##
  # Finds a comment matching +type+ and +const_name+ either above the
  # comment or in the matching Document- section.

  def find_const_comment(type, const_name, class_name = nil)
    @const_table ||= {}
    @const_table[@content] ||= gen_const_table @content
    table = @const_table[@content]

    comment =
      table[[type, const_name]] ||
      (class_name && table[class_name + "::" + const_name]) ||
      table[const_name] ||
      ''

    new_comment comment, @top_level, :c
  end

  ##
  # Handles modifiers in +comment+ and updates +meth_obj+ as appropriate.

  def find_modifiers comment, meth_obj
    comment.normalize
    comment.extract_call_seq meth_obj

    look_for_directives_in meth_obj, comment
  end

  ##
  # Finds a <tt>Document-method</tt> override for +meth_obj+ on +class_name+

  def find_override_comment class_name, meth_obj
    name = Regexp.escape meth_obj.name
    prefix = Regexp.escape meth_obj.name_prefix

    comment = if @content =~ %r%Document-method:
                                \s+#{class_name}#{prefix}#{name}
                                \s*?\n((?>.*?\*/))%xm then
                "/*#{$1}"
              elsif @content =~ %r%Document-method:
                                   \s#{name}\s*?\n((?>.*?\*/))%xm then
                "/*#{$1}"
              end

    return unless comment

    new_comment comment, @top_level, :c
  end

  ##
  # Creates a new RDoc::Attr +attr_name+ on class +var_name+ that is either
  # +read+, +write+ or both

  def handle_attr(var_name, attr_name, read, write)
    rw = ''
    rw += 'R' if TRUE_VALUES.include?(read)
    rw += 'W' if TRUE_VALUES.include?(write)

    class_name = @known_classes[var_name]

    return unless class_name

    class_obj = find_class var_name, class_name

    return unless class_obj

    comment = find_attr_comment var_name, attr_name
    comment.normalize

    name = attr_name.gsub(/rb_intern(?:_const)?\("([^"]+)"\)/, '\1')

    attr = RDoc::Attr.new '', name, rw, comment

    attr.record_location @top_level
    class_obj.add_attribute attr
    @stats.add_attribute attr
  end

  ##
  # Creates a new RDoc::NormalClass or RDoc::NormalModule based on +type+
  # named +class_name+ in +parent+ which was assigned to the C +var_name+.

  def handle_class_module(var_name, type, class_name, parent, in_module)
    parent_name = @known_classes[parent] || parent

    if in_module then
      enclosure = @classes[in_module] || @store.find_c_enclosure(in_module)

      if enclosure.nil? and enclosure = @known_classes[in_module] then
        enc_type = /^rb_m/ =~ in_module ? :module : :class
        handle_class_module in_module, enc_type, enclosure, nil, nil
        enclosure = @classes[in_module]
      end

      unless enclosure then
        @enclosure_dependencies[in_module] << var_name
        @missing_dependencies[var_name] =
          [var_name, type, class_name, parent, in_module]

        return
      end
    else
      enclosure = @top_level
    end

    if type == :class then
      full_name = if RDoc::ClassModule === enclosure then
                    enclosure.full_name + "::#{class_name}"
                  else
                    class_name
                  end

      if @content =~ %r%Document-class:\s+#{full_name}\s*<\s+([:,\w]+)% then
        parent_name = $1
      end

      cm = enclosure.add_class RDoc::NormalClass, class_name, parent_name
    else
      cm = enclosure.add_module RDoc::NormalModule, class_name
    end

    cm.record_location enclosure.top_level

    find_class_comment cm.full_name, cm

    case cm
    when RDoc::NormalClass
      @stats.add_class cm
    when RDoc::NormalModule
      @stats.add_module cm
    end

    @classes[var_name] = cm
    @known_classes[var_name] = cm.full_name
    @store.add_c_enclosure var_name, cm
  end

  ##
  # Adds constants.  By providing some_value: at the start of the comment you
  # can override the C value of the comment to give a friendly definition.
  #
  #   /* 300: The perfect score in bowling */
  #   rb_define_const(cFoo, "PERFECT", INT2FIX(300));
  #
  # Will override <tt>INT2FIX(300)</tt> with the value +300+ in the output
  # RDoc.  Values may include quotes and escaped colons (\:).

  def handle_constants(type, var_name, const_name, definition)
    class_name = @known_classes[var_name]

    return unless class_name

    class_obj = find_class var_name, class_name, class_name[/::\K[^:]+\z/]

    unless class_obj then
      @options.warn 'Enclosing class or module %p is not known' % [const_name]
      return
    end

    comment = find_const_comment type, const_name, class_name
    comment.normalize

    # In the case of rb_define_const, the definition and comment are in
    # "/* definition: comment */" form.  The literal ':' and '\' characters
    # can be escaped with a backslash.
    if type.downcase == 'const' then
      if /\A(.+?)?:(?!\S)/ =~ comment.text
        new_definition, new_comment = $1, $'

        if !new_definition # Default to literal C definition
          new_definition = definition
        else
          new_definition = new_definition.gsub(/\\([\\:])/, '\1')
        end

        new_definition.sub!(/\A(\s+)/, '')

        new_comment = "#{$1}#{new_comment.lstrip}"

        new_comment = self.new_comment(new_comment, @top_level, :c)

        con = RDoc::Constant.new const_name, new_definition, new_comment
      else
        con = RDoc::Constant.new const_name, definition, comment
      end
    else
      con = RDoc::Constant.new const_name, definition, comment
    end

    con.record_location @top_level
    @stats.add_constant con
    class_obj.add_constant con
  end

  ##
  # Removes #ifdefs that would otherwise confuse us

  def handle_ifdefs_in(body)
    body.gsub(/^#ifdef HAVE_PROTOTYPES.*?#else.*?\n(.*?)#endif.*?\n/m, '\1')
  end

  ##
  # Adds an RDoc::AnyMethod +meth_name+ defined on a class or module assigned
  # to +var_name+.  +type+ is the type of method definition function used.
  # +singleton_method+ and +module_function+ create a singleton method.

  def handle_method(type, var_name, meth_name, function, param_count,
                    source_file = nil)
    class_name = @known_classes[var_name]
    singleton  = @singleton_classes.key? var_name

    @methods[var_name][function] << meth_name

    return unless class_name

    class_obj = find_class var_name, class_name

    if existing_method = class_obj.method_list.find { |m| m.c_function == function }
      add_alias(var_name, class_obj, existing_method.name, meth_name, existing_method.comment)
    end

    if class_obj then
      if meth_name == 'initialize' then
        meth_name = 'new'
        singleton = true
        type = 'method' # force public
      end

      meth_obj = RDoc::AnyMethod.new '', meth_name
      meth_obj.c_function = function
      meth_obj.singleton =
        singleton || %w[singleton_method module_function].include?(type)

      p_count = Integer(param_count) rescue -1

      if source_file then
        file_name = File.join @file_dir, source_file

        if File.exist? file_name then
          file_content = File.read file_name
        else
          @options.warn "unknown source #{source_file} for #{meth_name} in #{@file_name}"
        end
      else
        file_content = @content
      end

      body = find_body class_name, function, meth_obj, file_content

      if body and meth_obj.document_self then
        meth_obj.params = if p_count < -1 then # -2 is Array
                            '(*args)'
                          elsif p_count == -1 then # argc, argv
                            rb_scan_args body
                          else
                            args = (1..p_count).map { |i| "p#{i}" }
                            "(#{args.join ', '})"
                          end


        meth_obj.record_location @top_level

        if meth_obj.section_title
          class_obj.temporary_section = class_obj.add_section(meth_obj.section_title)
        end
        class_obj.add_method meth_obj

        @stats.add_method meth_obj
        meth_obj.visibility = :private if 'private_method' == type
      end
    end
  end

  ##
  # Registers a singleton class +sclass_var+ as a singleton of +class_var+

  def handle_singleton sclass_var, class_var
    class_name = @known_classes[class_var]

    @known_classes[sclass_var]     = class_name
    @singleton_classes[sclass_var] = class_name
  end

  ##
  # Loads the variable map with the given +name+ from the RDoc::Store, if
  # present.

  def load_variable_map map_name
    return {} unless files = @store.cache[map_name]
    return {} unless name_map = files[@file_name]

    class_map = {}

    name_map.each do |variable, name|
      next unless mod = @store.find_class_or_module(name)

      class_map[variable] = if map_name == :c_class_variables then
                              mod
                            else
                              name
                            end
      @known_classes[variable] = name
    end

    class_map
  end

  ##
  # Look for directives in a normal comment block:
  #
  #   /*
  #    * :title: My Awesome Project
  #    */
  #
  # This method modifies the +comment+
  # Both :main: and :title: directives are deprecated and will be removed in RDoc 7.

  def look_for_directives_in context, comment
    @preprocess.handle comment, context do |directive, param|
      case directive
      when 'main' then
        @options.main_page = param

        warn <<~MSG
          The :main: directive is deprecated and will be removed in RDoc 7.

          You can use these options to specify the initial page displayed instead:
          - `--main=#{param}` via the command line
          - `rdoc.main = "#{param}"` if you use `RDoc::Task`
          - `main_page: #{param}` in your `.rdoc_options` file
        MSG
        ''
      when 'title' then
        @options.default_title = param if @options.respond_to? :default_title=

        warn <<~MSG
          The :title: directive is deprecated and will be removed in RDoc 7.

          You can use these options to specify the title displayed instead:
          - `--title=#{param}` via the command line
          - `rdoc.title = "#{param}"` if you use `RDoc::Task`
          - `title: #{param}` in your `.rdoc_options` file
        MSG
        ''
      end
    end

    comment
  end

  ##
  # Extracts parameters from the +method_body+ and returns a method
  # parameter string.  Follows 1.9.3dev's scan-arg-spec, see README.EXT

  def rb_scan_args method_body
    method_body =~ /rb_scan_args\((.*?)\)/m
    return '(*args)' unless $1

    $1.split(/,/)[2] =~ /"(.*?)"/ # format argument
    format = $1.split(//)

    lead = opt = trail = 0

    if format.first =~ /\d/ then
      lead = $&.to_i
      format.shift
      if format.first =~ /\d/ then
        opt = $&.to_i
        format.shift
        if format.first =~ /\d/ then
          trail = $&.to_i
          format.shift
          block_arg = true
        end
      end
    end

    if format.first == '*' and not block_arg then
      var = true
      format.shift
      if format.first =~ /\d/ then
        trail = $&.to_i
        format.shift
      end
    end

    if format.first == ':' then
      hash = true
      format.shift
    end

    if format.first == '&' then
      block = true
      format.shift
    end

    # if the format string is not empty there's a bug in the C code, ignore it

    args = []
    position = 1

    (1...(position + lead)).each do |index|
      args << "p#{index}"
    end

    position += lead

    (position...(position + opt)).each do |index|
      args << "p#{index} = v#{index}"
    end

    position += opt

    if var then
      args << '*args'
      position += 1
    end

    (position...(position + trail)).each do |index|
      args << "p#{index}"
    end

    position += trail

    if hash then
      args << "p#{position} = {}"
    end

    args << '&block' if block

    "(#{args.join ', '})"
  end

  ##
  # Removes lines that are commented out that might otherwise get picked up
  # when scanning for classes and methods

  def remove_commented_out_lines
    @content = @content.gsub(%r%//.*rb_define_%, '//')
  end

  ##
  # Extracts the classes, modules, methods, attributes, constants and aliases
  # from a C file and returns an RDoc::TopLevel for this file

  def scan
    remove_commented_out_lines

    do_classes_and_modules
    do_missing

    do_constants
    do_methods
    do_includes
    do_aliases
    do_attrs

    @store.add_c_variables self

    @top_level
  end

  ##
  # Creates a RDoc::Comment instance.

  def new_comment text = nil, location = nil, language = nil
    RDoc::Comment.new(text, location, language).tap do |comment|
      comment.format = @markup
    end
  end
end
PK)J[˥~�
�
9share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/ruby_tools.rbnu�[���# frozen_string_literal: true
##
# Collection of methods for writing parsers

module RDoc::Parser::RubyTools

  ##
  # Adds a token listener +obj+, but you should probably use token_listener

  def add_token_listener(obj)
    @token_listeners ||= []
    @token_listeners << obj
  end

  ##
  # Fetches the next token from the scanner

  def get_tk
    tk = nil

    if @tokens.empty? then
      if @scanner_point >= @scanner.size
        return nil
      else
        tk = @scanner[@scanner_point]
        @scanner_point += 1
        @read.push tk[:text]
      end
    else
      @read.push @unget_read.shift
      tk = @tokens.shift
    end

    if tk == nil || :on___end__ == tk[:kind]
      tk = nil
    end

    return nil unless tk

    # inform any listeners of our shiny new token
    @token_listeners.each do |obj|
      obj.add_token(tk)
    end if @token_listeners

    tk
  end

  ##
  # Reads and returns all tokens up to one of +tokens+.  Leaves the matched
  # token in the token list.

  def get_tk_until(*tokens)
    read = []

    loop do
      tk = get_tk

      case tk
      when *tokens then
        unget_tk tk
        break
      end

      read << tk
    end

    read
  end

  ##
  # Retrieves a String representation of the read tokens

  def get_tkread
    read = @read.join("")
    @read = []
    read
  end

  ##
  # Peek equivalent for get_tkread

  def peek_read
    @read.join('')
  end

  ##
  # Peek at the next token, but don't remove it from the stream

  def peek_tk
    unget_tk(tk = get_tk)
    tk
  end

  ##
  # Removes the token listener +obj+

  def remove_token_listener(obj)
    @token_listeners.delete(obj)
  end

  ##
  # Resets the tools

  def reset
    @read       = []
    @tokens     = []
    @unget_read = []
    @nest = 0
    @scanner_point = 0
  end

  ##
  # Skips whitespace tokens including newlines

  def skip_tkspace
    tokens = []

    while (tk = get_tk) and (:on_sp == tk[:kind] or :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]) do
      tokens.push(tk)
    end

    unget_tk(tk)
    tokens
  end

  ##
  # Skips whitespace tokens excluding newlines

  def skip_tkspace_without_nl
    tokens = []

    while (tk = get_tk) and :on_sp == tk[:kind] do
      tokens.push(tk)
    end

    unget_tk(tk)
    tokens
  end

  ##
  # Has +obj+ listen to tokens

  def token_listener(obj)
    add_token_listener obj
    yield
  ensure
    remove_token_listener obj
  end

  ##
  # Returns +tk+ to the scanner

  def unget_tk(tk)
    @tokens.unshift tk
    @unget_read.unshift @read.pop

    # Remove this token from any listeners
    @token_listeners.each do |obj|
      obj.pop_token
    end if @token_listeners

    nil
  end

end
PK)J[�-�L  ?share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/ripper_state_lex.rbnu�[���# frozen_string_literal: true
require 'ripper'

##
# Wrapper for Ripper lex states

class RDoc::Parser::RipperStateLex
  # :stopdoc:

  Token = Struct.new(:line_no, :char_no, :kind, :text, :state)

  EXPR_END   = Ripper::EXPR_END
  EXPR_ENDFN = Ripper::EXPR_ENDFN
  EXPR_ARG   = Ripper::EXPR_ARG
  EXPR_FNAME = Ripper::EXPR_FNAME

  class InnerStateLex < Ripper::Filter
    def initialize(code)
      super(code)
    end

    def on_default(event, tok, data)
      data << Token.new(lineno, column, event, tok, state)
    end
  end

  def get_squashed_tk
    if @buf.empty?
      tk = @tokens.shift
    else
      tk = @buf.shift
    end
    return nil if tk.nil?
    case tk[:kind]
    when :on_symbeg then
      tk = get_symbol_tk(tk)
    when :on_tstring_beg then
      tk = get_string_tk(tk)
    when :on_backtick then
      if (tk[:state] & (EXPR_FNAME | EXPR_ENDFN)) != 0
        tk[:kind] = :on_ident
        tk[:state] = Ripper::Lexer::State.new(EXPR_ARG)
      else
        tk = get_string_tk(tk)
      end
    when :on_regexp_beg then
      tk = get_regexp_tk(tk)
    when :on_embdoc_beg then
      tk = get_embdoc_tk(tk)
    when :on_heredoc_beg then
      @heredoc_queue << retrieve_heredoc_info(tk)
    when :on_nl, :on_ignored_nl, :on_comment, :on_heredoc_end then
      if !@heredoc_queue.empty?
        get_heredoc_tk(*@heredoc_queue.shift)
      elsif tk[:text].nil? # :on_ignored_nl sometimes gives nil
        tk[:text] = ''
      end
    when :on_words_beg then
      tk = get_words_tk(tk)
    when :on_qwords_beg then
      tk = get_words_tk(tk)
    when :on_symbols_beg then
      tk = get_words_tk(tk)
    when :on_qsymbols_beg then
      tk = get_words_tk(tk)
    when :on_op then
      if '&.' == tk[:text]
        tk[:kind] = :on_period
      else
        tk = get_op_tk(tk)
      end
    end
    tk
  end

  private def get_symbol_tk(tk)
    is_symbol = true
    symbol_tk = Token.new(tk.line_no, tk.char_no, :on_symbol)
    if ":'" == tk[:text] or ':"' == tk[:text] or tk[:text].start_with?('%s')
      tk1 = get_string_tk(tk)
      symbol_tk[:text] = tk1[:text]
      symbol_tk[:state] = tk1[:state]
    else
      case (tk1 = get_squashed_tk)[:kind]
      when :on_ident
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_tstring_content
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = get_squashed_tk[:state] # skip :on_tstring_end
      when :on_tstring_end
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_op
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_ivar
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_cvar
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_gvar
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_const
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_kw
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      else
        is_symbol = false
        tk = tk1
      end
    end
    if is_symbol
      tk = symbol_tk
    end
    tk
  end

  private def get_string_tk(tk)
    string = tk[:text]
    state = nil
    kind = :on_tstring
    loop do
      inner_str_tk = get_squashed_tk
      if inner_str_tk.nil?
        break
      elsif :on_tstring_end == inner_str_tk[:kind]
        string = string + inner_str_tk[:text]
        state = inner_str_tk[:state]
        break
      elsif :on_label_end == inner_str_tk[:kind]
        string = string + inner_str_tk[:text]
        state = inner_str_tk[:state]
        kind = :on_symbol
        break
      else
        string = string + inner_str_tk[:text]
        if :on_embexpr_beg == inner_str_tk[:kind] then
          kind = :on_dstring if :on_tstring == kind
        end
      end
    end
    Token.new(tk.line_no, tk.char_no, kind, string, state)
  end

  private def get_regexp_tk(tk)
    string = tk[:text]
    state = nil
    loop do
      inner_str_tk = get_squashed_tk
      if inner_str_tk.nil?
        break
      elsif :on_regexp_end == inner_str_tk[:kind]
        string = string + inner_str_tk[:text]
        state = inner_str_tk[:state]
        break
      else
        string = string + inner_str_tk[:text]
      end
    end
    Token.new(tk.line_no, tk.char_no, :on_regexp, string, state)
  end

  private def get_embdoc_tk(tk)
    string = tk[:text]
    until :on_embdoc_end == (embdoc_tk = get_squashed_tk)[:kind] do
      string = string + embdoc_tk[:text]
    end
    string = string + embdoc_tk[:text]
    Token.new(tk.line_no, tk.char_no, :on_embdoc, string, embdoc_tk.state)
  end

  private def get_heredoc_tk(heredoc_name, indent)
    string = ''
    start_tk = nil
    prev_tk = nil
    until heredoc_end?(heredoc_name, indent, tk = @tokens.shift) do
      start_tk = tk unless start_tk
      if (prev_tk.nil? or "\n" == prev_tk[:text][-1]) and 0 != tk[:char_no]
        string = string + (' ' * tk[:char_no])
      end
      string = string + tk[:text]
      prev_tk = tk
    end
    start_tk = tk unless start_tk
    prev_tk = tk unless prev_tk
    @buf.unshift tk # closing heredoc
    heredoc_tk = Token.new(start_tk.line_no, start_tk.char_no, :on_heredoc, string, prev_tk.state)
    @buf.unshift heredoc_tk
  end

  private def retrieve_heredoc_info(tk)
    name = tk[:text].gsub(/\A<<[-~]?(['"`]?)(.+)\1\z/, '\2')
    indent = tk[:text] =~ /\A<<[-~]/
    [name, indent]
  end

  private def heredoc_end?(name, indent, tk)
    result = false
    if :on_heredoc_end == tk[:kind] then
      tk_name = tk[:text].chomp
      tk_name.lstrip! if indent
      if name == tk_name
        result = true
      end
    end
    result
  end

  private def get_words_tk(tk)
    string = ''
    start_token = tk[:text]
    start_quote = tk[:text].rstrip[-1]
    line_no = tk[:line_no]
    char_no = tk[:char_no]
    state = tk[:state]
    end_quote =
      case start_quote
      when ?( then ?)
      when ?[ then ?]
      when ?{ then ?}
      when ?< then ?>
      else start_quote
      end
    end_token = nil
    loop do
      tk = get_squashed_tk
      if tk.nil?
        end_token = end_quote
        break
      elsif :on_tstring_content == tk[:kind] then
        string += tk[:text]
      elsif :on_words_sep == tk[:kind] or :on_tstring_end == tk[:kind] then
        if end_quote == tk[:text].strip then
          end_token = tk[:text]
          break
        else
          string += tk[:text]
        end
      else
        string += tk[:text]
      end
    end
    text = "#{start_token}#{string}#{end_token}"
    Token.new(line_no, char_no, :on_dstring, text, state)
  end

  private def get_op_tk(tk)
    redefinable_operators = %w[! != !~ % & * ** + +@ - -@ / < << <= <=> == === =~ > >= >> [] []= ^ ` | ~]
    if redefinable_operators.include?(tk[:text]) and tk[:state] == EXPR_ARG then
      tk[:state] = Ripper::Lexer::State.new(EXPR_ARG)
      tk[:kind] = :on_ident
    elsif tk[:text] =~ /^[-+]$/ then
      tk_ahead = get_squashed_tk
      case tk_ahead[:kind]
      when :on_int, :on_float, :on_rational, :on_imaginary then
        tk[:text] += tk_ahead[:text]
        tk[:kind] = tk_ahead[:kind]
        tk[:state] = tk_ahead[:state]
      when :on_heredoc_beg, :on_tstring, :on_dstring # frozen/non-frozen string literal
        tk[:text] += tk_ahead[:text]
        tk[:kind] = tk_ahead[:kind]
        tk[:state] = tk_ahead[:state]
      else
        @buf.unshift tk_ahead
      end
    end
    tk
  end

  # :startdoc:

  # New lexer for +code+.
  def initialize(code)
    @buf = []
    @heredoc_queue = []
    @inner_lex = InnerStateLex.new(code)
    @tokens = @inner_lex.parse([])
  end

  # Returns tokens parsed from +code+.
  def self.parse(code)
    lex = self.new(code)
    tokens = []
    begin
      while tk = lex.get_squashed_tk
        tokens.push tk
      end
    rescue StopIteration
    end
    tokens
  end

  # Returns +true+ if lex state will be +END+ after +token+.
  def self.end?(token)
    (token[:state] & EXPR_END)
  end
end
PK)J[�aF��1share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/rd.rbnu�[���# frozen_string_literal: true
##
# Parse a RD format file.  The parsed RDoc::Markup::Document is attached as a
# file comment.

class RDoc::Parser::RD < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(/\.rd(?:\.[^.]+)?$/)

  ##
  # Creates an rd-format TopLevel for the given file.

  def scan
    comment = RDoc::Comment.new @content, @top_level
    comment.format = 'rd'

    @top_level.comment = comment
  end

end
PK)J[q�����9share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/prism_ruby.rbnu�[���# frozen_string_literal: true

require 'prism'
require_relative 'ripper_state_lex'

# Unlike lib/rdoc/parser/ruby.rb, this file is not based on rtags and does not contain code from
#   rtags.rb -
#   ruby-lex.rb - ruby lexcal analyzer
#   ruby-token.rb - ruby tokens

# Parse and collect document from Ruby source code.
# RDoc::Parser::PrismRuby is compatible with RDoc::Parser::Ruby and aims to replace it.

class RDoc::Parser::PrismRuby < RDoc::Parser

  parse_files_matching(/\.rbw?$/) if ENV['RDOC_USE_PRISM_PARSER']

  attr_accessor :visibility
  attr_reader :container, :singleton

  def initialize(top_level, file_name, content, options, stats)
    super

    content = handle_tab_width(content)

    @size = 0
    @token_listeners = nil
    content = RDoc::Encoding.remove_magic_comment content
    @content = content
    @markup = @options.markup
    @track_visibility = :nodoc != @options.visibility
    @encoding = @options.encoding

    @module_nesting = [top_level]
    @container = top_level
    @visibility = :public
    @singleton = false
  end

  # Dive into another container

  def with_container(container, singleton: false)
    old_container = @container
    old_visibility = @visibility
    old_singleton = @singleton
    @visibility = :public
    @container = container
    @singleton = singleton
    unless singleton
      @module_nesting.push container

      # Need to update module parent chain to emulate Module.nesting.
      # This mechanism is inaccurate and needs to be fixed.
      container.parent = old_container
    end
    yield container
  ensure
    @container = old_container
    @visibility = old_visibility
    @singleton = old_singleton
    @module_nesting.pop unless singleton
  end

  # Records the location of this +container+ in the file for this parser and
  # adds it to the list of classes and modules in the file.

  def record_location container # :nodoc:
    case container
    when RDoc::ClassModule then
      @top_level.add_to_classes_or_modules container
    end

    container.record_location @top_level
  end

  # Scans this Ruby file for Ruby constructs

  def scan
    @tokens = RDoc::Parser::RipperStateLex.parse(@content)
    @lines = @content.lines
    result = Prism.parse(@content)
    @program_node = result.value
    @line_nodes = {}
    prepare_line_nodes(@program_node)
    prepare_comments(result.comments)
    return if @top_level.done_documenting

    @first_non_meta_comment = nil
    if (_line_no, start_line, rdoc_comment = @unprocessed_comments.first)
      @first_non_meta_comment = rdoc_comment if start_line < @program_node.location.start_line
    end

    @program_node.accept(RDocVisitor.new(self, @top_level, @store))
    process_comments_until(@lines.size + 1)
  end

  def should_document?(code_object) # :nodoc:
    return true unless @track_visibility
    return false if code_object.parent&.document_children == false
    code_object.document_self
  end

  # Assign AST node to a line.
  # This is used to show meta-method source code in the documentation.

  def prepare_line_nodes(node) # :nodoc:
    case node
    when Prism::CallNode, Prism::DefNode
      @line_nodes[node.location.start_line] ||= node
    end
    node.compact_child_nodes.each do |child|
      prepare_line_nodes(child)
    end
  end

  # Prepares comments for processing. Comments are grouped into consecutive.
  # Consecutive comment is linked to the next non-blank line.
  #
  # Example:
  #   01| class A # modifier comment 1
  #   02|   def foo; end # modifier comment 2
  #   03|
  #   04|   # consecutive comment 1 start_line: 4
  #   05|   # consecutive comment 1 linked to line: 7
  #   06|
  #   07|   # consecutive comment 2 start_line: 7
  #   08|   # consecutive comment 2 linked to line: 10
  #   09|
  #   10|   def bar; end # consecutive comment 2 linked to this line
  #   11| end

  def prepare_comments(comments)
    current = []
    consecutive_comments = [current]
    @modifier_comments = {}
    comments.each do |comment|
      if comment.is_a? Prism::EmbDocComment
        consecutive_comments << [comment] << (current = [])
      elsif comment.location.start_line_slice.match?(/\S/)
        @modifier_comments[comment.location.start_line] = RDoc::Comment.new(comment.slice, @top_level, :ruby)
      elsif current.empty? || current.last.location.end_line + 1 == comment.location.start_line
        current << comment
      else
        consecutive_comments << (current = [comment])
      end
    end
    consecutive_comments.reject!(&:empty?)

    # Example: line_no = 5, start_line = 2, comment_text = "# comment_start_line\n# comment\n"
    # 1| class A
    # 2|   # comment_start_line
    # 3|   # comment
    # 4|
    # 5|   def f; end # comment linked to this line
    # 6| end
    @unprocessed_comments = consecutive_comments.map! do |comments|
      start_line = comments.first.location.start_line
      line_no = comments.last.location.end_line + (comments.last.location.end_column == 0 ? 0 : 1)
      texts = comments.map do |c|
        c.is_a?(Prism::EmbDocComment) ? c.slice.lines[1...-1].join : c.slice
      end
      text = RDoc::Encoding.change_encoding(texts.join("\n"), @encoding) if @encoding
      line_no += 1 while @lines[line_no - 1]&.match?(/\A\s*$/)
      comment = RDoc::Comment.new(text, @top_level, :ruby)
      comment.line = start_line
      [line_no, start_line, comment]
    end

    # The first comment is special. It defines markup for the rest of the comments.
    _, first_comment_start_line, first_comment_text = @unprocessed_comments.first
    if first_comment_text && @lines[0...first_comment_start_line - 1].all? { |l| l.match?(/\A\s*$/) }
      comment = RDoc::Comment.new(first_comment_text.text, @top_level, :ruby)
      handle_consecutive_comment_directive(@container, comment)
      @markup = comment.format
    end
    @unprocessed_comments.each do |_, _, comment|
      comment.format = @markup
    end
  end

  # Creates an RDoc::Method on +container+ from +comment+ if there is a
  # Signature section in the comment

  def parse_comment_tomdoc(container, comment, line_no, start_line)
    return unless signature = RDoc::TomDoc.signature(comment)

    name, = signature.split %r%[ \(]%, 2

    meth = RDoc::GhostMethod.new comment.text, name
    record_location(meth)
    meth.line = start_line
    meth.call_seq = signature
    return unless meth.name

    meth.start_collecting_tokens
    node = @line_nodes[line_no]
    tokens = node ? visible_tokens_from_location(node.location) : [file_line_comment_token(start_line)]
    tokens.each { |token| meth.token_stream << token }

    container.add_method meth
    comment.remove_private
    comment.normalize
    meth.comment = comment
    @stats.add_method meth
  end

  def handle_modifier_directive(code_object, line_no) # :nodoc:
    comment = @modifier_comments[line_no]
    @preprocess.handle(comment.text, code_object) if comment
  end

  def handle_consecutive_comment_directive(code_object, comment) # :nodoc:
    return unless comment
    @preprocess.handle(comment, code_object) do |directive, param|
      case directive
      when 'method', 'singleton-method',
           'attr', 'attr_accessor', 'attr_reader', 'attr_writer' then
        # handled elsewhere
        ''
      when 'section' then
        @container.set_current_section(param, comment.dup)
        comment.text = ''
        break
      end
    end
    comment.remove_private
  end

  def call_node_name_arguments(call_node) # :nodoc:
    return [] unless call_node.arguments
    call_node.arguments.arguments.map do |arg|
      case arg
      when Prism::SymbolNode
        arg.value
      when Prism::StringNode
        arg.unescaped
      end
    end || []
  end

  # Handles meta method comments

  def handle_meta_method_comment(comment, node)
    is_call_node = node.is_a?(Prism::CallNode)
    singleton_method = false
    visibility = @visibility
    attributes = rw = line_no = method_name = nil

    processed_comment = comment.dup
    @preprocess.handle(processed_comment, @container) do |directive, param, line|
      case directive
      when 'attr', 'attr_reader', 'attr_writer', 'attr_accessor'
        attributes = [param] if param
        attributes ||= call_node_name_arguments(node) if is_call_node
        rw = directive == 'attr_writer' ? 'W' : directive == 'attr_accessor' ? 'RW' : 'R'
        ''
      when 'method'
        method_name = param
        line_no = line
        ''
      when 'singleton-method'
        method_name = param
        line_no = line
        singleton_method = true
        visibility = :public
        ''
      when 'section' then
        @container.set_current_section(param, comment.dup)
        return # If the comment contains :section:, it is not a meta method comment
      end
    end

    if attributes
      attributes.each do |attr|
        a = RDoc::Attr.new(@container, attr, rw, processed_comment)
        a.store = @store
        a.line = line_no
        a.singleton = @singleton
        record_location(a)
        @container.add_attribute(a)
        a.visibility = visibility
      end
    elsif line_no || node
      method_name ||= call_node_name_arguments(node).first if is_call_node
      meth = RDoc::AnyMethod.new(@container, method_name)
      meth.singleton = @singleton || singleton_method
      handle_consecutive_comment_directive(meth, comment)
      comment.normalize
      comment.extract_call_seq(meth)
      meth.comment = comment
      if node
        tokens = visible_tokens_from_location(node.location)
        line_no = node.location.start_line
      else
        tokens = [file_line_comment_token(line_no)]
      end
      internal_add_method(
        @container,
        meth,
        line_no: line_no,
        visibility: visibility,
        singleton: @singleton || singleton_method,
        params: '()',
        calls_super: false,
        block_params: nil,
        tokens: tokens
      )
    end
  end

  def normal_comment_treat_as_ghost_method_for_now?(comment_text, line_no) # :nodoc:
    # Meta method comment should start with `##` but some comments does not follow this rule.
    # For now, RDoc accepts them as a meta method comment if there is no node linked to it.
    !@line_nodes[line_no] && comment_text.match?(/^#\s+:(method|singleton-method|attr|attr_reader|attr_writer|attr_accessor):/)
  end

  def handle_standalone_consecutive_comment_directive(comment, line_no, start_line) # :nodoc:
    if @markup == 'tomdoc'
      parse_comment_tomdoc(@container, comment, line_no, start_line)
      return
    end

    if comment.text =~ /\A#\#$/ && comment != @first_non_meta_comment
      node = @line_nodes[line_no]
      handle_meta_method_comment(comment, node)
    elsif normal_comment_treat_as_ghost_method_for_now?(comment.text, line_no) && comment != @first_non_meta_comment
      handle_meta_method_comment(comment, nil)
    else
      handle_consecutive_comment_directive(@container, comment)
    end
  end

  # Processes consecutive comments that were not linked to any documentable code until the given line number

  def process_comments_until(line_no_until)
    while !@unprocessed_comments.empty? && @unprocessed_comments.first[0] <= line_no_until
      line_no, start_line, rdoc_comment = @unprocessed_comments.shift
      handle_standalone_consecutive_comment_directive(rdoc_comment, line_no, start_line)
    end
  end

  # Skips all undocumentable consecutive comments until the given line number.
  # Undocumentable comments are comments written inside `def` or inside undocumentable class/module

  def skip_comments_until(line_no_until)
    while !@unprocessed_comments.empty? && @unprocessed_comments.first[0] <= line_no_until
      @unprocessed_comments.shift
    end
  end

  # Returns consecutive comment linked to the given line number

  def consecutive_comment(line_no)
    if @unprocessed_comments.first&.first == line_no
      @unprocessed_comments.shift.last
    end
  end

  def slice_tokens(start_pos, end_pos) # :nodoc:
    start_index = @tokens.bsearch_index { |t| ([t.line_no, t.char_no] <=> start_pos) >= 0 }
    end_index = @tokens.bsearch_index { |t| ([t.line_no, t.char_no] <=> end_pos) >= 0 }
    tokens = @tokens[start_index...end_index]
    tokens.pop if tokens.last&.kind == :on_nl
    tokens
  end

  def file_line_comment_token(line_no) # :nodoc:
    position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no - 1, 0, :on_comment)
    position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    position_comment
  end

  # Returns tokens from the given location

  def visible_tokens_from_location(location)
    position_comment = file_line_comment_token(location.start_line)
    newline_token = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    indent_token = RDoc::Parser::RipperStateLex::Token.new(location.start_line, 0, :on_sp, ' ' * location.start_character_column)
    tokens = slice_tokens(
      [location.start_line, location.start_character_column],
      [location.end_line, location.end_character_column]
    )
    [position_comment, newline_token, indent_token, *tokens]
  end

  # Handles `public :foo, :bar` `private :foo, :bar` and `protected :foo, :bar`

  def change_method_visibility(names, visibility, singleton: @singleton)
    new_methods = []
    @container.methods_matching(names, singleton) do |m|
      if m.parent != @container
        m = m.dup
        record_location(m)
        new_methods << m
      else
        m.visibility = visibility
      end
    end
    new_methods.each do |method|
      case method
      when RDoc::AnyMethod then
        @container.add_method(method)
      when RDoc::Attr then
        @container.add_attribute(method)
      end
      method.visibility = visibility
    end
  end

  # Handles `module_function :foo, :bar`

  def change_method_to_module_function(names)
    @container.set_visibility_for(names, :private, false)
    new_methods = []
    @container.methods_matching(names) do |m|
      s_m = m.dup
      record_location(s_m)
      s_m.singleton = true
      new_methods << s_m
    end
    new_methods.each do |method|
      case method
      when RDoc::AnyMethod then
        @container.add_method(method)
      when RDoc::Attr then
        @container.add_attribute(method)
      end
      method.visibility = :public
    end
  end

  # Handles `alias foo bar` and `alias_method :foo, :bar`

  def add_alias_method(old_name, new_name, line_no)
    comment = consecutive_comment(line_no)
    handle_consecutive_comment_directive(@container, comment)
    visibility = @container.find_method(old_name, @singleton)&.visibility || :public
    a = RDoc::Alias.new(nil, old_name, new_name, comment, @singleton)
    a.comment = comment
    handle_modifier_directive(a, line_no)
    a.store = @store
    a.line = line_no
    record_location(a)
    if should_document?(a)
      @container.add_alias(a)
      @container.find_method(new_name, @singleton)&.visibility = visibility
    end
  end

  # Handles `attr :a, :b`, `attr_reader :a, :b`, `attr_writer :a, :b` and `attr_accessor :a, :b`

  def add_attributes(names, rw, line_no)
    comment = consecutive_comment(line_no)
    handle_consecutive_comment_directive(@container, comment)
    return unless @container.document_children

    names.each do |symbol|
      a = RDoc::Attr.new(nil, symbol.to_s, rw, comment)
      a.store = @store
      a.line = line_no
      a.singleton = @singleton
      record_location(a)
      handle_modifier_directive(a, line_no)
      @container.add_attribute(a) if should_document?(a)
      a.visibility = visibility # should set after adding to container
    end
  end

  def add_includes_extends(names, rdoc_class, line_no) # :nodoc:
    comment = consecutive_comment(line_no)
    handle_consecutive_comment_directive(@container, comment)
    names.each do |name|
      ie = @container.add(rdoc_class, name, '')
      ie.store = @store
      ie.line = line_no
      ie.comment = comment
      record_location(ie)
    end
  end

  # Handle `include Foo, Bar`

  def add_includes(names, line_no) # :nodoc:
    add_includes_extends(names, RDoc::Include, line_no)
  end

  # Handle `extend Foo, Bar`

  def add_extends(names, line_no) # :nodoc:
    add_includes_extends(names, RDoc::Extend, line_no)
  end

  # Adds a method defined by `def` syntax

  def add_method(name, receiver_name:, receiver_fallback_type:, visibility:, singleton:, params:, calls_super:, block_params:, tokens:, start_line:, end_line:)
    receiver = receiver_name ? find_or_create_module_path(receiver_name, receiver_fallback_type) : @container
    meth = RDoc::AnyMethod.new(nil, name)
    if (comment = consecutive_comment(start_line))
      handle_consecutive_comment_directive(@container, comment)
      handle_consecutive_comment_directive(meth, comment)

      comment.normalize
      comment.extract_call_seq(meth)
      meth.comment = comment
    end
    handle_modifier_directive(meth, start_line)
    handle_modifier_directive(meth, end_line)
    return unless should_document?(meth)


    if meth.name == 'initialize' && !singleton
      if meth.dont_rename_initialize
        visibility = :protected
      else
        meth.name = 'new'
        singleton = true
        visibility = :public
      end
    end

    internal_add_method(
      receiver,
      meth,
      line_no: start_line,
      visibility: visibility,
      singleton: singleton,
      params: params,
      calls_super: calls_super,
      block_params: block_params,
      tokens: tokens
    )
  end

  private def internal_add_method(container, meth, line_no:, visibility:, singleton:, params:, calls_super:, block_params:, tokens:) # :nodoc:
    meth.name ||= meth.call_seq[/\A[^()\s]+/] if meth.call_seq
    meth.name ||= 'unknown'
    meth.store = @store
    meth.line = line_no
    meth.singleton = singleton
    container.add_method(meth) # should add after setting singleton and before setting visibility
    meth.visibility = visibility
    meth.params ||= params
    meth.calls_super = calls_super
    meth.block_params ||= block_params if block_params
    record_location(meth)
    meth.start_collecting_tokens
    tokens.each do |token|
      meth.token_stream << token
    end
  end

  # Find or create module or class from a given module name.
  # If module or class does not exist, creates a module or a class according to `create_mode` argument.

  def find_or_create_module_path(module_name, create_mode)
    root_name, *path, name = module_name.split('::')
    add_module = ->(mod, name, mode) {
      case mode
      when :class
        mod.add_class(RDoc::NormalClass, name, 'Object').tap { |m| m.store = @store }
      when :module
        mod.add_module(RDoc::NormalModule, name).tap { |m| m.store = @store }
      end
    }
    if root_name.empty?
      mod = @top_level
    else
      @module_nesting.reverse_each do |nesting|
        mod = nesting.find_module_named(root_name)
        break if mod
      end
      return mod || add_module.call(@top_level, root_name, create_mode) unless name
      mod ||= add_module.call(@top_level, root_name, :module)
    end
    path.each do |name|
      mod = mod.find_module_named(name) || add_module.call(mod, name, :module)
    end
    mod.find_module_named(name) || add_module.call(mod, name, create_mode)
  end

  # Resolves constant path to a full path by searching module nesting

  def resolve_constant_path(constant_path)
    owner_name, path = constant_path.split('::', 2)
    return constant_path if owner_name.empty? # ::Foo, ::Foo::Bar
    mod = nil
    @module_nesting.reverse_each do |nesting|
      mod = nesting.find_module_named(owner_name)
      break if mod
    end
    mod ||= @top_level.find_module_named(owner_name)
    [mod.full_name, path].compact.join('::') if mod
  end

  # Returns a pair of owner module and constant name from a given constant path.
  # Creates owner module if it does not exist.

  def find_or_create_constant_owner_name(constant_path)
    const_path, colon, name = constant_path.rpartition('::')
    if colon.empty? # class Foo
      [@container, name]
    elsif const_path.empty? # class ::Foo
      [@top_level, name]
    else # `class Foo::Bar` or `class ::Foo::Bar`
      [find_or_create_module_path(const_path, :module), name]
    end
  end

  # Adds a constant

  def add_constant(constant_name, rhs_name, start_line, end_line)
    comment = consecutive_comment(start_line)
    handle_consecutive_comment_directive(@container, comment)
    owner, name = find_or_create_constant_owner_name(constant_name)
    constant = RDoc::Constant.new(name, rhs_name, comment)
    constant.store = @store
    constant.line = start_line
    record_location(constant)
    handle_modifier_directive(constant, start_line)
    handle_modifier_directive(constant, end_line)
    owner.add_constant(constant)
    mod =
      if rhs_name =~ /^::/
        @store.find_class_or_module(rhs_name)
      else
        @container.find_module_named(rhs_name)
      end
    if mod && constant.document_self
      a = @container.add_module_alias(mod, rhs_name, constant, @top_level)
      a.store = @store
      a.line = start_line
      record_location(a)
    end
  end

  # Adds module or class

  def add_module_or_class(module_name, start_line, end_line, is_class: false, superclass_name: nil)
    comment = consecutive_comment(start_line)
    handle_consecutive_comment_directive(@container, comment)
    return unless @container.document_children

    owner, name = find_or_create_constant_owner_name(module_name)
    if is_class
      mod = owner.classes_hash[name] || owner.add_class(RDoc::NormalClass, name, superclass_name || '::Object')

      # RDoc::NormalClass resolves superclass name despite of the lack of module nesting information.
      # We need to fix it when RDoc::NormalClass resolved to a wrong constant name
      if superclass_name
        superclass_full_path = resolve_constant_path(superclass_name)
        superclass = @store.find_class_or_module(superclass_full_path) if superclass_full_path
        superclass_full_path ||= superclass_name
        if superclass
          mod.superclass = superclass
        elsif mod.superclass.is_a?(String) && mod.superclass != superclass_full_path
          mod.superclass = superclass_full_path
        end
      end
    else
      mod = owner.modules_hash[name] || owner.add_module(RDoc::NormalModule, name)
    end

    mod.store = @store
    mod.line = start_line
    record_location(mod)
    handle_modifier_directive(mod, start_line)
    handle_modifier_directive(mod, end_line)
    mod.add_comment(comment, @top_level) if comment
    mod
  end

  class RDocVisitor < Prism::Visitor # :nodoc:
    def initialize(scanner, top_level, store)
      @scanner = scanner
      @top_level = top_level
      @store = store
    end

    def visit_call_node(node)
      @scanner.process_comments_until(node.location.start_line - 1)
      if node.receiver.nil?
        case node.name
        when :attr
          _visit_call_attr_reader_writer_accessor(node, 'R')
        when :attr_reader
          _visit_call_attr_reader_writer_accessor(node, 'R')
        when :attr_writer
          _visit_call_attr_reader_writer_accessor(node, 'W')
        when :attr_accessor
          _visit_call_attr_reader_writer_accessor(node, 'RW')
        when :include
          _visit_call_include(node)
        when :extend
          _visit_call_extend(node)
        when :public
          _visit_call_public_private_protected(node, :public) { super }
        when :private
          _visit_call_public_private_protected(node, :private) { super }
        when :protected
          _visit_call_public_private_protected(node, :protected) { super }
        when :private_constant
          _visit_call_private_constant(node)
        when :public_constant
          _visit_call_public_constant(node)
        when :require
          _visit_call_require(node)
        when :alias_method
          _visit_call_alias_method(node)
        when :module_function
          _visit_call_module_function(node) { super }
        when :public_class_method
          _visit_call_public_private_class_method(node, :public) { super }
        when :private_class_method
          _visit_call_public_private_class_method(node, :private) { super }
        else
          super
        end
      else
        super
      end
    end

    def visit_alias_method_node(node)
      @scanner.process_comments_until(node.location.start_line - 1)
      return unless node.old_name.is_a?(Prism::SymbolNode) && node.new_name.is_a?(Prism::SymbolNode)
      @scanner.add_alias_method(node.old_name.value.to_s, node.new_name.value.to_s, node.location.start_line)
    end

    def visit_module_node(node)
      @scanner.process_comments_until(node.location.start_line - 1)
      module_name = constant_path_string(node.constant_path)
      mod = @scanner.add_module_or_class(module_name, node.location.start_line, node.location.end_line) if module_name
      if mod
        @scanner.with_container(mod) do
          super
          @scanner.process_comments_until(node.location.end_line)
        end
      else
        @scanner.skip_comments_until(node.location.end_line)
      end
    end

    def visit_class_node(node)
      @scanner.process_comments_until(node.location.start_line - 1)
      superclass_name = constant_path_string(node.superclass) if node.superclass
      class_name = constant_path_string(node.constant_path)
      klass = @scanner.add_module_or_class(class_name, node.location.start_line, node.location.end_line, is_class: true, superclass_name: superclass_name) if class_name
      if klass
        @scanner.with_container(klass) do
          super
          @scanner.process_comments_until(node.location.end_line)
        end
      else
        @scanner.skip_comments_until(node.location.end_line)
      end
    end

    def visit_singleton_class_node(node)
      @scanner.process_comments_until(node.location.start_line - 1)

      expression = node.expression
      expression = expression.body.body.first if expression.is_a?(Prism::ParenthesesNode) && expression.body&.body&.size == 1

      case expression
      when Prism::ConstantWriteNode
        # Accept `class << (NameErrorCheckers = Object.new)` as a module which is not actually a module
        mod = @scanner.container.add_module(RDoc::NormalModule, expression.name.to_s)
      when Prism::ConstantPathNode, Prism::ConstantReadNode
        expression_name = constant_path_string(expression)
        # If a constant_path does not exist, RDoc creates a module
        mod = @scanner.find_or_create_module_path(expression_name, :module) if expression_name
      when Prism::SelfNode
        mod = @scanner.container if @scanner.container != @top_level
      end
      if mod
        @scanner.with_container(mod, singleton: true) do
          super
          @scanner.process_comments_until(node.location.end_line)
        end
      else
        @scanner.skip_comments_until(node.location.end_line)
      end
    end

    def visit_def_node(node)
      start_line = node.location.start_line
      end_line = node.location.end_line
      @scanner.process_comments_until(start_line - 1)

      case node.receiver
      when Prism::NilNode, Prism::TrueNode, Prism::FalseNode
        visibility = :public
        singleton = false
        receiver_name =
          case node.receiver
          when Prism::NilNode
            'NilClass'
          when Prism::TrueNode
            'TrueClass'
          when Prism::FalseNode
            'FalseClass'
          end
        receiver_fallback_type = :class
      when Prism::SelfNode
        # singleton method of a singleton class is not documentable
        return if @scanner.singleton
        visibility = :public
        singleton = true
      when Prism::ConstantReadNode, Prism::ConstantPathNode
        visibility = :public
        singleton = true
        receiver_name = constant_path_string(node.receiver)
        receiver_fallback_type = :module
        return unless receiver_name
      when nil
        visibility = @scanner.visibility
        singleton = @scanner.singleton
      else
        # `def (unknown expression).method_name` is not documentable
        return
      end
      name = node.name.to_s
      params, block_params, calls_super = MethodSignatureVisitor.scan_signature(node)
      tokens = @scanner.visible_tokens_from_location(node.location)

      @scanner.add_method(
        name,
        receiver_name: receiver_name,
        receiver_fallback_type: receiver_fallback_type,
        visibility: visibility,
        singleton: singleton,
        params: params,
        block_params: block_params,
        calls_super: calls_super,
        tokens: tokens,
        start_line: start_line,
        end_line: end_line
      )
    ensure
      @scanner.skip_comments_until(end_line)
    end

    def visit_constant_path_write_node(node)
      @scanner.process_comments_until(node.location.start_line - 1)
      path = constant_path_string(node.target)
      return unless path

      @scanner.add_constant(
        path,
        constant_path_string(node.value) || node.value.slice,
        node.location.start_line,
        node.location.end_line
      )
      @scanner.skip_comments_until(node.location.end_line)
      # Do not traverse rhs not to document `A::B = Struct.new{def undocumentable_method; end}`
    end

    def visit_constant_write_node(node)
      @scanner.process_comments_until(node.location.start_line - 1)
      @scanner.add_constant(
        node.name.to_s,
        constant_path_string(node.value) || node.value.slice,
        node.location.start_line,
        node.location.end_line
      )
      @scanner.skip_comments_until(node.location.end_line)
      # Do not traverse rhs not to document `A = Struct.new{def undocumentable_method; end}`
    end

    private

    def constant_arguments_names(call_node)
      return unless call_node.arguments
      names = call_node.arguments.arguments.map { |arg| constant_path_string(arg) }
      names.all? ? names : nil
    end

    def symbol_arguments(call_node)
      arguments_node = call_node.arguments
      return unless arguments_node && arguments_node.arguments.all? { |arg| arg.is_a?(Prism::SymbolNode)}
      arguments_node.arguments.map { |arg| arg.value.to_sym }
    end

    def visibility_method_arguments(call_node, singleton:)
      arguments_node = call_node.arguments
      return unless arguments_node
      symbols = symbol_arguments(call_node)
      if symbols
        # module_function :foo, :bar
        return symbols.map(&:to_s)
      else
        return unless arguments_node.arguments.size == 1
        arg = arguments_node.arguments.first
        return unless arg.is_a?(Prism::DefNode)

        if singleton
          # `private_class_method def foo; end` `private_class_method def not_self.foo; end` should be ignored
          return unless arg.receiver.is_a?(Prism::SelfNode)
        else
          # `module_function def something.foo` should be ignored
          return if arg.receiver
        end
        # `module_function def foo; end` or `private_class_method def self.foo; end`
        [arg.name.to_s]
      end
    end

    def constant_path_string(node)
      case node
      when Prism::ConstantReadNode
        node.name.to_s
      when Prism::ConstantPathNode
        parent_name = node.parent ? constant_path_string(node.parent) : ''
        "#{parent_name}::#{node.name}" if parent_name
      end
    end

    def _visit_call_require(call_node)
      return unless call_node.arguments&.arguments&.size == 1
      arg = call_node.arguments.arguments.first
      return unless arg.is_a?(Prism::StringNode)
      @scanner.container.add_require(RDoc::Require.new(arg.unescaped, nil))
    end

    def _visit_call_module_function(call_node)
      yield
      return if @scanner.singleton
      names = visibility_method_arguments(call_node, singleton: false)&.map(&:to_s)
      @scanner.change_method_to_module_function(names) if names
    end

    def _visit_call_public_private_class_method(call_node, visibility)
      yield
      return if @scanner.singleton
      names = visibility_method_arguments(call_node, singleton: true)
      @scanner.change_method_visibility(names, visibility, singleton: true) if names
    end

    def _visit_call_public_private_protected(call_node, visibility)
      arguments_node = call_node.arguments
      if arguments_node.nil? # `public` `private`
        @scanner.visibility = visibility
      else # `public :foo, :bar`, `private def foo; end`
        yield
        names = visibility_method_arguments(call_node, singleton: @scanner.singleton)
        @scanner.change_method_visibility(names, visibility) if names
      end
    end

    def _visit_call_alias_method(call_node)
      new_name, old_name, *rest = symbol_arguments(call_node)
      return unless old_name && new_name && rest.empty?
      @scanner.add_alias_method(old_name.to_s, new_name.to_s, call_node.location.start_line)
    end

    def _visit_call_include(call_node)
      names = constant_arguments_names(call_node)
      line_no = call_node.location.start_line
      return unless names

      if @scanner.singleton
        @scanner.add_extends(names, line_no)
      else
        @scanner.add_includes(names, line_no)
      end
    end

    def _visit_call_extend(call_node)
      names = constant_arguments_names(call_node)
      @scanner.add_extends(names, call_node.location.start_line) if names && !@scanner.singleton
    end

    def _visit_call_public_constant(call_node)
      return if @scanner.singleton
      names = symbol_arguments(call_node)
      @scanner.container.set_constant_visibility_for(names.map(&:to_s), :public) if names
    end

    def _visit_call_private_constant(call_node)
      return if @scanner.singleton
      names = symbol_arguments(call_node)
      @scanner.container.set_constant_visibility_for(names.map(&:to_s), :private) if names
    end

    def _visit_call_attr_reader_writer_accessor(call_node, rw)
      names = symbol_arguments(call_node)
      @scanner.add_attributes(names.map(&:to_s), rw, call_node.location.start_line) if names
    end
    class MethodSignatureVisitor < Prism::Visitor # :nodoc:
      class << self
        def scan_signature(def_node)
          visitor = new
          def_node.body&.accept(visitor)
          params = "(#{def_node.parameters&.slice})"
          block_params = visitor.yields.first
          [params, block_params, visitor.calls_super]
        end
      end

      attr_reader :params, :yields, :calls_super

      def initialize
        @params = nil
        @calls_super = false
        @yields = []
      end

      def visit_def_node(node)
        # stop traverse inside nested def
      end

      def visit_yield_node(node)
        @yields << (node.arguments&.slice || '')
      end

      def visit_super_node(node)
        @calls_super = true
        super
      end

      def visit_forwarding_super_node(node)
        @calls_super = true
      end
    end
  end
end
PK)J[���U��5share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/simple.rbnu�[���# frozen_string_literal: true
##
# Parse a non-source file. We basically take the whole thing as one big
# comment.

class RDoc::Parser::Simple < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(//)

  attr_reader :content # :nodoc:

  ##
  # Prepare to parse a plain file

  def initialize(top_level, file_name, content, options, stats)
    super

    preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include

    @content = preprocess.handle @content, @top_level
  end

  ##
  # Extract the file contents and attach them to the TopLevel as a comment

  def scan
    comment = remove_coding_comment @content
    comment = remove_private_comment comment

    comment = RDoc::Comment.new comment, @top_level

    @top_level.comment = comment
    @top_level
  end

  ##
  # Removes the encoding magic comment from +text+

  def remove_coding_comment text
    text.sub(/\A# .*coding[=:].*$/, '')
  end

  ##
  # Removes private comments.
  #
  # Unlike RDoc::Comment#remove_private this implementation only looks for two
  # dashes at the beginning of the line.  Three or more dashes are considered
  # to be a rule and ignored.

  def remove_private_comment comment
    # Workaround for gsub encoding for Ruby 1.9.2 and earlier
    empty = ''
    empty = RDoc::Encoding.change_encoding empty, comment.encoding

    comment = comment.gsub(%r%^--\n.*?^\+\+\n?%m, empty)
    comment.sub(%r%^--\n.*%m, empty)
  end

end
PK)J[�s9��"�"8share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/changelog.rbnu�[���# frozen_string_literal: true

##
# A ChangeLog file parser.
#
# This parser converts a ChangeLog into an RDoc::Markup::Document.  When
# viewed as HTML a ChangeLog page will have an entry for each day's entries in
# the sidebar table of contents.
#
# This parser is meant to parse the MRI ChangeLog, but can be used to parse any
# {GNU style Change
# Log}[http://www.gnu.org/prep/standards/html_node/Style-of-Change-Logs.html].

class RDoc::Parser::ChangeLog < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(/(\/|\\|\A)ChangeLog[^\/\\]*\z/)

  ##
  # Attaches the +continuation+ of the previous line to the +entry_body+.
  #
  # Continued function listings are joined together as a single entry.
  # Continued descriptions are joined to make a single paragraph.

  def continue_entry_body entry_body, continuation
    return unless last = entry_body.last

    if last =~ /\)\s*\z/ and continuation =~ /\A\(/ then
      last.sub!(/\)\s*\z/, ',')
      continuation = continuation.sub(/\A\(/, '')
    end

    if last =~ /\s\z/ then
      last << continuation
    else
      last << ' ' + continuation
    end
  end

  ##
  # Creates an RDoc::Markup::Document given the +groups+ of ChangeLog entries.

  def create_document groups
    doc = RDoc::Markup::Document.new
    doc.omit_headings_below = 2
    doc.file = @top_level

    doc << RDoc::Markup::Heading.new(1, File.basename(@file_name))
    doc << RDoc::Markup::BlankLine.new

    groups.sort_by do |day,| day end.reverse_each do |day, entries|
      doc << RDoc::Markup::Heading.new(2, day.dup)
      doc << RDoc::Markup::BlankLine.new

      doc.concat create_entries entries
    end

    doc
  end

  ##
  # Returns a list of ChangeLog entries an RDoc::Markup nodes for the given
  # +entries+.

  def create_entries entries
    out = []

    entries.each do |entry, items|
      out << RDoc::Markup::Heading.new(3, entry)
      out << RDoc::Markup::BlankLine.new

      out << create_items(items)
    end

    out
  end

  ##
  # Returns an RDoc::Markup::List containing the given +items+ in the
  # ChangeLog

  def create_items items
    list = RDoc::Markup::List.new :NOTE

    items.each do |item|
      item =~ /\A(.*?(?:\([^)]+\))?):\s*/

      title = $1
      body = $'

      paragraph = RDoc::Markup::Paragraph.new body
      list_item = RDoc::Markup::ListItem.new title, paragraph
      list << list_item
    end

    list
  end

  ##
  # Groups +entries+ by date.

  def group_entries entries
    @time_cache ||= {}
    entries.group_by do |title, _|
      begin
        time = @time_cache[title]
        (time || parse_date(title)).strftime '%Y-%m-%d'
      rescue NoMethodError, ArgumentError
        time, = title.split '  ', 2
        parse_date(time).strftime '%Y-%m-%d'
      end
    end
  end

  ##
  # Parse date in ISO-8601, RFC-2822, or default of Git

  def parse_date(date)
    case date
    when /\A\s*(\d+)-(\d+)-(\d+)(?:[ T](\d+):(\d+):(\d+) *([-+]\d\d):?(\d\d))?\b/
      Time.new($1, $2, $3, $4, $5, $6, ("#{$7}:#{$8}" if $7))
    when /\A\s*\w{3}, +(\d+) (\w{3}) (\d+) (\d+):(\d+):(\d+) *(?:([-+]\d\d):?(\d\d))\b/
      Time.new($3, $2, $1, $4, $5, $6, ("#{$7}:#{$8}" if $7))
    when /\A\s*\w{3} (\w{3}) +(\d+) (\d+) (\d+):(\d+):(\d+) *(?:([-+]\d\d):?(\d\d))\b/
      Time.new($3, $1, $2, $4, $5, $6, ("#{$7}:#{$8}" if $7))
    when /\A\s*\w{3} (\w{3}) +(\d+) (\d+):(\d+):(\d+) (\d+)\b/
      Time.new($6, $1, $2, $3, $4, $5)
    else
      raise ArgumentError, "bad date: #{date}"
    end
  end

  ##
  # Parses the entries in the ChangeLog.
  #
  # Returns an Array of each ChangeLog entry in order of parsing.
  #
  # A ChangeLog entry is an Array containing the ChangeLog title (date and
  # committer) and an Array of ChangeLog items (file and function changed with
  # description).
  #
  # An example result would be:
  #
  #    [ 'Tue Dec  4 08:33:46 2012  Eric Hodel  <drbrain@segment7.net>',
  #      [ 'README.EXT:  Converted to RDoc format',
  #        'README.EXT.ja:  ditto']]

  def parse_entries
    @time_cache ||= {}

    if /\A((?:.*\n){,3})commit\s/ =~ @content
      class << self; prepend Git; end
      parse_info($1)
      return parse_entries
    end

    entries = []
    entry_name = nil
    entry_body = []

    @content.each_line do |line|
      case line
      when /^\s*$/ then
        next
      when /^\w.*/ then
        entries << [entry_name, entry_body] if entry_name

        entry_name = $&

        begin
          time = parse_date entry_name
          @time_cache[entry_name] = time
        rescue ArgumentError
          entry_name = nil
        end

        entry_body = []
      when /^(\t| {8})?\*\s*(.*)/ then # "\t* file.c (func): ..."
        entry_body << $2.dup
      when /^(\t| {8})?\s*(\(.*)/ then # "\t(func): ..."
        entry = $2

        if entry_body.last =~ /:/ then
          entry_body << entry.dup
        else
          continue_entry_body entry_body, entry
        end
      when /^(\t| {8})?\s*(.*)/ then
        continue_entry_body entry_body, $2
      end
    end

    entries << [entry_name, entry_body] if entry_name

    entries.reject! do |(entry, _)|
      entry == nil
    end

    entries
  end

  ##
  # Converts the ChangeLog into an RDoc::Markup::Document

  def scan
    @time_cache = {}

    entries = parse_entries
    grouped_entries = group_entries entries

    doc = create_document grouped_entries

    @top_level.comment = doc

    @top_level
  end

  ##
  # The extension for Git commit log

  module Git
    ##
    # Parses auxiliary info.  Currently `base-url` to expand
    # references is effective.

    def parse_info(info)
      /^\s*base-url\s*=\s*(.*\S)/ =~ info
      @base_url = $1
    end

    ##
    # Parses the entries in the Git commit logs

    def parse_entries
      entries = []

      @content.scan(/^commit\s+(\h{20})\h*\n((?:.+\n)*)\n((?: {4}.*\n+)*)/) do
        entry_name, header, entry_body = $1, $2, $3.gsub(/^ {4}/, '')
        # header = header.scan(/^ *(\S+?): +(.*)/).to_h
        # date = header["CommitDate"] || header["Date"]
        date = header[/^ *(?:Author)?Date: +(.*)/, 1]
        author = header[/^ *Author: +(.*)/, 1]
        begin
          time = parse_date(header[/^ *CommitDate: +(.*)/, 1] || date)
          @time_cache[entry_name] = time
          author.sub!(/\s*<(.*)>/, '')
          email = $1
          entries << [entry_name, [author, email, date, entry_body]]
        rescue ArgumentError
        end
      end

      entries
    end

    ##
    # Returns a list of ChangeLog entries as
    # RDoc::Parser::ChangeLog::Git::LogEntry list for the given
    # +entries+.

    def create_entries entries
      # git log entries have no strictly itemized style like the old
      # style, just assume Markdown.
      entries.map do |commit, entry|
        LogEntry.new(@base_url, commit, *entry)
      end
    end

    LogEntry = Struct.new(:base, :commit, :author, :email, :date, :contents) do
      HEADING_LEVEL = 3

      def initialize(base, commit, author, email, date, contents)
        case contents
        when String
          contents = RDoc::Markdown.parse(contents).parts.each do |body|
            case body
            when RDoc::Markup::Heading
              body.level += HEADING_LEVEL + 1
            end
          end
          case first = contents[0]
          when RDoc::Markup::Paragraph
            contents[0] = RDoc::Markup::Heading.new(HEADING_LEVEL + 1, first.text)
          end
        end
        super
      end

      def level
        HEADING_LEVEL
      end

      def aref
        "label-#{commit}"
      end

      def label context = nil
        aref
      end

      def text
        case base
        when nil
          "#{date}"
        when /%s/
          "{#{date}}[#{base % commit}]"
        else
          "{#{date}}[#{base}#{commit}]"
        end + " {#{author}}[mailto:#{email}]"
      end

      def accept visitor
        visitor.accept_heading self
        begin
          if visitor.respond_to?(:code_object=)
            code_object = visitor.code_object
            visitor.code_object = self
          end
          contents.each do |body|
            body.accept visitor
          end
        ensure
          if visitor.respond_to?(:code_object)
            visitor.code_object = code_object
          end
        end
      end

      def pretty_print q # :nodoc:
        q.group(2, '[log_entry: ', ']') do
          q.text commit
          q.text ','
          q.breakable
          q.group(2, '[date: ', ']') { q.text date }
          q.text ','
          q.breakable
          q.group(2, '[author: ', ']') { q.text author }
          q.text ','
          q.breakable
          q.group(2, '[email: ', ']') { q.text email }
          q.text ','
          q.breakable
          q.pp contents
        end
      end
    end
  end
end
PK)J[��q���7share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/markdown.rbnu�[���# frozen_string_literal: true
##
# Parse a Markdown format file.  The parsed RDoc::Markup::Document is attached
# as a file comment.

class RDoc::Parser::Markdown < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(/\.(md|markdown)(?:\.[^.]+)?$/)

  ##
  # Creates an Markdown-format TopLevel for the given file.

  def scan
    comment = RDoc::Comment.new @content, @top_level
    comment.format = 'markdown'

    @top_level.comment = comment
  end

end
PK)J[��5s�0�0/share/gems/gems/rdoc-6.10.0/lib/rdoc/servlet.rbnu�[���# frozen_string_literal: true
require_relative '../rdoc'
require 'erb'
require 'time'
require 'json'

begin
  require 'webrick'
rescue LoadError
  abort "webrick is not found. You may need to `gem install webrick` to install webrick."
end

##
# This is a WEBrick servlet that allows you to browse ri documentation.
#
# You can show documentation through either `ri --server` or, with RubyGems
# 2.0 or newer, `gem server`.  For ri, the server runs on port 8214 by
# default.  For RubyGems the server runs on port 8808 by default.
#
# You can use this servlet in your own project by mounting it on a WEBrick
# server:
#
#   require 'webrick'
#
#   server = WEBrick::HTTPServer.new Port: 8000
#
#   server.mount '/', RDoc::Servlet
#
# If you want to mount the servlet some other place than the root, provide the
# base path when mounting:
#
#   server.mount '/rdoc', RDoc::Servlet, '/rdoc'

class RDoc::Servlet < WEBrick::HTTPServlet::AbstractServlet

  @server_stores = Hash.new { |hash, server| hash[server] = {} }
  @cache         = Hash.new { |hash, store|  hash[store]  = {} }

  ##
  # Maps an asset type to its path on the filesystem

  attr_reader :asset_dirs

  ##
  # An RDoc::Options instance used for rendering options

  attr_reader :options

  ##
  # Creates an instance of this servlet that shares cached data between
  # requests.

  def self.get_instance server, *options # :nodoc:
    stores = @server_stores[server]

    new server, stores, @cache, *options
  end

  ##
  # Creates a new WEBrick servlet.
  #
  # Use +mount_path+ when mounting the servlet somewhere other than /.
  #
  # Use +extra_doc_dirs+ for additional documentation directories.
  #
  # +server+ is provided automatically by WEBrick when mounting.  +stores+ and
  # +cache+ are provided automatically by the servlet.

  def initialize server, stores, cache, mount_path = nil, extra_doc_dirs = []
    super server

    @cache      = cache
    @mount_path = mount_path
    @extra_doc_dirs = extra_doc_dirs
    @stores     = stores

    @options = RDoc::Options.new
    @options.op_dir = '.'

    darkfish_dir = nil

    # HACK dup
    $LOAD_PATH.each do |path|
      darkfish_dir = File.join path, 'rdoc/generator/template/darkfish/'
      next unless File.directory? darkfish_dir
      @options.template_dir = darkfish_dir
      break
    end

    @asset_dirs = {
      :darkfish   => darkfish_dir,
      :json_index =>
        File.expand_path('../generator/template/json_index/', __FILE__),
    }
  end

  ##
  # Serves the asset at the path in +req+ for +generator_name+ via +res+.

  def asset generator_name, req, res
    asset_dir = @asset_dirs[generator_name]

    asset_path = File.join asset_dir, req.path

    if_modified_since req, res, asset_path

    res.body = File.read asset_path

    res.content_type = case req.path
                       when /\.css\z/ then 'text/css'
                       when /\.js\z/  then 'application/javascript'
                       else                'application/octet-stream'
                       end
  end

  ##
  # GET request entry point.  Fills in +res+ for the path, etc. in +req+.

  def do_GET req, res
    req.path.sub!(/\A#{Regexp.escape @mount_path}/, '') if @mount_path

    case req.path
    when '/' then
      root req, res
    when '/js/darkfish.js', '/js/jquery.js', '/js/search.js',
         %r%^/css/%, %r%^/images/%, %r%^/fonts/% then
      asset :darkfish, req, res
    when '/js/navigation.js', '/js/searcher.js' then
      asset :json_index, req, res
    when '/js/search_index.js' then
      root_search req, res
    else
      show_documentation req, res
    end
  rescue WEBrick::HTTPStatus::NotFound => e
    generator = generator_for RDoc::Store.new

    not_found generator, req, res, e.message
  rescue WEBrick::HTTPStatus::Status
    raise
  rescue => e
    error e, req, res
  end

  ##
  # Fills in +res+ with the class, module or page for +req+ from +store+.
  #
  # +path+ is relative to the mount_path and is used to determine the class,
  # module or page name (/RDoc/Servlet.html becomes RDoc::Servlet).
  # +generator+ is used to create the page.

  def documentation_page store, generator, path, req, res
    text_name = path.chomp '.html'
    name = text_name.gsub '/', '::'

    if klass = store.find_class_or_module(name) then
      res.body = generator.generate_class klass
    elsif page = store.find_text_page(name.sub(/_([^_]*)\z/, '.\1')) then
      res.body = generator.generate_page page
    elsif page = store.find_text_page(text_name.sub(/_([^_]*)\z/, '.\1')) then
      res.body = generator.generate_page page
    else
      not_found generator, req, res
    end
  end

  ##
  # Creates the JSON search index on +res+ for the given +store+.  +generator+
  # must respond to \#json_index to build.  +req+ is ignored.

  def documentation_search store, generator, req, res
    json_index = @cache[store].fetch :json_index do
      @cache[store][:json_index] =
        JSON.dump generator.json_index.build_index
    end

    res.content_type = 'application/javascript'
    res.body = "var search_data = #{json_index}"
  end

  ##
  # Returns the RDoc::Store and path relative to +mount_path+ for
  # documentation at +path+.

  def documentation_source path
    _, source_name, path = path.split '/', 3

    store = @stores[source_name]
    return store, path if store

    store = store_for source_name

    store.load_all

    @stores[source_name] = store

    return store, path
  end

  ##
  # Generates an error page for the +exception+ while handling +req+ on +res+.

  def error exception, req, res
    backtrace = exception.backtrace.join "\n"

    res.content_type = 'text/html'
    res.status = 500
    res.body = <<-BODY
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

<title>Error - #{ERB::Util.html_escape exception.class}</title>

<link type="text/css" media="screen" href="#{@mount_path}/css/rdoc.css" rel="stylesheet">
</head>
<body>
<h1>Error</h1>

<p>While processing <code>#{ERB::Util.html_escape req.request_uri}</code> the
RDoc (#{ERB::Util.html_escape RDoc::VERSION}) server has encountered a
<code>#{ERB::Util.html_escape exception.class}</code>
exception:

<pre>#{ERB::Util.html_escape exception.message}</pre>

<p>Please report this to the
<a href="https://github.com/ruby/rdoc/issues">RDoc issues tracker</a>.  Please
include the RDoc version, the URI above and exception class, message and
backtrace.  If you're viewing a gem's documentation, include the gem name and
version.  If you're viewing Ruby's documentation, include the version of ruby.

<p>Backtrace:

<pre>#{ERB::Util.html_escape backtrace}</pre>

</body>
</html>
    BODY
  end

  ##
  # Instantiates a Darkfish generator for +store+

  def generator_for store
    generator = RDoc::Generator::Darkfish.new store, @options
    generator.file_output = false
    generator.asset_rel_path = '..'

    rdoc = RDoc::RDoc.new
    rdoc.store     = store
    rdoc.generator = generator
    rdoc.options   = @options

    @options.main_page = store.main
    @options.title     = store.title

    generator
  end

  ##
  # Handles the If-Modified-Since HTTP header on +req+ for +path+.  If the
  # file has not been modified a Not Modified response is returned.  If the
  # file has been modified a Last-Modified header is added to +res+.

  def if_modified_since req, res, path = nil
    last_modified = File.stat(path).mtime if path

    res['last-modified'] = last_modified.httpdate

    return unless ims = req['if-modified-since']

    ims = Time.parse ims

    unless ims < last_modified then
      res.body = ''
      raise WEBrick::HTTPStatus::NotModified
    end
  end

  ##
  # Returns an Array of installed documentation.
  #
  # Each entry contains the documentation name (gem name, 'Ruby
  # Documentation', etc.), the path relative to the mount point, whether the
  # documentation exists, the type of documentation (See RDoc::RI::Paths#each)
  # and the filesystem to the RDoc::Store for the documentation.

  def installed_docs
    extra_counter = 0
    ri_paths.map do |path, type|
      store = RDoc::Store.new path, type
      exists = File.exist? store.cache_path

      case type
      when :gem then
        gem_path = path[%r%/([^/]*)/ri$%, 1]
        [gem_path, "#{gem_path}/", exists, type, path]
      when :system then
        ['Ruby Documentation', 'ruby/', exists, type, path]
      when :site then
        ['Site Documentation', 'site/', exists, type, path]
      when :home then
        ['Home Documentation', 'home/', exists, type, path]
      when :extra then
        extra_counter += 1
        store.load_cache if exists
        title = store.title || "Extra Documentation"
        [title, "extra-#{extra_counter}/", exists, type, path]
      end
    end
  end

  ##
  # Returns a 404 page built by +generator+ for +req+ on +res+.

  def not_found generator, req, res, message = nil
    message ||= "The page <kbd>#{ERB::Util.h req.path}</kbd> was not found"
    res.body = generator.generate_servlet_not_found message
    res.status = 404
  end

  ##
  # Enumerates the ri paths.  See RDoc::RI::Paths#each

  def ri_paths &block
    RDoc::RI::Paths.each true, true, true, :all, *@extra_doc_dirs, &block #TODO: pass extra_dirs
  end

  ##
  # Generates the root page on +res+.  +req+ is ignored.

  def root req, res
    generator = RDoc::Generator::Darkfish.new nil, @options

    res.body = generator.generate_servlet_root installed_docs

    res.content_type = 'text/html'
  end

  ##
  # Generates a search index for the root page on +res+.  +req+ is ignored.

  def root_search req, res
    search_index = []
    info         = []

    installed_docs.map do |name, href, exists, type, path|
      next unless exists

      search_index << name

      case type
      when :gem
        gemspec = path.gsub(%r%/doc/([^/]*?)/ri$%,
                            '/specifications/\1.gemspec')

        spec = Gem::Specification.load gemspec

        path    = spec.full_name
        comment = spec.summary
      when :system then
        path    = 'ruby'
        comment = 'Documentation for the Ruby standard library'
      when :site then
        path    = 'site'
        comment = 'Documentation for non-gem libraries'
      when :home then
        path    = 'home'
        comment = 'Documentation from your home directory'
      when :extra
        comment = name
      end

      info << [name, '', path, '', comment]
    end

    index = {
      :index => {
        :searchIndex     => search_index,
        :longSearchIndex => search_index,
        :info            => info,
      }
    }

    res.body = "var search_data = #{JSON.dump index};"
    res.content_type = 'application/javascript'
  end

  ##
  # Displays documentation for +req+ on +res+, whether that be HTML or some
  # asset.

  def show_documentation req, res
    store, path = documentation_source req.path

    if_modified_since req, res, store.cache_path

    generator = generator_for store

    case path
    when nil, '', 'index.html' then
      res.body = generator.generate_index
    when 'table_of_contents.html' then
      res.body = generator.generate_table_of_contents
    when 'js/search_index.js' then
      documentation_search store, generator, req, res
    else
      documentation_page store, generator, path, req, res
    end
  ensure
    res.content_type ||= 'text/html'
  end

  ##
  # Returns an RDoc::Store for the given +source_name+ ('ruby' or a gem name).

  def store_for source_name
    case source_name
    when 'home' then
      RDoc::Store.new RDoc::RI::Paths.home_dir, :home
    when 'ruby' then
      RDoc::Store.new RDoc::RI::Paths.system_dir, :system
    when 'site' then
      RDoc::Store.new RDoc::RI::Paths.site_dir, :site
    when /\Aextra-(\d+)\z/ then
      index = $1.to_i - 1
      ri_dir = installed_docs[index][4]
      RDoc::Store.new ri_dir, :extra
    else
      ri_dir, type = ri_paths.find do |dir, dir_type|
        next unless dir_type == :gem

        source_name == dir[%r%/([^/]*)/ri$%, 1]
      end

      raise WEBrick::HTTPStatus::NotFound,
            "Could not find gem \"#{ERB::Util.html_escape(source_name)}\". Are you sure you installed it?" unless ri_dir

      store = RDoc::Store.new ri_dir, type

      return store if File.exist? store.cache_path

      raise WEBrick::HTTPStatus::NotFound,
            "Could not find documentation for \"#{ERB::Util.html_escape(source_name)}\". Please run `gem rdoc --ri gem_name`"

    end
  end

end
PK)J[.;m�
�
5share/gems/gems/rdoc-6.10.0/lib/rdoc/known_classes.rbnu�[���# frozen_string_literal: true
module RDoc

  ##
  # Ruby's built-in classes, modules and exceptions

  KNOWN_CLASSES = {
    "rb_cArray"            => "Array",
    "rb_cBasicObject"      => "BasicObject",
    "rb_cBignum"           => "Bignum",
    "rb_cClass"            => "Class",
    "rb_cData"             => "Data",
    "rb_cDir"              => "Dir",
    "rb_cEncoding"         => "Encoding",
    "rb_cFalseClass"       => "FalseClass",
    "rb_cFile"             => "File",
    "rb_cFixnum"           => "Fixnum",
    "rb_cFloat"            => "Float",
    "rb_cHash"             => "Hash",
    "rb_cIO"               => "IO",
    "rb_cInteger"          => "Integer",
    "rb_cModule"           => "Module",
    "rb_cNilClass"         => "NilClass",
    "rb_cNumeric"          => "Numeric",
    "rb_cObject"           => "Object",
    "rb_cProc"             => "Proc",
    "rb_cRange"            => "Range",
    "rb_cRefinement"       => "Refinement",
    "rb_cRegexp"           => "Regexp",
    "rb_cRubyVM"           => "RubyVM",
    "rb_cSocket"           => "Socket",
    "rb_cString"           => "String",
    "rb_cStruct"           => "Struct",
    "rb_cSymbol"           => "Symbol",
    "rb_cThread"           => "Thread",
    "rb_cTime"             => "Time",
    "rb_cTrueClass"        => "TrueClass",

    "rb_eArgError"         => "ArgumentError",
    "rb_eEOFError"         => "EOFError",
    "rb_eException"        => "Exception",
    "rb_eFatal"            => "fatal",
    "rb_eFloatDomainError" => "FloatDomainError",
    "rb_eIOError"          => "IOError",
    "rb_eIndexError"       => "IndexError",
    "rb_eInterrupt"        => "Interrupt",
    "rb_eLoadError"        => "LoadError",
    "rb_eNameError"        => "NameError",
    "rb_eNoMemError"       => "NoMemoryError",
    "rb_eNotImpError"      => "NotImplementedError",
    "rb_eRangeError"       => "RangeError",
    "rb_eRuntimeError"     => "RuntimeError",
    "rb_eScriptError"      => "ScriptError",
    "rb_eSecurityError"    => "SecurityError",
    "rb_eSignal"           => "SignalException",
    "rb_eStandardError"    => "StandardError",
    "rb_eSyntaxError"      => "SyntaxError",
    "rb_eSystemCallError"  => "SystemCallError",
    "rb_eSystemExit"       => "SystemExit",
    "rb_eTypeError"        => "TypeError",
    "rb_eZeroDivError"     => "ZeroDivisionError",

    "rb_mComparable"       => "Comparable",
    "rb_mEnumerable"       => "Enumerable",
    "rb_mErrno"            => "Errno",
    "rb_mFConst"           => "File::Constants",
    "rb_mFileTest"         => "FileTest",
    "rb_mGC"               => "GC",
    "rb_mKernel"           => "Kernel",
    "rb_mMath"             => "Math",
    "rb_mProcess"          => "Process"
  }

end
PK)J[���l'�'�/share/gems/gems/rdoc-6.10.0/lib/rdoc/options.rbnu�[���# frozen_string_literal: true
require 'optparse'
require 'pathname'

##
# RDoc::Options handles the parsing and storage of options
#
# == Saved Options
#
# You can save some options like the markup format in the
# <tt>.rdoc_options</tt> file in your gem.  The easiest way to do this is:
#
#   rdoc --markup tomdoc --write-options
#
# Which will automatically create the file and fill it with the options you
# specified.
#
# The following options will not be saved since they interfere with the user's
# preferences or with the normal operation of RDoc:
#
# * +--coverage-report+
# * +--dry-run+
# * +--encoding+
# * +--force-update+
# * +--format+
# * +--pipe+
# * +--quiet+
# * +--template+
# * +--verbose+
#
# == Custom Options
#
# Generators can hook into RDoc::Options to add generator-specific command
# line options.
#
# When <tt>--format</tt> is encountered in ARGV, RDoc calls ::setup_options on
# the generator class to add extra options to the option parser.  Options for
# custom generators must occur after <tt>--format</tt>.  <tt>rdoc --help</tt>
# will list options for all installed generators.
#
# Example:
#
#   class RDoc::Generator::Spellcheck
#     RDoc::RDoc.add_generator self
#
#     def self.setup_options rdoc_options
#       op = rdoc_options.option_parser
#
#       op.on('--spell-dictionary DICTIONARY',
#             RDoc::Options::Path) do |dictionary|
#         rdoc_options.spell_dictionary = dictionary
#       end
#     end
#   end
#
# Of course, RDoc::Options does not respond to +spell_dictionary+ by default
# so you will need to add it:
#
#   class RDoc::Options
#
#     ##
#     # The spell dictionary used by the spell-checking plugin.
#
#     attr_accessor :spell_dictionary
#
#   end
#
# == Option Validators
#
# OptionParser validators will validate and cast user input values.  In
# addition to the validators that ship with OptionParser (String, Integer,
# Float, TrueClass, FalseClass, Array, Regexp, Date, Time, URI, etc.),
# RDoc::Options adds Path, PathArray and Template.

class RDoc::Options

  ##
  # The deprecated options.

  DEPRECATED = {
    '--accessor'      => 'support discontinued',
    '--diagram'       => 'support discontinued',
    '--help-output'   => 'support discontinued',
    '--image-format'  => 'was an option for --diagram',
    '--inline-source' => 'source code is now always inlined',
    '--merge'         => 'ri now always merges class information',
    '--one-file'      => 'support discontinued',
    '--op-name'       => 'support discontinued',
    '--opname'        => 'support discontinued',
    '--promiscuous'   => 'files always only document their content',
    '--ri-system'     => 'Ruby installers use other techniques',
  }

  ##
  # RDoc options ignored (or handled specially) by --write-options

  SPECIAL = %w[
    coverage_report
    dry_run
    encoding
    files
    force_output
    force_update
    generator
    generator_name
    generator_options
    generators
    locale
    op_dir
    page_dir
    option_parser
    pipe
    rdoc_include
    root
    static_path
    stylesheet_url
    template
    template_dir
    update_output_dir
    verbosity
    write_options
  ]

  ##
  # Option validator for OptionParser that matches a directory that exists on
  # the filesystem.

  Directory = Object.new

  ##
  # Option validator for OptionParser that matches a file or directory that
  # exists on the filesystem.

  Path = Object.new

  ##
  # Option validator for OptionParser that matches a comma-separated list of
  # files or directories that exist on the filesystem.

  PathArray = Object.new

  ##
  # Option validator for OptionParser that matches a template directory for an
  # installed generator that lives in
  # <tt>"rdoc/generator/template/#{template_name}"</tt>

  Template = Object.new

  ##
  # Character-set for HTML output.  #encoding is preferred over #charset

  attr_accessor :charset

  ##
  # If true, RDoc will not write any files.

  attr_accessor :dry_run

  ##
  # The output encoding.  All input files will be transcoded to this encoding.
  #
  # The default encoding is UTF-8.  This is set via --encoding.

  attr_accessor :encoding

  ##
  # Files matching this pattern will be excluded

  attr_writer :exclude

  ##
  # The list of files to be processed

  attr_accessor :files

  ##
  # Create the output even if the output directory does not look
  # like an rdoc output directory

  attr_accessor :force_output

  ##
  # Scan newer sources than the flag file if true.

  attr_accessor :force_update

  ##
  # Formatter to mark up text with

  attr_accessor :formatter

  ##
  # Description of the output generator (set with the <tt>--format</tt> option)

  attr_accessor :generator

  ##
  # For #==

  attr_reader :generator_name # :nodoc:

  ##
  # Loaded generator options.  Used to prevent --help from loading the same
  # options multiple times.

  attr_accessor :generator_options

  ##
  # Old rdoc behavior: hyperlink all words that match a method name,
  # even if not preceded by '#' or '::'

  attr_accessor :hyperlink_all

  ##
  # Include line numbers in the source code

  attr_accessor :line_numbers

  ##
  # The output locale.

  attr_accessor :locale

  ##
  # The directory where locale data live.

  attr_accessor :locale_dir

  ##
  # Name of the file, class or module to display in the initial index page (if
  # not specified the first file we encounter is used)

  attr_accessor :main_page

  ##
  # The markup format.
  # One of: +rdoc+ (the default), +markdown+, +rd+, +tomdoc+.
  # See {Markup Formats}[rdoc-ref:RDoc::Markup@Markup+Formats].
  attr_accessor :markup

  ##
  # If true, only report on undocumented files

  attr_accessor :coverage_report

  ##
  # The name of the output directory

  attr_accessor :op_dir

  ##
  # The OptionParser for this instance

  attr_accessor :option_parser

  ##
  # Output heading decorations?
  attr_accessor :output_decoration

  ##
  # Directory where guides, FAQ, and other pages not associated with a class
  # live.  You may leave this unset if these are at the root of your project.

  attr_accessor :page_dir

  ##
  # Is RDoc in pipe mode?

  attr_accessor :pipe

  ##
  # Array of directories to search for files to satisfy an :include:

  attr_accessor :rdoc_include

  ##
  # Root of the source documentation will be generated for.  Set this when
  # building documentation outside the source directory.  Defaults to the
  # current directory.

  attr_accessor :root

  ##
  # Include the '#' at the front of hyperlinked instance method names

  attr_accessor :show_hash

  ##
  # Directory to copy static files from

  attr_accessor :static_path

  ##
  # The number of columns in a tab

  attr_accessor :tab_width

  ##
  # Template to be used when generating output

  attr_accessor :template

  ##
  # Directory the template lives in

  attr_accessor :template_dir

  ##
  # Additional template stylesheets

  attr_accessor :template_stylesheets

  ##
  # Documentation title

  attr_accessor :title

  ##
  # Should RDoc update the timestamps in the output dir?

  attr_accessor :update_output_dir

  ##
  # Verbosity, zero means quiet

  attr_accessor :verbosity

  ##
  # Warn if rdoc-ref links can't be resolved
  # Default is +false+

  attr_accessor :warn_missing_rdoc_ref

  ##
  # URL of web cvs frontend

  attr_accessor :webcvs

  ##
  # Minimum visibility of a documented method. One of +:public+, +:protected+,
  # +:private+ or +:nodoc+.
  #
  # The +:nodoc+ visibility ignores all directives related to visibility.  The
  # other visibilities may be overridden on a per-method basis with the :doc:
  # directive.

  attr_reader :visibility

  ##
  # Indicates if files of test suites should be skipped
  attr_accessor :skip_tests

  ##
  # Embed mixin methods, attributes, and constants into class documentation. Set via
  # +--[no-]embed-mixins+ (Default is +false+.)
  attr_accessor :embed_mixins

  def initialize loaded_options = nil # :nodoc:
    init_ivars
    override loaded_options if loaded_options
  end

  def init_ivars # :nodoc:
    @dry_run = false
    @embed_mixins = false
    @exclude = %w[
      ~\z \.orig\z \.rej\z \.bak\z
      \.gemspec\z
    ]
    @files = nil
    @force_output = false
    @force_update = true
    @generator = nil
    @generator_name = nil
    @generator_options = []
    @generators = RDoc::RDoc::GENERATORS
    @hyperlink_all = false
    @line_numbers = false
    @locale = nil
    @locale_name = nil
    @locale_dir = 'locale'
    @main_page = nil
    @markup = 'rdoc'
    @coverage_report = false
    @op_dir = nil
    @page_dir = nil
    @pipe = false
    @output_decoration = true
    @rdoc_include = []
    @root = Pathname(Dir.pwd)
    @show_hash = false
    @static_path = []
    @stylesheet_url = nil # TODO remove in RDoc 4
    @tab_width = 8
    @template = nil
    @template_dir = nil
    @template_stylesheets = []
    @title = nil
    @update_output_dir = true
    @verbosity = 1
    @visibility = :protected
    @warn_missing_rdoc_ref = false
    @webcvs = nil
    @write_options = false
    @encoding = Encoding::UTF_8
    @charset = @encoding.name
    @skip_tests = true
  end

  def init_with map # :nodoc:
    init_ivars

    encoding = map['encoding']
    @encoding = encoding ? Encoding.find(encoding) : encoding

    @charset        = map['charset']
    @embed_mixins   = map['embed_mixins']
    @exclude        = map['exclude']
    @generator_name = map['generator_name']
    @hyperlink_all  = map['hyperlink_all']
    @line_numbers   = map['line_numbers']
    @locale_name    = map['locale_name']
    @locale_dir     = map['locale_dir']
    @main_page      = map['main_page']
    @markup         = map['markup']
    @op_dir         = map['op_dir']
    @show_hash      = map['show_hash']
    @tab_width      = map['tab_width']
    @template_dir   = map['template_dir']
    @title          = map['title']
    @visibility     = map['visibility']
    @webcvs         = map['webcvs']

    @rdoc_include = sanitize_path map['rdoc_include']
    @static_path  = sanitize_path map['static_path']
  end

  def yaml_initialize tag, map # :nodoc:
    init_with map
  end

  def override map # :nodoc:
    if map.has_key?('encoding')
      encoding = map['encoding']
      @encoding = encoding ? Encoding.find(encoding) : encoding
    end

    @charset        = map['charset']        if map.has_key?('charset')
    @embed_mixins   = map['embed_mixins']   if map.has_key?('embed_mixins')
    @exclude        = map['exclude']        if map.has_key?('exclude')
    @generator_name = map['generator_name'] if map.has_key?('generator_name')
    @hyperlink_all  = map['hyperlink_all']  if map.has_key?('hyperlink_all')
    @line_numbers   = map['line_numbers']   if map.has_key?('line_numbers')
    @locale_name    = map['locale_name']    if map.has_key?('locale_name')
    @locale_dir     = map['locale_dir']     if map.has_key?('locale_dir')
    @main_page      = map['main_page']      if map.has_key?('main_page')
    @markup         = map['markup']         if map.has_key?('markup')
    @op_dir         = map['op_dir']         if map.has_key?('op_dir')
    @page_dir       = map['page_dir']       if map.has_key?('page_dir')
    @show_hash      = map['show_hash']      if map.has_key?('show_hash')
    @tab_width      = map['tab_width']      if map.has_key?('tab_width')
    @template_dir   = map['template_dir']   if map.has_key?('template_dir')
    @title          = map['title']          if map.has_key?('title')
    @visibility     = map['visibility']     if map.has_key?('visibility')
    @webcvs         = map['webcvs']         if map.has_key?('webcvs')

    @warn_missing_rdoc_ref = map['warn_missing_rdoc_ref'] if map.has_key?('warn_missing_rdoc_ref')

    if map.has_key?('rdoc_include')
      @rdoc_include = sanitize_path map['rdoc_include']
    end
    if map.has_key?('static_path')
      @static_path  = sanitize_path map['static_path']
    end
  end

  def == other # :nodoc:
    self.class === other and
      @encoding       == other.encoding       and
      @embed_mixins   == other.embed_mixins   and
      @generator_name == other.generator_name and
      @hyperlink_all  == other.hyperlink_all  and
      @line_numbers   == other.line_numbers   and
      @locale         == other.locale         and
      @locale_dir     == other.locale_dir     and
      @main_page      == other.main_page      and
      @markup         == other.markup         and
      @op_dir         == other.op_dir         and
      @rdoc_include   == other.rdoc_include   and
      @show_hash      == other.show_hash      and
      @static_path    == other.static_path    and
      @tab_width      == other.tab_width      and
      @template       == other.template       and
      @title          == other.title          and
      @visibility     == other.visibility     and
      @webcvs         == other.webcvs
  end

  ##
  # Check that the files on the command line exist

  def check_files
    @files.delete_if do |file|
      if File.exist? file then
        if File.readable? file then
          false
        else
          warn "file '#{file}' not readable"

          true
        end
      else
        warn "file '#{file}' not found"

        true
      end
    end
  end

  ##
  # Ensure only one generator is loaded

  def check_generator
    if @generator then
      raise OptionParser::InvalidOption,
        "generator already set to #{@generator_name}"
    end
  end

  ##
  # Set the title, but only if not already set. Used to set the title
  # from a source file, so that a title set from the command line
  # will have the priority.

  def default_title=(string)
    @title ||= string
  end

  ##
  # For dumping YAML

  def to_yaml(*options) # :nodoc:
    encoding = @encoding ? @encoding.name : nil

    yaml = {}
    yaml['encoding'] = encoding
    yaml['static_path'] = sanitize_path(@static_path)
    yaml['rdoc_include'] = sanitize_path(@rdoc_include)
    yaml['page_dir'] = (sanitize_path([@page_dir]).first if @page_dir)

    ivars = instance_variables.map { |ivar| ivar.to_s[1..-1] }
    ivars -= SPECIAL

    ivars.sort.each do |ivar|
      yaml[ivar] = instance_variable_get("@#{ivar}")
    end
    yaml.to_yaml
  end

  ##
  # Create a regexp for #exclude

  def exclude
    if @exclude.nil? or Regexp === @exclude then
      # done, #finish is being re-run
      @exclude
    elsif @exclude.empty? then
      nil
    else
      Regexp.new(@exclude.join("|"))
    end
  end

  ##
  # Completes any unfinished option setup business such as filtering for
  # existent files, creating a regexp for #exclude and setting a default
  # #template.

  def finish
    if @write_options then
      write_options
      exit
    end

    @op_dir ||= 'doc'

    root = @root.to_s
    if @rdoc_include.empty? || !@rdoc_include.include?(root)
      @rdoc_include << root
    end

    @exclude = self.exclude

    finish_page_dir

    check_files

    # If no template was specified, use the default template for the output
    # formatter

    unless @template then
      @template     = @generator_name
      @template_dir = template_dir_for @template
    end

    if @locale_name
      @locale = RDoc::I18n::Locale[@locale_name]
      @locale.load(@locale_dir)
    else
      @locale = nil
    end

    self
  end

  ##
  # Fixes the page_dir to be relative to the root_dir and adds the page_dir to
  # the files list.

  def finish_page_dir
    return unless @page_dir

    @files << @page_dir

    page_dir = Pathname(@page_dir)
    begin
      page_dir = page_dir.expand_path.relative_path_from @root
    rescue ArgumentError
      # On Windows, sometimes crosses different drive letters.
      page_dir = page_dir.expand_path
    end

    @page_dir = page_dir
  end

  ##
  # Returns a properly-space list of generators and their descriptions.

  def generator_descriptions
    lengths = []

    generators = RDoc::RDoc::GENERATORS.map do |name, generator|
      lengths << name.length

      description = generator::DESCRIPTION if
        generator.const_defined? :DESCRIPTION

      [name, description]
    end

    longest = lengths.max

    generators.sort.map do |name, description|
      if description then
        "  %-*s - %s" % [longest, name, description]
      else
        "  #{name}"
      end
    end.join "\n"
  end

  ##
  # Parses command line options.

  def parse argv
    ignore_invalid = true

    argv.insert(0, *ENV['RDOCOPT'].split) if ENV['RDOCOPT']

    opts = OptionParser.new do |opt|
      @option_parser = opt
      opt.program_name = File.basename $0
      opt.version = RDoc::VERSION
      opt.release = nil
      opt.summary_indent = ' ' * 4
      opt.banner = <<-EOF
Usage: #{opt.program_name} [options] [names...]

  Files are parsed, and the information they contain collected, before any
  output is produced. This allows cross references between all files to be
  resolved. If a name is a directory, it is traversed. If no names are
  specified, all Ruby files in the current directory (and subdirectories) are
  processed.

  How RDoc generates output depends on the output formatter being used, and on
  the options you give.

  Options can be specified via the RDOCOPT environment variable, which
  functions similar to the RUBYOPT environment variable for ruby.

    $ export RDOCOPT="--show-hash"

  will make rdoc show hashes in method links by default.  Command-line options
  always will override those in RDOCOPT.

  Available formatters:

#{generator_descriptions}

  RDoc understands the following file formats:

      EOF

      parsers = Hash.new { |h, parser| h[parser] = [] }

      RDoc::Parser.parsers.each do |regexp, parser|
        parsers[parser.name.sub('RDoc::Parser::', '')] << regexp.source
      end

      parsers.sort.each do |parser, regexp|
        opt.banner += "  - #{parser}: #{regexp.join ', '}\n"
      end
      opt.banner += "  - TomDoc:  Only in ruby files\n"

      opt.banner += "\n  The following options are deprecated:\n\n"

      name_length = DEPRECATED.keys.sort_by { |k| k.length }.last.length

      DEPRECATED.sort_by { |k,| k }.each do |name, reason|
        opt.banner += "    %*1$2$s  %3$s\n" % [-name_length, name, reason]
      end

      opt.accept Template do |template|
        template_dir = template_dir_for template

        unless template_dir then
          $stderr.puts "could not find template #{template}"
          nil
        else
          [template, template_dir]
        end
      end

      opt.accept Directory do |directory|
        directory = File.expand_path directory

        raise OptionParser::InvalidArgument unless File.directory? directory

        directory
      end

      opt.accept Path do |path|
        path = File.expand_path path

        raise OptionParser::InvalidArgument unless File.exist? path

        path
      end

      opt.accept PathArray do |paths,|
        paths = if paths then
                  paths.split(',').map { |d| d unless d.empty? }
                end

        paths.map do |path|
          path = File.expand_path path

          raise OptionParser::InvalidArgument unless File.exist? path

          path
        end
      end

      opt.separator nil
      opt.separator "Parsing options:"
      opt.separator nil

      opt.on("--encoding=ENCODING", "-e", Encoding.list.map { |e| e.name },
             "Specifies the output encoding.  All files",
             "read will be converted to this encoding.",
             "The default encoding is UTF-8.",
             "--encoding is preferred over --charset") do |value|
               @encoding = Encoding.find value
               @charset = @encoding.name # may not be valid value
             end

      opt.separator nil

      opt.on("--locale=NAME",
             "Specifies the output locale.") do |value|
        @locale_name = value
      end

      opt.on("--locale-data-dir=DIR",
             "Specifies the directory where locale data live.") do |value|
        @locale_dir = value
      end

      opt.separator nil

      opt.on("--all", "-a",
             "Synonym for --visibility=private.") do |value|
        @visibility = :private
      end

      opt.separator nil

      opt.on("--exclude=PATTERN", "-x", Regexp,
             "Do not process files or directories",
             "matching PATTERN.") do |value|
        @exclude << value
      end

      opt.separator nil

      opt.on("--no-skipping-tests", nil,
             "Don't skip generating documentation for test and spec files") do |value|
        @skip_tests = false
      end

      opt.separator nil

      opt.on("--extension=NEW=OLD", "-E",
             "Treat files ending with .new as if they",
             "ended with .old. Using '-E cgi=rb' will",
             "cause xxx.cgi to be parsed as a Ruby file.") do |value|
        new, old = value.split(/=/, 2)

        unless new and old then
          raise OptionParser::InvalidArgument, "Invalid parameter to '-E'"
        end

        unless RDoc::Parser.alias_extension old, new then
          raise OptionParser::InvalidArgument, "Unknown extension .#{old} to -E"
        end
      end

      opt.separator nil

      opt.on("--[no-]force-update", "-U",
             "Forces rdoc to scan all sources even if",
             "no files are newer than the flag file.") do |value|
        @force_update = value
      end

      opt.separator nil

      opt.on("--pipe", "-p",
             "Convert RDoc on stdin to HTML") do
        @pipe = true
      end

      opt.separator nil

      opt.on("--tab-width=WIDTH", "-w", Integer,
             "Set the width of tab characters.") do |value|
        raise OptionParser::InvalidArgument,
              "#{value} is an invalid tab width" if value <= 0
        @tab_width = value
      end

      opt.separator nil

      opt.on("--visibility=VISIBILITY", "-V", RDoc::VISIBILITIES + [:nodoc],
             "Minimum visibility to document a method.",
             "One of 'public', 'protected' (the default),",
             "'private' or 'nodoc' (show everything)") do |value|
        @visibility = value
      end

      opt.separator nil

      opt.on("--[no-]embed-mixins",
             "Embed mixin methods, attributes, and constants",
             "into class documentation. (default false)") do |value|
        @embed_mixins = value
      end

      opt.separator nil

      markup_formats = RDoc::Text::MARKUP_FORMAT.keys.sort

      opt.on("--markup=MARKUP", markup_formats,
             "The markup format for the named files.",
             "The default is rdoc.  Valid values are:",
             markup_formats.join(', ')) do |value|
        @markup = value
      end

      opt.separator nil

      opt.on("--root=ROOT", Directory,
             "Root of the source tree documentation",
             "will be generated for.  Set this when",
             "building documentation outside the",
             "source directory.  Default is the",
             "current directory.") do |root|
        @root = Pathname(root)
      end

      opt.separator nil

      opt.on("--page-dir=DIR", Directory,
             "Directory where guides, your FAQ or",
             "other pages not associated with a class",
             "live.  Set this when you don't store",
             "such files at your project root.",
             "NOTE: Do not use the same file name in",
             "the page dir and the root of your project") do |page_dir|
        @page_dir = page_dir
      end

      opt.separator nil
      opt.separator "Common generator options:"
      opt.separator nil

      opt.on("--force-output", "-O",
             "Forces rdoc to write the output files,",
             "even if the output directory exists",
             "and does not seem to have been created",
             "by rdoc.") do |value|
        @force_output = value
      end

      opt.separator nil

      generator_text = @generators.keys.map { |name| "  #{name}" }.sort

      opt.on("-f", "--fmt=FORMAT", "--format=FORMAT", @generators.keys,
             "Set the output formatter.  One of:", *generator_text) do |value|
        check_generator

        @generator_name = value.downcase
        setup_generator
      end

      opt.separator nil

      opt.on("--include=DIRECTORIES", "-i", PathArray,
             "Set (or add to) the list of directories to",
             "be searched when satisfying :include:",
             "requests. Can be used more than once.") do |value|
        @rdoc_include.concat value.map { |dir| dir.strip }
      end

      opt.separator nil

      opt.on("--[no-]coverage-report=[LEVEL]", "--[no-]dcov", "-C", Integer,
             "Prints a report on undocumented items.",
             "Does not generate files.") do |value|
        value = 0 if value.nil? # Integer converts -C to nil

        @coverage_report = value
        @force_update = true if value
      end

      opt.separator nil

      opt.on("--output=DIR", "--op", "-o",
             "Set the output directory.") do |value|
        @op_dir = value
      end

      opt.separator nil

      opt.on("-d",
             "Deprecated --diagram option.",
             "Prevents firing debug mode",
             "with legacy invocation.") do |value|
      end

      opt.separator nil
      opt.separator 'HTML generator options:'
      opt.separator nil

      opt.on("--charset=CHARSET", "-c",
             "Specifies the output HTML character-set.",
             "Use --encoding instead of --charset if",
             "available.") do |value|
        @charset = value
      end

      opt.separator nil

      opt.on("--hyperlink-all", "-A",
             "Generate hyperlinks for all words that",
             "correspond to known methods, even if they",
             "do not start with '#' or '::' (legacy",
             "behavior).") do |value|
        @hyperlink_all = value
      end

      opt.separator nil

      opt.on("--main=NAME", "-m",
             "NAME will be the initial page displayed.") do |value|
        @main_page = value
      end

      opt.separator nil

      opt.on("--[no-]line-numbers", "-N",
             "Include line numbers in the source code.",
             "By default, only the number of the first",
             "line is displayed, in a leading comment.") do |value|
        @line_numbers = value
      end

      opt.separator nil

      opt.on("--show-hash", "-H",
             "A name of the form #name in a comment is a",
             "possible hyperlink to an instance method",
             "name. When displayed, the '#' is removed",
             "unless this option is specified.") do |value|
        @show_hash = value
      end

      opt.separator nil

      opt.on("--template=NAME", "-T", Template,
             "Set the template used when generating",
             "output. The default depends on the",
             "formatter used.") do |(template, template_dir)|
        @template     = template
        @template_dir = template_dir
      end

      opt.separator nil

      opt.on("--template-stylesheets=FILES", PathArray,
             "Set (or add to) the list of files to",
             "include with the html template.") do |value|
        @template_stylesheets.concat value
      end

      opt.separator nil

      opt.on("--title=TITLE", "-t",
             "Set TITLE as the title for HTML output.") do |value|
        @title = value
      end

      opt.separator nil

      opt.on("--copy-files=PATH", Path,
             "Specify a file or directory to copy static",
             "files from.",
             "If a file is given it will be copied into",
             "the output dir.  If a directory is given the",
             "entire directory will be copied.",
             "You can use this multiple times") do |value|
        @static_path << value
      end

      opt.separator nil

      opt.on("--webcvs=URL", "-W",
             "Specify a URL for linking to a web frontend",
             "to CVS. If the URL contains a '\%s', the",
             "name of the current file will be",
             "substituted; if the URL doesn't contain a",
             "'\%s', the filename will be appended to it.") do |value|
        @webcvs = value
      end

      opt.separator nil
      opt.separator "ri generator options:"
      opt.separator nil

      opt.on("--ri", "-r",
             "Generate output for use by `ri`. The files",
             "are stored in the '.rdoc' directory under",
             "your home directory unless overridden by a",
             "subsequent --op parameter, so no special",
             "privileges are needed.") do |value|
        check_generator

        @generator_name = "ri"
        @op_dir ||= RDoc::RI::Paths::HOMEDIR
        setup_generator
      end

      opt.separator nil

      opt.on("--ri-site", "-R",
             "Generate output for use by `ri`. The files",
             "are stored in a site-wide directory,",
             "making them accessible to others, so",
             "special privileges are needed.") do |value|
        check_generator

        @generator_name = "ri"
        @op_dir = RDoc::RI::Paths.site_dir
        setup_generator
      end

      opt.separator nil
      opt.separator "Generic options:"
      opt.separator nil

      opt.on("--write-options",
             "Write .rdoc_options to the current",
             "directory with the given options.  Not all",
             "options will be used.  See RDoc::Options",
             "for details.") do |value|
        @write_options = true
      end

      opt.separator nil

      opt.on("--[no-]dry-run",
             "Don't write any files") do |value|
        @dry_run = value
      end

      opt.separator nil

      opt.on("-D", "--[no-]debug",
             "Displays lots on internal stuff.") do |value|
        $DEBUG_RDOC = value
      end

      opt.separator nil

      opt.on("--warn-missing-rdoc-ref",
             "Warn if rdoc-ref links can't be resolved") do |value|
        @warn_missing_rdoc_ref = value
      end

      opt.separator nil

      opt.on("--[no-]ignore-invalid",
             "Ignore invalid options and continue",
             "(default true).") do |value|
        ignore_invalid = value
      end

      opt.separator nil

      opt.on("--quiet", "-q",
             "Don't show progress as we parse.") do |value|
        @verbosity = 0
      end

      opt.separator nil

      opt.on("--verbose", "-V",
             "Display extra progress as RDoc parses") do |value|
        @verbosity = 2
      end

      opt.separator nil

      opt.on("--version", "-v", "print the version") do
        puts opt.version
        exit
      end

      opt.separator nil

      opt.on("--help", "-h", "Display this help") do
        RDoc::RDoc::GENERATORS.each_key do |generator|
          setup_generator generator
        end

        puts opt.help
        exit
      end

      opt.separator nil
    end

    setup_generator 'darkfish' if
      argv.grep(/\A(-f|--fmt|--format|-r|-R|--ri|--ri-site)\b/).empty?

    deprecated = []
    invalid = []

    begin
      opts.parse! argv
    rescue OptionParser::ParseError => e
      if DEPRECATED[e.args.first] then
        deprecated << e.args.first
      elsif %w[--format --ri -r --ri-site -R].include? e.args.first then
        raise
      else
        invalid << e.args.join(' ')
      end

      retry
    end

    unless @generator then
      @generator = RDoc::Generator::Darkfish
      @generator_name = 'darkfish'
    end

    if @pipe and not argv.empty? then
      @pipe = false
      invalid << '-p (with files)'
    end

    unless quiet then
      deprecated.each do |opt|
        $stderr.puts 'option ' + opt + ' is deprecated: ' + DEPRECATED[opt]
      end
    end

    unless invalid.empty? then
      invalid = "invalid options: #{invalid.join ', '}"

      if ignore_invalid then
        unless quiet then
          $stderr.puts invalid
          $stderr.puts '(invalid options are ignored)'
        end
      else
        unless quiet then
          $stderr.puts opts
        end
        $stderr.puts invalid
        exit 1
      end
    end

    @files = argv.dup

    self
  end

  ##
  # Don't display progress as we process the files

  def quiet
    @verbosity.zero?
  end

  ##
  # Set quietness to +bool+

  def quiet= bool
    @verbosity = bool ? 0 : 1
  end

  ##
  # Removes directories from +path+ that are outside the current directory

  def sanitize_path path
    require 'pathname'
    dot = Pathname.new('.').expand_path

    path.reject do |item|
      path = Pathname.new(item).expand_path
      is_reject = nil
      relative = nil
      begin
        relative = path.relative_path_from(dot).to_s
      rescue ArgumentError
        # On Windows, sometimes crosses different drive letters.
        is_reject = true
      else
        is_reject = relative.start_with? '..'
      end
      is_reject
    end
  end

  ##
  # Set up an output generator for the named +generator_name+.
  #
  # If the found generator responds to :setup_options it will be called with
  # the options instance.  This allows generators to add custom options or set
  # default options.

  def setup_generator generator_name = @generator_name
    @generator = @generators[generator_name]

    unless @generator then
      raise OptionParser::InvalidArgument,
            "Invalid output formatter #{generator_name}"
    end

    return if @generator_options.include? @generator

    @generator_name = generator_name
    @generator_options << @generator

    if @generator.respond_to? :setup_options then
      @option_parser ||= OptionParser.new
      @generator.setup_options self
    end
  end

  ##
  # Finds the template dir for +template+

  def template_dir_for template
    template_path = File.join 'rdoc', 'generator', 'template', template

    $LOAD_PATH.map do |path|
      File.join File.expand_path(path), template_path
    end.find do |dir|
      File.directory? dir
    end
  end

  # Sets the minimum visibility of a documented method.
  #
  # Accepts +:public+, +:protected+, +:private+, +:nodoc+, or +:all+.
  #
  # When +:all+ is passed, visibility is set to +:private+, similarly to
  # RDOCOPT="--all", see #visibility for more information.

  def visibility= visibility
    case visibility
    when :all
      @visibility = :private
    else
      @visibility = visibility
    end
  end

  ##
  # Displays a warning using Kernel#warn if we're being verbose

  def warn message
    super message if @verbosity > 1
  end

  ##
  # Writes the YAML file .rdoc_options to the current directory containing the
  # parsed options.

  def write_options
    RDoc.load_yaml

    File.open '.rdoc_options', 'w' do |io|
      io.set_encoding Encoding::UTF_8

      io.print to_yaml
    end
  end

  ##
  # Loads options from .rdoc_options if the file exists, otherwise creates a
  # new RDoc::Options instance.

  def self.load_options
    options_file = File.expand_path '.rdoc_options'
    return RDoc::Options.new unless File.exist? options_file

    RDoc.load_yaml

    begin
      options = YAML.safe_load File.read('.rdoc_options'), permitted_classes: [RDoc::Options, Symbol]
    rescue Psych::SyntaxError
      raise RDoc::Error, "#{options_file} is not a valid rdoc options file"
    end

    return RDoc::Options.new unless options # Allow empty file.

    raise RDoc::Error, "#{options_file} is not a valid rdoc options file" unless
      RDoc::Options === options or Hash === options

    if Hash === options
      # Override the default values with the contents of YAML file.
      options = RDoc::Options.new options
    end

    options
  end

end
PK)J[����4share/gems/gems/rdoc-6.10.0/lib/rdoc/code_objects.rbnu�[���# frozen_string_literal: true
# This file was used to load all the RDoc::CodeObject subclasses at once.  Now
# autoload handles this.

require_relative '../rdoc'
PK)J[��6�5share/gems/gems/rdoc-6.10.0/lib/rdoc/rubygems_hook.rbnu�[���# frozen_string_literal: true
require 'rubygems/user_interaction'
require 'fileutils'
require_relative '../rdoc'

# We define the following two similar name classes in this file:
#
# - RDoc::RubyGemsHook
# - RDoc::RubygemsHook
#
# RDoc::RubyGemsHook is the main class that has real logic.
#
# RDoc::RubygemsHook is a class that is only for
# compatibility. RDoc::RubygemsHook is used by RubyGems directly. We
# can remove this when all maintained RubyGems remove
# `rubygems/rdoc.rb`.

class RDoc::RubyGemsHook

  include Gem::UserInteraction
  extend  Gem::UserInteraction

  @rdoc_version = nil
  @specs = []

  ##
  # Force installation of documentation?

  attr_accessor :force

  ##
  # Generate rdoc?

  attr_accessor :generate_rdoc

  ##
  # Generate ri data?

  attr_accessor :generate_ri

  class << self

    ##
    # Loaded version of RDoc.  Set by ::load_rdoc

    attr_reader :rdoc_version

  end

  ##
  # Post installs hook that generates documentation for each specification in
  # +specs+

  def self.generate installer, specs
    start = Time.now
    types = installer.document

    generate_rdoc = types.include? 'rdoc'
    generate_ri   = types.include? 'ri'

    specs.each do |spec|
      new(spec, generate_rdoc, generate_ri).generate
    end

    return unless generate_rdoc or generate_ri

    duration = (Time.now - start).to_i
    names    = specs.map(&:name).join ', '

    say "Done installing documentation for #{names} after #{duration} seconds"
  end

  def self.remove uninstaller
    new(uninstaller.spec).remove
  end

  ##
  # Loads the RDoc generator

  def self.load_rdoc
    return if @rdoc_version

    require_relative 'rdoc'

    @rdoc_version = Gem::Version.new ::RDoc::VERSION
  end

  ##
  # Creates a new documentation generator for +spec+.  RDoc and ri data
  # generation can be enabled or disabled through +generate_rdoc+ and
  # +generate_ri+ respectively.
  #
  # Only +generate_ri+ is enabled by default.

  def initialize spec, generate_rdoc = false, generate_ri = true
    @doc_dir   = spec.doc_dir
    @force     = false
    @rdoc      = nil
    @spec      = spec

    @generate_rdoc = generate_rdoc
    @generate_ri   = generate_ri

    @rdoc_dir = spec.doc_dir 'rdoc'
    @ri_dir   = spec.doc_dir 'ri'
  end

  ##
  # Removes legacy rdoc arguments from +args+
  #--
  # TODO move to RDoc::Options

  def delete_legacy_args args
    args.delete '--inline-source'
    args.delete '--promiscuous'
    args.delete '-p'
    args.delete '--one-file'
  end

  ##
  # Generates documentation using the named +generator+ ("darkfish" or "ri")
  # and following the given +options+.
  #
  # Documentation will be generated into +destination+

  def document generator, options, destination
    generator_name = generator

    options = options.dup
    options.exclude ||= [] # TODO maybe move to RDoc::Options#finish
    options.setup_generator generator
    options.op_dir = destination
    Dir.chdir @spec.full_gem_path do
      options.finish
    end

    generator = options.generator.new @rdoc.store, options

    @rdoc.options = options
    @rdoc.generator = generator

    say "Installing #{generator_name} documentation for #{@spec.full_name}"

    FileUtils.mkdir_p options.op_dir

    Dir.chdir options.op_dir do
      begin
        @rdoc.class.current = @rdoc
        @rdoc.generator.generate
      ensure
        @rdoc.class.current = nil
      end
    end
  end

  ##
  # Generates RDoc and ri data

  def generate
    return if @spec.default_gem?
    return unless @generate_ri or @generate_rdoc

    setup

    options = nil

    args = @spec.rdoc_options
    args.concat @spec.source_paths
    args.concat @spec.extra_rdoc_files

    case config_args = Gem.configuration[:rdoc]
    when String then
      args = args.concat config_args.split(' ')
    when Array then
      args = args.concat config_args
    end

    delete_legacy_args args

    Dir.chdir @spec.full_gem_path do
      options = ::RDoc::Options.new
      options.default_title = "#{@spec.full_name} Documentation"
      options.parse args
    end

    options.quiet = !Gem.configuration.really_verbose

    @rdoc = new_rdoc
    @rdoc.options = options

    store = RDoc::Store.new
    store.encoding = options.encoding
    store.dry_run  = options.dry_run
    store.main     = options.main_page
    store.title    = options.title

    @rdoc.store = store

    say "Parsing documentation for #{@spec.full_name}"

    Dir.chdir @spec.full_gem_path do
      @rdoc.parse_files options.files
    end

    document 'ri',       options, @ri_dir if
      @generate_ri   and (@force or not File.exist? @ri_dir)

    document 'darkfish', options, @rdoc_dir if
      @generate_rdoc and (@force or not File.exist? @rdoc_dir)
  end

  ##
  # #new_rdoc creates a new RDoc instance.  This method is provided only to
  # make testing easier.

  def new_rdoc # :nodoc:
    ::RDoc::RDoc.new
  end

  ##
  # Is rdoc documentation installed?

  def rdoc_installed?
    File.exist? @rdoc_dir
  end

  ##
  # Removes generated RDoc and ri data

  def remove
    base_dir = @spec.base_dir

    raise Gem::FilePermissionError, base_dir unless File.writable? base_dir

    FileUtils.rm_rf @rdoc_dir
    FileUtils.rm_rf @ri_dir
  end

  ##
  # Is ri data installed?

  def ri_installed?
    File.exist? @ri_dir
  end

  ##
  # Prepares the spec for documentation generation

  def setup
    self.class.load_rdoc

    raise Gem::FilePermissionError, @doc_dir if
      File.exist?(@doc_dir) and not File.writable?(@doc_dir)

    FileUtils.mkdir_p @doc_dir unless File.exist? @doc_dir
  end

end

# This class is referenced by RubyGems to create documents.
# All implementations are moved to the above RubyGemsHook.
#
# This class does nothing when this RDoc is installed as a normal gem
# or a bundled gem.
#
# This class does generate/remove documents for compatibility when
# this RDoc is installed as a default gem.
#
# We can remove this when all maintained RubyGems remove
# `rubygems/rdoc.rb`.
module RDoc
  class RubygemsHook

    attr_accessor :generate_rdoc, :generate_ri, :force

    def self.default_gem?
      !File.exist?(File.join(__dir__, "..", "rubygems_plugin.rb"))
    end

    def initialize(spec, generate_rdoc = false, generate_ri = true)
      @spec = spec
      @generate_rdoc = generate_rdoc
      @generate_ri   = generate_ri
      @force = false
    end

    def generate
      # Do nothing if this is NOT a default gem.
      return unless self.class.default_gem?

      # Generate document for compatibility if this is a default gem.
      hook = RubyGemsHook.new(@spec, @generate_rdoc, @generate_ri)
      hook.force = @force
      hook.generate
    end

    def remove
      # Do nothing if this is NOT a default gem.
      return unless self.class.default_gem?

      # Remove generated document for compatibility if this is a
      # default gem.
      RubyGemsHook.new(@spec).remove
    end

    def self.generation_hook installer, specs
      # Do nothing if this is NOT a default gem.
      return unless default_gem?

      # Generate document for compatibility if this is a default gem.
      RubyGemsHook.generate(installer, specs)
    end
  end
end
PK)J[�Y��kk/share/gems/gems/rdoc-6.10.0/lib/rdoc/version.rbnu�[���# frozen_string_literal: true

module RDoc

  ##
  # RDoc version you are using

  VERSION = '6.10.0'

end
PK)J[��?zz7share/gems/gems/rdoc-6.10.0/lib/rdoc/cross_reference.rbnu�[���# frozen_string_literal: true

require_relative 'markup/attribute_manager' # for PROTECT_ATTR

##
# RDoc::CrossReference is a reusable way to create cross references for names.

class RDoc::CrossReference

  ##
  # Regular expression to match class references
  #
  # 1. There can be a '\\' in front of text to suppress the cross-reference
  # 2. There can be a '::' in front of class names to reference from the
  #    top-level namespace.
  # 3. The method can be followed by parenthesis (not recommended)

  CLASS_REGEXP_STR = '\\\\?((?:\:{2})?[A-Z]\w*(?:\:\:\w+)*)'

  ##
  # Regular expression to match a single method argument.

  METHOD_ARG_REGEXP_STR = '[\w.+*/=<>-]+'

  ##
  # Regular expression to match method arguments.

  METHOD_ARGS_REGEXP_STR = /(?:\((?:#{METHOD_ARG_REGEXP_STR}(?:,\s*#{METHOD_ARG_REGEXP_STR})*)?\))?/.source

  ##
  # Regular expression to match method references.
  #
  # See CLASS_REGEXP_STR

  METHOD_REGEXP_STR = /(
    (?!\d)[\w#{RDoc::Markup::AttributeManager::PROTECT_ATTR}]+[!?=]?|
    %|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[\/%\`|&^~]
  )#{METHOD_ARGS_REGEXP_STR}/.source.delete("\n ").freeze

  ##
  # Regular expressions matching text that should potentially have
  # cross-reference links generated are passed to add_regexp_handling. Note
  # that these expressions are meant to pick up text for which cross-references
  # have been suppressed, since the suppression characters are removed by the
  # code that is triggered.

  CROSSREF_REGEXP = /(?:^|[\s()])
                     (
                      (?:
                       # A::B::C.meth
                       #{CLASS_REGEXP_STR}(?:[.#]|::)#{METHOD_REGEXP_STR}

                       # A::B::C
                       # The stuff after CLASS_REGEXP_STR is a
                       # nasty hack.  CLASS_REGEXP_STR unfortunately matches
                       # words like dog and cat (these are legal "class"
                       # names in Fortran 95).  When a word is flagged as a
                       # potential cross-reference, limitations in the markup
                       # engine suppress other processing, such as typesetting.
                       # This is particularly noticeable for contractions.
                       # In order that words like "can't" not
                       # be flagged as potential cross-references, only
                       # flag potential class cross-references if the character
                       # after the cross-reference is a space, sentence
                       # punctuation, tag start character, or attribute
                       # marker.
                       | #{CLASS_REGEXP_STR}(?=[@\s).?!,;<\000]|\z)

                       # Stand-alone method (preceded by a #)
                       | \\?\##{METHOD_REGEXP_STR}

                       # Stand-alone method (preceded by ::)
                       | ::#{METHOD_REGEXP_STR}

                       # Things that look like filenames
                       # The key thing is that there must be at least
                       # one special character (period, slash, or
                       # underscore).
                       | (?:\.\.\/)*[-\/\w]+[_\/.][-\w\/.]+

                       # Things that have markup suppressed
                       # Don't process things like '\<' in \<tt>, though.
                       # TODO: including < is a hack, not very satisfying.
                       | \\[^\s<]
                      )

                      # labels for headings
                      (?:@[\w+%-]+(?:\.[\w|%-]+)?)?
                     )/x

  ##
  # Version of CROSSREF_REGEXP used when <tt>--hyperlink-all</tt> is specified.

  ALL_CROSSREF_REGEXP = /
                     (?:^|[\s()])
                     (
                      (?:
                       # A::B::C.meth
                       #{CLASS_REGEXP_STR}(?:[.#]|::)#{METHOD_REGEXP_STR}

                       # A::B::C
                       | #{CLASS_REGEXP_STR}(?=[@\s).?!,;<\000]|\z)

                       # Stand-alone method
                       | \\?#{METHOD_REGEXP_STR}

                       # Things that look like filenames
                       | (?:\.\.\/)*[-\/\w]+[_\/.][-\w\/.]+

                       # Things that have markup suppressed
                       | \\[^\s<]
                      )

                      # labels for headings
                      (?:@[\w+%-]+)?
                     )/x

  ##
  # Hash of references that have been looked-up to their replacements

  attr_accessor :seen

  ##
  # Allows cross-references to be created based on the given +context+
  # (RDoc::Context).

  def initialize context
    @context = context
    @store   = context.store

    @seen = {}
  end

  ##
  # Returns a method reference to +name+.

  def resolve_method name
    ref = nil

    if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then
      type = $2
      if '.' == type # will find either #method or ::method
        method = $3
      else
        method = "#{type}#{$3}"
      end
      container = @context.find_symbol_module($1)
    elsif /^([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then
      type = $1
      if '.' == type
        method = $2
      else
        method = "#{type}#{$2}"
      end
      container = @context
    else
      type = nil
      container = nil
    end

    if container then
      unless RDoc::TopLevel === container then
        if '.' == type then
          if 'new' == method then # AnyClassName.new will be class method
            ref = container.find_local_symbol method
            ref = container.find_ancestor_local_symbol method unless ref
          else
            ref = container.find_local_symbol "::#{method}"
            ref = container.find_ancestor_local_symbol "::#{method}" unless ref
            ref = container.find_local_symbol "##{method}" unless ref
            ref = container.find_ancestor_local_symbol "##{method}" unless ref
          end
        else
          ref = container.find_local_symbol method
          ref = container.find_ancestor_local_symbol method unless ref
        end
      end
    end

    ref
  end

  ##
  # Returns a reference to +name+.
  #
  # If the reference is found and +name+ is not documented +text+ will be
  # returned.  If +name+ is escaped +name+ is returned.  If +name+ is not
  # found +text+ is returned.

  def resolve name, text
    return @seen[name] if @seen.include? name

    ref = case name
          when /^\\(#{CLASS_REGEXP_STR})$/o then
            @context.find_symbol $1
          else
            @context.find_symbol name
          end

    ref = resolve_method name unless ref

    # Try a page name
    ref = @store.page name if not ref and name =~ /^[\w.]+$/

    ref = nil if RDoc::Alias === ref # external alias, can't link to it

    out = if name == '\\' then
            name
          elsif name =~ /^\\/ then
            # we remove the \ only in front of what we know:
            # other backslashes are treated later, only outside of <tt>
            ref ? $' : name
          elsif ref then
            if ref.display? then
              ref
            else
              text
            end
          else
            text
          end

    @seen[name] = out

    out
  end

end
PK)J[1��RR/share/gems/gems/rdoc-6.10.0/lib/rdoc/tom_doc.rbnu�[���# frozen_string_literal: true
# :markup: tomdoc

# A parser for TomDoc based on TomDoc 1.0.0-rc1 (02adef9b5a)
#
# The TomDoc specification can be found at http://tomdoc.org.
#
# To choose TomDoc as your only default format see RDoc::Options@Saved+Options
# for instructions on setting up a <code>.rdoc_options</code> file to store
# your project default.
#
# There are a few differences between this parser and the specification.  A
# best-effort was made to follow the specification as closely as possible but
# some choices to deviate were made.
#
# A future version of RDoc will warn when a MUST or MUST NOT is violated and
# may warn when a SHOULD or SHOULD NOT is violated.  RDoc will always try
# to emit documentation even if given invalid TomDoc.
#
# Here are some implementation choices this parser currently makes:
#
# This parser allows rdoc-style inline markup but you should not depended on
# it.
#
# This parser allows a space between the comment and the method body.
#
# This parser does not require the default value to be described for an
# optional argument.
#
# This parser does not examine the order of sections.  An Examples section may
# precede the Arguments section.
#
# This class is documented in TomDoc format.  Since this is a subclass of the
# RDoc markup parser there isn't much to see here, unfortunately.

class RDoc::TomDoc < RDoc::Markup::Parser

  # Internal: Token accessor

  attr_reader :tokens

  # Internal: Adds a post-processor which sets the RDoc section based on the
  # comment's status.
  #
  # Returns nothing.

  def self.add_post_processor # :nodoc:
    RDoc::Markup::PreProcess.post_process do |comment, code_object|
      next unless code_object and
                  RDoc::Comment === comment and comment.format == 'tomdoc'

      comment.text.gsub!(/(\A\s*# )(Public|Internal|Deprecated):\s+/) do
        section = code_object.add_section $2
        code_object.temporary_section = section

        $1
      end
    end
  end

  add_post_processor

  # Public: Parses TomDoc from text
  #
  # text - A String containing TomDoc-format text.
  #
  # Examples
  #
  #   RDoc::TomDoc.parse <<-TOMDOC
  #   This method does some things
  #
  #   Returns nothing.
  #   TOMDOC
  #   # => #<RDoc::Markup::Document:0xXXX @parts=[...], @file=nil>
  #
  # Returns an RDoc::Markup::Document representing the TomDoc format.

  def self.parse text
    parser = new

    parser.tokenize text
    doc = RDoc::Markup::Document.new
    parser.parse doc
    doc
  end

  # Internal: Extracts the Signature section's method signature
  #
  # comment - An RDoc::Comment that will be parsed and have the signature
  #           extracted
  #
  # Returns a String containing the signature and nil if not

  def self.signature comment
    return unless comment.tomdoc?

    document = comment.parse

    signature = nil
    found_heading = false
    found_signature = false

    document.parts.delete_if do |part|
      next false if found_signature

      found_heading ||=
        RDoc::Markup::Heading === part && part.text == 'Signature'

      next false unless found_heading

      next true if RDoc::Markup::BlankLine === part

      if RDoc::Markup::Verbatim === part then
        signature = part
        found_signature = true
      end
    end

    signature and signature.text
  end

  # Public: Creates a new TomDoc parser.  See also RDoc::Markup::parse

  def initialize
    super

    @section      = nil
    @seen_returns = false
  end

  # Internal: Builds a heading from the token stream
  #
  # level - The level of heading to create
  #
  # Returns an RDoc::Markup::Heading

  def build_heading level
    heading = super

    @section = heading.text

    heading
  end

  # Internal: Builds a verbatim from the token stream.  A verbatim in the
  # Examples section will be marked as in Ruby format.
  #
  # margin - The indentation from the margin for lines that belong to this
  #          verbatim section.
  #
  # Returns an RDoc::Markup::Verbatim

  def build_verbatim margin
    verbatim = super

    verbatim.format = :ruby if @section == 'Examples'

    verbatim
  end

  # Internal: Builds a paragraph from the token stream
  #
  # margin - Unused
  #
  # Returns an RDoc::Markup::Paragraph.

  def build_paragraph margin
    p :paragraph_start => margin if @debug

    paragraph = RDoc::Markup::Paragraph.new

    until @tokens.empty? do
      type, data, = get

      case type
      when :TEXT then
        @section = 'Returns' if data =~ /\A(Returns|Raises)/

        paragraph << data
      when :NEWLINE then
        if :TEXT == peek_token[0] then
          # Lines beginning with 'Raises' in the Returns section should not be
          # treated as multiline text
          if 'Returns' == @section and
            peek_token[1].start_with?('Raises') then
            break
          else
            paragraph << ' '
          end
        else
          break
        end
      else
        unget
        break
      end
    end

    p :paragraph_end => margin if @debug

    paragraph
  end

  ##
  # Detects a section change to "Returns" and adds a heading

  def parse_text parent, indent # :nodoc:
    paragraph = build_paragraph indent

    if false == @seen_returns and 'Returns' == @section then
      @seen_returns = true
      parent << RDoc::Markup::Heading.new(3, 'Returns')
      parent << RDoc::Markup::BlankLine.new
    end

    parent << paragraph
  end

  # Internal: Turns text into an Array of tokens
  #
  # text - A String containing TomDoc-format text.
  #
  # Returns self.

  def tokenize text
    text = text.sub(/\A(Public|Internal|Deprecated):\s+/, '')

    setup_scanner text

    until @s.eos? do
      pos = @s.pos

      # leading spaces will be reflected by the column of the next token
      # the only thing we loose are trailing spaces at the end of the file
      next if @s.scan(/ +/)

      @tokens << case
                 when @s.scan(/\r?\n/) then
                   token = [:NEWLINE, @s.matched, *pos]
                   @s.newline!
                   token
                 when @s.scan(/(Examples|Signature)$/) then
                   @tokens << [:HEADER, 3, *pos]

                   [:TEXT, @s[1], *pos]
                 when @s.scan(/([:\w][\w\[\]]*)[ ]+- /) then
                   [:NOTE, @s[1], *pos]
                 else
                   @s.scan(/.*/)
                   [:TEXT, @s.matched.sub(/\r$/, ''), *pos]
                 end
    end

    self
  end

end
PK)J[#�"�VV*share/gems/gems/rdoc-6.10.0/lib/rdoc/rd.rbnu�[���# frozen_string_literal: true
##
# RDoc::RD implements the RD format from the rdtool gem.
#
# To choose RD as your only default format see
# RDoc::Options@Saved+Options for instructions on setting up a
# <code>.doc_options</code> file to store your project default.
#
# == LICENSE
#
# The grammar that produces RDoc::RD::BlockParser and RDoc::RD::InlineParser
# is included in RDoc under the Ruby License.
#
# You can find the original source for rdtool at
# https://github.com/uwabami/rdtool/
#
# You can use, re-distribute or change these files under Ruby's License or GPL.
#
# 1. You may make and give away verbatim copies of the source form of the
#    software without restriction, provided that you duplicate all of the
#    original copyright notices and associated disclaimers.
#
# 2. You may modify your copy of the software in any way, provided that
#    you do at least ONE of the following:
#
#    a. place your modifications in the Public Domain or otherwise
#       make them Freely Available, such as by posting said
#       modifications to Usenet or an equivalent medium, or by allowing
#       the author to include your modifications in the software.
#
#    b. use the modified software only within your corporation or
#       organization.
#
#    c. give non-standard binaries non-standard names, with
#       instructions on where to get the original software distribution.
#
#    d. make other distribution arrangements with the author.
#
# 3. You may distribute the software in object code or binary form,
#    provided that you do at least ONE of the following:
#
#    a. distribute the binaries and library files of the software,
#       together with instructions (in the manual page or equivalent)
#       on where to get the original distribution.
#
#    b. accompany the distribution with the machine-readable source of
#       the software.
#
#    c. give non-standard binaries non-standard names, with
#       instructions on where to get the original software distribution.
#
#    d. make other distribution arrangements with the author.
#
# 4. You may modify and include the part of the software into any other
#    software (possibly commercial).  But some files in the distribution
#    are not written by the author, so that they are not under these terms.
#
#    For the list of those files and their copying conditions, see the
#    file LEGAL.
#
# 5. The scripts and library files supplied as input to or produced as
#    output from the software do not automatically fall under the
#    copyright of the software, but belong to whomever generated them,
#    and may be sold commercially, and may be aggregated with this
#    software.
#
# 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
#    IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
#    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
#    PURPOSE.

class RDoc::RD

  ##
  # Parses +rd+ source and returns an RDoc::Markup::Document.  If the
  # <tt>=begin</tt> or <tt>=end</tt> lines are missing they will be added.

  def self.parse rd
    rd = rd.lines.to_a

    if rd.find { |i| /\S/ === i } and !rd.find{|i| /^=begin\b/ === i } then
      rd.unshift("=begin\n").push("=end\n")
    end

    parser = RDoc::RD::BlockParser.new
    document = parser.parse rd

    # isn't this always true?
    document.parts.shift if RDoc::Markup::BlankLine === document.parts.first
    document.parts.pop   if RDoc::Markup::BlankLine === document.parts.last

    document
  end

  autoload :BlockParser,  "#{__dir__}/rd/block_parser"
  autoload :InlineParser, "#{__dir__}/rd/inline_parser"
  autoload :Inline,       "#{__dir__}/rd/inline"

end
PK)J[";\.��3share/gems/gems/rdoc-6.10.0/lib/rdoc/erb_partial.rbnu�[���# frozen_string_literal: true
##
# Allows an ERB template to be rendered in the context (binding) of an
# existing ERB template evaluation.

class RDoc::ERBPartial < ERB

  ##
  # Overrides +compiler+ startup to set the +eoutvar+ to an empty string only
  # if it isn't already set.

  def set_eoutvar compiler, eoutvar = '_erbout'
    super

    compiler.pre_cmd = ["#{eoutvar} ||= +''"]
  end

end
PK)J[��_C\C\-share/gems/gems/rdoc-6.10.0/lib/rdoc/store.rbnu�[���# frozen_string_literal: true
require 'fileutils'

##
# A set of rdoc data for a single project (gem, path, etc.).
#
# The store manages reading and writing ri data for a project and maintains a
# cache of methods, classes and ancestors in the store.
#
# The store maintains a #cache of its contents for faster lookup.  After
# adding items to the store it must be flushed using #save_cache.  The cache
# contains the following structures:
#
#    @cache = {
#      :ancestors        => {}, # class name => ancestor names
#      :attributes       => {}, # class name => attributes
#      :class_methods    => {}, # class name => class methods
#      :instance_methods => {}, # class name => instance methods
#      :modules          => [], # classes and modules in this store
#      :pages            => [], # page names
#    }
#--
# TODO need to prune classes

class RDoc::Store

  ##
  # Errors raised from loading or saving the store

  class Error < RDoc::Error
  end

  ##
  # Raised when a stored file for a class, module, page or method is missing.

  class MissingFileError < Error

    ##
    # The store the file should exist in

    attr_reader :store

    ##
    # The file the #name should be saved as

    attr_reader :file

    ##
    # The name of the object the #file would be loaded from

    attr_reader :name

    ##
    # Creates a new MissingFileError for the missing +file+ for the given
    # +name+ that should have been in the +store+.

    def initialize store, file, name
      @store = store
      @file  = file
      @name  = name
    end

    def message # :nodoc:
      "store at #{@store.path} missing file #{@file} for #{@name}"
    end

  end

  ##
  # Stores the name of the C variable a class belongs to.  This helps wire up
  # classes defined from C across files.

  attr_reader :c_enclosure_classes # :nodoc:

  attr_reader :c_enclosure_names # :nodoc:

  ##
  # Maps C variables to class or module names for each parsed C file.

  attr_reader :c_class_variables

  ##
  # Maps C variables to singleton class names for each parsed C file.

  attr_reader :c_singleton_class_variables

  ##
  # If true this Store will not write any files

  attr_accessor :dry_run

  ##
  # Path this store reads or writes

  attr_accessor :path

  ##
  # The RDoc::RDoc driver for this parse tree.  This allows classes consulting
  # the documentation tree to access user-set options, for example.

  attr_accessor :rdoc

  ##
  # Type of ri datastore this was loaded from.  See RDoc::RI::Driver,
  # RDoc::RI::Paths.

  attr_accessor :type

  ##
  # The contents of the Store

  attr_reader :cache

  ##
  # The encoding of the contents in the Store

  attr_accessor :encoding

  ##
  # The lazy constants alias will be discovered in passing

  attr_reader :unmatched_constant_alias

  ##
  # Creates a new Store of +type+ that will load or save to +path+

  def initialize path = nil, type = nil
    @dry_run  = false
    @encoding = nil
    @path     = path
    @rdoc     = nil
    @type     = type

    @cache = {
      :ancestors                   => {},
      :attributes                  => {},
      :class_methods               => {},
      :c_class_variables           => {},
      :c_singleton_class_variables => {},
      :encoding                    => @encoding,
      :instance_methods            => {},
      :main                        => nil,
      :modules                     => [],
      :pages                       => [],
      :title                       => nil,
    }

    @classes_hash = {}
    @modules_hash = {}
    @files_hash   = {}
    @text_files_hash = {}

    @c_enclosure_classes = {}
    @c_enclosure_names   = {}

    @c_class_variables           = {}
    @c_singleton_class_variables = {}

    @unique_classes = nil
    @unique_modules = nil

    @unmatched_constant_alias = {}
  end

  ##
  # Adds +module+ as an enclosure (namespace) for the given +variable+ for C
  # files.

  def add_c_enclosure variable, namespace
    @c_enclosure_classes[variable] = namespace
  end

  ##
  # Adds C variables from an RDoc::Parser::C

  def add_c_variables c_parser
    filename = c_parser.top_level.relative_name

    @c_class_variables[filename] = make_variable_map c_parser.classes

    @c_singleton_class_variables[filename] = c_parser.singleton_classes
  end

  ##
  # Adds the file with +name+ as an RDoc::TopLevel to the store.  Returns the
  # created RDoc::TopLevel.

  def add_file absolute_name, relative_name: absolute_name, parser: nil
    unless top_level = @files_hash[relative_name] then
      top_level = RDoc::TopLevel.new absolute_name, relative_name
      top_level.parser = parser if parser
      top_level.store = self
      @files_hash[relative_name] = top_level
      @text_files_hash[relative_name] = top_level if top_level.text?
    end

    top_level
  end

  ##
  # Make sure any references to C variable names are resolved to the corresponding class.
  #

  def resolve_c_superclasses
    @classes_hash.each_value do |klass|
      if klass.superclass.is_a?(String) && (candidate = find_c_enclosure(klass.superclass))
        klass.superclass = candidate
      end
    end
  end

  ##
  # Sets the parser of +absolute_name+, unless it from a source code file.

  def update_parser_of_file(absolute_name, parser)
    if top_level = @files_hash[absolute_name] then
      @text_files_hash[absolute_name] = top_level if top_level.text?
    end
  end

  ##
  # Returns all classes discovered by RDoc

  def all_classes
    @classes_hash.values
  end

  ##
  # Returns all classes and modules discovered by RDoc

  def all_classes_and_modules
    @classes_hash.values + @modules_hash.values
  end

  ##
  # All TopLevels known to RDoc

  def all_files
    @files_hash.values
  end

  ##
  # Returns all modules discovered by RDoc

  def all_modules
    modules_hash.values
  end

  ##
  # Ancestors cache accessor.  Maps a klass name to an Array of its ancestors
  # in this store.  If Foo in this store inherits from Object, Kernel won't be
  # listed (it will be included from ruby's ri store).

  def ancestors
    @cache[:ancestors]
  end

  ##
  # Attributes cache accessor.  Maps a class to an Array of its attributes.

  def attributes
    @cache[:attributes]
  end

  ##
  # Path to the cache file

  def cache_path
    File.join @path, 'cache.ri'
  end

  ##
  # Path to the ri data for +klass_name+

  def class_file klass_name
    name = klass_name.split('::').last
    File.join class_path(klass_name), "cdesc-#{name}.ri"
  end

  ##
  # Class methods cache accessor.  Maps a class to an Array of its class
  # methods (not full name).

  def class_methods
    @cache[:class_methods]
  end

  ##
  # Path where data for +klass_name+ will be stored (methods or class data)

  def class_path klass_name
    File.join @path, *klass_name.split('::')
  end

  ##
  # Hash of all classes known to RDoc

  def classes_hash
    @classes_hash
  end

  ##
  # Removes empty items and ensures item in each collection are unique and
  # sorted

  def clean_cache_collection collection # :nodoc:
    collection.each do |name, item|
      if item.empty? then
        collection.delete name
      else
        # HACK mongrel-1.1.5 documents its files twice
        item.uniq!
        item.sort!
      end
    end
  end

  ##
  # Prepares the RDoc code object tree for use by a generator.
  #
  # It finds unique classes/modules defined, and replaces classes/modules that
  # are aliases for another one by a copy with RDoc::ClassModule#is_alias_for
  # set.
  #
  # It updates the RDoc::ClassModule#constant_aliases attribute of "real"
  # classes or modules.
  #
  # It also completely removes the classes and modules that should be removed
  # from the documentation and the methods that have a visibility below
  # +min_visibility+, which is the <tt>--visibility</tt> option.
  #
  # See also RDoc::Context#remove_from_documentation?

  def complete min_visibility
    fix_basic_object_inheritance

    # cache included modules before they are removed from the documentation
    all_classes_and_modules.each { |cm| cm.ancestors }

    unless min_visibility == :nodoc then
      remove_nodoc @classes_hash
      remove_nodoc @modules_hash
    end

    @unique_classes = find_unique @classes_hash
    @unique_modules = find_unique @modules_hash

    unique_classes_and_modules.each do |cm|
      cm.complete min_visibility
    end

    @files_hash.each_key do |file_name|
      tl = @files_hash[file_name]

      unless tl.text? then
        tl.modules_hash.clear
        tl.classes_hash.clear

        tl.classes_or_modules.each do |cm|
          name = cm.full_name
          if cm.type == 'class' then
            tl.classes_hash[name] = cm if @classes_hash[name]
          else
            tl.modules_hash[name] = cm if @modules_hash[name]
          end
        end
      end
    end
  end

  ##
  # Hash of all files known to RDoc

  def files_hash
    @files_hash
  end

  ##
  # Finds the enclosure (namespace) for the given C +variable+.

  def find_c_enclosure variable
    @c_enclosure_classes.fetch variable do
      break unless name = @c_enclosure_names[variable]

      mod = find_class_or_module name

      unless mod then
        loaded_mod = load_class_data name

        file = loaded_mod.in_files.first

        return unless file # legacy data source

        file.store = self

        mod = file.add_module RDoc::NormalModule, name
      end

      @c_enclosure_classes[variable] = mod
    end
  end

  ##
  # Finds the class with +name+ in all discovered classes

  def find_class_named name
    @classes_hash[name]
  end

  ##
  # Finds the class with +name+ starting in namespace +from+

  def find_class_named_from name, from
    from = find_class_named from unless RDoc::Context === from

    until RDoc::TopLevel === from do
      return nil unless from

      klass = from.find_class_named name
      return klass if klass

      from = from.parent
    end

    find_class_named name
  end

  ##
  # Finds the class or module with +name+

  def find_class_or_module name
    name = $' if name =~ /^::/
    @classes_hash[name] || @modules_hash[name]
  end

  ##
  # Finds the file with +name+ in all discovered files

  def find_file_named name
    @files_hash[name]
  end

  ##
  # Finds the module with +name+ in all discovered modules

  def find_module_named name
    @modules_hash[name]
  end

  ##
  # Returns the RDoc::TopLevel that is a text file and has the given
  # +file_name+

  def find_text_page file_name
    @text_files_hash.each_value.find do |file|
      file.full_name == file_name
    end
  end

  ##
  # Finds unique classes/modules defined in +all_hash+,
  # and returns them as an array. Performs the alias
  # updates in +all_hash+: see ::complete.
  #--
  # TODO  aliases should be registered by Context#add_module_alias

  def find_unique all_hash
    unique = []

    all_hash.each_pair do |full_name, cm|
      unique << cm if full_name == cm.full_name
    end

    unique
  end

  ##
  # Fixes the erroneous <tt>BasicObject < Object</tt> in 1.9.
  #
  # Because we assumed all classes without a stated superclass
  # inherit from Object, we have the above wrong inheritance.
  #
  # We fix BasicObject right away if we are running in a Ruby
  # version >= 1.9.

  def fix_basic_object_inheritance
    basic = classes_hash['BasicObject']
    return unless basic
    basic.superclass = nil
  end

  ##
  # Friendly rendition of #path

  def friendly_path
    case type
    when :gem    then
      parent = File.expand_path '..', @path
      "gem #{File.basename parent}"
    when :home   then RDoc.home
    when :site   then 'ruby site'
    when :system then 'ruby core'
    else @path
    end
  end

  def inspect # :nodoc:
    "#<%s:0x%x %s %p>" % [self.class, object_id, @path, module_names.sort]
  end

  ##
  # Instance methods cache accessor.  Maps a class to an Array of its
  # instance methods (not full name).

  def instance_methods
    @cache[:instance_methods]
  end

  ##
  # Loads all items from this store into memory.  This recreates a
  # documentation tree for use by a generator

  def load_all
    load_cache

    module_names.each do |module_name|
      mod = find_class_or_module(module_name) || load_class(module_name)

      # load method documentation since the loaded class/module does not have
      # it
      loaded_methods = mod.method_list.map do |method|
        load_method module_name, method.full_name
      end

      mod.method_list.replace loaded_methods

      loaded_attributes = mod.attributes.map do |attribute|
        load_method module_name, attribute.full_name
      end

      mod.attributes.replace loaded_attributes
    end

    all_classes_and_modules.each do |mod|
      descendent_re = /^#{mod.full_name}::[^:]+$/

      module_names.each do |name|
        next unless name =~ descendent_re

        descendent = find_class_or_module name

        case descendent
        when RDoc::NormalClass then
          mod.classes_hash[name] = descendent
        when RDoc::NormalModule then
          mod.modules_hash[name] = descendent
        end
      end
    end

    @cache[:pages].each do |page_name|
      page = load_page page_name
      @files_hash[page_name] = page
      @text_files_hash[page_name] = page if page.text?
    end
  end

  ##
  # Loads cache file for this store

  def load_cache
    #orig_enc = @encoding

    @cache = marshal_load(cache_path)

    load_enc = @cache[:encoding]

    # TODO this feature will be time-consuming to add:
    # a) Encodings may be incompatible but transcodeable
    # b) Need to warn in the appropriate spots, wherever they may be
    # c) Need to handle cross-cache differences in encodings
    # d) Need to warn when generating into a cache with different encodings
    #
    #if orig_enc and load_enc != orig_enc then
    #  warn "Cached encoding #{load_enc} is incompatible with #{orig_enc}\n" \
    #       "from #{path}/cache.ri" unless
    #    Encoding.compatible? orig_enc, load_enc
    #end

    @encoding = load_enc unless @encoding

    @cache[:pages]                       ||= []
    @cache[:main]                        ||= nil
    @cache[:c_class_variables]           ||= {}
    @cache[:c_singleton_class_variables] ||= {}

    @cache[:c_class_variables].each do |_, map|
      map.each do |variable, name|
        @c_enclosure_names[variable] = name
      end
    end

    @cache
  rescue Errno::ENOENT
  end

  ##
  # Loads ri data for +klass_name+ and hooks it up to this store.

  def load_class klass_name
    obj = load_class_data klass_name

    obj.store = self

    case obj
    when RDoc::NormalClass then
      @classes_hash[klass_name] = obj
    when RDoc::SingleClass then
      @classes_hash[klass_name] = obj
    when RDoc::NormalModule then
      @modules_hash[klass_name] = obj
    end
  end

  ##
  # Loads ri data for +klass_name+

  def load_class_data klass_name
    file = class_file klass_name

    marshal_load(file)
  rescue Errno::ENOENT => e
    error = MissingFileError.new(self, file, klass_name)
    error.set_backtrace e.backtrace
    raise error
  end

  ##
  # Loads ri data for +method_name+ in +klass_name+

  def load_method klass_name, method_name
    file = method_file klass_name, method_name

    obj = marshal_load(file)
    obj.store = self
    obj.parent ||= find_class_or_module(klass_name) || load_class(klass_name)
    obj
  rescue Errno::ENOENT => e
    error = MissingFileError.new(self, file, klass_name + method_name)
    error.set_backtrace e.backtrace
    raise error
  end

  ##
  # Loads ri data for +page_name+

  def load_page page_name
    file = page_file page_name

    obj = marshal_load(file)
    obj.store = self
    obj
  rescue Errno::ENOENT => e
    error = MissingFileError.new(self, file, page_name)
    error.set_backtrace e.backtrace
    raise error
  end

  ##
  # Gets the main page for this RDoc store.  This page is used as the root of
  # the RDoc server.

  def main
    @cache[:main]
  end

  ##
  # Sets the main page for this RDoc store.

  def main= page
    @cache[:main] = page
  end

  ##
  # Converts the variable => ClassModule map +variables+ from a C parser into
  # a variable => class name map.

  def make_variable_map variables
    map = {}

    variables.each { |variable, class_module|
      map[variable] = class_module.full_name
    }

    map
  end

  ##
  # Path to the ri data for +method_name+ in +klass_name+

  def method_file klass_name, method_name
    method_name = method_name.split('::').last
    method_name =~ /#(.*)/
    method_type = $1 ? 'i' : 'c'
    method_name = $1 if $1
    method_name = method_name.gsub(/\W/) { "%%%02x" % $&[0].ord }

    File.join class_path(klass_name), "#{method_name}-#{method_type}.ri"
  end

  ##
  # Modules cache accessor.  An Array of all the module (and class) names in
  # the store.

  def module_names
    @cache[:modules]
  end

  ##
  # Hash of all modules known to RDoc

  def modules_hash
    @modules_hash
  end

  ##
  # Returns the RDoc::TopLevel that is a text file and has the given +name+

  def page name
    @text_files_hash.each_value.find do |file|
      file.page_name == name or file.base_name == name
    end
  end

  ##
  # Path to the ri data for +page_name+

  def page_file page_name
    file_name = File.basename(page_name).gsub('.', '_')

    File.join @path, File.dirname(page_name), "page-#{file_name}.ri"
  end

  ##
  # Removes from +all_hash+ the contexts that are nodoc or have no content.
  #
  # See RDoc::Context#remove_from_documentation?

  def remove_nodoc all_hash
    all_hash.keys.each do |name|
      context = all_hash[name]
      all_hash.delete(name) if context.remove_from_documentation?
    end
  end

  ##
  # Saves all entries in the store

  def save
    load_cache

    all_classes_and_modules.each do |klass|
      save_class klass

      klass.each_method do |method|
        save_method klass, method
      end

      klass.each_attribute do |attribute|
        save_method klass, attribute
      end
    end

    all_files.each do |file|
      save_page file
    end

    save_cache
  end

  ##
  # Writes the cache file for this store

  def save_cache
    clean_cache_collection @cache[:ancestors]
    clean_cache_collection @cache[:attributes]
    clean_cache_collection @cache[:class_methods]
    clean_cache_collection @cache[:instance_methods]

    @cache[:modules].uniq!
    @cache[:modules].sort!

    @cache[:pages].uniq!
    @cache[:pages].sort!

    @cache[:encoding] = @encoding # this gets set twice due to assert_cache

    @cache[:c_class_variables].merge!           @c_class_variables
    @cache[:c_singleton_class_variables].merge! @c_singleton_class_variables

    return if @dry_run

    File.open cache_path, 'wb' do |io|
      Marshal.dump @cache, io
    end
  end

  ##
  # Writes the ri data for +klass+ (or module)

  def save_class klass
    full_name = klass.full_name

    FileUtils.mkdir_p class_path(full_name) unless @dry_run

    @cache[:modules] << full_name

    path = class_file full_name

    begin
      disk_klass = load_class full_name

      klass = disk_klass.merge klass
    rescue MissingFileError
    end

    # BasicObject has no ancestors
    ancestors = klass.direct_ancestors.compact.map do |ancestor|
      # HACK for classes we don't know about (class X < RuntimeError)
      String === ancestor ? ancestor : ancestor.full_name
    end

    @cache[:ancestors][full_name] ||= []
    @cache[:ancestors][full_name].concat ancestors

    attribute_definitions = klass.attributes.map do |attribute|
      "#{attribute.definition} #{attribute.name}"
    end

    unless attribute_definitions.empty? then
      @cache[:attributes][full_name] ||= []
      @cache[:attributes][full_name].concat attribute_definitions
    end

    to_delete = []

    unless klass.method_list.empty? then
      @cache[:class_methods][full_name]    ||= []
      @cache[:instance_methods][full_name] ||= []

      class_methods, instance_methods =
        klass.method_list.partition { |meth| meth.singleton }

      class_methods    = class_methods.   map { |method| method.name }
      instance_methods = instance_methods.map { |method| method.name }
      attribute_names  = klass.attributes.map { |attr|   attr.name }

      old = @cache[:class_methods][full_name] - class_methods
      to_delete.concat old.map { |method|
        method_file full_name, "#{full_name}::#{method}"
      }

      old = @cache[:instance_methods][full_name] -
        instance_methods - attribute_names
      to_delete.concat old.map { |method|
        method_file full_name, "#{full_name}##{method}"
      }

      @cache[:class_methods][full_name]    = class_methods
      @cache[:instance_methods][full_name] = instance_methods
    end

    return if @dry_run

    FileUtils.rm_f to_delete

    File.open path, 'wb' do |io|
      Marshal.dump klass, io
    end
  end

  ##
  # Writes the ri data for +method+ on +klass+

  def save_method klass, method
    full_name = klass.full_name

    FileUtils.mkdir_p class_path(full_name) unless @dry_run

    cache = if method.singleton then
              @cache[:class_methods]
            else
              @cache[:instance_methods]
            end
    cache[full_name] ||= []
    cache[full_name] << method.name

    return if @dry_run

    File.open method_file(full_name, method.full_name), 'wb' do |io|
      Marshal.dump method, io
    end
  end

  ##
  # Writes the ri data for +page+

  def save_page page
    return unless page.text?

    path = page_file page.full_name

    FileUtils.mkdir_p File.dirname(path) unless @dry_run

    cache[:pages] ||= []
    cache[:pages] << page.full_name

    return if @dry_run

    File.open path, 'wb' do |io|
      Marshal.dump page, io
    end
  end

  ##
  # Source of the contents of this store.
  #
  # For a store from a gem the source is the gem name.  For a store from the
  # home directory the source is "home".  For system ri store (the standard
  # library documentation) the source is"ruby".  For a store from the site
  # ri directory the store is "site".  For other stores the source is the
  # #path.

  def source
    case type
    when :gem    then File.basename File.expand_path '..', @path
    when :home   then 'home'
    when :site   then 'site'
    when :system then 'ruby'
    else @path
    end
  end

  ##
  # Gets the title for this RDoc store.  This is used as the title in each
  # page on the RDoc server

  def title
    @cache[:title]
  end

  ##
  # Sets the title page for this RDoc store.

  def title= title
    @cache[:title] = title
  end

  ##
  # Returns the unique classes discovered by RDoc.
  #
  # ::complete must have been called prior to using this method.

  def unique_classes
    @unique_classes
  end

  ##
  # Returns the unique classes and modules discovered by RDoc.
  # ::complete must have been called prior to using this method.

  def unique_classes_and_modules
    @unique_classes + @unique_modules
  end

  ##
  # Returns the unique modules discovered by RDoc.
  # ::complete must have been called prior to using this method.

  def unique_modules
    @unique_modules
  end

  private
  def marshal_load(file)
    File.open(file, 'rb') {|io| Marshal.load(io, MarshalFilter)}
  end

  MarshalFilter = proc do |obj|
    case obj
    when true, false, nil, Array, Class, Encoding, Hash, Integer, String, Symbol, RDoc::Text
    else
      unless obj.class.name.start_with?("RDoc::")
        raise TypeError, "not permitted class: #{obj.class.name}"
      end
    end
    obj
  end
  private_constant :MarshalFilter

end
PK)J[��KK1share/gems/gems/rdoc-6.10.0/lib/rdoc/generator.rbnu�[���# frozen_string_literal: true
##
# RDoc uses generators to turn parsed source code in the form of an
# RDoc::CodeObject tree into some form of output.  RDoc comes with the HTML
# generator RDoc::Generator::Darkfish and an ri data generator
# RDoc::Generator::RI.
#
# == Registering a Generator
#
# Generators are registered by calling RDoc::RDoc.add_generator with the class
# of the generator:
#
#   class My::Awesome::Generator
#     RDoc::RDoc.add_generator self
#   end
#
# == Adding Options to +rdoc+
#
# Before option processing in +rdoc+, RDoc::Options will call ::setup_options
# on the generator class with an RDoc::Options instance.  The generator can
# use RDoc::Options#option_parser to add command-line options to the +rdoc+
# tool.  See RDoc::Options@Custom+Options for an example and see OptionParser
# for details on how to add options.
#
# You can extend the RDoc::Options instance with additional accessors for your
# generator.
#
# == Generator Instantiation
#
# After parsing, RDoc::RDoc will instantiate a generator by calling
# #initialize with an RDoc::Store instance and an RDoc::Options instance.
#
# The RDoc::Store instance holds documentation for parsed source code.  In
# RDoc 3 and earlier the RDoc::TopLevel class held this data.  When upgrading
# a generator from RDoc 3 and earlier you should only need to replace
# RDoc::TopLevel with the store instance.
#
# RDoc will then call #generate on the generator instance.  You can use the
# various methods on RDoc::Store and in the RDoc::CodeObject tree to create
# your desired output format.

module RDoc::Generator

  autoload :Markup,   "#{__dir__}/generator/markup"

  autoload :Darkfish,  "#{__dir__}/generator/darkfish"
  autoload :JsonIndex, "#{__dir__}/generator/json_index"
  autoload :RI,        "#{__dir__}/generator/ri"
  autoload :POT,       "#{__dir__}/generator/pot"

end
PK)J[���!�!,share/gems/gems/rdoc-6.10.0/lib/rdoc/task.rbnu�[���# frozen_string_literal: true
#--
# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#++

begin
  gem 'rdoc'
rescue Gem::LoadError
end unless defined?(RDoc)

begin
  gem 'rake'
rescue Gem::LoadError
end unless defined?(Rake)

require_relative '../rdoc'
require 'rake'
require 'rake/tasklib'

##
# RDoc::Task creates the following rake tasks to generate and clean up RDoc
# output:
#
# [rdoc]
#   Main task for this RDoc task.
#
# [clobber_rdoc]
#   Delete all the rdoc files.  This target is automatically added to the main
#   clobber target.
#
# [rerdoc]
#   Rebuild the rdoc files from scratch, even if they are not out of date.
#
# [rdoc:coverage]
#   Print RDoc coverage report for all rdoc files.
#
# Simple Example:
#
#   require 'rdoc/task'
#
#   RDoc::Task.new do |rdoc|
#     rdoc.main = "README.rdoc"
#     rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
#   end
#
# The +rdoc+ object passed to the block is an RDoc::Task object. See the
# attributes list for the RDoc::Task class for available customization options.
#
# == Specifying different task names
#
# You may wish to give the task a different name, such as if you are
# generating two sets of documentation.  For instance, if you want to have a
# development set of documentation including private methods:
#
#   require 'rdoc/task'
#
#   RDoc::Task.new :rdoc_dev do |rdoc|
#     rdoc.main = "README.rdoc"
#     rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
#     rdoc.options << "--all"
#   end
#
# The tasks would then be named :<em>rdoc_dev</em>,
# :clobber_<em>rdoc_dev</em>, and :re<em>rdoc_dev</em>.
#
# If you wish to have completely different task names, then pass a Hash as
# first argument. With the <tt>:rdoc</tt>, <tt>:clobber_rdoc</tt> and
# <tt>:rerdoc</tt> options, you can customize the task names to your liking.
#
# For example:
#
#   require 'rdoc/task'
#
#   RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean",
#                  :rerdoc => "rdoc:force")
#
# This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc:clean</tt>,
# <tt>:rdoc:force</tt>, and <tt>:rdoc:coverage</tt>.

class RDoc::Task < Rake::TaskLib

  ##
  # Name of the main, top level task.  (default is :rdoc)

  attr_accessor :name

  ##
  # The markup format; one of: +rdoc+ (the default), +markdown+, +rd+, +tomdoc+.
  # See {Markup Formats}[rdoc-ref:RDoc::Markup@Markup+Formats].
  attr_accessor :markup

  ##
  # Name of directory to receive the html output files. (default is "html")

  attr_accessor :rdoc_dir

  ##
  # Title of RDoc documentation. (defaults to rdoc's default)

  attr_accessor :title

  ##
  # Name of file to be used as the main, top level file of the RDoc. (default
  # is none)

  attr_accessor :main

  ##
  # Name of template to be used by rdoc. (defaults to rdoc's default)

  attr_accessor :template

  ##
  # Name of format generator (<tt>--format</tt>) used by rdoc. (defaults to
  # rdoc's default)

  attr_accessor :generator

  ##
  # List of files to be included in the rdoc generation. (default is [])

  attr_accessor :rdoc_files

  ##
  # Additional list of options to be passed rdoc.  (default is [])

  attr_accessor :options

  ##
  # Whether to run the rdoc process as an external shell (default is false)

  attr_accessor :external

  ##
  # Create an RDoc task with the given name. See the RDoc::Task class overview
  # for documentation.

  def initialize name = :rdoc # :yield: self
    defaults

    check_names name

    @name = name

    yield self if block_given?

    define
  end

  ##
  # Ensures that +names+ only includes names for the :rdoc, :clobber_rdoc and
  # :rerdoc.  If other names are given an ArgumentError is raised.

  def check_names names
    return unless Hash === names

    invalid_options =
      names.keys.map { |k| k.to_sym } - [:rdoc, :clobber_rdoc, :rerdoc]

    unless invalid_options.empty? then
      raise ArgumentError, "invalid options: #{invalid_options.join ', '}"
    end
  end

  ##
  # Task description for the clobber rdoc task or its renamed equivalent

  def clobber_task_description
    "Remove RDoc HTML files"
  end

  ##
  # Sets default task values

  def defaults
    @name = :rdoc
    @rdoc_files = Rake::FileList.new
    @rdoc_dir = 'html'
    @main = nil
    @title = nil
    @template = nil
    @generator = nil
    @options = []
  end

  ##
  # All source is inline now.  This method is deprecated

  def inline_source # :nodoc:
    warn "RDoc::Task#inline_source is deprecated"
    true
  end

  ##
  # All source is inline now.  This method is deprecated

  def inline_source=(value) # :nodoc:
    warn "RDoc::Task#inline_source is deprecated"
  end

  ##
  # Create the tasks defined by this task lib.

  def define
    desc rdoc_task_description
    task rdoc_task_name

    desc rerdoc_task_description
    task rerdoc_task_name => [clobber_task_name, rdoc_task_name]

    desc clobber_task_description
    task clobber_task_name do
      rm_r @rdoc_dir rescue nil
    end

    task :clobber => [clobber_task_name]

    directory @rdoc_dir

    rdoc_target_deps = [
      @rdoc_files,
      Rake.application.rakefile
    ].flatten.compact

    task rdoc_task_name => [rdoc_target]
    file rdoc_target => rdoc_target_deps do
      @before_running_rdoc.call if @before_running_rdoc
      args = option_list + @rdoc_files

      $stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
      RDoc::RDoc.new.document args
    end

    namespace rdoc_task_name do
      desc coverage_task_description
      task coverage_task_name do
        @before_running_rdoc.call if @before_running_rdoc
        opts = option_list << "-C"
        args = opts + @rdoc_files

        $stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
        RDoc::RDoc.new.document args
      end
    end

    self
  end

  ##
  # List of options that will be supplied to RDoc

  def option_list
    result = @options.dup
    result << "-o"       << @rdoc_dir
    result << "--main"   << main      if main
    result << "--markup" << markup    if markup
    result << "--title"  << title     if title
    result << "-T"       << template  if template
    result << '-f'       << generator if generator
    result
  end

  ##
  # The block passed to this method will be called just before running the
  # RDoc generator. It is allowed to modify RDoc::Task attributes inside the
  # block.

  def before_running_rdoc(&block)
    @before_running_rdoc = block
  end

  ##
  # Task description for the rdoc task or its renamed equivalent

  def rdoc_task_description
    'Build RDoc HTML files'
  end

  ##
  # Task description for the rerdoc task or its renamed description

  def rerdoc_task_description
    "Rebuild RDoc HTML files"
  end

  ##
  # Task description for the coverage task or its renamed description

  def coverage_task_description
    "Print RDoc coverage report"
  end

  private

  def rdoc_target
    "#{rdoc_dir}/created.rid"
  end

  def rdoc_task_name
    case name
    when Hash then (name[:rdoc] || "rdoc").to_s
    else           name.to_s
    end
  end

  def clobber_task_name
    case name
    when Hash then (name[:clobber_rdoc] || "clobber_rdoc").to_s
    else           "clobber_#{name}"
    end
  end

  def rerdoc_task_name
    case name
    when Hash then (name[:rerdoc] || "rerdoc").to_s
    else           "re#{name}"
    end
  end

  def coverage_task_name
    "coverage"
  end

end

# :stopdoc:
module Rake

  ##
  # For backwards compatibility

  RDocTask = RDoc::Task # :nodoc:

end
# :startdoc:
PK)J[��@share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/single_class.rbnu�[���# frozen_string_literal: true
##
# A singleton class

class RDoc::SingleClass < RDoc::ClassModule

  ##
  # Adds the superclass to the included modules.

  def ancestors
    superclass ? super + [superclass] : super
  end

  def aref_prefix # :nodoc:
    'sclass'
  end

  ##
  # The definition of this singleton class, <tt>class << MyClassName</tt>

  def definition
    "class << #{full_name}"
  end

  def pretty_print q # :nodoc:
    q.group 2, "[class << #{full_name}", "]" do
      next
    end
  end
end
PK)J[���uu=share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/top_level.rbnu�[���# frozen_string_literal: true
##
# A TopLevel context is a representation of the contents of a single file

class RDoc::TopLevel < RDoc::Context

  MARSHAL_VERSION = 0 # :nodoc:

  ##
  # This TopLevel's File::Stat struct

  attr_accessor :file_stat

  ##
  # Relative name of this file

  attr_accessor :relative_name

  ##
  # Absolute name of this file

  attr_accessor :absolute_name

  ##
  # All the classes or modules that were declared in
  # this file. These are assigned to either +#classes_hash+
  # or +#modules_hash+ once we know what they really are.

  attr_reader :classes_or_modules

  attr_accessor :diagram # :nodoc:

  ##
  # The parser class that processed this file

  attr_reader :parser

  ##
  # Creates a new TopLevel for the file at +absolute_name+.  If documentation
  # is being generated outside the source dir +relative_name+ is relative to
  # the source directory.

  def initialize absolute_name, relative_name = absolute_name
    super()
    @name = nil
    @absolute_name = absolute_name
    @relative_name = relative_name
    @file_stat     = File.stat(absolute_name) rescue nil # HACK for testing
    @diagram       = nil
    @parser        = nil

    @classes_or_modules = []
  end

  ##
  # Sets the parser for this toplevel context, also the store.

  def parser=(val)
    @parser = val
    @store.update_parser_of_file(absolute_name, val) if @store
    @parser
  end

  ##
  # An RDoc::TopLevel is equal to another with the same relative_name

  def == other
    self.class === other and @relative_name == other.relative_name
  end

  alias eql? ==

  ##
  # Adds +an_alias+ to +Object+ instead of +self+.

  def add_alias(an_alias)
    object_class.record_location self
    return an_alias unless @document_self
    object_class.add_alias an_alias
  end

  ##
  # Adds +constant+ to +Object+ instead of +self+.

  def add_constant constant
    object_class.record_location self
    return constant unless @document_self
    object_class.add_constant constant
  end

  ##
  # Adds +include+ to +Object+ instead of +self+.

  def add_include(include)
    object_class.record_location self
    return include unless @document_self
    object_class.add_include include
  end

  ##
  # Adds +method+ to +Object+ instead of +self+.

  def add_method(method)
    object_class.record_location self
    return method unless @document_self
    object_class.add_method method
  end

  ##
  # Adds class or module +mod+. Used in the building phase
  # by the Ruby parser.

  def add_to_classes_or_modules mod
    @classes_or_modules << mod
  end

  ##
  # Base name of this file

  def base_name
    File.basename @relative_name
  end

  alias name base_name

  ##
  # Only a TopLevel that contains text file) will be displayed.  See also
  # RDoc::CodeObject#display?

  def display?
    text? and super
  end

  ##
  # See RDoc::TopLevel::find_class_or_module
  #--
  # TODO Why do we search through all classes/modules found, not just the
  #       ones of this instance?

  def find_class_or_module name
    @store.find_class_or_module name
  end

  ##
  # Finds a class or module named +symbol+

  def find_local_symbol(symbol)
    find_class_or_module(symbol) || super
  end

  ##
  # Finds a module or class with +name+

  def find_module_named(name)
    find_class_or_module(name)
  end

  ##
  # Returns the relative name of this file

  def full_name
    @relative_name
  end

  ##
  # An RDoc::TopLevel has the same hash as another with the same
  # relative_name

  def hash
    @relative_name.hash
  end

  ##
  # URL for this with a +prefix+

  def http_url(prefix)
    path = [prefix, @relative_name.tr('.', '_')]

    File.join(*path.compact) + '.html'
  end

  def inspect # :nodoc:
    "#<%s:0x%x %p modules: %p classes: %p>" % [
      self.class, object_id,
      base_name,
      @modules.map { |n, m| m },
      @classes.map { |n, c| c }
    ]
  end

  ##
  # Time this file was last modified, if known

  def last_modified
    @file_stat ? file_stat.mtime : nil
  end

  ##
  # Dumps this TopLevel for use by ri.  See also #marshal_load

  def marshal_dump
    [
      MARSHAL_VERSION,
      @relative_name,
      @parser,
      parse(@comment),
    ]
  end

  ##
  # Loads this TopLevel from +array+.

  def marshal_load array # :nodoc:
    initialize array[1]

    @parser  = array[2]
    @comment = array[3]

    @file_stat          = nil
  end

  ##
  # Returns the NormalClass "Object", creating it if not found.
  #
  # Records +self+ as a location in "Object".

  def object_class
    @object_class ||= begin
      oc = @store.find_class_named('Object') || add_class(RDoc::NormalClass, 'Object')
      oc.record_location self
      oc
    end
  end

  ##
  # Base name of this file without the extension

  def page_name
    basename = File.basename @relative_name
    basename =~ /\.(rb|rdoc|txt|md)$/i

    $` || basename
  end

  ##
  # Path to this file for use with HTML generator output.

  def path
    http_url @store.rdoc.generator.file_dir
  end

  def pretty_print q # :nodoc:
    q.group 2, "[#{self.class}: ", "]" do
      q.text "base name: #{base_name.inspect}"
      q.breakable

      items = @modules.map { |n, m| m }
      items.concat @modules.map { |n, c| c }
      q.seplist items do |mod| q.pp mod end
    end
  end

  ##
  # Search record used by RDoc::Generator::JsonIndex

  def search_record
    return unless @parser < RDoc::Parser::Text

    [
      page_name,
      '',
      page_name,
      '',
      path,
      '',
      snippet(@comment),
    ]
  end

  ##
  # Is this TopLevel from a text file instead of a source code file?

  def text?
    @parser and @parser.include? RDoc::Parser::Text
  end

  def to_s # :nodoc:
    "file #{full_name}"
  end

end
PK)J[�Iyy;share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/context.rbnu�[���# frozen_string_literal: true
##
# A Context is something that can hold modules, classes, methods, attributes,
# aliases, requires, and includes. Classes, modules, and files are all
# Contexts.

class RDoc::Context < RDoc::CodeObject

  include Comparable

  ##
  # Types of methods

  TYPES = %w[class instance]

  ##
  # If a context has these titles it will be sorted in this order.

  TOMDOC_TITLES = [nil, 'Public', 'Internal', 'Deprecated'] # :nodoc:
  TOMDOC_TITLES_SORT = TOMDOC_TITLES.sort_by { |title| title.to_s } # :nodoc:

  ##
  # Class/module aliases

  attr_reader :aliases

  ##
  # All attr* methods

  attr_reader :attributes

  ##
  # Block params to be used in the next MethodAttr parsed under this context

  attr_accessor :block_params

  ##
  # Constants defined

  attr_reader :constants

  ##
  # Sets the current documentation section of documentation

  attr_writer :current_section

  ##
  # Files this context is found in

  attr_reader :in_files

  ##
  # Modules this context includes

  attr_reader :includes

  ##
  # Modules this context is extended with

  attr_reader :extends

  ##
  # Methods defined in this context

  attr_reader :method_list

  ##
  # Name of this class excluding namespace.  See also full_name

  attr_reader :name

  ##
  # Files this context requires

  attr_reader :requires

  ##
  # Use this section for the next method, attribute or constant added.

  attr_accessor :temporary_section

  ##
  # Hash <tt>old_name => [aliases]</tt>, for aliases
  # that haven't (yet) been resolved to a method/attribute.
  # (Not to be confused with the aliases of the context.)

  attr_accessor :unmatched_alias_lists

  ##
  # Aliases that could not be resolved.

  attr_reader :external_aliases

  ##
  # Current visibility of this context

  attr_accessor :visibility

  ##
  # Current visibility of this line

  attr_writer :current_line_visibility

  ##
  # Hash of registered methods. Attributes are also registered here,
  # twice if they are RW.

  attr_reader :methods_hash

  ##
  # Params to be used in the next MethodAttr parsed under this context

  attr_accessor :params

  ##
  # Hash of registered constants.

  attr_reader :constants_hash

  ##
  # Creates an unnamed empty context with public current visibility

  def initialize
    super

    @in_files = []

    @name    ||= "unknown"
    @parent  = nil
    @visibility = :public

    @current_section = Section.new self, nil, nil
    @sections = { nil => @current_section }
    @temporary_section = nil

    @classes = {}
    @modules = {}

    initialize_methods_etc
  end

  ##
  # Sets the defaults for methods and so-forth

  def initialize_methods_etc
    @method_list = []
    @attributes  = []
    @aliases     = []
    @requires    = []
    @includes    = []
    @extends     = []
    @constants   = []
    @external_aliases = []
    @current_line_visibility = nil

    # This Hash maps a method name to a list of unmatched aliases (aliases of
    # a method not yet encountered).
    @unmatched_alias_lists = {}

    @methods_hash   = {}
    @constants_hash = {}

    @params = nil

    @store ||= nil
  end

  ##
  # Contexts are sorted by full_name

  def <=>(other)
    return nil unless RDoc::CodeObject === other

    full_name <=> other.full_name
  end

  ##
  # Adds an item of type +klass+ with the given +name+ and +comment+ to the
  # context.
  #
  # Currently only RDoc::Extend and RDoc::Include are supported.

  def add klass, name, comment
    if RDoc::Extend == klass then
      ext = RDoc::Extend.new name, comment
      add_extend ext
    elsif RDoc::Include == klass then
      incl = RDoc::Include.new name, comment
      add_include incl
    else
      raise NotImplementedError, "adding a #{klass} is not implemented"
    end
  end

  ##
  # Adds +an_alias+ that is automatically resolved

  def add_alias an_alias
    return an_alias unless @document_self

    method_attr = find_method(an_alias.old_name, an_alias.singleton) ||
                  find_attribute(an_alias.old_name, an_alias.singleton)

    if method_attr then
      method_attr.add_alias an_alias, self
    else
      add_to @external_aliases, an_alias
      unmatched_alias_list =
        @unmatched_alias_lists[an_alias.pretty_old_name] ||= []
      unmatched_alias_list.push an_alias
    end

    an_alias
  end

  ##
  # Adds +attribute+ if not already there. If it is (as method(s) or attribute),
  # updates the comment if it was empty.
  #
  # The attribute is registered only if it defines a new method.
  # For instance, <tt>attr_reader :foo</tt> will not be registered
  # if method +foo+ exists, but <tt>attr_accessor :foo</tt> will be registered
  # if method +foo+ exists, but <tt>foo=</tt> does not.

  def add_attribute attribute
    return attribute unless @document_self

    # mainly to check for redefinition of an attribute as a method
    # TODO find a policy for 'attr_reader :foo' + 'def foo=()'
    register = false

    key = nil

    if attribute.rw.index 'R' then
      key = attribute.pretty_name
      known = @methods_hash[key]

      if known then
        known.comment = attribute.comment if known.comment.empty?
      elsif registered = @methods_hash[attribute.pretty_name + '='] and
            RDoc::Attr === registered then
        registered.rw = 'RW'
      else
        @methods_hash[key] = attribute
        register = true
      end
    end

    if attribute.rw.index 'W' then
      key = attribute.pretty_name + '='
      known = @methods_hash[key]

      if known then
        known.comment = attribute.comment if known.comment.empty?
      elsif registered = @methods_hash[attribute.pretty_name] and
            RDoc::Attr === registered then
        registered.rw = 'RW'
      else
        @methods_hash[key] = attribute
        register = true
      end
    end

    if register then
      attribute.visibility = @visibility
      add_to @attributes, attribute
      resolve_aliases attribute
    end

    attribute
  end

  ##
  # Adds a class named +given_name+ with +superclass+.
  #
  # Both +given_name+ and +superclass+ may contain '::', and are
  # interpreted relative to the +self+ context. This allows handling correctly
  # examples like these:
  #   class RDoc::Gauntlet < Gauntlet
  #   module Mod
  #     class Object   # implies < ::Object
  #     class SubObject < Object  # this is _not_ ::Object
  #
  # Given <tt>class Container::Item</tt> RDoc assumes +Container+ is a module
  # unless it later sees <tt>class Container</tt>.  +add_class+ automatically
  # upgrades +given_name+ to a class in this case.

  def add_class class_type, given_name, superclass = '::Object'
    # superclass +nil+ is passed by the C parser in the following cases:
    # - registering Object in 1.8 (correct)
    # - registering BasicObject in 1.9 (correct)
    # - registering RubyVM in 1.9 in iseq.c (incorrect: < Object in vm.c)
    #
    # If we later find a superclass for a registered class with a nil
    # superclass, we must honor it.

    # find the name & enclosing context
    if given_name =~ /^:+(\w+)$/ then
      full_name = $1
      enclosing = top_level
      name = full_name.split(/:+/).last
    else
      full_name = child_name given_name

      if full_name =~ /^(.+)::(\w+)$/ then
        name = $2
        ename = $1
        enclosing = @store.classes_hash[ename] || @store.modules_hash[ename]
        # HACK: crashes in actionpack/lib/action_view/helpers/form_helper.rb (metaprogramming)
        unless enclosing then
          # try the given name at top level (will work for the above example)
          enclosing = @store.classes_hash[given_name] ||
                      @store.modules_hash[given_name]
          return enclosing if enclosing
          # not found: create the parent(s)
          names = ename.split('::')
          enclosing = self
          names.each do |n|
            enclosing = enclosing.classes_hash[n] ||
                        enclosing.modules_hash[n] ||
                        enclosing.add_module(RDoc::NormalModule, n)
          end
        end
      else
        name = full_name
        enclosing = self
      end
    end

    # fix up superclass
    if full_name == 'BasicObject' then
      superclass = nil
    elsif full_name == 'Object' then
      superclass = '::BasicObject'
    end

    # find the superclass full name
    if superclass then
      if superclass =~ /^:+/ then
        superclass = $' #'
      else
        if superclass =~ /^(\w+):+(.+)$/ then
          suffix = $2
          mod = find_module_named($1)
          superclass = mod.full_name + '::' + suffix if mod
        else
          mod = find_module_named(superclass)
          superclass = mod.full_name if mod
        end
      end

      # did we believe it was a module?
      mod = @store.modules_hash.delete superclass

      upgrade_to_class mod, RDoc::NormalClass, mod.parent if mod

      # e.g., Object < Object
      superclass = nil if superclass == full_name
    end

    klass = @store.classes_hash[full_name]

    if klass then
      # if TopLevel, it may not be registered in the classes:
      enclosing.classes_hash[name] = klass

      # update the superclass if needed
      if superclass then
        existing = klass.superclass
        existing = existing.full_name unless existing.is_a?(String) if existing
        if existing.nil? ||
           (existing == 'Object' && superclass != 'Object') then
          klass.superclass = superclass
        end
      end
    else
      # this is a new class
      mod = @store.modules_hash.delete full_name

      if mod then
        klass = upgrade_to_class mod, RDoc::NormalClass, enclosing

        klass.superclass = superclass unless superclass.nil?
      else
        klass = class_type.new name, superclass

        enclosing.add_class_or_module(klass, enclosing.classes_hash,
                                      @store.classes_hash)
      end
    end

    klass.parent = self

    klass
  end

  ##
  # Adds the class or module +mod+ to the modules or
  # classes Hash +self_hash+, and to +all_hash+ (either
  # <tt>TopLevel::modules_hash</tt> or <tt>TopLevel::classes_hash</tt>),
  # unless #done_documenting is +true+. Sets the #parent of +mod+
  # to +self+, and its #section to #current_section. Returns +mod+.

  def add_class_or_module mod, self_hash, all_hash
    mod.section = current_section # TODO declaring context? something is
                                  # wrong here...
    mod.parent = self
    mod.full_name = nil
    mod.store = @store

    unless @done_documenting then
      self_hash[mod.name] = mod
      # this must be done AFTER adding mod to its parent, so that the full
      # name is correct:
      all_hash[mod.full_name] = mod
      if @store.unmatched_constant_alias[mod.full_name] then
        to, file = @store.unmatched_constant_alias[mod.full_name]
        add_module_alias mod, mod.name, to, file
      end
    end

    mod
  end

  ##
  # Adds +constant+ if not already there. If it is, updates the comment,
  # value and/or is_alias_for of the known constant if they were empty/nil.

  def add_constant constant
    return constant unless @document_self

    # HACK: avoid duplicate 'PI' & 'E' in math.c (1.8.7 source code)
    # (this is a #ifdef: should be handled by the C parser)
    known = @constants_hash[constant.name]

    if known then
      known.comment = constant.comment if known.comment.empty?

      known.value = constant.value if
        known.value.nil? or known.value.strip.empty?

      known.is_alias_for ||= constant.is_alias_for
    else
      @constants_hash[constant.name] = constant
      add_to @constants, constant
    end

    constant
  end

  ##
  # Adds included module +include+ which should be an RDoc::Include

  def add_include include
    add_to @includes, include

    include
  end

  ##
  # Adds extension module +ext+ which should be an RDoc::Extend

  def add_extend ext
    add_to @extends, ext

    ext
  end

  ##
  # Adds +method+ if not already there. If it is (as method or attribute),
  # updates the comment if it was empty.

  def add_method method
    return method unless @document_self

    # HACK: avoid duplicate 'new' in io.c & struct.c (1.8.7 source code)
    key = method.pretty_name
    known = @methods_hash[key]

    if known then
      if @store then # otherwise we are loading
        known.comment = method.comment if known.comment.empty?
        previously = ", previously in #{known.file}" unless
          method.file == known.file
        @store.rdoc.options.warn \
          "Duplicate method #{known.full_name} in #{method.file}#{previously}"
      end
    else
      @methods_hash[key] = method
      if @current_line_visibility
        method.visibility, @current_line_visibility = @current_line_visibility, nil
      else
        method.visibility = @visibility
      end
      add_to @method_list, method
      resolve_aliases method
    end

    method
  end

  ##
  # Adds a module named +name+.  If RDoc already knows +name+ is a class then
  # that class is returned instead.  See also #add_class.

  def add_module(class_type, name)
    mod = @classes[name] || @modules[name]
    return mod if mod

    full_name = child_name name
    mod = @store.modules_hash[full_name] || class_type.new(name)

    add_class_or_module mod, @modules, @store.modules_hash
  end

  ##
  # Adds a module by +RDoc::NormalModule+ instance. See also #add_module.

  def add_module_by_normal_module(mod)
    add_class_or_module mod, @modules, @store.modules_hash
  end

  ##
  # Adds an alias from +from+ (a class or module) to +name+ which was defined
  # in +file+.

  def add_module_alias from, from_name, to, file
    return from if @done_documenting

    to_full_name = child_name to.name

    # if we already know this name, don't register an alias:
    # see the metaprogramming in lib/active_support/basic_object.rb,
    # where we already know BasicObject is a class when we find
    # BasicObject = BlankSlate
    return from if @store.find_class_or_module to_full_name

    unless from
      @store.unmatched_constant_alias[child_name(from_name)] = [to, file]
      return to
    end

    new_to = from.dup
    new_to.name = to.name
    new_to.full_name = nil

    if new_to.module? then
      @store.modules_hash[to_full_name] = new_to
      @modules[to.name] = new_to
    else
      @store.classes_hash[to_full_name] = new_to
      @classes[to.name] = new_to
    end

    # Registers a constant for this alias.  The constant value and comment
    # will be updated later, when the Ruby parser adds the constant
    const = RDoc::Constant.new to.name, nil, new_to.comment
    const.record_location file
    const.is_alias_for = from
    add_constant const

    new_to
  end

  ##
  # Adds +require+ to this context's top level

  def add_require(require)
    return require unless @document_self

    if RDoc::TopLevel === self then
      add_to @requires, require
    else
      parent.add_require require
    end
  end

  ##
  # Returns a section with +title+, creating it if it doesn't already exist.
  # +comment+ will be appended to the section's comment.
  #
  # A section with a +title+ of +nil+ will return the default section.
  #
  # See also RDoc::Context::Section

  def add_section title, comment = nil
    if section = @sections[title] then
      section.add_comment comment if comment
    else
      section = Section.new self, title, comment
      @sections[title] = section
    end

    section
  end

  ##
  # Adds +thing+ to the collection +array+

  def add_to array, thing
    array << thing if @document_self

    thing.parent  = self
    thing.store   = @store if @store
    thing.section = current_section
  end

  ##
  # Is there any content?
  #
  # This means any of: comment, aliases, methods, attributes, external
  # aliases, require, constant.
  #
  # Includes and extends are also checked unless <tt>includes == false</tt>.

  def any_content(includes = true)
    @any_content ||= !(
      @comment.empty? &&
      @method_list.empty? &&
      @attributes.empty? &&
      @aliases.empty? &&
      @external_aliases.empty? &&
      @requires.empty? &&
      @constants.empty?
    )
    @any_content || (includes && !(@includes + @extends).empty? )
  end

  ##
  # Creates the full name for a child with +name+

  def child_name name
    if name =~ /^:+/
      $'  #'
    elsif RDoc::TopLevel === self then
      name
    else
      "#{self.full_name}::#{name}"
    end
  end

  ##
  # Class attributes

  def class_attributes
    @class_attributes ||= attributes.select { |a| a.singleton }
  end

  ##
  # Class methods

  def class_method_list
    @class_method_list ||= method_list.select { |a| a.singleton }
  end

  ##
  # Array of classes in this context

  def classes
    @classes.values
  end

  ##
  # All classes and modules in this namespace

  def classes_and_modules
    classes + modules
  end

  ##
  # Hash of classes keyed by class name

  def classes_hash
    @classes
  end

  ##
  # The current documentation section that new items will be added to.  If
  # temporary_section is available it will be used.

  def current_section
    if section = @temporary_section then
      @temporary_section = nil
    else
      section = @current_section
    end

    section
  end

  ##
  # Is part of this thing was defined in +file+?

  def defined_in?(file)
    @in_files.include?(file)
  end

  def display(method_attr) # :nodoc:
    if method_attr.is_a? RDoc::Attr
      "#{method_attr.definition} #{method_attr.pretty_name}"
    else
      "method #{method_attr.pretty_name}"
    end
  end

  ##
  # Iterator for ancestors for duck-typing.  Does nothing.  See
  # RDoc::ClassModule#each_ancestor.
  #
  # This method exists to make it easy to work with Context subclasses that
  # aren't part of RDoc.

  def each_ancestor(&_) # :nodoc:
  end

  ##
  # Iterator for attributes

  def each_attribute # :yields: attribute
    @attributes.each { |a| yield a }
  end

  ##
  # Iterator for classes and modules

  def each_classmodule(&block) # :yields: module
    classes_and_modules.sort.each(&block)
  end

  ##
  # Iterator for constants

  def each_constant # :yields: constant
    @constants.each {|c| yield c}
  end

  ##
  # Iterator for included modules

  def each_include # :yields: include
    @includes.each do |i| yield i end
  end

  ##
  # Iterator for extension modules

  def each_extend # :yields: extend
    @extends.each do |e| yield e end
  end

  ##
  # Iterator for methods

  def each_method # :yields: method
    return enum_for __method__ unless block_given?

    @method_list.sort.each { |m| yield m }
  end

  ##
  # Iterator for each section's contents sorted by title.  The +section+, the
  # section's +constants+ and the sections +attributes+ are yielded.  The
  # +constants+ and +attributes+ collections are sorted.
  #
  # To retrieve methods in a section use #methods_by_type with the optional
  # +section+ parameter.
  #
  # NOTE: Do not edit collections yielded by this method

  def each_section # :yields: section, constants, attributes
    return enum_for __method__ unless block_given?

    constants  = @constants.group_by  do |constant|  constant.section end
    attributes = @attributes.group_by do |attribute| attribute.section end

    constants.default  = []
    attributes.default = []

    sort_sections.each do |section|
      yield section, constants[section].select(&:display?).sort, attributes[section].select(&:display?).sort
    end
  end

  ##
  # Finds an attribute +name+ with singleton value +singleton+.

  def find_attribute(name, singleton)
    name = $1 if name =~ /^(.*)=$/
    @attributes.find { |a| a.name == name && a.singleton == singleton }
  end

  ##
  # Finds an attribute with +name+ in this context

  def find_attribute_named(name)
    case name
    when /\A#/ then
      find_attribute name[1..-1], false
    when /\A::/ then
      find_attribute name[2..-1], true
    else
      @attributes.find { |a| a.name == name }
    end
  end

  ##
  # Finds a class method with +name+ in this context

  def find_class_method_named(name)
    @method_list.find { |meth| meth.singleton && meth.name == name }
  end

  ##
  # Finds a constant with +name+ in this context

  def find_constant_named(name)
    @constants.find do |m|
      m.name == name || m.full_name == name
    end
  end

  ##
  # Find a module at a higher scope

  def find_enclosing_module_named(name)
    parent && parent.find_module_named(name)
  end

  ##
  # Finds an external alias +name+ with singleton value +singleton+.

  def find_external_alias(name, singleton)
    @external_aliases.find { |m| m.name == name && m.singleton == singleton }
  end

  ##
  # Finds an external alias with +name+ in this context

  def find_external_alias_named(name)
    case name
    when /\A#/ then
      find_external_alias name[1..-1], false
    when /\A::/ then
      find_external_alias name[2..-1], true
    else
      @external_aliases.find { |a| a.name == name }
    end
  end

  ##
  # Finds a file with +name+ in this context

  def find_file_named name
    @store.find_file_named name
  end

  ##
  # Finds an instance method with +name+ in this context

  def find_instance_method_named(name)
    @method_list.find { |meth| !meth.singleton && meth.name == name }
  end

  ##
  # Finds a method, constant, attribute, external alias, module or file
  # named +symbol+ in this context.

  def find_local_symbol(symbol)
    find_method_named(symbol) or
    find_constant_named(symbol) or
    find_attribute_named(symbol) or
    find_external_alias_named(symbol) or
    find_module_named(symbol) or
    find_file_named(symbol)
  end

  ##
  # Finds a method named +name+ with singleton value +singleton+.

  def find_method(name, singleton)
    @method_list.find { |m|
      if m.singleton
        m.name == name && m.singleton == singleton
      else
        m.name == name && !m.singleton && !singleton
      end
    }
  end

  ##
  # Finds a instance or module method with +name+ in this context

  def find_method_named(name)
    case name
    when /\A#/ then
      find_method name[1..-1], false
    when /\A::/ then
      find_method name[2..-1], true
    else
      @method_list.find { |meth| meth.name == name }
    end
  end

  ##
  # Find a module with +name+ using ruby's scoping rules

  def find_module_named(name)
    res = @modules[name] || @classes[name]
    return res if res
    return self if self.name == name
    find_enclosing_module_named name
  end

  ##
  # Look up +symbol+, first as a module, then as a local symbol.

  def find_symbol(symbol)
    find_symbol_module(symbol) || find_local_symbol(symbol)
  end

  ##
  # Look up a module named +symbol+.

  def find_symbol_module(symbol)
    result = nil

    # look for a class or module 'symbol'
    case symbol
    when /^::/ then
      result = @store.find_class_or_module symbol
    when /^(\w+):+(.+)$/
      suffix = $2
      top = $1
      searched = self
      while searched do
        mod = searched.find_module_named(top)
        break unless mod
        result = @store.find_class_or_module "#{mod.full_name}::#{suffix}"
        break if result || searched.is_a?(RDoc::TopLevel)
        searched = searched.parent
      end
    else
      searched = self
      while searched do
        result = searched.find_module_named(symbol)
        break if result || searched.is_a?(RDoc::TopLevel)
        searched = searched.parent
      end
    end

    result
  end

  ##
  # The full name for this context.  This method is overridden by subclasses.

  def full_name
    '(unknown)'
  end

  ##
  # Does this context and its methods and constants all have documentation?
  #
  # (Yes, fully documented doesn't mean everything.)

  def fully_documented?
    documented? and
      attributes.all? { |a| a.documented? } and
      method_list.all? { |m| m.documented? } and
      constants.all? { |c| c.documented? }
  end

  ##
  # URL for this with a +prefix+

  def http_url(prefix)
    path = name_for_path
    path = path.gsub(/<<\s*(\w*)/, 'from-\1') if path =~ /<</
    path = [prefix] + path.split('::')

    File.join(*path.compact) + '.html'
  end

  ##
  # Instance attributes

  def instance_attributes
    @instance_attributes ||= attributes.reject { |a| a.singleton }
  end

  ##
  # Instance methods

  def instance_methods
    @instance_methods ||= method_list.reject { |a| a.singleton }
  end

  ##
  # Instance methods
  #--
  # TODO remove this later

  def instance_method_list
    warn '#instance_method_list is obsoleted, please use #instance_methods'
    @instance_methods ||= method_list.reject { |a| a.singleton }
  end

  ##
  # Breaks method_list into a nested hash by type (<tt>'class'</tt> or
  # <tt>'instance'</tt>) and visibility (+:public+, +:protected+, +:private+).
  #
  # If +section+ is provided only methods in that RDoc::Context::Section will
  # be returned.

  def methods_by_type section = nil
    methods = {}

    TYPES.each do |type|
      visibilities = {}
      RDoc::VISIBILITIES.each do |vis|
        visibilities[vis] = []
      end

      methods[type] = visibilities
    end

    each_method do |method|
      next if section and not method.section == section
      methods[method.type][method.visibility] << method
    end

    methods
  end

  ##
  # Yields AnyMethod and Attr entries matching the list of names in +methods+.

  def methods_matching(methods, singleton = false, &block)
    (@method_list + @attributes).each do |m|
      yield m if methods.include?(m.name) and m.singleton == singleton
    end

    each_ancestor do |parent|
      parent.methods_matching(methods, singleton, &block)
    end
  end

  ##
  # Array of modules in this context

  def modules
    @modules.values
  end

  ##
  # Hash of modules keyed by module name

  def modules_hash
    @modules
  end

  ##
  # Name to use to generate the url.
  # <tt>#full_name</tt> by default.

  def name_for_path
    full_name
  end

  ##
  # Changes the visibility for new methods to +visibility+

  def ongoing_visibility=(visibility)
    @visibility = visibility
  end

  ##
  # Record +top_level+ as a file +self+ is in.

  def record_location(top_level)
    @in_files << top_level unless @in_files.include?(top_level)
  end

  ##
  # Should we remove this context from the documentation?
  #
  # The answer is yes if:
  # * #received_nodoc is +true+
  # * #any_content is +false+ (not counting includes)
  # * All #includes are modules (not a string), and their module has
  #   <tt>#remove_from_documentation? == true</tt>
  # * All classes and modules have <tt>#remove_from_documentation? == true</tt>

  def remove_from_documentation?
    @remove_from_documentation ||=
      @received_nodoc &&
      !any_content(false) &&
      @includes.all? { |i| !i.module.is_a?(String) && i.module.remove_from_documentation? } &&
      classes_and_modules.all? { |cm| cm.remove_from_documentation? }
  end

  ##
  # Removes methods and attributes with a visibility less than +min_visibility+.
  #--
  # TODO mark the visibility of attributes in the template (if not public?)

  def remove_invisible min_visibility
    return if [:private, :nodoc].include? min_visibility
    remove_invisible_in @method_list, min_visibility
    remove_invisible_in @attributes, min_visibility
    remove_invisible_in @constants, min_visibility
  end

  ##
  # Only called when min_visibility == :public or :private

  def remove_invisible_in array, min_visibility # :nodoc:
    if min_visibility == :public then
      array.reject! { |e|
        e.visibility != :public and not e.force_documentation
      }
    else
      array.reject! { |e|
        e.visibility == :private and not e.force_documentation
      }
    end
  end

  ##
  # Tries to resolve unmatched aliases when a method or attribute has just
  # been added.

  def resolve_aliases added
    # resolve any pending unmatched aliases
    key = added.pretty_name
    unmatched_alias_list = @unmatched_alias_lists[key]
    return unless unmatched_alias_list
    unmatched_alias_list.each do |unmatched_alias|
      added.add_alias unmatched_alias, self
      @external_aliases.delete unmatched_alias
    end
    @unmatched_alias_lists.delete key
  end

  ##
  # Returns RDoc::Context::Section objects referenced in this context for use
  # in a table of contents.

  def section_contents
    used_sections = {}

    each_method do |method|
      next unless method.display?

      used_sections[method.section] = true
    end

    # order found sections
    sections = sort_sections.select do |section|
      used_sections[section]
    end

    # only the default section is used
    return [] if
      sections.length == 1 and not sections.first.title

    sections
  end

  ##
  # Sections in this context

  def sections
    @sections.values
  end

  def sections_hash # :nodoc:
    @sections
  end

  ##
  # Sets the current section to a section with +title+.  See also #add_section

  def set_current_section title, comment
    @current_section = add_section title, comment
  end

  ##
  # Given an array +methods+ of method names, set the visibility of each to
  # +visibility+

  def set_visibility_for(methods, visibility, singleton = false)
    methods_matching methods, singleton do |m|
      m.visibility = visibility
    end
  end

  ##
  # Given an array +names+ of constants, set the visibility of each constant to
  # +visibility+

  def set_constant_visibility_for(names, visibility)
    names.each do |name|
      constant = @constants_hash[name] or next
      constant.visibility = visibility
    end
  end

  ##
  # Sorts sections alphabetically (default) or in TomDoc fashion (none,
  # Public, Internal, Deprecated)

  def sort_sections
    titles = @sections.map { |title, _| title }

    if titles.length > 1 and
       TOMDOC_TITLES_SORT ==
         (titles | TOMDOC_TITLES).sort_by { |title| title.to_s } then
      @sections.values_at(*TOMDOC_TITLES).compact
    else
      @sections.sort_by { |title, _|
        title.to_s
      }.map { |_, section|
        section
      }
    end
  end

  def to_s # :nodoc:
    "#{self.class.name} #{self.full_name}"
  end

  ##
  # Return the TopLevel that owns us
  #--
  # FIXME we can be 'owned' by several TopLevel (see #record_location &
  # #in_files)

  def top_level
    return @top_level if defined? @top_level
    @top_level = self
    @top_level = @top_level.parent until RDoc::TopLevel === @top_level
    @top_level
  end

  ##
  # Upgrades NormalModule +mod+ in +enclosing+ to a +class_type+

  def upgrade_to_class mod, class_type, enclosing
    enclosing.modules_hash.delete mod.name

    klass = RDoc::ClassModule.from_module class_type, mod
    klass.store = @store

    # if it was there, then we keep it even if done_documenting
    @store.classes_hash[mod.full_name] = klass
    enclosing.classes_hash[mod.name]   = klass

    klass
  end

  autoload :Section, "#{__dir__}/context/section"

end
PK)J[A�9share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/mixin.rbnu�[���# frozen_string_literal: true
##
# A Mixin adds features from a module into another context.  RDoc::Include and
# RDoc::Extend are both mixins.

class RDoc::Mixin < RDoc::CodeObject

  ##
  # Name of included module

  attr_accessor :name

  ##
  # Creates a new Mixin for +name+ with +comment+

  def initialize(name, comment)
    super()
    @name = name
    self.comment = comment
    @module = nil # cache for module if found
  end

  ##
  # Mixins are sorted by name

  def <=> other
    return unless self.class === other

    name <=> other.name
  end

  def == other # :nodoc:
    self.class === other and @name == other.name
  end

  alias eql? == # :nodoc:

  ##
  # Full name based on #module

  def full_name
    m = self.module
    RDoc::ClassModule === m ? m.full_name : @name
  end

  def hash # :nodoc:
    [@name, self.module].hash
  end

  def inspect # :nodoc:
    "#<%s:0x%x %s.%s %s>" % [
      self.class,
      object_id,
      parent_name, self.class.name.downcase, @name,
    ]
  end

  ##
  # Attempts to locate the included module object.  Returns the name if not
  # known.
  #
  # The scoping rules of Ruby to resolve the name of an included module are:
  # - first look into the children of the current context;
  # - if not found, look into the children of included modules,
  #   in reverse inclusion order;
  # - if still not found, go up the hierarchy of names.
  #
  # This method has <code>O(n!)</code> behavior when the module calling
  # include is referencing nonexistent modules.  Avoid calling #module until
  # after all the files are parsed.  This behavior is due to ruby's constant
  # lookup behavior.
  #
  # As of the beginning of October, 2011, no gem includes nonexistent modules.

  def module
    return @module if @module

    # search the current context
    return @name unless parent
    full_name = parent.child_name(@name)
    @module = @store.modules_hash[full_name]
    return @module if @module
    return @name if @name =~ /^::/

    # search the includes before this one, in reverse order
    searched = parent.includes.take_while { |i| i != self }.reverse
    searched.each do |i|
      inc = i.module
      next if String === inc
      full_name = inc.child_name(@name)
      @module = @store.modules_hash[full_name]
      return @module if @module
    end

    # go up the hierarchy of names
    up = parent.parent
    while up
      full_name = up.child_name(@name)
      @module = @store.modules_hash[full_name]
      return @module if @module
      up = up.parent
    end

    @name
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  def to_s # :nodoc:
    "#{self.class.name.downcase} #@name in: #{parent}"
  end

end
PK)J[ˡFi8share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/attr.rbnu�[���# frozen_string_literal: true
##
# An attribute created by \#attr, \#attr_reader, \#attr_writer or
# \#attr_accessor

class RDoc::Attr < RDoc::MethodAttr

  ##
  # 3::
  #   RDoc 4
  #    Added parent name and class
  #    Added section title

  MARSHAL_VERSION = 3 # :nodoc:

  ##
  # Is the attribute readable ('R'), writable ('W') or both ('RW')?

  attr_accessor :rw

  ##
  # Creates a new Attr with body +text+, +name+, read/write status +rw+ and
  # +comment+.  +singleton+ marks this as a class attribute.

  def initialize(text, name, rw, comment, singleton = false)
    super text, name

    @rw = rw
    @singleton = singleton
    self.comment = comment
  end

  ##
  # Attributes are equal when their names, singleton and rw are identical

  def == other
    self.class == other.class and
      self.name == other.name and
      self.rw == other.rw and
      self.singleton == other.singleton
  end

  ##
  # Add +an_alias+ as an attribute in +context+.

  def add_alias(an_alias, context)
    new_attr = self.class.new(self.text, an_alias.new_name, self.rw,
                              self.comment, self.singleton)

    new_attr.record_location an_alias.file
    new_attr.visibility = self.visibility
    new_attr.is_alias_for = self
    @aliases << new_attr
    context.add_attribute new_attr
    new_attr
  end

  ##
  # The #aref prefix for attributes

  def aref_prefix
    'attribute'
  end

  ##
  # Attributes never call super.  See RDoc::AnyMethod#calls_super
  #
  # An RDoc::Attr can show up in the method list in some situations (see
  # Gem::ConfigFile)

  def calls_super # :nodoc:
    false
  end

  ##
  # Returns attr_reader, attr_writer or attr_accessor as appropriate.

  def definition
    case @rw
    when 'RW' then 'attr_accessor'
    when 'R'  then 'attr_reader'
    when 'W'  then 'attr_writer'
    end
  end

  def inspect # :nodoc:
    alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil
    visibility = self.visibility
    visibility = "forced #{visibility}" if force_documentation
    "#<%s:0x%x %s %s (%s)%s>" % [
      self.class, object_id,
      full_name,
      rw,
      visibility,
      alias_for,
    ]
  end

  ##
  # Dumps this Attr for use by ri.  See also #marshal_load

  def marshal_dump
    [ MARSHAL_VERSION,
      @name,
      full_name,
      @rw,
      @visibility,
      parse(@comment),
      singleton,
      @file.relative_name,
      @parent.full_name,
      @parent.class,
      @section.title
    ]
  end

  ##
  # Loads this Attr from +array+.  For a loaded Attr the following
  # methods will return cached values:
  #
  # * #full_name
  # * #parent_name

  def marshal_load array
    initialize_visibility

    @aliases      = []
    @parent       = nil
    @parent_name  = nil
    @parent_class = nil
    @section      = nil
    @file         = nil

    version        = array[0]
    @name          = array[1]
    @full_name     = array[2]
    @rw            = array[3]
    @visibility    = array[4]
    @comment       = array[5]
    @singleton     = array[6] || false # MARSHAL_VERSION == 0
    #                      7 handled below
    @parent_name   = array[8]
    @parent_class  = array[9]
    @section_title = array[10]

    @file = RDoc::TopLevel.new array[7] if version > 1

    @parent_name ||= @full_name.split('#', 2).first
  end

  def pretty_print q # :nodoc:
    q.group 2, "[#{self.class.name} #{full_name} #{rw} #{visibility}", "]" do
      unless comment.empty? then
        q.breakable
        q.text "comment:"
        q.breakable
        q.pp @comment
      end
    end
  end

  def to_s # :nodoc:
    "#{definition} #{name} in: #{parent}"
  end

  ##
  # Attributes do not have token streams.
  #
  # An RDoc::Attr can show up in the method list in some situations (see
  # Gem::ConfigFile)

  def token_stream # :nodoc:
  end

end
PK)J[���?share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/meta_method.rbnu�[���# frozen_string_literal: true
##
# MetaMethod represents a meta-programmed method

class RDoc::MetaMethod < RDoc::AnyMethod
end
PK)J[U­2"2">share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/any_method.rbnu�[���# frozen_string_literal: true
##
# AnyMethod is the base class for objects representing methods

class RDoc::AnyMethod < RDoc::MethodAttr

  ##
  # 2::
  #   RDoc 4
  #   Added calls_super
  #   Added parent name and class
  #   Added section title
  # 3::
  #   RDoc 4.1
  #   Added is_alias_for

  MARSHAL_VERSION = 3 # :nodoc:

  ##
  # Don't rename \#initialize to \::new

  attr_accessor :dont_rename_initialize

  ##
  # The C function that implements this method (if it was defined in a C file)

  attr_accessor :c_function

  # The section title of the method (if defined in a C file via +:category:+)
  attr_accessor :section_title

  # Parameters for this method

  attr_accessor :params

  ##
  # If true this method uses +super+ to call a superclass version

  attr_accessor :calls_super

  include RDoc::TokenStream

  ##
  # Creates a new AnyMethod with a token stream +text+ and +name+

  def initialize text, name
    super

    @c_function = nil
    @dont_rename_initialize = false
    @token_stream = nil
    @calls_super = false
    @superclass_method = nil
  end

  ##
  # Adds +an_alias+ as an alias for this method in +context+.

  def add_alias an_alias, context = nil
    method = self.class.new an_alias.text, an_alias.new_name

    method.record_location an_alias.file
    method.singleton = self.singleton
    method.params = self.params
    method.visibility = self.visibility
    method.comment = an_alias.comment
    method.is_alias_for = self
    @aliases << method
    context.add_method method if context
    method
  end

  ##
  # Prefix for +aref+ is 'method'.

  def aref_prefix
    'method'
  end

  ##
  # The call_seq or the param_seq with method name, if there is no call_seq.
  #
  # Use this for displaying a method's argument lists.

  def arglists
    if @call_seq then
      @call_seq
    elsif @params then
      "#{name}#{param_seq}"
    end
  end

  ##
  # Different ways to call this method

  def call_seq
    unless call_seq = _call_seq
      call_seq = is_alias_for._call_seq if is_alias_for
    end

    return unless call_seq

    deduplicate_call_seq(call_seq)
  end

  ##
  # Sets the different ways you can call this method.  If an empty +call_seq+
  # is given nil is assumed.
  #
  # See also #param_seq

  def call_seq= call_seq
    return if call_seq.empty?

    @call_seq = call_seq
  end

  ##
  # Whether the method has a call-seq.

  def has_call_seq?
    !!(@call_seq || is_alias_for&._call_seq)
  end

  ##
  # Loads is_alias_for from the internal name.  Returns nil if the alias
  # cannot be found.

  def is_alias_for # :nodoc:
    case @is_alias_for
    when RDoc::MethodAttr then
      @is_alias_for
    when Array then
      return nil unless @store

      klass_name, singleton, method_name = @is_alias_for

      return nil unless klass = @store.find_class_or_module(klass_name)

      @is_alias_for = klass.find_method method_name, singleton
    end
  end

  ##
  # Dumps this AnyMethod for use by ri.  See also #marshal_load

  def marshal_dump
    aliases = @aliases.map do |a|
      [a.name, parse(a.comment)]
    end

    is_alias_for = [
      @is_alias_for.parent.full_name,
      @is_alias_for.singleton,
      @is_alias_for.name
    ] if @is_alias_for

    [ MARSHAL_VERSION,
      @name,
      full_name,
      @singleton,
      @visibility,
      parse(@comment),
      @call_seq,
      @block_params,
      aliases,
      @params,
      @file.relative_name,
      @calls_super,
      @parent.name,
      @parent.class,
      @section.title,
      is_alias_for,
    ]
  end

  ##
  # Loads this AnyMethod from +array+.  For a loaded AnyMethod the following
  # methods will return cached values:
  #
  # * #full_name
  # * #parent_name

  def marshal_load array
    initialize_visibility

    @dont_rename_initialize = nil
    @token_stream           = nil
    @aliases                = []
    @parent                 = nil
    @parent_name            = nil
    @parent_class           = nil
    @section                = nil
    @file                   = nil

    version        = array[0]
    @name          = array[1]
    @full_name     = array[2]
    @singleton     = array[3]
    @visibility    = array[4]
    @comment       = array[5]
    @call_seq      = array[6]
    @block_params  = array[7]
    #                      8 handled below
    @params        = array[9]
    #                      10 handled below
    @calls_super   = array[11]
    @parent_name   = array[12]
    @parent_title  = array[13]
    @section_title = array[14]
    @is_alias_for  = array[15]

    array[8].each do |new_name, comment|
      add_alias RDoc::Alias.new(nil, @name, new_name, comment, @singleton)
    end

    @parent_name ||= if @full_name =~ /#/ then
                       $`
                     else
                       name = @full_name.split('::')
                       name.pop
                       name.join '::'
                     end

    @file = RDoc::TopLevel.new array[10] if version > 0
  end

  ##
  # Method name
  #
  # If the method has no assigned name, it extracts it from #call_seq.

  def name
    return @name if @name

    @name =
      @call_seq[/^.*?\.(\w+)/, 1] ||
      @call_seq[/^.*?(\w+)/, 1] ||
      @call_seq if @call_seq
  end

  ##
  # A list of this method's method and yield parameters.  +call-seq+ params
  # are preferred over parsed method and block params.

  def param_list
    if @call_seq then
      params = @call_seq.split("\n").last
      params = params.sub(/.*?\((.*)\)/, '\1')
      params = params.sub(/(\{|do)\s*\|([^|]*)\|.*/, ',\2')
    elsif @params then
      params = @params.sub(/\((.*)\)/, '\1')

      params << ",#{@block_params}" if @block_params
    elsif @block_params then
      params = @block_params
    else
      return []
    end

    if @block_params then
      # If this method has explicit block parameters, remove any explicit
      # &block
      params = params.sub(/,?\s*&\w+/, '')
    else
      params = params.sub(/\&(\w+)/, '\1')
    end

    params = params.gsub(/\s+/, '').split(',').reject(&:empty?)

    params.map { |param| param.sub(/=.*/, '') }
  end

  ##
  # Pretty parameter list for this method.  If the method's parameters were
  # given by +call-seq+ it is preferred over the parsed values.

  def param_seq
    if @call_seq then
      params = @call_seq.split("\n").last
      params = params.sub(/[^( ]+/, '')
      params = params.sub(/(\|[^|]+\|)\s*\.\.\.\s*(end|\})/, '\1 \2')
    elsif @params then
      params = @params.gsub(/\s*\#.*/, '')
      params = params.tr_s("\n ", " ")
      params = "(#{params})" unless params[0] == ?(
    else
      params = ''
    end

    if @block_params then
      # If this method has explicit block parameters, remove any explicit
      # &block
      params = params.sub(/,?\s*&\w+/, '')

      block = @block_params.tr_s("\n ", " ")
      if block[0] == ?(
        block = block.sub(/^\(/, '').sub(/\)/, '')
      end
      params << " { |#{block}| ... }"
    end

    params
  end

  ##
  # Whether to skip the method description, true for methods that have
  # aliases with a call-seq that doesn't include the method name.

  def skip_description?
    has_call_seq? && call_seq.nil? && !!(is_alias_for || !aliases.empty?)
  end

  ##
  # Sets the store for this method and its referenced code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  ##
  # For methods that +super+, find the superclass method that would be called.

  def superclass_method
    return unless @calls_super
    return @superclass_method if @superclass_method

    parent.each_ancestor do |ancestor|
      if method = ancestor.method_list.find { |m| m.name == @name } then
        @superclass_method = method
        break
      end
    end

    @superclass_method
  end

  protected

  ##
  # call_seq without deduplication and alias lookup.

  def _call_seq
    @call_seq if defined?(@call_seq) && @call_seq
  end

  private

  ##
  # call_seq with alias examples information removed, if this
  # method is an alias method.

  def deduplicate_call_seq(call_seq)
    return call_seq unless is_alias_for || !aliases.empty?

    method_name = self.name
    method_name = method_name[0, 1] if method_name =~ /\A\[/

    entries = call_seq.split "\n"

    ignore = aliases.map(&:name)
    if is_alias_for
      ignore << is_alias_for.name
      ignore.concat is_alias_for.aliases.map(&:name)
    end
    ignore.map! { |n| n =~ /\A\[/ ? /\[.*\]/ : n}
    ignore.delete(method_name)
    ignore = Regexp.union(ignore)

    matching = entries.reject do |entry|
      entry =~ /^\w*\.?#{ignore}[$\(\s]/ or
        entry =~ /\s#{ignore}\s/
    end

    matching.empty? ? nil : matching.join("\n")
  end
end
PK)J[�;��Ashare/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/normal_module.rbnu�[���# frozen_string_literal: true
##
# A normal module, like NormalClass

class RDoc::NormalModule < RDoc::ClassModule

  def aref_prefix # :nodoc:
    'module'
  end

  def inspect # :nodoc:
    "#<%s:0x%x module %s includes: %p extends: %p attributes: %p methods: %p aliases: %p>" % [
      self.class, object_id,
      full_name, @includes, @extends, @attributes, @method_list, @aliases
    ]
  end

  ##
  # The definition of this module, <tt>module MyModuleName</tt>

  def definition
    "module #{full_name}"
  end

  ##
  # This is a module, returns true

  def module?
    true
  end

  def pretty_print q # :nodoc:
    q.group 2, "[module #{full_name}:", "]" do
      q.breakable
      q.text "includes:"
      q.breakable
      q.seplist @includes do |inc| q.pp inc end
      q.breakable

      q.breakable
      q.text "constants:"
      q.breakable
      q.seplist @constants do |const| q.pp const end

      q.text "attributes:"
      q.breakable
      q.seplist @attributes do |attr| q.pp attr end
      q.breakable

      q.text "methods:"
      q.breakable
      q.seplist @method_list do |meth| q.pp meth end
      q.breakable

      q.text "aliases:"
      q.breakable
      q.seplist @aliases do |aliaz| q.pp aliaz end
      q.breakable

      q.text "comment:"
      q.breakable
      q.pp comment
    end
  end

  ##
  # Modules don't have one, raises NoMethodError

  def superclass
    raise NoMethodError, "#{full_name} is a module"
  end

end
PK)J[�n����;share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/require.rbnu�[���# frozen_string_literal: true
##
# A file loaded by \#require

class RDoc::Require < RDoc::CodeObject

  ##
  # Name of the required file

  attr_accessor :name

  ##
  # Creates a new Require that loads +name+ with +comment+

  def initialize(name, comment)
    super()
    @name = name.gsub(/'|"/, "") #'
    @top_level = nil
    self.comment = comment
  end

  def inspect # :nodoc:
    "#<%s:0x%x require '%s' in %s>" % [
      self.class,
      object_id,
      @name,
      parent_file_name,
    ]
  end

  def to_s # :nodoc:
    "require #{name} in: #{parent}"
  end

  ##
  # The RDoc::TopLevel corresponding to this require, or +nil+ if not found.

  def top_level
    @top_level ||= begin
      tl = RDoc::TopLevel.all_files_hash[name + '.rb']

      if tl.nil? and RDoc::TopLevel.all_files.first.full_name =~ %r(^lib/) then
        # second chance
        tl = RDoc::TopLevel.all_files_hash['lib/' + name + '.rb']
      end

      tl
    end
  end

end
PK)J[{u:��Cshare/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/context/section.rbnu�[���# frozen_string_literal: true
require 'cgi/util'

##
# A section of documentation like:
#
#   # :section: The title
#   # The body
#
# Sections can be referenced multiple times and will be collapsed into a
# single section.

class RDoc::Context::Section

  include RDoc::Text

  MARSHAL_VERSION = 0 # :nodoc:

  ##
  # Section comment

  attr_reader :comment

  ##
  # Section comments

  attr_reader :comments

  ##
  # Context this Section lives in

  attr_reader :parent

  ##
  # Section title

  attr_reader :title

  ##
  # Creates a new section with +title+ and +comment+

  def initialize parent, title, comment
    @parent = parent
    @title = title ? title.strip : title

    @comments = []

    add_comment comment
  end

  ##
  # Sections are equal when they have the same #title

  def == other
    self.class === other and @title == other.title
  end

  alias eql? ==

  ##
  # Adds +comment+ to this section

  def add_comment comment
    comment = extract_comment comment

    return if comment.empty?

    case comment
    when RDoc::Comment then
      @comments << comment
    when RDoc::Markup::Document then
      @comments.concat comment.parts
    when Array then
      @comments.concat comment
    else
      raise TypeError, "unknown comment type: #{comment.inspect}"
    end
  end

  ##
  # Anchor reference for linking to this section

  def aref
    title = @title || '[untitled]'

    CGI.escape(title).gsub('%', '-').sub(/^-/, '')
  end

  ##
  # Extracts the comment for this section from the original comment block.
  # If the first line contains :section:, strip it and use the rest.
  # Otherwise remove lines up to the line containing :section:, and look
  # for those lines again at the end and remove them. This lets us write
  #
  #   # :section: The title
  #   # The body

  def extract_comment comment
    case comment
    when Array then
      comment.map do |c|
        extract_comment c
      end
    when nil
      RDoc::Comment.new ''
    when RDoc::Comment then
      if comment.text =~ /^#[ \t]*:section:.*\n/ then
        start = $`
        rest = $'

        comment.text = if start.empty? then
                         rest
                       else
                         rest.sub(/#{start.chomp}\Z/, '')
                       end
      end

      comment
    when RDoc::Markup::Document then
      comment
    else
      raise TypeError, "unknown comment #{comment.inspect}"
    end
  end

  def inspect # :nodoc:
    "#<%s:0x%x %p>" % [self.class, object_id, title]
  end

  def hash # :nodoc:
    @title.hash
  end

  ##
  # The files comments in this section come from

  def in_files
    return [] if @comments.empty?

    case @comments
    when Array then
      @comments.map do |comment|
        comment.file
      end
    when RDoc::Markup::Document then
      @comment.parts.map do |document|
        document.file
      end
    else
      raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
    end
  end

  ##
  # Serializes this Section.  The title and parsed comment are saved, but not
  # the section parent which must be restored manually.

  def marshal_dump
    [
      MARSHAL_VERSION,
      @title,
      parse,
    ]
  end

  ##
  # De-serializes this Section.  The section parent must be restored manually.

  def marshal_load array
    @parent  = nil

    @title    = array[1]
    @comments = array[2]
  end

  ##
  # Parses +comment_location+ into an RDoc::Markup::Document composed of
  # multiple RDoc::Markup::Documents with their file set.

  def parse
    case @comments
    when String then
      super
    when Array then
      docs = @comments.map do |comment, location|
        doc = super comment
        doc.file = location if location
        doc
      end

      RDoc::Markup::Document.new(*docs)
    when RDoc::Comment then
      doc = super @comments.text, comments.format
      doc.file = @comments.location
      doc
    when RDoc::Markup::Document then
      return @comments
    else
      raise ArgumentError, "unknown comment class #{comments.class}"
    end
  end

  ##
  # The section's title, or 'Top Section' if the title is nil.
  #
  # This is used by the table of contents template so the name is silly.

  def plain_html
    @title || 'Top Section'
  end

  ##
  # Removes a comment from this section if it is from the same file as
  # +comment+

  def remove_comment comment
    return if @comments.empty?

    case @comments
    when Array then
      @comments.delete_if do |my_comment|
        my_comment.file == comment.file
      end
    when RDoc::Markup::Document then
      @comments.parts.delete_if do |document|
        document.file == comment.file.name
      end
    else
      raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
    end
  end

end
PK)J[:��ԫ�;share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/include.rbnu�[���# frozen_string_literal: true
##
# A Module included in a class with \#include
#
#   RDoc::Include.new 'Enumerable', 'comment ...'

class RDoc::Include < RDoc::Mixin

end
PK)J[�tJ$��:share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/extend.rbnu�[���# frozen_string_literal: true
##
# A Module extension to a class with \#extend
#
#   RDoc::Extend.new 'Enumerable', 'comment ...'

class RDoc::Extend < RDoc::Mixin

end
PK)J[b2�}}9share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/alias.rbnu�[���# frozen_string_literal: true
##
# Represent an alias, which is an old_name/new_name pair associated with a
# particular context
#--
# TODO implement Alias as a proxy to a method/attribute, inheriting from
#      MethodAttr

class RDoc::Alias < RDoc::CodeObject

  ##
  # Aliased method's name

  attr_reader :new_name

  alias name new_name

  ##
  # Aliasee method's name

  attr_reader :old_name

  ##
  # Is this an alias declared in a singleton context?

  attr_accessor :singleton

  ##
  # Source file token stream

  attr_reader :text

  ##
  # Creates a new Alias with a token stream of +text+ that aliases +old_name+
  # to +new_name+, has +comment+ and is a +singleton+ context.

  def initialize(text, old_name, new_name, comment, singleton = false)
    super()

    @text = text
    @singleton = singleton
    @old_name = old_name
    @new_name = new_name
    self.comment = comment
  end

  ##
  # Order by #singleton then #new_name

  def <=>(other)
    [@singleton ? 0 : 1, new_name] <=> [other.singleton ? 0 : 1, other.new_name]
  end

  ##
  # HTML fragment reference for this alias

  def aref
    type = singleton ? 'c' : 'i'
    "#alias-#{type}-#{html_name}"
  end

  ##
  # Full old name including namespace

  def full_old_name
    @full_name || "#{parent.name}#{pretty_old_name}"
  end

  ##
  # HTML id-friendly version of +#new_name+.

  def html_name
    CGI.escape(@new_name.gsub('-', '-2D')).gsub('%', '-').sub(/^-/, '')
  end

  def inspect # :nodoc:
    parent_name = parent ? parent.name : '(unknown)'
    "#<%s:0x%x %s.alias_method %s, %s>" % [
      self.class, object_id,
      parent_name, @old_name, @new_name,
    ]
  end

  ##
  # '::' for the alias of a singleton method/attribute, '#' for instance-level.

  def name_prefix
    singleton ? '::' : '#'
  end

  ##
  # Old name with prefix '::' or '#'.

  def pretty_old_name
    "#{singleton ? '::' : '#'}#{@old_name}"
  end

  ##
  # New name with prefix '::' or '#'.

  def pretty_new_name
    "#{singleton ? '::' : '#'}#{@new_name}"
  end

  alias pretty_name pretty_new_name

  def to_s # :nodoc:
    "alias: #{self.new_name} -> #{self.pretty_old_name} in: #{parent}"
  end

end
PK)J[�!���>share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/anon_class.rbnu�[���# frozen_string_literal: true
##
# An anonymous class like:
#
#   c = Class.new do end
#
# AnonClass is currently not used.

class RDoc::AnonClass < RDoc::ClassModule
end
PK)J[�>�jDWDW@share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/class_module.rbnu�[���# frozen_string_literal: true
##
# ClassModule is the base class for objects representing either a class or a
# module.

class RDoc::ClassModule < RDoc::Context

  ##
  # 1::
  #   RDoc 3.7
  #   * Added visibility, singleton and file to attributes
  #   * Added file to constants
  #   * Added file to includes
  #   * Added file to methods
  # 2::
  #   RDoc 3.13
  #   * Added extends
  # 3::
  #   RDoc 4.0
  #   * Added sections
  #   * Added in_files
  #   * Added parent name
  #   * Complete Constant dump

  MARSHAL_VERSION = 3 # :nodoc:

  ##
  # Constants that are aliases for this class or module

  attr_accessor :constant_aliases

  ##
  # Comment and the location it came from.  Use #add_comment to add comments

  attr_accessor :comment_location

  attr_accessor :diagram # :nodoc:

  ##
  # Class or module this constant is an alias for

  attr_accessor :is_alias_for

  ##
  # Return a RDoc::ClassModule of class +class_type+ that is a copy
  # of module +module+. Used to promote modules to classes.
  #--
  # TODO move to RDoc::NormalClass (I think)

  def self.from_module class_type, mod
    klass = class_type.new mod.name

    mod.comment_location.each do |comment, location|
      klass.add_comment comment, location
    end

    klass.parent = mod.parent
    klass.section = mod.section
    klass.viewer = mod.viewer

    klass.attributes.concat mod.attributes
    klass.method_list.concat mod.method_list
    klass.aliases.concat mod.aliases
    klass.external_aliases.concat mod.external_aliases
    klass.constants.concat mod.constants
    klass.includes.concat mod.includes
    klass.extends.concat mod.extends

    klass.methods_hash.update mod.methods_hash
    klass.constants_hash.update mod.constants_hash

    klass.current_section = mod.current_section
    klass.in_files.concat mod.in_files
    klass.sections.concat mod.sections
    klass.unmatched_alias_lists = mod.unmatched_alias_lists
    klass.current_section = mod.current_section
    klass.visibility = mod.visibility

    klass.classes_hash.update mod.classes_hash
    klass.modules_hash.update mod.modules_hash
    klass.metadata.update mod.metadata

    klass.document_self = mod.received_nodoc ? nil : mod.document_self
    klass.document_children = mod.document_children
    klass.force_documentation = mod.force_documentation
    klass.done_documenting = mod.done_documenting

    # update the parent of all children

    (klass.attributes +
     klass.method_list +
     klass.aliases +
     klass.external_aliases +
     klass.constants +
     klass.includes +
     klass.extends +
     klass.classes +
     klass.modules).each do |obj|
      obj.parent = klass
      obj.full_name = nil
    end

    klass
  end

  ##
  # Creates a new ClassModule with +name+ with optional +superclass+
  #
  # This is a constructor for subclasses, and must never be called directly.

  def initialize(name, superclass = nil)
    @constant_aliases = []
    @diagram          = nil
    @is_alias_for     = nil
    @name             = name
    @superclass       = superclass
    @comment_location = [] # [[comment, location]]

    super()
  end

  ##
  # Adds +comment+ to this ClassModule's list of comments at +location+.  This
  # method is preferred over #comment= since it allows ri data to be updated
  # across multiple runs.

  def add_comment comment, location
    return unless document_self

    original = comment

    comment = case comment
              when RDoc::Comment then
                comment.normalize
              else
                normalize_comment comment
              end

    if location.parser == RDoc::Parser::C
      @comment_location.delete_if { |(_, l)| l == location }
    end

    @comment_location << [comment, location]

    self.comment = original
  end

  def add_things my_things, other_things # :nodoc:
    other_things.each do |group, things|
      my_things[group].each { |thing| yield false, thing } if
        my_things.include? group

      things.each do |thing|
        yield true, thing
      end
    end
  end

  ##
  # Ancestors list for this ClassModule: the list of included modules
  # (classes will add their superclass if any).
  #
  # Returns the included classes or modules, not the includes
  # themselves. The returned values are either String or
  # RDoc::NormalModule instances (see RDoc::Include#module).
  #
  # The values are returned in reverse order of their inclusion,
  # which is the order suitable for searching methods/attributes
  # in the ancestors. The superclass, if any, comes last.

  def ancestors
    includes.map { |i| i.module }.reverse
  end

  def aref_prefix # :nodoc:
    raise NotImplementedError, "missing aref_prefix for #{self.class}"
  end

  ##
  # HTML fragment reference for this module or class.  See
  # RDoc::NormalClass#aref and RDoc::NormalModule#aref

  def aref
    "#{aref_prefix}-#{full_name}"
  end

  ##
  # Ancestors of this class or module only

  alias direct_ancestors ancestors

  ##
  # Clears the comment. Used by the Ruby parser.

  def clear_comment
    @comment = ''
  end

  ##
  # This method is deprecated, use #add_comment instead.
  #
  # Appends +comment+ to the current comment, but separated by a rule.  Works
  # more like <tt>+=</tt>.

  def comment= comment # :nodoc:
    comment = case comment
              when RDoc::Comment then
                comment.normalize
              else
                normalize_comment comment
              end

    comment = "#{@comment.to_s}\n---\n#{comment.to_s}" unless @comment.empty?

    super comment
  end

  ##
  # Prepares this ClassModule for use by a generator.
  #
  # See RDoc::Store#complete

  def complete min_visibility
    update_aliases
    remove_nodoc_children
    embed_mixins
    update_includes
    remove_invisible min_visibility
  end

  ##
  # Does this ClassModule or any of its methods have document_self set?

  def document_self_or_methods
    document_self || method_list.any?{ |m| m.document_self }
  end

  ##
  # Does this class or module have a comment with content or is
  # #received_nodoc true?

  def documented?
    return true if @received_nodoc
    return false if @comment_location.empty?
    @comment_location.any? { |comment, _| not comment.empty? }
  end

  ##
  # Iterates the ancestors of this class or module for which an
  # RDoc::ClassModule exists.

  def each_ancestor # :yields: module
    return enum_for __method__ unless block_given?

    ancestors.each do |mod|
      next if String === mod
      next if self == mod
      yield mod
    end
  end

  ##
  # Looks for a symbol in the #ancestors. See Context#find_local_symbol.

  def find_ancestor_local_symbol symbol
    each_ancestor do |m|
      res = m.find_local_symbol(symbol)
      return res if res
    end

    nil
  end

  ##
  # Finds a class or module with +name+ in this namespace or its descendants

  def find_class_named name
    return self if full_name == name
    return self if @name == name

    @classes.values.find do |klass|
      next if klass == self
      klass.find_class_named name
    end
  end

  ##
  # Return the fully qualified name of this class or module

  def full_name
    @full_name ||= if RDoc::ClassModule === parent then
                     "#{parent.full_name}::#{@name}"
                   else
                     @name
                   end
  end

  ##
  # TODO: filter included items by #display?

  def marshal_dump # :nodoc:
    attrs = attributes.sort.map do |attr|
      next unless attr.display?
      [ attr.name, attr.rw,
        attr.visibility, attr.singleton, attr.file_name,
      ]
    end.compact

    method_types = methods_by_type.map do |type, visibilities|
      visibilities = visibilities.map do |visibility, methods|
        method_names = methods.map do |method|
          next unless method.display?
          [method.name, method.file_name]
        end.compact

        [visibility, method_names.uniq]
      end

      [type, visibilities]
    end

    [ MARSHAL_VERSION,
      @name,
      full_name,
      @superclass,
      parse(@comment_location),
      attrs,
      constants.select { |constant| constant.display? },
      includes.map do |incl|
        next unless incl.display?
        [incl.name, parse(incl.comment), incl.file_name]
      end.compact,
      method_types,
      extends.map do |ext|
        next unless ext.display?
        [ext.name, parse(ext.comment), ext.file_name]
      end.compact,
      @sections.values,
      @in_files.map do |tl|
        tl.relative_name
      end,
      parent.full_name,
      parent.class,
    ]
  end

  def marshal_load array # :nodoc:
    initialize_visibility
    initialize_methods_etc
    @current_section   = nil
    @document_self     = true
    @done_documenting  = false
    @parent            = nil
    @temporary_section = nil
    @visibility        = nil
    @classes           = {}
    @modules           = {}

    @name       = array[1]
    @full_name  = array[2]
    @superclass = array[3]
    @comment    = array[4]

    @comment_location = if RDoc::Markup::Document === @comment.parts.first then
                          @comment
                        else
                          RDoc::Markup::Document.new @comment
                        end

    array[5].each do |name, rw, visibility, singleton, file|
      singleton  ||= false
      visibility ||= :public

      attr = RDoc::Attr.new nil, name, rw, nil, singleton

      add_attribute attr
      attr.visibility = visibility
      attr.record_location RDoc::TopLevel.new file
    end

    array[6].each do |constant, comment, file|
      case constant
      when RDoc::Constant then
        add_constant constant
      else
        constant = add_constant RDoc::Constant.new(constant, nil, comment)
        constant.record_location RDoc::TopLevel.new file
      end
    end

    array[7].each do |name, comment, file|
      incl = add_include RDoc::Include.new(name, comment)
      incl.record_location RDoc::TopLevel.new file
    end

    array[8].each do |type, visibilities|
      visibilities.each do |visibility, methods|
        @visibility = visibility

        methods.each do |name, file|
          method = RDoc::AnyMethod.new nil, name
          method.singleton = true if type == 'class'
          method.record_location RDoc::TopLevel.new file
          add_method method
        end
      end
    end

    array[9].each do |name, comment, file|
      ext = add_extend RDoc::Extend.new(name, comment)
      ext.record_location RDoc::TopLevel.new file
    end if array[9] # Support Marshal version 1

    sections = (array[10] || []).map do |section|
      [section.title, section]
    end

    @sections = Hash[*sections.flatten]
    @current_section = add_section nil

    @in_files = []

    (array[11] || []).each do |filename|
      record_location RDoc::TopLevel.new filename
    end

    @parent_name  = array[12]
    @parent_class = array[13]
  end

  ##
  # Merges +class_module+ into this ClassModule.
  #
  # The data in +class_module+ is preferred over the receiver.

  def merge class_module
    @parent      = class_module.parent
    @parent_name = class_module.parent_name

    other_document = parse class_module.comment_location

    if other_document then
      document = parse @comment_location

      document = document.merge other_document

      @comment = @comment_location = document
    end

    cm = class_module
    other_files = cm.in_files

    merge_collections attributes, cm.attributes, other_files do |add, attr|
      if add then
        add_attribute attr
      else
        @attributes.delete attr
        @methods_hash.delete attr.pretty_name
      end
    end

    merge_collections constants, cm.constants, other_files do |add, const|
      if add then
        add_constant const
      else
        @constants.delete const
        @constants_hash.delete const.name
      end
    end

    merge_collections includes, cm.includes, other_files do |add, incl|
      if add then
        add_include incl
      else
        @includes.delete incl
      end
    end

    @includes.uniq! # clean up

    merge_collections extends, cm.extends, other_files do |add, ext|
      if add then
        add_extend ext
      else
        @extends.delete ext
      end
    end

    @extends.uniq! # clean up

    merge_collections method_list, cm.method_list, other_files do |add, meth|
      if add then
        add_method meth
      else
        @method_list.delete meth
        @methods_hash.delete meth.pretty_name
      end
    end

    merge_sections cm

    self
  end

  ##
  # Merges collection +mine+ with +other+ preferring other.  +other_files+ is
  # used to help determine which items should be deleted.
  #
  # Yields whether the item should be added or removed (true or false) and the
  # item to be added or removed.
  #
  #   merge_collections things, other.things, other.in_files do |add, thing|
  #     if add then
  #       # add the thing
  #     else
  #       # remove the thing
  #     end
  #   end

  def merge_collections mine, other, other_files, &block # :nodoc:
    my_things    = mine. group_by { |thing| thing.file }
    other_things = other.group_by { |thing| thing.file }

    remove_things my_things, other_files,  &block
    add_things    my_things, other_things, &block
  end

  ##
  # Merges the comments in this ClassModule with the comments in the other
  # ClassModule +cm+.

  def merge_sections cm # :nodoc:
    my_sections    =    sections.group_by { |section| section.title }
    other_sections = cm.sections.group_by { |section| section.title }

    other_files = cm.in_files

    remove_things my_sections, other_files do |_, section|
      @sections.delete section.title
    end

    other_sections.each do |group, sections|
      if my_sections.include? group
        my_sections[group].each do |my_section|
          other_section = cm.sections_hash[group]

          my_comments    = my_section.comments
          other_comments = other_section.comments

          other_files = other_section.in_files

          merge_collections my_comments, other_comments, other_files do |add, comment|
            if add then
              my_section.add_comment comment
            else
              my_section.remove_comment comment
            end
          end
        end
      else
        sections.each do |section|
          add_section group, section.comments
        end
      end
    end
  end

  ##
  # Does this object represent a module?

  def module?
    false
  end

  ##
  # Allows overriding the initial name.
  #
  # Used for modules and classes that are constant aliases.

  def name= new_name
    @name = new_name
  end

  ##
  # Parses +comment_location+ into an RDoc::Markup::Document composed of
  # multiple RDoc::Markup::Documents with their file set.

  def parse comment_location
    case comment_location
    when String then
      super
    when Array then
      docs = comment_location.map do |comment, location|
        doc = super comment
        doc.file = location
        doc
      end

      RDoc::Markup::Document.new(*docs)
    when RDoc::Comment then
      doc = super comment_location.text, comment_location.format
      doc.file = comment_location.location
      doc
    when RDoc::Markup::Document then
      return comment_location
    else
      raise ArgumentError, "unknown comment class #{comment_location.class}"
    end
  end

  ##
  # Path to this class or module for use with HTML generator output.

  def path
    http_url @store.rdoc.generator.class_dir
  end

  ##
  # Name to use to generate the url:
  # modules and classes that are aliases for another
  # module or class return the name of the latter.

  def name_for_path
    is_alias_for ? is_alias_for.full_name : full_name
  end

  ##
  # Returns the classes and modules that are not constants
  # aliasing another class or module. For use by formatters
  # only (caches its result).

  def non_aliases
    @non_aliases ||= classes_and_modules.reject { |cm| cm.is_alias_for }
  end

  ##
  # Updates the child modules or classes of class/module +parent+ by
  # deleting the ones that have been removed from the documentation.
  #
  # +parent_hash+ is either <tt>parent.modules_hash</tt> or
  # <tt>parent.classes_hash</tt> and +all_hash+ is ::all_modules_hash or
  # ::all_classes_hash.

  def remove_nodoc_children
    prefix = self.full_name + '::'

    modules_hash.each_key do |name|
      full_name = prefix + name
      modules_hash.delete name unless @store.modules_hash[full_name]
    end

    classes_hash.each_key do |name|
      full_name = prefix + name
      classes_hash.delete name unless @store.classes_hash[full_name]
    end
  end

  def remove_things my_things, other_files # :nodoc:
    my_things.delete_if do |file, things|
      next false unless other_files.include? file

      things.each do |thing|
        yield false, thing
      end

      true
    end
  end

  ##
  # Search record used by RDoc::Generator::JsonIndex

  def search_record
    [
      name,
      full_name,
      full_name,
      '',
      path,
      '',
      snippet(@comment_location),
    ]
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @attributes .each do |attr|  attr.store  = store end
    @constants  .each do |const| const.store = store end
    @includes   .each do |incl|  incl.store  = store end
    @extends    .each do |ext|   ext.store   = store end
    @method_list.each do |meth|  meth.store  = store end
  end

  ##
  # Get the superclass of this class.  Attempts to retrieve the superclass
  # object, returns the name if it is not known.

  def superclass
    @store.find_class_named(@superclass) || @superclass
  end

  ##
  # Set the superclass of this class to +superclass+
  #
  # where +superclass+ is one of:
  #
  # - +nil+
  # - a String containing the full name of the superclass
  # - the RDoc::ClassModule representing the superclass

  def superclass=(superclass)
    raise NoMethodError, "#{full_name} is a module" if module?
    case superclass
    when RDoc::ClassModule
      @superclass = superclass.full_name
    when nil, String
      @superclass = superclass
    else
      raise TypeError, "superclass must be a String or RDoc::ClassModule, not #{superclass.class}"
    end
  end

  ##
  # Get all super classes of this class in an array. The last element might be
  # a string if the name is unknown.

  def super_classes
    result = []
    parent = self
    while parent = parent.superclass
      result << parent
      return result if parent.is_a?(String)
    end
    result
  end

  def to_s # :nodoc:
    if is_alias_for then
      "#{self.class.name} #{self.full_name} -> #{is_alias_for}"
    else
      super
    end
  end

  ##
  # 'module' or 'class'

  def type
    module? ? 'module' : 'class'
  end

  ##
  # Updates the child modules & classes by replacing the ones that are
  # aliases through a constant.
  #
  # The aliased module/class is replaced in the children and in
  # RDoc::Store#modules_hash or RDoc::Store#classes_hash
  # by a copy that has <tt>RDoc::ClassModule#is_alias_for</tt> set to
  # the aliased module/class, and this copy is added to <tt>#aliases</tt>
  # of the aliased module/class.
  #
  # Formatters can use the #non_aliases method to retrieve children that
  # are not aliases, for instance to list the namespace content, since
  # the aliased modules are included in the constants of the class/module,
  # that are listed separately.

  def update_aliases
    constants.each do |const|
      next unless cm = const.is_alias_for
      cm_alias = cm.dup
      cm_alias.name = const.name

      # Don't move top-level aliases under Object, they look ugly there
      unless RDoc::TopLevel === cm_alias.parent then
        cm_alias.parent = self
        cm_alias.full_name = nil # force update for new parent
      end

      cm_alias.aliases.clear
      cm_alias.is_alias_for = cm

      if cm.module? then
        @store.modules_hash[cm_alias.full_name] = cm_alias
        modules_hash[const.name] = cm_alias
      else
        @store.classes_hash[cm_alias.full_name] = cm_alias
        classes_hash[const.name] = cm_alias
      end

      cm.aliases << cm_alias
    end
  end

  ##
  # Deletes from #includes those whose module has been removed from the
  # documentation.
  #--
  # FIXME: includes are not reliably removed, see _possible_bug test case

  def update_includes
    includes.reject! do |include|
      mod = include.module
      !(String === mod) && @store.modules_hash[mod.full_name].nil?
    end

    includes.uniq!
  end

  ##
  # Deletes from #extends those whose module has been removed from the
  # documentation.
  #--
  # FIXME: like update_includes, extends are not reliably removed

  def update_extends
    extends.reject! do |ext|
      mod = ext.module

      !(String === mod) && @store.modules_hash[mod.full_name].nil?
    end

    extends.uniq!
  end

  def embed_mixins
    return unless options.embed_mixins

    includes.each do |include|
      next if String === include.module
      include.module.method_list.each do |code_object|
        add_method(prepare_to_embed(code_object))
      end
      include.module.constants.each do |code_object|
        add_constant(prepare_to_embed(code_object))
      end
      include.module.attributes.each do |code_object|
        add_attribute(prepare_to_embed(code_object))
      end
    end

    extends.each do |ext|
      next if String === ext.module
      ext.module.method_list.each do |code_object|
        add_method(prepare_to_embed(code_object, true))
      end
      ext.module.attributes.each do |code_object|
        add_attribute(prepare_to_embed(code_object, true))
      end
    end
  end

  private

  def prepare_to_embed(code_object, singleton=false)
    code_object = code_object.dup
    code_object.mixin_from = code_object.parent
    code_object.singleton = true if singleton
    set_current_section(code_object.section.title, code_object.section.comment)
    # add_method and add_attribute will reassign self's visibility back to the method/attribute
    # so we need to sync self's visibility with the object's to properly retain that information
    self.visibility = code_object.visibility
    code_object
  end
end
PK)J[��oX��@share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/ghost_method.rbnu�[���# frozen_string_literal: true
##
# GhostMethod represents a method referenced only by a comment

class RDoc::GhostMethod < RDoc::AnyMethod
end
PK)J[-qw%w%?share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/method_attr.rbnu�[���# frozen_string_literal: true
##
# Abstract class representing either a method or an attribute.

class RDoc::MethodAttr < RDoc::CodeObject

  include Comparable

  ##
  # Name of this method/attribute.

  attr_accessor :name

  ##
  # public, protected, private

  attr_accessor :visibility

  ##
  # Is this a singleton method/attribute?

  attr_accessor :singleton

  ##
  # Source file token stream

  attr_reader :text

  ##
  # Array of other names for this method/attribute

  attr_reader :aliases

  ##
  # The method/attribute we're aliasing

  attr_accessor :is_alias_for

  #--
  # The attributes below are for AnyMethod only.
  # They are left here for the time being to
  # allow ri to operate.
  # TODO modify ri to avoid calling these on attributes.
  #++

  ##
  # Parameters yielded by the called block

  attr_reader :block_params

  ##
  # Parameters for this method

  attr_accessor :params

  ##
  # Different ways to call this method

  attr_accessor :call_seq

  ##
  # The call_seq or the param_seq with method name, if there is no call_seq.

  attr_reader :arglists

  ##
  # Pretty parameter list for this method

  attr_reader :param_seq


  ##
  # Creates a new MethodAttr from token stream +text+ and method or attribute
  # name +name+.
  #
  # Usually this is called by super from a subclass.

  def initialize text, name
    super()

    @text = text
    @name = name

    @aliases      = []
    @is_alias_for = nil
    @parent_name  = nil
    @singleton    = nil
    @visibility   = :public
    @see = false

    @arglists     = nil
    @block_params = nil
    @call_seq     = nil
    @param_seq    = nil
    @params       = nil
  end

  ##
  # Resets cached data for the object so it can be rebuilt by accessor methods

  def initialize_copy other # :nodoc:
    @full_name = nil
  end

  def initialize_visibility # :nodoc:
    super
    @see = nil
  end

  ##
  # Order by #singleton then #name

  def <=>(other)
    return unless other.respond_to?(:singleton) &&
                  other.respond_to?(:name)

    [@singleton      ? 0 : 1, name_ord_range,       name] <=>
    [other.singleton ? 0 : 1, other.name_ord_range, other.name]
  end

  def == other # :nodoc:
    equal?(other) or self.class == other.class and full_name == other.full_name
  end

  ##
  # A method/attribute is documented if any of the following is true:
  # - it was marked with :nodoc:;
  # - it has a comment;
  # - it is an alias for a documented method;
  # - it has a +#see+ method that is documented.

  def documented?
    super or
      (is_alias_for and is_alias_for.documented?) or
      (see and see.documented?)
  end

  ##
  # A method/attribute to look at,
  # in particular if this method/attribute has no documentation.
  #
  # It can be a method/attribute of the superclass or of an included module,
  # including the Kernel module, which is always appended to the included
  # modules.
  #
  # Returns +nil+ if there is no such method/attribute.
  # The +#is_alias_for+ method/attribute, if any, is not included.
  #
  # Templates may generate a "see also ..." if this method/attribute
  # has documentation, and "see ..." if it does not.

  def see
    @see = find_see if @see == false
    @see
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  def find_see # :nodoc:
    return nil if singleton || is_alias_for

    # look for the method
    other = find_method_or_attribute name
    return other if other

    # if it is a setter, look for a getter
    return nil unless name =~ /[a-z_]=$/i   # avoid == or ===
    return find_method_or_attribute name[0..-2]
  end

  def find_method_or_attribute name # :nodoc:
    return nil unless parent.respond_to? :ancestors

    searched = parent.ancestors
    kernel = @store.modules_hash['Kernel']

    searched << kernel if kernel &&
      parent != kernel && !searched.include?(kernel)

    searched.each do |ancestor|
      next if String === ancestor
      next if parent == ancestor

      other = ancestor.find_method_named('#' + name) ||
              ancestor.find_attribute_named(name)

      return other if other
    end

    nil
  end

  ##
  # Abstract method. Contexts in their building phase call this
  # to register a new alias for this known method/attribute.
  #
  # - creates a new AnyMethod/Attribute named <tt>an_alias.new_name</tt>;
  # - adds +self+ as an alias for the new method or attribute
  # - adds the method or attribute to #aliases
  # - adds the method or attribute to +context+.

  def add_alias(an_alias, context)
    raise NotImplementedError
  end

  ##
  # HTML fragment reference for this method

  def aref
    type = singleton ? 'c' : 'i'
    # % characters are not allowed in html names => dash instead
    "#{aref_prefix}-#{type}-#{html_name}"
  end

  ##
  # Prefix for +aref+, defined by subclasses.

  def aref_prefix
    raise NotImplementedError
  end

  ##
  # Attempts to sanitize the content passed by the Ruby parser:
  # remove outer parentheses, etc.

  def block_params=(value)
    # 'yield.to_s' or 'assert yield, msg'
    return @block_params = '' if value =~ /^[\.,]/

    # remove trailing 'if/unless ...'
    return @block_params = '' if value =~ /^(if|unless)\s/

    value = $1.strip if value =~ /^(.+)\s(if|unless)\s/

    # outer parentheses
    value = $1 if value =~ /^\s*\((.*)\)\s*$/
    value = value.strip

    # proc/lambda
    return @block_params = $1 if value =~ /^(proc|lambda)(\s*\{|\sdo)/

    # surrounding +...+ or [...]
    value = $1.strip if value =~ /^\+(.*)\+$/
    value = $1.strip if value =~ /^\[(.*)\]$/

    return @block_params = '' if value.empty?

    # global variable
    return @block_params = 'str' if value =~ /^\$[&0-9]$/

    # wipe out array/hash indices
    value.gsub!(/(\w)\[[^\[]+\]/, '\1')

    # remove @ from class/instance variables
    value.gsub!(/@@?([a-z0-9_]+)/, '\1')

    # method calls => method name
    value.gsub!(/([A-Z:a-z0-9_]+)\.([a-z0-9_]+)(\s*\(\s*[a-z0-9_.,\s]*\s*\)\s*)?/) do
      case $2
      when 'to_s'      then $1
      when 'const_get' then 'const'
      when 'new' then
        $1.split('::').last.  # ClassName => class_name
          gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
          gsub(/([a-z\d])([A-Z])/, '\1_\2').
          downcase
      else
        $2
      end
    end

    # class prefixes
    value.gsub!(/[A-Za-z0-9_:]+::/, '')

    # simple expressions
    value = $1 if value =~ /^([a-z0-9_]+)\s*[-*+\/]/

    @block_params = value.strip
  end

  ##
  # HTML id-friendly method/attribute name

  def html_name
    require 'cgi/util'

    CGI.escape(@name.gsub('-', '-2D')).gsub('%', '-').sub(/^-/, '')
  end

  ##
  # Full method/attribute name including namespace

  def full_name
    @full_name ||= "#{parent_name}#{pretty_name}"
  end

  def inspect # :nodoc:
    alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil
    visibility = self.visibility
    visibility = "forced #{visibility}" if force_documentation
    "#<%s:0x%x %s (%s)%s>" % [
      self.class, object_id,
      full_name,
      visibility,
      alias_for,
    ]
  end

  ##
  # '::' for a class method/attribute, '#' for an instance method.

  def name_prefix
    @singleton ? '::' : '#'
  end

  ##
  # Name for output to HTML.  For class methods the full name with a "." is
  # used like +SomeClass.method_name+.  For instance methods the class name is
  # used if +context+ does not match the parent.
  #
  # This is to help prevent people from using :: to call class methods.

  def output_name context
    return "#{name_prefix}#{@name}" if context == parent

    "#{parent_name}#{@singleton ? '.' : '#'}#{@name}"
  end

  ##
  # Method/attribute name with class/instance indicator

  def pretty_name
    "#{name_prefix}#{@name}"
  end

  ##
  # Type of method/attribute (class or instance)

  def type
    singleton ? 'class' : 'instance'
  end

  ##
  # Path to this method for use with HTML generator output.

  def path
    "#{@parent.path}##{aref}"
  end

  ##
  # Name of our parent with special handling for un-marshaled methods

  def parent_name
    @parent_name || super
  end

  def pretty_print q # :nodoc:
    alias_for =
      if @is_alias_for.respond_to? :name then
        "alias for #{@is_alias_for.name}"
      elsif Array === @is_alias_for then
        "alias for #{@is_alias_for.last}"
      end

    q.group 2, "[#{self.class.name} #{full_name} #{visibility}", "]" do
      if alias_for then
        q.breakable
        q.text alias_for
      end

      if text then
        q.breakable
        q.text "text:"
        q.breakable
        q.pp @text
      end

      unless comment.empty? then
        q.breakable
        q.text "comment:"
        q.breakable
        q.pp @comment
      end
    end
  end

  ##
  # Used by RDoc::Generator::JsonIndex to create a record for the search
  # engine.

  def search_record
    [
      @name,
      full_name,
      @name,
      @parent.full_name,
      path,
      params,
      snippet(@comment),
    ]
  end

  def to_s # :nodoc:
    if @is_alias_for
      "#{self.class.name}: #{full_name} -> #{is_alias_for}"
    else
      "#{self.class.name}: #{full_name}"
    end
  end

  def name_ord_range # :nodoc:
    case name.ord
    when 0..64 # anything below "A"
      1
    when 91..96 # the symbols between "Z" and "a"
      2
    when 123..126 # 7-bit symbols above "z": "{", "|", "}", "~"
      3
    else # everythig else can be sorted as normal
      4
    end
  end
end
PK)J[�f�c\\<share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/constant.rbnu�[���# frozen_string_literal: true
##
# A constant

class RDoc::Constant < RDoc::CodeObject

  MARSHAL_VERSION = 0 # :nodoc:

  ##
  # Sets the module or class this is constant is an alias for.

  attr_writer :is_alias_for

  ##
  # The constant's name

  attr_accessor :name

  ##
  # The constant's value

  attr_accessor :value

  ##
  # The constant's visibility

  attr_accessor :visibility

  ##
  # Creates a new constant with +name+, +value+ and +comment+

  def initialize(name, value, comment)
    super()

    @name  = name
    @value = value

    @is_alias_for = nil
    @visibility   = :public

    self.comment = comment
  end

  ##
  # Constants are ordered by name

  def <=> other
    return unless self.class === other

    [parent_name, name] <=> [other.parent_name, other.name]
  end

  ##
  # Constants are equal when their #parent and #name is the same

  def == other
    self.class == other.class and
      @parent == other.parent and
      @name == other.name
  end

  ##
  # A constant is documented if it has a comment, or is an alias
  # for a documented class or module.

  def documented?
    return true if super
    return false unless @is_alias_for
    case @is_alias_for
    when String then
      found = @store.find_class_or_module @is_alias_for
      return false unless found
      @is_alias_for = found
    end
    @is_alias_for.documented?
  end

  ##
  # Full constant name including namespace

  def full_name
    @full_name ||= "#{parent_name}::#{@name}"
  end

  ##
  # The module or class this constant is an alias for

  def is_alias_for
    case @is_alias_for
    when String then
      found = @store.find_class_or_module @is_alias_for
      @is_alias_for = found if found
      @is_alias_for
    else
      @is_alias_for
    end
  end

  def inspect # :nodoc:
    "#<%s:0x%x %s::%s>" % [
      self.class, object_id,
      parent_name, @name,
    ]
  end

  ##
  # Dumps this Constant for use by ri.  See also #marshal_load

  def marshal_dump
    alias_name = case found = is_alias_for
                 when RDoc::CodeObject then found.full_name
                 else                       found
                 end

    [ MARSHAL_VERSION,
      @name,
      full_name,
      @visibility,
      alias_name,
      parse(@comment),
      @file.relative_name,
      parent.name,
      parent.class,
      section.title,
    ]
  end

  ##
  # Loads this Constant from +array+.  For a loaded Constant the following
  # methods will return cached values:
  #
  # * #full_name
  # * #parent_name

  def marshal_load array
    initialize array[1], nil, array[5]

    @full_name     = array[2]
    @visibility    = array[3] || :public
    @is_alias_for  = array[4]
    #                      5 handled above
    #                      6 handled below
    @parent_name   = array[7]
    @parent_class  = array[8]
    @section_title = array[9]

    @file = RDoc::TopLevel.new array[6]
  end

  ##
  # Path to this constant for use with HTML generator output.

  def path
    "#{@parent.path}##{@name}"
  end

  def pretty_print q # :nodoc:
    q.group 2, "[#{self.class.name} #{full_name}", "]" do
      unless comment.empty? then
        q.breakable
        q.text "comment:"
        q.breakable
        q.pp @comment
      end
    end
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  def to_s # :nodoc:
    parent_name = parent ? parent.full_name : '(unknown)'
    if is_alias_for
      "constant #{parent_name}::#@name -> #{is_alias_for}"
    else
      "constant #{parent_name}::#@name"
    end
  end

end
PK)J[tqB���@share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/normal_class.rbnu�[���# frozen_string_literal: true
##
# A normal class, neither singleton nor anonymous

class RDoc::NormalClass < RDoc::ClassModule

  ##
  # The ancestors of this class including modules.  Unlike Module#ancestors,
  # this class is not included in the result.  The result will contain both
  # RDoc::ClassModules and Strings.

  def ancestors
    if String === superclass then
      super << superclass
    elsif superclass then
      ancestors = super
      ancestors << superclass
      ancestors.concat superclass.ancestors
    else
      super
    end
  end

  def aref_prefix # :nodoc:
    'class'
  end

  ##
  # The definition of this class, <tt>class MyClassName</tt>

  def definition
    "class #{full_name}"
  end

  def direct_ancestors
    superclass ? super + [superclass] : super
  end

  def inspect # :nodoc:
    superclass = @superclass ? " < #{@superclass}" : nil
    "<%s:0x%x class %s%s includes: %p extends: %p attributes: %p methods: %p aliases: %p>" % [
      self.class, object_id,
      full_name, superclass, @includes, @extends, @attributes, @method_list, @aliases
    ]
  end

  def to_s # :nodoc:
    display = "#{self.class.name} #{self.full_name}"
    if superclass
      display += ' < ' + (superclass.is_a?(String) ? superclass : superclass.full_name)
    end
    display += ' -> ' + is_alias_for.to_s if is_alias_for
    display
  end

  def pretty_print q # :nodoc:
    superclass = @superclass ? " < #{@superclass}" : nil

    q.group 2, "[class #{full_name}#{superclass}", "]" do
      q.breakable
      q.text "includes:"
      q.breakable
      q.seplist @includes do |inc| q.pp inc end

      q.breakable
      q.text "constants:"
      q.breakable
      q.seplist @constants do |const| q.pp const end

      q.breakable
      q.text "attributes:"
      q.breakable
      q.seplist @attributes do |attr| q.pp attr end

      q.breakable
      q.text "methods:"
      q.breakable
      q.seplist @method_list do |meth| q.pp meth end

      q.breakable
      q.text "aliases:"
      q.breakable
      q.seplist @aliases do |aliaz| q.pp aliaz end

      q.breakable
      q.text "comment:"
      q.breakable
      q.pp comment
    end
  end

end
PK)J[�(�??3share/gems/gems/rdoc-6.10.0/lib/rdoc/stats/quiet.rbnu�[���# frozen_string_literal: true
##
# Stats printer that prints nothing

class RDoc::Stats::Quiet

  ##
  # Creates a new Quiet that will print nothing

  def initialize num_files
    @num_files = num_files
  end

  ##
  # Prints a message at the beginning of parsing

  def begin_adding(*) end

  ##
  # Prints when an alias is added

  def print_alias(*) end

  ##
  # Prints when an attribute is added

  def print_attribute(*) end

  ##
  # Prints when a class is added

  def print_class(*) end

  ##
  # Prints when a constant is added

  def print_constant(*) end

  ##
  # Prints when a file is added

  def print_file(*) end

  ##
  # Prints when a method is added

  def print_method(*) end

  ##
  # Prints when a module is added

  def print_module(*) end

  ##
  # Prints when RDoc is done

  def done_adding(*) end

end
PK)J[�d)���5share/gems/gems/rdoc-6.10.0/lib/rdoc/stats/verbose.rbnu�[���# frozen_string_literal: true
##
# Stats printer that prints everything documented, including the documented
# status

class RDoc::Stats::Verbose < RDoc::Stats::Normal

  ##
  # Returns a marker for RDoc::CodeObject +co+ being undocumented

  def nodoc co
    " (undocumented)" unless co.documented?
  end

  def print_alias as # :nodoc:
    puts "    alias #{as.new_name} #{as.old_name}#{nodoc as}"
  end

  def print_attribute attribute # :nodoc:
    puts "    #{attribute.definition} #{attribute.name}#{nodoc attribute}"
  end

  def print_class(klass) # :nodoc:
    puts "  class #{klass.full_name}#{nodoc klass}"
  end

  def print_constant(constant) # :nodoc:
    puts "    #{constant.name}#{nodoc constant}"
  end

  def print_file(files_so_far, file) # :nodoc:
    super
    puts
  end

  def print_method(method) # :nodoc:
    puts "    #{method.singleton ? '::' : '#'}#{method.name}#{nodoc method}"
  end

  def print_module(mod) # :nodoc:
    puts "  module #{mod.full_name}#{nodoc mod}"
  end

end
PK)J[9)-$004share/gems/gems/rdoc-6.10.0/lib/rdoc/stats/normal.rbnu�[���# frozen_string_literal: true
begin
  require 'io/console/size'
rescue LoadError
  # for JRuby
  require 'io/console'
end

##
# Stats printer that prints just the files being documented with a progress
# bar

class RDoc::Stats::Normal < RDoc::Stats::Quiet

  def begin_adding # :nodoc:
    puts "Parsing sources..."
    @last_width = 0
  end

  ##
  # Prints a file with a progress bar

  def print_file files_so_far, filename
    progress_bar = sprintf("%3d%% [%2d/%2d]  ",
                           100 * files_so_far / @num_files,
                           files_so_far,
                           @num_files)

    if $stdout.tty?
      # Print a progress bar, but make sure it fits on a single line. Filename
      # will be truncated if necessary.
      size = IO.respond_to?(:console_size) ? IO.console_size : IO.console.winsize
      terminal_width = size[1].to_i.nonzero? || 80
      max_filename_size = (terminal_width - progress_bar.size) - 1

      if filename.size > max_filename_size then
        # Turn "some_long_filename.rb" to "...ong_filename.rb"
        filename = filename[(filename.size - max_filename_size) .. -1]
        filename[0..2] = "..."
      end

      # Clean the line with whitespaces so that leftover output from the
      # previous line doesn't show up.
      $stdout.print("\r\e[K") if @last_width && @last_width > 0
      @last_width = progress_bar.size + filename.size
      term = "\r"
    else
      term = "\n"
    end
    $stdout.print(progress_bar, filename, term)
    $stdout.flush
  end

  def done_adding # :nodoc:
    puts
  end

end
PK)J[x��**?share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_html_crossref.rbnu�[���# frozen_string_literal: true
##
# Subclass of the RDoc::Markup::ToHtml class that supports looking up method
# names, classes, etc to create links.  RDoc::CrossReference is used to
# generate those links based on the current context.

class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml

  # :stopdoc:
  ALL_CROSSREF_REGEXP = RDoc::CrossReference::ALL_CROSSREF_REGEXP
  CLASS_REGEXP_STR    = RDoc::CrossReference::CLASS_REGEXP_STR
  CROSSREF_REGEXP     = RDoc::CrossReference::CROSSREF_REGEXP
  METHOD_REGEXP_STR   = RDoc::CrossReference::METHOD_REGEXP_STR
  # :startdoc:

  ##
  # RDoc::CodeObject for generating references

  attr_accessor :context

  ##
  # Should we show '#' characters on method references?

  attr_accessor :show_hash

  ##
  # Creates a new crossref resolver that generates links relative to +context+
  # which lives at +from_path+ in the generated files.  '#' characters on
  # references are removed unless +show_hash+ is true.  Only method names
  # preceded by '#' or '::' are linked, unless +hyperlink_all+ is true.

  def initialize(options, from_path, context, markup = nil)
    raise ArgumentError, 'from_path cannot be nil' if from_path.nil?

    super options, markup

    @context       = context
    @from_path     = from_path
    @hyperlink_all = @options.hyperlink_all
    @show_hash     = @options.show_hash

    @cross_reference = RDoc::CrossReference.new @context
  end

  # :nodoc:
  def init_link_notation_regexp_handlings
    add_regexp_handling_RDOCLINK

    # The crossref must be linked before tidylink because Klass.method[:sym]
    # will be processed as a tidylink first and will be broken.
    crossref_re = @options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
    @markup.add_regexp_handling crossref_re, :CROSSREF

    add_regexp_handling_TIDYLINK
  end

  ##
  # Creates a link to the reference +name+ if the name exists.  If +text+ is
  # given it is used as the link text, otherwise +name+ is used.

  def cross_reference name, text = nil, code = true, rdoc_ref: false
    lookup = name

    name = name[1..-1] unless @show_hash if name[0, 1] == '#'

    if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
      text ||= [CGI.unescape($'), (" at <code>#{$1}</code>" if $~.begin(1))].join("")
      code = false
    else
      text ||= name
    end

    link lookup, text, code, rdoc_ref: rdoc_ref
  end

  ##
  # We're invoked when any text matches the CROSSREF pattern.  If we find the
  # corresponding reference, generate a link.  If the name we're looking for
  # contains no punctuation, we look for it up the module/class chain.  For
  # example, ToHtml is found, even without the <tt>RDoc::Markup::</tt> prefix,
  # because we look for it in module Markup first.

  def handle_regexp_CROSSREF(target)
    name = target.text

    return name if name =~ /@[\w-]+\.[\w-]/ # labels that look like emails

    unless @hyperlink_all then
      # This ensures that words entirely consisting of lowercase letters will
      # not have cross-references generated (to suppress lots of erroneous
      # cross-references to "new" in text, for instance)
      return name if name =~ /\A[a-z]*\z/
    end

    cross_reference name, rdoc_ref: false
  end

  ##
  # Handles <tt>rdoc-ref:</tt> scheme links and allows RDoc::Markup::ToHtml to
  # handle other schemes.

  def handle_regexp_HYPERLINK target
    url = target.text

    case url
    when /\Ardoc-ref:/
      cross_reference $', rdoc_ref: true
    else
      super
    end
  end

  ##
  # +target+ is an rdoc-schemed link that will be converted into a hyperlink.
  # For the rdoc-ref scheme the cross-reference will be looked up and the
  # given name will be used.
  #
  # All other contents are handled by
  # {the superclass}[rdoc-ref:RDoc::Markup::ToHtml#handle_regexp_RDOCLINK]

  def handle_regexp_RDOCLINK target
    url = target.text

    case url
    when /\Ardoc-ref:/
      cross_reference $', rdoc_ref: true
    else
      super
    end
  end

  ##
  # Generates links for <tt>rdoc-ref:</tt> scheme URLs and allows
  # RDoc::Markup::ToHtml to handle other schemes.

  def gen_url url, text
    if url =~ /\Ardoc-ref:/
      name = $'
      cross_reference name, text, name == text, rdoc_ref: true
    else
      super
    end
  end

  ##
  # Creates an HTML link to +name+ with the given +text+.

  def link name, text, code = true, rdoc_ref: false
    if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
      name = $1
      label = $'
    end

    ref = @cross_reference.resolve name, text if name

    case ref
    when String then
      if rdoc_ref && @options.warn_missing_rdoc_ref
        puts "#{@from_path}: `rdoc-ref:#{name}` can't be resolved for `#{text}`"
      end
      ref
    else
      path = ref ? ref.as_href(@from_path) : +""

      if code and RDoc::CodeObject === ref and !(RDoc::TopLevel === ref)
        text = "<code>#{CGI.escapeHTML text}</code>"
      end

      if label
        if path =~ /#/
          path << "-label-#{label}"
        elsif ref&.sections&.any? { |section| label == section.title }
          path << "##{label}"
        elsif ref.respond_to?(:aref)
          path << "##{ref.aref}-label-#{label}"
        else
          path << "#label-#{label}"
        end
      end

      "<a href=\"#{path}\">#{text}</a>"
    end
  end

  def convert_flow(flow)
    res = []

    i = 0
    while i < flow.size
      item = flow[i]
      i += 1
      case item
      when RDoc::Markup::AttrChanger then
        # Make "+Class#method+" a cross reference
        if tt_tag?(item.turn_on) and
          String === (str = flow[i]) and
          RDoc::Markup::AttrChanger === flow[i+1] and
          tt_tag?(flow[i+1].turn_off, true) and
          (@options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP).match?(str) and
          (text = cross_reference str) != str
        then
          text = yield text, res if defined?(yield)
          res << text
          i += 2
          next
        end
        off_tags res, item
        on_tags res, item
      when String then
        text = convert_string(item)
        text = yield text, res if defined?(yield)
        res << text
      when RDoc::Markup::RegexpHandling then
        text = convert_regexp_handling(item)
        text = yield text, res if defined?(yield)
        res << text
      else
        raise "Unknown flow element: #{item.inspect}"
      end
    end

    res.join('')
  end
end
PK)J[����xx4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/table.rbnu�[���# frozen_string_literal: true
##
# A section of table

class RDoc::Markup::Table
  # headers of each column
  attr_accessor :header

  # alignments of each column
  attr_accessor :align

  # body texts of each column
  attr_accessor :body

  # Creates new instance
  def initialize header, align, body
    @header, @align, @body = header, align, body
  end

  # :stopdoc:
  def == other
    self.class == other.class and
      @header == other.header and
      @align == other.align and
      @body == other.body
  end

  def accept visitor
    visitor.accept_table @header, @body, @align
  end

  def pretty_print q
    q.group 2, '[Table: ', ']' do
      q.group 2, '[Head: ', ']' do
        q.seplist @header.zip(@align) do |text, align|
          q.pp text
          if align
            q.text ":"
            q.breakable
            q.text align.to_s
          end
        end
      end
      q.breakable
      q.group 2, '[Body: ', ']' do
        q.seplist @body do |body|
          q.group 2, '[', ']' do
            q.seplist body do |text|
              q.pp text
            end
          end
        end
      end
    end
  end
end
PK)J[L��5>share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_html_snippet.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup as paragraphs with inline markup only.

class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml

  ##
  # After this many characters the input will be cut off.

  attr_reader :character_limit

  ##
  # The number of characters seen so far.

  attr_reader :characters # :nodoc:

  ##
  # The attribute bitmask

  attr_reader :mask

  ##
  # After this many paragraphs the input will be cut off.

  attr_reader :paragraph_limit

  ##
  # Count of paragraphs found

  attr_reader :paragraphs

  ##
  # Creates a new ToHtmlSnippet formatter that will cut off the input on the
  # next word boundary after the given number of +characters+ or +paragraphs+
  # of text have been encountered.

  def initialize options, characters = 100, paragraphs = 3, markup = nil
    super options, markup

    @character_limit = characters
    @paragraph_limit = paragraphs

    @characters = 0
    @mask       = 0
    @paragraphs = 0

    @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
  end

  ##
  # Adds +heading+ to the output as a paragraph

  def accept_heading heading
    @res << "<p>#{to_html heading.text}\n"

    add_paragraph
  end

  ##
  # Raw sections are untrusted and ignored

  alias accept_raw ignore

  ##
  # Rules are ignored

  alias accept_rule ignore

  ##
  # Adds +paragraph+ to the output

  def accept_paragraph paragraph
    para = @in_list_entry.last || "<p>"

    text = paragraph.text @hard_break

    @res << "#{para}#{to_html text}\n"

    add_paragraph
  end

  ##
  # Finishes consumption of +list_item+

  def accept_list_item_end list_item
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start list_item
    @res << list_item_start(list_item, @list.last)
  end

  ##
  # Prepares the visitor for consuming +list+

  def accept_list_start list
    @list << list.type
    @res << html_list_name(list.type, true)
    @in_list_entry.push ''
  end

  ##
  # Adds +verbatim+ to the output

  def accept_verbatim verbatim
    throw :done if @characters >= @character_limit
    input = verbatim.text.rstrip

    text = truncate input
    text << ' ...' unless text == input

    super RDoc::Markup::Verbatim.new text

    add_paragraph
  end

  ##
  # Prepares the visitor for HTML snippet generation

  def start_accepting
    super

    @characters = 0
  end

  ##
  # Removes escaping from the cross-references in +target+

  def handle_regexp_CROSSREF target
    target.text.sub(/\A\\/, '')
  end

  ##
  # +target+ is a <code><br></code>

  def handle_regexp_HARD_BREAK target
    @characters -= 4
    '<br>'
  end

  ##
  # Lists are paragraphs, but notes and labels have a separator

  def list_item_start list_item, list_type
    throw :done if @characters >= @character_limit

    case list_type
    when :BULLET, :LALPHA, :NUMBER, :UALPHA then
      "<p>"
    when :LABEL, :NOTE then
      labels = Array(list_item.label).map do |label|
        to_html label
      end.join ', '

      labels << " &mdash; " unless labels.empty?

      start = "<p>#{labels}"
      @characters += 1 # try to include the label
      start
    else
      raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
    end
  end

  ##
  # Returns just the text of +link+, +url+ is only used to determine the link
  # type.

  def gen_url url, text
    if url =~ /^rdoc-label:([^:]*)(?::(.*))?/ then
      type = "link"
    elsif url =~ /([A-Za-z]+):(.*)/ then
      type = $1
    else
      type = "http"
    end

    if (type == "http" or type == "https" or type == "link") and
       url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
      ''
    else
      text.sub(%r%^#{type}:/*%, '')
    end
  end

  ##
  # In snippets, there are no lists

  def html_list_name list_type, open_tag
    ''
  end

  ##
  # Throws +:done+ when paragraph_limit paragraphs have been encountered

  def add_paragraph
    @paragraphs += 1

    throw :done if @paragraphs >= @paragraph_limit
  end

  ##
  # Marks up +content+

  def convert content
    catch :done do
      return super
    end

    end_accepting
  end

  ##
  # Converts flow items +flow+

  def convert_flow flow
    throw :done if @characters >= @character_limit

    res = []
    @mask = 0

    flow.each do |item|
      case item
      when RDoc::Markup::AttrChanger then
        off_tags res, item
        on_tags  res, item
      when String then
        text = convert_string item
        res << truncate(text)
      when RDoc::Markup::RegexpHandling then
        text = convert_regexp_handling item
        res << truncate(text)
      else
        raise "Unknown flow element: #{item.inspect}"
      end

      if @characters >= @character_limit then
        off_tags res, RDoc::Markup::AttrChanger.new(0, @mask)
        break
      end
    end

    res << ' ...' if @characters >= @character_limit

    res.join
  end

  ##
  # Maintains a bitmask to allow HTML elements to be closed properly.  See
  # RDoc::Markup::Formatter.

  def on_tags res, item
    @mask ^= item.turn_on

    super
  end

  ##
  # Maintains a bitmask to allow HTML elements to be closed properly.  See
  # RDoc::Markup::Formatter.

  def off_tags res, item
    @mask ^= item.turn_off

    super
  end

  ##
  # Truncates +text+ at the end of the first word after the character_limit.

  def truncate text
    length = text.length
    characters = @characters
    @characters += length

    return text if @characters < @character_limit

    remaining = @character_limit - characters

    text =~ /\A(.{#{remaining},}?)(\s|$)/m # TODO word-break instead of \s?

    $1
  end

end
PK)J[�Gr		9share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_tt_only.rbnu�[���# frozen_string_literal: true
##
# Extracts sections of text enclosed in plus, tt or code.  Used to discover
# undocumented parameters.

class RDoc::Markup::ToTtOnly < RDoc::Markup::Formatter

  ##
  # Stack of list types

  attr_reader :list_type

  ##
  # Output accumulator

  attr_reader :res

  ##
  # Creates a new tt-only formatter.

  def initialize markup = nil
    super nil, markup

    add_tag :TT, nil, nil
  end

  ##
  # Adds tts from +block_quote+ to the output

  def accept_block_quote block_quote
    tt_sections block_quote.text
  end

  ##
  # Pops the list type for +list+ from #list_type

  def accept_list_end list
    @list_type.pop
  end

  ##
  # Pushes the list type for +list+ onto #list_type

  def accept_list_start list
    @list_type << list.type
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start list_item
    case @list_type.last
    when :NOTE, :LABEL then
      Array(list_item.label).map do |label|
        tt_sections label
      end.flatten
    end
  end

  ##
  # Adds +paragraph+ to the output

  def accept_paragraph paragraph
    tt_sections(paragraph.text)
  end

  ##
  # Does nothing to +markup_item+ because it doesn't have any user-built
  # content

  def do_nothing markup_item
  end

  alias accept_blank_line    do_nothing # :nodoc:
  alias accept_heading       do_nothing # :nodoc:
  alias accept_list_item_end do_nothing # :nodoc:
  alias accept_raw           do_nothing # :nodoc:
  alias accept_rule          do_nothing # :nodoc:
  alias accept_verbatim      do_nothing # :nodoc:

  ##
  # Extracts tt sections from +text+

  def tt_sections text
    flow = @am.flow text.dup

    flow.each do |item|
      case item
      when String then
        @res << item if in_tt?
      when RDoc::Markup::AttrChanger then
        off_tags res, item
        on_tags res, item
      when RDoc::Markup::RegexpHandling then
        @res << convert_regexp_handling(item) if in_tt? # TODO can this happen?
      else
        raise "Unknown flow element: #{item.inspect}"
      end
    end

    res
  end

  ##
  # Returns an Array of items that were wrapped in plus, tt or code.

  def end_accepting
    @res.compact
  end

  ##
  # Prepares the visitor for gathering tt sections

  def start_accepting
    @res = []

    @list_type = []
  end

end
PK)J[���ZZ7share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_label.rbnu�[���# frozen_string_literal: true
require 'cgi/util'

##
# Creates HTML-safe labels suitable for use in id attributes.  Tidylinks are
# converted to their link part and cross-reference links have the suppression
# marks removed (\\SomeClass is converted to SomeClass).

class RDoc::Markup::ToLabel < RDoc::Markup::Formatter

  attr_reader :res # :nodoc:

  ##
  # Creates a new formatter that will output HTML-safe labels

  def initialize markup = nil
    super nil, markup

    @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
    @markup.add_regexp_handling(/(((\{.*?\})|\b\S+?)\[\S+?\])/, :TIDYLINK)

    add_tag :BOLD, '', ''
    add_tag :TT,   '', ''
    add_tag :EM,   '', ''

    @res = []
  end

  ##
  # Converts +text+ to an HTML-safe label

  def convert text
    label = convert_flow @am.flow text

    CGI.escape(label).gsub('%', '-').sub(/^-/, '')
  end

  ##
  # Converts the CROSSREF +target+ to plain text, removing the suppression
  # marker, if any

  def handle_regexp_CROSSREF target
    text = target.text

    text.sub(/^\\/, '')
  end

  ##
  # Converts the TIDYLINK +target+ to just the text part

  def handle_regexp_TIDYLINK target
    text = target.text

    return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/

    $1
  end

  alias accept_blank_line         ignore
  alias accept_block_quote        ignore
  alias accept_heading            ignore
  alias accept_list_end           ignore
  alias accept_list_item_end      ignore
  alias accept_list_item_start    ignore
  alias accept_list_start         ignore
  alias accept_paragraph          ignore
  alias accept_raw                ignore
  alias accept_rule               ignore
  alias accept_verbatim           ignore
  alias end_accepting             ignore
  alias handle_regexp_HARD_BREAK  ignore
  alias start_accepting           ignore

end
PK)J[��&���Cshare/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_table_of_contents.rbnu�[���# frozen_string_literal: true
##
# Extracts just the RDoc::Markup::Heading elements from a
# RDoc::Markup::Document to help build a table of contents

class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter

  @to_toc = nil

  ##
  # Singleton for table-of-contents generation

  def self.to_toc
    @to_toc ||= new
  end

  ##
  # Output accumulator

  attr_reader :res

  ##
  # Omits headings with a level less than the given level.

  attr_accessor :omit_headings_below

  def initialize # :nodoc:
    super nil

    @omit_headings_below = nil
  end

  ##
  # Adds +document+ to the output, using its heading cutoff if present

  def accept_document document
    @omit_headings_below = document.omit_headings_below

    super
  end

  ##
  # Adds +heading+ to the table of contents

  def accept_heading heading
    @res << heading unless suppressed? heading
  end

  ##
  # Returns the table of contents

  def end_accepting
    @res
  end

  ##
  # Prepares the visitor for text generation

  def start_accepting
    @omit_headings_below = nil
    @res = []
  end

  ##
  # Returns true if +heading+ is below the display threshold

  def suppressed? heading
    return false unless @omit_headings_below

    heading.level > @omit_headings_below
  end

  # :stopdoc:
  alias accept_block_quote     ignore
  alias accept_raw             ignore
  alias accept_rule            ignore
  alias accept_blank_line      ignore
  alias accept_paragraph       ignore
  alias accept_verbatim        ignore
  alias accept_list_end        ignore
  alias accept_list_item_start ignore
  alias accept_list_item_end   ignore
  alias accept_list_end_bullet ignore
  alias accept_list_start      ignore
  alias accept_table           ignore
  # :startdoc:

end
PK)J[���9�95share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/parser.rbnu�[���# frozen_string_literal: true
require 'strscan'

##
# A recursive-descent parser for RDoc markup.
#
# The parser tokenizes an input string then parses the tokens into a Document.
# Documents can be converted into output formats by writing a visitor like
# RDoc::Markup::ToHTML.
#
# The parser only handles the block-level constructs Paragraph, List,
# ListItem, Heading, Verbatim, BlankLine, Rule and BlockQuote.
# Inline markup such as <tt>\+blah\+</tt> is handled separately by
# RDoc::Markup::AttributeManager.
#
# To see what markup the Parser implements read RDoc.  To see how to use
# RDoc markup to format text in your program read RDoc::Markup.

class RDoc::Markup::Parser

  include RDoc::Text

  ##
  # List token types

  LIST_TOKENS = [
    :BULLET,
    :LABEL,
    :LALPHA,
    :NOTE,
    :NUMBER,
    :UALPHA,
  ]

  ##
  # Parser error subclass

  class Error < RuntimeError; end

  ##
  # Raised when the parser is unable to handle the given markup

  class ParseError < Error; end

  ##
  # Enables display of debugging information

  attr_accessor :debug

  ##
  # Token accessor

  attr_reader :tokens

  ##
  # Parses +str+ into a Document.
  #
  # Use RDoc::Markup#parse instead of this method.

  def self.parse str
    parser = new
    parser.tokenize str
    doc = RDoc::Markup::Document.new
    parser.parse doc
  end

  ##
  # Returns a token stream for +str+, for testing

  def self.tokenize str
    parser = new
    parser.tokenize str
    parser.tokens
  end

  ##
  # Creates a new Parser.  See also ::parse

  def initialize
    @binary_input   = nil
    @current_token  = nil
    @debug          = false
    @s              = nil
    @tokens         = []
  end

  ##
  # Builds a Heading of +level+

  def build_heading level
    type, text, = get

    text = case type
           when :TEXT then
             skip :NEWLINE
             text
           else
             unget
             ''
           end

    RDoc::Markup::Heading.new level, text
  end

  ##
  # Builds a List flush to +margin+

  def build_list margin
    p :list_start => margin if @debug

    list = RDoc::Markup::List.new
    label = nil

    until @tokens.empty? do
      type, data, column, = get

      case type
      when *LIST_TOKENS then
        if column < margin || (list.type && list.type != type) then
          unget
          break
        end

        list.type = type
        peek_type, _, column, = peek_token

        case type
        when :NOTE, :LABEL then
          label = [] unless label

          if peek_type == :NEWLINE then
            # description not on the same line as LABEL/NOTE
            # skip the trailing newline & any blank lines below
            while peek_type == :NEWLINE
              get
              peek_type, _, column, = peek_token
            end

            # we may be:
            #   - at end of stream
            #   - at a column < margin:
            #         [text]
            #       blah blah blah
            #   - at the same column, but with a different type of list item
            #       [text]
            #       * blah blah
            #   - at the same column, with the same type of list item
            #       [one]
            #       [two]
            # In all cases, we have an empty description.
            # In the last case only, we continue.
            if peek_type.nil? || column < margin then
              empty = true
            elsif column == margin then
              case peek_type
              when type
                empty = :continue
              when *LIST_TOKENS
                empty = true
              else
                empty = false
              end
            else
              empty = false
            end

            if empty then
              label << data
              next if empty == :continue
              break
            end
          end
        else
          data = nil
        end

        if label then
          data = label << data
          label = nil
        end

        list_item = RDoc::Markup::ListItem.new data
        parse list_item, column
        list << list_item

      else
        unget
        break
      end
    end

    p :list_end => margin if @debug

    if list.empty? then
      return nil unless label
      return nil unless [:LABEL, :NOTE].include? list.type

      list_item = RDoc::Markup::ListItem.new label, RDoc::Markup::BlankLine.new
      list << list_item
    end

    list
  end

  ##
  # Builds a Paragraph that is flush to +margin+

  def build_paragraph margin
    p :paragraph_start => margin if @debug

    paragraph = RDoc::Markup::Paragraph.new

    until @tokens.empty? do
      type, data, column, = get

      if type == :TEXT and column == margin then
        paragraph << data

        break if peek_token.first == :BREAK

        data << ' ' if skip :NEWLINE and /#{SPACE_SEPARATED_LETTER_CLASS}\z/o.match?(data)
      else
        unget
        break
      end
    end

    paragraph.parts.last.sub!(/ \z/, '') # cleanup

    p :paragraph_end => margin if @debug

    paragraph
  end

  ##
  # Builds a Verbatim that is indented from +margin+.
  #
  # The verbatim block is shifted left (the least indented lines start in
  # column 0).  Each part of the verbatim is one line of text, always
  # terminated by a newline.  Blank lines always consist of a single newline
  # character, and there is never a single newline at the end of the verbatim.

  def build_verbatim margin
    p :verbatim_begin => margin if @debug
    verbatim = RDoc::Markup::Verbatim.new

    min_indent = nil
    generate_leading_spaces = true
    line = ''.dup

    until @tokens.empty? do
      type, data, column, = get

      if type == :NEWLINE then
        line << data
        verbatim << line
        line = ''.dup
        generate_leading_spaces = true
        next
      end

      if column <= margin
        unget
        break
      end

      if generate_leading_spaces then
        indent = column - margin
        line << ' ' * indent
        min_indent = indent if min_indent.nil? || indent < min_indent
        generate_leading_spaces = false
      end

      case type
      when :HEADER then
        line << '=' * data
        _, _, peek_column, = peek_token
        peek_column ||= column + data
        indent = peek_column - column - data
        line << ' ' * indent
      when :RULE then
        width = 2 + data
        line << '-' * width
        _, _, peek_column, = peek_token
        peek_column ||= column + width
        indent = peek_column - column - width
        line << ' ' * indent
      when :BREAK, :TEXT then
        line << data
      when :BLOCKQUOTE then
        line << '>>>'
        peek_type, _, peek_column = peek_token
        if peek_type != :NEWLINE and peek_column
          line << ' ' * (peek_column - column - 3)
        end
      else # *LIST_TOKENS
        list_marker = case type
                      when :BULLET then data
                      when :LABEL  then "[#{data}]"
                      when :NOTE   then "#{data}::"
                      else # :LALPHA, :NUMBER, :UALPHA
                        "#{data}."
                      end
        line << list_marker
        peek_type, _, peek_column = peek_token
        unless peek_type == :NEWLINE then
          peek_column ||= column + list_marker.length
          indent = peek_column - column - list_marker.length
          line << ' ' * indent
        end
      end

    end

    verbatim << line << "\n" unless line.empty?
    verbatim.parts.each { |p| p.slice!(0, min_indent) unless p == "\n" } if min_indent > 0
    verbatim.normalize

    p :verbatim_end => margin if @debug

    verbatim
  end

  ##
  # Pulls the next token from the stream.

  def get
    @current_token = @tokens.shift
    p :get => @current_token if @debug
    @current_token
  end

  ##
  # Parses the tokens into an array of RDoc::Markup::XXX objects,
  # and appends them to the passed +parent+ RDoc::Markup::YYY object.
  #
  # Exits at the end of the token stream, or when it encounters a token
  # in a column less than +indent+ (unless it is a NEWLINE).
  #
  # Returns +parent+.

  def parse parent, indent = 0
    p :parse_start => indent if @debug

    until @tokens.empty? do
      type, data, column, = get

      case type
      when :BREAK then
        parent << RDoc::Markup::BlankLine.new
        skip :NEWLINE, false
        next
      when :NEWLINE then
        # trailing newlines are skipped below, so this is a blank line
        parent << RDoc::Markup::BlankLine.new
        skip :NEWLINE, false
        next
      end

      # indentation change: break or verbatim
      if column < indent then
        unget
        break
      elsif column > indent then
        unget
        parent << build_verbatim(indent)
        next
      end

      # indentation is the same
      case type
      when :HEADER then
        parent << build_heading(data)
      when :RULE then
        parent << RDoc::Markup::Rule.new(data)
        skip :NEWLINE
      when :TEXT then
        unget
        parse_text parent, indent
      when :BLOCKQUOTE then
        nil while (type, = get; type) and type != :NEWLINE
        _, _, column, = peek_token
        bq = RDoc::Markup::BlockQuote.new
        p :blockquote_start => [data, column] if @debug
        parse bq, column
        p :blockquote_end => indent if @debug
        parent << bq
      when *LIST_TOKENS then
        unget
        parent << build_list(indent)
      else
        type, data, column, line = @current_token
        raise ParseError, "Unhandled token #{type} (#{data.inspect}) at #{line}:#{column}"
      end
    end

    p :parse_end => indent if @debug

    parent

  end

  ##
  # Small hook that is overridden by RDoc::TomDoc

  def parse_text parent, indent # :nodoc:
    parent << build_paragraph(indent)
  end

  ##
  # Returns the next token on the stream without modifying the stream

  def peek_token
    token = @tokens.first || []
    p :peek => token if @debug
    token
  end

  ##
  # A simple wrapper of StringScanner that is aware of the current column and lineno

  class MyStringScanner
    # :stopdoc:

    def initialize(input)
      @line = @column = 0
      @s = StringScanner.new input
    end

    def scan(re)
      ret = @s.scan(re)
      @column += ret.length if ret
      ret
    end

    def unscan(s)
      @s.pos -= s.bytesize
      @column -= s.length
    end

    def pos
      [@column, @line]
    end

    def newline!
      @column = 0
      @line += 1
    end

    def eos?
      @s.eos?
    end

    def matched
      @s.matched
    end

    def [](i)
      @s[i]
    end

    #:startdoc:
  end

  ##
  # Creates the StringScanner

  def setup_scanner input
    @s = MyStringScanner.new input
  end

  ##
  # Skips the next token if its type is +token_type+.
  #
  # Optionally raises an error if the next token is not of the expected type.

  def skip token_type, error = true
    type, = get
    return unless type # end of stream
    return @current_token if token_type == type
    unget
    raise ParseError, "expected #{token_type} got #{@current_token.inspect}" if error
  end

  ##
  # Turns text +input+ into a stream of tokens

  def tokenize input
    setup_scanner input

    until @s.eos? do
      pos = @s.pos

      # leading spaces will be reflected by the column of the next token
      # the only thing we loose are trailing spaces at the end of the file
      next if @s.scan(/ +/)

      # note: after BULLET, LABEL, etc.,
      # indent will be the column of the next non-newline token

      @tokens << case
                 # [CR]LF => :NEWLINE
                 when @s.scan(/\r?\n/) then
                   token = [:NEWLINE, @s.matched, *pos]
                   @s.newline!
                   token
                 # === text => :HEADER then :TEXT
                 when @s.scan(/(=+)(\s*)/) then
                   level = @s[1].length
                   header = [:HEADER, level, *pos]

                   if @s[2] =~ /^\r?\n/ then
                     @s.unscan(@s[2])
                     header
                   else
                     pos = @s.pos
                     @s.scan(/.*/)
                     @tokens << header
                     [:TEXT, @s.matched.sub(/\r$/, ''), *pos]
                   end
                 # --- (at least 3) and nothing else on the line => :RULE
                 when @s.scan(/(-{3,}) *\r?$/) then
                   [:RULE, @s[1].length - 2, *pos]
                 # * or - followed by white space and text => :BULLET
                 when @s.scan(/([*-]) +(\S)/) then
                   @s.unscan(@s[2])
                   [:BULLET, @s[1], *pos]
                 # A. text, a. text, 12. text => :UALPHA, :LALPHA, :NUMBER
                 when @s.scan(/([a-z]|\d+)\. +(\S)/i) then
                   # FIXME if tab(s), the column will be wrong
                   # either support tabs everywhere by first expanding them to
                   # spaces, or assume that they will have been replaced
                   # before (and provide a check for that at least in debug
                   # mode)
                   list_label = @s[1]
                   @s.unscan(@s[2])
                   list_type =
                     case list_label
                     when /[a-z]/ then :LALPHA
                     when /[A-Z]/ then :UALPHA
                     when /\d/    then :NUMBER
                     else
                       raise ParseError, "BUG token #{list_label}"
                     end
                   [list_type, list_label, *pos]
                 # [text] followed by spaces or end of line => :LABEL
                 when @s.scan(/\[(.*?)\]( +|\r?$)/) then
                   [:LABEL, @s[1], *pos]
                 # text:: followed by spaces or end of line => :NOTE
                 when @s.scan(/(.*?)::( +|\r?$)/) then
                   [:NOTE, @s[1], *pos]
                 # >>> followed by end of line => :BLOCKQUOTE
                 when @s.scan(/>>> *(\w+)?$/) then
                   if word = @s[1]
                     @s.unscan(word)
                   end
                   [:BLOCKQUOTE, word, *pos]
                 # anything else: :TEXT
                 else
                   @s.scan(/(.*?)(  )?\r?$/)
                   token = [:TEXT, @s[1], *pos]

                   if @s[2] then
                     @tokens << token
                     [:BREAK, @s[2], pos[0] + @s[1].length, pos[1]]
                   else
                     token
                   end
                 end
    end

    self
  end

  ##
  # Returns the current token to the token stream

  def unget
    token = @current_token
    p :unget => token if @debug
    raise Error, 'too many #ungets' if token == @tokens.first
    @tokens.unshift token if token
  end

end
PK)J[���::3share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/rule.rbnu�[���# frozen_string_literal: true
##
# A horizontal rule with a weight

class RDoc::Markup::Rule < Struct.new :weight

  ##
  # Calls #accept_rule on +visitor+

  def accept visitor
    visitor.accept_rule self
  end

  def pretty_print q # :nodoc:
    q.group 2, '[rule:', ']' do
      q.pp weight
    end
  end

end
PK)J[)����6share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/heading.rbnu�[���# frozen_string_literal: true
##
# A heading with a level (1-6) and text

RDoc::Markup::Heading =
  Struct.new :level, :text do

  @to_html = nil
  @to_label = nil

  ##
  # A singleton RDoc::Markup::ToLabel formatter for headings.

  def self.to_label
    @to_label ||= RDoc::Markup::ToLabel.new
  end

  ##
  # A singleton plain HTML formatter for headings.  Used for creating labels
  # for the Table of Contents

  def self.to_html
    return @to_html if @to_html

    markup = RDoc::Markup.new
    markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF

    @to_html = RDoc::Markup::ToHtml.new nil

    def @to_html.handle_regexp_CROSSREF target
      target.text.sub(/^\\/, '')
    end

    @to_html
  end

  ##
  # Calls #accept_heading on +visitor+

  def accept visitor
    visitor.accept_heading self
  end

  ##
  # An HTML-safe anchor reference for this header.

  def aref
    "label-#{self.class.to_label.convert text.dup}"
  end

  ##
  # Creates a fully-qualified label which will include the label from
  # +context+.  This helps keep ids unique in HTML.

  def label context = nil
    label = aref

    label = [context.aref, label].compact.join '-' if
      context and context.respond_to? :aref

    label
  end

  ##
  # HTML markup of the text of this label without the surrounding header
  # element.

  def plain_html
    self.class.to_html.to_html(text.dup)
  end

  def pretty_print q # :nodoc:
    q.group 2, "[head: #{level} ", ']' do
      q.pp text
    end
  end

end
PK)J[?V�eDD3share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/list.rbnu�[���# frozen_string_literal: true
##
# A List is a homogeneous set of ListItems.
#
# The supported list types include:
#
# :BULLET::
#   An unordered list
# :LABEL::
#   An unordered definition list, but using an alternate RDoc::Markup syntax
# :LALPHA::
#   An ordered list using increasing lowercase English letters
# :NOTE::
#   An unordered definition list
# :NUMBER::
#   An ordered list using increasing Arabic numerals
# :UALPHA::
#   An ordered list using increasing uppercase English letters
#
# Definition lists behave like HTML definition lists.  Each list item can
# describe multiple terms.  See RDoc::Markup::ListItem for how labels and
# definition are stored as list items.

class RDoc::Markup::List

  ##
  # The list's type

  attr_accessor :type

  ##
  # Items in the list

  attr_reader :items

  ##
  # Creates a new list of +type+ with +items+.  Valid list types are:
  # +:BULLET+, +:LABEL+, +:LALPHA+, +:NOTE+, +:NUMBER+, +:UALPHA+

  def initialize type = nil, *items
    @type = type
    @items = []
    @items.concat items
  end

  ##
  # Appends +item+ to the list

  def << item
    @items << item
  end

  def == other # :nodoc:
    self.class == other.class and
      @type == other.type and
      @items == other.items
  end

  ##
  # Runs this list and all its #items through +visitor+

  def accept visitor
    visitor.accept_list_start self

    @items.each do |item|
      item.accept visitor
    end

    visitor.accept_list_end self
  end

  ##
  # Is the list empty?

  def empty?
    @items.empty?
  end

  ##
  # Returns the last item in the list

  def last
    @items.last
  end

  def pretty_print q # :nodoc:
    q.group 2, "[list: #{@type} ", ']' do
      q.seplist @items do |item|
        q.pp item
      end
    end
  end

  ##
  # Appends +items+ to the list

  def push *items
    @items.concat items
  end

end
PK)J[��xd		4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_bs.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup with hot backspace action!  You will probably need a
# pager to use this output format.
#
# This formatter won't work on 1.8.6 because it lacks String#chars.

class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc

  ##
  # Returns a new ToBs that is ready for hot backspace action!

  def initialize markup = nil
    super

    @in_b  = false
    @in_em = false
  end

  ##
  # Sets a flag that is picked up by #annotate to do the right thing in
  # #convert_string

  def init_tags
    add_tag :BOLD, '+b', '-b'
    add_tag :EM,   '+_', '-_'
    add_tag :TT,   '', ''   # we need in_tt information maintained
  end

  ##
  # Makes heading text bold.

  def accept_heading heading
    use_prefix or @res << ' ' * @indent
    @res << @headings[heading.level][0]
    @in_b = true
    @res << attributes(heading.text)
    @in_b = false
    @res << @headings[heading.level][1]
    @res << "\n"
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start list_item
    type = @list_type.last

    case type
    when :NOTE, :LABEL then
      bullets = Array(list_item.label).map do |label|
        attributes(label).strip
      end.join "\n"

      bullets << ":\n" unless bullets.empty?

      @prefix = ' ' * @indent
      @indent += 2
      @prefix << bullets + (' ' * @indent)
    else
      bullet = type == :BULLET ? '*' :  @list_index.last.to_s + '.'
      @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
      width = bullet.length + 1
      @indent += width
    end
  end

  ##
  # Turns on or off regexp handling for +convert_string+

  def annotate tag
    case tag
    when '+b' then @in_b = true
    when '-b' then @in_b = false
    when '+_' then @in_em = true
    when '-_' then @in_em = false
    end
    ''
  end

  ##
  # Calls convert_string on the result of convert_regexp_handling

  def convert_regexp_handling target
    convert_string super
  end

  ##
  # Adds bold or underline mixed with backspaces

  def convert_string string
    return string unless @in_b or @in_em
    chars = if @in_b then
              string.chars.map do |char| "#{char}\b#{char}" end
            elsif @in_em then
              string.chars.map do |char| "_\b#{char}" end
            end

    chars.join
  end

end
PK)J[�I?�<<6share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/include.rbnu�[���# frozen_string_literal: true
##
# A file included at generation time.  Objects of this class are created by
# RDoc::RD for an extension-less include.
#
# This implementation in incomplete.

class RDoc::Markup::Include

  ##
  # The filename to be included, without extension

  attr_reader :file

  ##
  # Directories to search for #file

  attr_reader :include_path

  ##
  # Creates a new include that will import +file+ from +include_path+

  def initialize file, include_path
    @file = file
    @include_path = include_path
  end

  def == other # :nodoc:
    self.class === other and
      @file == other.file and @include_path == other.include_path
  end

  def pretty_print q # :nodoc:
    q.group 2, '[incl ', ']' do
      q.text file
      q.breakable
      q.text 'from '
      q.pp include_path
    end
  end

end
PK)J[[�Ba��>share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/regexp_handling.rbnu�[���# frozen_string_literal: true
##
# Hold details of a regexp handling sequence

class RDoc::Markup::RegexpHandling

  ##
  # Regexp handling type

  attr_reader   :type

  ##
  # Regexp handling text

  attr_accessor :text

  ##
  # Creates a new regexp handling sequence of +type+ with +text+

  def initialize(type, text)
    @type, @text = type, text
  end

  ##
  # Regexp handlings are equal when the have the same text and type

  def ==(o)
    self.text == o.text && self.type == o.type
  end

  def inspect # :nodoc:
    "#<RDoc::Markup::RegexpHandling:0x%x @type=%p, @text=%p>" % [
      object_id, @type, text.dump]
  end

  def to_s # :nodoc:
    "RegexpHandling: type=#{type} text=#{text.dump}"
  end

end
PK)J[g�͗��6share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_rdoc.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup as RDoc markup! (mostly)

class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter

  ##
  # Current indent amount for output in characters

  attr_accessor :indent

  ##
  # Output width in characters

  attr_accessor :width

  ##
  # Stack of current list indexes for alphabetic and numeric lists

  attr_reader :list_index

  ##
  # Stack of list types

  attr_reader :list_type

  ##
  # Stack of list widths for indentation

  attr_reader :list_width

  ##
  # Prefix for the next list item.  See #use_prefix

  attr_reader :prefix

  ##
  # Output accumulator

  attr_reader :res

  ##
  # Creates a new formatter that will output (mostly) \RDoc markup

  def initialize markup = nil
    super nil, markup

    @markup.add_regexp_handling(/\\\S/, :SUPPRESSED_CROSSREF)
    @width = 78
    init_tags

    @headings = {}
    @headings.default = []

    @headings[1] = ['= ',      '']
    @headings[2] = ['== ',     '']
    @headings[3] = ['=== ',    '']
    @headings[4] = ['==== ',   '']
    @headings[5] = ['===== ',  '']
    @headings[6] = ['====== ', '']

    @hard_break = "\n"
  end

  ##
  # Maps attributes to HTML sequences

  def init_tags
    add_tag :BOLD, "<b>", "</b>"
    add_tag :TT,   "<tt>", "</tt>"
    add_tag :EM,   "<em>", "</em>"
  end

  ##
  # Adds +blank_line+ to the output

  def accept_blank_line blank_line
    @res << "\n"
  end

  ##
  # Adds +paragraph+ to the output

  def accept_block_quote block_quote
    @indent += 2

    block_quote.parts.each do |part|
      @prefix = '> '

      part.accept self
    end

    @indent -= 2
  end

  ##
  # Adds +heading+ to the output

  def accept_heading heading
    use_prefix or @res << ' ' * @indent
    @res << @headings[heading.level][0]
    @res << attributes(heading.text)
    @res << @headings[heading.level][1]
    @res << "\n"
  end

  ##
  # Finishes consumption of +list+

  def accept_list_end list
    @list_index.pop
    @list_type.pop
    @list_width.pop
  end

  ##
  # Finishes consumption of +list_item+

  def accept_list_item_end list_item
    width = case @list_type.last
            when :BULLET then
              2
            when :NOTE, :LABEL then
              if @prefix then
                @res << @prefix.strip
                @prefix = nil
              end

              @res << "\n"
              2
            else
              bullet = @list_index.last.to_s
              @list_index[-1] = @list_index.last.succ
              bullet.length + 2
            end

    @indent -= width
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start list_item
    type = @list_type.last

    case type
    when :NOTE, :LABEL then
      stripped_labels = Array(list_item.label).map do |label|
        attributes(label).strip
      end

      bullets = case type
      when :NOTE
        stripped_labels.map { |b| "#{b}::" }
      when :LABEL
        stripped_labels.map { |b| "[#{b}]" }
      end

      bullets = bullets.join("\n")
      bullets << "\n" unless stripped_labels.empty?

      @prefix = ' ' * @indent
      @indent += 2
      @prefix << bullets + (' ' * @indent)
    else
      bullet = type == :BULLET ? '*' :  @list_index.last.to_s + '.'
      @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
      width = bullet.length + 1
      @indent += width
    end
  end

  ##
  # Prepares the visitor for consuming +list+

  def accept_list_start list
    case list.type
    when :BULLET then
      @list_index << nil
      @list_width << 1
    when :LABEL, :NOTE then
      @list_index << nil
      @list_width << 2
    when :LALPHA then
      @list_index << 'a'
      @list_width << list.items.length.to_s.length
    when :NUMBER then
      @list_index << 1
      @list_width << list.items.length.to_s.length
    when :UALPHA then
      @list_index << 'A'
      @list_width << list.items.length.to_s.length
    else
      raise RDoc::Error, "invalid list type #{list.type}"
    end

    @list_type << list.type
  end

  ##
  # Adds +paragraph+ to the output

  def accept_paragraph paragraph
    text = paragraph.text @hard_break
    wrap attributes text
  end

  ##
  # Adds +paragraph+ to the output

  def accept_indented_paragraph paragraph
    @indent += paragraph.indent
    text = paragraph.text @hard_break
    wrap attributes text
    @indent -= paragraph.indent
  end

  ##
  # Adds +raw+ to the output

  def accept_raw raw
    @res << raw.parts.join("\n")
  end

  ##
  # Adds +rule+ to the output

  def accept_rule rule
    use_prefix or @res << ' ' * @indent
    @res << '-' * (@width - @indent)
    @res << "\n"
  end

  ##
  # Outputs +verbatim+ indented 2 columns

  def accept_verbatim verbatim
    indent = ' ' * (@indent + 2)

    verbatim.parts.each do |part|
      @res << indent unless part == "\n"
      @res << part
    end

    @res << "\n"
  end

  ##
  # Adds +table+ to the output

  def accept_table header, body, aligns
    widths = header.zip(*body).map do |cols|
      cols.map(&:size).max
    end
    aligns = aligns.map do |a|
      case a
      when nil, :center
        :center
      when :left
        :ljust
      when :right
        :rjust
      end
    end
    @res << header.zip(widths, aligns).map do |h, w, a|
      h.__send__(a, w)
    end.join("|").rstrip << "\n"
    @res << widths.map {|w| "-" * w }.join("|") << "\n"
    body.each do |row|
      @res << row.zip(widths, aligns).map do |t, w, a|
        t.__send__(a, w)
      end.join("|").rstrip << "\n"
    end
  end

  ##
  # Applies attribute-specific markup to +text+ using RDoc::AttributeManager

  def attributes text
    flow = @am.flow text.dup
    convert_flow flow
  end

  ##
  # Returns the generated output

  def end_accepting
    @res.join
  end

  ##
  # Removes preceding \\ from the suppressed crossref +target+

  def handle_regexp_SUPPRESSED_CROSSREF target
    text = target.text
    text = text.sub('\\', '') unless in_tt?
    text
  end

  ##
  # Adds a newline to the output

  def handle_regexp_HARD_BREAK target
    "\n"
  end

  ##
  # Prepares the visitor for text generation

  def start_accepting
    @res = [""]
    @indent = 0
    @prefix = nil

    @list_index = []
    @list_type  = []
    @list_width = []
  end

  ##
  # Adds the stored #prefix to the output and clears it.  Lists generate a
  # prefix for later consumption.

  def use_prefix
    prefix, @prefix = @prefix, nil
    @res << prefix if prefix

    prefix
  end

  ##
  # Wraps +text+ to #width

  def wrap text
    return unless text && !text.empty?

    text_len = @width - @indent

    text_len = 20 if text_len < 20

    next_prefix = ' ' * @indent

    prefix = @prefix || next_prefix
    @prefix = nil

    text.scan(/\G(?:([^ \n]{#{text_len}})(?=[^ \n])|(.{1,#{text_len}})(?:[ \n]|\z))/) do
      @res << prefix << ($1 || $2) << "\n"
      prefix = next_prefix
    end
  end

end
PK)J[e��X��8share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attr_span.rbnu�[���# frozen_string_literal: true
##
# An array of attributes which parallels the characters in a string.

class RDoc::Markup::AttrSpan

  ##
  # Creates a new AttrSpan for +length+ characters

  def initialize(length, exclusive)
    @attrs = Array.new(length, 0)
    @exclusive = exclusive
  end

  ##
  # Toggles +bits+ from +start+ to +length+
  def set_attrs(start, length, bits)
    updated = false
    for i in start ... (start+length)
      if (@exclusive & @attrs[i]) == 0 || (@exclusive & bits) != 0
        @attrs[i] |= bits
        updated = true
      end
    end
    updated
  end

  ##
  # Accesses flags for character +n+

  def [](n)
    @attrs[n]
  end

end
PK)J[�sU��Ashare/gems/gems/rdoc-6.10.0/lib/rdoc/markup/indented_paragraph.rbnu�[���# frozen_string_literal: true
##
# An Indented Paragraph of text

class RDoc::Markup::IndentedParagraph < RDoc::Markup::Raw

  ##
  # The indent in number of spaces

  attr_reader :indent

  ##
  # Creates a new IndentedParagraph containing +parts+ indented with +indent+
  # spaces

  def initialize indent, *parts
    @indent = indent

    super(*parts)
  end

  def == other # :nodoc:
    super and indent == other.indent
  end

  ##
  # Calls #accept_indented_paragraph on +visitor+

  def accept visitor
    visitor.accept_indented_paragraph self
  end

  ##
  # Joins the raw paragraph text and converts inline HardBreaks to the
  # +hard_break+ text followed by the indent.

  def text hard_break = nil
    @parts.map do |part|
      if RDoc::Markup::HardBreak === part then
        '%1$s%3$*2$s' % [hard_break, @indent, ' '] if hard_break
      else
        part
      end
    end.join
  end

end
PK)J[�0kk��8share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/list_item.rbnu�[���# frozen_string_literal: true
##
# An item within a List that contains paragraphs, headings, etc.
#
# For BULLET, NUMBER, LALPHA and UALPHA lists, the label will always be nil.
# For NOTE and LABEL lists, the list label may contain:
#
# * a single String for a single label
# * an Array of Strings for a list item with multiple terms
# * nil for an extra description attached to a previously labeled list item

class RDoc::Markup::ListItem

  ##
  # The label for the ListItem

  attr_accessor :label

  ##
  # Parts of the ListItem

  attr_reader :parts

  ##
  # Creates a new ListItem with an optional +label+ containing +parts+

  def initialize label = nil, *parts
    @label = label
    @parts = []
    @parts.concat parts
  end

  ##
  # Appends +part+ to the ListItem

  def << part
    @parts << part
  end

  def == other # :nodoc:
    self.class == other.class and
      @label == other.label and
      @parts == other.parts
  end

  ##
  # Runs this list item and all its #parts through +visitor+

  def accept visitor
    visitor.accept_list_item_start self

    @parts.each do |part|
      part.accept visitor
    end

    visitor.accept_list_item_end self
  end

  ##
  # Is the ListItem empty?

  def empty?
    @parts.empty?
  end

  ##
  # Length of parts in the ListItem

  def length
    @parts.length
  end

  def pretty_print q # :nodoc:
    q.group 2, '[item: ', ']' do
      case @label
      when Array then
        q.pp @label
        q.text ';'
        q.breakable
      when String then
        q.pp @label
        q.text ';'
        q.breakable
      end

      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Adds +parts+ to the ListItem

  def push *parts
    @parts.concat parts
  end

end
PK)J[v�!��:share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/block_quote.rbnu�[���# frozen_string_literal: true
##
# A quoted section which contains markup items.

class RDoc::Markup::BlockQuote < RDoc::Markup::Raw

  ##
  # Calls #accept_block_quote on +visitor+

  def accept visitor
    visitor.accept_block_quote self
  end

end
PK)J[,'3���7share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/document.rbnu�[���# frozen_string_literal: true
##
# A Document containing lists, headings, paragraphs, etc.

class RDoc::Markup::Document

  include Enumerable

  ##
  # The file this document was created from.  See also
  # RDoc::ClassModule#add_comment

  attr_reader :file

  ##
  # If a heading is below the given level it will be omitted from the
  # table_of_contents

  attr_accessor :omit_headings_below

  ##
  # The parts of the Document

  attr_reader :parts

  ##
  # Creates a new Document with +parts+

  def initialize *parts
    @parts = []
    @parts.concat parts

    @file = nil
    @omit_headings_from_table_of_contents_below = nil
  end

  ##
  # Appends +part+ to the document

  def << part
    case part
    when RDoc::Markup::Document then
      unless part.empty? then
        parts.concat part.parts
        parts << RDoc::Markup::BlankLine.new
      end
    when String then
      raise ArgumentError,
            "expected RDoc::Markup::Document and friends, got String" unless
        part.empty?
    else
      parts << part
    end
  end

  def == other # :nodoc:
    self.class == other.class and
      @file == other.file and
      @parts == other.parts
  end

  ##
  # Runs this document and all its #items through +visitor+

  def accept visitor
    visitor.start_accepting

    visitor.accept_document self

    visitor.end_accepting
  end

  ##
  # Concatenates the given +parts+ onto the document

  def concat parts
    self.parts.concat parts
  end

  ##
  # Enumerator for the parts of this document

  def each &block
    @parts.each(&block)
  end

  ##
  # Does this document have no parts?

  def empty?
    @parts.empty? or (@parts.length == 1 and merged? and @parts.first.empty?)
  end

  ##
  # The file this Document was created from.

  def file= location
    @file = case location
            when RDoc::TopLevel then
              location.relative_name
            else
              location
            end
  end

  ##
  # When this is a collection of documents (#file is not set and this document
  # contains only other documents as its direct children) #merge replaces
  # documents in this class with documents from +other+ when the file matches
  # and adds documents from +other+ when the files do not.
  #
  # The information in +other+ is preferred over the receiver

  def merge other
    if empty? then
      @parts = other.parts
      return self
    end

    other.parts.each do |other_part|
      self.parts.delete_if do |self_part|
        self_part.file and self_part.file == other_part.file
      end

      self.parts << other_part
    end

    self
  end

  ##
  # Does this Document contain other Documents?

  def merged?
    RDoc::Markup::Document === @parts.first
  end

  def pretty_print q # :nodoc:
    start = @file ? "[doc (#{@file}): " : '[doc: '

    q.group 2, start, ']' do
      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Appends +parts+ to the document

  def push *parts
    self.parts.concat parts
  end

  ##
  # Returns an Array of headings in the document.
  #
  # Require 'rdoc/markup/formatter' before calling this method.

  def table_of_contents
    accept RDoc::Markup::ToTableOfContents.to_toc
  end

end
PK)J[z�	��6share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_test.rbnu�[���# frozen_string_literal: true
##
# This Markup outputter is used for testing purposes.

class RDoc::Markup::ToTest < RDoc::Markup::Formatter

  # :stopdoc:

  ##
  # :section: Visitor

  def start_accepting
    @res = []
    @list = []
  end

  def end_accepting
    @res
  end

  def accept_paragraph(paragraph)
    @res << convert_flow(@am.flow(paragraph.text))
  end

  def accept_raw raw
    @res << raw.parts.join
  end

  def accept_verbatim(verbatim)
    @res << verbatim.text.gsub(/^(\S)/, '  \1')
  end

  def accept_list_start(list)
    @list << case list.type
             when :BULLET then
               '*'
             when :NUMBER then
               '1'
             else
               list.type
             end
  end

  def accept_list_end(list)
    @list.pop
  end

  def accept_list_item_start(list_item)
    @res << "#{' ' * (@list.size - 1)}#{@list.last}: "
  end

  def accept_list_item_end(list_item)
  end

  def accept_blank_line(blank_line)
    @res << "\n"
  end

  def accept_heading(heading)
    @res << "#{'=' * heading.level} #{heading.text}"
  end

  def accept_rule(rule)
    @res << '-' * rule.weight
  end

  # :startdoc:

end
PK)J[7��	%	%:share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/pre_process.rbnu�[���# frozen_string_literal: true
##
# Handle common directives that can occur in a block of text:
#
#   \:include: filename
#
# Directives can be escaped by preceding them with a backslash.
#
# RDoc plugin authors can register additional directives to be handled by
# using RDoc::Markup::PreProcess::register.
#
# Any directive that is not built-in to RDoc (including those registered via
# plugins) will be stored in the metadata hash on the CodeObject the comment
# is attached to.  See RDoc::Markup@Directives for the list of built-in
# directives.

class RDoc::Markup::PreProcess

  ##
  # An RDoc::Options instance that will be filled in with overrides from
  # directives

  attr_accessor :options

  ##
  # Adds a post-process handler for directives.  The handler will be called
  # with the result RDoc::Comment (or text String) and the code object for the
  # comment (if any).

  def self.post_process &block
    @post_processors << block
  end

  ##
  # Registered post-processors

  def self.post_processors
    @post_processors
  end

  ##
  # Registers +directive+ as one handled by RDoc.  If a block is given the
  # directive will be replaced by the result of the block, otherwise the
  # directive will be removed from the processed text.
  #
  # The block will be called with the directive name and the directive
  # parameter:
  #
  #   RDoc::Markup::PreProcess.register 'my-directive' do |directive, param|
  #     # replace text, etc.
  #   end

  def self.register directive, &block
    @registered[directive] = block
  end

  ##
  # Registered directives

  def self.registered
    @registered
  end

  ##
  # Clears all registered directives and post-processors

  def self.reset
    @post_processors = []
    @registered = {}
  end

  reset

  ##
  # Creates a new pre-processor for +input_file_name+ that will look for
  # included files in +include_path+

  def initialize(input_file_name, include_path)
    @input_file_name = input_file_name
    @include_path = include_path
    @options = nil
  end

  ##
  # Look for directives in the given +text+.
  #
  # Options that we don't handle are yielded.  If the block returns false the
  # directive is restored to the text.  If the block returns nil or no block
  # was given the directive is handled according to the registered directives.
  # If a String was returned the directive is replaced with the string.
  #
  # If no matching directive was registered the directive is restored to the
  # text.
  #
  # If +code_object+ is given and the directive is unknown then the
  # directive's parameter is set as metadata on the +code_object+.  See
  # RDoc::CodeObject#metadata for details.

  def handle text, code_object = nil, &block
    first_line = 1
    if RDoc::Comment === text then
      comment = text
      text = text.text
      first_line = comment.line || 1
    end

    # regexp helper (square brackets for optional)
    # $1      $2  $3        $4      $5
    # [prefix][\]:directive:[spaces][param]newline
    text = text.lines.map.with_index(first_line) do |line, num|
      next line unless line =~ /\A([ \t]*(?:#|\/?\*)?[ \t]*)(\\?):([\w-]+):([ \t]*)(.+)?(\r?\n|$)/
      # skip something like ':toto::'
      next $& if $4.empty? and $5 and $5[0, 1] == ':'

      # skip if escaped
      next "#$1:#$3:#$4#$5\n" unless $2.empty?

      # This is not in handle_directive because I didn't want to pass another
      # argument into it
      if comment and $3 == 'markup' then
        next "#{$1.strip}\n" unless $5
        comment.format = $5.downcase
        next "#{$1.strip}\n"
      end

      handle_directive $1, $3, $5, code_object, text.encoding, num, &block
    end.join

    if comment then
      comment.text = text
    else
      comment = text
    end

    self.class.post_processors.each do |handler|
      handler.call comment, code_object
    end

    text
  end

  ##
  # Performs the actions described by +directive+ and its parameter +param+.
  #
  # +code_object+ is used for directives that operate on a class or module.
  # +prefix+ is used to ensure the replacement for handled directives is
  # correct.  +encoding+ is used for the <tt>include</tt> directive.
  #
  # For a list of directives in RDoc see RDoc::Markup.
  #--
  # When 1.8.7 support is ditched prefix can be defaulted to ''

  def handle_directive prefix, directive, param, code_object = nil,
                       encoding = nil, line = nil
    blankline = "#{prefix.strip}\n"
    directive = directive.downcase

    case directive
    when 'arg', 'args' then
      return "#{prefix}:#{directive}: #{param}\n" unless code_object && code_object.kind_of?(RDoc::AnyMethod)

      code_object.params = param

      blankline
    when 'category' then
      if RDoc::Context === code_object then
        section = code_object.add_section param
        code_object.temporary_section = section
      elsif RDoc::AnyMethod === code_object then
        code_object.section_title = param
      end

      blankline # ignore category if we're not on an RDoc::Context
    when 'doc' then
      return blankline unless code_object
      code_object.document_self = true
      code_object.force_documentation = true

      blankline
    when 'enddoc' then
      return blankline unless code_object
      code_object.done_documenting = true

      blankline
    when 'include' then
      filename = param.split(' ', 2).first
      include_file filename, prefix, encoding
    when 'main' then
      @options.main_page = param if @options.respond_to? :main_page
      warn <<~MSG
        The :main: directive is deprecated and will be removed in RDoc 7.

        You can use these options to specify the initial page displayed instead:
        - `--main=#{param}` via the command line
        - `rdoc.main = "#{param}"` if you use `RDoc::Task`
        - `main_page: #{param}` in your `.rdoc_options` file
      MSG

      blankline
    when 'nodoc' then
      return blankline unless code_object
      code_object.document_self = nil # notify nodoc
      code_object.document_children = param !~ /all/i

      blankline
    when 'notnew', 'not_new', 'not-new' then
      return blankline unless RDoc::AnyMethod === code_object

      code_object.dont_rename_initialize = true

      blankline
    when 'startdoc' then
      return blankline unless code_object

      code_object.start_doc
      code_object.force_documentation = true

      blankline
    when 'stopdoc' then
      return blankline unless code_object

      code_object.stop_doc

      blankline
    when 'title' then
      @options.default_title = param if @options.respond_to? :default_title=

      warn <<~MSG
        The :title: directive is deprecated and will be removed in RDoc 7.

        You can use these options to specify the title displayed instead:
        - `--title=#{param}` via the command line
        - `rdoc.title = "#{param}"` if you use `RDoc::Task`
        - `title: #{param}` in your `.rdoc_options` file
      MSG

      blankline
    when 'yield', 'yields' then
      return blankline unless code_object
      # remove parameter &block
      code_object.params = code_object.params.sub(/,?\s*&\w+/, '') if code_object.params

      code_object.block_params = param || ''

      blankline
    else
      result = yield directive, param, line if block_given?

      case result
      when nil then
        code_object.metadata[directive] = param if code_object

        if RDoc::Markup::PreProcess.registered.include? directive then
          handler = RDoc::Markup::PreProcess.registered[directive]
          result = handler.call directive, param if handler
        else
          result = "#{prefix}:#{directive}: #{param}\n"
        end
      when false then
        result = "#{prefix}:#{directive}: #{param}\n"
      end

      result
    end
  end

  ##
  # Handles the <tt>:include: _filename_</tt> directive.
  #
  # If the first line of the included file starts with '#', and contains
  # an encoding information in the form 'coding:' or 'coding=', it is
  # removed.
  #
  # If all lines in the included file start with a '#', this leading '#'
  # is removed before inclusion. The included content is indented like
  # the <tt>:include:</tt> directive.
  #--
  # so all content will be verbatim because of the likely space after '#'?
  # TODO shift left the whole file content in that case
  # TODO comment stop/start #-- and #++ in included file must be processed here

  def include_file name, indent, encoding
    full_name = find_include_file name

    unless full_name then
      warn "Couldn't find file to include '#{name}' from #{@input_file_name}"
      return ''
    end

    content = RDoc::Encoding.read_file full_name, encoding, true
    content = RDoc::Encoding.remove_magic_comment content

    # strip magic comment
    content = content.sub(/\A# .*coding[=:].*$/, '').lstrip

    # strip leading '#'s, but only if all lines start with them
    if content =~ /^[^#]/ then
      content.gsub(/^/, indent)
    else
      content.gsub(/^#?/, indent)
    end
  end

  ##
  # Look for the given file in the directory containing the current file,
  # and then in each of the directories specified in the RDOC_INCLUDE path

  def find_include_file(name)
    to_search = [File.dirname(@input_file_name)].concat @include_path
    to_search.each do |dir|
      full_name = File.join(dir, name)
      stat = File.stat(full_name) rescue next
      return full_name if stat.readable?
    end
    nil
  end

end
PK)J[�-(-(@share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attribute_manager.rbnu�[���# frozen_string_literal: true

##
# Manages changes of attributes in a block of text

class RDoc::Markup::AttributeManager
  unless ::MatchData.method_defined?(:match_length)
    using ::Module.new {
      refine(::MatchData) {
        def match_length(nth) # :nodoc:
          b, e = offset(nth)
          e - b if b
        end
      }
    }
  end

  ##
  # The NUL character

  NULL = "\000".freeze

  #--
  # We work by substituting non-printing characters in to the text. For now
  # I'm assuming that I can substitute a character in the range 0..8 for a 7
  # bit character without damaging the encoded string, but this might be
  # optimistic
  #++

  A_PROTECT = 004 # :nodoc:

  ##
  # Special mask character to prevent inline markup handling

  PROTECT_ATTR = A_PROTECT.chr # :nodoc:

  ##
  # The attributes enabled for this markup object.

  attr_reader :attributes

  ##
  # This maps delimiters that occur around words (such as *bold* or +tt+)
  # where the start and end delimiters and the same. This lets us optimize
  # the regexp

  attr_reader :matching_word_pairs

  ##
  # And this is used when the delimiters aren't the same. In this case the
  # hash maps a pattern to the attribute character

  attr_reader :word_pair_map

  ##
  # This maps HTML tags to the corresponding attribute char

  attr_reader :html_tags

  ##
  # A \ in front of a character that would normally be processed turns off
  # processing. We do this by turning \< into <#{PROTECT}

  attr_reader :protectable

  ##
  # And this maps _regexp handling_ sequences to a name. A regexp handling
  # sequence is something like a WikiWord

  attr_reader :regexp_handlings

  ##
  # A bits of exclusive maps
  attr_reader :exclusive_bitmap

  ##
  # Creates a new attribute manager that understands bold, emphasized and
  # teletype text.

  def initialize
    @html_tags = {}
    @matching_word_pairs = {}
    @protectable = %w[<]
    @regexp_handlings = []
    @word_pair_map = {}
    @exclusive_bitmap = 0
    @attributes = RDoc::Markup::Attributes.new

    add_word_pair "*", "*", :BOLD, true
    add_word_pair "_", "_", :EM, true
    add_word_pair "+", "+", :TT, true

    add_html "em", :EM, true
    add_html "i",  :EM, true
    add_html "b",  :BOLD, true
    add_html "tt",   :TT, true
    add_html "code", :TT, true
  end

  ##
  # Return an attribute object with the given turn_on and turn_off bits set

  def attribute(turn_on, turn_off)
    RDoc::Markup::AttrChanger.new turn_on, turn_off
  end

  ##
  # Changes the current attribute from +current+ to +new+

  def change_attribute current, new
    diff = current ^ new
    attribute(new & diff, current & diff)
  end

  ##
  # Used by the tests to change attributes by name from +current_set+ to
  # +new_set+

  def changed_attribute_by_name current_set, new_set
    current = new = 0
    current_set.each do |name|
      current |= @attributes.bitmap_for(name)
    end

    new_set.each do |name|
      new |= @attributes.bitmap_for(name)
    end

    change_attribute(current, new)
  end

  ##
  # Copies +start_pos+ to +end_pos+ from the current string

  def copy_string(start_pos, end_pos)
    res = @str[start_pos...end_pos]
    res.gsub!(/\000/, '')
    res
  end

  # :nodoc:
  def exclusive?(attr)
    (attr & @exclusive_bitmap) != 0
  end

  NON_PRINTING_START = "\1" # :nodoc:
  NON_PRINTING_END = "\2" # :nodoc:

  ##
  # Map attributes like <b>text</b>to the sequence
  # \001\002<char>\001\003<char>, where <char> is a per-attribute specific
  # character

  def convert_attrs(str, attrs, exclusive = false)
    convert_attrs_matching_word_pairs(str, attrs, exclusive)
    convert_attrs_word_pair_map(str, attrs, exclusive)
  end

  # :nodoc:
  def convert_attrs_matching_word_pairs(str, attrs, exclusive)
    # first do matching ones
    tags = @matching_word_pairs.select { |start, bitmap|
      exclusive == exclusive?(bitmap)
    }.keys
    return if tags.empty?
    tags = "[#{tags.join("")}](?!#{PROTECT_ATTR})"
    all_tags = "[#{@matching_word_pairs.keys.join("")}](?!#{PROTECT_ATTR})"

    re = /(?:^|\W|#{all_tags})\K(#{tags})(\1*[#\\]?[\w:#{PROTECT_ATTR}.\/\[\]-]+?\S?)\1(?!\1)(?=#{all_tags}|\W|$)/

    1 while str.gsub!(re) { |orig|
      a, w = (m = $~).values_at(1, 2)
      attr = @matching_word_pairs[a]
      if attrs.set_attrs(m.begin(2), w.length, attr)
        a = NULL * a.length
      else
        a = NON_PRINTING_START + a + NON_PRINTING_END
      end
      a + w + a
    }
    str.delete!(NON_PRINTING_START + NON_PRINTING_END)
  end

  # :nodoc:
  def convert_attrs_word_pair_map(str, attrs, exclusive)
    # then non-matching
    unless @word_pair_map.empty? then
      @word_pair_map.each do |regexp, attr|
        next unless exclusive == exclusive?(attr)
        1 while str.gsub!(regexp) { |orig|
          w = (m = ($~))[2]
          updated = attrs.set_attrs(m.begin(2), w.length, attr)
          if updated
            NULL * m.match_length(1) + w + NULL * m.match_length(3)
          else
            orig
          end
        }
      end
    end
  end

  ##
  # Converts HTML tags to RDoc attributes

  def convert_html(str, attrs, exclusive = false)
    tags = @html_tags.select { |start, bitmap|
      exclusive == exclusive?(bitmap)
    }.keys.join '|'

    1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) { |orig|
      attr = @html_tags[$1.downcase]
      html_length = $~.match_length(1) + 2 # "<>".length
      seq = NULL * html_length
      attrs.set_attrs($~.begin(2), $~.match_length(2), attr)
      seq + $2 + seq + NULL
    }
  end

  ##
  # Converts regexp handling sequences to RDoc attributes

  def convert_regexp_handlings str, attrs, exclusive = false
    @regexp_handlings.each do |regexp, attribute|
      next unless exclusive == exclusive?(attribute)
      str.scan(regexp) do
        capture = $~.size == 1 ? 0 : 1

        s, e = $~.offset capture

        attrs.set_attrs s, e - s, attribute | @attributes.regexp_handling
      end
    end
  end

  ##
  # Escapes regexp handling sequences of text to prevent conversion to RDoc

  def mask_protected_sequences
    # protect __send__, __FILE__, etc.
    @str.gsub!(/__([a-z]+)__/i,
      "_#{PROTECT_ATTR}_#{PROTECT_ATTR}\\1_#{PROTECT_ATTR}_#{PROTECT_ATTR}")
    @str.gsub!(/(\A|[^\\])\\([#{Regexp.escape @protectable.join}])/m,
               "\\1\\2#{PROTECT_ATTR}")
    @str.gsub!(/\\(\\[#{Regexp.escape @protectable.join}])/m, "\\1")
  end

  ##
  # Unescapes regexp handling sequences of text

  def unmask_protected_sequences
    @str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")
  end

  ##
  # Adds a markup class with +name+ for words wrapped in the +start+ and
  # +stop+ character.  To make words wrapped with "*" bold:
  #
  #   am.add_word_pair '*', '*', :BOLD

  def add_word_pair(start, stop, name, exclusive = false)
    raise ArgumentError, "Word flags may not start with '<'" if
      start[0, 1] == '<'

    bitmap = @attributes.bitmap_for name

    if start == stop then
      @matching_word_pairs[start] = bitmap
    else
      pattern = /(#{Regexp.escape start})(\S+)(#{Regexp.escape stop})/
      @word_pair_map[pattern] = bitmap
    end

    @protectable << start[0, 1]
    @protectable.uniq!

    @exclusive_bitmap |= bitmap if exclusive
  end

  ##
  # Adds a markup class with +name+ for words surrounded by HTML tag +tag+.
  # To process emphasis tags:
  #
  #   am.add_html 'em', :EM

  def add_html(tag, name, exclusive = false)
    bitmap = @attributes.bitmap_for name
    @html_tags[tag.downcase] = bitmap
    @exclusive_bitmap |= bitmap if exclusive
  end

  ##
  # Adds a regexp handling for +pattern+ with +name+.  A simple URL handler
  # would be:
  #
  #   @am.add_regexp_handling(/((https?:)\S+\w)/, :HYPERLINK)

  def add_regexp_handling pattern, name, exclusive = false
    bitmap = @attributes.bitmap_for(name)
    @regexp_handlings << [pattern, bitmap]
    @exclusive_bitmap |= bitmap if exclusive
  end

  ##
  # Processes +str+ converting attributes, HTML and regexp handlings

  def flow str
    @str = str.dup

    mask_protected_sequences

    @attrs = RDoc::Markup::AttrSpan.new @str.length, @exclusive_bitmap

    convert_attrs            @str, @attrs, true
    convert_html             @str, @attrs, true
    convert_regexp_handlings @str, @attrs, true
    convert_attrs            @str, @attrs
    convert_html             @str, @attrs
    convert_regexp_handlings @str, @attrs

    unmask_protected_sequences

    split_into_flow
  end

  ##
  # Debug method that prints a string along with its attributes

  def display_attributes
    puts
    puts @str.tr(NULL, "!")
    bit = 1
    16.times do |bno|
      line = ""
      @str.length.times do |i|
        if (@attrs[i] & bit) == 0
          line << " "
        else
          if bno.zero?
            line << "S"
          else
            line << ("%d" % (bno+1))
          end
        end
      end
      puts(line) unless line =~ /^ *$/
      bit <<= 1
    end
  end

  ##
  # Splits the string into chunks by attribute change

  def split_into_flow
    res = []
    current_attr = 0

    str_len = @str.length

    # skip leading invisible text
    i = 0
    i += 1 while i < str_len and @str[i].chr == "\0"
    start_pos = i

    # then scan the string, chunking it on attribute changes
    while i < str_len
      new_attr = @attrs[i]
      if new_attr != current_attr
        if i > start_pos
          res << copy_string(start_pos, i)
          start_pos = i
        end

        res << change_attribute(current_attr, new_attr)
        current_attr = new_attr

        if (current_attr & @attributes.regexp_handling) != 0 then
          i += 1 while
            i < str_len and (@attrs[i] & @attributes.regexp_handling) != 0

          res << RDoc::Markup::RegexpHandling.new(current_attr,
                                                  copy_string(start_pos, i))
          start_pos = i
          next
        end
      end

      # move on, skipping any invisible characters
      begin
        i += 1
      end while i < str_len and @str[i].chr == "\0"
    end

    # tidy up trailing text
    if start_pos < str_len
      res << copy_string(start_pos, str_len)
    end

    # and reset to all attributes off
    res << change_attribute(current_attr, 0) if current_attr != 0

    res
  end

end
PK)J[���vv8share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/formatter.rbnu�[���# frozen_string_literal: true
##
# Base class for RDoc markup formatters
#
# Formatters are a visitor that converts an RDoc::Markup tree (from a comment)
# into some kind of output.  RDoc ships with formatters for converting back to
# rdoc, ANSI text, HTML, a Table of Contents and other formats.
#
# If you'd like to write your own Formatter use
# RDoc::Markup::FormatterTestCase.  If you're writing a text-output formatter
# use RDoc::Markup::TextFormatterTestCase which provides extra test cases.

class RDoc::Markup::Formatter

  ##
  # Tag for inline markup containing a +bit+ for the bitmask and the +on+ and
  # +off+ triggers.

  InlineTag = Struct.new(:bit, :on, :off)

  ##
  # Converts a target url to one that is relative to a given path

  def self.gen_relative_url path, target
    from        = File.dirname path
    to, to_file = File.split target

    from = from.split "/"
    to   = to.split "/"

    from.delete '.'
    to.delete '.'

    while from.size > 0 and to.size > 0 and from[0] == to[0] do
      from.shift
      to.shift
    end

    from.fill ".."
    from.concat to
    from << to_file
    File.join(*from)
  end

  ##
  # Creates a new Formatter

  def initialize options, markup = nil
    @options = options

    @markup = markup || RDoc::Markup.new
    @am     = @markup.attribute_manager
    @am.add_regexp_handling(/<br>/, :HARD_BREAK)

    @attributes = @am.attributes

    @attr_tags = []

    @in_tt = 0
    @tt_bit = @attributes.bitmap_for :TT

    @hard_break = ''
    @from_path = '.'
  end

  ##
  # Adds +document+ to the output

  def accept_document document
    document.parts.each do |item|
      case item
      when RDoc::Markup::Document then # HACK
        accept_document item
      else
        item.accept self
      end
    end
  end

  ##
  # Adds a regexp handling for links of the form rdoc-...:

  def add_regexp_handling_RDOCLINK
    @markup.add_regexp_handling(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK)
  end

  ##
  # Adds a regexp handling for links of the form {<text>}[<url>] and
  # <word>[<url>]

  def add_regexp_handling_TIDYLINK
    @markup.add_regexp_handling(/(?:
                                  \{[^{}]*\} | # multi-word label
                                  \b[^\s{}]+? # single-word label
                                 )

                                 \[\S+?\]     # link target
                                /x, :TIDYLINK)
  end

  ##
  # Add a new set of tags for an attribute. We allow separate start and end
  # tags for flexibility

  def add_tag(name, start, stop)
    attr = @attributes.bitmap_for name
    @attr_tags << InlineTag.new(attr, start, stop)
  end

  ##
  # Allows +tag+ to be decorated with additional information.

  def annotate(tag)
    tag
  end

  ##
  # Marks up +content+

  def convert content
    @markup.convert content, self
  end

  ##
  # Converts flow items +flow+

  def convert_flow(flow)
    res = []

    flow.each do |item|
      case item
      when String then
        res << convert_string(item)
      when RDoc::Markup::AttrChanger then
        off_tags res, item
        on_tags res, item
      when RDoc::Markup::RegexpHandling then
        res << convert_regexp_handling(item)
      else
        raise "Unknown flow element: #{item.inspect}"
      end
    end

    res.join
  end

  ##
  # Converts added regexp handlings. See RDoc::Markup#add_regexp_handling

  def convert_regexp_handling target
    return target.text if in_tt?

    handled = false

    @attributes.each_name_of target.type do |name|
      method_name = "handle_regexp_#{name}"

      if respond_to? method_name then
        target.text = public_send method_name, target
        handled = true
      end
    end

    unless handled then
      target_name = @attributes.as_string target.type

      raise RDoc::Error, "Unhandled regexp handling #{target_name}: #{target}"
    end

    target.text
  end

  ##
  # Converts a string to be fancier if desired

  def convert_string string
    string
  end

  ##
  # Use ignore in your subclass to ignore the content of a node.
  #
  #   ##
  #   # We don't support raw nodes in ToNoRaw
  #
  #   alias accept_raw ignore

  def ignore *node
  end

  ##
  # Are we currently inside tt tags?

  def in_tt?
    @in_tt > 0
  end

  def tt_tag? attr_mask, reverse = false
    each_attr_tag(attr_mask, reverse) do |tag|
      return true if tt? tag
    end
    false
  end

  ##
  # Turns on tags for +item+ on +res+

  def on_tags res, item
    each_attr_tag(item.turn_on) do |tag|
      res << annotate(tag.on)
      @in_tt += 1 if tt? tag
    end
  end

  ##
  # Turns off tags for +item+ on +res+

  def off_tags res, item
    each_attr_tag(item.turn_off, true) do |tag|
      @in_tt -= 1 if tt? tag
      res << annotate(tag.off)
    end
  end

  def each_attr_tag attr_mask, reverse = false
    return if attr_mask.zero?

    @attr_tags.public_send(reverse ? :reverse_each : :each) do |tag|
      if attr_mask & tag.bit != 0 then
        yield tag
      end
    end
  end

  ##
  # Extracts and a scheme, url and an anchor id from +url+ and returns them.

  def parse_url url
    case url
    when /^rdoc-label:([^:]*)(?::(.*))?/ then
      scheme = 'link'
      path   = "##{$1}"
      id     = " id=\"#{$2}\"" if $2
    when /([A-Za-z]+):(.*)/ then
      scheme = $1.downcase
      path   = $2
    when /^#/ then
    else
      scheme = 'http'
      path   = url
      url    = url
    end

    if scheme == 'link' then
      url = if path[0, 1] == '#' then # is this meaningful?
              path
            else
              self.class.gen_relative_url @from_path, path
            end
    end

    [scheme, url, id]
  end

  ##
  # Is +tag+ a tt tag?

  def tt? tag
    tag.bit == @tt_bit
  end

end
PK)J[[�j^(^(6share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_html.rbnu�[���# frozen_string_literal: true
require 'cgi/util'

##
# Outputs RDoc markup as HTML.

class RDoc::Markup::ToHtml < RDoc::Markup::Formatter

  include RDoc::Text

  # :section: Utilities

  ##
  # Maps RDoc::Markup::Parser::LIST_TOKENS types to HTML tags

  LIST_TYPE_TO_HTML = {
    :BULLET => ['<ul>',                                      '</ul>'],
    :LABEL  => ['<dl class="rdoc-list label-list">',         '</dl>'],
    :LALPHA => ['<ol style="list-style-type: lower-alpha">', '</ol>'],
    :NOTE   => ['<dl class="rdoc-list note-list">',          '</dl>'],
    :NUMBER => ['<ol>',                                      '</ol>'],
    :UALPHA => ['<ol style="list-style-type: upper-alpha">', '</ol>'],
  }

  attr_reader :res # :nodoc:
  attr_reader :in_list_entry # :nodoc:
  attr_reader :list # :nodoc:

  ##
  # The RDoc::CodeObject HTML is being generated for.  This is used to
  # generate namespaced URI fragments

  attr_accessor :code_object

  ##
  # Path to this document for relative links

  attr_accessor :from_path

  # :section:

  ##
  # Creates a new formatter that will output HTML

  def initialize options, markup = nil
    super

    @code_object = nil
    @from_path = ''
    @in_list_entry = nil
    @list = nil
    @th = nil
    @hard_break = "<br>\n"

    init_regexp_handlings

    init_tags
  end

  # :section: Regexp Handling
  #
  # These methods are used by regexp handling markup added by RDoc::Markup#add_regexp_handling.

  # :nodoc:
  URL_CHARACTERS_REGEXP_STR = /[A-Za-z0-9\-._~:\/\?#\[\]@!$&'\(\)*+,;%=]/.source

  ##
  # Adds regexp handlings.

  def init_regexp_handlings
    # external links
    @markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)#{URL_CHARACTERS_REGEXP_STR}+\w/,
                                :HYPERLINK)
    init_link_notation_regexp_handlings
  end

  ##
  # Adds regexp handlings about link notations.

  def init_link_notation_regexp_handlings
    add_regexp_handling_RDOCLINK
    add_regexp_handling_TIDYLINK
  end

  def handle_RDOCLINK url # :nodoc:
    case url
    when /^rdoc-ref:/
      CGI.escapeHTML($')
    when /^rdoc-label:/
      text = $'

      text = case text
             when /\Alabel-/    then $'
             when /\Afootmark-/ then $'
             when /\Afoottext-/ then $'
             else                    text
             end

      gen_url CGI.escapeHTML(url), CGI.escapeHTML(text)
    when /^rdoc-image:/
      %[<img src=\"#{CGI.escapeHTML($')}\">]
    when /\Ardoc-[a-z]+:/
      CGI.escapeHTML($')
    end
  end

  ##
  # +target+ is a <code><br></code>

  def handle_regexp_HARD_BREAK target
    '<br>'
  end

  ##
  # +target+ is a potential link.  The following schemes are handled:
  #
  # <tt>mailto:</tt>::
  #   Inserted as-is.
  # <tt>http:</tt>::
  #   Links are checked to see if they reference an image. If so, that image
  #   gets inserted using an <tt><img></tt> tag. Otherwise a conventional
  #   <tt><a href></tt> is used.
  # <tt>link:</tt>::
  #   Reference to a local file relative to the output directory.

  def handle_regexp_HYPERLINK(target)
    url = CGI.escapeHTML(target.text)

    gen_url url, url
  end

  ##
  # +target+ is an rdoc-schemed link that will be converted into a hyperlink.
  #
  # For the +rdoc-ref+ scheme the named reference will be returned without
  # creating a link.
  #
  # For the +rdoc-label+ scheme the footnote and label prefixes are stripped
  # when creating a link.  All other contents will be linked verbatim.

  def handle_regexp_RDOCLINK target
    handle_RDOCLINK target.text
  end

  ##
  # This +target+ is a link where the label is different from the URL
  # <tt>label[url]</tt> or <tt>{long label}[url]</tt>

  def handle_regexp_TIDYLINK(target)
    text = target.text

    return text unless
      text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/

    label = $1
    url   = CGI.escapeHTML($2)

    if /^rdoc-image:/ =~ label
      label = handle_RDOCLINK(label)
    else
      label = CGI.escapeHTML(label)
    end

    gen_url url, label
  end

  # :section: Visitor
  #
  # These methods implement the HTML visitor.

  ##
  # Prepares the visitor for HTML generation

  def start_accepting
    @res = []
    @in_list_entry = []
    @list = []
  end

  ##
  # Returns the generated output

  def end_accepting
    @res.join
  end

  ##
  # Adds +block_quote+ to the output

  def accept_block_quote block_quote
    @res << "\n<blockquote>"

    block_quote.parts.each do |part|
      part.accept self
    end

    @res << "</blockquote>\n"
  end

  ##
  # Adds +paragraph+ to the output

  def accept_paragraph paragraph
    @res << "\n<p>"
    text = paragraph.text @hard_break
    text = text.gsub(/(#{SPACE_SEPARATED_LETTER_CLASS})?\K\r?\n(?=(?(1)(#{SPACE_SEPARATED_LETTER_CLASS})?))/o) {
      defined?($2) && ' '
    }
    @res << to_html(text)
    @res << "</p>\n"
  end

  ##
  # Adds +verbatim+ to the output

  def accept_verbatim verbatim
    text = verbatim.text.rstrip

    klass = nil

    content = if verbatim.ruby? or parseable? text then
                begin
                  tokens = RDoc::Parser::RipperStateLex.parse text
                  klass  = ' class="ruby"'

                  result = RDoc::TokenStream.to_html tokens
                  result = result + "\n" unless "\n" == result[-1]
                  result
                rescue
                  CGI.escapeHTML text
                end
              else
                CGI.escapeHTML text
              end

    if @options.pipe then
      @res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n"
    else
      @res << "\n<pre#{klass}>#{content}</pre>\n"
    end
  end

  ##
  # Adds +rule+ to the output

  def accept_rule rule
    @res << "<hr>\n"
  end

  ##
  # Prepares the visitor for consuming +list+

  def accept_list_start(list)
    @list << list.type
    @res << html_list_name(list.type, true)
    @in_list_entry.push false
  end

  ##
  # Finishes consumption of +list+

  def accept_list_end(list)
    @list.pop
    if tag = @in_list_entry.pop
      @res << tag
    end
    @res << html_list_name(list.type, false) << "\n"
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start(list_item)
    if tag = @in_list_entry.last
      @res << tag
    end

    @res << list_item_start(list_item, @list.last)
  end

  ##
  # Finishes consumption of +list_item+

  def accept_list_item_end(list_item)
    @in_list_entry[-1] = list_end_for(@list.last)
  end

  ##
  # Adds +blank_line+ to the output

  def accept_blank_line(blank_line)
    # @res << annotate("<p />") << "\n"
  end

  ##
  # Adds +heading+ to the output.  The headings greater than 6 are trimmed to
  # level 6.

  def accept_heading heading
    level = [6, heading.level].min

    label = heading.label @code_object

    @res << if @options.output_decoration
              "\n<h#{level} id=\"#{label}\">"
            else
              "\n<h#{level}>"
            end
    @res << to_html(heading.text)
    unless @options.pipe then
      @res << "<span><a href=\"##{label}\">&para;</a>"
      @res << " <a href=\"#top\">&uarr;</a></span>"
    end
    @res << "</h#{level}>\n"
  end

  ##
  # Adds +raw+ to the output

  def accept_raw raw
    @res << raw.parts.join("\n")
  end

  ##
  # Adds +table+ to the output

  def accept_table header, body, aligns
    @res << "\n<table role=\"table\">\n<thead>\n<tr>\n"
    header.zip(aligns) do |text, align|
      @res << '<th'
      @res << ' align="' << align << '"' if align
      @res << '>' << to_html(text) << "</th>\n"
    end
    @res << "</tr>\n</thead>\n<tbody>\n"
    body.each do |row|
      @res << "<tr>\n"
      row.zip(aligns) do |text, align|
        @res << '<td'
        @res << ' align="' << align << '"' if align
        @res << '>' << to_html(text) << "</td>\n"
      end
      @res << "</tr>\n"
    end
    @res << "</tbody>\n</table>\n"
  end

  # :section: Utilities

  ##
  # CGI-escapes +text+

  def convert_string(text)
    CGI.escapeHTML text
  end

  ##
  # Generate a link to +url+ with content +text+.  Handles the special cases
  # for img: and link: described under handle_regexp_HYPERLINK

  def gen_url url, text
    scheme, url, id = parse_url url

    if %w[http https link].include?(scheme) and
       url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
      "<img src=\"#{url}\" />"
    else
      if scheme != 'link' and %r%\A((?!https?:)(?:[^/#]*/)*+)([^/#]+)\.(rb|rdoc|md)(?=\z|#)%i =~ url
        url = "#$1#{$2.tr('.', '_')}_#$3.html#$'"
      end

      text = text.sub %r%^#{scheme}:/*%i, ''
      text = text.sub %r%^[*\^](\d+)$%,   '\1'

      link = "<a#{id} href=\"#{url}\">#{text}</a>"

      link = "<sup>#{link}</sup>" if /"foot/ =~ id

      link
    end
  end

  ##
  # Determines the HTML list element for +list_type+ and +open_tag+

  def html_list_name(list_type, open_tag)
    tags = LIST_TYPE_TO_HTML[list_type]
    raise RDoc::Error, "Invalid list type: #{list_type.inspect}" unless tags
    tags[open_tag ? 0 : 1]
  end

  ##
  # Maps attributes to HTML tags

  def init_tags
    add_tag :BOLD, "<strong>", "</strong>"
    add_tag :TT,   "<code>",   "</code>"
    add_tag :EM,   "<em>",     "</em>"
  end

  ##
  # Returns the HTML tag for +list_type+, possible using a label from
  # +list_item+

  def list_item_start(list_item, list_type)
    case list_type
    when :BULLET, :LALPHA, :NUMBER, :UALPHA then
      "<li>"
    when :LABEL, :NOTE then
      Array(list_item.label).map do |label|
        "<dt>#{to_html label}</dt>\n"
      end.join << "<dd>"
    else
      raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
    end
  end

  ##
  # Returns the HTML end-tag for +list_type+

  def list_end_for(list_type)
    case list_type
    when :BULLET, :LALPHA, :NUMBER, :UALPHA then
      "</li>"
    when :LABEL, :NOTE then
      "</dd>"
    else
      raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
    end
  end

  ##
  # Returns true if text is valid ruby syntax

  def parseable? text
    verbose, $VERBOSE = $VERBOSE, nil
    catch(:valid) do
      eval("BEGIN { throw :valid, true }\n#{text}")
    end
  rescue SyntaxError
    false
  ensure
    $VERBOSE = verbose
  end

  ##
  # Converts +item+ to HTML using RDoc::Text#to_html

  def to_html item
    super convert_flow @am.flow item
  end

end
PK)J[�����2share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/raw.rbnu�[���# frozen_string_literal: true
##
# A section of text that is added to the output document as-is

class RDoc::Markup::Raw

  ##
  # The component parts of the list

  attr_reader :parts

  ##
  # Creates a new Raw containing +parts+

  def initialize *parts
    @parts = []
    @parts.concat parts
  end

  ##
  # Appends +text+

  def << text
    @parts << text
  end

  def == other # :nodoc:
    self.class == other.class and @parts == other.parts
  end

  ##
  # Calls #accept_raw+ on +visitor+

  def accept visitor
    visitor.accept_raw self
  end

  ##
  # Appends +other+'s parts

  def merge other
    @parts.concat other.parts
  end

  def pretty_print q # :nodoc:
    self.class.name =~ /.*::(\w{1,4})/i

    q.group 2, "[#{$1.downcase}: ", ']' do
      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Appends +texts+ onto this Paragraph

  def push *texts
    self.parts.concat texts
  end

  ##
  # The raw text

  def text
    @parts.join ' '
  end

end
PK)J[�OO��8share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/paragraph.rbnu�[���# frozen_string_literal: true
##
# A Paragraph of text

class RDoc::Markup::Paragraph < RDoc::Markup::Raw

  ##
  # Calls #accept_paragraph on +visitor+

  def accept visitor
    visitor.accept_paragraph self
  end

  ##
  # Joins the raw paragraph text and converts inline HardBreaks to the
  # +hard_break+ text.

  def text hard_break = ''
    @parts.map do |part|
      if RDoc::Markup::HardBreak === part then
        hard_break
      else
        part
      end
    end.join
  end

end
PK)J[i�7��Bshare/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_joined_paragraph.rbnu�[���# frozen_string_literal: true
##
# Joins the parts of an RDoc::Markup::Paragraph into a single String.
#
# This allows for easier maintenance and testing of Markdown support.
#
# This formatter only works on Paragraph instances.  Attempting to process
# other markup syntax items will not work.

class RDoc::Markup::ToJoinedParagraph < RDoc::Markup::Formatter

  def initialize # :nodoc:
    super nil
  end

  def start_accepting # :nodoc:
  end

  def end_accepting # :nodoc:
  end

  ##
  # Converts the parts of +paragraph+ to a single entry.

  def accept_paragraph paragraph
    parts = paragraph.parts.chunk do |part|
      String === part
    end.flat_map do |string, chunk|
      string ? chunk.join.rstrip : chunk
    end

    paragraph.parts.replace parts
  end

  alias accept_block_quote     ignore
  alias accept_heading         ignore
  alias accept_list_end        ignore
  alias accept_list_item_end   ignore
  alias accept_list_item_start ignore
  alias accept_list_start      ignore
  alias accept_raw             ignore
  alias accept_rule            ignore
  alias accept_verbatim        ignore
  alias accept_table           ignore

end
PK)J[�����;share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attr_changer.rbnu�[���# frozen_string_literal: true
class RDoc::Markup

  AttrChanger = Struct.new :turn_on, :turn_off # :nodoc:

end

##
# An AttrChanger records a change in attributes. It contains a bitmap of the
# attributes to turn on, and a bitmap of those to turn off.

class RDoc::Markup::AttrChanger

  def to_s # :nodoc:
    "Attr: +#{turn_on}/-#{turn_off}"
  end

  def inspect # :nodoc:
    '+%d/-%d' % [turn_on, turn_off]
  end

end
PK)J[OF.W��9share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/blank_line.rbnu�[���# frozen_string_literal: true
##
# An empty line.  This class is a singleton.

class RDoc::Markup::BlankLine

  @instance = new

  ##
  # RDoc::Markup::BlankLine is a singleton

  def self.new
    @instance
  end

  ##
  # Calls #accept_blank_line on +visitor+

  def accept visitor
    visitor.accept_blank_line self
  end

  def pretty_print q # :nodoc:
    q.text 'blankline'
  end

end
PK)J[��4�556share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_ansi.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup with vibrant ANSI color!

class RDoc::Markup::ToAnsi < RDoc::Markup::ToRdoc

  ##
  # Creates a new ToAnsi visitor that is ready to output vibrant ANSI color!

  def initialize markup = nil
    super

    @headings.clear
    @headings[1] = ["\e[1;32m", "\e[m"] # bold
    @headings[2] = ["\e[4;32m", "\e[m"] # underline
    @headings[3] = ["\e[32m",   "\e[m"] # just green
  end

  ##
  # Maps attributes to ANSI sequences

  def init_tags
    add_tag :BOLD, "\e[1m", "\e[m"
    add_tag :TT,   "\e[7m", "\e[m"
    add_tag :EM,   "\e[4m", "\e[m"
  end

  ##
  # Overrides indent width to ensure output lines up correctly.

  def accept_list_item_end list_item
    width = case @list_type.last
            when :BULLET then
              2
            when :NOTE, :LABEL then
              if @prefix then
                @res << @prefix.strip
                @prefix = nil
              end

              @res << "\n" unless res.length == 1
              2
            else
              bullet = @list_index.last.to_s
              @list_index[-1] = @list_index.last.succ
              bullet.length + 2
            end

    @indent -= width
  end

  ##
  # Adds coloring to note and label list items

  def accept_list_item_start list_item
    bullet = case @list_type.last
             when :BULLET then
               '*'
             when :NOTE, :LABEL then
               labels = Array(list_item.label).map do |label|
                 attributes(label).strip
               end.join "\n"

               labels << ":\n" unless labels.empty?

               labels
             else
               @list_index.last.to_s + '.'
             end

    case @list_type.last
    when :NOTE, :LABEL then
      @indent += 2
      @prefix = bullet + (' ' * @indent)
    else
      @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)

      width = bullet.gsub(/\e\[[\d;]*m/, '').length + 1

      @indent += width
    end
  end

  ##
  # Starts accepting with a reset screen

  def start_accepting
    super

    @res = ["\e[0m"]
  end

end
PK)J[����9share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attributes.rbnu�[���# frozen_string_literal: true
##
# We manage a set of attributes.  Each attribute has a symbol name and a bit
# value.

class RDoc::Markup::Attributes

  ##
  # The regexp handling attribute type. See RDoc::Markup#add_regexp_handling

  attr_reader :regexp_handling

  ##
  # Creates a new attributes set.

  def initialize
    @regexp_handling = 1

    @name_to_bitmap = [
      [:_REGEXP_HANDLING_, @regexp_handling],
    ]

    @next_bitmap = @regexp_handling << 1
  end

  ##
  # Returns a unique bit for +name+

  def bitmap_for name
    bitmap = @name_to_bitmap.assoc name

    unless bitmap then
      bitmap = @next_bitmap
      @next_bitmap <<= 1
      @name_to_bitmap << [name, bitmap]
    else
      bitmap = bitmap.last
    end

    bitmap
  end

  ##
  # Returns a string representation of +bitmap+

  def as_string bitmap
    return 'none' if bitmap.zero?
    res = []

    @name_to_bitmap.each do |name, bit|
      res << name if (bitmap & bit) != 0
    end

    res.join ','
  end

  ##
  # yields each attribute name in +bitmap+

  def each_name_of bitmap
    return enum_for __method__, bitmap unless block_given?

    @name_to_bitmap.each do |name, bit|
      next if bit == @regexp_handling

      yield name.to_s if (bitmap & bit) != 0
    end
  end

end
PK)J[-J���:share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_markdown.rbnu�[���# frozen_string_literal: true
# :markup: markdown

##
# Outputs parsed markup as Markdown

class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc

  ##
  # Creates a new formatter that will output Markdown format text

  def initialize markup = nil
    super

    @headings[1] = ['# ',      '']
    @headings[2] = ['## ',     '']
    @headings[3] = ['### ',    '']
    @headings[4] = ['#### ',   '']
    @headings[5] = ['##### ',  '']
    @headings[6] = ['###### ', '']

    add_regexp_handling_RDOCLINK
    add_regexp_handling_TIDYLINK

    @hard_break = "  \n"
  end

  ##
  # Maps attributes to HTML sequences

  def init_tags
    add_tag :BOLD, '**', '**'
    add_tag :EM,   '*',  '*'
    add_tag :TT,   '`',  '`'
  end

  ##
  # Adds a newline to the output

  def handle_regexp_HARD_BREAK target
    "  \n"
  end

  ##
  # Finishes consumption of `list`

  def accept_list_end list
    super
  end

  ##
  # Finishes consumption of `list_item`

  def accept_list_item_end list_item
    width = case @list_type.last
            when :BULLET then
              4
            when :NOTE, :LABEL then
              use_prefix

              @res << "\n"

              4
            else
              @list_index[-1] = @list_index.last.succ
              4
            end

    @indent -= width
  end

  ##
  # Prepares the visitor for consuming `list_item`

  def accept_list_item_start list_item
    type = @list_type.last

    case type
    when :NOTE, :LABEL then
      bullets = Array(list_item.label).map do |label|
        attributes(label).strip
      end.join "\n"

      bullets << "\n" unless bullets.empty?

      @prefix = ' ' * @indent
      @indent += 4
      @prefix << bullets << ":" << (' ' * (@indent - 1))
    else
      bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
      @prefix = (' ' * @indent) + bullet.ljust(4)

      @indent += 4
    end
  end

  ##
  # Prepares the visitor for consuming `list`

  def accept_list_start list
    case list.type
    when :BULLET, :LABEL, :NOTE then
      @list_index << nil
    when :LALPHA, :NUMBER, :UALPHA then
      @list_index << 1
    else
      raise RDoc::Error, "invalid list type #{list.type}"
    end

    @list_width << 4
    @list_type << list.type
  end

  ##
  # Adds `rule` to the output

  def accept_rule rule
    use_prefix or @res << ' ' * @indent
    @res << '-' * 3
    @res << "\n"
  end

  ##
  # Outputs `verbatim` indented 4 columns

  def accept_verbatim verbatim
    indent = ' ' * (@indent + 4)

    verbatim.parts.each do |part|
      @res << indent unless part == "\n"
      @res << part
    end

    @res << "\n"
  end

  ##
  # Creates a Markdown-style URL from +url+ with +text+.

  def gen_url url, text
    scheme, url, = parse_url url

    "[#{text.sub(%r{^#{scheme}:/*}i, '')}](#{url})"
  end

  ##
  # Handles <tt>rdoc-</tt> type links for footnotes.

  def handle_rdoc_link url
    case url
    when /^rdoc-ref:/ then
      $'
    when /^rdoc-label:footmark-(\d+)/ then
      "[^#{$1}]:"
    when /^rdoc-label:foottext-(\d+)/ then
      "[^#{$1}]"
    when /^rdoc-label:label-/ then
      gen_url url, $'
    when /^rdoc-image:/ then
      "![](#{$'})"
    when /^rdoc-[a-z]+:/ then
      $'
    end
  end

  ##
  # Converts the RDoc markup tidylink into a Markdown.style link.

  def handle_regexp_TIDYLINK target
    text = target.text

    return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/

    label = $1
    url   = $2

    if url =~ /^rdoc-label:foot/ then
      handle_rdoc_link url
    else
      gen_url url, label
    end
  end

  ##
  # Converts the rdoc-...: links into a Markdown.style links.

  def handle_regexp_RDOCLINK target
    handle_rdoc_link target.text
  end

end
PK)J[Y|�x��9share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/hard_break.rbnu�[���# frozen_string_literal: true
##
# A hard-break in the middle of a paragraph.

class RDoc::Markup::HardBreak

  @instance = new

  ##
  # RDoc::Markup::HardBreak is a singleton

  def self.new
    @instance
  end

  ##
  # Calls #accept_hard_break on +visitor+

  def accept visitor
    visitor.accept_hard_break self
  end

  def == other # :nodoc:
    self.class === other
  end

  def pretty_print q # :nodoc:
    q.text "[break]"
  end

end
PK)J[�K~�""7share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/verbatim.rbnu�[���# frozen_string_literal: true
##
# A section of verbatim text

class RDoc::Markup::Verbatim < RDoc::Markup::Raw

  ##
  # Format of this verbatim section

  attr_accessor :format

  def initialize *parts # :nodoc:
    super

    @format = nil
  end

  def == other # :nodoc:
    super and @format == other.format
  end

  ##
  # Calls #accept_verbatim on +visitor+

  def accept visitor
    visitor.accept_verbatim self
  end

  ##
  # Collapses 3+ newlines into two newlines

  def normalize
    parts = []

    newlines = 0

    @parts.each do |part|
      case part
      when /^\s*\n/ then
        newlines += 1
        parts << part if newlines == 1
      else
        newlines = 0
        parts << part
      end
    end

    parts.pop if parts.last =~ /\A\r?\n\z/

    @parts = parts
  end

  def pretty_print q # :nodoc:
    self.class.name =~ /.*::(\w{1,4})/i

    q.group 2, "[#{$1.downcase}: ", ']' do
      if @format then
        q.text "format: #{@format}"
        q.breakable
      end

      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Is this verbatim section Ruby code?

  def ruby?
    @format ||= nil # TODO for older ri data, switch the tree to marshal_dump
    @format == :ruby
  end

  ##
  # The text of the section

  def text
    @parts.join
  end

end
PK)J[��K���0share/gems/gems/rdoc-6.10.0/lib/rdoc/markdown.rbnu�[���# coding: UTF-8
# frozen_string_literal: true
# :markup: markdown

##
# RDoc::Markdown as described by the [markdown syntax][syntax].
#
# To choose Markdown as your only default format see
# RDoc::Options@Saved+Options for instructions on setting up a `.rdoc_options`
# file to store your project default.
#
# ## Usage
#
# Here is a brief example of using this parse to read a markdown file by hand.
#
#     data = File.read("README.md")
#     formatter = RDoc::Markup::ToHtml.new(RDoc::Options.new, nil)
#     html = RDoc::Markdown.parse(data).accept(formatter)
#
#     # do something with html
#
# ## Extensions
#
# The following markdown extensions are supported by the parser, but not all
# are used in RDoc output by default.
#
# ### RDoc
#
# The RDoc Markdown parser has the following built-in behaviors that cannot be
# disabled.
#
# Underscores embedded in words are never interpreted as emphasis.  (While the
# [markdown dingus][dingus] emphasizes in-word underscores, neither the
# Markdown syntax nor MarkdownTest mention this behavior.)
#
# For HTML output, RDoc always auto-links bare URLs.
#
# ### Break on Newline
#
# The break_on_newline extension converts all newlines into hard line breaks
# as in [Github Flavored Markdown][GFM].  This extension is disabled by
# default.
#
# ### CSS
#
# The #css extension enables CSS blocks to be included in the output, but they
# are not used for any built-in RDoc output format.  This extension is disabled
# by default.
#
# Example:
#
#     <style type="text/css">
#     h1 { font-size: 3em }
#     </style>
#
# ### Definition Lists
#
# The definition_lists extension allows definition lists using the [PHP
# Markdown Extra syntax][PHPE], but only one label and definition are supported
# at this time.  This extension is enabled by default.
#
# Example:
#
# ```
# cat
# :   A small furry mammal
# that seems to sleep a lot
#
# ant
# :   A little insect that is known
# to enjoy picnics
#
# ```
#
# Produces:
#
# cat
# :   A small furry mammal
# that seems to sleep a lot
#
# ant
# :   A little insect that is known
# to enjoy picnics
#
# ### Strike
#
# Example:
#
# ```
# This is ~~striked~~.
# ```
#
# Produces:
#
# This is ~~striked~~.
#
# ### Github
#
# The #github extension enables a partial set of [Github Flavored Markdown]
# [GFM].  This extension is enabled by default.
#
# Supported github extensions include:
#
# #### Fenced code blocks
#
# Use ` ``` ` around a block of code instead of indenting it four spaces.
#
# #### Syntax highlighting
#
# Use ` ``` ruby ` as the start of a code fence to add syntax highlighting.
# (Currently only `ruby` syntax is supported).
#
# ### HTML
#
# Enables raw HTML to be included in the output.  This extension is enabled by
# default.
#
# Example:
#
#     <table>
#     ...
#     </table>
#
# ### Notes
#
# The #notes extension enables footnote support.  This extension is enabled by
# default.
#
# Example:
#
#     Here is some text[^1] including an inline footnote ^[for short footnotes]
#
#     ...
#
#     [^1]: With the footnote text down at the bottom
#
# Produces:
#
# Here is some text[^1] including an inline footnote ^[for short footnotes]
#
# [^1]: With the footnote text down at the bottom
#
# ## Limitations
#
# * Link titles are not used
# * Footnotes are collapsed into a single paragraph
#
# ## Author
#
# This markdown parser is a port to kpeg from [peg-markdown][pegmarkdown] by
# John MacFarlane.
#
# It is used under the MIT license:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# The port to kpeg was performed by Eric Hodel and Evan Phoenix
#
# [dingus]: http://daringfireball.net/projects/markdown/dingus
# [GFM]: https://github.github.com/gfm/
# [pegmarkdown]: https://github.com/jgm/peg-markdown
# [PHPE]: https://michelf.ca/projects/php-markdown/extra/#def-list
# [syntax]: http://daringfireball.net/projects/markdown/syntax
#--
# Last updated to jgm/peg-markdown commit 8f8fc22ef0
class RDoc::Markdown
  # :stopdoc:

    # This is distinct from setup_parser so that a standalone parser
    # can redefine #initialize and still have access to the proper
    # parser setup code.
    def initialize(str, debug=false)
      setup_parser(str, debug)
    end



    # Prepares for parsing +str+.  If you define a custom initialize you must
    # call this method before #parse
    def setup_parser(str, debug=false)
      set_string str, 0
      @memoizations = Hash.new { |h,k| h[k] = {} }
      @result = nil
      @failed_rule = nil
      @failing_rule_offset = -1
      @line_offsets = nil

      setup_foreign_grammar
    end

    attr_reader :string
    attr_reader :failing_rule_offset
    attr_accessor :result, :pos

    def current_column(target=pos)
      if string[target] == "\n" && (c = string.rindex("\n", target-1) || -1)
        return target - c
      elsif c = string.rindex("\n", target)
        return target - c
      end

      target + 1
    end

    def position_line_offsets
      unless @position_line_offsets
        @position_line_offsets = []
        total = 0
        string.each_line do |line|
          total += line.size
          @position_line_offsets << total
        end
      end
      @position_line_offsets
    end

    if [].respond_to? :bsearch_index
      def current_line(target=pos)
        if line = position_line_offsets.bsearch_index {|x| x > target }
          return line + 1
        end
        raise "Target position #{target} is outside of string"
      end
    else
      def current_line(target=pos)
        if line = position_line_offsets.index {|x| x > target }
          return line + 1
        end

        raise "Target position #{target} is outside of string"
      end
    end

    def current_character(target=pos)
      if target < 0 || target >= string.size
        raise "Target position #{target} is outside of string"
      end
      string[target, 1]
    end

    KpegPosInfo = Struct.new(:pos, :lno, :col, :line, :char)

    def current_pos_info(target=pos)
      l = current_line target
      c = current_column target
      ln = get_line(l-1)
      chr = string[target,1]
      KpegPosInfo.new(target, l, c, ln, chr)
    end

    def lines
      string.lines
    end

    def get_line(no)
      loff = position_line_offsets
      if no < 0
        raise "Line No is out of range: #{no} < 0"
      elsif no >= loff.size
        raise "Line No is out of range: #{no} >= #{loff.size}"
      end
      lend = loff[no]-1
      lstart = no > 0 ? loff[no-1] : 0
      string[lstart..lend]
    end



    def get_text(start)
      @string[start..@pos-1]
    end

    # Sets the string and current parsing position for the parser.
    def set_string string, pos
      @string = string
      @string_size = string ? string.size : 0
      @pos = pos
      @position_line_offsets = nil
    end

    def show_pos
      width = 10
      if @pos < width
        "#{@pos} (\"#{@string[0,@pos]}\" @ \"#{@string[@pos,width]}\")"
      else
        "#{@pos} (\"... #{@string[@pos - width, width]}\" @ \"#{@string[@pos,width]}\")"
      end
    end

    def failure_info
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "line #{l}, column #{c}: failed rule '#{info.name}' = '#{info.rendered}'"
      else
        "line #{l}, column #{c}: failed rule '#{@failed_rule}'"
      end
    end

    def failure_caret
      p = current_pos_info @failing_rule_offset
      "#{p.line.chomp}\n#{' ' * (p.col - 1)}^"
    end

    def failure_character
      current_character @failing_rule_offset
    end

    def failure_oneline
      p = current_pos_info @failing_rule_offset

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "@#{p.lno}:#{p.col} failed rule '#{info.name}', got '#{p.char}'"
      else
        "@#{p.lno}:#{p.col} failed rule '#{@failed_rule}', got '#{p.char}'"
      end
    end

    class ParseError < RuntimeError
    end

    def raise_error
      raise ParseError, failure_oneline
    end

    def show_error(io=STDOUT)
      error_pos = @failing_rule_offset
      p = current_pos_info(error_pos)

      io.puts "On line #{p.lno}, column #{p.col}:"

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        io.puts "Failed to match '#{info.rendered}' (rule '#{info.name}')"
      else
        io.puts "Failed to match rule '#{@failed_rule}'"
      end

      io.puts "Got: #{p.char.inspect}"
      io.puts "=> #{p.line}"
      io.print(" " * (p.col + 2))
      io.puts "^"
    end

    def set_failed_rule(name)
      if @pos > @failing_rule_offset
        @failed_rule = name
        @failing_rule_offset = @pos
      end
    end

    attr_reader :failed_rule

    def match_string(str)
      len = str.size
      if @string[pos,len] == str
        @pos += len
        return str
      end

      return nil
    end

    def scan(reg)
      if m = reg.match(@string, @pos)
        @pos = m.end(0)
        return true
      end

      return nil
    end

    if "".respond_to? :ord
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos].ord
        @pos += 1
        s
      end
    else
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos]
        @pos += 1
        s
      end
    end

    def parse(rule=nil)
      # We invoke the rules indirectly via apply
      # instead of by just calling them as methods because
      # if the rules use left recursion, apply needs to
      # manage that.

      if !rule
        apply(:_root)
      else
        method = rule.gsub("-","_hyphen_")
        apply :"_#{method}"
      end
    end

    class MemoEntry
      def initialize(ans, pos)
        @ans = ans
        @pos = pos
        @result = nil
        @set = false
        @left_rec = false
      end

      attr_reader :ans, :pos, :result, :set
      attr_accessor :left_rec

      def move!(ans, pos, result)
        @ans = ans
        @pos = pos
        @result = result
        @set = true
        @left_rec = false
      end
    end

    def external_invoke(other, rule, *args)
      old_pos = @pos
      old_string = @string

      set_string other.string, other.pos

      begin
        if val = __send__(rule, *args)
          other.pos = @pos
          other.result = @result
        else
          other.set_failed_rule "#{self.class}##{rule}"
        end
        val
      ensure
        set_string old_string, old_pos
      end
    end

    def apply_with_args(rule, *args)
      @result = nil
      memo_key = [rule, args]
      if m = @memoizations[memo_key][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[memo_key][@pos] = m
        start_pos = @pos

        ans = __send__ rule, *args

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, args, start_pos, m)
        else
          return ans
        end
      end
    end

    def apply(rule)
      @result = nil
      if m = @memoizations[rule][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[rule][@pos] = m
        start_pos = @pos

        ans = __send__ rule

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, nil, start_pos, m)
        else
          return ans
        end
      end
    end

    def grow_lr(rule, args, start_pos, m)
      while true
        @pos = start_pos
        @result = m.result

        if args
          ans = __send__ rule, *args
        else
          ans = __send__ rule
        end
        return nil unless ans

        break if @pos <= m.pos

        m.move! ans, @pos, @result
      end

      @result = m.result
      @pos = m.pos
      return m.ans
    end

    class RuleInfo
      def initialize(name, rendered)
        @name = name
        @rendered = rendered
      end

      attr_reader :name, :rendered
    end

    def self.rule_info(name, rendered)
      RuleInfo.new(name, rendered)
    end


  # :startdoc:



  require_relative '../rdoc'
  require_relative 'markup/to_joined_paragraph'
  require_relative 'markdown/entities'

  require_relative 'markdown/literals'

  ##
  # Supported extensions

  EXTENSIONS = []

  ##
  # Extensions enabled by default

  DEFAULT_EXTENSIONS = [
    :definition_lists,
    :github,
    :html,
    :notes,
    :strike,
  ]

  # :section: Extensions

  ##
  # Creates extension methods for the `name` extension to enable and disable
  # the extension and to query if they are active.

  def self.extension name
    EXTENSIONS << name

    define_method "#{name}?" do
      extension? name
    end

    define_method "#{name}=" do |enable|
      extension name, enable
    end
  end

  ##
  # Converts all newlines into hard breaks

  extension :break_on_newline

  ##
  # Allow style blocks

  extension :css

  ##
  # Allow PHP Markdown Extras style definition lists

  extension :definition_lists

  ##
  # Allow Github Flavored Markdown

  extension :github

  ##
  # Allow HTML

  extension :html

  ##
  # Enables the notes extension

  extension :notes

  ##
  # Enables the strike extension

  extension :strike

  # :section:

  ##
  # Parses the `markdown` document into an RDoc::Document using the default
  # extensions.

  def self.parse markdown
    parser = new

    parser.parse markdown
  end

  # TODO remove when kpeg 0.10 is released
  alias orig_initialize initialize # :nodoc:

  ##
  # Creates a new markdown parser that enables the given +extensions+.

  def initialize extensions = DEFAULT_EXTENSIONS, debug = false
    @debug      = debug
    @formatter  = RDoc::Markup::ToJoinedParagraph.new
    @extensions = extensions

    @references          = nil
    @unlinked_references = nil

    @footnotes       = nil
    @note_order      = nil
  end

  ##
  # Wraps `text` in emphasis for rdoc inline formatting

  def emphasis text
    if text =~ /\A[a-z\d.\/]+\z/i then
      "_#{text}_"
    else
      "<em>#{text}</em>"
    end
  end

  ##
  # :category: Extensions
  #
  # Is the extension `name` enabled?

  def extension? name
    @extensions.include? name
  end

  ##
  # :category: Extensions
  #
  # Enables or disables the extension with `name`

  def extension name, enable
    if enable then
      @extensions |= [name]
    else
      @extensions -= [name]
    end
  end

  ##
  # Parses `text` in a clone of this parser.  This is used for handling nested
  # lists the same way as markdown_parser.

  def inner_parse text # :nodoc:
    parser = clone

    parser.setup_parser text, @debug

    parser.peg_parse

    doc = parser.result

    doc.accept @formatter

    doc.parts
  end

  ##
  # Finds a link reference for `label` and creates a new link to it with
  # `content` as the link text.  If `label` was not encountered in the
  # reference-gathering parser pass the label and content are reconstructed
  # with the linking `text` (usually whitespace).

  def link_to content, label = content, text = nil
    raise ParseError, 'enable notes extension' if
      content.start_with? '^' and label.equal? content

    if ref = @references[label] then
      "{#{content}}[#{ref}]"
    elsif label.equal? content then
      "[#{content}]#{text}"
    else
      "[#{content}]#{text}[#{label}]"
    end
  end

  ##
  # Creates an RDoc::Markup::ListItem by parsing the `unparsed` content from
  # the first parsing pass.

  def list_item_from unparsed
    parsed = inner_parse unparsed.join
    RDoc::Markup::ListItem.new nil, *parsed
  end

  ##
  # Stores `label` as a note and fills in previously unknown note references.

  def note label
    #foottext = "rdoc-label:foottext-#{label}:footmark-#{label}"

    #ref.replace foottext if ref = @unlinked_notes.delete(label)

    @notes[label] = foottext

    #"{^1}[rdoc-label:footmark-#{label}:foottext-#{label}] "
  end

  ##
  # Creates a new link for the footnote `reference` and adds the reference to
  # the note order list for proper display at the end of the document.

  def note_for ref
    @note_order << ref

    label = @note_order.length

    "{*#{label}}[rdoc-label:foottext-#{label}:footmark-#{label}]"
  end

  ##
  # The internal kpeg parse method

  alias peg_parse parse # :nodoc:

  ##
  # Creates an RDoc::Markup::Paragraph from `parts` and including
  # extension-specific behavior

  def paragraph parts
    parts = parts.map do |part|
      if "\n" == part then
        RDoc::Markup::HardBreak.new
      else
        part
      end
    end if break_on_newline?

    RDoc::Markup::Paragraph.new(*parts)
  end

  ##
  # Parses `markdown` into an RDoc::Document

  def parse markdown
    @references          = {}
    @unlinked_references = {}

    markdown += "\n\n"

    setup_parser markdown, @debug
    peg_parse 'References'

    if notes? then
      @footnotes       = {}

      setup_parser markdown, @debug
      peg_parse 'Notes'

      # using note_order on the first pass would be a bug
      @note_order      = []
    end

    setup_parser markdown, @debug
    peg_parse

    doc = result

    if notes? and not @footnotes.empty? then
      doc << RDoc::Markup::Rule.new(1)

      @note_order.each_with_index do |ref, index|
        label = index + 1
        note = @footnotes[ref] or raise ParseError, "footnote [^#{ref}] not found"

        link = "{^#{label}}[rdoc-label:footmark-#{label}:foottext-#{label}] "
        note.parts.unshift link

        doc << note
      end
    end

    doc.accept @formatter

    doc
  end

  ##
  # Stores `label` as a reference to `link` and fills in previously unknown
  # link references.

  def reference label, link
    if ref = @unlinked_references.delete(label) then
      ref.replace link
    end

    @references[label] = link
  end

  ##
  # Wraps `text` in strong markup for rdoc inline formatting

  def strong text
    if text =~ /\A[a-z\d.\/-]+\z/i then
      "*#{text}*"
    else
      "<b>#{text}</b>"
    end
  end

  ##
  # Wraps `text` in strike markup for rdoc inline formatting

  def strike text
    if text =~ /\A[a-z\d.\/-]+\z/i then
      "~#{text}~"
    else
      "<s>#{text}</s>"
    end
  end


  # :stopdoc:
  def setup_foreign_grammar
    @_grammar_literals = RDoc::Markdown::Literals.new(nil)
  end

  # root = Doc
  def _root
    _tmp = apply(:_Doc)
    set_failed_rule :_root unless _tmp
    return _tmp
  end

  # Doc = BOM? Block*:a { RDoc::Markup::Document.new(*a.compact) }
  def _Doc

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_BOM)
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _ary = []
      while true
        _tmp = apply(:_Block)
        _ary << @result if _tmp
        break unless _tmp
      end
      _tmp = true
      @result = _ary
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Document.new(*a.compact) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Doc unless _tmp
    return _tmp
  end

  # Block = @BlankLine* (BlockQuote | Verbatim | CodeFence | Table | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain)
  def _Block

    _save = self.pos
    while true # sequence
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_BlockQuote)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Verbatim)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_CodeFence)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Table)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Note)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Reference)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_HorizontalRule)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Heading)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_OrderedList)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_BulletList)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_DefinitionList)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_HtmlBlock)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_StyleBlock)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Para)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Plain)
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Block unless _tmp
    return _tmp
  end

  # Para = @NonindentSpace Inlines:a @BlankLine+ { paragraph a }
  def _Para

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Inlines)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  paragraph a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Para unless _tmp
    return _tmp
  end

  # Plain = Inlines:a { paragraph a }
  def _Plain

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Inlines)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  paragraph a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Plain unless _tmp
    return _tmp
  end

  # AtxInline = !@Newline !(@Sp /#*/ @Sp @Newline) Inline
  def _AtxInline

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _Newline()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = scan(/\G(?-mix:#*)/)
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = _Newline()
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Inline)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AtxInline unless _tmp
    return _tmp
  end

  # AtxStart = < /\#{1,6}/ > { text.length }
  def _AtxStart

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:\#{1,6})/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text.length ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AtxStart unless _tmp
    return _tmp
  end

  # AtxHeading = AtxStart:s @Spacechar+ AtxInline+:a (@Sp /#*/ @Sp)? @Newline { RDoc::Markup::Heading.new(s, a.join) }
  def _AtxHeading

    _save = self.pos
    while true # sequence
      _tmp = apply(:_AtxStart)
      s = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Spacechar()
      if _tmp
        while true
          _tmp = _Spacechar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_AtxInline)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_AtxInline)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # sequence
        _tmp = _Sp()
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = scan(/\G(?-mix:#*)/)
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = _Sp()
        unless _tmp
          self.pos = _save4
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save3
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Heading.new(s, a.join) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AtxHeading unless _tmp
    return _tmp
  end

  # SetextHeading = (SetextHeading1 | SetextHeading2)
  def _SetextHeading

    _save = self.pos
    while true # choice
      _tmp = apply(:_SetextHeading1)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_SetextHeading2)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_SetextHeading unless _tmp
    return _tmp
  end

  # SetextBottom1 = /={1,}/ @Newline
  def _SetextBottom1

    _save = self.pos
    while true # sequence
      _tmp = scan(/\G(?-mix:={1,})/)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextBottom1 unless _tmp
    return _tmp
  end

  # SetextBottom2 = /-{1,}/ @Newline
  def _SetextBottom2

    _save = self.pos
    while true # sequence
      _tmp = scan(/\G(?-mix:-{1,})/)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextBottom2 unless _tmp
    return _tmp
  end

  # SetextHeading1 = &(@RawLine SetextBottom1) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom1 { RDoc::Markup::Heading.new(1, a.join) }
  def _SetextHeading1

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = _RawLine()
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_SetextBottom1)
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # sequence
        _save5 = self.pos
        _tmp = _Endline()
        _tmp = _tmp ? nil : true
        self.pos = _save5
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save4
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save4
        end
        break
      end # end sequence

      if _tmp
        while true

          _save6 = self.pos
          while true # sequence
            _save7 = self.pos
            _tmp = _Endline()
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save6
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save6
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save6
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save3
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_SetextBottom1)
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Heading.new(1, a.join) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextHeading1 unless _tmp
    return _tmp
  end

  # SetextHeading2 = &(@RawLine SetextBottom2) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom2 { RDoc::Markup::Heading.new(2, a.join) }
  def _SetextHeading2

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = _RawLine()
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_SetextBottom2)
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # sequence
        _save5 = self.pos
        _tmp = _Endline()
        _tmp = _tmp ? nil : true
        self.pos = _save5
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save4
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save4
        end
        break
      end # end sequence

      if _tmp
        while true

          _save6 = self.pos
          while true # sequence
            _save7 = self.pos
            _tmp = _Endline()
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save6
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save6
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save6
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save3
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_SetextBottom2)
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Heading.new(2, a.join) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextHeading2 unless _tmp
    return _tmp
  end

  # Heading = (SetextHeading | AtxHeading)
  def _Heading

    _save = self.pos
    while true # choice
      _tmp = apply(:_SetextHeading)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_AtxHeading)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Heading unless _tmp
    return _tmp
  end

  # BlockQuote = BlockQuoteRaw:a { RDoc::Markup::BlockQuote.new(*a) }
  def _BlockQuote

    _save = self.pos
    while true # sequence
      _tmp = apply(:_BlockQuoteRaw)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::BlockQuote.new(*a) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BlockQuote unless _tmp
    return _tmp
  end

  # BlockQuoteRaw = @StartList:a (">" " "? Line:l { a << l } (!">" !@BlankLine Line:c { a << c })* (@BlankLine:n { a << n })*)+ { inner_parse a.join }
  def _BlockQuoteRaw

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = match_string(">")
        unless _tmp
          self.pos = _save2
          break
        end
        _save3 = self.pos
        _tmp = match_string(" ")
        unless _tmp
          _tmp = true
          self.pos = _save3
        end
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_Line)
        l = @result
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  a << l ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
          break
        end
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string(">")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _save7 = self.pos
            _tmp = _BlankLine()
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Line)
            c = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << c ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save2
          break
        end
        while true

          _save9 = self.pos
          while true # sequence
            _tmp = _BlankLine()
            n = @result
            unless _tmp
              self.pos = _save9
              break
            end
            @result = begin;  a << n ; end
            _tmp = true
            unless _tmp
              self.pos = _save9
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save10 = self.pos
          while true # sequence
            _tmp = match_string(">")
            unless _tmp
              self.pos = _save10
              break
            end
            _save11 = self.pos
            _tmp = match_string(" ")
            unless _tmp
              _tmp = true
              self.pos = _save11
            end
            unless _tmp
              self.pos = _save10
              break
            end
            _tmp = apply(:_Line)
            l = @result
            unless _tmp
              self.pos = _save10
              break
            end
            @result = begin;  a << l ; end
            _tmp = true
            unless _tmp
              self.pos = _save10
              break
            end
            while true

              _save13 = self.pos
              while true # sequence
                _save14 = self.pos
                _tmp = match_string(">")
                _tmp = _tmp ? nil : true
                self.pos = _save14
                unless _tmp
                  self.pos = _save13
                  break
                end
                _save15 = self.pos
                _tmp = _BlankLine()
                _tmp = _tmp ? nil : true
                self.pos = _save15
                unless _tmp
                  self.pos = _save13
                  break
                end
                _tmp = apply(:_Line)
                c = @result
                unless _tmp
                  self.pos = _save13
                  break
                end
                @result = begin;  a << c ; end
                _tmp = true
                unless _tmp
                  self.pos = _save13
                end
                break
              end # end sequence

              break unless _tmp
            end
            _tmp = true
            unless _tmp
              self.pos = _save10
              break
            end
            while true

              _save17 = self.pos
              while true # sequence
                _tmp = _BlankLine()
                n = @result
                unless _tmp
                  self.pos = _save17
                  break
                end
                @result = begin;  a << n ; end
                _tmp = true
                unless _tmp
                  self.pos = _save17
                end
                break
              end # end sequence

              break unless _tmp
            end
            _tmp = true
            unless _tmp
              self.pos = _save10
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  inner_parse a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BlockQuoteRaw unless _tmp
    return _tmp
  end

  # NonblankIndentedLine = !@BlankLine IndentedLine
  def _NonblankIndentedLine

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_IndentedLine)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NonblankIndentedLine unless _tmp
    return _tmp
  end

  # VerbatimChunk = @BlankLine*:a NonblankIndentedLine+:b { a.concat b }
  def _VerbatimChunk

    _save = self.pos
    while true # sequence
      _ary = []
      while true
        _tmp = _BlankLine()
        _ary << @result if _tmp
        break unless _tmp
      end
      _tmp = true
      @result = _ary
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_NonblankIndentedLine)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_NonblankIndentedLine)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      b = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a.concat b ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_VerbatimChunk unless _tmp
    return _tmp
  end

  # Verbatim = VerbatimChunk+:a { RDoc::Markup::Verbatim.new(*a.flatten) }
  def _Verbatim

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_VerbatimChunk)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_VerbatimChunk)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Verbatim.new(*a.flatten) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Verbatim unless _tmp
    return _tmp
  end

  # HorizontalRule = @NonindentSpace ("*" @Sp "*" @Sp "*" (@Sp "*")* | "-" @Sp "-" @Sp "-" (@Sp "-")* | "_" @Sp "_" @Sp "_" (@Sp "_")*) @Sp @Newline @BlankLine+ { RDoc::Markup::Rule.new 1 }
  def _HorizontalRule

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = match_string("*")
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = match_string("*")
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = match_string("*")
          unless _tmp
            self.pos = _save2
            break
          end
          while true

            _save4 = self.pos
            while true # sequence
              _tmp = _Sp()
              unless _tmp
                self.pos = _save4
                break
              end
              _tmp = match_string("*")
              unless _tmp
                self.pos = _save4
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save5 = self.pos
        while true # sequence
          _tmp = match_string("-")
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = match_string("-")
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = match_string("-")
          unless _tmp
            self.pos = _save5
            break
          end
          while true

            _save7 = self.pos
            while true # sequence
              _tmp = _Sp()
              unless _tmp
                self.pos = _save7
                break
              end
              _tmp = match_string("-")
              unless _tmp
                self.pos = _save7
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save5
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save8 = self.pos
        while true # sequence
          _tmp = match_string("_")
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = match_string("_")
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = match_string("_")
          unless _tmp
            self.pos = _save8
            break
          end
          while true

            _save10 = self.pos
            while true # sequence
              _tmp = _Sp()
              unless _tmp
                self.pos = _save10
                break
              end
              _tmp = match_string("_")
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save8
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _save11 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save11
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Rule.new 1 ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HorizontalRule unless _tmp
    return _tmp
  end

  # Bullet = !HorizontalRule @NonindentSpace /[+*-]/ @Spacechar+
  def _Bullet

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_HorizontalRule)
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = scan(/\G(?-mix:[+*-])/)
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _Spacechar()
      if _tmp
        while true
          _tmp = _Spacechar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Bullet unless _tmp
    return _tmp
  end

  # BulletList = &Bullet (ListTight | ListLoose):a { RDoc::Markup::List.new(:BULLET, *a) }
  def _BulletList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_Bullet)
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_ListTight)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_ListLoose)
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::List.new(:BULLET, *a) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BulletList unless _tmp
    return _tmp
  end

  # ListTight = ListItemTight+:a @BlankLine* !(Bullet | Enumerator) { a }
  def _ListTight

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_ListItemTight)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_ListItemTight)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # choice
        _tmp = apply(:_Bullet)
        break if _tmp
        self.pos = _save4
        _tmp = apply(:_Enumerator)
        break if _tmp
        self.pos = _save4
        break
      end # end choice

      _tmp = _tmp ? nil : true
      self.pos = _save3
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListTight unless _tmp
    return _tmp
  end

  # ListLoose = @StartList:a (ListItem:b @BlankLine* { a << b })+ { a }
  def _ListLoose

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = apply(:_ListItem)
        b = @result
        unless _tmp
          self.pos = _save2
          break
        end
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save4 = self.pos
          while true # sequence
            _tmp = apply(:_ListItem)
            b = @result
            unless _tmp
              self.pos = _save4
              break
            end
            while true
              _tmp = _BlankLine()
              break unless _tmp
            end
            _tmp = true
            unless _tmp
              self.pos = _save4
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListLoose unless _tmp
    return _tmp
  end

  # ListItem = (Bullet | Enumerator) @StartList:a ListBlock:b { a << b } (ListContinuationBlock:c { a.push(*c) })* { list_item_from a }
  def _ListItem

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Bullet)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_Enumerator)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_ListBlock)
      b = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a << b ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _tmp = apply(:_ListContinuationBlock)
          c = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a.push(*c) ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  list_item_from a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListItem unless _tmp
    return _tmp
  end

  # ListItemTight = (Bullet | Enumerator) ListBlock:a (!@BlankLine ListContinuationBlock:b { a.push(*b) })* !ListContinuationBlock { list_item_from a }
  def _ListItemTight

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Bullet)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_Enumerator)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_ListBlock)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = _BlankLine()
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_ListContinuationBlock)
          b = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a.push(*b) ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save5 = self.pos
      _tmp = apply(:_ListContinuationBlock)
      _tmp = _tmp ? nil : true
      self.pos = _save5
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  list_item_from a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListItemTight unless _tmp
    return _tmp
  end

  # ListBlock = !@BlankLine Line:a ListBlockLine*:c { [a, *c] }
  def _ListBlock

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Line)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _ary = []
      while true
        _tmp = apply(:_ListBlockLine)
        _ary << @result if _tmp
        break unless _tmp
      end
      _tmp = true
      @result = _ary
      c = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [a, *c] ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListBlock unless _tmp
    return _tmp
  end

  # ListContinuationBlock = @StartList:a @BlankLine* { a << "\n" } (Indent ListBlock:b { a.concat b })+ { a }
  def _ListContinuationBlock

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a << "\n" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _tmp = apply(:_Indent)
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_ListBlock)
        b = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a.concat b ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save4 = self.pos
          while true # sequence
            _tmp = apply(:_Indent)
            unless _tmp
              self.pos = _save4
              break
            end
            _tmp = apply(:_ListBlock)
            b = @result
            unless _tmp
              self.pos = _save4
              break
            end
            @result = begin;  a.concat b ; end
            _tmp = true
            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListContinuationBlock unless _tmp
    return _tmp
  end

  # Enumerator = @NonindentSpace [0-9]+ "." @Spacechar+
  def _Enumerator

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _save2 = self.pos
      _tmp = get_byte
      if _tmp
        unless _tmp >= 48 and _tmp <= 57
          self.pos = _save2
          _tmp = nil
        end
      end
      if _tmp
        while true
          _save3 = self.pos
          _tmp = get_byte
          if _tmp
            unless _tmp >= 48 and _tmp <= 57
              self.pos = _save3
              _tmp = nil
            end
          end
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(".")
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos
      _tmp = _Spacechar()
      if _tmp
        while true
          _tmp = _Spacechar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save4
      end
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Enumerator unless _tmp
    return _tmp
  end

  # OrderedList = &Enumerator (ListTight | ListLoose):a { RDoc::Markup::List.new(:NUMBER, *a) }
  def _OrderedList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_Enumerator)
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_ListTight)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_ListLoose)
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::List.new(:NUMBER, *a) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_OrderedList unless _tmp
    return _tmp
  end

  # ListBlockLine = !@BlankLine !(Indent? (Bullet | Enumerator)) !HorizontalRule OptionallyIndentedLine
  def _ListBlockLine

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = apply(:_Indent)
        unless _tmp
          _tmp = true
          self.pos = _save4
        end
        unless _tmp
          self.pos = _save3
          break
        end

        _save5 = self.pos
        while true # choice
          _tmp = apply(:_Bullet)
          break if _tmp
          self.pos = _save5
          _tmp = apply(:_Enumerator)
          break if _tmp
          self.pos = _save5
          break
        end # end choice

        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _save6 = self.pos
      _tmp = apply(:_HorizontalRule)
      _tmp = _tmp ? nil : true
      self.pos = _save6
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_OptionallyIndentedLine)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListBlockLine unless _tmp
    return _tmp
  end

  # HtmlOpenAnchor = "<" Spnl ("a" | "A") Spnl HtmlAttribute* ">"
  def _HtmlOpenAnchor

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("a")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("A")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlOpenAnchor unless _tmp
    return _tmp
  end

  # HtmlCloseAnchor = "<" Spnl "/" ("a" | "A") Spnl ">"
  def _HtmlCloseAnchor

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("a")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("A")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlCloseAnchor unless _tmp
    return _tmp
  end

  # HtmlAnchor = HtmlOpenAnchor (HtmlAnchor | !HtmlCloseAnchor .)* HtmlCloseAnchor
  def _HtmlAnchor

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlOpenAnchor)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlAnchor)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlCloseAnchor)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlCloseAnchor)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlAnchor unless _tmp
    return _tmp
  end

  # HtmlBlockOpenAddress = "<" Spnl ("address" | "ADDRESS") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenAddress

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("address")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("ADDRESS")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenAddress unless _tmp
    return _tmp
  end

  # HtmlBlockCloseAddress = "<" Spnl "/" ("address" | "ADDRESS") Spnl ">"
  def _HtmlBlockCloseAddress

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("address")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("ADDRESS")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseAddress unless _tmp
    return _tmp
  end

  # HtmlBlockAddress = HtmlBlockOpenAddress (HtmlBlockAddress | !HtmlBlockCloseAddress .)* HtmlBlockCloseAddress
  def _HtmlBlockAddress

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenAddress)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockAddress)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseAddress)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseAddress)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockAddress unless _tmp
    return _tmp
  end

  # HtmlBlockOpenBlockquote = "<" Spnl ("blockquote" | "BLOCKQUOTE") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenBlockquote

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("blockquote")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("BLOCKQUOTE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenBlockquote unless _tmp
    return _tmp
  end

  # HtmlBlockCloseBlockquote = "<" Spnl "/" ("blockquote" | "BLOCKQUOTE") Spnl ">"
  def _HtmlBlockCloseBlockquote

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("blockquote")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("BLOCKQUOTE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseBlockquote unless _tmp
    return _tmp
  end

  # HtmlBlockBlockquote = HtmlBlockOpenBlockquote (HtmlBlockBlockquote | !HtmlBlockCloseBlockquote .)* HtmlBlockCloseBlockquote
  def _HtmlBlockBlockquote

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenBlockquote)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockBlockquote)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseBlockquote)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseBlockquote)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockBlockquote unless _tmp
    return _tmp
  end

  # HtmlBlockOpenCenter = "<" Spnl ("center" | "CENTER") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenCenter

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("center")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("CENTER")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenCenter unless _tmp
    return _tmp
  end

  # HtmlBlockCloseCenter = "<" Spnl "/" ("center" | "CENTER") Spnl ">"
  def _HtmlBlockCloseCenter

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("center")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("CENTER")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseCenter unless _tmp
    return _tmp
  end

  # HtmlBlockCenter = HtmlBlockOpenCenter (HtmlBlockCenter | !HtmlBlockCloseCenter .)* HtmlBlockCloseCenter
  def _HtmlBlockCenter

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenCenter)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockCenter)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseCenter)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseCenter)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCenter unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDir = "<" Spnl ("dir" | "DIR") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDir

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dir")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDir unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDir = "<" Spnl "/" ("dir" | "DIR") Spnl ">"
  def _HtmlBlockCloseDir

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dir")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDir unless _tmp
    return _tmp
  end

  # HtmlBlockDir = HtmlBlockOpenDir (HtmlBlockDir | !HtmlBlockCloseDir .)* HtmlBlockCloseDir
  def _HtmlBlockDir

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDir)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDir)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDir)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDir)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDir unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDiv = "<" Spnl ("div" | "DIV") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDiv

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("div")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIV")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDiv unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDiv = "<" Spnl "/" ("div" | "DIV") Spnl ">"
  def _HtmlBlockCloseDiv

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("div")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIV")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDiv unless _tmp
    return _tmp
  end

  # HtmlBlockDiv = HtmlBlockOpenDiv (HtmlBlockDiv | !HtmlBlockCloseDiv .)* HtmlBlockCloseDiv
  def _HtmlBlockDiv

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDiv)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDiv)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDiv)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDiv)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDiv unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDl = "<" Spnl ("dl" | "DL") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dl")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDl unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDl = "<" Spnl "/" ("dl" | "DL") Spnl ">"
  def _HtmlBlockCloseDl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dl")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDl unless _tmp
    return _tmp
  end

  # HtmlBlockDl = HtmlBlockOpenDl (HtmlBlockDl | !HtmlBlockCloseDl .)* HtmlBlockCloseDl
  def _HtmlBlockDl

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDl)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDl)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDl)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDl unless _tmp
    return _tmp
  end

  # HtmlBlockOpenFieldset = "<" Spnl ("fieldset" | "FIELDSET") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenFieldset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("fieldset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FIELDSET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenFieldset unless _tmp
    return _tmp
  end

  # HtmlBlockCloseFieldset = "<" Spnl "/" ("fieldset" | "FIELDSET") Spnl ">"
  def _HtmlBlockCloseFieldset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("fieldset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FIELDSET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseFieldset unless _tmp
    return _tmp
  end

  # HtmlBlockFieldset = HtmlBlockOpenFieldset (HtmlBlockFieldset | !HtmlBlockCloseFieldset .)* HtmlBlockCloseFieldset
  def _HtmlBlockFieldset

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenFieldset)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockFieldset)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseFieldset)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseFieldset)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockFieldset unless _tmp
    return _tmp
  end

  # HtmlBlockOpenForm = "<" Spnl ("form" | "FORM") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenForm

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("form")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FORM")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenForm unless _tmp
    return _tmp
  end

  # HtmlBlockCloseForm = "<" Spnl "/" ("form" | "FORM") Spnl ">"
  def _HtmlBlockCloseForm

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("form")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FORM")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseForm unless _tmp
    return _tmp
  end

  # HtmlBlockForm = HtmlBlockOpenForm (HtmlBlockForm | !HtmlBlockCloseForm .)* HtmlBlockCloseForm
  def _HtmlBlockForm

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenForm)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockForm)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseForm)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseForm)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockForm unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH1 = "<" Spnl ("h1" | "H1") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH1

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h1")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H1")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH1 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH1 = "<" Spnl "/" ("h1" | "H1") Spnl ">"
  def _HtmlBlockCloseH1

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h1")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H1")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH1 unless _tmp
    return _tmp
  end

  # HtmlBlockH1 = HtmlBlockOpenH1 (HtmlBlockH1 | !HtmlBlockCloseH1 .)* HtmlBlockCloseH1
  def _HtmlBlockH1

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH1)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH1)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH1)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH1)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH1 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH2 = "<" Spnl ("h2" | "H2") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH2

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h2")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H2")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH2 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH2 = "<" Spnl "/" ("h2" | "H2") Spnl ">"
  def _HtmlBlockCloseH2

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h2")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H2")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH2 unless _tmp
    return _tmp
  end

  # HtmlBlockH2 = HtmlBlockOpenH2 (HtmlBlockH2 | !HtmlBlockCloseH2 .)* HtmlBlockCloseH2
  def _HtmlBlockH2

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH2)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH2)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH2)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH2)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH2 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH3 = "<" Spnl ("h3" | "H3") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH3

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h3")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H3")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH3 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH3 = "<" Spnl "/" ("h3" | "H3") Spnl ">"
  def _HtmlBlockCloseH3

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h3")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H3")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH3 unless _tmp
    return _tmp
  end

  # HtmlBlockH3 = HtmlBlockOpenH3 (HtmlBlockH3 | !HtmlBlockCloseH3 .)* HtmlBlockCloseH3
  def _HtmlBlockH3

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH3)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH3)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH3)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH3)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH3 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH4 = "<" Spnl ("h4" | "H4") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH4

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h4")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H4")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH4 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH4 = "<" Spnl "/" ("h4" | "H4") Spnl ">"
  def _HtmlBlockCloseH4

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h4")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H4")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH4 unless _tmp
    return _tmp
  end

  # HtmlBlockH4 = HtmlBlockOpenH4 (HtmlBlockH4 | !HtmlBlockCloseH4 .)* HtmlBlockCloseH4
  def _HtmlBlockH4

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH4)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH4)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH4)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH4)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH4 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH5 = "<" Spnl ("h5" | "H5") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH5

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h5")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H5")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH5 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH5 = "<" Spnl "/" ("h5" | "H5") Spnl ">"
  def _HtmlBlockCloseH5

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h5")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H5")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH5 unless _tmp
    return _tmp
  end

  # HtmlBlockH5 = HtmlBlockOpenH5 (HtmlBlockH5 | !HtmlBlockCloseH5 .)* HtmlBlockCloseH5
  def _HtmlBlockH5

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH5)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH5)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH5)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH5)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH5 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH6 = "<" Spnl ("h6" | "H6") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH6

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h6")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H6")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH6 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH6 = "<" Spnl "/" ("h6" | "H6") Spnl ">"
  def _HtmlBlockCloseH6

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h6")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H6")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH6 unless _tmp
    return _tmp
  end

  # HtmlBlockH6 = HtmlBlockOpenH6 (HtmlBlockH6 | !HtmlBlockCloseH6 .)* HtmlBlockCloseH6
  def _HtmlBlockH6

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH6)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH6)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH6)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH6)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH6 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenMenu = "<" Spnl ("menu" | "MENU") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenMenu

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("menu")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("MENU")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenMenu unless _tmp
    return _tmp
  end

  # HtmlBlockCloseMenu = "<" Spnl "/" ("menu" | "MENU") Spnl ">"
  def _HtmlBlockCloseMenu

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("menu")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("MENU")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseMenu unless _tmp
    return _tmp
  end

  # HtmlBlockMenu = HtmlBlockOpenMenu (HtmlBlockMenu | !HtmlBlockCloseMenu .)* HtmlBlockCloseMenu
  def _HtmlBlockMenu

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenMenu)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockMenu)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseMenu)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseMenu)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockMenu unless _tmp
    return _tmp
  end

  # HtmlBlockOpenNoframes = "<" Spnl ("noframes" | "NOFRAMES") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenNoframes

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noframes")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOFRAMES")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenNoframes unless _tmp
    return _tmp
  end

  # HtmlBlockCloseNoframes = "<" Spnl "/" ("noframes" | "NOFRAMES") Spnl ">"
  def _HtmlBlockCloseNoframes

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noframes")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOFRAMES")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseNoframes unless _tmp
    return _tmp
  end

  # HtmlBlockNoframes = HtmlBlockOpenNoframes (HtmlBlockNoframes | !HtmlBlockCloseNoframes .)* HtmlBlockCloseNoframes
  def _HtmlBlockNoframes

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenNoframes)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockNoframes)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseNoframes)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseNoframes)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockNoframes unless _tmp
    return _tmp
  end

  # HtmlBlockOpenNoscript = "<" Spnl ("noscript" | "NOSCRIPT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenNoscript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noscript")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOSCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenNoscript unless _tmp
    return _tmp
  end

  # HtmlBlockCloseNoscript = "<" Spnl "/" ("noscript" | "NOSCRIPT") Spnl ">"
  def _HtmlBlockCloseNoscript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noscript")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOSCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseNoscript unless _tmp
    return _tmp
  end

  # HtmlBlockNoscript = HtmlBlockOpenNoscript (HtmlBlockNoscript | !HtmlBlockCloseNoscript .)* HtmlBlockCloseNoscript
  def _HtmlBlockNoscript

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenNoscript)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockNoscript)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseNoscript)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseNoscript)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockNoscript unless _tmp
    return _tmp
  end

  # HtmlBlockOpenOl = "<" Spnl ("ol" | "OL") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenOl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ol")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("OL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenOl unless _tmp
    return _tmp
  end

  # HtmlBlockCloseOl = "<" Spnl "/" ("ol" | "OL") Spnl ">"
  def _HtmlBlockCloseOl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ol")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("OL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseOl unless _tmp
    return _tmp
  end

  # HtmlBlockOl = HtmlBlockOpenOl (HtmlBlockOl | !HtmlBlockCloseOl .)* HtmlBlockCloseOl
  def _HtmlBlockOl

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenOl)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockOl)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseOl)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseOl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOl unless _tmp
    return _tmp
  end

  # HtmlBlockOpenP = "<" Spnl ("p" | "P") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenP

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("p")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("P")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenP unless _tmp
    return _tmp
  end

  # HtmlBlockCloseP = "<" Spnl "/" ("p" | "P") Spnl ">"
  def _HtmlBlockCloseP

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("p")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("P")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseP unless _tmp
    return _tmp
  end

  # HtmlBlockP = HtmlBlockOpenP (HtmlBlockP | !HtmlBlockCloseP .)* HtmlBlockCloseP
  def _HtmlBlockP

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenP)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockP)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseP)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseP)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockP unless _tmp
    return _tmp
  end

  # HtmlBlockOpenPre = "<" Spnl ("pre" | "PRE") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenPre

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("pre")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("PRE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenPre unless _tmp
    return _tmp
  end

  # HtmlBlockClosePre = "<" Spnl "/" ("pre" | "PRE") Spnl ">"
  def _HtmlBlockClosePre

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("pre")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("PRE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockClosePre unless _tmp
    return _tmp
  end

  # HtmlBlockPre = HtmlBlockOpenPre (HtmlBlockPre | !HtmlBlockClosePre .)* HtmlBlockClosePre
  def _HtmlBlockPre

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenPre)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockPre)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockClosePre)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockClosePre)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockPre unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTable = "<" Spnl ("table" | "TABLE") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTable

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("table")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TABLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTable unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTable = "<" Spnl "/" ("table" | "TABLE") Spnl ">"
  def _HtmlBlockCloseTable

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("table")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TABLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTable unless _tmp
    return _tmp
  end

  # HtmlBlockTable = HtmlBlockOpenTable (HtmlBlockTable | !HtmlBlockCloseTable .)* HtmlBlockCloseTable
  def _HtmlBlockTable

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTable)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTable)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTable)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTable)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTable unless _tmp
    return _tmp
  end

  # HtmlBlockOpenUl = "<" Spnl ("ul" | "UL") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ul")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("UL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenUl unless _tmp
    return _tmp
  end

  # HtmlBlockCloseUl = "<" Spnl "/" ("ul" | "UL") Spnl ">"
  def _HtmlBlockCloseUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ul")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("UL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseUl unless _tmp
    return _tmp
  end

  # HtmlBlockUl = HtmlBlockOpenUl (HtmlBlockUl | !HtmlBlockCloseUl .)* HtmlBlockCloseUl
  def _HtmlBlockUl

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenUl)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockUl)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseUl)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseUl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockUl unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDd = "<" Spnl ("dd" | "DD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dd")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDd unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDd = "<" Spnl "/" ("dd" | "DD") Spnl ">"
  def _HtmlBlockCloseDd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dd")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDd unless _tmp
    return _tmp
  end

  # HtmlBlockDd = HtmlBlockOpenDd (HtmlBlockDd | !HtmlBlockCloseDd .)* HtmlBlockCloseDd
  def _HtmlBlockDd

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDd)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDd)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDd)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDd)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDd unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDt = "<" Spnl ("dt" | "DT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDt

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dt")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDt unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDt = "<" Spnl "/" ("dt" | "DT") Spnl ">"
  def _HtmlBlockCloseDt

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dt")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDt unless _tmp
    return _tmp
  end

  # HtmlBlockDt = HtmlBlockOpenDt (HtmlBlockDt | !HtmlBlockCloseDt .)* HtmlBlockCloseDt
  def _HtmlBlockDt

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDt)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDt)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDt)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDt)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDt unless _tmp
    return _tmp
  end

  # HtmlBlockOpenFrameset = "<" Spnl ("frameset" | "FRAMESET") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenFrameset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("frameset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FRAMESET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenFrameset unless _tmp
    return _tmp
  end

  # HtmlBlockCloseFrameset = "<" Spnl "/" ("frameset" | "FRAMESET") Spnl ">"
  def _HtmlBlockCloseFrameset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("frameset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FRAMESET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseFrameset unless _tmp
    return _tmp
  end

  # HtmlBlockFrameset = HtmlBlockOpenFrameset (HtmlBlockFrameset | !HtmlBlockCloseFrameset .)* HtmlBlockCloseFrameset
  def _HtmlBlockFrameset

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenFrameset)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockFrameset)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseFrameset)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseFrameset)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockFrameset unless _tmp
    return _tmp
  end

  # HtmlBlockOpenLi = "<" Spnl ("li" | "LI") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenLi

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("li")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("LI")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenLi unless _tmp
    return _tmp
  end

  # HtmlBlockCloseLi = "<" Spnl "/" ("li" | "LI") Spnl ">"
  def _HtmlBlockCloseLi

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("li")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("LI")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseLi unless _tmp
    return _tmp
  end

  # HtmlBlockLi = HtmlBlockOpenLi (HtmlBlockLi | !HtmlBlockCloseLi .)* HtmlBlockCloseLi
  def _HtmlBlockLi

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenLi)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockLi)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseLi)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseLi)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockLi unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTbody = "<" Spnl ("tbody" | "TBODY") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTbody

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tbody")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TBODY")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTbody unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTbody = "<" Spnl "/" ("tbody" | "TBODY") Spnl ">"
  def _HtmlBlockCloseTbody

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tbody")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TBODY")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTbody unless _tmp
    return _tmp
  end

  # HtmlBlockTbody = HtmlBlockOpenTbody (HtmlBlockTbody | !HtmlBlockCloseTbody .)* HtmlBlockCloseTbody
  def _HtmlBlockTbody

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTbody)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTbody)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTbody)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTbody)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTbody unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTd = "<" Spnl ("td" | "TD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("td")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTd unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTd = "<" Spnl "/" ("td" | "TD") Spnl ">"
  def _HtmlBlockCloseTd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("td")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTd unless _tmp
    return _tmp
  end

  # HtmlBlockTd = HtmlBlockOpenTd (HtmlBlockTd | !HtmlBlockCloseTd .)* HtmlBlockCloseTd
  def _HtmlBlockTd

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTd)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTd)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTd)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTd)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTd unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTfoot = "<" Spnl ("tfoot" | "TFOOT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTfoot

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tfoot")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TFOOT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTfoot unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTfoot = "<" Spnl "/" ("tfoot" | "TFOOT") Spnl ">"
  def _HtmlBlockCloseTfoot

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tfoot")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TFOOT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTfoot unless _tmp
    return _tmp
  end

  # HtmlBlockTfoot = HtmlBlockOpenTfoot (HtmlBlockTfoot | !HtmlBlockCloseTfoot .)* HtmlBlockCloseTfoot
  def _HtmlBlockTfoot

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTfoot)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTfoot)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTfoot)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTfoot)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTfoot unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTh = "<" Spnl ("th" | "TH") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTh

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("th")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TH")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTh unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTh = "<" Spnl "/" ("th" | "TH") Spnl ">"
  def _HtmlBlockCloseTh

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("th")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TH")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTh unless _tmp
    return _tmp
  end

  # HtmlBlockTh = HtmlBlockOpenTh (HtmlBlockTh | !HtmlBlockCloseTh .)* HtmlBlockCloseTh
  def _HtmlBlockTh

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTh)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTh)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTh)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTh)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTh unless _tmp
    return _tmp
  end

  # HtmlBlockOpenThead = "<" Spnl ("thead" | "THEAD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenThead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("thead")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("THEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenThead unless _tmp
    return _tmp
  end

  # HtmlBlockCloseThead = "<" Spnl "/" ("thead" | "THEAD") Spnl ">"
  def _HtmlBlockCloseThead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("thead")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("THEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseThead unless _tmp
    return _tmp
  end

  # HtmlBlockThead = HtmlBlockOpenThead (HtmlBlockThead | !HtmlBlockCloseThead .)* HtmlBlockCloseThead
  def _HtmlBlockThead

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenThead)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockThead)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseThead)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseThead)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockThead unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTr = "<" Spnl ("tr" | "TR") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTr

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tr")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTr unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTr = "<" Spnl "/" ("tr" | "TR") Spnl ">"
  def _HtmlBlockCloseTr

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tr")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTr unless _tmp
    return _tmp
  end

  # HtmlBlockTr = HtmlBlockOpenTr (HtmlBlockTr | !HtmlBlockCloseTr .)* HtmlBlockCloseTr
  def _HtmlBlockTr

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTr)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTr)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTr)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTr)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTr unless _tmp
    return _tmp
  end

  # HtmlBlockOpenScript = "<" Spnl ("script" | "SCRIPT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenScript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("script")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("SCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenScript unless _tmp
    return _tmp
  end

  # HtmlBlockCloseScript = "<" Spnl "/" ("script" | "SCRIPT") Spnl ">"
  def _HtmlBlockCloseScript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("script")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("SCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseScript unless _tmp
    return _tmp
  end

  # HtmlBlockScript = HtmlBlockOpenScript (!HtmlBlockCloseScript .)* HtmlBlockCloseScript
  def _HtmlBlockScript

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenScript)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = apply(:_HtmlBlockCloseScript)
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseScript)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockScript unless _tmp
    return _tmp
  end

  # HtmlBlockOpenHead = "<" Spnl ("head" | "HEAD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenHead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("head")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("HEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenHead unless _tmp
    return _tmp
  end

  # HtmlBlockCloseHead = "<" Spnl "/" ("head" | "HEAD") Spnl ">"
  def _HtmlBlockCloseHead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("head")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("HEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseHead unless _tmp
    return _tmp
  end

  # HtmlBlockHead = HtmlBlockOpenHead (!HtmlBlockCloseHead .)* HtmlBlockCloseHead
  def _HtmlBlockHead

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenHead)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = apply(:_HtmlBlockCloseHead)
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseHead)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockHead unless _tmp
    return _tmp
  end

  # HtmlBlockInTags = (HtmlAnchor | HtmlBlockAddress | HtmlBlockBlockquote | HtmlBlockCenter | HtmlBlockDir | HtmlBlockDiv | HtmlBlockDl | HtmlBlockFieldset | HtmlBlockForm | HtmlBlockH1 | HtmlBlockH2 | HtmlBlockH3 | HtmlBlockH4 | HtmlBlockH5 | HtmlBlockH6 | HtmlBlockMenu | HtmlBlockNoframes | HtmlBlockNoscript | HtmlBlockOl | HtmlBlockP | HtmlBlockPre | HtmlBlockTable | HtmlBlockUl | HtmlBlockDd | HtmlBlockDt | HtmlBlockFrameset | HtmlBlockLi | HtmlBlockTbody | HtmlBlockTd | HtmlBlockTfoot | HtmlBlockTh | HtmlBlockThead | HtmlBlockTr | HtmlBlockScript | HtmlBlockHead)
  def _HtmlBlockInTags

    _save = self.pos
    while true # choice
      _tmp = apply(:_HtmlAnchor)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockAddress)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockBlockquote)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockCenter)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDir)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDiv)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockFieldset)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockForm)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH1)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH2)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH3)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH4)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH5)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH6)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockMenu)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockNoframes)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockNoscript)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockOl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockP)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockPre)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTable)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockUl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDd)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDt)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockFrameset)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockLi)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTbody)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTd)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTfoot)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTh)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockThead)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTr)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockScript)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockHead)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_HtmlBlockInTags unless _tmp
    return _tmp
  end

  # HtmlBlock = < (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then                 RDoc::Markup::Raw.new text               end }
  def _HtmlBlock

    _save = self.pos
    while true # sequence
      _text_start = self.pos

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_HtmlBlockInTags)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlComment)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlBlockSelfClosing)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlUnclosed)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if html? then
                RDoc::Markup::Raw.new text
              end ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlock unless _tmp
    return _tmp
  end

  # HtmlUnclosed = "<" Spnl HtmlUnclosedType Spnl HtmlAttribute* Spnl ">"
  def _HtmlUnclosed

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlUnclosedType)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlUnclosed unless _tmp
    return _tmp
  end

  # HtmlUnclosedType = ("HR" | "hr")
  def _HtmlUnclosedType

    _save = self.pos
    while true # choice
      _tmp = match_string("HR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("hr")
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_HtmlUnclosedType unless _tmp
    return _tmp
  end

  # HtmlBlockSelfClosing = "<" Spnl HtmlBlockType Spnl HtmlAttribute* "/" Spnl ">"
  def _HtmlBlockSelfClosing

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockType)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockSelfClosing unless _tmp
    return _tmp
  end

  # HtmlBlockType = ("ADDRESS" | "BLOCKQUOTE" | "CENTER" | "DD" | "DIR" | "DIV" | "DL" | "DT" | "FIELDSET" | "FORM" | "FRAMESET" | "H1" | "H2" | "H3" | "H4" | "H5" | "H6" | "HR" | "ISINDEX" | "LI" | "MENU" | "NOFRAMES" | "NOSCRIPT" | "OL" | "P" | "PRE" | "SCRIPT" | "TABLE" | "TBODY" | "TD" | "TFOOT" | "TH" | "THEAD" | "TR" | "UL" | "address" | "blockquote" | "center" | "dd" | "dir" | "div" | "dl" | "dt" | "fieldset" | "form" | "frameset" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "hr" | "isindex" | "li" | "menu" | "noframes" | "noscript" | "ol" | "p" | "pre" | "script" | "table" | "tbody" | "td" | "tfoot" | "th" | "thead" | "tr" | "ul")
  def _HtmlBlockType

    _save = self.pos
    while true # choice
      _tmp = match_string("ADDRESS")
      break if _tmp
      self.pos = _save
      _tmp = match_string("BLOCKQUOTE")
      break if _tmp
      self.pos = _save
      _tmp = match_string("CENTER")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DD")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DIR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DIV")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DL")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("FIELDSET")
      break if _tmp
      self.pos = _save
      _tmp = match_string("FORM")
      break if _tmp
      self.pos = _save
      _tmp = match_string("FRAMESET")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H1")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H2")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H3")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H4")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H5")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H6")
      break if _tmp
      self.pos = _save
      _tmp = match_string("HR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("ISINDEX")
      break if _tmp
      self.pos = _save
      _tmp = match_string("LI")
      break if _tmp
      self.pos = _save
      _tmp = match_string("MENU")
      break if _tmp
      self.pos = _save
      _tmp = match_string("NOFRAMES")
      break if _tmp
      self.pos = _save
      _tmp = match_string("NOSCRIPT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("OL")
      break if _tmp
      self.pos = _save
      _tmp = match_string("P")
      break if _tmp
      self.pos = _save
      _tmp = match_string("PRE")
      break if _tmp
      self.pos = _save
      _tmp = match_string("SCRIPT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TABLE")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TBODY")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TD")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TFOOT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TH")
      break if _tmp
      self.pos = _save
      _tmp = match_string("THEAD")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("UL")
      break if _tmp
      self.pos = _save
      _tmp = match_string("address")
      break if _tmp
      self.pos = _save
      _tmp = match_string("blockquote")
      break if _tmp
      self.pos = _save
      _tmp = match_string("center")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dd")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dir")
      break if _tmp
      self.pos = _save
      _tmp = match_string("div")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dl")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dt")
      break if _tmp
      self.pos = _save
      _tmp = match_string("fieldset")
      break if _tmp
      self.pos = _save
      _tmp = match_string("form")
      break if _tmp
      self.pos = _save
      _tmp = match_string("frameset")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h1")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h2")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h3")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h4")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h5")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h6")
      break if _tmp
      self.pos = _save
      _tmp = match_string("hr")
      break if _tmp
      self.pos = _save
      _tmp = match_string("isindex")
      break if _tmp
      self.pos = _save
      _tmp = match_string("li")
      break if _tmp
      self.pos = _save
      _tmp = match_string("menu")
      break if _tmp
      self.pos = _save
      _tmp = match_string("noframes")
      break if _tmp
      self.pos = _save
      _tmp = match_string("noscript")
      break if _tmp
      self.pos = _save
      _tmp = match_string("ol")
      break if _tmp
      self.pos = _save
      _tmp = match_string("p")
      break if _tmp
      self.pos = _save
      _tmp = match_string("pre")
      break if _tmp
      self.pos = _save
      _tmp = match_string("script")
      break if _tmp
      self.pos = _save
      _tmp = match_string("table")
      break if _tmp
      self.pos = _save
      _tmp = match_string("tbody")
      break if _tmp
      self.pos = _save
      _tmp = match_string("td")
      break if _tmp
      self.pos = _save
      _tmp = match_string("tfoot")
      break if _tmp
      self.pos = _save
      _tmp = match_string("th")
      break if _tmp
      self.pos = _save
      _tmp = match_string("thead")
      break if _tmp
      self.pos = _save
      _tmp = match_string("tr")
      break if _tmp
      self.pos = _save
      _tmp = match_string("ul")
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_HtmlBlockType unless _tmp
    return _tmp
  end

  # StyleOpen = "<" Spnl ("style" | "STYLE") Spnl HtmlAttribute* ">"
  def _StyleOpen

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("style")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("STYLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StyleOpen unless _tmp
    return _tmp
  end

  # StyleClose = "<" Spnl "/" ("style" | "STYLE") Spnl ">"
  def _StyleClose

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("style")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("STYLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StyleClose unless _tmp
    return _tmp
  end

  # InStyleTags = StyleOpen (!StyleClose .)* StyleClose
  def _InStyleTags

    _save = self.pos
    while true # sequence
      _tmp = apply(:_StyleOpen)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = apply(:_StyleClose)
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_StyleClose)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_InStyleTags unless _tmp
    return _tmp
  end

  # StyleBlock = < InStyleTags > @BlankLine* { if css? then                     RDoc::Markup::Raw.new text                   end }
  def _StyleBlock

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = apply(:_InStyleTags)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if css? then
                    RDoc::Markup::Raw.new text
                  end ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StyleBlock unless _tmp
    return _tmp
  end

  # Inlines = (!@Endline Inline:i { i } | @Endline:c !(&{ github? } Ticks3 /[^`\n]*$/) &Inline { c })+:chunks @Endline? { chunks }
  def _Inlines

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []

      _save2 = self.pos
      while true # choice

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = _Endline()
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_Inline)
          i = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  i ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save2

        _save5 = self.pos
        while true # sequence
          _tmp = _Endline()
          c = @result
          unless _tmp
            self.pos = _save5
            break
          end
          _save6 = self.pos

          _save7 = self.pos
          while true # sequence
            _save8 = self.pos
            _tmp = begin;  github? ; end
            self.pos = _save8
            unless _tmp
              self.pos = _save7
              break
            end
            _tmp = apply(:_Ticks3)
            unless _tmp
              self.pos = _save7
              break
            end
            _tmp = scan(/\G(?-mix:[^`\n]*$)/)
            unless _tmp
              self.pos = _save7
            end
            break
          end # end sequence

          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save5
            break
          end
          _save9 = self.pos
          _tmp = apply(:_Inline)
          self.pos = _save9
          unless _tmp
            self.pos = _save5
            break
          end
          @result = begin;  c ; end
          _tmp = true
          unless _tmp
            self.pos = _save5
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save2
        break
      end # end choice

      if _tmp
        _ary << @result
        while true

          _save10 = self.pos
          while true # choice

            _save11 = self.pos
            while true # sequence
              _save12 = self.pos
              _tmp = _Endline()
              _tmp = _tmp ? nil : true
              self.pos = _save12
              unless _tmp
                self.pos = _save11
                break
              end
              _tmp = apply(:_Inline)
              i = @result
              unless _tmp
                self.pos = _save11
                break
              end
              @result = begin;  i ; end
              _tmp = true
              unless _tmp
                self.pos = _save11
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save10

            _save13 = self.pos
            while true # sequence
              _tmp = _Endline()
              c = @result
              unless _tmp
                self.pos = _save13
                break
              end
              _save14 = self.pos

              _save15 = self.pos
              while true # sequence
                _save16 = self.pos
                _tmp = begin;  github? ; end
                self.pos = _save16
                unless _tmp
                  self.pos = _save15
                  break
                end
                _tmp = apply(:_Ticks3)
                unless _tmp
                  self.pos = _save15
                  break
                end
                _tmp = scan(/\G(?-mix:[^`\n]*$)/)
                unless _tmp
                  self.pos = _save15
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save14
              unless _tmp
                self.pos = _save13
                break
              end
              _save17 = self.pos
              _tmp = apply(:_Inline)
              self.pos = _save17
              unless _tmp
                self.pos = _save13
                break
              end
              @result = begin;  c ; end
              _tmp = true
              unless _tmp
                self.pos = _save13
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save10
            break
          end # end choice

          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      chunks = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save18 = self.pos
      _tmp = _Endline()
      unless _tmp
        _tmp = true
        self.pos = _save18
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  chunks ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Inlines unless _tmp
    return _tmp
  end

  # Inline = (Str | @Endline | UlOrStarLine | @Space | Strong | Emph | Strike | Image | Link | NoteReference | InlineNote | Code | RawHtml | Entity | EscapedChar | Symbol)
  def _Inline

    _save = self.pos
    while true # choice
      _tmp = apply(:_Str)
      break if _tmp
      self.pos = _save
      _tmp = _Endline()
      break if _tmp
      self.pos = _save
      _tmp = apply(:_UlOrStarLine)
      break if _tmp
      self.pos = _save
      _tmp = _Space()
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Strong)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Emph)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Strike)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Image)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Link)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_NoteReference)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_InlineNote)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Code)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_RawHtml)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Entity)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_EscapedChar)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Symbol)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Inline unless _tmp
    return _tmp
  end

  # Space = @Spacechar+ { " " }
  def _Space

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _Spacechar()
      if _tmp
        while true
          _tmp = _Spacechar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  " " ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Space unless _tmp
    return _tmp
  end

  # Str = @StartList:a < @NormalChar+ > { a = text } (StrChunk:c { a << c })* { a }
  def _Str

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save1 = self.pos
      _tmp = _NormalChar()
      if _tmp
        while true
          _tmp = _NormalChar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a = text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _tmp = apply(:_StrChunk)
          c = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a << c ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Str unless _tmp
    return _tmp
  end

  # StrChunk = < (@NormalChar | /_+/ &Alphanumeric)+ > { text }
  def _StrChunk

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _save1 = self.pos

      _save2 = self.pos
      while true # choice
        _tmp = _NormalChar()
        break if _tmp
        self.pos = _save2

        _save3 = self.pos
        while true # sequence
          _tmp = scan(/\G(?-mix:_+)/)
          unless _tmp
            self.pos = _save3
            break
          end
          _save4 = self.pos
          _tmp = apply(:_Alphanumeric)
          self.pos = _save4
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save2
        break
      end # end choice

      if _tmp
        while true

          _save5 = self.pos
          while true # choice
            _tmp = _NormalChar()
            break if _tmp
            self.pos = _save5

            _save6 = self.pos
            while true # sequence
              _tmp = scan(/\G(?-mix:_+)/)
              unless _tmp
                self.pos = _save6
                break
              end
              _save7 = self.pos
              _tmp = apply(:_Alphanumeric)
              self.pos = _save7
              unless _tmp
                self.pos = _save6
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save5
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StrChunk unless _tmp
    return _tmp
  end

  # EscapedChar = "\\" !@Newline < /[:\\`|*_{}\[\]()#+.!><-]/ > { text }
  def _EscapedChar

    _save = self.pos
    while true # sequence
      _tmp = match_string("\\")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Newline()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[:\\`|*_{}\[\]()#+.!><-])/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_EscapedChar unless _tmp
    return _tmp
  end

  # Entity = (HexEntity | DecEntity | CharEntity):a { a }
  def _Entity

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_HexEntity)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_DecEntity)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_CharEntity)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Entity unless _tmp
    return _tmp
  end

  # Endline = (@LineBreak | @TerminalEndline | @NormalEndline)
  def _Endline

    _save = self.pos
    while true # choice
      _tmp = _LineBreak()
      break if _tmp
      self.pos = _save
      _tmp = _TerminalEndline()
      break if _tmp
      self.pos = _save
      _tmp = _NormalEndline()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Endline unless _tmp
    return _tmp
  end

  # NormalEndline = @Sp @Newline !@BlankLine !">" !AtxStart !(Line /={1,}|-{1,}/ @Newline) { "\n" }
  def _NormalEndline

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = match_string(">")
      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos
      _tmp = apply(:_AtxStart)
      _tmp = _tmp ? nil : true
      self.pos = _save3
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos

      _save5 = self.pos
      while true # sequence
        _tmp = apply(:_Line)
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = scan(/\G(?-mix:={1,}|-{1,})/)
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = _Newline()
        unless _tmp
          self.pos = _save5
        end
        break
      end # end sequence

      _tmp = _tmp ? nil : true
      self.pos = _save4
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "\n" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NormalEndline unless _tmp
    return _tmp
  end

  # TerminalEndline = @Sp @Newline @Eof
  def _TerminalEndline

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Eof()
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TerminalEndline unless _tmp
    return _tmp
  end

  # LineBreak = "  " @NormalEndline { RDoc::Markup::HardBreak.new }
  def _LineBreak

    _save = self.pos
    while true # sequence
      _tmp = match_string("  ")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _NormalEndline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::HardBreak.new ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_LineBreak unless _tmp
    return _tmp
  end

  # Symbol = < @SpecialChar > { text }
  def _Symbol

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = _SpecialChar()
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Symbol unless _tmp
    return _tmp
  end

  # UlOrStarLine = (UlLine | StarLine):a { a }
  def _UlOrStarLine

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_UlLine)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_StarLine)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_UlOrStarLine unless _tmp
    return _tmp
  end

  # StarLine = (< /\*{4,}/ > { text } | < @Spacechar /\*+/ &@Spacechar > { text })
  def _StarLine

    _save = self.pos
    while true # choice

      _save1 = self.pos
      while true # sequence
        _text_start = self.pos
        _tmp = scan(/\G(?-mix:\*{4,})/)
        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save1
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save

      _save2 = self.pos
      while true # sequence
        _text_start = self.pos

        _save3 = self.pos
        while true # sequence
          _tmp = _Spacechar()
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = scan(/\G(?-mix:\*+)/)
          unless _tmp
            self.pos = _save3
            break
          end
          _save4 = self.pos
          _tmp = _Spacechar()
          self.pos = _save4
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_StarLine unless _tmp
    return _tmp
  end

  # UlLine = (< /_{4,}/ > { text } | < @Spacechar /_+/ &@Spacechar > { text })
  def _UlLine

    _save = self.pos
    while true # choice

      _save1 = self.pos
      while true # sequence
        _text_start = self.pos
        _tmp = scan(/\G(?-mix:_{4,})/)
        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save1
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save

      _save2 = self.pos
      while true # sequence
        _text_start = self.pos

        _save3 = self.pos
        while true # sequence
          _tmp = _Spacechar()
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = scan(/\G(?-mix:_+)/)
          unless _tmp
            self.pos = _save3
            break
          end
          _save4 = self.pos
          _tmp = _Spacechar()
          self.pos = _save4
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_UlLine unless _tmp
    return _tmp
  end

  # Emph = (EmphStar | EmphUl)
  def _Emph

    _save = self.pos
    while true # choice
      _tmp = apply(:_EmphStar)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_EmphUl)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Emph unless _tmp
    return _tmp
  end

  # Whitespace = (@Spacechar | @Newline)
  def _Whitespace

    _save = self.pos
    while true # choice
      _tmp = _Spacechar()
      break if _tmp
      self.pos = _save
      _tmp = _Newline()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Whitespace unless _tmp
    return _tmp
  end

  # EmphStar = "*" !@Whitespace @StartList:a (!"*" Inline:b { a << b } | StrongStar:b { a << b })+ "*" { emphasis a.join }
  def _EmphStar

    _save = self.pos
    while true # sequence
      _tmp = match_string("*")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # choice

        _save4 = self.pos
        while true # sequence
          _save5 = self.pos
          _tmp = match_string("*")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save4
            break
          end
          _tmp = apply(:_Inline)
          b = @result
          unless _tmp
            self.pos = _save4
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save4
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3

        _save6 = self.pos
        while true # sequence
          _tmp = apply(:_StrongStar)
          b = @result
          unless _tmp
            self.pos = _save6
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save6
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3
        break
      end # end choice

      if _tmp
        while true

          _save7 = self.pos
          while true # choice

            _save8 = self.pos
            while true # sequence
              _save9 = self.pos
              _tmp = match_string("*")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save8
                break
              end
              _tmp = apply(:_Inline)
              b = @result
              unless _tmp
                self.pos = _save8
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save8
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7

            _save10 = self.pos
            while true # sequence
              _tmp = apply(:_StrongStar)
              b = @result
              unless _tmp
                self.pos = _save10
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("*")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  emphasis a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_EmphStar unless _tmp
    return _tmp
  end

  # EmphUl = "_" !@Whitespace @StartList:a (!"_" Inline:b { a << b } | StrongUl:b { a << b })+ "_" { emphasis a.join }
  def _EmphUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("_")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # choice

        _save4 = self.pos
        while true # sequence
          _save5 = self.pos
          _tmp = match_string("_")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save4
            break
          end
          _tmp = apply(:_Inline)
          b = @result
          unless _tmp
            self.pos = _save4
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save4
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3

        _save6 = self.pos
        while true # sequence
          _tmp = apply(:_StrongUl)
          b = @result
          unless _tmp
            self.pos = _save6
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save6
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3
        break
      end # end choice

      if _tmp
        while true

          _save7 = self.pos
          while true # choice

            _save8 = self.pos
            while true # sequence
              _save9 = self.pos
              _tmp = match_string("_")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save8
                break
              end
              _tmp = apply(:_Inline)
              b = @result
              unless _tmp
                self.pos = _save8
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save8
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7

            _save10 = self.pos
            while true # sequence
              _tmp = apply(:_StrongUl)
              b = @result
              unless _tmp
                self.pos = _save10
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("_")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  emphasis a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_EmphUl unless _tmp
    return _tmp
  end

  # Strong = (StrongStar | StrongUl)
  def _Strong

    _save = self.pos
    while true # choice
      _tmp = apply(:_StrongStar)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_StrongUl)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Strong unless _tmp
    return _tmp
  end

  # StrongStar = "**" !@Whitespace @StartList:a (!"**" Inline:b { a << b })+ "**" { strong a.join }
  def _StrongStar

    _save = self.pos
    while true # sequence
      _tmp = match_string("**")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = match_string("**")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string("**")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("**")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  strong a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StrongStar unless _tmp
    return _tmp
  end

  # StrongUl = "__" !@Whitespace @StartList:a (!"__" Inline:b { a << b })+ "__" { strong a.join }
  def _StrongUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("__")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = match_string("__")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string("__")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("__")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  strong a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StrongUl unless _tmp
    return _tmp
  end

  # Strike = &{ strike? } "~~" !@Whitespace @StartList:a (!"~~" Inline:b { a << b })+ "~~" { strike a.join }
  def _Strike

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  strike? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("~~")
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # sequence
        _save5 = self.pos
        _tmp = match_string("~~")
        _tmp = _tmp ? nil : true
        self.pos = _save5
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save4
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save4
        end
        break
      end # end sequence

      if _tmp
        while true

          _save6 = self.pos
          while true # sequence
            _save7 = self.pos
            _tmp = match_string("~~")
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save6
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save6
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save6
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save3
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("~~")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  strike a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Strike unless _tmp
    return _tmp
  end

  # Image = "!" (ExplicitLink | ReferenceLink):a { "rdoc-image:#{a[/\[(.*)\]/, 1]}" }
  def _Image

    _save = self.pos
    while true # sequence
      _tmp = match_string("!")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_ExplicitLink)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_ReferenceLink)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "rdoc-image:#{a[/\[(.*)\]/, 1]}" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Image unless _tmp
    return _tmp
  end

  # Link = (ExplicitLink | ReferenceLink | AutoLink)
  def _Link

    _save = self.pos
    while true # choice
      _tmp = apply(:_ExplicitLink)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_ReferenceLink)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_AutoLink)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Link unless _tmp
    return _tmp
  end

  # ReferenceLink = (ReferenceLinkDouble | ReferenceLinkSingle)
  def _ReferenceLink

    _save = self.pos
    while true # choice
      _tmp = apply(:_ReferenceLinkDouble)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_ReferenceLinkSingle)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_ReferenceLink unless _tmp
    return _tmp
  end

  # ReferenceLinkDouble = Label:content < Spnl > !"[]" Label:label { link_to content, label, text }
  def _ReferenceLinkDouble

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Label)
      content = @result
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = apply(:_Spnl)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("[]")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Label)
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  link_to content, label, text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ReferenceLinkDouble unless _tmp
    return _tmp
  end

  # ReferenceLinkSingle = Label:content < (Spnl "[]")? > { link_to content, content, text }
  def _ReferenceLinkSingle

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Label)
      content = @result
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = apply(:_Spnl)
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = match_string("[]")
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  link_to content, content, text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ReferenceLinkSingle unless _tmp
    return _tmp
  end

  # ExplicitLink = Label:l "(" @Sp Source:s Spnl Title @Sp ")" { "{#{l}}[#{s}]" }
  def _ExplicitLink

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Label)
      l = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("(")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Source)
      s = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Title)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(")")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "{#{l}}[#{s}]" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ExplicitLink unless _tmp
    return _tmp
  end

  # Source = ("<" < SourceContents > ">" | < SourceContents >) { text }
  def _Source

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = match_string("<")
          unless _tmp
            self.pos = _save2
            break
          end
          _text_start = self.pos
          _tmp = apply(:_SourceContents)
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = match_string(">")
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        _text_start = self.pos
        _tmp = apply(:_SourceContents)
        if _tmp
          text = get_text(_text_start)
        end
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Source unless _tmp
    return _tmp
  end

  # SourceContents = ((!"(" !")" !">" Nonspacechar)+ | "(" SourceContents ")")*
  def _SourceContents
    while true

      _save1 = self.pos
      while true # choice
        _save2 = self.pos

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = match_string("(")
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _save5 = self.pos
          _tmp = match_string(")")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save3
            break
          end
          _save6 = self.pos
          _tmp = match_string(">")
          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_Nonspacechar)
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          while true

            _save7 = self.pos
            while true # sequence
              _save8 = self.pos
              _tmp = match_string("(")
              _tmp = _tmp ? nil : true
              self.pos = _save8
              unless _tmp
                self.pos = _save7
                break
              end
              _save9 = self.pos
              _tmp = match_string(")")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save7
                break
              end
              _save10 = self.pos
              _tmp = match_string(">")
              _tmp = _tmp ? nil : true
              self.pos = _save10
              unless _tmp
                self.pos = _save7
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save7
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save2
        end
        break if _tmp
        self.pos = _save1

        _save11 = self.pos
        while true # sequence
          _tmp = match_string("(")
          unless _tmp
            self.pos = _save11
            break
          end
          _tmp = apply(:_SourceContents)
          unless _tmp
            self.pos = _save11
            break
          end
          _tmp = match_string(")")
          unless _tmp
            self.pos = _save11
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_SourceContents unless _tmp
    return _tmp
  end

  # Title = (TitleSingle | TitleDouble | ""):a { a }
  def _Title

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_TitleSingle)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_TitleDouble)
        break if _tmp
        self.pos = _save1
        _tmp = match_string("")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Title unless _tmp
    return _tmp
  end

  # TitleSingle = "'" (!("'" @Sp (")" | @Newline)) .)* "'"
  def _TitleSingle

    _save = self.pos
    while true # sequence
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # sequence
            _tmp = match_string("'")
            unless _tmp
              self.pos = _save4
              break
            end
            _tmp = _Sp()
            unless _tmp
              self.pos = _save4
              break
            end

            _save5 = self.pos
            while true # choice
              _tmp = match_string(")")
              break if _tmp
              self.pos = _save5
              _tmp = _Newline()
              break if _tmp
              self.pos = _save5
              break
            end # end choice

            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TitleSingle unless _tmp
    return _tmp
  end

  # TitleDouble = "\"" (!("\"" @Sp (")" | @Newline)) .)* "\""
  def _TitleDouble

    _save = self.pos
    while true # sequence
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # sequence
            _tmp = match_string("\"")
            unless _tmp
              self.pos = _save4
              break
            end
            _tmp = _Sp()
            unless _tmp
              self.pos = _save4
              break
            end

            _save5 = self.pos
            while true # choice
              _tmp = match_string(")")
              break if _tmp
              self.pos = _save5
              _tmp = _Newline()
              break if _tmp
              self.pos = _save5
              break
            end # end choice

            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TitleDouble unless _tmp
    return _tmp
  end

  # AutoLink = (AutoLinkUrl | AutoLinkEmail)
  def _AutoLink

    _save = self.pos
    while true # choice
      _tmp = apply(:_AutoLinkUrl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_AutoLinkEmail)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_AutoLink unless _tmp
    return _tmp
  end

  # AutoLinkUrl = "<" < /[A-Za-z]+/ "://" (!@Newline !">" .)+ > ">" { text }
  def _AutoLinkUrl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos

      _save1 = self.pos
      while true # sequence
        _tmp = scan(/\G(?-mix:[A-Za-z]+)/)
        unless _tmp
          self.pos = _save1
          break
        end
        _tmp = match_string("://")
        unless _tmp
          self.pos = _save1
          break
        end
        _save2 = self.pos

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = _Newline()
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _save5 = self.pos
          _tmp = match_string(">")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          while true

            _save6 = self.pos
            while true # sequence
              _save7 = self.pos
              _tmp = _Newline()
              _tmp = _tmp ? nil : true
              self.pos = _save7
              unless _tmp
                self.pos = _save6
                break
              end
              _save8 = self.pos
              _tmp = match_string(">")
              _tmp = _tmp ? nil : true
              self.pos = _save8
              unless _tmp
                self.pos = _save6
                break
              end
              _tmp = get_byte
              unless _tmp
                self.pos = _save6
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save2
        end
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AutoLinkUrl unless _tmp
    return _tmp
  end

  # AutoLinkEmail = "<" "mailto:"? < /[\w+.\/!%~$-]+/i "@" (!@Newline !">" .)+ > ">" { "mailto:#{text}" }
  def _AutoLinkEmail

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("mailto:")
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = scan(/\G(?i-mx:[\w+.\/!%~$-]+)/)
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = match_string("@")
        unless _tmp
          self.pos = _save2
          break
        end
        _save3 = self.pos

        _save4 = self.pos
        while true # sequence
          _save5 = self.pos
          _tmp = _Newline()
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save4
            break
          end
          _save6 = self.pos
          _tmp = match_string(">")
          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save4
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save4
          end
          break
        end # end sequence

        if _tmp
          while true

            _save7 = self.pos
            while true # sequence
              _save8 = self.pos
              _tmp = _Newline()
              _tmp = _tmp ? nil : true
              self.pos = _save8
              unless _tmp
                self.pos = _save7
                break
              end
              _save9 = self.pos
              _tmp = match_string(">")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save7
                break
              end
              _tmp = get_byte
              unless _tmp
                self.pos = _save7
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save3
        end
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "mailto:#{text}" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AutoLinkEmail unless _tmp
    return _tmp
  end

  # Reference = @NonindentSpace !"[]" Label:label ":" Spnl RefSrc:link RefTitle @BlankLine+ { # TODO use title               reference label, link               nil             }
  def _Reference

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("[]")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Label)
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(":")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RefSrc)
      link = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RefTitle)
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  # TODO use title
              reference label, link
              nil
            ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Reference unless _tmp
    return _tmp
  end

  # Label = "[" (!"^" &{ notes? } | &. &{ !notes? }) @StartList:a (!"]" Inline:l { a << l })* "]" { a.join.gsub(/\s+/, ' ') }
  def _Label

    _save = self.pos
    while true # sequence
      _tmp = match_string("[")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = match_string("^")
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _save4 = self.pos
          _tmp = begin;  notes? ; end
          self.pos = _save4
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save5 = self.pos
        while true # sequence
          _save6 = self.pos
          _tmp = get_byte
          self.pos = _save6
          unless _tmp
            self.pos = _save5
            break
          end
          _save7 = self.pos
          _tmp = begin;  !notes? ; end
          self.pos = _save7
          unless _tmp
            self.pos = _save5
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save9 = self.pos
        while true # sequence
          _save10 = self.pos
          _tmp = match_string("]")
          _tmp = _tmp ? nil : true
          self.pos = _save10
          unless _tmp
            self.pos = _save9
            break
          end
          _tmp = apply(:_Inline)
          l = @result
          unless _tmp
            self.pos = _save9
            break
          end
          @result = begin;  a << l ; end
          _tmp = true
          unless _tmp
            self.pos = _save9
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("]")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a.join.gsub(/\s+/, ' ') ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Label unless _tmp
    return _tmp
  end

  # RefSrc = < Nonspacechar+ > { text }
  def _RefSrc

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _save1 = self.pos
      _tmp = apply(:_Nonspacechar)
      if _tmp
        while true
          _tmp = apply(:_Nonspacechar)
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefSrc unless _tmp
    return _tmp
  end

  # RefTitle = (RefTitleSingle | RefTitleDouble | RefTitleParens | EmptyTitle)
  def _RefTitle

    _save = self.pos
    while true # choice
      _tmp = apply(:_RefTitleSingle)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_RefTitleDouble)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_RefTitleParens)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_EmptyTitle)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_RefTitle unless _tmp
    return _tmp
  end

  # EmptyTitle = ""
  def _EmptyTitle
    _tmp = match_string("")
    set_failed_rule :_EmptyTitle unless _tmp
    return _tmp
  end

  # RefTitleSingle = Spnl "'" < (!("'" @Sp @Newline | @Newline) .)* > "'" { text }
  def _RefTitleSingle

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # choice

            _save5 = self.pos
            while true # sequence
              _tmp = match_string("'")
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Sp()
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Newline()
              unless _tmp
                self.pos = _save5
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            _tmp = _Newline()
            break if _tmp
            self.pos = _save4
            break
          end # end choice

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefTitleSingle unless _tmp
    return _tmp
  end

  # RefTitleDouble = Spnl "\"" < (!("\"" @Sp @Newline | @Newline) .)* > "\"" { text }
  def _RefTitleDouble

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # choice

            _save5 = self.pos
            while true # sequence
              _tmp = match_string("\"")
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Sp()
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Newline()
              unless _tmp
                self.pos = _save5
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            _tmp = _Newline()
            break if _tmp
            self.pos = _save4
            break
          end # end choice

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefTitleDouble unless _tmp
    return _tmp
  end

  # RefTitleParens = Spnl "(" < (!(")" @Sp @Newline | @Newline) .)* > ")" { text }
  def _RefTitleParens

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("(")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # choice

            _save5 = self.pos
            while true # sequence
              _tmp = match_string(")")
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Sp()
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Newline()
              unless _tmp
                self.pos = _save5
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            _tmp = _Newline()
            break if _tmp
            self.pos = _save4
            break
          end # end choice

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(")")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefTitleParens unless _tmp
    return _tmp
  end

  # References = (Reference | SkipBlock)*
  def _References
    while true

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Reference)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_SkipBlock)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_References unless _tmp
    return _tmp
  end

  # Ticks1 = "`" !"`"
  def _Ticks1

    _save = self.pos
    while true # sequence
      _tmp = match_string("`")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks1 unless _tmp
    return _tmp
  end

  # Ticks2 = "``" !"`"
  def _Ticks2

    _save = self.pos
    while true # sequence
      _tmp = match_string("``")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks2 unless _tmp
    return _tmp
  end

  # Ticks3 = "```" !"`"
  def _Ticks3

    _save = self.pos
    while true # sequence
      _tmp = match_string("```")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks3 unless _tmp
    return _tmp
  end

  # Ticks4 = "````" !"`"
  def _Ticks4

    _save = self.pos
    while true # sequence
      _tmp = match_string("````")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks4 unless _tmp
    return _tmp
  end

  # Ticks5 = "`````" !"`"
  def _Ticks5

    _save = self.pos
    while true # sequence
      _tmp = match_string("`````")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks5 unless _tmp
    return _tmp
  end

  # Code = (Ticks1 @Sp < ((!"`" Nonspacechar)+ | !Ticks1 /`+/ | !(@Sp Ticks1) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks1 | Ticks2 @Sp < ((!"`" Nonspacechar)+ | !Ticks2 /`+/ | !(@Sp Ticks2) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks2 | Ticks3 @Sp < ((!"`" Nonspacechar)+ | !Ticks3 /`+/ | !(@Sp Ticks3) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks3 | Ticks4 @Sp < ((!"`" Nonspacechar)+ | !Ticks4 /`+/ | !(@Sp Ticks4) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks4 | Ticks5 @Sp < ((!"`" Nonspacechar)+ | !Ticks5 /`+/ | !(@Sp Ticks5) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks5) { "<code>#{text}</code>" }
  def _Code

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks1)
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _text_start = self.pos
          _save3 = self.pos

          _save4 = self.pos
          while true # choice
            _save5 = self.pos

            _save6 = self.pos
            while true # sequence
              _save7 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save7
              unless _tmp
                self.pos = _save6
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save6
              end
              break
            end # end sequence

            if _tmp
              while true

                _save8 = self.pos
                while true # sequence
                  _save9 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save9
                  unless _tmp
                    self.pos = _save8
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save8
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save5
            end
            break if _tmp
            self.pos = _save4

            _save10 = self.pos
            while true # sequence
              _save11 = self.pos
              _tmp = apply(:_Ticks1)
              _tmp = _tmp ? nil : true
              self.pos = _save11
              unless _tmp
                self.pos = _save10
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4

            _save12 = self.pos
            while true # sequence
              _save13 = self.pos

              _save14 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save14
                  break
                end
                _tmp = apply(:_Ticks1)
                unless _tmp
                  self.pos = _save14
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save13
              unless _tmp
                self.pos = _save12
                break
              end

              _save15 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save15

                _save16 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save16
                    break
                  end
                  _save17 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save17
                  unless _tmp
                    self.pos = _save16
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save15
                break
              end # end choice

              unless _tmp
                self.pos = _save12
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            break
          end # end choice

          if _tmp
            while true

              _save18 = self.pos
              while true # choice
                _save19 = self.pos

                _save20 = self.pos
                while true # sequence
                  _save21 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save21
                  unless _tmp
                    self.pos = _save20
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save20
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save22 = self.pos
                    while true # sequence
                      _save23 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save23
                      unless _tmp
                        self.pos = _save22
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save22
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save19
                end
                break if _tmp
                self.pos = _save18

                _save24 = self.pos
                while true # sequence
                  _save25 = self.pos
                  _tmp = apply(:_Ticks1)
                  _tmp = _tmp ? nil : true
                  self.pos = _save25
                  unless _tmp
                    self.pos = _save24
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save24
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save18

                _save26 = self.pos
                while true # sequence
                  _save27 = self.pos

                  _save28 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save28
                      break
                    end
                    _tmp = apply(:_Ticks1)
                    unless _tmp
                      self.pos = _save28
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save27
                  unless _tmp
                    self.pos = _save26
                    break
                  end

                  _save29 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save29

                    _save30 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save30
                        break
                      end
                      _save31 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save31
                      unless _tmp
                        self.pos = _save30
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save29
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save26
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save18
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save3
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = apply(:_Ticks1)
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save32 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks2)
          unless _tmp
            self.pos = _save32
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save32
            break
          end
          _text_start = self.pos
          _save33 = self.pos

          _save34 = self.pos
          while true # choice
            _save35 = self.pos

            _save36 = self.pos
            while true # sequence
              _save37 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save37
              unless _tmp
                self.pos = _save36
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save36
              end
              break
            end # end sequence

            if _tmp
              while true

                _save38 = self.pos
                while true # sequence
                  _save39 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save39
                  unless _tmp
                    self.pos = _save38
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save38
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save35
            end
            break if _tmp
            self.pos = _save34

            _save40 = self.pos
            while true # sequence
              _save41 = self.pos
              _tmp = apply(:_Ticks2)
              _tmp = _tmp ? nil : true
              self.pos = _save41
              unless _tmp
                self.pos = _save40
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save40
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save34

            _save42 = self.pos
            while true # sequence
              _save43 = self.pos

              _save44 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save44
                  break
                end
                _tmp = apply(:_Ticks2)
                unless _tmp
                  self.pos = _save44
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save43
              unless _tmp
                self.pos = _save42
                break
              end

              _save45 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save45

                _save46 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save46
                    break
                  end
                  _save47 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save47
                  unless _tmp
                    self.pos = _save46
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save45
                break
              end # end choice

              unless _tmp
                self.pos = _save42
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save34
            break
          end # end choice

          if _tmp
            while true

              _save48 = self.pos
              while true # choice
                _save49 = self.pos

                _save50 = self.pos
                while true # sequence
                  _save51 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save51
                  unless _tmp
                    self.pos = _save50
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save50
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save52 = self.pos
                    while true # sequence
                      _save53 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save53
                      unless _tmp
                        self.pos = _save52
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save52
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save49
                end
                break if _tmp
                self.pos = _save48

                _save54 = self.pos
                while true # sequence
                  _save55 = self.pos
                  _tmp = apply(:_Ticks2)
                  _tmp = _tmp ? nil : true
                  self.pos = _save55
                  unless _tmp
                    self.pos = _save54
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save54
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save48

                _save56 = self.pos
                while true # sequence
                  _save57 = self.pos

                  _save58 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save58
                      break
                    end
                    _tmp = apply(:_Ticks2)
                    unless _tmp
                      self.pos = _save58
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save57
                  unless _tmp
                    self.pos = _save56
                    break
                  end

                  _save59 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save59

                    _save60 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save60
                        break
                      end
                      _save61 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save61
                      unless _tmp
                        self.pos = _save60
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save59
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save56
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save48
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save33
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save32
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save32
            break
          end
          _tmp = apply(:_Ticks2)
          unless _tmp
            self.pos = _save32
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save62 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks3)
          unless _tmp
            self.pos = _save62
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save62
            break
          end
          _text_start = self.pos
          _save63 = self.pos

          _save64 = self.pos
          while true # choice
            _save65 = self.pos

            _save66 = self.pos
            while true # sequence
              _save67 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save67
              unless _tmp
                self.pos = _save66
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save66
              end
              break
            end # end sequence

            if _tmp
              while true

                _save68 = self.pos
                while true # sequence
                  _save69 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save69
                  unless _tmp
                    self.pos = _save68
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save68
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save65
            end
            break if _tmp
            self.pos = _save64

            _save70 = self.pos
            while true # sequence
              _save71 = self.pos
              _tmp = apply(:_Ticks3)
              _tmp = _tmp ? nil : true
              self.pos = _save71
              unless _tmp
                self.pos = _save70
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save70
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save64

            _save72 = self.pos
            while true # sequence
              _save73 = self.pos

              _save74 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save74
                  break
                end
                _tmp = apply(:_Ticks3)
                unless _tmp
                  self.pos = _save74
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save73
              unless _tmp
                self.pos = _save72
                break
              end

              _save75 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save75

                _save76 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save76
                    break
                  end
                  _save77 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save77
                  unless _tmp
                    self.pos = _save76
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save75
                break
              end # end choice

              unless _tmp
                self.pos = _save72
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save64
            break
          end # end choice

          if _tmp
            while true

              _save78 = self.pos
              while true # choice
                _save79 = self.pos

                _save80 = self.pos
                while true # sequence
                  _save81 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save81
                  unless _tmp
                    self.pos = _save80
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save80
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save82 = self.pos
                    while true # sequence
                      _save83 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save83
                      unless _tmp
                        self.pos = _save82
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save82
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save79
                end
                break if _tmp
                self.pos = _save78

                _save84 = self.pos
                while true # sequence
                  _save85 = self.pos
                  _tmp = apply(:_Ticks3)
                  _tmp = _tmp ? nil : true
                  self.pos = _save85
                  unless _tmp
                    self.pos = _save84
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save84
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save78

                _save86 = self.pos
                while true # sequence
                  _save87 = self.pos

                  _save88 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save88
                      break
                    end
                    _tmp = apply(:_Ticks3)
                    unless _tmp
                      self.pos = _save88
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save87
                  unless _tmp
                    self.pos = _save86
                    break
                  end

                  _save89 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save89

                    _save90 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save90
                        break
                      end
                      _save91 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save91
                      unless _tmp
                        self.pos = _save90
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save89
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save86
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save78
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save63
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save62
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save62
            break
          end
          _tmp = apply(:_Ticks3)
          unless _tmp
            self.pos = _save62
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save92 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks4)
          unless _tmp
            self.pos = _save92
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save92
            break
          end
          _text_start = self.pos
          _save93 = self.pos

          _save94 = self.pos
          while true # choice
            _save95 = self.pos

            _save96 = self.pos
            while true # sequence
              _save97 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save97
              unless _tmp
                self.pos = _save96
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save96
              end
              break
            end # end sequence

            if _tmp
              while true

                _save98 = self.pos
                while true # sequence
                  _save99 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save99
                  unless _tmp
                    self.pos = _save98
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save98
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save95
            end
            break if _tmp
            self.pos = _save94

            _save100 = self.pos
            while true # sequence
              _save101 = self.pos
              _tmp = apply(:_Ticks4)
              _tmp = _tmp ? nil : true
              self.pos = _save101
              unless _tmp
                self.pos = _save100
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save100
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save94

            _save102 = self.pos
            while true # sequence
              _save103 = self.pos

              _save104 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save104
                  break
                end
                _tmp = apply(:_Ticks4)
                unless _tmp
                  self.pos = _save104
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save103
              unless _tmp
                self.pos = _save102
                break
              end

              _save105 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save105

                _save106 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save106
                    break
                  end
                  _save107 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save107
                  unless _tmp
                    self.pos = _save106
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save105
                break
              end # end choice

              unless _tmp
                self.pos = _save102
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save94
            break
          end # end choice

          if _tmp
            while true

              _save108 = self.pos
              while true # choice
                _save109 = self.pos

                _save110 = self.pos
                while true # sequence
                  _save111 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save111
                  unless _tmp
                    self.pos = _save110
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save110
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save112 = self.pos
                    while true # sequence
                      _save113 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save113
                      unless _tmp
                        self.pos = _save112
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save112
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save109
                end
                break if _tmp
                self.pos = _save108

                _save114 = self.pos
                while true # sequence
                  _save115 = self.pos
                  _tmp = apply(:_Ticks4)
                  _tmp = _tmp ? nil : true
                  self.pos = _save115
                  unless _tmp
                    self.pos = _save114
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save114
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save108

                _save116 = self.pos
                while true # sequence
                  _save117 = self.pos

                  _save118 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save118
                      break
                    end
                    _tmp = apply(:_Ticks4)
                    unless _tmp
                      self.pos = _save118
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save117
                  unless _tmp
                    self.pos = _save116
                    break
                  end

                  _save119 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save119

                    _save120 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save120
                        break
                      end
                      _save121 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save121
                      unless _tmp
                        self.pos = _save120
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save119
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save116
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save108
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save93
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save92
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save92
            break
          end
          _tmp = apply(:_Ticks4)
          unless _tmp
            self.pos = _save92
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save122 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks5)
          unless _tmp
            self.pos = _save122
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save122
            break
          end
          _text_start = self.pos
          _save123 = self.pos

          _save124 = self.pos
          while true # choice
            _save125 = self.pos

            _save126 = self.pos
            while true # sequence
              _save127 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save127
              unless _tmp
                self.pos = _save126
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save126
              end
              break
            end # end sequence

            if _tmp
              while true

                _save128 = self.pos
                while true # sequence
                  _save129 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save129
                  unless _tmp
                    self.pos = _save128
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save128
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save125
            end
            break if _tmp
            self.pos = _save124

            _save130 = self.pos
            while true # sequence
              _save131 = self.pos
              _tmp = apply(:_Ticks5)
              _tmp = _tmp ? nil : true
              self.pos = _save131
              unless _tmp
                self.pos = _save130
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save130
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save124

            _save132 = self.pos
            while true # sequence
              _save133 = self.pos

              _save134 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save134
                  break
                end
                _tmp = apply(:_Ticks5)
                unless _tmp
                  self.pos = _save134
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save133
              unless _tmp
                self.pos = _save132
                break
              end

              _save135 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save135

                _save136 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save136
                    break
                  end
                  _save137 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save137
                  unless _tmp
                    self.pos = _save136
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save135
                break
              end # end choice

              unless _tmp
                self.pos = _save132
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save124
            break
          end # end choice

          if _tmp
            while true

              _save138 = self.pos
              while true # choice
                _save139 = self.pos

                _save140 = self.pos
                while true # sequence
                  _save141 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save141
                  unless _tmp
                    self.pos = _save140
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save140
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save142 = self.pos
                    while true # sequence
                      _save143 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save143
                      unless _tmp
                        self.pos = _save142
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save142
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save139
                end
                break if _tmp
                self.pos = _save138

                _save144 = self.pos
                while true # sequence
                  _save145 = self.pos
                  _tmp = apply(:_Ticks5)
                  _tmp = _tmp ? nil : true
                  self.pos = _save145
                  unless _tmp
                    self.pos = _save144
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save144
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save138

                _save146 = self.pos
                while true # sequence
                  _save147 = self.pos

                  _save148 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save148
                      break
                    end
                    _tmp = apply(:_Ticks5)
                    unless _tmp
                      self.pos = _save148
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save147
                  unless _tmp
                    self.pos = _save146
                    break
                  end

                  _save149 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save149

                    _save150 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save150
                        break
                      end
                      _save151 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save151
                      unless _tmp
                        self.pos = _save150
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save149
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save146
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save138
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save123
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save122
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save122
            break
          end
          _tmp = apply(:_Ticks5)
          unless _tmp
            self.pos = _save122
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "<code>#{text}</code>" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Code unless _tmp
    return _tmp
  end

  # RawHtml = < (HtmlComment | HtmlBlockScript | HtmlTag) > { if html? then text else '' end }
  def _RawHtml

    _save = self.pos
    while true # sequence
      _text_start = self.pos

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_HtmlComment)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlBlockScript)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlTag)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if html? then text else '' end ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawHtml unless _tmp
    return _tmp
  end

  # BlankLine = @Sp @Newline { "\n" }
  def _BlankLine

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "\n" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BlankLine unless _tmp
    return _tmp
  end

  # Quoted = ("\"" (!"\"" .)* "\"" | "'" (!"'" .)* "'")
  def _Quoted

    _save = self.pos
    while true # choice

      _save1 = self.pos
      while true # sequence
        _tmp = match_string("\"")
        unless _tmp
          self.pos = _save1
          break
        end
        while true

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = match_string("\"")
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save1
          break
        end
        _tmp = match_string("\"")
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save

      _save5 = self.pos
      while true # sequence
        _tmp = match_string("'")
        unless _tmp
          self.pos = _save5
          break
        end
        while true

          _save7 = self.pos
          while true # sequence
            _save8 = self.pos
            _tmp = match_string("'")
            _tmp = _tmp ? nil : true
            self.pos = _save8
            unless _tmp
              self.pos = _save7
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save7
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = match_string("'")
        unless _tmp
          self.pos = _save5
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Quoted unless _tmp
    return _tmp
  end

  # HtmlAttribute = (AlphanumericAscii | "-")+ Spnl ("=" Spnl (Quoted | (!">" Nonspacechar)+))? Spnl
  def _HtmlAttribute

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_AlphanumericAscii)
        break if _tmp
        self.pos = _save2
        _tmp = match_string("-")
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      if _tmp
        while true

          _save3 = self.pos
          while true # choice
            _tmp = apply(:_AlphanumericAscii)
            break if _tmp
            self.pos = _save3
            _tmp = match_string("-")
            break if _tmp
            self.pos = _save3
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos

      _save5 = self.pos
      while true # sequence
        _tmp = match_string("=")
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = apply(:_Spnl)
        unless _tmp
          self.pos = _save5
          break
        end

        _save6 = self.pos
        while true # choice
          _tmp = apply(:_Quoted)
          break if _tmp
          self.pos = _save6
          _save7 = self.pos

          _save8 = self.pos
          while true # sequence
            _save9 = self.pos
            _tmp = match_string(">")
            _tmp = _tmp ? nil : true
            self.pos = _save9
            unless _tmp
              self.pos = _save8
              break
            end
            _tmp = apply(:_Nonspacechar)
            unless _tmp
              self.pos = _save8
            end
            break
          end # end sequence

          if _tmp
            while true

              _save10 = self.pos
              while true # sequence
                _save11 = self.pos
                _tmp = match_string(">")
                _tmp = _tmp ? nil : true
                self.pos = _save11
                unless _tmp
                  self.pos = _save10
                  break
                end
                _tmp = apply(:_Nonspacechar)
                unless _tmp
                  self.pos = _save10
                end
                break
              end # end sequence

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save7
          end
          break if _tmp
          self.pos = _save6
          break
        end # end choice

        unless _tmp
          self.pos = _save5
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save4
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlAttribute unless _tmp
    return _tmp
  end

  # HtmlComment = "<!--" (!"-->" .)* "-->"
  def _HtmlComment

    _save = self.pos
    while true # sequence
      _tmp = match_string("<!--")
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = match_string("-->")
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("-->")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlComment unless _tmp
    return _tmp
  end

  # HtmlTag = "<" Spnl "/"? AlphanumericAscii+ Spnl HtmlAttribute* "/"? Spnl ">"
  def _HtmlTag

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("/")
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = apply(:_AlphanumericAscii)
      if _tmp
        while true
          _tmp = apply(:_AlphanumericAscii)
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos
      _tmp = match_string("/")
      unless _tmp
        _tmp = true
        self.pos = _save4
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlTag unless _tmp
    return _tmp
  end

  # Eof = !.
  def _Eof
    _save = self.pos
    _tmp = get_byte
    _tmp = _tmp ? nil : true
    self.pos = _save
    set_failed_rule :_Eof unless _tmp
    return _tmp
  end

  # Nonspacechar = !@Spacechar !@Newline .
  def _Nonspacechar

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _Spacechar()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _Newline()
      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = get_byte
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Nonspacechar unless _tmp
    return _tmp
  end

  # Sp = @Spacechar*
  def _Sp
    while true
      _tmp = _Spacechar()
      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_Sp unless _tmp
    return _tmp
  end

  # Spnl = @Sp (@Newline @Sp)?
  def _Spnl

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = _Newline()
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = _Sp()
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Spnl unless _tmp
    return _tmp
  end

  # SpecialChar = (/[~*_`&\[\]()<!#\\'"]/ | @ExtendedSpecialChar)
  def _SpecialChar

    _save = self.pos
    while true # choice
      _tmp = scan(/\G(?-mix:[~*_`&\[\]()<!#\\'"])/)
      break if _tmp
      self.pos = _save
      _tmp = _ExtendedSpecialChar()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_SpecialChar unless _tmp
    return _tmp
  end

  # NormalChar = !(@SpecialChar | @Spacechar | @Newline) .
  def _NormalChar

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # choice
        _tmp = _SpecialChar()
        break if _tmp
        self.pos = _save2
        _tmp = _Spacechar()
        break if _tmp
        self.pos = _save2
        _tmp = _Newline()
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = get_byte
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NormalChar unless _tmp
    return _tmp
  end

  # Digit = [0-9]
  def _Digit
    _save = self.pos
    _tmp = get_byte
    if _tmp
      unless _tmp >= 48 and _tmp <= 57
        self.pos = _save
        _tmp = nil
      end
    end
    set_failed_rule :_Digit unless _tmp
    return _tmp
  end

  # Alphanumeric = %literals.Alphanumeric
  def _Alphanumeric
    _tmp = @_grammar_literals.external_invoke(self, :_Alphanumeric)
    set_failed_rule :_Alphanumeric unless _tmp
    return _tmp
  end

  # AlphanumericAscii = %literals.AlphanumericAscii
  def _AlphanumericAscii
    _tmp = @_grammar_literals.external_invoke(self, :_AlphanumericAscii)
    set_failed_rule :_AlphanumericAscii unless _tmp
    return _tmp
  end

  # BOM = %literals.BOM
  def _BOM
    _tmp = @_grammar_literals.external_invoke(self, :_BOM)
    set_failed_rule :_BOM unless _tmp
    return _tmp
  end

  # Newline = %literals.Newline
  def _Newline
    _tmp = @_grammar_literals.external_invoke(self, :_Newline)
    set_failed_rule :_Newline unless _tmp
    return _tmp
  end

  # Spacechar = %literals.Spacechar
  def _Spacechar
    _tmp = @_grammar_literals.external_invoke(self, :_Spacechar)
    set_failed_rule :_Spacechar unless _tmp
    return _tmp
  end

  # HexEntity = /&#x/i < /[0-9a-fA-F]+/ > ";" { [text.to_i(16)].pack 'U' }
  def _HexEntity

    _save = self.pos
    while true # sequence
      _tmp = scan(/\G(?i-mx:&#x)/)
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[0-9a-fA-F]+)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(";")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [text.to_i(16)].pack 'U' ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HexEntity unless _tmp
    return _tmp
  end

  # DecEntity = "&#" < /[0-9]+/ > ";" { [text.to_i].pack 'U' }
  def _DecEntity

    _save = self.pos
    while true # sequence
      _tmp = match_string("&#")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[0-9]+)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(";")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [text.to_i].pack 'U' ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DecEntity unless _tmp
    return _tmp
  end

  # CharEntity = "&" < /[A-Za-z0-9]+/ > ";" { if entity = HTML_ENTITIES[text] then                  entity.pack 'U*'                else                  "&#{text};"                end              }
  def _CharEntity

    _save = self.pos
    while true # sequence
      _tmp = match_string("&")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[A-Za-z0-9]+)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(";")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if entity = HTML_ENTITIES[text] then
                 entity.pack 'U*'
               else
                 "&#{text};"
               end
             ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_CharEntity unless _tmp
    return _tmp
  end

  # NonindentSpace = / {0,3}/
  def _NonindentSpace
    _tmp = scan(/\G(?-mix: {0,3})/)
    set_failed_rule :_NonindentSpace unless _tmp
    return _tmp
  end

  # Indent = /\t|    /
  def _Indent
    _tmp = scan(/\G(?-mix:\t|    )/)
    set_failed_rule :_Indent unless _tmp
    return _tmp
  end

  # IndentedLine = Indent Line
  def _IndentedLine

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Indent)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Line)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_IndentedLine unless _tmp
    return _tmp
  end

  # OptionallyIndentedLine = Indent? Line
  def _OptionallyIndentedLine

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_Indent)
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Line)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_OptionallyIndentedLine unless _tmp
    return _tmp
  end

  # StartList = &. { [] }
  def _StartList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = get_byte
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [] ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StartList unless _tmp
    return _tmp
  end

  # Line = @RawLine:a { a }
  def _Line

    _save = self.pos
    while true # sequence
      _tmp = _RawLine()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Line unless _tmp
    return _tmp
  end

  # RawLine = (< /[^\r\n]*/ @Newline > | < .+ > @Eof) { text }
  def _RawLine

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _text_start = self.pos

        _save2 = self.pos
        while true # sequence
          _tmp = scan(/\G(?-mix:[^\r\n]*)/)
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Newline()
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        if _tmp
          text = get_text(_text_start)
        end
        break if _tmp
        self.pos = _save1

        _save3 = self.pos
        while true # sequence
          _text_start = self.pos
          _save4 = self.pos
          _tmp = get_byte
          if _tmp
            while true
              _tmp = get_byte
              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save4
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = _Eof()
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawLine unless _tmp
    return _tmp
  end

  # SkipBlock = (HtmlBlock | (!"#" !SetextBottom1 !SetextBottom2 !@BlankLine @RawLine)+ @BlankLine* | @BlankLine+ | @RawLine)
  def _SkipBlock

    _save = self.pos
    while true # choice
      _tmp = apply(:_HtmlBlock)
      break if _tmp
      self.pos = _save

      _save1 = self.pos
      while true # sequence
        _save2 = self.pos

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = match_string("#")
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _save5 = self.pos
          _tmp = apply(:_SetextBottom1)
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save3
            break
          end
          _save6 = self.pos
          _tmp = apply(:_SetextBottom2)
          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save3
            break
          end
          _save7 = self.pos
          _tmp = _BlankLine()
          _tmp = _tmp ? nil : true
          self.pos = _save7
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = _RawLine()
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          while true

            _save8 = self.pos
            while true # sequence
              _save9 = self.pos
              _tmp = match_string("#")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save8
                break
              end
              _save10 = self.pos
              _tmp = apply(:_SetextBottom1)
              _tmp = _tmp ? nil : true
              self.pos = _save10
              unless _tmp
                self.pos = _save8
                break
              end
              _save11 = self.pos
              _tmp = apply(:_SetextBottom2)
              _tmp = _tmp ? nil : true
              self.pos = _save11
              unless _tmp
                self.pos = _save8
                break
              end
              _save12 = self.pos
              _tmp = _BlankLine()
              _tmp = _tmp ? nil : true
              self.pos = _save12
              unless _tmp
                self.pos = _save8
                break
              end
              _tmp = _RawLine()
              unless _tmp
                self.pos = _save8
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save2
        end
        unless _tmp
          self.pos = _save1
          break
        end
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      _save14 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save14
      end
      break if _tmp
      self.pos = _save
      _tmp = _RawLine()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_SkipBlock unless _tmp
    return _tmp
  end

  # ExtendedSpecialChar = &{ notes? } "^"
  def _ExtendedSpecialChar

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("^")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ExtendedSpecialChar unless _tmp
    return _tmp
  end

  # NoteReference = &{ notes? } RawNoteReference:ref { note_for ref }
  def _NoteReference

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RawNoteReference)
      ref = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  note_for ref ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NoteReference unless _tmp
    return _tmp
  end

  # RawNoteReference = "[^" < (!@Newline !"]" .)+ > "]" { text }
  def _RawNoteReference

    _save = self.pos
    while true # sequence
      _tmp = match_string("[^")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _save3 = self.pos
        _tmp = _Newline()
        _tmp = _tmp ? nil : true
        self.pos = _save3
        unless _tmp
          self.pos = _save2
          break
        end
        _save4 = self.pos
        _tmp = match_string("]")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = get_byte
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = _Newline()
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _save7 = self.pos
            _tmp = match_string("]")
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("]")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawNoteReference unless _tmp
    return _tmp
  end

  # Note = &{ notes? } @NonindentSpace RawNoteReference:ref ":" @Sp @StartList:a RawNoteBlock:i { a.concat i } (&Indent RawNoteBlock:i { a.concat i })* { @footnotes[ref] = paragraph a                    nil                 }
  def _Note

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RawNoteReference)
      ref = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(":")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RawNoteBlock)
      i = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a.concat i ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = apply(:_Indent)
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_RawNoteBlock)
          i = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a.concat i ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  @footnotes[ref] = paragraph a

                  nil
                ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Note unless _tmp
    return _tmp
  end

  # InlineNote = &{ notes? } "^[" @StartList:a (!"]" Inline:l { a << l })+ "]" { ref = [:inline, @note_order.length]                @footnotes[ref] = paragraph a                 note_for ref              }
  def _InlineNote

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("^[")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = match_string("]")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_Inline)
        l = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a << l ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string("]")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Inline)
            l = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << l ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("]")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  ref = [:inline, @note_order.length]
               @footnotes[ref] = paragraph a

               note_for ref
             ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_InlineNote unless _tmp
    return _tmp
  end

  # Notes = (Note | SkipBlock)*
  def _Notes
    while true

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Note)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_SkipBlock)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_Notes unless _tmp
    return _tmp
  end

  # RawNoteBlock = @StartList:a (!@BlankLine !RawNoteReference OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }
  def _RawNoteBlock

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _save3 = self.pos
        _tmp = _BlankLine()
        _tmp = _tmp ? nil : true
        self.pos = _save3
        unless _tmp
          self.pos = _save2
          break
        end
        _save4 = self.pos
        _tmp = apply(:_RawNoteReference)
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_OptionallyIndentedLine)
        l = @result
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  a << l ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = _BlankLine()
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _save7 = self.pos
            _tmp = apply(:_RawNoteReference)
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_OptionallyIndentedLine)
            l = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << l ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a << text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawNoteBlock unless _tmp
    return _tmp
  end

  # CodeFence = &{ github? } Ticks3 (@Sp StrChunk:format)? Spnl < ((!"`" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text               verbatim.format = format.intern if format.instance_of?(String)               verbatim             }
  def _CodeFence

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  github? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Ticks3)
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_StrChunk)
        format = @result
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save4 = self.pos

      _save5 = self.pos
      while true # choice
        _save6 = self.pos

        _save7 = self.pos
        while true # sequence
          _save8 = self.pos
          _tmp = match_string("`")
          _tmp = _tmp ? nil : true
          self.pos = _save8
          unless _tmp
            self.pos = _save7
            break
          end
          _tmp = apply(:_Nonspacechar)
          unless _tmp
            self.pos = _save7
          end
          break
        end # end sequence

        if _tmp
          while true

            _save9 = self.pos
            while true # sequence
              _save10 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save10
              unless _tmp
                self.pos = _save9
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save9
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save6
        end
        break if _tmp
        self.pos = _save5

        _save11 = self.pos
        while true # sequence
          _save12 = self.pos
          _tmp = apply(:_Ticks3)
          _tmp = _tmp ? nil : true
          self.pos = _save12
          unless _tmp
            self.pos = _save11
            break
          end
          _tmp = scan(/\G(?-mix:`+)/)
          unless _tmp
            self.pos = _save11
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save5
        _tmp = apply(:_Spacechar)
        break if _tmp
        self.pos = _save5
        _tmp = _Newline()
        break if _tmp
        self.pos = _save5
        break
      end # end choice

      if _tmp
        while true

          _save13 = self.pos
          while true # choice
            _save14 = self.pos

            _save15 = self.pos
            while true # sequence
              _save16 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save16
              unless _tmp
                self.pos = _save15
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save15
              end
              break
            end # end sequence

            if _tmp
              while true

                _save17 = self.pos
                while true # sequence
                  _save18 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save18
                  unless _tmp
                    self.pos = _save17
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save17
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save14
            end
            break if _tmp
            self.pos = _save13

            _save19 = self.pos
            while true # sequence
              _save20 = self.pos
              _tmp = apply(:_Ticks3)
              _tmp = _tmp ? nil : true
              self.pos = _save20
              unless _tmp
                self.pos = _save19
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save19
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save13
            _tmp = apply(:_Spacechar)
            break if _tmp
            self.pos = _save13
            _tmp = _Newline()
            break if _tmp
            self.pos = _save13
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save4
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Ticks3)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _Newline()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  verbatim = RDoc::Markup::Verbatim.new text
              verbatim.format = format.intern if format.instance_of?(String)
              verbatim
            ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_CodeFence unless _tmp
    return _tmp
  end

  # Table = &{ github? } TableHead:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) }
  def _Table

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  github? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_TableHead)
      header = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_TableLine)
      line = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_TableRow)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_TableRow)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      body = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  table = RDoc::Markup::Table.new(header, line, body) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Table unless _tmp
    return _tmp
  end

  # TableHead = TableItem2+:items "|"? @Newline { items }
  def _TableHead

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_TableItem2)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_TableItem2)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      items = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = match_string("|")
      unless _tmp
        _tmp = true
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  items ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableHead unless _tmp
    return _tmp
  end

  # TableRow = ((TableItem:item1 TableItem2*:items { [item1, *items] }):row | TableItem2+:row) "|"? @Newline { row }
  def _TableRow

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = apply(:_TableItem)
          item1 = @result
          unless _tmp
            self.pos = _save2
            break
          end
          _ary = []
          while true
            _tmp = apply(:_TableItem2)
            _ary << @result if _tmp
            break unless _tmp
          end
          _tmp = true
          @result = _ary
          items = @result
          unless _tmp
            self.pos = _save2
            break
          end
          @result = begin;  [item1, *items] ; end
          _tmp = true
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        row = @result
        break if _tmp
        self.pos = _save1
        _save4 = self.pos
        _ary = []
        _tmp = apply(:_TableItem2)
        if _tmp
          _ary << @result
          while true
            _tmp = apply(:_TableItem2)
            _ary << @result if _tmp
            break unless _tmp
          end
          _tmp = true
          @result = _ary
        else
          self.pos = _save4
        end
        row = @result
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _save5 = self.pos
      _tmp = match_string("|")
      unless _tmp
        _tmp = true
        self.pos = _save5
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  row ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableRow unless _tmp
    return _tmp
  end

  # TableItem2 = "|" TableItem
  def _TableItem2

    _save = self.pos
    while true # sequence
      _tmp = match_string("|")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_TableItem)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableItem2 unless _tmp
    return _tmp
  end

  # TableItem = < /(?:\\.|[^|\n])+/ > { text.strip.gsub(/\\(.)/, '\1')  }
  def _TableItem

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:(?:\\.|[^|\n])+)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text.strip.gsub(/\\(.)/, '\1')  ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableItem unless _tmp
    return _tmp
  end

  # TableLine = ((TableAlign:align1 TableAlign2*:aligns {[align1, *aligns] }):line | TableAlign2+:line) "|"? @Newline { line }
  def _TableLine

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = apply(:_TableAlign)
          align1 = @result
          unless _tmp
            self.pos = _save2
            break
          end
          _ary = []
          while true
            _tmp = apply(:_TableAlign2)
            _ary << @result if _tmp
            break unless _tmp
          end
          _tmp = true
          @result = _ary
          aligns = @result
          unless _tmp
            self.pos = _save2
            break
          end
          @result = begin; [align1, *aligns] ; end
          _tmp = true
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        line = @result
        break if _tmp
        self.pos = _save1
        _save4 = self.pos
        _ary = []
        _tmp = apply(:_TableAlign2)
        if _tmp
          _ary << @result
          while true
            _tmp = apply(:_TableAlign2)
            _ary << @result if _tmp
            break unless _tmp
          end
          _tmp = true
          @result = _ary
        else
          self.pos = _save4
        end
        line = @result
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _save5 = self.pos
      _tmp = match_string("|")
      unless _tmp
        _tmp = true
        self.pos = _save5
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  line ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableLine unless _tmp
    return _tmp
  end

  # TableAlign2 = "|" @Sp TableAlign
  def _TableAlign2

    _save = self.pos
    while true # sequence
      _tmp = match_string("|")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_TableAlign)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableAlign2 unless _tmp
    return _tmp
  end

  # TableAlign = < /:?-+:?/ > @Sp {                 text.start_with?(":") ?                 (text.end_with?(":") ? :center : :left) :                 (text.end_with?(":") ? :right : nil)               }
  def _TableAlign

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = scan(/\G(?-mix::?-+:?)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;
                text.start_with?(":") ?
                (text.end_with?(":") ? :center : :left) :
                (text.end_with?(":") ? :right : nil)
              ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableAlign unless _tmp
    return _tmp
  end

  # DefinitionList = &{ definition_lists? } DefinitionListItem+:list { RDoc::Markup::List.new :NOTE, *list.flatten }
  def _DefinitionList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  definition_lists? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_DefinitionListItem)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_DefinitionListItem)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      list = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::List.new :NOTE, *list.flatten ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionList unless _tmp
    return _tmp
  end

  # DefinitionListItem = DefinitionListLabel+:label DefinitionListDefinition+:defns { list_items = []                        list_items <<                          RDoc::Markup::ListItem.new(label, defns.shift)                         list_items.concat defns.map { |defn|                          RDoc::Markup::ListItem.new nil, defn                        } unless list_items.empty?                         list_items                      }
  def _DefinitionListItem

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_DefinitionListLabel)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_DefinitionListLabel)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_DefinitionListDefinition)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_DefinitionListDefinition)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      defns = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  list_items = []
                       list_items <<
                         RDoc::Markup::ListItem.new(label, defns.shift)

                       list_items.concat defns.map { |defn|
                         RDoc::Markup::ListItem.new nil, defn
                       } unless list_items.empty?

                       list_items
                     ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionListItem unless _tmp
    return _tmp
  end

  # DefinitionListLabel = Inline:label @Sp @Newline { label }
  def _DefinitionListLabel

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Inline)
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  label ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionListLabel unless _tmp
    return _tmp
  end

  # DefinitionListDefinition = @NonindentSpace ":" @Space Inlines:a @BlankLine+ { paragraph a }
  def _DefinitionListDefinition

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(":")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Space()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Inlines)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  paragraph a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionListDefinition unless _tmp
    return _tmp
  end

  Rules = {}
  Rules[:_root] = rule_info("root", "Doc")
  Rules[:_Doc] = rule_info("Doc", "BOM? Block*:a { RDoc::Markup::Document.new(*a.compact) }")
  Rules[:_Block] = rule_info("Block", "@BlankLine* (BlockQuote | Verbatim | CodeFence | Table | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain)")
  Rules[:_Para] = rule_info("Para", "@NonindentSpace Inlines:a @BlankLine+ { paragraph a }")
  Rules[:_Plain] = rule_info("Plain", "Inlines:a { paragraph a }")
  Rules[:_AtxInline] = rule_info("AtxInline", "!@Newline !(@Sp /\#*/ @Sp @Newline) Inline")
  Rules[:_AtxStart] = rule_info("AtxStart", "< /\\\#{1,6}/ > { text.length }")
  Rules[:_AtxHeading] = rule_info("AtxHeading", "AtxStart:s @Spacechar+ AtxInline+:a (@Sp /\#*/ @Sp)? @Newline { RDoc::Markup::Heading.new(s, a.join) }")
  Rules[:_SetextHeading] = rule_info("SetextHeading", "(SetextHeading1 | SetextHeading2)")
  Rules[:_SetextBottom1] = rule_info("SetextBottom1", "/={1,}/ @Newline")
  Rules[:_SetextBottom2] = rule_info("SetextBottom2", "/-{1,}/ @Newline")
  Rules[:_SetextHeading1] = rule_info("SetextHeading1", "&(@RawLine SetextBottom1) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom1 { RDoc::Markup::Heading.new(1, a.join) }")
  Rules[:_SetextHeading2] = rule_info("SetextHeading2", "&(@RawLine SetextBottom2) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom2 { RDoc::Markup::Heading.new(2, a.join) }")
  Rules[:_Heading] = rule_info("Heading", "(SetextHeading | AtxHeading)")
  Rules[:_BlockQuote] = rule_info("BlockQuote", "BlockQuoteRaw:a { RDoc::Markup::BlockQuote.new(*a) }")
  Rules[:_BlockQuoteRaw] = rule_info("BlockQuoteRaw", "@StartList:a (\">\" \" \"? Line:l { a << l } (!\">\" !@BlankLine Line:c { a << c })* (@BlankLine:n { a << n })*)+ { inner_parse a.join }")
  Rules[:_NonblankIndentedLine] = rule_info("NonblankIndentedLine", "!@BlankLine IndentedLine")
  Rules[:_VerbatimChunk] = rule_info("VerbatimChunk", "@BlankLine*:a NonblankIndentedLine+:b { a.concat b }")
  Rules[:_Verbatim] = rule_info("Verbatim", "VerbatimChunk+:a { RDoc::Markup::Verbatim.new(*a.flatten) }")
  Rules[:_HorizontalRule] = rule_info("HorizontalRule", "@NonindentSpace (\"*\" @Sp \"*\" @Sp \"*\" (@Sp \"*\")* | \"-\" @Sp \"-\" @Sp \"-\" (@Sp \"-\")* | \"_\" @Sp \"_\" @Sp \"_\" (@Sp \"_\")*) @Sp @Newline @BlankLine+ { RDoc::Markup::Rule.new 1 }")
  Rules[:_Bullet] = rule_info("Bullet", "!HorizontalRule @NonindentSpace /[+*-]/ @Spacechar+")
  Rules[:_BulletList] = rule_info("BulletList", "&Bullet (ListTight | ListLoose):a { RDoc::Markup::List.new(:BULLET, *a) }")
  Rules[:_ListTight] = rule_info("ListTight", "ListItemTight+:a @BlankLine* !(Bullet | Enumerator) { a }")
  Rules[:_ListLoose] = rule_info("ListLoose", "@StartList:a (ListItem:b @BlankLine* { a << b })+ { a }")
  Rules[:_ListItem] = rule_info("ListItem", "(Bullet | Enumerator) @StartList:a ListBlock:b { a << b } (ListContinuationBlock:c { a.push(*c) })* { list_item_from a }")
  Rules[:_ListItemTight] = rule_info("ListItemTight", "(Bullet | Enumerator) ListBlock:a (!@BlankLine ListContinuationBlock:b { a.push(*b) })* !ListContinuationBlock { list_item_from a }")
  Rules[:_ListBlock] = rule_info("ListBlock", "!@BlankLine Line:a ListBlockLine*:c { [a, *c] }")
  Rules[:_ListContinuationBlock] = rule_info("ListContinuationBlock", "@StartList:a @BlankLine* { a << \"\\n\" } (Indent ListBlock:b { a.concat b })+ { a }")
  Rules[:_Enumerator] = rule_info("Enumerator", "@NonindentSpace [0-9]+ \".\" @Spacechar+")
  Rules[:_OrderedList] = rule_info("OrderedList", "&Enumerator (ListTight | ListLoose):a { RDoc::Markup::List.new(:NUMBER, *a) }")
  Rules[:_ListBlockLine] = rule_info("ListBlockLine", "!@BlankLine !(Indent? (Bullet | Enumerator)) !HorizontalRule OptionallyIndentedLine")
  Rules[:_HtmlOpenAnchor] = rule_info("HtmlOpenAnchor", "\"<\" Spnl (\"a\" | \"A\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlCloseAnchor] = rule_info("HtmlCloseAnchor", "\"<\" Spnl \"/\" (\"a\" | \"A\") Spnl \">\"")
  Rules[:_HtmlAnchor] = rule_info("HtmlAnchor", "HtmlOpenAnchor (HtmlAnchor | !HtmlCloseAnchor .)* HtmlCloseAnchor")
  Rules[:_HtmlBlockOpenAddress] = rule_info("HtmlBlockOpenAddress", "\"<\" Spnl (\"address\" | \"ADDRESS\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseAddress] = rule_info("HtmlBlockCloseAddress", "\"<\" Spnl \"/\" (\"address\" | \"ADDRESS\") Spnl \">\"")
  Rules[:_HtmlBlockAddress] = rule_info("HtmlBlockAddress", "HtmlBlockOpenAddress (HtmlBlockAddress | !HtmlBlockCloseAddress .)* HtmlBlockCloseAddress")
  Rules[:_HtmlBlockOpenBlockquote] = rule_info("HtmlBlockOpenBlockquote", "\"<\" Spnl (\"blockquote\" | \"BLOCKQUOTE\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseBlockquote] = rule_info("HtmlBlockCloseBlockquote", "\"<\" Spnl \"/\" (\"blockquote\" | \"BLOCKQUOTE\") Spnl \">\"")
  Rules[:_HtmlBlockBlockquote] = rule_info("HtmlBlockBlockquote", "HtmlBlockOpenBlockquote (HtmlBlockBlockquote | !HtmlBlockCloseBlockquote .)* HtmlBlockCloseBlockquote")
  Rules[:_HtmlBlockOpenCenter] = rule_info("HtmlBlockOpenCenter", "\"<\" Spnl (\"center\" | \"CENTER\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseCenter] = rule_info("HtmlBlockCloseCenter", "\"<\" Spnl \"/\" (\"center\" | \"CENTER\") Spnl \">\"")
  Rules[:_HtmlBlockCenter] = rule_info("HtmlBlockCenter", "HtmlBlockOpenCenter (HtmlBlockCenter | !HtmlBlockCloseCenter .)* HtmlBlockCloseCenter")
  Rules[:_HtmlBlockOpenDir] = rule_info("HtmlBlockOpenDir", "\"<\" Spnl (\"dir\" | \"DIR\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDir] = rule_info("HtmlBlockCloseDir", "\"<\" Spnl \"/\" (\"dir\" | \"DIR\") Spnl \">\"")
  Rules[:_HtmlBlockDir] = rule_info("HtmlBlockDir", "HtmlBlockOpenDir (HtmlBlockDir | !HtmlBlockCloseDir .)* HtmlBlockCloseDir")
  Rules[:_HtmlBlockOpenDiv] = rule_info("HtmlBlockOpenDiv", "\"<\" Spnl (\"div\" | \"DIV\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDiv] = rule_info("HtmlBlockCloseDiv", "\"<\" Spnl \"/\" (\"div\" | \"DIV\") Spnl \">\"")
  Rules[:_HtmlBlockDiv] = rule_info("HtmlBlockDiv", "HtmlBlockOpenDiv (HtmlBlockDiv | !HtmlBlockCloseDiv .)* HtmlBlockCloseDiv")
  Rules[:_HtmlBlockOpenDl] = rule_info("HtmlBlockOpenDl", "\"<\" Spnl (\"dl\" | \"DL\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDl] = rule_info("HtmlBlockCloseDl", "\"<\" Spnl \"/\" (\"dl\" | \"DL\") Spnl \">\"")
  Rules[:_HtmlBlockDl] = rule_info("HtmlBlockDl", "HtmlBlockOpenDl (HtmlBlockDl | !HtmlBlockCloseDl .)* HtmlBlockCloseDl")
  Rules[:_HtmlBlockOpenFieldset] = rule_info("HtmlBlockOpenFieldset", "\"<\" Spnl (\"fieldset\" | \"FIELDSET\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseFieldset] = rule_info("HtmlBlockCloseFieldset", "\"<\" Spnl \"/\" (\"fieldset\" | \"FIELDSET\") Spnl \">\"")
  Rules[:_HtmlBlockFieldset] = rule_info("HtmlBlockFieldset", "HtmlBlockOpenFieldset (HtmlBlockFieldset | !HtmlBlockCloseFieldset .)* HtmlBlockCloseFieldset")
  Rules[:_HtmlBlockOpenForm] = rule_info("HtmlBlockOpenForm", "\"<\" Spnl (\"form\" | \"FORM\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseForm] = rule_info("HtmlBlockCloseForm", "\"<\" Spnl \"/\" (\"form\" | \"FORM\") Spnl \">\"")
  Rules[:_HtmlBlockForm] = rule_info("HtmlBlockForm", "HtmlBlockOpenForm (HtmlBlockForm | !HtmlBlockCloseForm .)* HtmlBlockCloseForm")
  Rules[:_HtmlBlockOpenH1] = rule_info("HtmlBlockOpenH1", "\"<\" Spnl (\"h1\" | \"H1\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH1] = rule_info("HtmlBlockCloseH1", "\"<\" Spnl \"/\" (\"h1\" | \"H1\") Spnl \">\"")
  Rules[:_HtmlBlockH1] = rule_info("HtmlBlockH1", "HtmlBlockOpenH1 (HtmlBlockH1 | !HtmlBlockCloseH1 .)* HtmlBlockCloseH1")
  Rules[:_HtmlBlockOpenH2] = rule_info("HtmlBlockOpenH2", "\"<\" Spnl (\"h2\" | \"H2\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH2] = rule_info("HtmlBlockCloseH2", "\"<\" Spnl \"/\" (\"h2\" | \"H2\") Spnl \">\"")
  Rules[:_HtmlBlockH2] = rule_info("HtmlBlockH2", "HtmlBlockOpenH2 (HtmlBlockH2 | !HtmlBlockCloseH2 .)* HtmlBlockCloseH2")
  Rules[:_HtmlBlockOpenH3] = rule_info("HtmlBlockOpenH3", "\"<\" Spnl (\"h3\" | \"H3\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH3] = rule_info("HtmlBlockCloseH3", "\"<\" Spnl \"/\" (\"h3\" | \"H3\") Spnl \">\"")
  Rules[:_HtmlBlockH3] = rule_info("HtmlBlockH3", "HtmlBlockOpenH3 (HtmlBlockH3 | !HtmlBlockCloseH3 .)* HtmlBlockCloseH3")
  Rules[:_HtmlBlockOpenH4] = rule_info("HtmlBlockOpenH4", "\"<\" Spnl (\"h4\" | \"H4\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH4] = rule_info("HtmlBlockCloseH4", "\"<\" Spnl \"/\" (\"h4\" | \"H4\") Spnl \">\"")
  Rules[:_HtmlBlockH4] = rule_info("HtmlBlockH4", "HtmlBlockOpenH4 (HtmlBlockH4 | !HtmlBlockCloseH4 .)* HtmlBlockCloseH4")
  Rules[:_HtmlBlockOpenH5] = rule_info("HtmlBlockOpenH5", "\"<\" Spnl (\"h5\" | \"H5\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH5] = rule_info("HtmlBlockCloseH5", "\"<\" Spnl \"/\" (\"h5\" | \"H5\") Spnl \">\"")
  Rules[:_HtmlBlockH5] = rule_info("HtmlBlockH5", "HtmlBlockOpenH5 (HtmlBlockH5 | !HtmlBlockCloseH5 .)* HtmlBlockCloseH5")
  Rules[:_HtmlBlockOpenH6] = rule_info("HtmlBlockOpenH6", "\"<\" Spnl (\"h6\" | \"H6\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH6] = rule_info("HtmlBlockCloseH6", "\"<\" Spnl \"/\" (\"h6\" | \"H6\") Spnl \">\"")
  Rules[:_HtmlBlockH6] = rule_info("HtmlBlockH6", "HtmlBlockOpenH6 (HtmlBlockH6 | !HtmlBlockCloseH6 .)* HtmlBlockCloseH6")
  Rules[:_HtmlBlockOpenMenu] = rule_info("HtmlBlockOpenMenu", "\"<\" Spnl (\"menu\" | \"MENU\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseMenu] = rule_info("HtmlBlockCloseMenu", "\"<\" Spnl \"/\" (\"menu\" | \"MENU\") Spnl \">\"")
  Rules[:_HtmlBlockMenu] = rule_info("HtmlBlockMenu", "HtmlBlockOpenMenu (HtmlBlockMenu | !HtmlBlockCloseMenu .)* HtmlBlockCloseMenu")
  Rules[:_HtmlBlockOpenNoframes] = rule_info("HtmlBlockOpenNoframes", "\"<\" Spnl (\"noframes\" | \"NOFRAMES\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseNoframes] = rule_info("HtmlBlockCloseNoframes", "\"<\" Spnl \"/\" (\"noframes\" | \"NOFRAMES\") Spnl \">\"")
  Rules[:_HtmlBlockNoframes] = rule_info("HtmlBlockNoframes", "HtmlBlockOpenNoframes (HtmlBlockNoframes | !HtmlBlockCloseNoframes .)* HtmlBlockCloseNoframes")
  Rules[:_HtmlBlockOpenNoscript] = rule_info("HtmlBlockOpenNoscript", "\"<\" Spnl (\"noscript\" | \"NOSCRIPT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseNoscript] = rule_info("HtmlBlockCloseNoscript", "\"<\" Spnl \"/\" (\"noscript\" | \"NOSCRIPT\") Spnl \">\"")
  Rules[:_HtmlBlockNoscript] = rule_info("HtmlBlockNoscript", "HtmlBlockOpenNoscript (HtmlBlockNoscript | !HtmlBlockCloseNoscript .)* HtmlBlockCloseNoscript")
  Rules[:_HtmlBlockOpenOl] = rule_info("HtmlBlockOpenOl", "\"<\" Spnl (\"ol\" | \"OL\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseOl] = rule_info("HtmlBlockCloseOl", "\"<\" Spnl \"/\" (\"ol\" | \"OL\") Spnl \">\"")
  Rules[:_HtmlBlockOl] = rule_info("HtmlBlockOl", "HtmlBlockOpenOl (HtmlBlockOl | !HtmlBlockCloseOl .)* HtmlBlockCloseOl")
  Rules[:_HtmlBlockOpenP] = rule_info("HtmlBlockOpenP", "\"<\" Spnl (\"p\" | \"P\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseP] = rule_info("HtmlBlockCloseP", "\"<\" Spnl \"/\" (\"p\" | \"P\") Spnl \">\"")
  Rules[:_HtmlBlockP] = rule_info("HtmlBlockP", "HtmlBlockOpenP (HtmlBlockP | !HtmlBlockCloseP .)* HtmlBlockCloseP")
  Rules[:_HtmlBlockOpenPre] = rule_info("HtmlBlockOpenPre", "\"<\" Spnl (\"pre\" | \"PRE\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockClosePre] = rule_info("HtmlBlockClosePre", "\"<\" Spnl \"/\" (\"pre\" | \"PRE\") Spnl \">\"")
  Rules[:_HtmlBlockPre] = rule_info("HtmlBlockPre", "HtmlBlockOpenPre (HtmlBlockPre | !HtmlBlockClosePre .)* HtmlBlockClosePre")
  Rules[:_HtmlBlockOpenTable] = rule_info("HtmlBlockOpenTable", "\"<\" Spnl (\"table\" | \"TABLE\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTable] = rule_info("HtmlBlockCloseTable", "\"<\" Spnl \"/\" (\"table\" | \"TABLE\") Spnl \">\"")
  Rules[:_HtmlBlockTable] = rule_info("HtmlBlockTable", "HtmlBlockOpenTable (HtmlBlockTable | !HtmlBlockCloseTable .)* HtmlBlockCloseTable")
  Rules[:_HtmlBlockOpenUl] = rule_info("HtmlBlockOpenUl", "\"<\" Spnl (\"ul\" | \"UL\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseUl] = rule_info("HtmlBlockCloseUl", "\"<\" Spnl \"/\" (\"ul\" | \"UL\") Spnl \">\"")
  Rules[:_HtmlBlockUl] = rule_info("HtmlBlockUl", "HtmlBlockOpenUl (HtmlBlockUl | !HtmlBlockCloseUl .)* HtmlBlockCloseUl")
  Rules[:_HtmlBlockOpenDd] = rule_info("HtmlBlockOpenDd", "\"<\" Spnl (\"dd\" | \"DD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDd] = rule_info("HtmlBlockCloseDd", "\"<\" Spnl \"/\" (\"dd\" | \"DD\") Spnl \">\"")
  Rules[:_HtmlBlockDd] = rule_info("HtmlBlockDd", "HtmlBlockOpenDd (HtmlBlockDd | !HtmlBlockCloseDd .)* HtmlBlockCloseDd")
  Rules[:_HtmlBlockOpenDt] = rule_info("HtmlBlockOpenDt", "\"<\" Spnl (\"dt\" | \"DT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDt] = rule_info("HtmlBlockCloseDt", "\"<\" Spnl \"/\" (\"dt\" | \"DT\") Spnl \">\"")
  Rules[:_HtmlBlockDt] = rule_info("HtmlBlockDt", "HtmlBlockOpenDt (HtmlBlockDt | !HtmlBlockCloseDt .)* HtmlBlockCloseDt")
  Rules[:_HtmlBlockOpenFrameset] = rule_info("HtmlBlockOpenFrameset", "\"<\" Spnl (\"frameset\" | \"FRAMESET\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseFrameset] = rule_info("HtmlBlockCloseFrameset", "\"<\" Spnl \"/\" (\"frameset\" | \"FRAMESET\") Spnl \">\"")
  Rules[:_HtmlBlockFrameset] = rule_info("HtmlBlockFrameset", "HtmlBlockOpenFrameset (HtmlBlockFrameset | !HtmlBlockCloseFrameset .)* HtmlBlockCloseFrameset")
  Rules[:_HtmlBlockOpenLi] = rule_info("HtmlBlockOpenLi", "\"<\" Spnl (\"li\" | \"LI\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseLi] = rule_info("HtmlBlockCloseLi", "\"<\" Spnl \"/\" (\"li\" | \"LI\") Spnl \">\"")
  Rules[:_HtmlBlockLi] = rule_info("HtmlBlockLi", "HtmlBlockOpenLi (HtmlBlockLi | !HtmlBlockCloseLi .)* HtmlBlockCloseLi")
  Rules[:_HtmlBlockOpenTbody] = rule_info("HtmlBlockOpenTbody", "\"<\" Spnl (\"tbody\" | \"TBODY\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTbody] = rule_info("HtmlBlockCloseTbody", "\"<\" Spnl \"/\" (\"tbody\" | \"TBODY\") Spnl \">\"")
  Rules[:_HtmlBlockTbody] = rule_info("HtmlBlockTbody", "HtmlBlockOpenTbody (HtmlBlockTbody | !HtmlBlockCloseTbody .)* HtmlBlockCloseTbody")
  Rules[:_HtmlBlockOpenTd] = rule_info("HtmlBlockOpenTd", "\"<\" Spnl (\"td\" | \"TD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTd] = rule_info("HtmlBlockCloseTd", "\"<\" Spnl \"/\" (\"td\" | \"TD\") Spnl \">\"")
  Rules[:_HtmlBlockTd] = rule_info("HtmlBlockTd", "HtmlBlockOpenTd (HtmlBlockTd | !HtmlBlockCloseTd .)* HtmlBlockCloseTd")
  Rules[:_HtmlBlockOpenTfoot] = rule_info("HtmlBlockOpenTfoot", "\"<\" Spnl (\"tfoot\" | \"TFOOT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTfoot] = rule_info("HtmlBlockCloseTfoot", "\"<\" Spnl \"/\" (\"tfoot\" | \"TFOOT\") Spnl \">\"")
  Rules[:_HtmlBlockTfoot] = rule_info("HtmlBlockTfoot", "HtmlBlockOpenTfoot (HtmlBlockTfoot | !HtmlBlockCloseTfoot .)* HtmlBlockCloseTfoot")
  Rules[:_HtmlBlockOpenTh] = rule_info("HtmlBlockOpenTh", "\"<\" Spnl (\"th\" | \"TH\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTh] = rule_info("HtmlBlockCloseTh", "\"<\" Spnl \"/\" (\"th\" | \"TH\") Spnl \">\"")
  Rules[:_HtmlBlockTh] = rule_info("HtmlBlockTh", "HtmlBlockOpenTh (HtmlBlockTh | !HtmlBlockCloseTh .)* HtmlBlockCloseTh")
  Rules[:_HtmlBlockOpenThead] = rule_info("HtmlBlockOpenThead", "\"<\" Spnl (\"thead\" | \"THEAD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseThead] = rule_info("HtmlBlockCloseThead", "\"<\" Spnl \"/\" (\"thead\" | \"THEAD\") Spnl \">\"")
  Rules[:_HtmlBlockThead] = rule_info("HtmlBlockThead", "HtmlBlockOpenThead (HtmlBlockThead | !HtmlBlockCloseThead .)* HtmlBlockCloseThead")
  Rules[:_HtmlBlockOpenTr] = rule_info("HtmlBlockOpenTr", "\"<\" Spnl (\"tr\" | \"TR\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTr] = rule_info("HtmlBlockCloseTr", "\"<\" Spnl \"/\" (\"tr\" | \"TR\") Spnl \">\"")
  Rules[:_HtmlBlockTr] = rule_info("HtmlBlockTr", "HtmlBlockOpenTr (HtmlBlockTr | !HtmlBlockCloseTr .)* HtmlBlockCloseTr")
  Rules[:_HtmlBlockOpenScript] = rule_info("HtmlBlockOpenScript", "\"<\" Spnl (\"script\" | \"SCRIPT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseScript] = rule_info("HtmlBlockCloseScript", "\"<\" Spnl \"/\" (\"script\" | \"SCRIPT\") Spnl \">\"")
  Rules[:_HtmlBlockScript] = rule_info("HtmlBlockScript", "HtmlBlockOpenScript (!HtmlBlockCloseScript .)* HtmlBlockCloseScript")
  Rules[:_HtmlBlockOpenHead] = rule_info("HtmlBlockOpenHead", "\"<\" Spnl (\"head\" | \"HEAD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseHead] = rule_info("HtmlBlockCloseHead", "\"<\" Spnl \"/\" (\"head\" | \"HEAD\") Spnl \">\"")
  Rules[:_HtmlBlockHead] = rule_info("HtmlBlockHead", "HtmlBlockOpenHead (!HtmlBlockCloseHead .)* HtmlBlockCloseHead")
  Rules[:_HtmlBlockInTags] = rule_info("HtmlBlockInTags", "(HtmlAnchor | HtmlBlockAddress | HtmlBlockBlockquote | HtmlBlockCenter | HtmlBlockDir | HtmlBlockDiv | HtmlBlockDl | HtmlBlockFieldset | HtmlBlockForm | HtmlBlockH1 | HtmlBlockH2 | HtmlBlockH3 | HtmlBlockH4 | HtmlBlockH5 | HtmlBlockH6 | HtmlBlockMenu | HtmlBlockNoframes | HtmlBlockNoscript | HtmlBlockOl | HtmlBlockP | HtmlBlockPre | HtmlBlockTable | HtmlBlockUl | HtmlBlockDd | HtmlBlockDt | HtmlBlockFrameset | HtmlBlockLi | HtmlBlockTbody | HtmlBlockTd | HtmlBlockTfoot | HtmlBlockTh | HtmlBlockThead | HtmlBlockTr | HtmlBlockScript | HtmlBlockHead)")
  Rules[:_HtmlBlock] = rule_info("HtmlBlock", "< (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then                 RDoc::Markup::Raw.new text               end }")
  Rules[:_HtmlUnclosed] = rule_info("HtmlUnclosed", "\"<\" Spnl HtmlUnclosedType Spnl HtmlAttribute* Spnl \">\"")
  Rules[:_HtmlUnclosedType] = rule_info("HtmlUnclosedType", "(\"HR\" | \"hr\")")
  Rules[:_HtmlBlockSelfClosing] = rule_info("HtmlBlockSelfClosing", "\"<\" Spnl HtmlBlockType Spnl HtmlAttribute* \"/\" Spnl \">\"")
  Rules[:_HtmlBlockType] = rule_info("HtmlBlockType", "(\"ADDRESS\" | \"BLOCKQUOTE\" | \"CENTER\" | \"DD\" | \"DIR\" | \"DIV\" | \"DL\" | \"DT\" | \"FIELDSET\" | \"FORM\" | \"FRAMESET\" | \"H1\" | \"H2\" | \"H3\" | \"H4\" | \"H5\" | \"H6\" | \"HR\" | \"ISINDEX\" | \"LI\" | \"MENU\" | \"NOFRAMES\" | \"NOSCRIPT\" | \"OL\" | \"P\" | \"PRE\" | \"SCRIPT\" | \"TABLE\" | \"TBODY\" | \"TD\" | \"TFOOT\" | \"TH\" | \"THEAD\" | \"TR\" | \"UL\" | \"address\" | \"blockquote\" | \"center\" | \"dd\" | \"dir\" | \"div\" | \"dl\" | \"dt\" | \"fieldset\" | \"form\" | \"frameset\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"hr\" | \"isindex\" | \"li\" | \"menu\" | \"noframes\" | \"noscript\" | \"ol\" | \"p\" | \"pre\" | \"script\" | \"table\" | \"tbody\" | \"td\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"ul\")")
  Rules[:_StyleOpen] = rule_info("StyleOpen", "\"<\" Spnl (\"style\" | \"STYLE\") Spnl HtmlAttribute* \">\"")
  Rules[:_StyleClose] = rule_info("StyleClose", "\"<\" Spnl \"/\" (\"style\" | \"STYLE\") Spnl \">\"")
  Rules[:_InStyleTags] = rule_info("InStyleTags", "StyleOpen (!StyleClose .)* StyleClose")
  Rules[:_StyleBlock] = rule_info("StyleBlock", "< InStyleTags > @BlankLine* { if css? then                     RDoc::Markup::Raw.new text                   end }")
  Rules[:_Inlines] = rule_info("Inlines", "(!@Endline Inline:i { i } | @Endline:c !(&{ github? } Ticks3 /[^`\\n]*$/) &Inline { c })+:chunks @Endline? { chunks }")
  Rules[:_Inline] = rule_info("Inline", "(Str | @Endline | UlOrStarLine | @Space | Strong | Emph | Strike | Image | Link | NoteReference | InlineNote | Code | RawHtml | Entity | EscapedChar | Symbol)")
  Rules[:_Space] = rule_info("Space", "@Spacechar+ { \" \" }")
  Rules[:_Str] = rule_info("Str", "@StartList:a < @NormalChar+ > { a = text } (StrChunk:c { a << c })* { a }")
  Rules[:_StrChunk] = rule_info("StrChunk", "< (@NormalChar | /_+/ &Alphanumeric)+ > { text }")
  Rules[:_EscapedChar] = rule_info("EscapedChar", "\"\\\\\" !@Newline < /[:\\\\`|*_{}\\[\\]()\#+.!><-]/ > { text }")
  Rules[:_Entity] = rule_info("Entity", "(HexEntity | DecEntity | CharEntity):a { a }")
  Rules[:_Endline] = rule_info("Endline", "(@LineBreak | @TerminalEndline | @NormalEndline)")
  Rules[:_NormalEndline] = rule_info("NormalEndline", "@Sp @Newline !@BlankLine !\">\" !AtxStart !(Line /={1,}|-{1,}/ @Newline) { \"\\n\" }")
  Rules[:_TerminalEndline] = rule_info("TerminalEndline", "@Sp @Newline @Eof")
  Rules[:_LineBreak] = rule_info("LineBreak", "\"  \" @NormalEndline { RDoc::Markup::HardBreak.new }")
  Rules[:_Symbol] = rule_info("Symbol", "< @SpecialChar > { text }")
  Rules[:_UlOrStarLine] = rule_info("UlOrStarLine", "(UlLine | StarLine):a { a }")
  Rules[:_StarLine] = rule_info("StarLine", "(< /\\*{4,}/ > { text } | < @Spacechar /\\*+/ &@Spacechar > { text })")
  Rules[:_UlLine] = rule_info("UlLine", "(< /_{4,}/ > { text } | < @Spacechar /_+/ &@Spacechar > { text })")
  Rules[:_Emph] = rule_info("Emph", "(EmphStar | EmphUl)")
  Rules[:_Whitespace] = rule_info("Whitespace", "(@Spacechar | @Newline)")
  Rules[:_EmphStar] = rule_info("EmphStar", "\"*\" !@Whitespace @StartList:a (!\"*\" Inline:b { a << b } | StrongStar:b { a << b })+ \"*\" { emphasis a.join }")
  Rules[:_EmphUl] = rule_info("EmphUl", "\"_\" !@Whitespace @StartList:a (!\"_\" Inline:b { a << b } | StrongUl:b { a << b })+ \"_\" { emphasis a.join }")
  Rules[:_Strong] = rule_info("Strong", "(StrongStar | StrongUl)")
  Rules[:_StrongStar] = rule_info("StrongStar", "\"**\" !@Whitespace @StartList:a (!\"**\" Inline:b { a << b })+ \"**\" { strong a.join }")
  Rules[:_StrongUl] = rule_info("StrongUl", "\"__\" !@Whitespace @StartList:a (!\"__\" Inline:b { a << b })+ \"__\" { strong a.join }")
  Rules[:_Strike] = rule_info("Strike", "&{ strike? } \"~~\" !@Whitespace @StartList:a (!\"~~\" Inline:b { a << b })+ \"~~\" { strike a.join }")
  Rules[:_Image] = rule_info("Image", "\"!\" (ExplicitLink | ReferenceLink):a { \"rdoc-image:\#{a[/\\[(.*)\\]/, 1]}\" }")
  Rules[:_Link] = rule_info("Link", "(ExplicitLink | ReferenceLink | AutoLink)")
  Rules[:_ReferenceLink] = rule_info("ReferenceLink", "(ReferenceLinkDouble | ReferenceLinkSingle)")
  Rules[:_ReferenceLinkDouble] = rule_info("ReferenceLinkDouble", "Label:content < Spnl > !\"[]\" Label:label { link_to content, label, text }")
  Rules[:_ReferenceLinkSingle] = rule_info("ReferenceLinkSingle", "Label:content < (Spnl \"[]\")? > { link_to content, content, text }")
  Rules[:_ExplicitLink] = rule_info("ExplicitLink", "Label:l \"(\" @Sp Source:s Spnl Title @Sp \")\" { \"{\#{l}}[\#{s}]\" }")
  Rules[:_Source] = rule_info("Source", "(\"<\" < SourceContents > \">\" | < SourceContents >) { text }")
  Rules[:_SourceContents] = rule_info("SourceContents", "((!\"(\" !\")\" !\">\" Nonspacechar)+ | \"(\" SourceContents \")\")*")
  Rules[:_Title] = rule_info("Title", "(TitleSingle | TitleDouble | \"\"):a { a }")
  Rules[:_TitleSingle] = rule_info("TitleSingle", "\"'\" (!(\"'\" @Sp (\")\" | @Newline)) .)* \"'\"")
  Rules[:_TitleDouble] = rule_info("TitleDouble", "\"\\\"\" (!(\"\\\"\" @Sp (\")\" | @Newline)) .)* \"\\\"\"")
  Rules[:_AutoLink] = rule_info("AutoLink", "(AutoLinkUrl | AutoLinkEmail)")
  Rules[:_AutoLinkUrl] = rule_info("AutoLinkUrl", "\"<\" < /[A-Za-z]+/ \"://\" (!@Newline !\">\" .)+ > \">\" { text }")
  Rules[:_AutoLinkEmail] = rule_info("AutoLinkEmail", "\"<\" \"mailto:\"? < /[\\w+.\\/!%~$-]+/i \"@\" (!@Newline !\">\" .)+ > \">\" { \"mailto:\#{text}\" }")
  Rules[:_Reference] = rule_info("Reference", "@NonindentSpace !\"[]\" Label:label \":\" Spnl RefSrc:link RefTitle @BlankLine+ { \# TODO use title               reference label, link               nil             }")
  Rules[:_Label] = rule_info("Label", "\"[\" (!\"^\" &{ notes? } | &. &{ !notes? }) @StartList:a (!\"]\" Inline:l { a << l })* \"]\" { a.join.gsub(/\\s+/, ' ') }")
  Rules[:_RefSrc] = rule_info("RefSrc", "< Nonspacechar+ > { text }")
  Rules[:_RefTitle] = rule_info("RefTitle", "(RefTitleSingle | RefTitleDouble | RefTitleParens | EmptyTitle)")
  Rules[:_EmptyTitle] = rule_info("EmptyTitle", "\"\"")
  Rules[:_RefTitleSingle] = rule_info("RefTitleSingle", "Spnl \"'\" < (!(\"'\" @Sp @Newline | @Newline) .)* > \"'\" { text }")
  Rules[:_RefTitleDouble] = rule_info("RefTitleDouble", "Spnl \"\\\"\" < (!(\"\\\"\" @Sp @Newline | @Newline) .)* > \"\\\"\" { text }")
  Rules[:_RefTitleParens] = rule_info("RefTitleParens", "Spnl \"(\" < (!(\")\" @Sp @Newline | @Newline) .)* > \")\" { text }")
  Rules[:_References] = rule_info("References", "(Reference | SkipBlock)*")
  Rules[:_Ticks1] = rule_info("Ticks1", "\"`\" !\"`\"")
  Rules[:_Ticks2] = rule_info("Ticks2", "\"``\" !\"`\"")
  Rules[:_Ticks3] = rule_info("Ticks3", "\"```\" !\"`\"")
  Rules[:_Ticks4] = rule_info("Ticks4", "\"````\" !\"`\"")
  Rules[:_Ticks5] = rule_info("Ticks5", "\"`````\" !\"`\"")
  Rules[:_Code] = rule_info("Code", "(Ticks1 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks1 /`+/ | !(@Sp Ticks1) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks1 | Ticks2 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks2 /`+/ | !(@Sp Ticks2) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks2 | Ticks3 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks3 /`+/ | !(@Sp Ticks3) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks3 | Ticks4 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks4 /`+/ | !(@Sp Ticks4) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks4 | Ticks5 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks5 /`+/ | !(@Sp Ticks5) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks5) { \"<code>\#{text}</code>\" }")
  Rules[:_RawHtml] = rule_info("RawHtml", "< (HtmlComment | HtmlBlockScript | HtmlTag) > { if html? then text else '' end }")
  Rules[:_BlankLine] = rule_info("BlankLine", "@Sp @Newline { \"\\n\" }")
  Rules[:_Quoted] = rule_info("Quoted", "(\"\\\"\" (!\"\\\"\" .)* \"\\\"\" | \"'\" (!\"'\" .)* \"'\")")
  Rules[:_HtmlAttribute] = rule_info("HtmlAttribute", "(AlphanumericAscii | \"-\")+ Spnl (\"=\" Spnl (Quoted | (!\">\" Nonspacechar)+))? Spnl")
  Rules[:_HtmlComment] = rule_info("HtmlComment", "\"<!--\" (!\"-->\" .)* \"-->\"")
  Rules[:_HtmlTag] = rule_info("HtmlTag", "\"<\" Spnl \"/\"? AlphanumericAscii+ Spnl HtmlAttribute* \"/\"? Spnl \">\"")
  Rules[:_Eof] = rule_info("Eof", "!.")
  Rules[:_Nonspacechar] = rule_info("Nonspacechar", "!@Spacechar !@Newline .")
  Rules[:_Sp] = rule_info("Sp", "@Spacechar*")
  Rules[:_Spnl] = rule_info("Spnl", "@Sp (@Newline @Sp)?")
  Rules[:_SpecialChar] = rule_info("SpecialChar", "(/[~*_`&\\[\\]()<!\#\\\\'\"]/ | @ExtendedSpecialChar)")
  Rules[:_NormalChar] = rule_info("NormalChar", "!(@SpecialChar | @Spacechar | @Newline) .")
  Rules[:_Digit] = rule_info("Digit", "[0-9]")
  Rules[:_Alphanumeric] = rule_info("Alphanumeric", "%literals.Alphanumeric")
  Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "%literals.AlphanumericAscii")
  Rules[:_BOM] = rule_info("BOM", "%literals.BOM")
  Rules[:_Newline] = rule_info("Newline", "%literals.Newline")
  Rules[:_Spacechar] = rule_info("Spacechar", "%literals.Spacechar")
  Rules[:_HexEntity] = rule_info("HexEntity", "/&\#x/i < /[0-9a-fA-F]+/ > \";\" { [text.to_i(16)].pack 'U' }")
  Rules[:_DecEntity] = rule_info("DecEntity", "\"&\#\" < /[0-9]+/ > \";\" { [text.to_i].pack 'U' }")
  Rules[:_CharEntity] = rule_info("CharEntity", "\"&\" < /[A-Za-z0-9]+/ > \";\" { if entity = HTML_ENTITIES[text] then                  entity.pack 'U*'                else                  \"&\#{text};\"                end              }")
  Rules[:_NonindentSpace] = rule_info("NonindentSpace", "/ {0,3}/")
  Rules[:_Indent] = rule_info("Indent", "/\\t|    /")
  Rules[:_IndentedLine] = rule_info("IndentedLine", "Indent Line")
  Rules[:_OptionallyIndentedLine] = rule_info("OptionallyIndentedLine", "Indent? Line")
  Rules[:_StartList] = rule_info("StartList", "&. { [] }")
  Rules[:_Line] = rule_info("Line", "@RawLine:a { a }")
  Rules[:_RawLine] = rule_info("RawLine", "(< /[^\\r\\n]*/ @Newline > | < .+ > @Eof) { text }")
  Rules[:_SkipBlock] = rule_info("SkipBlock", "(HtmlBlock | (!\"\#\" !SetextBottom1 !SetextBottom2 !@BlankLine @RawLine)+ @BlankLine* | @BlankLine+ | @RawLine)")
  Rules[:_ExtendedSpecialChar] = rule_info("ExtendedSpecialChar", "&{ notes? } \"^\"")
  Rules[:_NoteReference] = rule_info("NoteReference", "&{ notes? } RawNoteReference:ref { note_for ref }")
  Rules[:_RawNoteReference] = rule_info("RawNoteReference", "\"[^\" < (!@Newline !\"]\" .)+ > \"]\" { text }")
  Rules[:_Note] = rule_info("Note", "&{ notes? } @NonindentSpace RawNoteReference:ref \":\" @Sp @StartList:a RawNoteBlock:i { a.concat i } (&Indent RawNoteBlock:i { a.concat i })* { @footnotes[ref] = paragraph a                    nil                 }")
  Rules[:_InlineNote] = rule_info("InlineNote", "&{ notes? } \"^[\" @StartList:a (!\"]\" Inline:l { a << l })+ \"]\" { ref = [:inline, @note_order.length]                @footnotes[ref] = paragraph a                 note_for ref              }")
  Rules[:_Notes] = rule_info("Notes", "(Note | SkipBlock)*")
  Rules[:_RawNoteBlock] = rule_info("RawNoteBlock", "@StartList:a (!@BlankLine !RawNoteReference OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }")
  Rules[:_CodeFence] = rule_info("CodeFence", "&{ github? } Ticks3 (@Sp StrChunk:format)? Spnl < ((!\"`\" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text               verbatim.format = format.intern if format.instance_of?(String)               verbatim             }")
  Rules[:_Table] = rule_info("Table", "&{ github? } TableHead:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) }")
  Rules[:_TableHead] = rule_info("TableHead", "TableItem2+:items \"|\"? @Newline { items }")
  Rules[:_TableRow] = rule_info("TableRow", "((TableItem:item1 TableItem2*:items { [item1, *items] }):row | TableItem2+:row) \"|\"? @Newline { row }")
  Rules[:_TableItem2] = rule_info("TableItem2", "\"|\" TableItem")
  Rules[:_TableItem] = rule_info("TableItem", "< /(?:\\\\.|[^|\\n])+/ > { text.strip.gsub(/\\\\(.)/, '\\1')  }")
  Rules[:_TableLine] = rule_info("TableLine", "((TableAlign:align1 TableAlign2*:aligns {[align1, *aligns] }):line | TableAlign2+:line) \"|\"? @Newline { line }")
  Rules[:_TableAlign2] = rule_info("TableAlign2", "\"|\" @Sp TableAlign")
  Rules[:_TableAlign] = rule_info("TableAlign", "< /:?-+:?/ > @Sp {                 text.start_with?(\":\") ?                 (text.end_with?(\":\") ? :center : :left) :                 (text.end_with?(\":\") ? :right : nil)               }")
  Rules[:_DefinitionList] = rule_info("DefinitionList", "&{ definition_lists? } DefinitionListItem+:list { RDoc::Markup::List.new :NOTE, *list.flatten }")
  Rules[:_DefinitionListItem] = rule_info("DefinitionListItem", "DefinitionListLabel+:label DefinitionListDefinition+:defns { list_items = []                        list_items <<                          RDoc::Markup::ListItem.new(label, defns.shift)                         list_items.concat defns.map { |defn|                          RDoc::Markup::ListItem.new nil, defn                        } unless list_items.empty?                         list_items                      }")
  Rules[:_DefinitionListLabel] = rule_info("DefinitionListLabel", "Inline:label @Sp @Newline { label }")
  Rules[:_DefinitionListDefinition] = rule_info("DefinitionListDefinition", "@NonindentSpace \":\" @Space Inlines:a @BlankLine+ { paragraph a }")
  # :startdoc:
end
PK)J[-��5��4share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/ri.rbnu�[���# frozen_string_literal: true
##
# Generates ri data files

class RDoc::Generator::RI

  RDoc::RDoc.add_generator self

  ##
  # Description of this generator

  DESCRIPTION = 'creates ri data files'

  ##
  # Set up a new ri generator

  def initialize store, options #:not-new:
    @options    = options
    @store      = store
    @store.path = '.'
  end

  ##
  # Writes the parsed data store to disk for use by ri.

  def generate
    @store.save
  end

end
PK)J[zG��	
	
8share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/markup.rbnu�[���# frozen_string_literal: true
##
# Handle common RDoc::Markup tasks for various CodeObjects
#
# This module is loaded by generators.  It allows RDoc's CodeObject tree to
# avoid loading generator code to improve startup time for +ri+.

module RDoc::Generator::Markup

  ##
  # Generates a relative URL from this object's path to +target_path+

  def aref_to(target_path)
    RDoc::Markup::ToHtml.gen_relative_url path, target_path
  end

  ##
  # Generates a relative URL from +from_path+ to this object's path

  def as_href(from_path)
    RDoc::Markup::ToHtml.gen_relative_url from_path, path
  end

  ##
  # Handy wrapper for marking up this object's comment

  def description
    markup @comment
  end

  ##
  # Creates an RDoc::Markup::ToHtmlCrossref formatter

  def formatter
    return @formatter if defined? @formatter

    options = @store.rdoc.options
    this = RDoc::Context === self ? self : @parent

    @formatter = RDoc::Markup::ToHtmlCrossref.new options, this.path, this
    @formatter.code_object = self
    @formatter
  end

  ##
  # Build a webcvs URL starting for the given +url+ with +full_path+ appended
  # as the destination path.  If +url+ contains '%s' +full_path+ will be
  # will replace the %s using sprintf on the +url+.

  def cvs_url(url, full_path)
    if /%s/ =~ url then
      sprintf url, full_path
    else
      url + full_path
    end
  end

end

class RDoc::CodeObject

  include RDoc::Generator::Markup

end

class RDoc::MethodAttr

  ##
  # Prepend +src+ with line numbers.  Relies on the first line of a source
  # code listing having:
  #
  #   # File xxxxx, line dddd
  #
  # If it has this comment then line numbers are added to +src+ and the <tt>,
  # line dddd</tt> portion of the comment is removed.

  def add_line_numbers(src)
    return unless src.sub!(/\A(.*)(, line (\d+))/, '\1')
    first = $3.to_i - 1
    last  = first + src.count("\n")
    size = last.to_s.length

    line = first
    src.gsub!(/^/) do
      res = if line == first then
              " " * (size + 1)
            else
              "<span class=\"line-num\">%2$*1$d</span> " % [size, line]
            end

      line += 1
      res
    end
  end

  ##
  # Turns the method's token stream into HTML.
  #
  # Prepends line numbers if +options.line_numbers+ is true.

  def markup_code
    return '' unless @token_stream

    src = RDoc::TokenStream.to_html @token_stream

    # dedent the source
    indent = src.length
    lines = src.lines.to_a
    lines.shift if src =~ /\A.*#\ *File/i # remove '# File' comment
    lines.each do |line|
      if line =~ /^ *(?=\S)/
        n = $~.end(0)
        indent = n if n < indent
        break if n == 0
      end
    end
    src.gsub!(/^#{' ' * indent}/, '') if indent > 0

    add_line_numbers(src) if options.line_numbers

    src
  end

end

class RDoc::ClassModule

  ##
  # Handy wrapper for marking up this class or module's comment

  def description
    markup @comment_location
  end

end

class RDoc::Context::Section

  include RDoc::Generator::Markup

end

class RDoc::TopLevel

  ##
  # Returns a URL for this source file on some web repository.  Use the -W
  # command line option to set.

  def cvs_url
    url = @store.rdoc.options.webcvs

    if /%s/ =~ url then
      url % @relative_name
    else
      url + @relative_name
    end
  end

end
PK)J[��	���Lshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/class.rhtmlnu�[���<body id="top" role="document" class="<%= klass.type %>">
<%= render '_sidebar_toggle.rhtml' %>

<nav id="navigation" role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>
    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_sidebar_table_of_contents.rhtml' %>
  <%= render '_sidebar_sections.rhtml' %>
  <%= render '_sidebar_parent.rhtml' %>
  <%= render '_sidebar_includes.rhtml' %>
  <%= render '_sidebar_extends.rhtml' %>
  <%= render '_sidebar_methods.rhtml' %>

  <%= render '_footer.rhtml' %>
</nav>

<main role="main" aria-labelledby="<%=h klass.aref %>">
  <h1 id="<%=h klass.aref %>" class="anchor-link <%= klass.type %>">
    <%= klass.type %> <%= klass.full_name %>
  </h1>

  <section class="description">
    <%= klass.description %>
  </section>

  <%- klass.each_section do |section, constants, attributes| -%>
  <section id="<%= section.aref %>" class="documentation-section anchor-link">
    <%- if section.title then -%>
    <header class="documentation-section-title">
      <h2>
        <%= section.title %>
      </h2>
      <span class="section-click-top">
        <a href="#top">&uarr; top</a>
      </span>
    </header>
    <%- end -%>

    <%- if section.comment then -%>
    <div>
      <%= section.description %>
    </div>
    <%- end -%>

    <%- unless constants.empty? then -%>
    <section class="constants-list">
      <header>
        <h3>Constants</h3>
      </header>
      <dl>
      <%- constants.each do |const| -%>
        <dt id="<%= const.name %>"><%= const.name %>
        <%- if const.comment then -%>
        <dd>
          <%- if const.mixin_from then -%>
            <div class="mixin-from">
              Included from <a href="<%= klass.aref_to(const.mixin_from.path)%>"><%= const.mixin_from.full_name %></a>
            </div>
          <%- end -%>
          <%= const.description.strip %>
        <%- else -%>
        <dd class="missing-docs">(Not documented)
        <%- end -%>
      <%- end -%>
      </dl>
    </section>
    <%- end -%>

    <%- unless attributes.empty? then -%>
    <section class="attribute-method-details" class="method-section">
      <header>
        <h3>Attributes</h3>
      </header>

      <%- attributes.each do |attrib| -%>
      <div id="<%= attrib.aref %>" class="method-detail anchor-link">
        <div class="method-heading attribute-method-heading">
          <a href="#<%= attrib.aref %>" title="Link to this attribute">
            <span class="method-name"><%= h attrib.name %></span>
            <span class="attribute-access-type">[<%= attrib.rw %>]</span>
          </a>
        </div>

        <div class="method-description">
        <%- if attrib.mixin_from then -%>
          <div class="mixin-from">
            <%= attrib.singleton ? "Extended" : "Included" %> from <a href="<%= klass.aref_to(attrib.mixin_from.path)%>"><%= attrib.mixin_from.full_name %></a>
          </div>
        <%- end -%>
        <%- if attrib.comment then -%>
        <%= attrib.description.strip %>
        <%- else -%>
        <p class="missing-docs">(Not documented)
        <%- end -%>
        </div>
      </div>
      <%- end -%>
    </section>
    <%- end -%>

    <%- klass.methods_by_type(section).each do |type, visibilities|
       next if visibilities.empty?
       visibilities.each do |visibility, methods|
         next if methods.empty? %>
     <section id="<%= visibility %>-<%= type %>-<%= section.aref %>-method-details" class="method-section anchor-link">
       <header>
         <h3><%= visibility.to_s.capitalize %> <%= type.capitalize %> Methods</h3>
       </header>

    <%- methods.each do |method| -%>
      <div id="<%= method.aref %>" class="method-detail anchor-link <%= method.is_alias_for ? "method-alias" : '' %>">
        <div class="method-header">
          <%- if (call_seq = method.call_seq) then -%>
            <%- call_seq.strip.split("\n").each_with_index do |call_seq, i| -%>
              <div class="method-heading">
                <a href="#<%= method.aref %>" title="Link to this method">
                  <span class="method-callseq">
                    <%= h(call_seq.strip.
                        gsub( /^\w+\./m, '')).
                        gsub(/(.*)[-=]&gt;/, '\1&rarr;') %>
                  </span>
                </a>
              </div>
            <%- end -%>
          <%- elsif method.has_call_seq? then -%>
            <div class="method-heading">
              <a href="#<%= method.aref %>" title="Link to this method">
                <span class="method-name"><%= h method.name %></span>
              </a>
            </div>
          <%- else -%>
            <div class="method-heading">
              <a href="#<%= method.aref %>" title="Link to this method">
                <span class="method-name"><%= h method.name %></span>
                <span class="method-args"><%= h method.param_seq %></span>
              </a>
            </div>
          <%- end -%>
        </div>

        <%- if method.token_stream -%>
          <div class="method-controls">
            <details class="method-source-toggle">
              <summary>Source</summary>
            </details>
          </div>
        <%- end -%>

        <%- unless method.skip_description? then -%>
        <div class="method-description">
          <%- if method.token_stream then -%>
          <div class="method-source-code" id="<%= method.html_name %>-source">
            <pre><%= method.markup_code %></pre>
          </div>
          <%- end -%>
          <%- if method.mixin_from then -%>
            <div class="mixin-from">
              <%= method.singleton ? "Extended" : "Included" %> from <a href="<%= klass.aref_to(method.mixin_from.path)%>"><%= method.mixin_from.full_name %></a>
            </div>
          <%- end -%>
          <%- if method.comment then -%>
          <%= method.description.strip %>
          <%- else -%>
          <p class="missing-docs">(Not documented)
          <%- end -%>
          <%- if method.calls_super then -%>
            <div class="method-calls-super">
              Calls superclass method
              <%=
                  method.superclass_method ?
                  method.formatter.link(method.superclass_method.full_name, method.superclass_method.full_name) : nil
              %>
            </div>
          <%- end -%>
        </div>
        <%- end -%>

        <%- unless method.aliases.empty? then -%>
        <div class="aliases">
          Also aliased as: <%= method.aliases.map do |aka|
            if aka.parent then # HACK lib/rexml/encodings
              %{<a href="#{klass.aref_to aka.path}">#{h aka.name}</a>}
            else
              h aka.name
            end
          end.join ", " %>
        </div>
        <%- end -%>

        <%- if method.is_alias_for then -%>
        <div class="aliases">
          Alias for: <a href="<%= klass.aref_to method.is_alias_for.path %>"><%= h method.is_alias_for.name %></a>
        </div>
        <%- end -%>
      </div>

    <%- end -%>
    </section>
  <%- end
     end %>
  </section>
<%- end -%>
</main>
PK)J[�3�^^Nshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_footer.rhtmlnu�[���<footer id="validator-badges" role="contentinfo">
  <p><a href="https://validator.w3.org/check/referer">Validate</a>
  <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> <%= RDoc::VERSION %>.
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>
PK)J[3����Wshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtmlnu�[���<%- unless klass.extends.empty? then %>
<div id="extends-section" class="nav-section">
  <h3>Extended With Modules</h3>

  <ul class="link-list">
    <%- klass.each_extend do |ext| -%>
  <%- unless String === ext.module then -%>
    <li><a class="extend" href="<%= klass.aref_to ext.module.path %>"><%= ext.module.full_name %></a>
  <%- else -%>
    <li><span class="extend"><%= ext.name %></span>
  <%- end -%>
  <%- end -%>
  </ul>
</div>
<%- end -%>
PK)J[麮��Lshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_head.rhtmlnu�[���<meta charset="<%= @options.charset %>">
<meta name="viewport" content="width=device-width, initial-scale=1" />

<title><%= h @title %></title>

<%- if defined?(klass) -%>
  <meta name="keywords" content="ruby,<%= h "#{klass.type},#{klass.full_name}" %>">

  <%- if klass.comment.empty? -%>
    <meta name="description" content="Documentation for the <%= h "#{klass.full_name} #{klass.type}" %>">
  <%- else -%>
    <meta name="description" content="<%= h "#{klass.type} #{klass.full_name}: #{excerpt(klass.comment)}" %>">
  <%- end -%>
<%- elsif defined?(file) -%>
  <meta name="keywords" content="ruby,documentation,<%= h file.page_name %>">
  <meta name="description" content="<%= h "#{file.page_name}: #{excerpt(file.comment)}" %>">
<%- elsif @title -%>
  <meta name="keywords" content="ruby,documentation,<%= h @title %>">

  <%- if @options.main_page and
      main_page = @files.find { |f| f.full_name == @options.main_page } then %>
    <meta name="description" content="<%= h "#{@title}: #{excerpt(main_page.comment)}" %>">
  <%- else -%>
    <meta name="description" content="Documentation for <%= h @title %>">
  <%- end -%>
<%- end -%>

<script type="text/javascript">
  var rdoc_rel_prefix = "<%= h asset_rel_prefix %>/";
  var index_rel_prefix = "<%= h rel_prefix %>/";
</script>

<script src="<%= h asset_rel_prefix %>/js/navigation.js" defer></script>
<script src="<%= h asset_rel_prefix %>/js/search.js" defer></script>
<script src="<%= h asset_rel_prefix %>/js/search_index.js" defer></script>
<script src="<%= h asset_rel_prefix %>/js/searcher.js" defer></script>
<script src="<%= h asset_rel_prefix %>/js/darkfish.js" defer></script>

<link href="<%= h asset_rel_prefix %>/css/fonts.css" rel="stylesheet">
<link href="<%= h asset_rel_prefix %>/css/rdoc.css" rel="stylesheet">
<%- @options.template_stylesheets.each do |stylesheet| -%>
<link href="<%= h asset_rel_prefix %>/<%= File.basename stylesheet %>" rel="stylesheet">
<%- end -%>
PK)J[�޹�Zshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtmlnu�[���<div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2>
    <a href="<%= rel_prefix %>/index.html" rel="home">Home</a>
  </h2>

  <div id="table-of-contents-navigation">
    <a href="<%= rel_prefix %>/table_of_contents.html#pages">Pages</a>
    <a href="<%= rel_prefix %>/table_of_contents.html#classes">Classes</a>
    <a href="<%= rel_prefix %>/table_of_contents.html#methods">Methods</a>
  </div>
</div>
PK)J[��w���Xshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtmlnu�[���<body role="document">
<%= render '_sidebar_toggle.rhtml' %>

<nav id="navigation" role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>
    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_sidebar_pages.rhtml' %>
  <%= render '_sidebar_classes.rhtml' %>

  <%= render '_footer.rhtml' %>
</nav>

<main role="main">
  <h1>Not Found</h1>

  <p><%= message %>
</main>
PK)J[�TB��Xshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtmlnu�[���<div id="file-list-section" class="nav-section">
  <h3>Defined In</h3>

  <ul>
<%- klass.in_files.each do |tl| -%>
    <li><%= h tl.relative_name %>
<%- end -%>
  </ul>
</div>
PK)J[�Z�mmVshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/page_green.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT�?��s��~~���TI�!!�b�F� ,H8���b�1a5�l�
�N�QB� b`�^8M�A��~����y*��޿�����\�)(��0���k��������J�������i�ΆIH ���q�����~����{�СM�кOg��Ԫ(2X2�s��,�}�O>�};���x��3o}~�W�tܠ��$��S�j�bjLEMa8�����y�޿��ww>�����J�Ҫ�*m*��u�=g6=W�|�v�jz
:@B�(%U�Z��4�\��1���m��f��j"�j��A�ƚ6��hT��*J	�V��ZJZ$@�1�0PHZ�(}
)B�e����� @)zc�Ԋe����0�2FH����d�#�����W?�9��</����;���C�9�A��x�y���轍y3t�-�;��w^�t'I����WM����eС*>��W����i!�Gc��{s��ގl6�IEND�B`�PK)J[Os~���Oshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/add.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<oIDAT8˥��K�a��[�/���Y(�)%X(o�l��Nۖsk��n.���-����h�;8�f���E��P��"jï��MGˈ�}yພ羹�$I���.t�u���lu���	AX��:�𼂒Z�H�h1�D�nZJ�OJB��{�Z����?�`2`��S���=�N$��ő�=;��a��&j�w��q�JG�#�<"N���2h8�޵`��6���x�ցn_+~��Zto��}`���x%XЛ͈	hXѿ�ƻ/��}���B�J�_G�&�|Q�r-��6��AރEL�⬡\�U3:WUh[�C6+�	6.f� �*��K͸ܝF��q�����ou4܄?�d�|X���ҥ�Mv��D`�
*_���[
���#A���2��0li��R�|x�q`4w=\������u�Q	��m+G��|%$��5��Թ���5�RO*�YGM��UO��G�qj4ְ(X�&
s1�c�˭(LV�f�
R���d�j��Q	'-1��A�TA>U	�j4,�p�V�"4L$e�@.ArB���Y a~m�y���Y])Q8tN�L���ܞt2��"��I	���
�o=C�S��d�)�_��_�AF�(�IEND�B`�PK)J[��U�ttTshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/arrow_up.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<IDAT8˥�?/Q�ϲ��hg5��j%�'��F,[
���LH��	3�(���v��w�=�fcoN{O~9���VM4Q7ܿ�)v/�WQ����=��&���b����p�S�O�������^��'&^:\˨6���eND!&� ���9꒣�_|�?\����s���r�x�,�����g�*,(F�#d[�O���aAA�*�P
p1����O+C�$`�)����*�w`A��#�0�$���	�*�?�����b&N�RIEND�B`�PK)J[��bbRshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/wrench.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˕��oQ�_�[�c�+W.]�х�i��5 g�m���J[F�q����#_�)�qո��;,��@��{�;���upL�TʙH$�(Z� X��M��ɤ���n�i"��\nt:�}��yD���	�<o��u]�q�}���,���5Q�X��j�P*��DޅB!5�ɠ�l�����X�2�|X��P�VQ( IEA�X���k�
ί���:�lU*h�{-��PU�,����n�	�Y���>�����0�\�ږIU���4(�r�����
�HM�k̈��_���4��_z����iy�'�"[�
��n1��rM���_�A�`b���=$Ik�_p-�q�S~����=li~3�Bv"q�Z�A���ԧ̸�r�[��G���]<&�e�!�'ڸ67	�y��q�$O�X!�=_��~1�Gs�~�E��ZQ�x&qW��K3��!ޤ�u��n�kz�Grj�Q�n�IEND�B`�PK)J[#۸�PPPshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/ruby.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8�͓�K�Q���&*z��(	z�2��4��r�!��\e7�7�V"�x!bT7�R*�c�
�<��|���|:[WAD�>���9���{L�i'�v����%IID=z�/�;��"�\k��޸)�k�u�9��x�]2��$��W0=
��������$��Q��H�>}F|`���n6ϜϤkN7
>��9LL��(,.�������}>ּ^��
��OMM|��%꿏�:/T]�F$�6VW)��)t��5����F�K�����ò�Qq"��r�f ��y_�O�a|	���p�HJ�*MT��X8��[^D��r���-|��|[��v(33���!�.���44���NJ�e�bʡr�טu�͚�d�+��@� S[K���o~TK��r�j�k������ora��P�DP��y5�@Y�?i�܅��Sg��@'�˼Zj��_M�5���̻��w��.�;�'5�ڿ_���IEND�B`�PK)J[�=V��_share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<aIDAT(�c�π2�Q��������+�/ދE����p�,
�%ւ��)X���C�۱)X�dB=6���P�M��u]�[�z+����_70!I�ȓzS5��IEND�B`�PK)J[0���Qshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/brick.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<VIDAT�?HT��ݝ��^ٟ�
ju
��ɥ����pOhi/���8ԩ�!�p*��0��Ў��;��}E�,tn�M2��|13 "by��K�$i�^NFD��Й�;��4eZ|�U�j|��jf^��$ig)kY�b�I��u�K��W��P�cJ'U>�4�MK����B݆�eS��J���tO9�iԄ
�ʆ���n#2����u`� *�����_�
�R4���+�*����B����u���Ϙ�MY�U׷o���AaL��G��۽�kE�|"�2w��9�m�[�y�Gw�S��B�3{��e�r�~�㫹��<�{
@���%
�@�IEND�B`�PK)J[(?�Y��Xshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bullet_black.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<eIDAT(�c�π2.�R�
�We��7JaWА�����\
X�]��?���XH^��?���
��7��3`��[����*60H
ڐ��s���VIEND�B`�PK)J[
�OORshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/plugin.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˥�=H�q��f~\?��,��yoX�{KC��7�PcM�5�4EkS$�8V*w����J�B%��{�s^1㪋g9�����9IDp�8��ラ�%w%I�
=���@]m�v�bS?��|b��~��?��Gժi�lT70��������p��,�@ۙ�ܘ^�Y3�$ՙO�<o�a ��x8A�܉�BW!�����!JB�x8K?�Y�\����z܃S�<f����R�DKC�������Pf'� ��h����af��WãI��n�]�BW��)䎇�p��!Gos�A�MN���X���	�0eY[�ra�B�A���m����h=ڊ�I#͘�0���6�1;����Ū���3Q�@s�e
���p�k_�;+���?R15�S_?q���9�*�H�3��ɞ����`�!w������2/��L.�\��c�Ie��صf|��Ĕ�b��`���M �o��w=��_��m�6E�XIEND�B`�PK)J["�55\share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/page_white_width.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT(υ�A�0E��֕n\x���qob♼��R�w(���g�I�u2�U��5�S����6�VX���ʲJ6Yhl�Oe<�Ƥj�56�S&����5���n�2 ��,��be�%,r�[;�z�ֳ��
X`���<�Ɛ�dz�B����7|�!A��/�n2=V����Y����r�o� v��ZdIEND�B`�PK)J[=k��^share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<cIDAT(�c�π2�Q��������+�/ދE����p�,
�%��ć�O��`
P�oǦ`1�	���BrC6�u�o�_�?��$�
}J ƦgIEND�B`�PK)J[h˟�eeUshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/tag_green.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˅�I�a��O�Uÿ �{�bFc�N4FMt�n����-=�6c li4�BH!�(�dX�՗���.U�>����B�ZE�RA�\F�TB�XD�P�������}!���r��^�C2��^�@�I`�&���tl�$�ɝ�,S3M�D.��'�	��9�0�NCӴ�������Y6��)F?��2���m$	�b�
�@�W��H<���N��t͐x��j�D"�5��v���1o��f�����^���g��V�f�I.l���f����hě��9<��V��O�C|8��i4�>��C8%�J�lGk8�z����#�S�mȉr�X���Z�\@��{�x<.���`����^o�r�Ō��B�x<��^��'��j��}���U�����1���}Q�W��hT��]"�k�L|�s���n���ێ#�~�ߢK\}b���x'�BQ'{i��^�o�PȲ��z��].�c�)��weS�L|iW��(��SIEND�B`�PK)J[���(VV[share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/page_white_text.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT�1nSA��Ǟ�4A����(�I�Sp.KPp"��Q�A�7%����1Ӣ�;���+���Z######����DWk=�C��?����|��X��j�9昇���S�ekMs9���NNV��G@���kD)��4�hn�������.Q�@�nJ)1]:�;1@���T��:�t���i��:���I�$fM��-�+g�]����^LvIEND�B`�PK)J[��AaaWshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/transparent.pngnu�[����PNG


IHDR%=m"PLTE������tRNS@��fIDATc` 
0���zIEND�B`�PK)J[��Q��\share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifnu�[���GIF89a�
���������������������������������������������������������������!�NETSCAPE2.0!�
,�
� �@Ri�h��l�p,�tm�#6N���+�r��rD4�h��@F�Cjz]L�����j�]﹬�R���3-���H$w�Py���|KI��������\K�������Q\���]P��I������������~$�
~�	
��������������������������J�������������������%:`���@X�P@AO	2|�(�D��**�H�E�}l�F�=��$��Ƌ@\9��L�J(��)?�

``��C�=�4�RO@�>}5�TDU�^=�U�Q�H�~���X�e���֫��:<��!���b`�^O�v��y':<�/%Ƅ��E��n`ʎ3A�����Ɗ�~�`�۸Rf*�4�L����E3��DZ�[�����FU��պ�g*>|Ao��G��4Q�]���V;��ޙ
<��G)��}����SvO�<}��&p���y��]�Xg
X�
�`�"1���A� fJh!�B2�8'�m
��uљtbj)򖜊��H	s6.7�L;jԣJ?���p6���l�@k[���-)��P��V�X���fQ9�{f�ĥZ^v	&��0�
l���p�)g9P!�
,�� EMb��T��5+��k��sl�y���[�J;��w3iH�ʒ:�Q��X�R$�Á��511��@��eg;=��(g�ڙ��n%pf�"�|��w}��zv[xE%`	+�%		�����1"	
��������1������������������Ʒ�1��++�'i1֘~���~������%�t����"�����������ݫ'�$|dЉ'N�7o%p�Dz�:�)�D����H�$��D��E��tl���̑5żlP�4	#��y��5��S�RzC>� j��U���z�ҧ]�$�j�QM
ʆķ��772�1@ܒ�DH�;܋%Ѕ���q��ۛX���M�g����Nά�g�MWz!`���d���ѥ]���uj��a��}�aݸ�6;�5լD�zT�h,5�~�z~�@y[�:�3M�7�g�G�]�����q�=@c5

4�u����흃�5_���_9���_A�Mt�B\���Kⵘ}" @l��D�i��Qu�+b�aq&��{#'�L�H�jz��"$&�� �$B!�
,�� EI���@*�P�R*;ò[������L���l7DҎ�%�G�I�0)���m��IԲ�����`��I��}>ă�}-R�wFu�}y�|O�(p�*�"�rt�{R��A>(
�^(		�"��4���	
����3������������3��3���.�.����Чɞ

v.*o3��u���z���z����(�	����D���.��z�Ha ���р�P����*6���=�%������8��A%ϤH�]J��Q&����2�L��z�녆Aɔ>50j�(�]�T�.�s
�*�I�@m:n�Tx^7�}�v(�H�y�!8�/�
��4^ֹ��Gi`z��A�"��?l�8�]�'STҧX�*3��@X��MS<@�蜮-�.���/A��y5��|��U�v�۬�ϰ�V�r�4<A:\�4��bm��dv�i��{˿�ӛ�W��'7��n�����a��q{�"8V�_��u_^���2���_��[k��o�Tpbp
:��M
�s�k�x_"Vؓ��!�
,�� %R�4�y�ԬԢ���\�K���٩��l'#���Q�<�P:��A*�4� G����Z����L���nq�,���I�\��EoI�Uzqx#)��_"�"
����0��0���+�0�#��#�I�"����'�����2�0��	q�+��t�'����k���`���n�����܀�#�����|�2�aq�Vk������oE�f
NC��})Tǐ`���R8��ć=��5��&�D9�ۦZ�{�@滗1M�۴��͇)�Ty��N39]Ʊ�A�o���V
j�>Z0ՠV�T�y����ïe�]U���4�f!P�c0z��kW+_��^��ў`v�"�Ŋa@x:@O,��Ȭt�K5�z�sR�tH5�y3�ʥ�>yz=�3[/�Z|��&�����x@��7n��Gd�n� �B�^��|{Z�C�N�3�Z�&$�p�{f�;^C}C���o� ���%!�
,�� %�$5��,%�:��k��.]�#>�����	�B"�ZRp�]2�S���hk�9�E�-�e<ͩ��k�Gj6�-��t������wsz|m���OQti����x��41
)
�U"		���	�B������Q
��������B������)��������#����B+u���	�)�ێ����#��������"�����p��g�߿=�Q�Ǎ��P�aQ��*֑X�b<88����l$�����Q,?�	y2��=0յT#r�Η5��
�9`jLmgT�J�2��M�Wy6�jukիK�y�0�i��P0J�Cg&(`���oq]�혗']u}C* ���^\sx�a��GtKpeÈa�@��j�v�l�g�V�D�z$�ͣQ�>m�b��1�����6�}�4 @�l�`Ѫ�zvs�Gt�2y֐��/V+��S��NJ=^����"�+Y �	09ڛ>0}���Lj��`���ab�q�O
��'8^�X�d����|5 [��ahW�Y��7֑W6!��i���!��qHX�&�(@�3�&B!�
,�� Q$�@RS��"��	�k;��	S�]�3X'���+�ζS
���tUi���k���`��m��0���c�]���w��l��dt$v}��k~zq,l��ryu�x��?)B��		����
�����;	�0��0�����;�����+	��­�����G�0-g��+�	���.z�����%�������$��z��������+�l�(jx�9hN����t�<�; 8O��7�y�xH#�|�����bH�$ѼLip�ȅѐ�
��2"��-��A��(���P�$��tj�@{��s(W��$( ��=�!u�5��(�jm�nwmĸo����A���@w/��������d�1+:'���l��1�f��#�|,z2�0Hg�������@1}�թٯ�[��3�S�+|�7U�ǃ�.�{��P卵0ʶc=+PL�0�3�:~���p��'����v{��O��n<����~)�@��u�P6
��k(����àK'v�K
V�`I�9(Z�L�G!!�
,�� �PeRN*�'�,Ԣ���v*�o<�����bK�s M��3�k>o�����R��sAE1f�m):��k��v���v�M{w�l
��r�tqPm�|��uF~�?W	a3�&
���A�6��������6	�-�����3���-	����.�,����6o3/h��-��o���	������'�d�����z���z��&�����(�CGo߉O���a��9ќD=
�kOOEuj(�Ǒ�L����ʏ�T��IR&K�.��H���=�����
�t��tI��£B�0E:qjԪP������h�Y��‰	ʾ�B�F�dÎT0@�ܝK!Aݽ_�aw�9��hP�(�!Ѣ,�f�ʓmZ�,r��Ɲ[|.��1鑣wZ���h%�.�:�^m�Ri綽7V޿}c\����u�;o�>o���ü��u+],E�b��d]/\��.������*h�3�;��߯��~�����
��|H�oXg���6�]����	!!�
,�� E9�$�#%5(�,Ԓr��(i�0.����݊�`lXt��D%�ydJ�6���H�^�.�p���l��[k�=.˿�(>�S�x~�gypv}�lNtj�x�{e>	�(	�~~	
�����-������-����,-�(���������������'�e-/p��(��u�'����"�	�����u�������������GN�
����šL��1��:�I<���9u���G '��9��cɕ-Q�$��L�'lD���7U�T��T��ׄ �t�Ѧ�BU�@%J��JŪ�)W?L�S��Y	�b��Zvm��މ���Б]x�F�0�I�{�V�Xg�|��-Bf�E��#��|.@�4O���P4�u8S
g֥_�n�;Ө՞�(�բQ�)����wǮ<.�(��ʳ2?�����eG��|L�Յ"x�/��-���/�y��+,�p=E��1�� �d�Q��ٷ�~��2Kꔛ$���r
`m*Ys�C
zFn� ak}��nn��I#�����Q!�
,�� %R�4��Ԝ"CA,���(~ں8׼د��DA֐���2hs��݌�+�p]���ˤ�Ob��K��w8^>��u�z�`�H~htkv"x�m��|1Z,
���-���#�5��1"�1�����'���'�[�#����,�
��,},�'�	p�#��h�1�w���a�������"��������w��#�p�"b�1��V-��ak�c���B�)��P@�;�]Xq�Č#N�-A�"߲Syr����L�4eM�ʚph�\@�e�q/o��	���D2(𯘳q��s:g��u@��Fu+��Q�AU���ӯZ��#xbR����4�v�G1��
M�����ɻ���;8F�P`B۩3he�11O~�	�˟��>z�(�C�3���A=��\���Z-�ڇ�A����a��-qiS�R�����Ym�G�(�1���;��Ž��=dt�q�B�[���!�	
,�
� %�di�h��l�p,�4�0T:�Ԕ��n琘�9␄\����<
�P)�J�Z���+^�f�(��-N	�Ǥ4��an��t#o~$z|u�#��Svx��@��������"�'�������%	�#m#	���S���%�
���	��$��%�§	������#���ְ��ͽ�$�&	A��"����%���$��#��H݃'/�9�����BH
Ed�O�C�)L��q#F�o�	��g�B��b�DIʤC������'C��Rg̙G��	4^M=<iEj0�ћM�-0��R=��jB+î��{u,H�YÖ$+vhP�z�z�$W-]���&������=���-�>F\�dd��3 X�堙Kl��٣�̊@��@���T��?}��IV�UT+��������o�l�|gr�
T�e��lu�ӭ��ޒ�v��G�]l<ݑ�sg��_D
�)4E�Q����_i���)�Pi#���!h Da
%���.@��q�M��OQ	`�pn��yHW��C�"�$�s*
��]hp$��V
8��<��c!;PK)J[�P��Rshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/delete.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<]IDAT8˥��KSa�[���n��QP��2w��ܦγL�[,bi��a�A��\�C��v��_2Ml�ZFjס���NMjm��kʷ�`&.#z�����<ϓ ���bV��P�T3�%�I��{G��qRiv�ȅ�
�tz�#E��6����Edd���J�`���DR�2<]N��;�4�Ѿ;���m>�7��8��ɀQe6�L�I���t��殷c�q!z�|v��j�/Xi���@��
�%1|h���l� !���|������!
�Y#�u�U�N�w]�˼H3��u�	t]E��>k%�I�f��o���R��D:�0��`�~�|�
���(r�
�on�3oG0!�$����V��
�*[W0_������-+���� d��W�&�2�ZfMF��VJp�iF&B��
>��R���g�-� �~	C�m��ڴ���ER�
ឫ� p�5ްy����+��21���K�aw�h�`� ��#���a�Z񽞆�T�Zo���L��ѓ���`"�(?��'��ˎJv�K�ކ��|�:�G9[�a�w8�2
Jw��f'��y����m�zsӘ��Tsw��_��_��ιIr�IEND�B`�PK)J[�ErrPshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/date.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<IDAT8˕RmkA~�ԋ�K$��5X�%� �ǂ!��#�?P��@P�Z(*E�A�#�ܹۙ�w��:�0�;3ϼ�@J	���f?W��o�L����`
�O�Z�+���M������<�ww�
^�I���ś�K�����Z��Rj�F�NV0+�v�E8�q ���+��bF"�v���s��;�4t��� ��>9�ck��t���yx�	��D��7��гm\P���S�t�]�Io�@��#�/�د���)�[�f����^ѻ�#dHk��b�G"������uݿ�q�\.X��c8�Y��h��H������|�r��}�/�!�F���s�R�B�(�������]���j�T5���V��?ZxY�l6���s�d2Qg��wp�d����C2���p8�A���厊����*��X,¢��<�}"�W����
����
8s"��j�R-�-tiM�1�e�K�
���l�T*=L��/�F�#�C�7~��
-:MW1��IEND�B`�PK)J[���<XXTshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/tag_blue.pngnu�[����PNG


IHDR�agAMA��7��iCCPICC Profilex�T�k�P��e���:g	>h�ndStC��kW��Z�6�!H��m\��$�~�ًo:�w�>�كo{�
�a���"L�"���4M'S�����9'��^��qZ�/USO������^C+�hM��J&G@Ӳy���lt�o߫�c՚�� ��5�"�Y�i\�t�։�15��LsX�	g8oc�ግ#�f45@�	��B:K�@8�i��
�΁�'&��.�<�ER/�dE���s��_���雭��m�N�|��9}p���?_�A��pX6�5~B�$�&���ti��e��Y)%$�bT�3li�������P���4�43Y���P��1��KF��ۑ��5>�)�@����r��y������[�:V���ͦ#��wQ?HB��d(�Ba�cĪ�L"J��itTy�8�;(���Gx�_�^�[�����%׎��ŷ��Q�麲�ua��n�7��m�Q���H^e�O�Q�u6�S��u�2��%vX���^�*l
O�—����ޭˀq,>��S���%�L��d����B���1CZ��$M��9��P'w����\/����]��.r#���E|!�3�>_�o�a�۾�d�1Z�ӑ���z���'�=������~V+��cjJ�tO%mN�����|��-���bW�O+
o�^�I�H�.�;���S�]�i_s9�*p����.7U^��s.�3u�	�|^,��<����;�c�=ma��>V��t.[��՟Ϫ����x���#
�¡_2	pHYs��diTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xmp="http://ns.adobe.com/xap/1.0/">
         <xmp:CreatorTool>Adobe ImageReady</xmp:CreatorTool>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
�z`IDAT8}RMka~vW#�j-�V�&ZjR
��B��"�Q�����!z�R!��JA��"��T	~zi*U��̶��G_�ݝ}g��yEQp�:::�+��z2��t�~&΍�o*��L�o�$��d2�e�e�
'�V @4�3H6��DX�0O���@(R���m���F�ٍ��od��F���ɾ͇xU�p:<"��N�����T�d�}����\��3��,@��A�Z�������r��r��7�!��� ��tZ����W�w��F��_�Z�>���lhR���lޢl�k1��<\�ؼ
��*��q:����Z�UB:������{ے�ܡP�@M���elۀ^��z�>�:�D"1�iX��Z
{�e<��)iJl�
E�n)�ev��`PO�y����db=;;C��X��.�c���k�1k&8�j���ר_���d��{~?j�c�fi�R�ԡs�b��O����A����9��&�yd�V;�8�����$�p.r�=�XL���v�}�@!Oa�X,*�C�;���z�����J��n���Y�T��a�B��!�^�L{n�7��k���IEND�B`�PK)J[7��Pshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/zoom.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<FIDAT8ˍ�KH�A���̪-��K�C=�
�Cm�fu�P��)D��B�"�K�$A�
e��t�����J��Z�yu�m���0�}f~3#�sL��|!!|g-V�9��Q�鎺��c�`��T���C8*�����5�b�F'��R!D�Ћ�
�kb�^sP��!��������Loc��g�ע≣�.=^u��֘����[�
���65�޶FG��� �!�� P
�%wN5�\��q=(�t@ȀѶ(t2)է�"�L?B�2�uXcY��V$�����&����a]c��t����<��*����Q��1��}E	)h��Y����ҁ�갎����6`�D�Xr<:=UR���̞��O���9��8�*}�V&b==h��ցq�ف�+;�˜�JT<������������A�!C�:����̼�}�nAH��~0b�M���36��+�/痗����s�IĢ̾�����Ek����J{�v��!���=_�M�yK�b]�ö�a��{6W�03�<U��=�c�@_��@,�/fg�kM�q�?)�+��H�IEND�B`�PK)J[J���Pshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/find.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<%IDAT8�c���?%���4��y�dÞ����'/Xf�Ʀ�"ʀ��G�vi�QT�o���@���5 )����%�k;��o�4�����7��Y%u��Z�bV����Ty�E��,X�����ݣ�o6ة��m�=���x��)k����?"����e�KZ��帹y�����L���e����?��	��'��?e���}K��j���m�ѹ�Ó�.dfay����6�\V���o��]Z�������9�մ�6�\�K/�b�Ĭ`�
*Y�Bc~Z�:��
��ola�_[�����S1qI��bR����/*.�����?##�;�L�@�	�:
�]��_����@�$������e��;��@1��/x%�|���W4�
��|F�=c� 9��WA12 5��za�N�?(8����S����SQE�QBZ�(�`�‚���?�֎n�x% �P`�����_IU�
�P,��a�j(��X���@��K�*��п�9����}�c�e&R1�2h�Z<uIEND�B`�PK)J[�CCJUUSshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/package.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8�}�Kh\u��{g�̝4�L���)�B�1>�n\��F��)��PAD��Q�TWf!�"؍�����`�HC0ijC�1ͳ��L�fw���(v!�g}�6�9���)wyc�/T4�"����Գ�X�8ѫ������̛v���כ*��������WGU}[E>����7�&����t�Ji�G�+*rQE�>�{�	`�����=�����9o/ror��g�aw=MЪ�U��Q��VcƏ�;}ź;q�D�>��r��7j�T�1a��U&m�8�6��l7K���Vio{�Ǥ9s���VԨ�,O"a��Wū���mpt�k��.h-��V}�����֯K��*�R�\�M�-Юޡ�'O�'C�U0)�7����9Ms�&�3�P#����V
'w'�ů� �
N,�o��p���#�LRi4�Q�j��h�]��G�S\���;Q���Ƥ��B�H��`�1����@<Ѐd�^�{�9�]� �!���"���dlǁD�	@|0mp��
���Q���
a+��k��K7����
�"$���� h$?$�B�r�N#&Cif
�N�7�S���V[�6��l�a�L/Hb�F�6�t����X�=�ֽɕد}��GO�|뻗zU�C5r���h�8�D>��)4V�w���ͦ�|�"������L\>2�FΫ�[�^y�jW��?�'q{�g�Bi��o�.��ȧ��T��c��t�ܲ^&��IEND�B`�PK)J[R�7���Vshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/brick_link.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8�mR�K�Q����	-f=��?�I�ZT�v��rpm�EDR-*"+RJ,+"ZLR�.JŢ��>DÔ��?��R;��c����}��s�}W��b{{����Jlff�`��[��%��n�Js.��Û/�ZA���8>>F�P@>������5�}q$	{�_���Kx<�B!���y�+q�����IE���auuN�S�1st���ppp�LMM���;99���G ��T/=/����������
LNN�aO�d2H$8;;��9�pzzZt�xgg�p^�W"bbbBU���$A:����-"������W�U9D6nnnJ����JUUqss�d2�X,&U����]�H�tF'$���fS����4
�x\>C����v����XZZ������d�j�r��*���^�G�Q�R)������ג�c���t�]��l6G�M��r�����������8��������d���0���e\SS���$immMW��p�544�zzz�Ipuu�^���u90�_�9�������>�������^WTT|�	������P]]���:	�$����A����W���Ã��w�{5n���ZZZ���&c��]�5�}EP^^�����`�0��,˃�ccc�W�/"֘�kX����Y�j�IEND�B`�PK)J[>�)oHHYshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/wrench_orange.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˕��kSQ��8H)N]uA,����w��j�azcbb6���&�	Qcn^b4b2e	�l� x�W�
}$�����9�X��t:�$��n"�0����T8�J)N��!��h4ʉ�F��|�p8|2�X,f��[����͵`0������S���~�O�Z%
}
��i�z=�n���H�X��t:4
��"�B�r�L�R��tv�_�T'�-�l��u��&f_���u�R�����l6� �u]e�
�5~lޢ�n����z�{�e�j���jU��i�w��|}�������?��$����&������x
�r��|TN��%��*4�Ç l��;'T�^�ٗG<����"pF�ୌw��!y��h�ݔ��e��E���6��	�
ܙצ���P���J��:�C\DW�^���,<<�4���A����	�ѹ�]��s��6�ޑ�����IEND�B`�PK)J[$V���Wshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngnu�[����PNG


IHDR��csBIT|d�	pHYs��~�tEXtSoftwareAdobe Fireworks CS3��FtEXtCreation Time7/16/07Z��(IDATH���A0!��U[
Gϱ�JJJJJJJJJ�Y�����IEND�B`�PK)J[�S�Oshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bug.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˝��OSQ�\^[�تtz��%l$�*�**�2:�
iRp�����
�c0���ąKw&&`44���(�e��K�ɽ�w�wrO��X�\���Hi�s�cUQz@��������;քId�Taˀ���)j���C'يKT��8=����ʯ�9ނ^z�����Θ���1OF�Z�[��W�-G�z�?���&�%*��M���Gn�N!�aO>Nc��[ɨX·��0N��qg*�1Su��b|�{g|�fz)̾����&\
��5\	�0	�3�i�D��;`|�0>A?Tx4^���`�o�qs��`>ʦ�`��fC��v�@m�X����[r\���At.��)�G�[Ì�����`��N1���)�B������W�s+�:�Nd��s�V�a�*D�X.pB�&B�]���H@T�3@�Pڏڠ	wV�P6��3yp-�����4�Ǽ

�$�H�'��9��{m@�U�$�ZjC���X�:T��g����L�:�:�?��[#��{1��P=.2���F\�i���A-D
7�7q��XI��פb4�ka��Aj�%
ͼj&Q˫H��&�s.��
`�j������KLE3�*ΫXw�6��_�l���=�@�����h�ߊv��,qq��IEND�B`�PK)J[�N�L/L/Mshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/css/rdoc.cssnu�[���/*
 * "Darkfish" RDoc CSS
 * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $
 *
 * Author: Michael Granger <ged@FaerieMUD.org>
 *
 */

/* vim: ft=css et sw=2 ts=2 sts=2 */

/* 1. Variables and Root Styles */
:root {
  --sidebar-width: 300px;
  --highlight-color: #cc342d; /* Reddish color for accents and headings */
  --secondary-highlight-color: #c83045; /* Darker reddish color for secondary highlights */
  --text-color: #505050; /* Dark bluish-grey for text */
  --background-color: #fefefe; /* Near white background */
  --code-block-background-color: #f6f6f3; /* Slightly darker grey for code blocks */
  --link-color: #42405F; /* Dark bluish-grey for links */
  --link-hover-color: var(--highlight-color); /* Reddish color on hover */
  --border-color: #e0e0e0;; /* General border color */
  --source-code-toggle-color: var(--secondary-highlight-color);
  --scrollbar-thumb-hover-background: #505050; /* Hover color for scrollbar thumb */
  --table-header-background-color: #eceaed;
  --table-td-background-color: #f5f4f6;

  /* Font family variables */
  --font-primary: 'Segoe UI', 'Verdana', 'Arial', sans-serif;
  --font-heading: 'Helvetica', 'Arial', sans-serif;
  --font-code: monospace;
}

/* 2. Global Styles */
body {
  background: var(--background-color);
  font-family: var(--font-primary);
  font-weight: 400;
  color: var(--text-color);
  line-height: 1.6;

  /* Layout */
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  margin: 0;
}

/* 3. Typography */
h1 span,
h2 span,
h3 span,
h4 span,
h5 span,
h6 span {
  position: relative;

  display: none;
  padding-left: 1em;
  line-height: 0;
  vertical-align: baseline;
  font-size: 10px;
}

h1 span { top: -1.3em; }
h2 span { top: -1.2em; }
h3 span { top: -1.0em; }
h4 span { top: -0.8em; }
h5 span { top: -0.5em; }
h6 span { top: -0.5em; }

h1:hover span,
h2:hover span,
h3:hover span,
h4:hover span,
h5:hover span,
h6:hover span {
  display: inline;
}

h1:target,
h2:target,
h3:target,
h4:target,
h5:target,
h6:target {
  margin-left: -10px;
  border-left: 10px solid var(--border-color);
  scroll-margin-top: 1rem;
}

main .anchor-link:target {
  scroll-margin-top: 1rem;
}

/* 4. Links */
a {
  color: var(--link-color);
  transition: color 0.3s ease;
}

a:hover {
  color: var(--link-hover-color);
}

a code:hover {
  color: var(--link-hover-color);
}

/* 5. Code and Pre */
code,
pre {
  font-family: var(--font-code);
  background-color: var(--code-block-background-color);
  border: 1px solid var(--border-color);
  border-radius: 6px;
  padding: 16px;
  overflow-x: auto;
  font-size: 15px;
  line-height: 1.5;
  margin: 1em 0;
}

code {
  background-color: var(--code-block-background-color);
  padding: 0.1em 0.3em;
  border-radius: 3px;
  font-size: 85%;
}

/* Tables */
table {
  margin: 0;
  border-spacing: 0;
  border-collapse: collapse;
}

table tr th, table tr td {
  padding: 0.2em 0.4em;
  border: 1px solid var(--border-color);
}

table tr th {
  background-color: var(--table-header-background-color);
}

table tr:nth-child(even) td {
  background-color: var(--table-td-background-color);
}

/* 7. Navigation and Sidebar */
nav {
  font-family: var(--font-heading);
  font-size: 16px;
  border-right: 1px solid var(--border-color);
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  width: var(--sidebar-width);
  background: var(--background-color); /* It needs an explicit background for toggling narrow screens */
  overflow-y: auto;
  z-index: 10;
  display: flex;
  flex-direction: column;
  color: var(--text-color);
}

nav[hidden] {
  display: none;
}

nav footer {
  padding: 1em;
  border-top: 1px solid var(--border-color);
}

nav footer a {
  color: var(--secondary-highlight-color);
}

nav .nav-section {
  margin-top: 1em;
  padding: 0 1em;
}

nav h2, nav h3 {
  margin: 0 0 0.5em;
  padding: 0.5em 0;
  color: var(--highlight-color);
  border-bottom: 1px solid var(--border-color);
}

nav h2 {
  font-size: 1.2em;
}

nav h3,
#table-of-contents-navigation {
  font-size: 1em;
}

nav ul,
nav dl,
nav p {
  padding: 0;
  list-style: none;
  margin: 0.5em 0;
}

nav ul li {
  margin-bottom: 0.3em;
}

nav ul ul {
  padding-left: 1em;
}

nav ul ul ul {
  padding-left: 1em;
}

nav ul ul ul ul {
  padding-left: 1em;
}

nav a {
  color: var(--link-color);
  text-decoration: none;
}

nav a:hover {
  color: var(--link-hover-color);
  text-decoration: underline;
}

#navigation-toggle {
  z-index: 1000;
  font-size: 2em;
  display: block;
  position: fixed;
  top: 10px;
  left: 20px;
  cursor: pointer;
}

#navigation-toggle[aria-expanded="true"] {
  top: 10px;
  left: 250px;
}

nav ul li details {
  position: relative;
  padding-right: 1.5em;  /* Add space for the marker on the right */
}

nav ul li details > summary {
  list-style: none;  /* Remove the default marker */
  position: relative; /* So that the open/close triangle can position itself absolutely inside */
}

nav ul li details > summary::-webkit-details-marker {
  display: none;  /* Removes the default marker, in Safari 18. */
}

nav ul li details > summary::after {
  content: '▶';  /* Unicode right-pointing triangle */
  position: absolute;
  font-size: 0.8em;
  bottom: 0.1em;
  margin-left: 0.3em;
  transition: transform 0.2s ease;
}

nav ul li details[open] > summary::after {
  transform: rotate(90deg);  /* Rotate the triangle when open */
}

/* 8. Main Content */
main {
  flex: 1;
  display: block;
  margin: 3em auto;
  padding: 0 2em;
  max-width: 800px;
  font-size: 16px;
  line-height: 1.6;
  color: var(--text-color);
  box-sizing: border-box;
}

@media (min-width: 1024px) {
  main {
    margin-left: var(--sidebar-width);
  }

  .table-of-contents main {
    margin-left: 20em;
  }

  #navigation-toggle {
    display: none;
  }
}

main h1[class] {
  margin-top: 0;
  margin-bottom: 1em;
  font-size: 2.5em;
  color: var(--highlight-color);
}

main h1,
main h2,
main h3,
main h4,
main h5,
main h6 {
  font-family: var(--font-heading);
  color: var(--highlight-color);
}

/* Search */
#search-section {
  padding: 1em;
  background-color: var(--background-color);
  border-bottom: 1px solid var(--border-color);
}

#search-field-wrapper {
  position: relative;
  display: flex;
  align-items: center;
}

#search-field {
  width: 100%;
  padding: 0.5em 1em 0.5em 2.5em;
  border: 1px solid var(--border-color);
  border-radius: 20px;
  font-size: 14px;
  outline: none;
  transition: border-color 0.3s ease;
  color: var(--text-color);
}

#search-field:focus {
  border-color: var(--highlight-color);
}

#search-field::placeholder {
  color: var(--text-color);
}

#search-field-wrapper::before {
  content: "\1F50D";
  position: absolute;
  left: 0.75em;
  top: 50%;
  transform: translateY(-50%);
  font-size: 14px;
  color: var(--text-color);
  opacity: 0.6;
}

/* Search Results */
#search-results {
  font-family: var(--font-primary);
  font-weight: 300;
}

#search-results .search-match {
  font-family: var(--font-heading);
  font-weight: normal;
}

#search-results .search-selected {
  background: var(--code-block-background-color);
  border-bottom: 1px solid transparent;
}

#search-results li {
  list-style: none;
  border-bottom: 1px solid var(--border-color);
  margin-bottom: 0.5em;
}

#search-results li:last-child {
  border-bottom: none;
  margin-bottom: 0;
}

#search-results li p {
  padding: 0;
  margin: 0.5em;
}

#search-results .search-namespace {
  font-weight: bold;
}

#search-results li em {
  background-color: rgba(224, 108, 117, 0.1);
  font-style: normal;
}

#search-results pre {
  margin: 0.5em;
  font-family: var(--font-code);
}

/* Syntax Highlighting - Gruvbox Light Scheme */

.ruby-constant   { color: #AF3A03; }  /* Dark Orange */
.ruby-keyword    { color: #9D0006; }  /* Dark Red */
.ruby-ivar       { color: #B57614; }  /* Brown */
.ruby-operator   { color: #427B58; }  /* Dark Teal */
.ruby-identifier { color: #076678; }  /* Deep Teal */
.ruby-node       { color: #8F3F71; }  /* Plum */
.ruby-comment    { color: #928374; font-style: italic; }  /* Gray */
.ruby-regexp     { color: #8F3F71; }  /* Plum */
.ruby-value      { color: #AF3A03; }  /* Dark Orange */
.ruby-string     { color: #79740E; }  /* Olive */

/* Emphasis */
em {
  text-decoration-color: rgba(52, 48, 64, 0.25);
  text-decoration-line: underline;
  text-decoration-style: dotted;
}

strong,
em {
  color: var(--highlight-color);
  background-color: rgba(255, 111, 97, 0.1); /* Light red background for emphasis */
}

/* Paragraphs */
main p {
  line-height: 1.5em;
  font-weight: 400;
}

/* Preformatted Text */
main pre {
  margin: 1.2em 0.5em;
  padding: 1em;
  font-size: 0.8em;
}

/* Horizontal Rules */
main hr {
  margin: 1.5em 1em;
  border: 2px solid var(--border-color);
}

/* Blockquotes */
main blockquote {
  margin: 0 2em 1.2em 1.2em;
  padding-left: 0.5em;
  border-left: 2px solid var(--border-color);
}

/* Lists */
main li > p {
  margin: 0.5em;
}

/* Definition Lists */
main dl {
  margin: 1em 0.5em;
}

main dt {
  line-height: 1.5; /* matches `main p` */
  font-weight: bold;
}

main dl.note-list dt {
  margin-right: 1em;
  float: left;
}

main dl.note-list dt:has(+ dt) {
  margin-right: 0.25em;
}

main dl.note-list dt:has(+ dt)::after {
  content: ', ';
  font-weight: normal;
}

main dd {
  margin: 0 0 1em 1em;
}

main dd p:first-child {
  margin-top: 0;
}

/* Headers within Main */
main header h2 {
  margin-top: 2em;
  border-width: 0;
  border-top: 4px solid var(--border-color);
  font-size: 130%;
}

main header h3 {
  margin: 2em 0 1.5em;
  border-width: 0;
  border-top: 3px solid var(--border-color);
  font-size: 120%;
}

/* Utility Classes */
.hide { display: none !important; }
.initially-hidden { display: none; }

/* Table of Contents */
.table-of-contents ul {
  margin: 1em;
  list-style: none;
}

.table-of-contents ul ul {
  margin-top: 0.25em;
}

.table-of-contents ul :link,
.table-of-contents ul :visited {
  font-size: 16px;
}

.table-of-contents li {
  margin-bottom: 0.25em;
}

/* Method Details */
main .method-source-code {
  visibility: hidden;
  max-height: 0;
  overflow: auto;
  transition-duration: 200ms;
  transition-delay: 0ms;
  transition-property: all;
  transition-timing-function: ease-in-out;
}

main .method-source-code pre {
  border-color: var(--source-code-toggle-color);
}

main .method-source-code.active-menu {
  visibility: visible;
  max-height: 100vh;
}

main .method-description .method-calls-super {
  color: var(--text-color);
  font-weight: bold;
}

main .method-detail {
  margin-bottom: 2.5em;
}

main .method-detail:target {
  margin-left: -10px;
  border-left: 10px solid var(--border-color);
}

main .method-header {
  display: inline-block;
}

main .method-heading {
  position: relative;
  font-family: var(--font-code);
  font-size: 110%;
  font-weight: bold;
}

main .method-heading::after {
  content: '¶';
  position: absolute;
  visibility: hidden;
  color: var(--highlight-color);
  font-size: 0.5em;
}

main .method-heading:hover::after {
  visibility: visible;
}

main .method-controls {
  line-height: 20px;
  float: right;
  color: var(--source-code-toggle-color);
  cursor: pointer;
}

main .method-description,
main .aliases {
  margin-top: 0.75em;
  color: var(--text-color);
}

main .aliases {
  padding-top: 4px;
  font-style: italic;
  cursor: default;
}

main .aliases a {
  color: var(--secondary-highlight-color);
}

main .mixin-from {
  font-size: 80%;
  font-style: italic;
  margin-bottom: 0.75em;
}

main .method-description ul {
  margin-left: 1.5em;
}

main #attribute-method-details .method-detail:hover {
  background-color: transparent;
  cursor: default;
}

main .attribute-access-type {
  text-transform: uppercase;
}

/* Responsive Adjustments */
@media (max-width: 480px) {
  nav {
    width: 100%;
  }

  main {
    margin: 1em auto;
    padding: 0 1em;
    max-width: 100%;
  }

  #navigation-toggle {
    right: 10px;
    left: auto;
  }

  #navigation-toggle[aria-expanded="true"] {
    left: auto;
  }

  table {
    display: block;
    overflow-x: auto;
    white-space: nowrap;
  }

  main .method-controls {
    margin-top: 10px;
    float: none;
  }
}
PK)J[;9Iv��Nshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/css/fonts.cssnu�[���/*
 * Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/),
 * with Reserved Font Name "Source". All Rights Reserved. Source is a
 * trademark of Adobe Systems Incorporated in the United States and/or other
 * countries.
 *
 * This Font Software is licensed under the SIL Open Font License, Version
 * 1.1.
 *
 * This license is copied below, and is also available with a FAQ at:
 * http://scripts.sil.org/OFL
 */

@font-face {
  font-family: "Source Code Pro";
  font-style: normal;
  font-weight: 400;
  src: local("Source Code Pro"),
       local("SourceCodePro-Regular"),
       url("../fonts/SourceCodePro-Regular.ttf") format("truetype");
}

@font-face {
  font-family: "Source Code Pro";
  font-style: normal;
  font-weight: 700;
  src: local("Source Code Pro Bold"),
       local("SourceCodePro-Bold"),
       url("../fonts/SourceCodePro-Bold.ttf") format("truetype");
}

/*
 * Copyright (c) 2010, Łukasz Dziedzic (dziedzic@typoland.com),
 * with Reserved Font Name Lato.
 *
 * This Font Software is licensed under the SIL Open Font License, Version
 * 1.1.
 *
 * This license is copied below, and is also available with a FAQ at:
 * http://scripts.sil.org/OFL
 */

@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 300;
  src: local("Lato Light"),
       local("Lato-Light"),
       url("../fonts/Lato-Light.ttf") format("truetype");
}

@font-face {
  font-family: "Lato";
  font-style: italic;
  font-weight: 300;
  src: local("Lato Light Italic"),
       local("Lato-LightItalic"),
       url("../fonts/Lato-LightItalic.ttf") format("truetype");
}

@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 700;
  src: local("Lato Regular"),
       local("Lato-Regular"),
       url("../fonts/Lato-Regular.ttf") format("truetype");
}

@font-face {
  font-family: "Lato";
  font-style: italic;
  font-weight: 700;
  src: local("Lato Italic"),
       local("Lato-Italic"),
       url("../fonts/Lato-RegularItalic.ttf") format("truetype");
}

/*
 * -----------------------------------------------------------
 * SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
 * -----------------------------------------------------------
 *
 * PREAMBLE
 * The goals of the Open Font License (OFL) are to stimulate worldwide
 * development of collaborative font projects, to support the font creation
 * efforts of academic and linguistic communities, and to provide a free and
 * open framework in which fonts may be shared and improved in partnership
 * with others.
 *
 * The OFL allows the licensed fonts to be used, studied, modified and
 * redistributed freely as long as they are not sold by themselves. The
 * fonts, including any derivative works, can be bundled, embedded,
 * redistributed and/or sold with any software provided that any reserved
 * names are not used by derivative works. The fonts and derivatives,
 * however, cannot be released under any other type of license. The
 * requirement for fonts to remain under this license does not apply
 * to any document created using the fonts or their derivatives.
 *
 * DEFINITIONS
 * "Font Software" refers to the set of files released by the Copyright
 * Holder(s) under this license and clearly marked as such. This may
 * include source files, build scripts and documentation.
 *
 * "Reserved Font Name" refers to any names specified as such after the
 * copyright statement(s).
 *
 * "Original Version" refers to the collection of Font Software components as
 * distributed by the Copyright Holder(s).
 *
 * "Modified Version" refers to any derivative made by adding to, deleting,
 * or substituting -- in part or in whole -- any of the components of the
 * Original Version, by changing formats or by porting the Font Software to a
 * new environment.
 *
 * "Author" refers to any designer, engineer, programmer, technical
 * writer or other person who contributed to the Font Software.
 *
 * PERMISSION & CONDITIONS
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of the Font Software, to use, study, copy, merge, embed, modify,
 * redistribute, and sell modified and unmodified copies of the Font
 * Software, subject to the following conditions:
 *
 * 1) Neither the Font Software nor any of its individual components,
 * in Original or Modified Versions, may be sold by itself.
 *
 * 2) Original or Modified Versions of the Font Software may be bundled,
 * redistributed and/or sold with any software, provided that each copy
 * contains the above copyright notice and this license. These can be
 * included either as stand-alone text files, human-readable headers or
 * in the appropriate machine-readable metadata fields within text or
 * binary files as long as those fields can be easily viewed by the user.
 *
 * 3) No Modified Version of the Font Software may use the Reserved Font
 * Name(s) unless explicit written permission is granted by the corresponding
 * Copyright Holder. This restriction only applies to the primary font name as
 * presented to the users.
 *
 * 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
 * Software shall not be used to promote, endorse or advertise any
 * Modified Version, except to acknowledge the contribution(s) of the
 * Copyright Holder(s) and the Author(s) or with their explicit written
 * permission.
 *
 * 5) The Font Software, modified or unmodified, in part or in whole,
 * must be distributed entirely under this license, and must not be
 * distributed under any other license. The requirement for fonts to
 * remain under this license does not apply to any document created
 * using the Font Software.
 *
 * TERMINATION
 * This license becomes null and void if any of the above conditions are
 * not met.
 *
 * DISCLAIMER
 * THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
 * OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
 * DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
 * OTHER DEALINGS IN THE FONT SOFTWARE.
 */

PK)J[��I���`share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfnu�[����pBASEe]���FDSIG�GDEF�����GPOS���\GSUB�]dJOS/2���x`cmapspB3fglyf��M�Q.head��:�6hhea3�4$hmtx���Bloca'`ӄA�BmaxpTaX nameܝ���post+����9	�K�4_<���
��sK�?�:$��X�?�? �*eX��XK�X^2#	 �8ADBO@ ����`��� X> cAWr�5O_Qb�HR0f0dC*O+
6&AQ]P<DgH]Z7jJ:]<]<�GEM3@1G                       ������cAAAAAWWWWrrrrrrrrsrrrrrrrrr555555555OOOO
____________Qbbb|���7�
�HHHRRRRRRRR000000000000000000000000$$!dddddddCCCCCCCCN******OOOOOOOOOOOOOOOOOOOOOOO+



&&&&&&&&AAAAAAe;UpDYQQQQQQQQQQQQQQIQQQQQQQQ]PPPPP6<<<<DDDDDDDDDDDDDDDDDDHHHHHHHH��]]']ZZZZZZZZZZZZ7jjjjJJJJJJJ#:::]]]]]]]]��<<<<<<<<<<<<5<<<<<<<<<<<<<�f����@GGGGGGGGXgEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM311111111GGGGGG<]]7]��P^]]=P<<?<sE[>=7<<N3<M]]]ZV8JJJO�**:��]`<!,???��ccG886E2M319GG;0GYGRT<R<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<ccccccccccccccZcZc8cccccccc-��cc c�+rAO0_b+HRF0OfK*&6,&$_(&9]0A[t]HQd8T/\@]<BO,85"Z]O,%9[]QQ@OO"QOd>[�D����	�������	������������������� cc�r>NNfHO0OfA*/6OA(&7b.,rr�BC__Q��'fN/K0&�<>fOA&&6A[_ ��r;N00//QKh�*D>ddn@]<]]PB1 @^X::#F}=,7DD�PGZZ7��:nd1g)<F�H>n!]P33@X]JQDEd<<11<<Uccc*GaE9'8MFDCGaGaE9'8NFDCGaGaE9'8MFDCGa���� ��my����^f�f���R`UUUPP������u���u�u�<<>�f�z�bxcccT[H�]W^t�b�b�b�b�bp��11Wh���U�����������������������������������������������������������������������F���������4����������������=:UM5:q1`N.*m*T=`l-77*E0SUUfU�UUxkUUUoULLUU`U�����TL�	�>+& FOF4t!!`QVg!!��U<J>WII!>>>>>>**��D3���M				������-<��`1�������������������������5�����	��{�����������������������kj���������#��������������	�����o�����{�?�f�������������5Y����������������������������!!������������������������������������������������������������KK�������������������������������������������,����
,,M49cS-����$�,$
��	����Rkl���������mnopqrstuv�������	

������ !"#$%&'()*+,-./012345����:=R^���
*)+-KJLNipoqsr������VS����������M�����T������&(u�����W�����o69�������������hU������l8_7a]��~������U�������������/9@Z`z~�������������7C\ghnv{~������������������ *,14=E_auz~���������������/_cu��������������CIMPRX[���!+;IScgo���������    " & 0 3 5 : ? D I q y  � � � � � � � � � � � � �!!!! !"!&!.!^!�!�!�!�""""""""")"+"7"H"a"e###!%�%�%�%�%�%�%�%�%�%�&&&<&@&B&`&c&f&k''R'd'�..%������ 0:A[a{�������������7CP^hjox}������������������#,.49@_atz~���������������0br��������������CGMORV[��� $2>RXfl~��������      & / 2 5 9 < D G p t } � � � � � � � � � � � � �!!!! !"!&!.!P!�!�!�!�""""""""")"+"7"H"`"d###%%�%�%�%�%�%�%�%�%�&&&:&@&B&`&c&e&j''R'd'�.."������=������oY���
�����������������x�p�o�%$#$	��;�:�.������������������������������-�i��o�d�c�j�$�~�|�y���������������z�z��������T�i�p�l�G�%����s������޺�ޚޙ�r�m�cݹ�j�q�վջ%y%l������������������������"",028>HNPZ\^bfprxzz||xz�����������������������������������������Rkl��������������������������o�VSQT����&���������������(�mno�6789:=MR]^_a~������������������
)*+-JKLN�iopqrs���������;<	@
S T!V#U"W$[(b.c/d1e0`,p<q=r>s?xC}I�M�O�T�Q�U��V�WZ�[�]�\�b�a�f�j�hn���t��u����������������������������������������������Ww����?�P�v����������Ot@�wo;�g>N�����������������������������2:?A��������H4;@I��	
 "-./02467�C#JE��v�wxy|~�z}�������������������JKLMNOPQRS	T
UVW
XYZ[\]^_`abcd*,-358<=QX%Y&Z'n:uAzEyD{G|H�X�Y�^�_�`�c�d�e�k�l�m������������������������������������F�ABCDEFGHIJKLf2g3h4i5j6k7l8m9�R�S�x�y�z�{�|�}�~����������������������������������������������������������������l��������1��6gY]Uebck�x}~pqrstuvwyz{|����������������������������������������������������������$�  !!�""�##�$$R%%k&&l''�()�**�++�,,�--�..�//�09m:;�<<�==�>>�??�@@�AZ[[�\\�]]�^^�__�``�az{{�||�}}�~~���o�����V��S��Q��T��������������&��������������������������������������������(�����m�����6��=��M��R��]��a��~�������������������������������������
������)��-��J��N�����i��o���������������������;<	@
S T		!

V#U

"W$[(b.c/d1e0`,p<q=  r!!>""s##?$$x%%C&&}''I((�))M**�++O,,�--T..�//Q00�11U2233�44�55V66�77W88Z99�::[;;�<<]==�>>\??�@@bAA�BBaCC�DDfEE�FFjGG�HHhIInJJ�KK�LL�MMtNN�OOPP�QQuRR�SS�TT�UU�VV�WW�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�dd�ee�ff�gg�hh�ii�jj�kk�ll�mm�nn�oo�pp�qq�rr�ss�tt�uu�vv�ww�xx�yy�zz�{{�||�}}�~~������\�����W��w����������������?�������P�����v��������������������������������O����t��@�����w��o��;�����g��>����N������������77�CCPPP�QQ�RX�Y\�^g�hh�jj�kn�ov�x{�}~����������������������������0��2��:��?��A�����������������������������������������H��4��;��@��I��	
		

 " $#&-''2((4)*6,,8.1944=9=>@@�AABBCCC#DDJEEE__FaaGtu�zz�~~���������v�����w��{��|��~�����^��o��z��}������������������������������������������������/�0_bb�ccJrrssKttuuL����M����N����O����P����Q����R����S��	��T��
��U����V����W��
��X����Y����Z��[����\����]����^����_����`����a����b����c����dCC)GG*HI,MM/OO3PP5RR7VV8WX<[[>��+��.��BQX

%Y&Z'n:  u!!A$$z%%E&&y''D(({))G**|++H22�33X44�55Y66�77^88�99_::�;;`>>�??c@@�AAdBB�CCeDD�EEkFF�GGlHH�IImRR�SS�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�ff�gg�ll�mm�nn�oo�~~����������������������������������������������F��������A����B����C����D����E����F����G����H����I����J����K����L����f��2��g��3��h��4��i��5��j��6��k��7��l��8��m��9�����R�����S�����x�����y�����z�����{�����|�����}�����~���������������������������������������������������������������������������������������������������������������������������������������������  p  �  �  �  �  �  �  �  �  �  �  �   !� " "� & &� / / 0 0l 2 3� 5 5� 9 :� < <� = =� > ?� D Dh G G� H H� I I� p p� q q1 t y� } ~�  6 � �� � � � �F � �X � �g � �Y � �Z � �\ � �] � �U � �d � �^ � �` � �e � �b � �f!!�!!�!!k!!�! ! �!"!"�!&!&�!.!.�!P!Px!Q!R}!S!Zp![!^y!�!�!�!��!�!��!�!��!�!��!�!��""�""�""�""�""�""�""�""i""�""�""�""�")")�"+"+�"7"7�"H"H�"`"`�"a"a�"d"e�##�##�##�# #!�%%�s%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��&&�&&�&:&;�&<&<�&@&@�&B&B�&`&`�&c&c�&e&e�&f&f�&j&k�''�'R'R�'d'd�'�'��..�.".%����������������������**M�����'>St����<x���4q���Bq���g�����*V���Ac���$/:EP[fq|��			!	,	7	B	M	[	f	q	|	�	�	�	�	�


"
-
8
C
N
Y
d
o
z
�
�
�
�
�
�
�
�
�:EP[fq|�����������?JU`lw���������
#
.
9
D
O
Z
e
p
{
�
�
�
�
�
�
�
�
�
�(3>IT_ju�������'2=K�������	;FQ\gr����������)4?JUp{���������"-8CNY�����������'2=HS^it����Hj����������Ze�������
 +6D����
#.9u��������	mx������������
 +6BNYdp{���������	.9DOZs~��������$/:EP[f���������>IT_ju�������[f�������
 +6ALWb������
<GR]hs~�������    & Z e p { � � � � � � � � � � � �!!!!!,!7!B!M!X!c!�!�""6"y"�"�#+#^#�#�$$]$�$�%	%%F%�%�%�&&?&�&�''E'�'�'�(!()(4(I(T(n(z(�(�)))N)�)�)�*)*P*�*�*�++7+g+�+�+�+�,N,z,�,�,�-(-a-�-�-�..2.[.�.�/+/o/�/�0	060c0�0�0�0�1111"1-181C1N1�1�1�1�1�1�1�1�2222!2,2:2�2�2�2�2�2�2�2�2�2�2�33
33#3.393D3O3Z3e3p3{3�3�3�3�44H4Z4e4q4|4�4�4�4�4�4�5585@5H5W5w55�5�5�5�5�5�5�5�66!636;6S6[6c6�6�6�6�7%7B7`7}7�7�7�7�88c8�8�9$9d9�9�9�::O:v:�:�;%;Q;�;�;�<<D<~<�<�==P=�=�=�>(>3>>>I>T>_>j>u>�>�>�>�>�??D?\?�?�?�?�?�?�?�?�?�?�@@@@#@+@3@;@C@K@S@[@c@k@s@{@�@�@�@�@�@�AA3ATA�A�A�A�A�BB6B>B�B�B�B�CCGCOCWC_CgCoCwCC�C�C�C�DD4DPDtD�D�D�EEDELETE�E�E�E�E�E�E�F$FNFqF|F�F�F�F�GG/GAGYG�G�HHDHaH�H�H�H�II<IDIOIZIbImIuI�I�I�I�I�I�I�J(J7J`JhJ�J�KKK8K_K�K�K�K�K�K�K�K�LBLJLaL�L�L�L�L�MMEMsM�M�M�M�M�N!N)N1N9NAN}N�N�N�N�N�N�O	OO<ONOeO�O�PP8PRP�P�P�P�Q Q(Q3Q;QFQNQYQaQlQwQQ�Q�Q�Q�Q�Q�RRRkR�SSSBS�S�S�TT3T�T�T�UUCUZU�U�U�VV!V<VDV�V�V�V�WW@W~W�W�XX1X�X�X�Y	YY?YKYWY�Y�Y�ZZ>ZOZZZzZ�Z�Z�Z�Z�Z�Z�[[[[%[-[5[A[M[Y[a[j[�[�[�[�[�[�\\\.\D\U\k\�\�\�\�\�\�\�]]!]2]s]�]�]�]�]�^^)^O^�^�^�^�_L_�_�`/`m`|`�`�`�`�`�`�`�aaama�bb2b�b�c#cScqc}c�c�c�c�c�dddd#d,d5d>dGdPdYdbdkd�d�d�ee!eMe�e�e�f#f?f\frf�f�f�f�g$g<gjg�g�g�h7hRhmh�h�h�h�h�h�h�h�h�h�h�h�iiii i(i0i8ipi�i�i�j0jSj�j�j�k#k<kZk�k�k�l	l;lZl�l�l�l�m mLmzm�m�nnLn~n�n�oo@o�o�o�o�o�o�ppVp�p�qq>qyq�rr\r�r�ssWs�s�ttDtzt�t�t�uuu!u)u9u�u�u�u�u�u�vvv&v6vFvVvfvvv�v�v�v�v�ww w-wFwsw|w�w�w�w�w�w�xx$xDxlxwx�x�x�x�yy<yLyWygyoy�y�zzz>zFzNzqz�z�z�z�{{Y{�{�{�{�{�||3|N|h|�|�|�|�}}$}H}d}�}�}�}�}�}�~~~-~>~U~f~}~�~�~�5m�����e�z���'�����@���(�h����;�\�y���������Ą���*�2�:�B�J�Y�a�i�q������������������dž����������Ɇ׆��%�K�X�e�m�u�����Ї���A�f�����ʈ���A�V�k��������̉��(�B�b�j�z�������͊݊��
���(�B�]�z�����݋���
���(�O�h�x�����Ќ،��	�$�P�|���Վ�.�r���Ɏ��-�G�a�{�������C�k�����ّ�>�{���ܒ��+�N�q�������0�j�j�j�j�j�w���������͓��!�>�]�{���������͔ݔ����.�=�M�]�m�|�������Ε����1�D�Y�n���������і���!�7�L�_�r�������×ח���0�H�`�y�����Řߘ���+�C�\�t�������řٙ���*�C�X�m�������Țݚ��#�<�[�s�����›ٛ���)�H�j�����Ҝ��"�2�C�g�t�����������ÝН����&�2�?�L�Y�f�s�������������Ξ۞����(���ͦۦ����'�8�I�W�m�~�~�~�����ŧ��)�L�T�a�t����>�	3!%!''#7'377#>��I46u���1B�Ba��l:�ggP��^ww��� 8�	3'&&'#3#'#��! ��^�X>�?odd7m99m�Z��p��c#�"332#32654&##32654&##c�Ce98;HP�nvYTIML]jT][Vj� F:1ONDa_|675,��;C=5A��*�"&&546632&&#"3267_Q�LL�U;\/B)?]44]?-H/'cQ�kj�R0 5!AvRRyB&#3-2W)�332#'32654&##W�����SIqooqI�����D�||�r�3!!!!!r�����L�F�G�G��	3!!!!�������F�F��5���"&&546632&&#"3275#53QR�IK�UAX/?/=\3iaI)��eQ�kj�R35"AvR|�'�E��-O	�33!3#!OTTT������p5��_��353#5!#3_�����GFF��GQ����"&'73265!5!7j"4K&GA��f)^583,+KQrF�A=e<bD�3333#bT_��^�q���I��iX����33!�RE���GH�33373#4667##'#Hf\ ]fP%^<\&���jj�pH WU����UW ��R�333&&53#'#R\�?	P\�?	��d�1k4T�p��2h3��0��(�"&&546632'2654&#",Jr@@rJJr@@rJK[[KK[[R�lj�PP�jl�RI�~|��|~�f�332##32654&##f�Im==nHsiVSTUi�$UHEZ,��HAFG70�]+�&%2654&#""&'&&5466323267,K[[KK[[Wn_u@rJJr@p\J3	%9��|��|���XB��j�PP�j��+*Cd)�332##32654&##d�Cg;PC�_�umMQQMm�#QDL]����Y?@A4C���-"&'732654&&''.546632&&#"1Hz,2%c8DK5"^!A,7a?>h$, N39F#6\)A'8h5,:%-:.#*)
*B02O--$6!4,((-A14U2*.�!#5!#��JFF��O��	�"&&53326653-@e9T$?'(>%Q9c4r^��fDQ$$QD��h^r4+-�
3336673��XjiU����:e::e:b�p
N�%333>7733>73#&&'#nd^0

@P>
	.Z`h@
@��d-/!!/,��,/!!/,��o::��6"�33366773#'&&'#6ķ\\
ZX��\c

bS=�,,������33�&2�!53366773�Xc$&_V����%L((L&�Z�A�	35!5!!An�����t2F2��GQ���'"&&54667.#"'6632#'#'2675�-K-G�}8//Y" %s@daC(d)S)hw1A!>+7I,
!7"%8.m[��B/B&"�!1 )%]���!"&'##336632'2654&#"@#Q#BR!W+bh>dG@T@I I&#G#6��^"(�qSv>EgZPc#&�P���"&&546632&&#"3267ZLxFJ|I;X)A&8U0/T8-K%(c<rPRr<*5/U87T/$5$(<����!"&5466323'53#'#'275&&#"_t?e9,FRDSHA!? *E)L�yOs>!Z��8@-EI�/S8WcD���"!&&"&&546632!3267><^6N2IwFFqAiu��iL,G!$]�MHKJ�C<sQOr=}g
RT6"gB�3#5754632&&#"3#�`dHD3 A:���>)Yl>	D;,C�]H� 6�0<L"&5475&&54675&&5466323##"&'3322654&#"2654&##"&'(jvP#5W3)�~2U5+50m^[ByX/AA/.BB9Ub78_%"Q�G@>.&1@+5N+C44K(		4>-N/�?43??34?��<%#)&-]�3336632#4&#"]R&W9VRR4<+D+��s)6d`��#EC,,����Z��&U
0��7�'��&�
0j>�3333#'jR^��\�s����q�J���"&5#53327�MS��5++0"8YV�C��50=:.�!33366326632#4#"#4&#":B2*G3*39R4!L%�@"*T'-MI��VU%&��V*+%&��]�3336632#4&#"]D&X9VRR4<+D+�S)6d`��#EC,,��<���"&&546632'2654&#",@mCCm@@mCCm@FUUFFUU<rPRr<<rRPr<DgSThhTSg]�3�!336632#"&'#2654&#"]D"Y-bg>d;"O �AU@I I&#F��> *�qRv>!\�gZPc#&�<�3��!57##"&546632373275&&#"�Q-^t?e9,H"B�HA!? *E)LͱZ+�yOs>" 6�MI�/S8Wc��3336632&&#"�D&pC/$7e,�s;D	G	?L��G���("&'732654&&'&&54632&&#"6G|,&*fC>=AB^`fd8h$("R/>2CJQW!2`-6$-
C7;O%5*"*6%'B(E��"�"&&55#57733#3267�GR#��D��5F#8!I3Z<�>��C�AD
<M����"&5332673#'#�WRS3=*E(RC%Xd`.��EC+/Q�U+63%�
!336673�Sp

pO���%G##G%�P�3336677336673#'&'#rjR:<R:	:Lhj86��"A##A"��"A##A"��3]]3�@�37'3366773#'&&'#@��[M

IW��ZU!P��k+,i�p.+p1�/'�"'732677336673�$
3@�Sw
jN�6O�
A;-$�� J##I!
��0L-G�	35!5!!GM�����W,wC,��C�� 8c&��� 8c&��� 8F&�� 8I&�� 80&�� 8&�� 8J&�� 8p& 8�
+"&54773'&&'#3#'#2654&#",*7%�%O%8m�! ��^�X>�?��2(0i2*.!(2��dd7m99m�Z��p����� 8M& �_�	%3'&&'#"&54667#'##33267��! 
+<(>�?U�^�&5 	.odd7m99m�y-.3'
����p>%
+�� �)8�&-�� 8h&�� 8x&T�� 8x&V�� 8�&X�� 8�&Z�� �)8F&&-�� 8�&\�� 8�&^�� 8�&`�� 8�&b�� �)8J&&-��O�3#!#3#3!5#�.�+�?�����IywL6j�R�F�G�G������Oc&M�x����O&Mx)�!*35#5732#'32654&##3#532654&##iOO�Ce98;HP�nvjT][Vj��YTIML]�8� F:1ONDa_F;C=5V>�675,��c�V#�&<��A�*�&32��A��*c&�.��A��*F&.��A��*M&.��A��*;&.��W)M&��W�))�&-���W�V)�&<���W�)�&3���)��7�3&&546632#'32654&'�9:'%(3;8oR���zRVZcSP70::XEAd:����D��z���rc&���rc&���rF&��rM&��r0&��r&��rJ&��r;&s�)� "&5467!!!!!!#3267�,;5!�������K0"
-�-.-F�F�G�G#2
+��r�)�&-!��rh&��rI&��r*x&T��rx&V��r�&X��r�&Z��r�)F&&-!��r�&f��5��c&���5��F&��5��J&��5��;&��5��&0��5��M&��5��&��5��I&5��M$1&&#"3275#53#"&&546632&54632&&#"
/?/=\3iaI)��e@R�IK�U'>1L5"AvR|�'�E��-Q�kj�R/:?'��O	F&	��O	0&	��O�)	�&	-���	�&	3�N��O�	�&	9
N�3#5753!533##!!5!OEETTEET�����8nnnn>�5��}g��_�c&
���_�c&
���_�F&
��_�I&
��_�0&
��_�&
��_�;&
��_�M&
_���"&5467#53#5!#3#32677+<.�������&$"	-�-.*DGFF��G<
+��_�h&
��_�)��&
-��_�J&
��Q���F&��b�D�&0&��b�)D�&-&��b�VD�&<&��|c&
�����&
|�����&
01����)�&
-1��7�)&
&�-1����V�&
<1
�
35'737!�_|R��E�45Bd��q5��G����&

����Hc&���H;&��H�)�&-��Rc&�
��Rc&�
��RM&
��RI&
��R��&0��R;&
��R�)�&-��R�V�&<��0��(c&���0��(c&���0��(F&��0��(I&��0��(0&��0��(&��0��(l&��0��(J&��0��(M&0�(�!-"&5467.54663232672654&#">,;+Mk6@rJJr@^W.."
-/K[[KK[[�-.(<\�^i�QQ�i��%@
+��|��|����0�)(�&-��0��(h&��0��(x&T��0��(x&V��0��(�&X��0��(�&Z��0�)(F&&-0��2-'"&&546632654'7'2654&#",Jr@@rJ>1NA80,2@rJK[[KK[[R�lj�PF*3?+�]l�RI�~|��|~���0��2c&����0��2c&����0��2h&���0��2I&����0�)2-&�-��0��(�&f$��0�'77&&5466327#"'&#"2654'$C@rJWA48@@rJYA6*�,>K[�K[�+b+tFj�P9M$^*rGl�R<PkW?l2��v�~Y<��6��$��0c&��!O�!"&5463!#3#3%3#"(|��|”���UUU����F�G�GD�}}���d)c&���d)M&��d);&��d�)�&0��d�))�&-��d�))&&-��d�V)�&<��C��c&���C��F&��C��M&��C���&h��C��&3��C��&0
��C��;&��C�)�&-
N��9�&"&'732654&&''7&&#"#4632�1T(6#.5JE|?+@OTziSgycL+P'"5>/ 7+
6�)([_�c�n�TF�bD3Q/��*.M&��*�.�&3��*�.�&0��*�).�&-��*�V.�&<*.�!#5735#5!#3#�Z4�؎�2:�FF�>����O��	c&���O��	c&���O��	F&��O��	I&��O��	0&��O��	&��O��	J&��O��	p&��O��	l&��O��	M&O�	�%"&5467&&533266533267>,;/]nTN;(?%QFD;-"
-�-.+>~���ffS$QD��hjs>
+��O��	�&P��O��	�&I��O��	�&R��O��	�&L��O�)	�&-��O��	h&O��v9!"&&533266536654'7-@e9T$?'(>%!)+A?.9c4r^��fDQ$$QD�$*):8��^r4��O��vc&����O��vc&����O��vh&���O��vI&���O�)v9&�-��+�)-�&-��
Nc&���
Nc&���
NF&��
N0&��&2c&���&2c&���&2F&��&20&��&2;&��&�)2�&-��&2h&��&2I&��Ac&���AM&��A;&��AF&��A�)�&-
��A�V�&<
)�3#5732#'32654&##3#WKK�����SIpoopI��:8����D�||��>e!�3332##532654&##eTvIl==mHvkVTUUk�n%THEZ,��AFG6;��&� "&&5447!&&#"'6632'267!,Im;�VP(C(W:No<?qJEY��ST�fv� 9 )R�ii�THsoqqU��%�!"&'7326654&&#"#36632z*	+%B-%RSQ W0>b8)LK/uhcq06(��M%4@�{~�Ep�[��33"&'732653pS�%
&S?��p�B4,��mJXD*�333"&5463233DL�!--!!//EL����G-''++''-�����G��Y�[9c&'��n����Q��	&���Q��	&���Q���&��Q���&��Q���&��Q���&��Q���&	��Q���&Q��K
*5A"&5477"&&54667.#"'6632#'#'26752654&#"@4:/�#I%):~-K-G�}8//Y" %s@daC(d)S)hw1A^!!!!98(6a2#3"(8��!>+7I,
!7"%8.m[��B/B&"�!1 )%("!!"��Q���&Q�%�.9"&5467'##"&&54667.#"'663232672675�+<8'(d4-K-G�}8//Y" %s@da6/%	/�)S)hw1A�./-D=/!>+7I,
!7"%8.m[��=	'&"�!1 )%��Q�)�&-��Q���&��Q��+&S��I��&U��Q��&W��Q��#&Y��Q�)�&&-��Q��@&[��Q��@&]��Q��P&_��Q��"&a��Q�)�&&	-��U�3@"3&"&'#"&5467&&#"'66326632!3267%3267&55�%A�H3K#P,7Iu�0&=O+,>K(3B ��@90A�q)!>CL�DQ��C.)).G=J\G98 /55/=e<
LY
8�#'#"6A
"/����U	&�����U�&���)"&'###57533#36632'2654&#"@#Q#BIIR��!W+bh>dG@T@I I&#G#62;VV@C["(�lPq<EbUL]#&���]�V�&<
��P��&2.��P��	&�.��P���&.��P���&.��P���&
.6��k0!&"&5466323'53#'#'275&&#"3�Zn;`7)BO@NA@ :(B'HUJ�yOs>"Z��8@.EI�/S8Wc�Q���<�)��&-��<�V��&<��<���&2�<��D�)"&5466323'5#53533#'#'275&&#"_t?e9,F��RIIDSHA!?*F)LuLn<"Z9@VV:��@-EI�-O4R^��D��	& ���D��	& ���D���& ��D���& ��D���& ��D���& ��D���& 	D��3"!&&"&5467#"&&546632!32673267><^6N*-:+! IwFFqAiu��iL,G!3=$
/�MHKJ�n./(?	<rPPs=}g
RT6$5/	'��D���& 
��D�)�& -��D���& ��D���& ��D��'& S��D��& U��D��& W��D��#& Y��D�)�& &-��D��K& e��H� 6	&"���H� 6�&"��H� 6�&"	��H� 6�&"
��H� 6�&"1��H� 6�&"��H� 6�&"��H� 6�&"�����&#�W<����l&#�W<��]�)�&#-��]�V�&#<��'��&#2�Z��]��&#9�3#57533#36632#4&#"]IIR��&W9VRR4<+D+2:VV@@s)6d`��EC,,����Z�	&U�0��Z�	&U�0��Z��&U0��Z	�&U0��Z��&U0��Z��&U0��Z��&U0��Z���&M
0��Z��&U0��Z�)��&$-0��Z��&U	0Z��!#5!<�4�C���7�'��&�0��j�>�&&0#��j�)>�&&-#��j�V>�&&<#j>�337%3#'jR^��\�s������n���J���&'��<��J��0&'���J��&'0U��J�)�&'-U��J�)T&'&�<-U��J�V�&'<UJ���"&55'75#537327�MSl�����5++0"8YV�@6P�C��T6d�50=��#��{�&'�

���:.	&(���:.�&(
��:�).�&(-��]	&)���]	&)���]�&)��]�&)��]��&)0
��]�&)
��]�)�&)-
��]�V�&)<
��V�&3336632#4&#"'667#"&54632�D#P5OLS.4'='��/6(* (2L�L%3a]��)B@)(��^0P4(#+@9Kv��<��	&*���<��	&*���<���&*��<���&*��<���&*��<���&*��<���&*��<���&*<��"."&5467.54663232672654&#"D+:*Bi<Cm@@mC+L4(-$	/7FUUFFUU�./'=?pKRr<<rRC]>@
'gTThhTTg��<�)�&*-��<���&*��<��&*S��5��&*U��<��&*W��<��#&*Y��<�)�&*&-��<���&*	��<��K&*e<��/�)"&&5466326654&'7'2654&#",@mCCm@7.)-@?,(0Cm@FUUFFUU<rPRr<	/+*:A gDPr<DgSThhTSg��<��/	&����<��/	&����<��/�&���<��/�&����<�)/�&�-<��(7&#"'7&&5466327#"'72654'��&6FU%.5Cm@O=4.5Cm@O=�FU�/�<.!j��*> T4Rr<+=*>V5Pr<+iS?,����<��	&����U�772654&#""3&"&&5466326632#3267#"&'�,44,1333'6���1N-.N1.BH.0@ �A1)=#1NB8hSShgUSgyKJ��C<rPRr<:>>:=e<
SR
88==8���	&-�.��f��&-0�����&-.����&-
.����)�&--�����)�&-&.-���@�V�&-<���G��	&.���G���&.��G���&.��G��-&.g��G��&.2��G��&.0	��G���&.
��G�)�&.-	X��4�3"&'732654.54>54&#"#4632�*F !4*-)<<)$-)7?Rk^5I&$)<;)(I:/#*"2*"2+0 %1LJ�\q)C(%6+*$%:/*C(gB�3#5754632&&#"�`dHD3 A:�>)Yl>	D;����E��"0&/���E�"�&/2Y��E�"�&/0O��E�)"�&/-O��E�V"�&/<O��E��"C&/���E��"� "&&55#575#57733#3#3267�GR#����D����5F#8!I3Z<:�>��C�@ AD
<��M���	&0����M���	&0����M����&0���M����&0���M����&0���M����&0���M����&0	���M����&0���M����&0���M����&0�M��&"&5467'##"&53326733267�+<8'%X8WRS3=*E(R6/%	/�./+AU+6d`.��EC+/Q�:	'��M���&0O���M���L&0H���M���H&0Q���M���L&0K���M�)��&0-��M����&0�M��V�!"&53326736654&'7#'#�WRS3=*E($2@:#C%Xd`.��EC+/Q*1+:;�7U+6��M��V	&�����M��V	&�����M��V�&����M��V�&����M�)V�&�-��3�)%�&1-��P	&2���P	&2���P�&2��P�&2��1�/'	&4���1�/'	&4���1�/'�&4��1�/'�&4��1�/'�&4
��1�-'�&4-���1�/'�&4��1�/'�&4��G	&5���G�&5��G�&5
��G�&5��G�)�&5-��G�V�&5<<���17326544'&&#""&&546632&&''7&&'77�,J-PM#R'PS�?mB;gB/T
:,��: &&I!�v?M:k�2K)oW
/&\��9iHDe8*&Bd'N4B 4)F2==�wPyD]�3�"336632#"&'#2654&#"]R"U+bi?d:$L �@VAI H&#F���W"(�qRv>#\�gZPc#&�]�I� "&'732654&#"#336632�(&4<+D+RD&X9VR?�	?7/1EC,,���S)6d`��N[7�'��"&'73265#5!�&H9I2�4%X�=
F>�C�<\5]�'�+33"&54632"&'732653"&54632pR(##""�$


%R<##""�J    ��>3,��JX#    ����l�/"&5#533267"&54632"&5#533267�@Ck�$#(!--!!//�?Cl�$#YV�C��50>-''++''-��YV�C��50>P�'N	33"&'732653'7'7pR�$


%R<��+�:�+�:��>3,��JX)�8�)�8^���%"&53366323267'>54&#"$dbD(d3.K-��8F0Y" %s�hw1A**R)m[*B . >,RU2I%8.�	 1 )%%#]��� "&'##336632'2654&#"@$P#BDZ1bg>dH@UAI$J #E#6�@-�qSv>EfXSc%$�]���+"&'##4632&#"36632'2654&#"A$Q#BY[0!!62!W+bh>dG?UAH J%#G#6Sh?>8z"(�oRt=EeXOa#&�=���"&'7326654&&#"'66328e'%M-8S/.O4+G*_BFtGFw($5$/T78U/5*<rRPr<P���
1%"32654&'667&&546632&&#"6632#"'�H"&.78��C,4JyF>Z(E*5U1/g/:>YYC:�,' � < eBRr<(30V9,G486-4H9<�P_� -"&57##"&5466323'533267%275&&#"">;R-^s?d9,ES

 ��F@!@)D(L�I@d+�yOs>"Z��#)/?�I�/S8Wc<��b� -"&5466323'54632&&#"#'#'275&&#"
^s>d9+F@B	!DSFA!@ (D(K�yOs>!Z8DM?2*��@-EI�/S8Wc?��� "!&&"&'73267!&&546632">U6
WP:]$"H+Kj��:iE@kAGv�JKHM�C"6TR	
Ef9>rPOr=<���� "&546632373#'#'275&&#"^t>f:+H"BDTHA!? *E)L�yOs>" 6�@-EI�/S8Wc��s&�E��� "&&5467!&&#"'6632'267!)If5}^J+I!%]:Jp?@mEAW��P<kE
	OP6"=qPQs<BOMMO��m�(2"&&'%&&#"'663273267#"&'74&'326�=T-1D+&8 K1DdI+
6
52[?�@,9D8_:�818GD 9"
+	(6!Gq@�h<5][���)"&54675&&546632&&#"33#"3267>e~B0)06_==a'!#K2@D�5CLRRL1S$$.iMF48
8$,:"6%&J@%)+- 6(��>���!=���+"&&546632'2654&##532654&#"GLxFIwD6W2+),Ar_=BG6#4:;13Q0c9qSUr::-$:
;4FLB-*('@("&%.U=\_7�'4�"&'732655#575#5!3#�&H9I2���4��%X�=
F>�<�C�B�<\5<�(cu*7"&'732677##"&5466323'4632&#"275&&#"/`)%O%FHQ-^s?e9+F@C
!xaEA!@)D(L�:F:a)�sLo="0AQ?2*�Zf!I� .P4R`<�'�� -"&'732677##"&&546632373275&&#"/b(&P%FLS->_5>e;+J BwdFC!@ )E*M�;G:a);nLLo=#6�[k"I�.P4R`N���!"&&546632&&#"32675#53SHwFIzGAU)?/2U3/R4!9��a;rRPr=*4"-T=;U-p;�(3� %�%"&5467336673'2654&'#.7=#�TqpP�#<8�B4#G4���"7""7"
�N4G#4B9";""="<���#/"&5467&&#"'66326632&#"'2654&',UeH92-)K('M(-28IdV29</.=:ZO8f0"!<-**-<!"0f8OZD:-,Q((Q,-:M�3��57#"&5332673�'X9VRR4<,C+Rͮr(7d`.��EC-+S�M]�34632&#"36632#4&#"]Y[0!!62&W9VRR4<+D+Sh?>8�(7da��EB+,��]�I�+"&'732654&#"#4632&#"36632�((4<+D+RY[0" 62&W9VR?�	?7/*EB+,��Sh?>8�(7da��N[��]��'��Z4�&O
0V�353#5!#3V�����C`CC��C��8���&Q
0�3��##73753���c�U�rR����i��M��J���&'=���J���	)354&#""&55#"&546325#533#327�!#&
	MSTH3'(
����5++0"8n)&��YV�<.&0�C��@�50=J�I�"&5#533267�MR��4+,!:�YV�C�*5/
>O�';�#33!6#"&'7326654&#"'!OR��E_1=a7K` )J7&=%F>"����,�2Y7Fb304%%C->F,�]��33!�R.�]C*���!#'##"'#"&53326733267B2*G3*39R4!L$�@"*T'-MI\��U&%`��*+&%`*�3�"57##"'#"&533267332673�1*G3*39R4!L$Rͬd%*T'-MI\��U&%`��*+&%`�M:�I.�-"&'732654#"#4&#"#3366326632�# 4!L%RB2*G3*39:�?0(rU%&��V*+%&���@"*T'-MI��FQ���I� "&'73265336632#4&#"8
D&W7VQR49+C*8�?/)S)6d`��#GA,,��HS]�Im� "&54&#"#33663232670C84:+B+RD&V7VR

 �SH?GA,,���S)6d`��)/?`��333&&553#&&'#`O�$NO�%��;/['�:/['�<���"&&546632"!&&267!,@nBBn@AmBBmA?U>
V?DW��X9rSUq::qUSr9�OGGO��XOOX!��K�%"&&5466323#3#3#'267&&#"�8]88]8-񾙙�.##5JJ:rSTq:D�@�DC_\_a[,�3,�#5.54667534&'66:b<<b:P:b<<b:�K99KXK99K��<oNNn<��<nNNo<��UataTTa��a?����#'##"&'73267�D&oD.$7f+�s:E	G	?L?����"&'732673#'#�.$7f+RD&o	G	?L��8s:E?�I�"&55##"&'7326733267�I=K1+%IR&.�SKu08	G	5B1�50	>��I�"&&5336632&&#"3267MFR#D&pC/$7e,5F#8!H�3Z<�s;D	G	?L��AD
<��354632&&#"��uQ700S3�y�G(UD�c!�332#'#532654&##c�5S0H3�]���7==7��?6?Gľ��++,$c!�732654&#73##33��7==7]�3H0S5�S��%+++��G?5@�G�I�7"&'3267#"&55732654&&'&&54632&&#"6-T$$
	$C;&*fC>=AB^`fd8h$("R/>2CJQW!2`5'0=SOU6$-
C7;O%5*"*6%'B(8�'�"&'732654632&&#"�(>/3 LZ$4&7&F�=
B77Xd=B7��Xc8�'�#"&'732655#5754632&&#"3#�(>/3 ��LZ$4&7&��F�=
B7�:�Xd=B7�@�Xc6�d�23#5#5354&#"'66�GR#��D��4G"9!I�2[<�>��C�AD
<E�I"�"&&5#57733#3267�FR#��D��5F#9!P�3Z<�>��C�nAD
<��J� "&55#57533533##'#'32675#�LH``R�RffD"Nt,0&:"�a]L:����@�L(0�C='+p2��&�'"&&546675#53326654&'53#,Kk8+j�+8#D33E"8+�j+8j?f82N;C5$bI-N//N-Ib$5C;N28f?M���"&&53326654&#"'6632)?c:SR:2E$+-


GU7l/dM��XK;f@JM@diX�O3%�
#&&'##X�Sp

pO��%H""H%���P�#&&'##'&&'##33677�jR:
<R:	:Lhj86�#A""B"��#A""A#����3]]3�1'�3>32&&#"#&&'#1�4L4"
	0=�Sw
j*0M-A<.?�
 J#"J!��9!�!53366773�YU#!TXˤB�:!!9 ����G�Il�"&55!5!5!!3267/D8��F�����I

 �QB$,wC,��_)/?G��F�&%"2232654&'667#5!5!3632##�+%&�>�D�����,N%9`'3NN-�*2$��
5,wC,���1)6H9;�'�!"&&'7326654&#"'!5!632 8U?(!U@-J,WP $!�����esDm�,50&E.AI
.C,�kWGd4�'j�6C"&5466323'53!6232#"&'732654&#"'7##'#'2675&&#"�CX.K+-L
�0C#-L/1C'- )3-,!��;5'"+5.�xNs?]��,�5Y6Ea3"4JK?E4��]:+E*!�gSVd��:� 0"&&55#57733632&&#"'2654.547#HVe+IL
E�&%A *#'99'l�\G':;'}C,S=�>��0#(?2CN@-%%/"$4)�A:0�'[�3"&'73265#3267#"&5#5773354632&&#"a#
	
"�'
-L=HKE�AL
(<�>3,��-1>ZH
>��PIW?4,��JXG��3>54&#"'6632�BR'NG9O,!gL?g=1U77%@D+=H1 5%;-YB:UF$��Y�!.546632&&#"7V0=f?Mg +O9FO'TA$FU:BY-;%5 1H=+D@%��G�35#5736654&#"'66323#�LfS[KF:P,!iN>e<(B&��:/f<=H25$<-YB/L=?�R�!5#573.546632&&#"3#�LL&B(;e?Nh",P:FL\R���:=L/BY-<$52H=<f/?�T�3�#575#5733#3#����P�����g:l:F��>l>��<���%"&54632'26654&#"7"&54632,m��mn��n.I+]EE]+I.%%%%��������D;�o����o�;�$##$R�[� "&'73265#'##33&&53�#	 �?	P\�?	P9�B5+��2h3����d�1k4T�mKW��<�������<���	&���<���	&���<����&��<����&��<����&��<����&��<����&	��<����&<���K
!.:"&5477"&546632373#'#'275&&#"2654&#"04:(�$J&):V^t>f:+H"BDTHA!? *E)LS!!!!98(3e2#3"(8���yOs>" 6�@-EI�/S8Wc%"!!"��<����&��<�)��&-��<����&��<��&S��9���&U��<��&W��<���#&Y��<�)��&&-��<���@&[��<���@&]��<���P&_��<���"&a��<�)��&&	-<��%2"&5467'##"&5466323733267275&&#"�*94$T.^t>f:+H"B4*!	-�HA!? *E)L�./+B@-�yOs>" 6�;
'I�/S8Wc��<�'�����<�'�	&6�
��<�'��&6
��<�'��&6	
��<�'��&6
��<�'��&61
��<�'��&6
��<�'��&6
��<�'��&6
��c4�&@
c4�	353#533cŭ��C`C�]C��c4	&@���c4	&@���c4�&@��c4�&@��c4�&@��c4�&@��c4�&@��c�4�&N
��c4�&@��c�)4�&?-��c4�&@	��c4�&P
Z���"&5467##5!3267a,<3#�4,,$
/�./*B�C�;	'c�4�"&5467#53#533#3267Y+</�ŭ���)'$
/�./)BC`C�]C<	'Z4�
!5#575#5!3#<���4���8�C�>�c4�3535#575#533#3cŴ������C�:�C�@�C8���&3267&&#"&&'#"&546325#5!z)%(0: (M5FKB? B!�4
/i�/!B-,8�C�)?)c4�	353#533cŭ��CBC�{C��c4�&R�"<��c40&R���c�4�&R0��c�)4�&R-��c�)4T&R&"<-��c�V4�&R<c4�353'75#5373c�l������C@6P�C��T6d��C��-{�&R�

����\�	#53#533353#533"&54632qk�fil�m��####CBC�{CCBC�{C$"!!"��c4�&R=%�c4�
#354&#"535#"&546325#533#3!"#!x�JA1'$�����f
*��C�4%!-
�C��/�C�� 8���c#���3!!�����F��+-�353%!&&'#+�`�YKa!!2^��2G%5o99o5��r���A���O	�	0��(�!"&&546632'26654&#"'53,Jr@@rJJr@@rJ2K)[KK[)K1�T�ii�QQ�ii�TICyRz��zRyC�HH��_��
��bD�+-�
33#&&'#+�a�Xji��pc:e::e:����H���R�F�35!5!5!F�6���GG5GGFF��0��(�O	�3!#!O�T����pJ����f�K�355!!!K�������_21F���G��*.���&2���>�5&&5467534&'66k��kLk��k�SIIS�THHTX�wu�WW�uw�XbVm�hTTh�um��6"�,,�!5&&55336553drP�T�Prd�us���
Z��
���su�&2�'3535.5466323#56654&&#"&y3!=rMNq=!2y�1A&J66J&A1DPjB\�RR�\BjPD=/�gGqAAqGg�/=$8�	3'&&'#3#'#'����^�X;�;.9$Oodd7c;;c�Z��p���
#
�3!#3#3'�@����?9$O�F�G�G�
#
�3333##'�L�LL��9$O����p5���
#
��353#5!#3'�vv@ww�X9$OGFF��G�
#
��_�0���(�"&&54632'2654&#"'\;\4rYZrrZ8CC87CC�9$OQ�l������I��������H
#
(Z�!53366773'e�MI

KJ���9$O���)J&&L'�Z��
#
��&20�0�#'3535&&5466323#56654&#"'�c)/2[=>[1/)c�')?::?)'�9$OD<�^X�OO�X^�<D=;�_n��n_�;=�
#
9��?� 0"&5466323733267#"&5#'26677.#"�Wm=d92[R

 +4@O">*
,3%C*DwTv>8Gs@��-?	03cE)E)[68,V@U]]�M �346632#"&'72654&#"'>54&#"],ZD1W664J[8Z3.]&�8OFG
5@@,8B#S��Bg<&L;6RdMA\0!)=v>�JC:N?1> 88XYX�W.0�M�6654.'736673�#<K)R#D96N
R 0E0�!0(:���2+��M_�e>no{K+c*A���$1"&&54667.54632&&#"'32654&',<lC5Y6(A'QU5vFIl),()J11N.8i�,H)KML5U_5cE;[?4<%,AA./CU;Eh:�/F&YI>U"a[���,"&54675&&546632&#"3267&"#"3267@j{A.+,6_=6b)!IU=EDI%�MO-R+#5cND57
:"-: 74&&!(DP(/"7(t�H�('6654&&'.54>7""5!#�B945]86Yo9HPKy;q[6(K3PM� $
/]O<yqa%CC#brv69C"
+2G]�M�>54&#"#4&'336632�,2-G-RK)Y;NE�P��FD>*=��aB&_83a]�H���"&54632"!&&2667!,jzzjjzzj=Q&R=)@(��'A���������|��|��4yffy4Q��
�"&5#533267�QH��0.,<YVCR�H41

=d��A� 34&'33>7.'nR(o}>	/c1MV(]FC#!%aH > �FrNN
8*3nh,"V_0&-6]8��)�''&&#"'6632##�Y�9-
+ 3G5�Y��G?
D
,ZG���T�E'�&33266733267#"&'##"&'TR1611S&'P,!7����CE.,Bb�W>.:42 2JB(/�!&&'73>73tCR&H9
"=,S
7Q5��]4��H?��AT��W\�H�:'6654&&'.546675&&5467"5!#"3267&&#"�B858`9,I*0?)%+-��7Q)@!!%-R4.P2SG� $
)L@0O7H4)?CC>:#6H"B/05	*2F@���"&&546632'2654&#",@kAAk@@kAAk@FQQFFQQ<rPRr<<rRPr<DgSThhTSg��=�""&54>5#'665#57!#327�:0�ReE�\-?;FX[(f�kk�b?D)_ZF0?]�M�!46632#"&'726654&#"]=g>kr=a6*Q#�'@&AJ&B(#I��Un7�tRv>(AjA�.W<Pc(Q=|+<��<�!"&&54663!&&''2654&&#"">i?Bk=+I*/5<e??P!>.?TS:pPUn5FcDKk9D`R1S4Y[TbB���"&5#57!#3267xA4�F��0GD$>CN�E"@	O���!"&54654&'332654&'7&bqP&=$@TP;ihi'N'B&8 &e*1<bg3l?;w=Wy?,�M,n#5.54667534&'66:b<<b:P:b<<b:�K99KXK99K��<oNNn<<nNNo<��UataTTa��a8�A0�
'7373#�S��R��W��P��V:�������5�M)n$5&&554&'3336654&'7hbP=@P?ELod��}d�B&8 ?6GU7��ba8eB>qA|��"��6�."&546732654&'332654&&'7#"&'#�BZ5&H)*.#(U($,"I&1UE#;8xyM�9!=qMLR7C=''=F4TW2MH):{Uzz'**'Z�L�%'6654&&'.546632&&#"�B./9hAHvC=U*<)2P./Q2:?�!,	4aONm9'5,O59D%+"M]�� �)5".546632'2654&#"6654&#"I(TE+-[E/V6<5P\:a?;MEHH? 15��g@*;@7ZBBh;%M;6TiO>Z1HL:;Q#6E'�!6W@88YO���
+7&&""&54&'332667.546632�@pVZH5E�\hMH3)@'k�S#6Z6|:g >.�x>��c_'/3"J>0|qBR&7R-����H��,�M,n�%�M3�)6654&#"5.546754632S>N'&#O:f?=.@+/P>S@JR>e;+=y>fWS`;�۪9nQK�604dDQ\�k_�qPs?+V*��9��?&��[��&�$��]�M&���Q��
&����Q��
�&����@��&���O��&����O���&����"��6&���Q��
&�J���O��&�J�d�EA�&34&'33>7'667.'nR(o}>	/c1MV(!I_'FFB#!%aH > �FrNN
8*3nh,4d#)X+"U_0&-6]>�M� %2654&#"5.546632,HQQHHQQ#8\5AlAAlA4Y86gUUggUUg�?kIRr<<rRHj@	.G5[�L�"'6654&&'.546633&"#"�A.1:g@FyK�N*Ue-P4:?�!,

4\JSj4FVW3A%+"M��M�!!!!�y��
����C�;Q�XD�M
�'6654&''%&''%&&'7�P
?zD"E�K"*uJ3t�T�
0\. ?:#Ez?8>&E}Gx+=F��2`���+�����T}��`���}���h�73Q#��\��W�3773�#6\����	/���c�')9$O�
#
���4�J���7���E�����"&53327Z3,S

;61P�H>���<|�#���<|�#���>p�!���.M���	/����/�m���/�j���/�l���/�i���2�'n���2�'k��A�����3�M���4�J���L�&N��x�'6654&'7	
!*)BI3�&	/.,#-��w�.5467S3IA	)*!�-#,./	��_�'7(2L������c������'6654'7'7�B6@9�2K�&5/0.,5������&&5467'7"9A5	Cl2K�5,.0/5&������'6654'7'7�B6@9�7L�&5/0.,5�����&&54677"9A5	C9L2�5,.0/5������#"&&#"'66323267'6654&'7]* !* m %;?:P####�!
'!����
#&&54677"&&#"'66323267G$:@:% * !* �!'
x####�� 8�c#�
3!!32#'32654&##c���~Fk>l�tTSUTr�F�$OBg`F9C?5��c#�����`�DB�	!#'53>7>7!3#5!�"�	�	

9I	I�x%Tk8ZZ���2-cWAimF��2Ѽ���r�W�/3'&&#"'66323337>32&&#"####�+
	,%/5L5/#*	
+�Zn<L<n_�5P34���43P5���5��5��>���+"&'7326654&##532654&#"'6632-Hu2/,Y:,G+^VJ6XNK8.P-$k=^u3/9K@l.39+&:)?<@:745"8#-YO4OSD?X/N
�33373#467#NP	?�\P	?����4k1���pW3h2��d��N
E&�fD�3337>32&&#"##fSkX-/Q�\�k���25N$$���5����	�"&'732667667!##:
":T�+6MKNj�n�pJZ�Zdk(��H���O	�	��0��(���O	�m��f���A��*���*.�/��,�"&'7326773373� '
�Yz2/pU�LK#��܁�$��=F��>�5&&5467534&'66p||pLq{{q�MOOM�MOOM_�qo}]]}oq�_XR`l]PP]��`��6"�O�DM�33!33#5OSSG	D���I��2ѼA�!#"&&55332673�<(Km:RWP':T&)_P��S@%�p(0�333333(L�L�L���I��I�p&�DP�3333333#5&J�J�J@	B���I��I��2Ѽ=�
3#5!32#'32654&##ɶ
7Ci=zh>3MPTP,JF��'QAiaD>F<<7!�
3332#'32654&##37L$byvd%KMMMRL���WbiaD>F>:����pb!�3332#'32654&##bTyHm=�nzoSWVVm���&QBiaD>F>:.���"&'73267!5!&&#"'6632Ch)."O3Vh��	dV+K.h=S|EG}2-4"(||Gho!6 1N�oo�M,��4�%2654&#""&'##336632|/33/-55-O_JTTK^LTdd=~��ww��~I������핊������!##&&54663335#"�y�`�AT;hC��nnLRR��[ODQ#�pY�4A@?��rc]��r0a��@�#"&'7326654&#"##5!#6632�$
,ND2*T���7>a80KC;4JC
��JFF�+\JNY%���c&��B��*�"&&546632&&#"!!3267`S�IK�T<^.D)Xl��l]/J.'cM�oo�N1 6"ohG||("4-2��C�����_��
��_�0���Q��������>� )"&'732667667332###%32654&###
		�Wml[_\
!0A?@C
MFIl�j��WbiaJY�h\b%P>F>:'=�333332###732654&##'L�L#WliYp��?@AA�����Wbia5��D=G@87�5!#6632#54&#"#��7bmRED2*SJFF�Zf��C8
��J��fDc&����N
c&����/��,E&�K�D
�33!3##5KTT�E���I�p��'�3#53533#32#'32654&##���S��BHm=~nH>SQSX7�D}}D�"L?i]B;E>50��(�"&&546632"!&&267!,Jr@@rJKq@@qKFYNYFJ[��[P�mm�NN�mm�Pbqjjq��zz�&W�33366776632&&#"��Yj@:4
����:e::e:�IB	M%%���<3!73!�9F	�����<�
3#57!!3#�PP��Ҩ�,:&F�>���Dg�43'&&#"'66323337>32&&#"3#5####�+
	,%/5L5/#*	
+o-	;'n<L<n_�5P34���43P5���2Ѽ5��5��>�D�-5&'7326654&##532654&#"'6632uU/,Y:,G+^VJ6XNK8.P-$k=^u3/9K3X8��	V9+&:)?<@:745"8#-YO4OSD8R2�f�DL�3337>32&&#"3#5##fSkX-/Q�5	B�k���25N$$���2Ѽ5��X�3#5!37>32&#"##ͺBK'*
	
I�Q�@JF��44M#%���5��O�DM�33!33#5#!OTSG	@Q�������2Ѽ5��A�D*� 5.546632&&#"32679Hp@L�U;\/B)?]44]?-H/ N2��
U�cj�R0 5!AvRRyB&#3%/���&2�&2�!5#57333667733#�Y&�Xc$&_V���:v�%L((L&��>�6�D4�333667733#5#'&&'#6ķ\\
ZX��<A%c

bS=�,,�����2Ѽ�33�A�DF�!#"&&553326733#5�;(Jl9RVO&8TG	F&)_P��S@%��2Ѽ[�336632#54&#"[S9&Kk9RTP%7���)^O��S>����_��
��WE&��� 8E&�����O�M��rE&���;��&����N
&���0��(0&���0��(���/��,&���/��,l&���Q���K���.32654&#""&54>7>76632�NMAGGB%P%�p|,RrG#6!;W;!!Z/<[39dd{gRKY&2	�ӥ�y�T)	K

	.WI()6fGMr>h� 332#32654&##32654##h�Ti.'+?qY��B97>��B?���9B(4
65HC%""��&(L��3!!�y���C�]*�T-�73#'53>77!3#5!����		FG	G���HZ`���4#SN�]4�����D��� R�,3'&&#""'6632353376632&"#"#'##5#�"	'<*7P7*;' "�Vi?P?i])M*<p��p<*M)]������>���&"&'732654&##53254#"'6632;k4$*X-LRMITH��4L&"*c@\vW2=�*6"-*)&@KJ7"@CK!
75FLd��3336673#5467#dP%
�LP
%���']/;��'^/<��d��&"
n0�3337>32&#"#'#nR�;&*

5�[����l*-M)a�������"&'73267667!##J

 
	GS�L16O�O��C�C�@�#33366773#54667##'&&'#@d\

ZdN
X>\��::��;>=��=>;�]��33353#5#]R�RR�������<���*]��3!##]�R����]��]�3�+��P���B�!#5!#���CC�]��1�/'�4 �38�#.:57#"&546632'536632#"&'27&#"32654&#"'CS*E''P.DJ*E()� #%.+�),#/!!!͛J
�yOs>J��L�qRv>J�#0!gTVcgZPc"����@�3^�T8�33333#5^R�RGG�]��]4��X��!5#"&553326753�*&dmREK+R�Sazz=4�:�333333:RzLzR�]��]��:�TR�3333333#5:RvLvR<A�]��]��]4��#'�3#5332#'3254&##ɦ�JWkkWJBy;>B�C�HPQJBY.*F�
3332#'3254&##3FKDQbbQD<r8:<6K�HPQJBY.*��}�
3332#'3254&##}SqYllYqh}=@h�HPQJBY.*=���"&'73267#53&&#"'66329d&#N.Sg��cH0F' \BGuGEw&"3SS@KJ2(7rWUq8,��4�%2654&#""&'##336632~,66,.880HcQRRR	aFOee8\^_]]_^\Dqp���ki~��~7��!5##7&&546633'35#"���]�3H0T4�⏏7==���G?6?���$,++��D��	)��D���-�'�*"&'7326654&#"##57533#36632N#8!CD%@*RIIR��$S4^d5L�>5�|�q,,��49VV>Br(6��q�X%���	&�1P���"&&546632&&#"!!3267ZLyEJ|I<W'E*Jg��gT.M"Q8qUVr8&4KJ@RT!4H��G���.��Z��$��Z��N��7�'��%����,�'"&'73267667332###%32654&##%
	 �QddQ_`

B=77=L07M�R�HPQJ�C�GLJN+..*:(�3335332##5#732654&##:P�PS``Sk��;77;��ųHPQJ��B+./)���I��n0	&$���d�	&"���1�/'�&-
g�T��3333##'gR�R�	F�]����)!n3#53533#32#'3254&##™�R��LVkkVLCz<>C�CttC�HPQJBY.*��<����F0�33366776632&#"��Ta	
051	p��#I##H$�HDJ$%�����3!73#�B���]H�
35#575!!3#�JJy�٬��8�C�>��T_�13'&&#""'6632353376632&"#"3#5#'##5#�"	'<*7P7*;' "b/:!i?P?i])M*<p��p<*M)]�4������>�T�)'&&'732654&##53254#"'6632�1[,$*X-LRMITH��4L&"*c@\vW2=eT	�� $6"-*)&@KJ7"@CK!
75=K�n�T=�3337>32&#"3#5#'#nR�;&*

5�<?!����l*-M)a�4����!F�3#53376632&#"#'#ʩ�_*:%

'�O�_�C�lA'M+e���]�T8�333533#5#5#]R�RGGJ����]4����P�T�'.546632&&#"3267/@c9J|I;X)A&8U0/T8-K%FX	��	@jHRr<*5/U87T/$5>�3�3%�5336673�Tn

nP�����%J""J%
��3�3%�5#5733366733#�N9�Tn

nP�����8���%J""J%
�X>�@�T0�37'33667733#5#'&&'#@��[M

IW��LG$U!P��k+,i�4��p.+pX�T+�!5#"&5533267533#5�(&blRDI)RGG�R^~~:3�]4����]�#��R�& 
��J���'��Q���&
����U���D���&
��E������d��&"��<���&(��<������1�/'�&-��1�/'�&-��<������<����&e
U���&3"&&5467.54667>7'32654&''7`;iW"?(9iH(-6FT%(@$-E(6c�&>#BJ=.NZ4aB\n-12/		K
	#BT;Dj;�-C&]I<N"b��c4�?��c4�E��c4�R��^�)5=A"&''26533.55432"#&&'#"&54632'254#"53#Wu	DXu	�.DD..BB.224"�A�nQ?dZ/�cA���P?dY0�b OSSMMSSO7kjjk�66*��A�3?6654&#""&&54667&&5466326673&''3267&&'�*=!"'.:X2#8 $A+=B*@# S-)L4$<5AH$W�J4;/V"+:A++6��/R5+C7)O#,F)H:*C82_'(`8@w4.D7")�7B*e5=G���#"&54632'2654&#"7"&54632,j{{jkzzkCUUCCUUC%%%%��������B���}}����$##$a~353#566733a��8M=�D�5��DE
�35>54&#"'66326633Il�MDG-M/+dC`pJ�W=�1`�t57F- /,5gU<{�OG9���*"&'732654&#52654&#"'6632Rq#* Z=AXj~q`G;-P ,(g=<_8M;+G,?h7#6.@59F?E2/6$4#-&H4:J	+B,8R,'!~	735667#5!533#��"A��?Xcc��=/�4�7��tB�8��
~!"&'7326654&#"'!!6632Ul%) T@-J+VG(8",i��5%=c;Cl6!6-$B,BJ3G�+XEEa2M���)"32654&"&&54>32&&#"6632@&W&	UF9NFAEo@,K`4;X.B$3W7'^0Yn;aH(.\aM?AF��D�f`�U''34wg&-cb=\4F~3>7!5!�1M7���?S0[��CG3H���^D���*7"&&546675&&546632654&#"2654&&'.Hi9(?"(93Y9^h9(#9!6fPB?5C-MGM5[8.?X-P2,@.J21J)`J-O+<./N-h:F/B8/&2#��?1-3"B05EC���)3267&&#""&'732667#"&546632�EC&V'
SG9Np:X .B%3V7']1Xn;a8FnA,K`�AF(-]aM��'44xf&,cb=\4D�g`�U'G���"&54632"6654&267,j{{jkzzkC(�UC 8�	U��������W;��E)�~��[F)��a~
353'733a�t*�@�D�V0���DG��J#"&54632'2654&#"7"&54632,j{{jkzzkCUUCCUUC%%%%��������Bsywnnwys�$##$a>353#566733a��8M=�D�5�DE
J356654&#"'66326633I��DG-M/+dC`p��>�1n�@:H- /,5iXL�\G9��J*"&'732654&#52654&#"'6632Rq#* Z=AXj~q`G;-P ,(g=<_8M;+G,?hV7#6-A7;E@E4/8$4#-'I4:L	+C-:S-'��!>	735667#5!533#��!@��?Xcc��=1�.�7��cC�8��
>!"&'7326654&#"'!!6632Ul%) T@-J+VG(8",i��5%=c;ClV6"5,$C.DJ7G�

*YGFb4��N���sF��>>7!5!�1M7���?S0J\���DG3I���`��D���uC��J)3267&&#""&'732667#"&546632�EC&V'UH9Np:X .B%2V7']1Xn;a8FnA,K`zCJ(.aeN��'33xg%-gd>^4D�gc�W(G��J"&54632"654&27,j{{jkzzk2�UC;'�U����������7Syp�(+K4S|sa>
353'733a�n*�@�D�R/��DG���#"&54632'2654&#"7"&54632,j{{jkzzkCUUCCUUC%%%%��������B���������# "" #a�353#566733a��8M=�D�4��DE
�35>54&#"'66326633Im�MDG-M/+dC`pJ�W>�1`�v5>N, .,5p\<{�PG9���*"&'732654&#52654&#"'6632Rq#* Z=AXj~q`G;-P ,(g=<_8M;+G,?h7#6.B9;G?H418$4#,'J5<M	-D-:T-'!�	735667#5!533#��#A��?Xcc��>0�%�7��fB�8��
�!"&'7326654&#"'!!6632Ul%) T@-J+VG(8",i��5%=c;Cl6!90%D.DL<F�+ZFGc4M���)"32654&"&&54>32&&#"6632@&W'
UF9NFAEo@,K`4;X.B$3W7&_0Yn;aQ(.aePADG��F�ic�V(&36|j',ed>_5F�3>7!5!�1M8���@S0^���EF2J���aD���*7"&&546675&&546632654&#"2654&&'.Hi9(?"(93Y9^h8)#9!6fPB?5C-MGM5[8/>X/R4-B/M42K*aL/S+>/1P/q<I2C:0'5%��A4.5#D27HC���)3267&&#""&'732667#"&546632�EC&V'	TG9Np:X .B%3V7']1Xn;a8FnA,K`�CH(-bfQ��'46|i%-ed?_4F�jb�W(G���"&54632"654&267,j{{jkzzkD(�UC!8�U��������j?��<X���� "i<W��a�
353'733a�n*�@�D�R/���D��}�"&54632,"//""///%&//&%/�+��'667#"&54632�>>
 .0 ,.]�4P;&%%'E;Xy����}'�f����+�'�f� ��8�#"&546323"&546323"&54632f))((�))))�))))*!"))"!**!"))"!**!"))"!*��u�%'3"&54632
P
++++�X^^���*$#))#$*�Hu�73"&54632
8
(++++�^X��^)$#**#$)m����%7&>54&#"'6632"&54632�13$77&A1"\:Sg$52++++�+@3/1)8-#.UG);10:'�*$#))#$*y�<��%"&54>'33267"&546323Sg$52I13$77&A1"\3++++�UG);10:'+@3/1)7-#.)$#**#$)�`c�''3n`�nn����`��&���s�^|�"&5467632+'3MC.6'*^@8Kx"0O4( "+�^��'667#"&54632�/6(* (2L^0P4(#+@9Kv��^^��&���s��f^��&���s����{�����f��{'������s���^�&&54632#"'cCL2( *' 7.^#vK9@+#(4P�4��%'57^��'4�P�#���4��7'7'7�''�4"��#�P��R4��&���s��`4�&���s��U+i���U+i���U+i�P� 75!P��HH�X 55!X�HHP� 75!P��HH���X ����}���s��%"&&546632,'D**D'(C**Cs%B,,B%%B,,B%�g��%"&&546632'2654&#",/I))I//I))I//;;/.<<g*H--H**H--H*0>11>>11>����7!��
���u��7!'35#�$���u"��-�����753����%��uu��753%3'u�����muF��+��e��73�%��eD���O��7377'�G��)��Oo��Kml�c��%5!+�B�c%��uN��%5!'7#+�n�m�NF��T��e��%%5%3���%e����uO��%%5%3'5���G+�O����K�l�s��7!'2654&#"�(�;MM;:NNs&��M:;LL;:M�X455!X�pp<�t��5!<�GG<���5!5!<� �>>z==>Aw5!>�A66�f��
"&'73267,�e_�mm�_d��B>):55:)>B�P��
&&5467�hyyh-d``d�Q䑑�Q*U�~~�Uz�P��
'6654&'7�-e__e-hyy�*U�~~�U*Q䑑��h��!#3��Ә\/�/b�hw�53#5!b���/�/��x�h��/"&54654&&#5>54&54633#"33�^[	?;;?	[^=436'44'634�8M7X2#4$/^4M8/(!+[/13		313T. )/c�h��/5326654&54675&&54654&&##532"#c336&44&633=^Z	?;;?	Z^�/) .T313		31/[+!(/8M4^/$4#2X7M8c�`��3cHJ���f���Q�3J��c�`��3���JH�f���Q�33JJJ���H0��HTo,7'7'7737'�*l��	0	��l*xo�F.7��7.F������5'37'	��F��P;G��G������75'75'37'7'	����F����P�G��G��G��G�[����3C"&'732654.5467&&54632&&#"6654.'7\ 2=*)-)@H@)3(LK2Q(9#*&)@I@)2)Z�)@H  #(@H %@&!-)%)>.,A(4N"5%%*>.0<';N�!+ &"", )H����
%"&&5466333>Fp@>jC+6Q�.`KO])�R��� ������&ȕ�k��]����'��z�y��;�%?K7&>54&#"'6632"&546327&>54&#"'6632"&54632f"&$%')D*>L'&++++�"&$%')D*>L'&++++�*C746!!.1!"K9*B76>'�*$#))#$*�*C746!!.1!"K9*B76>'�*$#))#$*W��;�%+7%&>54&#"'6632"&54632%'3"&54632~"&$%')D*>L'&++++��
P
++++�*C746!!.1!"K9*B76>'�*$#))#$*�X^^���*$#))#$*���%+77&>54&#"'6632"&546327'3"&54632f"&$%')D*>L'&++++�
P
++++�*C746!!.1!"K9*B76>'�*$#))#$*�X^^���*$#))#$*^����)7''3>54&#"'6632"&54632�F0"?=)F0#f:;W1%55 ))))��LLk,6'-< ,&.)F./B0,4$�)""))"")t�<��)%#773267#"&&54>'72#"&546ZF0"?=)F0#e;:X1%55 ))**��LLk-6'-< ,&.)G-/B0,4$�)""))"")���3!#���/�xbw�!#5!5��/�I��~33�B�V�[/b��w~533b�BV/��,��h��!#3%3#�<����++�\/�//�b�h��53#5!'3#b��<_++�/�/��/����!#���/��bw�#5!5�r/�_�h�33�BӘ���/b�hw533b�B�/�R��:�;"&&546632'26654&&#"7"&&546632&&#"3267,L{GG{LMzGGzMCe88eCCe88eK-I,.L+#2".86,&5R�ff�PP�ff�R*I�WX�HH�XW�I^/Y>:U.'K;BM*��:�*3"&&546632'26654&&#"'32##532654&##,L{GG{LMzGGzMCe88eCCe88e(r9OP81''*+&'R�ff�PP�ff�R*I�WX�HH�XW�Ijk8=BAs�&)$ p?��-6"&&546632'26654&&#"'532#'#532654&##,4U33U44U33U4*C''C**C((CL /..#)?2Y:;X22X;:Y2%(I//I))I//I(=�$SFFf��nD�#53#333773#57##'#[`�`�G-,G7G*Hn66�6rPPr�ʉi��i�bD�&:"&'73254&''&&54632&&#"733773#57##'#}!6!%1.%9/2#. :tG-,G7G*Hb%''#'1'	
'##86rPPr�ʉi��i�1�p"{,5"&&546632#'##"&546754&&#"3267275UO�PN�REZ,2G'5L�A5<g@=iA-C'R88gY+�Z����V?kD��:*F=MN0P0J�ok�O-"@~7.#(1��"�,5"&&546632#'##"&546754&&#"3267'275UO�PO�SDY+2G'5L�@3<iA=iA-C'R88gY+N�os�M7]9��:*F=LO
&?'A�bZ~C-�@~6/#'W�37#7#537#53733733#3##7#��hPWU\5�5PWU\6���g�9�:����:�9���h<��'7'7737'�*\��	0	��\*g<�9.,��*.9����� 75!�L�HH����� ������ �U���	5?7&"#"'7&&'77.54663227&&'#""'74&'2326�9)
2<?8)I'9 $)K03X98!5,%!+O45_?�?-";>�&�-���$9	�(:+/E%��
"0�)?00H)�$,�1�����<������<������<�����<�����<����<����<�����<����<����<���<�^<���<l^<����]�<���g�	<��C��"&54632'2654&#",HWWHHWWH+66++66�ldbllbdl3NONMMNON��O��535#566733�{i)54r�6�)��6��O��'>54&#"'66323�C[/.'1&K+>N+J0��%9P>&, ##)A>%CH-6��C��&"&'732654#52654&#"'6632)3Q*9!$4�;9+%0&D+7P'(+3(C�*"!$!F()"""81#.2&$4��O��53533##5��/��::::I!	�tt.hh��C��"&'732654&#"'73#632+7N*(G'36*% �
 (9QU�*"!:1%(.�8`C@<J��C��%%"32654&"&546632&&#"6324/6)#.,$JX0R2&1%0D,@@D%>9:,$#,�i[Ja/,
HK)E8%<#��O��>7#5!�6)�%18�Dmf87$>nrD��C��%2"&54675&&54632'6654&#"2654&&'+GM-'!#H<>H(*(O-)#"&6).3",�?,&7'.98/"-0%.?�# �'))��C��%73267&&#""&'73267#"&546632�+*.6)#.>%3&0C,@?E%?(JX0Q^#-:;-��
-
GK(E7&<#i\Ia/��".5467X&02:-5&'4�,RZ9T|A>wBAw?�l"'6654&'7.5&&5.92/�?wABw>A|T9ZR��D]��"&54632,���g��'66'#"&54632#5��'&&%-E����="&54632'2654&#",=NN==NN= ..  ..XNNUUNNX2::<66<::�a1!5#56673"R!)2�*����=356654&#"'66323�NS&';$6>G2�$;N! !#52(L-5����=$"&'732654#52654&#"'6632+"D 1#`)((>"/;8 'F'3&&,(7',1��=7573533##5�q.ad9229J��aa*JJ����1"&'732654&#"'73#632-)= -%$��
 2>G'�6F4//;����=
#%"32654&"&54632&&#"66327(#,:OVD,
+3-34A�#&"�RFV[)
;95*+=��13>7#53�* ��*-4RM)5$.SW5����=%0"&54675&&54632'6654&#"2654&',8E( D.2A!%H!,)5"/'5# %%//%!%!%3��
%����=$73267&&#""&'73267#"&54632�#,(-)3-33A2;NV�'#�(

995*,<QGU\���
&&5467U1881.-((-L1oKKp1!-c;:d-��l�
'6654&'7.-((-.277L -d:;c-!1pKKo���]Z"&54632,�gZ'66'#"&54632#5u'&&&-E����]
 ��� aQ ��� �] ����]
 ��� �] ����Q ����] ��� �Q ����] ����] ������ ����l� ���]z ����gz ������)������J������7����#"&5467&&#"'6632#'#'2675
-=kp!)7L(A?5</UH$�1+59	,+G?�&1S%���b"&'##36632'2654&#"G22@5AE)B3(4'.'.)� ׁ8YK7M)5>:3<(�����"&546632&&#"3267ZF_0M-#2 !/=;/)2�YO6L')@54@))���b"&546632'53#'#'275&&#"?L)B'+@56,'&'5.�XP5K)7|�)$5(�>57=����"3&&"&&546632#32678$=�20P//K*HM�F./6�+-/)��(K54L)SD
24
("���i#5754632&#"3#OOAE/-!&)%���0;G/
*#2������*6F%"&5475&&5475&&546323##"'3322654&#"2654&##"&'*FO5
'M5
�RI5?G@>cV(((($5@%#;4�,+("
*6>0
 5:"$)/B!%! (( !%�%
���b36632#54&#"�@8$85@$(�ׁE!A>��)(����g#53"&54632<��%�2�����|g7"&'73265#53"&54632�.!!/ ��=1�
	/+(2��'?$
���b3373#'�@�H}�GkF��ʠ���CT���b"&5#53327}53Q�#�<883�� 
1F�� 3366326632#54&#"#54&#"F21 E5!5/>#!,>#",�A-<$F8��&,/��&,/�����336632#54&#"�57%85@$(�A0!A>��)(�����"&&546632'2654&#",*H,,H*+G,,G++11++11�(K56L''L65K(4@45@@54@��� 336632#"&'72654&#"�46AD)B&.N(4'.*)�$YK7M)7j�>:3<����57#"&546632373'275&&#"v4?L)B'-4�,'&'5.o8XP5K)�:�(�>57=����336632&&#"�6B'#
=�AK',
6(2�����'"&'732654&'.54632&&#"4+L7%(&8 7%G@$?-%"4 9%I�)		#(5(

	$(9���0"&55#57733#3267qH8MP5��#,
1�J=�0dd2�)+/����"&553326753#'#
74@#)@49�A=��('�2!����
3366773zB>>>w�A�00���4���337733773#''#�Y@,082+;WK*,�A�[[��[[����[[�����7'3366773#'&&'#�ofD+&DhoE/
	+���B

B��E

E���"&'7326773366773�
	
&
�@E	<>�<2$@�//���2A����	57#5!3�ս���!�2!�2����
"'7"3&&"&&546632#3267Ip-f4$=�20P//K*HM�F./6�n)x{+-/)��(K54L)SD
24
("����
"'7"3&&"&&546632#3267'"f-`$=�20P//K*HM�F./6�x)�+-/)��(K54L)SD
24
("����2"3&&"&5467#"&&546632#326732678$=�2%*
0P//K*HM�F./.%
 �+-/)�R!*(K54L)SD
24
(/	
����"&54673&&#"'6632'267#*IS�?-/>$G_,G,$7�7�XD11
(YP4L*2./1,���g4632&&#"6632#54&#"�;?#
"8$85@$(�Z;G0*#Q!A>ļ)(�����$%"&54673366773'2654'#-'*rA;;?q)'
�+$0"�&&���"1$+*
"/*
���g5&&546632&&#"2H+G)/D"/ +5<=�� M:*:$(*%)B �����"&546632373#'#'275&&#"?L)B'.456.%(%6/�XP5K)��$5(�>57=����*%"&'732677#"&546632373'275&&#"A4--3?L*C%-5QB,'(&60�,+$8WJ3I(��=C�*�<23;���g	535#533"&54632��r�|��2�2��2�����]�'<�zG53ޜ//��E5!�**=E5!=�**:SA)7'7&5467'76327'#"'72654&#"f,T$S,W0?>1W,T$T,X/?>1o1EE11EES-U1C#;V-Z%%Z-V1D";U-Y&&J<<JJ<<JU���-7732654.546753&&#"#5&&U'&\8;>.HQH.YI<7J,"?22<.HRH.aO<7eq9)1&) ';+?Q��+0-&%)=.@W��,M�(356654&'#57&&54632&&#"3#!N>>ucs_>U0;*AF��$$H2`8
4 >Uc+ /A4< 84GG5#~!5#535#5333667733#3#�����U\!"\R������0A/@�!C##C!���/A0�:��6�1"&'#57&45447#576632&&#"!!!#3267vb�@;;@�j3X1<&I[&���XE+A1%]�u,,v�-!/!bV1		1Ua%",+2q����"5&&5466753&&'667:Yp5\83,@(. 4$H'�@87A!h
{jEe<jg"4��4"gWCX
O
X1���&"&'732677#57376632&&#"3#�*4-
hF)
PT1
 !*��&Ga>PL�;8dh>%;"??�=\4`��"�/5""&7&&5467722327&'667'7&'m
<>�=Ip_
00
+!1:21 N20
S<67;H��R{%�l��k\iq$/�
",%0d[
n��H��N�635665445#573&&'#57&&54632&&#"3#3#!N>>|W^Ms_>U0;*AF���$$H2`8,!.!Uc+ /A4 1!14GG.(~#'+3'5#575#57533533#3##'#73'#'3'#3'#�	;@5KKKKT^sAIIIIT]t�	:�bL�Ja3�����+D+����0D0���J�0DDD*G~3#575323###3&&#327#�]]�<a=LL
}YF�PD;;���3� I<8XT�El;1��s:~!'3'#573373333###'377#377#* �$LE"L;b<G?F p", 4/
�
1����(4������:��(��D�bb��bbm"�)-%"&5466323'5#53533#'#'2675&&#"5!L[2P,'5��GNN:>4-.C9vznb[7P,S"1CC,�S.;�D2=F�11*H~'-23#575#575323#3###4&'#366'3&&#327#�]]]]�MrXNMWtMF�����G3;;k#�t(:(t5?.
.@?��	:
�; ��FT���#5.546753&&#"32675#537Cf:|g<.O1<&W_]S :t�CXndR�`��ec,.!�y{��E��>	d=���:"&5467#573667#5736654&#"'66323#3!3267CZo
	PE.-�F�!8/)6,!N=5Q.a�3��>;-I!&$dXO(+ ,.&4!/%.(G/-1 0)+6) 7%/`��"�"5.546753&&'667JEj;�j5/O13 "71!P2�NGHMncR�a��a`+/��#,&0d�p�

�l
~753267!573&&##5!#3##'lOS`��L�]LO��EJH]J�]�C:<,.&D1H1LX���-��~"'75'75377>54&'7�]s]sT�«�%NB(Ed�++5H+*6ǞQ+[HQ+[�)='
To57!~!5'75'75#5!#77������ˊ����A+KHA+K�@@�@(MH@(L�7!~!#57!#5!�R�����,0�&M11*1~!35#575#5732##!!32654&##�tttt�Bh<=hA^��TMTTMT�,C,6$N>@P&C1�HABC7E~35#57!!3#3#�OO������|4�G�Fx8| <p7'77'7M1�!�!�1 -���-�� <ph�� <ph����=�'
�zM&h
�0��?�'3?K"&54632'2654&#"'%"&54632'2654&#""&54632'2654&#"�4AA44AA4##$$��f4AA44AA4##$$*4AA44AA4##$$�F>=DD=>F*,.-**-.,��:�0F>=DD=>F*,.-)*,.,*F>=DD=>F*,.-)*,.,��?~'�sM&h���<~'�sM&h���U�'
�sM&h�����<~'�sM&h
�����<�'�sM&h
�����<~'�sM&h�����<�'�sM&h�����<�'
�sM&h�����<�'�sM&h�����<~'�sM&h�����<~'�sM&h���<~'�sM&h�����<~'�sM&h�����<�'
�sM&h�����<~'�sM&h�����<~'�sM&h�����<~'�sM&h�S��?~!-5#56673'%5#56673"&54632'2654&#"�R!)2m��fR!)2�4AA44AA4##$$��*
�{�:�<�*
�F>=DD=>F*,.-)*,.,����<�'
�zM&h
�Uh,%5#53533#��B��h�>��>�U+i5!U�+>>f~�7'7'77'�,��,��,��,�~-��-��-��-�U`3"&54632"&54632'5!,������>>���y������U��&�k����UT@'��&���)x0�h%%5%�u��-0�>�O��k0�h75%5%5k-��u0O��O�>U
35!5%5%U��R�҇��>>��J�GI,,IU
35!%5775''5U��R҇���>>�GI,,IG�JU,%5#53533#5!��B�����>��>�>>o��	3#''#o�H�HB11B��~����UAS77#537#5!733#3!pLg�[�
L=Lg�[�LA>�>>�>L��".#"'66323267�/)')5H&/)')5H""4G6""4F6��L�&�k��Uhi%5!5!����h�>��Uhi7!!U���h>�`h�:7546632#54&#"`5\;;\5AL??Lh�Aa55aA��MTTM�Uh,73!UBlh�z>���\�'3%"&'##"&&5463236632%27&&#"2654&#"�7O&)5#$=%U=2DO6-E(W��@(4$+/R,15/#=!>�:=-)F+NY<)5@,M2TfSX1+-)(6=+0?17=2����"&&54632'2654&#",!9#K2"9##9""**"!**�:&;F 9(&:..#%..%#.�h�3Q"�d�������&���X��W�''3!"Q��d���T�E'��L���*73267&&#""&&5466326454&#"'6632�C-AY!F!IIh0S34bC)OKA9& P.asCw�;Fmc*"Y��.W;Bf:&"}p4 #��p�_��b�#"'732654.546632&&#"�	*<9
)

;�>RN7~�7Ag<>UM6~�~8Ah<	�p�#46632&&#"TK<9	)�p�Ag<>UM��bT�"'732653�
*K<�>RN��_Ah<>��G4'736673/�G�t�<�_� -;��  ��m��+-�a��&2�u 8�#33736677#8�^�X>�?� �!��p����9m7dd7mF��35!5!5!5!5!FL�����G�G�F�p��OC	R'��tO��OF��%~
55!!!F�������wx5FF5G���G4��$~!#!4�U��x��
��S��=�".:"&546632&&#"3267'77'7"&54632'2654&#"�;P)B% . 
$1.%%
6v1�!�!�1�=NN==NN= ..  ..AVN4J''@33?'��-���-��XNNUUNNX2::<66<::t����	'6654&#""&''66746323267;C!)O<Z!+T>9Ih\5%+!C�;�F2*C��P[4tePK^�NM<3(��>�1".54>32!"32673!2554'&&#",9cK++Kc99cK+�b6T5_"&(r�
G&(H4\zFFz\44\zF�	<=3<HZ�

���9	5!!!��+���J�		.�D�!��7	'3'
�.		.���*��*�I��F	'7!5!'75*�I��*.�D�.��!��7	737*��.�D�.��*���J�*��`!�	%7%��
?|��6!6��|?
��Q ��	7''%'�06��|?
 06	>��V7��	%%777���06	>7?
60����g7�	7'%j?
60��7|��6/��
?��95!!!!!��+p]�hCC���p		.g6>>6g!��77'3'#'##O.		.g6>>6�*��*o���CC�h]��F'7!5!75'!5!'75*o���CC�h]o*.g6>>6g.��!��7733737*��.g6>>6g.��*o\�iCC���o*����%d�%'7!'57!'7d�-~�T~-��-~�~-��&��&��&��&U��0#'7'73'7.�&��&��&��&9�.~�~-��-~�[~.<�v05!'#'7'73'7<���&��&��&��&�@@Q�.~�~-��-~�[~.Ji+%"&&546632,Af;;fAAf;;fi;f@Ae;;eA@f;>^6%"&&546632'26654&&#",Ek>>kEEk>>kE4R//R44R//R^>kCCk>>kCCk>20T66T00T66T0Wu7!W�u��VIg-7!%!!I�o\��g�:1dIg-	77!%!!I;�3��X��g�1�q7(]!K7b%	,��K��>iX753>��i�>iX753%!>��oF�i�,[>m.H73>�m���>m.H737%%>�,Y��m���M��>UD%5!+���U��>UD%5!'!+������U��h[*mH%%5%3��m��%*mH%%5%3'��/��m��%MA�mqH73Y��m�����mCH%%5%3@��Ym��%Dd0#7!'26654&&#"7"&&546632D��Cf;;fCBg;;gB1N,,N12M,,Md�4;g@Af;;fA@g;1.P34O..O43P.3[%R/%"&&546632'26654&&#"7"&&546632,DqDDqDDqDDqD4Y88Y43Z88Z3%@''@%%@''@[=qNMq==qMNq=20Z@@Z00Z@@Z0:#A,+@$$@+,A#��q�	7!%!!=M4����
v3��=+4���7!667%!&&'73667!=�66)4��Cp#VE+8%= jA�'
v3#=2*��=+^�
M�@&:~?n�a����b�&'73>7�;\8)D$r�N6O�u&��&>�Cw��M2I��M���!"&5466323'6654&'�(=(G."2
D.#A<0N'%5!
0[9'E
)/T�i7J&��Q�!"&546632%#"&546632h(<&D,"z.L-(;%D,"��.L'%5!<��7J%'%5!k*�|7J&	��O�#.5463236632.Zr>T=1JK0>S>ra�yj6bd5CC5db6jy�	O�47"&546327&&5466326632#"&'#!5>7#�;JS:"2'C))C'2";RI<%G/F,�z,F0F�UCFG	-O%8  8%O-	GFCU&1KV((((VK1&��S�#53.��%%om��	O�#%#"&54>73#"&'#!5>7F)7J@qUVp@I8)E/F,�z,F0�4&BF-Q]{XX{]Q-FB&4KV((((VK	'Om+7EMU%"&&546632'26654&&#""&546323"&54632"&'73267'254#"3254#",U�KK�UU�KK�UGl==lGGl==l�fBQ"?,,@
"R�


�

'K�TU�KK�UT�K->oIIo>>oIIo>$##$$##$�E=
'$$'
=E�;;Y'5AM%"&&5466322654&#"32654&#"267'#"&''"&546323"&54632,P{DD{PQzDDz��:DQ
"@..@"Q



�



;F{NOzFFzON{F$$$$$$$$�C>
'&&'
>C�			

						

			��	��%#.5463236632.HSRC)oVBWWBVo)CRSH	/@23CaGbg;JJ;gbGaC32@��'�m$8DPY&&#"3262672654&#4&#""&&54632#32654&#""&'663266726+<

<=cTQ:;zqpz;jEU~E��y�:E3U3#p"		"Y]crWXrbt

.�
��28P6.@GQWKw�F)S��^cPJ
ED2M*:6|

k,(/78.(,L8!��\�#*8F%"&&547&5467&&54>7'267!'66327&&#"66327&&#",j�@[$>/	*0/�
/>$[@�j>K��KZ! !�  "@;_?6;			'O	;6?_;@_9::9�##A77A##A77��'rm%;IW%"&54632'"&5463226654&#""&'&5467663266327&&#"66327&&#",a`hYYh_bDm?�oo�?mDY�"?�mn�?"��  # #�  # #�
		
m*6SMMS6*�9v[zhhz[v9-VS�&%b__b%&�SV%!!A77A!!A77-��+X!*'73546323%37'6654&#"354&#"U((.YPPY.((��,,1##1I�2332F$$�W``W�$��$��)#00#)$�;CC;<���*26654&&#"5#535.5466323#,1N--N11O--O��<^5>mEEm>5]=��+-P34N--N43P-���>e?c<Bi==iB<c?e>���	e�)726654&&#""&&54663275%#7�1N..N11O--O1El??lE%A��;�:>lB-O43O--O34O-9=jBBi=�:��?[Bj=��[}8%2654&#"'7&&'#53667'76675373#'#5&&',;MM;;MM�+X
ll
V+W+@*Y+XllW+X%/@*�M==MM==Mm,W+>)X,X
tt
W,V$0>.%Y,Ztt`����3'377''#��L��(@AA@@AA
SR����E�������1'�
33%!''#1�H�PjaRRah3���<�}}����h�����^|�����^�����=
52654&#56�:<<:[]]22,-21ODDO�v=
&546"3v[]][:<<:ODDO12-,2���;5&&546632&&#"2H+G)/D"/ +5<=�[!L:+:$(*%)B v���373'3�]
]g]�]��W���W��'3']�]W������%"&'573267I3i�
 �+5+?<36	+	���8l	����8�	����8�����>����_�3f�?�����Y�����8�	����8l	���_B3�8�@����A�����L�����Y�����;��	���9�����8�����Ln�
���z2����45��#�".9EQ\gs�"&54632'"&546323"&54632%"&54632!"&54632%"&54632!"&54632%"&54632!"&54632%"&54632"&54632'"&54632+z�

��

`�P

��d

M���

{&R$mn&%R�8l	'7A�:�8�8���mc'7I�/��s7��.M'7CU'.���8�	'7+�:8)�8���c'7$�/�*�7	/�'7B9/U/
��8��'73'#�#rRr#v8 �� q���F'73'#�$iVi$n�qq]A��".#"'66323267t&7/4& 7/A",#;M"-":M{��I".#"'6632327w)86-)(86�" 9BB:A�Y��5!�
Y99���5!��99���Y��������;��"&&'732667,6B!3, !+3"B;-E%00%E-�<��"&&'73267,8DD&12&D C<*E&+>>+&E*���J
"&'73267,FF2/++/2F�M4#11#4M���E"&&'73267,7AH#**$H@�$;!#33#!;$�Ln�"&54632,&&&&L####��g;"&54632,""""�  �L��"&546323"&54632��L !!  !! ���0"&546323"&54632����<|�'6654'7	 SDKD<(+61,++��{h'6654'7	 S	AIC�&'0)&+*�;�-"&&'732667'"&54632,6E#00""00#D7    ;-E%2  2%E-�����
"&'73267'"&54632,HJ.5..6.KH�M4%33%4Mt�9��"&54632'2654&#",4::44::4!!!!98()77)(8%"!!"���p"&54632'2654&#",*77*)88)�2()22)(2$�8��'7'7�.W:4.W:8������l'7'7�+\96+]8�� �� �>��'737r#vv#r>� qq ����M'737i$nn$i�q\\q�$I03J$Q�k8��'7'7�c:Wic:W8����j��l'7'7�j8]uj9\�� �� ��8��'>32.#"�3!B66B"3+! ,8%E--E%//���I
'6632&&#"�2FFFF2/++/�5LL5#11�)a�"&54676632/ +/ )'$%?"$�>p�&&5467L+EKDS >)+-06+�)c�'665#"&54632	  +)"%'$%?���<|�����5#5353Sss5�H/H��x��533#�5ss��H/H�=��5#53Oo�=^/�#���'654&'7+T@

W�)L
&?B�j��
&546"3jEEEE&''&��3-.4$  ��-���53533�Y6Y�/jj/�����5#53#Y�Y�j//j�����5#53533#YY6YY�H/HH/H��j���53��//���)n��
�����0������������z��
'6654&'7�?.$#A4U�(&$"+,�?��
&&5467SA4VO?.%"?#",,)�z'6654&'73�?."+(6#&U�(`H +,�z'6654&'73�?."+(6#&U�(`H +,��"&54667332678+;':%-$	0�./2(;!
'��"&5466733267:,;'=%,"	-�-.3(<!
+	��O��73	:���������53#5#��0�␐aa���� ��������	�����������!������V�����o��=%".#"'66323267�!1(&7+1!1(&7+�"+#
6J"+"	6J�x��
52654&#56�&''&EEE��$  $4.-3�����53353�0�0�``������53'35#��Ɩ��(T����'&632366324&#"#54&#"�43/''0240�NF  FN<(*&&*(�5��'7'77'� == >> == >599::99:��A����{��I�7���"5533267XM@
	
�\/
1�?�U��5!�ګ::�fX�
'6632&&#"�e��d_�mm�X*>AA>*:55�L�L"&546323"&54632''7��{#R1Lus"����"&546323"&54632''7��|%_5�lw$�4�"&5463277"&54632�51DKsS�
��L�L"&546323"&54632''7��m`1RLui"s����"&546323"&54632''7��zo5_�lm$w�3�"&54632'77"&54632�]@B)IS ���L�&-"&546323"&54632'"&&#"'66323267��-#+$**&#+$**Lw'5'5�L�"&546323"&54632'5!���L�//����"&546323"&54632%5!������..�L�H"&546323"&54632''737���^``^L�\II\����"&546323"&54632''737���c!dd!c�|`KK`�:'73'#'7�dDdg�#W1:"\\"Hx"��x'73'#'7�"]H]"]{a#�ZZE ]'5:�'73'#'7�dDdg�q0d:"\\"Hp$uY��x'73'#'7�"]H]"]wZ#U�ZZEX%_�:�'73'#'6654&'7�dDdgv	 %;?::"\\"H#)%#(#����'73'#'6654&'7�"]H]"]u!&	x8�ZZE#*D&#�:�#'73'#7"&&#"'66323267�dDdgC*$+!#*#+!:"XX"EG'2&3����'73'#7"&&#"'66323267�"]H]"]D *!-%( *"-$�WWBJ&5'5�;�@"&&'732667''7,6B!0.!"-0"B;'X4;-E%2  2%E-l|(����
"&'73267''7,FF/1,,1/FC)_5�M4%33%4Mbt$�;�@"&&'732667''7,6B!0.!"-0"B1e4X;-E%2  2%E-lq(|����
"&'73267''7,FF/1,,1/FIk5_�M4%33%4Mbm$t�;�P"&&'732667''6654&'7,6B!0.!"-0"BQ#)=D>;-E%2  2%E-o$2)((&����
"&'73267''6654&'7,FF/1,,1/F]
!%;>9�M4%33%4M_#*$#&#�;�"%"&&'732677"&&#"'66323267,1=//././=*$/#%*#/#; 2++2 �&2&2����
#"&'73267'"&&#"'66323267,FD......D *!-%( *"-$�@****@�'5&5�:�$'73'#7"&'73267�_D_`>;&(**(&;:SS>I8!
  
!8����'73'#7"&'73267�!\H\!]BB.++,*.C�WWEI9%""%9�Y�K5!''7�
� �&Y99h'c1����5!''7��y'�99\&g0�>�-"&54632'737,    Arzzr��ss�����"&54632'737,Alyyl5sm\\m�/�
.54677�-G:I3+JCA&)*3'.���/�
.5467'7�-G:Is@K&A&)*3'8���2�'
#&&5467'66323267#"&&#"G$:@:% �#%*#/#%*$2"'
|&2&2�/�
'6654'7'7�
I;F-�2*JA&'3*)&
��/�
'6654'7'7�
I;F-�?J'A&'3*)&���2�'#"&&#"'66323267'6654&'7m*$/#%*#/#� %;?:�&2&2�!
'"��S5!'�NN���z'5!'�ޜ��pS�3N�px���pz�3ޜ�px��!7S53!53!53��������NNNNNN!�7z%53!53!53��������ޜ������SA333NNNNN7
���p
���p
���zA333ޜ����7
���p
���p
��ES53!53!53!53�p��p��p��pNNNNNNNN�Ez%53!53!53!53�p��p��p��pޜ���������S_53535353NNNNNNN~�������������z_53535353ޜ������~������������pS!#!��Nz�k��pz%!#!��Nz��
�pS!#!�����k��pz%!#!������
��pSS#!5!SN��z�p�N��pSz#!5!SN��z�pn���pzS#!5!z�����p�N��pzz#!5!z�����pn��!3!��N,�k��%!3!��N,�
����3!ޜ�kN���73!ޜ�
�����S�!5!3S��,NN����S�%!5!3S��,Nޜn��z�5!3'�N�����z�'5!3'�ޜn���p�!#3!��NN,�kx�k�p�%!#3!��NN,��x���p�	!##3!��N'��k��k�p�	!#33!���'N,�k���k�p�!#3!�����kx�k�p�	%!##3!��N'���n
���p�	%!#33!���'N,��
n���p�%!#3!������x����pS�#!5!3SN��,N�p�N���pS�#!5!3SN��,N�pn�n��pz�	#!5!3#SN���'�p�N����pz�	#!5!33z���,N'�p�N��k��pz�#!5!3z�����p�N���pz�	#!5!3#SN���'�pn�n����pz�	#!5!33z���,N'�pn�n����pz�#!5!3z�����pn�n��pS!#!5!��N����k�N��pz	#!5!!!SN��z,��pn�'N��pz	%!#!5!5!��N��,z���N'��pz%!#!5!��N�����n���pS!#!5!�������k�N��pz	!#!5!!�������kn�'��pz	%!#!5!5!���������N'��pz%!#!5!��������n����!5!3!�Z,N,N��k����	!!5!3!���,N,'�n�k����	%!5!5!3!����,N,�'N�������%!5!3!�Z,N,ޜn�����!5!3!�Z�N��k����	'5!3!!'���ޜn�kN'����	75!5!3!����'N��������%!5!3!�Z�ޜn����p�!#!5!3!��N��,N,�k�N��k��p�!#!5!3!��N��,N,�kn�n�k��p�%!#!5!3!��N��,N,���N�����p�%!#!5!3!��N��,N,��n�n����p�!#!5!3!��N����k�N��k��p�!#!5!3!�����,N,�k�N��k��p�!#!5!3!�������k�N��k��p�
%##!5!3!!z'N�������n�n�kN��p�
%!##5!5!3!��N'�����n'N�����p�
#!5!33!!z���,N'���pn�n��'N��p�
%!#!5!533!�����'N,���N'n����p�%!#!5!3!��N�����n�n����p�%!#!5!3!�����,N,��n�n����p�!#!5!3!�������kn�n�k��p�%!#!5!3!���������N�����p�%!#!5!3!��������n�n��K
S53!53w��>�NNNNK�
z%53!53w��>�ޜ����jS�33NNN�,���,���jz�33ޜ���,���,������5!5!'��Z�SNN�NN��p��3#3SN�N�px��x���p�	%!#!!!��Nz��,���1NN��pS	##!#SNN��p��k�N�k��p�!#!##!��N��N,S�1����pS�	#!5!5!5!SN��,��z�pGNNN��p�S	###5!SNN��p��k�N���p��#!5!##5!�N��ȜN�,�p�N��GN��	%3!!!N,��,�1��NNN��	3333�NNN��k��kN���333!SN�8NzS���N�1�N���S�	%!5!5!5!3S��,��,N�NNNG����	!53333��8�NNNN��k������!533!5!3���N��8zNSNG��N��p�%!#3!!!��NN,��,���x��NN��p�3##33�Nz�NN�px����kx�k��p�	333##!�NNN��N,�px������N������pS�#!5!5!5!3SN��,��,N�pGNNNG��p��3###533SN�N��N�px���N���p��	3!533##5!SN����NN�,�px���NG��GN��p�5!!#!5!'���N���SNN���GN��pS###5!#SNN���p��k�NN�k��p�	5!##!##5!'��N,��N�,SNN�����kGN����!5!3!5!�Z,N,�Z�SNG���NN���!533333�Z�NNN�N��k��k����33!!5335!SN�����N���S���NNG��NN��p�%!#!5!5!5!3!!!��N��,��,N,��,���GNNNG��NN��p�###533333#SNN��NNN��p��k�N��k��kN�k��p�33!!533##!##5!SN�����Nz�N,��N�,S���NNG�����kGN�pS4>33#"5]{F''HwF�p�F{]5NGvH�p��pSS!#4&&##532SNGvH''F{]5�p�HvGN5]{��S�##532665S5]{F''HvG�pF{]5NFwH��333#".NFwH''F{]5X��pHwFN5]{��X�3#-+��+�YW����X�#5+-+�����WYW��X�	#5533-����+��++������WW��W����W��SS5!'zNNS�3N�S5!zNN�pSS3N�p����Sz'5!'zޜ��z�3ޜ��z%5!zޜ��pzS3ޜ�p����z%!5!5!5!����,z�'N'�pz�#333z�'N'�p���k���z!!5!!���z,'�'�pz�###3z'N'��k��,X�!X,��D�pX�5!X�p���pX��!X�p^���pX}!X�p
���pX,!X�p��D�pX�!X�pk���pX�!X�p���pX9!X�p�7�pX�!X�px���p
�!
�px���p��!�px���pw�!w�px���p,�!,�px���p��3�px���p��3��px���pK�3K�px��,�pX�!,,�px��*��X�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



�U










ZU










ZU










ZU










ZU










ZU










ZU










*��L*�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���      NU      NU      NU      NU      NU      NU      N*��:E�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      9X�5!X9��
�pX�3
K�px���p,,!,�p��D,�pX,!,,�p��D,,�!,,��D�pX�!!,,�px�D�D�pX�!!,,,��D�D��D�pX�!!!X���X,�Dx�pX�!!!X���X�p��,,X�!,,,��D�pX�!!,,��,,��D�D��D�pX�!!!X��,,�p����M��������Q��4
�%3#5754632&#"3#33"&54632vBBEI*Egg�R(&&&&�>MJW	?^MC�]�L####9���%"&533267%#5754632&#"3#�.)R		��BBEI*Dgg95f��>�>MJW	?^MC�]c��d$#4>55#7#3�Q"8DC8"t��u"8CD8"QQ��DY;+)5O<����EZ<+(4N<�3�S�Z�3333'53##SJ�R�JT���^>���yװ�"�Ǽ��-��+X���XX��(�l���c�'7*1��19�0--0����e	e��e�������_�.��91���]]0���Hf$<HT`l&~	&�
*�6�D*:n�2�$�D*	�	�	�	L	�	dP	*�	��	4�		4�	2	
 8	4X	�	�	�	�	�	�	�			$			 	>	
,	^	0	�	.	�	
2	�	8
	&
R	<
x	�	"
�	.	�	2	�
�
�"
�0Jd~0�	(�
,�48J<�0�H�"
�2
68J���� a���� gi & l �� ������������� J���� ����� ����� �������� 1��������� ����� [�]����� �� ������ [0]����������� ����� [-]������������ ���������� [*]������� ��� �������� �� ������ [$]����������� ����������� [-,*]���� �, ���� a���� �, ���� g, ������� 1���� �, ���� J� 2010 - 2020 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name  Source .Source Code ProRegular2.038;ADBO;SourceCodePro-Regular;ADOBEVersion 2.038;hotconv 1.0.116;makeotfexe 2.5.65601SourceCodePro-RegularSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunt, Teo Tuominenhttp://www.adobe.com/typeThis Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an  AS IS  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.http://scripts.sil.org/OFLsimple asimple gserifed i & lSami Jcursive �cursive �cursive �Serbian �Cyrillic breve [�]slashed zero [0]typographic hyphen [-]typographic asterisk [*]slashed dollar sign [$]alternate numeral one [1]typographic alternates [-,*]simple a, cursive �simple g, cursive �, Serbian 1Sami J, cursive �?@>AB>9 0?@>AB>9 gV 8 � A 70A5G:0<8A00<A:89 JA:>@>?8A=K9 �A:>@>?8A=K9 �A:>@>?8A=K9 �A5@1A:89 1:8@8;;8G5A:0O :@0B:0 [�]70G5@:=CBK9 =>;L [0]B8?>3@0DA:89 45D8A [-]B8?>3@0DA:0O 72574>G:0 [*]70G5@:=CBK9 7=0: 4>;;0@0 [$]B8?>3@0DA:85 70<5AB8B5;8 [-,*]?@>AB>9 0, A:>@>?8A=K9 �A5@1A:89 1, ?@>AB>9 g, A:>@>?8A=K9 �A00<A:89 J, A:>@>?8A=K9 ���2 $%&'()*+,-./0123456789:;<=DEFGHIJKLMNOPQRSTUVWXYZ[\]����bc	

�d���e�� !"#$%&'()*+,-.�/0123456789:���;�<�=>?@ABCDEFGHIJK�LMNOPQRfSTUV����gWXYZ[\]^_`abcdefghi�j�klmnopqrs�tuvwxyz{|}~����h��������������������������������������������jikml��n��������������������o�������qpr�s����������������������������utv�w��������������������������x�����zy{}|���	

���� !"#$%&~�'�()*+,-./0123456789:;<=>?�@�ABCDE�FGHI��JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	�

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������������������������������������������������	���������������������������"�
��������������	

B>@^`_?�
���� !"#$%&�'��(#)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef�g�hijklmnopqrstuvwxyz{|}~����������������������������������������������������������������� �!���A�a�������������������������������������������������������������������������������������C������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-.AmacronAbreve
Aringacuteuni01CDAogonekuni1EA0uni1EA2uni1EA4uni1EA6uni1EA8uni1EAAuni1EACuni1EAEuni1EB0uni1EB2uni1EB4uni1EB6AEacuteuni01E2uni0243uni1E06Ccircumflex
CdotaccentDcaronuni1E0Cuni1E0Euni1E10Dcroatuni018AEcaronEmacronEbreve
EdotaccentEogonekuni1EB8uni1EBAuni1EBCuni1EBEuni1EC0uni1EC2uni1EC4uni1EC6uni1E16uni01F4Gcircumflex
Gdotaccentuni0122Gcaronuni1E20uni00470303uni0193Hcircumflexuni1E26uni1E24uni1E28uni1E2AHbarItildeImacronuni01CFIogonekuni1EC8uni1ECAIbreveJcircumflexuni0136uni1E32uni1E34LacuteLcaronuni013Buni1E36uni1E38uni1E3ALdotuni1E3Euni1E40uni1E42Nacuteuni01F8Ncaronuni0145uni1E44uni1E46uni1E48Omacron
OhungarumlautObreveuni01D1uni01EAuni1ECCuni1ECEuni1ED0uni1ED2uni1ED4uni1ED6uni1ED8Ohornuni1EDAuni1EDCuni1EDEuni1EE0uni1EE2uni1E52OslashacuteRacuteRcaronuni1E58uni0156uni1E5Auni1E5Cuni1E5ESacuteScircumflexuni1E66uni015Euni0218uni1E60uni1E62uni1E9ETcaronuni0162uni021Auni1E6Cuni1E6ETbarUtildeUmacronUbreveUring
Uhungarumlautuni01D3Uogonekuni01D5uni01D7uni01D9uni01DBuni1EE4uni1EE6Uhornuni1EE8uni1EEAuni1EECuni1EEEuni1EF0uni1E7EWgraveWacuteWcircumflex	WdieresisYgraveYcircumflexuni1E8Euni1EF4uni1EF6uni1EF8Zacute
Zdotaccentuni1E90uni1E92uni1E94uni018FEngIJuni004C00B7004Cuni01320301amacronabreve
aringacuteuni01CEaogonekuni1EA1uni1EA3uni1EA5uni1EA7uni1EA9uni1EABuni1EADuni1EAFuni1EB1uni1EB3uni1EB5uni1EB7aeacuteuni01E3uni0180uni1E07ccircumflex
cdotaccentdcaronuni1E0Duni1E0Funi1E11ecaronemacronebreveeogonek
edotaccentuni1EB9uni1EBBuni1EBDuni1EBFuni1EC1uni1EC3uni1EC5uni1EC7uni1E17uni01F5gcircumflex
gdotaccentuni0123gcaronuni1E21uni00670303hcircumflexuni1E27uni1E25uni1E96uni1E29uni1E2Bhbaritildeimacronuni01D0iogonekuni1EC9uni1ECBibrevejcircumflexuni0137uni1E33uni1E35kgreenlandiclacutelcaronuni013Cuni1E37uni1E39uni1E3Bldotuni1E3Funi1E41uni1E43nacuteuni01F9ncaronuni0146uni1E45uni1E47uni1E49napostropheomacron
ohungarumlautuni01D2uni01EBuni1ECDuni1ECFuni1ED1uni1ED3uni1ED5uni1ED7uni1ED9obreveuni1E53ohornuni1EDBuni1EDDuni1EDFuni1EE1uni1EE3oslashacuteracuteuni0157rcaronuni1E59uni1E5Buni1E5Duni1E5Fsacutescircumflexuni1E67uni015Funi0219uni1E61uni1E63longstcaronuni0163uni021Buni1E6Duni1E6Funi1E97tbarutildeumacronubreveuring
uhungarumlautuni01D4uogonekuni01D6uni01D8uni01DAuni01DCuni1EE5uni1EE7uhornuni1EE9uni1EEBuni1EEDuni1EEFuni1EF1uni1E7Fwgravewacutewcircumflex	wdieresisygraveycircumflexuni1E8Funi1EF5uni1EF7uni1EF9zacute
zdotaccentuni1E91uni1E93uni1E95enguni0237ijuni006C00B7006Cuni01330301uni0250uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0251uni0299uni0259uni025Auni025Buni025Cuni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni029Cuni0268uni026Auni029Duni029Euni026Buni026Cuni026Duni026Euni029Funi026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0278uni0279uni027Auni027Buni027Duni027Euni0280uni0281uni0282uni0283uni0284uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni02A4uni02A6uni02A7uni0294uni0295uni02A1uni02A2uni01C2uni0298	uni014A.aa.aagrave.aaacute.a
acircumflex.aatilde.aadieresis.a	amacron.aabreve.aaring.aaringacute.a	uni01CE.a	uni1EA1.a	uni1EA3.a	uni1EA5.a	uni1EA7.a	uni1EA9.a	uni1EAB.a	uni1EAD.a	uni1EAF.a	uni1EB1.a	uni1EB3.a	uni1EB5.a	uni1EB7.a	aogonek.ag.a	uni01F5.a
gcircumflex.agbreve.agdotaccent.a	uni0123.agcaron.a	uni1E21.a
uni00670303.ai.a
dotlessi.aigrave.aiacute.a
icircumflex.aitilde.aidieresis.a	imacron.a	uni01D0.a	iogonek.a	uni1EC9.a	uni1ECB.a	uni012D.a	uni0268.a	iogonek.d
iogonek.da	uni0268.d
uni0268.da	uni029D.dl.alacute.alcaron.a	uni013C.a	uni1E37.a	uni1E39.a	uni1E3B.alslash.aldot.auni006C00B7006C.a	uni026B.a	uni026C.aAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9
AlphatonosEpsilontonosEtatonos	IotatonosIotadieresisOmicrontonosUpsilontonosUpsilondieresis
Omegatonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigmatauupsilonphichipsiomegauni03C2uni03D0uni03D1uni03D5phi.a
alphatonosepsilontonosetatonos	iotatonosiotadieresisomicrontonosupsilontonosupsilondieresis
omegatonosiotadieresistonosupsilondieresistonosuni03D7uni03D9uni03DBuni03DDuni03E1uni037E	anoteleia
anoteleia.capuni0374uni0375tonos	tonos.cap
dieresistonosuni037Auni1FBEuni1FBDuni1FBFuni1FFEuni1FEFuni1FFDuni1FCDuni1FDDuni1FCEuni1FDEuni1FCFuni1FDFuni1FC0uni1FEDuni1FEEuni1FC1uni1FBD.capuni1FFE.capuni1FEF.capuni1FFD.capuni1FCD.capuni1FDD.capuni1FCE.capuni1FDE.capuni1FCF.capuni1FDF.capuni0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0462uni0472uni0474uni0490uni0492uni0496uni0498uni049Auni04A0uni04A2uni04AAuni04AEuni04B0uni04B2uni04B6uni04BAuni04C0uni04C1uni04D0uni04D4uni04D6uni04D8uni04E2uni04E6uni04E8uni04EEuni04F2uni0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0463uni0473uni0475uni0491uni0493uni0497uni0499uni049Buni04A1uni04A3uni04ABuni04AFuni04B1uni04B3uni04B7uni04BBuni04C2uni04CFuni04D1uni04D5uni04D7uni04D9uni04E3uni04E7uni04E9uni04EFuni04F3	uni0430.a	uni04D1.auni0431.srb	uni0456.a	uni0457.a	uni04CF.auni2116zero.aone.a	zero.onumone.onumtwo.onum
three.onum	four.onum	five.onumsix.onum
seven.onum
eight.onum	nine.onumzero.bone.bzero.capone.captwo.cap	three.capfour.capfive.capsix.cap	seven.cap	eight.capnine.capzero.cone.c
quotereverseduni00ADuni2010
figuredashuni2015uni25E6uni25AAuni25ABuni25B4uni25B5uni25B8uni25B9uni25BEuni25BFuni25C2uni25C3	invbullet
filledrect
underscoredbluni203Euni203Funi2016	exclamdbluni2047uni2049uni2048uni203Duni2E18uni231Cuni231Duni231Euni231Funi27E6uni27E7uni2E22uni2E23uni2E24uni2E25uni2117uni2120at.case
asterisk.ahyphen.a	uni00AD.a	uni2010.adollar.a	zero.supsone.supstwo.sups
three.sups	four.sups	five.supssix.sups
seven.sups
eight.sups	nine.supsparenleft.supsparenright.supsperiod.sups
comma.sups	zero.subsone.substwo.subs
three.subs	four.subs	five.subssix.subs
seven.subs
eight.subs	nine.subsparenleft.subsparenright.subsperiod.subs
comma.subs	zero.dnomone.dnomtwo.dnom
three.dnom	four.dnom	five.dnomsix.dnom
seven.dnom
eight.dnom	nine.dnomparenleft.dnomparenright.dnomperiod.dnom
comma.dnom	zero.numrone.numrtwo.numr
three.numr	four.numr	five.numrsix.numr
seven.numr
eight.numr	nine.numrparenleft.numrparenright.numrperiod.numr
comma.numr
ordfeminine.aa.supsb.supsc.supsd.supse.supsf.supsg.supsh.supsi.supsj.supsk.supsl.supsm.supsn.supso.supsp.supsq.supsr.supss.supst.supsu.supsv.supsw.supsx.supsy.supsz.supsegrave.supseacute.supseogonek.supsuni0259.supsuni0266.supsuni02E0uni02E4a.supag.supai.supa
colon.supshyphen.supsendash.supsemdash.supsEurouni0192
colonmonetarylirauni20A6pesetauni20A9donguni20B1uni20B2uni20B4uni20B5uni20B9uni20BAuni20AEuni20B8uni20BDuni2215
slash.fraconethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215Auni2150	oneeighththreeeighthsfiveeighthsseveneighthsuni2151uni2152uni2189uni2219equivalence
revlogicalnotintersection
orthogonaluni2032uni2033uni2035uni00B5
integraltp
integralbtuni2206uni2126uni2200uni2203uni2237uni2105uni2113	estimateduni2190arrowupuni2192	arrowdownuni2196uni2197uni2198uni2199uni21D0uni21D1uni21D2uni21D3	arrowboth	arrowupdnarrowupdnbseuni25CFuni25CBuni25A0uni25A1uni2752uni25C6triagupuni25B3uni25B6uni25B7triagdnuni25BDuni25C0uni25C1triagrttriaglf	invcircleuni25C9uni2610uni2611uni2713musicalnotemusicalnotedblheartclubdiamondspade	smilefaceinvsmilefaceuni2764uni2615u1F4A9u1F916u1F512femalemalesunhouseuni02B9uni02BBuni02BCuni02BEuni02BFuni02C1uni02D0uni02D1uni02DEuni02C8uni02C9uni02CAuni02CBuni02CCuni25CCuni0300uni0300.capuni0340uni0301uni0301.cap	uni0301.guni0302uni0302.capuni0303uni0303.capuni0304uni0304.capuni0305uni0305.capuni0306	uni0306.cuni0306.capuni0306.ccapuni0307uni0307.capuni0308uni0308.capuni0309uni0309.capuni0310uni0310.capuni030Auni030A.capuni030Buni030B.capuni030Cuni030C.cap	uni030C.auni030Funi030F.capuni0311uni0311.capuni0312	uni0312.guni0313uni0343uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0323uni0324uni0325uni0326	uni0326.auni0327uni0327.capuni0328uni0328.capuni0329uni032Auni032Cuni032Euni032Funi0330uni0331uni0334uni0339uni033Auni033Buni033Cuni033Duni0342uni0342.capuni0345uni035Funi0361uni03080301uni03080301.cap
uni03080301.guni03080300uni03080300.cap
uni03080300.guni03080303uni03080304uni03080304.capuni0308030Cuni0308030C.capuni03020301uni03020301.capuni03020300uni03020300.capuni03020309uni03020309.capuni03020303uni03020303.capuni03060301uni03060301.capuni03060300uni03060300.capuni03060309uni03060309.capuni03060303uni03060303.capuni03020306uni03020306.capuni03040301uni03040301.capuni030C0307uni030C0307.capuni03120301uni03120300uni03120303uni03130301uni03130300uni03130303uni00A0uni2007
space.fracnbspace.fracuni2500uni2501uni2502uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250Buni250Cuni250Duni250Euni250Funi2510uni2511uni2512uni2513uni2514uni2515uni2516uni2517uni2518uni2519uni251Auni251Buni251Cuni251Duni251Euni251Funi2520uni2521uni2522uni2523uni2524uni2525uni2526uni2527uni2528uni2529uni252Auni252Buni252Cuni252Duni252Euni252Funi2530uni2531uni2532uni2533uni2534uni2535uni2536uni2537uni2538uni2539uni253Auni253Buni253Cuni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254Funi2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cuni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Funi2580uni2581uni2582uni2583uni2584uni2585uni2586uni2587uni2588uni2589uni258Auni258Buni258Cuni258Duni258Euni258Funi2590uni2591uni2592uni2593uni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259Funi202FuniFEFFu1F3B5u1F3B6f_if_luniE0A0uniE0A1uniE0A2uniE0B0uniE0B1uniE0B2uniE0B3ideoromnDFLTcyrlgreklatn�V�t
  !!""#')13577::==@@MM[[^^eevv������������������



$$**00??BBQQUU\\aassww�����������������������������	  ##&&56;;?@HHLNQRYY\^bbddffllnnqquu����������������������������

$%'-0146KLee�����EHn�#11BDHn
�(DFLTcyrl.grekXlatnl�� 
SRB ��	!��
"��#ATH &NSM 6SKS F��$��
%��&��'(ccmp�ccmp�ccmpccmp
ccmpccmpccmp"ccmp*frac2frac8frac>fracDfracJfracPfracVfrac\markbmarkvmark�mark�mark�mark�mark�mark�mkmkmkmkmkmkmkmkmkmkmkmk mkmk&mkmk,size2size6size:size>sizeBsizeFsizeJsizeN	
	
	
	
	
	
	
	








 d&.8BJT\dlt|��vxz�������b|�	n	�	�
Z
P���
�t�����2�� X���X���V��v�ZS������������������������������������������������������������������������������������x~x���xx���x����xxxxx������������r rr&x,2�x�xx8xx�>��D�rr  ��DJPV\bhn�tz��rr���r�r�������J�������rrr�r����������D
Dx�xxx�xxJ�r"x�(�x�x.(x�x,x�4:@�Frrr�rLrRr�r,�,�Z�K�V�J�D�F���@�.�0�<�=�@���Z�������\����>�A�0�d�/��'�B���+��B�\�D�?�%�"�T�`�n���-�6�N�#���{���&�G�����F�j�������J�%�,�2�2�H�H�HN��P�(�:��]�M�<�X�����	Z	`

,���	D	Lhh.djpv|�^�^��^^����������^������������^,^F�z]�?�@�Z'*�bk��:���6�N��jZZZZZZZZZZZZZZZZZZZZZZZ}���� &�,28��>��D�JPV\bhntz8����������b��&��V�hz����n�DD����V2��������D��h���z�
"(��.4:@�F����LRX^2V�ddd�dddd���jp�,��X��&��M�����J��R��]�����@��9��.��<��6��T��0��#��:��\���%O�������%�%���5��|���%P��"��2��i�%��h��3�%����&�%F��,�a���%�%��%e�%W����%��%��0�%H�%6�%�%`��|�%/���N��K�%��H���������
,��Q �Q���",�����������HHDJ>>>>PV>\bDDDh>nPPPtV>JJJJzz>,���d����6�P�2ZShnhhnhhnhnhnhnhhnnhnhnhnhnhnhnhnhnhnhhhhhhhnhnhhnhhhnhnhnhnhnhnhnhnhnhnhnhnhnhhhhhh&&,28822>DJP,�,�,j,�,L,>,�,i,[,TGF,!#$%&'/(a�������������������	#"%+,4�������������������	hjFG�E JJJMMKinLR�# 11(BD)Hn,�	

!#$%&')*+,-./01345@M[e���������
QUaw��������������������������������������	
56?@HLMNQRY\]^bdflnqu��������������
$%'()*+,-01456KLe�&�23.	

!#$')*-./035M��U���?@LRY\]�$%(06<>AEE}	

!#$%&')*+,-./01345M[�����Ua��������������������������������������	
6?@LQRY\]^du��=
'R�'*�45
$*047:=^��
*Us #&?@���	


��DFLTcyrlfgreklatnR��! (08@HPX`hpx����������������
SRB T��"	!)19AIQYaiqy�������������������"
"*2:BJRZbjrz�������������������"#+3;CKS[cks{����������������ATH ^NSM �SKS ���!$,4<DLT\dlt|���������������	��!
%-5=EMU]emu}���������������
��"&.6>FNV^fnv~������������������"'/7?GOW_gow����������������
casePcaseVcase\casebcasehcasencasetcasezccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�cv01�cv01�cv01�cv01cv01cv01cv01cv01cv02 cv02&cv02,cv022cv028cv02>cv02Dcv02Jcv04Pcv04Vcv04\cv04bcv04hcv04ncv04tcv04zcv06�cv06�cv06�cv06�cv06�cv06�cv06�cv06�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv08�cv08�cv08�cv08�cv08�cv08�cv08cv08
cv09cv09cv09cv09"cv09(cv09.cv094cv09:cv10@cv10Fcv10Lcv10Rcv10Xcv10^cv10dcv10jcv11pcv11vcv11|cv11�cv11�cv11�cv11�cv11�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv15	cv15	cv15	cv15	cv15	cv15	cv15	$cv15	*cv16	0cv16	6cv16	<cv16	Bcv16	Hcv16	Ncv16	Tcv16	Zcv17	`cv17	fcv17	lcv17	rcv17	xcv17	~cv17	�cv17	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�frac	�frac	�frac	�frac	�frac	�frac	�frac
frac
locl
 locl
&locl
.locl
4locl
:numr
@numr
Fnumr
Lnumr
Rnumr
Xnumr
^numr
dnumr
jonum
ponum
vonum
|onum
�onum
�onum
�onum
�onum
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�salt
�salt
�saltsalt$salt@salt\saltxsalt�sinf�sinf�sinf�sinf�sinf�sinf�sinf�sinf�ss01�ss01�ss01�ss01�ss01ss01ss01ss01ss02 ss02(ss020ss028ss02@ss02Hss02Pss02Xss03`ss03jss03tss03~ss03�ss03�ss03�ss03�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss05�ss05�ss05�ss05�ss05
ss05
ss05
ss05
ss06
 ss06
&ss06
,ss06
2ss06
8ss06
>ss06
Dss06
Jss07
Pss07
Vss07
\ss07
bss07
hss07
nss07
tss07
zsubs
�subs
�subs
�subs
�subs
�subs
�subs
�subs
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�zerozerozerozerozerozerozero$zero*								@:4.("������������������������������~xrltnhb\VPJRLF@:4.(0*$����������������������������~��ztnhb\























        ����������������~tj`VPJD>82,&$������������ � � � � � � � 	

$JRZbjr~���������������&.6>FNV^fn,*0.,z����������� 2<x���� Vh�������������!#L
 &,28>DJP  **
U���������!��!��"�:d��$U�S�Yc	W$]�[�a_aC$*06<K�M�H�JNOQNC &,j�j�i�ikkC &,m�m�l�lnnC�,6@JT`jt~����������@4e4v�4�
�4�4
4$04B?2Q4��'\w4��4���;2*v"�d"� !$%"#�

����#��#���#�)*+,-./0123456789:;<=>?@ABCDEFG��������������rMNOP�����	NR9�������������������������35CILPRTVXZ\^`bdfP !"#$%&'(5)*+,-./01234ef'J:
6789:;<=>K6 ?RABCDEFGHIJK@STUVWXYZ[L\]NPhijL4444
8C<<��<
<
@
M4N4*(U�MOQNP��35CILPRTVXZ\^`bdf(q

r��� "	
_b��+.qt�A_�+q	b�.t��A$4��	

CHKOQSUWY[]_ace?$%Q��HL	!#

 "$'*/0�66Y[[>]x?zz[|�\�����������^~���!��	

24CHKOQSUWY[]_ace!��35CILPRTVXZ\^`bdfmv��
���!o
hj%
qr5)*00��������mv9��mnopqrstuvxyz{|}~������	

24CHKOQSUWY[]_ace\\&&))"";B//	 $'JKLMNOPQRSTU[\]^_`ab����MO@A[1���my����Rnnz�$?($%Q��HL��	

24CHKOQSUWY[]_ace%ooPK)J[�՞�w�wWshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfnu�[��� DSIGw�GPOS��,K�GSUBV.TL�OS/2ٮ�iM�`cmapRԟ�NP�cvt '��m`8fpgm�zAm�	�gaspmXglyf*~ʙS8�Bhead��e��|6hhea���$hmtx[�`���TkernlBjT�,l�loca�.�V,maxp<
�X< name�$�X\^post:�]i��prep�x9�w,�
0JDFLTlatn����kernkernJnv�$R�
�^�	h
B
l�&��rj����Z���j��L��*|�DV�:�� �!.!�##L#�$4$~%�&J'$'�(�)�*�+f+�,6,�-�.(.�/t/�/�0:0|2"2�33T3�3�4&4l4�55b5�66L6�6�7B7�7�888�9d9�9�:&:�:�;@<�=�>j?,?�@hA�B�CzD�E�F�G*G�HfI�K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��JK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��k0	�x
0
0�@���@�x����"0#��$�x&��*��-�h2��4��D��F��G��H��I��J�xP��Q��R��S��T��U��V��W��X��Y��[��\��]��l0m��o��r0t:u:w��y��{:|0}����x��x��x��x��x��x��x����������������������������������������������������������������������������������������������x�����������������0�0�@�0�0�@����0��x)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J
�jm�jo�jy�j}�j�j�j�j�j�j)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������4	�|�L�L�|����"$�|-�:F��G��H��P��Q��R��S��T��U��X��w����|��|��|��|��|��|��|����������������������������������������������������|���������L�L��|	��������$��������������������������������1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������I��
��
��6�:6"��#��&��*��2��4��7�T9�J:�h<�,?�JF��G��H��R��T��Y��Z��\��l��m�:o�:r��t�6u�6y�:{�6|��}�:�����������������������,�����������������������������������������������,�:�:�����6�����6�:�:�:���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������.	�v���v$�v-�JD��F��G��H��R��T����v��v��v��v��v��v��v����������������������������������������������������������v������������v)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������#��&��*��2��4��7��8���������������������������������������[	�|�L�L�L�|�`�`#��$�|&��*��-�82��4��D�F�.G�.H�.J�DP�`Q�`R�.S�`T�.U�`V�^X�`Y�LZ�t[�p\�L]��m�Lo�Lw�`y�L}�L��|��|��|��|��|��|��|�������������������������������������.��.��.��.��.��.��`��.��.��.��.��.��.��`��`��`��`�|����.�.�`���.�L�L�L�L�L�L�L��|	��������$��������������������������������k0	�x
0
0�@���@�x����"0#��$�x&��*��-�h2��4��D��F��G��H��I��J�xP��Q��R��S��T��U��V��W��X��Y��[��\��]��l0m��o��r0t:u:w��y��{:|0}����x��x��x��x��x��x��x����������������������������������������������������������������������������������������������x�����������������0�0�@�0�0�@����0��xI0	��
0
0��������""$��-��D��F��G��H��J��R��T��V��l0m��o��r0t0u0y��{0|0}�����������������������������������������������������������������������������������������������0�0��0�0��������0���1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������i	�\

�h�`�h�\����""#��$�\&��*��-�82��4��D��F�`G�`H�`J�TP��Q��R�`S��T�`U��V��X��Y��Z��[�|\��lm�`o�`rt2u2w��y�`{2|}�`��\��\��\��\��\��\��\��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������\�����`�`�����`�`�`���h���h�`�`�`���\0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������D
D
D�~�~lDrDtdud{d|D�D�D�~�D�D�~�D��
��
��Y��Z��\��l��r��t��u��{��|���������F��G��H��R��T����������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������
�|�|D��������������������������|�|$	���|�|��$��F��G��H��R��T��������������������������������������������������������������������|�|�����������F��G��H��R��T��������������������������������������������$	���|�|��$��F��G��H��R��T��������������������������������������������������������������������|�|���"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J	�H�H$�H9:::<(?:��H��H��H��H��H��H��H�(�H�(��H	�H�H$�H9:::<(?:��H��H��H��H��H��H��H�(�H�(��H'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���	�H�H$�H9:::<(?:��H��H��H��H��H��H��H�(�H�(��HK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J
�jm�jo�jy�j}�j�j�j�j�j�j)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������i	�\

�h�`�h�\����""#��$�\&��*��-�82��4��D��F�`G�`H�`J�TP��Q��R�`S��T�`U��V��X��Y��Z��[�|\��lm�`o�`rt2u2w��y�`{2|}�`��\��\��\��\��\��\��\��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������\�����`�`�����`�`�`���h���h�`�`�`���\)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|��������������������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J��
��
��Y��Z��\��l��r��t��u��{��|���������
�jm�jo�jy�j}�j�j�j�j�j�j��
����
��9��:��?��@��Y��[��\��`��l��r��|��������� �t
�t
�t��9�^:��<�h?�^Y��\��l�tm��o��r�tt�|u�|y��{�||�t}����h�h���t�t�t�t�����t��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������i	�\

�h�`�h�\����""#��$�\&��*��-�82��4��D��F�`G�`H�`J�TP��Q��R�`S��T�`U��V��X��Y��Z��[�|\��lm�`o�`rt2u2w��y�`{2|}�`��\��\��\��\��\��\��\��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������\�����`�`�����`�`�`���h���h�`�`�`���\0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��JK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��JK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������Jv

#$&')-./2345789:;<=>?DEHIKNPQRSUYZ[\^lmoprtuy{|}��������������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I�xx�x���P`KtyPL@�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ-��%59=J@GBhf[[		QCQ
D=<($#*$
+>32#'&>54&#"#"'4632#"&!!7!!�9DO.?gI)-60#z-70 I9)8(c>0((0>���22c��u&#@[87P;+&%iu"3+(.:(3<��/@)(?��g6,����
!&@#QCSD

+#.54>32#".�	y	+!..""..!���-VW[44[WV-<��."".-""-����
,@)	BQD

$+#"&/!#"&/3���ޛ ## �"�ޛ ## �"6Q�>BH@E
Y	CQ
C
DBA@?>>86530/*(##!#!+#"&5467#+#"&546?3#7>;>;3323+32%3#TQ G�G-OU��A�
$'�H+PT�TO!I�
%&�A�	���A���Y"Z��%�9FJf"�Z���K��9�Fj�$g8CN~@J( I>)
?4BK�	PX@$hfSCSD@$hfSCSDY�#&#&+.'7>32.54>?>;#".'+4.'>�y�H50FaD%F�kA9m�h
Bi�<+):L1!H�pE<s�kB�%@V1"AeE#��"<P/A_=aKR&1.5U�aI�lE��
R:B!!�4R{\Z�xK��2H4&�-F]�0G6(�(<KH����'1EY�K�PX@'[	[SC		S
DK�"PX@+[	[SC
C		SD@/[	[CSC
C		SDYY@
VT((%#&((($
+#".54>324.#"32>>;+#".54>324.#"32>�4Wt?DsV00VsDCuU1�1A%%A00A%%A1�
���
�54Ws?DsV00VsDCtV0�1A%%A00A%%A1?T�[00[�TV�\00\�VB\;;\BA[99[w��
RT�[00[�TV�\00\�VB]::]BAZ99ZR��x�?K�@8IH+%BK�PX@*hSCS
CS
D@(hSCS
CSDY@FD/-(&" 	??+2#"&'.#">7>;#"&/#".54>7.54>3267�O�_7o
1E.2P9"6&�&-nFB,�$�^��P�yJ/SrD=:5d���0Nd4p�D�Yjk�3To<8. 9M-#@AE&�]C�Js�a���[j6g�]F}jTM�NI�_7��AcD#RD�9���3�
@	BQD

$+#"&/3��ޛ ## �"����
(+.54>7!nhOKiAAiKO
imu�m�0s���zy���t1��lJ����	(+4'&546?'.54676*mi
OKiAAiKOhnu���1t���yz���s0��`_��0J@-)($ BK�PX@QD@MQEY@
00+5467'767./7.=3>?'.'b!�,�$%#�,�#	X�,�!!�,�_�"cKdeKd %��)cKdeKd!'�d�"�,@)MYQE+!!#!5!���i��k���U��R���^��P�@?S
D$+74>32'&547>7#".^,/0G-

 
*{)'3-a_Z&
%0:!!-dR�@MQE+!!d���X��Q�@SD($+74>32#".X!..""..!n."".-""-����	@kD#"++>;�7KY
0!K#"� "<��L�'@SCSD((($+#".54>324.#"32>LQ��mn��PP��nm��Q�7]zBBz\77\zBBz]7̼��XX����XX��켤߈;;�ߤ�ވ;;����*@'BhCR
D&+%!47#"&/3!!4�
	8�����,-�
	Mq��h$�3;@8/BhSCQ
D,*$"
33+2>3!2!5467>54.#"#"&/>Y[�sB0Rk<��(R&�"�D�9^C$(F^66\G1
 ]P{��6g�^P�}u=�~
"l=(�:klo??_> 9N/b�f5l��.�JU@RF
Bhh[SCSDCA;910/.&$JJ	+2#".'763232>54.#5>54.#"#"&/>l[�o>#A\9��K��cr�pHL(DeKKqK&Q�p[�R%'D]66\G0 ]P{��4`�SDkQ8%��c�o;9d�P 		I@,1N`/:`F(�&B\8>\< 9O.b�f5(`�&@#B[C
D!#+3+#!"&/3467!�����������f��y[���< �;l����.@@=,+Bh[QCSD(#&(""+#!632#".'763232>54.#"'!�09�>Bp_p�t;P��m?tdV!63HaCKxU.'OvO6t>pt�K&1��Bt�]r��F*6L&0Y|MClL*!�l��2�.2@/B[CSD+)!	+2#".5467>;>32>54.#"�V�tDH��ml�|CT[k2 ��3|��(MoGHtS-,PpCHtQ+n9m�fc�~HE�p^�z���#'�LErR-.RpBFqO*1Smn<�@QC
D$'++>7!"&=<��
.'Z
��P",�S%�*y`��&�3GD@AB[SCSD54! ?=4G5G+) 3!3	+".5467.54>32'2>54.#"2>54.#"Ck��F��qs>r�ba�r>tp��G�kFoM)1Sl;;lS1)MoFFc>!Aa@@aA!>c9j�^��&*�tO�f::f�Ot�*&��^�j9�'Gc<JiBBiJ<cG'�+G\12XB&&BX21\G+�6�32@/B[SC
D0.&$	+".54>32+>74.#"32>%Q�nAF~�hg�xA,='��
0��&7�+Li?BmM*'IiAHoL(L6i�c^�zFDz�g>oji8�;4,.�CmL)+Lj?DkJ&/Nf���y�';K�$PX@SCSD@[SDY�((($+74>32#".4>32#".�!..""..!!..""..!n."".-""-	."".-""-���y�2D�?K�$PX@SCS
D@[S
DY@	/-%#$+74>32'&547>7#".4>32#".�,/0G-

 
*!..""..!{)'3-a_Z&
%0:!!-�."".-""-���W�(+��?--�����
�
�
������!@YMQE+!!!!�[��[��>�և���W�(+75467%>7.'%.=��++�?�
�
�
�oJ"����(<9@6BhfSCSD(&#-$+>32#'54>54.#"#"'4>32#"."KYg<O�b8-ERG3z-EOE-":O-=W<%�!..""..!4(.TxKLnS=66!��*A99EX<+F1$��."".-""-V�OQaf@c
X
7Bh[

[	[OSGSR[YRaSaGE;9530.&$QQ
+%"&'#".54>3232>54.#"3267632#"$&54>32%2>7&#"�Nb
:�N<X;A��}Ce-])1XC'Y��z��dk�����U
k�ﭭ���}7d���l\���_5=k��?;1L'.K}Z3B�KNQF)Id:U��X��K1$/
8f�W�ЋEf�������XB3	BHRn�,�mʯ�g9(Ns��kl��Lx2VA'	?f�EHW
I�
$@!BZC
D# +!#"&'!+3!&'I� ��}�"�=���
Z����{G6Q)E���*=@:B[SCS
D*(" !+3!2#!2>54&#%!2>54&#!�Ʉ�{;!CeD��C��x��6SwM$����RxO&�����4`�W5bTB��[�l;��
&E_9o��$@[6~vZ��	�.D@ABhfSCSD)'..+2#".546$32#".#"32>76�
LX�����bi�	���Y?
(6Jb@s��MM��i@fWK&(
Sfrk����kbTY

 O�҂�ґL 1"���@SCS
D!(!$+#!!24.#!!2>�f��������f�H��s��Us��H̡���g�g�����АL��L���!�.@+YQCQ
D+!!!!!!�P-��������$�����!�	(@%YQC
D		+!!!#!�PL����������Z��@�4K@H!
Bh[SCSD,*%#44+%2>7#"&=!#"$&546$32#"'.#"-:aVL&��6u��Y����ig��U�}j.7>YySyĊJM���<n��':'k����j/C*X(%O�т�ՔN�8� @YC
D+!#!#3!38�������t������@C
D+!#3����<����QK�PX�B�BYK�PX@CSD@hCSDY�!&$+#"'>7>3232>53�;s�mai<2BgG%��x��F9(T�Z��:�"&@#
B[C
D)(% +3267>;#".'.+#3�I&-�) ���%*:��!X��%�� 
	$�Y
	9�p����@CR
D+%!!3pl��£�����#%@"BhC
D!6)+>7>;#467+"'#32o

�
���--�
��
�53q
�g0��--�2���
���8�@C
D!+2.53#"&'#3>�b���d�
��1��g70��\����'@SCSD((($+#"$&546$324.#"32>�f��������ff����f�H��ts��HH��st��H̡���kk�
��
�ll��ґNN�҄�ёMM����*@'[SC
D
!+#!2#'32>54&+����ɄAF�ȁ��SV,������?t�ed�xC�,OnB��\��$�0s�BK�	PX@kSCSDK�PX@SCSCD@kSCSDYY�(((%&+#"&'#"$&546$324.#"32>�)NpFp�$8�9{C����ff����f�H��ts��HH��st��H�e���/�sk�
��
�ll��ґNN�҄�ёMM�����#2@/B[SC
D#!,!+#!2#"'.#'32>54&+����Ɓ>0[�S$��5��((��U�W,���V���7h�[L�iJ(��)�)Kh?��:����==@:=BhfSCSD;9(&#!#"+#".#"#"&'7>3232>54.54>32�	-EaEAdC";a{�{a;@{�r��Q86QsSElK(;`{�{`;;p�kx�J�")"#<Q/<O8),7TzY^�zFeV\-6-&E`;AS8')6V�_L�nBLH~� @QC
D+!#!5~�1�/���
������#@ CSD+%2>53#".53�Y�a3�O�Ԅ�ԔO�3a��<l�Zg��|ԛXX��|g��Z�l=G�@BC
D, +32>7>;#� �	�"������
"P++P"��g��( @#BC
D+< +32>7>;2>7>;#&'#�"(
	Q#8!O
)#��A���		�����>""?��4C!<��gE)%����@BC
D("(!+	3267>;	#"&'+��'�va	��%�����	���
���P�Y����@BC
D,"+#32>7>;���HG	�:��:_��#>>"-V��
$@!QCQ
D

+!!547!5���2��,���H"���Lv������
'@$[OQE

!#+!+32�p����F��F����	@kD# +32#"&'L!0
YK8
�" �'"#Z����
!@[OQE!"+46;#"&=!!Z��p���3F�����@
BkD+!+3#"&'.'+sf��
����z`+,+�����[@MQE+!5��xx&���	@kD		+2#"&'�! �f���
\��z)9}@!/BK�PX@'h[SCS
D@+h[SC
CSDY@+*10*9+9%##' 	+!#"&/#".54>754&#"#"&/>322>75zO (LT_:;gL-B��ecAYA/ T�vU�Z.�2/NE?{�l1,<^$9'!BeE<oV7Ovy!)!9QP8d�U��#2 �2D*(:%����%�@	BK�	PX@CSCSDK�"PX@CSCSD@!CSC
CSDYY@%%(#+33>32#"&'#"32654.��?�iX�d6<q�fb�3	&QW�70uH��#B`���IYB��~p��QLD\&wPI�B6ʻc�[*J��*i@
*BK�	PX@$hfSCSD@$hfSCSDY�($#(#"+#".#"32>32#".54>32E#6M8JrM'*LmDAT8$2B�n_�xE?y�sj�?A5d�X\�a3&AQKF��|q��NE?H����%p@BK�"PX@CSCS
D@!CSC
CSDY@%%+!"/#".54>323%267.#"[&
A�lW�d6<q�g]�4��=W�71uG��"B`%{O_C��~p��Q?92�?�PI�B5ʻc�[*J���$-{�BK�	PX@'h[SCSD@'h[SCSDY@&%)(%-&-
	$$	+2#!32>32#".54>"!4.#[�p?�^0TtHCaF/2!\ip7i��HAz�r��'"B_=s�l*`�_/$A(;&G�ʃj��M���>gK)��]@
BK�2PX@SCQC
D@YSC
DY@
4%+3'.=354>32+"!!�p�1[�PD: .K6%��]
IbW�]0Y6XA]���2���9M]�@2A*BK�PX@,
[[CS	CSD@/h
[[S	CSDY@ONWUN]O]JH@>#!99+2!#"'#".5467.54>7.54>4.'32>2>54&#"�Bs/*s"9e�SG? !:`zz`:Az�oo�n7_S+3!0 KU9f��*H^hl19G#HmJHrO*��6S8qlkq8RB!	APJyV..$%	2XFAz_9,Ja5KiC8/.**�]JyU.��&.N6";+0BN6K-]nn]-K6���-@*BCSC
D##+33>32#4&#"��A�gSU,�ilO�:���ES7e�V�{�sLA����GK�	PX@SCC
D@SCC
DY@

+##".54>32X��#.-##-.#���>-##-/##/�����(Y�	BK�	PX@SCCSD@SCCSDY@%#U%+#"&'7>323265#".54>32X EmL!6
NB�#.-##-.#���=iN-

`
IQ@>-##-/##/���0@-B[CC
D%(%!+3267>;#"&'.+#K.@���
����2����W�s
��
���X�@C
D+#X���?���*V�)BK�PX@SC
D@CSC
DY@**##&$!	+332>32>32#4&#"#4&#"�j&

8�\gEVa2P}W.�hc,O<#�b^Bq/�%hEXra7P43b�\�{�w{<[<�{�zxG=�
��L�BK�PX@SC
D@CSC
DY@#$!+332>32#4&#"�j&
B�kSU,�ilO�:�%nIZ7e�V�{�sLA�H��#NK�	PX@SCSD@SCSDY@##	+2#".54>2654&#",o�}CC}�oo�~DD~�o����LpK%%KpJ��wx��II��xw��J�xɴ��4b�ZZ�a4���%�@BK�	PX@SCSCDK�PX@SCSCD@!CSCSCDYY@%%($!+32>32#"&'"32654.�j&
A�mW�d6<p�f^�3W�71uH��#B`��L%xO`C��~p��Q>9�@�PI�B6ʻc�[*H���%�K�PX@B@BYK�	PX@SCSCDK�PX@SCSCD@!CSCSCDYY@%%(#+##".54>32763267.#"Ų@�iW�d6<q�gb�6
&��W�70vG��"B`����JZC��~p��QF@O%��PI�@7ʻc�[*��lK�PX@B@BYK�PX@SC
D@hCSC
DY@!$%!+332>32#"&#"�f4�g*D:4]}*��jw�lg�{>��<=@:<BhfSCSD:8'%" #!+#".#"#"&'7>3232>54.54>32�&7L4-H3-J^c^J-2b�]j�<*(9Q=4N4-J_c_J-0\�Vd�:N(5'4&!(<W=FwW2E6D
".<"*7' )>[A:kQ0?7,���>!t@
	BK�2PX@$jhQCTD@"jh[TDY@
!!+"&5#"&=7>;!!32>32�x�z�)Z"��>1)4.��~lG9�����@>U+1z����L�BK�PX@CS
D@C
CSDY@$!#+32673#"/#".5,jkN�:�j&
B�jSV+��zs~JB�%mIY7d�V���@BC
D, +32>7>;#���c���t$H##H$����. @'BC
D*!,< +32>7>;2>7>;#"'.'+���M�	�����
�

����t$C""C$��p#D!!H��"�/0�R"��@BC
D("(!+	3267>;	#"&'+����	�
���c���
��
��@����������@BCD,""++32>7>;�	���^�	
	�������,,}FU�@QCQ
D+!!5467!5!U��)�
'����#�&�J
#ߌ,���@3@0$B[[OSG86303++4&#52654.54>;+";2#".54>�FCCF)S{R5MY)7!!7)YM5R{S)�?QkP@2bbd4EtT.OeV8hcb2&A3%		%4@%2bch8WdP/TtE4ccb�p�@QD+3#把���X��,�@5@2B[[OSG?>=<1/,)3)++546;2654.54>7.54>54&+"&=323"�*R{R5MY)7!!7)YM5R{R*FCCF�2bcc4EtT/PdW8hcb2%@4%		%3A&2bch8VeO.TtE4dbb2@PkQt�9@6jkO[SG
+2673#".#"#4>32�AI�%Ef@4f_V$AI�%EeA4f_VeUFCpP, '!TGCpP-!'!���
!&@#SCQD

+4>734>32#".	y	�"--""--"��-UW\44\WU-���-""-."".���.7�@32&*BK�	PX@)jhfTCSDK�PX@)jhfTCSD@)jhfTCSDYY@	##'#+.54>?>;#".'>32+1\�q?B~�wBR�6.!-?*4?U;&0<�kB�y4LsN'
O��ro��Q��?1>�"	?HJ���9c�4[�>@@=7+Bh[SCS
D%&#&'%"	+46;4>32#"&'.#"!#!>3!#!5>5#4 �6n�nNy^EH

)3B-?`@ ��{929��<">0��$^�{G'DZ4./#*NnD��H�Km-Ls
"3E.!��`#7?@<!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"�!�[�,h:9f+�Y�"!�[�,h99e,�Y�"�#>Q//S=$$=S//Q>#�9e,�Z�"!�[�,g:9f+�\�"!�[�,g:.Q=$$=Q./R>##>R,S�"8@5
B
Z	YC
D"! ,!+!32>7>;!!!!#!5!5!�2�h�
!��g3��T�����T��q(��#:;"6��fig��;gi�p�@YQD+3#3#把�������r����HZA@>HXN=#BhfWSDFD-+(&!#!+#".#"#"&'7>3232>54.5467.54>32>54.'1&7L40M51OfifO1NT1>2a�\j�<)(:U?2O62RhnhR2V]2?0\�Vd�:��Fm�>604FOT(B6�*8&9/+.7G\=Q&%bEFwW2E6D
#->&-B3*,3F]@N}#&iK:kP0>7��3G95K/$8.&##I�V{'3K� PX@
SD@OSGY�((($+#".54>32#".54>32� )(() g))))	((**((**D����.Jb�@
BK�	PX@4hf[[		SCSD@4hf[[		SCSDY@
_],,*(#%(%"
+>32#".54>32#".#"32>4>32#".732>54.#"=9�tb�s?Ez�bl�9.2L;FqO++Lj>0B0%�R4_���ee���_44_���ee���_4d,Rr��X��c-Rs��X��b�@BIDz�de�yCD7A-TxKMyR+	e���`44`���ed���`44`���eY��tS-d��Y��vS.e��\?T�)5E@B!-Bh[WSD+*/.*5+5%##' 	+#"&/#".54>754&#"#"&/>322675T<.28"&A0&X�k:9&2%4yI6T:��3J$Fa<4H1 )<)"C5#%?<
*1."<T3��&#i#*"���)�)(+55��:
�
�:/�:
�
�:�
��
��
��
��
��
�;��=K�	PX@_MQE@kMQEY�+!#!�\��;�X!dR�@MQE+!!d���D����3IV��>BK�	PX@/h		[
[SCSD@/h		[
[SCSDY@44VTLJ4I4H)!*,,&+4>32#".732>54.#"#!2#"'.#'32>54.+D4_���ee���_44_���ee���_4d,Rr��X��c-Rs��X��b� ��kj�!�	Pt7M/+F4��e���`44`���ed���`44`���eY��tS-d��Y��vS.e���|}z^�
��.
r(:&%8$�RD@MQE+!!>��DuF'��'@WSD((($+4>32#".732>54.#"F2XwEEwX22XwEEwX26I**H66H**I6hCvW22WvCBuW33WuA*I66I**J77JdP"�7@4YYMQE
	+!!#!5!!!���i��k��k��B������p�x�%�R�Qe-9@6+Bh[SD(&" 
--+2>;2!546?>54&#"#"&/>Z4U<!*6�/��
�, <-.9	G�e6M/(E>:�M+
�455370*jjT|Re=S@P9Bhh[[SD640.*)('==	+2#".'763232>54.#5>54&#"#"&/>b3R; wBE*E[09T=+7+ / 'A/WG:009	C,ATe3D(�-N>7T91H/
 (+W<424/(5O5��U�	@kD	#++7>3U�j�! ���
�z����3@0BCS
CD&$!#+32673#"/#"&'#"&5,liN�:�j&
C�WJp'Y&)��nmxJB�%mHD3.*W&��($*�7�*@'hiSD+##!#".54>3۝��h�u??u�h���7�7]=i�QV�e8|���@OSG($+4>32#".|)68((86)Q8((86))6����
�K�PX@
B@
BYK�	PX@^TDK�PX@jTD@jjTDYY@+232654.'73#"&'76� *+)<&+pZQ 9P0)J�	!�PE6 3$7x�D_O�	BK�$PX@jjQD@jjMRFY�$+37#"/733!��k	'�l��i��+X	8��zUH<��)@&WSD	+2#".54>2654&#"~FqP,,PqFGrQ,,QrGTSSTWSS�+PsGHtQ++QtHGsP+��iddhhddi��
�%�%(+7'&54767&'&54?%'&54767&'&54?�:
�
�
:�(�:
�
�
:�

�{�{

f|� &0O@L$	Bh		Z
[CS
D0.+)&% $!#
+3+#5!"&/3%37#"/733!4673+>;m
Rm��
V|���k	'�l��i��,L2. MA��9�;�+X	8��zU�,���\ f]�-=Ge@b710+Bhh		Z[CS

DGEB@=<;:9853/.(&" 
--
+2>;2!546?>54&#"#"&/>%37#"/733!+>;f4U<!*6�/��
�, <-.9	G����k	'�l��i�,L2. M�6M/(E>:�M+
�455370*jj3�+X	8��zU�v\ D}�NT^x@uJ	
%RB

h		h
	
	[[
\SCS
D^\YWTSGEA?;:980.)'!NN!#+3+#5!"&/32#".'763232>54.#5>54&#"#"&/>4673+>;m
Rm��
V|�B3R; wBE*E[09T=+7+ / 'A/WG:009	C,AT���,L2. MA��9��3D(�-N>7T91H/
 (+W<424/(5O5�\,���\ ,��)=9@6BhfSCTD('#-$+#".54>?332>324>32#".KXh<O�b8-ERG3z-EOE-":O-=W<&�q!..""..!�4(,RvKLjL601!��,>2/<P;,E1$."".-""-��
I�&$	k��
I�&$k��
I�&$
v��
I�&$v��
I�&$
v��
I-&$s����:@7BYYQCS
D#	+!!!!!!!+!���</��=a��1�Գ%���^���$�������)EZ��	�K2K�PX@:>
IB@:>
IBYK�	PX@0hfSCSC	SDK�
PX@0hfSCSC	SDK�PX@0hfSCSC	SD@7hf	hSCSCSDYYY@GE=<861/'% KK
+232654.'7.546$32#".#"32>7632#"&'76� *+)<&$��Vi�	���Y?
(6Jb@s��MM��i@fWK&
LS�ZQ 9P0)J�	!vu����kbTY

 O�҂�ґL 1"
Sap7E6 3$7���!�&(	7���!�&(7���!�&(
B���!�&(
B������&,	������&,�����{�&,
����x�&,
2��!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>2���ff��������H��t��}��Ut��H�g��������g�2�АL�r�L����8�&1���\����&2	���\����&2���\����&2
���\����&2���\����&2
�~�X�	(+		'	7	���b_����_d��_YX�����`b��`dY`��X\����!-8h@21&%BK�PX@kCSCSD@jkSCSDY�)*%(%$+#"&'+&546$327>;.#"4&'32>�f����l�Od:N�p{f��s�SR  d�gp�AKE�<�Ws��H�A<�qt�t��H̡���k10�b ��
�l:6o�b�꫇�I�*+N�҄~�H��FM��������&8	�������&8�������&8
�������&8
�����&<9��.@+[[C
D!+#332#'32>54&+����ɄAF�ȁ��SV,��������?t�ed�xC�,OnB�����v�HwK�PX�B�BYK�PX@hSCSD@#hSC
CSDY@CB=;%# HH+2#"&'7>3232>54.54>54.#"#4>�g�b/+@K@+5P]P59d�Oa�<)(7K5,F18TbT8-CNC-8Y?DoO+�E���<]n3<VB203 '4-/FfNNzU-E6D
".@%8F3*:SB5O?6<G0 A4!*T~T�&�h�zB��\��z�&DC���\��z�&Dv���\��z�&D����\��z�&D����\��z{&Dj���\��z�&D��\��CQ\�@A;BK�	PX@5hh

[S	CSDK�PX@5hh

[S	CSD@?hh

[S	CSCSDYY@&SRXWR\S\MKED?=8631.-%#
	CC+2#!32>32#"&'#".54>754&#"#"&/>32>32>5"!4.�R�g;��.MiAE\=&/!Wcj4u�7Wjw;ErS-B��ecAYA/ T�qx�!6���{�l1dQ9cI*�=`E)�<W@z�p)[�Z,$	=(;&qt>X8#FjH<t\;2v~#*#9QPf[Xg��#8H*WP$JnJ�)NpFAoP-J��H�K�PX@7;
FB@7;
FBYK�PX@-hffSCTD@3hfffSCTDY@DB42/-%# HH	+232654.'7.54>32#".#"32>32#"&'76� *+)<&%S�f:?y�sj�?/#6M8JrM'*LmDAT8$2;�aZQ 9P0)J�	!yO��qq��NE?@5d�X\�a3&	AHJ:E6 3$7��J����&HC���J����&Hv���J����&H����J���{&Hj�������&�C����(�&�v�����6�&�������){&�j�L���4H6@3:0B43@[SD65@>5H6H.,$"+.54?.'.54?7#".54>32.'2>7.#"�g-e9`�Q�#a<cF'>{�xb�}H>t�hd�Au^�_GsQ.4Kc>KqL'.Pi)
H"><0z9
C1|��n��VB{�p^�~JVW��@���6m�o+Q?%2WwDQV-�����&Q���H���&RC���H���&Rv���H���&R����H���&R����H��{&Rj�d�"�++@([YOSG(((%+!!4>32#".4>32#".d��Bb!--""--!!--""--!��."".-""-�S."".-""-@��-I!+5t@43%$BAK�	PX@ jkSCSD@ jkSCSDY@
-,,5-5%%(%'+#"&'+7.54>327>;&#"2>54'�=BC}�oL�67;C�BFD~�oO�8D  Z��;�IoLtO(7KsO(4�OFtD�vx��I" J�E�|w��J&#[���aN86d��$5d�Z�`��0��z����&XC���z����&Xv���z����&X����z���{&Xj�������&\v�����#q@BK�	PX@!CSCSCD@!CSCSCDY@##(#+3>32#"&'"32654.��?�iW�d6<p�f_�3W�71uH��#B`����JYB��~p��QE?�3�PI�B6ʻc�[*�����{&\j�
����'/�K�PX@
,B@
,BYK�PX@!ZC
C	SD@(	hZC
CSDY@)($"
''
+2#"&5467"&'!+3#32>!&'d	]3XeO< ��}�"�=�=%*"1*
�?�
�BOB:e&Z����g'/&+	�G6Q)E\���CS�@;I	BK�PX@1h		[SC
SCSD@8hh		[SC
SCSDY@EDKJDSES%##.%#'+!32>32#"&54>7&/#".54>754&#"#"&/>322>75z*"1*
	]3Xe'5
(LT_:;gL-B��ecAYA/	 T�vU�Z.�2/NE?{�l1,<'/&+	BOB83- ^$9'!BeE<oV7Ovy!)!9QP8d�U��#2 �2D*(:%��Z��	�&&���J���&Fv����4�&�K�PX�B�	BYK�PX@*YQCQ
C	
SD@1
		hYQCQ
C		SDY@#!
&&+2#"&5467!!!!!!#32>	]3XeO<�Zs�P-���[*"1*
�BOB:e&���$���'/&+	J���<E�K�PX@
-B@
-BYK�PX@2h		[SCSC
SD@9h
h		[SCSCSDY@>=A@=E>E97+)&$ 
<<+2#"&5467.54>32#!32>3232>"!4.�	]3XeB4g�~FAz�n[�p?�^0TtHCaF/22�R'!1*
���'"B_�BOB5]%H�ȁj��M=s�l*`�_/$A<G&.&+	U��>gK)�X�@C
D+#X����,�#@ 
BCR
D+%!!54?3����l�һ��%ā��"�*_�
V�6K�#@ 
BC
D+7#54?���������MfC��LiD���8�&1������&Qv\��'�02@
BK�PX@"YS
C	S
DK�"PX@,YSCQ
C	S
DK�,PX@6YSCQ
C	Q
C	SDK�0PX@4YSCQ
C	Q
C	SD@2YSCQ
CQ
C		SDYYYY@-+#!(#+!!!!!5#".54>3254.#"32>'�P-�����T����\\�ꎡ�T@w�hh�xAAx�hh�w@���$����x�k�
��
�l�y�3�ӔOO�ӄ�ӓNN��H��u0@K�@.
BK�	PX@,h

[
	SCSD@,h

[
	SCSDY@$BA21GFAKBK:81@2@,*" 
	00+2#!32>32#"&'#".54>32>2654.#""!4.�R�g;��.MiA=Y@-3!Wcj4w�76��d�u@@w�f��52�����"DhEGhE"�e=`E*�<W@z�p)[�Z,$A(;&swpzI��xw��Jyni~�xɴZ�b44b�Z��)NpFAoP-��:����&6��>���&Vv���:����&6��>���&V������&<
D��V��&=N��FU�&]v���V�&=X��FU�&]����V��&=X��FU�&]��j����#6@3
BYSCTD###"+#5432>7'.=37>3#"!�Y��<-Q?,Y����.Q@-	B�&͹^9:\D�I�ƿb:]D���d�
@BkD' +#"/+3dw��{ߦ�~~	�d�@BkD+ +32>?>;#{��wߦ�
}	

}	�����RDq �D� @WD
+".5332>532MhA~"9++9"~Ai�+Ib7!9((9!7bI+����@SD($+#".54>32�#.-""-.#:-""-/##/jk��=K�PX@WSD@[OSGY�$&($+4>32#".732654&#"j 7H()I8  8I)(H7 d6/-77-/6#*D22D*)D00D),88,-88����
YK�PX@B@@B@YK�PX@
SD@jSDY@+2#"&54>732>�	]3Xe+;"\*"1*
�BOB;6/
'/&+	�Y�QK�.PX@WSD@O[SGY@
+2673#".#"#4>32�$'l/A(#=60Ho0B'#=6/-*,/O8"X0O9"^���	#@ SD




	#++7>3!+7>3��J�
!!��V�!������
�0����!Y�BK�(PX@SCS
D@SC
CSDY@! 6##++#!#"&'7>3265#54>3����sy�"BB9�	�H$��r��w�K	>B|@
�
��@MQE+!!� �����
��@MQE+!!�2����:�'��(+.5467rYP7
�0a0Z�E"
,16 D&
Z�F��(+'.547>54&'&547YO7
�0`0[�E"
-16 D&Z��F��(+%'.547>54&'&547YO7
�0`0[�E"
-16 D&:�W�1�(+.5467.5467rYP7
�YP7
�0a0Z�E"
,16 D&
,0a0Z�E"
,16 D&
Z�v�1�(+'.547>54&'&547%'.547>54&'&547YO7
�YO7
�0`0[�E"
-16 D&,0`0[�E"
-16 D&Z��v�1�(+%'.547>54&'&547%'.547>54&'&547YO7
�YO7
�0`0[�E"
-16 D&,0`0[�E"
-16 D&v���3@0
	BCSCD#$&"+4632632>72!#"'!v)+"LPP'(57&N�E,(�x&75(�w�0	
��0<�`��	�v���/G@D
	%$ B[C	SCD/.$$#$&"
+4632632>72!!#.'#"'"&=!!v)+"LPP'(57&N�E,(�x�(,E�N&75(N�E+)��w�0	
��0<��<0��0<X����,K�PX@SD@OSGY�($+4>32#".�;d�LM�e;;e�ML�d;SM�e;;e�MM�d;;d�X��V�';@SD((((($+74>32#".%4>32#".%4>32#".X!..""..!!..""..!��!..""..!n."".-""-."".-""-."".-""-H����'1EYm��K�PX@+[	[SC
		S

DK�"PX@/[	[SC
C
		S
D@3[	[CSC
C
		S
DYY@~|trjh`^VT((%#&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�4Wt?DsV00VsDCuU1�1A%%A00A%%A1�	���
�54Ws?DsV00VsDCtV0�1A%%A00A%%A1h4Wt?DsV00VsDCuU1�1A%%A00A%%A1?T�[00[�TV�\00\�VB\;;\BA[99[}
��
RT�[00[�TV�\00\�VB]::]BAZ99ZAT�[00[�TV�\00\�VB]::]BAZ99Z�����(+5��:
�
�:�
��
��
�����(+'&54767&'&54?�:
�
�
:�{

�D#�	@C
D#"+'+>;,L2. M5\ "��r�G[@X	5	Bh		h
[	[SC
S


DGF@?>=9720"###%$+3>32#".#"!#!!#!32>32#".'#53&45467#"�_��l��F=%>aK�� #���j��6R<+ KFЏt��W����~ˏLdXD	
&.&�7(8�� % FfqO�Ӄf)@I)�&C@@BhS	CS	D&&!4)
+>7>;#7+"'#32'###5��	jn	�
�nj�~�U/
��mK��MH��P
i��iV~�71@.1BSCS
D76***+!>54.#"!"&=!5.54>32!#DQ�c7E{�dd�{E7b�Q�$�`�l;c���c;m�`�$�Ag�]k�m88m�k]�gA�J#d�`��e�֚VV�րe��`�d#\��2�*>C@@0Bh[SCSD,+64+>,>#'(($+>32#".54>32>54&#"#"&'2>7.#"\'INV3Z�h9I�ݔV�h:L��ph�0�|*G8*
xBw`G
&>W:T�X- <U9*J�ʀ���9k�_sʔVYV%C����7p�s,S@&>m�WAfF%b�@	BCR
D+3!%!.'`�S��M��				��g��:"";>���$@!QCD+##!##5���������W��W�T���&@#BQCQD+!!!!5467	.5T��e=����Q	
u�����;4�;�A�
�\��@MQE+!!�\���.��"@
Bj[
D,# +#"&=!2>7>;#�)O�	�s�֕�!)9�e D"8G�P:� �';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+%".'#".54>32>32%2>7.#"!2>54.#"�8[MAAL\7>qU22Uq>7\LAAM[8>pV22Vp�O$>7227>$$?00?�$?//?$$>8228>�";L**L;"0Y|LL|X1";L**L;"1X|LL|Y0�5E''E4/H00H//H00H/4E''E5����\�#(@%BSCSD6''"+>32#"#"&'7>32>7v��&E do�
Ac�K#J
	 :W=%C��V	
mv��f�_-
L
;]B�~��7�@0!/"BK�	PX@+[[	O[	SGK�PX@$[[	WSD@+[[	O[	SGYY@42+)&$77

+2>7#".#"'>322>7#".#"'>326."	#p=4ge_-8."	#qB5hd_-6."	#p=4ge_-8."	#qB5hd_Zr/.!(!
m31!)!��
q0.!)!m31!(!���~kK�PX@)^_	ZMQE@'jk	ZMQEY@

+!733!!!#7!5!7!��r�r��_��2w�w��K_�V���ȇ�����P��!@@MQE+!!��G.32�����yz�
�z{�
��P��!@	@MQE+5467%67.'%.=!5!��)81�G��J��z�
�z�������"@
BMQE+3	#>7	&'��|��z|�	��
�5���4��&&EF+#&�����@CD+3#�����!a@BK�2PX@SCQC
D@YSC
DY@!!U%+3'.=354>32#"&#"!#!�p�:t�s&O��d��T]
I8]�p>

]
��3�`������BK�&PX@SCQC
DK�2PX@"CSCQC
D@ YCSC
DYY@A!%	+3'.=354>32;#.#"!!�p�4h�hS�Hd�6m(����]
I6T�pB
�Y*��6��������
@SD


+2+h
>1P
2H4��
��	@ja		+2#"&'%�  Ӌ���
����v�'@OSG((($+#".54>32#".54>32�)'')�((((�''))''))D'"�@MQE+!!D�"�j�
��@ja
#++7>3�����
���
��
x�@Bja* +#"&/&'+73x�	��	��
__���
x�@
Bja,!+#'32>?>;���	��	�
�^^�J�
(@%jOSG


+"&53326533��sNVVNs��sr;==;i|��@OSG($+#".54>32�"-,!!,-"�,!!,,"",v��-!@[OSG$&($+4>32#".732654&#"v3D&'E55E'&D3Y6/-77-/6{'B//B'&@..@&+99+-88V�1@.O[SG
+2673#".#"#4>32�#%b*>(#@;4"%d+?'#@:4)%+H5+$+I4N
��	+@(OSG




	#++7>3!+7>3��V�&!��`�( ��
��
��|��
@SD


+2+� 
>9�
!;ZBG���C�_<��ʓ^p�ӡ�D���-	��V	�D�C�'-�����6�j$H~R��X�XJ `�d�^�d�X���<���h�l�(�l�l�n�`������������"lVP
�ZZ����l��Z��f�x<R��0���<\��<\�$:���P���VX���XZ��f&�\^��J^HJ��2X�������j�X�XHP�^H&�d>�,Xz���FX,X�XX�t������4���,X��rf<D�\�����d<DfF�d�R�Tf�Xz:*"|f��x�H���f�f�D,P
P
P
P
P
P
B��ZZ��������f��f�f��f��*2��<\<\<\<\<\�~<\��������������\�\�\�\�\�\`\�JJJJJ�������RLX�XHXHXHXHXH�dX@XzXzXzXzP�P
�\ZZ�J��J�>,�6��X��\�HH:d>$:d>��V�F�V�F�V�F�jffff f�fjf�ff^�0X�j��:�Z�Z�:�Z�Z�v�v���X	Hx�x�f�D�"�@�V�\pX>XT��z.X: ��������������t�f�f��f��fDf�f��f��ff�fvffNf�l�#`�	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J
	�J
�
�N
�
�J
#��
$�J
&��
*��
2��
4��
90
:0
<
?0
D��
F��
G��
H��
R��
T��
m�N
o�N
y�N
}�N
��J
��J
��J
��J
��J
��J
��J
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�J
��
��
��
��
��
��
�
�N
�N
�
�
�N
�N
�N
��J#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������
	�J
�
�N
�
�J
#��
$�J
&��
*��
2��
4��
90
:0
<
?0
D��
F��
G��
H��
R��
T��
m�N
o�N
y�N
}�N
��J
��J
��J
��J
��J
��J
��J
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�J
��
��
��
��
��
��
�
�N
�N
�
�
�N
�N
�N
��J�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x���N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N����
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��0	�x
0
0�@���@�x����"0#��$�x&��*��-�h2��4��D��F��G��H��I��J�xP��Q��R��S��T��U��V��W��X��Y��[��\��]��l0m��o��r0t:u:w��y��{:|0}����x��x��x��x��x��x��x����������������������������������������������������������������������������������������������x�����������������0�0�@�0�0�@����0��x#��#	��#
��#��#
��#��#��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#��#��#���#���$�J$
�J$
�J$��$"��$#��$&��$*��$-2$2��$4��$7�|$8��$9�x$:��$<�\$?�x$Y��$\��$l�J$m��$o��$r�J$t�H$u�H$y��${�H$|�J$}��$���$���$���$���$���$���$���$���$���$���$���$��\$��$��$�\$��$��$�J$�J$�J$�J$��$��$��$��J&�j&m�j&o�j&y�j&}�j&�j&�j&�j&�j&�j'��'	��'
��'��'
��'��'��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'��'��'���'���)	�|)�L)�L)�|)��)��)")$�|)-�:)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)��|)��|)��|)��|)��|)��|)��|)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)�|)��)��)��)��)�L)�L)��|-	��-��-��-��-$��-���-���-���-���-���-���-���-��-��-��-���.��.#��.&��.*��.2��.4��.F��.G��.H��.I��.R��.T��.W��.Y��.Z��.\��.m��.o��.y��.}��.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.��.��.��.��.��.��.��.��.��.��/��/
��/
��/6/�:/6/"��/#��/&��/*��/2��/4��/7�T/9�J/:�h/<�,/?�J/F��/G��/H��/R��/T��/Y��/Z��/\��/l��/m�:/o�:/r��/t�6/u�6/y�:/{�6/|��/}�:/���/���/���/���/���/���/���/��,/���/���/���/���/���/���/���/���/���/���/���/���/��/��/��/��/��/�,/�:/�:/��/��/�6/��/��/�6/�:/�:/�:/���2��2	��2
��2��2
��2��2��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2��2��2���2���3	�v3�3�3�v3$�v3-�J3D��3F��3G��3H��3R��3T��3��v3��v3��v3��v3��v3��v3��v3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3�v3��3��3��3��3�3�3��v4��4	��4
��4��4
��4��4��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4��4��4���4���5#��5&��5*��52��54��57��58��5���5���5���5���5���5���5���5���5���5���5���5��5��7	�|7�L7�L7�L7�|7�`7�`7#��7$�|7&��7*��7-�872��74��7D�7F�.7G�.7H�.7J�D7P�`7Q�`7R�.7S�`7T�.7U�`7V�^7X�`7Y�L7Z�t7[�p7\�L7]��7m�L7o�L7w�`7y�L7}�L7��|7��|7��|7��|7��|7��|7��|7���7���7���7���7���7���7���7��7��7��7��7��7��7��7��.7��.7��.7��.7��.7��.7��`7��.7��.7��.7��.7��.7��.7��`7��`7��`7��`7�|7�7��7�.7�.7�`7��7�.7�L7�L7�L7�L7�L7�L7�L7��|8	��8��8��8��8$��8���8���8���8���8���8���8���8��8��8��8���909	�x9
09
09�@9��9�@9�x9��9��9"09#��9$�x9&��9*��9-�h92��94��9D��9F��9G��9H��9I��9J�x9P��9Q��9R��9S��9T��9U��9V��9W��9X��9Y��9[��9\��9]��9l09m��9o��9r09t:9u:9w��9y��9{:9|09}��9��x9��x9��x9��x9��x9��x9��x9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9�x9��9��9��9��9��9��9��9�9�9�09�09�@9�09�09�@9�9�9�9�09��x:0:	��:
0:
0:��:��:��:��:"":$��:-��:D��:F��:G��:H��:J��:R��:T��:V��:l0:m��:o��:r0:t0:u0:y��:{0:|0:}��:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:�0:�0:�:�0:�0:�:��:��:��:�0:���;��;#��;&��;*��;2��;4��;F��;G��;H��;I��;R��;T��;W��;Y��;Z��;\��;m��;o��;y��;}��;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;��;��;��;��;��;��;��;��;��;��<<	�\<
<
<�h<�`<�h<�\<��<��<""<#��<$�\<&��<*��<-�8<2��<4��<D��<F�`<G�`<H�`<J�T<P��<Q��<R�`<S��<T�`<U��<V��<X��<Y��<Z��<[�|<\��<l<m�`<o�`<r<t2<u2<w��<y�`<{2<|<}�`<��\<��\<��\<��\<��\<��\<��\<���<���<���<���<���<���<���<���<���<���<���<���<���<���<��`<��`<��`<��`<��`<��`<���<��`<��`<��`<��`<��`<��`<���<���<���<���<�\<��<��<�`<�`<��<��<�`<�`<�`<�<�<�h<�<�<�h<�`<�`<�`<�<��\=��=""=#��=&��=*��=2��=4��=F��=G��=H��=R��=T��=V��=Y��=\��=m��=o��=y��=}��=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=��=��=��=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>F��>G��>H��>R��>T��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��?�J?
�J?
�J?��?"��?#��?&��?*��?-2?2��?4��?7�|?8��?9�x?:��?<�\??�x?Y��?\��?l�J?m��?o��?r�J?t�H?u�H?y��?{�H?|�J?}��?���?���?���?���?���?���?���?���?���?���?���?��\?��?��?�\?��?��?�J?�J?�J?�J?��?��?��?��JD��D
��D
��DY��DZ��D\��Dl��Dr��Dt��Du��D{��D|��D�D�D�D�D���E��E
��E��E
��E9��E:��E?��E@��EY��E[��E\��E`��El��Er��E|��E�E�E�E�E���H��H
��H��H
��H9��H:��H?��H@��HY��H[��H\��H`��Hl��Hr��H|��H�H�H�H�H���IDI
DI
DI�~I�~IlDIrDItdIudI{dI|DI�DI�DI�~I�DI�DI�~I�DK��K
��K
��KY��KZ��K\��Kl��Kr��Kt��Ku��K{��K|��K�K�K�K�K���NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��P��P
��P
��PY��PZ��P\��Pl��Pr��Pt��Pu��P{��P|��P�P�P�P�P���Q��Q
��Q
��QY��QZ��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q�Q�Q�Q�Q���R��R
��R��R
��R9��R:��R?��R@��RY��R[��R\��R`��Rl��Rr��R|��R�R�R�R�R���S��S
��S��S
��S9��S:��S?��S@��SY��S[��S\��S`��Sl��Sr��S|��S�S�S�S�S���U�|U�|UD��U���U���U���U���U���U���U���U��U�|U�|Y	��Y�|Y�|Y��Y$��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y�|Y�|Y���Z��Z��Z��Z��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��\	��\�|\�|\��\$��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\�|\�|\���^#��^&��^*��^2��^4��^F��^G��^H��^R��^T��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��l	�Jl�l�Nl�l�Jl#��l$�Jl&��l*��l2��l4��l90l:0l<l?0lD��lF��lG��lH��lR��lT��lm�Nlo�Nly�Nl}�Nl��Jl��Jl��Jl��Jl��Jl��Jl��Jl���l���l���l���l���l���l���l�l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�Jl��l��l��l��l��l��l�l�Nl�Nl�l�l�Nl�Nl�Nl��Jm�Nm	��m
�Nm
�Nm�xm�xm��m$��m7�Lm9��m:��m;��m<�`m=��m?��ml�Nmr�Nm|�Nm���m���m���m���m���m���m���m��`m��m�`m��m��m��m�Nm�Nm�xm�Nm�Nm�xm��Nm���o�No	��o
�No
�No�xo�xo��o$��o7�Lo9��o:��o;��o<�`o=��o?��ol�Nor�No|�No���o���o���o���o���o���o���o��`o��o�`o��o��o��o�No�No�xo�No�No�xo��No���p��p	��p
��p��p
��p��p��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p��p��p���p���r	�Jr�r�Nr�r�Jr#��r$�Jr&��r*��r2��r4��r90r:0r<r?0rD��rF��rG��rH��rR��rT��rm�Nro�Nry�Nr}�Nr��Jr��Jr��Jr��Jr��Jr��Jr��Jr���r���r���r���r���r���r���r�r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�Jr��r��r��r��r��r��r�r�Nr�Nr�r�r�Nr�Nr�Nr��Jt	�Ht�Ht$�Ht9:t::t<(t?:t��Ht��Ht��Ht��Ht��Ht��Ht��Ht�(t�Ht�(t��Hu	�Hu�Hu$�Hu9:u::u<(u?:u��Hu��Hu��Hu��Hu��Hu��Hu��Hu�(u�Hu�(u��Hy�Ny	��y
�Ny
�Ny�xy�xy��y$��y7�Ly9��y:��y;��y<�`y=��y?��yl�Nyr�Ny|�Ny���y���y���y���y���y���y���y��`y��y�`y��y��y��y�Ny�Ny�xy�Ny�Ny�xy��Ny���{	�H{�H{$�H{9:{::{<({?:{��H{��H{��H{��H{��H{��H{��H{�({�H{�({��H|	�J|�|�N|�|�J|#��|$�J|&��|*��|2��|4��|90|:0|<|?0|D��|F��|G��|H��|R��|T��|m�N|o�N|y�N|}�N|��J|��J|��J|��J|��J|��J|��J|���|���|���|���|���|���|���|�|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�J|��|��|��|��|��|��|�|�N|�N|�|�|�N|�N|�N|��J}�N}	��}
�N}
�N}�x}�x}��}$��}7�L}9��}:��};��}<�`}=��}?��}l�N}r�N}|�N}���}���}���}���}���}���}���}��`}��}�`}��}��}��}�N}�N}�x}�N}�N}�x}��N}�����J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��j�m�j�o�j�y�j�}�j��j��j��j��j��j����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|����������������������������������������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$���������������������������������������������	�\�
�
��h��`��h��\�������""�#���$�\�&���*���-�8�2���4���D���F�`�G�`�H�`�J�T�P���Q���R�`�S���T�`�U���V���X���Y���Z���[�|�\���l�m�`�o�`�r�t2�u2�w���y�`�{2�|�}�`���\���\���\���\���\���\���\�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������\��������`��`��������`��`��`������h������h��`��`��`�����\����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J����
���
���Y���Z���\���l���r���t���u���{���|����������������j�m�j�o�j�y�j�}�j��j��j��j��j��j����
������
���9���:���?���@���Y���[���\���`���l���r���|����������������t�
�t�
�t����9�^�:���<�h�?�^�Y���\���l�t�m���o���r�t�t�|�u�|�y���{�|�|�t�}�����h��h������t��t��t��t���������t����
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������	�\�
�
��h��`��h��\�������""�#���$�\�&���*���-�8�2���4���D���F�`�G�`�H�`�J�T�P���Q���R�`�S���T�`�U���V���X���Y���Z���[�|�\���l�m�`�o�`�r�t2�u2�w���y�`�{2�|�}�`���\���\���\���\���\���\���\�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������\��������`��`��������`��`��`������h������h��`��`��`�����\����""�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������""�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������""�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}���������������������������������������������������������������������������������������������������������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N�����	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J�	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J���
��
���x�#���&���*���2���4���7�L�9�L�:���<�h�?�L�Y�|�Z���\�|�l��m�x�o�x�r��y�x�|��}�x�������������������������������h��������h��x��x����������x��x��x����	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J�	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J���
��
���x�#���&���*���2���4���7�L�9�L�:���<�h�?�L�Y�|�Z���\�|�l��m�x�o�x�r��y�x�|��}�x�������������������������������h��������h��x��x����������x��x��x�����N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N�����	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J������D��(\��8R|�� �Z� R�	@	�

*
N
t
���:��

:
�
�
�:���*z�>�&`��.d���8Tv��l�HP�Tn�"���`�N��*Z��N����  z � �!�!�"�# #j#�#�$n$�$�%%l%�&&X&�&�'('l'�'�(l))�*>*J*V*b*n*z*�*�+�+�+�+�,,, ,,,8,�,�,�,�,�,�,�,�-�-�-�-�-�-�..�.�.�.�.�.�.�/�0�0�0�0�0�0�0�0�11�1�1�1�1�1�1�2(2�2�2�2�2�2�3d3p44�4�4�5d6"6<6p6�6�6�7�8T8`8l8x8�8�8�8�8�8�8�8�9*9R9�9�9�9�:4:�:�;;x;�;�;�<<0<~<�==j=�>>p?~?�?�?�@~@�ADA�A�BBNBhB�C8C�D8D�D�EEHE^E�F8F`F�F�F�GG4GbG�G�G�H@HzH��b"/n�	�n���*��(��0�/	G
�V22J
�|>	X	l	t	T�	�	P�	�	`>	0�		�	
��	0
�	d
�	
�8	4�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoRegulartyPolandLukaszDziedzic: Lato Regular: 2013Lato RegularVersion 1.105; Western+Polish opensourceLato-RegularLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoRegulartyPolandLukaszDziedzic: Lato Regular: 2013Lato-RegularVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFL�tx	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt�������������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK)J[��>�q�qUshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfnu�[���GPOS�jN�K�GSUBV.TL�OS/2�8�M�`cmapRԟ�N@�cvt &�7g|8fpgm�zAg�	�gaspgtglyf�i�S(��head�DeJ޼6hheaix��$hmtxESvJ�Tkern�2���ll�locaK�p�PP,maxp>
�R| name�
U�R�:post:�\�c��prep�x9�qH�
0JDFLTlatn����kernkernJnv�$R�
�^�	h
B
l�&��rj����Z���j��L��*|�DV�:�� �!.!�##L#�$4$~%�&J'$'�(�)�*�+f+�,6,�-�.(.�/t/�/�0:0|2"2�33T3�3�4&4l4�55b5�66L6�6�7B7�7�888�9d9�9�:&:�:�;@<�=�>j?,?�@hA�B�CzD�E�F�G*G�HfI�K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��VK	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��k7	��
7
7�G���G������"<#��$��&��*��-�o2��4��D��F��G��H��I��J�{P��Q��R��S��T��U��V��W��X��Y��[��\��]��l7m��o��r7tFuFw��y��{F|7}���������������������������������������������������������������������������������������������������������������������������������������7�7�G�7�7�G����7���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V
�em�eo�ey�e}�e�e�e�e�e�e)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������4	���L�L������"$��-�.F��G��H��P��Q��R��S��T��U��X��w�������������������������������������������������������������������������������������L�L���	��������$��������������������������������1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������I��
��
��4�$4"��#��&��*��2��4��7�[9�V:�y<�=?�VF��G��H��R��T��Y��Z��\��l��m�$o�$r��t�Bu�By�${�B|��}�$�����������������������=�����������������������������������������������=�$�$�����4�����4�$�$�$���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������.	������$��-�VD��F��G��H��R��T�����������������������������������������������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������#��&��*��2��4��7��8���������������������������������������[	���L�L�L���`�`#��$��&��*��-�82��4��D�F�)G�)H�)J�>P�`Q�`R�)S�`T�)U�`V�DX�`Y�LZ�t[�g\�L]��m�Lo�Lw�`y�L}�L����������������������������������������������������������)��)��)��)��)��)��`��)��)��)��)��)��)��`��`��`��`������)�)�`���)�L�L�L�L�L�L�L���	��������$��������������������������������k7	��
7
7�G���G������"<#��$��&��*��-�o2��4��D��F��G��H��I��J�{P��Q��R��S��T��U��V��W��X��Y��[��\��]��l7m��o��r7tFuFw��y��{F|7}���������������������������������������������������������������������������������������������������������������������������������������7�7�G�7�7�G����7���I7	��
7
7��������"%$��-��D��F��G��H��J��R��T��V��l7m��o��r7t7u7y��{7|7}�����������������������������������������������������������������������������������������������7�7��7�7��������7���1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������i	�t

�y�`�y�t����"%#��$�t&��*��-�82��4��D��F�`G�`H�`J�[P��Q��R�`S��T�`U��V��X��Y��Z��[��\��lm�`o�`rt-u-w��y�`{-|}�`��t��t��t��t��t��t��t��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������t�����`�`�����`�`�`���y���y�`�`�`���t0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������K
K
K�y�ylKrKtdud{d|K�K�K�y�K�K�y�K��
��
��Y��Z��\��l��r��t��u��{��|���������F��G��H��R��T����������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������
����D���������������������������$	��������$��F��G��H��R��T��������������������������������������������������������������������������������F��G��H��R��T��������������������������������������������$	��������$��F��G��H��R��T������������������������������������������������������������������������"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V	�`�`$�`9F:F<(?F��`��`��`��`��`��`��`�(�`�(��`	�`�`$�`9F:F<(?F��`��`��`��`��`��`��`�(�`�(��`'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���	�`�`$�`9F:F<(?F��`��`��`��`��`��`��`�(�`�(��`K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V
�em�eo�ey�e}�e�e�e�e�e�e)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������i	�t

�y�`�y�t����"%#��$�t&��*��-�82��4��D��F�`G�`H�`J�[P��Q��R�`S��T�`U��V��X��Y��Z��[��\��lm�`o�`rt-u-w��y�`{-|}�`��t��t��t��t��t��t��t��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������t�����`�`�����`�`�`���y���y�`�`�`���t)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|��������������������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V��
��
��Y��Z��\��l��r��t��u��{��|���������
�em�eo�ey�e}�e�e�e�e�e�e��
����
��9��:��?��@��Y��[��\��`��l��r��|��������� �t
�t
�t�o9�j:��<�y?�jY��\��l�tm�oo�or�tt��u��y�o{��|�t}�o��y�y�o�o�t�t�t�t�o�o�o��t��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������i	�t

�y�`�y�t����"%#��$�t&��*��-�82��4��D��F�`G�`H�`J�[P��Q��R�`S��T�`U��V��X��Y��Z��[��\��lm�`o�`rt-u-w��y�`{-|}�`��t��t��t��t��t��t��t��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������t�����`�`�����`�`�`���y���y�`�`�`���t0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��VK	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��VK	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������Vv

#$&')-./2345789:;<=>?DEHIKNPQRSUYZ[\^lmoprtuy{|}��������������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I�,xx�D���P`KtyPL@�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ/��'37;��BK�	PX@3	`f[[		QCQ
D@4hf[[		QCQ
DY@
;:$$#,$
+>32#'&>54.#"#"'4632#"&!!7!!3<G*6]E'!1:3%
A 1;2"/?#.B.{,! ,, !,����]#[��n$;S47O;-('rz/**5C/$8'�� ..  ..��y$?����
&@#QCSD

+#.54>32#"&tA1!""'5���-PS\88\SP-<��""!5��)�
,@)
BQD

$+#"&/!#"&/		u		��ܙ�$�ܙ�$V<�6:��5BK�-PX@(
Y	CQ
C
D@&
Z
Y	C
DY@:98766421/-,(&#"!#!+#"&547!+#"&5<?3#76;>;!323+32%!!�^)V��V*^��R�(�W*_*_*W�(�R���*R����E��m�
	
�&!��F��p&!�{,F����
\;FQ�@)
!
LA*7BK�PX@2j

h
f_

SC	TD@1j

h
fk

SC	TDY@NMCB;965$#$+.'7632.54>?>;#".'+4.'>��H	&4EX8 D�e>4e�_	$e�?
'?]A/_WJ7:m�f
$�2Tm<P}U,��,Lc8LqL&bP'!'#|4QwZE�e>��K?"!(%�� (4G[<V�sF�
�B\@+��7Yu�>X?-(0K`W����'0DX?@<[	[CSC
C		SDUS((%"&((($
+#".54>324.#"32>>;+#".54>324.#"32>�0Rl<>mP..Pm>>lQ/L#=Q--P<##<P--Q=#eC�
D�0Ql<>mP..Pm>>lQ.L#<Q--Q<##<Q--Q<#3W�X--X�WX�Y--Y�XMnG!!GnMMmF!!Fm�
��PW�X--X�WX�Y--Y�XMoG!!GoMMmF  Fmj��T�@RS@PN9K*$BhfSC
CSDGE0.'%!
@@+2#"&'.#">7>;#"&/#".54>7.54>32>7&'�CxY5
":W;<bF'TX�-57C>*Y�-l~�OK�sG4Z|HGG3^���;^s8F}m[&�5BkJ(�.Ng8D<*%C\7R�V�HH�I
^�[���4X?$2a�ZH�mVP�VFwX2��MrM& 9N/�N_n���
@BQD

$+#"&/		��ܙ�$������(+.54>7�yx*Mi@@iM*
wyv�e�
v���uu���v
��eb�����(+4'&54?'&5476Zyw
*Lj@@jL*xyv���
v���uu���v
��{���51@.1-,($#
	BMQE55+5467'7>7./7.=3>?'.'t����4����
��	m,n
n-n
��	m-m	
n-n	�m��,@)MYQE+!!#!5!i��QN�R���=I�;�I�n��@B?S
D"+74632'&5467>7#"&n0'+/(8"
	%/U#2;0)URL 	

'5@$2d)5z@MQE+!!d�/zQi��"�@SD($+74>32#"&i!""'5M""!5������@kD""++6;[ 'n')-�%I��?�'@SCSD((($+#".54>324.#"32>?P��ii��OO��ii��PdBo�RR�pBBp�RR�oB�WW����WW����HH���GG����*@'
BhCR
D%+%!47#"/3!!5E��
	�J5�'J|"&��	(i��J��2>@;.BhSCQ
D-,+)$"
22+2>3!2!5467>54.#"#"&#'>ZQ�pB1To=�E E#c�o�<fK+4Wq>CqW9
0Kr��/_�`P�~w>�<8"�=rtzENsJ$)Ie<#[�b3����HU@RD
Bhh[SCSDB@;910/.&$HH	+2#".'763232>54.#5>54.#"#"/>eQ�m?+Kf<��Fz�ay�h:&#4KeBZ�[-)`�s\�^02Tp=CpV:1
Jr��-Z�XEoT9��W�l=Ah�@
599-<]s6ApQ/E-NlAKnH"(He>#[�b3?^� @[C
D!#+!+#!"&/3467![
�V�e	�UV��^�4
�j�
/��&�������/@@=-,Bh[QCSD(#&(#"+#!>32#".'763232>54.#"'!��UCx7n�q:N��d;j^N

1MiFR�i;-[�^9�H>o|^�(?q�\p�|B#.'$5d�]L�[3s����02@/B[CSD-+#!	+2#".54676;>32>54.#"t[�o?E{�gc�u@T`�"T�Z4;���1Z�QV�a43]�NX�`2N<m�``�vB@x�mSт��)H#=E�]O�a66_�MQ�[1=a|�/�@QC
D#'++67!"&=/�wA�
���+	��=x���';OD@A
B[SCSD=<)(GE<O=O31(;);''	+".54>7.54>32'2>54.#"2>54.#"Df�yD-RqD>`A"9j�_^�k9"B`>DqR.Dy�fQ�`4Dj�<<�jD4_�QQwN%*QuKKvQ*%Nw6f�ZNzZ<>Vi<K�b88b�K<iV><ZzNZ�f6L-StG]|JJ|]GtS-�1Sj9=iN,,Ni=9jS1��22@/B[SC
D/-%#	+".54>32+>74.#"32>=W�k<Cx�b^�q?-@)��"V�3:�"2Z{IN�]40W{KU�\/Z9j�\[�rA@u�d7ddi<��H*K#@F�M�[32Z}KN}W.:^u���J�#;K�#PX@SCSD@[SDY�(&($+74>32#"&4>32#"&�!""'5!""'5M""!5D""!5��J�-H@
(B?K�#PX@SCS
D@[S
DY�,*$($+4>32#"&4632'&5467>7#"&�!""'50'+/(8"
	%/j""!5�#2;0)URL 	

'5@$2�	�5�(+����!'*)���A��		��A����e!@YMQE+!!!!�;��;��,J�J�	�5�(+546767.'&=�*("���	A	
A�)!����(:9@6BhfSCSD(&#-$+>32#'54>54.#"#"'4>32#"&!DQ`8F|]7/HTI3A0GSG0*H^3BaB&�!""'52'*NqFLnS?78"��)>:<KbC6U;#+#�i""!5l�3Naf@c
U
8Bh[

[	[OSGPOYWOaPaFD<:641/'%NN
+%"&'#".54>3232>54.#"3267632#"$&546$32%2>7.#"�XY8�R8R6A}�t5]%[%09hP/a��}���mq����d
p����zv�����q:e���$MG>P3"Z�g9(;�]W]S'D\5U��V��.I,7 <o�b�ݒHj�������]DA%JPi�%���wS��m��HF?kS6Iv�K(E2��
$@!BZC
D# +!#"&'!+3!.'�O��I�NCf��z����e��{�++�z�*=@:B[SCS
D*(" !+3!2#!2654.#%!2>54&#!��y�t9'JkE��@z�q��c��3`�Y��3b�Y*�����0]�U8hXA��Z�d5�����CkK(K2Rh7��|���2D@ABhfSCSD,*" 	22+%2#".54>32#".#"32>7>�
(,h{�X���be���M�ob/	+=TnF�؜WV��yLwdV*	�+/K5g���
�i+@*-%Y�뒖�W(:'�y�@SCS
D!(!$+#!!24.#!!2>yb��������bjR�Ҁ�c��ҕRĤ���b�b������T�T���"�.@+YQCQ
D+!!!!!"�l����U��S��U��"�	(@%YQC
D		+!!!#"���{g�U��U�v�|��C�4H@E!
Bh[SCSD,*%#44+%2>7!"&=!#".546$32#"'.#"2Ixg]/���5r��Y���dd��Q�vf/		9a�h�ޝUV��C+}	8�	%:'g����g+?),,0&X�쓖�X�� @YC
D+!#!#3!3g��ggvg��Z��l��^�@C
D+!#3^gg�Y����'@$BhCSD#'$+#"&'>7>3232>53�;m�b-\1	#-LzV-g�w�|?	0c�f���"&@#B[C
D'(' +32>7>;#"&'.+#3VT;S��!�S�� [ff�	K
���Xd�V����@CR
D+%!!38���fWW��H� %@"BhC
D!5(+>7>;#47+"'#32z
,GZ����YF;� �
�y��#��J�
�(��@C
D!+2&53#"'#3	�Z1�hY2��6��y��Y�{����'@SCSD((($+#".54>324.#"32>�b������cc������bjR�Ҁ~їSS��~�ҕRĤ���gg����hg������WW�씕�VV���S�*@'[SC
D
!+#!2#%!2>54&#!Vfm��E��u��^�g7���:�����]�q?R4\}J��{����0T@
BK�PX@SCSCD@kSCSDY�(((%&+#"&'#".54>324.#"32>�+PsHpV ��?�N���cc������bjR�Ҁ~їSS��~�ҕR�k��~-�vFg����hg������WW�씕�VV�����"2@/B[SC
D" *!+#!2#"&'.#'32>54&#!Vfi��8i�]�Y�;')��^�g6ƽ��������Q�eA
��>L-TvJ��W����==@:=BhfSCSD;9(&!#!+#".#"#"&'763232>54.54>32~	
)FiMMuO)=d�d==t�l��L	(8J`=T�[0=d�d=6h�bn�H�%-&,Ld7H^B-,5PuWY�tCcV,#)#3XyEKaA,*4Qy[G�e=FH#n� @QC
D+!#!5n�f��W��0W����#@ CSD+%2>53#".53�f�p;fJ��||NjJg;o�IG~�ck��u˗VV��uk��c�~H��@BC
D* +3267>;#Q��P��[��j.46,��y��' @#BC
D,; +32>7>;2>7>;#&'#Ue	
��eN�C\�^�][��u..��u,-��y��4��@BC
D(")!+	32>7>;	#"&'+�e
��
b��e�B
�J]����L
�T�%���	��@BC
D,"+#32>7>;�g��Y��ZH��H?
�v++�s��
$@!QCQ
D

+!!547!5��~�������#�U%�U�����
'@$[OQE

!#+!+32�>�����$
��
$������@kD" +32#"&')'n' �%�"k����
!@[OQE!"+46;#"&=!!k��=���
s
$�� ��@
BkD,!+3#"&'.'+ <UD�	
	�
G���
��L���3@MQE+!5���DDV���	@kD		+2#"&/��6���
�k��C�'7T@Q-Bh[SC
C	SD)(/.(7)7" 	''
+!"/#".54>754&#"#"/>32%2>7)QXf=3`J-H��wuHeF,
N�mPxO(�J:aSH#�ͅ?!6H(@,>aD?lP0h��(0(NP3_�S�x5->$#<S52I/�����#�K�%PX@
B@
BYK�%PX@CSCSD@!CSC
CSDY@##&#+33>32#"&'#"32>54&�`B�m��9o�ih�6hc�?9�ZX�Y-����Xf��m��PQOz�f[��VE@u�b��X��X�,9@6,BhfSCSD(&#(#"+#".#"32>32#".54>321	
#:W>V�[01Z�NHa?%
FXg8_�q?<s�la�8^ =r�ei�o:"("
 4&E��yr��K>5W����#q@
BK�%PX@CSCS
D@!CSC
CSDY@##
+!"/#"&54>323%267.#"c
B�n��9o�ie�6`�^c�?:�XX�Y-��Zj��m��PKHN�Q@f[
UF@u�b��X����%0H@EBh[SCSD'&,+&0'0	%%	+2#!32>32#".54>"!4.T�i;
�14`�TKnK,

Oao8f�xA=s�kMzY7	�,Pp�:o�ip�s:!)!
 4%G��k��JG0Z~NPX/n�_�BK�!PX@SCQC
D@[SC
DY@!$%!	+3'&=354>32#"&#"!!nj�,PqD?)1S<!C��{	'~U�V+
.@gK{G��K����:Pd�@3B+BK�PX@,
[[CS	CSD@/h
[[S	CSDY@RQ\ZQdRdMKA?$"::+23#"'#".5467.54>7.54>4.'32>2>54.#"�Ao,��4]�OVF*0<c�c<>u�gi�k6h[2; -GO3]��1Rkuv3&A.-W~RL�a7��@dD#$Ec??dE$$Ed� !&_6HuS.B+.-QC>rX5+I`6Or@9.-()�[HuT.��/9 
	'1;#,K7 ">V.%B\88]B$$B]88\B%���-@*BCSC
D##+33>32#4&#"�_E�nR}R*_��b�B���Ue4b�W��|��eX��G�&@#SCC
D
+##".54>32_�    ��W!!���G�'4@1	BSCCSD$"!$%+#"&'76323265#".54>32;Y<.
QN�    �4XA%
0XQbW!!���0@-B[CC
D%(%!+3267>;#"&'.+#.�T�I
�S�^-`���{�_

�
�
�
���@C
D+#_��Q����,8@5+
BCSC
D,,##&&!	+332>32>32#4&#"#4&#"�4	BKU/m�ATc4JvS,`~u4_I+_toQ�6��)D1q>Z;1`�Z��|��&KpJ��|��aV����1@.BCSC
D#$!+332>32#4&#"�4	D�oR}R*_��b�B��Vi4b�W��|��eX�W����',@)SCSD''	+2#".54>2>54.#"k�t==t�kk�u==u�kY�Y,,Y�YY�Y--Y��I��uu��HH��uu��I�K=r�dc�s>>s�cd�r=�����$D@ABCSCSCD$$&%!+32>32#"&'"32>54&�4
	B�n��9n�if�6Bc�>9�YX�Y-���C�Zj��m��PJI�g\��VF@u�b��W����#D@ABCSCSCD##&#+##"&54>32763267.#"�`B�l��9o�ig�6	��c�?6�YX�Y-��Xf��m��PNLp�]f[RH@u�b�����8@5BhCSC
D#$%!+332>32#".#"�20�u-L"
!0q�-��y�B
���yY����<=@:<BhfSCSD:8'%" #!+#".#"#"&'7>3232>54.54>32�#9S<6Y?#0NchcN0/Y�Si�<
&=[C?`@!0NcicN0.UzL[�;h4E&/>,  ':T<ApR0C6" % #<Q-2B.  &:S>5bJ,464���@#x@
!BK�PX@%jhQCSD@#jh[SDY@
	##	+"&5#"&=7>;!!32>32�eq��
-9��%2$4&&upu�%d	��G�]);&
**3�����-@*BC
CSD$!#+32673#"/#".5逃a�C`5	E�oS|R*���cX��Vh4b�W|��@
BC
D,!+!#32>7>;T�\KH

	JH�	��*+
��* @#BC
D*!); +32>76;2>76;#"'.'+I�'		�F��F����C�	��**��-*+�(��#v�@BC
D("(!+	3267>;	#"&'+���[
$

X��j[��
��U���Z�	�����h	����@BCD,""++32>7>;{D��[OO	KI����	��
J:�
@QCQ
D+!!547!5!:��d�)q������K&MK?����H3@0*B[[OSG@>;83-+4.#52>54.54>;+";2#".54>�):##:)&HiB7!+G3)55)3G+!7BiH&�!7)=)7!7hhi8=hM+*8P19lii5%>./=%5ijl81P8*+Mh=8ihh��Q�@QD+3#KK�i���H5@2B[[OSGEDCB530-3)++546;2>54.54>7.54>54.+"&=323"}&HiB7	!+G3)55)3G+!	7BiH&)9##9)�7hhi8=hM+*8P18lji5%=/.>%5iil91P8*+Mh=8ihh7!7)=)7����9@6jk[OSG
+2>53#".#"#4>32%=*N <X83kib+&;*M <W84khb70B'7^F('0'0B'7^F('0'���
&@#SCQD

+4>734632#"&A�5'""'5��&-PS\88\SP-���'5""7����0;U@R6&,BjhfkSCTD##'#	+.54>?>;#".'>32+M`�r>@{�s
$W�5		!7P8+KfC'EXh:
$��/Y}N,\�a3J��tp��M�
�:.!��"' 1%�
�b�o@i?q�CQ�:@@=3)Bh[SCS
D#&#%&%"	+46;4>32#"'.#"!#!>3!#!5>5#C�4g�fLtW>&	

->V<NuP(�
�?H?+�6"@2��&]�uC%@V0;.4]�O��'��Yy+(A
(:N4F���D#79@6!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"�($�1�-n?>m-�1�$*)$�2�-n>>m-�1�$)H+Ic88cJ++Jc88cI+�>m-�2�$*)$�2�-n?>m-�2�$)($�2�-n?8bI++Ib88cJ++JcU(� 8@5	B
Z	YC
D *!+!3267>;!!!!#!5!5!�Z�ZO
Z
	YP�Y[��n��_��n��h�g#!'���:v:��~:v��Q�@YQD+3#3#KKKK������}k�H\A@>HZP=#BhfWSDFD-+(&!#!+#".#"#"&'7>3232>54.5467.54>32>54.'(#9S<8[@#2RhmhR2TR6C/Y�Si�<
&>\D>`B"4VmqmV4[g7E.UzL[�;��'CX`c-G>$=QZ]+YJ
5F'.D7.07F]>S{#&bEApR0C6" % "<Q/3L;004EY=M{%%cJ6aK,55��)A5-*+ `=-F7,)'&^'�"W'3K�PX@
SD@OSGY�((($+#".54>32#".54>32�

W









U����,H\�@
BK�PX@4hf[[		SCSDK�PX@4hf[[		SCSD@4hf[[		SCSDYY@
YW*,((#&(%!
+632#".54>32#".#"3264>32#".732>54.#"8;�t`�s@Cx�c4WJ@
!:[DS�a55^�MU{�S4]���dd���]44]���dc���]4;g���hh���g�
;FAv�fd�wB)!5b�WZ�a3)Pc���^44^���cd���^44^���d��hh���ii��j>5�&4B@? ,Bh[WSD('.-'4(4$##' 	+#"&/#".54>754&#"#"/>322>755 

15=$!<.*]�iDI+;(0jCeh��!81+��!*GD$
%9'$A13LO
0-ub��"�D8'����%�%(+55���
	
���
	
�
z
��	��
{
z
��	��
�S��=K�	PX@_MQE@kMQEY�+!#!�=R���'d)5z@MQE+!!d�/zQU����/FO��:BK�PX@/h		[
[SCSDK�PX@/h		[
[SCSD@/h		[
[SCSDYY@00OMIG0F0E)!(*,&+4>32#".732>54.#"#32#"&'.#'32654&+U4]���dd���]44]���dc���]4;g���hh���g�U����u	P
��n�ywlv��c���^44^���cd���^44^���d��hh���ii��yusvd���
_
@a[\T�5%@MQE+!!!��%A[D��'@WSD((($+4>32#".732>54.#"[/Qn??nQ//Qn??nQ/G$>T00T=$$=T00T>$n>mQ..Qm>>lQ//Ql>0T>$$>T00T?$$?TmP�7@4YYMQE
	+!!#!5!!!i��QN�R��R��U��jI�n�I��Ia�;W-g@
+BK�#PX@h[SD@!h[OQEY@(&#!
--+2>3!2!546?>54.#"#"&/>V,N9!*8�'�&�1%'4>H|W1I0(E?;�*�89< #4"G7`fb|=W?�@=BK�PX@,hh[[SD@1hh[[OSGY@;964.-,+#!??	+2#".'7>3232>54.#5>54.#"#"/>\,L7 H<IM%@V0<Q7!$;-)>).J5[Y'3?I{W/C+BWTB0M73C$
(%*4!4%1K?"2!A;`f���	@kD	#++7>3�9���
������0@-BCS
CD&$!#+32673#"/#"&'#"&5逃a�C`5	F�fb�%0���cX��X\MH+X$��6�B��*@'hiSD+##!#".54>3��U��Vg�r==r�g�R�
�
y8b�MP�\2��o�@OSG($+4>32#".�$&&$P&&%%����V@
BK�	PX@^jTD@jjTDY@+232654.'73#"&'76�(390A'*=Y]1D()N
��
,&!�`<;0!��5RO�	BK�PX@jjQD@jjMRFY�$+37#"/733!����:����%~	��c1W;��)@&WSD	+2#".54>2654&#"wBjJ''JjBDjK''KjDhiihkii�*OoEEoO**OoEEoO*��rq��qr�����)�'(+7'&547>7.'&54?'&547>7.'&54?�������	&

%	��
��	&

%	��
�q�#-O@L!	Bh		Z
[CS
D-+(&#"$!"
+%3+#5!"/3%37#"/733!47!+>;�~m?��`C�����:�������( 
*�$�� �#%~	��c1w�}�
d�K�-=Ge@b710+Bhh		Z[CS

DGEB@=<;:9853/.(&#!
--
+2>3!2!546?>54.#"#"&/>%37#"/733!+>;f,N9!*8�'�&�1%'4>I|�����:����( 
*�1I0(E?;�*�89< #4"@>`f%~	��c1�b
dSq�PU_]@N	
$SBK�	PX@B

h		h
	
	[[
\SCS
DK�PX@B

h		h
	
	[[
\SCS
DK�
PX@B

h		h
	
	[[
\SCS
D@B

h		h
	
	[[
\SCS
DYYY@!_]ZXUTKHEC=<;:20)' PP!"+%3+#5!"/32#".'7>3232>54.#5>54.#"#*.'>47!+>;�~m?��`C�Z,L7 H<IM%@V0<Q7!$;-)>).J5[Y'3>J	{�����( 
*�$�� ��/C+BWTB0M73C$
(%*4!4%1K?"2!G5`f���}�
d*����);5@2BhfSCTD('#-$+#".54>?332>324>32#"&�DQ`8E}]70GTJ3A0GTG0*H^3E_@$
		��!""'5�2')MoGLkM924#��*<45E]B6U;#+#O""!5����&$	[����&$[����&$
`����&$`����&$
`����&$`����4@1YYQCS
D"	+!!!!!!!+!����Hj��K��8���
O� i�U��S��U��c7.|���Oh@e<B
M	Bhf
hSCSC	S			DKIA@:820(&!OO+232654.'7.54>32#".#"32>7>32#"&'76�(390A'$��Ze���M�ob/	+=TnF�؜WV��yLwdV*	
(,ey�UY]1D()N
��
,&!sn���
�i+@*-%Y�뒖�W(:'+.J5K<;0!���"�&(	Z���"�&(Z���"�&(
_���"�&(
_����&,	���N�&,��E�&,
	��N�&,
	1��!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>1����bb������R�Ҁ�c��l��ҕR��b��������b���T��@��T������&1���{����&2	���{����&2���{����&2
���{����&2���{����&2
����D�	(+		'	7	�t3����4u��5pn����4t��4vp6��o{����!-9b@
21&%BK�PX@kCSCSD@jkSCSDY�**%(%$+#"&'+7&54>327>;.#"4&'32>�b���s�Q�
 ,�lwc���y�So7�eo�$^U�G�j~їSrVN�E�d�ҕRĤ���g=9��`���hC?��`�갠�R�9<W�씘�R�35V��������&8	�������&8�������&8
�������&8
�����&</�S�.@+[[C
D
!+#3!2#%!2>54&#!Vff��E��u��^�g7����������]�q?R4\}J����'�J>@;BhSC
CSDED?='%" JJ+2#"&'7>3232>54.54>54.#"#4>�U�Z./GRG/!7EIE7!2Z~Me�<

%<Y?;\?!;XfX;0ITI0?fIG}^6_Bu��3Qd2>\G87:%$1$!)<S;DrR-C6" % #=R/CQ4&1K?1H>:DS8I?*+X�^��e�o;��k��C�&DC���k��C�&Dv���k��C�&D����k��Ci&D����k��CW&Dj���k��C�&D��k����BR]�@:@BK�1PX@5hh

[S	CSD@?hh

[S	CSCSDY@&TSYXS]T]NLDC><7520-,$"
	BB+2#!32>32#"&'#".54>754&#"#"&/>32>32>5"!4.�K�`7
�l0X|LGdD&
JZe4��/Uly7?lP.H��wuHeF,M�k~�/���ͅ?!<R1BtW2�HsR1V(He�<s�op�r:!'!
4%��MjBBhI@qV6E��)0)
NP�po��(BY58O2,U|O+4^�RU�]1X��X�Gh@e6:
E	Bhf
hSCSC	S			DCA9842/-%# GG+232654.'7.54>32#".#"32>32#"&'76�(390A'%W�g8<s�la�8	
#:W>V�[01Z�NHa?%
-�jY]1D()N
��
,&!vK��sr��K>5" =r�ei�o:"("
 :NO<;0!��X����&HC���X����&Hv���X����&H����X���W&Hj���"V�&�C������&�v�������&��������W&�j�Y���}6J6@3<2B65@[SD87B@7J8J.,$"+&54?.'.546?7#".54>32.'2>7.#"�~<�J
Z�N�
r?iM*9r�s[�wD:o�g5kcV �n�9X�\2;XvLX�Y-7_}.

m!/<0�d/z��u��WAy�l`�I9X<��K��-E��t3fP2<j�R]�d5����i&Q���W����&RC���W����&Rv���W����&R����W���i&R����W���W&Rj�m�_#+@([YOSG($(#+!!4632#"&4632#"&m��Uy5'""'55'""'5�I�'7#!5�_'7#!5W���& ,6=@:54%$
BjkSCSD.--6.6'%($'+#"'+7.54>327>;.#"2>54'h<>=t�k�lQ
!&�DF=u�kX�7W2��/0�-vKY�[.iY�Z.P�
WiC�vu��HOm�C�u��I1-t��h�9�*,?s���>r�d�s�]E�������&XC��������&Xv��������&X��������W&Xj�������&\v������!@@=BCSCSCD!!&#+3>32#"&'"32>54&�_B�m��9n�if�6Bc�>9�YX�Y-�����Xg��m��PNL�g\��VF@u�b�������W&\j���c�&/O@L,BAhZC
CSD('#!&&	+2#"&54>7&'!+3"32>!.'F
T/L^'1��I�NCfC23&@2&�z���"KB92*��e��y/A'05��++k����BRn@k-H	6Bh
h		[SCSCSDDCJICRDR?=1/*(%# BB+2#"&54>7&/#".54>754&#"#"&/>3232>2>7�
T/L^)4
)QXf=3`J-H��wuHeF,N�mPxO(.(@2&��:aSH#�ͅ?!6H�"KB ;3+	(@,>aD?lP0h��(0(
NP3_�S�x"-705(->$#<S52I/��|���&&��X��X�&Fv���A�'T@Q	B
		hYQCQ
C		SD$"''+2#"&54>7!!!!!!#32>$
T/L^&1�RP�l���[.(@2&�"KB82+�U��S��U"-705X����CNg@d2Bhh

[		SCSCSDEDJIDNEN@>0.+)$"CC
+2#"&54>7"#".54>32#!32>3232>"!4.�
T/L^!+
f�xA=s�jT�i;
�14`�TKnK,

7EP*,&@2&�MzY7	�,Pp�"KB4/)G��k��J:o�ip�s:!)!
 *"",505�0Z~NPX/��@C
D+#_��:�#@ BCR
D+%!!54?3c��r�����f��?��WKeB
]�9�#@ 
BC
D+7#54?[��_�����Y2T���Z4Tv����&1������&Qv{��7� 4�@

BK�PX@+YSCQC	S
DK�%PX@)YSCQC	S
DK�)PX@3YSCQC	Q
C	SD@1YSCQCQ
C		SDYYY@
1/%(%
+!!!!!#".54>32!4.#"32>7�l���%k��]�ߠYY�߇]��k%E��J��sr��KK��rs��J2��S��UNR�Y/f�
���h0Z�RM�=��XX�씕�WW��W��W�2FQa@^.
Bh

[
	SCSDHG43MLGQHQ><3F4F,*" 
	22+2#!32>32#"&'#".54>32>2>54.#""!4.�K�`7�l0Y|LCcE)JZe4��,*Ĕb�m::m�c��*E^x�ZR{R))R{RS|S))S|?HsR1W(Ie�<s�op�r:!)!
 4%����H��uu��I��BjL)�K=r�dc�s>>s�cd�r=n4^�RU�]1��W����&6��Y����&Vv���W����&6��Y����&V������&<
4��s��&=h��J:�&]v���s��&=k��J:�&]����s��&=k��J:�&]��v����#2@/YSCSD##""	+#543>7'&=37>3#"!{`Dl�X$3`N7
_��ض$5`N7
e��b�\+0 FpR

'���3FpR�G �(�@BkD* +#"/&'+73(A��C�U���� �(�
@BkD' +32?>;# C��A�U��

�����5%q5�� @WD
+".5332>53$B[9E(A00A)E9[�'DZ2%B22B%2ZD'��}�@SD($+#".54>32}    F!!xs��=K�'PX@WSD@[OSGY�$&($+4>32#".732654&#"x/?##?//?##?/:@32@@23@$<++<$$;,,;$2@@22@@����
+@(B@jSD+2#"&54>732>�
T/L^-81.(@2&�"KB"=6,
"-705&�*iQK�PX@WSD@[OSGY@
+2673#".#"#4>32�+,;%6"!;63*,=&6"";537/$?.!'!9-$?.!'!|���	#@ SD




	#++7>3!+7>3��*�R�/�
��
��
�.��s�\�BK�1PX@SCS
D@SC
CSDY@!$##	++#!#"&'7632325#5463s�_�,mi4
	���$�e��=nt	'��"
��f@MQE+!!���fG��f@MQE+!!���fG�!.��(+.5467�L=&2#!&K&N�;3d6;=n��(+'&547>54'&547�L=&2#�&K&N�;2e6:=n���(+7'&547>54'&547�L=&2#�&K&N�;2e6:=�!;�)�(+.5467.5467�L=&2#�L=&2#!&K&N�;3d6;=&K&N�;3d6;=n'�)�(+'&547>54'&547%'&547>54'&547�L=&2#JL=&2#�&K&N�;2e6:=&K&N�;2e6:=n�'�)�(+7'&547>54'&547%'&547>54'&547�L=&2#JL=&2#�&K&N�;2e6:=&K&N�;2e6:=������@BK�PX@CCSCDK�%PX@ZCCD@`ZCDYY@
#!""+463632>72!#"'!�M�S

R�N��

����

� ��

�������-�@&"	BK�PX@/
	

	`
	
[CCSCDK�%PX@-
	

	`Z
	
[CCD@/`
	

	`Z
	
[CDYY@+)('%#! !"#+7!!5463632>72!!#.'#"'"&5�|��M�S

R�N��}N�R

S�M�� �

� �B �

�1i|@OSG($+4>32#"..Pj<=lP..Pl=<jP.T=lQ..Ql=<iP..Pii����#5@SD(&(&($+74>32#"&%4>32#"&%4>32#"&i!""'5�!""'5�!""'5M""!5'""!5'""!5W��z�'0DXl�K@H[	[CSC
C
		S
D}{sqig_]US((%"&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�0Rl<>mP..Pm>>lQ/L#=Q--P<##<P--Q=#eC�
D�0Ql<>mP..Pm>>lQ.L#<Q--Q<##<Q--Q<# 0Ql<>mP..Pm>>lQ.L#<Q--Q<##<Q--Q<#3W�X--X�WX�Y--Y�XMnG!!GnMMmF!!Fm�
��PW�X--X�WX�Y--Y�XMoG!!GoMMmF  FmMW�X--X�WX�Y--Y�XMoG!!GoMMmF  Fm�����(+5���
	
�
z
��	��
�����(+7'&547>7.'&54?����	&

%	��
�6��	@C
D#"+'+>;k( 
*
d��o�N[@X;	Bh		h
[	[SC
S


DNMHGFEA?97$##%'$+3>32#".#"!#!!#!32>32#".'#53.547#�Z��n@m]Q%
"1CY:Z�qJZ���
Hp�Z>_H4$	
	%$TfxFq��T���_�ҒN,A+#%?z�v/2'|�~@%+%	#.K5N�ً;'10HH�#C@@
BhS	CS	D##!4%
+67>;#7+"'#32###5��	
9>��?9
	�W�G��
l���,��z*�E?��x;��;h}�71@.1BSCS
D76***+!>54.#"!"&=!5.54>32!#c`�r>V��ooŔV>q�`��b�yDe�뇇�eDx�b�kOw�g~�~??~�~g�wO��4�\��m�ؖOO�؉m��\�4{���.BC@@4Bh[SCSD0/:8/B0B#+(($+>32#".54>32>54&#"#"&'2>7.#"�$CCG(W�_2G�ԌQ�`5I��q5cVD��1K8%
MR�oO
+GeEb�k9(If=#H��~����6f�[rɖV9W;;5-��
�&G��y3cN/I�dKvR+�@BCR
D+3!7!&'^\M�
��*
��ySz!+&M���$@!QCD+##!##5�b��b��R�k��k�RW����&@#
BQCQD+!!!!547	&5W�����{�[��`�R����R$1.
�z��@MQE+!!�=���I(��"@Bj[
D*# +#"&=!267>;#5�:�
�:��O�
��.)%'�
�IJ
�';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+".'#".54>32>32%2>7.#"!2>54.#"�7\NCCN[79hO//Oh97[NCCN\79hO//Oh�F,KB;;BK,,M:!!:M�+M9!!9M+-KB;;BK(BW//VC(+PsGGrP+(CW..WC(+PrGGsP+N&@S--T@&:V78V::V87V:&@T--S@&����K�)*@'BSCSD!%)U$+>32#"&#"#"&'7>3232>7�
:Vo@'9
4XC-	�?]xE!A

"<`G/
>W�U+
+
 DgH��c�Z*	'	 GqQ����/d@a('B[[[	O	SG,*%# //

+267#".#"'>32267#".#"'>32
4Xd84ec`.7Wc<4fc_.4Xd84ec`.7Wc<4fc_*-:+/$,$-8-0$,$��-:+.$,$-8-/$,$���pkK�	PX@)^_	ZMQE@'jk	ZMQEY@

+!3!!!!#!5!7!��uGt��h��@vHv��Th�De��J�J��J��P�O!@	@MQE+!!��
��''%���v>����	?x��I�P�O!@
@MQE+5467>7.'.=!5!�
&&&��
���(��?>�I��f��"@
BMQE+3	#	>7	.'��B��nB��L		N��	
�@����@�S�������@CD+3#���k�a�BK�!PX@SCQC	
D@[SC	
DY@!$%!
+3'&=354>32#"&#"!#!nj�6g�_!G
+!��G`�{	'U\�g7
0
��R�<}����"�K�!PX@SCQC	
DK�1PX@[SC	
D@![CSC	
DYY@""A15!
+3'&=354>32;#.#"!!nj�4d�`"IE<H_6w0KvQ+ ��{	'AX�n>�nO/Y~NAG����R��
@jD


+2+:	 0["6M6
��	@ja		+2#"&'%t�G
���	
��2E�%@OSG&(($+#".54>32#".54632�

�

0!
�





!1
U5�q@MQE+!!U��aq<�J�	@ja	#++7>3J��
F����
	<�@Bja, +#"&/.'+73<I��J�Z{{�<�@Bja, +32>?>;#J�	�I�Z�{{�2��
(@%jOSG


+"&5332653$|v@R``R@v�pfGQQGbt�8{�@OSG($+#".54>32{  �}���!@[OSG$&($+4>32#".732654&#"}-="">-->""=-5@32@@23@^";**;"#:**:#2@@22@@*)�1@.[OSG
+2673#".#"#4>32�*,6"5"!<85*+8$4""<84P7+#;- % 8*"<- % j��	+@(OSG




	#++7>3!+7>3��/�
q�4���	��	���m�
@kD


+2+U	 3�#;U<.���U_<��ʓ^p�ӡ�6��z�	��V�6�:z/������V���Wgj��X�Xb {�m�n�d�i���I�������?�������x�������������!kl	�|����x��|��V��Y(������;{��;{��W�#��	����sX���Xk��IV�kD��XDW�X��K:���������7�:�:W.�DW�\Y�4:����#��JX?XXi��������C���UX��I'MU�jj����dMUI[�m�a�bI�:��6�I����Wj������S�*						7��|��������VV�VV'1��;{;{;{;{;{��;{��������������k�k�k�k�k�kIk�X�X�X�X�X�"������0Y:�:W:W:W:W:W�m:W:�:�:�:��.��	�k|�X���X��*:X9��:��{�W:W\YW\Y��s�J�s�J�s�J�vI I II5I�IxI�I&I|�.:�7����n�n���n�n�����`i�Wk�k��6��H�h�{TMTW��c(TJ��������������*lI�IIIUI�III2I�I}I*IjI�l�#`�	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V
	�V
�
�B
�
�V
#��
$�V
&��
*��
2��
4��
97
:7
<
?7
D��
F��
G��
H��
R��
T��
m�B
o�B
y�B
}�B
��V
��V
��V
��V
��V
��V
��V
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�V
��
��
��
��
��
��
�
�B
�B
�
�
�B
�B
�B
��V#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������
	�V
�
�B
�
�V
#��
$�V
&��
*��
2��
4��
97
:7
<
?7
D��
F��
G��
H��
R��
T��
m�B
o�B
y�B
}�B
��V
��V
��V
��V
��V
��V
��V
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�V
��
��
��
��
��
��
�
�B
�B
�
�
�B
�B
�B
��V�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v���B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B����
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��7	��
7
7�G���G������"<#��$��&��*��-�o2��4��D��F��G��H��I��J�{P��Q��R��S��T��U��V��W��X��Y��[��\��]��l7m��o��r7tFuFw��y��{F|7}���������������������������������������������������������������������������������������������������������������������������������������7�7�G�7�7�G����7���#��#	��#
��#��#
��#��#��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#��#��#���#���$�V$
�V$
�V$��$"��$#��$&��$*��$--$2��$4��$7��$8��$9��$:��$<�t$?��$Y��$\��$l�V$m��$o��$r�V$t�`$u�`$y��${�`$|�V$}��$���$���$���$���$���$���$���$���$���$���$���$��t$��$��$�t$��$��$�V$�V$�V$�V$��$��$��$��V&�e&m�e&o�e&y�e&}�e&�e&�e&�e&�e&�e'��'	��'
��'��'
��'��'��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'��'��'���'���)	��)�L)�L)��)��)��)")$��)-�.)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)��)��)��)��)��)�L)�L)���-	��-��-��-��-$��-���-���-���-���-���-���-���-��-��-��-���.��.#��.&��.*��.2��.4��.F��.G��.H��.I��.R��.T��.W��.Y��.Z��.\��.m��.o��.y��.}��.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.��.��.��.��.��.��.��.��.��.��/��/
��/
��/4/�$/4/"��/#��/&��/*��/2��/4��/7�[/9�V/:�y/<�=/?�V/F��/G��/H��/R��/T��/Y��/Z��/\��/l��/m�$/o�$/r��/t�B/u�B/y�$/{�B/|��/}�$/���/���/���/���/���/���/���/��=/���/���/���/���/���/���/���/���/���/���/���/���/��/��/��/��/��/�=/�$/�$/��/��/�4/��/��/�4/�$/�$/�$/���2��2	��2
��2��2
��2��2��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2��2��2���2���3	��3�3�3��3$��3-�V3D��3F��3G��3H��3R��3T��3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3��3��3��3��3��3�3�3���4��4	��4
��4��4
��4��4��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4��4��4���4���5#��5&��5*��52��54��57��58��5���5���5���5���5���5���5���5���5���5���5���5��5��7	��7�L7�L7�L7��7�`7�`7#��7$��7&��7*��7-�872��74��7D�7F�)7G�)7H�)7J�>7P�`7Q�`7R�)7S�`7T�)7U�`7V�D7X�`7Y�L7Z�t7[�g7\�L7]��7m�L7o�L7w�`7y�L7}�L7���7���7���7���7���7���7���7���7���7���7���7���7���7���7��7��7��7��7��7��7��7��)7��)7��)7��)7��)7��)7��`7��)7��)7��)7��)7��)7��)7��`7��`7��`7��`7��7�7��7�)7�)7�`7��7�)7�L7�L7�L7�L7�L7�L7�L7���8	��8��8��8��8$��8���8���8���8���8���8���8���8��8��8��8���979	��9
79
79�G9��9�G9��9��9��9"<9#��9$��9&��9*��9-�o92��94��9D��9F��9G��9H��9I��9J�{9P��9Q��9R��9S��9T��9U��9V��9W��9X��9Y��9[��9\��9]��9l79m��9o��9r79tF9uF9w��9y��9{F9|79}��9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9��9��9��9��9��9��9��9��9�9�9�79�79�G9�79�79�G9�9�9�9�79���:7:	��:
7:
7:��:��:��:��:"%:$��:-��:D��:F��:G��:H��:J��:R��:T��:V��:l7:m��:o��:r7:t7:u7:y��:{7:|7:}��:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:�7:�7:�:�7:�7:�:��:��:��:�7:���;��;#��;&��;*��;2��;4��;F��;G��;H��;I��;R��;T��;W��;Y��;Z��;\��;m��;o��;y��;}��;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;��;��;��;��;��;��;��;��;��;��<<	�t<
<
<�y<�`<�y<�t<��<��<"%<#��<$�t<&��<*��<-�8<2��<4��<D��<F�`<G�`<H�`<J�[<P��<Q��<R�`<S��<T�`<U��<V��<X��<Y��<Z��<[��<\��<l<m�`<o�`<r<t-<u-<w��<y�`<{-<|<}�`<��t<��t<��t<��t<��t<��t<��t<���<���<���<���<���<���<���<���<���<���<���<���<���<���<��`<��`<��`<��`<��`<��`<���<��`<��`<��`<��`<��`<��`<���<���<���<���<�t<��<��<�`<�`<��<��<�`<�`<�`<�<�<�y<�<�<�y<�`<�`<�`<�<��t=��="%=#��=&��=*��=2��=4��=F��=G��=H��=R��=T��=V��=Y��=\��=m��=o��=y��=}��=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=��=��=��=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>F��>G��>H��>R��>T��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��?�V?
�V?
�V?��?"��?#��?&��?*��?--?2��?4��?7��?8��?9��?:��?<�t??��?Y��?\��?l�V?m��?o��?r�V?t�`?u�`?y��?{�`?|�V?}��?���?���?���?���?���?���?���?���?���?���?���?��t?��?��?�t?��?��?�V?�V?�V?�V?��?��?��?��VD��D
��D
��DY��DZ��D\��Dl��Dr��Dt��Du��D{��D|��D�D�D�D�D���E��E
��E��E
��E9��E:��E?��E@��EY��E[��E\��E`��El��Er��E|��E�E�E�E�E���H��H
��H��H
��H9��H:��H?��H@��HY��H[��H\��H`��Hl��Hr��H|��H�H�H�H�H���IKI
KI
KI�yI�yIlKIrKItdIudI{dI|KI�KI�KI�yI�KI�KI�yI�KK��K
��K
��KY��KZ��K\��Kl��Kr��Kt��Ku��K{��K|��K�K�K�K�K���NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��P��P
��P
��PY��PZ��P\��Pl��Pr��Pt��Pu��P{��P|��P�P�P�P�P���Q��Q
��Q
��QY��QZ��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q�Q�Q�Q�Q���R��R
��R��R
��R9��R:��R?��R@��RY��R[��R\��R`��Rl��Rr��R|��R�R�R�R�R���S��S
��S��S
��S9��S:��S?��S@��SY��S[��S\��S`��Sl��Sr��S|��S�S�S�S�S���U��U��UD��U���U���U���U���U���U���U���U��U�U�Y	��Y��Y��Y��Y$��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y�Y�Y���Z��Z��Z��Z��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��\	��\��\��\��\$��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\�\�\���^#��^&��^*��^2��^4��^F��^G��^H��^R��^T��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��l	�Vl�l�Bl�l�Vl#��l$�Vl&��l*��l2��l4��l97l:7l<l?7lD��lF��lG��lH��lR��lT��lm�Blo�Bly�Bl}�Bl��Vl��Vl��Vl��Vl��Vl��Vl��Vl���l���l���l���l���l���l���l�l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�Vl��l��l��l��l��l��l�l�Bl�Bl�l�l�Bl�Bl�Bl��Vm�Bm	��m
�Bm
�Bm�vm�vm��m$��m7�Lm9��m:��m;��m<�`m=��m?��ml�Bmr�Bm|�Bm���m���m���m���m���m���m���m��`m��m�`m��m��m��m�Bm�Bm�vm�Bm�Bm�vm��Bm���o�Bo	��o
�Bo
�Bo�vo�vo��o$��o7�Lo9��o:��o;��o<�`o=��o?��ol�Bor�Bo|�Bo���o���o���o���o���o���o���o��`o��o�`o��o��o��o�Bo�Bo�vo�Bo�Bo�vo��Bo���p��p	��p
��p��p
��p��p��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p��p��p���p���r	�Vr�r�Br�r�Vr#��r$�Vr&��r*��r2��r4��r97r:7r<r?7rD��rF��rG��rH��rR��rT��rm�Bro�Bry�Br}�Br��Vr��Vr��Vr��Vr��Vr��Vr��Vr���r���r���r���r���r���r���r�r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�Vr��r��r��r��r��r��r�r�Br�Br�r�r�Br�Br�Br��Vt	�`t�`t$�`t9Ft:Ft<(t?Ft��`t��`t��`t��`t��`t��`t��`t�(t�`t�(t��`u	�`u�`u$�`u9Fu:Fu<(u?Fu��`u��`u��`u��`u��`u��`u��`u�(u�`u�(u��`y�By	��y
�By
�By�vy�vy��y$��y7�Ly9��y:��y;��y<�`y=��y?��yl�Byr�By|�By���y���y���y���y���y���y���y��`y��y�`y��y��y��y�By�By�vy�By�By�vy��By���{	�`{�`{$�`{9F{:F{<({?F{��`{��`{��`{��`{��`{��`{��`{�({�`{�({��`|	�V|�|�B|�|�V|#��|$�V|&��|*��|2��|4��|97|:7|<|?7|D��|F��|G��|H��|R��|T��|m�B|o�B|y�B|}�B|��V|��V|��V|��V|��V|��V|��V|���|���|���|���|���|���|���|�|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�V|��|��|��|��|��|��|�|�B|�B|�|�|�B|�B|�B|��V}�B}	��}
�B}
�B}�v}�v}��}$��}7�L}9��}:��};��}<�`}=��}?��}l�B}r�B}|�B}���}���}���}���}���}���}���}��`}��}�`}��}��}��}�B}�B}�v}�B}�B}�v}��B}�����V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��e�m�e�o�e�y�e�}�e��e��e��e��e��e����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|����������������������������������������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$���������������������������������������������	�t�
�
��y��`��y��t�������"%�#���$�t�&���*���-�8�2���4���D���F�`�G�`�H�`�J�[�P���Q���R�`�S���T�`�U���V���X���Y���Z���[���\���l�m�`�o�`�r�t-�u-�w���y�`�{-�|�}�`���t���t���t���t���t���t���t�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������t��������`��`��������`��`��`������y������y��`��`��`�����t����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V����
���
���Y���Z���\���l���r���t���u���{���|����������������e�m�e�o�e�y�e�}�e��e��e��e��e��e����
������
���9���:���?���@���Y���[���\���`���l���r���|����������������t�
�t�
�t��o�9�j�:���<�y�?�j�Y���\���l�t�m�o�o�o�r�t�t���u���y�o�{���|�t�}�o���y��y��o��o��t��t��t��t��o��o��o���t����
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������	�t�
�
��y��`��y��t�������"%�#���$�t�&���*���-�8�2���4���D���F�`�G�`�H�`�J�[�P���Q���R�`�S���T�`�U���V���X���Y���Z���[���\���l�m�`�o�`�r�t-�u-�w���y�`�{-�|�}�`���t���t���t���t���t���t���t�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������t��������`��`��������`��`��`������y������y��`��`��`�����t����"%�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������"%�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������"%�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}���������������������������������������������������������������������������������������������������������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B�����	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V�	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V���
��
���v�#���&���*���2���4���7�L�9�L�:���<�y�?�L�Y���Z���\���l��m�v�o�v�r��y�v�|��}�v�������������������������������y��������y��v��v����������v��v��v����	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V�	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V���
��
���v�#���&���*���2���4���7�L�9�L�:���<�y�?�L�Y���Z���\���l��m�v�o�v�r��y�v�|��}�v�������������������������������y��������y��v��v����������v��v��v�����B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B�����	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V�����"��"��J��"<b��n�6�2�	(	z	�

,
R
�~����

�
�
�Zv��@~�F��F��Fr���*�z�T����T��V�`����P���r�NN���Jl 
 ^!B!�!�"$">##&#n#�$"$�$�%.%d%�%�&.&t&�'0'�))r)~)�)�)�)�)�**�*�*�*�*�*�*�*�++T+`+l+x+�+�+�+�,P,\,h,t,�,�,�-P-\-h-t-�-�-�.x///(/4/@/L/X/d/p/�0000&020>0�1111$101<1�1�22�2�2�3<3�3�4*4\4h4t5<5�5�5�6666(646@6L6X6d6�6�777D7n7�7�8R8�8�8�99>9d9�9�::V:�;t;�;�<�<�= =>=�>4>�??F?p?�?�?�@�@�A^A�A�B6BxB�B�CbC�C�C�DD.D\D�D�D�E$EhE�E��`"/n�	� ��
��(�
�(�
�0�%	%
�42(
�Z	6	J	^	Pl	�	P�	�	` 	�		�	
��	0
V	d
�	
�
�	4n	�	
�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightRegulartyPolandLukaszDziedzic: Lato Light: 2013Version 1.105; Western+Polish opensourceLato-LightLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightRegulartyPolandLukaszDziedzic: Lato Light: 2013Lato-LightVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLLatoLight�ZD	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt��bKbK�������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK)J[^b��]share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfnu�[����pBASEe]��0FDSIGGDEF����x�GPOS#f�8�dbGSUB�]��JOS/2���x`cmapspB3fglyfc��[M�Ovhead�ʹ�6hhea3y4$hmtx�s�p�Bloca�ny�A�BmaxpT^X name��s�@�post+���$9	�7
��_<���
��s�0�:($��X�0�0( �*bX��XK�X^2)	 �8ADBO  ����`��� X#	J6F\i,@J;Dk:B&K&F2@8=HC/7R4HO*L2#H/H/t51>%F																							������	J66666FFFF\\\\\\\\^\\\\F\\\\,,,,,,,,,@@@@JJJJJJJJJJJJ;DDD[kkk*k��k:::BBBBBBBB&&&&&&&&&&&&&&&&&&&&&&&&FFFFFFF22222222@@@@@@@@@@@@@@@@@@@@@@@@888888I2AJ&.=============='========HCCCCC"////7777777777777777744444444���HH HOOOOOOOOOOOO*LLLL2222222###HHHHHHHH��/////////////////////////tRttaa/55555555=R1111111>>>>>>>>>>>>>>>>>>>>>>>FFFFFF/HH*A��BHHH4C//6/n7F0/*1/@<HHHOO2)2)y#��HJ/444ttJJ5++21��'>!FF4��2E29C/B////////////////////////////////QQQQQQQQQQQQQQOQOQQQQQQQQQ��QQ	Jl\8@&JD:BB&@K?������J����*H5FVA7=I"@;3
H/2>)IH9*FA==3>>=>I0Jt)�������h�������jijs��noh������}����	JJl\.@@E��:@&@K6@-"J\\l72JJ;��E@?&l2.E@6,>J	��\2@&&=<Tt70IIM%H/HHC2%H@##&Q5"77tC5OO*��$MIK /%x/0MHC %@H2=77I////CQQQ��8O3*#.<>=58O8O3*#.<>=58O8O3*#.<>=58O��������bg�R��3E�E���*;FFFPP��v��zZ��zZ|Y�<<>�c�~�hjiJ�J�@YYG0w><@\�h�h�h�h�he��FT|||@���������������������������������������������������������������������0��������t&|���������������>$@C-`.OC[C5OY##4

5FFTF�FFtbFFFVF44FFIF����p�@<��}!	B,;J
]>Gf
��J<9'H55AADDAA00
��,7����5�����������.���J#��������Z}�uu���}�nm�������.}�����u�nf�������z��mt��wx����u��B9���������"������m���������u��n�J���k�nf�0�c��h��o�������/����������������uzsi�jj�������!!��������������������������������������������������������������������������������������������������������������������KK����^�^^�������^^�������^^������������������������������������������,����
,,5��>A����$�,$
��	����Rkl���������mnopqrstuv�������	

������ !"#$%&'()*+,-./012345����:=R^���
*)+-KJLNipoqsr������VS����������M�����T������&(u�����W�����o69�������������hU������l8_7a]��~������U�������������/9@Z`z~�������������7C\ghnv{~������������������ *,14=E_auz~���������������/_cu��������������CIMPRX[���!+;IScgo���������    " & 0 3 5 : ? D I q y  � � � � � � � � � � � � �!!!! !"!&!.!^!�!�!�!�""""""""")"+"7"H"a"e###!%�%�%�%�%�%�%�%�%�%�&&&<&@&B&`&c&f&k''R'd'�..%������ 0:A[a{�������������7CP^hjox}������������������#,.49@_atz~���������������0br��������������CGMORV[��� $2>RXfl~��������      & / 2 5 9 < D G p t } � � � � � � � � � � � � �!!!! !"!&!.!P!�!�!�!�""""""""")"+"7"H"`"d###%%�%�%�%�%�%�%�%�%�&&&:&@&B&`&c&e&j''R'd'�.."������=������oY���
�����������������x�p�o�%$#$	��;�:�.������������������������������-�i��o�d�c�j�$�~�|�y���������������z�z��������T�i�p�l�G�%����s������޺�ޚޙ�r�m�cݹ�j�q�վջ%y%l������������������������"",028>HNPZ\^bfprxzz||xz�����������������������������������������Rkl��������������������������o�VSQT����&���������������(�mno�6789:=MR]^_a~������������������
)*+-JKLN�iopqrs���������;<	@
S T!V#U"W$[(b.c/d1e0`,p<q=r>s?xC}I�M�O�T�Q�U��V�WZ�[�]�\�b�a�f�j�hn���t��u����������������������������������������������Ww����?�P�v����������Ot@�wo;�g>N�����������������������������2:?A��������H4;@I��	
 "-./02467�C#JE��v�wxy|~�z}�������������������JKLMNOPQRS	T
UVW
XYZ[\]^_`abcd*,-358<=QX%Y&Z'n:uAzEyD{G|H�X�Y�^�_�`�c�d�e�k�l�m������������������������������������F�ABCDEFGHIJKLf2g3h4i5j6k7l8m9�R�S�x�y�z�{�|�}�~����������������������������������������������������������������l��������1��6gY]Uebck�x}~pqrstuvwyz{|����������������������������������������������������������$�  !!�""�##�$$R%%k&&l''�()�**�++�,,�--�..�//�09m:;�<<�==�>>�??�@@�AZ[[�\\�]]�^^�__�``�az{{�||�}}�~~���o�����V��S��Q��T��������������&��������������������������������������������(�����m�����6��=��M��R��]��a��~�������������������������������������
������)��-��J��N�����i��o���������������������;<	@
S T		!

V#U

"W$[(b.c/d1e0`,p<q=  r!!>""s##?$$x%%C&&}''I((�))M**�++O,,�--T..�//Q00�11U2233�44�55V66�77W88Z99�::[;;�<<]==�>>\??�@@bAA�BBaCC�DDfEE�FFjGG�HHhIInJJ�KK�LL�MMtNN�OOPP�QQuRR�SS�TT�UU�VV�WW�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�dd�ee�ff�gg�hh�ii�jj�kk�ll�mm�nn�oo�pp�qq�rr�ss�tt�uu�vv�ww�xx�yy�zz�{{�||�}}�~~������\�����W��w����������������?�������P�����v��������������������������������O����t��@�����w��o��;�����g��>����N������������77�CCPPP�QQ�RX�Y\�^g�hh�jj�kn�ov�x{�}~����������������������������0��2��:��?��A�����������������������������������������H��4��;��@��I��	
		

 " $#&-''2((4)*6,,8.1944=9=>@@�AABBCCC#DDJEEE__FaaGtu�zz�~~���������v�����w��{��|��~�����^��o��z��}������������������������������������������������/�0_bb�ccJrrssKttuuL����M����N����O����P����Q����R����S��	��T��
��U����V����W��
��X����Y����Z��[����\����]����^����_����`����a����b����c����dCC)GG*HI,MM/OO3PP5RR7VV8WX<[[>��+��.��BQX

%Y&Z'n:  u!!A$$z%%E&&y''D(({))G**|++H22�33X44�55Y66�77^88�99_::�;;`>>�??c@@�AAdBB�CCeDD�EEkFF�GGlHH�IImRR�SS�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�ff�gg�ll�mm�nn�oo�~~����������������������������������������������F��������A����B����C����D����E����F����G����H����I����J����K����L����f��2��g��3��h��4��i��5��j��6��k��7��l��8��m��9�����R�����S�����x�����y�����z�����{�����|�����}�����~���������������������������������������������������������������������������������������������������������������������������������������������  p  �  �  �  �  �  �  �  �  �  �  �   !� " "� & &� / / 0 0l 2 3� 5 5� 9 :� < <� = =� > ?� D Dh G G� H H� I I� p p� q q1 t y� } ~�  6 � �� � � � �F � �X � �g � �Y � �Z � �\ � �] � �U � �d � �^ � �` � �e � �b � �f!!�!!�!!k!!�! ! �!"!"�!&!&�!.!.�!P!Px!Q!R}!S!Zp![!^y!�!�!�!��!�!��!�!��!�!��!�!��""�""�""�""�""�""�""�""i""�""�""�""�")")�"+"+�"7"7�"H"H�"`"`�"a"a�"d"e�##�##�##�# #!�%%�s%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��&&�&&�&:&;�&<&<�&@&@�&B&B�&`&`�&c&c�&e&e�&f&f�&j&k�''�'R'R�'d'd�'�'��..�.".%����������������������**M�����'<Qp����4p���W����J}��<_ju����)X���0K�����&1<G������		
		&	1	<	G	R	`	�	�	�	�	�	�	�



$
/
:
E
M
~
�
�
�
�
�
�
�
�	*5@KVdoz�������$/;Fit��������



)
4
?
J
V
a
l
z
�
�
�
�
�
�
�
�
�
�$/:EP[fq|������
Xcny�����*5@KYdoz��������
 +EP[fq|�������"-]hs~�����������
#.9DOZe���;br}�������*5�����������r}�������@KVa��������4?JU`kv������������	 +7Bmx�����������!9DP[ft��������"-hs~������%0;FT_j������ +������������(q�������%0;FQ\gr������� ! , 7 B M X c n y � � � � � � � � � � � �!	!!!*!s!�!�!�">"�"�"�#$#g#�#�$$_$�$�$�%%O%�%�%�%�&P&�&�''H'k'�'�'�'�(((/(:(u(�(�(�))7)w)�)�**-*d*�*�*�++E+d+�+�+�,(,^,�,�,�-
-6-S-�-�-�-�.6.f.�.�/G/o/�/�/�00O0�0�0�0�0�0�0�0�0�0�1=1H1S1^1i1t11�1�1�1�1�1�1�2 2(232>2I2T2_2j2u2�2�2�2�2�2�2�2�2�2�2�3333"3J3w3�3�3�3�3�4
44 4.494V4b4�4�4�4�4�4�5
555%5V5^5f5�5�5�5�5�5�5�5�5�5�6)616R6�6�6�6�777E7k7s7�7�8=8i8�8�9(9R9�9�9�::;:]:�:�;
;=;p;�;�<<<U<�<�==a=i=�=�=�=�=�=�=�=�>>>>$>c>�>�>�??? ?)?8?F?N?]?e?m?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�@@!@=@K@S@v@�@�@�AASA[A�A�A�A�A�BBLBmBxB�B�B�B�B�B�B�B�CC*C\CdC{C�C�C�C�DD;DiD�D�D�D�E	EECEKESE[EcE�E�E�E�FFF)FSF�F�F�F�G&GfG�G�G�H
HH7HhH�H�H�H�H�H�H�H�H�H�IIII%IjI�I�I�I�J#J_J�J�J�J�KK)K1KCKKKSKdKlK�K�K�K�LL/LQLwL�L�L�MMM'MdMoM�M�M�M�M�M�N"N*N5N@NKNaN�N�N�N�N�O,OkO�O�O�PP#PHPyP�P�P�P�P�P�P�P�P�P�P�Q	QQQ'QqQyQ�Q�Q�RKR�R�R�SS,S^S�S�TTIT�T�T�T�UURUvU�U�U�U�VVJV_V�V�V�WW@WtW�W�XX_X�X�X�X�X�X�Y,YMYnY�Y�Y�Y�ZZ>ZKZXZaZnZ�Z�Z�Z�Z�Z�Z�Z�Z�Z�[[[[3[_[l[[�[�[�[�[�[�\\\;\G\S\f\s\�\�\�\�\�]*]k]z]�]�]�]�]�^^_^|^�^�^�_P_�_�``+`:`I`X`p`�`�`�`�`�aaha�a�b0b�b�cc&c2c:cBc�c�c�c�c�c�c�c�c�c�c�c�c�ddd7dNdpd�d�d�e,eDe�e�e�fff3fYflf�f�f�g
gBgZg�g�g�h	hh<hEhNhWh`hihrh{h�h�h�h�h�h�h�h�h�h�ii7idi�i�i�jMjnj�j�j�j�k%kFkrk�k�k�l/lSltl�l�l�mm$m]m�m�nnEn�n�n�oo=oJoVocopo�o�p)pTp�p�q
qgq�q�rr^r�r�ssgs�s�s�t"t;tjt�t�t�t�t�u%u4uDuSucusu�u�u�u�u�u�u�u�vvv#v3vyv�v�v�v�v�v�www(w;wVwqw�w�w�w�w�xxx1x@x�x�x�x�x�x�y.ybyy�y�y�y�y�zzz-z@z�z�{!{9{Q{h{�{�{�{�{�{�||<|\|{|�|�|�}}}.}F}V}f}{}�}�}�}�}�}�}�~~I~�~�~�~�.b�����������������7�����ȃЃ؃��
�3�G�U�t�|���������������ȄЄ؄������υ݅����$�7�J�p�����������܆���0�G�^�����Ň�
�8�^���������Ԉ��
�(�C�a�}�������É҉�	��*�?�K�T�]�f�������Պ���(�8�A�J�S�\�e�������ċ�	���8�D�a�������>�k���َ�7�i�������ю�� �K�y�������5�e���Ӑ��!�5�I�l�����Ւ�.�Q�������������������Ӓ��&�C�d�������ēԓ����&�6�F�U�e�u���������ʔߔ���1�D�W�j��������ӕ���$�7�I�^�r�������Ö֖���#�;�T�l�������̗���2�J�b�z�������Ϙ��
�!�6�K�e�z�������љ���-�E�^�}�����͚���6�M�l�����ۛ���*�D�T�e�����������ŜҜߜ���%�7�D�P�]�j�w�����������ŝҝߝ������F�ߥ����!�1�E�V�g�u��������������"�M�p�x��������#5�	3!%3''#7'377##���(()|__�+�u^��l[Mbb
��p_;;��s	O�	3'&&'#3#'#��
�˰˜'�(J<<1m44m����t��J2�"332#32654&##3254&##J�Dl?6:FHBqG[A6014BOv9=O�F?+S
KACT)�+%$�ZX+&6��:�"&&546632&&#"3267dQ�TS�W>d!Q7$E[]I#;QQL�ml�Q3 [pbdp Y`F4�
332#'326654&&##F�_�NM�[)3M++M3�D�pp�Gw(\NNY%\�3!!3#!\�����&�|�{�|i�	3!!3#i������|�|�,��#�"&&546632&&#"32675#53WS�PP�TB^Q2'@UNM#
_�!mL�mm�P3 [pbdp

px��0@�33353##@���������t��J�353#5!#3J��Ę�|�||�l|;���"&'73265#5!6u+U9C23��.k0<[H4C'{�R@j@DR�3333#D����֣�K������wc�k �33!k�"���|:�333773#54>7##''#:�@@�|22H3/��ZZ�t�QXP����PXQ�B�333&&553#'#B��8���8����4:�tE�6|:�&��2�"&&546632'2654&#",MwBBwMNvBBvN3<<33<<N�om�MM�mo�NljekkejlK1�332##3254&##K�GsEFtETKx=;K�'\OLb/�Rh3*&�NG�&%2654&#""&'&&5466323267,3<<33<<�_�XjBwMNvB`QC#
0llqekkeql��bL��m�MM�m��"n	FH�332#'#3254&##F�ErE@4��}MHw<;H�%XNH]����`a0&2��'�*"&'732654&''.546632&&#"*B�5U%Y//-6/T$@'=lF;r,K"D0%-</OAK;q0.e& #$/F/6X4,*]"TE6\89�3#5!#���||��@���"&5332653.ww�-./-�s���`:??:��o�I�
3336673�ŜNM�����5f66f50�tT�!3336677336673#'&&'#[W�,^)�P�&
&���*N,,O)��(O--O([�t�@@�F�33366773#'&'#���?
:����GDO={44{�����0;3�H�353366773�ҞBB�����%I''I%��P�8#�	35!5!!81����5Y�{Y�I|=���%"&&5467&&#"'6632#'#'2675�2I(��42$I*43u@hxx%[!:IQ &(D*SX
"&`&nr��8(rR"H��)�"'##336632'2654#"RH?s�H$]k=bY)8[/-.B6��N�rUy?xFL�.�C��#�"&&546632&#"3267WN}IP�L;`D77@PN='A;-l=uRSt=&['LA@M]%$/���!"&5466323'53#'#52675&&#"^s=a6);�xH+)(<2�yQu>M��C3$x�CGIE7��#�"3&"&&546632!3267>+<�KN|IJvBMh5��L="=!1+h�./]�h=uRRt>?kD%	62YRI�3#57546632&&#"3#Ճ�.cM+L4]��}m
9]6l	
Ws��4�-<�0<J"&&5475&&54675&&5466323##"&'3322654&#"2654&##"'@f;M!&;a8.$�d7\:"T\bgH�R,,++,;K,+>3#D�9,=&
)2B+<P(l#9I$
%:C4Q.�*('**'(*��#H�3336632#4&#"H�Q8SN� )-��_-l^��2.����O��&U
-��*�<��&�
-LI�33373#'L����̟�I��k����N}2�� �"&5#5!3267�]`�/2&!'?p^�t��.#	l
#>�33366326632#4#"#4#"#o
2+D5+5:�s
�=+Q"/VJ��R-0��R-��H�3336632#4&#"Hx T7TN� )-�B .l^��2.��/��)�"&&546632'2654&#",BsHHsBBsHHsB3333333=uRSt==tSRu=wM@ALLA@MH�H)�336632#"'#2654#"HxN(]j=b8D6U)9[/--��2#�sUx?6Q�$FL�.�/�H�!57##"&5466323732675&&#"}D#^s=a6*As�+)(<2��P �yQu>!3�X$�CGIEt$�3336632&&#"tx%i;!)%.Y �l=;

{6C��5���'"&'732654&&'&&54632&&#"(C�/?.e5)&41eXzjCm'B%T)"#4?MT"}-\
K:EV+X+:)C]1��&�"&&55#57733#3267�O^)}�y��270!O7bA�m��s�80j
>��
�"&5332673#'#�UL�),�x!Ql^2��1/!F�G%.9�
33366773ڻ�NN����%M''M%�T� 33366773366773#'&&'#UQ�k �L�	��%H&&J#��%H&&H%�� H+:Y�%2�3'3366773#'&&'#%���3


,����9
1�P+,P��R,+R�>;�"&'7326773366773�&+1
גS
I��<U�p$��#K'%K%�>U*F�	35#5!!F����O.sN��s��	O~&���	O~&���	OC&��	OT&��	ON&��	O/&��	OP&��	O~&	O�
+"&54773'&&'#3#'#2654&#",3?+�;S"@j�
�˰˜'�(��6-5�R(
/ -6��<<1m44m����t�����	OT&	�g�	%3'&&'#"&54667#'##33267��
�1D(('�(�˰�*3
#;J<<1m44m��2. 4%
����t9 
J��	�
O�&-��	Ov&��	O&T��	O&V��	O�&X��	O�&Z��	�
OC&&-��	O�&\��	O�&^��	O�&`��	O�&b��	�
OP&&-��S�3#!#3#3!5#�T
���s�vv���v-d]1]�q�|�|�|������S~&M�[����S/&M[	4�!*35#5732#'3254&##3#532654&##TKK�Dk>59FHBrGRFu8=Fjj95233:�E�E;*K
OEDY*lf3-<K�)'$��J�D2�&<	��6�:�&3+��6��:~&�5��6��:C&5��6��:T&5��6��:d&5��F4T&��F�
4�&-���F�D4�&<���F�4�&3���4��E�3&&546632#7326654&'�&"74:9za��DxO
!2?<5""+^UCDi<��s�Hw)^Qm_��\~&���\~&���\C&��\T&��\N&��\/&��\P&��\d&^�-�!"&54667!!!3#!#3267�1D&�������%)#;�2.3&�|�{�|)J��\�
�&-��\v&��\T&��\D&T��F&V��\@�&X��\�&Z��\�
C&&-��\�&f��,��#~&���,��#C&��,��#P&��,��#d&��,�#�&0��,��#T&��,��#/&��,��#T&,��`21&&#"32675#53#"&&546632&&54632&&#"Q2'@UNM#
_�!m>S�PP�TKB'
E[pbdp

px��0L�mm�P7Nm!��@C&	��@N&	��@�
�&	-����&	3�_��@��&	9U�3#57533533###35#@==���==�����E^]]]K����S��J~&
���J~&
���JC&
��JT&
��JN&
��J/&
��Jd&
��JT&
J�� "&54667#53#5!#3#326731C#�����*#";�2. 3%|�||�l|1J��Jv&
��J�
�&
-��JP&
��;��C&��D�R�&0��D�
R�&-��D�DR�&<��[ ~&
����k &
����k� �&
0#��k�
 �&
-#��*�
 /&
&�-#��k�D �&
<#�� �
35'737!k@2r��1�"�&X@J��dX~�|��k=�&

����:~&���:d&��:�
�&-��B~&�
��B~&�
��BT&
��BT&
��B��&0��Bd&
��B�
�&-��B�D�&<��&��2~&���&��2~&���&��2C&��&��2T&��&��2N&��&��2/&��&��2y&��&��2P&��&��2T&&�2�!-"&5467.54663232672654&#"B1C+Oh3BwMNvB`P(!#;33<<33<<�2.)=
^�Xk�OO�j��#5JSipekkepi��&�
2�&-��&��2v&��&��2&T��&��2&V��&��2�&X��&��2�&Z��&�
2C&&-&��S?("&&5466326654&'7'2654&#",MwBBwM?4
ms'+BvN3<<33<<N�om�M	'$#,5r+�Wo�Nljekkejl��&��S~&����&��S~&����&��Sv&���&��ST&����&�
S?&�-��&��2�&f��D� )77&&5466327#"'7&#"2654&'EBwMV=5PDBvNT?6Z�(3<o3<�
b)oEm�M-K4a(mCo�N.Ls$� k��lj"�!����D~&��S�!"&&54663!#3#3%3#"MzEH}O"�yy���!00G�pp�D{�{�|w�%XOO\'��FH~&���FHT&��FHd&��F�H�&0��F�
H�&-��F�
H/&&-��F�DH�&<��2��'~&���2��'C&��2��'T&��2��'�&h��2�'�&3��2�'�&0��2��'d&��2�
'�&-@��D�$"&'732654&''7&&#"#46632�1P<!)6@V
+\�3iQ\vRG=(S$Y"$ 8V} ��b�Cg<eRx%ZA3R0��9T&���9�&3���9�&0���
9�&-���D9�&<9�3#5735#5!#3#�^'��E�||�K��@��~&���@��~&���@��C&��@��T&��@��N&��@��/&��@��P&��@��~&��@��y&��@��T&@��$"&54667&&53326533267B1C	fi�,./.��<##;�2.1!�w��`:??:��o�;1J��@���&P��@���&I��@���&R��@���&L��@�
�&-��@��v&@���B#"&53326536654&'7swww�-./-F,
mAV������`:??:�.",4=B��@���~&����@���~&����@���v&���@���T&���@�
�B&�-���
I�&-��T~&���T~&���TC&��TN&��H~&���H~&���HC&��HN&��Hd&���
H�&-��Hv&��HT&��8#~&���8#T&��8#d&��8#C&��8�
#�&-
��8�D#�&<
4�3#5732#'326654&&##3#FFF�^�NM�Z)3M++M3ll*ED�pp�Gw(\NNY%�KI6�3332##53254&##I�[GsEFtE[Rw<;R�c'[OMb.{�h3)2��0�"&&547!&&#"'6632'267#/JrAg?7"7D"]>NuABsL);�9P�iVOe )P�kj�Q@UU@A��,�"&'7326654&#"#36632i0 
0+7��G+:\6X	�!YTq]&$�1�>#'A�z��J�J�33"&'732653J�y"+ �!P��t�
m')~��6[7&A�333"&5463233&�i ))  ((6�i���|)* ** *�����|��.�JW~&'��h����=��/&���=��/&���=���&��=���&��=���&��=���&��=���&	��=��&=��n)4@"&54677"&&5467&&#"'6632#'#'26752654&#"@AC�;M)*C�2I(��42$I*43u@hxx%[!:IQ &P8=++{J#
6!+=��(D*SX
"&`&nr��8(rR"	��=���&=�.�,7"&54667'##"&&5467&&#"'66323272675�1D(%[02I(��42$I*43u@hx83!?�!:IQ &�21 1#
:((D*SX
"&`&nr��4AIR"��=�
�&-��=��&��=��U)&S��'��)&U��=��>2&W��=��F&Y��=�
�&&-��=��t&[��=��t&]��=��y&_��=��E&a��=�
�&&	-��Q�3@"3&&"&'#"&5467&&#"'66326632#327%3267&&55�({1M%F%;Jos"/4)Q(&;@$4F#�4$%'3I��
7)�-65.�h("("P>NZ.` )) AmA"32_�
-	,����Q/&�
����Q�&
��)�&"'###57533#36632'2654#"RH?sBB���I#]k=bY)8[/--B6)FHGL1I�nRt=x@H|.���H�D)�&<
��C�#�&2*��C��#/&�*��C��#�&*��C��#�&*��C��#�&
*"��z6!&"&5466323'53#'#72675&&#"3�Te6V/#2�o? "2+"��yQu>M��C3&x�CGIE�b���/�
�&-��/�D�&<��/��&2�/��R�("&5466323'5#53533#'#52675&#"_s=b5*;���BBxH+'**<2�uNp<M*LGGF��3$x�!?BC@��7��#/& ���7��#/& ���7��#�& ��7��#�& ��7��#�& ��7��#�& ��7��#�& 	7�#�2"3&"&5467#"&&546632!3267327>+<�
3B# N|IJvBMh5��L="=!138 ?�./]��21#8=uRRt>?kD%	62Y".&B��7��#�& 
��7�
#�& -��7��#& ��7��#�& ��7��M)& S����#)& U��7��62& W��7��#F& Y��7�
#�& &-��7��#n& e��4�-</&"���4�-<�&"��4�-<�&"	��4�-<�&"
��4�-<�&"1��4�-<�&"��4�-<�&"��4�-<�&"����&#�e<�����&#�e<��H�
�&#-��H�D�&#<�� ��&#2�e��H��&#9�3#57533#36632#4&#"HBB���	Q8SN� )-)FHGL+`-l^��2.���O�/&U�-��O/&U�-��O�&U-��O�&U-��O�&U-��O��&U-��O�&U-��O���&M
-��O�&U-��O�
��&$--��O�&U	-O��!#5!�Z}s���*�<�&�-��L�I�&&0��L�
I�&&-��L�DI�&&<LI�33773#'L����˟�J������H{��2�� �&'��<��2�� 6&'���2� �&'0C��2�
 �&'-C��2�
 k&'&�<-C��2�D �&'<C2�� �"&55'75#5!73267�]`U2��/z2�2&!'?p^U1[K�t�D\^�.#	l
������&'�
����#>2&(���#>�&(
��#�
>�&(-��H/&)���H/&)���H�&)��H�&)��H��&)0��H�&)
��H�
�&)-��H�D�&)<����&3336632#4&#"'667#"&54632�xH1JE�!��'48	
(47)8=W�@-k]��!1-��"NE/3).7UKR}��/��)/&*���/��)/&*���/��)�&*��/��)�&*��/��)�&*��/��)�&*��/��)
&*��/��)�&*/�)�!-"&5467.54663232672654&#"@0B+<e=GtBBsH`M&$  @43333333�21)<AoKSt==tScr"5	AJNCALLACN��/�
)�&*-��/��)&*��/��A)&*S����))&*U��/��*2&*W��/��)F&*Y��/�
)�&*&-��/��)�&*	��/��)n&*e/��Q�)"&&5466326654&'7'2654&#",BsHHsB71%l
B4#+HsB3333333=uRSt=
.+#
07=M!a>Ru=wM@ALLA@M��/��Q/&����/��Q/&����/��Q&���/��Q�&����/�
Q�&�-/��)
 (77&#"'7&&5466327#"&'72654'��!33P9. HsBK=.9/ HsB%F�33���Q��.7!W6St=&7/8 X6Ru=KR@!���/��)/&����Q�872654&#""3&&"&&5466326632#3267#"&'��%w�2S12T3'=D"3E#�5!#3H$K>kM@AMMA@M!.55.�h=uRSt=*11*AmA"41
_'//'��t$/&-�1��R�$�&-0���t$�&-1��t$�&-
1��a�
$�&--���a�
$�&-&1-���/�D$�&-<���5��/&.���5���&.��5���&.��5��R&.g��5��&.2��5��&.0��5���&.
��5�
�&.-=��;�4"&'732654.54>54&#"#46632�)@"1*./('�2eLAS)./'Nd
 $3(,(+#<3��>c91M+$2%"&9,-K,RI�3#57546632&&#"Ճ�.cM+L4]}m
9]6l	
W���1��&6&/���1�&�&/2K��1�&�&/0D��1�
&�&/-D��1�D&�&/<D��1��&j&/���1��&� "&&55#575#57733#3#3267�O^)||}�y�Ҿ�270!O7bAFXm��sXL
80j
��>��
/&0����>��
/&0����>��
�&0���>��
�&0���>��
�&0���>��
�&0���>��
�&0	���>��
&0���>��
&0���>��
�&0�>�$�&"&54667'##"&5332673327�1D(!Q5UL�),�:1!?�210#J%.l^2��1/!F�4A��>��
9&0O���>��
r&0H���>��
i&0Q���>��
r&0K���>�

�&0-��>��
&0�>��n�!"&5332673>54'7#'#�UL�),!)m
7*x!Ql^2��1/!F'&+/77D�7G%.��>��n/&�����>��n/&�����>��n&����>��n�&����>�
n�&�-���
9�&1-��T/&2���T/&2���T�&2��T�&2���>;/&4����>;/&4����>;�&4���>;�&4���>;�&4
���H�&4-����>;&4���>;�&4��F/&5���F�&5��F�&5
��F�&5��F�
�&5-��F�D�&5</��&�/7326544'&&#""&&546632&&''7&'77�F13>9 6?rCqD>e:$C
0#�(w*2@&H"�(o@M<r�;>LK	:��;lIHe6-IKD<Y)ED8<�qP~HH�H)�"336632#"&'#2654&#"H�G%\k>b6%>U(:,0..�u�M�sUx?Q�$FLCC�H�E� "&'73254&#"#336632q)

/ )-�x T7TN!J�	mQ2.���B .l^��7\7*�<��"&'73265#5!�.K +15'�Z(d�i
36es�.<g?A�<#� ,33"&54632"&'732653"&54632M�I%11%&00�)

� M$%11%&00�9,"#++#",�l')�6Z7�,"#++#",���z�."&5#53327"&54632"&5#533267�RU\�$!& ((  ))�RU\�$
 %p^�s�.#	l
5* ** *��p^�s�.#l
B�<u/33"&'732653'7'7M��)

� M��H�d�H�d��l')�6Z7�H�b�H�bH��"�%"&53366323267>54&#"(hxx&Z02I(��42$I*43u�IQ % !:nr8'(C*TW"&a&#H��)� "&'##336632'2654#"Q"FsxN+>Y0=cZ):^,," 6�3$>pLVy?xDH��H��'� ,"&'##46632&&#"36632'2654#"S"Gs+_N$:"+*G$\j=`Y(8Z-.!!6�:`;l(.L�oSt=xAI}�4���"&'732654&#"'6632�4j+<=%AQM8: D i>I}LK$%]M@AL[&=tSRu=C��-�+%"32654'67&&546632&#"6632#"'�*8!"')�r!!$P�L=] @2@AW/b*DO.V>F;�@!��1A5!Y7St=%X+PD%-.E=*F*//�Vm�"/"&&57##"&&5466323'5332672675&&#"7H#B#>]4=`5)9�$��),%83�*E(? >uQQu>M��S%"l�CGIE/��l� -"&5466323'546632&#"#'#72675&&#"�]p<`4';"K?


x
H)-$72�yQu>M,H,l#%��3$x�CGIE6��!�"3&&"&'73267!&&546632X�
::1i*0!="=M
��:mLBqEI}�]/.�hX26	&Dk?>uQRt>/���!"&&546632373#'#72675&&#">_4=b8&CsxK+)(<2>uQQu>!3�3$x�CGIE��n=�7��"�"&&5467!&&#"'6632'267##Mj5S
G9"=!0+h1LwEHtH-:
�@mC%	51X>tRQu>p/1`��o�(2"&&'7&&#"'663273267#"&'744'326�BW,�
+-1&S%DbKC	
#">$4]	�( )>h?y"]:6$8(F	$:Jq@�	H(6F��"�*"&&54675&&546632&&#"33#"3267=FpA>5.0>nF7j+5 H&91eCR75>E+I:.k#E326
;2=],c]%��0���!/��"�+"&&546632'2654&##532654&#"<LzGLyE:`:(/39<h=$-,# ##9FD9tVXs:?2":
:22E"pcHMRA*�<.�"&'732655#575#5!3#�.K +15'���Z��(d�i
36�Fvs�L�<g?1�>n�,9"&'732677##"&&5466323'46632&#"2675&&#")g,1#I82A">\3>a4&8"L@ 

�b(,%83�a."?>oGLq>#(K0m%#�3afE�C>=C/�<�,"&'732677##"&&5466323732675&&#")k,1#M79H#>_4<b9N9s�g+*%?7�d0"?>oGLq>?3� dpG�C>=C@��� "&&54>32&&#"3275#53QI|L.Oc5DX"B/(#@'H9$\� j8rW?bC#%X B5ELSb�&�-9�%"&54673366773'2654&'#/IW#��R

R��$WJ�PB&A0�� 4##4 �h1B&BP\) +��9�#/"&5467&&#"'66326632&#"'2654&',Zn7.**>)R%%S(>*(/6nZ""#"^X,\*k

%**%

k*\,X^w$99$<�H�57#"&5332673}S8SN�!(-���_.l^2��1/K�XH�!346632&&#"36632#4&#"H+_N$:"++	Q8SN� )-�:`;l(.]-l^��2-��H�E�."&'732654&#"#46632&&#"36632i+
 )-�+_N$:"++	Q8SN!N�	m'*2-���:`;l(.]-l^��7\7��H�'��O.�&O
-O	�353#5!#3O�����s
ss��s����&Q
-�H�##73753y��Ͽ�F������G}�X��2�� �&'=�w)�� �	)354&#""&55#"&546325#5!3#3267��]`	RJ;.$�/��2&!'?]&��p^O?.,8zt��LU.#	l
2�E �"&5#5!327�^_�/1!-!'?�p^6t�P.#l)�<W�!33!#"&'732654&#"'7#)���WU?i>Hd#B=&,85+1����N�
lIIf5/"[82,1G��y�33!y��s��5�#'##"'#"&53327332675o

3+D
6+5:�s
�=+Q"/VJ\��-0O��-O�H5� 57##"'#"&53327332673�
-)D
6*4;�s
���a,Q"/VJ\��-0O��-O�X#�E>�+"&'732654#"#4#"#3366326632�%
s
�o
2+D6*4;A�m Z-0��R-���>+Q"/VJ��0O0��E� "&'73265336632#4&#">$x O4TL� #*H�l!%�B .l^��7)��4W4H�Et� "&&54&#"#336632327&@I #*�x P4SL
%�4W47)���B .l^��%!lJ�333&&553#'&&'#J��
	���
 	��<.\%���<.[&�/��)�"&&546632"3&27#,BtGGtBCsGGsCY�Y_�;tUVs;;sVUt;�``��jj��Q�%"&&5466323#3#3#'27&&#"�8f@@f8,"힀���/!3&8sXXs:tMcXtsBM7?�G?�#5.54667534&'66�8b;;b8|9a;;a9�.&&.$.&&.��=oOOo=��=oOOo=��CJ"IDDI��J4����#'##"&'73267�x%i;!)%.Z�l=;

{6C4����"&'732673#'#�!)%.Z�x%i

|6C�Cl<<4�E2�"&&55##"&'73266733267�=FY0+!$40�
.�/O/m56

|0(�("k
t�E$�"&&5336632&&#"3267IN^)x%i;!)%.Y 170!P�7bA�l=;

{6C�9/
k
t$�346632.#"t8v]5T!!A-GqC	{D;�J6�332#'#32654##J�9]79)��mGV('OV�G>:H���$<J6�73254&#3##33�VO'(^��)97]9��G�<$�H:=H�5�E�5"'3267#"&55732654&&'&&54632&&#"(99
)XI?.e5)&41eXzjCm'B%T)"#4?MT"} ij^3\
K:EV+X+:)C]+�<1�"&'7326546632&&#"�1A*&&%XL.=%"+""R�
f	+,�9^8i	
+,�9^8+�<1�%"&'732655#57546632&&#"3#�1A*&&��%XL.=%"+"��"R�
f	+,�E�9^8i	
+,�K�9^82�h'�23#5#5354&#"'66�O^)}�y��27/!P�7bA�m��s�80
j
1�E&�"&&5#57733#3267�O^)}�y��260!Q�7bA^m��s��9/
k
����X� "&55#57533533##'#'32675#�PIRR���VVx
K9'�k]NE����K��E%,�5)b'��1�#"&&54675#5332654&'53#,Op:/W�!2451!�W.:o>b5<Ys_%K94II49K%_sY<5b>>��)�"&5332654&#"'632*l��2-/3
-Kd9qyv
��@:\P;8mcl^�N9�
#'&&'##~��NN����&L''L&��T� #'&&'##'&&'##33677Q�k 
�L�	��%I%%K#��%I%%I%�� H+:Y�9�3>32&#"#'&&'#�;S=%(/גS

I	>V,p(-��#K'%K%�!9�353366773�Û64�–Zk#?&&?#k���F�Ez�"&&55!5#5!!327-@I������
%�3P+
O.sN��t%!lF��M�
%%"2232654'67#5#5!6632##� 	�J	�����*G+1:U\� $��5.O.sO��EL76<V94�<�"&'732654&#"'7#5!2Oo(CH,5EA70���=[3Es�7%\&:4.4
G�sN�3U4Jh6���<j�0;"&&5466323'53!#"&'732654&#"'7##'#7275&#"�,F')F+2 sk=D+P9.C9 #'$.nzY,!" @uOOtA.[��O�kO?e;^29/.	Q���,x3�!EFFG��N�0"&55#57733632&&#"'2654.5445#K�wDJz�!)(I1$'"12"1qSB2#44#A@l[�m��O#+>.1G'm#!(6(�4)�<��4"&'73265#327#"&55#57733546632&&#"r)
�4$YMDKz�"PD#
!K�l')~�*%
kjV�m��3X6l')��6Z72�3>54&#"'6632�BM A8*FI$pMDsE+O59(:5 /3)]'9/]G6QF'��E#�3.546632&&#"�5O,FsDMo%IG)7B MB'FQ6G]/9'])3/ 5:(��2�35#5736654&#"'66323#͗L]PM=4,JI&tOBoCG0���E0\*/3)\(8.]G7`%K�9#�35#573&&546632&&#"3#��L80GCoBPt%IJ,4=MP���E%`7G].8(\)3/*\0K�C�H�#575#5733#3#㠠��������<FyF)��KyK��/��*�+"&&546632'26654&&#"7"&54632,IrBBrIIsBBsI6!!65!!5****P�zz�OO�zz�Pw,k^\i--i\^k,�( ++ (B�J�!"&'73265#'##33&&553z)		
�8���8�D�m'E�6|:�����4:�6[7��/������/��/&���/��/&���/���&��/���&��/���&��/���&��/���&	��/��&/��n#0<"&54677"&&546632373#'#72675&&#"2654&#"4AC�;M)*Cu>_4=b8&CsxK+)(<2<8=++{J#
6!+=��>uQQu>!3�3$x�CGIE��/���&��/�
�&-��/��&��/��I)&S����)&U��/��22&W��/��F&Y��/�
�&&-��/��t&[��/��t&]��/��y&_��/��E&a��/�
�&&	-/�(�'4"&54667'##"&&54663237332672675&&#"�-?!
K$>_4=b8&Cs3';�+)(<2�211$	6$>uQQu>!3�4	AO�CGIE��/�<����/�</&6�
��/�<�&6
��/�<�&6	
��/�<�&6
��/�<�&61
��/�<�&6
��/�<�&6
��/�<�&6
��Q4�&@
Q4�	353#5!3Q��/�s
s��s��Q4/&@���Q4/&@���Q4�&@��Q4�&@��Q4�&@��Q4�&@��Q4�&@��Q�4�&N
��Q4&@��Q�
4�&?-��Q4�&@	��Q4�&P
O���"&5467##5!3267_1D6 *�Z2* 

?�21.?}s�3AQ�4�"&5467#53#5!3#3267N0D4۱�/��2(
@�21.?s
s��s3AO.�
!5#575#5!3#���Z���Evs�K�Q4�3535#575#5!3#3Q����/���seEZs�Kes��
#3267&#"&&'#"&54632#5!�" $),Q5T_WO,*�Z6-�/!V><I
5s�%P3Q4�	353#5!3Q��/�s�t��s��Q4�&R�<��QP6&R���Q�4�&R0��Q�
4�&R-��Q�
4k&R&<-��Q�D4�&R<QA�3535'75#5!73Q�T2��/z2��s�1[K�t�E\^�s����&R�
�����i�	#53#533353#533"&54632`\�NP\�^��&&&&s�t��ss�t��s.''''��Q4�&R=wQ4�
#354&#"535#"&546325#5!3#3�x�OH;-�/���[&

��s�=+*8	|t��G�s��	O���J2�l�3!!l����|��9�353%3'&&'#������9

Y3��Y|�1n44n1��\���8#���@�	&��2�"&&546632'2654&#"'53,NvBBvNNvBBvN3<<33<<�R�jk�OO�jj�Rtbbnnbbt�����J�
��DR�I�
33#&&'#ıŜNM��t05f66f5���:���B�B�35!5!%5!B�pL�z�||{{�||��&��2�@�3!##@ؓ���t����K1�?�357'5!!!?�������%Y��Y|��|��9���H���H�5&&5467534&'66�g{{gtg{{g�5++544,,4U
�ww�
TT
�ww�
U_?Q
0	O>>O	��
Q��F�C�35&&55336553�et�Q|Q�te�tm�n=��n��mt�9�'3535.5466323#5>54&#"d+AvOPuA*d�9669wEZ6[�NN�[6ZEwj&FN3UmmU3NF&jO�	3'&&'#3#'#'
p

鳰�� �!p^-~J<<1X99X����t��[F���3!#3#3'�:�����G^-~�|�{�|[F��(�33353##'Ń^��^�^-~����t��[F���353#5!#3'�YYFYY�O^-~|�||�l|[F��JN�����2�"&&54632'2654&&#"''b=^5t\\tt\ %&�^-~Q�l������`vOZ''ZOv`�Fp�!53366773'\��(		
)����^-~���(G&&G(��P�[F��HN���:�%)3535&&5466323#5>54&#"'�R)3]??\3)R�$  %�^-~w2wTU�II�UTw2wj+GL1a__a1LG+j[F*��N�,"&546632373327#"&'#'2677&&#"�Xl;`5,I�

,4>30 3/!7+�yRu?+8W9�v&l
%-Rx?,V,+CJHCH�O.�246632#"&'2654&#"'6654&#"H/aK7b>+*:O:Z0%O#b'8+*5),%'9��Dl?'P?2J`FI^-&;t923'8k>*)'HDI�I$�O1�>54.'736673� 9I*�42)0�-D2�$-"/���9 "j�GP�Z?nn|L.f*5��#�!-"&&54667&&54632&&#"'32654&')BoC-I+-D]a:{8!9j)2W@3E#<p�A,.:4'8B6gG5O9P91Im9) AO6Fj;�698=,>
EF��"�,"&&54675&&546632&&#"327&#"3267JNuA>4./>nF5j+6 H$82d"$++63<FL%:9g"D326:2>_+i^(V�E�&'6654&'.54675!#�s0D&H;"��=GE�?hM)=4VI�&'5T=_�RttVa`((2
7:ZA�O�>54&#"#4&'336632&0��"M7VE�N��96(!%��XS(T*6k]�7��!�"&54632"3.2667#,n��nn��n,�++�,��������^SOOS�!VNNV!=���"&&55#5!3267�HR!�%+,+ H2]?�s3th%.#	lI��J�!34&'33>7&&'U�&Yi=(I)DK"�E#XT'?#]:a@�$#1kb&&jDH8"��@�''&&#"'6632##���
3  2-Wh!��c�'%w
bn�N@�<I�&3326733267#"&'##"&'@�"!/�%19
>$%
����5+")4:�v*m./+-	<b8/�3.'736673�?O)�+''0�1M9^��= "Zb_)V�UW��];�E�7'6654&'.546675&&54675!#"3267&&#"�s0D8^7(C'051)ԍ1<81(.:P B3=A�&&*L>+H5
E-2ss/)"8t8-"%
0'Y3��%�"&&546632'2654&#",BqFFqBBqFFqB2002111=uRSt==tSRu=wM@ALLA@M
��N�""&54665#'665#57!#3267�SAz�
bK�R
&]MJ\)X�c	e�Rnt+bKl	H�O)�46632#"&'2654#"H@nEp~=a6"FV'8\+81��^x9�wUx? 9l7FL�J?g/��@� "&&54663!&&''2654&#"Al@Fp>(?'&);gA).-*(0/;qRVq7yV8Gh8wB=;T?H@G2��&�"&55#57!#3267�YF�J�� >cR�ms=r+ n
>��� "&&54654&'332654&'7&Nd/�1%/1�}9dB!C!S(>#c/-/LR-g@9x;���O?t#5.54667534&'66�8b;;b8|9a;;a9�.&&.$.&&.��=oOOo=}}=oOOo=��CJ"IDDI��J)�CD�
'7373'#�����w[��ɑ~�V7 ����� ��OEt%5.554&'3336654&'7�N[(�",{)*
�ol��@h>{R)>#><*@
��FQ2hB:|>�����B�-"&54673254&'332654&&'7#"&'#�O_,"�%&-|�!)XQ":4��>�74>l>4A]"6++6"4)HC)BC'15yM��#**#I�F�$'6654&'.54>32&&#"�s&5*QC(/Pg79\C0?RJC>E�&+
#8W><]@"# [H<=8#6)\H��.�)6".5546632'2654&#">54&#"G/[I,0cL5a=/)'?&?iD&6++:/#4R@B,*#<_D�Dk>&O?2O2M/G].0-(8
4=V%$2")'K9��!�
,7&&"&&54&'332667.546632�.RAC/*/lMa,�U*UwO-9b=Xy?z,"
	hT/��4V4"1
4\#\U
-<>7X3X�n�����O?t��OA*6654&#"5.5467546632i'/{:b;:.b%%*-,N1PX<`8,Y-GJH>3���?tSA�4U/Y3:L�Zn2�tSvA+U*��*��N>&��F��">&� ��A�O>&���=��>&����=���&����3��%>&���>��>&����>���&������B>&���=��>&�J���>��>&�J�I�DJ�(34&'33>7'667&&'U�&Yi=(I)DK"0,�%GD"XT'?#]:a@�$#1kb&#H=(W)&iCH80�O(� %2654&#"5.546632,42244223T1GsBBsG0Q3dPDALLADP��BgDSt==tSCfC-U-J�F�!'6654&&'.546633&"#"�r&)9iCKM�(Z$>NBI>E�&*
8_HUp7y>G.8#6)\t�O�!!3#t�������s�aL�S)�K*�'6654''7&&''7&'7�		4h9<�
x�<�Er_��
�2Z-"5 {p/6H{oeLlv���1d����'�"����$��0������������3��/�*��p*3773�/`�����.�>�[~�'1^-~[F��h:�>J���(���E����"&533267gR?�'[L.bZ!m	���8�#���8�#���8�!���+b����.�>��j-�m��i-�j��j-�l��s-�i���3�Pn���3�Pk��n=����o7�!M��h:�>J���;�GN����'6654&'7�$+\L&?�:J9,)4����.5467Z%@&L\+$�4),9J��t�'7<}�����[~������'6654&'7'7�%LH$6�<}�:J90#1��}���.5467'7�7$IL$
~<}�1#09J7������'6654&'7'7�%LH$6�^}�:J90#1�����.54677�7$IL%
C}<�1#09J&������#"&&#"'66323267'6654&'7_!?)%!?){	&
SAE8	3$	4#�/		;!%&����
#&&54677"&&#"'66323267O0EBR
%
!?)%!?)�&%!;		v	3$	4#��	O�J2�3!!32#'32654&##J���[EqDBoE_P;:;;O�|�#SHJ\)s+..%��J2���l�`�DL�	3#'53667>7!3#5!��U�%
YO���JBg%�(9:���\ev:Y^>��\ܼ���\�W�-3'&&#"'6632353376632&&#"####q	-C&x&B-	q�B%x%B[��.C����C.��������.��,�*"&'732654&##532654&#"'6632%B�5N&S.6C=@WC>47,(B"K-r=tz*)1AEw,1f#!.*)&m'#&"b(+^Q/K
P;C[.@�33373#5467#@�8���8���:4�D�t�:|6�����@C&�ER�33376632&&#"##E�:L"S7
!;˞�<���D2�#w���������"&'732667667!##G"
[�W
2C�BGb�b�tE{Fmy0��:���@�	��&��2���@�m��K1���6��:���9���F�"&'7327733773�(	.	ݜL64E��_�⾜���JV��H�5&&5467534&'6�lvvltlvvl�`1/4/1`Z~rq{XX{qr~ZU{	C>>C	����F�@�D^�33333#5@���K
z�����\ܼ-�!#"&&55332673�-!Mo;�:='�.iX��D6�t:�333333�OxO�������t�D^�3333333#5~KtK~;s�������\ܼ9�3#5!32#'32654##��>h?<e? .0c|�*XGN^)u,2V"6�3332#'32654##3"�;[47\:

&+R���)XHN^)u,2V����tJ2�3332#'32654##J�VJsBEtISJ:A{J��)XHN^)u,2V��!�"'73267#53&&#"'6632��ZNE+>M
��M>%;N$n@S�NP�`\$KT{IC^"3K�ts�G��D�"%26654&&#""&'##336632�I\1��2
[G]ees%]TTZ""ZTT]%�������~�����!5##&&54663335#"�I���8FDrE��LL:==��^LNX%�t`�&001��\~]��\Na��:�""'732654&#"##5!#6632�*
+$����%3Y6)F
p631��||�+_NNY%��l~&��7��9�"&&546632&&#"3#3267gU�QT�T?d!N8#;V��
SC(?NRG�st�K3"^CI{UJ$\`��2��'���J�
��JN���;������E�#+"&'732667667!32###%32654##+
7U15[8|2!9%$'L�6;i�Z�(XHO^).VfFYh+�,3UE�3335332###732654&##�V�7U13V6�V� #!#����(XHO^)��u(7/&8�5!#6632#54#"#��#Wh�H�||�Ye��H����ER~&����@~&������FC&�?�D�3333##5?����z����t��<�3#53533#32#'32654&##�ww���%GsEBqG*!8;:>�u``u_"OBN\'r(2+%&��2�"&&546632"3&&267#,MwBBwMNvBBvN-;	�	;-/<�;N�no�KL�nn�N+KJJK�NVRSUo�33366776632&&#"�ŜO
%NH	y���6e66e6�\S�#�2l83!73!l�������2�
3#57!!3#~LL�����F(|�K���De�23'&&#"'6632353376632&&#"3#5####q	-C&x&B-	I6
b'B%x%B[��.C����C.���\ܼ����.�D,�,5&&'732654&##532654&#"'6632�3`)N&S.6C=@WC>47,(B"K-r=tz*)1AdP��+&f#!.*)&m'#&"b(+^Q/K
P;Qb�E�D]�33376632&&#"3#5##E�:L"S7
!;�Ss*�<���D2�#w�\ܼ��X�3#5!37>32&"#"##��13'3 



,��p1|��03�$|����@�D^�333533#5##@���K
pa������\ܼ��6�D:�5.546632&&#"3267!Bj?S�W>d!Q7$E[]I#;Q7T��S�^l�Q3 [pbdp YB���H�H�35#57333667733#�_��BB��r��Fq�%I''I%���K��DU�333667733#5#'&'#���?
:��vWp7GDO={44{���\ܼ�0;3�,�D\�!#"&&553326733#5~+Lm:�8:&�K
{.iX��D6��\ܼ>*�336632#54&#">�+!Mn;�8>'��.hX��D5����J�
��WC&���	OC&�����S�M��\C&���2��0����@/&���&��2N&���&��2�����F/&�����Fy&���=���<���-32654&#""&54>76676632�91+*.(8kv�.TsF.2@#4I-L*5W5<jTTI>B7#
�ګ�o�T*

�803fLLs?T#�#332#32654&##32654&##T�;_8(,/8;b;gQ*$$)R^-%',]�92;623?/��t�3!!t����s���TF�3#'53>77!3#5!��n�
uO~��
1J
�׿` KF��`�����7��#� V�-3'&&#"'6632353376632&&#"#'##5#q

-C$p$C-q�A*p*A<�);i��i;)�<������0���)"&'732654##53254&#"'6632=o;9)T"F>[xoS2>+H)62m=Hn=%375Dv*]0c/_!>2:
722E"I�33366773#5467#I�#���	"��%].;��&\.=��I�&"
MF�33376632&#"#'#M�N.I5
��vO�[?)	� ;������
�"&'73267667!##I
v�o

R�"(J�J�}7o7SY%3�#33366773#54667##'&&'#%�;	7��
6Q9�66��OP!J �� LPOH�33353#5#H����������/��)�*H�3!##Hȓ��}����H�H)�+��C��#�2&�3#5!#��}ss�����>;�4�HB�#/:57#"&546632'536632#"&'275&&#"32654&#"�&CO*C%#|->J*D'$�!� �K�yQu>H��L�sUx?H$�DGIDFLCC���%2�3H�TI�33333#5H���O~�}��`��@�!5#"&&55332753u(#>`6�-4$��'YJ��.)�#5�333333#�IxI��}��}�#�T_�3333333#5#�FuF�;q�}��}��`��3�3#5!32#'3254##��&<`88`<&NN}s� H>@L p<9&2�3332#'3254##3&�$3Q00Q3$??�� H>@L p<9��Q*�3332#'3254##Q�i?d::d?icVVc� H>@L p<95���"&'73267#53&&#"'6632�4m'7F#>R��
L:F2?g:NLI$V17c2+#U#9sXVt:��D�%2654&#""&'##336632�!C^4��5]ATddk=PP>>PP=wec��_a����"�!5##7&&54663335#"{Gm��)97]9��VVO'���H:>G�<$��7��#/)��7��#�-�<&�*"&'7326654&&#"##57533#36632=%

,*(�BB���	H1\a9h�l)j`MX$��*EHGK,^-����E��t/&�#C��!�"&&546632&&#"3#3267[PIP�O9[!?;"8N��R>%D4*j:tVWs:Y,1c71Y%��5���.��O��$��O�N��*�<��%���@� '"&'73267667!32###%3254##.	4S11S4�3

DJJ�-G�P� H>@L }>}>EK|<9$?�3335332##5#73254##$�O�6S//S6�O�CC𳳞 H>@L ��p<9���I��MF/&$���I/&"����>;�&-
K�T
�3333##'K����~�}��� 2t3#53533#32#'3254##������&<a88a<&OO�tWWtW I>@K p<9��/��)��%K�33366776632&&#"ֱ�K
	EA	]��%M''M%HXV|#��x�3!73#xw	���/�
35#575!#3#�SS�����E�srK��Tc�23'&&#"'6632353376632&&#"3#5#'##5#q

-C$p$C-@>a%A*p*A<�);i��i;)�<�`������0�T�+'&&'732654##53254&#"'6632�+S,9)T"F>[xoS2>+H)62m=Hn=%375bO�� ]0c/_!>2:
72=J�M�TR�33376632&#"3#5#'#M�N.I5
_Xl3vO�[?)	� ;�`����S�3#5!376632&&#"#'#��3 E0

��h3}s�[A'� E���H�TI�333533#5#5#H���O~V���`����C�T#�'&&546632&#"3267YsP�L;`D77@PN='A;B#���hSt=&['LA@M] ��H9�53366773�ǔP



P������'F$$F'�� �H8�5#57333667733#�M'��P



P��n���E��'F$$F'�[K�%�TA�3'33667733#5#'&&'#%���3


,��Za|#9
1�P+,P�~`��R,+R@�TJ�!5#"&&5533267533#5h% <]5�*1�O}�'UF��('��`����H�#��V�& 
��2�� �'��=���&
����Q���7��#�&
��7��"����I�&"��/��)�&(��/��)�����>;�&-���>;
&-��/�����/���&e
C���$0"&&5467&&54667>7'32654&'%?f=]G+D5bB:@$C"CA!;%DL<l�:'(;-#4@6dDTd H-49	�


,jQEj<�49;>+;
F��Q4�?��Q4�E��Q4�R���u�)5AE"&''26533&&554632"#&&'#"&54632'2654&#"53
�e


-1
�a-�1JJ11II1J�q�{3[z1_@Cq��/[z1_@COXWQQWXOZ"+,"",+"�NN��J�2=6654&#""&&5467&&5466326673&''327&&'�
	%D]0?*'I1JS%8= 	�, 3(#CG%Y}1(  "@
�%.'��3U2AS&G/M/PD)A4; K+;n3 	w."�%.C$%8�� �'"&54632'26654&&#"7"&54632,n��nn��n 33 44,, ++��������r(`RS\&&\SR`(�*"#))#"*O{353#566733O��AN%l�wo[
��w3�35>54&#"'66326633:[�L62&?O2hICd9Aj>?�TM}i-/1'O232[=5oo6|*���*"&'732654&&#52654&#"'6632Rv%D P+4C"SK^M2,%A!J/l=Ej;@9<RFs2(]$'$)h/&!%Z&+)M81FM>;S+#.{	35467#5!533#��$D��	�PPkO6�n�e~��p�.��{"&'732654&#"'!!632Rt'B I-6EB2, A���(,;c<Fq4%]%2102*A|w*WDFd4<��!�+"32654&".54>32&&#"6632=<B%&;4*1\I+.Mc4Df M< 'C*"S$8X4?h%"L9161+��$LwTY�T)-X&WK!$*WCB_4>{3>7!5!�+D2���<K(P�wt?|ZCv{�]=���&3"&54675&&546632654&#"2654&&'+n�G1(58a?_q5&2E8k"0.,#1G,8'D.#BaM;IH26O*_O,GLA2P.~,1%-$%',��'(%3*/5���*3267&&#""&'732667#"&&546632�4+=A&%<NCg!N='B+"T#7Z4?h=BuJ-Na�1+"K91�.X&XK!%*WCB`3A�pY�T)8�� �!"&54632"6654&&267,n��nn��n(�3 '�4��������*��*Va'�@	)Uc*O{
353'733O�`H�t�wBCQ���w8�� N'"&54632'26654&&#"7"&54632,n��nn��n 33 44,, ++��������r$TGGP!!PGGT$u*""**""*OB353#566733O��AN%l�w6[
�5w3N356654&#"'66326633:��62&?O2hICd96^;?}TY�8/2'P222\>0\W+|*��N*"&'732654&&#52654&#"'6632Rv%D P+4C"SK^M2,%A!J/l=Ej;@9<RFsZ2(]%,(*h2*!(Z&+*O84IMA=W-#��.B	735467#5!533#��#C��	�PP�wN7�Z�e���p�.��B "&'732654&#"'!!6632Rt'B I-6EB2, A���&;c<FqZ4%]&7552*I{�	*YGIg6��<��!�s>��B
>7!5!�%NC���<K)Nm��V{ZD{��`��=���u5��N+3267.#""&'732667#"&&546632�4+>$0%<NCg!N=%A,#S#7Z4?h=BuJ-Nas55$9@2��-X%YM"$.^FEb4A�p_�Y+8�� N"&54632"654&&267',n��nn��n%�3 %�4���������
�#.JS#�y�!-JX%OB
353'733O�^H�t�wAQ��5w8�� �'"&54632'26654&&#"7"&54632,n��nn��n 33 44,, ++��������r*dUV`''`VUd*�*"#**#"*O�353#566733O��AN%l�w�[
��w3�35>54&#"'66326633:\�L62&?O2hICd9Aj>?�TMk.47'O235`A6qp7|*���*"&'732654&&#52654&#"'6632Rv%D P+4C"SK^M2,%A!J/l=Ej;@9<RFs2(]$)'*h2'$&Y&,*O93IP?=T,#.�	35467#5!533#��%D��	�PPq O7�_�f���p�.��� "&'732654&#"'!!6632Rt'B I-6EB2, A���&;c<Fq4%d*4424+I|+YEHe5<��!�+"32654&".54>32&&#"6632=<B%&;4*1\I+.Mc4Df M< 'C*#S$8X4?h."O>383.��%NzV\�V*.X([N!%+YECb4>�3>7!5!�+D3���=K(R�|x@|[Cz�`=���&3"&54675&&546632654&#"2654&&'+n�G1(58a?_q5&2E8k"0.,#1G,8'D."BdO<KK38P,bP.JPB3Q0�,6'/''(.��)*&6 +25���*3267&&#""&'732667#"&&546632�4+=B&%<NCg!N='B+"T#7Z4?h=BuJ-Na�3."P;2��.X'\N!%+YEDa4B�s[�W*8�� �!"&54632"6654&&267,n��nn��n'�3 '�4��������:��-Yc)�0,Yg+O�
353'733O�^H�t�wUBQ���w�����"&54632,4@@44@@D12DD21D��'��'66'#"&54632�%CA*BB.>>j�VI.51/8[Q_�������"'�C�����'�"'�C�����Y�#"&546323"&546323"&54632[)33)*22�)33))33�*22*)338()77)(88()77)(88()77)(8����7'3"&54632��0+99++99�����9-,88,-9�R��73"&54632�`I+99++99�����8,-99-,8b����&7&>54&#"'6632"&54632�+. * 0R$c;:\7!/.<+99++99�(<.'& K(2$H7(7+)2#��9-,88,-9g�F��&"&&54>'33267"&5463249]7!/.�+. +1R$c5+99++99�$H7(7+)2#(<.'& J(3�8,-99-,8�/��''3�#�#/푑�R/�'��{���"��"&5467632-7>WX&48
(36"TLR}(ND02).7�"��'667#"&54632�'48	
(47)8=W"NE/3).7UKR}��3"�'��{����E"$�'��{������������E�$�'��{�������"��&&54632#"'gWW=8)73)
	84"(}RKU7.)3/E���%'57Z��>���7�����7'7'7�>>�7��7����*�'��{����;.�'��{����F~���F~���F~�P�675!P��oo�X655!X�ooP�675!P��oo���X6����������e��%"&&546632,.K++K./J++Je*I..I**I..I*vS��%"&&546632'2654&#",4S//S45R//R5,77,+88S/R23Q//Q32R/K:..::..:�r��7!�.r(���`��7!%35#�R����`L��F�zr��753z��rD��Z`��753%3'Z��ղY`x��F��T��73�D��Td���4��7377'�y��C��4���yYZzR��%5!*�d�RD��Z0��%5!'7#*���Y�0x����|T��%%5%3���DT����Y4��%%5%3'5��yF�4��\y�Z�k��7!'26654&&#"�<�*B&&B**B&&Bk6��%A))A%%A))A%�XJ55!X���<�\��5!<�nn<����5!5!<� �^^�^^>I�5!>�ISS�c����"&'732667,x�g&A��??��A&g��=?C$++$C?=��M��
&&5467�arraRYQQY�V捍�VAW�wv�W~�M��
'6654&'7�RYQQYRbqq�AW�vw�WAV捍��h��!#3�(���\N�@Nh�h��53#5!h��(�N�N��j�h��/"&546654&&'5>54&&54633#"33�`Z<66<Z`M)>(/55/(>)�=Q$53!V"36#Q=N*(O,93		39.L)*Ni�h��/532654&54675&&54654&##532#i)>'.66.'>)M`Z<66<Z`�N*)L.93		39,O(*N=Q#63"V!35$Q=J�`�3JI{���f���m�3��J�`�3���{I�f���m�33낂����H0��H@[67'7'7737'�@a��N��a@t[,�DG+��+GD�,�Y����5'37'�	��	v	��	Pv	��	v��Y����75'75'37'7'�	��		��	v	��		��	P�	v~~v	��	v~~v	�G���1>"&'732654.5467&&54632&&#"654&&'7j"T3<&=C=&-%
^T:]D86'?E?'+)b� 4=$6O(%T)+K3+A/&D)DU)\' -@-,A&C[�!% ( 0���
%"&&5466333 AnAAlA*4��4hLTb)�9���$��w���&Ȍ�t��>���'��v����D�$=I7&>54&#"'6632"&54632&>54&#"'6632"&54632N	%AJ'?V! 4+99++99�	%AJ'?V! 4+99++99�/G;7
TI>+@314!��9-,88,-9/G;7
TI>+@314!��9-,88,-9<��D�$*6%&>54&#"'6632"&54632'3"&54632f	%AJ'?V! 4+99++99���0+99++99�/G;7
TI>+@314!��9-,88,-9����9-,88,-9���$*67&>54&#"'6632"&54632'3"&54632N	%AJ'?V! 4+99++99��0+99++99�/G;7
TI>+@314!��9-,88,-9����9-,88,-9@����(7''36654&#"'6632"&54632�
v%<,&<Q(v<Af;$54"8(44('44��\\(1((+K.1(J41D1%$��7))77))7\�F�(%#753267#"&&54>'2#"&546q
v%<,&<Q(v<Af;$54#8(44('44�\\(1)(+K.1(K31D1%$7)(88()7���3!#�(��N��h��!#5! �(qN�A�z�{33�p���MNh�z�{533h�p�N�����h��!#3%3#�\����11�\N�@NN�h�h��53#5!'3#h��\�11�N�N��N����!#�'��N��h��#5! �(\N�V�h�33�p�����Nh�h�533h�p�N`�R��E�;"&&546632'26654&&#"7"&&546632&&#"3267,L�MM�LL�MM�LAb66bAAb66bM2N-1O-'57%'&!/7	Q�gh�OO�hg�Q=D{RRyCCyRR{DK0Y<;V/=
>,3<
D��E�,4"&&546632'26654&&#"'32##53254&##,L�MM�LL�MM�LAb66bAAb66b:�+F)*F*<	Q�gh�OO�hg�Q=D{RRyCCyRR{DWm901@[�@e7��)2"&&546632'2654&#"'532#'#532654&##+6Z66Z67Z55Z7?QQ??QQY#.*<74[;;[44[;;[41SFFSSFFS8� "M<<d��jR�5#53#333773#57##'#BO�Nqg""gT5:6j�WW�:^GG^��`s��s`��^R�&:"&'73254&''&&54632&&#"733773#57##'#k!72#*%>7 8,") Bng""gT5:6^<	*&);=
	

(%(?:^GG^��`s��s`�m&�/9".546632#'##"&&5466754&&#"32672675S<oV3R�QLa.N<)$:!=pL:-/Z;=a6-;**U$F9�1b�f��SAoE��3#&?'6E(	%@'>�nh�CIK\$!��&�0:".54>32#'##"&&5466754&#"32672675S<oV31Vo=I^-N<)$:!=pL?>#G<$=a6-;**U$F9*T�W\�T(;c<��2#&?'6E'
)?=eHTo6I[
$"F�37#7#537#53733733#3##7#�i
h�KW
P\TiTOZT_Uhn�y�^n^����^n^���T�'7'7737'�@R��N��R@e,�8H �� H8�,~|��675!|`�oo��|��6���|��6�@���'-3'7&&'77.54632237&&'#74&'27"W'L@3)N2wdX"7I*O47iM`J�Es
�
#dr)@1L[�
�$Th*A11P.�
a,	Z��l�
�2���x���2���x�
�2���l�
�2���x�
2���l��2���l�
2���x��2���l�
2���l�
2����X2���}X2���ol�2����v�	2�:��"&54632'2654&#",KbbKKbbK))**�nbbllbbnR8FE66EF8��F��535#566733�ym08Ui�Z�C��Z��F��'6654&#"'6323�Yf# -$=>aEUD8��9A]$!08QF>0S1Z��:��'"&'732654&#52654&#"'6632*7XA.&25*/!&= I1'B(B&+-I�''3>7# 0"<1#$6��F��53533##5��Ok\_::_d6'�ddGVV��:��"&'732654&#"'7!#6632*7WA.&. -�
%>&[�''3" �[79(:M��:��
$"32654"&54632&&#"66321$)"4T]f[/:*$.01=G'C

)$6�p\^tD

71B9'>$��F��>7#5!�2#�:.3�=_[4[::fkA��:��$0"&54675&&54632'6654&#"2654&',HX,%#!V=@SE()X7""/!"�@."3*299293%.A��
��:��%73267&&#""&'73267#"&546632�!#(#%.=*%/.1=G'D*T\dQ
)$��D71B9'?$q\]t���&.54667J'11'O/))/��/U]<<]V.(?uA@v?���}&'6654&'7P/))/P'00��(?v@Au?(.V]<<]U�=l��"&54632,%%%%�$%%$��v��'66'#"&54632�&(''HA��7
#"a9Q����D"&54632'2654&#",@TT@@TT@\MNYYNM\O'33%%33'��8!5#56673Q&*S�@����D356654&#"'66323�>T>A(;G2\7)L#8$:3"AW����D%"&'732654&#52654#"'6632-F#)-#& '#*E(2E#NB7	>1(!
&,8��D7573533##5�`LMA^33^=3��XXB==����8"&'732654&#"'73#6632."D#)++Յ
2;LB�X#3..@����D"%"3254"&546632&&#"66321
$GO%I6 7*
&"'.6G� �^I-M/=."0..B��83>7#5!�&�&(-HE'W8+MS5����D$/"&54675&&54632'654&#"2654&',;K'J35I#K.
6% !)22)
$$%6�

�

����D	#%3267&&#""&'73267#"&54632%
	#!6)
&!'-6G6GO%I���<
-!
0./A^J,M/����&&5467B3993OS+(Y8xOOx70am7i/����'6654'7O)*SO399Y0/i7ma07xOOx�lz"&54632,%%%%	%&&%�}vz'66'#"&54632�&(''#%A�8$#3/9P���+�{
7���7�o7���7�{7���+�{
7���7�{7���+�o7���+�{7���7�o7���+�{7���+�{7������7������7���.l�7����v�7���o��)���o��J���o��7�o��""&5467&#"'6632#'#'2675�2<ep93%#Q*DNS:#?2o<(3?+DIM�$N8�o�K"'##36632'2654#"O0)	Qh/>H)A>#8
o+#�u2\L8P*T+1U�
	�o��"&&546632&&#"3267[2P/4U1"50

'//$ )@o)M67M*@1)(1@�o�K "&546632'53#'#72675&&#"@L)A$&gT0
$ o\P6N*1t�, T�	)./+�p��"3&&"&&546632#3278*�#3T10N-ON�5%**"Gz  ��(M74M+\B">�w�R5#5754632&&#"3#JJGO3#<oow�M
8LK3
Q�����+7F%"&5475&&54675&&5466323##"'3322654&#"2654&##"&'@W4(B%�AP;
6<BGlV&1(	,�(+' 
,(5K:4
(,4C0�	
�w�K36632#54&#"�h5$83hw�u=I>˾��w�k5#53"&54632&}�7&&''w�Q��v"$$"���k7"&'732655#53"&54632�0"~�D)&&''�
I	 #�Q��(E*�"$$"�w�K3373#'�hqr|�pQ-w��~��~-Q�o�K"&5#533267zC=E�

&oL>Q��P0w"�!3366326632#54&#"#54&#"0T.""-
2"73hhwJ+"J=˾ܾ��w��336632#54&#"�U5%83hwJ+I>˾��o��"&&546632'2654&#",,L//L,,L//L,  o)M67M**M76M)S1()11)(1����7336632#"&'72654#"�U3>G)A%(4#8
��!\L8P*3_�+1U�
	���� %57#"&546632373'2675&&#"]-@L)A$*Q�
$ �c0\P6N*"�>��	)./+�w��336632&&#"�V@#
6wJI)(W#,��o��&"&'732654&'.54632&&#",)T/504"PF+E/,0-5#Ro?		&/:=
	%.>�o�""&55#57733#327mPBEJ
W��!"4oQAoMaaQn%J�o��"&553326753#'#�83hhU5oH=���.tw��
3366773�yh0

0cuwJ�33���&w�337733773#''#xRf&S(_OxwI�dd��dd���ZZ|w��7'3366773#'&&'#|oholioo"		w��4

4��44����7"&'7326773366773��h/(ctC�M@�//���@>�w��	57#5!3���#��w7�Q7�Q�p��
"'7"3&&"&&546632#327:}Fl7*�#3T10N-ON�5%**"G�nD��  ��(M74M+\B">�p��
"'7"3&&"&&546632#32704kGv*�#3T10N-ON�5%**"G�2�D�  ��(M74M+\B">����2"3&&"&5467#"&&546632#326732678*�#'".3T10N-ON�5%("1 
	*z  �d""&(M74M+\B" 
=(/
�p��"&54673&&#"'6632'267#'OP�/#)"G1N//M0&�%p]C">)M74M+N!!�w�N4632&&#"6632#54&#"�CI.5$83hwR:KL?H>�� �����%%"&54673366773'2654&'#/1:hh*
)ce91





�6,-�""��� -,6@�w�M5&&546632&&#"1@/M-3H3+ +3?w�$I7.<"A!7$��o��"&546632373#'#72675&&#">M)B%2&	PT2
$!o\P6N))!�� T�	)./+����+%"&'732677#"&546632373'2675&&#"H#3$#->M+B#,S\A
%"�C
&\F2K)��@D�
p	)(')�w�k	535#533"&54632�tf�j�&&''wQ�Q�Qv"$$"���ol�'2���@53ب�HH���=5!�
�AA>�=5!>��AA$?4S)7'7&547'76327'#"'72654&#"mIQ"!PIY0642YIQ"RIZ46/e$22$$22?JR.A?.RJZZJR-@!7RJ[N5-,66,-5@���+773254.546753&&#"#5&&@@/W/J*CJC*XLb4MI#?)E*BKB*WSb1hsd!-*>.AV��+ T.)>.?]��)C&�)356654'#57&&546632&&#"3#!C4BpT;gB>Y#O,07��#[P5
V)?\2*'P.0$[
$4|9{35#535#5333667733#3#⩩����==�������F7F%�!B !B ���F7F�-��G�1"&'#57445447#576632&&#"3!3#3267}f�?67A�j3_%Q4 2B�����D1#6Q(evqDEny(&O<8J
J8=L,0`���!5&&5466753&'66757av8a>Q'?C$;E"�%#$$)_
�mGhB
a]Z��]_\-A�@.��&�&"&'7>77#5737>32&&#"3#�!2
 WK/VE;&'s'Q`	l=9�e+I[+n+#7k�<a9O��3�/5"&7&&5467722327&&'667'7&&'o	13�JY�m23
7(Q
0)Q%X534")%&�c���s!�u��h\fl*O�kL(.c\j�a8]eC&�035667#573&&'#57&546632&&#"3#3#!C.?pOZC;gB>Y#O,07����#[B,D

E?\2*'P.0J
J*|<{#'+3'5#575#57533533#3##'#73'#'3'#3'#�"*SFFFF�TPjEEEE�TP�#�>1�0=
zz���626����<2<���m|<222K{3#575323###3&&#3267#eQQ�;dC
CB
De:,�
6,"",7
�|U� G=[9I#�H&"�'"P{!'3'#573373333###'377#377#*� KD �#w&w?E�A
�ꉉ�"9������?��"��h�((��(([2�)-%"&5466323'5#53533#'#'2675&&#"5!N]4P+$0��yHHd	;#"2*��tc[8P+CJ11D�n%ao+&/-�JJK{',13#575#575323#3###4&'#364'3&#327#eQQQQ�O|K??K}N,����|>"">}Y5.5�9F;
	;C?��
-	}##�&C���#5.5466753&&#"3275#53&Bf;9gCbU=Q4 AGK@#L�I)nfP�_\�U
he@Pqegm
zx��$f5���6"&5467#57367#5736654&#"'66323#3!327Gko<J�J�# 3F#W>\l	Dt���
%(AH=)pgU	ED
 O'0_RJK

%<^((O��3�!5.5466753&&'67CGn?=nIQW@Q"+#Q!O/�3.01nd	N�b_�T
][AO
�Z
(L$-e�Tk�lY{75327#573&&##5!#3##'YIt�Q�
F7I��:MK	H6����uGDuJ#?J@Q����'{ 5'75'75377>54&'7yD#gD#g��#��#�*H,yg�� @17!@2�~E@V7E@V�"8# [|=#5{35'75'75#5!#77�q#�q#���q#�q#��7@H77@H�kks7?I77?I�#5{3#57!#5!�g�����EK�L1JJ9{!35#575#5732##3#32654&##�mmmm�ClACm@=��74::47�E3D'&QAAR%2K�U7.504{35#57!!3#3#�LL����ݏ�aU�|y{PZaGp7'77'7\K�3�3�KI�/�0�I��Gph��Gph����H�'
��D&h
��F�'3?K"&54632'2654&#"'%"&54632'2654&#""&54632'2654&#"�6II67II7�&�X6II67II7-6JJ67II7�H<<CC<<H?''''�,�^�QH<<CC<<H>''&'>H<<CC<<H>''&'��Q|'�qD&h��G|'�qD&h���Q�'
�qD&h����G|'�qD&h
���
��G�'�qD&h
�����G|'�qD&h���
��G�'�qD&h�����G�'
�qD&h�����G�'�qD&h�����G|'�qD&h�����G|'�qD&h���H|'�qD&h�����G|'�qD&h�����G�'
�qD&h�����G|'�qD&h�����G|'�qD&h�����G|'�qD&h�5��F{!-5#56673'%5#56673"&54632'2654&#"�Q&+S��&�@Q&+S�6JJ67II7��@�,�^�]�A�H<<CC<<H>''&'����G�'
��D&h
�F^675#53533#���l��^�h��h�F~5!F�hhTp#7'7'77'�I��I��I��I�pJ��J��J��J�FIK"&54632"&54632%5!,"//"#..#"//"#..����+""++""+��+""++""+�hh������������F��&�t����F-g'��&���t�y%%5%��~���	�f����b�y75%5%5b	��������fF0
35!5%5%F�4̬���hh��z�y."".F0
35!%5775''5F�4�����hh�y."".y�zF675#53533#5!���l����̞�h��h��hhV�	3#''#V�v�y.--.��t����F(l77#537#5!733#3!XGY�I�H]GY�I��H(zg�gzzg�gz4�$�%".#"'66323267�/%$'X U./%$&XU�)))NC(*)NC��4v$&�t��F^~%5!5!����^�h��F^~7!!F��^ h�I^D7546632#54&#"I;fBBf;l@77@^�Gh::hG��CHHC�F^673!Fl`^��h��ye(4%"&'##"&&5463236632%267&&#"%2654&#"�5P)B.(A&ZI/A#L3-J,-N��$( 4"&+$10y.@%/0M-^h,(5/2V7Fb3�%!)0 ).$&./����"&&546632'2654&#"-(B''B()A&&A)%%%%�%A**A%%A**A%F)! )) !)�c��3��/cK����pc�&���v�cr�''3/�c������@�<I��<���+73267&&#""&&5466324454&#"'6632�.&A3*7=5Z57a>#D3;2@)Y4Ng4I��+,>L!7��0X=Eh; 	T`Z#'L�[r�_��b�""&'732654&&546632&#"�
'QN 'P�j>GM��RGoAk>GL��SFpA�p�#46632&#"r�QN
&�p�GoAk>G}�br�"&'732653�
'�P�j>G��qFpA!��Y4'736673�J�c�b�P�EG��**��|��9�a��9�u	O�#33736677#O˰˜'�(�
�
��t�����4m1<<1mB��35!5#535!5!B&����|�{�|�t��,5,c'��tA��A;��.{
55!!!;���⧮=xW"#W|��|��?{!#!&��x�
s����H�".:"&546632&&#"3267'77'7"&54632'2654&#"�?T,G(2/!!)9kK�3�3�K�@TT@@TT@8WO6K(<	
1)(/
=��I�/�0�I��\MNYYNM\O'33%%33'J���	)6654&#""&''667546323267;,+6Cl
71jQJW*[H./5!T�*X6 4��IKZ�~uZP>kd64,Y0��>�1".54>32!"32673!2554'&&#",9cK++Kc99cK+�b6T5_"&(r�
G&(H4\zFFz\44\zF�	<=3<HZ�

�
��8		5!!#��F�e���O�t���9	'3'�OO�f�E��E�����J		'7!5!'74E���f�EO�t�O����9	737*��O�t�O��F�e���F��]�	%'7'��
j�����j
�>��	7'7'%'7�S���j
S�
i��G6��	%%7'7'7���S�
i6j
�S���f6�	7'77ij
�S��6��T�
j
��8	5!!!!#��FN��((��NODU##UD��97'3'#'##nOODU##U�E��EN���((����J	'7!5!75'!5!'74EN���((��NEODU##UDO����9733737*��ODU##UDO��FN��((��NF����d�%'7!'57!'7d�M[��[M��M[$[M��<ll<��<ll<J��0#'7'73'7.�<ll<��<ll<8�N[[M��M[��[N<�S05!'#'7'73'7<���<ll<��<ll<�mmu�N[[M��M[��[N9Z:%"&&546632,Fn??nFFn??nZ?mDEl??lEDm?'H1L%"&&546632'26654&&#",KvDDvKLuDDuL2N--N22N--NHDuIJtDDtJIuDL/S45R//R54S/Hf.7!H�f�85S#A7!%!!5�hB��S�OP5S#A	77!%!!5I�C��`��S�?�WE:f9@b%	,��9��AeJ753A��e�AeJ753%3'A���pe�H�Dk(A73D� k���Dk(A7377'D� J��k���kkAQ6%5!*���Q��AQ6%5!'7#*���p�Q����0kA%%5%3� �k��*0kA%%5%3'5� �N�k��*��k
kuA73
d��k�����kKA%%5%3G��dk��*,M,G#7!%26654&&#"7"&&546632,�JqAAqJIrAArI0J**J00J**JM��AqGHpAApHGqAL,O23N,,N32O,7W!D+%"&&546632'26654&&#"7"&54632,EoAAoEFnAAnF0M--M00M--M01DD11DDW>pIIn??nIIp>H,O44N,,N44O,6E43EE34E��u�	7!%!!KGA����
lA��K:���-7!667%!&&'73667!K�9Z&A���4["�B.]#1R1�_
lA'EO(��K:�R�zMD=7p8c�R���p�&&'73>7�I5](=$f{CZd�=U�J==>xݼEN_���5��-�!"&&5466323'6654&'�4!-N/ OG6195m&$<$0^<*P*,Q��af����j�!"&&546632%#"&&546632b1 (E*"�eT2 (E*"�e&$<$�<��bf&$<$G$��af��X�#.5463236632.\u@W@2LL2@W@u^�vi6_g4DD4g_6iv�X�47"&5466327.546326632#"&'#!5667#�:I'@%$#"
W@@W
!$$%@'H;%IUF�hFUH�OC1>	716CC617	>1CO&3cR
99
Rc3&����\�#53.��..hi��X�!%#"&54>73#"&'#!5667C'9MCsXXsCM9'BUF�hFU�3'BF-OZxUUxZO-FB'3cR
99
Rc��]x+7EMU%"&&546632'26654&&#"'"&546323"&54632"&'73267'254#"3254#",Z�NN�ZZ�MM�ZDg::gDDg::g�iAQ/9''9/Q��
M�XY�MM�YX�MC;jFFj;;jFFj;�' && '' && '�B9!!9B�0Id'3;C%"&&5466322654&#"32654&#"267'#"''"54323"5432,T�HH�TU�HH���:FO/VV/O�0H�RSHHSR�H(&&&&&&&&�@;@@;@�����%#.5463236632.EPOA'kS?TT?Sk'AOPE->02@\D_`7DD7`_D\@20>���x"6BNV&&#"3262672654&#4&#""&&54632#32654&#""&'6632672'&00
6XRN88ohgq6b@U~E��o�;H7X3%j	

	KUXhOPfWh)�
	
	
��03P6/?DNSIu�E;V��bjMG
MJ7T/73�			e+%.45-%+L53��g�%,:H%"&&5467&5467&&54>7'267!'66327&&#"66327&&#",n�B-1%?1	
,30�1?%1-B�n9Q��Pb# "�" #@;0:?6;			'O	;6?:0;@`5==5�""A77A""A77��x%;IW%"&54632'"&5463226654&#""&'&5467663266327&&#"66327&&#",[_gSSg_[Bh;xmmx<gB^�#B�uu�B"��  # #�  # #�l*6SMMS6*�7qWpggpWq7CVT�&(bddb(&�TV0!!A77A!!A77��=X('73546323%37'654&#"354&#"C((.bYYb.((��))5/""/5.�$&%%F  �\dd\� �� ��6"//"6!/55/.��*�'2654&#"5#535.5466323#,?PP??R%B��<Z2AsJKrA2Z<��<UAATTA+D'��lgICd<Em@@mE<dCIgl��v�
'72654&&#""&&54663275%#7�@Q%A+)A%Q>JsAAsJA6q�$aaAsVUA+D''D+AU\@mEDn@ja�݁hI)Em@��d�7%2654&#"'7&&'#5367'7675373#'#5&',5EE55EE�IR
bb	PIQl
RIQ	bbPIR l�F66FF66F�IPhQIR	mm
QIO
hRIS	mm	J���3'377''#�x��>9--99--
QP����{y]\yy\]#5�
33%!5''##�v�g JDDJh/���c�wppw���c������"������"�����C5254#56�]]k\\ODDORDCS�zC&546"3zk\\k]]SCDRODD���A5&&546632&&#"1@/M-3H3+ +3?�P%H7.=#@!6%t��373'!��������<���<�'!%��<��Z���%"&'573267O#?��	
&�)87iQ9?E
��}1z/����1�/���u1����uA���yx�3��yk�����P�����1�/���}1z/��xb3�Z��k����n=����m;�����P�����<��	���8����5
���>��
�����2����4.��)�".:FR^jv��"&54632'"&546323"&54632%"&54632!"&54632%"&54632!"&54632%"&54632!"&54632%"&54632"&54632'"&54632+|���]�a��c]����
-RmmR+}1z/'72�d�1�b����~'7Q�N��w_��+b'7N�!+���1�/'7&H�d1H�b���~'7A�N�J�_�.�>'Xc#�.u1��'73'#�8l�l8}14��4\���C'73'#�@Z�Z@h�'oo'Tn=��".#"'6632327n%\@:%\@=MK7MKf��T"&&#"'66323267s#1$_G4$0%_F�LDKE�P��5!�(P]]���/5!�.�^^���P�������/�<��
"&'73267,URT((()TQ<[B // B[�<��
"&'73267,VTr  rT<TJ*,,*JT���P
"&'73267,JRP*""*PR�FC##CFz��C
"&'73267,`O||O�I;"";I�>��"&54632,+77++77>1()33)(1���d"&54632,(22((22�/%%..%%/m;��"&546323"&54632�#--##--�#--##--;."#..#".."#..#".t��N"&546323"&54632�** **� **  ))�* )) ** )) *�8�'6654&'7$,	bP'?8:ZB5",���v'6654&'7$,]L&?�:

I1(",w<�R
"&'73267'"&54632,XYL6.-7LXY ,,  ,,<[B$44$B[�(!!**!!(x���
"&'73267'"&54632,QY
H
9))9
H[Q ++  ++�FC%%%%CFx(! )) !(�8�"&54632'2654&#",ACCAACCA8=+*==*+=7���~"&54632'2654&#",3??32@@2�6--55--67�5
'7'7�NXbGNXb5#�,�#�,��y'7'7�Ie^AHd^�"�4�"�4uA��'737�l8}}8lA�4\\4����T'737�Z@hh@Z�n(TT(n�$n63��$b�B5�
'7'7�lbXelbX5�,�#�,�9��y'7'7�z^dsz^e��4�"�4��5��
'6632&&#"�TQVVQT)(((5B[[B 00���M
'6632&&#"�PRJJRP*""*�CFFC""�2x"&54676326%.;<B
&&22-.F0$ "�8�.5467W%@'Pb	+%8,"5BZ�2u'67#"&54632�B
&&&-;21$ "1-.F���8������5#5353JuuT��BGB�������533#�Tuu���BGB�>��5#53Al�>OG�"���'6654&'7-%
m2R�;(,/15D"��p��
&546"3pZLLZ$  $��9//96�����53533�UTU�GhhG������5#53#U�U��iFFi������5#53533#UUTUU��BGBBGB��f���53���GG���
���
���m�����������������
'6654&'7�;,"P=g�;6(%31�8��
&&5467ZP=g^:-"8(%31;���'6654&'73�;,.2V&&g�;iH	" 31���'6654&'73�;,.2V&&g�;iH	" 31��"&546673326750A%S!!@�21 4%	/	A��"&5466733267:1D&Z!#;�2. 5&
1J��g��73�j������$���5!#5#�Ln܎�GG��u����������	�����	�����n�������D�����J�L%".#"'6632327�%=3,\92&=2-\9�4DC4DD����
52654&#56�$  $ZLL��769//9��*���53353�LnL֎GG���	���5!'35#��nn���6Jk��'&32366324&#"#54&#"�St'		(<8SF�
�OP
/�6��'7'77'�1??1AA1??1A6,89,77,98,7��n=����f��T�(���"&5533267b=2j
�E:"O�0�C(��5!���^^�cJ�	'6632.#"w&g�xx�g&A��??��JC?==?C%**�;�r"&546323"&54632''7�####�####�8NN;$$$$$$$$�$�4����"&546323"&54632''7�""##�##""�?_\�$##$$##$}'�9h:�>"&5463277"&54632�####;&hM{####H!  !��!  !�;�r"&546323"&54632''7�####�####�dNN;$$$$$$$$�u4�����"&546323"&54632''7�""##�##""�|\_�$##$$##$}9�o7�!"&54632'77"&54632�!!!!_Ig#R!!!!H���;�G,"&546323"&54632'"&&#"'6632327�####�####E +!
@2&!*!	@3;$$$$$$$$�88'79�;�9"&546323"&54632%5!�####�####��(;$$$$$$$$�EE����"&546323"&54632%5!�""##�##""��.�$##$$##$�EE�;�i"&546323"&54632''737�####�####�\0dd0\;$$$$$$$$�\,AA,\����"&546323"&54632''737�""##�##""�\;^^;\�$##$$##$�f'II'f�6A)'73'#7'7�/]t]/f�8ON64\\4A,3��-'73'#7'7�;Z~Z;\�,d1�'dd'H2V<6�)'73'#''7�/]t]/f�iNS64\\4Aw4/��'73'#''7�;Z~Z;\�e0a�'dd'HM;W�6*2'73'#7'6654&'7�/]t]/f�
&RA 464\\4A
2
>*# &��)�'73'#'6654&'7�;Z~Z;\�&
S@C�'dd'H/
<-!,'�6�F'73'#7"&&#"'632327�/]t]/f<&CN%C64TT48^&o&o����'73'#7"&&#"'6632327�;Z~Z;\>(F0*'F0�'\\'?Z&96'	96�<�t
"&'73267''7,URK-+,,KQM@]W<[B$44$B[,�A����
"&'73267''7,JRH.%%/HR9H_\�FC#''#CFl/�9�<�t
"&'73267''7,URK-+,,KQ_tW]<[B$44$B[xA�����
"&'73267''7,JRH.%%/HR[s\_�FC#''#CFl9��<�y
"&'73267''6654&'7,URK-+,,KQy	'SCF<[B$44$B[}3

P4+1'����
"&'73267''6654&'7,JRH.%%/HRj&R@C�FC#''#CFm/
=-!,'�<�E
!"&'73267'"&&#"'6632327,NGH%((%HH&K3)%	K3<D-!!-D�&:6%96����
!"&'73267'"&&#"'6632327,JMG'))'GM(F0*'F0�>22>�'96'	86�4�B'73'#7"&'73267�4RtR4VA;6!%& 6;4!YY!=^:((:����'73'#7"&'73267�8W~W8\ILG&()%GK�'\\'H]<11<�P�n5!''7�(�1�<P]]y<iJ����5!''7�.�1�<�^^qBkQuA�R"&54632'737, ,,  ,,kl0��0l�(!!**!!(}�,aa,�z���"&54632'737, ++  ++pb/��/b1(! )) !(sf0TT0fs-�.54677�8$NR%!<"wG?,#,7R<��i-�.5467'7�8$NR%!�Fw!?,#,7RL���3�P
!&&5467'6632327#"&&#"O0EBR
%
�3)%K3)&3&%";		96&96&j-�'6654&'7'7� &RN$7�R"v?:R7,#,�j-�'6654&'7'7� &RN$7�Fw ?:R7,#,���3�P!"&&#"'6632327'6654&'7f&K3)%K3�	&
SAE�&96&96�/		;"%&����q'5!E�犊�����'!E����pq�3�px����p��!��px��!�7q%53!53!53��������犊����!�7�%3!3!3����������������qA333犊���7
���p
���p
�����A!!!�����7
���p
���p
���Eq%53!53!53!53�p��p��p��p犊�������E�%3!3!3!3�p��p��p��p����������q_53535353犊�����~���������������_5!5!5!5!�������~������������p�q%!#!��Ԋ���p��%!#!��Ԋ����E��p�q%#!!�������p��%#!!�������E���pqq#!5!q�����pw����pq�#!!q�����p3���p�q!#5!������pw����p��!#!������p3����%!3!��J�,�������%!3!��J�,�E������7!3����������7!3��E������q�%!5!3q�J,��w���q�%!!3q�J,��3�����'53!E��w�������'3!E��3���p��%!#3!��Ԋ�,�x���p��%!#3!��Ԋ�,���x����p��	%!##!3��ԊD��w����p��	%#!33!���D�,�w����p��%#!!3�����x����p��	%!##!3��ԊD��3E����p��	%#!33!���D�,���E3����p��%#!!3�����x�����pq�#!5!3q���,��pw�w���pq�#!!3q���,��p33���p��	#!53!#q����D�pw�w�����p��	!#5!33����,�D�pw�w�����p��!#53!������pw�w���p��	#!3!#q����D�p33�����p��	!#!33����,�D�p33�����p��!#3!������p33���p�q%!#!5!��Ԋ����w����p��	#!!!!q����,��p3D����p��	%!#!5!5!��Ԋ��,����w�D���p��%!#!!��Ԋ����3���p�q%#!#5!������w����p��	%#!#!3�������3D���p��	%#!#535!���������w�D���p��%#!#!������3�����%!5!3!��,�,�w�������	%!!!3!���J,�,�D3�������	%!5!5!3!��J��,�,�D�w�������%!!3!��,�,�3�������%!53!3�����w�������	'3!3#E���3���D�����	75#53!3����D�w��������%!3!3����3�����p��%!#!5!3!��Ԋ��,�,�w�w�����p��%!#!!3!��Ԋ��,�,�33�����p��%!#!5!3!��Ԋ��,�,���w�w�����p��%!#!!3!��Ԋ��,�,���33�����p��%!#!53!3��Ԋ�����w�w�����p��%#!#5!3!����,�,�w�w�����p��%#!#53!3�������w�w�����p��
%##!3!3#�D�������33������p��
%!##5#53!3��ԊD����3D�w�����p��
!#!333#����,�D��p33��D����p��
%#!#53533!�����D�,���w�D3�����p��%!#!3!3��Ԋ�����33�����p��%#!#!3!����,�,���33�����p��%#!#3!3�������33�����p��%#!#53!3�������w�w�����p��%#!#3!3�������33��K�
q%53!53w��>�犊��K�
�%3!3w��>�������jq�33犊��,���,����j��!!����,���,����^��5!5!E��q���퉉^�p��3!3q��d��px��x���p��	%!#!!!��Ԋ���,^����^�p�q	##!#q��?��pw�����^�p��!#!##!��J�?��,q����d�w���pq�	#!5!5!5!q���,����p����p�q	###5!q���?�pw��w������p��#!5!##5!���J?�퉣,�p��v��^��	73!!!�,��,^�����^���	73333^�������w���^^��333!q������qw����������^q�	%!5!5!5!3q�J,��,�^���������	%!53333��������w��w��^��!533!5!3�ԣ�����q��v��p��%!#3!!!��Ԋ�,��,^�x���^�p��3##33^�������px��w��x��^�p��	333##!^������,�px��w����w���pq�#!5!5!5!3q���,��,��p�����p��3!##533q��퉣���px��w�w���p��	3!533##5!q���ԣ���,�px��������p��5!!#!5!E�Ԋ���q��������p�q###5!#q����pw��w�������p��	5!##!##5!E⣉,�J��,q����w�����^��!5!3!5!��,�,��q���d�������%!533333��������w��w����^��33!!5335!q���J�ԣ����qw����v�����p��%!#!5!5!5!3!!!��Ԋ��,��,�,��,^��������p��###533333#q����������pw��w�w��w��������p��33!!533##!##5!q���J�ԣ����,�J��,qw����v�w����p�q4>33#"�9f�LEE@i>�p�M�f9�>i@�p���pqq!#4&&##532q�>i@EEM�f9�p�@i>�9f����q�##532665q9f�MEE@i>�pL�f9�>i@�����333#".�>i@EEL�f9X��p@i>�9f���X�3#L��L������X�#5LL��������X�#5533��L��L��L�����A�����A���A�A����qq'5!E�犊��q�73�������q75!��犊�pqq3�p�����q�'!E��������7!��������7!�������p�q!��p�������%!5!5!5!��J��,��D�D��p��!333���D�D�pw�������%!!!!���J�,�DD��p��%###!�D�D�w,X�!X,��D�pX�5!X�p���pX��!X�p^���pX}!X�p
���pX,!X�p��D�pX�!X�pk���pX�!X�p���pX9!X�p�7�pX�!X�px���p
�!
�px���p��!�px���pw�!w�px���p,�!,�px���p��3�px���p��3��px���pK�3K�px��,�pX�!,,�px��*��X�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



�U










ZU










ZU










ZU










ZU










ZU










ZU










*��L*�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���      NU      NU      NU      NU      NU      NU      N*��:E�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      9X�5!X9��
�pX�3
K�px���p,,!,�p��D,�pX,!,,�p��D,,�!,,��D�pX�!!,,�px�D�D�pX�!!,,,��D�D��D�pX�!!!X���X,�Dx�pX�!!!X���X�p��,,X�!,,,��D�pX�!!,,��,,��D�D��D�pX�!!!X��,,�p����5��-��������j��B�'3#57546632&#"3#33"&54632IBB$PC4ZZ��J+77++77}m5V4l
!&s���>1()33)(1��Z�'"&533267%#57546632&#"3#L;�	$�#BB$PC4ZZ[K#��m}m5V4l
!&s��>��z$#4>55#7#3ϑ"8CC8"o��p"8CD8"����H_?,)4M<����I`?-(3L;�T�A�Z�3333'53##A���%���%��h����܂�"]؅����=X���XX��(�l��(q�'7AQ�Q0�PP����\	\��\������(h���0Q���TTP����Hf$<HT`l&~	&�
*�6�D*:n�2�$�D*	�	�	�	F�	(D	dl	$�	��	4�		4�	2	
 N	4n	�	�	�	�	�	�					$	0		 	T	
,	t	0	�	.	�	
2	�	8
0	&
h	<
�	�	"
�	.	�	2	�
�
�"2F`z�0�	(�
,4,8`<�0�H
"2
L8`���� a���� gi & l �� ������������� J���� ����� ����� �������� 1��������� ����� [�]����� �� ������ [0]����������� ����� [-]������������ ���������� [*]������� ��� �������� �� ������ [$]����������� ����������� [-,*]���� �, ���� a���� �, ���� g, ������� 1���� �, ���� J� 2010 - 2020 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name  Source .Source Code ProBold2.038;ADBO;SourceCodePro-Bold;ADOBESource Code Pro BoldVersion 2.038;hotconv 1.0.116;makeotfexe 2.5.65601SourceCodePro-BoldSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunt, Teo Tuominenhttp://www.adobe.com/typeThis Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an  AS IS  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.http://scripts.sil.org/OFLsimple asimple gserifed i & lSami Jcursive �cursive �cursive �Serbian �Cyrillic breve [�]slashed zero [0]typographic hyphen [-]typographic asterisk [*]slashed dollar sign [$]alternate numeral one [1]typographic alternates [-,*]simple a, cursive �simple g, cursive �, Serbian 1Sami J, cursive �?@>AB>9 0?@>AB>9 gV 8 � A 70A5G:0<8A00<A:89 JA:>@>?8A=K9 �A:>@>?8A=K9 �A:>@>?8A=K9 �A5@1A:89 1:8@8;;8G5A:0O :@0B:0 [�]70G5@:=CBK9 =>;L [0]B8?>3@0DA:89 45D8A [-]B8?>3@0DA:0O 72574>G:0 [*]70G5@:=CBK9 7=0: 4>;;0@0 [$]B8?>3@0DA:85 70<5AB8B5;8 [-,*]?@>AB>9 0, A:>@>?8A=K9 �A5@1A:89 1, ?@>AB>9 g, A:>@>?8A=K9 �A00<A:89 J, A:>@>?8A=K9 ���2 $%&'()*+,-./0123456789:;<=DEFGHIJKLMNOPQRSTUVWXYZ[\]����bc	

�d���e�� !"#$%&'()*+,-.�/0123456789:���;�<�=>?@ABCDEFGHIJK�LMNOPQRfSTUV����gWXYZ[\]^_`abcdefghi�j�klmnopqrs�tuvwxyz{|}~����h��������������������������������������������jikml��n��������������������o�������qpr�s����������������������������utv�w��������������������������x�����zy{}|���	

���� !"#$%&~�'�()*+,-./0123456789:;<=>?�@�ABCDE�FGHI��JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	�

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������������������������������������������������	���������������������������"�
��������������	

B>@^`_?�
���� !"#$%&�'��(#)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef�g�hijklmnopqrstuvwxyz{|}~����������������������������������������������������������������� �!���A�a�������������������������������������������������������������������������������������C������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-.AmacronAbreve
Aringacuteuni01CDAogonekuni1EA0uni1EA2uni1EA4uni1EA6uni1EA8uni1EAAuni1EACuni1EAEuni1EB0uni1EB2uni1EB4uni1EB6AEacuteuni01E2uni0243uni1E06Ccircumflex
CdotaccentDcaronuni1E0Cuni1E0Euni1E10Dcroatuni018AEcaronEmacronEbreve
EdotaccentEogonekuni1EB8uni1EBAuni1EBCuni1EBEuni1EC0uni1EC2uni1EC4uni1EC6uni1E16uni01F4Gcircumflex
Gdotaccentuni0122Gcaronuni1E20uni00470303uni0193Hcircumflexuni1E26uni1E24uni1E28uni1E2AHbarItildeImacronuni01CFIogonekuni1EC8uni1ECAIbreveJcircumflexuni0136uni1E32uni1E34LacuteLcaronuni013Buni1E36uni1E38uni1E3ALdotuni1E3Euni1E40uni1E42Nacuteuni01F8Ncaronuni0145uni1E44uni1E46uni1E48Omacron
OhungarumlautObreveuni01D1uni01EAuni1ECCuni1ECEuni1ED0uni1ED2uni1ED4uni1ED6uni1ED8Ohornuni1EDAuni1EDCuni1EDEuni1EE0uni1EE2uni1E52OslashacuteRacuteRcaronuni1E58uni0156uni1E5Auni1E5Cuni1E5ESacuteScircumflexuni1E66uni015Euni0218uni1E60uni1E62uni1E9ETcaronuni0162uni021Auni1E6Cuni1E6ETbarUtildeUmacronUbreveUring
Uhungarumlautuni01D3Uogonekuni01D5uni01D7uni01D9uni01DBuni1EE4uni1EE6Uhornuni1EE8uni1EEAuni1EECuni1EEEuni1EF0uni1E7EWgraveWacuteWcircumflex	WdieresisYgraveYcircumflexuni1E8Euni1EF4uni1EF6uni1EF8Zacute
Zdotaccentuni1E90uni1E92uni1E94uni018FEngIJuni004C00B7004Cuni01320301amacronabreve
aringacuteuni01CEaogonekuni1EA1uni1EA3uni1EA5uni1EA7uni1EA9uni1EABuni1EADuni1EAFuni1EB1uni1EB3uni1EB5uni1EB7aeacuteuni01E3uni0180uni1E07ccircumflex
cdotaccentdcaronuni1E0Duni1E0Funi1E11ecaronemacronebreveeogonek
edotaccentuni1EB9uni1EBBuni1EBDuni1EBFuni1EC1uni1EC3uni1EC5uni1EC7uni1E17uni01F5gcircumflex
gdotaccentuni0123gcaronuni1E21uni00670303hcircumflexuni1E27uni1E25uni1E96uni1E29uni1E2Bhbaritildeimacronuni01D0iogonekuni1EC9uni1ECBibrevejcircumflexuni0137uni1E33uni1E35kgreenlandiclacutelcaronuni013Cuni1E37uni1E39uni1E3Bldotuni1E3Funi1E41uni1E43nacuteuni01F9ncaronuni0146uni1E45uni1E47uni1E49napostropheomacron
ohungarumlautuni01D2uni01EBuni1ECDuni1ECFuni1ED1uni1ED3uni1ED5uni1ED7uni1ED9obreveuni1E53ohornuni1EDBuni1EDDuni1EDFuni1EE1uni1EE3oslashacuteracuteuni0157rcaronuni1E59uni1E5Buni1E5Duni1E5Fsacutescircumflexuni1E67uni015Funi0219uni1E61uni1E63longstcaronuni0163uni021Buni1E6Duni1E6Funi1E97tbarutildeumacronubreveuring
uhungarumlautuni01D4uogonekuni01D6uni01D8uni01DAuni01DCuni1EE5uni1EE7uhornuni1EE9uni1EEBuni1EEDuni1EEFuni1EF1uni1E7Fwgravewacutewcircumflex	wdieresisygraveycircumflexuni1E8Funi1EF5uni1EF7uni1EF9zacute
zdotaccentuni1E91uni1E93uni1E95enguni0237ijuni006C00B7006Cuni01330301uni0250uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0251uni0299uni0259uni025Auni025Buni025Cuni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni029Cuni0268uni026Auni029Duni029Euni026Buni026Cuni026Duni026Euni029Funi026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0278uni0279uni027Auni027Buni027Duni027Euni0280uni0281uni0282uni0283uni0284uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni02A4uni02A6uni02A7uni0294uni0295uni02A1uni02A2uni01C2uni0298	uni014A.aa.aagrave.aaacute.a
acircumflex.aatilde.aadieresis.a	amacron.aabreve.aaring.aaringacute.a	uni01CE.a	uni1EA1.a	uni1EA3.a	uni1EA5.a	uni1EA7.a	uni1EA9.a	uni1EAB.a	uni1EAD.a	uni1EAF.a	uni1EB1.a	uni1EB3.a	uni1EB5.a	uni1EB7.a	aogonek.ag.a	uni01F5.a
gcircumflex.agbreve.agdotaccent.a	uni0123.agcaron.a	uni1E21.a
uni00670303.ai.a
dotlessi.aigrave.aiacute.a
icircumflex.aitilde.aidieresis.a	imacron.a	uni01D0.a	iogonek.a	uni1EC9.a	uni1ECB.a	uni012D.a	uni0268.a	iogonek.d
iogonek.da	uni0268.d
uni0268.da	uni029D.dl.alacute.alcaron.a	uni013C.a	uni1E37.a	uni1E39.a	uni1E3B.alslash.aldot.auni006C00B7006C.a	uni026B.a	uni026C.aAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9
AlphatonosEpsilontonosEtatonos	IotatonosIotadieresisOmicrontonosUpsilontonosUpsilondieresis
Omegatonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigmatauupsilonphichipsiomegauni03C2uni03D0uni03D1uni03D5phi.a
alphatonosepsilontonosetatonos	iotatonosiotadieresisomicrontonosupsilontonosupsilondieresis
omegatonosiotadieresistonosupsilondieresistonosuni03D7uni03D9uni03DBuni03DDuni03E1uni037E	anoteleia
anoteleia.capuni0374uni0375tonos	tonos.cap
dieresistonosuni037Auni1FBEuni1FBDuni1FBFuni1FFEuni1FEFuni1FFDuni1FCDuni1FDDuni1FCEuni1FDEuni1FCFuni1FDFuni1FC0uni1FEDuni1FEEuni1FC1uni1FBD.capuni1FFE.capuni1FEF.capuni1FFD.capuni1FCD.capuni1FDD.capuni1FCE.capuni1FDE.capuni1FCF.capuni1FDF.capuni0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0462uni0472uni0474uni0490uni0492uni0496uni0498uni049Auni04A0uni04A2uni04AAuni04AEuni04B0uni04B2uni04B6uni04BAuni04C0uni04C1uni04D0uni04D4uni04D6uni04D8uni04E2uni04E6uni04E8uni04EEuni04F2uni0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0463uni0473uni0475uni0491uni0493uni0497uni0499uni049Buni04A1uni04A3uni04ABuni04AFuni04B1uni04B3uni04B7uni04BBuni04C2uni04CFuni04D1uni04D5uni04D7uni04D9uni04E3uni04E7uni04E9uni04EFuni04F3	uni0430.a	uni04D1.auni0431.srb	uni0456.a	uni0457.a	uni04CF.auni2116zero.aone.a	zero.onumone.onumtwo.onum
three.onum	four.onum	five.onumsix.onum
seven.onum
eight.onum	nine.onumzero.bone.bzero.capone.captwo.cap	three.capfour.capfive.capsix.cap	seven.cap	eight.capnine.capzero.cone.c
quotereverseduni00ADuni2010
figuredashuni2015uni25E6uni25AAuni25ABuni25B4uni25B5uni25B8uni25B9uni25BEuni25BFuni25C2uni25C3	invbullet
filledrect
underscoredbluni203Euni203Funi2016	exclamdbluni2047uni2049uni2048uni203Duni2E18uni231Cuni231Duni231Euni231Funi27E6uni27E7uni2E22uni2E23uni2E24uni2E25uni2117uni2120at.case
asterisk.ahyphen.a	uni00AD.a	uni2010.adollar.a	zero.supsone.supstwo.sups
three.sups	four.sups	five.supssix.sups
seven.sups
eight.sups	nine.supsparenleft.supsparenright.supsperiod.sups
comma.sups	zero.subsone.substwo.subs
three.subs	four.subs	five.subssix.subs
seven.subs
eight.subs	nine.subsparenleft.subsparenright.subsperiod.subs
comma.subs	zero.dnomone.dnomtwo.dnom
three.dnom	four.dnom	five.dnomsix.dnom
seven.dnom
eight.dnom	nine.dnomparenleft.dnomparenright.dnomperiod.dnom
comma.dnom	zero.numrone.numrtwo.numr
three.numr	four.numr	five.numrsix.numr
seven.numr
eight.numr	nine.numrparenleft.numrparenright.numrperiod.numr
comma.numr
ordfeminine.aa.supsb.supsc.supsd.supse.supsf.supsg.supsh.supsi.supsj.supsk.supsl.supsm.supsn.supso.supsp.supsq.supsr.supss.supst.supsu.supsv.supsw.supsx.supsy.supsz.supsegrave.supseacute.supseogonek.supsuni0259.supsuni0266.supsuni02E0uni02E4a.supag.supai.supa
colon.supshyphen.supsendash.supsemdash.supsEurouni0192
colonmonetarylirauni20A6pesetauni20A9donguni20B1uni20B2uni20B4uni20B5uni20B9uni20BAuni20AEuni20B8uni20BDuni2215
slash.fraconethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215Auni2150	oneeighththreeeighthsfiveeighthsseveneighthsuni2151uni2152uni2189uni2219equivalence
revlogicalnotintersection
orthogonaluni2032uni2033uni2035uni00B5
integraltp
integralbtuni2206uni2126uni2200uni2203uni2237uni2105uni2113	estimateduni2190arrowupuni2192	arrowdownuni2196uni2197uni2198uni2199uni21D0uni21D1uni21D2uni21D3	arrowboth	arrowupdnarrowupdnbseuni25CFuni25CBuni25A0uni25A1uni2752uni25C6triagupuni25B3uni25B6uni25B7triagdnuni25BDuni25C0uni25C1triagrttriaglf	invcircleuni25C9uni2610uni2611uni2713musicalnotemusicalnotedblheartclubdiamondspade	smilefaceinvsmilefaceuni2764uni2615u1F4A9u1F916u1F512femalemalesunhouseuni02B9uni02BBuni02BCuni02BEuni02BFuni02C1uni02D0uni02D1uni02DEuni02C8uni02C9uni02CAuni02CBuni02CCuni25CCuni0300uni0300.capuni0340uni0301uni0301.cap	uni0301.guni0302uni0302.capuni0303uni0303.capuni0304uni0304.capuni0305uni0305.capuni0306	uni0306.cuni0306.capuni0306.ccapuni0307uni0307.capuni0308uni0308.capuni0309uni0309.capuni0310uni0310.capuni030Auni030A.capuni030Buni030B.capuni030Cuni030C.cap	uni030C.auni030Funi030F.capuni0311uni0311.capuni0312	uni0312.guni0313uni0343uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0323uni0324uni0325uni0326	uni0326.auni0327uni0327.capuni0328uni0328.capuni0329uni032Auni032Cuni032Euni032Funi0330uni0331uni0334uni0339uni033Auni033Buni033Cuni033Duni0342uni0342.capuni0345uni035Funi0361uni03080301uni03080301.cap
uni03080301.guni03080300uni03080300.cap
uni03080300.guni03080303uni03080304uni03080304.capuni0308030Cuni0308030C.capuni03020301uni03020301.capuni03020300uni03020300.capuni03020309uni03020309.capuni03020303uni03020303.capuni03060301uni03060301.capuni03060300uni03060300.capuni03060309uni03060309.capuni03060303uni03060303.capuni03020306uni03020306.capuni03040301uni03040301.capuni030C0307uni030C0307.capuni03120301uni03120300uni03120303uni03130301uni03130300uni03130303uni00A0uni2007
space.fracnbspace.fracuni2500uni2501uni2502uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250Buni250Cuni250Duni250Euni250Funi2510uni2511uni2512uni2513uni2514uni2515uni2516uni2517uni2518uni2519uni251Auni251Buni251Cuni251Duni251Euni251Funi2520uni2521uni2522uni2523uni2524uni2525uni2526uni2527uni2528uni2529uni252Auni252Buni252Cuni252Duni252Euni252Funi2530uni2531uni2532uni2533uni2534uni2535uni2536uni2537uni2538uni2539uni253Auni253Buni253Cuni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254Funi2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cuni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Funi2580uni2581uni2582uni2583uni2584uni2585uni2586uni2587uni2588uni2589uni258Auni258Buni258Cuni258Duni258Euni258Funi2590uni2591uni2592uni2593uni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259Funi202FuniFEFFu1F3B5u1F3B6f_if_luniE0A0uniE0A1uniE0A2uniE0B0uniE0B1uniE0B2uniE0B3ideoromnDFLTcyrlgreklatn�V�t
  !!""#')13577::==@@MM[[^^eevv������������������



$$**00??BBQQUU\\aassww�����������������������������	  ##&&56;;?@HHLNQRYY\^bbddffllnnqquu����������������������������

$%'-0146KLee�����EHn�#11BDHn
�(DFLTcyrl.grekXlatnl�� 
SRB ��	!��
"��#ATH &NSM 6SKS F��$��
%��&��'(ccmp�ccmp�ccmpccmp
ccmpccmpccmp"ccmp*frac2frac8frac>fracDfracJfracPfracVfrac\markbmarkvmark�mark�mark�mark�mark�mark�mkmkmkmkmkmkmkmkmkmkmkmk mkmk&mkmk,size2size6size:size>sizeBsizeFsizeJsizeN	
	
	
	
	
	
	
	








 d&.8BJT\dlt|��vxz�������h��	z	�	�
`
P��
�t����8��&^���^���\��|�ZS������������������������������������������������������������������������������������x~x���xx���x����xxxxx������������r�rr x&,�x�xx2xx����8�rr��8 >DJPV\�b�hnrrtzzr�r������� �������r�rr�r�������h����8�8x�xxx�xx 
rx�"(x.x4"x.x&x�:@�Frrr��rLRrXrhr,,�a�C�M�J�H�B���@�1�-�?�@��V������Y����;C4`8�(H��)�v�Y>�"T�����6R%�'r��*P���f����3d�)J�
�,�.�9E�EEG�BL$>�F�4��OD\&��	Z	`

,�	D	Lhh.djpv|�^�^��^^����������^����������^,WB��O�1�@�V'�b>��7w����6�NMx�jZZZZZZZZZZZZZZZZZZZZZZZ}���� &�,28��>��D�JPV\Vbhnt�z�����������&��V�bn��z�h�DD����V2��������J��b���n
""(.��4:@F������LRX^2V�   �    ���>d�,��U��*��D�����C��E��O�����@��0��-��8��6��T��4��%��Y����3o��2����3��3���3��q��9���37��L��"��.��D�3��h��<�3��(��*�3B��,�$��I�3�3o�3n�3N��	�3W�3��4�3-�36�3�3V�yq�3�$R��K�3�������
,��ZoJo��",��������z�HHDJ>>>>PV>\bDDDJ>hPPPnV>JJJJtt>,���`�!��6�L�2ZShnhhnhhnhnhnhnhhnnhnhnhnhnhnhnhnhnhnhhhhhhhnhnhhnhhhnhnhnhnhnhnhnhnhnhnhnhnhnhhhhhh&&,28822>DJP,,�,�,�,�,�,�,#,�,�GF,!#$%&'/(a�������������������	#"%+,4�������������������	hjFG�E JJJMMKinLR�# 11(BD)Hn,�	

!#$%&')*+,-./01345@M[e���������
QUaw��������������������������������������	
56?@HLMNQRY\]^bdflnqu��������������
$%'()*+,-01456KLe�&�23.	

!#$')*-./035M��U���?@LRY\]�$%(06<>AEE}	

!#$%&')*+,-./01345M[�����Ua��������������������������������������	
6?@LQRY\]^du��=
'R�'*�45
$*047:=^��
*Us #&?@���	


��DFLTcyrlfgreklatnR��! (08@HPX`hpx����������������
SRB T��"	!)19AIQYaiqy�������������������"
"*2:BJRZbjrz�������������������"#+3;CKS[cks{����������������ATH ^NSM �SKS ���!$,4<DLT\dlt|���������������	��!
%-5=EMU]emu}���������������
��"&.6>FNV^fnv~������������������"'/7?GOW_gow����������������
casePcaseVcase\casebcasehcasencasetcasezccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�cv01�cv01�cv01�cv01cv01cv01cv01cv01cv02 cv02&cv02,cv022cv028cv02>cv02Dcv02Jcv04Pcv04Vcv04\cv04bcv04hcv04ncv04tcv04zcv06�cv06�cv06�cv06�cv06�cv06�cv06�cv06�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv08�cv08�cv08�cv08�cv08�cv08�cv08cv08
cv09cv09cv09cv09"cv09(cv09.cv094cv09:cv10@cv10Fcv10Lcv10Rcv10Xcv10^cv10dcv10jcv11pcv11vcv11|cv11�cv11�cv11�cv11�cv11�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv15	cv15	cv15	cv15	cv15	cv15	cv15	$cv15	*cv16	0cv16	6cv16	<cv16	Bcv16	Hcv16	Ncv16	Tcv16	Zcv17	`cv17	fcv17	lcv17	rcv17	xcv17	~cv17	�cv17	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�frac	�frac	�frac	�frac	�frac	�frac	�frac
frac
locl
 locl
&locl
.locl
4locl
:numr
@numr
Fnumr
Lnumr
Rnumr
Xnumr
^numr
dnumr
jonum
ponum
vonum
|onum
�onum
�onum
�onum
�onum
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�salt
�salt
�saltsalt$salt@salt\saltxsalt�sinf�sinf�sinf�sinf�sinf�sinf�sinf�sinf�ss01�ss01�ss01�ss01�ss01ss01ss01ss01ss02 ss02(ss020ss028ss02@ss02Hss02Pss02Xss03`ss03jss03tss03~ss03�ss03�ss03�ss03�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss05�ss05�ss05�ss05�ss05
ss05
ss05
ss05
ss06
 ss06
&ss06
,ss06
2ss06
8ss06
>ss06
Dss06
Jss07
Pss07
Vss07
\ss07
bss07
hss07
nss07
tss07
zsubs
�subs
�subs
�subs
�subs
�subs
�subs
�subs
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�zerozerozerozerozerozerozero$zero*								@:4.("������������������������������~xrltnhb\VPJRLF@:4.(0*$����������������������������~��ztnhb\























        ����������������~tj`VPJD>82,&$������������ � � � � � � � 	

$JRZbjr~���������������&.6>FNV^fn,*0.,z����������� 2<x���� Vh�������������!#L
 &,28>DJP  **
U���������!��!��"�:d��$U�S�Yc	W$]�[�a_aC$*06<K�M�H�JNOQNC &,j�j�i�ikkC &,m�m�l�lnnC�,6@JT`jt~����������@4e4v�4�
�4�4
4$04B?2Q4��'\w4��4���;2*v"�d"� !$%"#�

����#��#���#�)*+,-./0123456789:;<=>?@ABCDEFG��������������rMNOP�����	NR9�������������������������35CILPRTVXZ\^`bdfP !"#$%&'(5)*+,-./01234ef'J:
6789:;<=>K6 ?RABCDEFGHIJK@STUVWXYZ[L\]NPhijL4444
8C<<��<
<
@
M4N4*(U�MOQNP��35CILPRTVXZ\^`bdf(q

r��� "	
_b��+.qt�A_�+q	b�.t��A$4��	

CHKOQSUWY[]_ace?$%Q��HL	!#

 "$'*/0�66Y[[>]x?zz[|�\�����������^~���!��	

24CHKOQSUWY[]_ace!��35CILPRTVXZ\^`bdfmv��
���!o
hj%
qr5)*00��������mv9��mnopqrstuvxyz{|}~������	

24CHKOQSUWY[]_ace\\&&))"";B//	 $'JKLMNOPQRSTU[\]^_`ab����MO@A[1���my����Rnnz�$?($%Q��HL��	

24CHKOQSUWY[]_ace%ooPK)J[䍒�TtTt]share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfnu�[��� DSIGtLGPOS�,HPGSUBV.TI|OS/2ٮ��J�`cmapRԟ�J��cvt '�i�8fpgm�zAj4	�gaspi�glyfmr��O��>head��d��6hhea�`�L$hmtx4W��pTkern@�B���g�loca�E�/R�,maxpC
�T� name��UTpost:�]fX�prep�x9�s��
0JDFLTlatn����kernkernGr�����T��v		�

����
V
��8�,^$^�0��
D��J��J���J�L F �!z"##P#�$4$~%x&&�'�(�)�*�+�+�,J,�-n..�/$/V/�/�/�1�242n2�2�33V3�3�44J4�4�4�5�5�6�7�7�7�8~8�8�:�;";�;�<�=2>,?&?�@�A�B�C8C�D�E.F(>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;q6	��
6
6�A���A������":#��$��&��*��-�i2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l6m��o��p��r6tPuPw��y��{P|6}�������������������������������������������������������������������������������������������������������������������������������������������������������6�6�A�6�6�A��A�����$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������
��m��o��y��}�������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�|�L�L�|����"$�|-�:D��F��G��H��P��Q��R��S��T��U��X��w����|��|��|��|��|��|��|�������������������������������������������������������������������������|�����������L�L�L��|	����$����������������������������+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������3��
��
���;#��&��*��2��4��7�89�J:�h<�,?�JY�|Z��\�|k��l��m�;o�;p��r��t�,u�,y�;{�,|��}�;�����������������������,��|��|�����,�;�;�����;�;�;$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������/	�v�C�C�v$�v-�JD��F��G��H��R��T����v��v��v��v��v��v��v����������������������������������������������������������v���������C�C�C��v$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������#��&��*��2��4��7��8��k��p���������������������������������������f	�|�L�L�L�|�f�f"'#��$�|&��*��-�82��4��D�/F�/G�/H�/J�EP�fQ�fR�/S�fT�/U�fV�JX�fY�WZ�[�Z\�L]�_k��m�Lo�Lp��w�fy�L}�L��|��|��|��|��|��|��|�����������������������/��/��/��/��/��/��/��/��/��/��/��/��/��f��/��/��/��/��/��/��f��f��f��f��W��W�|�/���/�/�f���/�J�J�_�_�_�L�L�L�L�L�L�L�L��|	����$����������������������������q6	��
6
6�A���A������":#��$��&��*��-�i2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l6m��o��p��r6tPuPw��y��{P|6}�������������������������������������������������������������������������������������������������������������������������������������������������������6�6�A�6�6�A��A�����N:	��
:
:����������$��-��D��F��G��H��J��P��Q��R��S��T��U��V��X��l:r:t<u<w��{<|:��������������������������������������������������������������������������������������������������������������:�:��:�:�����+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������m7	�r
7
7�'�J�'�r����"2#��$�r&��*��-�82��4��D�AF�AG�AH�AJ�WP��Q��R�AS��T�AU��V�AX��]��k��l7m�Jo�Jp��r7t>u>w��y�J{>|7}�J��r��r��r��r��r��r��r�����������������������A��A��A��A��A��A��A��A��A��A��A��A��A�����A��A��A��A��A��A�������������r�A���A�A�����A�A�A�������J�J�7�7�'�7�7�'�J�'�J�J��r��"##��&��*��2��4��k��m��o��p��y��}��������������������������������-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������E
E
E��lErEtdud{d|E�E�E��E�E����
��
��Y��\��l��r��t��u��{��|����������������D��F��G��H��R��T���������������������������������������������������������������������
��
��Y��\��l��r��t��u��{��|������������������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������"�h�hD��F��G��H��R��T��������������������������������������������������������������������h�h�h.	���r�r��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������r�r�r���	��������$�������������������������������D��F��G��H��R��T�������������������������������������������������������������������.	���h�h��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������h�h�h���-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U	�T�T$�T9:::<(?:��T��T��T��T��T��T��T�(�T�(��T	�T�T$�T9:::<(?:��T��T��T��T��T��T��T�(�T�(��T&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���	�T�T$�T9:::<(?:��T��T��T��T��T��T��T�(�T�(��T>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������
��m��o��y��}�������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������	����$����������������������������	����$����������������������������	����$����������������������������	����$����������������������������m7	�r
7
7�'�J�'�r����"2#��$�r&��*��-�82��4��D�AF�AG�AH�AJ�WP��Q��R�AS��T�AU��V�AX��]��k��l7m�Jo�Jp��r7t>u>w��y�J{>|7}�J��r��r��r��r��r��r��r�����������������������A��A��A��A��A��A��A��A��A��A��A��A��A�����A��A��A��A��A��A�������������r�A���A�A�����A�A�A�������J�J�7�7�'�7�7�'�J�'�J�J��r$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�������������������������������������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������.	���r�r��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������r�r�r�����
����
��@��[��`��l��r��|������.	���r�r��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������r�r�r���:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������
��m��o��y��}���������
����
��@��[��`��l��r��|������"�i
�i
�i��9�^:��<�h?�^Y��Z��\��l�im��o��r�it�}u�}y��{�}|�i}����h�������h���i�i�i�i�����
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|������m7	�r
7
7�'�J�'�r����"2#��$�r&��*��-�82��4��D�AF�AG�AH�AJ�WP��Q��R�AS��T�AU��V�AX��]��k��l7m�Jo�Jp��r7t>u>w��y�J{>|7}�J��r��r��r��r��r��r��r�����������������������A��A��A��A��A��A��A��A��A��A��A��A��A�����A��A��A��A��A��A�������������r�A���A�A�����A�A�A�������J�J�7�7�'�7�7�'�J�'�J�J��r��"##��&��*��2��4��k��m��o��p��y��}����������������������������������"##��&��*��2��4��k��m��o��p��y��}����������������������������������"##��&��*��2��4��k��m��o��p��y��}��������������������������������&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������r

#$&')-./2345789:;<=>?EHIKNPQRSUYZ[\^klmoprtuy{|}����������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I��xx�t���P`KtyPL�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ-��(8<@J@GBhf[[		QCQ
D@?($#-$
+>32#'.54>54&#"#"'4632#"&!!7!!�9DO.?gI)-60#z
-5-I9)8(c>0((0>���22c��u&#@[87P;+&%ia/(&.8'3<��/@)(?��g6,����
!&@#QCSD

+#>74>32#".FuF�!-."".-!���-UV\44\VU->��."".-""-����
*@'	BQD

$+#"&=!#"&=�$"%�$"%��ߛ""�!�ߛ""�!6��<@H@E
Y	CQ
C
D@?>=<<6431.-(&##!#!+#"&547#+#"546?3#7>;>;3323+32%3#�Nq�t0M��+�j�'&�v
-N���Mv�&%�j����j���X]��#�(
7KGk �X�	��G��
7KG�bf8CN�@J)?BAK�	PX@$jhfkCDK�
PX@$jhfkCD@$jhfkCDYY�#'#%+.'7632.54>?>;#".'+4.'>�w�?=+A\Dg>w]9B|�o@&g�30%6I2]@~c>F��u"@�":N,`JsP)�5H)WHkG"aKN&1/1KoRS�xL��Q;@"!�2IlO_��S��,A0#�2Oh�*?1%�-DUZ����'1EY�K�PX@'[	[SC		S
DK� PX@+[	[SC
C		SD@/[	[CSC
C		SDYY@
VT((%#&((($
+#".54>324.#"32>>;+#".54>324.#"32>�;`{A8^C%6]}F8^C&�$1(G4$1'G5w|��
~:`|A8]C%6]}F8]D%�$1(G5$1'G6xc�j7)MoFc�k8)NpH2H."JsQ1E-!GqU��
�c�i7)MnFc�l8)NpH2G."JrQ1F-!Hr9����BN�@;LK.&BK�PX@*hSCS
CS
D@(hSCS
CSDY@IG20)'#!
BB+2#"'.#">7>;#"./#".54>7.54>3267�FrR-e)<)3R; /2B)6w[G�`^�R�b65]}H'%9i��q#=T1_�F��sr�,Nj>!8-&C[49x?�gB�Gs�`��zWf1[�QO�u\ B�?R�j>��8W<VF�>�����
@	BQD

$+#"&=�$"%��ߛ""�!z��S
�(+.547*Q*;& U�uGJrN)�J���C.V���S�	�/r�������
�(+4.'&546?
'.547>9)R);& T�uFIsN)1I���C/W���T������.r��a��6C@0,+'$#	BK�PX@kD@
jaY@
66+7>7'767&/7&546?3>?'.'i�!�$$$�3�T
	� �# �2�a�!

dIefIe��!
dIefHd
�s�A�.@+jkMRF+!!#!7!�5��f5�5�i�6��S��Q���2��$�@
?S
D"+74632'&54>7#"&2A6.1F-
 *'4A{/B'3-a_Z&&5E*Ea<�@MQE+!!s��8��-��'�@SD($+74>32#".-"--""--"n."".-""-����.�	@kD#"++>;]:I�4 I "�!O��j�',@)SCSD''	+2#".54>2>54.#"�_�sAb��~`�sAb�� T�qB-Le8T�qB-Le�I�ے���kI�ۓ�J�k��Y��x�j0Y���x�i0���*@'
BhCR
D$+7!7#"&/3!!�6{��,֌����M�
Kq��/J�4;@80BhSCQ
D-+'%
44+2>3!2!7>7>54.#"#"&/>�S�f99b�J�Q)R&��HIrO)#>U2p�%#Wc���/Z�R[��~C�x
"5;)�AusxE6R6ufb�f4]��X�CU@R?
Bhh[SCSD<:64.-,+#!CC	+2#".'763232>54.#7>54.#"#"&/>�T�b6*MmCz{V��jd�jBP,B\AR�W.N�f��">T2r�&#Xc���.UxIOyZ;#�pl�{B.\�_:W:8Zr;0Q;"{��5P5veb�f4-f�'@$
B\C
D!#+3+#!"&/3>7!���.�/��"+����b��{W���7�9D��F�.@@=,+Bh[QCSD(#&(""+#!632#".'763232>54.#"'!<37�9so\i�i4]��u?p_N=/C_CS�d7$HnK2sDg��M$/�9d�Q~͐O)6J%8e�V9]C$�h��0�22@/B[CSD/-%#	+2#".54>7>;>32>54.#"�O�e:T��vb�l99W<�3��.%7���$Dd@O�a6'Ge>O�^5l2`�Wo��P<n�_>wy}E���3,$)�!;cH(5^�L=cE%8_~���$@!BQC
D$'++>7!"&=7�
	�'����D-�+�)uR��>�3GD@AB[SCSD54! ?=4G5G+) 3!3	+".5467.54>32'2>54.#"2>54.#"c�r>��aaH�iZ�e6��t|Q��cN~Z0-Lc5Bz_9$Fd�QqG :X;HoL'9Y3^�Q��)&�bX�q@4[{F��-#�ui�w?�.RtF@Z9$LwS5W?#�4Sf3-N;"-Lh:+P=%�w�12@/B[SC
D.,&$	+".54>32+>74.#"32>5K�`7R��p^�h8;T6�c0��.=�P%D_:I{Z3�xO~Y0M0\�Ti��N;j�XH}vvB�<6-/�:_D%2Y{Ju�5Zv-����';K�$PX@SCSD@[SDY�((($+74>32#".4>32#".-"--""--"d"--""--"n."".-""-	."".-""-.����,D�
?K�$PX@SCS
D@[S
DY@	)'"+74632'&54>7#"&4>32#"..A6.1F-
 *'4Ai"--""--"{/B'3-a_Z&&5E*E."".-""-���W�(+�6�#/+��-��
�
�'0����!@YMQE+!!!!�Z��:X��=�Ѓ}��X�(+	7>7%>7.'%.54>7����/+�Z�|�o
�
�'0�n����%95@2BhfSCSD(&#*$+>32#7>54&#"#"'4>32#".�!KWc8FqP*/HWO=
%w5LWI1_Q8R;'

!-."".-!4(*Je;TvW?;@+��0JA>H[=NZ$��."".-""-M��MTdf@c
[
<Bh[

[	[OSGVU^\UdVdLJ@>9731)'TT
+%"&'#".54>3232>54.#"3267>32#".54>32%2>7&#"FR?�H0G. ?[w�T?[)�!3aK.Dz�e��lP��v��Lk�����_<k���muϛZEv��1<:8k#)I�a92�JMPE#<R0<~uhN-��4L#F�it�v<u�્ړL>03HR_����ɥu@O�؊םYu3WC(	Gr�I9H����
$@!BZC
D# +!#"&'!+3!.'��N���	%����>�
^����zQB&&Cae�*=@:B[SCS
D*(" !+3!2#!2>54&#%32>54&+a��p�h2%JoJ��G��y�?OxP(�����QyQ(|���-SwI@tbL�pc�xB��*NnE_q�+MlAggd����/D@ABhfSCSD'%" 
//+%2>32#".546$32#".#"�BfN7)	A^���̍Kt��L|fS$@(EmWtʔU:g�� ' Qfq\�䉻6�{2F+N

(/(]���o�{Ba=�@SCS
D!(!$+#!!24.#!!2>=q����ՔP�7g�]�Ό2xƎO1����v�Z��l�yA��[��aA�(@%YQCQ
D+!!!!!!.��<��=u�ϱ/�����aA�	"@YQC
D+!!!#!.��?��L��/�����d��%�:G@D&
Bh[SCSD20+)" ::+%2>7#"&50>17!#".546$32#"'.#"�4ZOI$'�	�C6s��R�ӖQs��S�nY%<
5KjK{͓R;l��D

O��':']�芹3�z2D(N


)%^���q�~CaE� @ZC
D+!#!#3!3��Q�EP���O�O���r��}����@C
D+!#3=���������QK�PX�B�BYK�PX@CSD@hCSDY�#%"+#"&'7>3232>73���6^0
!+4\J3u���m"N~\�r%� &@#
B\C
D'(% +3267>;#".'.+#3�B#-�,���%#����'+QQ���" ��	
#�Y
	<�n�af�@CR
D+%!!3/7������av�"&@#BhC
D!6(+67>;#>7+"'#3243����	��/.������[�'*'�	�g#.�~++�.���	�{aE�@BC
D!+2>73#"&'#3rj���^�����`���)�gH���d����)@SCSD(((&+#".546$324.#"32>�4_���k�ӕOr���ӕO�8g�]vƎP8g�]xƎO2zڹ�h8^�扷3�|_��m�|D_���m�|C^��ri�/@,[SC
D
!+#!2#32>54.#nB���r�m6J�υtJ�U�X."DhE���6d�Vq��M�4]�L:\A#d����0P�BK�PX@SCSCD@kSCSDY�(((%&+#"&'#".546$324.#"32>�3^�R!�"5�6q<�ӕOr���ӕO�8g�]vƎP8g�]xƎO2yظ�4�w^�扷3�|_��m�|D_���m�|C^��rU�#7@4B[SC
D#",!+#!2#"'.#32>54&#vJ��yr�m54b�W 5�1��
"%/D�U�Y-��Y���0YNW�wS&��(���0WwGms����==@:=BhfSCSD;9(&#!#"+#".#"#"&'7>3232>54.54>32�&;T?@dE$0NeheN0F��t��AB,DdKEoM*0NcicN0@x�ln�9�#)#(E\54G3')2JhJf��PeVY-7-,NmB7I2%&0JlOX�|JTI{�� @QC
D+!#!7��Y����W��������$�#@ CSD+%2>73#".5473vP�eAk�jc��{o�w>j�k'Ko�>m�Zi��{ӛXH��j-/i��&K|Z1|W�@BC
D, +32>7>;#|���%��7��� M**L!�g���,!@'
BC
D,> +32>7>;2>7>;#.'#���
�$+�

�'�����
�/���
( <��
:  :��gO&&������@BC
D'"(!+	3267>;	#"&'+�	
l��z���
�Q$�������l��
q
��$y��@BC
D,"+#32>7>;�G�G����
}!�=��;^��44>��$@!QCQ
D+!!7>7!7�	����"	l�7�<�l�;��!��W�'@$[OQE!#+!+32!�W�ř��C��	l��q�	@kD# +32#"&'lI +iH2�"�9" ���)�'@$
B[OQE!#+!!7>;#"&57�X�	����C80��@
BkD+!+3#"&'.'+>rg��
����z`+,+��������X@MQE+!7��+�ttM���	@kD		+2#"&'�
kc���0���+^@ BK�"PX@SCS
D@SC
CSDY@
$!++*' +!#"&57#".54>322>7.#"0\#$S]f7<bE&-St��ZA{<��1^TI++<pbP9 $�@hI(/[�VZ��]3��=l�Y\'Fat�E�O����,�K�"PX@ B@ BYK�	PX@CSCTDK�"PX@CSCTD@!CSC
CTDYY@$",,(%+33>32#"&'#"32>54&O��X&X`h6��"?Ym�FQ�*
�0b[P &j74\L<)V��4=eF'��R���_6D?Au<j�W��6-,Kes{<w|<��b/d�BK�	PX@$hfSCSD@$hfSCSDY�%(#%($+%#".54>32#".#"32>3234]^e:X�[/M��rd�38+A3E{\58Q6-F6)!,�9L-<m�\{�hGDC
K��f>eG'!65���*s@ BK�"PX@CSCS
D@!CSC
CSDY@$"**
+!"&57#"&54>323%2>7.#"�#&Zck7��"?Ym�FJ{+E���90a[O!&j6OY0V$�AjK)��R���^6:6-�?�;i�V5,^��Yw};��q*9b@
0BK�	PX@hSCSD@hSCSDY@,++9,9*&%*+32>32#".54>32%">54.q6���uv0K;-& ,3afo@W�`4!?[u�QMpH#��?jR:��d #8BoYB��#75K2:k�^N��xW2,DRB4[{G19B$' ?���#g@
BK�2PX@"SCQCQD@MWSDY@
##T%#++'.5737>32#"&#"3ve.KF�d�AcI>3	+I8&�a���KW
NbW�]0\8ZA]������;K^�@9$BK�PX@+	[[CSCSD@.h	[[SCSDY@=<[YSQEC<K=K4320(&
+#".54>32.5467#".54>32!2>54&#"4&'.#"32>0"(")1)Bz�mW�e7R��Y$G#	&^<:eL,5f�bnQ~	
�~6R9YN6R8W
6_*RxN&yoBmM+�2PD<<?%*DHU:Gb9$B]8OrJ")B)&JoJH�mB4;9��/M`1XZ,J^3Z^�-	0?"HL#:NO��,@)BCSC
D&#+33>32#>54&#"O��SO�es|L�L=B-_ZNA��Tvy��+�{�%RP1ZN��_��GK�	PX@SCC
D@SCC
DY@

+##".54>32�z�z�#,,!",,#���>-##-.##/�g����(Y�	BK�	PX@SCCSD@SCCSDY@%#U%+#"&'7>323267#".54>32��-LiC#2GE
��#-+!"+,#���=iN-

`
IQ@>-##-.##/N��0@-B\CC
D%(%!+3267>;#"&'.+#�jO��y0���
";�����W�s
 ����X��@C
D+33X�����?G�0Z@BK�"PX@SC
D@CSC
DY@00&%$$!	+332>32>32#654&#"#>54&#"GzY<K�cgbL�hpoL�L2;+VPEA�M/;0YOD?�<�~�������2�{�1(KG+S{P���0GD0[�R��G�P@
BK�"PX@SC
D@CSC
DY@&$!+332>32#>54&#"GyY<Q�mq}L�L=A0c\O:�<���*�{�%RO4_�S��7���#NK�	PX@SCSD@SCSDY@##	+%2>54&#"".54>32�IxT.nhJwT.mYS�d8P��nS�d8P��}P��_��O��_���9l�d��b9l�c�c���+�@BK�	PX@SCSCDK�"PX@SCSCD@!CSCSCDYY@#!++(&!+32>32#"&'"32>54&�Y<&Zcl8��"?Ym�FK|*6�0c\O &k74\L<)V��M<�BkL)��R���_6;7�E�<l�W��7-,Kes{<w|0���0b@%
	BK�	PX@SCSCD@SCSCDY@
 )&0 0*, +#"&54>5#".54>322>7.#"p ;#PZb4<bE&-St��ZA{<��0]TH-+<pbP9 ��%�;^C$/[�VZ��]3��<j�Wc'Fat�E�G��,@)
BSC
D#*!+332>32&#"GzY A�Y** /,a�38��������*
��99@69BhfSCSD/#%/#"+#".#"#"&'7>3232>54.54>32�!/D0-J6>^m^>7g�Za�/, 0I81O7>^l^>3`�V[�2S,;!/8)&:ZHF�a:E6D
#2C&3<(#7XI@w\7=4_���>0b�+BK�2PX@#jhQCSD@!jh\SDY@	%#(+&+74>7#"&54>?>;!!32>32#"&�?q
�K^,
��=/)(	%0}?ap�$:/�9����)231	U+1j`����#L�BK�"PX@CT
D@C
CTDY@##*!&+32>73#"&54>57#"&5467bL=B.a[N?�zX"Q�jq}L��|$RP2\�P�"("Q����*�K��@BC
D, +32>7>;#K��:�����t%J$$I&��Q��. @'BC
D*!,< +32>7>;2>7>;#"'.'+Q�]Jq
��W�{
�����t#A  A#��p#B! C#��"�! �R"����@BC
D(")!+32>7>;	#"&'+h���
�����
��
�!���/�+�����Q����@
BCD,"!++32>7>;<)�����	@���)����*+Y�@QCQ
D+!!7>7!7!P����6	K���#�&�J
#ߌ1��Y�E7@4&:B[[OSG=;303++4&#72654.54>;+";2#".54>�85
JI-Y�V1	
'B/"3;5@#C=
2EfC" & �4Bhw|575a�i7MEoQ;?<MgA![?<rsu?FU%(Gb:Bxsq���5�@QD+3#����������G7@4<(B[[OSG?=525++3"+7>;2>5<&454>7.54>54&+"&54>5732�85
JI-Y�V1	

'B/"3;5@#C=
2EfC" & 4Bhw|575a�i7M

	EoQ<?;LhA![?<rsu?FU%(Gb:Bxsq9��9@6jkO[SG
+2673#".#"#4>32�AI�%Ef@4f_V$AI�%EeA4f_VeUFCpP, '!TGCpP-!'!����
!&@#SCQD

+>734>32#".�C

hB."--""--"��-UW\45\VU-���."".-""-��&�/8�@%BK�	PX@.jhfkSCSD@.jhfkSCSDY@
##'#+.54>?>;#".'>32+�R�`4M�ф"@-R}04+=*�@[?*	'!S`i6!@�tj�Z�]0
	Dq�`~מ\��?1<	��"<#6&����Dv���>?@<+Bh[SCS
D&&%#%&"	+#!>3!#!7>7#7>;>32#"&'.#"!z�Y	60<�	
�;#9+$�q!P��mT{X9K#2H4AkQ3 ���Kj*I
p
/C..F	^�zF&B[5,

0$+OpE��F��+`#7?@<!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"!�[�,h:9f+�Y�"!�[�,h99e,�Z�!�#>Q//S=$$=S//Q>#�9e,�Z�"!�[�,g:9f+�\�!!�[�,g:.Q=$$=Q./R>##>R~��"8@5
B
Z	YC
D"! ,!+!32>7>;!!!!#!7!7!�6�ʐ�
	_"��6��
V��'�'��
V
��p'��!:; =��cic��Aci���5�@YQD+3#3#����������;���FVA@>FTL;!BhfWSDDB+)&$#!+#".#"#"&'7>3232>54.5467.54>32>54.'R!/B0/K6DfvfDY_%-6f�^a�00	!0I:2O7)BUYUB)ag%.3a�W[�/��:Zn3:26Ug1E9�.>".A88JdH[�)!U9J�`7D6B
"3E))<0(*0?R8Y�'"X>AvZ5>6��/B82V51D70#P^���'@SD((($+#".54>32#".54>32? )(() g))))((**((**]���+Ga�@
BK�	PX@5h
f[[		SCSD@5h
f[[		SCSDY@\ZPNB@42(&+++2#".54>32#".#"32>%4>32#".732>54.#";		<9�tb�s?Dz�bm�9.2M:GpP**Kg>?V9!�.4`���ee���_44_���ed���`4e,Qs��XX��sR-c��X��sQ,�@BIDz�de�yCC8A-TxKMyR+�e���`44`���ed���`44`���eY��tS--St��Y��e.Sv���?��-9L@I!Bh[	WSD/.32.9/9%#
--
+"&/#"&54>?6454&#"#"&/>32'26?.04AR%V�j(0"0$6xD,D//�.G$
B\9*H	1 ED(K;&&.6
(2.4G(��P&#m*"����%�%(+77�4�

o ;]4�

o ;���
��
 ����
��
 �>�=K�	PX@_MQE@kMQEY�+!#!�[4�$�9�^ a<�@MQE+!!s��8��^���3IV��>BK�	PX@/h		[
[SCSD@/h		[
[SCSDY@44VTLJ4I4H)!*,,&+4>32#".732>54.#"#!2#"'.#'32>54.+^4`���ee���`44`���ee���`4e,Rr��XX��sR-c�焄�b� ��kj
�!�	Ps8M/+F4��e���`44`���ed���`44`���eY��tS--St��Y��ee���|}z^�
��.
r(:&%8$p��A@MQE+!!~��Aq�'�'@WSD((($+4>32#".732>54.#"�3XvDEwX22XwEDvX3}6I**I66I**I6hCvW22WvCBuW33WuA*I66I**J77J3PK�<@9jhZMQE
	+!!#!7!!!�/��e-�-�j�/����D������r�{�$����d-9@6+	Bh[SD(&#!
--+26;2!7>?>54&#"#"&/>�`m0?"�2*��
�6(6**A!C�ddS,HA<�*�89:-0+2ji�|�d:S@P6Bhh[[SD31.,('&%::	+2#".'763232>54&#7>54&#"#"&/>�.K5�980Nd48Q7"	:
+!"5%FV[S5,2=@5HWd->$�-E7<]?!1G/!%011Y=>,-.+4P4���	@kD	#++7>3��f�"��������%2@/BCT
CD%%'%!&+32673#"&=#"&'#"&5<7\SVQF�=]�|gF�PA^#U %��Y
RYJB�
lHC/+$H �� k�7��*@'hiSD+##!#".54>3�ܵ���붝j]�i9H��q���7�7]2Z~MZ�tC����@OSG($+4>32#".�)67((76)Q8((86))6��w
�K�PX@B@BYK�	PX@^TDK�PX@jTD@jjTDYY@
+232654&'73#"&'76E(+GB:k JC!;Q0&B�	(#	�R?.$9'5��z^N�
BK�2PX@jjQD@jjMRFY�$+37#"&/733!�6
y �hNy�u��,\		6���]�<��!)@&WSD!!	+2#".54>2654&#"�:]A"0UxH;^A#0Wy
ZYA?2E+@�%Ea<R�]2%Eb<Q�]2���uKU&C^8KTw���%�%(+'&54767&'&54?'&54767&'&54?���5
�
	p!;���5
�
	p!;�{

 �|�{

 �k�+1V@S%/
Bhh
Z\	C
D10+*)('&$##!#
+3+#7!"&/3+>;37#"&/733!>73�n
Uj���w��/F�1!G�u�6
y �hNy�u����I��>�] [���,\		6���]�,���\�	7Hb@_B;5Bhh
Z[	CT
D
HGFEDC?=9820,*
77#"
+%+>;26;2!7>?>54&#"#"&/>%37#"&/733!�/F�1!G�`m3C$�2*��
�6(6*/=	
+����6
y �hNy�u5 [�IdS-LC>!�8*�89:-04)
ji<�,\		6���]�z�TZ~@{P
"/
	X
B

h	
	
h

h	[

[\

SC
DZYMKGEA@?>8631+)TT##!#+3+#7!"&/3+>;%2#".'763232>54&#7>54&#"#"&/>>73n
Uj���w��/F�1!G�u.K5�980Nd48Q7"	:
46"5%FV[S5,2@15HW
���I��>�] [->$�-E7<]?!1G/,2%011Y=>,-0%	4P4�c,����u';5@2BhfSCSD(&#,$+#".54>?332>324>32#".u!LWb8DoQ,/IWN:	$u	1HSF/-;!7S<'��!-."".-!�4''HgAQsS<56$��-B:8CV;)?+$."".-""-������&$	O������&$_������&$
O������&$O������&$
O�����-&$P����9@6AYYQCS
D#	+!!!!!!!+!��L�*�:��&�������������$@d����J�K�PX@9=HB@9=HBYK�	PX@0hfSCSC	SDK�PX@0hfSCSC	SD@7hf	hSCSCSDYY@FD<;64/-%# JJ
+232654&'7.546$32#".#"32>32#"&'76�(+GB0r�~Bt��L|fS$@(EmWtʔU:g�UBfN7)	AWߒJC!;Q0&B�	(#	vd�ڀ�6�{2F+N

(/(]���o�{B ' Q^o:?.$9'5��aA�&(	$��aA�&($��aA�&(
$��aA�&(
$��V
�&,	����&,��g��&,
�����&,
E��!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>S�P�ԕOp��Q�{7f�]��>\
��?2xŎN	�Z�㈷���v��l�yA�n��[����aE�&1���d����&2	���d����&2���d����&2
���d����&2���d����&2
�l�9W�	(+		'	7	9�|8f��nP���g0������]d��]e[]��Z0����%1=g@5*)#
BK� PX@kCSCSD@jkSCSDY�**'(%&+#"&'+.546$327>;.#"%4&'32>�4_���ka�Cm=J�MRr��h�EY`�EJ��+)�2�OvƎP�$"�<0wHxƎO2zڹ�h82/�	T錷3�|;6p�T��a�<.1_��*X�;��&'^�������$�&8	������$�&8������$�&8
������$�&8
���y��&<<��	�����++���,@)\[C
D"( +32+#332>54&#��r�n6J�΅�!���3J�U�X.���6c�Uq��L����a��4]�Lt�3�&�P}@JGBAK�,PX@(hSCSCQD@%hWSCSDY@LKFD=;%# PP+2#"&'7>3232>54.54>54.#"+'&573>�Y~Q&/FQF/+@K@+>i�OY�10	"-@0*G3.DQD.1JWJ1-I4>mU:
l.KF�n(�^���6Se/D`H638&#/)+=XAV�_3E6B"6I*0?.(4H8>XE:@P8;0Ct�U���KW!M\��K��0����&DCi��0����&Dv+��0����&D�"��0����&D�"��0����&Dj"��0����&D�6���GUbG@E?"BK�	PX@5hh

[S	CSDK�PX@5hh

[S	CSDK�,PX@?hh

[S	CSCSD@Jhh

[S	CS	CSCSDYYY@&WV\[VbWbQOIHCA<:75/.(& 
	GG+232>32#"&'#"&54>7>54#"#"&/>32>32>7">54&]<fK*7��zl1K;-&,3afo@i�' Ydj1��@���<U?0W�hlz<���x�g-NA4]K4	�<bI2��c(K%BY39lU7

��#74L1rr>W8wxG�c>(�!)!7QP`UT^��%<Q2HE%JoJ�-TvH$3@$9D<��bI�K�PX@6<GB@6<GBYK�	PX@0hfSCSC	SDK�PX@0hfSCSC	SD@7hf	hSCSCSDYY@EC;:42-+#!II
+232654&'7.54>32#".#"32>32#"&'76(+GB2JqL'M��rd�38+A3E{\58Q6-F6)!,/TTW1JC!;Q0&B�	(#	y
Ck�T{�hGDC
K��f>eG'!63H-<?.$9'5��;��q�&HC���;����&Hv���;��q�&H����;����&Hj���=��&�C���_u�&�v���"^�&�����/w�&�j�<����1E6@37-B10@[SD32=;2E3E+)!+.54?.'&54?7#".54>32.'2>7.#"��)`7%X�F�qQ^F�ȂR�e8E}�ia�0LL�!AoX>	&<U9KwR+"=S)		^%
7@3|9	ST���k9k�_l��U[\��E���3l�v,Q?&<i�QCjI'��G��&Q����++��7����&RC����++��7����&Rv����++��7����&R�����++��7����&R�����++��7����&Rj����++s�A~'+@([YOSG(&(%+!!4>32#"&4>32#"&���B�&2'&21;X&2'&20<��2&(1$>�f2&(1$>���%)4�@32#"BK�	PX@!CSCSCDK�PX@!CSCSCDK�PX@!kCSCSD@!jkSCSDYYY@+**4+4&$+"'+7.54>327>;&#"2>54&'�|Z$:C�(+P��n}["  Z�'+P�����8NJzY1�I{Y1
�F7=1�5�X��b@.�5�W�c�YBZ-L���sM��g,K ��,��`����&XC����++��`����&Xv����++��`����&X�����++��`����&Xj����++��Q����&\v����++%����,p@ BK�	PX@!CSCSCD@!CSCSCDY@$",,(%+3>32#"&'#"32>54&%ݰY&X`h6��"?Ym�FK{+.'0b\O!&k74\L<)V���4=eF'��R���_6;6��&�<j�W��6,,Kes{<w|��Q����&\j����++������'0�K�PX@
-B@
-BYK�PX@!ZC
C	SD@(	hZC
CSDY@)($"''
+2#"&5467#"&'!+3#32>!.'�
Y0LRVB
N���	%���_-&( ���
�@F:?n)^����g!*3 '	�QB&&C0���4F(K�PX@&;BK�"PX@&;B@&;BYYK�	PX@#SC	SCSDK�PX@#SC	SCSDK�"PX@*hSC	SCSD@.hSC
C	SCSDYYY@65?<5F6F1/('$"44
+2#"&54>7.57#".54>32#32>2>7.#">
Y0LR*:"$S]f7<bE&-St��ZA{<y-&( �C1^TI++<pbP9 �@F: =81�@hI(/[�VZ��]3�,!*3 '	\=l�Y\'Fat�E���d����&&���<��o�&Fv����++a��A�%�K�PX�B�	BYK�PX@*YQCQ
C	
SD@1
		hYQCQ
C		SDY@" 
%%+2#"&5467!!!!!!#32>G
Y0LRVB���/��<��=ui-&( �@F:?n)������!*3 '	;��qAP�K�PX@G2B@G2BYK�	PX@*h	SCSCSDK�PX@*h	SCSCSD@1hh	SCSCSDYY@CBBPCP><0.)'
AA
+2#"&5467.54>3232>3232>">54.I
Y0LRI9U�_2!?[u�QMpH#6���uv0K;-& ,M�T+$( ?jR:��d #8�@F::f(<j�]N��xW2,DR%BoYB��#7P]!)2 '	Y4[{G19B$' _��@C
D+#�z�z�����!@
BCR
D+%!!76?3�m��=7�E��Y�&�}���-`�
W�Lb�@BC
D+4?37#L�N�F��\�T��D��Jf!I��E��aE�&1���G��&Qv���++d����2'@
BK�PX@"YS
C	S
DK�PX@-YS
CS
C	S
DK� PX@*YSCQ
C	S
DK�"PX@4YSCQ
CS
C		S
D@2YSCQ
CQ
C		SDYYYY@/-%#(#+!!!!!7#".54>324.#"32>���;��=q��Z��u��Fh���K�kS h/Z�Sm��I0[�Sm��H�������r~\�ㇹ6�~&Ge?��j�|Dc���k�|Cb��.���4FU�@
L2"BK�	PX@$hS	C
SD@$hS	C
SDY@ HG65GUHU><5F6F0.&$ 44+232>32#"&'#".54>32>2>54&#"">54.�AhJ'8\��~ym0K;-&,2afp@i�'E΁QzQ)U��kk�#?��IQ}U+]aN|X/.JH;fP8��h&'="?X5)LC;0&
��#74L1tsny;e�H���Xe[Zf�vN��qs�L��y/VB(.YQ3:A!*!�����&6���
��#�&Vv���++������&6���
��,�&V�~���++��y��&<
<��	�����++����&=8��Y�&]v����++���&=8��Y�&]�����++����&=8��Y�&]�����++��i�'6@3
BYSCSD''#"+#763>7'.546767376$3#"!��2���:.UH8���*0�/UI9+G�!˹[7:^E�	
�ſ_;^E�}Q���@BkD, +#"&/.'+3�rd�w����	q���@BkD( +32?>;#qxd
�s��������p��Aq���� @WD
	+".5467332>73r>V6y4B'6#z&Eg�!:M-
3?)9!6aI+��@SD($+#".54>32#.-""-.#:-""-/##/�kJ�=K�PX@WSD@[OSGY�$&($+4>32#".732654&#"� 7H()I8  8I)(H7 d6/-77-/6#*D22D*)D00D),88,-88/��t
YK�PX@B@@B@YK�PX@
SD@jSDY@+2#"&54>732>R
Y0LR.@%W-&( �@F:"@:2
!*3 '	h���QK�*PX@WSD@O[SGY@	+273#".#"#>32�Ai!2B% 5-) (j"3A%!4-()X/M7#-,.N8#��)�	#@ SD




	#++7>3!+7>3�H�"��S� ������������!Y�BK�(PX@SCS
D@SC
CSDY@! 6##++#!#"&'7>3267#7>3�"|l�k��O�z=<;N��D#��u�}w�H	?C�?
���@MQE+!!����}�o�@MQE+!!���7�}�����(+.5467�j^/	!

�%J%d�L	
09@"6
�����(+'&5467>54&'&547pj^0	!

�%J%d�L	
08@#6
����(+7'&5467>54&'&547�j^0	!

�%J%d�L	
08@#6
����1�(+.5467.5467�j^/	!

�j^/	!

�%J%d�L	
09@"6
*%J%d�L	
09@"6
����1�(+'&5467>54&'&547%'&5467>54&'&547yj^0	!

�j^0	!

�%J%d�L	
08@#6
*%J%d�L	
08@#6
�����1�(+7'&5467>54&'&547%'&5467>54&'&547�j^0	!

�j^0	!

�%J%d�L	
08@#6
*%J%d�L	
08@#6
�����%,@)BCSCD$&$"+>3632>32!#"&'!�,*?�G#)33#P$KIF &!��6H0+u6���/��,
	)
�D���B����9E@B)!("B[C	SCD98'%#&$"
+>3632>32!!#.'#"&'#"&5<>7!!�,*?�G#)33#P$KIF &"��Pj.*?�G!0+O$KIG&!kP���/��,
	'(�v:/�/�
(�����,K�PX@SD@OSGY�($+4>32#".�:e�LM�e;;e�ML�e:SM�e;;e�MM�d;;d�-��,�';@SD((((($+74>32#".%4>32#".%4>32#".-"--""--""--""--"!..""..!n."".-""-."".-""-."".-""-Z����'1EYm��K�PX@+[	[SC
		S

DK� PX@/[	[SC
C
		S
D@3[	[CSC
C
		S
DYY@~|trjh`^VT((%#&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�;`{A8^C%6]}F8^C&�$1(G4$1'G5w|��
~:`|A8]C%6]}F8]D%�$1(G5$1'G6):`{A8^C%6]}F8]D%�$1(F5#1'F6xc�j7)MoFc�k8)NpH2H."JsQ1E-!GqU��
�c�i7)MnFc�l8)NpH2G."JrQ1F-!HrRc�i7)MnFc�l8)NpH2G."JrQ1F-!Hr�����(+7�4�

o ;���
��
 w����(+'&54767&'&54?���5
�
	p!;�{

 �c�	@C
D#"+'+>;?/F�1!G5 [*����B[@X	4	Bh		h
[	[SC
S


DBA?>=<861/"##%%$+3>32#".#"!#!!#!32>32#".'#7367#T�!w��p��;C&6J3M�oT0����d��RoI.ASގq�v>����̎LcWB 4f�`7#H&6��-6-DeqR�ҀcJG�I6�%B@?BhS	CS	D%%!4(
+>7>;#7+"'#32'###7�
�	fGk.�
}.iGg�
�<x;�P

3��rG��RH��Ne��eA�=/@,!BSCS
D=<,**+!>54.#"!"&546767!7.54>32!�5T�i<5a�Re��H*Lj@4�/LxR,0X|��`zȎNAw�f~
(�Jx�pZ�_0B��zMyY:�O%�Tv�Ta��tQ+L��prěl�a A���3HB@?"Bh[SCSD54?=4H5H#*++$+>32#".5467>32>7>54&#"#"&'2>7.#"�'JMT0ItQ,n�݉HwT._��g^�"	e\'C7)
:qdU .I5K{\:]9*8l�c?!���/X~P#sʔVRQ"=9����7o�r-S@'>m�Wgp����@	BCR
D+)3!.'��ԩ���

����9 !9�����$@!QCD+##!##7��Ȳ�ɱȼ����]��]����$@!BQCQD+!!!!7>7	&5<7�R�����A��
��!
���;4�;�A��^�@MQE+!!�[���Ll�"@Bj[
D,'!+!##"&5<>7!2>7>;p���"Ne[n� 
�[ A 7Q=���';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+%".'#".54>32>32%2>7.#"!2>54.#"{3P?1DNX35[C'7\xB3O@2DMX35\D'7]y��!<86$,4!&A1$1S%B1$1!;86%+4�!8K))K8!(KhAR�i=!9K))K9!(KiAR�i<�5E''E4!<T4&:&!<T4'9&4E''E5�{����!(@%BSCSD6'%"+>32#"#"&'7>32>7�)��#A*\n�Og}F D
6Q=,C��Wnu��f�_-
L
:^B����7^@[0!/"B[[	O[	SG42+)&$77

+2>7#".#"'>322>7#".#"'>32@80%(u=4c_\-90%
)wB4d^\81%
'v=4c_\-81%
)wB5c_[W
l0."("i31!)!��
m/-!(!
h31!)!��}kK�PX@)^_	ZMQE@'jk	ZMQEY@

+!733!!!#7!7!7!��}����w��5�}���Pw�S���ʃ����ZP�� @	@MQE+!!�3�-2/��*>��yz�
�z{�
�iP��@
@MQE+%!7!7>7%>7.'%.54657n��>���2/�a�P����z�
�z������"@
BMQE+3	#>7	&'��|��y|�	��
�5���4��&&EF,#&���~�-K�PX@kD@
jaY@	+3v���0>���'s@

BK�2PX@(SCQC
CQD@MWSC
DY@''W%#+#!+'&5737>32#"&#"�y�k�}f.KF�c(�Iz�k''#
SzU1	�`���KX#O8]�n=Z$HnK5>��!�@	BK�	PX@(SCQC
CQDK�&PX@(SCQC
CQDK�2PX@,CSCQC
CQD@$MWCSC
DYYY@!!#!%#	++'&5737>32;#.#"3wg.KF�b(�
Bn�aG�5w���-_+u��a���KX!Q7T�pA
�Z$
��7�G��2��5K�0PX@QD@MQEY@	+#2~mQR��U
	�	@ja		+2#"&/����
�
����'@OSG((($+#".54>32#".54>32P%##%X$$$$�$$%%$$%%�(��@MQE+!!�4���f
�@ja
#++7>3����
��
�	
f
��@Bja& +#"&/+73ǃr�	���
kk��
��@Bja!+#'327>3�ƒr�	���kk����(@%jOSG
+"&547332673�syo�NOp,Ie�^^c><4T< *@OSG($+#".54>32"-,!!,-"�,!!,,"",��V-!@[OSG$&($+4>32#".732654&#"�4D&'E44E'&D4Y6/-77-/6{'B//B'&@..@&+99+-88���1@.O[SG
+2673#".#"#>32)^.>% 82.'a.>%!82-|*%*G5 -%*H5 �
b�	+@(OSG




	#++7>3!+7>3(�S�'��]�)����

�}��
@kD


+2+�+$<]�

9^I
D��{��_<�	�ʓ^p�ӡ���-	��VO������'-�{����6�G�Z9��(z(�����s�2�a�-����O���/�]�-�D�h���R���-�.+���+}���M���a�dia+aaEdpa6�1���r�a�aoa�dhr�d�r�?{?��|Z�����y|(!�l(������8M�0Ob<5�;]?���$O�_�g�N�XGG�7�0�G

�_`�K�Q����QZ(1X�(���9�{�������~X��;8^=]x�k����a=^8p��3����8;k#�8����kw������������������������d+a+a+a+a6V6�6g6��Eoa�d�d�d�d�d�l�0?�?�?�?��yh�I3�0�0�0�0�0�0�b<�;�;�;�;�=�_�"�/�<G�7�7�7�7�7�s�````�Q%�Q���0�db<+a�;�_�YLoaG�d.�

�

�y|Z|Z|Z�8Q8q8p8�88�8/8h8�x�����������������,�,B���-OZV�VwA��*/�]+A��Y�����xL�=�{����+Z+i����>G>8G8U8�8�88f8�8�8*8�8�8�8g�P`�	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U
	�U
��
��
��
�U
$�U
96
:0
<-
?6
D��
F��
G��
H��
R��
T��
m��
o��
y��
}��
��U
��U
��U
��U
��U
��U
��U
�-
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�U
��
��
��
��
�-
�
�
�
�
�
�
�
�
��U#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������
	�U
��
��
��
�U
$�U
96
:0
<-
?6
D��
F��
G��
H��
R��
T��
m��
o��
y��
}��
��U
��U
��U
��U
��U
��U
��U
�-
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�U
��
��
��
��
�-
�
�
�
�
�
�
�
�
��U��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^�����
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;6	��
6
6�A���A������":#��$��&��*��-�i2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l6m��o��p��r6tPuPw��y��{P|6}�������������������������������������������������������������������������������������������������������������������������������������������������������6�6�A�6�6�A��A�����#��#	��#
��#��#
��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#���$�J$
�J$
�J$��$#��$&��$*��$->$2��$4��$7�|$8��$9��$:��$<�h$?��$W��$Y��$Z��$\��$k��$l�J$m��$o��$p��$r�J$t�I$u�I$y��${�I$|�J$}��$���$���$���$���$���$���$���$���$���$���$���$��h$���$���$��$��$�h$��$��$�J$�J$�J$�J$��$��$��&��&m��&o��&y��&}��&�&�&�&�&�'��'	��'
��'��'
��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'���)	�|)�L)�L)�|)��)��)")$�|)-�:)D��)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)��|)��|)��|)��|)��|)��|)��|)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)�|)��)��)��)��)��)�L)�L)�L)��|-	��-��-$��-���-���-���-���-���-���-���-��-���..
.
.��.#��.&��.*��.2��.4��.I��.W��.Y��.Z��.\��.k��.l.m��.o��.p��.r.y��.|.}��.���.���.���.���.���.���.���.���.���.��.��.�.�.�.�.�.�.�.�.�/��/
��/
��/�;/#��/&��/*��/2��/4��/7�8/9�J/:�h/<�,/?�J/Y�|/Z��/\�|/k��/l��/m�;/o�;/p��/r��/t�,/u�,/y�;/{�,/|��/}�;/���/���/���/���/���/���/���/��,/��|/��|/��/��/�,/�;/�;/�/�/�/�/�;/�;/�;2��2	��2
��2��2
��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2���3	�v3�C3�C3�v3$�v3-�J3D��3F��3G��3H��3R��3T��3��v3��v3��v3��v3��v3��v3��v3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3�v3��3��3��3��3�C3�C3�C3��v4��4	��4
��4��4
��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4���5#��5&��5*��52��54��57��58��5k��5p��5���5���5���5���5���5���5���5���5���5���5���5��5��7	�|7�L7�L7�L7�|7�f7�f7"'7#��7$�|7&��7*��7-�872��74��7D�/7F�/7G�/7H�/7J�E7P�f7Q�f7R�/7S�f7T�/7U�f7V�J7X�f7Y�W7Z�7[�Z7\�L7]�_7k��7m�L7o�L7p��7w�f7y�L7}�L7��|7��|7��|7��|7��|7��|7��|7���7���7���7���7���7���7���7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��f7��/7��/7��/7��/7��/7��/7��f7��f7��f7��f7��W7��W7�|7�/7��7�/7�/7�f7��7�/7�J7�J7�_7�_7�_7�L7�L7�L7�L7�L7�L7�L7�L7��|8	��8��8$��8���8���8���8���8���8���8���8��8���969	��9
69
69�A9��9�A9��9��9��9":9#��9$��9&��9*��9-�i92��94��9D��9F��9G��9H��9P��9Q��9R��9S��9T��9U��9V��9X��9Y��9Z��9\��9]��9k��9l69m��9o��9p��9r69tP9uP9w��9y��9{P9|69}��9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9��9��9��9��9��9��9��9��9��9��9��9��9��9�9�9�69�69�A9�69�69�A9�9�A9�9�9���:::	��:
::
::��:��:��:��:��:$��:-��:D��:F��:G��:H��:J��:P��:Q��:R��:S��:T��:U��:V��:X��:l::r::t<:u<:w��:{<:|::���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:��:�::�::�:�::�::�:�:���;;
;
;��;#��;&��;*��;2��;4��;I��;W��;Y��;Z��;\��;k��;l;m��;o��;p��;r;y��;|;}��;���;���;���;���;���;���;���;���;���;��;��;�;�;�;�;�;�;�;�;�<7<	�r<
7<
7<�'<�J<�'<�r<��<��<"2<#��<$�r<&��<*��<-�8<2��<4��<D�A<F�A<G�A<H�A<J�W<P��<Q��<R�A<S��<T�A<U��<V�A<X��<]��<k��<l7<m�J<o�J<p��<r7<t><u><w��<y�J<{><|7<}�J<��r<��r<��r<��r<��r<��r<��r<���<���<���<���<���<���<���<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<���<��A<��A<��A<��A<��A<��A<���<���<���<���<�r<�A<��<�A<�A<��<��<�A<�A<�A<��<��<��<�J<�J<�7<�7<�'<�7<�7<�'<�J<�'<�J<�J<��r=��="#=#��=&��=*��=2��=4��=k��=m��=o��=p��=y��=}��=���=���=���=���=���=���=���=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>D��>F��>G��>H��>R��>T��>k��>p��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��>��?�J?
�J?
�J?��?#��?&��?*��?->?2��?4��?7�|?8��?9��?:��?<�h??��?W��?Y��?Z��?\��?k��?l�J?m��?o��?p��?r�J?t�I?u�I?y��?{�I?|�J?}��?���?���?���?���?���?���?���?���?���?���?���?��h?���?���?��?��?�h?��?��?�J?�J?�J?�J?��?��?��E��E
��E��E
��E@��E[��E`��El��Er��E|��E�E�E�E�H��H
��H��H
��H@��H[��H`��Hl��Hr��H|��H�H�H�H�IEI
EI
EI�I�IlEIrEItdIudI{dI|EI�EI�EI�I�EI�EI�I�K��K
��K
��KY��K\��Kl��Kr��Kt��Ku��K{��K|��K���K���K��K��K��K��ND��NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��N��P��P
��P
��PY��P\��Pl��Pr��Pt��Pu��P{��P|��P���P���P��P��P��P��Q��Q
��Q
��QY��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q���Q���Q��Q��Q��Q��R��R
��R��R
��R@��R[��R`��Rl��Rr��R|��R�R�R�R�S��S
��S��S
��S@��S[��S`��Sl��Sr��S|��S�S�S�S�U�hU�hUD��UF��UG��UH��UR��UT��U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U��U��U��U��U�hU�hU�hY	��Y�rY�rY��Y$��YD��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y��Y�rY�rY�rY���Z	��Z��Z��Z��Z$��Z���Z���Z���Z���Z���Z���Z���Z��Z�Z�Z�Z���[D��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��[��\	��\�h\�h\��\$��\D��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\��\�h\�h\�h\���^#��^&��^*��^2��^4��^D��^F��^G��^H��^R��^T��^k��^p��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��^��k��k	��k
��k��k
��k��k$��k7��k9��k;��k<��k=��k?��k@��k`��kl��kr��k|��k���k���k���k���k���k���k���k���k��k��k��k��k��k��k��k��k��k���l	�Ul��l��l��l�Ul$�Ul96l:0l<-l?6lD��lF��lG��lH��lR��lT��lm��lo��ly��l}��l��Ul��Ul��Ul��Ul��Ul��Ul��Ul�-l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�Ul��l��l��l��l�-l�l�l�l�l�l�l�l�l��Um��m	��m
��m
��m�^m�^m��m$��m7�Am9��m;��m<�@m=��m?��ml��mr��m|��m���m���m���m���m���m���m���m��@m��m�@m��m��m��m�m�m�^m�m�m�^m�^m���o��o	��o
��o
��o�^o�^o��o$��o7�Ao9��o;��o<�@o=��o?��ol��or��o|��o���o���o���o���o���o���o���o��@o��o�@o��o��o��o�o�o�^o�o�o�^o�^o���p��p	��p
��p��p
��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p���r	�Ur��r��r��r�Ur$�Ur96r:0r<-r?6rD��rF��rG��rH��rR��rT��rm��ro��ry��r}��r��Ur��Ur��Ur��Ur��Ur��Ur��Ur�-r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�Ur��r��r��r��r�-r�r�r�r�r�r�r�r�r��Ut	�Tt�Tt$�Tt9:t::t<(t?:t��Tt��Tt��Tt��Tt��Tt��Tt��Tt�(t�Tt�(t��Tu	�Tu�Tu$�Tu9:u::u<(u?:u��Tu��Tu��Tu��Tu��Tu��Tu��Tu�(u�Tu�(u��Ty��y	��y
��y
��y�^y�^y��y$��y7�Ay9��y;��y<�@y=��y?��yl��yr��y|��y���y���y���y���y���y���y���y��@y��y�@y��y��y��y�y�y�^y�y�y�^y�^y���{	�T{�T{$�T{9:{::{<({?:{��T{��T{��T{��T{��T{��T{��T{�({�T{�({��T|	�U|��|��|��|�U|$�U|96|:0|<-|?6|D��|F��|G��|H��|R��|T��|m��|o��|y��|}��|��U|��U|��U|��U|��U|��U|��U|�-|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�U|��|��|��|��|�-|�|�|�|�|�|�|�|�|��U}��}	��}
��}
��}�^}�^}��}$��}7�A}9��};��}<�@}=��}?��}l��}r��}|��}���}���}���}���}���}���}���}��@}��}�@}��}��}��}�}�}�^}�}�}�^}�^}�����J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�������������m���o���y���}����������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|������������������������������������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������7�	�r�
7�
7��'��J��'��r�������"2�#���$�r�&���*���-�8�2���4���D�A�F�A�G�A�H�A�J�W�P���Q���R�A�S���T�A�U���V�A�X���]���k���l7�m�J�o�J�p���r7�t>�u>�w���y�J�{>�|7�}�J���r���r���r���r���r���r���r�������������������������������A���A���A���A���A���A���A���A���A���A���A���A���A�������A���A���A���A���A���A������������������r��A�����A��A��������A��A��A�����������J��J��7��7��'��7��7��'��J��'��J��J���r����	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|�����������	����r��r����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������r��r��r��������
������
���@���[���`���l���r���|�����������	����r��r����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������r��r��r������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�������������m���o���y���}����������������
������
���@���[���`���l���r���|������������i�
�i�
�i����9�^�:���<�h�?�^�Y���Z���\���l�i�m���o���r�i�t�}�u�}�y���{�}�|�i�}�����h����������h������i��i��i��i����������
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|�����������7�	�r�
7�
7��'��J��'��r�������"2�#���$�r�&���*���-�8�2���4���D�A�F�A�G�A�H�A�J�W�P���Q���R�A�S���T�A�U���V�A�X���]���k���l7�m�J�o�J�p���r7�t>�u>�w���y�J�{>�|7�}�J���r���r���r���r���r���r���r�������������������������������A���A���A���A���A���A���A���A���A���A���A���A���A�������A���A���A���A���A���A������������������r��A�����A��A��������A��A��A�����������J��J��7��7��'��7��7��'��J��'��J��J���r����"#�#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������"#�#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������"#�#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^��������	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^�����	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U�	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U����
���
����;�#���&���*���2���4���7�5�9�,�:�|�<�;�?�,�Y�r�Z���\�|�k���l���m�;�o�;�p���r���y�;�|���}�;�������������������������������;���r���r��������;��;��;����������;��;��;�	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U�	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U����
���
����;�#���&���*���2���4���7�5�9�,�:�|�<�;�?�,�Y�r�Z���\�|�k���l���m�;�o�;�p���r���y�;�|���}�;�������������������������������;���r���r��������;��;��;����������;��;��;����	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^��������
���
����;�#���&���*���2���4���7�5�9�,�:�|�<�;�?�,�Y�r�Z���\�|�k���l���m�;�o�;�p���r���y�;�|���}�;�������������������������������;���r���r��������;��;��;����������;��;��;����	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^��������	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^�����	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U��J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J���������������Z,�
Bz�(Zt��J�B��N�		r	�
.
^
�
��z�
 
P
z
�2���>|���Lr��F���(Hx���X�d�`���(���t�(�.l�R��@���f|�@@�   �!!l!�"&"l#<#�#�$,$F%%%b%�&&�&�&�'2'^'�((Z(�)")�*�*�++++$+0+<+�,n,z,�,�,�,�,�,�,�--*-6-B-N-Z-f-�. .,.8.D.P.b.�/R/^/j/v/�/�/�0�1�1�1�1�1�1�1�1�2
2�2�2�2�2�2�2�3L444*4<4N4`4�4�5�6|6�6�7"7�88P8~8�8�9~:8:D:T:`:p:�:�:�:�:�:�:�;8;h;�;�;�;�<J<�<�=,=�=�=�=�>>H>�>�?4?�@@:@�A�A�A�BB�CCxDD0D\D�D�D�E�E�FRF�F�G0GpG�HH�H�IIJIdI�I�I�JJ:JzJ�J�K�b"/n�	�n���)��(��0�+	C
�R.2F
�x:	T	h	p	R|	�	P�	�	`4	0�		�	
��	0
�	d
�	
�.	4�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoItalictyPolandLukaszDziedzic: Lato Italic: 2013Lato ItalicVersion 1.105; Western+Polish opensourceLato-ItalicLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoItalictyPolandLukaszDziedzic: Lato Italic: 2013Lato-ItalicVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFL���rt	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt�������������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK)J[Z��o�o[share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfnu�[���GPOS'��HPGSUBV.TIlOS/2�8��J|`cmapRԟ�J��cvt &�6e�8fpgm�zAe�	�gaspe�glyf�^��O���head��d��6hhea�1��$hmtx?k���TkernO�Q��@g�loca�)N4,maxp>
�P` name�BbdP�}post:�\�b�prep�x9�op�
0JDFLTlatn����kernkernGr�����T��v		�

����
V
��8�,^$^�0��
D��J��J���J�L F �!z"##P#�$4$~%x&&�'�(�)�*�+�+�,J,�-n..�/$/V/�/�/�1�242n2�2�33V3�3�44J4�4�4�5�5�6�7�7�7�8~8�8�:�;";�;�<�=2>,?&?�@�A�B�C8C�D�E.F(>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�Iq>	��
>
>�G���G������"F#��$��&��*��-�o2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l>m��o��p��r>tPuPw��y��{P|>}�������������������������������������������������������������������������������������������������������������������������������������������������������>�>�G�>�>�G��G�����$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������
�om�oo�oy�o}�o�o�o�o�o�o$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	���L�L������"$��-�.D��F��G��H��P��Q��R��S��T��U��X��w������������������������������������������������������������������������������������������������������������L�L�L���	����$����������������������������+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������3��
��
���$#��&��*��2��4��7�89�V:�y<�=?�VY�zZ��\�zk��l��m�$o�$p��r��t�=u�=y�${�=|��}�$�����������������������=��z��z�����=�$�$���������$�$�$$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������/	���=�=��$��-�VD��F��G��H��R��T�������������������������������������������������������������������������������������������=�=�=���$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������#��&��*��2��4��7��8��k��p���������������������������������������f	���L�L�L���]�]"-#��$��&��*��-�82��4��D�)F�)G�)H�)J�AP�]Q�]R�)S�]T�)U�]V�FX�]Y�QZ�y[�b\�L]�ek��m�Lo�Lp��w�]y�L}�L��������������������������������������������)��)��)��)��)��)��)��)��)��)��)��)��)��]��)��)��)��)��)��)��]��]��]��]��Q��Q���)���)�)�]���)�F�F�e�e�e�L�L�L�L�L�L�L�L���	����$����������������������������q>	��
>
>�G���G������"F#��$��&��*��-�o2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l>m��o��p��r>tPuPw��y��{P|>}�������������������������������������������������������������������������������������������������������������������������������������������������������>�>�G�>�>�G��G�����NF	��
F
F����������$��-��D��F��G��H��J��P��Q��R��S��T��U��V��X��lFrFt<u<w��{<|F��������������������������������������������������������������������������������������������������������������F�F��F�F�����+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������m4	�~
4
4�[�V�[�~����"2#��$�~&��*��-�82��4��D�GF�GG�GH�GJ�_P��Q��R�GS��T�GU��V�GX��]��k��l4m�Vo�Vp��r4t2u2w��y�V{2|4}�V��~��~��~��~��~��~��~�����������������������G��G��G��G��G��G��G��G��G��G��G��G��G�����G��G��G��G��G��G�������������~�G���G�G�����G�G�G�������V�V�4�4�[�4�4�[�V�[�V�V��~��" #��&��*��2��4��k��m��o��p��y��}��������������������������������-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������K
K
K�y�ylKrKtdud{d|K�K�K�y�K�K�y�y��
��
��Y��\��l��r��t��u��{��|����������������D��F��G��H��R��T���������������������������������������������������������������������
��
��Y��\��l��r��t��u��{��|������������������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������"�y�yD��F��G��H��R��T��������������������������������������������������������������������y�y�y.	���~�~��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������~�~�~���	��������$����������������������������������D��F��G��H��R��T�������������������������������������������������������������������.	���y�y��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������y�y�y���-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[	�e�e$�e9F:F<(?F��e��e��e��e��e��e��e�(�e�(��e	�e�e$�e9F:F<(?F��e��e��e��e��e��e��e�(�e�(��e&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���	�e�e$�e9F:F<(?F��e��e��e��e��e��e��e�(�e�(��e>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������
�om�oo�oy�o}�o�o�o�o�o�o$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������	����$����������������������������	����$����������������������������	����$����������������������������	����$����������������������������m4	�~
4
4�[�V�[�~����"2#��$�~&��*��-�82��4��D�GF�GG�GH�GJ�_P��Q��R�GS��T�GU��V�GX��]��k��l4m�Vo�Vp��r4t2u2w��y�V{2|4}�V��~��~��~��~��~��~��~�����������������������G��G��G��G��G��G��G��G��G��G��G��G��G�����G��G��G��G��G��G�������������~�G���G�G�����G�G�G�������V�V�4�4�[�4�4�[�V�[�V�V��~$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�������������������������������������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������.	���~�~��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������~�~�~�����
����
��@��[��`��l��r��|������.	���~�~��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������~�~�~���:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������
�om�oo�oy�o}�o�o�o�o�o�o��
����
��@��[��`��l��r��|������"�o
�o
�o�t9�j:��<�y?�jY��Z��\��l�om�to�tr�ot��u��y�t{��|�o}�t��y�������y�t�t�o�o�o�o�t�t�t��
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|������m4	�~
4
4�[�V�[�~����"2#��$�~&��*��-�82��4��D�GF�GG�GH�GJ�_P��Q��R�GS��T�GU��V�GX��]��k��l4m�Vo�Vp��r4t2u2w��y�V{2|4}�V��~��~��~��~��~��~��~�����������������������G��G��G��G��G��G��G��G��G��G��G��G��G�����G��G��G��G��G��G�������������~�G���G�G�����G�G�G�������V�V�4�4�[�4�4�[�V�[�V�V��~��" #��&��*��2��4��k��m��o��p��y��}����������������������������������" #��&��*��2��4��k��m��o��p��y��}����������������������������������" #��&��*��2��4��k��m��o��p��y��}��������������������������������&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������r

#$&')-./2345789:;<=>?EHIKNPQRSUYZ[\^klmoprtuy{|}����������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I�,xx�A���P`KtyPL�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ/��,8<@��BK�	PX@3	`f[[		QCQ
D@4hf[[		QCQ
DY@@?>=<;:9751/+)&$$
+>32#'.<54>54.#"#"'4632#"&!!7!!3<G*6]E'!1;3$
A!1:1!/?#.B.{,! ,, !,����]#[��n$;S47O;-('rT.)*4C.$8'�� ..  ..��y$?�����
)@&hCSD

+#>74>32#"&�F
>F�!""'5���-PS\88\SP-<��""!5��t�
,@)	BkD

$+#"&'7!#"&'7e$
&]$
&��ܚ�$�ܚ�$Pr�:>yK�)PX@(
Y	CQ
C
D@&
Z
Y	C
DY@>=<;::5320-,'%#"!#!+#"&547!+#"546?3#76;>;!323+32%!!�'��Ԇ)��ۂ�
)։(�+�)�����	��,�����E
	��l��%��D�
	�m$�yE�r��B[9DO�@!
*BK�PX@2j

h
f_

SC	SD@1j

h
fk

SC	SDY@LKA@#$#$+.'7632.54>?>;#".'+4.'>ေ>	"/AU8o<rY6=r�g
#"d�7#;XAc@|c=D~�p$
#�-Lb6kY�b4��'DX2`TV,bP&!(#�/HhLN�pE��J@!!)%��0GhN\�N��:P9)��>c��6M9*,6Tl}��8�'0DXuK�PX@+[	[SC
C		SD@/[	[CSC
C		SDY@
US((%"&((($
+#".54>324.#"32>>;+#".54>324.#"32>�7Zt>3W?#4XvA3V?$J.>$0XC'-?$0WC(XA��B�7Zt>3W>#4XuA3V?$J.=$0XC(.?$0WB(qg�h4&ImGg�i5&JmI<W9)W�]<V8(V�b
���g�h5&JlGg�i5&KmH<W9)W�];V8(V�M����?OT@QK8J)#BhSCS
CSDFD/-&$ 
??	+2"#"'.#">7>;#"&/#".54>7.54>32>7�>hJ)40K6=eI(>;a2A
<TD�M�/lz�GG|\6:c�M106b��0.J_2>si^(��GrP,�)Kh?	 E:%,Mi>E�I�NH�G^�[���3V>#-U|NR�y\F�FP�d8��BeD"!:P/�Viz��e�
@	BkD

$+#"&'7e$
&��ܚ�$���H� �(+.54>7�!2!	++<'
4UxR&	S~T+�O���H		X���PV�����r	w������ �(+4.'&546?'&547>\!1!	++<'
4UxR&	S~T++O���H		Y���PV�����r	w��	����;*@'40/+'&"
	Bja;;+7>7'7>7./7.5<?3>?'.'x	
��
��2	

����

��n+n		n,n	��	n,n	
	n+n	
���3�.@+jkMRF+!!#!7!�7��O7L8�Q	�8��=G�;�G�?���@B?S
D"+74632'.54>7#"&?0'+/(8"'$	%/U#2;0)URL 	%9J,2c*x@MQE+!!n�	�RxN:����@SD&$+74>32#"&:!#7''5M""'55�����@kD""++6;	!&�''/�$Z��`�',@)SCSD''	+2#".54>2>54.#"�\�r@b��y\�r@b��.c��Q5\}Gc��Q5]}�H�ّ���jH�ّ�G�j��_�)ʂ�z;_��Ƀ�{;���)@&BhCR
D$+%!7#"/3!!F����I�5�(H�E��	'i��HF5�1<@9-BhSCQ
D+)#!
11+2>3!2!7>7>54.#"#"/>�K�c9;e�K�	 G#h�q
	!K}Z2-Mf9Du_F.\~��*S}R[���D�8!5!�C{|�NCcA 'Ig?Z�b4q��<�HU@RD
Bhh[SCSDB@:80/.-%#HH	+2#".'763232>54.#7>54.#"#"/>�K�`73XwCEgF#Q��ha�f<)	
2OpNa�g6$V�m	a�k8,Kd9Dv`F.[~��)OvLP~^?
7Oe:`�xD.\�Y
GhF"Ci�@7aG)B2X|L@_?'Hg@Z�b4>^�+@(
B\C
D!#+!+#!"&/367!Z�1T2�g;Tk�5b�2
�i�
-�� '��g��8�-@@=+*Bh[QCSD(#&(""+#!632#".'763232>54.#"'!2����kg�g3[��m:hXI 
-HgF[�yF(T�Xn�8�{_�$6a�P}NJJ#-'%=r�iBmN,%r���32@/B[CSD0.&$	+2#".54>7>;>32>54.#"�T�b6Q��oY�f7:Z>�	Q�&>B���*PsJ^�p=,QtG_�o=M5`�Rl��J7h�\:qwH	

��*K#?G�-DtU0=l�WFrP+Do����$@!BQC
D$'++>7!"&57�	��H.
��
�#	��


>f��&�%;OD@A
B[SCSD=<'&GE<O=O1/&;';%%	+".54>7.54>32'2>54.#"2>54.#"^�m<6`�MmpBx�fW�_1)MpH<cG'N��eY�l==`u7,]ZQ=$.Ty�[�Y+%HjES�\2!Fk1ZNY�fA!�hT�l?3WuCDw`F5NiBf�q<J3_�SOkA"8PkE?fJ(�9]v>6]E'2XwE2^H+�Z�22@/B[SC
D/-%#	+".54>32+>74.#"32>MP�^3O��iU�c5:V7�H T� >B�V+NnBV�l=)MnD]�i8Z3\�Of�I8f�VDrosE��I&L)BH�CqQ-9g�VClK(Ai�:��Z�;K�#PX@SCSD@[SDY�&&&$+74>32#"&4>32#"&:!#7''5f!#7''5M""'55D""'55<�e�)K@
B?K�#PX@SCS
D@[S
DY@	(& "+74632'.54>7#"&4>32#"&<0'+/(8"'$	%/o!#7''5U#2;0)URL 	%9J,2<""'55�	�5�(+���%(�B��A��

��
���	c!@YMQE+!!!!�;	��/:��+GG�	�5�(+	767>7&'&5<>7���L%(�����A


�~����'95@2BhfSCSD(&#,$+>32#7>54.#"#"'4>32#"&EQ\4=gK*1LYQ< @9NZL2 9M,>\@(
"!""'5
3'&Fa;SvXA<>(��,E>?PhH/K5#*#�g""!5a��2Wlf@c
^
?Bh[

[	[OSGYXb`XlYlOMCA=;86,*" 
WW
+%"&5<7#".54>3232>54.#"3267632#".54>32%2>7.#"IG?�L-B*!>Zq�N1T!';sZ7L��g\���a7V��z��_	o�����^<j���hpɘXDq��%!HHFp.;l\K5/�NH\S 9L,;|tfL,��=Z !*	I��v|�|?7f���z��PD>JP[�����ǡq=I�҉�ՙTD?lT7%AXck4!9*��X�
$@!BZC
D# +!#"&'!+3!.'XLe���L�b�>E�	
��b��z�*�5�*=@:B[SCS
D*(" !+3!2#!2654.#%!2>54&#!��yf�b/,QtI��C�s�JD��)OsJ��a�\,�����*OrHD|eI�yb�p<�����:]B$H:_zAw~�����/D@A
BhfSCSD'%" //+%2>32#".546$32#".#"�ItZA.	#.ix�PzŋKp��ItaQ&)N}`��aBv�E%+%*/K5X�⊹3�y,B*(,5,h���|NjJ�-�@SCS
D!(!&+#!!24.#!!2>-1[���g�$��}ʍLg?u�h���x�ޢZ/}ڵ�b3�U�ދy†H�c��?�(@%YQCQ
D+!!!!!!4�WG7��I���5��P��R��?�	"@YQC
D+!!!#!4�WJO��Pd�5��S�u�����9G@D$	Bh[SCSD1/(& 99+%2>7#"504>7!#".546$32#"'.#"�CobZ-0�k?5o}�R͐Mn��M~hV&	'7Kb?��]Bz�A*��
%:'Y�㊻3�w,@)'!h���|njK�!� @ZC
D+!#!#3!3sdS��Sd�dR(Rd��Y��k����@C
D+!#3	d�d�����'@$BhCSD#%$+#"&'7>3232>73}Hn�W6Y+

#1#;lW=
xd�u�q76%W�i���� &@#
B\C
D'(% +3267>;#"&'.+#3^M"(PQ�~�P	�*	TTc�d�L���Xf�U��X�@CR
D+7!!3�h�6�cUU��<�!'@$BhC
D!6(+67>;#>7+"'#32-
~E�W���	�n�W�D���
�y��#��F���!�@BC
D!+2>73#"'#3b
��W�.�Q�W�1��0��y�-�G����q�'@SCSD((($+#".546$324.#"32>qm���|ȍLn��}ɍLg?v�g�ޣ\@v�g�ޢ[0����xY�≺3�xY��{ŋKh��{ŊKg��?�/@,[SC
D



!+#!2#32>54&#GFc�T��J��v�T�^�k:��;�����l��H��S<j�V�����q�/T@
BK�PX@SCSCD@kSCSDY�((($&+#"&'#".546$324.#"32>q5a�U#N
�|�|ȍLn��}ɍLg?v�g�ޣ\@v�g�ޢ[0�⼓1�{
C2Y�≺3�xY��{ŋKh��{ŊKg��3�!7@4B[SC
D! *!+#!2#"'.#32>54&#POc�P��<n�^qU��!%SM�_�j8�������\�sH��@���4`�S�~'����==@:=BhfSCSD;9(&!#!+#".#"#"&'763232>54.54>32�";]FLwS,2QgmgQ2B{�m��<!	!-@U8T�`32QglhQ1:m�ef�8�&-&1Uq@=S;+)1FdI`��LcV+#)#9d�N>S:((0GgKQ�sDKH��� @QC
D+!#!7�
�8�c��6
�T��3T����#@ CSD+%2>73#".5473o]�uLkdl]��sg�o:kdl-W�FH~�cl��u˖VG|�e,-l��(T�h;
�@BC
D, +32>7>;#O&
	GN�:Y��c00��y�~�( @#BC
D+; +32>7>;2>7>;#.'#�N���
�M��Y�	��Y��h))��h))��y��/����@
BC
D)"'!+	32676;	#"&'+��Y
-�c��Y
���	b��
��4�r���p
���@BC
D,"+#32>7>;gIcI��X+�SG��H?�d! �,��$@!QCQ
D+!!7>7!7��28�A	���!	�R!
�RD��D�'@$[OQE!#+!+32D�&
�̼���#��
q��H�@kD" +32#"&'q''	�%�$�+���'@$B[OQE!#+!!7>;#"5�(���˻�
#v ��@	BkD+!+3#"&'&'+\;UC�

�F���
��L������1@MQE+!7�	�+�AA�~�@kD+2#"/�s5����<��s�+^@ BK�%PX@SCS
D@SC
CSDY@
#!++*' +!#"&5#".54>322>7&#"�.!&[gr=?^? ,Qp��R<h3��9odY#2;EC~o]D%[
9P�^41Z�PW��~\4��@u�d�-Pn��L��f����0h�"BK�%PX@CSCSD@!CSC
CSDY@(&00*%+33>32#"&'#"32>54&f�]a'`ju<AbB" ;Ul�HU�*9sk]$#7?C#?mYE/f���O�\32[�PM���b9MLl�@t�d��'7"3Xu��A��H��F�25@2BhfSCSD%(#&*$+%#".54>32#".#"32>325_[^5VT*!>Xn�I1OB6	
1N;T�k=AbC5TA1&
�;L,;j�VO��vV1#2! % Z��lEvV0")"
@����.p@"BK�%PX@CSCS
D@!CSC
CSDY@&$..
+!"&5#".54>323%2>7.#"�!'alv=AbB" ;Ul�IQ�,I\��I9rk]$#+�E?mYE/f
=Q�_42\�QL���b9GGK�Q@?t�c N@3Xt��@��F��F�,=7@42BhSCSD.--=.=*&%,+32>32#".54>32%">54.F8`�Ќ��5UC3(	1]_f:S�X.;Wp�OIe?��P�cC��O,,G%)JB;1')��$($
4K07e�ZK��zZ4)=GgDq�Q%)0361(B���%^�BK�!PX@kSCQD@kYSDY@%%!$%$	++'&546737>32#"&#"!2j*#�~�
:Wn?8
(-Q?-	
~���w~U�V+
0AhK{F�����>Td�@<& CBBK�PX@+	[[CSCSD@.h	[[SCSDY@VU^\UdVdQOGD7642*(
+#".54>32.5467#".54>32!4&'.#"32>2>54&#"�(/(#*#@t�dO�_4K��b"D#")[69bG(1]�W3Z#
�l 1X)c�a1'Hf>N�[2�@eF$n]@dE$l�7ZKA>@$3016@'?uZ6 =X8HoL(4 #H3$GgDE�h? 

L��1F%?T.+C-*FZ
6Wo8hi3Tm9jnf��,@)BCSC
D%%+33>32#654&#"f�^\(akp9po
^KMS6pi^$A��KuQ*��2]��|.)fj7g�Z��x��&@#SCC
D
+##".54>32Ny]y���W !�m����(4@1	BSCCSD%#!%%+#"&'7>323267#".54>32J�(?W5)JR
���4XA%
XQbW !c��0@-B\CC
D%(%!+3267>;#"&'.+#rm%�R�9	lP	��$=]����	{�_

�


�
�
�u��@C
D+33u�]���Q^��5Z@
BK�)PX@SC
D@CSC
DY@55%&($!	+332>32>32#>54&#"#654&#"^x+#N�qdU']gl5k^
]K>M1eaW#C]K	:Jr�I?�$�ꛫ~v"'PwO'�}
6_��|7Z]-Z�\��|E6TW�^��!P@
BK�)PX@SC
D@CSC
DY@!!%&!+332>32#654&#"^x+")cnt;op
^KMS8rk^$=�$��O}W-��	2[��|.)ej9i�]��G����%,@)SCSD%%	+%2>54&#"".54>32�W�f7�~:fVE/�wP�]3H��lP�]3I��>[��g��)Jex�F��K8j�`yߪe9i�^yޫf2����-m@!BK�)PX@SCSCD@!CSCSCDY@%#--*&!+32>32#"&'"32>54&2�+# 'amv=AbB" ;Ul�HQ�+;�9sj^$#,�E?mYE/f��F$��Q�_42[�PM���b9HF�?t�d��O@3Xu��A��<��s�.6@3#BSCSCD&$..*) +#"&547#".54>322>?&#"�6O&Yeo<?^? ,Qp��R<h3��9mdX#4;EC~o]D%[��sM}Z11Z�PW��~\4��?t�c�-Pn��L��^��,@)
BSC
D#$!+332>32&#"^x+#D�c)+.(k�=<�$�أ�Y��!����<=@:<BhfSCSD:8'%" #!+#".#"#"&'7>3232>54.54>32�
2J73[C'&?OTO?&3^�Ra�/	
5R>;aE&&>PSP>&2Z|JT|0i"9K*)8)%4K5@x]8C6" ' 'DY2,<+#2H4:kS144l���@+g@
	&BK�!PX@#jhQCSD@!jh\SDY@	%#(&&+74>7#"5?>;!!32>32#"&�D��B
./ ��E=0!3&(r9R]�$9,5)d	��G��)4!A:**3Zr����"P@
BK�%PX@CT
D@C
CTDY@""'!%+32>73#"&5#"&54>7!KMS7pj^$@^x,)cmt:oo
�/(fk8i�\�O|U-��	3Z��S��@BC
D+ +3267>;#SI�
�G�N�	��,*0
�Vx�) @#BC
D(!+: +32>76;2>7>;#"'&5+VC�	V$�
FB�VD���B���))��**
�(����V�@BC
D("(!+3267>;	#"&'+s�P
�	 	T��P
�	��P��rq	�0����QV����@
BCD,"!++32>7>;�C��J
�
�	I����
��	
	<�@QCQ
D+!!7>7!7!6�a/	�^
���
����K&	MKG��F�D7@4"5B[[OSG<:303)+4&#72654&54>;+";20#".54>�D9J\+NoE3:P1	'?.*")"'8#38U:#*#�9I;tw<�<U�_3(3Vn:B�>-TF3
)5 =vw{A)B0

	%BY4D{ut���@QD+3#�KK����D7@45"B[[OSG<:303)+3"+7>;2>54&54>7.54>54.+"&504>732�D9J\+NoE3:P1	'>/*")"'9"37V:#*#9I;tw<�<U�_3(3Vm;B�>-TF3
(6 =vw{A(C0

	%BY4D{utP���9@6jk[OSG
+2>53#".#"#4>32�%=*N <X83kib+&;*M <W84khb70B'7^F('0'0B'7^F('0'�����
)@&hSCD

+>734632#"&�D

)			C 5'#7''5��&-PS\88\SP-���'7#'55���/:K@H%BjhfkSCSD##'#	+.54>?>;#".'>32+V�b4L�ˀ#
#)V�.
	4N8�KlI*J]l:$
#�)LmE�i�r=@o�`�לX��;- ��"' 	1%�
�Q�]7lJ��i�=C@@+
Bh[SCS
D%&%##("	+#!>3!#!7>7#7>;>32#"'.#"!a�%'#/)�5$=/*��$Lz�fPuQ4(	&;XAN�`=	$����,F9/'@
#4I5W%)]�uC%?V0 <.4_�O��$��D#79@6!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"(#�2�-n?>n-�1�%))#�1�-n?>m,�1�$)H+Ib89cJ++Jc98bI+�>m-�2�%*)$�2�-n?>m-�2�$)($�2�-m?8bI++Ib88cJ++Jc���!8@5	B
Z	YC
D! +!+!32>7>;!!!!#!7!7!�[��M	

�N��[��o��/]/��n��h�d##���9v8��8v���@YQD+3#3#�KKKK����X�}b�EYA@>EWM:#BhfWSDCA,*'%!#!+#".#"#"&'763232>54.5467.54>32>54.'K	1I76[B%(BUXUB(^](22]�Ta�0
4P>>bD$Im�mIdq*42Z}LS{0��!8IPR$NC2CJL#`M
#:N*)>3,-3AR7^�&"U;Dy\5B6" % 'CY2=S@:GaGU�)!V>;lR145��&<2+(+&kE(?3*&&+gv�qm%3K�'PX@
SD@OSGY�&(($+#".54>32#".54632

V
0"





"1
k���/Ka�@
BK�PX@4hf[[		SCSDK�PX@4hf[[		SCSD@4hf[[		SCSDYY@
^\*,*(#&(%"
+>32#".54>32#".#"32>4>32#".732>54.#"Y";�t`�s@Cw�c4WJA	!;[DS�a55_�L<V?-�%4^���dc���^44^���cc���^4<g��\��yW/h���g�#;FAv�fd�wB)!5b�WZ�a3,c���^44^���cd���^44^���d��h/Wy��]��ii���>d�0:L@I!Bh[	WSD21651:2:%#00
+"&=#".54>7>454#"#"&/>32'26?4cB2&)[�go'8)

	1i?*>)�=[+��9GD.11!*H7!w/-1A$	4Y�a*5)�KB.)����%�%(+77�

�			� =

�			� z
����	{z
����	�T��=K�	PX@_MQE@kMQEY�+!#!�<.O$���'c*x@MQE+!!n�	�RxNq���1GP��<BK�PX@/h		[
[SCSDK�PX@/h		[
[SCSD@/h		[
[SCSDYY@22PNJH2G2F)!**,&+4>32#".732>54.#"#32#"'.#'32654&+q4^���dd���^44^���cc���^4<g��\��yW/h���g�U����v
O��n�ywkw��c���^44^���cd���^44^���d��h/Wy��]��ii��yusvd�
��_
@a[\Tr�q$@MQE+!!y��	$@�D��'@WSD((($+4>32#".732>54.#"�0Qm>?nQ//Qn?>mQ0E$>U00T=$$=T00U>$n>mQ..Qm>>lQ//Ql>0T>$$>T00T?$$?T<P8<@9jhZMQE
	+!!#!7!!!�2�	�O1L1�S�2����V�jG�l�G��G���V/g@
-BK�!PX@h[SD@!h[OQEY@+)%#
//+2>3!2!767%>54.#"#"/>�(E33C%�(�'
"=,#/9Z$�V,?*-LD?!��;>@$-B=`e�|�V>�@:BK�PX@,hh[[SD@1hh[[OSGY@8631+*)( >>	+2#".'763232>54.#7>54.#"#"/>�(D2UE@A+H^3<N1 	
 9.,E/+D0ae".?T	$1BPV)<&K_K95U>!3C$
('0;-!2RH+B;0I2�T�@kD"++7>3T�7�
�������$7@4#BCS
CD$$&(!&+32673#"50>7#"&'#"&5RcjX�H][z3K�]Xn(.��cmybX�	;3X[JD*R#��y�B4�*@'hiSD+##!#".54>34	�U����Vm\�h8E��n�R�
�
y-SwKV�i;����@OSG($+4>32#".�$&&$P&&%%��TV@
BK�	PX@^jTD@jjTDY@+232654.'73#"&'764#3:(8"8:'JN2E(&D
��
2*�a73!5%��lQN�	BK�PX@jjQD@jjMRFY�$+37#"/733!��C�
�9R����%��h5�;��#)@&WSD##	+2#".54>2>54&#"�7U;+OpE8V;+Oq7T8RR:U8R�$C]9O�[2$B]9O�\2��*MlBYk+NlAYj���%�#(+7'&54767&'&54?'&54767&'&54?�	�	��	�	���
'	'
����
'	'
���`�(.Q@N"Bhh
Z\	C
D.-('&%$#%"#!"
+%3+#7!"5'3+6;37#"/733!>7!�n=���A��&�$(���C��9R�������'��"�Ud#�k%w
��h5t�|�H�9Jb@_D=7Bhh
Z[	CT
D
	JIHGFEB@;:52/-	9
9""
+%+6;2>3!2!7>7%>54.#"#*/>%37#"/733!w&�$(y(E33C%�(�'
"=,#/>X����C��9R���d#�K,?*-LD?!� �;>@$-F9`e %w
��h5�r�Y_y@vU
!.
	
B

h	
	
h

h	[

[\

SC
D_^SPMKEDCB:820*(YY"#!#+%3+#7!"5'3+6;%2#".'763232>54.#7>54.#"#*/>>7!�		n=���A��&�$(��(D2UE@A+H^3<N1 	"6*,E/+D0ae".?V		1BP+���'��"�Ud#)<&K_K95U>!3C$
-%0;-!2RH+E80I2���|��;�(:5@2BhfSCSD('#,$+#".54>?332>324>32#"&;DP\4;gL+1KZP; >6MXK1!8K)=]B'�!""'5�3'%Db>RtS=68%��+?99KeG0L5$*$P""!5����X�&$	@����X�&$H����X�&$
@����X�&$@����X�&$
@����X�&$@����:@7BYYQCS
D#	+!!!!!!+!!��6��W�X���Mwz���
5��P��R��b��z5+�����Lh@e9?
J	Bhf
hSCSC	S			DHF>=750.&$!LL+232654.'7.546$32#".#"32>32#"&'76#3:(8"/r��Fp��ItaQ&)N}`��aBv�bItZA.	#-ds�LJN2E(&D
��
2*r^�܅�3�y,B*(,5,h���|NjJ%+%*-I5L73!5%���?�&(	G���?�&(G���?�&(
G���?�&(
G�����&,	�����&,�����&,
�����&,
E`�!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>M�R�}ɍLl�����$T��?u�g��Hs��Jx�ݡZ��U�މ����r�y†H��>��c����!�&1������q�&2	������q�&2������q�&2
������q�&2������q�&2
���)C�	(+		'	7	)�cF6���Z,���9C�
����3u��3wp4��pO����!-9b@
21&%BK�PX@kCSCSD@jkSCSDY�**%(%$+#"&'+7.546$327>;.#"%4&'32>qm���h�C�")�JNn��m�Ez
4�DH�w:6%:�`�ޣ\"40��9�Z�ޢ[0����x>9��Q卺3�xE?��Q��v�E�<@h��(o�E�67g�������&8	�������&8�������&8
�������&8
������&<&�Y�,@)\[C
D"& +32+#332>54&#����J��u�#c�d-T�^�k:��i��l��H������T<j�V��;���P�@
JBK�PX@-hkSCQCSD@+hk[SCSDY@LKIGFD<:$"PP	+2#"&'763232>54.54>54.#"+'&573>�InJ%4MZM4.EQE.6_�M]~03L::^B$/HRH/5O]O54T=A{cEp*#���W|��-I\.FdL<:A+)3'&7TBL\3C6! % (E]58F0#-B58RC=GZ?D9&Bv�^�z�v	(_��K��<��s�&DCT��<����&Dv-��<��s�&D���<���h&D���<���m&Dj��<��s�&D�22��j�GWd�@?E!BK�)PX@5hh

[S	CSD@?hh

[S	CSCSDY@&YX^]XdYdSQIHCA=;860/'%
	GG+232>32#"&'#".54>?>54&#"#"/>32>32>7">54&Z7]D&>���y5UD3(	0\`g:t�[jo08]C%F��\[BaF.Q�crt9�����=0B'=oY<
�GtY;
��{4b� ;Q0:hN0))��$($
3K1��MjA8W<K}[6U#in(/(NPxkjx�'Eb?.B+-U|P+6c�V'<N-HQH��F�Nh@e;A
L	Bhf
hSCSC	S			DJH@?9720(&#!NN+232654.'7.54>32#".#"32>32#"&'76#3:(8"1OtM&!>Xn�I1OB6	
1N;T�k=AbC5TA1&
2XVV/ JN2E(&D
��
2*u?i�SO��vV1#2! % Z��lEvV0")"
7I,P73!5%��F��F�&HC���F��F�&Hv���F��F�&H����F��Qm&Hj���a`�&�C���x'�&�v���B%�&�����IDm&�j�I���y7I5@20B76
@[SD98A?8I9I,*" +&54?.'&54?7#".54>324654&'267.#"��3vD
Q�C�
�+H4@��~L�^5Ay�i1`TE\U�I��!	+GeDZ�`2*Hc.	y#0	=3�
	o(f~�Y����n9h�[m��U9X=��K��,��3dO1H|�^M{V.��^�j&Q����++��G����&RC����++��G����&Rv����++��G����&R�����++��G���j&R�����++��G���o&Rj����++��3^#+@([YOSG&&&%+!!4>32#"&4>32#"&���U�%$.&$,X%$.%#-�G{&1#%/�Y&1#%/ ��� *5u@
43$#BK�PX@!kCSCSD@!jkSCSDY@,++5,5'%  +"'+7.54>327>;&#"2>54&'��YF
!&+-H��lDq-=2u),I����7GnW�h9W�g9��G
K`�5�[yߪe(&S�5�Xyޫf��W�GY��AZ��kBn*�GB��r����&XC����++��r����&Xv����++��r����&X�����++��r���o&Xj����++��V����&\v����++;����0?@<"BCSCSCD(&00*%+3>32#"&'#"32>54&;�]b'`kt<AbB" ;Ul�HQ�+6$9sk]$#7>C#?mYF/g����N�\32[�PM���b9HG�E@u�d��'6"3Xu��A����V���o&\j����++�����'0L@I-BAhZC
CSD)($"''+2#"&54>7.'!+332>!.'�	
Q+BK*6e���L�bg7.3*$��E�		�!B:">6.��b��y$0<")0
��+,<��s�4F�K�%PX@&;B@&;BYK�%PX@*hSC	SCSD@.hSC
C	SCSDY@65><5F6F1/('$"44
+2#"&54>7.5#".54>32#32>2>7&#",	
Q+BK-8!&[gr=?^? ,Qp��R<h3u3+3*$�09odY#2;EC~o]D%[�!B:#@7/
4P�^41Z�PW��~\4�?$0<")0
6@u�d�-Pn��L���������&&���H��F�&Fv����++���?�'T@Q	B
		hYQCQ
C		SD$"''+2#"&54>7!!!!!!#32>X	
Q+BK*6����WG7��I�p3+3*$�!B:">6.�R��P��R$0<")0
F��F�L]e@bR9@?Bh	h
SCSCSDNMM]N]IG>=750.LL+2#"&54>7"#".54>3232>32732>">54.C	
Q+BK$/S�X.;Wp�OIe?8`�Ќ��5UC3(	/XZ_6)-3+3*$P�cC��O,,G�!B:93-7e�ZK��zZ4)=G)JB;1')��$($
1H0
$0<")0
�Dq�Q%)0361(xN�@C
D+#Ny]y��0��!@BCR
D+%!!7>?3g��~Dh�6H�	
�[c��=
��UMf@
^�S8�@BC
D+46?37#S�L]H��_\Z��
Tv��W2V���V���!�&1���^��&Qv���++���� 46@
BK�PX@*YSCQ
C	S
DK�PX@4YSCQ
CS
C		S
DK�#PX@*YSCQ
C	S
DK�%PX@4YSCQ
CS
C		S
D@2YSCQ
CQ
C		SDYYYY@1/'%  (%+!!!!!#".54>324.#"32>	�ZG2	��H��'+q��Vo�}Ce��W�rQ,]7g�]w̕U8h�\x̔T�R��P��R>N{U-W�އ�6�z5a�Vg��x‰Kk��x‰Ij�6����8N]S@PT6$BhS	C
SDPO:9O]P]FD9N:N42*(" 88+232>32#"&'#".54>32>2>54.#"">54.�=aD#8^�ƃ�y5UD3(	0\`g:y�Ui~GOtK$M��ix�:�8GrW>(:W;Z�h88Z~H{_?��{-0J� 9O0%F@80'��$($
3K1��EnL):aE���Z�uv��I2Vs��?CoO+T�ۈ6fP0q:k�_:EN'6)��'����&6��!����&Vv����++��'����&6
��!����&V�����++�����&<
&��,��&=F��	<�&]v����++��,��&=F��	<�&]�����++��,��&=F��	<�&]�����++��U�%SK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSD@ YSCSDYYYYYYY@%%""	+#763>7'&546737>3#"!��Vw�W%3eWE���//�"5dWE1f	��b�\+/FqS
���1 FqR�Eo�R�
@BkD' +#"/+73R=	{�A�S������r�
@BkD' +32?6;#�A{�?�S������r�q$q��a� @WD+".547332>73e5K.C 3&,?+C#=Y�5H*4%3B&2ZD'2���@SD($+#".54>32�    F!!�s�=K�'PX@WSD@[OSGY�$&($+4>32#".732654&#"�/?##?//?##?/:@32@@23@$<++<$$;,,;$2@@22@@7��\
+@(B@jSD+2#"&54>732>F	
Q+BK1>-3+3*$�!B:%C:/
$0<")0
|�nhQK�PX@WSD@[OSGY@
+2673#".#"#>32�(.9(6 1-+&0:)5 2,*�7/$>.!(!:-$?-!'!����	#@ SD



	#++7>3!+7>3��)�=�-�
�������Y�\�BK�1PX@SCS
D@SC
CSDY@!$##	++#!#"&'7632327#7>3Y�q]q�VVsb0	�V��$�d��;ns	&
��!
�ld@MQE+!!���+dE�Bd@MQE+!!��	�VdE�#���(+&5467�\H):#7;X�B
1v?/*�\��(+'&5467>54&'&547E\H*8
�7;X�A		1v?,
����(+7'&5467>54&'&547�\H*8
�7;X�A		1v?,�#��)�(+&5467&5467�\H):�\H):#7;X�B
1v?/*7;X�B
1v?/*�e�+�(+'&5467>54&'&547%'&5467>54&'&547T\H*8
8\H*8
�7;X�A		1v?,7;X�A		1v?,����+�(+7'&5467>54&'&547%'&5467>54&'&547|\H*8
8\H*8
�7;X�A		1v?,7;X�A		1v?,����"YK�PX@#CSCSCD@OCSCDY@
$!#"+>3>32>72!#"'!�F�K/	GL�F��=O
h=�����&
����f����6��*
BK�PX@6		`

[CSCSC


D@1		`O

[CSC


DY@661.,+)'$##!##+%!7>3>32>72!!#.'#"'"&5467�X��F�K/	GL�F��Z_F�K,
G&OOM$�� ��&
�+�'�
91�|@OSG($+4>32#".9.Pi<=lP..Pl=<iP.T=lQ..Ql=<iP..Pi:����!1@SD&&(&&$+74>32#"&%4>32#"&%4>32#"&:!#7''5�!""'5�!#7''5M""'55'""!5'""'55}����'0DXl��K�PX@/[	[SC
C
		S
D@3[	[CSC
C
		S
DY@}{sqig_]US((%"&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�7Zt>3W?#4XvA3V?$J.>$0XC'-?$0WC(XA��B�7Zt>3W>#4XuA3V?$J.=$0XC(.?$0WB(�6Zt?3W>#4XuA3V?$J.=$0WC'->$0WC'qg�h4&ImGg�i5&JmI<W9)W�]<V8(V�b
���g�h5&JlGg�i5&KmH<W9)W�];V8(V�]g�h5&JlGg�i5&KmH<W9)W�];V8(V������(+7�

�			� z
����	����(+7'&54767&'&54?�	�	���
'	'
�����@C
D""+'+6;�&�$(d#)����J[@X9	Bh		h
[	[SC
S


DJIFEDC?=75$##%'$+3>32#".#"!#!!#!32>32#".5#73>7#L�q��r@jWI %,@W:_��`e��	�4a�Y>cM:)	 )^l|Fn�u<���^�ғN,A*$$@}�u*X0z��C%+%	!.K5Q�ه9/Y*�H�&9@6BhiS	D&&!4)
+>7>;#7+"'#32'###7��

6E<6	�	
�7<F7

��?E?�

n���'��|)�B?
:��:(;�:3@0 BSCS
D::***+!>54.#"!"504>7!7.54>32!�,d�yDCv�]p˛[0Y|L+�3�N�]4l��rÍPK��g�hY��yj�n7I�׎V�hF��
�Rw�\��YF��v}͛h�3W����/AC@@5"Bh[SCSD10;90A1A#)**$+>32#".54>32>54&#"#"'2>7.#"�%BBD&EjH&	k�ԂClM)&Eaw�K1WG4ol-G6%
NK�v_!7V?f�r=t=#5d�^AI����,SvKR��tT/7T:N�V���&F��x4dN0`��`y���i�@	BCR
D+)3!.'i�j�Y�j�������%&���w�$@!QCD+##!##7w	��_���_��	�P�i��i�P���*@'BQCQD+!!!767	&5467	�I��R�
�����R����R$2-
�{��@MQE+!!�<	���GES�"@Bj[
D+%!+!##"&5467!267>;RM��9�
�7�	��)#(�L��';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+".'#".54>32>32%2>7.#"!2>54.#"�3O?3"HPX30T>$3Un<3O?3"GPX31U?$2Up��(IDA -4@(-P=$-<m0Q;"-<$(ICA!,5?'BV..VB'$C`<N�_5'BV..VB'$C`<L�`7N&?T--T@&'Ge=.F0*Id:-F0&@S--T@&�e����'*@'BSCSD!%'U$+>32#"&#"#"&'7>3232>7�EZl;$4

	`�"�Kas@;
 6[J7>W�U+
,
����d�Z)	' GrQ����7d@a!0"/B[[[	O	SG42+)&$77

+2>7#".#"'>322>7#".#"'>3243-%#i83a]\.3,%#h<4a][2-&#h84a]\/3,$$h<5a]Z(8+.$,$6-/$,$��8*/$,$6-0%+%��	pkK�	PX@)^_	ZMQE@'jk	ZMQEY@

+!3!!!!#!7!7!��F��͇�	�F�E���Z��>c
��G�G��G�gP�O@@MQE+!!���&)$�@A�
��v>��	��
x��IuP�Q@@MQE+%!7!7>767.'&5<>7c�	�A��G&)$���PI��>	
����f�"@
BMQE+3	#	>7	.'��B��nB��L		M��		�@����@�S�����~�@ja+3v���0@�T�%k@BK�!PX@"kSCQC
D@ k[SC
DY@!&%$	+!#!+'&5737>32#"&#"8w^n�Fl*"�~�Dl�X%$ 	
,"���<}���v	*U\�e6.��@���$�@

BK�!PX@$kSC
	QC
DK�%PX@"k
	[SC
DK�)PX@&k
	[CSC
D@-hk
	[CSC
DYYY@$$!!%$++'&5737>32;#.#"!3l*"�~�Bj�YE�94�]�/h0EqU7	~���v	*BX�m>
�nL/X~NBFS�����-K�1PX@jD@
jaY@	+#�n;N[��{��	@ja		+2#"&/��I	��	
���6��@OSG$$$"+#"&54632#"&546324/../O.--.�,, -- ,, --�6�p@MQE+!!�	��p:,��	@ja	#++7>3���I����
	���@Bja+ +#"&/.'+73�G��G�W������@Bja+ +326?>;#�G��G�W��������(@%jOSG
+"&547332673�gc>DNXU?
{�XT9AQHcr@8��@OSG($+#".54>32�  ���1�!@[OSG$&($+4>32#".732654&#"�-<"">-->""<-5?32@@23?^";**;"#:**:#2@@22@@���1@.[OSG
+2673#".#"#>32&/4&4 3/-&/7'4 4.-O7+"<, & 9*"<, % ��	+@(OSG



	#++7>3!+7>3�-�Z�3���������@kD	+2+�	$U�
!;XB
-��M�_<�	�ʓ^p�ӡ���	��V �����/�T����P�r�}�M��(�(�����?dc�:����Z���F�q�>�g����f���:�<+���+���a�������v�?��`�p�&�B������n���F������'5�E���T��S��,(D�q(����<�f]H�@F8Bq��f�x��mxc�u^^�G�2�<�^!�l�r�SSVV���VF	(GX�(�P�T��������X��XvMkk�2���dcMqr���<������y�����2��������������������������������?�?�?�?�&�&�&�&��En��������������OE�E�E�E�S�F�;�<�<�<�<�<�<�2]HFFFF�a�x�B�I�I^�G�G�G�G�G��� �r�r�r�r�V�;�V����<�]H?�F�x�02Sn�^��6�'!�'!S��,F	�,F	�,F	�o�r�2�7|�<������n�n��
g�g�g��,�,f�9`: }E�E��)!�l(+W���T�����bE�L�e����+g+u�����@@S{��,���@���g�P`�	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[
	�[
�j
�y
�j
�[
$�[
9>
:A
</
?>
D��
F��
G��
H��
R��
T��
m�y
o�y
y�y
}�y
��[
��[
��[
��[
��[
��[
��[
�/
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�[
��
��
��
��
�/
�y
�y
�j
�j
�y
�j
�y
�y
��[#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������
	�[
�j
�y
�j
�[
$�[
9>
:A
</
?>
D��
F��
G��
H��
R��
T��
m�y
o�y
y�y
}�y
��[
��[
��[
��[
��[
��[
��[
�/
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�[
��
��
��
��
�/
�y
�y
�j
�j
�y
�j
�y
�y
��[�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j����=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I>	��
>
>�G���G������"F#��$��&��*��-�o2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l>m��o��p��r>tPuPw��y��{P|>}�������������������������������������������������������������������������������������������������������������������������������������������������������>�>�G�>�>�G��G�����#��#	��#
��#��#
��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#���$�V$
�V$
�V$��$#��$&��$*��$-2$2��$4��$7��$8��$9��$:��$<�y$?��$W��$Y��$Z��$\��$k��$l�V$m��$o��$p��$r�V$t�`$u�`$y��${�`$|�V$}��$���$���$���$���$���$���$���$���$���$���$���$��y$���$���$��$��$�y$��$��$�V$�V$�V$�V$��$��$��&�o&m�o&o�o&y�o&}�o&�o&�o&�o&�o&�o'��'	��'
��'��'
��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'���)	��)�L)�L)��)��)��)")$��)-�.)D��)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)��)��)��)��)��)��)�L)�L)�L)���-	��-��-$��-���-���-���-���-���-���-���-��-���..
.
.��.#��.&��.*��.2��.4��.I��.W��.Y��.Z��.\��.k��.l.m��.o��.p��.r.y��.|.}��.���.���.���.���.���.���.���.���.���.��.��.�.�.�.�.�.�.�.�.�/��/
��/
��/�$/#��/&��/*��/2��/4��/7�8/9�V/:�y/<�=/?�V/Y�z/Z��/\�z/k��/l��/m�$/o�$/p��/r��/t�=/u�=/y�$/{�=/|��/}�$/���/���/���/���/���/���/���/��=/��z/��z/��/��/�=/�$/�$/��/��/��/��/�$/�$/�$2��2	��2
��2��2
��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2���3	��3�=3�=3��3$��3-�V3D��3F��3G��3H��3R��3T��3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3��3��3��3��3��3�=3�=3�=3���4��4	��4
��4��4
��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4���5#��5&��5*��52��54��57��58��5k��5p��5���5���5���5���5���5���5���5���5���5���5���5��5��7	��7�L7�L7�L7��7�]7�]7"-7#��7$��7&��7*��7-�872��74��7D�)7F�)7G�)7H�)7J�A7P�]7Q�]7R�)7S�]7T�)7U�]7V�F7X�]7Y�Q7Z�y7[�b7\�L7]�e7k��7m�L7o�L7p��7w�]7y�L7}�L7���7���7���7���7���7���7���7���7���7���7���7���7���7���7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��]7��)7��)7��)7��)7��)7��)7��]7��]7��]7��]7��Q7��Q7��7�)7��7�)7�)7�]7��7�)7�F7�F7�e7�e7�e7�L7�L7�L7�L7�L7�L7�L7�L7���8	��8��8$��8���8���8���8���8���8���8���8��8���9>9	��9
>9
>9�G9��9�G9��9��9��9"F9#��9$��9&��9*��9-�o92��94��9D��9F��9G��9H��9P��9Q��9R��9S��9T��9U��9V��9X��9Y��9Z��9\��9]��9k��9l>9m��9o��9p��9r>9tP9uP9w��9y��9{P9|>9}��9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9��9��9��9��9��9��9��9��9��9��9��9��9��9�9�9�>9�>9�G9�>9�>9�G9�9�G9�9�9���:F:	��:
F:
F:��:��:��:��:��:$��:-��:D��:F��:G��:H��:J��:P��:Q��:R��:S��:T��:U��:V��:X��:lF:rF:t<:u<:w��:{<:|F:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:��:�F:�F:�:�F:�F:�:�:���;;
;
;��;#��;&��;*��;2��;4��;I��;W��;Y��;Z��;\��;k��;l;m��;o��;p��;r;y��;|;}��;���;���;���;���;���;���;���;���;���;��;��;�;�;�;�;�;�;�;�;�<4<	�~<
4<
4<�[<�V<�[<�~<��<��<"2<#��<$�~<&��<*��<-�8<2��<4��<D�G<F�G<G�G<H�G<J�_<P��<Q��<R�G<S��<T�G<U��<V�G<X��<]��<k��<l4<m�V<o�V<p��<r4<t2<u2<w��<y�V<{2<|4<}�V<��~<��~<��~<��~<��~<��~<��~<���<���<���<���<���<���<���<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<���<��G<��G<��G<��G<��G<��G<���<���<���<���<�~<�G<��<�G<�G<��<��<�G<�G<�G<��<��<��<�V<�V<�4<�4<�[<�4<�4<�[<�V<�[<�V<�V<��~=��=" =#��=&��=*��=2��=4��=k��=m��=o��=p��=y��=}��=���=���=���=���=���=���=���=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>D��>F��>G��>H��>R��>T��>k��>p��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��>��?�V?
�V?
�V?��?#��?&��?*��?-2?2��?4��?7��?8��?9��?:��?<�y??��?W��?Y��?Z��?\��?k��?l�V?m��?o��?p��?r�V?t�`?u�`?y��?{�`?|�V?}��?���?���?���?���?���?���?���?���?���?���?���?��y?���?���?��?��?�y?��?��?�V?�V?�V?�V?��?��?��E��E
��E��E
��E@��E[��E`��El��Er��E|��E�E�E�E�H��H
��H��H
��H@��H[��H`��Hl��Hr��H|��H�H�H�H�IKI
KI
KI�yI�yIlKIrKItdIudI{dI|KI�KI�KI�yI�KI�KI�yI�yK��K
��K
��KY��K\��Kl��Kr��Kt��Ku��K{��K|��K���K���K��K��K��K��ND��NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��N��P��P
��P
��PY��P\��Pl��Pr��Pt��Pu��P{��P|��P���P���P��P��P��P��Q��Q
��Q
��QY��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q���Q���Q��Q��Q��Q��R��R
��R��R
��R@��R[��R`��Rl��Rr��R|��R�R�R�R�S��S
��S��S
��S@��S[��S`��Sl��Sr��S|��S�S�S�S�U�yU�yUD��UF��UG��UH��UR��UT��U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U��U��U��U��U�yU�yU�yY	��Y�~Y�~Y��Y$��YD��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y��Y�~Y�~Y�~Y���Z	��Z��Z��Z��Z$��Z���Z���Z���Z���Z���Z���Z���Z��Z��Z��Z��Z���[D��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��[��\	��\�y\�y\��\$��\D��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\��\�y\�y\�y\���^#��^&��^*��^2��^4��^D��^F��^G��^H��^R��^T��^k��^p��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��^��k��k	��k
��k��k
��k��k$��k7��k9��k;��k<��k=��k?��k@��k`��kl��kr��k|��k���k���k���k���k���k���k���k���k��k��k��k��k��k��k��k��k��k���l	�[l�jl�yl�jl�[l$�[l9>l:Al</l?>lD��lF��lG��lH��lR��lT��lm�ylo�yly�yl}�yl��[l��[l��[l��[l��[l��[l��[l�/l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�[l��l��l��l��l�/l�yl�yl�jl�jl�yl�jl�yl�yl��[m�ym	��m
�ym
�ym�jm�jm��m$��m7�Gm9��m;��m<�Qm=��m?��ml�ymr�ym|�ym���m���m���m���m���m���m���m��Qm��m�Qm��m��m��m�ym�ym�jm�ym�ym�jm�jm���o�yo	��o
�yo
�yo�jo�jo��o$��o7�Go9��o;��o<�Qo=��o?��ol�yor�yo|�yo���o���o���o���o���o���o���o��Qo��o�Qo��o��o��o�yo�yo�jo�yo�yo�jo�jo���p��p	��p
��p��p
��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p���r	�[r�jr�yr�jr�[r$�[r9>r:Ar</r?>rD��rF��rG��rH��rR��rT��rm�yro�yry�yr}�yr��[r��[r��[r��[r��[r��[r��[r�/r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�[r��r��r��r��r�/r�yr�yr�jr�jr�yr�jr�yr�yr��[t	�et�et$�et9Ft:Ft<(t?Ft��et��et��et��et��et��et��et�(t�et�(t��eu	�eu�eu$�eu9Fu:Fu<(u?Fu��eu��eu��eu��eu��eu��eu��eu�(u�eu�(u��ey�yy	��y
�yy
�yy�jy�jy��y$��y7�Gy9��y;��y<�Qy=��y?��yl�yyr�yy|�yy���y���y���y���y���y���y���y��Qy��y�Qy��y��y��y�yy�yy�jy�yy�yy�jy�jy���{	�e{�e{$�e{9F{:F{<({?F{��e{��e{��e{��e{��e{��e{��e{�({�e{�({��e|	�[|�j|�y|�j|�[|$�[|9>|:A|</|?>|D��|F��|G��|H��|R��|T��|m�y|o�y|y�y|}�y|��[|��[|��[|��[|��[|��[|��[|�/|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�[|��|��|��|��|�/|�y|�y|�j|�j|�y|�j|�y|�y|��[}�y}	��}
�y}
�y}�j}�j}��}$��}7�G}9��};��}<�Q}=��}?��}l�y}r�y}|�y}���}���}���}���}���}���}���}��Q}��}�Q}��}��}��}�y}�y}�j}�y}�y}�j}�j}�����V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������o�m�o�o�o�y�o�}�o��o��o��o��o��o����	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|������������������������������������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������4�	�~�
4�
4��[��V��[��~�������"2�#���$�~�&���*���-�8�2���4���D�G�F�G�G�G�H�G�J�_�P���Q���R�G�S���T�G�U���V�G�X���]���k���l4�m�V�o�V�p���r4�t2�u2�w���y�V�{2�|4�}�V���~���~���~���~���~���~���~�������������������������������G���G���G���G���G���G���G���G���G���G���G���G���G�������G���G���G���G���G���G������������������~��G�����G��G��������G��G��G�����������V��V��4��4��[��4��4��[��V��[��V��V���~����	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|�����������	����~��~����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������~��~��~��������
������
���@���[���`���l���r���|�����������	����~��~����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������~��~��~������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������o�m�o�o�o�y�o�}�o��o��o��o��o��o����
������
���@���[���`���l���r���|������������o�
�o�
�o��t�9�j�:���<�y�?�j�Y���Z���\���l�o�m�t�o�t�r�o�t���u���y�t�{���|�o�}�t���y����������y��t��t��o��o��o��o��t��t��t����
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|�����������4�	�~�
4�
4��[��V��[��~�������"2�#���$�~�&���*���-�8�2���4���D�G�F�G�G�G�H�G�J�_�P���Q���R�G�S���T�G�U���V�G�X���]���k���l4�m�V�o�V�p���r4�t2�u2�w���y�V�{2�|4�}�V���~���~���~���~���~���~���~�������������������������������G���G���G���G���G���G���G���G���G���G���G���G���G�������G���G���G���G���G���G������������������~��G�����G��G��������G��G��G�����������V��V��4��4��[��4��4��[��V��[��V��V���~����" �#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������" �#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������" �#���&���*���2���4���k���m���o���p���y���}������������������������������������������������y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j������y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j�����	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[�	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[��=�
�=�
�=��I�#���&���*���2���4���7�A�9�=�:�m�<�d�?�=�Y�~�Z���\���k���l�=�m�I�o�I�p���r�=�y�I�|�=�}�I�������������������������������d���~���~��������d��I��I��=��=��=��=��I��I��I�	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[�	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[��=�
�=�
�=��I�#���&���*���2���4���7�A�9�=�:�m�<�d�?�=�Y�~�Z���\���k���l�=�m�I�o�I�p���r�=�y�I�|�=�}�I�������������������������������d���~���~��������d��I��I��=��=��=��=��I��I��I��y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j������=�
�=�
�=��I�#���&���*���2���4���7�A�9�=�:�m�<�d�?�=�Y�~�Z���\���k���l�=�m�I�o�I�p���r�=�y�I�|�=�}�I�������������������������������d���~���~��������d��I��I��=��=��=��=��I��I��I��y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j������y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j�����	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[��V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V��������������.��B�>t�Tn��<�4t�@x		n	�
 
L
r
��l�

B
l
�"^��N��R�@��P���:j����r�N"j�Pj�@�
j���j����dd�$�  n �!*!|"f"�#&#V#p$@$Z$�$�%`&& &v&�&�'6'|'�((�)$)�*X*d*p*|*�*�*�*�+�+�+�+�+�+�+�+�+�,>,J,V,b,n,z,�,�-<-H-T-`-l-x-�.j.v.�.�.�.�.�/�0<0H0T0`0l0x0�0�0�1 121D1V1h1z1�1�2j2|2�2�2�2�3,3>3�4r4~4�4�5�5�5�6.6:6L7:7�7�888 8,888J8V8h8t8�9l9�9�9�9�:&:t:�;
;>;�;�;�;�<"<J<�<�==�>(>T>�?�?�?�@@�@�AjA�BBBB�B�B�CjC�DBD�D�EE`EzE�F�F�F�GG(GJGxG�G�HHDH�H�H��d"/n�	� ��
��/��(�0B	B
�Q-2E
�w9	S	g	{	^�	 �	P	 �	`U	�		�	
��	0
�	d
�	
�	4�	�	�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightItalictyPolandLukaszDziedzic: Lato Light Italic: 2013Lato Light ItalicVersion 1.105; Western+Polish opensourceLato-LightItalicLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightItalictyPolandLukaszDziedzic: Lato Light Italic: 2013Lato-LightItalicVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLLatoLight Italic���XA	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt��_K_K�������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK)J[�����Wshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtmlnu�[���<div id="classindex-section" class="nav-section">
  <h3>Class and Module Index</h3>

  <%-
  all_classes = @classes.group_by do |klass|
    klass.full_name[/\A[^:]++(?:::[^:]++(?=::))*+(?=::[^:]*+\z)/]
  end.delete_if do |_, klasses|
    !klasses.any?(&:display?)
  end
  link = proc do |index_klass, display = index_klass.display?|
    if display
      -%><code><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.name %></a></code><%-
    else
      -%><code><%= index_klass.name %></code><%-
    end
  end
  if top = all_classes[nil]
    solo = top.one? {|klass| klass.display?}
    traverse = proc do |klasses| -%>
  <ul class="link-list">
      <%- klasses.uniq!(&:full_name) -%>
      <%- klasses.each do |index_klass| -%>
        <%- if children = all_classes[index_klass.full_name] -%>
  <li><details<% if solo; solo = false %> open<% end %>><summary><% link.call(index_klass) %></summary>
          <%- traverse.call(children) -%>
  </ul></details>
        <%- elsif index_klass.display? -%>
  <li><% link.call(index_klass, true) %>
        <%- end -%>
      <%- end -%>
    <%- end -%>
    <%- traverse.call(top) -%>
  <%- end -%>
</div>
PK)J[g:��Xshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtmlnu�[���<%- if !svninfo.empty? then %>
<div id="file-svninfo-section" class="nav-section">
  <h3>VCS Info</h3>

  <div class="section-body">
    <dl class="svninfo">
      <dt>Rev
      <dd><%= svninfo[:rev] %>

      <dt>Last Checked In
      <dd><%= svninfo[:commitdate].strftime('%Y-%m-%d %H:%M:%S') %>
        (<%= svninfo[:commitdelta] %> ago)

      <dt>Checked in by
      <dd><%= svninfo[:committer] %>
    </dl>
  </div>
</div>
<%- end -%>
PK)J[�TS��Kshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/page.rhtmlnu�[���<body id="top" role="document" class="file">
<%= render '_sidebar_toggle.rhtml' %>

<nav id="navigation" role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>
    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_sidebar_table_of_contents.rhtml' %>
  <%= render '_sidebar_pages.rhtml' %>

  <%= render '_footer.rhtml' %>
</nav>

<main role="main" aria-label="Page <%=h file.full_name%>">
<%= file.description %>
</main>
PK)J[�F�^^Sshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/servlet_root.rhtmlnu�[���<body role="document">
<%= render '_sidebar_toggle.rhtml' %>

<nav id="navigation" role="navigation">
  <div id="project-navigation">
    <div id="home-section" class="nav-section">
      <h2>
        <a href="<%= rel_prefix %>/" rel="home">Home</a>
      </h2>
    </div>

    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_sidebar_installed.rhtml' %>
  <%= render '_footer.rhtml' %>
</nav>

<main role="main">
  <h1>Local RDoc Documentation</h1>

  <p>Here you can browse local documentation from the ruby standard library and
  your installed gems.

<%- extra_dirs = installed.select { |_, _, _, type,| type == :extra } -%>
<%- unless extra_dirs.empty? -%>
  <h2>Extra Documentation Directories</h2>

  <p>The following additional documentation directories are available:</p>

  <ol>
  <%- extra_dirs.each do |name, href, exists, _, path| -%>
    <li>
    <%- if exists -%>
      <a href="<%= href %>"><%= h name %></a> (<%= h path %>)
    <%- else -%>
      <%= h name %> (<%= h path %>; <i>not available</i>)
    <%- end -%>
    </li>
  <%- end -%>
  </ol>
<%- end -%>

<%- gems = installed.select { |_, _, _, type,| type == :gem } -%>
<%- missing = gems.reject { |_, _, exists,| exists } -%>
<%- unless missing.empty? then -%>
  <h2>Missing Gem Documentation</h2>

  <p>You are missing documentation for some of your installed gems.
  You can install missing documentation for gems by running
  <kbd>gem rdoc --all</kbd>.  After installing the missing documentation you
  only need to reload this page.  The newly created documentation will
  automatically appear.

  <p>You can also install documentation for a specific gem by running one of
  the following commands.

  <ul>
  <%- names = missing.map { |name,| name.sub(/-([^-]*)$/, '') }.uniq -%>
  <%- names.each do |name| -%>
    <li><kbd>gem rdoc <%=h name %></kbd>
  <%- end -%>
  </ul>
<%- end -%>
</main>
PK)J[	O2]]Yshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtmlnu�[���<div id="home-section" class="nav-section">
  <h3>Documentation</h3>

  <ul>
  <%- installed.each do |name, href, exists, type, _| -%>
    <%- next if type == :extra -%>
    <li class="folder">
    <%- if exists then -%>
      <a href="<%= href %>"><%= h name %></a>
    <%- else -%>
      <%= h name %>
    <%- end -%>
  <%- end -%>
  </ul>
</div>
PK)J[�W��I
I
Oshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/js/darkfish.jsnu�[���/**
 *
 * Darkfish Page Functions
 * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $
 *
 * Author: Michael Granger <mgranger@laika.com>
 *
 */

/* Provide console simulation for firebug-less environments */
/*
if (!("console" in window) || !("firebug" in console)) {
  var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

  window.console = {};
  for (var i = 0; i < names.length; ++i)
    window.console[names[i]] = function() {};
};
*/


function showSource( e ) {
  var target = e.target;
  while (!target.classList.contains('method-detail')) {
    target = target.parentNode;
  }
  if (typeof target !== "undefined" && target !== null) {
    target = target.querySelector('.method-source-code');
  }
  if (typeof target !== "undefined" && target !== null) {
    target.classList.toggle('active-menu')
  }
};

function hookSourceViews() {
  document.querySelectorAll('.method-source-toggle').forEach(function (codeObject) {
    codeObject.addEventListener('click', showSource);
  });
};

function hookSearch() {
  var input  = document.querySelector('#search-field');
  var result = document.querySelector('#search-results');
  result.classList.remove("initially-hidden");

  var search_section = document.querySelector('#search-section');
  search_section.classList.remove("initially-hidden");

  var search = new Search(search_data, input, result);

  search.renderItem = function(result) {
    var li = document.createElement('li');
    var html = '';

    // TODO add relative path to <script> per-page
    html += '<p class="search-match"><a href="' + index_rel_prefix + this.escapeHTML(result.path) + '">' + this.hlt(result.title);
    if (result.params)
      html += '<span class="params">' + result.params + '</span>';
    html += '</a>';


    if (result.namespace)
      html += '<p class="search-namespace">' + this.hlt(result.namespace);

    if (result.snippet)
      html += '<div class="search-snippet">' + result.snippet + '</div>';

    li.innerHTML = html;

    return li;
  }

  search.select = function(result) {
    window.location.href = result.firstChild.firstChild.href;
  }

  search.scrollIntoView = search.scrollInWindow;
};

function hookFocus() {
  document.addEventListener("keydown", (event) => {
    if (document.activeElement.tagName === 'INPUT') {
      return;
    }
    if (event.key === "/") {
      event.preventDefault();
      document.querySelector('#search-field').focus();
    }
  });
}

function hookSidebar() {
  var navigation = document.querySelector('#navigation');
  var navigationToggle = document.querySelector('#navigation-toggle');

  navigationToggle.addEventListener('click', function() {
    navigation.hidden = !navigation.hidden;
    navigationToggle.ariaExpanded = navigationToggle.ariaExpanded !== 'true';
  });

  var isSmallViewport = window.matchMedia("(max-width: 1023px)").matches;
  if (isSmallViewport) {
    navigation.hidden = true;
    navigationToggle.ariaExpanded = false;
    document.addEventListener('click', (e) => {
      if (e.target.closest('#navigation a')) {
        navigation.hidden = true;
        navigationToggle.ariaExpanded = false;
      }
    });
  }
}

document.addEventListener('DOMContentLoaded', function() {
  hookSourceViews();
  hookSearch();
  hookFocus();
  hookSidebar();
});
PK)J[ ��vMshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/js/search.jsnu�[���Search = function(data, input, result) {
  this.data = data;
  this.input = input;
  this.result = result;

  this.current = null;
  this.view = this.result.parentNode;
  this.searcher = new Searcher(data.index);
  this.init();
}

Search.prototype = Object.assign({}, Navigation, new function() {
  var suid = 1;

  this.init = function() {
    var _this = this;
    var observer = function(e) {
      switch(e.key) {
        case 'ArrowUp':
        case 'ArrowDown':
          return;
      }
      _this.search(_this.input.value);
    };
    this.input.addEventListener('keyup', observer);
    this.input.addEventListener('click', observer); // mac's clear field

    this.searcher.ready(function(results, isLast) {
      _this.addResults(results, isLast);
    })

    this.initNavigation();
    this.setNavigationActive(false);
  }

  this.search = function(value, selectFirstMatch) {
    value = value.trim().toLowerCase();
    if (value) {
      this.setNavigationActive(true);
    } else {
      this.setNavigationActive(false);
    }

    if (value == '') {
      this.lastQuery = value;
      this.result.innerHTML = '';
      this.result.setAttribute('aria-expanded', 'false');
      this.setNavigationActive(false);
    } else if (value != this.lastQuery) {
      this.lastQuery = value;
      this.result.setAttribute('aria-busy',     'true');
      this.result.setAttribute('aria-expanded', 'true');
      this.firstRun = true;
      this.searcher.find(value);
    }
  }

  this.addResults = function(results, isLast) {
    var target = this.result;
    if (this.firstRun && (results.length > 0 || isLast)) {
      this.current = null;
      this.result.innerHTML = '';
    }

    for (var i=0, l = results.length; i < l; i++) {
      var item = this.renderItem.call(this, results[i]);
      item.setAttribute('id', 'search-result-' + target.childElementCount);
      target.appendChild(item);
    };

    if (this.firstRun && results.length > 0) {
      this.firstRun = false;
      this.current = target.firstChild;
      this.current.classList.add('search-selected');
    }
    //TODO: ECMAScript
    //if (jQuery.browser.msie) this.$element[0].className += '';

    if (isLast) this.result.setAttribute('aria-busy', 'false');
  }

  this.move = function(isDown) {
    if (!this.current) return;
    var next = isDown ? this.current.nextElementSibling : this.current.previousElementSibling;
    if (next) {
      this.current.classList.remove('search-selected');
      next.classList.add('search-selected');
      this.input.setAttribute('aria-activedescendant', next.getAttribute('id'));
      this.scrollIntoView(next, this.view);
      this.current = next;
      this.input.value = next.firstChild.firstChild.text;
      this.input.select();
    }
    return true;
  }

  this.hlt = function(html) {
    return this.escapeHTML(html).
      replace(/\u0001/g, '<em>').
      replace(/\u0002/g, '</em>');
  }

  this.escapeHTML = function(html) {
    return html.replace(/[&<>"`']/g, function(c) {
      return '&#' + c.charCodeAt(0) + ';';
    });
  }

});

PK)J[�h����Vshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtmlnu�[���<div id="navigation-toggle" role="button" tabindex="0" aria-label="Toggle sidebar" aria-expanded="true" aria-controls="navigation">
  <span aria-hidden="true">&#9776;</span>
</div>
PK)J[�:v��Vshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtmlnu�[���<%- if klass.type == 'class' && (ancestors = klass.super_classes).any? -%>
<div id="parent-class-section" class="nav-section">
  <h3>Ancestors</h3>
  <%= generate_ancestor_list(ancestors, klass) %>
</div>
<%- end -%>
PK)J[2+�D��ashare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtmlnu�[���<%- comment = if current.respond_to? :comment_location then
               current.comment_location
             else
               current.comment
             end
   table = current.parse(comment).table_of_contents.dup

   if table.length > 1 then %>
<div class="nav-section">
  <h3>Table of Contents</h3>

    <%- display_link = proc do |heading| -%>
      <a href="#<%= heading.label current %>"><%= heading.plain_html %></a>
    <%- end -%>

    <%- list_siblings = proc do -%>
      <%- level = table.first&.level -%>
      <%- while table.first && table.first.level >= level -%>
        <%- heading = table.shift -%>
        <%- if table.first.nil? || table.first.level <= heading.level -%>
          <li><% display_link.call heading -%>
        <%- else -%>
          <li>
            <details open>
              <summary><%- display_link.call heading -%></summary>
              <ul class="link-list" role="directory">
                <% list_siblings.call %>
              </ul>
            </details>
          </li>
        <%- end -%>
      <%- end -%>
    <%- end -%>

  <ul class="link-list" role="directory">
    <% list_siblings.call %>
  </ul>
</div>
<%- end -%>
PK)J[Af�3DDXshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/table_of_contents.rhtmlnu�[���<body id="top" class="table-of-contents">
<%= render '_sidebar_toggle.rhtml' %>

<nav id="navigation" role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>

    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_footer.rhtml' %>
</nav>
<main role="main">
<h1 class="class"><%= h @title %></h1>

<%- simple_files = @files.select { |f| f.text? } -%>
<%- unless simple_files.empty? then -%>
<h2 id="pages">Pages</h2>
<ul>
<%- simple_files.sort.each do |file| -%>
  <li class="file">
    <a href="<%= h file.path %>"><%= h file.page_name %></a>
<%
   # HACK table_of_contents should not exist on Document
   table = file.parse(file.comment).table_of_contents
   unless table.empty? then %>
    <ul>
<%- table.each do |heading| -%>
      <li><a href="<%= h file.path %>#<%= heading.aref %>"><%= heading.plain_html %></a>
<%-   end -%>
    </ul>
<%- end -%>
  </li>
  <%- end -%>
</ul>
<%- end -%>

<h2 id="classes">Classes and Modules</h2>
<ul>
<%- @modsort.each do |klass| -%>
  <li class="<%= klass.type %>">
    <a href="<%= klass.path %>"><%= klass.full_name %></a>
<%- table = []
   table.concat klass.parse(klass.comment_location).table_of_contents
   table.concat klass.section_contents

   unless table.empty? then %>
    <ul>
<%- table.each do |item| -%>
<%-   label = item.respond_to?(:label) ? item.label(klass) : item.aref -%>
      <li><a href="<%= klass.path %>#<%= label %>"><%= item.plain_html %></a>
<%- end -%>
    </ul>
<%- end -%>
  </li>
<%- end -%>
</ul>

<h2 id="methods">Methods</h2>
<ul>
<%- @store.all_classes_and_modules.flat_map do |mod|
     mod.method_list
   end.sort.each do |method| %>
  <li class="method">
    <a href="<%= method.path %>"><%= h method.pretty_name %></a>
    &mdash;
    <span class="container"><%= method.parent.full_name %></span>
<%- end -%>
</ul>
</main>
PK)J[e��Ushare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtmlnu�[���<%- simple_files = @files.select { |f| f.text? } %>
<%- if defined?(current) -%>
  <%- dir = current.full_name[%r{\A[^/]+(?=/)}] || current.page_name -%>
<%- end -%>
<%- unless simple_files.empty? then -%>
<div id="fileindex-section" class="nav-section">
  <h3>Pages</h3>

  <ul class="link-list">
  <%- simple_files.group_by do |f| -%>
    <%- f.full_name[%r{\A[^/]+(?=/)}] || f.page_name -%>
  <%- end.each do |n, files| -%>
    <%- f = files.shift -%>
    <%- if files.empty? -%>
    <li><a href="<%= rel_prefix %>/<%= h f.path %>"><%= h f.page_name %></a>
      <%- next -%>
    <%- end -%>
    <li><details<% if dir == n %> open<% end %>><summary><%
    if n == f.page_name
      %><a href="<%= rel_prefix %>/<%= h f.path %>"><%= h n %></a><%
    else
      %><%= h n %><% files.unshift(f)
    end %></summary>
    <ul class="link-list">
    <%- files.each do |f| -%>
      <li><a href="<%= rel_prefix %>/<%= h f.path %>"><%= h f.page_name %></a>
    <%- end -%>
    </ul></details>
  <%- end -%>
  </ul>
</div>
<%- end -%>
PK)J[��Jt��Wshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtmlnu�[���<% if (class_methods = klass.class_method_list.sort).any? %>
  <div class="nav-section">
    <h3>Class Methods</h3>
    <ul class="link-list" role="directory">
      <%- class_methods.each do |meth| -%>
      <li <%- if meth.calls_super %>class="calls-super" <%- end %>><a href="#<%= meth.aref %>"><%= h meth.name -%></a></li>
      <%- end -%>
    </ul>
  </div>
<% end %>

<% if (instance_methods = klass.instance_methods.sort).any? %>
  <div class="nav-section">
    <h3>Instance Methods</h3>
    <ul class="link-list" role="directory">
      <%- instance_methods.each do |meth| -%>
      <li <%- if meth.calls_super %>class="calls-super" <%- end %>><a href="#<%= meth.aref %>"><%= h meth.name -%></a></li>
      <%- end -%>
    </ul>
  </div>
<% end %>
PK)J[�>y��Vshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtmlnu�[���<div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search (/) for a class, method, ..." spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>
PK)J[��QCCXshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtmlnu�[���<%- unless klass.sections.length == 1 then %>
<div id="sections-section" class="nav-section">
  <h3>Sections</h3>

  <ul class="link-list" role="directory">
    <%- klass.sort_sections.each do |section| -%>
      <li><a href="#<%= section.aref %>"><%= h section.title %></a></li>
    <%- end -%>
  </ul>
</div>
<%- end -%>
PK)J[5����Xshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtmlnu�[���<%- unless klass.includes.empty? then %>
<div id="includes-section" class="nav-section">
  <h3>Included Modules</h3>

  <ul class="link-list">
  <%- klass.each_include do |inc| -%>
  <%- unless String === inc.module then -%>
    <li><a class="include" href="<%= klass.aref_to inc.module.path %>"><%= inc.module.full_name %></a>
  <%- else -%>
    <li><span class="include"><%= inc.name %></span>
  <%- end -%>
  <%- end -%>
  </ul>
</div>
<%- end -%>
PK)J[2�llLshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/index.rhtmlnu�[���<body id="top" role="document" class="file">
<%= render '_sidebar_toggle.rhtml' %>

<nav id="navigation" role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>
    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_sidebar_pages.rhtml' %>
  <%= render '_sidebar_classes.rhtml' %>

  <%= render '_footer.rhtml' %>
</nav>

<main role="main">
<%- if @options.main_page and
      main_page = @files.find { |f| f.full_name == @options.main_page } then %>
<%= main_page.description %>
<%- else -%>
<p>This is the API documentation for <%= h @title %>.
<%- end -%>
</main>
PK)J[P�^���Qshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/json_index/js/searcher.jsnu�[���Searcher = function(data) {
  this.data = data;
  this.handlers = [];
}

Searcher.prototype = new function() {
  // search is performed in chunks of 1000 for non-blocking user input
  var CHUNK_SIZE = 1000;
  // do not try to find more than 100 results
  var MAX_RESULTS = 100;
  var huid = 1;
  var suid = 1;
  var runs = 0;

  this.find = function(query) {
    var queries = splitQuery(query);
    var regexps = buildRegexps(queries);
    var highlighters = buildHilighters(queries);
    var state = { from: 0, pass: 0, limit: MAX_RESULTS, n: suid++};
    var _this = this;

    this.currentSuid = state.n;

    if (!query) return;

    var run = function() {
      // stop current search thread if new search started
      if (state.n != _this.currentSuid) return;

      var results =
        performSearch(_this.data, regexps, queries, highlighters, state);
      var hasMore = (state.limit > 0 && state.pass < 4);

      triggerResults.call(_this, results, !hasMore);
      if (hasMore) {
        setTimeout(run, 2);
      }
      runs++;
    };
    runs = 0;

    // start search thread
    run();
  }

  /*  ----- Events ------  */
  this.ready = function(fn) {
    fn.huid = huid;
    this.handlers.push(fn);
  }

  /*  ----- Utilities ------  */
  function splitQuery(query) {
    return query.split(/(\s+|::?|\(\)?)/).filter(function(string) {
      return string.match(/\S/);
    });
  }

  function buildRegexps(queries) {
    return queries.map(function(query) {
      return new RegExp(query.replace(/(.)/g, '([$1])([^$1]*?)'), 'i');
    });
  }

  function buildHilighters(queries) {
    return queries.map(function(query) {
      return query.split('').map(function(l, i) {
        return '\u0001$' + (i*2+1) + '\u0002$' + (i*2+2);
      }).join('');
    });
  }

  // function longMatchRegexp(index, longIndex, regexps) {
  //     for (var i = regexps.length - 1; i >= 0; i--){
  //         if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) return false;
  //     };
  //     return true;
  // }


  /*  ----- Mathchers ------  */

  /*
   * This record matches if the index starts with queries[0] and the record
   * matches all of the regexps
   */
  function matchPassBeginning(index, longIndex, queries, regexps) {
    if (index.indexOf(queries[0]) != 0) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }

  /*
   * This record matches if the longIndex starts with queries[0] and the
   * longIndex matches all of the regexps
   */
  function matchPassLongIndex(index, longIndex, queries, regexps) {
    if (longIndex.indexOf(queries[0]) != 0) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }

  /*
   * This record matches if the index contains queries[0] and the record
   * matches all of the regexps
   */
  function matchPassContains(index, longIndex, queries, regexps) {
    if (index.indexOf(queries[0]) == -1) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }

  /*
   * This record matches if regexps[0] matches the index and the record
   * matches all of the regexps
   */
  function matchPassRegexp(index, longIndex, queries, regexps) {
    if (!index.match(regexps[0])) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }


  /*  ----- Highlighters ------  */
  function highlightRegexp(info, queries, regexps, highlighters) {
    var result = createResult(info);
    for (var i=0, l = regexps.length; i < l; i++) {
      result.title = result.title.replace(regexps[i], highlighters[i]);
      result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
    };
    return result;
  }

  function hltSubstring(string, pos, length) {
    return string.substring(0, pos) + '\u0001' + string.substring(pos, pos + length) + '\u0002' + string.substring(pos + length);
  }

  function highlightQuery(info, queries, regexps, highlighters) {
    var result = createResult(info);
    var pos = 0;
    var lcTitle = result.title.toLowerCase();

    pos = lcTitle.indexOf(queries[0]);
    if (pos != -1) {
      result.title = hltSubstring(result.title, pos, queries[0].length);
    }

    result.namespace = result.namespace.replace(regexps[0], highlighters[0]);
    for (var i=1, l = regexps.length; i < l; i++) {
      result.title = result.title.replace(regexps[i], highlighters[i]);
      result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
    };
    return result;
  }

  function createResult(info) {
    var result = {};
    result.title = info[0];
    result.namespace = info[1];
    result.path = info[2];
    result.params = info[3];
    result.snippet = info[4];
    result.badge = info[6];
    return result;
  }

  /*  ----- Searching ------  */
  function performSearch(data, regexps, queries, highlighters, state) {
    var searchIndex = data.searchIndex;
    var longSearchIndex = data.longSearchIndex;
    var info = data.info;
    var result = [];
    var i = state.from;
    var l = searchIndex.length;
    var togo = CHUNK_SIZE;
    var matchFunc, hltFunc;

    while (state.pass < 4 && state.limit > 0 && togo > 0) {
      if (state.pass == 0) {
        matchFunc = matchPassBeginning;
        hltFunc = highlightQuery;
      } else if (state.pass == 1) {
        matchFunc = matchPassLongIndex;
        hltFunc = highlightQuery;
      } else if (state.pass == 2) {
        matchFunc = matchPassContains;
        hltFunc = highlightQuery;
      } else if (state.pass == 3) {
        matchFunc = matchPassRegexp;
        hltFunc = highlightRegexp;
      }

      for (; togo > 0 && i < l && state.limit > 0; i++, togo--) {
        if (info[i].n == state.n) continue;
        if (matchFunc(searchIndex[i], longSearchIndex[i], queries, regexps)) {
          info[i].n = state.n;
          result.push(hltFunc(info[i], queries, regexps, highlighters));
          state.limit--;
        }
      };
      if (searchIndex.length <= i) {
        state.pass++;
        i = state.from = 0;
      } else {
        state.from = i;
      }
    }
    return result;
  }

  function triggerResults(results, isLast) {
    this.handlers.forEach(function(fn) {
      fn.call(this, results, isLast)
    });
  }
}

PK)J[Li��u
u
Sshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/json_index/js/navigation.jsnu�[���/*
 * Navigation allows movement using the arrow keys through the search results.
 *
 * When using this library you will need to set scrollIntoView to the
 * appropriate function for your layout.  Use scrollInWindow if the container
 * is not scrollable and scrollInElement if the container is a separate
 * scrolling region.
 */
Navigation = new function() {
  this.initNavigation = function() {
    var _this = this;

    document.addEventListener('keydown', function(e) {
      _this.onkeydown(e);
    });

    this.navigationActive = true;
  }

  this.setNavigationActive = function(state) {
    this.navigationActive = state;
  }

  this.onkeydown = function(e) {
    if (!this.navigationActive) return;
    switch(e.key) {
      case 'ArrowLeft':
        if (this.moveLeft()) e.preventDefault();
        break;
      case 'ArrowUp':
        if (e.key == 'ArrowUp' || e.ctrlKey) {
          if (this.moveUp()) e.preventDefault();
        }
        break;
      case 'ArrowRight':
        if (this.moveRight()) e.preventDefault();
        break;
      case 'ArrowDown':
        if (e.key == 'ArrowDown' || e.ctrlKey) {
          if (this.moveDown()) e.preventDefault();
        }
        break;
      case 'Enter':
        if (this.current) e.preventDefault();
        this.select(this.current);
        break;
    }
    if (e.ctrlKey && e.shiftKey) this.select(this.current);
  }

  this.moveRight = function() {
  }

  this.moveLeft = function() {
  }

  this.move = function(isDown) {
  }

  this.moveUp = function() {
    return this.move(false);
  }

  this.moveDown = function() {
    return this.move(true);
  }

  /*
   * Scrolls to the given element in the scrollable element view.
   */
  this.scrollInElement = function(element, view) {
    var offset, viewHeight, viewScroll, height;
    offset = element.offsetTop;
    height = element.offsetHeight;
    viewHeight = view.offsetHeight;
    viewScroll = view.scrollTop;

    if (offset - viewScroll + height > viewHeight) {
      view.scrollTop = offset - viewHeight + height;
    }
    if (offset < viewScroll) {
      view.scrollTop = offset;
    }
  }

  /*
   * Scrolls to the given element in the window.  The second argument is
   * ignored
   */
  this.scrollInWindow = function(element, ignored) {
    var offset, viewHeight, viewScroll, height;
    offset = element.offsetTop;
    height = element.offsetHeight;
    viewHeight = window.innerHeight;
    viewScroll = window.scrollY;

    if (offset - viewScroll + height > viewHeight) {
      window.scrollTo(window.scrollX, offset - viewHeight + height);
    }
    if (offset < viewScroll) {
      window.scrollTo(window.scrollX, offset);
    }
  }
}

PK)J[ئcHYVYV:share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/darkfish.rbnu�[���# frozen_string_literal: true
# -*- mode: ruby; ruby-indent-level: 2; tab-width: 2 -*-

require 'erb'
require 'fileutils'
require 'pathname'
require_relative 'markup'

##
# Darkfish RDoc HTML Generator
#
# $Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $
#
# == Author/s
# * Michael Granger (ged@FaerieMUD.org)
#
# == Contributors
# * Mahlon E. Smith (mahlon@martini.nu)
# * Eric Hodel (drbrain@segment7.net)
#
# == License
#
# Copyright (c) 2007, 2008, Michael Granger. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
#   this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
#
# * Neither the name of the author/s, nor the names of the project's
#   contributors may be used to endorse or promote products derived from this
#   software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# == Attributions
#
# Darkfish uses the {Silk Icons}[http://www.famfamfam.com/lab/icons/silk/] set
# by Mark James.

class RDoc::Generator::Darkfish

  RDoc::RDoc.add_generator self

  include ERB::Util

  ##
  # Stylesheets, fonts, etc. that are included in RDoc.

  BUILTIN_STYLE_ITEMS = # :nodoc:
    %w[
      css/fonts.css
      fonts/Lato-Light.ttf
      fonts/Lato-LightItalic.ttf
      fonts/Lato-Regular.ttf
      fonts/Lato-RegularItalic.ttf
      fonts/SourceCodePro-Bold.ttf
      fonts/SourceCodePro-Regular.ttf
      css/rdoc.css
  ]

  ##
  # Path to this file's parent directory. Used to find templates and other
  # resources.

  GENERATOR_DIR = File.join 'rdoc', 'generator'

  ##
  # Release Version

  VERSION = '3'

  ##
  # Description of this generator

  DESCRIPTION = 'HTML generator, written by Michael Granger'

  ##
  # The relative path to style sheets and javascript.  By default this is set
  # the same as the rel_prefix.

  attr_accessor :asset_rel_path

  ##
  # The path to generate files into, combined with <tt>--op</tt> from the
  # options for a full path.

  attr_reader :base_dir

  ##
  # Classes and modules to be used by this generator, not necessarily
  # displayed.  See also #modsort

  attr_reader :classes

  ##
  # No files will be written when dry_run is true.

  attr_accessor :dry_run

  ##
  # When false the generate methods return a String instead of writing to a
  # file.  The default is true.

  attr_accessor :file_output

  ##
  # Files to be displayed by this generator

  attr_reader :files

  ##
  # The JSON index generator for this Darkfish generator

  attr_reader :json_index

  ##
  # Methods to be displayed by this generator

  attr_reader :methods

  ##
  # Sorted list of classes and modules to be displayed by this generator

  attr_reader :modsort

  ##
  # The RDoc::Store that is the source of the generated content

  attr_reader :store

  ##
  # The directory where the template files live

  attr_reader :template_dir # :nodoc:

  ##
  # The output directory

  attr_reader :outputdir

  ##
  # Initialize a few instance variables before we start

  def initialize store, options
    @store   = store
    @options = options

    @asset_rel_path = ''
    @base_dir       = Pathname.pwd.expand_path
    @dry_run        = @options.dry_run
    @file_output    = true
    @template_dir   = Pathname.new options.template_dir
    @template_cache = {}

    @classes = nil
    @context = nil
    @files   = nil
    @methods = nil
    @modsort = nil

    @json_index = RDoc::Generator::JsonIndex.new self, options
  end

  ##
  # Output progress information if debugging is enabled

  def debug_msg *msg
    return unless $DEBUG_RDOC
    $stderr.puts(*msg)
  end

  ##
  # Directory where generated class HTML files live relative to the output
  # dir.

  def class_dir
    nil
  end

  ##
  # Directory where generated class HTML files live relative to the output
  # dir.

  def file_dir
    nil
  end

  ##
  # Create the directories the generated docs will live in if they don't
  # already exist.

  def gen_sub_directories
    @outputdir.mkpath
  end

  ##
  # Copy over the stylesheet into the appropriate place in the output
  # directory.

  def write_style_sheet
    debug_msg "Copying static files"
    options = { :verbose => $DEBUG_RDOC, :noop => @dry_run }

    BUILTIN_STYLE_ITEMS.each do |item|
      install_rdoc_static_file @template_dir + item, "./#{item}", options
    end

    unless @options.template_stylesheets.empty?
      FileUtils.cp @options.template_stylesheets, '.', **options
    end

    Dir[(@template_dir + "{js,images}/**/*").to_s].each do |path|
      next if File.directory? path
      next if File.basename(path) =~ /^\./

      dst = Pathname.new(path).relative_path_from @template_dir

      install_rdoc_static_file @template_dir + path, dst, options
    end
  end

  ##
  # Build the initial indices and output objects based on an array of TopLevel
  # objects containing the extracted information.

  def generate
    setup

    write_style_sheet
    generate_index
    generate_class_files
    generate_file_files
    generate_table_of_contents
    @json_index.generate
    @json_index.generate_gzipped

    copy_static

  rescue => e
    debug_msg "%s: %s\n  %s" % [
      e.class.name, e.message, e.backtrace.join("\n  ")
    ]

    raise
  end

  ##
  # Copies static files from the static_path into the output directory

  def copy_static
    return if @options.static_path.empty?

    fu_options = { :verbose => $DEBUG_RDOC, :noop => @dry_run }

    @options.static_path.each do |path|
      unless File.directory? path then
        FileUtils.install path, @outputdir, **fu_options.merge(:mode => 0644)
        next
      end

      Dir.chdir path do
        Dir[File.join('**', '*')].each do |entry|
          dest_file = @outputdir + entry

          if File.directory? entry then
            FileUtils.mkdir_p entry, **fu_options
          else
            FileUtils.install entry, dest_file, **fu_options.merge(:mode => 0644)
          end
        end
      end
    end
  end

  ##
  # Return a list of the documented modules sorted by salience first, then
  # by name.

  def get_sorted_module_list classes
    classes.select do |klass|
      klass.display?
    end.sort
  end

  ##
  # Generate an index page which lists all the classes which are documented.

  def generate_index
    setup

    template_file = @template_dir + 'index.rhtml'
    return unless template_file.exist?

    debug_msg "Rendering the index page..."

    out_file = @base_dir + @options.op_dir + 'index.html'
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = rel_prefix + @asset_rel_path

    @title = @options.title

    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating index.html: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generates a class file for +klass+

  def generate_class klass, template_file = nil
    setup

    current = klass

    template_file ||= @template_dir + 'class.rhtml'

    debug_msg "  working on %s (%s)" % [klass.full_name, klass.path]
    out_file   = @outputdir + klass.path
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = rel_prefix + @asset_rel_path
    svninfo          = get_svninfo(current)

    @title = "#{klass.type} #{klass.full_name} - #{@options.title}"

    debug_msg "  rendering #{out_file}"
    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here.local_variable_set(:svninfo, svninfo)
      here
    end
  end

  ##
  # Generate a documentation file for each class and module

  def generate_class_files
    setup

    template_file = @template_dir + 'class.rhtml'
    template_file = @template_dir + 'classpage.rhtml' unless
      template_file.exist?
    return unless template_file.exist?
    debug_msg "Generating class documentation in #{@outputdir}"

    current = nil

    @classes.each do |klass|
      current = klass

      generate_class klass, template_file
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating #{current.path}: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generate a documentation file for each file

  def generate_file_files
    setup

    page_file     = @template_dir + 'page.rhtml'
    fileinfo_file = @template_dir + 'fileinfo.rhtml'

    # for legacy templates
    filepage_file = @template_dir + 'filepage.rhtml' unless
      page_file.exist? or fileinfo_file.exist?

    return unless
      page_file.exist? or fileinfo_file.exist? or filepage_file.exist?

    debug_msg "Generating file documentation in #{@outputdir}"

    out_file = nil
    current = nil

    @files.each do |file|
      current = file

      if file.text? and page_file.exist? then
        generate_page file
        next
      end

      template_file = nil
      out_file = @outputdir + file.path
      debug_msg "  working on %s (%s)" % [file.full_name, out_file]
      rel_prefix = @outputdir.relative_path_from out_file.dirname
      search_index_rel_prefix = rel_prefix
      search_index_rel_prefix += @asset_rel_path if @file_output

      asset_rel_prefix = rel_prefix + @asset_rel_path

      unless filepage_file then
        if file.text? then
          next unless page_file.exist?
          template_file = page_file
          @title = file.page_name
        else
          next unless fileinfo_file.exist?
          template_file = fileinfo_file
          @title = "File: #{file.base_name}"
        end
      end

      @title += " - #{@options.title}"
      template_file ||= filepage_file

      render_template template_file, out_file do |io|
        here = binding
        # suppress 1.9.3 warning
        here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
        here.local_variable_set(:current, current)
        here
      end
    end
  rescue => e
    error =
      RDoc::Error.new "error generating #{out_file}: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generate a page file for +file+

  def generate_page file
    setup

    template_file = @template_dir + 'page.rhtml'

    out_file = @outputdir + file.path
    debug_msg "  working on %s (%s)" % [file.full_name, out_file]
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    current          = file
    asset_rel_prefix = rel_prefix + @asset_rel_path

    @title = "#{file.page_name} - #{@options.title}"

    debug_msg "  rendering #{out_file}"
    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:current, current)
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  end

  ##
  # Generates the 404 page for the RDoc servlet

  def generate_servlet_not_found message
    setup

    template_file = @template_dir + 'servlet_not_found.rhtml'
    return unless template_file.exist?

    debug_msg "Rendering the servlet 404 Not Found page..."

    rel_prefix = rel_prefix = ''
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = ''

    @title = 'Not Found'

    render_template template_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating servlet_not_found: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generates the servlet root page for the RDoc servlet

  def generate_servlet_root installed
    setup

    template_file = @template_dir + 'servlet_root.rhtml'
    return unless template_file.exist?

    debug_msg 'Rendering the servlet root page...'

    rel_prefix = '.'
    asset_rel_prefix = rel_prefix
    search_index_rel_prefix = asset_rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    @title = 'Local RDoc Documentation'

    render_template template_file do |io| binding end
  rescue => e
    error = RDoc::Error.new \
      "error generating servlet_root: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generate an index page which lists all the classes which are documented.

  def generate_table_of_contents
    setup

    template_file = @template_dir + 'table_of_contents.rhtml'
    return unless template_file.exist?

    debug_msg "Rendering the Table of Contents..."

    out_file = @outputdir + 'table_of_contents.html'
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = rel_prefix + @asset_rel_path

    @title = "Table of Contents - #{@options.title}"

    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating table_of_contents.html: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  def install_rdoc_static_file source, destination, options # :nodoc:
    return unless source.exist?

    begin
      FileUtils.mkdir_p File.dirname(destination), **options

      begin
        FileUtils.ln source, destination, **options
      rescue Errno::EEXIST
        FileUtils.rm destination
        retry
      end
    rescue
      FileUtils.cp source, destination, **options
    end
  end

  ##
  # Prepares for generation of output from the current directory

  def setup
    return if instance_variable_defined? :@outputdir

    @outputdir = Pathname.new(@options.op_dir).expand_path @base_dir

    return unless @store

    @classes = @store.all_classes_and_modules.sort
    @files   = @store.all_files.sort
    @methods = @classes.flat_map { |m| m.method_list }.sort
    @modsort = get_sorted_module_list @classes
  end

  ##
  # Return a string describing the amount of time in the given number of
  # seconds in terms a human can understand easily.

  def time_delta_string seconds
    return 'less than a minute'          if seconds < 60
    return "#{seconds / 60} minute#{seconds / 60 == 1 ? '' : 's'}" if
                                            seconds < 3000     # 50 minutes
    return 'about one hour'              if seconds < 5400     # 90 minutes
    return "#{seconds / 3600} hours"     if seconds < 64800    # 18 hours
    return 'one day'                     if seconds < 86400    #  1 day
    return 'about one day'               if seconds < 172800   #  2 days
    return "#{seconds / 86400} days"     if seconds < 604800   #  1 week
    return 'about one week'              if seconds < 1209600  #  2 week
    return "#{seconds / 604800} weeks"   if seconds < 7257600  #  3 months
    return "#{seconds / 2419200} months" if seconds < 31536000 #  1 year
    return "#{seconds / 31536000} years"
  end

  # %q$Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $"
  SVNID_PATTERN = /
    \$Id:\s
    (\S+)\s                # filename
    (\d+)\s                # rev
    (\d{4}-\d{2}-\d{2})\s  # Date (YYYY-MM-DD)
    (\d{2}:\d{2}:\d{2}Z)\s # Time (HH:MM:SSZ)
    (\w+)\s                # committer
    \$$
  /x

  ##
  # Try to extract Subversion information out of the first constant whose
  # value looks like a subversion Id tag. If no matching constant is found,
  # and empty hash is returned.

  def get_svninfo klass
    constants = klass.constants or return {}

    constants.find { |c| c.value =~ SVNID_PATTERN } or return {}

    filename, rev, date, time, committer = $~.captures
    commitdate = Time.parse "#{date} #{time}"

    return {
      :filename    => filename,
      :rev         => Integer(rev),
      :commitdate  => commitdate,
      :commitdelta => time_delta_string(Time.now - commitdate),
      :committer   => committer,
    }
  end

  ##
  # Creates a template from its components and the +body_file+.
  #
  # For backwards compatibility, if +body_file+ contains "<html" the body is
  # used directly.

  def assemble_template body_file
    body = body_file.read
    return body if body =~ /<html/

    head_file = @template_dir + '_head.rhtml'

    <<-TEMPLATE
<!DOCTYPE html>

<html>
<head>
#{head_file.read}

#{body}
    TEMPLATE
  end

  ##
  # Renders the ERb contained in +file_name+ relative to the template
  # directory and returns the result based on the current context.

  def render file_name
    template_file = @template_dir + file_name

    template = template_for template_file, false, RDoc::ERBPartial

    template.filename = template_file.to_s

    template.result @context
  end

  ##
  # Load and render the erb template in the given +template_file+ and write
  # it out to +out_file+.
  #
  # Both +template_file+ and +out_file+ should be Pathname-like objects.
  #
  # An io will be yielded which must be captured by binding in the caller.

  def render_template template_file, out_file = nil # :yield: io
    io_output = out_file && !@dry_run && @file_output
    erb_klass = io_output ? RDoc::ERBIO : ERB

    template = template_for template_file, true, erb_klass

    if io_output then
      debug_msg "Outputting to %s" % [out_file.expand_path]

      out_file.dirname.mkpath
      out_file.open 'w', 0644 do |io|
        io.set_encoding @options.encoding

        @context = yield io

        template_result template, @context, template_file
      end
    else
      @context = yield nil

      output = template_result template, @context, template_file

      debug_msg "  would have written %d characters to %s" % [
        output.length, out_file.expand_path
      ] if @dry_run

      output
    end
  end

  ##
  # Creates the result for +template+ with +context+.  If an error is raised a
  # Pathname +template_file+ will indicate the file where the error occurred.

  def template_result template, context, template_file
    template.filename = template_file.to_s
    template.result context
  rescue NoMethodError => e
    raise RDoc::Error, "Error while evaluating %s: %s" % [
      template_file.expand_path,
      e.message,
    ], e.backtrace
  end

  ##
  # Retrieves a cache template for +file+, if present, or fills the cache.

  def template_for file, page = true, klass = ERB
    template = @template_cache[file]

    return template if template

    if page then
      template = assemble_template file
      erbout = 'io'
    else
      template = file.read
      template = template.encode @options.encoding

      file_var = File.basename(file).sub(/\..*/, '')

      erbout = "_erbout_#{file_var}"
    end

    template = klass.new template, trim_mode: '-', eoutvar: erbout
    @template_cache[file] = template
    template
  end

  # Returns an excerpt of the content for usage in meta description tags
  def excerpt(content)
    text = case content
    when RDoc::Comment
      content.text
    when RDoc::Markup::Document
      # This case is for page files that are not markdown nor rdoc
      # We convert them to markdown for now as it's easier to extract the text
      formatter = RDoc::Markup::ToMarkdown.new
      formatter.start_accepting
      formatter.accept_document(content)
      formatter.end_accepting
    else
      content
    end

    # Match from a capital letter to the first period, discarding any links, so
    # that we don't end up matching badges in the README
    first_paragraph_match = text.match(/[A-Z][^\.:\/]+\./)
    return text[0...150].gsub(/\n/, " ").squeeze(" ") unless first_paragraph_match

    extracted_text = first_paragraph_match[0]
    second_paragraph = first_paragraph_match.post_match.match(/[A-Z][^\.:\/]+\./)
    extracted_text << " " << second_paragraph[0] if second_paragraph

    extracted_text[0...150].gsub(/\n/, " ").squeeze(" ")
  end

  def generate_ancestor_list(ancestors, klass)
    return '' if ancestors.empty?

    ancestor = ancestors.shift
    content = +'<ul><li>'

    if ancestor.is_a?(RDoc::NormalClass)
      content << "<a href=\"#{klass.aref_to ancestor.path}\">#{ancestor.full_name}</a>"
    else
      content << ancestor.to_s
    end

    # Recursively call the method for the remaining ancestors
    content << generate_ancestor_list(ancestors, klass)

    content << '</li></ul>'
  end
end
PK)J[��8share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot/po.rbnu�[���# frozen_string_literal: true
##
# Generates a PO format text

class RDoc::Generator::POT::PO

  ##
  # Creates an object that represents PO format.

  def initialize
    @entries = {}
    add_header
  end

  ##
  # Adds a PO entry to the PO.

  def add entry
    existing_entry = @entries[entry.msgid]
    if existing_entry
      entry = existing_entry.merge(entry)
    end
    @entries[entry.msgid] = entry
  end

  ##
  # Returns PO format text for the PO.

  def to_s
    po = ''
    sort_entries.each do |entry|
      po += "\n" unless po.empty?
      po += entry.to_s
    end
    po
  end

  private

  def add_header
    add(header_entry)
  end

  def header_entry
    comment = <<-COMMENT
SOME DESCRIPTIVE TITLE.
Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
This file is distributed under the same license as the PACKAGE package.
FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
    COMMENT

    content = <<-CONTENT
Project-Id-Version: PACKAGE VERSEION
Report-Msgid-Bugs-To:
PO-Revision-Date: YEAR-MO_DA HO:MI+ZONE
Last-Translator: FULL NAME <EMAIL@ADDRESS>
Language-Team: LANGUAGE <LL@li.org>
Language:
MIME-Version: 1.0
Content-Type: text/plain; charset=CHARSET
Content-Transfer-Encoding: 8bit
Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;
    CONTENT

    options = {
      :msgstr => content,
      :translator_comment => comment,
      :flags => ['fuzzy'],
    }
    RDoc::Generator::POT::POEntry.new('', options)
  end

  def sort_entries
    headers, messages = @entries.values.partition do |entry|
      entry.msgid.empty?
    end
    # TODO: sort by location
    sorted_messages = messages.sort_by do |entry|
      entry.msgid
    end
    headers + sorted_messages
  end

end
PK)J[L��Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot/message_extractor.rbnu�[���# frozen_string_literal: true
##
# Extracts message from RDoc::Store

class RDoc::Generator::POT::MessageExtractor

  ##
  # Creates a message extractor for +store+.

  def initialize store
    @store = store
    @po = RDoc::Generator::POT::PO.new
  end

  ##
  # Extracts messages from +store+, stores them into
  # RDoc::Generator::POT::PO and returns it.

  def extract
    @store.all_classes_and_modules.each do |klass|
      extract_from_klass(klass)
    end
    @po
  end

  private

  def extract_from_klass klass
    extract_text(klass.comment_location, klass.full_name)

    klass.each_section do |section, constants, attributes|
      extract_text(section.title, "#{klass.full_name}: section title")
      section.comments.each do |comment|
        extract_text(comment, "#{klass.full_name}: #{section.title}")
      end
    end

    klass.each_constant do |constant|
      extract_text(constant.comment, constant.full_name)
    end

    klass.each_attribute do |attribute|
      extract_text(attribute.comment, attribute.full_name)
    end

    klass.each_method do |method|
      extract_text(method.comment, method.full_name)
    end
  end

  def extract_text text, comment, location = nil
    return if text.nil?

    options = {
      :extracted_comment => comment,
      :references => [location].compact,
    }
    i18n_text = RDoc::I18n::Text.new(text)
    i18n_text.extract_messages do |part|
      @po.add(entry(part[:paragraph], options))
    end
  end

  def entry msgid, options
    RDoc::Generator::POT::POEntry.new(msgid, options)
  end

end
PK)J[(k�!��>share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot/po_entry.rbnu�[���# frozen_string_literal: true
##
# A PO entry in PO

class RDoc::Generator::POT::POEntry

  # The msgid content
  attr_reader :msgid

  # The msgstr content
  attr_reader :msgstr

  # The comment content created by translator (PO editor)
  attr_reader :translator_comment

  # The comment content extracted from source file
  attr_reader :extracted_comment

  # The locations where the PO entry is extracted
  attr_reader :references

  # The flags of the PO entry
  attr_reader :flags

  ##
  # Creates a PO entry for +msgid+. Other values can be specified by
  # +options+.

  def initialize msgid, options = {}
    @msgid = msgid
    @msgstr = options[:msgstr] || ""
    @translator_comment = options[:translator_comment]
    @extracted_comment = options[:extracted_comment]
    @references = options[:references] || []
    @flags = options[:flags] || []
  end

  ##
  # Returns the PO entry in PO format.

  def to_s
    entry = ''
    entry += format_translator_comment
    entry += format_extracted_comment
    entry += format_references
    entry += format_flags
    entry += <<-ENTRY
msgid #{format_message(@msgid)}
msgstr #{format_message(@msgstr)}
    ENTRY
  end

  ##
  # Merges the PO entry with +other_entry+.

  def merge other_entry
    options = {
      :extracted_comment  => merge_string(@extracted_comment,
                                          other_entry.extracted_comment),
      :translator_comment => merge_string(@translator_comment,
                                          other_entry.translator_comment),
      :references         => merge_array(@references,
                                         other_entry.references),
      :flags              => merge_array(@flags,
                                         other_entry.flags),
    }
    self.class.new(@msgid, options)
  end

  private

  def format_comment mark, comment
    return '' unless comment
    return '' if comment.empty?

    formatted_comment = ''
    comment.each_line do |line|
      formatted_comment += "#{mark} #{line}"
    end
    formatted_comment += "\n" unless formatted_comment.end_with?("\n")
    formatted_comment
  end

  def format_translator_comment
    format_comment('#', @translator_comment)
  end

  def format_extracted_comment
    format_comment('#.', @extracted_comment)
  end

  def format_references
    return '' if @references.empty?

    formatted_references = ''
    @references.sort.each do |file, line|
      formatted_references += "\#: #{file}:#{line}\n"
    end
    formatted_references
  end

  def format_flags
    return '' if @flags.empty?

    formatted_flags = flags.join(",")
    "\#, #{formatted_flags}\n"
  end

  def format_message message
    return "\"#{escape(message)}\"" unless message.include?("\n")

    formatted_message = '""'
    message.each_line do |line|
      formatted_message += "\n"
      formatted_message += "\"#{escape(line)}\""
    end
    formatted_message
  end

  def escape string
    string.gsub(/["\\\t\n]/) do |special_character|
      case special_character
      when "\t"
        "\\t"
      when "\n"
        "\\n"
      else
        "\\#{special_character}"
      end
    end
  end

  def merge_string string1, string2
    [string1, string2].compact.join("\n")
  end

  def merge_array array1, array2
      (array1 + array2).uniq
  end

end
PK)J[����<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/json_index.rbnu�[���# frozen_string_literal: true
require 'json'
begin
  require 'zlib'
rescue LoadError
end

##
# The JsonIndex generator is designed to complement an HTML generator and
# produces a JSON search index.  This generator is derived from sdoc by
# Vladimir Kolesnikov and contains verbatim code written by him.
#
# This generator is designed to be used with a regular HTML generator:
#
#   class RDoc::Generator::Darkfish
#     def initialize options
#       # ...
#       @base_dir = Pathname.pwd.expand_path
#
#       @json_index = RDoc::Generator::JsonIndex.new self, options
#     end
#
#     def generate
#       # ...
#       @json_index.generate
#     end
#   end
#
# == Index Format
#
# The index is output as a JSON file assigned to the global variable
# +search_data+.  The structure is:
#
#   var search_data = {
#     "index": {
#       "searchIndex":
#         ["a", "b", ...],
#       "longSearchIndex":
#         ["a", "a::b", ...],
#       "info": [
#         ["A", "A", "A.html", "", ""],
#         ["B", "A::B", "A::B.html", "", ""],
#         ...
#       ]
#     }
#   }
#
# The same item is described across the +searchIndex+, +longSearchIndex+ and
# +info+ fields.  The +searchIndex+ field contains the item's short name, the
# +longSearchIndex+ field contains the full_name (when appropriate) and the
# +info+ field contains the item's name, full_name, path, parameters and a
# snippet of the item's comment.
#
# == LICENSE
#
# Copyright (c) 2009 Vladimir Kolesnikov
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

class RDoc::Generator::JsonIndex

  include RDoc::Text

  ##
  # Where the search index lives in the generated output

  SEARCH_INDEX_FILE = File.join 'js', 'search_index.js'

  attr_reader :index # :nodoc:

  ##
  # Creates a new generator.  +parent_generator+ is used to determine the
  # class_dir and file_dir of links in the output index.
  #
  # +options+ are the same options passed to the parent generator.

  def initialize parent_generator, options
    @parent_generator = parent_generator
    @store            = parent_generator.store
    @options          = options

    @template_dir = File.expand_path '../template/json_index', __FILE__
    @base_dir = @parent_generator.base_dir

    @classes = nil
    @files   = nil
    @index   = nil
  end

  ##
  # Builds the JSON index as a Hash.

  def build_index
    reset @store.all_files.sort, @store.all_classes_and_modules.sort

    index_classes
    index_methods
    index_pages

    { :index => @index }
  end

  ##
  # Output progress information if debugging is enabled

  def debug_msg *msg
    return unless $DEBUG_RDOC
    $stderr.puts(*msg)
  end

  ##
  # Writes the JSON index to disk

  def generate
    debug_msg "Generating JSON index"

    debug_msg "  writing search index to %s" % SEARCH_INDEX_FILE
    data = build_index

    return if @options.dry_run

    out_dir = @base_dir + @options.op_dir
    index_file = out_dir + SEARCH_INDEX_FILE

    FileUtils.mkdir_p index_file.dirname, :verbose => $DEBUG_RDOC

    index_file.open 'w', 0644 do |io|
      io.set_encoding Encoding::UTF_8
      io.write 'var search_data = '

      JSON.dump data, io, 0
    end
    unless ENV['SOURCE_DATE_EPOCH'].nil?
      index_file.utime index_file.atime, Time.at(ENV['SOURCE_DATE_EPOCH'].to_i).gmtime
    end

    Dir.chdir @template_dir do
      Dir['**/*.js'].each do |source|
        dest = File.join out_dir, source

        FileUtils.install source, dest, :mode => 0644, :preserve => true, :verbose => $DEBUG_RDOC
      end
    end
  end

  ##
  # Compress the search_index.js file using gzip

  def generate_gzipped
    return if @options.dry_run or not defined?(Zlib)

    debug_msg "Compressing generated JSON index"
    out_dir = @base_dir + @options.op_dir

    search_index_file = out_dir + SEARCH_INDEX_FILE
    outfile           = out_dir + "#{search_index_file}.gz"

    debug_msg "Reading the JSON index file from %s" % search_index_file
    search_index = search_index_file.read(mode: 'r:utf-8')

    debug_msg "Writing gzipped search index to %s" % outfile

    Zlib::GzipWriter.open(outfile) do |gz|
      gz.mtime = File.mtime(search_index_file)
      gz.orig_name = search_index_file.basename.to_s
      gz.write search_index
      gz.close
    end

    # GZip the rest of the js files
    Dir.chdir @template_dir do
      Dir['**/*.js'].each do |source|
        dest = out_dir + source
        outfile = out_dir + "#{dest}.gz"

        debug_msg "Reading the original js file from %s" % dest
        data = dest.read

        debug_msg "Writing gzipped file to %s" % outfile

        Zlib::GzipWriter.open(outfile) do |gz|
          gz.mtime = File.mtime(dest)
          gz.orig_name = dest.basename.to_s
          gz.write data
          gz.close
        end
      end
    end
  end

  ##
  # Adds classes and modules to the index

  def index_classes
    debug_msg "  generating class search index"

    documented = @classes.uniq.select do |klass|
      klass.document_self_or_methods
    end

    documented.each do |klass|
      debug_msg "    #{klass.full_name}"
      record = klass.search_record
      @index[:searchIndex]     << search_string(record.shift)
      @index[:longSearchIndex] << search_string(record.shift)
      @index[:info]            << record
    end
  end

  ##
  # Adds methods to the index

  def index_methods
    debug_msg "  generating method search index"

    list = @classes.uniq.flat_map do |klass|
      klass.method_list
    end.sort_by do |method|
      [method.name, method.parent.full_name]
    end

    list.each do |method|
      debug_msg "    #{method.full_name}"
      record = method.search_record
      @index[:searchIndex]     << "#{search_string record.shift}()"
      @index[:longSearchIndex] << "#{search_string record.shift}()"
      @index[:info]            << record
    end
  end

  ##
  # Adds pages to the index

  def index_pages
    debug_msg "  generating pages search index"

    pages = @files.select do |file|
      file.text?
    end

    pages.each do |page|
      debug_msg "    #{page.page_name}"
      record = page.search_record
      @index[:searchIndex]     << search_string(record.shift)
      @index[:longSearchIndex] << ''
      record.shift
      @index[:info]            << record
    end
  end

  ##
  # The directory classes are written to

  def class_dir
    @parent_generator.class_dir
  end

  ##
  # The directory files are written to

  def file_dir
    @parent_generator.file_dir
  end

  def reset files, classes # :nodoc:
    @files   = files
    @classes = classes

    @index = {
      :searchIndex => [],
      :longSearchIndex => [],
      :info => []
    }
  end

  ##
  # Removes whitespace and downcases +string+

  def search_string string
    string.downcase.gsub(/\s/, '')
  end

end
PK)J[��Q�		5share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot.rbnu�[���# frozen_string_literal: true
##
# Generates a POT file.
#
# Here is a translator work flow with the generator.
#
# == Create .pot
#
# You create .pot file by pot formatter:
#
#   % rdoc --format pot
#
# It generates doc/rdoc.pot.
#
# == Create .po
#
# You create .po file from doc/rdoc.pot. This operation is needed only
# the first time. This work flow assumes that you are a translator
# for Japanese.
#
# You create locale/ja/rdoc.po from doc/rdoc.pot. You can use msginit
# provided by GNU gettext or rmsginit provided by gettext gem. This
# work flow uses gettext gem because it is more portable than GNU
# gettext for Rubyists. Gettext gem is implemented by pure Ruby.
#
#   % gem install gettext
#   % mkdir -p locale/ja
#   % rmsginit --input doc/rdoc.pot --output locale/ja/rdoc.po --locale ja
#
# Translate messages in .po
#
# You translate messages in .po by a PO file editor. po-mode.el exists
# for Emacs users. There are some GUI tools such as GTranslator.
# There are some Web services such as POEditor and Tansifex. You can
# edit by your favorite text editor because .po is a text file.
# Generate localized documentation
#
# You can generate localized documentation with locale/ja/rdoc.po:
#
#   % rdoc --locale ja
#
# You can find documentation in Japanese in doc/. Yay!
#
# == Update translation
#
# You need to update translation when your application is added or
# modified messages.
#
# You can update .po by the following command lines:
#
#   % rdoc --format pot
#   % rmsgmerge --update locale/ja/rdoc.po doc/rdoc.pot
#
# You edit locale/ja/rdoc.po to translate new messages.

class RDoc::Generator::POT

  RDoc::RDoc.add_generator self

  ##
  # Description of this generator

  DESCRIPTION = 'creates .pot file'

  ##
  # Set up a new .pot generator

  def initialize store, options #:not-new:
    @options    = options
    @store      = store
  end

  ##
  # Writes .pot to disk.

  def generate
    po = extract_messages
    pot_path = 'rdoc.pot'
    File.open(pot_path, "w") do |pot|
      pot.print(po.to_s)
    end
  end

  # :nodoc:
  def class_dir
    nil
  end

  private
  def extract_messages
    extractor = MessageExtractor.new(@store)
    extractor.extract
  end

  require_relative 'pot/message_extractor'
  require_relative 'pot/po'
  require_relative 'pot/po_entry'

end
PK)J[诇

0share/gems/gems/rdoc-6.10.0/lib/rdoc/encoding.rbnu�[���# coding: US-ASCII
# frozen_string_literal: true

##
# This class is a wrapper around File IO and Encoding that helps RDoc load
# files and convert them to the correct encoding.

module RDoc::Encoding

  HEADER_REGEXP = /^
    (?:
      \A\#!.*\n
      |
      ^\#\s+frozen[-_]string[-_]literal[=:].+\n
      |
      ^\#[^\n]+\b(?:en)?coding[=:]\s*(?<name>[^\s;]+).*\n
      |
      <\?xml[^?]*encoding=(?<quote>["'])(?<name>.*?)\k<quote>.*\n
    )+
  /xi # :nodoc:

  ##
  # Reads the contents of +filename+ and handles any encoding directives in
  # the file.
  #
  # The content will be converted to the +encoding+.  If the file cannot be
  # converted a warning will be printed and nil will be returned.
  #
  # If +force_transcode+ is true the document will be transcoded and any
  # unknown character in the target encoding will be replaced with '?'

  def self.read_file filename, encoding, force_transcode = false
    content = File.open filename, "rb" do |f| f.read end
    content.gsub!("\r\n", "\n") if RUBY_PLATFORM =~ /mswin|mingw/

    utf8 = content.sub!(/\A\xef\xbb\xbf/, '')

    enc = RDoc::Encoding.detect_encoding content
    content = RDoc::Encoding.change_encoding content, enc if enc

    begin
      encoding ||= Encoding.default_external
      orig_encoding = content.encoding

      if not orig_encoding.ascii_compatible? then
        content = content.encode encoding
      elsif utf8 then
        content = RDoc::Encoding.change_encoding content, Encoding::UTF_8
        content = content.encode encoding
      else
        # assume the content is in our output encoding
        content = RDoc::Encoding.change_encoding content, encoding
      end

      unless content.valid_encoding? then
        # revert and try to transcode
        content = RDoc::Encoding.change_encoding content, orig_encoding
        content = content.encode encoding
      end

      unless content.valid_encoding? then
        warn "unable to convert #{filename} to #{encoding}, skipping"
        content = nil
      end
    rescue Encoding::InvalidByteSequenceError,
           Encoding::UndefinedConversionError => e
      if force_transcode then
        content = RDoc::Encoding.change_encoding content, orig_encoding
        content = content.encode(encoding,
                                 :invalid => :replace,
                                 :undef => :replace,
                                 :replace => '?')
        return content
      else
        warn "unable to convert #{e.message} for #{filename}, skipping"
        return nil
      end
    end

    content
  rescue ArgumentError => e
    raise unless e.message =~ /unknown encoding name - (.*)/
    warn "unknown encoding name \"#{$1}\" for #{filename}, skipping"
    nil
  rescue Errno::EISDIR, Errno::ENOENT
    nil
  end

  ##
  # Detects the encoding of +string+ based on the magic comment

  def self.detect_encoding string
    result = HEADER_REGEXP.match string
    name = result && result[:name]

    name ? Encoding.find(name) : nil
  end

  ##
  # Removes magic comments and shebang

  def self.remove_magic_comment string
    string.sub HEADER_REGEXP do |s|
      s.gsub(/[^\n]/, '')
    end
  end

  ##
  # Changes encoding based on +encoding+ without converting and returns new
  # string

  def self.change_encoding text, encoding
    if text.kind_of? RDoc::Comment
      text.encode! encoding
    else
      String.new text, encoding: encoding
    end
  end

end
PK)J[�)��(�(9share/gems/gems/rdoc-6.10.0/lib/rdoc/markdown/literals.rbnu�[���# coding: UTF-8
# frozen_string_literal: true
# :markup: markdown

##
# This set of literals is for Ruby 1.9 regular expressions and gives full
# unicode support.
#
# Unlike peg-markdown, this set of literals recognizes Unicode alphanumeric
# characters, newlines and spaces.
class RDoc::Markdown::Literals
  # :stopdoc:

    # This is distinct from setup_parser so that a standalone parser
    # can redefine #initialize and still have access to the proper
    # parser setup code.
    def initialize(str, debug=false)
      setup_parser(str, debug)
    end



    # Prepares for parsing +str+.  If you define a custom initialize you must
    # call this method before #parse
    def setup_parser(str, debug=false)
      set_string str, 0
      @memoizations = Hash.new { |h,k| h[k] = {} }
      @result = nil
      @failed_rule = nil
      @failing_rule_offset = -1
      @line_offsets = nil

      setup_foreign_grammar
    end

    attr_reader :string
    attr_reader :failing_rule_offset
    attr_accessor :result, :pos

    def current_column(target=pos)
      if string[target] == "\n" && (c = string.rindex("\n", target-1) || -1)
        return target - c
      elsif c = string.rindex("\n", target)
        return target - c
      end

      target + 1
    end

    def position_line_offsets
      unless @position_line_offsets
        @position_line_offsets = []
        total = 0
        string.each_line do |line|
          total += line.size
          @position_line_offsets << total
        end
      end
      @position_line_offsets
    end

    if [].respond_to? :bsearch_index
      def current_line(target=pos)
        if line = position_line_offsets.bsearch_index {|x| x > target }
          return line + 1
        end
        raise "Target position #{target} is outside of string"
      end
    else
      def current_line(target=pos)
        if line = position_line_offsets.index {|x| x > target }
          return line + 1
        end

        raise "Target position #{target} is outside of string"
      end
    end

    def current_character(target=pos)
      if target < 0 || target >= string.size
        raise "Target position #{target} is outside of string"
      end
      string[target, 1]
    end

    KpegPosInfo = Struct.new(:pos, :lno, :col, :line, :char)

    def current_pos_info(target=pos)
      l = current_line target
      c = current_column target
      ln = get_line(l-1)
      chr = string[target,1]
      KpegPosInfo.new(target, l, c, ln, chr)
    end

    def lines
      string.lines
    end

    def get_line(no)
      loff = position_line_offsets
      if no < 0
        raise "Line No is out of range: #{no} < 0"
      elsif no >= loff.size
        raise "Line No is out of range: #{no} >= #{loff.size}"
      end
      lend = loff[no]-1
      lstart = no > 0 ? loff[no-1] : 0
      string[lstart..lend]
    end



    def get_text(start)
      @string[start..@pos-1]
    end

    # Sets the string and current parsing position for the parser.
    def set_string string, pos
      @string = string
      @string_size = string ? string.size : 0
      @pos = pos
      @position_line_offsets = nil
    end

    def show_pos
      width = 10
      if @pos < width
        "#{@pos} (\"#{@string[0,@pos]}\" @ \"#{@string[@pos,width]}\")"
      else
        "#{@pos} (\"... #{@string[@pos - width, width]}\" @ \"#{@string[@pos,width]}\")"
      end
    end

    def failure_info
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "line #{l}, column #{c}: failed rule '#{info.name}' = '#{info.rendered}'"
      else
        "line #{l}, column #{c}: failed rule '#{@failed_rule}'"
      end
    end

    def failure_caret
      p = current_pos_info @failing_rule_offset
      "#{p.line.chomp}\n#{' ' * (p.col - 1)}^"
    end

    def failure_character
      current_character @failing_rule_offset
    end

    def failure_oneline
      p = current_pos_info @failing_rule_offset

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "@#{p.lno}:#{p.col} failed rule '#{info.name}', got '#{p.char}'"
      else
        "@#{p.lno}:#{p.col} failed rule '#{@failed_rule}', got '#{p.char}'"
      end
    end

    class ParseError < RuntimeError
    end

    def raise_error
      raise ParseError, failure_oneline
    end

    def show_error(io=STDOUT)
      error_pos = @failing_rule_offset
      p = current_pos_info(error_pos)

      io.puts "On line #{p.lno}, column #{p.col}:"

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        io.puts "Failed to match '#{info.rendered}' (rule '#{info.name}')"
      else
        io.puts "Failed to match rule '#{@failed_rule}'"
      end

      io.puts "Got: #{p.char.inspect}"
      io.puts "=> #{p.line}"
      io.print(" " * (p.col + 2))
      io.puts "^"
    end

    def set_failed_rule(name)
      if @pos > @failing_rule_offset
        @failed_rule = name
        @failing_rule_offset = @pos
      end
    end

    attr_reader :failed_rule

    def match_string(str)
      len = str.size
      if @string[pos,len] == str
        @pos += len
        return str
      end

      return nil
    end

    def scan(reg)
      if m = reg.match(@string, @pos)
        @pos = m.end(0)
        return true
      end

      return nil
    end

    if "".respond_to? :ord
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos].ord
        @pos += 1
        s
      end
    else
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos]
        @pos += 1
        s
      end
    end

    def parse(rule=nil)
      # We invoke the rules indirectly via apply
      # instead of by just calling them as methods because
      # if the rules use left recursion, apply needs to
      # manage that.

      if !rule
        apply(:_root)
      else
        method = rule.gsub("-","_hyphen_")
        apply :"_#{method}"
      end
    end

    class MemoEntry
      def initialize(ans, pos)
        @ans = ans
        @pos = pos
        @result = nil
        @set = false
        @left_rec = false
      end

      attr_reader :ans, :pos, :result, :set
      attr_accessor :left_rec

      def move!(ans, pos, result)
        @ans = ans
        @pos = pos
        @result = result
        @set = true
        @left_rec = false
      end
    end

    def external_invoke(other, rule, *args)
      old_pos = @pos
      old_string = @string

      set_string other.string, other.pos

      begin
        if val = __send__(rule, *args)
          other.pos = @pos
          other.result = @result
        else
          other.set_failed_rule "#{self.class}##{rule}"
        end
        val
      ensure
        set_string old_string, old_pos
      end
    end

    def apply_with_args(rule, *args)
      @result = nil
      memo_key = [rule, args]
      if m = @memoizations[memo_key][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[memo_key][@pos] = m
        start_pos = @pos

        ans = __send__ rule, *args

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, args, start_pos, m)
        else
          return ans
        end
      end
    end

    def apply(rule)
      @result = nil
      if m = @memoizations[rule][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[rule][@pos] = m
        start_pos = @pos

        ans = __send__ rule

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, nil, start_pos, m)
        else
          return ans
        end
      end
    end

    def grow_lr(rule, args, start_pos, m)
      while true
        @pos = start_pos
        @result = m.result

        if args
          ans = __send__ rule, *args
        else
          ans = __send__ rule
        end
        return nil unless ans

        break if @pos <= m.pos

        m.move! ans, @pos, @result
      end

      @result = m.result
      @pos = m.pos
      return m.ans
    end

    class RuleInfo
      def initialize(name, rendered)
        @name = name
        @rendered = rendered
      end

      attr_reader :name, :rendered
    end

    def self.rule_info(name, rendered)
      RuleInfo.new(name, rendered)
    end


  # :startdoc:
  # :stopdoc:
  def setup_foreign_grammar; end

  # Alphanumeric = /\p{Word}/
  def _Alphanumeric
    _tmp = scan(/\G(?-mix:\p{Word})/)
    set_failed_rule :_Alphanumeric unless _tmp
    return _tmp
  end

  # AlphanumericAscii = /[A-Za-z0-9]/
  def _AlphanumericAscii
    _tmp = scan(/\G(?-mix:[A-Za-z0-9])/)
    set_failed_rule :_AlphanumericAscii unless _tmp
    return _tmp
  end

  # BOM = "uFEFF"
  def _BOM
    _tmp = match_string("uFEFF")
    set_failed_rule :_BOM unless _tmp
    return _tmp
  end

  # Newline = /\n|\r\n?|\p{Zl}|\p{Zp}/
  def _Newline
    _tmp = scan(/\G(?-mix:\n|\r\n?|\p{Zl}|\p{Zp})/)
    set_failed_rule :_Newline unless _tmp
    return _tmp
  end

  # NonAlphanumeric = /\p{^Word}/
  def _NonAlphanumeric
    _tmp = scan(/\G(?-mix:\p{^Word})/)
    set_failed_rule :_NonAlphanumeric unless _tmp
    return _tmp
  end

  # Spacechar = /\t|\p{Zs}/
  def _Spacechar
    _tmp = scan(/\G(?-mix:\t|\p{Zs})/)
    set_failed_rule :_Spacechar unless _tmp
    return _tmp
  end

  Rules = {}
  Rules[:_Alphanumeric] = rule_info("Alphanumeric", "/\\p{Word}/")
  Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "/[A-Za-z0-9]/")
  Rules[:_BOM] = rule_info("BOM", "\"uFEFF\"")
  Rules[:_Newline] = rule_info("Newline", "/\\n|\\r\\n?|\\p{Zl}|\\p{Zp}/")
  Rules[:_NonAlphanumeric] = rule_info("NonAlphanumeric", "/\\p{^Word}/")
  Rules[:_Spacechar] = rule_info("Spacechar", "/\\t|\\p{Zs}/")
  # :startdoc:
end
PK)J[7��- � �9share/gems/gems/rdoc-6.10.0/lib/rdoc/markdown/entities.rbnu�[���# frozen_string_literal: true
##
# HTML entity name map for RDoc::Markdown

RDoc::Markdown::HTML_ENTITIES = {
  "AElig" => [0x000C6],
  "AMP" => [0x00026],
  "Aacute" => [0x000C1],
  "Abreve" => [0x00102],
  "Acirc" => [0x000C2],
  "Acy" => [0x00410],
  "Afr" => [0x1D504],
  "Agrave" => [0x000C0],
  "Alpha" => [0x00391],
  "Amacr" => [0x00100],
  "And" => [0x02A53],
  "Aogon" => [0x00104],
  "Aopf" => [0x1D538],
  "ApplyFunction" => [0x02061],
  "Aring" => [0x000C5],
  "Ascr" => [0x1D49C],
  "Assign" => [0x02254],
  "Atilde" => [0x000C3],
  "Auml" => [0x000C4],
  "Backslash" => [0x02216],
  "Barv" => [0x02AE7],
  "Barwed" => [0x02306],
  "Bcy" => [0x00411],
  "Because" => [0x02235],
  "Bernoullis" => [0x0212C],
  "Beta" => [0x00392],
  "Bfr" => [0x1D505],
  "Bopf" => [0x1D539],
  "Breve" => [0x002D8],
  "Bscr" => [0x0212C],
  "Bumpeq" => [0x0224E],
  "CHcy" => [0x00427],
  "COPY" => [0x000A9],
  "Cacute" => [0x00106],
  "Cap" => [0x022D2],
  "CapitalDifferentialD" => [0x02145],
  "Cayleys" => [0x0212D],
  "Ccaron" => [0x0010C],
  "Ccedil" => [0x000C7],
  "Ccirc" => [0x00108],
  "Cconint" => [0x02230],
  "Cdot" => [0x0010A],
  "Cedilla" => [0x000B8],
  "CenterDot" => [0x000B7],
  "Cfr" => [0x0212D],
  "Chi" => [0x003A7],
  "CircleDot" => [0x02299],
  "CircleMinus" => [0x02296],
  "CirclePlus" => [0x02295],
  "CircleTimes" => [0x02297],
  "ClockwiseContourIntegral" => [0x02232],
  "CloseCurlyDoubleQuote" => [0x0201D],
  "CloseCurlyQuote" => [0x02019],
  "Colon" => [0x02237],
  "Colone" => [0x02A74],
  "Congruent" => [0x02261],
  "Conint" => [0x0222F],
  "ContourIntegral" => [0x0222E],
  "Copf" => [0x02102],
  "Coproduct" => [0x02210],
  "CounterClockwiseContourIntegral" => [0x02233],
  "Cross" => [0x02A2F],
  "Cscr" => [0x1D49E],
  "Cup" => [0x022D3],
  "CupCap" => [0x0224D],
  "DD" => [0x02145],
  "DDotrahd" => [0x02911],
  "DJcy" => [0x00402],
  "DScy" => [0x00405],
  "DZcy" => [0x0040F],
  "Dagger" => [0x02021],
  "Darr" => [0x021A1],
  "Dashv" => [0x02AE4],
  "Dcaron" => [0x0010E],
  "Dcy" => [0x00414],
  "Del" => [0x02207],
  "Delta" => [0x00394],
  "Dfr" => [0x1D507],
  "DiacriticalAcute" => [0x000B4],
  "DiacriticalDot" => [0x002D9],
  "DiacriticalDoubleAcute" => [0x002DD],
  "DiacriticalGrave" => [0x00060],
  "DiacriticalTilde" => [0x002DC],
  "Diamond" => [0x022C4],
  "DifferentialD" => [0x02146],
  "Dopf" => [0x1D53B],
  "Dot" => [0x000A8],
  "DotDot" => [0x020DC],
  "DotEqual" => [0x02250],
  "DoubleContourIntegral" => [0x0222F],
  "DoubleDot" => [0x000A8],
  "DoubleDownArrow" => [0x021D3],
  "DoubleLeftArrow" => [0x021D0],
  "DoubleLeftRightArrow" => [0x021D4],
  "DoubleLeftTee" => [0x02AE4],
  "DoubleLongLeftArrow" => [0x027F8],
  "DoubleLongLeftRightArrow" => [0x027FA],
  "DoubleLongRightArrow" => [0x027F9],
  "DoubleRightArrow" => [0x021D2],
  "DoubleRightTee" => [0x022A8],
  "DoubleUpArrow" => [0x021D1],
  "DoubleUpDownArrow" => [0x021D5],
  "DoubleVerticalBar" => [0x02225],
  "DownArrow" => [0x02193],
  "DownArrowBar" => [0x02913],
  "DownArrowUpArrow" => [0x021F5],
  "DownBreve" => [0x00311],
  "DownLeftRightVector" => [0x02950],
  "DownLeftTeeVector" => [0x0295E],
  "DownLeftVector" => [0x021BD],
  "DownLeftVectorBar" => [0x02956],
  "DownRightTeeVector" => [0x0295F],
  "DownRightVector" => [0x021C1],
  "DownRightVectorBar" => [0x02957],
  "DownTee" => [0x022A4],
  "DownTeeArrow" => [0x021A7],
  "Downarrow" => [0x021D3],
  "Dscr" => [0x1D49F],
  "Dstrok" => [0x00110],
  "ENG" => [0x0014A],
  "ETH" => [0x000D0],
  "Eacute" => [0x000C9],
  "Ecaron" => [0x0011A],
  "Ecirc" => [0x000CA],
  "Ecy" => [0x0042D],
  "Edot" => [0x00116],
  "Efr" => [0x1D508],
  "Egrave" => [0x000C8],
  "Element" => [0x02208],
  "Emacr" => [0x00112],
  "EmptySmallSquare" => [0x025FB],
  "EmptyVerySmallSquare" => [0x025AB],
  "Eogon" => [0x00118],
  "Eopf" => [0x1D53C],
  "Epsilon" => [0x00395],
  "Equal" => [0x02A75],
  "EqualTilde" => [0x02242],
  "Equilibrium" => [0x021CC],
  "Escr" => [0x02130],
  "Esim" => [0x02A73],
  "Eta" => [0x00397],
  "Euml" => [0x000CB],
  "Exists" => [0x02203],
  "ExponentialE" => [0x02147],
  "Fcy" => [0x00424],
  "Ffr" => [0x1D509],
  "FilledSmallSquare" => [0x025FC],
  "FilledVerySmallSquare" => [0x025AA],
  "Fopf" => [0x1D53D],
  "ForAll" => [0x02200],
  "Fouriertrf" => [0x02131],
  "Fscr" => [0x02131],
  "GJcy" => [0x00403],
  "GT" => [0x0003E],
  "Gamma" => [0x00393],
  "Gammad" => [0x003DC],
  "Gbreve" => [0x0011E],
  "Gcedil" => [0x00122],
  "Gcirc" => [0x0011C],
  "Gcy" => [0x00413],
  "Gdot" => [0x00120],
  "Gfr" => [0x1D50A],
  "Gg" => [0x022D9],
  "Gopf" => [0x1D53E],
  "GreaterEqual" => [0x02265],
  "GreaterEqualLess" => [0x022DB],
  "GreaterFullEqual" => [0x02267],
  "GreaterGreater" => [0x02AA2],
  "GreaterLess" => [0x02277],
  "GreaterSlantEqual" => [0x02A7E],
  "GreaterTilde" => [0x02273],
  "Gscr" => [0x1D4A2],
  "Gt" => [0x0226B],
  "HARDcy" => [0x0042A],
  "Hacek" => [0x002C7],
  "Hat" => [0x0005E],
  "Hcirc" => [0x00124],
  "Hfr" => [0x0210C],
  "HilbertSpace" => [0x0210B],
  "Hopf" => [0x0210D],
  "HorizontalLine" => [0x02500],
  "Hscr" => [0x0210B],
  "Hstrok" => [0x00126],
  "HumpDownHump" => [0x0224E],
  "HumpEqual" => [0x0224F],
  "IEcy" => [0x00415],
  "IJlig" => [0x00132],
  "IOcy" => [0x00401],
  "Iacute" => [0x000CD],
  "Icirc" => [0x000CE],
  "Icy" => [0x00418],
  "Idot" => [0x00130],
  "Ifr" => [0x02111],
  "Igrave" => [0x000CC],
  "Im" => [0x02111],
  "Imacr" => [0x0012A],
  "ImaginaryI" => [0x02148],
  "Implies" => [0x021D2],
  "Int" => [0x0222C],
  "Integral" => [0x0222B],
  "Intersection" => [0x022C2],
  "InvisibleComma" => [0x02063],
  "InvisibleTimes" => [0x02062],
  "Iogon" => [0x0012E],
  "Iopf" => [0x1D540],
  "Iota" => [0x00399],
  "Iscr" => [0x02110],
  "Itilde" => [0x00128],
  "Iukcy" => [0x00406],
  "Iuml" => [0x000CF],
  "Jcirc" => [0x00134],
  "Jcy" => [0x00419],
  "Jfr" => [0x1D50D],
  "Jopf" => [0x1D541],
  "Jscr" => [0x1D4A5],
  "Jsercy" => [0x00408],
  "Jukcy" => [0x00404],
  "KHcy" => [0x00425],
  "KJcy" => [0x0040C],
  "Kappa" => [0x0039A],
  "Kcedil" => [0x00136],
  "Kcy" => [0x0041A],
  "Kfr" => [0x1D50E],
  "Kopf" => [0x1D542],
  "Kscr" => [0x1D4A6],
  "LJcy" => [0x00409],
  "LT" => [0x0003C],
  "Lacute" => [0x00139],
  "Lambda" => [0x0039B],
  "Lang" => [0x027EA],
  "Laplacetrf" => [0x02112],
  "Larr" => [0x0219E],
  "Lcaron" => [0x0013D],
  "Lcedil" => [0x0013B],
  "Lcy" => [0x0041B],
  "LeftAngleBracket" => [0x027E8],
  "LeftArrow" => [0x02190],
  "LeftArrowBar" => [0x021E4],
  "LeftArrowRightArrow" => [0x021C6],
  "LeftCeiling" => [0x02308],
  "LeftDoubleBracket" => [0x027E6],
  "LeftDownTeeVector" => [0x02961],
  "LeftDownVector" => [0x021C3],
  "LeftDownVectorBar" => [0x02959],
  "LeftFloor" => [0x0230A],
  "LeftRightArrow" => [0x02194],
  "LeftRightVector" => [0x0294E],
  "LeftTee" => [0x022A3],
  "LeftTeeArrow" => [0x021A4],
  "LeftTeeVector" => [0x0295A],
  "LeftTriangle" => [0x022B2],
  "LeftTriangleBar" => [0x029CF],
  "LeftTriangleEqual" => [0x022B4],
  "LeftUpDownVector" => [0x02951],
  "LeftUpTeeVector" => [0x02960],
  "LeftUpVector" => [0x021BF],
  "LeftUpVectorBar" => [0x02958],
  "LeftVector" => [0x021BC],
  "LeftVectorBar" => [0x02952],
  "Leftarrow" => [0x021D0],
  "Leftrightarrow" => [0x021D4],
  "LessEqualGreater" => [0x022DA],
  "LessFullEqual" => [0x02266],
  "LessGreater" => [0x02276],
  "LessLess" => [0x02AA1],
  "LessSlantEqual" => [0x02A7D],
  "LessTilde" => [0x02272],
  "Lfr" => [0x1D50F],
  "Ll" => [0x022D8],
  "Lleftarrow" => [0x021DA],
  "Lmidot" => [0x0013F],
  "LongLeftArrow" => [0x027F5],
  "LongLeftRightArrow" => [0x027F7],
  "LongRightArrow" => [0x027F6],
  "Longleftarrow" => [0x027F8],
  "Longleftrightarrow" => [0x027FA],
  "Longrightarrow" => [0x027F9],
  "Lopf" => [0x1D543],
  "LowerLeftArrow" => [0x02199],
  "LowerRightArrow" => [0x02198],
  "Lscr" => [0x02112],
  "Lsh" => [0x021B0],
  "Lstrok" => [0x00141],
  "Lt" => [0x0226A],
  "Map" => [0x02905],
  "Mcy" => [0x0041C],
  "MediumSpace" => [0x0205F],
  "Mellintrf" => [0x02133],
  "Mfr" => [0x1D510],
  "MinusPlus" => [0x02213],
  "Mopf" => [0x1D544],
  "Mscr" => [0x02133],
  "Mu" => [0x0039C],
  "NJcy" => [0x0040A],
  "Nacute" => [0x00143],
  "Ncaron" => [0x00147],
  "Ncedil" => [0x00145],
  "Ncy" => [0x0041D],
  "NegativeMediumSpace" => [0x0200B],
  "NegativeThickSpace" => [0x0200B],
  "NegativeThinSpace" => [0x0200B],
  "NegativeVeryThinSpace" => [0x0200B],
  "NestedGreaterGreater" => [0x0226B],
  "NestedLessLess" => [0x0226A],
  "NewLine" => [0x0000A],
  "Nfr" => [0x1D511],
  "NoBreak" => [0x02060],
  "NonBreakingSpace" => [0x000A0],
  "Nopf" => [0x02115],
  "Not" => [0x02AEC],
  "NotCongruent" => [0x02262],
  "NotCupCap" => [0x0226D],
  "NotDoubleVerticalBar" => [0x02226],
  "NotElement" => [0x02209],
  "NotEqual" => [0x02260],
  "NotEqualTilde" => [0x02242, 0x00338],
  "NotExists" => [0x02204],
  "NotGreater" => [0x0226F],
  "NotGreaterEqual" => [0x02271],
  "NotGreaterFullEqual" => [0x02267, 0x00338],
  "NotGreaterGreater" => [0x0226B, 0x00338],
  "NotGreaterLess" => [0x02279],
  "NotGreaterSlantEqual" => [0x02A7E, 0x00338],
  "NotGreaterTilde" => [0x02275],
  "NotHumpDownHump" => [0x0224E, 0x00338],
  "NotHumpEqual" => [0x0224F, 0x00338],
  "NotLeftTriangle" => [0x022EA],
  "NotLeftTriangleBar" => [0x029CF, 0x00338],
  "NotLeftTriangleEqual" => [0x022EC],
  "NotLess" => [0x0226E],
  "NotLessEqual" => [0x02270],
  "NotLessGreater" => [0x02278],
  "NotLessLess" => [0x0226A, 0x00338],
  "NotLessSlantEqual" => [0x02A7D, 0x00338],
  "NotLessTilde" => [0x02274],
  "NotNestedGreaterGreater" => [0x02AA2, 0x00338],
  "NotNestedLessLess" => [0x02AA1, 0x00338],
  "NotPrecedes" => [0x02280],
  "NotPrecedesEqual" => [0x02AAF, 0x00338],
  "NotPrecedesSlantEqual" => [0x022E0],
  "NotReverseElement" => [0x0220C],
  "NotRightTriangle" => [0x022EB],
  "NotRightTriangleBar" => [0x029D0, 0x00338],
  "NotRightTriangleEqual" => [0x022ED],
  "NotSquareSubset" => [0x0228F, 0x00338],
  "NotSquareSubsetEqual" => [0x022E2],
  "NotSquareSuperset" => [0x02290, 0x00338],
  "NotSquareSupersetEqual" => [0x022E3],
  "NotSubset" => [0x02282, 0x020D2],
  "NotSubsetEqual" => [0x02288],
  "NotSucceeds" => [0x02281],
  "NotSucceedsEqual" => [0x02AB0, 0x00338],
  "NotSucceedsSlantEqual" => [0x022E1],
  "NotSucceedsTilde" => [0x0227F, 0x00338],
  "NotSuperset" => [0x02283, 0x020D2],
  "NotSupersetEqual" => [0x02289],
  "NotTilde" => [0x02241],
  "NotTildeEqual" => [0x02244],
  "NotTildeFullEqual" => [0x02247],
  "NotTildeTilde" => [0x02249],
  "NotVerticalBar" => [0x02224],
  "Nscr" => [0x1D4A9],
  "Ntilde" => [0x000D1],
  "Nu" => [0x0039D],
  "OElig" => [0x00152],
  "Oacute" => [0x000D3],
  "Ocirc" => [0x000D4],
  "Ocy" => [0x0041E],
  "Odblac" => [0x00150],
  "Ofr" => [0x1D512],
  "Ograve" => [0x000D2],
  "Omacr" => [0x0014C],
  "Omega" => [0x003A9],
  "Omicron" => [0x0039F],
  "Oopf" => [0x1D546],
  "OpenCurlyDoubleQuote" => [0x0201C],
  "OpenCurlyQuote" => [0x02018],
  "Or" => [0x02A54],
  "Oscr" => [0x1D4AA],
  "Oslash" => [0x000D8],
  "Otilde" => [0x000D5],
  "Otimes" => [0x02A37],
  "Ouml" => [0x000D6],
  "OverBar" => [0x0203E],
  "OverBrace" => [0x023DE],
  "OverBracket" => [0x023B4],
  "OverParenthesis" => [0x023DC],
  "PartialD" => [0x02202],
  "Pcy" => [0x0041F],
  "Pfr" => [0x1D513],
  "Phi" => [0x003A6],
  "Pi" => [0x003A0],
  "PlusMinus" => [0x000B1],
  "Poincareplane" => [0x0210C],
  "Popf" => [0x02119],
  "Pr" => [0x02ABB],
  "Precedes" => [0x0227A],
  "PrecedesEqual" => [0x02AAF],
  "PrecedesSlantEqual" => [0x0227C],
  "PrecedesTilde" => [0x0227E],
  "Prime" => [0x02033],
  "Product" => [0x0220F],
  "Proportion" => [0x02237],
  "Proportional" => [0x0221D],
  "Pscr" => [0x1D4AB],
  "Psi" => [0x003A8],
  "QUOT" => [0x00022],
  "Qfr" => [0x1D514],
  "Qopf" => [0x0211A],
  "Qscr" => [0x1D4AC],
  "RBarr" => [0x02910],
  "REG" => [0x000AE],
  "Racute" => [0x00154],
  "Rang" => [0x027EB],
  "Rarr" => [0x021A0],
  "Rarrtl" => [0x02916],
  "Rcaron" => [0x00158],
  "Rcedil" => [0x00156],
  "Rcy" => [0x00420],
  "Re" => [0x0211C],
  "ReverseElement" => [0x0220B],
  "ReverseEquilibrium" => [0x021CB],
  "ReverseUpEquilibrium" => [0x0296F],
  "Rfr" => [0x0211C],
  "Rho" => [0x003A1],
  "RightAngleBracket" => [0x027E9],
  "RightArrow" => [0x02192],
  "RightArrowBar" => [0x021E5],
  "RightArrowLeftArrow" => [0x021C4],
  "RightCeiling" => [0x02309],
  "RightDoubleBracket" => [0x027E7],
  "RightDownTeeVector" => [0x0295D],
  "RightDownVector" => [0x021C2],
  "RightDownVectorBar" => [0x02955],
  "RightFloor" => [0x0230B],
  "RightTee" => [0x022A2],
  "RightTeeArrow" => [0x021A6],
  "RightTeeVector" => [0x0295B],
  "RightTriangle" => [0x022B3],
  "RightTriangleBar" => [0x029D0],
  "RightTriangleEqual" => [0x022B5],
  "RightUpDownVector" => [0x0294F],
  "RightUpTeeVector" => [0x0295C],
  "RightUpVector" => [0x021BE],
  "RightUpVectorBar" => [0x02954],
  "RightVector" => [0x021C0],
  "RightVectorBar" => [0x02953],
  "Rightarrow" => [0x021D2],
  "Ropf" => [0x0211D],
  "RoundImplies" => [0x02970],
  "Rrightarrow" => [0x021DB],
  "Rscr" => [0x0211B],
  "Rsh" => [0x021B1],
  "RuleDelayed" => [0x029F4],
  "SHCHcy" => [0x00429],
  "SHcy" => [0x00428],
  "SOFTcy" => [0x0042C],
  "Sacute" => [0x0015A],
  "Sc" => [0x02ABC],
  "Scaron" => [0x00160],
  "Scedil" => [0x0015E],
  "Scirc" => [0x0015C],
  "Scy" => [0x00421],
  "Sfr" => [0x1D516],
  "ShortDownArrow" => [0x02193],
  "ShortLeftArrow" => [0x02190],
  "ShortRightArrow" => [0x02192],
  "ShortUpArrow" => [0x02191],
  "Sigma" => [0x003A3],
  "SmallCircle" => [0x02218],
  "Sopf" => [0x1D54A],
  "Sqrt" => [0x0221A],
  "Square" => [0x025A1],
  "SquareIntersection" => [0x02293],
  "SquareSubset" => [0x0228F],
  "SquareSubsetEqual" => [0x02291],
  "SquareSuperset" => [0x02290],
  "SquareSupersetEqual" => [0x02292],
  "SquareUnion" => [0x02294],
  "Sscr" => [0x1D4AE],
  "Star" => [0x022C6],
  "Sub" => [0x022D0],
  "Subset" => [0x022D0],
  "SubsetEqual" => [0x02286],
  "Succeeds" => [0x0227B],
  "SucceedsEqual" => [0x02AB0],
  "SucceedsSlantEqual" => [0x0227D],
  "SucceedsTilde" => [0x0227F],
  "SuchThat" => [0x0220B],
  "Sum" => [0x02211],
  "Sup" => [0x022D1],
  "Superset" => [0x02283],
  "SupersetEqual" => [0x02287],
  "Supset" => [0x022D1],
  "THORN" => [0x000DE],
  "TRADE" => [0x02122],
  "TSHcy" => [0x0040B],
  "TScy" => [0x00426],
  "Tab" => [0x00009],
  "Tau" => [0x003A4],
  "Tcaron" => [0x00164],
  "Tcedil" => [0x00162],
  "Tcy" => [0x00422],
  "Tfr" => [0x1D517],
  "Therefore" => [0x02234],
  "Theta" => [0x00398],
  "ThickSpace" => [0x0205F, 0x0200A],
  "ThinSpace" => [0x02009],
  "Tilde" => [0x0223C],
  "TildeEqual" => [0x02243],
  "TildeFullEqual" => [0x02245],
  "TildeTilde" => [0x02248],
  "Topf" => [0x1D54B],
  "TripleDot" => [0x020DB],
  "Tscr" => [0x1D4AF],
  "Tstrok" => [0x00166],
  "Uacute" => [0x000DA],
  "Uarr" => [0x0219F],
  "Uarrocir" => [0x02949],
  "Ubrcy" => [0x0040E],
  "Ubreve" => [0x0016C],
  "Ucirc" => [0x000DB],
  "Ucy" => [0x00423],
  "Udblac" => [0x00170],
  "Ufr" => [0x1D518],
  "Ugrave" => [0x000D9],
  "Umacr" => [0x0016A],
  "UnderBar" => [0x0005F],
  "UnderBrace" => [0x023DF],
  "UnderBracket" => [0x023B5],
  "UnderParenthesis" => [0x023DD],
  "Union" => [0x022C3],
  "UnionPlus" => [0x0228E],
  "Uogon" => [0x00172],
  "Uopf" => [0x1D54C],
  "UpArrow" => [0x02191],
  "UpArrowBar" => [0x02912],
  "UpArrowDownArrow" => [0x021C5],
  "UpDownArrow" => [0x02195],
  "UpEquilibrium" => [0x0296E],
  "UpTee" => [0x022A5],
  "UpTeeArrow" => [0x021A5],
  "Uparrow" => [0x021D1],
  "Updownarrow" => [0x021D5],
  "UpperLeftArrow" => [0x02196],
  "UpperRightArrow" => [0x02197],
  "Upsi" => [0x003D2],
  "Upsilon" => [0x003A5],
  "Uring" => [0x0016E],
  "Uscr" => [0x1D4B0],
  "Utilde" => [0x00168],
  "Uuml" => [0x000DC],
  "VDash" => [0x022AB],
  "Vbar" => [0x02AEB],
  "Vcy" => [0x00412],
  "Vdash" => [0x022A9],
  "Vdashl" => [0x02AE6],
  "Vee" => [0x022C1],
  "Verbar" => [0x02016],
  "Vert" => [0x02016],
  "VerticalBar" => [0x02223],
  "VerticalLine" => [0x0007C],
  "VerticalSeparator" => [0x02758],
  "VerticalTilde" => [0x02240],
  "VeryThinSpace" => [0x0200A],
  "Vfr" => [0x1D519],
  "Vopf" => [0x1D54D],
  "Vscr" => [0x1D4B1],
  "Vvdash" => [0x022AA],
  "Wcirc" => [0x00174],
  "Wedge" => [0x022C0],
  "Wfr" => [0x1D51A],
  "Wopf" => [0x1D54E],
  "Wscr" => [0x1D4B2],
  "Xfr" => [0x1D51B],
  "Xi" => [0x0039E],
  "Xopf" => [0x1D54F],
  "Xscr" => [0x1D4B3],
  "YAcy" => [0x0042F],
  "YIcy" => [0x00407],
  "YUcy" => [0x0042E],
  "Yacute" => [0x000DD],
  "Ycirc" => [0x00176],
  "Ycy" => [0x0042B],
  "Yfr" => [0x1D51C],
  "Yopf" => [0x1D550],
  "Yscr" => [0x1D4B4],
  "Yuml" => [0x00178],
  "ZHcy" => [0x00416],
  "Zacute" => [0x00179],
  "Zcaron" => [0x0017D],
  "Zcy" => [0x00417],
  "Zdot" => [0x0017B],
  "ZeroWidthSpace" => [0x0200B],
  "Zeta" => [0x00396],
  "Zfr" => [0x02128],
  "Zopf" => [0x02124],
  "Zscr" => [0x1D4B5],
  "aacute" => [0x000E1],
  "abreve" => [0x00103],
  "ac" => [0x0223E],
  "acE" => [0x0223E, 0x00333],
  "acd" => [0x0223F],
  "acirc" => [0x000E2],
  "acute" => [0x000B4],
  "acy" => [0x00430],
  "aelig" => [0x000E6],
  "af" => [0x02061],
  "afr" => [0x1D51E],
  "agrave" => [0x000E0],
  "alefsym" => [0x02135],
  "aleph" => [0x02135],
  "alpha" => [0x003B1],
  "amacr" => [0x00101],
  "amalg" => [0x02A3F],
  "amp" => [0x00026],
  "and" => [0x02227],
  "andand" => [0x02A55],
  "andd" => [0x02A5C],
  "andslope" => [0x02A58],
  "andv" => [0x02A5A],
  "ang" => [0x02220],
  "ange" => [0x029A4],
  "angle" => [0x02220],
  "angmsd" => [0x02221],
  "angmsdaa" => [0x029A8],
  "angmsdab" => [0x029A9],
  "angmsdac" => [0x029AA],
  "angmsdad" => [0x029AB],
  "angmsdae" => [0x029AC],
  "angmsdaf" => [0x029AD],
  "angmsdag" => [0x029AE],
  "angmsdah" => [0x029AF],
  "angrt" => [0x0221F],
  "angrtvb" => [0x022BE],
  "angrtvbd" => [0x0299D],
  "angsph" => [0x02222],
  "angst" => [0x000C5],
  "angzarr" => [0x0237C],
  "aogon" => [0x00105],
  "aopf" => [0x1D552],
  "ap" => [0x02248],
  "apE" => [0x02A70],
  "apacir" => [0x02A6F],
  "ape" => [0x0224A],
  "apid" => [0x0224B],
  "apos" => [0x00027],
  "approx" => [0x02248],
  "approxeq" => [0x0224A],
  "aring" => [0x000E5],
  "ascr" => [0x1D4B6],
  "ast" => [0x0002A],
  "asymp" => [0x02248],
  "asympeq" => [0x0224D],
  "atilde" => [0x000E3],
  "auml" => [0x000E4],
  "awconint" => [0x02233],
  "awint" => [0x02A11],
  "bNot" => [0x02AED],
  "backcong" => [0x0224C],
  "backepsilon" => [0x003F6],
  "backprime" => [0x02035],
  "backsim" => [0x0223D],
  "backsimeq" => [0x022CD],
  "barvee" => [0x022BD],
  "barwed" => [0x02305],
  "barwedge" => [0x02305],
  "bbrk" => [0x023B5],
  "bbrktbrk" => [0x023B6],
  "bcong" => [0x0224C],
  "bcy" => [0x00431],
  "bdquo" => [0x0201E],
  "becaus" => [0x02235],
  "because" => [0x02235],
  "bemptyv" => [0x029B0],
  "bepsi" => [0x003F6],
  "bernou" => [0x0212C],
  "beta" => [0x003B2],
  "beth" => [0x02136],
  "between" => [0x0226C],
  "bfr" => [0x1D51F],
  "bigcap" => [0x022C2],
  "bigcirc" => [0x025EF],
  "bigcup" => [0x022C3],
  "bigodot" => [0x02A00],
  "bigoplus" => [0x02A01],
  "bigotimes" => [0x02A02],
  "bigsqcup" => [0x02A06],
  "bigstar" => [0x02605],
  "bigtriangledown" => [0x025BD],
  "bigtriangleup" => [0x025B3],
  "biguplus" => [0x02A04],
  "bigvee" => [0x022C1],
  "bigwedge" => [0x022C0],
  "bkarow" => [0x0290D],
  "blacklozenge" => [0x029EB],
  "blacksquare" => [0x025AA],
  "blacktriangle" => [0x025B4],
  "blacktriangledown" => [0x025BE],
  "blacktriangleleft" => [0x025C2],
  "blacktriangleright" => [0x025B8],
  "blank" => [0x02423],
  "blk12" => [0x02592],
  "blk14" => [0x02591],
  "blk34" => [0x02593],
  "block" => [0x02588],
  "bne" => [0x0003D, 0x020E5],
  "bnequiv" => [0x02261, 0x020E5],
  "bnot" => [0x02310],
  "bopf" => [0x1D553],
  "bot" => [0x022A5],
  "bottom" => [0x022A5],
  "bowtie" => [0x022C8],
  "boxDL" => [0x02557],
  "boxDR" => [0x02554],
  "boxDl" => [0x02556],
  "boxDr" => [0x02553],
  "boxH" => [0x02550],
  "boxHD" => [0x02566],
  "boxHU" => [0x02569],
  "boxHd" => [0x02564],
  "boxHu" => [0x02567],
  "boxUL" => [0x0255D],
  "boxUR" => [0x0255A],
  "boxUl" => [0x0255C],
  "boxUr" => [0x02559],
  "boxV" => [0x02551],
  "boxVH" => [0x0256C],
  "boxVL" => [0x02563],
  "boxVR" => [0x02560],
  "boxVh" => [0x0256B],
  "boxVl" => [0x02562],
  "boxVr" => [0x0255F],
  "boxbox" => [0x029C9],
  "boxdL" => [0x02555],
  "boxdR" => [0x02552],
  "boxdl" => [0x02510],
  "boxdr" => [0x0250C],
  "boxh" => [0x02500],
  "boxhD" => [0x02565],
  "boxhU" => [0x02568],
  "boxhd" => [0x0252C],
  "boxhu" => [0x02534],
  "boxminus" => [0x0229F],
  "boxplus" => [0x0229E],
  "boxtimes" => [0x022A0],
  "boxuL" => [0x0255B],
  "boxuR" => [0x02558],
  "boxul" => [0x02518],
  "boxur" => [0x02514],
  "boxv" => [0x02502],
  "boxvH" => [0x0256A],
  "boxvL" => [0x02561],
  "boxvR" => [0x0255E],
  "boxvh" => [0x0253C],
  "boxvl" => [0x02524],
  "boxvr" => [0x0251C],
  "bprime" => [0x02035],
  "breve" => [0x002D8],
  "brvbar" => [0x000A6],
  "bscr" => [0x1D4B7],
  "bsemi" => [0x0204F],
  "bsim" => [0x0223D],
  "bsime" => [0x022CD],
  "bsol" => [0x0005C],
  "bsolb" => [0x029C5],
  "bsolhsub" => [0x027C8],
  "bull" => [0x02022],
  "bullet" => [0x02022],
  "bump" => [0x0224E],
  "bumpE" => [0x02AAE],
  "bumpe" => [0x0224F],
  "bumpeq" => [0x0224F],
  "cacute" => [0x00107],
  "cap" => [0x02229],
  "capand" => [0x02A44],
  "capbrcup" => [0x02A49],
  "capcap" => [0x02A4B],
  "capcup" => [0x02A47],
  "capdot" => [0x02A40],
  "caps" => [0x02229, 0x0FE00],
  "caret" => [0x02041],
  "caron" => [0x002C7],
  "ccaps" => [0x02A4D],
  "ccaron" => [0x0010D],
  "ccedil" => [0x000E7],
  "ccirc" => [0x00109],
  "ccups" => [0x02A4C],
  "ccupssm" => [0x02A50],
  "cdot" => [0x0010B],
  "cedil" => [0x000B8],
  "cemptyv" => [0x029B2],
  "cent" => [0x000A2],
  "centerdot" => [0x000B7],
  "cfr" => [0x1D520],
  "chcy" => [0x00447],
  "check" => [0x02713],
  "checkmark" => [0x02713],
  "chi" => [0x003C7],
  "cir" => [0x025CB],
  "cirE" => [0x029C3],
  "circ" => [0x002C6],
  "circeq" => [0x02257],
  "circlearrowleft" => [0x021BA],
  "circlearrowright" => [0x021BB],
  "circledR" => [0x000AE],
  "circledS" => [0x024C8],
  "circledast" => [0x0229B],
  "circledcirc" => [0x0229A],
  "circleddash" => [0x0229D],
  "cire" => [0x02257],
  "cirfnint" => [0x02A10],
  "cirmid" => [0x02AEF],
  "cirscir" => [0x029C2],
  "clubs" => [0x02663],
  "clubsuit" => [0x02663],
  "colon" => [0x0003A],
  "colone" => [0x02254],
  "coloneq" => [0x02254],
  "comma" => [0x0002C],
  "commat" => [0x00040],
  "comp" => [0x02201],
  "compfn" => [0x02218],
  "complement" => [0x02201],
  "complexes" => [0x02102],
  "cong" => [0x02245],
  "congdot" => [0x02A6D],
  "conint" => [0x0222E],
  "copf" => [0x1D554],
  "coprod" => [0x02210],
  "copy" => [0x000A9],
  "copysr" => [0x02117],
  "crarr" => [0x021B5],
  "cross" => [0x02717],
  "cscr" => [0x1D4B8],
  "csub" => [0x02ACF],
  "csube" => [0x02AD1],
  "csup" => [0x02AD0],
  "csupe" => [0x02AD2],
  "ctdot" => [0x022EF],
  "cudarrl" => [0x02938],
  "cudarrr" => [0x02935],
  "cuepr" => [0x022DE],
  "cuesc" => [0x022DF],
  "cularr" => [0x021B6],
  "cularrp" => [0x0293D],
  "cup" => [0x0222A],
  "cupbrcap" => [0x02A48],
  "cupcap" => [0x02A46],
  "cupcup" => [0x02A4A],
  "cupdot" => [0x0228D],
  "cupor" => [0x02A45],
  "cups" => [0x0222A, 0x0FE00],
  "curarr" => [0x021B7],
  "curarrm" => [0x0293C],
  "curlyeqprec" => [0x022DE],
  "curlyeqsucc" => [0x022DF],
  "curlyvee" => [0x022CE],
  "curlywedge" => [0x022CF],
  "curren" => [0x000A4],
  "curvearrowleft" => [0x021B6],
  "curvearrowright" => [0x021B7],
  "cuvee" => [0x022CE],
  "cuwed" => [0x022CF],
  "cwconint" => [0x02232],
  "cwint" => [0x02231],
  "cylcty" => [0x0232D],
  "dArr" => [0x021D3],
  "dHar" => [0x02965],
  "dagger" => [0x02020],
  "daleth" => [0x02138],
  "darr" => [0x02193],
  "dash" => [0x02010],
  "dashv" => [0x022A3],
  "dbkarow" => [0x0290F],
  "dblac" => [0x002DD],
  "dcaron" => [0x0010F],
  "dcy" => [0x00434],
  "dd" => [0x02146],
  "ddagger" => [0x02021],
  "ddarr" => [0x021CA],
  "ddotseq" => [0x02A77],
  "deg" => [0x000B0],
  "delta" => [0x003B4],
  "demptyv" => [0x029B1],
  "dfisht" => [0x0297F],
  "dfr" => [0x1D521],
  "dharl" => [0x021C3],
  "dharr" => [0x021C2],
  "diam" => [0x022C4],
  "diamond" => [0x022C4],
  "diamondsuit" => [0x02666],
  "diams" => [0x02666],
  "die" => [0x000A8],
  "digamma" => [0x003DD],
  "disin" => [0x022F2],
  "div" => [0x000F7],
  "divide" => [0x000F7],
  "divideontimes" => [0x022C7],
  "divonx" => [0x022C7],
  "djcy" => [0x00452],
  "dlcorn" => [0x0231E],
  "dlcrop" => [0x0230D],
  "dollar" => [0x00024],
  "dopf" => [0x1D555],
  "dot" => [0x002D9],
  "doteq" => [0x02250],
  "doteqdot" => [0x02251],
  "dotminus" => [0x02238],
  "dotplus" => [0x02214],
  "dotsquare" => [0x022A1],
  "doublebarwedge" => [0x02306],
  "downarrow" => [0x02193],
  "downdownarrows" => [0x021CA],
  "downharpoonleft" => [0x021C3],
  "downharpoonright" => [0x021C2],
  "drbkarow" => [0x02910],
  "drcorn" => [0x0231F],
  "drcrop" => [0x0230C],
  "dscr" => [0x1D4B9],
  "dscy" => [0x00455],
  "dsol" => [0x029F6],
  "dstrok" => [0x00111],
  "dtdot" => [0x022F1],
  "dtri" => [0x025BF],
  "dtrif" => [0x025BE],
  "duarr" => [0x021F5],
  "duhar" => [0x0296F],
  "dwangle" => [0x029A6],
  "dzcy" => [0x0045F],
  "dzigrarr" => [0x027FF],
  "eDDot" => [0x02A77],
  "eDot" => [0x02251],
  "eacute" => [0x000E9],
  "easter" => [0x02A6E],
  "ecaron" => [0x0011B],
  "ecir" => [0x02256],
  "ecirc" => [0x000EA],
  "ecolon" => [0x02255],
  "ecy" => [0x0044D],
  "edot" => [0x00117],
  "ee" => [0x02147],
  "efDot" => [0x02252],
  "efr" => [0x1D522],
  "eg" => [0x02A9A],
  "egrave" => [0x000E8],
  "egs" => [0x02A96],
  "egsdot" => [0x02A98],
  "el" => [0x02A99],
  "elinters" => [0x023E7],
  "ell" => [0x02113],
  "els" => [0x02A95],
  "elsdot" => [0x02A97],
  "emacr" => [0x00113],
  "empty" => [0x02205],
  "emptyset" => [0x02205],
  "emptyv" => [0x02205],
  "emsp" => [0x02003],
  "emsp13" => [0x02004],
  "emsp14" => [0x02005],
  "eng" => [0x0014B],
  "ensp" => [0x02002],
  "eogon" => [0x00119],
  "eopf" => [0x1D556],
  "epar" => [0x022D5],
  "eparsl" => [0x029E3],
  "eplus" => [0x02A71],
  "epsi" => [0x003B5],
  "epsilon" => [0x003B5],
  "epsiv" => [0x003F5],
  "eqcirc" => [0x02256],
  "eqcolon" => [0x02255],
  "eqsim" => [0x02242],
  "eqslantgtr" => [0x02A96],
  "eqslantless" => [0x02A95],
  "equals" => [0x0003D],
  "equest" => [0x0225F],
  "equiv" => [0x02261],
  "equivDD" => [0x02A78],
  "eqvparsl" => [0x029E5],
  "erDot" => [0x02253],
  "erarr" => [0x02971],
  "escr" => [0x0212F],
  "esdot" => [0x02250],
  "esim" => [0x02242],
  "eta" => [0x003B7],
  "eth" => [0x000F0],
  "euml" => [0x000EB],
  "euro" => [0x020AC],
  "excl" => [0x00021],
  "exist" => [0x02203],
  "expectation" => [0x02130],
  "exponentiale" => [0x02147],
  "fallingdotseq" => [0x02252],
  "fcy" => [0x00444],
  "female" => [0x02640],
  "ffilig" => [0x0FB03],
  "fflig" => [0x0FB00],
  "ffllig" => [0x0FB04],
  "ffr" => [0x1D523],
  "filig" => [0x0FB01],
  "fjlig" => [0x00066, 0x0006A],
  "flat" => [0x0266D],
  "fllig" => [0x0FB02],
  "fltns" => [0x025B1],
  "fnof" => [0x00192],
  "fopf" => [0x1D557],
  "forall" => [0x02200],
  "fork" => [0x022D4],
  "forkv" => [0x02AD9],
  "fpartint" => [0x02A0D],
  "frac12" => [0x000BD],
  "frac13" => [0x02153],
  "frac14" => [0x000BC],
  "frac15" => [0x02155],
  "frac16" => [0x02159],
  "frac18" => [0x0215B],
  "frac23" => [0x02154],
  "frac25" => [0x02156],
  "frac34" => [0x000BE],
  "frac35" => [0x02157],
  "frac38" => [0x0215C],
  "frac45" => [0x02158],
  "frac56" => [0x0215A],
  "frac58" => [0x0215D],
  "frac78" => [0x0215E],
  "frasl" => [0x02044],
  "frown" => [0x02322],
  "fscr" => [0x1D4BB],
  "gE" => [0x02267],
  "gEl" => [0x02A8C],
  "gacute" => [0x001F5],
  "gamma" => [0x003B3],
  "gammad" => [0x003DD],
  "gap" => [0x02A86],
  "gbreve" => [0x0011F],
  "gcirc" => [0x0011D],
  "gcy" => [0x00433],
  "gdot" => [0x00121],
  "ge" => [0x02265],
  "gel" => [0x022DB],
  "geq" => [0x02265],
  "geqq" => [0x02267],
  "geqslant" => [0x02A7E],
  "ges" => [0x02A7E],
  "gescc" => [0x02AA9],
  "gesdot" => [0x02A80],
  "gesdoto" => [0x02A82],
  "gesdotol" => [0x02A84],
  "gesl" => [0x022DB, 0x0FE00],
  "gesles" => [0x02A94],
  "gfr" => [0x1D524],
  "gg" => [0x0226B],
  "ggg" => [0x022D9],
  "gimel" => [0x02137],
  "gjcy" => [0x00453],
  "gl" => [0x02277],
  "glE" => [0x02A92],
  "gla" => [0x02AA5],
  "glj" => [0x02AA4],
  "gnE" => [0x02269],
  "gnap" => [0x02A8A],
  "gnapprox" => [0x02A8A],
  "gne" => [0x02A88],
  "gneq" => [0x02A88],
  "gneqq" => [0x02269],
  "gnsim" => [0x022E7],
  "gopf" => [0x1D558],
  "grave" => [0x00060],
  "gscr" => [0x0210A],
  "gsim" => [0x02273],
  "gsime" => [0x02A8E],
  "gsiml" => [0x02A90],
  "gt" => [0x0003E],
  "gtcc" => [0x02AA7],
  "gtcir" => [0x02A7A],
  "gtdot" => [0x022D7],
  "gtlPar" => [0x02995],
  "gtquest" => [0x02A7C],
  "gtrapprox" => [0x02A86],
  "gtrarr" => [0x02978],
  "gtrdot" => [0x022D7],
  "gtreqless" => [0x022DB],
  "gtreqqless" => [0x02A8C],
  "gtrless" => [0x02277],
  "gtrsim" => [0x02273],
  "gvertneqq" => [0x02269, 0x0FE00],
  "gvnE" => [0x02269, 0x0FE00],
  "hArr" => [0x021D4],
  "hairsp" => [0x0200A],
  "half" => [0x000BD],
  "hamilt" => [0x0210B],
  "hardcy" => [0x0044A],
  "harr" => [0x02194],
  "harrcir" => [0x02948],
  "harrw" => [0x021AD],
  "hbar" => [0x0210F],
  "hcirc" => [0x00125],
  "hearts" => [0x02665],
  "heartsuit" => [0x02665],
  "hellip" => [0x02026],
  "hercon" => [0x022B9],
  "hfr" => [0x1D525],
  "hksearow" => [0x02925],
  "hkswarow" => [0x02926],
  "hoarr" => [0x021FF],
  "homtht" => [0x0223B],
  "hookleftarrow" => [0x021A9],
  "hookrightarrow" => [0x021AA],
  "hopf" => [0x1D559],
  "horbar" => [0x02015],
  "hscr" => [0x1D4BD],
  "hslash" => [0x0210F],
  "hstrok" => [0x00127],
  "hybull" => [0x02043],
  "hyphen" => [0x02010],
  "iacute" => [0x000ED],
  "ic" => [0x02063],
  "icirc" => [0x000EE],
  "icy" => [0x00438],
  "iecy" => [0x00435],
  "iexcl" => [0x000A1],
  "iff" => [0x021D4],
  "ifr" => [0x1D526],
  "igrave" => [0x000EC],
  "ii" => [0x02148],
  "iiiint" => [0x02A0C],
  "iiint" => [0x0222D],
  "iinfin" => [0x029DC],
  "iiota" => [0x02129],
  "ijlig" => [0x00133],
  "imacr" => [0x0012B],
  "image" => [0x02111],
  "imagline" => [0x02110],
  "imagpart" => [0x02111],
  "imath" => [0x00131],
  "imof" => [0x022B7],
  "imped" => [0x001B5],
  "in" => [0x02208],
  "incare" => [0x02105],
  "infin" => [0x0221E],
  "infintie" => [0x029DD],
  "inodot" => [0x00131],
  "int" => [0x0222B],
  "intcal" => [0x022BA],
  "integers" => [0x02124],
  "intercal" => [0x022BA],
  "intlarhk" => [0x02A17],
  "intprod" => [0x02A3C],
  "iocy" => [0x00451],
  "iogon" => [0x0012F],
  "iopf" => [0x1D55A],
  "iota" => [0x003B9],
  "iprod" => [0x02A3C],
  "iquest" => [0x000BF],
  "iscr" => [0x1D4BE],
  "isin" => [0x02208],
  "isinE" => [0x022F9],
  "isindot" => [0x022F5],
  "isins" => [0x022F4],
  "isinsv" => [0x022F3],
  "isinv" => [0x02208],
  "it" => [0x02062],
  "itilde" => [0x00129],
  "iukcy" => [0x00456],
  "iuml" => [0x000EF],
  "jcirc" => [0x00135],
  "jcy" => [0x00439],
  "jfr" => [0x1D527],
  "jmath" => [0x00237],
  "jopf" => [0x1D55B],
  "jscr" => [0x1D4BF],
  "jsercy" => [0x00458],
  "jukcy" => [0x00454],
  "kappa" => [0x003BA],
  "kappav" => [0x003F0],
  "kcedil" => [0x00137],
  "kcy" => [0x0043A],
  "kfr" => [0x1D528],
  "kgreen" => [0x00138],
  "khcy" => [0x00445],
  "kjcy" => [0x0045C],
  "kopf" => [0x1D55C],
  "kscr" => [0x1D4C0],
  "lAarr" => [0x021DA],
  "lArr" => [0x021D0],
  "lAtail" => [0x0291B],
  "lBarr" => [0x0290E],
  "lE" => [0x02266],
  "lEg" => [0x02A8B],
  "lHar" => [0x02962],
  "lacute" => [0x0013A],
  "laemptyv" => [0x029B4],
  "lagran" => [0x02112],
  "lambda" => [0x003BB],
  "lang" => [0x027E8],
  "langd" => [0x02991],
  "langle" => [0x027E8],
  "lap" => [0x02A85],
  "laquo" => [0x000AB],
  "larr" => [0x02190],
  "larrb" => [0x021E4],
  "larrbfs" => [0x0291F],
  "larrfs" => [0x0291D],
  "larrhk" => [0x021A9],
  "larrlp" => [0x021AB],
  "larrpl" => [0x02939],
  "larrsim" => [0x02973],
  "larrtl" => [0x021A2],
  "lat" => [0x02AAB],
  "latail" => [0x02919],
  "late" => [0x02AAD],
  "lates" => [0x02AAD, 0x0FE00],
  "lbarr" => [0x0290C],
  "lbbrk" => [0x02772],
  "lbrace" => [0x0007B],
  "lbrack" => [0x0005B],
  "lbrke" => [0x0298B],
  "lbrksld" => [0x0298F],
  "lbrkslu" => [0x0298D],
  "lcaron" => [0x0013E],
  "lcedil" => [0x0013C],
  "lceil" => [0x02308],
  "lcub" => [0x0007B],
  "lcy" => [0x0043B],
  "ldca" => [0x02936],
  "ldquo" => [0x0201C],
  "ldquor" => [0x0201E],
  "ldrdhar" => [0x02967],
  "ldrushar" => [0x0294B],
  "ldsh" => [0x021B2],
  "le" => [0x02264],
  "leftarrow" => [0x02190],
  "leftarrowtail" => [0x021A2],
  "leftharpoondown" => [0x021BD],
  "leftharpoonup" => [0x021BC],
  "leftleftarrows" => [0x021C7],
  "leftrightarrow" => [0x02194],
  "leftrightarrows" => [0x021C6],
  "leftrightharpoons" => [0x021CB],
  "leftrightsquigarrow" => [0x021AD],
  "leftthreetimes" => [0x022CB],
  "leg" => [0x022DA],
  "leq" => [0x02264],
  "leqq" => [0x02266],
  "leqslant" => [0x02A7D],
  "les" => [0x02A7D],
  "lescc" => [0x02AA8],
  "lesdot" => [0x02A7F],
  "lesdoto" => [0x02A81],
  "lesdotor" => [0x02A83],
  "lesg" => [0x022DA, 0x0FE00],
  "lesges" => [0x02A93],
  "lessapprox" => [0x02A85],
  "lessdot" => [0x022D6],
  "lesseqgtr" => [0x022DA],
  "lesseqqgtr" => [0x02A8B],
  "lessgtr" => [0x02276],
  "lesssim" => [0x02272],
  "lfisht" => [0x0297C],
  "lfloor" => [0x0230A],
  "lfr" => [0x1D529],
  "lg" => [0x02276],
  "lgE" => [0x02A91],
  "lhard" => [0x021BD],
  "lharu" => [0x021BC],
  "lharul" => [0x0296A],
  "lhblk" => [0x02584],
  "ljcy" => [0x00459],
  "ll" => [0x0226A],
  "llarr" => [0x021C7],
  "llcorner" => [0x0231E],
  "llhard" => [0x0296B],
  "lltri" => [0x025FA],
  "lmidot" => [0x00140],
  "lmoust" => [0x023B0],
  "lmoustache" => [0x023B0],
  "lnE" => [0x02268],
  "lnap" => [0x02A89],
  "lnapprox" => [0x02A89],
  "lne" => [0x02A87],
  "lneq" => [0x02A87],
  "lneqq" => [0x02268],
  "lnsim" => [0x022E6],
  "loang" => [0x027EC],
  "loarr" => [0x021FD],
  "lobrk" => [0x027E6],
  "longleftarrow" => [0x027F5],
  "longleftrightarrow" => [0x027F7],
  "longmapsto" => [0x027FC],
  "longrightarrow" => [0x027F6],
  "looparrowleft" => [0x021AB],
  "looparrowright" => [0x021AC],
  "lopar" => [0x02985],
  "lopf" => [0x1D55D],
  "loplus" => [0x02A2D],
  "lotimes" => [0x02A34],
  "lowast" => [0x02217],
  "lowbar" => [0x0005F],
  "loz" => [0x025CA],
  "lozenge" => [0x025CA],
  "lozf" => [0x029EB],
  "lpar" => [0x00028],
  "lparlt" => [0x02993],
  "lrarr" => [0x021C6],
  "lrcorner" => [0x0231F],
  "lrhar" => [0x021CB],
  "lrhard" => [0x0296D],
  "lrm" => [0x0200E],
  "lrtri" => [0x022BF],
  "lsaquo" => [0x02039],
  "lscr" => [0x1D4C1],
  "lsh" => [0x021B0],
  "lsim" => [0x02272],
  "lsime" => [0x02A8D],
  "lsimg" => [0x02A8F],
  "lsqb" => [0x0005B],
  "lsquo" => [0x02018],
  "lsquor" => [0x0201A],
  "lstrok" => [0x00142],
  "lt" => [0x0003C],
  "ltcc" => [0x02AA6],
  "ltcir" => [0x02A79],
  "ltdot" => [0x022D6],
  "lthree" => [0x022CB],
  "ltimes" => [0x022C9],
  "ltlarr" => [0x02976],
  "ltquest" => [0x02A7B],
  "ltrPar" => [0x02996],
  "ltri" => [0x025C3],
  "ltrie" => [0x022B4],
  "ltrif" => [0x025C2],
  "lurdshar" => [0x0294A],
  "luruhar" => [0x02966],
  "lvertneqq" => [0x02268, 0x0FE00],
  "lvnE" => [0x02268, 0x0FE00],
  "mDDot" => [0x0223A],
  "macr" => [0x000AF],
  "male" => [0x02642],
  "malt" => [0x02720],
  "maltese" => [0x02720],
  "map" => [0x021A6],
  "mapsto" => [0x021A6],
  "mapstodown" => [0x021A7],
  "mapstoleft" => [0x021A4],
  "mapstoup" => [0x021A5],
  "marker" => [0x025AE],
  "mcomma" => [0x02A29],
  "mcy" => [0x0043C],
  "mdash" => [0x02014],
  "measuredangle" => [0x02221],
  "mfr" => [0x1D52A],
  "mho" => [0x02127],
  "micro" => [0x000B5],
  "mid" => [0x02223],
  "midast" => [0x0002A],
  "midcir" => [0x02AF0],
  "middot" => [0x000B7],
  "minus" => [0x02212],
  "minusb" => [0x0229F],
  "minusd" => [0x02238],
  "minusdu" => [0x02A2A],
  "mlcp" => [0x02ADB],
  "mldr" => [0x02026],
  "mnplus" => [0x02213],
  "models" => [0x022A7],
  "mopf" => [0x1D55E],
  "mp" => [0x02213],
  "mscr" => [0x1D4C2],
  "mstpos" => [0x0223E],
  "mu" => [0x003BC],
  "multimap" => [0x022B8],
  "mumap" => [0x022B8],
  "nGg" => [0x022D9, 0x00338],
  "nGt" => [0x0226B, 0x020D2],
  "nGtv" => [0x0226B, 0x00338],
  "nLeftarrow" => [0x021CD],
  "nLeftrightarrow" => [0x021CE],
  "nLl" => [0x022D8, 0x00338],
  "nLt" => [0x0226A, 0x020D2],
  "nLtv" => [0x0226A, 0x00338],
  "nRightarrow" => [0x021CF],
  "nVDash" => [0x022AF],
  "nVdash" => [0x022AE],
  "nabla" => [0x02207],
  "nacute" => [0x00144],
  "nang" => [0x02220, 0x020D2],
  "nap" => [0x02249],
  "napE" => [0x02A70, 0x00338],
  "napid" => [0x0224B, 0x00338],
  "napos" => [0x00149],
  "napprox" => [0x02249],
  "natur" => [0x0266E],
  "natural" => [0x0266E],
  "naturals" => [0x02115],
  "nbsp" => [0x000A0],
  "nbump" => [0x0224E, 0x00338],
  "nbumpe" => [0x0224F, 0x00338],
  "ncap" => [0x02A43],
  "ncaron" => [0x00148],
  "ncedil" => [0x00146],
  "ncong" => [0x02247],
  "ncongdot" => [0x02A6D, 0x00338],
  "ncup" => [0x02A42],
  "ncy" => [0x0043D],
  "ndash" => [0x02013],
  "ne" => [0x02260],
  "neArr" => [0x021D7],
  "nearhk" => [0x02924],
  "nearr" => [0x02197],
  "nearrow" => [0x02197],
  "nedot" => [0x02250, 0x00338],
  "nequiv" => [0x02262],
  "nesear" => [0x02928],
  "nesim" => [0x02242, 0x00338],
  "nexist" => [0x02204],
  "nexists" => [0x02204],
  "nfr" => [0x1D52B],
  "ngE" => [0x02267, 0x00338],
  "nge" => [0x02271],
  "ngeq" => [0x02271],
  "ngeqq" => [0x02267, 0x00338],
  "ngeqslant" => [0x02A7E, 0x00338],
  "nges" => [0x02A7E, 0x00338],
  "ngsim" => [0x02275],
  "ngt" => [0x0226F],
  "ngtr" => [0x0226F],
  "nhArr" => [0x021CE],
  "nharr" => [0x021AE],
  "nhpar" => [0x02AF2],
  "ni" => [0x0220B],
  "nis" => [0x022FC],
  "nisd" => [0x022FA],
  "niv" => [0x0220B],
  "njcy" => [0x0045A],
  "nlArr" => [0x021CD],
  "nlE" => [0x02266, 0x00338],
  "nlarr" => [0x0219A],
  "nldr" => [0x02025],
  "nle" => [0x02270],
  "nleftarrow" => [0x0219A],
  "nleftrightarrow" => [0x021AE],
  "nleq" => [0x02270],
  "nleqq" => [0x02266, 0x00338],
  "nleqslant" => [0x02A7D, 0x00338],
  "nles" => [0x02A7D, 0x00338],
  "nless" => [0x0226E],
  "nlsim" => [0x02274],
  "nlt" => [0x0226E],
  "nltri" => [0x022EA],
  "nltrie" => [0x022EC],
  "nmid" => [0x02224],
  "nopf" => [0x1D55F],
  "not" => [0x000AC],
  "notin" => [0x02209],
  "notinE" => [0x022F9, 0x00338],
  "notindot" => [0x022F5, 0x00338],
  "notinva" => [0x02209],
  "notinvb" => [0x022F7],
  "notinvc" => [0x022F6],
  "notni" => [0x0220C],
  "notniva" => [0x0220C],
  "notnivb" => [0x022FE],
  "notnivc" => [0x022FD],
  "npar" => [0x02226],
  "nparallel" => [0x02226],
  "nparsl" => [0x02AFD, 0x020E5],
  "npart" => [0x02202, 0x00338],
  "npolint" => [0x02A14],
  "npr" => [0x02280],
  "nprcue" => [0x022E0],
  "npre" => [0x02AAF, 0x00338],
  "nprec" => [0x02280],
  "npreceq" => [0x02AAF, 0x00338],
  "nrArr" => [0x021CF],
  "nrarr" => [0x0219B],
  "nrarrc" => [0x02933, 0x00338],
  "nrarrw" => [0x0219D, 0x00338],
  "nrightarrow" => [0x0219B],
  "nrtri" => [0x022EB],
  "nrtrie" => [0x022ED],
  "nsc" => [0x02281],
  "nsccue" => [0x022E1],
  "nsce" => [0x02AB0, 0x00338],
  "nscr" => [0x1D4C3],
  "nshortmid" => [0x02224],
  "nshortparallel" => [0x02226],
  "nsim" => [0x02241],
  "nsime" => [0x02244],
  "nsimeq" => [0x02244],
  "nsmid" => [0x02224],
  "nspar" => [0x02226],
  "nsqsube" => [0x022E2],
  "nsqsupe" => [0x022E3],
  "nsub" => [0x02284],
  "nsubE" => [0x02AC5, 0x00338],
  "nsube" => [0x02288],
  "nsubset" => [0x02282, 0x020D2],
  "nsubseteq" => [0x02288],
  "nsubseteqq" => [0x02AC5, 0x00338],
  "nsucc" => [0x02281],
  "nsucceq" => [0x02AB0, 0x00338],
  "nsup" => [0x02285],
  "nsupE" => [0x02AC6, 0x00338],
  "nsupe" => [0x02289],
  "nsupset" => [0x02283, 0x020D2],
  "nsupseteq" => [0x02289],
  "nsupseteqq" => [0x02AC6, 0x00338],
  "ntgl" => [0x02279],
  "ntilde" => [0x000F1],
  "ntlg" => [0x02278],
  "ntriangleleft" => [0x022EA],
  "ntrianglelefteq" => [0x022EC],
  "ntriangleright" => [0x022EB],
  "ntrianglerighteq" => [0x022ED],
  "nu" => [0x003BD],
  "num" => [0x00023],
  "numero" => [0x02116],
  "numsp" => [0x02007],
  "nvDash" => [0x022AD],
  "nvHarr" => [0x02904],
  "nvap" => [0x0224D, 0x020D2],
  "nvdash" => [0x022AC],
  "nvge" => [0x02265, 0x020D2],
  "nvgt" => [0x0003E, 0x020D2],
  "nvinfin" => [0x029DE],
  "nvlArr" => [0x02902],
  "nvle" => [0x02264, 0x020D2],
  "nvlt" => [0x0003C, 0x020D2],
  "nvltrie" => [0x022B4, 0x020D2],
  "nvrArr" => [0x02903],
  "nvrtrie" => [0x022B5, 0x020D2],
  "nvsim" => [0x0223C, 0x020D2],
  "nwArr" => [0x021D6],
  "nwarhk" => [0x02923],
  "nwarr" => [0x02196],
  "nwarrow" => [0x02196],
  "nwnear" => [0x02927],
  "oS" => [0x024C8],
  "oacute" => [0x000F3],
  "oast" => [0x0229B],
  "ocir" => [0x0229A],
  "ocirc" => [0x000F4],
  "ocy" => [0x0043E],
  "odash" => [0x0229D],
  "odblac" => [0x00151],
  "odiv" => [0x02A38],
  "odot" => [0x02299],
  "odsold" => [0x029BC],
  "oelig" => [0x00153],
  "ofcir" => [0x029BF],
  "ofr" => [0x1D52C],
  "ogon" => [0x002DB],
  "ograve" => [0x000F2],
  "ogt" => [0x029C1],
  "ohbar" => [0x029B5],
  "ohm" => [0x003A9],
  "oint" => [0x0222E],
  "olarr" => [0x021BA],
  "olcir" => [0x029BE],
  "olcross" => [0x029BB],
  "oline" => [0x0203E],
  "olt" => [0x029C0],
  "omacr" => [0x0014D],
  "omega" => [0x003C9],
  "omicron" => [0x003BF],
  "omid" => [0x029B6],
  "ominus" => [0x02296],
  "oopf" => [0x1D560],
  "opar" => [0x029B7],
  "operp" => [0x029B9],
  "oplus" => [0x02295],
  "or" => [0x02228],
  "orarr" => [0x021BB],
  "ord" => [0x02A5D],
  "order" => [0x02134],
  "orderof" => [0x02134],
  "ordf" => [0x000AA],
  "ordm" => [0x000BA],
  "origof" => [0x022B6],
  "oror" => [0x02A56],
  "orslope" => [0x02A57],
  "orv" => [0x02A5B],
  "oscr" => [0x02134],
  "oslash" => [0x000F8],
  "osol" => [0x02298],
  "otilde" => [0x000F5],
  "otimes" => [0x02297],
  "otimesas" => [0x02A36],
  "ouml" => [0x000F6],
  "ovbar" => [0x0233D],
  "par" => [0x02225],
  "para" => [0x000B6],
  "parallel" => [0x02225],
  "parsim" => [0x02AF3],
  "parsl" => [0x02AFD],
  "part" => [0x02202],
  "pcy" => [0x0043F],
  "percnt" => [0x00025],
  "period" => [0x0002E],
  "permil" => [0x02030],
  "perp" => [0x022A5],
  "pertenk" => [0x02031],
  "pfr" => [0x1D52D],
  "phi" => [0x003C6],
  "phiv" => [0x003D5],
  "phmmat" => [0x02133],
  "phone" => [0x0260E],
  "pi" => [0x003C0],
  "pitchfork" => [0x022D4],
  "piv" => [0x003D6],
  "planck" => [0x0210F],
  "planckh" => [0x0210E],
  "plankv" => [0x0210F],
  "plus" => [0x0002B],
  "plusacir" => [0x02A23],
  "plusb" => [0x0229E],
  "pluscir" => [0x02A22],
  "plusdo" => [0x02214],
  "plusdu" => [0x02A25],
  "pluse" => [0x02A72],
  "plusmn" => [0x000B1],
  "plussim" => [0x02A26],
  "plustwo" => [0x02A27],
  "pm" => [0x000B1],
  "pointint" => [0x02A15],
  "popf" => [0x1D561],
  "pound" => [0x000A3],
  "pr" => [0x0227A],
  "prE" => [0x02AB3],
  "prap" => [0x02AB7],
  "prcue" => [0x0227C],
  "pre" => [0x02AAF],
  "prec" => [0x0227A],
  "precapprox" => [0x02AB7],
  "preccurlyeq" => [0x0227C],
  "preceq" => [0x02AAF],
  "precnapprox" => [0x02AB9],
  "precneqq" => [0x02AB5],
  "precnsim" => [0x022E8],
  "precsim" => [0x0227E],
  "prime" => [0x02032],
  "primes" => [0x02119],
  "prnE" => [0x02AB5],
  "prnap" => [0x02AB9],
  "prnsim" => [0x022E8],
  "prod" => [0x0220F],
  "profalar" => [0x0232E],
  "profline" => [0x02312],
  "profsurf" => [0x02313],
  "prop" => [0x0221D],
  "propto" => [0x0221D],
  "prsim" => [0x0227E],
  "prurel" => [0x022B0],
  "pscr" => [0x1D4C5],
  "psi" => [0x003C8],
  "puncsp" => [0x02008],
  "qfr" => [0x1D52E],
  "qint" => [0x02A0C],
  "qopf" => [0x1D562],
  "qprime" => [0x02057],
  "qscr" => [0x1D4C6],
  "quaternions" => [0x0210D],
  "quatint" => [0x02A16],
  "quest" => [0x0003F],
  "questeq" => [0x0225F],
  "quot" => [0x00022],
  "rAarr" => [0x021DB],
  "rArr" => [0x021D2],
  "rAtail" => [0x0291C],
  "rBarr" => [0x0290F],
  "rHar" => [0x02964],
  "race" => [0x0223D, 0x00331],
  "racute" => [0x00155],
  "radic" => [0x0221A],
  "raemptyv" => [0x029B3],
  "rang" => [0x027E9],
  "rangd" => [0x02992],
  "range" => [0x029A5],
  "rangle" => [0x027E9],
  "raquo" => [0x000BB],
  "rarr" => [0x02192],
  "rarrap" => [0x02975],
  "rarrb" => [0x021E5],
  "rarrbfs" => [0x02920],
  "rarrc" => [0x02933],
  "rarrfs" => [0x0291E],
  "rarrhk" => [0x021AA],
  "rarrlp" => [0x021AC],
  "rarrpl" => [0x02945],
  "rarrsim" => [0x02974],
  "rarrtl" => [0x021A3],
  "rarrw" => [0x0219D],
  "ratail" => [0x0291A],
  "ratio" => [0x02236],
  "rationals" => [0x0211A],
  "rbarr" => [0x0290D],
  "rbbrk" => [0x02773],
  "rbrace" => [0x0007D],
  "rbrack" => [0x0005D],
  "rbrke" => [0x0298C],
  "rbrksld" => [0x0298E],
  "rbrkslu" => [0x02990],
  "rcaron" => [0x00159],
  "rcedil" => [0x00157],
  "rceil" => [0x02309],
  "rcub" => [0x0007D],
  "rcy" => [0x00440],
  "rdca" => [0x02937],
  "rdldhar" => [0x02969],
  "rdquo" => [0x0201D],
  "rdquor" => [0x0201D],
  "rdsh" => [0x021B3],
  "real" => [0x0211C],
  "realine" => [0x0211B],
  "realpart" => [0x0211C],
  "reals" => [0x0211D],
  "rect" => [0x025AD],
  "reg" => [0x000AE],
  "rfisht" => [0x0297D],
  "rfloor" => [0x0230B],
  "rfr" => [0x1D52F],
  "rhard" => [0x021C1],
  "rharu" => [0x021C0],
  "rharul" => [0x0296C],
  "rho" => [0x003C1],
  "rhov" => [0x003F1],
  "rightarrow" => [0x02192],
  "rightarrowtail" => [0x021A3],
  "rightharpoondown" => [0x021C1],
  "rightharpoonup" => [0x021C0],
  "rightleftarrows" => [0x021C4],
  "rightleftharpoons" => [0x021CC],
  "rightrightarrows" => [0x021C9],
  "rightsquigarrow" => [0x0219D],
  "rightthreetimes" => [0x022CC],
  "ring" => [0x002DA],
  "risingdotseq" => [0x02253],
  "rlarr" => [0x021C4],
  "rlhar" => [0x021CC],
  "rlm" => [0x0200F],
  "rmoust" => [0x023B1],
  "rmoustache" => [0x023B1],
  "rnmid" => [0x02AEE],
  "roang" => [0x027ED],
  "roarr" => [0x021FE],
  "robrk" => [0x027E7],
  "ropar" => [0x02986],
  "ropf" => [0x1D563],
  "roplus" => [0x02A2E],
  "rotimes" => [0x02A35],
  "rpar" => [0x00029],
  "rpargt" => [0x02994],
  "rppolint" => [0x02A12],
  "rrarr" => [0x021C9],
  "rsaquo" => [0x0203A],
  "rscr" => [0x1D4C7],
  "rsh" => [0x021B1],
  "rsqb" => [0x0005D],
  "rsquo" => [0x02019],
  "rsquor" => [0x02019],
  "rthree" => [0x022CC],
  "rtimes" => [0x022CA],
  "rtri" => [0x025B9],
  "rtrie" => [0x022B5],
  "rtrif" => [0x025B8],
  "rtriltri" => [0x029CE],
  "ruluhar" => [0x02968],
  "rx" => [0x0211E],
  "sacute" => [0x0015B],
  "sbquo" => [0x0201A],
  "sc" => [0x0227B],
  "scE" => [0x02AB4],
  "scap" => [0x02AB8],
  "scaron" => [0x00161],
  "sccue" => [0x0227D],
  "sce" => [0x02AB0],
  "scedil" => [0x0015F],
  "scirc" => [0x0015D],
  "scnE" => [0x02AB6],
  "scnap" => [0x02ABA],
  "scnsim" => [0x022E9],
  "scpolint" => [0x02A13],
  "scsim" => [0x0227F],
  "scy" => [0x00441],
  "sdot" => [0x022C5],
  "sdotb" => [0x022A1],
  "sdote" => [0x02A66],
  "seArr" => [0x021D8],
  "searhk" => [0x02925],
  "searr" => [0x02198],
  "searrow" => [0x02198],
  "sect" => [0x000A7],
  "semi" => [0x0003B],
  "seswar" => [0x02929],
  "setminus" => [0x02216],
  "setmn" => [0x02216],
  "sext" => [0x02736],
  "sfr" => [0x1D530],
  "sfrown" => [0x02322],
  "sharp" => [0x0266F],
  "shchcy" => [0x00449],
  "shcy" => [0x00448],
  "shortmid" => [0x02223],
  "shortparallel" => [0x02225],
  "shy" => [0x000AD],
  "sigma" => [0x003C3],
  "sigmaf" => [0x003C2],
  "sigmav" => [0x003C2],
  "sim" => [0x0223C],
  "simdot" => [0x02A6A],
  "sime" => [0x02243],
  "simeq" => [0x02243],
  "simg" => [0x02A9E],
  "simgE" => [0x02AA0],
  "siml" => [0x02A9D],
  "simlE" => [0x02A9F],
  "simne" => [0x02246],
  "simplus" => [0x02A24],
  "simrarr" => [0x02972],
  "slarr" => [0x02190],
  "smallsetminus" => [0x02216],
  "smashp" => [0x02A33],
  "smeparsl" => [0x029E4],
  "smid" => [0x02223],
  "smile" => [0x02323],
  "smt" => [0x02AAA],
  "smte" => [0x02AAC],
  "smtes" => [0x02AAC, 0x0FE00],
  "softcy" => [0x0044C],
  "sol" => [0x0002F],
  "solb" => [0x029C4],
  "solbar" => [0x0233F],
  "sopf" => [0x1D564],
  "spades" => [0x02660],
  "spadesuit" => [0x02660],
  "spar" => [0x02225],
  "sqcap" => [0x02293],
  "sqcaps" => [0x02293, 0x0FE00],
  "sqcup" => [0x02294],
  "sqcups" => [0x02294, 0x0FE00],
  "sqsub" => [0x0228F],
  "sqsube" => [0x02291],
  "sqsubset" => [0x0228F],
  "sqsubseteq" => [0x02291],
  "sqsup" => [0x02290],
  "sqsupe" => [0x02292],
  "sqsupset" => [0x02290],
  "sqsupseteq" => [0x02292],
  "squ" => [0x025A1],
  "square" => [0x025A1],
  "squarf" => [0x025AA],
  "squf" => [0x025AA],
  "srarr" => [0x02192],
  "sscr" => [0x1D4C8],
  "ssetmn" => [0x02216],
  "ssmile" => [0x02323],
  "sstarf" => [0x022C6],
  "star" => [0x02606],
  "starf" => [0x02605],
  "straightepsilon" => [0x003F5],
  "straightphi" => [0x003D5],
  "strns" => [0x000AF],
  "sub" => [0x02282],
  "subE" => [0x02AC5],
  "subdot" => [0x02ABD],
  "sube" => [0x02286],
  "subedot" => [0x02AC3],
  "submult" => [0x02AC1],
  "subnE" => [0x02ACB],
  "subne" => [0x0228A],
  "subplus" => [0x02ABF],
  "subrarr" => [0x02979],
  "subset" => [0x02282],
  "subseteq" => [0x02286],
  "subseteqq" => [0x02AC5],
  "subsetneq" => [0x0228A],
  "subsetneqq" => [0x02ACB],
  "subsim" => [0x02AC7],
  "subsub" => [0x02AD5],
  "subsup" => [0x02AD3],
  "succ" => [0x0227B],
  "succapprox" => [0x02AB8],
  "succcurlyeq" => [0x0227D],
  "succeq" => [0x02AB0],
  "succnapprox" => [0x02ABA],
  "succneqq" => [0x02AB6],
  "succnsim" => [0x022E9],
  "succsim" => [0x0227F],
  "sum" => [0x02211],
  "sung" => [0x0266A],
  "sup" => [0x02283],
  "sup1" => [0x000B9],
  "sup2" => [0x000B2],
  "sup3" => [0x000B3],
  "supE" => [0x02AC6],
  "supdot" => [0x02ABE],
  "supdsub" => [0x02AD8],
  "supe" => [0x02287],
  "supedot" => [0x02AC4],
  "suphsol" => [0x027C9],
  "suphsub" => [0x02AD7],
  "suplarr" => [0x0297B],
  "supmult" => [0x02AC2],
  "supnE" => [0x02ACC],
  "supne" => [0x0228B],
  "supplus" => [0x02AC0],
  "supset" => [0x02283],
  "supseteq" => [0x02287],
  "supseteqq" => [0x02AC6],
  "supsetneq" => [0x0228B],
  "supsetneqq" => [0x02ACC],
  "supsim" => [0x02AC8],
  "supsub" => [0x02AD4],
  "supsup" => [0x02AD6],
  "swArr" => [0x021D9],
  "swarhk" => [0x02926],
  "swarr" => [0x02199],
  "swarrow" => [0x02199],
  "swnwar" => [0x0292A],
  "szlig" => [0x000DF],
  "target" => [0x02316],
  "tau" => [0x003C4],
  "tbrk" => [0x023B4],
  "tcaron" => [0x00165],
  "tcedil" => [0x00163],
  "tcy" => [0x00442],
  "tdot" => [0x020DB],
  "telrec" => [0x02315],
  "tfr" => [0x1D531],
  "there4" => [0x02234],
  "therefore" => [0x02234],
  "theta" => [0x003B8],
  "thetasym" => [0x003D1],
  "thetav" => [0x003D1],
  "thickapprox" => [0x02248],
  "thicksim" => [0x0223C],
  "thinsp" => [0x02009],
  "thkap" => [0x02248],
  "thksim" => [0x0223C],
  "thorn" => [0x000FE],
  "tilde" => [0x002DC],
  "times" => [0x000D7],
  "timesb" => [0x022A0],
  "timesbar" => [0x02A31],
  "timesd" => [0x02A30],
  "tint" => [0x0222D],
  "toea" => [0x02928],
  "top" => [0x022A4],
  "topbot" => [0x02336],
  "topcir" => [0x02AF1],
  "topf" => [0x1D565],
  "topfork" => [0x02ADA],
  "tosa" => [0x02929],
  "tprime" => [0x02034],
  "trade" => [0x02122],
  "triangle" => [0x025B5],
  "triangledown" => [0x025BF],
  "triangleleft" => [0x025C3],
  "trianglelefteq" => [0x022B4],
  "triangleq" => [0x0225C],
  "triangleright" => [0x025B9],
  "trianglerighteq" => [0x022B5],
  "tridot" => [0x025EC],
  "trie" => [0x0225C],
  "triminus" => [0x02A3A],
  "triplus" => [0x02A39],
  "trisb" => [0x029CD],
  "tritime" => [0x02A3B],
  "trpezium" => [0x023E2],
  "tscr" => [0x1D4C9],
  "tscy" => [0x00446],
  "tshcy" => [0x0045B],
  "tstrok" => [0x00167],
  "twixt" => [0x0226C],
  "twoheadleftarrow" => [0x0219E],
  "twoheadrightarrow" => [0x021A0],
  "uArr" => [0x021D1],
  "uHar" => [0x02963],
  "uacute" => [0x000FA],
  "uarr" => [0x02191],
  "ubrcy" => [0x0045E],
  "ubreve" => [0x0016D],
  "ucirc" => [0x000FB],
  "ucy" => [0x00443],
  "udarr" => [0x021C5],
  "udblac" => [0x00171],
  "udhar" => [0x0296E],
  "ufisht" => [0x0297E],
  "ufr" => [0x1D532],
  "ugrave" => [0x000F9],
  "uharl" => [0x021BF],
  "uharr" => [0x021BE],
  "uhblk" => [0x02580],
  "ulcorn" => [0x0231C],
  "ulcorner" => [0x0231C],
  "ulcrop" => [0x0230F],
  "ultri" => [0x025F8],
  "umacr" => [0x0016B],
  "uml" => [0x000A8],
  "uogon" => [0x00173],
  "uopf" => [0x1D566],
  "uparrow" => [0x02191],
  "updownarrow" => [0x02195],
  "upharpoonleft" => [0x021BF],
  "upharpoonright" => [0x021BE],
  "uplus" => [0x0228E],
  "upsi" => [0x003C5],
  "upsih" => [0x003D2],
  "upsilon" => [0x003C5],
  "upuparrows" => [0x021C8],
  "urcorn" => [0x0231D],
  "urcorner" => [0x0231D],
  "urcrop" => [0x0230E],
  "uring" => [0x0016F],
  "urtri" => [0x025F9],
  "uscr" => [0x1D4CA],
  "utdot" => [0x022F0],
  "utilde" => [0x00169],
  "utri" => [0x025B5],
  "utrif" => [0x025B4],
  "uuarr" => [0x021C8],
  "uuml" => [0x000FC],
  "uwangle" => [0x029A7],
  "vArr" => [0x021D5],
  "vBar" => [0x02AE8],
  "vBarv" => [0x02AE9],
  "vDash" => [0x022A8],
  "vangrt" => [0x0299C],
  "varepsilon" => [0x003F5],
  "varkappa" => [0x003F0],
  "varnothing" => [0x02205],
  "varphi" => [0x003D5],
  "varpi" => [0x003D6],
  "varpropto" => [0x0221D],
  "varr" => [0x02195],
  "varrho" => [0x003F1],
  "varsigma" => [0x003C2],
  "varsubsetneq" => [0x0228A, 0x0FE00],
  "varsubsetneqq" => [0x02ACB, 0x0FE00],
  "varsupsetneq" => [0x0228B, 0x0FE00],
  "varsupsetneqq" => [0x02ACC, 0x0FE00],
  "vartheta" => [0x003D1],
  "vartriangleleft" => [0x022B2],
  "vartriangleright" => [0x022B3],
  "vcy" => [0x00432],
  "vdash" => [0x022A2],
  "vee" => [0x02228],
  "veebar" => [0x022BB],
  "veeeq" => [0x0225A],
  "vellip" => [0x022EE],
  "verbar" => [0x0007C],
  "vert" => [0x0007C],
  "vfr" => [0x1D533],
  "vltri" => [0x022B2],
  "vnsub" => [0x02282, 0x020D2],
  "vnsup" => [0x02283, 0x020D2],
  "vopf" => [0x1D567],
  "vprop" => [0x0221D],
  "vrtri" => [0x022B3],
  "vscr" => [0x1D4CB],
  "vsubnE" => [0x02ACB, 0x0FE00],
  "vsubne" => [0x0228A, 0x0FE00],
  "vsupnE" => [0x02ACC, 0x0FE00],
  "vsupne" => [0x0228B, 0x0FE00],
  "vzigzag" => [0x0299A],
  "wcirc" => [0x00175],
  "wedbar" => [0x02A5F],
  "wedge" => [0x02227],
  "wedgeq" => [0x02259],
  "weierp" => [0x02118],
  "wfr" => [0x1D534],
  "wopf" => [0x1D568],
  "wp" => [0x02118],
  "wr" => [0x02240],
  "wreath" => [0x02240],
  "wscr" => [0x1D4CC],
  "xcap" => [0x022C2],
  "xcirc" => [0x025EF],
  "xcup" => [0x022C3],
  "xdtri" => [0x025BD],
  "xfr" => [0x1D535],
  "xhArr" => [0x027FA],
  "xharr" => [0x027F7],
  "xi" => [0x003BE],
  "xlArr" => [0x027F8],
  "xlarr" => [0x027F5],
  "xmap" => [0x027FC],
  "xnis" => [0x022FB],
  "xodot" => [0x02A00],
  "xopf" => [0x1D569],
  "xoplus" => [0x02A01],
  "xotime" => [0x02A02],
  "xrArr" => [0x027F9],
  "xrarr" => [0x027F6],
  "xscr" => [0x1D4CD],
  "xsqcup" => [0x02A06],
  "xuplus" => [0x02A04],
  "xutri" => [0x025B3],
  "xvee" => [0x022C1],
  "xwedge" => [0x022C0],
  "yacute" => [0x000FD],
  "yacy" => [0x0044F],
  "ycirc" => [0x00177],
  "ycy" => [0x0044B],
  "yen" => [0x000A5],
  "yfr" => [0x1D536],
  "yicy" => [0x00457],
  "yopf" => [0x1D56A],
  "yscr" => [0x1D4CE],
  "yucy" => [0x0044E],
  "yuml" => [0x000FF],
  "zacute" => [0x0017A],
  "zcaron" => [0x0017E],
  "zcy" => [0x00437],
  "zdot" => [0x0017C],
  "zeetrf" => [0x02128],
  "zeta" => [0x003B6],
  "zfr" => [0x1D537],
  "zhcy" => [0x00436],
  "zigrarr" => [0x021DD],
  "zopf" => [0x1D56B],
  "zscr" => [0x1D4CF],
  "zwj" => [0x0200D],
  "zwnj" => [0x0200C],
}
PK)J[�V����/share/gems/gems/rdoc-6.10.0/lib/rdoc/comment.rbnu�[���# frozen_string_literal: true
##
# A comment holds the text comment for a RDoc::CodeObject and provides a
# unified way of cleaning it up and parsing it into an RDoc::Markup::Document.
#
# Each comment may have a different markup format set by #format=.  By default
# 'rdoc' is used.  The :markup: directive tells RDoc which format to use.
#
# See RDoc::MarkupReference@Directive+for+Specifying+RDoc+Source+Format.


class RDoc::Comment

  include RDoc::Text

  ##
  # The format of this comment.  Defaults to RDoc::Markup

  attr_reader :format

  ##
  # The RDoc::TopLevel this comment was found in

  attr_accessor :location

  ##
  # Line where this Comment was written

  attr_accessor :line

  ##
  # For duck-typing when merging classes at load time

  alias file location # :nodoc:

  ##
  # The text for this comment

  attr_reader :text

  ##
  # Alias for text

  alias to_s text

  ##
  # Overrides the content returned by #parse.  Use when there is no #text
  # source for this comment

  attr_writer   :document

  ##
  # Creates a new comment with +text+ that is found in the RDoc::TopLevel
  # +location+.

  def initialize text = nil, location = nil, language = nil
    @location = location
    @text     = text.nil? ? nil : text.dup
    @language = language

    @document   = nil
    @format     = 'rdoc'
    @normalized = false
  end

  ##
  #--
  # TODO deep copy @document

  def initialize_copy copy # :nodoc:
    @text = copy.text.dup
  end

  def == other # :nodoc:
    self.class === other and
      other.text == @text and other.location == @location
  end

  ##
  # Look for a 'call-seq' in the comment to override the normal parameter
  # handling.  The :call-seq: is indented from the baseline.  All lines of the
  # same indentation level and prefix are consumed.
  #
  # For example, all of the following will be used as the :call-seq:
  #
  #   # :call-seq:
  #   #   ARGF.readlines(sep=$/)     -> array
  #   #   ARGF.readlines(limit)      -> array
  #   #   ARGF.readlines(sep, limit) -> array
  #   #
  #   #   ARGF.to_a(sep=$/)     -> array
  #   #   ARGF.to_a(limit)      -> array
  #   #   ARGF.to_a(sep, limit) -> array

  def extract_call_seq method
    # we must handle situations like the above followed by an unindented first
    # comment.  The difficulty is to make sure not to match lines starting
    # with ARGF at the same indent, but that are after the first description
    # paragraph.
    if /^(?<S> ((?!\n)\s)*+        (?# whitespaces except newline))
         :?call-seq:
           (?<B> \g<S>(?<N>\n|\z)  (?# trailing spaces))?
         (?<seq>
           (\g<S>(?!\w)\S.*\g<N>)*
           (?>
             (?<H> \g<S>\w+        (?# ' #   ARGF' in the example above))
             .*\g<N>)?
           (\g<S>\S.*\g<N>         (?# other non-blank line))*+
           (\g<B>+(\k<H>.*\g<N>    (?# ARGF.to_a lines))++)*+
         )
         (?m:^\s*$|\z)
        /x =~ @text
      seq = $~[:seq]

      all_start, all_stop = $~.offset(0)
      @text.slice! all_start...all_stop

      seq.gsub!(/^\s*/, '')
      method.call_seq = seq
    end

    method
  end

  ##
  # A comment is empty if its text String is empty.

  def empty?
    @text.empty?
  end

  ##
  # HACK dubious

  def encode! encoding
    @text = String.new @text, encoding: encoding
    self
  end

  ##
  # Sets the format of this comment and resets any parsed document

  def format= format
    @format = format
    @document = nil
  end

  def inspect # :nodoc:
    location = @location ? @location.relative_name : '(unknown)'

    "#<%s:%x %s %p>" % [self.class, object_id, location, @text]
  end

  ##
  # Normalizes the text.  See RDoc::Text#normalize_comment for details

  def normalize
    return self unless @text
    return self if @normalized # TODO eliminate duplicate normalization

    @text = normalize_comment @text

    @normalized = true

    self
  end

  ##
  # Was this text normalized?

  def normalized? # :nodoc:
    @normalized
  end

  ##
  # Parses the comment into an RDoc::Markup::Document.  The parsed document is
  # cached until the text is changed.

  def parse
    return @document if @document

    @document = super @text, @format
    @document.file = @location
    @document
  end

  ##
  # Removes private sections from this comment.  Private sections are flush to
  # the comment marker and start with <tt>--</tt> and end with <tt>++</tt>.
  # For C-style comments, a private marker may not start at the opening of the
  # comment.
  #
  #   /*
  #    *--
  #    * private
  #    *++
  #    * public
  #    */

  def remove_private
    # Workaround for gsub encoding for Ruby 1.9.2 and earlier
    empty = ''
    empty = RDoc::Encoding.change_encoding empty, @text.encoding

    @text = @text.gsub(%r%^\s*([#*]?)--.*?^\s*(\1)\+\+\n?%m, empty)
    @text = @text.sub(%r%^\s*[#*]?--.*%m, '')
  end

  ##
  # Replaces this comment's text with +text+ and resets the parsed document.
  #
  # An error is raised if the comment contains a document but no text.

  def text= text
    raise RDoc::Error, 'replacing document-only comment is not allowed' if
      @text.nil? and @document

    @document = nil
    @text = text.nil? ? nil : text.dup
  end

  ##
  # Returns true if this comment is in TomDoc format.

  def tomdoc?
    @format == 'tomdoc'
  end

end
PK)J[r�,��(share/gems/gems/bundler-2.6.7/exe/bundlenuȯ��#!/opt/alt/ruby34/bin/ruby
# frozen_string_literal: true

# Exit cleanly from an early interrupt
Signal.trap("INT") do
  Bundler.ui.debug("\n#{caller.join("\n")}") if defined?(Bundler)
  exit 1
end

base_path = File.expand_path("../lib", __dir__)

if File.exist?(base_path)
  $LOAD_PATH.unshift(base_path)
end

require "bundler"

require "bundler/friendly_errors"

Bundler.with_friendly_errors do
  require "bundler/cli"

  # Allow any command to use --help flag to show help for that command
  help_flags = %w[--help -h]
  help_flag_used = ARGV.any? {|a| help_flags.include? a }
  args = help_flag_used ? Bundler::CLI.reformatted_help_args(ARGV) : ARGV

  Bundler::CLI.start(args, debug: true)
end
PK)J[��Q)cc)share/gems/gems/bundler-2.6.7/exe/bundlernuȯ��#!/opt/alt/ruby34/bin/ruby
# frozen_string_literal: true

load File.expand_path("bundle", __dir__)
PK)J[qʉz`z`,share/gems/gems/bundler-2.6.7/lib/bundler.rbnu�[���# frozen_string_literal: true

require_relative "bundler/vendored_fileutils"
require "pathname"
require "rbconfig"

require_relative "bundler/errors"
require_relative "bundler/environment_preserver"
require_relative "bundler/plugin"
require_relative "bundler/rubygems_ext"
require_relative "bundler/rubygems_integration"
require_relative "bundler/version"
require_relative "bundler/current_ruby"
require_relative "bundler/build_metadata"

# Bundler provides a consistent environment for Ruby projects by
# tracking and installing the exact gems and versions that are needed.
#
# Bundler is a part of Ruby's standard library.
#
# Bundler is used by creating _gemfiles_ listing all the project dependencies
# and (optionally) their versions and then using
#
#   require 'bundler/setup'
#
# or Bundler.setup to setup environment where only specified gems and their
# specified versions could be used.
#
# See {Bundler website}[https://bundler.io/docs.html] for extensive documentation
# on gemfiles creation and Bundler usage.
#
# As a standard library inside project, Bundler could be used for introspection
# of loaded and required modules.
#
module Bundler
  environment_preserver = EnvironmentPreserver.from_env
  ORIGINAL_ENV = environment_preserver.restore
  environment_preserver.replace_with_backup
  SUDO_MUTEX = Thread::Mutex.new

  autoload :Checksum,               File.expand_path("bundler/checksum", __dir__)
  autoload :CLI,                    File.expand_path("bundler/cli", __dir__)
  autoload :CIDetector,             File.expand_path("bundler/ci_detector", __dir__)
  autoload :CompactIndexClient,     File.expand_path("bundler/compact_index_client", __dir__)
  autoload :Definition,             File.expand_path("bundler/definition", __dir__)
  autoload :Dependency,             File.expand_path("bundler/dependency", __dir__)
  autoload :Deprecate,              File.expand_path("bundler/deprecate", __dir__)
  autoload :Digest,                 File.expand_path("bundler/digest", __dir__)
  autoload :Dsl,                    File.expand_path("bundler/dsl", __dir__)
  autoload :EndpointSpecification,  File.expand_path("bundler/endpoint_specification", __dir__)
  autoload :Env,                    File.expand_path("bundler/env", __dir__)
  autoload :Fetcher,                File.expand_path("bundler/fetcher", __dir__)
  autoload :FeatureFlag,            File.expand_path("bundler/feature_flag", __dir__)
  autoload :FREEBSD,                File.expand_path("bundler/constants", __dir__)
  autoload :GemHelper,              File.expand_path("bundler/gem_helper", __dir__)
  autoload :GemHelpers,             File.expand_path("bundler/gem_helpers", __dir__)
  autoload :GemVersionPromoter,     File.expand_path("bundler/gem_version_promoter", __dir__)
  autoload :Graph,                  File.expand_path("bundler/graph", __dir__)
  autoload :Index,                  File.expand_path("bundler/index", __dir__)
  autoload :Injector,               File.expand_path("bundler/injector", __dir__)
  autoload :Installer,              File.expand_path("bundler/installer", __dir__)
  autoload :LazySpecification,      File.expand_path("bundler/lazy_specification", __dir__)
  autoload :LockfileParser,         File.expand_path("bundler/lockfile_parser", __dir__)
  autoload :MatchRemoteMetadata,    File.expand_path("bundler/match_remote_metadata", __dir__)
  autoload :Materialization,        File.expand_path("bundler/materialization", __dir__)
  autoload :NULL,                   File.expand_path("bundler/constants", __dir__)
  autoload :ProcessLock,            File.expand_path("bundler/process_lock", __dir__)
  autoload :RemoteSpecification,    File.expand_path("bundler/remote_specification", __dir__)
  autoload :Resolver,               File.expand_path("bundler/resolver", __dir__)
  autoload :Retry,                  File.expand_path("bundler/retry", __dir__)
  autoload :RubyDsl,                File.expand_path("bundler/ruby_dsl", __dir__)
  autoload :RubyVersion,            File.expand_path("bundler/ruby_version", __dir__)
  autoload :Runtime,                File.expand_path("bundler/runtime", __dir__)
  autoload :SelfManager,            File.expand_path("bundler/self_manager", __dir__)
  autoload :Settings,               File.expand_path("bundler/settings", __dir__)
  autoload :SharedHelpers,          File.expand_path("bundler/shared_helpers", __dir__)
  autoload :Source,                 File.expand_path("bundler/source", __dir__)
  autoload :SourceList,             File.expand_path("bundler/source_list", __dir__)
  autoload :SourceMap,              File.expand_path("bundler/source_map", __dir__)
  autoload :SpecSet,                File.expand_path("bundler/spec_set", __dir__)
  autoload :StubSpecification,      File.expand_path("bundler/stub_specification", __dir__)
  autoload :UI,                     File.expand_path("bundler/ui", __dir__)
  autoload :URICredentialsFilter,   File.expand_path("bundler/uri_credentials_filter", __dir__)
  autoload :URINormalizer,          File.expand_path("bundler/uri_normalizer", __dir__)
  autoload :WINDOWS,                File.expand_path("bundler/constants", __dir__)
  autoload :SafeMarshal,            File.expand_path("bundler/safe_marshal", __dir__)

  class << self
    def configure
      @configure ||= configure_gem_home_and_path
    end

    def ui
      (defined?(@ui) && @ui) || (self.ui = UI::Shell.new)
    end

    def ui=(ui)
      Bundler.rubygems.ui = UI::RGProxy.new(ui)
      @ui = ui
    end

    # Returns absolute path of where gems are installed on the filesystem.
    def bundle_path
      @bundle_path ||= Pathname.new(configured_bundle_path.path).expand_path(root)
    end

    def create_bundle_path
      mkdir_p(bundle_path) unless bundle_path.exist?

      @bundle_path = bundle_path.realpath
    rescue Errno::EEXIST
      raise PathError, "Could not install to path `#{bundle_path}` " \
        "because a file already exists at that path. Either remove or rename the file so the directory can be created."
    end

    def configured_bundle_path
      @configured_bundle_path ||= settings.path.tap(&:validate!)
    end

    # Returns absolute location of where binstubs are installed to.
    def bin_path
      @bin_path ||= begin
        path = settings[:bin] || "bin"
        path = Pathname.new(path).expand_path(root).expand_path
        mkdir_p(path)
        path
      end
    end

    # Turns on the Bundler runtime. After +Bundler.setup+ call, all +load+ or
    # +require+ of the gems would be allowed only if they are part of
    # the Gemfile or Ruby's standard library. If the versions specified
    # in Gemfile, only those versions would be loaded.
    #
    # Assuming Gemfile
    #
    #    gem 'first_gem', '= 1.0'
    #    group :test do
    #      gem 'second_gem', '= 1.0'
    #    end
    #
    # The code using Bundler.setup works as follows:
    #
    #    require 'third_gem' # allowed, required from global gems
    #    require 'first_gem' # allowed, loads the last installed version
    #    Bundler.setup
    #    require 'fourth_gem' # fails with LoadError
    #    require 'second_gem' # loads exactly version 1.0
    #
    # +Bundler.setup+ can be called only once, all subsequent calls are no-op.
    #
    # If _groups_ list is provided, only gems from specified groups would
    # be allowed (gems specified outside groups belong to special +:default+ group).
    #
    # To require all gems from Gemfile (or only some groups), see Bundler.require.
    #
    def setup(*groups)
      # Return if all groups are already loaded
      return @setup if defined?(@setup) && @setup

      definition.validate_runtime!

      SharedHelpers.print_major_deprecations!

      if groups.empty?
        # Load all groups, but only once
        @setup = load.setup
      else
        load.setup(*groups)
      end
    end

    def auto_switch
      self_manager.restart_with_locked_bundler_if_needed
    end

    # Automatically install dependencies if Bundler.settings[:auto_install] exists.
    # This is set through config cmd `bundle config set --global auto_install 1`.
    #
    # Note that this method `nil`s out the global Definition object, so it
    # should be called first, before you instantiate anything like an
    # `Installer` that'll keep a reference to the old one instead.
    def auto_install
      return unless settings[:auto_install]

      begin
        definition.specs
      rescue GemNotFound, GitError
        ui.info "Automatically installing missing gems."
        reset!
        CLI::Install.new({}).run
        reset!
      end
    end

    # Setups Bundler environment (see Bundler.setup) if it is not already set,
    # and loads all gems from groups specified. Unlike ::setup, can be called
    # multiple times with different groups (if they were allowed by setup).
    #
    # Assuming Gemfile
    #
    #    gem 'first_gem', '= 1.0'
    #    group :test do
    #      gem 'second_gem', '= 1.0'
    #    end
    #
    # The code will work as follows:
    #
    #    Bundler.setup # allow all groups
    #    Bundler.require(:default) # requires only first_gem
    #    # ...later
    #    Bundler.require(:test)   # requires second_gem
    #
    def require(*groups)
      setup(*groups).require(*groups)
    end

    def load
      @load ||= Runtime.new(root, definition)
    end

    def environment
      SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", print_caller_location: true
      load
    end

    # Returns an instance of Bundler::Definition for given Gemfile and lockfile
    #
    # @param unlock [Hash, Boolean, nil] Gems that have been requested
    #   to be updated or true if all gems should be updated
    # @param lockfile [Pathname] Path to Gemfile.lock
    # @return [Bundler::Definition]
    def definition(unlock = nil, lockfile = default_lockfile)
      @definition = nil if unlock
      @definition ||= begin
        configure
        Definition.build(default_gemfile, lockfile, unlock)
      end
    end

    def frozen_bundle?
      frozen = settings[:frozen]
      return frozen unless frozen.nil?

      settings[:deployment]
    end

    def locked_gems
      @locked_gems ||=
        if defined?(@definition) && @definition
          definition.locked_gems
        elsif Bundler.default_lockfile.file?
          lock = Bundler.read_file(Bundler.default_lockfile)
          LockfileParser.new(lock)
        end
    end

    def ruby_scope
      "#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
    end

    def user_home
      @user_home ||= begin
        home = Bundler.rubygems.user_home
        bundle_home = home ? File.join(home, ".bundle") : nil

        warning = if home.nil?
          "Your home directory is not set."
        elsif !File.directory?(home)
          "`#{home}` is not a directory."
        elsif !File.writable?(home) && (!File.directory?(bundle_home) || !File.writable?(bundle_home))
          "`#{home}` is not writable."
        end

        if warning
          Bundler.ui.warn "#{warning}\n"
          user_home = tmp_home_path
          Bundler.ui.warn "Bundler will use `#{user_home}' as your home directory temporarily.\n"
          user_home
        else
          Pathname.new(home)
        end
      end
    end

    def user_bundle_path(dir = "home")
      env_var, fallback = case dir
                          when "home"
                            ["BUNDLE_USER_HOME", proc { Pathname.new(user_home).join(".bundle") }]
                          when "cache"
                            ["BUNDLE_USER_CACHE", proc { user_bundle_path.join("cache") }]
                          when "config"
                            ["BUNDLE_USER_CONFIG", proc { user_bundle_path.join("config") }]
                          when "plugin"
                            ["BUNDLE_USER_PLUGIN", proc { user_bundle_path.join("plugin") }]
                          else
                            raise BundlerError, "Unknown user path requested: #{dir}"
      end
      # `fallback` will already be a Pathname, but Pathname.new() is
      # idempotent so it's OK
      Pathname.new(ENV.fetch(env_var, &fallback))
    end

    def user_cache
      user_bundle_path("cache")
    end

    def home
      bundle_path.join("bundler")
    end

    def install_path
      home.join("gems")
    end

    def specs_path
      bundle_path.join("specifications")
    end

    def root
      @root ||= begin
                  SharedHelpers.root
                rescue GemfileNotFound
                  bundle_dir = default_bundle_dir
                  raise GemfileNotFound, "Could not locate Gemfile or .bundle/ directory" unless bundle_dir
                  Pathname.new(File.expand_path("..", bundle_dir))
                end
    end

    def app_config_path
      if app_config = ENV["BUNDLE_APP_CONFIG"]
        app_config_pathname = Pathname.new(app_config)

        if app_config_pathname.absolute?
          app_config_pathname
        else
          app_config_pathname.expand_path(root)
        end
      else
        root.join(".bundle")
      end
    end

    def app_cache(custom_path = nil)
      path = custom_path || root
      Pathname.new(path).join(settings.app_cache_path)
    end

    def tmp(name = Process.pid.to_s)
      Kernel.send(:require, "tmpdir")
      Pathname.new(Dir.mktmpdir(["bundler", name]))
    end

    def rm_rf(path)
      FileUtils.remove_entry_secure(path) if path && File.exist?(path)
    end

    def settings
      @settings ||= Settings.new(app_config_path)
    rescue GemfileNotFound
      @settings = Settings.new
    end

    # @return [Hash] Environment present before Bundler was activated
    def original_env
      ORIGINAL_ENV.clone
    end

    # @deprecated Use `unbundled_env` instead
    def clean_env
      message =
        "`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
        "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
      removed_message =
        "`Bundler.clean_env` has been removed in favor of `Bundler.unbundled_env`. " \
        "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
      Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
      unbundled_env
    end

    # @return [Hash] Environment with all bundler-related variables removed
    def unbundled_env
      unbundle_env(original_env)
    end

    # Remove all bundler-related variables from ENV
    def unbundle_env!
      ENV.replace(unbundle_env(ENV))
    end

    # Run block with environment present before Bundler was activated
    def with_original_env
      with_env(original_env) { yield }
    end

    # @deprecated Use `with_unbundled_env` instead
    def with_clean_env
      message =
        "`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
        "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
      removed_message =
        "`Bundler.with_clean_env` has been removed in favor of `Bundler.with_unbundled_env`. " \
        "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
      Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
      with_env(unbundled_env) { yield }
    end

    # Run block with all bundler-related variables removed
    def with_unbundled_env
      with_env(unbundled_env) { yield }
    end

    # Run subcommand with the environment present before Bundler was activated
    def original_system(*args)
      with_original_env { Kernel.system(*args) }
    end

    # @deprecated Use `unbundled_system` instead
    def clean_system(*args)
      message =
        "`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
        "If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
      removed_message =
        "`Bundler.clean_system` has been removed in favor of `Bundler.unbundled_system`. " \
        "If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
      Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
      with_env(unbundled_env) { Kernel.system(*args) }
    end

    # Run subcommand in an environment with all bundler related variables removed
    def unbundled_system(*args)
      with_unbundled_env { Kernel.system(*args) }
    end

    # Run a `Kernel.exec` to a subcommand with the environment present before Bundler was activated
    def original_exec(*args)
      with_original_env { Kernel.exec(*args) }
    end

    # @deprecated Use `unbundled_exec` instead
    def clean_exec(*args)
      message =
        "`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
        "If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
      removed_message =
        "`Bundler.clean_exec` has been removed in favor of `Bundler.unbundled_exec`. " \
        "If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
      Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
      with_env(unbundled_env) { Kernel.exec(*args) }
    end

    # Run a `Kernel.exec` to a subcommand in an environment with all bundler related variables removed
    def unbundled_exec(*args)
      with_env(unbundled_env) { Kernel.exec(*args) }
    end

    def local_platform
      return Gem::Platform::RUBY if settings[:force_ruby_platform]
      Gem::Platform.local
    end

    def default_gemfile
      SharedHelpers.default_gemfile
    end

    def default_lockfile
      SharedHelpers.default_lockfile
    end

    def default_bundle_dir
      SharedHelpers.default_bundle_dir
    end

    def system_bindir
      # Gem.bindir doesn't always return the location that RubyGems will install
      # system binaries. If you put '-n foo' in your .gemrc, RubyGems will
      # install binstubs there instead. Unfortunately, RubyGems doesn't expose
      # that directory at all, so rather than parse .gemrc ourselves, we allow
      # the directory to be set as well, via `bundle config set --local bindir foo`.
      Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir
    end

    def preferred_gemfile_name
      Bundler.settings[:init_gems_rb] ? "gems.rb" : "Gemfile"
    end

    def use_system_gems?
      configured_bundle_path.use_system_gems?
    end

    def mkdir_p(path)
      SharedHelpers.filesystem_access(path, :create) do |p|
        FileUtils.mkdir_p(p)
      end
    end

    def which(executable)
      executable_path = find_executable(executable)
      return executable_path if executable_path

      if (paths = ENV["PATH"])
        quote = '"'
        paths.split(File::PATH_SEPARATOR).find do |path|
          path = path[1..-2] if path.start_with?(quote) && path.end_with?(quote)
          executable_path = find_executable(File.expand_path(executable, path))
          return executable_path if executable_path
        end
      end
    end

    def find_executable(path)
      extensions = RbConfig::CONFIG["EXECUTABLE_EXTS"]&.split
      extensions = [RbConfig::CONFIG["EXEEXT"]] unless extensions&.any?
      candidates = extensions.map {|ext| "#{path}#{ext}" }

      candidates.find {|candidate| File.file?(candidate) && File.executable?(candidate) }
    end

    def read_file(file)
      SharedHelpers.filesystem_access(file, :read) do
        File.open(file, "r:UTF-8", &:read)
      end
    end

    def safe_load_marshal(data)
      if Gem.respond_to?(:load_safe_marshal)
        Gem.load_safe_marshal
        begin
          Gem::SafeMarshal.safe_load(data)
        rescue Gem::SafeMarshal::Reader::Error, Gem::SafeMarshal::Visitors::ToRuby::Error => e
          raise MarshalError, "#{e.class}: #{e.message}"
        end
      else
        load_marshal(data, marshal_proc: SafeMarshal.proc)
      end
    end

    def load_gemspec(file, validate = false)
      @gemspec_cache ||= {}
      key = File.expand_path(file)
      @gemspec_cache[key] ||= load_gemspec_uncached(file, validate)
      # Protect against caching side-effected gemspecs by returning a
      # new instance each time.
      @gemspec_cache[key]&.dup
    end

    def load_gemspec_uncached(file, validate = false)
      path = Pathname.new(file)
      contents = read_file(file)
      spec = eval_gemspec(path, contents)
      return unless spec
      spec.loaded_from = path.expand_path.to_s
      Bundler.rubygems.validate(spec) if validate
      spec
    end

    def clear_gemspec_cache
      @gemspec_cache = {}
    end

    def git_present?
      return @git_present if defined?(@git_present)
      @git_present = Bundler.which("git")
    end

    def feature_flag
      @feature_flag ||= FeatureFlag.new(VERSION)
    end

    def reset!
      reset_paths!
      Plugin.reset!
      reset_rubygems!
    end

    def reset_settings_and_root!
      @settings = nil
      @root = nil
    end

    def reset_paths!
      @bin_path = nil
      @bundler_major_version = nil
      @bundle_path = nil
      @configure = nil
      @configured_bundle_path = nil
      @definition = nil
      @load = nil
      @locked_gems = nil
      @root = nil
      @settings = nil
      @setup = nil
      @user_home = nil
    end

    def reset_rubygems!
      return unless defined?(@rubygems) && @rubygems
      rubygems.undo_replacements
      rubygems.reset
      @rubygems = nil
    end

    def configure_gem_home_and_path(path = bundle_path)
      configure_gem_path
      configure_gem_home(path)
      Bundler.rubygems.clear_paths
    end

    def self_manager
      @self_manager ||= begin
                          require_relative "bundler/self_manager"
                          Bundler::SelfManager.new
                        end
    end

    private

    def unbundle_env(env)
      if env.key?("BUNDLER_ORIG_MANPATH")
        env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"]
      end

      env.delete_if {|k, _| k[0, 7] == "BUNDLE_" }
      env.delete("BUNDLER_SETUP")

      if env.key?("RUBYOPT")
        rubyopt = env["RUBYOPT"].split(" ")
        rubyopt.delete("-r#{File.expand_path("bundler/setup", __dir__)}")
        rubyopt.delete("-rbundler/setup")
        env["RUBYOPT"] = rubyopt.join(" ")
      end

      if env.key?("RUBYLIB")
        rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR)
        rubylib.delete(__dir__)
        env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR)
      end

      env
    end

    def load_marshal(data, marshal_proc: nil)
      Marshal.load(data, marshal_proc)
    rescue TypeError => e
      raise MarshalError, "#{e.class}: #{e.message}"
    end

    def eval_yaml_gemspec(path, contents)
      Kernel.require "psych"

      Gem::Specification.from_yaml(contents)
    end

    def eval_gemspec(path, contents)
      if contents.start_with?("---") # YAML header
        eval_yaml_gemspec(path, contents)
      else
        # Eval the gemspec from its parent directory, because some gemspecs
        # depend on "./" relative paths.
        SharedHelpers.chdir(path.dirname.to_s) do
          eval(contents, TOPLEVEL_BINDING.dup, path.expand_path.to_s)
        end
      end
    rescue ScriptError, StandardError => e
      msg = "There was an error while loading `#{path.basename}`: #{e.message}"

      raise GemspecError, Dsl::DSLError.new(msg, path.to_s, e.backtrace, contents)
    end

    def configure_gem_path
      unless use_system_gems?
        # this needs to be empty string to cause
        # PathSupport.split_gem_path to only load up the
        # Bundler --path setting as the GEM_PATH.
        Bundler::SharedHelpers.set_env "GEM_PATH", ""
      end
    end

    def configure_gem_home(path)
      Bundler::SharedHelpers.set_env "GEM_HOME", path.to_s
    end

    def tmp_home_path
      Kernel.send(:require, "tmpdir")
      SharedHelpers.filesystem_access(Dir.tmpdir) do
        path = Bundler.tmp
        at_exit { Bundler.rm_rf(path) }
        path
      end
    end

    # @param env [Hash]
    def with_env(env)
      backup = ENV.to_hash
      ENV.replace(env)
      yield
    ensure
      ENV.replace(backup)
    end
  end
end
PK)J[)�8kk2share/gems/gems/bundler-2.6.7/lib/bundler/index.rbnu�[���# frozen_string_literal: true

module Bundler
  class Index
    include Enumerable

    def self.build
      i = new
      yield i
      i
    end

    attr_reader :specs, :duplicates, :sources
    protected :specs, :duplicates

    RUBY = "ruby"
    NULL = "\0"

    def initialize
      @sources = []
      @cache = {}
      @specs = {}
      @duplicates = {}
    end

    def initialize_copy(o)
      @sources = o.sources.dup
      @cache = {}
      @specs = {}
      @duplicates = {}

      o.specs.each do |name, hash|
        @specs[name] = hash.dup
      end
      o.duplicates.each do |name, array|
        @duplicates[name] = array.dup
      end
    end

    def inspect
      "#<#{self.class}:0x#{object_id} sources=#{sources.map(&:inspect)} specs.size=#{specs.size}>"
    end

    def empty?
      each { return false }
      true
    end

    def search_all(name, &blk)
      return enum_for(:search_all, name) unless blk
      specs_by_name(name).each(&blk)
      @duplicates[name]&.each(&blk)
      @sources.each {|source| source.search_all(name, &blk) }
    end

    # Search this index's specs, and any source indexes that this index knows
    # about, returning all of the results.
    def search(query)
      results = local_search(query)
      return results unless @sources.any?

      @sources.each do |source|
        results = safe_concat(results, source.search(query))
      end
      results.uniq!(&:full_name) unless results.empty? # avoid modifying frozen EMPTY_SEARCH
      results
    end

    alias_method :[], :search

    def local_search(query)
      case query
      when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query)
      when String then specs_by_name(query)
      when Array then specs_by_name_and_version(*query)
      else
        raise "You can't search for a #{query.inspect}."
      end
    end

    def add(spec)
      (@specs[spec.name] ||= {}).store(spec.full_name, spec)
    end
    alias_method :<<, :add

    def each(&blk)
      return enum_for(:each) unless blk
      specs.values.each do |spec_sets|
        spec_sets.values.each(&blk)
      end
      sources.each {|s| s.each(&blk) }
      self
    end

    def spec_names
      names = specs.keys + sources.map(&:spec_names)
      names.uniq!
      names
    end

    def unmet_dependency_names
      dependency_names.select do |name|
        search(name).empty?
      end
    end

    def dependency_names
      names = []
      each do |spec|
        spec.dependencies.each do |dep|
          next if dep.type == :development
          names << dep.name
        end
      end
      names.uniq
    end

    # Combines indexes proritizing existing specs, like `Hash#reverse_merge!`
    # Duplicate specs found in `other` are stored in `@duplicates`.
    def use(other)
      return unless other
      other.each do |spec|
        exist?(spec) ? add_duplicate(spec) : add(spec)
      end
      self
    end

    # Combines indexes proritizing specs from `other`, like `Hash#merge!`
    # Duplicate specs found in `self` are saved in `@duplicates`.
    def merge!(other)
      return unless other
      other.each do |spec|
        if existing = find_by_spec(spec)
          add_duplicate(existing)
        end
        add spec
      end
      self
    end

    def size
      @sources.inject(@specs.size) do |size, source|
        size += source.size
      end
    end

    # Whether all the specs in self are in other
    def subset?(other)
      all? do |spec|
        other_spec = other[spec].first
        other_spec && dependencies_eql?(spec, other_spec) && spec.source == other_spec.source
      end
    end

    def dependencies_eql?(spec, other_spec)
      deps       = spec.dependencies.select {|d| d.type != :development }
      other_deps = other_spec.dependencies.select {|d| d.type != :development }
      deps.sort == other_deps.sort
    end

    def add_source(index)
      raise ArgumentError, "Source must be an index, not #{index.class}" unless index.is_a?(Index)
      @sources << index
      @sources.uniq! # need to use uniq! here instead of checking for the item before adding
    end

    private

    def safe_concat(a, b)
      return a if b.empty?
      return b if a.empty?
      a.concat(b)
    end

    def add_duplicate(spec)
      (@duplicates[spec.name] ||= []) << spec
    end

    def specs_by_name_and_version(name, version)
      results = @specs[name]&.values
      return EMPTY_SEARCH unless results
      results.select! {|spec| spec.version == version }
      results
    end

    def specs_by_name(name)
      @specs[name]&.values || EMPTY_SEARCH
    end

    EMPTY_SEARCH = [].freeze

    def search_by_spec(spec)
      spec = find_by_spec(spec)
      spec ? [spec] : EMPTY_SEARCH
    end

    def find_by_spec(spec)
      @specs[spec.name]&.fetch(spec.full_name, nil)
    end

    def exist?(spec)
      @specs[spec.name]&.key?(spec.full_name)
    end
  end
end
PK)J[:5���9share/gems/gems/bundler-2.6.7/lib/bundler/vendored_uri.rbnu�[���# frozen_string_literal: true

module Bundler; end

# Use RubyGems vendored copy when available. Otherwise fallback to Bundler
# vendored copy. The vendored copy in Bundler can be removed once support for
# RubyGems 3.5 is dropped.

begin
  require "rubygems/vendor/uri/lib/uri"
rescue LoadError
  require_relative "vendor/uri/lib/uri"
  Gem::URI = Bundler::URI

  module Gem
    def URI(uri) # rubocop:disable Naming/MethodName
      Bundler::URI(uri)
    end
    module_function :URI
  end
end
PK)J[KR�
$
$<share/gems/gems/bundler-2.6.7/lib/bundler/lockfile_parser.rbnu�[���# frozen_string_literal: true

module Bundler
  class LockfileParser
    include GemHelpers

    class Position
      attr_reader :line, :column
      def initialize(line, column)
        @line = line
        @column = column
      end

      def advance!(string)
        lines = string.count("\n")
        if lines > 0
          @line += lines
          @column = string.length - string.rindex("\n")
        else
          @column += string.length
        end
      end

      def to_s
        "#{line}:#{column}"
      end
    end

    attr_reader(
      :sources,
      :dependencies,
      :specs,
      :platforms,
      :most_specific_locked_platform,
      :bundler_version,
      :ruby_version,
      :checksums,
    )

    BUNDLED      = "BUNDLED WITH"
    DEPENDENCIES = "DEPENDENCIES"
    CHECKSUMS    = "CHECKSUMS"
    PLATFORMS    = "PLATFORMS"
    RUBY         = "RUBY VERSION"
    GIT          = "GIT"
    GEM          = "GEM"
    PATH         = "PATH"
    PLUGIN       = "PLUGIN SOURCE"
    SPECS        = "  specs:"
    OPTIONS      = /^  ([a-z]+): (.*)$/i
    SOURCE       = [GIT, GEM, PATH, PLUGIN].freeze

    SECTIONS_BY_VERSION_INTRODUCED = {
      Gem::Version.create("1.0") => [DEPENDENCIES, PLATFORMS, GIT, GEM, PATH].freeze,
      Gem::Version.create("1.10") => [BUNDLED].freeze,
      Gem::Version.create("1.12") => [RUBY].freeze,
      Gem::Version.create("1.13") => [PLUGIN].freeze,
      Gem::Version.create("2.5.0") => [CHECKSUMS].freeze,
    }.freeze

    KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten!.freeze

    ENVIRONMENT_VERSION_SECTIONS = [BUNDLED, RUBY].freeze
    deprecate_constant(:ENVIRONMENT_VERSION_SECTIONS)

    def self.sections_in_lockfile(lockfile_contents)
      sections = lockfile_contents.scan(/^\w[\w ]*$/)
      sections.uniq!
      sections
    end

    def self.unknown_sections_in_lockfile(lockfile_contents)
      sections_in_lockfile(lockfile_contents) - KNOWN_SECTIONS
    end

    def self.sections_to_ignore(base_version = nil)
      base_version &&= base_version.release
      base_version ||= Gem::Version.create("1.0")
      attributes = []
      SECTIONS_BY_VERSION_INTRODUCED.each do |version, introduced|
        next if version <= base_version
        attributes += introduced
      end
      attributes
    end

    def self.bundled_with
      lockfile = Bundler.default_lockfile
      return unless lockfile.file?

      lockfile_contents = Bundler.read_file(lockfile)
      return unless lockfile_contents.include?(BUNDLED)

      lockfile_contents.split(BUNDLED).last.strip
    end

    def initialize(lockfile)
      @platforms    = []
      @sources      = []
      @dependencies = {}
      @parse_method = nil
      @specs        = {}
      @lockfile_path = begin
        SharedHelpers.relative_lockfile_path
      rescue GemfileNotFound
        "Gemfile.lock"
      end
      @pos = Position.new(1, 1)

      if lockfile.match?(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
        raise LockfileError, "Your #{@lockfile_path} contains merge conflicts.\n" \
          "Run `git checkout HEAD -- #{@lockfile_path}` first to get a clean lock."
      end

      lockfile.split(/((?:\r?\n)+)/) do |line|
        # split alternates between the line and the following whitespace
        next @pos.advance!(line) if line.match?(/^\s*$/)

        if SOURCE.include?(line)
          @parse_method = :parse_source
          parse_source(line)
        elsif line == DEPENDENCIES
          @parse_method = :parse_dependency
        elsif line == CHECKSUMS
          # This is a temporary solution to make this feature disabled by default
          # for all gemfiles that don't already explicitly include the feature.
          @checksums = true
          @parse_method = :parse_checksum
        elsif line == PLATFORMS
          @parse_method = :parse_platform
        elsif line == RUBY
          @parse_method = :parse_ruby
        elsif line == BUNDLED
          @parse_method = :parse_bundled_with
        elsif /^[^\s]/.match?(line)
          @parse_method = nil
        elsif @parse_method
          send(@parse_method, line)
        end
        @pos.advance!(line)
      end
      @most_specific_locked_platform = @platforms.min_by do |bundle_platform|
        platform_specificity_match(bundle_platform, local_platform)
      end
      @specs = @specs.values.sort_by!(&:full_name).each do |spec|
        spec.most_specific_locked_platform = @most_specific_locked_platform
      end
    rescue ArgumentError => e
      Bundler.ui.debug(e)
      raise LockfileError, "Your lockfile is unreadable. Run `rm #{@lockfile_path}` " \
        "and then `bundle install` to generate a new lockfile. The error occurred while " \
        "evaluating #{@lockfile_path}:#{@pos}"
    end

    def may_include_redundant_platform_specific_gems?
      bundler_version.nil? || bundler_version < Gem::Version.new("1.16.2")
    end

    private

    TYPES = {
      GIT => Bundler::Source::Git,
      GEM => Bundler::Source::Rubygems,
      PATH => Bundler::Source::Path,
      PLUGIN => Bundler::Plugin,
    }.freeze

    def parse_source(line)
      case line
      when SPECS
        return unless TYPES.key?(@type)
        @current_source = TYPES[@type].from_lock(@opts)
        @sources << @current_source
      when OPTIONS
        value = $2
        value = true if value == "true"
        value = false if value == "false"

        key = $1

        if @opts[key]
          @opts[key] = Array(@opts[key])
          @opts[key] << value
        else
          @opts[key] = value
        end
      when *SOURCE
        @current_source = nil
        @opts = {}
        @type = line
      else
        parse_spec(line)
      end
    end

    space = / /
    NAME_VERSION = /
      ^(#{space}{2}|#{space}{4}|#{space}{6})(?!#{space}) # Exactly 2, 4, or 6 spaces at the start of the line
      (.*?)                                              # Name
      (?:#{space}\(([^-]*)                               # Space, followed by version
      (?:-(.*))?\))?                                     # Optional platform
      (!)?                                               # Optional pinned marker
      (?:#{space}([^ ]+))?                               # Optional checksum
      $                                                  # Line end
    /xo

    def parse_dependency(line)
      return unless line =~ NAME_VERSION
      spaces = $1
      return unless spaces.size == 2
      name = -$2
      version = $3
      pinned = $5

      version = version.split(",").each(&:strip!) if version

      dep = Bundler::Dependency.new(name, version)

      if pinned && dep.name != "bundler"
        spec = @specs.find {|_, v| v.name == dep.name }
        dep.source = spec.last.source if spec

        # Path sources need to know what the default name / version
        # to use in the case that there are no gemspecs present. A fake
        # gemspec is created based on the version set on the dependency
        # TODO: Use the version from the spec instead of from the dependency
        if version && version.size == 1 && version.first =~ /^\s*= (.+)\s*$/ && dep.source.is_a?(Bundler::Source::Path)
          dep.source.name    = name
          dep.source.version = $1
        end
      end

      @dependencies[dep.name] = dep
    end

    def parse_checksum(line)
      return unless line =~ NAME_VERSION

      spaces = $1
      return unless spaces.size == 2
      checksums = $6
      name = $2
      version = $3
      platform = $4

      version = Gem::Version.new(version)
      platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
      full_name = Gem::NameTuple.new(name, version, platform).full_name
      return unless spec = @specs[full_name]

      if checksums
        checksums.split(",") do |lock_checksum|
          column = line.index(lock_checksum) + 1
          checksum = Checksum.from_lock(lock_checksum, "#{@lockfile_path}:#{@pos.line}:#{column}")
          spec.source.checksum_store.register(spec, checksum)
        end
      else
        spec.source.checksum_store.register(spec, nil)
      end
    end

    def parse_spec(line)
      return unless line =~ NAME_VERSION
      spaces = $1
      name = -$2
      version = $3

      if spaces.size == 4
        # only load platform for non-dependency (spec) line
        platform = $4

        version = Gem::Version.new(version)
        platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
        @current_spec = LazySpecification.new(name, version, platform, @current_source)
        @current_source.add_dependency_names(name)

        @specs[@current_spec.full_name] = @current_spec
      elsif spaces.size == 6
        version = version.split(",").each(&:strip!) if version
        dep = Gem::Dependency.new(name, version)
        @current_spec.dependencies << dep
      end
    end

    def parse_platform(line)
      @platforms << Gem::Platform.new($1.strip) if line =~ /^  (.*)$/
    end

    def parse_bundled_with(line)
      line.strip!
      return unless Gem::Version.correct?(line)
      @bundler_version = Gem::Version.create(line)
    end

    def parse_ruby(line)
      line.strip!
      @ruby_version = line
    end
  end
end
PK)J[�rb�

Ashare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client.rbnu�[���# frozen_string_literal: true

require "pathname"
require "set"

module Bundler
  # The CompactIndexClient is responsible for fetching and parsing the compact index.
  #
  # The compact index is a set of caching optimized files that are used to fetch gem information.
  # The files are:
  # - names: a list of all gem names
  # - versions: a list of all gem versions
  # - info/[gem]: a list of all versions of a gem
  #
  # The client is instantiated with:
  # - `directory`: the root directory where the cache files are stored.
  # - `fetcher`: (optional) an object that responds to #call(uri_path, headers) and returns an http response.
  # If the `fetcher` is not provided, the client will only read cached files from disk.
  #
  # The client is organized into:
  # - `Updater`: updates the cached files on disk using the fetcher.
  # - `Cache`: calls the updater, caches files, read and return them from disk
  # - `Parser`: parses the compact index file data
  # - `CacheFile`: a concurrency safe file reader/writer that verifies checksums
  #
  # The client is intended to optimize memory usage and performance.
  # It is called 100s or 1000s of times, parsing files with hundreds of thousands of lines.
  # It may be called concurrently without global interpreter lock in some Rubies.
  # As a result, some methods may look more complex than necessary to save memory or time.
  class CompactIndexClient
    # NOTE: MD5 is here not because we expect a server to respond with it, but
    # because we use it to generate the etag on first request during the upgrade
    # to the compact index client that uses opaque etags saved to files.
    # Remove once 2.5.0 has been out for a while.
    SUPPORTED_DIGESTS = { "sha-256" => :SHA256, "md5" => :MD5 }.freeze
    DEBUG_MUTEX = Thread::Mutex.new

    # info returns an Array of INFO Arrays. Each INFO Array has the following indices:
    INFO_NAME = 0
    INFO_VERSION = 1
    INFO_PLATFORM = 2
    INFO_DEPS = 3
    INFO_REQS = 4

    def self.debug
      return unless ENV["DEBUG_COMPACT_INDEX"]
      DEBUG_MUTEX.synchronize { warn("[#{self}] #{yield}") }
    end

    class Error < StandardError; end

    require_relative "compact_index_client/cache"
    require_relative "compact_index_client/cache_file"
    require_relative "compact_index_client/parser"
    require_relative "compact_index_client/updater"

    def initialize(directory, fetcher = nil)
      @cache = Cache.new(directory, fetcher)
      @parser = Parser.new(@cache)
    end

    def names
      Bundler::CompactIndexClient.debug { "names" }
      @parser.names
    end

    def versions
      Bundler::CompactIndexClient.debug { "versions" }
      @parser.versions
    end

    def dependencies(names)
      Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
      names.map {|name| info(name) }
    end

    def info(name)
      Bundler::CompactIndexClient.debug { "info(#{name})" }
      @parser.info(name)
    end

    def latest_version(name)
      Bundler::CompactIndexClient.debug { "latest_version(#{name})" }
      @parser.info(name).map {|d| Gem::Version.new(d[INFO_VERSION]) }.max
    end

    def available?
      Bundler::CompactIndexClient.debug { "available?" }
      @parser.available?
    end

    def reset!
      Bundler::CompactIndexClient.debug { "reset!" }
      @cache.reset!
    end
  end
end
PK)J[s�{T�"�"3share/gems/gems/bundler-2.6.7/lib/bundler/errors.rbnu�[���# frozen_string_literal: true

module Bundler
  class BundlerError < StandardError
    def self.status_code(code)
      define_method(:status_code) { code }
      if match = BundlerError.all_errors.find {|_k, v| v == code }
        error, _ = match
        raise ArgumentError,
          "Trying to register #{self} for status code #{code} but #{error} is already registered"
      end
      BundlerError.all_errors[self] = code
    end

    def self.all_errors
      @all_errors ||= {}
    end
  end

  class GemfileError < BundlerError; status_code(4); end
  class InstallError < BundlerError; status_code(5); end

  # Internal error, should be rescued
  class SolveFailure < BundlerError; status_code(6); end

  class GemNotFound < BundlerError; status_code(7); end
  class InstallHookError < BundlerError; status_code(8); end
  class GemfileNotFound < BundlerError; status_code(10); end
  class GitError < BundlerError; status_code(11); end
  class DeprecatedError < BundlerError; status_code(12); end
  class PathError < BundlerError; status_code(13); end
  class GemspecError < BundlerError; status_code(14); end
  class InvalidOption < BundlerError; status_code(15); end
  class ProductionError < BundlerError; status_code(16); end

  class HTTPError < BundlerError
    status_code(17)
    def filter_uri(uri)
      URICredentialsFilter.credential_filtered_uri(uri)
    end
  end

  class RubyVersionMismatch < BundlerError; status_code(18); end
  class SecurityError < BundlerError; status_code(19); end
  class LockfileError < BundlerError; status_code(20); end
  class CyclicDependencyError < BundlerError; status_code(21); end
  class GemfileLockNotFound < BundlerError; status_code(22); end
  class PluginError < BundlerError; status_code(29); end
  class ThreadCreationError < BundlerError; status_code(33); end
  class APIResponseMismatchError < BundlerError; status_code(34); end
  class APIResponseInvalidDependenciesError < BundlerError; status_code(35); end
  class GemfileEvalError < GemfileError; end
  class MarshalError < StandardError; end

  class ChecksumMismatchError < SecurityError
    def initialize(lock_name, existing, checksum)
      @lock_name = lock_name
      @existing = existing
      @checksum = checksum
    end

    def message
      <<~MESSAGE
        Bundler found mismatched checksums. This is a potential security risk.
          #{@lock_name} #{@existing.to_lock}
            from #{@existing.sources.join("\n    and ")}
          #{@lock_name} #{@checksum.to_lock}
            from #{@checksum.sources.join("\n    and ")}

        #{mismatch_resolution_instructions}
        To ignore checksum security warnings, disable checksum validation with
          `bundle config set --local disable_checksum_validation true`
      MESSAGE
    end

    def mismatch_resolution_instructions
      removable, remote = [@existing, @checksum].partition(&:removable?)
      case removable.size
      when 0
        msg = +"Mismatched checksums each have an authoritative source:\n"
        msg << "  1. #{@existing.sources.reject(&:removable?).map(&:to_s).join(" and ")}\n"
        msg << "  2. #{@checksum.sources.reject(&:removable?).map(&:to_s).join(" and ")}\n"
        msg << "You may need to alter your Gemfile sources to resolve this issue.\n"
      when 1
        msg = +"If you trust #{remote.first.sources.first}, to resolve this issue you can:\n"
        msg << removable.first.removal_instructions
      when 2
        msg = +"To resolve this issue you can either:\n"
        msg << @checksum.removal_instructions
        msg << "or if you are sure that the new checksum from #{@checksum.sources.first} is correct:\n"
        msg << @existing.removal_instructions
      end
    end

    status_code(37)
  end

  class PermissionError < BundlerError
    def initialize(path, permission_type = :write)
      @path = path
      @permission_type = permission_type
    end

    def action
      case @permission_type
      when :read then "read from"
      when :write then "write to"
      when :executable, :exec then "execute"
      else @permission_type.to_s
      end
    end

    def permission_type
      case @permission_type
      when :create
        "executable permissions for all parent directories and write permissions for `#{parent_folder}`"
      else
        "#{@permission_type} permissions for that path"
      end
    end

    def parent_folder
      File.dirname(@path)
    end

    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "It is likely that you need to grant #{permission_type}."
    end

    status_code(23)
  end

  class GemRequireError < BundlerError
    attr_reader :orig_exception

    def initialize(orig_exception, msg)
      full_message = msg + "\nGem Load Error is: #{orig_exception.message}\n"\
                      "Backtrace for gem load error is:\n"\
                      "#{orig_exception.backtrace.join("\n")}\n"\
                      "Bundler Error Backtrace:\n"
      super(full_message)
      @orig_exception = orig_exception
    end

    status_code(24)
  end

  class YamlSyntaxError < BundlerError
    attr_reader :orig_exception

    def initialize(orig_exception, msg)
      super(msg)
      @orig_exception = orig_exception
    end

    status_code(25)
  end

  class TemporaryResourceError < PermissionError
    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "Some resource was temporarily unavailable. It's suggested that you try" \
      "the operation again."
    end

    status_code(26)
  end

  class VirtualProtocolError < BundlerError
    def message
      "There was an error relating to virtualization and file access. " \
      "It is likely that you need to grant access to or mount some file system correctly."
    end

    status_code(27)
  end

  class OperationNotSupportedError < PermissionError
    def message
      "Attempting to #{action} `#{@path}` is unsupported by your OS."
    end

    status_code(28)
  end

  class NoSpaceOnDeviceError < PermissionError
    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "There was insufficient space remaining on the device."
    end

    status_code(31)
  end

  class ReadOnlyFileSystemError < PermissionError
    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "File system is read-only."
    end

    status_code(42)
  end

  class OperationNotPermittedError < PermissionError
    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "Underlying OS system call raised an EPERM error."
    end

    status_code(43)
  end

  class GenericSystemCallError < BundlerError
    attr_reader :underlying_error

    def initialize(underlying_error, message)
      @underlying_error = underlying_error
      super("#{message}\nThe underlying system error is #{@underlying_error.class}: #{@underlying_error}")
    end

    status_code(32)
  end

  class DirectoryRemovalError < BundlerError
    def initialize(orig_exception, msg)
      full_message = "#{msg}.\n" \
                     "The underlying error was #{orig_exception.class}: #{orig_exception.message}, with backtrace:\n" \
                     "  #{orig_exception.backtrace.join("\n  ")}\n\n" \
                     "Bundler Error Backtrace:"
      super(full_message)
    end

    status_code(36)
  end

  class InsecureInstallPathError < BundlerError
    def initialize(name, path)
      @name = name
      @path = path
    end

    def message
      "Bundler cannot reinstall #{@name} because there's a previous installation of it at #{@path} that is unsafe to remove.\n" \
      "The parent of #{@path} is world-writable and does not have the sticky bit set, making it insecure to remove due to potential vulnerabilities.\n" \
      "Please change the permissions of #{File.dirname(@path)} or choose a different install path."
    end

    status_code(38)
  end

  class CorruptBundlerInstallError < BundlerError
    def initialize(loaded_spec)
      @loaded_spec = loaded_spec
    end

    def message
      "The running version of Bundler (#{Bundler::VERSION}) does not match the version of the specification installed for it (#{@loaded_spec.version}). " \
      "This can be caused by reinstalling Ruby without removing previous installation, leaving around an upgraded default version of Bundler. " \
      "Reinstalling Ruby from scratch should fix the problem."
    end

    status_code(39)
  end

  class InvalidArgumentError < BundlerError; status_code(40); end

  class IncorrectLockfileDependencies < BundlerError
    attr_reader :spec

    def initialize(spec)
      @spec = spec
    end

    def message
      "Bundler found incorrect dependencies in the lockfile for #{spec.full_name}"
    end

    status_code(41)
  end
end
PK)J[x���	�	<share/gems/gems/bundler-2.6.7/lib/bundler/yaml_serializer.rbnu�[���# frozen_string_literal: true

module Bundler
  # A stub yaml serializer that can handle only hashes and strings (as of now).
  module YAMLSerializer
    module_function

    def dump(hash)
      yaml = String.new("---")
      yaml << dump_hash(hash)
    end

    def dump_hash(hash)
      yaml = String.new("\n")
      hash.each do |k, v|
        yaml << k << ":"
        if v.is_a?(Hash)
          yaml << dump_hash(v).gsub(/^(?!$)/, "  ") # indent all non-empty lines
        elsif v.is_a?(Array) # Expected to be array of strings
          if v.empty?
            yaml << " []\n"
          else
            yaml << "\n- " << v.map {|s| s.to_s.gsub(/\s+/, " ").inspect }.join("\n- ") << "\n"
          end
        else
          yaml << " " << v.to_s.gsub(/\s+/, " ").inspect << "\n"
        end
      end
      yaml
    end

    ARRAY_REGEX = /
      ^
      (?:[ ]*-[ ]) # '- ' before array items
      (['"]?) # optional opening quote
      (.*) # value
      \1 # matching closing quote
      $
    /xo

    HASH_REGEX = /
      ^
      ([ ]*) # indentations
      ([^#]+) # key excludes comment char '#'
      (?::(?=(?:\s|$))) # :  (without the lookahead the #key includes this when : is present in value)
      [ ]?
      (['"]?) # optional opening quote
      (.*) # value
      \3 # matching closing quote
      $
    /xo

    def load(str)
      res = {}
      stack = [res]
      last_hash = nil
      last_empty_key = nil
      str.split(/\r?\n/) do |line|
        if match = HASH_REGEX.match(line)
          indent, key, quote, val = match.captures
          val = strip_comment(val)

          depth = indent.size / 2
          if quote.empty? && val.empty?
            new_hash = {}
            stack[depth][key] = new_hash
            stack[depth + 1] = new_hash
            last_empty_key = key
            last_hash = stack[depth]
          else
            val = [] if val == "[]" # empty array
            stack[depth][key] = val
          end
        elsif match = ARRAY_REGEX.match(line)
          _, val = match.captures
          val = strip_comment(val)

          last_hash[last_empty_key] = [] unless last_hash[last_empty_key].is_a?(Array)

          last_hash[last_empty_key].push(val)
        end
      end
      res
    end

    def strip_comment(val)
      if val.include?("#") && !val.start_with?("#")
        val.split("#", 2).first.strip
      else
        val
      end
    end

    class << self
      private :dump_hash
    end
  end
end
PK)J[<��,,?share/gems/gems/bundler-2.6.7/lib/bundler/settings/validator.rbnu�[���# frozen_string_literal: true

module Bundler
  class Settings
    class Validator
      class Rule
        attr_reader :description

        def initialize(keys, description, &validate)
          @keys = keys
          @description = description
          @validate = validate
        end

        def validate!(key, value, settings)
          instance_exec(key, value, settings, &@validate)
        end

        def fail!(key, value, *reasons)
          reasons.unshift @description
          raise InvalidOption, "Setting `#{key}` to #{value.inspect} failed:\n#{reasons.map {|r| " - #{r}" }.join("\n")}"
        end

        def set(settings, key, value, *reasons)
          hash_key = k(key)
          return if settings[hash_key] == value
          reasons.unshift @description
          Bundler.ui.info "Setting `#{key}` to #{value.inspect}, since #{reasons.join(", ")}"
          if value.nil?
            settings.delete(hash_key)
          else
            settings[hash_key] = value
          end
        end

        def k(key)
          Bundler.settings.key_for(key)
        end
      end

      def self.rules
        @rules ||= Hash.new {|h, k| h[k] = [] }
      end
      private_class_method :rules

      def self.rule(keys, description, &blk)
        rule = Rule.new(keys, description, &blk)
        keys.each {|k| rules[k] << rule }
      end
      private_class_method :rule

      def self.validate!(key, value, settings)
        rules_to_validate = rules[key]
        rules_to_validate.each {|rule| rule.validate!(key, value, settings) }
      end

      rule %w[path path.system], "path and path.system are mutually exclusive" do |key, value, settings|
        if key == "path" && value
          set(settings, "path.system", nil)
        elsif key == "path.system" && value
          set(settings, :path, nil)
        end
      end

      rule %w[with without], "a group cannot be in both `with` & `without` simultaneously" do |key, value, settings|
        with = settings.fetch(k(:with), "").split(":").map(&:to_sym)
        without = settings.fetch(k(:without), "").split(":").map(&:to_sym)

        other_key = key == "with" ? :without : :with
        other_setting = key == "with" ? without : with

        conflicting = with & without
        if conflicting.any?
          fail!(key, value, "`#{other_key}` is current set to #{other_setting.inspect}", "the `#{conflicting.join("`, `")}` groups conflict")
        end
      end

      rule %w[path], "relative paths are expanded relative to the current working directory" do |key, value, settings|
        next if value.nil?

        path = Pathname.new(value)
        next if !path.relative? || !Bundler.feature_flag.path_relative_to_cwd?

        path = path.expand_path

        root = begin
                 Bundler.root
               rescue GemfileNotFound
                 Pathname.pwd.expand_path
               end

        path = begin
                 path.relative_path_from(root)
               rescue ArgumentError
                 path
               end

        set(settings, key, path.to_s)
      end
    end
  end
end
PK)J[���l��<share/gems/gems/bundler-2.6.7/lib/bundler/friendly_errors.rbnu�[���# frozen_string_literal: true

require_relative "vendored_thor"

module Bundler
  module FriendlyErrors
    module_function

    def enable!
      @disabled = false
    end

    def disabled?
      @disabled
    end

    def disable!
      @disabled = true
    end

    def log_error(error)
      case error
      when YamlSyntaxError
        Bundler.ui.error error.message
        Bundler.ui.trace error.orig_exception
      when Dsl::DSLError, GemspecError
        Bundler.ui.error error.message
      when GemRequireError
        Bundler.ui.error error.message
        Bundler.ui.trace error.orig_exception
      when BundlerError
        if Bundler.ui.debug?
          Bundler.ui.trace error
        else
          Bundler.ui.error error.message, wrap: true
        end
      when Thor::Error
        Bundler.ui.error error.message
      when Interrupt
        Bundler.ui.error "\nQuitting..."
        Bundler.ui.trace error
      when Gem::InvalidSpecificationException
        Bundler.ui.error error.message, wrap: true
      when SystemExit
      when *[defined?(Java::JavaLang::OutOfMemoryError) && Java::JavaLang::OutOfMemoryError].compact
        Bundler.ui.error "\nYour JVM has run out of memory, and Bundler cannot continue. " \
          "You can decrease the amount of memory Bundler needs by removing gems from your Gemfile, " \
          "especially large gems. (Gems can be as large as hundreds of megabytes, and Bundler has to read those files!). " \
          "Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB)."
      else request_issue_report_for(error)
      end
    end

    def exit_status(error)
      case error
      when BundlerError then error.status_code
      when Thor::Error then 15
      when SystemExit then error.status
      else 1
      end
    end

    def request_issue_report_for(e)
      Bundler.ui.error <<~EOS, nil, nil
        --- ERROR REPORT TEMPLATE -------------------------------------------------------

        ```
        #{exception_message(e)}
        ```

        #{Bundler::Env.report}
        --- TEMPLATE END ----------------------------------------------------------------

      EOS

      Bundler.ui.error "Unfortunately, an unexpected error occurred, and Bundler cannot continue."

      Bundler.ui.error <<~EOS, nil, :yellow

        First, try this link to see if there are any existing issue reports for this error:
        #{issues_url(e)}

        If there aren't any reports for this error yet, please fill in the new issue form located at #{new_issue_url}, and copy and paste the report template above in there.
      EOS
    end

    def exception_message(error)
      message = serialized_exception_for(error)
      cause = error.cause
      return message unless cause

      message + serialized_exception_for(cause)
    end

    def serialized_exception_for(e)
      <<~EOS
        #{e.class}: #{e.message}
          #{e.backtrace&.join("\n          ")&.chomp}
      EOS
    end

    def issues_url(exception)
      message = exception.message.lines.first.tr(":", " ").chomp
      message = message.split("-").first if exception.is_a?(Errno)
      require "cgi"
      "https://github.com/rubygems/rubygems/search?q=" \
        "#{CGI.escape(message)}&type=Issues"
    end

    def new_issue_url
      "https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md"
    end
  end

  def self.with_friendly_errors
    FriendlyErrors.enable!
    yield
  rescue SignalException
    raise
  rescue Exception => e # rubocop:disable Lint/RescueException
    raise if FriendlyErrors.disabled?

    FriendlyErrors.log_error(e)
    exit FriendlyErrors.exit_status(e)
  end
end
PK)J[����0share/gems/gems/bundler-2.6.7/lib/bundler/env.rbnu�[���# frozen_string_literal: true

require_relative "rubygems_integration"
require_relative "source/git/git_proxy"

module Bundler
  class Env
    def self.write(io)
      io.write report
    end

    def self.report(options = {})
      print_gemfile = options.delete(:print_gemfile) { true }
      print_gemspecs = options.delete(:print_gemspecs) { true }

      out = String.new
      append_formatted_table("Environment", environment, out)
      append_formatted_table("Bundler Build Metadata", BuildMetadata.to_h, out)

      unless Bundler.settings.all.empty?
        out << "\n## Bundler settings\n\n```\n"
        Bundler.settings.all.each do |setting|
          out << setting << "\n"
          Bundler.settings.pretty_values_for(setting).each do |line|
            out << "  " << line << "\n"
          end
        end
        out << "```\n"
      end

      return out unless SharedHelpers.in_bundle?

      if print_gemfile
        gemfiles = [Bundler.default_gemfile]
        begin
          gemfiles = Bundler.definition.gemfiles
        rescue GemfileNotFound
          nil
        end

        out << "\n## Gemfile\n"
        gemfiles.each do |gemfile|
          out << "\n### #{SharedHelpers.relative_path_to(gemfile)}\n\n"
          out << "```ruby\n" << read_file(gemfile).chomp << "\n```\n"
        end

        out << "\n### #{SharedHelpers.relative_path_to(Bundler.default_lockfile)}\n\n"
        out << "```\n" << read_file(Bundler.default_lockfile).chomp << "\n```\n"
      end

      if print_gemspecs
        dsl = Dsl.new.tap {|d| d.eval_gemfile(Bundler.default_gemfile) }
        out << "\n## Gemspecs\n" unless dsl.gemspecs.empty?
        dsl.gemspecs.each do |gs|
          out << "\n### #{File.basename(gs.loaded_from)}"
          out << "\n\n```ruby\n" << read_file(gs.loaded_from).chomp << "\n```\n"
        end
      end

      out
    end

    def self.read_file(filename)
      Bundler.read_file(filename.to_s).strip
    rescue Errno::ENOENT
      "<No #{filename} found>"
    rescue RuntimeError => e
      "#{e.class}: #{e.message}"
    end

    def self.ruby_version
      "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{Gem::Platform.local}]"
    end

    def self.git_version
      Bundler::Source::Git::GitProxy.new(nil, nil).full_version
    rescue Bundler::Source::Git::GitNotInstalledError
      "not installed"
    end

    def self.version_of(script)
      return "not installed" unless Bundler.which(script)
      `#{script} --version`.chomp
    end

    def self.chruby_version
      return "not installed" unless Bundler.which("chruby-exec")
      `chruby-exec -- chruby --version`.
        sub(/.*^chruby: (#{Gem::Version::VERSION_PATTERN}).*/m, '\1')
    end

    def self.environment
      out = []

      out << ["Bundler", Bundler::VERSION]
      out << ["  Platforms", Gem.platforms.join(", ")]
      out << ["Ruby", ruby_version]
      out << ["  Full Path", Gem.ruby]
      out << ["  Config Dir", Pathname.new(Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE).dirname]
      out << ["RubyGems", Gem::VERSION]
      out << ["  Gem Home", Gem.dir]
      out << ["  Gem Path", Gem.path.join(File::PATH_SEPARATOR)]
      out << ["  User Home", Gem.user_home]
      out << ["  User Path", Gem.user_dir]
      out << ["  Bin Dir", Gem.bindir]
      if defined?(OpenSSL::SSL)
        out << ["OpenSSL"]
        out << ["  Compiled", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
        out << ["  Loaded", OpenSSL::OPENSSL_LIBRARY_VERSION] if defined?(OpenSSL::OPENSSL_LIBRARY_VERSION)
        out << ["  Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
        out << ["  Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
      end
      out << ["Tools"]
      out << ["  Git", git_version]
      out << ["  RVM", ENV.fetch("rvm_version") { version_of("rvm") }]
      out << ["  rbenv", version_of("rbenv")]
      out << ["  chruby", chruby_version]

      %w[rubygems-bundler open_gem].each do |name|
        specs = Bundler.rubygems.find_name(name)
        out << ["  #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
      end
      if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
        shebang = File.read(exe).lines.first
        shebang.sub!(/^#!\s*/, "")
        unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
          out << ["Gem.ruby", Gem.ruby]
          out << ["bundle #!", shebang]
        end
      end

      out
    end

    def self.append_formatted_table(title, pairs, out)
      return if pairs.empty?
      out << "\n" unless out.empty?
      out << "## #{title}\n\n```\n"
      ljust = pairs.map {|k, _v| k.to_s.length }.max
      pairs.each do |k, v|
        out << "#{k.to_s.ljust(ljust)}  #{v}\n"
      end
      out << "```\n"
    end

    private_class_method :read_file, :ruby_version, :git_version, :append_formatted_table, :version_of, :chruby_version
  end
end
PK)J[Q*X���7share/gems/gems/bundler-2.6.7/lib/bundler/gem_helper.rbnu�[���# frozen_string_literal: true

require_relative "../bundler"
require "shellwords"

module Bundler
  class GemHelper
    include Rake::DSL if defined? Rake::DSL

    class << self
      # set when install'd.
      attr_accessor :instance

      def install_tasks(opts = {})
        new(opts[:dir], opts[:name]).install
      end

      def tag_prefix=(prefix)
        instance.tag_prefix = prefix
      end

      def gemspec(&block)
        gemspec = instance.gemspec
        block&.call(gemspec)
        gemspec
      end
    end

    attr_reader :spec_path, :base, :gemspec

    attr_writer :tag_prefix

    def initialize(base = nil, name = nil)
      @base = File.expand_path(base || SharedHelpers.pwd)
      gemspecs = name ? [File.join(@base, "#{name}.gemspec")] : Gem::Util.glob_files_in_dir("{,*}.gemspec", @base)
      raise "Unable to determine name from existing gemspec. Use :name => 'gemname' in #install_tasks to manually set it." unless gemspecs.size == 1
      @spec_path = gemspecs.first
      @gemspec = Bundler.load_gemspec(@spec_path)
      @tag_prefix = ""
    end

    def install
      built_gem_path = nil

      desc "Build #{name}-#{version}.gem into the pkg directory."
      task "build" do
        built_gem_path = build_gem
      end

      desc "Generate SHA512 checksum of #{name}-#{version}.gem into the checksums directory."
      task "build:checksum" => "build" do
        build_checksum(built_gem_path)
      end

      desc "Build and install #{name}-#{version}.gem into system gems."
      task "install" => "build" do
        install_gem(built_gem_path)
      end

      desc "Build and install #{name}-#{version}.gem into system gems without network access."
      task "install:local" => "build" do
        install_gem(built_gem_path, :local)
      end

      desc "Create tag #{version_tag} and build and push #{name}-#{version}.gem to #{gem_push_host}\n" \
           "To prevent publishing in RubyGems use `gem_push=no rake release`"
      task "release", [:remote] => ["build", "release:guard_clean",
                                    "release:source_control_push", "release:rubygem_push"] do
      end

      task "release:guard_clean" do
        guard_clean
      end

      task "release:source_control_push", [:remote] do |_, args|
        tag_version { git_push(args[:remote]) } unless already_tagged?
      end

      task "release:rubygem_push" => "build" do
        rubygem_push(built_gem_path) if gem_push?
      end

      GemHelper.instance = self
    end

    def build_gem
      file_name = nil
      sh([*gem_command, "build", "-V", spec_path]) do
        file_name = File.basename(built_gem_path)
        SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) }
        FileUtils.mv(built_gem_path, "pkg")
        Bundler.ui.confirm "#{name} #{version} built to pkg/#{file_name}."
      end
      File.join(base, "pkg", file_name)
    end

    def install_gem(built_gem_path = nil, local = false)
      built_gem_path ||= build_gem
      cmd = [*gem_command, "install", built_gem_path.to_s]
      cmd << "--local" if local
      sh(cmd)
      Bundler.ui.confirm "#{name} (#{version}) installed."
    end

    def build_checksum(built_gem_path = nil)
      built_gem_path ||= build_gem
      SharedHelpers.filesystem_access(File.join(base, "checksums")) {|p| FileUtils.mkdir_p(p) }
      file_name = "#{File.basename(built_gem_path)}.sha512"
      require "digest/sha2"
      checksum = ::Digest::SHA512.file(built_gem_path).hexdigest
      target = File.join(base, "checksums", file_name)
      File.write(target, checksum + "\n")
      Bundler.ui.confirm "#{name} #{version} checksum written to checksums/#{file_name}."
    end

    protected

    def rubygem_push(path)
      cmd = [*gem_command, "push", path]
      cmd << "--key" << gem_key if gem_key
      cmd << "--host" << allowed_push_host if allowed_push_host
      sh_with_input(cmd)
      Bundler.ui.confirm "Pushed #{name} #{version} to #{gem_push_host}"
    end

    def built_gem_path
      Gem::Util.glob_files_in_dir("#{name}-*.gem", base).sort_by {|f| File.mtime(f) }.last
    end

    def git_push(remote = nil)
      remote ||= default_remote
      sh("git push #{remote} refs/heads/#{current_branch}".shellsplit)
      sh("git push #{remote} refs/tags/#{version_tag}".shellsplit)
      Bundler.ui.confirm "Pushed git commits and release tag."
    end

    def default_remote
      remote_for_branch, status = sh_with_status(%W[git config --get branch.#{current_branch}.remote])
      return "origin" unless status.success?

      remote_for_branch.strip
    end

    def current_branch
      # We can replace this with `git branch --show-current` once we drop support for git < 2.22.0
      sh(%w[git rev-parse --abbrev-ref HEAD]).gsub(%r{\Aheads/}, "").strip
    end

    def allowed_push_host
      @gemspec.metadata["allowed_push_host"] if @gemspec.respond_to?(:metadata)
    end

    def gem_push_host
      env_rubygems_host = ENV["RUBYGEMS_HOST"]
      env_rubygems_host = nil if env_rubygems_host&.empty?

      allowed_push_host || env_rubygems_host || "rubygems.org"
    end

    def already_tagged?
      return false unless sh(%w[git tag]).split(/\n/).include?(version_tag)
      Bundler.ui.confirm "Tag #{version_tag} has already been created."
      true
    end

    def guard_clean
      clean? && committed? || raise("There are files that need to be committed first.")
    end

    def clean?
      sh_with_status(%w[git diff --exit-code])[1].success?
    end

    def committed?
      sh_with_status(%w[git diff-index --quiet --cached HEAD])[1].success?
    end

    def tag_version
      sh %W[git tag -m Version\ #{version} #{version_tag}]
      Bundler.ui.confirm "Tagged #{version_tag}."
      yield if block_given?
    rescue RuntimeError
      Bundler.ui.error "Untagging #{version_tag} due to error."
      sh_with_status %W[git tag -d #{version_tag}]
      raise
    end

    def version
      gemspec.version
    end

    def version_tag
      "#{@tag_prefix}v#{version}"
    end

    def name
      gemspec.name
    end

    def sh_with_input(cmd)
      Bundler.ui.debug(cmd)
      SharedHelpers.chdir(base) do
        abort unless Kernel.system(*cmd)
      end
    end

    def sh(cmd, &block)
      out, status = sh_with_status(cmd, &block)
      unless status.success?
        raise("Running `#{cmd.shelljoin}` failed with the following output:\n\n#{out}\n")
      end
      out
    end

    def sh_with_status(cmd, &block)
      Bundler.ui.debug(cmd)
      SharedHelpers.chdir(base) do
        outbuf = IO.popen(cmd, err: [:child, :out], &:read)
        status = $?
        block&.call(outbuf) if status.success?
        [outbuf, status]
      end
    end

    def gem_key
      Bundler.settings["gem.push_key"].to_s.downcase if Bundler.settings["gem.push_key"]
    end

    def gem_push?
      !%w[n no nil false off 0].include?(ENV["gem_push"].to_s.downcase)
    end

    def gem_command
      ENV["GEM_COMMAND"]&.shellsplit || ["gem"]
    end
  end
end
PK)J[��w���Bshare/gems/gems/bundler-2.6.7/lib/bundler/environment_preserver.rbnu�[���# frozen_string_literal: true

module Bundler
  class EnvironmentPreserver
    INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL"
    BUNDLER_KEYS = %w[
      BUNDLE_BIN_PATH
      BUNDLE_GEMFILE
      BUNDLER_VERSION
      BUNDLER_SETUP
      GEM_HOME
      GEM_PATH
      MANPATH
      PATH
      RB_USER_INSTALL
      RUBYLIB
      RUBYOPT
    ].map(&:freeze).freeze
    BUNDLER_PREFIX = "BUNDLER_ORIG_"

    def self.from_env
      new(ENV.to_hash, BUNDLER_KEYS)
    end

    # @param env [Hash]
    # @param keys [Array<String>]
    def initialize(env, keys)
      @original = env
      @keys = keys
      @prefix = BUNDLER_PREFIX
    end

    # Replaces `ENV` with the bundler environment variables backed up
    def replace_with_backup
      ENV.replace(backup)
    end

    # @return [Hash]
    def backup
      env = @original.clone
      @keys.each do |key|
        value = env[key]
        if !value.nil?
          env[@prefix + key] ||= value
        else
          env[@prefix + key] ||= INTENTIONALLY_NIL
        end
      end
      env
    end

    # @return [Hash]
    def restore
      env = @original.clone
      @keys.each do |key|
        value_original = env[@prefix + key]
        next if value_original.nil?
        if value_original == INTENTIONALLY_NIL
          env.delete(key)
        else
          env[key] = value_original
        end
        env.delete(@prefix + key)
      end
      env
    end
  end
end
PK)J[�aKϩ1�1;share/gems/gems/bundler-2.6.7/lib/bundler/shared_helpers.rbnu�[���# frozen_string_literal: true

require_relative "version"
require_relative "rubygems_integration"
require_relative "current_ruby"

autoload :Pathname, "pathname"

module Bundler
  autoload :WINDOWS, File.expand_path("constants", __dir__)
  autoload :FREEBSD, File.expand_path("constants", __dir__)
  autoload :NULL, File.expand_path("constants", __dir__)

  module SharedHelpers
    def root
      gemfile = find_gemfile
      raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
      Pathname.new(gemfile).expand_path.parent
    end

    def default_gemfile
      gemfile = find_gemfile
      raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
      Pathname.new(gemfile).expand_path
    end

    def default_lockfile
      gemfile = default_gemfile

      case gemfile.basename.to_s
      when "gems.rb" then Pathname.new(gemfile.sub(/.rb$/, ".locked"))
      else Pathname.new("#{gemfile}.lock")
      end
    end

    def default_bundle_dir
      bundle_dir = find_directory(".bundle")
      return nil unless bundle_dir

      bundle_dir = Pathname.new(bundle_dir)

      global_bundle_dir = Bundler.user_home.join(".bundle")
      return nil if bundle_dir == global_bundle_dir

      bundle_dir
    end

    def in_bundle?
      find_gemfile
    end

    def chdir(dir, &blk)
      Bundler.rubygems.ext_lock.synchronize do
        Dir.chdir dir, &blk
      end
    end

    def pwd
      Bundler.rubygems.ext_lock.synchronize do
        Pathname.pwd
      end
    end

    def with_clean_git_env(&block)
      keys    = %w[GIT_DIR GIT_WORK_TREE]
      old_env = keys.inject({}) do |h, k|
        h.update(k => ENV[k])
      end

      keys.each {|key| ENV.delete(key) }

      block.call
    ensure
      keys.each {|key| ENV[key] = old_env[key] }
    end

    def set_bundle_environment
      set_bundle_variables
      set_path
      set_rubyopt
      set_rubylib
    end

    # Rescues permissions errors raised by file system operations
    # (ie. Errno:EACCESS, Errno::EAGAIN) and raises more friendly errors instead.
    #
    # @param path [String] the path that the action will be attempted to
    # @param action [Symbol, #to_s] the type of operation that will be
    #   performed. For example: :write, :read, :exec
    #
    # @yield path
    #
    # @raise [Bundler::PermissionError] if Errno:EACCES is raised in the
    #   given block
    # @raise [Bundler::TemporaryResourceError] if Errno:EAGAIN is raised in the
    #   given block
    #
    # @example
    #   filesystem_access("vendor/cache", :create) do
    #     FileUtils.mkdir_p("vendor/cache")
    #   end
    #
    # @see {Bundler::PermissionError}
    def filesystem_access(path, action = :write, &block)
      yield(path.dup)
    rescue Errno::EACCES => e
      raise unless e.message.include?(path.to_s) || action == :create

      raise PermissionError.new(path, action)
    rescue Errno::EAGAIN
      raise TemporaryResourceError.new(path, action)
    rescue Errno::EPROTO
      raise VirtualProtocolError.new
    rescue Errno::ENOSPC
      raise NoSpaceOnDeviceError.new(path, action)
    rescue Errno::ENOTSUP
      raise OperationNotSupportedError.new(path, action)
    rescue Errno::EPERM
      raise OperationNotPermittedError.new(path, action)
    rescue Errno::EROFS
      raise ReadOnlyFileSystemError.new(path, action)
    rescue Errno::EEXIST, Errno::ENOENT
      raise
    rescue SystemCallError => e
      raise GenericSystemCallError.new(e, "There was an error #{[:create, :write].include?(action) ? "creating" : "accessing"} `#{path}`.")
    end

    def major_deprecation(major_version, message, removed_message: nil, print_caller_location: false)
      if print_caller_location
        caller_location = caller_locations(2, 2).first
        suffix = " (called at #{caller_location.path}:#{caller_location.lineno})"
        message += suffix
        removed_message += suffix if removed_message
      end

      bundler_major_version = Bundler.bundler_major_version
      if bundler_major_version > major_version
        require_relative "errors"
        raise DeprecatedError, "[REMOVED] #{removed_message || message}"
      end

      return unless bundler_major_version >= major_version && prints_major_deprecations?
      Bundler.ui.warn("[DEPRECATED] #{message}")
    end

    def print_major_deprecations!
      multiple_gemfiles = search_up(".") do |dir|
        gemfiles = gemfile_names.select {|gf| File.file? File.expand_path(gf, dir) }
        next if gemfiles.empty?
        break gemfiles.size != 1
      end
      return unless multiple_gemfiles
      message = "Multiple gemfiles (gems.rb and Gemfile) detected. " \
                "Make sure you remove Gemfile and Gemfile.lock since bundler is ignoring them in favor of gems.rb and gems.locked."
      Bundler.ui.warn message
    end

    def ensure_same_dependencies(spec, old_deps, new_deps)
      new_deps = new_deps.reject {|d| d.type == :development }
      old_deps = old_deps.reject {|d| d.type == :development }

      without_type = proc {|d| Gem::Dependency.new(d.name, d.requirements_list.sort) }
      new_deps.map!(&without_type)
      old_deps.map!(&without_type)

      extra_deps = new_deps - old_deps
      return if extra_deps.empty?

      Bundler.ui.debug "#{spec.full_name} from #{spec.remote} has corrupted API dependencies" \
        " (was expecting #{old_deps.map(&:to_s)}, but the real spec has #{new_deps.map(&:to_s)})"
      raise APIResponseMismatchError,
        "Downloading #{spec.full_name} revealed dependencies not in the API (#{extra_deps.join(", ")})." \
        "\nRunning `bundle update #{spec.name}` should fix the problem."
    end

    def pretty_dependency(dep)
      msg = String.new(dep.name)
      msg << " (#{dep.requirement})" unless dep.requirement == Gem::Requirement.default

      if dep.is_a?(Bundler::Dependency)
        platform_string = dep.platforms.join(", ")
        msg << " " << platform_string if !platform_string.empty? && platform_string != Gem::Platform::RUBY
      end

      msg
    end

    def md5_available?
      return @md5_available if defined?(@md5_available)
      @md5_available = begin
        require "openssl"
        ::OpenSSL::Digest.digest("MD5", "")
        true
      rescue LoadError
        true
      rescue ::OpenSSL::Digest::DigestError
        false
      end
    end

    def digest(name)
      require "digest"
      Digest(name)
    end

    def checksum_for_file(path, digest)
      return unless path.file?
      # This must use File.read instead of Digest.file().hexdigest
      # because we need to preserve \n line endings on windows when calculating
      # the checksum
      SharedHelpers.filesystem_access(path, :read) do
        File.open(path, "rb") do |f|
          digest = SharedHelpers.digest(digest).new
          buf = String.new(capacity: 16_384, encoding: Encoding::BINARY)
          digest << buf while f.read(16_384, buf)
          digest.hexdigest
        end
      end
    end

    def write_to_gemfile(gemfile_path, contents)
      filesystem_access(gemfile_path) {|g| File.open(g, "w") {|file| file.puts contents } }
    end

    def relative_gemfile_path
      relative_path_to(Bundler.default_gemfile)
    end

    def relative_lockfile_path
      relative_path_to(Bundler.default_lockfile)
    end

    def relative_path_to(destination, from: pwd)
      Pathname.new(destination).relative_path_from(from).to_s
    rescue ArgumentError
      # on Windows, if source and destination are on different drivers, there's no relative path from one to the other
      destination
    end

    private

    def validate_bundle_path
      path_separator = Bundler.rubygems.path_separator
      return unless Bundler.bundle_path.to_s.split(path_separator).size > 1
      message = "Your bundle path contains text matching #{path_separator.inspect}, " \
                "which is the path separator for your system. Bundler cannot " \
                "function correctly when the Bundle path contains the " \
                "system's PATH separator. Please change your " \
                "bundle path to not match #{path_separator.inspect}." \
                "\nYour current bundle path is '#{Bundler.bundle_path}'."
      raise Bundler::PathError, message
    end

    def find_gemfile
      given = ENV["BUNDLE_GEMFILE"]
      return given if given && !given.empty?
      find_file(*gemfile_names)
    end

    def gemfile_names
      ["gems.rb", "Gemfile"]
    end

    def find_file(*names)
      search_up(*names) do |filename|
        return filename if File.file?(filename)
      end
    end

    def find_directory(*names)
      search_up(*names) do |dirname|
        return dirname if File.directory?(dirname)
      end
    end

    def search_up(*names)
      previous = nil
      current  = File.expand_path(SharedHelpers.pwd)

      until !File.directory?(current) || current == previous
        if ENV["BUNDLER_SPEC_RUN"]
          # avoid stepping above the tmp directory when testing
          return nil if File.directory?(File.join(current, "tmp"))
        end

        names.each do |name|
          filename = File.join(current, name)
          yield filename
        end
        previous = current
        current = File.expand_path("..", current)
      end
    end

    def set_env(key, value)
      raise ArgumentError, "new key #{key}" unless EnvironmentPreserver::BUNDLER_KEYS.include?(key)
      orig_key = "#{EnvironmentPreserver::BUNDLER_PREFIX}#{key}"
      orig = ENV[key]
      orig ||= EnvironmentPreserver::INTENTIONALLY_NIL
      ENV[orig_key] ||= orig

      ENV[key] = value
    end
    public :set_env

    def set_bundle_variables
      Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", bundle_bin_path
      Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s
      Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
      Bundler::SharedHelpers.set_env "BUNDLER_SETUP", File.expand_path("setup", __dir__)
    end

    def bundle_bin_path
      # bundler exe & lib folders have same root folder, typical gem installation
      exe_file = File.join(source_root, "exe/bundle")

      # for Ruby core repository testing
      exe_file = File.join(source_root, "libexec/bundle") unless File.exist?(exe_file)

      # bundler is a default gem, exe path is separate
      exe_file = Gem.bin_path("bundler", "bundle", VERSION) unless File.exist?(exe_file)

      exe_file
    end
    public :bundle_bin_path

    def gemspec_path
      # inside a gem repository, typical gem installation
      gemspec_file = File.join(source_root, "../../specifications/bundler-#{VERSION}.gemspec")

      # for Ruby core repository testing
      gemspec_file = File.expand_path("bundler.gemspec", __dir__) unless File.exist?(gemspec_file)

      # bundler is a default gem
      gemspec_file = File.join(Gem.default_specifications_dir, "bundler-#{VERSION}.gemspec") unless File.exist?(gemspec_file)

      gemspec_file
    end
    public :gemspec_path

    def source_root
      File.expand_path("../..", __dir__)
    end

    def set_path
      validate_bundle_path
      paths = (ENV["PATH"] || "").split(File::PATH_SEPARATOR)
      paths.unshift "#{Bundler.bundle_path}/bin"
      Bundler::SharedHelpers.set_env "PATH", paths.uniq.join(File::PATH_SEPARATOR)
    end

    def set_rubyopt
      rubyopt = [ENV["RUBYOPT"]].compact
      setup_require = "-r#{File.expand_path("setup", __dir__)}"
      return if !rubyopt.empty? && rubyopt.first.include?(setup_require)
      rubyopt.unshift setup_require
      Bundler::SharedHelpers.set_env "RUBYOPT", rubyopt.join(" ")
    end

    def set_rubylib
      rubylib = (ENV["RUBYLIB"] || "").split(File::PATH_SEPARATOR)
      rubylib.unshift bundler_ruby_lib unless RbConfig::CONFIG["rubylibdir"] == bundler_ruby_lib
      Bundler::SharedHelpers.set_env "RUBYLIB", rubylib.uniq.join(File::PATH_SEPARATOR)
    end

    def bundler_ruby_lib
      File.expand_path("..", __dir__)
    end

    def clean_load_path
      loaded_gem_paths = Bundler.rubygems.loaded_gem_paths

      $LOAD_PATH.reject! do |p|
        resolved_path = resolve_path(p)
        next if $LOADED_FEATURES.any? {|lf| lf.start_with?(resolved_path) }
        loaded_gem_paths.delete(p)
      end
      $LOAD_PATH.uniq!
    end

    def resolve_path(path)
      expanded = File.expand_path(path)
      return expanded unless File.exist?(expanded)

      File.realpath(expanded)
    end

    def prints_major_deprecations?
      require_relative "../bundler"
      return false if Bundler.settings[:silence_deprecations]
      require_relative "deprecate"
      return false if Bundler::Deprecate.skip
      true
    end

    extend self
  end
end
PK)J[.��RQ#Q#5share/gems/gems/bundler-2.6.7/lib/bundler/spec_set.rbnu�[���# frozen_string_literal: true

require_relative "vendored_tsort"

module Bundler
  class SpecSet
    include Enumerable
    include TSort

    def initialize(specs)
      @specs = specs
    end

    def for(dependencies, platforms_or_legacy_check = [nil], legacy_platforms = [nil], skips: [])
      platforms = if [true, false].include?(platforms_or_legacy_check)
        Bundler::SharedHelpers.major_deprecation 2,
          "SpecSet#for received a `check` parameter, but that's no longer used and deprecated. " \
          "SpecSet#for always implicitly performs validation. Please remove this parameter",
          print_caller_location: true

        legacy_platforms
      else
        platforms_or_legacy_check
      end

      materialize_dependencies(dependencies, platforms, skips: skips)

      @materializations.flat_map(&:specs).uniq
    end

    def normalize_platforms!(deps, platforms)
      complete_platforms = add_extra_platforms!(platforms)

      complete_platforms.map do |platform|
        next platform if platform == Gem::Platform::RUBY

        begin
          Integer(platform.version)
        rescue ArgumentError, TypeError
          next platform
        end

        less_specific_platform = Gem::Platform.new([platform.cpu, platform.os, nil])
        next platform if incomplete_for_platform?(deps, less_specific_platform)

        less_specific_platform
      end.uniq
    end

    def add_originally_invalid_platforms!(platforms, originally_invalid_platforms)
      originally_invalid_platforms.each do |originally_invalid_platform|
        platforms << originally_invalid_platform if complete_platform(originally_invalid_platform)
      end
    end

    def add_extra_platforms!(platforms)
      if @specs.empty?
        platforms.concat([Gem::Platform::RUBY]).uniq
        return
      end

      new_platforms = all_platforms.select do |platform|
        next if platforms.include?(platform)
        next unless GemHelpers.generic(platform) == Gem::Platform::RUBY

        complete_platform(platform)
      end
      return if new_platforms.empty?

      platforms.concat(new_platforms)

      less_specific_platform = new_platforms.find {|platform| platform != Gem::Platform::RUBY && Bundler.local_platform === platform && platform === Bundler.local_platform }
      platforms.delete(Bundler.local_platform) if less_specific_platform
    end

    def validate_deps(s)
      s.runtime_dependencies.each do |dep|
        next if dep.name == "bundler"

        return :missing unless names.include?(dep.name)
        return :invalid if none? {|spec| dep.matches_spec?(spec) }
      end

      :valid
    end

    def [](key)
      key = key.name if key.respond_to?(:name)
      lookup[key]&.reverse || []
    end

    def []=(key, value)
      delete_by_name(key)

      add_spec(value)
    end

    def delete(specs)
      Array(specs).each {|spec| remove_spec(spec) }
    end

    def sort!
      self
    end

    def to_a
      sorted.dup
    end

    def to_hash
      lookup.dup
    end

    def materialize(deps)
      materialize_dependencies(deps)

      SpecSet.new(materialized_specs)
    end

    # Materialize for all the specs in the spec set, regardless of what platform they're for
    # @return [Array<Gem::Specification>]
    def materialized_for_all_platforms
      @specs.map do |s|
        next s unless s.is_a?(LazySpecification)
        spec = s.materialize_for_cache
        raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
        spec
      end
    end

    def incomplete_for_platform?(deps, platform)
      return false if @specs.empty?

      validation_set = self.class.new(@specs)
      validation_set.for(deps, [platform])

      validation_set.incomplete_specs.any?
    end

    def missing_specs_for(deps)
      materialize_dependencies(deps)

      missing_specs
    end

    def missing_specs
      @materializations.flat_map(&:completely_missing_specs)
    end

    def partially_missing_specs
      @materializations.flat_map(&:partially_missing_specs)
    end

    def incomplete_specs
      @materializations.flat_map(&:incomplete_specs)
    end

    def insecurely_materialized_specs
      materialized_specs.select(&:insecurely_materialized?)
    end

    def -(other)
      SpecSet.new(to_a - other.to_a)
    end

    def find_by_name_and_platform(name, platform)
      @specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
    end

    def specs_with_additional_variants_from(other)
      sorted | additional_variants_from(other)
    end

    def delete_by_name(name)
      @specs.reject! {|spec| spec.name == name }
      @sorted&.reject! {|spec| spec.name == name }
      return if @lookup.nil?

      @lookup[name] = nil
    end

    def version_for(name)
      self[name].first&.version
    end

    def what_required(spec)
      unless req = find {|s| s.runtime_dependencies.any? {|d| d.name == spec.name } }
        return [spec]
      end
      what_required(req) << spec
    end

    def <<(spec)
      @specs << spec
    end

    def length
      @specs.length
    end

    def size
      @specs.size
    end

    def empty?
      @specs.empty?
    end

    def each(&b)
      sorted.each(&b)
    end

    def names
      lookup.keys
    end

    def valid?(s)
      s.matches_current_metadata? && valid_dependencies?(s)
    end

    def to_s
      map(&:full_name).to_s
    end

    private

    def materialize_dependencies(dependencies, platforms = [nil], skips: [])
      handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
      deps = dependencies.product(platforms)
      @materializations = []

      loop do
        break unless dep = deps.shift

        dependency = dep[0]
        platform = dep[1]
        name = dependency.name

        key = [name, platform]
        next if handled.key?(key)

        handled[key] = true

        materialization = Materialization.new(dependency, platform, candidates: lookup[name])

        deps.concat(materialization.dependencies) if materialization.complete?

        @materializations << materialization unless skips.include?(name)
      end

      @materializations
    end

    def materialized_specs
      @materializations.filter_map(&:materialized_spec)
    end

    def complete_platform(platform)
      new_specs = []

      valid_platform = lookup.all? do |_, specs|
        spec = specs.first
        matching_specs = spec.source.specs.search([spec.name, spec.version])
        platform_spec = GemHelpers.select_best_platform_match(matching_specs, platform).find do |s|
          valid?(s)
        end

        if platform_spec
          new_specs << LazySpecification.from_spec(platform_spec) unless specs.include?(platform_spec)
          true
        else
          false
        end
      end

      if valid_platform && new_specs.any?
        new_specs.each {|spec| add_spec(spec) }
      end

      valid_platform
    end

    def all_platforms
      @specs.flat_map {|spec| spec.source.specs.search([spec.name, spec.version]).map(&:platform) }.uniq
    end

    def additional_variants_from(other)
      other.select do |spec|
        version_for(spec.name) == spec.version && valid_dependencies?(spec)
      end
    end

    def valid_dependencies?(s)
      validate_deps(s) == :valid
    end

    def sorted
      @sorted ||= ([@specs.find {|s| s.name == "rake" }] + tsort).compact.uniq
    rescue TSort::Cyclic => error
      cgems = extract_circular_gems(error)
      raise CyclicDependencyError, "Your bundle requires gems that depend" \
        " on each other, creating an infinite loop. Please remove either" \
        " gem '#{cgems[0]}' or gem '#{cgems[1]}' and try again."
    end

    def extract_circular_gems(error)
      error.message.scan(/@name="(.*?)"/).flatten
    end

    def lookup
      @lookup ||= begin
        lookup = {}
        @specs.each do |s|
          index_spec(lookup, s.name, s)
        end
        lookup
      end
    end

    def tsort_each_node
      # MUST sort by name for backwards compatibility
      @specs.sort_by(&:name).each {|s| yield s }
    end

    def tsort_each_child(s)
      s.dependencies.sort_by(&:name).each do |d|
        next if d.type == :development

        specs_for_name = lookup[d.name]
        next unless specs_for_name

        specs_for_name.each {|s2| yield s2 }
      end
    end

    def add_spec(spec)
      @specs << spec

      name = spec.name

      @sorted&.insert(@sorted.bsearch_index {|s| s.name >= name } || @sorted.size, spec)
      return if @lookup.nil?

      index_spec(@lookup, name, spec)
    end

    def remove_spec(spec)
      @specs.delete(spec)
      @sorted&.delete(spec)
      return if @lookup.nil?

      indexed_specs = @lookup[spec.name]
      return unless indexed_specs

      if indexed_specs.size > 1
        @lookup[spec.name].delete(spec)
      else
        @lookup[spec.name] = nil
      end
    end

    def index_spec(hash, key, value)
      hash[key] ||= []
      hash[key] << value
    end
  end
end
PK)J[��/�**9share/gems/gems/bundler-2.6.7/lib/bundler/process_lock.rbnu�[���# frozen_string_literal: true

module Bundler
  class ProcessLock
    def self.lock(bundle_path = Bundler.bundle_path, &block)
      lock_file_path = File.join(bundle_path, "bundler.lock")
      base_lock_file_path = lock_file_path.delete_suffix(".lock")

      require "fileutils" if Bundler.rubygems.provides?("< 3.6.0")

      begin
        SharedHelpers.filesystem_access(lock_file_path, :write) do
          Gem.open_file_with_lock(base_lock_file_path, &block)
        end
      rescue PermissionError
        block.call
      end
    end
  end
end
PK)J[��.�44Ishare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/updater.rbnu�[���# frozen_string_literal: true

module Bundler
  class CompactIndexClient
    class Updater
      class MismatchedChecksumError < Error
        def initialize(path, message)
          super "The checksum of /#{path} does not match the checksum provided by the server! Something is wrong. #{message}"
        end
      end

      def initialize(fetcher)
        @fetcher = fetcher
      end

      def update(remote_path, local_path, etag_path)
        append(remote_path, local_path, etag_path) || replace(remote_path, local_path, etag_path)
      rescue CacheFile::DigestMismatchError => e
        raise MismatchedChecksumError.new(remote_path, e.message)
      rescue Zlib::GzipFile::Error
        raise Bundler::HTTPError
      end

      private

      def append(remote_path, local_path, etag_path)
        return false unless local_path.file? && local_path.size.nonzero?

        CacheFile.copy(local_path) do |file|
          etag = etag_path.read.tap(&:chomp!) if etag_path.file?

          # Subtract a byte to ensure the range won't be empty.
          # Avoids 416 (Range Not Satisfiable) responses.
          response = @fetcher.call(remote_path, request_headers(etag, file.size - 1))
          break true if response.is_a?(Gem::Net::HTTPNotModified)

          file.digests = parse_digests(response)
          # server may ignore Range and return the full response
          if response.is_a?(Gem::Net::HTTPPartialContent)
            tail = response.body.byteslice(1..-1)
            break false unless tail && file.append(tail)
          else
            file.write(response.body)
          end
          CacheFile.write(etag_path, etag_from_response(response))
          true
        end
      end

      # request without range header to get the full file or a 304 Not Modified
      def replace(remote_path, local_path, etag_path)
        etag = etag_path.read.tap(&:chomp!) if etag_path.file?
        response = @fetcher.call(remote_path, request_headers(etag))
        return true if response.is_a?(Gem::Net::HTTPNotModified)
        CacheFile.write(local_path, response.body, parse_digests(response))
        CacheFile.write(etag_path, etag_from_response(response))
      end

      def request_headers(etag, range_start = nil)
        headers = {}
        headers["Range"] = "bytes=#{range_start}-" if range_start
        headers["If-None-Match"] = %("#{etag}") if etag
        headers
      end

      def etag_for_request(etag_path)
        etag_path.read.tap(&:chomp!) if etag_path.file?
      end

      def etag_from_response(response)
        return unless response["ETag"]
        etag = response["ETag"].delete_prefix("W/")
        return if etag.delete_prefix!('"') && !etag.delete_suffix!('"')
        etag
      end

      # Unwraps and returns a Hash of digest algorithms and base64 values
      # according to RFC 8941 Structured Field Values for HTTP.
      # https://www.rfc-editor.org/rfc/rfc8941#name-parsing-a-byte-sequence
      # Ignores unsupported algorithms.
      def parse_digests(response)
        return unless header = response["Repr-Digest"] || response["Digest"]
        digests = {}
        header.split(",") do |param|
          algorithm, value = param.split("=", 2)
          algorithm.strip!
          algorithm.downcase!
          next unless SUPPORTED_DIGESTS.key?(algorithm)
          next unless value = byte_sequence(value)
          digests[algorithm] = value
        end
        digests.empty? ? nil : digests
      end

      # Unwrap surrounding colons (byte sequence)
      # The wrapping characters must be matched or we return nil.
      # Also handles quotes because right now rubygems.org sends them.
      def byte_sequence(value)
        return if value.delete_prefix!(":") && !value.delete_suffix!(":")
        return if value.delete_prefix!('"') && !value.delete_suffix!('"')
        value
      end
    end
  end
end
PK)J[�w���
�
Hshare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/parser.rbnu�[���# frozen_string_literal: true

module Bundler
  class CompactIndexClient
    class Parser
      # `compact_index` - an object responding to #names, #versions, #info(name, checksum),
      #                   returning the file contents as a string
      def initialize(compact_index)
        @compact_index = compact_index
        @info_checksums = nil
        @versions_by_name = nil
        @available = nil
        @gem_parser = nil
      end

      def names
        lines(@compact_index.names)
      end

      def versions
        @versions_by_name ||= Hash.new {|hash, key| hash[key] = [] }
        @info_checksums = {}

        lines(@compact_index.versions).each do |line|
          name, versions_string, checksum = line.split(" ", 3)
          @info_checksums[name] = checksum || ""
          versions_string.split(",") do |version|
            delete = version.delete_prefix!("-")
            version = version.split("-", 2).unshift(name)
            if delete
              @versions_by_name[name].delete(version)
            else
              @versions_by_name[name] << version
            end
          end
        end

        @versions_by_name
      end

      def info(name)
        data = @compact_index.info(name, info_checksums[name])
        lines(data).map {|line| gem_parser.parse(line).unshift(name) }
      end

      def available?
        return @available unless @available.nil?
        @available = !info_checksums.empty?
      end

      private

      def info_checksums
        @info_checksums ||= lines(@compact_index.versions).each_with_object({}) do |line, checksums|
          parse_version_checksum(line, checksums)
        end
      end

      def lines(data)
        return [] if data.nil? || data.empty?
        lines = data.split("\n")
        header = lines.index("---")
        header ? lines[header + 1..-1] : lines
      end

      def gem_parser
        @gem_parser ||= Gem::Resolver::APISet::GemParser.new
      end

      # This is mostly the same as `split(" ", 3)` but it avoids allocating extra objects.
      # This method gets called at least once for every gem when parsing versions.
      def parse_version_checksum(line, checksums)
        return unless (name_end = line.index(" ")) # Artifactory bug causes blank lines in artifactor index files
        return unless (checksum_start = line.index(" ", name_end + 1) + 1)
        checksum_end = line.size - checksum_start

        line.freeze # allows slicing into the string to not allocate a copy of the line
        name = line[0, name_end]
        checksum = line[checksum_start, checksum_end]
        checksums[name.freeze] = checksum # freeze name since it is used as a hash key
      end
    end
  end
end
PK)J[#uIGshare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/cache.rbnu�[���# frozen_string_literal: true

require "rubygems/resolver/api_set/gem_parser"

module Bundler
  class CompactIndexClient
    class Cache
      attr_reader :directory

      def initialize(directory, fetcher = nil)
        @directory = Pathname.new(directory).expand_path
        @updater = Updater.new(fetcher) if fetcher
        @mutex = Thread::Mutex.new
        @endpoints = Set.new

        @info_root = mkdir("info")
        @special_characters_info_root = mkdir("info-special-characters")
        @info_etag_root = mkdir("info-etags")
      end

      def names
        fetch("names", names_path, names_etag_path)
      end

      def versions
        fetch("versions", versions_path, versions_etag_path)
      end

      def info(name, remote_checksum = nil)
        path = info_path(name)

        if remote_checksum && remote_checksum != SharedHelpers.checksum_for_file(path, :MD5)
          fetch("info/#{name}", path, info_etag_path(name))
        else
          Bundler::CompactIndexClient.debug { "update skipped info/#{name} (#{remote_checksum ? "versions index checksum is nil" : "versions index checksum matches local"})" }
          read(path)
        end
      end

      def reset!
        @mutex.synchronize { @endpoints.clear }
      end

      private

      def names_path = directory.join("names")
      def names_etag_path = directory.join("names.etag")
      def versions_path = directory.join("versions")
      def versions_etag_path = directory.join("versions.etag")

      def info_path(name)
        name = name.to_s
        # TODO: converge this into the info_root by hashing all filenames like info_etag_path
        if /[^a-z0-9_-]/.match?(name)
          name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}"
          @special_characters_info_root.join(name)
        else
          @info_root.join(name)
        end
      end

      def info_etag_path(name)
        name = name.to_s
        @info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}")
      end

      def mkdir(name)
        directory.join(name).tap do |dir|
          SharedHelpers.filesystem_access(dir) do
            FileUtils.mkdir_p(dir)
          end
        end
      end

      def fetch(remote_path, path, etag_path)
        if already_fetched?(remote_path)
          Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" }
        else
          Bundler::CompactIndexClient.debug { "fetching #{remote_path}" }
          @updater&.update(remote_path, path, etag_path)
        end

        read(path)
      end

      def already_fetched?(remote_path)
        @mutex.synchronize { !@endpoints.add?(remote_path) }
      end

      def read(path)
        return unless path.file?
        SharedHelpers.filesystem_access(path, :read, &:read)
      end
    end
  end
end
PK)J[��$A��Lshare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/cache_file.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_fileutils"
require "rubygems/package"

module Bundler
  class CompactIndexClient
    # write cache files in a way that is robust to concurrent modifications
    # if digests are given, the checksums will be verified
    class CacheFile
      DEFAULT_FILE_MODE = 0o644
      private_constant :DEFAULT_FILE_MODE

      class Error < RuntimeError; end
      class ClosedError < Error; end

      class DigestMismatchError < Error
        def initialize(digests, expected_digests)
          super "Calculated checksums #{digests.inspect} did not match expected #{expected_digests.inspect}."
        end
      end

      # Initialize with a copy of the original file, then yield the instance.
      def self.copy(path, &block)
        new(path) do |file|
          file.initialize_digests

          SharedHelpers.filesystem_access(path, :read) do
            path.open("rb") do |s|
              file.open {|f| IO.copy_stream(s, f) }
            end
          end

          yield file
        end
      end

      # Write data to a temp file, then replace the original file with it verifying the digests if given.
      def self.write(path, data, digests = nil)
        return unless data
        new(path) do |file|
          file.digests = digests
          file.write(data)
        end
      end

      attr_reader :original_path, :path

      def initialize(original_path, &block)
        @original_path = original_path
        @perm = original_path.file? ? original_path.stat.mode : DEFAULT_FILE_MODE
        @path = original_path.sub(/$/, ".#{$$}.tmp")
        return unless block_given?
        begin
          yield self
        ensure
          close
        end
      end

      def size
        path.size
      end

      # initialize the digests using CompactIndexClient::SUPPORTED_DIGESTS, or a subset based on keys.
      def initialize_digests(keys = nil)
        @digests = keys ? SUPPORTED_DIGESTS.slice(*keys) : SUPPORTED_DIGESTS.dup
        @digests.transform_values! {|algo_class| SharedHelpers.digest(algo_class).new }
      end

      # reset the digests so they don't contain any previously read data
      def reset_digests
        @digests&.each_value(&:reset)
      end

      # set the digests that will be verified at the end
      def digests=(expected_digests)
        @expected_digests = expected_digests

        if @expected_digests.nil?
          @digests = nil
        elsif @digests
          @digests = @digests.slice(*@expected_digests.keys)
        else
          initialize_digests(@expected_digests.keys)
        end
      end

      def digests?
        @digests&.any?
      end

      # Open the temp file for writing, reusing original permissions, yielding the IO object.
      def open(write_mode = "wb", perm = @perm, &block)
        raise ClosedError, "Cannot reopen closed file" if @closed
        SharedHelpers.filesystem_access(path, :write) do
          path.open(write_mode, perm) do |f|
            yield digests? ? Gem::Package::DigestIO.new(f, @digests) : f
          end
        end
      end

      # Returns false without appending when no digests since appending is too error prone to do without digests.
      def append(data)
        return false unless digests?
        open("a") {|f| f.write data }
        verify && commit
      end

      def write(data)
        reset_digests
        open {|f| f.write data }
        commit!
      end

      def commit!
        verify || raise(DigestMismatchError.new(@base64digests, @expected_digests))
        commit
      end

      # Verify the digests, returning true on match, false on mismatch.
      def verify
        return true unless @expected_digests && digests?
        @base64digests = @digests.transform_values!(&:base64digest)
        @digests = nil
        @base64digests.all? {|algo, digest| @expected_digests[algo] == digest }
      end

      # Replace the original file with the temp file without verifying digests.
      # The file is permanently closed.
      def commit
        raise ClosedError, "Cannot commit closed file" if @closed
        SharedHelpers.filesystem_access(original_path, :write) do
          FileUtils.mv(path, original_path)
        end
        @closed = true
      end

      # Remove the temp file without replacing the original file.
      # The file is permanently closed.
      def close
        return if @closed
        FileUtils.remove_file(path) if @path&.file?
        @closed = true
      end
    end
  end
end
PK)J[�o;q��8share/gems/gems/bundler-2.6.7/lib/bundler/gem_helpers.rbnu�[���# frozen_string_literal: true

module Bundler
  module GemHelpers
    GENERIC_CACHE = { Gem::Platform::RUBY => Gem::Platform::RUBY } # rubocop:disable Style/MutableConstant
    GENERICS = [
      Gem::Platform::JAVA,
      *Gem::Platform::WINDOWS,
    ].freeze

    def generic(p)
      GENERIC_CACHE[p] ||= begin
        found = GENERICS.find do |match|
          p === match
        end
        found || Gem::Platform::RUBY
      end
    end
    module_function :generic

    def generic_local_platform
      generic(local_platform)
    end
    module_function :generic_local_platform

    def local_platform
      Bundler.local_platform
    end
    module_function :local_platform

    def generic_local_platform_is_ruby?
      generic_local_platform == Gem::Platform::RUBY
    end
    module_function :generic_local_platform_is_ruby?

    def platform_specificity_match(spec_platform, user_platform)
      spec_platform = Gem::Platform.new(spec_platform)

      PlatformMatch.specificity_score(spec_platform, user_platform)
    end
    module_function :platform_specificity_match

    def select_all_platform_match(specs, platform, force_ruby: false, prefer_locked: false)
      matching = if force_ruby
        specs.select {|spec| spec.match_platform(Gem::Platform::RUBY) && spec.force_ruby_platform! }
      else
        specs.select {|spec| spec.match_platform(platform) }
      end

      if prefer_locked
        locked_originally = matching.select {|spec| spec.is_a?(LazySpecification) }
        return locked_originally if locked_originally.any?
      end

      matching
    end
    module_function :select_all_platform_match

    def select_best_platform_match(specs, platform, force_ruby: false, prefer_locked: false)
      matching = select_all_platform_match(specs, platform, force_ruby: force_ruby, prefer_locked: prefer_locked)

      sort_and_filter_best_platform_match(matching, platform)
    end
    module_function :select_best_platform_match

    def select_best_local_platform_match(specs, force_ruby: false)
      matching = select_all_platform_match(specs, local_platform, force_ruby: force_ruby).filter_map(&:materialized_for_installation)

      sort_best_platform_match(matching, local_platform)
    end
    module_function :select_best_local_platform_match

    def sort_and_filter_best_platform_match(matching, platform)
      return matching if matching.one?

      exact = matching.select {|spec| spec.platform == platform }
      return exact if exact.any?

      sorted_matching = sort_best_platform_match(matching, platform)
      exemplary_spec = sorted_matching.first

      sorted_matching.take_while {|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) }
    end
    module_function :sort_and_filter_best_platform_match

    def sort_best_platform_match(matching, platform)
      matching.sort_by {|spec| platform_specificity_match(spec.platform, platform) }
    end
    module_function :sort_best_platform_match

    class PlatformMatch
      def self.specificity_score(spec_platform, user_platform)
        return -1 if spec_platform == user_platform
        return 1_000_000 if spec_platform.nil? || spec_platform == Gem::Platform::RUBY || user_platform == Gem::Platform::RUBY

        os_match(spec_platform, user_platform) +
          cpu_match(spec_platform, user_platform) * 10 +
          platform_version_match(spec_platform, user_platform) * 100
      end

      def self.os_match(spec_platform, user_platform)
        if spec_platform.os == user_platform.os
          0
        else
          1
        end
      end

      def self.cpu_match(spec_platform, user_platform)
        if spec_platform.cpu == user_platform.cpu
          0
        elsif spec_platform.cpu == "arm" && user_platform.cpu.to_s.start_with?("arm")
          0
        elsif spec_platform.cpu.nil? || spec_platform.cpu == "universal"
          1
        else
          2
        end
      end

      def self.platform_version_match(spec_platform, user_platform)
        if spec_platform.version == user_platform.version
          0
        elsif spec_platform.version.nil?
          1
        else
          2
        end
      end
    end

    def same_specificity(platform, spec, exemplary_spec)
      platform_specificity_match(spec.platform, platform) == platform_specificity_match(exemplary_spec.platform, platform)
    end
    module_function :same_specificity

    def same_deps(spec, exemplary_spec)
      same_runtime_deps = spec.dependencies.sort == exemplary_spec.dependencies.sort
      same_metadata_deps = spec.required_ruby_version == exemplary_spec.required_ruby_version && spec.required_rubygems_version == exemplary_spec.required_rubygems_version
      same_runtime_deps && same_metadata_deps
    end
    module_function :same_deps
  end
end
PK)J[V�H9++3share/gems/gems/bundler-2.6.7/lib/bundler/source.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    autoload :Gemspec,  File.expand_path("source/gemspec", __dir__)
    autoload :Git,      File.expand_path("source/git", __dir__)
    autoload :Metadata, File.expand_path("source/metadata", __dir__)
    autoload :Path,     File.expand_path("source/path", __dir__)
    autoload :Rubygems, File.expand_path("source/rubygems", __dir__)
    autoload :RubygemsAggregate, File.expand_path("source/rubygems_aggregate", __dir__)

    attr_accessor :dependency_names

    attr_reader :checksum_store

    def unmet_deps
      specs.unmet_dependency_names
    end

    def version_message(spec, locked_spec = nil)
      message = "#{spec.name} #{spec.version}"
      message += " (#{spec.platform})" if spec.platform != Gem::Platform::RUBY && !spec.platform.nil?

      if locked_spec
        locked_spec_version = locked_spec.version
        if locked_spec_version && spec.version != locked_spec_version
          message += Bundler.ui.add_color(" (was #{locked_spec_version})", version_color(spec.version, locked_spec_version))
        end
      end

      message
    end

    def can_lock?(spec)
      spec.source == self
    end

    def prefer_local!; end

    def local!; end

    def local_only!; end

    def cached!; end

    def remote!; end

    def add_dependency_names(names)
      @dependency_names = Array(dependency_names) | Array(names)
    end

    # it's possible that gems from one source depend on gems from some
    # other source, so now we download gemspecs and iterate over those
    # dependencies, looking for gems we don't have info on yet.
    def double_check_for(*); end

    def dependency_names_to_double_check
      specs.dependency_names
    end

    def spec_names
      specs.spec_names
    end

    def include?(other)
      other == self
    end

    def inspect
      "#<#{self.class}:0x#{object_id} #{self}>"
    end

    def identifier
      to_s
    end

    def path?
      instance_of?(Bundler::Source::Path)
    end

    def extension_cache_path(spec)
      return unless Bundler.feature_flag.global_gem_cache?
      return unless source_slug = extension_cache_slug(spec)
      Bundler.user_cache.join(
        "extensions", Gem::Platform.local.to_s, Bundler.ruby_scope,
        source_slug, spec.full_name
      )
    end

    private

    def version_color(spec_version, locked_spec_version)
      if Gem::Version.correct?(spec_version) && Gem::Version.correct?(locked_spec_version)
        # display yellow if there appears to be a regression
        earlier_version?(spec_version, locked_spec_version) ? :yellow : :green
      else
        # default to green if the versions cannot be directly compared
        :green
      end
    end

    def earlier_version?(spec_version, locked_spec_version)
      Gem::Version.new(spec_version) < Gem::Version.new(locked_spec_version)
    end

    def print_using_message(message)
      if !message.include?("(was ")
        Bundler.ui.debug message
      else
        Bundler.ui.info message
      end
    end

    def extension_cache_slug(_)
      nil
    end
  end
end
PK)J[t�{2hh3share/gems/gems/bundler-2.6.7/lib/bundler/worker.rbnu�[���# frozen_string_literal: true

module Bundler
  class Worker
    POISON = Object.new

    class WrappedException < StandardError
      attr_reader :exception
      def initialize(exn)
        @exception = exn
      end
    end

    # @return [String] the name of the worker
    attr_reader :name

    # Creates a worker pool of specified size
    #
    # @param size [Integer] Size of pool
    # @param name [String] name the name of the worker
    # @param func [Proc] job to run in inside the worker pool
    def initialize(size, name, func)
      @name = name
      @request_queue = Thread::Queue.new
      @response_queue = Thread::Queue.new
      @func = func
      @size = size
      @threads = nil
      @previous_interrupt_handler = nil
    end

    # Enqueue a request to be executed in the worker pool
    #
    # @param obj [String] mostly it is name of spec that should be downloaded
    def enq(obj)
      create_threads unless @threads
      @request_queue.enq obj
    end

    # Retrieves results of job function being executed in worker pool
    def deq
      result = @response_queue.deq
      raise result.exception if result.is_a?(WrappedException)
      result
    end

    def stop
      stop_threads
    end

    private

    def process_queue(i)
      loop do
        obj = @request_queue.deq
        break if obj.equal? POISON
        @response_queue.enq apply_func(obj, i)
      end
    end

    def apply_func(obj, i)
      @func.call(obj, i)
    rescue Exception => e # rubocop:disable Lint/RescueException
      WrappedException.new(e)
    end

    # Stop the worker threads by sending a poison object down the request queue
    # so as worker threads after retrieving it, shut themselves down
    def stop_threads
      return unless @threads

      @threads.each { @request_queue.enq POISON }
      @threads.each(&:join)

      remove_interrupt_handler

      @threads = nil
    end

    def abort_threads
      Bundler.ui.debug("\n#{caller.join("\n")}")
      @threads.each(&:exit)
      exit 1
    end

    def create_threads
      creation_errors = []

      @threads = Array.new(@size) do |i|
        Thread.start { process_queue(i) }.tap do |thread|
          thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
        end
      rescue ThreadError => e
        creation_errors << e
        nil
      end.compact

      add_interrupt_handler unless @threads.empty?

      return if creation_errors.empty?

      message = "Failed to create threads for the #{name} worker: #{creation_errors.map(&:to_s).uniq.join(", ")}"
      raise ThreadCreationError, message if @threads.empty?
      Bundler.ui.info message
    end

    def add_interrupt_handler
      @previous_interrupt_handler = trap("INT") { abort_threads }
    end

    def remove_interrupt_handler
      return unless @previous_interrupt_handler

      trap "INT", @previous_interrupt_handler
    end
  end
end
PK)J[)PY�\\@share/gems/gems/bundler-2.6.7/lib/bundler/similarity_detector.rbnu�[���# frozen_string_literal: true

module Bundler
  class SimilarityDetector
    SimilarityScore = Struct.new(:string, :distance)

    # initialize with an array of words to be matched against
    def initialize(corpus)
      @corpus = corpus
    end

    # return an array of words similar to 'word' from the corpus
    def similar_words(word, limit = 3)
      words_by_similarity = @corpus.map {|w| SimilarityScore.new(w, levenshtein_distance(word, w)) }
      words_by_similarity.select {|s| s.distance <= limit }.sort_by(&:distance).map(&:string)
    end

    # return the result of 'similar_words', concatenated into a list
    # (eg "a, b, or c")
    def similar_word_list(word, limit = 3)
      words = similar_words(word, limit)
      if words.length == 1
        words[0]
      elsif words.length > 1
        [words[0..-2].join(", "), words[-1]].join(" or ")
      end
    end

    protected

    # https://www.informit.com/articles/article.aspx?p=683059&seqNum=36
    def levenshtein_distance(this, that, ins = 2, del = 2, sub = 1)
      # ins, del, sub are weighted costs
      return nil if this.nil?
      return nil if that.nil?
      dm = [] # distance matrix

      # Initialize first row values
      dm[0] = (0..this.length).collect {|i| i * ins }
      fill = [0] * (this.length - 1)

      # Initialize first column values
      (1..that.length).each do |i|
        dm[i] = [i * del, fill.flatten]
      end

      # populate matrix
      (1..that.length).each do |i|
        (1..this.length).each do |j|
          # critical comparison
          dm[i][j] = [
            dm[i - 1][j - 1] + (this[j - 1] == that[i - 1] ? 0 : sub),
            dm[i][j - 1] + ins,
            dm[i - 1][j] + del,
          ].min
        end
      end

      # The last value in matrix is the Levenshtein distance between the strings
      dm[that.length][this.length]
    end
  end
end
PK)J[;i6�4share/gems/gems/bundler-2.6.7/lib/bundler/cli/add.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Add
    attr_reader :gems, :options, :version

    def initialize(options, gems)
      @gems = gems
      @options = options
      @options[:group] = options[:group].split(",").map(&:strip) unless options[:group].nil?
      @version = options[:version].split(",").map(&:strip) unless options[:version].nil?
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]

      validate_options!
      inject_dependencies
      perform_bundle_install unless options["skip-install"]
    end

    private

    def perform_bundle_install
      Installer.install(Bundler.root, Bundler.definition)
      Bundler.load.cache if Bundler.app_cache.exist?
    end

    def inject_dependencies
      dependencies = gems.map {|g| Bundler::Dependency.new(g, version, options) }

      Injector.inject(dependencies,
        conservative_versioning: options[:version].nil?, # Perform conservative versioning only when version is not specified
        optimistic: options[:optimistic],
        strict: options[:strict])
    end

    def validate_options!
      raise InvalidOption, "You cannot specify `--strict` and `--optimistic` at the same time." if options[:strict] && options[:optimistic]

      # raise error when no gems are specified
      raise InvalidOption, "Please specify gems to add." if gems.empty?

      version.to_a.each do |v|
        raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN.match?(v.to_s)
      end
    end
  end
end
PK)J[-��5share/gems/gems/bundler-2.6.7/lib/bundler/cli/lock.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Lock
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      unless Bundler.default_gemfile
        Bundler.ui.error "Unable to find a Gemfile to lock"
        exit 1
      end

      check_for_conflicting_options

      print = options[:print]
      previous_output_stream = Bundler.ui.output_stream
      Bundler.ui.output_stream = :stderr if print

      Bundler::Fetcher.disable_endpoint = options["full-index"]

      update = options[:update]
      conservative = options[:conservative]
      bundler = options[:bundler]

      if update.is_a?(Array) # unlocking specific gems
        Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update)
        update = { gems: update, conservative: conservative }
      elsif update && conservative
        update = { conservative: conservative }
      elsif update && bundler
        update = { bundler: bundler }
      end

      file = options[:lockfile]
      file = file ? Pathname.new(file).expand_path : Bundler.default_lockfile

      Bundler.settings.temporary(frozen: false) do
        definition = Bundler.definition(update, file)
        definition.add_checksums if options["add-checksums"]

        Bundler::CLI::Common.configure_gem_version_promoter(definition, options) if options[:update]

        options["remove-platform"].each do |platform_string|
          platform = Gem::Platform.new(platform_string)
          definition.remove_platform(platform)
        end

        options["add-platform"].each do |platform_string|
          platform = Gem::Platform.new(platform_string)
          if platform.to_s == "unknown"
            Bundler.ui.error "The platform `#{platform_string}` is unknown to RubyGems and can't be added to the lockfile."
            exit 1
          end
          definition.add_platform(platform)
        end

        if definition.platforms.empty?
          raise InvalidOption, "Removing all platforms from the bundle is not allowed"
        end

        definition.remotely! unless options[:local]

        if options["normalize-platforms"]
          definition.normalize_platforms
        end

        if print
          puts definition.to_lock
        else
          puts "Writing lockfile to #{file}"
          definition.lock
        end
      end

      Bundler.ui.output_stream = previous_output_stream
    end

    private

    def check_for_conflicting_options
      if options["normalize-platforms"] && options["add-platform"].any?
        raise InvalidOption, "--normalize-platforms can't be used with --add-platform"
      end

      if options["normalize-platforms"] && options["remove-platform"].any?
        raise InvalidOption, "--normalize-platforms can't be used with --remove-platform"
      end
    end
  end
end
PK)J[�JSR��8share/gems/gems/bundler-2.6.7/lib/bundler/cli/console.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Console
    attr_reader :options, :group
    def initialize(options, group)
      @options = options
      @group = group
    end

    def run
      group ? Bundler.require(:default, *group.split(" ").map!(&:to_sym)) : Bundler.require
      ARGV.clear

      console = get_console(Bundler.settings[:console] || "irb")
      console.start
    end

    def get_console(name)
      require name
      get_constant(name)
    rescue LoadError
      if name == "irb"
        Bundler.ui.error "#{name} is not available"
        exit 1
      else
        Bundler.ui.error "Couldn't load console #{name}, falling back to irb"
        name = "irb"
        retry
      end
    end

    def get_constant(name)
      const_name = {
        "pry" => :Pry,
        "ripl" => :Ripl,
        "irb" => :IRB,
      }[name]
      Object.const_get(const_name)
    end
  end
end
PK)J[ux9share/gems/gems/bundler-2.6.7/lib/bundler/cli/binstubs.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Binstubs
    attr_reader :options, :gems
    def initialize(options, gems)
      @options = options
      @gems = gems
    end

    def run
      Bundler.definition.validate_runtime!
      path_option = options["path"]
      path_option = nil if path_option&.empty?
      Bundler.settings.set_command_option :bin, path_option if options["path"]
      Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
      installer = Installer.new(Bundler.root, Bundler.definition)

      installer_opts = {
        force: options[:force],
        binstubs_cmd: true,
        all_platforms: options["all-platforms"],
      }

      if options[:all]
        raise InvalidOption, "Cannot specify --all with specific gems" unless gems.empty?
        @gems = Bundler.definition.specs.map(&:name)
        installer_opts.delete(:binstubs_cmd)
      elsif gems.empty?
        Bundler.ui.error "`bundle binstubs` needs at least one gem to run."
        exit 1
      end

      gems.each do |gem_name|
        spec = Bundler.definition.specs.find {|s| s.name == gem_name }
        unless spec
          raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(
            gem_name, Bundler.definition.specs
          )
        end

        if options[:standalone]
          if gem_name == "bundler"
            Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") unless options[:all]
            next
          end

          Bundler.settings.temporary(path: Bundler.settings[:path] || Bundler.root) do
            installer.generate_standalone_bundler_executable_stubs(spec, installer_opts)
          end
        else
          installer.generate_bundler_executable_stubs(spec, installer_opts)
        end
      end
    end
  end
end
PK)J[/Ԗ __7share/gems/gems/bundler-2.6.7/lib/bundler/cli/remove.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Remove
    def initialize(gems, options)
      @gems = gems
      @options = options
    end

    def run
      raise InvalidOption, "Please specify gems to remove." if @gems.empty?

      Injector.remove(@gems, {})
      Installer.install(Bundler.root, Bundler.definition)
    end
  end
end
PK)J[�`3��7share/gems/gems/bundler-2.6.7/lib/bundler/cli/config.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Config < Thor
    class_option :parseable, type: :boolean, banner: "Use minimal formatting for more parseable output"

    def self.scope_options
      method_option :global, type: :boolean, banner: "Only change the global config"
      method_option :local, type: :boolean, banner: "Only change the local config"
    end
    private_class_method :scope_options

    desc "base NAME [VALUE]", "The Bundler 1 config interface", hide: true
    scope_options
    method_option :delete, type: :boolean, banner: "delete"
    def base(name = nil, *value)
      new_args =
        if ARGV.size == 1
          ["config", "list"]
        elsif ARGV.include?("--delete")
          ARGV.map {|arg| arg == "--delete" ? "unset" : arg }
        elsif ARGV.include?("--global") || ARGV.include?("--local") || ARGV.size == 3
          ["config", "set", *ARGV[1..-1]]
        else
          ["config", "get", ARGV[1]]
        end

      message = "Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle #{new_args.join(" ")}` instead."
      removed_message = "Using the `config` command without a subcommand [list, get, set, unset] is has been removed. Use `bundle #{new_args.join(" ")}` instead."
      SharedHelpers.major_deprecation 3, message, removed_message: removed_message

      Base.new(options, name, value, self).run
    end

    desc "list", "List out all configured settings"
    def list
      Base.new(options, nil, nil, self).run
    end

    desc "get NAME", "Returns the value for the given key"
    def get(name)
      Base.new(options, name, nil, self).run
    end

    desc "set NAME VALUE", "Sets the given value for the given key"
    scope_options
    def set(name, value, *value_)
      Base.new(options, name, value_.unshift(value), self).run
    end

    desc "unset NAME", "Unsets the value for the given key"
    scope_options
    def unset(name)
      options[:delete] = true
      Base.new(options, name, nil, self).run
    end

    default_task :base

    class Base
      attr_reader :name, :value, :options, :scope, :thor

      def initialize(options, name, value, thor)
        @options = options
        @name = name
        value = Array(value)
        @value = value.empty? ? nil : value.join(" ")
        @thor = thor
        validate_scope!
      end

      def run
        unless name
          warn_unused_scope "Ignoring --#{scope}"
          confirm_all
          return
        end

        if options[:delete]
          if !explicit_scope? || scope != "global"
            Bundler.settings.set_local(name, nil)
          end
          if !explicit_scope? || scope != "local"
            Bundler.settings.set_global(name, nil)
          end
          return
        end

        if value.nil?
          warn_unused_scope "Ignoring --#{scope} since no value to set was given"

          if options[:parseable]
            if value = Bundler.settings[name]
              Bundler.ui.info("#{name}=#{value}")
            end
            return
          end

          confirm(name)
          return
        end

        Bundler.ui.info(message) if message
        Bundler.settings.send("set_#{scope}", name, new_value)
      end

      def confirm_all
        if @options[:parseable]
          thor.with_padding do
            Bundler.settings.all.each do |setting|
              val = Bundler.settings[setting]
              Bundler.ui.info "#{setting}=#{val}"
            end
          end
        else
          Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
          Bundler.settings.all.each do |setting|
            Bundler.ui.confirm setting
            show_pretty_values_for(setting)
            Bundler.ui.confirm ""
          end
        end
      end

      def confirm(name)
        Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
        show_pretty_values_for(name)
      end

      def new_value
        pathname = Pathname.new(value)
        if name.start_with?("local.") && pathname.directory?
          pathname.expand_path.to_s
        else
          value
        end
      end

      def message
        locations = Bundler.settings.locations(name)
        if @options[:parseable]
          "#{name}=#{new_value}" if new_value
        elsif scope == "global"
          if !locations[:local].nil?
            "Your application has set #{name} to #{locations[:local].inspect}. " \
              "This will override the global value you are currently setting"
          elsif locations[:env]
            "You have a bundler environment variable for #{name} set to " \
              "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
          elsif !locations[:global].nil? && locations[:global] != value
            "You are replacing the current global value of #{name}, which is currently " \
              "#{locations[:global].inspect}"
          end
        elsif scope == "local" && !locations[:local].nil? && locations[:local] != value
          "You are replacing the current local value of #{name}, which is currently " \
            "#{locations[:local].inspect}"
        end
      end

      def show_pretty_values_for(setting)
        thor.with_padding do
          Bundler.settings.pretty_values_for(setting).each do |line|
            Bundler.ui.info line
          end
        end
      end

      def explicit_scope?
        @explicit_scope
      end

      def warn_unused_scope(msg)
        return unless explicit_scope?
        return if options[:parseable]

        Bundler.ui.warn(msg)
      end

      def validate_scope!
        @explicit_scope = true
        scopes = %w[global local].select {|s| options[s] }
        case scopes.size
        when 0
          @scope = inside_app? ? "local" : "global"
          @explicit_scope = false
        when 1
          @scope = scopes.first
        else
          raise InvalidOption,
            "The options #{scopes.join " and "} were specified. Please only use one of the switches at a time."
        end
      end

      private

      def inside_app?
        Bundler.root
        true
      rescue GemfileNotFound
        false
      end
    end
  end
end
PK)J[�^f5share/gems/gems/bundler-2.6.7/lib/bundler/cli/list.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::List
    def initialize(options)
      @options = options
      @without_group = options["without-group"].map(&:to_sym)
      @only_group = options["only-group"].map(&:to_sym)
    end

    def run
      raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @only_group.any? && @without_group.any?

      raise InvalidOption, "The `--name-only` and `--paths` options cannot be used together" if @options["name-only"] && @options[:paths]

      specs = if @only_group.any? || @without_group.any?
        filtered_specs_by_groups
      else
        begin
          Bundler.load.specs
        rescue GemNotFound => e
          Bundler.ui.error e.message
          Bundler.ui.warn "Install missing gems with `bundle install`."
          exit 1
        end
      end.reject {|s| s.name == "bundler" }.sort_by(&:name)

      return Bundler.ui.info "No gems in the Gemfile" if specs.empty?

      return specs.each {|s| Bundler.ui.info s.name } if @options["name-only"]
      return specs.each {|s| Bundler.ui.info s.full_gem_path } if @options["paths"]

      Bundler.ui.info "Gems included by the bundle:"

      specs.each {|s| Bundler.ui.info "  * #{s.name} (#{s.version}#{s.git_version})" }

      Bundler.ui.info "Use `bundle info` to print more detailed information about a gem"
    end

    private

    def verify_group_exists(groups)
      (@without_group + @only_group).each do |group|
        raise InvalidOption, "`#{group}` group could not be found." unless groups.include?(group)
      end
    end

    def filtered_specs_by_groups
      definition = Bundler.definition
      groups = definition.groups

      verify_group_exists(groups)

      show_groups =
        if @without_group.any?
          groups.reject {|g| @without_group.include?(g) }
        elsif @only_group.any?
          groups.select {|g| @only_group.include?(g) }
        else
          groups
        end.map(&:to_sym)

      definition.specs_for(show_groups)
    end
  end
end
PK)J[����4A4A4share/gems/gems/bundler-2.6.7/lib/bundler/cli/gem.rbnu�[���# frozen_string_literal: true

require "pathname"

module Bundler
  class CLI
    Bundler.require_thor_actions
    include Thor::Actions
  end

  class CLI::Gem
    TEST_FRAMEWORK_VERSIONS = {
      "rspec" => "3.0",
      "minitest" => "5.16",
      "test-unit" => "3.0",
    }.freeze

    attr_reader :options, :gem_name, :thor, :name, :target, :extension

    def initialize(options, gem_name, thor)
      @options = options
      @gem_name = resolve_name(gem_name)

      @thor = thor
      thor.behavior = :invoke
      thor.destination_root = nil

      @name = @gem_name
      @target = SharedHelpers.pwd.join(gem_name)

      @extension = options[:ext]

      validate_ext_name if @extension
      validate_rust_builder_rubygems_version if @extension == "rust"
    end

    def run
      Bundler.ui.confirm "Creating gem '#{name}'..."

      underscored_name = name.tr("-", "_")
      namespaced_path = name.tr("-", "/")
      constant_name = name.gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }
      constant_array = constant_name.split("::")
      minitest_constant_name = constant_array.clone.tap {|a| a[-1] = "Test#{a[-1]}" }.join("::") # Foo::Bar => Foo::TestBar

      use_git = Bundler.git_present? && options[:git]

      git_author_name = use_git ? `git config user.name`.chomp : ""
      git_username = use_git ? `git config github.user`.chomp : ""
      git_user_email = use_git ? `git config user.email`.chomp : ""

      github_username = if options[:github_username].nil?
        git_username
      elsif options[:github_username] == false
        ""
      else
        options[:github_username]
      end

      config = {
        name: name,
        underscored_name: underscored_name,
        namespaced_path: namespaced_path,
        makefile_path: "#{underscored_name}/#{underscored_name}",
        constant_name: constant_name,
        constant_array: constant_array,
        author: git_author_name.empty? ? "TODO: Write your name" : git_author_name,
        email: git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
        test: options[:test],
        ext: extension,
        exe: options[:exe],
        bundler_version: bundler_dependency_version,
        git: use_git,
        github_username: github_username.empty? ? "[USERNAME]" : github_username,
        required_ruby_version: required_ruby_version,
        rust_builder_required_rubygems_version: rust_builder_required_rubygems_version,
        minitest_constant_name: minitest_constant_name,
      }
      ensure_safe_gem_name(name, constant_array)

      templates = {
        "Gemfile.tt" => Bundler.preferred_gemfile_name,
        "lib/newgem.rb.tt" => "lib/#{namespaced_path}.rb",
        "lib/newgem/version.rb.tt" => "lib/#{namespaced_path}/version.rb",
        "sig/newgem.rbs.tt" => "sig/#{namespaced_path}.rbs",
        "newgem.gemspec.tt" => "#{name}.gemspec",
        "Rakefile.tt" => "Rakefile",
        "README.md.tt" => "README.md",
        "bin/console.tt" => "bin/console",
        "bin/setup.tt" => "bin/setup",
      }

      executables = %w[
        bin/console
        bin/setup
      ]

      templates.merge!("gitignore.tt" => ".gitignore") if use_git

      if test_framework = ask_and_set_test_framework
        config[:test] = test_framework
        config[:test_framework_version] = TEST_FRAMEWORK_VERSIONS[test_framework]

        case test_framework
        when "rspec"
          templates.merge!(
            "rspec.tt" => ".rspec",
            "spec/spec_helper.rb.tt" => "spec/spec_helper.rb",
            "spec/newgem_spec.rb.tt" => "spec/#{namespaced_path}_spec.rb"
          )
          config[:test_task] = :spec
        when "minitest"
          # Generate path for minitest target file (FileList["test/**/test_*.rb"])
          #   foo     => test/test_foo.rb
          #   foo-bar => test/foo/test_bar.rb
          #   foo_bar => test/test_foo_bar.rb
          paths = namespaced_path.rpartition("/")
          paths[2] = "test_#{paths[2]}"
          minitest_namespaced_path = paths.join("")

          templates.merge!(
            "test/minitest/test_helper.rb.tt" => "test/test_helper.rb",
            "test/minitest/test_newgem.rb.tt" => "test/#{minitest_namespaced_path}.rb"
          )
          config[:test_task] = :test
        when "test-unit"
          templates.merge!(
            "test/test-unit/test_helper.rb.tt" => "test/test_helper.rb",
            "test/test-unit/newgem_test.rb.tt" => "test/#{namespaced_path}_test.rb"
          )
          config[:test_task] = :test
        end
      end

      config[:ci] = ask_and_set_ci
      case config[:ci]
      when "github"
        templates.merge!("github/workflows/main.yml.tt" => ".github/workflows/main.yml")
        config[:ci_config_path] = ".github "
      when "gitlab"
        templates.merge!("gitlab-ci.yml.tt" => ".gitlab-ci.yml")
        config[:ci_config_path] = ".gitlab-ci.yml "
      when "circle"
        templates.merge!("circleci/config.yml.tt" => ".circleci/config.yml")
        config[:ci_config_path] = ".circleci "
      end

      if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
        "This means that any other developer or company will be legally allowed to use your code " \
        "for free as long as they admit you created it. You can read more about the MIT license " \
        "at https://choosealicense.com/licenses/mit.")
        config[:mit] = true
        Bundler.ui.info "MIT License enabled in config"
        templates.merge!("LICENSE.txt.tt" => "LICENSE.txt")
      end

      if ask_and_set(:coc, "Do you want to include a code of conduct in gems you generate?",
        "Codes of conduct can increase contributions to your project by contributors who " \
        "prefer collaborative, safe spaces. You can read more about the code of conduct at " \
        "contributor-covenant.org. Having a code of conduct means agreeing to the responsibility " \
        "of enforcing it, so be sure that you are prepared to do that. Be sure that your email " \
        "address is specified as a contact in the generated code of conduct so that people know " \
        "who to contact in case of a violation. For suggestions about " \
        "how to enforce codes of conduct, see https://bit.ly/coc-enforcement.")
        config[:coc] = true
        Bundler.ui.info "Code of conduct enabled in config"
        templates.merge!("CODE_OF_CONDUCT.md.tt" => "CODE_OF_CONDUCT.md")
      end

      if ask_and_set(:changelog, "Do you want to include a changelog?",
        "A changelog is a file which contains a curated, chronologically ordered list of notable " \
        "changes for each version of a project. To make it easier for users and contributors to" \
        " see precisely what notable changes have been made between each release (or version) of" \
        " the project. Whether consumers or developers, the end users of software are" \
        " human beings who care about what's in the software. When the software changes, people " \
        "want to know why and how. see https://keepachangelog.com")
        config[:changelog] = true
        Bundler.ui.info "Changelog enabled in config"
        templates.merge!("CHANGELOG.md.tt" => "CHANGELOG.md")
      end

      config[:linter] = ask_and_set_linter
      case config[:linter]
      when "rubocop"
        config[:linter_version] = rubocop_version
        Bundler.ui.info "RuboCop enabled in config"
        templates.merge!("rubocop.yml.tt" => ".rubocop.yml")
      when "standard"
        config[:linter_version] = standard_version
        Bundler.ui.info "Standard enabled in config"
        templates.merge!("standard.yml.tt" => ".standard.yml")
      end

      if config[:exe]
        templates.merge!("exe/newgem.tt" => "exe/#{name}")
        executables.push("exe/#{name}")
      end

      if extension == "c"
        templates.merge!(
          "ext/newgem/extconf-c.rb.tt" => "ext/#{name}/extconf.rb",
          "ext/newgem/newgem.h.tt" => "ext/#{name}/#{underscored_name}.h",
          "ext/newgem/newgem.c.tt" => "ext/#{name}/#{underscored_name}.c"
        )
      end

      if extension == "rust"
        templates.merge!(
          "Cargo.toml.tt" => "Cargo.toml",
          "ext/newgem/Cargo.toml.tt" => "ext/#{name}/Cargo.toml",
          "ext/newgem/extconf-rust.rb.tt" => "ext/#{name}/extconf.rb",
          "ext/newgem/src/lib.rs.tt" => "ext/#{name}/src/lib.rs",
        )
      end

      if target.exist? && !target.directory?
        Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`."
        exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError]
      end

      if use_git
        Bundler.ui.info "Initializing git repo in #{target}"
        require "shellwords"
        `git init #{target.to_s.shellescape}`

        config[:git_default_branch] = File.read("#{target}/.git/HEAD").split("/").last.chomp
      end

      templates.each do |src, dst|
        destination = target.join(dst)
        thor.template("newgem/#{src}", destination, config)
      end

      executables.each do |file|
        path = target.join(file)
        executable = (path.stat.mode | 0o111)
        path.chmod(executable)
      end

      if use_git
        IO.popen(%w[git add .], { chdir: target }, &:read)
      end

      # Open gemspec in editor
      open_editor(options["edit"], target.join("#{name}.gemspec")) if options[:edit]

      Bundler.ui.info "Gem '#{name}' was successfully created. " \
        "For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html"
    end

    private

    def resolve_name(name)
      SharedHelpers.pwd.join(name).basename.to_s
    end

    def ask_and_set(key, header, message)
      choice = options[key]
      choice = Bundler.settings["gem.#{key}"] if choice.nil?

      if choice.nil?
        Bundler.ui.confirm header
        choice = Bundler.ui.yes? "#{message} y/(n):"
        Bundler.settings.set_global("gem.#{key}", choice)
      end

      choice
    end

    def validate_ext_name
      return unless gem_name.index("-")

      Bundler.ui.error "You have specified a gem name which does not conform to the \n" \
                       "naming guidelines for C extensions. For more information, \n" \
                       "see the 'Extension Naming' section at the following URL:\n" \
                       "https://guides.rubygems.org/gems-with-extensions/\n"
      exit 1
    end

    def ask_and_set_test_framework
      return if skip?(:test)
      test_framework = options[:test] || Bundler.settings["gem.test"]

      if test_framework.to_s.empty?
        Bundler.ui.confirm "Do you want to generate tests with your gem?"
        Bundler.ui.info hint_text("test")

        result = Bundler.ui.ask "Enter a test framework. rspec/minitest/test-unit/(none):"
        if /rspec|minitest|test-unit/.match?(result)
          test_framework = result
        else
          test_framework = false
        end
      end

      if Bundler.settings["gem.test"].nil?
        Bundler.settings.set_global("gem.test", test_framework)
      end

      if options[:test] == Bundler.settings["gem.test"]
        Bundler.ui.info "#{options[:test]} is already configured, ignoring --test flag."
      end

      test_framework
    end

    def skip?(option)
      options.key?(option) && options[option].nil?
    end

    def hint_text(setting)
      if Bundler.settings["gem.#{setting}"] == false
        "Your choice will only be applied to this gem."
      else
        "Future `bundle gem` calls will use your choice. " \
        "This setting can be changed anytime with `bundle config gem.#{setting}`."
      end
    end

    def ask_and_set_ci
      return if skip?(:ci)
      ci_template = options[:ci] || Bundler.settings["gem.ci"]

      if ci_template.to_s.empty?
        Bundler.ui.confirm "Do you want to set up continuous integration for your gem? " \
          "Supported services:\n" \
          "* CircleCI:       https://circleci.com/\n" \
          "* GitHub Actions: https://github.com/features/actions\n" \
          "* GitLab CI:      https://docs.gitlab.com/ee/ci/\n" \
          "\n"
        Bundler.ui.info hint_text("ci")

        result = Bundler.ui.ask "Enter a CI service. github/gitlab/circle/(none):"
        if /github|gitlab|circle/.match?(result)
          ci_template = result
        else
          ci_template = false
        end
      end

      if Bundler.settings["gem.ci"].nil?
        Bundler.settings.set_global("gem.ci", ci_template)
      end

      if options[:ci] == Bundler.settings["gem.ci"]
        Bundler.ui.info "#{options[:ci]} is already configured, ignoring --ci flag."
      end

      ci_template
    end

    def ask_and_set_linter
      return if skip?(:linter)
      linter_template = options[:linter] || Bundler.settings["gem.linter"]
      linter_template = deprecated_rubocop_option if linter_template.nil?

      if linter_template.to_s.empty?
        Bundler.ui.confirm "Do you want to add a code linter and formatter to your gem? " \
          "Supported Linters:\n" \
          "* RuboCop:       https://rubocop.org\n" \
          "* Standard:      https://github.com/standardrb/standard\n" \
          "\n"
        Bundler.ui.info hint_text("linter")

        result = Bundler.ui.ask "Enter a linter. rubocop/standard/(none):"
        if /rubocop|standard/.match?(result)
          linter_template = result
        else
          linter_template = false
        end
      end

      if Bundler.settings["gem.linter"].nil?
        Bundler.settings.set_global("gem.linter", linter_template)
      end

      # Once gem.linter safely set, unset the deprecated gem.rubocop
      unless Bundler.settings["gem.rubocop"].nil?
        Bundler.settings.set_global("gem.rubocop", nil)
      end

      if options[:linter] == Bundler.settings["gem.linter"]
        Bundler.ui.info "#{options[:linter]} is already configured, ignoring --linter flag."
      end

      linter_template
    end

    def deprecated_rubocop_option
      if !options[:rubocop].nil?
        if options[:rubocop]
          Bundler::SharedHelpers.major_deprecation 2,
            "--rubocop is deprecated, use --linter=rubocop",
            removed_message: "--rubocop has been removed, use --linter=rubocop"
          "rubocop"
        else
          Bundler::SharedHelpers.major_deprecation 2,
            "--no-rubocop is deprecated, use --linter",
            removed_message: "--no-rubocop has been removed, use --linter"
          false
        end
      elsif !Bundler.settings["gem.rubocop"].nil?
        Bundler::SharedHelpers.major_deprecation 2,
          "config gem.rubocop is deprecated; we've updated your config to use gem.linter instead",
          removed_message: "config gem.rubocop has been removed; we've updated your config to use gem.linter instead"
        Bundler.settings["gem.rubocop"] ? "rubocop" : false
      end
    end

    def bundler_dependency_version
      v = Gem::Version.new(Bundler::VERSION)
      req = v.segments[0..1]
      req << "a" if v.prerelease?
      req.join(".")
    end

    def ensure_safe_gem_name(name, constant_array)
      if /^\d/.match?(name)
        Bundler.ui.error "Invalid gem name #{name} Please give a name which does not start with numbers."
        exit 1
      end

      constant_name = constant_array.join("::")

      existing_constant = constant_array.inject(Object) do |c, s|
        defined = begin
          c.const_defined?(s)
        rescue NameError
          Bundler.ui.error "Invalid gem name #{name} -- `#{constant_name}` is an invalid constant name"
          exit 1
        end
        (defined && c.const_get(s)) || break
      end

      return unless existing_constant
      Bundler.ui.error "Invalid gem name #{name} constant #{constant_name} is already in use. Please choose another gem name."
      exit 1
    end

    def open_editor(editor, file)
      thor.run(%(#{editor} "#{file}"))
    end

    def rust_builder_required_rubygems_version
      "3.3.11"
    end

    def required_ruby_version
      "3.1.0"
    end

    def rubocop_version
      "1.21"
    end

    def standard_version
      "1.3"
    end

    def validate_rust_builder_rubygems_version
      if Gem::Version.new(rust_builder_required_rubygems_version) > Gem.rubygems_version
        Bundler.ui.error "Your RubyGems version (#{Gem.rubygems_version}) is too old to build Rust extension. Please update your RubyGems using `gem update --system` or any other way and try again."
        exit 1
      end
    end
  end
end
PK)J[��Aii7share/gems/gems/bundler-2.6.7/lib/bundler/cli/inject.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Inject
    attr_reader :options, :name, :version, :group, :source, :gems
    def initialize(options, name, version)
      @options = options
      @name = name
      @version = version || last_version_number
      @group = options[:group].split(",") unless options[:group].nil?
      @source = options[:source]
      @gems = []
    end

    def run
      # The required arguments allow Thor to give useful feedback when the arguments
      # are incorrect. This adds those first two arguments onto the list as a whole.
      gems.unshift(source).unshift(group).unshift(version).unshift(name)

      # Build an array of Dependency objects out of the arguments
      deps = []
      # when `inject` support addition of more than one gem, then this loop will
      # help. Currently this loop is running once.
      gems.each_slice(4) do |gem_name, gem_version, gem_group, gem_source|
        ops = Gem::Requirement::OPS.map {|key, _val| key }
        has_op = ops.any? {|op| gem_version.start_with? op }
        gem_version = "~> #{gem_version}" unless has_op
        deps << Bundler::Dependency.new(gem_name, gem_version, "group" => gem_group, "source" => gem_source)
      end

      added = Injector.inject(deps, options)

      if added.any?
        Bundler.ui.confirm "Added to Gemfile:"
        Bundler.ui.confirm(added.map do |d|
          name = "'#{d.name}'"
          requirement = ", '#{d.requirement}'"
          group = ", group: #{d.groups.inspect}" if d.groups != Array(:default)
          source = ", source: '#{d.source}'" unless d.source.nil?
          %(gem #{name}#{requirement}#{group}#{source})
        end.join("\n"))
      else
        Bundler.ui.confirm "All gems were already present in the Gemfile"
      end
    end

    private

    def last_version_number
      definition = Bundler.definition(true)
      definition.remotely!
      specs = definition.index[name].sort_by(&:version)
      unless options[:pre]
        specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
      end
      spec = specs.last
      spec.version.to_s
    end
  end
end
PK)J[�i
^9share/gems/gems/bundler-2.6.7/lib/bundler/cli/platform.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Platform
    attr_reader :options
    def initialize(options)
      @options = options
    end

    def run
      ruby_version = if Bundler.locked_gems
        Bundler.locked_gems.ruby_version&.gsub(/p\d+\Z/, "")
      else
        Bundler.definition.ruby_version&.single_version_string
      end

      output = []

      if options[:ruby]
        if ruby_version
          output << ruby_version
        else
          output << "No ruby version specified"
        end
      else
        platforms = Bundler.definition.platforms.map {|p| "* #{p}" }

        output << "Your platform is: #{Gem::Platform.local}"
        output << "Your app has gems that work on these platforms:\n#{platforms.join("\n")}"

        if ruby_version
          output << "Your Gemfile specifies a Ruby version requirement:\n* #{ruby_version}"

          begin
            Bundler.definition.validate_runtime!
            output << "Your current platform satisfies the Ruby version requirement."
          rescue RubyVersionMismatch => e
            output << e.message
          end
        else
          output << "Your Gemfile does not specify a Ruby version requirement."
        end
      end

      Bundler.ui.info output.join("\n\n")
    end
  end
end
PK)J[��)``6share/gems/gems/bundler-2.6.7/lib/bundler/cli/clean.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Clean
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      require_path_or_force unless options[:"dry-run"]
      Bundler.load.clean(options[:"dry-run"])
    end

    protected

    def require_path_or_force
      return unless Bundler.use_system_gems? && !options[:force]
      raise InvalidOption, "Cleaning all the gems on your system is dangerous! " \
        "If you're sure you want to remove every system gem not in this " \
        "bundle, run `bundle clean --force`."
    end
  end
end
PK)J[m$�C��7share/gems/gems/bundler-2.6.7/lib/bundler/cli/update.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Update
    attr_reader :options, :gems
    def initialize(options, gems)
      @options = options
      @gems = gems
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]

      update_bundler = options[:bundler]

      Bundler.self_manager.update_bundler_and_restart_with_it_if_needed(update_bundler) if update_bundler

      Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?

      sources = Array(options[:source])
      groups  = Array(options[:group]).map(&:to_sym)

      full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !update_bundler

      if full_update && !options[:all]
        if Bundler.feature_flag.update_requires_all_flag?
          raise InvalidOption, "To update everything, pass the `--all` flag."
        end
        SharedHelpers.major_deprecation 3, "Pass --all to `bundle update` to update everything"
      elsif !full_update && options[:all]
        raise InvalidOption, "Cannot specify --all along with specific options."
      end

      conservative = options[:conservative]

      if full_update
        if conservative
          Bundler.definition(conservative: conservative)
        else
          Bundler.definition(true)
        end
      else
        unless Bundler.default_lockfile.exist?
          raise GemfileLockNotFound, "This Bundle hasn't been installed yet. " \
            "Run `bundle install` to update and install the bundled gems."
        end
        Bundler::CLI::Common.ensure_all_gems_in_lockfile!(gems)

        if groups.any?
          deps = Bundler.definition.dependencies.select {|d| (d.groups & groups).any? }
          gems.concat(deps.map(&:name))
        end

        Bundler.definition(gems: gems, sources: sources, ruby: options[:ruby],
                           conservative: conservative,
                           bundler: update_bundler)
      end

      Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)

      Bundler::Fetcher.disable_endpoint = options["full-index"]

      opts = options.dup
      opts["update"] = true
      opts["local"] = options[:local]
      opts["force"] = options[:redownload]

      Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]

      Bundler.definition.validate_runtime!

      if locked_gems = Bundler.definition.locked_gems
        previous_locked_info = locked_gems.specs.reduce({}) do |h, s|
          h[s.name] = { spec: s, version: s.version, source: s.source.identifier }
          h
        end
      end

      installer = Installer.install Bundler.root, Bundler.definition, opts
      Bundler.load.cache if Bundler.app_cache.exist?

      if CLI::Common.clean_after_install?
        require_relative "clean"
        Bundler::CLI::Clean.new(options).run
      end

      if locked_gems
        gems.each do |name|
          locked_info = previous_locked_info[name]
          next unless locked_info

          locked_spec = locked_info[:spec]
          new_spec = Bundler.definition.specs[name].first
          unless new_spec
            unless locked_spec.match_platform(Bundler.local_platform)
              Bundler.ui.warn "Bundler attempted to update #{name} but it was not considered because it is for a different platform from the current one"
            end

            next
          end

          locked_source = locked_info[:source]
          new_source = new_spec.source.identifier
          next if locked_source != new_source

          new_version = new_spec.version
          locked_version = locked_info[:version]
          if new_version < locked_version
            Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
          elsif new_version == locked_version
            Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
          end
        end
      end

      Bundler.ui.confirm "Bundle updated!"
      Bundler::CLI::Common.output_without_groups_message(:update)
      Bundler::CLI::Common.output_post_install_messages installer.post_install_messages

      Bundler::CLI::Common.output_fund_metadata_summary
    end
  end
end
PK)J[!1..8share/gems/gems/bundler-2.6.7/lib/bundler/cli/install.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Install
    attr_reader :options
    def initialize(options)
      @options = options
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]

      warn_if_root

      if options[:local]
        Bundler.self_manager.restart_with_locked_bundler_if_needed
      else
        Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed
      end

      Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Gem.freebsd_platform?

      # Disable color in deployment mode
      Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]

      if target_rbconfig_path = options[:"target-rbconfig"]
        Bundler.rubygems.set_target_rbconfig(target_rbconfig_path)
      end

      check_for_options_conflicts

      check_trust_policy

      if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
        unless Bundler.default_lockfile.exist?
          flag = "--deployment flag" if options[:deployment]
          flag ||= "--frozen flag" if options[:frozen]
          flag ||= "deployment setting" if Bundler.settings[:deployment]
          flag ||= "frozen setting" if Bundler.settings[:frozen]
          raise ProductionError, "The #{flag} requires a lockfile. Please make " \
                                 "sure you have checked your #{SharedHelpers.relative_lockfile_path} into version control " \
                                 "before deploying."
        end

        options[:local] = true if Bundler.app_cache.exist?

        Bundler.settings.set_command_option :deployment, true if options[:deployment]
        Bundler.settings.set_command_option :frozen, true if options[:frozen]
      end

      # When install is called with --no-deployment, disable deployment mode
      if options[:deployment] == false
        Bundler.settings.set_command_option :frozen, nil
        options[:system] = true
      end

      normalize_settings

      Bundler::Fetcher.disable_endpoint = options["full-index"]

      if options["binstubs"]
        Bundler::SharedHelpers.major_deprecation 2,
          "The --binstubs option will be removed in favor of `bundle binstubs --all`",
          removed_message: "The --binstubs option have been removed in favor of `bundle binstubs --all`"
      end

      Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?

      definition = Bundler.definition
      definition.validate_runtime!

      installer = Installer.install(Bundler.root, definition, options)

      Bundler.settings.temporary(cache_all_platforms: options[:local] ? false : Bundler.settings[:cache_all_platforms]) do
        Bundler.load.cache(nil, options[:local]) if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
      end

      Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
      Bundler::CLI::Common.output_without_groups_message(:install)

      if Bundler.use_system_gems?
        Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
      else
        relative_path = Bundler.configured_bundle_path.base_path_relative_to_pwd
        Bundler.ui.confirm "Bundled gems are installed into `#{relative_path}`"
      end

      Bundler::CLI::Common.output_post_install_messages installer.post_install_messages

      warn_ambiguous_gems

      if CLI::Common.clean_after_install?
        require_relative "clean"
        Bundler::CLI::Clean.new(options).run
      end

      Bundler::CLI::Common.output_fund_metadata_summary
    rescue Gem::InvalidSpecificationException
      Bundler.ui.warn "You have one or more invalid gemspecs that need to be fixed."
      raise
    end

    private

    def warn_if_root
      return if Bundler.settings[:silence_root_warning] || Gem.win_platform? || !Process.uid.zero?
      Bundler.ui.warn "Don't run Bundler as root. Installing your bundle as root " \
                      "will break this application for all non-root users on this machine.", wrap: true
    end

    def dependencies_count_for(definition)
      count = definition.dependencies.count
      "#{count} Gemfile #{count == 1 ? "dependency" : "dependencies"}"
    end

    def gems_installed_for(definition)
      count = definition.specs.count
      "#{count} #{count == 1 ? "gem" : "gems"} now installed"
    end

    def check_for_group_conflicts_in_cli_options
      conflicting_groups = Array(options[:without]) & Array(options[:with])
      return if conflicting_groups.empty?
      raise InvalidOption, "You can't list a group in both with and without." \
        " The offending groups are: #{conflicting_groups.join(", ")}."
    end

    def check_for_options_conflicts
      if (options[:path] || options[:deployment]) && options[:system]
        error_message = String.new
        error_message << "You have specified both --path as well as --system. Please choose only one option.\n" if options[:path]
        error_message << "You have specified both --deployment as well as --system. Please choose only one option.\n" if options[:deployment]
        raise InvalidOption.new(error_message)
      end
    end

    def check_trust_policy
      trust_policy = options["trust-policy"]
      unless Bundler.rubygems.security_policies.keys.unshift(nil).include?(trust_policy)
        raise InvalidOption, "RubyGems doesn't know about trust policy '#{trust_policy}'. " \
          "The known policies are: #{Bundler.rubygems.security_policies.keys.join(", ")}."
      end
      Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
    end

    def normalize_groups
      check_for_group_conflicts_in_cli_options

      # need to nil them out first to get around validation for backwards compatibility
      Bundler.settings.set_command_option :without, nil
      Bundler.settings.set_command_option :with,    nil
      Bundler.settings.set_command_option :without, options[:without]
      Bundler.settings.set_command_option :with,    options[:with]
    end

    def normalize_settings
      Bundler.settings.set_command_option :path, nil if options[:system]
      Bundler.settings.set_command_option_if_given :path, options[:path]

      if options["standalone"] && Bundler.settings[:path].nil? && !options["local"]
        Bundler.settings.temporary(path_relative_to_cwd: false) do
          Bundler.settings.set_command_option :path, "bundle"
        end
      end

      bin_option = options["binstubs"]
      bin_option = nil if bin_option&.empty?
      Bundler.settings.set_command_option :bin, bin_option if options["binstubs"]

      Bundler.settings.set_command_option_if_given :shebang, options["shebang"]

      Bundler.settings.set_command_option_if_given :jobs, options["jobs"]

      Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]

      Bundler.settings.set_command_option_if_given :no_install, options["no-install"]

      Bundler.settings.set_command_option_if_given :clean, options["clean"]

      normalize_groups if options[:without] || options[:with]

      options[:force] = options[:redownload]
    end

    def warn_ambiguous_gems
      # TODO: remove this when we drop Bundler 1.x support
      Installer.ambiguous_gems.to_a.each do |name, installed_from_uri, *also_found_in_uris|
        Bundler.ui.warn "Warning: the gem '#{name}' was found in multiple sources."
        Bundler.ui.warn "Installed from: #{installed_from_uri}"
        Bundler.ui.warn "Also found in:"
        also_found_in_uris.each {|uri| Bundler.ui.warn "  * #{uri}" }
        Bundler.ui.warn "You should add a source requirement to restrict this gem to your preferred source."
        Bundler.ui.warn "For example:"
        Bundler.ui.warn "    gem '#{name}', :source => '#{installed_from_uri}'"
        Bundler.ui.warn "Then uninstall the gem '#{name}' (or delete all bundled gems) and then install again."
      end
    end
  end
end
PK)J[3��f$f$9share/gems/gems/bundler-2.6.7/lib/bundler/cli/outdated.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Outdated
    attr_reader :options, :gems, :options_include_groups, :filter_options_patch, :sources, :strict
    attr_accessor :outdated_gems

    def initialize(options, gems)
      @options = options
      @gems = gems
      @sources = Array(options[:source])

      @filter_options_patch = options.keys & %w[filter-major filter-minor filter-patch]

      @outdated_gems = []

      @options_include_groups = [:group, :groups].any? do |v|
        options.keys.include?(v.to_s)
      end

      # the patch level options imply strict is also true. It wouldn't make
      # sense otherwise.
      @strict = options["filter-strict"] || Bundler::CLI::Common.patch_level_options(options).any?
    end

    def run
      check_for_deployment_mode!

      Bundler.definition.validate_runtime!
      current_specs = Bundler.ui.silence { Bundler.definition.resolve }

      gems.each do |gem_name|
        if current_specs[gem_name].empty?
          raise GemNotFound, "Could not find gem '#{gem_name}'."
        end
      end

      current_dependencies = Bundler.ui.silence do
        Bundler.load.dependencies.map {|dep| [dep.name, dep] }.to_h
      end

      definition = if gems.empty? && sources.empty?
        # We're doing a full update
        Bundler.definition(true)
      else
        Bundler.definition(gems: gems, sources: sources)
      end

      Bundler::CLI::Common.configure_gem_version_promoter(
        Bundler.definition,
        options.merge(strict: @strict)
      )

      definition_resolution = proc do
        options[:local] ? definition.resolve_with_cache! : definition.resolve_remotely!
      end

      if options[:parseable]
        Bundler.ui.progress(&definition_resolution)
      else
        definition_resolution.call
      end

      Bundler.ui.info ""

      # Loop through the current specs
      gemfile_specs, dependency_specs = current_specs.partition do |spec|
        current_dependencies.key? spec.name
      end

      specs = if options["only-explicit"]
        gemfile_specs
      else
        gemfile_specs + dependency_specs
      end

      specs.sort_by(&:name).uniq(&:name).each do |current_spec|
        next unless gems.empty? || gems.include?(current_spec.name)

        active_spec = retrieve_active_spec(definition, current_spec)
        next unless active_spec

        next unless filter_options_patch.empty? || update_present_via_semver_portions(current_spec, active_spec, options)

        gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version)
        next unless gem_outdated || (current_spec.git_version != active_spec.git_version)

        dependency = current_dependencies[current_spec.name]
        groups = ""
        if dependency && !options[:parseable]
          groups = dependency.groups.join(", ")
        end

        outdated_gems << {
          active_spec: active_spec,
          current_spec: current_spec,
          dependency: dependency,
          groups: groups,
        }
      end

      relevant_outdated_gems = if options_include_groups
        outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems|
          contains_group = groups.split(", ").include?(options[:group])
          next unless options[:groups] || contains_group

          gems
        end.compact
      else
        outdated_gems
      end

      if relevant_outdated_gems.empty?
        unless options[:parseable]
          Bundler.ui.info(nothing_outdated_message)
        end
      else
        if options[:parseable]
          print_gems(relevant_outdated_gems)
        else
          print_gems_table(relevant_outdated_gems)
        end

        exit 1
      end
    end

    private

    def loaded_from_for(spec)
      return unless spec.respond_to?(:loaded_from)

      spec.loaded_from
    end

    def groups_text(group_text, groups)
      "#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
    end

    def nothing_outdated_message
      if filter_options_patch.any?
        display = filter_options_patch.map do |o|
          o.sub("filter-", "")
        end.join(" or ")

        "No #{display} updates to display.\n"
      else
        "Bundle up to date!\n"
      end
    end

    def retrieve_active_spec(definition, current_spec)
      active_spec = definition.resolve.find_by_name_and_platform(current_spec.name, current_spec.platform)
      return unless active_spec

      return active_spec if strict

      active_specs = active_spec.source.specs.search(current_spec.name).select {|spec| spec.match_platform(current_spec.platform) }.sort_by(&:version)
      if !current_spec.version.prerelease? && !options[:pre] && active_specs.size > 1
        active_specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
      end
      active_specs.last
    end

    def print_gems(gems_list)
      gems_list.each do |gem|
        print_gem(
          gem[:current_spec],
          gem[:active_spec],
          gem[:dependency],
          gem[:groups],
        )
      end
    end

    def print_gems_table(gems_list)
      data = gems_list.map do |gem|
        gem_column_for(
          gem[:current_spec],
          gem[:active_spec],
          gem[:dependency],
          gem[:groups],
        )
      end

      print_indented([table_header] + data)
    end

    def print_gem(current_spec, active_spec, dependency, groups)
      spec_version = "#{active_spec.version}#{active_spec.git_version}"
      if Bundler.ui.debug?
        loaded_from = loaded_from_for(active_spec)
        spec_version += " (from #{loaded_from})" if loaded_from
      end
      current_version = "#{current_spec.version}#{current_spec.git_version}"

      if dependency&.specific?
        dependency_version = %(, requested #{dependency.requirement})
      end

      spec_outdated_info = "#{active_spec.name} (newest #{spec_version}, " \
        "installed #{current_version}#{dependency_version})"

      output_message = if options[:parseable]
        spec_outdated_info.to_s
      elsif options_include_groups || groups.empty?
        "  * #{spec_outdated_info}"
      else
        "  * #{spec_outdated_info} in #{groups_text("group", groups)}"
      end

      Bundler.ui.info output_message.rstrip
    end

    def gem_column_for(current_spec, active_spec, dependency, groups)
      current_version = "#{current_spec.version}#{current_spec.git_version}"
      spec_version = "#{active_spec.version}#{active_spec.git_version}"
      dependency = dependency.requirement if dependency

      ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
      ret_val << loaded_from_for(active_spec).to_s if Bundler.ui.debug?
      ret_val
    end

    def check_for_deployment_mode!
      return unless Bundler.frozen_bundle?
      suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
        "bundle config unset frozen"
      elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
        "bundle config unset deployment"
      end
      raise ProductionError, "You are trying to check outdated gems in " \
        "deployment mode. Run `bundle outdated` elsewhere.\n" \
        "\nIf this is a development machine, remove the " \
        "#{Bundler.default_gemfile} freeze" \
        "\nby running `#{suggested_command}`."
    end

    def update_present_via_semver_portions(current_spec, active_spec, options)
      current_major = current_spec.version.segments.first
      active_major = active_spec.version.segments.first

      update_present = false
      update_present = active_major > current_major if options["filter-major"]

      if !update_present && (options["filter-minor"] || options["filter-patch"]) && current_major == active_major
        current_minor = get_version_semver_portion_value(current_spec, 1)
        active_minor = get_version_semver_portion_value(active_spec, 1)

        update_present = active_minor > current_minor if options["filter-minor"]

        if !update_present && options["filter-patch"] && current_minor == active_minor
          current_patch = get_version_semver_portion_value(current_spec, 2)
          active_patch = get_version_semver_portion_value(active_spec, 2)

          update_present = active_patch > current_patch
        end
      end

      update_present
    end

    def get_version_semver_portion_value(spec, version_portion_index)
      version_section = spec.version.segments[version_portion_index, 1]
      version_section.to_a[0].to_i
    end

    def print_indented(matrix)
      header = matrix[0]
      data = matrix[1..-1]

      column_sizes = Array.new(header.size) do |index|
        matrix.max_by {|row| row[index].length }[index].length
      end

      Bundler.ui.info justify(header, column_sizes)

      data.sort_by! {|row| row[0] }

      data.each do |row|
        Bundler.ui.info justify(row, column_sizes)
      end
    end

    def table_header
      header = ["Gem", "Current", "Latest", "Requested", "Groups"]
      header << "Path" if Bundler.ui.debug?
      header
    end

    def justify(row, sizes)
      row.each_with_index.map do |element, index|
        element.ljust(sizes[index])
      end.join("  ").strip + "\n"
    end
  end
end
PK)J[�re��5share/gems/gems/bundler-2.6.7/lib/bundler/cli/info.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Info
    attr_reader :gem_name, :options
    def initialize(options, gem_name)
      @options = options
      @gem_name = gem_name
    end

    def run
      Bundler.ui.silence do
        Bundler.definition.validate_runtime!
        Bundler.load.lock
      end

      spec = spec_for_gem(gem_name)

      if spec
        return print_gem_path(spec) if @options[:path]
        return print_gem_version(spec) if @options[:version]
        print_gem_info(spec)
      end
    end

    private

    def spec_for_gem(name)
      Bundler::CLI::Common.select_spec(name, :regex_match)
    end

    def print_gem_version(spec)
      Bundler.ui.info spec.version.to_s
    end

    def print_gem_path(spec)
      name = spec.name
      if name == "bundler"
        path = File.expand_path("../../..", __dir__)
      else
        path = spec.full_gem_path
        if spec.installation_missing?
          return Bundler.ui.warn "The gem #{name} is missing. It should be installed at #{path}, but was not found"
        end
      end

      Bundler.ui.info path
    end

    def print_gem_info(spec)
      metadata = spec.metadata
      name = spec.name
      gem_info = String.new
      gem_info << "  * #{name} (#{spec.version}#{spec.git_version})\n"
      gem_info << "\tSummary: #{spec.summary}\n" if spec.summary
      gem_info << "\tHomepage: #{spec.homepage}\n" if spec.homepage
      gem_info << "\tDocumentation: #{metadata["documentation_uri"]}\n" if metadata.key?("documentation_uri")
      gem_info << "\tSource Code: #{metadata["source_code_uri"]}\n" if metadata.key?("source_code_uri")
      gem_info << "\tFunding: #{metadata["funding_uri"]}\n" if metadata.key?("funding_uri")
      gem_info << "\tWiki: #{metadata["wiki_uri"]}\n" if metadata.key?("wiki_uri")
      gem_info << "\tChangelog: #{metadata["changelog_uri"]}\n" if metadata.key?("changelog_uri")
      gem_info << "\tBug Tracker: #{metadata["bug_tracker_uri"]}\n" if metadata.key?("bug_tracker_uri")
      gem_info << "\tMailing List: #{metadata["mailing_list_uri"]}\n" if metadata.key?("mailing_list_uri")
      gem_info << "\tPath: #{spec.full_gem_path}\n"
      gem_info << "\tDefault Gem: yes\n" if spec.respond_to?(:default_gem?) && spec.default_gem?
      gem_info << "\tReverse Dependencies: \n\t\t#{gem_dependencies.join("\n\t\t")}" if gem_dependencies.any?

      if name != "bundler" && spec.installation_missing?
        return Bundler.ui.warn "The gem #{name} is missing. Gemspec information is still available though:\n#{gem_info}"
      end

      Bundler.ui.info gem_info
    end

    def gem_dependencies
      @gem_dependencies ||= Bundler.definition.specs.filter_map do |spec|
        dependency = spec.dependencies.find {|dep| dep.name == gem_name }
        next unless dependency
        "#{spec.name} (#{spec.version}) depends on #{gem_name} (#{dependency.requirements_list.join(", ")})"
      end.sort
    end
  end
end
PK)J[�37��5share/gems/gems/bundler-2.6.7/lib/bundler/cli/show.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Show
    attr_reader :options, :gem_name, :latest_specs
    def initialize(options, gem_name)
      @options = options
      @gem_name = gem_name
      @verbose = options[:verbose] || options[:outdated]
      @latest_specs = fetch_latest_specs if @verbose
    end

    def run
      Bundler.ui.silence do
        Bundler.definition.validate_runtime!
        Bundler.load.lock
      end

      if gem_name
        if gem_name == "bundler"
          path = File.expand_path("../../..", __dir__)
        else
          spec = Bundler::CLI::Common.select_spec(gem_name, :regex_match)
          return unless spec
          path = spec.full_gem_path
          unless File.directory?(path)
            return Bundler.ui.warn "The gem #{gem_name} is missing. It should be installed at #{path}, but was not found"
          end
        end
        return Bundler.ui.info(path)
      end

      if options[:paths]
        Bundler.load.specs.sort_by(&:name).map do |s|
          Bundler.ui.info s.full_gem_path
        end
      else
        Bundler.ui.info "Gems included by the bundle:"
        Bundler.load.specs.sort_by(&:name).each do |s|
          desc = "  * #{s.name} (#{s.version}#{s.git_version})"
          if @verbose
            latest = latest_specs.find {|l| l.name == s.name }
            Bundler.ui.info <<~END
              #{desc.lstrip}
              \tSummary:  #{s.summary || "No description available."}
              \tHomepage: #{s.homepage || "No website available."}
              \tStatus:   #{outdated?(s, latest) ? "Outdated - #{s.version} < #{latest.version}" : "Up to date"}
            END
          else
            Bundler.ui.info desc
          end
        end
      end
    end

    private

    def fetch_latest_specs
      definition = Bundler.definition(true)
      if options[:outdated]
        Bundler.ui.info "Fetching remote specs for outdated check...\n\n"
        Bundler.ui.silence { definition.remotely! }
      else
        definition.with_cache!
      end
      Bundler.reset!
      definition.specs
    end

    def outdated?(current, latest)
      return false unless latest
      Gem::Version.new(current.version) < Gem::Version.new(latest.version)
    end
  end
end
PK)J[_Zeff6share/gems/gems/bundler-2.6.7/lib/bundler/cli/cache.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Cache
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]
      Bundler.settings.set_command_option_if_given :path, options[:path]
      Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]

      setup_cache_all
      install

      # TODO: move cache contents here now that all bundles are locked
      custom_path = Bundler.settings[:path] if options[:path]

      Bundler.settings.temporary(cache_all_platforms: options["all-platforms"]) do
        Bundler.load.cache(custom_path)
      end
    end

    private

    def install
      require_relative "install"
      options = self.options.dup
      options["local"] = false if Bundler.settings[:cache_all_platforms]
      options["no-cache"] = true
      Bundler::CLI::Install.new(options).run
    end

    def setup_cache_all
      all = options.fetch(:all, Bundler.feature_flag.cache_all? || nil)

      Bundler.settings.set_command_option_if_given :cache_all, all
    end
  end
end
PK)J[h$���5share/gems/gems/bundler-2.6.7/lib/bundler/cli/fund.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Fund
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      Bundler.definition.validate_runtime!

      groups = Array(options[:group]).map(&:to_sym)

      deps = if groups.any?
        Bundler.definition.dependencies_for(groups)
      else
        Bundler.definition.requested_dependencies
      end

      fund_info = deps.each_with_object([]) do |dep, arr|
        spec = Bundler.definition.specs[dep.name].first
        if spec.metadata.key?("funding_uri")
          arr << "* #{spec.name} (#{spec.version})\n  Funding: #{spec.metadata["funding_uri"]}"
        end
      end

      if fund_info.empty?
        Bundler.ui.info "None of the installed gems you directly depend on are looking for funding."
      else
        Bundler.ui.info fund_info.join("\n")
      end
    end
  end
end
PK)J[�0�JJ4share/gems/gems/bundler-2.6.7/lib/bundler/cli/viz.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Viz
    attr_reader :options, :gem_name
    def initialize(options)
      @options = options
    end

    def run
      # make sure we get the right `graphviz`. There is also a `graphviz`
      # gem we're not built to support
      gem "ruby-graphviz"
      require "graphviz"

      options[:without] = options[:without].join(":").tr(" ", ":").split(":")
      output_file = File.expand_path(options[:file])

      graph = Graph.new(Bundler.load, output_file, options[:version], options[:requirements], options[:format], options[:without])
      graph.viz
    rescue LoadError => e
      Bundler.ui.error e.inspect
      Bundler.ui.warn "Make sure you have the graphviz ruby gem. You can install it with:"
      Bundler.ui.warn "`gem install ruby-graphviz`"
    rescue StandardError => e
      raise unless e.message.to_s.include?("GraphViz not installed or dot not in PATH")
      Bundler.ui.error e.message
      Bundler.ui.warn "Please install GraphViz. On a Mac with Homebrew, you can run `brew install graphviz`."
    end
  end
end
PK)J[�b.J9share/gems/gems/bundler-2.6.7/lib/bundler/cli/pristine.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Pristine
    def initialize(gems)
      @gems = gems
    end

    def run
      CLI::Common.ensure_all_gems_in_lockfile!(@gems)
      definition = Bundler.definition
      definition.validate_runtime!
      installer = Bundler::Installer.new(Bundler.root, definition)

      ProcessLock.lock do
        installed_specs = definition.specs.reject do |spec|
          next if spec.name == "bundler" # Source::Rubygems doesn't install bundler
          next if !@gems.empty? && !@gems.include?(spec.name)

          gem_name = "#{spec.name} (#{spec.version}#{spec.git_version})"
          gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY

          case source = spec.source
          when Source::Rubygems
            cached_gem = spec.cache_file
            unless File.exist?(cached_gem)
              Bundler.ui.error("Failed to pristine #{gem_name}. Cached gem #{cached_gem} does not exist.")
              next
            end

            FileUtils.rm_rf spec.full_gem_path
          when Source::Git
            if source.local?
              Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
              next
            end

            source.remote!
            if extension_cache_path = source.extension_cache_path(spec)
              FileUtils.rm_rf extension_cache_path
            end
            FileUtils.rm_rf spec.extension_dir
            FileUtils.rm_rf spec.full_gem_path
          else
            Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
            next
          end

          true
        end.map(&:name)

        jobs = installer.send(:installation_parallelization)
        pristine_count = definition.specs.count - installed_specs.count
        # allow a pristining a single gem to skip the parallel worker
        jobs = [jobs, pristine_count].min
        ParallelInstaller.call(installer, definition.specs, jobs, false, true, skip: installed_specs)
      end
    end
  end
end
PK)J[I�LN]]7share/gems/gems/bundler-2.6.7/lib/bundler/cli/doctor.rbnu�[���# frozen_string_literal: true

require "rbconfig"
require "shellwords"

module Bundler
  class CLI::Doctor
    DARWIN_REGEX = /\s+(.+) \(compatibility /
    LDD_REGEX = /\t\S+ => (\S+) \(\S+\)/

    attr_reader :options

    def initialize(options)
      @options = options
    end

    def otool_available?
      Bundler.which("otool")
    end

    def ldd_available?
      Bundler.which("ldd")
    end

    def dylibs_darwin(path)
      output = `/usr/bin/otool -L #{path.shellescape}`.chomp
      dylibs = output.split("\n")[1..-1].map {|l| l.match(DARWIN_REGEX).captures[0] }.uniq
      # ignore @rpath and friends
      dylibs.reject {|dylib| dylib.start_with? "@" }
    end

    def dylibs_ldd(path)
      output = `/usr/bin/ldd #{path.shellescape}`.chomp
      output.split("\n").filter_map do |l|
        match = l.match(LDD_REGEX)
        next if match.nil?
        match.captures[0]
      end
    end

    def dylibs(path)
      case RbConfig::CONFIG["host_os"]
      when /darwin/
        return [] unless otool_available?
        dylibs_darwin(path)
      when /(linux|solaris|bsd)/
        return [] unless ldd_available?
        dylibs_ldd(path)
      else # Windows, etc.
        Bundler.ui.warn("Dynamic library check not supported on this platform.")
        []
      end
    end

    def bundles_for_gem(spec)
      Dir.glob("#{spec.full_gem_path}/**/*.bundle")
    end

    def lookup_with_fiddle(path)
      require "fiddle"
      Fiddle.dlopen(path)
      false
    rescue Fiddle::DLError
      true
    end

    def check!
      require_relative "check"
      Bundler::CLI::Check.new({}).run
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]
      Bundler.settings.validate!
      check!

      definition = Bundler.definition
      broken_links = {}

      definition.specs.each do |spec|
        bundles_for_gem(spec).each do |bundle|
          bad_paths = dylibs(bundle).select do |f|
            lookup_with_fiddle(f)
          end
          if bad_paths.any?
            broken_links[spec] ||= []
            broken_links[spec].concat(bad_paths)
          end
        end
      end

      permissions_valid = check_home_permissions

      if broken_links.any?
        message = "The following gems are missing OS dependencies:"
        broken_links.flat_map do |spec, paths|
          paths.uniq.map do |path|
            "\n * #{spec.name}: #{path}"
          end
        end.sort.each {|m| message += m }
        raise ProductionError, message
      elsif permissions_valid
        Bundler.ui.info "No issues found with the installed bundle"
      end
    end

    private

    def check_home_permissions
      require "find"
      files_not_readable = []
      files_not_readable_and_owned_by_different_user = []
      files_not_owned_by_current_user_but_still_readable = []
      broken_symlinks = []
      Find.find(Bundler.bundle_path.to_s).each do |f|
        if !File.exist?(f)
          broken_symlinks << f
        elsif !File.readable?(f)
          if File.stat(f).uid != Process.uid
            files_not_readable_and_owned_by_different_user << f
          else
            files_not_readable << f
          end
        elsif File.stat(f).uid != Process.uid
          files_not_owned_by_current_user_but_still_readable << f
        end
      end

      ok = true

      if broken_symlinks.any?
        Bundler.ui.warn "Broken links exist in the Bundler home. Please report them to the offending gem's upstream repo. These files are:\n - #{broken_symlinks.join("\n - ")}"

        ok = false
      end

      if files_not_owned_by_current_user_but_still_readable.any?
        Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
          "user, but are still readable. These files are:\n - #{files_not_owned_by_current_user_but_still_readable.join("\n - ")}"

        ok = false
      end

      if files_not_readable_and_owned_by_different_user.any?
        Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
          "user, and are not readable. These files are:\n - #{files_not_readable_and_owned_by_different_user.join("\n - ")}"

        ok = false
      end

      if files_not_readable.any?
        Bundler.ui.warn "Files exist in the Bundler home that are not " \
          "readable by the current user. These files are:\n - #{files_not_readable.join("\n - ")}"

        ok = false
      end

      ok
    end
  end
end
PK)J[��~��	�	5share/gems/gems/bundler-2.6.7/lib/bundler/cli/exec.rbnu�[���# frozen_string_literal: true

require_relative "../current_ruby"

module Bundler
  class CLI::Exec
    attr_reader :options, :args, :cmd

    TRAPPED_SIGNALS = %w[INT].freeze

    def initialize(options, args)
      @options = options
      @cmd = args.shift
      @args = args
      @args << { close_others: !options.keep_file_descriptors? } unless Bundler.current_ruby.jruby?
    end

    def run
      validate_cmd!
      SharedHelpers.set_bundle_environment
      if bin_path = Bundler.which(cmd)
        if !Bundler.settings[:disable_exec_load] && ruby_shebang?(bin_path)
          return kernel_load(bin_path, *args)
        end
        bin_path = "./" + bin_path unless File.absolute_path?(bin_path)
        kernel_exec(bin_path, *args)
      else
        # exec using the given command
        kernel_exec(cmd, *args)
      end
    end

    private

    def validate_cmd!
      return unless cmd.nil?
      Bundler.ui.error "bundler: exec needs a command to run"
      exit 128
    end

    def kernel_exec(*args)
      Kernel.exec(*args)
    rescue Errno::EACCES, Errno::ENOEXEC
      Bundler.ui.error "bundler: not executable: #{cmd}"
      exit 126
    rescue Errno::ENOENT
      Bundler.ui.error "bundler: command not found: #{cmd}"
      Bundler.ui.warn "Install missing gem executables with `bundle install`"
      exit 127
    end

    def kernel_load(file, *args)
      args.pop if args.last.is_a?(Hash)
      ARGV.replace(args)
      $0 = file
      Process.setproctitle(process_title(file, args)) if Process.respond_to?(:setproctitle)
      require_relative "../setup"
      TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
      Kernel.load(file)
    rescue SystemExit, SignalException
      raise
    rescue Exception # rubocop:disable Lint/RescueException
      Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
      Bundler::FriendlyErrors.disable!
      raise
    end

    def process_title(file, args)
      "#{file} #{args.join(" ")}".strip
    end

    def ruby_shebang?(file)
      possibilities = [
        "#!/opt/alt/ruby34/bin/ruby\n",
        "#!/usr/bin/env jruby\n",
        "#!/usr/bin/env truffleruby\n",
        "#!#{Gem.ruby}\n",
      ]

      if File.zero?(file)
        Bundler.ui.warn "#{file} is empty"
        return false
      end

      first_line = File.open(file, "rb") {|f| f.read(possibilities.map(&:size).max) }
      possibilities.any? {|shebang| first_line.start_with?(shebang) }
    end
  end
end
PK)J[�	446share/gems/gems/bundler-2.6.7/lib/bundler/cli/issue.rbnu�[���# frozen_string_literal: true

require "rbconfig"

module Bundler
  class CLI::Issue
    def run
      Bundler.ui.info <<~EOS
        Did you find an issue with Bundler? Before filing a new issue,
        be sure to check out these resources:

        1. Check out our troubleshooting guide for quick fixes to common issues:
        https://github.com/rubygems/rubygems/blob/master/doc/bundler/TROUBLESHOOTING.md

        2. Instructions for common Bundler uses can be found on the documentation
        site: https://bundler.io/

        3. Information about each Bundler command can be found in the Bundler
        man pages: https://bundler.io/man/bundle.1.html

        Hopefully the troubleshooting steps above resolved your problem!  If things
        still aren't working the way you expect them to, please let us know so
        that we can diagnose and help fix the problem you're having, by filling
        in the new issue form located at
        https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md,
        and copy and pasting the information below.

      EOS

      Bundler.ui.info Bundler::Env.report

      Bundler.ui.info "\n## Bundle Doctor"
      doctor
    end

    def doctor
      require_relative "doctor"
      Bundler::CLI::Doctor.new({}).run
    end
  end
end
PK)J[�t��7share/gems/gems/bundler-2.6.7/lib/bundler/cli/plugin.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_thor"
module Bundler
  class CLI::Plugin < Thor
    desc "install PLUGINS", "Install the plugin from the source"
    long_desc <<-D
      Install plugins either from the rubygems source provided (with --source option), from a git source provided with --git, or a local path provided with --path. If no sources are provided, it uses Gem.sources
   D
    method_option "source", type: :string, default: nil, banner: "URL of the RubyGems source to fetch the plugin from"
    method_option "version", type: :string, default: nil, banner: "The version of the plugin to fetch"
    method_option "git", type: :string, default: nil, banner: "URL of the git repo to fetch from"
    method_option "local_git", type: :string, default: nil, banner: "Path of the local git repo to fetch from (deprecated)"
    method_option "branch", type: :string, default: nil, banner: "The git branch to checkout"
    method_option "ref", type: :string, default: nil, banner: "The git revision to check out"
    method_option "path", type: :string, default: nil, banner: "Path of a local gem to directly use"
    def install(*plugins)
      Bundler::Plugin.install(plugins, options)
    end

    desc "uninstall PLUGINS", "Uninstall the plugins"
    long_desc <<-D
      Uninstall given list of plugins. To uninstall all the plugins, use -all option.
    D
    method_option "all", type: :boolean, default: nil, banner: "Uninstall all the installed plugins. If no plugin is installed, then it does nothing."
    def uninstall(*plugins)
      Bundler::Plugin.uninstall(plugins, options)
    end

    desc "list", "List the installed plugins and available commands"
    def list
      Bundler::Plugin.list
    end
  end
end
PK)J[R4_Ǎ�5share/gems/gems/bundler-2.6.7/lib/bundler/cli/open.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Open
    attr_reader :options, :name, :path
    def initialize(options, name)
      @options = options
      @name = name
      @path = options[:path] unless options[:path].nil?
    end

    def run
      raise InvalidOption, "Cannot specify `--path` option without a value" if !@path.nil? && @path.empty?
      editor = [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }
      return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor
      return unless spec = Bundler::CLI::Common.select_spec(name, :regex_match)
      if spec.default_gem?
        Bundler.ui.info "Unable to open #{name} because it's a default gem, so the directory it would normally be installed to does not exist."
      else
        root_path = spec.full_gem_path
        require "shellwords"
        command = Shellwords.split(editor) << File.join([root_path, path].compact)
        Bundler.with_original_env do
          system(*command, { chdir: root_path })
        end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
      end
    end
  end
end
PK)J[��5share/gems/gems/bundler-2.6.7/lib/bundler/cli/init.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Init
    attr_reader :options
    def initialize(options)
      @options = options
    end

    def run
      if File.exist?(gemfile)
        Bundler.ui.error "#{gemfile} already exists at #{File.expand_path(gemfile)}"
        exit 1
      end

      unless File.writable?(Dir.pwd)
        Bundler.ui.error "Can not create #{gemfile} as the current directory is not writable."
        exit 1
      end

      if options[:gemspec]
        gemspec = File.expand_path(options[:gemspec])
        unless File.exist?(gemspec)
          Bundler.ui.error "Gem specification #{gemspec} doesn't exist"
          exit 1
        end

        spec = Bundler.load_gemspec_uncached(gemspec)

        File.open(gemfile, "wb") do |file|
          file << "# Generated from #{gemspec}\n"
          file << spec.to_gemfile
        end
      else
        File.open(File.expand_path("../templates/Gemfile", __dir__), "r") do |template|
          File.open(gemfile, "wb") do |destination|
            IO.copy_stream(template, destination)
          end
        end
      end

      puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
    end

    private

    def gemfile
      @gemfile ||= options[:gemfile] || Bundler.preferred_gemfile_name
    end
  end
end
PK)J[~q�EKK7share/gems/gems/bundler-2.6.7/lib/bundler/cli/common.rbnu�[���# frozen_string_literal: true

module Bundler
  module CLI::Common
    def self.output_post_install_messages(messages)
      return if Bundler.settings["ignore_messages"]
      messages.to_a.each do |name, msg|
        print_post_install_message(name, msg) unless Bundler.settings["ignore_messages.#{name}"]
      end
    end

    def self.print_post_install_message(name, msg)
      Bundler.ui.confirm "Post-install message from #{name}:"
      Bundler.ui.info msg
    end

    def self.output_fund_metadata_summary
      return if Bundler.settings["ignore_funding_requests"]
      definition = Bundler.definition
      current_dependencies = definition.requested_dependencies
      current_specs = definition.specs

      count = current_dependencies.count {|dep| current_specs[dep.name].first.metadata.key?("funding_uri") }

      return if count.zero?

      intro = count > 1 ? "#{count} installed gems you directly depend on are" : "#{count} installed gem you directly depend on is"
      message = "#{intro} looking for funding.\n  Run `bundle fund` for details"
      Bundler.ui.info message
    end

    def self.output_without_groups_message(command)
      return if Bundler.settings[:without].empty?
      Bundler.ui.confirm without_groups_message(command)
    end

    def self.without_groups_message(command)
      command_in_past_tense = command == :install ? "installed" : "updated"
      groups = Bundler.settings[:without]
      "Gems in the #{verbalize_groups(groups)} were not #{command_in_past_tense}."
    end

    def self.verbalize_groups(groups)
      groups.map! {|g| "'#{g}'" }
      group_list = [groups[0...-1].join(", "), groups[-1..-1]].
        reject {|s| s.to_s.empty? }.join(" and ")
      group_str = groups.size == 1 ? "group" : "groups"
      "#{group_str} #{group_list}"
    end

    def self.select_spec(name, regex_match = nil)
      specs = []
      regexp = Regexp.new(name) if regex_match

      Bundler.definition.specs.each do |spec|
        return spec if spec.name == name
        specs << spec if regexp && spec.name.match?(regexp)
      end

      default_spec = default_gem_spec(name)
      specs << default_spec if default_spec

      case specs.count
      when 0
        dep_in_other_group = Bundler.definition.current_dependencies.find {|dep|dep.name == name }

        if dep_in_other_group
          raise GemNotFound, "Could not find gem '#{name}', because it's in the #{verbalize_groups(dep_in_other_group.groups)}, configured to be ignored."
        else
          raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
        end
      when 1
        specs.first
      else
        ask_for_spec_from(specs)
      end
    rescue RegexpError
      raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
    end

    def self.default_gem_spec(name)
      gem_spec = Gem::Specification.find_all_by_name(name).last
      gem_spec if gem_spec&.default_gem?
    end

    def self.ask_for_spec_from(specs)
      specs.each_with_index do |spec, index|
        Bundler.ui.info "#{index.succ} : #{spec.name}", true
      end
      Bundler.ui.info "0 : - exit -", true

      num = Bundler.ui.ask("> ").to_i
      num > 0 ? specs[num - 1] : nil
    end

    def self.gem_not_found_message(missing_gem_name, alternatives)
      require_relative "../similarity_detector"
      message = "Could not find gem '#{missing_gem_name}'."
      alternate_names = alternatives.map {|a| a.respond_to?(:name) ? a.name : a }
      suggestions = SimilarityDetector.new(alternate_names).similar_word_list(missing_gem_name)
      message += "\nDid you mean #{suggestions}?" if suggestions
      message
    end

    def self.ensure_all_gems_in_lockfile!(names, locked_gems = Bundler.locked_gems)
      return unless locked_gems

      locked_names = locked_gems.specs.map(&:name).uniq
      names.-(locked_names).each do |g|
        raise GemNotFound, gem_not_found_message(g, locked_names)
      end
    end

    def self.configure_gem_version_promoter(definition, options)
      patch_level = patch_level_options(options)
      patch_level << :patch if patch_level.empty? && Bundler.settings[:prefer_patch]
      raise InvalidOption, "Provide only one of the following options: #{patch_level.join(", ")}" unless patch_level.length <= 1

      definition.gem_version_promoter.tap do |gvp|
        gvp.level = patch_level.first || :major
        gvp.strict = options[:strict] || options["filter-strict"]
        gvp.pre = options[:pre]
      end
    end

    def self.patch_level_options(options)
      [:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
    end

    def self.clean_after_install?
      clean = Bundler.settings[:clean]
      return clean unless clean.nil?
      clean ||= Bundler.feature_flag.auto_clean_without_path? && Bundler.settings[:path].nil?
      clean &&= !Bundler.use_system_gems?
      clean
    end
  end
end
PK)J[�7=x��6share/gems/gems/bundler-2.6.7/lib/bundler/cli/check.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Check
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      Bundler.settings.set_command_option_if_given :path, options[:path]

      definition = Bundler.definition
      definition.validate_runtime!

      begin
        definition.check!
        not_installed = definition.missing_specs
      rescue GemNotFound, GitError, SolveFailure
        Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."
        Bundler.ui.warn "Install missing gems with `bundle install`."
        exit 1
      end

      if not_installed.any?
        Bundler.ui.error "The following gems are missing"
        not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
        Bundler.ui.warn "Install missing gems with `bundle install`"
        exit 1
      elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
        Bundler.ui.error "This bundle has been frozen, but there is no #{SharedHelpers.relative_lockfile_path} present"
        exit 1
      else
        definition.lock(true) unless options[:"dry-run"]
        Bundler.ui.info "The Gemfile's dependencies are satisfied"
      end
    end
  end
end
PK)J[q�^3share/gems/gems/bundler-2.6.7/lib/bundler/mirror.rbnu�[���# frozen_string_literal: true

require "socket"

module Bundler
  class Settings
    # Class used to build the mirror set and then find a mirror for a given URI
    #
    # @param prober [Prober object, nil] by default a TCPSocketProbe, this object
    #   will be used to probe the mirror address to validate that the mirror replies.
    class Mirrors
      def initialize(prober = nil)
        @all = Mirror.new
        @prober = prober || TCPSocketProbe.new
        @mirrors = {}
      end

      # Returns a mirror for the given uri.
      #
      # Depending on the uri having a valid mirror or not, it may be a
      #   mirror that points to the provided uri
      def for(uri)
        if @all.validate!(@prober).valid?
          @all
        else
          fetch_valid_mirror_for(Settings.normalize_uri(uri))
        end
      end

      def each
        @mirrors.each do |k, v|
          yield k, v.uri.to_s
        end
      end

      def parse(key, value)
        config = MirrorConfig.new(key, value)
        mirror = if config.all?
          @all
        else
          @mirrors[config.uri] ||= Mirror.new
        end
        config.update_mirror(mirror)
      end

      private

      def fetch_valid_mirror_for(uri)
        downcased = uri.to_s.downcase
        mirror = @mirrors[downcased] || @mirrors[Gem::URI(downcased).host] || Mirror.new(uri)
        mirror.validate!(@prober)
        mirror = Mirror.new(uri) unless mirror.valid?
        mirror
      end
    end

    # A mirror
    #
    # Contains both the uri that should be used as a mirror and the
    #   fallback timeout which will be used for probing if the mirror
    #   replies on time or not.
    class Mirror
      DEFAULT_FALLBACK_TIMEOUT = 0.1

      attr_reader :uri, :fallback_timeout

      def initialize(uri = nil, fallback_timeout = 0)
        self.uri = uri
        self.fallback_timeout = fallback_timeout
        @valid = nil
      end

      def uri=(uri)
        @uri = if uri.nil?
          nil
        else
          Gem::URI(uri.to_s)
        end
        @valid = nil
      end

      def fallback_timeout=(timeout)
        case timeout
        when true, "true"
          @fallback_timeout = DEFAULT_FALLBACK_TIMEOUT
        when false, "false"
          @fallback_timeout = 0
        else
          @fallback_timeout = timeout.to_i
        end
        @valid = nil
      end

      def ==(other)
        !other.nil? && uri == other.uri && fallback_timeout == other.fallback_timeout
      end

      def valid?
        return false if @uri.nil?
        return @valid unless @valid.nil?
        false
      end

      def validate!(probe = nil)
        @valid = false if uri.nil?
        if @valid.nil?
          @valid = fallback_timeout == 0 || (probe || TCPSocketProbe.new).replies?(self)
        end
        self
      end
    end

    # Class used to parse one configuration line
    #
    # Gets the configuration line and the value.
    #   This object provides a `update_mirror` method
    #   used to setup the given mirror value.
    class MirrorConfig
      attr_accessor :uri, :value

      def initialize(config_line, value)
        uri, fallback =
          config_line.match(%r{\Amirror\.(all|.+?)(\.fallback_timeout)?\/?\z}).captures
        @fallback = !fallback.nil?
        @all = false
        if uri == "all"
          @all = true
        else
          @uri = Gem::URI(uri).absolute? ? Settings.normalize_uri(uri) : uri
        end
        @value = value
      end

      def all?
        @all
      end

      def update_mirror(mirror)
        if @fallback
          mirror.fallback_timeout = @value
        else
          mirror.uri = Settings.normalize_uri(@value)
        end
      end
    end

    # Class used for probing TCP availability for a given mirror.
    class TCPSocketProbe
      def replies?(mirror)
        MirrorSockets.new(mirror).any? do |socket, address, timeout|
          socket.connect_nonblock(address)
        rescue Errno::EINPROGRESS
          wait_for_writtable_socket(socket, address, timeout)
        rescue RuntimeError # Connection failed somehow, again
          false
        end
      end

      private

      def wait_for_writtable_socket(socket, address, timeout)
        if IO.select(nil, [socket], nil, timeout)
          probe_writtable_socket(socket, address)
        else # TCP Handshake timed out, or there is something dropping packets
          false
        end
      end

      def probe_writtable_socket(socket, address)
        socket.connect_nonblock(address)
      rescue Errno::EISCONN
        true
      rescue StandardError # Connection failed
        false
      end
    end
  end

  # Class used to build the list of sockets that correspond to
  #   a given mirror.
  #
  # One mirror may correspond to many different addresses, both
  #   because of it having many dns entries or because
  #   the network interface is both ipv4 and ipv5
  class MirrorSockets
    def initialize(mirror)
      @timeout = mirror.fallback_timeout
      @addresses = Socket.getaddrinfo(mirror.uri.host, mirror.uri.port).map do |address|
        SocketAddress.new(address[0], address[3], address[1])
      end
    end

    def any?
      @addresses.any? do |address|
        socket = Socket.new(Socket.const_get(address.type), Socket::SOCK_STREAM, 0)
        socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
        value = yield socket, address.to_socket_address, @timeout
        socket.close unless socket.closed?
        value
      end
    end
  end

  # Socket address builder.
  #
  # Given a socket type, a host and a port,
  #   provides a method to build sockaddr string
  class SocketAddress
    attr_reader :type, :host, :port

    def initialize(type, host, port)
      @type = type
      @host = host
      @port = port
    end

    def to_socket_address
      Socket.pack_sockaddr_in(@port, @host)
    end
  end
end
PK)J[����>>9share/gems/gems/bundler-2.6.7/lib/bundler/feature_flag.rbnu�[���# frozen_string_literal: true

module Bundler
  class FeatureFlag
    def self.settings_flag(flag, &default)
      unless Bundler::Settings::BOOL_KEYS.include?(flag.to_s)
        raise "Cannot use `#{flag}` as a settings feature flag since it isn't a bool key"
      end

      settings_method("#{flag}?", flag, &default)
    end
    private_class_method :settings_flag

    def self.settings_option(key, &default)
      settings_method(key, key, &default)
    end
    private_class_method :settings_option

    def self.settings_method(name, key, &default)
      define_method(name) do
        value = Bundler.settings[key]
        value = instance_eval(&default) if value.nil?
        value
      end
    end
    private_class_method :settings_method

    (1..10).each {|v| define_method("bundler_#{v}_mode?") { @major_version >= v } }

    settings_flag(:allow_offline_install) { bundler_3_mode? }
    settings_flag(:auto_clean_without_path) { bundler_3_mode? }
    settings_flag(:cache_all) { bundler_3_mode? }
    settings_flag(:default_install_uses_path) { bundler_3_mode? }
    settings_flag(:forget_cli_options) { bundler_3_mode? }
    settings_flag(:global_gem_cache) { bundler_3_mode? }
    settings_flag(:lockfile_checksums) { bundler_3_mode? }
    settings_flag(:path_relative_to_cwd) { bundler_3_mode? }
    settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
    settings_flag(:print_only_version_number) { bundler_3_mode? }
    settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
    settings_flag(:update_requires_all_flag) { bundler_4_mode? }

    settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }

    def initialize(bundler_version)
      @bundler_version = Gem::Version.create(bundler_version)
      @major_version = @bundler_version.segments.first
    end
  end
end
PK)J[��M��>share/gems/gems/bundler-2.6.7/lib/bundler/vendored_net_http.rbnu�[���# frozen_string_literal: true

# This defined? guard can be removed once RubyGems 3.4 support is dropped.
#
# Bundler specs load this code from `spec/support/vendored_net_http.rb` to avoid
# activating the Bundler gem too early. Without this guard, we get redefinition
# warnings once Bundler is actually activated and
# `lib/bundler/vendored_net_http.rb` is required. This is not an issue in
# RubyGems versions including `rubygems/vendored_net_http` since `require` takes
# care of avoiding the double load.
#
unless defined?(Gem::Net)
  begin
    require "rubygems/vendored_net_http"
  rescue LoadError
    begin
      require "rubygems/net/http"
    rescue LoadError
      require "net/http"
      Gem::Net = Net
    end
  end
end
PK)J[��:share/gems/gems/bundler-2.6.7/lib/bundler/fetcher/index.rbnu�[���# frozen_string_literal: true

require_relative "base"

module Bundler
  class Fetcher
    class Index < Base
      def specs(_gem_names)
        Bundler.rubygems.fetch_all_remote_specs(remote, gem_remote_fetcher)
      rescue Gem::RemoteFetcher::FetchError => e
        case e.message
        when /certificate verify failed/
          raise CertificateFailureError.new(display_uri)
        when /401/
          raise BadAuthenticationError, remote_uri if remote_uri.userinfo
          raise AuthenticationRequiredError, remote_uri
        when /403/
          raise AuthenticationForbiddenError, remote_uri
        else
          raise HTTPError, "Could not fetch specs from #{display_uri} due to underlying error <#{e.message}>"
        end
      end
    end
  end
end
PK)J[	�
:55Bshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/compact_index.rbnu�[���# frozen_string_literal: true

require_relative "base"
require_relative "../worker"

module Bundler
  class Fetcher
    class CompactIndex < Base
      def self.compact_index_request(method_name)
        method = instance_method(method_name)
        undef_method(method_name)
        define_method(method_name) do |*args, &blk|
          method.bind_call(self, *args, &blk)
        rescue NetworkDownError, CompactIndexClient::Updater::MismatchedChecksumError => e
          raise HTTPError, e.message
        rescue AuthenticationRequiredError, BadAuthenticationError
          # Fail since we got a 401 from the server.
          raise
        rescue HTTPError => e
          Bundler.ui.trace(e)
          nil
        end
      end

      def specs(gem_names)
        specs_for_names(gem_names)
      end
      compact_index_request :specs

      def specs_for_names(gem_names)
        gem_info = []
        complete_gems = []
        remaining_gems = gem_names.dup

        until remaining_gems.empty?
          log_specs { "Looking up gems #{remaining_gems.inspect}" }
          deps = fetch_gem_infos(remaining_gems).flatten(1)
          next_gems = deps.flat_map {|d| d[CompactIndexClient::INFO_DEPS].flat_map(&:first) }.uniq
          deps.each {|dep| gem_info << dep }
          complete_gems.concat(deps.map(&:first)).uniq!
          remaining_gems = next_gems - complete_gems
        end
        @bundle_worker&.stop
        @bundle_worker = nil # reset it.  Not sure if necessary

        gem_info
      end

      def available?
        unless SharedHelpers.md5_available?
          Bundler.ui.debug("FIPS mode is enabled, bundler can't use the CompactIndex API")
          return nil
        end
        # Read info file checksums out of /versions, so we can know if gems are up to date
        compact_index_client.available?
      rescue CompactIndexClient::Updater::MismatchedChecksumError => e
        Bundler.ui.debug(e.message)
        nil
      end
      compact_index_request :available?

      def api_fetcher?
        true
      end

      private

      def compact_index_client
        @compact_index_client ||=
          SharedHelpers.filesystem_access(cache_path) do
            CompactIndexClient.new(cache_path, client_fetcher)
          end
      end

      def fetch_gem_infos(names)
        in_parallel(names) {|name| compact_index_client.info(name) }
      rescue TooManyRequestsError # rubygems.org is rate limiting us, slow down.
        @bundle_worker&.stop
        @bundle_worker = nil # reset it.  Not sure if necessary
        compact_index_client.reset!
        names.map {|name| compact_index_client.info(name) }
      end

      def in_parallel(inputs, &blk)
        func = lambda {|object, _index| blk.call(object) }
        worker = bundle_worker(func)
        inputs.each {|input| worker.enq(input) }
        inputs.map { worker.deq }
      end

      def bundle_worker(func = nil)
        @bundle_worker ||= begin
          worker_name = "Compact Index (#{display_uri.host})"
          Bundler::Worker.new(Bundler.settings.processor_count, worker_name, func)
        end
        @bundle_worker.tap do |worker|
          worker.instance_variable_set(:@func, func) if func
        end
      end

      def cache_path
        Bundler.user_cache.join("compact_index", remote.cache_slug)
      end

      def client_fetcher
        ClientFetcher.new(self, Bundler.ui)
      end

      ClientFetcher = Struct.new(:fetcher, :ui) do
        def call(path, headers)
          fetcher.downloader.fetch(fetcher.fetch_uri + path, headers)
        rescue NetworkDownError => e
          raise unless Bundler.feature_flag.allow_offline_install? && headers["If-None-Match"]
          ui.warn "Using the cached data for the new index because of a network error: #{e}"
          Gem::Net::HTTPNotModified.new(nil, nil, nil)
        end
      end
    end
  end
end
PK)J[k-�9share/gems/gems/bundler-2.6.7/lib/bundler/fetcher/base.rbnu�[���# frozen_string_literal: true

module Bundler
  class Fetcher
    class Base
      attr_reader :downloader
      attr_reader :display_uri
      attr_reader :remote
      attr_reader :gem_remote_fetcher

      def initialize(downloader, remote, display_uri, gem_remote_fetcher)
        raise "Abstract class" if self.class == Base
        @downloader = downloader
        @remote = remote
        @display_uri = display_uri
        @gem_remote_fetcher = gem_remote_fetcher
      end

      def remote_uri
        @remote.uri
      end

      def fetch_uri
        @fetch_uri ||= if remote_uri.host == "rubygems.org"
          uri = remote_uri.dup
          uri.host = "index.rubygems.org"
          uri
        else
          remote_uri
        end
      end

      def available?
        true
      end

      def api_fetcher?
        false
      end

      private

      def log_specs(&block)
        if Bundler.ui.debug?
          Bundler.ui.debug yield
        else
          Bundler.ui.info ".", false
        end
      end
    end
  end
end
PK)J[�n|~~?share/gems/gems/bundler-2.6.7/lib/bundler/fetcher/downloader.rbnu�[���# frozen_string_literal: true

module Bundler
  class Fetcher
    class Downloader
      attr_reader :connection
      attr_reader :redirect_limit

      def initialize(connection, redirect_limit)
        @connection = connection
        @redirect_limit = redirect_limit
      end

      def fetch(uri, headers = {}, counter = 0)
        raise HTTPError, "Too many redirects" if counter >= redirect_limit

        filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)

        response = request(uri, headers)
        Bundler.ui.debug("HTTP #{response.code} #{response.message} #{filtered_uri}")

        case response
        when Gem::Net::HTTPSuccess, Gem::Net::HTTPNotModified
          response
        when Gem::Net::HTTPRedirection
          new_uri = Gem::URI.parse(response["location"])
          if new_uri.host == uri.host
            new_uri.user = uri.user
            new_uri.password = uri.password
          end
          fetch(new_uri, headers, counter + 1)
        when Gem::Net::HTTPRequestedRangeNotSatisfiable
          new_headers = headers.dup
          new_headers.delete("Range")
          new_headers["Accept-Encoding"] = "gzip"
          fetch(uri, new_headers)
        when Gem::Net::HTTPRequestEntityTooLarge
          raise FallbackError, response.body
        when Gem::Net::HTTPTooManyRequests
          raise TooManyRequestsError, response.body
        when Gem::Net::HTTPUnauthorized
          raise BadAuthenticationError, uri.host if uri.userinfo
          raise AuthenticationRequiredError, uri.host
        when Gem::Net::HTTPForbidden
          raise AuthenticationForbiddenError, uri.host
        when Gem::Net::HTTPNotFound
          raise FallbackError, "Gem::Net::HTTPNotFound: #{filtered_uri}"
        else
          message = "Gem::#{response.class.name.gsub(/\AGem::/, "")}"
          message += ": #{response.body}" unless response.body.empty?
          raise HTTPError, message
        end
      end

      def request(uri, headers)
        validate_uri_scheme!(uri)

        filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)

        Bundler.ui.debug "HTTP GET #{filtered_uri}"
        req = Gem::Net::HTTP::Get.new uri.request_uri, headers
        if uri.user
          user = CGI.unescape(uri.user)
          password = uri.password ? CGI.unescape(uri.password) : nil
          req.basic_auth(user, password)
        end
        connection.request(uri, req)
      rescue OpenSSL::SSL::SSLError
        raise CertificateFailureError.new(uri)
      rescue *HTTP_ERRORS => e
        Bundler.ui.trace e
        if e.is_a?(SocketError) || e.message.to_s.include?("host down:")
          raise NetworkDownError, "Could not reach host #{uri.host}. Check your network " \
            "connection and try again."
        else
          raise HTTPError, "Network error while fetching #{filtered_uri}" \
            " (#{e})"
        end
      end

      private

      def validate_uri_scheme!(uri)
        return if /\Ahttps?\z/.match?(uri.scheme)
        raise InvalidOption,
          "The request uri `#{uri}` has an invalid scheme (`#{uri.scheme}`). " \
          "Did you mean `http` or `https`?"
      end
    end
  end
end
PK)J[���1�	�	?share/gems/gems/bundler-2.6.7/lib/bundler/fetcher/dependency.rbnu�[���# frozen_string_literal: true

require_relative "base"
require "cgi"

module Bundler
  class Fetcher
    class Dependency < Base
      def available?
        @available ||= fetch_uri.scheme != "file" && downloader.fetch(dependency_api_uri)
      rescue NetworkDownError => e
        raise HTTPError, e.message
      rescue AuthenticationRequiredError
        # Fail since we got a 401 from the server.
        raise
      rescue HTTPError
        false
      end

      def api_fetcher?
        true
      end

      def specs(gem_names, full_dependency_list = [], last_spec_list = [])
        query_list = gem_names.uniq - full_dependency_list

        log_specs { "Query List: #{query_list.inspect}" }

        return last_spec_list if query_list.empty?

        spec_list, deps_list = Bundler::Retry.new("dependency api", FAIL_ERRORS).attempts do
          dependency_specs(query_list)
        end

        returned_gems = spec_list.map(&:first).uniq
        specs(deps_list, full_dependency_list + returned_gems, spec_list + last_spec_list)
      rescue MarshalError, HTTPError, GemspecError
        Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
        Bundler.ui.debug "could not fetch from the dependency API, trying the full index"
        nil
      end

      def dependency_specs(gem_names)
        Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(",")}"

        gem_list = unmarshalled_dep_gems(gem_names)
        get_formatted_specs_and_deps(gem_list)
      end

      def unmarshalled_dep_gems(gem_names)
        gem_list = []
        gem_names.each_slice(Source::Rubygems::API_REQUEST_SIZE) do |names|
          marshalled_deps = downloader.fetch(dependency_api_uri(names)).body
          gem_list.concat(Bundler.safe_load_marshal(marshalled_deps))
        end
        gem_list
      end

      def get_formatted_specs_and_deps(gem_list)
        deps_list = []
        spec_list = []

        gem_list.each do |s|
          deps_list.concat(s[:dependencies].map(&:first))
          deps = s[:dependencies].map {|n, d| [n, d.split(", ")] }
          spec_list.push([s[:name], s[:number], s[:platform], deps])
        end
        [spec_list, deps_list]
      end

      def dependency_api_uri(gem_names = [])
        uri = fetch_uri + "api/v1/dependencies"
        uri.query = "gems=#{CGI.escape(gem_names.sort.join(","))}" if gem_names.any?
        uri
      end
    end
  end
end
PK)J[��`�IIGshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/gem_remote_fetcher.rbnu�[���# frozen_string_literal: true

require "rubygems/remote_fetcher"

module Bundler
  class Fetcher
    class GemRemoteFetcher < Gem::RemoteFetcher
      def request(*args)
        super do |req|
          req.delete("User-Agent") if headers["User-Agent"]
          yield req if block_given?
        end
      end
    end
  end
end
PK)J[.d���1share/gems/gems/bundler-2.6.7/lib/bundler/vlad.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2,
  "The Bundler task for Vlad"

# Vlad task for Bundler.
#
# Add "require 'bundler/vlad'" in your Vlad deploy.rb, and
# include the vlad:bundle:install task in your vlad:deploy task.
require_relative "deployment"

include Rake::DSL if defined? Rake::DSL

namespace :vlad do
  Bundler::Deployment.define_task(Rake::RemoteTask, :remote_task, roles: :app)
end
PK)J[�5-�8�89share/gems/gems/bundler-2.6.7/lib/bundler/rubygems_ext.rbnu�[���# frozen_string_literal: true

require "rubygems" unless defined?(Gem)

# We can't let `Gem::Source` be autoloaded in the `Gem::Specification#source`
# redefinition below, so we need to load it upfront. The reason is that if
# Bundler monkeypatches are loaded before RubyGems activates an executable (for
# example, through `ruby -rbundler -S irb`), gem activation might end up calling
# the redefined `Gem::Specification#source` and triggering the `Gem::Source`
# autoload. That would result in requiring "rubygems/source" inside another
# require, which would trigger a monitor error and cause the `autoload` to
# eventually fail. A better solution is probably to completely avoid autoloading
# `Gem::Source` from the redefined `Gem::Specification#source`.
require "rubygems/source"

# Cherry-pick fixes to `Gem.ruby_version` to be useful for modern Bundler
# versions and ignore patchlevels
# (https://github.com/rubygems/rubygems/pull/5472,
# https://github.com/rubygems/rubygems/pull/5486). May be removed once RubyGems
# 3.3.12 support is dropped.
unless Gem.ruby_version.to_s == RUBY_VERSION || RUBY_PATCHLEVEL == -1
  Gem.instance_variable_set(:@ruby_version, Gem::Version.new(RUBY_VERSION))
end

module Gem
  # Can be removed once RubyGems 3.5.11 support is dropped
  unless Gem.respond_to?(:freebsd_platform?)
    def self.freebsd_platform?
      RbConfig::CONFIG["host_os"].to_s.include?("bsd")
    end
  end

  # Can be removed once RubyGems 3.5.18 support is dropped
  unless Gem.respond_to?(:open_file_with_lock)
    class << self
      remove_method :open_file_with_flock if Gem.respond_to?(:open_file_with_flock)

      def open_file_with_flock(path, &block)
        # read-write mode is used rather than read-only in order to support NFS
        mode = IO::RDWR | IO::APPEND | IO::CREAT | IO::BINARY
        mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE)

        File.open(path, mode) do |io|
          begin
            io.flock(File::LOCK_EX)
          rescue Errno::ENOSYS, Errno::ENOTSUP
          end
          yield io
        end
      end

      def open_file_with_lock(path, &block)
        file_lock = "#{path}.lock"
        open_file_with_flock(file_lock, &block)
      ensure
        FileUtils.rm_f file_lock
      end
    end
  end

  require "rubygems/platform"

  class Platform
    JAVA  = Gem::Platform.new("java")
    MSWIN = Gem::Platform.new("mswin32")
    MSWIN64 = Gem::Platform.new("mswin64")
    MINGW = Gem::Platform.new("x86-mingw32")
    X64_MINGW = [Gem::Platform.new("x64-mingw32"),
                 Gem::Platform.new("x64-mingw-ucrt")].freeze
    UNIVERSAL_MINGW = Gem::Platform.new("universal-mingw")
    WINDOWS = [MSWIN, MSWIN64, UNIVERSAL_MINGW].flatten.freeze
    X64_LINUX = Gem::Platform.new("x86_64-linux")
    X64_LINUX_MUSL = Gem::Platform.new("x86_64-linux-musl")

    if X64_LINUX === X64_LINUX_MUSL
      remove_method :===

      def ===(other)
        return nil unless Gem::Platform === other

        # universal-mingw32 matches x64-mingw-ucrt
        return true if (@cpu == "universal" || other.cpu == "universal") &&
                       @os.start_with?("mingw") && other.os.start_with?("mingw")

        # cpu
        ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
        (@cpu == "arm" && other.cpu.start_with?("armv"))) &&

          # os
          @os == other.os &&

          # version
          (
            (@os != "linux" && (@version.nil? || other.version.nil?)) ||
            (@os == "linux" && (normalized_linux_version_ext == other.normalized_linux_version_ext || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
            @version == other.version
          )
      end

      # This is a copy of RubyGems 3.3.23 or higher `normalized_linux_method`.
      # Once only 3.3.23 is supported, we can use the method in RubyGems.
      def normalized_linux_version_ext
        return nil unless @version

        without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
        return nil if without_gnu_nor_abi_modifiers.empty?

        without_gnu_nor_abi_modifiers
      end
    end
  end

  Platform.singleton_class.module_eval do
    unless Platform.singleton_methods.include?(:match_spec?)
      def match_spec?(spec)
        match_gem?(spec.platform, spec.name)
      end

      def match_gem?(platform, gem_name)
        match_platforms?(platform, Gem.platforms)
      end
    end

    match_platforms_defined = Gem::Platform.respond_to?(:match_platforms?, true)

    if !match_platforms_defined || Gem::Platform.send(:match_platforms?, Gem::Platform::X64_LINUX_MUSL, [Gem::Platform::X64_LINUX])

      private

      remove_method :match_platforms? if match_platforms_defined

      def match_platforms?(platform, platforms)
        platforms.any? do |local_platform|
          platform.nil? ||
            local_platform == platform ||
            (local_platform != Gem::Platform::RUBY && platform =~ local_platform)
        end
      end
    end
  end

  require "rubygems/specification"

  # Can be removed once RubyGems 3.5.14 support is dropped
  VALIDATES_FOR_RESOLUTION = Specification.new.respond_to?(:validate_for_resolution).freeze

  # Can be removed once RubyGems 3.3.15 support is dropped
  FLATTENS_REQUIRED_PATHS = Specification.new.respond_to?(:flatten_require_paths).freeze

  class Specification
    # Can be removed once RubyGems 3.5.15 support is dropped
    correct_array_attributes = @@default_value.select {|_k,v| v.is_a?(Array) }.keys
    unless @@array_attributes == correct_array_attributes
      @@array_attributes = correct_array_attributes # rubocop:disable Style/ClassVars
    end

    require_relative "match_metadata"
    require_relative "match_platform"

    include ::Bundler::MatchMetadata
    include ::Bundler::MatchPlatform

    attr_accessor :remote, :relative_loaded_from

    module AllowSettingSource
      attr_writer :source

      def source
        (defined?(@source) && @source) || super
      end
    end

    prepend AllowSettingSource

    alias_method :rg_full_gem_path, :full_gem_path
    alias_method :rg_loaded_from,   :loaded_from

    def full_gem_path
      if source.respond_to?(:root)
        File.expand_path(File.dirname(loaded_from), source.root)
      else
        rg_full_gem_path
      end
    end

    def loaded_from
      if relative_loaded_from
        source.path.join(relative_loaded_from).to_s
      else
        rg_loaded_from
      end
    end

    def load_paths
      full_require_paths
    end

    alias_method :rg_extension_dir, :extension_dir
    def extension_dir
      # following instance variable is already used in original method
      # and that is the reason to prefix it with bundler_ and add rubocop exception
      @bundler_extension_dir ||= if source.respond_to?(:extension_dir_name) # rubocop:disable Naming/MemoizedInstanceVariableName
        unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
        File.expand_path(File.join(extensions_dir, unique_extension_dir))
      else
        rg_extension_dir
      end
    end

    # Can be removed once RubyGems 3.5.21 support is dropped
    remove_method :gem_dir if method_defined?(:gem_dir, false)

    def gem_dir
      full_gem_path
    end

    unless const_defined?(:LATEST_RUBY_WITHOUT_PATCH_VERSIONS)
      LATEST_RUBY_WITHOUT_PATCH_VERSIONS = Gem::Version.new("2.1")

      alias_method :rg_required_ruby_version=, :required_ruby_version=
      def required_ruby_version=(req)
        self.rg_required_ruby_version = req

        @required_ruby_version.requirements.map! do |op, v|
          if v >= LATEST_RUBY_WITHOUT_PATCH_VERSIONS && v.release.segments.size == 4
            [op == "~>" ? "=" : op, Gem::Version.new(v.segments.tap {|s| s.delete_at(3) }.join("."))]
          else
            [op, v]
          end
        end
      end
    end

    def insecurely_materialized?
      false
    end

    def groups
      @groups ||= []
    end

    def git_version
      return unless loaded_from && source.is_a?(Bundler::Source::Git)
      " #{source.revision[0..6]}"
    end

    def to_gemfile(path = nil)
      gemfile = String.new("source 'https://rubygems.org'\n")
      gemfile << dependencies_to_gemfile(nondevelopment_dependencies)
      unless development_dependencies.empty?
        gemfile << "\n"
        gemfile << dependencies_to_gemfile(development_dependencies, :development)
      end
      gemfile
    end

    def nondevelopment_dependencies
      dependencies - development_dependencies
    end

    def installation_missing?
      !default_gem? && !File.directory?(full_gem_path)
    end

    def lock_name
      @lock_name ||= name_tuple.lock_name
    end

    unless VALIDATES_FOR_RESOLUTION
      def validate_for_resolution
        SpecificationPolicy.new(self).validate_for_resolution
      end
    end

    unless FLATTENS_REQUIRED_PATHS
      def flatten_require_paths
        return unless raw_require_paths.first.is_a?(Array)

        warn "#{name} #{version} includes a gemspec with `require_paths` set to an array of arrays. Newer versions of this gem might've already fixed this"
        raw_require_paths.flatten!
      end

      class << self
        module RequirePathFlattener
          def from_yaml(input)
            spec = super(input)
            spec.flatten_require_paths
            spec
          end
        end

        prepend RequirePathFlattener
      end
    end

    private

    def dependencies_to_gemfile(dependencies, group = nil)
      gemfile = String.new
      if dependencies.any?
        gemfile << "group :#{group} do\n" if group
        dependencies.each do |dependency|
          gemfile << "  " if group
          gemfile << %(gem "#{dependency.name}")
          req = dependency.requirements_list.first
          gemfile << %(, "#{req}") if req
          gemfile << "\n"
        end
        gemfile << "end\n" if group
      end
      gemfile
    end
  end

  unless VALIDATES_FOR_RESOLUTION
    class SpecificationPolicy
      def validate_for_resolution
        validate_required!
      end
    end
  end

  module BetterPermissionError
    def data
      super
    rescue Errno::EACCES
      raise Bundler::PermissionError.new(loaded_from, :read)
    end
  end

  require "rubygems/stub_specification"

  class StubSpecification
    prepend BetterPermissionError
  end

  class Dependency
    require_relative "force_platform"

    include ::Bundler::ForcePlatform

    attr_reader :force_ruby_platform

    attr_accessor :source, :groups

    alias_method :eql?, :==

    unless method_defined?(:encode_with, false)
      def encode_with(coder)
        [:@name, :@requirement, :@type, :@prerelease, :@version_requirements].each do |ivar|
          coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
        end
      end
    end

    def to_lock
      out = String.new("  #{name}")
      unless requirement.none?
        reqs = requirement.requirements.map {|o, v| "#{o} #{v}" }.sort.reverse
        out << " (#{reqs.join(", ")})"
      end
      out
    end

    if Gem.rubygems_version < Gem::Version.new("3.5.22")
      module FilterIgnoredSpecs
        def matching_specs(platform_only = false)
          super.reject(&:ignored?)
        end
      end

      prepend FilterIgnoredSpecs
    end
  end

  # On universal Rubies, resolve the "universal" arch to the real CPU arch, without changing the extension directory.
  class BasicSpecification
    if /^universal\.(?<arch>.*?)-/ =~ (CROSS_COMPILING || RUBY_PLATFORM)
      local_platform = Platform.local
      if local_platform.cpu == "universal"
        ORIGINAL_LOCAL_PLATFORM = local_platform.to_s.freeze

        local_platform.cpu = if arch == "arm64e" # arm64e is only permitted for Apple system binaries
          "arm64"
        else
          arch
        end

        def extensions_dir
          @extensions_dir ||=
            Gem.default_ext_dir_for(base_dir) || File.join(base_dir, "extensions", ORIGINAL_LOCAL_PLATFORM, Gem.extension_api_version)
        end
      end
    end

    # Can be removed once RubyGems 3.5.22 support is dropped
    unless new.respond_to?(:ignored?)
      def ignored?
        return @ignored unless @ignored.nil?

        @ignored = missing_extensions?
      end
    end
  end

  require "rubygems/name_tuple"

  class NameTuple
    # Versions of RubyGems before about 3.5.0 don't to_s the platform.
    unless Gem::NameTuple.new("a", Gem::Version.new("1"), Gem::Platform.new("x86_64-linux")).platform.is_a?(String)
      alias_method :initialize_with_platform, :initialize

      def initialize(name, version, platform=Gem::Platform::RUBY)
        if Gem::Platform === platform
          initialize_with_platform(name, version, platform.to_s)
        else
          initialize_with_platform(name, version, platform)
        end
      end
    end

    def lock_name
      if platform == Gem::Platform::RUBY
        "#{name} (#{version})"
      else
        "#{name} (#{version}-#{platform})"
      end
    end
  end

  unless Gem.rubygems_version >= Gem::Version.new("3.5.19")
    class Resolver::ActivationRequest
      remove_method :installed?

      def installed?
        case @spec
        when Gem::Resolver::VendorSpecification then
          true
        else
          this_spec = full_spec

          Gem::Specification.any? do |s|
            s == this_spec && s.base_dir == this_spec.base_dir
          end
        end
      end
    end
  end

  unless Gem.rubygems_version >= Gem::Version.new("3.6.7")
    module UnfreezeCompactIndexParsedResponse
      def parse(line)
        version, platform, dependencies, requirements = super
        [version, platform, dependencies.frozen? ? dependencies.dup : dependencies, requirements.frozen? ? requirements.dup : requirements]
      end
    end

    Resolver::APISet::GemParser.prepend(UnfreezeCompactIndexParsedResponse)
  end

  if Gem.rubygems_version < Gem::Version.new("3.6.0")
    class Package; end
    require "rubygems/package/tar_reader"
    require "rubygems/package/tar_reader/entry"

    module FixFullNameEncoding
      def full_name
        super.force_encoding(Encoding::UTF_8)
      end
    end

    Package::TarReader::Entry.prepend(FixFullNameEncoding)
  end

  require "rubygems/uri"

  # Can be removed once RubyGems 3.3.15 support is dropped
  unless Gem::Uri.respond_to?(:redact)
    class Uri
      def self.redact(uri)
        new(uri).redacted
      end
    end
  end
end
PK)J[�*�UU9share/gems/gems/bundler-2.6.7/lib/bundler/safe_marshal.rbnu�[���# frozen_string_literal: true

module Bundler
  module SafeMarshal
    ALLOWED_CLASSES = [
      Array,
      FalseClass,
      Gem::Specification,
      Gem::Version,
      Hash,
      String,
      Symbol,
      Time,
      TrueClass,
    ].freeze

    ERROR = "Unexpected class %s present in marshaled data. Only %s are allowed."

    PROC = proc do |object|
      object.tap do
        unless ALLOWED_CLASSES.include?(object.class)
          raise TypeError, format(ERROR, object.class, ALLOWED_CLASSES.join(", "))
        end
      end
    end

    def self.proc
      PROC
    end
  end
end
PK)J[��z�[[0share/gems/gems/bundler-2.6.7/lib/bundler/dsl.rbnu�[���# frozen_string_literal: true

require_relative "dependency"
require_relative "ruby_dsl"

module Bundler
  class Dsl
    include RubyDsl

    def self.evaluate(gemfile, lockfile, unlock)
      builder = new
      builder.eval_gemfile(gemfile)
      builder.to_definition(lockfile, unlock)
    end

    VALID_PLATFORMS = Bundler::CurrentRuby::PLATFORM_MAP.keys.freeze

    VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
                    platform platforms source install_if force_ruby_platform].freeze

    GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
    GITLAB_MERGE_REQUEST_URL = %r{\Ahttps://gitlab\.com/([A-Za-z0-9_\-\./]+)/-/merge_requests/(\d+)\z}

    attr_reader :gemspecs, :gemfile
    attr_accessor :dependencies

    def initialize
      @source               = nil
      @sources              = SourceList.new
      @git_sources          = {}
      @dependencies         = []
      @groups               = []
      @install_conditionals = []
      @optional_groups      = []
      @platforms            = []
      @env                  = nil
      @ruby_version         = nil
      @gemspecs             = []
      @gemfile              = nil
      @gemfiles             = []
      add_git_sources
    end

    def eval_gemfile(gemfile, contents = nil)
      with_gemfile(gemfile) do |current_gemfile|
        contents ||= Bundler.read_file(current_gemfile)
        instance_eval(contents, current_gemfile, 1)
      rescue GemfileEvalError => e
        message = "There was an error evaluating `#{File.basename current_gemfile}`: #{e.message}"
        raise DSLError.new(message, current_gemfile, e.backtrace, contents)
      rescue GemfileError, InvalidArgumentError, InvalidOption, DeprecatedError, ScriptError => e
        message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}"
        raise DSLError.new(message, current_gemfile, e.backtrace, contents)
      rescue StandardError => e
        raise unless e.backtrace_locations.first.path == current_gemfile
        message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}"
        raise DSLError.new(message, current_gemfile, e.backtrace, contents)
      end
    end

    def gemspec(opts = nil)
      opts ||= {}
      path              = opts[:path] || "."
      glob              = opts[:glob]
      name              = opts[:name]
      development_group = opts[:development_group] || :development
      expanded_path     = gemfile_root.join(path)

      gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).filter_map {|g| Bundler.load_gemspec(g) }
      gemspecs.reject! {|s| s.name != name } if name
      specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }

      case specs_by_name_and_version.size
      when 1
        specs = specs_by_name_and_version.values.first
        spec = specs.find {|s| s.match_platform(Bundler.local_platform) } || specs.first

        @gemspecs << spec

        path path, "glob" => glob, "name" => spec.name, "gemspec" => spec do
          add_dependency spec.name
        end

        spec.development_dependencies.each do |dep|
          add_dependency dep.name, dep.requirement.as_list, "gemspec_dev_dep" => true, "group" => development_group
        end
      when 0
        raise InvalidOption, "There are no gemspecs at #{expanded_path}"
      else
        raise InvalidOption, "There are multiple gemspecs at #{expanded_path}. " \
          "Please use the :name option to specify which one should be used"
      end
    end

    def gem(name, *args)
      options = args.last.is_a?(Hash) ? args.pop.dup : {}
      version = args || [">= 0"]

      normalize_options(name, version, options)

      add_dependency(name, version, options)
    end

    def source(source, *args, &blk)
      options = args.last.is_a?(Hash) ? args.pop.dup : {}
      options = normalize_hash(options)
      source = normalize_source(source)

      if options.key?("type")
        options["type"] = options["type"].to_s
        unless Plugin.source?(options["type"])
          raise InvalidOption, "No plugin sources available for #{options["type"]}"
        end

        unless block_given?
          raise InvalidOption, "You need to pass a block to #source with :type option"
        end

        source_opts = options.merge("uri" => source)
        with_source(@sources.add_plugin_source(options["type"], source_opts), &blk)
      elsif block_given?
        with_source(@sources.add_rubygems_source("remotes" => source), &blk)
      else
        @sources.add_global_rubygems_remote(source)
      end
    end

    def git_source(name, &block)
      unless block_given?
        raise InvalidOption, "You need to pass a block to #git_source"
      end

      if valid_keys.include?(name.to_s)
        raise InvalidOption, "You cannot use #{name} as a git source. It " \
          "is a reserved key. Reserved keys are: #{valid_keys.join(", ")}"
      end

      @git_sources[name.to_s] = block
    end

    def path(path, options = {}, &blk)
      source_options = normalize_hash(options).merge(
        "path" => Pathname.new(path),
        "root_path" => gemfile_root
      )

      source_options["global"] = true unless block_given?

      source = @sources.add_path_source(source_options)
      with_source(source, &blk)
    end

    def git(uri, options = {}, &blk)
      unless block_given?
        msg = "You can no longer specify a git source by itself. Instead, \n" \
              "either use the :git option on a gem, or specify the gems that \n" \
              "bundler should find in the git source by passing a block to \n" \
              "the git method, like: \n\n" \
              "  git 'git://github.com/rails/rails.git' do\n" \
              "    gem 'rails'\n" \
              "  end"
        raise DeprecatedError, msg
      end

      with_source(@sources.add_git_source(normalize_hash(options).merge("uri" => uri)), &blk)
    end

    def github(repo, options = {})
      raise InvalidArgumentError, "GitHub sources require a block" unless block_given?
      github_uri  = @git_sources["github"].call(repo)
      git_options = normalize_hash(options).merge("uri" => github_uri)
      git_source  = @sources.add_git_source(git_options)
      with_source(git_source) { yield }
    end

    def to_definition(lockfile, unlock)
      check_primary_source_safety
      Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups, @gemfiles)
    end

    def group(*args, &blk)
      options = args.last.is_a?(Hash) ? args.pop.dup : {}
      normalize_group_options(options, args)

      @groups.concat args

      if options["optional"]
        optional_groups = args - @optional_groups
        @optional_groups.concat optional_groups
      end

      yield
    ensure
      args.each { @groups.pop }
    end

    def install_if(*args)
      @install_conditionals.concat args
      yield
    ensure
      args.each { @install_conditionals.pop }
    end

    def platforms(*platforms)
      @platforms.concat platforms
      yield
    ensure
      platforms.each { @platforms.pop }
    end
    alias_method :platform, :platforms

    def env(name)
      old = @env
      @env = name
      yield
    ensure
      @env = old
    end

    def plugin(*args)
      # Pass on
    end

    def method_missing(name, *args)
      raise GemfileError, "Undefined local variable or method `#{name}' for Gemfile"
    end

    def check_primary_source_safety
      check_path_source_safety
      check_rubygems_source_safety
    end

    private

    def add_dependency(name, version = nil, options = {})
      options["gemfile"] = @gemfile
      options["source"] ||= @source
      options["env"] ||= @env

      dep = Dependency.new(name, version, options)

      # if there's already a dependency with this name we try to prefer one
      if current = @dependencies.find {|d| d.name == dep.name }
        if current.requirement != dep.requirement
          current_requirement_open = current.requirements_list.include?(">= 0")

          gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
          if gemspec_dep
            gemfile_dep = [dep, current].find(&:gemfile_dep?)

            if gemfile_dep && !current_requirement_open
              Bundler.ui.warn "A gemspec development dependency (#{gemspec_dep.name}, #{gemspec_dep.requirement}) is being overridden by a Gemfile dependency (#{gemfile_dep.name}, #{gemfile_dep.requirement}).\n" \
                              "This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
            elsif gemfile_dep.nil?
              require_relative "vendor/pub_grub/lib/pub_grub/version_range"
              require_relative "vendor/pub_grub/lib/pub_grub/version_constraint"
              require_relative "vendor/pub_grub/lib/pub_grub/version_union"
              require_relative "vendor/pub_grub/lib/pub_grub/rubygems"

              current_gemspec_range = PubGrub::RubyGems.requirement_to_range(current.requirement)
              next_gemspec_range = PubGrub::RubyGems.requirement_to_range(dep.requirement)

              if current_gemspec_range.intersects?(next_gemspec_range)
                dep = Dependency.new(name, current.requirement.as_list + dep.requirement.as_list, options)
              else
                raise GemfileError, "Two gemspec development dependencies have conflicting requirements on the same gem: #{dep} and #{current}"
              end
            end
          else
            update_prompt = ""

            if File.basename(@gemfile) == Injector::INJECTED_GEMS
              if dep.requirements_list.include?(">= 0") && !current_requirement_open
                update_prompt = ". Gem already added"
              else
                update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"

                update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
              end
            end

            raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
                           "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
                           "#{update_prompt}"
          end
        end

        unless current.gemspec_dev_dep? && dep.gemspec_dev_dep?
          # Always prefer the dependency from the Gemfile
          if current.gemspec_dev_dep?
            @dependencies.delete(current)
          elsif dep.gemspec_dev_dep?
            return
          elsif current.source != dep.source
            raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
                            "You specified that #{dep.name} (#{dep.requirement}) should come from " \
                            "#{current.source || "an unspecified source"} and #{dep.source}\n"
          else
            Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
                            "You should probably keep only one of them.\n" \
                            "Remove any duplicate entries and specify the gem only once.\n" \
                            "While it's not a problem now, it could cause errors if you change the version of one of them later."
          end
        end
      end

      @dependencies << dep
    end

    def with_gemfile(gemfile)
      expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
      original_gemfile = @gemfile
      @gemfile = expanded_gemfile_path
      @gemfiles << expanded_gemfile_path
      yield @gemfile.to_s
    ensure
      @gemfile = original_gemfile
    end

    def add_git_sources
      git_source(:github) do |repo_name|
        if repo_name =~ GITHUB_PULL_REQUEST_URL
          {
            "git" => "https://github.com/#{$1}.git",
            "branch" => nil,
            "ref" => "refs/pull/#{$2}/head",
            "tag" => nil,
          }
        else
          repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
          "https://github.com/#{repo_name}.git"
        end
      end

      git_source(:gist) do |repo_name|
        "https://gist.github.com/#{repo_name}.git"
      end

      git_source(:bitbucket) do |repo_name|
        user_name, repo_name = repo_name.split("/")
        repo_name ||= user_name
        "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
      end

      git_source(:gitlab) do |repo_name|
        if repo_name =~ GITLAB_MERGE_REQUEST_URL
          {
            "git" => "https://gitlab.com/#{$1}.git",
            "branch" => nil,
            "ref" => "refs/merge-requests/#{$2}/head",
            "tag" => nil,
          }
        else
          repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
          "https://gitlab.com/#{repo_name}.git"
        end
      end
    end

    def with_source(source)
      old_source = @source
      if block_given?
        @source = source
        yield
      end
      source
    ensure
      @source = old_source
    end

    def normalize_hash(opts)
      opts.keys.each do |k|
        opts[k.to_s] = opts.delete(k) unless k.is_a?(String)
      end
      opts
    end

    def valid_keys
      @valid_keys ||= VALID_KEYS
    end

    def normalize_options(name, version, opts)
      if name.is_a?(Symbol)
        raise GemfileError, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead)
      end
      if /\s/.match?(name)
        raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
      end
      raise GemfileError, %(an empty gem name is not valid) if name.empty?

      normalize_hash(opts)

      git_names = @git_sources.keys.map(&:to_s)
      validate_keys("gem '#{name}'", opts, valid_keys + git_names)

      groups = @groups.dup
      opts["group"] = opts.delete("groups") || opts["group"]
      groups.concat Array(opts.delete("group"))
      groups = [:default] if groups.empty?

      install_if = @install_conditionals.dup
      install_if.concat Array(opts.delete("install_if"))
      install_if = install_if.reduce(true) do |memo, val|
        memo && (val.respond_to?(:call) ? val.call : val)
      end

      platforms = @platforms.dup
      opts["platforms"] = opts["platform"] || opts["platforms"]
      platforms.concat Array(opts.delete("platforms"))
      platforms.map!(&:to_sym)
      platforms.each do |p|
        next if VALID_PLATFORMS.include?(p)
        raise GemfileError, "`#{p}` is not a valid platform. The available options are: #{VALID_PLATFORMS.inspect}"
      end

      # Save sources passed in a key
      if opts.key?("source")
        source = normalize_source(opts["source"])
        opts["source"] = @sources.add_rubygems_source("remotes" => source)
      end

      git_name = (git_names & opts.keys).last
      if @git_sources[git_name]
        git_opts = @git_sources[git_name].call(opts[git_name])
        git_opts = { "git" => git_opts } if git_opts.is_a?(String)
        opts.merge!(git_opts) do |key, _gemfile_value, _git_source_value|
          raise GemfileError, %(The :#{key} option can't be used with `#{git_name}: #{opts[git_name].inspect}`)
        end
      end

      %w[git path].each do |type|
        next unless param = opts[type]
        if version.first && version.first =~ /^\s*=?\s*(\d[^\s]*)\s*$/
          options = opts.merge("name" => name, "version" => $1)
        else
          options = opts.dup
        end
        source = send(type, param, options) {}
        opts["source"] = source
      end

      opts["platforms"]      = platforms.dup
      opts["group"]          = groups
      opts["should_include"] = install_if
    end

    def normalize_group_options(opts, groups)
      normalize_hash(opts)

      groups = groups.map {|group| ":#{group}" }.join(", ")
      validate_keys("group #{groups}", opts, %w[optional])

      opts["optional"] ||= false
    end

    def validate_keys(command, opts, valid_keys)
      if opts["branch"] && !(opts["git"] || opts["github"] || (opts.keys & @git_sources.keys.map(&:to_s)).any?)
        raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
      end

      invalid_keys = opts.keys - valid_keys
      return true unless invalid_keys.any?

      message = String.new
      message << "You passed #{invalid_keys.map {|k| ":" + k }.join(", ")} "
      message << if invalid_keys.size > 1
        "as options for #{command}, but they are invalid."
      else
        "as an option for #{command}, but it is invalid."
      end

      message << " Valid options are: #{valid_keys.join(", ")}."
      message << " You may be able to resolve this by upgrading Bundler to the newest version."
      raise InvalidOption, message
    end

    def normalize_source(source)
      case source
      when :gemcutter, :rubygems, :rubyforge
        message =
          "The source :#{source} is deprecated because HTTP requests are insecure.\n" \
          "Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not."
        removed_message =
          "The source :#{source} is disallowed because HTTP requests are insecure.\n" \
          "Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not."
        Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
        "http://rubygems.org"
      when String
        source
      else
        raise GemfileError, "Unknown source '#{source}'"
      end
    end

    def check_path_source_safety
      return if @sources.global_path_source.nil?

      msg = "You can no longer specify a path source by itself. Instead, \n" \
              "either use the :path option on a gem, or specify the gems that \n" \
              "bundler should find in the path source by passing a block to \n" \
              "the path method, like: \n\n" \
              "    path 'dir/containing/rails' do\n" \
              "      gem 'rails'\n" \
              "    end\n\n"

      SharedHelpers.major_deprecation(2, msg.strip)
    end

    def check_rubygems_source_safety
      multiple_global_source_warning if @sources.aggregate_global_source?
    end

    def multiple_global_source_warning
      if Bundler.feature_flag.bundler_3_mode?
        msg = "This Gemfile contains multiple global sources. " \
          "Each source after the first must include a block to indicate which gems " \
          "should come from that source"
        raise GemfileEvalError, msg
      else
        message =
          "Your Gemfile contains multiple global sources. " \
          "Using `source` more than once without a block is a security risk, and " \
          "may result in installing unexpected gems. To resolve this warning, use " \
          "a block to indicate which gems should come from the secondary source."
        removed_message =
          "Your Gemfile contains multiple global sources. " \
          "Using `source` more than once without a block is a security risk, and " \
          "may result in installing unexpected gems. To resolve this error, use " \
          "a block to indicate which gems should come from the secondary source."
        Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
      end
    end

    class DSLError < GemfileError
      # @return [String] the description that should be presented to the user.
      #
      attr_reader :description

      # @return [String] the path of the dsl file that raised the exception.
      #
      attr_reader :dsl_path

      # @return [Exception] the backtrace of the exception raised by the
      #         evaluation of the dsl file.
      #
      attr_reader :backtrace

      # @param [Exception] backtrace @see backtrace
      # @param [String]    dsl_path  @see dsl_path
      #
      def initialize(description, dsl_path, backtrace, contents = nil)
        @status_code = $!.respond_to?(:status_code) && $!.status_code

        @description = description
        @dsl_path    = dsl_path
        @backtrace   = backtrace
        @contents    = contents
      end

      def status_code
        @status_code || super
      end

      # @return [String] the contents of the DSL that cause the exception to
      #         be raised.
      #
      def contents
        @contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
      end

      # The message of the exception reports the content of podspec for the
      # line that generated the original exception.
      #
      # @example Output
      #
      #   Invalid podspec at `RestKit.podspec` - undefined method
      #   `exclude_header_search_paths=' for #<Pod::Specification for
      #   `RestKit/Network (0.9.3)`>
      #
      #       from spec-repos/master/RestKit/0.9.3/RestKit.podspec:36
      #       -------------------------------------------
      #           # because it would break: #import <CoreData/CoreData.h>
      #    >      ns.exclude_header_search_paths = 'Code/RestKit.h'
      #         end
      #       -------------------------------------------
      #
      # @return [String] the message of the exception.
      #
      def to_s
        @to_s ||= begin
          trace_line, description = parse_line_number_from_description

          m = String.new("\n[!] ")
          m << description
          m << ". Bundler cannot continue.\n"

          return m unless backtrace && dsl_path && contents

          trace_line = backtrace.find {|l| l.include?(dsl_path) } || trace_line
          return m unless trace_line
          line_number = trace_line.split(":")[1].to_i - 1
          return m unless line_number

          lines      = contents.lines.to_a
          indent     = " #  "
          indicator  = indent.tr("#", ">")
          first_line = line_number.zero?
          last_line  = (line_number == (lines.count - 1))

          m << "\n"
          m << "#{indent}from #{trace_line.gsub(/:in.*$/, "")}\n"
          m << "#{indent}-------------------------------------------\n"
          m << "#{indent}#{lines[line_number - 1]}" unless first_line
          m << "#{indicator}#{lines[line_number]}"
          m << "#{indent}#{lines[line_number + 1]}" unless last_line
          m << "\n" unless m.end_with?("\n")
          m << "#{indent}-------------------------------------------\n"
        end
      end

      private

      def parse_line_number_from_description
        description = self.description
        if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path}):\d+)/
          trace_line = Regexp.last_match[1]
          description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
        end
        [trace_line, description]
      end
    end

    def gemfile_root
      @gemfile ||= Bundler.default_gemfile
      @gemfile.dirname
    end
  end
end
PK)J[�q�ʇ���0share/gems/gems/bundler-2.6.7/lib/bundler/cli.rbnu�[���# frozen_string_literal: true

require_relative "vendored_thor"

module Bundler
  class CLI < Thor
    require_relative "cli/common"
    require_relative "cli/install"

    package_name "Bundler"

    AUTO_INSTALL_CMDS = %w[show binstubs outdated exec open console licenses clean].freeze
    PARSEABLE_COMMANDS = %w[check config help exec platform show version].freeze
    EXTENSIONS = ["c", "rust"].freeze

    COMMAND_ALIASES = {
      "check" => "c",
      "install" => "i",
      "plugin" => "",
      "list" => "ls",
      "exec" => ["e", "ex", "exe"],
      "cache" => ["package", "pack"],
      "version" => ["-v", "--version"],
    }.freeze

    def self.start(*)
      check_deprecated_ext_option(ARGV) if ARGV.include?("--ext")

      super
    ensure
      Bundler::SharedHelpers.print_major_deprecations!
    end

    def self.dispatch(*)
      super do |i|
        i.send(:print_command)
        i.send(:warn_on_outdated_bundler)
      end
    end

    def self.all_aliases
      @all_aliases ||= begin
                         command_aliases = {}

                         COMMAND_ALIASES.each do |name, aliases|
                           Array(aliases).each do |one_alias|
                             command_aliases[one_alias] = name
                           end
                         end

                         command_aliases
                       end
    end

    def self.aliases_for(command_name)
      COMMAND_ALIASES.select {|k, _| k == command_name }.invert
    end

    def initialize(*args)
      super

      custom_gemfile = options[:gemfile] || Bundler.settings[:gemfile]
      if custom_gemfile && !custom_gemfile.empty?
        Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", File.expand_path(custom_gemfile)
        Bundler.reset_settings_and_root!
      end

      Bundler.auto_switch

      Bundler.settings.set_command_option_if_given :retry, options[:retry]

      current_cmd = args.last[:current_command].name
      Bundler.auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
    rescue UnknownArgumentError => e
      raise InvalidOption, e.message
    ensure
      self.options ||= {}
      unprinted_warnings = Bundler.ui.unprinted_warnings
      Bundler.ui = UI::Shell.new(options)
      Bundler.ui.level = "debug" if options["verbose"]
      unprinted_warnings.each {|w| Bundler.ui.warn(w) }
    end

    check_unknown_options!(except: [:config, :exec])
    stop_on_unknown_option! :exec

    desc "cli_help", "Prints a summary of bundler commands", hide: true
    def cli_help
      version
      Bundler.ui.info "\n"

      primary_commands = ["install", "update", "cache", "exec", "config", "help"]

      list = self.class.printable_commands(true)
      by_name = list.group_by {|name, _message| name.match(/^bundle (\w+)/)[1] }
      utilities = by_name.keys.sort - primary_commands
      primary_commands.map! {|name| (by_name[name] || raise("no primary command #{name}")).first }
      utilities.map! {|name| by_name[name].first }

      shell.say "Bundler commands:\n\n"

      shell.say "  Primary commands:\n"
      shell.print_table(primary_commands, indent: 4, truncate: true)
      shell.say
      shell.say "  Utilities:\n"
      shell.print_table(utilities, indent: 4, truncate: true)
      shell.say
      self.class.send(:class_options_help, shell)
    end
    default_task(Bundler.feature_flag.default_cli_command)

    class_option "no-color", type: :boolean, desc: "Disable colorization in output"
    class_option "retry", type: :numeric, aliases: "-r", banner: "NUM",
                          desc: "Specify the number of times you wish to attempt network commands"
    class_option "verbose", type: :boolean, desc: "Enable verbose output mode", aliases: "-V"

    def help(cli = nil)
      cli = self.class.all_aliases[cli] if self.class.all_aliases[cli]

      case cli
      when "gemfile" then command = "gemfile"
      when nil       then command = "bundle"
      else command = "bundle-#{cli}"
      end

      man_path = File.expand_path("man", __dir__)
      man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f|
        [File.basename(f, ".*"), f]
      end]

      if man_pages.include?(command)
        man_page = man_pages[command]
        if Bundler.which("man") && !man_path.match?(%r{^file:/.+!/META-INF/jruby.home/.+})
          Kernel.exec("man", man_page)
        else
          puts File.read("#{man_path}/#{File.basename(man_page)}.ronn")
        end
      elsif command_path = Bundler.which("bundler-#{cli}")
        Kernel.exec(command_path, "--help")
      else
        super
      end
    end

    def self.handle_no_command_error(command, has_namespace = $thor_runner)
      if Bundler.feature_flag.plugins? && Bundler::Plugin.command?(command)
        return Bundler::Plugin.exec_command(command, ARGV[1..-1])
      end

      return super unless command_path = Bundler.which("bundler-#{command}")

      Kernel.exec(command_path, *ARGV[1..-1])
    end

    desc "init [OPTIONS]", "Generates a Gemfile into the current working directory"
    long_desc <<-D
      Init generates a default Gemfile in the current working directory. When adding a
      Gemfile to a gem with a gemspec, the --gemspec option will automatically add each
      dependency listed in the gemspec file to the newly created Gemfile.
    D
    method_option "gemspec", type: :string, banner: "Use the specified .gemspec to create the Gemfile"
    method_option "gemfile", type: :string, banner: "Use the specified name for the gemfile instead of 'Gemfile'"
    def init
      require_relative "cli/init"
      Init.new(options.dup).run
    end

    desc "check [OPTIONS]", "Checks if the dependencies listed in Gemfile are satisfied by currently installed gems"
    long_desc <<-D
      Check searches the local machine for each of the gems requested in the Gemfile. If
      all gems are found, Bundler prints a success message and exits with a status of 0.
      If not, the first missing gem is listed and Bundler exits status 1.
    D
    method_option "dry-run", type: :boolean, default: false, banner: "Lock the Gemfile"
    method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
    method_option "path", type: :string, banner: "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
    def check
      remembered_flag_deprecation("path")

      require_relative "cli/check"
      Check.new(options).run
    end

    map aliases_for("check")

    desc "remove [GEM [GEM ...]]", "Removes gems from the Gemfile"
    long_desc <<-D
      Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid. If the gem is not found, Bundler prints a error message and if gem could not be removed due to any reason Bundler will display a warning.
    D
    method_option "install", type: :boolean, banner: "Runs 'bundle install' after removing the gems from the Gemfile"
    def remove(*gems)
      if ARGV.include?("--install")
        message = "The `--install` flag has been deprecated. `bundle install` is triggered by default."
        removed_message = "The `--install` flag has been removed. `bundle install` is triggered by default."
        SharedHelpers.major_deprecation(2, message, removed_message: removed_message)
      end

      require_relative "cli/remove"
      Remove.new(gems, options).run
    end

    desc "install [OPTIONS]", "Install the current environment to the system"
    long_desc <<-D
      Install will install all of the gems in the current bundle, making them available
      for use. In a freshly checked out repository, this command will give you the same
      gem versions as the last person who updated the Gemfile and ran `bundle update`.

      Passing [DIR] to install (e.g. vendor) will cause the unpacked gems to be installed
      into the [DIR] directory rather than into system gems.

      If the bundle has already been installed, bundler will tell you so and then exit.
    D
    method_option "binstubs", type: :string, lazy_default: "bin", banner: "Generate bin stubs for bundled gems to ./bin"
    method_option "clean", type: :boolean, banner: "Run bundle clean automatically after install"
    method_option "deployment", type: :boolean, banner: "Install using defaults tuned for deployment environments"
    method_option "frozen", type: :boolean, banner: "Do not allow the Gemfile.lock to be updated after this install"
    method_option "full-index", type: :boolean, banner: "Fall back to using the single-file index of all gems"
    method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
    method_option "jobs", aliases: "-j", type: :numeric, banner: "Specify the number of jobs to run in parallel"
    method_option "local", type: :boolean, banner: "Do not attempt to fetch gems remotely and use the gem cache instead"
    method_option "prefer-local", type: :boolean, banner: "Only attempt to fetch gems remotely if not present locally, even if newer versions are available remotely"
    method_option "no-cache", type: :boolean, banner: "Don't update the existing gem cache."
    method_option "redownload", type: :boolean, aliases: "--force", banner: "Force downloading every gem."
    method_option "no-prune", type: :boolean, banner: "Don't remove stale gems from the cache."
    method_option "path", type: :string, banner: "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
    method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
    method_option "shebang", type: :string, banner: "Specify a different shebang executable name than the default (usually 'ruby')"
    method_option "standalone", type: :array, lazy_default: [], banner: "Make a bundle that can work without the Bundler runtime"
    method_option "system", type: :boolean, banner: "Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application"
    method_option "trust-policy", alias: "P", type: :string, banner: "Gem trust policy (like gem install -P). Must be one of #{Bundler.rubygems.security_policy_keys.join("|")}"
    method_option "target-rbconfig", type: :string, banner: "Path to rbconfig.rb for the deployment target platform"
    method_option "without", type: :array, banner: "Exclude gems that are part of the specified named group."
    method_option "with", type: :array, banner: "Include gems that are part of the specified named group."
    def install
      SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")

      %w[clean deployment frozen no-prune path shebang without with].each do |option|
        remembered_flag_deprecation(option)
      end

      print_remembered_flag_deprecation("--system", "path.system", "true") if ARGV.include?("--system")

      remembered_negative_flag_deprecation("no-deployment")

      require_relative "cli/install"
      Bundler.settings.temporary(no_install: false) do
        Install.new(options.dup).run
      end
    end

    map aliases_for("install")

    desc "update [OPTIONS]", "Update the current environment"
    long_desc <<-D
      Update will install the newest versions of the gems listed in the Gemfile. Use
      update when you have changed the Gemfile, or if you want to get the newest
      possible versions of the gems in the bundle.
    D
    method_option "full-index", type: :boolean, banner: "Fall back to using the single-file index of all gems"
    method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
    method_option "group", aliases: "-g", type: :array, banner: "Update a specific group"
    method_option "jobs", aliases: "-j", type: :numeric, banner: "Specify the number of jobs to run in parallel"
    method_option "local", type: :boolean, banner: "Do not attempt to fetch gems remotely and use the gem cache instead"
    method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
    method_option "source", type: :array, banner: "Update a specific source (and all gems associated with it)"
    method_option "redownload", type: :boolean, aliases: "--force", banner: "Force downloading every gem."
    method_option "ruby", type: :boolean, banner: "Update ruby specified in Gemfile.lock"
    method_option "bundler", type: :string, lazy_default: "> 0.a", banner: "Update the locked version of bundler"
    method_option "patch", type: :boolean, banner: "Prefer updating only to next patch version"
    method_option "minor", type: :boolean, banner: "Prefer updating only to next minor version"
    method_option "major", type: :boolean, banner: "Prefer updating to next major version (default)"
    method_option "pre", type: :boolean, banner: "Always choose the highest allowed version when updating gems, regardless of prerelease status"
    method_option "strict", type: :boolean, banner: "Do not allow any gem to be updated past latest --patch | --minor | --major"
    method_option "conservative", type: :boolean, banner: "Use bundle install conservative update behavior and do not allow shared dependencies to be updated."
    method_option "all", type: :boolean, banner: "Update everything."
    def update(*gems)
      SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
      require_relative "cli/update"
      Bundler.settings.temporary(no_install: false) do
        Update.new(options, gems).run
      end
    end

    desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
    long_desc <<-D
      Show lists the names and versions of all gems that are required by your Gemfile.
      Calling show with [GEM] will list the exact location of that gem on your machine.
    D
    method_option "paths", type: :boolean, banner: "List the paths of all gems that are required by your Gemfile."
    method_option "outdated", type: :boolean, banner: "Show verbose output including whether gems are outdated."
    def show(gem_name = nil)
      if ARGV.include?("--outdated")
        message = "the `--outdated` flag to `bundle show` was undocumented and will be removed without replacement"
        removed_message = "the `--outdated` flag to `bundle show` was undocumented and has been removed without replacement"
        SharedHelpers.major_deprecation(2, message, removed_message: removed_message)
      end
      require_relative "cli/show"
      Show.new(options, gem_name).run
    end

    desc "list", "List all gems in the bundle"
    method_option "name-only", type: :boolean, banner: "print only the gem names"
    method_option "only-group", type: :array, default: [], banner: "print gems from a given set of groups"
    method_option "without-group", type: :array, default: [], banner: "print all gems except from a given set of groups"
    method_option "paths", type: :boolean, banner: "print the path to each gem in the bundle"
    def list
      require_relative "cli/list"
      List.new(options).run
    end

    map aliases_for("list")

    desc "info GEM [OPTIONS]", "Show information for the given gem"
    method_option "path", type: :boolean, banner: "Print full path to gem"
    method_option "version", type: :boolean, banner: "Print gem version"
    def info(gem_name)
      require_relative "cli/info"
      Info.new(options, gem_name).run
    end

    desc "binstubs GEM [OPTIONS]", "Install the binstubs of the listed gem"
    long_desc <<-D
      Generate binstubs for executables in [GEM]. Binstubs are put into bin,
      or the --binstubs directory if one has been set. Calling binstubs with [GEM [GEM]]
      will create binstubs for all given gems.
    D
    method_option "force", type: :boolean, default: false, banner: "Overwrite existing binstubs if they exist"
    method_option "path", type: :string, lazy_default: "bin", banner: "Binstub destination directory (default bin)"
    method_option "shebang", type: :string, banner: "Specify a different shebang executable name than the default (usually 'ruby')"
    method_option "standalone", type: :boolean, banner: "Make binstubs that can work without the Bundler runtime"
    method_option "all", type: :boolean, banner: "Install binstubs for all gems"
    method_option "all-platforms", type: :boolean, default: false, banner: "Install binstubs for all platforms"
    def binstubs(*gems)
      require_relative "cli/binstubs"
      Binstubs.new(options, gems).run
    end

    desc "add GEM VERSION", "Add gem to Gemfile and run bundle install"
    long_desc <<-D
      Adds the specified gem to Gemfile (if valid) and run 'bundle install' in one step.
    D
    method_option "version", aliases: "-v", type: :string
    method_option "group", aliases: "-g", type: :string
    method_option "source", aliases: "-s", type: :string
    method_option "require", aliases: "-r", type: :string, banner: "Adds require path to gem. Provide false, or a path as a string."
    method_option "path", type: :string
    method_option "git", type: :string
    method_option "github", type: :string
    method_option "branch", type: :string
    method_option "ref", type: :string
    method_option "glob", type: :string, banner: "The location of a dependency's .gemspec, expanded within Ruby (single quotes recommended)"
    method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
    method_option "skip-install", type: :boolean, banner: "Adds gem to the Gemfile but does not install it"
    method_option "optimistic", type: :boolean, banner: "Adds optimistic declaration of version to gem"
    method_option "strict", type: :boolean, banner: "Adds strict declaration of version to gem"
    def add(*gems)
      require_relative "cli/add"
      Add.new(options.dup, gems).run
    end

    desc "outdated GEM [OPTIONS]", "List installed gems with newer versions available"
    long_desc <<-D
      Outdated lists the names and versions of gems that have a newer version available
      in the given source. Calling outdated with [GEM [GEM]] will only check for newer
      versions of the given gems. Prerelease gems are ignored by default. If your gems
      are up to date, Bundler will exit with a status of 0. Otherwise, it will exit 1.

      For more information on patch level options (--major, --minor, --patch,
      --strict) see documentation on the same options on the update command.
    D
    method_option "group", type: :string, banner: "List gems from a specific group"
    method_option "groups", type: :boolean, banner: "List gems organized by groups"
    method_option "local", type: :boolean, banner: "Do not attempt to fetch gems remotely and use the gem cache instead"
    method_option "pre", type: :boolean, banner: "Check for newer pre-release gems"
    method_option "source", type: :array, banner: "Check against a specific source"
    method_option "filter-strict", type: :boolean, aliases: "--strict", banner: "Only list newer versions allowed by your Gemfile requirements"
    method_option "update-strict", type: :boolean, banner: "Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
    method_option "minor", type: :boolean, banner: "Prefer updating only to next minor version"
    method_option "major", type: :boolean, banner: "Prefer updating to next major version (default)"
    method_option "patch", type: :boolean, banner: "Prefer updating only to next patch version"
    method_option "filter-major", type: :boolean, banner: "Only list major newer versions"
    method_option "filter-minor", type: :boolean, banner: "Only list minor newer versions"
    method_option "filter-patch", type: :boolean, banner: "Only list patch newer versions"
    method_option "parseable", aliases: "--porcelain", type: :boolean, banner: "Use minimal formatting for more parseable output"
    method_option "only-explicit", type: :boolean, banner: "Only list gems specified in your Gemfile, not their dependencies"
    def outdated(*gems)
      require_relative "cli/outdated"
      Outdated.new(options, gems).run
    end

    desc "fund [OPTIONS]", "Lists information about gems seeking funding assistance"
    method_option "group", aliases: "-g", type: :array, banner: "Fetch funding information for a specific group"
    def fund
      require_relative "cli/fund"
      Fund.new(options).run
    end

    desc "cache [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
    method_option "all", type: :boolean, default: Bundler.feature_flag.cache_all?, banner: "Include all sources (including path and git)."
    method_option "all-platforms", type: :boolean, banner: "Include gems for all platforms present in the lockfile, not only the current one"
    method_option "cache-path", type: :string, banner: "Specify a different cache path than the default (vendor/cache)."
    method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
    method_option "no-install", type: :boolean, banner: "Don't install the gems, only update the cache."
    method_option "no-prune", type: :boolean, banner: "Don't remove stale gems from the cache."
    method_option "path", type: :string, banner: "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
    method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
    method_option "frozen", type: :boolean, banner: "Do not allow the Gemfile.lock to be updated after this bundle cache operation's install"
    long_desc <<-D
      The cache command will copy the .gem files for every gem in the bundle into the
      directory ./vendor/cache. If you then check that directory into your source
      control repository, others who check out your source will be able to install the
      bundle without having to download any additional gems.
    D
    def cache
      print_remembered_flag_deprecation("--all", "cache_all", "true") if ARGV.include?("--all")

      if ARGV.include?("--path")
        message =
          "The `--path` flag is deprecated because its semantics are unclear. " \
          "Use `bundle config cache_path` to configure the path of your cache of gems, " \
          "and `bundle config path` to configure the path where your gems are installed, " \
          "and stop using this flag"
        removed_message =
          "The `--path` flag has been removed because its semantics were unclear. " \
          "Use `bundle config cache_path` to configure the path of your cache of gems, " \
          "and `bundle config path` to configure the path where your gems are installed."
        SharedHelpers.major_deprecation 2, message, removed_message: removed_message
      end

      require_relative "cli/cache"
      Cache.new(options).run
    end

    map aliases_for("cache")

    desc "exec [OPTIONS]", "Run the command in context of the bundle"
    method_option :keep_file_descriptors, type: :boolean, default: true, banner: "Passes all file descriptors to the new processes. Default is true, and setting it to false is deprecated"
    method_option :gemfile, type: :string, required: false, banner: "Use the specified gemfile instead of Gemfile"
    long_desc <<-D
      Exec runs a command, providing it access to the gems in the bundle. While using
      bundle exec you can require and call the bundled gems as if they were installed
      into the system wide RubyGems repository.
    D
    def exec(*args)
      if ARGV.include?("--no-keep-file-descriptors")
        message = "The `--no-keep-file-descriptors` has been deprecated. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to"
        removed_message = "The `--no-keep-file-descriptors` has been removed. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to"
        SharedHelpers.major_deprecation(2, message, removed_message: removed_message)
      end

      require_relative "cli/exec"
      Exec.new(options, args).run
    end

    map aliases_for("exec")

    desc "config NAME [VALUE]", "Retrieve or set a configuration value"
    long_desc <<-D
      Retrieves or sets a configuration value. If only one parameter is provided, retrieve the value. If two parameters are provided, replace the
      existing value with the newly provided one.

      By default, setting a configuration value sets it for all projects
      on the machine.

      If a global setting is superseded by local configuration, this command
      will show the current value, as well as any superseded values and
      where they were specified.
    D
    require_relative "cli/config"
    subcommand "config", Config

    desc "open GEM", "Opens the source directory of the given bundled gem"
    method_option "path", type: :string, lazy_default: "", banner: "Open relative path of the gem source."
    def open(name)
      require_relative "cli/open"
      Open.new(options, name).run
    end

    desc "console [GROUP]", "Opens an IRB session with the bundle pre-loaded"
    def console(group = nil)
      require_relative "cli/console"
      Console.new(options, group).run
    end

    desc "version", "Prints Bundler version information"
    def version
      cli_help = current_command.name == "cli_help"
      if cli_help || ARGV.include?("version")
        build_info = " (#{BuildMetadata.built_at} commit #{BuildMetadata.git_commit_sha})"
      end

      if !cli_help && Bundler.feature_flag.print_only_version_number?
        Bundler.ui.info "#{Bundler::VERSION}#{build_info}"
      else
        Bundler.ui.info "Bundler version #{Bundler::VERSION}#{build_info}"
      end
    end

    map aliases_for("version")

    desc "licenses", "Prints the license of all gems in the bundle"
    def licenses
      Bundler.load.specs.sort_by {|s| s.license.to_s }.reverse_each do |s|
        gem_name = s.name
        license  = s.license || s.licenses

        if license.empty?
          Bundler.ui.warn "#{gem_name}: Unknown"
        else
          Bundler.ui.info "#{gem_name}: #{license}"
        end
      end
    end

    unless Bundler.feature_flag.bundler_3_mode?
      desc "viz [OPTIONS]", "Generates a visual dependency graph", hide: true
      long_desc <<-D
        Viz generates a PNG file of the current Gemfile as a dependency graph.
        Viz requires the ruby-graphviz gem (and its dependencies).
        The associated gems must also be installed via 'bundle install'.
      D
      method_option :file, type: :string, default: "gem_graph", aliases: "-f", desc: "The name to use for the generated file. see format option"
      method_option :format, type: :string, default: "png", aliases: "-F", desc: "This is output format option. Supported format is png, jpg, svg, dot ..."
      method_option :requirements, type: :boolean, default: false, aliases: "-R", desc: "Set to show the version of each required dependency."
      method_option :version, type: :boolean, default: false, aliases: "-v", desc: "Set to show each gem version."
      method_option :without, type: :array, default: [], aliases: "-W", banner: "GROUP[ GROUP...]", desc: "Exclude gems that are part of the specified named group."
      def viz
        SharedHelpers.major_deprecation 2, "The `viz` command has been renamed to `graph` and moved to a plugin. See https://github.com/rubygems/bundler-graph"
        require_relative "cli/viz"
        Viz.new(options.dup).run
      end
    end

    desc "gem NAME [OPTIONS]", "Creates a skeleton for creating a rubygem"
    method_option :exe, type: :boolean, default: false, aliases: ["--bin", "-b"], desc: "Generate a binary executable for your library."
    method_option :coc, type: :boolean, desc: "Generate a code of conduct file. Set a default with `bundle config set --global gem.coc true`."
    method_option :edit, type: :string, aliases: "-e", required: false, banner: "EDITOR", lazy_default: [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }, desc: "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
    method_option :ext, type: :string, desc: "Generate the boilerplate for C extension code.", enum: EXTENSIONS
    method_option :git, type: :boolean, default: true, desc: "Initialize a git repo inside your library."
    method_option :mit, type: :boolean, desc: "Generate an MIT license file. Set a default with `bundle config set --global gem.mit true`."
    method_option :rubocop, type: :boolean, desc: "Add rubocop to the generated Rakefile and gemspec. Set a default with `bundle config set --global gem.rubocop true`."
    method_option :changelog, type: :boolean, desc: "Generate changelog file. Set a default with `bundle config set --global gem.changelog true`."
    method_option :test, type: :string, lazy_default: Bundler.settings["gem.test"] || "", aliases: "-t", banner: "Use the specified test framework for your library", enum: %w[rspec minitest test-unit], desc: "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set --global gem.test (rspec|minitest|test-unit)`."
    method_option :ci, type: :string, lazy_default: Bundler.settings["gem.ci"] || "", enum: %w[github gitlab circle], desc: "Generate CI configuration, either GitHub Actions, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|gitlab|circle)`"
    method_option :linter, type: :string, lazy_default: Bundler.settings["gem.linter"] || "", enum: %w[rubocop standard], desc: "Add a linter and code formatter, either RuboCop or Standard. Set a default with `bundle config set --global gem.linter (rubocop|standard)`"
    method_option :github_username, type: :string, default: Bundler.settings["gem.github_username"], banner: "Set your username on GitHub", desc: "Fill in GitHub username on README so that you don't have to do it manually. Set a default with `bundle config set --global gem.github_username <your_username>`."

    def gem(name)
      require_relative "cli/gem"
      cmd_args = args + [self]
      cmd_args.unshift(options)

      Gem.new(*cmd_args).run
    end

    def self.source_root
      File.expand_path("templates", __dir__)
    end

    desc "clean [OPTIONS]", "Cleans up unused gems in your bundler directory", hide: true
    method_option "dry-run", type: :boolean, default: false, banner: "Only print out changes, do not clean gems"
    method_option "force", type: :boolean, default: false, banner: "Forces cleaning up unused gems even if Bundler is configured to use globally installed gems. As a consequence, removes all system gems except for the ones in the current application."
    def clean
      require_relative "cli/clean"
      Clean.new(options.dup).run
    end

    desc "platform [OPTIONS]", "Displays platform compatibility information"
    method_option "ruby", type: :boolean, default: false, banner: "only display ruby related platform information"
    def platform
      require_relative "cli/platform"
      Platform.new(options).run
    end

    desc "inject GEM VERSION", "Add the named gem, with version requirements, to the resolved Gemfile", hide: true
    method_option "source", type: :string, banner: "Install gem from the given source"
    method_option "group", type: :string, banner: "Install gem into a bundler group"
    def inject(name, version)
      SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command"
      require_relative "cli/inject"
      Inject.new(options.dup, name, version).run
    end

    desc "lock", "Creates a lockfile without installing"
    method_option "update", type: :array, lazy_default: true, banner: "ignore the existing lockfile, update all gems by default, or update list of given gems"
    method_option "local", type: :boolean, default: false, banner: "do not attempt to fetch remote gemspecs and use the local gem cache only"
    method_option "print", type: :boolean, default: false, banner: "print the lockfile to STDOUT instead of writing to the file system"
    method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
    method_option "lockfile", type: :string, default: nil, banner: "the path the lockfile should be written to"
    method_option "full-index", type: :boolean, default: false, banner: "Fall back to using the single-file index of all gems"
    method_option "add-checksums", type: :boolean, default: false, banner: "Adds checksums to the lockfile"
    method_option "add-platform", type: :array, default: [], banner: "Add a new platform to the lockfile"
    method_option "remove-platform", type: :array, default: [], banner: "Remove a platform from the lockfile"
    method_option "normalize-platforms", type: :boolean, default: false, banner: "Normalize lockfile platforms"
    method_option "patch", type: :boolean, banner: "If updating, prefer updating only to next patch version"
    method_option "minor", type: :boolean, banner: "If updating, prefer updating only to next minor version"
    method_option "major", type: :boolean, banner: "If updating, prefer updating to next major version (default)"
    method_option "pre", type: :boolean, banner: "If updating, always choose the highest allowed version, regardless of prerelease status"
    method_option "strict", type: :boolean, banner: "If updating, do not allow any gem to be updated past latest --patch | --minor | --major"
    method_option "conservative", type: :boolean, banner: "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
    method_option "bundler", type: :string, lazy_default: "> 0.a", banner: "Update the locked version of bundler"
    def lock
      require_relative "cli/lock"
      Lock.new(options).run
    end

    desc "env", "Print information about the environment Bundler is running under"
    def env
      Env.write($stdout)
    end

    desc "doctor [OPTIONS]", "Checks the bundle for common problems"
    long_desc <<-D
      Doctor scans the OS dependencies of each of the gems requested in the Gemfile. If
      missing dependencies are detected, Bundler prints them and exits status 1.
      Otherwise, Bundler prints a success message and exits with a status of 0.
    D
    method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
    method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
    def doctor
      require_relative "cli/doctor"
      Doctor.new(options).run
    end

    desc "issue", "Learn how to report an issue in Bundler"
    def issue
      require_relative "cli/issue"
      Issue.new.run
    end

    desc "pristine [GEMS...]", "Restores installed gems to pristine condition"
    long_desc <<-D
      Restores installed gems to pristine condition from files located in the
      gem cache. Gems installed from a git repository will be issued `git
      checkout --force`.
    D
    def pristine(*gems)
      require_relative "cli/pristine"
      Bundler.settings.temporary(no_install: false) do
        Pristine.new(gems).run
      end
    end

    if Bundler.feature_flag.plugins?
      require_relative "cli/plugin"
      desc "plugin", "Manage the bundler plugins"
      subcommand "plugin", Plugin
    end

    # Reformat the arguments passed to bundle that include a --help flag
    # into the corresponding `bundle help #{command}` call
    def self.reformatted_help_args(args)
      bundler_commands = (COMMAND_ALIASES.keys + COMMAND_ALIASES.values).flatten

      help_flags = %w[--help -h]
      exec_commands = ["exec"] + COMMAND_ALIASES["exec"]

      help_used = args.index {|a| help_flags.include? a }
      exec_used = args.index {|a| exec_commands.include? a }

      command = args.find {|a| bundler_commands.include? a }

      if exec_used && help_used
        if exec_used + help_used == 1
          %w[help exec]
        else
          args
        end
      elsif help_used
        args = args.dup
        args.delete_at(help_used)
        ["help", command || args].flatten.compact
      else
        args
      end
    end

    def self.check_deprecated_ext_option(arguments)
      # when deprecated version of `--ext` is called
      # print out deprecation warning and pretend `--ext=c` was provided
      if deprecated_ext_value?(arguments)
        message = "Extensions can now be generated using C or Rust, so `--ext` with no arguments has been deprecated. Please select a language, e.g. `--ext=rust` to generate a Rust extension. This gem will now be generated as if `--ext=c` was used."
        removed_message = "Extensions can now be generated using C or Rust, so `--ext` with no arguments has been removed. Please select a language, e.g. `--ext=rust` to generate a Rust extension."
        SharedHelpers.major_deprecation 2, message, removed_message: removed_message
        arguments[arguments.index("--ext")] = "--ext=c"
      end
    end

    def self.deprecated_ext_value?(arguments)
      index = arguments.index("--ext")
      next_argument = arguments[index + 1]

      # it is ok when --ext is followed with valid extension value
      # for example `bundle gem hello --ext c`
      return false if EXTENSIONS.include?(next_argument)

      # deprecated call when --ext is called with no value in last position
      # for example `bundle gem hello_gem --ext`
      return true if next_argument.nil?

      # deprecated call when --ext is followed by other parameter
      # for example `bundle gem --ext --no-ci hello_gem`
      return true if next_argument.start_with?("-")

      # deprecated call when --ext is followed by gem name
      # for example `bundle gem --ext hello_gem`
      return true if next_argument

      false
    end

    private

    def current_command
      _, _, config = @_initializer
      config[:current_command]
    end

    def print_command
      return unless Bundler.ui.debug?
      cmd = current_command
      command_name = cmd.name
      return if PARSEABLE_COMMANDS.include?(command_name)
      command = ["bundle", command_name] + args
      options_to_print = options.dup
      options_to_print.delete_if do |k, v|
        next unless o = cmd.options[k]
        o.default == v
      end
      command << Thor::Options.to_switches(options_to_print.sort_by(&:first)).strip
      command.reject!(&:empty?)
      Bundler.ui.info "Running `#{command * " "}` with bundler #{Bundler::VERSION}"
    end

    def warn_on_outdated_bundler
      return if Bundler.settings[:disable_version_check]

      command_name = current_command.name
      return if PARSEABLE_COMMANDS.include?(command_name)

      return unless SharedHelpers.md5_available?

      require_relative "vendored_uri"
      remote = Source::Rubygems::Remote.new(Gem::URI("https://rubygems.org"))
      cache_path = Bundler.user_cache.join("compact_index", remote.cache_slug)
      latest = Bundler::CompactIndexClient.new(cache_path).latest_version("bundler")
      return unless latest

      current = Gem::Version.new(VERSION)
      return if current >= latest

      Bundler.ui.warn \
        "The latest bundler is #{latest}, but you are currently running #{current}.\n" \
        "To update to the most recent version, run `bundle update --bundler`"
    rescue RuntimeError
      nil
    end

    def remembered_negative_flag_deprecation(name)
      positive_name = name.gsub(/\Ano-/, "")
      option = current_command.options[positive_name]
      flag_name = "--no-" + option.switch_name.gsub(/\A--/, "")

      flag_deprecation(positive_name, flag_name, option)
    end

    def remembered_flag_deprecation(name)
      option = current_command.options[name]
      flag_name = option.switch_name

      flag_deprecation(name, flag_name, option)
    end

    def flag_deprecation(name, flag_name, option)
      name_index = ARGV.find {|arg| flag_name == arg.split("=")[0] }
      return unless name_index

      value = options[name]
      value = value.join(" ").to_s if option.type == :array
      value = "'#{value}'" unless option.type == :boolean

      print_remembered_flag_deprecation(flag_name, name.tr("-", "_"), value)
    end

    def print_remembered_flag_deprecation(flag_name, option_name, option_value)
      message =
        "The `#{flag_name}` flag is deprecated because it relies on being " \
        "remembered across bundler invocations, which bundler will no longer " \
        "do in future versions. Instead please use `bundle config set #{option_name} " \
        "#{option_value}`, and stop using this flag"
      removed_message =
        "The `#{flag_name}` flag has been removed because it relied on being " \
        "remembered across bundler invocations, which bundler will no longer " \
        "do. Instead please use `bundle config set #{option_name} " \
        "#{option_value}`, and stop using this flag"
      Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
    end
  end
end
PK)J[�
*��
�
3share/gems/gems/bundler-2.6.7/lib/bundler/inline.rbnu�[���# frozen_string_literal: true

# Allows for declaring a Gemfile inline in a ruby script, installing any gems
# that aren't already installed on the user's system.
#
# @note Every gem that is specified in this 'Gemfile' will be `require`d, as if
#       the user had manually called `Bundler.require`. To avoid a requested gem
#       being automatically required, add the `:require => false` option to the
#       `gem` dependency declaration.
#
# @param force_latest_compatible [Boolean] Force installing the *latest*
#                                          compatible versions of the gems,
#                                          even if compatible versions are
#                                          already installed locally.
#                                          This also logs output if the
#                                          `:quiet` option is not set.
#                                          Defaults to `false`.
#
# @param gemfile [Proc]    a block that is evaluated as a `Gemfile`.
#
# @example Using an inline Gemfile
#
#          #!/opt/alt/ruby34/bin/ruby
#
#          require 'bundler/inline'
#
#          gemfile do
#            source 'https://rubygems.org'
#            gem 'json', require: false
#            gem 'nap', require: 'rest'
#            gem 'cocoapods', '~> 0.34.1'
#          end
#
#          puts Pod::VERSION # => "0.34.4"
#
def gemfile(force_latest_compatible = false, options = {}, &gemfile)
  require_relative "../bundler"
  Bundler.reset!

  opts = options.dup
  ui = opts.delete(:ui) { Bundler::UI::Shell.new }
  ui.level = "silent" if opts.delete(:quiet) || !force_latest_compatible
  Bundler.ui = ui
  raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?

  old_gemfile = ENV["BUNDLE_GEMFILE"]

  Bundler.unbundle_env!

  begin
    Bundler.instance_variable_set(:@bundle_path, Pathname.new(Gem.dir))
    Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"

    Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins?
    builder = Bundler::Dsl.new
    builder.instance_eval(&gemfile)

    Bundler.settings.temporary(deployment: false, frozen: false) do
      definition = builder.to_definition(nil, true)
      definition.validate_runtime!

      if force_latest_compatible || definition.missing_specs?
        Bundler.settings.temporary(inline: true, no_install: false) do
          installer = Bundler::Installer.install(Bundler.root, definition, system: true)
          installer.post_install_messages.each do |name, message|
            Bundler.ui.info "Post-install message from #{name}:\n#{message}"
          end
        end
      end

      begin
        runtime = Bundler::Runtime.new(nil, definition).setup
      rescue Gem::LoadError => e
        name = e.name
        version = e.requirement.requirements.first[1]
        activated_version = Gem.loaded_specs[name].version

        Bundler.ui.info \
          "The #{name} gem was resolved to #{version}, but #{activated_version} was activated by Bundler while installing it, causing a conflict. " \
          "Bundler will now retry resolving with #{activated_version} instead."

        builder.dependencies.delete_if {|d| d.name == name }
        builder.instance_eval { gem name, activated_version }
        definition = builder.to_definition(nil, true)

        retry
      end

      runtime.require
    end
  ensure
    if old_gemfile
      ENV["BUNDLE_GEMFILE"] = old_gemfile
    else
      ENV["BUNDLE_GEMFILE"] = ""
    end
  end
end
PK)J[�2����;share/gems/gems/bundler-2.6.7/lib/bundler/build_metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  # Represents metadata from when the Bundler gem was built.
  module BuildMetadata
    # begin ivars
    @release = false
    # end ivars

    # A hash representation of the build metadata.
    def self.to_h
      {
        "Built At" => built_at,
        "Git SHA" => git_commit_sha,
        "Released Version" => release?,
      }
    end

    # A string representing the date the bundler gem was built.
    def self.built_at
      @built_at ||= Time.now.utc.strftime("%Y-%m-%d").freeze
    end

    # The SHA for the git commit the bundler gem was built from.
    def self.git_commit_sha
      return @git_commit_sha if instance_variable_defined? :@git_commit_sha

      # If Bundler has been installed without its .git directory and without a
      # commit instance variable then we can't determine its commits SHA.
      git_dir = File.expand_path("../../../.git", __dir__)
      if File.directory?(git_dir)
        return @git_commit_sha = IO.popen(%w[git rev-parse --short HEAD], { chdir: git_dir }, &:read).strip.freeze
      end

      @git_commit_sha ||= "unknown"
    end

    # Whether this is an official release build of Bundler.
    def self.release?
      @release
    end
  end
end
PK)J[)�1���;share/gems/gems/bundler-2.6.7/lib/bundler/uri_normalizer.rbnu�[���# frozen_string_literal: true

module Bundler
  module URINormalizer
    module_function

    # Normalizes uri to a consistent version, either with or without trailing
    # slash.
    #
    # TODO: Currently gem sources are locked with a trailing slash, while git
    # sources are locked without a trailing slash. This should be normalized but
    # the inconsistency is there for now to avoid changing all lockfiles
    # including GIT sources. We could normalize this on the next major.
    #
    def normalize_suffix(uri, trailing_slash: true)
      if trailing_slash
        uri.end_with?("/") ? uri : "#{uri}/"
      else
        uri.end_with?("/") ? uri.delete_suffix("/") : uri
      end
    end
  end
end
PK)J[��Z�))Cshare/gems/gems/bundler-2.6.7/lib/bundler/uri_credentials_filter.rbnu�[���# frozen_string_literal: true

module Bundler
  module URICredentialsFilter
    module_function

    def credential_filtered_uri(uri_to_anonymize)
      return uri_to_anonymize if uri_to_anonymize.nil?
      uri = uri_to_anonymize.dup
      if uri.is_a?(String)
        return uri if File.exist?(uri)

        require_relative "vendored_uri"
        uri = Gem::URI(uri)
      end

      if uri.userinfo
        # oauth authentication
        if uri.password == "x-oauth-basic" || uri.password == "x" || uri.password.nil?
          # URI as string does not display with password if no user is set
          oauth_designation = uri.password
          uri.user = oauth_designation
        end
        uri.password = nil
      end
      return uri.to_s if uri_to_anonymize.is_a?(String)
      uri
    rescue Gem::URI::InvalidURIError # uri is not canonical uri scheme
      uri
    end

    def credential_filtered_string(str_to_filter, uri)
      return str_to_filter if uri.nil? || str_to_filter.nil?
      str_with_no_credentials = str_to_filter.dup
      anonymous_uri_str = credential_filtered_uri(uri).to_s
      uri_str = uri.to_s
      if anonymous_uri_str != uri_str
        str_with_no_credentials = str_with_no_credentials.gsub(uri_str, anonymous_uri_str)
      end
      str_with_no_credentials
    end
  end
end
PK)J[HxQ@��2share/gems/gems/bundler-2.6.7/lib/bundler/graph.rbnu�[���# frozen_string_literal: true

require "set"
module Bundler
  class Graph
    GRAPH_NAME = :Gemfile

    def initialize(env, output_file, show_version = false, show_requirements = false, output_format = "png", without = [])
      @env               = env
      @output_file       = output_file
      @show_version      = show_version
      @show_requirements = show_requirements
      @output_format     = output_format
      @without_groups    = without.map(&:to_sym)

      @groups            = []
      @relations         = Hash.new {|h, k| h[k] = Set.new }
      @node_options      = {}
      @edge_options      = {}

      _populate_relations
    end

    attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

    def viz
      GraphVizClient.new(self).run
    end

    private

    def _populate_relations
      parent_dependencies = _groups.values.to_set.flatten
      loop do
        break if parent_dependencies.empty?

        tmp = Set.new
        parent_dependencies.each do |dependency|
          child_dependencies = spec_for_dependency(dependency).runtime_dependencies.to_set
          @relations[dependency.name] += child_dependencies.map(&:name).to_set
          tmp += child_dependencies

          @node_options[dependency.name] = _make_label(dependency, :node)
          child_dependencies.each do |c_dependency|
            @edge_options["#{dependency.name}_#{c_dependency.name}"] = _make_label(c_dependency, :edge)
          end
        end
        parent_dependencies = tmp
      end
    end

    def _groups
      relations = Hash.new {|h, k| h[k] = Set.new }
      @env.current_dependencies.each do |dependency|
        dependency.groups.each do |group|
          next if @without_groups.include?(group)

          relations[group.to_s].add(dependency)
          @relations[group.to_s].add(dependency.name)

          @node_options[group.to_s] ||= _make_label(group, :node)
          @edge_options["#{group}_#{dependency.name}"] = _make_label(dependency, :edge)
        end
      end
      @groups = relations.keys
      relations
    end

    def _make_label(symbol_or_string_or_dependency, element_type)
      case element_type.to_sym
      when :node
        if symbol_or_string_or_dependency.is_a?(Gem::Dependency)
          label = symbol_or_string_or_dependency.name.dup
          label << "\n#{spec_for_dependency(symbol_or_string_or_dependency).version}" if @show_version
        else
          label = symbol_or_string_or_dependency.to_s
        end
      when :edge
        label = nil
        if symbol_or_string_or_dependency.respond_to?(:requirements_list) && @show_requirements
          tmp = symbol_or_string_or_dependency.requirements_list.join(", ")
          label = tmp if tmp != ">= 0"
        end
      else
        raise ArgumentError, "2nd argument is invalid"
      end
      label.nil? ? {} : { label: label }
    end

    def spec_for_dependency(dependency)
      @env.requested_specs.find {|s| s.name == dependency.name }
    end

    class GraphVizClient
      def initialize(graph_instance)
        @graph_name    = graph_instance.class::GRAPH_NAME
        @groups        = graph_instance.groups
        @relations     = graph_instance.relations
        @node_options  = graph_instance.node_options
        @edge_options  = graph_instance.edge_options
        @output_file   = graph_instance.output_file
        @output_format = graph_instance.output_format
      end

      def g
        @g ||= ::GraphViz.digraph(@graph_name, concentrate: true, normalize: true, nodesep: 0.55) do |g|
          g.edge[:weight]   = 2
          g.edge[:fontname] = g.node[:fontname] = "Arial, Helvetica, SansSerif"
          g.edge[:fontsize] = 12
        end
      end

      def run
        @groups.each do |group|
          g.add_nodes(
            group, {
              style: "filled",
              fillcolor: "#B9B9D5",
              shape: "box3d",
              fontsize: 16,
            }.merge(@node_options[group])
          )
        end

        @relations.each do |parent, children|
          children.each do |child|
            if @groups.include?(parent)
              g.add_nodes(child, { style: "filled", fillcolor: "#B9B9D5" }.merge(@node_options[child]))
              g.add_edges(parent, child, { constraint: false }.merge(@edge_options["#{parent}_#{child}"]))
            else
              g.add_nodes(child, @node_options[child])
              g.add_edges(parent, child, @edge_options["#{parent}_#{child}"])
            end
          end
        end

        if @output_format.to_s == "debug"
          $stdout.puts g.output none: String
          Bundler.ui.info "debugging bundle viz..."
        else
          begin
            g.output @output_format.to_sym => "#{@output_file}.#{@output_format}"
            Bundler.ui.info "#{@output_file}.#{@output_format}"
          rescue ArgumentError => e
            warn "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb"
            raise e
          end
        end
      end
    end
  end
end
PK)J[Htd]];share/gems/gems/bundler-2.6.7/lib/bundler/vendored_tsort.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/tsort/lib/tsort"
PK)J[껽<�.�.4share/gems/gems/bundler-2.6.7/lib/bundler/fetcher.rbnu�[���# frozen_string_literal: true

require_relative "vendored_persistent"
require_relative "vendored_timeout"
require "cgi"
require_relative "vendored_securerandom"
require "zlib"

module Bundler
  # Handles all the fetching with the rubygems server
  class Fetcher
    autoload :Base, File.expand_path("fetcher/base", __dir__)
    autoload :CompactIndex, File.expand_path("fetcher/compact_index", __dir__)
    autoload :Downloader, File.expand_path("fetcher/downloader", __dir__)
    autoload :Dependency, File.expand_path("fetcher/dependency", __dir__)
    autoload :Index, File.expand_path("fetcher/index", __dir__)

    # This error is raised when it looks like the network is down
    class NetworkDownError < HTTPError; end
    # This error is raised if we should rate limit our requests to the API
    class TooManyRequestsError < HTTPError; end
    # This error is raised if the API returns a 413 (only printed in verbose)
    class FallbackError < HTTPError; end

    # This is the error raised if OpenSSL fails the cert verification
    class CertificateFailureError < HTTPError
      def initialize(remote_uri)
        remote_uri = filter_uri(remote_uri)
        super "Could not verify the SSL certificate for #{remote_uri}.\nThere" \
          " is a chance you are experiencing a man-in-the-middle attack, but" \
          " most likely your system doesn't have the CA certificates needed" \
          " for verification. For information about OpenSSL certificates, see" \
          " https://railsapps.github.io/openssl-certificate-verify-failed.html."
      end
    end

    # This is the error raised when a source is HTTPS and OpenSSL didn't load
    class SSLError < HTTPError
      def initialize(msg = nil)
        super "Could not load OpenSSL.\n" \
          "You must recompile Ruby with OpenSSL support.\n" \
          "original error: #{msg}\n"
      end
    end

    # This error is raised if HTTP authentication is required, but not provided.
    class AuthenticationRequiredError < HTTPError
      def initialize(remote_uri)
        remote_uri = filter_uri(remote_uri)
        super "Authentication is required for #{remote_uri}.\n" \
          "Please supply credentials for this source. You can do this by running:\n" \
          "`bundle config set --global #{remote_uri} username:password`\n" \
          "or by storing the credentials in the `#{Settings.key_for(remote_uri)}` environment variable"
      end
    end

    # This error is raised if HTTP authentication is provided, but incorrect.
    class BadAuthenticationError < HTTPError
      def initialize(remote_uri)
        remote_uri = filter_uri(remote_uri)
        super "Bad username or password for #{remote_uri}.\n" \
          "Please double-check your credentials and correct them."
      end
    end

    # This error is raised if HTTP authentication is correct, but lacks
    # necessary permissions.
    class AuthenticationForbiddenError < HTTPError
      def initialize(remote_uri)
        remote_uri = filter_uri(remote_uri)
        super "Access token could not be authenticated for #{remote_uri}.\n" \
          "Make sure it's valid and has the necessary scopes configured."
      end
    end

    # Exceptions classes that should bypass retry attempts. If your password didn't work the
    # first time, it's not going to the third time.
    NET_ERRORS = [:HTTPBadGateway, :HTTPBadRequest, :HTTPFailedDependency,
                  :HTTPForbidden, :HTTPInsufficientStorage, :HTTPMethodNotAllowed,
                  :HTTPMovedPermanently, :HTTPNoContent, :HTTPNotFound,
                  :HTTPNotImplemented, :HTTPPreconditionFailed, :HTTPRequestEntityTooLarge,
                  :HTTPRequestURITooLong, :HTTPUnauthorized, :HTTPUnprocessableEntity,
                  :HTTPUnsupportedMediaType, :HTTPVersionNotSupported].freeze
    FAIL_ERRORS = begin
      fail_errors = [AuthenticationRequiredError, BadAuthenticationError, AuthenticationForbiddenError, FallbackError, SecurityError]
      fail_errors << Gem::Requirement::BadRequirementError
      fail_errors.concat(NET_ERRORS.map {|e| Gem::Net.const_get(e) })
    end.freeze

    class << self
      attr_accessor :disable_endpoint, :api_timeout, :redirect_limit, :max_retries
    end

    self.redirect_limit = Bundler.settings[:redirect] # How many redirects to allow in one request
    self.api_timeout    = Bundler.settings[:timeout] # How long to wait for each API call
    self.max_retries    = Bundler.settings[:retry] # How many retries for the API call

    def initialize(remote)
      @cis = nil
      @remote = remote

      Socket.do_not_reverse_lookup = true
      connection # create persistent connection
    end

    def uri
      @remote.anonymized_uri
    end

    # fetch a gem specification
    def fetch_spec(spec)
      spec -= [nil, "ruby", ""]
      spec_file_name = "#{spec.join "-"}.gemspec"

      uri = Gem::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
      spec = if uri.scheme == "file"
        path = Gem::Util.correct_for_windows_path(uri.path)
        Bundler.safe_load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
      elsif cached_spec_path = gemspec_cached_path(spec_file_name)
        Bundler.load_gemspec(cached_spec_path)
      else
        Bundler.safe_load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
      end
      raise MarshalError, "is #{spec.inspect}" unless spec.is_a?(Gem::Specification)
      spec
    rescue MarshalError
      raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
        "Your network or your gem server is probably having issues right now."
    end

    # return the specs in the bundler format as an index with retries
    def specs_with_retry(gem_names, source)
      Bundler::Retry.new("fetcher", FAIL_ERRORS).attempts do
        specs(gem_names, source)
      end
    end

    # return the specs in the bundler format as an index
    def specs(gem_names, source)
      index = Bundler::Index.new

      fetch_specs(gem_names).each do |name, version, platform, dependencies, metadata|
        spec = if dependencies
          EndpointSpecification.new(name, version, platform, self, dependencies, metadata).tap do |es|
            source.checksum_store.replace(es, es.checksum)
          end
        else
          RemoteSpecification.new(name, version, platform, self)
        end
        spec.source = source
        spec.remote = @remote
        index << spec
      end

      index
    rescue CertificateFailureError
      Bundler.ui.info "" if gem_names && api_fetcher? # newline after dots
      raise
    end

    def user_agent
      @user_agent ||= begin
        ruby = Bundler::RubyVersion.system

        agent = String.new("bundler/#{Bundler::VERSION}")
        agent << " rubygems/#{Gem::VERSION}"
        agent << " ruby/#{ruby.versions_string(ruby.versions)}"
        agent << " (#{ruby.host})"
        agent << " command/#{ARGV.first}"

        if ruby.engine != "ruby"
          # engine_version raises on unknown engines
          engine_version = begin
                             ruby.engine_versions
                           rescue RuntimeError
                             "???"
                           end
          agent << " #{ruby.engine}/#{ruby.versions_string(engine_version)}"
        end

        agent << " options/#{Bundler.settings.all.join(",")}"

        agent << " ci/#{cis.join(",")}" if cis.any?

        # add a random ID so we can consolidate runs server-side
        agent << " " << Gem::SecureRandom.hex(8)

        # add any user agent strings set in the config
        extra_ua = Bundler.settings[:user_agent]
        agent << " " << extra_ua if extra_ua

        agent
      end
    end

    def http_proxy
      return unless uri = connection.proxy_uri
      uri.to_s
    end

    def inspect
      "#<#{self.class}:0x#{object_id} uri=#{uri}>"
    end

    def api_fetcher?
      fetchers.first.api_fetcher?
    end

    def gem_remote_fetcher
      @gem_remote_fetcher ||= begin
        require_relative "fetcher/gem_remote_fetcher"
        fetcher = GemRemoteFetcher.new Gem.configuration[:http_proxy]
        fetcher.headers["User-Agent"] = user_agent
        fetcher.headers["X-Gemfile-Source"] = @remote.original_uri.to_s if @remote.original_uri
        fetcher
      end
    end

    private

    def available_fetchers
      if Bundler::Fetcher.disable_endpoint
        [Index]
      elsif remote_uri.scheme == "file"
        Bundler.ui.debug("Using a local server, bundler won't use the CompactIndex API")
        [Index]
      else
        [CompactIndex, Dependency, Index]
      end
    end

    def fetchers
      @fetchers ||= available_fetchers.map {|f| f.new(downloader, @remote, uri, gem_remote_fetcher) }.drop_while {|f| !f.available? }
    end

    def fetch_specs(gem_names)
      fetchers.reject!(&:api_fetcher?) unless gem_names
      fetchers.reject! do |f|
        specs = f.specs(gem_names)
        return specs if specs
        true
      end
      []
    end

    def cis
      @cis ||= Bundler::CIDetector.ci_strings
    end

    def connection
      @connection ||= begin
        needs_ssl = remote_uri.scheme == "https" ||
                    Bundler.settings[:ssl_verify_mode] ||
                    Bundler.settings[:ssl_client_cert]
        if needs_ssl
          begin
            require "openssl"
          rescue StandardError, LoadError => e
            raise SSLError.new(e.message)
          end
        end

        con = Gem::Net::HTTP::Persistent.new name: "bundler", proxy: :ENV
        if gem_proxy = Gem.configuration[:http_proxy]
          con.proxy = Gem::URI.parse(gem_proxy) if gem_proxy != :no_proxy
        end

        if remote_uri.scheme == "https"
          con.verify_mode = (Bundler.settings[:ssl_verify_mode] ||
            OpenSSL::SSL::VERIFY_PEER)
          con.cert_store = bundler_cert_store
        end

        ssl_client_cert = Bundler.settings[:ssl_client_cert] ||
                          (Gem.configuration.ssl_client_cert if
                            Gem.configuration.respond_to?(:ssl_client_cert))
        if ssl_client_cert
          pem = File.read(ssl_client_cert)
          con.cert = OpenSSL::X509::Certificate.new(pem)
          con.key  = OpenSSL::PKey::RSA.new(pem)
        end

        con.read_timeout = Fetcher.api_timeout
        con.open_timeout = Fetcher.api_timeout
        con.override_headers["User-Agent"] = user_agent
        con.override_headers["X-Gemfile-Source"] = @remote.original_uri.to_s if @remote.original_uri
        con
      end
    end

    # cached gem specification path, if one exists
    def gemspec_cached_path(spec_file_name)
      paths = Bundler.rubygems.spec_cache_dirs.map {|dir| File.join(dir, spec_file_name) }
      paths.find {|path| File.file? path }
    end

    HTTP_ERRORS = [
      Gem::Timeout::Error, EOFError, SocketError, Errno::ENETDOWN, Errno::ENETUNREACH,
      Errno::EINVAL, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::EAGAIN,
      Gem::Net::HTTPBadResponse, Gem::Net::HTTPHeaderSyntaxError, Gem::Net::ProtocolError,
      Gem::Net::HTTP::Persistent::Error, Zlib::BufError, Errno::EHOSTUNREACH
    ].freeze

    def bundler_cert_store
      store = OpenSSL::X509::Store.new
      ssl_ca_cert = Bundler.settings[:ssl_ca_cert] ||
                    (Gem.configuration.ssl_ca_cert if
                      Gem.configuration.respond_to?(:ssl_ca_cert))
      if ssl_ca_cert
        if File.directory? ssl_ca_cert
          store.add_path ssl_ca_cert
        else
          store.add_file ssl_ca_cert
        end
      else
        store.set_default_paths
        require "rubygems/request"
        Gem::Request.get_cert_files.each {|c| store.add_file c }
      end
      store
    end

    def remote_uri
      @remote.uri
    end

    def downloader
      @downloader ||= Downloader.new(connection, self.class.redirect_limit)
    end
  end
end
PK)J[}m}cc>share/gems/gems/bundler-2.6.7/lib/bundler/vendored_pub_grub.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/pub_grub/lib/pub_grub"
PK)J[p�"t�1�1Ashare/gems/gems/bundler-2.6.7/lib/bundler/rubygems_integration.rbnu�[���# frozen_string_literal: true

require "rubygems" unless defined?(Gem)

module Bundler
  class RubygemsIntegration
    require "monitor"

    EXT_LOCK = Monitor.new

    def initialize
      @replaced_methods = {}
    end

    def version
      @version ||= Gem.rubygems_version
    end

    def provides?(req_str)
      Gem::Requirement.new(req_str).satisfied_by?(version)
    end

    def build_args
      require "rubygems/command"
      Gem::Command.build_args
    end

    def build_args=(args)
      require "rubygems/command"
      Gem::Command.build_args = args
    end

    def set_target_rbconfig(path)
      Gem.set_target_rbconfig(path)
    end

    def loaded_specs(name)
      Gem.loaded_specs[name]
    end

    def mark_loaded(spec)
      if spec.respond_to?(:activated=)
        current = Gem.loaded_specs[spec.name]
        current.activated = false if current
        spec.activated = true
      end
      Gem.loaded_specs[spec.name] = spec
    end

    def validate(spec)
      Bundler.ui.silence { spec.validate_for_resolution }
    rescue Gem::InvalidSpecificationException => e
      error_message = "The gemspec at #{spec.loaded_from} is not valid. Please fix this gemspec.\n" \
        "The validation error was '#{e.message}'\n"
      raise Gem::InvalidSpecificationException.new(error_message)
    rescue Errno::ENOENT
      nil
    end

    def stub_set_spec(stub, spec)
      stub.instance_variable_set(:@spec, spec)
    end

    def path(obj)
      obj.to_s
    end

    def ruby_engine
      Gem.ruby_engine
    end

    def read_binary(path)
      Gem.read_binary(path)
    end

    def inflate(obj)
      Gem::Util.inflate(obj)
    end

    def gem_dir
      Gem.dir
    end

    def gem_bindir
      Gem.bindir
    end

    def user_home
      Gem.user_home
    end

    def gem_path
      Gem.path
    end

    def reset
      Gem::Specification.reset
    end

    def post_reset_hooks
      Gem.post_reset_hooks
    end

    def suffix_pattern
      Gem.suffix_pattern
    end

    def gem_cache
      gem_path.map {|p| File.expand_path("cache", p) }
    end

    def spec_cache_dirs
      @spec_cache_dirs ||= begin
        dirs = gem_path.map {|dir| File.join(dir, "specifications") }
        dirs << Gem.spec_cache_dir
        dirs.uniq.select {|dir| File.directory? dir }
      end
    end

    def marshal_spec_dir
      Gem::MARSHAL_SPEC_DIR
    end

    def clear_paths
      Gem.clear_paths
    end

    def bin_path(gem, bin, ver)
      Gem.bin_path(gem, bin, ver)
    end

    def loaded_gem_paths
      loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
      loaded_gem_paths.flatten
    end

    def ui=(obj)
      Gem::DefaultUserInteraction.ui = obj
    end

    def ext_lock
      EXT_LOCK
    end

    def spec_from_gem(path)
      require "rubygems/package"
      Gem::Package.new(path).spec
    end

    def build_gem(gem_dir, spec)
      build(spec)
    end

    def security_policy_keys
      %w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
    end

    def security_policies
      @security_policies ||= begin
        require "rubygems/security"
        Gem::Security::Policies
      rescue LoadError, NameError
        {}
      end
    end

    def reverse_rubygems_kernel_mixin
      # Disable rubygems' gem activation system
      if Gem.respond_to?(:discover_gems_on_require=)
        Gem.discover_gems_on_require = false
      else
        [::Kernel.singleton_class, ::Kernel].each do |k|
          if k.private_method_defined?(:gem_original_require)
            redefine_method(k, :require, k.instance_method(:gem_original_require))
          end
        end
      end
    end

    def replace_gem(specs_by_name)
      executables = nil

      [::Kernel.singleton_class, ::Kernel].each do |kernel_class|
        redefine_method(kernel_class, :gem) do |dep, *reqs|
          if executables&.include?(File.basename(caller_locations(1, 1).first.path))
            break
          end

          reqs.pop if reqs.last.is_a?(Hash)

          unless dep.respond_to?(:name) && dep.respond_to?(:requirement)
            dep = Gem::Dependency.new(dep, reqs)
          end

          if spec = specs_by_name[dep.name]
            return true if dep.matches_spec?(spec)
          end

          message = if spec.nil?
            target_file = begin
                            Bundler.default_gemfile.basename
                          rescue GemfileNotFound
                            "inline Gemfile"
                          end
            "#{dep.name} is not part of the bundle." \
            " Add it to your #{target_file}."
          else
            "can't activate #{dep}, already activated #{spec.full_name}. " \
            "Make sure all dependencies are added to Gemfile."
          end

          e = Gem::LoadError.new(message)
          e.name = dep.name
          e.requirement = dep.requirement
          raise e
        end

        # backwards compatibility shim, see https://github.com/rubygems/bundler/issues/5102
        kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
      end
    end

    # Used to give better error messages when activating specs outside of the current bundle
    def replace_bin_path(specs_by_name)
      gem_class = (class << Gem; self; end)

      redefine_method(gem_class, :find_spec_for_exe) do |gem_name, *args|
        exec_name = args.first
        raise ArgumentError, "you must supply exec_name" unless exec_name

        spec_with_name = specs_by_name[gem_name]
        matching_specs_by_exec_name = specs_by_name.values.select {|s| s.executables.include?(exec_name) }
        spec = matching_specs_by_exec_name.delete(spec_with_name)

        unless spec || !matching_specs_by_exec_name.empty?
          message = "can't find executable #{exec_name} for gem #{gem_name}"
          if spec_with_name.nil?
            message += ". #{gem_name} is not currently included in the bundle, " \
                       "perhaps you meant to add it to your #{Bundler.default_gemfile.basename}?"
          end
          raise Gem::Exception, message
        end

        unless spec
          spec = matching_specs_by_exec_name.shift
          warn \
            "Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
            "You should run `bundle binstub #{gem_name}` " \
            "to work around a system/bundle conflict."
        end

        unless matching_specs_by_exec_name.empty?
          conflicting_names = matching_specs_by_exec_name.map(&:name).join(", ")
          warn \
            "The `#{exec_name}` executable in the `#{spec.name}` gem is being loaded, but it's also present in other gems (#{conflicting_names}).\n" \
            "If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
            "If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
        end

        spec
      end
    end

    # Replace or hook into RubyGems to provide a bundlerized view
    # of the world.
    def replace_entrypoints(specs)
      specs_by_name = add_default_gems_to(specs)

      reverse_rubygems_kernel_mixin
      begin
        # bundled_gems only provide with Ruby 3.3 or later
        require "bundled_gems"
      rescue LoadError
      else
        Gem::BUNDLED_GEMS.replace_require(specs) if Gem::BUNDLED_GEMS.respond_to?(:replace_require)
      end
      replace_gem(specs_by_name)
      stub_rubygems(specs_by_name.values)
      replace_bin_path(specs_by_name)

      Gem.clear_paths
    end

    # Add default gems not already present in specs, and return them as a hash.
    def add_default_gems_to(specs)
      specs_by_name = specs.reduce({}) do |h, s|
        h[s.name] = s
        h
      end

      Bundler.rubygems.default_stubs.each do |stub|
        default_spec = stub.to_spec
        default_spec_name = default_spec.name
        next if specs_by_name.key?(default_spec_name)

        specs_by_name[default_spec_name] = default_spec
      end

      specs_by_name
    end

    def undo_replacements
      @replaced_methods.each do |(sym, klass), method|
        redefine_method(klass, sym, method)
      end
      post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ }
      @replaced_methods.clear
    end

    def redefine_method(klass, method, unbound_method = nil, &block)
      visibility = method_visibility(klass, method)
      begin
        if (instance_method = klass.instance_method(method)) && method != :initialize
          # doing this to ensure we also get private methods
          klass.send(:remove_method, method)
        end
      rescue NameError
        # method isn't defined
        nil
      end
      @replaced_methods[[method, klass]] = instance_method
      if unbound_method
        klass.send(:define_method, method, unbound_method)
        klass.send(visibility, method)
      elsif block
        klass.send(:define_method, method, &block)
        klass.send(visibility, method)
      end
    end

    def method_visibility(klass, method)
      if klass.private_method_defined?(method)
        :private
      elsif klass.protected_method_defined?(method)
        :protected
      else
        :public
      end
    end

    def stub_rubygems(specs)
      Gem::Specification.all = specs

      Gem.post_reset do
        Gem::Specification.all = specs
      end

      redefine_method((class << Gem; self; end), :finish_resolve) do |*|
        []
      end
    end

    def plain_specs
      Gem::Specification._all
    end

    def plain_specs=(specs)
      Gem::Specification.all = specs
    end

    def fetch_specs(remote, name, fetcher)
      require "rubygems/remote_fetcher"
      path = remote.uri.to_s + "#{name}.#{Gem.marshal_version}.gz"
      string = fetcher.fetch_path(path)
      specs = Bundler.safe_load_marshal(string)
      raise MarshalError, "Specs #{name} from #{remote} is expected to be an Array but was unexpected class #{specs.class}" unless specs.is_a?(Array)
      specs
    rescue Gem::RemoteFetcher::FetchError
      # it's okay for prerelease to fail
      raise unless name == "prerelease_specs"
    end

    def fetch_all_remote_specs(remote, gem_remote_fetcher)
      specs = fetch_specs(remote, "specs", gem_remote_fetcher)
      pres = fetch_specs(remote, "prerelease_specs", gem_remote_fetcher) || []

      specs.concat(pres)
    end

    def download_gem(spec, uri, cache_dir, fetcher)
      require "rubygems/remote_fetcher"
      uri = Bundler.settings.mirror_for(uri)
      redacted_uri = Gem::Uri.redact(uri)

      Bundler::Retry.new("download gem from #{redacted_uri}").attempts do
        gem_file_name = spec.file_name
        local_gem_path = File.join cache_dir, gem_file_name
        return if File.exist? local_gem_path

        begin
          remote_gem_path = uri + "gems/#{gem_file_name}"

          SharedHelpers.filesystem_access(local_gem_path) do
            fetcher.cache_update_path remote_gem_path, local_gem_path
          end
        rescue Gem::RemoteFetcher::FetchError
          raise if spec.original_platform == spec.platform

          original_gem_file_name = "#{spec.original_name}.gem"
          raise if gem_file_name == original_gem_file_name

          gem_file_name = original_gem_file_name
          retry
        end
      end
    rescue Gem::RemoteFetcher::FetchError => e
      raise Bundler::HTTPError, "Could not download gem from #{redacted_uri} due to underlying error <#{e.message}>"
    end

    def build(spec, skip_validation = false)
      require "rubygems/package"
      Gem::Package.build(spec, skip_validation)
    end

    def path_separator
      Gem.path_separator
    end

    def all_specs
      SharedHelpers.major_deprecation 2, "Bundler.rubygems.all_specs has been removed in favor of Bundler.rubygems.installed_specs"

      Gem::Specification.stubs.map do |stub|
        StubSpecification.from_stub(stub)
      end
    end

    def installed_specs
      Gem::Specification.stubs.reject(&:default_gem?).map do |stub|
        StubSpecification.from_stub(stub)
      end
    end

    def default_specs
      Gem::Specification.default_stubs.map do |stub|
        StubSpecification.from_stub(stub)
      end
    end

    def find_bundler(version)
      find_name("bundler").find {|s| s.version.to_s == version }
    end

    def find_name(name)
      Gem::Specification.stubs_for(name).map(&:to_spec)
    end

    def default_stubs
      Gem::Specification.default_stubs("*.gemspec")
    end
  end

  def self.rubygems
    @rubygems ||= RubygemsIntegration.new
  end
end
PK)J[�R��9share/gems/gems/bundler-2.6.7/lib/bundler/self_manager.rbnu�[���# frozen_string_literal: true

module Bundler
  #
  # This class handles installing and switching to the version of bundler needed
  # by an application.
  #
  class SelfManager
    def restart_with_locked_bundler_if_needed
      return unless needs_switching? && installed?

      restart_with(restart_version)
    end

    def install_locked_bundler_and_restart_with_it_if_needed
      return unless needs_switching?

      if restart_version == lockfile_version
        Bundler.ui.info \
          "Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
          "Installing Bundler #{lockfile_version} and restarting using that version."
      else
        Bundler.ui.info \
          "Bundler #{current_version} is running, but your configuration was #{restart_version}. " \
          "Installing Bundler #{restart_version} and restarting using that version."
      end

      install_and_restart_with(restart_version)
    end

    def update_bundler_and_restart_with_it_if_needed(target)
      return unless autoswitching_applies?

      spec = resolve_update_version_from(target)
      return unless spec

      version = spec.version

      Bundler.ui.info "Updating bundler to #{version}."

      install(spec)

      restart_with(version)
    end

    private

    def install_and_restart_with(version)
      requirement = Gem::Requirement.new(version)
      spec = find_latest_matching_spec(requirement)

      if spec.nil?
        Bundler.ui.warn "Your lockfile is locked to a version of bundler (#{lockfile_version}) that doesn't exist at https://rubygems.org/. Going on using #{current_version}"
        return
      end

      install(spec)
    rescue StandardError => e
      Bundler.ui.trace e
      Bundler.ui.warn "There was an error installing the locked bundler version (#{lockfile_version}), rerun with the `--verbose` flag for more details. Going on using bundler #{current_version}."
    else
      restart_with(version)
    end

    def install(spec)
      spec.source.install(spec)
    end

    def restart_with(version)
      configured_gem_home = ENV["GEM_HOME"]
      configured_gem_path = ENV["GEM_PATH"]

      # Bundler specs need some stuff to be required before Bundler starts
      # running, for example, for faking the compact index API. However, these
      # flags are lost when we reexec to a different version of Bundler. In the
      # future, we may be able to properly reconstruct the original Ruby
      # invocation (see https://bugs.ruby-lang.org/issues/6648), but for now
      # there's no way to do it, so we need to be explicit about how to re-exec.
      # This may be a feature end users request at some point, but maybe by that
      # time, we have builtin tools to do. So for now, we use an undocumented
      # ENV variable only for our specs.
      bundler_spec_original_cmd = ENV["BUNDLER_SPEC_ORIGINAL_CMD"]
      if bundler_spec_original_cmd
        require "shellwords"
        cmd = [*Shellwords.shellsplit(bundler_spec_original_cmd), *ARGV]
      else
        argv0 = File.exist?($PROGRAM_NAME) ? $PROGRAM_NAME : Process.argv0
        cmd = [argv0, *ARGV]
        cmd.unshift(Gem.ruby) unless File.executable?(argv0)
      end

      Bundler.with_original_env do
        Kernel.exec(
          { "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" => version.to_s },
          *cmd
        )
      end
    end

    def needs_switching?
      autoswitching_applies? &&
        Bundler.settings[:version] != "system" &&
        released?(restart_version) &&
        !running?(restart_version) &&
        !updating?
    end

    def autoswitching_applies?
      ENV["BUNDLER_VERSION"].nil? &&
        ruby_can_restart_with_same_arguments? &&
        SharedHelpers.in_bundle? &&
        lockfile_version
    end

    def resolve_update_version_from(target)
      requirement = Gem::Requirement.new(target)
      update_candidate = find_latest_matching_spec(requirement)

      if update_candidate.nil?
        raise InvalidOption, "The `bundle update --bundler` target version (#{target}) does not exist"
      end

      resolved_version = update_candidate.version
      needs_update = requirement.specific? ? !running?(resolved_version) : running_older_than?(resolved_version)

      return unless needs_update

      update_candidate
    end

    def local_specs
      @local_specs ||= Bundler::Source::Rubygems.new("allow_local" => true).specs.select {|spec| spec.name == "bundler" }
    end

    def remote_specs
      @remote_specs ||= begin
        source = Bundler::Source::Rubygems.new("remotes" => "https://rubygems.org")
        source.remote!
        source.add_dependency_names("bundler")
        source.specs.select(&:matches_current_metadata?)
      end
    end

    def find_latest_matching_spec(requirement)
      local_result = find_latest_matching_spec_from_collection(local_specs, requirement)
      return local_result if local_result && requirement.specific?

      remote_result = find_latest_matching_spec_from_collection(remote_specs, requirement)
      return remote_result if local_result.nil?

      [local_result, remote_result].max
    end

    def find_latest_matching_spec_from_collection(specs, requirement)
      specs.sort.reverse_each.find {|spec| requirement.satisfied_by?(spec.version) }
    end

    def running?(version)
      version == current_version
    end

    def running_older_than?(version)
      current_version < version
    end

    def released?(version)
      !version.to_s.end_with?(".dev")
    end

    def ruby_can_restart_with_same_arguments?
      $PROGRAM_NAME != "-e"
    end

    def updating?
      "update".start_with?(ARGV.first || " ") && ARGV[1..-1].any? {|a| a.start_with?("--bundler") }
    end

    def installed?
      Bundler.configure

      Bundler.rubygems.find_bundler(restart_version.to_s)
    end

    def current_version
      @current_version ||= Gem::Version.new(Bundler::VERSION)
    end

    def lockfile_version
      return @lockfile_version if defined?(@lockfile_version)

      parsed_version = Bundler::LockfileParser.bundled_with
      @lockfile_version = parsed_version ? Gem::Version.new(parsed_version) : nil
    rescue ArgumentError
      @lockfile_version = nil
    end

    def restart_version
      return @restart_version if defined?(@restart_version)
      # BUNDLE_VERSION=x.y.z
      @restart_version = Gem::Version.new(Bundler.settings[:version])
    rescue ArgumentError
      # BUNDLE_VERSION=lockfile
      @restart_version = lockfile_version
    end
  end
end
PK*J[�=�oo=share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-doctor.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-DOCTOR" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-doctor\fR \- Checks the bundle for common problems
.SH "SYNOPSIS"
\fBbundle doctor\fR [\-\-quiet] [\-\-gemfile=GEMFILE]
.SH "DESCRIPTION"
Checks your Gemfile and gem environment for common problems\. If issues are detected, Bundler prints them and exits status 1\. Otherwise, Bundler prints a success message and exits status 0\.
.P
Examples of common problems caught by bundle\-doctor include:
.IP "\(bu" 4
Invalid Bundler settings
.IP "\(bu" 4
Mismatched Ruby versions
.IP "\(bu" 4
Mismatched platforms
.IP "\(bu" 4
Uninstalled gems
.IP "\(bu" 4
Missing dependencies
.IP "" 0
.SH "OPTIONS"
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.TP
\fB\-\-gemfile=GEMFILE\fR
The location of the Gemfile(5) which Bundler should use\. This defaults to a Gemfile(5) in the current working directory\. In general, Bundler will assume that the location of the Gemfile(5) is also the project's root and will try to find \fBGemfile\.lock\fR and \fBvendor/cache\fR relative to this location\.

PK*J[�'�+
+
;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle.1.ronnnu�[���bundle(1) -- Ruby Dependency Management
=======================================

## SYNOPSIS

`bundle` COMMAND [--no-color] [--verbose] [ARGS]

## DESCRIPTION

Bundler manages an `application's dependencies` through its entire life
across many machines systematically and repeatably.

See [the bundler website](https://bundler.io) for information on getting
started, and Gemfile(5) for more information on the `Gemfile` format.

## OPTIONS

* `--no-color`:
  Print all output without color

* `--retry`, `-r`:
  Specify the number of times you wish to attempt network commands

* `--verbose`, `-V`:
  Print out additional logging information

## BUNDLE COMMANDS

We divide `bundle` subcommands into primary commands and utilities:

## PRIMARY COMMANDS

* [`bundle install(1)`](bundle-install.1.html):
  Install the gems specified by the `Gemfile` or `Gemfile.lock`

* [`bundle update(1)`](bundle-update.1.html):
  Update dependencies to their latest versions

* [`bundle cache(1)`](bundle-cache.1.html):
  Package the .gem files required by your application into the
  `vendor/cache` directory (aliases: `bundle package`, `bundle pack`)

* [`bundle exec(1)`](bundle-exec.1.html):
  Execute a script in the current bundle

* [`bundle config(1)`](bundle-config.1.html):
  Specify and read configuration options for Bundler

* [`bundle help(1)`](bundle-help.1.html):
  Display detailed help for each subcommand

## UTILITIES

* [`bundle add(1)`](bundle-add.1.html):
  Add the named gem to the Gemfile and run `bundle install`

* [`bundle binstubs(1)`](bundle-binstubs.1.html):
  Generate binstubs for executables in a gem

* [`bundle check(1)`](bundle-check.1.html):
  Determine whether the requirements for your application are installed
  and available to Bundler

* [`bundle show(1)`](bundle-show.1.html):
  Show the source location of a particular gem in the bundle

* [`bundle outdated(1)`](bundle-outdated.1.html):
  Show all of the outdated gems in the current bundle

* `bundle console(1)` (deprecated):
  Start an IRB session in the current bundle

* [`bundle open(1)`](bundle-open.1.html):
  Open an installed gem in the editor

* [`bundle lock(1)`](bundle-lock.1.html):
  Generate a lockfile for your dependencies

* [`bundle viz(1)`](bundle-viz.1.html) (deprecated):
  Generate a visual representation of your dependencies

* [`bundle init(1)`](bundle-init.1.html):
  Generate a simple `Gemfile`, placed in the current directory

* [`bundle gem(1)`](bundle-gem.1.html):
  Create a simple gem, suitable for development with Bundler

* [`bundle platform(1)`](bundle-platform.1.html):
  Display platform compatibility information

* [`bundle clean(1)`](bundle-clean.1.html):
  Clean up unused gems in your Bundler directory

* [`bundle doctor(1)`](bundle-doctor.1.html):
  Display warnings about common problems

* [`bundle remove(1)`](bundle-remove.1.html):
  Removes gems from the Gemfile

* [`bundle plugin(1)`](bundle-plugin.1.html):
  Manage Bundler plugins

* [`bundle version(1)`](bundle-version.1.html):
  Prints Bundler version information

## PLUGINS

When running a command that isn't listed in PRIMARY COMMANDS or UTILITIES,
Bundler will try to find an executable on your path named `bundler-<command>`
and execute it, passing down any extra arguments to it.

## OBSOLETE

These commands are obsolete and should no longer be used:

* `bundle inject(1)`
PK*J[���3��Dshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-platform.1.ronnnu�[���bundle-platform(1) -- Displays platform compatibility information
=================================================================

## SYNOPSIS

`bundle platform` [--ruby]

## DESCRIPTION

`platform` displays information from your Gemfile, Gemfile.lock, and Ruby
VM about your platform.

For instance, using this Gemfile(5):

    source "https://rubygems.org"

    ruby "3.1.2"

    gem "rack"

If you run `bundle platform` on Ruby 3.1.2, it displays the following output:

    Your platform is: x86_64-linux

    Your app has gems that work on these platforms:
    * arm64-darwin-21
    * ruby
    * x64-mingw-ucrt
    * x86_64-linux

    Your Gemfile specifies a Ruby version requirement:
    * ruby 3.1.2

    Your current platform satisfies the Ruby version requirement.

`platform` lists all the platforms in your `Gemfile.lock` as well as the
`ruby` directive if applicable from your Gemfile(5). It also lets you know
if the `ruby` directive requirement has been met. If `ruby` directive doesn't
match the running Ruby VM, it tells you what part does not.

## OPTIONS

* `--ruby`:
  It will display the ruby directive information, so you don't have to
  parse it from the Gemfile(5).

## SEE ALSO

* [bundle-lock(1)](bundle-lock.1.html)
PK*J[#�c�KK@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-lock.1.ronnnu�[���bundle-lock(1) -- Creates / Updates a lockfile without installing
=================================================================

## SYNOPSIS

`bundle lock` [--update]
              [--bundler[=BUNDLER]]
              [--local]
              [--print]
              [--lockfile=PATH]
              [--full-index]
              [--gemfile=GEMFILE]
              [--add-checksums]
              [--add-platform]
              [--remove-platform]
              [--normalize-platforms]
              [--patch]
              [--minor]
              [--major]
              [--pre]
              [--strict]
              [--conservative]

## DESCRIPTION

Lock the gems specified in Gemfile.

## OPTIONS

* `--update[=<list>]`:
  Ignores the existing lockfile. Resolve then updates lockfile. Taking a list
  of gems or updating all gems if no list is given.

* `--bundler[=BUNDLER]`:
  Update the locked version of bundler to the given version or the latest
  version if no version is given.

* `--local`:
  Do not attempt to connect to `rubygems.org`. Instead, Bundler will use the
  gems already present in Rubygems' cache or in `vendor/cache`. Note that if a
  appropriate platform-specific gem exists on `rubygems.org` it will not be
  found.

* `--print`:
  Prints the lockfile to STDOUT instead of writing to the file system.

* `--lockfile=LOCKFILE`:
  The path where the lockfile should be written to.

* `--full-index`:
  Fall back to using the single-file index of all gems.

* `--gemfile=GEMFILE`:
  Use the specified gemfile instead of [`Gemfile(5)`][Gemfile(5)].

* `--add-checksums`:
  Add checksums to the lockfile.

* `--add-platform=<list>`:
  Add a new platform to the lockfile, re-resolving for the addition of that
  platform.

* `--remove-platform=<list>`:
  Remove a platform from the lockfile.

* `--normalize-platforms`:
  Normalize lockfile platforms.

* `--patch`:
  If updating, prefer updating only to next patch version.

* `--minor`:
  If updating, prefer updating only to next minor version.

* `--major`:
  If updating, prefer updating to next major version (default).

* `--pre`:
  If updating, always choose the highest allowed version, regardless of prerelease status.

* `--strict`:
  If updating, do not allow any gem to be updated past latest --patch | --minor | --major.

* `--conservative`:
  If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated.

## UPDATING ALL GEMS

If you run `bundle lock` with `--update` option without list of gems, bundler will
ignore any previously installed gems and resolve all dependencies again based
on the latest versions of all gems available in the sources.

## UPDATING A LIST OF GEMS

Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of
the gems that you specified locked to the versions in the `Gemfile.lock`.

For instance, you only want to update `nokogiri`, run `bundle lock --update nokogiri`.

Bundler will update `nokogiri` and any of its dependencies, but leave the rest of the
gems that you specified locked to the versions in the `Gemfile.lock`.

## SUPPORTING OTHER PLATFORMS

If you want your bundle to support platforms other than the one you're running
locally, you can run `bundle lock --add-platform PLATFORM` to add PLATFORM to
the lockfile, force bundler to re-resolve and consider the new platform when
picking gems, all without needing to have a machine that matches PLATFORM handy
to install those platform-specific gems on.

For a full explanation of gem platforms, see `gem help platform`.

## PATCH LEVEL OPTIONS

See [bundle update(1)](bundle-update.1.html) for details.
PK*J[$��$DD;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-exec.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-EXEC" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
.SH "SYNOPSIS"
\fBbundle exec\fR [\-\-keep\-file\-descriptors] [\-\-gemfile=GEMFILE] \fIcommand\fR
.SH "DESCRIPTION"
This command executes the command, making all gems specified in the [\fBGemfile(5)\fR][Gemfile(5)] available to \fBrequire\fR in Ruby programs\.
.P
Essentially, if you would normally have run something like \fBrspec spec/my_spec\.rb\fR, and you want to use the gems specified in the [\fBGemfile(5)\fR][Gemfile(5)] and installed via bundle install(1) \fIbundle\-install\.1\.html\fR, you should run \fBbundle exec rspec spec/my_spec\.rb\fR\.
.P
Note that \fBbundle exec\fR does not require that an executable is available on your shell's \fB$PATH\fR\.
.SH "OPTIONS"
.TP
\fB\-\-keep\-file\-descriptors\fR
Passes all file descriptors to the new processes\. Default is true from bundler version 2\.2\.26\. Setting it to false is now deprecated\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of [\fBGemfile(5)\fR][Gemfile(5)]\.
.SH "BUNDLE INSTALL \-\-BINSTUBS"
If you use the \fB\-\-binstubs\fR flag in bundle install(1) \fIbundle\-install\.1\.html\fR, Bundler will automatically create a directory (which defaults to \fBapp_root/bin\fR) containing all of the executables available from gems in the bundle\.
.P
After using \fB\-\-binstubs\fR, \fBbin/rspec spec/my_spec\.rb\fR is identical to \fBbundle exec rspec spec/my_spec\.rb\fR\.
.SH "ENVIRONMENT MODIFICATIONS"
\fBbundle exec\fR makes a number of changes to the shell environment, then executes the command you specify in full\.
.IP "\(bu" 4
make sure that it's still possible to shell out to \fBbundle\fR from inside a command invoked by \fBbundle exec\fR (using \fB$BUNDLE_BIN_PATH\fR)
.IP "\(bu" 4
put the directory containing executables (like \fBrails\fR, \fBrspec\fR, \fBrackup\fR) for your bundle on \fB$PATH\fR
.IP "\(bu" 4
make sure that if bundler is invoked in the subshell, it uses the same \fBGemfile\fR (by setting \fBBUNDLE_GEMFILE\fR)
.IP "\(bu" 4
add \fB\-rbundler/setup\fR to \fB$RUBYOPT\fR, which makes sure that Ruby programs invoked in the subshell can see the gems in the bundle
.IP "" 0
.P
It also modifies Rubygems:
.IP "\(bu" 4
disallow loading additional gems not in the bundle
.IP "\(bu" 4
modify the \fBgem\fR method to be a no\-op if a gem matching the requirements is in the bundle, and to raise a \fBGem::LoadError\fR if it's not
.IP "\(bu" 4
Define \fBGem\.refresh\fR to be a no\-op, since the source index is always frozen when using bundler, and to prevent gems from the system leaking into the environment
.IP "\(bu" 4
Override \fBGem\.bin_path\fR to use the gems in the bundle, making system executables work
.IP "\(bu" 4
Add all gems in the bundle into Gem\.loaded_specs
.IP "" 0
.P
Finally, \fBbundle exec\fR also implicitly modifies \fBGemfile\.lock\fR if the lockfile and the Gemfile do not match\. Bundler needs the Gemfile to determine things such as a gem's groups, \fBautorequire\fR, and platforms, etc\., and that information isn't stored in the lockfile\. The Gemfile and lockfile must be synced in order to \fBbundle exec\fR successfully, so \fBbundle exec\fR updates the lockfile beforehand\.
.SS "Loading"
By default, when attempting to \fBbundle exec\fR to a file with a ruby shebang, Bundler will \fBKernel\.load\fR that file instead of using \fBKernel\.exec\fR\. For the vast majority of cases, this is a performance improvement\. In a rare few cases, this could cause some subtle side\-effects (such as dependence on the exact contents of \fB$0\fR or \fB__FILE__\fR) and the optimization can be disabled by enabling the \fBdisable_exec_load\fR setting\.
.SS "Shelling out"
Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \fBwith_unbundled_env\fR method with a block\. Any subshells created inside the block will be given the environment present before Bundler was activated\. For example, Homebrew commands run Ruby, but don't work inside a bundle:
.IP "" 4
.nf
Bundler\.with_unbundled_env do
  `brew install wget`
end
.fi
.IP "" 0
.P
Using \fBwith_unbundled_env\fR is also necessary if you are shelling out to a different bundle\. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use \fBwith_unbundled_env\fR\.
.IP "" 4
.nf
Bundler\.with_unbundled_env do
  Dir\.chdir "/other/bundler/project" do
    `bundle exec \./script`
  end
end
.fi
.IP "" 0
.P
Bundler provides convenience helpers that wrap \fBsystem\fR and \fBexec\fR, and they can be used like this:
.IP "" 4
.nf
Bundler\.unbundled_system('brew install wget')
Bundler\.unbundled_exec('brew install wget')
.fi
.IP "" 0
.SH "RUBYGEMS PLUGINS"
At present, the Rubygems plugin system requires all files named \fBrubygems_plugin\.rb\fR on the load path of \fIany\fR installed gem when any Ruby code requires \fBrubygems\.rb\fR\. This includes executables installed into the system, like \fBrails\fR, \fBrackup\fR, and \fBrspec\fR\.
.P
Since Rubygems plugins can contain arbitrary Ruby code, they commonly end up activating themselves or their dependencies\.
.P
For instance, the \fBgemcutter 0\.5\fR gem depended on \fBjson_pure\fR\. If you had that version of gemcutter installed (even if you \fIalso\fR had a newer version without this problem), Rubygems would activate \fBgemcutter 0\.5\fR and \fBjson_pure <latest>\fR\.
.P
If your Gemfile(5) also contained \fBjson_pure\fR (or a gem with a dependency on \fBjson_pure\fR), the latest version on your system might conflict with the version in your Gemfile(5), or the snapshot version in your \fBGemfile\.lock\fR\.
.P
If this happens, bundler will say:
.IP "" 4
.nf
You have already activated json_pure 1\.4\.6 but your Gemfile
requires json_pure 1\.4\.3\. Consider using bundle exec\.
.fi
.IP "" 0
.P
In this situation, you almost certainly want to remove the underlying gem with the problematic gem plugin\. In general, the authors of these plugins (in this case, the \fBgemcutter\fR gem) have released newer versions that are more careful in their plugins\.
.P
You can find a list of all the gems containing gem plugins by running
.IP "" 4
.nf
ruby \-e "puts Gem\.find_files('rubygems_plugin\.rb')"
.fi
.IP "" 0
.P
At the very least, you should remove all but the newest version of each gem plugin, and also remove all gem plugins that you aren't using (\fBgem uninstall gem_name\fR)\.
PK*J[��|m33Bshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-update.1.ronnnu�[���bundle-update(1) -- Update your gems to the latest available versions
=====================================================================

## SYNOPSIS

`bundle update` <*gems> [--all]
                        [--group=NAME]
                        [--source=NAME]
                        [--local]
                        [--ruby]
                        [--bundler[=VERSION]]
                        [--full-index]
                        [--gemfile=GEMFILE]
                        [--jobs=NUMBER]
                        [--quiet]
                        [--patch|--minor|--major]
                        [--pre]
                        [--redownload]
                        [--strict]
                        [--conservative]

## DESCRIPTION

Update the gems specified (all gems, if `--all` flag is used), ignoring
the previously installed gems specified in the `Gemfile.lock`. In
general, you should use [bundle install(1)](bundle-install.1.html) to install the same exact
gems and versions across machines.

You would use `bundle update` to explicitly update the version of a
gem.

## OPTIONS

* `--all`:
  Update all gems specified in Gemfile.

* `--group=<list>`, `-g=<list>`:
  Only update the gems in the specified group. For instance, you can update all gems
  in the development group with `bundle update --group development`. You can also
  call `bundle update rails --group test` to update the rails gem and all gems in
  the test group, for example.

* `--source=<list>`:
  The name of a `:git` or `:path` source used in the Gemfile(5). For
  instance, with a `:git` source of `http://github.com/rails/rails.git`,
  you would call `bundle update --source rails`

* `--local`:
  Do not attempt to fetch gems remotely and use the gem cache instead.

* `--ruby`:
  Update the locked version of Ruby to the current version of Ruby.

* `--bundler[=BUNDLER]`:
  Update the locked version of bundler to the invoked bundler version.

* `--full-index`:
  Fall back to using the single-file index of all gems.

* `--gemfile=GEMFILE`:
  Use the specified gemfile instead of [`Gemfile(5)`][Gemfile(5)].

* `--jobs=<number>`, `-j=<number>`:
  Specify the number of jobs to run in parallel. The default is the number of
  available processors.

* `--retry=[<number>]`:
  Retry failed network or git requests for <number> times.

* `--quiet`:
  Only output warnings and errors.

* `--redownload`, `--force`:
  Force downloading every gem.

* `--patch`:
  Prefer updating only to next patch version.

* `--minor`:
  Prefer updating only to next minor version.

* `--major`:
  Prefer updating to next major version (default).

* `--pre`:
  Always choose the highest allowed version, regardless of prerelease status.

* `--strict`:
  Do not allow any gem to be updated past latest `--patch` | `--minor` | `--major`.

* `--conservative`:
  Use bundle install conservative update behavior and do not allow indirect dependencies to be updated.

## UPDATING ALL GEMS

If you run `bundle update --all`, bundler will ignore
any previously installed gems and resolve all dependencies again
based on the latest versions of all gems available in the sources.

Consider the following Gemfile(5):

    source "https://rubygems.org"

    gem "rails", "3.0.0.rc"
    gem "nokogiri"

When you run [bundle install(1)](bundle-install.1.html) the first time, bundler will resolve
all of the dependencies, all the way down, and install what you need:

    Fetching gem metadata from https://rubygems.org/.........
    Resolving dependencies...
    Installing builder 2.1.2
    Installing abstract 1.0.0
    Installing rack 1.2.8
    Using bundler 1.7.6
    Installing rake 10.4.0
    Installing polyglot 0.3.5
    Installing mime-types 1.25.1
    Installing i18n 0.4.2
    Installing mini_portile 0.6.1
    Installing tzinfo 0.3.42
    Installing rack-mount 0.6.14
    Installing rack-test 0.5.7
    Installing treetop 1.4.15
    Installing thor 0.14.6
    Installing activesupport 3.0.0.rc
    Installing erubis 2.6.6
    Installing activemodel 3.0.0.rc
    Installing arel 0.4.0
    Installing mail 2.2.20
    Installing activeresource 3.0.0.rc
    Installing actionpack 3.0.0.rc
    Installing activerecord 3.0.0.rc
    Installing actionmailer 3.0.0.rc
    Installing railties 3.0.0.rc
    Installing rails 3.0.0.rc
    Installing nokogiri 1.6.5

    Bundle complete! 2 Gemfile dependencies, 26 gems total.
    Use `bundle show [gemname]` to see where a bundled gem is installed.

As you can see, even though you have two gems in the Gemfile(5), your application
needs 26 different gems in order to run. Bundler remembers the exact versions
it installed in `Gemfile.lock`. The next time you run [bundle install(1)](bundle-install.1.html), bundler skips
the dependency resolution and installs the same gems as it installed last time.

After checking in the `Gemfile.lock` into version control and cloning it on another
machine, running [bundle install(1)](bundle-install.1.html) will _still_ install the gems that you installed
last time. You don't need to worry that a new release of `erubis` or `mail` changes
the gems you use.

However, from time to time, you might want to update the gems you are using to the
newest versions that still match the gems in your Gemfile(5).

To do this, run `bundle update --all`, which will ignore the `Gemfile.lock`, and resolve
all the dependencies again. Keep in mind that this process can result in a significantly
different set of the 25 gems, based on the requirements of new gems that the gem
authors released since the last time you ran `bundle update --all`.

## UPDATING A LIST OF GEMS

Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the
gems that you specified locked to the versions in the `Gemfile.lock`.

For instance, in the scenario above, imagine that `nokogiri` releases version `1.4.4`, and
you want to update it _without_ updating Rails and all of its dependencies. To do this,
run `bundle update nokogiri`.

Bundler will update `nokogiri` and any of its dependencies, but leave alone Rails and
its dependencies.

## OVERLAPPING DEPENDENCIES

Sometimes, multiple gems declared in your Gemfile(5) are satisfied by the same
second-level dependency. For instance, consider the case of `thin` and
`rack-perftools-profiler`.

    source "https://rubygems.org"

    gem "thin"
    gem "rack-perftools-profiler"

The `thin` gem depends on `rack >= 1.0`, while `rack-perftools-profiler` depends
on `rack ~> 1.0`. If you run bundle install, you get:

    Fetching source index for https://rubygems.org/
    Installing daemons (1.1.0)
    Installing eventmachine (0.12.10) with native extensions
    Installing open4 (1.0.1)
    Installing perftools.rb (0.4.7) with native extensions
    Installing rack (1.2.1)
    Installing rack-perftools_profiler (0.0.2)
    Installing thin (1.2.7) with native extensions
    Using bundler (1.0.0.rc.3)

In this case, the two gems have their own set of dependencies, but they share
`rack` in common. If you run `bundle update thin`, bundler will update `daemons`,
`eventmachine` and `rack`, which are dependencies of `thin`, but not `open4` or
`perftools.rb`, which are dependencies of `rack-perftools_profiler`. Note that
`bundle update thin` will update `rack` even though it's _also_ a dependency of
`rack-perftools_profiler`.

In short, by default, when you update a gem using `bundle update`, bundler will
update all dependencies of that gem, including those that are also dependencies
of another gem.

To prevent updating indirect dependencies, prior to version 1.14 the only option
was the `CONSERVATIVE UPDATING` behavior in [bundle install(1)](bundle-install.1.html):

In this scenario, updating the `thin` version manually in the Gemfile(5),
and then running [bundle install(1)](bundle-install.1.html) will only update `daemons` and `eventmachine`,
but not `rack`. For more information, see the `CONSERVATIVE UPDATING` section
of [bundle install(1)](bundle-install.1.html).

Starting with 1.14, specifying the `--conservative` option will also prevent indirect
dependencies from being updated.

## PATCH LEVEL OPTIONS

Version 1.14 introduced 4 patch-level options that will influence how gem
versions are resolved. One of the following options can be used: `--patch`,
`--minor` or `--major`. `--strict` can be added to further influence resolution.

* `--patch`:
  Prefer updating only to next patch version.

* `--minor`:
  Prefer updating only to next minor version.

* `--major`:
  Prefer updating to next major version (default).

* `--strict`:
  Do not allow any gem to be updated past latest `--patch` | `--minor` | `--major`.

When Bundler is resolving what versions to use to satisfy declared
requirements in the Gemfile or in parent gems, it looks up all
available versions, filters out any versions that don't satisfy
the requirement, and then, by default, sorts them from newest to
oldest, considering them in that order.

Providing one of the patch level options (e.g. `--patch`) changes the
sort order of the satisfying versions, causing Bundler to consider the
latest `--patch` or `--minor` version available before other versions.
Note that versions outside the stated patch level could still be
resolved to if necessary to find a suitable dependency graph.

For example, if gem 'foo' is locked at 1.0.2, with no gem requirement
defined in the Gemfile, and versions 1.0.3, 1.0.4, 1.1.0, 1.1.1, 2.0.0
all exist, the default order of preference by default (`--major`) will
be "2.0.0, 1.1.1, 1.1.0, 1.0.4, 1.0.3, 1.0.2".

If the `--patch` option is used, the order of preference will change to
"1.0.4, 1.0.3, 1.0.2, 1.1.1, 1.1.0, 2.0.0".

If the `--minor` option is used, the order of preference will change to
"1.1.1, 1.1.0, 1.0.4, 1.0.3, 1.0.2, 2.0.0".

Combining the `--strict` option with any of the patch level options
will remove any versions beyond the scope of the patch level option,
to ensure that no gem is updated that far.

To continue the previous example, if both `--patch` and `--strict`
options are used, the available versions for resolution would be
"1.0.4, 1.0.3, 1.0.2". If `--minor` and `--strict` are used, it would
be "1.1.1, 1.1.0, 1.0.4, 1.0.3, 1.0.2".

Gem requirements as defined in the Gemfile will still be the first
determining factor for what versions are available. If the gem
requirement for `foo` in the Gemfile is '~> 1.0', that will accomplish
the same thing as providing the `--minor` and `--strict` options.

## PATCH LEVEL EXAMPLES

Given the following gem specifications:

    foo 1.4.3, requires: ~> bar 2.0
    foo 1.4.4, requires: ~> bar 2.0
    foo 1.4.5, requires: ~> bar 2.1
    foo 1.5.0, requires: ~> bar 2.1
    foo 1.5.1, requires: ~> bar 3.0
    bar with versions 2.0.3, 2.0.4, 2.1.0, 2.1.1, 3.0.0

Gemfile:

    gem 'foo'

Gemfile.lock:

    foo (1.4.3)
      bar (~> 2.0)
    bar (2.0.3)

Cases:

    #  Command Line                     Result
    ------------------------------------------------------------
    1  bundle update --patch            'foo 1.4.5', 'bar 2.1.1'
    2  bundle update --patch foo        'foo 1.4.5', 'bar 2.1.1'
    3  bundle update --minor            'foo 1.5.1', 'bar 3.0.0'
    4  bundle update --minor --strict   'foo 1.5.0', 'bar 2.1.1'
    5  bundle update --patch --strict   'foo 1.4.4', 'bar 2.0.4'

In case 1, bar is upgraded to 2.1.1, a minor version increase, because
the dependency from foo 1.4.5 required it.

In case 2, only foo is requested to be unlocked, but bar is also
allowed to move because it's not a declared dependency in the Gemfile.

In case 3, bar goes up a whole major release, because a minor increase
is preferred now for foo, and when it goes to 1.5.1, it requires 3.0.0
of bar.

In case 4, foo is preferred up to a minor version, but 1.5.1 won't work
because the --strict flag removes bar 3.0.0 from consideration since
it's a major increment.

In case 5, both foo and bar have any minor or major increments removed
from consideration because of the --strict flag, so the most they can
move is up to 1.4.4 and 2.0.4.

## RECOMMENDED WORKFLOW

In general, when working with an application managed with bundler, you should
use the following workflow:

* After you create your Gemfile(5) for the first time, run

    $ bundle install

* Check the resulting `Gemfile.lock` into version control

    $ git add Gemfile.lock

* When checking out this repository on another development machine, run

    $ bundle install

* When checking out this repository on a deployment machine, run

    $ bundle install --deployment

* After changing the Gemfile(5) to reflect a new or update dependency, run

    $ bundle install

* Make sure to check the updated `Gemfile.lock` into version control

    $ git add Gemfile.lock

* If [bundle install(1)](bundle-install.1.html) reports a conflict, manually update the specific
  gems that you changed in the Gemfile(5)

    $ bundle update rails thin

* If you want to update all the gems to the latest possible versions that
  still match the gems listed in the Gemfile(5), run

    $ bundle update --all
PK*J[iI�rr=share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-plugin.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-PLUGIN" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-plugin\fR \- Manage Bundler plugins
.SH "SYNOPSIS"
\fBbundle plugin\fR install PLUGINS [\-\-source=\fISOURCE\fR] [\-\-version=\fIversion\fR] [\-\-git=\fIgit\-url\fR] [\-\-branch=\fIbranch\fR|\-\-ref=\fIrev\fR] [\-\-path=\fIpath\fR]
.br
\fBbundle plugin\fR uninstall PLUGINS
.br
\fBbundle plugin\fR list
.br
\fBbundle plugin\fR help [COMMAND]
.SH "DESCRIPTION"
You can install, uninstall, and list plugin(s) with this command to extend functionalities of Bundler\.
.SH "SUB\-COMMANDS"
.SS "install"
Install the given plugin(s)\.
.TP
\fBbundle plugin install bundler\-graph\fR
Install bundler\-graph gem from globally configured sources (defaults to RubyGems\.org)\. The global source, specified in source in Gemfile is ignored\.
.TP
\fBbundle plugin install bundler\-graph \-\-source https://example\.com\fR
Install bundler\-graph gem from example\.com\. The global source, specified in source in Gemfile is not considered\.
.TP
\fBbundle plugin install bundler\-graph \-\-version 0\.2\.1\fR
You can specify the version of the gem via \fB\-\-version\fR\.
.TP
\fBbundle plugin install bundler\-graph \-\-git https://github\.com/rubygems/bundler\-graph\fR
Install bundler\-graph gem from Git repository\. You can use standard Git URLs like:
.IP
\fBssh://[user@]host\.xz[:port]/path/to/repo\.git\fR
.br
\fBhttp[s]://host\.xz[:port]/path/to/repo\.git\fR
.br
\fB/path/to/repo\fR
.br
\fBfile:///path/to/repo\fR
.IP
When you specify \fB\-\-git\fR, you can use \fB\-\-branch\fR or \fB\-\-ref\fR to specify any branch, tag, or commit hash (revision) to use\.
.TP
\fBbundle plugin install bundler\-graph \-\-path \.\./bundler\-graph\fR
Install bundler\-graph gem from a local path\.
.SS "uninstall"
Uninstall the plugin(s) specified in PLUGINS\.
.SS "list"
List the installed plugins and available commands\.
.P
No options\.
.SS "help"
Describe subcommands or one specific subcommand\.
.P
No options\.
.SH "SEE ALSO"
.IP "\(bu" 4
How to write a Bundler plugin \fIhttps://bundler\.io/guides/bundler_plugins\.html\fR
.IP "" 0

PK*J[M�3�@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-fund.1.ronnnu�[���bundle-fund(1) -- Lists information about gems seeking funding assistance
=========================================================================

## SYNOPSIS

`bundle fund` [*OPTIONS*]

## DESCRIPTION

**bundle fund** lists information about gems seeking funding assistance.

## OPTIONS

* `--group=<list>`, `-g=<list>`:
  Fetch funding information for a specific group.

## EXAMPLES

```
# Lists funding information for all gems
bundle fund

# Lists funding information for a specific group
bundle fund --group=security
```
PK*J[�Wj	RR:share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-env.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-ENV" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-env\fR \- Print information about the environment Bundler is running under
.SH "SYNOPSIS"
\fBbundle env\fR
.SH "DESCRIPTION"
Prints information about the environment Bundler is running under\.
PK*J[�(�;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-info.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INFO" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-info\fR \- Show information for the given gem in your bundle
.SH "SYNOPSIS"
\fBbundle info\fR [GEM_NAME] [\-\-path] [\-\-version]
.SH "DESCRIPTION"
Given a gem name present in your bundle, print the basic information about it such as homepage, version, path and summary\.
.SH "OPTIONS"
.TP
\fB\-\-path\fR
Print the path of the given gem
.TP
\fB\-\-version\fR
Print gem version

PK*J[�w.od6d6=share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-update.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-UPDATE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-update\fR \- Update your gems to the latest available versions
.SH "SYNOPSIS"
\fBbundle update\fR \fI*gems\fR [\-\-all] [\-\-group=NAME] [\-\-source=NAME] [\-\-local] [\-\-ruby] [\-\-bundler[=VERSION]] [\-\-full\-index] [\-\-gemfile=GEMFILE] [\-\-jobs=NUMBER] [\-\-quiet] [\-\-patch|\-\-minor|\-\-major] [\-\-pre] [\-\-redownload] [\-\-strict] [\-\-conservative]
.SH "DESCRIPTION"
Update the gems specified (all gems, if \fB\-\-all\fR flag is used), ignoring the previously installed gems specified in the \fBGemfile\.lock\fR\. In general, you should use bundle install(1) \fIbundle\-install\.1\.html\fR to install the same exact gems and versions across machines\.
.P
You would use \fBbundle update\fR to explicitly update the version of a gem\.
.SH "OPTIONS"
.TP
\fB\-\-all\fR
Update all gems specified in Gemfile\.
.TP
\fB\-\-group=<list>\fR, \fB\-g=<list>\fR
Only update the gems in the specified group\. For instance, you can update all gems in the development group with \fBbundle update \-\-group development\fR\. You can also call \fBbundle update rails \-\-group test\fR to update the rails gem and all gems in the test group, for example\.
.TP
\fB\-\-source=<list>\fR
The name of a \fB:git\fR or \fB:path\fR source used in the Gemfile(5)\. For instance, with a \fB:git\fR source of \fBhttp://github\.com/rails/rails\.git\fR, you would call \fBbundle update \-\-source rails\fR
.TP
\fB\-\-local\fR
Do not attempt to fetch gems remotely and use the gem cache instead\.
.TP
\fB\-\-ruby\fR
Update the locked version of Ruby to the current version of Ruby\.
.TP
\fB\-\-bundler[=BUNDLER]\fR
Update the locked version of bundler to the invoked bundler version\.
.TP
\fB\-\-full\-index\fR
Fall back to using the single\-file index of all gems\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of [\fBGemfile(5)\fR][Gemfile(5)]\.
.TP
\fB\-\-jobs=<number>\fR, \fB\-j=<number>\fR
Specify the number of jobs to run in parallel\. The default is the number of available processors\.
.TP
\fB\-\-retry=[<number>]\fR
Retry failed network or git requests for \fInumber\fR times\.
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.TP
\fB\-\-redownload\fR, \fB\-\-force\fR
Force downloading every gem\.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.TP
\fB\-\-pre\fR
Always choose the highest allowed version, regardless of prerelease status\.
.TP
\fB\-\-strict\fR
Do not allow any gem to be updated past latest \fB\-\-patch\fR | \fB\-\-minor\fR | \fB\-\-major\fR\.
.TP
\fB\-\-conservative\fR
Use bundle install conservative update behavior and do not allow indirect dependencies to be updated\.
.SH "UPDATING ALL GEMS"
If you run \fBbundle update \-\-all\fR, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
.P
Consider the following Gemfile(5):
.IP "" 4
.nf
source "https://rubygems\.org"

gem "rails", "3\.0\.0\.rc"
gem "nokogiri"
.fi
.IP "" 0
.P
When you run bundle install(1) \fIbundle\-install\.1\.html\fR the first time, bundler will resolve all of the dependencies, all the way down, and install what you need:
.IP "" 4
.nf
Fetching gem metadata from https://rubygems\.org/\|\.\|\.\|\.\|\.\|\.\|\.\|\.\|\.\|\.
Resolving dependencies\|\.\|\.\|\.
Installing builder 2\.1\.2
Installing abstract 1\.0\.0
Installing rack 1\.2\.8
Using bundler 1\.7\.6
Installing rake 10\.4\.0
Installing polyglot 0\.3\.5
Installing mime\-types 1\.25\.1
Installing i18n 0\.4\.2
Installing mini_portile 0\.6\.1
Installing tzinfo 0\.3\.42
Installing rack\-mount 0\.6\.14
Installing rack\-test 0\.5\.7
Installing treetop 1\.4\.15
Installing thor 0\.14\.6
Installing activesupport 3\.0\.0\.rc
Installing erubis 2\.6\.6
Installing activemodel 3\.0\.0\.rc
Installing arel 0\.4\.0
Installing mail 2\.2\.20
Installing activeresource 3\.0\.0\.rc
Installing actionpack 3\.0\.0\.rc
Installing activerecord 3\.0\.0\.rc
Installing actionmailer 3\.0\.0\.rc
Installing railties 3\.0\.0\.rc
Installing rails 3\.0\.0\.rc
Installing nokogiri 1\.6\.5

Bundle complete! 2 Gemfile dependencies, 26 gems total\.
Use `bundle show [gemname]` to see where a bundled gem is installed\.
.fi
.IP "" 0
.P
As you can see, even though you have two gems in the Gemfile(5), your application needs 26 different gems in order to run\. Bundler remembers the exact versions it installed in \fBGemfile\.lock\fR\. The next time you run bundle install(1) \fIbundle\-install\.1\.html\fR, bundler skips the dependency resolution and installs the same gems as it installed last time\.
.P
After checking in the \fBGemfile\.lock\fR into version control and cloning it on another machine, running bundle install(1) \fIbundle\-install\.1\.html\fR will \fIstill\fR install the gems that you installed last time\. You don't need to worry that a new release of \fBerubis\fR or \fBmail\fR changes the gems you use\.
.P
However, from time to time, you might want to update the gems you are using to the newest versions that still match the gems in your Gemfile(5)\.
.P
To do this, run \fBbundle update \-\-all\fR, which will ignore the \fBGemfile\.lock\fR, and resolve all the dependencies again\. Keep in mind that this process can result in a significantly different set of the 25 gems, based on the requirements of new gems that the gem authors released since the last time you ran \fBbundle update \-\-all\fR\.
.SH "UPDATING A LIST OF GEMS"
Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.P
For instance, in the scenario above, imagine that \fBnokogiri\fR releases version \fB1\.4\.4\fR, and you want to update it \fIwithout\fR updating Rails and all of its dependencies\. To do this, run \fBbundle update nokogiri\fR\.
.P
Bundler will update \fBnokogiri\fR and any of its dependencies, but leave alone Rails and its dependencies\.
.SH "OVERLAPPING DEPENDENCIES"
Sometimes, multiple gems declared in your Gemfile(5) are satisfied by the same second\-level dependency\. For instance, consider the case of \fBthin\fR and \fBrack\-perftools\-profiler\fR\.
.IP "" 4
.nf
source "https://rubygems\.org"

gem "thin"
gem "rack\-perftools\-profiler"
.fi
.IP "" 0
.P
The \fBthin\fR gem depends on \fBrack >= 1\.0\fR, while \fBrack\-perftools\-profiler\fR depends on \fBrack ~> 1\.0\fR\. If you run bundle install, you get:
.IP "" 4
.nf
Fetching source index for https://rubygems\.org/
Installing daemons (1\.1\.0)
Installing eventmachine (0\.12\.10) with native extensions
Installing open4 (1\.0\.1)
Installing perftools\.rb (0\.4\.7) with native extensions
Installing rack (1\.2\.1)
Installing rack\-perftools_profiler (0\.0\.2)
Installing thin (1\.2\.7) with native extensions
Using bundler (1\.0\.0\.rc\.3)
.fi
.IP "" 0
.P
In this case, the two gems have their own set of dependencies, but they share \fBrack\fR in common\. If you run \fBbundle update thin\fR, bundler will update \fBdaemons\fR, \fBeventmachine\fR and \fBrack\fR, which are dependencies of \fBthin\fR, but not \fBopen4\fR or \fBperftools\.rb\fR, which are dependencies of \fBrack\-perftools_profiler\fR\. Note that \fBbundle update thin\fR will update \fBrack\fR even though it's \fIalso\fR a dependency of \fBrack\-perftools_profiler\fR\.
.P
In short, by default, when you update a gem using \fBbundle update\fR, bundler will update all dependencies of that gem, including those that are also dependencies of another gem\.
.P
To prevent updating indirect dependencies, prior to version 1\.14 the only option was the \fBCONSERVATIVE UPDATING\fR behavior in bundle install(1) \fIbundle\-install\.1\.html\fR:
.P
In this scenario, updating the \fBthin\fR version manually in the Gemfile(5), and then running bundle install(1) \fIbundle\-install\.1\.html\fR will only update \fBdaemons\fR and \fBeventmachine\fR, but not \fBrack\fR\. For more information, see the \fBCONSERVATIVE UPDATING\fR section of bundle install(1) \fIbundle\-install\.1\.html\fR\.
.P
Starting with 1\.14, specifying the \fB\-\-conservative\fR option will also prevent indirect dependencies from being updated\.
.SH "PATCH LEVEL OPTIONS"
Version 1\.14 introduced 4 patch\-level options that will influence how gem versions are resolved\. One of the following options can be used: \fB\-\-patch\fR, \fB\-\-minor\fR or \fB\-\-major\fR\. \fB\-\-strict\fR can be added to further influence resolution\.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.TP
\fB\-\-strict\fR
Do not allow any gem to be updated past latest \fB\-\-patch\fR | \fB\-\-minor\fR | \fB\-\-major\fR\.
.P
When Bundler is resolving what versions to use to satisfy declared requirements in the Gemfile or in parent gems, it looks up all available versions, filters out any versions that don't satisfy the requirement, and then, by default, sorts them from newest to oldest, considering them in that order\.
.P
Providing one of the patch level options (e\.g\. \fB\-\-patch\fR) changes the sort order of the satisfying versions, causing Bundler to consider the latest \fB\-\-patch\fR or \fB\-\-minor\fR version available before other versions\. Note that versions outside the stated patch level could still be resolved to if necessary to find a suitable dependency graph\.
.P
For example, if gem 'foo' is locked at 1\.0\.2, with no gem requirement defined in the Gemfile, and versions 1\.0\.3, 1\.0\.4, 1\.1\.0, 1\.1\.1, 2\.0\.0 all exist, the default order of preference by default (\fB\-\-major\fR) will be "2\.0\.0, 1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2"\.
.P
If the \fB\-\-patch\fR option is used, the order of preference will change to "1\.0\.4, 1\.0\.3, 1\.0\.2, 1\.1\.1, 1\.1\.0, 2\.0\.0"\.
.P
If the \fB\-\-minor\fR option is used, the order of preference will change to "1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2, 2\.0\.0"\.
.P
Combining the \fB\-\-strict\fR option with any of the patch level options will remove any versions beyond the scope of the patch level option, to ensure that no gem is updated that far\.
.P
To continue the previous example, if both \fB\-\-patch\fR and \fB\-\-strict\fR options are used, the available versions for resolution would be "1\.0\.4, 1\.0\.3, 1\.0\.2"\. If \fB\-\-minor\fR and \fB\-\-strict\fR are used, it would be "1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2"\.
.P
Gem requirements as defined in the Gemfile will still be the first determining factor for what versions are available\. If the gem requirement for \fBfoo\fR in the Gemfile is '~> 1\.0', that will accomplish the same thing as providing the \fB\-\-minor\fR and \fB\-\-strict\fR options\.
.SH "PATCH LEVEL EXAMPLES"
Given the following gem specifications:
.IP "" 4
.nf
foo 1\.4\.3, requires: ~> bar 2\.0
foo 1\.4\.4, requires: ~> bar 2\.0
foo 1\.4\.5, requires: ~> bar 2\.1
foo 1\.5\.0, requires: ~> bar 2\.1
foo 1\.5\.1, requires: ~> bar 3\.0
bar with versions 2\.0\.3, 2\.0\.4, 2\.1\.0, 2\.1\.1, 3\.0\.0
.fi
.IP "" 0
.P
Gemfile:
.IP "" 4
.nf
gem 'foo'
.fi
.IP "" 0
.P
Gemfile\.lock:
.IP "" 4
.nf
foo (1\.4\.3)
  bar (~> 2\.0)
bar (2\.0\.3)
.fi
.IP "" 0
.P
Cases:
.IP "" 4
.nf
#  Command Line                     Result
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
1  bundle update \-\-patch            'foo 1\.4\.5', 'bar 2\.1\.1'
2  bundle update \-\-patch foo        'foo 1\.4\.5', 'bar 2\.1\.1'
3  bundle update \-\-minor            'foo 1\.5\.1', 'bar 3\.0\.0'
4  bundle update \-\-minor \-\-strict   'foo 1\.5\.0', 'bar 2\.1\.1'
5  bundle update \-\-patch \-\-strict   'foo 1\.4\.4', 'bar 2\.0\.4'
.fi
.IP "" 0
.P
In case 1, bar is upgraded to 2\.1\.1, a minor version increase, because the dependency from foo 1\.4\.5 required it\.
.P
In case 2, only foo is requested to be unlocked, but bar is also allowed to move because it's not a declared dependency in the Gemfile\.
.P
In case 3, bar goes up a whole major release, because a minor increase is preferred now for foo, and when it goes to 1\.5\.1, it requires 3\.0\.0 of bar\.
.P
In case 4, foo is preferred up to a minor version, but 1\.5\.1 won't work because the \-\-strict flag removes bar 3\.0\.0 from consideration since it's a major increment\.
.P
In case 5, both foo and bar have any minor or major increments removed from consideration because of the \-\-strict flag, so the most they can move is up to 1\.4\.4 and 2\.0\.4\.
.SH "RECOMMENDED WORKFLOW"
In general, when working with an application managed with bundler, you should use the following workflow:
.IP "\(bu" 4
After you create your Gemfile(5) for the first time, run
.IP
$ bundle install
.IP "\(bu" 4
Check the resulting \fBGemfile\.lock\fR into version control
.IP
$ git add Gemfile\.lock
.IP "\(bu" 4
When checking out this repository on another development machine, run
.IP
$ bundle install
.IP "\(bu" 4
When checking out this repository on a deployment machine, run
.IP
$ bundle install \-\-deployment
.IP "\(bu" 4
After changing the Gemfile(5) to reflect a new or update dependency, run
.IP
$ bundle install
.IP "\(bu" 4
Make sure to check the updated \fBGemfile\.lock\fR into version control
.IP
$ git add Gemfile\.lock
.IP "\(bu" 4
If bundle install(1) \fIbundle\-install\.1\.html\fR reports a conflict, manually update the specific gems that you changed in the Gemfile(5)
.IP
$ bundle update rails thin
.IP "\(bu" 4
If you want to update all the gems to the latest possible versions that still match the gems listed in the Gemfile(5), run
.IP
$ bundle update \-\-all
.IP "" 0

PK*J[w���	�	?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-add.1.ronnnu�[���bundle-add(1) -- Add gem to the Gemfile and run bundle install
==============================================================

## SYNOPSIS

`bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE]
           [--path=PATH] [--git=GIT|--github=GITHUB] [--branch=BRANCH] [--ref=REF]
           [--quiet] [--skip-install] [--strict|--optimistic]

## DESCRIPTION

Adds the named gem to the [`Gemfile(5)`][Gemfile(5)] and run `bundle install`.
`bundle install` can be avoided by using the flag `--skip-install`.

## OPTIONS

* `--version=VERSION`, `-v=VERSION`:
  Specify version requirements(s) for the added gem.

* `--group=GROUP`, `-g=GROUP`:
  Specify the group(s) for the added gem. Multiple groups should be separated by commas.

* `--source=SOURCE`, `-s=SOURCE`:
  Specify the source for the added gem.

* `--require=REQUIRE`, `-r=REQUIRE`:
  Adds require path to gem. Provide false, or a path as a string.

* `--path=PATH`:
  Specify the file system path for the added gem.

* `--git=GIT`:
  Specify the git source for the added gem.

* `--github=GITHUB`:
  Specify the github source for the added gem.

* `--branch=BRANCH`:
  Specify the git branch for the added gem.

* `--ref=REF`:
  Specify the git ref for the added gem.

* `--glob=GLOB`:
  Specify the location of a dependency's .gemspec, expanded within Ruby (single quotes recommended).

* `--quiet`:
  Do not print progress information to the standard output.

* `--skip-install`:
  Adds the gem to the Gemfile but does not install it.

* `--optimistic`:
  Adds optimistic declaration of version.

* `--strict`:
  Adds strict declaration of version.

## EXAMPLES

1. You can add the `rails` gem to the Gemfile without any version restriction.
   The source of the gem will be the global source.

   `bundle add rails`

2. You can add the `rails` gem with version greater than 1.1 (not including 1.1) and less than 3.0.

   `bundle add rails --version "> 1.1, < 3.0"`

3. You can use the `https://gems.example.com` custom source and assign the gem
   to a group.

   `bundle add rails --version "~> 5.0.0" --source "https://gems.example.com" --group "development"`

4. The following adds the `gem` entry to the Gemfile without installing the
   gem. You can install gems later via `bundle install`.

   `bundle add rails --skip-install`

5. You can assign the gem to more than one group.

   `bundle add rails --group "development, test"`

## SEE ALSO

[Gemfile(5)](https://bundler.io/man/gemfile.5.html),
[bundle-remove(1)](bundle-remove.1.html)
PK*J[�K�VVBshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-inject.1.ronnnu�[���bundle-inject(1) -- Add named gem(s) with version requirements to Gemfile
=========================================================================

## SYNOPSIS

`bundle inject` [GEM] [VERSION] [--source=SOURCE] [--group=GROUP]

## DESCRIPTION

Adds the named gem(s) with their version requirements to the resolved
[`Gemfile(5)`][Gemfile(5)].

This command will add the gem to both your [`Gemfile(5)`][Gemfile(5)] and Gemfile.lock if it
isn't listed yet.

Example:

    bundle install
    bundle inject 'rack' '> 0'

This will inject the 'rack' gem with a version greater than 0 in your
[`Gemfile(5)`][Gemfile(5)] and Gemfile.lock.

The `bundle inject` command was deprecated in Bundler 2.1 and will be removed in Bundler 3.0.

## OPTIONS

* `--source=SOURCE`:
  Install gem from the given source.

* `--group=GROUP`:
  Install gem into a bundler group.
PK*J[����@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-exec.1.ronnnu�[���bundle-exec(1) -- Execute a command in the context of the bundle
================================================================

## SYNOPSIS

`bundle exec` [--keep-file-descriptors] [--gemfile=GEMFILE] <command>

## DESCRIPTION

This command executes the command, making all gems specified in the
[`Gemfile(5)`][Gemfile(5)] available to `require` in Ruby programs.

Essentially, if you would normally have run something like
`rspec spec/my_spec.rb`, and you want to use the gems specified
in the [`Gemfile(5)`][Gemfile(5)] and installed via [bundle install(1)](bundle-install.1.html), you
should run `bundle exec rspec spec/my_spec.rb`.

Note that `bundle exec` does not require that an executable is
available on your shell's `$PATH`.

## OPTIONS

* `--keep-file-descriptors`:
  Passes all file descriptors to the new processes. Default is true from
  bundler version 2.2.26. Setting it to false is now deprecated.

* `--gemfile=GEMFILE`:
  Use the specified gemfile instead of [`Gemfile(5)`][Gemfile(5)].

## BUNDLE INSTALL --BINSTUBS

If you use the `--binstubs` flag in [bundle install(1)](bundle-install.1.html), Bundler will
automatically create a directory (which defaults to `app_root/bin`)
containing all of the executables available from gems in the bundle.

After using `--binstubs`, `bin/rspec spec/my_spec.rb` is identical
to `bundle exec rspec spec/my_spec.rb`.

## ENVIRONMENT MODIFICATIONS

`bundle exec` makes a number of changes to the shell environment,
then executes the command you specify in full.

* make sure that it's still possible to shell out to `bundle`
  from inside a command invoked by `bundle exec` (using
  `$BUNDLE_BIN_PATH`)
* put the directory containing executables (like `rails`, `rspec`,
  `rackup`) for your bundle on `$PATH`
* make sure that if bundler is invoked in the subshell, it uses
  the same `Gemfile` (by setting `BUNDLE_GEMFILE`)
* add `-rbundler/setup` to `$RUBYOPT`, which makes sure that
  Ruby programs invoked in the subshell can see the gems in
  the bundle

It also modifies Rubygems:

* disallow loading additional gems not in the bundle
* modify the `gem` method to be a no-op if a gem matching
  the requirements is in the bundle, and to raise a
  `Gem::LoadError` if it's not
* Define `Gem.refresh` to be a no-op, since the source
  index is always frozen when using bundler, and to
  prevent gems from the system leaking into the environment
* Override `Gem.bin_path` to use the gems in the bundle,
  making system executables work
* Add all gems in the bundle into Gem.loaded_specs

Finally, `bundle exec` also implicitly modifies `Gemfile.lock` if the lockfile
and the Gemfile do not match. Bundler needs the Gemfile to determine things
such as a gem's groups, `autorequire`, and platforms, etc., and that
information isn't stored in the lockfile. The Gemfile and lockfile must be
synced in order to `bundle exec` successfully, so `bundle exec`
updates the lockfile beforehand.

### Loading

By default, when attempting to `bundle exec` to a file with a ruby shebang,
Bundler will `Kernel.load` that file instead of using `Kernel.exec`. For the
vast majority of cases, this is a performance improvement. In a rare few cases,
this could cause some subtle side-effects (such as dependence on the exact
contents of `$0` or `__FILE__`) and the optimization can be disabled by enabling
the `disable_exec_load` setting.

### Shelling out

Any Ruby code that opens a subshell (like `system`, backticks, or `%x{}`) will
automatically use the current Bundler environment. If you need to shell out to
a Ruby command that is not part of your current bundle, use the
`with_unbundled_env` method with a block. Any subshells created inside the block
will be given the environment present before Bundler was activated. For
example, Homebrew commands run Ruby, but don't work inside a bundle:

    Bundler.with_unbundled_env do
      `brew install wget`
    end

Using `with_unbundled_env` is also necessary if you are shelling out to a different
bundle. Any Bundler commands run in a subshell will inherit the current
Gemfile, so commands that need to run in the context of a different bundle also
need to use `with_unbundled_env`.

    Bundler.with_unbundled_env do
      Dir.chdir "/other/bundler/project" do
        `bundle exec ./script`
      end
    end

Bundler provides convenience helpers that wrap `system` and `exec`, and they
can be used like this:

    Bundler.unbundled_system('brew install wget')
    Bundler.unbundled_exec('brew install wget')


## RUBYGEMS PLUGINS

At present, the Rubygems plugin system requires all files
named `rubygems_plugin.rb` on the load path of _any_ installed
gem when any Ruby code requires `rubygems.rb`. This includes
executables installed into the system, like `rails`, `rackup`,
and `rspec`.

Since Rubygems plugins can contain arbitrary Ruby code, they
commonly end up activating themselves or their dependencies.

For instance, the `gemcutter 0.5` gem depended on `json_pure`.
If you had that version of gemcutter installed (even if
you _also_ had a newer version without this problem), Rubygems
would activate `gemcutter 0.5` and `json_pure <latest>`.

If your Gemfile(5) also contained `json_pure` (or a gem
with a dependency on `json_pure`), the latest version on
your system might conflict with the version in your
Gemfile(5), or the snapshot version in your `Gemfile.lock`.

If this happens, bundler will say:

    You have already activated json_pure 1.4.6 but your Gemfile
    requires json_pure 1.4.3. Consider using bundle exec.

In this situation, you almost certainly want to remove the
underlying gem with the problematic gem plugin. In general,
the authors of these plugins (in this case, the `gemcutter`
gem) have released newer versions that are more careful in
their plugins.

You can find a list of all the gems containing gem plugins
by running

    ruby -e "puts Gem.find_files('rubygems_plugin.rb')"

At the very least, you should remove all but the newest
version of each gem plugin, and also remove all gem plugins
that you aren't using (`gem uninstall gem_name`).
PK*J[���o��Cshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-version.1.ronnnu�[���bundle-version(1) -- Prints Bundler version information
=======================================================

## SYNOPSIS

`bundle version`

## DESCRIPTION

Prints Bundler version information.

## OPTIONS

No options.

## EXAMPLE

Print the version of Bundler with build date and commit hash of the in the Git source.

    bundle version

shows `Bundler version 2.3.21 (2022-08-24 commit d54be5fdd8)` for example.

cf. `bundle --version` shows `Bundler version 2.3.21`.
PK*J[!��;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-open.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-OPEN" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
.SH "SYNOPSIS"
\fBbundle open\fR [GEM] [\-\-path=PATH]
.SH "DESCRIPTION"
Opens the source directory of the provided GEM in your editor\.
.P
For this to work the \fBEDITOR\fR or \fBBUNDLER_EDITOR\fR environment variable has to be set\.
.P
Example:
.IP "" 4
.nf
bundle open 'rack'
.fi
.IP "" 0
.P
Will open the source directory for the 'rack' gem in your bundle\.
.IP "" 4
.nf
bundle open 'rack' \-\-path 'README\.md'
.fi
.IP "" 0
.P
Will open the README\.md file of the 'rack' gem source in your bundle\.
.SH "OPTIONS"
.TP
\fB\-\-path[=PATH]\fR
Specify GEM source relative path to open\.

PK*J[�<share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-issue.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-ISSUE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-issue\fR \- Get help reporting Bundler issues
.SH "SYNOPSIS"
\fBbundle issue\fR
.SH "DESCRIPTION"
Provides guidance on reporting Bundler issues and outputs detailed system information that should be included when filing a bug report\. This command:
.IP "1." 4
Displays links to troubleshooting resources
.IP "2." 4
Shows instructions for reporting issues
.IP "3." 4
Outputs comprehensive environment information needed for debugging
.IP "" 0
.P
The command helps ensure that bug reports include all necessary system details for effective troubleshooting\.
.SH "OUTPUT"
The command outputs several sections:
.IP "\(bu" 4
Troubleshooting links and resources
.IP "\(bu" 4
Link to the GitHub issue template
.IP "\(bu" 4
Environment information including: Bundler version and platforms, Ruby version and configuration, RubyGems version and paths, Development tool versions (Git, RVM, rbenv, chruby)
.IP "\(bu" 4
Bundler build metadata
.IP "\(bu" 4
Current Bundler settings
.IP "\(bu" 4
Bundle Doctor output
.IP "" 0
.SH "EXAMPLES"
Get issue reporting information:
.IP "" 4
.nf
$ bundle issue
.fi
.IP "" 0
.SH "SEE ALSO"
.IP "\(bu" 4
bundle\-doctor(1)
.IP "" 0

PK*J[l��
��Dshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-pristine.1.ronnnu�[���bundle-pristine(1) -- Restores installed gems to their pristine condition
=========================================================================

## SYNOPSIS

`bundle pristine`

## DESCRIPTION

`pristine` restores the installed gems in the bundle to their pristine condition
using the local gem cache from RubyGems. For git gems, a forced checkout will be performed.

For further explanation, `bundle pristine` ignores unpacked files on disk. In other
words, this command utilizes the local `.gem` cache or the gem's git repository
as if one were installing from scratch.

Note: the Bundler gem cannot be restored to its original state with `pristine`.
One also cannot use `bundle pristine` on gems with a 'path' option in the Gemfile,
because bundler has no original copy it can restore from.

When is it practical to use `bundle pristine`?

It comes in handy when a developer is debugging a gem. `bundle pristine` is a
great way to get rid of experimental changes to a gem that one may not want.

Why use `bundle pristine` over `gem pristine --all`?

Both commands are very similar.
For context: `bundle pristine`, without arguments, cleans all gems from the lockfile.
Meanwhile, `gem pristine --all` cleans all installed gems for that Ruby version.

If a developer forgets which gems in their project they might
have been debugging, the Rubygems `gem pristine [GEMNAME]` command may be inconvenient.
One can avoid waiting for `gem pristine --all`, and instead run `bundle pristine`.
PK*J[Cbܹ

Dshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-outdated.1.ronnnu�[���bundle-outdated(1) -- List installed gems with newer versions available
=======================================================================

## SYNOPSIS

`bundle outdated` [GEM] [--local]
                        [--pre]
                        [--source]
                        [--filter-strict | --strict]
                        [--update-strict]
                        [--parseable | --porcelain]
                        [--group=GROUP]
                        [--groups]
                        [--patch|--minor|--major]
                        [--filter-major]
                        [--filter-minor]
                        [--filter-patch]
                        [--only-explicit]

## DESCRIPTION

Outdated lists the names and versions of gems that have a newer version available
in the given source. Calling outdated with [GEM [GEM]] will only check for newer
versions of the given gems. Prerelease gems are ignored by default. If your gems
are up to date, Bundler will exit with a status of 0. Otherwise, it will exit 1.

## OPTIONS

* `--local`:
  Do not attempt to fetch gems remotely and use the gem cache instead.

* `--pre`:
  Check for newer pre-release gems.

* `--source=<list>`:
  Check against a specific source.

* `--filter-strict`, `--strict`:
  Only list newer versions allowed by your Gemfile requirements, also respecting conservative update flags (--patch, --minor, --major).

* `--update-strict`:
  Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major.

* `--parseable`, `--porcelain`:
   Use minimal formatting for more parseable output.

* `--group=GROUP`:
  List gems from a specific group.

* `--groups`:
  List gems organized by groups.

* `--minor`:
  Prefer updating only to next minor version.

* `--major`:
  Prefer updating to next major version (default).

* `--patch`:
  Prefer updating only to next patch version.

* `--filter-major`:
  Only list major newer versions.

* `--filter-minor`:
  Only list minor newer versions.

* `--filter-patch`:
  Only list patch newer versions.

* `--only-explicit`:
  Only list gems specified in your Gemfile, not their dependencies.

## PATCH LEVEL OPTIONS

See [bundle update(1)](bundle-update.1.html) for details.

## FILTERING OUTPUT

The 3 filtering options do not affect the resolution of versions, merely what versions are shown
in the output.

If the regular output shows the following:

    * Gem       Current  Latest  Requested  Groups
    * faker     1.6.5    1.6.6   ~> 1.4     development, test
    * hashie    1.2.0    3.4.6   = 1.2.0    default
    * headless  2.2.3    2.3.1   = 2.2.3    test

`--filter-major` would only show:

    * Gem       Current  Latest  Requested  Groups
    * hashie    1.2.0    3.4.6   = 1.2.0    default

`--filter-minor` would only show:

    * Gem       Current  Latest  Requested  Groups
    * headless  2.2.3    2.3.1   = 2.2.3    test

`--filter-patch` would only show:

    * Gem       Current  Latest  Requested  Groups
    * faker     1.6.5    1.6.6   ~> 1.4     development, test

Filter options can be combined. `--filter-minor` and `--filter-patch` would show:

    * Gem       Current  Latest  Requested  Groups
    * faker     1.6.5    1.6.6   ~> 1.4     development, test

Combining all three `filter` options would be the same result as providing none of them.
PK*J[�G-���@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-list.1.ronnnu�[���bundle-list(1) -- List all the gems in the bundle
=================================================

## SYNOPSIS

`bundle list` [--name-only] [--paths] [--without-group=GROUP[ GROUP...]] [--only-group=GROUP[ GROUP...]]

## DESCRIPTION

Prints a list of all the gems in the bundle including their version.

Example:

bundle list --name-only

bundle list --paths

bundle list --without-group test

bundle list --only-group dev

bundle list --only-group dev test --paths

## OPTIONS

* `--name-only`:
  Print only the name of each gem.

* `--paths`:
  Print the path to each gem in the bundle.

* `--without-group=<list>`:
  A space-separated list of groups of gems to skip during printing.

* `--only-group=<list>`:
  A space-separated list of groups of gems to print.
PK*J[w���;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-show.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-SHOW" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
.SH "SYNOPSIS"
\fBbundle show\fR [GEM] [\-\-paths] [\-\-outdated]
.SH "DESCRIPTION"
Without the [GEM] option, \fBshow\fR will print a list of the names and versions of all gems that are required by your [\fBGemfile(5)\fR][Gemfile(5)], sorted by name\.
.P
Calling show with [GEM] will list the exact location of that gem on your machine\.
.SH "OPTIONS"
.TP
\fB\-\-paths\fR
List the paths of all gems that are required by your [\fBGemfile(5)\fR][Gemfile(5)], sorted by gem name\.
.TP
\fB\-\-outdated\fR
Show verbose output including whether gems are outdated\.

PK*J[�ǘD��>share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-console.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CONSOLE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-console\fR \- Open an IRB session with the bundle pre\-loaded
.SH "SYNOPSIS"
\fBbundle console\fR [GROUP]
.SH "DESCRIPTION"
Starts an interactive Ruby console session in the context of the current bundle\.
.P
If no \fBGROUP\fR is specified, all gems in the \fBdefault\fR group in the Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR are preliminarily loaded\.
.P
If \fBGROUP\fR is specified, all gems in the given group in the Gemfile in addition to the gems in \fBdefault\fR group are loaded\. Even if the given group does not exist in the Gemfile, IRB console starts without any warning or error\.
.P
The environment variable \fBBUNDLE_CONSOLE\fR or \fBbundle config set console\fR can be used to change the shell from the following:
.IP "\(bu" 4
\fBirb\fR (default)
.IP "\(bu" 4
\fBpry\fR (https://github\.com/pry/pry)
.IP "\(bu" 4
\fBripl\fR (https://github\.com/cldwalker/ripl)
.IP "" 0
.P
\fBbundle console\fR uses irb by default\. An alternative Pry or Ripl can be used with \fBbundle console\fR by adjusting the \fBconsole\fR Bundler setting\. Also make sure that \fBpry\fR or \fBripl\fR is in your Gemfile\.
.SH "EXAMPLE"
.nf
$ bundle config set console pry
$ bundle console
Resolving dependencies\|\.\|\.\|\.
[1] pry(main)>
.fi
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR
PK*J[?����:share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-gem.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-GEM" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
.SH "SYNOPSIS"
\fBbundle gem\fR \fIGEM_NAME\fR \fIOPTIONS\fR
.SH "DESCRIPTION"
Generates a directory named \fBGEM_NAME\fR with a \fBRakefile\fR, \fBGEM_NAME\.gemspec\fR, and other supporting files and directories that can be used to develop a rubygem with that name\.
.P
Run \fBrake \-T\fR in the resulting project for a list of Rake tasks that can be used to test and publish the gem to rubygems\.org\.
.P
The generated project skeleton can be customized with OPTIONS, as explained below\. Note that these options can also be specified via Bundler's global configuration file using the following names:
.IP "\(bu" 4
\fBgem\.coc\fR
.IP "\(bu" 4
\fBgem\.mit\fR
.IP "\(bu" 4
\fBgem\.test\fR
.IP "" 0
.SH "OPTIONS"
.IP "\(bu" 4
\fB\-\-exe\fR, \fB\-\-bin\fR, \fB\-b\fR: Specify that Bundler should create a binary executable (as \fBexe/GEM_NAME\fR) in the generated rubygem project\. This binary will also be added to the \fBGEM_NAME\.gemspec\fR manifest\. This behavior is disabled by default\.
.IP "\(bu" 4
\fB\-\-no\-exe\fR: Do not create a binary (overrides \fB\-\-exe\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-coc\fR: Add a \fBCODE_OF_CONDUCT\.md\fR file to the root of the generated project\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-coc\fR: Do not create a \fBCODE_OF_CONDUCT\.md\fR (overrides \fB\-\-coc\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-changelog\fR Add a \fBCHANGELOG\.md\fR file to the root of the generated project\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-changelog\fR: Do not create a \fBCHANGELOG\.md\fR (overrides \fB\-\-changelog\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-ext=c\fR, \fB\-\-ext=rust\fR: Add boilerplate for C or Rust (currently magnus \fIhttps://docs\.rs/magnus\fR based) extension code to the generated project\. This behavior is disabled by default\.
.IP "\(bu" 4
\fB\-\-no\-ext\fR: Do not add extension code (overrides \fB\-\-ext\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-git\fR: Initialize a git repo inside your library\.
.IP "\(bu" 4
\fB\-\-github\-username=GITHUB_USERNAME\fR: Fill in GitHub username on README so that you don't have to do it manually\. Set a default with \fBbundle config set \-\-global gem\.github_username <your_username>\fR\.
.IP "\(bu" 4
\fB\-\-mit\fR: Add an MIT license to a \fBLICENSE\.txt\fR file in the root of the generated project\. Your name from the global git config is used for the copyright statement\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-mit\fR: Do not create a \fBLICENSE\.txt\fR (overrides \fB\-\-mit\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-t\fR, \fB\-\-test=minitest\fR, \fB\-\-test=rspec\fR, \fB\-\-test=test\-unit\fR: Specify the test framework that Bundler should use when generating the project\. Acceptable values are \fBminitest\fR, \fBrspec\fR and \fBtest\-unit\fR\. The \fBGEM_NAME\.gemspec\fR will be configured and a skeleton test/spec directory will be created based on this option\. Given no option is specified:
.IP
When Bundler is configured to generate tests, this defaults to Bundler's global config setting \fBgem\.test\fR\.
.IP
When Bundler is configured to not generate tests, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-test\fR: Do not use a test framework (overrides \fB\-\-test\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-changelog\fR: Generate changelog file\. Set a default with \fBbundle config set \-\-global gem\.changelog true\fR\.
.IP "\(bu" 4
\fB\-\-ci\fR, \fB\-\-ci=circle\fR, \fB\-\-ci=github\fR, \fB\-\-ci=gitlab\fR: Specify the continuous integration service that Bundler should use when generating the project\. Acceptable values are \fBgithub\fR, \fBgitlab\fR and \fBcircle\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
.IP
When Bundler is configured to generate CI files, this defaults to Bundler's global config setting \fBgem\.ci\fR\.
.IP
When Bundler is configured to not generate CI files, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-ci\fR: Do not use a continuous integration service (overrides \fB\-\-ci\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-linter\fR, \fB\-\-linter=rubocop\fR, \fB\-\-linter=standard\fR: Specify the linter and code formatter that Bundler should add to the project's development dependencies\. Acceptable values are \fBrubocop\fR and \fBstandard\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
.IP
When Bundler is configured to add a linter, this defaults to Bundler's global config setting \fBgem\.linter\fR\.
.IP
When Bundler is configured not to add a linter, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler's global config for future \fBbundle gem\fR use\.
.IP "\(bu" 4
\fB\-\-no\-linter\fR: Do not add a linter (overrides \fB\-\-linter\fR specified in the global config)\.
.IP "\(bu" 4
\fB\-\-rubocop\fR: Add rubocop to the generated Rakefile and gemspec\. Set a default with \fBbundle config set \-\-global gem\.rubocop true\fR\.
.IP "\(bu" 4
\fB\-\-edit=EDIT\fR, \fB\-e=EDIT\fR: Open the resulting GEM_NAME\.gemspec in EDIT, or the default editor if not specified\. The default is \fB$BUNDLER_EDITOR\fR, \fB$VISUAL\fR, or \fB$EDITOR\fR\.
.IP "" 0
.SH "SEE ALSO"
.IP "\(bu" 4
bundle config(1) \fIbundle\-config\.1\.html\fR
.IP "" 0

PK*J[v�I��6share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\fR \- Ruby Dependency Management
.SH "SYNOPSIS"
\fBbundle\fR COMMAND [\-\-no\-color] [\-\-verbose] [ARGS]
.SH "DESCRIPTION"
Bundler manages an \fBapplication's dependencies\fR through its entire life across many machines systematically and repeatably\.
.P
See the bundler website \fIhttps://bundler\.io\fR for information on getting started, and Gemfile(5) for more information on the \fBGemfile\fR format\.
.SH "OPTIONS"
.TP
\fB\-\-no\-color\fR
Print all output without color
.TP
\fB\-\-retry\fR, \fB\-r\fR
Specify the number of times you wish to attempt network commands
.TP
\fB\-\-verbose\fR, \fB\-V\fR
Print out additional logging information
.SH "BUNDLE COMMANDS"
We divide \fBbundle\fR subcommands into primary commands and utilities:
.SH "PRIMARY COMMANDS"
.TP
\fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR
Install the gems specified by the \fBGemfile\fR or \fBGemfile\.lock\fR
.TP
\fBbundle update(1)\fR \fIbundle\-update\.1\.html\fR
Update dependencies to their latest versions
.TP
\fBbundle cache(1)\fR \fIbundle\-cache\.1\.html\fR
Package the \.gem files required by your application into the \fBvendor/cache\fR directory (aliases: \fBbundle package\fR, \fBbundle pack\fR)
.TP
\fBbundle exec(1)\fR \fIbundle\-exec\.1\.html\fR
Execute a script in the current bundle
.TP
\fBbundle config(1)\fR \fIbundle\-config\.1\.html\fR
Specify and read configuration options for Bundler
.TP
\fBbundle help(1)\fR \fIbundle\-help\.1\.html\fR
Display detailed help for each subcommand
.SH "UTILITIES"
.TP
\fBbundle add(1)\fR \fIbundle\-add\.1\.html\fR
Add the named gem to the Gemfile and run \fBbundle install\fR
.TP
\fBbundle binstubs(1)\fR \fIbundle\-binstubs\.1\.html\fR
Generate binstubs for executables in a gem
.TP
\fBbundle check(1)\fR \fIbundle\-check\.1\.html\fR
Determine whether the requirements for your application are installed and available to Bundler
.TP
\fBbundle show(1)\fR \fIbundle\-show\.1\.html\fR
Show the source location of a particular gem in the bundle
.TP
\fBbundle outdated(1)\fR \fIbundle\-outdated\.1\.html\fR
Show all of the outdated gems in the current bundle
.TP
\fBbundle console(1)\fR (deprecated)
Start an IRB session in the current bundle
.TP
\fBbundle open(1)\fR \fIbundle\-open\.1\.html\fR
Open an installed gem in the editor
.TP
\fBbundle lock(1)\fR \fIbundle\-lock\.1\.html\fR
Generate a lockfile for your dependencies
.TP
\fBbundle viz(1)\fR \fIbundle\-viz\.1\.html\fR (deprecated)
Generate a visual representation of your dependencies
.TP
\fBbundle init(1)\fR \fIbundle\-init\.1\.html\fR
Generate a simple \fBGemfile\fR, placed in the current directory
.TP
\fBbundle gem(1)\fR \fIbundle\-gem\.1\.html\fR
Create a simple gem, suitable for development with Bundler
.TP
\fBbundle platform(1)\fR \fIbundle\-platform\.1\.html\fR
Display platform compatibility information
.TP
\fBbundle clean(1)\fR \fIbundle\-clean\.1\.html\fR
Clean up unused gems in your Bundler directory
.TP
\fBbundle doctor(1)\fR \fIbundle\-doctor\.1\.html\fR
Display warnings about common problems
.TP
\fBbundle remove(1)\fR \fIbundle\-remove\.1\.html\fR
Removes gems from the Gemfile
.TP
\fBbundle plugin(1)\fR \fIbundle\-plugin\.1\.html\fR
Manage Bundler plugins
.TP
\fBbundle version(1)\fR \fIbundle\-version\.1\.html\fR
Prints Bundler version information
.SH "PLUGINS"
When running a command that isn't listed in PRIMARY COMMANDS or UTILITIES, Bundler will try to find an executable on your path named \fBbundler\-<command>\fR and execute it, passing down any extra arguments to it\.
.SH "OBSOLETE"
These commands are obsolete and should no longer be used:
.IP "\(bu" 4
\fBbundle inject(1)\fR
.IP "" 0

PK*J[<�N77?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-licenses.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-LICENSES" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-licenses\fR \- Print the license of all gems in the bundle
.SH "SYNOPSIS"
\fBbundle licenses\fR
.SH "DESCRIPTION"
Prints the license of all gems in the bundle\.
PK*J[1�<o��?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-gem.1.ronnnu�[���bundle-gem(1) -- Generate a project skeleton for creating a rubygem
===================================================================

## SYNOPSIS

`bundle gem` <GEM_NAME> [OPTIONS]

## DESCRIPTION

Generates a directory named `GEM_NAME` with a `Rakefile`, `GEM_NAME.gemspec`,
and other supporting files and directories that can be used to develop a
rubygem with that name.

Run `rake -T` in the resulting project for a list of Rake tasks that can be used
to test and publish the gem to rubygems.org.

The generated project skeleton can be customized with OPTIONS, as explained
below. Note that these options can also be specified via Bundler's global
configuration file using the following names:

* `gem.coc`
* `gem.mit`
* `gem.test`

## OPTIONS

* `--exe`, `--bin`, `-b`:
  Specify that Bundler should create a binary executable (as `exe/GEM_NAME`)
  in the generated rubygem project. This binary will also be added to the
  `GEM_NAME.gemspec` manifest. This behavior is disabled by default.

* `--no-exe`:
  Do not create a binary (overrides `--exe` specified in the global config).

* `--coc`:
  Add a `CODE_OF_CONDUCT.md` file to the root of the generated project. If
  this option is unspecified, an interactive prompt will be displayed and the
  answer will be saved in Bundler's global config for future `bundle gem` use.

* `--no-coc`:
  Do not create a `CODE_OF_CONDUCT.md` (overrides `--coc` specified in the
  global config).

* `--changelog`
  Add a `CHANGELOG.md` file to the root of the generated project. If
  this option is unspecified, an interactive prompt will be displayed and the
  answer will be saved in Bundler's global config for future `bundle gem` use.

* `--no-changelog`:
  Do not create a `CHANGELOG.md` (overrides `--changelog` specified in the
  global config).

* `--ext=c`, `--ext=rust`:
  Add boilerplate for C or Rust (currently [magnus](https://docs.rs/magnus) based) extension code to the generated project. This behavior
  is disabled by default.

* `--no-ext`:
  Do not add extension code (overrides `--ext` specified in the global
  config).

* `--git`:
  Initialize a git repo inside your library.

* `--github-username=GITHUB_USERNAME`:
  Fill in GitHub username on README so that you don't have to do it manually. Set a default with `bundle config set --global gem.github_username <your_username>`.

* `--mit`:
  Add an MIT license to a `LICENSE.txt` file in the root of the generated
  project. Your name from the global git config is used for the copyright
  statement. If this option is unspecified, an interactive prompt will be
  displayed and the answer will be saved in Bundler's global config for future
  `bundle gem` use.

* `--no-mit`:
  Do not create a `LICENSE.txt` (overrides `--mit` specified in the global
  config).

* `-t`, `--test=minitest`, `--test=rspec`, `--test=test-unit`:
  Specify the test framework that Bundler should use when generating the
  project. Acceptable values are `minitest`, `rspec` and `test-unit`. The
  `GEM_NAME.gemspec` will be configured and a skeleton test/spec directory will
  be created based on this option. Given no option is specified:

  When Bundler is configured to generate tests, this defaults to Bundler's
  global config setting `gem.test`.

  When Bundler is configured to not generate tests, an interactive prompt will
  be displayed and the answer will be used for the current rubygem project.

  When Bundler is unconfigured, an interactive prompt will be displayed and
  the answer will be saved in Bundler's global config for future `bundle gem`
  use.

* `--no-test`:
  Do not use a test framework (overrides `--test` specified in the global
  config).

* `--changelog`:
  Generate changelog file. Set a default with `bundle config set --global gem.changelog true`.

* `--ci`, `--ci=circle`, `--ci=github`, `--ci=gitlab`:
  Specify the continuous integration service that Bundler should use when
  generating the project. Acceptable values are `github`, `gitlab`
  and `circle`. A configuration file will be generated in the project directory.
  Given no option is specified:

  When Bundler is configured to generate CI files, this defaults to Bundler's
  global config setting `gem.ci`.

  When Bundler is configured to not generate CI files, an interactive prompt
  will be displayed and the answer will be used for the current rubygem project.

  When Bundler is unconfigured, an interactive prompt will be displayed and
  the answer will be saved in Bundler's global config for future `bundle gem`
  use.

* `--no-ci`:
  Do not use a continuous integration service (overrides `--ci` specified in
  the global config).

* `--linter`, `--linter=rubocop`, `--linter=standard`:
  Specify the linter and code formatter that Bundler should add to the
  project's development dependencies. Acceptable values are `rubocop` and
  `standard`. A configuration file will be generated in the project directory.
  Given no option is specified:

  When Bundler is configured to add a linter, this defaults to Bundler's
  global config setting `gem.linter`.

  When Bundler is configured not to add a linter, an interactive prompt
  will be displayed and the answer will be used for the current rubygem project.

  When Bundler is unconfigured, an interactive prompt will be displayed and
  the answer will be saved in Bundler's global config for future `bundle gem`
  use.

* `--no-linter`:
  Do not add a linter (overrides `--linter` specified in the global config).

* `--rubocop`:
  Add rubocop to the generated Rakefile and gemspec. Set a default with `bundle config set --global gem.rubocop true`.

* `--edit=EDIT`, `-e=EDIT`:
  Open the resulting GEM_NAME.gemspec in EDIT, or the default editor if not
  specified. The default is `$BUNDLER_EDITOR`, `$VISUAL`, or `$EDITOR`.

## SEE ALSO

* [bundle config(1)](bundle-config.1.html)
PK*J[g�C��Bshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-plugin.1.ronnnu�[���bundle-plugin(1) -- Manage Bundler plugins
==========================================

## SYNOPSIS

`bundle plugin` install PLUGINS [--source=<SOURCE>] [--version=<version>]
                              [--git=<git-url>] [--branch=<branch>|--ref=<rev>]
                              [--path=<path>]<br>
`bundle plugin` uninstall PLUGINS<br>
`bundle plugin` list<br>
`bundle plugin` help [COMMAND]

## DESCRIPTION

You can install, uninstall, and list plugin(s) with this command to extend functionalities of Bundler.

## SUB-COMMANDS

### install

Install the given plugin(s).

* `bundle plugin install bundler-graph`:
  Install bundler-graph gem from globally configured sources (defaults to RubyGems.org). The global source, specified in source in Gemfile is ignored.

* `bundle plugin install bundler-graph --source https://example.com`:
  Install bundler-graph gem from example.com. The global source, specified in source in Gemfile is not considered.

* `bundle plugin install bundler-graph --version 0.2.1`:
  You can specify the version of the gem via `--version`.

* `bundle plugin install bundler-graph --git https://github.com/rubygems/bundler-graph`:
  Install bundler-graph gem from Git repository. You can use standard Git URLs like:

  `ssh://[user@]host.xz[:port]/path/to/repo.git`<br>
  `http[s]://host.xz[:port]/path/to/repo.git`<br>
  `/path/to/repo`<br>
  `file:///path/to/repo`

  When you specify `--git`, you can use `--branch` or `--ref` to specify any branch, tag, or commit hash (revision) to use.

* `bundle plugin install bundler-graph --path ../bundler-graph`:
  Install bundler-graph gem from a local path.

### uninstall

Uninstall the plugin(s) specified in PLUGINS.

### list

List the installed plugins and available commands.

No options.

### help

Describe subcommands or one specific subcommand.

No options.

## SEE ALSO

* [How to write a Bundler plugin](https://bundler.io/guides/bundler_plugins.html)
PK*J[��YD��Bshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-remove.1.ronnnu�[���bundle-remove(1) -- Removes gems from the Gemfile
=================================================

## SYNOPSIS

`bundle remove [GEM [GEM ...]] [--install]`

## DESCRIPTION

Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid. If a gem cannot be removed, a warning is printed. If a gem is already absent from the Gemfile, and error is raised.

## OPTIONS

* `--install`:
  Runs `bundle install` after the given gems have been removed from the Gemfile, which ensures that both the lockfile and the installed gems on disk are also updated to remove the given gem(s).

Example:

bundle remove rails

bundle remove rails rack

bundle remove rails rack --install
PK*J[#��/��?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-platform.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-PLATFORM" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-platform\fR \- Displays platform compatibility information
.SH "SYNOPSIS"
\fBbundle platform\fR [\-\-ruby]
.SH "DESCRIPTION"
\fBplatform\fR displays information from your Gemfile, Gemfile\.lock, and Ruby VM about your platform\.
.P
For instance, using this Gemfile(5):
.IP "" 4
.nf
source "https://rubygems\.org"

ruby "3\.1\.2"

gem "rack"
.fi
.IP "" 0
.P
If you run \fBbundle platform\fR on Ruby 3\.1\.2, it displays the following output:
.IP "" 4
.nf
Your platform is: x86_64\-linux

Your app has gems that work on these platforms:
* arm64\-darwin\-21
* ruby
* x64\-mingw\-ucrt
* x86_64\-linux

Your Gemfile specifies a Ruby version requirement:
* ruby 3\.1\.2

Your current platform satisfies the Ruby version requirement\.
.fi
.IP "" 0
.P
\fBplatform\fR lists all the platforms in your \fBGemfile\.lock\fR as well as the \fBruby\fR directive if applicable from your Gemfile(5)\. It also lets you know if the \fBruby\fR directive requirement has been met\. If \fBruby\fR directive doesn't match the running Ruby VM, it tells you what part does not\.
.SH "OPTIONS"
.TP
\fB\-\-ruby\fR
It will display the ruby directive information, so you don't have to parse it from the Gemfile(5)\.
.SH "SEE ALSO"
.IP "\(bu" 4
bundle\-lock(1) \fIbundle\-lock\.1\.html\fR
.IP "" 0

PK*J[nu#ZDD=share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-remove.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-REMOVE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-remove\fR \- Removes gems from the Gemfile
.SH "SYNOPSIS"
\fBbundle remove [GEM [GEM \|\.\|\.\|\.]] [\-\-install]\fR
.SH "DESCRIPTION"
Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid\. If a gem cannot be removed, a warning is printed\. If a gem is already absent from the Gemfile, and error is raised\.
.SH "OPTIONS"
.TP
\fB\-\-install\fR
Runs \fBbundle install\fR after the given gems have been removed from the Gemfile, which ensures that both the lockfile and the installed gems on disk are also updated to remove the given gem(s)\.
.P
Example:
.P
bundle remove rails
.P
bundle remove rails rack
.P
bundle remove rails rack \-\-install
PK*J[����@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-open.1.ronnnu�[���bundle-open(1) -- Opens the source directory for a gem in your bundle
=====================================================================

## SYNOPSIS

`bundle open` [GEM] [--path=PATH]

## DESCRIPTION

Opens the source directory of the provided GEM in your editor.

For this to work the `EDITOR` or `BUNDLER_EDITOR` environment variable has to
be set.

Example:

    bundle open 'rack'

Will open the source directory for the 'rack' gem in your bundle.

    bundle open 'rack' --path 'README.md'

Will open the README.md file of the 'rack' gem source in your bundle.

## OPTIONS

* `--path[=PATH]`:
  Specify GEM source relative path to open.
PK*J[�����=share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-inject.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INJECT" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
.SH "SYNOPSIS"
\fBbundle inject\fR [GEM] [VERSION] [\-\-source=SOURCE] [\-\-group=GROUP]
.SH "DESCRIPTION"
Adds the named gem(s) with their version requirements to the resolved [\fBGemfile(5)\fR][Gemfile(5)]\.
.P
This command will add the gem to both your [\fBGemfile(5)\fR][Gemfile(5)] and Gemfile\.lock if it isn't listed yet\.
.P
Example:
.IP "" 4
.nf
bundle install
bundle inject 'rack' '> 0'
.fi
.IP "" 0
.P
This will inject the 'rack' gem with a version greater than 0 in your [\fBGemfile(5)\fR][Gemfile(5)] and Gemfile\.lock\.
.P
The \fBbundle inject\fR command was deprecated in Bundler 2\.1 and will be removed in Bundler 3\.0\.
.SH "OPTIONS"
.TP
\fB\-\-source=SOURCE\fR
Install gem from the given source\.
.TP
\fB\-\-group=GROUP\fR
Install gem into a bundler group\.

PK*J[������Dshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-licenses.1.ronnnu�[���bundle-licenses(1) -- Print the license of all gems in the bundle
=================================================================

## SYNOPSIS

`bundle licenses`

## DESCRIPTION

Prints the license of all gems in the bundle.
PK*J[�=H��?�?Cshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-install.1.ronnnu�[���bundle-install(1) -- Install the dependencies specified in your Gemfile
=======================================================================

## SYNOPSIS

`bundle install` [--binstubs[=DIRECTORY]]
                 [--clean]
                 [--deployment]
                 [--frozen]
                 [--full-index]
                 [--gemfile=GEMFILE]
                 [--jobs=NUMBER]
                 [--local]
                 [--no-cache]
                 [--no-prune]
                 [--path PATH]
                 [--prefer-local]
                 [--quiet]
                 [--redownload]
                 [--retry=NUMBER]
                 [--shebang=SHEBANG]
                 [--standalone[=GROUP[ GROUP...]]]
                 [--system]
                 [--trust-policy=TRUST-POLICY]
                 [--target-rbconfig=TARGET-RBCONFIG]
                 [--with=GROUP[ GROUP...]]
                 [--without=GROUP[ GROUP...]]

## DESCRIPTION

Install the gems specified in your Gemfile(5). If this is the first
time you run bundle install (and a `Gemfile.lock` does not exist),
Bundler will fetch all remote sources, resolve dependencies and
install all needed gems.

If a `Gemfile.lock` does exist, and you have not updated your Gemfile(5),
Bundler will fetch all remote sources, but use the dependencies
specified in the `Gemfile.lock` instead of resolving dependencies.

If a `Gemfile.lock` does exist, and you have updated your Gemfile(5),
Bundler will use the dependencies in the `Gemfile.lock` for all gems
that you did not update, but will re-resolve the dependencies of
gems that you did update. You can find more information about this
update process below under [CONSERVATIVE UPDATING][].

## OPTIONS

The `--clean`, `--deployment`, `--frozen`, `--no-prune`, `--path`, `--shebang`,
`--system`, `--without` and `--with` options are deprecated because they only
make sense if they are applied to every subsequent `bundle install` run
automatically and that requires `bundler` to silently remember them. Since
`bundler` will no longer remember CLI flags in future versions, `bundle config`
(see bundle-config(1)) should be used to apply them permanently.

* `--binstubs[=BINSTUBS]`:
  Binstubs are scripts that wrap around executables. Bundler creates a small Ruby
  file (a binstub) that loads Bundler, runs the command, and puts it in `bin/`.
  This lets you link the binstub inside of an application to the exact gem
  version the application needs.

  Creates a directory (defaults to `~/bin` when the option is used without a
  value, or to the given `<BINSTUBS>` directory otherwise) and places any
  executables from the gem there. These executables run in Bundler's context. If
  used, you might add this directory to your environment's `PATH` variable. For
  instance, if the `rails` gem comes with a `rails` executable, this flag will
  create a `bin/rails` executable that ensures that all referred dependencies
  will be resolved using the bundled gems.

* `--clean`:
  On finishing the installation Bundler is going to remove any gems not present
  in the current Gemfile(5). Don't worry, gems currently in use will not be
  removed.

  This option is deprecated in favor of the `clean` setting.

* `--deployment`:
  In [deployment mode][DEPLOYMENT MODE], Bundler will 'roll-out' the bundle for
  production or CI use. Please check carefully if you want to have this option
  enabled in your development environment.

  This option is deprecated in favor of the `deployment` setting.

* `--redownload`, `--force`:
  Force download every gem, even if the required versions are already available
  locally.

* `--frozen`:
  Do not allow the Gemfile.lock to be updated after this install. Exits
  non-zero if there are going to be changes to the Gemfile.lock.

  This option is deprecated in favor of the `frozen` setting.

* `--full-index`:
  Bundler will not call Rubygems' API endpoint (default) but download and cache
  a (currently big) index file of all gems. Performance can be improved for
  large bundles that seldom change by enabling this option.

* `--gemfile=GEMFILE`:
  The location of the Gemfile(5) which Bundler should use. This defaults
  to a Gemfile(5) in the current working directory. In general, Bundler
  will assume that the location of the Gemfile(5) is also the project's
  root and will try to find `Gemfile.lock` and `vendor/cache` relative
  to this location.

* `--jobs=<number>`, `-j=<number>`:
  The maximum number of parallel download and install jobs. The default is the
  number of available processors.

* `--local`:
  Do not attempt to connect to `rubygems.org`. Instead, Bundler will use the
  gems already present in Rubygems' cache or in `vendor/cache`. Note that if an
  appropriate platform-specific gem exists on `rubygems.org` it will not be
  found.

* `--prefer-local`:
  Force using locally installed gems, or gems already present in Rubygems' cache
  or in `vendor/cache`, when resolving, even if newer versions are available
  remotely. Only attempt to connect to `rubygems.org` for gems that are not
  present locally.

* `--no-cache`:
  Do not update the cache in `vendor/cache` with the newly bundled gems. This
  does not remove any gems in the cache but keeps the newly bundled gems from
  being cached during the install.

* `--no-prune`:
  Don't remove stale gems from the cache when the installation finishes.

  This option is deprecated in favor of the `no_prune` setting.

* `--path=PATH`:
  The location to install the specified gems to. This defaults to Rubygems'
  setting. Bundler shares this location with Rubygems, `gem install ...` will
  have gem installed there, too. Therefore, gems installed without a
  `--path ...` setting will show up by calling `gem list`. Accordingly, gems
  installed to other locations will not get listed.

  This option is deprecated in favor of the `path` setting.

* `--quiet`:
  Do not print progress information to the standard output.

* `--retry=[<number>]`:
  Retry failed network or git requests for <number> times.

* `--shebang=SHEBANG`:
  Uses the specified ruby executable (usually `ruby`) to execute the scripts
  created with `--binstubs`. In addition, if you use `--binstubs` together with
  `--shebang jruby` these executables will be changed to execute `jruby`
  instead.

  This option is deprecated in favor of the `shebang` setting.

* `--standalone[=<list>]`:
  Makes a bundle that can work without depending on Rubygems or Bundler at
  runtime. A space separated list of groups to install can be specified.
  Bundler creates a directory named `bundle` and installs the bundle there. It
  also generates a `bundle/bundler/setup.rb` file to replace Bundler's own setup
  in the manner required. Using this option implicitly sets `path`, which is a
  [remembered option][REMEMBERED OPTIONS].

* `--system`:
  Installs the gems specified in the bundle to the system's Rubygems location.
  This overrides any previous configuration of `--path`.

  This option is deprecated in favor of the `system` setting.

* `--trust-policy=TRUST-POLICY`:
  Apply the Rubygems security policy <policy>, where policy is one of
  `HighSecurity`, `MediumSecurity`, `LowSecurity`, `AlmostNoSecurity`, or
  `NoSecurity`. For more details, please see the Rubygems signing documentation
  linked below in [SEE ALSO][].

* `--target-rbconfig=TARGET-RBCONFIG`:
  Path to rbconfig.rb for the deployment target platform.

* `--with=<list>`:
  A space-separated list of groups referencing gems to install. If an
  optional group is given it is installed. If a group is given that is
  in the remembered list of groups given to --without, it is removed
  from that list.

  This option is deprecated in favor of the `with` setting.

* `--without=<list>`:
  A space-separated list of groups referencing gems to skip during installation.
  If a group is given that is in the remembered list of groups given
  to --with, it is removed from that list.

  This option is deprecated in favor of the `without` setting.

## DEPLOYMENT MODE

Bundler's defaults are optimized for development. To switch to
defaults optimized for deployment and for CI, use the `--deployment`
flag. Do not activate deployment mode on development machines, as it
will cause an error when the Gemfile(5) is modified.

1. A `Gemfile.lock` is required.

   To ensure that the same versions of the gems you developed with
   and tested with are also used in deployments, a `Gemfile.lock`
   is required.

   This is mainly to ensure that you remember to check your
   `Gemfile.lock` into version control.

2. The `Gemfile.lock` must be up to date

   In development, you can modify your Gemfile(5) and re-run
   `bundle install` to [conservatively update][CONSERVATIVE UPDATING]
   your `Gemfile.lock` snapshot.

   In deployment, your `Gemfile.lock` should be up-to-date with
   changes made in your Gemfile(5).

3. Gems are installed to `vendor/bundle` not your default system location

   In development, it's convenient to share the gems used in your
   application with other applications and other scripts that run on
   the system.

   In deployment, isolation is a more important default. In addition,
   the user deploying the application may not have permission to install
   gems to the system, or the web server may not have permission to
   read them.

   As a result, `bundle install --deployment` installs gems to
   the `vendor/bundle` directory in the application. This may be
   overridden using the `--path` option.

## INSTALLING GROUPS

By default, `bundle install` will install all gems in all groups
in your Gemfile(5), except those declared for a different platform.

However, you can explicitly tell Bundler to skip installing
certain groups with the `--without` option. This option takes
a space-separated list of groups.

While the `--without` option will skip _installing_ the gems in the
specified groups, it will still _download_ those gems and use them to
resolve the dependencies of every gem in your Gemfile(5).

This is so that installing a different set of groups on another
 machine (such as a production server) will not change the
gems and versions that you have already developed and tested against.

`Bundler offers a rock-solid guarantee that the third-party
code you are running in development and testing is also the
third-party code you are running in production. You can choose
to exclude some of that code in different environments, but you
will never be caught flat-footed by different versions of
third-party code being used in different environments.`

For a simple illustration, consider the following Gemfile(5):

    source 'https://rubygems.org'

    gem 'sinatra'

    group :production do
      gem 'rack-perftools-profiler'
    end

In this case, `sinatra` depends on any version of Rack (`>= 1.0`), while
`rack-perftools-profiler` depends on 1.x (`~> 1.0`).

When you run `bundle install --without production` in development, we
look at the dependencies of `rack-perftools-profiler` as well. That way,
you do not spend all your time developing against Rack 2.0, using new
APIs unavailable in Rack 1.x, only to have Bundler switch to Rack 1.2
when the `production` group _is_ used.

This should not cause any problems in practice, because we do not
attempt to `install` the gems in the excluded groups, and only evaluate
as part of the dependency resolution process.

This also means that you cannot include different versions of the same
gem in different groups, because doing so would result in different
sets of dependencies used in development and production. Because of
the vagaries of the dependency resolution process, this usually
affects more than the gems you list in your Gemfile(5), and can
(surprisingly) radically change the gems you are using.

## THE GEMFILE.LOCK

When you run `bundle install`, Bundler will persist the full names
and versions of all gems that you used (including dependencies of
the gems specified in the Gemfile(5)) into a file called `Gemfile.lock`.

Bundler uses this file in all subsequent calls to `bundle install`,
which guarantees that you always use the same exact code, even
as your application moves across machines.

Because of the way dependency resolution works, even a
seemingly small change (for instance, an update to a point-release
of a dependency of a gem in your Gemfile(5)) can result in radically
different gems being needed to satisfy all dependencies.

As a result, you `SHOULD` check your `Gemfile.lock` into version
control, in both applications and gems. If you do not, every machine that
checks out your repository (including your production server) will resolve all
dependencies again, which will result in different versions of
third-party code being used if `any` of the gems in the Gemfile(5)
or any of their dependencies have been updated.

When Bundler first shipped, the `Gemfile.lock` was included in the `.gitignore`
file included with generated gems.  Over time, however, it became clear that
this practice forces the pain of broken dependencies onto new contributors,
while leaving existing contributors potentially unaware of the problem. Since
`bundle install` is usually the first step towards a contribution, the pain of
broken dependencies would discourage new contributors from contributing. As a
result, we have revised our guidance for gem authors to now recommend checking
in the lock for gems.

## CONSERVATIVE UPDATING

When you make a change to the Gemfile(5) and then run `bundle install`,
Bundler will update only the gems that you modified.

In other words, if a gem that you `did not modify` worked before
you called `bundle install`, it will continue to use the exact
same versions of all dependencies as it used before the update.

Let's take a look at an example. Here's your original Gemfile(5):

    source 'https://rubygems.org'

    gem 'actionpack', '2.3.8'
    gem 'activemerchant'

In this case, both `actionpack` and `activemerchant` depend on
`activesupport`. The `actionpack` gem depends on `activesupport 2.3.8`
and `rack ~> 1.1.0`, while the `activemerchant` gem depends on
`activesupport >= 2.3.2`, `braintree >= 2.0.0`, and `builder >= 2.0.0`.

When the dependencies are first resolved, Bundler will select
`activesupport 2.3.8`, which satisfies the requirements of both
gems in your Gemfile(5).

Next, you modify your Gemfile(5) to:

    source 'https://rubygems.org'

    gem 'actionpack', '3.0.0.rc'
    gem 'activemerchant'

The `actionpack 3.0.0.rc` gem has a number of new dependencies,
and updates the `activesupport` dependency to `= 3.0.0.rc` and
the `rack` dependency to `~> 1.2.1`.

When you run `bundle install`, Bundler notices that you changed
the `actionpack` gem, but not the `activemerchant` gem. It
evaluates the gems currently being used to satisfy its requirements:

  * `activesupport 2.3.8`:
    also used to satisfy a dependency in `activemerchant`,
    which is not being updated
  * `rack ~> 1.1.0`:
    not currently being used to satisfy another dependency

Because you did not explicitly ask to update `activemerchant`,
you would not expect it to suddenly stop working after updating
`actionpack`. However, satisfying the new `activesupport 3.0.0.rc`
dependency of actionpack requires updating one of its dependencies.

Even though `activemerchant` declares a very loose dependency
that theoretically matches `activesupport 3.0.0.rc`, Bundler treats
gems in your Gemfile(5) that have not changed as an atomic unit
together with their dependencies. In this case, the `activemerchant`
dependency is treated as `activemerchant 1.7.1 + activesupport 2.3.8`,
so `bundle install` will report that it cannot update `actionpack`.

To explicitly update `actionpack`, including its dependencies
which other gems in the Gemfile(5) still depend on, run
`bundle update actionpack` (see `bundle update(1)`).

`Summary`: In general, after making a change to the Gemfile(5) , you
should first try to run `bundle install`, which will guarantee that no
other gem in the Gemfile(5) is impacted by the change. If that
does not work, run [bundle update(1)](bundle-update.1.html).

## SEE ALSO

* [Gem install docs](https://guides.rubygems.org/rubygems-basics/#installing-gems)
* [Rubygems signing docs](https://guides.rubygems.org/security/)
PK*J[�s	vv?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-pristine.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-PRISTINE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
.SH "SYNOPSIS"
\fBbundle pristine\fR
.SH "DESCRIPTION"
\fBpristine\fR restores the installed gems in the bundle to their pristine condition using the local gem cache from RubyGems\. For git gems, a forced checkout will be performed\.
.P
For further explanation, \fBbundle pristine\fR ignores unpacked files on disk\. In other words, this command utilizes the local \fB\.gem\fR cache or the gem's git repository as if one were installing from scratch\.
.P
Note: the Bundler gem cannot be restored to its original state with \fBpristine\fR\. One also cannot use \fBbundle pristine\fR on gems with a 'path' option in the Gemfile, because bundler has no original copy it can restore from\.
.P
When is it practical to use \fBbundle pristine\fR?
.P
It comes in handy when a developer is debugging a gem\. \fBbundle pristine\fR is a great way to get rid of experimental changes to a gem that one may not want\.
.P
Why use \fBbundle pristine\fR over \fBgem pristine \-\-all\fR?
.P
Both commands are very similar\. For context: \fBbundle pristine\fR, without arguments, cleans all gems from the lockfile\. Meanwhile, \fBgem pristine \-\-all\fR cleans all installed gems for that Ruby version\.
.P
If a developer forgets which gems in their project they might have been debugging, the Rubygems \fBgem pristine [GEMNAME]\fR command may be inconvenient\. One can avoid waiting for \fBgem pristine \-\-all\fR, and instead run \fBbundle pristine\fR\.
PK*J[.�
F��?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-binstubs.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-BINSTUBS" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
.SH "SYNOPSIS"
\fBbundle binstubs\fR \fIGEM_NAME\fR [\-\-force] [\-\-path PATH] [\-\-standalone] [\-\-all\-platforms]
.SH "DESCRIPTION"
Binstubs are scripts that wrap around executables\. Bundler creates a small Ruby file (a binstub) that loads Bundler, runs the command, and puts it into \fBbin/\fR\. Binstubs are a shortcut\-or alternative\- to always using \fBbundle exec\fR\. This gives you a file that can be run directly, and one that will always run the correct gem version used by the application\.
.P
For example, if you run \fBbundle binstubs rspec\-core\fR, Bundler will create the file \fBbin/rspec\fR\. That file will contain enough code to load Bundler, tell it to load the bundled gems, and then run rspec\.
.P
This command generates binstubs for executables in \fBGEM_NAME\fR\. Binstubs are put into \fBbin\fR, or the \fB\-\-path\fR directory if one has been set\. Calling binstubs with [GEM [GEM]] will create binstubs for all given gems\.
.SH "OPTIONS"
.TP
\fB\-\-force\fR
Overwrite existing binstubs if they exist\.
.TP
\fB\-\-path[=PATH]\fR
The location to install the specified binstubs to\. This defaults to \fBbin\fR\.
.TP
\fB\-\-standalone\fR
Makes binstubs that can work without depending on Rubygems or Bundler at runtime\.
.TP
\fB\-\-shebang=SHEBANG\fR
Specify a different shebang executable name than the default (default 'ruby')
.TP
\fB\-\-all\fR
Create binstubs for all gems in the bundle\.
.TP
\fB\-\-all\-platforms\fR
Install binstubs for all platforms\.

PK*J[��TT<share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-check.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CHECK" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
.SH "SYNOPSIS"
\fBbundle check\fR [\-\-dry\-run] [\-\-gemfile=FILE] [\-\-path=PATH]
.SH "DESCRIPTION"
\fBcheck\fR searches the local machine for each of the gems requested in the Gemfile\. If all gems are found, Bundler prints a success message and exits with a status of 0\.
.P
If not, the first missing gem is listed and Bundler exits status 1\.
.P
If the lockfile needs to be updated then it will be resolved using the gems installed on the local machine, if they satisfy the requirements\.
.SH "OPTIONS"
.TP
\fB\-\-dry\-run\fR
Locks the [\fBGemfile(5)\fR][Gemfile(5)] before running the command\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of the [\fBGemfile(5)\fR][Gemfile(5)]\.
.TP
\fB\-\-path=PATH\fR
Specify a different path than the system default (\fB$BUNDLE_PATH\fR or \fB$GEM_HOME\fR)\. Bundler will remember this value for future installs on this machine\.

PK*J[X��fnn;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-fund.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-FUND" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-fund\fR \- Lists information about gems seeking funding assistance
.SH "SYNOPSIS"
\fBbundle fund\fR [\fIOPTIONS\fR]
.SH "DESCRIPTION"
\fBbundle fund\fR lists information about gems seeking funding assistance\.
.SH "OPTIONS"
.TP
\fB\-\-group=<list>\fR, \fB\-g=<list>\fR
Fetch funding information for a specific group\.
.SH "EXAMPLES"
.nf
# Lists funding information for all gems
bundle fund

# Lists funding information for a specific group
bundle fund \-\-group=security
.fi

PK*J[�� YTYT=share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-config.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CONFIG" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-config\fR \- Set bundler configuration options
.SH "SYNOPSIS"
\fBbundle config\fR list
.br
\fBbundle config\fR [get] NAME
.br
\fBbundle config\fR [set] NAME VALUE
.br
\fBbundle config\fR unset NAME
.SH "DESCRIPTION"
This command allows you to interact with Bundler's configuration system\.
.P
Bundler loads configuration settings in this order:
.IP "1." 4
Local config (\fB<project_root>/\.bundle/config\fR or \fB$BUNDLE_APP_CONFIG/config\fR)
.IP "2." 4
Environmental variables (\fBENV\fR)
.IP "3." 4
Global config (\fB~/\.bundle/config\fR)
.IP "4." 4
Bundler default config
.IP "" 0
.P
Executing \fBbundle config list\fR will print a list of all bundler configuration for the current bundle, and where that configuration was set\.
.P
Executing \fBbundle config get <name>\fR will print the value of that configuration setting, and where it was set\.
.P
Executing \fBbundle config set <name> <value>\fR defaults to setting \fBlocal\fR configuration if executing from within a local application, otherwise it will set \fBglobal\fR configuration\. See \fB\-\-local\fR and \fB\-\-global\fR options below\.
.P
Executing \fBbundle config set \-\-local <name> <value>\fR will set that configuration in the directory for the local application\. The configuration will be stored in \fB<project_root>/\.bundle/config\fR\. If \fBBUNDLE_APP_CONFIG\fR is set, the configuration will be stored in \fB$BUNDLE_APP_CONFIG/config\fR\.
.P
Executing \fBbundle config set \-\-global <name> <value>\fR will set that configuration to the value specified for all bundles executed as the current user\. The configuration will be stored in \fB~/\.bundle/config\fR\. If \fIname\fR already is set, \fIname\fR will be overridden and user will be warned\.
.P
Executing \fBbundle config unset <name>\fR will delete the configuration in both local and global sources\.
.P
Executing \fBbundle config unset \-\-global <name>\fR will delete the configuration only from the user configuration\.
.P
Executing \fBbundle config unset \-\-local <name>\fR will delete the configuration only from the local application\.
.P
Executing bundle with the \fBBUNDLE_IGNORE_CONFIG\fR environment variable set will cause it to ignore all configuration\.
.SH "REMEMBERING OPTIONS"
Flags passed to \fBbundle install\fR or the Bundler runtime, such as \fB\-\-path foo\fR or \fB\-\-without production\fR, are remembered between commands and saved to your local application's configuration (normally, \fB\./\.bundle/config\fR)\.
.P
However, this will be changed in bundler 3, so it's better not to rely on this behavior\. If these options must be remembered, it's better to set them using \fBbundle config\fR (e\.g\., \fBbundle config set \-\-local path foo\fR)\.
.P
The options that can be configured are:
.TP
\fBbin\fR
Creates a directory (defaults to \fB~/bin\fR) and place any executables from the gem there\. These executables run in Bundler's context\. If used, you might add this directory to your environment's \fBPATH\fR variable\. For instance, if the \fBrails\fR gem comes with a \fBrails\fR executable, this flag will create a \fBbin/rails\fR executable that ensures that all referred dependencies will be resolved using the bundled gems\.
.TP
\fBdeployment\fR
In deployment mode, Bundler will 'roll\-out' the bundle for \fBproduction\fR use\. Please check carefully if you want to have this option enabled in \fBdevelopment\fR or \fBtest\fR environments\.
.TP
\fBonly\fR
A space\-separated list of groups to install only gems of the specified groups\. Please check carefully if you want to install also gems without a group, cause they get put inside \fBdefault\fR group\. For example \fBonly test:default\fR will install all gems specified in test group and without one\.
.TP
\fBpath\fR
The location to install the specified gems to\. This defaults to Rubygems' setting\. Bundler shares this location with Rubygems, \fBgem install \|\.\|\.\|\.\fR will have gem installed there, too\. Therefore, gems installed without a \fB\-\-path \|\.\|\.\|\.\fR setting will show up by calling \fBgem list\fR\. Accordingly, gems installed to other locations will not get listed\.
.TP
\fBwithout\fR
A space\-separated or \fB:\fR\-separated list of groups referencing gems to skip during installation\.
.TP
\fBwith\fR
A space\-separated or \fB:\fR\-separated list of \fBoptional\fR groups referencing gems to include during installation\.
.SH "BUILD OPTIONS"
You can use \fBbundle config\fR to give Bundler the flags to pass to the gem installer every time bundler tries to install a particular gem\.
.P
A very common example, the \fBmysql\fR gem, requires Snow Leopard users to pass configuration flags to \fBgem install\fR to specify where to find the \fBmysql_config\fR executable\.
.IP "" 4
.nf
gem install mysql \-\- \-\-with\-mysql\-config=/usr/local/mysql/bin/mysql_config
.fi
.IP "" 0
.P
Since the specific location of that executable can change from machine to machine, you can specify these flags on a per\-machine basis\.
.IP "" 4
.nf
bundle config set \-\-global build\.mysql \-\-with\-mysql\-config=/usr/local/mysql/bin/mysql_config
.fi
.IP "" 0
.P
After running this command, every time bundler needs to install the \fBmysql\fR gem, it will pass along the flags you specified\.
.SH "CONFIGURATION KEYS"
Configuration keys in bundler have two forms: the canonical form and the environment variable form\.
.P
For instance, passing the \fB\-\-without\fR flag to bundle install(1) \fIbundle\-install\.1\.html\fR prevents Bundler from installing certain groups specified in the Gemfile(5)\. Bundler persists this value in \fBapp/\.bundle/config\fR so that calls to \fBBundler\.setup\fR do not try to find gems from the \fBGemfile\fR that you didn't install\. Additionally, subsequent calls to bundle install(1) \fIbundle\-install\.1\.html\fR remember this setting and skip those groups\.
.P
The canonical form of this configuration is \fB"without"\fR\. To convert the canonical form to the environment variable form, capitalize it, and prepend \fBBUNDLE_\fR\. The environment variable form of \fB"without"\fR is \fBBUNDLE_WITHOUT\fR\.
.P
Any periods in the configuration keys must be replaced with two underscores when setting it via environment variables\. The configuration key \fBlocal\.rack\fR becomes the environment variable \fBBUNDLE_LOCAL__RACK\fR\.
.SH "LIST OF AVAILABLE KEYS"
The following is a list of all configuration keys and their purpose\. You can learn more about their operation in bundle install(1) \fIbundle\-install\.1\.html\fR\.
.IP "\(bu" 4
\fBallow_offline_install\fR (\fBBUNDLE_ALLOW_OFFLINE_INSTALL\fR): Allow Bundler to use cached data when installing without network access\.
.IP "\(bu" 4
\fBauto_clean_without_path\fR (\fBBUNDLE_AUTO_CLEAN_WITHOUT_PATH\fR): Automatically run \fBbundle clean\fR after installing when an explicit \fBpath\fR has not been set and Bundler is not installing into the system gems\.
.IP "\(bu" 4
\fBauto_install\fR (\fBBUNDLE_AUTO_INSTALL\fR): Automatically run \fBbundle install\fR when gems are missing\.
.IP "\(bu" 4
\fBbin\fR (\fBBUNDLE_BIN\fR): Install executables from gems in the bundle to the specified directory\. Defaults to \fBfalse\fR\.
.IP "\(bu" 4
\fBcache_all\fR (\fBBUNDLE_CACHE_ALL\fR): Cache all gems, including path and git gems\. This needs to be explicitly configured on bundler 1 and bundler 2, but will be the default on bundler 3\.
.IP "\(bu" 4
\fBcache_all_platforms\fR (\fBBUNDLE_CACHE_ALL_PLATFORMS\fR): Cache gems for all platforms\.
.IP "\(bu" 4
\fBcache_path\fR (\fBBUNDLE_CACHE_PATH\fR): The directory that bundler will place cached gems in when running \fBbundle package\fR, and that bundler will look in when installing gems\. Defaults to \fBvendor/cache\fR\.
.IP "\(bu" 4
\fBclean\fR (\fBBUNDLE_CLEAN\fR): Whether Bundler should run \fBbundle clean\fR automatically after \fBbundle install\fR\.
.IP "\(bu" 4
\fBconsole\fR (\fBBUNDLE_CONSOLE\fR): The console that \fBbundle console\fR starts\. Defaults to \fBirb\fR\.
.IP "\(bu" 4
\fBdefault_install_uses_path\fR (\fBBUNDLE_DEFAULT_INSTALL_USES_PATH\fR): Whether a \fBbundle install\fR without an explicit \fB\-\-path\fR argument defaults to installing gems in \fB\.bundle\fR\.
.IP "\(bu" 4
\fBdeployment\fR (\fBBUNDLE_DEPLOYMENT\fR): Disallow changes to the \fBGemfile\fR\. When the \fBGemfile\fR is changed and the lockfile has not been updated, running Bundler commands will be blocked\.
.IP "\(bu" 4
\fBdisable_checksum_validation\fR (\fBBUNDLE_DISABLE_CHECKSUM_VALIDATION\fR): Allow installing gems even if they do not match the checksum provided by RubyGems\.
.IP "\(bu" 4
\fBdisable_exec_load\fR (\fBBUNDLE_DISABLE_EXEC_LOAD\fR): Stop Bundler from using \fBload\fR to launch an executable in\-process in \fBbundle exec\fR\.
.IP "\(bu" 4
\fBdisable_local_branch_check\fR (\fBBUNDLE_DISABLE_LOCAL_BRANCH_CHECK\fR): Allow Bundler to use a local git override without a branch specified in the Gemfile\.
.IP "\(bu" 4
\fBdisable_local_revision_check\fR (\fBBUNDLE_DISABLE_LOCAL_REVISION_CHECK\fR): Allow Bundler to use a local git override without checking if the revision present in the lockfile is present in the repository\.
.IP "\(bu" 4
\fBdisable_shared_gems\fR (\fBBUNDLE_DISABLE_SHARED_GEMS\fR): Stop Bundler from accessing gems installed to RubyGems' normal location\.
.IP "\(bu" 4
\fBdisable_version_check\fR (\fBBUNDLE_DISABLE_VERSION_CHECK\fR): Stop Bundler from checking if a newer Bundler version is available on rubygems\.org\.
.IP "\(bu" 4
\fBforce_ruby_platform\fR (\fBBUNDLE_FORCE_RUBY_PLATFORM\fR): Ignore the current machine's platform and install only \fBruby\fR platform gems\. As a result, gems with native extensions will be compiled from source\.
.IP "\(bu" 4
\fBfrozen\fR (\fBBUNDLE_FROZEN\fR): Disallow changes to the \fBGemfile\fR\. When the \fBGemfile\fR is changed and the lockfile has not been updated, running Bundler commands will be blocked\. Defaults to \fBtrue\fR when \fB\-\-deployment\fR is used\.
.IP "\(bu" 4
\fBgem\.github_username\fR (\fBBUNDLE_GEM__GITHUB_USERNAME\fR): Sets a GitHub username or organization to be used in \fBREADME\fR file when you create a new gem via \fBbundle gem\fR command\. It can be overridden by passing an explicit \fB\-\-github\-username\fR flag to \fBbundle gem\fR\.
.IP "\(bu" 4
\fBgem\.push_key\fR (\fBBUNDLE_GEM__PUSH_KEY\fR): Sets the \fB\-\-key\fR parameter for \fBgem push\fR when using the \fBrake release\fR command with a private gemstash server\.
.IP "\(bu" 4
\fBgemfile\fR (\fBBUNDLE_GEMFILE\fR): The name of the file that bundler should use as the \fBGemfile\fR\. This location of this file also sets the root of the project, which is used to resolve relative paths in the \fBGemfile\fR, among other things\. By default, bundler will search up from the current working directory until it finds a \fBGemfile\fR\.
.IP "\(bu" 4
\fBglobal_gem_cache\fR (\fBBUNDLE_GLOBAL_GEM_CACHE\fR): Whether Bundler should cache all gems globally, rather than locally to the installing Ruby installation\.
.IP "\(bu" 4
\fBignore_funding_requests\fR (\fBBUNDLE_IGNORE_FUNDING_REQUESTS\fR): When set, no funding requests will be printed\.
.IP "\(bu" 4
\fBignore_messages\fR (\fBBUNDLE_IGNORE_MESSAGES\fR): When set, no post install messages will be printed\. To silence a single gem, use dot notation like \fBignore_messages\.httparty true\fR\.
.IP "\(bu" 4
\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR): Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
.IP "\(bu" 4
\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to the number of available processors\.
.IP "\(bu" 4
\fBlockfile_checksums\fR (\fBBUNDLE_LOCKFILE_CHECKSUMS\fR): Whether Bundler should include a checksums section in new lockfiles, to protect from compromised gem sources\.
.IP "\(bu" 4
\fBno_install\fR (\fBBUNDLE_NO_INSTALL\fR): Whether \fBbundle package\fR should skip installing gems\.
.IP "\(bu" 4
\fBno_prune\fR (\fBBUNDLE_NO_PRUNE\fR): Whether Bundler should leave outdated gems unpruned when caching\.
.IP "\(bu" 4
\fBonly\fR (\fBBUNDLE_ONLY\fR): A space\-separated list of groups to install only gems of the specified groups\.
.IP "\(bu" 4
\fBpath\fR (\fBBUNDLE_PATH\fR): The location on disk where all gems in your bundle will be located regardless of \fB$GEM_HOME\fR or \fB$GEM_PATH\fR values\. Bundle gems not found in this location will be installed by \fBbundle install\fR\. Defaults to \fBGem\.dir\fR\. When \-\-deployment is used, defaults to vendor/bundle\.
.IP "\(bu" 4
\fBpath\.system\fR (\fBBUNDLE_PATH__SYSTEM\fR): Whether Bundler will install gems into the default system path (\fBGem\.dir\fR)\.
.IP "\(bu" 4
\fBpath_relative_to_cwd\fR (\fBBUNDLE_PATH_RELATIVE_TO_CWD\fR) Makes \fB\-\-path\fR relative to the CWD instead of the \fBGemfile\fR\.
.IP "\(bu" 4
\fBplugins\fR (\fBBUNDLE_PLUGINS\fR): Enable Bundler's experimental plugin system\.
.IP "\(bu" 4
\fBprefer_patch\fR (BUNDLE_PREFER_PATCH): Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\.
.IP "\(bu" 4
\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR): Print only version number from \fBbundler \-\-version\fR\.
.IP "\(bu" 4
\fBredirect\fR (\fBBUNDLE_REDIRECT\fR): The number of redirects allowed for network requests\. Defaults to \fB5\fR\.
.IP "\(bu" 4
\fBretry\fR (\fBBUNDLE_RETRY\fR): The number of times to retry failed network requests\. Defaults to \fB3\fR\.
.IP "\(bu" 4
\fBsetup_makes_kernel_gem_public\fR (\fBBUNDLE_SETUP_MAKES_KERNEL_GEM_PUBLIC\fR): Have \fBBundler\.setup\fR make the \fBKernel#gem\fR method public, even though RubyGems declares it as private\.
.IP "\(bu" 4
\fBshebang\fR (\fBBUNDLE_SHEBANG\fR): The program name that should be invoked for generated binstubs\. Defaults to the ruby install name used to generate the binstub\.
.IP "\(bu" 4
\fBsilence_deprecations\fR (\fBBUNDLE_SILENCE_DEPRECATIONS\fR): Whether Bundler should silence deprecation warnings for behavior that will be changed in the next major version\.
.IP "\(bu" 4
\fBsilence_root_warning\fR (\fBBUNDLE_SILENCE_ROOT_WARNING\fR): Silence the warning Bundler prints when installing gems as root\.
.IP "\(bu" 4
\fBssl_ca_cert\fR (\fBBUNDLE_SSL_CA_CERT\fR): Path to a designated CA certificate file or folder containing multiple certificates for trusted CAs in PEM format\.
.IP "\(bu" 4
\fBssl_client_cert\fR (\fBBUNDLE_SSL_CLIENT_CERT\fR): Path to a designated file containing a X\.509 client certificate and key in PEM format\.
.IP "\(bu" 4
\fBssl_verify_mode\fR (\fBBUNDLE_SSL_VERIFY_MODE\fR): The SSL verification mode Bundler uses when making HTTPS requests\. Defaults to verify peer\.
.IP "\(bu" 4
\fBsystem_bindir\fR (\fBBUNDLE_SYSTEM_BINDIR\fR): The location where RubyGems installs binstubs\. Defaults to \fBGem\.bindir\fR\.
.IP "\(bu" 4
\fBtimeout\fR (\fBBUNDLE_TIMEOUT\fR): The seconds allowed before timing out for network requests\. Defaults to \fB10\fR\.
.IP "\(bu" 4
\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
.IP "\(bu" 4
\fBuser_agent\fR (\fBBUNDLE_USER_AGENT\fR): The custom user agent fragment Bundler includes in API requests\.
.IP "\(bu" 4
\fBversion\fR (\fBBUNDLE_VERSION\fR): The version of Bundler to use when running under Bundler environment\. Defaults to \fBlockfile\fR\. You can also specify \fBsystem\fR or \fBx\.y\.z\fR\. \fBlockfile\fR will use the Bundler version specified in the \fBGemfile\.lock\fR, \fBsystem\fR will use the system version of Bundler, and \fBx\.y\.z\fR will use the specified version of Bundler\.
.IP "\(bu" 4
\fBwith\fR (\fBBUNDLE_WITH\fR): A space\-separated or \fB:\fR\-separated list of groups whose gems bundler should install\.
.IP "\(bu" 4
\fBwithout\fR (\fBBUNDLE_WITHOUT\fR): A space\-separated or \fB:\fR\-separated list of groups whose gems bundler should not install\.
.IP "" 0
.SH "LOCAL GIT REPOS"
Bundler also allows you to work against a git repository locally instead of using the remote version\. This can be achieved by setting up a local override:
.IP "" 4
.nf
bundle config set \-\-local local\.GEM_NAME /path/to/local/git/repository
.fi
.IP "" 0
.P
For example, in order to use a local Rack repository, a developer could call:
.IP "" 4
.nf
bundle config set \-\-local local\.rack ~/Work/git/rack
.fi
.IP "" 0
.P
Now instead of checking out the remote git repository, the local override will be used\. Similar to a path source, every time the local git repository change, changes will be automatically picked up by Bundler\. This means a commit in the local git repo will update the revision in the \fBGemfile\.lock\fR to the local git repo revision\. This requires the same attention as git submodules\. Before pushing to the remote, you need to ensure the local override was pushed, otherwise you may point to a commit that only exists in your local machine\. You'll also need to CGI escape your usernames and passwords as well\.
.P
Bundler does many checks to ensure a developer won't work with invalid references\. Particularly, we force a developer to specify a branch in the \fBGemfile\fR in order to use this feature\. If the branch specified in the \fBGemfile\fR and the current branch in the local git repository do not match, Bundler will abort\. This ensures that a developer is always working against the correct branches, and prevents accidental locking to a different branch\.
.P
Finally, Bundler also ensures that the current revision in the \fBGemfile\.lock\fR exists in the local git repository\. By doing this, Bundler forces you to fetch the latest changes in the remotes\.
.SH "MIRRORS OF GEM SOURCES"
Bundler supports overriding gem sources with mirrors\. This allows you to configure rubygems\.org as the gem source in your Gemfile while still using your mirror to fetch gems\.
.IP "" 4
.nf
bundle config set \-\-global mirror\.SOURCE_URL MIRROR_URL
.fi
.IP "" 0
.P
For example, to use a mirror of https://rubygems\.org hosted at https://example\.org:
.IP "" 4
.nf
bundle config set \-\-global mirror\.https://rubygems\.org https://example\.org
.fi
.IP "" 0
.P
Each mirror also provides a fallback timeout setting\. If the mirror does not respond within the fallback timeout, Bundler will try to use the original server instead of the mirror\.
.IP "" 4
.nf
bundle config set \-\-global mirror\.SOURCE_URL\.fallback_timeout TIMEOUT
.fi
.IP "" 0
.P
For example, to fall back to rubygems\.org after 3 seconds:
.IP "" 4
.nf
bundle config set \-\-global mirror\.https://rubygems\.org\.fallback_timeout 3
.fi
.IP "" 0
.P
The default fallback timeout is 0\.1 seconds, but the setting can currently only accept whole seconds (for example, 1, 15, or 30)\.
.SH "CREDENTIALS FOR GEM SOURCES"
Bundler allows you to configure credentials for any gem source, which allows you to avoid putting secrets into your Gemfile\.
.IP "" 4
.nf
bundle config set \-\-global SOURCE_HOSTNAME USERNAME:PASSWORD
.fi
.IP "" 0
.P
For example, to save the credentials of user \fBclaudette\fR for the gem source at \fBgems\.longerous\.com\fR, you would run:
.IP "" 4
.nf
bundle config set \-\-global gems\.longerous\.com claudette:s00pers3krit
.fi
.IP "" 0
.P
Or you can set the credentials as an environment variable like this:
.IP "" 4
.nf
export BUNDLE_GEMS__LONGEROUS__COM="claudette:s00pers3krit"
.fi
.IP "" 0
.P
For gems with a git source with HTTP(S) URL you can specify credentials like so:
.IP "" 4
.nf
bundle config set \-\-global https://github\.com/rubygems/rubygems\.git username:password
.fi
.IP "" 0
.P
Or you can set the credentials as an environment variable like so:
.IP "" 4
.nf
export BUNDLE_GITHUB__COM=username:password
.fi
.IP "" 0
.P
This is especially useful for private repositories on hosts such as GitHub, where you can use personal OAuth tokens:
.IP "" 4
.nf
export BUNDLE_GITHUB__COM=abcd0123generatedtoken:x\-oauth\-basic
.fi
.IP "" 0
.P
Note that any configured credentials will be redacted by informative commands such as \fBbundle config list\fR or \fBbundle config get\fR, unless you use the \fB\-\-parseable\fR flag\. This is to avoid unintentionally leaking credentials when copy\-pasting bundler output\.
.P
Also note that to guarantee a sane mapping between valid environment variable names and valid host names, bundler makes the following transformations:
.IP "\(bu" 4
Any \fB\-\fR characters in a host name are mapped to a triple underscore (\fB___\fR) in the corresponding environment variable\.
.IP "\(bu" 4
Any \fB\.\fR characters in a host name are mapped to a double underscore (\fB__\fR) in the corresponding environment variable\.
.IP "" 0
.P
This means that if you have a gem server named \fBmy\.gem\-host\.com\fR, you'll need to use the \fBBUNDLE_MY__GEM___HOST__COM\fR variable to configure credentials for it through ENV\.
.SH "CONFIGURE BUNDLER DIRECTORIES"
Bundler's home, cache and plugin directories and config file can be configured through environment variables\. The default location for Bundler's home directory is \fB~/\.bundle\fR, which all directories inherit from by default\. The following outlines the available environment variables and their default values
.IP "" 4
.nf
BUNDLE_USER_HOME : $HOME/\.bundle
BUNDLE_USER_CACHE : $BUNDLE_USER_HOME/cache
BUNDLE_USER_CONFIG : $BUNDLE_USER_HOME/config
BUNDLE_USER_PLUGIN : $BUNDLE_USER_HOME/plugin
.fi
.IP "" 0

PK*J[�3�ppAshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-clean.1.ronnnu�[���bundle-clean(1) -- Cleans up unused gems in your bundler directory
==================================================================

## SYNOPSIS

`bundle clean` [--dry-run] [--force]

## DESCRIPTION

This command will remove all unused gems in your bundler directory. This is
useful when you have made many changes to your gem dependencies.

## OPTIONS

* `--dry-run`:
  Print the changes, but do not clean the unused gems.
* `--force`:
  Forces cleaning up unused gems even if Bundler is configured to use globally installed gems. As a consequence, removes all system gems except for the ones in the current application.
PK*J[����Ashare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-issue.1.ronnnu�[���bundle-issue(1) -- Get help reporting Bundler issues
====================================================

## SYNOPSIS

`bundle issue`

## DESCRIPTION

Provides guidance on reporting Bundler issues and outputs detailed system information that should be included when filing a bug report. This command:

1. Displays links to troubleshooting resources
2. Shows instructions for reporting issues
3. Outputs comprehensive environment information needed for debugging

The command helps ensure that bug reports include all necessary system details for effective troubleshooting.

## OUTPUT

The command outputs several sections:

* Troubleshooting links and resources
* Link to the GitHub issue template
* Environment information including: Bundler version and platforms, Ruby version and configuration, RubyGems version and paths, Development tool versions (Git, RVM, rbenv, chruby)
* Bundler build metadata
* Current Bundler settings
* Bundle Doctor output

## EXAMPLES

Get issue reporting information:

    $ bundle issue

## SEE ALSO

* bundle-doctor(1)
PK*J[>��.��<share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-cache.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CACHE" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
.SH "SYNOPSIS"
\fBbundle cache\fR [\fIOPTIONS\fR]
.P
alias: \fBpackage\fR, \fBpack\fR
.SH "DESCRIPTION"
Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR, use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
.SH "OPTIONS"
.TP
\fB\-\-all\fR
Include all sources (including path and git)\.
.TP
\fB\-\-all\-platforms\fR
Include gems for all platforms present in the lockfile, not only the current one\.
.TP
\fB\-\-cache\-path=CACHE\-PATH\fR
Specify a different cache path than the default (vendor/cache)\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of Gemfile\.
.TP
\fB\-\-no\-install\fR
Don't install the gems, only update the cache\.
.TP
\fB\-\-no\-prune\fR
Don't remove stale gems from the cache\.
.TP
\fB\-\-path=PATH\fR
Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME)\.
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.TP
\fB\-\-frozen\fR
Do not allow the Gemfile\.lock to be updated after this bundle cache operation's install\.
.SH "GIT AND PATH GEMS"
The \fBbundle cache\fR command can also package \fB:git\fR and \fB:path\fR dependencies besides \.gem files\. This needs to be explicitly enabled via the \fB\-\-all\fR option\. Once used, the \fB\-\-all\fR option will be remembered\.
.SH "SUPPORT FOR MULTIPLE PLATFORMS"
When using gems that have different packages for different platforms, Bundler supports caching of gems for other platforms where the Gemfile has been resolved (i\.e\. present in the lockfile) in \fBvendor/cache\fR\. This needs to be enabled via the \fB\-\-all\-platforms\fR option\. This setting will be remembered in your local bundler configuration\.
.SH "REMOTE FETCHING"
By default, if you run \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR after running bundle cache(1) \fIbundle\-cache\.1\.html\fR, bundler will still connect to \fBrubygems\.org\fR to check whether a platform\-specific gem exists for any of the gems in \fBvendor/cache\fR\.
.P
For instance, consider this Gemfile(5):
.IP "" 4
.nf
source "https://rubygems\.org"

gem "nokogiri"
.fi
.IP "" 0
.P
If you run \fBbundle cache\fR under C Ruby, bundler will retrieve the version of \fBnokogiri\fR for the \fB"ruby"\fR platform\. If you deploy to JRuby and run \fBbundle install\fR, bundler is forced to check to see whether a \fB"java"\fR platformed \fBnokogiri\fR exists\.
.P
Even though the \fBnokogiri\fR gem for the Ruby platform is \fItechnically\fR acceptable on JRuby, it has a C extension that does not run on JRuby\. As a result, bundler will, by default, still connect to \fBrubygems\.org\fR to check whether it has a version of one of your gems more specific to your platform\.
.P
This problem is also not limited to the \fB"java"\fR platform\. A similar (common) problem can happen when developing on Windows and deploying to Linux, or even when developing on OSX and deploying to Linux\.
.P
If you know for sure that the gems packaged in \fBvendor/cache\fR are appropriate for the platform you are on, you can run \fBbundle install \-\-local\fR to skip checking for more appropriate gems, and use the ones in \fBvendor/cache\fR\.
.P
One way to be sure that you have the right platformed versions of all your gems is to run \fBbundle cache\fR on an identical machine and check in the gems\. For instance, you can run \fBbundle cache\fR on an identical staging box during your staging process, and check in the \fBvendor/cache\fR before deploying to production\.
.P
By default, bundle cache(1) \fIbundle\-cache\.1\.html\fR fetches and also installs the gems to the default location\. To package the dependencies to \fBvendor/cache\fR without installing them to the local install location, you can run \fBbundle cache \-\-no\-install\fR\.
.SH "HISTORY"
In Bundler 2\.1, \fBcache\fR took in the functionalities of \fBpackage\fR and now \fBpackage\fR and \fBpack\fR are aliases of \fBcache\fR\.
PK*J[�ōP��Dshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-binstubs.1.ronnnu�[���bundle-binstubs(1) -- Install the binstubs of the listed gems
=============================================================

## SYNOPSIS

`bundle binstubs` <GEM_NAME> [--force] [--path PATH] [--standalone] [--all-platforms]

## DESCRIPTION

Binstubs are scripts that wrap around executables. Bundler creates a
small Ruby file (a binstub) that loads Bundler, runs the command,
and puts it into `bin/`. Binstubs are a shortcut-or alternative-
to always using `bundle exec`. This gives you a file that can be run
directly, and one that will always run the correct gem version
used by the application.

For example, if you run `bundle binstubs rspec-core`, Bundler will create
the file `bin/rspec`. That file will contain enough code to load Bundler,
tell it to load the bundled gems, and then run rspec.

This command generates binstubs for executables in `GEM_NAME`.
Binstubs are put into `bin`, or the `--path` directory if one has been set.
Calling binstubs with [GEM [GEM]] will create binstubs for all given gems.

## OPTIONS

* `--force`:
  Overwrite existing binstubs if they exist.

* `--path[=PATH]`:
  The location to install the specified binstubs to. This defaults to `bin`.

* `--standalone`:
  Makes binstubs that can work without depending on Rubygems or Bundler at
  runtime.

* `--shebang=SHEBANG`:
  Specify a different shebang executable name than the default (default 'ruby')

* `--all`:
  Create binstubs for all gems in the bundle.

* `--all-platforms`:
  Install binstubs for all platforms.
PK*J[v�U��;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-list.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-LIST" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-list\fR \- List all the gems in the bundle
.SH "SYNOPSIS"
\fBbundle list\fR [\-\-name\-only] [\-\-paths] [\-\-without\-group=GROUP[ GROUP\|\.\|\.\|\.]] [\-\-only\-group=GROUP[ GROUP\|\.\|\.\|\.]]
.SH "DESCRIPTION"
Prints a list of all the gems in the bundle including their version\.
.P
Example:
.P
bundle list \-\-name\-only
.P
bundle list \-\-paths
.P
bundle list \-\-without\-group test
.P
bundle list \-\-only\-group dev
.P
bundle list \-\-only\-group dev test \-\-paths
.SH "OPTIONS"
.TP
\fB\-\-name\-only\fR
Print only the name of each gem\.
.TP
\fB\-\-paths\fR
Print the path to each gem in the bundle\.
.TP
\fB\-\-without\-group=<list>\fR
A space\-separated list of groups of gems to skip during printing\.
.TP
\fB\-\-only\-group=<list>\fR
A space\-separated list of groups of gems to print\.

PK*J[���		@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-init.1.ronnnu�[���bundle-init(1) -- Generates a Gemfile into the current working directory
========================================================================

## SYNOPSIS

`bundle init` [--gemspec=FILE]

## DESCRIPTION

Init generates a default [`Gemfile(5)`][Gemfile(5)] in the current working directory. When
adding a [`Gemfile(5)`][Gemfile(5)] to a gem with a gemspec, the `--gemspec` option will
automatically add each dependency listed in the gemspec file to the newly
created [`Gemfile(5)`][Gemfile(5)].

## OPTIONS

* `--gemspec=GEMSPEC`:
  Use the specified .gemspec to create the [`Gemfile(5)`][Gemfile(5)]

* `--gemfile=GEMFILE`:
  Use the specified name for the gemfile instead of `Gemfile`

## FILES

Included in the default [`Gemfile(5)`][Gemfile(5)]
generated is the line `# frozen_string_literal: true`. This is a magic comment
supported for the first time in Ruby 2.3. The presence of this line
results in all string literals in the file being implicitly frozen.

## SEE ALSO

[Gemfile(5)](https://bundler.io/man/gemfile.5.html)
PK*J[��}jj>share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-version.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-VERSION" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-version\fR \- Prints Bundler version information
.SH "SYNOPSIS"
\fBbundle version\fR
.SH "DESCRIPTION"
Prints Bundler version information\.
.SH "OPTIONS"
No options\.
.SH "EXAMPLE"
Print the version of Bundler with build date and commit hash of the in the Git source\.
.IP "" 4
.nf
bundle version
.fi
.IP "" 0
.P
shows \fBBundler version 2\.3\.21 (2022\-08\-24 commit d54be5fdd8)\fR for example\.
.P
cf\. \fBbundle \-\-version\fR shows \fBBundler version 2\.3\.21\fR\.
PK*J[�h$u��;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-init.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INIT" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
.SH "SYNOPSIS"
\fBbundle init\fR [\-\-gemspec=FILE]
.SH "DESCRIPTION"
Init generates a default [\fBGemfile(5)\fR][Gemfile(5)] in the current working directory\. When adding a [\fBGemfile(5)\fR][Gemfile(5)] to a gem with a gemspec, the \fB\-\-gemspec\fR option will automatically add each dependency listed in the gemspec file to the newly created [\fBGemfile(5)\fR][Gemfile(5)]\.
.SH "OPTIONS"
.TP
\fB\-\-gemspec=GEMSPEC\fR
Use the specified \.gemspec to create the [\fBGemfile(5)\fR][Gemfile(5)]
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified name for the gemfile instead of \fBGemfile\fR
.SH "FILES"
Included in the default [\fBGemfile(5)\fR][Gemfile(5)] generated is the line \fB# frozen_string_literal: true\fR\. This is a magic comment supported for the first time in Ruby 2\.3\. The presence of this line results in all string literals in the file being implicitly frozen\.
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR
PK*J[��^���:share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-viz.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-VIZ" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
.SH "SYNOPSIS"
\fBbundle viz\fR [\-\-file=FILE] [\-\-format=FORMAT] [\-\-requirements] [\-\-version] [\-\-without=GROUP GROUP]
.SH "DESCRIPTION"
\fBviz\fR generates a PNG file of the current \fBGemfile(5)\fR as a dependency graph\. \fBviz\fR requires the ruby\-graphviz gem (and its dependencies)\.
.P
The associated gems must also be installed via \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR\.
.P
\fBviz\fR command was deprecated in Bundler 2\.2\. Use bundler\-graph plugin \fIhttps://github\.com/rubygems/bundler\-graph\fR instead\.
.SH "OPTIONS"
.TP
\fB\-\-file=FILE\fR, \fB\-f=FILE\fR
The name to use for the generated file\. See \fB\-\-format\fR option
.TP
\fB\-\-format=FORMAT\fR, \fB\-F=FORMAT\fR
This is output format option\. Supported format is png, jpg, svg, dot \|\.\|\.\|\.
.TP
\fB\-\-requirements\fR, \fB\-R\fR
Set to show the version of each required dependency\.
.TP
\fB\-\-version\fR, \fB\-v\fR
Set to show each gem version\.
.TP
\fB\-\-without=<list>\fR, \fB\-W=<list>\fR
Exclude gems that are part of the specified named group\.

PK*J[�v|��<share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-clean.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-CLEAN" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
.SH "SYNOPSIS"
\fBbundle clean\fR [\-\-dry\-run] [\-\-force]
.SH "DESCRIPTION"
This command will remove all unused gems in your bundler directory\. This is useful when you have made many changes to your gem dependencies\.
.SH "OPTIONS"
.TP
\fB\-\-dry\-run\fR
Print the changes, but do not clean the unused gems\.
.TP
\fB\-\-force\fR
Forces cleaning up unused gems even if Bundler is configured to use globally installed gems\. As a consequence, removes all system gems except for the ones in the current application\.

PK*J[��K�ee?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-viz.1.ronnnu�[���bundle-viz(1) -- Generates a visual dependency graph for your Gemfile
=====================================================================

## SYNOPSIS

`bundle viz` [--file=FILE]
             [--format=FORMAT]
             [--requirements]
             [--version]
             [--without=GROUP GROUP]

## DESCRIPTION

`viz` generates a PNG file of the current `Gemfile(5)` as a dependency graph.
`viz` requires the ruby-graphviz gem (and its dependencies).

The associated gems must also be installed via [`bundle install(1)`](bundle-install.1.html).

`viz` command was deprecated in Bundler 2.2. Use [bundler-graph plugin](https://github.com/rubygems/bundler-graph) instead.

## OPTIONS

* `--file=FILE`, `-f=FILE`:
  The name to use for the generated file. See `--format` option

* `--format=FORMAT`, `-F=FORMAT`:
  This is output format option. Supported format is png, jpg, svg, dot ...

* `--requirements`, `-R`:
  Set to show the version of each required dependency.

* `--version`, `-v`:
  Set to show each gem version.

* `--without=<list>`, `-W=<list>`:
  Exclude gems that are part of the specified named group.
PK*J[�\|O��Bshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-doctor.1.ronnnu�[���bundle-doctor(1) -- Checks the bundle for common problems
=========================================================

## SYNOPSIS

`bundle doctor` [--quiet]
                [--gemfile=GEMFILE]

## DESCRIPTION

Checks your Gemfile and gem environment for common problems. If issues
are detected, Bundler prints them and exits status 1. Otherwise,
Bundler prints a success message and exits status 0.

Examples of common problems caught by bundle-doctor include:

* Invalid Bundler settings
* Mismatched Ruby versions
* Mismatched platforms
* Uninstalled gems
* Missing dependencies

## OPTIONS

* `--quiet`:
  Only output warnings and errors.

* `--gemfile=GEMFILE`:
  The location of the Gemfile(5) which Bundler should use. This defaults
  to a Gemfile(5) in the current working directory. In general, Bundler
  will assume that the location of the Gemfile(5) is also the project's
  root and will try to find `Gemfile.lock` and `vendor/cache` relative
  to this location.
PK*J[M�"��Ashare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-check.1.ronnnu�[���bundle-check(1) -- Verifies if dependencies are satisfied by installed gems
===========================================================================

## SYNOPSIS

`bundle check` [--dry-run]
               [--gemfile=FILE]
               [--path=PATH]

## DESCRIPTION

`check` searches the local machine for each of the gems requested in the
Gemfile. If all gems are found, Bundler prints a success message and exits with
a status of 0.

If not, the first missing gem is listed and Bundler exits status 1.

If the lockfile needs to be updated then it will be resolved using the gems
installed on the local machine, if they satisfy the requirements.

## OPTIONS

* `--dry-run`:
  Locks the [`Gemfile(5)`][Gemfile(5)] before running the command.

* `--gemfile=GEMFILE`:
  Use the specified gemfile instead of the [`Gemfile(5)`][Gemfile(5)].

* `--path=PATH`:
  Specify a different path than the system default (`$BUNDLE_PATH` or `$GEM_HOME`).
  Bundler will remember this value for future installs on this machine.
PK*J[�lr]]@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-help.1.ronnnu�[���bundle-help(1) -- Displays detailed help for each subcommand
============================================================

## SYNOPSIS

`bundle help` [COMMAND]

## DESCRIPTION

Displays detailed help for the given subcommand.
You can specify a single `COMMAND` at the same time.
When `COMMAND` is omitted, help for `help` command will be displayed.
PK*J[
6V�U�U<share/gems/gems/bundler-2.6.7/lib/bundler/man/gemfile.5.ronnnu�[���Gemfile(5) -- A format for describing gem dependencies for Ruby programs
========================================================================

## SYNOPSIS

A `Gemfile` describes the gem dependencies required to execute associated
Ruby code.

Place the `Gemfile` in the root of the directory containing the associated
code. For instance, in a Rails application, place the `Gemfile` in the same
directory as the `Rakefile`.

## SYNTAX

A `Gemfile` is evaluated as Ruby code, in a context which makes available
a number of methods used to describe the gem requirements.

## GLOBAL SOURCE

At the top of the `Gemfile`, add a single line for the `RubyGems` source that
contains the gems listed in the `Gemfile`.

    source "https://rubygems.org"

You can add only one global source. In Bundler 1.13, adding multiple global
sources was deprecated. The `source` `MUST` be a valid RubyGems repository.

To use more than one source of RubyGems, you should use [`source` block
](#BLOCK-FORM-OF-SOURCE-GIT-PATH-GROUP-and-PLATFORMS).

A source is checked for gems following the heuristics described in
[SOURCE PRIORITY][].

**Note about a behavior of the feature deprecated in Bundler 1.13**:
If a gem is found in more than one global source, Bundler
will print a warning after installing the gem indicating which source was used,
and listing the other sources where the gem is available. A specific source can
be selected for gems that need to use a non-standard repository, suppressing
this warning, by using the [`:source` option](#SOURCE) or `source` block.

### CREDENTIALS

Some gem sources require a username and password. Use [bundle config(1)](bundle-config.1.html) to set
the username and password for any of the sources that need it. The command must
be run once on each computer that will install the Gemfile, but this keeps the
credentials from being stored in plain text in version control.

    bundle config gems.example.com user:password

For some sources, like a company Gemfury account, it may be easier to
include the credentials in the Gemfile as part of the source URL.

    source "https://user:password@gems.example.com"

Credentials in the source URL will take precedence over credentials set using
`config`.

## RUBY

If your application requires a specific Ruby version or engine, specify your
requirements using the `ruby` method, with the following arguments.
All parameters are `OPTIONAL` unless otherwise specified.

### VERSION (required)

The version of Ruby that your application requires. If your application
requires an alternate Ruby engine, such as JRuby, TruffleRuby, etc., this
should be the Ruby version that the engine is compatible with.

    ruby "3.1.2"

If you wish to derive your Ruby version from a version file (ie .ruby-version),
you can use the `file` option instead.

    ruby file: ".ruby-version"

The version file should conform to any of the following formats:

  - `3.1.2` (.ruby-version)
  - `ruby 3.1.2` (.tool-versions, read: https://asdf-vm.com/manage/configuration.html#tool-versions)

### ENGINE

Each application _may_ specify a Ruby engine. If an engine is specified, an
engine version _must_ also be specified.

What exactly is an Engine?
  - A Ruby engine is an implementation of the Ruby language.

  - For background: the reference or original implementation of the Ruby
    programming language is called
    [Matz's Ruby Interpreter](https://en.wikipedia.org/wiki/Ruby_MRI), or  MRI
    for short. This is named after Ruby creator Yukihiro Matsumoto,
    also known as Matz. MRI is also known as CRuby, because it is written in C.
    MRI is the most widely used Ruby engine.

  - [Other implementations](https://www.ruby-lang.org/en/about/) of Ruby exist.
    Some of the more well-known implementations include
    [JRuby](https://www.jruby.org/) and [TruffleRuby](https://www.graalvm.org/ruby/).
    Rubinius is an alternative implementation of Ruby written in Ruby.
    JRuby is an implementation of Ruby on the JVM, short for Java Virtual Machine.
    TruffleRuby is a Ruby implementation on the GraalVM, a language toolkit built on the JVM.

### ENGINE VERSION

Each application _may_ specify a Ruby engine version. If an engine version is
specified, an engine _must_ also be specified. If the engine is "ruby" the
engine version specified _must_ match the Ruby version.

    ruby "2.6.8", engine: "jruby", engine_version: "9.3.8.0"

### PATCHLEVEL

Each application _may_ specify a Ruby patchlevel. Specifying the patchlevel has
been meaningless since Ruby 2.1.0 was released as the patchlevel is now
uniquely determined by a combination of major, minor, and teeny version numbers.

This option was implemented in Bundler 1.4.0 for Ruby 2.0 or earlier.

    ruby "3.1.2", patchlevel: "20"

## GEMS

Specify gem requirements using the `gem` method, with the following arguments.
All parameters are `OPTIONAL` unless otherwise specified.

### NAME (required)

For each gem requirement, list a single _gem_ line.

    gem "nokogiri"

### VERSION

Each _gem_ `MAY` have one or more version specifiers.

    gem "nokogiri", ">= 1.4.2"
    gem "RedCloth", ">= 4.1.0", "< 4.2.0"

### REQUIRE AS

Each _gem_ `MAY` specify files that should be used when autorequiring via
`Bundler.require`. You may pass an array with multiple files or `true` if the file
you want `required` has the same name as _gem_ or `false` to
prevent any file from being autorequired.

    gem "redis", require: ["redis/connection/hiredis", "redis"]
    gem "webmock", require: false
    gem "byebug", require: true

The argument defaults to the name of the gem. For example, these are identical:

    gem "nokogiri"
    gem "nokogiri", require: "nokogiri"
    gem "nokogiri", require: true

### GROUPS

Each _gem_ `MAY` specify membership in one or more groups. Any _gem_ that does
not specify membership in any group is placed in the `default` group.

    gem "rspec", group: :test
    gem "wirble", groups: [:development, :test]

The Bundler runtime allows its two main methods, `Bundler.setup` and
`Bundler.require`, to limit their impact to particular groups.

    # setup adds gems to Ruby's load path
    Bundler.setup                    # defaults to all groups
    require "bundler/setup"          # same as Bundler.setup
    Bundler.setup(:default)          # only set up the _default_ group
    Bundler.setup(:test)             # only set up the _test_ group (but `not` _default_)
    Bundler.setup(:default, :test)   # set up the _default_ and _test_ groups, but no others

    # require requires all of the gems in the specified groups
    Bundler.require                  # defaults to the _default_ group
    Bundler.require(:default)        # identical
    Bundler.require(:default, :test) # requires the _default_ and _test_ groups
    Bundler.require(:test)           # requires the _test_ group

The Bundler CLI allows you to specify a list of groups whose gems `bundle install` should
not install with the `without` configuration.

To specify multiple groups to ignore, specify a list of groups separated by spaces.

    bundle config set --local without test
    bundle config set --local without development test

Also, calling `Bundler.setup` with no parameters, or calling `require "bundler/setup"`
will setup all groups except for the ones you excluded via `--without` (since they
are not available).

Note that on `bundle install`, bundler downloads and evaluates all gems, in order to
create a single canonical list of all of the required gems and their dependencies.
This means that you cannot list different versions of the same gems in different
groups. For more details, see [Understanding Bundler](https://bundler.io/rationale.html).

### PLATFORMS

If a gem should only be used in a particular platform or set of platforms, you can
specify them. Platforms are essentially identical to groups, except that you do not
need to use the `--without` install-time flag to exclude groups of gems for other
platforms.

There are a number of `Gemfile` platforms:

  * `ruby`:
    C Ruby (MRI), Rubinius, or TruffleRuby, but not Windows
  * `mri`:
    C Ruby (MRI) only, but not Windows
  * `windows`:
    Windows C Ruby (MRI), including RubyInstaller 32-bit and 64-bit versions
  * `mswin`:
    Windows C Ruby (MRI), including RubyInstaller 32-bit versions
  * `mswin64`:
    Windows C Ruby (MRI), including RubyInstaller 64-bit versions
  * `rbx`:
    Rubinius
  * `jruby`:
    JRuby
  * `truffleruby`:
    TruffleRuby

On platforms `ruby`, `mri`, `mswin`, `mswin64`, and `windows`, you may
additionally specify a version by appending the major and minor version numbers
without a delimiter. For example, to specify that a gem should only be used on
platform `ruby` version 3.1, use:

    ruby_31

As with groups (above), you may specify one or more platforms:

    gem "weakling",   platforms: :jruby
    gem "ruby-debug", platforms: :mri_31
    gem "nokogiri",   platforms: [:windows_31, :jruby]

All operations involving groups ([`bundle install`](bundle-install.1.html), `Bundler.setup`,
`Bundler.require`) behave exactly the same as if any groups not
matching the current platform were explicitly excluded.

The following platform values are deprecated and should be replaced with `windows`:

  * `mswin`, `mswin64`, `mingw32`, `x64_mingw`

Note that, while unfortunately using the same terminology, the values of this
option are different from the values that `bundle lock --add-platform` can take.
The values of this option are more closer to "Ruby Implementation" while the
values that `bundle lock --add-platform` understands are more related to OS and
architecture of the different systems where your lockfile will be used.

### FORCE_RUBY_PLATFORM

If you always want the pure ruby variant of a gem to be chosen over platform
specific variants, you can use the `force_ruby_platform` option:

    gem "ffi", force_ruby_platform: true

This can be handy (assuming the pure ruby variant works fine) when:

* You're having issues with the platform specific variant.
* The platform specific variant does not yet support a newer ruby (and thus has
  a `required_ruby_version` upper bound), but you still want your Gemfile{.lock}
  files to resolve under that ruby.

### SOURCE

You can select an alternate RubyGems repository for a gem using the ':source'
option.

    gem "some_internal_gem", source: "https://gems.example.com"

This forces the gem to be loaded from this source and ignores the global source
declared at the top level of the file. If the gem does not exist in this source,
it will not be installed.

Bundler will search for child dependencies of this gem by first looking in the
source selected for the parent, but if they are not found there, it will fall
back on the global source.

**Note about a behavior of the feature deprecated in Bundler 1.13**:
Selecting a specific source repository this way also suppresses the ambiguous
gem warning described above in [GLOBAL SOURCE](#GLOBAL-SOURCE).

Using the `:source` option for an individual gem will also make that source
available as a possible global source for any other gems which do not specify
explicit sources. Thus, when adding gems with explicit sources, it is
recommended that you also ensure all other gems in the Gemfile are using
explicit sources.

### GIT

If necessary, you can specify that a gem is located at a particular
git repository using the `:git` parameter. The repository can be accessed via
several protocols:

  * `HTTP(S)`:
    gem "rails", git: "https://github.com/rails/rails.git"
  * `SSH`:
    gem "rails", git: "git@github.com:rails/rails.git"
  * `git`:
    gem "rails", git: "git://github.com/rails/rails.git"

If using SSH, the user that you use to run `bundle install` `MUST` have the
appropriate keys available in their `$HOME/.ssh`.

`NOTE`: `http://` and `git://` URLs should be avoided if at all possible. These
protocols are unauthenticated, so a man-in-the-middle attacker can deliver
malicious code and compromise your system. HTTPS and SSH are strongly
preferred.

The `group`, `platforms`, and `require` options are available and behave
exactly the same as they would for a normal gem.

A git repository `SHOULD` have at least one file, at the root of the
directory containing the gem, with the extension `.gemspec`. This file
`MUST` contain a valid gem specification, as expected by the `gem build`
command.

If a git repository does not have a `.gemspec`, bundler will attempt to
create one, but it will not contain any dependencies, executables, or
C extension compilation instructions. As a result, it may fail to properly
integrate into your application.

If a git repository does have a `.gemspec` for the gem you attached it
to, a version specifier, if provided, means that the git repository is
only valid if the `.gemspec` specifies a version matching the version
specifier. If not, bundler will print a warning.

    gem "rails", "2.3.8", git: "https://github.com/rails/rails.git"
    # bundle install will fail, because the .gemspec in the rails
    # repository's master branch specifies version 3.0.0

If a git repository does `not` have a `.gemspec` for the gem you attached
it to, a version specifier `MUST` be provided. Bundler will use this
version in the simple `.gemspec` it creates.

Git repositories support a number of additional options.

  * `branch`, `tag`, and `ref`:
    You `MUST` only specify at most one of these options. The default
    is `branch: "master"`.  For example:

      gem "rails", git: "https://github.com/rails/rails.git", branch: "5-0-stable"

      gem "rails", git: "https://github.com/rails/rails.git", tag: "v5.0.0"

      gem "rails", git: "https://github.com/rails/rails.git", ref: "4aded"

  * `submodules`:
    For reference, a [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules)
    lets you have another git repository within a subfolder of your repository.
    Specify `submodules: true` to cause bundler to expand any
    submodules included in the git repository

If a git repository contains multiple `.gemspecs`, each `.gemspec`
represents a gem located at the same place in the file system as
the `.gemspec`.

    |~rails                   [git root]
    | |-rails.gemspec         [rails gem located here]
    |~actionpack
    | |-actionpack.gemspec    [actionpack gem located here]
    |~activesupport
    | |-activesupport.gemspec [activesupport gem located here]
    |...

To install a gem located in a git repository, bundler changes to
the directory containing the gemspec, runs `gem build name.gemspec`
and then installs the resulting gem. The `gem build` command,
which comes standard with Rubygems, evaluates the `.gemspec` in
the context of the directory in which it is located.

### GIT SOURCE

A custom git source can be defined via the `git_source` method. Provide the source's name
as an argument, and a block which receives a single argument and interpolates it into a
string to return the full repo address:

    git_source(:stash){ |repo_name| "https://stash.corp.acme.pl/#{repo_name}.git" }
    gem 'rails', stash: 'forks/rails'

In addition, if you wish to choose a specific branch:

    gem "rails", stash: "forks/rails", branch: "branch_name"

### GITHUB

`NOTE`: This shorthand should be avoided until Bundler 2.0, since it
currently expands to an insecure `git://` URL. This allows a
man-in-the-middle attacker to compromise your system.

If the git repository you want to use is hosted on GitHub and is public, you can use the
:github shorthand to specify the github username and repository name (without the
trailing ".git"), separated by a slash. If both the username and repository name are the
same, you can omit one.

    gem "rails", github: "rails/rails"
    gem "rails", github: "rails"

Are both equivalent to

    gem "rails", git: "https://github.com/rails/rails.git"

Since the `github` method is a specialization of `git_source`, it accepts a `:branch` named argument.

You can also directly pass a pull request URL:

    gem "rails", github: "https://github.com/rails/rails/pull/43753"

Which is equivalent to:

    gem "rails", github: "rails/rails", branch: "refs/pull/43753/head"

### GIST

If the git repository you want to use is hosted as a GitHub Gist and is public, you can use
the :gist shorthand to specify the gist identifier (without the trailing ".git").

    gem "the_hatch", gist: "4815162342"

Is equivalent to:

    gem "the_hatch", git: "https://gist.github.com/4815162342.git"

Since the `gist` method is a specialization of `git_source`, it accepts a `:branch` named argument.

### BITBUCKET

If the git repository you want to use is hosted on Bitbucket and is public, you can use the
:bitbucket shorthand to specify the bitbucket username and repository name (without the
trailing ".git"), separated by a slash. If both the username and repository name are the
same, you can omit one.

    gem "rails", bitbucket: "rails/rails"
    gem "rails", bitbucket: "rails"

Are both equivalent to

    gem "rails", git: "https://rails@bitbucket.org/rails/rails.git"

Since the `bitbucket` method is a specialization of `git_source`, it accepts a `:branch` named argument.

### PATH

You can specify that a gem is located in a particular location
on the file system. Relative paths are resolved relative to the
directory containing the `Gemfile`.

Similar to the semantics of the `:git` option, the `:path`
option requires that the directory in question either contains
a `.gemspec` for the gem, or that you specify an explicit
version that bundler should use.

Unlike `:git`, bundler does not compile C extensions for
gems specified as paths.

    gem "rails", path: "vendor/rails"

If you would like to use multiple local gems directly from the filesystem, you can set a global `path` option to the path containing the gem's files. This will automatically load gemspec files from subdirectories.

    path 'components' do
      gem 'admin_ui'
      gem 'public_ui'
    end

## BLOCK FORM OF SOURCE, GIT, PATH, GROUP and PLATFORMS

The `:source`, `:git`, `:path`, `:group`, and `:platforms` options may be
applied to a group of gems by using block form.

    source "https://gems.example.com" do
      gem "some_internal_gem"
      gem "another_internal_gem"
    end

    git "https://github.com/rails/rails.git" do
      gem "activesupport"
      gem "actionpack"
    end

    platforms :ruby do
      gem "ruby-debug"
      gem "sqlite3"
    end

    group :development, optional: true do
      gem "wirble"
      gem "faker"
    end

In the case of the group block form the :optional option can be given
to prevent a group from being installed unless listed in the `--with`
option given to the `bundle install` command.

In the case of the `git` block form, the `:ref`, `:branch`, `:tag`,
and `:submodules` options may be passed to the `git` method, and
all gems in the block will inherit those options.

The presence of a `source` block in a Gemfile also makes that source
available as a possible global source for any other gems which do not specify
explicit sources. Thus, when defining source blocks, it is
recommended that you also ensure all other gems in the Gemfile are using
explicit sources, either via source blocks or `:source` directives on
individual gems.

## INSTALL_IF

The `install_if` method allows gems to be installed based on a proc or lambda.
This is especially useful for optional gems that can only be used if certain
software is installed or some other conditions are met.

    install_if -> { RUBY_PLATFORM =~ /darwin/ } do
      gem "pasteboard"
    end

## GEMSPEC

The [`.gemspec`](https://guides.rubygems.org/specification-reference/) file is where
 you provide metadata about your gem to Rubygems. Some required Gemspec
 attributes include the name, description, and homepage of your gem. This is
 also where you specify the dependencies your gem needs to run.

If you wish to use Bundler to help install dependencies for a gem while it is
being developed, use the `gemspec` method to pull in the dependencies listed in
the `.gemspec` file.

The `gemspec` method adds any runtime dependencies as gem requirements in the
default group. It also adds development dependencies as gem requirements in the
`development` group. Finally, it adds a gem requirement on your project (`path:
'.'`). In conjunction with `Bundler.setup`, this allows you to require project
files in your test code as you would if the project were installed as a gem; you
need not manipulate the load path manually or require project files via relative
paths.

The `gemspec` method supports optional `:path`, `:glob`, `:name`, and `:development_group`
options, which control where bundler looks for the `.gemspec`, the glob it uses to look
for the gemspec (defaults to: `{,*,*/*}.gemspec`), what named `.gemspec` it uses
(if more than one is present), and which group development dependencies are included in.

When a `gemspec` dependency encounters version conflicts during resolution, the
local version under development will always be selected -- even if there are
remote versions that better match other requirements for the `gemspec` gem.

## SOURCE PRIORITY

When attempting to locate a gem to satisfy a gem requirement,
bundler uses the following priority order:

  1. The source explicitly attached to the gem (using `:source`, `:path`, or
     `:git`)
  2. For implicit gems (dependencies of explicit gems), any source, git, or path
     repository declared on the parent. This results in bundler prioritizing the
     ActiveSupport gem from the Rails git repository over ones from
     `rubygems.org`
  3. If neither of the above conditions are met, the global source will be used.
     If multiple global sources are specified, they will be prioritized from
     last to first, but this is deprecated since Bundler 1.13, so Bundler prints
     a warning and will abort with an error in the future.
PK*J[n�0�yByB>share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-install.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-INSTALL" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
.SH "SYNOPSIS"
\fBbundle install\fR [\-\-binstubs[=DIRECTORY]] [\-\-clean] [\-\-deployment] [\-\-frozen] [\-\-full\-index] [\-\-gemfile=GEMFILE] [\-\-jobs=NUMBER] [\-\-local] [\-\-no\-cache] [\-\-no\-prune] [\-\-path PATH] [\-\-prefer\-local] [\-\-quiet] [\-\-redownload] [\-\-retry=NUMBER] [\-\-shebang=SHEBANG] [\-\-standalone[=GROUP[ GROUP\|\.\|\.\|\.]]] [\-\-system] [\-\-trust\-policy=TRUST\-POLICY] [\-\-target\-rbconfig=TARGET\-RBCONFIG] [\-\-with=GROUP[ GROUP\|\.\|\.\|\.]] [\-\-without=GROUP[ GROUP\|\.\|\.\|\.]]
.SH "DESCRIPTION"
Install the gems specified in your Gemfile(5)\. If this is the first time you run bundle install (and a \fBGemfile\.lock\fR does not exist), Bundler will fetch all remote sources, resolve dependencies and install all needed gems\.
.P
If a \fBGemfile\.lock\fR does exist, and you have not updated your Gemfile(5), Bundler will fetch all remote sources, but use the dependencies specified in the \fBGemfile\.lock\fR instead of resolving dependencies\.
.P
If a \fBGemfile\.lock\fR does exist, and you have updated your Gemfile(5), Bundler will use the dependencies in the \fBGemfile\.lock\fR for all gems that you did not update, but will re\-resolve the dependencies of gems that you did update\. You can find more information about this update process below under \fICONSERVATIVE UPDATING\fR\.
.SH "OPTIONS"
The \fB\-\-clean\fR, \fB\-\-deployment\fR, \fB\-\-frozen\fR, \fB\-\-no\-prune\fR, \fB\-\-path\fR, \fB\-\-shebang\fR, \fB\-\-system\fR, \fB\-\-without\fR and \fB\-\-with\fR options are deprecated because they only make sense if they are applied to every subsequent \fBbundle install\fR run automatically and that requires \fBbundler\fR to silently remember them\. Since \fBbundler\fR will no longer remember CLI flags in future versions, \fBbundle config\fR (see bundle\-config(1)) should be used to apply them permanently\.
.TP
\fB\-\-binstubs[=BINSTUBS]\fR
Binstubs are scripts that wrap around executables\. Bundler creates a small Ruby file (a binstub) that loads Bundler, runs the command, and puts it in \fBbin/\fR\. This lets you link the binstub inside of an application to the exact gem version the application needs\.
.IP
Creates a directory (defaults to \fB~/bin\fR when the option is used without a value, or to the given \fB<BINSTUBS>\fR directory otherwise) and places any executables from the gem there\. These executables run in Bundler's context\. If used, you might add this directory to your environment's \fBPATH\fR variable\. For instance, if the \fBrails\fR gem comes with a \fBrails\fR executable, this flag will create a \fBbin/rails\fR executable that ensures that all referred dependencies will be resolved using the bundled gems\.
.TP
\fB\-\-clean\fR
On finishing the installation Bundler is going to remove any gems not present in the current Gemfile(5)\. Don't worry, gems currently in use will not be removed\.
.IP
This option is deprecated in favor of the \fBclean\fR setting\.
.TP
\fB\-\-deployment\fR
In \fIdeployment mode\fR, Bundler will 'roll\-out' the bundle for production or CI use\. Please check carefully if you want to have this option enabled in your development environment\.
.IP
This option is deprecated in favor of the \fBdeployment\fR setting\.
.TP
\fB\-\-redownload\fR, \fB\-\-force\fR
Force download every gem, even if the required versions are already available locally\.
.TP
\fB\-\-frozen\fR
Do not allow the Gemfile\.lock to be updated after this install\. Exits non\-zero if there are going to be changes to the Gemfile\.lock\.
.IP
This option is deprecated in favor of the \fBfrozen\fR setting\.
.TP
\fB\-\-full\-index\fR
Bundler will not call Rubygems' API endpoint (default) but download and cache a (currently big) index file of all gems\. Performance can be improved for large bundles that seldom change by enabling this option\.
.TP
\fB\-\-gemfile=GEMFILE\fR
The location of the Gemfile(5) which Bundler should use\. This defaults to a Gemfile(5) in the current working directory\. In general, Bundler will assume that the location of the Gemfile(5) is also the project's root and will try to find \fBGemfile\.lock\fR and \fBvendor/cache\fR relative to this location\.
.TP
\fB\-\-jobs=<number>\fR, \fB\-j=<number>\fR
The maximum number of parallel download and install jobs\. The default is the number of available processors\.
.TP
\fB\-\-local\fR
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems' cache or in \fBvendor/cache\fR\. Note that if an appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
.TP
\fB\-\-prefer\-local\fR
Force using locally installed gems, or gems already present in Rubygems' cache or in \fBvendor/cache\fR, when resolving, even if newer versions are available remotely\. Only attempt to connect to \fBrubygems\.org\fR for gems that are not present locally\.
.TP
\fB\-\-no\-cache\fR
Do not update the cache in \fBvendor/cache\fR with the newly bundled gems\. This does not remove any gems in the cache but keeps the newly bundled gems from being cached during the install\.
.TP
\fB\-\-no\-prune\fR
Don't remove stale gems from the cache when the installation finishes\.
.IP
This option is deprecated in favor of the \fBno_prune\fR setting\.
.TP
\fB\-\-path=PATH\fR
The location to install the specified gems to\. This defaults to Rubygems' setting\. Bundler shares this location with Rubygems, \fBgem install \|\.\|\.\|\.\fR will have gem installed there, too\. Therefore, gems installed without a \fB\-\-path \|\.\|\.\|\.\fR setting will show up by calling \fBgem list\fR\. Accordingly, gems installed to other locations will not get listed\.
.IP
This option is deprecated in favor of the \fBpath\fR setting\.
.TP
\fB\-\-quiet\fR
Do not print progress information to the standard output\.
.TP
\fB\-\-retry=[<number>]\fR
Retry failed network or git requests for \fInumber\fR times\.
.TP
\fB\-\-shebang=SHEBANG\fR
Uses the specified ruby executable (usually \fBruby\fR) to execute the scripts created with \fB\-\-binstubs\fR\. In addition, if you use \fB\-\-binstubs\fR together with \fB\-\-shebang jruby\fR these executables will be changed to execute \fBjruby\fR instead\.
.IP
This option is deprecated in favor of the \fBshebang\fR setting\.
.TP
\fB\-\-standalone[=<list>]\fR
Makes a bundle that can work without depending on Rubygems or Bundler at runtime\. A space separated list of groups to install can be specified\. Bundler creates a directory named \fBbundle\fR and installs the bundle there\. It also generates a \fBbundle/bundler/setup\.rb\fR file to replace Bundler's own setup in the manner required\. Using this option implicitly sets \fBpath\fR, which is a [remembered option][REMEMBERED OPTIONS]\.
.TP
\fB\-\-system\fR
Installs the gems specified in the bundle to the system's Rubygems location\. This overrides any previous configuration of \fB\-\-path\fR\.
.IP
This option is deprecated in favor of the \fBsystem\fR setting\.
.TP
\fB\-\-trust\-policy=TRUST\-POLICY\fR
Apply the Rubygems security policy \fIpolicy\fR, where policy is one of \fBHighSecurity\fR, \fBMediumSecurity\fR, \fBLowSecurity\fR, \fBAlmostNoSecurity\fR, or \fBNoSecurity\fR\. For more details, please see the Rubygems signing documentation linked below in \fISEE ALSO\fR\.
.TP
\fB\-\-target\-rbconfig=TARGET\-RBCONFIG\fR
Path to rbconfig\.rb for the deployment target platform\.
.TP
\fB\-\-with=<list>\fR
A space\-separated list of groups referencing gems to install\. If an optional group is given it is installed\. If a group is given that is in the remembered list of groups given to \-\-without, it is removed from that list\.
.IP
This option is deprecated in favor of the \fBwith\fR setting\.
.TP
\fB\-\-without=<list>\fR
A space\-separated list of groups referencing gems to skip during installation\. If a group is given that is in the remembered list of groups given to \-\-with, it is removed from that list\.
.IP
This option is deprecated in favor of the \fBwithout\fR setting\.
.SH "DEPLOYMENT MODE"
Bundler's defaults are optimized for development\. To switch to defaults optimized for deployment and for CI, use the \fB\-\-deployment\fR flag\. Do not activate deployment mode on development machines, as it will cause an error when the Gemfile(5) is modified\.
.IP "1." 4
A \fBGemfile\.lock\fR is required\.
.IP
To ensure that the same versions of the gems you developed with and tested with are also used in deployments, a \fBGemfile\.lock\fR is required\.
.IP
This is mainly to ensure that you remember to check your \fBGemfile\.lock\fR into version control\.
.IP "2." 4
The \fBGemfile\.lock\fR must be up to date
.IP
In development, you can modify your Gemfile(5) and re\-run \fBbundle install\fR to \fIconservatively update\fR your \fBGemfile\.lock\fR snapshot\.
.IP
In deployment, your \fBGemfile\.lock\fR should be up\-to\-date with changes made in your Gemfile(5)\.
.IP "3." 4
Gems are installed to \fBvendor/bundle\fR not your default system location
.IP
In development, it's convenient to share the gems used in your application with other applications and other scripts that run on the system\.
.IP
In deployment, isolation is a more important default\. In addition, the user deploying the application may not have permission to install gems to the system, or the web server may not have permission to read them\.
.IP
As a result, \fBbundle install \-\-deployment\fR installs gems to the \fBvendor/bundle\fR directory in the application\. This may be overridden using the \fB\-\-path\fR option\.
.IP "" 0
.SH "INSTALLING GROUPS"
By default, \fBbundle install\fR will install all gems in all groups in your Gemfile(5), except those declared for a different platform\.
.P
However, you can explicitly tell Bundler to skip installing certain groups with the \fB\-\-without\fR option\. This option takes a space\-separated list of groups\.
.P
While the \fB\-\-without\fR option will skip \fIinstalling\fR the gems in the specified groups, it will still \fIdownload\fR those gems and use them to resolve the dependencies of every gem in your Gemfile(5)\.
.P
This is so that installing a different set of groups on another machine (such as a production server) will not change the gems and versions that you have already developed and tested against\.
.P
\fBBundler offers a rock\-solid guarantee that the third\-party code you are running in development and testing is also the third\-party code you are running in production\. You can choose to exclude some of that code in different environments, but you will never be caught flat\-footed by different versions of third\-party code being used in different environments\.\fR
.P
For a simple illustration, consider the following Gemfile(5):
.IP "" 4
.nf
source 'https://rubygems\.org'

gem 'sinatra'

group :production do
  gem 'rack\-perftools\-profiler'
end
.fi
.IP "" 0
.P
In this case, \fBsinatra\fR depends on any version of Rack (\fB>= 1\.0\fR), while \fBrack\-perftools\-profiler\fR depends on 1\.x (\fB~> 1\.0\fR)\.
.P
When you run \fBbundle install \-\-without production\fR in development, we look at the dependencies of \fBrack\-perftools\-profiler\fR as well\. That way, you do not spend all your time developing against Rack 2\.0, using new APIs unavailable in Rack 1\.x, only to have Bundler switch to Rack 1\.2 when the \fBproduction\fR group \fIis\fR used\.
.P
This should not cause any problems in practice, because we do not attempt to \fBinstall\fR the gems in the excluded groups, and only evaluate as part of the dependency resolution process\.
.P
This also means that you cannot include different versions of the same gem in different groups, because doing so would result in different sets of dependencies used in development and production\. Because of the vagaries of the dependency resolution process, this usually affects more than the gems you list in your Gemfile(5), and can (surprisingly) radically change the gems you are using\.
.SH "THE GEMFILE\.LOCK"
When you run \fBbundle install\fR, Bundler will persist the full names and versions of all gems that you used (including dependencies of the gems specified in the Gemfile(5)) into a file called \fBGemfile\.lock\fR\.
.P
Bundler uses this file in all subsequent calls to \fBbundle install\fR, which guarantees that you always use the same exact code, even as your application moves across machines\.
.P
Because of the way dependency resolution works, even a seemingly small change (for instance, an update to a point\-release of a dependency of a gem in your Gemfile(5)) can result in radically different gems being needed to satisfy all dependencies\.
.P
As a result, you \fBSHOULD\fR check your \fBGemfile\.lock\fR into version control, in both applications and gems\. If you do not, every machine that checks out your repository (including your production server) will resolve all dependencies again, which will result in different versions of third\-party code being used if \fBany\fR of the gems in the Gemfile(5) or any of their dependencies have been updated\.
.P
When Bundler first shipped, the \fBGemfile\.lock\fR was included in the \fB\.gitignore\fR file included with generated gems\. Over time, however, it became clear that this practice forces the pain of broken dependencies onto new contributors, while leaving existing contributors potentially unaware of the problem\. Since \fBbundle install\fR is usually the first step towards a contribution, the pain of broken dependencies would discourage new contributors from contributing\. As a result, we have revised our guidance for gem authors to now recommend checking in the lock for gems\.
.SH "CONSERVATIVE UPDATING"
When you make a change to the Gemfile(5) and then run \fBbundle install\fR, Bundler will update only the gems that you modified\.
.P
In other words, if a gem that you \fBdid not modify\fR worked before you called \fBbundle install\fR, it will continue to use the exact same versions of all dependencies as it used before the update\.
.P
Let's take a look at an example\. Here's your original Gemfile(5):
.IP "" 4
.nf
source 'https://rubygems\.org'

gem 'actionpack', '2\.3\.8'
gem 'activemerchant'
.fi
.IP "" 0
.P
In this case, both \fBactionpack\fR and \fBactivemerchant\fR depend on \fBactivesupport\fR\. The \fBactionpack\fR gem depends on \fBactivesupport 2\.3\.8\fR and \fBrack ~> 1\.1\.0\fR, while the \fBactivemerchant\fR gem depends on \fBactivesupport >= 2\.3\.2\fR, \fBbraintree >= 2\.0\.0\fR, and \fBbuilder >= 2\.0\.0\fR\.
.P
When the dependencies are first resolved, Bundler will select \fBactivesupport 2\.3\.8\fR, which satisfies the requirements of both gems in your Gemfile(5)\.
.P
Next, you modify your Gemfile(5) to:
.IP "" 4
.nf
source 'https://rubygems\.org'

gem 'actionpack', '3\.0\.0\.rc'
gem 'activemerchant'
.fi
.IP "" 0
.P
The \fBactionpack 3\.0\.0\.rc\fR gem has a number of new dependencies, and updates the \fBactivesupport\fR dependency to \fB= 3\.0\.0\.rc\fR and the \fBrack\fR dependency to \fB~> 1\.2\.1\fR\.
.P
When you run \fBbundle install\fR, Bundler notices that you changed the \fBactionpack\fR gem, but not the \fBactivemerchant\fR gem\. It evaluates the gems currently being used to satisfy its requirements:
.TP
\fBactivesupport 2\.3\.8\fR
also used to satisfy a dependency in \fBactivemerchant\fR, which is not being updated
.TP
\fBrack ~> 1\.1\.0\fR
not currently being used to satisfy another dependency
.P
Because you did not explicitly ask to update \fBactivemerchant\fR, you would not expect it to suddenly stop working after updating \fBactionpack\fR\. However, satisfying the new \fBactivesupport 3\.0\.0\.rc\fR dependency of actionpack requires updating one of its dependencies\.
.P
Even though \fBactivemerchant\fR declares a very loose dependency that theoretically matches \fBactivesupport 3\.0\.0\.rc\fR, Bundler treats gems in your Gemfile(5) that have not changed as an atomic unit together with their dependencies\. In this case, the \fBactivemerchant\fR dependency is treated as \fBactivemerchant 1\.7\.1 + activesupport 2\.3\.8\fR, so \fBbundle install\fR will report that it cannot update \fBactionpack\fR\.
.P
To explicitly update \fBactionpack\fR, including its dependencies which other gems in the Gemfile(5) still depend on, run \fBbundle update actionpack\fR (see \fBbundle update(1)\fR)\.
.P
\fBSummary\fR: In general, after making a change to the Gemfile(5) , you should first try to run \fBbundle install\fR, which will guarantee that no other gem in the Gemfile(5) is impacted by the change\. If that does not work, run bundle update(1) \fIbundle\-update\.1\.html\fR\.
.SH "SEE ALSO"
.IP "\(bu" 4
Gem install docs \fIhttps://guides\.rubygems\.org/rubygems\-basics/#installing\-gems\fR
.IP "\(bu" 4
Rubygems signing docs \fIhttps://guides\.rubygems\.org/security/\fR
.IP "" 0

PK*J[z�x
\\7share/gems/gems/bundler-2.6.7/lib/bundler/man/gemfile.5nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "GEMFILE" "5" "March 2025" ""
.SH "NAME"
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
.SH "SYNOPSIS"
A \fBGemfile\fR describes the gem dependencies required to execute associated Ruby code\.
.P
Place the \fBGemfile\fR in the root of the directory containing the associated code\. For instance, in a Rails application, place the \fBGemfile\fR in the same directory as the \fBRakefile\fR\.
.SH "SYNTAX"
A \fBGemfile\fR is evaluated as Ruby code, in a context which makes available a number of methods used to describe the gem requirements\.
.SH "GLOBAL SOURCE"
At the top of the \fBGemfile\fR, add a single line for the \fBRubyGems\fR source that contains the gems listed in the \fBGemfile\fR\.
.IP "" 4
.nf
source "https://rubygems\.org"
.fi
.IP "" 0
.P
You can add only one global source\. In Bundler 1\.13, adding multiple global sources was deprecated\. The \fBsource\fR \fBMUST\fR be a valid RubyGems repository\.
.P
To use more than one source of RubyGems, you should use \fI\fBsource\fR block\fR\.
.P
A source is checked for gems following the heuristics described in \fISOURCE PRIORITY\fR\.
.P
\fBNote about a behavior of the feature deprecated in Bundler 1\.13\fR: If a gem is found in more than one global source, Bundler will print a warning after installing the gem indicating which source was used, and listing the other sources where the gem is available\. A specific source can be selected for gems that need to use a non\-standard repository, suppressing this warning, by using the \fI\fB:source\fR option\fR or \fBsource\fR block\.
.SS "CREDENTIALS"
Some gem sources require a username and password\. Use bundle config(1) \fIbundle\-config\.1\.html\fR to set the username and password for any of the sources that need it\. The command must be run once on each computer that will install the Gemfile, but this keeps the credentials from being stored in plain text in version control\.
.IP "" 4
.nf
bundle config gems\.example\.com user:password
.fi
.IP "" 0
.P
For some sources, like a company Gemfury account, it may be easier to include the credentials in the Gemfile as part of the source URL\.
.IP "" 4
.nf
source "https://user:password@gems\.example\.com"
.fi
.IP "" 0
.P
Credentials in the source URL will take precedence over credentials set using \fBconfig\fR\.
.SH "RUBY"
If your application requires a specific Ruby version or engine, specify your requirements using the \fBruby\fR method, with the following arguments\. All parameters are \fBOPTIONAL\fR unless otherwise specified\.
.SS "VERSION (required)"
The version of Ruby that your application requires\. If your application requires an alternate Ruby engine, such as JRuby, TruffleRuby, etc\., this should be the Ruby version that the engine is compatible with\.
.IP "" 4
.nf
ruby "3\.1\.2"
.fi
.IP "" 0
.P
If you wish to derive your Ruby version from a version file (ie \.ruby\-version), you can use the \fBfile\fR option instead\.
.IP "" 4
.nf
ruby file: "\.ruby\-version"
.fi
.IP "" 0
.P
The version file should conform to any of the following formats:
.IP "\(bu" 4
\fB3\.1\.2\fR (\.ruby\-version)
.IP "\(bu" 4
\fBruby 3\.1\.2\fR (\.tool\-versions, read: https://asdf\-vm\.com/manage/configuration\.html#tool\-versions)
.IP "" 0
.SS "ENGINE"
Each application \fImay\fR specify a Ruby engine\. If an engine is specified, an engine version \fImust\fR also be specified\.
.P
What exactly is an Engine?
.IP "\(bu" 4
A Ruby engine is an implementation of the Ruby language\.
.IP "\(bu" 4
For background: the reference or original implementation of the Ruby programming language is called Matz's Ruby Interpreter \fIhttps://en\.wikipedia\.org/wiki/Ruby_MRI\fR, or MRI for short\. This is named after Ruby creator Yukihiro Matsumoto, also known as Matz\. MRI is also known as CRuby, because it is written in C\. MRI is the most widely used Ruby engine\.
.IP "\(bu" 4
Other implementations \fIhttps://www\.ruby\-lang\.org/en/about/\fR of Ruby exist\. Some of the more well\-known implementations include JRuby \fIhttps://www\.jruby\.org/\fR and TruffleRuby \fIhttps://www\.graalvm\.org/ruby/\fR\. Rubinius is an alternative implementation of Ruby written in Ruby\. JRuby is an implementation of Ruby on the JVM, short for Java Virtual Machine\. TruffleRuby is a Ruby implementation on the GraalVM, a language toolkit built on the JVM\.
.IP "" 0
.SS "ENGINE VERSION"
Each application \fImay\fR specify a Ruby engine version\. If an engine version is specified, an engine \fImust\fR also be specified\. If the engine is "ruby" the engine version specified \fImust\fR match the Ruby version\.
.IP "" 4
.nf
ruby "2\.6\.8", engine: "jruby", engine_version: "9\.3\.8\.0"
.fi
.IP "" 0
.SS "PATCHLEVEL"
Each application \fImay\fR specify a Ruby patchlevel\. Specifying the patchlevel has been meaningless since Ruby 2\.1\.0 was released as the patchlevel is now uniquely determined by a combination of major, minor, and teeny version numbers\.
.P
This option was implemented in Bundler 1\.4\.0 for Ruby 2\.0 or earlier\.
.IP "" 4
.nf
ruby "3\.1\.2", patchlevel: "20"
.fi
.IP "" 0
.SH "GEMS"
Specify gem requirements using the \fBgem\fR method, with the following arguments\. All parameters are \fBOPTIONAL\fR unless otherwise specified\.
.SS "NAME (required)"
For each gem requirement, list a single \fIgem\fR line\.
.IP "" 4
.nf
gem "nokogiri"
.fi
.IP "" 0
.SS "VERSION"
Each \fIgem\fR \fBMAY\fR have one or more version specifiers\.
.IP "" 4
.nf
gem "nokogiri", ">= 1\.4\.2"
gem "RedCloth", ">= 4\.1\.0", "< 4\.2\.0"
.fi
.IP "" 0
.SS "REQUIRE AS"
Each \fIgem\fR \fBMAY\fR specify files that should be used when autorequiring via \fBBundler\.require\fR\. You may pass an array with multiple files or \fBtrue\fR if the file you want \fBrequired\fR has the same name as \fIgem\fR or \fBfalse\fR to prevent any file from being autorequired\.
.IP "" 4
.nf
gem "redis", require: ["redis/connection/hiredis", "redis"]
gem "webmock", require: false
gem "byebug", require: true
.fi
.IP "" 0
.P
The argument defaults to the name of the gem\. For example, these are identical:
.IP "" 4
.nf
gem "nokogiri"
gem "nokogiri", require: "nokogiri"
gem "nokogiri", require: true
.fi
.IP "" 0
.SS "GROUPS"
Each \fIgem\fR \fBMAY\fR specify membership in one or more groups\. Any \fIgem\fR that does not specify membership in any group is placed in the \fBdefault\fR group\.
.IP "" 4
.nf
gem "rspec", group: :test
gem "wirble", groups: [:development, :test]
.fi
.IP "" 0
.P
The Bundler runtime allows its two main methods, \fBBundler\.setup\fR and \fBBundler\.require\fR, to limit their impact to particular groups\.
.IP "" 4
.nf
# setup adds gems to Ruby's load path
Bundler\.setup                    # defaults to all groups
require "bundler/setup"          # same as Bundler\.setup
Bundler\.setup(:default)          # only set up the _default_ group
Bundler\.setup(:test)             # only set up the _test_ group (but `not` _default_)
Bundler\.setup(:default, :test)   # set up the _default_ and _test_ groups, but no others

# require requires all of the gems in the specified groups
Bundler\.require                  # defaults to the _default_ group
Bundler\.require(:default)        # identical
Bundler\.require(:default, :test) # requires the _default_ and _test_ groups
Bundler\.require(:test)           # requires the _test_ group
.fi
.IP "" 0
.P
The Bundler CLI allows you to specify a list of groups whose gems \fBbundle install\fR should not install with the \fBwithout\fR configuration\.
.P
To specify multiple groups to ignore, specify a list of groups separated by spaces\.
.IP "" 4
.nf
bundle config set \-\-local without test
bundle config set \-\-local without development test
.fi
.IP "" 0
.P
Also, calling \fBBundler\.setup\fR with no parameters, or calling \fBrequire "bundler/setup"\fR will setup all groups except for the ones you excluded via \fB\-\-without\fR (since they are not available)\.
.P
Note that on \fBbundle install\fR, bundler downloads and evaluates all gems, in order to create a single canonical list of all of the required gems and their dependencies\. This means that you cannot list different versions of the same gems in different groups\. For more details, see Understanding Bundler \fIhttps://bundler\.io/rationale\.html\fR\.
.SS "PLATFORMS"
If a gem should only be used in a particular platform or set of platforms, you can specify them\. Platforms are essentially identical to groups, except that you do not need to use the \fB\-\-without\fR install\-time flag to exclude groups of gems for other platforms\.
.P
There are a number of \fBGemfile\fR platforms:
.TP
\fBruby\fR
C Ruby (MRI), Rubinius, or TruffleRuby, but not Windows
.TP
\fBmri\fR
C Ruby (MRI) only, but not Windows
.TP
\fBwindows\fR
Windows C Ruby (MRI), including RubyInstaller 32\-bit and 64\-bit versions
.TP
\fBmswin\fR
Windows C Ruby (MRI), including RubyInstaller 32\-bit versions
.TP
\fBmswin64\fR
Windows C Ruby (MRI), including RubyInstaller 64\-bit versions
.TP
\fBrbx\fR
Rubinius
.TP
\fBjruby\fR
JRuby
.TP
\fBtruffleruby\fR
TruffleRuby
.P
On platforms \fBruby\fR, \fBmri\fR, \fBmswin\fR, \fBmswin64\fR, and \fBwindows\fR, you may additionally specify a version by appending the major and minor version numbers without a delimiter\. For example, to specify that a gem should only be used on platform \fBruby\fR version 3\.1, use:
.IP "" 4
.nf
ruby_31
.fi
.IP "" 0
.P
As with groups (above), you may specify one or more platforms:
.IP "" 4
.nf
gem "weakling",   platforms: :jruby
gem "ruby\-debug", platforms: :mri_31
gem "nokogiri",   platforms: [:windows_31, :jruby]
.fi
.IP "" 0
.P
All operations involving groups (\fBbundle install\fR \fIbundle\-install\.1\.html\fR, \fBBundler\.setup\fR, \fBBundler\.require\fR) behave exactly the same as if any groups not matching the current platform were explicitly excluded\.
.P
The following platform values are deprecated and should be replaced with \fBwindows\fR:
.IP "\(bu" 4
\fBmswin\fR, \fBmswin64\fR, \fBmingw32\fR, \fBx64_mingw\fR
.IP "" 0
.P
Note that, while unfortunately using the same terminology, the values of this option are different from the values that \fBbundle lock \-\-add\-platform\fR can take\. The values of this option are more closer to "Ruby Implementation" while the values that \fBbundle lock \-\-add\-platform\fR understands are more related to OS and architecture of the different systems where your lockfile will be used\.
.SS "FORCE_RUBY_PLATFORM"
If you always want the pure ruby variant of a gem to be chosen over platform specific variants, you can use the \fBforce_ruby_platform\fR option:
.IP "" 4
.nf
gem "ffi", force_ruby_platform: true
.fi
.IP "" 0
.P
This can be handy (assuming the pure ruby variant works fine) when:
.IP "\(bu" 4
You're having issues with the platform specific variant\.
.IP "\(bu" 4
The platform specific variant does not yet support a newer ruby (and thus has a \fBrequired_ruby_version\fR upper bound), but you still want your Gemfile{\.lock} files to resolve under that ruby\.
.IP "" 0
.SS "SOURCE"
You can select an alternate RubyGems repository for a gem using the ':source' option\.
.IP "" 4
.nf
gem "some_internal_gem", source: "https://gems\.example\.com"
.fi
.IP "" 0
.P
This forces the gem to be loaded from this source and ignores the global source declared at the top level of the file\. If the gem does not exist in this source, it will not be installed\.
.P
Bundler will search for child dependencies of this gem by first looking in the source selected for the parent, but if they are not found there, it will fall back on the global source\.
.P
\fBNote about a behavior of the feature deprecated in Bundler 1\.13\fR: Selecting a specific source repository this way also suppresses the ambiguous gem warning described above in \fIGLOBAL SOURCE\fR\.
.P
Using the \fB:source\fR option for an individual gem will also make that source available as a possible global source for any other gems which do not specify explicit sources\. Thus, when adding gems with explicit sources, it is recommended that you also ensure all other gems in the Gemfile are using explicit sources\.
.SS "GIT"
If necessary, you can specify that a gem is located at a particular git repository using the \fB:git\fR parameter\. The repository can be accessed via several protocols:
.TP
\fBHTTP(S)\fR
gem "rails", git: "https://github\.com/rails/rails\.git"
.TP
\fBSSH\fR
gem "rails", git: "git@github\.com:rails/rails\.git"
.TP
\fBgit\fR
gem "rails", git: "git://github\.com/rails/rails\.git"
.P
If using SSH, the user that you use to run \fBbundle install\fR \fBMUST\fR have the appropriate keys available in their \fB$HOME/\.ssh\fR\.
.P
\fBNOTE\fR: \fBhttp://\fR and \fBgit://\fR URLs should be avoided if at all possible\. These protocols are unauthenticated, so a man\-in\-the\-middle attacker can deliver malicious code and compromise your system\. HTTPS and SSH are strongly preferred\.
.P
The \fBgroup\fR, \fBplatforms\fR, and \fBrequire\fR options are available and behave exactly the same as they would for a normal gem\.
.P
A git repository \fBSHOULD\fR have at least one file, at the root of the directory containing the gem, with the extension \fB\.gemspec\fR\. This file \fBMUST\fR contain a valid gem specification, as expected by the \fBgem build\fR command\.
.P
If a git repository does not have a \fB\.gemspec\fR, bundler will attempt to create one, but it will not contain any dependencies, executables, or C extension compilation instructions\. As a result, it may fail to properly integrate into your application\.
.P
If a git repository does have a \fB\.gemspec\fR for the gem you attached it to, a version specifier, if provided, means that the git repository is only valid if the \fB\.gemspec\fR specifies a version matching the version specifier\. If not, bundler will print a warning\.
.IP "" 4
.nf
gem "rails", "2\.3\.8", git: "https://github\.com/rails/rails\.git"
# bundle install will fail, because the \.gemspec in the rails
# repository's master branch specifies version 3\.0\.0
.fi
.IP "" 0
.P
If a git repository does \fBnot\fR have a \fB\.gemspec\fR for the gem you attached it to, a version specifier \fBMUST\fR be provided\. Bundler will use this version in the simple \fB\.gemspec\fR it creates\.
.P
Git repositories support a number of additional options\.
.TP
\fBbranch\fR, \fBtag\fR, and \fBref\fR
You \fBMUST\fR only specify at most one of these options\. The default is \fBbranch: "master"\fR\. For example:
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", branch: "5\-0\-stable"
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", tag: "v5\.0\.0"
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", ref: "4aded"
.TP
\fBsubmodules\fR
For reference, a git submodule \fIhttps://git\-scm\.com/book/en/v2/Git\-Tools\-Submodules\fR lets you have another git repository within a subfolder of your repository\. Specify \fBsubmodules: true\fR to cause bundler to expand any submodules included in the git repository
.P
If a git repository contains multiple \fB\.gemspecs\fR, each \fB\.gemspec\fR represents a gem located at the same place in the file system as the \fB\.gemspec\fR\.
.IP "" 4
.nf
|~rails                   [git root]
| |\-rails\.gemspec         [rails gem located here]
|~actionpack
| |\-actionpack\.gemspec    [actionpack gem located here]
|~activesupport
| |\-activesupport\.gemspec [activesupport gem located here]
|\|\.\|\.\|\.
.fi
.IP "" 0
.P
To install a gem located in a git repository, bundler changes to the directory containing the gemspec, runs \fBgem build name\.gemspec\fR and then installs the resulting gem\. The \fBgem build\fR command, which comes standard with Rubygems, evaluates the \fB\.gemspec\fR in the context of the directory in which it is located\.
.SS "GIT SOURCE"
A custom git source can be defined via the \fBgit_source\fR method\. Provide the source's name as an argument, and a block which receives a single argument and interpolates it into a string to return the full repo address:
.IP "" 4
.nf
git_source(:stash){ |repo_name| "https://stash\.corp\.acme\.pl/#{repo_name}\.git" }
gem 'rails', stash: 'forks/rails'
.fi
.IP "" 0
.P
In addition, if you wish to choose a specific branch:
.IP "" 4
.nf
gem "rails", stash: "forks/rails", branch: "branch_name"
.fi
.IP "" 0
.SS "GITHUB"
\fBNOTE\fR: This shorthand should be avoided until Bundler 2\.0, since it currently expands to an insecure \fBgit://\fR URL\. This allows a man\-in\-the\-middle attacker to compromise your system\.
.P
If the git repository you want to use is hosted on GitHub and is public, you can use the :github shorthand to specify the github username and repository name (without the trailing "\.git"), separated by a slash\. If both the username and repository name are the same, you can omit one\.
.IP "" 4
.nf
gem "rails", github: "rails/rails"
gem "rails", github: "rails"
.fi
.IP "" 0
.P
Are both equivalent to
.IP "" 4
.nf
gem "rails", git: "https://github\.com/rails/rails\.git"
.fi
.IP "" 0
.P
Since the \fBgithub\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.P
You can also directly pass a pull request URL:
.IP "" 4
.nf
gem "rails", github: "https://github\.com/rails/rails/pull/43753"
.fi
.IP "" 0
.P
Which is equivalent to:
.IP "" 4
.nf
gem "rails", github: "rails/rails", branch: "refs/pull/43753/head"
.fi
.IP "" 0
.SS "GIST"
If the git repository you want to use is hosted as a GitHub Gist and is public, you can use the :gist shorthand to specify the gist identifier (without the trailing "\.git")\.
.IP "" 4
.nf
gem "the_hatch", gist: "4815162342"
.fi
.IP "" 0
.P
Is equivalent to:
.IP "" 4
.nf
gem "the_hatch", git: "https://gist\.github\.com/4815162342\.git"
.fi
.IP "" 0
.P
Since the \fBgist\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.SS "BITBUCKET"
If the git repository you want to use is hosted on Bitbucket and is public, you can use the :bitbucket shorthand to specify the bitbucket username and repository name (without the trailing "\.git"), separated by a slash\. If both the username and repository name are the same, you can omit one\.
.IP "" 4
.nf
gem "rails", bitbucket: "rails/rails"
gem "rails", bitbucket: "rails"
.fi
.IP "" 0
.P
Are both equivalent to
.IP "" 4
.nf
gem "rails", git: "https://rails@bitbucket\.org/rails/rails\.git"
.fi
.IP "" 0
.P
Since the \fBbitbucket\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.SS "PATH"
You can specify that a gem is located in a particular location on the file system\. Relative paths are resolved relative to the directory containing the \fBGemfile\fR\.
.P
Similar to the semantics of the \fB:git\fR option, the \fB:path\fR option requires that the directory in question either contains a \fB\.gemspec\fR for the gem, or that you specify an explicit version that bundler should use\.
.P
Unlike \fB:git\fR, bundler does not compile C extensions for gems specified as paths\.
.IP "" 4
.nf
gem "rails", path: "vendor/rails"
.fi
.IP "" 0
.P
If you would like to use multiple local gems directly from the filesystem, you can set a global \fBpath\fR option to the path containing the gem's files\. This will automatically load gemspec files from subdirectories\.
.IP "" 4
.nf
path 'components' do
  gem 'admin_ui'
  gem 'public_ui'
end
.fi
.IP "" 0
.SH "BLOCK FORM OF SOURCE, GIT, PATH, GROUP and PLATFORMS"
The \fB:source\fR, \fB:git\fR, \fB:path\fR, \fB:group\fR, and \fB:platforms\fR options may be applied to a group of gems by using block form\.
.IP "" 4
.nf
source "https://gems\.example\.com" do
  gem "some_internal_gem"
  gem "another_internal_gem"
end

git "https://github\.com/rails/rails\.git" do
  gem "activesupport"
  gem "actionpack"
end

platforms :ruby do
  gem "ruby\-debug"
  gem "sqlite3"
end

group :development, optional: true do
  gem "wirble"
  gem "faker"
end
.fi
.IP "" 0
.P
In the case of the group block form the :optional option can be given to prevent a group from being installed unless listed in the \fB\-\-with\fR option given to the \fBbundle install\fR command\.
.P
In the case of the \fBgit\fR block form, the \fB:ref\fR, \fB:branch\fR, \fB:tag\fR, and \fB:submodules\fR options may be passed to the \fBgit\fR method, and all gems in the block will inherit those options\.
.P
The presence of a \fBsource\fR block in a Gemfile also makes that source available as a possible global source for any other gems which do not specify explicit sources\. Thus, when defining source blocks, it is recommended that you also ensure all other gems in the Gemfile are using explicit sources, either via source blocks or \fB:source\fR directives on individual gems\.
.SH "INSTALL_IF"
The \fBinstall_if\fR method allows gems to be installed based on a proc or lambda\. This is especially useful for optional gems that can only be used if certain software is installed or some other conditions are met\.
.IP "" 4
.nf
install_if \-> { RUBY_PLATFORM =~ /darwin/ } do
  gem "pasteboard"
end
.fi
.IP "" 0
.SH "GEMSPEC"
The \fB\.gemspec\fR \fIhttps://guides\.rubygems\.org/specification\-reference/\fR file is where you provide metadata about your gem to Rubygems\. Some required Gemspec attributes include the name, description, and homepage of your gem\. This is also where you specify the dependencies your gem needs to run\.
.P
If you wish to use Bundler to help install dependencies for a gem while it is being developed, use the \fBgemspec\fR method to pull in the dependencies listed in the \fB\.gemspec\fR file\.
.P
The \fBgemspec\fR method adds any runtime dependencies as gem requirements in the default group\. It also adds development dependencies as gem requirements in the \fBdevelopment\fR group\. Finally, it adds a gem requirement on your project (\fBpath: '\.'\fR)\. In conjunction with \fBBundler\.setup\fR, this allows you to require project files in your test code as you would if the project were installed as a gem; you need not manipulate the load path manually or require project files via relative paths\.
.P
The \fBgemspec\fR method supports optional \fB:path\fR, \fB:glob\fR, \fB:name\fR, and \fB:development_group\fR options, which control where bundler looks for the \fB\.gemspec\fR, the glob it uses to look for the gemspec (defaults to: \fB{,*,*/*}\.gemspec\fR), what named \fB\.gemspec\fR it uses (if more than one is present), and which group development dependencies are included in\.
.P
When a \fBgemspec\fR dependency encounters version conflicts during resolution, the local version under development will always be selected \-\- even if there are remote versions that better match other requirements for the \fBgemspec\fR gem\.
.SH "SOURCE PRIORITY"
When attempting to locate a gem to satisfy a gem requirement, bundler uses the following priority order:
.IP "1." 4
The source explicitly attached to the gem (using \fB:source\fR, \fB:path\fR, or \fB:git\fR)
.IP "2." 4
For implicit gems (dependencies of explicit gems), any source, git, or path repository declared on the parent\. This results in bundler prioritizing the ActiveSupport gem from the Rails git repository over ones from \fBrubygems\.org\fR
.IP "3." 4
If neither of the above conditions are met, the global source will be used\. If multiple global sources are specified, they will be prioritized from last to first, but this is deprecated since Bundler 1\.13, so Bundler prints a warning and will abort with an error in the future\.
.IP "" 0

PK*J[['VLLBshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-config.1.ronnnu�[���bundle-config(1) -- Set bundler configuration options
=====================================================

## SYNOPSIS

`bundle config` list<br>
`bundle config` [get] NAME<br>
`bundle config` [set] NAME VALUE<br>
`bundle config` unset NAME

## DESCRIPTION

This command allows you to interact with Bundler's configuration system.

Bundler loads configuration settings in this order:

1. Local config (`<project_root>/.bundle/config` or `$BUNDLE_APP_CONFIG/config`)
2. Environmental variables (`ENV`)
3. Global config (`~/.bundle/config`)
4. Bundler default config

Executing `bundle config list` will print a list of all bundler
configuration for the current bundle, and where that configuration
was set.

Executing `bundle config get <name>` will print the value of that configuration
setting, and where it was set.

Executing `bundle config set <name> <value>` defaults to setting `local`
configuration if executing from within a local application, otherwise it will
set `global` configuration. See `--local` and `--global` options below.

Executing `bundle config set --local <name> <value>` will set that configuration
in the directory for the local application. The configuration will be stored in
`<project_root>/.bundle/config`. If `BUNDLE_APP_CONFIG` is set, the configuration
will be stored in `$BUNDLE_APP_CONFIG/config`.

Executing `bundle config set --global <name> <value>` will set that
configuration to the value specified for all bundles executed as the current
user. The configuration will be stored in `~/.bundle/config`. If <name> already
is set, <name> will be overridden and user will be warned.

Executing `bundle config unset <name>` will delete the configuration in both
local and global sources.

Executing `bundle config unset --global <name>` will delete the configuration
only from the user configuration.

Executing `bundle config unset --local <name>` will delete the configuration
only from the local application.

Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will
cause it to ignore all configuration.

## REMEMBERING OPTIONS

Flags passed to `bundle install` or the Bundler runtime, such as `--path foo` or
`--without production`, are remembered between commands and saved to your local
application's configuration (normally, `./.bundle/config`).

However, this will be changed in bundler 3, so it's better not to rely on this
behavior. If these options must be remembered, it's better to set them using
`bundle config` (e.g., `bundle config set --local path foo`).

The options that can be configured are:

* `bin`:
   Creates a directory (defaults to `~/bin`) and place any executables from the
   gem there. These executables run in Bundler's context. If used, you might add
   this directory to your environment's `PATH` variable. For instance, if the
   `rails` gem comes with a `rails` executable, this flag will create a
   `bin/rails` executable that ensures that all referred dependencies will be
   resolved using the bundled gems.

* `deployment`:
   In deployment mode, Bundler will 'roll-out' the bundle for
   `production` use. Please check carefully if you want to have this option
   enabled in `development` or `test` environments.

* `only`:
   A space-separated list of groups to install only gems of the specified groups.
   Please check carefully if you want to install also gems without a group, cause
   they get put inside `default` group. For example `only test:default` will install
   all gems specified in test group and without one.

* `path`:
   The location to install the specified gems to. This defaults to Rubygems'
   setting. Bundler shares this location with Rubygems, `gem install ...` will
   have gem installed there, too. Therefore, gems installed without a
   `--path ...` setting will show up by calling `gem list`. Accordingly, gems
   installed to other locations will not get listed.

* `without`:
   A space-separated or `:`-separated list of groups referencing gems to skip during
   installation.

* `with`:
   A space-separated or `:`-separated list of **optional** groups referencing gems to
   include during installation.

## BUILD OPTIONS

You can use `bundle config` to give Bundler the flags to pass to the gem
installer every time bundler tries to install a particular gem.

A very common example, the `mysql` gem, requires Snow Leopard users to
pass configuration flags to `gem install` to specify where to find the
`mysql_config` executable.

    gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Since the specific location of that executable can change from machine
to machine, you can specify these flags on a per-machine basis.

    bundle config set --global build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config

After running this command, every time bundler needs to install the
`mysql` gem, it will pass along the flags you specified.

## CONFIGURATION KEYS

Configuration keys in bundler have two forms: the canonical form and the
environment variable form.

For instance, passing the `--without` flag to [bundle install(1)](bundle-install.1.html)
prevents Bundler from installing certain groups specified in the Gemfile(5). Bundler
persists this value in `app/.bundle/config` so that calls to `Bundler.setup`
do not try to find gems from the `Gemfile` that you didn't install. Additionally,
subsequent calls to [bundle install(1)](bundle-install.1.html) remember this setting
and skip those groups.

The canonical form of this configuration is `"without"`. To convert the canonical
form to the environment variable form, capitalize it, and prepend `BUNDLE_`. The
environment variable form of `"without"` is `BUNDLE_WITHOUT`.

Any periods in the configuration keys must be replaced with two underscores when
setting it via environment variables. The configuration key `local.rack` becomes
the environment variable `BUNDLE_LOCAL__RACK`.

## LIST OF AVAILABLE KEYS

The following is a list of all configuration keys and their purpose. You can
learn more about their operation in [bundle install(1)](bundle-install.1.html).

* `allow_offline_install` (`BUNDLE_ALLOW_OFFLINE_INSTALL`):
   Allow Bundler to use cached data when installing without network access.
* `auto_clean_without_path` (`BUNDLE_AUTO_CLEAN_WITHOUT_PATH`):
   Automatically run `bundle clean` after installing when an explicit `path`
   has not been set and Bundler is not installing into the system gems.
* `auto_install` (`BUNDLE_AUTO_INSTALL`):
   Automatically run `bundle install` when gems are missing.
* `bin` (`BUNDLE_BIN`):
   Install executables from gems in the bundle to the specified directory.
   Defaults to `false`.
* `cache_all` (`BUNDLE_CACHE_ALL`):
   Cache all gems, including path and git gems. This needs to be explicitly
   configured on bundler 1 and bundler 2, but will be the default on bundler 3.
* `cache_all_platforms` (`BUNDLE_CACHE_ALL_PLATFORMS`):
   Cache gems for all platforms.
* `cache_path` (`BUNDLE_CACHE_PATH`):
   The directory that bundler will place cached gems in when running
   <code>bundle package</code>, and that bundler will look in when installing gems.
   Defaults to `vendor/cache`.
* `clean` (`BUNDLE_CLEAN`):
   Whether Bundler should run `bundle clean` automatically after
   `bundle install`.
* `console` (`BUNDLE_CONSOLE`):
   The console that `bundle console` starts. Defaults to `irb`.
* `default_install_uses_path` (`BUNDLE_DEFAULT_INSTALL_USES_PATH`):
   Whether a `bundle install` without an explicit `--path` argument defaults
   to installing gems in `.bundle`.
* `deployment` (`BUNDLE_DEPLOYMENT`):
   Disallow changes to the `Gemfile`. When the `Gemfile` is changed and the
   lockfile has not been updated, running Bundler commands will be blocked.
* `disable_checksum_validation` (`BUNDLE_DISABLE_CHECKSUM_VALIDATION`):
   Allow installing gems even if they do not match the checksum provided by
   RubyGems.
* `disable_exec_load` (`BUNDLE_DISABLE_EXEC_LOAD`):
   Stop Bundler from using `load` to launch an executable in-process in
   `bundle exec`.
* `disable_local_branch_check` (`BUNDLE_DISABLE_LOCAL_BRANCH_CHECK`):
   Allow Bundler to use a local git override without a branch specified in the
   Gemfile.
* `disable_local_revision_check` (`BUNDLE_DISABLE_LOCAL_REVISION_CHECK`):
   Allow Bundler to use a local git override without checking if the revision
   present in the lockfile is present in the repository.
* `disable_shared_gems` (`BUNDLE_DISABLE_SHARED_GEMS`):
   Stop Bundler from accessing gems installed to RubyGems' normal location.
* `disable_version_check` (`BUNDLE_DISABLE_VERSION_CHECK`):
   Stop Bundler from checking if a newer Bundler version is available on
   rubygems.org.
* `force_ruby_platform` (`BUNDLE_FORCE_RUBY_PLATFORM`):
   Ignore the current machine's platform and install only `ruby` platform gems.
   As a result, gems with native extensions will be compiled from source.
* `frozen` (`BUNDLE_FROZEN`):
   Disallow changes to the `Gemfile`. When the `Gemfile` is changed and the
   lockfile has not been updated, running Bundler commands will be blocked.
   Defaults to `true` when `--deployment` is used.
* `gem.github_username` (`BUNDLE_GEM__GITHUB_USERNAME`):
   Sets a GitHub username or organization to be used in `README` file when you
   create a new gem via `bundle gem` command. It can be overridden by passing an
   explicit `--github-username` flag to `bundle gem`.
* `gem.push_key` (`BUNDLE_GEM__PUSH_KEY`):
   Sets the `--key` parameter for `gem push` when using the `rake release`
   command with a private gemstash server.
* `gemfile` (`BUNDLE_GEMFILE`):
   The name of the file that bundler should use as the `Gemfile`. This location
   of this file also sets the root of the project, which is used to resolve
   relative paths in the `Gemfile`, among other things. By default, bundler
   will search up from the current working directory until it finds a
   `Gemfile`.
* `global_gem_cache` (`BUNDLE_GLOBAL_GEM_CACHE`):
   Whether Bundler should cache all gems globally, rather than locally to the
   installing Ruby installation.
* `ignore_funding_requests` (`BUNDLE_IGNORE_FUNDING_REQUESTS`):
   When set, no funding requests will be printed.
* `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`):
   When set, no post install messages will be printed. To silence a single gem,
   use dot notation like `ignore_messages.httparty true`.
* `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`):
   Generate a `gems.rb` instead of a `Gemfile` when running `bundle init`.
* `jobs` (`BUNDLE_JOBS`):
   The number of gems Bundler can install in parallel. Defaults to the number of
   available processors.
* `lockfile_checksums` (`BUNDLE_LOCKFILE_CHECKSUMS`):
   Whether Bundler should include a checksums section in new lockfiles, to protect from compromised gem sources.
* `no_install` (`BUNDLE_NO_INSTALL`):
   Whether `bundle package` should skip installing gems.
* `no_prune` (`BUNDLE_NO_PRUNE`):
   Whether Bundler should leave outdated gems unpruned when caching.
* `only` (`BUNDLE_ONLY`):
   A space-separated list of groups to install only gems of the specified groups.
* `path` (`BUNDLE_PATH`):
   The location on disk where all gems in your bundle will be located regardless
   of `$GEM_HOME` or `$GEM_PATH` values. Bundle gems not found in this location
   will be installed by `bundle install`. Defaults to `Gem.dir`. When --deployment
   is used, defaults to vendor/bundle.
* `path.system` (`BUNDLE_PATH__SYSTEM`):
   Whether Bundler will install gems into the default system path (`Gem.dir`).
* `path_relative_to_cwd` (`BUNDLE_PATH_RELATIVE_TO_CWD`)
   Makes `--path` relative to the CWD instead of the `Gemfile`.
* `plugins` (`BUNDLE_PLUGINS`):
   Enable Bundler's experimental plugin system.
* `prefer_patch` (BUNDLE_PREFER_PATCH):
   Prefer updating only to next patch version during updates. Makes `bundle update` calls equivalent to `bundler update --patch`.
* `print_only_version_number` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`):
   Print only version number from `bundler --version`.
* `redirect` (`BUNDLE_REDIRECT`):
   The number of redirects allowed for network requests. Defaults to `5`.
* `retry` (`BUNDLE_RETRY`):
   The number of times to retry failed network requests. Defaults to `3`.
* `setup_makes_kernel_gem_public` (`BUNDLE_SETUP_MAKES_KERNEL_GEM_PUBLIC`):
   Have `Bundler.setup` make the `Kernel#gem` method public, even though
   RubyGems declares it as private.
* `shebang` (`BUNDLE_SHEBANG`):
   The program name that should be invoked for generated binstubs. Defaults to
   the ruby install name used to generate the binstub.
* `silence_deprecations` (`BUNDLE_SILENCE_DEPRECATIONS`):
   Whether Bundler should silence deprecation warnings for behavior that will
   be changed in the next major version.
* `silence_root_warning` (`BUNDLE_SILENCE_ROOT_WARNING`):
   Silence the warning Bundler prints when installing gems as root.
* `ssl_ca_cert` (`BUNDLE_SSL_CA_CERT`):
   Path to a designated CA certificate file or folder containing multiple
   certificates for trusted CAs in PEM format.
* `ssl_client_cert` (`BUNDLE_SSL_CLIENT_CERT`):
   Path to a designated file containing a X.509 client certificate
   and key in PEM format.
* `ssl_verify_mode` (`BUNDLE_SSL_VERIFY_MODE`):
   The SSL verification mode Bundler uses when making HTTPS requests.
   Defaults to verify peer.
* `system_bindir` (`BUNDLE_SYSTEM_BINDIR`):
   The location where RubyGems installs binstubs. Defaults to `Gem.bindir`.
* `timeout` (`BUNDLE_TIMEOUT`):
   The seconds allowed before timing out for network requests. Defaults to `10`.
* `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`):
   Require passing `--all` to `bundle update` when everything should be updated,
   and disallow passing no options to `bundle update`.
* `user_agent` (`BUNDLE_USER_AGENT`):
   The custom user agent fragment Bundler includes in API requests.
* `version` (`BUNDLE_VERSION`):
   The version of Bundler to use when running under Bundler environment.
   Defaults to `lockfile`. You can also specify `system` or `x.y.z`.
   `lockfile` will use the Bundler version specified in the `Gemfile.lock`,
   `system` will use the system version of Bundler, and `x.y.z` will use
   the specified version of Bundler.
* `with` (`BUNDLE_WITH`):
   A space-separated or `:`-separated list of groups whose gems bundler should install.
* `without` (`BUNDLE_WITHOUT`):
   A space-separated or `:`-separated list of groups whose gems bundler should not install.

## LOCAL GIT REPOS

Bundler also allows you to work against a git repository locally
instead of using the remote version. This can be achieved by setting
up a local override:

    bundle config set --local local.GEM_NAME /path/to/local/git/repository

For example, in order to use a local Rack repository, a developer could call:

    bundle config set --local local.rack ~/Work/git/rack

Now instead of checking out the remote git repository, the local
override will be used. Similar to a path source, every time the local
git repository change, changes will be automatically picked up by
Bundler. This means a commit in the local git repo will update the
revision in the `Gemfile.lock` to the local git repo revision. This
requires the same attention as git submodules. Before pushing to
the remote, you need to ensure the local override was pushed, otherwise
you may point to a commit that only exists in your local machine.
You'll also need to CGI escape your usernames and passwords as well.

Bundler does many checks to ensure a developer won't work with
invalid references. Particularly, we force a developer to specify
a branch in the `Gemfile` in order to use this feature. If the branch
specified in the `Gemfile` and the current branch in the local git
repository do not match, Bundler will abort. This ensures that
a developer is always working against the correct branches, and prevents
accidental locking to a different branch.

Finally, Bundler also ensures that the current revision in the
`Gemfile.lock` exists in the local git repository. By doing this, Bundler
forces you to fetch the latest changes in the remotes.

## MIRRORS OF GEM SOURCES

Bundler supports overriding gem sources with mirrors. This allows you to
configure rubygems.org as the gem source in your Gemfile while still using your
mirror to fetch gems.

    bundle config set --global mirror.SOURCE_URL MIRROR_URL

For example, to use a mirror of https://rubygems.org hosted at https://example.org:

    bundle config set --global mirror.https://rubygems.org https://example.org

Each mirror also provides a fallback timeout setting. If the mirror does not
respond within the fallback timeout, Bundler will try to use the original
server instead of the mirror.

    bundle config set --global mirror.SOURCE_URL.fallback_timeout TIMEOUT

For example, to fall back to rubygems.org after 3 seconds:

    bundle config set --global mirror.https://rubygems.org.fallback_timeout 3

The default fallback timeout is 0.1 seconds, but the setting can currently
only accept whole seconds (for example, 1, 15, or 30).

## CREDENTIALS FOR GEM SOURCES

Bundler allows you to configure credentials for any gem source, which allows
you to avoid putting secrets into your Gemfile.

    bundle config set --global SOURCE_HOSTNAME USERNAME:PASSWORD

For example, to save the credentials of user `claudette` for the gem source at
`gems.longerous.com`, you would run:

    bundle config set --global gems.longerous.com claudette:s00pers3krit

Or you can set the credentials as an environment variable like this:

    export BUNDLE_GEMS__LONGEROUS__COM="claudette:s00pers3krit"

For gems with a git source with HTTP(S) URL you can specify credentials like so:

    bundle config set --global https://github.com/rubygems/rubygems.git username:password

Or you can set the credentials as an environment variable like so:

    export BUNDLE_GITHUB__COM=username:password

This is especially useful for private repositories on hosts such as GitHub,
where you can use personal OAuth tokens:

    export BUNDLE_GITHUB__COM=abcd0123generatedtoken:x-oauth-basic

Note that any configured credentials will be redacted by informative commands
such as `bundle config list` or `bundle config get`, unless you use the
`--parseable` flag. This is to avoid unintentionally leaking credentials when
copy-pasting bundler output.

Also note that to guarantee a sane mapping between valid environment variable
names and valid host names, bundler makes the following transformations:

* Any `-` characters in a host name are mapped to a triple underscore (`___`) in the
  corresponding environment variable.

* Any `.` characters in a host name are mapped to a double underscore (`__`) in the
  corresponding environment variable.

This means that if you have a gem server named `my.gem-host.com`, you'll need to
use the `BUNDLE_MY__GEM___HOST__COM` variable to configure credentials for it
through ENV.

## CONFIGURE BUNDLER DIRECTORIES

Bundler's home, cache and plugin directories and config file can be configured
through environment variables. The default location for Bundler's home directory is
`~/.bundle`, which all directories inherit from by default. The following
outlines the available environment variables and their default values

    BUNDLE_USER_HOME : $HOME/.bundle
    BUNDLE_USER_CACHE : $BUNDLE_USER_HOME/cache
    BUNDLE_USER_CONFIG : $BUNDLE_USER_HOME/config
    BUNDLE_USER_PLUGIN : $BUNDLE_USER_HOME/plugin
PK*J[T��s��@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-info.1.ronnnu�[���bundle-info(1) -- Show information for the given gem in your bundle
===================================================================

## SYNOPSIS

`bundle info` [GEM_NAME]
              [--path]
              [--version]

## DESCRIPTION

Given a gem name present in your bundle, print the basic information about it
 such as homepage, version, path and summary.

## OPTIONS

* `--path`:
  Print the path of the given gem

* `--version`:
  Print gem version
PK*J[߶Ashare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-cache.1.ronnnu�[���bundle-cache(1) -- Package your needed `.gem` files into your application
=========================================================================

## SYNOPSIS

`bundle cache` [*OPTIONS*]

alias: `package`, `pack`

## DESCRIPTION

Copy all of the `.gem` files needed to run the application into the
`vendor/cache` directory. In the future, when running [`bundle install(1)`](bundle-install.1.html),
use the gems in the cache in preference to the ones on `rubygems.org`.

## OPTIONS

* `--all`:
  Include all sources (including path and git).

* `--all-platforms`:
  Include gems for all platforms present in the lockfile, not only the current one.

* `--cache-path=CACHE-PATH`:
  Specify a different cache path than the default (vendor/cache).

* `--gemfile=GEMFILE`:
  Use the specified gemfile instead of Gemfile.

* `--no-install`:
  Don't install the gems, only update the cache.

* `--no-prune`:
  Don't remove stale gems from the cache.

* `--path=PATH`:
  Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).

* `--quiet`:
  Only output warnings and errors.

* `--frozen`:
  Do not allow the Gemfile.lock to be updated after this bundle cache operation's install.

## GIT AND PATH GEMS

The `bundle cache` command can also package `:git` and `:path` dependencies
besides .gem files. This needs to be explicitly enabled via the `--all` option.
Once used, the `--all` option will be remembered.

## SUPPORT FOR MULTIPLE PLATFORMS

When using gems that have different packages for different platforms, Bundler
supports caching of gems for other platforms where the Gemfile has been resolved
(i.e. present in the lockfile) in `vendor/cache`.  This needs to be enabled via
the `--all-platforms` option. This setting will be remembered in your local
bundler configuration.

## REMOTE FETCHING

By default, if you run [`bundle install(1)`](bundle-install.1.html) after running
[bundle cache(1)](bundle-cache.1.html), bundler will still connect to `rubygems.org`
to check whether a platform-specific gem exists for any of the gems
in `vendor/cache`.

For instance, consider this Gemfile(5):

    source "https://rubygems.org"

    gem "nokogiri"

If you run `bundle cache` under C Ruby, bundler will retrieve
the version of `nokogiri` for the `"ruby"` platform. If you deploy
to JRuby and run `bundle install`, bundler is forced to check to
see whether a `"java"` platformed `nokogiri` exists.

Even though the `nokogiri` gem for the Ruby platform is
_technically_ acceptable on JRuby, it has a C extension
that does not run on JRuby. As a result, bundler will, by default,
still connect to `rubygems.org` to check whether it has a version
of one of your gems more specific to your platform.

This problem is also not limited to the `"java"` platform.
A similar (common) problem can happen when developing on Windows
and deploying to Linux, or even when developing on OSX and
deploying to Linux.

If you know for sure that the gems packaged in `vendor/cache`
are appropriate for the platform you are on, you can run
`bundle install --local` to skip checking for more appropriate
gems, and use the ones in `vendor/cache`.

One way to be sure that you have the right platformed versions
of all your gems is to run `bundle cache` on an identical
machine and check in the gems. For instance, you can run
`bundle cache` on an identical staging box during your
staging process, and check in the `vendor/cache` before
deploying to production.

By default, [bundle cache(1)](bundle-cache.1.html) fetches and also
installs the gems to the default location. To package the
dependencies to `vendor/cache` without installing them to the
local install location, you can run `bundle cache --no-install`.

## HISTORY

In Bundler 2.1, `cache` took in the functionalities of `package` and now
`package` and `pack` are aliases of `cache`.
PK*J[���ʻ�@share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-show.1.ronnnu�[���bundle-show(1) -- Shows all the gems in your bundle, or the path to a gem
=========================================================================

## SYNOPSIS

`bundle show` [GEM]
              [--paths]
              [--outdated]

## DESCRIPTION

Without the [GEM] option, `show` will print a list of the names and versions of
all gems that are required by your [`Gemfile(5)`][Gemfile(5)], sorted by name.

Calling show with [GEM] will list the exact location of that gem on your
machine.

## OPTIONS

* `--paths`:
  List the paths of all gems that are required by your [`Gemfile(5)`][Gemfile(5)],
  sorted by gem name.

* `--outdated`:
  Show verbose output including whether gems are outdated.
PK*J[�R���;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-help.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-HELP" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-help\fR \- Displays detailed help for each subcommand
.SH "SYNOPSIS"
\fBbundle help\fR [COMMAND]
.SH "DESCRIPTION"
Displays detailed help for the given subcommand\. You can specify a single \fBCOMMAND\fR at the same time\. When \fBCOMMAND\fR is omitted, help for \fBhelp\fR command will be displayed\.
PK*J[�̃�?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-env.1.ronnnu�[���bundle-env(1) -- Print information about the environment Bundler is running under
=================================================================================

## SYNOPSIS

`bundle env`

## DESCRIPTION

Prints information about the environment Bundler is running under.
PK*J[�ئl��Cshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-console.1.ronnnu�[���bundle-console(1) -- Open an IRB session with the bundle pre-loaded
===================================================================

## SYNOPSIS

`bundle console` [GROUP]

## DESCRIPTION

Starts an interactive Ruby console session in the context of the current bundle.

If no `GROUP` is specified, all gems in the `default` group in the [Gemfile(5)](https://bundler.io/man/gemfile.5.html) are
preliminarily loaded.

If `GROUP` is specified, all gems in the given group in the Gemfile in addition
to the gems in `default` group are loaded. Even if the given group does not
exist in the Gemfile, IRB console starts without any warning or error.

The environment variable `BUNDLE_CONSOLE` or `bundle config set console` can be used to change
the shell from the following:

* `irb` (default)
* `pry` (https://github.com/pry/pry)
* `ripl` (https://github.com/cldwalker/ripl)

`bundle console` uses irb by default. An alternative Pry or Ripl can be used with
`bundle console` by adjusting the `console` Bundler setting. Also make sure that
`pry` or `ripl` is in your Gemfile.

## EXAMPLE

    $ bundle config set console pry
    $ bundle console
    Resolving dependencies...
    [1] pry(main)>

## SEE ALSO

[Gemfile(5)](https://bundler.io/man/gemfile.5.html)
PK*J[�` ��
�
?share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-outdated.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-OUTDATED" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-outdated\fR \- List installed gems with newer versions available
.SH "SYNOPSIS"
\fBbundle outdated\fR [GEM] [\-\-local] [\-\-pre] [\-\-source] [\-\-filter\-strict | \-\-strict] [\-\-update\-strict] [\-\-parseable | \-\-porcelain] [\-\-group=GROUP] [\-\-groups] [\-\-patch|\-\-minor|\-\-major] [\-\-filter\-major] [\-\-filter\-minor] [\-\-filter\-patch] [\-\-only\-explicit]
.SH "DESCRIPTION"
Outdated lists the names and versions of gems that have a newer version available in the given source\. Calling outdated with [GEM [GEM]] will only check for newer versions of the given gems\. Prerelease gems are ignored by default\. If your gems are up to date, Bundler will exit with a status of 0\. Otherwise, it will exit 1\.
.SH "OPTIONS"
.TP
\fB\-\-local\fR
Do not attempt to fetch gems remotely and use the gem cache instead\.
.TP
\fB\-\-pre\fR
Check for newer pre\-release gems\.
.TP
\fB\-\-source=<list>\fR
Check against a specific source\.
.TP
\fB\-\-filter\-strict\fR, \fB\-\-strict\fR
Only list newer versions allowed by your Gemfile requirements, also respecting conservative update flags (\-\-patch, \-\-minor, \-\-major)\.
.TP
\fB\-\-update\-strict\fR
Strict conservative resolution, do not allow any gem to be updated past latest \-\-patch | \-\-minor | \-\-major\.
.TP
\fB\-\-parseable\fR, \fB\-\-porcelain\fR
Use minimal formatting for more parseable output\.
.TP
\fB\-\-group=GROUP\fR
List gems from a specific group\.
.TP
\fB\-\-groups\fR
List gems organized by groups\.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.TP
\fB\-\-filter\-major\fR
Only list major newer versions\.
.TP
\fB\-\-filter\-minor\fR
Only list minor newer versions\.
.TP
\fB\-\-filter\-patch\fR
Only list patch newer versions\.
.TP
\fB\-\-only\-explicit\fR
Only list gems specified in your Gemfile, not their dependencies\.
.SH "PATCH LEVEL OPTIONS"
See bundle update(1) \fIbundle\-update\.1\.html\fR for details\.
.SH "FILTERING OUTPUT"
The 3 filtering options do not affect the resolution of versions, merely what versions are shown in the output\.
.P
If the regular output shows the following:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* faker     1\.6\.5    1\.6\.6   ~> 1\.4     development, test
* hashie    1\.2\.0    3\.4\.6   = 1\.2\.0    default
* headless  2\.2\.3    2\.3\.1   = 2\.2\.3    test
.fi
.IP "" 0
.P
\fB\-\-filter\-major\fR would only show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* hashie    1\.2\.0    3\.4\.6   = 1\.2\.0    default
.fi
.IP "" 0
.P
\fB\-\-filter\-minor\fR would only show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* headless  2\.2\.3    2\.3\.1   = 2\.2\.3    test
.fi
.IP "" 0
.P
\fB\-\-filter\-patch\fR would only show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* faker     1\.6\.5    1\.6\.6   ~> 1\.4     development, test
.fi
.IP "" 0
.P
Filter options can be combined\. \fB\-\-filter\-minor\fR and \fB\-\-filter\-patch\fR would show:
.IP "" 4
.nf
* Gem       Current  Latest  Requested  Groups
* faker     1\.6\.5    1\.6\.6   ~> 1\.4     development, test
.fi
.IP "" 0
.P
Combining all three \fBfilter\fR options would be the same result as providing none of them\.
PK*J[��l���;share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-lock.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-LOCK" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
.SH "SYNOPSIS"
\fBbundle lock\fR [\-\-update] [\-\-bundler[=BUNDLER]] [\-\-local] [\-\-print] [\-\-lockfile=PATH] [\-\-full\-index] [\-\-gemfile=GEMFILE] [\-\-add\-checksums] [\-\-add\-platform] [\-\-remove\-platform] [\-\-normalize\-platforms] [\-\-patch] [\-\-minor] [\-\-major] [\-\-pre] [\-\-strict] [\-\-conservative]
.SH "DESCRIPTION"
Lock the gems specified in Gemfile\.
.SH "OPTIONS"
.TP
\fB\-\-update[=<list>]\fR
Ignores the existing lockfile\. Resolve then updates lockfile\. Taking a list of gems or updating all gems if no list is given\.
.TP
\fB\-\-bundler[=BUNDLER]\fR
Update the locked version of bundler to the given version or the latest version if no version is given\.
.TP
\fB\-\-local\fR
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems' cache or in \fBvendor/cache\fR\. Note that if a appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
.TP
\fB\-\-print\fR
Prints the lockfile to STDOUT instead of writing to the file system\.
.TP
\fB\-\-lockfile=LOCKFILE\fR
The path where the lockfile should be written to\.
.TP
\fB\-\-full\-index\fR
Fall back to using the single\-file index of all gems\.
.TP
\fB\-\-gemfile=GEMFILE\fR
Use the specified gemfile instead of [\fBGemfile(5)\fR][Gemfile(5)]\.
.TP
\fB\-\-add\-checksums\fR
Add checksums to the lockfile\.
.TP
\fB\-\-add\-platform=<list>\fR
Add a new platform to the lockfile, re\-resolving for the addition of that platform\.
.TP
\fB\-\-remove\-platform=<list>\fR
Remove a platform from the lockfile\.
.TP
\fB\-\-normalize\-platforms\fR
Normalize lockfile platforms\.
.TP
\fB\-\-patch\fR
If updating, prefer updating only to next patch version\.
.TP
\fB\-\-minor\fR
If updating, prefer updating only to next minor version\.
.TP
\fB\-\-major\fR
If updating, prefer updating to next major version (default)\.
.TP
\fB\-\-pre\fR
If updating, always choose the highest allowed version, regardless of prerelease status\.
.TP
\fB\-\-strict\fR
If updating, do not allow any gem to be updated past latest \-\-patch | \-\-minor | \-\-major\.
.TP
\fB\-\-conservative\fR
If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated\.
.SH "UPDATING ALL GEMS"
If you run \fBbundle lock\fR with \fB\-\-update\fR option without list of gems, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
.SH "UPDATING A LIST OF GEMS"
Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.P
For instance, you only want to update \fBnokogiri\fR, run \fBbundle lock \-\-update nokogiri\fR\.
.P
Bundler will update \fBnokogiri\fR and any of its dependencies, but leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.SH "SUPPORTING OTHER PLATFORMS"
If you want your bundle to support platforms other than the one you're running locally, you can run \fBbundle lock \-\-add\-platform PLATFORM\fR to add PLATFORM to the lockfile, force bundler to re\-resolve and consider the new platform when picking gems, all without needing to have a machine that matches PLATFORM handy to install those platform\-specific gems on\.
.P
For a full explanation of gem platforms, see \fBgem help platform\fR\.
.SH "PATCH LEVEL OPTIONS"
See bundle update(1) \fIbundle\-update\.1\.html\fR for details\.
PK*J[^F�((:share/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-add.1nu�[���.\" generated with Ronn-NG/v0.10.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
.TH "BUNDLE\-ADD" "1" "March 2025" ""
.SH "NAME"
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
.SH "SYNOPSIS"
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-path=PATH] [\-\-git=GIT|\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-quiet] [\-\-skip\-install] [\-\-strict|\-\-optimistic]
.SH "DESCRIPTION"
Adds the named gem to the [\fBGemfile(5)\fR][Gemfile(5)] and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\.
.SH "OPTIONS"
.TP
\fB\-\-version=VERSION\fR, \fB\-v=VERSION\fR
Specify version requirements(s) for the added gem\.
.TP
\fB\-\-group=GROUP\fR, \fB\-g=GROUP\fR
Specify the group(s) for the added gem\. Multiple groups should be separated by commas\.
.TP
\fB\-\-source=SOURCE\fR, \fB\-s=SOURCE\fR
Specify the source for the added gem\.
.TP
\fB\-\-require=REQUIRE\fR, \fB\-r=REQUIRE\fR
Adds require path to gem\. Provide false, or a path as a string\.
.TP
\fB\-\-path=PATH\fR
Specify the file system path for the added gem\.
.TP
\fB\-\-git=GIT\fR
Specify the git source for the added gem\.
.TP
\fB\-\-github=GITHUB\fR
Specify the github source for the added gem\.
.TP
\fB\-\-branch=BRANCH\fR
Specify the git branch for the added gem\.
.TP
\fB\-\-ref=REF\fR
Specify the git ref for the added gem\.
.TP
\fB\-\-glob=GLOB\fR
Specify the location of a dependency's \.gemspec, expanded within Ruby (single quotes recommended)\.
.TP
\fB\-\-quiet\fR
Do not print progress information to the standard output\.
.TP
\fB\-\-skip\-install\fR
Adds the gem to the Gemfile but does not install it\.
.TP
\fB\-\-optimistic\fR
Adds optimistic declaration of version\.
.TP
\fB\-\-strict\fR
Adds strict declaration of version\.
.SH "EXAMPLES"
.IP "1." 4
You can add the \fBrails\fR gem to the Gemfile without any version restriction\. The source of the gem will be the global source\.
.IP
\fBbundle add rails\fR
.IP "2." 4
You can add the \fBrails\fR gem with version greater than 1\.1 (not including 1\.1) and less than 3\.0\.
.IP
\fBbundle add rails \-\-version "> 1\.1, < 3\.0"\fR
.IP "3." 4
You can use the \fBhttps://gems\.example\.com\fR custom source and assign the gem to a group\.
.IP
\fBbundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"\fR
.IP "4." 4
The following adds the \fBgem\fR entry to the Gemfile without installing the gem\. You can install gems later via \fBbundle install\fR\.
.IP
\fBbundle add rails \-\-skip\-install\fR
.IP "5." 4
You can assign the gem to more than one group\.
.IP
\fBbundle add rails \-\-group "development, test"\fR
.IP "" 0
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR, bundle\-remove(1) \fIbundle\-remove\.1\.html\fR
PK*J[��4share/gems/gems/bundler-2.6.7/lib/bundler/version.rbnu�[���# frozen_string_literal: false

module Bundler
  VERSION = "2.6.7".freeze

  def self.bundler_major_version
    @bundler_major_version ||= VERSION.split(".").first.to_i
  end

  def self.gem_version
    @gem_version ||= Gem::Version.create(VERSION)
  end
end
PK*J[{��	�	?share/gems/gems/bundler-2.6.7/lib/bundler/lockfile_generator.rbnu�[���# frozen_string_literal: true

module Bundler
  class LockfileGenerator
    attr_reader :definition
    attr_reader :out

    # @private
    def initialize(definition)
      @definition = definition
      @out = String.new
    end

    def self.generate(definition)
      new(definition).generate!
    end

    def generate!
      add_sources
      add_platforms
      add_dependencies
      add_checksums
      add_locked_ruby_version
      add_bundled_with

      out
    end

    private

    def add_sources
      definition.sources.lock_sources.each_with_index do |source, idx|
        out << "\n" unless idx.zero?

        # Add the source header
        out << source.to_lock

        # Find all specs for this source
        specs = definition.resolve.select {|s| source.can_lock?(s) }
        add_specs(specs)
      end
    end

    def add_specs(specs)
      # This needs to be sorted by full name so that
      # gems with the same name, but different platform
      # are ordered consistently
      specs.sort_by(&:full_name).each do |spec|
        next if spec.name == "bundler"
        out << spec.to_lock
      end
    end

    def add_platforms
      add_section("PLATFORMS", definition.platforms)
    end

    def add_dependencies
      out << "\nDEPENDENCIES\n"

      handled = []
      definition.dependencies.sort_by(&:to_s).each do |dep|
        next if handled.include?(dep.name)
        out << dep.to_lock << "\n"
        handled << dep.name
      end
    end

    def add_checksums
      return unless definition.locked_checksums
      checksums = definition.resolve.map do |spec|
        spec.source.checksum_store.to_lock(spec)
      end
      add_section("CHECKSUMS", checksums)
    end

    def add_locked_ruby_version
      return unless locked_ruby_version = definition.locked_ruby_version
      add_section("RUBY VERSION", locked_ruby_version.to_s)
    end

    def add_bundled_with
      add_section("BUNDLED WITH", definition.bundler_version_to_lock.to_s)
    end

    def add_section(name, value)
      out << "\n#{name}\n"
      case value
      when Array
        value.map(&:to_s).sort.each do |val|
          out << "  #{val}\n"
        end
      when Hash
        value.to_a.sort_by {|k, _| k.to_s }.each do |key, val|
          out << "  #{key}: #{val}\n"
        end
      when String
        out << "   #{value}\n"
      else
        raise ArgumentError, "#{value.inspect} can't be serialized in a lockfile"
      end
    end
  end
end
PK*J[q�x�mm7share/gems/gems/bundler-2.6.7/lib/bundler/capistrano.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2,
  "The Bundler task for Capistrano. Please use https://github.com/capistrano/bundler"

# Capistrano task for Bundler.
#
# Add "require 'bundler/capistrano'" in your Capistrano deploy.rb, and
# Bundler will be activated after each new deployment.
require_relative "deployment"
require "capistrano/version"

if defined?(Capistrano::Version) && Gem::Version.new(Capistrano::Version).release >= Gem::Version.new("3.0")
  raise "For Capistrano 3.x integration, please use https://github.com/capistrano/bundler"
end

Capistrano::Configuration.instance(:must_exist).load do
  before "deploy:finalize_update", "bundle:install"
  Bundler::Deployment.define_task(self, :task, except: { no_release: true })
  set :rake, lambda { "#{fetch(:bundle_cmd, "bundle")} exec rake" }
end
PK*J[��n�{{5share/gems/gems/bundler-2.6.7/lib/bundler/checksum.rbnu�[���# frozen_string_literal: true

module Bundler
  class Checksum
    ALGO_SEPARATOR = "="
    DEFAULT_ALGORITHM = "sha256"
    private_constant :DEFAULT_ALGORITHM
    DEFAULT_BLOCK_SIZE = 16_384
    private_constant :DEFAULT_BLOCK_SIZE

    class << self
      def from_gem_package(gem_package, algo = DEFAULT_ALGORITHM)
        return if Bundler.settings[:disable_checksum_validation]
        return unless source = gem_package.instance_variable_get(:@gem)
        return unless source.respond_to?(:with_read_io)

        source.with_read_io do |io|
          from_gem(io, source.path)
        ensure
          io.rewind
        end
      end

      def from_gem(io, pathname, algo = DEFAULT_ALGORITHM)
        digest = Bundler::SharedHelpers.digest(algo.upcase).new
        buf = String.new(capacity: DEFAULT_BLOCK_SIZE)
        digest << io.readpartial(DEFAULT_BLOCK_SIZE, buf) until io.eof?
        Checksum.new(algo, digest.hexdigest!, Source.new(:gem, pathname))
      end

      def from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
        return if Bundler.settings[:disable_checksum_validation]

        Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:api, source_uri))
      end

      def from_lock(lock_checksum, lockfile_location)
        algo, digest = lock_checksum.strip.split(ALGO_SEPARATOR, 2)
        Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:lock, lockfile_location))
      end

      def to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
        return digest unless algo == DEFAULT_ALGORITHM
        return digest if digest.match?(/\A[0-9a-f]{64}\z/i)

        if digest.match?(%r{\A[-0-9a-z_+/]{43}={0,2}\z}i)
          digest = digest.tr("-_", "+/") # fix urlsafe base64
          digest.unpack1("m0").unpack1("H*")
        else
          raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
        end
      end
    end

    attr_reader :algo, :digest, :sources

    def initialize(algo, digest, source)
      @algo = algo
      @digest = digest
      @sources = [source]
    end

    def ==(other)
      match?(other) && other.sources == sources
    end

    alias_method :eql?, :==

    def same_source?(other)
      sources.include?(other.sources.first)
    end

    def match?(other)
      other.is_a?(self.class) && other.digest == digest && other.algo == algo
    end

    def hash
      digest.hash
    end

    def to_s
      "#{to_lock} (from #{sources.first}#{", ..." if sources.size > 1})"
    end

    def to_lock
      "#{algo}#{ALGO_SEPARATOR}#{digest}"
    end

    def merge!(other)
      return nil unless match?(other)

      @sources.concat(other.sources).uniq!
      self
    end

    def formatted_sources
      sources.join("\n    and ").concat("\n")
    end

    def removable?
      sources.all?(&:removable?)
    end

    def removal_instructions
      msg = +""
      i = 1
      sources.each do |source|
        msg << "  #{i}. #{source.removal}\n"
        i += 1
      end
      msg << "  #{i}. run `bundle install`\n"
    end

    def inspect
      abbr = "#{algo}#{ALGO_SEPARATOR}#{digest[0, 8]}"
      from = "from #{sources.join(" and ")}"
      "#<#{self.class}:#{object_id} #{abbr} #{from}>"
    end

    class Source
      attr_reader :type, :location

      def initialize(type, location)
        @type = type
        @location = location
      end

      def removable?
        [:lock, :gem].include?(type)
      end

      def ==(other)
        other.is_a?(self.class) && other.type == type && other.location == location
      end

      # phrased so that the usual string format is grammatically correct
      #   rake (10.3.2) sha256=abc123 from #{to_s}
      def to_s
        case type
        when :lock
          "the lockfile CHECKSUMS at #{location}"
        when :gem
          "the gem at #{location}"
        when :api
          "the API at #{location}"
        else
          "#{location} (#{type})"
        end
      end

      # A full sentence describing how to remove the checksum
      def removal
        case type
        when :lock
          "remove the matching checksum in #{location}"
        when :gem
          "remove the gem at #{location}"
        when :api
          "checksums from #{location} cannot be locally modified, you may need to update your sources"
        else
          "remove #{location} (#{type})"
        end
      end
    end

    class Store
      attr_reader :store
      protected :store

      def initialize
        @store = {}
        @store_mutex = Mutex.new
      end

      def inspect
        "#<#{self.class}:#{object_id} size=#{store.size}>"
      end

      # Replace when the new checksum is from the same source.
      # The primary purpose is registering checksums from gems where there are
      # duplicates of the same gem (according to full_name) in the index.
      #
      # In particular, this is when 2 gems have two similar platforms, e.g.
      # "darwin20" and "darwin-20", both of which resolve to darwin-20.
      # In the Index, the later gem replaces the former, so we do that here.
      #
      # However, if the new checksum is from a different source, we register like normal.
      # This ensures a mismatch error where there are multiple top level sources
      # that contain the same gem with different checksums.
      def replace(spec, checksum)
        return unless checksum

        lock_name = spec.lock_name
        @store_mutex.synchronize do
          existing = fetch_checksum(lock_name, checksum.algo)
          if !existing || existing.same_source?(checksum)
            store_checksum(lock_name, checksum)
          else
            merge_checksum(lock_name, checksum, existing)
          end
        end
      end

      def missing?(spec)
        @store[spec.lock_name].nil?
      end

      def register(spec, checksum)
        register_checksum(spec.lock_name, checksum)
      end

      def merge!(other)
        other.store.each do |lock_name, checksums|
          checksums.each do |_algo, checksum|
            register_checksum(lock_name, checksum)
          end
        end
      end

      def to_lock(spec)
        lock_name = spec.lock_name
        checksums = @store[lock_name]
        if checksums&.any?
          "#{lock_name} #{checksums.values.map(&:to_lock).sort.join(",")}"
        else
          lock_name
        end
      end

      private

      def register_checksum(lock_name, checksum)
        @store_mutex.synchronize do
          if checksum
            existing = fetch_checksum(lock_name, checksum.algo)
            if existing
              merge_checksum(lock_name, checksum, existing)
            else
              store_checksum(lock_name, checksum)
            end
          else
            init_checksum(lock_name)
          end
        end
      end

      def merge_checksum(lock_name, checksum, existing)
        existing.merge!(checksum) || raise(ChecksumMismatchError.new(lock_name, existing, checksum))
      end

      def store_checksum(lock_name, checksum)
        init_checksum(lock_name)[checksum.algo] = checksum
      end

      def init_checksum(lock_name)
        @store[lock_name] ||= {}
      end

      def fetch_checksum(lock_name, algo)
        @store[lock_name]&.fetch(algo, nil)
      end
    end
  end
end
PK*J[8[';share/gems/gems/bundler-2.6.7/lib/bundler/match_metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  module MatchMetadata
    def matches_current_metadata?
      matches_current_ruby? && matches_current_rubygems?
    end

    def matches_current_ruby?
      @required_ruby_version.satisfied_by?(Gem.ruby_version)
    end

    def matches_current_rubygems?
      @required_rubygems_version.satisfied_by?(Gem.rubygems_version)
    end

    def expanded_dependencies
      runtime_dependencies + [
        metadata_dependency("Ruby", @required_ruby_version),
        metadata_dependency("RubyGems", @required_rubygems_version),
      ].compact
    end

    def metadata_dependency(name, requirement)
      return if requirement.nil? || requirement.none?

      Gem::Dependency.new("#{name}\0", requirement)
    end
  end
end
PK*J[MK�X``6share/gems/gems/bundler-2.6.7/lib/bundler/ui/silent.rbnu�[���# frozen_string_literal: true

module Bundler
  module UI
    class Silent
      attr_writer :shell

      def initialize
        @warnings = []
      end

      def add_color(string, color)
        string
      end

      def info(message = nil, newline = nil)
      end

      def confirm(message = nil, newline = nil)
      end

      def warn(message = nil, newline = nil)
        @warnings |= [message]
      end

      def error(message = nil, newline = nil)
      end

      def debug(message = nil, newline = nil)
      end

      def confirm?
        false
      end

      def error?
        false
      end

      def debug?
        false
      end

      def info?
        false
      end

      def quiet?
        false
      end

      def warn?
        false
      end

      def output_stream=(_symbol)
      end

      def output_stream
        nil
      end

      def ask(message)
      end

      def yes?(msg)
        raise "Cannot ask yes? with a silent shell"
      end

      def no?(msg)
        raise "Cannot ask no? with a silent shell"
      end

      def level=(name)
      end

      def level(name = nil)
      end

      def trace(message, newline = nil, force = false)
      end

      def silence
        yield
      end

      def progress
        yield
      end

      def unprinted_warnings
        @warnings
      end
    end
  end
end
PK*J[�$k5share/gems/gems/bundler-2.6.7/lib/bundler/ui/shell.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_thor"

module Bundler
  module UI
    class Shell
      LEVELS = %w[silent error warn confirm info debug].freeze
      OUTPUT_STREAMS = [:stdout, :stderr].freeze

      attr_writer :shell
      attr_reader :output_stream

      def initialize(options = {})
        Thor::Base.shell = options["no-color"] ? Thor::Shell::Basic : nil
        @shell = Thor::Base.shell.new
        @level = ENV["DEBUG"] ? "debug" : "info"
        @warning_history = []
        @output_stream = :stdout
      end

      def add_color(string, *color)
        @shell.set_color(string, *color)
      end

      def info(msg = nil, newline = nil)
        return unless info?

        tell_me(msg || yield, nil, newline)
      end

      def confirm(msg = nil, newline = nil)
        return unless confirm?

        tell_me(msg || yield, :green, newline)
      end

      def warn(msg = nil, newline = nil, color = :yellow)
        return unless warn?
        return if @warning_history.include? msg
        @warning_history << msg

        tell_err(msg || yield, color, newline)
      end

      def error(msg = nil, newline = nil, color = :red)
        return unless error?

        tell_err(msg || yield, color, newline)
      end

      def debug(msg = nil, newline = nil)
        return unless debug?

        tell_me(msg || yield, nil, newline)
      end

      def info?
        level("info")
      end

      def confirm?
        level("confirm")
      end

      def warn?
        level("warn")
      end

      def error?
        level("error")
      end

      def debug?
        level("debug")
      end

      def quiet?
        level("quiet")
      end

      def ask(msg)
        @shell.ask(msg)
      end

      def yes?(msg)
        @shell.yes?(msg)
      end

      def no?(msg)
        @shell.no?(msg)
      end

      def level=(level)
        raise ArgumentError unless LEVELS.include?(level.to_s)
        @level = level.to_s
      end

      def level(name = nil)
        return @level unless name
        unless index = LEVELS.index(name)
          raise "#{name.inspect} is not a valid level"
        end
        index <= LEVELS.index(@level)
      end

      def output_stream=(symbol)
        raise ArgumentError unless OUTPUT_STREAMS.include?(symbol)
        @output_stream = symbol
      end

      def trace(e, newline = nil, force = false)
        return unless debug? || force
        msg = "#{e.class}: #{e.message}\n#{e.backtrace.join("\n  ")}"
        tell_err(msg, nil, newline)
      end

      def silence(&blk)
        with_level("silent", &blk)
      end

      def progress(&blk)
        with_output_stream(:stderr, &blk)
      end

      def unprinted_warnings
        []
      end

      private

      # valimism
      def tell_me(msg, color = nil, newline = nil)
        return tell_err(msg, color, newline) if output_stream == :stderr

        msg = word_wrap(msg) if newline.is_a?(Hash) && newline[:wrap]
        if newline.nil?
          @shell.say(msg, color)
        else
          @shell.say(msg, color, newline)
        end
      end

      def tell_err(message, color = nil, newline = nil)
        return if @shell.send(:stderr).closed?

        newline = !message.to_s.match?(/( |\t)\Z/) if newline.nil?
        message = word_wrap(message) if newline.is_a?(Hash) && newline[:wrap]

        color = nil if color && !$stderr.tty?

        buffer = @shell.send(:prepare_message, message, *color)
        buffer << "\n" if newline && !message.to_s.end_with?("\n")

        @shell.send(:stderr).print(buffer)
        @shell.send(:stderr).flush
      end

      def strip_leading_spaces(text)
        spaces = text[/\A\s+/, 0]
        spaces ? text.gsub(/#{spaces}/, "") : text
      end

      def word_wrap(text, line_width = Thor::Terminal.terminal_width)
        strip_leading_spaces(text).split("\n").collect do |line|
          line.length > line_width ? line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip : line
        end * "\n"
      end

      def with_level(level)
        original = @level
        @level = level
        yield
      ensure
        @level = original
      end

      def with_output_stream(symbol)
        original = output_stream
        self.output_stream = symbol
        yield
      ensure
        @output_stream = original
      end
    end
  end
end
PK*J[B��008share/gems/gems/bundler-2.6.7/lib/bundler/ui/rg_proxy.rbnu�[���# frozen_string_literal: true

require_relative "../ui"
require "rubygems/user_interaction"

module Bundler
  module UI
    class RGProxy < ::Gem::SilentUI
      def initialize(ui)
        @ui = ui
        super()
      end

      def say(message)
        @ui&.debug(message)
      end
    end
  end
end
PK*J[���7share/gems/gems/bundler-2.6.7/lib/bundler/source_map.rbnu�[���# frozen_string_literal: true

module Bundler
  class SourceMap
    attr_reader :sources, :dependencies, :locked_specs

    def initialize(sources, dependencies, locked_specs)
      @sources = sources
      @dependencies = dependencies
      @locked_specs = locked_specs
    end

    def pinned_spec_names(skip = nil)
      direct_requirements.reject {|_, source| source == skip }.keys
    end

    def all_requirements
      requirements = direct_requirements.dup

      unmet_deps = sources.non_default_explicit_sources.map do |source|
        (source.spec_names - pinned_spec_names).each do |indirect_dependency_name|
          previous_source = requirements[indirect_dependency_name]
          if previous_source.nil?
            requirements[indirect_dependency_name] = source
          else
            no_ambiguous_sources = Bundler.feature_flag.bundler_3_mode?

            msg = ["The gem '#{indirect_dependency_name}' was found in multiple relevant sources."]
            msg.concat [previous_source, source].map {|s| "  * #{s}" }.sort
            msg << "You #{no_ambiguous_sources ? :must : :should} add this gem to the source block for the source you wish it to be installed from."
            msg = msg.join("\n")

            raise SecurityError, msg if no_ambiguous_sources
            Bundler.ui.warn "Warning: #{msg}"
          end
        end

        source.unmet_deps
      end

      sources.default_source.add_dependency_names(unmet_deps.flatten - requirements.keys)

      requirements
    end

    def direct_requirements
      @direct_requirements ||= begin
        requirements = {}
        default = sources.default_source
        dependencies.each do |dep|
          dep_source = dep.source || default
          dep_source.add_dependency_names(dep.name)
          requirements[dep.name] = dep_source
        end
        requirements
      end
    end

    def locked_requirements
      @locked_requirements ||= begin
        requirements = {}
        locked_specs.each do |locked_spec|
          source = locked_spec.source
          source.add_dependency_names(locked_spec.name)
          requirements[locked_spec.name] = source
        end
        requirements
      end
    end
  end
end
PK*J[�9�y77_share/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rbnu�[���class Bundler::ConnectionPool
  class Wrapper < ::BasicObject
    METHODS = [:with, :pool_shutdown, :wrapped_pool]

    def initialize(options = {}, &block)
      @pool = options.fetch(:pool) { ::Bundler::ConnectionPool.new(options, &block) }
    end

    def wrapped_pool
      @pool
    end

    def with(&block)
      @pool.with(&block)
    end

    def pool_shutdown(&block)
      @pool.shutdown(&block)
    end

    def pool_size
      @pool.size
    end

    def pool_available
      @pool.available
    end

    def respond_to?(id, *args)
      METHODS.include?(id) || with { |c| c.respond_to?(id, *args) }
    end

    # rubocop:disable Style/MissingRespondToMissing
    if ::RUBY_VERSION >= "3.0.0"
      def method_missing(name, *args, **kwargs, &block)
        with do |connection|
          connection.send(name, *args, **kwargs, &block)
        end
      end
    elsif ::RUBY_VERSION >= "2.7.0"
      ruby2_keywords def method_missing(name, *args, &block)
        with do |connection|
          connection.send(name, *args, &block)
        end
      end
    else
      def method_missing(name, *args, &block)
        with do |connection|
          connection.send(name, *args, &block)
        end
      end
    end
    # rubocop:enable Style/MethodMissingSuper
    # rubocop:enable Style/MissingRespondToMissing
  end
end
PK*J[T�||cshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rbnu�[���##
# The TimedStack manages a pool of homogeneous connections (or any resource
# you wish to manage).  Connections are created lazily up to a given maximum
# number.

# Examples:
#
#    ts = TimedStack.new(1) { MyConnection.new }
#
#    # fetch a connection
#    conn = ts.pop
#
#    # return a connection
#    ts.push conn
#
#    conn = ts.pop
#    ts.pop timeout: 5
#    #=> raises Bundler::ConnectionPool::TimeoutError after 5 seconds

class Bundler::ConnectionPool::TimedStack
  attr_reader :max

  ##
  # Creates a new pool with +size+ connections that are created from the given
  # +block+.

  def initialize(size = 0, &block)
    @create_block = block
    @created = 0
    @que = []
    @max = size
    @mutex = Thread::Mutex.new
    @resource = Thread::ConditionVariable.new
    @shutdown_block = nil
  end

  ##
  # Returns +obj+ to the stack.  +options+ is ignored in TimedStack but may be
  # used by subclasses that extend TimedStack.

  def push(obj, options = {})
    @mutex.synchronize do
      if @shutdown_block
        @created -= 1 unless @created == 0
        @shutdown_block.call(obj)
      else
        store_connection obj, options
      end

      @resource.broadcast
    end
  end
  alias_method :<<, :push

  ##
  # Retrieves a connection from the stack.  If a connection is available it is
  # immediately returned.  If no connection is available within the given
  # timeout a Bundler::ConnectionPool::TimeoutError is raised.
  #
  # +:timeout+ is the only checked entry in +options+ and is preferred over
  # the +timeout+ argument (which will be removed in a future release).  Other
  # options may be used by subclasses that extend TimedStack.

  def pop(timeout = 0.5, options = {})
    options, timeout = timeout, 0.5 if Hash === timeout
    timeout = options.fetch :timeout, timeout

    deadline = current_time + timeout
    @mutex.synchronize do
      loop do
        raise Bundler::ConnectionPool::PoolShuttingDownError if @shutdown_block
        return fetch_connection(options) if connection_stored?(options)

        connection = try_create(options)
        return connection if connection

        to_wait = deadline - current_time
        raise Bundler::ConnectionPool::TimeoutError, "Waited #{timeout} sec, #{length}/#{@max} available" if to_wait <= 0
        @resource.wait(@mutex, to_wait)
      end
    end
  end

  ##
  # Shuts down the TimedStack by passing each connection to +block+ and then
  # removing it from the pool. Attempting to checkout a connection after
  # shutdown will raise +Bundler::ConnectionPool::PoolShuttingDownError+ unless
  # +:reload+ is +true+.

  def shutdown(reload: false, &block)
    raise ArgumentError, "shutdown must receive a block" unless block

    @mutex.synchronize do
      @shutdown_block = block
      @resource.broadcast

      shutdown_connections
      @shutdown_block = nil if reload
    end
  end

  ##
  # Reaps connections that were checked in more than +idle_seconds+ ago.
  def reap(idle_seconds, &block)
    raise ArgumentError, "reap must receive a block" unless block
    raise ArgumentError, "idle_seconds must be a number" unless idle_seconds.is_a?(Numeric)
    raise Bundler::ConnectionPool::PoolShuttingDownError if @shutdown_block

    idle.times do
      conn =
        @mutex.synchronize do
          raise Bundler::ConnectionPool::PoolShuttingDownError if @shutdown_block

          reserve_idle_connection(idle_seconds)
        end
      break unless conn

      block.call(conn)
    end
  end

  ##
  # Returns +true+ if there are no available connections.

  def empty?
    (@created - @que.length) >= @max
  end

  ##
  # The number of connections available on the stack.

  def length
    @max - @created + @que.length
  end

  ##
  # The number of connections created and available on the stack.
  def idle
    @que.length
  end

  private

  def current_time
    Process.clock_gettime(Process::CLOCK_MONOTONIC)
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must returns true if a connection is available on the stack.

  def connection_stored?(options = nil)
    !@que.empty?
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must return a connection from the stack.

  def fetch_connection(options = nil)
    @que.pop&.first
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must shut down all connections on the stack.

  def shutdown_connections(options = nil)
    while connection_stored?(options)
      conn = fetch_connection(options)
      @created -= 1 unless @created == 0
      @shutdown_block.call(conn)
    end
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method returns the oldest idle connection if it has been idle for more than idle_seconds.
  # This requires that the stack is kept in order of checked in time (oldest first).

  def reserve_idle_connection(idle_seconds)
    return unless idle_connections?(idle_seconds)

    @created -= 1 unless @created == 0

    @que.shift.first
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # Returns true if the first connection in the stack has been idle for more than idle_seconds

  def idle_connections?(idle_seconds)
    connection_stored? && (current_time - @que.first.last > idle_seconds)
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must return +obj+ to the stack.

  def store_connection(obj, options = nil)
    @que.push [obj, current_time]
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must create a connection if and only if the total number of
  # connections allowed has not been met.

  def try_create(options = nil)
    unless @created == @max
      object = @create_block.call
      @created += 1
      object
    end
  end
end
PK*J[{ �66_share/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rbnu�[���class Bundler::ConnectionPool
  VERSION = "2.5.0"
end
PK*J[�18��Wshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool.rbnu�[���require_relative "../../../vendored_timeout"
require_relative "connection_pool/version"

class Bundler::ConnectionPool
  class Error < ::RuntimeError; end

  class PoolShuttingDownError < ::Bundler::ConnectionPool::Error; end

  class TimeoutError < ::Gem::Timeout::Error; end
end

# Generic connection pool class for sharing a limited number of objects or network connections
# among many threads.  Note: pool elements are lazily created.
#
# Example usage with block (faster):
#
#    @pool = Bundler::ConnectionPool.new { Redis.new }
#    @pool.with do |redis|
#      redis.lpop('my-list') if redis.llen('my-list') > 0
#    end
#
# Using optional timeout override (for that single invocation)
#
#    @pool.with(timeout: 2.0) do |redis|
#      redis.lpop('my-list') if redis.llen('my-list') > 0
#    end
#
# Example usage replacing an existing connection (slower):
#
#    $redis = Bundler::ConnectionPool.wrap { Redis.new }
#
#    def do_work
#      $redis.lpop('my-list') if $redis.llen('my-list') > 0
#    end
#
# Accepts the following options:
# - :size - number of connections to pool, defaults to 5
# - :timeout - amount of time to wait for a connection if none currently available, defaults to 5 seconds
# - :auto_reload_after_fork - automatically drop all connections after fork, defaults to true
#
class Bundler::ConnectionPool
  DEFAULTS = {size: 5, timeout: 5, auto_reload_after_fork: true}

  def self.wrap(options, &block)
    Wrapper.new(options, &block)
  end

  if Process.respond_to?(:fork)
    INSTANCES = ObjectSpace::WeakMap.new
    private_constant :INSTANCES

    def self.after_fork
      INSTANCES.values.each do |pool|
        next unless pool.auto_reload_after_fork

        # We're on after fork, so we know all other threads are dead.
        # All we need to do is to ensure the main thread doesn't have a
        # checked out connection
        pool.checkin(force: true)
        pool.reload do |connection|
          # Unfortunately we don't know what method to call to close the connection,
          # so we try the most common one.
          connection.close if connection.respond_to?(:close)
        end
      end
      nil
    end

    if ::Process.respond_to?(:_fork) # MRI 3.1+
      module ForkTracker
        def _fork
          pid = super
          if pid == 0
            Bundler::ConnectionPool.after_fork
          end
          pid
        end
      end
      Process.singleton_class.prepend(ForkTracker)
    end
  else
    INSTANCES = nil
    private_constant :INSTANCES

    def self.after_fork
      # noop
    end
  end

  def initialize(options = {}, &block)
    raise ArgumentError, "Connection pool requires a block" unless block

    options = DEFAULTS.merge(options)

    @size = Integer(options.fetch(:size))
    @timeout = options.fetch(:timeout)
    @auto_reload_after_fork = options.fetch(:auto_reload_after_fork)

    @available = TimedStack.new(@size, &block)
    @key = :"pool-#{@available.object_id}"
    @key_count = :"pool-#{@available.object_id}-count"
    INSTANCES[self] = self if INSTANCES
  end

  def with(options = {})
    Thread.handle_interrupt(Exception => :never) do
      conn = checkout(options)
      begin
        Thread.handle_interrupt(Exception => :immediate) do
          yield conn
        end
      ensure
        checkin
      end
    end
  end
  alias_method :then, :with

  def checkout(options = {})
    if ::Thread.current[@key]
      ::Thread.current[@key_count] += 1
      ::Thread.current[@key]
    else
      ::Thread.current[@key_count] = 1
      ::Thread.current[@key] = @available.pop(options[:timeout] || @timeout)
    end
  end

  def checkin(force: false)
    if ::Thread.current[@key]
      if ::Thread.current[@key_count] == 1 || force
        @available.push(::Thread.current[@key])
        ::Thread.current[@key] = nil
        ::Thread.current[@key_count] = nil
      else
        ::Thread.current[@key_count] -= 1
      end
    elsif !force
      raise Bundler::ConnectionPool::Error, "no connections are checked out"
    end

    nil
  end

  ##
  # Shuts down the Bundler::ConnectionPool by passing each connection to +block+ and
  # then removing it from the pool. Attempting to checkout a connection after
  # shutdown will raise +Bundler::ConnectionPool::PoolShuttingDownError+.

  def shutdown(&block)
    @available.shutdown(&block)
  end

  ##
  # Reloads the Bundler::ConnectionPool by passing each connection to +block+ and then
  # removing it the pool. Subsequent checkouts will create new connections as
  # needed.

  def reload(&block)
    @available.shutdown(reload: true, &block)
  end

  ## Reaps idle connections that have been idle for over +idle_seconds+.
  # +idle_seconds+ defaults to 60.
  def reap(idle_seconds = 60, &block)
    @available.reap(idle_seconds, &block)
  end

  # Size of this connection pool
  attr_reader :size
  # Automatically drop all connections after fork
  attr_reader :auto_reload_after_fork

  # Number of pool entries available for checkout at this instant.
  def available
    @available.length
  end

  # Number of pool entries created and idle in the pool.
  def idle
    @available.idle
  end
end

require_relative "connection_pool/timed_stack"
require_relative "connection_pool/wrapper"
PK*J[K���Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rbnu�[���require_relative 'partial_solution'
require_relative 'term'
require_relative 'incompatibility'
require_relative 'solve_failure'
require_relative 'strategy'

module Bundler::PubGrub
  class VersionSolver
    attr_reader :logger
    attr_reader :source
    attr_reader :solution
    attr_reader :strategy

    def initialize(source:, root: Package.root, strategy: Strategy.new(source), logger: Bundler::PubGrub.logger)
      @logger = logger

      @source = source
      @strategy = strategy

      # { package => [incompatibility, ...]}
      @incompatibilities = Hash.new do |h, k|
        h[k] = []
      end

      @seen_incompatibilities = {}

      @solution = PartialSolution.new

      add_incompatibility Incompatibility.new([
        Term.new(VersionConstraint.any(root), false)
      ], cause: :root)

      propagate(root)
    end

    def solved?
      solution.unsatisfied.empty?
    end

    # Returns true if there is more work to be done, false otherwise
    def work
      unsatisfied_terms = solution.unsatisfied
      if unsatisfied_terms.empty?
        logger.info { "Solution found after #{solution.attempted_solutions} attempts:" }
        solution.decisions.each do |package, version|
          next if Package.root?(package)
          logger.info { "* #{package} #{version}" }
        end

        return false
      end

      next_package = choose_package_version_from(unsatisfied_terms)
      propagate(next_package)

      true
    end

    def solve
      while work; end

      solution.decisions
    end

    alias_method :result, :solve

    private

    def propagate(initial_package)
      changed = [initial_package]
      while package = changed.shift
        @incompatibilities[package].reverse_each do |incompatibility|
          result = propagate_incompatibility(incompatibility)
          if result == :conflict
            root_cause = resolve_conflict(incompatibility)
            changed.clear
            changed << propagate_incompatibility(root_cause)
          elsif result # should be a Package
            changed << result
          end
        end
        changed.uniq!
      end
    end

    def propagate_incompatibility(incompatibility)
      unsatisfied = nil
      incompatibility.terms.each do |term|
        relation = solution.relation(term)
        if relation == :disjoint
          return nil
        elsif relation == :overlap
          # If more than one term is inconclusive, we can't deduce anything
          return nil if unsatisfied
          unsatisfied = term
        end
      end

      if !unsatisfied
        return :conflict
      end

      logger.debug { "derived: #{unsatisfied.invert}" }

      solution.derive(unsatisfied.invert, incompatibility)

      unsatisfied.package
    end

    def choose_package_version_from(unsatisfied_terms)
      remaining = unsatisfied_terms.map { |t| [t.package, t.constraint.range] }.to_h

      package, version = strategy.next_package_and_version(remaining)

      logger.debug { "attempting #{package} #{version}" }

      if version.nil?
        unsatisfied_term = unsatisfied_terms.find { |t| t.package == package }
        add_incompatibility source.no_versions_incompatibility_for(package, unsatisfied_term)
        return package
      end

      conflict = false

      source.incompatibilities_for(package, version).each do |incompatibility|
        if @seen_incompatibilities.include?(incompatibility)
          logger.debug { "knew: #{incompatibility}" }
          next
        end
        @seen_incompatibilities[incompatibility] = true

        add_incompatibility incompatibility

        conflict ||= incompatibility.terms.all? do |term|
          term.package == package || solution.satisfies?(term)
        end
      end

      unless conflict
        logger.info { "selected #{package} #{version}" }

        solution.decide(package, version)
      else
        logger.info { "conflict: #{conflict.inspect}" }
      end

      package
    end

    def resolve_conflict(incompatibility)
      logger.info { "conflict: #{incompatibility}" }

      new_incompatibility = nil

      while !incompatibility.failure?
        most_recent_term = nil
        most_recent_satisfier = nil
        difference = nil

        previous_level = 1

        incompatibility.terms.each do |term|
          satisfier = solution.satisfier(term)

          if most_recent_satisfier.nil?
            most_recent_term = term
            most_recent_satisfier = satisfier
          elsif most_recent_satisfier.index < satisfier.index
            previous_level = [previous_level, most_recent_satisfier.decision_level].max
            most_recent_term = term
            most_recent_satisfier = satisfier
            difference = nil
          else
            previous_level = [previous_level, satisfier.decision_level].max
          end

          if most_recent_term == term
            difference = most_recent_satisfier.term.difference(most_recent_term)
            if difference.empty?
              difference = nil
            else
              difference_satisfier = solution.satisfier(difference.inverse)
              previous_level = [previous_level, difference_satisfier.decision_level].max
            end
          end
        end

        if previous_level < most_recent_satisfier.decision_level ||
            most_recent_satisfier.decision?

          logger.info { "backtracking to #{previous_level}" }
          solution.backtrack(previous_level)

          if new_incompatibility
            add_incompatibility(new_incompatibility)
          end

          return incompatibility
        end

        new_terms = []
        new_terms += incompatibility.terms - [most_recent_term]
        new_terms += most_recent_satisfier.cause.terms.reject { |term|
          term.package == most_recent_satisfier.term.package
        }
        if difference
          new_terms << difference.invert
        end

        new_incompatibility = Incompatibility.new(new_terms, cause: Incompatibility::ConflictCause.new(incompatibility, most_recent_satisfier.cause))

        if incompatibility.to_s == new_incompatibility.to_s
          logger.info { "!! failed to resolve conflicts, this shouldn't have happened" }
          break
        end

        incompatibility = new_incompatibility

        partially = difference ? " partially" : ""
        logger.info { "! #{most_recent_term} is#{partially} satisfied by #{most_recent_satisfier.term}" }
        logger.info { "! which is caused by #{most_recent_satisfier.cause}" }
        logger.info { "! thus #{incompatibility}" }
      end

      raise SolveFailure.new(incompatibility)
    end

    def add_incompatibility(incompatibility)
      logger.debug { "fact: #{incompatibility}" }
      incompatibility.terms.each do |term|
        package = term.package
        @incompatibilities[package] << incompatibility
      end
    end
  end
end
PK*J[�A�KKRshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rbnu�[���module Bundler::PubGrub
  module RubyGems
    extend self

    def requirement_to_range(requirement)
      ranges = requirement.requirements.map do |(op, ver)|
        case op
        when "~>"
          name = "~> #{ver}"
          bump = ver.class.new(ver.bump.to_s + ".A")
          VersionRange.new(name: name, min: ver, max: bump, include_min: true)
        when ">"
          VersionRange.new(min: ver)
        when ">="
          VersionRange.new(min: ver, include_min: true)
        when "<"
          VersionRange.new(max: ver)
        when "<="
          VersionRange.new(max: ver, include_max: true)
        when "="
          VersionRange.new(min: ver, max: ver, include_min: true, include_max: true)
        when "!="
          VersionRange.new(min: ver, max: ver, include_min: true, include_max: true).invert
        else
          raise "bad version specifier: #{op}"
        end
      end

      ranges.inject(&:intersect)
    end

    def requirement_to_constraint(package, requirement)
      Bundler::PubGrub::VersionConstraint.new(package, range: requirement_to_range(requirement))
    end

    def parse_range(dep)
      requirement_to_range(Gem::Requirement.new(dep))
    end

    def parse_constraint(package, dep)
      range = parse_range(dep)
      Bundler::PubGrub::VersionConstraint.new(package, range: range)
    end
  end
end
PK*J[�N�n"n"Wshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rbnu�[���# frozen_string_literal: true

module Bundler::PubGrub
  class VersionRange
    attr_reader :min, :max, :include_min, :include_max

    alias_method :include_min?, :include_min
    alias_method :include_max?, :include_max

    class Empty < VersionRange
      undef_method :min, :max
      undef_method :include_min, :include_min?
      undef_method :include_max, :include_max?

      def initialize
      end

      def empty?
        true
      end

      def eql?(other)
        other.empty?
      end

      def hash
        [].hash
      end

      def intersects?(_)
        false
      end

      def intersect(other)
        self
      end

      def allows_all?(other)
        other.empty?
      end

      def include?(_)
        false
      end

      def any?
        false
      end

      def to_s
        "(no versions)"
      end

      def ==(other)
        other.class == self.class
      end

      def invert
        VersionRange.any
      end

      def select_versions(_)
        []
      end
    end

    EMPTY = Empty.new
    Empty.singleton_class.undef_method(:new)

    def self.empty
      EMPTY
    end

    def self.any
      new
    end

    def initialize(min: nil, max: nil, include_min: false, include_max: false, name: nil)
      raise ArgumentError, "Ranges without a lower bound cannot have include_min == true" if !min && include_min == true
      raise ArgumentError, "Ranges without an upper bound cannot have include_max == true" if !max && include_max == true

      @min = min
      @max = max
      @include_min = include_min
      @include_max = include_max
      @name = name
    end

    def hash
      @hash ||= min.hash ^ max.hash ^ include_min.hash ^ include_max.hash
    end

    def eql?(other)
      if other.is_a?(VersionRange)
        !other.empty? &&
          min.eql?(other.min) &&
          max.eql?(other.max) &&
          include_min.eql?(other.include_min) &&
          include_max.eql?(other.include_max)
      else
        ranges.eql?(other.ranges)
      end
    end

    def ranges
      [self]
    end

    def include?(version)
      compare_version(version) == 0
    end

    # Partitions passed versions into [lower, within, higher]
    #
    # versions must be sorted
    def partition_versions(versions)
      min_index =
        if !min || versions.empty?
          0
        elsif include_min?
          (0..versions.size).bsearch { |i| versions[i].nil? || versions[i] >= min }
        else
          (0..versions.size).bsearch { |i| versions[i].nil? || versions[i] > min }
        end

      lower = versions.slice(0, min_index)
      versions = versions.slice(min_index, versions.size)

      max_index =
        if !max || versions.empty?
          versions.size
        elsif include_max?
          (0..versions.size).bsearch { |i| versions[i].nil? || versions[i] > max }
        else
          (0..versions.size).bsearch { |i| versions[i].nil? || versions[i] >= max }
        end

      [
        lower,
        versions.slice(0, max_index),
        versions.slice(max_index, versions.size)
      ]
    end

    # Returns versions which are included by this range.
    #
    # versions must be sorted
    def select_versions(versions)
      return versions if any?

      partition_versions(versions)[1]
    end

    def compare_version(version)
      if min
        case version <=> min
        when -1
          return -1
        when 0
          return -1 if !include_min
        when 1
        end
      end

      if max
        case version <=> max
        when -1
        when 0
          return 1 if !include_max
        when 1
          return 1
        end
      end

      0
    end

    def strictly_lower?(other)
      return false if !max || !other.min

      case max <=> other.min
      when 0
        !include_max || !other.include_min
      when -1
        true
      when 1
        false
      end
    end

    def strictly_higher?(other)
      other.strictly_lower?(self)
    end

    def intersects?(other)
      return false if other.empty?
      return other.intersects?(self) if other.is_a?(VersionUnion)
      !strictly_lower?(other) && !strictly_higher?(other)
    end
    alias_method :allows_any?, :intersects?

    def intersect(other)
      return other if other.empty?
      return other.intersect(self) if other.is_a?(VersionUnion)

      min_range =
        if !min
          other
        elsif !other.min
          self
        else
          case min <=> other.min
          when 0
            include_min ? other : self
          when -1
            other
          when 1
            self
          end
        end

      max_range =
        if !max
          other
        elsif !other.max
          self
        else
          case max <=> other.max
          when 0
            include_max ? other : self
          when -1
            self
          when 1
            other
          end
        end

      if !min_range.equal?(max_range) && min_range.min && max_range.max
        case min_range.min <=> max_range.max
        when -1
        when 0
          if !min_range.include_min || !max_range.include_max
            return EMPTY
          end
        when 1
          return EMPTY
        end
      end

      VersionRange.new(
        min: min_range.min,
        include_min: min_range.include_min,
        max: max_range.max,
        include_max: max_range.include_max
      )
    end

    # The span covered by two ranges
    #
    # If self and other are contiguous, this builds a union of the two ranges.
    # (if they aren't you are probably calling the wrong method)
    def span(other)
      return self if other.empty?

      min_range =
        if !min
          self
        elsif !other.min
          other
        else
          case min <=> other.min
          when 0
            include_min ? self : other
          when -1
            self
          when 1
            other
          end
        end

      max_range =
        if !max
          self
        elsif !other.max
          other
        else
          case max <=> other.max
          when 0
            include_max ? self : other
          when -1
            other
          when 1
            self
          end
        end

      VersionRange.new(
        min: min_range.min,
        include_min: min_range.include_min,
        max: max_range.max,
        include_max: max_range.include_max
      )
    end

    def union(other)
      return other.union(self) if other.is_a?(VersionUnion)

      if contiguous_to?(other)
        span(other)
      else
        VersionUnion.union([self, other])
      end
    end

    def contiguous_to?(other)
      return false if other.empty?
      return true if any?

      intersects?(other) || contiguous_below?(other) || contiguous_above?(other)
    end

    def contiguous_below?(other)
      return false if !max || !other.min

      max == other.min && (include_max || other.include_min)
    end

    def contiguous_above?(other)
      other.contiguous_below?(self)
    end

    def allows_all?(other)
      return true if other.empty?

      if other.is_a?(VersionUnion)
        return VersionUnion.new([self]).allows_all?(other)
      end

      return false if max && !other.max
      return false if min && !other.min

      if min
        case min <=> other.min
        when -1
        when 0
          return false if !include_min && other.include_min
        when 1
          return false
        end
      end

      if max
        case max <=> other.max
        when -1
          return false
        when 0
          return false if !include_max && other.include_max
        when 1
        end
      end

      true
    end

    def any?
      !min && !max
    end

    def empty?
      false
    end

    def to_s
      @name ||= constraints.join(", ")
    end

    def inspect
      "#<#{self.class} #{to_s}>"
    end

    def upper_invert
      return self.class.empty unless max

      VersionRange.new(min: max, include_min: !include_max)
    end

    def invert
      return self.class.empty if any?

      low = -> { VersionRange.new(max: min, include_max: !include_min) }
      high = -> { VersionRange.new(min: max, include_min: !include_max) }

      if !min
        high.call
      elsif !max
        low.call
      else
        low.call.union(high.call)
      end
    end

    def ==(other)
      self.class == other.class &&
        min == other.min &&
        max == other.max &&
        include_min == other.include_min &&
        include_max == other.include_max
    end

    private

    def constraints
      return ["any"] if any?
      return ["= #{min}"] if min.to_s == max.to_s

      c = []
      c << "#{include_min ? ">=" : ">"} #{min}" if min
      c << "#{include_max ? "<=" : "<"} #{max}" if max
      c
    end

  end
end
PK*J[׺��WWWshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rbnu�[���# frozen_string_literal: true

module Bundler::PubGrub
  class VersionUnion
    attr_reader :ranges

    def self.normalize_ranges(ranges)
      ranges = ranges.flat_map do |range|
        range.ranges
      end

      ranges.reject!(&:empty?)

      return [] if ranges.empty?

      mins, ranges = ranges.partition { |r| !r.min }
      original_ranges = mins + ranges.sort_by { |r| [r.min, r.include_min ? 0 : 1] }
      ranges = [original_ranges.shift]
      original_ranges.each do |range|
        if ranges.last.contiguous_to?(range)
          ranges << ranges.pop.span(range)
        else
          ranges << range
        end
      end

      ranges
    end

    def self.union(ranges, normalize: true)
      ranges = normalize_ranges(ranges) if normalize

      if ranges.size == 0
        VersionRange.empty
      elsif ranges.size == 1
        ranges[0]
      else
        new(ranges)
      end
    end

    def initialize(ranges)
      raise ArgumentError unless ranges.all? { |r| r.instance_of?(VersionRange) }
      @ranges = ranges
    end

    def hash
      ranges.hash
    end

    def eql?(other)
      ranges.eql?(other.ranges)
    end

    def include?(version)
      !!ranges.bsearch {|r| r.compare_version(version) }
    end

    def select_versions(all_versions)
      versions = []
      ranges.inject(all_versions) do |acc, range|
        _, matching, higher = range.partition_versions(acc)
        versions.concat matching
        higher
      end
      versions
    end

    def intersects?(other)
      my_ranges = ranges.dup
      other_ranges = other.ranges.dup

      my_range = my_ranges.shift
      other_range = other_ranges.shift
      while my_range && other_range
        if my_range.intersects?(other_range)
          return true
        end

        if !my_range.max || other_range.empty? || (other_range.max && other_range.max < my_range.max)
          other_range = other_ranges.shift
        else
          my_range = my_ranges.shift
        end
      end
    end
    alias_method :allows_any?, :intersects?

    def allows_all?(other)
      my_ranges = ranges.dup

      my_range = my_ranges.shift

      other.ranges.all? do |other_range|
        while my_range
          break if my_range.allows_all?(other_range)
          my_range = my_ranges.shift
        end

        !!my_range
      end
    end

    def empty?
      false
    end

    def any?
      false
    end

    def intersect(other)
      my_ranges = ranges.dup
      other_ranges = other.ranges.dup
      new_ranges = []

      my_range = my_ranges.shift
      other_range = other_ranges.shift
      while my_range && other_range
        new_ranges << my_range.intersect(other_range)

        if !my_range.max || other_range.empty? || (other_range.max && other_range.max < my_range.max)
          other_range = other_ranges.shift
        else
          my_range = my_ranges.shift
        end
      end
      new_ranges.reject!(&:empty?)
      VersionUnion.union(new_ranges, normalize: false)
    end

    def upper_invert
      ranges.last.upper_invert
    end

    def invert
      ranges.map(&:invert).inject(:intersect)
    end

    def union(other)
      VersionUnion.union([self, other])
    end

    def to_s
      output = []

      ranges = self.ranges.dup
      while !ranges.empty?
        ne = []
        range = ranges.shift
        while !ranges.empty? && ranges[0].min.to_s == range.max.to_s
          ne << range.max
          range = range.span(ranges.shift)
        end

        ne.map! {|x| "!= #{x}" }
        if ne.empty?
          output << range.to_s
        elsif range.any?
          output << ne.join(', ')
        else
          output << "#{range}, #{ne.join(', ')}"
        end
      end

      output.join(" OR ")
    end

    def inspect
      "#<#{self.class} #{to_s}>"
    end

    def ==(other)
      self.class == other.class &&
        self.ranges == other.ranges
    end
  end
end
PK*J[�FXXXXshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rbnu�[���module Bundler::PubGrub
  class FailureWriter
    def initialize(root)
      @root = root

      # { Incompatibility => Integer }
      @derivations = {}

      # [ [ String, Integer or nil ] ]
      @lines = []

      # { Incompatibility => Integer }
      @line_numbers = {}

      count_derivations(root)
    end

    def write
      return @root.to_s unless @root.conflict?

      visit(@root)

      padding = @line_numbers.empty? ? 0 : "(#{@line_numbers.values.last}) ".length

      @lines.map do |message, number|
        next "" if message.empty?

        lead = number ? "(#{number}) " : ""
        lead = lead.ljust(padding)
        message = message.gsub("\n", "\n" + " " * (padding + 2))
        "#{lead}#{message}"
      end.join("\n")
    end

    private

    def write_line(incompatibility, message, numbered:)
      if numbered
        number = @line_numbers.length + 1
        @line_numbers[incompatibility] = number
      end

      @lines << [message, number]
    end

    def visit(incompatibility, conclusion: false)
      raise unless incompatibility.conflict?

      numbered = conclusion || @derivations[incompatibility] > 1;
      conjunction = conclusion || incompatibility == @root ? "So," : "And"

      cause = incompatibility.cause

      if cause.conflict.conflict? && cause.other.conflict?
        conflict_line = @line_numbers[cause.conflict]
        other_line = @line_numbers[cause.other]

        if conflict_line && other_line
          write_line(
            incompatibility,
            "Because #{cause.conflict} (#{conflict_line})\nand #{cause.other} (#{other_line}),\n#{incompatibility}.",
            numbered: numbered
          )
        elsif conflict_line || other_line
          with_line    = conflict_line ? cause.conflict : cause.other
          without_line = conflict_line ? cause.other : cause.conflict
          line = @line_numbers[with_line]

          visit(without_line);
          write_line(
            incompatibility,
            "#{conjunction} because #{with_line} (#{line}),\n#{incompatibility}.",
            numbered: numbered
          )
        else
          single_line_conflict = single_line?(cause.conflict.cause)
          single_line_other    = single_line?(cause.other.cause)

          if single_line_conflict || single_line_other
            first  = single_line_other ? cause.conflict : cause.other
            second = single_line_other ? cause.other : cause.conflict
            visit(first)
            visit(second)
            write_line(
              incompatibility,
              "Thus, #{incompatibility}.",
              numbered: numbered
            )
          else
            visit(cause.conflict, conclusion: true)
            @lines << ["", nil]
            visit(cause.other)

            write_line(
              incompatibility,
              "#{conjunction} because #{cause.conflict} (#{@line_numbers[cause.conflict]}),\n#{incompatibility}.",
              numbered: numbered
            )
          end
        end
      elsif cause.conflict.conflict? || cause.other.conflict?
        derived = cause.conflict.conflict? ? cause.conflict : cause.other
        ext     = cause.conflict.conflict? ? cause.other : cause.conflict

        derived_line = @line_numbers[derived]
        if derived_line
          write_line(
            incompatibility,
            "Because #{ext}\nand #{derived} (#{derived_line}),\n#{incompatibility}.",
            numbered: numbered
          )
        elsif collapsible?(derived)
          derived_cause = derived.cause
          if derived_cause.conflict.conflict?
            collapsed_derived = derived_cause.conflict
            collapsed_ext = derived_cause.other
          else
            collapsed_derived = derived_cause.other
            collapsed_ext = derived_cause.conflict
          end

          visit(collapsed_derived)

          write_line(
            incompatibility,
            "#{conjunction} because #{collapsed_ext}\nand #{ext},\n#{incompatibility}.",
            numbered: numbered
          )
        else
          visit(derived)
          write_line(
            incompatibility,
            "#{conjunction} because #{ext},\n#{incompatibility}.",
            numbered: numbered
          )
        end
      else
        write_line(
          incompatibility,
          "Because #{cause.conflict}\nand #{cause.other},\n#{incompatibility}.",
          numbered: numbered
        )
      end
    end

    def single_line?(cause)
      !cause.conflict.conflict? && !cause.other.conflict?
    end

    def collapsible?(incompatibility)
      return false if @derivations[incompatibility] > 1

      cause = incompatibility.cause
      # If incompatibility is derived from two derived incompatibilities,
      # there are too many transitive causes to display concisely.
      return false if cause.conflict.conflict? && cause.other.conflict?

      # If incompatibility is derived from two external incompatibilities, it
      # tends to be confusing to collapse it.
      return false unless cause.conflict.conflict? || cause.other.conflict?

      # If incompatibility's internal cause is numbered, collapsing it would
      # get too noisy.
      complex = cause.conflict.conflict? ? cause.conflict : cause.other

      !@line_numbers.has_key?(complex)
    end

    def count_derivations(incompatibility)
      if @derivations.has_key?(incompatibility)
        @derivations[incompatibility] += 1
      else
        @derivations[incompatibility] = 1
        if incompatibility.conflict?
          cause = incompatibility.cause
          count_derivations(cause.conflict)
          count_derivations(cause.other)
        end
      end
    end
  end
end
PK*J[�t��00Qshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rbnu�[���module Bundler::PubGrub
  VERSION = "0.5.0"
end
PK*J[�^��	�	Nshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rbnu�[���module Bundler::PubGrub
  class Term
    attr_reader :package, :constraint, :positive

    def initialize(constraint, positive)
      @constraint = constraint
      @package = @constraint.package
      @positive = positive
    end

    def to_s(allow_every: false)
      if positive
        @constraint.to_s(allow_every: allow_every)
      else
        "not #{@constraint}"
      end
    end

    def hash
      constraint.hash ^ positive.hash
    end

    def eql?(other)
      positive == other.positive &&
        constraint.eql?(other.constraint)
    end

    def invert
      self.class.new(@constraint, !@positive)
    end
    alias_method :inverse, :invert

    def intersect(other)
      raise ArgumentError, "packages must match" if package != other.package

      if positive? && other.positive?
        self.class.new(constraint.intersect(other.constraint), true)
      elsif negative? && other.negative?
        self.class.new(constraint.union(other.constraint), false)
      else
        positive = positive? ? self : other
        negative = negative? ? self : other
        self.class.new(positive.constraint.intersect(negative.constraint.invert), true)
      end
    end

    def difference(other)
      intersect(other.invert)
    end

    def relation(other)
      if positive? && other.positive?
        constraint.relation(other.constraint)
      elsif negative? && other.positive?
        if constraint.allows_all?(other.constraint)
          :disjoint
        else
          :overlap
        end
      elsif positive? && other.negative?
        if !other.constraint.allows_any?(constraint)
          :subset
        elsif other.constraint.allows_all?(constraint)
          :disjoint
        else
          :overlap
        end
      elsif negative? && other.negative?
        if constraint.allows_all?(other.constraint)
          :subset
        else
          :overlap
        end
      else
        raise
      end
    end

    def normalized_constraint
      @normalized_constraint ||= positive ? constraint : constraint.invert
    end

    def satisfies?(other)
      raise ArgumentError, "packages must match" unless package == other.package

      relation(other) == :subset
    end

    def positive?
      @positive
    end

    def negative?
      !positive?
    end

    def empty?
      @empty ||= normalized_constraint.empty?
    end

    def inspect
      "#<#{self.class} #{self}>"
    end
  end
end
PK*J[8K'��
�
Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rbnu�[���require_relative 'assignment'

module Bundler::PubGrub
  class PartialSolution
    attr_reader :assignments, :decisions
    attr_reader :attempted_solutions

    def initialize
      reset!

      @attempted_solutions = 1
      @backtracking = false
    end

    def decision_level
      @decisions.length
    end

    def relation(term)
      package = term.package
      return :overlap if !@terms.key?(package)

      @relation_cache[package][term] ||=
        @terms[package].relation(term)
    end

    def satisfies?(term)
      relation(term) == :subset
    end

    def derive(term, cause)
      add_assignment(Assignment.new(term, cause, decision_level, assignments.length))
    end

    def satisfier(term)
      assignment =
        @assignments_by[term.package].bsearch do |assignment_by|
          @cumulative_assignments[assignment_by].satisfies?(term)
        end

      assignment || raise("#{term} unsatisfied")
    end

    # A list of unsatisfied terms
    def unsatisfied
      @required.keys.reject do |package|
        @decisions.key?(package)
      end.map do |package|
        @terms[package]
      end
    end

    def decide(package, version)
      @attempted_solutions += 1 if @backtracking
      @backtracking = false;

      decisions[package] = version
      assignment = Assignment.decision(package, version, decision_level, assignments.length)
      add_assignment(assignment)
    end

    def backtrack(previous_level)
      @backtracking = true

      new_assignments = assignments.select do |assignment|
        assignment.decision_level <= previous_level
      end

      new_decisions = Hash[decisions.first(previous_level)]

      reset!

      @decisions = new_decisions

      new_assignments.each do |assignment|
        add_assignment(assignment)
      end
    end

    private

    def reset!
      # { Array<Assignment> }
      @assignments = []

      # { Package => Array<Assignment> }
      @assignments_by = Hash.new { |h,k| h[k] = [] }
      @cumulative_assignments = {}.compare_by_identity

      # { Package => Package::Version }
      @decisions = {}

      # { Package => Term }
      @terms = {}
      @relation_cache = Hash.new { |h,k| h[k] = {} }

      # { Package => Boolean }
      @required = {}
    end

    def add_assignment(assignment)
      term = assignment.term
      package = term.package

      @assignments << assignment
      @assignments_by[package] << assignment

      @required[package] = true if term.positive?

      if @terms.key?(package)
        old_term = @terms[package]
        @terms[package] = old_term.intersect(term)
      else
        @terms[package] = term
      end
      @relation_cache[package].clear

      @cumulative_assignments[assignment] = @terms[package]
    end
  end
end
PK*J[���bXXQshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rbnu�[���# frozen_string_literal: true

module Bundler::PubGrub
  class Package

    attr_reader :name

    def initialize(name)
      @name = name
    end

    def inspect
      "#<#{self.class} #{name.inspect}>"
    end

    def <=>(other)
      name <=> other.name
    end

    ROOT = Package.new(:root)
    ROOT_VERSION = 0

    def self.root
      ROOT
    end

    def self.root_version
      ROOT_VERSION
    end

    def self.root?(package)
      if package.respond_to?(:root?)
        package.root?
      else
        package == root
      end
    end

    def to_s
      name.to_s
    end
  end
end
PK*J[�g�"
"
\share/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rbnu�[���require_relative 'version_range'

module Bundler::PubGrub
  class VersionConstraint
    attr_reader :package, :range

    # @param package [Bundler::PubGrub::Package]
    # @param range [Bundler::PubGrub::VersionRange]
    def initialize(package, range: nil)
      @package = package
      @range = range
    end

    def hash
      package.hash ^ range.hash
    end

    def ==(other)
      package == other.package &&
        range == other.range
    end

    def eql?(other)
      package.eql?(other.package) &&
        range.eql?(other.range)
    end

    class << self
      def exact(package, version)
        range = VersionRange.new(min: version, max: version, include_min: true, include_max: true)
        new(package, range: range)
      end

      def any(package)
        new(package, range: VersionRange.any)
      end

      def empty(package)
        new(package, range: VersionRange.empty)
      end
    end

    def intersect(other)
      unless package == other.package
        raise ArgumentError, "Can only intersect between VersionConstraint of the same package"
      end

      self.class.new(package, range: range.intersect(other.range))
    end

    def union(other)
      unless package == other.package
        raise ArgumentError, "Can only intersect between VersionConstraint of the same package"
      end

      self.class.new(package, range: range.union(other.range))
    end

    def invert
      new_range = range.invert
      self.class.new(package, range: new_range)
    end

    def difference(other)
      intersect(other.invert)
    end

    def allows_all?(other)
      range.allows_all?(other.range)
    end

    def allows_any?(other)
      range.intersects?(other.range)
    end

    def subset?(other)
      other.allows_all?(self)
    end

    def overlap?(other)
      other.allows_any?(self)
    end

    def disjoint?(other)
      !overlap?(other)
    end

    def relation(other)
      if subset?(other)
        :subset
      elsif overlap?(other)
        :overlap
      else
        :disjoint
      end
    end

    def to_s(allow_every: false)
      if Package.root?(package)
        package.to_s
      elsif allow_every && any?
        "every version of #{package}"
      else
        "#{package} #{constraint_string}"
      end
    end

    def constraint_string
      if any?
        ">= 0"
      else
        range.to_s
      end
    end

    def empty?
      range.empty?
    end

    # Does this match every version of the package
    def any?
      range.any?
    end

    def inspect
      "#<#{self.class} #{self}>"
    end
  end
end
PK*J[�N�Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rbnu�[���module Bundler::PubGrub
  class Assignment
    attr_reader :term, :cause, :decision_level, :index
    def initialize(term, cause, decision_level, index)
      @term = term
      @cause = cause
      @decision_level = decision_level
      @index = index
    end

    def self.decision(package, version, decision_level, index)
      term = Term.new(VersionConstraint.exact(package, version), true)
      new(term, :decision, decision_level, index)
    end

    def decision?
      cause == :decision
    end
  end
end
PK*J[��9	]]Rshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rbnu�[���module Bundler::PubGrub
  class Strategy
    def initialize(source)
      @source = source

      @root_package = Package.root
      @root_version = Package.root_version

      @version_indexes = Hash.new do |h,k|
        if k == @root_package
          h[k] = { @root_version => 0 }
        else
          h[k] = @source.all_versions_for(k).each.with_index.to_h
        end
      end
    end

    def next_package_and_version(unsatisfied)
      package, range = next_term_to_try_from(unsatisfied)

      [package, most_preferred_version_of(package, range)]
    end

    private

    def most_preferred_version_of(package, range)
      versions = @source.versions_for(package, range)

      indexes = @version_indexes[package]
      versions.min_by { |version| indexes[version] }
    end

    def next_term_to_try_from(unsatisfied)
      unsatisfied.min_by do |package, range|
        matching_versions = @source.versions_for(package, range)
        higher_versions = @source.versions_for(package, range.upper_invert)

        [matching_versions.count <= 1 ? 0 : 1, higher_versions.count]
      end
    end
  end
end
PK*J[ʒ���Wshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rbnu�[���require_relative 'failure_writer'

module Bundler::PubGrub
  class SolveFailure < StandardError
    attr_reader :incompatibility

    def initialize(incompatibility)
      @incompatibility = incompatibility
    end

    def to_s
      "Could not find compatible versions\n\n#{explanation}"
    end

    def explanation
      @explanation ||= FailureWriter.new(@incompatibility).write
    end
  end
end
PK*J[��++^share/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rbnu�[���require_relative 'version_constraint'
require_relative 'incompatibility'

module Bundler::PubGrub
  # Types:
  #
  # Where possible, Bundler::PubGrub will accept user-defined types, so long as they quack.
  #
  # ## "Package":
  #
  # This class will be used to represent the various packages being solved for.
  # .to_s will be called when displaying errors and debugging info, it should
  # probably return the package's name.
  # It must also have a reasonable definition of #== and #hash
  #
  # Example classes: String ("rails")
  #
  #
  # ## "Version":
  #
  # This class will be used to represent a single version number.
  #
  # Versions don't need to store their associated package, however they will
  # only be compared against other versions of the same package.
  #
  # It must be Comparible (and implement <=> reasonably)
  #
  # Example classes: Gem::Version, Integer
  #
  #
  # ## "Dependency"
  #
  # This class represents the requirement one package has on another. It is
  # returned by dependencies_for(package, version) and will be passed to
  # parse_dependency to convert it to a format Bundler::PubGrub understands.
  #
  # It must also have a reasonable definition of #==
  #
  # Example classes: String ("~> 1.0"), Gem::Requirement
  #
  class BasicPackageSource
    # Override me!
    #
    # This is called per package to find all possible versions of a package.
    #
    # It is called at most once per-package
    #
    # Returns: Array of versions for a package, in preferred order of selection
    def all_versions_for(package)
      raise NotImplementedError
    end

    # Override me!
    #
    # Returns: Hash in the form of { package => requirement, ... }
    def dependencies_for(package, version)
      raise NotImplementedError
    end

    # Override me!
    #
    # Convert a (user-defined) dependency into a format Bundler::PubGrub understands.
    #
    # Package is passed to this method but for many implementations is not
    # needed.
    #
    # Returns: either a Bundler::PubGrub::VersionRange, Bundler::PubGrub::VersionUnion, or a
    #   Bundler::PubGrub::VersionConstraint
    def parse_dependency(package, dependency)
      raise NotImplementedError
    end

    # Override me!
    #
    # If not overridden, this will call dependencies_for with the root package.
    #
    # Returns: Hash in the form of { package => requirement, ... } (see dependencies_for)
    def root_dependencies
      dependencies_for(@root_package, @root_version)
    end

    def initialize
      @root_package = Package.root
      @root_version = Package.root_version

      @sorted_versions = Hash.new do |h,k|
        if k == @root_package
          h[k] = [@root_version]
        else
          h[k] = all_versions_for(k).sort
        end
      end

      @cached_dependencies = Hash.new do |packages, package|
        if package == @root_package
          packages[package] = {
            @root_version => root_dependencies
          }
        else
          packages[package] = Hash.new do |versions, version|
            versions[version] = dependencies_for(package, version)
          end
        end
      end
    end

    def versions_for(package, range=VersionRange.any)
      range.select_versions(@sorted_versions[package])
    end

    def no_versions_incompatibility_for(_package, unsatisfied_term)
      cause = Incompatibility::NoVersions.new(unsatisfied_term)

      Incompatibility.new([unsatisfied_term], cause: cause)
    end

    def incompatibilities_for(package, version)
      package_deps = @cached_dependencies[package]
      sorted_versions = @sorted_versions[package]
      package_deps[version].map do |dep_package, dep_constraint_name|
        low = high = sorted_versions.index(version)

        # find version low such that all >= low share the same dep
        while low > 0 &&
            package_deps[sorted_versions[low - 1]][dep_package] == dep_constraint_name
          low -= 1
        end
        low =
          if low == 0
            nil
          else
            sorted_versions[low]
          end

        # find version high such that all < high share the same dep
        while high < sorted_versions.length &&
            package_deps[sorted_versions[high]][dep_package] == dep_constraint_name
          high += 1
        end
        high =
          if high == sorted_versions.length
            nil
          else
            sorted_versions[high]
          end

        range = VersionRange.new(min: low, max: high, include_min: !low.nil?)

        self_constraint = VersionConstraint.new(package, range: range)

        if !@packages.include?(dep_package)
          # no such package -> this version is invalid
        end

        dep_constraint = parse_dependency(dep_package, dep_constraint_name)
        if !dep_constraint
          # falsey indicates this dependency was invalid
          cause = Bundler::PubGrub::Incompatibility::InvalidDependency.new(dep_package, dep_constraint_name)
          return [Incompatibility.new([Term.new(self_constraint, true)], cause: cause)]
        elsif !dep_constraint.is_a?(VersionConstraint)
          # Upgrade range/union to VersionConstraint
          dep_constraint = VersionConstraint.new(dep_package, range: dep_constraint)
        end

        Incompatibility.new([Term.new(self_constraint, true), Term.new(dep_constraint, false)], cause: :dependency)
      end
    end
  end
end
PK*J[;$�(��_share/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rbnu�[���require_relative 'package'
require_relative 'rubygems'
require_relative 'version_constraint'
require_relative 'incompatibility'
require_relative 'basic_package_source'

module Bundler::PubGrub
  class StaticPackageSource < BasicPackageSource
    class DSL
      def initialize(packages, root_deps)
        @packages = packages
        @root_deps = root_deps
      end

      def root(deps:)
        @root_deps.update(deps)
      end

      def add(name, version, deps: {})
        version = Gem::Version.new(version)
        @packages[name] ||= {}
        raise ArgumentError, "#{name} #{version} declared twice" if @packages[name].key?(version)
        @packages[name][version] = clean_deps(name, version, deps)
      end

      private

      # Exclude redundant self-referencing dependencies
      def clean_deps(name, version, deps)
        deps.reject {|dep_name, req| name == dep_name && Bundler::PubGrub::RubyGems.parse_range(req).include?(version) }
      end
    end

    def initialize
      @root_deps = {}
      @packages = {}

      yield DSL.new(@packages, @root_deps)

      super()
    end

    def all_versions_for(package)
      @packages[package].keys
    end

    def root_dependencies
      @root_deps
    end

    def dependencies_for(package, version)
      @packages[package][version]
    end

    def parse_dependency(package, dependency)
      return false unless @packages.key?(package)

      Bundler::PubGrub::RubyGems.parse_constraint(package, dependency)
    end
  end
end
PK*J[&�pHHYshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rbnu�[���module Bundler::PubGrub
  class Incompatibility
    ConflictCause = Struct.new(:incompatibility, :satisfier) do
      alias_method :conflict, :incompatibility
      alias_method :other, :satisfier
    end

    InvalidDependency = Struct.new(:package, :constraint) do
    end

    NoVersions = Struct.new(:constraint) do
    end

    attr_reader :terms, :cause

    def initialize(terms, cause:, custom_explanation: nil)
      @cause = cause
      @terms = cleanup_terms(terms)
      @custom_explanation = custom_explanation

      if cause == :dependency && @terms.length != 2
        raise ArgumentError, "a dependency Incompatibility must have exactly two terms. Got #{@terms.inspect}"
      end
    end

    def hash
      cause.hash ^ terms.hash
    end

    def eql?(other)
      cause.eql?(other.cause) &&
        terms.eql?(other.terms)
    end

    def failure?
      terms.empty? || (terms.length == 1 && Package.root?(terms[0].package) && terms[0].positive?)
    end

    def conflict?
      ConflictCause === cause
    end

    # Returns all external incompatibilities in this incompatibility's
    # derivation graph
    def external_incompatibilities
      if conflict?
        [
          cause.conflict,
          cause.other
        ].flat_map(&:external_incompatibilities)
      else
        [this]
      end
    end

    def to_s
      return @custom_explanation if @custom_explanation

      case cause
      when :root
        "(root dependency)"
      when :dependency
        "#{terms[0].to_s(allow_every: true)} depends on #{terms[1].invert}"
      when Bundler::PubGrub::Incompatibility::InvalidDependency
        "#{terms[0].to_s(allow_every: true)} depends on unknown package #{cause.package}"
      when Bundler::PubGrub::Incompatibility::NoVersions
        "no versions satisfy #{cause.constraint}"
      when Bundler::PubGrub::Incompatibility::ConflictCause
        if failure?
          "version solving has failed"
        elsif terms.length == 1
          term = terms[0]
          if term.positive?
            if term.constraint.any?
              "#{term.package} cannot be used"
            else
              "#{term.to_s(allow_every: true)} cannot be used"
            end
          else
            "#{term.invert} is required"
          end
        else
          if terms.all?(&:positive?)
            if terms.length == 2
              "#{terms[0].to_s(allow_every: true)} is incompatible with #{terms[1]}"
            else
              "one of #{terms.map(&:to_s).join(" or ")} must be false"
            end
          elsif terms.all?(&:negative?)
            if terms.length == 2
              "either #{terms[0].invert} or #{terms[1].invert}"
            else
              "one of #{terms.map(&:invert).join(" or ")} must be true";
            end
          else
            positive = terms.select(&:positive?)
            negative = terms.select(&:negative?).map(&:invert)

            if positive.length == 1
              "#{positive[0].to_s(allow_every: true)} requires #{negative.join(" or ")}"
            else
              "if #{positive.join(" and ")} then #{negative.join(" or ")}"
            end
          end
        end
      else
        raise "unhandled cause: #{cause.inspect}"
      end
    end

    def inspect
      "#<#{self.class} #{to_s}>"
    end

    def pretty_print(q)
      q.group 2, "#<#{self.class}", ">" do
        q.breakable
        q.text to_s

        q.breakable
        q.text " caused by "
        q.pp @cause
      end
    end

    private

    def cleanup_terms(terms)
      terms.each do |term|
        raise "#{term.inspect} must be a term" unless term.is_a?(Term)
      end

      if terms.length != 1 && ConflictCause === cause
        terms = terms.reject do |term|
          term.positive? && Package.root?(term.package)
        end
      end

      # Optimized simple cases
      return terms if terms.length <= 1
      return terms if terms.length == 2 && terms[0].package != terms[1].package

      terms.group_by(&:package).map do |package, common_terms|
        common_terms.inject do |acc, term|
          acc.intersect(term)
        end
      end
    end
  end
end
PK*J[Sط"Ishare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub.rbnu�[���require_relative "pub_grub/package"
require_relative "pub_grub/static_package_source"
require_relative "pub_grub/term"
require_relative "pub_grub/version_range"
require_relative "pub_grub/version_constraint"
require_relative "pub_grub/version_union"
require_relative "pub_grub/version_solver"
require_relative "pub_grub/incompatibility"
require_relative 'pub_grub/solve_failure'
require_relative 'pub_grub/failure_writer'
require_relative 'pub_grub/version'

module Bundler::PubGrub
  class << self
    attr_writer :logger

    def logger
      @logger || default_logger
    end

    private

    def default_logger
      require "logger"

      logger = ::Logger.new(STDERR)
      logger.level = $DEBUG ? ::Logger::DEBUG : ::Logger::WARN
      @logger = logger
    end
  end
end
PK*J[9pۛ:�:Cshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/tsort/lib/tsort.rbnu�[���# frozen_string_literal: true

#--
# tsort.rb - provides a module for topological sorting and strongly connected components.
#++
#

#
# Bundler::TSort implements topological sorting using Tarjan's algorithm for
# strongly connected components.
#
# Bundler::TSort is designed to be able to be used with any object which can be
# interpreted as a directed graph.
#
# Bundler::TSort requires two methods to interpret an object as a graph,
# tsort_each_node and tsort_each_child.
#
# * tsort_each_node is used to iterate for all nodes over a graph.
# * tsort_each_child is used to iterate for child nodes of a given node.
#
# The equality of nodes are defined by eql? and hash since
# Bundler::TSort uses Hash internally.
#
# == A Simple Example
#
# The following example demonstrates how to mix the Bundler::TSort module into an
# existing class (in this case, Hash). Here, we're treating each key in
# the hash as a node in the graph, and so we simply alias the required
# #tsort_each_node method to Hash's #each_key method. For each key in the
# hash, the associated value is an array of the node's child nodes. This
# choice in turn leads to our implementation of the required #tsort_each_child
# method, which fetches the array of child nodes and then iterates over that
# array using the user-supplied block.
#
#   require 'bundler/vendor/tsort/lib/tsort'
#
#   class Hash
#     include Bundler::TSort
#     alias tsort_each_node each_key
#     def tsort_each_child(node, &block)
#       fetch(node).each(&block)
#     end
#   end
#
#   {1=>[2, 3], 2=>[3], 3=>[], 4=>[]}.tsort
#   #=> [3, 2, 1, 4]
#
#   {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}.strongly_connected_components
#   #=> [[4], [2, 3], [1]]
#
# == A More Realistic Example
#
# A very simple `make' like tool can be implemented as follows:
#
#   require 'bundler/vendor/tsort/lib/tsort'
#
#   class Make
#     def initialize
#       @dep = {}
#       @dep.default = []
#     end
#
#     def rule(outputs, inputs=[], &block)
#       triple = [outputs, inputs, block]
#       outputs.each {|f| @dep[f] = [triple]}
#       @dep[triple] = inputs
#     end
#
#     def build(target)
#       each_strongly_connected_component_from(target) {|ns|
#         if ns.length != 1
#           fs = ns.delete_if {|n| Array === n}
#           raise Bundler::TSort::Cyclic.new("cyclic dependencies: #{fs.join ', '}")
#         end
#         n = ns.first
#         if Array === n
#           outputs, inputs, block = n
#           inputs_time = inputs.map {|f| File.mtime f}.max
#           begin
#             outputs_time = outputs.map {|f| File.mtime f}.min
#           rescue Errno::ENOENT
#             outputs_time = nil
#           end
#           if outputs_time == nil ||
#              inputs_time != nil && outputs_time <= inputs_time
#             sleep 1 if inputs_time != nil && inputs_time.to_i == Time.now.to_i
#             block.call
#           end
#         end
#       }
#     end
#
#     def tsort_each_child(node, &block)
#       @dep[node].each(&block)
#     end
#     include Bundler::TSort
#   end
#
#   def command(arg)
#     print arg, "\n"
#     system arg
#   end
#
#   m = Make.new
#   m.rule(%w[t1]) { command 'date > t1' }
#   m.rule(%w[t2]) { command 'date > t2' }
#   m.rule(%w[t3]) { command 'date > t3' }
#   m.rule(%w[t4], %w[t1 t3]) { command 'cat t1 t3 > t4' }
#   m.rule(%w[t5], %w[t4 t2]) { command 'cat t4 t2 > t5' }
#   m.build('t5')
#
# == Bugs
#
# * 'tsort.rb' is wrong name because this library uses
#   Tarjan's algorithm for strongly connected components.
#   Although 'strongly_connected_components.rb' is correct but too long.
#
# == References
#
# R. E. Tarjan, "Depth First Search and Linear Graph Algorithms",
# <em>SIAM Journal on Computing</em>, Vol. 1, No. 2, pp. 146-160, June 1972.
#

module Bundler::TSort

  VERSION = "0.2.0"

  class Cyclic < StandardError
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # If there is a cycle, Bundler::TSort::Cyclic is raised.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.tsort #=> [4, 2, 3, 1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.tsort # raises Bundler::TSort::Cyclic
  #
  def tsort
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.tsort(each_node, each_child)
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  # If there is a cycle, Bundler::TSort::Cyclic is raised.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.tsort(each_node, each_child) #=> [4, 2, 3, 1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.tsort(each_node, each_child) # raises Bundler::TSort::Cyclic
  #
  def self.tsort(each_node, each_child)
    tsort_each(each_node, each_child).to_a
  end

  # The iterator version of the #tsort method.
  # <tt><em>obj</em>.tsort_each</tt> is similar to <tt><em>obj</em>.tsort.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #tsort_each returns +nil+.
  # If there is a cycle, Bundler::TSort::Cyclic is raised.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.tsort_each {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def tsort_each(&block) # :yields: node
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.tsort_each(each_node, each_child, &block)
  end

  # The iterator version of the Bundler::TSort.tsort method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Bundler::TSort.tsort_each(each_node, each_child) {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def self.tsort_each(each_node, each_child) # :yields: node
    return to_enum(__method__, each_node, each_child) unless block_given?

    each_strongly_connected_component(each_node, each_child) {|component|
      if component.size == 1
        yield component.first
      else
        raise Cyclic.new("topological sort failed: #{component.inspect}")
      end
    }
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2], [3], [1]]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2, 3], [1]]
  #
  def strongly_connected_components
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.strongly_connected_components(each_node, each_child)
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2], [3], [1]]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2, 3], [1]]
  #
  def self.strongly_connected_components(each_node, each_child)
    each_strongly_connected_component(each_node, each_child).to_a
  end

  # The iterator version of the #strongly_connected_components method.
  # <tt><em>obj</em>.each_strongly_connected_component</tt> is similar to
  # <tt><em>obj</em>.strongly_connected_components.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #each_strongly_connected_component returns +nil+.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def each_strongly_connected_component(&block) # :yields: nodes
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.each_strongly_connected_component(each_node, each_child, &block)
  end

  # The iterator version of the Bundler::TSort.strongly_connected_components method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Bundler::TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Bundler::TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component(each_node, each_child) # :yields: nodes
    return to_enum(__method__, each_node, each_child) unless block_given?

    id_map = {}
    stack = []
    each_node.call {|node|
      unless id_map.include? node
        each_strongly_connected_component_from(node, each_child, id_map, stack) {|c|
          yield c
        }
      end
    }
    nil
  end

  # Iterates over strongly connected component in the subgraph reachable from
  # _node_.
  #
  # Return value is unspecified.
  #
  # #each_strongly_connected_component_from doesn't call #tsort_each_node.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #
  def each_strongly_connected_component_from(node, id_map={}, stack=[], &block) # :yields: nodes
    Bundler::TSort.each_strongly_connected_component_from(node, method(:tsort_each_child), id_map, stack, &block)
  end

  # Iterates over strongly connected components in a graph.
  # The graph is represented by _node_ and _each_child_.
  #
  # _node_ is the first node.
  # _each_child_ should have +call+ method which takes a node argument
  # and yields for each child node.
  #
  # Return value is unspecified.
  #
  # #Bundler::TSort.each_strongly_connected_component_from is a class method and
  # it doesn't need a class to represent a graph which includes Bundler::TSort.
  #
  #   graph = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_child = lambda {|n, &b| graph[n].each(&b) }
  #   Bundler::TSort.each_strongly_connected_component_from(1, each_child) {|scc|
  #     p scc
  #   }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component_from(node, each_child, id_map={}, stack=[]) # :yields: nodes
    return to_enum(__method__, node, each_child, id_map, stack) unless block_given?

    minimum_id = node_id = id_map[node] = id_map.size
    stack_length = stack.length
    stack << node

    each_child.call(node) {|child|
      if id_map.include? child
        child_id = id_map[child]
        minimum_id = child_id if child_id && child_id < minimum_id
      else
        sub_minimum_id =
          each_strongly_connected_component_from(child, each_child, id_map, stack) {|c|
            yield c
          }
        minimum_id = sub_minimum_id if sub_minimum_id < minimum_id
      end
    }

    if node_id == minimum_id
      component = stack.slice!(stack_length .. -1)
      component.each {|n| id_map[n] = nil}
      yield component
    end

    minimum_id
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_node is used to iterate for all nodes over a graph.
  #
  def tsort_each_node # :yields: node
    raise NotImplementedError.new
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_child is used to iterate for child nodes of _node_.
  #
  def tsort_each_child(node) # :yields: child
    raise NotImplementedError.new
  end
end
PK*J[��i	i	Qshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/securerandom/lib/securerandom.rbnu�[���# -*- coding: us-ascii -*-
# frozen_string_literal: true

require 'random/formatter'

# == Secure random number generator interface.
#
# This library is an interface to secure random number generators which are
# suitable for generating session keys in HTTP cookies, etc.
#
# You can use this library in your application by requiring it:
#
#   require 'bundler/vendor/securerandom/lib/securerandom'
#
# It supports the following secure random number generators:
#
# * openssl
# * /dev/urandom
# * Win32
#
# Bundler::SecureRandom is extended by the Random::Formatter module which
# defines the following methods:
#
# * alphanumeric
# * base64
# * choose
# * gen_random
# * hex
# * rand
# * random_bytes
# * random_number
# * urlsafe_base64
# * uuid
#
# These methods are usable as class methods of Bundler::SecureRandom such as
# +Bundler::SecureRandom.hex+.
#
# If a secure random number generator is not available,
# +NotImplementedError+ is raised.

module Bundler::SecureRandom

  # The version
  VERSION = "0.4.1"

  class << self
    # Returns a random binary string containing +size+ bytes.
    #
    # See Random.bytes
    def bytes(n)
      return gen_random(n)
    end

    # Compatibility methods for Ruby 3.2, we can remove this after dropping to support Ruby 3.2
    def alphanumeric(n = nil, chars: ALPHANUMERIC)
      n = 16 if n.nil?
      choose(chars, n)
    end if RUBY_VERSION < '3.3'

    private

    # :stopdoc:

    # Implementation using OpenSSL
    def gen_random_openssl(n)
      return OpenSSL::Random.random_bytes(n)
    end

    # Implementation using system random device
    def gen_random_urandom(n)
      ret = Random.urandom(n)
      unless ret
        raise NotImplementedError, "No random device"
      end
      unless ret.length == n
        raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes"
      end
      ret
    end

    begin
      # Check if Random.urandom is available
      Random.urandom(1)
      alias gen_random gen_random_urandom
    rescue RuntimeError
      begin
        require 'openssl'
      rescue NoMethodError
        raise NotImplementedError, "No random device"
      else
        alias gen_random gen_random_openssl
      end
    end

    # :startdoc:

    # Generate random data bytes for Random::Formatter
    public :gen_random
  end
end

Bundler::SecureRandom.extend(Random::Formatter)
PK*J[��-�VVqshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rbnu�[���class Gem::Net::HTTP::Persistent::TimedStackMulti < Bundler::ConnectionPool::TimedStack # :nodoc:

  ##
  # Returns a new hash that has arrays for keys
  #
  # Using a class method to limit the bindings referenced by the hash's
  # default_proc

  def self.hash_of_arrays # :nodoc:
    Hash.new { |h,k| h[k] = [] }
  end

  def initialize(size = 0, &block)
    super

    @enqueued = 0
    @ques = self.class.hash_of_arrays
    @lru = {}
    @key = :"connection_args-#{object_id}"
  end

  def empty?
    (@created - @enqueued) >= @max
  end

  def length
    @max - @created + @enqueued
  end

  private

  def connection_stored? options = {} # :nodoc:
    !@ques[options[:connection_args]].empty?
  end

  def fetch_connection options = {} # :nodoc:
    connection_args = options[:connection_args]

    @enqueued -= 1
    lru_update connection_args
    @ques[connection_args].pop
  end

  def lru_update connection_args # :nodoc:
    @lru.delete connection_args
    @lru[connection_args] = true
  end

  def shutdown_connections # :nodoc:
    @ques.each_key do |key|
      super connection_args: key
    end
  end

  def store_connection obj, options = {} # :nodoc:
    @ques[options[:connection_args]].push obj
    @enqueued += 1
  end

  def try_create options = {} # :nodoc:
    connection_args = options[:connection_args]

    if @created >= @max && @enqueued >= 1
      oldest, = @lru.first
      @lru.delete oldest
      @ques[oldest].pop

      @created -= 1
    end

    if @created < @max
      @created += 1
      lru_update connection_args
      return @create_block.call(connection_args)
    end
  end

end

PK*J[�X��ssdshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rbnu�[���class Gem::Net::HTTP::Persistent::Pool < Bundler::ConnectionPool # :nodoc:

  attr_reader :available # :nodoc:
  attr_reader :key # :nodoc:

  def initialize(options = {}, &block)
    super

    @available = Gem::Net::HTTP::Persistent::TimedStackMulti.new(@size, &block)
    @key = "current-#{@available.object_id}"
  end

  def checkin net_http_args
    if net_http_args.is_a?(Hash) && net_http_args.size == 1 && net_http_args[:force]
      # Bundler::ConnectionPool 2.4+ calls `checkin(force: true)` after fork.
      # When this happens, we should remove all connections from Thread.current
      if stacks = Thread.current[@key]
        stacks.each do |http_args, connections|
          connections.each do |conn|
            @available.push conn, connection_args: http_args
          end
          connections.clear
        end
      end
    else
      stack = Thread.current[@key][net_http_args] ||= []

      raise Bundler::ConnectionPool::Error, 'no connections are checked out' if
        stack.empty?

      conn = stack.pop

      if stack.empty?
        @available.push conn, connection_args: net_http_args

        Thread.current[@key].delete(net_http_args)
        Thread.current[@key] = nil if Thread.current[@key].empty?
      end
    end
    nil
  end

  def checkout net_http_args
    stacks = Thread.current[@key] ||= {}
    stack  = stacks[net_http_args] ||= []

    if stack.empty? then
      conn = @available.pop connection_args: net_http_args
    else
      conn = stack.last
    end

    stack.push conn

    conn
  end

  def shutdown
    Thread.current[@key] = nil
    super
  end
end

require_relative 'timed_stack_multi'

PK*J[���jshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rbnu�[���##
# A Gem::Net::HTTP connection wrapper that holds extra information for managing the
# connection's lifetime.

class Gem::Net::HTTP::Persistent::Connection # :nodoc:

  attr_accessor :http

  attr_accessor :last_use

  attr_accessor :requests

  attr_accessor :ssl_generation

  def initialize http_class, http_args, ssl_generation
    @http           = http_class.new(*http_args)
    @ssl_generation = ssl_generation

    reset
  end

  def finish
    @http.finish
  rescue IOError
  ensure
    reset
  end
  alias_method :close, :finish

  def reset
    @last_use = Gem::Net::HTTP::Persistent::EPOCH
    @requests = 0
  end

  def ressl ssl_generation
    @ssl_generation = ssl_generation

    finish
  end

end
PK*J[9���WqWq_share/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rbnu�[���require_relative '../../../../../vendored_net_http'
require_relative '../../../../../vendored_uri'
require 'cgi' # for escaping
require_relative '../../../../connection_pool/lib/connection_pool'

autoload :OpenSSL, 'openssl'

##
# Persistent connections for Gem::Net::HTTP
#
# Gem::Net::HTTP::Persistent maintains persistent connections across all the
# servers you wish to talk to.  For each host:port you communicate with a
# single persistent connection is created.
#
# Connections will be shared across threads through a connection pool to
# increase reuse of connections.
#
# You can shut down any remaining HTTP connections when done by calling
# #shutdown.
#
# Example:
#
#   require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
#
#   uri = Gem::URI 'http://example.com/awesome/web/service'
#
#   http = Gem::Net::HTTP::Persistent.new
#
#   # perform a GET
#   response = http.request uri
#
#   # or
#
#   get = Gem::Net::HTTP::Get.new uri.request_uri
#   response = http.request get
#
#   # create a POST
#   post_uri = uri + 'create'
#   post = Gem::Net::HTTP::Post.new post_uri.path
#   post.set_form_data 'some' => 'cool data'
#
#   # perform the POST, the Gem::URI is always required
#   response http.request post_uri, post
#
# Note that for GET, HEAD and other requests that do not have a body you want
# to use Gem::URI#request_uri not Gem::URI#path.  The request_uri contains the query
# params which are sent in the body for other requests.
#
# == TLS/SSL
#
# TLS connections are automatically created depending upon the scheme of the
# Gem::URI.  TLS connections are automatically verified against the default
# certificate store for your computer.  You can override this by changing
# verify_mode or by specifying an alternate cert_store.
#
# Here are the TLS settings, see the individual methods for documentation:
#
# #certificate        :: This client's certificate
# #ca_file            :: The certificate-authorities
# #ca_path            :: Directory with certificate-authorities
# #cert_store         :: An SSL certificate store
# #ciphers            :: List of SSl ciphers allowed
# #private_key        :: The client's SSL private key
# #reuse_ssl_sessions :: Reuse a previously opened SSL session for a new
#                        connection
# #ssl_timeout        :: Session lifetime
# #ssl_version        :: Which specific SSL version to use
# #verify_callback    :: For server certificate verification
# #verify_depth       :: Depth of certificate verification
# #verify_mode        :: How connections should be verified
# #verify_hostname    :: Use hostname verification for server certificate
#                        during the handshake
#
# == Proxies
#
# A proxy can be set through #proxy= or at initialization time by providing a
# second argument to ::new.  The proxy may be the Gem::URI of the proxy server or
# <code>:ENV</code> which will consult environment variables.
#
# See #proxy= and #proxy_from_env for details.
#
# == Headers
#
# Headers may be specified for use in every request.  #headers are appended to
# any headers on the request.  #override_headers replace existing headers on
# the request.
#
# The difference between the two can be seen in setting the User-Agent.  Using
# <code>http.headers['User-Agent'] = 'MyUserAgent'</code> will send "Ruby,
# MyUserAgent" while <code>http.override_headers['User-Agent'] =
# 'MyUserAgent'</code> will send "MyUserAgent".
#
# == Tuning
#
# === Segregation
#
# Each Gem::Net::HTTP::Persistent instance has its own pool of connections.  There
# is no sharing with other instances (as was true in earlier versions).
#
# === Idle Timeout
#
# If a connection hasn't been used for this number of seconds it will
# automatically be reset upon the next use to avoid attempting to send to a
# closed connection.  The default value is 5 seconds. nil means no timeout.
# Set through #idle_timeout.
#
# Reducing this value may help avoid the "too many connection resets" error
# when sending non-idempotent requests while increasing this value will cause
# fewer round-trips.
#
# === Read Timeout
#
# The amount of time allowed between reading two chunks from the socket.  Set
# through #read_timeout
#
# === Max Requests
#
# The number of requests that should be made before opening a new connection.
# Typically many keep-alive capable servers tune this to 100 or less, so the
# 101st request will fail with ECONNRESET. If unset (default), this value has
# no effect, if set, connections will be reset on the request after
# max_requests.
#
# === Open Timeout
#
# The amount of time to wait for a connection to be opened.  Set through
# #open_timeout.
#
# === Socket Options
#
# Socket options may be set on newly-created connections.  See #socket_options
# for details.
#
# === Connection Termination
#
# If you are done using the Gem::Net::HTTP::Persistent instance you may shut down
# all the connections in the current thread with #shutdown.  This is not
# recommended for normal use, it should only be used when it will be several
# minutes before you make another HTTP request.
#
# If you are using multiple threads, call #shutdown in each thread when the
# thread is done making requests.  If you don't call shutdown, that's OK.
# Ruby will automatically garbage collect and shutdown your HTTP connections
# when the thread terminates.

class Gem::Net::HTTP::Persistent

  ##
  # The beginning of Time

  EPOCH = Time.at 0 # :nodoc:

  ##
  # Is OpenSSL available?  This test works with autoload

  HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc:

  ##
  # The default connection pool size is 1/4 the allowed open files
  # (<code>ulimit -n</code>) or 256 if your OS does not support file handle
  # limits (typically windows).

  if Process.const_defined? :RLIMIT_NOFILE
    open_file_limits = Process.getrlimit(Process::RLIMIT_NOFILE)

    # Under JRuby on Windows Process responds to `getrlimit` but returns something that does not match docs
    if open_file_limits.respond_to?(:first)
      DEFAULT_POOL_SIZE = open_file_limits.first / 4
    else
      DEFAULT_POOL_SIZE = 256
    end
  else
    DEFAULT_POOL_SIZE = 256
  end

  ##
  # The version of Gem::Net::HTTP::Persistent you are using

  VERSION = '4.0.4'

  ##
  # Error class for errors raised by Gem::Net::HTTP::Persistent.  Various
  # SystemCallErrors are re-raised with a human-readable message under this
  # class.

  class Error < StandardError; end

  ##
  # Use this method to detect the idle timeout of the host at +uri+.  The
  # value returned can be used to configure #idle_timeout.  +max+ controls the
  # maximum idle timeout to detect.
  #
  # After
  #
  # Idle timeout detection is performed by creating a connection then
  # performing a HEAD request in a loop until the connection terminates
  # waiting one additional second per loop.
  #
  # NOTE:  This may not work on ruby > 1.9.

  def self.detect_idle_timeout uri, max = 10
    uri = Gem::URI uri unless Gem::URI::Generic === uri
    uri += '/'

    req = Gem::Net::HTTP::Head.new uri.request_uri

    http = new 'net-http-persistent detect_idle_timeout'

    http.connection_for uri do |connection|
      sleep_time = 0

      http = connection.http

      loop do
        response = http.request req

        $stderr.puts "HEAD #{uri} => #{response.code}" if $DEBUG

        unless Gem::Net::HTTPOK === response then
          raise Error, "bad response code #{response.code} detecting idle timeout"
        end

        break if sleep_time >= max

        sleep_time += 1

        $stderr.puts "sleeping #{sleep_time}" if $DEBUG
        sleep sleep_time
      end
    end
  rescue
    # ignore StandardErrors, we've probably found the idle timeout.
  ensure
    return sleep_time unless $!
  end

  ##
  # This client's OpenSSL::X509::Certificate

  attr_reader :certificate

  ##
  # For Gem::Net::HTTP parity

  alias cert certificate

  ##
  # An SSL certificate authority.  Setting this will set verify_mode to
  # VERIFY_PEER.

  attr_reader :ca_file

  ##
  # A directory of SSL certificates to be used as certificate authorities.
  # Setting this will set verify_mode to VERIFY_PEER.

  attr_reader :ca_path

  ##
  # An SSL certificate store.  Setting this will override the default
  # certificate store.  See verify_mode for more information.

  attr_reader :cert_store

  ##
  # The ciphers allowed for SSL connections

  attr_reader :ciphers

  ##
  # Sends debug_output to this IO via Gem::Net::HTTP#set_debug_output.
  #
  # Never use this method in production code, it causes a serious security
  # hole.

  attr_accessor :debug_output

  ##
  # Current connection generation

  attr_reader :generation # :nodoc:

  ##
  # Headers that are added to every request using Gem::Net::HTTP#add_field

  attr_reader :headers

  ##
  # Maps host:port to an HTTP version.  This allows us to enable version
  # specific features.

  attr_reader :http_versions

  ##
  # Maximum time an unused connection can remain idle before being
  # automatically closed.

  attr_accessor :idle_timeout

  ##
  # Maximum number of requests on a connection before it is considered expired
  # and automatically closed.

  attr_accessor :max_requests

  ##
  # Number of retries to perform if a request fails.
  #
  # See also #max_retries=, Gem::Net::HTTP#max_retries=.

  attr_reader :max_retries

  ##
  # The value sent in the Keep-Alive header.  Defaults to 30.  Not needed for
  # HTTP/1.1 servers.
  #
  # This may not work correctly for HTTP/1.0 servers
  #
  # This method may be removed in a future version as RFC 2616 does not
  # require this header.

  attr_accessor :keep_alive

  ##
  # The name for this collection of persistent connections.

  attr_reader :name

  ##
  # Seconds to wait until a connection is opened.  See Gem::Net::HTTP#open_timeout

  attr_accessor :open_timeout

  ##
  # Headers that are added to every request using Gem::Net::HTTP#[]=

  attr_reader :override_headers

  ##
  # This client's SSL private key

  attr_reader :private_key

  ##
  # For Gem::Net::HTTP parity

  alias key private_key

  ##
  # The URL through which requests will be proxied

  attr_reader :proxy_uri

  ##
  # List of host suffixes which will not be proxied

  attr_reader :no_proxy

  ##
  # Test-only accessor for the connection pool

  attr_reader :pool # :nodoc:

  ##
  # Seconds to wait until reading one block.  See Gem::Net::HTTP#read_timeout

  attr_accessor :read_timeout

  ##
  # Seconds to wait until writing one block.  See Gem::Net::HTTP#write_timeout

  attr_accessor :write_timeout

  ##
  # By default SSL sessions are reused to avoid extra SSL handshakes.  Set
  # this to false if you have problems communicating with an HTTPS server
  # like:
  #
  #   SSL_connect [...] read finished A: unexpected message (OpenSSL::SSL::SSLError)

  attr_accessor :reuse_ssl_sessions

  ##
  # An array of options for Socket#setsockopt.
  #
  # By default the TCP_NODELAY option is set on sockets.
  #
  # To set additional options append them to this array:
  #
  #   http.socket_options << [Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1]

  attr_reader :socket_options

  ##
  # Current SSL connection generation

  attr_reader :ssl_generation # :nodoc:

  ##
  # SSL session lifetime

  attr_reader :ssl_timeout

  ##
  # SSL version to use.
  #
  # By default, the version will be negotiated automatically between client
  # and server.  Ruby 1.9 and newer only. Deprecated since Ruby 2.5.

  attr_reader :ssl_version

  ##
  # Minimum SSL version to use, e.g. :TLS1_1
  #
  # By default, the version will be negotiated automatically between client
  # and server.  Ruby 2.5 and newer only.

  attr_reader :min_version

  ##
  # Maximum SSL version to use, e.g. :TLS1_2
  #
  # By default, the version will be negotiated automatically between client
  # and server.  Ruby 2.5 and newer only.

  attr_reader :max_version

  ##
  # Where this instance's last-use times live in the thread local variables

  attr_reader :timeout_key # :nodoc:

  ##
  # SSL verification callback.  Used when ca_file or ca_path is set.

  attr_reader :verify_callback

  ##
  # Sets the depth of SSL certificate verification

  attr_reader :verify_depth

  ##
  # HTTPS verify mode.  Defaults to OpenSSL::SSL::VERIFY_PEER which verifies
  # the server certificate.
  #
  # If no ca_file, ca_path or cert_store is set the default system certificate
  # store is used.
  #
  # You can use +verify_mode+ to override any default values.

  attr_reader :verify_mode

  ##
  # HTTPS verify_hostname.
  #
  # If a client sets this to true and enables SNI with SSLSocket#hostname=,
  # the hostname verification on the server certificate is performed
  # automatically during the handshake using
  # OpenSSL::SSL.verify_certificate_identity().
  #
  # You can set +verify_hostname+ as true to use hostname verification
  # during the handshake.
  #
  # NOTE: This works with Ruby > 3.0.

  attr_reader :verify_hostname

  ##
  # Creates a new Gem::Net::HTTP::Persistent.
  #
  # Set a +name+ for fun.  Your library name should be good enough, but this
  # otherwise has no purpose.
  #
  # +proxy+ may be set to a Gem::URI::HTTP or :ENV to pick up proxy options from
  # the environment.  See proxy_from_env for details.
  #
  # In order to use a Gem::URI for the proxy you may need to do some extra work
  # beyond Gem::URI parsing if the proxy requires a password:
  #
  #   proxy = Gem::URI 'http://proxy.example'
  #   proxy.user     = 'AzureDiamond'
  #   proxy.password = 'hunter2'
  #
  # Set +pool_size+ to limit the maximum number of connections allowed.
  # Defaults to 1/4 the number of allowed file handles or 256 if your OS does
  # not support a limit on allowed file handles.  You can have no more than
  # this many threads with active HTTP transactions.

  def initialize name: nil, proxy: nil, pool_size: DEFAULT_POOL_SIZE
    @name = name

    @debug_output     = nil
    @proxy_uri        = nil
    @no_proxy         = []
    @headers          = {}
    @override_headers = {}
    @http_versions    = {}
    @keep_alive       = 30
    @open_timeout     = nil
    @read_timeout     = nil
    @write_timeout    = nil
    @idle_timeout     = 5
    @max_requests     = nil
    @max_retries      = 1
    @socket_options   = []
    @ssl_generation   = 0 # incremented when SSL session variables change

    @socket_options << [Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1] if
      Socket.const_defined? :TCP_NODELAY

    @pool = Gem::Net::HTTP::Persistent::Pool.new size: pool_size do |http_args|
      Gem::Net::HTTP::Persistent::Connection.new Gem::Net::HTTP, http_args, @ssl_generation
    end

    @certificate        = nil
    @ca_file            = nil
    @ca_path            = nil
    @ciphers            = nil
    @private_key        = nil
    @ssl_timeout        = nil
    @ssl_version        = nil
    @min_version        = nil
    @max_version        = nil
    @verify_callback    = nil
    @verify_depth       = nil
    @verify_mode        = nil
    @verify_hostname    = nil
    @cert_store         = nil

    @generation         = 0 # incremented when proxy Gem::URI changes

    if HAVE_OPENSSL then
      @verify_mode        = OpenSSL::SSL::VERIFY_PEER
      @reuse_ssl_sessions = OpenSSL::SSL.const_defined? :Session
    end

    self.proxy = proxy if proxy
  end

  ##
  # Sets this client's OpenSSL::X509::Certificate

  def certificate= certificate
    @certificate = certificate

    reconnect_ssl
  end

  # For Gem::Net::HTTP parity
  alias cert= certificate=

  ##
  # Sets the SSL certificate authority file.

  def ca_file= file
    @ca_file = file

    reconnect_ssl
  end

  ##
  # Sets the SSL certificate authority path.

  def ca_path= path
    @ca_path = path

    reconnect_ssl
  end

  ##
  # Overrides the default SSL certificate store used for verifying
  # connections.

  def cert_store= store
    @cert_store = store

    reconnect_ssl
  end

  ##
  # The ciphers allowed for SSL connections

  def ciphers= ciphers
    @ciphers = ciphers

    reconnect_ssl
  end

  ##
  # Creates a new connection for +uri+

  def connection_for uri
    use_ssl = uri.scheme.downcase == 'https'

    net_http_args = [uri.hostname, uri.port]

    # I'm unsure if uri.host or uri.hostname should be checked against
    # the proxy bypass list.
    if @proxy_uri and not proxy_bypass? uri.host, uri.port then
      net_http_args.concat @proxy_args
    else
      net_http_args.concat [nil, nil, nil, nil]
    end

    connection = @pool.checkout net_http_args

    http = connection.http

    connection.ressl @ssl_generation if
      connection.ssl_generation != @ssl_generation

    if not http.started? then
      ssl   http if use_ssl
      start http
    elsif expired? connection then
      reset connection
    end

    http.keep_alive_timeout = @idle_timeout  if @idle_timeout
    http.max_retries        = @max_retries   if http.respond_to?(:max_retries=)
    http.read_timeout       = @read_timeout  if @read_timeout
    http.write_timeout      = @write_timeout if
      @write_timeout && http.respond_to?(:write_timeout=)

    return yield connection
  rescue Errno::ECONNREFUSED
    if http.proxy?
      address = http.proxy_address
      port    = http.proxy_port
    else
      address = http.address
      port    = http.port
    end

    raise Error, "connection refused: #{address}:#{port}"
  rescue Errno::EHOSTDOWN
    if http.proxy?
      address = http.proxy_address
      port    = http.proxy_port
    else
      address = http.address
      port    = http.port
    end

    raise Error, "host down: #{address}:#{port}"
  ensure
    @pool.checkin net_http_args
  end

  ##
  # CGI::escape wrapper

  def escape str
    CGI.escape str if str
  end

  ##
  # CGI::unescape wrapper

  def unescape str
    CGI.unescape str if str
  end


  ##
  # Returns true if the connection should be reset due to an idle timeout, or
  # maximum request count, false otherwise.

  def expired? connection
    return true  if     @max_requests && connection.requests >= @max_requests
    return false unless @idle_timeout
    return true  if     @idle_timeout.zero?

    Time.now - connection.last_use > @idle_timeout
  end

  ##
  # Starts the Gem::Net::HTTP +connection+

  def start http
    http.set_debug_output @debug_output if @debug_output
    http.open_timeout = @open_timeout if @open_timeout

    http.start

    socket = http.instance_variable_get :@socket

    if socket then # for fakeweb
      @socket_options.each do |option|
        socket.io.setsockopt(*option)
      end
    end
  end

  ##
  # Finishes the Gem::Net::HTTP +connection+

  def finish connection
    connection.finish

    connection.http.instance_variable_set :@last_communicated, nil
    connection.http.instance_variable_set :@ssl_session, nil unless
      @reuse_ssl_sessions
  end

  ##
  # Returns the HTTP protocol version for +uri+

  def http_version uri
    @http_versions["#{uri.hostname}:#{uri.port}"]
  end

  ##
  # Adds "http://" to the String +uri+ if it is missing.

  def normalize_uri uri
    (uri =~ /^https?:/) ? uri : "http://#{uri}"
  end

  ##
  # Set the maximum number of retries for a request.
  #
  # Defaults to one retry.
  #
  # Set this to 0 to disable retries.

  def max_retries= retries
    retries = retries.to_int

    raise ArgumentError, "max_retries must be positive" if retries < 0

    @max_retries = retries

    reconnect
  end

  ##
  # Sets this client's SSL private key

  def private_key= key
    @private_key = key

    reconnect_ssl
  end

  # For Gem::Net::HTTP parity
  alias key= private_key=

  ##
  # Sets the proxy server.  The +proxy+ may be the Gem::URI of the proxy server,
  # the symbol +:ENV+ which will read the proxy from the environment or nil to
  # disable use of a proxy.  See #proxy_from_env for details on setting the
  # proxy from the environment.
  #
  # If the proxy Gem::URI is set after requests have been made, the next request
  # will shut-down and re-open all connections.
  #
  # The +no_proxy+ query parameter can be used to specify hosts which shouldn't
  # be reached via proxy; if set it should be a comma separated list of
  # hostname suffixes, optionally with +:port+ appended, for example
  # <tt>example.com,some.host:8080</tt>.

  def proxy= proxy
    @proxy_uri = case proxy
                 when :ENV      then proxy_from_env
                 when Gem::URI::HTTP then proxy
                 when nil       then # ignore
                 else raise ArgumentError, 'proxy must be :ENV or a Gem::URI::HTTP'
                 end

    @no_proxy.clear

    if @proxy_uri then
      @proxy_args = [
        @proxy_uri.hostname,
        @proxy_uri.port,
        unescape(@proxy_uri.user),
        unescape(@proxy_uri.password),
      ]

      @proxy_connection_id = [nil, *@proxy_args].join ':'

      if @proxy_uri.query then
        @no_proxy = CGI.parse(@proxy_uri.query)['no_proxy'].join(',').downcase.split(',').map { |x| x.strip }.reject { |x| x.empty? }
      end
    end

    reconnect
    reconnect_ssl
  end

  ##
  # Creates a Gem::URI for an HTTP proxy server from ENV variables.
  #
  # If +HTTP_PROXY+ is set a proxy will be returned.
  #
  # If +HTTP_PROXY_USER+ or +HTTP_PROXY_PASS+ are set the Gem::URI is given the
  # indicated user and password unless HTTP_PROXY contains either of these in
  # the Gem::URI.
  #
  # The +NO_PROXY+ ENV variable can be used to specify hosts which shouldn't
  # be reached via proxy; if set it should be a comma separated list of
  # hostname suffixes, optionally with +:port+ appended, for example
  # <tt>example.com,some.host:8080</tt>. When set to <tt>*</tt> no proxy will
  # be returned.
  #
  # For Windows users, lowercase ENV variables are preferred over uppercase ENV
  # variables.

  def proxy_from_env
    env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']

    return nil if env_proxy.nil? or env_proxy.empty?

    uri = Gem::URI normalize_uri env_proxy

    env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']

    # '*' is special case for always bypass
    return nil if env_no_proxy == '*'

    if env_no_proxy then
      uri.query = "no_proxy=#{escape(env_no_proxy)}"
    end

    unless uri.user or uri.password then
      uri.user     = escape ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER']
      uri.password = escape ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS']
    end

    uri
  end

  ##
  # Returns true when proxy should by bypassed for host.

  def proxy_bypass? host, port
    host = host.downcase
    host_port = [host, port].join ':'

    @no_proxy.each do |name|
      return true if host[-name.length, name.length] == name or
         host_port[-name.length, name.length] == name
    end

    false
  end

  ##
  # Forces reconnection of all HTTP connections, including TLS/SSL
  # connections.

  def reconnect
    @generation += 1
  end

  ##
  # Forces reconnection of only TLS/SSL connections.

  def reconnect_ssl
    @ssl_generation += 1
  end

  ##
  # Finishes then restarts the Gem::Net::HTTP +connection+

  def reset connection
    http = connection.http

    finish connection

    start http
  rescue Errno::ECONNREFUSED
    e = Error.new "connection refused: #{http.address}:#{http.port}"
    e.set_backtrace $@
    raise e
  rescue Errno::EHOSTDOWN
    e = Error.new "host down: #{http.address}:#{http.port}"
    e.set_backtrace $@
    raise e
  end

  ##
  # Makes a request on +uri+.  If +req+ is nil a Gem::Net::HTTP::Get is performed
  # against +uri+.
  #
  # If a block is passed #request behaves like Gem::Net::HTTP#request (the body of
  # the response will not have been read).
  #
  # +req+ must be a Gem::Net::HTTPGenericRequest subclass (see Gem::Net::HTTP for a list).

  def request uri, req = nil, &block
    uri      = Gem::URI uri
    req      = request_setup req || uri
    response = nil

    connection_for uri do |connection|
      http = connection.http

      begin
        connection.requests += 1

        response = http.request req, &block

        if req.connection_close? or
          (response.http_version <= '1.0' and
            not response.connection_keep_alive?) or
            response.connection_close? then
          finish connection
        end
      rescue Exception # make sure to close the connection when it was interrupted
        finish connection

        raise
      ensure
        connection.last_use = Time.now
      end
    end

    @http_versions["#{uri.hostname}:#{uri.port}"] ||= response.http_version

    response
  end

  ##
  # Creates a GET request if +req_or_uri+ is a Gem::URI and adds headers to the
  # request.
  #
  # Returns the request.

  def request_setup req_or_uri # :nodoc:
    req = if req_or_uri.respond_to? 'request_uri' then
            Gem::Net::HTTP::Get.new req_or_uri.request_uri
          else
            req_or_uri
          end

    @headers.each do |pair|
      req.add_field(*pair)
    end

    @override_headers.each do |name, value|
      req[name] = value
    end

    unless req['Connection'] then
      req.add_field 'Connection', 'keep-alive'
      req.add_field 'Keep-Alive', @keep_alive
    end

    req
  end

  ##
  # Shuts down all connections
  #
  # *NOTE*: Calling shutdown for can be dangerous!
  #
  # If any thread is still using a connection it may cause an error!  Call
  # #shutdown when you are completely done making requests!

  def shutdown
    @pool.shutdown { |http| http.finish }
  end

  ##
  # Enables SSL on +connection+

  def ssl connection
    connection.use_ssl = true

    connection.ciphers     = @ciphers     if @ciphers
    connection.ssl_timeout = @ssl_timeout if @ssl_timeout
    connection.ssl_version = @ssl_version if @ssl_version
    connection.min_version = @min_version if @min_version
    connection.max_version = @max_version if @max_version

    connection.verify_depth    = @verify_depth
    connection.verify_mode     = @verify_mode
    connection.verify_hostname = @verify_hostname if
      @verify_hostname != nil && connection.respond_to?(:verify_hostname=)

    if OpenSSL::SSL::VERIFY_PEER == OpenSSL::SSL::VERIFY_NONE and
       not Object.const_defined?(:I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG) then
      warn <<-WARNING
                             !!!SECURITY WARNING!!!

The SSL HTTP connection to:

  #{connection.address}:#{connection.port}

                           !!!MAY NOT BE VERIFIED!!!

On your platform your OpenSSL implementation is broken.

There is no difference between the values of VERIFY_NONE and VERIFY_PEER.

This means that attempting to verify the security of SSL connections may not
work.  This exposes you to man-in-the-middle exploits, snooping on the
contents of your connection and other dangers to the security of your data.

To disable this warning define the following constant at top-level in your
application:

  I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil

      WARNING
    end

    connection.ca_file = @ca_file if @ca_file
    connection.ca_path = @ca_path if @ca_path

    if @ca_file or @ca_path then
      connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
      connection.verify_callback = @verify_callback if @verify_callback
    end

    if @certificate and @private_key then
      connection.cert = @certificate
      connection.key  = @private_key
    end

    connection.cert_store = if @cert_store then
                              @cert_store
                            else
                              store = OpenSSL::X509::Store.new
                              store.set_default_paths
                              store
                            end
  end

  ##
  # SSL session lifetime

  def ssl_timeout= ssl_timeout
    @ssl_timeout = ssl_timeout

    reconnect_ssl
  end

  ##
  # SSL version to use

  def ssl_version= ssl_version
    @ssl_version = ssl_version

    reconnect_ssl
  end

  ##
  # Minimum SSL version to use

  def min_version= min_version
    @min_version = min_version

    reconnect_ssl
  end

  ##
  # maximum SSL version to use

  def max_version= max_version
    @max_version = max_version

    reconnect_ssl
  end

  ##
  # Sets the depth of SSL certificate verification

  def verify_depth= verify_depth
    @verify_depth = verify_depth

    reconnect_ssl
  end

  ##
  # Sets the HTTPS verify mode.  Defaults to OpenSSL::SSL::VERIFY_PEER.
  #
  # Setting this to VERIFY_NONE is a VERY BAD IDEA and should NEVER be used.
  # Securely transfer the correct certificate and update the default
  # certificate store or set the ca file instead.

  def verify_mode= verify_mode
    @verify_mode = verify_mode

    reconnect_ssl
  end

  ##
  # Sets the HTTPS verify_hostname.

  def verify_hostname= verify_hostname
    @verify_hostname = verify_hostname

    reconnect_ssl
  end

  ##
  # SSL verification callback.

  def verify_callback= callback
    @verify_callback = callback

    reconnect_ssl
  end
end

require_relative 'persistent/connection'
require_relative 'persistent/pool'
PK*J[K)Ҽ��Dshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ldap.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# Author::
#  Takaaki Tateishi <ttate@jaist.ac.jp>
#  Akira Yamada <akira@ruby-lang.org>
# License::
#   Bundler::URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada.
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # LDAP Bundler::URI SCHEMA (described in RFC2255).
  #--
  # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]]
  #++
  class LDAP < Generic

    # A Default port of 389 for Bundler::URI::LDAP.
    DEFAULT_PORT = 389

    # An Array of the available components for Bundler::URI::LDAP.
    COMPONENT = [
      :scheme,
      :host, :port,
      :dn,
      :attributes,
      :scope,
      :filter,
      :extensions,
    ].freeze

    # Scopes available for the starting point.
    #
    # * SCOPE_BASE - the Base DN
    # * SCOPE_ONE  - one level under the Base DN, not including the base DN and
    #   not including any entries under this
    # * SCOPE_SUB  - subtrees, all entries at all levels
    #
    SCOPE = [
      SCOPE_ONE = 'one',
      SCOPE_SUB = 'sub',
      SCOPE_BASE = 'base',
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::LDAP object from components, with syntax checking.
    #
    # The components accepted are host, port, dn, attributes,
    # scope, filter, and extensions.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, port, dn, attributes, scope, filter, extensions]</code>.
    #
    # Example:
    #
    #     uri = Bundler::URI::LDAP.build({:host => 'ldap.example.com',
    #       :dn => '/dc=example'})
    #
    #     uri = Bundler::URI::LDAP.build(["ldap.example.com", nil,
    #       "/dc=example;dc=com", "query", nil, nil, nil])
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)

      if tmp[:dn]
        tmp[:path] = tmp[:dn]
      end

      query = []
      [:extensions, :filter, :scope, :attributes].collect do |x|
        next if !tmp[x] && query.size == 0
        query.unshift(tmp[x])
      end

      tmp[:query] = query.join('?')

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::LDAP object from generic Bundler::URI components as per
    # RFC 2396. No LDAP-specific syntax checking is performed.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    # Example:
    #
    #     uri = Bundler::URI::LDAP.new("ldap", nil, "ldap.example.com", nil, nil,
    #       "/dc=example;dc=com", nil, "query", nil)
    #
    # See also Bundler::URI::Generic.new.
    #
    def initialize(*arg)
      super(*arg)

      if @fragment
        raise InvalidURIError, 'bad LDAP URL'
      end

      parse_dn
      parse_query
    end

    # Private method to cleanup +dn+ from using the +path+ component attribute.
    def parse_dn
      raise InvalidURIError, 'bad LDAP URL' unless @path
      @dn = @path[1..-1]
    end
    private :parse_dn

    # Private method to cleanup +attributes+, +scope+, +filter+, and +extensions+
    # from using the +query+ component attribute.
    def parse_query
      @attributes = nil
      @scope      = nil
      @filter     = nil
      @extensions = nil

      if @query
        attrs, scope, filter, extensions = @query.split('?')

        @attributes = attrs if attrs && attrs.size > 0
        @scope      = scope if scope && scope.size > 0
        @filter     = filter if filter && filter.size > 0
        @extensions = extensions if extensions && extensions.size > 0
      end
    end
    private :parse_query

    # Private method to assemble +query+ from +attributes+, +scope+, +filter+, and +extensions+.
    def build_path_query
      @path = '/' + @dn

      query = []
      [@extensions, @filter, @scope, @attributes].each do |x|
        next if !x && query.size == 0
        query.unshift(x)
      end
      @query = query.join('?')
    end
    private :build_path_query

    # Returns dn.
    def dn
      @dn
    end

    # Private setter for dn +val+.
    def set_dn(val)
      @dn = val
      build_path_query
      @dn
    end
    protected :set_dn

    # Setter for dn +val+.
    def dn=(val)
      set_dn(val)
      val
    end

    # Returns attributes.
    def attributes
      @attributes
    end

    # Private setter for attributes +val+.
    def set_attributes(val)
      @attributes = val
      build_path_query
      @attributes
    end
    protected :set_attributes

    # Setter for attributes +val+.
    def attributes=(val)
      set_attributes(val)
      val
    end

    # Returns scope.
    def scope
      @scope
    end

    # Private setter for scope +val+.
    def set_scope(val)
      @scope = val
      build_path_query
      @scope
    end
    protected :set_scope

    # Setter for scope +val+.
    def scope=(val)
      set_scope(val)
      val
    end

    # Returns filter.
    def filter
      @filter
    end

    # Private setter for filter +val+.
    def set_filter(val)
      @filter = val
      build_path_query
      @filter
    end
    protected :set_filter

    # Setter for filter +val+.
    def filter=(val)
      set_filter(val)
      val
    end

    # Returns extensions.
    def extensions
      @extensions
    end

    # Private setter for extensions +val+.
    def set_extensions(val)
      @extensions = val
      build_path_query
      @extensions
    end
    protected :set_extensions

    # Setter for extensions +val+.
    def extensions=(val)
      set_extensions(val)
      val
    end

    # Checks if Bundler::URI has a path.
    # For Bundler::URI::LDAP this will return +false+.
    def hierarchical?
      false
    end
  end

  register_scheme 'LDAP', LDAP
end
PK*J[:)##Eshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ldaps.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'ldap'

module Bundler::URI

  # The default port for LDAPS URIs is 636, and the scheme is 'ldaps:' rather
  # than 'ldap:'. Other than that, LDAPS URIs are identical to LDAP URIs;
  # see Bundler::URI::LDAP.
  class LDAPS < LDAP
    # A Default port of 636 for Bundler::URI::LDAPS
    DEFAULT_PORT = 636
  end

  register_scheme 'LDAPS', LDAPS
end
PK*J[FoSg?�?�Gshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/generic.rbnu�[���# frozen_string_literal: true

# = uri/generic.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'common'
autoload :IPSocket, 'socket'
autoload :IPAddr, 'ipaddr'

module Bundler::URI

  #
  # Base class for all Bundler::URI classes.
  # Implements generic Bundler::URI syntax as per RFC 2396.
  #
  class Generic
    include Bundler::URI

    #
    # A Default port of nil for Bundler::URI::Generic.
    #
    DEFAULT_PORT = nil

    #
    # Returns default port.
    #
    def self.default_port
      self::DEFAULT_PORT
    end

    #
    # Returns default port.
    #
    def default_port
      self.class.default_port
    end

    #
    # An Array of the available components for Bundler::URI::Generic.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port, :registry,
      :path, :opaque,
      :query,
      :fragment
    ].freeze

    #
    # Components of the Bundler::URI in the order.
    #
    def self.component
      self::COMPONENT
    end

    USE_REGISTRY = false # :nodoc:

    def self.use_registry # :nodoc:
      self::USE_REGISTRY
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # At first, tries to create a new Bundler::URI::Generic instance using
    # Bundler::URI::Generic::build. But, if exception Bundler::URI::InvalidComponentError is raised,
    # then it does Bundler::URI::Escape.escape all Bundler::URI components and tries again.
    #
    def self.build2(args)
      begin
        return self.build(args)
      rescue InvalidComponentError
        if args.kind_of?(Array)
          return self.build(args.collect{|x|
            if x.is_a?(String)
              Bundler::URI::RFC2396_PARSER.escape(x)
            else
              x
            end
          })
        elsif args.kind_of?(Hash)
          tmp = {}
          args.each do |key, value|
            tmp[key] = if value
                Bundler::URI::RFC2396_PARSER.escape(value)
              else
                value
              end
          end
          return self.build(tmp)
        end
      end
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # Creates a new Bundler::URI::Generic instance from components of Bundler::URI::Generic
    # with check.  Components are: scheme, userinfo, host, port, registry, path,
    # opaque, query, and fragment. You can provide arguments either by an Array or a Hash.
    # See ::new for hash keys to use or for order of array items.
    #
    def self.build(args)
      if args.kind_of?(Array) &&
          args.size == ::Bundler::URI::Generic::COMPONENT.size
        tmp = args.dup
      elsif args.kind_of?(Hash)
        tmp = ::Bundler::URI::Generic::COMPONENT.collect do |c|
          if args.include?(c)
            args[c]
          else
            nil
          end
        end
      else
        component = self.class.component rescue ::Bundler::URI::Generic::COMPONENT
        raise ArgumentError,
        "expected Array of or Hash of components of #{self.class} (#{component.join(', ')})"
      end

      tmp << nil
      tmp << true
      return self.new(*tmp)
    end

    #
    # == Args
    #
    # +scheme+::
    #   Protocol scheme, i.e. 'http','ftp','mailto' and so on.
    # +userinfo+::
    #   User name and password, i.e. 'sdmitry:bla'.
    # +host+::
    #   Server host name.
    # +port+::
    #   Server port.
    # +registry+::
    #   Registry of naming authorities.
    # +path+::
    #   Path on server.
    # +opaque+::
    #   Opaque part.
    # +query+::
    #   Query data.
    # +fragment+::
    #   Part of the Bundler::URI after '#' character.
    # +parser+::
    #   Parser for internal use [Bundler::URI::DEFAULT_PARSER by default].
    # +arg_check+::
    #   Check arguments [false by default].
    #
    # == Description
    #
    # Creates a new Bundler::URI::Generic instance from ``generic'' components without check.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = DEFAULT_PARSER,
                   arg_check = false)
      @scheme = nil
      @user = nil
      @password = nil
      @host = nil
      @port = nil
      @path = nil
      @query = nil
      @opaque = nil
      @fragment = nil
      @parser = parser == DEFAULT_PARSER ? nil : parser

      if arg_check
        self.scheme = scheme
        self.userinfo = userinfo
        self.hostname = host
        self.port = port
        self.path = path
        self.query = query
        self.opaque = opaque
        self.fragment = fragment
      else
        self.set_scheme(scheme)
        self.set_userinfo(userinfo)
        self.set_host(host)
        self.set_port(port)
        self.set_path(path)
        self.query = query
        self.set_opaque(opaque)
        self.fragment=(fragment)
      end
      if registry
        raise InvalidURIError,
          "the scheme #{@scheme} does not accept registry part: #{registry} (or bad hostname?)"
      end

      @scheme&.freeze
      self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)
      self.set_port(self.default_port) if self.default_port && !@port
    end

    #
    # Returns the scheme component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").scheme #=> "http"
    #
    attr_reader :scheme

    # Returns the host component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").host #=> "foo"
    #
    # It returns nil if no host component exists.
    #
    #   Bundler::URI("mailto:foo@example.org").host #=> nil
    #
    # The component does not contain the port number.
    #
    #   Bundler::URI("http://foo:8080/bar/baz").host #=> "foo"
    #
    # Since IPv6 addresses are wrapped with brackets in URIs,
    # this method returns IPv6 addresses wrapped with brackets.
    # This form is not appropriate to pass to socket methods such as TCPSocket.open.
    # If unwrapped host names are required, use the #hostname method.
    #
    #   Bundler::URI("http://[::1]/bar/baz").host     #=> "[::1]"
    #   Bundler::URI("http://[::1]/bar/baz").hostname #=> "::1"
    #
    attr_reader :host

    # Returns the port component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").port      #=> 80
    #   Bundler::URI("http://foo:8080/bar/baz").port #=> 8080
    #
    attr_reader :port

    def registry # :nodoc:
      nil
    end

    # Returns the path component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").path #=> "/bar/baz"
    #
    attr_reader :path

    # Returns the query component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz?search=FooBar").query #=> "search=FooBar"
    #
    attr_reader :query

    # Returns the opaque part of the Bundler::URI.
    #
    #   Bundler::URI("mailto:foo@example.org").opaque #=> "foo@example.org"
    #   Bundler::URI("http://foo/bar/baz").opaque     #=> nil
    #
    # The portion of the path that does not make use of the slash '/'.
    # The path typically refers to an absolute path or an opaque part.
    # (See RFC2396 Section 3 and 5.2.)
    #
    attr_reader :opaque

    # Returns the fragment component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz?search=FooBar#ponies").fragment #=> "ponies"
    #
    attr_reader :fragment

    # Returns the parser to be used.
    #
    # Unless a Bundler::URI::Parser is defined, DEFAULT_PARSER is used.
    #
    def parser
      if !defined?(@parser) || !@parser
        DEFAULT_PARSER
      else
        @parser || DEFAULT_PARSER
      end
    end

    # Replaces self by other Bundler::URI object.
    #
    def replace!(oth)
      if self.class != oth.class
        raise ArgumentError, "expected #{self.class} object"
      end

      component.each do |c|
        self.__send__("#{c}=", oth.__send__(c))
      end
    end
    private :replace!

    #
    # Components of the Bundler::URI in the order.
    #
    def component
      self.class.component
    end

    #
    # Checks the scheme +v+ component against the Bundler::URI::Parser Regexp for :SCHEME.
    #
    def check_scheme(v)
      if v && parser.regexp[:SCHEME] !~ v
        raise InvalidComponentError,
          "bad component(expected scheme component): #{v}"
      end

      return true
    end
    private :check_scheme

    # Protected setter for the scheme component +v+.
    #
    # See also Bundler::URI::Generic.scheme=.
    #
    def set_scheme(v)
      @scheme = v&.downcase
    end
    protected :set_scheme

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the scheme component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_scheme.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.scheme = "https"
    #   uri.to_s  #=> "https://my.example.com"
    #
    def scheme=(v)
      check_scheme(v)
      set_scheme(v)
      v
    end

    #
    # Checks the +user+ and +password+.
    #
    # If +password+ is not provided, then +user+ is
    # split, using Bundler::URI::Generic.split_userinfo, to
    # pull +user+ and +password.
    #
    # See also Bundler::URI::Generic.check_user, Bundler::URI::Generic.check_password.
    #
    def check_userinfo(user, password = nil)
      if !password
        user, password = split_userinfo(user)
      end
      check_user(user)
      check_password(password, user)

      return true
    end
    private :check_userinfo

    #
    # Checks the user +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_user(v)
      if @opaque
        raise InvalidURIError,
          "cannot set user with opaque"
      end

      return v unless v

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad component(expected userinfo component or user component): #{v}"
      end

      return true
    end
    private :check_user

    #
    # Checks the password +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_password(v, user = @user)
      if @opaque
        raise InvalidURIError,
          "cannot set password with opaque"
      end
      return v unless v

      if !user
        raise InvalidURIError,
          "password component depends user component"
      end

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad password component"
      end

      return true
    end
    private :check_password

    #
    # Sets userinfo, argument is string like 'name:pass'.
    #
    def userinfo=(userinfo)
      if userinfo.nil?
        return nil
      end
      check_userinfo(*userinfo)
      set_userinfo(*userinfo)
      # returns userinfo
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +user+ component
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_user.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.user = "sam"
    #   uri.to_s  #=> "http://sam:V3ry_S3nsit1ve@my.example.com"
    #
    def user=(user)
      check_user(user)
      set_user(user)
      # returns user
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +password+ component
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_password.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.password = "V3ry_S3nsit1ve"
    #   uri.to_s  #=> "http://john:V3ry_S3nsit1ve@my.example.com"
    #
    def password=(password)
      check_password(password)
      set_password(password)
      # returns password
    end

    # Protected setter for the +user+ component, and +password+ if available
    # (with validation).
    #
    # See also Bundler::URI::Generic.userinfo=.
    #
    def set_userinfo(user, password = nil)
      unless password
        user, password = split_userinfo(user)
      end
      @user     = user
      @password = password if password

      [@user, @password]
    end
    protected :set_userinfo

    # Protected setter for the user component +v+.
    #
    # See also Bundler::URI::Generic.user=.
    #
    def set_user(v)
      set_userinfo(v, @password)
      v
    end
    protected :set_user

    # Protected setter for the password component +v+.
    #
    # See also Bundler::URI::Generic.password=.
    #
    def set_password(v)
      @password = v
      # returns v
    end
    protected :set_password

    # Returns the userinfo +ui+ as <code>[user, password]</code>
    # if properly formatted as 'user:password'.
    def split_userinfo(ui)
      return nil, nil unless ui
      user, password = ui.split(':', 2)

      return user, password
    end
    private :split_userinfo

    # Escapes 'user:password' +v+ based on RFC 1738 section 3.1.
    def escape_userpass(v)
      parser.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/
    end
    private :escape_userpass

    # Returns the userinfo, either as 'user' or 'user:password'.
    def userinfo
      if @user.nil?
        nil
      elsif @password.nil?
        @user
      else
        @user + ':' + @password
      end
    end

    # Returns the user component (without Bundler::URI decoding).
    def user
      @user
    end

    # Returns the password component (without Bundler::URI decoding).
    def password
      @password
    end

    # Returns the user component after Bundler::URI decoding.
    def decoded_user
      Bundler::URI.decode_uri_component(@user) if @user
    end

    # Returns the password component after Bundler::URI decoding.
    def decoded_password
      Bundler::URI.decode_uri_component(@password) if @password
    end

    #
    # Checks the host +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :HOST.
    #
    # Can not have a registry or opaque component defined,
    # with a host component defined.
    #
    def check_host(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "cannot set host with registry or opaque"
      elsif parser.regexp[:HOST] !~ v
        raise InvalidComponentError,
          "bad component(expected host component): #{v}"
      end

      return true
    end
    private :check_host

    # Protected setter for the host component +v+.
    #
    # See also Bundler::URI::Generic.host=.
    #
    def set_host(v)
      @host = v
    end
    protected :set_host

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the host component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_host.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.host = "foo.com"
    #   uri.to_s  #=> "http://foo.com"
    #
    def host=(v)
      check_host(v)
      set_host(v)
      v
    end

    # Extract the host part of the Bundler::URI and unwrap brackets for IPv6 addresses.
    #
    # This method is the same as Bundler::URI::Generic#host except
    # brackets for IPv6 (and future IP) addresses are removed.
    #
    #   uri = Bundler::URI("http://[::1]/bar")
    #   uri.hostname      #=> "::1"
    #   uri.host          #=> "[::1]"
    #
    def hostname
      v = self.host
      v&.start_with?('[') && v.end_with?(']') ? v[1..-2] : v
    end

    # Sets the host part of the Bundler::URI as the argument with brackets for IPv6 addresses.
    #
    # This method is the same as Bundler::URI::Generic#host= except
    # the argument can be a bare IPv6 address.
    #
    #   uri = Bundler::URI("http://foo/bar")
    #   uri.hostname = "::1"
    #   uri.to_s  #=> "http://[::1]/bar"
    #
    # If the argument seems to be an IPv6 address,
    # it is wrapped with brackets.
    #
    def hostname=(v)
      v = "[#{v}]" if !(v&.start_with?('[') && v&.end_with?(']')) && v&.index(':')
      self.host = v
    end

    #
    # Checks the port +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :PORT.
    #
    # Can not have a registry or opaque component defined,
    # with a port component defined.
    #
    def check_port(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "cannot set port with registry or opaque"
      elsif !v.kind_of?(Integer) && parser.regexp[:PORT] !~ v
        raise InvalidComponentError,
          "bad component(expected port component): #{v.inspect}"
      end

      return true
    end
    private :check_port

    # Protected setter for the port component +v+.
    #
    # See also Bundler::URI::Generic.port=.
    #
    def set_port(v)
      v = v.empty? ? nil : v.to_i unless !v || v.kind_of?(Integer)
      @port = v
    end
    protected :set_port

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the port component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_port.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.port = 8080
    #   uri.to_s  #=> "http://my.example.com:8080"
    #
    def port=(v)
      check_port(v)
      set_port(v)
      port
    end

    def check_registry(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end
    private :check_registry

    def set_registry(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end
    protected :set_registry

    def registry=(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end

    #
    # Checks the path +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp
    # for :ABS_PATH and :REL_PATH.
    #
    # Can not have a opaque component defined,
    # with a path component defined.
    #
    def check_path(v)
      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if v && @opaque
        raise InvalidURIError,
          "path conflicts with opaque"
      end

      # If scheme is ftp, path may be relative.
      # See RFC 1738 section 3.2.2, and RFC 2396.
      if @scheme && @scheme != "ftp"
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected absolute path component): #{v}"
        end
      else
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v &&
           parser.regexp[:REL_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected relative path component): #{v}"
        end
      end

      return true
    end
    private :check_path

    # Protected setter for the path component +v+.
    #
    # See also Bundler::URI::Generic.path=.
    #
    def set_path(v)
      @path = v
    end
    protected :set_path

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the path component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_path.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/pub/files")
    #   uri.path = "/faq/"
    #   uri.to_s  #=> "http://my.example.com/faq/"
    #
    def path=(v)
      check_path(v)
      set_path(v)
      v
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the query component +v+.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/?id=25")
    #   uri.query = "id=1"
    #   uri.to_s  #=> "http://my.example.com/?id=1"
    #
    def query=(v)
      return @query = nil unless v
      raise InvalidURIError, "query conflicts with opaque" if @opaque

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      raise InvalidURIError, "invalid percent escape: #{$1}" if /(%\H\H)/n.match(v)
      v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @query = v
    end

    #
    # Checks the opaque +v+ component for RFC2396 compliance and
    # against the Bundler::URI::Parser Regexp for :OPAQUE.
    #
    # Can not have a host, port, user, or path component defined,
    # with an opaque component defined.
    #
    def check_opaque(v)
      return v unless v

      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if @host || @port || @user || @path  # userinfo = @user + ':' + @password
        raise InvalidURIError,
          "cannot set opaque with host, port, userinfo or path"
      elsif v && parser.regexp[:OPAQUE] !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      return true
    end
    private :check_opaque

    # Protected setter for the opaque component +v+.
    #
    # See also Bundler::URI::Generic.opaque=.
    #
    def set_opaque(v)
      @opaque = v
    end
    protected :set_opaque

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the opaque component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_opaque.
    #
    def opaque=(v)
      check_opaque(v)
      set_opaque(v)
      v
    end

    #
    # Checks the fragment +v+ component against the Bundler::URI::Parser Regexp for :FRAGMENT.
    #
    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the fragment component +v+
    # (with validation).
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/?id=25#time=1305212049")
    #   uri.fragment = "time=1305212086"
    #   uri.to_s  #=> "http://my.example.com/?id=25#time=1305212086"
    #
    def fragment=(v)
      return @fragment = nil unless v

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @fragment = v
    end

    #
    # Returns true if Bundler::URI is hierarchical.
    #
    # == Description
    #
    # Bundler::URI has components listed in order of decreasing significance from left to right,
    # see RFC3986 https://www.rfc-editor.org/rfc/rfc3986 1.2.3.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/")
    #   uri.hierarchical?
    #   #=> true
    #   uri = Bundler::URI.parse("mailto:joe@example.com")
    #   uri.hierarchical?
    #   #=> false
    #
    def hierarchical?
      if @path
        true
      else
        false
      end
    end

    #
    # Returns true if Bundler::URI has a scheme (e.g. http:// or https://) specified.
    #
    def absolute?
      if @scheme
        true
      else
        false
      end
    end
    alias absolute absolute?

    #
    # Returns true if Bundler::URI does not have a scheme (e.g. http:// or https://) specified.
    #
    def relative?
      !absolute?
    end

    #
    # Returns an Array of the path split on '/'.
    #
    def split_path(path)
      path.split("/", -1)
    end
    private :split_path

    #
    # Merges a base path +base+, with relative path +rel+,
    # returns a modified base path.
    #
    def merge_path(base, rel)

      # RFC2396, Section 5.2, 5)
      # RFC2396, Section 5.2, 6)
      base_path = split_path(base)
      rel_path  = split_path(rel)

      # RFC2396, Section 5.2, 6), a)
      base_path << '' if base_path.last == '..'
      while i = base_path.index('..')
        base_path.slice!(i - 1, 2)
      end

      if (first = rel_path.first) and first.empty?
        base_path.clear
        rel_path.shift
      end

      # RFC2396, Section 5.2, 6), c)
      # RFC2396, Section 5.2, 6), d)
      rel_path.push('') if rel_path.last == '.' || rel_path.last == '..'
      rel_path.delete('.')

      # RFC2396, Section 5.2, 6), e)
      tmp = []
      rel_path.each do |x|
        if x == '..' &&
            !(tmp.empty? || tmp.last == '..')
          tmp.pop
        else
          tmp << x
        end
      end

      add_trailer_slash = !tmp.empty?
      if base_path.empty?
        base_path = [''] # keep '/' for root directory
      elsif add_trailer_slash
        base_path.pop
      end
      while x = tmp.shift
        if x == '..'
          # RFC2396, Section 4
          # a .. or . in an absolute path has no special meaning
          base_path.pop if base_path.size > 1
        else
          # if x == '..'
          #   valid absolute (but abnormal) path "/../..."
          # else
          #   valid absolute path
          # end
          base_path << x
          tmp.each {|t| base_path << t}
          add_trailer_slash = false
          break
        end
      end
      base_path.push('') if add_trailer_slash

      return base_path.join('/')
    end
    private :merge_path

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Destructive form of #merge.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.merge!("/main.rbx?page=1")
    #   uri.to_s  # => "http://my.example.com/main.rbx?page=1"
    #
    def merge!(oth)
      t = merge(oth)
      if self == t
        nil
      else
        replace!(t)
        self
      end
    end

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Merges two URIs.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.merge("/main.rbx?page=1")
    #   # => "http://my.example.com/main.rbx?page=1"
    #
    def merge(oth)
      rel = parser.__send__(:convert_to_uri, oth)

      if rel.absolute?
        #raise BadURIError, "both Bundler::URI are absolute" if absolute?
        # hmm... should return oth for usability?
        return rel
      end

      unless self.absolute?
        raise BadURIError, "both Bundler::URI are relative"
      end

      base = self.dup

      authority = rel.userinfo || rel.host || rel.port

      # RFC2396, Section 5.2, 2)
      if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query
        base.fragment=(rel.fragment) if rel.fragment
        return base
      end

      base.query = nil
      base.fragment=(nil)

      # RFC2396, Section 5.2, 4)
      if authority
        base.set_userinfo(rel.userinfo)
        base.set_host(rel.host)
        base.set_port(rel.port || base.default_port)
        base.set_path(rel.path)
      elsif base.path && rel.path
        base.set_path(merge_path(base.path, rel.path))
      end

      # RFC2396, Section 5.2, 7)
      base.query = rel.query       if rel.query
      base.fragment=(rel.fragment) if rel.fragment

      return base
    end # merge
    alias + merge

    # :stopdoc:
    def route_from_path(src, dst)
      case dst
      when src
        # RFC2396, Section 4.2
        return ''
      when %r{(?:\A|/)\.\.?(?:/|\z)}
        # dst has abnormal absolute path,
        # like "/./", "/../", "/x/../", ...
        return dst.dup
      end

      src_path = src.scan(%r{[^/]*/})
      dst_path = dst.scan(%r{[^/]*/?})

      # discard same parts
      while !dst_path.empty? && dst_path.first == src_path.first
        src_path.shift
        dst_path.shift
      end

      tmp = dst_path.join

      # calculate
      if src_path.empty?
        if tmp.empty?
          return './'
        elsif dst_path.first.include?(':') # (see RFC2396 Section 5)
          return './' + tmp
        else
          return tmp
        end
      end

      return '../' * src_path.size + tmp
    end
    private :route_from_path
    # :startdoc:

    # :stopdoc:
    def route_from0(oth)
      oth = parser.__send__(:convert_to_uri, oth)
      if self.relative?
        raise BadURIError,
          "relative Bundler::URI: #{self}"
      end
      if oth.relative?
        raise BadURIError,
          "relative Bundler::URI: #{oth}"
      end

      if self.scheme != oth.scheme
        return self, self.dup
      end
      rel = Bundler::URI::Generic.new(nil, # it is relative Bundler::URI
                             self.userinfo, self.host, self.port,
                             nil, self.path, self.opaque,
                             self.query, self.fragment, parser)

      if rel.userinfo != oth.userinfo ||
          rel.host.to_s.downcase != oth.host.to_s.downcase ||
          rel.port != oth.port

        if self.userinfo.nil? && self.host.nil?
          return self, self.dup
        end

        rel.set_port(nil) if rel.port == oth.default_port
        return rel, rel
      end
      rel.set_userinfo(nil)
      rel.set_host(nil)
      rel.set_port(nil)

      if rel.path && rel.path == oth.path
        rel.set_path('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      elsif rel.opaque && rel.opaque == oth.opaque
        rel.set_opaque('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      end

      # you can modify `rel', but cannot `oth'.
      return oth, rel
    end
    private :route_from0
    # :startdoc:

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Calculates relative path from oth to self.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse('http://my.example.com/main.rbx?page=1')
    #   uri.route_from('http://my.example.com')
    #   #=> #<Bundler::URI::Generic /main.rbx?page=1>
    #
    def route_from(oth)
      # you can modify `rel', but cannot `oth'.
      begin
        oth, rel = route_from0(oth)
      rescue
        raise $!.class, $!.message
      end
      if oth == rel
        return rel
      end

      rel.set_path(route_from_path(oth.path, self.path))
      if rel.path == './' && self.query
        # "./?foo" -> "?foo"
        rel.set_path('')
      end

      return rel
    end

    alias - route_from

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Calculates relative path to oth from self.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse('http://my.example.com')
    #   uri.route_to('http://my.example.com/main.rbx?page=1')
    #   #=> #<Bundler::URI::Generic /main.rbx?page=1>
    #
    def route_to(oth)
      parser.__send__(:convert_to_uri, oth).route_from(self)
    end

    #
    # Returns normalized Bundler::URI.
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   Bundler::URI("HTTP://my.EXAMPLE.com").normalize
    #   #=> #<Bundler::URI::HTTP http://my.example.com/>
    #
    # Normalization here means:
    #
    # * scheme and host are converted to lowercase,
    # * an empty path component is set to "/".
    #
    def normalize
      uri = dup
      uri.normalize!
      uri
    end

    #
    # Destructive version of #normalize.
    #
    def normalize!
      if path&.empty?
        set_path('/')
      end
      if scheme && scheme != scheme.downcase
        set_scheme(self.scheme.downcase)
      end
      if host && host != host.downcase
        set_host(self.host.downcase)
      end
    end

    #
    # Constructs String from Bundler::URI.
    #
    def to_s
      str = ''.dup
      if @scheme
        str << @scheme
        str << ':'
      end

      if @opaque
        str << @opaque
      else
        if @host || %w[file postgres].include?(@scheme)
          str << '//'
        end
        if self.userinfo
          str << self.userinfo
          str << '@'
        end
        if @host
          str << @host
        end
        if @port && @port != self.default_port
          str << ':'
          str << @port.to_s
        end
        if (@host || @port) && !@path.empty? && !@path.start_with?('/')
          str << '/'
        end
        str << @path
        if @query
          str << '?'
          str << @query
        end
      end
      if @fragment
        str << '#'
        str << @fragment
      end
      str
    end
    alias to_str to_s

    #
    # Compares two URIs.
    #
    def ==(oth)
      if self.class == oth.class
        self.normalize.component_ary == oth.normalize.component_ary
      else
        false
      end
    end

    # Returns the hash value.
    def hash
      self.component_ary.hash
    end

    # Compares with _oth_ for Hash.
    def eql?(oth)
      self.class == oth.class &&
      parser == oth.parser &&
      self.component_ary.eql?(oth.component_ary)
    end

    # Returns an Array of the components defined from the COMPONENT Array.
    def component_ary
      component.collect do |x|
        self.__send__(x)
      end
    end
    protected :component_ary

    # == Args
    #
    # +components+::
    #    Multiple Symbol arguments defined in Bundler::URI::HTTP.
    #
    # == Description
    #
    # Selects specified components from Bundler::URI.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse('http://myuser:mypass@my.example.com/test.rbx')
    #   uri.select(:userinfo, :host, :path)
    #   # => ["myuser:mypass", "my.example.com", "/test.rbx"]
    #
    def select(*components)
      components.collect do |c|
        if component.include?(c)
          self.__send__(c)
        else
          raise ArgumentError,
            "expected of components of #{self.class} (#{self.class.component.join(', ')})"
        end
      end
    end

    def inspect # :nodoc:
      "#<#{self.class} #{self}>"
    end

    #
    # == Args
    #
    # +v+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Attempts to parse other Bundler::URI +oth+,
    # returns [parsed_oth, self].
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.coerce("http://foo.com")
    #   #=> [#<Bundler::URI::HTTP http://foo.com>, #<Bundler::URI::HTTP http://my.example.com>]
    #
    def coerce(oth)
      case oth
      when String
        oth = parser.parse(oth)
      else
        super
      end

      return oth, self
    end

    # Returns a proxy Bundler::URI.
    # The proxy Bundler::URI is obtained from environment variables such as http_proxy,
    # ftp_proxy, no_proxy, etc.
    # If there is no proper proxy, nil is returned.
    #
    # If the optional parameter +env+ is specified, it is used instead of ENV.
    #
    # Note that capitalized variables (HTTP_PROXY, FTP_PROXY, NO_PROXY, etc.)
    # are examined, too.
    #
    # But http_proxy and HTTP_PROXY is treated specially under CGI environment.
    # It's because HTTP_PROXY may be set by Proxy: header.
    # So HTTP_PROXY is not used.
    # http_proxy is not used too if the variable is case insensitive.
    # CGI_HTTP_PROXY can be used instead.
    def find_proxy(env=ENV)
      raise BadURIError, "relative Bundler::URI: #{self}" if self.relative?
      name = self.scheme.downcase + '_proxy'
      proxy_uri = nil
      if name == 'http_proxy' && env.include?('REQUEST_METHOD') # CGI?
        # HTTP_PROXY conflicts with *_proxy for proxy settings and
        # HTTP_* for header information in CGI.
        # So it should be careful to use it.
        pairs = env.reject {|k, v| /\Ahttp_proxy\z/i !~ k }
        case pairs.length
        when 0 # no proxy setting anyway.
          proxy_uri = nil
        when 1
          k, _ = pairs.shift
          if k == 'http_proxy' && env[k.upcase] == nil
            # http_proxy is safe to use because ENV is case sensitive.
            proxy_uri = env[name]
          else
            proxy_uri = nil
          end
        else # http_proxy is safe to use because ENV is case sensitive.
          proxy_uri = env.to_hash[name]
        end
        if !proxy_uri
          # Use CGI_HTTP_PROXY.  cf. libwww-perl.
          proxy_uri = env["CGI_#{name.upcase}"]
        end
      elsif name == 'http_proxy'
        if RUBY_ENGINE == 'jruby' && p_addr = ENV_JAVA['http.proxyHost']
          p_port = ENV_JAVA['http.proxyPort']
          if p_user = ENV_JAVA['http.proxyUser']
            p_pass = ENV_JAVA['http.proxyPass']
            proxy_uri = "http://#{p_user}:#{p_pass}@#{p_addr}:#{p_port}"
          else
            proxy_uri = "http://#{p_addr}:#{p_port}"
          end
        else
          unless proxy_uri = env[name]
            if proxy_uri = env[name.upcase]
              warn 'The environment variable HTTP_PROXY is discouraged.  Use http_proxy.', uplevel: 1
            end
          end
        end
      else
        proxy_uri = env[name] || env[name.upcase]
      end

      if proxy_uri.nil? || proxy_uri.empty?
        return nil
      end

      if self.hostname
        begin
          addr = IPSocket.getaddress(self.hostname)
          return nil if /\A127\.|\A::1\z/ =~ addr
        rescue SocketError
        end
      end

      name = 'no_proxy'
      if no_proxy = env[name] || env[name.upcase]
        return nil unless Bundler::URI::Generic.use_proxy?(self.hostname, addr, self.port, no_proxy)
      end
      Bundler::URI.parse(proxy_uri)
    end

    def self.use_proxy?(hostname, addr, port, no_proxy) # :nodoc:
      hostname = hostname.downcase
      dothostname = ".#{hostname}"
      no_proxy.scan(/([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|
        if !p_port || port == p_port.to_i
          if p_host.start_with?('.')
            return false if hostname.end_with?(p_host.downcase)
          else
            return false if dothostname.end_with?(".#{p_host.downcase}")
          end
          if addr
            begin
              return false if IPAddr.new(p_host).include?(addr)
            rescue IPAddr::InvalidAddressError
              next
            end
          end
        end
      }
      true
    end
  end
end
PK*J[�����Nshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rbnu�[���# frozen_string_literal: true
module Bundler::URI
  class RFC3986_Parser # :nodoc:
    # Bundler::URI defined in RFC3986
    HOST = %r[
      (?<IP-literal>\[(?:
          (?<IPv6address>
            (?:\h{1,4}:){6}
            (?<ls32>\h{1,4}:\h{1,4}
            | (?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)
                \.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>)
            )
          | ::(?:\h{1,4}:){5}\g<ls32>
          | \h{1,4}?::(?:\h{1,4}:){4}\g<ls32>
          | (?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>
          | (?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>
          | (?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>
          | (?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>
          | (?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}
          | (?:(?:\h{1,4}:){,6}\h{1,4})?::
          )
        | (?<IPvFuture>v\h++\.[!$&-.0-9:;=A-Z_a-z~]++)
        )\])
    | \g<IPv4address>
    | (?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*+)
    ]x

    USERINFO = /(?:%\h\h|[!$&-.0-9:;=A-Z_a-z~])*+/

    SCHEME = %r[[A-Za-z][+\-.0-9A-Za-z]*+].source
    SEG = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/])].source
    SEG_NC = %r[(?:%\h\h|[!$&-.0-9;=@A-Z_a-z~])].source
    FRAGMENT = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+].source

    RFC3986_URI = %r[\A
    (?<seg>#{SEG}){0}
    (?<Bundler::URI>
      (?<scheme>#{SCHEME}):
      (?<hier-part>//
        (?<authority>
          (?:(?<userinfo>#{USERINFO.source})@)?
          (?<host>#{HOST.source.delete(" \n")})
          (?::(?<port>\d*+))?
        )
        (?<path-abempty>(?:/\g<seg>*+)?)
      | (?<path-absolute>/((?!/)\g<seg>++)?)
      | (?<path-rootless>(?!/)\g<seg>++)
      | (?<path-empty>)
      )
      (?:\?(?<query>[^\#]*+))?
      (?:\#(?<fragment>#{FRAGMENT}))?
    )\z]x

    RFC3986_relative_ref = %r[\A
    (?<seg>#{SEG}){0}
    (?<relative-ref>
      (?<relative-part>//
        (?<authority>
          (?:(?<userinfo>#{USERINFO.source})@)?
          (?<host>#{HOST.source.delete(" \n")}(?<!/))?
          (?::(?<port>\d*+))?
        )
        (?<path-abempty>(?:/\g<seg>*+)?)
      | (?<path-absolute>/\g<seg>*+)
      | (?<path-noscheme>#{SEG_NC}++(?:/\g<seg>*+)?)
      | (?<path-empty>)
      )
      (?:\?(?<query>[^#]*+))?
      (?:\#(?<fragment>#{FRAGMENT}))?
    )\z]x
    attr_reader :regexp

    def initialize
      @regexp = default_regexp.each_value(&:freeze).freeze
    end

    def split(uri) #:nodoc:
      begin
        uri = uri.to_str
      rescue NoMethodError
        raise InvalidURIError, "bad Bundler::URI (is not Bundler::URI?): #{uri.inspect}"
      end
      uri.ascii_only? or
        raise InvalidURIError, "Bundler::URI must be ascii only #{uri.dump}"
      if m = RFC3986_URI.match(uri)
        query = m["query"]
        scheme = m["scheme"]
        opaque = m["path-rootless"]
        if opaque
          opaque << "?#{query}" if query
          [ scheme,
            nil, # userinfo
            nil, # host
            nil, # port
            nil, # registry
            nil, # path
            opaque,
            nil, # query
            m["fragment"]
          ]
        else # normal
          [ scheme,
            m["userinfo"],
            m["host"],
            m["port"],
            nil, # registry
            (m["path-abempty"] ||
             m["path-absolute"] ||
             m["path-empty"]),
            nil, # opaque
            query,
            m["fragment"]
          ]
        end
      elsif m = RFC3986_relative_ref.match(uri)
        [ nil, # scheme
          m["userinfo"],
          m["host"],
          m["port"],
          nil, # registry,
          (m["path-abempty"] ||
           m["path-absolute"] ||
           m["path-noscheme"] ||
           m["path-empty"]),
          nil, # opaque
          m["query"],
          m["fragment"]
        ]
      else
        raise InvalidURIError, "bad Bundler::URI (is not Bundler::URI?): #{uri.inspect}"
      end
    end

    def parse(uri) # :nodoc:
      Bundler::URI.for(*self.split(uri), self)
    end

    def join(*uris) # :nodoc:
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    # Compatibility for RFC2396 parser
    def extract(str, schemes = nil, &block) # :nodoc:
      warn "Bundler::URI::RFC3986_PARSER.extract is obsolete. Use Bundler::URI::RFC2396_PARSER.extract explicitly.", uplevel: 1 if $VERBOSE
      RFC2396_PARSER.extract(str, schemes, &block)
    end

    # Compatibility for RFC2396 parser
    def make_regexp(schemes = nil) # :nodoc:
      warn "Bundler::URI::RFC3986_PARSER.make_regexp is obsolete. Use Bundler::URI::RFC2396_PARSER.make_regexp explicitly.", uplevel: 1 if $VERBOSE
      RFC2396_PARSER.make_regexp(schemes)
    end

    # Compatibility for RFC2396 parser
    def escape(str, unsafe = nil) # :nodoc:
      warn "Bundler::URI::RFC3986_PARSER.escape is obsolete. Use Bundler::URI::RFC2396_PARSER.escape explicitly.", uplevel: 1 if $VERBOSE
      unsafe ? RFC2396_PARSER.escape(str, unsafe) : RFC2396_PARSER.escape(str)
    end

    # Compatibility for RFC2396 parser
    def unescape(str, escaped = nil) # :nodoc:
      warn "Bundler::URI::RFC3986_PARSER.unescape is obsolete. Use Bundler::URI::RFC2396_PARSER.unescape explicitly.", uplevel: 1 if $VERBOSE
      escaped ? RFC2396_PARSER.unescape(str, escaped) : RFC2396_PARSER.unescape(str)
    end

    @@to_s = Kernel.instance_method(:to_s)
    if @@to_s.respond_to?(:bind_call)
      def inspect
        @@to_s.bind_call(self)
      end
    else
      def inspect
        @@to_s.bind(self).call
      end
    end

    private

    def default_regexp # :nodoc:
      {
        SCHEME: %r[\A#{SCHEME}\z]o,
        USERINFO: %r[\A#{USERINFO}\z]o,
        HOST: %r[\A#{HOST}\z]o,
        ABS_PATH: %r[\A/#{SEG}*+\z]o,
        REL_PATH: %r[\A(?!/)#{SEG}++\z]o,
        QUERY: %r[\A(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+\z],
        FRAGMENT: %r[\A#{FRAGMENT}\z]o,
        OPAQUE: %r[\A(?:[^/].*)?\z],
        PORT: /\A[\x09\x0a\x0c\x0d ]*+\d*[\x09\x0a\x0c\x0d ]*\z/,
      }
    end

    def convert_to_uri(uri)
      if uri.is_a?(Bundler::URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected Bundler::URI object or Bundler::URI string)"
      end
    end

  end # class Parser
end # module Bundler::URI
PK*J[N9QERREshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/https.rbnu�[���# frozen_string_literal: false
# = uri/https.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'http'

module Bundler::URI

  # The default port for HTTPS URIs is 443, and the scheme is 'https:' rather
  # than 'http:'. Other than that, HTTPS URIs are identical to HTTP URIs;
  # see Bundler::URI::HTTP.
  class HTTPS < HTTP
    # A Default port of 443 for Bundler::URI::HTTPS
    DEFAULT_PORT = 443
  end

  register_scheme 'HTTPS', HTTPS
end
PK*J[�䌝��Gshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/version.rbnu�[���module Bundler::URI
  # :stopdoc:
  VERSION_CODE = '010003'.freeze
  VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
  # :startdoc:
end
PK*J[P�N�##Cshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ftp.rbnu�[���# frozen_string_literal: false
# = uri/ftp.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # FTP Bundler::URI syntax is defined by RFC1738 section 3.2.
  #
  # This class will be redesigned because of difference of implementations;
  # the structure of its path. draft-hoffman-ftp-uri-04 is a draft but it
  # is a good summary about the de facto spec.
  # https://datatracker.ietf.org/doc/html/draft-hoffman-ftp-uri-04
  #
  class FTP < Generic
    # A Default port of 21 for Bundler::URI::FTP.
    DEFAULT_PORT = 21

    #
    # An Array of the available components for Bundler::URI::FTP.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port,
      :path, :typecode
    ].freeze

    #
    # Typecode is "a", "i", or "d".
    #
    # * "a" indicates a text file (the FTP command was ASCII)
    # * "i" indicates a binary file (FTP command IMAGE)
    # * "d" indicates the contents of a directory should be displayed
    #
    TYPECODE = ['a', 'i', 'd'].freeze

    # Typecode prefix ";type=".
    TYPECODE_PREFIX = ';type='.freeze

    def self.new2(user, password, host, port, path,
                  typecode = nil, arg_check = true) # :nodoc:
      # Do not use this method!  Not tested.  [Bug #7301]
      # This methods remains just for compatibility,
      # Keep it undocumented until the active maintainer is assigned.
      typecode = nil if typecode.size == 0
      if typecode && !TYPECODE.include?(typecode)
        raise ArgumentError,
          "bad typecode is specified: #{typecode}"
      end

      # do escape

      self.new('ftp',
               [user, password],
               host, port, nil,
               typecode ? path + TYPECODE_PREFIX + typecode : path,
               nil, nil, nil, arg_check)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::FTP object from components, with syntax checking.
    #
    # The components accepted are +userinfo+, +host+, +port+, +path+, and
    # +typecode+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, typecode]</code>.
    #
    # If the path supplied is absolute, it will be escaped in order to
    # make it absolute in the Bundler::URI.
    #
    # Examples:
    #
    #     require 'bundler/vendor/uri/lib/uri'
    #
    #     uri1 = Bundler::URI::FTP.build(['user:password', 'ftp.example.com', nil,
    #       '/path/file.zip', 'i'])
    #     uri1.to_s  # => "ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=i"
    #
    #     uri2 = Bundler::URI::FTP.build({:host => 'ftp.example.com',
    #       :path => 'ruby/src'})
    #     uri2.to_s  # => "ftp://ftp.example.com/ruby/src"
    #
    def self.build(args)

      # Fix the incoming path to be generic URL syntax
      # FTP path  ->  URL path
      # foo/bar       /foo/bar
      # /foo/bar      /%2Ffoo/bar
      #
      if args.kind_of?(Array)
        args[3] = '/' + args[3].sub(/^\//, '%2F')
      else
        args[:path] = '/' + args[:path].sub(/^\//, '%2F')
      end

      tmp = Util::make_components_hash(self, args)

      if tmp[:typecode]
        if tmp[:typecode].size == 1
          tmp[:typecode] = TYPECODE_PREFIX + tmp[:typecode]
        end
        tmp[:path] << tmp[:typecode]
      end

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::FTP object from generic URL components with no
    # syntax checking.
    #
    # Unlike build(), this method does not escape the path component as
    # required by RFC1738; instead it is treated as per RFC2396.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = nil,
                   arg_check = false)
      raise InvalidURIError unless path
      path = path.sub(/^\//,'')
      path.sub!(/^%2F/,'/')
      super(scheme, userinfo, host, port, registry, path, opaque,
            query, fragment, parser, arg_check)
      @typecode = nil
      if tmp = @path.index(TYPECODE_PREFIX)
        typecode = @path[tmp + TYPECODE_PREFIX.size..-1]
        @path = @path[0..tmp - 1]

        if arg_check
          self.typecode = typecode
        else
          self.set_typecode(typecode)
        end
      end
    end

    # typecode accessor.
    #
    # See Bundler::URI::FTP::COMPONENT.
    attr_reader :typecode

    # Validates typecode +v+,
    # returns +true+ or +false+.
    #
    def check_typecode(v)
      if TYPECODE.include?(v)
        return true
      else
        raise InvalidComponentError,
          "bad typecode(expected #{TYPECODE.join(', ')}): #{v}"
      end
    end
    private :check_typecode

    # Private setter for the typecode +v+.
    #
    # See also Bundler::URI::FTP.typecode=.
    #
    def set_typecode(v)
      @typecode = v
    end
    protected :set_typecode

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the typecode +v+
    # (with validation).
    #
    # See also Bundler::URI::FTP.check_typecode.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("ftp://john@ftp.example.com/my_file.img")
    #   #=> #<Bundler::URI::FTP ftp://john@ftp.example.com/my_file.img>
    #   uri.typecode = "i"
    #   uri
    #   #=> #<Bundler::URI::FTP ftp://john@ftp.example.com/my_file.img;type=i>
    #
    def typecode=(typecode)
      check_typecode(typecode)
      set_typecode(typecode)
      typecode
    end

    def merge(oth) # :nodoc:
      tmp = super(oth)
      if self != tmp
        tmp.set_typecode(oth.typecode)
      end

      return tmp
    end

    # Returns the path from an FTP Bundler::URI.
    #
    # RFC 1738 specifically states that the path for an FTP Bundler::URI does not
    # include the / which separates the Bundler::URI path from the Bundler::URI host. Example:
    #
    # <code>ftp://ftp.example.com/pub/ruby</code>
    #
    # The above Bundler::URI indicates that the client should connect to
    # ftp.example.com then cd to pub/ruby from the initial login directory.
    #
    # If you want to cd to an absolute directory, you must include an
    # escaped / (%2F) in the path. Example:
    #
    # <code>ftp://ftp.example.com/%2Fpub/ruby</code>
    #
    # This method will then return "/pub/ruby".
    #
    def path
      return @path.sub(/^\//,'').sub(/^%2F/,'/')
    end

    # Private setter for the path of the Bundler::URI::FTP.
    def set_path(v)
      super("/" + v.sub(/^\//, "%2F"))
    end
    protected :set_path

    # Returns a String representation of the Bundler::URI::FTP.
    def to_s
      save_path = nil
      if @typecode
        save_path = @path
        @path = @path + TYPECODE_PREFIX + @typecode
      end
      str = super
      if @typecode
        @path = save_path
      end

      return str
    end
  end

  register_scheme 'FTP', FTP
end
PK*J[�"�F�FNshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rbnu�[���# frozen_string_literal: false
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

module Bundler::URI
  #
  # Includes Bundler::URI::REGEXP::PATTERN
  #
  module RFC2396_REGEXP
    #
    # Patterns used to parse Bundler::URI's
    #
    module PATTERN
      # :stopdoc:

      # RFC 2396 (Bundler::URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # alpha         = lowalpha | upalpha
      ALPHA = "a-zA-Z"
      # alphanum      = alpha | digit
      ALNUM = "#{ALPHA}\\d"

      # hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" |
      #                         "a" | "b" | "c" | "d" | "e" | "f"
      HEX     = "a-fA-F\\d"
      # escaped       = "%" hex hex
      ESCAPED = "%[#{HEX}]{2}"
      # mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
      #                 "(" | ")"
      # unreserved    = alphanum | mark
      UNRESERVED = "\\-_.!~*'()#{ALNUM}"
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | ","
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | "," | "[" | "]" (RFC 2732)
      RESERVED = ";/?:@&=+$,\\[\\]"

      # domainlabel   = alphanum | alphanum *( alphanum | "-" ) alphanum
      DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # toplabel      = alpha | alpha *( alphanum | "-" ) alphanum
      TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"

      # :startdoc:
    end # PATTERN

    # :startdoc:
  end # REGEXP

  # Class that parses String's into Bundler::URI's.
  #
  # It contains a Hash set of patterns and Regexp's that match and validate.
  #
  class RFC2396_Parser
    include RFC2396_REGEXP

    #
    # == Synopsis
    #
    #   Bundler::URI::Parser.new([opts])
    #
    # == Args
    #
    # The constructor accepts a hash as options for parser.
    # Keys of options are pattern names of Bundler::URI components
    # and values of options are pattern strings.
    # The constructor generates set of regexps for parsing URIs.
    #
    # You can use the following keys:
    #
    #   * :ESCAPED (Bundler::URI::PATTERN::ESCAPED in default)
    #   * :UNRESERVED (Bundler::URI::PATTERN::UNRESERVED in default)
    #   * :DOMLABEL (Bundler::URI::PATTERN::DOMLABEL in default)
    #   * :TOPLABEL (Bundler::URI::PATTERN::TOPLABEL in default)
    #   * :HOSTNAME (Bundler::URI::PATTERN::HOSTNAME in default)
    #
    # == Examples
    #
    #   p = Bundler::URI::Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
    #   u = p.parse("http://example.jp/%uABCD") #=> #<Bundler::URI::HTTP http://example.jp/%uABCD>
    #   Bundler::URI.parse(u.to_s) #=> raises Bundler::URI::InvalidURIError
    #
    #   s = "http://example.com/ABCD"
    #   u1 = p.parse(s) #=> #<Bundler::URI::HTTP http://example.com/ABCD>
    #   u2 = Bundler::URI.parse(s) #=> #<Bundler::URI::HTTP http://example.com/ABCD>
    #   u1 == u2 #=> true
    #   u1.eql?(u2) #=> false
    #
    def initialize(opts = {})
      @pattern = initialize_pattern(opts)
      @pattern.each_value(&:freeze)
      @pattern.freeze

      @regexp = initialize_regexp(@pattern)
      @regexp.each_value(&:freeze)
      @regexp.freeze
    end

    # The Hash of patterns.
    #
    # See also Bundler::URI::Parser.initialize_pattern.
    attr_reader :pattern

    # The Hash of Regexp.
    #
    # See also Bundler::URI::Parser.initialize_regexp.
    attr_reader :regexp

    # Returns a split Bundler::URI against +regexp[:ABS_URI]+.
    def split(uri)
      case uri
      when ''
        # null uri

      when @regexp[:ABS_URI]
        scheme, opaque, userinfo, host, port,
          registry, path, query, fragment = $~[1..-1]

        # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # absoluteURI   = scheme ":" ( hier_part | opaque_part )
        # hier_part     = ( net_path | abs_path ) [ "?" query ]
        # opaque_part   = uric_no_slash *uric

        # abs_path      = "/"  path_segments
        # net_path      = "//" authority [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

        if !scheme
          raise InvalidURIError,
            "bad Bundler::URI (absolute but no scheme): #{uri}"
        end
        if !opaque && (!path && (!host && !registry))
          raise InvalidURIError,
            "bad Bundler::URI (absolute but no path): #{uri}"
        end

      when @regexp[:REL_URI]
        scheme = nil
        opaque = nil

        userinfo, host, port, registry,
          rel_segment, abs_path, query, fragment = $~[1..-1]
        if rel_segment && abs_path
          path = rel_segment + abs_path
        elsif rel_segment
          path = rel_segment
        elsif abs_path
          path = abs_path
        end

        # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]

        # net_path      = "//" authority [ abs_path ]
        # abs_path      = "/"  path_segments
        # rel_path      = rel_segment [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

      else
        raise InvalidURIError, "bad Bundler::URI (is not Bundler::URI?): #{uri}"
      end

      path = '' if !path && !opaque # (see RFC2396 Section 5.2)
      ret = [
        scheme,
        userinfo, host, port,         # X
        registry,                     # X
        path,                         # Y
        opaque,                       # Y
        query,
        fragment
      ]
      return ret
    end

    #
    # == Args
    #
    # +uri+::
    #    String
    #
    # == Description
    #
    # Parses +uri+ and constructs either matching Bundler::URI scheme object
    # (File, FTP, HTTP, HTTPS, LDAP, LDAPS, or MailTo) or Bundler::URI::Generic.
    #
    # == Usage
    #
    #   p = Bundler::URI::Parser.new
    #   p.parse("ldap://ldap.example.com/dc=example?user=john")
    #   #=> #<Bundler::URI::LDAP ldap://ldap.example.com/dc=example?user=john>
    #
    def parse(uri)
      Bundler::URI.for(*self.split(uri), self)
    end

    #
    # == Args
    #
    # +uris+::
    #    an Array of Strings
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    #
    def join(*uris)
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    #
    # :call-seq:
    #   extract( str )
    #   extract( str, schemes )
    #   extract( str, schemes ) {|item| block }
    #
    # == Args
    #
    # +str+::
    #    String to search
    # +schemes+::
    #    Patterns to apply to +str+
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    # If no +block+ given, then returns the result,
    # else it calls +block+ for each element in result.
    #
    # See also Bundler::URI::Parser.make_regexp.
    #
    def extract(str, schemes = nil)
      if block_given?
        str.scan(make_regexp(schemes)) { yield $& }
        nil
      else
        result = []
        str.scan(make_regexp(schemes)) { result.push $& }
        result
      end
    end

    # Returns Regexp that is default +self.regexp[:ABS_URI_REF]+,
    # unless +schemes+ is provided. Then it is a Regexp.union with +self.pattern[:X_ABS_URI]+.
    def make_regexp(schemes = nil)
      unless schemes
        @regexp[:ABS_URI_REF]
      else
        /(?=#{Regexp.union(*schemes)}:)#{@pattern[:X_ABS_URI]}/x
      end
    end

    #
    # :call-seq:
    #   escape( str )
    #   escape( str, unsafe )
    #
    # == Args
    #
    # +str+::
    #    String to make safe
    # +unsafe+::
    #    Regexp to apply. Defaults to +self.regexp[:UNSAFE]+
    #
    # == Description
    #
    # Constructs a safe String from +str+, removing unsafe characters,
    # replacing them with codes.
    #
    def escape(str, unsafe = @regexp[:UNSAFE])
      unless unsafe.kind_of?(Regexp)
        # perhaps unsafe is String object
        unsafe = Regexp.new("[#{Regexp.quote(unsafe)}]", false)
      end
      str.gsub(unsafe) do
        us = $&
        tmp = ''
        us.each_byte do |uc|
          tmp << sprintf('%%%02X', uc)
        end
        tmp
      end.force_encoding(Encoding::US_ASCII)
    end

    #
    # :call-seq:
    #   unescape( str )
    #   unescape( str, escaped )
    #
    # == Args
    #
    # +str+::
    #    String to remove escapes from
    # +escaped+::
    #    Regexp to apply. Defaults to +self.regexp[:ESCAPED]+
    #
    # == Description
    #
    # Removes escapes from +str+.
    #
    def unescape(str, escaped = @regexp[:ESCAPED])
      enc = str.encoding
      enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
      str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
    end

    TO_S = Kernel.instance_method(:to_s) # :nodoc:
    if TO_S.respond_to?(:bind_call)
      def inspect # :nodoc:
        TO_S.bind_call(self)
      end
    else
      def inspect # :nodoc:
        TO_S.bind(self).call
      end
    end

    private

    # Constructs the default Hash of patterns.
    def initialize_pattern(opts = {})
      ret = {}
      ret[:ESCAPED] = escaped = (opts.delete(:ESCAPED) || PATTERN::ESCAPED)
      ret[:UNRESERVED] = unreserved = opts.delete(:UNRESERVED) || PATTERN::UNRESERVED
      ret[:RESERVED] = reserved = opts.delete(:RESERVED) || PATTERN::RESERVED
      ret[:DOMLABEL] = opts.delete(:DOMLABEL) || PATTERN::DOMLABEL
      ret[:TOPLABEL] = opts.delete(:TOPLABEL) || PATTERN::TOPLABEL
      ret[:HOSTNAME] = hostname = opts.delete(:HOSTNAME)

      # RFC 2396 (Bundler::URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # uric          = reserved | unreserved | escaped
      ret[:URIC] = uric = "(?:[#{unreserved}#{reserved}]|#{escaped})"
      # uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
      #                 "&" | "=" | "+" | "$" | ","
      ret[:URIC_NO_SLASH] = uric_no_slash = "(?:[#{unreserved};?:@&=+$,]|#{escaped})"
      # query         = *uric
      ret[:QUERY] = query = "#{uric}*"
      # fragment      = *uric
      ret[:FRAGMENT] = fragment = "#{uric}*"

      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      # reg-name      = *( unreserved / pct-encoded / sub-delims ) # RFC3986
      unless hostname
        ret[:HOSTNAME] = hostname = "(?:[a-zA-Z0-9\\-.]|%\\h\\h)+"
      end

      # RFC 2373, APPENDIX B:
      # IPv6address = hexpart [ ":" IPv4address ]
      # IPv4address   = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      # hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
      # hexseq  = hex4 *( ":" hex4)
      # hex4    = 1*4HEXDIG
      #
      # XXX: This definition has a flaw. "::" + IPv4address must be
      # allowed too.  Here is a replacement.
      #
      # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      ret[:IPV4ADDR] = ipv4addr = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
      # hex4     = 1*4HEXDIG
      hex4 = "[#{PATTERN::HEX}]{1,4}"
      # lastpart = hex4 | IPv4address
      lastpart = "(?:#{hex4}|#{ipv4addr})"
      # hexseq1  = *( hex4 ":" ) hex4
      hexseq1 = "(?:#{hex4}:)*#{hex4}"
      # hexseq2  = *( hex4 ":" ) lastpart
      hexseq2 = "(?:#{hex4}:)*#{lastpart}"
      # IPv6address = hexseq2 | [ hexseq1 ] "::" [ hexseq2 ]
      ret[:IPV6ADDR] = ipv6addr = "(?:#{hexseq2}|(?:#{hexseq1})?::(?:#{hexseq2})?)"

      # IPv6prefix  = ( hexseq1 | [ hexseq1 ] "::" [ hexseq1 ] ) "/" 1*2DIGIT
      # unused

      # ipv6reference = "[" IPv6address "]" (RFC 2732)
      ret[:IPV6REF] = ipv6ref = "\\[#{ipv6addr}\\]"

      # host          = hostname | IPv4address
      # host          = hostname | IPv4address | IPv6reference (RFC 2732)
      ret[:HOST] = host = "(?:#{hostname}|#{ipv4addr}|#{ipv6ref})"
      # port          = *digit
      ret[:PORT] = port = '\d*'
      # hostport      = host [ ":" port ]
      ret[:HOSTPORT] = hostport = "#{host}(?::#{port})?"

      # userinfo      = *( unreserved | escaped |
      #                    ";" | ":" | "&" | "=" | "+" | "$" | "," )
      ret[:USERINFO] = userinfo = "(?:[#{unreserved};:&=+$,]|#{escaped})*"

      # pchar         = unreserved | escaped |
      #                 ":" | "@" | "&" | "=" | "+" | "$" | ","
      pchar = "(?:[#{unreserved}:@&=+$,]|#{escaped})"
      # param         = *pchar
      param = "#{pchar}*"
      # segment       = *pchar *( ";" param )
      segment = "#{pchar}*(?:;#{param})*"
      # path_segments = segment *( "/" segment )
      ret[:PATH_SEGMENTS] = path_segments = "#{segment}(?:/#{segment})*"

      # server        = [ [ userinfo "@" ] hostport ]
      server = "(?:#{userinfo}@)?#{hostport}"
      # reg_name      = 1*( unreserved | escaped | "$" | "," |
      #                     ";" | ":" | "@" | "&" | "=" | "+" )
      ret[:REG_NAME] = reg_name = "(?:[#{unreserved}$,;:@&=+]|#{escaped})+"
      # authority     = server | reg_name
      authority = "(?:#{server}|#{reg_name})"

      # rel_segment   = 1*( unreserved | escaped |
      #                     ";" | "@" | "&" | "=" | "+" | "$" | "," )
      ret[:REL_SEGMENT] = rel_segment = "(?:[#{unreserved};@&=+$,]|#{escaped})+"

      # scheme        = alpha *( alpha | digit | "+" | "-" | "." )
      ret[:SCHEME] = scheme = "[#{PATTERN::ALPHA}][\\-+.#{PATTERN::ALPHA}\\d]*"

      # abs_path      = "/"  path_segments
      ret[:ABS_PATH] = abs_path = "/#{path_segments}"
      # rel_path      = rel_segment [ abs_path ]
      ret[:REL_PATH] = rel_path = "#{rel_segment}(?:#{abs_path})?"
      # net_path      = "//" authority [ abs_path ]
      ret[:NET_PATH] = net_path = "//#{authority}(?:#{abs_path})?"

      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      ret[:HIER_PART] = hier_part = "(?:#{net_path}|#{abs_path})(?:\\?(?:#{query}))?"
      # opaque_part   = uric_no_slash *uric
      ret[:OPAQUE_PART] = opaque_part = "#{uric_no_slash}#{uric}*"

      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      ret[:ABS_URI] = abs_uri = "#{scheme}:(?:#{hier_part}|#{opaque_part})"
      # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
      ret[:REL_URI] = rel_uri = "(?:#{net_path}|#{abs_path}|#{rel_path})(?:\\?#{query})?"

      # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
      ret[:URI_REF] = "(?:#{abs_uri}|#{rel_uri})?(?:##{fragment})?"

      ret[:X_ABS_URI] = "
        (#{scheme}):                           (?# 1: scheme)
        (?:
           (#{opaque_part})                    (?# 2: opaque)
        |
           (?:(?:
             //(?:
                 (?:(?:(#{userinfo})@)?        (?# 3: userinfo)
                   (?:(#{host})(?::(\\d*))?))? (?# 4: host, 5: port)
               |
                 (#{reg_name})                 (?# 6: registry)
               )
             |
             (?!//))                           (?# XXX: '//' is the mark for hostport)
             (#{abs_path})?                    (?# 7: path)
           )(?:\\?(#{query}))?                 (?# 8: query)
        )
        (?:\\#(#{fragment}))?                  (?# 9: fragment)
      "

      ret[:X_REL_URI] = "
        (?:
          (?:
            //
            (?:
              (?:(#{userinfo})@)?       (?# 1: userinfo)
                (#{host})?(?::(\\d*))?  (?# 2: host, 3: port)
            |
              (#{reg_name})             (?# 4: registry)
            )
          )
        |
          (#{rel_segment})              (?# 5: rel_segment)
        )?
        (#{abs_path})?                  (?# 6: abs_path)
        (?:\\?(#{query}))?              (?# 7: query)
        (?:\\#(#{fragment}))?           (?# 8: fragment)
      "

      ret
    end

    # Constructs the default Hash of Regexp's.
    def initialize_regexp(pattern)
      ret = {}

      # for Bundler::URI::split
      ret[:ABS_URI] = Regexp.new('\A\s*+' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
      ret[:REL_URI] = Regexp.new('\A\s*+' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)

      # for Bundler::URI::extract
      ret[:URI_REF]     = Regexp.new(pattern[:URI_REF])
      ret[:ABS_URI_REF] = Regexp.new(pattern[:X_ABS_URI], Regexp::EXTENDED)
      ret[:REL_URI_REF] = Regexp.new(pattern[:X_REL_URI], Regexp::EXTENDED)

      # for Bundler::URI::escape/unescape
      ret[:ESCAPED] = Regexp.new(pattern[:ESCAPED])
      ret[:UNSAFE]  = Regexp.new("[^#{pattern[:UNRESERVED]}#{pattern[:RESERVED]}]")

      # for Generic#initialize
      ret[:SCHEME]   = Regexp.new("\\A#{pattern[:SCHEME]}\\z")
      ret[:USERINFO] = Regexp.new("\\A#{pattern[:USERINFO]}\\z")
      ret[:HOST]     = Regexp.new("\\A#{pattern[:HOST]}\\z")
      ret[:PORT]     = Regexp.new("\\A#{pattern[:PORT]}\\z")
      ret[:OPAQUE]   = Regexp.new("\\A#{pattern[:OPAQUE_PART]}\\z")
      ret[:REGISTRY] = Regexp.new("\\A#{pattern[:REG_NAME]}\\z")
      ret[:ABS_PATH] = Regexp.new("\\A#{pattern[:ABS_PATH]}\\z")
      ret[:REL_PATH] = Regexp.new("\\A#{pattern[:REL_PATH]}\\z")
      ret[:QUERY]    = Regexp.new("\\A#{pattern[:QUERY]}\\z")
      ret[:FRAGMENT] = Regexp.new("\\A#{pattern[:FRAGMENT]}\\z")

      ret
    end

    def convert_to_uri(uri)
      if uri.is_a?(Bundler::URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected Bundler::URI object or Bundler::URI string)"
      end
    end

  end # class Parser

  # Backward compatibility for Bundler::URI::REGEXP::PATTERN::*
  RFC2396_Parser.new.pattern.each_pair do |sym, str|
    unless RFC2396_REGEXP::PATTERN.const_defined?(sym, false)
      RFC2396_REGEXP::PATTERN.const_set(sym, str)
    end
  end
end # module Bundler::URI
PK*J[i7�* * Fshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/mailto.rbnu�[���# frozen_string_literal: false
# = uri/mailto.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # RFC6068, the mailto URL scheme.
  #
  class MailTo < Generic
    include RFC2396_REGEXP

    # A Default port of nil for Bundler::URI::MailTo.
    DEFAULT_PORT = nil

    # An Array of the available components for Bundler::URI::MailTo.
    COMPONENT = [ :scheme, :to, :headers ].freeze

    # :stopdoc:
    #  "hname" and "hvalue" are encodings of an RFC 822 header name and
    #  value, respectively. As with "to", all URL reserved characters must
    #  be encoded.
    #
    #  "#mailbox" is as specified in RFC 822 [RFC822]. This means that it
    #  consists of zero or more comma-separated mail addresses, possibly
    #  including "phrase" and "comment" components. Note that all URL
    #  reserved characters in "to" must be encoded: in particular,
    #  parentheses, commas, and the percent sign ("%"), which commonly occur
    #  in the "mailbox" syntax.
    #
    #  Within mailto URLs, the characters "?", "=", "&" are reserved.

    # ; RFC 6068
    # hfields      = "?" hfield *( "&" hfield )
    # hfield       = hfname "=" hfvalue
    # hfname       = *qchar
    # hfvalue      = *qchar
    # qchar        = unreserved / pct-encoded / some-delims
    # some-delims  = "!" / "$" / "'" / "(" / ")" / "*"
    #              / "+" / "," / ";" / ":" / "@"
    #
    # ; RFC3986
    # unreserved   = ALPHA / DIGIT / "-" / "." / "_" / "~"
    # pct-encoded  = "%" HEXDIG HEXDIG
    HEADER_REGEXP  = /\A(?<hfield>(?:%\h\h|[!$'-.0-;@-Z_a-z~])*=(?:%\h\h|[!$'-.0-;@-Z_a-z~])*)(?:&\g<hfield>)*\z/
    # practical regexp for email address
    # https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
    EMAIL_REGEXP = /\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/
    # :startdoc:

    #
    # == Description
    #
    # Creates a new Bundler::URI::MailTo object from components, with syntax checking.
    #
    # Components can be provided as an Array or Hash. If an Array is used,
    # the components must be supplied as <code>[to, headers]</code>.
    #
    # If a Hash is used, the keys are the component names preceded by colons.
    #
    # The headers can be supplied as a pre-encoded string, such as
    # <code>"subject=subscribe&cc=address"</code>, or as an Array of Arrays
    # like <code>[['subject', 'subscribe'], ['cc', 'address']]</code>.
    #
    # Examples:
    #
    #    require 'bundler/vendor/uri/lib/uri'
    #
    #    m1 = Bundler::URI::MailTo.build(['joe@example.com', 'subject=Ruby'])
    #    m1.to_s  # => "mailto:joe@example.com?subject=Ruby"
    #
    #    m2 = Bundler::URI::MailTo.build(['john@example.com', [['Subject', 'Ruby'], ['Cc', 'jack@example.com']]])
    #    m2.to_s  # => "mailto:john@example.com?Subject=Ruby&Cc=jack@example.com"
    #
    #    m3 = Bundler::URI::MailTo.build({:to => 'listman@example.com', :headers => [['subject', 'subscribe']]})
    #    m3.to_s  # => "mailto:listman@example.com?subject=subscribe"
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)

      case tmp[:to]
      when Array
        tmp[:opaque] = tmp[:to].join(',')
      when String
        tmp[:opaque] = tmp[:to].dup
      else
        tmp[:opaque] = ''
      end

      if tmp[:headers]
        query =
          case tmp[:headers]
          when Array
            tmp[:headers].collect { |x|
              if x.kind_of?(Array)
                x[0] + '=' + x[1..-1].join
              else
                x.to_s
              end
            }.join('&')
          when Hash
            tmp[:headers].collect { |h,v|
              h + '=' + v
            }.join('&')
          else
            tmp[:headers].to_s
          end
        unless query.empty?
          tmp[:opaque] << '?' << query
        end
      end

      super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::MailTo object from generic URL components with
    # no syntax checking.
    #
    # This method is usually called from Bundler::URI::parse, which checks
    # the validity of each component.
    #
    def initialize(*arg)
      super(*arg)

      @to = nil
      @headers = []

      # The RFC3986 parser does not normally populate opaque
      @opaque = "?#{@query}" if @query && !@opaque

      unless @opaque
        raise InvalidComponentError,
          "missing opaque part for mailto URL"
      end
      to, header = @opaque.split('?', 2)
      # allow semicolon as a addr-spec separator
      # http://support.microsoft.com/kb/820868
      unless /\A(?:[^@,;]+@[^@,;]+(?:\z|[,;]))*\z/ =~ to
        raise InvalidComponentError,
          "unrecognised opaque part for mailtoURL: #{@opaque}"
      end

      if arg[10] # arg_check
        self.to = to
        self.headers = header
      else
        set_to(to)
        set_headers(header)
      end
    end

    # The primary e-mail address of the URL, as a String.
    attr_reader :to

    # E-mail headers set by the URL, as an Array of Arrays.
    attr_reader :headers

    # Checks the to +v+ component.
    def check_to(v)
      return true unless v
      return true if v.size == 0

      v.split(/[,;]/).each do |addr|
        # check url safety as path-rootless
        if /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*\z/ !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as Bundler::URI #{addr.dump}"
        end

        # check addr-spec
        # don't s/\+/ /g
        addr.gsub!(/%\h\h/, Bundler::URI::TBLDECWWWCOMP_)
        if EMAIL_REGEXP !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as uri-escaped addr-spec #{addr.dump}"
        end
      end

      true
    end
    private :check_to

    # Private setter for to +v+.
    def set_to(v)
      @to = v
    end
    protected :set_to

    # Setter for to +v+.
    def to=(v)
      check_to(v)
      set_to(v)
      v
    end

    # Checks the headers +v+ component against either
    # * HEADER_REGEXP
    def check_headers(v)
      return true unless v
      return true if v.size == 0
      if HEADER_REGEXP !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      true
    end
    private :check_headers

    # Private setter for headers +v+.
    def set_headers(v)
      @headers = []
      if v
        v.split('&').each do |x|
          @headers << x.split(/=/, 2)
        end
      end
    end
    protected :set_headers

    # Setter for headers +v+.
    def headers=(v)
      check_headers(v)
      set_headers(v)
      v
    end

    # Constructs String from Bundler::URI.
    def to_s
      @scheme + ':' +
        if @to
          @to
        else
          ''
        end +
        if @headers.size > 0
          '?' + @headers.collect{|x| x.join('=')}.join('&')
        else
          ''
        end +
        if @fragment
          '#' + @fragment
        else
          ''
        end
    end

    # Returns the RFC822 e-mail text equivalent of the URL, as a String.
    #
    # Example:
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("mailto:ruby-list@ruby-lang.org?Subject=subscribe&cc=myaddr")
    #   uri.to_mailtext
    #   # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"
    #
    def to_mailtext
      to = Bundler::URI.decode_www_form_component(@to)
      head = ''
      body = ''
      @headers.each do |x|
        case x[0]
        when 'body'
          body = Bundler::URI.decode_www_form_component(x[1])
        when 'to'
          to << ', ' + Bundler::URI.decode_www_form_component(x[1])
        else
          head << Bundler::URI.decode_www_form_component(x[0]).capitalize + ': ' +
            Bundler::URI.decode_www_form_component(x[1])  + "\n"
        end
      end

      "To: #{to}
#{head}
#{body}
"
    end
    alias to_rfc822text to_mailtext
  end

  register_scheme 'MAILTO', MailTo
end
PK*J[K�ӎ77Cshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/wss.rbnu�[���# frozen_string_literal: false
# = uri/wss.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'ws'

module Bundler::URI

  # The default port for WSS URIs is 443, and the scheme is 'wss:' rather
  # than 'ws:'. Other than that, WSS URIs are identical to WS URIs;
  # see Bundler::URI::WS.
  class WSS < WS
    # A Default port of 443 for Bundler::URI::WSS
    DEFAULT_PORT = 443
  end

  register_scheme 'WSS', WSS
end
PK*J[�����	�	Dshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/file.rbnu�[���# frozen_string_literal: true

require_relative 'generic'

module Bundler::URI

  #
  # The "file" Bundler::URI is defined by RFC8089.
  #
  class File < Generic
    # A Default port of nil for Bundler::URI::File.
    DEFAULT_PORT = nil

    #
    # An Array of the available components for Bundler::URI::File.
    #
    COMPONENT = [
      :scheme,
      :host,
      :path
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::File object from components, with syntax checking.
    #
    # The components accepted are +host+ and +path+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, path]</code>.
    #
    # A path from e.g. the File class should be escaped before
    # being passed.
    #
    # Examples:
    #
    #     require 'bundler/vendor/uri/lib/uri'
    #
    #     uri1 = Bundler::URI::File.build(['host.example.com', '/path/file.zip'])
    #     uri1.to_s  # => "file://host.example.com/path/file.zip"
    #
    #     uri2 = Bundler::URI::File.build({:host => 'host.example.com',
    #       :path => '/ruby/src'})
    #     uri2.to_s  # => "file://host.example.com/ruby/src"
    #
    #     uri3 = Bundler::URI::File.build({:path => Bundler::URI::escape('/path/my file.txt')})
    #     uri3.to_s  # => "file:///path/my%20file.txt"
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)
      super(tmp)
    end

    # Protected setter for the host component +v+.
    #
    # See also Bundler::URI::Generic.host=.
    #
    def set_host(v)
      v = "" if v.nil? || v == "localhost"
      @host = v
    end

    # do nothing
    def set_port(v)
    end

    # raise InvalidURIError
    def check_userinfo(user)
      raise Bundler::URI::InvalidURIError, "cannot set userinfo for file Bundler::URI"
    end

    # raise InvalidURIError
    def check_user(user)
      raise Bundler::URI::InvalidURIError, "cannot set user for file Bundler::URI"
    end

    # raise InvalidURIError
    def check_password(user)
      raise Bundler::URI::InvalidURIError, "cannot set password for file Bundler::URI"
    end

    # do nothing
    def set_userinfo(v)
    end

    # do nothing
    def set_user(v)
    end

    # do nothing
    def set_password(v)
    end
  end

  register_scheme 'FILE', File
end
PK*J[+T�s	s	Bshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ws.rbnu�[���# frozen_string_literal: false
# = uri/ws.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # The syntax of WS URIs is defined in RFC6455 section 3.
  #
  # Note that the Ruby Bundler::URI library allows WS URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class WS < Generic
    # A Default port of 80 for Bundler::URI::WS.
    DEFAULT_PORT = 80

    # An Array of the available components for Bundler::URI::WS.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::WS object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, and query.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query]</code>.
    #
    # Example:
    #
    #     uri = Bundler::URI::WS.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = Bundler::URI::WS.build([nil, "www.example.com", nil, "/path", "query"])
    #
    # Currently, if passed userinfo components this method generates
    # invalid WS URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for a WS Bundler::URI, as required by Net::HTTP::Get.
    #
    # If the Bundler::URI contains a query, the full path is Bundler::URI#path + '?' + Bundler::URI#query.
    # Otherwise, the path is simply Bundler::URI#path.
    #
    # Example:
    #
    #     uri = Bundler::URI::WS.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end
  end

  register_scheme 'WS', WS
end
PK*J[#�6�m�mFshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/common.rbnu�[���# frozen_string_literal: true
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative "rfc2396_parser"
require_relative "rfc3986_parser"

module Bundler::URI
  # The default parser instance for RFC 2396.
  RFC2396_PARSER = RFC2396_Parser.new
  Ractor.make_shareable(RFC2396_PARSER) if defined?(Ractor)

  # The default parser instance for RFC 3986.
  RFC3986_PARSER = RFC3986_Parser.new
  Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor)

  # The default parser instance.
  DEFAULT_PARSER = RFC3986_PARSER
  Ractor.make_shareable(DEFAULT_PARSER) if defined?(Ractor)

  # Set the default parser instance.
  def self.parser=(parser = RFC3986_PARSER)
    remove_const(:Parser) if defined?(::Bundler::URI::Parser)
    const_set("Parser", parser.class)

    remove_const(:REGEXP) if defined?(::Bundler::URI::REGEXP)
    remove_const(:PATTERN) if defined?(::Bundler::URI::PATTERN)
    if Parser == RFC2396_Parser
      const_set("REGEXP", Bundler::URI::RFC2396_REGEXP)
      const_set("PATTERN", Bundler::URI::RFC2396_REGEXP::PATTERN)
    end

    Parser.new.regexp.each_pair do |sym, str|
      remove_const(sym) if const_defined?(sym, false)
      const_set(sym, str)
    end
  end
  self.parser = RFC3986_PARSER

  def self.const_missing(const) # :nodoc:
    if const == :REGEXP
      warn "Bundler::URI::REGEXP is obsolete. Use Bundler::URI::RFC2396_REGEXP explicitly.", uplevel: 1 if $VERBOSE
      Bundler::URI::RFC2396_REGEXP
    elsif value = RFC2396_PARSER.regexp[const]
      warn "Bundler::URI::#{const} is obsolete. Use RFC2396_PARSER.regexp[#{const.inspect}] explicitly.", uplevel: 1 if $VERBOSE
      value
    elsif value = RFC2396_Parser.const_get(const)
      warn "Bundler::URI::#{const} is obsolete. Use RFC2396_Parser::#{const} explicitly.", uplevel: 1 if $VERBOSE
      value
    else
      super
    end
  end

  module Util # :nodoc:
    def make_components_hash(klass, array_hash)
      tmp = {}
      if array_hash.kind_of?(Array) &&
          array_hash.size == klass.component.size - 1
        klass.component[1..-1].each_index do |i|
          begin
            tmp[klass.component[i + 1]] = array_hash[i].clone
          rescue TypeError
            tmp[klass.component[i + 1]] = array_hash[i]
          end
        end

      elsif array_hash.kind_of?(Hash)
        array_hash.each do |key, value|
          begin
            tmp[key] = value.clone
          rescue TypeError
            tmp[key] = value
          end
        end
      else
        raise ArgumentError,
          "expected Array of or Hash of components of #{klass} (#{klass.component[1..-1].join(', ')})"
      end
      tmp[:scheme] = klass.to_s.sub(/\A.*::/, '').downcase

      return tmp
    end
    module_function :make_components_hash
  end

  module Schemes # :nodoc:
  end
  private_constant :Schemes

  # Registers the given +klass+ as the class to be instantiated
  # when parsing a \Bundler::URI with the given +scheme+:
  #
  #   Bundler::URI.register_scheme('MS_SEARCH', Bundler::URI::Generic) # => Bundler::URI::Generic
  #   Bundler::URI.scheme_list['MS_SEARCH']                   # => Bundler::URI::Generic
  #
  # Note that after calling String#upcase on +scheme+, it must be a valid
  # constant name.
  def self.register_scheme(scheme, klass)
    Schemes.const_set(scheme.to_s.upcase, klass)
  end

  # Returns a hash of the defined schemes:
  #
  #   Bundler::URI.scheme_list
  #   # =>
  #   {"MAILTO"=>Bundler::URI::MailTo,
  #    "LDAPS"=>Bundler::URI::LDAPS,
  #    "WS"=>Bundler::URI::WS,
  #    "HTTP"=>Bundler::URI::HTTP,
  #    "HTTPS"=>Bundler::URI::HTTPS,
  #    "LDAP"=>Bundler::URI::LDAP,
  #    "FILE"=>Bundler::URI::File,
  #    "FTP"=>Bundler::URI::FTP}
  #
  # Related: Bundler::URI.register_scheme.
  def self.scheme_list
    Schemes.constants.map { |name|
      [name.to_s.upcase, Schemes.const_get(name)]
    }.to_h
  end

  INITIAL_SCHEMES = scheme_list
  private_constant :INITIAL_SCHEMES
  Ractor.make_shareable(INITIAL_SCHEMES) if defined?(Ractor)

  # Returns a new object constructed from the given +scheme+, +arguments+,
  # and +default+:
  #
  # - The new object is an instance of <tt>Bundler::URI.scheme_list[scheme.upcase]</tt>.
  # - The object is initialized by calling the class initializer
  #   using +scheme+ and +arguments+.
  #   See Bundler::URI::Generic.new.
  #
  # Examples:
  #
  #   values = ['john.doe', 'www.example.com', '123', nil, '/forum/questions/', nil, 'tag=networking&order=newest', 'top']
  #   Bundler::URI.for('https', *values)
  #   # => #<Bundler::URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #   Bundler::URI.for('foo', *values, default: Bundler::URI::HTTP)
  #   # => #<Bundler::URI::HTTP foo://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #
  def self.for(scheme, *arguments, default: Generic)
    const_name = scheme.to_s.upcase

    uri_class = INITIAL_SCHEMES[const_name]
    uri_class ||= if /\A[A-Z]\w*\z/.match?(const_name) && Schemes.const_defined?(const_name, false)
      Schemes.const_get(const_name, false)
    end
    uri_class ||= default

    return uri_class.new(scheme, *arguments)
  end

  #
  # Base class for all Bundler::URI exceptions.
  #
  class Error < StandardError; end
  #
  # Not a Bundler::URI.
  #
  class InvalidURIError < Error; end
  #
  # Not a Bundler::URI component.
  #
  class InvalidComponentError < Error; end
  #
  # Bundler::URI is valid, bad usage is not.
  #
  class BadURIError < Error; end

  # Returns a 9-element array representing the parts of the \Bundler::URI
  # formed from the string +uri+;
  # each array element is a string or +nil+:
  #
  #   names = %w[scheme userinfo host port registry path opaque query fragment]
  #   values = Bundler::URI.split('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   names.zip(values)
  #   # =>
  #   [["scheme", "https"],
  #    ["userinfo", "john.doe"],
  #    ["host", "www.example.com"],
  #    ["port", "123"],
  #    ["registry", nil],
  #    ["path", "/forum/questions/"],
  #    ["opaque", nil],
  #    ["query", "tag=networking&order=newest"],
  #    ["fragment", "top"]]
  #
  def self.split(uri)
    DEFAULT_PARSER.split(uri)
  end

  # Returns a new \Bundler::URI object constructed from the given string +uri+:
  #
  #   Bundler::URI.parse('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   # => #<Bundler::URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #   Bundler::URI.parse('http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   # => #<Bundler::URI::HTTP http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #
  # It's recommended to first ::escape string +uri+
  # if it may contain invalid Bundler::URI characters.
  #
  def self.parse(uri)
    DEFAULT_PARSER.parse(uri)
  end

  # Merges the given Bundler::URI strings +str+
  # per {RFC 2396}[https://www.rfc-editor.org/rfc/rfc2396.html].
  #
  # Each string in +str+ is converted to an
  # {RFC3986 Bundler::URI}[https://www.rfc-editor.org/rfc/rfc3986.html] before being merged.
  #
  # Examples:
  #
  #   Bundler::URI.join("http://example.com/","main.rbx")
  #   # => #<Bundler::URI::HTTP http://example.com/main.rbx>
  #
  #   Bundler::URI.join('http://example.com', 'foo')
  #   # => #<Bundler::URI::HTTP http://example.com/foo>
  #
  #   Bundler::URI.join('http://example.com', '/foo', '/bar')
  #   # => #<Bundler::URI::HTTP http://example.com/bar>
  #
  #   Bundler::URI.join('http://example.com', '/foo', 'bar')
  #   # => #<Bundler::URI::HTTP http://example.com/bar>
  #
  #   Bundler::URI.join('http://example.com', '/foo/', 'bar')
  #   # => #<Bundler::URI::HTTP http://example.com/foo/bar>
  #
  def self.join(*str)
    DEFAULT_PARSER.join(*str)
  end

  #
  # == Synopsis
  #
  #   Bundler::URI::extract(str[, schemes][,&blk])
  #
  # == Args
  #
  # +str+::
  #   String to extract URIs from.
  # +schemes+::
  #   Limit Bundler::URI matching to specific schemes.
  #
  # == Description
  #
  # Extracts URIs from a string. If block given, iterates through all matched URIs.
  # Returns nil if block given or array with matches.
  #
  # == Usage
  #
  #   require "bundler/vendor/uri/lib/uri"
  #
  #   Bundler::URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
  #   # => ["http://foo.example.com/bla", "mailto:test@example.com"]
  #
  def self.extract(str, schemes = nil, &block) # :nodoc:
    warn "Bundler::URI.extract is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.extract(str, schemes, &block)
  end

  #
  # == Synopsis
  #
  #   Bundler::URI::regexp([match_schemes])
  #
  # == Args
  #
  # +match_schemes+::
  #   Array of schemes. If given, resulting regexp matches to URIs
  #   whose scheme is one of the match_schemes.
  #
  # == Description
  #
  # Returns a Regexp object which matches to Bundler::URI-like strings.
  # The Regexp object returned by this method includes arbitrary
  # number of capture group (parentheses).  Never rely on its number.
  #
  # == Usage
  #
  #   require 'bundler/vendor/uri/lib/uri'
  #
  #   # extract first Bundler::URI from html_string
  #   html_string.slice(Bundler::URI.regexp)
  #
  #   # remove ftp URIs
  #   html_string.sub(Bundler::URI.regexp(['ftp']), '')
  #
  #   # You should not rely on the number of parentheses
  #   html_string.scan(Bundler::URI.regexp) do |*matches|
  #     p $&
  #   end
  #
  def self.regexp(schemes = nil)# :nodoc:
    warn "Bundler::URI.regexp is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.make_regexp(schemes)
  end

  TBLENCWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
  end
  TBLENCURICOMP_ = TBLENCWWWCOMP_.dup.freeze # :nodoc:
  TBLENCWWWCOMP_[' '] = '+'
  TBLENCWWWCOMP_.freeze
  TBLDECWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    h, l = i>>4, i&15
    TBLDECWWWCOMP_[-('%%%X%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%X%x' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%x' % [h, l])] = -i.chr
  end
  TBLDECWWWCOMP_['+'] = ' '
  TBLDECWWWCOMP_.freeze

  # Returns a URL-encoded string derived from the given string +str+.
  #
  # The returned string:
  #
  # - Preserves:
  #
  #   - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
  #   - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
  #     and <tt>'0'..'9'</tt>.
  #
  #   Example:
  #
  #     Bundler::URI.encode_www_form_component('*.-_azAZ09')
  #     # => "*.-_azAZ09"
  #
  # - Converts:
  #
  #   - Character <tt>' '</tt> to character <tt>'+'</tt>.
  #   - Any other character to "percent notation";
  #     the percent notation for character <i>c</i> is <tt>'%%%X' % c.ord</tt>.
  #
  #   Example:
  #
  #     Bundler::URI.encode_www_form_component('Here are some punctuation characters: ,;?:')
  #     # => "Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A"
  #
  # Encoding:
  #
  # - If +str+ has encoding Encoding::ASCII_8BIT, argument +enc+ is ignored.
  # - Otherwise +str+ is converted first to Encoding::UTF_8
  #   (with suitable character replacements),
  #   and then to encoding +enc+.
  #
  # In either case, the returned string has forced encoding Encoding::US_ASCII.
  #
  # Related: Bundler::URI.encode_uri_component (encodes <tt>' '</tt> as <tt>'%20'</tt>).
  def self.encode_www_form_component(str, enc=nil)
    _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCWWWCOMP_, str, enc)
  end

  # Returns a string decoded from the given \URL-encoded string +str+.
  #
  # The given string is first encoded as Encoding::ASCII-8BIT (using String#b),
  # then decoded (as below), and finally force-encoded to the given encoding +enc+.
  #
  # The returned string:
  #
  # - Preserves:
  #
  #   - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
  #   - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
  #     and <tt>'0'..'9'</tt>.
  #
  #   Example:
  #
  #     Bundler::URI.decode_www_form_component('*.-_azAZ09')
  #     # => "*.-_azAZ09"
  #
  # - Converts:
  #
  #   - Character <tt>'+'</tt> to character <tt>' '</tt>.
  #   - Each "percent notation" to an ASCII character.
  #
  #   Example:
  #
  #     Bundler::URI.decode_www_form_component('Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A')
  #     # => "Here are some punctuation characters: ,;?:"
  #
  # Related: Bundler::URI.decode_uri_component (preserves <tt>'+'</tt>).
  def self.decode_www_form_component(str, enc=Encoding::UTF_8)
    _decode_uri_component(/\+|%\h\h/, str, enc)
  end

  # Like Bundler::URI.encode_www_form_component, except that <tt>' '</tt> (space)
  # is encoded as <tt>'%20'</tt> (instead of <tt>'+'</tt>).
  def self.encode_uri_component(str, enc=nil)
    _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCURICOMP_, str, enc)
  end

  # Like Bundler::URI.decode_www_form_component, except that <tt>'+'</tt> is preserved.
  def self.decode_uri_component(str, enc=Encoding::UTF_8)
    _decode_uri_component(/%\h\h/, str, enc)
  end

  def self._encode_uri_component(regexp, table, str, enc)
    str = str.to_s.dup
    if str.encoding != Encoding::ASCII_8BIT
      if enc && enc != Encoding::ASCII_8BIT
        str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace)
        str.encode!(enc, fallback: ->(x){"&##{x.ord};"})
      end
      str.force_encoding(Encoding::ASCII_8BIT)
    end
    str.gsub!(regexp, table)
    str.force_encoding(Encoding::US_ASCII)
  end
  private_class_method :_encode_uri_component

  def self._decode_uri_component(regexp, str, enc)
    raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/.match?(str)
    str.b.gsub(regexp, TBLDECWWWCOMP_).force_encoding(enc)
  end
  private_class_method :_decode_uri_component

  # Returns a URL-encoded string derived from the given
  # {Enumerable}[rdoc-ref:Enumerable@Enumerable+in+Ruby+Classes]
  # +enum+.
  #
  # The result is suitable for use as form data
  # for an \HTTP request whose <tt>Content-Type</tt> is
  # <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The returned string consists of the elements of +enum+,
  # each converted to one or more URL-encoded strings,
  # and all joined with character <tt>'&'</tt>.
  #
  # Simple examples:
  #
  #   Bundler::URI.encode_www_form([['foo', 0], ['bar', 1], ['baz', 2]])
  #   # => "foo=0&bar=1&baz=2"
  #   Bundler::URI.encode_www_form({foo: 0, bar: 1, baz: 2})
  #   # => "foo=0&bar=1&baz=2"
  #
  # The returned string is formed using method Bundler::URI.encode_www_form_component,
  # which converts certain characters:
  #
  #   Bundler::URI.encode_www_form('f#o': '/', 'b-r': '$', 'b z': '@')
  #   # => "f%23o=%2F&b-r=%24&b+z=%40"
  #
  # When +enum+ is Array-like, each element +ele+ is converted to a field:
  #
  # - If +ele+ is an array of two or more elements,
  #   the field is formed from its first two elements
  #   (and any additional elements are ignored):
  #
  #     name = Bundler::URI.encode_www_form_component(ele[0], enc)
  #     value = Bundler::URI.encode_www_form_component(ele[1], enc)
  #     "#{name}=#{value}"
  #
  #   Examples:
  #
  #     Bundler::URI.encode_www_form([%w[foo bar], %w[baz bat bah]])
  #     # => "foo=bar&baz=bat"
  #     Bundler::URI.encode_www_form([['foo', 0], ['bar', :baz, 'bat']])
  #     # => "foo=0&bar=baz"
  #
  # - If +ele+ is an array of one element,
  #   the field is formed from <tt>ele[0]</tt>:
  #
  #     Bundler::URI.encode_www_form_component(ele[0])
  #
  #   Example:
  #
  #     Bundler::URI.encode_www_form([['foo'], [:bar], [0]])
  #     # => "foo&bar&0"
  #
  # - Otherwise the field is formed from +ele+:
  #
  #     Bundler::URI.encode_www_form_component(ele)
  #
  #   Example:
  #
  #     Bundler::URI.encode_www_form(['foo', :bar, 0])
  #     # => "foo&bar&0"
  #
  # The elements of an Array-like +enum+ may be mixture:
  #
  #   Bundler::URI.encode_www_form([['foo', 0], ['bar', 1, 2], ['baz'], :bat])
  #   # => "foo=0&bar=1&baz&bat"
  #
  # When +enum+ is Hash-like,
  # each +key+/+value+ pair is converted to one or more fields:
  #
  # - If +value+ is
  #   {Array-convertible}[rdoc-ref:implicit_conversion.rdoc@Array-Convertible+Objects],
  #   each element +ele+ in +value+ is paired with +key+ to form a field:
  #
  #     name = Bundler::URI.encode_www_form_component(key, enc)
  #     value = Bundler::URI.encode_www_form_component(ele, enc)
  #     "#{name}=#{value}"
  #
  #   Example:
  #
  #     Bundler::URI.encode_www_form({foo: [:bar, 1], baz: [:bat, :bam, 2]})
  #     # => "foo=bar&foo=1&baz=bat&baz=bam&baz=2"
  #
  # - Otherwise, +key+ and +value+ are paired to form a field:
  #
  #     name = Bundler::URI.encode_www_form_component(key, enc)
  #     value = Bundler::URI.encode_www_form_component(value, enc)
  #     "#{name}=#{value}"
  #
  #   Example:
  #
  #     Bundler::URI.encode_www_form({foo: 0, bar: 1, baz: 2})
  #     # => "foo=0&bar=1&baz=2"
  #
  # The elements of a Hash-like +enum+ may be mixture:
  #
  #   Bundler::URI.encode_www_form({foo: [0, 1], bar: 2})
  #   # => "foo=0&foo=1&bar=2"
  #
  def self.encode_www_form(enum, enc=nil)
    enum.map do |k,v|
      if v.nil?
        encode_www_form_component(k, enc)
      elsif v.respond_to?(:to_ary)
        v.to_ary.map do |w|
          str = encode_www_form_component(k, enc)
          unless w.nil?
            str << '='
            str << encode_www_form_component(w, enc)
          end
        end.join('&')
      else
        str = encode_www_form_component(k, enc)
        str << '='
        str << encode_www_form_component(v, enc)
      end
    end.join('&')
  end

  # Returns name/value pairs derived from the given string +str+,
  # which must be an ASCII string.
  #
  # The method may be used to decode the body of Net::HTTPResponse object +res+
  # for which <tt>res['Content-Type']</tt> is <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The returned data is an array of 2-element subarrays;
  # each subarray is a name/value pair (both are strings).
  # Each returned string has encoding +enc+,
  # and has had invalid characters removed via
  # {String#scrub}[rdoc-ref:String#scrub].
  #
  # A simple example:
  #
  #   Bundler::URI.decode_www_form('foo=0&bar=1&baz')
  #   # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
  #
  # The returned strings have certain conversions,
  # similar to those performed in Bundler::URI.decode_www_form_component:
  #
  #   Bundler::URI.decode_www_form('f%23o=%2F&b-r=%24&b+z=%40')
  #   # => [["f#o", "/"], ["b-r", "$"], ["b z", "@"]]
  #
  # The given string may contain consecutive separators:
  #
  #   Bundler::URI.decode_www_form('foo=0&&bar=1&&baz=2')
  #   # => [["foo", "0"], ["", ""], ["bar", "1"], ["", ""], ["baz", "2"]]
  #
  # A different separator may be specified:
  #
  #   Bundler::URI.decode_www_form('foo=0--bar=1--baz', separator: '--')
  #   # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
  #
  def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_: false, isindex: false)
    raise ArgumentError, "the input of #{self.name}.#{__method__} must be ASCII only string" unless str.ascii_only?
    ary = []
    return ary if str.empty?
    enc = Encoding.find(enc)
    str.b.each_line(separator) do |string|
      string.chomp!(separator)
      key, sep, val = string.partition('=')
      if isindex
        if sep.empty?
          val = key
          key = +''
        end
        isindex = false
      end

      if use__charset_ and key == '_charset_' and e = get_encoding(val)
        enc = e
        use__charset_ = false
      end

      key.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      if val
        val.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      else
        val = +''
      end

      ary << [key, val]
    end
    ary.each do |k, v|
      k.force_encoding(enc)
      k.scrub!
      v.force_encoding(enc)
      v.scrub!
    end
    ary
  end

  private
=begin command for WEB_ENCODINGS_
  curl https://encoding.spec.whatwg.org/encodings.json|
  ruby -rjson -e 'H={}
  h={
    "shift_jis"=>"Windows-31J",
    "euc-jp"=>"cp51932",
    "iso-2022-jp"=>"cp50221",
    "x-mac-cyrillic"=>"macCyrillic",
  }
  JSON($<.read).map{|x|x["encodings"]}.flatten.each{|x|
    Encoding.find(n=h.fetch(n=x["name"].downcase,n))rescue next
    x["labels"].each{|y|H[y]=n}
  }
  puts "{"
  H.each{|k,v|puts %[  #{k.dump}=>#{v.dump},]}
  puts "}"
'
=end
  WEB_ENCODINGS_ = {
    "unicode-1-1-utf-8"=>"utf-8",
    "utf-8"=>"utf-8",
    "utf8"=>"utf-8",
    "866"=>"ibm866",
    "cp866"=>"ibm866",
    "csibm866"=>"ibm866",
    "ibm866"=>"ibm866",
    "csisolatin2"=>"iso-8859-2",
    "iso-8859-2"=>"iso-8859-2",
    "iso-ir-101"=>"iso-8859-2",
    "iso8859-2"=>"iso-8859-2",
    "iso88592"=>"iso-8859-2",
    "iso_8859-2"=>"iso-8859-2",
    "iso_8859-2:1987"=>"iso-8859-2",
    "l2"=>"iso-8859-2",
    "latin2"=>"iso-8859-2",
    "csisolatin3"=>"iso-8859-3",
    "iso-8859-3"=>"iso-8859-3",
    "iso-ir-109"=>"iso-8859-3",
    "iso8859-3"=>"iso-8859-3",
    "iso88593"=>"iso-8859-3",
    "iso_8859-3"=>"iso-8859-3",
    "iso_8859-3:1988"=>"iso-8859-3",
    "l3"=>"iso-8859-3",
    "latin3"=>"iso-8859-3",
    "csisolatin4"=>"iso-8859-4",
    "iso-8859-4"=>"iso-8859-4",
    "iso-ir-110"=>"iso-8859-4",
    "iso8859-4"=>"iso-8859-4",
    "iso88594"=>"iso-8859-4",
    "iso_8859-4"=>"iso-8859-4",
    "iso_8859-4:1988"=>"iso-8859-4",
    "l4"=>"iso-8859-4",
    "latin4"=>"iso-8859-4",
    "csisolatincyrillic"=>"iso-8859-5",
    "cyrillic"=>"iso-8859-5",
    "iso-8859-5"=>"iso-8859-5",
    "iso-ir-144"=>"iso-8859-5",
    "iso8859-5"=>"iso-8859-5",
    "iso88595"=>"iso-8859-5",
    "iso_8859-5"=>"iso-8859-5",
    "iso_8859-5:1988"=>"iso-8859-5",
    "arabic"=>"iso-8859-6",
    "asmo-708"=>"iso-8859-6",
    "csiso88596e"=>"iso-8859-6",
    "csiso88596i"=>"iso-8859-6",
    "csisolatinarabic"=>"iso-8859-6",
    "ecma-114"=>"iso-8859-6",
    "iso-8859-6"=>"iso-8859-6",
    "iso-8859-6-e"=>"iso-8859-6",
    "iso-8859-6-i"=>"iso-8859-6",
    "iso-ir-127"=>"iso-8859-6",
    "iso8859-6"=>"iso-8859-6",
    "iso88596"=>"iso-8859-6",
    "iso_8859-6"=>"iso-8859-6",
    "iso_8859-6:1987"=>"iso-8859-6",
    "csisolatingreek"=>"iso-8859-7",
    "ecma-118"=>"iso-8859-7",
    "elot_928"=>"iso-8859-7",
    "greek"=>"iso-8859-7",
    "greek8"=>"iso-8859-7",
    "iso-8859-7"=>"iso-8859-7",
    "iso-ir-126"=>"iso-8859-7",
    "iso8859-7"=>"iso-8859-7",
    "iso88597"=>"iso-8859-7",
    "iso_8859-7"=>"iso-8859-7",
    "iso_8859-7:1987"=>"iso-8859-7",
    "sun_eu_greek"=>"iso-8859-7",
    "csiso88598e"=>"iso-8859-8",
    "csisolatinhebrew"=>"iso-8859-8",
    "hebrew"=>"iso-8859-8",
    "iso-8859-8"=>"iso-8859-8",
    "iso-8859-8-e"=>"iso-8859-8",
    "iso-ir-138"=>"iso-8859-8",
    "iso8859-8"=>"iso-8859-8",
    "iso88598"=>"iso-8859-8",
    "iso_8859-8"=>"iso-8859-8",
    "iso_8859-8:1988"=>"iso-8859-8",
    "visual"=>"iso-8859-8",
    "csisolatin6"=>"iso-8859-10",
    "iso-8859-10"=>"iso-8859-10",
    "iso-ir-157"=>"iso-8859-10",
    "iso8859-10"=>"iso-8859-10",
    "iso885910"=>"iso-8859-10",
    "l6"=>"iso-8859-10",
    "latin6"=>"iso-8859-10",
    "iso-8859-13"=>"iso-8859-13",
    "iso8859-13"=>"iso-8859-13",
    "iso885913"=>"iso-8859-13",
    "iso-8859-14"=>"iso-8859-14",
    "iso8859-14"=>"iso-8859-14",
    "iso885914"=>"iso-8859-14",
    "csisolatin9"=>"iso-8859-15",
    "iso-8859-15"=>"iso-8859-15",
    "iso8859-15"=>"iso-8859-15",
    "iso885915"=>"iso-8859-15",
    "iso_8859-15"=>"iso-8859-15",
    "l9"=>"iso-8859-15",
    "iso-8859-16"=>"iso-8859-16",
    "cskoi8r"=>"koi8-r",
    "koi"=>"koi8-r",
    "koi8"=>"koi8-r",
    "koi8-r"=>"koi8-r",
    "koi8_r"=>"koi8-r",
    "koi8-ru"=>"koi8-u",
    "koi8-u"=>"koi8-u",
    "dos-874"=>"windows-874",
    "iso-8859-11"=>"windows-874",
    "iso8859-11"=>"windows-874",
    "iso885911"=>"windows-874",
    "tis-620"=>"windows-874",
    "windows-874"=>"windows-874",
    "cp1250"=>"windows-1250",
    "windows-1250"=>"windows-1250",
    "x-cp1250"=>"windows-1250",
    "cp1251"=>"windows-1251",
    "windows-1251"=>"windows-1251",
    "x-cp1251"=>"windows-1251",
    "ansi_x3.4-1968"=>"windows-1252",
    "ascii"=>"windows-1252",
    "cp1252"=>"windows-1252",
    "cp819"=>"windows-1252",
    "csisolatin1"=>"windows-1252",
    "ibm819"=>"windows-1252",
    "iso-8859-1"=>"windows-1252",
    "iso-ir-100"=>"windows-1252",
    "iso8859-1"=>"windows-1252",
    "iso88591"=>"windows-1252",
    "iso_8859-1"=>"windows-1252",
    "iso_8859-1:1987"=>"windows-1252",
    "l1"=>"windows-1252",
    "latin1"=>"windows-1252",
    "us-ascii"=>"windows-1252",
    "windows-1252"=>"windows-1252",
    "x-cp1252"=>"windows-1252",
    "cp1253"=>"windows-1253",
    "windows-1253"=>"windows-1253",
    "x-cp1253"=>"windows-1253",
    "cp1254"=>"windows-1254",
    "csisolatin5"=>"windows-1254",
    "iso-8859-9"=>"windows-1254",
    "iso-ir-148"=>"windows-1254",
    "iso8859-9"=>"windows-1254",
    "iso88599"=>"windows-1254",
    "iso_8859-9"=>"windows-1254",
    "iso_8859-9:1989"=>"windows-1254",
    "l5"=>"windows-1254",
    "latin5"=>"windows-1254",
    "windows-1254"=>"windows-1254",
    "x-cp1254"=>"windows-1254",
    "cp1255"=>"windows-1255",
    "windows-1255"=>"windows-1255",
    "x-cp1255"=>"windows-1255",
    "cp1256"=>"windows-1256",
    "windows-1256"=>"windows-1256",
    "x-cp1256"=>"windows-1256",
    "cp1257"=>"windows-1257",
    "windows-1257"=>"windows-1257",
    "x-cp1257"=>"windows-1257",
    "cp1258"=>"windows-1258",
    "windows-1258"=>"windows-1258",
    "x-cp1258"=>"windows-1258",
    "x-mac-cyrillic"=>"macCyrillic",
    "x-mac-ukrainian"=>"macCyrillic",
    "chinese"=>"gbk",
    "csgb2312"=>"gbk",
    "csiso58gb231280"=>"gbk",
    "gb2312"=>"gbk",
    "gb_2312"=>"gbk",
    "gb_2312-80"=>"gbk",
    "gbk"=>"gbk",
    "iso-ir-58"=>"gbk",
    "x-gbk"=>"gbk",
    "gb18030"=>"gb18030",
    "big5"=>"big5",
    "big5-hkscs"=>"big5",
    "cn-big5"=>"big5",
    "csbig5"=>"big5",
    "x-x-big5"=>"big5",
    "cseucpkdfmtjapanese"=>"cp51932",
    "euc-jp"=>"cp51932",
    "x-euc-jp"=>"cp51932",
    "csiso2022jp"=>"cp50221",
    "iso-2022-jp"=>"cp50221",
    "csshiftjis"=>"Windows-31J",
    "ms932"=>"Windows-31J",
    "ms_kanji"=>"Windows-31J",
    "shift-jis"=>"Windows-31J",
    "shift_jis"=>"Windows-31J",
    "sjis"=>"Windows-31J",
    "windows-31j"=>"Windows-31J",
    "x-sjis"=>"Windows-31J",
    "cseuckr"=>"euc-kr",
    "csksc56011987"=>"euc-kr",
    "euc-kr"=>"euc-kr",
    "iso-ir-149"=>"euc-kr",
    "korean"=>"euc-kr",
    "ks_c_5601-1987"=>"euc-kr",
    "ks_c_5601-1989"=>"euc-kr",
    "ksc5601"=>"euc-kr",
    "ksc_5601"=>"euc-kr",
    "windows-949"=>"euc-kr",
    "utf-16be"=>"utf-16be",
    "utf-16"=>"utf-16le",
    "utf-16le"=>"utf-16le",
  } # :nodoc:
  Ractor.make_shareable(WEB_ENCODINGS_) if defined?(Ractor)

  # :nodoc:
  # return encoding or nil
  # http://encoding.spec.whatwg.org/#concept-encoding-get
  def self.get_encoding(label)
    Encoding.find(WEB_ENCODINGS_[label.to_str.strip.downcase]) rescue nil
  end
end # module Bundler::URI

module Bundler

  #
  # Returns a \Bundler::URI object derived from the given +uri+,
  # which may be a \Bundler::URI string or an existing \Bundler::URI object:
  #
  #   # Returns a new Bundler::URI.
  #   uri = Bundler::URI('http://github.com/ruby/ruby')
  #   # => #<Bundler::URI::HTTP http://github.com/ruby/ruby>
  #   # Returns the given Bundler::URI.
  #   Bundler::URI(uri)
  #   # => #<Bundler::URI::HTTP http://github.com/ruby/ruby>
  #
  def URI(uri)
    if uri.is_a?(Bundler::URI::Generic)
      uri
    elsif uri = String.try_convert(uri)
      Bundler::URI.parse(uri)
    else
      raise ArgumentError,
        "bad argument (expected Bundler::URI object or Bundler::URI string)"
    end
  end
  module_function :URI
end
PK*J[�Oˣ22Dshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/http.rbnu�[���# frozen_string_literal: false
# = uri/http.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # The syntax of HTTP URIs is defined in RFC1738 section 3.3.
  #
  # Note that the Ruby Bundler::URI library allows HTTP URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class HTTP < Generic
    # A Default port of 80 for Bundler::URI::HTTP.
    DEFAULT_PORT = 80

    # An Array of the available components for Bundler::URI::HTTP.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
      fragment
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::HTTP object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, query, and
    # fragment.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query, fragment]</code>.
    #
    # Example:
    #
    #     uri = Bundler::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = Bundler::URI::HTTP.build([nil, "www.example.com", nil, "/path",
    #       "query", 'fragment'])
    #
    # Currently, if passed userinfo components this method generates
    # invalid HTTP URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for an HTTP request, as required by Net::HTTP::Get.
    #
    # If the Bundler::URI contains a query, the full path is Bundler::URI#path + '?' + Bundler::URI#query.
    # Otherwise, the path is simply Bundler::URI#path.
    #
    # Example:
    #
    #     uri = Bundler::URI::HTTP.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end

    #
    # == Description
    #
    # Returns the authority for an HTTP uri, as defined in
    # https://www.rfc-editor.org/rfc/rfc3986#section-3.2.
    #
    #
    # Example:
    #
    #     Bundler::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').authority #=> "www.example.com"
    #     Bundler::URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').authority #=> "www.example.com:8000"
    #     Bundler::URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').authority #=> "www.example.com"
    #
    def authority
      if port == default_port
        host
      else
        "#{host}:#{port}"
      end
    end

    #
    # == Description
    #
    # Returns the origin for an HTTP uri, as defined in
    # https://www.rfc-editor.org/rfc/rfc6454.
    #
    #
    # Example:
    #
    #     Bundler::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').origin #=> "http://www.example.com"
    #     Bundler::URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').origin #=> "http://www.example.com:8000"
    #     Bundler::URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').origin #=> "http://www.example.com"
    #     Bundler::URI::HTTPS.build(host: 'www.example.com', path: '/foo/bar').origin #=> "https://www.example.com"
    #
    def origin
      "#{scheme}://#{authority}"
    end
  end

  register_scheme 'HTTP', HTTP
end
PK*J[�
D��
�
?share/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri.rbnu�[���# frozen_string_literal: false
# Bundler::URI is a module providing classes to handle Uniform Resource Identifiers
# (RFC2396[https://www.rfc-editor.org/rfc/rfc2396]).
#
# == Features
#
# * Uniform way of handling URIs.
# * Flexibility to introduce custom Bundler::URI schemes.
# * Flexibility to have an alternate Bundler::URI::Parser (or just different patterns
#   and regexp's).
#
# == Basic example
#
#   require 'bundler/vendor/uri/lib/uri'
#
#   uri = Bundler::URI("http://foo.com/posts?id=30&limit=5#time=1305298413")
#   #=> #<Bundler::URI::HTTP http://foo.com/posts?id=30&limit=5#time=1305298413>
#
#   uri.scheme    #=> "http"
#   uri.host      #=> "foo.com"
#   uri.path      #=> "/posts"
#   uri.query     #=> "id=30&limit=5"
#   uri.fragment  #=> "time=1305298413"
#
#   uri.to_s      #=> "http://foo.com/posts?id=30&limit=5#time=1305298413"
#
# == Adding custom URIs
#
#   module Bundler::URI
#     class RSYNC < Generic
#       DEFAULT_PORT = 873
#     end
#     register_scheme 'RSYNC', RSYNC
#   end
#   #=> Bundler::URI::RSYNC
#
#   Bundler::URI.scheme_list
#   #=> {"FILE"=>Bundler::URI::File, "FTP"=>Bundler::URI::FTP, "HTTP"=>Bundler::URI::HTTP,
#   #    "HTTPS"=>Bundler::URI::HTTPS, "LDAP"=>Bundler::URI::LDAP, "LDAPS"=>Bundler::URI::LDAPS,
#   #    "MAILTO"=>Bundler::URI::MailTo, "RSYNC"=>Bundler::URI::RSYNC}
#
#   uri = Bundler::URI("rsync://rsync.foo.com")
#   #=> #<Bundler::URI::RSYNC rsync://rsync.foo.com>
#
# == RFC References
#
# A good place to view an RFC spec is http://www.ietf.org/rfc.html.
#
# Here is a list of all related RFC's:
# - RFC822[https://www.rfc-editor.org/rfc/rfc822]
# - RFC1738[https://www.rfc-editor.org/rfc/rfc1738]
# - RFC2255[https://www.rfc-editor.org/rfc/rfc2255]
# - RFC2368[https://www.rfc-editor.org/rfc/rfc2368]
# - RFC2373[https://www.rfc-editor.org/rfc/rfc2373]
# - RFC2396[https://www.rfc-editor.org/rfc/rfc2396]
# - RFC2732[https://www.rfc-editor.org/rfc/rfc2732]
# - RFC3986[https://www.rfc-editor.org/rfc/rfc3986]
#
# == Class tree
#
# - Bundler::URI::Generic (in uri/generic.rb)
#   - Bundler::URI::File - (in uri/file.rb)
#   - Bundler::URI::FTP - (in uri/ftp.rb)
#   - Bundler::URI::HTTP - (in uri/http.rb)
#     - Bundler::URI::HTTPS - (in uri/https.rb)
#   - Bundler::URI::LDAP - (in uri/ldap.rb)
#     - Bundler::URI::LDAPS - (in uri/ldaps.rb)
#   - Bundler::URI::MailTo - (in uri/mailto.rb)
# - Bundler::URI::Parser - (in uri/common.rb)
# - Bundler::URI::REGEXP - (in uri/common.rb)
#   - Bundler::URI::REGEXP::PATTERN - (in uri/common.rb)
# - Bundler::URI::Util - (in uri/common.rb)
# - Bundler::URI::Error - (in uri/common.rb)
#   - Bundler::URI::InvalidURIError - (in uri/common.rb)
#   - Bundler::URI::InvalidComponentError - (in uri/common.rb)
#   - Bundler::URI::BadURIError - (in uri/common.rb)
#
# == Copyright Info
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# Documentation::
#   Akira Yamada <akira@ruby-lang.org>
#   Dmitry V. Sabanin <sdmitry@lrn.ru>
#   Vincent Batts <vbatts@hashbangbash.com>
# License::
#  Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
#  You can redistribute it and/or modify it under the same term as Ruby.
#

module Bundler::URI
end

require_relative 'uri/version'
require_relative 'uri/common'
require_relative 'uri/generic'
require_relative 'uri/file'
require_relative 'uri/ftp'
require_relative 'uri/http'
require_relative 'uri/https'
require_relative 'uri/ldap'
require_relative 'uri/ldaps'
require_relative 'uri/mailto'
require_relative 'uri/ws'
require_relative 'uri/wss'
PK*J[5���;B;BKshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/fileutils/lib/fileutils.rbnu�[���# frozen_string_literal: true

begin
  require 'rbconfig'
rescue LoadError
  # for make rjit-headers
end

# Namespace for file utility methods for copying, moving, removing, etc.
#
# == What's Here
#
# First, what’s elsewhere. \Module \Bundler::FileUtils:
#
# - Inherits from {class Object}[rdoc-ref:Object].
# - Supplements {class File}[rdoc-ref:File]
#   (but is not included or extended there).
#
# Here, module \Bundler::FileUtils provides methods that are useful for:
#
# - {Creating}[rdoc-ref:FileUtils@Creating].
# - {Deleting}[rdoc-ref:FileUtils@Deleting].
# - {Querying}[rdoc-ref:FileUtils@Querying].
# - {Setting}[rdoc-ref:FileUtils@Setting].
# - {Comparing}[rdoc-ref:FileUtils@Comparing].
# - {Copying}[rdoc-ref:FileUtils@Copying].
# - {Moving}[rdoc-ref:FileUtils@Moving].
# - {Options}[rdoc-ref:FileUtils@Options].
#
# === Creating
#
# - ::mkdir: Creates directories.
# - ::mkdir_p, ::makedirs, ::mkpath: Creates directories,
#   also creating ancestor directories as needed.
# - ::link_entry: Creates a hard link.
# - ::ln, ::link: Creates hard links.
# - ::ln_s, ::symlink: Creates symbolic links.
# - ::ln_sf: Creates symbolic links, overwriting if necessary.
# - ::ln_sr: Creates symbolic links relative to targets
#
# === Deleting
#
# - ::remove_dir: Removes a directory and its descendants.
# - ::remove_entry: Removes an entry, including its descendants if it is a directory.
# - ::remove_entry_secure: Like ::remove_entry, but removes securely.
# - ::remove_file: Removes a file entry.
# - ::rm, ::remove: Removes entries.
# - ::rm_f, ::safe_unlink: Like ::rm, but removes forcibly.
# - ::rm_r: Removes entries and their descendants.
# - ::rm_rf, ::rmtree: Like ::rm_r, but removes forcibly.
# - ::rmdir: Removes directories.
#
# === Querying
#
# - ::pwd, ::getwd: Returns the path to the working directory.
# - ::uptodate?: Returns whether a given entry is newer than given other entries.
#
# === Setting
#
# - ::cd, ::chdir: Sets the working directory.
# - ::chmod: Sets permissions for an entry.
# - ::chmod_R: Sets permissions for an entry and its descendants.
# - ::chown: Sets the owner and group for entries.
# - ::chown_R: Sets the owner and group for entries and their descendants.
# - ::touch: Sets modification and access times for entries,
#   creating if necessary.
#
# === Comparing
#
# - ::compare_file, ::cmp, ::identical?: Returns whether two entries are identical.
# - ::compare_stream: Returns whether two streams are identical.
#
# === Copying
#
# - ::copy_entry: Recursively copies an entry.
# - ::copy_file: Copies an entry.
# - ::copy_stream: Copies a stream.
# - ::cp, ::copy: Copies files.
# - ::cp_lr: Recursively creates hard links.
# - ::cp_r: Recursively copies files, retaining mode, owner, and group.
# - ::install: Recursively copies files, optionally setting mode,
#   owner, and group.
#
# === Moving
#
# - ::mv, ::move: Moves entries.
#
# === Options
#
# - ::collect_method: Returns the names of methods that accept a given option.
# - ::commands: Returns the names of methods that accept options.
# - ::have_option?: Returns whether a given method accepts a given option.
# - ::options: Returns all option names.
# - ::options_of: Returns the names of the options for a given method.
#
# == Path Arguments
#
# Some methods in \Bundler::FileUtils accept _path_ arguments,
# which are interpreted as paths to filesystem entries:
#
# - If the argument is a string, that value is the path.
# - If the argument has method +:to_path+, it is converted via that method.
# - If the argument has method +:to_str+, it is converted via that method.
#
# == About the Examples
#
# Some examples here involve trees of file entries.
# For these, we sometimes display trees using the
# {tree command-line utility}[https://en.wikipedia.org/wiki/Tree_(command)],
# which is a recursive directory-listing utility that produces
# a depth-indented listing of files and directories.
#
# We use a helper method to launch the command and control the format:
#
#   def tree(dirpath = '.')
#     command = "tree --noreport --charset=ascii #{dirpath}"
#     system(command)
#   end
#
# To illustrate:
#
#   tree('src0')
#   # => src0
#   #    |-- sub0
#   #    |   |-- src0.txt
#   #    |   `-- src1.txt
#   #    `-- sub1
#   #        |-- src2.txt
#   #        `-- src3.txt
#
# == Avoiding the TOCTTOU Vulnerability
#
# For certain methods that recursively remove entries,
# there is a potential vulnerability called the
# {Time-of-check to time-of-use}[https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use],
# or TOCTTOU, vulnerability that can exist when:
#
# - An ancestor directory of the entry at the target path is world writable;
#   such directories include <tt>/tmp</tt>.
# - The directory tree at the target path includes:
#
#   - A world-writable descendant directory.
#   - A symbolic link.
#
# To avoid that vulnerability, you can use this method to remove entries:
#
# - Bundler::FileUtils.remove_entry_secure: removes recursively
#   if the target path points to a directory.
#
# Also available are these methods,
# each of which calls \Bundler::FileUtils.remove_entry_secure:
#
# - Bundler::FileUtils.rm_r with keyword argument <tt>secure: true</tt>.
# - Bundler::FileUtils.rm_rf with keyword argument <tt>secure: true</tt>.
#
# Finally, this method for moving entries calls \Bundler::FileUtils.remove_entry_secure
# if the source and destination are on different file systems
# (which means that the "move" is really a copy and remove):
#
# - Bundler::FileUtils.mv with keyword argument <tt>secure: true</tt>.
#
# \Method \Bundler::FileUtils.remove_entry_secure removes securely
# by applying a special pre-process:
#
# - If the target path points to a directory, this method uses methods
#   {File#chown}[rdoc-ref:File#chown]
#   and {File#chmod}[rdoc-ref:File#chmod]
#   in removing directories.
# - The owner of the target directory should be either the current process
#   or the super user (root).
#
# WARNING: You must ensure that *ALL* parent directories cannot be
# moved by other untrusted users.  For example, parent directories
# should not be owned by untrusted users, and should not be world
# writable except when the sticky bit is set.
#
# For details of this security vulnerability, see Perl cases:
#
# - {CVE-2005-0448}[https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448].
# - {CVE-2004-0452}[https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452].
#
module Bundler::FileUtils
  # The version number.
  VERSION = "1.7.3"

  def self.private_module_function(name)   #:nodoc:
    module_function name
    private_class_method name
  end

  #
  # Returns a string containing the path to the current directory:
  #
  #   Bundler::FileUtils.pwd # => "/rdoc/fileutils"
  #
  # Related: Bundler::FileUtils.cd.
  #
  def pwd
    Dir.pwd
  end
  module_function :pwd

  alias getwd pwd
  module_function :getwd

  # Changes the working directory to the given +dir+, which
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments]:
  #
  # With no block given,
  # changes the current directory to the directory at +dir+; returns zero:
  #
  #   Bundler::FileUtils.pwd # => "/rdoc/fileutils"
  #   Bundler::FileUtils.cd('..')
  #   Bundler::FileUtils.pwd # => "/rdoc"
  #   Bundler::FileUtils.cd('fileutils')
  #
  # With a block given, changes the current directory to the directory
  # at +dir+, calls the block with argument +dir+,
  # and restores the original current directory; returns the block's value:
  #
  #   Bundler::FileUtils.pwd                                     # => "/rdoc/fileutils"
  #   Bundler::FileUtils.cd('..') { |arg| [arg, Bundler::FileUtils.pwd] } # => ["..", "/rdoc"]
  #   Bundler::FileUtils.pwd                                     # => "/rdoc/fileutils"
  #
  # Keyword arguments:
  #
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.cd('..')
  #     Bundler::FileUtils.cd('fileutils')
  #
  #   Output:
  #
  #     cd ..
  #     cd fileutils
  #
  # Related: Bundler::FileUtils.pwd.
  #
  def cd(dir, verbose: nil, &block) # :yield: dir
    fu_output_message "cd #{dir}" if verbose
    result = Dir.chdir(dir, &block)
    fu_output_message 'cd -' if verbose and block
    result
  end
  module_function :cd

  alias chdir cd
  module_function :chdir

  #
  # Returns +true+ if the file at path +new+
  # is newer than all the files at paths in array +old_list+;
  # +false+ otherwise.
  #
  # Argument +new+ and the elements of +old_list+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments]:
  #
  #   Bundler::FileUtils.uptodate?('Rakefile', ['Gemfile', 'README.md']) # => true
  #   Bundler::FileUtils.uptodate?('Gemfile', ['Rakefile', 'README.md']) # => false
  #
  # A non-existent file is considered to be infinitely old.
  #
  # Related: Bundler::FileUtils.touch.
  #
  def uptodate?(new, old_list)
    return false unless File.exist?(new)
    new_time = File.mtime(new)
    old_list.each do |old|
      if File.exist?(old)
        return false unless new_time > File.mtime(old)
      end
    end
    true
  end
  module_function :uptodate?

  def remove_trailing_slash(dir)   #:nodoc:
    dir == '/' ? dir : dir.chomp(?/)
  end
  private_module_function :remove_trailing_slash

  #
  # Creates directories at the paths in the given +list+
  # (a single path or an array of paths);
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, creates a directory at each +path+ in +list+
  # by calling: <tt>Dir.mkdir(path, mode)</tt>;
  # see {Dir.mkdir}[rdoc-ref:Dir.mkdir]:
  #
  #   Bundler::FileUtils.mkdir(%w[tmp0 tmp1]) # => ["tmp0", "tmp1"]
  #   Bundler::FileUtils.mkdir('tmp4')        # => ["tmp4"]
  #
  # Keyword arguments:
  #
  # - <tt>mode: <i>mode</i></tt> - also calls <tt>File.chmod(mode, path)</tt>;
  #   see {File.chmod}[rdoc-ref:File.chmod].
  # - <tt>noop: true</tt> - does not create directories.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.mkdir(%w[tmp0 tmp1], verbose: true)
  #     Bundler::FileUtils.mkdir(%w[tmp2 tmp3], mode: 0700, verbose: true)
  #
  #   Output:
  #
  #     mkdir tmp0 tmp1
  #     mkdir -m 700 tmp2 tmp3
  #
  # Raises an exception if any path points to an existing
  # file or directory, or if for any reason a directory cannot be created.
  #
  # Related: Bundler::FileUtils.mkdir_p.
  #
  def mkdir(list, mode: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "mkdir #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
    return if noop

    list.each do |dir|
      fu_mkdir dir, mode
    end
  end
  module_function :mkdir

  #
  # Creates directories at the paths in the given +list+
  # (a single path or an array of paths),
  # also creating ancestor directories as needed;
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, creates a directory at each +path+ in +list+,
  # along with any needed ancestor directories,
  # by calling: <tt>Dir.mkdir(path, mode)</tt>;
  # see {Dir.mkdir}[rdoc-ref:Dir.mkdir]:
  #
  #   Bundler::FileUtils.mkdir_p(%w[tmp0/tmp1 tmp2/tmp3]) # => ["tmp0/tmp1", "tmp2/tmp3"]
  #   Bundler::FileUtils.mkdir_p('tmp4/tmp5')             # => ["tmp4/tmp5"]
  #
  # Keyword arguments:
  #
  # - <tt>mode: <i>mode</i></tt> - also calls <tt>File.chmod(mode, path)</tt>;
  #   see {File.chmod}[rdoc-ref:File.chmod].
  # - <tt>noop: true</tt> - does not create directories.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.mkdir_p(%w[tmp0 tmp1], verbose: true)
  #     Bundler::FileUtils.mkdir_p(%w[tmp2 tmp3], mode: 0700, verbose: true)
  #
  #   Output:
  #
  #     mkdir -p tmp0 tmp1
  #     mkdir -p -m 700 tmp2 tmp3
  #
  # Raises an exception if for any reason a directory cannot be created.
  #
  # Bundler::FileUtils.mkpath and Bundler::FileUtils.makedirs are aliases for Bundler::FileUtils.mkdir_p.
  #
  # Related: Bundler::FileUtils.mkdir.
  #
  def mkdir_p(list, mode: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "mkdir -p #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
    return *list if noop

    list.each do |item|
      path = remove_trailing_slash(item)

      stack = []
      until File.directory?(path) || File.dirname(path) == path
        stack.push path
        path = File.dirname(path)
      end
      stack.reverse_each do |dir|
        begin
          fu_mkdir dir, mode
        rescue SystemCallError
          raise unless File.directory?(dir)
        end
      end
    end

    return *list
  end
  module_function :mkdir_p

  alias mkpath    mkdir_p
  alias makedirs  mkdir_p
  module_function :mkpath
  module_function :makedirs

  def fu_mkdir(path, mode)   #:nodoc:
    path = remove_trailing_slash(path)
    if mode
      Dir.mkdir path, mode
      File.chmod mode, path
    else
      Dir.mkdir path
    end
  end
  private_module_function :fu_mkdir

  #
  # Removes directories at the paths in the given +list+
  # (a single path or an array of paths);
  # returns +list+, if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, removes the directory at each +path+ in +list+,
  # by calling: <tt>Dir.rmdir(path)</tt>;
  # see {Dir.rmdir}[rdoc-ref:Dir.rmdir]:
  #
  #   Bundler::FileUtils.rmdir(%w[tmp0/tmp1 tmp2/tmp3]) # => ["tmp0/tmp1", "tmp2/tmp3"]
  #   Bundler::FileUtils.rmdir('tmp4/tmp5')             # => ["tmp4/tmp5"]
  #
  # Keyword arguments:
  #
  # - <tt>parents: true</tt> - removes successive ancestor directories
  #   if empty.
  # - <tt>noop: true</tt> - does not remove directories.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.rmdir(%w[tmp0/tmp1 tmp2/tmp3], parents: true, verbose: true)
  #     Bundler::FileUtils.rmdir('tmp4/tmp5', parents: true, verbose: true)
  #
  #   Output:
  #
  #     rmdir -p tmp0/tmp1 tmp2/tmp3
  #     rmdir -p tmp4/tmp5
  #
  # Raises an exception if a directory does not exist
  # or if for any reason a directory cannot be removed.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rmdir(list, parents: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "rmdir #{parents ? '-p ' : ''}#{list.join ' '}" if verbose
    return if noop
    list.each do |dir|
      Dir.rmdir(dir = remove_trailing_slash(dir))
      if parents
        begin
          until (parent = File.dirname(dir)) == '.' or parent == dir
            dir = parent
            Dir.rmdir(dir)
          end
        rescue Errno::ENOTEMPTY, Errno::EEXIST, Errno::ENOENT
        end
      end
    end
  end
  module_function :rmdir

  # Creates {hard links}[https://en.wikipedia.org/wiki/Hard_link].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # When +src+ is the path to an existing file
  # and +dest+ is the path to a non-existent file,
  # creates a hard link at +dest+ pointing to +src+; returns zero:
  #
  #   Dir.children('tmp0/')                    # => ["t.txt"]
  #   Dir.children('tmp1/')                    # => []
  #   Bundler::FileUtils.ln('tmp0/t.txt', 'tmp1/t.lnk') # => 0
  #   Dir.children('tmp1/')                    # => ["t.lnk"]
  #
  # When +src+ is the path to an existing file
  # and +dest+ is the path to an existing directory,
  # creates a hard link at <tt>dest/src</tt> pointing to +src+; returns zero:
  #
  #   Dir.children('tmp2')               # => ["t.dat"]
  #   Dir.children('tmp3')               # => []
  #   Bundler::FileUtils.ln('tmp2/t.dat', 'tmp3') # => 0
  #   Dir.children('tmp3')               # => ["t.dat"]
  #
  # When +src+ is an array of paths to existing files
  # and +dest+ is the path to an existing directory,
  # then for each path +target+ in +src+,
  # creates a hard link at <tt>dest/target</tt> pointing to +target+;
  # returns +src+:
  #
  #   Dir.children('tmp4/')                               # => []
  #   Bundler::FileUtils.ln(['tmp0/t.txt', 'tmp2/t.dat'], 'tmp4/') # => ["tmp0/t.txt", "tmp2/t.dat"]
  #   Dir.children('tmp4/')                               # => ["t.dat", "t.txt"]
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - overwrites +dest+ if it exists.
  # - <tt>noop: true</tt> - does not create links.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.ln('tmp0/t.txt', 'tmp1/t.lnk', verbose: true)
  #     Bundler::FileUtils.ln('tmp2/t.dat', 'tmp3', verbose: true)
  #     Bundler::FileUtils.ln(['tmp0/t.txt', 'tmp2/t.dat'], 'tmp4/', verbose: true)
  #
  #   Output:
  #
  #     ln tmp0/t.txt tmp1/t.lnk
  #     ln tmp2/t.dat tmp3
  #     ln tmp0/t.txt tmp2/t.dat tmp4/
  #
  # Raises an exception if +dest+ is the path to an existing file
  # and keyword argument +force+ is not +true+.
  #
  # Related: Bundler::FileUtils.link_entry (has different options).
  #
  def ln(src, dest, force: nil, noop: nil, verbose: nil)
    fu_output_message "ln#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest0(src, dest) do |s,d|
      remove_file d, true if force
      File.link s, d
    end
  end
  module_function :ln

  alias link ln
  module_function :link

  # Creates {hard links}[https://en.wikipedia.org/wiki/Hard_link].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a directory and +dest+ does not exist,
  # creates links +dest+ and descendents pointing to +src+ and its descendents:
  #
  #   tree('src0')
  #   # => src0
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   File.exist?('dest0') # => false
  #   Bundler::FileUtils.cp_lr('src0', 'dest0')
  #   tree('dest0')
  #   # => dest0
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #
  # If +src+ and +dest+ are both paths to directories,
  # creates links <tt>dest/src</tt> and descendents
  # pointing to +src+ and its descendents:
  #
  #   tree('src1')
  #   # => src1
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   Bundler::FileUtils.mkdir('dest1')
  #   Bundler::FileUtils.cp_lr('src1', 'dest1')
  #   tree('dest1')
  #   # => dest1
  #   #    `-- src1
  #   #        |-- sub0
  #   #        |   |-- src0.txt
  #   #        |   `-- src1.txt
  #   #        `-- sub1
  #   #            |-- src2.txt
  #   #            `-- src3.txt
  #
  # If +src+ is an array of paths to entries and +dest+ is the path to a directory,
  # for each path +filepath+ in +src+, creates a link at <tt>dest/filepath</tt>
  # pointing to that path:
  #
  #   tree('src2')
  #   # => src2
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   Bundler::FileUtils.mkdir('dest2')
  #   Bundler::FileUtils.cp_lr(['src2/sub0', 'src2/sub1'], 'dest2')
  #   tree('dest2')
  #   # => dest2
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: false</tt> - if +src+ is a symbolic link,
  #   does not dereference it.
  # - <tt>noop: true</tt> - does not create links.
  # - <tt>remove_destination: true</tt> - removes +dest+ before creating links.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.cp_lr('src0', 'dest0', noop: true, verbose: true)
  #     Bundler::FileUtils.cp_lr('src1', 'dest1', noop: true, verbose: true)
  #     Bundler::FileUtils.cp_lr(['src2/sub0', 'src2/sub1'], 'dest2', noop: true, verbose: true)
  #
  #   Output:
  #
  #     cp -lr src0 dest0
  #     cp -lr src1 dest1
  #     cp -lr src2/sub0 src2/sub1 dest2
  #
  # Raises an exception if +dest+ is the path to an existing file or directory
  # and keyword argument <tt>remove_destination: true</tt> is not given.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def cp_lr(src, dest, noop: nil, verbose: nil,
            dereference_root: true, remove_destination: false)
    fu_output_message "cp -lr#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      link_entry s, d, dereference_root, remove_destination
    end
  end
  module_function :cp_lr

  # Creates {symbolic links}[https://en.wikipedia.org/wiki/Symbolic_link].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to an existing file:
  #
  # - When +dest+ is the path to a non-existent file,
  #   creates a symbolic link at +dest+ pointing to +src+:
  #
  #     Bundler::FileUtils.touch('src0.txt')
  #     File.exist?('dest0.txt')   # => false
  #     Bundler::FileUtils.ln_s('src0.txt', 'dest0.txt')
  #     File.symlink?('dest0.txt') # => true
  #
  # - When +dest+ is the path to an existing file,
  #   creates a symbolic link at +dest+ pointing to +src+
  #   if and only if keyword argument <tt>force: true</tt> is given
  #   (raises an exception otherwise):
  #
  #     Bundler::FileUtils.touch('src1.txt')
  #     Bundler::FileUtils.touch('dest1.txt')
  #     Bundler::FileUtils.ln_s('src1.txt', 'dest1.txt', force: true)
  #     FileTest.symlink?('dest1.txt') # => true
  #
  #     Bundler::FileUtils.ln_s('src1.txt', 'dest1.txt') # Raises Errno::EEXIST.
  #
  # If +dest+ is the path to a directory,
  # creates a symbolic link at <tt>dest/src</tt> pointing to +src+:
  #
  #   Bundler::FileUtils.touch('src2.txt')
  #   Bundler::FileUtils.mkdir('destdir2')
  #   Bundler::FileUtils.ln_s('src2.txt', 'destdir2')
  #   File.symlink?('destdir2/src2.txt') # => true
  #
  # If +src+ is an array of paths to existing files and +dest+ is a directory,
  # for each child +child+ in +src+ creates a symbolic link <tt>dest/child</tt>
  # pointing to +child+:
  #
  #   Bundler::FileUtils.mkdir('srcdir3')
  #   Bundler::FileUtils.touch('srcdir3/src0.txt')
  #   Bundler::FileUtils.touch('srcdir3/src1.txt')
  #   Bundler::FileUtils.mkdir('destdir3')
  #   Bundler::FileUtils.ln_s(['srcdir3/src0.txt', 'srcdir3/src1.txt'], 'destdir3')
  #   File.symlink?('destdir3/src0.txt') # => true
  #   File.symlink?('destdir3/src1.txt') # => true
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - overwrites +dest+ if it exists.
  # - <tt>relative: false</tt> - create links relative to +dest+.
  # - <tt>noop: true</tt> - does not create links.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.ln_s('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.ln_s('src1.txt', 'destdir1', noop: true, verbose: true)
  #     Bundler::FileUtils.ln_s('src2.txt', 'dest2.txt', force: true, noop: true, verbose: true)
  #     Bundler::FileUtils.ln_s(['srcdir3/src0.txt', 'srcdir3/src1.txt'], 'destdir3', noop: true, verbose: true)
  #
  #   Output:
  #
  #     ln -s src0.txt dest0.txt
  #     ln -s src1.txt destdir1
  #     ln -sf src2.txt dest2.txt
  #     ln -s srcdir3/src0.txt srcdir3/src1.txt destdir3
  #
  # Related: Bundler::FileUtils.ln_sf.
  #
  def ln_s(src, dest, force: nil, relative: false, target_directory: true, noop: nil, verbose: nil)
    if relative
      return ln_sr(src, dest, force: force, noop: noop, verbose: verbose)
    end
    fu_output_message "ln -s#{force ? 'f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest0(src, dest) do |s,d|
      remove_file d, true if force
      File.symlink s, d
    end
  end
  module_function :ln_s

  alias symlink ln_s
  module_function :symlink

  # Like Bundler::FileUtils.ln_s, but always with keyword argument <tt>force: true</tt> given.
  #
  def ln_sf(src, dest, noop: nil, verbose: nil)
    ln_s src, dest, force: true, noop: noop, verbose: verbose
  end
  module_function :ln_sf

  # Like Bundler::FileUtils.ln_s, but create links relative to +dest+.
  #
  def ln_sr(src, dest, target_directory: true, force: nil, noop: nil, verbose: nil)
    options = "#{force ? 'f' : ''}#{target_directory ? '' : 'T'}"
    dest = File.path(dest)
    srcs = Array(src)
    link = proc do |s, target_dir_p = true|
      s = File.path(s)
      if target_dir_p
        d = File.join(destdirs = dest, File.basename(s))
      else
        destdirs = File.dirname(d = dest)
      end
      destdirs = fu_split_path(File.realpath(destdirs))
      if fu_starting_path?(s)
        srcdirs = fu_split_path((File.realdirpath(s) rescue File.expand_path(s)))
        base = fu_relative_components_from(srcdirs, destdirs)
        s = File.join(*base)
      else
        srcdirs = fu_clean_components(*fu_split_path(s))
        base = fu_relative_components_from(fu_split_path(Dir.pwd), destdirs)
        while srcdirs.first&. == ".." and base.last&.!=("..") and !fu_starting_path?(base.last)
          srcdirs.shift
          base.pop
        end
        s = File.join(*base, *srcdirs)
      end
      fu_output_message "ln -s#{options} #{s} #{d}" if verbose
      next if noop
      remove_file d, true if force
      File.symlink s, d
    end
    case srcs.size
    when 0
    when 1
      link[srcs[0], target_directory && File.directory?(dest)]
    else
      srcs.each(&link)
    end
  end
  module_function :ln_sr

  # Creates {hard links}[https://en.wikipedia.org/wiki/Hard_link]; returns +nil+.
  #
  # Arguments +src+ and +dest+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a file and +dest+ does not exist,
  # creates a hard link at +dest+ pointing to +src+:
  #
  #   Bundler::FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   Bundler::FileUtils.link_entry('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is the path to a directory and +dest+ does not exist,
  # recursively creates hard links at +dest+ pointing to paths in +src+:
  #
  #   Bundler::FileUtils.mkdir_p(['src1/dir0', 'src1/dir1'])
  #   src_file_paths = [
  #     'src1/dir0/t0.txt',
  #     'src1/dir0/t1.txt',
  #     'src1/dir1/t2.txt',
  #     'src1/dir1/t3.txt',
  #     ]
  #   Bundler::FileUtils.touch(src_file_paths)
  #   File.directory?('dest1')        # => true
  #   Bundler::FileUtils.link_entry('src1', 'dest1')
  #   File.file?('dest1/dir0/t0.txt') # => true
  #   File.file?('dest1/dir0/t1.txt') # => true
  #   File.file?('dest1/dir1/t2.txt') # => true
  #   File.file?('dest1/dir1/t3.txt') # => true
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: true</tt> - dereferences +src+ if it is a symbolic link.
  # - <tt>remove_destination: true</tt> - removes +dest+ before creating links.
  #
  # Raises an exception if +dest+ is the path to an existing file or directory
  # and keyword argument <tt>remove_destination: true</tt> is not given.
  #
  # Related: Bundler::FileUtils.ln (has different options).
  #
  def link_entry(src, dest, dereference_root = false, remove_destination = false)
    Entry_.new(src, nil, dereference_root).traverse do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      File.unlink destent.path if remove_destination && File.file?(destent.path)
      ent.link destent.path
    end
  end
  module_function :link_entry

  # Copies files.
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a file and +dest+ is not the path to a directory,
  # copies +src+ to +dest+:
  #
  #   Bundler::FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   Bundler::FileUtils.cp('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is the path to a file and +dest+ is the path to a directory,
  # copies +src+ to <tt>dest/src</tt>:
  #
  #   Bundler::FileUtils.touch('src1.txt')
  #   Bundler::FileUtils.mkdir('dest1')
  #   Bundler::FileUtils.cp('src1.txt', 'dest1')
  #   File.file?('dest1/src1.txt') # => true
  #
  # If +src+ is an array of paths to files and +dest+ is the path to a directory,
  # copies from each +src+ to +dest+:
  #
  #   src_file_paths = ['src2.txt', 'src2.dat']
  #   Bundler::FileUtils.touch(src_file_paths)
  #   Bundler::FileUtils.mkdir('dest2')
  #   Bundler::FileUtils.cp(src_file_paths, 'dest2')
  #   File.file?('dest2/src2.txt') # => true
  #   File.file?('dest2/src2.dat') # => true
  #
  # Keyword arguments:
  #
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>noop: true</tt> - does not copy files.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.cp('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.cp('src1.txt', 'dest1', noop: true, verbose: true)
  #     Bundler::FileUtils.cp(src_file_paths, 'dest2', noop: true, verbose: true)
  #
  #   Output:
  #
  #     cp src0.txt dest0.txt
  #     cp src1.txt dest1
  #     cp src2.txt src2.dat dest2
  #
  # Raises an exception if +src+ is a directory.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
    fu_output_message "cp#{preserve ? ' -p' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      copy_file s, d, preserve
    end
  end
  module_function :cp

  alias copy cp
  module_function :copy

  # Recursively copies files.
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # The mode, owner, and group are retained in the copy;
  # to change those, use Bundler::FileUtils.install instead.
  #
  # If +src+ is the path to a file and +dest+ is not the path to a directory,
  # copies +src+ to +dest+:
  #
  #   Bundler::FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   Bundler::FileUtils.cp_r('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is the path to a file and +dest+ is the path to a directory,
  # copies +src+ to <tt>dest/src</tt>:
  #
  #   Bundler::FileUtils.touch('src1.txt')
  #   Bundler::FileUtils.mkdir('dest1')
  #   Bundler::FileUtils.cp_r('src1.txt', 'dest1')
  #   File.file?('dest1/src1.txt') # => true
  #
  # If +src+ is the path to a directory and +dest+ does not exist,
  # recursively copies +src+ to +dest+:
  #
  #   tree('src2')
  #   # => src2
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #    |-- src2.txt
  #   #    `-- src3.txt
  #   Bundler::FileUtils.exist?('dest2') # => false
  #   Bundler::FileUtils.cp_r('src2', 'dest2')
  #   tree('dest2')
  #   # => dest2
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #    |-- src2.txt
  #   #    `-- src3.txt
  #
  # If +src+ and +dest+ are paths to directories,
  # recursively copies +src+ to <tt>dest/src</tt>:
  #
  #   tree('src3')
  #   # => src3
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #    |-- src2.txt
  #   #    `-- src3.txt
  #   Bundler::FileUtils.mkdir('dest3')
  #   Bundler::FileUtils.cp_r('src3', 'dest3')
  #   tree('dest3')
  #   # => dest3
  #   #    `-- src3
  #   #      |-- dir0
  #   #      |   |-- src0.txt
  #   #      |   `-- src1.txt
  #   #      `-- dir1
  #   #          |-- src2.txt
  #   #          `-- src3.txt
  #
  # If +src+ is an array of paths and +dest+ is a directory,
  # recursively copies from each path in +src+ to +dest+;
  # the paths in +src+ may point to files and/or directories.
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: false</tt> - if +src+ is a symbolic link,
  #   does not dereference it.
  # - <tt>noop: true</tt> - does not copy files.
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.cp_r('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.cp_r('src1.txt', 'dest1', noop: true, verbose: true)
  #     Bundler::FileUtils.cp_r('src2', 'dest2', noop: true, verbose: true)
  #     Bundler::FileUtils.cp_r('src3', 'dest3', noop: true, verbose: true)
  #
  #   Output:
  #
  #     cp -r src0.txt dest0.txt
  #     cp -r src1.txt dest1
  #     cp -r src2 dest2
  #     cp -r src3 dest3
  #
  # Raises an exception of +src+ is the path to a directory
  # and +dest+ is the path to a file.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def cp_r(src, dest, preserve: nil, noop: nil, verbose: nil,
           dereference_root: true, remove_destination: nil)
    fu_output_message "cp -r#{preserve ? 'p' : ''}#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      copy_entry s, d, preserve, dereference_root, remove_destination
    end
  end
  module_function :cp_r

  # Recursively copies files from +src+ to +dest+.
  #
  # Arguments +src+ and +dest+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a file, copies +src+ to +dest+:
  #
  #   Bundler::FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   Bundler::FileUtils.copy_entry('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is a directory, recursively copies +src+ to +dest+:
  #
  #   tree('src1')
  #   # => src1
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   Bundler::FileUtils.copy_entry('src1', 'dest1')
  #   tree('dest1')
  #   # => dest1
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #
  # The recursive copying preserves file types for regular files,
  # directories, and symbolic links;
  # other file types (FIFO streams, device files, etc.) are not supported.
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: true</tt> - if +src+ is a symbolic link,
  #   follows the link.
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
    if dereference_root
      src = File.realpath(src)
    end

    Entry_.new(src, nil, false).wrap_traverse(proc do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
      ent.copy destent.path
    end, proc do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      ent.copy_metadata destent.path if preserve
    end)
  end
  module_function :copy_entry

  # Copies file from +src+ to +dest+, which should not be directories.
  #
  # Arguments +src+ and +dest+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Examples:
  #
  #   Bundler::FileUtils.touch('src0.txt')
  #   Bundler::FileUtils.copy_file('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt') # => true
  #
  # Keyword arguments:
  #
  # - <tt>dereference: false</tt> - if +src+ is a symbolic link,
  #   does not follow the link.
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def copy_file(src, dest, preserve = false, dereference = true)
    ent = Entry_.new(src, nil, dereference)
    ent.copy_file dest
    ent.copy_metadata dest if preserve
  end
  module_function :copy_file

  # Copies \IO stream +src+ to \IO stream +dest+ via
  # {IO.copy_stream}[rdoc-ref:IO.copy_stream].
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def copy_stream(src, dest)
    IO.copy_stream(src, dest)
  end
  module_function :copy_stream

  # Moves entries.
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ and +dest+ are on different file systems,
  # first copies, then removes +src+.
  #
  # May cause a local vulnerability if not called with keyword argument
  # <tt>secure: true</tt>;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # If +src+ is the path to a single file or directory and +dest+ does not exist,
  # moves +src+ to +dest+:
  #
  #   tree('src0')
  #   # => src0
  #   #    |-- src0.txt
  #   #    `-- src1.txt
  #   File.exist?('dest0') # => false
  #   Bundler::FileUtils.mv('src0', 'dest0')
  #   File.exist?('src0')  # => false
  #   tree('dest0')
  #   # => dest0
  #   #    |-- src0.txt
  #   #    `-- src1.txt
  #
  # If +src+ is an array of paths to files and directories
  # and +dest+ is the path to a directory,
  # copies from each path in the array to +dest+:
  #
  #   File.file?('src1.txt') # => true
  #   tree('src1')
  #   # => src1
  #   #    |-- src.dat
  #   #    `-- src.txt
  #   Dir.empty?('dest1')    # => true
  #   Bundler::FileUtils.mv(['src1.txt', 'src1'], 'dest1')
  #   tree('dest1')
  #   # => dest1
  #   #    |-- src1
  #   #    |   |-- src.dat
  #   #    |   `-- src.txt
  #   #    `-- src1.txt
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - if the move includes removing +src+
  #   (that is, if +src+ and +dest+ are on different file systems),
  #   ignores raised exceptions of StandardError and its descendants.
  # - <tt>noop: true</tt> - does not move files.
  # - <tt>secure: true</tt> - removes +src+ securely;
  #   see details at Bundler::FileUtils.remove_entry_secure.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.mv('src0', 'dest0', noop: true, verbose: true)
  #     Bundler::FileUtils.mv(['src1.txt', 'src1'], 'dest1', noop: true, verbose: true)
  #
  #   Output:
  #
  #     mv src0 dest0
  #     mv src1.txt src1 dest1
  #
  def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
    fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      destent = Entry_.new(d, nil, true)
      begin
        if destent.exist?
          if destent.directory?
            raise Errno::EEXIST, d
          end
        end
        begin
          File.rename s, d
        rescue Errno::EXDEV,
               Errno::EPERM # move from unencrypted to encrypted dir (ext4)
          copy_entry s, d, true
          if secure
            remove_entry_secure s, force
          else
            remove_entry s, force
          end
        end
      rescue SystemCallError
        raise unless force
      end
    end
  end
  module_function :mv

  alias move mv
  module_function :move

  # Removes entries at the paths in the given +list+
  # (a single path or an array of paths)
  # returns +list+, if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, removes files at the paths given in +list+:
  #
  #   Bundler::FileUtils.touch(['src0.txt', 'src0.dat'])
  #   Bundler::FileUtils.rm(['src0.dat', 'src0.txt']) # => ["src0.dat", "src0.txt"]
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - ignores raised exceptions of StandardError
  #   and its descendants.
  # - <tt>noop: true</tt> - does not remove files; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.rm(['src0.dat', 'src0.txt'], noop: true, verbose: true)
  #
  #   Output:
  #
  #     rm src0.dat src0.txt
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm(list, force: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "rm#{force ? ' -f' : ''} #{list.join ' '}" if verbose
    return if noop

    list.each do |path|
      remove_file path, force
    end
  end
  module_function :rm

  alias remove rm
  module_function :remove

  # Equivalent to:
  #
  #   Bundler::FileUtils.rm(list, force: true, **kwargs)
  #
  # Argument +list+ (a single path or an array of paths)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # See Bundler::FileUtils.rm for keyword arguments.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm_f(list, noop: nil, verbose: nil)
    rm list, force: true, noop: noop, verbose: verbose
  end
  module_function :rm_f

  alias safe_unlink rm_f
  module_function :safe_unlink

  # Removes entries at the paths in the given +list+
  # (a single path or an array of paths);
  # returns +list+, if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # May cause a local vulnerability if not called with keyword argument
  # <tt>secure: true</tt>;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # For each file path, removes the file at that path:
  #
  #   Bundler::FileUtils.touch(['src0.txt', 'src0.dat'])
  #   Bundler::FileUtils.rm_r(['src0.dat', 'src0.txt'])
  #   File.exist?('src0.txt') # => false
  #   File.exist?('src0.dat') # => false
  #
  # For each directory path, recursively removes files and directories:
  #
  #   tree('src1')
  #   # => src1
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   Bundler::FileUtils.rm_r('src1')
  #   File.exist?('src1') # => false
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - ignores raised exceptions of StandardError
  #   and its descendants.
  # - <tt>noop: true</tt> - does not remove entries; returns +nil+.
  # - <tt>secure: true</tt> - removes +src+ securely;
  #   see details at Bundler::FileUtils.remove_entry_secure.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.rm_r(['src0.dat', 'src0.txt'], noop: true, verbose: true)
  #     Bundler::FileUtils.rm_r('src1', noop: true, verbose: true)
  #
  #   Output:
  #
  #     rm -r src0.dat src0.txt
  #     rm -r src1
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm_r(list, force: nil, noop: nil, verbose: nil, secure: nil)
    list = fu_list(list)
    fu_output_message "rm -r#{force ? 'f' : ''} #{list.join ' '}" if verbose
    return if noop
    list.each do |path|
      if secure
        remove_entry_secure path, force
      else
        remove_entry path, force
      end
    end
  end
  module_function :rm_r

  # Equivalent to:
  #
  #   Bundler::FileUtils.rm_r(list, force: true, **kwargs)
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # May cause a local vulnerability if not called with keyword argument
  # <tt>secure: true</tt>;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # See Bundler::FileUtils.rm_r for keyword arguments.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm_rf(list, noop: nil, verbose: nil, secure: nil)
    rm_r list, force: true, noop: noop, verbose: verbose, secure: secure
  end
  module_function :rm_rf

  alias rmtree rm_rf
  module_function :rmtree

  # Securely removes the entry given by +path+,
  # which should be the entry for a regular file, a symbolic link,
  # or a directory.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Avoids a local vulnerability that can exist in certain circumstances;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def remove_entry_secure(path, force = false)
    unless fu_have_symlink?
      remove_entry path, force
      return
    end
    fullpath = File.expand_path(path)
    st = File.lstat(fullpath)
    unless st.directory?
      File.unlink fullpath
      return
    end
    # is a directory.
    parent_st = File.stat(File.dirname(fullpath))
    unless parent_st.world_writable?
      remove_entry path, force
      return
    end
    unless parent_st.sticky?
      raise ArgumentError, "parent directory is world writable, Bundler::FileUtils#remove_entry_secure does not work; abort: #{path.inspect} (parent directory mode #{'%o' % parent_st.mode})"
    end

    # freeze tree root
    euid = Process.euid
    dot_file = fullpath + "/."
    begin
      File.open(dot_file) {|f|
        unless fu_stat_identical_entry?(st, f.stat)
          # symlink (TOC-to-TOU attack?)
          File.unlink fullpath
          return
        end
        f.chown euid, -1
        f.chmod 0700
      }
    rescue Errno::EISDIR # JRuby in non-native mode can't open files as dirs
      File.lstat(dot_file).tap {|fstat|
        unless fu_stat_identical_entry?(st, fstat)
          # symlink (TOC-to-TOU attack?)
          File.unlink fullpath
          return
        end
        File.chown euid, -1, dot_file
        File.chmod 0700, dot_file
      }
    end

    unless fu_stat_identical_entry?(st, File.lstat(fullpath))
      # TOC-to-TOU attack?
      File.unlink fullpath
      return
    end

    # ---- tree root is frozen ----
    root = Entry_.new(path)
    root.preorder_traverse do |ent|
      if ent.directory?
        ent.chown euid, -1
        ent.chmod 0700
      end
    end
    root.postorder_traverse do |ent|
      begin
        ent.remove
      rescue
        raise unless force
      end
    end
  rescue
    raise unless force
  end
  module_function :remove_entry_secure

  def fu_have_symlink?   #:nodoc:
    File.symlink nil, nil
  rescue NotImplementedError
    return false
  rescue TypeError
    return true
  end
  private_module_function :fu_have_symlink?

  def fu_stat_identical_entry?(a, b)   #:nodoc:
    a.dev == b.dev and a.ino == b.ino
  end
  private_module_function :fu_stat_identical_entry?

  # Removes the entry given by +path+,
  # which should be the entry for a regular file, a symbolic link,
  # or a directory.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: Bundler::FileUtils.remove_entry_secure.
  #
  def remove_entry(path, force = false)
    Entry_.new(path).postorder_traverse do |ent|
      begin
        ent.remove
      rescue
        raise unless force
      end
    end
  rescue
    raise unless force
  end
  module_function :remove_entry

  # Removes the file entry given by +path+,
  # which should be the entry for a regular file or a symbolic link.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def remove_file(path, force = false)
    Entry_.new(path).remove_file
  rescue
    raise unless force
  end
  module_function :remove_file

  # Recursively removes the directory entry given by +path+,
  # which should be the entry for a regular file, a symbolic link,
  # or a directory.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def remove_dir(path, force = false)
    remove_entry path, force   # FIXME?? check if it is a directory
  end
  module_function :remove_dir

  # Returns +true+ if the contents of files +a+ and +b+ are identical,
  # +false+ otherwise.
  #
  # Arguments +a+ and +b+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Bundler::FileUtils.identical? and Bundler::FileUtils.cmp are aliases for Bundler::FileUtils.compare_file.
  #
  # Related: Bundler::FileUtils.compare_stream.
  #
  def compare_file(a, b)
    return false unless File.size(a) == File.size(b)
    File.open(a, 'rb') {|fa|
      File.open(b, 'rb') {|fb|
        return compare_stream(fa, fb)
      }
    }
  end
  module_function :compare_file

  alias identical? compare_file
  alias cmp compare_file
  module_function :identical?
  module_function :cmp

  # Returns +true+ if the contents of streams +a+ and +b+ are identical,
  # +false+ otherwise.
  #
  # Arguments +a+ and +b+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Related: Bundler::FileUtils.compare_file.
  #
  def compare_stream(a, b)
    bsize = fu_stream_blksize(a, b)

    sa = String.new(capacity: bsize)
    sb = String.new(capacity: bsize)

    begin
      a.read(bsize, sa)
      b.read(bsize, sb)
      return true if sa.empty? && sb.empty?
    end while sa == sb
    false
  end
  module_function :compare_stream

  # Copies a file entry.
  # See {install(1)}[https://man7.org/linux/man-pages/man1/install.1.html].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments];
  #
  # If the entry at +dest+ does not exist, copies from +src+ to +dest+:
  #
  #   File.read('src0.txt')    # => "aaa\n"
  #   File.exist?('dest0.txt') # => false
  #   Bundler::FileUtils.install('src0.txt', 'dest0.txt')
  #   File.read('dest0.txt')   # => "aaa\n"
  #
  # If +dest+ is a file entry, copies from +src+ to +dest+, overwriting:
  #
  #   File.read('src1.txt')  # => "aaa\n"
  #   File.read('dest1.txt') # => "bbb\n"
  #   Bundler::FileUtils.install('src1.txt', 'dest1.txt')
  #   File.read('dest1.txt') # => "aaa\n"
  #
  # If +dest+ is a directory entry, copies from +src+ to <tt>dest/src</tt>,
  # overwriting if necessary:
  #
  #   File.read('src2.txt')       # => "aaa\n"
  #   File.read('dest2/src2.txt') # => "bbb\n"
  #   Bundler::FileUtils.install('src2.txt', 'dest2')
  #   File.read('dest2/src2.txt') # => "aaa\n"
  #
  # If +src+ is an array of paths and +dest+ points to a directory,
  # copies each path +path+ in +src+ to <tt>dest/path</tt>:
  #
  #   File.file?('src3.txt') # => true
  #   File.file?('src3.dat') # => true
  #   Bundler::FileUtils.mkdir('dest3')
  #   Bundler::FileUtils.install(['src3.txt', 'src3.dat'], 'dest3')
  #   File.file?('dest3/src3.txt') # => true
  #   File.file?('dest3/src3.dat') # => true
  #
  # Keyword arguments:
  #
  # - <tt>group: <i>group</i></tt> - changes the group if not +nil+,
  #   using {File.chown}[rdoc-ref:File.chown].
  # - <tt>mode: <i>permissions</i></tt> - changes the permissions.
  #   using {File.chmod}[rdoc-ref:File.chmod].
  # - <tt>noop: true</tt> - does not copy entries; returns +nil+.
  # - <tt>owner: <i>owner</i></tt> - changes the owner if not +nil+,
  #   using {File.chown}[rdoc-ref:File.chown].
  # - <tt>preserve: true</tt> - preserve timestamps
  #   using {File.utime}[rdoc-ref:File.utime].
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.install('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.install('src1.txt', 'dest1.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.install('src2.txt', 'dest2', noop: true, verbose: true)
  #
  #   Output:
  #
  #     install -c src0.txt dest0.txt
  #     install -c src1.txt dest1.txt
  #     install -c src2.txt dest2
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def install(src, dest, mode: nil, owner: nil, group: nil, preserve: nil,
              noop: nil, verbose: nil)
    if verbose
      msg = +"install -c"
      msg << ' -p' if preserve
      msg << ' -m ' << mode_to_s(mode) if mode
      msg << " -o #{owner}" if owner
      msg << " -g #{group}" if group
      msg << ' ' << [src,dest].flatten.join(' ')
      fu_output_message msg
    end
    return if noop
    uid = fu_get_uid(owner)
    gid = fu_get_gid(group)
    fu_each_src_dest(src, dest) do |s, d|
      st = File.stat(s)
      unless File.exist?(d) and compare_file(s, d)
        remove_file d, true
        if d.end_with?('/')
          mkdir_p d
          copy_file s, d + File.basename(s)
        else
          mkdir_p File.expand_path('..', d)
          copy_file s, d
        end
        File.utime st.atime, st.mtime, d if preserve
        File.chmod fu_mode(mode, st), d if mode
        File.chown uid, gid, d if uid or gid
      end
    end
  end
  module_function :install

  def user_mask(target)  #:nodoc:
    target.each_char.inject(0) do |mask, chr|
      case chr
      when "u"
        mask | 04700
      when "g"
        mask | 02070
      when "o"
        mask | 01007
      when "a"
        mask | 07777
      else
        raise ArgumentError, "invalid 'who' symbol in file mode: #{chr}"
      end
    end
  end
  private_module_function :user_mask

  def apply_mask(mode, user_mask, op, mode_mask)   #:nodoc:
    case op
    when '='
      (mode & ~user_mask) | (user_mask & mode_mask)
    when '+'
      mode | (user_mask & mode_mask)
    when '-'
      mode & ~(user_mask & mode_mask)
    end
  end
  private_module_function :apply_mask

  def symbolic_modes_to_i(mode_sym, path)  #:nodoc:
    path = File.stat(path) unless File::Stat === path
    mode = path.mode
    mode_sym.split(/,/).inject(mode & 07777) do |current_mode, clause|
      target, *actions = clause.split(/([=+-])/)
      raise ArgumentError, "invalid file mode: #{mode_sym}" if actions.empty?
      target = 'a' if target.empty?
      user_mask = user_mask(target)
      actions.each_slice(2) do |op, perm|
        need_apply = op == '='
        mode_mask = (perm || '').each_char.inject(0) do |mask, chr|
          case chr
          when "r"
            mask | 0444
          when "w"
            mask | 0222
          when "x"
            mask | 0111
          when "X"
            if path.directory?
              mask | 0111
            else
              mask
            end
          when "s"
            mask | 06000
          when "t"
            mask | 01000
          when "u", "g", "o"
            if mask.nonzero?
              current_mode = apply_mask(current_mode, user_mask, op, mask)
            end
            need_apply = false
            copy_mask = user_mask(chr)
            (current_mode & copy_mask) / (copy_mask & 0111) * (user_mask & 0111)
          else
            raise ArgumentError, "invalid 'perm' symbol in file mode: #{chr}"
          end
        end

        if mode_mask.nonzero? || need_apply
          current_mode = apply_mask(current_mode, user_mask, op, mode_mask)
        end
      end
      current_mode
    end
  end
  private_module_function :symbolic_modes_to_i

  def fu_mode(mode, path)  #:nodoc:
    mode.is_a?(String) ? symbolic_modes_to_i(mode, path) : mode
  end
  private_module_function :fu_mode

  def mode_to_s(mode)  #:nodoc:
    mode.is_a?(String) ? mode : "%o" % mode
  end
  private_module_function :mode_to_s

  # Changes permissions on the entries at the paths given in +list+
  # (a single path or an array of paths)
  # to the permissions given by +mode+;
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise:
  #
  # - Modifies each entry that is a regular file using
  #   {File.chmod}[rdoc-ref:File.chmod].
  # - Modifies each entry that is a symbolic link using
  #   {File.lchmod}[rdoc-ref:File.lchmod].
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Argument +mode+ may be either an integer or a string:
  #
  # - \Integer +mode+: represents the permission bits to be set:
  #
  #     Bundler::FileUtils.chmod(0755, 'src0.txt')
  #     Bundler::FileUtils.chmod(0644, ['src0.txt', 'src0.dat'])
  #
  # - \String +mode+: represents the permissions to be set:
  #
  #   The string is of the form <tt>[targets][[operator][perms[,perms]]</tt>, where:
  #
  #   - +targets+ may be any combination of these letters:
  #
  #     - <tt>'u'</tt>: permissions apply to the file's owner.
  #     - <tt>'g'</tt>: permissions apply to users in the file's group.
  #     - <tt>'o'</tt>: permissions apply to other users not in the file's group.
  #     - <tt>'a'</tt> (the default): permissions apply to all users.
  #
  #   - +operator+ may be one of these letters:
  #
  #     - <tt>'+'</tt>: adds permissions.
  #     - <tt>'-'</tt>: removes permissions.
  #     - <tt>'='</tt>: sets (replaces) permissions.
  #
  #   - +perms+ (may be repeated, with separating commas)
  #     may be any combination of these letters:
  #
  #     - <tt>'r'</tt>: Read.
  #     - <tt>'w'</tt>: Write.
  #     - <tt>'x'</tt>: Execute (search, for a directory).
  #     - <tt>'X'</tt>: Search (for a directories only;
  #       must be used with <tt>'+'</tt>)
  #     - <tt>'s'</tt>: Uid or gid.
  #     - <tt>'t'</tt>: Sticky bit.
  #
  #   Examples:
  #
  #     Bundler::FileUtils.chmod('u=wrx,go=rx', 'src1.txt')
  #     Bundler::FileUtils.chmod('u=wrx,go=rx', '/usr/bin/ruby')
  #
  # Keyword arguments:
  #
  # - <tt>noop: true</tt> - does not change permissions; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.chmod(0755, 'src0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.chmod(0644, ['src0.txt', 'src0.dat'], noop: true, verbose: true)
  #     Bundler::FileUtils.chmod('u=wrx,go=rx', 'src1.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.chmod('u=wrx,go=rx', '/usr/bin/ruby', noop: true, verbose: true)
  #
  #   Output:
  #
  #     chmod 755 src0.txt
  #     chmod 644 src0.txt src0.dat
  #     chmod u=wrx,go=rx src1.txt
  #     chmod u=wrx,go=rx /usr/bin/ruby
  #
  # Related: Bundler::FileUtils.chmod_R.
  #
  def chmod(mode, list, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message sprintf('chmod %s %s', mode_to_s(mode), list.join(' ')) if verbose
    return if noop
    list.each do |path|
      Entry_.new(path).chmod(fu_mode(mode, path))
    end
  end
  module_function :chmod

  # Like Bundler::FileUtils.chmod, but changes permissions recursively.
  #
  def chmod_R(mode, list, noop: nil, verbose: nil, force: nil)
    list = fu_list(list)
    fu_output_message sprintf('chmod -R%s %s %s',
                              (force ? 'f' : ''),
                              mode_to_s(mode), list.join(' ')) if verbose
    return if noop
    list.each do |root|
      Entry_.new(root).traverse do |ent|
        begin
          ent.chmod(fu_mode(mode, ent.path))
        rescue
          raise unless force
        end
      end
    end
  end
  module_function :chmod_R

  # Changes the owner and group on the entries at the paths given in +list+
  # (a single path or an array of paths)
  # to the given +user+ and +group+;
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise:
  #
  # - Modifies each entry that is a regular file using
  #   {File.chown}[rdoc-ref:File.chown].
  # - Modifies each entry that is a symbolic link using
  #   {File.lchown}[rdoc-ref:File.lchown].
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # User and group:
  #
  # - Argument +user+ may be a user name or a user id;
  #   if +nil+ or +-1+, the user is not changed.
  # - Argument +group+ may be a group name or a group id;
  #   if +nil+ or +-1+, the group is not changed.
  # - The user must be a member of the group.
  #
  # Examples:
  #
  #   # One path.
  #   # User and group as string names.
  #   File.stat('src0.txt').uid # => 1004
  #   File.stat('src0.txt').gid # => 1004
  #   Bundler::FileUtils.chown('user2', 'group1', 'src0.txt')
  #   File.stat('src0.txt').uid # => 1006
  #   File.stat('src0.txt').gid # => 1005
  #
  #   # User and group as uid and gid.
  #   Bundler::FileUtils.chown(1004, 1004, 'src0.txt')
  #   File.stat('src0.txt').uid # => 1004
  #   File.stat('src0.txt').gid # => 1004
  #
  #   # Array of paths.
  #   Bundler::FileUtils.chown(1006, 1005, ['src0.txt', 'src0.dat'])
  #
  #   # Directory (not recursive).
  #   Bundler::FileUtils.chown('user2', 'group1', '.')
  #
  # Keyword arguments:
  #
  # - <tt>noop: true</tt> - does not change permissions; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.chown('user2', 'group1', 'src0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.chown(1004, 1004, 'src0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.chown(1006, 1005, ['src0.txt', 'src0.dat'], noop: true, verbose: true)
  #     Bundler::FileUtils.chown('user2', 'group1', path, noop: true, verbose: true)
  #     Bundler::FileUtils.chown('user2', 'group1', '.', noop: true, verbose: true)
  #
  #   Output:
  #
  #     chown user2:group1 src0.txt
  #     chown 1004:1004 src0.txt
  #     chown 1006:1005 src0.txt src0.dat
  #     chown user2:group1 src0.txt
  #     chown user2:group1 .
  #
  # Related: Bundler::FileUtils.chown_R.
  #
  def chown(user, group, list, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message sprintf('chown %s %s',
                              (group ? "#{user}:#{group}" : user || ':'),
                              list.join(' ')) if verbose
    return if noop
    uid = fu_get_uid(user)
    gid = fu_get_gid(group)
    list.each do |path|
      Entry_.new(path).chown uid, gid
    end
  end
  module_function :chown

  # Like Bundler::FileUtils.chown, but changes owner and group recursively.
  #
  def chown_R(user, group, list, noop: nil, verbose: nil, force: nil)
    list = fu_list(list)
    fu_output_message sprintf('chown -R%s %s %s',
                              (force ? 'f' : ''),
                              (group ? "#{user}:#{group}" : user || ':'),
                              list.join(' ')) if verbose
    return if noop
    uid = fu_get_uid(user)
    gid = fu_get_gid(group)
    list.each do |root|
      Entry_.new(root).traverse do |ent|
        begin
          ent.chown uid, gid
        rescue
          raise unless force
        end
      end
    end
  end
  module_function :chown_R

  def fu_get_uid(user)   #:nodoc:
    return nil unless user
    case user
    when Integer
      user
    when /\A\d+\z/
      user.to_i
    else
      require 'etc'
      Etc.getpwnam(user) ? Etc.getpwnam(user).uid : nil
    end
  end
  private_module_function :fu_get_uid

  def fu_get_gid(group)   #:nodoc:
    return nil unless group
    case group
    when Integer
      group
    when /\A\d+\z/
      group.to_i
    else
      require 'etc'
      Etc.getgrnam(group) ? Etc.getgrnam(group).gid : nil
    end
  end
  private_module_function :fu_get_gid

  # Updates modification times (mtime) and access times (atime)
  # of the entries given by the paths in +list+
  # (a single path or an array of paths);
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise.
  #
  # By default, creates an empty file for any path to a non-existent entry;
  # use keyword argument +nocreate+ to raise an exception instead.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Examples:
  #
  #   # Single path.
  #   f = File.new('src0.txt') # Existing file.
  #   f.atime # => 2022-06-10 11:11:21.200277 -0700
  #   f.mtime # => 2022-06-10 11:11:21.200277 -0700
  #   Bundler::FileUtils.touch('src0.txt')
  #   f = File.new('src0.txt')
  #   f.atime # => 2022-06-11 08:28:09.8185343 -0700
  #   f.mtime # => 2022-06-11 08:28:09.8185343 -0700
  #
  #   # Array of paths.
  #   Bundler::FileUtils.touch(['src0.txt', 'src0.dat'])
  #
  # Keyword arguments:
  #
  # - <tt>mtime: <i>time</i></tt> - sets the entry's mtime to the given time,
  #   instead of the current time.
  # - <tt>nocreate: true</tt> - raises an exception if the entry does not exist.
  # - <tt>noop: true</tt> - does not touch entries; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     Bundler::FileUtils.touch('src0.txt', noop: true, verbose: true)
  #     Bundler::FileUtils.touch(['src0.txt', 'src0.dat'], noop: true, verbose: true)
  #     Bundler::FileUtils.touch(path, noop: true, verbose: true)
  #
  #   Output:
  #
  #     touch src0.txt
  #     touch src0.txt src0.dat
  #     touch src0.txt
  #
  # Related: Bundler::FileUtils.uptodate?.
  #
  def touch(list, noop: nil, verbose: nil, mtime: nil, nocreate: nil)
    list = fu_list(list)
    t = mtime
    if verbose
      fu_output_message "touch #{nocreate ? '-c ' : ''}#{t ? t.strftime('-t %Y%m%d%H%M.%S ') : ''}#{list.join ' '}"
    end
    return if noop
    list.each do |path|
      created = nocreate
      begin
        File.utime(t, t, path)
      rescue Errno::ENOENT
        raise if created
        File.open(path, 'a') {
          ;
        }
        created = true
        retry if t
      end
    end
  end
  module_function :touch

  private

  module StreamUtils_ # :nodoc:

    private

    case (defined?(::RbConfig) ? ::RbConfig::CONFIG['host_os'] : ::RUBY_PLATFORM)
    when /mswin|mingw/
      def fu_windows?; true end #:nodoc:
    else
      def fu_windows?; false end #:nodoc:
    end

    def fu_copy_stream0(src, dest, blksize = nil)   #:nodoc:
      IO.copy_stream(src, dest)
    end

    def fu_stream_blksize(*streams) #:nodoc:
      streams.each do |s|
        next unless s.respond_to?(:stat)
        size = fu_blksize(s.stat)
        return size if size
      end
      fu_default_blksize()
    end

    def fu_blksize(st) #:nodoc:
      s = st.blksize
      return nil unless s
      return nil if s == 0
      s
    end

    def fu_default_blksize #:nodoc:
      1024
    end
  end

  include StreamUtils_
  extend StreamUtils_

  class Entry_   #:nodoc: internal use only
    include StreamUtils_

    def initialize(a, b = nil, deref = false)
      @prefix = @rel = @path = nil
      if b
        @prefix = a
        @rel = b
      else
        @path = a
      end
      @deref = deref
      @stat = nil
      @lstat = nil
    end

    def inspect
      "\#<#{self.class} #{path()}>"
    end

    def path
      if @path
        File.path(@path)
      else
        join(@prefix, @rel)
      end
    end

    def prefix
      @prefix || @path
    end

    def rel
      @rel
    end

    def dereference?
      @deref
    end

    def exist?
      begin
        lstat
        true
      rescue Errno::ENOENT
        false
      end
    end

    def file?
      s = lstat!
      s and s.file?
    end

    def directory?
      s = lstat!
      s and s.directory?
    end

    def symlink?
      s = lstat!
      s and s.symlink?
    end

    def chardev?
      s = lstat!
      s and s.chardev?
    end

    def blockdev?
      s = lstat!
      s and s.blockdev?
    end

    def socket?
      s = lstat!
      s and s.socket?
    end

    def pipe?
      s = lstat!
      s and s.pipe?
    end

    S_IF_DOOR = 0xD000

    def door?
      s = lstat!
      s and (s.mode & 0xF000 == S_IF_DOOR)
    end

    def entries
      opts = {}
      opts[:encoding] = fu_windows? ? ::Encoding::UTF_8 : path.encoding

      files = Dir.children(path, **opts)

      untaint = RUBY_VERSION < '2.7'
      files.map {|n| Entry_.new(prefix(), join(rel(), untaint ? n.untaint : n)) }
    end

    def stat
      return @stat if @stat
      if lstat() and lstat().symlink?
        @stat = File.stat(path())
      else
        @stat = lstat()
      end
      @stat
    end

    def stat!
      return @stat if @stat
      if lstat! and lstat!.symlink?
        @stat = File.stat(path())
      else
        @stat = lstat!
      end
      @stat
    rescue SystemCallError
      nil
    end

    def lstat
      if dereference?
        @lstat ||= File.stat(path())
      else
        @lstat ||= File.lstat(path())
      end
    end

    def lstat!
      lstat()
    rescue SystemCallError
      nil
    end

    def chmod(mode)
      if symlink?
        File.lchmod mode, path() if have_lchmod?
      else
        File.chmod mode, path()
      end
    rescue Errno::EOPNOTSUPP
    end

    def chown(uid, gid)
      if symlink?
        File.lchown uid, gid, path() if have_lchown?
      else
        File.chown uid, gid, path()
      end
    end

    def link(dest)
      case
      when directory?
        if !File.exist?(dest) and descendant_directory?(dest, path)
          raise ArgumentError, "cannot link directory %s to itself %s" % [path, dest]
        end
        begin
          Dir.mkdir dest
        rescue
          raise unless File.directory?(dest)
        end
      else
        File.link path(), dest
      end
    end

    def copy(dest)
      lstat
      case
      when file?
        copy_file dest
      when directory?
        if !File.exist?(dest) and descendant_directory?(dest, path)
          raise ArgumentError, "cannot copy directory %s to itself %s" % [path, dest]
        end
        begin
          Dir.mkdir dest
        rescue
          raise unless File.directory?(dest)
        end
      when symlink?
        File.symlink File.readlink(path()), dest
      when chardev?, blockdev?
        raise "cannot handle device file"
      when socket?
        begin
          require 'socket'
        rescue LoadError
          raise "cannot handle socket"
        else
          raise "cannot handle socket" unless defined?(UNIXServer)
        end
        UNIXServer.new(dest).close
        File.chmod lstat().mode, dest
      when pipe?
        raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
        File.mkfifo dest, lstat().mode
      when door?
        raise "cannot handle door: #{path()}"
      else
        raise "unknown file type: #{path()}"
      end
    end

    def copy_file(dest)
      File.open(path()) do |s|
        File.open(dest, 'wb', s.stat.mode) do |f|
          IO.copy_stream(s, f)
        end
      end
    end

    def copy_metadata(path)
      st = lstat()
      if !st.symlink?
        File.utime st.atime, st.mtime, path
      end
      mode = st.mode
      begin
        if st.symlink?
          begin
            File.lchown st.uid, st.gid, path
          rescue NotImplementedError
          end
        else
          File.chown st.uid, st.gid, path
        end
      rescue Errno::EPERM, Errno::EACCES
        # clear setuid/setgid
        mode &= 01777
      end
      if st.symlink?
        begin
          File.lchmod mode, path
        rescue NotImplementedError, Errno::EOPNOTSUPP
        end
      else
        File.chmod mode, path
      end
    end

    def remove
      if directory?
        remove_dir1
      else
        remove_file
      end
    end

    def remove_dir1
      platform_support {
        Dir.rmdir path().chomp(?/)
      }
    end

    def remove_file
      platform_support {
        File.unlink path
      }
    end

    def platform_support
      return yield unless fu_windows?
      first_time_p = true
      begin
        yield
      rescue Errno::ENOENT
        raise
      rescue => err
        if first_time_p
          first_time_p = false
          begin
            File.chmod 0700, path()   # Windows does not have symlink
            retry
          rescue SystemCallError
          end
        end
        raise err
      end
    end

    def preorder_traverse
      stack = [self]
      while ent = stack.pop
        yield ent
        stack.concat ent.entries.reverse if ent.directory?
      end
    end

    alias traverse preorder_traverse

    def postorder_traverse
      if directory?
        begin
          children = entries()
        rescue Errno::EACCES
          # Failed to get the list of children.
          # Assuming there is no children, try to process the parent directory.
          yield self
          return
        end

        children.each do |ent|
          ent.postorder_traverse do |e|
            yield e
          end
        end
      end
      yield self
    end

    def wrap_traverse(pre, post)
      pre.call self
      if directory?
        entries.each do |ent|
          ent.wrap_traverse pre, post
        end
      end
      post.call self
    end

    private

    @@fileutils_rb_have_lchmod = nil

    def have_lchmod?
      # This is not MT-safe, but it does not matter.
      if @@fileutils_rb_have_lchmod == nil
        @@fileutils_rb_have_lchmod = check_have_lchmod?
      end
      @@fileutils_rb_have_lchmod
    end

    def check_have_lchmod?
      return false unless File.respond_to?(:lchmod)
      File.lchmod 0
      return true
    rescue NotImplementedError
      return false
    end

    @@fileutils_rb_have_lchown = nil

    def have_lchown?
      # This is not MT-safe, but it does not matter.
      if @@fileutils_rb_have_lchown == nil
        @@fileutils_rb_have_lchown = check_have_lchown?
      end
      @@fileutils_rb_have_lchown
    end

    def check_have_lchown?
      return false unless File.respond_to?(:lchown)
      File.lchown nil, nil
      return true
    rescue NotImplementedError
      return false
    end

    def join(dir, base)
      return File.path(dir) if not base or base == '.'
      return File.path(base) if not dir or dir == '.'
      begin
        File.join(dir, base)
      rescue EncodingError
        if fu_windows?
          File.join(dir.encode(::Encoding::UTF_8), base.encode(::Encoding::UTF_8))
        else
          raise
        end
      end
    end

    if File::ALT_SEPARATOR
      DIRECTORY_TERM = "(?=[/#{Regexp.quote(File::ALT_SEPARATOR)}]|\\z)"
    else
      DIRECTORY_TERM = "(?=/|\\z)"
    end

    def descendant_directory?(descendant, ascendant)
      if File::FNM_SYSCASE.nonzero?
        File.expand_path(File.dirname(descendant)).casecmp(File.expand_path(ascendant)) == 0
      else
        File.expand_path(File.dirname(descendant)) == File.expand_path(ascendant)
      end
    end
  end   # class Entry_

  def fu_list(arg)   #:nodoc:
    [arg].flatten.map {|path| File.path(path) }
  end
  private_module_function :fu_list

  def fu_each_src_dest(src, dest)   #:nodoc:
    fu_each_src_dest0(src, dest) do |s, d|
      raise ArgumentError, "same file: #{s} and #{d}" if fu_same?(s, d)
      yield s, d
    end
  end
  private_module_function :fu_each_src_dest

  def fu_each_src_dest0(src, dest, target_directory = true)   #:nodoc:
    if tmp = Array.try_convert(src)
      tmp.each do |s|
        s = File.path(s)
        yield s, (target_directory ? File.join(dest, File.basename(s)) : dest)
      end
    else
      src = File.path(src)
      if target_directory and File.directory?(dest)
        yield src, File.join(dest, File.basename(src))
      else
        yield src, File.path(dest)
      end
    end
  end
  private_module_function :fu_each_src_dest0

  def fu_same?(a, b)   #:nodoc:
    File.identical?(a, b)
  end
  private_module_function :fu_same?

  def fu_output_message(msg)   #:nodoc:
    output = @fileutils_output if defined?(@fileutils_output)
    output ||= $stdout
    if defined?(@fileutils_label)
      msg = @fileutils_label + msg
    end
    output.puts msg
  end
  private_module_function :fu_output_message

  def fu_split_path(path) #:nodoc:
    path = File.path(path)
    list = []
    until (parent, base = File.split(path); parent == path or parent == ".")
      list << base
      path = parent
    end
    list << path
    list.reverse!
  end
  private_module_function :fu_split_path

  def fu_relative_components_from(target, base) #:nodoc:
    i = 0
    while target[i]&.== base[i]
      i += 1
    end
    Array.new(base.size-i, '..').concat(target[i..-1])
  end
  private_module_function :fu_relative_components_from

  def fu_clean_components(*comp) #:nodoc:
    comp.shift while comp.first == "."
    return comp if comp.empty?
    clean = [comp.shift]
    path = File.join(*clean, "") # ending with File::SEPARATOR
    while c = comp.shift
      if c == ".." and clean.last != ".." and !(fu_have_symlink? && File.symlink?(path))
        clean.pop
        path.chomp!(%r((?<=\A|/)[^/]+/\z), "")
      else
        clean << c
        path << c << "/"
      end
    end
    clean
  end
  private_module_function :fu_clean_components

  if fu_windows?
    def fu_starting_path?(path) #:nodoc:
      path&.start_with?(%r(\w:|/))
    end
  else
    def fu_starting_path?(path) #:nodoc:
      path&.start_with?("/")
    end
  end
  private_module_function :fu_starting_path?

  # This hash table holds command options.
  OPT_TABLE = {}    #:nodoc: internal use only
  (private_instance_methods & methods(false)).inject(OPT_TABLE) {|tbl, name|
    (tbl[name.to_s] = instance_method(name).parameters).map! {|t, n| n if t == :key}.compact!
    tbl
  }

  public

  # Returns an array of the string names of \Bundler::FileUtils methods
  # that accept one or more keyword arguments:
  #
  #   Bundler::FileUtils.commands.sort.take(3) # => ["cd", "chdir", "chmod"]
  #
  def self.commands
    OPT_TABLE.keys
  end

  # Returns an array of the string keyword names:
  #
  #   Bundler::FileUtils.options.take(3) # => ["noop", "verbose", "force"]
  #
  def self.options
    OPT_TABLE.values.flatten.uniq.map {|sym| sym.to_s }
  end

  # Returns +true+ if method +mid+ accepts the given option +opt+, +false+ otherwise;
  # the arguments may be strings or symbols:
  #
  #   Bundler::FileUtils.have_option?(:chmod, :noop) # => true
  #   Bundler::FileUtils.have_option?('chmod', 'secure') # => false
  #
  def self.have_option?(mid, opt)
    li = OPT_TABLE[mid.to_s] or raise ArgumentError, "no such method: #{mid}"
    li.include?(opt)
  end

  # Returns an array of the string keyword name for method +mid+;
  # the argument may be a string or a symbol:
  #
  #   Bundler::FileUtils.options_of(:rm) # => ["force", "noop", "verbose"]
  #   Bundler::FileUtils.options_of('mv') # => ["force", "noop", "verbose", "secure"]
  #
  def self.options_of(mid)
    OPT_TABLE[mid.to_s].map {|sym| sym.to_s }
  end

  # Returns an array of the string method names of the methods
  # that accept the given keyword option +opt+;
  # the argument must be a symbol:
  #
  #   Bundler::FileUtils.collect_method(:preserve) # => ["cp", "copy", "cp_r", "install"]
  #
  def self.collect_method(opt)
    OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
  end

  private

  LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern) # :nodoc:
  module LowMethods # :nodoc: internal use only
    private
    def _do_nothing(*)end
    ::Bundler::FileUtils::LOW_METHODS.map {|name| alias_method name, :_do_nothing}
  end

  METHODS = singleton_methods() - [:private_module_function,                  # :nodoc:
      :commands, :options, :have_option?, :options_of, :collect_method]

  #
  # This module has all methods of Bundler::FileUtils module, but it outputs messages
  # before acting.  This equates to passing the <tt>:verbose</tt> flag to
  # methods in Bundler::FileUtils.
  #
  module Verbose
    include Bundler::FileUtils
    names = ::Bundler::FileUtils.collect_method(:verbose)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, verbose: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::Bundler::FileUtils::METHODS)
    end
  end

  #
  # This module has all methods of Bundler::FileUtils module, but never changes
  # files/directories.  This equates to passing the <tt>:noop</tt> flag
  # to methods in Bundler::FileUtils.
  #
  module NoWrite
    include Bundler::FileUtils
    include LowMethods
    names = ::Bundler::FileUtils.collect_method(:noop)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, noop: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::Bundler::FileUtils::METHODS)
    end
  end

  #
  # This module has all methods of Bundler::FileUtils module, but never changes
  # files/directories, with printing message before acting.
  # This equates to passing the <tt>:noop</tt> and <tt>:verbose</tt> flag
  # to methods in Bundler::FileUtils.
  #
  module DryRun
    include Bundler::FileUtils
    include LowMethods
    names = ::Bundler::FileUtils.collect_method(:noop)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, noop: true, verbose: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::Bundler::FileUtils::METHODS)
    end
  end

end
PK*J[��KZTZTAshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor.rbnu�[���require_relative "thor/base"

class Bundler::Thor
  $thor_runner ||= false
  class << self
    # Allows for custom "Command" package naming.
    #
    # === Parameters
    # name<String>
    # options<Hash>
    #
    def package_name(name, _ = {})
      @package_name = name.nil? || name == "" ? nil : name
    end

    # Sets the default command when thor is executed without an explicit command to be called.
    #
    # ==== Parameters
    # meth<Symbol>:: name of the default command
    #
    def default_command(meth = nil)
      if meth
        @default_command = meth == :none ? "help" : meth.to_s
      else
        @default_command ||= from_superclass(:default_command, "help")
      end
    end
    alias_method :default_task, :default_command

    # Registers another Bundler::Thor subclass as a command.
    #
    # ==== Parameters
    # klass<Class>:: Bundler::Thor subclass to register
    # command<String>:: Subcommand name to use
    # usage<String>:: Short usage for the subcommand
    # description<String>:: Description for the subcommand
    def register(klass, subcommand_name, usage, description, options = {})
      if klass <= Bundler::Thor::Group
        desc usage, description, options
        define_method(subcommand_name) { |*args| invoke(klass, args) }
      else
        desc usage, description, options
        subcommand subcommand_name, klass
      end
    end

    # Defines the usage and the description of the next command.
    #
    # ==== Parameters
    # usage<String>
    # description<String>
    # options<String>
    #
    def desc(usage, description, options = {})
      if options[:for]
        command = find_and_refresh_command(options[:for])
        command.usage = usage             if usage
        command.description = description if description
      else
        @usage = usage
        @desc = description
        @hide = options[:hide] || false
      end
    end

    # Defines the long description of the next command.
    #
    # Long description is by default indented, line-wrapped and repeated whitespace merged.
    # In order to print long description verbatim, with indentation and spacing exactly
    # as found in the code, use the +wrap+ option
    #
    #   long_desc 'your very long description', wrap: false
    #
    # ==== Parameters
    # long description<String>
    # options<Hash>
    #
    def long_desc(long_description, options = {})
      if options[:for]
        command = find_and_refresh_command(options[:for])
        command.long_description = long_description if long_description
      else
        @long_desc = long_description
        @long_desc_wrap = options[:wrap] != false
      end
    end

    # Maps an input to a command. If you define:
    #
    #   map "-T" => "list"
    #
    # Running:
    #
    #   thor -T
    #
    # Will invoke the list command.
    #
    # ==== Parameters
    # Hash[String|Array => Symbol]:: Maps the string or the strings in the array to the given command.
    #
    def map(mappings = nil, **kw)
      @map ||= from_superclass(:map, {})

      if mappings && !kw.empty?
        mappings = kw.merge!(mappings)
      else
        mappings ||= kw
      end
      if mappings
        mappings.each do |key, value|
          if key.respond_to?(:each)
            key.each { |subkey| @map[subkey] = value }
          else
            @map[key] = value
          end
        end
      end

      @map
    end

    # Declares the options for the next command to be declared.
    #
    # ==== Parameters
    # Hash[Symbol => Object]:: The hash key is the name of the option and the value
    # is the type of the option. Can be :string, :array, :hash, :boolean, :numeric
    # or :required (string). If you give a value, the type of the value is used.
    #
    def method_options(options = nil)
      @method_options ||= {}
      build_options(options, @method_options) if options
      @method_options
    end

    alias_method :options, :method_options

    # Adds an option to the set of method options. If :for is given as option,
    # it allows you to change the options from a previous defined command.
    #
    #   def previous_command
    #     # magic
    #   end
    #
    #   method_option :foo, :for => :previous_command
    #
    #   def next_command
    #     # magic
    #   end
    #
    # ==== Parameters
    # name<Symbol>:: The name of the argument.
    # options<Hash>:: Described below.
    #
    # ==== Options
    # :desc     - Description for the argument.
    # :required - If the argument is required or not.
    # :default  - Default value for this argument. It cannot be required and have default values.
    # :aliases  - Aliases for this option.
    # :type     - The type of the argument, can be :string, :hash, :array, :numeric or :boolean.
    # :banner   - String to show on usage notes.
    # :hide     - If you want to hide this option from the help.
    #
    def method_option(name, options = {})
      unless [ Symbol, String ].any? { |klass| name.is_a?(klass) }
        raise ArgumentError, "Expected a Symbol or String, got #{name.inspect}"
      end
      scope = if options[:for]
        find_and_refresh_command(options[:for]).options
      else
        method_options
      end

      build_option(name, options, scope)
    end
    alias_method :option, :method_option

    # Adds and declares option group for exclusive options in the
    # block and arguments. You can declare options as the outside of the block.
    #
    # If :for is given as option, it allows you to change the options from
    # a previous defined command.
    #
    # ==== Parameters
    # Array[Bundler::Thor::Option.name]
    # options<Hash>:: :for is applied for previous defined command.
    #
    # ==== Examples
    #
    #   exclusive do
    #     option :one
    #     option :two
    #   end
    #
    # Or
    #
    #   option :one
    #   option :two
    #   exclusive :one, :two
    #
    # If you give "--one" and "--two" at the same time ExclusiveArgumentsError
    # will be raised.
    #
    def method_exclusive(*args, &block)
      register_options_relation_for(:method_options,
                                    :method_exclusive_option_names, *args, &block)
    end
    alias_method :exclusive, :method_exclusive

    # Adds and declares option group for required at least one of options in the
    # block of arguments. You can declare options as the outside of the block.
    #
    # If :for is given as option, it allows you to change the options from
    # a previous defined command.
    #
    # ==== Parameters
    # Array[Bundler::Thor::Option.name]
    # options<Hash>:: :for is applied for previous defined command.
    #
    # ==== Examples
    #
    #   at_least_one do
    #     option :one
    #     option :two
    #   end
    #
    # Or
    #
    #   option :one
    #   option :two
    #   at_least_one :one, :two
    #
    # If you do not give "--one" and "--two" AtLeastOneRequiredArgumentError
    # will be raised.
    #
    # You can use at_least_one and exclusive at the same time.
    #
    #    exclusive do
    #      at_least_one do
    #        option :one
    #        option :two
    #      end
    #    end
    #
    # Then it is required either only one of "--one" or "--two".
    #
    def method_at_least_one(*args, &block)
      register_options_relation_for(:method_options,
                                    :method_at_least_one_option_names, *args, &block)
    end
    alias_method :at_least_one, :method_at_least_one

    # Prints help information for the given command.
    #
    # ==== Parameters
    # shell<Bundler::Thor::Shell>
    # command_name<String>
    #
    def command_help(shell, command_name)
      meth = normalize_command_name(command_name)
      command = all_commands[meth]
      handle_no_command_error(meth) unless command

      shell.say "Usage:"
      shell.say "  #{banner(command).split("\n").join("\n  ")}"
      shell.say
      class_options_help(shell, nil => command.options.values)
      print_exclusive_options(shell, command)
      print_at_least_one_required_options(shell, command)

      if command.long_description
        shell.say "Description:"
        if command.wrap_long_description
          shell.print_wrapped(command.long_description, indent: 2)
        else
          shell.say command.long_description
        end
      else
        shell.say command.description
      end
    end
    alias_method :task_help, :command_help

    # Prints help information for this class.
    #
    # ==== Parameters
    # shell<Bundler::Thor::Shell>
    #
    def help(shell, subcommand = false)
      list = printable_commands(true, subcommand)
      Bundler::Thor::Util.thor_classes_in(self).each do |klass|
        list += klass.printable_commands(false)
      end
      sort_commands!(list)

      if defined?(@package_name) && @package_name
        shell.say "#{@package_name} commands:"
      else
        shell.say "Commands:"
      end

      shell.print_table(list, indent: 2, truncate: true)
      shell.say
      class_options_help(shell)
      print_exclusive_options(shell)
      print_at_least_one_required_options(shell)
    end

    # Returns commands ready to be printed.
    def printable_commands(all = true, subcommand = false)
      (all ? all_commands : commands).map do |_, command|
        next if command.hidden?
        item = []
        item << banner(command, false, subcommand)
        item << (command.description ? "# #{command.description.gsub(/\s+/m, ' ')}" : "")
        item
      end.compact
    end
    alias_method :printable_tasks, :printable_commands

    def subcommands
      @subcommands ||= from_superclass(:subcommands, [])
    end
    alias_method :subtasks, :subcommands

    def subcommand_classes
      @subcommand_classes ||= {}
    end

    def subcommand(subcommand, subcommand_class)
      subcommands << subcommand.to_s
      subcommand_class.subcommand_help subcommand
      subcommand_classes[subcommand.to_s] = subcommand_class

      define_method(subcommand) do |*args|
        args, opts = Bundler::Thor::Arguments.split(args)
        invoke_args = [args, opts, {invoked_via_subcommand: true, class_options: options}]
        invoke_args.unshift "help" if opts.delete("--help") || opts.delete("-h")
        invoke subcommand_class, *invoke_args
      end
      subcommand_class.commands.each do |_meth, command|
        command.ancestor_name = subcommand
      end
    end
    alias_method :subtask, :subcommand

    # Extend check unknown options to accept a hash of conditions.
    #
    # === Parameters
    # options<Hash>: A hash containing :only and/or :except keys
    def check_unknown_options!(options = {})
      @check_unknown_options ||= {}
      options.each do |key, value|
        if value
          @check_unknown_options[key] = Array(value)
        else
          @check_unknown_options.delete(key)
        end
      end
      @check_unknown_options
    end

    # Overwrite check_unknown_options? to take subcommands and options into account.
    def check_unknown_options?(config) #:nodoc:
      options = check_unknown_options
      return false unless options

      command = config[:current_command]
      return true unless command

      name = command.name

      if subcommands.include?(name)
        false
      elsif options[:except]
        !options[:except].include?(name.to_sym)
      elsif options[:only]
        options[:only].include?(name.to_sym)
      else
        true
      end
    end

    # Stop parsing of options as soon as an unknown option or a regular
    # argument is encountered.  All remaining arguments are passed to the command.
    # This is useful if you have a command that can receive arbitrary additional
    # options, and where those additional options should not be handled by
    # Bundler::Thor.
    #
    # ==== Example
    #
    # To better understand how this is useful, let's consider a command that calls
    # an external command.  A user may want to pass arbitrary options and
    # arguments to that command.  The command itself also accepts some options,
    # which should be handled by Bundler::Thor.
    #
    #   class_option "verbose",  :type => :boolean
    #   stop_on_unknown_option! :exec
    #   check_unknown_options!  :except => :exec
    #
    #   desc "exec", "Run a shell command"
    #   def exec(*args)
    #     puts "diagnostic output" if options[:verbose]
    #     Kernel.exec(*args)
    #   end
    #
    # Here +exec+ can be called with +--verbose+ to get diagnostic output,
    # e.g.:
    #
    #   $ thor exec --verbose echo foo
    #   diagnostic output
    #   foo
    #
    # But if +--verbose+ is given after +echo+, it is passed to +echo+ instead:
    #
    #   $ thor exec echo --verbose foo
    #   --verbose foo
    #
    # ==== Parameters
    # Symbol ...:: A list of commands that should be affected.
    def stop_on_unknown_option!(*command_names)
      @stop_on_unknown_option = stop_on_unknown_option | command_names
    end

    def stop_on_unknown_option?(command) #:nodoc:
      command && stop_on_unknown_option.include?(command.name.to_sym)
    end

    # Disable the check for required options for the given commands.
    # This is useful if you have a command that does not need the required options
    # to work, like help.
    #
    # ==== Parameters
    # Symbol ...:: A list of commands that should be affected.
    def disable_required_check!(*command_names)
      @disable_required_check = disable_required_check | command_names
    end

    def disable_required_check?(command) #:nodoc:
      command && disable_required_check.include?(command.name.to_sym)
    end

    # Checks if a specified command exists.
    #
    # ==== Parameters
    # command_name<String>:: The name of the command to check for existence.
    #
    # ==== Returns
    # Boolean:: +true+ if the command exists, +false+ otherwise.
    def command_exists?(command_name) #:nodoc:
      commands.keys.include?(normalize_command_name(command_name))
    end

  protected

    # Returns this class exclusive options array set.
    #
    # ==== Returns
    # Array[Array[Bundler::Thor::Option.name]]
    #
    def method_exclusive_option_names #:nodoc:
      @method_exclusive_option_names ||= []
    end

    # Returns this class at least one of required options array set.
    #
    # ==== Returns
    # Array[Array[Bundler::Thor::Option.name]]
    #
    def method_at_least_one_option_names #:nodoc:
      @method_at_least_one_option_names ||= []
    end

    def stop_on_unknown_option #:nodoc:
      @stop_on_unknown_option ||= []
    end

    # help command has the required check disabled by default.
    def disable_required_check #:nodoc:
      @disable_required_check ||= [:help]
    end

    def print_exclusive_options(shell, command = nil) # :nodoc:
      opts = []
      opts  = command.method_exclusive_option_names unless command.nil?
      opts += class_exclusive_option_names
      unless opts.empty?
        shell.say "Exclusive Options:"
        shell.print_table(opts.map{ |ex| ex.map{ |e| "--#{e}"}}, indent: 2 )
        shell.say
      end
    end

    def print_at_least_one_required_options(shell, command = nil) # :nodoc:
      opts = []
      opts = command.method_at_least_one_option_names unless command.nil?
      opts += class_at_least_one_option_names
      unless opts.empty?
        shell.say "Required At Least One:"
        shell.print_table(opts.map{ |ex| ex.map{ |e| "--#{e}"}}, indent: 2 )
        shell.say
      end
    end

    # The method responsible for dispatching given the args.
    def dispatch(meth, given_args, given_opts, config) #:nodoc:
      meth ||= retrieve_command_name(given_args)
      command = all_commands[normalize_command_name(meth)]

      if !command && config[:invoked_via_subcommand]
        # We're a subcommand and our first argument didn't match any of our
        # commands. So we put it back and call our default command.
        given_args.unshift(meth)
        command = all_commands[normalize_command_name(default_command)]
      end

      if command
        args, opts = Bundler::Thor::Options.split(given_args)
        if stop_on_unknown_option?(command) && !args.empty?
          # given_args starts with a non-option, so we treat everything as
          # ordinary arguments
          args.concat opts
          opts.clear
        end
      else
        args = given_args
        opts = nil
        command = dynamic_command_class.new(meth)
      end

      opts = given_opts || opts || []
      config[:current_command] = command
      config[:command_options] = command.options

      instance = new(args, opts, config)
      yield instance if block_given?
      args = instance.args
      trailing = args[Range.new(arguments.size, -1)]
      instance.invoke_command(command, trailing || [])
    end

    # The banner for this class. You can customize it if you are invoking the
    # thor class by another ways which is not the Bundler::Thor::Runner. It receives
    # the command that is going to be invoked and a boolean which indicates if
    # the namespace should be displayed as arguments.
    #
    def banner(command, namespace = nil, subcommand = false)
      command.formatted_usage(self, $thor_runner, subcommand).split("\n").map do |formatted_usage|
        "#{basename} #{formatted_usage}"
      end.join("\n")
    end

    def baseclass #:nodoc:
      Bundler::Thor
    end

    def dynamic_command_class #:nodoc:
      Bundler::Thor::DynamicCommand
    end

    def create_command(meth) #:nodoc:
      @usage ||= nil
      @desc ||= nil
      @long_desc ||= nil
      @long_desc_wrap ||= nil
      @hide ||= nil

      if @usage && @desc
        base_class = @hide ? Bundler::Thor::HiddenCommand : Bundler::Thor::Command
        relations = {exclusive_option_names: method_exclusive_option_names,
          at_least_one_option_names: method_at_least_one_option_names}
        commands[meth] = base_class.new(meth, @desc, @long_desc, @long_desc_wrap, @usage, method_options, relations)
        @usage, @desc, @long_desc, @long_desc_wrap, @method_options, @hide = nil
        @method_exclusive_option_names, @method_at_least_one_option_names = nil
        true
      elsif all_commands[meth] || meth == "method_missing"
        true
      else
        puts "[WARNING] Attempted to create command #{meth.inspect} without usage or description. " \
             "Call desc if you want this method to be available as command or declare it inside a " \
             "no_commands{} block. Invoked from #{caller[1].inspect}."
        false
      end
    end
    alias_method :create_task, :create_command

    def initialize_added #:nodoc:
      class_options.merge!(method_options)
      @method_options = nil
    end

    # Retrieve the command name from given args.
    def retrieve_command_name(args) #:nodoc:
      meth = args.first.to_s unless args.empty?
      args.shift if meth && (map[meth] || meth !~ /^\-/)
    end
    alias_method :retrieve_task_name, :retrieve_command_name

    # receives a (possibly nil) command name and returns a name that is in
    # the commands hash. In addition to normalizing aliases, this logic
    # will determine if a shortened command is an unambiguous substring of
    # a command or alias.
    #
    # +normalize_command_name+ also converts names like +animal-prison+
    # into +animal_prison+.
    def normalize_command_name(meth) #:nodoc:
      return default_command.to_s.tr("-", "_") unless meth

      possibilities = find_command_possibilities(meth)
      raise AmbiguousTaskError, "Ambiguous command #{meth} matches [#{possibilities.join(', ')}]" if possibilities.size > 1

      if possibilities.empty?
        meth ||= default_command
      elsif map[meth]
        meth = map[meth]
      else
        meth = possibilities.first
      end

      meth.to_s.tr("-", "_") # treat foo-bar as foo_bar
    end
    alias_method :normalize_task_name, :normalize_command_name

    # this is the logic that takes the command name passed in by the user
    # and determines whether it is an unambiguous substrings of a command or
    # alias name.
    def find_command_possibilities(meth)
      len = meth.to_s.length
      possibilities = all_commands.merge(map).keys.select { |n| meth == n[0, len] }.sort
      unique_possibilities = possibilities.map { |k| map[k] || k }.uniq

      if possibilities.include?(meth)
        [meth]
      elsif unique_possibilities.size == 1
        unique_possibilities
      else
        possibilities
      end
    end
    alias_method :find_task_possibilities, :find_command_possibilities

    def subcommand_help(cmd)
      desc "help [COMMAND]", "Describe subcommands or one specific subcommand"
      class_eval "
        def help(command = nil, subcommand = true); super; end
"
    end
    alias_method :subtask_help, :subcommand_help

    # Sort the commands, lexicographically by default.
    #
    # Can be overridden in the subclass to change the display order of the
    # commands.
    def sort_commands!(list)
      list.sort! { |a, b| a[0] <=> b[0] }
    end
  end

  include Bundler::Thor::Base

  map HELP_MAPPINGS => :help

  desc "help [COMMAND]", "Describe available commands or one specific command"
  def help(command = nil, subcommand = false)
    if command
      if self.class.subcommands.include? command
        self.class.subcommand_classes[command].help(shell, true)
      else
        self.class.command_help(shell, command)
      end
    else
      self.class.help(shell, subcommand)
    end
  end
end
PK*J[[��2QQIshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/command.rbnu�[���class Bundler::Thor
  class Command < Struct.new(:name, :description, :long_description, :wrap_long_description, :usage, :options, :options_relation, :ancestor_name)
    FILE_REGEXP = /^#{Regexp.escape(File.dirname(__FILE__))}/

    def initialize(name, description, long_description, wrap_long_description, usage, options = nil, options_relation = nil)
      super(name.to_s, description, long_description, wrap_long_description, usage, options || {}, options_relation || {})
    end

    def initialize_copy(other) #:nodoc:
      super(other)
      self.options = other.options.dup if other.options
      self.options_relation = other.options_relation.dup if other.options_relation
    end

    def hidden?
      false
    end

    # By default, a command invokes a method in the thor class. You can change this
    # implementation to create custom commands.
    def run(instance, args = [])
      arity = nil

      if private_method?(instance)
        instance.class.handle_no_command_error(name)
      elsif public_method?(instance)
        arity = instance.method(name).arity
        instance.__send__(name, *args)
      elsif local_method?(instance, :method_missing)
        instance.__send__(:method_missing, name.to_sym, *args)
      else
        instance.class.handle_no_command_error(name)
      end
    rescue ArgumentError => e
      handle_argument_error?(instance, e, caller) ? instance.class.handle_argument_error(self, e, args, arity) : (raise e)
    rescue NoMethodError => e
      handle_no_method_error?(instance, e, caller) ? instance.class.handle_no_command_error(name) : (raise e)
    end

    # Returns the formatted usage by injecting given required arguments
    # and required options into the given usage.
    def formatted_usage(klass, namespace = true, subcommand = false)
      if ancestor_name
        formatted = "#{ancestor_name} ".dup # add space
      elsif namespace
        namespace = klass.namespace
        formatted = "#{namespace.gsub(/^(default)/, '')}:".dup
      end
      formatted ||= "#{klass.namespace.split(':').last} ".dup if subcommand

      formatted ||= "".dup

      Array(usage).map do |specific_usage|
        formatted_specific_usage = formatted

        formatted_specific_usage += required_arguments_for(klass, specific_usage)

        # Add required options
        formatted_specific_usage += " #{required_options}"

        # Strip and go!
        formatted_specific_usage.strip
      end.join("\n")
    end

    def method_exclusive_option_names #:nodoc:
      self.options_relation[:exclusive_option_names] || []
    end

    def method_at_least_one_option_names #:nodoc:
      self.options_relation[:at_least_one_option_names] || []
    end

  protected

    # Add usage with required arguments
    def required_arguments_for(klass, usage)
      if klass && !klass.arguments.empty?
        usage.to_s.gsub(/^#{name}/) do |match|
          match << " " << klass.arguments.map(&:usage).compact.join(" ")
        end
      else
        usage.to_s
      end
    end

    def not_debugging?(instance)
      !(instance.class.respond_to?(:debugging) && instance.class.debugging)
    end

    def required_options
      @required_options ||= options.map { |_, o| o.usage if o.required? }.compact.sort.join(" ")
    end

    # Given a target, checks if this class name is a public method.
    def public_method?(instance) #:nodoc:
      !(instance.public_methods & [name.to_s, name.to_sym]).empty?
    end

    def private_method?(instance)
      !(instance.private_methods & [name.to_s, name.to_sym]).empty?
    end

    def local_method?(instance, name)
      methods = instance.public_methods(false) + instance.private_methods(false) + instance.protected_methods(false)
      !(methods & [name.to_s, name.to_sym]).empty?
    end

    def sans_backtrace(backtrace, caller) #:nodoc:
      saned = backtrace.reject { |frame| frame =~ FILE_REGEXP || (frame =~ /\.java:/ && RUBY_PLATFORM =~ /java/) || (frame =~ %r{^kernel/} && RUBY_ENGINE =~ /rbx/) }
      saned - caller
    end

    def handle_argument_error?(instance, error, caller)
      not_debugging?(instance) && (error.message =~ /wrong number of arguments/ || error.message =~ /given \d*, expected \d*/) && begin
        saned = sans_backtrace(error.backtrace, caller)
        saned.empty? || saned.size == 1
      end
    end

    def handle_no_method_error?(instance, error, caller)
      not_debugging?(instance) &&
        error.message =~ /^undefined method `#{name}' for #{Regexp.escape(instance.to_s)}$/
    end
  end
  Task = Command

  # A command that is hidden in help messages but still invocable.
  class HiddenCommand < Command
    def hidden?
      true
    end
  end
  HiddenTask = HiddenCommand

  # A dynamic command that handles method missing scenarios.
  class DynamicCommand < Command
    def initialize(name, options = nil)
      super(name.to_s, "A dynamically-generated command", name.to_s, nil, name.to_s, options)
    end

    def run(instance, args = [])
      if (instance.methods & [name.to_s, name.to_sym]).empty?
        super
      else
        instance.class.handle_no_command_error(name)
      end
    end
  end
  DynamicTask = DynamicCommand
end
PK*J[���Ϝ$�$Gshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/group.rbnu�[���require_relative "base"

# Bundler::Thor has a special class called Bundler::Thor::Group. The main difference to Bundler::Thor class
# is that it invokes all commands at once. It also include some methods that allows
# invocations to be done at the class method, which are not available to Bundler::Thor
# commands.
class Bundler::Thor::Group
  class << self
    # The description for this Bundler::Thor::Group. If none is provided, but a source root
    # exists, tries to find the USAGE one folder above it, otherwise searches
    # in the superclass.
    #
    # ==== Parameters
    # description<String>:: The description for this Bundler::Thor::Group.
    #
    def desc(description = nil)
      if description
        @desc = description
      else
        @desc ||= from_superclass(:desc, nil)
      end
    end

    # Prints help information.
    #
    # ==== Options
    # short:: When true, shows only usage.
    #
    def help(shell)
      shell.say "Usage:"
      shell.say "  #{banner}\n"
      shell.say
      class_options_help(shell)
      shell.say desc if desc
    end

    # Stores invocations for this class merging with superclass values.
    #
    def invocations #:nodoc:
      @invocations ||= from_superclass(:invocations, {})
    end

    # Stores invocation blocks used on invoke_from_option.
    #
    def invocation_blocks #:nodoc:
      @invocation_blocks ||= from_superclass(:invocation_blocks, {})
    end

    # Invoke the given namespace or class given. It adds an instance
    # method that will invoke the klass and command. You can give a block to
    # configure how it will be invoked.
    #
    # The namespace/class given will have its options showed on the help
    # usage. Check invoke_from_option for more information.
    #
    def invoke(*names, &block)
      options = names.last.is_a?(Hash) ? names.pop : {}
      verbose = options.fetch(:verbose, true)

      names.each do |name|
        invocations[name] = false
        invocation_blocks[name] = block if block_given?

        class_eval <<-METHOD, __FILE__, __LINE__ + 1
          def _invoke_#{name.to_s.gsub(/\W/, '_')}
            klass, command = self.class.prepare_for_invocation(nil, #{name.inspect})

            if klass
              say_status :invoke, #{name.inspect}, #{verbose.inspect}
              block = self.class.invocation_blocks[#{name.inspect}]
              _invoke_for_class_method klass, command, &block
            else
              say_status :error, %(#{name.inspect} [not found]), :red
            end
          end
        METHOD
      end
    end

    # Invoke a thor class based on the value supplied by the user to the
    # given option named "name". A class option must be created before this
    # method is invoked for each name given.
    #
    # ==== Examples
    #
    #   class GemGenerator < Bundler::Thor::Group
    #     class_option :test_framework, :type => :string
    #     invoke_from_option :test_framework
    #   end
    #
    # ==== Boolean options
    #
    # In some cases, you want to invoke a thor class if some option is true or
    # false. This is automatically handled by invoke_from_option. Then the
    # option name is used to invoke the generator.
    #
    # ==== Preparing for invocation
    #
    # In some cases you want to customize how a specified hook is going to be
    # invoked. You can do that by overwriting the class method
    # prepare_for_invocation. The class method must necessarily return a klass
    # and an optional command.
    #
    # ==== Custom invocations
    #
    # You can also supply a block to customize how the option is going to be
    # invoked. The block receives two parameters, an instance of the current
    # class and the klass to be invoked.
    #
    def invoke_from_option(*names, &block)
      options = names.last.is_a?(Hash) ? names.pop : {}
      verbose = options.fetch(:verbose, :white)

      names.each do |name|
        unless class_options.key?(name)
          raise ArgumentError, "You have to define the option #{name.inspect} " \
                              "before setting invoke_from_option."
        end

        invocations[name] = true
        invocation_blocks[name] = block if block_given?

        class_eval <<-METHOD, __FILE__, __LINE__ + 1
          def _invoke_from_option_#{name.to_s.gsub(/\W/, '_')}
            return unless options[#{name.inspect}]

            value = options[#{name.inspect}]
            value = #{name.inspect} if TrueClass === value
            klass, command = self.class.prepare_for_invocation(#{name.inspect}, value)

            if klass
              say_status :invoke, value, #{verbose.inspect}
              block = self.class.invocation_blocks[#{name.inspect}]
              _invoke_for_class_method klass, command, &block
            else
              say_status :error, %(\#{value} [not found]), :red
            end
          end
        METHOD
      end
    end

    # Remove a previously added invocation.
    #
    # ==== Examples
    #
    #   remove_invocation :test_framework
    #
    def remove_invocation(*names)
      names.each do |name|
        remove_command(name)
        remove_class_option(name)
        invocations.delete(name)
        invocation_blocks.delete(name)
      end
    end

    # Overwrite class options help to allow invoked generators options to be
    # shown recursively when invoking a generator.
    #
    def class_options_help(shell, groups = {}) #:nodoc:
      get_options_from_invocations(groups, class_options) do |klass|
        klass.send(:get_options_from_invocations, groups, class_options)
      end
      super(shell, groups)
    end

    # Get invocations array and merge options from invocations. Those
    # options are added to group_options hash. Options that already exists
    # in base_options are not added twice.
    #
    def get_options_from_invocations(group_options, base_options) #:nodoc:
      invocations.each do |name, from_option|
        value = if from_option
          option = class_options[name]
          option.type == :boolean ? name : option.default
        else
          name
        end
        next unless value

        klass, _ = prepare_for_invocation(name, value)
        next unless klass && klass.respond_to?(:class_options)

        value = value.to_s
        human_name = value.respond_to?(:classify) ? value.classify : value

        group_options[human_name] ||= []
        group_options[human_name] += klass.class_options.values.select do |class_option|
          base_options[class_option.name.to_sym].nil? && class_option.group.nil? &&
            !group_options.values.flatten.any? { |i| i.name == class_option.name }
        end

        yield klass if block_given?
      end
    end

    # Returns commands ready to be printed.
    def printable_commands(*)
      item = []
      item << banner
      item << (desc ? "# #{desc.gsub(/\s+/m, ' ')}" : "")
      [item]
    end
    alias_method :printable_tasks, :printable_commands

    def handle_argument_error(command, error, _args, arity) #:nodoc:
      msg = "#{basename} #{command.name} takes #{arity} argument".dup
      msg << "s" if arity > 1
      msg << ", but it should not."
      raise error, msg
    end

    # Checks if a specified command exists.
    #
    # ==== Parameters
    # command_name<String>:: The name of the command to check for existence.
    #
    # ==== Returns
    # Boolean:: +true+ if the command exists, +false+ otherwise.
    def command_exists?(command_name) #:nodoc:
      commands.keys.include?(command_name)
    end

  protected

    # The method responsible for dispatching given the args.
    def dispatch(command, given_args, given_opts, config) #:nodoc:
      if Bundler::Thor::HELP_MAPPINGS.include?(given_args.first)
        help(config[:shell])
        return
      end

      args, opts = Bundler::Thor::Options.split(given_args)
      opts = given_opts || opts

      instance = new(args, opts, config)
      yield instance if block_given?

      if command
        instance.invoke_command(all_commands[command])
      else
        instance.invoke_all
      end
    end

    # The banner for this class. You can customize it if you are invoking the
    # thor class by another ways which is not the Bundler::Thor::Runner.
    def banner
      "#{basename} #{self_command.formatted_usage(self, false)}"
    end

    # Represents the whole class as a command.
    def self_command #:nodoc:
      Bundler::Thor::DynamicCommand.new(namespace, class_options)
    end
    alias_method :self_task, :self_command

    def baseclass #:nodoc:
      Bundler::Thor::Group
    end

    def create_command(meth) #:nodoc:
      commands[meth.to_s] = Bundler::Thor::Command.new(meth, nil, nil, nil, nil)
      true
    end
    alias_method :create_task, :create_command
  end

  include Bundler::Thor::Base

protected

  # Shortcut to invoke with padding and block handling. Use internally by
  # invoke and invoke_from_option class methods.
  def _invoke_for_class_method(klass, command = nil, *args, &block) #:nodoc:
    with_padding do
      if block
        case block.arity
        when 3
          yield(self, klass, command)
        when 2
          yield(self, klass)
        when 1
          instance_exec(klass, &block)
        end
      else
        invoke klass, command, *args
      end
    end
  end
end
PK*J[�l��((Hshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/runner.rbnu�[���require_relative "../thor"
require_relative "group"

require "yaml"
require "digest/sha2"
require "pathname"

class Bundler::Thor::Runner < Bundler::Thor #:nodoc:
  map "-T" => :list, "-i" => :install, "-u" => :update, "-v" => :version

  def self.banner(command, all = false, subcommand = false)
    "thor " + command.formatted_usage(self, all, subcommand)
  end

  def self.exit_on_failure?
    true
  end

  # Override Bundler::Thor#help so it can give information about any class and any method.
  #
  def help(meth = nil)
    if meth && !respond_to?(meth)
      initialize_thorfiles(meth)
      klass, command = Bundler::Thor::Util.find_class_and_command_by_namespace(meth)
      self.class.handle_no_command_error(command, false) if klass.nil?
      klass.start(["-h", command].compact, shell: shell)
    else
      super
    end
  end

  # If a command is not found on Bundler::Thor::Runner, method missing is invoked and
  # Bundler::Thor::Runner is then responsible for finding the command in all classes.
  #
  def method_missing(meth, *args)
    meth = meth.to_s
    initialize_thorfiles(meth)
    klass, command = Bundler::Thor::Util.find_class_and_command_by_namespace(meth)
    self.class.handle_no_command_error(command, false) if klass.nil?
    args.unshift(command) if command
    klass.start(args, shell: shell)
  end

  desc "install NAME", "Install an optionally named Bundler::Thor file into your system commands"
  method_options as: :string, relative: :boolean, force: :boolean
  def install(name) # rubocop:disable Metrics/MethodLength
    initialize_thorfiles

    is_uri  = name =~ %r{^https?\://}

    if is_uri
      base = name
      package = :file
      require "open-uri"
      begin
        contents = URI.open(name, &:read)
      rescue OpenURI::HTTPError
        raise Error, "Error opening URI '#{name}'"
      end
    else
      # If a directory name is provided as the argument, look for a 'main.thor'
      # command in said directory.
      begin
        if File.directory?(File.expand_path(name))
          base = File.join(name, "main.thor")
          package = :directory
          contents = File.open(base, &:read)
        else
          base = name
          package = :file
          require "open-uri"
          contents = URI.open(name, &:read)
        end
      rescue Errno::ENOENT
        raise Error, "Error opening file '#{name}'"
      end
    end

    say "Your Thorfile contains:"
    say contents

    unless options["force"]
      return false if no?("Do you wish to continue [y/N]?")
    end

    as = options["as"] || begin
      first_line = contents.split("\n")[0]
      (match = first_line.match(/\s*#\s*module:\s*([^\n]*)/)) ? match[1].strip : nil
    end

    unless as
      basename = File.basename(name)
      as = ask("Please specify a name for #{name} in the system repository [#{basename}]:")
      as = basename if as.empty?
    end

    location = if options[:relative] || is_uri
      name
    else
      File.expand_path(name)
    end

    thor_yaml[as] = {
      filename: Digest::SHA256.hexdigest(name + as),
      location: location,
      namespaces: Bundler::Thor::Util.namespaces_in_content(contents, base)
    }

    save_yaml(thor_yaml)
    say "Storing thor file in your system repository"
    destination = File.join(thor_root, thor_yaml[as][:filename])

    if package == :file
      File.open(destination, "w") { |f| f.puts contents }
    else
      require "fileutils"
      FileUtils.cp_r(name, destination)
    end

    thor_yaml[as][:filename] # Indicate success
  end

  desc "version", "Show Bundler::Thor version"
  def version
    require_relative "version"
    say "Bundler::Thor #{Bundler::Thor::VERSION}"
  end

  desc "uninstall NAME", "Uninstall a named Bundler::Thor module"
  def uninstall(name)
    raise Error, "Can't find module '#{name}'" unless thor_yaml[name]
    say "Uninstalling #{name}."
    require "fileutils"
    FileUtils.rm_rf(File.join(thor_root, (thor_yaml[name][:filename]).to_s))

    thor_yaml.delete(name)
    save_yaml(thor_yaml)

    puts "Done."
  end

  desc "update NAME", "Update a Bundler::Thor file from its original location"
  def update(name)
    raise Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location]

    say "Updating '#{name}' from #{thor_yaml[name][:location]}"

    old_filename = thor_yaml[name][:filename]
    self.options = options.merge("as" => name)

    if File.directory? File.expand_path(name)
      require "fileutils"
      FileUtils.rm_rf(File.join(thor_root, old_filename))

      thor_yaml.delete(old_filename)
      save_yaml(thor_yaml)

      filename = install(name)
    else
      filename = install(thor_yaml[name][:location])
    end

    File.delete(File.join(thor_root, old_filename)) unless filename == old_filename
  end

  desc "installed", "List the installed Bundler::Thor modules and commands"
  method_options internal: :boolean
  def installed
    initialize_thorfiles(nil, true)
    display_klasses(true, options["internal"])
  end

  desc "list [SEARCH]", "List the available thor commands (--substring means .*SEARCH)"
  method_options substring: :boolean, group: :string, all: :boolean, debug: :boolean
  def list(search = "")
    initialize_thorfiles

    search = ".*#{search}" if options["substring"]
    search = /^#{search}.*/i
    group  = options[:group] || "standard"

    klasses = Bundler::Thor::Base.subclasses.select do |k|
      (options[:all] || k.group == group) && k.namespace =~ search
    end

    display_klasses(false, false, klasses)
  end

private

  def thor_root
    Bundler::Thor::Util.thor_root
  end

  def thor_yaml
    @thor_yaml ||= begin
      yaml_file = File.join(thor_root, "thor.yml")
      yaml = YAML.load_file(yaml_file) if File.exist?(yaml_file)
      yaml || {}
    end
  end

  # Save the yaml file. If none exists in thor root, creates one.
  #
  def save_yaml(yaml)
    yaml_file = File.join(thor_root, "thor.yml")

    unless File.exist?(yaml_file)
      require "fileutils"
      FileUtils.mkdir_p(thor_root)
      yaml_file = File.join(thor_root, "thor.yml")
      FileUtils.touch(yaml_file)
    end

    File.open(yaml_file, "w") { |f| f.puts yaml.to_yaml }
  end

  # Load the Thorfiles. If relevant_to is supplied, looks for specific files
  # in the thor_root instead of loading them all.
  #
  # By default, it also traverses the current path until find Bundler::Thor files, as
  # described in thorfiles. This look up can be skipped by supplying
  # skip_lookup true.
  #
  def initialize_thorfiles(relevant_to = nil, skip_lookup = false)
    thorfiles(relevant_to, skip_lookup).each do |f|
      Bundler::Thor::Util.load_thorfile(f, nil, options[:debug]) unless Bundler::Thor::Base.subclass_files.keys.include?(File.expand_path(f))
    end
  end

  # Finds Thorfiles by traversing from your current directory down to the root
  # directory of your system. If at any time we find a Bundler::Thor file, we stop.
  #
  # We also ensure that system-wide Thorfiles are loaded first, so local
  # Thorfiles can override them.
  #
  # ==== Example
  #
  # If we start at /Users/wycats/dev/thor ...
  #
  # 1. /Users/wycats/dev/thor
  # 2. /Users/wycats/dev
  # 3. /Users/wycats <-- we find a Thorfile here, so we stop
  #
  # Suppose we start at c:\Documents and Settings\james\dev\thor ...
  #
  # 1. c:\Documents and Settings\james\dev\thor
  # 2. c:\Documents and Settings\james\dev
  # 3. c:\Documents and Settings\james
  # 4. c:\Documents and Settings
  # 5. c:\ <-- no Thorfiles found!
  #
  def thorfiles(relevant_to = nil, skip_lookup = false)
    thorfiles = []

    unless skip_lookup
      Pathname.pwd.ascend do |path|
        thorfiles = Bundler::Thor::Util.globs_for(path).map { |g| Dir[g] }.flatten
        break unless thorfiles.empty?
      end
    end

    files  = (relevant_to ? thorfiles_relevant_to(relevant_to) : Bundler::Thor::Util.thor_root_glob)
    files += thorfiles
    files -= ["#{thor_root}/thor.yml"]

    files.map! do |file|
      File.directory?(file) ? File.join(file, "main.thor") : file
    end
  end

  # Load Thorfiles relevant to the given method. If you provide "foo:bar" it
  # will load all thor files in the thor.yaml that has "foo" e "foo:bar"
  # namespaces registered.
  #
  def thorfiles_relevant_to(meth)
    lookup = [meth, meth.split(":")[0...-1].join(":")]

    files = thor_yaml.select do |_, v|
      v[:namespaces] && !(v[:namespaces] & lookup).empty?
    end

    files.map { |_, v| File.join(thor_root, (v[:filename]).to_s) }
  end

  # Display information about the given klasses. If with_module is given,
  # it shows a table with information extracted from the yaml file.
  #
  def display_klasses(with_modules = false, show_internal = false, klasses = Bundler::Thor::Base.subclasses)
    klasses -= [Bundler::Thor, Bundler::Thor::Runner, Bundler::Thor::Group] unless show_internal

    raise Error, "No Bundler::Thor commands available" if klasses.empty?
    show_modules if with_modules && !thor_yaml.empty?

    list = Hash.new { |h, k| h[k] = [] }
    groups = klasses.select { |k| k.ancestors.include?(Bundler::Thor::Group) }

    # Get classes which inherit from Bundler::Thor
    (klasses - groups).each { |k| list[k.namespace.split(":").first] += k.printable_commands(false) }

    # Get classes which inherit from Bundler::Thor::Base
    groups.map! { |k| k.printable_commands(false).first }
    list["root"] = groups

    # Order namespaces with default coming first
    list = list.sort { |a, b| a[0].sub(/^default/, "") <=> b[0].sub(/^default/, "") }
    list.each { |n, commands| display_commands(n, commands) unless commands.empty? }
  end

  def display_commands(namespace, list) #:nodoc:
    list.sort! { |a, b| a[0] <=> b[0] }

    say shell.set_color(namespace, :blue, true)
    say "-" * namespace.size

    print_table(list, truncate: true)
    say
  end
  alias_method :display_tasks, :display_commands

  def show_modules #:nodoc:
    info = []
    labels = %w(Modules Namespaces)

    info << labels
    info << ["-" * labels[0].size, "-" * labels[1].size]

    thor_yaml.each do |name, hash|
      info << [name, hash[:namespaces].join(", ")]
    end

    print_table info
    say ""
  end
end
PK*J[����Hshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser.rbnu�[���require_relative "parser/argument"
require_relative "parser/arguments"
require_relative "parser/option"
require_relative "parser/options"
PK*J[�dq=77Vshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rbnu�[���class Bundler::Thor
  module LineEditor
    class Readline < Basic
      def self.available?
        begin
          require "readline"
        rescue LoadError
        end

        Object.const_defined?(:Readline)
      end

      def readline
        if echo?
          ::Readline.completion_append_character = nil
          # rb-readline does not allow Readline.completion_proc= to receive nil.
          if complete = completion_proc
            ::Readline.completion_proc = complete
          end
          ::Readline.readline(prompt, add_to_history?)
        else
          super
        end
      end

    private

      def add_to_history?
        options.fetch(:add_to_history, true)
      end

      def completion_proc
        if use_path_completion?
          proc { |text| PathCompletion.new(text).matches }
        elsif completion_options.any?
          proc do |text|
            completion_options.select { |option| option.start_with?(text) }
          end
        end
      end

      def completion_options
        options.fetch(:limited_to, [])
      end

      def use_path_completion?
        options.fetch(:path, false)
      end

      class PathCompletion
        attr_reader :text
        private :text

        def initialize(text)
          @text = text
        end

        def matches
          relative_matches
        end

      private

        def relative_matches
          absolute_matches.map { |path| path.sub(base_path, "") }
        end

        def absolute_matches
          Dir[glob_pattern].map do |path|
            if File.directory?(path)
              "#{path}/"
            else
              path
            end
          end
        end

        def glob_pattern
          "#{base_path}#{text}*"
        end

        def base_path
          "#{Dir.pwd}/"
        end
      end
    end
  end
end
PK*J[Y�t}}Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rbnu�[���class Bundler::Thor
  module LineEditor
    class Basic
      attr_reader :prompt, :options

      def self.available?
        true
      end

      def initialize(prompt, options)
        @prompt = prompt
        @options = options
      end

      def readline
        $stdout.print(prompt)
        get_input
      end

    private

      def get_input
        if echo?
          $stdin.gets
        else
          # Lazy-load io/console since it is gem-ified as of 2.3
          require "io/console"
          $stdin.noecho(&:gets)
        end
      end

      def echo?
        options.fetch(:echo, true)
      end
    end
  end
end
PK*J[�\Õ//Pshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/nested_context.rbnu�[���class Bundler::Thor
  class NestedContext
    def initialize
      @depth = 0
    end

    def enter
      push

      yield
    ensure
      pop
    end

    def entered?
      @depth.positive?
    end

  private

    def push
      @depth += 1
    end

    def pop
      @depth -= 1
    end
  end
end
PK*J[����)�)Ishare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions.rbnu�[���require_relative "actions/create_file"
require_relative "actions/create_link"
require_relative "actions/directory"
require_relative "actions/empty_directory"
require_relative "actions/file_manipulation"
require_relative "actions/inject_into_file"

class Bundler::Thor
  module Actions
    attr_accessor :behavior

    def self.included(base) #:nodoc:
      super(base)
      base.extend ClassMethods
    end

    module ClassMethods
      # Hold source paths for one Bundler::Thor instance. source_paths_for_search is the
      # method responsible to gather source_paths from this current class,
      # inherited paths and the source root.
      #
      def source_paths
        @_source_paths ||= []
      end

      # Stores and return the source root for this class
      def source_root(path = nil)
        @_source_root = path if path
        @_source_root ||= nil
      end

      # Returns the source paths in the following order:
      #
      #   1) This class source paths
      #   2) Source root
      #   3) Parents source paths
      #
      def source_paths_for_search
        paths = []
        paths += source_paths
        paths << source_root if source_root
        paths += from_superclass(:source_paths, [])
        paths
      end

      # Add runtime options that help actions execution.
      #
      def add_runtime_options!
        class_option :force, type: :boolean, aliases: "-f", group: :runtime,
                             desc: "Overwrite files that already exist"

        class_option :pretend, type: :boolean, aliases: "-p", group: :runtime,
                               desc: "Run but do not make any changes"

        class_option :quiet, type: :boolean, aliases: "-q", group: :runtime,
                             desc: "Suppress status output"

        class_option :skip, type: :boolean, aliases: "-s", group: :runtime,
                            desc: "Skip files that already exist"
      end
    end

    # Extends initializer to add more configuration options.
    #
    # ==== Configuration
    # behavior<Symbol>:: The actions default behavior. Can be :invoke or :revoke.
    #                    It also accepts :force, :skip and :pretend to set the behavior
    #                    and the respective option.
    #
    # destination_root<String>:: The root directory needed for some actions.
    #
    def initialize(args = [], options = {}, config = {})
      self.behavior = case config[:behavior].to_s
      when "force", "skip"
        _cleanup_options_and_set(options, config[:behavior])
        :invoke
      when "revoke"
        :revoke
      else
        :invoke
      end

      super
      self.destination_root = config[:destination_root]
    end

    # Wraps an action object and call it accordingly to the thor class behavior.
    #
    def action(instance) #:nodoc:
      if behavior == :revoke
        instance.revoke!
      else
        instance.invoke!
      end
    end

    # Returns the root for this thor class (also aliased as destination root).
    #
    def destination_root
      @destination_stack.last
    end

    # Sets the root for this thor class. Relatives path are added to the
    # directory where the script was invoked and expanded.
    #
    def destination_root=(root)
      @destination_stack ||= []
      @destination_stack[0] = File.expand_path(root || "")
    end

    # Returns the given path relative to the absolute root (ie, root where
    # the script started).
    #
    def relative_to_original_destination_root(path, remove_dot = true)
      root = @destination_stack[0]
      if path.start_with?(root) && [File::SEPARATOR, File::ALT_SEPARATOR, nil, ""].include?(path[root.size..root.size])
        path = path.dup
        path[0...root.size] = "."
        remove_dot ? (path[2..-1] || "") : path
      else
        path
      end
    end

    # Holds source paths in instance so they can be manipulated.
    #
    def source_paths
      @source_paths ||= self.class.source_paths_for_search
    end

    # Receives a file or directory and search for it in the source paths.
    #
    def find_in_source_paths(file)
      possible_files = [file, file + TEMPLATE_EXTNAME]
      relative_root = relative_to_original_destination_root(destination_root, false)

      source_paths.each do |source|
        possible_files.each do |f|
          source_file = File.expand_path(f, File.join(source, relative_root))
          return source_file if File.exist?(source_file)
        end
      end

      message = "Could not find #{file.inspect} in any of your source paths. ".dup

      unless self.class.source_root
        message << "Please invoke #{self.class.name}.source_root(PATH) with the PATH containing your templates. "
      end

      message << if source_paths.empty?
                   "Currently you have no source paths."
                 else
                   "Your current source paths are: \n#{source_paths.join("\n")}"
                 end

      raise Error, message
    end

    # Do something in the root or on a provided subfolder. If a relative path
    # is given it's referenced from the current root. The full path is yielded
    # to the block you provide. The path is set back to the previous path when
    # the method exits.
    #
    # Returns the value yielded by the block.
    #
    # ==== Parameters
    # dir<String>:: the directory to move to.
    # config<Hash>:: give :verbose => true to log and use padding.
    #
    def inside(dir = "", config = {}, &block)
      verbose = config.fetch(:verbose, false)
      pretend = options[:pretend]

      say_status :inside, dir, verbose
      shell.padding += 1 if verbose
      @destination_stack.push File.expand_path(dir, destination_root)

      # If the directory doesn't exist and we're not pretending
      if !File.exist?(destination_root) && !pretend
        require "fileutils"
        FileUtils.mkdir_p(destination_root)
      end

      result = nil
      if pretend
        # In pretend mode, just yield down to the block
        result = block.arity == 1 ? yield(destination_root) : yield
      else
        require "fileutils"
        FileUtils.cd(destination_root) { result = block.arity == 1 ? yield(destination_root) : yield }
      end

      @destination_stack.pop
      shell.padding -= 1 if verbose
      result
    end

    # Goes to the root and execute the given block.
    #
    def in_root
      inside(@destination_stack.first) { yield }
    end

    # Loads an external file and execute it in the instance binding.
    #
    # ==== Parameters
    # path<String>:: The path to the file to execute. Can be a web address or
    #                a relative path from the source root.
    #
    # ==== Examples
    #
    #   apply "http://gist.github.com/103208"
    #
    #   apply "recipes/jquery.rb"
    #
    def apply(path, config = {})
      verbose = config.fetch(:verbose, true)
      is_uri  = path =~ %r{^https?\://}
      path    = find_in_source_paths(path) unless is_uri

      say_status :apply, path, verbose
      shell.padding += 1 if verbose

      contents = if is_uri
        require "open-uri"
        URI.open(path, "Accept" => "application/x-thor-template", &:read)
      else
        File.open(path, &:read)
      end

      instance_eval(contents, path)
      shell.padding -= 1 if verbose
    end

    # Executes a command returning the contents of the command.
    #
    # ==== Parameters
    # command<String>:: the command to be executed.
    # config<Hash>:: give :verbose => false to not log the status, :capture => true to hide to output. Specify :with
    #                to append an executable to command execution.
    #
    # ==== Example
    #
    #   inside('vendor') do
    #     run('ln -s ~/edge rails')
    #   end
    #
    def run(command, config = {})
      return unless behavior == :invoke

      destination = relative_to_original_destination_root(destination_root, false)
      desc = "#{command} from #{destination.inspect}"

      if config[:with]
        desc = "#{File.basename(config[:with].to_s)} #{desc}"
        command = "#{config[:with]} #{command}"
      end

      say_status :run, desc, config.fetch(:verbose, true)

      return if options[:pretend]

      env_splat = [config[:env]] if config[:env]

      if config[:capture]
        require "open3"
        result, status = Open3.capture2e(*env_splat, command.to_s)
        success = status.success?
      else
        result = system(*env_splat, command.to_s)
        success = result
      end

      abort if !success && config.fetch(:abort_on_failure, self.class.exit_on_failure?)

      result
    end

    # Executes a ruby script (taking into account WIN32 platform quirks).
    #
    # ==== Parameters
    # command<String>:: the command to be executed.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    def run_ruby_script(command, config = {})
      return unless behavior == :invoke
      run command, config.merge(with: Bundler::Thor::Util.ruby_command)
    end

    # Run a thor command. A hash of options can be given and it's converted to
    # switches.
    #
    # ==== Parameters
    # command<String>:: the command to be invoked
    # args<Array>:: arguments to the command
    # config<Hash>:: give :verbose => false to not log the status, :capture => true to hide to output.
    #                Other options are given as parameter to Bundler::Thor.
    #
    #
    # ==== Examples
    #
    #   thor :install, "http://gist.github.com/103208"
    #   #=> thor install http://gist.github.com/103208
    #
    #   thor :list, :all => true, :substring => 'rails'
    #   #=> thor list --all --substring=rails
    #
    def thor(command, *args)
      config  = args.last.is_a?(Hash) ? args.pop : {}
      verbose = config.key?(:verbose) ? config.delete(:verbose) : true
      pretend = config.key?(:pretend) ? config.delete(:pretend) : false
      capture = config.key?(:capture) ? config.delete(:capture) : false

      args.unshift(command)
      args.push Bundler::Thor::Options.to_switches(config)
      command = args.join(" ").strip

      run command, with: :thor, verbose: verbose, pretend: pretend, capture: capture
    end

  protected

    # Allow current root to be shared between invocations.
    #
    def _shared_configuration #:nodoc:
      super.merge!(destination_root: destination_root)
    end

    def _cleanup_options_and_set(options, key) #:nodoc:
      case options
      when Array
        %w(--force -f --skip -s).each { |i| options.delete(i) }
        options << "--#{key}"
      when Hash
        [:force, :skip, "force", "skip"].each { |i| options.delete(i) }
        options.merge!(key => true)
      end
    end
  end
end
PK*J[ڱ����Rshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/arguments.rbnu�[���class Bundler::Thor
  class Arguments #:nodoc:
    NUMERIC = /[-+]?(\d*\.\d+|\d+)/

    # Receives an array of args and returns two arrays, one with arguments
    # and one with switches.
    #
    def self.split(args)
      arguments = []

      args.each do |item|
        break if item.is_a?(String) && item =~ /^-/
        arguments << item
      end

      [arguments, args[Range.new(arguments.size, -1)]]
    end

    def self.parse(*args)
      to_parse = args.pop
      new(*args).parse(to_parse)
    end

    # Takes an array of Bundler::Thor::Argument objects.
    #
    def initialize(arguments = [])
      @assigns = {}
      @non_assigned_required = []
      @switches = arguments

      arguments.each do |argument|
        if !argument.default.nil?
          @assigns[argument.human_name] = argument.default.dup
        elsif argument.required?
          @non_assigned_required << argument
        end
      end
    end

    def parse(args)
      @pile = args.dup

      @switches.each do |argument|
        break unless peek
        @non_assigned_required.delete(argument)
        @assigns[argument.human_name] = send(:"parse_#{argument.type}", argument.human_name)
      end

      check_requirement!
      @assigns
    end

    def remaining
      @pile
    end

  private

    def no_or_skip?(arg)
      arg =~ /^--(no|skip)-([-\w]+)$/
      $2
    end

    def last?
      @pile.empty?
    end

    def peek
      @pile.first
    end

    def shift
      @pile.shift
    end

    def unshift(arg)
      if arg.is_a?(Array)
        @pile = arg + @pile
      else
        @pile.unshift(arg)
      end
    end

    def current_is_value?
      peek && peek.to_s !~ /^-{1,2}\S+/
    end

    # Runs through the argument array getting strings that contains ":" and
    # mark it as a hash:
    #
    #   [ "name:string", "age:integer" ]
    #
    # Becomes:
    #
    #   { "name" => "string", "age" => "integer" }
    #
    def parse_hash(name)
      return shift if peek.is_a?(Hash)
      hash = {}

      while current_is_value? && peek.include?(":")
        key, value = shift.split(":", 2)
        raise MalformattedArgumentError, "You can't specify '#{key}' more than once in option '#{name}'; got #{key}:#{hash[key]} and #{key}:#{value}" if hash.include? key
        hash[key] = value
      end
      hash
    end

    # Runs through the argument array getting all strings until no string is
    # found or a switch is found.
    #
    #   ["a", "b", "c"]
    #
    # And returns it as an array:
    #
    #   ["a", "b", "c"]
    #
    def parse_array(name)
      return shift if peek.is_a?(Array)

      array = []

      while current_is_value?
        value = shift

        if !value.empty?
          validate_enum_value!(name, value, "Expected all values of '%s' to be one of %s; got %s")
        end

        array << value
      end
      array
    end

    # Check if the peek is numeric format and return a Float or Integer.
    # Check if the peek is included in enum if enum is provided.
    # Otherwise raises an error.
    #
    def parse_numeric(name)
      return shift if peek.is_a?(Numeric)

      unless peek =~ NUMERIC && $& == peek
        raise MalformattedArgumentError, "Expected numeric value for '#{name}'; got #{peek.inspect}"
      end

      value = $&.index(".") ? shift.to_f : shift.to_i

      validate_enum_value!(name, value, "Expected '%s' to be one of %s; got %s")

      value
    end

    # Parse string:
    # for --string-arg, just return the current value in the pile
    # for --no-string-arg, nil
    # Check if the peek is included in enum if enum is provided. Otherwise raises an error.
    #
    def parse_string(name)
      if no_or_skip?(name)
        nil
      else
        value = shift

        validate_enum_value!(name, value, "Expected '%s' to be one of %s; got %s")

        value
      end
    end

    # Raises an error if the switch is an enum and the values aren't included on it.
    #
    def validate_enum_value!(name, value, message)
      return unless @switches.is_a?(Hash)

      switch = @switches[name]

      return unless switch

      if switch.enum && !switch.enum.include?(value)
        raise MalformattedArgumentError, message % [name, switch.enum_to_s, value]
      end
    end

    # Raises an error if @non_assigned_required array is not empty.
    #
    def check_requirement!
      return if @non_assigned_required.empty?
      names = @non_assigned_required.map do |o|
        o.respond_to?(:switch_name) ? o.switch_name : o.human_name
      end.join("', '")
      class_name = self.class.name.split("::").last.downcase
      raise RequiredArgumentMissingError, "No value provided for required #{class_name} '#{names}'"
    end
  end
end
PK*J[
X�;��Oshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/option.rbnu�[���class Bundler::Thor
  class Option < Argument #:nodoc:
    attr_reader :aliases, :group, :lazy_default, :hide, :repeatable

    VALID_TYPES = [:boolean, :numeric, :hash, :array, :string]

    def initialize(name, options = {})
      @check_default_type = options[:check_default_type]
      options[:required] = false unless options.key?(:required)
      @repeatable     = options.fetch(:repeatable, false)
      super
      @lazy_default   = options[:lazy_default]
      @group          = options[:group].to_s.capitalize if options[:group]
      @aliases        = normalize_aliases(options[:aliases])
      @hide           = options[:hide]
    end

    # This parse quick options given as method_options. It makes several
    # assumptions, but you can be more specific using the option method.
    #
    #   parse :foo => "bar"
    #   #=> Option foo with default value bar
    #
    #   parse [:foo, :baz] => "bar"
    #   #=> Option foo with default value bar and alias :baz
    #
    #   parse :foo => :required
    #   #=> Required option foo without default value
    #
    #   parse :foo => 2
    #   #=> Option foo with default value 2 and type numeric
    #
    #   parse :foo => :numeric
    #   #=> Option foo without default value and type numeric
    #
    #   parse :foo => true
    #   #=> Option foo with default value true and type boolean
    #
    # The valid types are :boolean, :numeric, :hash, :array and :string. If none
    # is given a default type is assumed. This default type accepts arguments as
    # string (--foo=value) or booleans (just --foo).
    #
    # By default all options are optional, unless :required is given.
    #
    def self.parse(key, value)
      if key.is_a?(Array)
        name, *aliases = key
      else
        name = key
        aliases = []
      end

      name    = name.to_s
      default = value

      type = case value
      when Symbol
        default = nil
        if VALID_TYPES.include?(value)
          value
        elsif required = (value == :required) # rubocop:disable Lint/AssignmentInCondition
          :string
        end
      when TrueClass, FalseClass
        :boolean
      when Numeric
        :numeric
      when Hash, Array, String
        value.class.name.downcase.to_sym
      end

      new(name.to_s, required: required, type: type, default: default, aliases: aliases)
    end

    def switch_name
      @switch_name ||= dasherized? ? name : dasherize(name)
    end

    def human_name
      @human_name ||= dasherized? ? undasherize(name) : name
    end

    def usage(padding = 0)
      sample = if banner && !banner.to_s.empty?
        "#{switch_name}=#{banner}".dup
      else
        switch_name
      end

      sample = "[#{sample}]".dup unless required?

      if boolean? && name != "force" && !name.match(/\A(no|skip)[\-_]/)
        sample << ", [#{dasherize('no-' + human_name)}], [#{dasherize('skip-' + human_name)}]"
      end

      aliases_for_usage.ljust(padding) + sample
    end

    def aliases_for_usage
      if aliases.empty?
        ""
      else
        "#{aliases.join(', ')}, "
      end
    end

    def show_default?
      case default
      when TrueClass, FalseClass
        true
      else
        super
      end
    end

    VALID_TYPES.each do |type|
      class_eval <<-RUBY, __FILE__, __LINE__ + 1
        def #{type}?
          self.type == #{type.inspect}
        end
      RUBY
    end

  protected

    def validate!
      raise ArgumentError, "An option cannot be boolean and required." if boolean? && required?
      validate_default_type!
    end

    def validate_default_type!
      default_type = case @default
      when nil
        return
      when TrueClass, FalseClass
        required? ? :string : :boolean
      when Numeric
        :numeric
      when Symbol
        :string
      when Hash, Array, String
        @default.class.name.downcase.to_sym
      end

      expected_type = (@repeatable && @type != :hash) ? :array : @type

      if default_type != expected_type
        err = "Expected #{expected_type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})"

        if @check_default_type
          raise ArgumentError, err
        elsif @check_default_type == nil
          Bundler::Thor.deprecation_warning "#{err}.\n" +
            "This will be rejected in the future unless you explicitly pass the options `check_default_type: false`" +
            " or call `allow_incompatible_default_type!` in your code"
        end
      end
    end

    def dasherized?
      name.index("-") == 0
    end

    def undasherize(str)
      str.sub(/^-{1,2}/, "")
    end

    def dasherize(str)
      (str.length > 1 ? "--" : "-") + str.tr("_", "-")
    end

  private

    def normalize_aliases(aliases)
      Array(aliases).map { |short| short.to_s.sub(/^(?!\-)/, "-") }
    end
  end
end
PK*J[��X�]"]"Pshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/options.rbnu�[���class Bundler::Thor
  class Options < Arguments #:nodoc:
    LONG_RE     = /^(--\w+(?:-\w+)*)$/
    SHORT_RE    = /^(-[a-z])$/i
    EQ_RE       = /^(--\w+(?:-\w+)*|-[a-z])=(.*)$/i
    SHORT_SQ_RE = /^-([a-z]{2,})$/i # Allow either -x -v or -xv style for single char args
    SHORT_NUM   = /^(-[a-z])#{NUMERIC}$/i
    OPTS_END    = "--".freeze

    # Receives a hash and makes it switches.
    def self.to_switches(options)
      options.map do |key, value|
        case value
        when true
          "--#{key}"
        when Array
          "--#{key} #{value.map(&:inspect).join(' ')}"
        when Hash
          "--#{key} #{value.map { |k, v| "#{k}:#{v}" }.join(' ')}"
        when nil, false
          nil
        else
          "--#{key} #{value.inspect}"
        end
      end.compact.join(" ")
    end

    # Takes a hash of Bundler::Thor::Option and a hash with defaults.
    #
    # If +stop_on_unknown+ is true, #parse will stop as soon as it encounters
    # an unknown option or a regular argument.
    def initialize(hash_options = {}, defaults = {}, stop_on_unknown = false, disable_required_check = false, relations = {})
      @stop_on_unknown = stop_on_unknown
      @exclusives = (relations[:exclusive_option_names] || []).select{|array| !array.empty?}
      @at_least_ones = (relations[:at_least_one_option_names] || []).select{|array| !array.empty?}
      @disable_required_check = disable_required_check
      options = hash_options.values
      super(options)

      # Add defaults
      defaults.each do |key, value|
        @assigns[key.to_s] = value
        @non_assigned_required.delete(hash_options[key])
      end

      @shorts = {}
      @switches = {}
      @extra = []
      @stopped_parsing_after_extra_index = nil
      @is_treated_as_value = false

      options.each do |option|
        @switches[option.switch_name] = option

        option.aliases.each do |name|
          @shorts[name] ||= option.switch_name
        end
      end
    end

    def remaining
      @extra
    end

    def peek
      return super unless @parsing_options

      result = super
      if result == OPTS_END
        shift
        @parsing_options = false
        @stopped_parsing_after_extra_index ||= @extra.size
        super
      else
        result
      end
    end

    def shift
      @is_treated_as_value = false
      super
    end

    def unshift(arg, is_value: false)
      @is_treated_as_value = is_value
      super(arg)
    end

    def parse(args) # rubocop:disable Metrics/MethodLength
      @pile = args.dup
      @is_treated_as_value = false
      @parsing_options = true

      while peek
        if parsing_options?
          match, is_switch = current_is_switch?
          shifted = shift

          if is_switch
            case shifted
            when SHORT_SQ_RE
              unshift($1.split("").map { |f| "-#{f}" })
              next
            when EQ_RE
              unshift($2, is_value: true)
              switch = $1
            when SHORT_NUM
              unshift($2)
              switch = $1
            when LONG_RE, SHORT_RE
              switch = $1
            end

            switch = normalize_switch(switch)
            option = switch_option(switch)
            result = parse_peek(switch, option)
            assign_result!(option, result)
          elsif @stop_on_unknown
            @parsing_options = false
            @extra << shifted
            @stopped_parsing_after_extra_index ||= @extra.size
            @extra << shift while peek
            break
          elsif match
            @extra << shifted
            @extra << shift while peek && peek !~ /^-/
          else
            @extra << shifted
          end
        else
          @extra << shift
        end
      end

      check_requirement! unless @disable_required_check
      check_exclusive!
      check_at_least_one!

      assigns = Bundler::Thor::CoreExt::HashWithIndifferentAccess.new(@assigns)
      assigns.freeze
      assigns
    end

    def check_exclusive!
      opts = @assigns.keys
      # When option A and B are exclusive, if A and B are given at the same time,
      # the diffrence of argument array size will decrease.
      found = @exclusives.find{ |ex| (ex - opts).size < ex.size - 1 }
      if found
        names = names_to_switch_names(found & opts).map{|n| "'#{n}'"}
        class_name = self.class.name.split("::").last.downcase
        fail ExclusiveArgumentError, "Found exclusive #{class_name} #{names.join(", ")}"
      end
    end

    def check_at_least_one!
      opts = @assigns.keys
      # When at least one is required of the options A and B,
      # if the both options were not given, none? would be true.
      found = @at_least_ones.find{ |one_reqs| one_reqs.none?{ |o| opts.include? o} }
      if found
        names = names_to_switch_names(found).map{|n| "'#{n}'"}
        class_name = self.class.name.split("::").last.downcase
        fail AtLeastOneRequiredArgumentError, "Not found at least one of required #{class_name} #{names.join(", ")}"
      end
    end

    def check_unknown!
      to_check = @stopped_parsing_after_extra_index ? @extra[0...@stopped_parsing_after_extra_index] : @extra

      # an unknown option starts with - or -- and has no more --'s afterward.
      unknown = to_check.select { |str| str =~ /^--?(?:(?!--).)*$/ }
      raise UnknownArgumentError.new(@switches.keys, unknown) unless unknown.empty?
    end

  protected

    # Option names changes to swith name or human name
    def names_to_switch_names(names = [])
      @switches.map do |_, o|
        if names.include? o.name
          o.respond_to?(:switch_name) ? o.switch_name : o.human_name
        else
          nil
        end
      end.compact
    end

    def assign_result!(option, result)
      if option.repeatable && option.type == :hash
        (@assigns[option.human_name] ||= {}).merge!(result)
      elsif option.repeatable
        (@assigns[option.human_name] ||= []) << result
      else
        @assigns[option.human_name] = result
      end
    end

    # Check if the current value in peek is a registered switch.
    #
    # Two booleans are returned.  The first is true if the current value
    # starts with a hyphen; the second is true if it is a registered switch.
    def current_is_switch?
      return [false, false] if @is_treated_as_value
      case peek
      when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM
        [true, switch?($1)]
      when SHORT_SQ_RE
        [true, $1.split("").any? { |f| switch?("-#{f}") }]
      else
        [false, false]
      end
    end

    def current_is_switch_formatted?
      return false if @is_treated_as_value
      case peek
      when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM, SHORT_SQ_RE
        true
      else
        false
      end
    end

    def current_is_value?
      return true if @is_treated_as_value
      peek && (!parsing_options? || super)
    end

    def switch?(arg)
      !switch_option(normalize_switch(arg)).nil?
    end

    def switch_option(arg)
      if match = no_or_skip?(arg) # rubocop:disable Lint/AssignmentInCondition
        @switches[arg] || @switches["--#{match}"]
      else
        @switches[arg]
      end
    end

    # Check if the given argument is actually a shortcut.
    #
    def normalize_switch(arg)
      (@shorts[arg] || arg).tr("_", "-")
    end

    def parsing_options?
      peek
      @parsing_options
    end

    # Parse boolean values which can be given as --foo=true or --foo for true values, or
    # --foo=false, --no-foo or --skip-foo for false values.
    #
    def parse_boolean(switch)
      if current_is_value?
        if ["true", "TRUE", "t", "T", true].include?(peek)
          shift
          true
        elsif ["false", "FALSE", "f", "F", false].include?(peek)
          shift
          false
        else
          @switches.key?(switch) || !no_or_skip?(switch)
        end
      else
        @switches.key?(switch) || !no_or_skip?(switch)
      end
    end

    # Parse the value at the peek analyzing if it requires an input or not.
    #
    def parse_peek(switch, option)
      if parsing_options? && (current_is_switch_formatted? || last?)
        if option.boolean?
          # No problem for boolean types
        elsif no_or_skip?(switch)
          return nil # User set value to nil
        elsif option.string? && !option.required?
          # Return the default if there is one, else the human name
          return option.lazy_default || option.default || option.human_name
        elsif option.lazy_default
          return option.lazy_default
        else
          raise MalformattedArgumentError, "No value provided for option '#{switch}'"
        end
      end

      @non_assigned_required.delete(option)
      send(:"parse_#{option.type}", switch)
    end
  end
end
PK*J[���;;Qshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/argument.rbnu�[���class Bundler::Thor
  class Argument #:nodoc:
    VALID_TYPES = [:numeric, :hash, :array, :string]

    attr_reader :name, :description, :enum, :required, :type, :default, :banner
    alias_method :human_name, :name

    def initialize(name, options = {})
      class_name = self.class.name.split("::").last

      type = options[:type]

      raise ArgumentError, "#{class_name} name can't be nil."                         if name.nil?
      raise ArgumentError, "Type :#{type} is not valid for #{class_name.downcase}s."  if type && !valid_type?(type)

      @name        = name.to_s
      @description = options[:desc]
      @required    = options.key?(:required) ? options[:required] : true
      @type        = (type || :string).to_sym
      @default     = options[:default]
      @banner      = options[:banner] || default_banner
      @enum        = options[:enum]

      validate! # Trigger specific validations
    end

    def print_default
      if @type == :array and @default.is_a?(Array)
        @default.map(&:dump).join(" ")
      else
        @default
      end
    end

    def usage
      required? ? banner : "[#{banner}]"
    end

    def required?
      required
    end

    def show_default?
      case default
      when Array, String, Hash
        !default.empty?
      else
        default
      end
    end

    def enum_to_s
      if enum.respond_to? :join
        enum.join(", ")
      else
        "#{enum.first}..#{enum.last}"
      end
    end

  protected

    def validate!
      raise ArgumentError, "An argument cannot be required and have default value." if required? && !default.nil?
      raise ArgumentError, "An argument cannot have an enum other than an enumerable." if @enum && !@enum.is_a?(Enumerable)
    end

    def valid_type?(type)
      self.class::VALID_TYPES.include?(type.to_sym)
    end

    def default_banner
      case type
      when :boolean
        nil
      when :string, :default
        human_name.upcase
      when :numeric
        "N"
      when :hash
        "key:value"
      when :array
        "one two three"
      end
    end
  end
end
PK*J[�d�2o3o3[share/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rbnu�[���require "erb"

class Bundler::Thor
  module Actions
    # Copies the file from the relative source to the relative destination. If
    # the destination is not given it's assumed to be equal to the source.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status, and
    #                :mode => :preserve, to preserve the file mode from the source.
    #
    # ==== Examples
    #
    #   copy_file "README", "doc/README"
    #
    #   copy_file "doc/README"
    #
    def copy_file(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source
      source = File.expand_path(find_in_source_paths(source.to_s))

      resulting_destination = create_file destination, nil, config do
        content = File.binread(source)
        content = yield(content) if block
        content
      end
      if config[:mode] == :preserve
        mode = File.stat(source).mode
        chmod(resulting_destination, mode, config)
      end
    end

    # Links the file from the relative source to the relative destination. If
    # the destination is not given it's assumed to be equal to the source.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   link_file "README", "doc/README"
    #
    #   link_file "doc/README"
    #
    def link_file(source, *args)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source
      source = File.expand_path(find_in_source_paths(source.to_s))

      create_link destination, source, config
    end

    # Gets the content at the given address and places it at the given relative
    # destination. If a block is given instead of destination, the content of
    # the url is yielded and used as location.
    #
    # +get+ relies on open-uri, so passing application user input would provide
    # a command injection attack vector.
    #
    # ==== Parameters
    # source<String>:: the address of the given content.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status, and
    #                :http_headers => <Hash> to add headers to an http request.
    #
    # ==== Examples
    #
    #   get "http://gist.github.com/103208", "doc/README"
    #
    #   get "http://gist.github.com/103208", "doc/README", :http_headers => {"Content-Type" => "application/json"}
    #
    #   get "http://gist.github.com/103208" do |content|
    #     content.split("\n").first
    #   end
    #
    def get(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first

      render = if source =~ %r{^https?\://}
        require "open-uri"
        URI.send(:open, source, config.fetch(:http_headers, {})) { |input| input.binmode.read }
      else
        source = File.expand_path(find_in_source_paths(source.to_s))
        File.open(source) { |input| input.binmode.read }
      end

      destination ||= if block_given?
        block.arity == 1 ? yield(render) : yield
      else
        File.basename(source)
      end

      create_file destination, render, config
    end

    # Gets an ERB template at the relative source, executes it and makes a copy
    # at the relative destination. If the destination is not given it's assumed
    # to be equal to the source removing .tt from the filename.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   template "README", "doc/README"
    #
    #   template "doc/README"
    #
    def template(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source.sub(/#{TEMPLATE_EXTNAME}$/, "")

      source  = File.expand_path(find_in_source_paths(source.to_s))
      context = config.delete(:context) || instance_eval("binding")

      create_file destination, nil, config do
        capturable_erb = CapturableERB.new(::File.binread(source), trim_mode: "-", eoutvar: "@output_buffer")
        content = capturable_erb.tap do |erb|
          erb.filename = source
        end.result(context)
        content = yield(content) if block
        content
      end
    end

    # Changes the mode of the given file or directory.
    #
    # ==== Parameters
    # mode<Integer>:: the file mode
    # path<String>:: the name of the file to change mode
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   chmod "script/server", 0755
    #
    def chmod(path, mode, config = {})
      return unless behavior == :invoke
      path = File.expand_path(path, destination_root)
      say_status :chmod, relative_to_original_destination_root(path), config.fetch(:verbose, true)
      unless options[:pretend]
        require "fileutils"
        FileUtils.chmod_R(mode, path)
      end
    end

    # Prepend text to a file. Since it depends on insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # data<String>:: the data to prepend to the file, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   prepend_to_file 'config/environments/test.rb', 'config.gem "rspec"'
    #
    #   prepend_to_file 'config/environments/test.rb' do
    #     'config.gem "rspec"'
    #   end
    #
    def prepend_to_file(path, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:after] = /\A/
      insert_into_file(path, *(args << config), &block)
    end
    alias_method :prepend_file, :prepend_to_file

    # Append text to a file. Since it depends on insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # data<String>:: the data to append to the file, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   append_to_file 'config/environments/test.rb', 'config.gem "rspec"'
    #
    #   append_to_file 'config/environments/test.rb' do
    #     'config.gem "rspec"'
    #   end
    #
    def append_to_file(path, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:before] = /\z/
      insert_into_file(path, *(args << config), &block)
    end
    alias_method :append_file, :append_to_file

    # Injects text right after the class definition. Since it depends on
    # insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # klass<String|Class>:: the class to be manipulated
    # data<String>:: the data to append to the class, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   inject_into_class "app/controllers/application_controller.rb", "ApplicationController", "  filter_parameter :password\n"
    #
    #   inject_into_class "app/controllers/application_controller.rb", "ApplicationController" do
    #     "  filter_parameter :password\n"
    #   end
    #
    def inject_into_class(path, klass, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:after] = /class #{klass}\n|class #{klass} .*\n/
      insert_into_file(path, *(args << config), &block)
    end

    # Injects text right after the module definition. Since it depends on
    # insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # module_name<String|Class>:: the module to be manipulated
    # data<String>:: the data to append to the class, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper", "  def help; 'help'; end\n"
    #
    #   inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper" do
    #     "  def help; 'help'; end\n"
    #   end
    #
    def inject_into_module(path, module_name, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:after] = /module #{module_name}\n|module #{module_name} .*\n/
      insert_into_file(path, *(args << config), &block)
    end

    # Run a regular expression replacement on a file.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # flag<Regexp|String>:: the regexp or string to be replaced
    # replacement<String>:: the replacement, can be also given as a block
    # config<Hash>:: give :verbose => false to not log the status, and
    #                :force => true, to force the replacement regardless of runner behavior.
    #
    # ==== Example
    #
    #   gsub_file 'app/controllers/application_controller.rb', /#\s*(filter_parameter_logging :password)/, '\1'
    #
    #   gsub_file 'README', /rake/, :green do |match|
    #     match << " no more. Use thor!"
    #   end
    #
    def gsub_file(path, flag, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}

      return unless behavior == :invoke || config.fetch(:force, false)

      path = File.expand_path(path, destination_root)
      say_status :gsub, relative_to_original_destination_root(path), config.fetch(:verbose, true)

      unless options[:pretend]
        content = File.binread(path)
        content.gsub!(flag, *args, &block)
        File.open(path, "wb") { |file| file.write(content) }
      end
    end

    # Uncomment all lines matching a given regex. Preserves indentation before
    # the comment hash and removes the hash and any immediate following space.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # flag<Regexp|String>:: the regexp or string used to decide which lines to uncomment
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   uncomment_lines 'config/initializers/session_store.rb', /active_record/
    #
    def uncomment_lines(path, flag, *args)
      flag = flag.respond_to?(:source) ? flag.source : flag

      gsub_file(path, /^(\s*)#[[:blank:]]?(.*#{flag})/, '\1\2', *args)
    end

    # Comment all lines matching a given regex.  It will leave the space
    # which existed before the beginning of the line in tact and will insert
    # a single space after the comment hash.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # flag<Regexp|String>:: the regexp or string used to decide which lines to comment
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   comment_lines 'config/initializers/session_store.rb', /cookie_store/
    #
    def comment_lines(path, flag, *args)
      flag = flag.respond_to?(:source) ? flag.source : flag

      gsub_file(path, /^(\s*)([^#\n]*#{flag})/, '\1# \2', *args)
    end

    # Removes a file at the given location.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   remove_file 'README'
    #   remove_file 'app/controllers/application_controller.rb'
    #
    def remove_file(path, config = {})
      return unless behavior == :invoke
      path = File.expand_path(path, destination_root)

      say_status :remove, relative_to_original_destination_root(path), config.fetch(:verbose, true)
      if !options[:pretend] && (File.exist?(path) || File.symlink?(path))
        require "fileutils"
        ::FileUtils.rm_rf(path)
      end
    end
    alias_method :remove_dir, :remove_file

    attr_accessor :output_buffer
    private :output_buffer, :output_buffer=

  private

    def concat(string)
      @output_buffer.concat(string)
    end

    def capture(*args)
      with_output_buffer { yield(*args) }
    end

    def with_output_buffer(buf = "".dup) #:nodoc:
      raise ArgumentError, "Buffer can not be a frozen object" if buf.frozen?
      old_buffer = output_buffer
      self.output_buffer = buf
      yield
      output_buffer
    ensure
      self.output_buffer = old_buffer
    end

    # Bundler::Thor::Actions#capture depends on what kind of buffer is used in ERB.
    # Thus CapturableERB fixes ERB to use String buffer.
    class CapturableERB < ERB
      def set_eoutvar(compiler, eoutvar = "_erbout")
        compiler.put_cmd = "#{eoutvar}.concat"
        compiler.insert_cmd = "#{eoutvar}.concat"
        compiler.pre_cmd = ["#{eoutvar} = ''.dup"]
        compiler.post_cmd = [eoutvar]
      end
    end
  end
end
PK*J[J
,{Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/directory.rbnu�[���require_relative "empty_directory"

class Bundler::Thor
  module Actions
    # Copies recursively the files from source directory to root directory.
    # If any of the files finishes with .tt, it's considered to be a template
    # and is placed in the destination without the extension .tt. If any
    # empty directory is found, it's copied and all .empty_directory files are
    # ignored. If any file name is wrapped within % signs, the text within
    # the % signs will be executed as a method and replaced with the returned
    # value. Let's suppose a doc directory with the following files:
    #
    #   doc/
    #     components/.empty_directory
    #     README
    #     rdoc.rb.tt
    #     %app_name%.rb
    #
    # When invoked as:
    #
    #   directory "doc"
    #
    # It will create a doc directory in the destination with the following
    # files (assuming that the `app_name` method returns the value "blog"):
    #
    #   doc/
    #     components/
    #     README
    #     rdoc.rb
    #     blog.rb
    #
    # <b>Encoded path note:</b> Since Bundler::Thor internals use Object#respond_to? to check if it can
    # expand %something%, this `something` should be a public method in the class calling
    # #directory. If a method is private, Bundler::Thor stack raises PrivateMethodEncodedError.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #                If :recursive => false, does not look for paths recursively.
    #                If :mode => :preserve, preserve the file mode from the source.
    #                If :exclude_pattern => /regexp/, prevents copying files that match that regexp.
    #
    # ==== Examples
    #
    #   directory "doc"
    #   directory "doc", "docs", :recursive => false
    #
    def directory(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source
      action Directory.new(self, source, destination || source, config, &block)
    end

    class Directory < EmptyDirectory #:nodoc:
      attr_reader :source

      def initialize(base, source, destination = nil, config = {}, &block)
        @source = File.expand_path(Dir[Util.escape_globs(base.find_in_source_paths(source.to_s))].first)
        @block  = block
        super(base, destination, {recursive: true}.merge(config))
      end

      def invoke!
        base.empty_directory given_destination, config
        execute!
      end

      def revoke!
        execute!
      end

    protected

      def execute!
        lookup = Util.escape_globs(source)
        lookup = config[:recursive] ? File.join(lookup, "**") : lookup
        lookup = file_level_lookup(lookup)

        files(lookup).sort.each do |file_source|
          next if File.directory?(file_source)
          next if config[:exclude_pattern] && file_source.match(config[:exclude_pattern])
          file_destination = File.join(given_destination, file_source.gsub(source, "."))
          file_destination.gsub!("/./", "/")

          case file_source
          when /\.empty_directory$/
            dirname = File.dirname(file_destination).gsub(%r{/\.$}, "")
            next if dirname == given_destination
            base.empty_directory(dirname, config)
          when /#{TEMPLATE_EXTNAME}$/
            base.template(file_source, file_destination[0..-4], config, &@block)
          else
            base.copy_file(file_source, file_destination, config, &@block)
          end
        end
      end

      def file_level_lookup(previous_lookup)
        File.join(previous_lookup, "*")
      end

      def files(lookup)
        Dir.glob(lookup, File::FNM_DOTMATCH)
      end
    end
  end
end
PK*J[`����Yshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rbnu�[���class Bundler::Thor
  module Actions
    # Creates an empty directory.
    #
    # ==== Parameters
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   empty_directory "doc"
    #
    def empty_directory(destination, config = {})
      action EmptyDirectory.new(self, destination, config)
    end

    # Class which holds create directory logic. This is the base class for
    # other actions like create_file and directory.
    #
    # This implementation is based in Templater actions, created by Jonas Nicklas
    # and Michael S. Klishin under MIT LICENSE.
    #
    class EmptyDirectory #:nodoc:
      attr_reader :base, :destination, :given_destination, :relative_destination, :config

      # Initializes given the source and destination.
      #
      # ==== Parameters
      # base<Bundler::Thor::Base>:: A Bundler::Thor::Base instance
      # source<String>:: Relative path to the source of this file
      # destination<String>:: Relative path to the destination of this file
      # config<Hash>:: give :verbose => false to not log the status.
      #
      def initialize(base, destination, config = {})
        @base = base
        @config = {verbose: true}.merge(config)
        self.destination = destination
      end

      # Checks if the destination file already exists.
      #
      # ==== Returns
      # Boolean:: true if the file exists, false otherwise.
      #
      def exists?
        ::File.exist?(destination)
      end

      def invoke!
        invoke_with_conflict_check do
          require "fileutils"
          ::FileUtils.mkdir_p(destination)
        end
      end

      def revoke!
        say_status :remove, :red
        require "fileutils"
        ::FileUtils.rm_rf(destination) if !pretend? && exists?
        given_destination
      end

    protected

      # Shortcut for pretend.
      #
      def pretend?
        base.options[:pretend]
      end

      # Sets the absolute destination value from a relative destination value.
      # It also stores the given and relative destination. Let's suppose our
      # script is being executed on "dest", it sets the destination root to
      # "dest". The destination, given_destination and relative_destination
      # are related in the following way:
      #
      #   inside "bar" do
      #     empty_directory "baz"
      #   end
      #
      #   destination          #=> dest/bar/baz
      #   relative_destination #=> bar/baz
      #   given_destination    #=> baz
      #
      def destination=(destination)
        return unless destination
        @given_destination = convert_encoded_instructions(destination.to_s)
        @destination = ::File.expand_path(@given_destination, base.destination_root)
        @relative_destination = base.relative_to_original_destination_root(@destination)
      end

      # Filenames in the encoded form are converted. If you have a file:
      #
      #   %file_name%.rb
      #
      # It calls #file_name from the base and replaces %-string with the
      # return value (should be String) of #file_name:
      #
      #   user.rb
      #
      # The method referenced can be either public or private.
      #
      def convert_encoded_instructions(filename)
        filename.gsub(/%(.*?)%/) do |initial_string|
          method = $1.strip
          base.respond_to?(method, true) ? base.send(method) : initial_string
        end
      end

      # Receives a hash of options and just execute the block if some
      # conditions are met.
      #
      def invoke_with_conflict_check(&block)
        if exists?
          on_conflict_behavior(&block)
        else
          yield unless pretend?
          say_status :create, :green
        end

        destination
      rescue Errno::EISDIR, Errno::EEXIST
        on_file_clash_behavior
      end

      def on_file_clash_behavior
        say_status :file_clash, :red
      end

      # What to do when the destination file already exists.
      #
      def on_conflict_behavior
        say_status :exist, :blue
      end

      # Shortcut to say_status shell method.
      #
      def say_status(status, color)
        base.shell.say_status status, relative_destination, color if config[:verbose]
      end
    end
  end
end
PK*J[s	��mmUshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/create_link.rbnu�[���require_relative "create_file"

class Bundler::Thor
  module Actions
    # Create a new file relative to the destination root from the given source.
    #
    # ==== Parameters
    # destination<String>:: the relative path to the destination root.
    # source<String|NilClass>:: the relative path to the source root.
    # config<Hash>:: give :verbose => false to not log the status.
    #   :: give :symbolic => false for hard link.
    #
    # ==== Examples
    #
    #   create_link "config/apache.conf", "/etc/apache.conf"
    #
    def create_link(destination, *args)
      config = args.last.is_a?(Hash) ? args.pop : {}
      source = args.first
      action CreateLink.new(self, destination, source, config)
    end
    alias_method :add_link, :create_link

    # CreateLink is a subset of CreateFile, which instead of taking a block of
    # data, just takes a source string from the user.
    #
    class CreateLink < CreateFile #:nodoc:
      attr_reader :data

      # Checks if the content of the file at the destination is identical to the rendered result.
      #
      # ==== Returns
      # Boolean:: true if it is identical, false otherwise.
      #
      def identical?
        source = File.expand_path(render, File.dirname(destination))
        exists? && File.identical?(source, destination)
      end

      def invoke!
        invoke_with_conflict_check do
          require "fileutils"
          FileUtils.mkdir_p(File.dirname(destination))
          # Create a symlink by default
          config[:symbolic] = true if config[:symbolic].nil?
          File.unlink(destination) if exists?
          if config[:symbolic]
            File.symlink(render, destination)
          else
            File.link(render, destination)
          end
        end
        given_destination
      end

      def exists?
        super || File.symlink?(destination)
      end
    end
  end
end
PK*J[U���Ushare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/create_file.rbnu�[���require_relative "empty_directory"

class Bundler::Thor
  module Actions
    # Create a new file relative to the destination root with the given data,
    # which is the return value of a block or a data string.
    #
    # ==== Parameters
    # destination<String>:: the relative path to the destination root.
    # data<String|NilClass>:: the data to append to the file.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   create_file "lib/fun_party.rb" do
    #     hostname = ask("What is the virtual hostname I should use?")
    #     "vhost.name = #{hostname}"
    #   end
    #
    #   create_file "config/apache.conf", "your apache config"
    #
    def create_file(destination, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      data = args.first
      action CreateFile.new(self, destination, block || data.to_s, config)
    end
    alias_method :add_file, :create_file

    # CreateFile is a subset of Template, which instead of rendering a file with
    # ERB, it gets the content from the user.
    #
    class CreateFile < EmptyDirectory #:nodoc:
      attr_reader :data

      def initialize(base, destination, data, config = {})
        @data = data
        super(base, destination, config)
      end

      # Checks if the content of the file at the destination is identical to the rendered result.
      #
      # ==== Returns
      # Boolean:: true if it is identical, false otherwise.
      #
      def identical?
        # binread uses ASCII-8BIT, so to avoid false negatives, the string must use the same
        exists? && File.binread(destination) == String.new(render).force_encoding("ASCII-8BIT")
      end

      # Holds the content to be added to the file.
      #
      def render
        @render ||= if data.is_a?(Proc)
          data.call
        else
          data
        end
      end

      def invoke!
        invoke_with_conflict_check do
          require "fileutils"
          FileUtils.mkdir_p(File.dirname(destination))
          File.open(destination, "wb", config[:perm]) { |f| f.write render }
        end
        given_destination
      end

    protected

      # Now on conflict we check if the file is identical or not.
      #
      def on_conflict_behavior(&block)
        if identical?
          say_status :identical, :blue
        else
          options = base.options.merge(config)
          force_or_skip_or_conflict(options[:force], options[:skip], &block)
        end
      end

      # If force is true, run the action, otherwise check if it's not being
      # skipped. If both are false, show the file_collision menu, if the menu
      # returns true, force it, otherwise skip.
      #
      def force_or_skip_or_conflict(force, skip, &block)
        if force
          say_status :force, :yellow
          yield unless pretend?
        elsif skip
          say_status :skip, :yellow
        else
          say_status :conflict, :red
          force_or_skip_or_conflict(force_on_collision?, true, &block)
        end
      end

      # Shows the file collision menu to the user and gets the result.
      #
      def force_on_collision?
        base.shell.file_collision(destination) { render }
      end
    end
  end
end
PK*J[޽1fZshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rbnu�[���require_relative "empty_directory"

class Bundler::Thor
  module Actions
    # Injects the given content into a file. Different from gsub_file, this
    # method is reversible.
    #
    # ==== Parameters
    # destination<String>:: Relative path to the destination root
    # data<String>:: Data to add to the file. Can be given as a block.
    # config<Hash>:: give :verbose => false to not log the status and the flag
    #                for injection (:after or :before) or :force => true for
    #                insert two or more times the same content.
    #
    # ==== Examples
    #
    #   insert_into_file "config/environment.rb", "config.gem :thor", :after => "Rails::Initializer.run do |config|\n"
    #
    #   insert_into_file "config/environment.rb", :after => "Rails::Initializer.run do |config|\n" do
    #     gems = ask "Which gems would you like to add?"
    #     gems.split(" ").map{ |gem| "  config.gem :#{gem}" }.join("\n")
    #   end
    #
    WARNINGS = {unchanged_no_flag: "File unchanged! Either the supplied flag value not found or the content has already been inserted!"}

    def insert_into_file(destination, *args, &block)
      data = block_given? ? block : args.shift

      config = args.shift || {}
      config[:after] = /\z/ unless config.key?(:before) || config.key?(:after)

      action InjectIntoFile.new(self, destination, data, config)
    end
    alias_method :inject_into_file, :insert_into_file

    class InjectIntoFile < EmptyDirectory #:nodoc:
      attr_reader :replacement, :flag, :behavior

      def initialize(base, destination, data, config)
        super(base, destination, {verbose: true}.merge(config))

        @behavior, @flag = if @config.key?(:after)
          [:after, @config.delete(:after)]
        else
          [:before, @config.delete(:before)]
        end

        @replacement = data.is_a?(Proc) ? data.call : data
        @flag = Regexp.escape(@flag) unless @flag.is_a?(Regexp)
      end

      def invoke!
        content = if @behavior == :after
          '\0' + replacement
        else
          replacement + '\0'
        end

        if exists?
          if replace!(/#{flag}/, content, config[:force])
            say_status(:invoke)
          elsif replacement_present?
            say_status(:unchanged, color: :blue)
          else
            say_status(:unchanged, warning: WARNINGS[:unchanged_no_flag], color: :red)
          end
        else
          unless pretend?
            raise Bundler::Thor::Error, "The file #{ destination } does not appear to exist"
          end
        end
      end

      def revoke!
        say_status :revoke

        regexp = if @behavior == :after
          content = '\1\2'
          /(#{flag})(.*)(#{Regexp.escape(replacement)})/m
        else
          content = '\2\3'
          /(#{Regexp.escape(replacement)})(.*)(#{flag})/m
        end

        replace!(regexp, content, true)
      end

    protected

      def say_status(behavior, warning: nil, color: nil)
        status = if behavior == :invoke
          if flag == /\A/
            :prepend
          elsif flag == /\z/
            :append
          else
            :insert
          end
        elsif warning
          warning
        elsif behavior == :unchanged
          :unchanged
        else
          :subtract
        end

        super(status, (color || config[:verbose]))
      end

      def content
        @content ||= File.read(destination)
      end

      def replacement_present?
        content.include?(replacement)
      end

      # Adds the content to the file.
      #
      def replace!(regexp, string, force)
        if force || !replacement_present?
          success = content.gsub!(regexp, string)

          File.open(destination, "wb") { |file| file.write(content) } unless pretend?
          success
        end
      end
    end
  end
end
PK*J[���p�q�qFshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/base.rbnu�[���require_relative "command"
require_relative "core_ext/hash_with_indifferent_access"
require_relative "error"
require_relative "invocation"
require_relative "nested_context"
require_relative "parser"
require_relative "shell"
require_relative "line_editor"
require_relative "util"

class Bundler::Thor
  autoload :Actions,    File.expand_path("actions", __dir__)
  autoload :RakeCompat, File.expand_path("rake_compat", __dir__)
  autoload :Group,      File.expand_path("group", __dir__)

  # Shortcuts for help.
  HELP_MAPPINGS       = %w(-h -? --help -D)

  # Bundler::Thor methods that should not be overwritten by the user.
  THOR_RESERVED_WORDS = %w(invoke shell options behavior root destination_root relative_root
                           action add_file create_file in_root inside run run_ruby_script)

  TEMPLATE_EXTNAME = ".tt"

  class << self
    def deprecation_warning(message) #:nodoc:
      unless ENV["THOR_SILENCE_DEPRECATION"]
        warn "Deprecation warning: #{message}\n" +
          "You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION."
      end
    end
  end

  module Base
    attr_accessor :options, :parent_options, :args

    # It receives arguments in an Array and two hashes, one for options and
    # other for configuration.
    #
    # Notice that it does not check if all required arguments were supplied.
    # It should be done by the parser.
    #
    # ==== Parameters
    # args<Array[Object]>:: An array of objects. The objects are applied to their
    #                       respective accessors declared with <tt>argument</tt>.
    #
    # options<Hash>:: An options hash that will be available as self.options.
    #                 The hash given is converted to a hash with indifferent
    #                 access, magic predicates (options.skip?) and then frozen.
    #
    # config<Hash>:: Configuration for this Bundler::Thor class.
    #
    def initialize(args = [], local_options = {}, config = {})
      parse_options = self.class.class_options

      # The start method splits inbound arguments at the first argument
      # that looks like an option (starts with - or --). It then calls
      # new, passing in the two halves of the arguments Array as the
      # first two parameters.

      command_options = config.delete(:command_options) # hook for start
      parse_options = parse_options.merge(command_options) if command_options

      if local_options.is_a?(Array)
        array_options = local_options
        hash_options = {}
      else
        # Handle the case where the class was explicitly instantiated
        # with pre-parsed options.
        array_options = []
        hash_options = local_options
      end

      # Let Bundler::Thor::Options parse the options first, so it can remove
      # declared options from the array. This will leave us with
      # a list of arguments that weren't declared.
      current_command = config[:current_command]
      stop_on_unknown = self.class.stop_on_unknown_option? current_command

      # Give a relation of options.
      # After parsing, Bundler::Thor::Options check whether right relations are kept
      relations = if current_command.nil?
        {exclusive_option_names: [], at_least_one_option_names: []}
      else
        current_command.options_relation
      end

      self.class.class_exclusive_option_names.map { |n| relations[:exclusive_option_names] << n }
      self.class.class_at_least_one_option_names.map { |n| relations[:at_least_one_option_names] << n }

      disable_required_check = self.class.disable_required_check? current_command

      opts = Bundler::Thor::Options.new(parse_options, hash_options, stop_on_unknown, disable_required_check, relations)

      self.options = opts.parse(array_options)
      self.options = config[:class_options].merge(options) if config[:class_options]

      # If unknown options are disallowed, make sure that none of the
      # remaining arguments looks like an option.
      opts.check_unknown! if self.class.check_unknown_options?(config)

      # Add the remaining arguments from the options parser to the
      # arguments passed in to initialize. Then remove any positional
      # arguments declared using #argument (this is primarily used
      # by Bundler::Thor::Group). Tis will leave us with the remaining
      # positional arguments.
      to_parse  = args
      to_parse += opts.remaining unless self.class.strict_args_position?(config)

      thor_args = Bundler::Thor::Arguments.new(self.class.arguments)
      thor_args.parse(to_parse).each { |k, v| __send__("#{k}=", v) }
      @args = thor_args.remaining
    end

    class << self
      def included(base) #:nodoc:
        super(base)
        base.extend ClassMethods
        base.send :include, Invocation
        base.send :include, Shell
      end

      # Returns the classes that inherits from Bundler::Thor or Bundler::Thor::Group.
      #
      # ==== Returns
      # Array[Class]
      #
      def subclasses
        @subclasses ||= []
      end

      # Returns the files where the subclasses are kept.
      #
      # ==== Returns
      # Hash[path<String> => Class]
      #
      def subclass_files
        @subclass_files ||= Hash.new { |h, k| h[k] = [] }
      end

      # Whenever a class inherits from Bundler::Thor or Bundler::Thor::Group, we should track the
      # class and the file on Bundler::Thor::Base. This is the method responsible for it.
      #
      def register_klass_file(klass) #:nodoc:
        file = caller[1].match(/(.*):\d+/)[1]
        Bundler::Thor::Base.subclasses << klass unless Bundler::Thor::Base.subclasses.include?(klass)

        file_subclasses = Bundler::Thor::Base.subclass_files[File.expand_path(file)]
        file_subclasses << klass unless file_subclasses.include?(klass)
      end
    end

    module ClassMethods
      def attr_reader(*) #:nodoc:
        no_commands { super }
      end

      def attr_writer(*) #:nodoc:
        no_commands { super }
      end

      def attr_accessor(*) #:nodoc:
        no_commands { super }
      end

      # If you want to raise an error for unknown options, call check_unknown_options!
      # This is disabled by default to allow dynamic invocations.
      def check_unknown_options!
        @check_unknown_options = true
      end

      def check_unknown_options #:nodoc:
        @check_unknown_options ||= from_superclass(:check_unknown_options, false)
      end

      def check_unknown_options?(config) #:nodoc:
        !!check_unknown_options
      end

      # If you want to raise an error when the default value of an option does not match
      # the type call check_default_type!
      # This will be the default; for compatibility a deprecation warning is issued if necessary.
      def check_default_type!
        @check_default_type = true
      end

      # If you want to use defaults that don't match the type of an option,
      # either specify `check_default_type: false` or call `allow_incompatible_default_type!`
      def allow_incompatible_default_type!
        @check_default_type = false
      end

      def check_default_type #:nodoc:
        @check_default_type = from_superclass(:check_default_type, nil) unless defined?(@check_default_type)
        @check_default_type
      end

      # If true, option parsing is suspended as soon as an unknown option or a
      # regular argument is encountered.  All remaining arguments are passed to
      # the command as regular arguments.
      def stop_on_unknown_option?(command_name) #:nodoc:
        false
      end

      # If true, option set will not suspend the execution of the command when
      # a required option is not provided.
      def disable_required_check?(command_name) #:nodoc:
        false
      end

      # If you want only strict string args (useful when cascading thor classes),
      # call strict_args_position! This is disabled by default to allow dynamic
      # invocations.
      def strict_args_position!
        @strict_args_position = true
      end

      def strict_args_position #:nodoc:
        @strict_args_position ||= from_superclass(:strict_args_position, false)
      end

      def strict_args_position?(config) #:nodoc:
        !!strict_args_position
      end

      # Adds an argument to the class and creates an attr_accessor for it.
      #
      # Arguments are different from options in several aspects. The first one
      # is how they are parsed from the command line, arguments are retrieved
      # from position:
      #
      #   thor command NAME
      #
      # Instead of:
      #
      #   thor command --name=NAME
      #
      # Besides, arguments are used inside your code as an accessor (self.argument),
      # while options are all kept in a hash (self.options).
      #
      # Finally, arguments cannot have type :default or :boolean but can be
      # optional (supplying :optional => :true or :required => false), although
      # you cannot have a required argument after a non-required argument. If you
      # try it, an error is raised.
      #
      # ==== Parameters
      # name<Symbol>:: The name of the argument.
      # options<Hash>:: Described below.
      #
      # ==== Options
      # :desc     - Description for the argument.
      # :required - If the argument is required or not.
      # :optional - If the argument is optional or not.
      # :type     - The type of the argument, can be :string, :hash, :array, :numeric.
      # :default  - Default value for this argument. It cannot be required and have default values.
      # :banner   - String to show on usage notes.
      #
      # ==== Errors
      # ArgumentError:: Raised if you supply a required argument after a non required one.
      #
      def argument(name, options = {})
        is_thor_reserved_word?(name, :argument)
        no_commands { attr_accessor name }

        required = if options.key?(:optional)
          !options[:optional]
        elsif options.key?(:required)
          options[:required]
        else
          options[:default].nil?
        end

        remove_argument name

        if required
          arguments.each do |argument|
            next if argument.required?
            raise ArgumentError, "You cannot have #{name.to_s.inspect} as required argument after " \
                                "the non-required argument #{argument.human_name.inspect}."
          end
        end

        options[:required] = required

        arguments << Bundler::Thor::Argument.new(name, options)
      end

      # Returns this class arguments, looking up in the ancestors chain.
      #
      # ==== Returns
      # Array[Bundler::Thor::Argument]
      #
      def arguments
        @arguments ||= from_superclass(:arguments, [])
      end

      # Adds a bunch of options to the set of class options.
      #
      #   class_options :foo => false, :bar => :required, :baz => :string
      #
      # If you prefer more detailed declaration, check class_option.
      #
      # ==== Parameters
      # Hash[Symbol => Object]
      #
      def class_options(options = nil)
        @class_options ||= from_superclass(:class_options, {})
        build_options(options, @class_options) if options
        @class_options
      end

      # Adds an option to the set of class options
      #
      # ==== Parameters
      # name<Symbol>:: The name of the argument.
      # options<Hash>:: Described below.
      #
      # ==== Options
      # :desc::     -- Description for the argument.
      # :required:: -- If the argument is required or not.
      # :default::  -- Default value for this argument.
      # :group::    -- The group for this options. Use by class options to output options in different levels.
      # :aliases::  -- Aliases for this option. <b>Note:</b> Bundler::Thor follows a convention of one-dash-one-letter options. Thus aliases like "-something" wouldn't be parsed; use either "\--something" or "-s" instead.
      # :type::     -- The type of the argument, can be :string, :hash, :array, :numeric or :boolean.
      # :banner::   -- String to show on usage notes.
      # :hide::     -- If you want to hide this option from the help.
      #
      def class_option(name, options = {})
        unless [ Symbol, String ].any? { |klass| name.is_a?(klass) }
          raise ArgumentError, "Expected a Symbol or String, got #{name.inspect}"
        end
        build_option(name, options, class_options)
      end

      # Adds and declares option group for exclusive options in the
      # block and arguments. You can declare options as the outside of the block.
      #
      # ==== Parameters
      # Array[Bundler::Thor::Option.name]
      #
      # ==== Examples
      #
      #   class_exclusive do
      #     class_option :one
      #     class_option :two
      #    end
      #
      # Or
      #
      #   class_option :one
      #   class_option :two
      #   class_exclusive :one, :two
      #
      # If you give "--one" and "--two" at the same time ExclusiveArgumentsError
      # will be raised.
      #
      def class_exclusive(*args, &block)
        register_options_relation_for(:class_options,
                                      :class_exclusive_option_names, *args, &block)
      end

      # Adds and declares option group for required at least one of options in the
      # block and arguments. You can declare options as the outside of the block.
      #
      # ==== Examples
      #
      #   class_at_least_one do
      #     class_option :one
      #     class_option :two
      #    end
      #
      # Or
      #
      #   class_option :one
      #   class_option :two
      #   class_at_least_one :one, :two
      #
      # If you do not give "--one" and "--two" AtLeastOneRequiredArgumentError
      # will be raised.
      #
      # You can use class_at_least_one and class_exclusive at the same time.
      #
      #    class_exclusive do
      #      class_at_least_one do
      #        class_option :one
      #        class_option :two
      #      end
      #    end
      #
      # Then it is required either only one of "--one" or "--two".
      #
      def class_at_least_one(*args, &block)
        register_options_relation_for(:class_options,
                                      :class_at_least_one_option_names, *args, &block)
      end

      # Returns this class exclusive options array set, looking up in the ancestors chain.
      #
      # ==== Returns
      # Array[Array[Bundler::Thor::Option.name]]
      #
      def class_exclusive_option_names
        @class_exclusive_option_names ||= from_superclass(:class_exclusive_option_names, [])
      end

      # Returns this class at least one of required options array set, looking up in the ancestors chain.
      #
      # ==== Returns
      # Array[Array[Bundler::Thor::Option.name]]
      #
      def class_at_least_one_option_names
        @class_at_least_one_option_names ||= from_superclass(:class_at_least_one_option_names, [])
      end

      # Removes a previous defined argument. If :undefine is given, undefine
      # accessors as well.
      #
      # ==== Parameters
      # names<Array>:: Arguments to be removed
      #
      # ==== Examples
      #
      #   remove_argument :foo
      #   remove_argument :foo, :bar, :baz, :undefine => true
      #
      def remove_argument(*names)
        options = names.last.is_a?(Hash) ? names.pop : {}

        names.each do |name|
          arguments.delete_if { |a| a.name == name.to_s }
          undef_method name, "#{name}=" if options[:undefine]
        end
      end

      # Removes a previous defined class option.
      #
      # ==== Parameters
      # names<Array>:: Class options to be removed
      #
      # ==== Examples
      #
      #   remove_class_option :foo
      #   remove_class_option :foo, :bar, :baz
      #
      def remove_class_option(*names)
        names.each do |name|
          class_options.delete(name)
        end
      end

      # Defines the group. This is used when thor list is invoked so you can specify
      # that only commands from a pre-defined group will be shown. Defaults to standard.
      #
      # ==== Parameters
      # name<String|Symbol>
      #
      def group(name = nil)
        if name
          @group = name.to_s
        else
          @group ||= from_superclass(:group, "standard")
        end
      end

      # Returns the commands for this Bundler::Thor class.
      #
      # ==== Returns
      # Hash:: An ordered hash with commands names as keys and Bundler::Thor::Command
      #        objects as values.
      #
      def commands
        @commands ||= Hash.new
      end
      alias_method :tasks, :commands

      # Returns the commands for this Bundler::Thor class and all subclasses.
      #
      # ==== Returns
      # Hash:: An ordered hash with commands names as keys and Bundler::Thor::Command
      #        objects as values.
      #
      def all_commands
        @all_commands ||= from_superclass(:all_commands, Hash.new)
        @all_commands.merge!(commands)
      end
      alias_method :all_tasks, :all_commands

      # Removes a given command from this Bundler::Thor class. This is usually done if you
      # are inheriting from another class and don't want it to be available
      # anymore.
      #
      # By default it only remove the mapping to the command. But you can supply
      # :undefine => true to undefine the method from the class as well.
      #
      # ==== Parameters
      # name<Symbol|String>:: The name of the command to be removed
      # options<Hash>:: You can give :undefine => true if you want commands the method
      #                 to be undefined from the class as well.
      #
      def remove_command(*names)
        options = names.last.is_a?(Hash) ? names.pop : {}

        names.each do |name|
          commands.delete(name.to_s)
          all_commands.delete(name.to_s)
          undef_method name if options[:undefine]
        end
      end
      alias_method :remove_task, :remove_command

      # All methods defined inside the given block are not added as commands.
      #
      # So you can do:
      #
      #   class MyScript < Bundler::Thor
      #     no_commands do
      #       def this_is_not_a_command
      #       end
      #     end
      #   end
      #
      # You can also add the method and remove it from the command list:
      #
      #   class MyScript < Bundler::Thor
      #     def this_is_not_a_command
      #     end
      #     remove_command :this_is_not_a_command
      #   end
      #
      def no_commands(&block)
        no_commands_context.enter(&block)
      end

      alias_method :no_tasks, :no_commands

      def no_commands_context
        @no_commands_context ||= NestedContext.new
      end

      def no_commands?
        no_commands_context.entered?
      end

      # Sets the namespace for the Bundler::Thor or Bundler::Thor::Group class. By default the
      # namespace is retrieved from the class name. If your Bundler::Thor class is named
      # Scripts::MyScript, the help method, for example, will be called as:
      #
      #   thor scripts:my_script -h
      #
      # If you change the namespace:
      #
      #   namespace :my_scripts
      #
      # You change how your commands are invoked:
      #
      #   thor my_scripts -h
      #
      # Finally, if you change your namespace to default:
      #
      #   namespace :default
      #
      # Your commands can be invoked with a shortcut. Instead of:
      #
      #   thor :my_command
      #
      def namespace(name = nil)
        if name
          @namespace = name.to_s
        else
          @namespace ||= Bundler::Thor::Util.namespace_from_thor_class(self)
        end
      end

      # Parses the command and options from the given args, instantiate the class
      # and invoke the command. This method is used when the arguments must be parsed
      # from an array. If you are inside Ruby and want to use a Bundler::Thor class, you
      # can simply initialize it:
      #
      #   script = MyScript.new(args, options, config)
      #   script.invoke(:command, first_arg, second_arg, third_arg)
      #
      def start(given_args = ARGV, config = {})
        config[:shell] ||= Bundler::Thor::Base.shell.new
        dispatch(nil, given_args.dup, nil, config)
      rescue Bundler::Thor::Error => e
        config[:debug] || ENV["THOR_DEBUG"] == "1" ? (raise e) : config[:shell].error(e.message)
        exit(false) if exit_on_failure?
      rescue Errno::EPIPE
        # This happens if a thor command is piped to something like `head`,
        # which closes the pipe when it's done reading. This will also
        # mean that if the pipe is closed, further unnecessary
        # computation will not occur.
        exit(true)
      end

      # Allows to use private methods from parent in child classes as commands.
      #
      # ==== Parameters
      #   names<Array>:: Method names to be used as commands
      #
      # ==== Examples
      #
      #   public_command :foo
      #   public_command :foo, :bar, :baz
      #
      def public_command(*names)
        names.each do |name|
          class_eval "def #{name}(*); super end", __FILE__, __LINE__
        end
      end
      alias_method :public_task, :public_command

      def handle_no_command_error(command, has_namespace = $thor_runner) #:nodoc:
        raise UndefinedCommandError.new(command, all_commands.keys, (namespace if has_namespace))
      end
      alias_method :handle_no_task_error, :handle_no_command_error

      def handle_argument_error(command, error, args, arity) #:nodoc:
        name = [command.ancestor_name, command.name].compact.join(" ")
        msg = "ERROR: \"#{basename} #{name}\" was called with ".dup
        msg << "no arguments"               if     args.empty?
        msg << "arguments " << args.inspect unless args.empty?
        msg << "\nUsage: \"#{banner(command).split("\n").join("\"\n       \"")}\""
        raise InvocationError, msg
      end

      # A flag that makes the process exit with status 1 if any error happens.
      def exit_on_failure?
        Bundler::Thor.deprecation_warning "Bundler::Thor exit with status 0 on errors. To keep this behavior, you must define `exit_on_failure?` in `#{self.name}`"
        false
      end

    protected

      # Prints the class options per group. If an option does not belong to
      # any group, it's printed as Class option.
      #
      def class_options_help(shell, groups = {}) #:nodoc:
        # Group options by group
        class_options.each do |_, value|
          groups[value.group] ||= []
          groups[value.group] << value
        end

        # Deal with default group
        global_options = groups.delete(nil) || []
        print_options(shell, global_options)

        # Print all others
        groups.each do |group_name, options|
          print_options(shell, options, group_name)
        end
      end

      # Receives a set of options and print them.
      def print_options(shell, options, group_name = nil)
        return if options.empty?

        list = []
        padding = options.map { |o| o.aliases_for_usage.size }.max.to_i
        options.each do |option|
          next if option.hide
          item = [option.usage(padding)]
          item.push(option.description ? "# #{option.description}" : "")

          list << item
          list << ["", "# Default: #{option.print_default}"] if option.show_default?
          list << ["", "# Possible values: #{option.enum_to_s}"] if option.enum
        end

        shell.say(group_name ? "#{group_name} options:" : "Options:")
        shell.print_table(list, indent: 2)
        shell.say ""
      end

      # Raises an error if the word given is a Bundler::Thor reserved word.
      def is_thor_reserved_word?(word, type) #:nodoc:
        return false unless THOR_RESERVED_WORDS.include?(word.to_s)
        raise "#{word.inspect} is a Bundler::Thor reserved word and cannot be defined as #{type}"
      end

      # Build an option and adds it to the given scope.
      #
      # ==== Parameters
      # name<Symbol>:: The name of the argument.
      # options<Hash>:: Described in both class_option and method_option.
      # scope<Hash>:: Options hash that is being built up
      def build_option(name, options, scope) #:nodoc:
        scope[name] = Bundler::Thor::Option.new(name, {check_default_type: check_default_type}.merge!(options))
      end

      # Receives a hash of options, parse them and add to the scope. This is a
      # fast way to set a bunch of options:
      #
      #   build_options :foo => true, :bar => :required, :baz => :string
      #
      # ==== Parameters
      # Hash[Symbol => Object]
      def build_options(options, scope) #:nodoc:
        options.each do |key, value|
          scope[key] = Bundler::Thor::Option.parse(key, value)
        end
      end

      # Finds a command with the given name. If the command belongs to the current
      # class, just return it, otherwise dup it and add the fresh copy to the
      # current command hash.
      def find_and_refresh_command(name) #:nodoc:
        if commands[name.to_s]
          commands[name.to_s]
        elsif command = all_commands[name.to_s] # rubocop:disable Lint/AssignmentInCondition
          commands[name.to_s] = command.clone
        else
          raise ArgumentError, "You supplied :for => #{name.inspect}, but the command #{name.inspect} could not be found."
        end
      end
      alias_method :find_and_refresh_task, :find_and_refresh_command

      # Every time someone inherits from a Bundler::Thor class, register the klass
      # and file into baseclass.
      def inherited(klass)
        super(klass)
        Bundler::Thor::Base.register_klass_file(klass)
        klass.instance_variable_set(:@no_commands, 0)
      end

      # Fire this callback whenever a method is added. Added methods are
      # tracked as commands by invoking the create_command method.
      def method_added(meth)
        super(meth)
        meth = meth.to_s

        if meth == "initialize"
          initialize_added
          return
        end

        # Return if it's not a public instance method
        return unless public_method_defined?(meth.to_sym)

        return if no_commands? || !create_command(meth)

        is_thor_reserved_word?(meth, :command)
        Bundler::Thor::Base.register_klass_file(self)
      end

      # Retrieves a value from superclass. If it reaches the baseclass,
      # returns default.
      def from_superclass(method, default = nil)
        if self == baseclass || !superclass.respond_to?(method, true)
          default
        else
          value = superclass.send(method)

          # Ruby implements `dup` on Object, but raises a `TypeError`
          # if the method is called on immediates. As a result, we
          # don't have a good way to check whether dup will succeed
          # without calling it and rescuing the TypeError.
          begin
            value.dup
          rescue TypeError
            value
          end

        end
      end

      #
      # The basename of the program invoking the thor class.
      #
      def basename
        File.basename($PROGRAM_NAME).split(" ").first
      end

      # SIGNATURE: Sets the baseclass. This is where the superclass lookup
      # finishes.
      def baseclass #:nodoc:
      end

      # SIGNATURE: Creates a new command if valid_command? is true. This method is
      # called when a new method is added to the class.
      def create_command(meth) #:nodoc:
      end
      alias_method :create_task, :create_command

      # SIGNATURE: Defines behavior when the initialize method is added to the
      # class.
      def initialize_added #:nodoc:
      end

      # SIGNATURE: The hook invoked by start.
      def dispatch(command, given_args, given_opts, config) #:nodoc:
        raise NotImplementedError
      end

      # Register a relation of options for target(method_option/class_option)
      # by args and block.
      def register_options_relation_for(target, relation, *args, &block) # :nodoc:
        opt = args.pop if args.last.is_a? Hash
        opt ||= {}
        names = args.map{ |arg| arg.to_s }
        names += built_option_names(target, opt, &block) if block_given?
        command_scope_member(relation, opt) << names
      end

      # Get target(method_options or class_options) options
      # of before and after by block evaluation.
      def built_option_names(target, opt = {}, &block) # :nodoc:
        before = command_scope_member(target, opt).map{ |k,v| v.name }
        instance_eval(&block)
        after  = command_scope_member(target, opt).map{ |k,v| v.name }
        after - before
      end

      # Get command scope member by name.
      def command_scope_member(name, options = {}) # :nodoc:
        if options[:for]
          find_and_refresh_command(options[:for]).send(name)
        else
          send(name)
        end
      end
    end
  end
end
PK*J[��홇�Mshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor.rbnu�[���require_relative "line_editor/basic"
require_relative "line_editor/readline"

class Bundler::Thor
  module LineEditor
    def self.readline(prompt, options = {})
      best_available.new(prompt, options).readline
    end

    def self.best_available
      [
        Bundler::Thor::LineEditor::Readline,
        Bundler::Thor::LineEditor::Basic
      ].detect(&:available?)
    end
  end
end
PK*J[���,,Ishare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/version.rbnu�[���class Bundler::Thor
  VERSION = "1.3.2"
end
PK*J[td�.	.	Gshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell.rbnu�[���require "rbconfig"

class Bundler::Thor
  module Base
    class << self
      attr_writer :shell

      # Returns the shell used in all Bundler::Thor classes. If you are in a Unix platform
      # it will use a colored log, otherwise it will use a basic one without color.
      #
      def shell
        @shell ||= if ENV["THOR_SHELL"] && !ENV["THOR_SHELL"].empty?
          Bundler::Thor::Shell.const_get(ENV["THOR_SHELL"])
        elsif RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ && !ENV["ANSICON"]
          Bundler::Thor::Shell::Basic
        else
          Bundler::Thor::Shell::Color
        end
      end
    end
  end

  module Shell
    SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_error, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
    attr_writer :shell

    autoload :Basic, File.expand_path("shell/basic", __dir__)
    autoload :Color, File.expand_path("shell/color", __dir__)
    autoload :HTML,  File.expand_path("shell/html", __dir__)

    # Add shell to initialize config values.
    #
    # ==== Configuration
    # shell<Object>:: An instance of the shell to be used.
    #
    # ==== Examples
    #
    #   class MyScript < Bundler::Thor
    #     argument :first, :type => :numeric
    #   end
    #
    #   MyScript.new [1.0], { :foo => :bar }, :shell => Bundler::Thor::Shell::Basic.new
    #
    def initialize(args = [], options = {}, config = {})
      super
      self.shell = config[:shell]
      shell.base ||= self if shell.respond_to?(:base)
    end

    # Holds the shell for the given Bundler::Thor instance. If no shell is given,
    # it gets a default shell from Bundler::Thor::Base.shell.
    def shell
      @shell ||= Bundler::Thor::Base.shell.new
    end

    # Common methods that are delegated to the shell.
    SHELL_DELEGATED_METHODS.each do |method|
      module_eval <<-METHOD, __FILE__, __LINE__ + 1
        def #{method}(*args,&block)
          shell.#{method}(*args,&block)
        end
      METHOD
    end

    # Yields the given block with padding.
    def with_padding
      shell.padding += 1
      yield
    ensure
      shell.padding -= 1
    end

  protected

    # Allow shell to be shared between invocations.
    #
    def _shared_configuration #:nodoc:
      super.merge!(shell: shell)
    end
  end
end
PK*J[/��ssLshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/html.rbnu�[���require_relative "basic"

class Bundler::Thor
  module Shell
    # Inherit from Bundler::Thor::Shell::Basic and add set_color behavior. Check
    # Bundler::Thor::Shell::Basic to see all available methods.
    #
    class HTML < Basic
      # The start of an HTML bold sequence.
      BOLD       = "font-weight: bold"

      # Set the terminal's foreground HTML color to black.
      BLACK      = "color: black"
      # Set the terminal's foreground HTML color to red.
      RED        = "color: red"
      # Set the terminal's foreground HTML color to green.
      GREEN      = "color: green"
      # Set the terminal's foreground HTML color to yellow.
      YELLOW     = "color: yellow"
      # Set the terminal's foreground HTML color to blue.
      BLUE       = "color: blue"
      # Set the terminal's foreground HTML color to magenta.
      MAGENTA    = "color: magenta"
      # Set the terminal's foreground HTML color to cyan.
      CYAN       = "color: cyan"
      # Set the terminal's foreground HTML color to white.
      WHITE      = "color: white"

      # Set the terminal's background HTML color to black.
      ON_BLACK   = "background-color: black"
      # Set the terminal's background HTML color to red.
      ON_RED     = "background-color: red"
      # Set the terminal's background HTML color to green.
      ON_GREEN   = "background-color: green"
      # Set the terminal's background HTML color to yellow.
      ON_YELLOW  = "background-color: yellow"
      # Set the terminal's background HTML color to blue.
      ON_BLUE    = "background-color: blue"
      # Set the terminal's background HTML color to magenta.
      ON_MAGENTA = "background-color: magenta"
      # Set the terminal's background HTML color to cyan.
      ON_CYAN    = "background-color: cyan"
      # Set the terminal's background HTML color to white.
      ON_WHITE   = "background-color: white"

      # Set color by using a string or one of the defined constants. If a third
      # option is set to true, it also adds bold to the string. This is based
      # on Highline implementation and it automatically appends CLEAR to the end
      # of the returned String.
      #
      def set_color(string, *colors)
        if colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) }
          html_colors = colors.map { |color| lookup_color(color) }
          "<span style=\"#{html_colors.join('; ')};\">#{Bundler::Thor::Util.escape_html(string)}</span>"
        else
          color, bold = colors
          html_color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol)
          styles = [html_color]
          styles << BOLD if bold
          "<span style=\"#{styles.join('; ')};\">#{Bundler::Thor::Util.escape_html(string)}</span>"
        end
      end

      # Ask something to the user and receives a response.
      #
      # ==== Example
      #   ask("What is your name?")
      #
      # TODO: Implement #ask for Bundler::Thor::Shell::HTML
      def ask(statement, color = nil)
        raise NotImplementedError, "Implement #ask for Bundler::Thor::Shell::HTML"
      end

    protected

      def can_display_colors?
        true
      end
    end
  end
end
PK*J[���yMMMshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/color.rbnu�[���require_relative "basic"

class Bundler::Thor
  module Shell
    # Inherit from Bundler::Thor::Shell::Basic and add set_color behavior. Check
    # Bundler::Thor::Shell::Basic to see all available methods.
    #
    class Color < Basic
      # Embed in a String to clear all previous ANSI sequences.
      CLEAR      = "\e[0m"
      # The start of an ANSI bold sequence.
      BOLD       = "\e[1m"

      # Set the terminal's foreground ANSI color to black.
      BLACK      = "\e[30m"
      # Set the terminal's foreground ANSI color to red.
      RED        = "\e[31m"
      # Set the terminal's foreground ANSI color to green.
      GREEN      = "\e[32m"
      # Set the terminal's foreground ANSI color to yellow.
      YELLOW     = "\e[33m"
      # Set the terminal's foreground ANSI color to blue.
      BLUE       = "\e[34m"
      # Set the terminal's foreground ANSI color to magenta.
      MAGENTA    = "\e[35m"
      # Set the terminal's foreground ANSI color to cyan.
      CYAN       = "\e[36m"
      # Set the terminal's foreground ANSI color to white.
      WHITE      = "\e[37m"

      # Set the terminal's background ANSI color to black.
      ON_BLACK   = "\e[40m"
      # Set the terminal's background ANSI color to red.
      ON_RED     = "\e[41m"
      # Set the terminal's background ANSI color to green.
      ON_GREEN   = "\e[42m"
      # Set the terminal's background ANSI color to yellow.
      ON_YELLOW  = "\e[43m"
      # Set the terminal's background ANSI color to blue.
      ON_BLUE    = "\e[44m"
      # Set the terminal's background ANSI color to magenta.
      ON_MAGENTA = "\e[45m"
      # Set the terminal's background ANSI color to cyan.
      ON_CYAN    = "\e[46m"
      # Set the terminal's background ANSI color to white.
      ON_WHITE   = "\e[47m"

      # Set color by using a string or one of the defined constants. If a third
      # option is set to true, it also adds bold to the string. This is based
      # on Highline implementation and it automatically appends CLEAR to the end
      # of the returned String.
      #
      # Pass foreground, background and bold options to this method as
      # symbols.
      #
      # Example:
      #
      #   set_color "Hi!", :red, :on_white, :bold
      #
      # The available colors are:
      #
      #   :bold
      #   :black
      #   :red
      #   :green
      #   :yellow
      #   :blue
      #   :magenta
      #   :cyan
      #   :white
      #   :on_black
      #   :on_red
      #   :on_green
      #   :on_yellow
      #   :on_blue
      #   :on_magenta
      #   :on_cyan
      #   :on_white
      def set_color(string, *colors)
        if colors.compact.empty? || !can_display_colors?
          string
        elsif colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) }
          ansi_colors = colors.map { |color| lookup_color(color) }
          "#{ansi_colors.join}#{string}#{CLEAR}"
        else
          # The old API was `set_color(color, bold=boolean)`. We
          # continue to support the old API because you should never
          # break old APIs unnecessarily :P
          foreground, bold = colors
          foreground = self.class.const_get(foreground.to_s.upcase) if foreground.is_a?(Symbol)

          bold       = bold ? BOLD : ""
          "#{bold}#{foreground}#{string}#{CLEAR}"
        end
      end

    protected

      def can_display_colors?
        are_colors_supported? && !are_colors_disabled?
      end

      def are_colors_supported?
        stdout.tty? && ENV["TERM"] != "dumb"
      end

      def are_colors_disabled?
        !ENV["NO_COLOR"].nil? && !ENV["NO_COLOR"].empty?
      end
    end
  end
end
PK*J[�D`Pshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/terminal.rbnu�[���class Bundler::Thor
  module Shell
    module Terminal
      DEFAULT_TERMINAL_WIDTH = 80

      class << self
        # This code was copied from Rake, available under MIT-LICENSE
        # Copyright (c) 2003, 2004 Jim Weirich
        def terminal_width
          result = if ENV["THOR_COLUMNS"]
            ENV["THOR_COLUMNS"].to_i
          else
            unix? ? dynamic_width : DEFAULT_TERMINAL_WIDTH
          end
          result < 10 ? DEFAULT_TERMINAL_WIDTH : result
        rescue
          DEFAULT_TERMINAL_WIDTH
        end

        def unix?
          RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris)/i
        end

      private

        # Calculate the dynamic width of the terminal
        def dynamic_width
          @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
        end

        def dynamic_width_stty
          `stty size 2>/dev/null`.split[1].to_i
        end

        def dynamic_width_tput
          `tput cols 2>/dev/null`.to_i
        end

      end
    end
  end
end
PK*J[��dlVshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rbnu�[���require_relative "terminal"

class Bundler::Thor
  module Shell
    class ColumnPrinter
      attr_reader :stdout, :options

      def initialize(stdout, options = {})
        @stdout = stdout
        @options = options
        @indent = options[:indent].to_i
      end

      def print(array)
        return if array.empty?
        colwidth = (array.map { |el| el.to_s.size }.max || 0) + 2
        array.each_with_index do |value, index|
          # Don't output trailing spaces when printing the last column
          if ((((index + 1) % (Terminal.terminal_width / colwidth))).zero? && !index.zero?) || index + 1 == array.length
            stdout.puts value
          else
            stdout.printf("%-#{colwidth}s", value)
          end
        end
      end
    end
  end
end

PK*J[�_8���Ushare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rbnu�[���require_relative "column_printer"
require_relative "terminal"

class Bundler::Thor
  module Shell
    class TablePrinter < ColumnPrinter
      BORDER_SEPARATOR = :separator

      def initialize(stdout, options = {})
        super
        @formats = []
        @maximas = []
        @colwidth = options[:colwidth]
        @truncate = options[:truncate] == true ? Terminal.terminal_width : options[:truncate]
        @padding = 1
      end

      def print(array)
        return if array.empty?

        prepare(array)

        print_border_separator if options[:borders]

        array.each do |row|
          if options[:borders] && row == BORDER_SEPARATOR
            print_border_separator
            next
          end

          sentence = "".dup

          row.each_with_index do |column, index|
            sentence << format_cell(column, row.size, index)
          end

          sentence = truncate(sentence)
          sentence << "|" if options[:borders]
          stdout.puts indentation + sentence

        end
        print_border_separator if options[:borders]
      end

    private

      def prepare(array)
        array = array.reject{|row| row == BORDER_SEPARATOR }

        @formats << "%-#{@colwidth + 2}s".dup if @colwidth
        start = @colwidth ? 1 : 0

        colcount = array.max { |a, b| a.size <=> b.size }.size

        start.upto(colcount - 1) do |index|
          maxima = array.map { |row| row[index] ? row[index].to_s.size : 0 }.max

          @maximas << maxima
          @formats << if options[:borders]
             "%-#{maxima}s".dup
          elsif index == colcount - 1
            # Don't output 2 trailing spaces when printing the last column
            "%-s".dup
          else
            "%-#{maxima + 2}s".dup
          end
        end

        @formats << "%s"
      end

      def format_cell(column, row_size, index)
        maxima = @maximas[index]

        f = if column.is_a?(Numeric)
          if options[:borders]
            # With borders we handle padding separately
            "%#{maxima}s"
          elsif index == row_size - 1
            # Don't output 2 trailing spaces when printing the last column
            "%#{maxima}s"
          else
            "%#{maxima}s  "
          end
        else
          @formats[index]
        end

        cell = "".dup
        cell << "|" + " " * @padding if options[:borders]
        cell << f % column.to_s
        cell << " " * @padding if options[:borders]
        cell
      end

      def print_border_separator
        separator = @maximas.map do |maxima|
          "+" + "-" * (maxima + 2 * @padding)
        end
        stdout.puts indentation + separator.join + "+"
      end

      def truncate(string)
        return string unless @truncate
        chars = string.chars.to_a
        if chars.length <= @truncate
          chars.join
        else
          chars[0, @truncate - 3 - @indent].join + "..."
        end
      end

      def indentation
        " " * @indent
      end
    end
  end
end
PK*J[��[�..Mshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/basic.rbnu�[���require_relative "column_printer"
require_relative "table_printer"
require_relative "wrapped_printer"

class Bundler::Thor
  module Shell
    class Basic
      attr_accessor :base
      attr_reader   :padding

      # Initialize base, mute and padding to nil.
      #
      def initialize #:nodoc:
        @base = nil
        @mute = false
        @padding = 0
        @always_force = false
      end

      # Mute everything that's inside given block
      #
      def mute
        @mute = true
        yield
      ensure
        @mute = false
      end

      # Check if base is muted
      #
      def mute?
        @mute
      end

      # Sets the output padding, not allowing less than zero values.
      #
      def padding=(value)
        @padding = [0, value].max
      end

      # Sets the output padding while executing a block and resets it.
      #
      def indent(count = 1)
        orig_padding = padding
        self.padding = padding + count
        yield
        self.padding = orig_padding
      end

      # Asks something to the user and receives a response.
      #
      # If a default value is specified it will be presented to the user
      # and allows them to select that value with an empty response. This
      # option is ignored when limited answers are supplied.
      #
      # If asked to limit the correct responses, you can pass in an
      # array of acceptable answers.  If one of those is not supplied,
      # they will be shown a message stating that one of those answers
      # must be given and re-asked the question.
      #
      # If asking for sensitive information, the :echo option can be set
      # to false to mask user input from $stdin.
      #
      # If the required input is a path, then set the path option to
      # true. This will enable tab completion for file paths relative
      # to the current working directory on systems that support
      # Readline.
      #
      # ==== Example
      #   ask("What is your name?")
      #
      #   ask("What is the planet furthest from the sun?", :default => "Neptune")
      #
      #   ask("What is your favorite Neopolitan flavor?", :limited_to => ["strawberry", "chocolate", "vanilla"])
      #
      #   ask("What is your password?", :echo => false)
      #
      #   ask("Where should the file be saved?", :path => true)
      #
      def ask(statement, *args)
        options = args.last.is_a?(Hash) ? args.pop : {}
        color = args.first

        if options[:limited_to]
          ask_filtered(statement, color, options)
        else
          ask_simply(statement, color, options)
        end
      end

      # Say (print) something to the user. If the sentence ends with a whitespace
      # or tab character, a new line is not appended (print + flush). Otherwise
      # are passed straight to puts (behavior got from Highline).
      #
      # ==== Example
      #   say("I know you knew that.")
      #
      def say(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
        return if quiet?

        buffer = prepare_message(message, *color)
        buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")

        stdout.print(buffer)
        stdout.flush
      end

      # Say (print) an error to the user. If the sentence ends with a whitespace
      # or tab character, a new line is not appended (print + flush). Otherwise
      # are passed straight to puts (behavior got from Highline).
      #
      # ==== Example
      #   say_error("error: something went wrong")
      #
      def say_error(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
        return if quiet?

        buffer = prepare_message(message, *color)
        buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")

        stderr.print(buffer)
        stderr.flush
      end

      # Say a status with the given color and appends the message. Since this
      # method is used frequently by actions, it allows nil or false to be given
      # in log_status, avoiding the message from being shown. If a Symbol is
      # given in log_status, it's used as the color.
      #
      def say_status(status, message, log_status = true)
        return if quiet? || log_status == false
        spaces = "  " * (padding + 1)
        status = status.to_s.rjust(12)
        margin = " " * status.length + spaces

        color  = log_status.is_a?(Symbol) ? log_status : :green
        status = set_color status, color, true if color

        message = message.to_s.chomp.gsub(/(?<!\A)^/, margin)
        buffer = "#{status}#{spaces}#{message}\n"

        stdout.print(buffer)
        stdout.flush
      end

      # Asks the user a question and returns true if the user replies "y" or
      # "yes".
      #
      def yes?(statement, color = nil)
        !!(ask(statement, color, add_to_history: false) =~ is?(:yes))
      end

      # Asks the user a question and returns true if the user replies "n" or
      # "no".
      #
      def no?(statement, color = nil)
        !!(ask(statement, color, add_to_history: false) =~ is?(:no))
      end

      # Prints values in columns
      #
      # ==== Parameters
      # Array[String, String, ...]
      #
      def print_in_columns(array)
        printer = ColumnPrinter.new(stdout)
        printer.print(array)
      end

      # Prints a table.
      #
      # ==== Parameters
      # Array[Array[String, String, ...]]
      #
      # ==== Options
      # indent<Integer>:: Indent the first column by indent value.
      # colwidth<Integer>:: Force the first column to colwidth spaces wide.
      # borders<Boolean>:: Adds ascii borders.
      #
      def print_table(array, options = {}) # rubocop:disable Metrics/MethodLength
        printer = TablePrinter.new(stdout, options)
        printer.print(array)
      end

      # Prints a long string, word-wrapping the text to the current width of the
      # terminal display. Ideal for printing heredocs.
      #
      # ==== Parameters
      # String
      #
      # ==== Options
      # indent<Integer>:: Indent each line of the printed paragraph by indent value.
      #
      def print_wrapped(message, options = {})
        printer = WrappedPrinter.new(stdout, options)
        printer.print(message)
      end

      # Deals with file collision and returns true if the file should be
      # overwritten and false otherwise. If a block is given, it uses the block
      # response as the content for the diff.
      #
      # ==== Parameters
      # destination<String>:: the destination file to solve conflicts
      # block<Proc>:: an optional block that returns the value to be used in diff and merge
      #
      def file_collision(destination)
        return true if @always_force
        options = block_given? ? "[Ynaqdhm]" : "[Ynaqh]"

        loop do
          answer = ask(
            %[Overwrite #{destination}? (enter "h" for help) #{options}],
            add_to_history: false
          )

          case answer
          when nil
            say ""
            return true
          when is?(:yes), is?(:force), ""
            return true
          when is?(:no), is?(:skip)
            return false
          when is?(:always)
            return @always_force = true
          when is?(:quit)
            say "Aborting..."
            raise SystemExit
          when is?(:diff)
            show_diff(destination, yield) if block_given?
            say "Retrying..."
          when is?(:merge)
            if block_given? && !merge_tool.empty?
              merge(destination, yield)
              return nil
            end

            say "Please specify merge tool to `THOR_MERGE` env."
          else
            say file_collision_help(block_given?)
          end
        end
      end

      # Called if something goes wrong during the execution. This is used by Bundler::Thor
      # internally and should not be used inside your scripts. If something went
      # wrong, you can always raise an exception. If you raise a Bundler::Thor::Error, it
      # will be rescued and wrapped in the method below.
      #
      def error(statement)
        stderr.puts statement
      end

      # Apply color to the given string with optional bold. Disabled in the
      # Bundler::Thor::Shell::Basic class.
      #
      def set_color(string, *) #:nodoc:
        string
      end

    protected

      def prepare_message(message, *color)
        spaces = "  " * padding
        spaces + set_color(message.to_s, *color)
      end

      def can_display_colors?
        false
      end

      def lookup_color(color)
        return color unless color.is_a?(Symbol)
        self.class.const_get(color.to_s.upcase)
      end

      def stdout
        $stdout
      end

      def stderr
        $stderr
      end

      def is?(value) #:nodoc:
        value = value.to_s

        if value.size == 1
          /\A#{value}\z/i
        else
          /\A(#{value}|#{value[0, 1]})\z/i
        end
      end

      def file_collision_help(block_given) #:nodoc:
        help = <<-HELP
        Y - yes, overwrite
        n - no, do not overwrite
        a - all, overwrite this and all others
        q - quit, abort
        h - help, show this help
        HELP
        if block_given
          help << <<-HELP
        d - diff, show the differences between the old and the new
        m - merge, run merge tool
          HELP
        end
        help
      end

      def show_diff(destination, content) #:nodoc:
        diff_cmd = ENV["THOR_DIFF"] || ENV["RAILS_DIFF"] || "diff -u"

        require "tempfile"
        Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
          temp.write content
          temp.rewind
          system %(#{diff_cmd} "#{destination}" "#{temp.path}")
        end
      end

      def quiet? #:nodoc:
        mute? || (base && base.options[:quiet])
      end

      def unix?
        Terminal.unix?
      end

      def ask_simply(statement, color, options)
        default = options[:default]
        message = [statement, ("(#{default})" if default), nil].uniq.join(" ")
        message = prepare_message(message, *color)
        result = Bundler::Thor::LineEditor.readline(message, options)

        return unless result

        result = result.strip

        if default && result == ""
          default
        else
          result
        end
      end

      def ask_filtered(statement, color, options)
        answer_set = options[:limited_to]
        case_insensitive = options.fetch(:case_insensitive, false)
        correct_answer = nil
        until correct_answer
          answers = answer_set.join(", ")
          answer = ask_simply("#{statement} [#{answers}]", color, options)
          correct_answer = answer_match(answer_set, answer, case_insensitive)
          say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
        end
        correct_answer
      end

      def answer_match(possibilities, answer, case_insensitive)
        if case_insensitive
          possibilities.detect{ |possibility| possibility.downcase == answer.downcase }
        else
          possibilities.detect{ |possibility| possibility == answer }
        end
      end

      def merge(destination, content) #:nodoc:
        require "tempfile"
        Tempfile.open([File.basename(destination), File.extname(destination)], File.dirname(destination)) do |temp|
          temp.write content
          temp.rewind
          system %(#{merge_tool} "#{temp.path}" "#{destination}")
        end
      end

      def merge_tool #:nodoc:
        @merge_tool ||= ENV["THOR_MERGE"] || git_merge_tool
      end

      def git_merge_tool #:nodoc:
        `git config merge.tool`.rstrip rescue ""
      end
    end
  end
end
PK*J[���

Wshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rbnu�[���require_relative "column_printer"
require_relative "terminal"

class Bundler::Thor
  module Shell
    class WrappedPrinter < ColumnPrinter
      def print(message)
        width = Terminal.terminal_width - @indent
        paras = message.split("\n\n")

        paras.map! do |unwrapped|
          words = unwrapped.split(" ")
          counter = words.first.length
          words.inject do |memo, word|
            word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
            counter = 0 if word.include? "\n"
            if (counter + word.length + 1) < width
              memo = "#{memo} #{word}"
              counter += (word.length + 1)
            else
              memo = "#{memo}\n#{word}"
              counter = word.length
            end
            memo
          end
        end.compact!

        paras.each do |para|
          para.split("\n").each do |line|
            stdout.puts line.insert(0, " " * @indent)
          end
          stdout.puts unless para == paras.last
        end
      end
    end
  end
end

PK*J[qe��
�
Gshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/error.rbnu�[���class Bundler::Thor
  Correctable = if defined?(DidYouMean::SpellChecker) && defined?(DidYouMean::Correctable) # rubocop:disable Naming/ConstantName
    Module.new do
      def to_s
        super + DidYouMean.formatter.message_for(corrections)
      end

      def corrections
        @corrections ||= self.class.const_get(:SpellChecker).new(self).corrections
      end
    end
  end

  # Bundler::Thor::Error is raised when it's caused by wrong usage of thor classes. Those
  # errors have their backtrace suppressed and are nicely shown to the user.
  #
  # Errors that are caused by the developer, like declaring a method which
  # overwrites a thor keyword, SHOULD NOT raise a Bundler::Thor::Error. This way, we
  # ensure that developer errors are shown with full backtrace.
  class Error < StandardError
  end

  # Raised when a command was not found.
  class UndefinedCommandError < Error
    class SpellChecker
      attr_reader :error

      def initialize(error)
        @error = error
      end

      def corrections
        @corrections ||= spell_checker.correct(error.command).map(&:inspect)
      end

      def spell_checker
        DidYouMean::SpellChecker.new(dictionary: error.all_commands)
      end
    end

    attr_reader :command, :all_commands

    def initialize(command, all_commands, namespace)
      @command = command
      @all_commands = all_commands

      message = "Could not find command #{command.inspect}"
      message = namespace ? "#{message} in #{namespace.inspect} namespace." : "#{message}."

      super(message)
    end

    prepend Correctable if Correctable
  end
  UndefinedTaskError = UndefinedCommandError

  class AmbiguousCommandError < Error
  end
  AmbiguousTaskError = AmbiguousCommandError

  # Raised when a command was found, but not invoked properly.
  class InvocationError < Error
  end

  class UnknownArgumentError < Error
    class SpellChecker
      attr_reader :error

      def initialize(error)
        @error = error
      end

      def corrections
        @corrections ||=
          error.unknown.flat_map { |unknown| spell_checker.correct(unknown) }.uniq.map(&:inspect)
      end

      def spell_checker
        @spell_checker ||= DidYouMean::SpellChecker.new(dictionary: error.switches)
      end
    end

    attr_reader :switches, :unknown

    def initialize(switches, unknown)
      @switches = switches
      @unknown = unknown

      super("Unknown switches #{unknown.map(&:inspect).join(', ')}")
    end

    prepend Correctable if Correctable
  end

  class RequiredArgumentMissingError < InvocationError
  end

  class MalformattedArgumentError < InvocationError
  end

  class ExclusiveArgumentError < InvocationError
  end

  class AtLeastOneRequiredArgumentError < InvocationError
  end
end
PK*J[���Mshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/rake_compat.rbnu�[���require "rake"
require "rake/dsl_definition"

class Bundler::Thor
  # Adds a compatibility layer to your Bundler::Thor classes which allows you to use
  # rake package tasks. For example, to use rspec rake tasks, one can do:
  #
  #   require 'bundler/vendor/thor/lib/thor/rake_compat'
  #   require 'rspec/core/rake_task'
  #
  #   class Default < Bundler::Thor
  #     include Bundler::Thor::RakeCompat
  #
  #     RSpec::Core::RakeTask.new(:spec) do |t|
  #       t.spec_opts = ['--options', './.rspec']
  #       t.spec_files = FileList['spec/**/*_spec.rb']
  #     end
  #   end
  #
  module RakeCompat
    include Rake::DSL if defined?(Rake::DSL)

    def self.rake_classes
      @rake_classes ||= []
    end

    def self.included(base)
      super(base)
      # Hack. Make rakefile point to invoker, so rdoc task is generated properly.
      rakefile = File.basename(caller[0].match(/(.*):\d+/)[1])
      Rake.application.instance_variable_set(:@rakefile, rakefile)
      rake_classes << base
    end
  end
end

# override task on (main), for compatibility with Rake 0.9
instance_eval do
  alias rake_namespace namespace

  def task(*)
    task = super

    if klass = Bundler::Thor::RakeCompat.rake_classes.last # rubocop:disable Lint/AssignmentInCondition
      non_namespaced_name = task.name.split(":").last

      description = non_namespaced_name
      description << task.arg_names.map { |n| n.to_s.upcase }.join(" ")
      description.strip!

      klass.desc description, Rake.application.last_description || non_namespaced_name
      Rake.application.last_description = nil
      klass.send :define_method, non_namespaced_name do |*args|
        Rake::Task[task.name.to_sym].invoke(*args)
      end
    end

    task
  end

  def namespace(name)
    if klass = Bundler::Thor::RakeCompat.rake_classes.last # rubocop:disable Lint/AssignmentInCondition
      const_name = Bundler::Thor::Util.camel_case(name.to_s).to_sym
      klass.const_set(const_name, Class.new(Bundler::Thor))
      new_klass = klass.const_get(const_name)
      Bundler::Thor::RakeCompat.rake_classes << new_klass
    end

    super
    Bundler::Thor::RakeCompat.rake_classes.pop
  end
end
PK*J[�S��#�#Fshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/util.rbnu�[���require "rbconfig"

class Bundler::Thor
  module Sandbox #:nodoc:
  end

  # This module holds several utilities:
  #
  # 1) Methods to convert thor namespaces to constants and vice-versa.
  #
  #   Bundler::Thor::Util.namespace_from_thor_class(Foo::Bar::Baz) #=> "foo:bar:baz"
  #
  # 2) Loading thor files and sandboxing:
  #
  #   Bundler::Thor::Util.load_thorfile("~/.thor/foo")
  #
  module Util
    class << self
      # Receives a namespace and search for it in the Bundler::Thor::Base subclasses.
      #
      # ==== Parameters
      # namespace<String>:: The namespace to search for.
      #
      def find_by_namespace(namespace)
        namespace = "default#{namespace}" if namespace.empty? || namespace =~ /^:/
        Bundler::Thor::Base.subclasses.detect { |klass| klass.namespace == namespace }
      end

      # Receives a constant and converts it to a Bundler::Thor namespace. Since Bundler::Thor
      # commands can be added to a sandbox, this method is also responsible for
      # removing the sandbox namespace.
      #
      # This method should not be used in general because it's used to deal with
      # older versions of Bundler::Thor. On current versions, if you need to get the
      # namespace from a class, just call namespace on it.
      #
      # ==== Parameters
      # constant<Object>:: The constant to be converted to the thor path.
      #
      # ==== Returns
      # String:: If we receive Foo::Bar::Baz it returns "foo:bar:baz"
      #
      def namespace_from_thor_class(constant)
        constant = constant.to_s.gsub(/^Bundler::Thor::Sandbox::/, "")
        constant = snake_case(constant).squeeze(":")
        constant
      end

      # Given the contents, evaluate it inside the sandbox and returns the
      # namespaces defined in the sandbox.
      #
      # ==== Parameters
      # contents<String>
      #
      # ==== Returns
      # Array[Object]
      #
      def namespaces_in_content(contents, file = __FILE__)
        old_constants = Bundler::Thor::Base.subclasses.dup
        Bundler::Thor::Base.subclasses.clear

        load_thorfile(file, contents)

        new_constants = Bundler::Thor::Base.subclasses.dup
        Bundler::Thor::Base.subclasses.replace(old_constants)

        new_constants.map!(&:namespace)
        new_constants.compact!
        new_constants
      end

      # Returns the thor classes declared inside the given class.
      #
      def thor_classes_in(klass)
        stringfied_constants = klass.constants.map(&:to_s)
        Bundler::Thor::Base.subclasses.select do |subclass|
          next unless subclass.name
          stringfied_constants.include?(subclass.name.gsub("#{klass.name}::", ""))
        end
      end

      # Receives a string and convert it to snake case. SnakeCase returns snake_case.
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def snake_case(str)
        return str.downcase if str =~ /^[A-Z_]+$/
        str.gsub(/\B[A-Z]/, '_\&').squeeze("_") =~ /_*(.*)/
        Regexp.last_match(-1).downcase
      end

      # Receives a string and convert it to camel case. camel_case returns CamelCase.
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def camel_case(str)
        return str if str !~ /_/ && str =~ /[A-Z]+.*/
        str.split("_").map(&:capitalize).join
      end

      # Receives a namespace and tries to retrieve a Bundler::Thor or Bundler::Thor::Group class
      # from it. It first searches for a class using the all the given namespace,
      # if it's not found, removes the highest entry and searches for the class
      # again. If found, returns the highest entry as the class name.
      #
      # ==== Examples
      #
      #   class Foo::Bar < Bundler::Thor
      #     def baz
      #     end
      #   end
      #
      #   class Baz::Foo < Bundler::Thor::Group
      #   end
      #
      #   Bundler::Thor::Util.namespace_to_thor_class("foo:bar")     #=> Foo::Bar, nil # will invoke default command
      #   Bundler::Thor::Util.namespace_to_thor_class("baz:foo")     #=> Baz::Foo, nil
      #   Bundler::Thor::Util.namespace_to_thor_class("foo:bar:baz") #=> Foo::Bar, "baz"
      #
      # ==== Parameters
      # namespace<String>
      #
      def find_class_and_command_by_namespace(namespace, fallback = true)
        if namespace.include?(":") # look for a namespaced command
          *pieces, command  = namespace.split(":")
          namespace = pieces.join(":")
          namespace = "default" if namespace.empty?
          klass = Bundler::Thor::Base.subclasses.detect { |thor| thor.namespace == namespace && thor.command_exists?(command) }
        end
        unless klass # look for a Bundler::Thor::Group with the right name
          klass = Bundler::Thor::Util.find_by_namespace(namespace)
          command = nil
        end
        if !klass && fallback # try a command in the default namespace
          command = namespace
          klass   = Bundler::Thor::Util.find_by_namespace("")
        end
        [klass, command]
      end
      alias_method :find_class_and_task_by_namespace, :find_class_and_command_by_namespace

      # Receives a path and load the thor file in the path. The file is evaluated
      # inside the sandbox to avoid namespacing conflicts.
      #
      def load_thorfile(path, content = nil, debug = false)
        content ||= File.read(path)

        begin
          Bundler::Thor::Sandbox.class_eval(content, path)
        rescue StandardError => e
          $stderr.puts("WARNING: unable to load thorfile #{path.inspect}: #{e.message}")
          if debug
            $stderr.puts(*e.backtrace)
          else
            $stderr.puts(e.backtrace.first)
          end
        end
      end

      def user_home
        @@user_home ||= if ENV["HOME"]
          ENV["HOME"]
        elsif ENV["USERPROFILE"]
          ENV["USERPROFILE"]
        elsif ENV["HOMEDRIVE"] && ENV["HOMEPATH"]
          File.join(ENV["HOMEDRIVE"], ENV["HOMEPATH"])
        elsif ENV["APPDATA"]
          ENV["APPDATA"]
        else
          begin
            File.expand_path("~")
          rescue
            if File::ALT_SEPARATOR
              "C:/"
            else
              "/"
            end
          end
        end
      end

      # Returns the root where thor files are located, depending on the OS.
      #
      def thor_root
        File.join(user_home, ".thor").tr("\\", "/")
      end

      # Returns the files in the thor root. On Windows thor_root will be something
      # like this:
      #
      #   C:\Documents and Settings\james\.thor
      #
      # If we don't #gsub the \ character, Dir.glob will fail.
      #
      def thor_root_glob
        files = Dir["#{escape_globs(thor_root)}/*"]

        files.map! do |file|
          File.directory?(file) ? File.join(file, "main.thor") : file
        end
      end

      # Where to look for Bundler::Thor files.
      #
      def globs_for(path)
        path = escape_globs(path)
        ["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/**/*.thor"]
      end

      # Return the path to the ruby interpreter taking into account multiple
      # installations and windows extensions.
      #
      def ruby_command
        @ruby_command ||= begin
          ruby_name = RbConfig::CONFIG["ruby_install_name"]
          ruby = File.join(RbConfig::CONFIG["bindir"], ruby_name)
          ruby << RbConfig::CONFIG["EXEEXT"]

          # avoid using different name than ruby (on platforms supporting links)
          if ruby_name != "ruby" && File.respond_to?(:readlink)
            begin
              alternate_ruby = File.join(RbConfig::CONFIG["bindir"], "ruby")
              alternate_ruby << RbConfig::CONFIG["EXEEXT"]

              # ruby is a symlink
              if File.symlink? alternate_ruby
                linked_ruby = File.readlink alternate_ruby

                # symlink points to 'ruby_install_name'
                ruby = alternate_ruby if linked_ruby == ruby_name || linked_ruby == ruby
              end
            rescue NotImplementedError # rubocop:disable Lint/HandleExceptions
              # just ignore on windows
            end
          end

          # escape string in case path to ruby executable contain spaces.
          ruby.sub!(/.*\s.*/m, '"\&"')
          ruby
        end
      end

      # Returns a string that has had any glob characters escaped.
      # The glob characters are `* ? { } [ ]`.
      #
      # ==== Examples
      #
      #   Bundler::Thor::Util.escape_globs('[apps]')   # => '\[apps\]'
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def escape_globs(path)
        path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
      end

      # Returns a string that has had any HTML characters escaped.
      #
      # ==== Examples
      #
      #   Bundler::Thor::Util.escape_html('<div>')   # => "&lt;div&gt;"
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def escape_html(string)
        CGI.escapeHTML(string)
      end
    end
  end
end
PK*J[0�o�Y	Y	gshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rbnu�[���class Bundler::Thor
  module CoreExt #:nodoc:
    # A hash with indifferent access and magic predicates.
    #
    #   hash = Bundler::Thor::CoreExt::HashWithIndifferentAccess.new 'foo' => 'bar', 'baz' => 'bee', 'force' => true
    #
    #   hash[:foo]  #=> 'bar'
    #   hash['foo'] #=> 'bar'
    #   hash.foo?   #=> true
    #
    class HashWithIndifferentAccess < ::Hash #:nodoc:
      def initialize(hash = {})
        super()
        hash.each do |key, value|
          self[convert_key(key)] = value
        end
      end

      def [](key)
        super(convert_key(key))
      end

      def []=(key, value)
        super(convert_key(key), value)
      end

      def delete(key)
        super(convert_key(key))
      end

      def except(*keys)
        dup.tap do |hash|
          keys.each { |key| hash.delete(convert_key(key)) }
        end
      end

      def fetch(key, *args)
        super(convert_key(key), *args)
      end

      def slice(*keys)
        super(*keys.map{ |key| convert_key(key) })
      end

      def key?(key)
        super(convert_key(key))
      end

      def values_at(*indices)
        indices.map { |key| self[convert_key(key)] }
      end

      def merge(other)
        dup.merge!(other)
      end

      def merge!(other)
        other.each do |key, value|
          self[convert_key(key)] = value
        end
        self
      end

      def reverse_merge(other)
        self.class.new(other).merge(self)
      end

      def reverse_merge!(other_hash)
        replace(reverse_merge(other_hash))
      end

      def replace(other_hash)
        super(other_hash)
      end

      # Convert to a Hash with String keys.
      def to_hash
        Hash.new(default).merge!(self)
      end

    protected

      def convert_key(key)
        key.is_a?(Symbol) ? key.to_s : key
      end

      # Magic predicates. For instance:
      #
      #   options.force?                  # => !!options['force']
      #   options.shebang                 # => "/usr/lib/local/ruby"
      #   options.test_framework?(:rspec) # => options[:test_framework] == :rspec
      #
      def method_missing(method, *args)
        method = method.to_s
        if method =~ /^(\w+)\?$/
          if args.empty?
            !!self[$1]
          else
            self[$1] == args.first
          end
        else
          self[method]
        end
      end
    end
  end
end
PK*J[΅�FFLshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/invocation.rbnu�[���class Bundler::Thor
  module Invocation
    def self.included(base) #:nodoc:
      super(base)
      base.extend ClassMethods
    end

    module ClassMethods
      # This method is responsible for receiving a name and find the proper
      # class and command for it. The key is an optional parameter which is
      # available only in class methods invocations (i.e. in Bundler::Thor::Group).
      def prepare_for_invocation(key, name) #:nodoc:
        case name
        when Symbol, String
          Bundler::Thor::Util.find_class_and_command_by_namespace(name.to_s, !key)
        else
          name
        end
      end
    end

    # Make initializer aware of invocations and the initialization args.
    def initialize(args = [], options = {}, config = {}, &block) #:nodoc:
      @_invocations = config[:invocations] || Hash.new { |h, k| h[k] = [] }
      @_initializer = [args, options, config]
      super
    end

    # Make the current command chain accessible with in a Bundler::Thor-(sub)command
    def current_command_chain
      @_invocations.values.flatten.map(&:to_sym)
    end

    # Receives a name and invokes it. The name can be a string (either "command" or
    # "namespace:command"), a Bundler::Thor::Command, a Class or a Bundler::Thor instance. If the
    # command cannot be guessed by name, it can also be supplied as second argument.
    #
    # You can also supply the arguments, options and configuration values for
    # the command to be invoked, if none is given, the same values used to
    # initialize the invoker are used to initialize the invoked.
    #
    # When no name is given, it will invoke the default command of the current class.
    #
    # ==== Examples
    #
    #   class A < Bundler::Thor
    #     def foo
    #       invoke :bar
    #       invoke "b:hello", ["Erik"]
    #     end
    #
    #     def bar
    #       invoke "b:hello", ["Erik"]
    #     end
    #   end
    #
    #   class B < Bundler::Thor
    #     def hello(name)
    #       puts "hello #{name}"
    #     end
    #   end
    #
    # You can notice that the method "foo" above invokes two commands: "bar",
    # which belongs to the same class and "hello" which belongs to the class B.
    #
    # By using an invocation system you ensure that a command is invoked only once.
    # In the example above, invoking "foo" will invoke "b:hello" just once, even
    # if it's invoked later by "bar" method.
    #
    # When class A invokes class B, all arguments used on A initialization are
    # supplied to B. This allows lazy parse of options. Let's suppose you have
    # some rspec commands:
    #
    #   class Rspec < Bundler::Thor::Group
    #     class_option :mock_framework, :type => :string, :default => :rr
    #
    #     def invoke_mock_framework
    #       invoke "rspec:#{options[:mock_framework]}"
    #     end
    #   end
    #
    # As you noticed, it invokes the given mock framework, which might have its
    # own options:
    #
    #   class Rspec::RR < Bundler::Thor::Group
    #     class_option :style, :type => :string, :default => :mock
    #   end
    #
    # Since it's not rspec concern to parse mock framework options, when RR
    # is invoked all options are parsed again, so RR can extract only the options
    # that it's going to use.
    #
    # If you want Rspec::RR to be initialized with its own set of options, you
    # have to do that explicitly:
    #
    #   invoke "rspec:rr", [], :style => :foo
    #
    # Besides giving an instance, you can also give a class to invoke:
    #
    #   invoke Rspec::RR, [], :style => :foo
    #
    def invoke(name = nil, *args)
      if name.nil?
        warn "[Bundler::Thor] Calling invoke() without argument is deprecated. Please use invoke_all instead.\n#{caller.join("\n")}"
        return invoke_all
      end

      args.unshift(nil) if args.first.is_a?(Array) || args.first.nil?
      command, args, opts, config = args

      klass, command = _retrieve_class_and_command(name, command)
      raise "Missing Bundler::Thor class for invoke #{name}" unless klass
      raise "Expected Bundler::Thor class, got #{klass}" unless klass <= Bundler::Thor::Base

      args, opts, config = _parse_initialization_options(args, opts, config)
      klass.send(:dispatch, command, args, opts, config) do |instance|
        instance.parent_options = options
      end
    end

    # Invoke the given command if the given args.
    def invoke_command(command, *args) #:nodoc:
      current = @_invocations[self.class]

      unless current.include?(command.name)
        current << command.name
        command.run(self, *args)
      end
    end
    alias_method :invoke_task, :invoke_command

    # Invoke all commands for the current instance.
    def invoke_all #:nodoc:
      self.class.all_commands.map { |_, command| invoke_command(command) }
    end

    # Invokes using shell padding.
    def invoke_with_padding(*args)
      with_padding { invoke(*args) }
    end

  protected

    # Configuration values that are shared between invocations.
    def _shared_configuration #:nodoc:
      {invocations: @_invocations}
    end

    # This method simply retrieves the class and command to be invoked.
    # If the name is nil or the given name is a command in the current class,
    # use the given name and return self as class. Otherwise, call
    # prepare_for_invocation in the current class.
    def _retrieve_class_and_command(name, sent_command = nil) #:nodoc:
      if name.nil?
        [self.class, nil]
      elsif self.class.all_commands[name.to_s]
        [self.class, name.to_s]
      else
        klass, command = self.class.prepare_for_invocation(nil, name)
        [klass, command || sent_command]
      end
    end
    alias_method :_retrieve_class_and_task, :_retrieve_class_and_command

    # Initialize klass using values stored in the @_initializer.
    def _parse_initialization_options(args, opts, config) #:nodoc:
      stored_args, stored_opts, stored_config = @_initializer

      args ||= stored_args.dup
      opts ||= stored_opts.dup

      config ||= {}
      config = stored_config.merge(_shared_configuration).merge!(config)

      [args, opts, config]
    end
  end
end
PK*J[�`d��%�%6share/gems/gems/bundler-2.6.7/lib/bundler/installer.rbnu�[���# frozen_string_literal: true

require_relative "worker"
require_relative "installer/parallel_installer"
require_relative "installer/standalone"
require_relative "installer/gem_installer"

module Bundler
  class Installer
    class << self
      attr_accessor :ambiguous_gems

      Installer.ambiguous_gems = []
    end

    attr_reader :post_install_messages, :definition

    # Begins the installation process for Bundler.
    # For more information see the #run method on this class.
    def self.install(root, definition, options = {})
      installer = new(root, definition)
      Plugin.hook(Plugin::Events::GEM_BEFORE_INSTALL_ALL, definition.dependencies)
      installer.run(options)
      Plugin.hook(Plugin::Events::GEM_AFTER_INSTALL_ALL, definition.dependencies)
      installer
    end

    def initialize(root, definition)
      @root = root
      @definition = definition
      @post_install_messages = {}
    end

    # Runs the install procedures for a specific Gemfile.
    #
    # Firstly, this method will check to see if `Bundler.bundle_path` exists
    # and if not then Bundler will create the directory. This is usually the same
    # location as RubyGems which typically is the `~/.gem` directory
    # unless other specified.
    #
    # Secondly, it checks if Bundler has been configured to be "frozen".
    # Frozen ensures that the Gemfile and the Gemfile.lock file are matching.
    # This stops a situation where a developer may update the Gemfile but may not run
    # `bundle install`, which leads to the Gemfile.lock file not being correctly updated.
    # If this file is not correctly updated then any other developer running
    # `bundle install` will potentially not install the correct gems.
    #
    # Thirdly, Bundler checks if there are any dependencies specified in the Gemfile.
    # If there are no dependencies specified then Bundler returns a warning message stating
    # so and this method returns.
    #
    # Fourthly, Bundler checks if the Gemfile.lock exists, and if so
    # then proceeds to set up a definition based on the Gemfile and the Gemfile.lock.
    # During this step Bundler will also download information about any new gems
    # that are not in the Gemfile.lock and resolve any dependencies if needed.
    #
    # Fifthly, Bundler resolves the dependencies either through a cache of gems or by remote.
    # This then leads into the gems being installed, along with stubs for their executables,
    # but only if the --binstubs option has been passed or Bundler.options[:bin] has been set
    # earlier.
    #
    # Sixthly, a new Gemfile.lock is created from the installed gems to ensure that the next time
    # that a user runs `bundle install` they will receive any updates from this process.
    #
    # Finally, if the user has specified the standalone flag, Bundler will generate the needed
    # require paths and save them in a `setup.rb` file. See `bundle standalone --help` for more
    # information.
    def run(options)
      Bundler.create_bundle_path

      ProcessLock.lock do
        @definition.ensure_equivalent_gemfile_and_lockfile(options[:deployment])

        if @definition.dependencies.empty?
          Bundler.ui.warn "The Gemfile specifies no dependencies"
          lock
          return
        end

        if @definition.setup_domain!(options)
          ensure_specs_are_compatible!
          load_plugins
        end
        install(options)

        Gem::Specification.reset # invalidate gem specification cache so that installed gems are immediately available

        lock
        Standalone.new(options[:standalone], @definition).generate if options[:standalone]
      end
    end

    def generate_bundler_executable_stubs(spec, options = {})
      if options[:binstubs_cmd] && spec.executables.empty?
        options = {}
        spec.runtime_dependencies.each do |dep|
          bins = @definition.specs[dep].first.executables
          options[dep.name] = bins unless bins.empty?
        end
        if options.any?
          Bundler.ui.warn "#{spec.name} has no executables, but you may want " \
            "one from a gem it depends on."
          options.each {|name, bins| Bundler.ui.warn "  #{name} has: #{bins.join(", ")}" }
        else
          Bundler.ui.warn "There are no executables for the gem #{spec.name}."
        end
        return
      end

      # double-assignment to avoid warnings about variables that will be used by ERB
      bin_path = Bundler.bin_path
      bin_path = bin_path
      relative_gemfile_path = Bundler.default_gemfile.relative_path_from(bin_path)
      relative_gemfile_path = relative_gemfile_path
      ruby_command = Thor::Util.ruby_command
      ruby_command = ruby_command
      template_path = File.expand_path("templates/Executable", __dir__)
      if spec.name == "bundler"
        template_path += ".bundler"
        spec.executables = %(bundle)
      end
      template = File.read(template_path)

      exists = []
      spec.executables.each do |executable|
        binstub_path = "#{bin_path}/#{executable}"
        if File.exist?(binstub_path) && !options[:force]
          exists << executable
          next
        end

        mode = Gem.win_platform? ? "wb:UTF-8" : "w"
        require "erb"
        content = ERB.new(template, trim_mode: "-").result(binding)

        File.write(binstub_path, content, mode: mode, perm: 0o777 & ~File.umask)
        if Gem.win_platform? || options[:all_platforms]
          prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
          File.write("#{binstub_path}.cmd", prefix + content, mode: mode)
        end
      end

      if options[:binstubs_cmd] && exists.any?
        case exists.size
        when 1
          Bundler.ui.warn "Skipped #{exists[0]} since it already exists."
        when 2
          Bundler.ui.warn "Skipped #{exists.join(" and ")} since they already exist."
        else
          items = exists[0...-1].empty? ? nil : exists[0...-1].join(", ")
          skipped = [items, exists[-1]].compact.join(" and ")
          Bundler.ui.warn "Skipped #{skipped} since they already exist."
        end
        Bundler.ui.warn "If you want to overwrite skipped stubs, use --force."
      end
    end

    def generate_standalone_bundler_executable_stubs(spec, options = {})
      # double-assignment to avoid warnings about variables that will be used by ERB
      bin_path = Bundler.bin_path
      unless path = Bundler.settings[:path]
        raise "Can't standalone without an explicit path set"
      end
      standalone_path = Bundler.root.join(path).relative_path_from(bin_path)
      standalone_path = standalone_path
      template = File.read(File.expand_path("templates/Executable.standalone", __dir__))
      ruby_command = Thor::Util.ruby_command
      ruby_command = ruby_command

      spec.executables.each do |executable|
        next if executable == "bundle"
        executable_path = Pathname(spec.full_gem_path).join(spec.bindir, executable).relative_path_from(bin_path)
        executable_path = executable_path

        mode = Gem.win_platform? ? "wb:UTF-8" : "w"
        require "erb"
        content = ERB.new(template, trim_mode: "-").result(binding)

        File.write("#{bin_path}/#{executable}", content, mode: mode, perm: 0o755)
        if Gem.win_platform? || options[:all_platforms]
          prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
          File.write("#{bin_path}/#{executable}.cmd", prefix + content, mode: mode)
        end
      end
    end

    private

    # the order that the resolver provides is significant, since
    # dependencies might affect the installation of a gem.
    # that said, it's a rare situation (other than rake), and parallel
    # installation is SO MUCH FASTER. so we let people opt in.
    def install(options)
      standalone = options[:standalone]
      force = options[:force]
      local = options[:local] || options[:"prefer-local"]
      jobs = installation_parallelization
      spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force, local: local)
      spec_installations.each do |installation|
        post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message?
      end
    end

    def installation_parallelization
      if jobs = Bundler.settings[:jobs]
        return jobs
      end

      Bundler.settings.processor_count
    end

    def load_plugins
      Gem.load_plugins

      requested_path_gems = @definition.requested_specs.select {|s| s.source.is_a?(Source::Path) }
      path_plugin_files = requested_path_gems.flat_map do |spec|
        spec.matches_for_glob("rubygems_plugin#{Bundler.rubygems.suffix_pattern}")
      rescue TypeError
        error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
        raise Gem::InvalidSpecificationException, error_message
      end
      Gem.load_plugin_files(path_plugin_files)
      Gem.load_env_plugins
    end

    def ensure_specs_are_compatible!
      @definition.specs.each do |spec|
        unless spec.matches_current_ruby?
          raise InstallError, "#{spec.full_name} requires ruby version #{spec.required_ruby_version}, " \
            "which is incompatible with the current version, #{Gem.ruby_version}"
        end
        unless spec.matches_current_rubygems?
          raise InstallError, "#{spec.full_name} requires rubygems version #{spec.required_rubygems_version}, " \
            "which is incompatible with the current version, #{Gem.rubygems_version}"
        end
      end
    end

    def lock
      @definition.lock
    end
  end
end
PK*J[W�|��/share/gems/gems/bundler-2.6.7/lib/bundler/ui.rbnu�[���# frozen_string_literal: true

module Bundler
  module UI
    autoload :RGProxy, File.expand_path("ui/rg_proxy", __dir__)
    autoload :Shell,   File.expand_path("ui/shell", __dir__)
    autoload :Silent,  File.expand_path("ui/silent", __dir__)
  end
end
PK*J[��̯��Ashare/gems/gems/bundler-2.6.7/lib/bundler/remote_specification.rbnu�[���# frozen_string_literal: true

module Bundler
  # Represents a lazily loaded gem specification, where the full specification
  # is on the source server in rubygems' "quick" index. The proxy object is to
  # be seeded with what we're given from the source's abbreviated index - the
  # full specification will only be fetched when necessary.
  class RemoteSpecification
    include MatchRemoteMetadata
    include MatchPlatform
    include Comparable

    attr_reader :name, :version, :platform
    attr_writer :dependencies
    attr_accessor :source, :remote, :locked_platform

    def initialize(name, version, platform, spec_fetcher)
      @name         = name
      @version      = Gem::Version.create version
      @original_platform = platform || Gem::Platform::RUBY
      @platform     = Gem::Platform.new(platform)
      @spec_fetcher = spec_fetcher
      @dependencies = nil
      @locked_platform = nil
    end

    def insecurely_materialized?
      @locked_platform.to_s != @platform.to_s
    end

    # Needed before installs, since the arch matters then and quick
    # specs don't bother to include the arch in the platform string
    def fetch_platform
      @platform = _remote_specification.platform
    end

    def full_name
      @full_name ||= if @platform == Gem::Platform::RUBY
        "#{@name}-#{@version}"
      else
        "#{@name}-#{@version}-#{@platform}"
      end
    end

    # Compare this specification against another object. Using sort_obj
    # is compatible with Gem::Specification and other Bundler or RubyGems
    # objects. Otherwise, use the default Object comparison.
    def <=>(other)
      if other.respond_to?(:sort_obj)
        sort_obj <=> other.sort_obj
      else
        super
      end
    end

    # Because Rubyforge cannot be trusted to provide valid specifications
    # once the remote gem is downloaded, the backend specification will
    # be swapped out.
    def __swap__(spec)
      raise APIResponseInvalidDependenciesError unless spec.dependencies.all? {|d| d.is_a?(Gem::Dependency) }

      SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
      @_remote_specification = spec
    end

    # Create a delegate used for sorting. This strategy is copied from
    # RubyGems 2.23 and ensures that Bundler's specifications can be
    # compared and sorted with RubyGems' own specifications.
    #
    # @see #<=>
    # @see Gem::Specification#sort_obj
    #
    # @return [Array] an object you can use to compare and sort this
    #   specification against other specifications
    def sort_obj
      [@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1]
    end

    def to_s
      "#<#{self.class} name=#{name} version=#{version} platform=#{platform}>"
    end

    def dependencies
      @dependencies ||= begin
        deps = method_missing(:dependencies)

        # allow us to handle when the specs dependencies are an array of array of string
        # in order to delay the crash to `#__swap__` where it results in a friendlier error
        # see https://github.com/rubygems/bundler/issues/5797
        deps = deps.map {|d| d.is_a?(Gem::Dependency) ? d : Gem::Dependency.new(*d) }

        deps
      end
    end

    def runtime_dependencies
      dependencies.select(&:runtime?)
    end

    def git_version
      return unless loaded_from && source.is_a?(Bundler::Source::Git)
      " #{source.revision[0..6]}"
    end

    private

    def to_ary
      nil
    end

    def _remote_specification
      @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @original_platform])
      @_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \
        " missing from the server!")
    end

    def method_missing(method, *args, &blk)
      _remote_specification.send(method, *args, &blk)
    end

    def respond_to?(method, include_all = false)
      super || _remote_specification.respond_to?(method, include_all)
    end
    public :respond_to?
  end
end
PK*J[_'��)�)4share/gems/gems/bundler-2.6.7/lib/bundler/runtime.rbnu�[���# frozen_string_literal: true

module Bundler
  class Runtime
    include SharedHelpers

    def initialize(root, definition)
      @root = root
      @definition = definition
    end

    def setup(*groups)
      @definition.ensure_equivalent_gemfile_and_lockfile

      # Has to happen first
      clean_load_path

      specs = @definition.specs_for(groups)

      SharedHelpers.set_bundle_environment
      Bundler.rubygems.replace_entrypoints(specs)

      # Activate the specs
      load_paths = specs.map do |spec|
        check_for_activated_spec!(spec)

        Bundler.rubygems.mark_loaded(spec)
        spec.load_paths.reject {|path| $LOAD_PATH.include?(path) }
      end.reverse.flatten

      Gem.add_to_load_path(*load_paths)

      setup_manpath

      lock(preserve_unknown_sections: true)

      self
    end

    def require(*groups)
      groups.map!(&:to_sym)
      groups = [:default] if groups.empty?

      dependencies = @definition.dependencies.select do |dep|
        # Select the dependency if it is in any of the requested groups, and
        # for the current platform, and matches the gem constraints.
        (dep.groups & groups).any? && dep.should_include?
      end

      Plugin.hook(Plugin::Events::GEM_BEFORE_REQUIRE_ALL, dependencies)

      dependencies.each do |dep|
        Plugin.hook(Plugin::Events::GEM_BEFORE_REQUIRE, dep)

        # Loop through all the specified autorequires for the
        # dependency. If there are none, use the dependency's name
        # as the autorequire.
        Array(dep.autorequire || dep.name).each do |file|
          # Allow `require: true` as an alias for `require: <name>`
          file = dep.name if file == true
          required_file = file
          begin
            Kernel.require required_file
          rescue LoadError => e
            if dep.autorequire.nil? && e.path == required_file
              if required_file.include?("-")
                required_file = required_file.tr("-", "/")
                retry
              end
            else
              raise Bundler::GemRequireError.new e,
                "There was an error while trying to load the gem '#{file}'."
            end
          rescue RuntimeError => e
            raise Bundler::GemRequireError.new e,
              "There was an error while trying to load the gem '#{file}'."
          end
        end

        Plugin.hook(Plugin::Events::GEM_AFTER_REQUIRE, dep)
      end

      Plugin.hook(Plugin::Events::GEM_AFTER_REQUIRE_ALL, dependencies)

      dependencies
    end

    def self.definition_method(meth)
      define_method(meth) do
        raise ArgumentError, "no definition when calling Runtime##{meth}" unless @definition
        @definition.send(meth)
      end
    end
    private_class_method :definition_method

    definition_method :requested_specs
    definition_method :specs
    definition_method :dependencies
    definition_method :current_dependencies
    definition_method :requires

    def lock(opts = {})
      return if @definition.no_resolve_needed?
      @definition.lock(opts[:preserve_unknown_sections])
    end

    alias_method :gems, :specs

    def cache(custom_path = nil, local = false)
      cache_path = Bundler.app_cache(custom_path)
      SharedHelpers.filesystem_access(cache_path) do |p|
        FileUtils.mkdir_p(p)
      end unless File.exist?(cache_path)

      Bundler.ui.info "Updating files in #{Bundler.settings.app_cache_path}"

      specs_to_cache = if Bundler.settings[:cache_all_platforms]
        @definition.resolve.materialized_for_all_platforms
      else
        begin
          specs
        rescue GemNotFound
          if local
            Bundler.ui.warn "Some gems seem to be missing from your #{Bundler.settings.app_cache_path} directory."
          end

          raise
        end
      end

      specs_to_cache.each do |spec|
        next if spec.name == "bundler"

        source = spec.source
        next if source.is_a?(Source::Gemspec)

        if source.respond_to?(:migrate_cache)
          source.migrate_cache(custom_path, local: local)
        elsif source.respond_to?(:cache)
          source.cache(spec, custom_path)
        end
      end

      Dir[cache_path.join("*/.git")].each do |git_dir|
        FileUtils.rm_rf(git_dir)
        FileUtils.touch(File.expand_path("../.bundlecache", git_dir))
      end

      prune_cache(cache_path) unless Bundler.settings[:no_prune]
    end

    def prune_cache(cache_path)
      SharedHelpers.filesystem_access(cache_path) do |p|
        FileUtils.mkdir_p(p)
      end unless File.exist?(cache_path)
      resolve = @definition.resolve
      prune_gem_cache(resolve, cache_path)
      prune_git_and_path_cache(resolve, cache_path)
    end

    def clean(dry_run = false)
      gem_bins             = Dir["#{Gem.dir}/bin/*"]
      git_dirs             = Dir["#{Gem.dir}/bundler/gems/*"]
      git_cache_dirs       = Dir["#{Gem.dir}/cache/bundler/git/*"]
      gem_dirs             = Dir["#{Gem.dir}/gems/*"]
      gem_files            = Dir["#{Gem.dir}/cache/*.gem"]
      gemspec_files        = Dir["#{Gem.dir}/specifications/*.gemspec"]
      extension_dirs       = Dir["#{Gem.dir}/extensions/*/*/*"] + Dir["#{Gem.dir}/bundler/gems/extensions/*/*/*"]
      spec_gem_paths       = []
      # need to keep git sources around
      spec_git_paths       = @definition.spec_git_paths
      spec_git_cache_dirs  = []
      spec_gem_executables = []
      spec_cache_paths     = []
      spec_gemspec_paths   = []
      spec_extension_paths = []
      Bundler.rubygems.add_default_gems_to(specs).values.each do |spec|
        spec_gem_paths << spec.full_gem_path
        # need to check here in case gems are nested like for the rails git repo
        md = %r{(.+bundler/gems/.+-[a-f0-9]{7,12})}.match(spec.full_gem_path)
        spec_git_paths << md[1] if md
        spec_gem_executables << spec.executables.collect do |executable|
          e = "#{Bundler.rubygems.gem_bindir}/#{executable}"
          [e, "#{e}.bat"]
        end
        spec_cache_paths << spec.cache_file
        spec_gemspec_paths << spec.spec_file
        spec_extension_paths << spec.extension_dir if spec.respond_to?(:extension_dir)
        spec_git_cache_dirs << spec.source.cache_path.to_s if spec.source.is_a?(Bundler::Source::Git)
      end
      spec_gem_paths.uniq!
      spec_gem_executables.flatten!

      stale_gem_bins       = gem_bins - spec_gem_executables
      stale_git_dirs       = git_dirs - spec_git_paths - ["#{Gem.dir}/bundler/gems/extensions"]
      stale_git_cache_dirs = git_cache_dirs - spec_git_cache_dirs
      stale_gem_dirs       = gem_dirs - spec_gem_paths
      stale_gem_files      = gem_files - spec_cache_paths
      stale_gemspec_files  = gemspec_files - spec_gemspec_paths
      stale_extension_dirs = extension_dirs - spec_extension_paths

      removed_stale_gem_dirs = stale_gem_dirs.collect {|dir| remove_dir(dir, dry_run) }
      removed_stale_git_dirs = stale_git_dirs.collect {|dir| remove_dir(dir, dry_run) }
      output = removed_stale_gem_dirs + removed_stale_git_dirs

      unless dry_run
        stale_files = stale_gem_bins + stale_gem_files + stale_gemspec_files
        stale_files.each do |file|
          SharedHelpers.filesystem_access(File.dirname(file)) do |_p|
            FileUtils.rm(file) if File.exist?(file)
          end
        end

        stale_dirs = stale_git_cache_dirs + stale_extension_dirs
        stale_dirs.each do |stale_dir|
          SharedHelpers.filesystem_access(stale_dir) do |dir|
            FileUtils.rm_rf(dir) if File.exist?(dir)
          end
        end
      end

      output
    end

    private

    def prune_gem_cache(resolve, cache_path)
      cached = Dir["#{cache_path}/*.gem"]

      cached = cached.delete_if do |path|
        spec = Bundler.rubygems.spec_from_gem path

        resolve.any? do |s|
          s.name == spec.name && s.version == spec.version && !s.source.is_a?(Bundler::Source::Git)
        end
      end

      if cached.any?
        Bundler.ui.info "Removing outdated .gem files from #{Bundler.settings.app_cache_path}"

        cached.each do |path|
          Bundler.ui.info "  * #{File.basename(path)}"
          File.delete(path)
        end
      end
    end

    def prune_git_and_path_cache(resolve, cache_path)
      cached = Dir["#{cache_path}/*/.bundlecache"]

      cached = cached.delete_if do |path|
        name = File.basename(File.dirname(path))

        resolve.any? do |s|
          source = s.source
          source.respond_to?(:app_cache_dirname) && source.app_cache_dirname == name
        end
      end

      if cached.any?
        Bundler.ui.info "Removing outdated git and path gems from #{Bundler.settings.app_cache_path}"

        cached.each do |path|
          path = File.dirname(path)
          Bundler.ui.info "  * #{File.basename(path)}"
          FileUtils.rm_rf(path)
        end
      end
    end

    def setup_manpath
      # Add man/ subdirectories from activated bundles to MANPATH for man(1)
      manuals = $LOAD_PATH.filter_map do |path|
        man_subdir = path.sub(/lib$/, "man")
        man_subdir unless Dir[man_subdir + "/man?/"].empty?
      end

      return if manuals.empty?
      Bundler::SharedHelpers.set_env "MANPATH", manuals.concat(
        ENV["MANPATH"] ? ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR) : [""]
      ).uniq.join(File::PATH_SEPARATOR)
    end

    def remove_dir(dir, dry_run)
      full_name = Pathname.new(dir).basename.to_s

      parts    = full_name.split("-")
      name     = parts[0..-2].join("-")
      version  = parts.last
      output   = "#{name} (#{version})"

      if dry_run
        Bundler.ui.info "Would have removed #{output}"
      else
        Bundler.ui.info "Removing #{output}"
        FileUtils.rm_rf(dir)
      end

      output
    end

    def check_for_activated_spec!(spec)
      return unless activated_spec = Bundler.rubygems.loaded_specs(spec.name)
      return if activated_spec.version == spec.version

      suggestion = if activated_spec.default_gem?
        "Since #{spec.name} is a default gem, you can either remove your dependency on it" \
        " or try updating to a newer version of bundler that supports #{spec.name} as a default gem."
      else
        "Prepending `bundle exec` to your command may solve this."
      end

      e = Gem::LoadError.new "You have already activated #{activated_spec.name} #{activated_spec.version}, " \
                             "but your Gemfile requires #{spec.name} #{spec.version}. #{suggestion}"
      e.name = spec.name
      e.requirement = Gem::Requirement.new(spec.version.to_s)
      raise e
    end
  end
end
PK*J[6�e$ll6share/gems/gems/bundler-2.6.7/lib/bundler/deprecate.rbnu�[���# frozen_string_literal: true

begin
  require "rubygems/deprecate"
rescue LoadError
  # it's fine if it doesn't exist on the current RubyGems...
  nil
end

module Bundler
  # If Bundler::Deprecate is an autoload constant, we need to define it
  if defined?(Bundler::Deprecate) && !autoload?(:Deprecate)
    # nothing to do!
  elsif defined? ::Deprecate
    Deprecate = ::Deprecate
  elsif defined? Gem::Deprecate
    Deprecate = Gem::Deprecate
  else
    class Deprecate
    end
  end

  unless Deprecate.respond_to?(:skip_during)
    def Deprecate.skip_during
      original = skip
      self.skip = true
      yield
    ensure
      self.skip = original
    end
  end

  unless Deprecate.respond_to?(:skip)
    def Deprecate.skip
      @skip ||= false
    end
  end

  unless Deprecate.respond_to?(:skip=)
    def Deprecate.skip=(skip)
      @skip = skip
    end
  end
end
PK*J[���7share/gems/gems/bundler-2.6.7/lib/bundler/dependency.rbnu�[���# frozen_string_literal: true

require "rubygems/dependency"
require_relative "shared_helpers"

module Bundler
  class Dependency < Gem::Dependency
    def initialize(name, version, options = {}, &blk)
      type = options["type"] || :runtime
      super(name, version, type)

      @options = options
    end

    def groups
      @groups ||= Array(@options["group"] || :default).map(&:to_sym)
    end

    def source
      return @source if defined?(@source)

      @source = @options["source"]
    end

    def path
      return @path if defined?(@path)

      @path = @options["path"]
    end

    def git
      return @git if defined?(@git)

      @git = @options["git"]
    end

    def github
      return @github if defined?(@github)

      @github = @options["github"]
    end

    def branch
      return @branch if defined?(@branch)

      @branch = @options["branch"]
    end

    def ref
      return @ref if defined?(@ref)

      @ref = @options["ref"]
    end

    def glob
      return @glob if defined?(@glob)

      @glob = @options["glob"]
    end

    def platforms
      @platforms ||= Array(@options["platforms"])
    end

    def env
      return @env if defined?(@env)

      @env = @options["env"]
    end

    def should_include
      @should_include ||= @options.fetch("should_include", true)
    end

    def gemfile
      return @gemfile if defined?(@gemfile)

      @gemfile = @options["gemfile"]
    end

    def force_ruby_platform
      return @force_ruby_platform if defined?(@force_ruby_platform)

      @force_ruby_platform = @options["force_ruby_platform"]
    end

    def autorequire
      return @autorequire if defined?(@autorequire)

      @autorequire = Array(@options["require"] || []) if @options.key?("require")
    end

    RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze
    private_constant :RUBY_PLATFORM_ARRAY

    # Returns the platforms this dependency is valid for, in the same order as
    # passed in the `valid_platforms` parameter
    def gem_platforms(valid_platforms)
      return RUBY_PLATFORM_ARRAY if force_ruby_platform
      return valid_platforms if platforms.empty?

      valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
    end

    def expanded_platforms
      @expanded_platforms ||= platforms.filter_map {|pl| CurrentRuby::PLATFORM_MAP[pl] }.flatten.uniq
    end

    def should_include?
      should_include && current_env? && current_platform?
    end

    def gemspec_dev_dep?
      @gemspec_dev_dep ||= @options.fetch("gemspec_dev_dep", false)
    end

    def gemfile_dep?
      !gemspec_dev_dep?
    end

    def current_env?
      return true unless env
      if env.is_a?(Hash)
        env.all? do |key, val|
          ENV[key.to_s] && (val.is_a?(String) ? ENV[key.to_s] == val : ENV[key.to_s] =~ val)
        end
      else
        ENV[env.to_s]
      end
    end

    def current_platform?
      return true if platforms.empty?
      platforms.any? do |p|
        Bundler.current_ruby.send("#{p}?")
      end
    end

    def to_lock
      out = super
      out << "!" if source
      out
    end

    def specific?
      super
    rescue NoMethodError
      requirement != ">= 0"
    end
  end
end
PK*J[���xx<share/gems/gems/bundler-2.6.7/lib/bundler/materialization.rbnu�[���# frozen_string_literal: true

module Bundler
  #
  # This class materializes a set of resolved specifications (`LazySpecification`)
  # for a given gem into the most appropriate real specifications
  # (`StubSepecification`, `EndpointSpecification`, etc), given a dependency and a
  # target platform.
  #
  class Materialization
    def initialize(dep, platform, candidates:)
      @dep = dep
      @platform = platform
      @candidates = candidates
    end

    def complete?
      specs.any?
    end

    def specs
      @specs ||= if @candidates.nil?
        []
      elsif platform
        GemHelpers.select_best_platform_match(@candidates, platform, force_ruby: dep.force_ruby_platform)
      else
        GemHelpers.select_best_local_platform_match(@candidates, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
      end
    end

    def dependencies
      specs.first.runtime_dependencies.map {|d| [d, platform] }
    end

    def materialized_spec
      specs.reject(&:missing?).first&.materialization
    end

    def completely_missing_specs
      return [] unless specs.all?(&:missing?)

      specs
    end

    def partially_missing_specs
      specs.select(&:missing?)
    end

    def incomplete_specs
      return [] if complete?

      @candidates || LazySpecification.new(dep.name, nil, nil)
    end

    private

    attr_reader :dep, :platform
  end
end
PK*J[��Ǵ�:share/gems/gems/bundler-2.6.7/lib/bundler/vendored_thor.rbnu�[���# frozen_string_literal: true

module Bundler
  def self.require_thor_actions
    require_relative "vendor/thor/lib/thor/actions"
  end
end
require_relative "vendor/thor/lib/thor"
PK*J[��%``2share/gems/gems/bundler-2.6.7/lib/bundler/retry.rbnu�[���# frozen_string_literal: true

module Bundler
  # General purpose class for retrying code that may fail
  class Retry
    attr_accessor :name, :total_runs, :current_run

    class << self
      def default_attempts
        default_retries + 1
      end
      alias_method :attempts, :default_attempts

      def default_retries
        Bundler.settings[:retry]
      end
    end

    def initialize(name, exceptions = nil, retries = self.class.default_retries)
      @name = name
      @retries = retries
      @exceptions = Array(exceptions) || []
      @total_runs = @retries + 1 # will run once, then upto attempts.times
    end

    def attempt(&block)
      @current_run = 0
      @failed      = false
      @error       = nil
      run(&block) while keep_trying?
      @result
    end
    alias_method :attempts, :attempt

    private

    def run(&block)
      @failed = false
      @current_run += 1
      @result = block.call
    rescue StandardError => e
      fail_attempt(e)
    end

    def fail_attempt(e)
      @failed = true
      if last_attempt? || @exceptions.any? {|k| e.is_a?(k) }
        Bundler.ui.info "" unless Bundler.ui.debug?
        raise e
      end
      return true unless name
      Bundler.ui.info "" unless Bundler.ui.debug? # Add new line in case dots preceded this
      Bundler.ui.warn "Retrying #{name} due to error (#{current_run.next}/#{total_runs}): #{e.class} #{e.message}", true
    end

    def keep_trying?
      return true  if current_run.zero?
      return false if last_attempt?
      true if @failed
    end

    def last_attempt?
      current_run >= total_runs
    end
  end
end
PK*J[�*X��9share/gems/gems/bundler-2.6.7/lib/bundler/ruby_version.rbnu�[���# frozen_string_literal: true

module Bundler
  class RubyVersion
    attr_reader :versions,
      :patchlevel,
      :engine,
      :engine_versions,
      :gem_version,
      :engine_gem_version

    def initialize(versions, patchlevel, engine, engine_version)
      # The parameters to this method must satisfy the
      # following constraints, which are verified in
      # the DSL:
      #
      # * If an engine is specified, an engine version
      #   must also be specified
      # * If an engine version is specified, an engine
      #   must also be specified
      # * If the engine is "ruby", the engine version
      #   must not be specified, or the engine version
      #   specified must match the version.

      @versions = Array(versions).map do |v|
        normalized_v = normalize_version(v)

        unless Gem::Requirement::PATTERN.match?(normalized_v)
          raise InvalidArgumentError, "#{v} is not a valid requirement on the Ruby version"
        end

        op, v = Gem::Requirement.parse(normalized_v)
        op == "=" ? v.to_s : "#{op} #{v}"
      end

      @gem_version        = Gem::Requirement.create(@versions.first).requirements.first.last
      @input_engine       = engine&.to_s
      @engine             = engine&.to_s || "ruby"
      @engine_versions    = (engine_version && Array(engine_version)) || @versions
      @engine_gem_version = Gem::Requirement.create(@engine_versions.first).requirements.first.last
      @patchlevel         = patchlevel || (@gem_version.prerelease? ? "-1" : nil)
    end

    def to_s(versions = self.versions)
      output = String.new("ruby #{versions_string(versions)}")
      output << "p#{patchlevel}" if patchlevel && patchlevel != "-1"
      output << " (#{engine} #{versions_string(engine_versions)})" unless engine == "ruby"

      output
    end

    # @private
    PATTERN = /
      ruby\s
      (\d+\.\d+\.\d+(?:\.\S+)?) # ruby version
      (?:p(-?\d+))? # optional patchlevel
      (?:\s\((\S+)\s(.+)\))? # optional engine info
    /xo

    # Returns a RubyVersion from the given string.
    # @param [String] the version string to match.
    # @return [RubyVersion,Nil] The version if the string is a valid RubyVersion
    #         description, and nil otherwise.
    def self.from_string(string)
      new($1, $2, $3, $4) if string =~ PATTERN
    end

    def single_version_string
      to_s(gem_version)
    end

    def ==(other)
      versions == other.versions &&
        engine == other.engine &&
        engine_versions == other.engine_versions &&
        patchlevel == other.patchlevel
    end

    def host
      @host ||= [
        RbConfig::CONFIG["host_cpu"],
        RbConfig::CONFIG["host_vendor"],
        RbConfig::CONFIG["host_os"],
      ].join("-")
    end

    # Returns a tuple of these things:
    #   [diff, this, other]
    #   The priority of attributes are
    #   1. engine
    #   2. ruby_version
    #   3. engine_version
    def diff(other)
      raise ArgumentError, "Can only diff with a RubyVersion, not a #{other.class}" unless other.is_a?(RubyVersion)
      if engine != other.engine && @input_engine
        [:engine, engine, other.engine]
      elsif versions.empty? || !matches?(versions, other.gem_version)
        [:version, versions_string(versions), versions_string(other.versions)]
      elsif @input_engine && !matches?(engine_versions, other.engine_gem_version)
        [:engine_version, versions_string(engine_versions), versions_string(other.engine_versions)]
      elsif patchlevel && (!patchlevel.is_a?(String) || !other.patchlevel.is_a?(String) || !matches?(patchlevel, other.patchlevel))
        [:patchlevel, patchlevel, other.patchlevel]
      end
    end

    def versions_string(versions)
      Array(versions).join(", ")
    end

    def self.system
      ruby_engine = RUBY_ENGINE.dup
      ruby_version = Gem.ruby_version.to_s
      ruby_engine_version = RUBY_ENGINE == "ruby" ? ruby_version : RUBY_ENGINE_VERSION.dup
      patchlevel = RUBY_PATCHLEVEL.to_s

      @system ||= RubyVersion.new(ruby_version, patchlevel, ruby_engine, ruby_engine_version)
    end

    private

    # Ruby's official preview version format uses a `-`: Example: 3.3.0-preview2
    # However, RubyGems recognizes preview version format with a `.`: Example: 3.3.0.preview2
    # Returns version string after replacing `-` with `.`
    def normalize_version(version)
      version.tr("-", ".")
    end

    def matches?(requirements, version)
      # Handles RUBY_PATCHLEVEL of -1 for instances like ruby-head
      return requirements == version if requirements.to_s == "-1" || version.to_s == "-1"

      Array(requirements).all? do |requirement|
        Gem::Requirement.create(requirement).satisfied_by?(Gem::Version.create(version))
      end
    end
  end
end
PK*J[�aS���@share/gems/gems/bundler-2.6.7/lib/bundler/vendored_persistent.rbnu�[���# frozen_string_literal: true

module Bundler
  module Persistent
    module Net
      module HTTP
      end
    end
  end
end
require_relative "vendor/net-http-persistent/lib/net/http/persistent"
PK*J[�$%���=share/gems/gems/bundler-2.6.7/lib/bundler/vendored_timeout.rbnu�[���# frozen_string_literal: true

begin
  require "rubygems/vendored_timeout"
rescue LoadError
  begin
    require "rubygems/timeout"
  rescue LoadError
    require "timeout"
    Gem::Timeout = Timeout
  end
end
PK*J[I���
�
?share/gems/gems/bundler-2.6.7/lib/bundler/stub_specification.rbnu�[���# frozen_string_literal: true

module Bundler
  class StubSpecification < RemoteSpecification
    def self.from_stub(stub)
      return stub if stub.is_a?(Bundler::StubSpecification)
      spec = new(stub.name, stub.version, stub.platform, nil)
      spec.stub = stub
      spec
    end

    def insecurely_materialized?
      false
    end

    attr_reader :checksum
    attr_accessor :stub, :ignored

    def source=(source)
      super
      # Stub has no concept of source, which means that extension_dir may be wrong
      # This is the case for git-based gems. So, instead manually assign the extension dir
      return unless source.respond_to?(:extension_dir_name)
      unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
      path = File.join(stub.extensions_dir, unique_extension_dir)
      stub.extension_dir = File.expand_path(path)
    end

    def to_yaml
      _remote_specification.to_yaml
    end

    # @!group Stub Delegates

    def ignored?
      return @ignored unless @ignored.nil?

      @ignored = missing_extensions?
      return false unless @ignored

      warn "Source #{source} is ignoring #{self} because it is missing extensions"

      true
    end

    def manually_installed?
      # This is for manually installed gems which are gems that were fixed in place after a
      # failed installation. Once the issue was resolved, the user then manually created
      # the gem specification using the instructions provided by `gem help install`
      installed_by_version == Gem::Version.new(0)
    end

    # This is defined directly to avoid having to loading the full spec
    def missing_extensions?
      return false if default_gem?
      return false if extensions.empty?
      return false if File.exist? gem_build_complete_path
      return false if manually_installed?

      true
    end

    def activated?
      stub.activated?
    end

    def activated=(activated)
      stub.instance_variable_set(:@activated, activated)
    end

    def extensions
      stub.extensions
    end

    def gem_build_complete_path
      stub.gem_build_complete_path
    end

    def default_gem?
      stub.default_gem?
    end

    def full_gem_path
      stub.full_gem_path
    end

    def full_gem_path=(path)
      stub.full_gem_path = path
    end

    def full_require_paths
      stub.full_require_paths
    end

    def require_paths
      stub.require_paths
    end

    def base_dir=(path)
      stub.base_dir = path
    end

    def load_paths
      full_require_paths
    end

    def loaded_from
      stub.loaded_from
    end

    def matches_for_glob(glob)
      stub.matches_for_glob(glob)
    end

    def raw_require_paths
      stub.raw_require_paths
    end

    def inspect
      "#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
    end

    private

    def _remote_specification
      @_remote_specification ||= begin
        rs = stub.to_spec
        if rs.equal?(self) # happens when to_spec gets the spec from Gem.loaded_specs
          rs = Gem::Specification.load(loaded_from)
          Bundler.rubygems.stub_set_spec(stub, rs)
        end

        unless rs
          raise GemspecError, "The gemspec for #{full_name} at #{loaded_from}" \
            " was missing or broken. Try running `gem pristine #{name} -v #{version}`" \
            " to fix the cached spec."
        end

        rs.source = source
        rs.base_dir = stub.base_dir

        rs
      end
    end
  end
end
PK*J[�D��sIsI5share/gems/gems/bundler-2.6.7/lib/bundler/resolver.rbnu�[���# frozen_string_literal: true

module Bundler
  #
  # This class implements the interface needed by PubGrub for resolution. It is
  # equivalent to the `PubGrub::BasicPackageSource` class provided by PubGrub by
  # default and used by the most simple PubGrub consumers.
  #
  class Resolver
    require_relative "vendored_pub_grub"
    require_relative "resolver/base"
    require_relative "resolver/candidate"
    require_relative "resolver/incompatibility"
    require_relative "resolver/root"
    require_relative "resolver/strategy"

    include GemHelpers

    def initialize(base, gem_version_promoter, most_specific_locked_platform = nil)
      @source_requirements = base.source_requirements
      @base = base
      @gem_version_promoter = gem_version_promoter
      @most_specific_locked_platform = most_specific_locked_platform
    end

    def start
      @requirements = @base.requirements
      @packages = @base.packages

      root, logger = setup_solver

      Bundler.ui.info "Resolving dependencies...", true

      solve_versions(root: root, logger: logger)
    end

    def setup_solver
      root = Resolver::Root.new(name_for_explicit_dependency_source)
      root_version = Resolver::Candidate.new(0)

      @all_specs = Hash.new do |specs, name|
        source = source_for(name)
        matches = source.specs.search(name)

        # Don't bother to check for circular deps when no dependency API are
        # available, since it's too slow to be usable. That edge case won't work
        # but resolution other than that should work fine and reasonably fast.
        if source.respond_to?(:dependency_api_available?) && source.dependency_api_available?
          matches = filter_invalid_self_dependencies(matches, name)
        end

        specs[name] = matches.sort_by {|s| [s.version, s.platform.to_s] }
      end

      @all_versions = Hash.new do |candidates, package|
        candidates[package] = all_versions_for(package)
      end

      @sorted_versions = Hash.new do |candidates, package|
        candidates[package] = filtered_versions_for(package).sort
      end

      @sorted_versions[root] = [root_version]

      root_dependencies = prepare_dependencies(@requirements, @packages)

      @cached_dependencies = Hash.new do |dependencies, package|
        dependencies[package] = Hash.new do |versions, version|
          versions[version] = to_dependency_hash(version.dependencies.reject {|d| d.name == package.name }, @packages)
        end
      end

      @cached_dependencies[root] = { root_version => root_dependencies }

      logger = Bundler::UI::Shell.new
      logger.level = debug? ? "debug" : "warn"

      [root, logger]
    end

    def solve_versions(root:, logger:)
      solver = PubGrub::VersionSolver.new(source: self, root: root, strategy: Strategy.new(self), logger: logger)
      result = solver.solve
      resolved_specs = result.flat_map {|package, version| version.to_specs(package, @most_specific_locked_platform) }
      SpecSet.new(resolved_specs).specs_with_additional_variants_from(@base.locked_specs)
    rescue PubGrub::SolveFailure => e
      incompatibility = e.incompatibility

      names_to_unlock, names_to_allow_prereleases_for, names_to_allow_remote_specs_for, extended_explanation = find_names_to_relax(incompatibility)

      names_to_relax = names_to_unlock + names_to_allow_prereleases_for + names_to_allow_remote_specs_for

      if names_to_relax.any?
        if names_to_unlock.any?
          Bundler.ui.debug "Found conflicts with locked dependencies. Will retry with #{names_to_unlock.join(", ")} unlocked...", true

          @base.unlock_names(names_to_unlock)
        end

        if names_to_allow_prereleases_for.any?
          Bundler.ui.debug "Found conflicts with dependencies with prereleases. Will retry considering prereleases for #{names_to_allow_prereleases_for.join(", ")}...", true

          @base.include_prereleases(names_to_allow_prereleases_for)
        end

        if names_to_allow_remote_specs_for.any?
          Bundler.ui.debug "Found conflicts with local versions of #{names_to_allow_remote_specs_for.join(", ")}. Will retry considering remote versions...", true

          @base.include_remote_specs(names_to_allow_remote_specs_for)
        end

        root, logger = setup_solver

        Bundler.ui.debug "Retrying resolution...", true
        retry
      end

      explanation = e.message

      if extended_explanation
        explanation << "\n\n"
        explanation << extended_explanation
      end

      raise SolveFailure.new(explanation)
    end

    def find_names_to_relax(incompatibility)
      names_to_unlock = []
      names_to_allow_prereleases_for = []
      names_to_allow_remote_specs_for = []
      extended_explanation = nil

      while incompatibility.conflict?
        cause = incompatibility.cause
        incompatibility = cause.incompatibility

        incompatibility.terms.each do |term|
          package = term.package
          name = package.name

          if base_requirements[name]
            names_to_unlock << name
          elsif package.ignores_prereleases? && @all_specs[name].any? {|s| s.version.prerelease? }
            names_to_allow_prereleases_for << name
          elsif package.prefer_local? && @all_specs[name].any? {|s| !s.is_a?(StubSpecification) }
            names_to_allow_remote_specs_for << name
          end

          no_versions_incompat = [cause.incompatibility, cause.satisfier].find {|incompat| incompat.cause.is_a?(PubGrub::Incompatibility::NoVersions) }
          next unless no_versions_incompat

          extended_explanation = no_versions_incompat.extended_explanation
        end
      end

      [names_to_unlock.uniq, names_to_allow_prereleases_for.uniq, names_to_allow_remote_specs_for.uniq, extended_explanation]
    end

    def parse_dependency(package, dependency)
      range = if repository_for(package).is_a?(Source::Gemspec)
        PubGrub::VersionRange.any
      else
        requirement_to_range(dependency)
      end

      PubGrub::VersionConstraint.new(package, range: range)
    end

    def versions_for(package, range=VersionRange.any)
      range.select_versions(@sorted_versions[package])
    end

    def no_versions_incompatibility_for(package, unsatisfied_term)
      cause = PubGrub::Incompatibility::NoVersions.new(unsatisfied_term)
      name = package.name
      constraint = unsatisfied_term.constraint
      constraint_string = constraint.constraint_string
      requirements = constraint_string.split(" OR ").map {|req| Gem::Requirement.new(req.split(",")) }

      if name == "bundler" && bundler_pinned_to_current_version?
        custom_explanation = "the current Bundler version (#{Bundler::VERSION}) does not satisfy #{constraint}"
        extended_explanation = bundler_not_found_message(requirements)
      else
        specs_matching_other_platforms = filter_matching_specs(@all_specs[name], requirements)

        platforms_explanation = specs_matching_other_platforms.any? ? " for any resolution platforms (#{package.platforms.join(", ")})" : ""
        custom_explanation = "#{constraint} could not be found in #{repository_for(package)}#{platforms_explanation}"

        label = "#{name} (#{constraint_string})"
        extended_explanation = other_specs_matching_message(specs_matching_other_platforms, label) if specs_matching_other_platforms.any?
      end

      Incompatibility.new([unsatisfied_term], cause: cause, custom_explanation: custom_explanation, extended_explanation: extended_explanation)
    end

    def debug?
      ENV["BUNDLER_DEBUG_RESOLVER"] ||
        ENV["BUNDLER_DEBUG_RESOLVER_TREE"] ||
        ENV["DEBUG_RESOLVER"] ||
        ENV["DEBUG_RESOLVER_TREE"] ||
        false
    end

    def incompatibilities_for(package, version)
      package_deps = @cached_dependencies[package]
      sorted_versions = @sorted_versions[package]
      package_deps[version].map do |dep_package, dep_constraint|
        low = high = sorted_versions.index(version)

        # find version low such that all >= low share the same dep
        while low > 0 && package_deps[sorted_versions[low - 1]][dep_package] == dep_constraint
          low -= 1
        end
        low =
          if low == 0
            nil
          else
            sorted_versions[low]
          end

        # find version high such that all < high share the same dep
        while high < sorted_versions.length && package_deps[sorted_versions[high]][dep_package] == dep_constraint
          high += 1
        end
        high =
          if high == sorted_versions.length
            nil
          else
            sorted_versions[high]
          end

        range = PubGrub::VersionRange.new(min: low, max: high, include_min: !low.nil?)

        self_constraint = PubGrub::VersionConstraint.new(package, range: range)

        dep_term = PubGrub::Term.new(dep_constraint, false)
        self_term = PubGrub::Term.new(self_constraint, true)

        custom_explanation = if dep_package.meta? && package.root?
          "current #{dep_package} version is #{dep_constraint.constraint_string}"
        end

        PubGrub::Incompatibility.new([self_term, dep_term], cause: :dependency, custom_explanation: custom_explanation)
      end
    end

    def all_versions_for(package)
      name = package.name
      results = (@base[name] + filter_specs(@all_specs[name], package)).uniq {|spec| [spec.version.hash, spec.platform] }

      if name == "bundler" && !bundler_pinned_to_current_version?
        bundler_spec = Gem.loaded_specs["bundler"]
        results << bundler_spec if bundler_spec
      end

      locked_requirement = base_requirements[name]
      results = filter_matching_specs(results, locked_requirement) if locked_requirement

      results.group_by(&:version).reduce([]) do |groups, (version, specs)|
        platform_specs = package.platform_specs(specs)

        # If package is a top-level dependency,
        #   candidate is only valid if there are matching versions for all resolution platforms.
        #
        # If package is not a top-level deependency,
        #   then it's not necessary that it has matching versions for all platforms, since it may have been introduced only as
        #   a dependency for a platform specific variant, so it will only need to have a valid version for that platform.
        #
        if package.top_level?
          next groups if platform_specs.any?(&:empty?)
        else
          next groups if platform_specs.all?(&:empty?)
        end

        ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
        ruby_group = Resolver::SpecGroup.new(ruby_specs)

        unless ruby_group.empty?
          platform_specs.each do |s|
            ruby_group.merge(Resolver::SpecGroup.new(s))
          end

          groups << Resolver::Candidate.new(version, group: ruby_group, priority: -1)
          next groups if package.force_ruby_platform?
        end

        platform_group = Resolver::SpecGroup.new(platform_specs.flatten.uniq)
        next groups if platform_group == ruby_group

        groups << Resolver::Candidate.new(version, group: platform_group, priority: 1)

        groups
      end
    end

    def source_for(name)
      @source_requirements[name] || @source_requirements[:default]
    end

    def default_bundler_source
      @source_requirements[:default_bundler]
    end

    def bundler_pinned_to_current_version?
      !default_bundler_source.nil?
    end

    def name_for_explicit_dependency_source
      Bundler.default_gemfile.basename.to_s
    rescue StandardError
      "Gemfile"
    end

    def raise_not_found!(package)
      name = package.name
      source = source_for(name)
      specs = @all_specs[name]
      matching_part = name
      requirement_label = SharedHelpers.pretty_dependency(package.dependency)
      cache_message = begin
                          " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist?
                        rescue GemfileNotFound
                          nil
                        end
      specs_matching_requirement = filter_matching_specs(specs, package.dependency.requirement)

      not_found_message = if specs_matching_requirement.any?
        specs = specs_matching_requirement
        matching_part = requirement_label
        platforms = package.platforms

        if platforms.size == 1
          "Could not find gem '#{requirement_label}' with platform '#{platforms.first}'"
        else
          "Could not find gems matching '#{requirement_label}' valid for all resolution platforms (#{platforms.join(", ")})"
        end
      else
        "Could not find gem '#{requirement_label}'"
      end

      message = String.new("#{not_found_message} in #{source}#{cache_message}.\n")

      if specs.any?
        message << "\n#{other_specs_matching_message(specs, matching_part)}"
      end

      raise GemNotFound, message
    end

    def sort_versions_by_preferred(package, versions)
      @gem_version_promoter.sort_versions(package, versions)
    end

    private

    def filtered_versions_for(package)
      @gem_version_promoter.filter_versions(package, @all_versions[package])
    end

    def raise_all_versions_filtered_out!(package)
      level = @gem_version_promoter.level
      name = package.name
      locked_version = package.locked_version
      requirement = package.dependency

      raise GemNotFound,
        "#{name} is locked to #{locked_version}, while Gemfile is requesting #{requirement}. " \
        "--strict --#{level} was specified, but there are no #{level} level upgrades from #{locked_version} satisfying #{requirement}, so version solving has failed"
    end

    def filter_matching_specs(specs, requirements)
      Array(requirements).flat_map do |requirement|
        specs.select {| spec| requirement_satisfied_by?(requirement, spec) }
      end
    end

    def filter_specs(specs, package)
      filter_remote_specs(filter_prereleases(specs, package), package)
    end

    def filter_prereleases(specs, package)
      return specs unless package.ignores_prereleases? && specs.size > 1

      specs.reject {|s| s.version.prerelease? }
    end

    def filter_remote_specs(specs, package)
      if package.prefer_local?
        local_specs = specs.select {|s| s.is_a?(StubSpecification) }

        if local_specs.empty?
          package.consider_remote_versions!
          specs
        else
          local_specs
        end
      else
        specs
      end
    end

    # Ignore versions that depend on themselves incorrectly
    def filter_invalid_self_dependencies(specs, name)
      specs.reject do |s|
        s.dependencies.any? {|d| d.name == name && !d.requirement.satisfied_by?(s.version) }
      end
    end

    def requirement_satisfied_by?(requirement, spec)
      requirement.satisfied_by?(spec.version) || spec.source.is_a?(Source::Gemspec)
    end

    def repository_for(package)
      source_for(package.name)
    end

    def base_requirements
      @base.base_requirements
    end

    def prepare_dependencies(requirements, packages)
      to_dependency_hash(requirements, packages).filter_map do |dep_package, dep_constraint|
        name = dep_package.name

        next [dep_package, dep_constraint] if name == "bundler"

        dep_range = dep_constraint.range
        versions = versions_for(dep_package, dep_range)
        if versions.empty?
          if dep_package.ignores_prereleases? || dep_package.prefer_local?
            @all_versions.delete(dep_package)
            @sorted_versions.delete(dep_package)
          end
          dep_package.consider_prereleases! if dep_package.ignores_prereleases?
          dep_package.consider_remote_versions! if dep_package.prefer_local?
          versions = versions_for(dep_package, dep_range)
        end

        if versions.empty? && select_all_versions(dep_package, dep_range).any?
          raise_all_versions_filtered_out!(dep_package)
        end

        next [dep_package, dep_constraint] unless versions.empty?

        next unless dep_package.current_platform?

        raise_not_found!(dep_package)
      end.to_h
    end

    def select_all_versions(package, range)
      range.select_versions(@all_versions[package])
    end

    def other_specs_matching_message(specs, requirement)
      message = String.new("The source contains the following gems matching '#{requirement}':\n")
      message << specs.map {|s| "  * #{s.full_name}" }.join("\n")
      message
    end

    def requirement_to_range(requirement)
      ranges = requirement.requirements.map do |(op, version)|
        ver = Resolver::Candidate.new(version, priority: -1)
        platform_ver = Resolver::Candidate.new(version, priority: 1)

        case op
        when "~>"
          name = "~> #{ver}"
          bump = Resolver::Candidate.new(version.bump.to_s + ".A")
          PubGrub::VersionRange.new(name: name, min: ver, max: bump, include_min: true)
        when ">"
          PubGrub::VersionRange.new(min: platform_ver)
        when ">="
          PubGrub::VersionRange.new(min: ver, include_min: true)
        when "<"
          PubGrub::VersionRange.new(max: ver)
        when "<="
          PubGrub::VersionRange.new(max: platform_ver, include_max: true)
        when "="
          PubGrub::VersionRange.new(min: ver, max: platform_ver, include_min: true, include_max: true)
        when "!="
          PubGrub::VersionRange.new(min: ver, max: platform_ver, include_min: true, include_max: true).invert
        else
          raise "bad version specifier: #{op}"
        end
      end

      ranges.inject(&:intersect)
    end

    def to_dependency_hash(dependencies, packages)
      dependencies.inject({}) do |deps, dep|
        package = packages[dep.name]

        current_req = deps[package]
        new_req = parse_dependency(package, dep.requirement)

        deps[package] = if current_req
          current_req.intersect(new_req)
        else
          new_req
        end

        deps
      end
    end

    def bundler_not_found_message(conflict_dependencies)
      candidate_specs = filter_matching_specs(default_bundler_source.specs.search("bundler"), conflict_dependencies)

      if candidate_specs.any?
        target_version = candidate_specs.last.version
        new_command = [File.basename($PROGRAM_NAME), "_#{target_version}_", *ARGV].join(" ")
        "Your bundle requires a different version of Bundler than the one you're running.\n" \
        "Install the necessary version with `gem install bundler:#{target_version}` and rerun bundler using `#{new_command}`\n"
      else
        "Your bundle requires a different version of Bundler than the one you're running, and that version could not be found.\n"
      end
    end
  end
end
PK*J[���Tqq2share/gems/gems/bundler-2.6.7/lib/bundler/setup.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"

if Bundler::SharedHelpers.in_bundle?
  require_relative "../bundler"

  # autoswitch to locked Bundler version if available
  Bundler.auto_switch

  # try to auto_install first before we get to the `Bundler.ui.silence`, so user knows what is happening
  Bundler.auto_install

  if STDOUT.tty? || ENV["BUNDLER_FORCE_TTY"]
    begin
      Bundler.ui.silence { Bundler.setup }
    rescue Bundler::BundlerError => e
      Bundler.ui.error e.message
      Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
      if e.is_a?(Bundler::GemNotFound)
        default_bundle = Gem.bin_path("bundler", "bundle")
        current_bundle = Bundler::SharedHelpers.bundle_bin_path
        suggested_bundle = default_bundle == current_bundle ? "bundle" : current_bundle
        suggested_cmd = "#{suggested_bundle} install"
        original_gemfile = Bundler.original_env["BUNDLE_GEMFILE"]
        suggested_cmd += " --gemfile #{original_gemfile}" if original_gemfile
        Bundler.ui.warn "Run `#{suggested_cmd}` to install missing gems."
      end
      exit e.status_code
    end
  else
    Bundler.ui.silence { Bundler.setup }
  end

  # We might be in the middle of shelling out to rubygems
  # (RUBYOPT=-rbundler/setup), so we need to give rubygems the opportunity of
  # not being silent.
  Gem::DefaultUserInteraction.ui = nil
end
PK*J[b�  ;share/gems/gems/bundler-2.6.7/lib/bundler/force_platform.rbnu�[���# frozen_string_literal: true

module Bundler
  module ForcePlatform
    # The `:force_ruby_platform` value used by dependencies for resolution, and
    # by locked specifications for materialization is `false` by default, except
    # for TruffleRuby. TruffleRuby generally needs to force the RUBY platform
    # variant unless the name is explicitly allowlisted.

    def default_force_ruby_platform
      return false unless RUBY_ENGINE == "truffleruby"

      !Gem::Platform::REUSE_AS_BINARY_ON_TRUFFLERUBY.include?(name)
    end
  end
end
PK*J[0�ee?share/gems/gems/bundler-2.6.7/lib/bundler/vendored_fileutils.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/fileutils/lib/fileutils"
PK*J[>��^��Bshare/gems/gems/bundler-2.6.7/lib/bundler/vendored_securerandom.rbnu�[���# frozen_string_literal: true

# Use RubyGems vendored copy when available. Otherwise fallback to Bundler
# vendored copy. The vendored copy in Bundler can be removed once support for
# RubyGems 3.5.18 is dropped.

begin
  require "rubygems/vendored_securerandom"
rescue LoadError
  require_relative "vendor/securerandom/lib/securerandom"
  Gem::SecureRandom = Bundler::SecureRandom
end
PK*J[���__Bshare/gems/gems/bundler-2.6.7/lib/bundler/match_remote_metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  module FetchMetadata
    # A fallback is included because the original version of the specification
    # API didn't include that field, so some marshalled specs in the index have it
    # set to +nil+.
    def matches_current_ruby?
      @required_ruby_version ||= _remote_specification.required_ruby_version || Gem::Requirement.default

      super
    end

    def matches_current_rubygems?
      # A fallback is included because the original version of the specification
      # API didn't include that field, so some marshalled specs in the index have it
      # set to +nil+.
      @required_rubygems_version ||= _remote_specification.required_rubygems_version || Gem::Requirement.default

      super
    end
  end

  module MatchRemoteMetadata
    include MatchMetadata

    prepend FetchMetadata
  end
end
PK*J[ov���?share/gems/gems/bundler-2.6.7/lib/bundler/lazy_specification.rbnu�[���# frozen_string_literal: true

require_relative "force_platform"

module Bundler
  class LazySpecification
    include MatchMetadata
    include MatchPlatform
    include ForcePlatform

    attr_reader :name, :version, :platform, :materialization
    attr_accessor :source, :remote, :force_ruby_platform, :dependencies, :required_ruby_version, :required_rubygems_version

    #
    # For backwards compatibility with existing lockfiles, if the most specific
    # locked platform is not a specific platform like x86_64-linux or
    # universal-java-11, then we keep the previous behaviour of resolving the
    # best platform variant at materiliazation time. For previous bundler
    # versions (before 2.2.0) this was always the case (except when the lockfile
    # only included non-ruby platforms), but we're also keeping this behaviour
    # on newer bundlers unless users generate the lockfile from scratch or
    # explicitly add a more specific platform.
    #
    attr_accessor :most_specific_locked_platform

    alias_method :runtime_dependencies, :dependencies

    def self.from_spec(s)
      lazy_spec = new(s.name, s.version, s.platform, s.source)
      lazy_spec.dependencies = s.runtime_dependencies
      lazy_spec.required_ruby_version = s.required_ruby_version
      lazy_spec.required_rubygems_version = s.required_rubygems_version
      lazy_spec
    end

    def initialize(name, version, platform, source = nil)
      @name          = name
      @version       = version
      @dependencies  = []
      @required_ruby_version = Gem::Requirement.default
      @required_rubygems_version = Gem::Requirement.default
      @platform = platform || Gem::Platform::RUBY

      @original_source = source
      @source = source

      @force_ruby_platform = default_force_ruby_platform
      @most_specific_locked_platform = nil
      @materialization = nil
    end

    def missing?
      @materialization == self
    end

    def incomplete?
      @materialization.nil?
    end

    def source_changed?
      @original_source != source
    end

    def full_name
      @full_name ||= if platform == Gem::Platform::RUBY
        "#{@name}-#{@version}"
      else
        "#{@name}-#{@version}-#{platform}"
      end
    end

    def lock_name
      @lock_name ||= name_tuple.lock_name
    end

    def name_tuple
      Gem::NameTuple.new(@name, @version, @platform)
    end

    def ==(other)
      full_name == other.full_name
    end

    def eql?(other)
      full_name.eql?(other.full_name)
    end

    def hash
      full_name.hash
    end

    ##
    # Does this locked specification satisfy +dependency+?
    #
    # NOTE: Rubygems default requirement is ">= 0", which doesn't match
    # prereleases of 0 versions, like "0.0.0.dev" or "0.0.0.SNAPSHOT". However,
    # bundler users expect those to work. We need to make sure that Gemfile
    # dependencies without explicit requirements (which use ">= 0" under the
    # hood by default) are still valid for locked specs using this kind of
    # versions. The method implements an ad-hoc fix for that. A better solution
    # might be to change default rubygems requirement of dependencies to be ">=
    # 0.A" but that's a major refactoring likely to break things. Hopefully we
    # can attempt it in the future.
    #

    def satisfies?(dependency)
      effective_requirement = dependency.requirement == Gem::Requirement.default ? Gem::Requirement.new(">= 0.A") : dependency.requirement

      @name == dependency.name && effective_requirement.satisfied_by?(Gem::Version.new(@version))
    end

    def to_lock
      out = String.new
      out << "    #{lock_name}\n"

      dependencies.sort_by(&:to_s).uniq.each do |dep|
        next if dep.type == :development
        out << "    #{dep.to_lock}\n"
      end

      out
    end

    def materialize_for_cache
      source.remote!

      materialize(self, &:first)
    end

    def materialized_for_installation
      @materialization = materialize_for_installation

      self unless incomplete?
    end

    def materialize_for_installation
      source.local!

      if use_exact_resolved_specifications?
        materialize(self) do |matching_specs|
          choose_compatible(matching_specs)
        end
      else
        materialize([name, version]) do |matching_specs|
          target_platform = source.is_a?(Source::Path) ? platform : local_platform

          installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)

          specification = choose_compatible(installable_candidates, fallback_to_non_installable: false)
          return specification unless specification.nil?

          if target_platform != platform
            installable_candidates = GemHelpers.select_best_platform_match(matching_specs, platform)
          end

          choose_compatible(installable_candidates)
        end
      end
    end

    def inspect
      "#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
    end

    def to_s
      lock_name
    end

    def git_version
      return unless source.is_a?(Bundler::Source::Git)
      " #{source.revision[0..6]}"
    end

    def force_ruby_platform!
      @force_ruby_platform = true
    end

    def replace_source_with!(gemfile_source)
      return unless gemfile_source.can_lock?(self)

      @source = gemfile_source

      true
    end

    private

    def use_exact_resolved_specifications?
      !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
    end

    def ruby_platform_materializes_to_ruby_platform?
      generic_platform = generic_local_platform == Gem::Platform::JAVA ? Gem::Platform::JAVA : Gem::Platform::RUBY

      (most_specific_locked_platform != generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
    end

    def materialize(query)
      matching_specs = source.specs.search(query)
      return self if matching_specs.empty?

      yield matching_specs
    end

    # If in frozen mode, we fallback to a non-installable candidate because by
    # doing this we avoid re-resolving and potentially end up changing the
    # lockfile, which is not allowed. In that case, we will give a proper error
    # about the mismatch higher up the stack, right before trying to install the
    # bad gem.
    def choose_compatible(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
      search = candidates.reverse.find do |spec|
        spec.is_a?(StubSpecification) || spec.matches_current_metadata?
      end
      if search.nil? && fallback_to_non_installable
        search = candidates.last
      elsif search && search.full_name == full_name
        # We don't validate locally installed dependencies but accept what's in
        # the lockfile instead for performance, since loading locally installed
        # dependencies would mean evaluating all gemspecs, which would affect
        # `bundler/setup` performance
        if search.is_a?(StubSpecification)
          search.dependencies = dependencies
        else
          if !source.is_a?(Source::Path) && search.runtime_dependencies.sort != dependencies.sort
            raise IncorrectLockfileDependencies.new(self)
          end

          search.locked_platform = platform if search.instance_of?(RemoteSpecification) || search.instance_of?(EndpointSpecification)
        end
      end
      search
    end
  end
end
PK*J[7|�/�/3share/gems/gems/bundler-2.6.7/lib/bundler/plugin.rbnu�[���# frozen_string_literal: true

require_relative "plugin/api"

module Bundler
  module Plugin
    autoload :DSL,        File.expand_path("plugin/dsl", __dir__)
    autoload :Events,     File.expand_path("plugin/events", __dir__)
    autoload :Index,      File.expand_path("plugin/index", __dir__)
    autoload :Installer,  File.expand_path("plugin/installer", __dir__)
    autoload :SourceList, File.expand_path("plugin/source_list", __dir__)

    class MalformattedPlugin < PluginError; end
    class UndefinedCommandError < PluginError; end
    class UnknownSourceError < PluginError; end
    class PluginInstallError < PluginError; end

    PLUGIN_FILE_NAME = "plugins.rb"

    module_function

    def reset!
      instance_variables.each {|i| remove_instance_variable(i) }

      @sources = {}
      @commands = {}
      @hooks_by_event = Hash.new {|h, k| h[k] = [] }
      @loaded_plugin_names = []
    end

    reset!

    # Installs a new plugin by the given name
    #
    # @param [Array<String>] names the name of plugin to be installed
    # @param [Hash] options various parameters as described in description.
    #               Refer to cli/plugin for available options
    def install(names, options)
      raise InvalidOption, "You cannot specify `--branch` and `--ref` at the same time." if options["branch"] && options["ref"]

      specs = Installer.new.install(names, options)

      save_plugins names, specs
    rescue PluginError
      specs_to_delete = specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }
      specs_to_delete.each_value {|spec| Bundler.rm_rf(spec.full_gem_path) }

      raise
    end

    # Uninstalls plugins by the given names
    #
    # @param [Array<String>] names the names of plugins to be uninstalled
    def uninstall(names, options)
      if names.empty? && !options[:all]
        Bundler.ui.error "No plugins to uninstall. Specify at least 1 plugin to uninstall.\n"\
          "Use --all option to uninstall all the installed plugins."
        return
      end

      names = index.installed_plugins if options[:all]
      if names.any?
        names.each do |name|
          if index.installed?(name)
            path = index.plugin_path(name).to_s
            Bundler.rm_rf(path) if index.installed_in_plugin_root?(name)
            index.unregister_plugin(name)
            Bundler.ui.info "Uninstalled plugin #{name}"
          else
            Bundler.ui.error "Plugin #{name} is not installed \n"
          end
        end
      else
        Bundler.ui.info "No plugins installed"
      end
    end

    # List installed plugins and commands
    #
    def list
      installed_plugins = index.installed_plugins
      if installed_plugins.any?
        output = String.new
        installed_plugins.each do |plugin|
          output << "#{plugin}\n"
          output << "-----\n"
          index.plugin_commands(plugin).each do |command|
            output << "  #{command}\n"
          end
          output << "\n"
        end
      else
        output = "No plugins installed"
      end
      Bundler.ui.info output
    end

    # Evaluates the Gemfile with a limited DSL and installs the plugins
    # specified by plugin method
    #
    # @param [Pathname] gemfile path
    # @param [Proc] block that can be evaluated for (inline) Gemfile
    def gemfile_install(gemfile = nil, &inline)
      Bundler.settings.temporary(frozen: false, deployment: false) do
        builder = DSL.new
        if block_given?
          builder.instance_eval(&inline)
        else
          builder.eval_gemfile(gemfile)
        end
        builder.check_primary_source_safety
        definition = builder.to_definition(nil, true)

        return if definition.dependencies.empty?

        plugins = definition.dependencies.map(&:name).reject {|p| index.installed? p }
        installed_specs = Installer.new.install_definition(definition)

        save_plugins plugins, installed_specs, builder.inferred_plugins
      end
    rescue RuntimeError => e
      unless e.is_a?(GemfileError)
        Bundler.ui.error "Failed to install plugin: #{e.message}\n  #{e.backtrace[0]}"
      end
      raise
    end

    # The index object used to store the details about the plugin
    def index
      @index ||= Index.new
    end

    # The directory root for all plugin related data
    #
    # If run in an app, points to local root, in app_config_path
    # Otherwise, points to global root, in Bundler.user_bundle_path("plugin")
    def root
      @root ||= if SharedHelpers.in_bundle?
        local_root
      else
        global_root
      end
    end

    def local_root
      Bundler.app_config_path.join("plugin")
    end

    # The global directory root for all plugin related data
    def global_root
      Bundler.user_bundle_path("plugin")
    end

    # The cache directory for plugin stuffs
    def cache
      @cache ||= root.join("cache")
    end

    # To be called via the API to register to handle a command
    def add_command(command, cls)
      @commands[command] = cls
    end

    # Checks if any plugin handles the command
    def command?(command)
      !index.command_plugin(command).nil?
    end

    # To be called from Cli class to pass the command and argument to
    # appropriate plugin class
    def exec_command(command, args)
      raise UndefinedCommandError, "Command `#{command}` not found" unless command? command

      load_plugin index.command_plugin(command) unless @commands.key? command

      @commands[command].new.exec(command, args)
    end

    # To be called via the API to register to handle a source plugin
    def add_source(source, cls)
      @sources[source] = cls
    end

    # Checks if any plugin declares the source
    def source?(name)
      !index.source_plugin(name.to_s).nil?
    end

    # @return [Class] that handles the source. The class includes API::Source
    def source(name)
      raise UnknownSourceError, "Source #{name} not found" unless source? name

      load_plugin(index.source_plugin(name)) unless @sources.key? name

      @sources[name]
    end

    # @param [Hash] The options that are present in the lockfile
    # @return [API::Source] the instance of the class that handles the source
    #                       type passed in locked_opts
    def from_lock(locked_opts)
      src = source(locked_opts["type"])

      src.new(locked_opts.merge("uri" => locked_opts["remote"]))
    end

    # To be called via the API to register a hooks and corresponding block that
    # will be called to handle the hook
    def add_hook(event, &block)
      unless Events.defined_event?(event)
        raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
      end
      @hooks_by_event[event.to_s] << block
    end

    # Runs all the hooks that are registered for the passed event
    #
    # It passes the passed arguments and block to the block registered with
    # the api.
    #
    # @param [String] event
    def hook(event, *args, &arg_blk)
      return unless Bundler.feature_flag.plugins?
      unless Events.defined_event?(event)
        raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
      end

      plugins = index.hook_plugins(event)
      return unless plugins.any?

      plugins.each {|name| load_plugin(name) }

      @hooks_by_event[event].each {|blk| blk.call(*args, &arg_blk) }
    end

    # currently only intended for specs
    #
    # @return [String, nil] installed path
    def installed?(plugin)
      Index.new.installed?(plugin)
    end

    # @return [true, false] whether the plugin is loaded
    def loaded?(plugin)
      @loaded_plugin_names.include?(plugin)
    end

    # Post installation processing and registering with index
    #
    # @param [Array<String>] plugins list to be installed
    # @param [Hash] specs of plugins mapped to installation path (currently they
    #               contain all the installed specs, including plugins)
    # @param [Array<String>] names of inferred source plugins that can be ignored
    def save_plugins(plugins, specs, optional_plugins = [])
      plugins.each do |name|
        next if index.installed?(name)

        spec = specs[name]

        save_plugin(name, spec, optional_plugins.include?(name))
      end
    end

    # Checks if the gem is good to be a plugin
    #
    # At present it only checks whether it contains plugins.rb file
    #
    # @param [Pathname] plugin_path the path plugin is installed at
    # @raise [MalformattedPlugin] if plugins.rb file is not found
    def validate_plugin!(plugin_path)
      plugin_file = plugin_path.join(PLUGIN_FILE_NAME)
      raise MalformattedPlugin, "#{PLUGIN_FILE_NAME} was not found in the plugin." unless plugin_file.file?
    end

    # Validates and registers a plugin.
    #
    # @param [String] name the name of the plugin
    # @param [Specification] spec of installed plugin
    # @param [Boolean] optional_plugin, removed if there is conflict with any
    #                     other plugin (used for default source plugins)
    #
    # @raise [PluginInstallError] if validation or registration raises any error
    def save_plugin(name, spec, optional_plugin = false)
      validate_plugin! Pathname.new(spec.full_gem_path)
      installed = register_plugin(name, spec, optional_plugin)
      Bundler.ui.info "Installed plugin #{name}" if installed
    rescue PluginError => e
      raise PluginInstallError, "Failed to install plugin `#{spec.name}`, due to #{e.class} (#{e.message})"
    end

    # Runs the plugins.rb file in an isolated namespace, records the plugin
    # actions it registers for and then passes the data to index to be stored.
    #
    # @param [String] name the name of the plugin
    # @param [Specification] spec of installed plugin
    # @param [Boolean] optional_plugin, removed if there is conflict with any
    #                     other plugin (used for default source plugins)
    #
    # @raise [MalformattedPlugin] if plugins.rb raises any error
    def register_plugin(name, spec, optional_plugin = false)
      commands = @commands
      sources = @sources
      hooks = @hooks_by_event

      @commands = {}
      @sources = {}
      @hooks_by_event = Hash.new {|h, k| h[k] = [] }

      load_paths = spec.load_paths
      Gem.add_to_load_path(*load_paths)
      path = Pathname.new spec.full_gem_path

      begin
        load path.join(PLUGIN_FILE_NAME), true
      rescue StandardError => e
        raise MalformattedPlugin, "#{e.class}: #{e.message}"
      end

      if optional_plugin && @sources.keys.any? {|s| source? s }
        Bundler.rm_rf(path)
        false
      else
        index.register_plugin(name, path.to_s, load_paths, @commands.keys,
          @sources.keys, @hooks_by_event.keys)
        true
      end
    ensure
      @commands = commands
      @sources = sources
      @hooks_by_event = hooks
    end

    # Executes the plugins.rb file
    #
    # @param [String] name of the plugin
    def load_plugin(name)
      return unless name && !name.empty?
      return if loaded?(name)

      # Need to ensure before this that plugin root where the rest of gems
      # are installed to be on load path to support plugin deps. Currently not
      # done to avoid conflicts
      path = index.plugin_path(name)

      paths = index.load_paths(name)
      invalid_paths = paths.reject {|p| File.directory?(p) }

      if invalid_paths.any?
        Bundler.ui.warn <<~MESSAGE
          The following plugin paths don't exist: #{invalid_paths.join(", ")}.

          This can happen if the plugin was installed with a different version of Ruby that has since been uninstalled.

          If you would like to reinstall the plugin, run:

          bundler plugin uninstall #{name} && bundler plugin install #{name}

          Continuing without installing plugin #{name}.
        MESSAGE

        return
      end

      Gem.add_to_load_path(*paths)

      load path.join(PLUGIN_FILE_NAME)

      @loaded_plugin_names << name
    rescue RuntimeError => e
      Bundler.ui.error "Failed loading plugin #{name}: #{e.message}"
      raise
    end

    class << self
      private :load_plugin, :register_plugin, :save_plugins, :validate_plugin!
    end
  end
end
PK*J[Iwy��	�	5share/gems/gems/bundler-2.6.7/lib/bundler/ruby_dsl.rbnu�[���# frozen_string_literal: true

module Bundler
  module RubyDsl
    def ruby(*ruby_version)
      options = ruby_version.pop if ruby_version.last.is_a?(Hash)
      ruby_version.flatten!

      if options
        patchlevel = options[:patchlevel]
        engine = options[:engine]
        engine_version = options[:engine_version]

        raise GemfileError, "Please define :engine_version" if engine && engine_version.nil?
        raise GemfileError, "Please define :engine" if engine_version && engine.nil?

        if options[:file]
          raise GemfileError, "Do not pass version argument when using :file option" unless ruby_version.empty?
          ruby_version << normalize_ruby_file(options[:file])
        end

        if engine == "ruby" && engine_version && ruby_version != Array(engine_version)
          raise GemfileEvalError, "ruby_version must match the :engine_version for MRI"
        end
      end

      @ruby_version = RubyVersion.new(ruby_version, patchlevel, engine, engine_version)
    end

    # Support the various file formats found in .ruby-version files.
    #
    #     3.2.2
    #     ruby-3.2.2
    #
    # Also supports .tool-versions files for asdf. Lines not starting with "ruby" are ignored.
    #
    #     ruby 2.5.1 # comment is ignored
    #     ruby   2.5.1# close comment and extra spaces doesn't confuse
    #
    # Intentionally does not support `3.2.1@gemset` since rvm recommends using .ruby-gemset instead
    #
    # Loads the file relative to the dirname of the Gemfile itself.
    def normalize_ruby_file(filename)
      file_content = Bundler.read_file(gemfile.dirname.join(filename))
      # match "ruby-3.2.2", ruby = "3.2.2" or "ruby   3.2.2" capturing version string up to the first space or comment
      if /^                    # Start of line
         ruby                  # Literal "ruby"
         [\s-]*                # Optional whitespace or hyphens (for "ruby-3.2.2" format)
         (?:=\s*)?             # Optional equals sign with whitespace (for ruby = "3.2.2" format)
         "?                    # Optional opening quote
         (                     # Start capturing group
           [^\s#"]+            # One or more chars that aren't spaces, #, or quotes
         )                     # End capturing group
         "?                    # Optional closing quote
         /x.match(file_content)
        $1
      else
        file_content.strip
      end
    end
  end
end
PK*J[h����7share/gems/gems/bundler-2.6.7/lib/bundler/deployment.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2, "Bundler no longer integrates with " \
  "Capistrano, but Capistrano provides its own integration with " \
  "Bundler via the capistrano-bundler gem. Use it instead."

module Bundler
  class Deployment
    def self.define_task(context, task_method = :task, opts = {})
      if defined?(Capistrano) && context.is_a?(Capistrano::Configuration)
        context_name = "capistrano"
        role_default = "{:except => {:no_release => true}}"
        error_type = ::Capistrano::CommandError
      else
        context_name = "vlad"
        role_default = "[:app]"
        error_type = ::Rake::CommandFailedError
      end

      roles = context.fetch(:bundle_roles, false)
      opts[:roles] = roles if roles

      context.send :namespace, :bundle do
        send :desc, <<-DESC
          Install the current Bundler environment. By default, gems will be \
          installed to the shared/bundle path. Gems in the development and \
          test group will not be installed. The install command is executed \
          with the --deployment and --quiet flags. If the bundle cmd cannot \
          be found then you can override the bundle_cmd variable to specify \
          which one it should use. The base path to the app is fetched from \
          the :latest_release variable. Set it for custom deploy layouts.

          You can override any of these defaults by setting the variables shown below.

          N.B. bundle_roles must be defined before you require 'bundler/#{context_name}' \
          in your deploy.rb file.

            set :bundle_gemfile,  "Gemfile"
            set :bundle_dir,      File.join(fetch(:shared_path), 'bundle')
            set :bundle_flags,    "--deployment --quiet"
            set :bundle_without,  [:development, :test]
            set :bundle_with,     [:mysql]
            set :bundle_cmd,      "bundle" # e.g. "/opt/ruby/bin/bundle"
            set :bundle_roles,    #{role_default} # e.g. [:app, :batch]
        DESC
        send task_method, :install, opts do
          bundle_cmd     = context.fetch(:bundle_cmd, "bundle")
          bundle_flags   = context.fetch(:bundle_flags, "--deployment --quiet")
          bundle_dir     = context.fetch(:bundle_dir, File.join(context.fetch(:shared_path), "bundle"))
          bundle_gemfile = context.fetch(:bundle_gemfile, "Gemfile")
          bundle_without = [*context.fetch(:bundle_without, [:development, :test])].compact
          bundle_with    = [*context.fetch(:bundle_with, [])].compact
          app_path = context.fetch(:latest_release)
          if app_path.to_s.empty?
            raise error_type.new("Cannot detect current release path - make sure you have deployed at least once.")
          end
          args = ["--gemfile #{File.join(app_path, bundle_gemfile)}"]
          args << "--path #{bundle_dir}" unless bundle_dir.to_s.empty?
          args << bundle_flags.to_s
          args << "--without #{bundle_without.join(" ")}" unless bundle_without.empty?
          args << "--with #{bundle_with.join(" ")}" unless bundle_with.empty?

          run "cd #{app_path} && #{bundle_cmd} install #{args.join(" ")}"
        end
      end
    end
  end
end
PK*J[�ku��<share/gems/gems/bundler-2.6.7/lib/bundler/source/metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Metadata < Source
      def specs
        @specs ||= Index.build do |idx|
          idx << Gem::Specification.new("Ruby\0", Bundler::RubyVersion.system.gem_version)
          idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
            s.required_rubygems_version = Gem::Requirement.default
          end

          if local_spec = Gem.loaded_specs["bundler"]
            raise CorruptBundlerInstallError.new(local_spec) if local_spec.version.to_s != Bundler::VERSION

            idx << local_spec
          else
            idx << Gem::Specification.new do |s|
              s.name     = "bundler"
              s.version  = VERSION
              s.license  = "MIT"
              s.platform = Gem::Platform::RUBY
              s.authors  = ["bundler team"]
              s.bindir   = "exe"
              s.homepage = "https://bundler.io"
              s.summary  = "The best way to manage your application's dependencies"
              s.executables = %w[bundle bundler]
              s.loaded_from = SharedHelpers.gemspec_path
            end
          end

          idx.each {|s| s.source = self }
        end
      end

      def options
        {}
      end

      def install(spec, _opts = {})
        print_using_message "Using #{version_message(spec)}"
        nil
      end

      def to_s
        "the local ruby installation"
      end

      def ==(other)
        self.class == other.class
      end
      alias_method :eql?, :==

      def hash
        self.class.hash
      end

      def version_message(spec)
        "#{spec.name} #{spec.version}"
      end
    end
  end
end
PK*J[8y-�0<0<<share/gems/gems/bundler-2.6.7/lib/bundler/source/rubygems.rbnu�[���# frozen_string_literal: true

require "rubygems/user_interaction"

module Bundler
  class Source
    class Rubygems < Source
      autoload :Remote, File.expand_path("rubygems/remote", __dir__)

      # Ask for X gems per API request
      API_REQUEST_SIZE = 50

      attr_accessor :remotes

      def initialize(options = {})
        @options = options
        @remotes = []
        @dependency_names = []
        @allow_remote = false
        @allow_cached = false
        @allow_local = options["allow_local"] || false
        @prefer_local = false
        @checksum_store = Checksum::Store.new

        Array(options["remotes"]).reverse_each {|r| add_remote(r) }

        @lockfile_remotes = @remotes if options["from_lockfile"]
      end

      def caches
        @caches ||= [cache_path, *Bundler.rubygems.gem_cache]
      end

      def prefer_local!
        @prefer_local = true
      end

      def local_only!
        @specs = nil
        @allow_local = true
        @allow_cached = false
        @allow_remote = false
      end

      def local_only?
        @allow_local && !@allow_remote
      end

      def local!
        return if @allow_local

        @specs = nil
        @allow_local = true
      end

      def remote!
        return if @allow_remote

        @specs = nil
        @allow_remote = true
      end

      def cached!
        return unless File.exist?(cache_path)

        return if @allow_cached

        @specs = nil
        @allow_cached = true
      end

      def hash
        @remotes.hash
      end

      def eql?(other)
        other.is_a?(Rubygems) && other.credless_remotes == credless_remotes
      end

      alias_method :==, :eql?

      def include?(o)
        o.is_a?(Rubygems) && (o.credless_remotes - credless_remotes).empty?
      end

      def multiple_remotes?
        @remotes.size > 1
      end

      def no_remotes?
        @remotes.size == 0
      end

      def can_lock?(spec)
        return super unless multiple_remotes?
        include?(spec.source)
      end

      def options
        { "remotes" => @remotes.map(&:to_s) }
      end

      def self.from_lock(options)
        options["remotes"] = Array(options.delete("remote")).reverse
        new(options.merge("from_lockfile" => true))
      end

      def to_lock
        out = String.new("GEM\n")
        lockfile_remotes.reverse_each do |remote|
          out << "  remote: #{remote}\n"
        end
        out << "  specs:\n"
      end

      def to_s
        if remotes.empty?
          "locally installed gems"
        elsif @allow_remote && @allow_cached && @allow_local
          "rubygems repository #{remote_names}, cached gems or installed locally"
        elsif @allow_remote && @allow_local
          "rubygems repository #{remote_names} or installed locally"
        elsif @allow_remote
          "rubygems repository #{remote_names}"
        elsif @allow_cached && @allow_local
          "cached gems or installed locally"
        else
          "locally installed gems"
        end
      end

      def identifier
        if remotes.empty?
          "locally installed gems"
        else
          "rubygems repository #{remote_names}"
        end
      end
      alias_method :name, :identifier
      alias_method :to_gemfile, :identifier

      def specs
        @specs ||= begin
          # remote_specs usually generates a way larger Index than the other
          # sources, and large_idx.merge! small_idx is way faster than
          # small_idx.merge! large_idx.
          index = @allow_remote ? remote_specs.dup : Index.new
          index.merge!(cached_specs) if @allow_cached
          index.merge!(installed_specs) if @allow_local

          if @allow_local
            if @prefer_local
              index.merge!(default_specs)
            else
              # complete with default specs, only if not already available in the
              # index through remote, cached, or installed specs
              index.use(default_specs)
            end
          end

          index
        end
      end

      def install(spec, options = {})
        if (spec.default_gem? && !cached_built_in_gem(spec, local: options[:local])) || (installed?(spec) && !options[:force])
          print_using_message "Using #{version_message(spec, options[:previous_spec])}"
          return nil # no post-install message
        end

        if spec.remote
          # Check for this spec from other sources
          uris = [spec.remote, *remotes_for_spec(spec)].map(&:anonymized_uri).uniq
          Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1
        end

        path = fetch_gem_if_possible(spec, options[:previous_spec])
        raise GemNotFound, "Could not find #{spec.file_name} for installation" unless path

        return if Bundler.settings[:no_install]

        install_path = rubygems_dir
        bin_path     = Bundler.system_bindir

        require_relative "../rubygems_gem_installer"

        installer = Bundler::RubyGemsGemInstaller.at(
          path,
          security_policy: Bundler.rubygems.security_policies[Bundler.settings["trust-policy"]],
          install_dir: install_path.to_s,
          bin_dir: bin_path.to_s,
          ignore_dependencies: true,
          wrappers: true,
          env_shebang: true,
          build_args: options[:build_args],
          bundler_extension_cache_path: extension_cache_path(spec)
        )

        if spec.remote
          s = begin
            installer.spec
          rescue Gem::Package::FormatError
            Bundler.rm_rf(path)
            raise
          rescue Gem::Security::Exception => e
            raise SecurityError,
             "The gem #{File.basename(path, ".gem")} can't be installed because " \
             "the security policy didn't allow it, with the message: #{e.message}"
          end

          spec.__swap__(s)
        end

        spec.source.checksum_store.register(spec, installer.gem_checksum)

        message = "Installing #{version_message(spec, options[:previous_spec])}"
        message += " with native extensions" if spec.extensions.any?
        Bundler.ui.confirm message

        installed_spec = installer.install

        spec.full_gem_path = installed_spec.full_gem_path
        spec.loaded_from = installed_spec.loaded_from
        spec.base_dir = installed_spec.base_dir

        spec.post_install_message
      end

      def cache(spec, custom_path = nil)
        cached_path = Bundler.settings[:cache_all_platforms] ? fetch_gem_if_possible(spec) : cached_gem(spec)
        raise GemNotFound, "Missing gem file '#{spec.file_name}'." unless cached_path
        return if File.dirname(cached_path) == Bundler.app_cache.to_s
        Bundler.ui.info "  * #{File.basename(cached_path)}"
        FileUtils.cp(cached_path, Bundler.app_cache(custom_path))
      rescue Errno::EACCES => e
        Bundler.ui.debug(e)
        raise InstallError, e.message
      end

      def cached_built_in_gem(spec, local: false)
        cached_path = cached_gem(spec)
        if cached_path.nil? && !local
          remote_spec = remote_specs.search(spec).first
          if remote_spec
            cached_path = fetch_gem(remote_spec)
            spec.remote = remote_spec.remote
          else
            Bundler.ui.warn "#{spec.full_name} is built in to Ruby, and can't be cached because your Gemfile doesn't have any sources that contain it."
          end
        end
        cached_path
      end

      def add_remote(source)
        uri = normalize_uri(source)
        @remotes.unshift(uri) unless @remotes.include?(uri)
      end

      def spec_names
        if dependency_api_available?
          remote_specs.spec_names
        else
          []
        end
      end

      def unmet_deps
        if dependency_api_available?
          remote_specs.unmet_dependency_names
        else
          []
        end
      end

      def remote_fetchers
        @remote_fetchers ||= remotes.to_h do |uri|
          remote = Source::Rubygems::Remote.new(uri)
          [remote, Bundler::Fetcher.new(remote)]
        end.freeze
      end

      def fetchers
        @fetchers ||= remote_fetchers.values.freeze
      end

      def double_check_for(unmet_dependency_names)
        return unless dependency_api_available?

        unmet_dependency_names = unmet_dependency_names.call
        unless unmet_dependency_names.nil?
          if api_fetchers.size <= 1
            # can't do this when there are multiple fetchers because then we might not fetch from _all_
            # of them
            unmet_dependency_names -= remote_specs.spec_names # avoid re-fetching things we've already gotten
          end
          return if unmet_dependency_names.empty?
        end

        Bundler.ui.debug "Double checking for #{unmet_dependency_names || "all specs (due to the size of the request)"} in #{self}"

        fetch_names(api_fetchers, unmet_dependency_names, remote_specs)

        specs.use remote_specs
      end

      def dependency_names_to_double_check
        names = []
        remote_specs.each do |spec|
          case spec
          when EndpointSpecification, Gem::Specification, StubSpecification, LazySpecification
            names.concat(spec.runtime_dependencies.map(&:name))
          when RemoteSpecification # from the full index
            return nil
          else
            raise "unhandled spec type (#{spec.inspect})"
          end
        end
        names
      end

      def dependency_api_available?
        @allow_remote && api_fetchers.any?
      end

      protected

      def remote_names
        remotes.map(&:to_s).join(", ")
      end

      def credless_remotes
        remotes.map(&method(:remove_auth))
      end

      def remotes_for_spec(spec)
        specs.search_all(spec.name).inject([]) do |uris, s|
          uris << s.remote if s.remote
          uris
        end
      end

      def cached_gem(spec)
        global_cache_path = download_cache_path(spec)
        caches << global_cache_path if global_cache_path

        possibilities = caches.map {|p| package_path(p, spec) }
        possibilities.find {|p| File.exist?(p) }
      end

      def package_path(cache_path, spec)
        "#{cache_path}/#{spec.file_name}"
      end

      def normalize_uri(uri)
        uri = URINormalizer.normalize_suffix(uri.to_s)
        require_relative "../vendored_uri"
        uri = Gem::URI(uri)
        raise ArgumentError, "The source must be an absolute URI. For example:\n" \
          "source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(Gem::URI::HTTP) && uri.host.nil?)
        uri
      end

      def remove_auth(remote)
        if remote.user || remote.password
          remote.dup.tap {|uri| uri.user = uri.password = nil }.to_s
        else
          remote.to_s
        end
      end

      def installed_specs
        @installed_specs ||= Index.build do |idx|
          Bundler.rubygems.installed_specs.reverse_each do |spec|
            spec.source = self
            next if spec.ignored?
            idx << spec
          end
        end
      end

      def default_specs
        @default_specs ||= Index.build do |idx|
          Bundler.rubygems.default_specs.each do |spec|
            spec.source = self
            idx << spec
          end
        end
      end

      def cached_specs
        @cached_specs ||= begin
          idx = Index.new

          Dir["#{cache_path}/*.gem"].each do |gemfile|
            s ||= Bundler.rubygems.spec_from_gem(gemfile)
            s.source = self
            idx << s
          end

          idx
        end
      end

      def api_fetchers
        fetchers.select(&:api_fetcher?)
      end

      def remote_specs
        @remote_specs ||= Index.build do |idx|
          index_fetchers = fetchers - api_fetchers

          if index_fetchers.empty?
            fetch_names(api_fetchers, dependency_names, idx)
          else
            fetch_names(fetchers, nil, idx)
          end
        end
      end

      def fetch_names(fetchers, dependency_names, index)
        fetchers.each do |f|
          if dependency_names
            Bundler.ui.info "Fetching gem metadata from #{URICredentialsFilter.credential_filtered_uri(f.uri)}", Bundler.ui.debug?
            index.use f.specs_with_retry(dependency_names, self)
            Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
          else
            Bundler.ui.info "Fetching source index from #{URICredentialsFilter.credential_filtered_uri(f.uri)}"
            index.use f.specs_with_retry(nil, self)
          end
        end
      end

      def fetch_gem_if_possible(spec, previous_spec = nil)
        if spec.remote
          fetch_gem(spec, previous_spec)
        else
          cached_gem(spec)
        end
      end

      def fetch_gem(spec, previous_spec = nil)
        spec.fetch_platform

        cache_path = download_cache_path(spec) || default_cache_path_for(rubygems_dir)
        gem_path = package_path(cache_path, spec)
        return gem_path if File.exist?(gem_path)

        SharedHelpers.filesystem_access(cache_path) do |p|
          FileUtils.mkdir_p(p)
        end
        download_gem(spec, cache_path, previous_spec)

        gem_path
      end

      def installed?(spec)
        installed_specs[spec].any? && !spec.installation_missing?
      end

      def rubygems_dir
        Bundler.bundle_path
      end

      def default_cache_path_for(dir)
        "#{dir}/cache"
      end

      def cache_path
        Bundler.app_cache
      end

      private

      def lockfile_remotes
        @lockfile_remotes || credless_remotes
      end

      # Checks if the requested spec exists in the global cache. If it does,
      # we copy it to the download path, and if it does not, we download it.
      #
      # @param  [Specification] spec
      #         the spec we want to download or retrieve from the cache.
      #
      # @param  [String] download_cache_path
      #         the local directory the .gem will end up in.
      #
      # @param  [Specification] previous_spec
      #         the spec previously locked
      #
      def download_gem(spec, download_cache_path, previous_spec = nil)
        uri = spec.remote.uri
        Bundler.ui.confirm("Fetching #{version_message(spec, previous_spec)}")
        gem_remote_fetcher = remote_fetchers.fetch(spec.remote).gem_remote_fetcher
        Bundler.rubygems.download_gem(spec, uri, download_cache_path, gem_remote_fetcher)
      end

      # Returns the global cache path of the calling Rubygems::Source object.
      #
      # Note that the Source determines the path's subdirectory. We use this
      # subdirectory in the global cache path so that gems with the same name
      # -- and possibly different versions -- from different sources are saved
      # to their respective subdirectories and do not override one another.
      #
      # @param  [Gem::Specification] specification
      #
      # @return [Pathname] The global cache path.
      #
      def download_cache_path(spec)
        return unless Bundler.feature_flag.global_gem_cache?
        return unless remote = spec.remote
        return unless cache_slug = remote.cache_slug

        Bundler.user_cache.join("gems", cache_slug)
      end

      def extension_cache_slug(spec)
        return unless remote = spec.remote
        remote.cache_slug
      end
    end
  end
end
PK*J[�b�.�2�27share/gems/gems/bundler-2.6.7/lib/bundler/source/git.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_fileutils"

module Bundler
  class Source
    class Git < Path
      autoload :GitProxy, File.expand_path("git/git_proxy", __dir__)

      attr_reader :uri, :ref, :branch, :options, :glob, :submodules

      def initialize(options)
        @options = options
        @checksum_store = Checksum::Store.new
        @glob = options["glob"] || DEFAULT_GLOB

        @allow_cached = false
        @allow_remote = false

        # Stringify options that could be set as symbols
        %w[ref branch tag revision].each {|k| options[k] = options[k].to_s if options[k] }

        @uri        = URINormalizer.normalize_suffix(options["uri"] || "", trailing_slash: false)
        @safe_uri   = URICredentialsFilter.credential_filtered_uri(@uri)
        @branch     = options["branch"]
        @ref        = options["ref"] || options["branch"] || options["tag"]
        @submodules = options["submodules"]
        @name       = options["name"]
        @version    = options["version"].to_s.strip.gsub("-", ".pre.")

        @copied     = false
        @local      = false
      end

      def remote!
        return if @allow_remote

        @local_specs = nil
        @allow_remote = true
      end

      def cached!
        return if @allow_cached

        @local_specs = nil
        @allow_cached = true
      end

      def self.from_lock(options)
        new(options.merge("uri" => options.delete("remote")))
      end

      def to_lock
        out = String.new("GIT\n")
        out << "  remote: #{@uri}\n"
        out << "  revision: #{revision}\n"
        %w[ref branch tag submodules].each do |opt|
          out << "  #{opt}: #{options[opt]}\n" if options[opt]
        end
        out << "  glob: #{@glob}\n" unless default_glob?
        out << "  specs:\n"
      end

      def to_gemfile
        specifiers = %w[ref branch tag submodules glob].map do |opt|
          "#{opt}: #{options[opt]}" if options[opt]
        end

        uri_with_specifiers(specifiers)
      end

      def hash
        [self.class, uri, ref, branch, name, glob, submodules].hash
      end

      def eql?(other)
        other.is_a?(Git) && uri == other.uri && ref == other.ref &&
          branch == other.branch && name == other.name &&
          glob == other.glob &&
          submodules == other.submodules
      end

      alias_method :==, :eql?

      def include?(other)
        other.is_a?(Git) && uri == other.uri &&
          name == other.name &&
          glob == other.glob &&
          submodules == other.submodules
      end

      def to_s
        begin
          at = humanized_ref || current_branch

          rev = "at #{at}@#{shortref_for_display(revision)}"
        rescue GitError
          ""
        end

        uri_with_specifiers([rev, glob_for_display])
      end

      def identifier
        uri_with_specifiers([humanized_ref, locked_revision, glob_for_display])
      end

      def uri_with_specifiers(specifiers)
        specifiers.compact!

        suffix =
          if specifiers.any?
            " (#{specifiers.join(", ")})"
          else
            ""
          end

        "#{@safe_uri}#{suffix}"
      end

      def name
        File.basename(@uri, ".git")
      end

      # This is the path which is going to contain a specific
      # checkout of the git repository. When using local git
      # repos, this is set to the local repo.
      def install_path
        @install_path ||= begin
          git_scope = "#{base_name}-#{shortref_for_path(revision)}"

          Bundler.install_path.join(git_scope)
        end
      end

      alias_method :path, :install_path

      def extension_dir_name
        "#{base_name}-#{shortref_for_path(revision)}"
      end

      def unlock!
        git_proxy.revision = nil
        options["revision"] = nil

        @unlocked = true
      end

      def local_override!(path)
        return false if local?

        original_path = path
        path = Pathname.new(path)
        path = path.expand_path(Bundler.root) unless path.relative?

        unless branch || Bundler.settings[:disable_local_branch_check]
          raise GitError, "Cannot use local override for #{name} at #{path} because " \
            ":branch is not specified in Gemfile. Specify a branch or run " \
            "`bundle config unset local.#{override_for(original_path)}` to remove the local override"
        end

        unless path.exist?
          raise GitError, "Cannot use local override for #{name} because #{path} " \
            "does not exist. Run `bundle config unset local.#{override_for(original_path)}` to remove the local override"
        end

        @local = true
        set_paths!(path)

        # Create a new git proxy without the cached revision
        # so the Gemfile.lock always picks up the new revision.
        @git_proxy = GitProxy.new(path, uri, options)

        if current_branch != branch && !Bundler.settings[:disable_local_branch_check]
          raise GitError, "Local override for #{name} at #{path} is using branch " \
            "#{current_branch} but Gemfile specifies #{branch}"
        end

        changed = locked_revision && locked_revision != revision

        if !Bundler.settings[:disable_local_revision_check] && changed && !@unlocked && !git_proxy.contains?(locked_revision)
          raise GitError, "The Gemfile lock is pointing to revision #{shortref_for_display(locked_revision)} " \
            "but the current branch in your local override for #{name} does not contain such commit. " \
            "Please make sure your branch is up to date."
        end

        changed
      end

      def specs(*)
        set_cache_path!(app_cache_path) if use_app_cache?

        if requires_checkout? && !@copied
          fetch unless use_app_cache?
          checkout
        end

        local_specs
      end

      def install(spec, options = {})
        return if Bundler.settings[:no_install]
        force = options[:force]

        print_using_message "Using #{version_message(spec, options[:previous_spec])} from #{self}"

        if (requires_checkout? && !@copied) || force
          checkout
        end

        generate_bin_options = { disable_extensions: !spec.missing_extensions?, build_args: options[:build_args] }
        generate_bin(spec, generate_bin_options)

        requires_checkout? ? spec.post_install_message : nil
      end

      def migrate_cache(custom_path = nil, local: false)
        if local
          cache_to(custom_path, try_migrate: false)
        else
          cache_to(custom_path, try_migrate: true)
        end
      end

      def cache(spec, custom_path = nil)
        cache_to(custom_path, try_migrate: false)
      end

      def load_spec_files
        super
      rescue PathError => e
        Bundler.ui.trace e
        raise GitError, "#{self} is not yet checked out. Run `bundle install` first."
      end

      # This is the path which is going to contain a cache
      # of the git repository. When using the same git repository
      # across different projects, this cache will be shared.
      # When using local git repos, this is set to the local repo.
      def cache_path
        @cache_path ||= if Bundler.feature_flag.global_gem_cache?
          Bundler.user_cache
        else
          Bundler.bundle_path.join("cache", "bundler")
        end.join("git", git_scope)
      end

      def app_cache_dirname
        "#{base_name}-#{shortref_for_path(locked_revision || revision)}"
      end

      def revision
        git_proxy.revision
      end

      def current_branch
        git_proxy.current_branch
      end

      def allow_git_ops?
        @allow_remote || @allow_cached
      end

      def local?
        @local
      end

      private

      def cache_to(custom_path, try_migrate: false)
        return unless Bundler.feature_flag.cache_all?

        app_cache_path = app_cache_path(custom_path)

        migrate = try_migrate ? bare_repo?(app_cache_path) : false

        set_cache_path!(nil) if migrate

        return if cache_path == app_cache_path

        cached!
        FileUtils.rm_rf(app_cache_path)
        git_proxy.checkout if migrate || requires_checkout?
        git_proxy.copy_to(app_cache_path, @submodules)
        serialize_gemspecs_in(app_cache_path)
      end

      def checkout
        Bundler.ui.debug "  * Checking out revision: #{ref}"
        if use_app_cache? && !bare_repo?(app_cache_path)
          SharedHelpers.filesystem_access(install_path.dirname) do |p|
            FileUtils.mkdir_p(p)
          end
          FileUtils.cp_r("#{app_cache_path}/.", install_path)
        else
          if use_app_cache? && bare_repo?(app_cache_path)
            Bundler.ui.warn "Installing from cache in old \"bare repository\" format for compatibility. " \
                            "Please run `bundle cache` and commit the updated cache to migrate to the new format and get rid of this warning."
          end

          git_proxy.copy_to(install_path, submodules)
        end
        serialize_gemspecs_in(install_path)
        @copied = true
      end

      def humanized_ref
        if local?
          path
        elsif user_ref = options["ref"]
          if /\A[a-z0-9]{4,}\z/i.match?(ref)
            shortref_for_display(user_ref)
          else
            user_ref
          end
        elsif ref
          ref
        end
      end

      def serialize_gemspecs_in(destination)
        destination = destination.expand_path(Bundler.root) if destination.relative?
        Dir["#{destination}/#{@glob}"].each do |spec_path|
          # Evaluate gemspecs and cache the result. Gemspecs
          # in git might require git or other dependencies.
          # The gemspecs we cache should already be evaluated.
          spec = Bundler.load_gemspec(spec_path)
          next unless spec
          spec.installed_by_version = Gem::VERSION
          Bundler.rubygems.validate(spec)
          File.open(spec_path, "wb") {|file| file.write(spec.to_ruby) }
        end
      end

      def set_paths!(path)
        set_cache_path!(path)
        set_install_path!(path)
      end

      def set_cache_path!(path)
        @git_proxy = nil
        @cache_path = path
      end

      def set_install_path!(path)
        @local_specs = nil
        @install_path = path
      end

      def has_app_cache?
        locked_revision && super
      end

      def use_app_cache?
        has_app_cache? && !local?
      end

      def requires_checkout?
        allow_git_ops? && !local? && !locked_revision_checked_out?
      end

      def locked_revision_checked_out?
        locked_revision && locked_revision == revision && installed?
      end

      def installed?
        git_proxy.installed_to?(install_path)
      end

      def base_name
        File.basename(uri.sub(%r{^(\w+://)?([^/:]+:)?(//\w*/)?(\w*/)*}, ""), ".git")
      end

      def shortref_for_display(ref)
        ref[0..6]
      end

      def shortref_for_path(ref)
        ref[0..11]
      end

      def glob_for_display
        default_glob? ? nil : "glob: #{@glob}"
      end

      def default_glob?
        @glob == DEFAULT_GLOB
      end

      def uri_hash
        if %r{^\w+://(\w+@)?}.match?(uri)
          # Downcase the domain component of the URI
          # and strip off a trailing slash, if one is present
          input = Gem::URI.parse(uri).normalize.to_s.sub(%r{/$}, "")
        else
          # If there is no URI scheme, assume it is an ssh/git URI
          input = uri
        end
        # We use SHA1 here for historical reason and to preserve backward compatibility.
        # But a transition to a simpler mangling algorithm would be welcome.
        Bundler::Digest.sha1(input)
      end

      def locked_revision
        options["revision"]
      end

      def cached?
        cache_path.exist?
      end

      def git_proxy
        @git_proxy ||= GitProxy.new(cache_path, uri, options, locked_revision, self)
      end

      def fetch
        git_proxy.checkout
      rescue GitError => e
        raise unless Bundler.feature_flag.allow_offline_install?
        Bundler.ui.warn "Using cached git data because of network errors:\n#{e}"
      end

      # no-op, since we validate when re-serializing the gemspec
      def validate_spec(_spec); end

      def load_gemspec(file)
        dirname = Pathname.new(file).dirname
        SharedHelpers.chdir(dirname.to_s) do
          stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
          stub.full_gem_path = dirname.expand_path(root).to_s
          StubSpecification.from_stub(stub)
        end
      end

      def git_scope
        "#{base_name}-#{uri_hash}"
      end

      def extension_cache_slug(_)
        extension_dir_name
      end

      def override_for(path)
        Bundler.settings.local_overrides.key(path)
      end

      def bare_repo?(path)
        File.exist?(path.join("objects")) && File.exist?(path.join("HEAD"))
      end
    end
  end
end
PK*J[���\\Fshare/gems/gems/bundler-2.6.7/lib/bundler/source/rubygems_aggregate.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class RubygemsAggregate
      attr_reader :source_map, :sources

      def initialize(sources, source_map)
        @sources = sources
        @source_map = source_map

        @index = build_index
      end

      def specs
        @index
      end

      def identifier
        to_s
      end

      def to_s
        "any of the sources"
      end

      private

      def build_index
        Index.build do |idx|
          dependency_names = source_map.pinned_spec_names

          sources.all_sources.each do |source|
            source.dependency_names = dependency_names - source_map.pinned_spec_names(source)
            idx.add_source source.specs
            dependency_names.concat(source.unmet_deps).uniq!
          end

          double_check_for_index(idx, dependency_names)
        end
      end

      # Suppose the gem Foo depends on the gem Bar.  Foo exists in Source A.  Bar has some versions that exist in both
      # sources A and B.  At this point, the API request will have found all the versions of Bar in source A,
      # but will not have found any versions of Bar from source B, which is a problem if the requested version
      # of Foo specifically depends on a version of Bar that is only found in source B. This ensures that for
      # each spec we found, we add all possible versions from all sources to the index.
      def double_check_for_index(idx, dependency_names)
        pinned_names = source_map.pinned_spec_names

        names = :names # do this so we only have to traverse to get dependency_names from the index once
        unmet_dependency_names = lambda do
          return names unless names == :names
          new_names = sources.all_sources.map(&:dependency_names_to_double_check)
          return names = nil if new_names.compact!
          names = new_names.flatten(1).concat(dependency_names)
          names.uniq!
          names -= pinned_names
          names
        end

        sources.all_sources.each do |source|
          source.double_check_for(unmet_dependency_names)
        end
      end
    end
  end
end
PK*J[���ppCshare/gems/gems/bundler-2.6.7/lib/bundler/source/rubygems/remote.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Rubygems
      class Remote
        attr_reader :uri, :anonymized_uri, :original_uri

        def initialize(uri)
          orig_uri = uri
          uri = Bundler.settings.mirror_for(uri)
          @original_uri = orig_uri if orig_uri != uri
          fallback_auth = Bundler.settings.credentials_for(uri)

          @uri = apply_auth(uri, fallback_auth).freeze
          @anonymized_uri = remove_auth(@uri).freeze
        end

        MAX_CACHE_SLUG_HOST_SIZE = 255 - 1 - 32 # 255 minus dot minus MD5 length
        private_constant :MAX_CACHE_SLUG_HOST_SIZE

        # @return [String] A slug suitable for use as a cache key for this
        #         remote.
        #
        def cache_slug
          @cache_slug ||= begin
            return nil unless SharedHelpers.md5_available?

            cache_uri = original_uri || uri

            host = cache_uri.to_s.start_with?("file://") ? nil : cache_uri.host

            uri_parts = [host, cache_uri.user, cache_uri.port, cache_uri.path]
            uri_parts.compact!
            uri_digest = SharedHelpers.digest(:MD5).hexdigest(uri_parts.join("."))

            uri_parts.pop
            host_parts = uri_parts.join(".")
            return uri_digest if host_parts.empty?

            shortened_host_parts = host_parts[0...MAX_CACHE_SLUG_HOST_SIZE]
            [shortened_host_parts, uri_digest].join(".")
          end
        end

        def to_s
          "rubygems remote at #{anonymized_uri}"
        end

        private

        def apply_auth(uri, auth)
          if auth && uri.userinfo.nil?
            uri = uri.dup
            uri.userinfo = auth
          end

          uri
        rescue Gem::URI::InvalidComponentError
          error_message = "Please CGI escape your usernames and passwords before " \
                          "setting them for authentication."
          raise HTTPError.new(error_message)
        end

        def remove_auth(uri)
          if uri.userinfo
            uri = uri.dup
            uri.user = uri.password = nil
          end

          uri
        end
      end
    end
  end
end
PK*J[�+O?;share/gems/gems/bundler-2.6.7/lib/bundler/source/gemspec.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Gemspec < Path
      attr_reader :gemspec
      attr_writer :checksum_store

      def initialize(options)
        super
        @gemspec = options["gemspec"]
      end
    end
  end
end
PK*J[,�;�;Ashare/gems/gems/bundler-2.6.7/lib/bundler/source/git/git_proxy.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Git
      class GitNotInstalledError < GitError
        def initialize
          msg = String.new
          msg << "You need to install git to be able to use gems from git repositories. "
          msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git"
          super msg
        end
      end

      class GitNotAllowedError < GitError
        def initialize(command)
          msg = String.new
          msg << "Bundler is trying to run `#{command}` at runtime. You probably need to run `bundle install`. However, "
          msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md "
          msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}"
          super msg
        end
      end

      class GitCommandError < GitError
        attr_reader :command

        def initialize(command, path, extra_info = nil)
          @command = command

          msg = String.new("Git error: command `#{command}`")
          msg << " in directory #{path}" if path
          msg << " has failed."
          msg << "\n#{extra_info}" if extra_info
          super msg
        end
      end

      class MissingGitRevisionError < GitCommandError
        def initialize(command, destination_path, ref, repo)
          msg = "Revision #{ref} does not exist in the repository #{repo}. Maybe you misspelled it?"
          super command, destination_path, msg
        end
      end

      class AmbiguousGitReference < GitError
        def initialize(options)
          msg = "Specification of branch or ref with tag is ambiguous. You specified #{options.inspect}"
          super msg
        end
      end

      # The GitProxy is responsible to interact with git repositories.
      # All actions required by the Git source is encapsulated in this
      # object.
      class GitProxy
        attr_accessor :path, :uri, :branch, :tag, :ref, :explicit_ref
        attr_writer :revision

        def initialize(path, uri, options = {}, revision = nil, git = nil)
          @path     = path
          @uri      = uri
          @tag      = options["tag"]
          @branch   = options["branch"]
          @ref      = options["ref"]
          if @tag
            raise AmbiguousGitReference.new(options) if @branch || @ref
            @explicit_ref = @tag
          else
            @explicit_ref = @ref || @branch
          end
          @revision = revision
          @git      = git
          @commit_ref = nil
        end

        def revision
          @revision ||= allowed_with_path { find_local_revision }
        end

        def current_branch
          @current_branch ||= with_path do
            git_local("rev-parse", "--abbrev-ref", "HEAD", dir: path).strip
          end
        end

        def contains?(commit)
          allowed_with_path do
            result, status = git_null("branch", "--contains", commit, dir: path)
            status.success? && result.match?(/^\* (.*)$/)
          end
        end

        def version
          @version ||= full_version.match(/((\.?\d+)+).*/)[1]
        end

        def full_version
          @full_version ||= git_local("--version").sub(/git version\s*/, "").strip
        end

        def checkout
          return if has_revision_cached?

          Bundler.ui.info "Fetching #{credential_filtered_uri}"

          extra_fetch_needed = clone_needs_extra_fetch?
          unshallow_needed = clone_needs_unshallow?
          return unless extra_fetch_needed || unshallow_needed

          git_remote_fetch(unshallow_needed ? ["--unshallow"] : depth_args)
        end

        def copy_to(destination, submodules = false)
          unless File.exist?(destination.join(".git"))
            begin
              SharedHelpers.filesystem_access(destination.dirname) do |p|
                FileUtils.mkdir_p(p)
              end
              SharedHelpers.filesystem_access(destination) do |p|
                FileUtils.rm_rf(p)
              end
              git "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s
              File.chmod(((File.stat(destination).mode | 0o777) & ~File.umask), destination)
            rescue Errno::EEXIST => e
              file_path = e.message[%r{.*?((?:[a-zA-Z]:)?/.*)}, 1]
              raise GitError, "Bundler could not install a gem because it needs to " \
                "create a directory, but a file exists - #{file_path}. Please delete " \
                "this file and try again."
            end
          end

          ref = @commit_ref || (locked_to_full_sha? && @revision)
          if ref
            git "config", "uploadpack.allowAnySHA1InWant", "true", dir: path.to_s if @commit_ref.nil? && needs_allow_any_sha1_in_want?

            git "fetch", "--force", "--quiet", *extra_fetch_args(ref), dir: destination
          end

          git "reset", "--hard", @revision, dir: destination

          if submodules
            git_retry "submodule", "update", "--init", "--recursive", dir: destination
          elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
            inner_command = "git -C $toplevel submodule deinit --force $sm_path"
            git_retry "submodule", "foreach", "--quiet", inner_command, dir: destination
          end
        end

        def installed_to?(destination)
          # if copy_to is interrupted, it may leave a partially installed directory that
          # contains .git but no other files -- consider this not to be installed
          Dir.exist?(destination) && (Dir.children(destination) - [".git"]).any?
        end

        private

        def git_remote_fetch(args)
          command = ["fetch", "--force", "--quiet", "--no-tags", *args, "--", configured_uri, refspec].compact
          command_with_no_credentials = check_allowed(command)

          Bundler::Retry.new("`#{command_with_no_credentials}` at #{path}", [MissingGitRevisionError]).attempts do
            out, err, status = capture(command, path)
            return out if status.success?

            if err.include?("couldn't find remote ref") || err.include?("not our ref")
              raise MissingGitRevisionError.new(command_with_no_credentials, path, commit || explicit_ref, credential_filtered_uri)
            else
              raise GitCommandError.new(command_with_no_credentials, path, err)
            end
          end
        end

        def clone_needs_extra_fetch?
          return true if path.exist?

          SharedHelpers.filesystem_access(path.dirname) do |p|
            FileUtils.mkdir_p(p)
          end

          command = ["clone", "--bare", "--no-hardlinks", "--quiet", *extra_clone_args, "--", configured_uri, path.to_s]
          command_with_no_credentials = check_allowed(command)

          Bundler::Retry.new("`#{command_with_no_credentials}`", [MissingGitRevisionError]).attempts do
            _, err, status = capture(command, nil)
            return extra_ref if status.success?

            if err.include?("Could not find remote branch") || # git up to 2.49
               err.include?("Remote branch #{branch_option} not found") # git 2.49 or higher
              raise MissingGitRevisionError.new(command_with_no_credentials, nil, explicit_ref, credential_filtered_uri)
            else
              idx = command.index("--depth")
              if idx
                command.delete_at(idx)
                command.delete_at(idx)
                command_with_no_credentials = check_allowed(command)

                err += "Retrying without --depth argument."
              end
              raise GitCommandError.new(command_with_no_credentials, path, err)
            end
          end
        end

        def clone_needs_unshallow?
          return false unless path.join("shallow").exist?
          return true if full_clone?

          @revision && @revision != head_revision
        end

        def extra_ref
          return false if not_pinned?
          return true unless full_clone?

          ref.start_with?("refs/")
        end

        def depth
          return @depth if defined?(@depth)

          @depth = if !supports_fetching_unreachable_refs?
            nil
          elsif not_pinned? || pinned_to_full_sha?
            1
          elsif ref.include?("~")
            parsed_depth = ref.split("~").last
            parsed_depth.to_i + 1
          end
        end

        def refspec
          if commit
            @commit_ref = "refs/#{commit}-sha"
            return "#{commit}:#{@commit_ref}"
          end

          reference = fully_qualified_ref

          reference ||= if ref.include?("~")
            ref.split("~").first
          elsif ref.start_with?("refs/")
            ref
          else
            "refs/*"
          end

          "#{reference}:#{reference}"
        end

        def commit
          @commit ||= pinned_to_full_sha? ? ref : @revision
        end

        def fully_qualified_ref
          if branch
            "refs/heads/#{branch}"
          elsif tag
            "refs/tags/#{tag}"
          elsif ref.nil?
            "refs/heads/#{current_branch}"
          end
        end

        def not_pinned?
          branch_option || ref.nil?
        end

        def pinned_to_full_sha?
          full_sha_revision?(ref)
        end

        def locked_to_full_sha?
          full_sha_revision?(@revision)
        end

        def full_sha_revision?(ref)
          ref&.match?(/\A\h{40}\z/)
        end

        def git_null(*command, dir: nil)
          check_allowed(command)

          capture(command, dir, ignore_err: true)
        end

        def git_retry(*command, dir: nil)
          command_with_no_credentials = check_allowed(command)

          Bundler::Retry.new("`#{command_with_no_credentials}` at #{dir || SharedHelpers.pwd}").attempts do
            git(*command, dir: dir)
          end
        end

        def git(*command, dir: nil)
          run_command(*command, dir: dir) do |unredacted_command|
            check_allowed(unredacted_command)
          end
        end

        def git_local(*command, dir: nil)
          run_command(*command, dir: dir) do |unredacted_command|
            redact_and_check_presence(unredacted_command)
          end
        end

        def has_revision_cached?
          return unless @revision && path.exist?
          git("cat-file", "-e", @revision, dir: path)
          true
        rescue GitError
          false
        end

        def find_local_revision
          return head_revision if explicit_ref.nil?

          find_revision_for(explicit_ref)
        end

        def head_revision
          verify("HEAD")
        end

        def find_revision_for(reference)
          verify(reference)
        rescue GitCommandError => e
          raise MissingGitRevisionError.new(e.command, path, reference, credential_filtered_uri)
        end

        def verify(reference)
          git("rev-parse", "--verify", reference, dir: path).strip
        end

        # Adds credentials to the URI
        def configured_uri
          if /https?:/.match?(uri)
            remote = Gem::URI(uri)
            config_auth = Bundler.settings[remote.to_s] || Bundler.settings[remote.host]
            remote.userinfo ||= config_auth
            remote.to_s
          else
            uri.to_s
          end
        end

        # Removes credentials from the URI
        def credential_filtered_uri
          URICredentialsFilter.credential_filtered_uri(uri)
        end

        def allow?
          allowed = @git ? @git.allow_git_ops? : true

          raise GitNotInstalledError.new if allowed && !Bundler.git_present?

          allowed
        end

        def with_path(&blk)
          checkout unless path.exist?
          blk.call
        end

        def allowed_with_path
          return with_path { yield } if allow?
          raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
        end

        def check_allowed(command)
          command_with_no_credentials = redact_and_check_presence(command)
          raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
          command_with_no_credentials
        end

        def redact_and_check_presence(command)
          raise GitNotInstalledError.new unless Bundler.git_present?

          require "shellwords"
          URICredentialsFilter.credential_filtered_string("git #{command.shelljoin}", uri)
        end

        def run_command(*command, dir: nil)
          command_with_no_credentials = yield(command)

          out, err, status = capture(command, dir)

          raise GitCommandError.new(command_with_no_credentials, dir || SharedHelpers.pwd, err) unless status.success?

          Bundler.ui.warn err unless err.empty?

          out
        end

        def capture(cmd, dir, ignore_err: false)
          SharedHelpers.with_clean_git_env do
            require "open3"
            out, err, status = Open3.capture3(*capture3_args_for(cmd, dir))

            filtered_out = URICredentialsFilter.credential_filtered_string(out, uri)
            return [filtered_out, status] if ignore_err

            filtered_err = URICredentialsFilter.credential_filtered_string(err, uri)
            [filtered_out, filtered_err, status]
          end
        end

        def capture3_args_for(cmd, dir)
          return ["git", *cmd] unless dir

          if Bundler.feature_flag.bundler_3_mode? || supports_minus_c?
            ["git", "-C", dir.to_s, *cmd]
          else
            ["git", *cmd, { chdir: dir.to_s }]
          end
        end

        def extra_clone_args
          args = depth_args
          return [] if args.empty?

          args += ["--single-branch"]
          args.unshift("--no-tags") if supports_cloning_with_no_tags?

          # If there's a locked revision, no need to clone any specific branch
          # or tag, since we will end up checking out that locked revision
          # anyways.
          return args if @revision

          args += ["--branch", branch_option] if branch_option
          args
        end

        def depth_args
          return [] if full_clone?

          ["--depth", depth.to_s]
        end

        def extra_fetch_args(ref)
          extra_args = [path.to_s, *depth_args]
          extra_args.push(ref)
          extra_args
        end

        def branch_option
          branch || tag
        end

        def full_clone?
          depth.nil?
        end

        def supports_minus_c?
          @supports_minus_c ||= Gem::Version.new(version) >= Gem::Version.new("1.8.5")
        end

        def needs_allow_any_sha1_in_want?
          @needs_allow_any_sha1_in_want ||= Gem::Version.new(version) <= Gem::Version.new("2.13.7")
        end

        def supports_fetching_unreachable_refs?
          @supports_fetching_unreachable_refs ||= Gem::Version.new(version) >= Gem::Version.new("2.5.0")
        end

        def supports_cloning_with_no_tags?
          @supports_cloning_with_no_tags ||= Gem::Version.new(version) >= Gem::Version.new("2.14.0-rc0")
        end
      end
    end
  end
end
PK*J[8ב,,Bshare/gems/gems/bundler-2.6.7/lib/bundler/source/path/installer.rbnu�[���# frozen_string_literal: true

require_relative "../../rubygems_gem_installer"

module Bundler
  class Source
    class Path
      class Installer < Bundler::RubyGemsGemInstaller
        attr_reader :spec

        def initialize(spec, options = {})
          @options            = options
          @spec               = spec
          @gem_dir            = Bundler.rubygems.path(spec.full_gem_path)
          @wrappers           = true
          @env_shebang        = true
          @format_executable  = options[:format_executable] || false
          @build_args         = options[:build_args] || Bundler.rubygems.build_args
          @gem_bin_dir        = "#{Bundler.rubygems.gem_dir}/bin"
          @disable_extensions = options[:disable_extensions]
          @bin_dir = @gem_bin_dir
        end

        def post_install
          run_hooks(:pre_install)

          unless @disable_extensions
            build_extensions
            run_hooks(:post_build)
          end

          generate_bin unless spec.executables.empty?

          run_hooks(:post_install)
        end

        private

        def run_hooks(type)
          hooks_meth = "#{type}_hooks"
          return unless Gem.respond_to?(hooks_meth)
          Gem.send(hooks_meth).each do |hook|
            result = hook.call(self)
            next unless result == false
            location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
            message = "#{type} hook#{location} failed for #{spec.full_name}"
            raise InstallHookError, message
          end
        end
      end
    end
  end
end
PK*J[e�G��8share/gems/gems/bundler-2.6.7/lib/bundler/source/path.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Path < Source
      autoload :Installer, File.expand_path("path/installer", __dir__)

      attr_reader :path, :options, :root_path, :original_path
      attr_writer :name
      attr_accessor :version

      protected :original_path

      DEFAULT_GLOB = "{,*,*/*}.gemspec"

      def initialize(options)
        @checksum_store = Checksum::Store.new
        @options = options.dup
        @glob = options["glob"] || DEFAULT_GLOB

        @root_path = options["root_path"] || root

        if options["path"]
          @path = Pathname.new(options["path"])
          expanded_path = expand(@path)
          @path = if @path.relative?
            expanded_path.relative_path_from(root_path.expand_path)
          else
            expanded_path
          end
        end

        @name    = options["name"]
        @version = options["version"]

        # Stores the original path. If at any point we move to the
        # cached directory, we still have the original path to copy from.
        @original_path = @path
      end

      def self.from_lock(options)
        new(options.merge("path" => options.delete("remote")))
      end

      def to_lock
        out = String.new("PATH\n")
        out << "  remote: #{lockfile_path}\n"
        out << "  glob: #{@glob}\n" unless @glob == DEFAULT_GLOB
        out << "  specs:\n"
      end

      def to_s
        "source at `#{@path}`"
      end

      alias_method :to_gemfile, :path

      def hash
        [self.class, expanded_path, version].hash
      end

      def eql?(other)
        [Gemspec, Path].include?(other.class) &&
          expanded_original_path == other.expanded_original_path &&
          version == other.version
      end

      alias_method :==, :eql?

      def name
        File.basename(expanded_path.to_s)
      end

      def install(spec, options = {})
        using_message = "Using #{version_message(spec, options[:previous_spec])} from #{self}"
        using_message += " and installing its executables" unless spec.executables.empty?
        print_using_message using_message
        generate_bin(spec, disable_extensions: true)
        nil # no post-install message
      end

      def cache(spec, custom_path = nil)
        app_cache_path = app_cache_path(custom_path)
        return unless Bundler.feature_flag.cache_all?
        return if expand(@original_path).to_s.index(root_path.to_s + "/") == 0

        unless @original_path.exist?
          raise GemNotFound, "Can't cache gem #{version_message(spec)} because #{self} is missing!"
        end

        FileUtils.rm_rf(app_cache_path)
        FileUtils.cp_r("#{@original_path}/.", app_cache_path)
        FileUtils.touch(app_cache_path.join(".bundlecache"))
      end

      def local_specs(*)
        @local_specs ||= load_spec_files
      end

      def specs
        if has_app_cache?
          @path = app_cache_path
          @expanded_path = nil # Invalidate
        end
        local_specs
      end

      def app_cache_dirname
        name
      end

      def root
        Bundler.root
      end

      def expanded_original_path
        @expanded_original_path ||= expand(original_path)
      end

      private

      def expanded_path
        @expanded_path ||= expand(path)
      end

      def expand(somepath)
        if Bundler.current_ruby.jruby? # TODO: Unify when https://github.com/rubygems/bundler/issues/7598 fixed upstream and all supported jrubies include the fix
          somepath.expand_path(root_path).expand_path
        else
          somepath.expand_path(root_path)
        end
      rescue ArgumentError => e
        Bundler.ui.debug(e)
        raise PathError, "There was an error while trying to use the path " \
          "`#{somepath}`.\nThe error message was: #{e.message}."
      end

      def lockfile_path
        return relative_path(original_path) if original_path.absolute?
        expand(original_path).relative_path_from(root)
      end

      def app_cache_path(custom_path = nil)
        @app_cache_path ||= Bundler.app_cache(custom_path).join(app_cache_dirname)
      end

      def has_app_cache?
        SharedHelpers.in_bundle? && app_cache_path.exist?
      end

      def load_gemspec(file)
        return unless spec = Bundler.load_gemspec(file)
        spec.installed_by_version = Gem::VERSION
        spec
      end

      def validate_spec(spec)
        Bundler.rubygems.validate(spec)
      end

      def load_spec_files
        index = Index.new

        if File.directory?(expanded_path)
          # We sort depth-first since `<<` will override the earlier-found specs
          Gem::Util.glob_files_in_dir(@glob, expanded_path).sort_by {|p| -p.split(File::SEPARATOR).size }.each do |file|
            next unless spec = load_gemspec(file)
            spec.source = self

            # Validation causes extension_dir to be calculated, which depends
            # on #source, so we validate here instead of load_gemspec
            validate_spec(spec)
            index << spec
          end

          if index.empty? && @name && @version
            index << Gem::Specification.new do |s|
              s.name     = @name
              s.source   = self
              s.version  = Gem::Version.new(@version)
              s.platform = Gem::Platform::RUBY
              s.summary  = "Fake gemspec for #{@name}"
              s.relative_loaded_from = "#{@name}.gemspec"
              s.authors = ["no one"]
              if expanded_path.join("bin").exist?
                executables = expanded_path.join("bin").children
                executables.reject! {|p| File.directory?(p) }
                s.executables = executables.map {|c| c.basename.to_s }
              end
            end
          end
        else
          message = String.new("The path `#{expanded_path}` ")
          message << if File.exist?(expanded_path)
            "is not a directory."
          else
            "does not exist."
          end
          raise PathError, message
        end

        index
      end

      def relative_path(path = self.path)
        if path.to_s.start_with?(root_path.to_s)
          return path.relative_path_from(root_path)
        end
        path
      end

      def generate_bin(spec, options = {})
        gem_dir = Pathname.new(spec.full_gem_path)

        # Some gem authors put absolute paths in their gemspec
        # and we have to save them from themselves
        spec.files = spec.files.filter_map do |path|
          next path unless /\A#{Pathname::SEPARATOR_PAT}/o.match?(path)
          next if File.directory?(path)
          begin
            Pathname.new(path).relative_path_from(gem_dir).to_s
          rescue ArgumentError
            path
          end
        end

        installer = Path::Installer.new(
          spec,
          env_shebang: false,
          disable_extensions: options[:disable_extensions],
          build_args: options[:build_args],
          bundler_extension_cache_path: extension_cache_path(spec)
        )
        installer.post_install
      rescue Gem::InvalidSpecificationException => e
        Bundler.ui.warn "\n#{spec.name} at #{spec.full_gem_path} did not have a valid gemspec.\n" \
                        "This prevents bundler from installing bins or native extensions, but " \
                        "that may not affect its functionality."

        if !spec.extensions.empty? && !spec.email.empty?
          Bundler.ui.warn "If you need to use this package without installing it from a gem " \
                          "repository, please contact #{spec.email} and ask them " \
                          "to modify their .gemspec so it can work with `gem build`."
        end

        Bundler.ui.warn "The validation message from RubyGems was:\n  #{e.message}"
      end
    end
  end
end
PK*J[2y�776share/gems/gems/bundler-2.6.7/lib/bundler/constants.rbnu�[���# frozen_string_literal: true

require "rbconfig"

module Bundler
  WINDOWS = RbConfig::CONFIG["host_os"] =~ /(msdos|mswin|djgpp|mingw)/
  deprecate_constant :WINDOWS

  FREEBSD = RbConfig::CONFIG["host_os"].to_s.include?("bsd")
  deprecate_constant :FREEBSD

  NULL = File::NULL
  deprecate_constant :NULL
end
PK*J[A*W���Ishare/gems/gems/bundler-2.6.7/lib/bundler/templates/Executable.standalonenu�[���#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
# frozen_string_literal: true

#
# This file was generated by Bundler.
#
# The application '<%= executable %>' is installed as part of a gem, and
# this file is here to facilitate running it.
#

$:.unshift File.expand_path "<%= standalone_path %>", __dir__

require "bundler/setup"
load File.expand_path "<%= executable_path %>", __dir__
PK*J[��hhFshare/gems/gems/bundler-2.6.7/lib/bundler/templates/Executable.bundlernu�[���#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
# frozen_string_literal: true

#
# This file was generated by Bundler.
#
# The application '<%= executable %>' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require "rubygems"

m = Module.new do
  module_function

  def invoked_as_script?
    File.expand_path($0) == File.expand_path(__FILE__)
  end

  def env_var_version
    ENV["BUNDLER_VERSION"]
  end

  def cli_arg_version
    return unless invoked_as_script? # don't want to hijack other binstubs
    return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
    bundler_version = nil
    update_index = nil
    ARGV.each_with_index do |a, i|
      if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN)
        bundler_version = a
      end
      next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
      bundler_version = $1
      update_index = i
    end
    bundler_version
  end

  def gemfile
    gemfile = ENV["BUNDLE_GEMFILE"]
    return gemfile if gemfile && !gemfile.empty?

    File.expand_path("<%= relative_gemfile_path %>", __dir__)
  end

  def lockfile
    lockfile =
      case File.basename(gemfile)
      when "gems.rb" then gemfile.sub(/\.rb$/, ".locked")
      else "#{gemfile}.lock"
      end
    File.expand_path(lockfile)
  end

  def lockfile_version
    return unless File.file?(lockfile)
    lockfile_contents = File.read(lockfile)
    return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
    Regexp.last_match(1)
  end

  def bundler_requirement
    @bundler_requirement ||=
      env_var_version ||
      cli_arg_version ||
      bundler_requirement_for(lockfile_version)
  end

  def bundler_requirement_for(version)
    return "#{Gem::Requirement.default}.a" unless version

    bundler_gem_version = Gem::Version.new(version)

    bundler_gem_version.approximate_recommendation
  end

  def load_bundler!
    ENV["BUNDLE_GEMFILE"] ||= gemfile

    activate_bundler
  end

  def activate_bundler
    gem_error = activation_error_handling do
      gem "bundler", bundler_requirement
    end
    return if gem_error.nil?
    require_error = activation_error_handling do
      require "bundler/version"
    end
    return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
    warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
    exit 42
  end

  def activation_error_handling
    yield
    nil
  rescue StandardError, LoadError => e
    e
  end
end

m.load_bundler!

if m.invoked_as_script?
  load Gem.bin_path("<%= spec.name %>", "<%= executable %>")
end
PK*J[�lq55Cshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/rspec.ttnu�[���--format documentation
--color
--require spec_helper
PK*J[�S�
ooPshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.ttnu�[���# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
  community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or advances of
  any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
  without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[INSERT CONTACT METHOD].
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series of
actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within the
community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].

[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
PK*J[���QQIshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/LICENSE.txt.ttnu�[���The MIT License (MIT)

Copyright (c) <%= Time.now.year %> <%= config[:author] %>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK*J[Դ�88Ishare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/bin/console.ttnu�[���#!/opt/alt/ruby34/bin/ruby
# frozen_string_literal: true

require "bundler/setup"
require "<%= config[:namespaced_path] %>"

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.

require "irb"
IRB.start(__FILE__)
PK*J[����Gshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/bin/setup.ttnu�[���#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
set -vx

bundle install

# Do any other automated setup that you need to do here
PK*J[<0��Lshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/newgem.gemspec.ttnu�[���# frozen_string_literal: true

require_relative "lib/<%=config[:namespaced_path]%>/version"

Gem::Specification.new do |spec|
  spec.name = <%= config[:name].inspect %>
  spec.version = <%= config[:constant_name] %>::VERSION
  spec.authors = [<%= config[:author].inspect %>]
  spec.email = [<%= config[:email].inspect %>]

  spec.summary = "TODO: Write a short summary, because RubyGems requires one."
  spec.description = "TODO: Write a longer description or delete this line."
  spec.homepage = "TODO: Put your gem's website or public repo URL here."
<%- if config[:mit] -%>
  spec.license = "MIT"
<%- end -%>
  spec.required_ruby_version = ">= <%= config[:required_ruby_version] %>"
<%- if config[:ext] == 'rust' -%>
  spec.required_rubygems_version = ">= <%= config[:rust_builder_required_rubygems_version] %>"
<%- end -%>

  spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"

  spec.metadata["homepage_uri"] = spec.homepage
  spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
  spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."

  # Specify which files should be added to the gem when it is released.
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
  gemspec = File.basename(__FILE__)
  spec.files = IO.popen(%w[git ls-files -z], chdir: __dir__, err: IO::NULL) do |ls|
    ls.readlines("\x0", chomp: true).reject do |f|
      (f == gemspec) ||
        f.start_with?(*%w[bin/ test/ spec/ features/ .git <%= config[:ci_config_path] %>appveyor Gemfile])
    end
  end
  spec.bindir = "exe"
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]
<%- if config[:ext] == 'c' || config[:ext] == 'rust' -%>
  spec.extensions = ["ext/<%= config[:underscored_name] %>/extconf.rb"]
<%- end -%>

  # Uncomment to register a new dependency of your gem
  # spec.add_dependency "example-gem", "~> 1.0"
<%- if config[:ext] == 'rust' -%>
  spec.add_dependency "rb_sys", "~> 0.9.91"
<%- end -%>

  # For more information and examples about making a new gem, check out our
  # guide at: https://bundler.io/guides/creating_gem.html
end
PK*J[I|\��Qshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/circleci/config.yml.ttnu�[���version: 2.1
jobs:
  build:
    docker:
      - image: ruby:<%= RUBY_VERSION %>
<%- if config[:ext] == 'rust' -%>
    environment:
      RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN: 'true'
<%- end -%>
    steps:
      - checkout
<%- if config[:ext] == 'rust' -%>
      - run:
          name: Install Rust/Cargo dependencies
          command: apt-get update && apt-get install -y clang
      - run:
          name: Install a RubyGems version that can compile rust extensions
          command: gem update --system '<%= ::Gem.rubygems_version %>'
<%- end -%>
      - run:
          name: Run the default task
          command: |
            gem install bundler -v <%= Bundler::VERSION %>
            bundle install
            bundle exec rake
PK*J[���Gshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/gitignore.ttnu�[���/.bundle/
/.yardoc
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/
<%- if config[:ext] -%>
*.bundle
*.so
*.o
*.a
mkmf.log
<%- if config[:ext] == 'rust' -%>
target/
<%- end -%>
<%- end -%>
<%- if config[:test] == "rspec" -%>

# rspec failure tracking
.rspec_status
<%- end -%>
PK*J[��LLUshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.ttnu�[���# frozen_string_literal: true

require "mkmf"

# Makes all symbols private by default to avoid unintended conflict
# with other gems. To explicitly export symbols you can use RUBY_FUNC_EXPORTED
# selectively, or entirely remove this flag.
append_cflags("-fvisibility=hidden")

create_makefile(<%= config[:makefile_path].inspect %>)
PK*J[�?����Qshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/newgem.h.ttnu�[���#ifndef <%= config[:underscored_name].upcase %>_H
#define <%= config[:underscored_name].upcase %>_H 1

#include "ruby.h"

#endif /* <%= config[:underscored_name].upcase %>_H */
PK*J[�5��Xshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.ttnu�[���# frozen_string_literal: true

require "mkmf"
require "rb_sys/mkmf"

create_rust_makefile(<%= config[:makefile_path].inspect %>)
PK*J[8`�9Qshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/newgem.c.ttnu�[���#include "<%= config[:underscored_name] %>.h"

VALUE rb_m<%= config[:constant_array].join %>;

RUBY_FUNC_EXPORTED void
Init_<%= config[:underscored_name] %>(void)
{
  rb_m<%= config[:constant_array].join %> = rb_define_module(<%= config[:constant_name].inspect %>);
}
PK*J[����xxSshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.ttnu�[���use magnus::{function, prelude::*, Error, Ruby};

fn hello(subject: String) -> String {
    format!("Hello from Rust, {subject}!")
}

#[magnus::init]
fn init(ruby: &Ruby) -> Result<(), Error> {
    let module = ruby.<%= config[:constant_array].map {|c| "define_module(#{c.dump})?"}.join(".") %>;
    module.define_singleton_method("hello", function!(hello, 1))?;
    Ok(())
}
PK*J[�8wf  Sshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.ttnu�[���[package]
name = <%= config[:name].inspect %>
version = "0.1.0"
edition = "2021"
authors = ["<%= config[:author] %> <<%= config[:email] %>>"]
<%- if config[:mit] -%>
license = "MIT"
<%- end -%>
publish = false

[lib]
crate-type = ["cdylib"]

[dependencies]
magnus = { version = "0.6.2" }
PK*J[*Q=tooFshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/Rakefile.ttnu�[���# frozen_string_literal: true

require "bundler/gem_tasks"
<% default_task_names = [config[:test_task]].compact -%>
<% case config[:test] -%>
<% when "minitest" -%>
require "minitest/test_task"

Minitest::TestTask.create

<% when "test-unit" -%>
require "rake/testtask"

Rake::TestTask.new(:test) do |t|
  t.libs << "test"
  t.libs << "lib"
  t.test_files = FileList["test/**/*_test.rb"]
end

<% when "rspec" -%>
require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec)

<% end -%>
<% if config[:linter] == "rubocop" -%>
<% default_task_names << :rubocop -%>
require "rubocop/rake_task"

RuboCop::RakeTask.new

<% elsif config[:linter] == "standard" -%>
<% default_task_names << :standard -%>
require "standard/rake"

<% end -%>
<% if config[:ext] -%>
<% default_task_names.unshift(:compile) -%>
<% default_task_names.unshift(:clobber) unless config[:ext] == 'rust' -%>
<% if config[:ext] == 'rust' -%>
require "rb_sys/extensiontask"

task build: :compile

GEMSPEC = Gem::Specification.load("<%= config[:underscored_name] %>.gemspec")

RbSys::ExtensionTask.new(<%= config[:name].inspect %>, GEMSPEC) do |ext|
  ext.lib_dir = "lib/<%= config[:namespaced_path] %>"
end
<% else -%>
require "rake/extensiontask"

task build: :compile

GEMSPEC = Gem::Specification.load("<%= config[:underscored_name] %>.gemspec")

Rake::ExtensionTask.new("<%= config[:underscored_name] %>", GEMSPEC) do |ext|
  ext.lib_dir = "lib/<%= config[:namespaced_path] %>"
end
<% end -%>

<% end -%>
<% if default_task_names.size == 1 -%>
task default: <%= default_task_names.first.inspect %>
<% else -%>
task default: %i[<%= default_task_names.join(" ") %>]
<% end -%>
PK*J[N��meeLshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/sig/newgem.rbs.ttnu�[���<%- config[:constant_array].each_with_index do |c, i| -%>
<%= "  " * i %>module <%= c %>
<%- end -%>
<%= "  " * config[:constant_array].size %>VERSION: String
<%= "  " * config[:constant_array].size %># See the writing guide of rbs: https://github.com/ruby/rbs#guides
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
<%= "  " * i %>end
<%- end -%>
PK*J[!5��PPJshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/CHANGELOG.md.ttnu�[���## [Unreleased]

## [0.1.0] - <%= Time.now.strftime('%F') %>

- Initial release
PK*J[�:x�77Wshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/github/workflows/main.yml.ttnu�[���name: Ruby

on:
  push:
    branches:
      - <%= config[:git_default_branch] %>

  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    name: Ruby ${{ matrix.ruby }}
    strategy:
      matrix:
        ruby:
          - '<%= RUBY_VERSION %>'

    steps:
      - uses: actions/checkout@v4
<%- if config[:ext] == 'rust' -%>
      - name: Set up Ruby & Rust
        uses: oxidize-rb/actions/setup-ruby-and-rust@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          bundler-cache: true
          cargo-cache: true
          rubygems: '<%= ::Gem.rubygems_version %>'
<%- else -%>
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          bundler-cache: true
<%- end -%>
      - name: Run the default task
        run: bundle exec rake
PK*J[�$�(��Ishare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/rubocop.yml.ttnu�[���AllCops:
  TargetRubyVersion: <%= ::Gem::Version.new(config[:required_ruby_version]).segments[0..1].join(".") %>

Style/StringLiterals:
  EnforcedStyle: double_quotes

Style/StringLiteralsInInterpolation:
  EnforcedStyle: double_quotes
PK*J[���FFHshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/exe/newgem.ttnu�[���#!/opt/alt/ruby34/bin/ruby

require "<%= config[:namespaced_path] %>"
PK*J[��Sshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/lib/newgem/version.rb.ttnu�[���# frozen_string_literal: true

<%- config[:constant_array].each_with_index do |c, i| -%>
<%= "  " * i %>module <%= c %>
<%- end -%>
<%= "  " * config[:constant_array].size %>VERSION = "0.1.0"
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
<%= "  " * i %>end
<%- end -%>
PK*J[��Br==Kshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/lib/newgem.rb.ttnu�[���# frozen_string_literal: true

require_relative "<%= File.basename(config[:namespaced_path]) %>/version"
<%- if config[:ext] -%>
require_relative "<%= File.basename(config[:namespaced_path]) %>/<%= config[:underscored_name] %>"
<%- end -%>

<%- config[:constant_array].each_with_index do |c, i| -%>
<%= "  " * i %>module <%= c %>
<%- end -%>
<%= "  " * config[:constant_array].size %>class Error < StandardError; end
<%= "  " * config[:constant_array].size %># Your code goes here...
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
<%= "  " * i %>end
<%- end -%>
PK*J[Ҧ+���Qshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/spec/spec_helper.rb.ttnu�[���# frozen_string_literal: true

require "<%= config[:namespaced_path] %>"

RSpec.configure do |config|
  # Enable flags like --only-failures and --next-failure
  config.example_status_persistence_file_path = ".rspec_status"

  # Disable RSpec exposing methods globally on `Module` and `main`
  config.disable_monkey_patching!

  config.expect_with :rspec do |c|
    c.syntax = :expect
  end
end
PK*J[32
���Qshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/spec/newgem_spec.rb.ttnu�[���# frozen_string_literal: true

RSpec.describe <%= config[:constant_name] %> do
  it "has a version number" do
    expect(<%= config[:constant_name] %>::VERSION).not_to be nil
  end

  it "does something useful" do
    expect(false).to eq(true)
  end
end
PK*J[�M-n��Zshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/minitest/test_helper.rb.ttnu�[���# frozen_string_literal: true

$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "<%= config[:namespaced_path] %>"

require "minitest/autorun"
PK*J[,��
Zshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.ttnu�[���# frozen_string_literal: true

require "test_helper"

class <%= config[:minitest_constant_name] %> < Minitest::Test
  def test_that_it_has_a_version_number
    refute_nil ::<%= config[:constant_name] %>::VERSION
  end

  def test_it_does_something_useful
    assert false
  end
end
PK*J[G�>J��[share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.ttnu�[���# frozen_string_literal: true

$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "<%= config[:namespaced_path] %>"

require "test-unit"
PK*J[q��{33[share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.ttnu�[���# frozen_string_literal: true

require "test_helper"

class <%= config[:constant_name] %>Test < Test::Unit::TestCase
  test "VERSION" do
    assert do
      ::<%= config[:constant_name] %>.const_defined?(:VERSION)
    end
  end

  test "something useful" do
    assert_equal("expected", "actual")
  end
end
PK*J[u�H�22Gshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/README.md.ttnu�[���# <%= config[:constant_name] %>

TODO: Delete this and the text below, and describe your gem

Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/<%= config[:namespaced_path] %>`. To experiment with that code, run `bin/console` for an interactive prompt.

## Installation

TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.

Install the gem and add to the application's Gemfile by executing:

```bash
bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
```

If bundler is not being used to manage dependencies, install the gem by executing:

```bash
gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
```

## Usage

TODO: Write usage instructions here

## Development

After checking out the repo, run `bin/setup` to install dependencies.<% if config[:test] %> Then, run `rake <%= config[:test_task] %>` to run the tests.<% end %> You can also run `bin/console` for an interactive prompt that will allow you to experiment.<% if config[:bin] %> Run `bundle exec <%= config[:name] %>` to use the gem in this directory, ignoring other installed copies of this gem.<% end %>

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
<% if config[:git] -%>

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/<%= config[:github_username] %>/<%= config[:name] %>.<% if config[:coc] %> This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob/<%= config[:git_default_branch] %>/CODE_OF_CONDUCT.md).<% end %>
<% end -%>
<% if config[:mit] -%>

## License

The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
<% end -%>
<% if config[:git] && config[:coc] -%>

## Code of Conduct

Everyone interacting in the <%= config[:constant_name] %> project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob/<%= config[:git_default_branch] %>/CODE_OF_CONDUCT.md).
<% end -%>
PK*J[�fn>Eshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/Gemfile.ttnu�[���# frozen_string_literal: true

source "https://rubygems.org"

# Specify your gem's dependencies in <%= config[:name] %>.gemspec
gemspec

gem "irb"
gem "rake", "~> 13.0"
<%- if config[:ext] -%>

gem "rake-compiler"
<%- end -%>
<%- if config[:test] -%>

gem "<%= config[:test] %>", "~> <%= config[:test_framework_version] %>"
<%- end -%>
<%- if config[:linter] == "rubocop" -%>

gem "rubocop", "~> <%= config[:linter_version] %>"
<%- elsif config[:linter] == "standard" -%>

gem "standard", "~> <%= config[:linter_version] %>"
<%- end -%>
PK*J[2����Hshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/Cargo.toml.ttnu�[���# This Cargo.toml is here to let externals tools (IDEs, etc.) know that this is
# a Rust project. Your extensions dependencies should be added to the Cargo.toml
# in the ext/ directory.

[workspace]
members = ["./ext/<%= config[:name] %>"]
resolver = "2"
PK*J[P�ߚ��Kshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/gitlab-ci.yml.ttnu�[���default:
  image: ruby:<%= RUBY_VERSION %>

  before_script:
<%- if config[:ext] == 'rust' -%>
    - apt-get update && apt-get install -y clang
    - gem update --system '<%= ::Gem.rubygems_version %>'
<%- end -%>
    - gem install bundler -v <%= Bundler::VERSION %>
    - bundle install

example_job:
<%- if config[:ext] == 'rust' -%>
  variables:
    RB_SYS_FORCE_INSTALL_RUST_TOOLCHAIN: 'true'
<%- end -%>
  script:
    - bundle exec rake
PK*J[͌��Jshare/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/standard.yml.ttnu�[���# For available configuration options, see:
#   https://github.com/standardrb/standard
ruby_version: <%= ::Gem::Version.new(config[:required_ruby_version]).segments[0..1].join(".") %>
PK*J[�>�{dd>share/gems/gems/bundler-2.6.7/lib/bundler/templates/Executablenu�[���#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
# frozen_string_literal: true

#
# This file was generated by Bundler.
#
# The application '<%= executable %>' is installed as part of a gem, and
# this file is here to facilitate running it.
#

ENV["BUNDLE_GEMFILE"] ||= File.expand_path("<%= relative_gemfile_path %>", __dir__)

bundle_binstub = File.expand_path("bundle", __dir__)

if File.file?(bundle_binstub)
  if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
    load(bundle_binstub)
  else
    abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
  end
end

require "rubygems"
require "bundler/setup"

load Gem.bin_path("<%= spec.name %>", "<%= executable %>")
PK*J[�SJLL;share/gems/gems/bundler-2.6.7/lib/bundler/templates/Gemfilenu�[���# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails"
PK*J[U�ߘ�:share/gems/gems/bundler-2.6.7/lib/bundler/resolver/root.rbnu�[���# frozen_string_literal: true

require_relative "package"

module Bundler
  class Resolver
    #
    # Represents the Gemfile from the resolver's perspective. It's the root
    # package and Gemfile entries depend on it.
    #
    class Root < Package
      def initialize(name)
        @name = name
      end

      def meta?
        true
      end

      def root?
        true
      end
    end
  end
end
PK*J[)����?share/gems/gems/bundler-2.6.7/lib/bundler/resolver/candidate.rbnu�[���# frozen_string_literal: true

require_relative "spec_group"

module Bundler
  class Resolver
    #
    # This class is a PubGrub compatible "Version" class that takes Bundler
    # resolution complexities into account.
    #
    # Each Resolver::Candidate has a underlying `Gem::Version` plus a set of
    # platforms. For example, 1.1.0-x86_64-linux is a different resolution candidate
    # from 1.1.0 (generic). This is because different platform variants of the
    # same gem version can bring different dependencies, so they need to be
    # considered separately.
    #
    # Some candidates may also keep some information explicitly about the
    # package they refer to. These candidates are referred to as "canonical" and
    # are used when materializing resolution results back into RubyGems
    # specifications that can be installed, written to lockfiles, and so on.
    #
    class Candidate
      include Comparable

      attr_reader :version

      def initialize(version, group: nil, priority: -1)
        @spec_group = group || SpecGroup.new([])
        @version = Gem::Version.new(version)
        @priority = priority
      end

      def dependencies
        @spec_group.dependencies
      end

      def to_specs(package, most_specific_locked_platform)
        return [] if package.meta?

        @spec_group.to_specs(package.force_ruby_platform?, most_specific_locked_platform)
      end

      def prerelease?
        @version.prerelease?
      end

      def segments
        @version.segments
      end

      def <=>(other)
        return unless other.is_a?(self.class)

        version_comparison = version <=> other.version
        return version_comparison unless version_comparison.zero?

        priority <=> other.priority
      end

      def ==(other)
        return unless other.is_a?(self.class)

        version == other.version && priority == other.priority
      end

      def eql?(other)
        return unless other.is_a?(self.class)

        version.eql?(other.version) && priority.eql?(other.priority)
      end

      def hash
        [@version, @priority].hash
      end

      def to_s
        @version.to_s
      end

      protected

      attr_reader :priority
    end
  end
end
PK*J[�%(�  :share/gems/gems/bundler-2.6.7/lib/bundler/resolver/base.rbnu�[���# frozen_string_literal: true

require_relative "package"

module Bundler
  class Resolver
    class Base
      attr_reader :packages, :requirements, :source_requirements, :locked_specs

      def initialize(source_requirements, dependencies, base, platforms, options)
        @source_requirements = source_requirements
        @locked_specs = options[:locked_specs]

        @base = base

        @packages = Hash.new do |hash, name|
          hash[name] = Package.new(name, platforms, **options)
        end

        @requirements = dependencies.filter_map do |dep|
          dep_platforms = dep.gem_platforms(platforms)

          # Dependencies scoped to external platforms are ignored
          next if dep_platforms.empty?

          name = dep.name

          @packages[name] = Package.new(name, dep_platforms, **options.merge(dependency: dep))

          dep
        end
      end

      def [](name)
        @base[name]
      end

      def delete(specs)
        @base.delete(specs)
      end

      def get_package(name)
        @packages[name]
      end

      def base_requirements
        @base_requirements ||= build_base_requirements
      end

      def unlock_names(names)
        indirect_pins = indirect_pins(names)

        if indirect_pins.any?
          loosen_names(indirect_pins)
        else
          pins = pins(names)

          if pins.any?
            loosen_names(pins)
          else
            unrestrict_names(names)
          end
        end
      end

      def include_prereleases(names)
        names.each do |name|
          get_package(name).consider_prereleases!
        end
      end

      def include_remote_specs(names)
        names.each do |name|
          get_package(name).consider_remote_versions!
        end
      end

      private

      def indirect_pins(names)
        names.select {|name| @base_requirements[name].exact? && @requirements.none? {|dep| dep.name == name } }
      end

      def pins(names)
        names.select {|name| @base_requirements[name].exact? }
      end

      def loosen_names(names)
        names.each do |name|
          version = @base_requirements[name].requirements.first[1]

          @base_requirements[name] = Gem::Requirement.new(">= #{version}")

          @base.delete_by_name(name)
        end
      end

      def unrestrict_names(names)
        names.each do |name|
          @base_requirements.delete(name)
        end
      end

      def build_base_requirements
        base_requirements = {}
        @base.each do |ls|
          if ls.source_changed? && ls.source.specs.search(ls.name).empty?
            raise GemNotFound, "Could not find gem '#{ls.name}' in #{ls.source}"
          end

          req = Gem::Requirement.new(ls.version)
          base_requirements[ls.name] = req
        end
        base_requirements
      end
    end
  end
end
PK*J[�T";	;	=share/gems/gems/bundler-2.6.7/lib/bundler/resolver/package.rbnu�[���# frozen_string_literal: true

module Bundler
  class Resolver
    #
    # Represents a gem being resolved, in a format PubGrub likes.
    #
    # The class holds the following information:
    #
    # * Platforms this gem will be resolved on.
    # * The locked version of this gem resolution should favor (if any).
    # * Whether the gem should be unlocked to its latest version.
    # * The dependency explicit set in the Gemfile for this gem (if any).
    #
    class Package
      attr_reader :name, :platforms, :dependency, :locked_version

      def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, prefer_local: false, dependency: nil, new_platforms: [])
        @name = name
        @platforms = platforms
        @locked_version = locked_specs.version_for(name)
        @unlock = unlock
        @dependency = dependency || Dependency.new(name, @locked_version)
        @top_level = !dependency.nil?
        @prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
        @prefer_local = prefer_local
        @new_platforms = new_platforms
      end

      def platform_specs(specs)
        platforms.map do |platform|
          prefer_locked = @new_platforms.include?(platform) ? false : !unlock?
          GemHelpers.select_best_platform_match(specs, platform, prefer_locked: prefer_locked)
        end
      end

      def to_s
        @name.delete("\0")
      end

      def root?
        false
      end

      def top_level?
        @top_level
      end

      def meta?
        @name.end_with?("\0")
      end

      def ==(other)
        self.class == other.class && @name == other.name
      end

      def hash
        @name.hash
      end

      def unlock?
        @unlock == true || @unlock.include?(name)
      end

      def ignores_prereleases?
        @prerelease == :ignore
      end

      def prerelease_specified?
        @prerelease == :consider_first
      end

      def consider_prereleases!
        @prerelease = :consider_last
      end

      def prefer_local?
        @prefer_local
      end

      def consider_remote_versions!
        @prefer_local = false
      end

      def force_ruby_platform?
        @dependency.force_ruby_platform
      end

      def current_platform?
        @dependency.current_platform?
      end
    end
  end
end
PK*J[[ӭ�11>share/gems/gems/bundler-2.6.7/lib/bundler/resolver/strategy.rbnu�[���# frozen_string_literal: true

module Bundler
  class Resolver
    class Strategy
      def initialize(source)
        @source = source
      end

      def next_package_and_version(unsatisfied)
        package, range = next_term_to_try_from(unsatisfied)

        [package, most_preferred_version_of(package, range).first]
      end

      private

      def next_term_to_try_from(unsatisfied)
        unsatisfied.min_by do |package, range|
          matching_versions = @source.versions_for(package, range)
          higher_versions = @source.versions_for(package, range.upper_invert)

          [matching_versions.count <= 1 ? 0 : 1, higher_versions.count]
        end
      end

      def most_preferred_version_of(package, range)
        versions = @source.versions_for(package, range)

        # Conditional avoids (among other things) calling
        # sort_versions_by_preferred with the root package
        if versions.size > 1
          @source.sort_versions_by_preferred(package, versions)
        else
          versions
        end
      end
    end
  end
end
PK*J[����@share/gems/gems/bundler-2.6.7/lib/bundler/resolver/spec_group.rbnu�[���# frozen_string_literal: true

module Bundler
  class Resolver
    class SpecGroup
      attr_reader :specs

      def initialize(specs)
        @specs = specs
      end

      def empty?
        @specs.empty?
      end

      def name
        @name ||= exemplary_spec.name
      end

      def version
        @version ||= exemplary_spec.version
      end

      def source
        @source ||= exemplary_spec.source
      end

      def to_specs(force_ruby_platform, most_specific_locked_platform)
        @specs.map do |s|
          lazy_spec = LazySpecification.from_spec(s)
          lazy_spec.force_ruby_platform = force_ruby_platform
          lazy_spec.most_specific_locked_platform = most_specific_locked_platform
          lazy_spec
        end
      end

      def to_s
        sorted_spec_names.join(", ")
      end

      def dependencies
        @dependencies ||= @specs.flat_map(&:expanded_dependencies).uniq.sort
      end

      def ==(other)
        sorted_spec_names == other.sorted_spec_names
      end

      def merge(other)
        return false unless equivalent?(other)

        @specs |= other.specs

        true
      end

      protected

      def sorted_spec_names
        @specs.map(&:full_name).sort
      end

      private

      def equivalent?(other)
        name == other.name && version == other.version && source == other.source && dependencies == other.dependencies
      end

      def exemplary_spec
        @specs.first
      end
    end
  end
end
PK*J[�"��Eshare/gems/gems/bundler-2.6.7/lib/bundler/resolver/incompatibility.rbnu�[���# frozen_string_literal: true

module Bundler
  class Resolver
    class Incompatibility < PubGrub::Incompatibility
      attr_reader :extended_explanation

      def initialize(terms, cause:, custom_explanation: nil, extended_explanation: nil)
        @extended_explanation = extended_explanation

        super(terms, cause: cause, custom_explanation: custom_explanation)
      end
    end
  end
end
PK*J[;�Nڰ�Cshare/gems/gems/bundler-2.6.7/lib/bundler/rubygems_gem_installer.rbnu�[���# frozen_string_literal: true

require "rubygems/installer"

module Bundler
  class RubyGemsGemInstaller < Gem::Installer
    def check_executable_overwrite(filename)
      # Bundler needs to install gems regardless of binstub overwriting
    end

    def install
      pre_install_checks

      run_pre_install_hooks

      spec.loaded_from = spec_file

      # Completely remove any previous gem files
      strict_rm_rf gem_dir
      strict_rm_rf spec.extension_dir

      SharedHelpers.filesystem_access(gem_dir, :create) do
        FileUtils.mkdir_p gem_dir, mode: 0o755
      end

      SharedHelpers.filesystem_access(gem_dir, :write) do
        extract_files
      end

      build_extensions if spec.extensions.any?
      write_build_info_file
      run_post_build_hooks

      SharedHelpers.filesystem_access(bin_dir, :write) do
        generate_bin
      end

      generate_plugins

      write_spec

      SharedHelpers.filesystem_access("#{gem_home}/cache", :write) do
        write_cache_file
      end

      say spec.post_install_message unless spec.post_install_message.nil?

      run_post_install_hooks

      spec
    end

    if Bundler.rubygems.provides?("< 3.5")
      def pre_install_checks
        super
      rescue Gem::FilePermissionError
        # Ignore permission checks in RubyGems. Instead, go on, and try to write
        # for real. We properly handle permission errors when they happen.
        nil
      end
    end

    def ensure_writable_dir(dir)
      super
    rescue Gem::FilePermissionError
      # Ignore permission checks in RubyGems. Instead, go on, and try to write
      # for real. We properly handle permission errors when they happen.
      nil
    end

    def generate_plugins
      return unless Gem::Installer.instance_methods(false).include?(:generate_plugins)

      latest = Gem::Specification.stubs_for(spec.name).first
      return if latest && latest.version > spec.version

      ensure_writable_dir @plugins_dir

      if spec.plugins.empty?
        remove_plugins_for(spec, @plugins_dir)
      else
        regenerate_plugins_for(spec, @plugins_dir)
      end
    end

    if Bundler.rubygems.provides?("< 3.5.19")
      def generate_bin_script(filename, bindir)
        bin_script_path = File.join bindir, formatted_program_filename(filename)

        Gem.open_file_with_lock(bin_script_path) do
          require "fileutils"
          FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers

          File.open(bin_script_path, "wb", 0o755) do |file|
            file.write app_script_text(filename)
            file.chmod(options[:prog_mode] || 0o755)
          end
        end

        verbose bin_script_path

        generate_windows_script filename, bindir
      end
    end

    def build_extensions
      extension_cache_path = options[:bundler_extension_cache_path]
      extension_dir = spec.extension_dir
      unless extension_cache_path && extension_dir
        prepare_extension_build(extension_dir)
        return super
      end

      build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
      if build_complete && !options[:force]
        SharedHelpers.filesystem_access(File.dirname(extension_dir)) do |p|
          FileUtils.mkpath p
        end
        SharedHelpers.filesystem_access(extension_cache_path) do
          FileUtils.cp_r extension_cache_path, extension_dir
        end
      else
        prepare_extension_build(extension_dir)
        super
        SharedHelpers.filesystem_access(extension_cache_path.parent, &:mkpath)
        SharedHelpers.filesystem_access(extension_cache_path) do
          FileUtils.cp_r extension_dir, extension_cache_path
        end
      end
    end

    def spec
      if Bundler.rubygems.provides?("< 3.3.12") # RubyGems implementation rescues and re-raises errors before 3.3.12 and we don't want that
        @package.spec
      else
        super
      end
    end

    def gem_checksum
      Checksum.from_gem_package(@package)
    end

    private

    def prepare_extension_build(extension_dir)
      SharedHelpers.filesystem_access(extension_dir, :create) do
        FileUtils.mkdir_p extension_dir
      end
    end

    def strict_rm_rf(dir)
      return unless File.exist?(dir)
      return if Dir.empty?(dir)

      parent = File.dirname(dir)
      parent_st = File.stat(parent)

      if parent_st.world_writable? && !parent_st.sticky?
        raise InsecureInstallPathError.new(spec.full_name, dir)
      end

      begin
        FileUtils.remove_entry_secure(dir)
      rescue StandardError => e
        raise unless File.exist?(dir)

        raise DirectoryRemovalError.new(e, "Could not delete previous installation of `#{dir}`")
      end
    end
  end
end
PK*J[0��H�'�'5share/gems/gems/bundler-2.6.7/lib/bundler/injector.rbnu�[���# frozen_string_literal: true

module Bundler
  class Injector
    INJECTED_GEMS = "injected gems"

    def self.inject(new_deps, options = {})
      injector = new(new_deps, options)
      injector.inject(Bundler.default_gemfile, Bundler.default_lockfile)
    end

    def self.remove(gems, options = {})
      injector = new(gems, options)
      injector.remove(Bundler.default_gemfile, Bundler.default_lockfile)
    end

    def initialize(deps, options = {})
      @deps = deps
      @options = options
    end

    # @param [Pathname] gemfile_path The Gemfile in which to inject the new dependency.
    # @param [Pathname] lockfile_path The lockfile in which to inject the new dependency.
    # @return [Array]
    def inject(gemfile_path, lockfile_path)
      Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)

      # temporarily unfreeze
      Bundler.settings.temporary(deployment: false, frozen: false) do
        # evaluate the Gemfile we have now
        builder = Dsl.new
        builder.eval_gemfile(gemfile_path)

        # don't inject any gems that are already in the Gemfile
        @deps -= builder.dependencies

        # add new deps to the end of the in-memory Gemfile
        # Set conservative versioning to false because
        # we want to let the resolver resolve the version first
        builder.eval_gemfile(INJECTED_GEMS, build_gem_lines(false)) if @deps.any?

        # resolve to see if the new deps broke anything
        @definition = builder.to_definition(lockfile_path, {})
        @definition.remotely!

        # since nothing broke, we can add those gems to the gemfile
        append_to(gemfile_path, build_gem_lines(@options[:conservative_versioning])) if @deps.any?

        # since we resolved successfully, write out the lockfile
        @definition.lock

        # invalidate the cached Bundler.definition
        Bundler.reset_paths!

        # return an array of the deps that we added
        @deps
      end
    end

    # @param [Pathname] gemfile_path The Gemfile from which to remove dependencies.
    # @param [Pathname] lockfile_path The lockfile from which to remove dependencies.
    # @return [Array]
    def remove(gemfile_path, lockfile_path)
      # remove gems from each gemfiles we have
      Bundler.definition.gemfiles.each do |path|
        deps = remove_deps(path)

        show_warning("No gems were removed from the gemfile.") if deps.empty?

        deps.each {|dep| Bundler.ui.confirm "#{SharedHelpers.pretty_dependency(dep)} was removed." }
      end

      # Invalidate the cached Bundler.definition.
      # This prevents e.g. `bundle remove ...` from using outdated information.
      Bundler.reset_paths!
    end

    private

    def conservative_version(spec)
      version = spec.version
      return ">= 0" if version.nil?
      segments = version.segments
      seg_end_index = version >= Gem::Version.new("1.0") ? 1 : 2

      prerelease_suffix = version.to_s.delete_prefix(version.release.to_s) if version.prerelease?
      "#{version_prefix}#{segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
    end

    def version_prefix
      if @options[:strict]
        "= "
      elsif @options[:optimistic]
        ">= "
      else
        "~> "
      end
    end

    def build_gem_lines(conservative_versioning)
      @deps.map do |d|
        name = d.name.dump

        requirement = if conservative_versioning
          ", \"#{conservative_version(@definition.specs[d.name][0])}\""
        else
          ", #{d.requirement.as_list.map(&:dump).join(", ")}"
        end

        if d.groups != Array(:default)
          group = d.groups.size == 1 ? ", group: #{d.groups.first.inspect}" : ", groups: #{d.groups.inspect}"
        end

        source = ", source: \"#{d.source}\"" unless d.source.nil?
        path = ", path: \"#{d.path}\"" unless d.path.nil?
        git = ", git: \"#{d.git}\"" unless d.git.nil?
        github = ", github: \"#{d.github}\"" unless d.github.nil?
        branch = ", branch: \"#{d.branch}\"" unless d.branch.nil?
        ref = ", ref: \"#{d.ref}\"" unless d.ref.nil?
        glob = ", glob: \"#{d.glob}\"" unless d.glob.nil?
        require_path = ", require: #{convert_autorequire(d.autorequire)}" unless d.autorequire.nil?

        %(gem #{name}#{requirement}#{group}#{source}#{path}#{git}#{github}#{branch}#{ref}#{glob}#{require_path})
      end.join("\n")
    end

    def append_to(gemfile_path, new_gem_lines)
      gemfile_path.open("a") do |f|
        f.puts
        f.puts new_gem_lines
      end
    end

    # evaluates a gemfile to remove the specified gem
    # from it.
    def remove_deps(gemfile_path)
      initial_gemfile = File.readlines(gemfile_path)

      Bundler.ui.info "Removing gems from #{gemfile_path}"

      # evaluate the Gemfile we have
      builder = Dsl.new
      builder.eval_gemfile(gemfile_path)

      removed_deps = remove_gems_from_dependencies(builder, @deps, gemfile_path)

      # abort the operation if no gems were removed
      # no need to operate on gemfile further
      return [] if removed_deps.empty?

      cleaned_gemfile = remove_gems_from_gemfile(@deps, gemfile_path)

      SharedHelpers.write_to_gemfile(gemfile_path, cleaned_gemfile)

      # check for errors
      # including extra gems being removed
      # or some gems not being removed
      # and return the actual removed deps
      cross_check_for_errors(gemfile_path, builder.dependencies, removed_deps, initial_gemfile)
    end

    # @param [Dsl]      builder Dsl object of current Gemfile.
    # @param [Array]    gems Array of names of gems to be removed.
    # @param [Pathname] gemfile_path Path of the Gemfile.
    # @return [Array]   Array of removed dependencies.
    def remove_gems_from_dependencies(builder, gems, gemfile_path)
      removed_deps = []

      gems.each do |gem_name|
        deleted_dep = builder.dependencies.find {|d| d.name == gem_name }

        if deleted_dep.nil?
          raise GemfileError, "`#{gem_name}` is not specified in #{gemfile_path} so it could not be removed."
        end

        builder.dependencies.delete(deleted_dep)

        removed_deps << deleted_dep
      end

      removed_deps
    end

    # @param [Array] gems            Array of names of gems to be removed.
    # @param [Pathname] gemfile_path The Gemfile from which to remove dependencies.
    def remove_gems_from_gemfile(gems, gemfile_path)
      patterns = /gem\s+(['"])#{Regexp.union(gems)}\1|gem\s*\((['"])#{Regexp.union(gems)}\2.*\)/
      new_gemfile = []
      multiline_removal = false
      File.readlines(gemfile_path).each do |line|
        match_data = line.match(patterns)
        if match_data && is_not_within_comment?(line, match_data)
          multiline_removal = line.rstrip.end_with?(",")
          # skip lines which match the regex
          next
        end

        # skip followup lines until line does not end with ','
        new_gemfile << line unless multiline_removal
        multiline_removal = line.rstrip.end_with?(",") if multiline_removal
      end

      # remove line \n and append them with other strings
      new_gemfile.each_with_index do |_line, index|
        if new_gemfile[index + 1] == "\n"
          new_gemfile[index] += new_gemfile[index + 1]
          new_gemfile.delete_at(index + 1)
        end
      end

      %w[group source env install_if].each {|block| remove_nested_blocks(new_gemfile, block) }

      new_gemfile.join.chomp
    end

    # @param [String] line          Individual line of gemfile content.
    # @param [MatchData] match_data Data about Regex match.
    def is_not_within_comment?(line, match_data)
      match_start_index = match_data.offset(0).first
      !line[0..match_start_index].include?("#")
    end

    # @param [Array] gemfile       Array of gemfile contents.
    # @param [String] block_name   Name of block name to look for.
    def remove_nested_blocks(gemfile, block_name)
      nested_blocks = 0

      # count number of nested blocks
      gemfile.each_with_index {|line, index| nested_blocks += 1 if !gemfile[index + 1].nil? && gemfile[index + 1].include?(block_name) && line.include?(block_name) }

      while nested_blocks >= 0
        nested_blocks -= 1

        gemfile.each_with_index do |line, index|
          next unless !line.nil? && line.strip.start_with?(block_name)
          if /^\s*end\s*$/.match?(gemfile[index + 1])
            gemfile[index] = nil
            gemfile[index + 1] = nil
          end
        end

        gemfile.compact!
      end
    end

    # @param [Pathname] gemfile_path   The Gemfile from which to remove dependencies.
    # @param [Array] original_deps     Array of original dependencies.
    # @param [Array] removed_deps      Array of removed dependencies.
    # @param [Array] initial_gemfile   Contents of original Gemfile before any operation.
    def cross_check_for_errors(gemfile_path, original_deps, removed_deps, initial_gemfile)
      # evaluate the new gemfile to look for any failure cases
      builder = Dsl.new
      builder.eval_gemfile(gemfile_path)

      # record gems which were removed but not requested
      extra_removed_gems = original_deps - builder.dependencies

      # if some extra gems were removed then raise error
      # and revert Gemfile to original
      unless extra_removed_gems.empty?
        SharedHelpers.write_to_gemfile(gemfile_path, initial_gemfile.join)

        raise InvalidOption, "Gems could not be removed. #{extra_removed_gems.join(", ")} would also have been removed. Bundler cannot continue."
      end

      # record gems which could not be removed due to some reasons
      errored_deps = builder.dependencies.select {|d| d.gemfile == gemfile_path } & removed_deps.select {|d| d.gemfile == gemfile_path }

      show_warning "#{errored_deps.map(&:name).join(", ")} could not be removed." unless errored_deps.empty?

      # return actual removed dependencies
      removed_deps - errored_deps
    end

    def show_warning(message)
      Bundler.ui.info Bundler.ui.add_color(message, :yellow)
    end

    def convert_autorequire(autorequire)
      autorequire = autorequire.first
      return autorequire if autorequire == "false"
      autorequire.inspect
    end
  end
end
PK*J[��ЋGG;share/gems/gems/bundler-2.6.7/lib/bundler/match_platform.rbnu�[���# frozen_string_literal: true

require_relative "gem_helpers"

module Bundler
  module MatchPlatform
    include GemHelpers

    def match_platform(p)
      MatchPlatform.platforms_match?(platform, p)
    end

    def self.platforms_match?(gemspec_platform, local_platform)
      return true if gemspec_platform.nil?
      return true if gemspec_platform == Gem::Platform::RUBY
      return true if local_platform == gemspec_platform
      gemspec_platform = Gem::Platform.new(gemspec_platform)
      return true if gemspec_platform === local_platform

      false
    end
  end
end
PK*J[Y�

9share/gems/gems/bundler-2.6.7/lib/bundler/current_ruby.rbnu�[���# frozen_string_literal: true

require_relative "rubygems_ext"

module Bundler
  # Returns current version of Ruby
  #
  # @return [CurrentRuby] Current version of Ruby
  def self.current_ruby
    @current_ruby ||= CurrentRuby.new
  end

  class CurrentRuby
    ALL_RUBY_VERSIONS = (18..27).to_a.concat((30..35).to_a).freeze
    KNOWN_MINOR_VERSIONS = ALL_RUBY_VERSIONS.map {|v| v.digits.reverse.join(".") }.freeze
    KNOWN_MAJOR_VERSIONS = ALL_RUBY_VERSIONS.map {|v| v.digits.last.to_s }.uniq.freeze
    PLATFORM_MAP = {
      ruby: [Gem::Platform::RUBY, CurrentRuby::ALL_RUBY_VERSIONS],
      mri: [Gem::Platform::RUBY, CurrentRuby::ALL_RUBY_VERSIONS],
      rbx: [Gem::Platform::RUBY],
      truffleruby: [Gem::Platform::RUBY],
      jruby: [Gem::Platform::JAVA, [18, 19]],
      windows: [Gem::Platform::WINDOWS, CurrentRuby::ALL_RUBY_VERSIONS],
      # deprecated
      mswin: [Gem::Platform::MSWIN, CurrentRuby::ALL_RUBY_VERSIONS],
      mswin64: [Gem::Platform::MSWIN64, CurrentRuby::ALL_RUBY_VERSIONS - [18]],
      mingw: [Gem::Platform::UNIVERSAL_MINGW, CurrentRuby::ALL_RUBY_VERSIONS],
      x64_mingw: [Gem::Platform::UNIVERSAL_MINGW, CurrentRuby::ALL_RUBY_VERSIONS - [18, 19]],
    }.each_with_object({}) do |(platform, spec), hash|
      hash[platform] = spec[0]
      spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
    end.freeze

    def ruby?
      return true if Bundler::GemHelpers.generic_local_platform_is_ruby?

      !windows? && (RUBY_ENGINE == "ruby" || RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev" || RUBY_ENGINE == "truffleruby")
    end

    def mri?
      !windows? && RUBY_ENGINE == "ruby"
    end

    def rbx?
      ruby? && RUBY_ENGINE == "rbx"
    end

    def jruby?
      RUBY_ENGINE == "jruby"
    end

    def maglev?
      RUBY_ENGINE == "maglev"
    end

    def truffleruby?
      RUBY_ENGINE == "truffleruby"
    end

    def windows?
      Gem.win_platform?
    end
    alias_method :mswin?, :windows?
    alias_method :mswin64?, :windows?
    alias_method :mingw?, :windows?
    alias_method :x64_mingw?, :windows?

    (KNOWN_MINOR_VERSIONS + KNOWN_MAJOR_VERSIONS).each do |version|
      trimmed_version = version.tr(".", "")
      define_method(:"on_#{trimmed_version}?") do
        RUBY_VERSION.start_with?("#{version}.")
      end

      all_platforms = PLATFORM_MAP.keys << "maglev"
      all_platforms.each do |platform|
        define_method(:"#{platform}_#{trimmed_version}?") do
          send(:"#{platform}?") && send(:"on_#{trimmed_version}?")
        end
      end
    end
  end
end
PK*J[x�qc��Ishare/gems/gems/bundler-2.6.7/lib/bundler/installer/parallel_installer.rbnu�[���# frozen_string_literal: true

require_relative "../worker"
require_relative "gem_installer"

module Bundler
  class ParallelInstaller
    class SpecInstallation
      attr_accessor :spec, :name, :full_name, :post_install_message, :state, :error
      def initialize(spec)
        @spec = spec
        @name = spec.name
        @full_name = spec.full_name
        @state = :none
        @post_install_message = ""
        @error = nil
      end

      def installed?
        state == :installed
      end

      def enqueued?
        state == :enqueued
      end

      def failed?
        state == :failed
      end

      def ready_to_enqueue?
        state == :none
      end

      def has_post_install_message?
        !post_install_message.empty?
      end

      def ignorable_dependency?(dep)
        dep.type == :development || dep.name == @name
      end

      # Checks installed dependencies against spec's dependencies to make
      # sure needed dependencies have been installed.
      def dependencies_installed?(installed_specs)
        dependencies.all? {|d| installed_specs.include? d.name }
      end

      # Represents only the non-development dependencies, the ones that are
      # itself and are in the total list.
      def dependencies
        @dependencies ||= all_dependencies.reject {|dep| ignorable_dependency? dep }
      end

      # Represents all dependencies
      def all_dependencies
        @spec.dependencies
      end

      def to_s
        "#<#{self.class} #{full_name} (#{state})>"
      end
    end

    def self.call(*args, **kwargs)
      new(*args, **kwargs).call
    end

    attr_reader :size

    def initialize(installer, all_specs, size, standalone, force, local: false, skip: nil)
      @installer = installer
      @size = size
      @standalone = standalone
      @force = force
      @local = local
      @specs = all_specs.map {|s| SpecInstallation.new(s) }
      @specs.each do |spec_install|
        spec_install.state = :installed if skip.include?(spec_install.name)
      end if skip
      @spec_set = all_specs
      @rake = @specs.find {|s| s.name == "rake" unless s.installed? }
    end

    def call
      if @rake
        do_install(@rake, 0)
        Gem::Specification.reset
      end

      if @size > 1
        install_with_worker
      else
        install_serially
      end

      handle_error if failed_specs.any?
      @specs
    ensure
      worker_pool&.stop
    end

    private

    def failed_specs
      @specs.select(&:failed?)
    end

    def install_with_worker
      enqueue_specs
      process_specs until finished_installing?
    end

    def install_serially
      until finished_installing?
        raise "failed to find a spec to enqueue while installing serially" unless spec_install = @specs.find(&:ready_to_enqueue?)
        spec_install.state = :enqueued
        do_install(spec_install, 0)
      end
    end

    def worker_pool
      @worker_pool ||= Bundler::Worker.new @size, "Parallel Installer", lambda {|spec_install, worker_num|
        do_install(spec_install, worker_num)
      }
    end

    def do_install(spec_install, worker_num)
      Plugin.hook(Plugin::Events::GEM_BEFORE_INSTALL, spec_install)
      gem_installer = Bundler::GemInstaller.new(
        spec_install.spec, @installer, @standalone, worker_num, @force, @local
      )
      success, message = gem_installer.install_from_spec
      if success
        spec_install.state = :installed
        spec_install.post_install_message = message unless message.nil?
      else
        spec_install.error = "#{message}\n\n#{require_tree_for_spec(spec_install.spec)}"
        spec_install.state = :failed
      end
      Plugin.hook(Plugin::Events::GEM_AFTER_INSTALL, spec_install)
      spec_install
    end

    # Dequeue a spec and save its post-install message and then enqueue the
    # remaining specs.
    # Some specs might've had to wait til this spec was installed to be
    # processed so the call to `enqueue_specs` is important after every
    # dequeue.
    def process_specs
      worker_pool.deq
      enqueue_specs
    end

    def finished_installing?
      @specs.all? do |spec|
        return true if spec.failed?
        spec.installed?
      end
    end

    def handle_error
      errors = failed_specs.map(&:error)
      if exception = errors.find {|e| e.is_a?(Bundler::BundlerError) }
        raise exception
      end
      raise Bundler::InstallError, errors.join("\n\n")
    end

    def require_tree_for_spec(spec)
      tree = @spec_set.what_required(spec)
      t = String.new("In #{File.basename(SharedHelpers.default_gemfile)}:\n")
      tree.each_with_index do |s, depth|
        t << "  " * depth.succ << s.name
        unless tree.last == s
          t << %( was resolved to #{s.version}, which depends on)
        end
        t << %(\n)
      end
      t
    end

    # Keys in the remains hash represent uninstalled gems specs.
    # We enqueue all gem specs that do not have any dependencies.
    # Later we call this lambda again to install specs that depended on
    # previously installed specifications. We continue until all specs
    # are installed.
    def enqueue_specs
      installed_specs = {}
      @specs.each do |spec|
        next unless spec.installed?
        installed_specs[spec.name] = true
      end

      @specs.each do |spec|
        if spec.ready_to_enqueue? && spec.dependencies_installed?(installed_specs)
          spec.state = :enqueued
          worker_pool.enq spec
        end
      end
    end
  end
end
PK*J[b��



Dshare/gems/gems/bundler-2.6.7/lib/bundler/installer/gem_installer.rbnu�[���# frozen_string_literal: true

module Bundler
  class GemInstaller
    attr_reader :spec, :standalone, :worker, :force, :local, :installer

    def initialize(spec, installer, standalone = false, worker = 0, force = false, local = false)
      @spec = spec
      @installer = installer
      @standalone = standalone
      @worker = worker
      @force = force
      @local = local
    end

    def install_from_spec
      post_install_message = install
      Bundler.ui.debug "#{worker}:  #{spec.name} (#{spec.version}) from #{spec.loaded_from}"
      generate_executable_stubs
      [true, post_install_message]
    rescue Bundler::InstallHookError, Bundler::SecurityError, Bundler::APIResponseMismatchError, Bundler::InsecureInstallPathError
      raise
    rescue Errno::ENOSPC
      [false, out_of_space_message]
    rescue Bundler::BundlerError, Gem::InstallError => e
      [false, specific_failure_message(e)]
    end

    private

    def specific_failure_message(e)
      message = "#{e.class}: #{e.message}\n"
      message += "  " + e.backtrace.join("\n  ") + "\n\n"
      message = message.lines.first + Bundler.ui.add_color(message.lines.drop(1).join, :clear)
      message + Bundler.ui.add_color(failure_message, :red)
    end

    def failure_message
      install_error_message
    end

    def install_error_message
      "An error occurred while installing #{spec.name} (#{spec.version}), and Bundler cannot continue."
    end

    def spec_settings
      # Fetch the build settings, if there are any
      if settings = Bundler.settings["build.#{spec.name}"]
        require "shellwords"
        Shellwords.shellsplit(settings)
      end
    end

    def install
      spec.source.install(
        spec,
        force: force,
        local: local,
        build_args: Array(spec_settings),
        previous_spec: previous_spec,
      )
    end

    def previous_spec
      locked_gems = installer.definition.locked_gems
      return unless locked_gems

      locked_gems.specs.find {|s| s.name == spec.name }
    end

    def out_of_space_message
      "#{install_error_message}\nYour disk is out of space. Free some space to be able to install your bundle."
    end

    def generate_executable_stubs
      return if Bundler.feature_flag.forget_cli_options?
      return if Bundler.settings[:inline]
      if Bundler.settings[:bin] && standalone
        installer.generate_standalone_bundler_executable_stubs(spec)
      elsif Bundler.settings[:bin]
        installer.generate_bundler_executable_stubs(spec, force: true)
      end
    end
  end
end
PK*J[jg�BBAshare/gems/gems/bundler-2.6.7/lib/bundler/installer/standalone.rbnu�[���# frozen_string_literal: true

module Bundler
  class Standalone
    def initialize(groups, definition)
      @specs = definition.specs_for(groups)
    end

    def generate
      SharedHelpers.filesystem_access(bundler_path) do |p|
        FileUtils.mkdir_p(p)
      end
      File.open File.join(bundler_path, "setup.rb"), "w" do |file|
        file.puts "require 'rbconfig'"
        file.puts prevent_gem_activation
        file.puts define_path_helpers
        file.puts reverse_rubygems_kernel_mixin
        paths.each do |path|
          if Pathname.new(path).absolute?
            file.puts %($:.unshift "#{path}")
          else
            file.puts %($:.unshift File.expand_path("\#{__dir__}/#{path}"))
          end
        end
      end
    end

    private

    def paths
      @specs.flat_map do |spec|
        next if spec.name == "bundler"
        Array(spec.require_paths).map do |path|
          gem_path(path, spec).
            sub(version_dir, '#{RUBY_ENGINE}/#{Gem.ruby_api_version}').
            sub(extensions_dir, 'extensions/\k<platform>/#{Gem.extension_api_version}')
          # This is a static string intentionally. It's interpolated at a later time.
        end
      end.compact
    end

    def version_dir
      "#{RUBY_ENGINE}/#{Gem.ruby_api_version}"
    end

    def extensions_dir
      %r{extensions/(?<platform>[^/]+)/#{Regexp.escape(Gem.extension_api_version)}}
    end

    def bundler_path
      Bundler.root.join(Bundler.settings[:path].to_s, "bundler")
    end

    def gem_path(path, spec)
      full_path = Pathname.new(path).absolute? ? path : File.join(spec.full_gem_path, path)
      if spec.source.instance_of?(Source::Path) && spec.source.path.absolute?
        full_path
      else
        SharedHelpers.relative_path_to(full_path, from: Bundler.root.join(bundler_path))
      end
    end

    def prevent_gem_activation
      <<~'END'
        module Kernel
          remove_method(:gem) if private_method_defined?(:gem)

          def gem(*)
          end

          private :gem
        end
      END
    end

    def define_path_helpers
      <<~'END'
        unless defined?(Gem)
          module Gem
            def self.ruby_api_version
              RbConfig::CONFIG["ruby_version"]
            end

            def self.extension_api_version
              if 'no' == RbConfig::CONFIG['ENABLE_SHARED']
                "#{ruby_api_version}-static"
              else
                ruby_api_version
              end
            end
          end
        end
      END
    end

    def reverse_rubygems_kernel_mixin
      <<~END
      if Gem.respond_to?(:discover_gems_on_require=)
        Gem.discover_gems_on_require = false
      else
        [::Kernel.singleton_class, ::Kernel].each do |k|
          if k.private_method_defined?(:gem_original_require)
            private_require = k.private_method_defined?(:require)
            k.send(:remove_method, :require)
            k.send(:define_method, :require, k.instance_method(:gem_original_require))
            k.send(:private, :require) if private_require
          end
        end
      end
      END
    end
  end
end
PK*J[m��,aa8share/gems/gems/bundler-2.6.7/lib/bundler/source_list.rbnu�[���# frozen_string_literal: true

module Bundler
  class SourceList
    attr_reader :path_sources,
      :git_sources,
      :plugin_sources,
      :global_path_source,
      :metadata_source

    def global_rubygems_source
      @global_rubygems_source ||= rubygems_aggregate_class.new("allow_local" => true)
    end

    def initialize
      @path_sources           = []
      @git_sources            = []
      @plugin_sources         = []
      @global_rubygems_source = nil
      @global_path_source     = nil
      @rubygems_sources       = []
      @metadata_source        = Source::Metadata.new

      @merged_gem_lockfile_sections = false
      @local_mode = true
    end

    def merged_gem_lockfile_sections?
      @merged_gem_lockfile_sections
    end

    def merged_gem_lockfile_sections!(replacement_source)
      @merged_gem_lockfile_sections = true
      @global_rubygems_source = replacement_source
    end

    def aggregate_global_source?
      global_rubygems_source.multiple_remotes?
    end

    def implicit_global_source?
      global_rubygems_source.no_remotes?
    end

    def add_path_source(options = {})
      if options["gemspec"]
        add_source_to_list Source::Gemspec.new(options), path_sources
      else
        path_source = add_source_to_list Source::Path.new(options), path_sources
        @global_path_source ||= path_source if options["global"]
        path_source
      end
    end

    def add_git_source(options = {})
      add_source_to_list(Source::Git.new(options), git_sources).tap do |source|
        warn_on_git_protocol(source)
      end
    end

    def add_rubygems_source(options = {})
      new_source = Source::Rubygems.new(options)
      return @global_rubygems_source if @global_rubygems_source == new_source

      add_source_to_list new_source, @rubygems_sources
    end

    def add_plugin_source(source, options = {})
      add_source_to_list Plugin.source(source).new(options), @plugin_sources
    end

    def add_global_rubygems_remote(uri)
      global_rubygems_source.add_remote(uri)
      global_rubygems_source
    end

    def local_mode?
      @local_mode
    end

    def default_source
      global_path_source || global_rubygems_source
    end

    def rubygems_sources
      non_global_rubygems_sources + [global_rubygems_source]
    end

    def non_global_rubygems_sources
      @rubygems_sources
    end

    def rubygems_remotes
      rubygems_sources.flat_map(&:remotes).uniq
    end

    def all_sources
      path_sources + git_sources + plugin_sources + rubygems_sources + [metadata_source]
    end

    def non_default_explicit_sources
      all_sources - [default_source, metadata_source]
    end

    def get(source)
      source_list_for(source).find {|s| equivalent_source?(source, s) }
    end

    def lock_sources
      lock_other_sources + lock_rubygems_sources
    end

    def lock_other_sources
      (path_sources + git_sources + plugin_sources).sort_by(&:identifier)
    end

    def lock_rubygems_sources
      if merged_gem_lockfile_sections?
        [combine_rubygems_sources]
      else
        rubygems_sources.sort_by(&:identifier)
      end
    end

    # Returns true if there are changes
    def replace_sources!(replacement_sources)
      return false if replacement_sources.empty?

      @rubygems_sources, @path_sources, @git_sources, @plugin_sources = map_sources(replacement_sources)
      @global_rubygems_source = global_replacement_source(replacement_sources)

      different_sources?(lock_sources, replacement_sources)
    end

    # Returns true if there are changes
    def expired_sources?(replacement_sources)
      return false if replacement_sources.empty?

      lock_sources = dup_with_replaced_sources(replacement_sources).lock_sources

      different_sources?(lock_sources, replacement_sources)
    end

    def prefer_local!
      all_sources.each(&:prefer_local!)
    end

    def local_only!
      all_sources.each(&:local_only!)
    end

    def local!
      all_sources.each(&:local!)
    end

    def cached!
      all_sources.each(&:cached!)
    end

    def remote!
      @local_mode = false

      all_sources.each(&:remote!)
    end

    private

    def dup_with_replaced_sources(replacement_sources)
      new_source_list = dup
      new_source_list.replace_sources!(replacement_sources)
      new_source_list
    end

    def map_sources(replacement_sources)
      rubygems = @rubygems_sources.map do |source|
        replace_rubygems_source(replacement_sources, source)
      end

      git, plugin = [@git_sources, @plugin_sources].map do |sources|
        sources.map do |source|
          replace_source(replacement_sources, source)
        end
      end

      path = @path_sources.map do |source|
        replace_path_source(replacement_sources, source)
      end

      [rubygems, path, git, plugin]
    end

    def global_replacement_source(replacement_sources)
      replace_rubygems_source(replacement_sources, global_rubygems_source, &:local!)
    end

    def replace_rubygems_source(replacement_sources, gemfile_source)
      replace_source(replacement_sources, gemfile_source) do |replacement_source|
        # locked sources never include credentials so always prefer remotes from the gemfile
        replacement_source.remotes = gemfile_source.remotes

        yield replacement_source if block_given?

        replacement_source
      end
    end

    def replace_source(replacement_sources, gemfile_source)
      replacement_source = replacement_sources.find {|s| s == gemfile_source }
      return gemfile_source unless replacement_source

      replacement_source = yield(replacement_source) if block_given?

      replacement_source
    end

    def replace_path_source(replacement_sources, gemfile_source)
      replace_source(replacement_sources, gemfile_source) do |replacement_source|
        if gemfile_source.is_a?(Source::Gemspec)
          gemfile_source.checksum_store = replacement_source.checksum_store
          gemfile_source
        else
          replacement_source
        end
      end
    end

    def different_sources?(lock_sources, replacement_sources)
      !equivalent_sources?(lock_sources, replacement_sources)
    end

    def rubygems_aggregate_class
      Source::Rubygems
    end

    def add_source_to_list(source, list)
      list.unshift(source).uniq!
      source
    end

    def source_list_for(source)
      case source
      when Source::Git          then git_sources
      when Source::Path         then path_sources
      when Source::Rubygems     then rubygems_sources
      when Plugin::API::Source  then plugin_sources
      else raise ArgumentError, "Invalid source: #{source.inspect}"
      end
    end

    def combine_rubygems_sources
      Source::Rubygems.new("remotes" => rubygems_remotes)
    end

    def warn_on_git_protocol(source)
      return if Bundler.settings["git.allow_insecure"]

      if /^git\:/.match?(source.uri)
        Bundler.ui.warn "The git source `#{source.uri}` uses the `git` protocol, " \
          "which transmits data without encryption. Disable this warning with " \
          "`bundle config set --local git.allow_insecure true`, or switch to the `https` " \
          "protocol to keep your data secure."
      end
    end

    def equivalent_sources?(lock_sources, replacement_sources)
      lock_sources.sort_by(&:identifier) == replacement_sources.sort_by(&:identifier)
    end

    def equivalent_source?(source, other_source)
      source == other_source
    end
  end
end
PK*J[�8Nۢ�3share/gems/gems/bundler-2.6.7/lib/bundler/digest.rbnu�[���# frozen_string_literal: true

# This code was extracted from https://github.com/Solistra/ruby-digest which is under public domain
module Bundler
  module Digest
    # The initial constant values for the 32-bit constant words A, B, C, D, and
    # E, respectively.
    SHA1_WORDS = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0].freeze

    # The 8-bit field used for bitwise `AND` masking. Defaults to `0xFFFFFFFF`.
    SHA1_MASK = 0xFFFFFFFF

    class << self
      def sha1(string)
        unless string.is_a?(String)
          raise TypeError, "can't convert #{string.class.inspect} into String"
        end

        buffer = string.b

        words = SHA1_WORDS.dup
        generate_split_buffer(buffer) do |chunk|
          w = []
          chunk.each_slice(4) do |a, b, c, d|
            w << (((a << 8 | b) << 8 | c) << 8 | d)
          end
          a, b, c, d, e = *words
          (16..79).each do |i|
            w[i] = SHA1_MASK & rotate((w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]), 1)
          end
          0.upto(79) do |i|
            case i
            when  0..19
              f = ((b & c) | (~b & d))
              k = 0x5A827999
            when 20..39
              f = (b ^ c ^ d)
              k = 0x6ED9EBA1
            when 40..59
              f = ((b & c) | (b & d) | (c & d))
              k = 0x8F1BBCDC
            when 60..79
              f = (b ^ c ^ d)
              k = 0xCA62C1D6
            end
            t = SHA1_MASK & rotate(a, 5) + f + e + k + w[i]
            a, b, c, d, e = t, a, SHA1_MASK & rotate(b, 30), c, d # rubocop:disable Style/ParallelAssignment
          end
          mutated = [a, b, c, d, e]
          words.map!.with_index {|word, index| SHA1_MASK & (word + mutated[index]) }
        end

        words.pack("N*").unpack1("H*")
      end

      private

      def generate_split_buffer(string, &block)
        size   = string.bytesize * 8
        buffer = string.bytes << 128
        buffer << 0 while buffer.size % 64 != 56
        buffer.concat([size].pack("Q>").bytes)
        buffer.each_slice(64, &block)
      end

      def rotate(value, spaces)
        value << spaces | value >> (32 - spaces)
      end
    end
  end
end
PK*J[}X���6share/gems/gems/bundler-2.6.7/lib/bundler/gem_tasks.rbnu�[���# frozen_string_literal: true

require "rake/clean"
CLOBBER.include "pkg"

require_relative "gem_helper"
Bundler::GemHelper.install_tasks
PK*J[(�119share/gems/gems/bundler-2.6.7/lib/bundler/plugin/index.rbnu�[���# frozen_string_literal: true

module Bundler
  # Manages which plugins are installed and their sources. This also is supposed to map
  # which plugin does what (currently the features are not implemented so this class is
  # now a stub class).
  module Plugin
    class Index
      class CommandConflict < PluginError
        def initialize(plugin, commands)
          msg = "Command(s) `#{commands.join("`, `")}` declared by #{plugin} are already registered."
          super msg
        end
      end

      class SourceConflict < PluginError
        def initialize(plugin, sources)
          msg = "Source(s) `#{sources.join("`, `")}` declared by #{plugin} are already registered."
          super msg
        end
      end

      attr_reader :commands

      def initialize
        @plugin_paths = {}
        @commands = {}
        @sources = {}
        @hooks = {}
        @load_paths = {}

        begin
          load_index(global_index_file, true)
        rescue PermissionError
          # no need to fail when on a read-only FS, for example
          nil
        rescue ArgumentError => e
          # ruby 3.4 checks writability in Dir.tmpdir
          raise unless e.message&.include?("could not find a temporary directory")
          nil
        end
        load_index(local_index_file) if SharedHelpers.in_bundle?
      end

      # This function is to be called when a new plugin is installed. This
      # function shall add the functions of the plugin to existing maps and also
      # the name to source location.
      #
      # @param [String] name of the plugin to be registered
      # @param [String] path where the plugin is installed
      # @param [Array<String>] load_paths for the plugin
      # @param [Array<String>] commands that are handled by the plugin
      # @param [Array<String>] sources that are handled by the plugin
      def register_plugin(name, path, load_paths, commands, sources, hooks)
        old_commands = @commands.dup

        common = commands & @commands.keys
        raise CommandConflict.new(name, common) unless common.empty?
        commands.each {|c| @commands[c] = name }

        common = sources & @sources.keys
        raise SourceConflict.new(name, common) unless common.empty?
        sources.each {|k| @sources[k] = name }

        hooks.each do |event|
          event_hooks = (@hooks[event] ||= []) << name
          event_hooks.uniq!
        end

        @plugin_paths[name] = path
        @load_paths[name] = load_paths
        save_index
      rescue StandardError
        @commands = old_commands
        raise
      end

      def unregister_plugin(name)
        @commands.delete_if {|_, v| v == name }
        @sources.delete_if {|_, v| v == name }
        @hooks.each do |hook, names|
          names.delete(name)
          @hooks.delete(hook) if names.empty?
        end
        @plugin_paths.delete(name)
        @load_paths.delete(name)
        save_index
      end

      # Path of default index file
      def index_file
        Plugin.root.join("index")
      end

      # Path where the global index file is stored
      def global_index_file
        Plugin.global_root.join("index")
      end

      # Path where the local index file is stored
      def local_index_file
        Plugin.local_root.join("index")
      end

      def plugin_path(name)
        Pathname.new @plugin_paths[name]
      end

      def load_paths(name)
        @load_paths[name]
      end

      # Fetch the name of plugin handling the command
      def command_plugin(command)
        @commands[command]
      end

      def installed?(name)
        @plugin_paths[name]
      end

      def installed_plugins
        @plugin_paths.keys
      end

      def plugin_commands(plugin)
        @commands.find_all {|_, n| n == plugin }.map(&:first)
      end

      def source?(source)
        @sources.key? source
      end

      def source_plugin(name)
        @sources[name]
      end

      # Returns the list of plugin names handling the passed event
      def hook_plugins(event)
        @hooks[event] || []
      end

      # This plugin is installed inside the .bundle/plugin directory,
      # and thus is managed solely by Bundler
      def installed_in_plugin_root?(name)
        return false unless (path = installed?(name))

        path.start_with?("#{Plugin.root}/")
      end

      private

      # Reads the index file from the directory and initializes the instance
      # variables.
      #
      # It skips the sources if the second param is true
      # @param [Pathname] index file path
      # @param [Boolean] is the index file global index
      def load_index(index_file, global = false)
        SharedHelpers.filesystem_access(index_file, :read) do |index_f|
          valid_file = index_f&.exist? && !index_f.size.zero?
          break unless valid_file

          data = index_f.read

          require_relative "../yaml_serializer"
          index = YAMLSerializer.load(data)

          @commands.merge!(index["commands"])
          @hooks.merge!(index["hooks"])
          @load_paths.merge!(index["load_paths"])
          @plugin_paths.merge!(index["plugin_paths"])
          @sources.merge!(index["sources"]) unless global
        end
      end

      # Should be called when any of the instance variables change. Stores the
      # instance variables in YAML format. (The instance variables are supposed
      # to be only String key value pairs)
      def save_index
        index = {
          "commands" => @commands,
          "hooks" => @hooks,
          "load_paths" => @load_paths,
          "plugin_paths" => @plugin_paths,
          "sources" => @sources,
        }

        require_relative "../yaml_serializer"
        SharedHelpers.filesystem_access(index_file) do |index_f|
          FileUtils.mkdir_p(index_f.dirname)
          File.open(index_f, "w") {|f| f.puts YAMLSerializer.dump(index) }
        end
      end
    end
  end
end
PK*J[��}��:share/gems/gems/bundler-2.6.7/lib/bundler/plugin/events.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    module Events
      def self.define(const, event)
        const = const.to_sym.freeze
        if const_defined?(const) && const_get(const) != event
          raise ArgumentError, "Attempting to reassign #{const} to a different value"
        end
        const_set(const, event) unless const_defined?(const)
        @events ||= {}
        @events[event] = const
      end
      private_class_method :define

      def self.reset
        @events.each_value do |const|
          remove_const(const)
        end
        @events = nil
      end
      private_class_method :reset

      # Check if an event has been defined
      # @param event [String] An event to check
      # @return [Boolean] A boolean indicating if the event has been defined
      def self.defined_event?(event)
        @events ||= {}
        @events.key?(event)
      end

      # @!parse
      #   A hook called before each individual gem is installed
      #   Includes a Bundler::ParallelInstaller::SpecInstallation.
      #   No state, error, post_install_message will be present as nothing has installed yet
      #   GEM_BEFORE_INSTALL = "before-install"
      define :GEM_BEFORE_INSTALL, "before-install"

      # @!parse
      #   A hook called after each individual gem is installed
      #   Includes a Bundler::ParallelInstaller::SpecInstallation.
      #     - If state is failed, an error will be present.
      #     - If state is success, a post_install_message may be present.
      #   GEM_AFTER_INSTALL = "after-install"
      define :GEM_AFTER_INSTALL,  "after-install"

      # @!parse
      #   A hook called before any gems install
      #   Includes an Array of Bundler::Dependency objects
      #   GEM_BEFORE_INSTALL_ALL = "before-install-all"
      define :GEM_BEFORE_INSTALL_ALL, "before-install-all"

      # @!parse
      #   A hook called after any gems install
      #   Includes an Array of Bundler::Dependency objects
      #   GEM_AFTER_INSTALL_ALL = "after-install-all"
      define :GEM_AFTER_INSTALL_ALL,  "after-install-all"

      # @!parse
      #   A hook called before each individual gem is required
      #   Includes a Bundler::Dependency.
      #   GEM_BEFORE_REQUIRE = "before-require"
      define :GEM_BEFORE_REQUIRE, "before-require"

      # @!parse
      #   A hook called after each individual gem is required
      #   Includes a Bundler::Dependency.
      #   GEM_AFTER_REQUIRE = "after-require"
      define :GEM_AFTER_REQUIRE,  "after-require"

      # @!parse
      #   A hook called before any gems require
      #   Includes an Array of Bundler::Dependency objects.
      #   GEM_BEFORE_REQUIRE_ALL = "before-require-all"
      define :GEM_BEFORE_REQUIRE_ALL, "before-require-all"

      # @!parse
      #   A hook called after all gems required
      #   Includes an Array of Bundler::Dependency objects.
      #   GEM_AFTER_REQUIRE_ALL = "after-require-all"
      define :GEM_AFTER_REQUIRE_ALL,  "after-require-all"
    end
  end
end
PK*J[Um//>share/gems/gems/bundler-2.6.7/lib/bundler/plugin/api/source.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    class API
      # This class provides the base to build source plugins
      # All the method here are required to build a source plugin (except
      # `uri_hash`, `gem_install_dir`; they are helpers).
      #
      # Defaults for methods, where ever possible are provided which is
      # expected to work. But, all source plugins have to override
      # `fetch_gemspec_files` and `install`. Defaults are also not provided for
      # `remote!`, `cache!` and `unlock!`.
      #
      # The defaults shall work for most situations but nevertheless they can
      # be (preferably should be) overridden as per the plugins' needs safely
      # (as long as they behave as expected).
      # On overriding `initialize` you should call super first.
      #
      # If required plugin should override `hash`, `==` and `eql?` methods to be
      # able to match objects representing same sources, but may be created in
      # different situation (like form gemfile and lockfile). The default ones
      # checks only for class and uri, but elaborate source plugins may need
      # more comparisons (e.g. git checking on branch or tag).
      #
      # @!attribute [r] uri
      #   @return [String] the remote specified with `source` block in Gemfile
      #
      # @!attribute [r] options
      #   @return [String] options passed during initialization (either from
      #     lockfile or Gemfile)
      #
      # @!attribute [r] name
      #   @return [String] name that can be used to uniquely identify a source
      #
      # @!attribute [rw] dependency_names
      #   @return [Array<String>] Names of dependencies that the source should
      #     try to resolve. It is not necessary to use this list internally. This
      #     is present to be compatible with `Definition` and is used by
      #     rubygems source.
      module Source
        attr_reader :uri, :options, :name, :checksum_store
        attr_accessor :dependency_names

        def initialize(opts)
          @options = opts
          @dependency_names = []
          @uri = opts["uri"]
          @type = opts["type"]
          @name = opts["name"] || "#{@type} at #{@uri}"
          @checksum_store = Checksum::Store.new
        end

        # This is used by the default `spec` method to constructs the
        # Specification objects for the gems and versions that can be installed
        # by this source plugin.
        #
        # Note: If the spec method is overridden, this function is not necessary
        #
        # @return [Array<String>] paths of the gemspec files for gems that can
        #                         be installed
        def fetch_gemspec_files
          []
        end

        # Options to be saved in the lockfile so that the source plugin is able
        # to check out same version of gem later.
        #
        # There options are passed when the source plugin is created from the
        # lockfile.
        #
        # @return [Hash]
        def options_to_lock
          {}
        end

        # Install the gem specified by the spec at appropriate path.
        # `install_path` provides a sufficient default, if the source can only
        # satisfy one gem,  but is not binding.
        #
        # @return [String] post installation message (if any)
        def install(spec, opts)
          raise MalformattedPlugin, "Source plugins need to override the install method."
        end

        # It builds extensions, generates bins and installs them for the spec
        # provided.
        #
        # It depends on `spec.loaded_from` to get full_gem_path. The source
        # plugins should set that.
        #
        # It should be called in `install` after the plugin is done placing the
        # gem at correct install location.
        #
        # It also runs Gem hooks `pre_install`, `post_build` and `post_install`
        #
        # Note: Do not override if you don't know what you are doing.
        def post_install(spec, disable_exts = false)
          opts = { env_shebang: false, disable_extensions: disable_exts }
          installer = Bundler::Source::Path::Installer.new(spec, opts)
          installer.post_install
        end

        # A default installation path to install a single gem. If the source
        # servers multiple gems, it's not of much use and the source should one
        # of its own.
        def install_path
          @install_path ||=
            begin
              base_name = File.basename(Gem::URI.parse(uri).normalize.path)

              gem_install_dir.join("#{base_name}-#{uri_hash[0..11]}")
            end
        end

        # Parses the gemspec files to find the specs for the gems that can be
        # satisfied by the source.
        #
        # Few important points to keep in mind:
        #   - If the gems are not installed then it shall return specs for all
        #   the gems it can satisfy
        #   - If gem is installed (that is to be detected by the plugin itself)
        #   then it shall return at least the specs that are installed.
        #   - The `loaded_from` for each of the specs shall be correct (it is
        #   used to find the load path)
        #
        # @return [Bundler::Index] index containing the specs
        def specs
          files = fetch_gemspec_files

          Bundler::Index.build do |index|
            files.each do |file|
              next unless spec = Bundler.load_gemspec(file)
              spec.installed_by_version = Gem::VERSION

              spec.source = self
              Bundler.rubygems.validate(spec)

              index << spec
            end
          end
        end

        # Set internal representation to fetch the gems/specs locally.
        #
        # When this is called, the source should try to fetch the specs and
        # install from the local system.
        def local!
        end

        # Set internal representation to fetch the gems/specs from remote.
        #
        # When this is called, the source should try to fetch the specs and
        # install from remote path.
        def remote!
        end

        # Set internal representation to fetch the gems/specs from app cache.
        #
        # When this is called, the source should try to fetch the specs and
        # install from the path provided by `app_cache_path`.
        def cached!
        end

        # This is called to update the spec and installation.
        #
        # If the source plugin is loaded from lockfile or otherwise, it shall
        # refresh the cache/specs (e.g. git sources can make a fresh clone).
        def unlock!
        end

        # Name of directory where plugin the is expected to cache the gems when
        # #cache is called.
        #
        # Also this name is matched against the directories in cache for pruning
        #
        # This is used by `app_cache_path`
        def app_cache_dirname
          base_name = File.basename(Gem::URI.parse(uri).normalize.path)
          "#{base_name}-#{uri_hash}"
        end

        # This method is called while caching to save copy of the gems that the
        # source can resolve to path provided by `app_cache_app`so that they can
        # be reinstalled from the cache without querying the remote (i.e. an
        # alternative to remote)
        #
        # This is stored with the app and source plugins should try to provide
        # specs and install only from this cache when `cached!` is called.
        #
        # This cache is different from the internal caching that can be done
        # at sub paths of `cache_path` (from API). This can be though as caching
        # by bundler.
        def cache(spec, custom_path = nil)
          new_cache_path = app_cache_path(custom_path)

          FileUtils.rm_rf(new_cache_path)
          FileUtils.cp_r(install_path, new_cache_path)
          FileUtils.rm_rf(app_cache_path.join(".git"))
          FileUtils.touch(app_cache_path.join(".bundlecache"))
        end

        # This shall check if two source object represent the same source.
        #
        # The comparison shall take place only on the attribute that can be
        # inferred from the options passed from Gemfile and not on attributes
        # that are used to pin down the gem to specific version (e.g. Git
        # sources should compare on branch and tag but not on commit hash)
        #
        # The sources objects are constructed from Gemfile as well as from
        # lockfile. To converge the sources, it is necessary that they match.
        #
        # The same applies for `eql?` and `hash`
        def ==(other)
          other.is_a?(self.class) && uri == other.uri
        end

        # When overriding `eql?` please preserve the behaviour as mentioned in
        # docstring for `==` method.
        alias_method :eql?, :==

        # When overriding `hash` please preserve the behaviour as mentioned in
        # docstring for `==` method, i.e. two methods equal by above comparison
        # should have same hash.
        def hash
          [self.class, uri].hash
        end

        # A helper method, not necessary if not used internally.
        def installed?
          File.directory?(install_path)
        end

        # The full path where the plugin should cache the gem so that it can be
        # installed latter.
        #
        # Note: Do not override if you don't know what you are doing.
        def app_cache_path(custom_path = nil)
          @app_cache_path ||= Bundler.app_cache(custom_path).join(app_cache_dirname)
        end

        # Used by definition.
        #
        # Note: Do not override if you don't know what you are doing.
        def unmet_deps
          specs.unmet_dependency_names
        end

        # Used by definition.
        #
        # Note: Do not override if you don't know what you are doing.
        def spec_names
          specs.spec_names
        end

        # Used by definition.
        #
        # Note: Do not override if you don't know what you are doing.
        def add_dependency_names(names)
          @dependencies |= Array(names)
        end

        # NOTE: Do not override if you don't know what you are doing.
        def can_lock?(spec)
          spec.source == self
        end

        # Generates the content to be entered into the lockfile.
        # Saves type and remote and also calls to `options_to_lock`.
        #
        # Plugin should use `options_to_lock` to save information in lockfile
        # and not override this.
        #
        # Note: Do not override if you don't know what you are doing.
        def to_lock
          out = String.new("#{LockfileParser::PLUGIN}\n")
          out << "  remote: #{@uri}\n"
          out << "  type: #{@type}\n"
          options_to_lock.each do |opt, value|
            out << "  #{opt}: #{value}\n"
          end
          out << "  specs:\n"
        end

        def to_s
          "plugin source for #{@type} with uri #{@uri}"
        end
        alias_method :identifier, :to_s

        # NOTE: Do not override if you don't know what you are doing.
        def include?(other)
          other == self
        end

        def uri_hash
          SharedHelpers.digest(:SHA1).hexdigest(uri)
        end

        # NOTE: Do not override if you don't know what you are doing.
        def gem_install_dir
          Bundler.install_path
        end

        # It is used to obtain the full_gem_path.
        #
        # spec's loaded_from path is expanded against this to get full_gem_path
        #
        # Note: Do not override if you don't know what you are doing.
        def root
          Bundler.root
        end

        # @private
        # This API on source might not be stable, and for now we expect plugins
        # to download all specs in `#specs`, so we implement the method for
        # compatibility purposes and leave it undocumented (and don't support)
        # overriding it)
        def double_check_for(*); end
      end
    end
  end
end
PK*J["�x��7share/gems/gems/bundler-2.6.7/lib/bundler/plugin/dsl.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    # Dsl to parse the Gemfile looking for plugins to install
    class DSL < Bundler::Dsl
      class PluginGemfileError < PluginError; end
      alias_method :_gem, :gem # To use for plugin installation as gem

      # So that we don't have to override all there methods to dummy ones
      # explicitly.
      # They will be handled by method_missing
      [:gemspec, :gem, :install_if, :platforms, :env].each {|m| undef_method m }

      # This lists the plugins that was added automatically and not specified by
      # the user.
      #
      # When we encounter :type attribute with a source block, we add a plugin
      # by name bundler-source-<type> to list of plugins to be installed.
      #
      # These plugins are optional and are not installed when there is conflict
      # with any other plugin.
      attr_reader :inferred_plugins

      def initialize
        super
        @sources = Plugin::SourceList.new
        @inferred_plugins = [] # The source plugins inferred from :type
      end

      def plugin(name, *args)
        _gem(name, *args)
      end

      def method_missing(name, *args)
        raise PluginGemfileError, "Undefined local variable or method `#{name}' for Gemfile" unless Bundler::Dsl.method_defined? name
      end

      def source(source, *args, &blk)
        options = args.last.is_a?(Hash) ? args.pop.dup : {}
        options = normalize_hash(options)
        return super unless options.key?("type")

        plugin_name = "bundler-source-#{options["type"]}"

        return if @dependencies.any? {|d| d.name == plugin_name }

        plugin(plugin_name)
        @inferred_plugins << plugin_name
      end
    end
  end
end
PK*J[�gl���=share/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer.rbnu�[���# frozen_string_literal: true

module Bundler
  # Handles the installation of plugin in appropriate directories.
  #
  # This class is supposed to be wrapper over the existing gem installation infra
  # but currently it itself handles everything as the Source's subclasses (e.g. Source::RubyGems)
  # are heavily dependent on the Gemfile.
  module Plugin
    class Installer
      autoload :Rubygems, File.expand_path("installer/rubygems", __dir__)
      autoload :Git,      File.expand_path("installer/git", __dir__)
      autoload :Path, File.expand_path("installer/path", __dir__)

      def install(names, options)
        check_sources_consistency!(options)

        version = options[:version] || [">= 0"]

        if options[:git]
          install_git(names, version, options)
        elsif options[:path]
          install_path(names, version, options[:path])
        else
          sources = options[:source] || Gem.sources
          install_rubygems(names, version, sources)
        end
      end

      # Installs the plugin from Definition object created by limited parsing of
      # Gemfile searching for plugins to be installed
      #
      # @param [Definition] definition object
      # @return [Hash] map of names to their specs they are installed with
      def install_definition(definition)
        def definition.lock(*); end
        definition.remotely!
        specs = definition.specs

        install_from_specs specs
      end

      private

      def check_sources_consistency!(options)
        if options.key?(:git) && options.key?(:local_git)
          raise InvalidOption, "Remote and local plugin git sources can't be both specified"
        end

        # back-compat; local_git is an alias for git
        if options.key?(:local_git)
          Bundler::SharedHelpers.major_deprecation(2, "--local_git is deprecated, use --git")
          options[:git] = options.delete(:local_git)
        end

        if (options.keys & [:source, :git, :path]).length > 1
          raise InvalidOption, "Only one of --source, --git, or --path may be specified"
        end

        if (options.key?(:branch) || options.key?(:ref)) && !options.key?(:git)
          raise InvalidOption, "--#{options.key?(:branch) ? "branch" : "ref"} can only be used with git sources"
        end

        if options.key?(:branch) && options.key?(:ref)
          raise InvalidOption, "--branch and --ref can't be both specified"
        end
      end

      def install_git(names, version, options)
        source_list = SourceList.new
        source = source_list.add_git_source({ "uri" => options[:git],
                                              "branch" => options[:branch],
                                              "ref" => options[:ref] })

        install_all_sources(names, version, source_list, source)
      end

      def install_path(names, version, path)
        source_list = SourceList.new
        source = source_list.add_path_source({ "path" => path, "root_path" => SharedHelpers.pwd })

        install_all_sources(names, version, source_list, source)
      end

      # Installs the plugin from rubygems source and returns the path where the
      # plugin was installed
      #
      # @param [String] name of the plugin gem to search in the source
      # @param [Array] version of the gem to install
      # @param [String, Array<String>] source(s) to resolve the gem
      #
      # @return [Hash] map of names to the specs of plugins installed
      def install_rubygems(names, version, sources)
        source_list = SourceList.new

        Array(sources).each {|remote| source_list.add_global_rubygems_remote(remote) }

        install_all_sources(names, version, source_list)
      end

      def install_all_sources(names, version, source_list, source = nil)
        deps = names.map {|name| Dependency.new(name, version, { "source" => source }) }

        Bundler.configure_gem_home_and_path(Plugin.root)

        Bundler.settings.temporary(deployment: false, frozen: false) do
          definition = Definition.new(nil, deps, source_list, true)

          install_definition(definition)
        end
      end

      # Installs the plugins and deps from the provided specs and returns map of
      # gems to their paths
      #
      # @param specs to install
      #
      # @return [Hash] map of names to the specs
      def install_from_specs(specs)
        paths = {}

        specs.each do |spec|
          spec.source.install spec

          paths[spec.name] = spec
        end

        paths
      end
    end
  end
end
PK*J[$�&�&&Fshare/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer/rubygems.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    class Installer
      class Rubygems < Bundler::Source::Rubygems
        private

        def rubygems_dir
          Plugin.root
        end

        def cache_path
          Plugin.cache
        end
      end
    end
  end
end
PK*J[}[?n		Ashare/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer/git.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    class Installer
      class Git < Bundler::Source::Git
        def cache_path
          @cache_path ||= begin
            git_scope = "#{base_name}-#{uri_hash}"

            Plugin.cache.join("bundler", "git", git_scope)
          end
        end

        def install_path
          @install_path ||= begin
            git_scope = "#{base_name}-#{shortref_for_path(revision)}"

            Plugin.root.join("bundler", "gems", git_scope)
          end
        end

        def root
          Plugin.root
        end

        def generate_bin(spec, disable_extensions = false)
          # Need to find a way without code duplication
          # For now, we can ignore this
        end
      end
    end
  end
end
PK*J[��}}Bshare/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer/path.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    class Installer
      class Path < Bundler::Source::Path
        def root
          SharedHelpers.in_bundle? ? Bundler.root : Plugin.root
        end

        def eql?(other)
          return unless other.class == self.class
          expanded_original_path == other.expanded_original_path &&
            version == other.version
        end

        alias_method :==, :eql?

        def generate_bin(spec, disable_extensions = false)
          # Need to find a way without code duplication
          # For now, we can ignore this
        end
      end
    end
  end
end
PK*J[�~.�jj?share/gems/gems/bundler-2.6.7/lib/bundler/plugin/source_list.rbnu�[���# frozen_string_literal: true

module Bundler
  # SourceList object to be used while parsing the Gemfile, setting the
  # approptiate options to be used with Source classes for plugin installation
  module Plugin
    class SourceList < Bundler::SourceList
      def add_git_source(options = {})
        add_source_to_list Plugin::Installer::Git.new(options), git_sources
      end

      def add_path_source(options = {})
        add_source_to_list Plugin::Installer::Path.new(options), path_sources
      end

      def add_rubygems_source(options = {})
        add_source_to_list Plugin::Installer::Rubygems.new(options), @rubygems_sources
      end

      def all_sources
        path_sources + git_sources + rubygems_sources + [metadata_source]
      end

      private

      def rubygems_aggregate_class
        Plugin::Installer::Rubygems
      end
    end
  end
end
PK*J[�6�PP7share/gems/gems/bundler-2.6.7/lib/bundler/plugin/api.rbnu�[���# frozen_string_literal: true

module Bundler
  # This is the interfacing class represents the API that we intend to provide
  # the plugins to use.
  #
  # For plugins to be independent of the Bundler internals they shall limit their
  # interactions to methods of this class only. This will save them from breaking
  # when some internal change.
  #
  # Currently we are delegating the methods defined in Bundler class to
  # itself. So, this class acts as a buffer.
  #
  # If there is some change in the Bundler class that is incompatible to its
  # previous behavior or if otherwise desired, we can reimplement(or implement)
  # the method to preserve compatibility.
  #
  # To use this, either the class can inherit this class or use it directly.
  # For example of both types of use, refer the file `spec/plugins/command.rb`
  #
  # To use it without inheriting, you will have to create an object of this
  # to use the functions (except for declaration functions like command, source,
  # and hooks).
  module Plugin
    class API
      autoload :Source, File.expand_path("api/source", __dir__)

      # The plugins should declare that they handle a command through this helper.
      #
      # @param [String] command being handled by them
      # @param [Class] (optional) class that handles the command. If not
      #                 provided, the `self` class will be used.
      def self.command(command, cls = self)
        Plugin.add_command command, cls
      end

      # The plugins should declare that they provide a installation source
      # through this helper.
      #
      # @param [String] the source type they provide
      # @param [Class] (optional) class that handles the source. If not
      #                 provided, the `self` class will be used.
      def self.source(source, cls = self)
        cls.send :include, Bundler::Plugin::API::Source
        Plugin.add_source source, cls
      end

      def self.hook(event, &block)
        Plugin.add_hook(event, &block)
      end

      # The cache dir to be used by the plugins for storage
      #
      # @return [Pathname] path of the cache dir
      def cache_dir
        Plugin.cache.join("plugins")
      end

      # A tmp dir to be used by plugins
      # Accepts names that get concatenated as suffix
      #
      # @return [Pathname] object for the new directory created
      def tmp(*names)
        Bundler.tmp(["plugin", *names].join("-"))
      end

      def method_missing(name, *args, &blk)
        return Bundler.send(name, *args, &blk) if Bundler.respond_to?(name)

        return SharedHelpers.send(name, *args, &blk) if SharedHelpers.respond_to?(name)

        super
      end

      def respond_to_missing?(name, include_private = false)
        SharedHelpers.respond_to?(name, include_private) ||
          Bundler.respond_to?(name, include_private) || super
      end
    end
  end
end
PK*J["a
U����7share/gems/gems/bundler-2.6.7/lib/bundler/definition.rbnu�[���# frozen_string_literal: true

require_relative "lockfile_parser"

module Bundler
  class Definition
    include GemHelpers

    class << self
      # Do not create or modify a lockfile (Makes #lock a noop)
      attr_accessor :no_lock
    end

    attr_reader(
      :dependencies,
      :locked_checksums,
      :locked_deps,
      :locked_gems,
      :platforms,
      :ruby_version,
      :lockfile,
      :gemfiles,
      :sources
    )

    # Given a gemfile and lockfile creates a Bundler definition
    #
    # @param gemfile [Pathname] Path to Gemfile
    # @param lockfile [Pathname,nil] Path to Gemfile.lock
    # @param unlock [Hash, Boolean, nil] Gems that have been requested
    #   to be updated or true if all gems should be updated
    # @return [Bundler::Definition]
    def self.build(gemfile, lockfile, unlock)
      unlock ||= {}
      gemfile = Pathname.new(gemfile).expand_path

      raise GemfileNotFound, "#{gemfile} not found" unless gemfile.file?

      Dsl.evaluate(gemfile, lockfile, unlock)
    end

    #
    # How does the new system work?
    #
    # * Load information from Gemfile and Lockfile
    # * Invalidate stale locked specs
    #  * All specs from stale source are stale
    #  * All specs that are reachable only through a stale
    #    dependency are stale.
    # * If all fresh dependencies are satisfied by the locked
    #  specs, then we can try to resolve locally.
    #
    # @param lockfile [Pathname] Path to Gemfile.lock
    # @param dependencies [Array(Bundler::Dependency)] array of dependencies from Gemfile
    # @param sources [Bundler::SourceList]
    # @param unlock [Hash, Boolean, nil] Gems that have been requested
    #   to be updated or true if all gems should be updated
    # @param ruby_version [Bundler::RubyVersion, nil] Requested Ruby Version
    # @param optional_groups [Array(String)] A list of optional groups
    def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, optional_groups = [], gemfiles = [])
      unlock ||= {}

      if unlock == true
        @unlocking_all = true
        @unlocking_bundler = false
        @unlocking = unlock
        @sources_to_unlock = []
        @unlocking_ruby = false
        @explicit_unlocks = []
        conservative = false
      else
        @unlocking_all = false
        @unlocking_bundler = unlock.delete(:bundler)
        @unlocking = unlock.any? {|_k, v| !Array(v).empty? }
        @sources_to_unlock = unlock.delete(:sources) || []
        @unlocking_ruby = unlock.delete(:ruby)
        @explicit_unlocks = unlock.delete(:gems) || []
        conservative = unlock.delete(:conservative)
      end

      @dependencies    = dependencies
      @sources         = sources
      @optional_groups = optional_groups
      @prefer_local    = false
      @specs           = nil
      @ruby_version    = ruby_version
      @gemfiles        = gemfiles

      @lockfile               = lockfile
      @lockfile_contents      = String.new

      @locked_bundler_version = nil
      @resolved_bundler_version = nil

      @locked_ruby_version = nil
      @new_platforms = []
      @removed_platforms = []
      @originally_invalid_platforms = []

      if lockfile_exists?
        @lockfile_contents = Bundler.read_file(lockfile)
        @locked_gems = LockfileParser.new(@lockfile_contents)
        @locked_platforms = @locked_gems.platforms
        @most_specific_locked_platform = @locked_gems.most_specific_locked_platform
        @platforms = @locked_platforms.dup
        @locked_bundler_version = @locked_gems.bundler_version
        @locked_ruby_version = @locked_gems.ruby_version
        @locked_deps = @locked_gems.dependencies
        @originally_locked_specs = SpecSet.new(@locked_gems.specs)
        @locked_checksums = @locked_gems.checksums

        if @unlocking_all
          @locked_specs   = SpecSet.new([])
          @locked_sources = []
        else
          @locked_specs   = @originally_locked_specs
          @locked_sources = @locked_gems.sources
        end
      else
        @locked_gems = nil
        @locked_platforms = []
        @most_specific_locked_platform = nil
        @platforms      = []
        @locked_deps    = {}
        @locked_specs   = SpecSet.new([])
        @originally_locked_specs = @locked_specs
        @locked_sources = []
        @locked_checksums = Bundler.feature_flag.lockfile_checksums?
      end

      locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
      @multisource_allowed = locked_gem_sources.size == 1 && locked_gem_sources.first.multiple_remotes? && Bundler.frozen_bundle?

      if @multisource_allowed
        unless sources.aggregate_global_source?
          msg = "Your lockfile contains a single rubygems source section with multiple remotes, which is insecure. Make sure you run `bundle install` in non frozen mode and commit the result to make your lockfile secure."

          Bundler::SharedHelpers.major_deprecation 2, msg
        end

        @sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
      end

      @unlocking_ruby ||= if @ruby_version && locked_ruby_version_object
        @ruby_version.diff(locked_ruby_version_object)
      end
      @unlocking ||= @unlocking_ruby ||= (!@locked_ruby_version ^ !@ruby_version)

      @current_platform_missing = add_current_platform unless Bundler.frozen_bundle?

      @source_changes = converge_sources
      @path_changes = converge_paths

      if conservative
        @gems_to_unlock = @explicit_unlocks.any? ? @explicit_unlocks : @dependencies.map(&:name)
      else
        eager_unlock = @explicit_unlocks.map {|name| Dependency.new(name, ">= 0") }
        @gems_to_unlock = @locked_specs.for(eager_unlock, platforms).map(&:name).uniq
      end

      @dependency_changes = converge_dependencies
      @local_changes = converge_locals

      check_lockfile
    end

    def gem_version_promoter
      @gem_version_promoter ||= GemVersionPromoter.new
    end

    def check!
      # If dependencies have changed, we need to resolve remotely. Otherwise,
      # since we'll be resolving with a single local source, we may end up
      # locking gems under the wrong source in the lockfile, and missing lockfile
      # checksums
      resolve_remotely! if @dependency_changes

      # Now do a local only resolve, to verify if any gems are missing locally
      sources.local_only!
      resolve
    end

    #
    # Setup sources according to the given options and the state of the
    # definition.
    #
    # @return [Boolean] Whether fetching remote information will be necessary or not
    #
    def setup_domain!(options = {})
      prefer_local! if options[:"prefer-local"]

      if options[:add_checksums] || (!options[:local] && install_needed?)
        remotely!
        true
      else
        Bundler.settings.set_command_option(:jobs, 1) unless install_needed? # to avoid the overhead of Bundler::Worker
        with_cache!
        false
      end
    end

    def resolve_with_cache!
      with_cache!

      resolve
    end

    def with_cache!
      sources.local!
      sources.cached!
    end

    def resolve_remotely!
      remotely!

      resolve
    end

    def remotely!
      sources.cached!
      sources.remote!
    end

    def prefer_local!
      @prefer_local = true

      sources.prefer_local!
    end

    # For given dependency list returns a SpecSet with Gemspec of all the required
    # dependencies.
    #  1. The method first resolves the dependencies specified in Gemfile
    #  2. After that it tries and fetches gemspec of resolved dependencies
    #
    # @return [Bundler::SpecSet]
    def specs
      @specs ||= materialize(requested_dependencies)
    end

    def new_specs
      specs - @locked_specs
    end

    def removed_specs
      @locked_specs - specs
    end

    def missing_specs
      resolve.missing_specs_for(requested_dependencies)
    end

    def missing_specs?
      missing = missing_specs
      return false if missing.empty?
      Bundler.ui.debug "The definition is missing #{missing.map(&:full_name)}"
      true
    rescue BundlerError => e
      @resolve = nil
      @resolver = nil
      @resolution_packages = nil
      @source_requirements = nil
      @specs = nil

      Bundler.ui.debug "The definition is missing dependencies, failed to resolve & materialize locally (#{e})"
      true
    end

    def requested_specs
      specs_for(requested_groups)
    end

    def requested_dependencies
      dependencies_for(requested_groups)
    end

    def current_dependencies
      filter_relevant(dependencies)
    end

    def current_locked_dependencies
      filter_relevant(locked_dependencies)
    end

    def filter_relevant(dependencies)
      platforms_array = [generic_local_platform].freeze
      dependencies.select do |d|
        d.should_include? && !d.gem_platforms(platforms_array).empty?
      end
    end

    def locked_dependencies
      @locked_deps.values
    end

    def new_deps
      @new_deps ||= @dependencies - locked_dependencies
    end

    def deleted_deps
      @deleted_deps ||= locked_dependencies - @dependencies
    end

    def specs_for(groups)
      return specs if groups.empty?
      deps = dependencies_for(groups)
      materialize(deps)
    end

    def dependencies_for(groups)
      groups.map!(&:to_sym)
      deps = current_dependencies # always returns a new array
      deps.select! do |d|
        d.groups.intersect?(groups)
      end
      deps
    end

    # Resolve all the dependencies specified in Gemfile. It ensures that
    # dependencies that have been already resolved via locked file and are fresh
    # are reused when resolving dependencies
    #
    # @return [SpecSet] resolved dependencies
    def resolve
      @resolve ||= if Bundler.frozen_bundle?
        Bundler.ui.debug "Frozen, using resolution from the lockfile"
        @locked_specs
      elsif no_resolve_needed?
        if deleted_deps.any?
          Bundler.ui.debug "Some dependencies were deleted, using a subset of the resolution from the lockfile"
          SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
        else
          Bundler.ui.debug "Found no changes, using resolution from the lockfile"
          if @removed_platforms.any? || @locked_gems.may_include_redundant_platform_specific_gems?
            SpecSet.new(filter_specs(@locked_specs, @dependencies))
          else
            @locked_specs
          end
        end
      else
        if lockfile_exists?
          Bundler.ui.debug "Found changes from the lockfile, re-resolving dependencies because #{change_reason}"
        else
          Bundler.ui.debug "Resolving dependencies because there's no lockfile"
        end

        start_resolution
      end
    end

    def spec_git_paths
      sources.git_sources.filter_map {|s| File.realpath(s.path) if File.exist?(s.path) }
    end

    def groups
      dependencies.flat_map(&:groups).uniq
    end

    def lock(file_or_preserve_unknown_sections = false, preserve_unknown_sections_or_unused = false)
      if [true, false, nil].include?(file_or_preserve_unknown_sections)
        target_lockfile = lockfile
        preserve_unknown_sections = file_or_preserve_unknown_sections
      else
        target_lockfile = file_or_preserve_unknown_sections
        preserve_unknown_sections = preserve_unknown_sections_or_unused

        suggestion = if target_lockfile == lockfile
          "To fix this warning, remove it from the `Definition#lock` call."
        else
          "Instead, instantiate a new definition passing `#{target_lockfile}`, and call `lock` without a file argument on that definition"
        end

        msg = "`Definition#lock` was passed a target file argument. #{suggestion}"

        Bundler::SharedHelpers.major_deprecation 2, msg
      end

      write_lock(target_lockfile, preserve_unknown_sections)
    end

    def locked_ruby_version
      return unless ruby_version
      if @unlocking_ruby || !@locked_ruby_version
        Bundler::RubyVersion.system
      else
        @locked_ruby_version
      end
    end

    def locked_ruby_version_object
      return unless @locked_ruby_version
      @locked_ruby_version_object ||= begin
        unless version = RubyVersion.from_string(@locked_ruby_version)
          raise LockfileError, "The Ruby version #{@locked_ruby_version} from " \
            "#{@lockfile} could not be parsed. " \
            "Try running bundle update --ruby to resolve this."
        end
        version
      end
    end

    def bundler_version_to_lock
      @resolved_bundler_version || Bundler.gem_version
    end

    def to_lock
      require_relative "lockfile_generator"
      LockfileGenerator.generate(self)
    end

    def ensure_equivalent_gemfile_and_lockfile(explicit_flag = false)
      return unless Bundler.frozen_bundle?

      raise ProductionError, "Frozen mode is set, but there's no lockfile" unless lockfile_exists?

      msg = lockfile_changes_summary("frozen mode is set")
      return unless msg

      unless explicit_flag
        suggested_command = unless Bundler.settings.locations("frozen").keys.include?(:env)
          "bundle config set frozen false"
        end
        msg << "\n\nIf this is a development machine, remove the #{SharedHelpers.relative_lockfile_path} " \
               "freeze by running `#{suggested_command}`." if suggested_command
      end

      raise ProductionError, msg
    end

    def validate_runtime!
      validate_ruby!
      validate_platforms!
    end

    def validate_ruby!
      return unless ruby_version

      if diff = ruby_version.diff(Bundler::RubyVersion.system)
        problem, expected, actual = diff

        msg = case problem
              when :engine
                "Your Ruby engine is #{actual}, but your Gemfile specified #{expected}"
              when :version
                "Your Ruby version is #{actual}, but your Gemfile specified #{expected}"
              when :engine_version
                "Your #{Bundler::RubyVersion.system.engine} version is #{actual}, but your Gemfile specified #{ruby_version.engine} #{expected}"
              when :patchlevel
                if !expected.is_a?(String)
                  "The Ruby patchlevel in your Gemfile must be a string"
                else
                  "Your Ruby patchlevel is #{actual}, but your Gemfile specified #{expected}"
                end
        end

        raise RubyVersionMismatch, msg
      end
    end

    def validate_platforms!
      return if current_platform_locked? || @platforms.include?(Gem::Platform::RUBY)

      raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
        "but your local platform is #{local_platform}. " \
        "Add the current platform to the lockfile with\n`bundle lock --add-platform #{local_platform}` and try again."
    end

    def normalize_platforms
      @platforms = resolve.normalize_platforms!(current_dependencies, platforms)

      @resolve = SpecSet.new(resolve.for(current_dependencies, @platforms))
    end

    def add_platform(platform)
      return if @platforms.include?(platform)

      @new_platforms << platform
      @platforms << platform
    end

    def remove_platform(platform)
      raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}" unless @platforms.include?(platform)

      @removed_platforms << platform
      @platforms.delete(platform)
    end

    def nothing_changed?
      !something_changed?
    end

    def no_resolve_needed?
      !resolve_needed?
    end

    def unlocking?
      @unlocking
    end

    attr_writer :source_requirements

    def add_checksums
      @locked_checksums = true

      setup_domain!(add_checksums: true)

      specs # force materialization to real specifications, so that checksums are fetched
    end

    private

    def lockfile_changes_summary(update_refused_reason)
      added =   []
      deleted = []
      changed = []

      added.concat @new_platforms.map {|p| "* platform: #{p}" }
      deleted.concat @removed_platforms.map {|p| "* platform: #{p}" }

      added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
      deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?

      both_sources = Hash.new {|h, k| h[k] = [] }
      current_dependencies.each {|d| both_sources[d.name][0] = d }
      current_locked_dependencies.each {|d| both_sources[d.name][1] = d }

      both_sources.each do |name, (dep, lock_dep)|
        next if dep.nil? || lock_dep.nil?

        gemfile_source = dep.source || default_source
        lock_source = lock_dep.source || default_source
        next if lock_source.include?(gemfile_source)

        gemfile_source_name = dep.source ? gemfile_source.to_gemfile : "no specified source"
        lockfile_source_name = lock_dep.source ? lock_source.to_gemfile : "no specified source"
        changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
      end

      return unless added.any? || deleted.any? || changed.any? || resolve_needed?

      reason = resolve_needed? ? change_reason : "some dependencies were deleted from your gemfile"

      msg = String.new("#{reason.capitalize.strip}, but ")
      msg << "the lockfile " unless msg.start_with?("Your lockfile")
      msg << "can't be updated because #{update_refused_reason}"
      msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
      msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
      msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
      msg << "\n\nRun `bundle install` elsewhere and add the updated #{SharedHelpers.relative_lockfile_path} to version control.\n" unless unlocking?
      msg
    end

    def install_needed?
      resolve_needed? || missing_specs?
    end

    def something_changed?
      return true unless lockfile_exists?

      @source_changes ||
        @dependency_changes ||
        @current_platform_missing ||
        @new_platforms.any? ||
        @path_changes ||
        @local_changes ||
        @missing_lockfile_dep ||
        @unlocking_bundler ||
        @locked_spec_with_missing_checksums ||
        @locked_spec_with_missing_deps ||
        @locked_spec_with_invalid_deps
    end

    def resolve_needed?
      unlocking? || something_changed?
    end

    def should_add_extra_platforms?
      !lockfile_exists? && generic_local_platform_is_ruby? && !Bundler.settings[:force_ruby_platform]
    end

    def lockfile_exists?
      lockfile && File.exist?(lockfile)
    end

    def write_lock(file, preserve_unknown_sections)
      return if Definition.no_lock || file.nil?

      contents = to_lock

      # Convert to \r\n if the existing lock has them
      # i.e., Windows with `git config core.autocrlf=true`
      contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match?("\r\n")

      if @locked_bundler_version
        locked_major = @locked_bundler_version.segments.first
        current_major = bundler_version_to_lock.segments.first

        updating_major = locked_major < current_major
      end

      preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))

      if File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
        return if Bundler.frozen_bundle?
        SharedHelpers.filesystem_access(file) { FileUtils.touch(file) }
        return
      end

      if Bundler.frozen_bundle?
        Bundler.ui.error "Cannot write a changed lockfile while frozen."
        return
      end

      begin
        SharedHelpers.filesystem_access(file) do |p|
          File.open(p, "wb") {|f| f.puts(contents) }
        end
      rescue ReadOnlyFileSystemError
        raise ProductionError, lockfile_changes_summary("file system is read-only")
      end
    end

    def resolver
      @resolver ||= Resolver.new(resolution_packages, gem_version_promoter, @most_specific_locked_platform)
    end

    def expanded_dependencies
      dependencies_with_bundler + metadata_dependencies
    end

    def dependencies_with_bundler
      return dependencies unless @unlocking_bundler
      return dependencies if dependencies.any? {|d| d.name == "bundler" }

      [Dependency.new("bundler", @unlocking_bundler)] + dependencies
    end

    def resolution_packages
      @resolution_packages ||= begin
        last_resolve = converge_locked_specs
        remove_invalid_platforms!
        new_resolution_platforms = @current_platform_missing ? @new_platforms + [local_platform] : @new_platforms
        packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @unlocking_all || @gems_to_unlock, prerelease: gem_version_promoter.pre?, prefer_local: @prefer_local, new_platforms: new_resolution_platforms)
        packages = additional_base_requirements_to_prevent_downgrades(packages)
        packages = additional_base_requirements_to_force_updates(packages)
        packages
      end
    end

    def filter_specs(specs, deps, skips: [])
      SpecSet.new(specs).for(deps, platforms, skips: skips)
    end

    def materialize(dependencies)
      # Tracks potential endless loops trying to re-resolve.
      # TODO: Remove as dead code if not reports are received in a while
      incorrect_spec = nil

      specs = begin
        resolve.materialize(dependencies)
      rescue IncorrectLockfileDependencies => e
        raise if Bundler.frozen_bundle?

        spec = e.spec
        raise "Infinite loop while fixing lockfile dependencies" if incorrect_spec == spec

        incorrect_spec = spec
        reresolve_without([spec])
        retry
      end

      missing_specs = resolve.missing_specs

      if missing_specs.any?
        missing_specs.each do |s|
          locked_gem = @locked_specs[s.name].last
          next if locked_gem.nil? || locked_gem.version != s.version || sources.local_mode?

          message = if sources.implicit_global_source?
            "Because your Gemfile specifies no global remote source, your bundle is locked to " \
            "#{locked_gem} from #{locked_gem.source}. However, #{locked_gem} is not installed. You'll " \
            "need to either add a global remote source to your Gemfile or make sure #{locked_gem} is " \
            "available locally before rerunning Bundler."
          else
            "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
            "no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
            "You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
            "removed in order to install."
          end

          raise GemNotFound, message
        end

        missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
          "#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
        end

        raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
      end

      partially_missing_specs = resolve.partially_missing_specs

      if partially_missing_specs.any? && !sources.local_mode?
        Bundler.ui.warn "Some locked specs have possibly been yanked (#{partially_missing_specs.map(&:full_name).join(", ")}). Ignoring them..."

        resolve.delete(partially_missing_specs)
      end

      incomplete_specs = resolve.incomplete_specs
      loop do
        break if incomplete_specs.empty?

        Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
        sources.remote!
        reresolve_without(incomplete_specs)
        specs = resolve.materialize(dependencies)

        still_incomplete_specs = resolve.incomplete_specs

        if still_incomplete_specs == incomplete_specs
          package = resolution_packages.get_package(incomplete_specs.first.name)
          resolver.raise_not_found! package
        end

        incomplete_specs = still_incomplete_specs
      end

      insecurely_materialized_specs = resolve.insecurely_materialized_specs

      if insecurely_materialized_specs.any?
        Bundler.ui.warn "The following platform specific gems are getting installed, yet the lockfile includes only their generic ruby version:\n" \
                        " * #{insecurely_materialized_specs.map(&:full_name).join("\n * ")}\n" \
                        "Please run `bundle lock --normalize-platforms` and commit the resulting lockfile.\n" \
                        "Alternatively, you may run `bundle lock --add-platform <list-of-platforms-that-you-want-to-support>`"
      end

      bundler = sources.metadata_source.specs.search(["bundler", Bundler.gem_version]).last
      specs["bundler"] = bundler

      specs
    end

    def reresolve_without(incomplete_specs)
      resolution_packages.delete(incomplete_specs)
      @resolve = start_resolution
    end

    def start_resolution
      local_platform_needed_for_resolvability = @most_specific_non_local_locked_platform && !@platforms.include?(local_platform)
      @platforms << local_platform if local_platform_needed_for_resolvability
      add_platform(Gem::Platform::RUBY) if RUBY_ENGINE == "truffleruby"

      result = SpecSet.new(resolver.start)

      @resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version

      if @most_specific_non_local_locked_platform
        if spec_set_incomplete_for_platform?(result, @most_specific_non_local_locked_platform)
          @platforms.delete(@most_specific_non_local_locked_platform)
        elsif local_platform_needed_for_resolvability
          @platforms.delete(local_platform)
        end
      end

      if should_add_extra_platforms?
        result.add_extra_platforms!(platforms)
      elsif @originally_invalid_platforms.any?
        result.add_originally_invalid_platforms!(platforms, @originally_invalid_platforms)
      end

      SpecSet.new(result.for(dependencies, @platforms | [Gem::Platform::RUBY]))
    end

    def precompute_source_requirements_for_indirect_dependencies?
      sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
    end

    def current_platform_locked?
      @platforms.any? do |bundle_platform|
        generic_local_platform == bundle_platform || local_platform === bundle_platform
      end
    end

    def add_current_platform
      return if @platforms.include?(local_platform)

      @most_specific_non_local_locked_platform = find_most_specific_locked_platform
      return if @most_specific_non_local_locked_platform

      @platforms << local_platform
      true
    end

    def find_most_specific_locked_platform
      return unless current_platform_locked?

      @most_specific_locked_platform
    end

    def change_reason
      if unlocking?
        unlock_targets = if @gems_to_unlock.any?
          ["gems", @gems_to_unlock]
        elsif @sources_to_unlock.any?
          ["sources", @sources_to_unlock]
        end

        unlock_reason = if unlock_targets
          "#{unlock_targets.first}: (#{unlock_targets.last.join(", ")})"
        else
          @unlocking_ruby ? "ruby" : ""
        end

        return "bundler is unlocking #{unlock_reason}"
      end
      [
        [@source_changes, "the list of sources changed"],
        [@dependency_changes, "the dependencies in your gemfile changed"],
        [@current_platform_missing, "your lockfile is missing the current platform"],
        [@new_platforms.any?, "you are adding a new platform to your lockfile"],
        [@path_changes, "the gemspecs for path gems changed"],
        [@local_changes, "the gemspecs for git local gems changed"],
        [@missing_lockfile_dep, "your lockfile is missing \"#{@missing_lockfile_dep}\""],
        [@unlocking_bundler, "an update to the version of Bundler itself was requested"],
        [@locked_spec_with_missing_checksums, "your lockfile is missing a CHECKSUMS entry for \"#{@locked_spec_with_missing_checksums}\""],
        [@locked_spec_with_missing_deps, "your lockfile includes \"#{@locked_spec_with_missing_deps}\" but not some of its dependencies"],
        [@locked_spec_with_invalid_deps, "your lockfile does not satisfy dependencies of \"#{@locked_spec_with_invalid_deps}\""],
      ].select(&:first).map(&:last).join(", ")
    end

    def pretty_dep(dep)
      SharedHelpers.pretty_dependency(dep)
    end

    # Check if the specs of the given source changed
    # according to the locked source.
    def specs_changed?(source)
      locked = @locked_sources.find {|s| s == source }

      !locked || dependencies_for_source_changed?(source, locked) || specs_for_source_changed?(source)
    end

    def dependencies_for_source_changed?(source, locked_source)
      deps_for_source = @dependencies.select {|dep| dep.source == source }
      locked_deps_for_source = locked_dependencies.select {|dep| dep.source == locked_source }

      deps_for_source.uniq.sort != locked_deps_for_source.sort
    end

    def specs_for_source_changed?(source)
      locked_index = Index.new
      locked_index.use(@locked_specs.select {|s| s.replace_source_with!(source) })

      !locked_index.subset?(source.specs)
    rescue PathError, GitError => e
      Bundler.ui.debug "Assuming that #{source} has not changed since fetching its specs errored (#{e})"
      false
    end

    # Get all locals and override their matching sources.
    # Return true if any of the locals changed (for example,
    # they point to a new revision) or depend on new specs.
    def converge_locals
      locals = []

      Bundler.settings.local_overrides.map do |k, v|
        spec   = @dependencies.find {|s| s.name == k }
        source = spec&.source
        if source&.respond_to?(:local_override!)
          source.unlock! if @gems_to_unlock.include?(spec.name)
          locals << [source, source.local_override!(v)]
        end
      end

      sources_with_changes = locals.select do |source, changed|
        changed || specs_changed?(source)
      end.map(&:first)
      !sources_with_changes.each {|source| @sources_to_unlock << source.name }.empty?
    end

    def check_lockfile
      @locked_spec_with_invalid_deps = nil
      @locked_spec_with_missing_deps = nil
      @locked_spec_with_missing_checksums = nil

      missing_deps = []
      missing_checksums = []
      invalid = []

      @locked_specs.each do |s|
        missing_checksums << s if @locked_checksums && s.source.checksum_store.missing?(s)

        validation = @locked_specs.validate_deps(s)

        missing_deps << s if validation == :missing
        invalid << s if validation == :invalid
      end

      @locked_spec_with_missing_checksums = missing_checksums.first.name if missing_checksums.any?

      if missing_deps.any?
        @locked_specs.delete(missing_deps)

        @locked_spec_with_missing_deps = missing_deps.first.name
      end

      if invalid.any?
        @locked_specs.delete(invalid)

        @locked_spec_with_invalid_deps = invalid.first.name
      end
    end

    def converge_paths
      sources.path_sources.any? do |source|
        specs_changed?(source)
      end
    end

    def converge_sources
      # Replace the sources from the Gemfile with the sources from the Gemfile.lock,
      # if they exist in the Gemfile.lock and are `==`. If you can't find an equivalent
      # source in the Gemfile.lock, use the one from the Gemfile.
      changes = sources.replace_sources!(@locked_sources)

      sources.all_sources.each do |source|
        # has to be done separately, because we want to keep the locked checksum
        # store for a source, even when doing a full update
        if @locked_checksums && @locked_gems && locked_source = @locked_gems.sources.find {|s| s == source && !s.equal?(source) }
          source.checksum_store.merge!(locked_source.checksum_store)
        end
        # If the source is unlockable and the current command allows an unlock of
        # the source (for example, you are doing a `bundle update <foo>` of a git-pinned
        # gem), unlock it. For git sources, this means to unlock the revision, which
        # will cause the `ref` used to be the most recent for the branch (or master) if
        # an explicit `ref` is not used.
        if source.respond_to?(:unlock!) && @sources_to_unlock.include?(source.name)
          source.unlock!
          changes = true
        end
      end

      changes
    end

    def converge_dependencies
      @missing_lockfile_dep = nil
      @changed_dependencies = []

      current_dependencies.each do |dep|
        if dep.source
          dep.source = sources.get(dep.source)
        end

        name = dep.name

        dep_changed = @locked_deps[name].nil?

        unless name == "bundler"
          locked_specs = @originally_locked_specs[name]

          if locked_specs.empty?
            @missing_lockfile_dep = name if dep_changed == false
          else
            if locked_specs.map(&:source).uniq.size > 1
              @locked_specs.delete(locked_specs.select {|s| s.source != dep.source })
            end

            unless dep.matches_spec?(locked_specs.first)
              @gems_to_unlock << name
              dep_changed = true
            end
          end
        end

        @changed_dependencies << name if dep_changed
      end

      @changed_dependencies.any?
    end

    # Remove elements from the locked specs that are expired. This will most
    # commonly happen if the Gemfile has changed since the lockfile was last
    # generated
    def converge_locked_specs
      converged = converge_specs(@locked_specs)

      resolve = SpecSet.new(converged)

      diff = nil

      # Now, we unlock any sources that do not have anymore gems pinned to it
      sources.all_sources.each do |source|
        next unless source.respond_to?(:unlock!)

        unless resolve.any? {|s| s.source == source }
          diff ||= @locked_specs.to_a - resolve.to_a
          source.unlock! if diff.any? {|s| s.source == source }
        end
      end

      resolve
    end

    def converge_specs(specs)
      converged = []
      deps = []

      specs.each do |s|
        name = s.name
        dep = @dependencies.find {|d| s.satisfies?(d) }
        lockfile_source = s.source

        if dep
          gemfile_source = dep.source || default_source

          deps << dep if !dep.source || lockfile_source.include?(dep.source) || new_deps.include?(dep)

          # Replace the locked dependency's source with the equivalent source from the Gemfile
          s.source = gemfile_source
        else
          # Replace the locked dependency's source with the default source, if the locked source is no longer in the Gemfile
          s.source = default_source unless sources.get(lockfile_source)
        end

        source = s.source
        next if @sources_to_unlock.include?(source.name)

        # Path sources have special logic
        if source.instance_of?(Source::Path) || source.instance_of?(Source::Gemspec) || (source.instance_of?(Source::Git) && !@gems_to_unlock.include?(name) && deps.include?(dep))
          new_spec = source.specs[s].first
          if new_spec
            s.runtime_dependencies.replace(new_spec.runtime_dependencies)
          else
            # If the spec is no longer in the path source, unlock it. This
            # commonly happens if the version changed in the gemspec
            @gems_to_unlock << name
          end
        end

        converged << s
      end

      filter_specs(converged, deps, skips: @gems_to_unlock)
    end

    def metadata_dependencies
      @metadata_dependencies ||= [
        Dependency.new("Ruby\0", Bundler::RubyVersion.system.gem_version),
        Dependency.new("RubyGems\0", Gem::VERSION),
      ]
    end

    def source_requirements
      @source_requirements ||= find_source_requirements
    end

    def find_source_requirements
      # Record the specs available in each gem's source, so that those
      # specs will be available later when the resolver knows where to
      # look for that gemspec (or its dependencies)
      source_requirements = if precompute_source_requirements_for_indirect_dependencies?
        all_requirements = source_map.all_requirements
        { default: default_source }.merge(all_requirements)
      else
        { default: Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
      end
      source_requirements.merge!(source_map.locked_requirements) if nothing_changed?
      metadata_dependencies.each do |dep|
        source_requirements[dep.name] = sources.metadata_source
      end

      default_bundler_source = source_requirements["bundler"] || default_source

      if @unlocking_bundler
        default_bundler_source.add_dependency_names("bundler")
      else
        source_requirements[:default_bundler] = default_bundler_source
        source_requirements["bundler"] = sources.metadata_source # needs to come last to override
      end

      source_requirements
    end

    def default_source
      sources.default_source
    end

    def requested_groups
      values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
      values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
      values
    end

    def lockfiles_equal?(current, proposed, preserve_unknown_sections)
      if preserve_unknown_sections
        sections_to_ignore = LockfileParser.sections_to_ignore(@locked_bundler_version)
        sections_to_ignore += LockfileParser.unknown_sections_in_lockfile(current)
        sections_to_ignore << LockfileParser::RUBY
        sections_to_ignore << LockfileParser::BUNDLED unless @unlocking_bundler
        pattern = /#{Regexp.union(sections_to_ignore)}\n(\s{2,}.*\n)+/
        whitespace_cleanup = /\n{2,}/
        current = current.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
        proposed = proposed.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
      end
      current == proposed
    end

    def additional_base_requirements_to_prevent_downgrades(resolution_packages)
      return resolution_packages unless @locked_gems && !sources.expired_sources?(@locked_gems.sources)
      @originally_locked_specs.each do |locked_spec|
        next if locked_spec.source.is_a?(Source::Path)

        name = locked_spec.name
        next if @changed_dependencies.include?(name)

        resolution_packages.base_requirements[name] = Gem::Requirement.new(">= #{locked_spec.version}")
      end
      resolution_packages
    end

    def additional_base_requirements_to_force_updates(resolution_packages)
      return resolution_packages if @explicit_unlocks.empty?
      full_update = dup_for_full_unlock.resolve
      @explicit_unlocks.each do |name|
        version = full_update.version_for(name)
        resolution_packages.base_requirements[name] = Gem::Requirement.new("= #{version}") if version
      end
      resolution_packages
    end

    def dup_for_full_unlock
      unlocked_definition = self.class.new(@lockfile, @dependencies, @sources, true, @ruby_version, @optional_groups, @gemfiles)
      unlocked_definition.source_requirements = source_requirements
      unlocked_definition.gem_version_promoter.tap do |gvp|
        gvp.level = gem_version_promoter.level
        gvp.strict = gem_version_promoter.strict
        gvp.pre = gem_version_promoter.pre
      end
      unlocked_definition
    end

    def remove_invalid_platforms!
      return if Bundler.frozen_bundle?

      @originally_invalid_platforms = platforms.select do |platform|
        next if local_platform == platform ||
                @new_platforms.include?(platform)

        # We should probably avoid removing non-ruby platforms, since that means
        # lockfile will no longer install on those platforms, so a error to give
        # heads up to the user may be better. However, we have tests expecting
        # non ruby platform autoremoval to work, so leaving that in place for
        # now.
        next if @dependency_changes && platform != Gem::Platform::RUBY

        spec_set_incomplete_for_platform?(@originally_locked_specs, platform)
      end

      @platforms -= @originally_invalid_platforms
    end

    def spec_set_incomplete_for_platform?(spec_set, platform)
      spec_set.incomplete_for_platform?(current_dependencies, platform)
    end

    def source_map
      @source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
    end
  end
end
PK*J[hм�@@Ashare/gems/gems/bundler-2.6.7/lib/bundler/gem_version_promoter.rbnu�[���# frozen_string_literal: true

module Bundler
  # This class contains all of the logic for determining the next version of a
  # Gem to update to based on the requested level (patch, minor, major).
  # Primarily designed to work with Resolver which will provide it the list of
  # available dependency versions as found in its index, before returning it to
  # to the resolution engine to select the best version.
  class GemVersionPromoter
    attr_reader :level
    attr_accessor :pre

    # By default, strict is false, meaning every available version of a gem
    # is returned from sort_versions. The order gives preference to the
    # requested level (:patch, :minor, :major) but in complicated requirement
    # cases some gems will by necessity be promoted past the requested level,
    # or even reverted to older versions.
    #
    # If strict is set to true, the results from sort_versions will be
    # truncated, eliminating any version outside the current level scope.
    # This can lead to unexpected outcomes or even VersionConflict exceptions
    # that report a version of a gem not existing for versions that indeed do
    # existing in the referenced source.
    attr_accessor :strict

    # Creates a GemVersionPromoter instance.
    #
    # @return [GemVersionPromoter]
    def initialize
      @level = :major
      @strict = false
      @pre = false
    end

    # @param value [Symbol] One of three Symbols: :major, :minor or :patch.
    def level=(value)
      v = case value
          when String, Symbol
            value.to_sym
      end

      raise ArgumentError, "Unexpected level #{v}. Must be :major, :minor or :patch" unless [:major, :minor, :patch].include?(v)
      @level = v
    end

    # Given a Resolver::Package and an Array of Specifications of available
    # versions for a gem, this method will return the Array of Specifications
    # sorted in an order to give preference to the current level (:major, :minor
    # or :patch) when resolution is deciding what versions best resolve all
    # dependencies in the bundle.
    # @param package [Resolver::Package] The package being resolved.
    # @param specs [Specification] An array of Specifications for the package.
    # @return [Specification] A new instance of the Specification Array sorted.
    def sort_versions(package, specs)
      locked_version = package.locked_version

      result = specs.sort do |a, b|
        unless package.prerelease_specified? || pre?
          a_pre = a.prerelease?
          b_pre = b.prerelease?

          next 1 if a_pre && !b_pre
          next -1 if b_pre && !a_pre
        end

        if major? || locked_version.nil?
          b <=> a
        elsif either_version_older_than_locked?(a, b, locked_version)
          b <=> a
        elsif segments_do_not_match?(a, b, :major)
          a <=> b
        elsif !minor? && segments_do_not_match?(a, b, :minor)
          a <=> b
        else
          b <=> a
        end
      end
      post_sort(result, package.unlock?, locked_version)
    end

    # @return [bool] Convenience method for testing value of level variable.
    def major?
      level == :major
    end

    # @return [bool] Convenience method for testing value of level variable.
    def minor?
      level == :minor
    end

    # @return [bool] Convenience method for testing value of pre variable.
    def pre?
      pre == true
    end

    # Given a Resolver::Package and an Array of Specifications of available
    # versions for a gem, this method will truncate the Array if strict
    # is true. That means filtering out downgrades from the version currently
    # locked, and filtering out upgrades that go past the selected level (major,
    # minor, or patch).
    # @param package [Resolver::Package] The package being resolved.
    # @param specs [Specification] An array of Specifications for the package.
    # @return [Specification] A new instance of the Specification Array
    #   truncated.
    def filter_versions(package, specs)
      return specs unless strict

      locked_version = package.locked_version
      return specs if locked_version.nil? || major?

      specs.select do |spec|
        gsv = spec.version

        must_match = minor? ? [0] : [0, 1]

        all_match = must_match.all? {|idx| gsv.segments[idx] == locked_version.segments[idx] }
        all_match && gsv >= locked_version
      end
    end

    private

    def either_version_older_than_locked?(a, b, locked_version)
      a.version < locked_version || b.version < locked_version
    end

    def segments_do_not_match?(a, b, level)
      index = [:major, :minor].index(level)
      a.segments[index] != b.segments[index]
    end

    # Specific version moves can't always reliably be done during sorting
    # as not all elements are compared against each other.
    def post_sort(result, unlock, locked_version)
      if unlock || locked_version.nil?
        result
      else
        move_version_to_beginning(result, locked_version)
      end
    end

    def move_version_to_beginning(result, version)
      move, keep = result.partition {|s| s.version.to_s == version.to_s }
      move.concat(keep)
    end
  end
end
PK*J[�J����8share/gems/gems/bundler-2.6.7/lib/bundler/ci_detector.rbnu�[���# frozen_string_literal: true

module Bundler
  module CIDetector
    # NOTE: Any changes made here will need to be made to both lib/rubygems/ci_detector.rb and
    # bundler/lib/bundler/ci_detector.rb (which are enforced duplicates).
    # TODO: Drop that duplication once bundler drops support for RubyGems 3.4
    #
    # ## Recognized CI providers, their signifiers, and the relevant docs ##
    #
    # Travis CI   - CI, TRAVIS            https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
    # Cirrus CI   - CI, CIRRUS_CI         https://cirrus-ci.org/guide/writing-tasks/#environment-variables
    # Circle CI   - CI, CIRCLECI          https://circleci.com/docs/variables/#built-in-environment-variables
    # Gitlab CI   - CI, GITLAB_CI         https://docs.gitlab.com/ee/ci/variables/
    # AppVeyor    - CI, APPVEYOR          https://www.appveyor.com/docs/environment-variables/
    # CodeShip    - CI_NAME               https://docs.cloudbees.com/docs/cloudbees-codeship/latest/pro-builds-and-configuration/environment-variables#_default_environment_variables
    # dsari       - CI, DSARI             https://github.com/rfinnie/dsari#running
    # Jenkins     - BUILD_NUMBER          https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
    # TeamCity    - TEAMCITY_VERSION      https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html#Predefined+Server+Build+Parameters
    # Appflow     - CI_BUILD_ID           https://ionic.io/docs/appflow/automation/environments#predefined-environments
    # TaskCluster - TASKCLUSTER_ROOT_URL  https://docs.taskcluster.net/docs/manual/design/env-vars
    # Semaphore   - CI, SEMAPHORE         https://docs.semaphoreci.com/ci-cd-environment/environment-variables/
    # BuildKite   - CI, BUILDKITE         https://buildkite.com/docs/pipelines/environment-variables
    # GoCD        - GO_SERVER_URL         https://docs.gocd.org/current/faq/dev_use_current_revision_in_build.html
    # GH Actions  - CI, GITHUB_ACTIONS    https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
    #
    # ### Some "standard" ENVs that multiple providers may set ###
    #
    # * CI - this is set by _most_ (but not all) CI providers now; it's approaching a standard.
    # * CI_NAME - Not as frequently used, but some providers set this to specify their own name

    # Any of these being set is a reasonably reliable indicator that we are
    # executing in a CI environment.
    ENV_INDICATORS = [
      "CI",
      "CI_NAME",
      "CONTINUOUS_INTEGRATION",
      "BUILD_NUMBER",
      "CI_APP_ID",
      "CI_BUILD_ID",
      "CI_BUILD_NUMBER",
      "RUN_ID",
      "TASKCLUSTER_ROOT_URL",
    ].freeze

    # For each CI, this env suffices to indicate that we're on _that_ CI's
    # containers. (A few of them only supply a CI_NAME variable, which is also
    # nice). And if they set "CI" but we can't tell which one they are, we also
    # want to know that - a bare "ci" without another token tells us as much.
    ENV_DESCRIPTORS = {
      "TRAVIS" => "travis",
      "CIRCLECI" => "circle",
      "CIRRUS_CI" => "cirrus",
      "DSARI" => "dsari",
      "SEMAPHORE" => "semaphore",
      "JENKINS_URL" => "jenkins",
      "BUILDKITE" => "buildkite",
      "GO_SERVER_URL" => "go",
      "GITLAB_CI" => "gitlab",
      "GITHUB_ACTIONS" => "github",
      "TASKCLUSTER_ROOT_URL" => "taskcluster",
      "CI" => "ci",
    }.freeze

    def self.ci?
      ENV_INDICATORS.any? {|var| ENV.include?(var) }
    end

    def self.ci_strings
      matching_names = ENV_DESCRIPTORS.select {|env, _| ENV[env] }.values
      matching_names << ENV["CI_NAME"].downcase if ENV["CI_NAME"]
      matching_names.reject(&:empty?).sort.uniq
    end
  end
end
PK*J[q|TPq<q<5share/gems/gems/bundler-2.6.7/lib/bundler/settings.rbnu�[���# frozen_string_literal: true

module Bundler
  class Settings
    autoload :Mirror,  File.expand_path("mirror", __dir__)
    autoload :Mirrors, File.expand_path("mirror", __dir__)
    autoload :Validator, File.expand_path("settings/validator", __dir__)

    BOOL_KEYS = %w[
      allow_offline_install
      auto_clean_without_path
      auto_install
      cache_all
      cache_all_platforms
      clean
      default_install_uses_path
      deployment
      disable_checksum_validation
      disable_exec_load
      disable_local_branch_check
      disable_local_revision_check
      disable_shared_gems
      disable_version_check
      force_ruby_platform
      forget_cli_options
      frozen
      gem.changelog
      gem.coc
      gem.mit
      git.allow_insecure
      global_gem_cache
      ignore_messages
      init_gems_rb
      inline
      lockfile_checksums
      no_install
      no_prune
      path_relative_to_cwd
      path.system
      plugins
      prefer_patch
      print_only_version_number
      setup_makes_kernel_gem_public
      silence_deprecations
      silence_root_warning
      update_requires_all_flag
    ].freeze

    REMEMBERED_KEYS = %w[
      bin
      cache_all
      clean
      deployment
      frozen
      no_prune
      path
      shebang
      path.system
      without
      with
    ].freeze

    NUMBER_KEYS = %w[
      jobs
      redirect
      retry
      ssl_verify_mode
      timeout
    ].freeze

    ARRAY_KEYS = %w[
      only
      with
      without
    ].freeze

    STRING_KEYS = %w[
      bin
      cache_path
      console
      gem.ci
      gem.github_username
      gem.linter
      gem.rubocop
      gem.test
      gemfile
      path
      shebang
      system_bindir
      trust-policy
      version
    ].freeze

    DEFAULT_CONFIG = {
      "BUNDLE_SILENCE_DEPRECATIONS" => false,
      "BUNDLE_DISABLE_VERSION_CHECK" => true,
      "BUNDLE_PREFER_PATCH" => false,
      "BUNDLE_REDIRECT" => 5,
      "BUNDLE_RETRY" => 3,
      "BUNDLE_TIMEOUT" => 10,
      "BUNDLE_VERSION" => "lockfile",
    }.freeze

    def initialize(root = nil)
      @root            = root
      @local_config    = load_config(local_config_file)
      @local_root      = root || Pathname.new(".bundle").expand_path

      @env_config      = ENV.to_h
      @env_config.select! {|key, _value| key.start_with?("BUNDLE_") }
      @env_config.delete("BUNDLE_")

      @global_config   = load_config(global_config_file)
      @temporary       = {}

      @key_cache = {}
    end

    def [](name)
      key = key_for(name)

      value = nil
      configs.each do |_, config|
        value = config[key]
        next if value.nil?
        break
      end

      converted_value(value, name)
    end

    def set_command_option(key, value)
      if !is_remembered(key) || Bundler.feature_flag.forget_cli_options?
        temporary(key => value)
        value
      else
        set_local(key, value)
      end
    end

    def set_command_option_if_given(key, value)
      return if value.nil?
      set_command_option(key, value)
    end

    def set_local(key, value)
      local_config_file = @local_root.join("config")

      set_key(key, value, @local_config, local_config_file)
    end

    def temporary(update)
      existing = Hash[update.map {|k, _| [k, @temporary[key_for(k)]] }]
      update.each do |k, v|
        set_key(k, v, @temporary, nil)
      end
      return unless block_given?
      begin
        yield
      ensure
        existing.each {|k, v| set_key(k, v, @temporary, nil) }
      end
    end

    def set_global(key, value)
      set_key(key, value, @global_config, global_config_file)
    end

    def all
      keys = @temporary.keys.union(@global_config.keys, @local_config.keys, @env_config.keys)

      keys.map! do |key|
        key = key.delete_prefix("BUNDLE_")
        key.gsub!("___", "-")
        key.gsub!("__", ".")
        key.downcase!
        key
      end.sort!
      keys
    end

    def local_overrides
      repos = {}
      all.each do |k|
        repos[k.delete_prefix("local.")] = self[k] if k.start_with?("local.")
      end
      repos
    end

    def mirror_for(uri)
      if uri.is_a?(String)
        require_relative "vendored_uri"
        uri = Gem::URI(uri)
      end

      gem_mirrors.for(uri.to_s).uri
    end

    def credentials_for(uri)
      self[uri.to_s] || self[uri.host]
    end

    def gem_mirrors
      all.inject(Mirrors.new) do |mirrors, k|
        mirrors.parse(k, self[k]) if k.start_with?("mirror.")
        mirrors
      end
    end

    def locations(key)
      key = key_for(key)
      configs.keys.inject({}) do |partial_locations, level|
        value_on_level = configs[level][key]
        partial_locations[level] = value_on_level unless value_on_level.nil?
        partial_locations
      end
    end

    def pretty_values_for(exposed_key)
      key = key_for(exposed_key)

      locations = []

      if value = @temporary[key]
        locations << "Set for the current command: #{printable_value(value, exposed_key).inspect}"
      end

      if value = @local_config[key]
        locations << "Set for your local app (#{local_config_file}): #{printable_value(value, exposed_key).inspect}"
      end

      if value = @env_config[key]
        locations << "Set via #{key}: #{printable_value(value, exposed_key).inspect}"
      end

      if value = @global_config[key]
        locations << "Set for the current user (#{global_config_file}): #{printable_value(value, exposed_key).inspect}"
      end

      return ["You have not configured a value for `#{exposed_key}`"] if locations.empty?
      locations
    end

    def processor_count
      require "etc"
      Etc.nprocessors
    rescue StandardError
      1
    end

    # for legacy reasons, in Bundler 2, we do not respect :disable_shared_gems
    def path
      configs.each do |_level, settings|
        path = value_for("path", settings)
        path_system = value_for("path.system", settings)
        disabled_shared_gems = value_for("disable_shared_gems", settings)
        next if path.nil? && path_system.nil? && disabled_shared_gems.nil?
        system_path = path_system || (disabled_shared_gems == false)
        return Path.new(path, system_path)
      end

      path = "vendor/bundle" if self[:deployment]

      Path.new(path, false)
    end

    Path = Struct.new(:explicit_path, :system_path) do
      def path
        path = base_path
        path = File.join(path, Bundler.ruby_scope) unless use_system_gems?
        path
      end

      def use_system_gems?
        return true if system_path
        return false if explicit_path
        !Bundler.feature_flag.default_install_uses_path?
      end

      def base_path
        path = explicit_path
        path ||= ".bundle" unless use_system_gems?
        path ||= Bundler.rubygems.gem_dir
        path
      end

      def base_path_relative_to_pwd
        base_path = Pathname.new(self.base_path)
        expanded_base_path = base_path.expand_path(Bundler.root)
        relative_path = expanded_base_path.relative_path_from(Pathname.pwd)
        if relative_path.to_s.start_with?("..")
          relative_path = base_path if base_path.absolute?
        else
          relative_path = Pathname.new(File.join(".", relative_path))
        end
        relative_path
      rescue ArgumentError
        expanded_base_path
      end

      def validate!
        return unless explicit_path && system_path
        path = Bundler.settings.pretty_values_for(:path)
        path.unshift(nil, "path:") unless path.empty?
        system_path = Bundler.settings.pretty_values_for("path.system")
        system_path.unshift(nil, "path.system:") unless system_path.empty?
        disable_shared_gems = Bundler.settings.pretty_values_for(:disable_shared_gems)
        disable_shared_gems.unshift(nil, "disable_shared_gems:") unless disable_shared_gems.empty?
        raise InvalidOption,
          "Using a custom path while using system gems is unsupported.\n#{path.join("\n")}\n#{system_path.join("\n")}\n#{disable_shared_gems.join("\n")}"
      end
    end

    def ignore_config?
      ENV["BUNDLE_IGNORE_CONFIG"]
    end

    def app_cache_path
      @app_cache_path ||= self[:cache_path] || "vendor/cache"
    end

    def validate!
      all.each do |raw_key|
        [@local_config, @env_config, @global_config].each do |settings|
          value = value_for(raw_key, settings)
          Validator.validate!(raw_key, value, settings.dup)
        end
      end
    end

    def key_for(key)
      @key_cache[key] ||= self.class.key_for(key)
    end

    private

    def configs
      @configs ||= {
        temporary: @temporary,
        local: @local_config,
        env: @env_config,
        global: @global_config,
        default: DEFAULT_CONFIG,
      }
    end

    def value_for(name, config)
      converted_value(config[key_for(name)], name)
    end

    def parent_setting_for(name)
      split_specific_setting_for(name)[0]
    end

    def specific_gem_for(name)
      split_specific_setting_for(name)[1]
    end

    def split_specific_setting_for(name)
      name.split(".")
    end

    def is_bool(name)
      name = self.class.key_to_s(name)
      BOOL_KEYS.include?(name) || BOOL_KEYS.include?(parent_setting_for(name))
    end

    def is_string(name)
      name = self.class.key_to_s(name)
      STRING_KEYS.include?(name) || name.start_with?("local.") || name.start_with?("mirror.") || name.start_with?("build.")
    end

    def to_bool(value)
      case value
      when String
        value.match?(/\A(false|f|no|n|0|)\z/i) ? false : true
      when nil, false
        false
      else
        true
      end
    end

    def is_num(key)
      NUMBER_KEYS.include?(self.class.key_to_s(key))
    end

    def is_array(key)
      ARRAY_KEYS.include?(self.class.key_to_s(key))
    end

    def is_remembered(key)
      REMEMBERED_KEYS.include?(self.class.key_to_s(key))
    end

    def is_credential(key)
      key == "gem.push_key"
    end

    def is_userinfo(value)
      value.include?(":")
    end

    def to_array(value)
      return [] unless value
      value.tr(" ", ":").split(":").map(&:to_sym)
    end

    def array_to_s(array)
      array = Array(array)
      return nil if array.empty?
      array.join(":").tr(" ", ":")
    end

    def set_key(raw_key, value, hash, file)
      raw_key = self.class.key_to_s(raw_key)
      value = array_to_s(value) if is_array(raw_key)

      key = key_for(raw_key)

      return if hash[key] == value

      hash[key] = value
      hash.delete(key) if value.nil?

      Validator.validate!(raw_key, converted_value(value, raw_key), hash)

      return unless file

      SharedHelpers.filesystem_access(file.dirname, :create) do |p|
        FileUtils.mkdir_p(p)
      end

      SharedHelpers.filesystem_access(file) do |p|
        p.open("w") {|f| f.write(serializer_class.dump(hash)) }
      end
    end

    def converted_value(value, key)
      key = self.class.key_to_s(key)

      if is_array(key)
        to_array(value)
      elsif value.nil?
        nil
      elsif is_bool(key) || value == "false"
        to_bool(value)
      elsif is_num(key)
        value.to_i
      else
        value.to_s
      end
    end

    def printable_value(value, key)
      converted = converted_value(value, key)
      return converted unless converted.is_a?(String)

      if is_string(key)
        converted
      elsif is_credential(key)
        "[REDACTED]"
      elsif is_userinfo(converted)
        username, pass = converted.split(":", 2)

        if pass == "x-oauth-basic"
          username = "[REDACTED]"
        else
          pass = "[REDACTED]"
        end

        [username, pass].join(":")
      else
        converted
      end
    end

    def global_config_file
      if ENV["BUNDLE_CONFIG"] && !ENV["BUNDLE_CONFIG"].empty?
        Pathname.new(ENV["BUNDLE_CONFIG"])
      elsif ENV["BUNDLE_USER_CONFIG"] && !ENV["BUNDLE_USER_CONFIG"].empty?
        Pathname.new(ENV["BUNDLE_USER_CONFIG"])
      elsif ENV["BUNDLE_USER_HOME"] && !ENV["BUNDLE_USER_HOME"].empty?
        Pathname.new(ENV["BUNDLE_USER_HOME"]).join("config")
      elsif Bundler.rubygems.user_home && !Bundler.rubygems.user_home.empty?
        Pathname.new(Bundler.rubygems.user_home).join(".bundle/config")
      end
    end

    def local_config_file
      Pathname.new(@root).join("config") if @root
    end

    def load_config(config_file)
      return {} if !config_file || ignore_config?
      SharedHelpers.filesystem_access(config_file, :read) do |file|
        valid_file = file.exist? && !file.size.zero?
        return {} unless valid_file
        serializer_class.load(file.read).inject({}) do |config, (k, v)|
          k = k.dup
          k << "/" if /https?:/i.match?(k) && !k.end_with?("/", "__#{FALLBACK_TIMEOUT_URI_OPTION.upcase}")
          k.gsub!(".", "__")

          unless k.start_with?("#")
            if k.include?("-")
              Bundler.ui.warn "Your #{file} config includes `#{k}`, which contains the dash character (`-`).\n" \
                "This is deprecated, because configuration through `ENV` should be possible, but `ENV` keys cannot include dashes.\n" \
                "Please edit #{file} and replace any dashes in configuration keys with a triple underscore (`___`)."

              # string hash keys are frozen
              k = k.gsub("-", "___")
            end

            config[k] = v
          end

          config
        end
      end
    end

    def serializer_class
      require "rubygems/yaml_serializer"
      Gem::YAMLSerializer
    rescue LoadError
      # TODO: Remove this when RubyGems 3.4 is EOL
      require_relative "yaml_serializer"
      YAMLSerializer
    end

    FALLBACK_TIMEOUT_URI_OPTION = "fallback_timeout"

    NORMALIZE_URI_OPTIONS_PATTERN =
      /
        \A
        (\w+\.)? # optional prefix key
        (https?.*?) # URI
        (\.#{FALLBACK_TIMEOUT_URI_OPTION})? # optional suffix key
        \z
      /ix

    def self.key_for(key)
      key = key_to_s(key)
      key = normalize_uri(key) if key.start_with?("http", "mirror.http")
      key = key.gsub(".", "__")
      key.gsub!("-", "___")
      key.upcase!

      key.gsub(/\A([ #]*)/, '\1BUNDLE_')
    end

    # TODO: duplicates Rubygems#normalize_uri
    # TODO: is this the correct place to validate mirror URIs?
    def self.normalize_uri(uri)
      uri = uri.to_s
      if uri =~ NORMALIZE_URI_OPTIONS_PATTERN
        prefix = $1
        uri = $2
        suffix = $3
      end
      uri = URINormalizer.normalize_suffix(uri)
      require_relative "vendored_uri"
      uri = Gem::URI(uri)
      unless uri.absolute?
        raise ArgumentError, format("Gem sources must be absolute. You provided '%s'.", uri)
      end
      "#{prefix}#{uri}#{suffix}"
    end

    # This is a hot method, so avoid respond_to? checks on every invocation
    if :read.respond_to?(:name)
      def self.key_to_s(key)
        case key
        when String
          key
        when Symbol
          key.name
        when Gem::URI::HTTP
          key.to_s
        else
          raise ArgumentError, "Invalid key: #{key.inspect}"
        end
      end
    else
      def self.key_to_s(key)
        case key
        when String
          key
        when Symbol
          key.to_s
        when Gem::URI::HTTP
          key.to_s
        else
          raise ArgumentError, "Invalid key: #{key.inspect}"
        end
      end
    end
  end
end
PK*J[Xݝ���Cshare/gems/gems/bundler-2.6.7/lib/bundler/endpoint_specification.rbnu�[���# frozen_string_literal: true

module Bundler
  # used for Creating Specifications from the Gemcutter Endpoint
  class EndpointSpecification < Gem::Specification
    include MatchRemoteMetadata

    attr_reader :name, :version, :platform, :checksum
    attr_writer :dependencies
    attr_accessor :remote, :locked_platform

    def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
      super()
      @name         = name
      @version      = Gem::Version.create version
      @platform     = Gem::Platform.new(platform)
      @spec_fetcher = spec_fetcher
      @dependencies = nil
      @unbuilt_dependencies = dependencies

      @loaded_from          = nil
      @remote_specification = nil
      @locked_platform = nil

      parse_metadata(metadata)
    end

    def insecurely_materialized?
      @locked_platform.to_s != @platform.to_s
    end

    def fetch_platform
      @platform
    end

    def dependencies
      @dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) }
    end
    alias_method :runtime_dependencies, :dependencies

    # needed for standalone, load required_paths from local gemspec
    # after the gem is installed
    def require_paths
      if @remote_specification
        @remote_specification.require_paths
      elsif _local_specification
        _local_specification.require_paths
      else
        super
      end
    end

    # needed for inline
    def load_paths
      # remote specs aren't installed, and can't have load_paths
      if _local_specification
        _local_specification.load_paths
      else
        super
      end
    end

    # needed for binstubs
    def executables
      if @remote_specification
        @remote_specification.executables
      elsif _local_specification
        _local_specification.executables
      else
        super
      end
    end

    # needed for bundle clean
    def bindir
      if @remote_specification
        @remote_specification.bindir
      elsif _local_specification
        _local_specification.bindir
      else
        super
      end
    end

    # needed for post_install_messages during install
    def post_install_message
      if @remote_specification
        @remote_specification.post_install_message
      elsif _local_specification
        _local_specification.post_install_message
      else
        super
      end
    end

    # needed for "with native extensions" during install
    def extensions
      if @remote_specification
        @remote_specification.extensions
      elsif _local_specification
        _local_specification.extensions
      else
        super
      end
    end

    # needed for `bundle fund`
    def metadata
      if @remote_specification
        @remote_specification.metadata
      elsif _local_specification
        _local_specification.metadata
      else
        super
      end
    end

    def _local_specification
      return unless @loaded_from && File.exist?(local_specification_path)
      eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec|
        spec.loaded_from = @loaded_from
      end
    end

    def __swap__(spec)
      SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
      @remote_specification = spec
    end

    def inspect
      "#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
    end

    private

    def _remote_specification
      @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
    end

    def local_specification_path
      "#{base_dir}/specifications/#{full_name}.gemspec"
    end

    def parse_metadata(data)
      unless data
        @required_ruby_version = nil
        @required_rubygems_version = nil
        return
      end

      data.each do |k, v|
        next unless v
        case k.to_s
        when "checksum"
          begin
            @checksum = Checksum.from_api(v.last, @spec_fetcher.uri)
          rescue ArgumentError => e
            raise ArgumentError, "Invalid checksum for #{full_name}: #{e.message}"
          end
        when "rubygems"
          @required_rubygems_version = Gem::Requirement.new(v)
        when "ruby"
          @required_ruby_version = Gem::Requirement.new(v)
        end
      end
    rescue StandardError => e
      raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
    end

    def build_dependency(name, requirements)
      Dependency.new(name, requirements)
    end
  end
end
PK*J[ǻ��ii'share/gems/gems/rackup-2.1.0/bin/rackupnuȯ��#!/usr/bin/env ruby
# frozen_string_literal: true

require_relative "../lib/rackup"
Rackup::Server.start
PK*J[e
�ee(share/gems/gems/rackup-2.1.0/security.mdnu�[���# Security Policy

Please see our main security policy: https://github.com/rack/rack/security/policy
PK*J[z����'share/gems/gems/rackup-2.1.0/license.mdnu�[���# MIT License

Copyright, 2007-2009, by Leah Neukirchen.  
Copyright, 2008, by Marc-André Cournoyer.  
Copyright, 2009, by Aaron Pfeifer.  
Copyright, 2009-2010, by Megan Batty.  
Copyright, 2009-2010, by Michael Fellinger.  
Copyright, 2009, by Genki Takiuchi.  
Copyright, 2009, by Joshua Peek.  
Copyright, 2009, by Yehuda Katz + Carl Lerche.  
Copyright, 2009, by Carl Lerche.  
Copyright, 2010, by Julik Tarkhanov.  
Copyright, 2010-2016, by James Tucker.  
Copyright, 2010, by Timur Batyrshin.  
Copyright, 2010, by Loren Segal.  
Copyright, 2010, by Andrew Bortz.  
Copyright, 2010, by John Barnette.  
Copyright, 2010, by John Sumsion.  
Copyright, 2011-2018, by Aaron Patterson.  
Copyright, 2011, by Konstantin Haase.  
Copyright, 2011, by Blake Mizerany.  
Copyright, 2011, by Tsutomu Kuroda.  
Copyright, 2012, by Jean Boussier.  
Copyright, 2012, by Trevor Wennblom.  
Copyright, 2012, by Anurag Priyam.  
Copyright, 2012, by Hrvoje Šimić.  
Copyright, 2013, by Uchio KONDO.  
Copyright, 2013, by Tim Moore.  
Copyright, 2013, by Postmodern.  
Copyright, 2013, by Bas Vodde.  
Copyright, 2013, by Joe Fiorini.  
Copyright, 2014, by Wyatt Pan.  
Copyright, 2014, by Lenny Marks.  
Copyright, 2014, by Igor Bochkariov.  
Copyright, 2014, by Max Cantor.  
Copyright, 2014, by David Celis.  
Copyright, 2014, by Rafael Mendonça França.  
Copyright, 2014, by Jeremy Kemper.  
Copyright, 2014, by Richard Schneeman.  
Copyright, 2015, by Peter Wilmott.  
Copyright, 2015, by Sean McGivern.  
Copyright, 2015, by Tadashi Saito.  
Copyright, 2015, by deepj.  
Copyright, 2015, by Zachary Scott.  
Copyright, 2016, by Sophie Deziel.  
Copyright, 2016, by Kazuya Hotta.  
Copyright, 2017, by Ryunosuke Sato.  
Copyright, 2017-2023, by Samuel Williams.  
Copyright, 2018, by Dillon Welch.  
Copyright, 2018, by Yoshiyuki Hirano.  
Copyright, 2018, by Nick LaMuro.  
Copyright, 2019, by Rafael França.  
Copyright, 2019, by Krzysztof Rybka.  
Copyright, 2019, by Misaki Shioi.  
Copyright, 2020-2022, by Jeremy Evans.  
Copyright, 2021, by Katsuhiko YOSHIDA.  
Copyright, 2021, by KS.  
Copyright, 2021, by Stephen Paul Weber.  
Copyright, 2022, by Akira Matsuda.  
Copyright, 2022, by Andrew Hoglund.  

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
PK*J[�F��;;2share/gems/gems/rackup-2.1.0/lib/rackup/handler.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

module Rackup
  # *Handlers* connect web servers with Rack.
  #
  # Rackup includes Handlers for WEBrick and CGI.
  #
  # Handlers usually are activated by calling <tt>MyHandler.run(myapp)</tt>.
  # A second optional hash can be passed to include server-specific
  # configuration.
  module Handler
    @handlers = {}

    # Register a named handler class.
    def self.register(name, klass)
      if klass.is_a?(String)
        warn "Calling Rackup::Handler.register with a string is deprecated, use the class/module itself.", uplevel: 1

        klass = self.const_get(klass, false)
      end

      name = name.to_sym

      @handlers[name] = klass
    end

    def self.[](name)
      name = name.to_sym

      begin
        @handlers[name] || self.const_get(name, false)
      rescue NameError
        # Ignore.
      end
    end

    def self.get(name)
      return nil unless name

      name = name.to_sym

      if server = self[name]
        return server
      end

      begin
        require_handler("rackup/handler", name)
      rescue LoadError
        require_handler("rack/handler", name)
      end

      return self[name]
    end

    RACK_HANDLER = 'RACK_HANDLER'
    RACKUP_HANDLER = 'RACKUP_HANDLER'

    SERVER_NAMES = %i(puma falcon webrick).freeze
    private_constant :SERVER_NAMES

    # Select first available Rack handler given an `Array` of server names.
    # Raises `LoadError` if no handler was found.
    #
    #   > pick ['puma', 'webrick']
    #   => Rackup::Handler::WEBrick
    def self.pick(server_names)
      server_names = Array(server_names)

      server_names.each do |server_name|
        begin
          server = self.get(server_name)
         return server if server
        rescue LoadError
          # Ignore.
        end
      end

      raise LoadError, "Couldn't find handler for: #{server_names.join(', ')}."
    end

    def self.default
      if rack_handler = ENV[RACKUP_HANDLER]
        self.get(rack_handler)
      elsif rack_handler = ENV[RACK_HANDLER]
        warn "RACK_HANDLER is deprecated, use RACKUP_HANDLER."
        self.get(rack_handler)
      else
        pick SERVER_NAMES
      end
    end

    # Transforms server-name constants to their canonical form as filenames,
    # then tries to require them but silences the LoadError if not found
    #
    # Naming convention:
    #
    #   Foo # => 'foo'
    #   FooBar # => 'foo_bar.rb'
    #   FooBAR # => 'foobar.rb'
    #   FOObar # => 'foobar.rb'
    #   FOOBAR # => 'foobar.rb'
    #   FooBarBaz # => 'foo_bar_baz.rb'
    def self.require_handler(prefix, const_name)
      file = const_name.to_s.gsub(/^[A-Z]+/) { |pre| pre.downcase }.
        gsub(/[A-Z]+[^A-Z]/, '_\&').downcase

      require(::File.join(prefix, file))
    end
  end
end
PK*J[���|��:share/gems/gems/rackup-2.1.0/lib/rackup/handler/webrick.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.
# Copyright, 2022, by Jeremy Evans.

require 'webrick'
require 'stringio'

require 'rack/constants'
require_relative '../handler'
require_relative '../version'

require_relative '../stream'

module Rackup
  module Handler
    class WEBrick < ::WEBrick::HTTPServlet::AbstractServlet
      def self.run(app, **options)
        environment  = ENV['RACK_ENV'] || 'development'
        default_host = environment == 'development' ? 'localhost' : nil

        if !options[:BindAddress] || options[:Host]
          options[:BindAddress] = options.delete(:Host) || default_host
        end
        options[:Port] ||= 8080
        if options[:SSLEnable]
          require 'webrick/https'
        end

        @server = ::WEBrick::HTTPServer.new(options)
        @server.mount "/", Rackup::Handler::WEBrick, app
        yield @server if block_given?
        @server.start
      end

      def self.valid_options
        environment  = ENV['RACK_ENV'] || 'development'
        default_host = environment == 'development' ? 'localhost' : '0.0.0.0'

        {
          "Host=HOST" => "Hostname to listen on (default: #{default_host})",
          "Port=PORT" => "Port to listen on (default: 8080)",
        }
      end

      def self.shutdown
        if @server
          @server.shutdown
          @server = nil
        end
      end

      def initialize(server, app)
        super server
        @app = app
      end

      # This handles mapping the WEBrick request to a Rack input stream.
      class Input
        include Stream::Reader

        def initialize(request)
          @request = request

          @reader = Fiber.new do
            @request.body do |chunk|
              Fiber.yield(chunk)
            end

            Fiber.yield(nil)

            # End of stream:
            @reader = nil
          end
        end

        def close
          @request = nil
          @reader = nil
        end

        private

        # Read one chunk from the request body.
        def read_next
          @reader&.resume
        end
      end

      def service(req, res)
        env = req.meta_vars
        env.delete_if { |k, v| v.nil? }

        input = Input.new(req)

        env.update(
          ::Rack::RACK_INPUT => input,
          ::Rack::RACK_ERRORS => $stderr,
          ::Rack::RACK_URL_SCHEME => ["yes", "on", "1"].include?(env[::Rack::HTTPS]) ? "https" : "http",
          ::Rack::RACK_IS_HIJACK => true,
        )

        env[::Rack::QUERY_STRING] ||= ""
        unless env[::Rack::PATH_INFO] == ""
          path, n = req.request_uri.path, env[::Rack::SCRIPT_NAME].length
          env[::Rack::PATH_INFO] = path[n, path.length - n]
        end
        env[::Rack::REQUEST_PATH] ||= [env[::Rack::SCRIPT_NAME], env[::Rack::PATH_INFO]].join

        status, headers, body = @app.call(env)
        begin
          res.status = status

          if value = headers[::Rack::RACK_HIJACK]
            io_lambda = value
            body = nil
          elsif !body.respond_to?(:to_path) && !body.respond_to?(:each)
            io_lambda = body
            body = nil
          end

          if value = headers.delete('set-cookie')
            res.cookies.concat(Array(value))
          end

          headers.each do |key, value|
            # Skip keys starting with rack., per Rack SPEC
            next if key.start_with?('rack.')

            # Since WEBrick won't accept repeated headers,
            # merge the values per RFC 1945 section 4.2.
            value = value.join(", ") if Array === value
            res[key] = value
          end

          if io_lambda
            protocol = headers['rack.protocol'] || headers['upgrade']

            if protocol
              # Set all the headers correctly for an upgrade response:
              res.upgrade!(protocol)
            end
            res.body = io_lambda
          elsif body.respond_to?(:to_path)
            res.body = ::File.open(body.to_path, 'rb')
          else
            buffer = String.new
            body.each do |part|
              buffer << part
            end
            res.body = buffer
          end
        ensure
          body.close if body.respond_to?(:close)
        end
      end
    end

    register :webrick, WEBrick
  end
end
PK*J[���HH6share/gems/gems/rackup-2.1.0/lib/rackup/handler/cgi.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

module Rackup
  module Handler
    class CGI
      include Rack

      def self.run(app, **options)
        $stdin.binmode
        serve app
      end

      def self.serve(app)
        env = ENV.to_hash
        env.delete "HTTP_CONTENT_LENGTH"

        env[SCRIPT_NAME] = ""  if env[SCRIPT_NAME] == "/"

        env.update(
          RACK_INPUT        => $stdin,
          RACK_ERRORS       => $stderr,
          RACK_URL_SCHEME   => ["yes", "on", "1"].include?(ENV[HTTPS]) ? "https" : "http"
        )

        env[QUERY_STRING] ||= ""
        env[REQUEST_PATH] ||= "/"

        status, headers, body = app.call(env)
        begin
          send_headers status, headers
          send_body body
        ensure
          body.close  if body.respond_to? :close
        end
      end

      def self.send_headers(status, headers)
        $stdout.print "Status: #{status}\r\n"
        headers.each { |k, vs|
          vs.split("\n").each { |v|
            $stdout.print "#{k}: #{v}\r\n"
          }
        }
        $stdout.print "\r\n"
        $stdout.flush
      end

      def self.send_body(body)
        body.each { |part|
          $stdout.print part
          $stdout.flush
        }
      end
    end

    register :cgi, CGI
  end
end
PK*J[lo|	��1share/gems/gems/rackup-2.1.0/lib/rackup/stream.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2019-2022, by Samuel Williams.

module Rackup
  # The input stream is an IO-like object which contains the raw HTTP POST data. When applicable, its external encoding must be “ASCII-8BIT” and it must be opened in binary mode, for Ruby 1.9 compatibility. The input stream must respond to gets, each, read and rewind.
  class Stream
    def initialize(input = nil, output = Buffered.new)
      @input = input
      @output = output

      raise ArgumentError, "Non-writable output!" unless output.respond_to?(:write)

      # Will hold remaining data in `#read`.
      @buffer = nil
      @closed = false
    end

    attr :input
    attr :output

    # This provides a read-only interface for data, which is surprisingly tricky to implement correctly.
    module Reader
      # rack.hijack_io must respond to:
      # read, write, read_nonblock, write_nonblock, flush, close, close_read, close_write, closed?

      # read behaves like IO#read. Its signature is read([length, [buffer]]). If given, length must be a non-negative Integer (>= 0) or nil, and buffer must be a String and may not be nil. If length is given and not nil, then this method reads at most length bytes from the input stream. If length is not given or nil, then this method reads all data until EOF. When EOF is reached, this method returns nil if length is given and not nil, or “” if length is not given or is nil. If buffer is given, then the read data will be placed into buffer instead of a newly created String object.
      # @param length [Integer] the amount of data to read
      # @param buffer [String] the buffer which will receive the data
      # @return a buffer containing the data
      def read(length = nil, buffer = nil)
        return '' if length == 0

        buffer ||= String.new.force_encoding(Encoding::BINARY)

        # Take any previously buffered data and replace it into the given buffer.
        if @buffer
          buffer.replace(@buffer)
          @buffer = nil
        else
          buffer.clear
        end

        if length
          while buffer.bytesize < length and chunk = read_next
            buffer << chunk
          end

          # This ensures the subsequent `slice!` works correctly.
          buffer.force_encoding(Encoding::BINARY)

          # This will be at least one copy:
          @buffer = buffer.byteslice(length, buffer.bytesize)

          # This should be zero-copy:
          buffer.slice!(length, buffer.bytesize)

          if buffer.empty?
            return nil
          else
            return buffer
          end
        else
          while chunk = read_next
            buffer << chunk
          end

          return buffer
        end
      end

      # Read at most `length` bytes from the stream. Will avoid reading from the underlying stream if possible.
      def read_partial(length = nil)
        if @buffer
          buffer = @buffer
          @buffer = nil
        else
          buffer = read_next
        end

        if buffer and length
          if buffer.bytesize > length
            # This ensures the subsequent `slice!` works correctly.
            buffer.force_encoding(Encoding::BINARY)

            @buffer = buffer.byteslice(length, buffer.bytesize)
            buffer.slice!(length, buffer.bytesize)
          end
        end

        return buffer
      end

      def gets
        read_partial
      end

      def each
        while chunk = read_partial
          yield chunk
        end
      end

      def read_nonblock(length, buffer = nil)
        @buffer ||= read_next
        chunk = nil

        unless @buffer
          buffer&.clear
          return
        end

        if @buffer.bytesize > length
          chunk = @buffer.byteslice(0, length)
          @buffer = @buffer.byteslice(length, @buffer.bytesize)
        else
          chunk = @buffer
          @buffer = nil
        end

        if buffer
          buffer.replace(chunk)
        else
          buffer = chunk
        end

        return buffer
      end
    end

    include Reader

    def write(buffer)
      if @output
        @output.write(buffer)
        return buffer.bytesize
      else
        raise IOError, "Stream is not writable, output has been closed!"
      end
    end

    def write_nonblock(buffer)
      write(buffer)
    end

    def <<(buffer)
      write(buffer)
    end

    def flush
    end

    def close_read
      @input&.close
      @input = nil
    end

    # close must never be called on the input stream. huh?
    def close_write
      if @output.respond_to?(:close)
        @output&.close
      end

      @output = nil
    end

    # Close the input and output bodies.
    def close(error = nil)
      self.close_read
      self.close_write

      return nil
    ensure
      @closed = true
    end

    # Whether the stream has been closed.
    def closed?
      @closed
    end

    # Whether there are any output chunks remaining?
    def empty?
      @output.empty?
    end

    private

    def read_next
      if @input
        return @input.read
      else
        @input = nil
        raise IOError, "Stream is not readable, input has been closed!"
      end
    end
  end
end
PK*J[�����2share/gems/gems/rackup-2.1.0/lib/rackup/lobster.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

require 'zlib'

require 'rack/constants'
require 'rack/request'
require 'rack/response'

module Rackup
  # Paste has a Pony, Rack has a Lobster!
  class Lobster
    include Rack

    LobsterString = Zlib::Inflate.inflate("eJx9kEEOwyAMBO99xd7MAcytUhPlJyj2
    P6jy9i4k9EQyGAnBarEXeCBqSkntNXsi/ZCvC48zGQoZKikGrFMZvgS5ZHd+aGWVuWwhVF0
    t1drVmiR42HcWNz5w3QanT+2gIvTVCiE1lm1Y0eU4JGmIIbaKwextKn8rvW+p5PIwFl8ZWJ
    I8jyiTlhTcYXkekJAzTyYN6E08A+dk8voBkAVTJQ==".delete("\n ").unpack("m*")[0])

    LambdaLobster = lambda { |env|
      if env[QUERY_STRING].include?("flip")
        lobster = LobsterString.split("\n").
          map { |line| line.ljust(42).reverse }.
          join("\n")
        href = "?"
      else
        lobster = LobsterString
        href = "?flip"
      end

      content = ["<title>Lobstericious!</title>",
                 "<pre>", lobster, "</pre>",
                 "<a href='#{href}'>flip!</a>"]
      length = content.inject(0) { |a, e| a + e.size }.to_s
      [200, { CONTENT_TYPE => "text/html", CONTENT_LENGTH => length }, content]
    }

    def call(env)
      req = Request.new(env)
      if req.GET["flip"] == "left"
        lobster = LobsterString.split("\n").map do |line|
          line.ljust(42).reverse.
            gsub('\\', 'TEMP').
            gsub('/', '\\').
            gsub('TEMP', '/').
            gsub('{', '}').
            gsub('(', ')')
        end.join("\n")
        href = "?flip=right"
      elsif req.GET["flip"] == "crash"
        raise "Lobster crashed"
      else
        lobster = LobsterString
        href = "?flip=left"
      end

      res = Response.new
      res.write "<title>Lobstericious!</title>"
      res.write "<pre>"
      res.write lobster
      res.write "</pre>"
      res.write "<p><a href='#{href}'>flip!</a></p>"
      res.write "<p><a href='?flip=crash'>crash!</a></p>"
      res.finish
    end

  end
end

if $0 == __FILE__
  # :nocov:
  require_relative 'server'
  require_relative 'show_exceptions'
  require_relative 'lint'
  Rackup::Server.start(
    app: Rack::ShowExceptions.new(Rack::Lint.new(Rackup::Lobster.new)), Port: 9292
  )
  # :nocov:
end
PK*J[�cϛ��2share/gems/gems/rackup-2.1.0/lib/rackup/version.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

module Rackup
  VERSION = "2.1.0"
end
PK*J[/�:�4�41share/gems/gems/rackup-2.1.0/lib/rackup/server.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

require 'optparse'
require 'fileutils'

require 'rack/builder'
require 'rack/common_logger'
require 'rack/content_length'
require 'rack/show_exceptions'
require 'rack/lint'
require 'rack/tempfile_reaper'

require 'rack/version'

require_relative 'version'
require_relative 'handler'

module Rackup
  class Server
    class Options
      def parse!(args)
        options = {}
        opt_parser = OptionParser.new("", 24, '  ') do |opts|
          opts.banner = "Usage: rackup [ruby options] [rack options] [rackup config]"

          opts.separator ""
          opts.separator "Ruby options:"

          lineno = 1
          opts.on("-e", "--eval LINE", "evaluate a LINE of code") { |line|
            eval line, TOPLEVEL_BINDING, "-e", lineno
            lineno += 1
          }

          opts.on("-d", "--debug", "set debugging flags (set $DEBUG to true)") {
            options[:debug] = true
          }
          opts.on("-w", "--warn", "turn warnings on for your script") {
            options[:warn] = true
          }
          opts.on("-q", "--quiet", "turn off logging") {
            options[:quiet] = true
          }

          opts.on("-I", "--include PATH",
                  "specify $LOAD_PATH (may be used more than once)") { |path|
            (options[:include] ||= []).concat(path.split(":"))
          }

          opts.on("-r", "--require LIBRARY",
                  "require the library, before executing your script") { |library|
            (options[:require] ||= []) << library
          }

          opts.separator ""
          opts.separator "Rack options:"
          opts.on("-b", "--builder BUILDER_LINE", "evaluate a BUILDER_LINE of code as a builder script") { |line|
            options[:builder] = line
          }

          opts.on("-s", "--server SERVER", "serve using SERVER (thin/puma/webrick)") { |s|
            options[:server] = s
          }

          opts.on("-o", "--host HOST", "listen on HOST (default: localhost)") { |host|
            options[:Host] = host
          }

          opts.on("-p", "--port PORT", "use PORT (default: 9292)") { |port|
            options[:Port] = port
          }

          opts.on("-O", "--option NAME[=VALUE]", "pass VALUE to the server as option NAME. If no VALUE, sets it to true. Run '#{$0} -s SERVER -h' to get a list of options for SERVER") { |name|
            name, value = name.split('=', 2)
            value = true if value.nil?
            options[name.to_sym] = value
          }

          opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
            options[:environment] = e
          }

          opts.on("-D", "--daemonize", "run daemonized in the background") { |d|
            options[:daemonize] ||= true
          }

          opts.on("--daemonize-noclose", "run daemonized in the background without closing stdout/stderr") {
            options[:daemonize] = :noclose
          }

          opts.on("-P", "--pid FILE", "file to store PID") { |f|
            options[:pid] = ::File.expand_path(f)
          }

          opts.separator ""
          opts.separator "Profiling options:"

          opts.on("--heap HEAPFILE", "Build the application, then dump the heap to HEAPFILE") do |e|
            options[:heapfile] = e
          end

          opts.on("--profile PROFILE", "Dump CPU or Memory profile to PROFILE (defaults to a tempfile)") do |e|
            options[:profile_file] = e
          end

          opts.on("--profile-mode MODE", "Profile mode (cpu|wall|object)") do |e|
            unless %w[cpu wall object].include?(e)
              raise OptionParser::InvalidOption, "unknown profile mode: #{e}"
            end
            options[:profile_mode] = e.to_sym
          end

          opts.separator ""
          opts.separator "Common options:"

          opts.on_tail("-h", "-?", "--help", "Show this message") do
            puts opts
            puts handler_opts(options)

            exit
          end

          opts.on_tail("--version", "Show version") do
            puts "Rack #{Rack::RELEASE}"
            exit
          end
        end

        begin
          opt_parser.parse! args
        rescue OptionParser::InvalidOption => e
          warn e.message
          abort opt_parser.to_s
        end

        options[:config] = args.last if args.last && !args.last.empty?
        options
      end

      def handler_opts(options)
        info = []
        server = Rackup::Handler.get(options[:server]) || Rackup::Handler.default
        if server && server.respond_to?(:valid_options)
          info << ""
          info << "Server-specific options for #{server.name}:"

          has_options = false
          server.valid_options.each do |name, description|
            next if /^(Host|Port)[^a-zA-Z]/.match?(name.to_s) # ignore handler's host and port options, we do our own.
            info << sprintf("  -O %-21s %s", name, description)
            has_options = true
          end
          return "" if !has_options
        end
        info.join("\n")
      rescue NameError, LoadError
        return "Warning: Could not find handler specified (#{options[:server] || 'default'}) to determine handler-specific options"
      end
    end

    # Start a new rack server (like running rackup). This will parse ARGV and
    # provide standard ARGV rackup options, defaulting to load 'config.ru'.
    #
    # Providing an options hash will prevent ARGV parsing and will not include
    # any default options.
    #
    # This method can be used to very easily launch a CGI application, for
    # example:
    #
    #  Rack::Server.start(
    #    :app => lambda do |e|
    #      [200, {'content-type' => 'text/html'}, ['hello world']]
    #    end,
    #    :server => 'cgi'
    #  )
    #
    # Further options available here are documented on Rack::Server#initialize
    def self.start(options = nil)
      new(options).start
    end

    attr_writer :options

    # Options may include:
    # * :app
    #     a rack application to run (overrides :config and :builder)
    # * :builder
    #     a string to evaluate a Rack::Builder from
    # * :config
    #     a rackup configuration file path to load (.ru)
    # * :environment
    #     this selects the middleware that will be wrapped around
    #     your application. Default options available are:
    #       - development: CommonLogger, ShowExceptions, and Lint
    #       - deployment: CommonLogger
    #       - none: no extra middleware
    #     note: when the server is a cgi server, CommonLogger is not included.
    # * :server
    #     choose a specific Rackup::Handler, e.g. cgi, fcgi, webrick
    # * :daemonize
    #     if truthy, the server will daemonize itself (fork, detach, etc)
    #     if :noclose, the server will not close STDOUT/STDERR
    # * :pid
    #     path to write a pid file after daemonize
    # * :Host
    #     the host address to bind to (used by supporting Rackup::Handler)
    # * :Port
    #     the port to bind to (used by supporting Rackup::Handler)
    # * :AccessLog
    #     webrick access log options (or supporting Rackup::Handler)
    # * :debug
    #     turn on debug output ($DEBUG = true)
    # * :warn
    #     turn on warnings ($-w = true)
    # * :include
    #     add given paths to $LOAD_PATH
    # * :require
    #     require the given libraries
    #
    # Additional options for profiling app initialization include:
    # * :heapfile
    #     location for ObjectSpace.dump_all to write the output to
    # * :profile_file
    #     location for CPU/Memory (StackProf) profile output (defaults to a tempfile)
    # * :profile_mode
    #     StackProf profile mode (cpu|wall|object)
    def initialize(options = nil)
      @ignore_options = []

      if options
        @use_default_options = false
        @options = options
        @app = options[:app] if options[:app]
      else
        @use_default_options = true
        @options = parse_options(ARGV)
      end
    end

    def options
      merged_options = @use_default_options ? default_options.merge(@options) : @options
      merged_options.reject { |k, v| @ignore_options.include?(k) }
    end

    def default_options
      environment  = ENV['RACK_ENV'] || 'development'
      default_host = environment == 'development' ? 'localhost' : '0.0.0.0'

      {
        environment: environment,
        pid: nil,
        Port: 9292,
        Host: default_host,
        AccessLog: [],
        config: "config.ru"
      }
    end

    def app
      @app ||= options[:builder] ? build_app_from_string : build_app_and_options_from_config
    end

    class << self
      def logging_middleware
        lambda { |server|
          /CGI/.match?(server.server.name) || server.options[:quiet] ? nil : [Rack::CommonLogger, $stderr]
        }
      end

      def default_middleware_by_environment
        m = Hash.new {|h, k| h[k] = []}
        m["deployment"] = [
          [Rack::ContentLength],
          logging_middleware,
          [Rack::TempfileReaper]
        ]
        m["development"] = [
          [Rack::ContentLength],
          logging_middleware,
          [Rack::ShowExceptions],
          [Rack::Lint],
          [Rack::TempfileReaper]
        ]

        m
      end

      def middleware
        default_middleware_by_environment
      end
    end

    def middleware
      self.class.middleware
    end

    def start(&block)
      if options[:warn]
        $-w = true
      end

      if includes = options[:include]
        $LOAD_PATH.unshift(*includes)
      end

      Array(options[:require]).each do |library|
        require library
      end

      if options[:debug]
        $DEBUG = true
        require 'pp'
        p options[:server]
        pp wrapped_app
        pp app
      end

      check_pid! if options[:pid]

      # Touch the wrapped app, so that the config.ru is loaded before
      # daemonization (i.e. before chdir, etc).
      handle_profiling(options[:heapfile], options[:profile_mode], options[:profile_file]) do
        wrapped_app
      end

      daemonize_app if options[:daemonize]

      write_pid if options[:pid]

      trap(:INT) do
        if server.respond_to?(:shutdown)
          server.shutdown
        else
          exit
        end
      end

      server.run(wrapped_app, **options, &block)
    end

    def server
      @_server ||= Handler.get(options[:server]) || Handler.default
    end

    private
      def build_app_and_options_from_config
        if !::File.exist? options[:config]
          abort "configuration #{options[:config]} not found"
        end

        return Rack::Builder.parse_file(self.options[:config])
      end

      def handle_profiling(heapfile, profile_mode, filename)
        if heapfile
          require "objspace"
          ObjectSpace.trace_object_allocations_start
          yield
          GC.start
          ::File.open(heapfile, "w") { |f| ObjectSpace.dump_all(output: f) }
          exit
        end

        if profile_mode
          require "stackprof"
          require "tempfile"

          make_profile_name(filename) do |filename|
            ::File.open(filename, "w") do |f|
              StackProf.run(mode: profile_mode, out: f) do
                yield
              end
              puts "Profile written to: #{filename}"
            end
          end
          exit
        end

        yield
      end

      def make_profile_name(filename)
        if filename
          yield filename
        else
          ::Dir::Tmpname.create("profile.dump") do |tmpname, _, _|
            yield tmpname
          end
        end
      end

      def build_app_from_string
        Rack::Builder.new_from_string(self.options[:builder])
      end

      def parse_options(args)
        # Don't evaluate CGI ISINDEX parameters.
        args.clear if ENV.include?(Rack::REQUEST_METHOD)

        @options = opt_parser.parse!(args)
        @options[:config] = ::File.expand_path(options[:config])
        ENV["RACK_ENV"] = options[:environment]
        @options
      end

      def opt_parser
        Options.new
      end

      def build_app(app)
        middleware[options[:environment]].reverse_each do |middleware|
          middleware = middleware.call(self) if middleware.respond_to?(:call)
          next unless middleware
          klass, *args = middleware
          app = klass.new(app, *args)
        end
        app
      end

      def wrapped_app
        @wrapped_app ||= build_app app
      end

      def daemonize_app
        # Cannot be covered as it forks
        # :nocov:
        Process.daemon(true, options[:daemonize] == :noclose)
        # :nocov:
      end

      def write_pid
        ::File.open(options[:pid], ::File::CREAT | ::File::EXCL | ::File::WRONLY ){ |f| f.write("#{Process.pid}") }
        at_exit { ::FileUtils.rm_f(options[:pid]) }
      rescue Errno::EEXIST
        check_pid!
        retry
      end

      def check_pid!
        return unless ::File.exist?(options[:pid])

        pid = ::File.read(options[:pid]).to_i
        raise Errno::ESRCH if pid == 0

        Process.kill(0, pid)
        exit_with_pid(pid)
      rescue Errno::ESRCH
        ::File.delete(options[:pid])
      rescue Errno::EPERM
        exit_with_pid(pid)
      end

      def exit_with_pid(pid)
        $stderr.puts "A server is already running (pid: #{pid}, file: #{options[:pid]})."
        exit(1)
      end
  end

end
PK*J[��9�$$*share/gems/gems/rackup-2.1.0/lib/rackup.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

require_relative 'rackup/handler'
require_relative 'rackup/server'
require_relative 'rackup/version'

require_relative 'rackup/handler/webrick'
require_relative 'rackup/handler/cgi'
PK*J[<�d��&share/gems/gems/rackup-2.1.0/readme.mdnu�[���# Rackup

`rackup` provides a command line interface for running a Rack-compatible application.

[![Development Status](https://github.com/rack/rackup/workflows/Test/badge.svg)](https://github.com/rack/rackup/actions?workflow=Test)

## Installation

``` bash
$ gem install rackup
```

## Usage

In a directory with your `config.ru` simply run the command:

``` bash
$ rackup
```

Your application should now be available locally, typically `http://localhost:9292`.

## Contributing

We welcome contributions to this project.

1.  Fork it.
2.  Create your feature branch (`git checkout -b my-new-feature`).
3.  Commit your changes (`git commit -am 'Add some feature'`).
4.  Push to the branch (`git push origin my-new-feature`).
5.  Create new Pull Request.
PK*J[�tz��,�,$share/gems/gems/rack-3.0.8/README.mdnu�[���# ![Rack](contrib/logo.webp)

> **_NOTE:_** Rack v3.0.0 was recently released. Please check the [Upgrade
> Guide](UPGRADE-GUIDE.md) for more details about migrating your existing
> servers, middlewares and applications. For detailed information on specific
> changes, check the [Change Log](CHANGELOG.md).

Rack provides a minimal, modular, and adaptable interface for developing web
applications in Ruby. By wrapping HTTP requests and responses in the simplest
way possible, it unifies and distills the bridge between web servers, web
frameworks, and web application into a single method call.

The exact details of this are described in the [Rack Specification], which all
Rack applications should conform to.

## Installation

Add the rack gem to your application bundle, or follow the instructions provided
by a [supported web framework](#supported-web-frameworks):

```bash
# Install it generally:
$ gem install rack --pre

# or, add it to your current application gemfile:
$ bundle add rack --version 3.0.0
```

If you need features from `Rack::Session` or `bin/rackup` please add those gems separately.

```bash
$ gem install rack-session rackup
```

## Usage

Create a file called `config.ru` with the following contents:

```ruby
run do |env|
  [200, {}, ["Hello World"]]
end
```

Run this using the rackup gem or another [supported web
server](#supported-web-servers).

```bash
$ gem install rackup
$ rackup
$ curl http://localhost:9292
Hello World
```

## Supported web servers

Rack is supported by a wide range of servers, including:

* [Agoo](https://github.com/ohler55/agoo)
* [Falcon](https://github.com/socketry/falcon) **(Rack 3 Compatible)**
* [Iodine](https://github.com/boazsegev/iodine)
* [NGINX Unit](https://unit.nginx.org/)
* [Phusion Passenger](https://www.phusionpassenger.com/) (which is mod_rack for
  Apache and for nginx)
* [Puma](https://puma.io/)
* [Thin](https://github.com/macournoyer/thin)
* [Unicorn](https://yhbt.net/unicorn/)
* [uWSGI](https://uwsgi-docs.readthedocs.io/en/latest/)
* [Lamby](https://lamby.custominktech.com) (for AWS Lambda)

You will need to consult the server documentation to find out what features and
limitations they may have. In general, any valid Rack app will run the same on
all these servers, without changing anything.

### Rackup

Rack provides a separate gem, [rackup](https://github.com/rack/rackup) which is
a generic interface for running a Rack application on supported servers, which
include `WEBRick`, `Puma`, `Falcon` and others.

## Supported web frameworks

These frameworks and many others support the [Rack Specification]:

* [Camping](https://github.com/camping/camping)
* [Hanami](https://hanamirb.org/)
* [Padrino](https://padrinorb.com/)
* [Roda](https://github.com/jeremyevans/roda) **(Rack 3 Compatible)**
* [Ruby on Rails](https://rubyonrails.org/)
* [Sinatra](https://sinatrarb.com/)
* [Utopia](https://github.com/socketry/utopia) **(Rack 3 Compatible)**
* [WABuR](https://github.com/ohler55/wabur)

### Older (possibly unsupported) web frameworks

* [Ramaze](http://ramaze.net/)
* [Rum](https://github.com/leahneukirchen/rum)

## Available middleware shipped with Rack

Between the server and the framework, Rack can be customized to your
applications needs using middleware. Rack itself ships with the following
middleware:

* `Rack::CommonLogger` for creating Apache-style logfiles.
* `Rack::ConditionalGet` for returning [Not
  Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304)
  responses when the response has not changed.
* `Rack::Config` for modifying the environment before processing the request.
* `Rack::ContentLength` for setting a `content-length` header based on body
  size.
* `Rack::ContentType` for setting a default `content-type` header for responses.
* `Rack::Deflater` for compressing responses with gzip.
* `Rack::ETag` for setting `etag` header on bodies that can be buffered.
* `Rack::Events` for providing easy hooks when a request is received and when
  the response is sent.
* `Rack::Files` for serving static files.
* `Rack::Head` for returning an empty body for HEAD requests.
* `Rack::Lint` for checking conformance to the [Rack Specification].
* `Rack::Lock` for serializing requests using a mutex.
* `Rack::Logger` for setting a logger to handle logging errors.
* `Rack::MethodOverride` for modifying the request method based on a submitted
  parameter.
* `Rack::Recursive` for including data from other paths in the application, and
  for performing internal redirects.
* `Rack::Reloader` for reloading files if they have been modified.
* `Rack::Runtime` for including a response header with the time taken to process
  the request.
* `Rack::Sendfile` for working with web servers that can use optimized file
  serving for file system paths.
* `Rack::ShowException` for catching unhandled exceptions and presenting them in
  a nice and helpful way with clickable backtrace.
* `Rack::ShowStatus` for using nice error pages for empty client error
  responses.
* `Rack::Static` for more configurable serving of static files.
* `Rack::TempfileReaper` for removing temporary files creating during a request.

All these components use the same interface, which is described in detail in the
[Rack Specification]. These optional components can be used in any way you wish.

### Convenience interfaces

If you want to develop outside of existing frameworks, implement your own ones,
or develop middleware, Rack provides many helpers to create Rack applications
quickly and without doing the same web stuff all over:

* `Rack::Request` which also provides query string parsing and multipart
  handling.
* `Rack::Response` for convenient generation of HTTP replies and cookie
  handling.
* `Rack::MockRequest` and `Rack::MockResponse` for efficient and quick testing
  of Rack application without real HTTP round-trips.
* `Rack::Cascade` for trying additional Rack applications if an application
  returns a not found or method not supported response.
* `Rack::Directory` for serving files under a given directory, with directory
  indexes.
* `Rack::MediaType` for parsing content-type headers.
* `Rack::Mime` for determining content-type based on file extension.
* `Rack::RewindableInput` for making any IO object rewindable, using a temporary
  file buffer.
* `Rack::URLMap` to route to multiple applications inside the same process.

## Configuration

Rack exposes several configuration parameters to control various features of the
implementation.

### `param_depth_limit`

```ruby
Rack::Utils.param_depth_limit = 32 # default
```

The maximum amount of nesting allowed in parameters. For example, if set to 3,
this query string would be allowed:

```
?a[b][c]=d
```

but this query string would not be allowed:

```
?a[b][c][d]=e
```

Limiting the depth prevents a possible stack overflow when parsing parameters.

### `multipart_file_limit`

```ruby
Rack::Utils.multipart_file_limit = 128 # default
```

The maximum number of parts with a filename a request can contain. Accepting
too many parts can lead to the server running out of file handles.

The default is 128, which means that a single request can't upload more than 128
files at once. Set to 0 for no limit.

Can also be set via the `RACK_MULTIPART_FILE_LIMIT` environment variable.

(This is also aliased as `multipart_part_limit` and `RACK_MULTIPART_PART_LIMIT` for compatibility)


### `multipart_total_part_limit`

The maximum total number of parts a request can contain of any type, including
both file and non-file form fields.

The default is 4096, which means that a single request can't contain more than
4096 parts.

Set to 0 for no limit.

Can also be set via the `RACK_MULTIPART_TOTAL_PART_LIMIT` environment variable.


## Changelog

See [CHANGELOG.md](CHANGELOG.md).

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for specific details about how to make a
contribution to Rack.

Please post bugs, suggestions and patches to [GitHub
Issues](https://github.com/rack/rack/issues).

Please check our [Security Policy](https://github.com/rack/rack/security/policy)
for responsible disclosure and security bug reporting process. Due to wide usage
of the library, it is strongly preferred that we manage timing in order to
provide viable patches at the time of disclosure. Your assistance in this matter
is greatly appreciated.

## See Also

### `rack-contrib`

The plethora of useful middleware created the need for a project that collects
fresh Rack middleware. `rack-contrib` includes a variety of add-on components
for Rack and it is easy to contribute new modules.

* https://github.com/rack/rack-contrib

### `rack-session`

Provides convenient session management for Rack.

* https://github.com/rack/rack-session

## Thanks

The Rack Core Team, consisting of

* Aaron Patterson [tenderlove](https://github.com/tenderlove)
* Samuel Williams [ioquatix](https://github.com/ioquatix)
* Jeremy Evans [jeremyevans](https://github.com/jeremyevans)
* Eileen Uchitelle [eileencodes](https://github.com/eileencodes)
* Matthew Draper [matthewd](https://github.com/matthewd)
* Rafael França [rafaelfranca](https://github.com/rafaelfranca)

and the Rack Alumni

* Ryan Tomayko [rtomayko](https://github.com/rtomayko)
* Scytrin dai Kinthra [scytrin](https://github.com/scytrin)
* Leah Neukirchen [leahneukirchen](https://github.com/leahneukirchen)
* James Tucker [raggi](https://github.com/raggi)
* Josh Peek [josh](https://github.com/josh)
* José Valim [josevalim](https://github.com/josevalim)
* Michael Fellinger [manveru](https://github.com/manveru)
* Santiago Pastorino [spastorino](https://github.com/spastorino)
* Konstantin Haase [rkh](https://github.com/rkh)

would like to thank:

* Adrian Madrid, for the LiteSpeed handler.
* Christoffer Sawicki, for the first Rails adapter and `Rack::Deflater`.
* Tim Fletcher, for the HTTP authentication code.
* Luc Heinrich for the Cookie sessions, the static file handler and bugfixes.
* Armin Ronacher, for the logo and racktools.
* Alex Beregszaszi, Alexander Kahn, Anil Wadghule, Aredridel, Ben Alpert, Dan
  Kubb, Daniel Roethlisberger, Matt Todd, Tom Robinson, Phil Hagelberg, S. Brent
  Faulkner, Bosko Milekic, Daniel Rodríguez Troitiño, Genki Takiuchi, Geoffrey
  Grosenbach, Julien Sanchez, Kamal Fariz Mahyuddin, Masayoshi Takahashi,
  Patrick Aljordm, Mig, Kazuhiro Nishiyama, Jon Bardin, Konstantin Haase, Larry
  Siden, Matias Korhonen, Sam Ruby, Simon Chiang, Tim Connor, Timur Batyrshin,
  and Zach Brock for bug fixing and other improvements.
* Eric Wong, Hongli Lai, Jeremy Kemper for their continuous support and API
  improvements.
* Yehuda Katz and Carl Lerche for refactoring rackup.
* Brian Candler, for `Rack::ContentType`.
* Graham Batty, for improved handler loading.
* Stephen Bannasch, for bug reports and documentation.
* Gary Wright, for proposing a better `Rack::Response` interface.
* Jonathan Buch, for improvements regarding `Rack::Response`.
* Armin Röhrl, for tracking down bugs in the Cookie generator.
* Alexander Kellett for testing the Gem and reviewing the announcement.
* Marcus Rückert, for help with configuring and debugging lighttpd.
* The WSGI team for the well-done and documented work they've done and Rack
  builds up on.
* All bug reporters and patch contributors not mentioned above.

## License

Rack is released under the [MIT License](MIT-LICENSE).

[Rack Specification]: SPEC.rdoc
PK*J[���==$share/gems/gems/rack-3.0.8/SPEC.rdocnu�[���This specification aims to formalize the Rack protocol. You
can (and should) use Rack::Lint to enforce it.

When you develop middleware, be sure to add a Lint before and
after to catch all mistakes.

= Rack applications

A Rack application is a Ruby object (not a class) that
responds to +call+.
It takes exactly one argument, the *environment*
and returns a non-frozen Array of exactly three values:
The *status*,
the *headers*,
and the *body*.

== The Environment

The environment must be an unfrozen instance of Hash that includes
CGI-like headers. The Rack application is free to modify the
environment.

The environment is required to include these variables
(adopted from {PEP 333}[https://peps.python.org/pep-0333/]), except when they'd be empty, but see
below.
<tt>REQUEST_METHOD</tt>:: The HTTP request method, such as
                          "GET" or "POST". This cannot ever
                          be an empty string, and so is
                          always required.
<tt>SCRIPT_NAME</tt>:: The initial portion of the request
                       URL's "path" that corresponds to the
                       application object, so that the
                       application knows its virtual
                       "location". This may be an empty
                       string, if the application corresponds
                       to the "root" of the server.
<tt>PATH_INFO</tt>:: The remainder of the request URL's
                     "path", designating the virtual
                     "location" of the request's target
                     within the application. This may be an
                     empty string, if the request URL targets
                     the application root and does not have a
                     trailing slash. This value may be
                     percent-encoded when originating from
                     a URL.
<tt>QUERY_STRING</tt>:: The portion of the request URL that
                        follows the <tt>?</tt>, if any. May be
                        empty, but is always required!
<tt>SERVER_NAME</tt>:: When combined with <tt>SCRIPT_NAME</tt> and
                       <tt>PATH_INFO</tt>, these variables can be
                       used to complete the URL. Note, however,
                       that <tt>HTTP_HOST</tt>, if present,
                       should be used in preference to
                       <tt>SERVER_NAME</tt> for reconstructing
                       the request URL.
                       <tt>SERVER_NAME</tt> can never be an empty
                       string, and so is always required.
<tt>SERVER_PORT</tt>:: An optional +Integer+ which is the port the
                       server is running on. Should be specified if
                       the server is running on a non-standard port.
<tt>SERVER_PROTOCOL</tt>:: A string representing the HTTP version used
                           for the request.
<tt>HTTP_</tt> Variables:: Variables corresponding to the
                           client-supplied HTTP request
                           headers (i.e., variables whose
                           names begin with <tt>HTTP_</tt>). The
                           presence or absence of these
                           variables should correspond with
                           the presence or absence of the
                           appropriate HTTP header in the
                           request. See
                           {RFC3875 section 4.1.18}[https://tools.ietf.org/html/rfc3875#section-4.1.18]
                           for specific behavior.
In addition to this, the Rack environment must include these
Rack-specific variables:
<tt>rack.url_scheme</tt>:: +http+ or +https+, depending on the
                           request URL.
<tt>rack.input</tt>:: See below, the input stream.
<tt>rack.errors</tt>:: See below, the error stream.
<tt>rack.hijack?</tt>:: See below, if present and true, indicates
                        that the server supports partial hijacking.
<tt>rack.hijack</tt>:: See below, if present, an object responding
                       to +call+ that is used to perform a full
                       hijack.
Additional environment specifications have approved to
standardized middleware APIs. None of these are required to
be implemented by the server.
<tt>rack.session</tt>:: A hash-like interface for storing
                        request session data.
                        The store must implement:
                        store(key, value)         (aliased as []=);
                        fetch(key, default = nil) (aliased as []);
                        delete(key);
                        clear;
                        to_hash (returning unfrozen Hash instance);
<tt>rack.logger</tt>:: A common object interface for logging messages.
                       The object must implement:
                        info(message, &block)
                        debug(message, &block)
                        warn(message, &block)
                        error(message, &block)
                        fatal(message, &block)
<tt>rack.multipart.buffer_size</tt>:: An Integer hint to the multipart parser as to what chunk size to use for reads and writes.
<tt>rack.multipart.tempfile_factory</tt>:: An object responding to #call with two arguments, the filename and content_type given for the multipart form field, and returning an IO-like object that responds to #<< and optionally #rewind. This factory will be used to instantiate the tempfile for each multipart form file upload field, rather than the default class of Tempfile.
The server or the application can store their own data in the
environment, too.  The keys must contain at least one dot,
and should be prefixed uniquely.  The prefix <tt>rack.</tt>
is reserved for use with the Rack core distribution and other
accepted specifications and must not be used otherwise.

The <tt>SERVER_PORT</tt> must be an Integer if set.
The <tt>SERVER_NAME</tt> must be a valid authority as defined by RFC7540.
The <tt>HTTP_HOST</tt> must be a valid authority as defined by RFC7540.
The <tt>SERVER_PROTOCOL</tt> must match the regexp <tt>HTTP/\d(\.\d)?</tt>.
If the <tt>HTTP_VERSION</tt> is present, it must equal the <tt>SERVER_PROTOCOL</tt>.
The environment must not contain the keys
<tt>HTTP_CONTENT_TYPE</tt> or <tt>HTTP_CONTENT_LENGTH</tt>
(use the versions without <tt>HTTP_</tt>).
The CGI keys (named without a period) must have String values.
If the string values for CGI keys contain non-ASCII characters,
they should use ASCII-8BIT encoding.
There are the following restrictions:
* <tt>rack.url_scheme</tt> must either be +http+ or +https+.
* There must be a valid input stream in <tt>rack.input</tt>.
* There must be a valid error stream in <tt>rack.errors</tt>.
* There may be a valid hijack callback in <tt>rack.hijack</tt>
* The <tt>REQUEST_METHOD</tt> must be a valid token.
* The <tt>SCRIPT_NAME</tt>, if non-empty, must start with <tt>/</tt>
* The <tt>PATH_INFO</tt>, if non-empty, must start with <tt>/</tt>
* The <tt>CONTENT_LENGTH</tt>, if given, must consist of digits only.
* One of <tt>SCRIPT_NAME</tt> or <tt>PATH_INFO</tt> must be
  set. <tt>PATH_INFO</tt> should be <tt>/</tt> if
  <tt>SCRIPT_NAME</tt> is empty.
  <tt>SCRIPT_NAME</tt> never should be <tt>/</tt>, but instead be empty.
<tt>rack.response_finished</tt>:: An array of callables run by the server after the response has been
processed. This would typically be invoked after sending the response to the client, but it could also be
invoked if an error occurs while generating the response or sending the response; in that case, the error
argument will be a subclass of +Exception+.
The callables are invoked with +env, status, headers, error+ arguments and should not raise any
exceptions. They should be invoked in reverse order of registration.

=== The Input Stream

The input stream is an IO-like object which contains the raw HTTP
POST data.
When applicable, its external encoding must be "ASCII-8BIT" and it
must be opened in binary mode, for Ruby 1.9 compatibility.
The input stream must respond to +gets+, +each+, and +read+.
* +gets+ must be called without arguments and return a string,
  or +nil+ on EOF.
* +read+ behaves like IO#read.
  Its signature is <tt>read([length, [buffer]])</tt>.

  If given, +length+ must be a non-negative Integer (>= 0) or +nil+,
  and +buffer+ must be a String and may not be nil.

  If +length+ is given and not nil, then this method reads at most
  +length+ bytes from the input stream.

  If +length+ is not given or nil, then this method reads
  all data until EOF.

  When EOF is reached, this method returns nil if +length+ is given
  and not nil, or "" if +length+ is not given or is nil.

  If +buffer+ is given, then the read data will be placed
  into +buffer+ instead of a newly created String object.
* +each+ must be called without arguments and only yield Strings.
* +close+ can be called on the input stream to indicate that the
any remaining input is not needed.

=== The Error Stream

The error stream must respond to +puts+, +write+ and +flush+.
* +puts+ must be called with a single argument that responds to +to_s+.
* +write+ must be called with a single argument that is a String.
* +flush+ must be called without arguments and must be called
  in order to make the error appear for sure.
* +close+ must never be called on the error stream.

=== Hijacking

The hijacking interfaces provides a means for an application to take
control of the HTTP connection. There are two distinct hijack
interfaces: full hijacking where the application takes over the raw
connection, and partial hijacking where the application takes over
just the response body stream. In both cases, the application is
responsible for closing the hijacked stream.

Full hijacking only works with HTTP/1. Partial hijacking is functionally
equivalent to streaming bodies, and is still optionally supported for
backwards compatibility with older Rack versions.

==== Full Hijack

Full hijack is used to completely take over an HTTP/1 connection. It
occurs before any headers are written and causes the request to
ignores any response generated by the application.

It is intended to be used when applications need access to raw HTTP/1
connection.

If +rack.hijack+ is present in +env+, it must respond to +call+
and return an +IO+ instance which can be used to read and write
to the underlying connection using HTTP/1 semantics and
formatting.

==== Partial Hijack

Partial hijack is used for bi-directional streaming of the request and
response body. It occurs after the status and headers are written by
the server and causes the server to ignore the Body of the response.

It is intended to be used when applications need bi-directional
streaming.

If +rack.hijack?+ is present in +env+ and truthy,
an application may set the special response header +rack.hijack+
to an object that responds to +call+,
accepting a +stream+ argument.

After the response status and headers have been sent, this hijack
callback will be invoked with a +stream+ argument which follows the
same interface as outlined in "Streaming Body". Servers must
ignore the +body+ part of the response tuple when the
+rack.hijack+ response header is present. Using an empty +Array+
instance is recommended.

The special response header +rack.hijack+ must only be set
if the request +env+ has a truthy +rack.hijack?+.
== The Response

=== The Status

This is an HTTP status. It must be an Integer greater than or equal to
100.

=== The Headers

The headers must be a unfrozen Hash.
The header keys must be Strings.
Special headers starting "rack." are for communicating with the
server, and must not be sent back to the client.
The header must not contain a +Status+ key.
Header keys must conform to RFC7230 token specification, i.e. cannot
contain non-printable ASCII, DQUOTE or "(),/:;<=>?@[\]{}".
Header keys must not contain uppercase ASCII characters (A-Z).
Header values must be either a String instance,
or an Array of String instances,
such that each String instance must not contain characters below 037.

=== The content-type

There must not be a <tt>content-type</tt> header key when the +Status+ is 1xx,
204, or 304.

=== The content-length

There must not be a <tt>content-length</tt> header key when the
+Status+ is 1xx, 204, or 304.

=== The Body

The Body is typically an +Array+ of +String+ instances, an enumerable
that yields +String+ instances, a +Proc+ instance, or a File-like
object.

The Body must respond to +each+ or +call+. It may optionally respond
to +to_path+ or +to_ary+. A Body that responds to +each+ is considered
to be an Enumerable Body. A Body that responds to +call+ is considered
to be a Streaming Body.

A Body that responds to both +each+ and +call+ must be treated as an
Enumerable Body, not a Streaming Body. If it responds to +each+, you
must call +each+ and not +call+. If the Body doesn't respond to
+each+, then you can assume it responds to +call+.

The Body must either be consumed or returned. The Body is consumed by
optionally calling either +each+ or +call+.
Then, if the Body responds to +close+, it must be called to release
any resources associated with the generation of the body.
In other words, +close+ must always be called at least once; typically
after the web server has sent the response to the client, but also in
cases where the Rack application makes internal/virtual requests and
discards the response.


After calling +close+, the Body is considered closed and should not
be consumed again.
If the original Body is replaced by a new Body, the new Body must
also consume the original Body by calling +close+ if possible.

If the Body responds to +to_path+, it must return a +String+
path for the local file system whose contents are identical
to that produced by calling +each+; this may be used by the
server as an alternative, possibly more efficient way to
transport the response. The +to_path+ method does not consume
the body.

==== Enumerable Body

The Enumerable Body must respond to +each+.
It must only be called once.
It must not be called after being closed.
and must only yield String values.

The Body itself should not be an instance of String, as this will
break in Ruby 1.9.

Middleware must not call +each+ directly on the Body.
Instead, middleware can return a new Body that calls +each+ on the
original Body, yielding at least once per iteration.

If the Body responds to +to_ary+, it must return an +Array+ whose
contents are identical to that produced by calling +each+.
Middleware may call +to_ary+ directly on the Body and return a new
Body in its place. In other words, middleware can only process the
Body directly if it responds to +to_ary+. If the Body responds to both
+to_ary+ and +close+, its implementation of +to_ary+ must call
+close+.

==== Streaming Body

The Streaming Body must respond to +call+.
It must only be called once.
It must not be called after being closed.
It takes a +stream+ argument.

The +stream+ argument must implement:
<tt>read, write, <<, flush, close, close_read, close_write, closed?</tt>

The semantics of these IO methods must be a best effort match to
those of a normal Ruby IO or Socket object, using standard arguments
and raising standard exceptions. Servers are encouraged to simply
pass on real IO objects, although it is recognized that this approach
is not directly compatible with HTTP/2.

== Thanks
Some parts of this specification are adopted from {PEP 333 – Python Web Server Gateway Interface v1.0}[https://peps.python.org/pep-0333/]
I'd like to thank everyone involved in that effort.
PK*J[��_***share/gems/gems/rack-3.0.8/CONTRIBUTING.mdnu�[���# Contributing to Rack

Rack is work of [hundreds of
contributors](https://github.com/rack/rack/graphs/contributors). You're
encouraged to submit [pull requests](https://github.com/rack/rack/pulls) and
[propose features and discuss issues](https://github.com/rack/rack/issues).

## Fork the Project

Fork the [project on GitHub](https://github.com/rack/rack) and check out your
copy.

```
git clone https://github.com/(your-github-username)/rack.git
cd rack
git remote add upstream https://github.com/rack/rack.git
```

## Create a Topic Branch

Make sure your fork is up-to-date and create a topic branch for your feature or
bug fix.

```
git checkout main
git pull upstream main
git checkout -b my-feature-branch
```

## Bundle Install and Quick Test

Ensure that you can build the project and run quick tests.

```
bundle install --without extra
bundle exec rake test
```

## Running All Tests

Install all dependencies.

```
bundle install
```

Run all tests.

```
rake test
```

## Write Tests

Try to write a test that reproduces the problem you're trying to fix or
describes a feature that you want to build.

We definitely appreciate pull requests that highlight or reproduce a problem,
even without a fix.

## Write Code

Implement your feature or bug fix.

Make sure that all tests pass:

```
bundle exec rake test
```

## Write Documentation

Document any external behavior in the [README](README.md).

## Update Changelog

Add a line to [CHANGELOG](CHANGELOG.md).

## Commit Changes

Make sure git knows your name and email address:

```
git config --global user.name "Your Name"
git config --global user.email "contributor@example.com"
```

Writing good commit logs is important. A commit log should describe what changed
and why.

```
git add ...
git commit
```

## Push

```
git push origin my-feature-branch
```

## Make a Pull Request

Go to your fork of rack on GitHub and select your feature branch. Click the
'Pull Request' button and fill out the form. Pull requests are usually
reviewed within a few days.

## Rebase

If you've been working on a change for a while, rebase with upstream/main.

```
git fetch upstream
git rebase upstream/main
git push origin my-feature-branch -f
```

## Make Required Changes

Amend your previous commit and force push the changes.

```
git commit --amend
git push origin my-feature-branch -f
```

## Check on Your Pull Request

Go back to your pull request after a few minutes and see whether it passed
tests with GitHub Actions. Everything should look green, otherwise fix issues and
amend your commit as described above.

## Be Patient

It's likely that your change will not be merged and that the nitpicky
maintainers will ask you to do more, or fix seemingly benign problems. Hang in
there!

## Thank You

Please do know that we really appreciate and value your time and work. We love
you, really.
PK*J[�um�	�	&share/gems/gems/rack-3.0.8/lib/rack.rbnu�[���# frozen_string_literal: true

# Copyright (C) 2007-2019 Leah Neukirchen <http://leahneukirchen.org/infopage.html>
#
# Rack is freely distributable under the terms of an MIT-style license.
# See MIT-LICENSE or https://opensource.org/licenses/MIT.

# The Rack main module, serving as a namespace for all core Rack
# modules and classes.
#
# All modules meant for use in your application are <tt>autoload</tt>ed here,
# so it should be enough just to <tt>require 'rack'</tt> in your code.

require_relative 'rack/version'
require_relative 'rack/constants'

module Rack
  autoload :Builder, "rack/builder"
  autoload :BodyProxy, "rack/body_proxy"
  autoload :Cascade, "rack/cascade"
  autoload :Chunked, "rack/chunked"
  autoload :CommonLogger, "rack/common_logger"
  autoload :ConditionalGet, "rack/conditional_get"
  autoload :Config, "rack/config"
  autoload :ContentLength, "rack/content_length"
  autoload :ContentType, "rack/content_type"
  autoload :ETag, "rack/etag"
  autoload :Events, "rack/events"
  autoload :File, "rack/file"
  autoload :Files, "rack/files"
  autoload :Deflater, "rack/deflater"
  autoload :Directory, "rack/directory"
  autoload :ForwardRequest, "rack/recursive"
  autoload :Handler, "rack/handler"
  autoload :Head, "rack/head"
  autoload :Headers, "rack/headers"
  autoload :Lint, "rack/lint"
  autoload :Lock, "rack/lock"
  autoload :Logger, "rack/logger"
  autoload :MediaType, "rack/media_type"
  autoload :MethodOverride, "rack/method_override"
  autoload :Mime, "rack/mime"
  autoload :NullLogger, "rack/null_logger"
  autoload :QueryParser, "rack/query_parser"
  autoload :Recursive, "rack/recursive"
  autoload :Reloader, "rack/reloader"
  autoload :RewindableInput, "rack/rewindable_input"
  autoload :Runtime, "rack/runtime"
  autoload :Sendfile, "rack/sendfile"
  autoload :Server, "rack/server"
  autoload :ShowExceptions, "rack/show_exceptions"
  autoload :ShowStatus, "rack/show_status"
  autoload :Static, "rack/static"
  autoload :TempfileReaper, "rack/tempfile_reaper"
  autoload :URLMap, "rack/urlmap"
  autoload :Utils, "rack/utils"
  autoload :Multipart, "rack/multipart"

  autoload :MockRequest, "rack/mock_request"
  autoload :MockResponse, "rack/mock_response"

  autoload :Request, "rack/request"
  autoload :Response, "rack/response"

  module Auth
    autoload :Basic, "rack/auth/basic"
    autoload :AbstractRequest, "rack/auth/abstract/request"
    autoload :AbstractHandler, "rack/auth/abstract/handler"
    autoload :Digest, "rack/auth/digest"
  end
end
PK*J[�ʆ��6�66share/gems/gems/rack-3.0.8/lib/rack/show_exceptions.rbnu�[���# frozen_string_literal: true

require 'ostruct'
require 'erb'

require_relative 'constants'
require_relative 'utils'
require_relative 'request'

module Rack
  # Rack::ShowExceptions catches all exceptions raised from the app it
  # wraps.  It shows a useful backtrace with the sourcefile and
  # clickable context, the whole Rack environment and the request
  # data.
  #
  # Be careful when you use this on public-facing sites as it could
  # reveal information helpful to attackers.

  class ShowExceptions
    CONTEXT = 7

    def initialize(app)
      @app = app
    end

    def call(env)
      @app.call(env)
    rescue StandardError, LoadError, SyntaxError => e
      exception_string = dump_exception(e)

      env[RACK_ERRORS].puts(exception_string)
      env[RACK_ERRORS].flush

      if accepts_html?(env)
        content_type = "text/html"
        body = pretty(env, e)
      else
        content_type = "text/plain"
        body = exception_string
      end

      [
        500,
        {
          CONTENT_TYPE => content_type,
          CONTENT_LENGTH => body.bytesize.to_s,
        },
        [body],
      ]
    end

    def prefers_plaintext?(env)
      !accepts_html?(env)
    end

    def accepts_html?(env)
      Rack::Utils.best_q_match(env["HTTP_ACCEPT"], %w[text/html])
    end
    private :accepts_html?

    def dump_exception(exception)
      if exception.respond_to?(:detailed_message)
        message = exception.detailed_message(highlight: false)
      else
        message = exception.message
      end
      string = "#{exception.class}: #{message}\n".dup
      string << exception.backtrace.map { |l| "\t#{l}" }.join("\n")
      string
    end

    def pretty(env, exception)
      req = Rack::Request.new(env)

      # This double assignment is to prevent an "unused variable" warning.
      # Yes, it is dumb, but I don't like Ruby yelling at me.
      path = path = (req.script_name + req.path_info).squeeze("/")

      # This double assignment is to prevent an "unused variable" warning.
      # Yes, it is dumb, but I don't like Ruby yelling at me.
      frames = frames = exception.backtrace.map { |line|
        frame = OpenStruct.new
        if line =~ /(.*?):(\d+)(:in `(.*)')?/
          frame.filename = $1
          frame.lineno = $2.to_i
          frame.function = $4

          begin
            lineno = frame.lineno - 1
            lines = ::File.readlines(frame.filename)
            frame.pre_context_lineno = [lineno - CONTEXT, 0].max
            frame.pre_context = lines[frame.pre_context_lineno...lineno]
            frame.context_line = lines[lineno].chomp
            frame.post_context_lineno = [lineno + CONTEXT, lines.size].min
            frame.post_context = lines[lineno + 1..frame.post_context_lineno]
          rescue
          end

          frame
        else
          nil
        end
      }.compact

      template.result(binding)
    end

    def template
      TEMPLATE
    end

    def h(obj)                  # :nodoc:
      case obj
      when String
        Utils.escape_html(obj)
      else
        Utils.escape_html(obj.inspect)
      end
    end

    # :stopdoc:

    # adapted from Django <www.djangoproject.com>
    # Copyright (c) Django Software Foundation and individual contributors.
    # Used under the modified BSD license:
    # http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
    TEMPLATE = ERB.new(<<-'HTML'.gsub(/^      /, ''))
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html lang="en">
      <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="robots" content="NONE,NOARCHIVE" />
        <title><%=h exception.class %> at <%=h path %></title>
        <style type="text/css">
          html * { padding:0; margin:0; }
          body * { padding:10px 20px; }
          body * * { padding:0; }
          body { font:small sans-serif; }
          body>div { border-bottom:1px solid #ddd; }
          h1 { font-weight:normal; }
          h2 { margin-bottom:.8em; }
          h2 span { font-size:80%; color:#666; font-weight:normal; }
          h3 { margin:1em 0 .5em 0; }
          h4 { margin:0 0 .5em 0; font-weight: normal; }
          table {
              border:1px solid #ccc; border-collapse: collapse; background:white; }
          tbody td, tbody th { vertical-align:top; padding:2px 3px; }
          thead th {
              padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
              font-weight:normal; font-size:11px; border:1px solid #ddd; }
          tbody th { text-align:right; color:#666; padding-right:.5em; }
          table.vars { margin:5px 0 2px 40px; }
          table.vars td, table.req td { font-family:monospace; }
          table td.code { width:100%;}
          table td.code div { overflow:hidden; }
          table.source th { color:#666; }
          table.source td {
              font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
          ul.traceback { list-style-type:none; }
          ul.traceback li.frame { margin-bottom:1em; }
          div.context { margin: 10px 0; }
          div.context ol {
              padding-left:30px; margin:0 10px; list-style-position: inside; }
          div.context ol li {
              font-family:monospace; white-space:pre; color:#666; cursor:pointer; }
          div.context ol.context-line li { color:black; background-color:#ccc; }
          div.context ol.context-line li span { float: right; }
          div.commands { margin-left: 40px; }
          div.commands a { color:black; text-decoration:none; }
          #summary { background: #ffc; }
          #summary h2 { font-family: monospace; font-weight: normal; color: #666; white-space: pre-wrap; }
          #summary ul#quicklinks { list-style-type: none; margin-bottom: 2em; }
          #summary ul#quicklinks li { float: left; padding: 0 1em; }
          #summary ul#quicklinks>li+li { border-left: 1px #666 solid; }
          #explanation { background:#eee; }
          #template, #template-not-exist { background:#f6f6f6; }
          #template-not-exist ul { margin: 0 0 0 20px; }
          #traceback { background:#eee; }
          #requestinfo { background:#f6f6f6; padding-left:120px; }
          #summary table { border:none; background:transparent; }
          #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
          #requestinfo h3 { margin-bottom:-1em; }
          .error { background: #ffc; }
          .specific { color:#cc3300; font-weight:bold; }
        </style>
        <script type="text/javascript">
        //<!--
          function getElementsByClassName(oElm, strTagName, strClassName){
              // Written by Jonathan Snook, http://www.snook.ca/jon;
              // Add-ons by Robert Nyman, http://www.robertnyman.com
              var arrElements = (strTagName == "*" && document.all)? document.all :
              oElm.getElementsByTagName(strTagName);
              var arrReturnElements = new Array();
              strClassName = strClassName.replace(/\-/g, "\\-");
              var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$$)");
              var oElement;
              for(var i=0; i<arrElements.length; i++){
                  oElement = arrElements[i];
                  if(oRegExp.test(oElement.className)){
                      arrReturnElements.push(oElement);
                  }
              }
              return (arrReturnElements)
          }
          function hideAll(elems) {
            for (var e = 0; e < elems.length; e++) {
              elems[e].style.display = 'none';
            }
          }
          window.onload = function() {
            hideAll(getElementsByClassName(document, 'table', 'vars'));
            hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
            hideAll(getElementsByClassName(document, 'ol', 'post-context'));
          }
          function toggle() {
            for (var i = 0; i < arguments.length; i++) {
              var e = document.getElementById(arguments[i]);
              if (e) {
                e.style.display = e.style.display == 'none' ? 'block' : 'none';
              }
            }
            return false;
          }
          function varToggle(link, id) {
            toggle('v' + id);
            var s = link.getElementsByTagName('span')[0];
            var uarr = String.fromCharCode(0x25b6);
            var darr = String.fromCharCode(0x25bc);
            s.innerHTML = s.innerHTML == uarr ? darr : uarr;
            return false;
          }
          //-->
        </script>
      </head>
      <body>

      <div id="summary">
        <h1><%=h exception.class %> at <%=h path %></h1>
      <% if exception.respond_to?(:detailed_message) %>
        <h2><%=h exception.detailed_message(highlight: false) %></h2>
      <% else %>
        <h2><%=h exception.message %></h2>
      <% end %>
        <table><tr>
          <th>Ruby</th>
          <td>
      <% if first = frames.first %>
            <code><%=h first.filename %></code>: in <code><%=h first.function %></code>, line <%=h frames.first.lineno %>
      <% else %>
            unknown location
      <% end %>
          </td>
        </tr><tr>
          <th>Web</th>
          <td><code><%=h req.request_method %> <%=h(req.host + path)%></code></td>
        </tr></table>

        <h3>Jump to:</h3>
        <ul id="quicklinks">
          <li><a href="#get-info">GET</a></li>
          <li><a href="#post-info">POST</a></li>
          <li><a href="#cookie-info">Cookies</a></li>
          <li><a href="#env-info">ENV</a></li>
        </ul>
      </div>

      <div id="traceback">
        <h2>Traceback <span>(innermost first)</span></h2>
        <ul class="traceback">
      <% frames.each { |frame| %>
            <li class="frame">
              <code><%=h frame.filename %></code>: in <code><%=h frame.function %></code>

                <% if frame.context_line %>
                <div class="context" id="c<%=h frame.object_id %>">
                    <% if frame.pre_context %>
                    <ol start="<%=h frame.pre_context_lineno+1 %>" class="pre-context" id="pre<%=h frame.object_id %>">
                      <% frame.pre_context.each { |line| %>
                      <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h line %></li>
                      <% } %>
                    </ol>
                    <% end %>

                  <ol start="<%=h frame.lineno %>" class="context-line">
                    <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h frame.context_line %><span>...</span></li></ol>

                    <% if frame.post_context %>
                    <ol start='<%=h frame.lineno+1 %>' class="post-context" id="post<%=h frame.object_id %>">
                      <% frame.post_context.each { |line| %>
                      <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h line %></li>
                      <% } %>
                    </ol>
                    <% end %>
                </div>
                <% end %>
            </li>
      <% } %>
        </ul>
      </div>

      <div id="requestinfo">
        <h2>Request information</h2>

        <h3 id="get-info">GET</h3>
        <% if req.GET and not req.GET.empty? %>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
                <% req.GET.sort_by { |k, v| k.to_s }.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
                <% } %>
            </tbody>
          </table>
        <% else %>
          <p>No GET data.</p>
        <% end %>

        <h3 id="post-info">POST</h3>
        <% if ((req.POST and not req.POST.empty?) rescue (no_post_data = "Invalid POST data"; nil)) %>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
                <% req.POST.sort_by { |k, v| k.to_s }.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
                <% } %>
            </tbody>
          </table>
        <% else %>
          <p><%= no_post_data || "No POST data" %>.</p>
        <% end %>


        <h3 id="cookie-info">COOKIES</h3>
        <% unless req.cookies.empty? %>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
              <% req.cookies.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
              <% } %>
            </tbody>
          </table>
        <% else %>
          <p>No cookie data.</p>
        <% end %>

        <h3 id="env-info">Rack ENV</h3>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
                <% env.sort_by { |k, v| k.to_s }.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
                <% } %>
            </tbody>
          </table>

      </div>

      <div id="explanation">
        <p>
          You're seeing this error because you use <code>Rack::ShowExceptions</code>.
        </p>
      </div>

      </body>
      </html>
    HTML

    # :startdoc:
  end
end
PK*J[�d�P��-share/gems/gems/rack-3.0.8/lib/rack/logger.rbnu�[���# frozen_string_literal: true

require 'logger'

require_relative 'constants'

module Rack
  # Sets up rack.logger to write to rack.errors stream
  class Logger
    def initialize(app, level = ::Logger::INFO)
      @app, @level = app, level
    end

    def call(env)
      logger = ::Logger.new(env[RACK_ERRORS])
      logger.level = @level

      env[RACK_LOGGER] = logger
      @app.call(env)
    end
  end
end
PK*J[K�bx/share/gems/gems/rack-3.0.8/lib/rack/reloader.rbnu�[���# frozen_string_literal: true

# Copyright (C) 2009-2018 Michael Fellinger <m.fellinger@gmail.com>
# Rack::Reloader is subject to the terms of an MIT-style license.
# See MIT-LICENSE or https://opensource.org/licenses/MIT.

require 'pathname'

module Rack

  # High performant source reloader
  #
  # This class acts as Rack middleware.
  #
  # What makes it especially suited for use in a production environment is that
  # any file will only be checked once and there will only be made one system
  # call stat(2).
  #
  # Please note that this will not reload files in the background, it does so
  # only when actively called.
  #
  # It is performing a check/reload cycle at the start of every request, but
  # also respects a cool down time, during which nothing will be done.
  class Reloader
    def initialize(app, cooldown = 10, backend = Stat)
      @app = app
      @cooldown = cooldown
      @last = (Time.now - cooldown)
      @cache = {}
      @mtimes = {}
      @reload_mutex = Mutex.new

      extend backend
    end

    def call(env)
      if @cooldown and Time.now > @last + @cooldown
        if Thread.list.size > 1
          @reload_mutex.synchronize{ reload! }
        else
          reload!
        end

        @last = Time.now
      end

      @app.call(env)
    end

    def reload!(stderr = $stderr)
      rotation do |file, mtime|
        previous_mtime = @mtimes[file] ||= mtime
        safe_load(file, mtime, stderr) if mtime > previous_mtime
      end
    end

    # A safe Kernel::load, issuing the hooks depending on the results
    def safe_load(file, mtime, stderr = $stderr)
      load(file)
      stderr.puts "#{self.class}: reloaded `#{file}'"
      file
    rescue LoadError, SyntaxError => ex
      stderr.puts ex
    ensure
      @mtimes[file] = mtime
    end

    module Stat
      def rotation
        files = [$0, *$LOADED_FEATURES].uniq
        paths = ['./', *$LOAD_PATH].uniq

        files.map{|file|
          next if /\.(so|bundle)$/.match?(file) # cannot reload compiled files

          found, stat = figure_path(file, paths)
          next unless found && stat && mtime = stat.mtime

          @cache[file] = found

          yield(found, mtime)
        }.compact
      end

      # Takes a relative or absolute +file+ name, a couple possible +paths+ that
      # the +file+ might reside in. Returns the full path and File::Stat for the
      # path.
      def figure_path(file, paths)
        found = @cache[file]
        found = file if !found and Pathname.new(file).absolute?
        found, stat = safe_stat(found)
        return found, stat if found

        paths.find do |possible_path|
          path = ::File.join(possible_path, file)
          found, stat = safe_stat(path)
          return ::File.expand_path(found), stat if found
        end

        return false, false
      end

      def safe_stat(file)
        return unless file
        stat = ::File.stat(file)
        return file, stat if stat.file?
      rescue Errno::ENOENT, Errno::ENOTDIR, Errno::ESRCH
        @cache.delete(file) and false
      end
    end
  end
end
PK*J[��||��6share/gems/gems/rack-3.0.8/lib/rack/conditional_get.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'body_proxy'

module Rack

  # Middleware that enables conditional GET using if-none-match and
  # if-modified-since. The application should set either or both of the
  # last-modified or etag response headers according to RFC 2616. When
  # either of the conditions is met, the response body is set to be zero
  # length and the response status is set to 304 Not Modified.
  #
  # Applications that defer response body generation until the body's each
  # message is received will avoid response body generation completely when
  # a conditional GET matches.
  #
  # Adapted from Michael Klishin's Merb implementation:
  # https://github.com/wycats/merb/blob/master/merb-core/lib/merb-core/rack/middleware/conditional_get.rb
  class ConditionalGet
    def initialize(app)
      @app = app
    end

    # Return empty 304 response if the response has not been
    # modified since the last request.
    def call(env)
      case env[REQUEST_METHOD]
      when "GET", "HEAD"
        status, headers, body = response = @app.call(env)

        if status == 200 && fresh?(env, headers)
          response[0] = 304
          headers.delete(CONTENT_TYPE)
          headers.delete(CONTENT_LENGTH)
          response[2] = Rack::BodyProxy.new([]) do
            body.close if body.respond_to?(:close)
          end
        end
        response
      else
        @app.call(env)
      end
    end

  private

    # Return whether the response has not been modified since the
    # last request.
    def fresh?(env, headers)
      # if-none-match has priority over if-modified-since per RFC 7232
      if none_match = env['HTTP_IF_NONE_MATCH']
        etag_matches?(none_match, headers)
      elsif (modified_since = env['HTTP_IF_MODIFIED_SINCE']) && (modified_since = to_rfc2822(modified_since))
        modified_since?(modified_since, headers)
      end
    end

    # Whether the etag response header matches the if-none-match request header.
    # If so, the request has not been modified.
    def etag_matches?(none_match, headers)
      headers[ETAG] == none_match
    end

    # Whether the last-modified response header matches the if-modified-since
    # request header.  If so, the request has not been modified.
    def modified_since?(modified_since, headers)
      last_modified = to_rfc2822(headers['last-modified']) and
        modified_since >= last_modified
    end

    # Return a Time object for the given string (which should be in RFC2822
    # format), or nil if the string cannot be parsed.
    def to_rfc2822(since)
      # shortest possible valid date is the obsolete: 1 Nov 97 09:55 A
      # anything shorter is invalid, this avoids exceptions for common cases
      # most common being the empty string
      if since && since.length >= 16
        # NOTE: there is no trivial way to write this in a non exception way
        #   _rfc2822 returns a hash but is not that usable
        Time.rfc2822(since) rescue nil
      end
    end
  end
end
PK*J[>�==+share/gems/gems/rack-3.0.8/lib/rack/lock.rbnu�[���# frozen_string_literal: true

require_relative 'body_proxy'

module Rack
  # Rack::Lock locks every request inside a mutex, so that every request
  # will effectively be executed synchronously.
  class Lock
    def initialize(app, mutex = Mutex.new)
      @app, @mutex = app, mutex
    end

    def call(env)
      @mutex.lock
      begin
        response = @app.call(env)
        returned = response << BodyProxy.new(response.pop) { unlock }
      ensure
        unlock unless returned
      end
    end

    private

    def unlock
      @mutex.unlock
    end
  end
end
PK*J[��44-share/gems/gems/rack-3.0.8/lib/rack/events.rbnu�[���# frozen_string_literal: true

require_relative 'body_proxy'
require_relative 'request'
require_relative 'response'

module Rack
  ### This middleware provides hooks to certain places in the request /
  # response lifecycle.  This is so that middleware that don't need to filter
  # the response data can safely leave it alone and not have to send messages
  # down the traditional "rack stack".
  #
  # The events are:
  #
  # * on_start(request, response)
  #
  #   This event is sent at the start of the request, before the next
  #   middleware in the chain is called.  This method is called with a request
  #   object, and a response object.  Right now, the response object is always
  #   nil, but in the future it may actually be a real response object.
  #
  # * on_commit(request, response)
  #
  #   The response has been committed.  The application has returned, but the
  #   response has not been sent to the webserver yet.  This method is always
  #   called with a request object and the response object.  The response
  #   object is constructed from the rack triple that the application returned.
  #   Changes may still be made to the response object at this point.
  #
  # * on_send(request, response)
  #
  #   The webserver has started iterating over the response body and presumably
  #   has started sending data over the wire. This method is always called with
  #   a request object and the response object.  The response object is
  #   constructed from the rack triple that the application returned.  Changes
  #   SHOULD NOT be made to the response object as the webserver has already
  #   started sending data.  Any mutations will likely result in an exception.
  #
  # * on_finish(request, response)
  #
  #   The webserver has closed the response, and all data has been written to
  #   the response socket.  The request and response object should both be
  #   read-only at this point.  The body MAY NOT be available on the response
  #   object as it may have been flushed to the socket.
  #
  # * on_error(request, response, error)
  #
  #   An exception has occurred in the application or an `on_commit` event.
  #   This method will get the request, the response (if available) and the
  #   exception that was raised.
  #
  # ## Order
  #
  # `on_start` is called on the handlers in the order that they were passed to
  # the constructor.  `on_commit`, on_send`, `on_finish`, and `on_error` are
  # called in the reverse order.  `on_finish` handlers are called inside an
  # `ensure` block, so they are guaranteed to be called even if something
  # raises an exception.  If something raises an exception in a `on_finish`
  # method, then nothing is guaranteed.

  class Events
    module Abstract
      def on_start(req, res)
      end

      def on_commit(req, res)
      end

      def on_send(req, res)
      end

      def on_finish(req, res)
      end

      def on_error(req, res, e)
      end
    end

    class EventedBodyProxy < Rack::BodyProxy # :nodoc:
      attr_reader :request, :response

      def initialize(body, request, response, handlers, &block)
        super(body, &block)
        @request  = request
        @response = response
        @handlers = handlers
      end

      def each
        @handlers.reverse_each { |handler| handler.on_send request, response }
        super
      end
    end

    class BufferedResponse < Rack::Response::Raw # :nodoc:
      attr_reader :body

      def initialize(status, headers, body)
        super(status, headers)
        @body = body
      end

      def to_a; [status, headers, body]; end
    end

    def initialize(app, handlers)
      @app      = app
      @handlers = handlers
    end

    def call(env)
      request = make_request env
      on_start request, nil

      begin
        status, headers, body = @app.call request.env
        response = make_response status, headers, body
        on_commit request, response
      rescue StandardError => e
        on_error request, response, e
        on_finish request, response
        raise
      end

      body = EventedBodyProxy.new(body, request, response, @handlers) do
        on_finish request, response
      end
      [response.status, response.headers, body]
    end

    private

    def on_error(request, response, e)
      @handlers.reverse_each { |handler| handler.on_error request, response, e }
    end

    def on_commit(request, response)
      @handlers.reverse_each { |handler| handler.on_commit request, response }
    end

    def on_start(request, response)
      @handlers.each { |handler| handler.on_start request, nil }
    end

    def on_finish(request, response)
      @handlers.reverse_each { |handler| handler.on_finish request, response }
    end

    def make_request(env)
      Rack::Request.new env
    end

    def make_response(status, headers, body)
      BufferedResponse.new status, headers, body
    end
  end
end
PK*J[��;�~~7share/gems/gems/rack-3.0.8/lib/rack/rewindable_input.rbnu�[���# -*- encoding: binary -*-
# frozen_string_literal: true

require 'tempfile'

require_relative 'constants'

module Rack
  # Class which can make any IO object rewindable, including non-rewindable ones. It does
  # this by buffering the data into a tempfile, which is rewindable.
  #
  # Don't forget to call #close when you're done. This frees up temporary resources that
  # RewindableInput uses, though it does *not* close the original IO object.
  class RewindableInput
    # Makes rack.input rewindable, for compatibility with applications and middleware
    # designed for earlier versions of Rack (where rack.input was required to be
    # rewindable).
    class Middleware
      def initialize(app)
        @app = app
      end

      def call(env)
        env[RACK_INPUT] = RewindableInput.new(env[RACK_INPUT])
        @app.call(env)
      end
    end

    def initialize(io)
      @io = io
      @rewindable_io = nil
      @unlinked = false
    end

    def gets
      make_rewindable unless @rewindable_io
      @rewindable_io.gets
    end

    def read(*args)
      make_rewindable unless @rewindable_io
      @rewindable_io.read(*args)
    end

    def each(&block)
      make_rewindable unless @rewindable_io
      @rewindable_io.each(&block)
    end

    def rewind
      make_rewindable unless @rewindable_io
      @rewindable_io.rewind
    end

    def size
      make_rewindable unless @rewindable_io
      @rewindable_io.size
    end

    # Closes this RewindableInput object without closing the originally
    # wrapped IO object. Cleans up any temporary resources that this RewindableInput
    # has created.
    #
    # This method may be called multiple times. It does nothing on subsequent calls.
    def close
      if @rewindable_io
        if @unlinked
          @rewindable_io.close
        else
          @rewindable_io.close!
        end
        @rewindable_io = nil
      end
    end

    private

    def make_rewindable
      # Buffer all data into a tempfile. Since this tempfile is private to this
      # RewindableInput object, we chmod it so that nobody else can read or write
      # it. On POSIX filesystems we also unlink the file so that it doesn't
      # even have a file entry on the filesystem anymore, though we can still
      # access it because we have the file handle open.
      @rewindable_io = Tempfile.new('RackRewindableInput')
      @rewindable_io.chmod(0000)
      @rewindable_io.set_encoding(Encoding::BINARY)
      @rewindable_io.binmode
      # :nocov:
      if filesystem_has_posix_semantics?
        raise 'Unlink failed. IO closed.' if @rewindable_io.closed?
        @unlinked = true
      end
      # :nocov:

      buffer = "".dup
      while @io.read(1024 * 4, buffer)
        entire_buffer_written_out = false
        while !entire_buffer_written_out
          written = @rewindable_io.write(buffer)
          entire_buffer_written_out = written == buffer.bytesize
          if !entire_buffer_written_out
            buffer.slice!(0 .. written - 1)
          end
        end
      end
      @rewindable_io.rewind
    end

    def filesystem_has_posix_semantics?
      RUBY_PLATFORM !~ /(mswin|mingw|cygwin|java)/
    end
  end
end
PK*J[�ю	��-share/gems/gems/rack-3.0.8/lib/rack/static.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'files'
require_relative 'mime'

module Rack

  # The Rack::Static middleware intercepts requests for static files
  # (javascript files, images, stylesheets, etc) based on the url prefixes or
  # route mappings passed in the options, and serves them using a Rack::Files
  # object. This allows a Rack stack to serve both static and dynamic content.
  #
  # Examples:
  #
  # Serve all requests beginning with /media from the "media" folder located
  # in the current directory (ie media/*):
  #
  #     use Rack::Static, :urls => ["/media"]
  #
  # Same as previous, but instead of returning 404 for missing files under
  # /media, call the next middleware:
  #
  #     use Rack::Static, :urls => ["/media"], :cascade => true
  #
  # Serve all requests beginning with /css or /images from the folder "public"
  # in the current directory (ie public/css/* and public/images/*):
  #
  #     use Rack::Static, :urls => ["/css", "/images"], :root => "public"
  #
  # Serve all requests to / with "index.html" from the folder "public" in the
  # current directory (ie public/index.html):
  #
  #     use Rack::Static, :urls => {"/" => 'index.html'}, :root => 'public'
  #
  # Serve all requests normally from the folder "public" in the current
  # directory but uses index.html as default route for "/"
  #
  #     use Rack::Static, :urls => [""], :root => 'public', :index =>
  #     'index.html'
  #
  # Set custom HTTP Headers for based on rules:
  #
  #     use Rack::Static, :root => 'public',
  #         :header_rules => [
  #           [rule, {header_field => content, header_field => content}],
  #           [rule, {header_field => content}]
  #         ]
  #
  #  Rules for selecting files:
  #
  #  1) All files
  #     Provide the :all symbol
  #     :all => Matches every file
  #
  #  2) Folders
  #     Provide the folder path as a string
  #     '/folder' or '/folder/subfolder' => Matches files in a certain folder
  #
  #  3) File Extensions
  #     Provide the file extensions as an array
  #     ['css', 'js'] or %w(css js) => Matches files ending in .css or .js
  #
  #  4) Regular Expressions / Regexp
  #     Provide a regular expression
  #     %r{\.(?:css|js)\z} => Matches files ending in .css or .js
  #     /\.(?:eot|ttf|otf|woff2|woff|svg)\z/ => Matches files ending in
  #       the most common web font formats (.eot, .ttf, .otf, .woff2, .woff, .svg)
  #       Note: This Regexp is available as a shortcut, using the :fonts rule
  #
  #  5) Font Shortcut
  #     Provide the :fonts symbol
  #     :fonts => Uses the Regexp rule stated right above to match all common web font endings
  #
  #  Rule Ordering:
  #    Rules are applied in the order that they are provided.
  #    List rather general rules above special ones.
  #
  #  Complete example use case including HTTP header rules:
  #
  #     use Rack::Static, :root => 'public',
  #         :header_rules => [
  #           # Cache all static files in public caches (e.g. Rack::Cache)
  #           #  as well as in the browser
  #           [:all, {'cache-control' => 'public, max-age=31536000'}],
  #
  #           # Provide web fonts with cross-origin access-control-headers
  #           #  Firefox requires this when serving assets using a Content Delivery Network
  #           [:fonts, {'access-control-allow-origin' => '*'}]
  #         ]
  #
  class Static
    def initialize(app, options = {})
      @app = app
      @urls = options[:urls] || ["/favicon.ico"]
      @index = options[:index]
      @gzip = options[:gzip]
      @cascade = options[:cascade]
      root = options[:root] || Dir.pwd

      # HTTP Headers
      @header_rules = options[:header_rules] || []
      # Allow for legacy :cache_control option while prioritizing global header_rules setting
      @header_rules.unshift([:all, { CACHE_CONTROL => options[:cache_control] }]) if options[:cache_control]

      @file_server = Rack::Files.new(root)
    end

    def add_index_root?(path)
      @index && route_file(path) && path.end_with?('/')
    end

    def overwrite_file_path(path)
      @urls.kind_of?(Hash) && @urls.key?(path) || add_index_root?(path)
    end

    def route_file(path)
      @urls.kind_of?(Array) && @urls.any? { |url| path.index(url) == 0 }
    end

    def can_serve(path)
      route_file(path) || overwrite_file_path(path)
    end

    def call(env)
      path = env[PATH_INFO]

      if can_serve(path)
        if overwrite_file_path(path)
          env[PATH_INFO] = (add_index_root?(path) ? path + @index : @urls[path])
        elsif @gzip && env['HTTP_ACCEPT_ENCODING'] && /\bgzip\b/.match?(env['HTTP_ACCEPT_ENCODING'])
          path = env[PATH_INFO]
          env[PATH_INFO] += '.gz'
          response = @file_server.call(env)
          env[PATH_INFO] = path

          if response[0] == 404
            response = nil
          elsif response[0] == 304
            # Do nothing, leave headers as is
          else
            response[1][CONTENT_TYPE] = Mime.mime_type(::File.extname(path), 'text/plain')
            response[1]['content-encoding'] = 'gzip'
          end
        end

        path = env[PATH_INFO]
        response ||= @file_server.call(env)

        if @cascade && response[0] == 404
          return @app.call(env)
        end

        headers = response[1]
        applicable_rules(path).each do |rule, new_headers|
          new_headers.each { |field, content| headers[field] = content }
        end

        response
      else
        @app.call(env)
      end
    end

    # Convert HTTP header rules to HTTP headers
    def applicable_rules(path)
      @header_rules.find_all do |rule, new_headers|
        case rule
        when :all
          true
        when :fonts
          /\.(?:ttf|otf|eot|woff2|woff|svg)\z/.match?(path)
        when String
          path = ::Rack::Utils.unescape(path)
          path.start_with?(rule) || path.start_with?('/' + rule)
        when Array
          /\.(#{rule.join('|')})\z/.match?(path)
        when Regexp
          rule.match?(path)
        else
          false
        end
      end
    end

  end
end
PK*J[$����*�*/share/gems/gems/rack-3.0.8/lib/rack/response.rbnu�[���# frozen_string_literal: true

require 'time'

require_relative 'constants'
require_relative 'utils'
require_relative 'media_type'
require_relative 'headers'

module Rack
  # Rack::Response provides a convenient interface to create a Rack
  # response.
  #
  # It allows setting of headers and cookies, and provides useful
  # defaults (an OK response with empty headers and body).
  #
  # You can use Response#write to iteratively generate your response,
  # but note that this is buffered by Rack::Response until you call
  # +finish+.  +finish+ however can take a block inside which calls to
  # +write+ are synchronous with the Rack response.
  #
  # Your application's +call+ should end returning Response#finish.
  class Response
    def self.[](status, headers, body)
      self.new(body, status, headers)
    end

    CHUNKED = 'chunked'
    STATUS_WITH_NO_ENTITY_BODY = Utils::STATUS_WITH_NO_ENTITY_BODY

    attr_accessor :length, :status, :body
    attr_reader :headers

    # Deprecated, use headers instead.
    def header
      warn 'Rack::Response#header is deprecated and will be removed in Rack 3.1', uplevel: 1

      headers
    end

    # Initialize the response object with the specified +body+, +status+
    # and +headers+.
    #
    # If the +body+ is +nil+, construct an empty response object with internal
    # buffering.
    #
    # If the +body+ responds to +to_str+, assume it's a string-like object and
    # construct a buffered response object containing using that string as the
    # initial contents of the buffer.
    #
    # Otherwise it is expected +body+ conforms to the normal requirements of a
    # Rack response body, typically implementing one of +each+ (enumerable
    # body) or +call+ (streaming body).
    #
    # The +status+ defaults to +200+ which is the "OK" HTTP status code. You
    # can provide any other valid status code.
    #
    # The +headers+ must be a +Hash+ of key-value header pairs which conform to
    # the Rack specification for response headers. The key must be a +String+
    # instance and the value can be either a +String+ or +Array+ instance.
    def initialize(body = nil, status = 200, headers = {})
      @status = status.to_i

      unless headers.is_a?(Hash)
        warn "Providing non-hash headers to Rack::Response is deprecated and will be removed in Rack 3.1", uplevel: 1
      end

      @headers = Headers.new
      # Convert headers input to a plain hash with lowercase keys.
      headers.each do |k, v|
        @headers[k] = v
      end

      @writer = self.method(:append)

      @block = nil

      # Keep track of whether we have expanded the user supplied body.
      if body.nil?
        @body = []
        @buffered = true
        @length = 0
      elsif body.respond_to?(:to_str)
        @body = [body]
        @buffered = true
        @length = body.to_str.bytesize
      else
        @body = body
        @buffered = nil # undetermined as of yet.
        @length = 0
      end

      yield self if block_given?
    end

    def redirect(target, status = 302)
      self.status = status
      self.location = target
    end

    def chunked?
      CHUNKED == get_header(TRANSFER_ENCODING)
    end

    def no_entity_body?
      # The response body is an enumerable body and it is not allowed to have an entity body.
      @body.respond_to?(:each) && STATUS_WITH_NO_ENTITY_BODY[@status]
    end
    
    # Generate a response array consistent with the requirements of the SPEC.
    # @return [Array] a 3-tuple suitable of `[status, headers, body]`
    # which is suitable to be returned from the middleware `#call(env)` method.
    def finish(&block)
      if no_entity_body?
        delete_header CONTENT_TYPE
        delete_header CONTENT_LENGTH
        close
        return [@status, @headers, []]
      else
        if block_given?
          @block = block
          return [@status, @headers, self]
        else
          return [@status, @headers, @body]
        end
      end
    end

    alias to_a finish           # For *response

    def each(&callback)
      @body.each(&callback)
      @buffered = true

      if @block
        @writer = callback
        @block.call(self)
      end
    end

    # Append to body and update content-length.
    #
    # NOTE: Do not mix #write and direct #body access!
    #
    def write(chunk)
      buffered_body!

      @writer.call(chunk.to_s)
    end

    def close
      @body.close if @body.respond_to?(:close)
    end

    def empty?
      @block == nil && @body.empty?
    end

    def has_header?(key)
      raise ArgumentError unless key.is_a?(String)
      @headers.key?(key)
    end
    def get_header(key)
      raise ArgumentError unless key.is_a?(String)
      @headers[key]
    end
    def set_header(key, value)
      raise ArgumentError unless key.is_a?(String)
      @headers[key] = value
    end
    def delete_header(key)
      raise ArgumentError unless key.is_a?(String)
      @headers.delete key
    end

    alias :[] :get_header
    alias :[]= :set_header

    module Helpers
      def invalid?;             status < 100 || status >= 600;        end

      def informational?;       status >= 100 && status < 200;        end
      def successful?;          status >= 200 && status < 300;        end
      def redirection?;         status >= 300 && status < 400;        end
      def client_error?;        status >= 400 && status < 500;        end
      def server_error?;        status >= 500 && status < 600;        end

      def ok?;                  status == 200;                        end
      def created?;             status == 201;                        end
      def accepted?;            status == 202;                        end
      def no_content?;          status == 204;                        end
      def moved_permanently?;   status == 301;                        end
      def bad_request?;         status == 400;                        end
      def unauthorized?;        status == 401;                        end
      def forbidden?;           status == 403;                        end
      def not_found?;           status == 404;                        end
      def method_not_allowed?;  status == 405;                        end
      def not_acceptable?;      status == 406;                        end
      def request_timeout?;     status == 408;                        end
      def precondition_failed?; status == 412;                        end
      def unprocessable?;       status == 422;                        end

      def redirect?;            [301, 302, 303, 307, 308].include? status; end

      def include?(header)
        has_header?(header)
      end

      # Add a header that may have multiple values.
      #
      # Example:
      #   response.add_header 'vary', 'accept-encoding'
      #   response.add_header 'vary', 'cookie'
      #
      #   assert_equal 'accept-encoding,cookie', response.get_header('vary')
      #
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
      def add_header(key, value)
        raise ArgumentError unless key.is_a?(String)

        if value.nil?
          return get_header(key)
        end

        value = value.to_s

        if header = get_header(key)
          if header.is_a?(Array)
            header << value
          else
            set_header(key, [header, value])
          end
        else
          set_header(key, value)
        end
      end

      # Get the content type of the response.
      def content_type
        get_header CONTENT_TYPE
      end

      # Set the content type of the response.
      def content_type=(content_type)
        set_header CONTENT_TYPE, content_type
      end

      def media_type
        MediaType.type(content_type)
      end

      def media_type_params
        MediaType.params(content_type)
      end

      def content_length
        cl = get_header CONTENT_LENGTH
        cl ? cl.to_i : cl
      end

      def location
        get_header "location"
      end

      def location=(location)
        set_header "location", location
      end

      def set_cookie(key, value)
        add_header SET_COOKIE, Utils.set_cookie_header(key, value)
      end

      def delete_cookie(key, value = {})
        set_header(SET_COOKIE,
          Utils.delete_set_cookie_header!(
            get_header(SET_COOKIE), key, value
          )
        )
      end

      def set_cookie_header
        get_header SET_COOKIE
      end

      def set_cookie_header=(value)
        set_header SET_COOKIE, value
      end

      def cache_control
        get_header CACHE_CONTROL
      end

      def cache_control=(value)
        set_header CACHE_CONTROL, value
      end

      # Specifies that the content shouldn't be cached. Overrides `cache!` if already called.
      def do_not_cache!
        set_header CACHE_CONTROL, "no-cache, must-revalidate"
        set_header EXPIRES, Time.now.httpdate
      end

      # Specify that the content should be cached.
      # @param duration [Integer] The number of seconds until the cache expires.
      # @option directive [String] The cache control directive, one of "public", "private", "no-cache" or "no-store".
      def cache!(duration = 3600, directive: "public")
        unless headers[CACHE_CONTROL] =~ /no-cache/
          set_header CACHE_CONTROL, "#{directive}, max-age=#{duration}"
          set_header EXPIRES, (Time.now + duration).httpdate
        end
      end

      def etag
        get_header ETAG
      end

      def etag=(value)
        set_header ETAG, value
      end

    protected

      def buffered_body!
        if @buffered.nil?
          if @body.is_a?(Array)
            # The user supplied body was an array:
            @body = @body.compact
            @body.each do |part|
              @length += part.to_s.bytesize
            end
          elsif @body.respond_to?(:each)
            # Turn the user supplied body into a buffered array:
            body = @body
            @body = Array.new

            body.each do |part|
              @writer.call(part.to_s)
            end

            body.close if body.respond_to?(:close)

            @buffered = true
          else
            @buffered = false
          end
        end

        return @buffered
      end

      def append(chunk)
        @body << chunk

        unless chunked?
          @length += chunk.bytesize
          set_header(CONTENT_LENGTH, @length.to_s)
        end

        return chunk
      end
    end

    include Helpers

    class Raw
      include Helpers

      attr_reader :headers
      attr_accessor :status

      def initialize(status, headers)
        @status = status
        @headers = headers
      end

      def has_header?(key)
        headers.key?(key)
      end

      def get_header(key)
        headers[key]
      end

      def set_header(key, value)
        headers[key] = value
      end

      def delete_header(key)
        headers.delete(key)
      end
    end
  end
end
PK*J[_��l��2share/gems/gems/rack-3.0.8/lib/rack/null_logger.rbnu�[���# frozen_string_literal: true

require_relative 'constants'

module Rack
  class NullLogger
    def initialize(app)
      @app = app
    end

    def call(env)
      env[RACK_LOGGER] = self
      @app.call(env)
    end

    def info(progname = nil, &block); end
    def debug(progname = nil, &block); end
    def warn(progname = nil, &block); end
    def error(progname = nil, &block); end
    def fatal(progname = nil, &block); end
    def unknown(progname = nil, &block); end
    def info? ;  end
    def debug? ; end
    def warn? ;  end
    def error? ; end
    def fatal? ; end
    def debug! ; end
    def error! ; end
    def fatal! ; end
    def info! ; end
    def warn! ; end
    def level ; end
    def progname ; end
    def datetime_format ; end
    def formatter ; end
    def sev_threshold ; end
    def level=(level); end
    def progname=(progname); end
    def datetime_format=(datetime_format); end
    def formatter=(formatter); end
    def sev_threshold=(sev_threshold); end
    def close ; end
    def add(severity, message = nil, progname = nil, &block); end
    def log(severity, message = nil, progname = nil, &block); end
    def <<(msg); end
    def reopen(logdev = nil); end
  end
end
PK*J[VM�Vww+share/gems/gems/rack-3.0.8/lib/rack/etag.rbnu�[���# frozen_string_literal: true

require 'digest/sha2'

require_relative 'constants'
require_relative 'utils'

module Rack
  # Automatically sets the etag header on all String bodies.
  #
  # The etag header is skipped if etag or last-modified headers are sent or if
  # a sendfile body (body.responds_to :to_path) is given (since such cases
  # should be handled by apache/nginx).
  #
  # On initialization, you can pass two parameters: a cache-control directive
  # used when etag is absent and a directive when it is present. The first
  # defaults to nil, while the second defaults to "max-age=0, private, must-revalidate"
  class ETag
    ETAG_STRING = Rack::ETAG
    DEFAULT_CACHE_CONTROL = "max-age=0, private, must-revalidate"

    def initialize(app, no_cache_control = nil, cache_control = DEFAULT_CACHE_CONTROL)
      @app = app
      @cache_control = cache_control
      @no_cache_control = no_cache_control
    end

    def call(env)
      status, headers, body = response = @app.call(env)

      if etag_status?(status) && body.respond_to?(:to_ary) && !skip_caching?(headers)
        body = body.to_ary
        digest = digest_body(body)
        headers[ETAG_STRING] = %(W/"#{digest}") if digest
      end

      unless headers[CACHE_CONTROL]
        if digest
          headers[CACHE_CONTROL] = @cache_control if @cache_control
        else
          headers[CACHE_CONTROL] = @no_cache_control if @no_cache_control
        end
      end

      response
    end

    private

      def etag_status?(status)
        status == 200 || status == 201
      end

      def skip_caching?(headers)
        headers.key?(ETAG_STRING) || headers.key?('last-modified')
      end

      def digest_body(body)
        digest = nil

        body.each do |part|
          (digest ||= Digest::SHA256.new) << part unless part.empty?
        end

        digest && digest.hexdigest.byteslice(0,32)
      end
  end
end
PK*J[[�J/share/gems/gems/rack-3.0.8/lib/rack/deflater.rbnu�[���# frozen_string_literal: true

require "zlib"
require "time"  # for Time.httpdate

require_relative 'constants'
require_relative 'utils'
require_relative 'request'
require_relative 'body_proxy'

module Rack
  # This middleware enables content encoding of http responses,
  # usually for purposes of compression.
  #
  # Currently supported encodings:
  #
  # * gzip
  # * identity (no transformation)
  #
  # This middleware automatically detects when encoding is supported
  # and allowed. For example no encoding is made when a cache
  # directive of 'no-transform' is present, when the response status
  # code is one that doesn't allow an entity body, or when the body
  # is empty.
  #
  # Note that despite the name, Deflater does not support the +deflate+
  # encoding.
  class Deflater
    # Creates Rack::Deflater middleware. Options:
    #
    # :if :: a lambda enabling / disabling deflation based on returned boolean value
    #        (e.g <tt>use Rack::Deflater, :if => lambda { |*, body| sum=0; body.each { |i| sum += i.length }; sum > 512 }</tt>).
    #        However, be aware that calling `body.each` inside the block will break cases where `body.each` is not idempotent,
    #        such as when it is an +IO+ instance.
    # :include :: a list of content types that should be compressed. By default, all content types are compressed.
    # :sync :: determines if the stream is going to be flushed after every chunk.  Flushing after every chunk reduces
    #          latency for time-sensitive streaming applications, but hurts compression and throughput.
    #          Defaults to +true+.
    def initialize(app, options = {})
      @app = app
      @condition = options[:if]
      @compressible_types = options[:include]
      @sync = options.fetch(:sync, true)
    end

    def call(env)
      status, headers, body = response = @app.call(env)

      unless should_deflate?(env, status, headers, body)
        return response
      end

      request = Request.new(env)

      encoding = Utils.select_best_encoding(%w(gzip identity),
                                            request.accept_encoding)

      # Set the Vary HTTP header.
      vary = headers["vary"].to_s.split(",").map(&:strip)
      unless vary.include?("*") || vary.any?{|v| v.downcase == 'accept-encoding'}
        headers["vary"] = vary.push("Accept-Encoding").join(",")
      end

      case encoding
      when "gzip"
        headers['content-encoding'] = "gzip"
        headers.delete(CONTENT_LENGTH)
        mtime = headers["last-modified"]
        mtime = Time.httpdate(mtime).to_i if mtime
        response[2] = GzipStream.new(body, mtime, @sync)
        response
      when "identity"
        response
      else # when nil
        # Only possible encoding values here are 'gzip', 'identity', and nil
        message = "An acceptable encoding for the requested resource #{request.fullpath} could not be found."
        bp = Rack::BodyProxy.new([message]) { body.close if body.respond_to?(:close) }
        [406, { CONTENT_TYPE => "text/plain", CONTENT_LENGTH => message.length.to_s }, bp]
      end
    end

    # Body class used for gzip encoded responses.
    class GzipStream

      BUFFER_LENGTH = 128 * 1_024

      # Initialize the gzip stream.  Arguments:
      # body :: Response body to compress with gzip
      # mtime :: The modification time of the body, used to set the
      #          modification time in the gzip header.
      # sync :: Whether to flush each gzip chunk as soon as it is ready.
      def initialize(body, mtime, sync)
        @body = body
        @mtime = mtime
        @sync = sync
      end

      # Yield gzip compressed strings to the given block.
      def each(&block)
        @writer = block
        gzip = ::Zlib::GzipWriter.new(self)
        gzip.mtime = @mtime if @mtime
        # @body.each is equivalent to @body.gets (slow)
        if @body.is_a? ::File # XXX: Should probably be ::IO
          while part = @body.read(BUFFER_LENGTH)
            gzip.write(part)
            gzip.flush if @sync
          end
        else
          @body.each { |part|
            # Skip empty strings, as they would result in no output,
            # and flushing empty parts would raise Zlib::BufError.
            next if part.empty?
            gzip.write(part)
            gzip.flush if @sync
          }
        end
      ensure
        gzip.finish
      end

      # Call the block passed to #each with the gzipped data.
      def write(data)
        @writer.call(data)
      end

      # Close the original body if possible.
      def close
        @body.close if @body.respond_to?(:close)
      end
    end

    private

    # Whether the body should be compressed.
    def should_deflate?(env, status, headers, body)
      # Skip compressing empty entity body responses and responses with
      # no-transform set.
      if Utils::STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i) ||
          /\bno-transform\b/.match?(headers[CACHE_CONTROL].to_s) ||
          headers['content-encoding']&.!~(/\bidentity\b/)
        return false
      end

      # Skip if @compressible_types are given and does not include request's content type
      return false if @compressible_types && !(headers.has_key?(CONTENT_TYPE) && @compressible_types.include?(headers[CONTENT_TYPE][/[^;]*/]))

      # Skip if @condition lambda is given and evaluates to false
      return false if @condition && !@condition.call(env, status, headers, body)

      # No point in compressing empty body, also handles usage with
      # Rack::Sendfile.
      return false if headers[CONTENT_LENGTH] == '0'

      true
    end
  end
end
PK*J[�i\��-share/gems/gems/rack-3.0.8/lib/rack/config.rbnu�[���# frozen_string_literal: true

module Rack
  # Rack::Config modifies the environment using the block given during
  # initialization.
  #
  # Example:
  #     use Rack::Config do |env|
  #       env['my-key'] = 'some-value'
  #     end
  class Config
    def initialize(app, &block)
      @app = app
      @block = block
    end

    def call(env)
      @block.call(env)
      @app.call(env)
    end
  end
end
PK*J[:�}==-share/gems/gems/rack-3.0.8/lib/rack/urlmap.rbnu�[���# frozen_string_literal: true

require 'set'

require_relative 'constants'

module Rack
  # Rack::URLMap takes a hash mapping urls or paths to apps, and
  # dispatches accordingly.  Support for HTTP/1.1 host names exists if
  # the URLs start with <tt>http://</tt> or <tt>https://</tt>.
  #
  # URLMap modifies the SCRIPT_NAME and PATH_INFO such that the part
  # relevant for dispatch is in the SCRIPT_NAME, and the rest in the
  # PATH_INFO.  This should be taken care of when you need to
  # reconstruct the URL in order to create links.
  #
  # URLMap dispatches in such a way that the longest paths are tried
  # first, since they are most specific.

  class URLMap
    def initialize(map = {})
      remap(map)
    end

    def remap(map)
      @known_hosts = Set[]
      @mapping = map.map { |location, app|
        if location =~ %r{\Ahttps?://(.*?)(/.*)}
          host, location = $1, $2
          @known_hosts << host
        else
          host = nil
        end

        unless location[0] == ?/
          raise ArgumentError, "paths need to start with /"
        end

        location = location.chomp('/')
        match = Regexp.new("^#{Regexp.quote(location).gsub('/', '/+')}(.*)", Regexp::NOENCODING)

        [host, location, match, app]
      }.sort_by do |(host, location, _, _)|
        [host ? -host.size : Float::INFINITY, -location.size]
      end
    end

    def call(env)
      path        = env[PATH_INFO]
      script_name = env[SCRIPT_NAME]
      http_host   = env[HTTP_HOST]
      server_name = env[SERVER_NAME]
      server_port = env[SERVER_PORT]

      is_same_server = casecmp?(http_host, server_name) ||
                       casecmp?(http_host, "#{server_name}:#{server_port}")

      is_host_known = @known_hosts.include? http_host

      @mapping.each do |host, location, match, app|
        unless casecmp?(http_host, host) \
            || casecmp?(server_name, host) \
            || (!host && is_same_server) \
            || (!host && !is_host_known) # If we don't have a matching host, default to the first without a specified host
          next
        end

        next unless m = match.match(path.to_s)

        rest = m[1]
        next unless !rest || rest.empty? || rest[0] == ?/

        env[SCRIPT_NAME] = (script_name + location)
        env[PATH_INFO] = rest

        return app.call(env)
      end

      [404, { CONTENT_TYPE => "text/plain", "x-cascade" => "pass" }, ["Not Found: #{path}"]]

    ensure
      env[PATH_INFO]   = path
      env[SCRIPT_NAME] = script_name
    end

    private
    def casecmp?(v1, v2)
      # if both nil, or they're the same string
      return true if v1 == v2

      # if either are nil... (but they're not the same)
      return false if v1.nil?
      return false if v2.nil?

      # otherwise check they're not case-insensitive the same
      v1.casecmp(v2).zero?
    end
  end
end
PK*J[?�6/����+share/gems/gems/rack-3.0.8/lib/rack/mime.rbnu�[���# frozen_string_literal: true

module Rack
  module Mime
    # Returns String with mime type if found, otherwise use +fallback+.
    # +ext+ should be filename extension in the '.ext' format that
    #       File.extname(file) returns.
    # +fallback+ may be any object
    #
    # Also see the documentation for MIME_TYPES
    #
    # Usage:
    #     Rack::Mime.mime_type('.foo')
    #
    # This is a shortcut for:
    #     Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream')

    def mime_type(ext, fallback = 'application/octet-stream')
      MIME_TYPES.fetch(ext.to_s.downcase, fallback)
    end
    module_function :mime_type

    # Returns true if the given value is a mime match for the given mime match
    # specification, false otherwise.
    #
    #    Rack::Mime.match?('text/html', 'text/*') => true
    #    Rack::Mime.match?('text/plain', '*') => true
    #    Rack::Mime.match?('text/html', 'application/json') => false

    def match?(value, matcher)
      v1, v2 = value.split('/', 2)
      m1, m2 = matcher.split('/', 2)

      (m1 == '*' || v1 == m1) && (m2.nil? || m2 == '*' || m2 == v2)
    end
    module_function :match?

    # List of most common mime-types, selected various sources
    # according to their usefulness in a webserving scope for Ruby
    # users.
    #
    # To amend this list with your local mime.types list you can use:
    #
    #     require 'webrick/httputils'
    #     list = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types')
    #     Rack::Mime::MIME_TYPES.merge!(list)
    #
    # N.B. On Ubuntu the mime.types file does not include the leading period, so
    # users may need to modify the data before merging into the hash.

    MIME_TYPES = {
      ".123"       => "application/vnd.lotus-1-2-3",
      ".3dml"      => "text/vnd.in3d.3dml",
      ".3g2"       => "video/3gpp2",
      ".3gp"       => "video/3gpp",
      ".a"         => "application/octet-stream",
      ".acc"       => "application/vnd.americandynamics.acc",
      ".ace"       => "application/x-ace-compressed",
      ".acu"       => "application/vnd.acucobol",
      ".aep"       => "application/vnd.audiograph",
      ".afp"       => "application/vnd.ibm.modcap",
      ".ai"        => "application/postscript",
      ".aif"       => "audio/x-aiff",
      ".aiff"      => "audio/x-aiff",
      ".ami"       => "application/vnd.amiga.ami",
      ".apng"      => "image/apng",
      ".appcache"  => "text/cache-manifest",
      ".apr"       => "application/vnd.lotus-approach",
      ".asc"       => "application/pgp-signature",
      ".asf"       => "video/x-ms-asf",
      ".asm"       => "text/x-asm",
      ".aso"       => "application/vnd.accpac.simply.aso",
      ".asx"       => "video/x-ms-asf",
      ".atc"       => "application/vnd.acucorp",
      ".atom"      => "application/atom+xml",
      ".atomcat"   => "application/atomcat+xml",
      ".atomsvc"   => "application/atomsvc+xml",
      ".atx"       => "application/vnd.antix.game-component",
      ".au"        => "audio/basic",
      ".avi"       => "video/x-msvideo",
      ".avif"      => "image/avif",
      ".bat"       => "application/x-msdownload",
      ".bcpio"     => "application/x-bcpio",
      ".bdm"       => "application/vnd.syncml.dm+wbxml",
      ".bh2"       => "application/vnd.fujitsu.oasysprs",
      ".bin"       => "application/octet-stream",
      ".bmi"       => "application/vnd.bmi",
      ".bmp"       => "image/bmp",
      ".box"       => "application/vnd.previewsystems.box",
      ".btif"      => "image/prs.btif",
      ".bz"        => "application/x-bzip",
      ".bz2"       => "application/x-bzip2",
      ".c"         => "text/x-c",
      ".c4g"       => "application/vnd.clonk.c4group",
      ".cab"       => "application/vnd.ms-cab-compressed",
      ".cc"        => "text/x-c",
      ".ccxml"     => "application/ccxml+xml",
      ".cdbcmsg"   => "application/vnd.contact.cmsg",
      ".cdkey"     => "application/vnd.mediastation.cdkey",
      ".cdx"       => "chemical/x-cdx",
      ".cdxml"     => "application/vnd.chemdraw+xml",
      ".cdy"       => "application/vnd.cinderella",
      ".cer"       => "application/pkix-cert",
      ".cgm"       => "image/cgm",
      ".chat"      => "application/x-chat",
      ".chm"       => "application/vnd.ms-htmlhelp",
      ".chrt"      => "application/vnd.kde.kchart",
      ".cif"       => "chemical/x-cif",
      ".cii"       => "application/vnd.anser-web-certificate-issue-initiation",
      ".cil"       => "application/vnd.ms-artgalry",
      ".cla"       => "application/vnd.claymore",
      ".class"     => "application/octet-stream",
      ".clkk"      => "application/vnd.crick.clicker.keyboard",
      ".clkp"      => "application/vnd.crick.clicker.palette",
      ".clkt"      => "application/vnd.crick.clicker.template",
      ".clkw"      => "application/vnd.crick.clicker.wordbank",
      ".clkx"      => "application/vnd.crick.clicker",
      ".clp"       => "application/x-msclip",
      ".cmc"       => "application/vnd.cosmocaller",
      ".cmdf"      => "chemical/x-cmdf",
      ".cml"       => "chemical/x-cml",
      ".cmp"       => "application/vnd.yellowriver-custom-menu",
      ".cmx"       => "image/x-cmx",
      ".com"       => "application/x-msdownload",
      ".conf"      => "text/plain",
      ".cpio"      => "application/x-cpio",
      ".cpp"       => "text/x-c",
      ".cpt"       => "application/mac-compactpro",
      ".crd"       => "application/x-mscardfile",
      ".crl"       => "application/pkix-crl",
      ".crt"       => "application/x-x509-ca-cert",
      ".csh"       => "application/x-csh",
      ".csml"      => "chemical/x-csml",
      ".csp"       => "application/vnd.commonspace",
      ".css"       => "text/css",
      ".csv"       => "text/csv",
      ".curl"      => "application/vnd.curl",
      ".cww"       => "application/prs.cww",
      ".cxx"       => "text/x-c",
      ".daf"       => "application/vnd.mobius.daf",
      ".davmount"  => "application/davmount+xml",
      ".dcr"       => "application/x-director",
      ".dd2"       => "application/vnd.oma.dd2+xml",
      ".ddd"       => "application/vnd.fujixerox.ddd",
      ".deb"       => "application/x-debian-package",
      ".der"       => "application/x-x509-ca-cert",
      ".dfac"      => "application/vnd.dreamfactory",
      ".diff"      => "text/x-diff",
      ".dis"       => "application/vnd.mobius.dis",
      ".djv"       => "image/vnd.djvu",
      ".djvu"      => "image/vnd.djvu",
      ".dll"       => "application/x-msdownload",
      ".dmg"       => "application/octet-stream",
      ".dna"       => "application/vnd.dna",
      ".doc"       => "application/msword",
      ".docm"      => "application/vnd.ms-word.document.macroEnabled.12",
      ".docx"      => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      ".dot"       => "application/msword",
      ".dotm"      => "application/vnd.ms-word.template.macroEnabled.12",
      ".dotx"      => "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
      ".dp"        => "application/vnd.osgi.dp",
      ".dpg"       => "application/vnd.dpgraph",
      ".dsc"       => "text/prs.lines.tag",
      ".dtd"       => "application/xml-dtd",
      ".dts"       => "audio/vnd.dts",
      ".dtshd"     => "audio/vnd.dts.hd",
      ".dv"        => "video/x-dv",
      ".dvi"       => "application/x-dvi",
      ".dwf"       => "model/vnd.dwf",
      ".dwg"       => "image/vnd.dwg",
      ".dxf"       => "image/vnd.dxf",
      ".dxp"       => "application/vnd.spotfire.dxp",
      ".ear"       => "application/java-archive",
      ".ecelp4800" => "audio/vnd.nuera.ecelp4800",
      ".ecelp7470" => "audio/vnd.nuera.ecelp7470",
      ".ecelp9600" => "audio/vnd.nuera.ecelp9600",
      ".ecma"      => "application/ecmascript",
      ".edm"       => "application/vnd.novadigm.edm",
      ".edx"       => "application/vnd.novadigm.edx",
      ".efif"      => "application/vnd.picsel",
      ".ei6"       => "application/vnd.pg.osasli",
      ".eml"       => "message/rfc822",
      ".eol"       => "audio/vnd.digital-winds",
      ".eot"       => "application/vnd.ms-fontobject",
      ".eps"       => "application/postscript",
      ".es3"       => "application/vnd.eszigno3+xml",
      ".esf"       => "application/vnd.epson.esf",
      ".etx"       => "text/x-setext",
      ".exe"       => "application/x-msdownload",
      ".ext"       => "application/vnd.novadigm.ext",
      ".ez"        => "application/andrew-inset",
      ".ez2"       => "application/vnd.ezpix-album",
      ".ez3"       => "application/vnd.ezpix-package",
      ".f"         => "text/x-fortran",
      ".f77"       => "text/x-fortran",
      ".f90"       => "text/x-fortran",
      ".fbs"       => "image/vnd.fastbidsheet",
      ".fdf"       => "application/vnd.fdf",
      ".fe_launch" => "application/vnd.denovo.fcselayout-link",
      ".fg5"       => "application/vnd.fujitsu.oasysgp",
      ".fli"       => "video/x-fli",
      ".flif"      => "image/flif",
      ".flo"       => "application/vnd.micrografx.flo",
      ".flv"       => "video/x-flv",
      ".flw"       => "application/vnd.kde.kivio",
      ".flx"       => "text/vnd.fmi.flexstor",
      ".fly"       => "text/vnd.fly",
      ".fm"        => "application/vnd.framemaker",
      ".fnc"       => "application/vnd.frogans.fnc",
      ".for"       => "text/x-fortran",
      ".fpx"       => "image/vnd.fpx",
      ".fsc"       => "application/vnd.fsc.weblaunch",
      ".fst"       => "image/vnd.fst",
      ".ftc"       => "application/vnd.fluxtime.clip",
      ".fti"       => "application/vnd.anser-web-funds-transfer-initiation",
      ".fvt"       => "video/vnd.fvt",
      ".fzs"       => "application/vnd.fuzzysheet",
      ".g3"        => "image/g3fax",
      ".gac"       => "application/vnd.groove-account",
      ".gdl"       => "model/vnd.gdl",
      ".gem"       => "application/octet-stream",
      ".gemspec"   => "text/x-script.ruby",
      ".ghf"       => "application/vnd.groove-help",
      ".gif"       => "image/gif",
      ".gim"       => "application/vnd.groove-identity-message",
      ".gmx"       => "application/vnd.gmx",
      ".gph"       => "application/vnd.flographit",
      ".gqf"       => "application/vnd.grafeq",
      ".gram"      => "application/srgs",
      ".grv"       => "application/vnd.groove-injector",
      ".grxml"     => "application/srgs+xml",
      ".gtar"      => "application/x-gtar",
      ".gtm"       => "application/vnd.groove-tool-message",
      ".gtw"       => "model/vnd.gtw",
      ".gv"        => "text/vnd.graphviz",
      ".gz"        => "application/x-gzip",
      ".h"         => "text/x-c",
      ".h261"      => "video/h261",
      ".h263"      => "video/h263",
      ".h264"      => "video/h264",
      ".hbci"      => "application/vnd.hbci",
      ".hdf"       => "application/x-hdf",
      ".heic"      => "image/heic",
      ".heics"     => "image/heic-sequence",
      ".heif"      => "image/heif",
      ".heifs"     => "image/heif-sequence",
      ".hh"        => "text/x-c",
      ".hlp"       => "application/winhlp",
      ".hpgl"      => "application/vnd.hp-hpgl",
      ".hpid"      => "application/vnd.hp-hpid",
      ".hps"       => "application/vnd.hp-hps",
      ".hqx"       => "application/mac-binhex40",
      ".htc"       => "text/x-component",
      ".htke"      => "application/vnd.kenameaapp",
      ".htm"       => "text/html",
      ".html"      => "text/html",
      ".hvd"       => "application/vnd.yamaha.hv-dic",
      ".hvp"       => "application/vnd.yamaha.hv-voice",
      ".hvs"       => "application/vnd.yamaha.hv-script",
      ".icc"       => "application/vnd.iccprofile",
      ".ice"       => "x-conference/x-cooltalk",
      ".ico"       => "image/vnd.microsoft.icon",
      ".ics"       => "text/calendar",
      ".ief"       => "image/ief",
      ".ifb"       => "text/calendar",
      ".ifm"       => "application/vnd.shana.informed.formdata",
      ".igl"       => "application/vnd.igloader",
      ".igs"       => "model/iges",
      ".igx"       => "application/vnd.micrografx.igx",
      ".iif"       => "application/vnd.shana.informed.interchange",
      ".imp"       => "application/vnd.accpac.simply.imp",
      ".ims"       => "application/vnd.ms-ims",
      ".ipk"       => "application/vnd.shana.informed.package",
      ".irm"       => "application/vnd.ibm.rights-management",
      ".irp"       => "application/vnd.irepository.package+xml",
      ".iso"       => "application/octet-stream",
      ".itp"       => "application/vnd.shana.informed.formtemplate",
      ".ivp"       => "application/vnd.immervision-ivp",
      ".ivu"       => "application/vnd.immervision-ivu",
      ".jad"       => "text/vnd.sun.j2me.app-descriptor",
      ".jam"       => "application/vnd.jam",
      ".jar"       => "application/java-archive",
      ".java"      => "text/x-java-source",
      ".jisp"      => "application/vnd.jisp",
      ".jlt"       => "application/vnd.hp-jlyt",
      ".jnlp"      => "application/x-java-jnlp-file",
      ".joda"      => "application/vnd.joost.joda-archive",
      ".jp2"       => "image/jp2",
      ".jpeg"      => "image/jpeg",
      ".jpg"       => "image/jpeg",
      ".jpgv"      => "video/jpeg",
      ".jpm"       => "video/jpm",
      ".js"        => "application/javascript",
      ".json"      => "application/json",
      ".karbon"    => "application/vnd.kde.karbon",
      ".kfo"       => "application/vnd.kde.kformula",
      ".kia"       => "application/vnd.kidspiration",
      ".kml"       => "application/vnd.google-earth.kml+xml",
      ".kmz"       => "application/vnd.google-earth.kmz",
      ".kne"       => "application/vnd.kinar",
      ".kon"       => "application/vnd.kde.kontour",
      ".kpr"       => "application/vnd.kde.kpresenter",
      ".ksp"       => "application/vnd.kde.kspread",
      ".ktz"       => "application/vnd.kahootz",
      ".kwd"       => "application/vnd.kde.kword",
      ".latex"     => "application/x-latex",
      ".lbd"       => "application/vnd.llamagraphics.life-balance.desktop",
      ".lbe"       => "application/vnd.llamagraphics.life-balance.exchange+xml",
      ".les"       => "application/vnd.hhe.lesson-player",
      ".link66"    => "application/vnd.route66.link66+xml",
      ".log"       => "text/plain",
      ".lostxml"   => "application/lost+xml",
      ".lrm"       => "application/vnd.ms-lrm",
      ".ltf"       => "application/vnd.frogans.ltf",
      ".lvp"       => "audio/vnd.lucent.voice",
      ".lwp"       => "application/vnd.lotus-wordpro",
      ".m3u"       => "audio/x-mpegurl",
      ".m3u8"      => "application/x-mpegurl",
      ".m4a"       => "audio/mp4a-latm",
      ".m4v"       => "video/mp4",
      ".ma"        => "application/mathematica",
      ".mag"       => "application/vnd.ecowin.chart",
      ".man"       => "text/troff",
      ".manifest"  => "text/cache-manifest",
      ".mathml"    => "application/mathml+xml",
      ".mbk"       => "application/vnd.mobius.mbk",
      ".mbox"      => "application/mbox",
      ".mc1"       => "application/vnd.medcalcdata",
      ".mcd"       => "application/vnd.mcd",
      ".mdb"       => "application/x-msaccess",
      ".mdi"       => "image/vnd.ms-modi",
      ".mdoc"      => "text/troff",
      ".me"        => "text/troff",
      ".mfm"       => "application/vnd.mfmp",
      ".mgz"       => "application/vnd.proteus.magazine",
      ".mid"       => "audio/midi",
      ".midi"      => "audio/midi",
      ".mif"       => "application/vnd.mif",
      ".mime"      => "message/rfc822",
      ".mj2"       => "video/mj2",
      ".mlp"       => "application/vnd.dolby.mlp",
      ".mmd"       => "application/vnd.chipnuts.karaoke-mmd",
      ".mmf"       => "application/vnd.smaf",
      ".mml"       => "application/mathml+xml",
      ".mmr"       => "image/vnd.fujixerox.edmics-mmr",
      ".mng"       => "video/x-mng",
      ".mny"       => "application/x-msmoney",
      ".mov"       => "video/quicktime",
      ".movie"     => "video/x-sgi-movie",
      ".mp3"       => "audio/mpeg",
      ".mp4"       => "video/mp4",
      ".mp4a"      => "audio/mp4",
      ".mp4s"      => "application/mp4",
      ".mp4v"      => "video/mp4",
      ".mpc"       => "application/vnd.mophun.certificate",
      ".mpd"       => "application/dash+xml",
      ".mpeg"      => "video/mpeg",
      ".mpg"       => "video/mpeg",
      ".mpga"      => "audio/mpeg",
      ".mpkg"      => "application/vnd.apple.installer+xml",
      ".mpm"       => "application/vnd.blueice.multipass",
      ".mpn"       => "application/vnd.mophun.application",
      ".mpp"       => "application/vnd.ms-project",
      ".mpy"       => "application/vnd.ibm.minipay",
      ".mqy"       => "application/vnd.mobius.mqy",
      ".mrc"       => "application/marc",
      ".ms"        => "text/troff",
      ".mscml"     => "application/mediaservercontrol+xml",
      ".mseq"      => "application/vnd.mseq",
      ".msf"       => "application/vnd.epson.msf",
      ".msh"       => "model/mesh",
      ".msi"       => "application/x-msdownload",
      ".msl"       => "application/vnd.mobius.msl",
      ".msty"      => "application/vnd.muvee.style",
      ".mts"       => "model/vnd.mts",
      ".mus"       => "application/vnd.musician",
      ".mvb"       => "application/x-msmediaview",
      ".mwf"       => "application/vnd.mfer",
      ".mxf"       => "application/mxf",
      ".mxl"       => "application/vnd.recordare.musicxml",
      ".mxml"      => "application/xv+xml",
      ".mxs"       => "application/vnd.triscape.mxs",
      ".mxu"       => "video/vnd.mpegurl",
      ".n"         => "application/vnd.nokia.n-gage.symbian.install",
      ".nc"        => "application/x-netcdf",
      ".ngdat"     => "application/vnd.nokia.n-gage.data",
      ".nlu"       => "application/vnd.neurolanguage.nlu",
      ".nml"       => "application/vnd.enliven",
      ".nnd"       => "application/vnd.noblenet-directory",
      ".nns"       => "application/vnd.noblenet-sealer",
      ".nnw"       => "application/vnd.noblenet-web",
      ".npx"       => "image/vnd.net-fpx",
      ".nsf"       => "application/vnd.lotus-notes",
      ".oa2"       => "application/vnd.fujitsu.oasys2",
      ".oa3"       => "application/vnd.fujitsu.oasys3",
      ".oas"       => "application/vnd.fujitsu.oasys",
      ".obd"       => "application/x-msbinder",
      ".oda"       => "application/oda",
      ".odc"       => "application/vnd.oasis.opendocument.chart",
      ".odf"       => "application/vnd.oasis.opendocument.formula",
      ".odg"       => "application/vnd.oasis.opendocument.graphics",
      ".odi"       => "application/vnd.oasis.opendocument.image",
      ".odp"       => "application/vnd.oasis.opendocument.presentation",
      ".ods"       => "application/vnd.oasis.opendocument.spreadsheet",
      ".odt"       => "application/vnd.oasis.opendocument.text",
      ".oga"       => "audio/ogg",
      ".ogg"       => "application/ogg",
      ".ogv"       => "video/ogg",
      ".ogx"       => "application/ogg",
      ".org"       => "application/vnd.lotus-organizer",
      ".otc"       => "application/vnd.oasis.opendocument.chart-template",
      ".otf"       => "application/vnd.oasis.opendocument.formula-template",
      ".otg"       => "application/vnd.oasis.opendocument.graphics-template",
      ".oth"       => "application/vnd.oasis.opendocument.text-web",
      ".oti"       => "application/vnd.oasis.opendocument.image-template",
      ".otm"       => "application/vnd.oasis.opendocument.text-master",
      ".ots"       => "application/vnd.oasis.opendocument.spreadsheet-template",
      ".ott"       => "application/vnd.oasis.opendocument.text-template",
      ".oxt"       => "application/vnd.openofficeorg.extension",
      ".p"         => "text/x-pascal",
      ".p10"       => "application/pkcs10",
      ".p12"       => "application/x-pkcs12",
      ".p7b"       => "application/x-pkcs7-certificates",
      ".p7m"       => "application/pkcs7-mime",
      ".p7r"       => "application/x-pkcs7-certreqresp",
      ".p7s"       => "application/pkcs7-signature",
      ".pas"       => "text/x-pascal",
      ".pbd"       => "application/vnd.powerbuilder6",
      ".pbm"       => "image/x-portable-bitmap",
      ".pcl"       => "application/vnd.hp-pcl",
      ".pclxl"     => "application/vnd.hp-pclxl",
      ".pcx"       => "image/x-pcx",
      ".pdb"       => "chemical/x-pdb",
      ".pdf"       => "application/pdf",
      ".pem"       => "application/x-x509-ca-cert",
      ".pfr"       => "application/font-tdpfr",
      ".pgm"       => "image/x-portable-graymap",
      ".pgn"       => "application/x-chess-pgn",
      ".pgp"       => "application/pgp-encrypted",
      ".pic"       => "image/x-pict",
      ".pict"      => "image/pict",
      ".pkg"       => "application/octet-stream",
      ".pki"       => "application/pkixcmp",
      ".pkipath"   => "application/pkix-pkipath",
      ".pl"        => "text/x-script.perl",
      ".plb"       => "application/vnd.3gpp.pic-bw-large",
      ".plc"       => "application/vnd.mobius.plc",
      ".plf"       => "application/vnd.pocketlearn",
      ".pls"       => "application/pls+xml",
      ".pm"        => "text/x-script.perl-module",
      ".pml"       => "application/vnd.ctc-posml",
      ".png"       => "image/png",
      ".pnm"       => "image/x-portable-anymap",
      ".pntg"      => "image/x-macpaint",
      ".portpkg"   => "application/vnd.macports.portpkg",
      ".pot"       => "application/vnd.ms-powerpoint",
      ".potm"      => "application/vnd.ms-powerpoint.template.macroEnabled.12",
      ".potx"      => "application/vnd.openxmlformats-officedocument.presentationml.template",
      ".ppa"       => "application/vnd.ms-powerpoint",
      ".ppam"      => "application/vnd.ms-powerpoint.addin.macroEnabled.12",
      ".ppd"       => "application/vnd.cups-ppd",
      ".ppm"       => "image/x-portable-pixmap",
      ".pps"       => "application/vnd.ms-powerpoint",
      ".ppsm"      => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
      ".ppsx"      => "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
      ".ppt"       => "application/vnd.ms-powerpoint",
      ".pptm"      => "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
      ".pptx"      => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
      ".prc"       => "application/vnd.palm",
      ".pre"       => "application/vnd.lotus-freelance",
      ".prf"       => "application/pics-rules",
      ".ps"        => "application/postscript",
      ".psb"       => "application/vnd.3gpp.pic-bw-small",
      ".psd"       => "image/vnd.adobe.photoshop",
      ".ptid"      => "application/vnd.pvi.ptid1",
      ".pub"       => "application/x-mspublisher",
      ".pvb"       => "application/vnd.3gpp.pic-bw-var",
      ".pwn"       => "application/vnd.3m.post-it-notes",
      ".py"        => "text/x-script.python",
      ".pya"       => "audio/vnd.ms-playready.media.pya",
      ".pyv"       => "video/vnd.ms-playready.media.pyv",
      ".qam"       => "application/vnd.epson.quickanime",
      ".qbo"       => "application/vnd.intu.qbo",
      ".qfx"       => "application/vnd.intu.qfx",
      ".qps"       => "application/vnd.publishare-delta-tree",
      ".qt"        => "video/quicktime",
      ".qtif"      => "image/x-quicktime",
      ".qxd"       => "application/vnd.quark.quarkxpress",
      ".ra"        => "audio/x-pn-realaudio",
      ".rake"      => "text/x-script.ruby",
      ".ram"       => "audio/x-pn-realaudio",
      ".rar"       => "application/x-rar-compressed",
      ".ras"       => "image/x-cmu-raster",
      ".rb"        => "text/x-script.ruby",
      ".rcprofile" => "application/vnd.ipunplugged.rcprofile",
      ".rdf"       => "application/rdf+xml",
      ".rdz"       => "application/vnd.data-vision.rdz",
      ".rep"       => "application/vnd.businessobjects",
      ".rgb"       => "image/x-rgb",
      ".rif"       => "application/reginfo+xml",
      ".rl"        => "application/resource-lists+xml",
      ".rlc"       => "image/vnd.fujixerox.edmics-rlc",
      ".rld"       => "application/resource-lists-diff+xml",
      ".rm"        => "application/vnd.rn-realmedia",
      ".rmp"       => "audio/x-pn-realaudio-plugin",
      ".rms"       => "application/vnd.jcp.javame.midlet-rms",
      ".rnc"       => "application/relax-ng-compact-syntax",
      ".roff"      => "text/troff",
      ".rpm"       => "application/x-redhat-package-manager",
      ".rpss"      => "application/vnd.nokia.radio-presets",
      ".rpst"      => "application/vnd.nokia.radio-preset",
      ".rq"        => "application/sparql-query",
      ".rs"        => "application/rls-services+xml",
      ".rsd"       => "application/rsd+xml",
      ".rss"       => "application/rss+xml",
      ".rtf"       => "application/rtf",
      ".rtx"       => "text/richtext",
      ".ru"        => "text/x-script.ruby",
      ".s"         => "text/x-asm",
      ".saf"       => "application/vnd.yamaha.smaf-audio",
      ".sbml"      => "application/sbml+xml",
      ".sc"        => "application/vnd.ibm.secure-container",
      ".scd"       => "application/x-msschedule",
      ".scm"       => "application/vnd.lotus-screencam",
      ".scq"       => "application/scvp-cv-request",
      ".scs"       => "application/scvp-cv-response",
      ".sdkm"      => "application/vnd.solent.sdkm+xml",
      ".sdp"       => "application/sdp",
      ".see"       => "application/vnd.seemail",
      ".sema"      => "application/vnd.sema",
      ".semd"      => "application/vnd.semd",
      ".semf"      => "application/vnd.semf",
      ".setpay"    => "application/set-payment-initiation",
      ".setreg"    => "application/set-registration-initiation",
      ".sfd"       => "application/vnd.hydrostatix.sof-data",
      ".sfs"       => "application/vnd.spotfire.sfs",
      ".sgm"       => "text/sgml",
      ".sgml"      => "text/sgml",
      ".sh"        => "application/x-sh",
      ".shar"      => "application/x-shar",
      ".shf"       => "application/shf+xml",
      ".sig"       => "application/pgp-signature",
      ".sit"       => "application/x-stuffit",
      ".sitx"      => "application/x-stuffitx",
      ".skp"       => "application/vnd.koan",
      ".slt"       => "application/vnd.epson.salt",
      ".smi"       => "application/smil+xml",
      ".snd"       => "audio/basic",
      ".so"        => "application/octet-stream",
      ".spf"       => "application/vnd.yamaha.smaf-phrase",
      ".spl"       => "application/x-futuresplash",
      ".spot"      => "text/vnd.in3d.spot",
      ".spp"       => "application/scvp-vp-response",
      ".spq"       => "application/scvp-vp-request",
      ".src"       => "application/x-wais-source",
      ".srt"       => "text/srt",
      ".srx"       => "application/sparql-results+xml",
      ".sse"       => "application/vnd.kodak-descriptor",
      ".ssf"       => "application/vnd.epson.ssf",
      ".ssml"      => "application/ssml+xml",
      ".stf"       => "application/vnd.wt.stf",
      ".stk"       => "application/hyperstudio",
      ".str"       => "application/vnd.pg.format",
      ".sus"       => "application/vnd.sus-calendar",
      ".sv4cpio"   => "application/x-sv4cpio",
      ".sv4crc"    => "application/x-sv4crc",
      ".svd"       => "application/vnd.svd",
      ".svg"       => "image/svg+xml",
      ".svgz"      => "image/svg+xml",
      ".swf"       => "application/x-shockwave-flash",
      ".swi"       => "application/vnd.arastra.swi",
      ".t"         => "text/troff",
      ".tao"       => "application/vnd.tao.intent-module-archive",
      ".tar"       => "application/x-tar",
      ".tbz"       => "application/x-bzip-compressed-tar",
      ".tcap"      => "application/vnd.3gpp2.tcap",
      ".tcl"       => "application/x-tcl",
      ".tex"       => "application/x-tex",
      ".texi"      => "application/x-texinfo",
      ".texinfo"   => "application/x-texinfo",
      ".text"      => "text/plain",
      ".tif"       => "image/tiff",
      ".tiff"      => "image/tiff",
      ".tmo"       => "application/vnd.tmobile-livetv",
      ".torrent"   => "application/x-bittorrent",
      ".tpl"       => "application/vnd.groove-tool-template",
      ".tpt"       => "application/vnd.trid.tpt",
      ".tr"        => "text/troff",
      ".tra"       => "application/vnd.trueapp",
      ".trm"       => "application/x-msterminal",
      ".ts"        => "video/mp2t",
      ".tsv"       => "text/tab-separated-values",
      ".ttf"       => "application/octet-stream",
      ".twd"       => "application/vnd.simtech-mindmapper",
      ".txd"       => "application/vnd.genomatix.tuxedo",
      ".txf"       => "application/vnd.mobius.txf",
      ".txt"       => "text/plain",
      ".ufd"       => "application/vnd.ufdl",
      ".umj"       => "application/vnd.umajin",
      ".unityweb"  => "application/vnd.unity",
      ".uoml"      => "application/vnd.uoml+xml",
      ".uri"       => "text/uri-list",
      ".ustar"     => "application/x-ustar",
      ".utz"       => "application/vnd.uiq.theme",
      ".uu"        => "text/x-uuencode",
      ".vcd"       => "application/x-cdlink",
      ".vcf"       => "text/x-vcard",
      ".vcg"       => "application/vnd.groove-vcard",
      ".vcs"       => "text/x-vcalendar",
      ".vcx"       => "application/vnd.vcx",
      ".vis"       => "application/vnd.visionary",
      ".viv"       => "video/vnd.vivo",
      ".vrml"      => "model/vrml",
      ".vsd"       => "application/vnd.visio",
      ".vsf"       => "application/vnd.vsf",
      ".vtt"       => "text/vtt",
      ".vtu"       => "model/vnd.vtu",
      ".vxml"      => "application/voicexml+xml",
      ".war"       => "application/java-archive",
      ".wasm"      => "application/wasm",
      ".wav"       => "audio/x-wav",
      ".wax"       => "audio/x-ms-wax",
      ".wbmp"      => "image/vnd.wap.wbmp",
      ".wbs"       => "application/vnd.criticaltools.wbs+xml",
      ".wbxml"     => "application/vnd.wap.wbxml",
      ".webm"      => "video/webm",
      ".webp"      => "image/webp",
      ".wm"        => "video/x-ms-wm",
      ".wma"       => "audio/x-ms-wma",
      ".wmd"       => "application/x-ms-wmd",
      ".wmf"       => "application/x-msmetafile",
      ".wml"       => "text/vnd.wap.wml",
      ".wmlc"      => "application/vnd.wap.wmlc",
      ".wmls"      => "text/vnd.wap.wmlscript",
      ".wmlsc"     => "application/vnd.wap.wmlscriptc",
      ".wmv"       => "video/x-ms-wmv",
      ".wmx"       => "video/x-ms-wmx",
      ".wmz"       => "application/x-ms-wmz",
      ".woff"      => "application/font-woff",
      ".woff2"     => "application/font-woff2",
      ".wpd"       => "application/vnd.wordperfect",
      ".wpl"       => "application/vnd.ms-wpl",
      ".wps"       => "application/vnd.ms-works",
      ".wqd"       => "application/vnd.wqd",
      ".wri"       => "application/x-mswrite",
      ".wrl"       => "model/vrml",
      ".wsdl"      => "application/wsdl+xml",
      ".wspolicy"  => "application/wspolicy+xml",
      ".wtb"       => "application/vnd.webturbo",
      ".wvx"       => "video/x-ms-wvx",
      ".x3d"       => "application/vnd.hzn-3d-crossword",
      ".xar"       => "application/vnd.xara",
      ".xbd"       => "application/vnd.fujixerox.docuworks.binder",
      ".xbm"       => "image/x-xbitmap",
      ".xdm"       => "application/vnd.syncml.dm+xml",
      ".xdp"       => "application/vnd.adobe.xdp+xml",
      ".xdw"       => "application/vnd.fujixerox.docuworks",
      ".xenc"      => "application/xenc+xml",
      ".xer"       => "application/patch-ops-error+xml",
      ".xfdf"      => "application/vnd.adobe.xfdf",
      ".xfdl"      => "application/vnd.xfdl",
      ".xhtml"     => "application/xhtml+xml",
      ".xif"       => "image/vnd.xiff",
      ".xla"       => "application/vnd.ms-excel",
      ".xlam"      => "application/vnd.ms-excel.addin.macroEnabled.12",
      ".xls"       => "application/vnd.ms-excel",
      ".xlsb"      => "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
      ".xlsx"      => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      ".xlsm"      => "application/vnd.ms-excel.sheet.macroEnabled.12",
      ".xlt"       => "application/vnd.ms-excel",
      ".xltx"      => "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
      ".xml"       => "application/xml",
      ".xo"        => "application/vnd.olpc-sugar",
      ".xop"       => "application/xop+xml",
      ".xpm"       => "image/x-xpixmap",
      ".xpr"       => "application/vnd.is-xpr",
      ".xps"       => "application/vnd.ms-xpsdocument",
      ".xpw"       => "application/vnd.intercon.formnet",
      ".xsl"       => "application/xml",
      ".xslt"      => "application/xslt+xml",
      ".xsm"       => "application/vnd.syncml+xml",
      ".xspf"      => "application/xspf+xml",
      ".xul"       => "application/vnd.mozilla.xul+xml",
      ".xwd"       => "image/x-xwindowdump",
      ".xyz"       => "chemical/x-xyz",
      ".yaml"      => "text/yaml",
      ".yml"       => "text/yaml",
      ".zaz"       => "application/vnd.zzazz.deck+xml",
      ".zip"       => "application/zip",
      ".zmm"       => "application/vnd.handheld-entertainment+xml",
    }
  end
end
PK*J[����9share/gems/gems/rack-3.0.8/lib/rack/auth/digest/params.rbnu�[���require_relative '../digest'
PK*J[����6share/gems/gems/rack-3.0.8/lib/rack/auth/digest/md5.rbnu�[���require_relative '../digest'
PK*J[����:share/gems/gems/rack-3.0.8/lib/rack/auth/digest/request.rbnu�[���require_relative '../digest'
PK*J[����8share/gems/gems/rack-3.0.8/lib/rack/auth/digest/nonce.rbnu�[���require_relative '../digest'
PK*J[l��GRR<share/gems/gems/rack-3.0.8/lib/rack/auth/abstract/handler.rbnu�[���# frozen_string_literal: true

require_relative '../../constants'

module Rack
  module Auth
    # Rack::Auth::AbstractHandler implements common authentication functionality.
    #
    # +realm+ should be set for all handlers.

    class AbstractHandler

      attr_accessor :realm

      def initialize(app, realm = nil, &authenticator)
        @app, @realm, @authenticator = app, realm, authenticator
      end


      private

      def unauthorized(www_authenticate = challenge)
        return [ 401,
          { CONTENT_TYPE => 'text/plain',
            CONTENT_LENGTH => '0',
            'www-authenticate' => www_authenticate.to_s },
          []
        ]
      end

      def bad_request
        return [ 400,
          { CONTENT_TYPE => 'text/plain',
            CONTENT_LENGTH => '0' },
          []
        ]
      end

    end
  end
end
PK*J[,��UU<share/gems/gems/rack-3.0.8/lib/rack/auth/abstract/request.rbnu�[���# frozen_string_literal: true

require_relative '../../request'

module Rack
  module Auth
    class AbstractRequest

      def initialize(env)
        @env = env
      end

      def request
        @request ||= Request.new(@env)
      end

      def provided?
        !authorization_key.nil? && valid?
      end

      def valid?
        !@env[authorization_key].nil?
      end

      def parts
        @parts ||= @env[authorization_key].split(' ', 2)
      end

      def scheme
        @scheme ||= parts.first&.downcase
      end

      def params
        @params ||= parts.last
      end


      private

      AUTHORIZATION_KEYS = ['HTTP_AUTHORIZATION', 'X-HTTP_AUTHORIZATION', 'X_HTTP_AUTHORIZATION']

      def authorization_key
        @authorization_key ||= AUTHORIZATION_KEYS.detect { |key| @env.has_key?(key) }
      end

    end

  end
end
PK*J[���

2share/gems/gems/rack-3.0.8/lib/rack/auth/digest.rbnu�[���# frozen_string_literal: true

require_relative 'abstract/handler'
require_relative 'abstract/request'
require 'digest/md5'
require 'base64'

module Rack
  warn "Rack::Auth::Digest is deprecated and will be removed in Rack 3.1", uplevel: 1

  module Auth
    module Digest
      # Rack::Auth::Digest::Nonce is the default nonce generator for the
      # Rack::Auth::Digest::MD5 authentication handler.
      #
      # +private_key+ needs to set to a constant string.
      #
      # +time_limit+ can be optionally set to an integer (number of seconds),
      # to limit the validity of the generated nonces.

      class Nonce

        class << self
          attr_accessor :private_key, :time_limit
        end

        def self.parse(string)
          new(*Base64.decode64(string).split(' ', 2))
        end

        def initialize(timestamp = Time.now, given_digest = nil)
          @timestamp, @given_digest = timestamp.to_i, given_digest
        end

        def to_s
          Base64.encode64("#{@timestamp} #{digest}").strip
        end

        def digest
          ::Digest::MD5.hexdigest("#{@timestamp}:#{self.class.private_key}")
        end

        def valid?
          digest == @given_digest
        end

        def stale?
          !self.class.time_limit.nil? && (Time.now.to_i - @timestamp) > self.class.time_limit
        end

        def fresh?
          !stale?
        end

      end

      class Params < Hash

        def self.parse(str)
          Params[*split_header_value(str).map do |param|
            k, v = param.split('=', 2)
            [k, dequote(v)]
          end.flatten]
        end

        def self.dequote(str) # From WEBrick::HTTPUtils
          ret = (/\A"(.*)"\Z/ =~ str) ? $1 : str.dup
          ret.gsub!(/\\(.)/, "\\1")
          ret
        end

        def self.split_header_value(str)
          str.scan(/\w+\=(?:"[^\"]+"|[^,]+)/n)
        end

        def initialize
          super()

          yield self if block_given?
        end

        def [](k)
          super k.to_s
        end

        def []=(k, v)
          super k.to_s, v.to_s
        end

        UNQUOTED = ['nc', 'stale']

        def to_s
          map do |k, v|
            "#{k}=#{(UNQUOTED.include?(k) ? v.to_s : quote(v))}"
          end.join(', ')
        end

        def quote(str) # From WEBrick::HTTPUtils
          '"' + str.gsub(/[\\\"]/o, "\\\1") + '"'
        end

      end

      class Request < Auth::AbstractRequest
        def method
          @env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] || @env[REQUEST_METHOD]
        end

        def digest?
          "digest" == scheme
        end

        def correct_uri?
          request.fullpath == uri
        end

        def nonce
          @nonce ||= Nonce.parse(params['nonce'])
        end

        def params
          @params ||= Params.parse(parts.last)
        end

        def respond_to?(sym, *)
          super or params.has_key? sym.to_s
        end

        def method_missing(sym, *args)
          return super unless params.has_key?(key = sym.to_s)
          return params[key] if args.size == 0
          raise ArgumentError, "wrong number of arguments (#{args.size} for 0)"
        end
      end

      # Rack::Auth::Digest::MD5 implements the MD5 algorithm version of
      # HTTP Digest Authentication, as per RFC 2617.
      #
      # Initialize with the [Rack] application that you want protecting,
      # and a block that looks up a plaintext password for a given username.
      #
      # +opaque+ needs to be set to a constant base64/hexadecimal string.
      #
      class MD5 < AbstractHandler

        attr_accessor :opaque

        attr_writer :passwords_hashed

        def initialize(app, realm = nil, opaque = nil, &authenticator)
          @passwords_hashed = nil
          if opaque.nil? and realm.respond_to? :values_at
            realm, opaque, @passwords_hashed = realm.values_at :realm, :opaque, :passwords_hashed
          end
          super(app, realm, &authenticator)
          @opaque = opaque
        end

        def passwords_hashed?
          !!@passwords_hashed
        end

        def call(env)
          auth = Request.new(env)

          unless auth.provided?
            return unauthorized
          end

          if !auth.digest? || !auth.correct_uri? || !valid_qop?(auth)
            return bad_request
          end

          if valid?(auth)
            if auth.nonce.stale?
              return unauthorized(challenge(stale: true))
            else
              env['REMOTE_USER'] = auth.username

              return @app.call(env)
            end
          end

          unauthorized
        end


        private

        QOP = 'auth'

        def params(hash = {})
          Params.new do |params|
            params['realm'] = realm
            params['nonce'] = Nonce.new.to_s
            params['opaque'] = H(opaque)
            params['qop'] = QOP

            hash.each { |k, v| params[k] = v }
          end
        end

        def challenge(hash = {})
          "Digest #{params(hash)}"
        end

        def valid?(auth)
          valid_opaque?(auth) && valid_nonce?(auth) && valid_digest?(auth)
        end

        def valid_qop?(auth)
          QOP == auth.qop
        end

        def valid_opaque?(auth)
          H(opaque) == auth.opaque
        end

        def valid_nonce?(auth)
          auth.nonce.valid?
        end

        def valid_digest?(auth)
          pw = @authenticator.call(auth.username)
          pw && Rack::Utils.secure_compare(digest(auth, pw), auth.response)
        end

        def md5(data)
          ::Digest::MD5.hexdigest(data)
        end

        alias :H :md5

        def KD(secret, data)
          H "#{secret}:#{data}"
        end

        def A1(auth, password)
          "#{auth.username}:#{auth.realm}:#{password}"
        end

        def A2(auth)
          "#{auth.method}:#{auth.uri}"
        end

        def digest(auth, password)
          password_hash = passwords_hashed? ? password : H(A1(auth, password))

          KD password_hash, "#{auth.nonce}:#{auth.nc}:#{auth.cnonce}:#{QOP}:#{H A2(auth)}"
        end

      end
    end
  end
end

PK*J[�����1share/gems/gems/rack-3.0.8/lib/rack/auth/basic.rbnu�[���# frozen_string_literal: true

require_relative 'abstract/handler'
require_relative 'abstract/request'
require 'base64'

module Rack
  module Auth
    # Rack::Auth::Basic implements HTTP Basic Authentication, as per RFC 2617.
    #
    # Initialize with the Rack application that you want protecting,
    # and a block that checks if a username and password pair are valid.

    class Basic < AbstractHandler

      def call(env)
        auth = Basic::Request.new(env)

        return unauthorized unless auth.provided?

        return bad_request unless auth.basic?

        if valid?(auth)
          env['REMOTE_USER'] = auth.username

          return @app.call(env)
        end

        unauthorized
      end


      private

      def challenge
        'Basic realm="%s"' % realm
      end

      def valid?(auth)
        @authenticator.call(*auth.credentials)
      end

      class Request < Auth::AbstractRequest
        def basic?
          "basic" == scheme && credentials.length == 2
        end

        def credentials
          @credentials ||= Base64.decode64(params).split(':', 2)
        end

        def username
          credentials.first
        end
      end

    end
  end
end
PK*J[�N�$$>share/gems/gems/rack-3.0.8/lib/rack/multipart/uploaded_file.rbnu�[���# frozen_string_literal: true

require 'tempfile'
require 'fileutils'

module Rack
  module Multipart
    class UploadedFile

      # The filename, *not* including the path, of the "uploaded" file
      attr_reader :original_filename

      # The content type of the "uploaded" file
      attr_accessor :content_type

      def initialize(filepath = nil, ct = "text/plain", bin = false,
                     path: filepath, content_type: ct, binary: bin, filename: nil, io: nil)
        if io
          @tempfile = io
          @original_filename = filename
        else
          raise "#{path} file does not exist" unless ::File.exist?(path)
          @original_filename = filename || ::File.basename(path)
          @tempfile = Tempfile.new([@original_filename, ::File.extname(path)], encoding: Encoding::BINARY)
          @tempfile.binmode if binary
          FileUtils.copy_file(path, @tempfile.path)
        end
        @content_type = content_type
      end

      def path
        @tempfile.path if @tempfile.respond_to?(:path)
      end
      alias_method :local_path, :path

      def respond_to?(*args)
        super or @tempfile.respond_to?(*args)
      end

      def method_missing(method_name, *args, &block) #:nodoc:
        @tempfile.__send__(method_name, *args, &block)
      end
    end
  end
end
PK*J[��&�4�47share/gems/gems/rack-3.0.8/lib/rack/multipart/parser.rbnu�[���# frozen_string_literal: true

require 'strscan'

require_relative '../utils'

module Rack
  module Multipart
    class MultipartPartLimitError < Errno::EMFILE; end

    class MultipartTotalPartLimitError < StandardError; end

    # Use specific error class when parsing multipart request
    # that ends early.
    class EmptyContentError < ::EOFError; end

    # Base class for multipart exceptions that do not subclass from
    # other exception classes for backwards compatibility.
    class Error < StandardError; end

    EOL = "\r\n"
    MULTIPART = %r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni
    TOKEN = /[^\s()<>,;:\\"\/\[\]?=]+/
    CONDISP = /Content-Disposition:\s*#{TOKEN}\s*/i
    VALUE = /"(?:\\"|[^"])*"|#{TOKEN}/
    BROKEN = /^#{CONDISP}.*;\s*filename=(#{VALUE})/i
    MULTIPART_CONTENT_TYPE = /Content-Type: (.*)#{EOL}/ni
    MULTIPART_CONTENT_DISPOSITION = /Content-Disposition:[^:]*;\s*name=(#{VALUE})/ni
    MULTIPART_CONTENT_ID = /Content-ID:\s*([^#{EOL}]*)/ni
    # Updated definitions from RFC 2231
    ATTRIBUTE_CHAR = %r{[^ \x00-\x1f\x7f)(><@,;:\\"/\[\]?='*%]}
    ATTRIBUTE = /#{ATTRIBUTE_CHAR}+/
    SECTION = /\*[0-9]+/
    REGULAR_PARAMETER_NAME = /#{ATTRIBUTE}#{SECTION}?/
    REGULAR_PARAMETER = /(#{REGULAR_PARAMETER_NAME})=(#{VALUE})/
    EXTENDED_OTHER_NAME = /#{ATTRIBUTE}\*[1-9][0-9]*\*/
    EXTENDED_OTHER_VALUE = /%[0-9a-fA-F]{2}|#{ATTRIBUTE_CHAR}/
    EXTENDED_OTHER_PARAMETER = /(#{EXTENDED_OTHER_NAME})=(#{EXTENDED_OTHER_VALUE}*)/
    EXTENDED_INITIAL_NAME = /#{ATTRIBUTE}(?:\*0)?\*/
    EXTENDED_INITIAL_VALUE = /[a-zA-Z0-9\-]*'[a-zA-Z0-9\-]*'#{EXTENDED_OTHER_VALUE}*/
    EXTENDED_INITIAL_PARAMETER = /(#{EXTENDED_INITIAL_NAME})=(#{EXTENDED_INITIAL_VALUE})/
    EXTENDED_PARAMETER = /#{EXTENDED_INITIAL_PARAMETER}|#{EXTENDED_OTHER_PARAMETER}/
    DISPPARM = /;\s*(?:#{REGULAR_PARAMETER}|#{EXTENDED_PARAMETER})\s*/
    RFC2183 = /^#{CONDISP}(#{DISPPARM})+$/i

    class Parser
      BUFSIZE = 1_048_576
      TEXT_PLAIN = "text/plain"
      TEMPFILE_FACTORY = lambda { |filename, content_type|
        Tempfile.new(["RackMultipart", ::File.extname(filename.gsub("\0", '%00'))])
      }

      class BoundedIO # :nodoc:
        def initialize(io, content_length)
          @io             = io
          @content_length = content_length
          @cursor = 0
        end

        def read(size, outbuf = nil)
          return if @cursor >= @content_length

          left = @content_length - @cursor

          str = if left < size
                  @io.read left, outbuf
                else
                  @io.read size, outbuf
                end

          if str
            @cursor += str.bytesize
          else
            # Raise an error for mismatching content-length and actual contents
            raise EOFError, "bad content body"
          end

          str
        end
      end

      MultipartInfo = Struct.new :params, :tmp_files
      EMPTY         = MultipartInfo.new(nil, [])

      def self.parse_boundary(content_type)
        return unless content_type
        data = content_type.match(MULTIPART)
        return unless data
        data[1]
      end

      def self.parse(io, content_length, content_type, tmpfile, bufsize, qp)
        return EMPTY if 0 == content_length

        boundary = parse_boundary content_type
        return EMPTY unless boundary

        if boundary.length > 70
          # RFC 1521 Section 7.2.1 imposes a 70 character maximum for the boundary.
          # Most clients use no more than 55 characters.
          raise Error, "multipart boundary size too large (#{boundary.length} characters)"
        end

        io = BoundedIO.new(io, content_length) if content_length

        parser = new(boundary, tmpfile, bufsize, qp)
        parser.parse(io)

        parser.result
      end

      class Collector
        class MimePart < Struct.new(:body, :head, :filename, :content_type, :name)
          def get_data
            data = body
            if filename == ""
              # filename is blank which means no file has been selected
              return
            elsif filename
              body.rewind if body.respond_to?(:rewind)

              # Take the basename of the upload's original filename.
              # This handles the full Windows paths given by Internet Explorer
              # (and perhaps other broken user agents) without affecting
              # those which give the lone filename.
              fn = filename.split(/[\/\\]/).last

              data = { filename: fn, type: content_type,
                      name: name, tempfile: body, head: head }
            end

            yield data
          end
        end

        class BufferPart < MimePart
          def file?; false; end
          def close; end
        end

        class TempfilePart < MimePart
          def file?; true; end
          def close; body.close; end
        end

        include Enumerable

        def initialize(tempfile)
          @tempfile = tempfile
          @mime_parts = []
          @open_files = 0
        end

        def each
          @mime_parts.each { |part| yield part }
        end

        def on_mime_head(mime_index, head, filename, content_type, name)
          if filename
            body = @tempfile.call(filename, content_type)
            body.binmode if body.respond_to?(:binmode)
            klass = TempfilePart
            @open_files += 1
          else
            body = String.new
            klass = BufferPart
          end

          @mime_parts[mime_index] = klass.new(body, head, filename, content_type, name)

          check_part_limits
        end

        def on_mime_body(mime_index, content)
          @mime_parts[mime_index].body << content
        end

        def on_mime_finish(mime_index)
        end

        private

        def check_part_limits
          file_limit = Utils.multipart_file_limit
          part_limit = Utils.multipart_total_part_limit

          if file_limit && file_limit > 0
            if @open_files >= file_limit
              @mime_parts.each(&:close)
              raise MultipartPartLimitError, 'Maximum file multiparts in content reached'
            end
          end

          if part_limit && part_limit > 0
            if @mime_parts.size >= part_limit
              @mime_parts.each(&:close)
              raise MultipartTotalPartLimitError, 'Maximum total multiparts in content reached'
            end
          end
        end
      end

      attr_reader :state

      def initialize(boundary, tempfile, bufsize, query_parser)
        @query_parser   = query_parser
        @params         = query_parser.make_params
        @bufsize        = bufsize

        @state = :FAST_FORWARD
        @mime_index = 0
        @collector = Collector.new tempfile

        @sbuf = StringScanner.new("".dup)
        @body_regex = /(?:#{EOL}|\A)--#{Regexp.quote(boundary)}(?:#{EOL}|--)/m
        @rx_max_size = boundary.bytesize + 6 # (\r\n-- at start, either \r\n or -- at finish)
        @head_regex = /(.*?#{EOL})#{EOL}/m
      end

      def parse(io)
        outbuf = String.new
        read_data(io, outbuf)

        loop do
          status =
            case @state
            when :FAST_FORWARD
              handle_fast_forward
            when :CONSUME_TOKEN
              handle_consume_token
            when :MIME_HEAD
              handle_mime_head
            when :MIME_BODY
              handle_mime_body
            else # when :DONE
              return
            end

          read_data(io, outbuf) if status == :want_read
        end
      end

      def result
        @collector.each do |part|
          part.get_data do |data|
            tag_multipart_encoding(part.filename, part.content_type, part.name, data)
            @query_parser.normalize_params(@params, part.name, data)
          end
        end
        MultipartInfo.new @params.to_params_hash, @collector.find_all(&:file?).map(&:body)
      end

      private

      def dequote(str) # From WEBrick::HTTPUtils
        ret = (/\A"(.*)"\Z/ =~ str) ? $1 : str.dup
        ret.gsub!(/\\(.)/, "\\1")
        ret
      end

      def read_data(io, outbuf)
        content = io.read(@bufsize, outbuf)
        handle_empty_content!(content)
        @sbuf.concat(content)
      end

      # This handles the initial parser state.  We read until we find the starting
      # boundary, then we can transition to the next state. If we find the ending
      # boundary, this is an invalid multipart upload, but keep scanning for opening
      # boundary in that case. If no boundary found, we need to keep reading data
      # and retry. It's highly unlikely the initial read will not consume the
      # boundary.  The client would have to deliberately craft a response
      # with the opening boundary beyond the buffer size for that to happen.
      def handle_fast_forward
        while true
          case consume_boundary
          when :BOUNDARY
            # found opening boundary, transition to next state
            @state = :MIME_HEAD
            return
          when :END_BOUNDARY
            # invalid multipart upload, but retry for opening boundary
          else
            # no boundary found, keep reading data
            return :want_read
          end
        end
      end

      def handle_consume_token
        tok = consume_boundary
        # break if we're at the end of a buffer, but not if it is the end of a field
        @state = if tok == :END_BOUNDARY || (@sbuf.eos? && tok != :BOUNDARY)
          :DONE
        else
          :MIME_HEAD
        end
      end

      def handle_mime_head
        if @sbuf.scan_until(@head_regex)
          head = @sbuf[1]
          content_type = head[MULTIPART_CONTENT_TYPE, 1]
          if name = head[MULTIPART_CONTENT_DISPOSITION, 1]
            name = dequote(name)
          else
            name = head[MULTIPART_CONTENT_ID, 1]
          end

          filename = get_filename(head)

          if name.nil? || name.empty?
            name = filename || "#{content_type || TEXT_PLAIN}[]".dup
          end

          @collector.on_mime_head @mime_index, head, filename, content_type, name
          @state = :MIME_BODY
        else
          :want_read
        end
      end

      def handle_mime_body
        if (body_with_boundary = @sbuf.check_until(@body_regex)) # check but do not advance the pointer yet
          body = body_with_boundary.sub(/#{@body_regex}\z/m, '') # remove the boundary from the string
          @collector.on_mime_body @mime_index, body
          @sbuf.pos += body.length + 2 # skip \r\n after the content
          @state = :CONSUME_TOKEN
          @mime_index += 1
        else
          # Save what we have so far
          if @rx_max_size < @sbuf.rest_size
            delta = @sbuf.rest_size - @rx_max_size
            @collector.on_mime_body @mime_index, @sbuf.peek(delta)
            @sbuf.pos += delta
            @sbuf.string = @sbuf.rest
          end
          :want_read
        end
      end

      # Scan until the we find the start or end of the boundary.
      # If we find it, return the appropriate symbol for the start or
      # end of the boundary.  If we don't find the start or end of the
      # boundary, clear the buffer and return nil.
      def consume_boundary
        if read_buffer = @sbuf.scan_until(@body_regex)
          read_buffer.end_with?(EOL) ? :BOUNDARY : :END_BOUNDARY
        else
          @sbuf.terminate
          nil
        end
      end

      def get_filename(head)
        filename = nil
        case head
        when RFC2183
          params = Hash[*head.scan(DISPPARM).flat_map(&:compact)]

          if filename = params['filename*']
            encoding, _, filename = filename.split("'", 3)
          elsif filename = params['filename']
            filename = $1 if filename =~ /^"(.*)"$/
          end
        when BROKEN
          filename = $1
          filename = $1 if filename =~ /^"(.*)"$/
        end

        return unless filename

        if filename.scan(/%.?.?/).all? { |s| /%[0-9a-fA-F]{2}/.match?(s) }
          filename = Utils.unescape_path(filename)
        end

        filename.scrub!

        if filename !~ /\\[^\\"]/
          filename = filename.gsub(/\\(.)/, '\1')
        end

        if encoding
          filename.force_encoding ::Encoding.find(encoding)
        end

        filename
      end

      CHARSET = "charset"
      deprecate_constant :CHARSET

      def tag_multipart_encoding(filename, content_type, name, body)
        name = name.to_s
        encoding = Encoding::UTF_8

        name.force_encoding(encoding)

        return if filename

        if content_type
          list         = content_type.split(';')
          type_subtype = list.first
          type_subtype.strip!
          if TEXT_PLAIN == type_subtype
            rest = list.drop 1
            rest.each do |param|
              k, v = param.split('=', 2)
              k.strip!
              v.strip!
              v = v[1..-2] if v.start_with?('"') && v.end_with?('"')
              if k == "charset"
                encoding = begin
                  Encoding.find v
                rescue ArgumentError
                  Encoding::BINARY
                end
              end
            end
          end
        end

        name.force_encoding(encoding)
        body.force_encoding(encoding)
      end

      def handle_empty_content!(content)
        if content.nil? || content.empty?
          raise EmptyContentError
        end
      end
    end
  end
end
PK*J[��l�	�	:share/gems/gems/rack-3.0.8/lib/rack/multipart/generator.rbnu�[���# frozen_string_literal: true

require_relative 'uploaded_file'

module Rack
  module Multipart
    class Generator
      def initialize(params, first = true)
        @params, @first = params, first

        if @first && !@params.is_a?(Hash)
          raise ArgumentError, "value must be a Hash"
        end
      end

      def dump
        return nil if @first && !multipart?
        return flattened_params unless @first

        flattened_params.map do |name, file|
          if file.respond_to?(:original_filename)
            if file.path
              ::File.open(file.path, 'rb') do |f|
                f.set_encoding(Encoding::BINARY)
                content_for_tempfile(f, file, name)
              end
            else
              content_for_tempfile(file, file, name)
            end
          else
            content_for_other(file, name)
          end
        end.join << "--#{MULTIPART_BOUNDARY}--\r"
      end

      private
      def multipart?
        query = lambda { |value|
          case value
          when Array
            value.any?(&query)
          when Hash
            value.values.any?(&query)
          when Rack::Multipart::UploadedFile
            true
          end
        }

        @params.values.any?(&query)
      end

      def flattened_params
        @flattened_params ||= begin
          h = Hash.new
          @params.each do |key, value|
            k = @first ? key.to_s : "[#{key}]"

            case value
            when Array
              value.map { |v|
                Multipart.build_multipart(v, false).each { |subkey, subvalue|
                  h["#{k}[]#{subkey}"] = subvalue
                }
              }
            when Hash
              Multipart.build_multipart(value, false).each { |subkey, subvalue|
                h[k + subkey] = subvalue
              }
            else
              h[k] = value
            end
          end
          h
        end
      end

      def content_for_tempfile(io, file, name)
        length = ::File.stat(file.path).size if file.path
        filename = "; filename=\"#{Utils.escape_path(file.original_filename)}\""
<<-EOF
--#{MULTIPART_BOUNDARY}\r
content-disposition: form-data; name="#{name}"#{filename}\r
content-type: #{file.content_type}\r
#{"content-length: #{length}\r\n" if length}\r
#{io.read}\r
EOF
      end

      def content_for_other(file, name)
<<-EOF
--#{MULTIPART_BOUNDARY}\r
content-disposition: form-data; name="#{name}"\r
\r
#{file}\r
EOF
      end
    end
  end
end
PK*J[N4q���3share/gems/gems/rack-3.0.8/lib/rack/content_type.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

module Rack

  # Sets the content-type header on responses which don't have one.
  #
  # Builder Usage:
  #   use Rack::ContentType, "text/plain"
  #
  # When no content type argument is provided, "text/html" is the
  # default.
  class ContentType
    include Rack::Utils

    def initialize(app, content_type = "text/html")
      @app = app
      @content_type = content_type
    end

    def call(env)
      status, headers, _ = response = @app.call(env)

      unless STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i)
        headers[CONTENT_TYPE] ||= @content_type
      end

      response
    end
  end
end
PK*J[��՝[�[�+share/gems/gems/rack-3.0.8/lib/rack/lint.rbnuȯ��# frozen_string_literal: true

require 'forwardable'

require_relative 'constants'
require_relative 'utils'

module Rack
  # Rack::Lint validates your application and the requests and
  # responses according to the Rack spec.

  class Lint
    def initialize(app)
      @app = app
    end

    # :stopdoc:

    class LintError < RuntimeError; end
    # AUTHORS: n.b. The trailing whitespace between paragraphs is important and
    # should not be removed. The whitespace creates paragraphs in the RDoc
    # output.
    #
    ## This specification aims to formalize the Rack protocol. You
    ## can (and should) use Rack::Lint to enforce it.
    ##
    ## When you develop middleware, be sure to add a Lint before and
    ## after to catch all mistakes.
    ##
    ## = Rack applications
    ##
    ## A Rack application is a Ruby object (not a class) that
    ## responds to +call+.
    def call(env = nil)
      Wrapper.new(@app, env).response
    end

    class Wrapper
      def initialize(app, env)
        @app = app
        @env = env
        @response = nil
        @head_request = false

        @status = nil
        @headers = nil
        @body = nil
        @invoked = nil
        @content_length = nil
        @closed = false
        @size = 0
      end

      def response
        ## It takes exactly one argument, the *environment*
        raise LintError, "No env given" unless @env
        check_environment(@env)

        @env[RACK_INPUT] = InputWrapper.new(@env[RACK_INPUT])
        @env[RACK_ERRORS] = ErrorWrapper.new(@env[RACK_ERRORS])

        ## and returns a non-frozen Array of exactly three values:
        @response = @app.call(@env)
        raise LintError, "response is not an Array, but #{@response.class}" unless @response.kind_of? Array
        raise LintError, "response is frozen" if @response.frozen?
        raise LintError, "response array has #{@response.size} elements instead of 3" unless @response.size == 3

        @status, @headers, @body = @response
        ## The *status*,
        check_status(@status)

        ## the *headers*,
        check_headers(@headers)

        hijack_proc = check_hijack_response(@headers, @env)
        if hijack_proc
          @headers[RACK_HIJACK] = hijack_proc
        end

        ## and the *body*.
        check_content_type(@status, @headers)
        check_content_length(@status, @headers)
        @head_request = @env[REQUEST_METHOD] == HEAD

        @lint = (@env['rack.lint'] ||= []) << self

        if (@env['rack.lint.body_iteration'] ||= 0) > 0
          raise LintError, "Middleware must not call #each directly"
        end

        return [@status, @headers, self]
      end

      ##
      ## == The Environment
      ##
      def check_environment(env)
        ## The environment must be an unfrozen instance of Hash that includes
        ## CGI-like headers. The Rack application is free to modify the
        ## environment.
        raise LintError, "env #{env.inspect} is not a Hash, but #{env.class}" unless env.kind_of? Hash
        raise LintError, "env should not be frozen, but is" if env.frozen?

        ##
        ## The environment is required to include these variables
        ## (adopted from {PEP 333}[https://peps.python.org/pep-0333/]), except when they'd be empty, but see
        ## below.

        ## <tt>REQUEST_METHOD</tt>:: The HTTP request method, such as
        ##                           "GET" or "POST". This cannot ever
        ##                           be an empty string, and so is
        ##                           always required.

        ## <tt>SCRIPT_NAME</tt>:: The initial portion of the request
        ##                        URL's "path" that corresponds to the
        ##                        application object, so that the
        ##                        application knows its virtual
        ##                        "location". This may be an empty
        ##                        string, if the application corresponds
        ##                        to the "root" of the server.

        ## <tt>PATH_INFO</tt>:: The remainder of the request URL's
        ##                      "path", designating the virtual
        ##                      "location" of the request's target
        ##                      within the application. This may be an
        ##                      empty string, if the request URL targets
        ##                      the application root and does not have a
        ##                      trailing slash. This value may be
        ##                      percent-encoded when originating from
        ##                      a URL.

        ## <tt>QUERY_STRING</tt>:: The portion of the request URL that
        ##                         follows the <tt>?</tt>, if any. May be
        ##                         empty, but is always required!

        ## <tt>SERVER_NAME</tt>:: When combined with <tt>SCRIPT_NAME</tt> and
        ##                        <tt>PATH_INFO</tt>, these variables can be
        ##                        used to complete the URL. Note, however,
        ##                        that <tt>HTTP_HOST</tt>, if present,
        ##                        should be used in preference to
        ##                        <tt>SERVER_NAME</tt> for reconstructing
        ##                        the request URL.
        ##                        <tt>SERVER_NAME</tt> can never be an empty
        ##                        string, and so is always required.

        ## <tt>SERVER_PORT</tt>:: An optional +Integer+ which is the port the
        ##                        server is running on. Should be specified if
        ##                        the server is running on a non-standard port.

        ## <tt>SERVER_PROTOCOL</tt>:: A string representing the HTTP version used
        ##                            for the request.

        ## <tt>HTTP_</tt> Variables:: Variables corresponding to the
        ##                            client-supplied HTTP request
        ##                            headers (i.e., variables whose
        ##                            names begin with <tt>HTTP_</tt>). The
        ##                            presence or absence of these
        ##                            variables should correspond with
        ##                            the presence or absence of the
        ##                            appropriate HTTP header in the
        ##                            request. See
        ##                            {RFC3875 section 4.1.18}[https://tools.ietf.org/html/rfc3875#section-4.1.18]
        ##                            for specific behavior.

        ## In addition to this, the Rack environment must include these
        ## Rack-specific variables:

        ## <tt>rack.url_scheme</tt>:: +http+ or +https+, depending on the
        ##                            request URL.

        ## <tt>rack.input</tt>:: See below, the input stream.

        ## <tt>rack.errors</tt>:: See below, the error stream.

        ## <tt>rack.hijack?</tt>:: See below, if present and true, indicates
        ##                         that the server supports partial hijacking.

        ## <tt>rack.hijack</tt>:: See below, if present, an object responding
        ##                        to +call+ that is used to perform a full
        ##                        hijack.

        ## Additional environment specifications have approved to
        ## standardized middleware APIs. None of these are required to
        ## be implemented by the server.

        ## <tt>rack.session</tt>:: A hash-like interface for storing
        ##                         request session data.
        ##                         The store must implement:
        if session = env[RACK_SESSION]
          ##                         store(key, value)         (aliased as []=);
          unless session.respond_to?(:store) && session.respond_to?(:[]=)
            raise LintError, "session #{session.inspect} must respond to store and []="
          end

          ##                         fetch(key, default = nil) (aliased as []);
          unless session.respond_to?(:fetch) && session.respond_to?(:[])
            raise LintError, "session #{session.inspect} must respond to fetch and []"
          end

          ##                         delete(key);
          unless session.respond_to?(:delete)
            raise LintError, "session #{session.inspect} must respond to delete"
          end

          ##                         clear;
          unless session.respond_to?(:clear)
            raise LintError, "session #{session.inspect} must respond to clear"
          end

          ##                         to_hash (returning unfrozen Hash instance);
          unless session.respond_to?(:to_hash) && session.to_hash.kind_of?(Hash) && !session.to_hash.frozen?
            raise LintError, "session #{session.inspect} must respond to to_hash and return unfrozen Hash instance"
          end
        end

        ## <tt>rack.logger</tt>:: A common object interface for logging messages.
        ##                        The object must implement:
        if logger = env[RACK_LOGGER]
          ##                         info(message, &block)
          unless logger.respond_to?(:info)
            raise LintError, "logger #{logger.inspect} must respond to info"
          end

          ##                         debug(message, &block)
          unless logger.respond_to?(:debug)
            raise LintError, "logger #{logger.inspect} must respond to debug"
          end

          ##                         warn(message, &block)
          unless logger.respond_to?(:warn)
            raise LintError, "logger #{logger.inspect} must respond to warn"
          end

          ##                         error(message, &block)
          unless logger.respond_to?(:error)
            raise LintError, "logger #{logger.inspect} must respond to error"
          end

          ##                         fatal(message, &block)
          unless logger.respond_to?(:fatal)
            raise LintError, "logger #{logger.inspect} must respond to fatal"
          end
        end

        ## <tt>rack.multipart.buffer_size</tt>:: An Integer hint to the multipart parser as to what chunk size to use for reads and writes.
        if bufsize = env[RACK_MULTIPART_BUFFER_SIZE]
          unless bufsize.is_a?(Integer) && bufsize > 0
            raise LintError, "rack.multipart.buffer_size must be an Integer > 0 if specified"
          end
        end

        ## <tt>rack.multipart.tempfile_factory</tt>:: An object responding to #call with two arguments, the filename and content_type given for the multipart form field, and returning an IO-like object that responds to #<< and optionally #rewind. This factory will be used to instantiate the tempfile for each multipart form file upload field, rather than the default class of Tempfile.
        if tempfile_factory = env[RACK_MULTIPART_TEMPFILE_FACTORY]
          raise LintError, "rack.multipart.tempfile_factory must respond to #call" unless tempfile_factory.respond_to?(:call)
          env[RACK_MULTIPART_TEMPFILE_FACTORY] = lambda do |filename, content_type|
            io = tempfile_factory.call(filename, content_type)
            raise LintError, "rack.multipart.tempfile_factory return value must respond to #<<" unless io.respond_to?(:<<)
            io
          end
        end

        ## The server or the application can store their own data in the
        ## environment, too.  The keys must contain at least one dot,
        ## and should be prefixed uniquely.  The prefix <tt>rack.</tt>
        ## is reserved for use with the Rack core distribution and other
        ## accepted specifications and must not be used otherwise.
        ##

        %w[REQUEST_METHOD SERVER_NAME QUERY_STRING SERVER_PROTOCOL
           rack.input rack.errors].each { |header|
          raise LintError, "env missing required key #{header}" unless env.include? header
        }

        ## The <tt>SERVER_PORT</tt> must be an Integer if set.
        server_port = env["SERVER_PORT"]
        unless server_port.nil? || (Integer(server_port) rescue false)
          raise LintError, "env[SERVER_PORT] is not an Integer"
        end

        ## The <tt>SERVER_NAME</tt> must be a valid authority as defined by RFC7540.
        unless (URI.parse("http://#{env[SERVER_NAME]}/") rescue false)
          raise LintError, "#{env[SERVER_NAME]} must be a valid authority"
        end

        ## The <tt>HTTP_HOST</tt> must be a valid authority as defined by RFC7540.
        unless (URI.parse("http://#{env[HTTP_HOST]}/") rescue false)
          raise LintError, "#{env[HTTP_HOST]} must be a valid authority"
        end

        ## The <tt>SERVER_PROTOCOL</tt> must match the regexp <tt>HTTP/\d(\.\d)?</tt>.
        server_protocol = env['SERVER_PROTOCOL']
        unless %r{HTTP/\d(\.\d)?}.match?(server_protocol)
          raise LintError, "env[SERVER_PROTOCOL] does not match HTTP/\\d(\\.\\d)?"
        end

        ## If the <tt>HTTP_VERSION</tt> is present, it must equal the <tt>SERVER_PROTOCOL</tt>.
        if env['HTTP_VERSION'] && env['HTTP_VERSION'] != server_protocol
          raise LintError, "env[HTTP_VERSION] does not equal env[SERVER_PROTOCOL]"
        end

        ## The environment must not contain the keys
        ## <tt>HTTP_CONTENT_TYPE</tt> or <tt>HTTP_CONTENT_LENGTH</tt>
        ## (use the versions without <tt>HTTP_</tt>).
        %w[HTTP_CONTENT_TYPE HTTP_CONTENT_LENGTH].each { |header|
          if env.include? header
            raise LintError, "env contains #{header}, must use #{header[5..-1]}"
          end
        }

        ## The CGI keys (named without a period) must have String values.
        ## If the string values for CGI keys contain non-ASCII characters,
        ## they should use ASCII-8BIT encoding.
        env.each { |key, value|
          next  if key.include? "."   # Skip extensions
          unless value.kind_of? String
            raise LintError, "env variable #{key} has non-string value #{value.inspect}"
          end
          next if value.encoding == Encoding::ASCII_8BIT
          unless value.b !~ /[\x80-\xff]/n
            raise LintError, "env variable #{key} has value containing non-ASCII characters and has non-ASCII-8BIT encoding #{value.inspect} encoding: #{value.encoding}"
          end
        }

        ## There are the following restrictions:

        ## * <tt>rack.url_scheme</tt> must either be +http+ or +https+.
        unless %w[http https].include?(env[RACK_URL_SCHEME])
          raise LintError, "rack.url_scheme unknown: #{env[RACK_URL_SCHEME].inspect}"
        end

        ## * There must be a valid input stream in <tt>rack.input</tt>.
        check_input env[RACK_INPUT]
        ## * There must be a valid error stream in <tt>rack.errors</tt>.
        check_error env[RACK_ERRORS]
        ## * There may be a valid hijack callback in <tt>rack.hijack</tt>
        check_hijack env

        ## * The <tt>REQUEST_METHOD</tt> must be a valid token.
        unless env[REQUEST_METHOD] =~ /\A[0-9A-Za-z!\#$%&'*+.^_`|~-]+\z/
          raise LintError, "REQUEST_METHOD unknown: #{env[REQUEST_METHOD].dump}"
        end

        ## * The <tt>SCRIPT_NAME</tt>, if non-empty, must start with <tt>/</tt>
        if env.include?(SCRIPT_NAME) && env[SCRIPT_NAME] != "" && env[SCRIPT_NAME] !~ /\A\//
          raise LintError, "SCRIPT_NAME must start with /"
        end
        ## * The <tt>PATH_INFO</tt>, if non-empty, must start with <tt>/</tt>
        if env.include?(PATH_INFO) && env[PATH_INFO] != "" && env[PATH_INFO] !~ /\A\//
          raise LintError, "PATH_INFO must start with /"
        end
        ## * The <tt>CONTENT_LENGTH</tt>, if given, must consist of digits only.
        if env.include?("CONTENT_LENGTH") && env["CONTENT_LENGTH"] !~ /\A\d+\z/
          raise LintError, "Invalid CONTENT_LENGTH: #{env["CONTENT_LENGTH"]}"
        end

        ## * One of <tt>SCRIPT_NAME</tt> or <tt>PATH_INFO</tt> must be
        ##   set. <tt>PATH_INFO</tt> should be <tt>/</tt> if
        ##   <tt>SCRIPT_NAME</tt> is empty.
        unless env[SCRIPT_NAME] || env[PATH_INFO]
          raise LintError, "One of SCRIPT_NAME or PATH_INFO must be set (make PATH_INFO '/' if SCRIPT_NAME is empty)"
        end
        ##   <tt>SCRIPT_NAME</tt> never should be <tt>/</tt>, but instead be empty.
        unless env[SCRIPT_NAME] != "/"
          raise LintError, "SCRIPT_NAME cannot be '/', make it '' and PATH_INFO '/'"
        end

        ## <tt>rack.response_finished</tt>:: An array of callables run by the server after the response has been
        ## processed. This would typically be invoked after sending the response to the client, but it could also be
        ## invoked if an error occurs while generating the response or sending the response; in that case, the error
        ## argument will be a subclass of +Exception+.
        ## The callables are invoked with +env, status, headers, error+ arguments and should not raise any
        ## exceptions. They should be invoked in reverse order of registration.
        if callables = env[RACK_RESPONSE_FINISHED]
          raise LintError, "rack.response_finished must be an array of callable objects" unless callables.is_a?(Array)

          callables.each do |callable|
            raise LintError, "rack.response_finished values must respond to call(env, status, headers, error)" unless callable.respond_to?(:call)
          end
        end
      end

      ##
      ## === The Input Stream
      ##
      ## The input stream is an IO-like object which contains the raw HTTP
      ## POST data.
      def check_input(input)
        ## When applicable, its external encoding must be "ASCII-8BIT" and it
        ## must be opened in binary mode, for Ruby 1.9 compatibility.
        if input.respond_to?(:external_encoding) && input.external_encoding != Encoding::ASCII_8BIT
          raise LintError, "rack.input #{input} does not have ASCII-8BIT as its external encoding"
        end
        if input.respond_to?(:binmode?) && !input.binmode?
          raise LintError, "rack.input #{input} is not opened in binary mode"
        end

        ## The input stream must respond to +gets+, +each+, and +read+.
        [:gets, :each, :read].each { |method|
          unless input.respond_to? method
            raise LintError, "rack.input #{input} does not respond to ##{method}"
          end
        }
      end

      class InputWrapper
        def initialize(input)
          @input = input
        end

        ## * +gets+ must be called without arguments and return a string,
        ##   or +nil+ on EOF.
        def gets(*args)
          raise LintError, "rack.input#gets called with arguments" unless args.size == 0
          v = @input.gets
          unless v.nil? or v.kind_of? String
            raise LintError, "rack.input#gets didn't return a String"
          end
          v
        end

        ## * +read+ behaves like IO#read.
        ##   Its signature is <tt>read([length, [buffer]])</tt>.
        ##
        ##   If given, +length+ must be a non-negative Integer (>= 0) or +nil+,
        ##   and +buffer+ must be a String and may not be nil.
        ##
        ##   If +length+ is given and not nil, then this method reads at most
        ##   +length+ bytes from the input stream.
        ##
        ##   If +length+ is not given or nil, then this method reads
        ##   all data until EOF.
        ##
        ##   When EOF is reached, this method returns nil if +length+ is given
        ##   and not nil, or "" if +length+ is not given or is nil.
        ##
        ##   If +buffer+ is given, then the read data will be placed
        ##   into +buffer+ instead of a newly created String object.
        def read(*args)
          unless args.size <= 2
            raise LintError, "rack.input#read called with too many arguments"
          end
          if args.size >= 1
            unless args.first.kind_of?(Integer) || args.first.nil?
              raise LintError, "rack.input#read called with non-integer and non-nil length"
            end
            unless args.first.nil? || args.first >= 0
              raise LintError, "rack.input#read called with a negative length"
            end
          end
          if args.size >= 2
            unless args[1].kind_of?(String)
              raise LintError, "rack.input#read called with non-String buffer"
            end
          end

          v = @input.read(*args)

          unless v.nil? or v.kind_of? String
            raise LintError, "rack.input#read didn't return nil or a String"
          end
          if args[0].nil?
            unless !v.nil?
              raise LintError, "rack.input#read(nil) returned nil on EOF"
            end
          end

          v
        end

        ## * +each+ must be called without arguments and only yield Strings.
        def each(*args)
          raise LintError, "rack.input#each called with arguments" unless args.size == 0
          @input.each { |line|
            unless line.kind_of? String
              raise LintError, "rack.input#each didn't yield a String"
            end
            yield line
          }
        end

        ## * +close+ can be called on the input stream to indicate that the
        ## any remaining input is not needed.
        def close(*args)
          @input.close(*args)
        end
      end

      ##
      ## === The Error Stream
      ##
      def check_error(error)
        ## The error stream must respond to +puts+, +write+ and +flush+.
        [:puts, :write, :flush].each { |method|
          unless error.respond_to? method
            raise LintError, "rack.error #{error} does not respond to ##{method}"
          end
        }
      end

      class ErrorWrapper
        def initialize(error)
          @error = error
        end

        ## * +puts+ must be called with a single argument that responds to +to_s+.
        def puts(str)
          @error.puts str
        end

        ## * +write+ must be called with a single argument that is a String.
        def write(str)
          raise LintError, "rack.errors#write not called with a String" unless str.kind_of? String
          @error.write str
        end

        ## * +flush+ must be called without arguments and must be called
        ##   in order to make the error appear for sure.
        def flush
          @error.flush
        end

        ## * +close+ must never be called on the error stream.
        def close(*args)
          raise LintError, "rack.errors#close must not be called"
        end
      end

      ##
      ## === Hijacking
      ##
      ## The hijacking interfaces provides a means for an application to take
      ## control of the HTTP connection. There are two distinct hijack
      ## interfaces: full hijacking where the application takes over the raw
      ## connection, and partial hijacking where the application takes over
      ## just the response body stream. In both cases, the application is
      ## responsible for closing the hijacked stream.
      ##
      ## Full hijacking only works with HTTP/1. Partial hijacking is functionally
      ## equivalent to streaming bodies, and is still optionally supported for
      ## backwards compatibility with older Rack versions.
      ##
      ## ==== Full Hijack
      ##
      ## Full hijack is used to completely take over an HTTP/1 connection. It
      ## occurs before any headers are written and causes the request to
      ## ignores any response generated by the application.
      ##
      ## It is intended to be used when applications need access to raw HTTP/1
      ## connection.
      ##
      def check_hijack(env)
        ## If +rack.hijack+ is present in +env+, it must respond to +call+
        if original_hijack = env[RACK_HIJACK]
          raise LintError, "rack.hijack must respond to call" unless original_hijack.respond_to?(:call)

          env[RACK_HIJACK] = proc do
            io = original_hijack.call

            ## and return an +IO+ instance which can be used to read and write
            ## to the underlying connection using HTTP/1 semantics and
            ## formatting.
            raise LintError, "rack.hijack must return an IO instance" unless io.is_a?(IO)

            io
          end
        end
      end

      ##
      ## ==== Partial Hijack
      ##
      ## Partial hijack is used for bi-directional streaming of the request and
      ## response body. It occurs after the status and headers are written by
      ## the server and causes the server to ignore the Body of the response.
      ##
      ## It is intended to be used when applications need bi-directional
      ## streaming.
      ##
      def check_hijack_response(headers, env)
        ## If +rack.hijack?+ is present in +env+ and truthy,
        if env[RACK_IS_HIJACK]
          ## an application may set the special response header +rack.hijack+
          if original_hijack = headers[RACK_HIJACK]
            ## to an object that responds to +call+,
            unless original_hijack.respond_to?(:call)
              raise LintError, 'rack.hijack header must respond to #call'
            end
            ## accepting a +stream+ argument.
            return proc do |io|
              original_hijack.call StreamWrapper.new(io)
            end
          end
          ##
          ## After the response status and headers have been sent, this hijack
          ## callback will be invoked with a +stream+ argument which follows the
          ## same interface as outlined in "Streaming Body". Servers must
          ## ignore the +body+ part of the response tuple when the
          ## +rack.hijack+ response header is present. Using an empty +Array+
          ## instance is recommended.
        else
          ##
          ## The special response header +rack.hijack+ must only be set
          ## if the request +env+ has a truthy +rack.hijack?+.
          if headers.key?(RACK_HIJACK)
            raise LintError, 'rack.hijack header must not be present if server does not support hijacking'
          end
        end

        nil
      end

      ## == The Response
      ##
      ## === The Status
      ##
      def check_status(status)
        ## This is an HTTP status. It must be an Integer greater than or equal to
        ## 100.
        unless status.is_a?(Integer) && status >= 100
          raise LintError, "Status must be an Integer >=100"
        end
      end

      ##
      ## === The Headers
      ##
      def check_headers(headers)
        ## The headers must be a unfrozen Hash.
        unless headers.kind_of?(Hash)
          raise LintError, "headers object should be a hash, but isn't (got #{headers.class} as headers)"
        end

        if headers.frozen?
          raise LintError, "headers object should not be frozen, but is"
        end

        headers.each do |key, value|
          ## The header keys must be Strings.
          unless key.kind_of? String
            raise LintError, "header key must be a string, was #{key.class}"
          end

          ## Special headers starting "rack." are for communicating with the
          ## server, and must not be sent back to the client.
          next if key.start_with?("rack.")

          ## The header must not contain a +Status+ key.
          raise LintError, "header must not contain status" if key == "status"
          ## Header keys must conform to RFC7230 token specification, i.e. cannot
          ## contain non-printable ASCII, DQUOTE or "(),/:;<=>?@[\]{}".
          raise LintError, "invalid header name: #{key}" if key =~ /[\(\),\/:;<=>\?@\[\\\]{}[:cntrl:]]/
          ## Header keys must not contain uppercase ASCII characters (A-Z).
          raise LintError, "uppercase character in header name: #{key}" if key =~ /[A-Z]/

          ## Header values must be either a String instance,
          if value.kind_of?(String)
            check_header_value(key, value)
          elsif value.kind_of?(Array)
            ## or an Array of String instances,
            value.each{|value| check_header_value(key, value)}
          else
            raise LintError, "a header value must be a String or Array of Strings, but the value of '#{key}' is a #{value.class}"
          end
        end
      end

      def check_header_value(key, value)
        ## such that each String instance must not contain characters below 037.
        if value =~ /[\000-\037]/
          raise LintError, "invalid header value #{key}: #{value.inspect}"
        end
      end

      ##
      ## === The content-type
      ##
      def check_content_type(status, headers)
        headers.each { |key, value|
          ## There must not be a <tt>content-type</tt> header key when the +Status+ is 1xx,
          ## 204, or 304.
          if key == "content-type"
            if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.key? status.to_i
              raise LintError, "content-type header found in #{status} response, not allowed"
            end
            return
          end
        }
      end

      ##
      ## === The content-length
      ##
      def check_content_length(status, headers)
        headers.each { |key, value|
          if key == 'content-length'
            ## There must not be a <tt>content-length</tt> header key when the
            ## +Status+ is 1xx, 204, or 304.
            if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.key? status.to_i
              raise LintError, "content-length header found in #{status} response, not allowed"
            end
            @content_length = value
          end
        }
      end

      def verify_content_length(size)
        if @head_request
          unless size == 0
            raise LintError, "Response body was given for HEAD request, but should be empty"
          end
        elsif @content_length
          unless @content_length == size.to_s
            raise LintError, "content-length header was #{@content_length}, but should be #{size}"
          end
        end
      end

      ##
      ## === The Body
      ##
      ## The Body is typically an +Array+ of +String+ instances, an enumerable
      ## that yields +String+ instances, a +Proc+ instance, or a File-like
      ## object.
      ##
      ## The Body must respond to +each+ or +call+. It may optionally respond
      ## to +to_path+ or +to_ary+. A Body that responds to +each+ is considered
      ## to be an Enumerable Body. A Body that responds to +call+ is considered
      ## to be a Streaming Body.
      ##
      ## A Body that responds to both +each+ and +call+ must be treated as an
      ## Enumerable Body, not a Streaming Body. If it responds to +each+, you
      ## must call +each+ and not +call+. If the Body doesn't respond to
      ## +each+, then you can assume it responds to +call+.
      ##
      ## The Body must either be consumed or returned. The Body is consumed by
      ## optionally calling either +each+ or +call+.
      ## Then, if the Body responds to +close+, it must be called to release
      ## any resources associated with the generation of the body.
      ## In other words, +close+ must always be called at least once; typically
      ## after the web server has sent the response to the client, but also in
      ## cases where the Rack application makes internal/virtual requests and
      ## discards the response.
      ##
      def close
        ##
        ## After calling +close+, the Body is considered closed and should not
        ## be consumed again.
        @closed = true

        ## If the original Body is replaced by a new Body, the new Body must
        ## also consume the original Body by calling +close+ if possible.
        @body.close if @body.respond_to?(:close)

        index = @lint.index(self)
        unless @env['rack.lint'][0..index].all? {|lint| lint.instance_variable_get(:@closed)}
          raise LintError, "Body has not been closed"
        end
      end

      def verify_to_path
        ##
        ## If the Body responds to +to_path+, it must return a +String+
        ## path for the local file system whose contents are identical
        ## to that produced by calling +each+; this may be used by the
        ## server as an alternative, possibly more efficient way to
        ## transport the response. The +to_path+ method does not consume
        ## the body.
        if @body.respond_to?(:to_path)
          unless ::File.exist? @body.to_path
            raise LintError, "The file identified by body.to_path does not exist"
          end
        end
      end

      ##
      ## ==== Enumerable Body
      ##
      def each
        ## The Enumerable Body must respond to +each+.
        raise LintError, "Enumerable Body must respond to each" unless @body.respond_to?(:each)

        ## It must only be called once.
        raise LintError, "Response body must only be invoked once (#{@invoked})" unless @invoked.nil?

        ## It must not be called after being closed.
        raise LintError, "Response body is already closed" if @closed

        @invoked = :each

        @body.each do |chunk|
          ## and must only yield String values.
          unless chunk.kind_of? String
            raise LintError, "Body yielded non-string value #{chunk.inspect}"
          end

          ##
          ## The Body itself should not be an instance of String, as this will
          ## break in Ruby 1.9.
          ##
          ## Middleware must not call +each+ directly on the Body.
          ## Instead, middleware can return a new Body that calls +each+ on the
          ## original Body, yielding at least once per iteration.
          if @lint[0] == self
            @env['rack.lint.body_iteration'] += 1
          else
            if (@env['rack.lint.body_iteration'] -= 1) > 0
              raise LintError, "New body must yield at least once per iteration of old body"
            end
          end

          @size += chunk.bytesize
          yield chunk
        end

        verify_content_length(@size)

        verify_to_path
      end

      BODY_METHODS = {to_ary: true, each: true, call: true, to_path: true}

      def to_path
        @body.to_path
      end

      def respond_to?(name, *)
        if BODY_METHODS.key?(name)
          @body.respond_to?(name)
        else
          super
        end
      end

      ##
      ## If the Body responds to +to_ary+, it must return an +Array+ whose
      ## contents are identical to that produced by calling +each+.
      ## Middleware may call +to_ary+ directly on the Body and return a new
      ## Body in its place. In other words, middleware can only process the
      ## Body directly if it responds to +to_ary+. If the Body responds to both
      ## +to_ary+ and +close+, its implementation of +to_ary+ must call
      ## +close+.
      def to_ary
        @body.to_ary.tap do |content|
          unless content == @body.enum_for.to_a
            raise LintError, "#to_ary not identical to contents produced by calling #each"
          end
        end
      ensure
        close
      end

      ##
      ## ==== Streaming Body
      ##
      def call(stream)
        ## The Streaming Body must respond to +call+.
        raise LintError, "Streaming Body must respond to call" unless @body.respond_to?(:call)

        ## It must only be called once.
        raise LintError, "Response body must only be invoked once (#{@invoked})" unless @invoked.nil?

        ## It must not be called after being closed.
        raise LintError, "Response body is already closed" if @closed

        @invoked = :call

        ## It takes a +stream+ argument.
        ##
        ## The +stream+ argument must implement:
        ## <tt>read, write, <<, flush, close, close_read, close_write, closed?</tt>
        ##
        @body.call(StreamWrapper.new(stream))
      end

      class StreamWrapper
        extend Forwardable

        ## The semantics of these IO methods must be a best effort match to
        ## those of a normal Ruby IO or Socket object, using standard arguments
        ## and raising standard exceptions. Servers are encouraged to simply
        ## pass on real IO objects, although it is recognized that this approach
        ## is not directly compatible with HTTP/2.
        REQUIRED_METHODS = [
          :read, :write, :<<, :flush, :close,
          :close_read, :close_write, :closed?
        ]

        def_delegators :@stream, *REQUIRED_METHODS

        def initialize(stream)
          @stream = stream

          REQUIRED_METHODS.each do |method_name|
            raise LintError, "Stream must respond to #{method_name}" unless stream.respond_to?(method_name)
          end
        end
      end

      # :startdoc:
    end
  end
end

##
## == Thanks
## Some parts of this specification are adopted from {PEP 333 – Python Web Server Gateway Interface v1.0}[https://peps.python.org/pep-0333/]
## I'd like to thank everyone involved in that effort.
PK*J[�ӎ cTcT,share/gems/gems/rack-3.0.8/lib/rack/utils.rbnu�[���# -*- encoding: binary -*-
# frozen_string_literal: true

require 'uri'
require 'fileutils'
require 'set'
require 'tempfile'
require 'time'

require_relative 'query_parser'
require_relative 'mime'
require_relative 'headers'
require_relative 'constants'

module Rack
  # Rack::Utils contains a grab-bag of useful methods for writing web
  # applications adopted from all kinds of Ruby libraries.

  module Utils
    ParameterTypeError = QueryParser::ParameterTypeError
    InvalidParameterError = QueryParser::InvalidParameterError
    ParamsTooDeepError = QueryParser::ParamsTooDeepError
    DEFAULT_SEP = QueryParser::DEFAULT_SEP
    COMMON_SEP = QueryParser::COMMON_SEP
    KeySpaceConstrainedParams = QueryParser::Params

    class << self
      attr_accessor :default_query_parser
    end
    # The default amount of nesting to allowed by hash parameters.
    # This helps prevent a rogue client from triggering a possible stack overflow
    # when parsing parameters.
    self.default_query_parser = QueryParser.make_default(32)

    module_function

    # URI escapes. (CGI style space to +)
    def escape(s)
      URI.encode_www_form_component(s)
    end

    # Like URI escaping, but with %20 instead of +. Strictly speaking this is
    # true URI escaping.
    def escape_path(s)
      ::URI::DEFAULT_PARSER.escape s
    end

    # Unescapes the **path** component of a URI.  See Rack::Utils.unescape for
    # unescaping query parameters or form components.
    def unescape_path(s)
      ::URI::DEFAULT_PARSER.unescape s
    end

    # Unescapes a URI escaped string with +encoding+. +encoding+ will be the
    # target encoding of the string returned, and it defaults to UTF-8
    def unescape(s, encoding = Encoding::UTF_8)
      URI.decode_www_form_component(s, encoding)
    end

    class << self
      attr_accessor :multipart_total_part_limit

      attr_accessor :multipart_file_limit

      # multipart_part_limit is the original name of multipart_file_limit, but
      # the limit only counts parts with filenames.
      alias multipart_part_limit multipart_file_limit
      alias multipart_part_limit= multipart_file_limit=
    end

    # The maximum number of file parts a request can contain. Accepting too
    # many parts can lead to the server running out of file handles.
    # Set to `0` for no limit.
    self.multipart_file_limit = (ENV['RACK_MULTIPART_PART_LIMIT'] || ENV['RACK_MULTIPART_FILE_LIMIT'] || 128).to_i

    # The maximum total number of parts a request can contain. Accepting too
    # many can lead to excessive memory use and parsing time.
    self.multipart_total_part_limit = (ENV['RACK_MULTIPART_TOTAL_PART_LIMIT'] || 4096).to_i

    def self.param_depth_limit
      default_query_parser.param_depth_limit
    end

    def self.param_depth_limit=(v)
      self.default_query_parser = self.default_query_parser.new_depth_limit(v)
    end

    def self.key_space_limit
      warn("`Rack::Utils.key_space_limit` is deprecated as this value no longer has an effect. It will be removed in Rack 3.1", uplevel: 1)
      65536
    end

    def self.key_space_limit=(v)
      warn("`Rack::Utils.key_space_limit=` is deprecated and no longer has an effect. It will be removed in Rack 3.1", uplevel: 1)
    end

    if defined?(Process::CLOCK_MONOTONIC)
      def clock_time
        Process.clock_gettime(Process::CLOCK_MONOTONIC)
      end
    else
      # :nocov:
      def clock_time
        Time.now.to_f
      end
      # :nocov:
    end

    def parse_query(qs, d = nil, &unescaper)
      Rack::Utils.default_query_parser.parse_query(qs, d, &unescaper)
    end

    def parse_nested_query(qs, d = nil)
      Rack::Utils.default_query_parser.parse_nested_query(qs, d)
    end

    def build_query(params)
      params.map { |k, v|
        if v.class == Array
          build_query(v.map { |x| [k, x] })
        else
          v.nil? ? escape(k) : "#{escape(k)}=#{escape(v)}"
        end
      }.join("&")
    end

    def build_nested_query(value, prefix = nil)
      case value
      when Array
        value.map { |v|
          build_nested_query(v, "#{prefix}[]")
        }.join("&")
      when Hash
        value.map { |k, v|
          build_nested_query(v, prefix ? "#{prefix}[#{k}]" : k)
        }.delete_if(&:empty?).join('&')
      when nil
        escape(prefix)
      else
        raise ArgumentError, "value must be a Hash" if prefix.nil?
        "#{escape(prefix)}=#{escape(value)}"
      end
    end

    def q_values(q_value_header)
      q_value_header.to_s.split(/\s*,\s*/).map do |part|
        value, parameters = part.split(/\s*;\s*/, 2)
        quality = 1.0
        if parameters && (md = /\Aq=([\d.]+)/.match(parameters))
          quality = md[1].to_f
        end
        [value, quality]
      end
    end

    def forwarded_values(forwarded_header)
      return nil unless forwarded_header
      forwarded_header = forwarded_header.to_s.gsub("\n", ";")

      forwarded_header.split(/\s*;\s*/).each_with_object({}) do |field, values|
        field.split(/\s*,\s*/).each do |pair|
          return nil unless pair =~ /\A\s*(by|for|host|proto)\s*=\s*"?([^"]+)"?\s*\Z/i
          (values[$1.downcase.to_sym] ||= []) << $2
        end
      end
    end
    module_function :forwarded_values

    # Return best accept value to use, based on the algorithm
    # in RFC 2616 Section 14.  If there are multiple best
    # matches (same specificity and quality), the value returned
    # is arbitrary.
    def best_q_match(q_value_header, available_mimes)
      values = q_values(q_value_header)

      matches = values.map do |req_mime, quality|
        match = available_mimes.find { |am| Rack::Mime.match?(am, req_mime) }
        next unless match
        [match, quality]
      end.compact.sort_by do |match, quality|
        (match.split('/', 2).count('*') * -10) + quality
      end.last
      matches&.first
    end

    ESCAPE_HTML = {
      "&" => "&amp;",
      "<" => "&lt;",
      ">" => "&gt;",
      "'" => "&#x27;",
      '"' => "&quot;",
      "/" => "&#x2F;"
    }

    ESCAPE_HTML_PATTERN = Regexp.union(*ESCAPE_HTML.keys)

    # Escape ampersands, brackets and quotes to their HTML/XML entities.
    def escape_html(string)
      string.to_s.gsub(ESCAPE_HTML_PATTERN){|c| ESCAPE_HTML[c] }
    end

    def select_best_encoding(available_encodings, accept_encoding)
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

      expanded_accept_encoding = []

      accept_encoding.each do |m, q|
        preference = available_encodings.index(m) || available_encodings.size

        if m == "*"
          (available_encodings - accept_encoding.map(&:first)).each do |m2|
            expanded_accept_encoding << [m2, q, preference]
          end
        else
          expanded_accept_encoding << [m, q, preference]
        end
      end

      encoding_candidates = expanded_accept_encoding
        .sort_by { |_, q, p| [-q, p] }
        .map!(&:first)

      unless encoding_candidates.include?("identity")
        encoding_candidates.push("identity")
      end

      expanded_accept_encoding.each do |m, q|
        encoding_candidates.delete(m) if q == 0.0
      end

      (encoding_candidates & available_encodings)[0]
    end

    # :call-seq:
    #   parse_cookies_header(value) -> hash
    #
    # Parse cookies from the provided header +value+ according to RFC6265. The
    # syntax for cookie headers only supports semicolons. Returns a map of
    # cookie +key+ to cookie +value+.
    #
    #   parse_cookies_header('myname=myvalue; max-age=0')
    #   # => {"myname"=>"myvalue", "max-age"=>"0"}
    #
    def parse_cookies_header(value)
      return {} unless value

      value.split(/; */n).each_with_object({}) do |cookie, cookies|
        next if cookie.empty?
        key, value = cookie.split('=', 2)
        cookies[key] = (unescape(value) rescue value) unless cookies.key?(key)
      end
    end

    def add_cookie_to_header(header, key, value)
      warn("add_cookie_to_header is deprecated and will be removed in Rack 3.1", uplevel: 1)

      case header
      when nil, ''
        return set_cookie_header(key, value)
      when String
        [header, set_cookie_header(key, value)]
      when Array
        header + [set_cookie_header(key, value)]
      else
        raise ArgumentError, "Unrecognized cookie header value. Expected String, Array, or nil, got #{header.inspect}"
      end
    end

    # :call-seq:
    #   parse_cookies(env) -> hash
    #
    # Parse cookies from the provided request environment using
    # parse_cookies_header. Returns a map of cookie +key+ to cookie +value+.
    #
    #   parse_cookies({'HTTP_COOKIE' => 'myname=myvalue'})
    #   # => {'myname' => 'myvalue'}
    #
    def parse_cookies(env)
      parse_cookies_header env[HTTP_COOKIE]
    end

    # :call-seq:
    #   set_cookie_header(key, value) -> encoded string
    #
    # Generate an encoded string using the provided +key+ and +value+ suitable
    # for the +set-cookie+ header according to RFC6265. The +value+ may be an
    # instance of either +String+ or +Hash+.
    #
    # If the cookie +value+ is an instance of +Hash+, it considers the following
    # cookie attribute keys: +domain+, +max_age+, +expires+ (must be instance
    # of +Time+), +secure+, +http_only+, +same_site+ and +value+. For more
    # details about the interpretation of these fields, consult
    # [RFC6265 Section 5.2](https://datatracker.ietf.org/doc/html/rfc6265#section-5.2).
    #
    # An extra cookie attribute +escape_key+ can be provided to control whether
    # or not the cookie key is URL encoded. If explicitly set to +false+, the
    # cookie key name will not be url encoded (escaped). The default is +true+.
    #
    #   set_cookie_header("myname", "myvalue")
    #   # => "myname=myvalue"
    #
    #   set_cookie_header("myname", {value: "myvalue", max_age: 10})
    #   # => "myname=myvalue; max-age=10"
    #
    def set_cookie_header(key, value)
      case value
      when Hash
        key = escape(key) unless value[:escape_key] == false
        domain  = "; domain=#{value[:domain]}"   if value[:domain]
        path    = "; path=#{value[:path]}"       if value[:path]
        max_age = "; max-age=#{value[:max_age]}" if value[:max_age]
        expires = "; expires=#{value[:expires].httpdate}" if value[:expires]
        secure = "; secure"  if value[:secure]
        httponly = "; httponly" if (value.key?(:httponly) ? value[:httponly] : value[:http_only])
        same_site =
          case value[:same_site]
          when false, nil
            nil
          when :none, 'None', :None
            '; SameSite=None'
          when :lax, 'Lax', :Lax
            '; SameSite=Lax'
          when true, :strict, 'Strict', :Strict
            '; SameSite=Strict'
          else
            raise ArgumentError, "Invalid SameSite value: #{value[:same_site].inspect}"
          end
        value = value[:value]
      else
        key = escape(key)
      end

      value = [value] unless Array === value

      return "#{key}=#{value.map { |v| escape v }.join('&')}#{domain}" \
        "#{path}#{max_age}#{expires}#{secure}#{httponly}#{same_site}"
    end

    # :call-seq:
    #   set_cookie_header!(headers, key, value) -> header value
    #
    # Append a cookie in the specified headers with the given cookie +key+ and
    # +value+ using set_cookie_header.
    #
    # If the headers already contains a +set-cookie+ key, it will be converted
    # to an +Array+ if not already, and appended to.
    def set_cookie_header!(headers, key, value)
      if header = headers[SET_COOKIE]
        if header.is_a?(Array)
          header << set_cookie_header(key, value)
        else
          headers[SET_COOKIE] = [header, set_cookie_header(key, value)]
        end
      else
        headers[SET_COOKIE] = set_cookie_header(key, value)
      end
    end

    # :call-seq:
    #   delete_set_cookie_header(key, value = {}) -> encoded string
    #
    # Generate an encoded string based on the given +key+ and +value+ using
    # set_cookie_header for the purpose of causing the specified cookie to be
    # deleted. The +value+ may be an instance of +Hash+ and can include
    # attributes as outlined by set_cookie_header. The encoded cookie will have
    # a +max_age+ of 0 seconds, an +expires+ date in the past and an empty
    # +value+. When used with the +set-cookie+ header, it will cause the client
    # to *remove* any matching cookie.
    #
    #   delete_set_cookie_header("myname")
    #   # => "myname=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
    #
    def delete_set_cookie_header(key, value = {})
      set_cookie_header(key, value.merge(max_age: '0', expires: Time.at(0), value: ''))
    end

    def make_delete_cookie_header(header, key, value)
      warn("make_delete_cookie_header is deprecated and will be removed in Rack 3.1, use delete_set_cookie_header! instead", uplevel: 1)

      delete_set_cookie_header!(header, key, value)
    end

    def delete_cookie_header!(headers, key, value = {})
      headers[SET_COOKIE] = delete_set_cookie_header!(headers[SET_COOKIE], key, value)

      return nil
    end

    def add_remove_cookie_to_header(header, key, value = {})
      warn("add_remove_cookie_to_header is deprecated and will be removed in Rack 3.1, use delete_set_cookie_header! instead", uplevel: 1)

      delete_set_cookie_header!(header, key, value)
    end

    # :call-seq:
    #   delete_set_cookie_header!(header, key, value = {}) -> header value
    #
    # Set an expired cookie in the specified headers with the given cookie
    # +key+ and +value+ using delete_set_cookie_header. This causes
    # the client to immediately delete the specified cookie.
    #
    #   delete_set_cookie_header!(nil, "mycookie")
    #   # => "mycookie=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
    #
    # If the header is non-nil, it will be modified in place.
    #
    #   header = []
    #   delete_set_cookie_header!(header, "mycookie")
    #   # => ["mycookie=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"]
    #   header
    #   # => ["mycookie=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"]
    #
    def delete_set_cookie_header!(header, key, value = {})
      if header
        header = Array(header)
        header << delete_set_cookie_header(key, value)
      else
        header = delete_set_cookie_header(key, value)
      end

      return header
    end

    def rfc2822(time)
      time.rfc2822
    end

    # Parses the "Range:" header, if present, into an array of Range objects.
    # Returns nil if the header is missing or syntactically invalid.
    # Returns an empty array if none of the ranges are satisfiable.
    def byte_ranges(env, size)
      get_byte_ranges env['HTTP_RANGE'], size
    end

    def get_byte_ranges(http_range, size)
      # See <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35>
      return nil unless http_range && http_range =~ /bytes=([^;]+)/
      ranges = []
      $1.split(/,\s*/).each do |range_spec|
        return nil unless range_spec.include?('-')
        range = range_spec.split('-')
        r0, r1 = range[0], range[1]
        if r0.nil? || r0.empty?
          return nil if r1.nil?
          # suffix-byte-range-spec, represents trailing suffix of file
          r0 = size - r1.to_i
          r0 = 0  if r0 < 0
          r1 = size - 1
        else
          r0 = r0.to_i
          if r1.nil?
            r1 = size - 1
          else
            r1 = r1.to_i
            return nil  if r1 < r0  # backwards range is syntactically invalid
            r1 = size - 1  if r1 >= size
          end
        end
        ranges << (r0..r1)  if r0 <= r1
      end
      ranges
    end

    # :nocov:
    if defined?(OpenSSL.fixed_length_secure_compare)
      # Constant time string comparison.
      #
      # NOTE: the values compared should be of fixed length, such as strings
      # that have already been processed by HMAC. This should not be used
      # on variable length plaintext strings because it could leak length info
      # via timing attacks.
      def secure_compare(a, b)
        return false unless a.bytesize == b.bytesize

        OpenSSL.fixed_length_secure_compare(a, b)
      end
    # :nocov:
    else
      def secure_compare(a, b)
        return false unless a.bytesize == b.bytesize

        l = a.unpack("C*")

        r, i = 0, -1
        b.each_byte { |v| r |= v ^ l[i += 1] }
        r == 0
      end
    end

    # Context allows the use of a compatible middleware at different points
    # in a request handling stack. A compatible middleware must define
    # #context which should take the arguments env and app. The first of which
    # would be the request environment. The second of which would be the rack
    # application that the request would be forwarded to.
    class Context
      attr_reader :for, :app

      def initialize(app_f, app_r)
        raise 'running context does not respond to #context' unless app_f.respond_to? :context
        @for, @app = app_f, app_r
      end

      def call(env)
        @for.context(env, @app)
      end

      def recontext(app)
        self.class.new(@for, app)
      end

      def context(env, app = @app)
        recontext(app).call(env)
      end
    end

    # A wrapper around Headers
    # header when set.
    #
    # @api private
    class HeaderHash < Hash # :nodoc:
      def self.[](headers)
        warn "Rack::Utils::HeaderHash is deprecated and will be removed in Rack 3.1, switch to Rack::Headers", uplevel: 1
        if headers.is_a?(Headers) && !headers.frozen?
          return headers
        end

        new_headers = Headers.new
        headers.each{|k,v| new_headers[k] = v}
        new_headers
      end

      def self.new(hash = {})
        warn "Rack::Utils::HeaderHash is deprecated and will be removed in Rack 3.1, switch to Rack::Headers", uplevel: 1
        headers = Headers.new
        hash.each{|k,v| headers[k] = v}
        headers
      end

      def self.allocate
        raise TypeError, "cannot allocate HeaderHash"
      end
    end

    # Every standard HTTP code mapped to the appropriate message.
    # Generated with:
    #   curl -s https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv | \
    #     ruby -ne 'm = /^(\d{3}),(?!Unassigned|\(Unused\))([^,]+)/.match($_) and \
    #               puts "#{m[1]} => \x27#{m[2].strip}\x27,"'
    HTTP_STATUS_CODES = {
      100 => 'Continue',
      101 => 'Switching Protocols',
      102 => 'Processing',
      103 => 'Early Hints',
      200 => 'OK',
      201 => 'Created',
      202 => 'Accepted',
      203 => 'Non-Authoritative Information',
      204 => 'No Content',
      205 => 'Reset Content',
      206 => 'Partial Content',
      207 => 'Multi-Status',
      208 => 'Already Reported',
      226 => 'IM Used',
      300 => 'Multiple Choices',
      301 => 'Moved Permanently',
      302 => 'Found',
      303 => 'See Other',
      304 => 'Not Modified',
      305 => 'Use Proxy',
      306 => '(Unused)',
      307 => 'Temporary Redirect',
      308 => 'Permanent Redirect',
      400 => 'Bad Request',
      401 => 'Unauthorized',
      402 => 'Payment Required',
      403 => 'Forbidden',
      404 => 'Not Found',
      405 => 'Method Not Allowed',
      406 => 'Not Acceptable',
      407 => 'Proxy Authentication Required',
      408 => 'Request Timeout',
      409 => 'Conflict',
      410 => 'Gone',
      411 => 'Length Required',
      412 => 'Precondition Failed',
      413 => 'Payload Too Large',
      414 => 'URI Too Long',
      415 => 'Unsupported Media Type',
      416 => 'Range Not Satisfiable',
      417 => 'Expectation Failed',
      421 => 'Misdirected Request',
      422 => 'Unprocessable Entity',
      423 => 'Locked',
      424 => 'Failed Dependency',
      425 => 'Too Early',
      426 => 'Upgrade Required',
      428 => 'Precondition Required',
      429 => 'Too Many Requests',
      431 => 'Request Header Fields Too Large',
      451 => 'Unavailable for Legal Reasons',
      500 => 'Internal Server Error',
      501 => 'Not Implemented',
      502 => 'Bad Gateway',
      503 => 'Service Unavailable',
      504 => 'Gateway Timeout',
      505 => 'HTTP Version Not Supported',
      506 => 'Variant Also Negotiates',
      507 => 'Insufficient Storage',
      508 => 'Loop Detected',
      509 => 'Bandwidth Limit Exceeded',
      510 => 'Not Extended',
      511 => 'Network Authentication Required'
    }

    # Responses with HTTP status codes that should not have an entity body
    STATUS_WITH_NO_ENTITY_BODY = Hash[((100..199).to_a << 204 << 304).product([true])]

    SYMBOL_TO_STATUS_CODE = Hash[*HTTP_STATUS_CODES.map { |code, message|
      [message.downcase.gsub(/\s|-|'/, '_').to_sym, code]
    }.flatten]

    def status_code(status)
      if status.is_a?(Symbol)
        SYMBOL_TO_STATUS_CODE.fetch(status) { raise ArgumentError, "Unrecognized status code #{status.inspect}" }
      else
        status.to_i
      end
    end

    PATH_SEPS = Regexp.union(*[::File::SEPARATOR, ::File::ALT_SEPARATOR].compact)

    def clean_path_info(path_info)
      parts = path_info.split PATH_SEPS

      clean = []

      parts.each do |part|
        next if part.empty? || part == '.'
        part == '..' ? clean.pop : clean << part
      end

      clean_path = clean.join(::File::SEPARATOR)
      clean_path.prepend("/") if parts.empty? || parts.first.empty?
      clean_path
    end

    NULL_BYTE = "\0"

    def valid_path?(path)
      path.valid_encoding? && !path.include?(NULL_BYTE)
    end

  end
end
PK*J[>Sf?"?".share/gems/gems/rack-3.0.8/lib/rack/builder.rbnu�[���# frozen_string_literal: true

require_relative 'urlmap'

module Rack
  # Rack::Builder provides a domain-specific language (DSL) to construct Rack
  # applications. It is primarily used to parse +config.ru+ files which
  # instantiate several middleware and a final application which are hosted
  # by a Rack-compatible web server.
  #
  # Example:
  #
  #   app = Rack::Builder.new do
  #     use Rack::CommonLogger
  #     map "/ok" do
  #       run lambda { |env| [200, {'content-type' => 'text/plain'}, ['OK']] }
  #     end
  #   end
  #
  #   run app
  #
  # Or
  #
  #   app = Rack::Builder.app do
  #     use Rack::CommonLogger
  #     run lambda { |env| [200, {'content-type' => 'text/plain'}, ['OK']] }
  #   end
  #
  #   run app
  #
  # +use+ adds middleware to the stack, +run+ dispatches to an application.
  # You can use +map+ to construct a Rack::URLMap in a convenient way.
  class Builder

    # https://stackoverflow.com/questions/2223882/whats-the-difference-between-utf-8-and-utf-8-without-bom
    UTF_8_BOM = '\xef\xbb\xbf'

    # Parse the given config file to get a Rack application.
    #
    # If the config file ends in +.ru+, it is treated as a
    # rackup file and the contents will be treated as if
    # specified inside a Rack::Builder block.
    #
    # If the config file does not end in +.ru+, it is
    # required and Rack will use the basename of the file
    # to guess which constant will be the Rack application to run.
    #
    # Examples:
    #
    #   Rack::Builder.parse_file('config.ru')
    #   # Rack application built using Rack::Builder.new
    #
    #   Rack::Builder.parse_file('app.rb')
    #   # requires app.rb, which can be anywhere in Ruby's
    #   # load path. After requiring, assumes App constant
    #   # contains Rack application
    #
    #   Rack::Builder.parse_file('./my_app.rb')
    #   # requires ./my_app.rb, which should be in the
    #   # process's current directory.  After requiring,
    #   # assumes MyApp constant contains Rack application
    def self.parse_file(path)
      if path.end_with?('.ru')
        return self.load_file(path)
      else
        require path
        return Object.const_get(::File.basename(path, '.rb').split('_').map(&:capitalize).join(''))
      end
    end

    # Load the given file as a rackup file, treating the
    # contents as if specified inside a Rack::Builder block.
    #
    # Ignores content in the file after +__END__+, so that
    # use of +__END__+ will not result in a syntax error.
    #
    # Example config.ru file:
    #
    #   $ cat config.ru
    #
    #   use Rack::ContentLength
    #   require './app.rb'
    #   run App
    def self.load_file(path)
      config = ::File.read(path)
      config.slice!(/\A#{UTF_8_BOM}/) if config.encoding == Encoding::UTF_8

      if config[/^#\\(.*)/]
        fail "Parsing options from the first comment line is no longer supported: #{path}"
      end

      config.sub!(/^__END__\n.*\Z/m, '')

      return new_from_string(config, path)
    end

    # Evaluate the given +builder_script+ string in the context of
    # a Rack::Builder block, returning a Rack application.
    def self.new_from_string(builder_script, file = "(rackup)")
      # We want to build a variant of TOPLEVEL_BINDING with self as a Rack::Builder instance.
      # We cannot use instance_eval(String) as that would resolve constants differently.
      binding, builder = TOPLEVEL_BINDING.eval('Rack::Builder.new.instance_eval { [binding, self] }')
      eval builder_script, binding, file

      return builder.to_app
    end

    # Initialize a new Rack::Builder instance.  +default_app+ specifies the
    # default application if +run+ is not called later.  If a block
    # is given, it is evaluated in the context of the instance.
    def initialize(default_app = nil, &block)
      @use = []
      @map = nil
      @run = default_app
      @warmup = nil
      @freeze_app = false

      instance_eval(&block) if block_given?
    end

    # Create a new Rack::Builder instance and return the Rack application
    # generated from it.
    def self.app(default_app = nil, &block)
      self.new(default_app, &block).to_app
    end

    # Specifies middleware to use in a stack.
    #
    #   class Middleware
    #     def initialize(app)
    #       @app = app
    #     end
    #
    #     def call(env)
    #       env["rack.some_header"] = "setting an example"
    #       @app.call(env)
    #     end
    #   end
    #
    #   use Middleware
    #   run lambda { |env| [200, { "content-type" => "text/plain" }, ["OK"]] }
    #
    # All requests through to this application will first be processed by the middleware class.
    # The +call+ method in this example sets an additional environment key which then can be
    # referenced in the application if required.
    def use(middleware, *args, &block)
      if @map
        mapping, @map = @map, nil
        @use << proc { |app| generate_map(app, mapping) }
      end
      @use << proc { |app| middleware.new(app, *args, &block) }
    end
    # :nocov:
    ruby2_keywords(:use) if respond_to?(:ruby2_keywords, true)
    # :nocov:

    # Takes a block or argument that is an object that responds to #call and
    # returns a Rack response.
    #
    # You can use a block:
    #
    #   run do |env|
    #     [200, { "content-type" => "text/plain" }, ["Hello World!"]]
    #   end
    #
    # You can also provide a lambda:
    #
    #   run lambda { |env| [200, { "content-type" => "text/plain" }, ["OK"]] }
    #
    # You can also provide a class instance:
    #
    #   class Heartbeat
    #     def call(env)
    #      [200, { "content-type" => "text/plain" }, ["OK"]]
    #     end
    #   end
    #
    #   run Heartbeat.new
    #
    def run(app = nil, &block)
      raise ArgumentError, "Both app and block given!" if app && block_given?

      @run = app || block
    end

    # Takes a lambda or block that is used to warm-up the application. This block is called
    # before the Rack application is returned by to_app.
    #
    #   warmup do |app|
    #     client = Rack::MockRequest.new(app)
    #     client.get('/')
    #   end
    #
    #   use SomeMiddleware
    #   run MyApp
    def warmup(prc = nil, &block)
      @warmup = prc || block
    end

    # Creates a route within the application.  Routes under the mapped path will be sent to
    # the Rack application specified by run inside the block.  Other requests will be sent to the
    # default application specified by run outside the block.
    #
    #   class App
    #     def call(env)
    #       [200, {'content-type' => 'text/plain'}, ["Hello World"]]
    #     end
    #   end
    #
    #   class Heartbeat
    #     def call(env)
    #       [200, { "content-type" => "text/plain" }, ["OK"]]
    #     end
    #   end
    #
    #   app = Rack::Builder.app do
    #     map '/heartbeat' do
    #       run Heartbeat.new
    #     end
    #     run App.new
    #   end
    #
    #   run app
    #
    # The +use+ method can also be used inside the block to specify middleware to run under a specific path:
    #
    #   app = Rack::Builder.app do
    #     map '/heartbeat' do
    #       use Middleware
    #       run Heartbeat.new
    #     end
    #     run App.new
    #   end
    #
    # This example includes a piece of middleware which will run before +/heartbeat+ requests hit +Heartbeat+.
    #
    # Note that providing a +path+ of +/+ will ignore any default application given in a +run+ statement
    # outside the block.
    def map(path, &block)
      @map ||= {}
      @map[path] = block
    end

    # Freeze the app (set using run) and all middleware instances when building the application
    # in to_app.
    def freeze_app
      @freeze_app = true
    end

    # Return the Rack application generated by this instance.
    def to_app
      app = @map ? generate_map(@run, @map) : @run
      fail "missing run or map statement" unless app
      app.freeze if @freeze_app
      app = @use.reverse.inject(app) { |a, e| e[a].tap { |x| x.freeze if @freeze_app } }
      @warmup.call(app) if @warmup
      app
    end

    # Call the Rack application generated by this builder instance. Note that
    # this rebuilds the Rack application and runs the warmup code (if any)
    # every time it is called, so it should not be used if performance is important.
    def call(env)
      to_app.call(env)
    end

    private

    # Generate a URLMap instance by generating new Rack applications for each
    # map block in this instance.
    def generate_map(default_app, mapping)
      mapped = default_app ? { '/' => default_app } : {}
      mapping.each { |r, b| mapped[r] = self.class.new(default_app, &b).to_app }
      URLMap.new(mapped)
    end
  end
end
PK*J[��A�0share/gems/gems/rack-3.0.8/lib/rack/directory.rbnu�[���# frozen_string_literal: true

require 'time'

require_relative 'constants'
require_relative 'utils'
require_relative 'head'
require_relative 'mime'
require_relative 'files'

module Rack
  # Rack::Directory serves entries below the +root+ given, according to the
  # path info of the Rack request. If a directory is found, the file's contents
  # will be presented in an html based index. If a file is found, the env will
  # be passed to the specified +app+.
  #
  # If +app+ is not specified, a Rack::Files of the same +root+ will be used.

  class Directory
    DIR_FILE = "<tr><td class='name'><a href='%s'>%s</a></td><td class='size'>%s</td><td class='type'>%s</td><td class='mtime'>%s</td></tr>\n"
    DIR_PAGE_HEADER = <<-PAGE
<html><head>
  <title>%s</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <style type='text/css'>
table { width:100%%; }
.name { text-align:left; }
.size, .mtime { text-align:right; }
.type { width:11em; }
.mtime { width:15em; }
  </style>
</head><body>
<h1>%s</h1>
<hr />
<table>
  <tr>
    <th class='name'>Name</th>
    <th class='size'>Size</th>
    <th class='type'>Type</th>
    <th class='mtime'>Last Modified</th>
  </tr>
    PAGE
    DIR_PAGE_FOOTER = <<-PAGE
</table>
<hr />
</body></html>
    PAGE

    # Body class for directory entries, showing an index page with links
    # to each file.
    class DirectoryBody < Struct.new(:root, :path, :files)
      # Yield strings for each part of the directory entry
      def each
        show_path = Utils.escape_html(path.sub(/^#{root}/, ''))
        yield(DIR_PAGE_HEADER % [ show_path, show_path ])

        unless path.chomp('/') == root
          yield(DIR_FILE % DIR_FILE_escape(files.call('..')))
        end

        Dir.foreach(path) do |basename|
          next if basename.start_with?('.')
          next unless f = files.call(basename)
          yield(DIR_FILE % DIR_FILE_escape(f))
        end

        yield(DIR_PAGE_FOOTER)
      end

      private

      # Escape each element in the array of html strings.
      def DIR_FILE_escape(htmls)
        htmls.map { |e| Utils.escape_html(e) }
      end
    end

    # The root of the directory hierarchy.  Only requests for files and
    # directories inside of the root directory are supported.
    attr_reader :root

    # Set the root directory and application for serving files.
    def initialize(root, app = nil)
      @root = ::File.expand_path(root)
      @app = app || Files.new(@root)
      @head = Head.new(method(:get))
    end

    def call(env)
      # strip body if this is a HEAD call
      @head.call env
    end

    # Internals of request handling.  Similar to call but does
    # not remove body for HEAD requests.
    def get(env)
      script_name = env[SCRIPT_NAME]
      path_info = Utils.unescape_path(env[PATH_INFO])

      if client_error_response = check_bad_request(path_info) || check_forbidden(path_info)
        client_error_response
      else
        path = ::File.join(@root, path_info)
        list_path(env, path, path_info, script_name)
      end
    end

    # Rack response to use for requests with invalid paths, or nil if path is valid.
    def check_bad_request(path_info)
      return if Utils.valid_path?(path_info)

      body = "Bad Request\n"
      [400, { CONTENT_TYPE => "text/plain",
        CONTENT_LENGTH => body.bytesize.to_s,
        "x-cascade" => "pass" }, [body]]
    end

    # Rack response to use for requests with paths outside the root, or nil if path is inside the root.
    def check_forbidden(path_info)
      return unless path_info.include? ".."
      return if ::File.expand_path(::File.join(@root, path_info)).start_with?(@root)

      body = "Forbidden\n"
      [403, { CONTENT_TYPE => "text/plain",
        CONTENT_LENGTH => body.bytesize.to_s,
        "x-cascade" => "pass" }, [body]]
    end

    # Rack response to use for directories under the root.
    def list_directory(path_info, path, script_name)
      url_head = (script_name.split('/') + path_info.split('/')).map do |part|
        Utils.escape_path part
      end

      # Globbing not safe as path could contain glob metacharacters
      body = DirectoryBody.new(@root, path, ->(basename) do
        stat = stat(::File.join(path, basename))
        next unless stat

        url = ::File.join(*url_head + [Utils.escape_path(basename)])
        mtime = stat.mtime.httpdate
        if stat.directory?
          type = 'directory'
          size = '-'
          url << '/'
          if basename == '..'
            basename = 'Parent Directory'
          else
            basename << '/'
          end
        else
          type = Mime.mime_type(::File.extname(basename))
          size = filesize_format(stat.size)
        end

        [ url, basename, size, type, mtime ]
      end)

      [ 200, { CONTENT_TYPE => 'text/html; charset=utf-8' }, body ]
    end

    # File::Stat for the given path, but return nil for missing/bad entries.
    def stat(path)
      ::File.stat(path)
    rescue Errno::ENOENT, Errno::ELOOP
      return nil
    end

    # Rack response to use for files and directories under the root.
    # Unreadable and non-file, non-directory entries will get a 404 response.
    def list_path(env, path, path_info, script_name)
      if (stat = stat(path)) && stat.readable?
        return @app.call(env) if stat.file?
        return list_directory(path_info, path, script_name) if stat.directory?
      end

      entity_not_found(path_info)
    end

    # Rack response to use for unreadable and non-file, non-directory entries.
    def entity_not_found(path_info)
      body = "Entity not found: #{path_info}\n"
      [404, { CONTENT_TYPE => "text/plain",
        CONTENT_LENGTH => body.bytesize.to_s,
        "x-cascade" => "pass" }, [body]]
    end

    # Stolen from Ramaze
    FILESIZE_FORMAT = [
      ['%.1fT', 1 << 40],
      ['%.1fG', 1 << 30],
      ['%.1fM', 1 << 20],
      ['%.1fK', 1 << 10],
    ]

    # Provide human readable file sizes
    def filesize_format(int)
      FILESIZE_FORMAT.each do |format, size|
        return format % (int.to_f / size) if int >= size
      end

      "#{int}B"
    end
  end
end
PK*J[�
C�xx4share/gems/gems/rack-3.0.8/lib/rack/common_logger.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'body_proxy'
require_relative 'request'

module Rack
  # Rack::CommonLogger forwards every request to the given +app+, and
  # logs a line in the
  # {Apache common log format}[http://httpd.apache.org/docs/1.3/logs.html#common]
  # to the configured logger.
  class CommonLogger
    # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
    #
    #   lilith.local - - [07/Aug/2006 23:58:02 -0400] "GET / HTTP/1.1" 500 -
    #
    #   %{%s - %s [%s] "%s %s%s %s" %d %s\n} %
    #
    # The actual format is slightly different than the above due to the
    # separation of SCRIPT_NAME and PATH_INFO, and because the elapsed
    # time in seconds is included at the end.
    FORMAT = %{%s - %s [%s] "%s %s%s%s %s" %d %s %0.4f\n}

    # +logger+ can be any object that supports the +write+ or +<<+ methods,
    # which includes the standard library Logger.  These methods are called
    # with a single string argument, the log message.
    # If +logger+ is nil, CommonLogger will fall back <tt>env['rack.errors']</tt>.
    def initialize(app, logger = nil)
      @app = app
      @logger = logger
    end

    # Log all requests in common_log format after a response has been
    # returned.  Note that if the app raises an exception, the request
    # will not be logged, so if exception handling middleware are used,
    # they should be loaded after this middleware.  Additionally, because
    # the logging happens after the request body has been fully sent, any
    # exceptions raised during the sending of the response body will
    # cause the request not to be logged.
    def call(env)
      began_at = Utils.clock_time
      status, headers, body = response = @app.call(env)

      response[2] = BodyProxy.new(body) { log(env, status, headers, began_at) }
      response
    end

    private

    # Log the request to the configured logger.
    def log(env, status, response_headers, began_at)
      request = Rack::Request.new(env)
      length = extract_content_length(response_headers)

      msg = sprintf(FORMAT,
        request.ip || "-",
        request.get_header("REMOTE_USER") || "-",
        Time.now.strftime("%d/%b/%Y:%H:%M:%S %z"),
        request.request_method,
        request.script_name,
        request.path_info,
        request.query_string.empty? ? "" : "?#{request.query_string}",
        request.get_header(SERVER_PROTOCOL),
        status.to_s[0..3],
        length,
        Utils.clock_time - began_at)

      msg.gsub!(/[^[:print:]\n]/) { |c| sprintf("\\x%x", c.ord) }

      logger = @logger || request.get_header(RACK_ERRORS)
      # Standard library logger doesn't support write but it supports << which actually
      # calls to write on the log device without formatting
      if logger.respond_to?(:write)
        logger.write(msg)
      else
        logger << msg
      end
    end

    # Attempt to determine the content length for the response to
    # include it in the logged data.
    def extract_content_length(headers)
      value = headers[CONTENT_LENGTH]
      !value || value.to_s == '0' ? '-' : value
    end
  end
end
PK*J[ѝo�+share/gems/gems/rack-3.0.8/lib/rack/head.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'body_proxy'

module Rack
  # Rack::Head returns an empty body for all HEAD requests. It leaves
  # all other requests unchanged.
  class Head
    def initialize(app)
      @app = app
    end

    def call(env)
      _, _, body = response = @app.call(env)

      if env[REQUEST_METHOD] == HEAD
        response[2] = Rack::BodyProxy.new([]) do
          body.close if body.respond_to? :close
        end
      end

      response
    end
  end
end
PK*J[K?��331share/gems/gems/rack-3.0.8/lib/rack/body_proxy.rbnu�[���# frozen_string_literal: true

module Rack
  # Proxy for response bodies allowing calling a block when
  # the response body is closed (after the response has been fully
  # sent to the client).
  class BodyProxy
    # Set the response body to wrap, and the block to call when the
    # response has been fully sent.
    def initialize(body, &block)
      @body = body
      @block = block
      @closed = false
    end

    # Return whether the wrapped body responds to the method.
    def respond_to_missing?(method_name, include_all = false)
      super or @body.respond_to?(method_name, include_all)
    end

    # If not already closed, close the wrapped body and
    # then call the block the proxy was initialized with.
    def close
      return if @closed
      @closed = true
      begin
        @body.close if @body.respond_to?(:close)
      ensure
        @block.call
      end
    end

    # Whether the proxy is closed.  The proxy starts as not closed,
    # and becomes closed on the first call to close.
    def closed?
      @closed
    end

    # Delegate missing methods to the wrapped body.
    def method_missing(method_name, *args, &block)
      @body.__send__(method_name, *args, &block)
    end
    # :nocov:
    ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
    # :nocov:
  end
end
PK*J[H��SGbGb.share/gems/gems/rack-3.0.8/lib/rack/request.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'media_type'

module Rack
  # Rack::Request provides a convenient interface to a Rack
  # environment.  It is stateless, the environment +env+ passed to the
  # constructor will be directly modified.
  #
  #   req = Rack::Request.new(env)
  #   req.post?
  #   req.params["data"]

  class Request
    class << self
      attr_accessor :ip_filter

      # The priority when checking forwarded headers. The default
      # is <tt>[:forwarded, :x_forwarded]</tt>, which means, check the
      # +Forwarded+ header first, followed by the appropriate
      # <tt>X-Forwarded-*</tt> header.  You can revert the priority by
      # reversing the priority, or remove checking of either
      # or both headers by removing elements from the array.
      #
      # This should be set as appropriate in your environment
      # based on what reverse proxies are in use.  If you are not
      # using reverse proxies, you should probably use an empty
      # array.
      attr_accessor :forwarded_priority

      # The priority when checking either the <tt>X-Forwarded-Proto</tt>
      # or <tt>X-Forwarded-Scheme</tt> header for the forwarded protocol.
      # The default is <tt>[:proto, :scheme]</tt>, to try the
      # <tt>X-Forwarded-Proto</tt> header before the
      # <tt>X-Forwarded-Scheme</tt> header.  Rack 2 had behavior
      # similar to <tt>[:scheme, :proto]</tt>.  You can remove either or
      # both of the entries in array to ignore that respective header.
      attr_accessor :x_forwarded_proto_priority
    end

    @forwarded_priority = [:forwarded, :x_forwarded]
    @x_forwarded_proto_priority = [:proto, :scheme]

    valid_ipv4_octet = /\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])/

    trusted_proxies = Regexp.union(
      /\A127#{valid_ipv4_octet}{3}\z/,                          # localhost IPv4 range 127.x.x.x, per RFC-3330
      /\A::1\z/,                                                # localhost IPv6 ::1
      /\Af[cd][0-9a-f]{2}(?::[0-9a-f]{0,4}){0,7}\z/i,           # private IPv6 range fc00 .. fdff
      /\A10#{valid_ipv4_octet}{3}\z/,                           # private IPv4 range 10.x.x.x
      /\A172\.(1[6-9]|2[0-9]|3[01])#{valid_ipv4_octet}{2}\z/,   # private IPv4 range 172.16.0.0 .. 172.31.255.255
      /\A192\.168#{valid_ipv4_octet}{2}\z/,                     # private IPv4 range 192.168.x.x
      /\Alocalhost\z|\Aunix(\z|:)/i,                            # localhost hostname, and unix domain sockets
    )

    self.ip_filter = lambda { |ip| trusted_proxies.match?(ip) }

    ALLOWED_SCHEMES = %w(https http wss ws).freeze

    def initialize(env)
      @env = env
      @params = nil
    end

    def params
      @params ||= super
    end

    def update_param(k, v)
      super
      @params = nil
    end

    def delete_param(k)
      v = super
      @params = nil
      v
    end

    module Env
      # The environment of the request.
      attr_reader :env

      def initialize(env)
        @env = env
        # This module is included at least in `ActionDispatch::Request`
        # The call to `super()` allows additional mixed-in initializers are called
        super()
      end

      # Predicate method to test to see if `name` has been set as request
      # specific data
      def has_header?(name)
        @env.key? name
      end

      # Get a request specific value for `name`.
      def get_header(name)
        @env[name]
      end

      # If a block is given, it yields to the block if the value hasn't been set
      # on the request.
      def fetch_header(name, &block)
        @env.fetch(name, &block)
      end

      # Loops through each key / value pair in the request specific data.
      def each_header(&block)
        @env.each(&block)
      end

      # Set a request specific value for `name` to `v`
      def set_header(name, v)
        @env[name] = v
      end

      # Add a header that may have multiple values.
      #
      # Example:
      #   request.add_header 'Accept', 'image/png'
      #   request.add_header 'Accept', '*/*'
      #
      #   assert_equal 'image/png,*/*', request.get_header('Accept')
      #
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
      def add_header(key, v)
        if v.nil?
          get_header key
        elsif has_header? key
          set_header key, "#{get_header key},#{v}"
        else
          set_header key, v
        end
      end

      # Delete a request specific value for `name`.
      def delete_header(name)
        @env.delete name
      end

      def initialize_copy(other)
        @env = other.env.dup
      end
    end

    module Helpers
      # The set of form-data media-types. Requests that do not indicate
      # one of the media types present in this list will not be eligible
      # for form-data / param parsing.
      FORM_DATA_MEDIA_TYPES = [
        'application/x-www-form-urlencoded',
        'multipart/form-data'
      ]

      # The set of media-types. Requests that do not indicate
      # one of the media types present in this list will not be eligible
      # for param parsing like soap attachments or generic multiparts
      PARSEABLE_DATA_MEDIA_TYPES = [
        'multipart/related',
        'multipart/mixed'
      ]

      # Default ports depending on scheme. Used to decide whether or not
      # to include the port in a generated URI.
      DEFAULT_PORTS = { 'http' => 80, 'https' => 443, 'coffee' => 80 }

      # The address of the client which connected to the proxy.
      HTTP_X_FORWARDED_FOR = 'HTTP_X_FORWARDED_FOR'

      # The contents of the host/:authority header sent to the proxy.
      HTTP_X_FORWARDED_HOST = 'HTTP_X_FORWARDED_HOST'

      HTTP_FORWARDED          = 'HTTP_FORWARDED'

      # The value of the scheme sent to the proxy.
      HTTP_X_FORWARDED_SCHEME = 'HTTP_X_FORWARDED_SCHEME'

      # The protocol used to connect to the proxy.
      HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO'

      # The port used to connect to the proxy.
      HTTP_X_FORWARDED_PORT = 'HTTP_X_FORWARDED_PORT'

      # Another way for specifying https scheme was used.
      HTTP_X_FORWARDED_SSL = 'HTTP_X_FORWARDED_SSL'

      def body;            get_header(RACK_INPUT)                         end
      def script_name;     get_header(SCRIPT_NAME).to_s                   end
      def script_name=(s); set_header(SCRIPT_NAME, s.to_s)                end

      def path_info;       get_header(PATH_INFO).to_s                     end
      def path_info=(s);   set_header(PATH_INFO, s.to_s)                  end

      def request_method;  get_header(REQUEST_METHOD)                     end
      def query_string;    get_header(QUERY_STRING).to_s                  end
      def content_length;  get_header('CONTENT_LENGTH')                   end
      def logger;          get_header(RACK_LOGGER)                        end
      def user_agent;      get_header('HTTP_USER_AGENT')                  end

      # the referer of the client
      def referer;         get_header('HTTP_REFERER')                     end
      alias referrer referer

      def session
        fetch_header(RACK_SESSION) do |k|
          set_header RACK_SESSION, default_session
        end
      end

      def session_options
        fetch_header(RACK_SESSION_OPTIONS) do |k|
          set_header RACK_SESSION_OPTIONS, {}
        end
      end

      # Checks the HTTP request method (or verb) to see if it was of type DELETE
      def delete?;  request_method == DELETE  end

      # Checks the HTTP request method (or verb) to see if it was of type GET
      def get?;     request_method == GET     end

      # Checks the HTTP request method (or verb) to see if it was of type HEAD
      def head?;    request_method == HEAD    end

      # Checks the HTTP request method (or verb) to see if it was of type OPTIONS
      def options?; request_method == OPTIONS end

      # Checks the HTTP request method (or verb) to see if it was of type LINK
      def link?;    request_method == LINK    end

      # Checks the HTTP request method (or verb) to see if it was of type PATCH
      def patch?;   request_method == PATCH   end

      # Checks the HTTP request method (or verb) to see if it was of type POST
      def post?;    request_method == POST    end

      # Checks the HTTP request method (or verb) to see if it was of type PUT
      def put?;     request_method == PUT     end

      # Checks the HTTP request method (or verb) to see if it was of type TRACE
      def trace?;   request_method == TRACE   end

      # Checks the HTTP request method (or verb) to see if it was of type UNLINK
      def unlink?;  request_method == UNLINK  end

      def scheme
        if get_header(HTTPS) == 'on'
          'https'
        elsif get_header(HTTP_X_FORWARDED_SSL) == 'on'
          'https'
        elsif forwarded_scheme
          forwarded_scheme
        else
          get_header(RACK_URL_SCHEME)
        end
      end

      # The authority of the incoming request as defined by RFC3976.
      # https://tools.ietf.org/html/rfc3986#section-3.2
      #
      # In HTTP/1, this is the `host` header.
      # In HTTP/2, this is the `:authority` pseudo-header.
      def authority
        forwarded_authority || host_authority || server_authority
      end

      # The authority as defined by the `SERVER_NAME` and `SERVER_PORT`
      # variables.
      def server_authority
        host = self.server_name
        port = self.server_port

        if host
          if port
            "#{host}:#{port}"
          else
            host
          end
        end
      end

      def server_name
        get_header(SERVER_NAME)
      end

      def server_port
        get_header(SERVER_PORT)
      end

      def cookies
        hash = fetch_header(RACK_REQUEST_COOKIE_HASH) do |key|
          set_header(key, {})
        end

        string = get_header(HTTP_COOKIE)

        unless string == get_header(RACK_REQUEST_COOKIE_STRING)
          hash.replace Utils.parse_cookies_header(string)
          set_header(RACK_REQUEST_COOKIE_STRING, string)
        end

        hash
      end

      def content_type
        content_type = get_header('CONTENT_TYPE')
        content_type.nil? || content_type.empty? ? nil : content_type
      end

      def xhr?
        get_header("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest"
      end

      # The `HTTP_HOST` header.
      def host_authority
        get_header(HTTP_HOST)
      end

      def host_with_port(authority = self.authority)
        host, _, port = split_authority(authority)

        if port == DEFAULT_PORTS[self.scheme]
          host
        else
          authority
        end
      end

      # Returns a formatted host, suitable for being used in a URI.
      def host
        split_authority(self.authority)[0]
      end

      # Returns an address suitable for being to resolve to an address.
      # In the case of a domain name or IPv4 address, the result is the same
      # as +host+. In the case of IPv6 or future address formats, the square
      # brackets are removed.
      def hostname
        split_authority(self.authority)[1]
      end

      def port
        if authority = self.authority
          _, _, port = split_authority(authority)
        end

        port || forwarded_port&.last || DEFAULT_PORTS[scheme] || server_port
      end

      def forwarded_for
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if forwarded_for = get_http_forwarded(:for)
              return(forwarded_for.map! do |authority|
                split_authority(authority)[1]
              end)
            end
          when :x_forwarded
            if value = get_header(HTTP_X_FORWARDED_FOR)
              return(split_header(value).map do |authority|
                split_authority(wrap_ipv6(authority))[1]
              end)
            end
          end
        end

        nil
      end

      def forwarded_port
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if forwarded = get_http_forwarded(:for)
              return(forwarded.map do |authority|
                split_authority(authority)[2]
              end.compact)
            end
          when :x_forwarded
            if value = get_header(HTTP_X_FORWARDED_PORT)
              return split_header(value).map(&:to_i)
            end
          end
        end

        nil
      end

      def forwarded_authority
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if forwarded = get_http_forwarded(:host)
              return forwarded.last
            end
          when :x_forwarded
            if value = get_header(HTTP_X_FORWARDED_HOST)
              return wrap_ipv6(split_header(value).last)
            end
          end
        end

        nil
      end

      def ssl?
        scheme == 'https' || scheme == 'wss'
      end

      def ip
        remote_addresses = split_header(get_header('REMOTE_ADDR'))
        external_addresses = reject_trusted_ip_addresses(remote_addresses)

        unless external_addresses.empty?
          return external_addresses.last
        end

        if (forwarded_for = self.forwarded_for) && !forwarded_for.empty?
          # The forwarded for addresses are ordered: client, proxy1, proxy2.
          # So we reject all the trusted addresses (proxy*) and return the
          # last client. Or if we trust everyone, we just return the first
          # address.
          return reject_trusted_ip_addresses(forwarded_for).last || forwarded_for.first
        end

        # If all the addresses are trusted, and we aren't forwarded, just return
        # the first remote address, which represents the source of the request.
        remote_addresses.first
      end

      # The media type (type/subtype) portion of the CONTENT_TYPE header
      # without any media type parameters. e.g., when CONTENT_TYPE is
      # "text/plain;charset=utf-8", the media-type is "text/plain".
      #
      # For more information on the use of media types in HTTP, see:
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
      def media_type
        MediaType.type(content_type)
      end

      # The media type parameters provided in CONTENT_TYPE as a Hash, or
      # an empty Hash if no CONTENT_TYPE or media-type parameters were
      # provided.  e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8",
      # this method responds with the following Hash:
      #   { 'charset' => 'utf-8' }
      def media_type_params
        MediaType.params(content_type)
      end

      # The character set of the request body if a "charset" media type
      # parameter was given, or nil if no "charset" was specified. Note
      # that, per RFC2616, text/* media types that specify no explicit
      # charset are to be considered ISO-8859-1.
      def content_charset
        media_type_params['charset']
      end

      # Determine whether the request body contains form-data by checking
      # the request content-type for one of the media-types:
      # "application/x-www-form-urlencoded" or "multipart/form-data". The
      # list of form-data media types can be modified through the
      # +FORM_DATA_MEDIA_TYPES+ array.
      #
      # A request body is also assumed to contain form-data when no
      # content-type header is provided and the request_method is POST.
      def form_data?
        type = media_type
        meth = get_header(RACK_METHODOVERRIDE_ORIGINAL_METHOD) || get_header(REQUEST_METHOD)

        (meth == POST && type.nil?) || FORM_DATA_MEDIA_TYPES.include?(type)
      end

      # Determine whether the request body contains data by checking
      # the request media_type against registered parse-data media-types
      def parseable_data?
        PARSEABLE_DATA_MEDIA_TYPES.include?(media_type)
      end

      # Returns the data received in the query string.
      def GET
        if get_header(RACK_REQUEST_QUERY_STRING) == query_string
          get_header(RACK_REQUEST_QUERY_HASH)
        else
          query_hash = parse_query(query_string, '&')
          set_header(RACK_REQUEST_QUERY_STRING, query_string)
          set_header(RACK_REQUEST_QUERY_HASH, query_hash)
        end
      end

      # Returns the data received in the request body.
      #
      # This method support both application/x-www-form-urlencoded and
      # multipart/form-data.
      def POST
        if error = get_header(RACK_REQUEST_FORM_ERROR)
          raise error.class, error.message, cause: error.cause
        end

        begin
          rack_input = get_header(RACK_INPUT)

          # If the form hash was already memoized:
          if form_hash = get_header(RACK_REQUEST_FORM_HASH)
            # And it was memoized from the same input:
            if get_header(RACK_REQUEST_FORM_INPUT).equal?(rack_input)
              return form_hash
            end
          end

          # Otherwise, figure out how to parse the input:
          if rack_input.nil?
            set_header RACK_REQUEST_FORM_INPUT, nil
            set_header(RACK_REQUEST_FORM_HASH, {})
          elsif form_data? || parseable_data?
            unless set_header(RACK_REQUEST_FORM_HASH, parse_multipart)
              form_vars = get_header(RACK_INPUT).read

              # Fix for Safari Ajax postings that always append \0
              # form_vars.sub!(/\0\z/, '') # performance replacement:
              form_vars.slice!(-1) if form_vars.end_with?("\0")

              set_header RACK_REQUEST_FORM_VARS, form_vars
              set_header RACK_REQUEST_FORM_HASH, parse_query(form_vars, '&')
            end

            set_header RACK_REQUEST_FORM_INPUT, get_header(RACK_INPUT)
            get_header RACK_REQUEST_FORM_HASH
          else
            set_header RACK_REQUEST_FORM_INPUT, get_header(RACK_INPUT)
            set_header(RACK_REQUEST_FORM_HASH, {})
          end
        rescue => error
          set_header(RACK_REQUEST_FORM_ERROR, error)
          raise
        end
      end

      # The union of GET and POST data.
      #
      # Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to destructively modify params.
      def params
        self.GET.merge(self.POST)
      end

      # Destructively update a parameter, whether it's in GET and/or POST. Returns nil.
      #
      # The parameter is updated wherever it was previous defined, so GET, POST, or both. If it wasn't previously defined, it's inserted into GET.
      #
      # <tt>env['rack.input']</tt> is not touched.
      def update_param(k, v)
        found = false
        if self.GET.has_key?(k)
          found = true
          self.GET[k] = v
        end
        if self.POST.has_key?(k)
          found = true
          self.POST[k] = v
        end
        unless found
          self.GET[k] = v
        end
      end

      # Destructively delete a parameter, whether it's in GET or POST. Returns the value of the deleted parameter.
      #
      # If the parameter is in both GET and POST, the POST value takes precedence since that's how #params works.
      #
      # <tt>env['rack.input']</tt> is not touched.
      def delete_param(k)
        post_value, get_value = self.POST.delete(k), self.GET.delete(k)
        post_value || get_value
      end

      def base_url
        "#{scheme}://#{host_with_port}"
      end

      # Tries to return a remake of the original request URL as a string.
      def url
        base_url + fullpath
      end

      def path
        script_name + path_info
      end

      def fullpath
        query_string.empty? ? path : "#{path}?#{query_string}"
      end

      def accept_encoding
        parse_http_accept_header(get_header("HTTP_ACCEPT_ENCODING"))
      end

      def accept_language
        parse_http_accept_header(get_header("HTTP_ACCEPT_LANGUAGE"))
      end

      def trusted_proxy?(ip)
        Rack::Request.ip_filter.call(ip)
      end

      # shortcut for <tt>request.params[key]</tt>
      def [](key)
        warn("Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead", uplevel: 1)

        params[key.to_s]
      end

      # shortcut for <tt>request.params[key] = value</tt>
      #
      # Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to destructively modify params.
      def []=(key, value)
        warn("Request#[]= is deprecated and will be removed in a future version of Rack. Please use request.params[]= instead", uplevel: 1)

        params[key.to_s] = value
      end

      # like Hash#values_at
      def values_at(*keys)
        keys.map { |key| params[key] }
      end

      private

      def default_session; {}; end

      # Assist with compatibility when processing `X-Forwarded-For`.
      def wrap_ipv6(host)
        # Even thought IPv6 addresses should be wrapped in square brackets,
        # sometimes this is not done in various legacy/underspecified headers.
        # So we try to fix this situation for compatibility reasons.

        # Try to detect IPv6 addresses which aren't escaped yet:
        if !host.start_with?('[') && host.count(':') > 1
          "[#{host}]"
        else
          host
        end
      end

      def parse_http_accept_header(header)
        header.to_s.split(",").each(&:strip!).map do |part|
          attribute, parameters = part.split(";", 2).each(&:strip!)
          quality = 1.0
          if parameters and /\Aq=([\d.]+)/ =~ parameters
            quality = $1.to_f
          end
          [attribute, quality]
        end
      end

      # Get an array of values set in the RFC 7239 `Forwarded` request header.
      def get_http_forwarded(token)
        Utils.forwarded_values(get_header(HTTP_FORWARDED))&.[](token)
      end

      def query_parser
        Utils.default_query_parser
      end

      def parse_query(qs, d = '&')
        query_parser.parse_nested_query(qs, d)
      end

      def parse_multipart
        Rack::Multipart.extract_multipart(self, query_parser)
      end

      def split_header(value)
        value ? value.strip.split(/[,\s]+/) : []
      end

      # ipv6 extracted from resolv stdlib, simplified
      # to remove numbered match group creation.
      ipv6 = Regexp.union(
        /(?:[0-9A-Fa-f]{1,4}:){7}
         [0-9A-Fa-f]{1,4}/x,
        /(?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)? ::
         (?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?/x,
        /(?:[0-9A-Fa-f]{1,4}:){6,6}
         \d+\.\d+\.\d+\.\d+/x,
        /(?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)? ::
         (?:[0-9A-Fa-f]{1,4}:)*
         \d+\.\d+\.\d+\.\d+/x,
        /[Ff][Ee]80
         (?::[0-9A-Fa-f]{1,4}){7}
         %[-0-9A-Za-z._~]+/x,
        /[Ff][Ee]80:
         (?:
           (?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)? ::
           (?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?
           |
           :(?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?
         )?
         :[0-9A-Fa-f]{1,4}%[-0-9A-Za-z._~]+/x)

      AUTHORITY = /
        \A
        (?<host>
          # Match IPv6 as a string of hex digits and colons in square brackets
          \[(?<address>#{ipv6})\]
          |
          # Match any other printable string (except square brackets) as a hostname
          (?<address>[[[:graph:]&&[^\[\]]]]*?)
        )
        (:(?<port>\d+))?
        \z
      /x

      private_constant :AUTHORITY

      def split_authority(authority)
        return [] if authority.nil?
        return [] unless match = AUTHORITY.match(authority)
        return match[:host], match[:address], match[:port]&.to_i
      end

      def reject_trusted_ip_addresses(ip_addresses)
        ip_addresses.reject { |ip| trusted_proxy?(ip) }
      end

      FORWARDED_SCHEME_HEADERS = {
        proto: HTTP_X_FORWARDED_PROTO,
        scheme: HTTP_X_FORWARDED_SCHEME
      }.freeze
      private_constant :FORWARDED_SCHEME_HEADERS
      def forwarded_scheme
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if (forwarded_proto = get_http_forwarded(:proto)) &&
               (scheme = allowed_scheme(forwarded_proto.last))
              return scheme
            end
          when :x_forwarded
            x_forwarded_proto_priority.each do |x_type|
              if header = FORWARDED_SCHEME_HEADERS[x_type]
                split_header(get_header(header)).reverse_each do |scheme|
                  if allowed_scheme(scheme)
                    return scheme
                  end
                end
              end
            end
          end
        end

        nil
      end

      def allowed_scheme(header)
        header if ALLOWED_SCHEMES.include?(header)
      end

      def forwarded_priority
        Request.forwarded_priority
      end

      def x_forwarded_proto_priority
        Request.x_forwarded_proto_priority
      end
    end

    include Env
    include Helpers
  end
end

# :nocov:
require_relative 'multipart' unless defined?(Rack::Multipart)
# :nocov:
PK*J[ɸHO��.share/gems/gems/rack-3.0.8/lib/rack/version.rbnu�[���# frozen_string_literal: true

# Copyright (C) 2007-2019 Leah Neukirchen <http://leahneukirchen.org/infopage.html>
#
# Rack is freely distributable under the terms of an MIT-style license.
# See MIT-LICENSE or https://opensource.org/licenses/MIT.

# The Rack main module, serving as a namespace for all core Rack
# modules and classes.
#
# All modules meant for use in your application are <tt>autoload</tt>ed here,
# so it should be enough just to <tt>require 'rack'</tt> in your code.

module Rack
  # The Rack protocol version number implemented.
  VERSION = [1, 3].freeze
  deprecate_constant :VERSION

  VERSION_STRING = "1.3".freeze
  deprecate_constant :VERSION_STRING

  # The Rack protocol version number implemented.
  def self.version
    warn "Rack.version is deprecated and will be removed in Rack 3.1!", uplevel: 1
    VERSION
  end

  RELEASE = "3.0.8"

  # Return the Rack release as a dotted string.
  def self.release
    RELEASE
  end
end
PK*J[O�i���.share/gems/gems/rack-3.0.8/lib/rack/headers.rbnu�[���module Rack
  # Rack::Headers is a Hash subclass that downcases all keys.  It's designed
  # to be used by rack applications that don't implement the Rack 3 SPEC
  # (by using non-lowercase response header keys), automatically handling
  # the downcasing of keys.
  class Headers < Hash
    def self.[](*items)
      if items.length % 2 != 0
        if items.length == 1 && items.first.is_a?(Hash)
          new.merge!(items.first)
        else
          raise ArgumentError, "odd number of arguments for Rack::Headers"
        end
      else
        hash = new
        loop do
          break if items.length == 0
          key = items.shift
          value = items.shift
          hash[key] = value
        end
        hash
      end
    end

    def [](key)
      super(downcase_key(key))
    end

    def []=(key, value)
      super(key.downcase.freeze, value)
    end
    alias store []=

    def assoc(key)
      super(downcase_key(key))
    end

    def compare_by_identity
      raise TypeError, "Rack::Headers cannot compare by identity, use regular Hash"
    end

    def delete(key)
      super(downcase_key(key))
    end

    def dig(key, *a)
      super(downcase_key(key), *a)
    end

    def fetch(key, *default, &block)
      key = downcase_key(key)
      super
    end

    def fetch_values(*a)
      super(*a.map!{|key| downcase_key(key)})
    end

    def has_key?(key)
      super(downcase_key(key))
    end
    alias include? has_key?
    alias key? has_key?
    alias member? has_key?

    def invert
      hash = self.class.new
      each{|key, value| hash[value] = key}
      hash
    end

    def merge(hash, &block)
      dup.merge!(hash, &block)
    end

    def reject(&block)
      hash = dup
      hash.reject!(&block)
      hash
    end

    def replace(hash)
      clear
      update(hash)
    end

    def select(&block)
      hash = dup
      hash.select!(&block)
      hash
    end

    def to_proc
      lambda{|x| self[x]}
    end

    def transform_values(&block)
      dup.transform_values!(&block)
    end

    def update(hash, &block)
      hash.each do |key, value|
        self[key] = if block_given? && include?(key)
          block.call(key, self[key], value)
        else
          value
        end
      end
      self
    end
    alias merge! update

    def values_at(*keys)
      keys.map{|key| self[key]}
    end

    # :nocov:
    if RUBY_VERSION >= '2.5'
    # :nocov:
      def slice(*a)
        h = self.class.new
        a.each{|k| h[k] = self[k] if has_key?(k)}
        h
      end

      def transform_keys(&block)
        dup.transform_keys!(&block)
      end

      def transform_keys!
        hash = self.class.new
        each do |k, v|
          hash[yield k] = v
        end
        replace(hash)
      end
    end

    # :nocov:
    if RUBY_VERSION >= '3.0'
    # :nocov:
      def except(*a)
        super(*a.map!{|key| downcase_key(key)})
      end
    end

    private

    def downcase_key(key)
      key.is_a?(String) ? key.downcase : key
    end
  end
end
PK*J[�|��,share/gems/gems/rack-3.0.8/lib/rack/files.rbnu�[���# frozen_string_literal: true

require 'time'

require_relative 'constants'
require_relative 'head'
require_relative 'utils'
require_relative 'request'
require_relative 'mime'

module Rack
  # Rack::Files serves files below the +root+ directory given, according to the
  # path info of the Rack request.
  # e.g. when Rack::Files.new("/etc") is used, you can access 'passwd' file
  # as http://localhost:9292/passwd
  #
  # Handlers can detect if bodies are a Rack::Files, and use mechanisms
  # like sendfile on the +path+.

  class Files
    ALLOWED_VERBS = %w[GET HEAD OPTIONS]
    ALLOW_HEADER = ALLOWED_VERBS.join(', ')
    MULTIPART_BOUNDARY = 'AaB03x'

    attr_reader :root

    def initialize(root, headers = {}, default_mime = 'text/plain')
      @root = (::File.expand_path(root) if root)
      @headers = headers
      @default_mime = default_mime
      @head = Rack::Head.new(lambda { |env| get env })
    end

    def call(env)
      # HEAD requests drop the response body, including 4xx error messages.
      @head.call env
    end

    def get(env)
      request = Rack::Request.new env
      unless ALLOWED_VERBS.include? request.request_method
        return fail(405, "Method Not Allowed", { 'allow' => ALLOW_HEADER })
      end

      path_info = Utils.unescape_path request.path_info
      return fail(400, "Bad Request") unless Utils.valid_path?(path_info)

      clean_path_info = Utils.clean_path_info(path_info)
      path = ::File.join(@root, clean_path_info)

      available = begin
        ::File.file?(path) && ::File.readable?(path)
      rescue SystemCallError
        # Not sure in what conditions this exception can occur, but this
        # is a safe way to handle such an error.
        # :nocov:
        false
        # :nocov:
      end

      if available
        serving(request, path)
      else
        fail(404, "File not found: #{path_info}")
      end
    end

    def serving(request, path)
      if request.options?
        return [200, { 'allow' => ALLOW_HEADER, CONTENT_LENGTH => '0' }, []]
      end
      last_modified = ::File.mtime(path).httpdate
      return [304, {}, []] if request.get_header('HTTP_IF_MODIFIED_SINCE') == last_modified

      headers = { "last-modified" => last_modified }
      mime_type = mime_type path, @default_mime
      headers[CONTENT_TYPE] = mime_type if mime_type

      # Set custom headers
      headers.merge!(@headers) if @headers

      status = 200
      size = filesize path

      ranges = Rack::Utils.get_byte_ranges(request.get_header('HTTP_RANGE'), size)
      if ranges.nil?
        # No ranges:
        ranges = [0..size - 1]
      elsif ranges.empty?
        # Unsatisfiable. Return error, and file size:
        response = fail(416, "Byte range unsatisfiable")
        response[1]["content-range"] = "bytes */#{size}"
        return response
      else
        # Partial content
        partial_content = true

        if ranges.size == 1
          range = ranges[0]
          headers["content-range"] = "bytes #{range.begin}-#{range.end}/#{size}"
        else
          headers[CONTENT_TYPE] = "multipart/byteranges; boundary=#{MULTIPART_BOUNDARY}"
        end

        status = 206
        body = BaseIterator.new(path, ranges, mime_type: mime_type, size: size)
        size = body.bytesize
      end

      headers[CONTENT_LENGTH] = size.to_s

      if request.head?
        body = []
      elsif !partial_content
        body = Iterator.new(path, ranges, mime_type: mime_type, size: size)
      end

      [status, headers, body]
    end

    class BaseIterator
      attr_reader :path, :ranges, :options

      def initialize(path, ranges, options)
        @path = path
        @ranges = ranges
        @options = options
      end

      def each
        ::File.open(path, "rb") do |file|
          ranges.each do |range|
            yield multipart_heading(range) if multipart?

            each_range_part(file, range) do |part|
              yield part
            end
          end

          yield "\r\n--#{MULTIPART_BOUNDARY}--\r\n" if multipart?
        end
      end

      def bytesize
        size = ranges.inject(0) do |sum, range|
          sum += multipart_heading(range).bytesize if multipart?
          sum += range.size
        end
        size += "\r\n--#{MULTIPART_BOUNDARY}--\r\n".bytesize if multipart?
        size
      end

      def close; end

      private

      def multipart?
        ranges.size > 1
      end

      def multipart_heading(range)
<<-EOF
\r
--#{MULTIPART_BOUNDARY}\r
content-type: #{options[:mime_type]}\r
content-range: bytes #{range.begin}-#{range.end}/#{options[:size]}\r
\r
EOF
      end

      def each_range_part(file, range)
        file.seek(range.begin)
        remaining_len = range.end - range.begin + 1
        while remaining_len > 0
          part = file.read([8192, remaining_len].min)
          break unless part
          remaining_len -= part.length

          yield part
        end
      end
    end

    class Iterator < BaseIterator
      alias :to_path :path
    end

    private

    def fail(status, body, headers = {})
      body += "\n"

      [
        status,
        {
          CONTENT_TYPE   => "text/plain",
          CONTENT_LENGTH => body.size.to_s,
          "x-cascade" => "pass"
        }.merge!(headers),
        [body]
      ]
    end

    # The MIME type for the contents of the file located at @path
    def mime_type(path, default_mime)
      Mime.mime_type(::File.extname(path), default_mime)
    end

    def filesize(path)
      #   We check via File::size? whether this file provides size info
      #   via stat (e.g. /proc files often don't), otherwise we have to
      #   figure it out by reading the whole file into memory.
      ::File.size?(path) || ::File.read(path).bytesize
    end
  end
end
PK*J[�&�{!{!3share/gems/gems/rack-3.0.8/lib/rack/query_parser.rbnu�[���# frozen_string_literal: true

require 'uri'

module Rack
  class QueryParser
    DEFAULT_SEP = /[&] */n
    COMMON_SEP = { ";" => /[;] */n, ";," => /[;,] */n, "&" => /[&] */n }

    # ParameterTypeError is the error that is raised when incoming structural
    # parameters (parsed by parse_nested_query) contain conflicting types.
    class ParameterTypeError < TypeError; end

    # InvalidParameterError is the error that is raised when incoming structural
    # parameters (parsed by parse_nested_query) contain invalid format or byte
    # sequence.
    class InvalidParameterError < ArgumentError; end

    # ParamsTooDeepError is the error that is raised when params are recursively
    # nested over the specified limit.
    class ParamsTooDeepError < RangeError; end

    def self.make_default(_key_space_limit=(not_deprecated = true; nil), param_depth_limit)
      unless not_deprecated
        warn("`first argument `key_space limit` is deprecated and no longer has an effect. Please call with only one argument, which will be required in a future version of Rack", uplevel: 1)
      end

      new Params, param_depth_limit
    end

    attr_reader :param_depth_limit

    def initialize(params_class, _key_space_limit=(not_deprecated = true; nil), param_depth_limit)
      unless not_deprecated
        warn("`second argument `key_space limit` is deprecated and no longer has an effect. Please call with only two arguments, which will be required in a future version of Rack", uplevel: 1)
      end

      @params_class = params_class
      @param_depth_limit = param_depth_limit
    end

    # Stolen from Mongrel, with some small modifications:
    # Parses a query string by breaking it up at the '&'.  You can also use this
    # to parse cookies by changing the characters used in the second parameter
    # (which defaults to '&').
    def parse_query(qs, separator = nil, &unescaper)
      unescaper ||= method(:unescape)

      params = make_params

      (qs || '').split(separator ? (COMMON_SEP[separator] || /[#{separator}] */n) : DEFAULT_SEP).each do |p|
        next if p.empty?
        k, v = p.split('=', 2).map!(&unescaper)

        if cur = params[k]
          if cur.class == Array
            params[k] << v
          else
            params[k] = [cur, v]
          end
        else
          params[k] = v
        end
      end

      return params.to_h
    end

    # parse_nested_query expands a query string into structural types. Supported
    # types are Arrays, Hashes and basic value types. It is possible to supply
    # query strings with parameters of conflicting types, in this case a
    # ParameterTypeError is raised. Users are encouraged to return a 400 in this
    # case.
    def parse_nested_query(qs, separator = nil)
      params = make_params

      unless qs.nil? || qs.empty?
        (qs || '').split(separator ? (COMMON_SEP[separator] || /[#{separator}] */n) : DEFAULT_SEP).each do |p|
          k, v = p.split('=', 2).map! { |s| unescape(s) }

          _normalize_params(params, k, v, 0)
        end
      end

      return params.to_h
    rescue ArgumentError => e
      raise InvalidParameterError, e.message, e.backtrace
    end

    # normalize_params recursively expands parameters into structural types. If
    # the structural types represented by two different parameter names are in
    # conflict, a ParameterTypeError is raised.  The depth argument is deprecated
    # and should no longer be used, it is kept for backwards compatibility with
    # earlier versions of rack.
    def normalize_params(params, name, v, _depth=nil)
      _normalize_params(params, name, v, 0)
    end

    private def _normalize_params(params, name, v, depth)
      raise ParamsTooDeepError if depth >= param_depth_limit

      if !name
        # nil name, treat same as empty string (required by tests)
        k = after = ''
      elsif depth == 0
        # Start of parsing, don't treat [] or [ at start of string specially
        if start = name.index('[', 1)
          # Start of parameter nesting, use part before brackets as key
          k = name[0, start]
          after = name[start, name.length]
        else
          # Plain parameter with no nesting
          k = name
          after = ''
        end
      elsif name.start_with?('[]')
        # Array nesting
        k = '[]'
        after = name[2, name.length]
      elsif name.start_with?('[') && (start = name.index(']', 1))
        # Hash nesting, use the part inside brackets as the key
        k = name[1, start-1]
        after = name[start+1, name.length]
      else
        # Probably malformed input, nested but not starting with [
        # treat full name as key for backwards compatibility.
        k = name
        after = ''
      end

      return if k.empty?

      if after == ''
        if k == '[]' && depth != 0
          return [v]
        else
          params[k] = v
        end
      elsif after == "["
        params[name] = v
      elsif after == "[]"
        params[k] ||= []
        raise ParameterTypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
        params[k] << v
      elsif after.start_with?('[]')
        # Recognize x[][y] (hash inside array) parameters
        unless after[2] == '[' && after.end_with?(']') && (child_key = after[3, after.length-4]) && !child_key.empty? && !child_key.index('[') && !child_key.index(']')
          # Handle other nested array parameters
          child_key = after[2, after.length]
        end
        params[k] ||= []
        raise ParameterTypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
        if params_hash_type?(params[k].last) && !params_hash_has_key?(params[k].last, child_key)
          _normalize_params(params[k].last, child_key, v, depth + 1)
        else
          params[k] << _normalize_params(make_params, child_key, v, depth + 1)
        end
      else
        params[k] ||= make_params
        raise ParameterTypeError, "expected Hash (got #{params[k].class.name}) for param `#{k}'" unless params_hash_type?(params[k])
        params[k] = _normalize_params(params[k], after, v, depth + 1)
      end

      params
    end

    def make_params
      @params_class.new
    end

    def new_depth_limit(param_depth_limit)
      self.class.new @params_class, param_depth_limit
    end

    private

    def params_hash_type?(obj)
      obj.kind_of?(@params_class)
    end

    def params_hash_has_key?(hash, key)
      return false if /\[\]/.match?(key)

      key.split(/[\[\]]+/).inject(hash) do |h, part|
        next h if part == ''
        return false unless params_hash_type?(h) && h.key?(part)
        h[part]
      end

      true
    end

    def unescape(string, encoding = Encoding::UTF_8)
      URI.decode_www_form_component(string, encoding)
    end

    class Params
      def initialize
        @size   = 0
        @params = {}
      end

      def [](key)
        @params[key]
      end

      def []=(key, value)
        @params[key] = value
      end

      def key?(key)
        @params.key?(key)
      end

      # Recursively unwraps nested `Params` objects and constructs an object
      # of the same shape, but using the objects' internal representations
      # (Ruby hashes) in place of the objects. The result is a hash consisting
      # purely of Ruby primitives.
      #
      #   Mutation warning!
      #
      #   1. This method mutates the internal representation of the `Params`
      #      objects in order to save object allocations.
      #
      #   2. The value you get back is a reference to the internal hash
      #      representation, not a copy.
      #
      #   3. Because the `Params` object's internal representation is mutable
      #      through the `#[]=` method, it is not thread safe. The result of
      #      getting the hash representation while another thread is adding a
      #      key to it is non-deterministic.
      #
      def to_h
        @params.each do |key, value|
          case value
          when self
            # Handle circular references gracefully.
            @params[key] = @params
          when Params
            @params[key] = value.to_h
          when Array
            value.map! { |v| v.kind_of?(Params) ? v.to_h : v }
          else
            # Ignore anything that is not a `Params` object or
            # a collection that can contain one.
          end
        end
        @params
      end
      alias_method :to_params_hash, :to_h
    end
  end
end
PK*J[�/�{{3share/gems/gems/rack-3.0.8/lib/rack/mock_request.rbnu�[���# frozen_string_literal: true

require 'uri'
require 'stringio'

require_relative 'constants'
require_relative 'mock_response'

module Rack
  # Rack::MockRequest helps testing your Rack application without
  # actually using HTTP.
  #
  # After performing a request on a URL with get/post/put/patch/delete, it
  # returns a MockResponse with useful helper methods for effective
  # testing.
  #
  # You can pass a hash with additional configuration to the
  # get/post/put/patch/delete.
  # <tt>:input</tt>:: A String or IO-like to be used as rack.input.
  # <tt>:fatal</tt>:: Raise a FatalWarning if the app writes to rack.errors.
  # <tt>:lint</tt>:: If true, wrap the application in a Rack::Lint.

  class MockRequest
    class FatalWarning < RuntimeError
    end

    class FatalWarner
      def puts(warning)
        raise FatalWarning, warning
      end

      def write(warning)
        raise FatalWarning, warning
      end

      def flush
      end

      def string
        ""
      end
    end

    DEFAULT_ENV = {
      RACK_INPUT        => StringIO.new,
      RACK_ERRORS       => StringIO.new,
    }.freeze

    def initialize(app)
      @app = app
    end

    # Make a GET request and return a MockResponse. See #request.
    def get(uri, opts = {})     request(GET, uri, opts)     end
    # Make a POST request and return a MockResponse. See #request.
    def post(uri, opts = {})    request(POST, uri, opts)    end
    # Make a PUT request and return a MockResponse. See #request.
    def put(uri, opts = {})     request(PUT, uri, opts)     end
    # Make a PATCH request and return a MockResponse. See #request.
    def patch(uri, opts = {})   request(PATCH, uri, opts)   end
    # Make a DELETE request and return a MockResponse. See #request.
    def delete(uri, opts = {})  request(DELETE, uri, opts)  end
    # Make a HEAD request and return a MockResponse. See #request.
    def head(uri, opts = {})    request(HEAD, uri, opts)    end
    # Make an OPTIONS request and return a MockResponse. See #request.
    def options(uri, opts = {}) request(OPTIONS, uri, opts) end

    # Make a request using the given request method for the given
    # uri to the rack application and return a MockResponse.
    # Options given are passed to MockRequest.env_for.
    def request(method = GET, uri = "", opts = {})
      env = self.class.env_for(uri, opts.merge(method: method))

      if opts[:lint]
        app = Rack::Lint.new(@app)
      else
        app = @app
      end

      errors = env[RACK_ERRORS]
      status, headers, body = app.call(env)
      MockResponse.new(status, headers, body, errors)
    ensure
      body.close if body.respond_to?(:close)
    end

    # For historical reasons, we're pinning to RFC 2396.
    # URI::Parser = URI::RFC2396_Parser
    def self.parse_uri_rfc2396(uri)
      @parser ||= URI::Parser.new
      @parser.parse(uri)
    end

    # Return the Rack environment used for a request to +uri+.
    # All options that are strings are added to the returned environment.
    # Options:
    # :fatal :: Whether to raise an exception if request outputs to rack.errors
    # :input :: The rack.input to set
    # :http_version :: The SERVER_PROTOCOL to set
    # :method :: The HTTP request method to use
    # :params :: The params to use
    # :script_name :: The SCRIPT_NAME to set
    def self.env_for(uri = "", opts = {})
      uri = parse_uri_rfc2396(uri)
      uri.path = "/#{uri.path}" unless uri.path[0] == ?/

      env = DEFAULT_ENV.dup

      env[REQUEST_METHOD]  = (opts[:method] ? opts[:method].to_s.upcase : GET).b
      env[SERVER_NAME]     = (uri.host || "example.org").b
      env[SERVER_PORT]     = (uri.port ? uri.port.to_s : "80").b
      env[SERVER_PROTOCOL] = opts[:http_version] || 'HTTP/1.1'
      env[QUERY_STRING]    = (uri.query.to_s).b
      env[PATH_INFO]       = (uri.path).b
      env[RACK_URL_SCHEME] = (uri.scheme || "http").b
      env[HTTPS]           = (env[RACK_URL_SCHEME] == "https" ? "on" : "off").b

      env[SCRIPT_NAME] = opts[:script_name] || ""

      if opts[:fatal]
        env[RACK_ERRORS] = FatalWarner.new
      else
        env[RACK_ERRORS] = StringIO.new
      end

      if params = opts[:params]
        if env[REQUEST_METHOD] == GET
          params = Utils.parse_nested_query(params) if params.is_a?(String)
          params.update(Utils.parse_nested_query(env[QUERY_STRING]))
          env[QUERY_STRING] = Utils.build_nested_query(params)
        elsif !opts.has_key?(:input)
          opts["CONTENT_TYPE"] = "application/x-www-form-urlencoded"
          if params.is_a?(Hash)
            if data = Rack::Multipart.build_multipart(params)
              opts[:input] = data
              opts["CONTENT_LENGTH"] ||= data.length.to_s
              opts["CONTENT_TYPE"] = "multipart/form-data; boundary=#{Rack::Multipart::MULTIPART_BOUNDARY}"
            else
              opts[:input] = Utils.build_nested_query(params)
            end
          else
            opts[:input] = params
          end
        end
      end

      opts[:input] ||= String.new
      if String === opts[:input]
        rack_input = StringIO.new(opts[:input])
      else
        rack_input = opts[:input]
      end

      rack_input.set_encoding(Encoding::BINARY)
      env[RACK_INPUT] = rack_input

      env["CONTENT_LENGTH"] ||= env[RACK_INPUT].size.to_s if env[RACK_INPUT].respond_to?(:size)

      opts.each { |field, value|
        env[field] = value  if String === field
      }

      env
    end
  end
end
PK*J[;�`�ff.share/gems/gems/rack-3.0.8/lib/rack/runtime.rbnu�[���# frozen_string_literal: true

require_relative 'utils'

module Rack
  # Sets an "x-runtime" response header, indicating the response
  # time of the request, in seconds
  #
  # You can put it right before the application to see the processing
  # time, or before all the other middlewares to include time for them,
  # too.
  class Runtime
    FORMAT_STRING = "%0.6f" # :nodoc:
    HEADER_NAME = "x-runtime" # :nodoc:

    def initialize(app, name = nil)
      @app = app
      @header_name = HEADER_NAME
      @header_name += "-#{name.to_s.downcase}" if name
    end

    def call(env)
      start_time = Utils.clock_time
      _, headers, _ = response = @app.call(env)

      request_time = Utils.clock_time - start_time

      unless headers.key?(@header_name)
        headers[@header_name] = FORMAT_STRING % request_time
      end

      response
    end
  end
end
PK*J[iZ�&&5share/gems/gems/rack-3.0.8/lib/rack/content_length.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

module Rack

  # Sets the content-length header on responses that do not specify
  # a content-length or transfer-encoding header.  Note that this
  # does not fix responses that have an invalid content-length
  # header specified.
  class ContentLength
    include Rack::Utils

    def initialize(app)
      @app = app
    end

    def call(env)
      status, headers, body = response = @app.call(env)

      if !STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i) &&
         !headers[CONTENT_LENGTH] &&
         !headers[TRANSFER_ENCODING] &&
         body.respond_to?(:to_ary)

        response[2] = body = body.to_ary
        headers[CONTENT_LENGTH] = body.sum(&:bytesize).to_s
      end

      response
    end
  end
end
PK*J[�R�

4share/gems/gems/rack-3.0.8/lib/rack/mock_response.rbnu�[���# frozen_string_literal: true

require 'cgi/cookie'
require 'time'

require_relative 'response'

module Rack
  # Rack::MockResponse provides useful helpers for testing your apps.
  # Usually, you don't create the MockResponse on your own, but use
  # MockRequest.

  class MockResponse < Rack::Response
    class << self
      alias [] new
    end

    # Headers
    attr_reader :original_headers, :cookies

    # Errors
    attr_accessor :errors

    def initialize(status, headers, body, errors = nil)
      @original_headers = headers

      if errors
        @errors = errors.string if errors.respond_to?(:string)
      else
        @errors = ""
      end

      super(body, status, headers)

      @cookies = parse_cookies_from_header
      buffered_body!
    end

    def =~(other)
      body =~ other
    end

    def match(other)
      body.match other
    end

    def body
      return @buffered_body if defined?(@buffered_body)

      # FIXME: apparently users of MockResponse expect the return value of
      # MockResponse#body to be a string.  However, the real response object
      # returns the body as a list.
      #
      # See spec_showstatus.rb:
      #
      #   should "not replace existing messages" do
      #     ...
      #     res.body.should == "foo!"
      #   end
      buffer = @buffered_body = String.new

      @body.each do |chunk|
        buffer << chunk
      end

      return buffer
    end

    def empty?
      [201, 204, 304].include? status
    end

    def cookie(name)
      cookies.fetch(name, nil)
    end

    private

    def parse_cookies_from_header
      cookies = Hash.new
      if headers.has_key? 'set-cookie'
        set_cookie_header = headers.fetch('set-cookie')
        Array(set_cookie_header).each do |header_value|
          header_value.split("\n").each do |cookie|
            cookie_name, cookie_filling = cookie.split('=', 2)
            cookie_attributes = identify_cookie_attributes cookie_filling
            parsed_cookie = CGI::Cookie.new(
              'name' => cookie_name.strip,
              'value' => cookie_attributes.fetch('value'),
              'path' => cookie_attributes.fetch('path', nil),
              'domain' => cookie_attributes.fetch('domain', nil),
              'expires' => cookie_attributes.fetch('expires', nil),
              'secure' => cookie_attributes.fetch('secure', false)
            )
            cookies.store(cookie_name, parsed_cookie)
          end
        end
      end
      cookies
    end

    def identify_cookie_attributes(cookie_filling)
      cookie_bits = cookie_filling.split(';')
      cookie_attributes = Hash.new
      cookie_attributes.store('value', cookie_bits[0].strip)
      cookie_bits.drop(1).each do |bit|
        if bit.include? '='
          cookie_attribute, attribute_value = bit.split('=', 2)
          cookie_attributes.store(cookie_attribute.strip.downcase, attribute_value.strip)
        end
        if bit.include? 'secure'
          cookie_attributes.store('secure', true)
        end
      end

      if cookie_attributes.key? 'max-age'
        cookie_attributes.store('expires', Time.now + cookie_attributes['max-age'].to_i)
      elsif cookie_attributes.key? 'expires'
        cookie_attributes.store('expires', Time.httpdate(cookie_attributes['expires']))
      end

      cookie_attributes
    end

  end
end
PK*J[�gG��1share/gems/gems/rack-3.0.8/lib/rack/media_type.rbnu�[���# frozen_string_literal: true

module Rack
  # Rack::MediaType parse media type and parameters out of content_type string

  class MediaType
    SPLIT_PATTERN = %r{\s*[;,]\s*}

    class << self
      # The media type (type/subtype) portion of the CONTENT_TYPE header
      # without any media type parameters. e.g., when CONTENT_TYPE is
      # "text/plain;charset=utf-8", the media-type is "text/plain".
      #
      # For more information on the use of media types in HTTP, see:
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
      def type(content_type)
        return nil unless content_type
        content_type.split(SPLIT_PATTERN, 2).first.tap(&:downcase!)
      end

      # The media type parameters provided in CONTENT_TYPE as a Hash, or
      # an empty Hash if no CONTENT_TYPE or media-type parameters were
      # provided.  e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8",
      # this method responds with the following Hash:
      #   { 'charset' => 'utf-8' }
      def params(content_type)
        return {} if content_type.nil?

        content_type.split(SPLIT_PATTERN)[1..-1].each_with_object({}) do |s, hsh|
          k, v = s.split('=', 2)

          hsh[k.tap(&:downcase!)] = strip_doublequotes(v)
        end
      end

      private

        def strip_doublequotes(str)
          (str.start_with?('"') && str.end_with?('"')) ? str[1..-2] : str
        end
    end
  end
end
PK*J[��Y		.share/gems/gems/rack-3.0.8/lib/rack/cascade.rbnu�[���# frozen_string_literal: true

require_relative 'constants'

module Rack
  # Rack::Cascade tries a request on several apps, and returns the
  # first response that is not 404 or 405 (or in a list of configured
  # status codes).  If all applications tried return one of the configured
  # status codes, return the last response.

  class Cascade
    # deprecated, no longer used
    NotFound = [404, { CONTENT_TYPE => "text/plain" }, []]

    # An array of applications to try in order.
    attr_reader :apps

    # Set the apps to send requests to, and what statuses result in
    # cascading.  Arguments:
    #
    # apps: An enumerable of rack applications.
    # cascade_for: The statuses to use cascading for.  If a response is received
    #              from an app, the next app is tried.
    def initialize(apps, cascade_for = [404, 405])
      @apps = []
      apps.each { |app| add app }

      @cascade_for = {}
      [*cascade_for].each { |status| @cascade_for[status] = true }
    end

    # Call each app in order.  If the responses uses a status that requires
    # cascading, try the next app.  If all responses require cascading,
    # return the response from the last app.
    def call(env)
      return [404, { CONTENT_TYPE => "text/plain" }, []] if @apps.empty?
      result = nil
      last_body = nil

      @apps.each do |app|
        # The SPEC says that the body must be closed after it has been iterated
        # by the server, or if it is replaced by a middleware action. Cascade
        # replaces the body each time a cascade happens. It is assumed that nil
        # does not respond to close, otherwise the previous application body
        # will be closed. The final application body will not be closed, as it
        # will be passed to the server as a result.
        last_body.close if last_body.respond_to? :close

        result = app.call(env)
        return result unless @cascade_for.include?(result[0].to_i)
        last_body = result[2]
      end

      result
    end

    # Append an app to the list of apps to cascade.  This app will
    # be tried last.
    def add(app)
      @apps << app
    end

    # Whether the given app is one of the apps to cascade to.
    def include?(app)
      @apps.include?(app)
    end

    alias_method :<<, :add
  end
end
PK*J[Y4��88/share/gems/gems/rack-3.0.8/lib/rack/sendfile.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'body_proxy'

module Rack

  # = Sendfile
  #
  # The Sendfile middleware intercepts responses whose body is being
  # served from a file and replaces it with a server specific x-sendfile
  # header. The web server is then responsible for writing the file contents
  # to the client. This can dramatically reduce the amount of work required
  # by the Ruby backend and takes advantage of the web server's optimized file
  # delivery code.
  #
  # In order to take advantage of this middleware, the response body must
  # respond to +to_path+ and the request must include an x-sendfile-type
  # header. Rack::Files and other components implement +to_path+ so there's
  # rarely anything you need to do in your application. The x-sendfile-type
  # header is typically set in your web servers configuration. The following
  # sections attempt to document
  #
  # === Nginx
  #
  # Nginx supports the x-accel-redirect header. This is similar to x-sendfile
  # but requires parts of the filesystem to be mapped into a private URL
  # hierarchy.
  #
  # The following example shows the Nginx configuration required to create
  # a private "/files/" area, enable x-accel-redirect, and pass the special
  # x-sendfile-type and x-accel-mapping headers to the backend:
  #
  #   location ~ /files/(.*) {
  #     internal;
  #     alias /var/www/$1;
  #   }
  #
  #   location / {
  #     proxy_redirect     off;
  #
  #     proxy_set_header   Host                $host;
  #     proxy_set_header   X-Real-IP           $remote_addr;
  #     proxy_set_header   X-Forwarded-For     $proxy_add_x_forwarded_for;
  #
  #     proxy_set_header   x-sendfile-type     x-accel-redirect;
  #     proxy_set_header   x-accel-mapping     /var/www/=/files/;
  #
  #     proxy_pass         http://127.0.0.1:8080/;
  #   }
  #
  # Note that the x-sendfile-type header must be set exactly as shown above.
  # The x-accel-mapping header should specify the location on the file system,
  # followed by an equals sign (=), followed name of the private URL pattern
  # that it maps to. The middleware performs a simple substitution on the
  # resulting path.
  #
  # See Also: https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile
  #
  # === lighttpd
  #
  # Lighttpd has supported some variation of the x-sendfile header for some
  # time, although only recent version support x-sendfile in a reverse proxy
  # configuration.
  #
  #   $HTTP["host"] == "example.com" {
  #      proxy-core.protocol = "http"
  #      proxy-core.balancer = "round-robin"
  #      proxy-core.backends = (
  #        "127.0.0.1:8000",
  #        "127.0.0.1:8001",
  #        ...
  #      )
  #
  #      proxy-core.allow-x-sendfile = "enable"
  #      proxy-core.rewrite-request = (
  #        "x-sendfile-type" => (".*" => "x-sendfile")
  #      )
  #    }
  #
  # See Also: http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore
  #
  # === Apache
  #
  # x-sendfile is supported under Apache 2.x using a separate module:
  #
  # https://tn123.org/mod_xsendfile/
  #
  # Once the module is compiled and installed, you can enable it using
  # XSendFile config directive:
  #
  #   RequestHeader Set x-sendfile-type x-sendfile
  #   ProxyPassReverse / http://localhost:8001/
  #   XSendFile on
  #
  # === Mapping parameter
  #
  # The third parameter allows for an overriding extension of the
  # x-accel-mapping header. Mappings should be provided in tuples of internal to
  # external. The internal values may contain regular expression syntax, they
  # will be matched with case indifference.

  class Sendfile
    def initialize(app, variation = nil, mappings = [])
      @app = app
      @variation = variation
      @mappings = mappings.map do |internal, external|
        [/^#{internal}/i, external]
      end
    end

    def call(env)
      _, headers, body = response = @app.call(env)

      if body.respond_to?(:to_path)
        case type = variation(env)
        when /x-accel-redirect/i
          path = ::File.expand_path(body.to_path)
          if url = map_accel_path(env, path)
            headers[CONTENT_LENGTH] = '0'
            # '?' must be percent-encoded because it is not query string but a part of path
            headers[type.downcase] = ::Rack::Utils.escape_path(url).gsub('?', '%3F')
            obody = body
            response[2] = Rack::BodyProxy.new([]) do
              obody.close if obody.respond_to?(:close)
            end
          else
            env[RACK_ERRORS].puts "x-accel-mapping header missing"
          end
        when /x-sendfile|x-lighttpd-send-file/i
          path = ::File.expand_path(body.to_path)
          headers[CONTENT_LENGTH] = '0'
          headers[type.downcase] = path
          obody = body
          response[2] = Rack::BodyProxy.new([]) do
            obody.close if obody.respond_to?(:close)
          end
        when '', nil
        else
          env[RACK_ERRORS].puts "Unknown x-sendfile variation: '#{type}'.\n"
        end
      end
      response
    end

    private
    def variation(env)
      @variation ||
        env['sendfile.type'] ||
        env['HTTP_X_SENDFILE_TYPE']
    end

    def map_accel_path(env, path)
      if mapping = @mappings.find { |internal, _| internal =~ path }
        path.sub(*mapping)
      elsif mapping = env['HTTP_X_ACCEL_MAPPING']
        mapping.split(',').map(&:strip).each do |m|
          internal, external = m.split('=', 2).map(&:strip)
          new_path = path.sub(/^#{internal}/i, external)
          return new_path unless path == new_path
        end
        path
      end
    end
  end
end
PK*J[M�}Y??+share/gems/gems/rack-3.0.8/lib/rack/mock.rbnu�[���# frozen_string_literal: true

require_relative 'mock_request'
PK*J[YY�d

6share/gems/gems/rack-3.0.8/lib/rack/tempfile_reaper.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'body_proxy'

module Rack

  # Middleware tracks and cleans Tempfiles created throughout a request (i.e. Rack::Multipart)
  # Ideas/strategy based on posts by Eric Wong and Charles Oliver Nutter
  # https://groups.google.com/forum/#!searchin/rack-devel/temp/rack-devel/brK8eh-MByw/sw61oJJCGRMJ
  class TempfileReaper
    def initialize(app)
      @app = app
    end

    def call(env)
      env[RACK_TEMPFILES] ||= []

      begin
        _, _, body = response = @app.call(env)
      rescue Exception
        env[RACK_TEMPFILES]&.each(&:close!)
        raise
      end

      response[2] = BodyProxy.new(body) do
        env[RACK_TEMPFILES]&.each(&:close!)
      end

      response
    end
  end
end
PK*J[@�j�	�	0share/gems/gems/rack-3.0.8/lib/rack/constants.rbnu�[���# frozen_string_literal: true

module Rack
  # Request env keys
  HTTP_HOST         = 'HTTP_HOST'
  HTTP_PORT         = 'HTTP_PORT'
  HTTPS             = 'HTTPS'
  PATH_INFO         = 'PATH_INFO'
  REQUEST_METHOD    = 'REQUEST_METHOD'
  REQUEST_PATH      = 'REQUEST_PATH'
  SCRIPT_NAME       = 'SCRIPT_NAME'
  QUERY_STRING      = 'QUERY_STRING'
  SERVER_PROTOCOL   = 'SERVER_PROTOCOL'
  SERVER_NAME       = 'SERVER_NAME'
  SERVER_PORT       = 'SERVER_PORT'
  HTTP_COOKIE       = 'HTTP_COOKIE'

  # Response Header Keys
  CACHE_CONTROL     = 'cache-control'
  CONTENT_LENGTH    = 'content-length'
  CONTENT_TYPE      = 'content-type'
  ETAG              = 'etag'
  EXPIRES           = 'expires'
  SET_COOKIE        = 'set-cookie'
  TRANSFER_ENCODING = 'transfer-encoding'

  # HTTP method verbs
  GET     = 'GET'
  POST    = 'POST'
  PUT     = 'PUT'
  PATCH   = 'PATCH'
  DELETE  = 'DELETE'
  HEAD    = 'HEAD'
  OPTIONS = 'OPTIONS'
  LINK    = 'LINK'
  UNLINK  = 'UNLINK'
  TRACE   = 'TRACE'

  # Rack environment variables
  RACK_VERSION                        = 'rack.version'
  RACK_TEMPFILES                      = 'rack.tempfiles'
  RACK_ERRORS                         = 'rack.errors'
  RACK_LOGGER                         = 'rack.logger'
  RACK_INPUT                          = 'rack.input'
  RACK_SESSION                        = 'rack.session'
  RACK_SESSION_OPTIONS                = 'rack.session.options'
  RACK_SHOWSTATUS_DETAIL              = 'rack.showstatus.detail'
  RACK_URL_SCHEME                     = 'rack.url_scheme'
  RACK_HIJACK                         = 'rack.hijack'
  RACK_IS_HIJACK                      = 'rack.hijack?'
  RACK_RECURSIVE_INCLUDE              = 'rack.recursive.include'
  RACK_MULTIPART_BUFFER_SIZE          = 'rack.multipart.buffer_size'
  RACK_MULTIPART_TEMPFILE_FACTORY     = 'rack.multipart.tempfile_factory'
  RACK_RESPONSE_FINISHED              = 'rack.response_finished'
  RACK_REQUEST_FORM_INPUT             = 'rack.request.form_input'
  RACK_REQUEST_FORM_HASH              = 'rack.request.form_hash'
  RACK_REQUEST_FORM_VARS              = 'rack.request.form_vars'
  RACK_REQUEST_FORM_ERROR             = 'rack.request.form_error'
  RACK_REQUEST_COOKIE_HASH            = 'rack.request.cookie_hash'
  RACK_REQUEST_COOKIE_STRING          = 'rack.request.cookie_string'
  RACK_REQUEST_QUERY_HASH             = 'rack.request.query_hash'
  RACK_REQUEST_QUERY_STRING           = 'rack.request.query_string'
  RACK_METHODOVERRIDE_ORIGINAL_METHOD = 'rack.methodoverride.original_method'
end
PK*J[U``"��0share/gems/gems/rack-3.0.8/lib/rack/multipart.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

require_relative 'multipart/parser'
require_relative 'multipart/generator'

module Rack
  # A multipart form data parser, adapted from IOWA.
  #
  # Usually, Rack::Request#POST takes care of calling this.
  module Multipart
    MULTIPART_BOUNDARY = "AaB03x"

    class << self
      def parse_multipart(env, params = Rack::Utils.default_query_parser)
        io = env[RACK_INPUT]

        if content_length = env['CONTENT_LENGTH']
          content_length = content_length.to_i
        end

        content_type = env['CONTENT_TYPE']

        tempfile = env[RACK_MULTIPART_TEMPFILE_FACTORY] || Parser::TEMPFILE_FACTORY
        bufsize = env[RACK_MULTIPART_BUFFER_SIZE] || Parser::BUFSIZE

        info = Parser.parse(io, content_length, content_type, tempfile, bufsize, params)
        env[RACK_TEMPFILES] = info.tmp_files

        return info.params
      end

      def extract_multipart(request, params = Rack::Utils.default_query_parser)
        parse_multipart(request.env)
      end

      def build_multipart(params, first = true)
        Generator.new(params, first).dump
      end
    end
  end
end
PK*J[��3���6share/gems/gems/rack-3.0.8/lib/rack/method_override.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'request'
require_relative 'utils'

module Rack
  class MethodOverride
    HTTP_METHODS = %w[GET HEAD PUT POST DELETE OPTIONS PATCH LINK UNLINK]

    METHOD_OVERRIDE_PARAM_KEY = "_method"
    HTTP_METHOD_OVERRIDE_HEADER = "HTTP_X_HTTP_METHOD_OVERRIDE"
    ALLOWED_METHODS = %w[POST]

    def initialize(app)
      @app = app
    end

    def call(env)
      if allowed_methods.include?(env[REQUEST_METHOD])
        method = method_override(env)
        if HTTP_METHODS.include?(method)
          env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] = env[REQUEST_METHOD]
          env[REQUEST_METHOD] = method
        end
      end

      @app.call(env)
    end

    def method_override(env)
      req = Request.new(env)
      method = method_override_param(req) ||
        env[HTTP_METHOD_OVERRIDE_HEADER]
      begin
        method.to_s.upcase
      rescue ArgumentError
        env[RACK_ERRORS].puts "Invalid string for method"
      end
    end

    private

    def allowed_methods
      ALLOWED_METHODS
    end

    def method_override_param(req)
      req.POST[METHOD_OVERRIDE_PARAM_KEY] if req.form_data? || req.parseable_data?
    rescue Utils::InvalidParameterError, Utils::ParameterTypeError, QueryParser::ParamsTooDeepError
      req.get_header(RACK_ERRORS).puts "Invalid or incomplete POST params"
    rescue EOFError
      req.get_header(RACK_ERRORS).puts "Bad request content body"
    end
  end
end
PK*J[М}���+share/gems/gems/rack-3.0.8/lib/rack/file.rbnu�[���# frozen_string_literal: true

require_relative 'files'

module Rack
  warn "Rack::File is deprecated and will be removed in Rack 3.1", uplevel: 1

  File = Files
end
PK*J[O�~�0share/gems/gems/rack-3.0.8/lib/rack/recursive.rbnu�[���# frozen_string_literal: true

require 'uri'

require_relative 'constants'

module Rack
  # Rack::ForwardRequest gets caught by Rack::Recursive and redirects
  # the current request to the app at +url+.
  #
  #   raise ForwardRequest.new("/not-found")
  #

  class ForwardRequest < Exception
    attr_reader :url, :env

    def initialize(url, env = {})
      @url = URI(url)
      @env = env

      @env[PATH_INFO]       = @url.path
      @env[QUERY_STRING]    = @url.query  if @url.query
      @env[HTTP_HOST]       = @url.host   if @url.host
      @env[HTTP_PORT]       = @url.port   if @url.port
      @env[RACK_URL_SCHEME] = @url.scheme if @url.scheme

      super "forwarding to #{url}"
    end
  end

  # Rack::Recursive allows applications called down the chain to
  # include data from other applications (by using
  # <tt>rack['rack.recursive.include'][...]</tt> or raise a
  # ForwardRequest to redirect internally.

  class Recursive
    def initialize(app)
      @app = app
    end

    def call(env)
      dup._call(env)
    end

    def _call(env)
      @script_name = env[SCRIPT_NAME]
      @app.call(env.merge(RACK_RECURSIVE_INCLUDE => method(:include)))
    rescue ForwardRequest => req
      call(env.merge(req.env))
    end

    def include(env, path)
      unless path.index(@script_name) == 0 && (path[@script_name.size] == ?/ ||
                                               path[@script_name.size].nil?)
        raise ArgumentError, "can only include below #{@script_name}, not #{path}"
      end

      env = env.merge(PATH_INFO => path,
                      SCRIPT_NAME => @script_name,
                      REQUEST_METHOD => GET,
                      "CONTENT_LENGTH" => "0", "CONTENT_TYPE" => "",
                      RACK_INPUT => StringIO.new(""))
      @app.call(env)
    end
  end
end
PK*J[���4
4
.share/gems/gems/rack-3.0.8/lib/rack/chunked.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

module Rack
  warn "Rack::Chunked is deprecated and will be removed in Rack 3.1", uplevel: 1

  # Middleware that applies chunked transfer encoding to response bodies
  # when the response does not include a content-length header.
  #
  # This supports the trailer response header to allow the use of trailing
  # headers in the chunked encoding.  However, using this requires you manually
  # specify a response body that supports a +trailers+ method.  Example:
  #
  #   [200, { 'trailer' => 'expires'}, ["Hello", "World"]]
  #   # error raised
  #
  #   body = ["Hello", "World"]
  #   def body.trailers
  #     { 'expires' => Time.now.to_s }
  #   end
  #   [200, { 'trailer' => 'expires'}, body]
  #   # No exception raised
  class Chunked
    include Rack::Utils

    # A body wrapper that emits chunked responses.
    class Body
      TERM = "\r\n"
      TAIL = "0#{TERM}"

      # Store the response body to be chunked.
      def initialize(body)
        @body = body
      end

      # For each element yielded by the response body, yield
      # the element in chunked encoding.
      def each(&block)
        term = TERM
        @body.each do |chunk|
          size = chunk.bytesize
          next if size == 0

          yield [size.to_s(16), term, chunk.b, term].join
        end
        yield TAIL
        yield_trailers(&block)
        yield term
      end

      # Close the response body if the response body supports it.
      def close
        @body.close if @body.respond_to?(:close)
      end

      private

      # Do nothing as this class does not support trailer headers.
      def yield_trailers
      end
    end

    # A body wrapper that emits chunked responses and also supports
    # sending Trailer headers.  Note that the response body provided to
    # initialize must have a +trailers+ method that returns a hash
    # of trailer headers, and the rack response itself should have a
    # Trailer header listing the headers that the +trailers+ method
    # will return.
    class TrailerBody < Body
      private

      # Yield strings for each trailer header.
      def yield_trailers
        @body.trailers.each_pair do |k, v|
          yield "#{k}: #{v}\r\n"
        end
      end
    end

    def initialize(app)
      @app = app
    end

    # Whether the HTTP version supports chunked encoding (HTTP 1.1 does).
    def chunkable_version?(ver)
      case ver
      # pre-HTTP/1.0 (informally "HTTP/0.9") HTTP requests did not have
      # a version (nor response headers)
      when 'HTTP/1.0', nil, 'HTTP/0.9'
        false
      else
        true
      end
    end

    # If the rack app returns a response that should have a body,
    # but does not have content-length or transfer-encoding headers,
    # modify the response to use chunked transfer-encoding.
    def call(env)
      status, headers, body = response = @app.call(env)

      if chunkable_version?(env[SERVER_PROTOCOL]) &&
         !STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i) &&
         !headers[CONTENT_LENGTH] &&
         !headers[TRANSFER_ENCODING]

        headers[TRANSFER_ENCODING] = 'chunked'
        if headers['trailer']
          response[2] = TrailerBody.new(body)
        else
          response[2] = Body.new(body)
        end
      end

      response
    end
  end
end
PK*J[d�NN2share/gems/gems/rack-3.0.8/lib/rack/show_status.rbnu�[���# frozen_string_literal: true

require 'erb'

require_relative 'constants'
require_relative 'utils'
require_relative 'request'
require_relative 'body_proxy'

module Rack
  # Rack::ShowStatus catches all empty responses and replaces them
  # with a site explaining the error.
  #
  # Additional details can be put into <tt>rack.showstatus.detail</tt>
  # and will be shown as HTML.  If such details exist, the error page
  # is always rendered, even if the reply was not empty.

  class ShowStatus
    def initialize(app)
      @app = app
      @template = ERB.new(TEMPLATE)
    end

    def call(env)
      status, headers, body = response = @app.call(env)
      empty = headers[CONTENT_LENGTH].to_i <= 0

      # client or server error, or explicit message
      if (status.to_i >= 400 && empty) || env[RACK_SHOWSTATUS_DETAIL]
        # This double assignment is to prevent an "unused variable" warning.
        # Yes, it is dumb, but I don't like Ruby yelling at me.
        req = req = Rack::Request.new(env)

        message = Rack::Utils::HTTP_STATUS_CODES[status.to_i] || status.to_s

        # This double assignment is to prevent an "unused variable" warning.
        # Yes, it is dumb, but I don't like Ruby yelling at me.
        detail = detail = env[RACK_SHOWSTATUS_DETAIL] || message

        html = @template.result(binding)
        size = html.bytesize

        response[2] = Rack::BodyProxy.new([html]) do
          body.close if body.respond_to?(:close)
        end

        headers[CONTENT_TYPE] = "text/html"
        headers[CONTENT_LENGTH] = size.to_s
      end

      response
    end

    def h(obj)                  # :nodoc:
      case obj
      when String
        Utils.escape_html(obj)
      else
        Utils.escape_html(obj.inspect)
      end
    end

    # :stopdoc:

# adapted from Django <www.djangoproject.com>
# Copyright (c) Django Software Foundation and individual contributors.
# Used under the modified BSD license:
# http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
TEMPLATE = <<'HTML'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title><%=h message %> at <%=h req.script_name + req.path_info %></title>
  <meta name="robots" content="NONE,NOARCHIVE" />
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60%; color:#666; font-weight:normal; }
    table { border:none; border-collapse: collapse; width:100%; }
    td, th { vertical-align:top; padding:2px 3px; }
    th { width:12em; text-align:right; color:#666; padding-right:.5em; }
    #info { background:#f6f6f6; }
    #info ol { margin: 0.5em 4em; }
    #info ol li { font-family: monospace; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
  <div id="summary">
    <h1><%=h message %> <span>(<%= status.to_i %>)</span></h1>
    <table class="meta">
      <tr>
        <th>Request Method:</th>
        <td><%=h req.request_method %></td>
      </tr>
      <tr>
        <th>Request URL:</th>
      <td><%=h req.url %></td>
      </tr>
    </table>
  </div>
  <div id="info">
    <p><%=h detail %></p>
  </div>

  <div id="explanation">
    <p>
    You're seeing this error because you use <code>Rack::ShowStatus</code>.
    </p>
  </div>
</body>
</html>
HTML

    # :startdoc:
  end
end
PK*J[G�	TT&share/gems/gems/rack-3.0.8/MIT-LICENSEnu�[���The MIT License (MIT)

Copyright (C) 2007-2021 Leah Neukirchen <http://leahneukirchen.org/infopage.html>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
PK*J[t2�����'share/gems/gems/rack-3.0.8/CHANGELOG.mdnu�[���# Changelog

All notable changes to this project will be documented in this file. For info on how to format all future additions to this file please reference [Keep A Changelog](https://keepachangelog.com/en/1.0.0/).

## [3.0.7] - 2023-03-16

- Make query parameters without `=` have `nil` values. ([#2059](https://github.com/rack/rack/pull/2059), [@jeremyevans])

## [3.0.6.1] - 2023-03-13

- [CVE-2023-27539] Avoid ReDoS in header parsing

## [3.0.6] - 2023-03-13

- Add `QueryParser#missing_value` for handling missing values + tests. ([#2052](https://github.com/rack/rack/pull/2052), [@ioquatix])

## [3.0.5] - 2023-03-13

- Split form/query parsing into two steps. ([#2038](https://github.com/rack/rack/pull/2038), [@matthewd](https://github.com/matthewd))

## [3.0.4.1] - 2023-03-02

- [CVE-2023-27530] Introduce multipart_total_part_limit to limit total parts

## [3.0.4.1] - 2023-01-17

- [CVE-2022-44571] Fix ReDoS vulnerability in multipart parser
- [CVE-2022-44570] Fix ReDoS in Rack::Utils.get_byte_ranges
- [CVE-2022-44572] Forbid control characters in attributes (also ReDoS)

## [3.0.4] - 2023-01-17

- `Rack::Request#POST` should consistently raise errors. Cache errors that occur when invoking `Rack::Request#POST` so they can be raised again later. ([#2010](https://github.com/rack/rack/pull/2010), [@ioquatix])
- Fix `Rack::Lint` error message for `HTTP_CONTENT_TYPE` and `HTTP_CONTENT_LENGTH`. ([#2007](https://github.com/rack/rack/pull/2007), [@byroot](https://github.com/byroot))
- Extend `Rack::MethodOverride` to handle `QueryParser::ParamsTooDeepError` error. ([#2006](https://github.com/rack/rack/pull/2006), [@byroot](https://github.com/byroot))

## [3.0.3] - 2022-12-27

### Fixed

- `Rack::URLMap` uses non-deprecated form of `Regexp.new`. ([#1998](https://github.com/rack/rack/pull/1998), [@weizheheng](https://github.com/weizheheng))

## [3.0.2] - 2022-12-05

### Fixed

- `Utils.build_nested_query` URL-encodes nested field names including the square brackets.
- Allow `Rack::Response` to pass through streaming bodies. ([#1993](https://github.com/rack/rack/pull/1993), [@ioquatix])

## [3.0.1] - 2022-11-18

### Fixed

- `MethodOverride` does not look for an override if a request does not include form/parseable data.
- `Rack::Lint::Wrapper` correctly handles `respond_to?` with `to_ary`, `each`, `call` and `to_path`, forwarding to the body. ([#1981](https://github.com/rack/rack/pull/1981), [@ioquatix])

## [3.0.0] - 2022-09-06

- No changes

## [3.0.0.rc1] - 2022-09-04

### SPEC Changes

- Stream argument must implement `<<` https://github.com/rack/rack/pull/1959
- `close` may be called on `rack.input` https://github.com/rack/rack/pull/1956
- `rack.response_finished` may be used for executing code after the response has been finished https://github.com/rack/rack/pull/1952

## [3.0.0.beta1] - 2022-08-08

### Security

- Do not use semicolon as GET parameter separator. ([#1733](https://github.com/rack/rack/pull/1733), [@jeremyevans])

### SPEC Changes

- Response array must now be non-frozen.
- Response `status` must now be an integer greater than or equal to 100.
- Response `headers` must now be an unfrozen hash.
- Response header keys can no longer include uppercase characters.
- Response header values can be an `Array` to handle multiple values (and no longer supports `\n` encoded headers).
- Response body can now respond to `#call` (streaming body) instead of `#each` (enumerable body), for the equivalent of response hijacking in previous versions.
- Middleware must no longer call `#each` on the body, but they can call `#to_ary` on the body if it responds to `#to_ary`.
- `rack.input` is no longer required to be rewindable.
- `rack.multithread`/`rack.multiprocess`/`rack.run_once`/`rack.version` are no longer required environment keys.
- `SERVER_PROTOCOL` is now a required environment key, matching the HTTP protocol used in the request.
- `rack.hijack?` (partial hijack) and `rack.hijack` (full hijack) are now independently optional.
- `rack.hijack_io` has been removed completely.
- `rack.response_finished` is an optional environment key which contains an array of callable objects that must accept `#call(env, status, headers, error)` and are invoked after the response is finished (either successfully or unsuccessfully).
- It is okay to call `#close` on `rack.input` to indicate that you no longer need or care about the input.
- The stream argument supplied to the streaming body and hijack must support `#<<` for writing output.

### Removed

- Remove `rack.multithread`/`rack.multiprocess`/`rack.run_once`. These variables generally come too late to be useful. ([#1720](https://github.com/rack/rack/pull/1720), [@ioquatix], [@jeremyevans]))
- Remove deprecated Rack::Request::SCHEME_WHITELIST. ([@jeremyevans])
- Remove internal cookie deletion using pattern matching, there are very few practical cases where it would be useful and browsers handle it correctly without us doing anything special. ([#1844](https://github.com/rack/rack/pull/1844), [@ioquatix])
- Remove `rack.version` as it comes too late to be useful. ([#1938](https://github.com/rack/rack/pull/1938), [@ioquatix])
- Extract `rackup` command, `Rack::Server`, `Rack::Handler` and related code into a separate gem. ([#1937](https://github.com/rack/rack/pull/1937), [@ioquatix])

### Added

- `Rack::Headers` added to support lower-case header keys. ([@jeremyevans])
- `Rack::Utils#set_cookie_header` now supports `escape_key: false` to avoid key escaping.  ([@jeremyevans])
- `Rack::RewindableInput` supports size. ([@ahorek](https://github.com/ahorek))
- `Rack::RewindableInput::Middleware` added for making `rack.input` rewindable. ([@jeremyevans])
- The RFC 7239 Forwarded header is now supported and considered by default when looking for information on forwarding, falling back to the X-Forwarded-* headers. `Rack::Request.forwarded_priority` accessor has been added for configuring the priority of which header to check.  ([#1423](https://github.com/rack/rack/issues/1423), [@jeremyevans])
- Allow response headers to contain array of values. ([#1598](https://github.com/rack/rack/issues/1598), [@ioquatix])
- Support callable body for explicit streaming support and clarify streaming response body behaviour. ([#1745](https://github.com/rack/rack/pull/1745), [@ioquatix], [#1748](https://github.com/rack/rack/pull/1748), [@wjordan])
- Allow `Rack::Builder#run` to take a block instead of an argument. ([#1942](https://github.com/rack/rack/pull/1942), [@ioquatix])
- Add `rack.response_finished` to `Rack::Lint`. ([#1802](https://github.com/rack/rack/pull/1802), [@BlakeWilliams], [#1952](https://github.com/rack/rack/pull/1952), [@ioquatix])
- The stream argument must implement `#<<`. ([#1959](https://github.com/rack/rack/pull/1959), [@ioquatix])

### Changed

- BREAKING CHANGE: Require `status` to be an Integer. ([#1662](https://github.com/rack/rack/pull/1662), [@olleolleolle](https://github.com/olleolleolle))
- BREAKING CHANGE: Query parsing now treats parameters without `=` as having the empty string value instead of nil value, to conform to the URL spec. ([#1696](https://github.com/rack/rack/issues/1696), [@jeremyevans])
- Relax validations around `Rack::Request#host` and `Rack::Request#hostname`. ([#1606](https://github.com/rack/rack/issues/1606), [@pvande](https://github.com/pvande))
- Removed antiquated handlers: FCGI, LSWS, SCGI, Thin. ([#1658](https://github.com/rack/rack/pull/1658), [@ioquatix])
- Removed options from `Rack::Builder.parse_file` and `Rack::Builder.load_file`. ([#1663](https://github.com/rack/rack/pull/1663), [@ioquatix])
- `Rack::HTTP_VERSION` has been removed and the `HTTP_VERSION` env setting is no longer set in the CGI and Webrick handlers. ([#970](https://github.com/rack/rack/issues/970), [@jeremyevans])
- `Rack::Request#[]` and `#[]=` now warn even in non-verbose mode. ([#1277](https://github.com/rack/rack/issues/1277), [@jeremyevans])
- Decrease default allowed parameter recursion level from 100 to 32. ([#1640](https://github.com/rack/rack/issues/1640), [@jeremyevans])
- Attempting to parse a multipart response with an empty body now raises Rack::Multipart::EmptyContentError. ([#1603](https://github.com/rack/rack/issues/1603), [@jeremyevans])
- `Rack::Utils.secure_compare` uses OpenSSL's faster implementation if available. ([#1711](https://github.com/rack/rack/pull/1711), [@bdewater](https://github.com/bdewater))
- `Rack::Request#POST` now caches an empty hash if input content type is not parseable. ([#749](https://github.com/rack/rack/pull/749), [@jeremyevans])
- BREAKING CHANGE: Updated `trusted_proxy?` to match full 127.0.0.0/8 network. ([#1781](https://github.com/rack/rack/pull/1781), [@snbloch](https://github.com/snbloch))
- Explicitly deprecate `Rack::File` which was an alias for `Rack::Files`. ([#1811](https://github.com/rack/rack/pull/1720), [@ioquatix]).
- Moved `Rack::Session` into [separate gem](https://github.com/rack/rack-session). ([#1805](https://github.com/rack/rack/pull/1805), [@ioquatix])
- `rackup -D` option to daemonizes no longer changes the working directory to the root. ([#1813](https://github.com/rack/rack/pull/1813), [@jeremyevans])
- The `x-forwarded-proto` header is now considered before the `x-forwarded-scheme` header for determining the forwarded protocol. `Rack::Request.x_forwarded_proto_priority` accessor has been added for configuring the priority of which header to check.  ([#1809](https://github.com/rack/rack/issues/1809), [@jeremyevans])
- `Rack::Request.forwarded_authority` (and methods that call it, such as `host`) now returns the last authority in the forwarded header, instead of the first, as earlier forwarded authorities can be forged by clients. This restores the Rack 2.1 behavior. ([#1829](https://github.com/rack/rack/issues/1809), [@jeremyevans])
- Use lower case cookie attributes when creating cookies, and fold cookie attributes to lower case when reading cookies (specifically impacting `secure` and `httponly` attributes). ([#1849](https://github.com/rack/rack/pull/1849), [@ioquatix])
- The response array must now be mutable (non-frozen) so middleware can modify it without allocating a new Array,therefore reducing object allocations. ([#1887](https://github.com/rack/rack/pull/1887), [#1927](https://github.com/rack/rack/pull/1927), [@amatsuda], [@ioquatix])
- `rack.hijack?` (partial hijack) and `rack.hijack` (full hijack) are now independently optional. `rack.hijack_io` is no longer required/specified. ([#1939](https://github.com/rack/rack/pull/1939), [@ioquatix])
- Allow calling close on `rack.input`. ([#1956](https://github.com/rack/rack/pull/1956), [@ioquatix])

### Fixed

- Make Rack::MockResponse handle non-hash headers. ([#1629](https://github.com/rack/rack/issues/1629), [@jeremyevans])
- TempfileReaper now deletes temp files if application raises an exception. ([#1679](https://github.com/rack/rack/issues/1679), [@jeremyevans])
- Handle cookies with values that end in '=' ([#1645](https://github.com/rack/rack/pull/1645), [@lukaso](https://github.com/lukaso))
- Make `Rack::NullLogger` respond to `#fatal!` [@jeremyevans])
- Fix multipart filename generation for filenames that contain spaces. Encode spaces as "%20" instead of "+" which will be decoded properly by the multipart parser. ([#1736](https://github.com/rack/rack/pull/1645), [@muirdm](https://github.com/muirdm))
- `Rack::Request#scheme` returns `ws` or `wss` when one of the `X-Forwarded-Scheme` / `X-Forwarded-Proto` headers is set to `ws` or `wss`, respectively. ([#1730](https://github.com/rack/rack/issues/1730), [@erwanst](https://github.com/erwanst))

## [2.2.4] - 2022-06-30

- Better support for lower case headers in `Rack::ETag` middleware. ([#1919](https://github.com/rack/rack/pull/1919), [@ioquatix](https://github.com/ioquatix))
- Use custom exception on params too deep error. ([#1838](https://github.com/rack/rack/pull/1838), [@simi](https://github.com/simi))

## [2.2.3.1] - 2022-05-27

- [CVE-2022-30123] Fix shell escaping issue in Common Logger
- [CVE-2022-30122] Restrict parsing of broken MIME attachments

## [2.2.3] - 2020-06-15

### Security

- [[CVE-2020-8184](https://nvd.nist.gov/vuln/detail/CVE-2020-8184)] Do not allow percent-encoded cookie name to override existing cookie names. BREAKING CHANGE: Accessing cookie names that require URL encoding with decoded name no longer works. ([@fletchto99](https://github.com/fletchto99))

## [2.2.2] - 2020-02-11

### Fixed

- Fix incorrect `Rack::Request#host` value. ([#1591](https://github.com/rack/rack/pull/1591), [@ioquatix])
- Revert `Rack::Handler::Thin` implementation. ([#1583](https://github.com/rack/rack/pull/1583), [@jeremyevans])
- Double assignment is still needed to prevent an "unused variable" warning. ([#1589](https://github.com/rack/rack/pull/1589), [@kamipo](https://github.com/kamipo))
- Fix to handle same_site option for session pool. ([#1587](https://github.com/rack/rack/pull/1587), [@kamipo](https://github.com/kamipo))

## [2.2.1] - 2020-02-09

### Fixed

- Rework `Rack::Request#ip` to handle empty `forwarded_for`. ([#1577](https://github.com/rack/rack/pull/1577), [@ioquatix])

## [2.2.0] - 2020-02-08

### SPEC Changes

- `rack.session` request environment entry must respond to `to_hash` and return unfrozen Hash. ([@jeremyevans])
- Request environment cannot be frozen. ([@jeremyevans])
- CGI values in the request environment with non-ASCII characters must use ASCII-8BIT encoding. ([@jeremyevans])
- Improve SPEC/lint relating to SERVER_NAME, SERVER_PORT and HTTP_HOST. ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix])

### Added

- `rackup` supports multiple `-r` options and will require all arguments. ([@jeremyevans])
- `Server` supports an array of paths to require for the `:require` option. ([@khotta](https://github.com/khotta))
- `Files` supports multipart range requests. ([@fatkodima](https://github.com/fatkodima))
- `Multipart::UploadedFile` supports an IO-like object instead of using the filesystem, using `:filename` and `:io` options. ([@jeremyevans])
- `Multipart::UploadedFile` supports keyword arguments `:path`, `:content_type`, and `:binary` in addition to positional arguments. ([@jeremyevans])
- `Static` supports a `:cascade` option for calling the app if there is no matching file. ([@jeremyevans])
- `Session::Abstract::SessionHash#dig`. ([@jeremyevans])
- `Response.[]` and `MockResponse.[]` for creating instances using status, headers, and body. ([@ioquatix])
- Convenient cache and content type methods for `Rack::Response`. ([#1555](https://github.com/rack/rack/pull/1555), [@ioquatix])

### Changed

- `Request#params` no longer rescues EOFError. ([@jeremyevans])
- `Directory` uses a streaming approach, significantly improving time to first byte for large directories. ([@jeremyevans])
- `Directory` no longer includes a Parent directory link in the root directory index. ([@jeremyevans])
- `QueryParser#parse_nested_query` uses original backtrace when reraising exception with new class. ([@jeremyevans])
- `ConditionalGet` follows RFC 7232 precedence if both If-None-Match and If-Modified-Since headers are provided. ([@jeremyevans])
- `.ru` files supports the `frozen-string-literal` magic comment. ([@eregon](https://github.com/eregon))
- Rely on autoload to load constants instead of requiring internal files, make sure to require 'rack' and not just 'rack/...'. ([@jeremyevans])
- BREAKING CHANGE: `Etag` will continue sending ETag even if the response should not be cached. Streaming no longer works without a workaround, see [#1619](https://github.com/rack/rack/issues/1619#issuecomment-848460528). ([@henm](https://github.com/henm))
- `Request#host_with_port` no longer includes a colon for a missing or empty port. ([@AlexWayfer](https://github.com/AlexWayfer))
- All handlers uses keywords arguments instead of an options hash argument. ([@ioquatix])
- `Files` handling of range requests no longer return a body that supports `to_path`, to ensure range requests are handled correctly. ([@jeremyevans])
- `Multipart::Generator` only includes `Content-Length` for files with paths, and `Content-Disposition` `filename` if the `UploadedFile` instance has one. ([@jeremyevans])
- `Request#ssl?` is true for the `wss` scheme (secure websockets). ([@jeremyevans])
- `Rack::HeaderHash` is memoized by default. ([#1549](https://github.com/rack/rack/pull/1549), [@ioquatix])
- `Rack::Directory` allow directory traversal inside root directory. ([#1417](https://github.com/rack/rack/pull/1417), [@ThomasSevestre](https://github.com/ThomasSevestre))
- Sort encodings by server preference. ([#1184](https://github.com/rack/rack/pull/1184), [@ioquatix], [@wjordan](https://github.com/wjordan))
- Rework host/hostname/authority implementation in `Rack::Request`. `#host` and `#host_with_port` have been changed to correctly return IPv6 addresses formatted with square brackets, as defined by [RFC3986](https://tools.ietf.org/html/rfc3986#section-3.2.2). ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix])
- `Rack::Builder` parsing options on first `#\` line is deprecated. ([#1574](https://github.com/rack/rack/pull/1574), [@ioquatix])

### Removed

- `Directory#path` as it was not used and always returned nil. ([@jeremyevans])
- `BodyProxy#each` as it was only needed to work around a bug in Ruby <1.9.3. ([@jeremyevans])
- `URLMap::INFINITY` and `URLMap::NEGATIVE_INFINITY`, in favor of `Float::INFINITY`. ([@ch1c0t](https://github.com/ch1c0t))
- Deprecation of `Rack::File`. It will be deprecated again in rack 2.2 or 3.0. ([@rafaelfranca](https://github.com/rafaelfranca))
- Support for Ruby 2.2 as it is well past EOL. ([@ioquatix])
- Remove `Rack::Files#response_body` as the implementation was broken. ([#1153](https://github.com/rack/rack/pull/1153), [@ioquatix])
- Remove `SERVER_ADDR` which was never part of the original SPEC. ([#1573](https://github.com/rack/rack/pull/1573), [@ioquatix])

### Fixed

- `Directory` correctly handles root paths containing glob metacharacters. ([@jeremyevans])
- `Cascade` uses a new response object for each call if initialized with no apps. ([@jeremyevans])
- `BodyProxy` correctly delegates keyword arguments to the body object on Ruby 2.7+. ([@jeremyevans])
- `BodyProxy#method` correctly handles methods delegated to the body object. ([@jeremyevans])
- `Request#host` and `Request#host_with_port` handle IPv6 addresses correctly. ([@AlexWayfer](https://github.com/AlexWayfer))
- `Lint` checks when response hijacking that `rack.hijack` is called with a valid object. ([@jeremyevans])
- `Response#write` correctly updates `Content-Length` if initialized with a body. ([@jeremyevans])
- `CommonLogger` includes `SCRIPT_NAME` when logging. ([@Erol](https://github.com/Erol))
- `Utils.parse_nested_query` correctly handles empty queries, using an empty instance of the params class instead of a hash. ([@jeremyevans])
- `Directory` correctly escapes paths in links. ([@yous](https://github.com/yous))
- `Request#delete_cookie` and related `Utils` methods handle `:domain` and `:path` options in same call. ([@jeremyevans])
- `Request#delete_cookie` and related `Utils` methods do an exact match on `:domain` and `:path` options. ([@jeremyevans])
- `Static` no longer adds headers when a gzipped file request has a 304 response. ([@chooh](https://github.com/chooh))
- `ContentLength` sets `Content-Length` response header even for bodies not responding to `to_ary`. ([@jeremyevans])
- Thin handler supports options passed directly to `Thin::Controllers::Controller`. ([@jeremyevans])
- WEBrick handler no longer ignores `:BindAddress` option. ([@jeremyevans])
- `ShowExceptions` handles invalid POST data. ([@jeremyevans])
- Basic authentication requires a password, even if the password is empty. ([@jeremyevans])
- `Lint` checks response is array with 3 elements, per SPEC. ([@jeremyevans])
- Support for using `:SSLEnable` option when using WEBrick handler. (Gregor Melhorn)
- Close response body after buffering it when buffering. ([@ioquatix])
- Only accept `;` as delimiter when parsing cookies. ([@mrageh](https://github.com/mrageh))
- `Utils::HeaderHash#clear` clears the name mapping as well. ([@raxoft](https://github.com/raxoft))
- Support for passing `nil` `Rack::Files.new`, which notably fixes Rails' current `ActiveStorage::FileServer` implementation. ([@ioquatix])

### Documentation

- CHANGELOG updates. ([@aupajo](https://github.com/aupajo))
- Added [CONTRIBUTING](CONTRIBUTING.md). ([@dblock](https://github.com/dblock))

## [2.0.9] - 2020-02-08

- Handle case where session id key is requested but missing ([@jeremyevans])
- Restore support for code relying on `SessionId#to_s`. ([@jeremyevans])
- Add support for `SameSite=None` cookie value. ([@hennikul](https://github.com/hennikul))

## [2.1.2] - 2020-01-27

- Fix multipart parser for some files to prevent denial of service ([@aiomaster](https://github.com/aiomaster))
- Fix `Rack::Builder#use` with keyword arguments ([@kamipo](https://github.com/kamipo))
- Skip deflating in Rack::Deflater if Content-Length is 0 ([@jeremyevans])
- Remove `SessionHash#transform_keys`, no longer needed ([@pavel](https://github.com/pavel))
- Add to_hash to wrap Hash and Session classes ([@oleh-demyanyuk](https://github.com/oleh-demyanyuk))
- Handle case where session id key is requested but missing ([@jeremyevans])

## [2.1.1] - 2020-01-12

- Remove `Rack::Chunked` from `Rack::Server` default middleware. ([#1475](https://github.com/rack/rack/pull/1475), [@ioquatix])
- Restore support for code relying on `SessionId#to_s`. ([@jeremyevans])

## [2.1.0] - 2020-01-10

### Added

- Add support for `SameSite=None` cookie value. ([@hennikul](https://github.com/hennikul))
- Add trailer headers. ([@eileencodes](https://github.com/eileencodes))
- Add MIME Types for video streaming. ([@styd](https://github.com/styd))
- Add MIME Type for WASM. ([@buildrtech](https://github.com/buildrtech))
- Add `Early Hints(103)` to status codes. ([@egtra](https://github.com/egtra))
- Add `Too Early(425)` to status codes. ([@y-yagi]((https://github.com/y-yagi)))
- Add `Bandwidth Limit Exceeded(509)` to status codes. ([@CJKinni](https://github.com/CJKinni))
- Add method for custom `ip_filter`. ([@svcastaneda](https://github.com/svcastaneda))
- Add boot-time profiling capabilities to `rackup`. ([@tenderlove](https://github.com/tenderlove))
- Add multi mapping support for `X-Accel-Mappings` header. ([@yoshuki](https://github.com/yoshuki))
- Add `sync: false` option to `Rack::Deflater`. (Eric Wong)
- Add `Builder#freeze_app` to freeze application and all middleware instances. ([@jeremyevans])
- Add API to extract cookies from `Rack::MockResponse`. ([@petercline](https://github.com/petercline))

### Changed

- Don't propagate nil values from middleware. ([@ioquatix])
- Lazily initialize the response body and only buffer it if required. ([@ioquatix])
- Fix deflater zlib buffer errors on empty body part. ([@felixbuenemann](https://github.com/felixbuenemann))
- Set `X-Accel-Redirect` to percent-encoded path. ([@diskkid](https://github.com/diskkid))
- Remove unnecessary buffer growing when parsing multipart. ([@tainoe](https://github.com/tainoe))
- Expand the root path in `Rack::Static` upon initialization. ([@rosenfeld](https://github.com/rosenfeld))
- Make `ShowExceptions` work with binary data. ([@axyjo](https://github.com/axyjo))
- Use buffer string when parsing multipart requests. ([@janko-m](https://github.com/janko-m))
- Support optional UTF-8 Byte Order Mark (BOM) in config.ru. ([@mikegee](https://github.com/mikegee))
- Handle `X-Forwarded-For` with optional port. ([@dpritchett](https://github.com/dpritchett))
- Use `Time#httpdate` format for Expires, as proposed by RFC 7231. ([@nanaya](https://github.com/nanaya))
- Make `Utils.status_code` raise an error when the status symbol is invalid instead of `500`. ([@adambutler](https://github.com/adambutler))
- Rename `Request::SCHEME_WHITELIST` to `Request::ALLOWED_SCHEMES`.
- Make `Multipart::Parser.get_filename` accept files with `+` in their name. ([@lucaskanashiro](https://github.com/lucaskanashiro))
- Add Falcon to the default handler fallbacks. ([@ioquatix])
- Update codebase to avoid string mutations in preparation for `frozen_string_literals`. ([@pat](https://github.com/pat))
- Change `MockRequest#env_for` to rely on the input optionally responding to `#size` instead of `#length`. ([@janko](https://github.com/janko))
- Rename `Rack::File` -> `Rack::Files` and add deprecation notice. ([@postmodern](https://github.com/postmodern))
- Prefer Base64 “strict encoding” for Base64 cookies. ([@ioquatix])

### Removed

- BREAKING CHANGE: Remove `to_ary` from Response ([@tenderlove](https://github.com/tenderlove))
- Deprecate `Rack::Session::Memcache` in favor of `Rack::Session::Dalli` from dalli gem ([@fatkodima](https://github.com/fatkodima))

### Fixed

- Eliminate warnings for Ruby 2.7. ([@osamtimizer](https://github.com/osamtimizer]))

### Documentation

- Update broken example in `Session::Abstract::ID` documentation. ([tonytonyjan](https://github.com/tonytonyjan))
- Add Padrino to the list of frameworks implementing Rack. ([@wikimatze](https://github.com/wikimatze))
- Remove Mongrel from the suggested server options in the help output. ([@tricknotes](https://github.com/tricknotes))
- Replace `HISTORY.md` and `NEWS.md` with `CHANGELOG.md`. ([@twitnithegirl](https://github.com/twitnithegirl))
- CHANGELOG updates. ([@drenmi](https://github.com/Drenmi), [@p8](https://github.com/p8))

## [2.0.8] - 2019-12-08

### Security

- [[CVE-2019-16782](https://nvd.nist.gov/vuln/detail/CVE-2019-16782)] Prevent timing attacks targeted at session ID lookup. BREAKING CHANGE: Session ID is now a SessionId instance instead of a String. ([@tenderlove](https://github.com/tenderlove), [@rafaelfranca](https://github.com/rafaelfranca))

## [1.6.12] - 2019-12-08

### Security

- [[CVE-2019-16782](https://nvd.nist.gov/vuln/detail/CVE-2019-16782)] Prevent timing attacks targeted at session ID lookup. BREAKING CHANGE: Session ID is now a SessionId instance instead of a String. ([@tenderlove](https://github.com/tenderlove), [@rafaelfranca](https://github.com/rafaelfranca))

## [2.0.7] - 2019-04-02

### Fixed

- Remove calls to `#eof?` on Rack input in `Multipart::Parser`, as this breaks the specification. ([@matthewd](https://github.com/matthewd))
- Preserve forwarded IP addresses for trusted proxy chains. ([@SamSaffron](https://github.com/SamSaffron))

## [2.0.6] - 2018-11-05

### Fixed

- [[CVE-2018-16470](https://nvd.nist.gov/vuln/detail/CVE-2018-16470)] Reduce buffer size of `Multipart::Parser` to avoid pathological parsing. ([@tenderlove](https://github.com/tenderlove))
- Fix a call to a non-existing method `#accepts_html` in the `ShowExceptions` middleware. ([@tomelm](https://github.com/tomelm))
- [[CVE-2018-16471](https://nvd.nist.gov/vuln/detail/CVE-2018-16471)] Whitelist HTTP and HTTPS schemes in `Request#scheme` to prevent a possible XSS attack. ([@PatrickTulskie](https://github.com/PatrickTulskie))

## [2.0.5] - 2018-04-23

### Fixed

- Record errors originating from invalid UTF8 in `MethodOverride` middleware instead of breaking. ([@mclark](https://github.com/mclark))

## [2.0.4] - 2018-01-31

### Changed

- Ensure the `Lock` middleware passes the original `env` object. ([@lugray](https://github.com/lugray))
- Improve performance of `Multipart::Parser` when uploading large files. ([@tompng](https://github.com/tompng))
- Increase buffer size in `Multipart::Parser` for better performance. ([@jkowens](https://github.com/jkowens))
- Reduce memory usage of `Multipart::Parser` when uploading large files. ([@tompng](https://github.com/tompng))
- Replace ConcurrentRuby dependency with native `Queue`. ([@devmchakan](https://github.com/devmchakan))

### Fixed

- Require the correct digest algorithm in the `ETag` middleware. ([@matthewd](https://github.com/matthewd))

### Documentation

- Update homepage links to use SSL. ([@hugoabonizio](https://github.com/hugoabonizio))

## [2.0.3] - 2017-05-15

### Changed

- Ensure `env` values are ASCII 8-bit encoded. ([@eileencodes](https://github.com/eileencodes))

### Fixed

- Prevent exceptions when a class with mixins inherits from `Session::Abstract::ID`. ([@jnraine](https://github.com/jnraine))

## [2.0.2] - 2017-05-08

### Added

- Allow `Session::Abstract::SessionHash#fetch` to accept a block with a default value. ([@yannvanhalewyn](https://github.com/yannvanhalewyn))
- Add `Builder#freeze_app` to freeze application and all middleware. ([@jeremyevans])

### Changed

- Freeze default session options to avoid accidental mutation. ([@kirs](https://github.com/kirs))
- Detect partial hijack without hash headers. ([@devmchakan](https://github.com/devmchakan))
- Update tests to use MiniTest 6 matchers. ([@tonytonyjan](https://github.com/tonytonyjan))
- Allow 205 Reset Content responses to set a Content-Length, as RFC 7231 proposes setting this to 0. ([@devmchakan](https://github.com/devmchakan))

### Fixed

- Handle `NULL` bytes in multipart filenames. ([@casperisfine](https://github.com/casperisfine))
- Remove warnings due to miscapitalized global. ([@ioquatix])
- Prevent exceptions caused by a race condition on multi-threaded servers. ([@sophiedeziel](https://github.com/sophiedeziel))
- Add RDoc as an explicit dependency for `doc` group. ([@tonytonyjan](https://github.com/tonytonyjan))
- Record errors originating from `Multipart::Parser` in the `MethodOverride` middleware instead of letting them bubble up. ([@carlzulauf](https://github.com/carlzulauf))
- Remove remaining use of removed `Utils#bytesize` method from the `File` middleware. ([@brauliomartinezlm](https://github.com/brauliomartinezlm))

### Removed

- Remove `deflate` encoding support to reduce caching overhead. ([@devmchakan](https://github.com/devmchakan))

### Documentation

- Update broken example in `Deflater` documentation. ([@mwpastore](https://github.com/mwpastore))

## [2.0.1] - 2016-06-30

### Changed

- Remove JSON as an explicit dependency. ([@mperham](https://github.com/mperham))


# History/News Archive
Items below this line are from the previously maintained HISTORY.md and NEWS.md files.

## [2.0.0.rc1] 2016-05-06
- Rack::Session::Abstract::ID is deprecated. Please change to use Rack::Session::Abstract::Persisted

## [2.0.0.alpha] 2015-12-04
- First-party "SameSite" cookies. Browsers omit SameSite cookies from third-party requests, closing the door on many CSRF attacks.
- Pass `same_site: true` (or `:strict`) to enable: response.set_cookie 'foo', value: 'bar', same_site: true or `same_site: :lax` to use Lax enforcement: response.set_cookie 'foo', value: 'bar', same_site: :lax
- Based on version 7 of the Same-site Cookies internet draft:
	https://tools.ietf.org/html/draft-west-first-party-cookies-07
- Thanks to Ben Toews (@mastahyeti) and Bob Long (@bobjflong) for updating to drafts 5 and 7.
- Add `Rack::Events` middleware for adding event based middleware: middleware that does not care about the response body, but only cares about doing work at particular points in the request / response lifecycle.
- Add `Rack::Request#authority` to calculate the authority under which the response is being made (this will be handy for h2 pushes).
- Add `Rack::Response::Helpers#cache_control` and `cache_control=`. Use this for setting cache control headers on your response objects.
- Add `Rack::Response::Helpers#etag` and `etag=`.  Use this for setting etag values on the response.
- Introduce `Rack::Response::Helpers#add_header` to add a value to a multi-valued response header. Implemented in terms of other `Response#*_header` methods, so it's available to any response-like class that includes the `Helpers` module.
- Add `Rack::Request#add_header` to match.
- `Rack::Session::Abstract::ID` IS DEPRECATED.  Please switch to `Rack::Session::Abstract::Persisted`. `Rack::Session::Abstract::Persisted` uses a request object rather than the `env` hash.
- Pull `ENV` access inside the request object in to a module.  This will help with legacy Request objects that are ENV based but don't want to inherit from Rack::Request
- Move most methods on the `Rack::Request` to a module `Rack::Request::Helpers` and use public API to get values from the request object.  This enables users to mix `Rack::Request::Helpers` in to their own objects so they can implement `(get|set|fetch|each)_header` as they see fit (for example a proxy object).
- Files and directories with + in the name are served correctly. Rather than unescaping paths like a form, we unescape with a URI parser using `Rack::Utils.unescape_path`. Fixes #265
- Tempfiles are automatically closed in the case that there were too
	many posted.
- Added methods for manipulating response headers that don't assume
	they're stored as a Hash. Response-like classes may include the
	Rack::Response::Helpers module if they define these methods:
    - Rack::Response#has_header?
	- Rack::Response#get_header
	- Rack::Response#set_header
	- Rack::Response#delete_header
- Introduce Util.get_byte_ranges that will parse the value of the HTTP_RANGE string passed to it without depending on the `env` hash. `byte_ranges` is deprecated in favor of this method.
- Change Session internals to use Request objects for looking up session information. This allows us to only allocate one request object when dealing with session objects (rather than doing it every time we need to manipulate cookies, etc).
- Add `Rack::Request#initialize_copy` so that the env is duped when the request gets duped.
- Added methods for manipulating request specific data.  This includes
	data set as CGI parameters, and just any arbitrary data the user wants
	to associate with a particular request.  New methods:
	 - Rack::Request#has_header?
	 - Rack::Request#get_header
	 - Rack::Request#fetch_header
	 - Rack::Request#each_header
	 - Rack::Request#set_header
	 - Rack::Request#delete_header
- lib/rack/utils.rb: add a method for constructing "delete" cookie
	headers.  This allows us to construct cookie headers without depending
	on the side effects of mutating a hash.
- Prevent extremely deep parameters from being parsed. CVE-2015-3225

## [1.6.1] 2015-05-06
  - Fix CVE-2014-9490, denial of service attack in OkJson
  - Use a monotonic time for Rack::Runtime, if available
  - RACK_MULTIPART_LIMIT changed to RACK_MULTIPART_PART_LIMIT (RACK_MULTIPART_LIMIT is deprecated and will be removed in 1.7.0)

## [1.5.3] 2015-05-06
  - Fix CVE-2014-9490, denial of service attack in OkJson
  - Backport bug fixes to 1.5 series

## [1.6.0] 2014-01-18
  - Response#unauthorized? helper
  - Deflater now accepts an options hash to control compression on a per-request level
  - Builder#warmup method for app preloading
  - Request#accept_language method to extract HTTP_ACCEPT_LANGUAGE
  - Add quiet mode of rack server, rackup --quiet
  - Update HTTP Status Codes to RFC 7231
  - Less strict header name validation according to RFC 2616
  - SPEC updated to specify headers conform to RFC7230 specification
  - Etag correctly marks etags as weak
  - Request#port supports multiple x-http-forwarded-proto values
  - Utils#multipart_part_limit configures the maximum number of parts a request can contain
  - Default host to localhost when in development mode
  - Various bugfixes and performance improvements

## [1.5.2] 2013-02-07
  - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
  - Fix CVE-2013-0262, symlink path traversal in Rack::File
  - Add various methods to Session for enhanced Rails compatibility
  - Request#trusted_proxy? now only matches whole strings
  - Add JSON cookie coder, to be default in Rack 1.6+ due to security concerns
  - URLMap host matching in environments that don't set the Host header fixed
  - Fix a race condition that could result in overwritten pidfiles
  - Various documentation additions

## [1.4.5] 2013-02-07
  - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
  - Fix CVE-2013-0262, symlink path traversal in Rack::File

## [1.1.6, 1.2.8, 1.3.10] 2013-02-07
  - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie

## [1.5.1] 2013-01-28
  - Rack::Lint check_hijack now conforms to other parts of SPEC
  - Added hash-like methods to Abstract::ID::SessionHash for compatibility
  - Various documentation corrections

## [1.5.0] 2013-01-21
  - Introduced hijack SPEC, for before-response and after-response hijacking
  - SessionHash is no longer a Hash subclass
  - Rack::File cache_control parameter is removed, in place of headers options
  - Rack::Auth::AbstractRequest#scheme now yields strings, not symbols
  - Rack::Utils cookie functions now format expires in RFC 2822 format
  - Rack::File now has a default mime type
  - rackup -b 'run Rack::Files.new(".")', option provides command line configs
  - Rack::Deflater will no longer double encode bodies
  - Rack::Mime#match? provides convenience for Accept header matching
  - Rack::Utils#q_values provides splitting for Accept headers
  - Rack::Utils#best_q_match provides a helper for Accept headers
  - Rack::Handler.pick provides convenience for finding available servers
  - Puma added to the list of default servers (preferred over Webrick)
  - Various middleware now correctly close body when replacing it
  - Rack::Request#params is no longer persistent with only GET params
  - Rack::Request#update_param and #delete_param provide persistent operations
  - Rack::Request#trusted_proxy? now returns true for local unix sockets
  - Rack::Response no longer forces Content-Types
  - Rack::Sendfile provides local mapping configuration options
  - Rack::Utils#rfc2109 provides old netscape style time output
  - Updated HTTP status codes
  - Ruby 1.8.6 likely no longer passes tests, and is no longer fully supported

## [1.4.4, 1.3.9, 1.2.7, 1.1.5] 2013-01-13
  - [SEC] Rack::Auth::AbstractRequest no longer symbolizes arbitrary strings
  - Fixed erroneous test case in the 1.3.x series

## [1.4.3] 2013-01-07
  - Security: Prevent unbounded reads in large multipart boundaries

## [1.3.8] 2013-01-07
  - Security: Prevent unbounded reads in large multipart boundaries

## [1.4.2] 2013-01-06
  - Add warnings when users do not provide a session secret
  - Fix parsing performance for unquoted filenames
  - Updated URI backports
  - Fix URI backport version matching, and silence constant warnings
  - Correct parameter parsing with empty values
  - Correct rackup '-I' flag, to allow multiple uses
  - Correct rackup pidfile handling
  - Report rackup line numbers correctly
  - Fix request loops caused by non-stale nonces with time limits
  - Fix reloader on Windows
  - Prevent infinite recursions from Response#to_ary
  - Various middleware better conforms to the body close specification
  - Updated language for the body close specification
  - Additional notes regarding ECMA escape compatibility issues
  - Fix the parsing of multiple ranges in range headers
  - Prevent errors from empty parameter keys
  - Added PATCH verb to Rack::Request
  - Various documentation updates
  - Fix session merge semantics (fixes rack-test)
  - Rack::Static :index can now handle multiple directories
  - All tests now utilize Rack::Lint (special thanks to Lars Gierth)
  - Rack::File cache_control parameter is now deprecated, and removed by 1.5
  - Correct Rack::Directory script name escaping
  - Rack::Static supports header rules for sophisticated configurations
  - Multipart parsing now works without a Content-Length header
  - New logos courtesy of Zachary Scott!
  - Rack::BodyProxy now explicitly defines #each, useful for C extensions
  - Cookies that are not URI escaped no longer cause exceptions

## [1.3.7] 2013-01-06
  - Add warnings when users do not provide a session secret
  - Fix parsing performance for unquoted filenames
  - Updated URI backports
  - Fix URI backport version matching, and silence constant warnings
  - Correct parameter parsing with empty values
  - Correct rackup '-I' flag, to allow multiple uses
  - Correct rackup pidfile handling
  - Report rackup line numbers correctly
  - Fix request loops caused by non-stale nonces with time limits
  - Fix reloader on Windows
  - Prevent infinite recursions from Response#to_ary
  - Various middleware better conforms to the body close specification
  - Updated language for the body close specification
  - Additional notes regarding ECMA escape compatibility issues
  - Fix the parsing of multiple ranges in range headers

## [1.2.6] 2013-01-06
  - Add warnings when users do not provide a session secret
  - Fix parsing performance for unquoted filenames

## [1.1.4] 2013-01-06
  - Add warnings when users do not provide a session secret

## [1.4.1] 2012-01-22
  - Alter the keyspace limit calculations to reduce issues with nested params
  - Add a workaround for multipart parsing where files contain unescaped "%"
  - Added Rack::Response::Helpers#method_not_allowed? (code 405)
  - Rack::File now returns 404 for illegal directory traversals
  - Rack::File now returns 405 for illegal methods (non HEAD/GET)
  - Rack::Cascade now catches 405 by default, as well as 404
  - Cookies missing '--' no longer cause an exception to be raised
  - Various style changes and documentation spelling errors
  - Rack::BodyProxy always ensures to execute its block
  - Additional test coverage around cookies and secrets
  - Rack::Session::Cookie can now be supplied either secret or old_secret
  - Tests are no longer dependent on set order
  - Rack::Static no longer defaults to serving index files
  - Rack.release was fixed

## [1.4.0] 2011-12-28
  - Ruby 1.8.6 support has officially been dropped. Not all tests pass.
  - Raise sane error messages for broken config.ru
  - Allow combining run and map in a config.ru
  - Rack::ContentType will not set Content-Type for responses without a body
  - Status code 205 does not send a response body
  - Rack::Response::Helpers will not rely on instance variables
  - Rack::Utils.build_query no longer outputs '=' for nil query values
  - Various mime types added
  - Rack::MockRequest now supports HEAD
  - Rack::Directory now supports files that contain RFC3986 reserved chars
  - Rack::File now only supports GET and HEAD requests
  - Rack::Server#start now passes the block to Rack::Handler::<h>#run
  - Rack::Static now supports an index option
  - Added the Teapot status code
  - rackup now defaults to Thin instead of Mongrel (if installed)
  - Support added for HTTP_X_FORWARDED_SCHEME
  - Numerous bug fixes, including many fixes for new and alternate rubies

## [1.1.3] 2011-12-28
  - Security fix. http://www.ocert.org/advisories/ocert-2011-003.html
    Further information here: http://jruby.org/2011/12/27/jruby-1-6-5-1

## [1.3.5] 2011-10-17
  - Fix annoying warnings caused by the backport in 1.3.4

## [1.3.4] 2011-10-01
  - Backport security fix from 1.9.3, also fixes some roundtrip issues in URI
  - Small documentation update
  - Fix an issue where BodyProxy could cause an infinite recursion
  - Add some supporting files for travis-ci

## [1.2.4] 2011-09-16
  - Fix a bug with MRI regex engine to prevent XSS by malformed unicode

## [1.3.3] 2011-09-16
  - Fix bug with broken query parameters in Rack::ShowExceptions
  - Rack::Request#cookies no longer swallows exceptions on broken input
  - Prevents XSS attacks enabled by bug in Ruby 1.8's regexp engine
  - Rack::ConditionalGet handles broken If-Modified-Since helpers

## [1.3.2] 2011-07-16
  - Fix for Rails and rack-test, Rack::Utils#escape calls to_s

## [1.3.1] 2011-07-13
  - Fix 1.9.1 support
  - Fix JRuby support
  - Properly handle $KCODE in Rack::Utils.escape
  - Make method_missing/respond_to behavior consistent for Rack::Lock,
    Rack::Auth::Digest::Request and Rack::Multipart::UploadedFile
  - Reenable passing rack.session to session middleware
  - Rack::CommonLogger handles streaming responses correctly
  - Rack::MockResponse calls close on the body object
  - Fix a DOS vector from MRI stdlib backport

## [1.2.3] 2011-05-22
  - Pulled in relevant bug fixes from 1.3
  - Fixed 1.8.6 support

## [1.3.0] 2011-05-22
  - Various performance optimizations
  - Various multipart fixes
  - Various multipart refactors
  - Infinite loop fix for multipart
  - Test coverage for Rack::Server returns
  - Allow files with '..', but not path components that are '..'
  - rackup accepts handler-specific options on the command line
  - Request#params no longer merges POST into GET (but returns the same)
  - Use URI.encode_www_form_component instead. Use core methods for escaping.
  - Allow multi-line comments in the config file
  - Bug L#94 reported by Nikolai Lugovoi, query parameter unescaping.
  - Rack::Response now deletes Content-Length when appropriate
  - Rack::Deflater now supports streaming
  - Improved Rack::Handler loading and searching
  - Support for the PATCH verb
  - env['rack.session.options'] now contains session options
  - Cookies respect renew
  - Session middleware uses SecureRandom.hex

## [1.2.2, 1.1.2] 2011-03-13
  - Security fix in Rack::Auth::Digest::MD5: when authenticator
    returned nil, permission was granted on empty password.

## [1.2.1] 2010-06-15
  - Make CGI handler rewindable
  - Rename spec/ to test/ to not conflict with SPEC on lesser
    operating systems

## [1.2.0] 2010-06-13
  - Removed Camping adapter: Camping 2.0 supports Rack as-is
  - Removed parsing of quoted values
  - Add Request.trace? and Request.options?
  - Add mime-type for .webm and .htc
  - Fix HTTP_X_FORWARDED_FOR
  - Various multipart fixes
  - Switch test suite to bacon

## [1.1.0] 2010-01-03
  - Moved Auth::OpenID to rack-contrib.
  - SPEC change that relaxes Lint slightly to allow subclasses of the
    required types
  - SPEC change to document rack.input binary mode in greater detail
  - SPEC define optional rack.logger specification
  - File servers support X-Cascade header
  - Imported Config middleware
  - Imported ETag middleware
  - Imported Runtime middleware
  - Imported Sendfile middleware
  - New Logger and NullLogger middlewares
  - Added mime type for .ogv and .manifest.
  - Don't squeeze PATH_INFO slashes
  - Use Content-Type to determine POST params parsing
  - Update Rack::Utils::HTTP_STATUS_CODES hash
  - Add status code lookup utility
  - Response should call #to_i on the status
  - Add Request#user_agent
  - Request#host knows about forwarded host
  - Return an empty string for Request#host if HTTP_HOST and
    SERVER_NAME are both missing
  - Allow MockRequest to accept hash params
  - Optimizations to HeaderHash
  - Refactored rackup into Rack::Server
  - Added Utils.build_nested_query to complement Utils.parse_nested_query
  - Added Utils::Multipart.build_multipart to complement
    Utils::Multipart.parse_multipart
  - Extracted set and delete cookie helpers into Utils so they can be
    used outside Response
  - Extract parse_query and parse_multipart in Request so subclasses
    can change their behavior
  - Enforce binary encoding in RewindableInput
  - Set correct external_encoding for handlers that don't use RewindableInput

## [1.0.1] 2009-10-18
  - Bump remainder of rack.versions.
  - Support the pure Ruby FCGI implementation.
  - Fix for form names containing "=": split first then unescape components
  - Fixes the handling of the filename parameter with semicolons in names.
  - Add anchor to nested params parsing regexp to prevent stack overflows
  - Use more compatible gzip write api instead of "<<".
  - Make sure that Reloader doesn't break when executed via ruby -e
  - Make sure WEBrick respects the :Host option
  - Many Ruby 1.9 fixes.

## [1.0.0] 2009-04-25
  - SPEC change: Rack::VERSION has been pushed to [1,0].
  - SPEC change: header values must be Strings now, split on "\n".
  - SPEC change: Content-Length can be missing, in this case chunked transfer
    encoding is used.
  - SPEC change: rack.input must be rewindable and support reading into
    a buffer, wrap with Rack::RewindableInput if it isn't.
  - SPEC change: rack.session is now specified.
  - SPEC change: Bodies can now additionally respond to #to_path with
    a filename to be served.
  - NOTE: String bodies break in 1.9, use an Array consisting of a
    single String instead.
  - New middleware Rack::Lock.
  - New middleware Rack::ContentType.
  - Rack::Reloader has been rewritten.
  - Major update to Rack::Auth::OpenID.
  - Support for nested parameter parsing in Rack::Response.
  - Support for redirects in Rack::Response.
  - HttpOnly cookie support in Rack::Response.
  - The Rakefile has been rewritten.
  - Many bugfixes and small improvements.

## [0.9.1] 2009-01-09
  - Fix directory traversal exploits in Rack::File and Rack::Directory.

## [0.9] 2009-01-06
  - Rack is now managed by the Rack Core Team.
  - Rack::Lint is stricter and follows the HTTP RFCs more closely.
  - Added ConditionalGet middleware.
  - Added ContentLength middleware.
  - Added Deflater middleware.
  - Added Head middleware.
  - Added MethodOverride middleware.
  - Rack::Mime now provides popular MIME-types and their extension.
  - Mongrel Header now streams.
  - Added Thin handler.
  - Official support for swiftiplied Mongrel.
  - Secure cookies.
  - Made HeaderHash case-preserving.
  - Many bugfixes and small improvements.

## [0.4] 2008-08-21
  - New middleware, Rack::Deflater, by Christoffer Sawicki.
  - OpenID authentication now needs ruby-openid 2.
  - New Memcache sessions, by blink.
  - Explicit EventedMongrel handler, by Joshua Peek <josh@joshpeek.com>
  - Rack::Reloader is not loaded in rackup development mode.
  - rackup can daemonize with -D.
  - Many bugfixes, especially for pool sessions, URLMap, thread safety
    and tempfile handling.
  - Improved tests.
  - Rack moved to Git.

## [0.3] 2008-02-26
  - LiteSpeed handler, by Adrian Madrid.
  - SCGI handler, by Jeremy Evans.
  - Pool sessions, by blink.
  - OpenID authentication, by blink.
  - :Port and :File options for opening FastCGI sockets, by blink.
  - Last-Modified HTTP header for Rack::File, by blink.
  - Rack::Builder#use now accepts blocks, by Corey Jewett.
    (See example/protectedlobster.ru)
  - HTTP status 201 can contain a Content-Type and a body now.
  - Many bugfixes, especially related to Cookie handling.

## [0.2] 2007-05-16
  - HTTP Basic authentication.
  - Cookie Sessions.
  - Static file handler.
  - Improved Rack::Request.
  - Improved Rack::Response.
  - Added Rack::ShowStatus, for better default error messages.
  - Bug fixes in the Camping adapter.
  - Removed Rails adapter, was too alpha.

## [0.1] 2007-03-03

[@ioquatix]: https://github.com/ioquatix "Samuel Williams"
[@jeremyevans]: https://github.com/jeremyevans "Jeremy Evans"
[@amatsuda]: https://github.com/amatsuda "Akira Matsuda"
[@wjordan]: https://github.com/wjordan "Will Jordan"
[@BlakeWilliams]: https://github.com/BlakeWilliams "Blake Williams"
PK*J[YM�!��%share/gems/gems/erb-4.0.4/libexec/erbnuȯ��#!/opt/alt/ruby34/bin/ruby
# Tiny eRuby --- ERB2
# Copyright (c) 1999-2000,2002 Masatoshi SEKI
# You can redistribute it and/or modify it under the same terms as Ruby.

require 'erb'

class ERB
  module Main
    def ARGV.switch
      return nil if self.empty?
      arg = self.shift
      return nil if arg == '--'
      case arg
      when /\A-(.)(.*)/
        if $1 == '-'
          arg, @maybe_arg = arg.split(/=/, 2)
          return arg
        end
        raise 'unknown switch "-"' if $2[0] == ?- and $1 != 'T'
        if $2.size > 0
          self.unshift "-#{$2}"
          @maybe_arg = $2
        else
          @maybe_arg = nil
        end
        "-#{$1}"
      when /\A(\w+)=/
        arg
      else
        self.unshift arg
        nil
      end
    end

    def ARGV.req_arg
      (@maybe_arg || self.shift || raise('missing argument')).tap {
        @maybe_arg = nil
      }
    end

    def trim_mode_opt(trim_mode, disable_percent)
      return trim_mode if disable_percent
      case trim_mode
      when 0
        return '%'
      when 1
        return '%>'
      when 2
        return '%<>'
      when '-'
        return '%-'
      end
    end
    module_function :trim_mode_opt

    def run(factory=ERB)
      trim_mode = 0
      disable_percent = false
      variables = {}
      begin
        while switch = ARGV.switch
          case switch
          when '-x'                        # ruby source
            output = true
          when '-n'                        # line number
            number = true
          when '-v'                        # verbose
            $VERBOSE = true
          when '--version'                 # version
            STDERR.puts factory.version
            exit
          when '-d', '--debug'             # debug
            $DEBUG = true
          when '-r'                        # require
            require ARGV.req_arg
          when '-T'                        # trim mode
            arg = ARGV.req_arg
            if arg == '-'
              trim_mode = arg
              next
            end
            raise "invalid trim mode #{arg.dump}" unless arg =~ /\A[0-2]\z/
            trim_mode = arg.to_i
          when '-E', '--encoding'
            arg = ARGV.req_arg
            set_encoding(*arg.split(/:/, 2))
          when '-U'
            set_encoding(Encoding::UTF_8, Encoding::UTF_8)
          when '-P'
            disable_percent = true
          when '--help'
            raise "print this help"
          when /\A-/
            raise "unknown switch #{switch.dump}"
          else
            var, val = *switch.split('=', 2)
            (variables ||= {})[var] = val
          end
        end
      rescue                               # usage
        STDERR.puts $!.to_s
        STDERR.puts File.basename($0) +
          " [switches] [var=value...] [inputfile]"
        STDERR.puts <<EOU
  -x               print ruby script
  -n               print ruby script with line number
  -v               enable verbose mode
  -d               set $DEBUG to true
  -r library       load a library
  -E ex[:in]       set default external/internal encodings
  -U               set default encoding to UTF-8
  -T trim_mode     specify trim_mode (0..2, -)
  -P               disable ruby code evaluation for lines beginning with %
  var=value        set variable
EOU
        exit 1
      end

      $<.set_encoding(Encoding::UTF_8, nil)
      src = $<.read
      filename = $FILENAME
      exit 2 unless src
      trim = trim_mode_opt(trim_mode, disable_percent)
      erb = factory.new(src, trim_mode: trim)
      erb.filename = filename
      if output
        if number
          erb.src.each_line.with_index do |line, l|
            puts "%3d %s"%[l+1, line]
          end
        else
          puts erb.src
        end
      else
        bind = TOPLEVEL_BINDING
        if variables
          enc = erb.encoding
          for var, val in variables do
            val = val.encode(enc) if val
            bind.local_variable_set(var, val)
          end
        end
        erb.run(bind)
      end
    end
    module_function :run

    def set_encoding(extern, intern = nil)
      verbose, $VERBOSE = $VERBOSE, nil
      Encoding.default_external = extern unless extern.nil? || extern == ""
      Encoding.default_internal = intern unless intern.nil? || intern == ""
      [$stdin, $stdout, $stderr].each do |io|
        io.set_encoding(extern, intern)
      end
    ensure
      $VERBOSE = verbose
    end
    module_function :set_encoding
    class << self; private :set_encoding; end
  end
end

ERB::Main.run
PK*J[�la6UU:share/gems/gems/json-2.9.1/lib/json/ext/generator/state.rbnu�[���# frozen_string_literal: true

module JSON
  module Ext
    module Generator
      class State
        # call-seq: new(opts = {})
        #
        # Instantiates a new State object, configured by _opts_.
        #
        # _opts_ can have the following keys:
        #
        # * *indent*: a string used to indent levels (default: ''),
        # * *space*: a string that is put after, a : or , delimiter (default: ''),
        # * *space_before*: a string that is put before a : pair delimiter (default: ''),
        # * *object_nl*: a string that is put at the end of a JSON object (default: ''),
        # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
        # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
        #   generated, otherwise an exception is thrown, if these values are
        #   encountered. This options defaults to false.
        # * *ascii_only*: true if only ASCII characters should be generated. This
        #   option defaults to false.
        # * *buffer_initial_length*: sets the initial length of the generator's
        #   internal buffer.
        def initialize(opts = nil)
          if opts && !opts.empty?
            configure(opts)
          end
        end

        # call-seq: configure(opts)
        #
        # Configure this State instance with the Hash _opts_, and return
        # itself.
        def configure(opts)
          unless opts.is_a?(Hash)
            if opts.respond_to?(:to_hash)
              opts = opts.to_hash
            elsif opts.respond_to?(:to_h)
              opts = opts.to_h
            else
              raise TypeError, "can't convert #{opts.class} into Hash"
            end
          end
          _configure(opts)
        end

        alias_method :merge, :configure

        # call-seq:
        #   generate(obj) -> String
        #   generate(obj, anIO) -> anIO
        #
        # Generates a valid JSON document from object +obj+ and returns the
        # result. If no valid JSON document can be created this method raises a
        # GeneratorError exception.
        def generate(obj, io = nil)
          _generate(obj, io)
        end

        # call-seq: to_h
        #
        # Returns the configuration instance variables as a hash, that can be
        # passed to the configure method.
        def to_h
          result = {
            indent: indent,
            space: space,
            space_before: space_before,
            object_nl: object_nl,
            array_nl: array_nl,
            allow_nan: allow_nan?,
            ascii_only: ascii_only?,
            max_nesting: max_nesting,
            script_safe: script_safe?,
            strict: strict?,
            depth: depth,
            buffer_initial_length: buffer_initial_length,
          }

          instance_variables.each do |iv|
            iv = iv.to_s[1..-1]
            result[iv.to_sym] = self[iv]
          end

          result
        end

        alias_method :to_hash, :to_h

        # call-seq: [](name)
        #
        # Returns the value returned by method +name+.
        def [](name)
          if respond_to?(name)
            __send__(name)
          else
            instance_variable_get("@#{name}") if
              instance_variables.include?("@#{name}".to_sym) # avoid warning
          end
        end

        # call-seq: []=(name, value)
        #
        # Sets the attribute name to value.
        def []=(name, value)
          if respond_to?(name_writer = "#{name}=")
            __send__ name_writer, value
          else
            instance_variable_set "@#{name}", value
          end
        end
      end
    end
  end
end
PK*J[o/��CC4share/gems/gems/json-2.9.1/lib/json/add/date_time.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
require 'date'

class DateTime

  # See #as_json.
  def self.json_create(object)
    args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
    of_a, of_b = object['of'].split('/')
    if of_b and of_b != '0'
      args << Rational(of_a.to_i, of_b.to_i)
    else
      args << of_a
    end
    args << object['sg']
    civil(*args)
  end

  alias start sg unless method_defined?(:start)

  # Methods <tt>DateTime#as_json</tt> and +DateTime.json_create+ may be used
  # to serialize and deserialize a \DateTime object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>DateTime#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/datetime'
  #   x = DateTime.now.as_json
  #   # => {"json_class"=>"DateTime", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \DateTime object:
  #
  #   DateTime.json_create(x) # BUG? Raises Date::Error "invalid date"
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'y' => year,
      'm' => month,
      'd' => day,
      'H' => hour,
      'M' => min,
      'S' => sec,
      'of' => offset.to_s,
      'sg' => start,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/datetime'
  #   puts DateTime.now.to_json
  #
  # Output:
  #
  #   {"json_class":"DateTime","y":2023,"m":11,"d":21,"sg":2299161.0}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end


PK*J[`�D�YY1share/gems/gems/json-2.9.1/lib/json/add/regexp.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Regexp

  # See #as_json.
  def self.json_create(object)
    new(object['s'], object['o'])
  end

  # Methods <tt>Regexp#as_json</tt> and +Regexp.json_create+ may be used
  # to serialize and deserialize a \Regexp object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Regexp#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/regexp'
  #   x = /foo/.as_json
  #   # => {"json_class"=>"Regexp", "o"=>0, "s"=>"foo"}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Regexp object:
  #
  #   Regexp.json_create(x) # => /foo/
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'o'            => options,
      's'            => source,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/regexp'
  #   puts /foo/.to_json
  #
  # Output:
  #
  #    {"json_class":"Regexp","o":0,"s":"foo"}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[D%D��1share/gems/gems/json-2.9.1/lib/json/add/struct.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Struct

  # See #as_json.
  def self.json_create(object)
    new(*object['v'])
  end

  # Methods <tt>Struct#as_json</tt> and +Struct.json_create+ may be used
  # to serialize and deserialize a \Struct object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Struct#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/struct'
  #   Customer = Struct.new('Customer', :name, :address, :zip)
  #   x = Struct::Customer.new.as_json
  #   # => {"json_class"=>"Struct::Customer", "v"=>[nil, nil, nil]}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Struct object:
  #
  #   Struct::Customer.json_create(x)
  #   # => #<struct Struct::Customer name=nil, address=nil, zip=nil>
  #
  def as_json(*)
    klass = self.class.name
    klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
    {
      JSON.create_id => klass,
      'v'            => values,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/struct'
  #   Customer = Struct.new('Customer', :name, :address, :zip)
  #   puts Struct::Customer.new.to_json
  #
  # Output:
  #
  #   {"json_class":"Struct","t":{'name':'Rowdy',"age":null}}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[�ۛ���4share/gems/gems/json-2.9.1/lib/json/add/exception.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Exception

  # See #as_json.
  def self.json_create(object)
    result = new(object['m'])
    result.set_backtrace object['b']
    result
  end

  # Methods <tt>Exception#as_json</tt> and +Exception.json_create+ may be used
  # to serialize and deserialize a \Exception object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Exception#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/exception'
  #   x = Exception.new('Foo').as_json # => {"json_class"=>"Exception", "m"=>"Foo", "b"=>nil}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Exception object:
  #
  #   Exception.json_create(x) # => #<Exception: Foo>
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'm'            => message,
      'b'            => backtrace,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/exception'
  #   puts Exception.new('Foo').to_json
  #
  # Output:
  #
  #   {"json_class":"Exception","m":"Foo","b":null}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[��

/share/gems/gems/json-2.9.1/lib/json/add/date.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
require 'date'

class Date

  # See #as_json.
  def self.json_create(object)
    civil(*object.values_at('y', 'm', 'd', 'sg'))
  end

  alias start sg unless method_defined?(:start)

  # Methods <tt>Date#as_json</tt> and +Date.json_create+ may be used
  # to serialize and deserialize a \Date object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Date#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/date'
  #   x = Date.today.as_json
  #   # => {"json_class"=>"Date", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Date object:
  #
  #   Date.json_create(x)
  #   # => #<Date: 2023-11-21 ((2460270j,0s,0n),+0s,2299161j)>
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'y' => year,
      'm' => month,
      'd' => day,
      'sg' => start,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/date'
  #   puts Date.today.to_json
  #
  # Output:
  #
  #   {"json_class":"Date","y":2023,"m":11,"d":21,"sg":2299161.0}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[t%A,/share/gems/gems/json-2.9.1/lib/json/add/time.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Time

  # See #as_json.
  def self.json_create(object)
    if usec = object.delete('u') # used to be tv_usec -> tv_nsec
      object['n'] = usec * 1000
    end
    at(object['s'], Rational(object['n'], 1000))
  end

  # Methods <tt>Time#as_json</tt> and +Time.json_create+ may be used
  # to serialize and deserialize a \Time object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Time#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/time'
  #   x = Time.now.as_json
  #   # => {"json_class"=>"Time", "s"=>1700931656, "n"=>472846644}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Time object:
  #
  #    Time.json_create(x)
  #    # => 2023-11-25 11:00:56.472846644 -0600
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      's'            => tv_sec,
      'n'            => tv_nsec,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/time'
  #   puts Time.now.to_json
  #
  # Output:
  #
  #   {"json_class":"Time","s":1700931678,"n":980650786}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[cW8�\\/share/gems/gems/json-2.9.1/lib/json/add/core.rbnu�[���# frozen_string_literal: true
# This file requires the implementations of ruby core's custom objects for
# serialisation/deserialisation.

require 'json/add/date'
require 'json/add/date_time'
require 'json/add/exception'
require 'json/add/range'
require 'json/add/regexp'
require 'json/add/struct'
require 'json/add/symbol'
require 'json/add/time'
PK*J[r����0share/gems/gems/json-2.9.1/lib/json/add/range.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Range

  # See #as_json.
  def self.json_create(object)
    new(*object['a'])
  end

  # Methods <tt>Range#as_json</tt> and +Range.json_create+ may be used
  # to serialize and deserialize a \Range object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Range#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/range'
  #   x = (1..4).as_json     # => {"json_class"=>"Range", "a"=>[1, 4, false]}
  #   y = (1...4).as_json    # => {"json_class"=>"Range", "a"=>[1, 4, true]}
  #   z = ('a'..'d').as_json # => {"json_class"=>"Range", "a"=>["a", "d", false]}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Range object:
  #
  #   Range.json_create(x) # => 1..4
  #   Range.json_create(y) # => 1...4
  #   Range.json_create(z) # => "a".."d"
  #
  def as_json(*)
    {
      JSON.create_id  => self.class.name,
      'a'             => [ first, last, exclude_end? ]
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/range'
  #   puts (1..4).to_json
  #   puts (1...4).to_json
  #   puts ('a'..'d').to_json
  #
  # Output:
  #
  #   {"json_class":"Range","a":[1,4,false]}
  #   {"json_class":"Range","a":[1,4,true]}
  #   {"json_class":"Range","a":["a","d",false]}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[��7��5share/gems/gems/json-2.9.1/lib/json/add/bigdecimal.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
begin
  require 'bigdecimal'
rescue LoadError
end

class BigDecimal

  # See #as_json.
  def self.json_create(object)
    BigDecimal._load object['b']
  end

  # Methods <tt>BigDecimal#as_json</tt> and +BigDecimal.json_create+ may be used
  # to serialize and deserialize a \BigDecimal object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>BigDecimal#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/bigdecimal'
  #   x = BigDecimal(2).as_json             # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"}
  #   y = BigDecimal(2.0, 4).as_json        # => {"json_class"=>"BigDecimal", "b"=>"36:0.2e1"}
  #   z = BigDecimal(Complex(2, 0)).as_json # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \BigDecimal object:
  #
  #   BigDecimal.json_create(x) # => 0.2e1
  #   BigDecimal.json_create(y) # => 0.2e1
  #   BigDecimal.json_create(z) # => 0.2e1
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'b'            => _dump.force_encoding(Encoding::UTF_8),
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/bigdecimal'
  #   puts BigDecimal(2).to_json
  #   puts BigDecimal(2.0, 4).to_json
  #   puts BigDecimal(Complex(2, 0)).to_json
  #
  # Output:
  #
  #   {"json_class":"BigDecimal","b":"27:0.2e1"}
  #   {"json_class":"BigDecimal","b":"36:0.2e1"}
  #   {"json_class":"BigDecimal","b":"27:0.2e1"}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end if defined?(::BigDecimal)
PK*J[5���3share/gems/gems/json-2.9.1/lib/json/add/rational.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Rational

  # See #as_json.
  def self.json_create(object)
    Rational(object['n'], object['d'])
  end

  # Methods <tt>Rational#as_json</tt> and +Rational.json_create+ may be used
  # to serialize and deserialize a \Rational object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Rational#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/rational'
  #   x = Rational(2, 3).as_json
  #   # => {"json_class"=>"Rational", "n"=>2, "d"=>3}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Rational object:
  #
  #   Rational.json_create(x)
  #   # => (2/3)
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'n'            => numerator,
      'd'            => denominator,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/rational'
  #   puts Rational(2, 3).to_json
  #
  # Output:
  #
  #   {"json_class":"Rational","n":2,"d":3}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[n˧�XX.share/gems/gems/json-2.9.1/lib/json/add/set.rbnu�[���unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
defined?(::Set) or require 'set'

class Set

  # See #as_json.
  def self.json_create(object)
    new object['a']
  end

  # Methods <tt>Set#as_json</tt> and +Set.json_create+ may be used
  # to serialize and deserialize a \Set object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Set#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/set'
  #   x = Set.new(%w/foo bar baz/).as_json
  #   # => {"json_class"=>"Set", "a"=>["foo", "bar", "baz"]}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Set object:
  #
  #   Set.json_create(x) # => #<Set: {"foo", "bar", "baz"}>
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'a'            => to_a,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/set'
  #   puts Set.new(%w/foo bar baz/).to_json
  #
  # Output:
  #
  #   {"json_class":"Set","a":["foo","bar","baz"]}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end

PK*J[i��222share/gems/gems/json-2.9.1/lib/json/add/complex.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Complex

  # See #as_json.
  def self.json_create(object)
    Complex(object['r'], object['i'])
  end

  # Methods <tt>Complex#as_json</tt> and +Complex.json_create+ may be used
  # to serialize and deserialize a \Complex object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Complex#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/complex'
  #   x = Complex(2).as_json      # => {"json_class"=>"Complex", "r"=>2, "i"=>0}
  #   y = Complex(2.0, 4).as_json # => {"json_class"=>"Complex", "r"=>2.0, "i"=>4}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Complex object:
  #
  #   Complex.json_create(x) # => (2+0i)
  #   Complex.json_create(y) # => (2.0+4i)
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'r'            => real,
      'i'            => imag,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/complex'
  #   puts Complex(2).to_json
  #   puts Complex(2.0, 4).to_json
  #
  # Output:
  #
  #   {"json_class":"Complex","r":2,"i":0}
  #   {"json_class":"Complex","r":2.0,"i":4}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK*J[A@ ��2share/gems/gems/json-2.9.1/lib/json/add/ostruct.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
begin
  require 'ostruct'
rescue LoadError
end

class OpenStruct

  # See #as_json.
  def self.json_create(object)
    new(object['t'] || object[:t])
  end

  # Methods <tt>OpenStruct#as_json</tt> and +OpenStruct.json_create+ may be used
  # to serialize and deserialize a \OpenStruct object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>OpenStruct#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/ostruct'
  #   x = OpenStruct.new('name' => 'Rowdy', :age => nil).as_json
  #   # => {"json_class"=>"OpenStruct", "t"=>{:name=>'Rowdy', :age=>nil}}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \OpenStruct object:
  #
  #   OpenStruct.json_create(x)
  #   # => #<OpenStruct name='Rowdy', age=nil>
  #
  def as_json(*)
    klass = self.class.name
    klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
    {
      JSON.create_id => klass,
      't'            => table,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/ostruct'
  #   puts OpenStruct.new('name' => 'Rowdy', :age => nil).to_json
  #
  # Output:
  #
  #   {"json_class":"OpenStruct","t":{'name':'Rowdy',"age":null}}
  #
  def to_json(*args)
    as_json.to_json(*args)
  end
end if defined?(::OpenStruct)
PK*J[�4B�1share/gems/gems/json-2.9.1/lib/json/add/symbol.rbnu�[���# frozen_string_literal: true
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Symbol

  # Methods <tt>Symbol#as_json</tt> and +Symbol.json_create+ may be used
  # to serialize and deserialize a \Symbol object;
  # see Marshal[rdoc-ref:Marshal].
  #
  # \Method <tt>Symbol#as_json</tt> serializes +self+,
  # returning a 2-element hash representing +self+:
  #
  #   require 'json/add/symbol'
  #   x = :foo.as_json
  #   # => {"json_class"=>"Symbol", "s"=>"foo"}
  #
  # \Method +JSON.create+ deserializes such a hash, returning a \Symbol object:
  #
  #   Symbol.json_create(x) # => :foo
  #
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      's'            => to_s,
    }
  end

  # Returns a JSON string representing +self+:
  #
  #   require 'json/add/symbol'
  #   puts :foo.to_json
  #
  # Output:
  #
  #   # {"json_class":"Symbol","s":"foo"}
  #
  def to_json(*a)
    as_json.to_json(*a)
  end

  # See #as_json.
  def self.json_create(o)
    o['s'].to_sym
  end
end
PK*J[�B�**5share/gems/gems/json-2.9.1/lib/json/generic_object.rbnu�[���# frozen_string_literal: true
begin
  require 'ostruct'
rescue LoadError
  warn "JSON::GenericObject requires 'ostruct'. Please install it with `gem install ostruct`."
end

module JSON
  class GenericObject < OpenStruct
    class << self
      alias [] new

      def json_creatable?
        @json_creatable
      end

      attr_writer :json_creatable

      def json_create(data)
        data = data.dup
        data.delete JSON.create_id
        self[data]
      end

      def from_hash(object)
        case
        when object.respond_to?(:to_hash)
          result = new
          object.to_hash.each do |key, value|
            result[key] = from_hash(value)
          end
          result
        when object.respond_to?(:to_ary)
          object.to_ary.map { |a| from_hash(a) }
        else
          object
        end
      end

      def load(source, proc = nil, opts = {})
        result = ::JSON.load(source, proc, opts.merge(:object_class => self))
        result.nil? ? new : result
      end

      def dump(obj, *args)
        ::JSON.dump(obj, *args)
      end
    end
    self.json_creatable = false

    def to_hash
      table
    end

    def [](name)
      __send__(name)
    end unless method_defined?(:[])

    def []=(name, value)
      __send__("#{name}=", value)
    end unless method_defined?(:[]=)

    def |(other)
      self.class[other.to_hash.merge(to_hash)]
    end

    def as_json(*)
      { JSON.create_id => self.class.name }.merge to_hash
    end

    def to_json(*a)
      as_json.to_json(*a)
    end
  end if defined?(::OpenStruct)
end
PK*J['47�CC.share/gems/gems/json-2.9.1/lib/json/version.rbnu�[���# frozen_string_literal: true

module JSON
  VERSION = '2.9.1'
end
PK*J[�A˦LL*share/gems/gems/json-2.9.1/lib/json/ext.rbnu�[���# frozen_string_literal: true

require 'json/common'

module JSON
  # This module holds all the modules/classes that implement JSON's
  # functionality as C extensions.
  module Ext
    if RUBY_ENGINE == 'truffleruby'
      require 'json/ext/parser'
      require 'json/truffle_ruby/generator'
      JSON.parser = Parser
      JSON.generator = ::JSON::TruffleRuby::Generator
    else
      require 'json/ext/parser'
      require 'json/ext/generator'
      JSON.parser = Parser
      JSON.generator = Generator
    end
  end

  JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
end
PK*J[�o�9k9k-share/gems/gems/json-2.9.1/lib/json/common.rbnu�[���# frozen_string_literal: true

require 'json/version'

module JSON
  autoload :GenericObject, 'json/generic_object'

  NOT_SET = Object.new.freeze
  private_constant :NOT_SET

  class << self
    # :call-seq:
    #   JSON[object] -> new_array or new_string
    #
    # If +object+ is a \String,
    # calls JSON.parse with +object+ and +opts+ (see method #parse):
    #   json = '[0, 1, null]'
    #   JSON[json]# => [0, 1, nil]
    #
    # Otherwise, calls JSON.generate with +object+ and +opts+ (see method #generate):
    #   ruby = [0, 1, nil]
    #   JSON[ruby] # => '[0,1,null]'
    def [](object, opts = {})
      if object.is_a?(String)
        return JSON.parse(object, opts)
      elsif object.respond_to?(:to_str)
        str = object.to_str
        if str.is_a?(String)
          return JSON.parse(str, opts)
        end
      end

      JSON.generate(object, opts)
    end

    # Returns the JSON parser class that is used by JSON.
    attr_reader :parser

    # Set the JSON parser class _parser_ to be used by JSON.
    def parser=(parser) # :nodoc:
      @parser = parser
      remove_const :Parser if const_defined?(:Parser, false)
      const_set :Parser, parser
    end

    # Return the constant located at _path_. The format of _path_ has to be
    # either ::A::B::C or A::B::C. In any case, A has to be located at the top
    # level (absolute namespace path?). If there doesn't exist a constant at
    # the given path, an ArgumentError is raised.
    def deep_const_get(path) # :nodoc:
      Object.const_get(path)
    rescue NameError => e
      raise ArgumentError, "can't get const #{path}: #{e}"
    end

    # Set the module _generator_ to be used by JSON.
    def generator=(generator) # :nodoc:
      old, $VERBOSE = $VERBOSE, nil
      @generator = generator
      generator_methods = generator::GeneratorMethods
      for const in generator_methods.constants
        klass = const_get(const)
        modul = generator_methods.const_get(const)
        klass.class_eval do
          instance_methods(false).each do |m|
            m.to_s == 'to_json' and remove_method m
          end
          include modul
        end
      end
      self.state = generator::State
      const_set :State, self.state
      const_set :SAFE_STATE_PROTOTYPE, State.new # for JRuby
      const_set :FAST_STATE_PROTOTYPE, create_fast_state
      const_set :PRETTY_STATE_PROTOTYPE, create_pretty_state
    ensure
      $VERBOSE = old
    end

    def create_fast_state
      State.new(
        :indent         => '',
        :space          => '',
        :object_nl      => "",
        :array_nl       => "",
        :max_nesting    => false
      )
    end

    def create_pretty_state
      State.new(
        :indent         => '  ',
        :space          => ' ',
        :object_nl      => "\n",
        :array_nl       => "\n"
      )
    end

    # Returns the JSON generator module that is used by JSON.
    attr_reader :generator

    # Sets or Returns the JSON generator state class that is used by JSON.
    attr_accessor :state
  end

  # Sets create identifier, which is used to decide if the _json_create_
  # hook of a class should be called; initial value is +json_class+:
  #   JSON.create_id # => 'json_class'
  def self.create_id=(new_value)
    Thread.current[:"JSON.create_id"] = new_value.dup.freeze
  end

  # Returns the current create identifier.
  # See also JSON.create_id=.
  def self.create_id
    Thread.current[:"JSON.create_id"] || 'json_class'
  end

  NaN           = 0.0/0

  Infinity      = 1.0/0

  MinusInfinity = -Infinity

  # The base exception for JSON errors.
  class JSONError < StandardError
    def self.wrap(exception)
      obj = new("Wrapped(#{exception.class}): #{exception.message.inspect}")
      obj.set_backtrace exception.backtrace
      obj
    end
  end

  # This exception is raised if a parser error occurs.
  class ParserError < JSONError; end

  # This exception is raised if the nesting of parsed data structures is too
  # deep.
  class NestingError < ParserError; end

  # :stopdoc:
  class CircularDatastructure < NestingError; end
  # :startdoc:

  # This exception is raised if a generator or unparser error occurs.
  class GeneratorError < JSONError
    attr_reader :invalid_object

    def initialize(message, invalid_object = nil)
      super(message)
      @invalid_object = invalid_object
    end

    def detailed_message(...)
      if @invalid_object.nil?
        super
      else
        "#{super}\nInvalid object: #{@invalid_object.inspect}"
      end
    end
  end

  # For backwards compatibility
  UnparserError = GeneratorError # :nodoc:

  # This exception is raised if the required unicode support is missing on the
  # system. Usually this means that the iconv library is not installed.
  class MissingUnicodeSupport < JSONError; end

  module_function

  # :call-seq:
  #   JSON.parse(source, opts) -> object
  #
  # Returns the Ruby objects created by parsing the given +source+.
  #
  # Argument +source+ contains the \String to be parsed.
  #
  # Argument +opts+, if given, contains a \Hash of options for the parsing.
  # See {Parsing Options}[#module-JSON-label-Parsing+Options].
  #
  # ---
  #
  # When +source+ is a \JSON array, returns a Ruby \Array:
  #   source = '["foo", 1.0, true, false, null]'
  #   ruby = JSON.parse(source)
  #   ruby # => ["foo", 1.0, true, false, nil]
  #   ruby.class # => Array
  #
  # When +source+ is a \JSON object, returns a Ruby \Hash:
  #   source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
  #   ruby = JSON.parse(source)
  #   ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil}
  #   ruby.class # => Hash
  #
  # For examples of parsing for all \JSON data types, see
  # {Parsing \JSON}[#module-JSON-label-Parsing+JSON].
  #
  # Parses nested JSON objects:
  #   source = <<~JSON
  #     {
  #     "name": "Dave",
  #       "age" :40,
  #       "hats": [
  #         "Cattleman's",
  #         "Panama",
  #         "Tophat"
  #       ]
  #     }
  #   JSON
  #   ruby = JSON.parse(source)
  #   ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # ---
  #
  # Raises an exception if +source+ is not valid JSON:
  #   # Raises JSON::ParserError (783: unexpected token at ''):
  #   JSON.parse('')
  #
  def parse(source, opts = nil)
    Parser.parse(source, opts)
  end

  # :call-seq:
  #   JSON.parse!(source, opts) -> object
  #
  # Calls
  #   parse(source, opts)
  # with +source+ and possibly modified +opts+.
  #
  # Differences from JSON.parse:
  # - Option +max_nesting+, if not provided, defaults to +false+,
  #   which disables checking for nesting depth.
  # - Option +allow_nan+, if not provided, defaults to +true+.
  def parse!(source, opts = {})
    opts = {
      :max_nesting  => false,
      :allow_nan    => true
    }.merge(opts)
    Parser.new(source, **(opts||{})).parse
  end

  # :call-seq:
  #   JSON.load_file(path, opts={}) -> object
  #
  # Calls:
  #   parse(File.read(path), opts)
  #
  # See method #parse.
  def load_file(filespec, opts = nil)
    parse(File.read(filespec, encoding: Encoding::UTF_8), opts)
  end

  # :call-seq:
  #   JSON.load_file!(path, opts = {})
  #
  # Calls:
  #   JSON.parse!(File.read(path, opts))
  #
  # See method #parse!
  def load_file!(filespec, opts = {})
    parse!(File.read(filespec, encoding: Encoding::UTF_8), opts)
  end

  # :call-seq:
  #   JSON.generate(obj, opts = nil) -> new_string
  #
  # Returns a \String containing the generated \JSON data.
  #
  # See also JSON.fast_generate, JSON.pretty_generate.
  #
  # Argument +obj+ is the Ruby object to be converted to \JSON.
  #
  # Argument +opts+, if given, contains a \Hash of options for the generation.
  # See {Generating Options}[#module-JSON-label-Generating+Options].
  #
  # ---
  #
  # When +obj+ is an \Array, returns a \String containing a \JSON array:
  #   obj = ["foo", 1.0, true, false, nil]
  #   json = JSON.generate(obj)
  #   json # => '["foo",1.0,true,false,null]'
  #
  # When +obj+ is a \Hash, returns a \String containing a \JSON object:
  #   obj = {foo: 0, bar: 's', baz: :bat}
  #   json = JSON.generate(obj)
  #   json # => '{"foo":0,"bar":"s","baz":"bat"}'
  #
  # For examples of generating from other Ruby objects, see
  # {Generating \JSON from Other Objects}[#module-JSON-label-Generating+JSON+from+Other+Objects].
  #
  # ---
  #
  # Raises an exception if any formatting option is not a \String.
  #
  # Raises an exception if +obj+ contains circular references:
  #   a = []; b = []; a.push(b); b.push(a)
  #   # Raises JSON::NestingError (nesting of 100 is too deep):
  #   JSON.generate(a)
  #
  def generate(obj, opts = nil)
    if State === opts
      opts.generate(obj)
    else
      State.generate(obj, opts, nil)
    end
  end

  # :stopdoc:
  # I want to deprecate these later, so I'll first be silent about them, and
  # later delete them.
  alias unparse generate
  module_function :unparse
  # :startdoc:

  # :call-seq:
  #   JSON.fast_generate(obj, opts) -> new_string
  #
  # Arguments +obj+ and +opts+ here are the same as
  # arguments +obj+ and +opts+ in JSON.generate.
  #
  # By default, generates \JSON data without checking
  # for circular references in +obj+ (option +max_nesting+ set to +false+, disabled).
  #
  # Raises an exception if +obj+ contains circular references:
  #   a = []; b = []; a.push(b); b.push(a)
  #   # Raises SystemStackError (stack level too deep):
  #   JSON.fast_generate(a)
  def fast_generate(obj, opts = nil)
    if State === opts
      state = opts
    else
      state = JSON.create_fast_state.configure(opts)
    end
    state.generate(obj)
  end

  # :stopdoc:
  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
  alias fast_unparse fast_generate
  module_function :fast_unparse
  # :startdoc:

  # :call-seq:
  #   JSON.pretty_generate(obj, opts = nil) -> new_string
  #
  # Arguments +obj+ and +opts+ here are the same as
  # arguments +obj+ and +opts+ in JSON.generate.
  #
  # Default options are:
  #   {
  #     indent: '  ',   # Two spaces
  #     space: ' ',     # One space
  #     array_nl: "\n", # Newline
  #     object_nl: "\n" # Newline
  #   }
  #
  # Example:
  #   obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
  #   json = JSON.pretty_generate(obj)
  #   puts json
  # Output:
  #   {
  #     "foo": [
  #       "bar",
  #       "baz"
  #     ],
  #     "bat": {
  #       "bam": 0,
  #       "bad": 1
  #     }
  #   }
  #
  def pretty_generate(obj, opts = nil)
    if State === opts
      state, opts = opts, nil
    else
      state = JSON.create_pretty_state
    end
    if opts
      if opts.respond_to? :to_hash
        opts = opts.to_hash
      elsif opts.respond_to? :to_h
        opts = opts.to_h
      else
        raise TypeError, "can't convert #{opts.class} into Hash"
      end
      state.configure(opts)
    end
    state.generate(obj)
  end

  # :stopdoc:
  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
  alias pretty_unparse pretty_generate
  module_function :pretty_unparse
  # :startdoc:

  class << self
    # Sets or returns default options for the JSON.unsafe_load method.
    # Initially:
    #   opts = JSON.load_default_options
    #   opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true}
    attr_accessor :unsafe_load_default_options
  end
  self.unsafe_load_default_options = {
    :max_nesting      => false,
    :allow_nan        => true,
    :allow_blank      => true,
    :create_additions => true,
  }

  class << self
    # Sets or returns default options for the JSON.load method.
    # Initially:
    #   opts = JSON.load_default_options
    #   opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true}
    attr_accessor :load_default_options
  end
  self.load_default_options = {
    :allow_nan        => true,
    :allow_blank      => true,
    :create_additions => nil,
  }
  # :call-seq:
  #   JSON.unsafe_load(source, proc = nil, options = {}) -> object
  #
  # Returns the Ruby objects created by parsing the given +source+.
  #
  # BEWARE: This method is meant to serialise data from trusted user input,
  # like from your own database server or clients under your control, it could
  # be dangerous to allow untrusted users to pass JSON sources into it.
  #
  # - Argument +source+ must be, or be convertible to, a \String:
  #   - If +source+ responds to instance method +to_str+,
  #     <tt>source.to_str</tt> becomes the source.
  #   - If +source+ responds to instance method +to_io+,
  #     <tt>source.to_io.read</tt> becomes the source.
  #   - If +source+ responds to instance method +read+,
  #     <tt>source.read</tt> becomes the source.
  #   - If both of the following are true, source becomes the \String <tt>'null'</tt>:
  #     - Option +allow_blank+ specifies a truthy value.
  #     - The source, as defined above, is +nil+ or the empty \String <tt>''</tt>.
  #   - Otherwise, +source+ remains the source.
  # - Argument +proc+, if given, must be a \Proc that accepts one argument.
  #   It will be called recursively with each result (depth-first order).
  #   See details below.
  # - Argument +opts+, if given, contains a \Hash of options for the parsing.
  #   See {Parsing Options}[#module-JSON-label-Parsing+Options].
  #   The default options can be changed via method JSON.unsafe_load_default_options=.
  #
  # ---
  #
  # When no +proc+ is given, modifies +source+ as above and returns the result of
  # <tt>parse(source, opts)</tt>;  see #parse.
  #
  # Source for following examples:
  #   source = <<~JSON
  #     {
  #       "name": "Dave",
  #       "age" :40,
  #       "hats": [
  #         "Cattleman's",
  #         "Panama",
  #         "Tophat"
  #       ]
  #     }
  #   JSON
  #
  # Load a \String:
  #   ruby = JSON.unsafe_load(source)
  #   ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # Load an \IO object:
  #   require 'stringio'
  #   object = JSON.unsafe_load(StringIO.new(source))
  #   object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # Load a \File object:
  #   path = 't.json'
  #   File.write(path, source)
  #   File.open(path) do |file|
  #     JSON.unsafe_load(file)
  #   end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # ---
  #
  # When +proc+ is given:
  # - Modifies +source+ as above.
  # - Gets the +result+ from calling <tt>parse(source, opts)</tt>.
  # - Recursively calls <tt>proc(result)</tt>.
  # - Returns the final result.
  #
  # Example:
  #   require 'json'
  #
  #   # Some classes for the example.
  #   class Base
  #     def initialize(attributes)
  #       @attributes = attributes
  #     end
  #   end
  #   class User    < Base; end
  #   class Account < Base; end
  #   class Admin   < Base; end
  #   # The JSON source.
  #   json = <<-EOF
  #   {
  #     "users": [
  #         {"type": "User", "username": "jane", "email": "jane@example.com"},
  #         {"type": "User", "username": "john", "email": "john@example.com"}
  #     ],
  #     "accounts": [
  #         {"account": {"type": "Account", "paid": true, "account_id": "1234"}},
  #         {"account": {"type": "Account", "paid": false, "account_id": "1235"}}
  #     ],
  #     "admins": {"type": "Admin", "password": "0wn3d"}
  #   }
  #   EOF
  #   # Deserializer method.
  #   def deserialize_obj(obj, safe_types = %w(User Account Admin))
  #     type = obj.is_a?(Hash) && obj["type"]
  #     safe_types.include?(type) ? Object.const_get(type).new(obj) : obj
  #   end
  #   # Call to JSON.unsafe_load
  #   ruby = JSON.unsafe_load(json, proc {|obj|
  #     case obj
  #     when Hash
  #       obj.each {|k, v| obj[k] = deserialize_obj v }
  #     when Array
  #       obj.map! {|v| deserialize_obj v }
  #     end
  #   })
  #   pp ruby
  # Output:
  #   {"users"=>
  #      [#<User:0x00000000064c4c98
  #        @attributes=
  #          {"type"=>"User", "username"=>"jane", "email"=>"jane@example.com"}>,
  #        #<User:0x00000000064c4bd0
  #        @attributes=
  #          {"type"=>"User", "username"=>"john", "email"=>"john@example.com"}>],
  #    "accounts"=>
  #      [{"account"=>
  #          #<Account:0x00000000064c4928
  #          @attributes={"type"=>"Account", "paid"=>true, "account_id"=>"1234"}>},
  #       {"account"=>
  #          #<Account:0x00000000064c4680
  #          @attributes={"type"=>"Account", "paid"=>false, "account_id"=>"1235"}>}],
  #    "admins"=>
  #      #<Admin:0x00000000064c41f8
  #      @attributes={"type"=>"Admin", "password"=>"0wn3d"}>}
  #
  def unsafe_load(source, proc = nil, options = nil)
    opts = if options.nil?
      unsafe_load_default_options
    else
      unsafe_load_default_options.merge(options)
    end

    unless source.is_a?(String)
      if source.respond_to? :to_str
        source = source.to_str
      elsif source.respond_to? :to_io
        source = source.to_io.read
      elsif source.respond_to?(:read)
        source = source.read
      end
    end

    if opts[:allow_blank] && (source.nil? || source.empty?)
      source = 'null'
    end
    result = parse(source, opts)
    recurse_proc(result, &proc) if proc
    result
  end

  # :call-seq:
  #   JSON.load(source, proc = nil, options = {}) -> object
  #
  # Returns the Ruby objects created by parsing the given +source+.
  #
  # BEWARE: This method is meant to serialise data from trusted user input,
  # like from your own database server or clients under your control, it could
  # be dangerous to allow untrusted users to pass JSON sources into it.
  # If you must use it, use JSON.unsafe_load instead to make it clear.
  #
  # Since JSON version 2.8.0, `load` emits a deprecation warning when a
  # non native type is deserialized, without `create_additions` being explicitly
  # enabled, and in JSON version 3.0, `load` will have `create_additions` disabled
  # by default.
  #
  # - Argument +source+ must be, or be convertible to, a \String:
  #   - If +source+ responds to instance method +to_str+,
  #     <tt>source.to_str</tt> becomes the source.
  #   - If +source+ responds to instance method +to_io+,
  #     <tt>source.to_io.read</tt> becomes the source.
  #   - If +source+ responds to instance method +read+,
  #     <tt>source.read</tt> becomes the source.
  #   - If both of the following are true, source becomes the \String <tt>'null'</tt>:
  #     - Option +allow_blank+ specifies a truthy value.
  #     - The source, as defined above, is +nil+ or the empty \String <tt>''</tt>.
  #   - Otherwise, +source+ remains the source.
  # - Argument +proc+, if given, must be a \Proc that accepts one argument.
  #   It will be called recursively with each result (depth-first order).
  #   See details below.
  # - Argument +opts+, if given, contains a \Hash of options for the parsing.
  #   See {Parsing Options}[#module-JSON-label-Parsing+Options].
  #   The default options can be changed via method JSON.load_default_options=.
  #
  # ---
  #
  # When no +proc+ is given, modifies +source+ as above and returns the result of
  # <tt>parse(source, opts)</tt>;  see #parse.
  #
  # Source for following examples:
  #   source = <<~JSON
  #     {
  #       "name": "Dave",
  #       "age" :40,
  #       "hats": [
  #         "Cattleman's",
  #         "Panama",
  #         "Tophat"
  #       ]
  #     }
  #   JSON
  #
  # Load a \String:
  #   ruby = JSON.load(source)
  #   ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # Load an \IO object:
  #   require 'stringio'
  #   object = JSON.load(StringIO.new(source))
  #   object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # Load a \File object:
  #   path = 't.json'
  #   File.write(path, source)
  #   File.open(path) do |file|
  #     JSON.load(file)
  #   end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # ---
  #
  # When +proc+ is given:
  # - Modifies +source+ as above.
  # - Gets the +result+ from calling <tt>parse(source, opts)</tt>.
  # - Recursively calls <tt>proc(result)</tt>.
  # - Returns the final result.
  #
  # Example:
  #   require 'json'
  #
  #   # Some classes for the example.
  #   class Base
  #     def initialize(attributes)
  #       @attributes = attributes
  #     end
  #   end
  #   class User    < Base; end
  #   class Account < Base; end
  #   class Admin   < Base; end
  #   # The JSON source.
  #   json = <<-EOF
  #   {
  #     "users": [
  #         {"type": "User", "username": "jane", "email": "jane@example.com"},
  #         {"type": "User", "username": "john", "email": "john@example.com"}
  #     ],
  #     "accounts": [
  #         {"account": {"type": "Account", "paid": true, "account_id": "1234"}},
  #         {"account": {"type": "Account", "paid": false, "account_id": "1235"}}
  #     ],
  #     "admins": {"type": "Admin", "password": "0wn3d"}
  #   }
  #   EOF
  #   # Deserializer method.
  #   def deserialize_obj(obj, safe_types = %w(User Account Admin))
  #     type = obj.is_a?(Hash) && obj["type"]
  #     safe_types.include?(type) ? Object.const_get(type).new(obj) : obj
  #   end
  #   # Call to JSON.load
  #   ruby = JSON.load(json, proc {|obj|
  #     case obj
  #     when Hash
  #       obj.each {|k, v| obj[k] = deserialize_obj v }
  #     when Array
  #       obj.map! {|v| deserialize_obj v }
  #     end
  #   })
  #   pp ruby
  # Output:
  #   {"users"=>
  #      [#<User:0x00000000064c4c98
  #        @attributes=
  #          {"type"=>"User", "username"=>"jane", "email"=>"jane@example.com"}>,
  #        #<User:0x00000000064c4bd0
  #        @attributes=
  #          {"type"=>"User", "username"=>"john", "email"=>"john@example.com"}>],
  #    "accounts"=>
  #      [{"account"=>
  #          #<Account:0x00000000064c4928
  #          @attributes={"type"=>"Account", "paid"=>true, "account_id"=>"1234"}>},
  #       {"account"=>
  #          #<Account:0x00000000064c4680
  #          @attributes={"type"=>"Account", "paid"=>false, "account_id"=>"1235"}>}],
  #    "admins"=>
  #      #<Admin:0x00000000064c41f8
  #      @attributes={"type"=>"Admin", "password"=>"0wn3d"}>}
  #
  def load(source, proc = nil, options = nil)
    opts = if options.nil?
      load_default_options
    else
      load_default_options.merge(options)
    end

    unless source.is_a?(String)
      if source.respond_to? :to_str
        source = source.to_str
      elsif source.respond_to? :to_io
        source = source.to_io.read
      elsif source.respond_to?(:read)
        source = source.read
      end
    end

    if opts[:allow_blank] && (source.nil? || source.empty?)
      source = 'null'
    end
    result = parse(source, opts)
    recurse_proc(result, &proc) if proc
    result
  end

  # Recursively calls passed _Proc_ if the parsed data structure is an _Array_ or _Hash_
  def recurse_proc(result, &proc) # :nodoc:
    case result
    when Array
      result.each { |x| recurse_proc x, &proc }
      proc.call result
    when Hash
      result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc }
      proc.call result
    else
      proc.call result
    end
  end

  alias restore load
  module_function :restore

  class << self
    # Sets or returns the default options for the JSON.dump method.
    # Initially:
    #   opts = JSON.dump_default_options
    #   opts # => {:max_nesting=>false, :allow_nan=>true}
    attr_accessor :dump_default_options
  end
  self.dump_default_options = {
    :max_nesting => false,
    :allow_nan   => true,
  }

  # :call-seq:
  #   JSON.dump(obj, io = nil, limit = nil)
  #
  # Dumps +obj+ as a \JSON string, i.e. calls generate on the object and returns the result.
  #
  # The default options can be changed via method JSON.dump_default_options.
  #
  # - Argument +io+, if given, should respond to method +write+;
  #   the \JSON \String is written to +io+, and +io+ is returned.
  #   If +io+ is not given, the \JSON \String is returned.
  # - Argument +limit+, if given, is passed to JSON.generate as option +max_nesting+.
  #
  # ---
  #
  # When argument +io+ is not given, returns the \JSON \String generated from +obj+:
  #   obj = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
  #   json = JSON.dump(obj)
  #   json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}"
  #
  # When argument +io+ is given, writes the \JSON \String to +io+ and returns +io+:
  #   path = 't.json'
  #   File.open(path, 'w') do |file|
  #     JSON.dump(obj, file)
  #   end # => #<File:t.json (closed)>
  #   puts File.read(path)
  # Output:
  #   {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}
  def dump(obj, anIO = nil, limit = nil, kwargs = nil)
    if kwargs.nil?
      if limit.nil?
        if anIO.is_a?(Hash)
          kwargs = anIO
          anIO = nil
        end
      elsif limit.is_a?(Hash)
        kwargs = limit
        limit = nil
      end
    end

    unless anIO.nil?
      if anIO.respond_to?(:to_io)
        anIO = anIO.to_io
      elsif limit.nil? && !anIO.respond_to?(:write)
        anIO, limit = nil, anIO
      end
    end

    opts = JSON.dump_default_options
    opts = opts.merge(:max_nesting => limit) if limit
    opts = merge_dump_options(opts, **kwargs) if kwargs

    begin
      if State === opts
        opts.generate(obj, anIO)
      else
        State.generate(obj, opts, anIO)
      end
    rescue JSON::NestingError
      raise ArgumentError, "exceed depth limit"
    end
  end

  # Encodes string using String.encode.
  def self.iconv(to, from, string)
    string.encode(to, from)
  end

  def merge_dump_options(opts, strict: NOT_SET)
    opts = opts.merge(strict: strict) if NOT_SET != strict
    opts
  end

  class << self
    private :merge_dump_options
  end
end

module ::Kernel
  private

  # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
  # one line.
  def j(*objs)
    objs.each do |obj|
      puts JSON::generate(obj, :allow_nan => true, :max_nesting => false)
    end
    nil
  end

  # Outputs _objs_ to STDOUT as JSON strings in a pretty format, with
  # indentation and over many lines.
  def jj(*objs)
    objs.each do |obj|
      puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)
    end
    nil
  end

  # If _object_ is string-like, parse the string and return the parsed result as
  # a Ruby data structure. Otherwise, generate a JSON text from the Ruby data
  # structure object and return it.
  #
  # The _opts_ argument is passed through to generate/parse respectively. See
  # generate and parse for their documentation.
  def JSON(object, *args)
    if object.is_a?(String)
      return JSON.parse(object, args.first)
    elsif object.respond_to?(:to_str)
      str = object.to_str
      if str.is_a?(String)
        return JSON.parse(object.to_str, args.first)
      end
    end

    JSON.generate(object, args.first)
  end
end

# Extends any Class to include _json_creatable?_ method.
class ::Class
  # Returns true if this class can be used to create an instance
  # from a serialised JSON string. The class has to implement a class
  # method _json_create_ that expects a hash as first parameter. The hash
  # should include the required data.
  def json_creatable?
    respond_to?(:json_create)
  end
end
PK*J[�̹WNWN&share/gems/gems/json-2.9.1/lib/json.rbnu�[���# frozen_string_literal: true
require 'json/common'

##
# = JavaScript \Object Notation (\JSON)
#
# \JSON is a lightweight data-interchange format.
#
# A \JSON value is one of the following:
# - Double-quoted text:  <tt>"foo"</tt>.
# - Number:  +1+, +1.0+, +2.0e2+.
# - Boolean:  +true+, +false+.
# - Null: +null+.
# - \Array: an ordered list of values, enclosed by square brackets:
#     ["foo", 1, 1.0, 2.0e2, true, false, null]
#
# - \Object: a collection of name/value pairs, enclosed by curly braces;
#   each name is double-quoted text;
#   the values may be any \JSON values:
#     {"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}
#
# A \JSON array or object may contain nested arrays, objects, and scalars
# to any depth:
#   {"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}
#   [{"foo": 0, "bar": 1}, ["baz", 2]]
#
# == Using \Module \JSON
#
# To make module \JSON available in your code, begin with:
#   require 'json'
#
# All examples here assume that this has been done.
#
# === Parsing \JSON
#
# You can parse a \String containing \JSON data using
# either of two methods:
# - <tt>JSON.parse(source, opts)</tt>
# - <tt>JSON.parse!(source, opts)</tt>
#
# where
# - +source+ is a Ruby object.
# - +opts+ is a \Hash object containing options
#   that control both input allowed and output formatting.
#
# The difference between the two methods
# is that JSON.parse! omits some checks
# and may not be safe for some +source+ data;
# use it only for data from trusted sources.
# Use the safer method JSON.parse for less trusted sources.
#
# ==== Parsing \JSON Arrays
#
# When +source+ is a \JSON array, JSON.parse by default returns a Ruby \Array:
#   json = '["foo", 1, 1.0, 2.0e2, true, false, null]'
#   ruby = JSON.parse(json)
#   ruby # => ["foo", 1, 1.0, 200.0, true, false, nil]
#   ruby.class # => Array
#
# The \JSON array may contain nested arrays, objects, and scalars
# to any depth:
#   json = '[{"foo": 0, "bar": 1}, ["baz", 2]]'
#   JSON.parse(json) # => [{"foo"=>0, "bar"=>1}, ["baz", 2]]
#
# ==== Parsing \JSON \Objects
#
# When the source is a \JSON object, JSON.parse by default returns a Ruby \Hash:
#   json = '{"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}'
#   ruby = JSON.parse(json)
#   ruby # => {"a"=>"foo", "b"=>1, "c"=>1.0, "d"=>200.0, "e"=>true, "f"=>false, "g"=>nil}
#   ruby.class # => Hash
#
# The \JSON object may contain nested arrays, objects, and scalars
# to any depth:
#   json = '{"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}'
#   JSON.parse(json) # => {"foo"=>{"bar"=>1, "baz"=>2}, "bat"=>[0, 1, 2]}
#
# ==== Parsing \JSON Scalars
#
# When the source is a \JSON scalar (not an array or object),
# JSON.parse returns a Ruby scalar.
#
# \String:
#   ruby = JSON.parse('"foo"')
#   ruby # => 'foo'
#   ruby.class # => String
# \Integer:
#   ruby = JSON.parse('1')
#   ruby # => 1
#   ruby.class # => Integer
# \Float:
#   ruby = JSON.parse('1.0')
#   ruby # => 1.0
#   ruby.class # => Float
#   ruby = JSON.parse('2.0e2')
#   ruby # => 200
#   ruby.class # => Float
# Boolean:
#   ruby = JSON.parse('true')
#   ruby # => true
#   ruby.class # => TrueClass
#   ruby = JSON.parse('false')
#   ruby # => false
#   ruby.class # => FalseClass
# Null:
#   ruby = JSON.parse('null')
#   ruby # => nil
#   ruby.class # => NilClass
#
# ==== Parsing Options
#
# ====== Input Options
#
# Option +max_nesting+ (\Integer) specifies the maximum nesting depth allowed;
# defaults to +100+; specify +false+ to disable depth checking.
#
# With the default, +false+:
#   source = '[0, [1, [2, [3]]]]'
#   ruby = JSON.parse(source)
#   ruby # => [0, [1, [2, [3]]]]
# Too deep:
#   # Raises JSON::NestingError (nesting of 2 is too deep):
#   JSON.parse(source, {max_nesting: 1})
# Bad value:
#   # Raises TypeError (wrong argument type Symbol (expected Fixnum)):
#   JSON.parse(source, {max_nesting: :foo})
#
# ---
#
# Option +allow_nan+ (boolean) specifies whether to allow
# NaN, Infinity, and MinusInfinity in +source+;
# defaults to +false+.
#
# With the default, +false+:
#   # Raises JSON::ParserError (225: unexpected token at '[NaN]'):
#   JSON.parse('[NaN]')
#   # Raises JSON::ParserError (232: unexpected token at '[Infinity]'):
#   JSON.parse('[Infinity]')
#   # Raises JSON::ParserError (248: unexpected token at '[-Infinity]'):
#   JSON.parse('[-Infinity]')
# Allow:
#   source = '[NaN, Infinity, -Infinity]'
#   ruby = JSON.parse(source, {allow_nan: true})
#   ruby # => [NaN, Infinity, -Infinity]
#
# ====== Output Options
#
# Option +symbolize_names+ (boolean) specifies whether returned \Hash keys
# should be Symbols;
# defaults to +false+ (use Strings).
#
# With the default, +false+:
#   source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
#   ruby = JSON.parse(source)
#   ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil}
# Use Symbols:
#   ruby = JSON.parse(source, {symbolize_names: true})
#   ruby # => {:a=>"foo", :b=>1.0, :c=>true, :d=>false, :e=>nil}
#
# ---
#
# Option +object_class+ (\Class) specifies the Ruby class to be used
# for each \JSON object;
# defaults to \Hash.
#
# With the default, \Hash:
#   source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
#   ruby = JSON.parse(source)
#   ruby.class # => Hash
# Use class \OpenStruct:
#   ruby = JSON.parse(source, {object_class: OpenStruct})
#   ruby # => #<OpenStruct a="foo", b=1.0, c=true, d=false, e=nil>
#
# ---
#
# Option +array_class+ (\Class) specifies the Ruby class to be used
# for each \JSON array;
# defaults to \Array.
#
# With the default, \Array:
#   source = '["foo", 1.0, true, false, null]'
#   ruby = JSON.parse(source)
#   ruby.class # => Array
# Use class \Set:
#   ruby = JSON.parse(source, {array_class: Set})
#   ruby # => #<Set: {"foo", 1.0, true, false, nil}>
#
# ---
#
# Option +create_additions+ (boolean) specifies whether to use \JSON additions in parsing.
# See {\JSON Additions}[#module-JSON-label-JSON+Additions].
#
# === Generating \JSON
#
# To generate a Ruby \String containing \JSON data,
# use method <tt>JSON.generate(source, opts)</tt>, where
# - +source+ is a Ruby object.
# - +opts+ is a \Hash object containing options
#   that control both input allowed and output formatting.
#
# ==== Generating \JSON from Arrays
#
# When the source is a Ruby \Array, JSON.generate returns
# a \String containing a \JSON array:
#   ruby = [0, 's', :foo]
#   json = JSON.generate(ruby)
#   json # => '[0,"s","foo"]'
#
# The Ruby \Array array may contain nested arrays, hashes, and scalars
# to any depth:
#   ruby = [0, [1, 2], {foo: 3, bar: 4}]
#   json = JSON.generate(ruby)
#   json # => '[0,[1,2],{"foo":3,"bar":4}]'
#
# ==== Generating \JSON from Hashes
#
# When the source is a Ruby \Hash, JSON.generate returns
# a \String containing a \JSON object:
#   ruby = {foo: 0, bar: 's', baz: :bat}
#   json = JSON.generate(ruby)
#   json # => '{"foo":0,"bar":"s","baz":"bat"}'
#
# The Ruby \Hash array may contain nested arrays, hashes, and scalars
# to any depth:
#   ruby = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
#   json = JSON.generate(ruby)
#   json # => '{"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}'
#
# ==== Generating \JSON from Other Objects
#
# When the source is neither an \Array nor a \Hash,
# the generated \JSON data depends on the class of the source.
#
# When the source is a Ruby \Integer or \Float, JSON.generate returns
# a \String containing a \JSON number:
#   JSON.generate(42) # => '42'
#   JSON.generate(0.42) # => '0.42'
#
# When the source is a Ruby \String, JSON.generate returns
# a \String containing a \JSON string (with double-quotes):
#   JSON.generate('A string') # => '"A string"'
#
# When the source is +true+, +false+ or +nil+, JSON.generate returns
# a \String containing the corresponding \JSON token:
#   JSON.generate(true) # => 'true'
#   JSON.generate(false) # => 'false'
#   JSON.generate(nil) # => 'null'
#
# When the source is none of the above, JSON.generate returns
# a \String containing a \JSON string representation of the source:
#   JSON.generate(:foo) # => '"foo"'
#   JSON.generate(Complex(0, 0)) # => '"0+0i"'
#   JSON.generate(Dir.new('.')) # => '"#<Dir>"'
#
# ==== Generating Options
#
# ====== Input Options
#
# Option +allow_nan+ (boolean) specifies whether
# +NaN+, +Infinity+, and <tt>-Infinity</tt> may be generated;
# defaults to +false+.
#
# With the default, +false+:
#   # Raises JSON::GeneratorError (920: NaN not allowed in JSON):
#   JSON.generate(JSON::NaN)
#   # Raises JSON::GeneratorError (917: Infinity not allowed in JSON):
#   JSON.generate(JSON::Infinity)
#   # Raises JSON::GeneratorError (917: -Infinity not allowed in JSON):
#   JSON.generate(JSON::MinusInfinity)
#
# Allow:
#   ruby = [Float::NaN, Float::Infinity, Float::MinusInfinity]
#   JSON.generate(ruby, allow_nan: true) # => '[NaN,Infinity,-Infinity]'
#
# ---
#
# Option +max_nesting+ (\Integer) specifies the maximum nesting depth
# in +obj+; defaults to +100+.
#
# With the default, +100+:
#   obj = [[[[[[0]]]]]]
#   JSON.generate(obj) # => '[[[[[[0]]]]]]'
#
# Too deep:
#   # Raises JSON::NestingError (nesting of 2 is too deep):
#   JSON.generate(obj, max_nesting: 2)
#
# ====== Escaping Options
#
# Options +script_safe+ (boolean) specifies wether <tt>'\u2028'</tt>, <tt>'\u2029'</tt>
# and <tt>'/'</tt> should be escaped as to make the JSON object safe to interpolate in script
# tags.
#
# Options +ascii_only+ (boolean) specifies wether all characters outside the ASCII range
# should be escaped.
#
# ====== Output Options
#
# The default formatting options generate the most compact
# \JSON data, all on one line and with no whitespace.
#
# You can use these formatting options to generate
# \JSON data in a more open format, using whitespace.
# See also JSON.pretty_generate.
#
# - Option +array_nl+ (\String) specifies a string (usually a newline)
#   to be inserted after each \JSON array; defaults to the empty \String, <tt>''</tt>.
# - Option +object_nl+ (\String) specifies a string (usually a newline)
#   to be inserted after each \JSON object; defaults to the empty \String, <tt>''</tt>.
# - Option +indent+ (\String) specifies the string (usually spaces) to be
#   used for indentation; defaults to the empty \String, <tt>''</tt>;
#   defaults to the empty \String, <tt>''</tt>;
#   has no effect unless options +array_nl+ or +object_nl+ specify newlines.
# - Option +space+ (\String) specifies a string (usually a space) to be
#   inserted after the colon in each \JSON object's pair;
#   defaults to the empty \String, <tt>''</tt>.
# - Option +space_before+ (\String) specifies a string (usually a space) to be
#   inserted before the colon in each \JSON object's pair;
#   defaults to the empty \String, <tt>''</tt>.
#
# In this example, +obj+ is used first to generate the shortest
# \JSON data (no whitespace), then again with all formatting options
# specified:
#
#   obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
#   json = JSON.generate(obj)
#   puts 'Compact:', json
#   opts = {
#     array_nl: "\n",
#     object_nl: "\n",
#     indent: '  ',
#     space_before: ' ',
#     space: ' '
#   }
#   puts 'Open:', JSON.generate(obj, opts)
#
# Output:
#   Compact:
#   {"foo":["bar","baz"],"bat":{"bam":0,"bad":1}}
#   Open:
#   {
#     "foo" : [
#       "bar",
#       "baz"
#   ],
#     "bat" : {
#       "bam" : 0,
#       "bad" : 1
#     }
#   }
#
# == \JSON Additions
#
# When you "round trip" a non-\String object from Ruby to \JSON and back,
# you have a new \String, instead of the object you began with:
#   ruby0 = Range.new(0, 2)
#   json = JSON.generate(ruby0)
#   json # => '0..2"'
#   ruby1 = JSON.parse(json)
#   ruby1 # => '0..2'
#   ruby1.class # => String
#
# You can use \JSON _additions_ to preserve the original object.
# The addition is an extension of a ruby class, so that:
# - \JSON.generate stores more information in the \JSON string.
# - \JSON.parse, called with option +create_additions+,
#   uses that information to create a proper Ruby object.
#
# This example shows a \Range being generated into \JSON
# and parsed back into Ruby, both without and with
# the addition for \Range:
#   ruby = Range.new(0, 2)
#   # This passage does not use the addition for Range.
#   json0 = JSON.generate(ruby)
#   ruby0 = JSON.parse(json0)
#   # This passage uses the addition for Range.
#   require 'json/add/range'
#   json1 = JSON.generate(ruby)
#   ruby1 = JSON.parse(json1, create_additions: true)
#   # Make a nice display.
#   display = <<~EOT
#     Generated JSON:
#       Without addition:  #{json0} (#{json0.class})
#       With addition:     #{json1} (#{json1.class})
#     Parsed JSON:
#       Without addition:  #{ruby0.inspect} (#{ruby0.class})
#       With addition:     #{ruby1.inspect} (#{ruby1.class})
#   EOT
#   puts display
#
# This output shows the different results:
#   Generated JSON:
#     Without addition:  "0..2" (String)
#     With addition:     {"json_class":"Range","a":[0,2,false]} (String)
#   Parsed JSON:
#     Without addition:  "0..2" (String)
#     With addition:     0..2 (Range)
#
# The \JSON module includes additions for certain classes.
# You can also craft custom additions.
# See {Custom \JSON Additions}[#module-JSON-label-Custom+JSON+Additions].
#
# === Built-in Additions
#
# The \JSON module includes additions for certain classes.
# To use an addition, +require+ its source:
# - BigDecimal: <tt>require 'json/add/bigdecimal'</tt>
# - Complex: <tt>require 'json/add/complex'</tt>
# - Date: <tt>require 'json/add/date'</tt>
# - DateTime: <tt>require 'json/add/date_time'</tt>
# - Exception: <tt>require 'json/add/exception'</tt>
# - OpenStruct: <tt>require 'json/add/ostruct'</tt>
# - Range: <tt>require 'json/add/range'</tt>
# - Rational: <tt>require 'json/add/rational'</tt>
# - Regexp: <tt>require 'json/add/regexp'</tt>
# - Set: <tt>require 'json/add/set'</tt>
# - Struct: <tt>require 'json/add/struct'</tt>
# - Symbol: <tt>require 'json/add/symbol'</tt>
# - Time: <tt>require 'json/add/time'</tt>
#
# To reduce punctuation clutter, the examples below
# show the generated \JSON via +puts+, rather than the usual +inspect+,
#
# \BigDecimal:
#   require 'json/add/bigdecimal'
#   ruby0 = BigDecimal(0) # 0.0
#   json = JSON.generate(ruby0) # {"json_class":"BigDecimal","b":"27:0.0"}
#   ruby1 = JSON.parse(json, create_additions: true) # 0.0
#   ruby1.class # => BigDecimal
#
# \Complex:
#   require 'json/add/complex'
#   ruby0 = Complex(1+0i) # 1+0i
#   json = JSON.generate(ruby0) # {"json_class":"Complex","r":1,"i":0}
#   ruby1 = JSON.parse(json, create_additions: true) # 1+0i
#   ruby1.class # Complex
#
# \Date:
#   require 'json/add/date'
#   ruby0 = Date.today # 2020-05-02
#   json = JSON.generate(ruby0) # {"json_class":"Date","y":2020,"m":5,"d":2,"sg":2299161.0}
#   ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02
#   ruby1.class # Date
#
# \DateTime:
#   require 'json/add/date_time'
#   ruby0 = DateTime.now # 2020-05-02T10:38:13-05:00
#   json = JSON.generate(ruby0) # {"json_class":"DateTime","y":2020,"m":5,"d":2,"H":10,"M":38,"S":13,"of":"-5/24","sg":2299161.0}
#   ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02T10:38:13-05:00
#   ruby1.class # DateTime
#
# \Exception (and its subclasses including \RuntimeError):
#   require 'json/add/exception'
#   ruby0 = Exception.new('A message') # A message
#   json = JSON.generate(ruby0) # {"json_class":"Exception","m":"A message","b":null}
#   ruby1 = JSON.parse(json, create_additions: true) # A message
#   ruby1.class # Exception
#   ruby0 = RuntimeError.new('Another message') # Another message
#   json = JSON.generate(ruby0) # {"json_class":"RuntimeError","m":"Another message","b":null}
#   ruby1 = JSON.parse(json, create_additions: true) # Another message
#   ruby1.class # RuntimeError
#
# \OpenStruct:
#   require 'json/add/ostruct'
#   ruby0 = OpenStruct.new(name: 'Matz', language: 'Ruby') # #<OpenStruct name="Matz", language="Ruby">
#   json = JSON.generate(ruby0) # {"json_class":"OpenStruct","t":{"name":"Matz","language":"Ruby"}}
#   ruby1 = JSON.parse(json, create_additions: true) # #<OpenStruct name="Matz", language="Ruby">
#   ruby1.class # OpenStruct
#
# \Range:
#   require 'json/add/range'
#   ruby0 = Range.new(0, 2) # 0..2
#   json = JSON.generate(ruby0) # {"json_class":"Range","a":[0,2,false]}
#   ruby1 = JSON.parse(json, create_additions: true) # 0..2
#   ruby1.class # Range
#
# \Rational:
#   require 'json/add/rational'
#   ruby0 = Rational(1, 3) # 1/3
#   json = JSON.generate(ruby0) # {"json_class":"Rational","n":1,"d":3}
#   ruby1 = JSON.parse(json, create_additions: true) # 1/3
#   ruby1.class # Rational
#
# \Regexp:
#   require 'json/add/regexp'
#   ruby0 = Regexp.new('foo') # (?-mix:foo)
#   json = JSON.generate(ruby0) # {"json_class":"Regexp","o":0,"s":"foo"}
#   ruby1 = JSON.parse(json, create_additions: true) # (?-mix:foo)
#   ruby1.class # Regexp
#
# \Set:
#   require 'json/add/set'
#   ruby0 = Set.new([0, 1, 2]) # #<Set: {0, 1, 2}>
#   json = JSON.generate(ruby0) # {"json_class":"Set","a":[0,1,2]}
#   ruby1 = JSON.parse(json, create_additions: true) # #<Set: {0, 1, 2}>
#   ruby1.class # Set
#
# \Struct:
#   require 'json/add/struct'
#   Customer = Struct.new(:name, :address) # Customer
#   ruby0 = Customer.new("Dave", "123 Main") # #<struct Customer name="Dave", address="123 Main">
#   json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]}
#   ruby1 = JSON.parse(json, create_additions: true) # #<struct Customer name="Dave", address="123 Main">
#   ruby1.class # Customer
#
# \Symbol:
#   require 'json/add/symbol'
#   ruby0 = :foo # foo
#   json = JSON.generate(ruby0) # {"json_class":"Symbol","s":"foo"}
#   ruby1 = JSON.parse(json, create_additions: true) # foo
#   ruby1.class # Symbol
#
# \Time:
#   require 'json/add/time'
#   ruby0 = Time.now # 2020-05-02 11:28:26 -0500
#   json = JSON.generate(ruby0) # {"json_class":"Time","s":1588436906,"n":840560000}
#   ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 11:28:26 -0500
#   ruby1.class # Time
#
#
# === Custom \JSON Additions
#
# In addition to the \JSON additions provided,
# you can craft \JSON additions of your own,
# either for Ruby built-in classes or for user-defined classes.
#
# Here's a user-defined class +Foo+:
#   class Foo
#     attr_accessor :bar, :baz
#     def initialize(bar, baz)
#       self.bar = bar
#       self.baz = baz
#     end
#   end
#
# Here's the \JSON addition for it:
#   # Extend class Foo with JSON addition.
#   class Foo
#     # Serialize Foo object with its class name and arguments
#     def to_json(*args)
#       {
#         JSON.create_id  => self.class.name,
#         'a'             => [ bar, baz ]
#       }.to_json(*args)
#     end
#     # Deserialize JSON string by constructing new Foo object with arguments.
#     def self.json_create(object)
#       new(*object['a'])
#     end
#   end
#
# Demonstration:
#   require 'json'
#   # This Foo object has no custom addition.
#   foo0 = Foo.new(0, 1)
#   json0 = JSON.generate(foo0)
#   obj0 = JSON.parse(json0)
#   # Lood the custom addition.
#   require_relative 'foo_addition'
#   # This foo has the custom addition.
#   foo1 = Foo.new(0, 1)
#   json1 = JSON.generate(foo1)
#   obj1 = JSON.parse(json1, create_additions: true)
#   #   Make a nice display.
#   display = <<~EOT
#     Generated JSON:
#       Without custom addition:  #{json0} (#{json0.class})
#       With custom addition:     #{json1} (#{json1.class})
#     Parsed JSON:
#       Without custom addition:  #{obj0.inspect} (#{obj0.class})
#       With custom addition:     #{obj1.inspect} (#{obj1.class})
#   EOT
#   puts display
#
# Output:
#
#   Generated JSON:
#     Without custom addition:  "#<Foo:0x0000000006534e80>" (String)
#     With custom addition:     {"json_class":"Foo","a":[0,1]} (String)
#   Parsed JSON:
#     Without custom addition:  "#<Foo:0x0000000006534e80>" (String)
#     With custom addition:     #<Foo:0x0000000006473bb8 @bar=0, @baz=1> (Foo)
#
module JSON
  require 'json/version'
  require 'json/ext'
end
PK*J[�;Twwshare/ruby/tmpdir.rbnu�[���# frozen_string_literal: true
#
# tmpdir - retrieve temporary directory path
#
# $Id$
#

require 'fileutils'
begin
  require 'etc.so'
rescue LoadError # rescue LoadError for miniruby
end

class Dir

  # Class variables are inaccessible from non-main Ractor.
  # And instance variables too, in Ruby 3.0.

  ##
  # Returns the operating system's temporary file path.
  #
  #   require 'tmpdir'
  #   Dir.tmpdir # => "/tmp"

  def self.tmpdir
    Tmpname::TMPDIR_CANDIDATES.find do |name, dir|
      unless dir
        next if !(dir = ENV[name] rescue next) or dir.empty?
      end
      dir = File.expand_path(dir)
      stat = File.stat(dir) rescue next
      case
      when !stat.directory?
        warn "#{name} is not a directory: #{dir}"
      when !File.writable?(dir)
        # We call File.writable?, not stat.writable?, because you can't tell if a dir is actually
        # writable just from stat; OS mechanisms other than user/group/world bits can affect this.
        warn "#{name} is not writable: #{dir}"
      when stat.world_writable? && !stat.sticky?
        warn "#{name} is world-writable: #{dir}"
      else
        break dir
      end
    end or raise ArgumentError, "could not find a temporary directory"
  end

  # Dir.mktmpdir creates a temporary directory.
  #
  #   require 'tmpdir'
  #   Dir.mktmpdir {|dir|
  #     # use the directory
  #   }
  #
  # The directory is created with 0700 permission.
  # Application should not change the permission to make the temporary directory accessible from other users.
  #
  # The prefix and suffix of the name of the directory is specified by
  # the optional first argument, <i>prefix_suffix</i>.
  # - If it is not specified or nil, "d" is used as the prefix and no suffix is used.
  # - If it is a string, it is used as the prefix and no suffix is used.
  # - If it is an array, first element is used as the prefix and second element is used as a suffix.
  #
  #  Dir.mktmpdir {|dir| dir is ".../d..." }
  #  Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
  #  Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
  #
  # The directory is created under Dir.tmpdir or
  # the optional second argument <i>tmpdir</i> if non-nil value is given.
  #
  #  Dir.mktmpdir {|dir| dir is "#{Dir.tmpdir}/d..." }
  #  Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }
  #
  # If a block is given,
  # it is yielded with the path of the directory.
  # The directory and its contents are removed
  # using FileUtils.remove_entry before Dir.mktmpdir returns.
  # The value of the block is returned.
  #
  #  Dir.mktmpdir {|dir|
  #    # use the directory...
  #    open("#{dir}/foo", "w") { something using the file }
  #  }
  #
  # If a block is not given,
  # The path of the directory is returned.
  # In this case, Dir.mktmpdir doesn't remove the directory.
  #
  #  dir = Dir.mktmpdir
  #  begin
  #    # use the directory...
  #    open("#{dir}/foo", "w") { something using the file }
  #  ensure
  #    # remove the directory.
  #    FileUtils.remove_entry dir
  #  end
  #
  def self.mktmpdir(prefix_suffix=nil, *rest, **options, &block)
    base = nil
    path = Tmpname.create(prefix_suffix || "d", *rest, **options) {|path, _, _, d|
      base = d
      mkdir(path, 0700)
    }
    if block
      begin
        yield path.dup
      ensure
        unless base
          base = File.dirname(path)
          stat = File.stat(base)
          if stat.world_writable? and !stat.sticky?
            raise ArgumentError, "parent directory is world writable but not sticky: #{base}"
          end
        end
        FileUtils.remove_entry path
      end
    else
      path
    end
  end

  # Temporary name generator
  module Tmpname # :nodoc:
    module_function

    # System-wide temporary directory path
    systmpdir = (defined?(Etc.systmpdir) ? Etc.systmpdir.freeze : '/tmp')

    # Temporary directory candidates consisting of environment variable
    # names or description and path pairs.
    TMPDIR_CANDIDATES = [
      'TMPDIR', 'TMP', 'TEMP',
      ['system temporary path', systmpdir],
      %w[/tmp /tmp],
      %w[. .],
    ].each(&:freeze).freeze

    def tmpdir
      Dir.tmpdir
    end

    # Unusable characters as path name
    UNUSABLE_CHARS = "^,-.0-9A-Z_a-z~"

    # Dedicated random number generator
    RANDOM = Object.new
    class << RANDOM # :nodoc:
      # Maximum random number
      MAX = 36**6 # < 0x100000000

      # Returns new random string upto 6 bytes
      def next
        (::Random.urandom(4).unpack1("L")%MAX).to_s(36)
      end
    end
    RANDOM.freeze
    private_constant :RANDOM

    # Generates and yields random names to create a temporary name
    def create(basename, tmpdir=nil, max_try: nil, **opts)
      if tmpdir
        origdir = tmpdir = File.path(tmpdir)
        raise ArgumentError, "empty parent path" if tmpdir.empty?
      else
        tmpdir = tmpdir()
      end
      n = nil
      prefix, suffix = basename
      prefix = (String.try_convert(prefix) or
                raise ArgumentError, "unexpected prefix: #{prefix.inspect}")
      prefix = prefix.delete(UNUSABLE_CHARS)
      suffix &&= (String.try_convert(suffix) or
                  raise ArgumentError, "unexpected suffix: #{suffix.inspect}")
      suffix &&= suffix.delete(UNUSABLE_CHARS)
      begin
        t = Time.now.strftime("%Y%m%d")
        path = "#{prefix}#{t}-#{$$}-#{RANDOM.next}"\
               "#{n ? %[-#{n}] : ''}#{suffix||''}"
        path = File.join(tmpdir, path)
        yield(path, n, opts, origdir)
      rescue Errno::EEXIST
        n ||= 0
        n += 1
        retry if !max_try or n < max_try
        raise "cannot generate temporary name using '#{basename}' under '#{tmpdir}'"
      end
      path
    end
  end
end
PK*J[hz���Y�Yshare/ruby/logger.rbnu�[���# frozen_string_literal: true
# logger.rb - simple logging utility
# Copyright (C) 2000-2003, 2005, 2008, 2011  NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
#
# Documentation:: NAKAMURA, Hiroshi and Gavin Sinclair
# License::
#   You can redistribute it and/or modify it under the same terms of Ruby's
#   license; either the dual license version in 2003, or any later version.
# Revision:: $Id$
#
# A simple system for logging messages.  See Logger for more documentation.

require 'fiber'
require 'monitor'
require 'rbconfig'

require_relative 'logger/version'
require_relative 'logger/formatter'
require_relative 'logger/log_device'
require_relative 'logger/severity'
require_relative 'logger/errors'

# \Class \Logger provides a simple but sophisticated logging utility that
# you can use to create one or more
# {event logs}[https://en.wikipedia.org/wiki/Logging_(software)#Event_logs]
# for your program.
# Each such log contains a chronological sequence of entries
# that provides a record of the program's activities.
#
# == About the Examples
#
# All examples on this page assume that \Logger has been required:
#
#   require 'logger'
#
# == Synopsis
#
# Create a log with Logger.new:
#
#   # Single log file.
#   logger = Logger.new('t.log')
#   # Size-based rotated logging: 3 10-megabyte files.
#   logger = Logger.new('t.log', 3, 10485760)
#   # Period-based rotated logging: daily (also allowed: 'weekly', 'monthly').
#   logger = Logger.new('t.log', 'daily')
#   # Log to an IO stream.
#   logger = Logger.new($stdout)
#
# Add entries (level, message) with Logger#add:
#
#   logger.add(Logger::DEBUG, 'Maximal debugging info')
#   logger.add(Logger::INFO, 'Non-error information')
#   logger.add(Logger::WARN, 'Non-error warning')
#   logger.add(Logger::ERROR, 'Non-fatal error')
#   logger.add(Logger::FATAL, 'Fatal error')
#   logger.add(Logger::UNKNOWN, 'Most severe')
#
# Close the log with Logger#close:
#
#   logger.close
#
# == Entries
#
# You can add entries with method Logger#add:
#
#   logger.add(Logger::DEBUG, 'Maximal debugging info')
#   logger.add(Logger::INFO, 'Non-error information')
#   logger.add(Logger::WARN, 'Non-error warning')
#   logger.add(Logger::ERROR, 'Non-fatal error')
#   logger.add(Logger::FATAL, 'Fatal error')
#   logger.add(Logger::UNKNOWN, 'Most severe')
#
# These shorthand methods also add entries:
#
#   logger.debug('Maximal debugging info')
#   logger.info('Non-error information')
#   logger.warn('Non-error warning')
#   logger.error('Non-fatal error')
#   logger.fatal('Fatal error')
#   logger.unknown('Most severe')
#
# When you call any of these methods,
# the entry may or may not be written to the log,
# depending on the entry's severity and on the log level;
# see {Log Level}[rdoc-ref:Logger@Log+Level]
#
# An entry always has:
#
# - A severity (the required argument to #add).
# - An automatically created timestamp.
#
# And may also have:
#
# - A message.
# - A program name.
#
# Example:
#
#   logger = Logger.new($stdout)
#   logger.add(Logger::INFO, 'My message.', 'mung')
#   # => I, [2022-05-07T17:21:46.536234 #20536]  INFO -- mung: My message.
#
# The default format for an entry is:
#
#   "%s, [%s #%d] %5s -- %s: %s\n"
#
# where the values to be formatted are:
#
# - \Severity (one letter).
# - Timestamp.
# - Process id.
# - \Severity (word).
# - Program name.
# - Message.
#
# You can use a different entry format by:
#
# - Setting a custom format proc (affects following entries);
#   see {formatter=}[Logger.html#attribute-i-formatter].
# - Calling any of the methods above with a block
#   (affects only the one entry).
#   Doing so can have two benefits:
#
#   - Context: the block can evaluate the entire program context
#     and create a context-dependent message.
#   - Performance: the block is not evaluated unless the log level
#     permits the entry actually to be written:
#
#       logger.error { my_slow_message_generator }
#
#     Contrast this with the string form, where the string is
#     always evaluated, regardless of the log level:
#
#       logger.error("#{my_slow_message_generator}")
#
# === \Severity
#
# The severity of a log entry has two effects:
#
# - Determines whether the entry is selected for inclusion in the log;
#   see {Log Level}[rdoc-ref:Logger@Log+Level].
# - Indicates to any log reader (whether a person or a program)
#   the relative importance of the entry.
#
# === Timestamp
#
# The timestamp for a log entry is generated automatically
# when the entry is created.
#
# The logged timestamp is formatted by method
# {Time#strftime}[rdoc-ref:Time#strftime]
# using this format string:
#
#   '%Y-%m-%dT%H:%M:%S.%6N'
#
# Example:
#
#   logger = Logger.new($stdout)
#   logger.add(Logger::INFO)
#   # => I, [2022-05-07T17:04:32.318331 #20536]  INFO -- : nil
#
# You can set a different format using method #datetime_format=.
#
# === Message
#
# The message is an optional argument to an entry method:
#
#   logger = Logger.new($stdout)
#   logger.add(Logger::INFO, 'My message')
#   # => I, [2022-05-07T18:15:37.647581 #20536]  INFO -- : My message
#
# For the default entry formatter, <tt>Logger::Formatter</tt>,
# the message object may be:
#
# - A string: used as-is.
# - An Exception: <tt>message.message</tt> is used.
# - Anything else: <tt>message.inspect</tt> is used.
#
# *Note*: Logger::Formatter does not escape or sanitize
# the message passed to it.
# Developers should be aware that malicious data (user input)
# may be in the message, and should explicitly escape untrusted data.
#
# You can use a custom formatter to escape message data;
# see the example at {formatter=}[Logger.html#attribute-i-formatter].
#
# === Program Name
#
# The program name is an optional argument to an entry method:
#
#   logger = Logger.new($stdout)
#   logger.add(Logger::INFO, 'My message', 'mung')
#   # => I, [2022-05-07T18:17:38.084716 #20536]  INFO -- mung: My message
#
# The default program name for a new logger may be set in the call to
# Logger.new via optional keyword argument +progname+:
#
#   logger = Logger.new('t.log', progname: 'mung')
#
# The default program name for an existing logger may be set
# by a call to method #progname=:
#
#   logger.progname = 'mung'
#
# The current program name may be retrieved with method
# {progname}[Logger.html#attribute-i-progname]:
#
#   logger.progname # => "mung"
#
# == Log Level
#
# The log level setting determines whether an entry is actually
# written to the log, based on the entry's severity.
#
# These are the defined severities (least severe to most severe):
#
#   logger = Logger.new($stdout)
#   logger.add(Logger::DEBUG, 'Maximal debugging info')
#   # => D, [2022-05-07T17:57:41.776220 #20536] DEBUG -- : Maximal debugging info
#   logger.add(Logger::INFO, 'Non-error information')
#   # => I, [2022-05-07T17:59:14.349167 #20536]  INFO -- : Non-error information
#   logger.add(Logger::WARN, 'Non-error warning')
#   # => W, [2022-05-07T18:00:45.337538 #20536]  WARN -- : Non-error warning
#   logger.add(Logger::ERROR, 'Non-fatal error')
#   # => E, [2022-05-07T18:02:41.592912 #20536] ERROR -- : Non-fatal error
#   logger.add(Logger::FATAL, 'Fatal error')
#   # => F, [2022-05-07T18:05:24.703931 #20536] FATAL -- : Fatal error
#   logger.add(Logger::UNKNOWN, 'Most severe')
#   # => A, [2022-05-07T18:07:54.657491 #20536]   ANY -- : Most severe
#
# The default initial level setting is Logger::DEBUG, the lowest level,
# which means that all entries are to be written, regardless of severity:
#
#   logger = Logger.new($stdout)
#   logger.level # => 0
#   logger.add(0, "My message")
#   # => D, [2022-05-11T15:10:59.773668 #20536] DEBUG -- : My message
#
# You can specify a different setting in a new logger
# using keyword argument +level+ with an appropriate value:
#
#   logger = Logger.new($stdout, level: Logger::ERROR)
#   logger = Logger.new($stdout, level: 'error')
#   logger = Logger.new($stdout, level: :error)
#   logger.level # => 3
#
# With this level, entries with severity Logger::ERROR and higher
# are written, while those with lower severities are not written:
#
#   logger = Logger.new($stdout, level: Logger::ERROR)
#   logger.add(3)
#   # => E, [2022-05-11T15:17:20.933362 #20536] ERROR -- : nil
#   logger.add(2) # Silent.
#
# You can set the log level for an existing logger
# with method #level=:
#
#   logger.level = Logger::ERROR
#
# These shorthand methods also set the level:
#
#   logger.debug! # => 0
#   logger.info!  # => 1
#   logger.warn!  # => 2
#   logger.error! # => 3
#   logger.fatal! # => 4
#
# You can retrieve the log level with method #level.
#
#   logger.level = Logger::ERROR
#   logger.level # => 3
#
# These methods return whether a given
# level is to be written:
#
#   logger.level = Logger::ERROR
#   logger.debug? # => false
#   logger.info?  # => false
#   logger.warn?  # => false
#   logger.error? # => true
#   logger.fatal? # => true
#
# == Log File Rotation
#
# By default, a log file is a single file that grows indefinitely
# (until explicitly closed); there is no file rotation.
#
# To keep log files to a manageable size,
# you can use _log_ _file_ _rotation_, which uses multiple log files:
#
# - Each log file has entries for a non-overlapping
#   time interval.
# - Only the most recent log file is open and active;
#   the others are closed and inactive.
#
# === Size-Based Rotation
#
# For size-based log file rotation, call Logger.new with:
#
# - Argument +logdev+ as a file path.
# - Argument +shift_age+ with a positive integer:
#   the number of log files to be in the rotation.
# - Argument +shift_size+ as a positive integer:
#   the maximum size (in bytes) of each log file;
#   defaults to 1048576 (1 megabyte).
#
# Examples:
#
#   logger = Logger.new('t.log', 3)           # Three 1-megabyte files.
#   logger = Logger.new('t.log', 5, 10485760) # Five 10-megabyte files.
#
# For these examples, suppose:
#
#   logger = Logger.new('t.log', 3)
#
# Logging begins in the new log file, +t.log+;
# the log file is "full" and ready for rotation
# when a new entry would cause its size to exceed +shift_size+.
#
# The first time +t.log+ is full:
#
# - +t.log+ is closed and renamed to +t.log.0+.
# - A new file +t.log+ is opened.
#
# The second time +t.log+ is full:
#
# - +t.log.0 is renamed as +t.log.1+.
# - +t.log+ is closed and renamed to +t.log.0+.
# - A new file +t.log+ is opened.
#
# Each subsequent time that +t.log+ is full,
# the log files are rotated:
#
# - +t.log.1+ is removed.
# - +t.log.0 is renamed as +t.log.1+.
# - +t.log+ is closed and renamed to +t.log.0+.
# - A new file +t.log+ is opened.
#
# === Periodic Rotation
#
# For periodic rotation, call Logger.new with:
#
# - Argument +logdev+ as a file path.
# - Argument +shift_age+ as a string period indicator.
#
# Examples:
#
#   logger = Logger.new('t.log', 'daily')   # Rotate log files daily.
#   logger = Logger.new('t.log', 'weekly')  # Rotate log files weekly.
#   logger = Logger.new('t.log', 'monthly') # Rotate log files monthly.
#
# Example:
#
#   logger = Logger.new('t.log', 'daily')
#
# When the given period expires:
#
# - The base log file, +t.log+ is closed and renamed
#   with a date-based suffix such as +t.log.20220509+.
# - A new log file +t.log+ is opened.
# - Nothing is removed.
#
# The default format for the suffix is <tt>'%Y%m%d'</tt>,
# which produces a suffix similar to the one above.
# You can set a different format using create-time option
# +shift_period_suffix+;
# see details and suggestions at
# {Time#strftime}[rdoc-ref:Time#strftime].
#
class Logger
  _, name, rev = %w$Id$
  if name
    name = name.chomp(",v")
  else
    name = File.basename(__FILE__)
  end
  rev ||= "v#{VERSION}"
  ProgName = "#{name}/#{rev}"

  include Severity

  # Logging severity threshold (e.g. <tt>Logger::INFO</tt>).
  def level
    level_override[level_key] || @level
  end

  # Sets the log level; returns +severity+.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  # Argument +severity+ may be an integer, a string, or a symbol:
  #
  #   logger.level = Logger::ERROR # => 3
  #   logger.level = 3             # => 3
  #   logger.level = 'error'       # => "error"
  #   logger.level = :error        # => :error
  #
  # Logger#sev_threshold= is an alias for Logger#level=.
  #
  def level=(severity)
    @level = Severity.coerce(severity)
  end

  # Adjust the log level during the block execution for the current Fiber only
  #
  #   logger.with_level(:debug) do
  #     logger.debug { "Hello" }
  #   end
  def with_level(severity)
    prev, level_override[level_key] = level, Severity.coerce(severity)
    begin
      yield
    ensure
      if prev
        level_override[level_key] = prev
      else
        level_override.delete(level_key)
      end
    end
  end

  # Program name to include in log messages.
  attr_accessor :progname

  # Sets the date-time format.
  #
  # Argument +datetime_format+ should be either of these:
  #
  # - A string suitable for use as a format for method
  #   {Time#strftime}[rdoc-ref:Time#strftime].
  # - +nil+: the logger uses <tt>'%Y-%m-%dT%H:%M:%S.%6N'</tt>.
  #
  def datetime_format=(datetime_format)
    @default_formatter.datetime_format = datetime_format
  end

  # Returns the date-time format; see #datetime_format=.
  #
  def datetime_format
    @default_formatter.datetime_format
  end

  # Sets or retrieves the logger entry formatter proc.
  #
  # When +formatter+ is +nil+, the logger uses Logger::Formatter.
  #
  # When +formatter+ is a proc, a new entry is formatted by the proc,
  # which is called with four arguments:
  #
  # - +severity+: The severity of the entry.
  # - +time+: A Time object representing the entry's timestamp.
  # - +progname+: The program name for the entry.
  # - +msg+: The message for the entry (string or string-convertible object).
  #
  # The proc should return a string containing the formatted entry.
  #
  # This custom formatter uses
  # {String#dump}[rdoc-ref:String#dump]
  # to escape the message string:
  #
  #   logger = Logger.new($stdout, progname: 'mung')
  #   original_formatter = logger.formatter || Logger::Formatter.new
  #   logger.formatter = proc { |severity, time, progname, msg|
  #     original_formatter.call(severity, time, progname, msg.dump)
  #   }
  #   logger.add(Logger::INFO, "hello \n ''")
  #   logger.add(Logger::INFO, "\f\x00\xff\\\"")
  #
  # Output:
  #
  #   I, [2022-05-13T13:16:29.637488 #8492]  INFO -- mung: "hello \n ''"
  #   I, [2022-05-13T13:16:29.637610 #8492]  INFO -- mung: "\f\x00\xFF\\\""
  #
  attr_accessor :formatter

  alias sev_threshold level
  alias sev_threshold= level=

  # Returns +true+ if the log level allows entries with severity
  # Logger::DEBUG to be written, +false+ otherwise.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def debug?; level <= DEBUG; end

  # Sets the log level to Logger::DEBUG.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def debug!; self.level = DEBUG; end

  # Returns +true+ if the log level allows entries with severity
  # Logger::INFO to be written, +false+ otherwise.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def info?; level <= INFO; end

  # Sets the log level to Logger::INFO.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def info!; self.level = INFO; end

  # Returns +true+ if the log level allows entries with severity
  # Logger::WARN to be written, +false+ otherwise.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def warn?; level <= WARN; end

  # Sets the log level to Logger::WARN.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def warn!; self.level = WARN; end

  # Returns +true+ if the log level allows entries with severity
  # Logger::ERROR to be written, +false+ otherwise.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def error?; level <= ERROR; end

  # Sets the log level to Logger::ERROR.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def error!; self.level = ERROR; end

  # Returns +true+ if the log level allows entries with severity
  # Logger::FATAL to be written, +false+ otherwise.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def fatal?; level <= FATAL; end

  # Sets the log level to Logger::FATAL.
  # See {Log Level}[rdoc-ref:Logger@Log+Level].
  #
  def fatal!; self.level = FATAL; end

  # :call-seq:
  #    Logger.new(logdev, shift_age = 0, shift_size = 1048576, **options)
  #
  # With the single argument +logdev+,
  # returns a new logger with all default options:
  #
  #   Logger.new('t.log') # => #<Logger:0x000001e685dc6ac8>
  #
  # Argument +logdev+ must be one of:
  #
  # - A string filepath: entries are to be written
  #   to the file at that path; if the file at that path exists,
  #   new entries are appended.
  # - An IO stream (typically +$stdout+, +$stderr+. or an open file):
  #   entries are to be written to the given stream.
  # - +nil+ or +File::NULL+: no entries are to be written.
  #
  # Examples:
  #
  #   Logger.new('t.log')
  #   Logger.new($stdout)
  #
  # The keyword options are:
  #
  # - +level+: sets the log level; default value is Logger::DEBUG.
  #   See {Log Level}[rdoc-ref:Logger@Log+Level]:
  #
  #     Logger.new('t.log', level: Logger::ERROR)
  #
  # - +progname+: sets the default program name; default is +nil+.
  #   See {Program Name}[rdoc-ref:Logger@Program+Name]:
  #
  #     Logger.new('t.log', progname: 'mung')
  #
  # - +formatter+: sets the entry formatter; default is +nil+.
  #   See {formatter=}[Logger.html#attribute-i-formatter].
  # - +datetime_format+: sets the format for entry timestamp;
  #   default is +nil+.
  #   See #datetime_format=.
  # - +binmode+: sets whether the logger writes in binary mode;
  #   default is +false+.
  # - +shift_period_suffix+: sets the format for the filename suffix
  #   for periodic log file rotation; default is <tt>'%Y%m%d'</tt>.
  #   See {Periodic Rotation}[rdoc-ref:Logger@Periodic+Rotation].
  # - +reraise_write_errors+: An array of exception classes, which will
  #   be reraised if there is an error when writing to the log device.
  #   The default is to swallow all exceptions raised.
  #
  def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
                 progname: nil, formatter: nil, datetime_format: nil,
                 binmode: false, shift_period_suffix: '%Y%m%d',
                 reraise_write_errors: [])
    self.level = level
    self.progname = progname
    @default_formatter = Formatter.new
    self.datetime_format = datetime_format
    self.formatter = formatter
    @logdev = nil
    @level_override = {}
    if logdev && logdev != File::NULL
      @logdev = LogDevice.new(logdev, shift_age: shift_age,
        shift_size: shift_size,
        shift_period_suffix: shift_period_suffix,
        binmode: binmode,
        reraise_write_errors: reraise_write_errors)
    end
  end

  # Sets the logger's output stream:
  #
  # - If +logdev+ is +nil+, reopens the current output stream.
  # - If +logdev+ is a filepath, opens the indicated file for append.
  # - If +logdev+ is an IO stream
  #   (usually <tt>$stdout</tt>, <tt>$stderr</tt>, or an open File object),
  #   opens the stream for append.
  #
  # Example:
  #
  #   logger = Logger.new('t.log')
  #   logger.add(Logger::ERROR, 'one')
  #   logger.close
  #   logger.add(Logger::ERROR, 'two') # Prints 'log writing failed. closed stream'
  #   logger.reopen
  #   logger.add(Logger::ERROR, 'three')
  #   logger.close
  #   File.readlines('t.log')
  #   # =>
  #   # ["# Logfile created on 2022-05-12 14:21:19 -0500 by logger.rb/v1.5.0\n",
  #   #  "E, [2022-05-12T14:21:27.596726 #22428] ERROR -- : one\n",
  #   #  "E, [2022-05-12T14:23:05.847241 #22428] ERROR -- : three\n"]
  #
  def reopen(logdev = nil)
    @logdev&.reopen(logdev)
    self
  end

  # Creates a log entry, which may or may not be written to the log,
  # depending on the entry's severity and on the log level.
  # See {Log Level}[rdoc-ref:Logger@Log+Level]
  # and {Entries}[rdoc-ref:Logger@Entries] for details.
  #
  # Examples:
  #
  #   logger = Logger.new($stdout, progname: 'mung')
  #   logger.add(Logger::INFO)
  #   logger.add(Logger::ERROR, 'No good')
  #   logger.add(Logger::ERROR, 'No good', 'gnum')
  #
  # Output:
  #
  #   I, [2022-05-12T16:25:31.469726 #36328]  INFO -- mung: mung
  #   E, [2022-05-12T16:25:55.349414 #36328] ERROR -- mung: No good
  #   E, [2022-05-12T16:26:35.841134 #36328] ERROR -- gnum: No good
  #
  # These convenience methods have implicit severity:
  #
  # - #debug.
  # - #info.
  # - #warn.
  # - #error.
  # - #fatal.
  # - #unknown.
  #
  def add(severity, message = nil, progname = nil)
    severity ||= UNKNOWN
    if @logdev.nil? or severity < level
      return true
    end
    if progname.nil?
      progname = @progname
    end
    if message.nil?
      if block_given?
        message = yield
      else
        message = progname
        progname = @progname
      end
    end
    @logdev.write(
      format_message(format_severity(severity), Time.now, progname, message))
    true
  end
  alias log add

  # Writes the given +msg+ to the log with no formatting;
  # returns the number of characters written,
  # or +nil+ if no log device exists:
  #
  #   logger = Logger.new($stdout)
  #   logger << 'My message.' # => 10
  #
  # Output:
  #
  #   My message.
  #
  def <<(msg)
    @logdev&.write(msg)
  end

  # Equivalent to calling #add with severity <tt>Logger::DEBUG</tt>.
  #
  def debug(progname = nil, &block)
    add(DEBUG, nil, progname, &block)
  end

  # Equivalent to calling #add with severity <tt>Logger::INFO</tt>.
  #
  def info(progname = nil, &block)
    add(INFO, nil, progname, &block)
  end

  # Equivalent to calling #add with severity <tt>Logger::WARN</tt>.
  #
  def warn(progname = nil, &block)
    add(WARN, nil, progname, &block)
  end

  # Equivalent to calling #add with severity <tt>Logger::ERROR</tt>.
  #
  def error(progname = nil, &block)
    add(ERROR, nil, progname, &block)
  end

  # Equivalent to calling #add with severity <tt>Logger::FATAL</tt>.
  #
  def fatal(progname = nil, &block)
    add(FATAL, nil, progname, &block)
  end

  # Equivalent to calling #add with severity <tt>Logger::UNKNOWN</tt>.
  #
  def unknown(progname = nil, &block)
    add(UNKNOWN, nil, progname, &block)
  end

  # Closes the logger; returns +nil+:
  #
  #   logger = Logger.new('t.log')
  #   logger.close       # => nil
  #   logger.info('foo') # Prints "log writing failed. closed stream"
  #
  # Related: Logger#reopen.
  def close
    @logdev&.close
  end

private

  # \Severity label for logging (max 5 chars).
  SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY).freeze

  def format_severity(severity)
    SEV_LABEL[severity] || 'ANY'
  end

  # Guarantee the existence of this ivar even when subclasses don't call the superclass constructor.
  def level_override
    @level_override ||= {}
  end

  def level_key
    Fiber.current
  end

  def format_message(severity, datetime, progname, msg)
    (@formatter || @default_formatter).call(severity, datetime, progname, msg)
  end
end
PK*J[g�V���>share/ruby/syntax_suggest/capture/before_after_keyword_ends.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  module Capture
    # Shows surrounding kw/end pairs
    #
    # The purpose of showing these extra pairs is due to cases
    # of ambiguity when only one visible line is matched.
    #
    # For example:
    #
    #     1  class Dog
    #     2    def bark
    #     4    def eat
    #     5    end
    #     6  end
    #
    # In this case either line 2 could be missing an `end` or
    # line 4 was an extra line added by mistake (it happens).
    #
    # When we detect the above problem it shows the issue
    # as only being on line 2
    #
    #     2    def bark
    #
    # Showing "neighbor" keyword pairs gives extra context:
    #
    #     2    def bark
    #     4    def eat
    #     5    end
    #
    #
    # Example:
    #
    #   lines = BeforeAfterKeywordEnds.new(
    #     block: block,
    #     code_lines: code_lines
    #   ).call()
    #
    class BeforeAfterKeywordEnds
      def initialize(code_lines:, block:)
        @scanner = ScanHistory.new(code_lines: code_lines, block: block)
        @original_indent = block.current_indent
      end

      def call
        lines = []

        @scanner.scan(
          up: ->(line, kw_count, end_count) {
            next true if line.empty?
            break if line.indent < @original_indent
            next true if line.indent != @original_indent

            # If we're going up and have one complete kw/end pair, stop
            if kw_count != 0 && kw_count == end_count
              lines << line
              break
            end

            lines << line if line.is_kw? || line.is_end?
            true
          },
          down: ->(line, kw_count, end_count) {
            next true if line.empty?
            break if line.indent < @original_indent
            next true if line.indent != @original_indent

            # if we're going down and have one complete kw/end pair,stop
            if kw_count != 0 && kw_count == end_count
              lines << line
              break
            end

            lines << line if line.is_kw? || line.is_end?
            true
          }
        )
        @scanner.stash_changes

        lines
      end
    end
  end
end
PK*J[�<�WW9share/ruby/syntax_suggest/capture/falling_indent_lines.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  module Capture
    # Shows the context around code provided by "falling" indentation
    #
    # If this is the original code lines:
    #
    #   class OH
    #     def hello
    #       it "foo" do
    #     end
    #   end
    #
    # And this is the line that is captured
    #
    #       it "foo" do
    #
    # It will yield its surrounding context:
    #
    #   class OH
    #     def hello
    #     end
    #   end
    #
    # Example:
    #
    #   FallingIndentLines.new(
    #       block: block,
    #       code_lines: @code_lines
    #   ).call do |line|
    #     @lines_to_output << line
    #   end
    #
    class FallingIndentLines
      def initialize(code_lines:, block:)
        @lines = nil
        @scanner = ScanHistory.new(code_lines: code_lines, block: block)
        @original_indent = block.current_indent
      end

      def call(&yieldable)
        last_indent_up = @original_indent
        last_indent_down = @original_indent

        @scanner.commit_if_changed
        @scanner.scan(
          up: ->(line, _, _) {
            next true if line.empty?

            if line.indent < last_indent_up
              yieldable.call(line)
              last_indent_up = line.indent
            end
            true
          },
          down: ->(line, _, _) {
            next true if line.empty?

            if line.indent < last_indent_down
              yieldable.call(line)
              last_indent_down = line.indent
            end
            true
          }
        )
        @scanner.stash_changes
      end
    end
  end
end
PK*J[�$.l3share/ruby/syntax_suggest/display_invalid_blocks.rbnu�[���# frozen_string_literal: true

require_relative "capture_code_context"
require_relative "display_code_with_line_numbers"

module SyntaxSuggest
  # Used for formatting invalid blocks
  class DisplayInvalidBlocks
    attr_reader :filename

    def initialize(code_lines:, blocks:, io: $stderr, filename: nil, terminal: DEFAULT_VALUE)
      @io = io
      @blocks = Array(blocks)
      @filename = filename
      @code_lines = code_lines

      @terminal = (terminal == DEFAULT_VALUE) ? io.isatty : terminal
    end

    def document_ok?
      @blocks.none? { |b| !b.hidden? }
    end

    def call
      if document_ok?
        return self
      end

      if filename
        @io.puts("--> #{filename}")
        @io.puts
      end
      @blocks.each do |block|
        display_block(block)
      end

      self
    end

    private def display_block(block)
      # Build explanation
      explain = ExplainSyntax.new(
        code_lines: block.lines
      ).call

      # Enhance code output
      # Also handles several ambiguious cases
      lines = CaptureCodeContext.new(
        blocks: block,
        code_lines: @code_lines
      ).call

      # Build code output
      document = DisplayCodeWithLineNumbers.new(
        lines: lines,
        terminal: @terminal,
        highlight_lines: block.lines
      ).call

      # Output syntax error explanation
      explain.errors.each do |e|
        @io.puts e
      end
      @io.puts

      # Output code
      @io.puts(document)
    end

    private def code_with_context
      lines = CaptureCodeContext.new(
        blocks: @blocks,
        code_lines: @code_lines
      ).call

      DisplayCodeWithLineNumbers.new(
        lines: lines,
        terminal: @terminal,
        highlight_lines: @invalid_lines
      ).call
    end
  end
end
PK*J[��� <<1share/ruby/syntax_suggest/left_right_lex_count.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Find mis-matched syntax based on lexical count
  #
  # Used for detecting missing pairs of elements
  # each keyword needs an end, each '{' needs a '}'
  # etc.
  #
  # Example:
  #
  #   left_right = LeftRightLexCount.new
  #   left_right.count_kw
  #   left_right.missing.first
  #   # => "end"
  #
  #   left_right = LeftRightLexCount.new
  #   source = "{ a: b, c: d" # Note missing '}'
  #   LexAll.new(source: source).each do |lex|
  #     left_right.count_lex(lex)
  #   end
  #   left_right.missing.first
  #   # => "}"
  class LeftRightLexCount
    def initialize
      @kw_count = 0
      @end_count = 0

      @count_for_char = {
        "{" => 0,
        "}" => 0,
        "[" => 0,
        "]" => 0,
        "(" => 0,
        ")" => 0,
        "|" => 0
      }
    end

    def count_kw
      @kw_count += 1
    end

    def count_end
      @end_count += 1
    end

    # Count source code characters
    #
    # Example:
    #
    #   left_right = LeftRightLexCount.new
    #   left_right.count_lex(LexValue.new(1, :on_lbrace, "{", Ripper::EXPR_BEG))
    #   left_right.count_for_char("{")
    #   # => 1
    #   left_right.count_for_char("}")
    #   # => 0
    def count_lex(lex)
      case lex.type
      when :on_tstring_content
        # ^^^
        # Means it's a string or a symbol `"{"` rather than being
        # part of a data structure (like a hash) `{ a: b }`
        # ignore it.
      when :on_words_beg, :on_symbos_beg, :on_qwords_beg,
           :on_qsymbols_beg, :on_regexp_beg, :on_tstring_beg
        # ^^^
        # Handle shorthand syntaxes like `%Q{ i am a string }`
        #
        # The start token will be the full thing `%Q{` but we
        # need to count it as if it's a `{`. Any token
        # can be used
        char = lex.token[-1]
        @count_for_char[char] += 1 if @count_for_char.key?(char)
      when :on_embexpr_beg
        # ^^^
        # Embedded string expressions like `"#{foo} <-embed"`
        # are parsed with chars:
        #
        # `#{` as :on_embexpr_beg
        #  `}` as :on_embexpr_end
        #
        # We cannot ignore both :on_emb_expr_beg and :on_embexpr_end
        # because sometimes the lexer thinks something is an embed
        # string end, when it is not like `lol = }` (no clue why).
        #
        # When we see `#{` count it as a `{` or we will
        # have a mis-match count.
        #
        case lex.token
        when "\#{"
          @count_for_char["{"] += 1
        end
      else
        @end_count += 1 if lex.is_end?
        @kw_count += 1 if lex.is_kw?
        @count_for_char[lex.token] += 1 if @count_for_char.key?(lex.token)
      end
    end

    def count_for_char(char)
      @count_for_char[char]
    end

    # Returns an array of missing syntax characters
    # or `"end"` or `"keyword"`
    #
    #   left_right.missing
    #   # => ["}"]
    def missing
      out = missing_pairs
      out << missing_pipe
      out << missing_keyword_end
      out.compact!
      out
    end

    PAIRS = {
      "{" => "}",
      "[" => "]",
      "(" => ")"
    }.freeze

    # Opening characters like `{` need closing characters # like `}`.
    #
    # When a mis-match count is detected, suggest the
    # missing member.
    #
    # For example if there are 3 `}` and only two `{`
    # return `"{"`
    private def missing_pairs
      PAIRS.map do |(left, right)|
        case @count_for_char[left] <=> @count_for_char[right]
        when 1
          right
        when 0
          nil
        when -1
          left
        end
      end
    end

    # Keywords need ends and ends need keywords
    #
    # If we have more keywords, there's a missing `end`
    # if we have more `end`-s, there's a missing keyword
    private def missing_keyword_end
      case @kw_count <=> @end_count
      when 1
        "end"
      when 0
        nil
      when -1
        "keyword"
      end
    end

    # Pipes come in pairs.
    # If there's an odd number of pipes then we
    # are missing one
    private def missing_pipe
      if @count_for_char["|"].odd?
        "|"
      end
    end
  end
end
PK*J[�4��'share/ruby/syntax_suggest/code_block.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Multiple lines form a singular CodeBlock
  #
  # Source code is made of multiple CodeBlocks.
  #
  # Example:
  #
  #   code_block.to_s # =>
  #     #   def foo
  #     #     puts "foo"
  #     #   end
  #
  #   code_block.valid? # => true
  #   code_block.in_valid? # => false
  #
  #
  class CodeBlock
    UNSET = Object.new.freeze
    attr_reader :lines, :starts_at, :ends_at

    def initialize(lines: [])
      @lines = Array(lines)
      @valid = UNSET
      @deleted = false
      @starts_at = @lines.first.number
      @ends_at = @lines.last.number
    end

    def delete
      @deleted = true
    end

    def deleted?
      @deleted
    end

    def visible_lines
      @lines.select(&:visible?).select(&:not_empty?)
    end

    def mark_invisible
      @lines.map(&:mark_invisible)
    end

    def is_end?
      to_s.strip == "end"
    end

    def hidden?
      @lines.all?(&:hidden?)
    end

    # This is used for frontier ordering, we are searching from
    # the largest indentation to the smallest. This allows us to
    # populate an array with multiple code blocks then call `sort!`
    # on it without having to specify the sorting criteria
    def <=>(other)
      out = current_indent <=> other.current_indent
      return out if out != 0

      # Stable sort
      starts_at <=> other.starts_at
    end

    def current_indent
      @current_indent ||= lines.select(&:not_empty?).map(&:indent).min || 0
    end

    def invalid?
      !valid?
    end

    def valid?
      if @valid == UNSET
        # Performance optimization
        #
        # If all the lines were previously hidden
        # and we expand to capture additional empty
        # lines then the result cannot be invalid
        #
        # That means there's no reason to re-check all
        # lines with the parser (which is expensive).
        # Benchmark in commit message
        @valid = if lines.all? { |l| l.hidden? || l.empty? }
          true
        else
          SyntaxSuggest.valid?(lines.map(&:original).join)
        end
      else
        @valid
      end
    end

    def to_s
      @lines.join
    end
  end
end
PK*J[��:���&share/ruby/syntax_suggest/lex_value.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Value object for accessing lex values
  #
  # This lex:
  #
  #   [1, 0], :on_ident, "describe", CMDARG
  #
  # Would translate into:
  #
  #  lex.line # => 1
  #  lex.type # => :on_indent
  #  lex.token # => "describe"
  class LexValue
    attr_reader :line, :type, :token, :state

    def initialize(line, type, token, state, last_lex = nil)
      @line = line
      @type = type
      @token = token
      @state = state

      set_kw_end(last_lex)
    end

    private def set_kw_end(last_lex)
      @is_end = false
      @is_kw = false
      return if type != :on_kw

      return if last_lex && last_lex.fname? # https://github.com/ruby/ruby/commit/776759e300e4659bb7468e2b97c8c2d4359a2953

      case token
      when "if", "unless", "while", "until"
        # Only count if/unless when it's not a "trailing" if/unless
        # https://github.com/ruby/ruby/blob/06b44f819eb7b5ede1ff69cecb25682b56a1d60c/lib/irb/ruby-lex.rb#L374-L375
        @is_kw = true unless expr_label?
      when "def", "case", "for", "begin", "class", "module", "do"
        @is_kw = true
      when "end"
        @is_end = true
      end
    end

    def fname?
      state.allbits?(Ripper::EXPR_FNAME)
    end

    def ignore_newline?
      type == :on_ignored_nl
    end

    def is_end?
      @is_end
    end

    def is_kw?
      @is_kw
    end

    def expr_beg?
      state.anybits?(Ripper::EXPR_BEG)
    end

    def expr_label?
      state.allbits?(Ripper::EXPR_LABEL)
    end
  end
end
PK*J[��{��"�"+share/ruby/syntax_suggest/clean_document.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Parses and sanitizes source into a lexically aware document
  #
  # Internally the document is represented by an array with each
  # index containing a CodeLine correlating to a line from the source code.
  #
  # There are three main phases in the algorithm:
  #
  # 1. Sanitize/format input source
  # 2. Search for invalid blocks
  # 3. Format invalid blocks into something meaningful
  #
  # This class handles the first part.
  #
  # The reason this class exists is to format input source
  # for better/easier/cleaner exploration.
  #
  # The CodeSearch class operates at the line level so
  # we must be careful to not introduce lines that look
  # valid by themselves, but when removed will trigger syntax errors
  # or strange behavior.
  #
  # ## Join Trailing slashes
  #
  # Code with a trailing slash is logically treated as a single line:
  #
  #     1 it "code can be split" \
  #     2    "across multiple lines" do
  #
  # In this case removing line 2 would add a syntax error. We get around
  # this by internally joining the two lines into a single "line" object
  #
  # ## Logically Consecutive lines
  #
  # Code that can be broken over multiple
  # lines such as method calls are on different lines:
  #
  #     1 User.
  #     2   where(name: "schneems").
  #     3   first
  #
  # Removing line 2 can introduce a syntax error. To fix this, all lines
  # are joined into one.
  #
  # ## Heredocs
  #
  # A heredoc is an way of defining a multi-line string. They can cause many
  # problems. If left as a single line, the parser would try to parse the contents
  # as ruby code rather than as a string. Even without this problem, we still
  # hit an issue with indentation:
  #
  #    1 foo = <<~HEREDOC
  #    2  "Be yourself; everyone else is already taken.""
  #    3    ― Oscar Wilde
  #    4      puts "I look like ruby code" # but i'm still a heredoc
  #    5 HEREDOC
  #
  # If we didn't join these lines then our algorithm would think that line 4
  # is separate from the rest, has a higher indentation, then look at it first
  # and remove it.
  #
  # If the code evaluates line 5 by itself it will think line 5 is a constant,
  # remove it, and introduce a syntax errror.
  #
  # All of these problems are fixed by joining the whole heredoc into a single
  # line.
  #
  # ## Comments and whitespace
  #
  # Comments can throw off the way the lexer tells us that the line
  # logically belongs with the next line. This is valid ruby but
  # results in a different lex output than before:
  #
  #     1 User.
  #     2   where(name: "schneems").
  #     3   # Comment here
  #     4   first
  #
  # To handle this we can replace comment lines with empty lines
  # and then re-lex the source. This removal and re-lexing preserves
  # line index and document size, but generates an easier to work with
  # document.
  #
  class CleanDocument
    def initialize(source:)
      lines = clean_sweep(source: source)
      @document = CodeLine.from_source(lines.join, lines: lines)
    end

    # Call all of the document "cleaners"
    # and return self
    def call
      join_trailing_slash!
      join_consecutive!
      join_heredoc!

      self
    end

    # Return an array of CodeLines in the
    # document
    def lines
      @document
    end

    # Renders the document back to a string
    def to_s
      @document.join
    end

    # Remove comments
    #
    # replace with empty newlines
    #
    #     source = <<~'EOM'
    #       # Comment 1
    #       puts "hello"
    #       # Comment 2
    #       puts "world"
    #     EOM
    #
    #     lines = CleanDocument.new(source: source).lines
    #     expect(lines[0].to_s).to eq("\n")
    #     expect(lines[1].to_s).to eq("puts "hello")
    #     expect(lines[2].to_s).to eq("\n")
    #     expect(lines[3].to_s).to eq("puts "world")
    #
    # Important: This must be done before lexing.
    #
    # After this change is made, we lex the document because
    # removing comments can change how the doc is parsed.
    #
    # For example:
    #
    #     values = LexAll.new(source: <<~EOM))
    #       User.
    #         # comment
    #         where(name: 'schneems')
    #     EOM
    #     expect(
    #       values.count {|v| v.type == :on_ignored_nl}
    #     ).to eq(1)
    #
    # After the comment is removed:
    #
    #     values = LexAll.new(source: <<~EOM))
    #       User.
    #
    #         where(name: 'schneems')
    #     EOM
    #     expect(
    #      values.count {|v| v.type == :on_ignored_nl}
    #    ).to eq(2)
    #
    def clean_sweep(source:)
      # Match comments, but not HEREDOC strings with #{variable} interpolation
      # https://rubular.com/r/HPwtW9OYxKUHXQ
      source.lines.map do |line|
        if line.match?(/^\s*#([^{].*|)$/)
          $/
        else
          line
        end
      end
    end

    # Smushes all heredoc lines into one line
    #
    #     source = <<~'EOM'
    #       foo = <<~HEREDOC
    #          lol
    #          hehehe
    #       HEREDOC
    #     EOM
    #
    #     lines = CleanDocument.new(source: source).join_heredoc!.lines
    #     expect(lines[0].to_s).to eq(source)
    #     expect(lines[1].to_s).to eq("")
    def join_heredoc!
      start_index_stack = []
      heredoc_beg_end_index = []
      lines.each do |line|
        line.lex.each do |lex_value|
          case lex_value.type
          when :on_heredoc_beg
            start_index_stack << line.index
          when :on_heredoc_end
            start_index = start_index_stack.pop
            end_index = line.index
            heredoc_beg_end_index << [start_index, end_index]
          end
        end
      end

      heredoc_groups = heredoc_beg_end_index.map { |start_index, end_index| @document[start_index..end_index] }

      join_groups(heredoc_groups)
      self
    end

    # Smushes logically "consecutive" lines
    #
    #     source = <<~'EOM'
    #       User.
    #         where(name: 'schneems').
    #         first
    #     EOM
    #
    #     lines = CleanDocument.new(source: source).join_consecutive!.lines
    #     expect(lines[0].to_s).to eq(source)
    #     expect(lines[1].to_s).to eq("")
    #
    # The one known case this doesn't handle is:
    #
    #     Ripper.lex <<~EOM
    #       a &&
    #        b ||
    #        c
    #     EOM
    #
    # For some reason this introduces `on_ignore_newline` but with BEG type
    #
    def join_consecutive!
      consecutive_groups = @document.select(&:ignore_newline_not_beg?).map do |code_line|
        take_while_including(code_line.index..) do |line|
          line.ignore_newline_not_beg?
        end
      end

      join_groups(consecutive_groups)
      self
    end

    # Join lines with a trailing slash
    #
    #     source = <<~'EOM'
    #       it "code can be split" \
    #          "across multiple lines" do
    #     EOM
    #
    #     lines = CleanDocument.new(source: source).join_consecutive!.lines
    #     expect(lines[0].to_s).to eq(source)
    #     expect(lines[1].to_s).to eq("")
    def join_trailing_slash!
      trailing_groups = @document.select(&:trailing_slash?).map do |code_line|
        take_while_including(code_line.index..) { |x| x.trailing_slash? }
      end
      join_groups(trailing_groups)
      self
    end

    # Helper method for joining "groups" of lines
    #
    # Input is expected to be type Array<Array<CodeLine>>
    #
    # The outer array holds the various "groups" while the
    # inner array holds code lines.
    #
    # All code lines are "joined" into the first line in
    # their group.
    #
    # To preserve document size, empty lines are placed
    # in the place of the lines that were "joined"
    def join_groups(groups)
      groups.each do |lines|
        line = lines.first

        # Handle the case of multiple groups in a row
        # if one is already replaced, move on
        next if @document[line.index].empty?

        # Join group into the first line
        @document[line.index] = CodeLine.new(
          lex: lines.map(&:lex).flatten,
          line: lines.join,
          index: line.index
        )

        # Hide the rest of the lines
        lines[1..].each do |line|
          # The above lines already have newlines in them, if add more
          # then there will be double newline, use an empty line instead
          @document[line.index] = CodeLine.new(line: "", index: line.index, lex: [])
        end
      end
      self
    end

    # Helper method for grabbing elements from document
    #
    # Like `take_while` except when it stops
    # iterating, it also returns the line
    # that caused it to stop
    def take_while_including(range = 0..)
      take_next_and_stop = false
      @document[range].take_while do |line|
        next if take_next_and_stop

        take_next_and_stop = !(yield line)
        true
      end
    end
  end
end
PK*J[$0��)share/ruby/syntax_suggest/block_expand.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # This class is responsible for taking a code block that exists
  # at a far indentaion and then iteratively increasing the block
  # so that it captures everything within the same indentation block.
  #
  #   def dog
  #     puts "bow"
  #     puts "wow"
  #   end
  #
  # block = BlockExpand.new(code_lines: code_lines)
  #   .call(CodeBlock.new(lines: code_lines[1]))
  #
  # puts block.to_s
  # # => puts "bow"
  #      puts "wow"
  #
  #
  # Once a code block has captured everything at a given indentation level
  # then it will expand to capture surrounding indentation.
  #
  # block = BlockExpand.new(code_lines: code_lines)
  #   .call(block)
  #
  # block.to_s
  # # => def dog
  #        puts "bow"
  #        puts "wow"
  #      end
  #
  class BlockExpand
    def initialize(code_lines:)
      @code_lines = code_lines
    end

    # Main interface. Expand current indentation, before
    # expanding to a lower indentation
    def call(block)
      if (next_block = expand_neighbors(block))
        next_block
      else
        expand_indent(block)
      end
    end

    # Expands code to the next lowest indentation
    #
    # For example:
    #
    #   1 def dog
    #   2   print "dog"
    #   3 end
    #
    # If a block starts on line 2 then it has captured all it's "neighbors" (code at
    # the same indentation or higher). To continue expanding, this block must capture
    # lines one and three which are at a different indentation level.
    #
    # This method allows fully expanded blocks to decrease their indentation level (so
    # they can expand to capture more code up and down). It does this conservatively
    # as there's no undo (currently).
    def expand_indent(block)
      now = AroundBlockScan.new(code_lines: @code_lines, block: block)
        .force_add_hidden
        .stop_after_kw
        .scan_adjacent_indent

      now.lookahead_balance_one_line

      now.code_block
    end

    # A neighbor is code that is at or above the current indent line.
    #
    # First we build a block with all neighbors. If we can't go further
    # then we decrease the indentation threshold and expand via indentation
    # i.e. `expand_indent`
    #
    # Handles two general cases.
    #
    # ## Case #1: Check code inside of methods/classes/etc.
    #
    # It's important to note, that not everything in a given indentation level can be parsed
    # as valid code even if it's part of valid code. For example:
    #
    #   1 hash = {
    #   2   name: "richard",
    #   3   dog: "cinco",
    #   4 }
    #
    # In this case lines 2 and 3 will be neighbors, but they're invalid until `expand_indent`
    # is called on them.
    #
    # When we are adding code within a method or class (at the same indentation level),
    # use the empty lines to denote the programmer intended logical chunks.
    # Stop and check each one. For example:
    #
    #   1 def dog
    #   2   print "dog"
    #   3
    #   4   hash = {
    #   5 end
    #
    # If we did not stop parsing at empty newlines then the block might mistakenly grab all
    # the contents (lines 2, 3, and 4) and report them as being problems, instead of only
    # line 4.
    #
    # ## Case #2: Expand/grab other logical blocks
    #
    # Once the search algorithm has converted all lines into blocks at a given indentation
    # it will then `expand_indent`. Once the blocks that generates are expanded as neighbors
    # we then begin seeing neighbors being other logical blocks i.e. a block's neighbors
    # may be another method or class (something with keywords/ends).
    #
    # For example:
    #
    #   1 def bark
    #   2
    #   3 end
    #   4
    #   5 def sit
    #   6 end
    #
    # In this case if lines 4, 5, and 6 are in a block when it tries to expand neighbors
    # it will expand up. If it stops after line 2 or 3 it may cause problems since there's a
    # valid kw/end pair, but the block will be checked without it.
    #
    # We try to resolve this edge case with `lookahead_balance_one_line` below.
    def expand_neighbors(block)
      now = AroundBlockScan.new(code_lines: @code_lines, block: block)

      # Initial scan
      now
        .force_add_hidden
        .stop_after_kw
        .scan_neighbors_not_empty

      # Slurp up empties
      now
        .scan_while { |line| line.empty? }

      # If next line is kw and it will balance us, take it
      expanded_lines = now
        .lookahead_balance_one_line
        .lines

      # Don't allocate a block if it won't be used
      #
      # If nothing was taken, return nil to indicate that status
      # used in `def call` to determine if
      # we need to expand up/out (`expand_indent`)
      if block.lines == expanded_lines
        nil
      else
        CodeBlock.new(lines: expanded_lines)
      end
    end

    # Manageable rspec errors
    def inspect
      "#<SyntaxSuggest::CodeBlock:0x0000123843lol >"
    end
  end
end
PK*J[�`���*share/ruby/syntax_suggest/ripper_errors.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Capture parse errors from Ripper
  #
  # Prism returns the errors with their messages, but Ripper
  # does not. To get them we must make a custom subclass.
  #
  # Example:
  #
  #   puts RipperErrors.new(" def foo").call.errors
  #   # => ["syntax error, unexpected end-of-input, expecting ';' or '\\n'"]
  class RipperErrors < Ripper
    attr_reader :errors

    # Comes from ripper, called
    # on every parse error, msg
    # is a string
    def on_parse_error(msg)
      @errors ||= []
      @errors << msg
    end

    alias_method :on_alias_error, :on_parse_error
    alias_method :on_assign_error, :on_parse_error
    alias_method :on_class_name_error, :on_parse_error
    alias_method :on_param_error, :on_parse_error
    alias_method :compile_error, :on_parse_error

    def call
      @run_once ||= begin
        @errors = []
        parse
        true
      end
      self
    end
  end
end
PK*J[_���
�
+share/ruby/syntax_suggest/explain_syntax.rbnu�[���# frozen_string_literal: true

require_relative "left_right_lex_count"

if !SyntaxSuggest.use_prism_parser?
  require_relative "ripper_errors"
end

module SyntaxSuggest
  class GetParseErrors
    def self.errors(source)
      if SyntaxSuggest.use_prism_parser?
        Prism.parse(source).errors.map(&:message)
      else
        RipperErrors.new(source).call.errors
      end
    end
  end

  # Explains syntax errors based on their source
  #
  # example:
  #
  #   source = "def foo; puts 'lol'" # Note missing end
  #   explain ExplainSyntax.new(
  #     code_lines: CodeLine.from_source(source)
  #   ).call
  #   explain.errors.first
  #   # => "Unmatched keyword, missing `end' ?"
  #
  # When the error cannot be determined by lexical counting
  # then the parser is run against the input and the raw
  # errors are returned.
  #
  # Example:
  #
  #   source = "1 * " # Note missing a second number
  #   explain ExplainSyntax.new(
  #     code_lines: CodeLine.from_source(source)
  #   ).call
  #   explain.errors.first
  #   # => "syntax error, unexpected end-of-input"
  class ExplainSyntax
    INVERSE = {
      "{" => "}",
      "}" => "{",
      "[" => "]",
      "]" => "[",
      "(" => ")",
      ")" => "(",
      "|" => "|"
    }.freeze

    def initialize(code_lines:)
      @code_lines = code_lines
      @left_right = LeftRightLexCount.new
      @missing = nil
    end

    def call
      @code_lines.each do |line|
        line.lex.each do |lex|
          @left_right.count_lex(lex)
        end
      end

      self
    end

    # Returns an array of missing elements
    #
    # For example this:
    #
    #   ExplainSyntax.new(code_lines: lines).missing
    #   # => ["}"]
    #
    # Would indicate that the source is missing
    # a `}` character in the source code
    def missing
      @missing ||= @left_right.missing
    end

    # Converts a missing string to
    # an human understandable explanation.
    #
    # Example:
    #
    #   explain.why("}")
    #   # => "Unmatched `{', missing `}' ?"
    #
    def why(miss)
      case miss
      when "keyword"
        "Unmatched `end', missing keyword (`do', `def`, `if`, etc.) ?"
      when "end"
        "Unmatched keyword, missing `end' ?"
      else
        inverse = INVERSE.fetch(miss) {
          raise "Unknown explain syntax char or key: #{miss.inspect}"
        }
        "Unmatched `#{inverse}', missing `#{miss}' ?"
      end
    end

    # Returns an array of syntax error messages
    #
    # If no missing pairs are found it falls back
    # on the original error messages
    def errors
      if missing.empty?
        return GetParseErrors.errors(@code_lines.map(&:original).join).uniq
      end

      missing.map { |miss| why(miss) }
    end
  end
end
PK*J[�#�{��1share/ruby/syntax_suggest/capture_code_context.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  module Capture
  end
end

require_relative "capture/falling_indent_lines"
require_relative "capture/before_after_keyword_ends"

module SyntaxSuggest
  # Turns a "invalid block(s)" into useful context
  #
  # There are three main phases in the algorithm:
  #
  # 1. Sanitize/format input source
  # 2. Search for invalid blocks
  # 3. Format invalid blocks into something meaningful
  #
  # This class handles the third part.
  #
  # The algorithm is very good at capturing all of a syntax
  # error in a single block in number 2, however the results
  # can contain ambiguities. Humans are good at pattern matching
  # and filtering and can mentally remove extraneous data, but
  # they can't add extra data that's not present.
  #
  # In the case of known ambiguious cases, this class adds context
  # back to the ambiguity so the programmer has full information.
  #
  # Beyond handling these ambiguities, it also captures surrounding
  # code context information:
  #
  #   puts block.to_s # => "def bark"
  #
  #   context = CaptureCodeContext.new(
  #     blocks: block,
  #     code_lines: code_lines
  #   )
  #
  #   lines = context.call.map(&:original)
  #   puts lines.join
  #   # =>
  #     class Dog
  #       def bark
  #     end
  #
  class CaptureCodeContext
    attr_reader :code_lines

    def initialize(blocks:, code_lines:)
      @blocks = Array(blocks)
      @code_lines = code_lines
      @visible_lines = @blocks.map(&:visible_lines).flatten
      @lines_to_output = @visible_lines.dup
    end

    def call
      @blocks.each do |block|
        capture_first_kw_end_same_indent(block)
        capture_last_end_same_indent(block)
        capture_before_after_kws(block)
        capture_falling_indent(block)
      end

      sorted_lines
    end

    def sorted_lines
      @lines_to_output.select!(&:not_empty?)
      @lines_to_output.uniq!
      @lines_to_output.sort!

      @lines_to_output
    end

    # Shows the context around code provided by "falling" indentation
    #
    # Converts:
    #
    #       it "foo" do
    #
    # into:
    #
    #   class OH
    #     def hello
    #       it "foo" do
    #     end
    #   end
    #
    def capture_falling_indent(block)
      Capture::FallingIndentLines.new(
        block: block,
        code_lines: @code_lines
      ).call do |line|
        @lines_to_output << line
      end
    end

    # Shows surrounding kw/end pairs
    #
    # The purpose of showing these extra pairs is due to cases
    # of ambiguity when only one visible line is matched.
    #
    # For example:
    #
    #     1  class Dog
    #     2    def bark
    #     4    def eat
    #     5    end
    #     6  end
    #
    # In this case either line 2 could be missing an `end` or
    # line 4 was an extra line added by mistake (it happens).
    #
    # When we detect the above problem it shows the issue
    # as only being on line 2
    #
    #     2    def bark
    #
    # Showing "neighbor" keyword pairs gives extra context:
    #
    #     2    def bark
    #     4    def eat
    #     5    end
    #
    def capture_before_after_kws(block)
      return unless block.visible_lines.count == 1

      around_lines = Capture::BeforeAfterKeywordEnds.new(
        code_lines: @code_lines,
        block: block
      ).call

      around_lines -= block.lines

      @lines_to_output.concat(around_lines)
    end

    # When there is an invalid block with a keyword
    # missing an end right before another end,
    # it is unclear where which keyword is missing the
    # end
    #
    # Take this example:
    #
    #   class Dog       # 1
    #     def bark      # 2
    #       puts "woof" # 3
    #   end             # 4
    #
    # However due to https://github.com/ruby/syntax_suggest/issues/32
    # the problem line will be identified as:
    #
    #  > class Dog       # 1
    #
    # Because lines 2, 3, and 4 are technically valid code and are expanded
    # first, deemed valid, and hidden. We need to un-hide the matching end
    # line 4. Also work backwards and if there's a mis-matched keyword, show it
    # too
    def capture_last_end_same_indent(block)
      return if block.visible_lines.length != 1
      return unless block.visible_lines.first.is_kw?

      visible_line = block.visible_lines.first
      lines = @code_lines[visible_line.index..block.lines.last.index]

      # Find first end with same indent
      # (this would return line 4)
      #
      #   end             # 4
      matching_end = lines.detect { |line| line.indent == block.current_indent && line.is_end? }
      return unless matching_end

      @lines_to_output << matching_end

      # Work backwards from the end to
      # see if there are mis-matched
      # keyword/end pairs
      #
      # Return the first mis-matched keyword
      # this would find line 2
      #
      #     def bark      # 2
      #       puts "woof" # 3
      #   end             # 4
      end_count = 0
      kw_count = 0
      kw_line = @code_lines[visible_line.index..matching_end.index].reverse.detect do |line|
        end_count += 1 if line.is_end?
        kw_count += 1 if line.is_kw?

        !kw_count.zero? && kw_count >= end_count
      end
      return unless kw_line
      @lines_to_output << kw_line
    end

    # The logical inverse of `capture_last_end_same_indent`
    #
    # When there is an invalid block with an `end`
    # missing a keyword right after another `end`,
    # it is unclear where which end is missing the
    # keyword.
    #
    # Take this example:
    #
    #   class Dog       # 1
    #       puts "woof" # 2
    #     end           # 3
    #   end             # 4
    #
    # the problem line will be identified as:
    #
    #  > end            # 4
    #
    # This happens because lines 1, 2, and 3 are technically valid code and are expanded
    # first, deemed valid, and hidden. We need to un-hide the matching keyword on
    # line 1. Also work backwards and if there's a mis-matched end, show it
    # too
    def capture_first_kw_end_same_indent(block)
      return if block.visible_lines.length != 1
      return unless block.visible_lines.first.is_end?

      visible_line = block.visible_lines.first
      lines = @code_lines[block.lines.first.index..visible_line.index]
      matching_kw = lines.reverse.detect { |line| line.indent == block.current_indent && line.is_kw? }
      return unless matching_kw

      @lines_to_output << matching_kw

      kw_count = 0
      end_count = 0
      orphan_end = @code_lines[matching_kw.index..visible_line.index].detect do |line|
        kw_count += 1 if line.is_kw?
        end_count += 1 if line.is_end?

        end_count >= kw_count
      end

      return unless orphan_end
      @lines_to_output << orphan_end
    end
  end
end
PK*J[&����,share/ruby/syntax_suggest/unvisited_lines.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Tracks which lines various code blocks have expanded to
  # and which are still unexplored
  class UnvisitedLines
    def initialize(code_lines:)
      @unvisited = code_lines.sort_by(&:indent_index)
      @visited_lines = {}
      @visited_lines.compare_by_identity
    end

    def empty?
      @unvisited.empty?
    end

    def peek
      @unvisited.last
    end

    def pop
      @unvisited.pop
    end

    def visit_block(block)
      block.lines.each do |line|
        next if @visited_lines[line]
        @visited_lines[line] = true
      end

      while @visited_lines[@unvisited.last]
        @unvisited.pop
      end
    end
  end
end
PK*J[���AA(share/ruby/syntax_suggest/code_search.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Searches code for a syntax error
  #
  # There are three main phases in the algorithm:
  #
  # 1. Sanitize/format input source
  # 2. Search for invalid blocks
  # 3. Format invalid blocks into something meaninful
  #
  # This class handles the part.
  #
  # The bulk of the heavy lifting is done in:
  #
  #  - CodeFrontier (Holds information for generating blocks and determining if we can stop searching)
  #  - ParseBlocksFromLine (Creates blocks into the frontier)
  #  - BlockExpand (Expands existing blocks to search more code)
  #
  # ## Syntax error detection
  #
  # When the frontier holds the syntax error, we can stop searching
  #
  #   search = CodeSearch.new(<<~EOM)
  #     def dog
  #       def lol
  #     end
  #   EOM
  #
  #   search.call
  #
  #   search.invalid_blocks.map(&:to_s) # =>
  #   # => ["def lol\n"]
  #
  class CodeSearch
    private

    attr_reader :frontier

    public

    attr_reader :invalid_blocks, :record_dir, :code_lines

    def initialize(source, record_dir: DEFAULT_VALUE)
      record_dir = if record_dir == DEFAULT_VALUE
        (ENV["SYNTAX_SUGGEST_RECORD_DIR"] || ENV["SYNTAX_SUGGEST_DEBUG"]) ? "tmp" : nil
      else
        record_dir
      end

      if record_dir
        @record_dir = SyntaxSuggest.record_dir(record_dir)
        @write_count = 0
      end

      @tick = 0
      @source = source
      @name_tick = Hash.new { |hash, k| hash[k] = 0 }
      @invalid_blocks = []

      @code_lines = CleanDocument.new(source: source).call.lines

      @frontier = CodeFrontier.new(code_lines: @code_lines)
      @block_expand = BlockExpand.new(code_lines: @code_lines)
      @parse_blocks_from_indent_line = ParseBlocksFromIndentLine.new(code_lines: @code_lines)
    end

    # Used for debugging
    def record(block:, name: "record")
      return unless @record_dir
      @name_tick[name] += 1
      filename = "#{@write_count += 1}-#{name}-#{@name_tick[name]}-(#{block.starts_at}__#{block.ends_at}).txt"
      if ENV["SYNTAX_SUGGEST_DEBUG"]
        puts "\n\n==== #{filename} ===="
        puts "\n```#{block.starts_at}..#{block.ends_at}"
        puts block
        puts "```"
        puts "  block indent:      #{block.current_indent}"
      end
      @record_dir.join(filename).open(mode: "a") do |f|
        document = DisplayCodeWithLineNumbers.new(
          lines: @code_lines.select(&:visible?),
          terminal: false,
          highlight_lines: block.lines
        ).call

        f.write("    Block lines: #{block.starts_at..block.ends_at} (#{name}) \n\n#{document}")
      end
    end

    def push(block, name:)
      record(block: block, name: name)

      block.mark_invisible if block.valid?
      frontier << block
    end

    # Parses the most indented lines into blocks that are marked
    # and added to the frontier
    def create_blocks_from_untracked_lines
      max_indent = frontier.next_indent_line&.indent

      while (line = frontier.next_indent_line) && (line.indent == max_indent)
        @parse_blocks_from_indent_line.each_neighbor_block(frontier.next_indent_line) do |block|
          push(block, name: "add")
        end
      end
    end

    # Given an already existing block in the frontier, expand it to see
    # if it contains our invalid syntax
    def expand_existing
      block = frontier.pop
      return unless block

      record(block: block, name: "before-expand")

      block = @block_expand.call(block)
      push(block, name: "expand")
    end

    # Main search loop
    def call
      until frontier.holds_all_syntax_errors?
        @tick += 1

        if frontier.expand?
          expand_existing
        else
          create_blocks_from_untracked_lines
        end
      end

      @invalid_blocks.concat(frontier.detect_invalid_blocks)
      @invalid_blocks.sort_by! { |block| block.starts_at }
      self
    end
  end
end
PK*J[�'�vv share/ruby/syntax_suggest/cli.rbnu�[���# frozen_string_literal: true

require "pathname"
require "optparse"

module SyntaxSuggest
  # All the logic of the exe/syntax_suggest CLI in one handy spot
  #
  #   Cli.new(argv: ["--help"]).call
  #   Cli.new(argv: ["<path/to/file>.rb"]).call
  #   Cli.new(argv: ["<path/to/file>.rb", "--record=tmp"]).call
  #   Cli.new(argv: ["<path/to/file>.rb", "--terminal"]).call
  #
  class Cli
    attr_accessor :options

    # ARGV is Everything passed to the executable, does not include executable name
    #
    # All other intputs are dependency injection for testing
    def initialize(argv:, exit_obj: Kernel, io: $stdout, env: ENV)
      @options = {}
      @parser = nil
      options[:record_dir] = env["SYNTAX_SUGGEST_RECORD_DIR"]
      options[:record_dir] = "tmp" if env["DEBUG"]
      options[:terminal] = SyntaxSuggest::DEFAULT_VALUE

      @io = io
      @argv = argv
      @exit_obj = exit_obj
    end

    def call
      if @argv.empty?
        # Display help if raw command
        parser.parse! %w[--help]
        return
      else
        # Mutates @argv
        parse
        return if options[:exit]
      end

      file_name = @argv.first
      if file_name.nil?
        @io.puts "No file given"
        @exit_obj.exit(1)
        return
      end

      file = Pathname(file_name)
      if !file.exist?
        @io.puts "file not found: #{file.expand_path} "
        @exit_obj.exit(1)
        return
      end

      @io.puts "Record dir: #{options[:record_dir]}" if options[:record_dir]

      display = SyntaxSuggest.call(
        io: @io,
        source: file.read,
        filename: file.expand_path,
        terminal: options.fetch(:terminal, SyntaxSuggest::DEFAULT_VALUE),
        record_dir: options[:record_dir]
      )

      if display.document_ok?
        @io.puts "Syntax OK"
        @exit_obj.exit(0)
      else
        @exit_obj.exit(1)
      end
    end

    def parse
      parser.parse!(@argv)

      self
    end

    def parser
      @parser ||= OptionParser.new do |opts|
        opts.banner = <<~EOM
          Usage: syntax_suggest <file> [options]

          Parses a ruby source file and searches for syntax error(s) such as
          unexpected `end', expecting end-of-input.

          Example:

            $ syntax_suggest dog.rb

            # ...

              > 10  defdog
              > 15  end

          ENV options:

            SYNTAX_SUGGEST_RECORD_DIR=<dir>

            Records the steps used to search for a syntax error
            to the given directory

          Options:
        EOM

        opts.version = SyntaxSuggest::VERSION

        opts.on("--help", "Help - displays this message") do |v|
          @io.puts opts
          options[:exit] = true
          @exit_obj.exit
        end

        opts.on("--record <dir>", "Records the steps used to search for a syntax error to the given directory") do |v|
          options[:record_dir] = v
        end

        opts.on("--terminal", "Enable terminal highlighting") do |v|
          options[:terminal] = true
        end

        opts.on("--no-terminal", "Disable terminal highlighting") do |v|
          options[:terminal] = false
        end
      end
    end
  end
end
PK*J[Ŭ��;share/ruby/syntax_suggest/display_code_with_line_numbers.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Outputs code with highlighted lines
  #
  # Whatever is passed to this class will be rendered
  # even if it is "marked invisible" any filtering of
  # output should be done before calling this class.
  #
  #   DisplayCodeWithLineNumbers.new(
  #     lines: lines,
  #     highlight_lines: [lines[2], lines[3]]
  #   ).call
  #   # =>
  #       1
  #       2  def cat
  #     > 3    Dir.chdir
  #     > 4    end
  #       5  end
  #       6
  class DisplayCodeWithLineNumbers
    TERMINAL_HIGHLIGHT = "\e[1;3m" # Bold, italics
    TERMINAL_END = "\e[0m"

    def initialize(lines:, highlight_lines: [], terminal: false)
      @lines = Array(lines).sort
      @terminal = terminal
      @highlight_line_hash = Array(highlight_lines).each_with_object({}) { |line, h| h[line] = true }
      @digit_count = @lines.last&.line_number.to_s.length
    end

    def call
      @lines.map do |line|
        format_line(line)
      end.join
    end

    private def format_line(code_line)
      # Handle trailing slash lines
      code_line.original.lines.map.with_index do |contents, i|
        format(
          empty: code_line.empty?,
          number: (code_line.number + i).to_s,
          contents: contents,
          highlight: @highlight_line_hash[code_line]
        )
      end.join
    end

    private def format(contents:, number:, empty:, highlight: false)
      string = +""
      string << if highlight
        "> "
      else
        "  "
      end

      string << number.rjust(@digit_count).to_s
      if empty
        string << contents
      else
        string << "  "
        string << TERMINAL_HIGHLIGHT if @terminal && highlight
        string << contents
        string << TERMINAL_END if @terminal
      end
      string
    end
  end
end
PK*J[��m):share/ruby/syntax_suggest/parse_blocks_from_indent_line.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # This class is responsible for generating initial code blocks
  # that will then later be expanded.
  #
  # The biggest concern when guessing code blocks, is accidentally
  # grabbing one that contains only an "end". In this example:
  #
  #   def dog
  #     begonn # misspelled `begin`
  #     puts "bark"
  #     end
  #   end
  #
  # The following lines would be matched (from bottom to top):
  #
  #   1) end
  #
  #   2) puts "bark"
  #      end
  #
  #   3) begonn
  #      puts "bark"
  #      end
  #
  # At this point it has no where else to expand, and it will yield this inner
  # code as a block
  class ParseBlocksFromIndentLine
    attr_reader :code_lines

    def initialize(code_lines:)
      @code_lines = code_lines
    end

    # Builds blocks from bottom up
    def each_neighbor_block(target_line)
      scan = AroundBlockScan.new(code_lines: code_lines, block: CodeBlock.new(lines: target_line))
        .force_add_empty
        .force_add_hidden
        .scan_while { |line| line.indent >= target_line.indent }

      neighbors = scan.code_block.lines

      block = CodeBlock.new(lines: neighbors)
      if neighbors.length <= 2 || block.valid?
        yield block
      else
        until neighbors.empty?
          lines = [neighbors.pop]
          while (block = CodeBlock.new(lines: lines)) && block.invalid? && neighbors.any?
            lines.prepend neighbors.pop
          end

          yield block if block
        end
      end
    end
  end
end
PK*J[��M�LL$share/ruby/syntax_suggest/version.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  VERSION = "2.0.2"
end
PK*J[��~��2share/ruby/syntax_suggest/pathname_from_message.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Converts a SyntaxError message to a path
  #
  # Handles the case where the filename has a colon in it
  # such as on a windows file system: https://github.com/ruby/syntax_suggest/issues/111
  #
  # Example:
  #
  #    message = "/tmp/scratch:2:in `require_relative': /private/tmp/bad.rb:1: syntax error, unexpected `end' (SyntaxError)"
  #    puts PathnameFromMessage.new(message).call.name
  #    # => "/tmp/scratch.rb"
  #
  class PathnameFromMessage
    EVAL_RE = /^\(eval.*\):\d+/
    STREAMING_RE = /^-:\d+/
    attr_reader :name

    def initialize(message, io: $stderr)
      @line = message.lines.first
      @parts = @line.split(":")
      @guess = []
      @name = nil
      @io = io
    end

    def call
      if skip_missing_file_name?
        if ENV["SYNTAX_SUGGEST_DEBUG"]
          @io.puts "SyntaxSuggest: Could not find filename from #{@line.inspect}"
        end
      else
        until stop?
          @guess << @parts.shift
          @name = Pathname(@guess.join(":"))
        end

        if @parts.empty?
          @io.puts "SyntaxSuggest: Could not find filename from #{@line.inspect}"
          @name = nil
        end
      end

      self
    end

    def stop?
      return true if @parts.empty?
      return false if @guess.empty?

      @name&.exist?
    end

    def skip_missing_file_name?
      @line.match?(EVAL_RE) || @line.match?(STREAMING_RE)
    end
  end
end
PK*J[Nc-��.share/ruby/syntax_suggest/around_block_scan.rbnu�[���# frozen_string_literal: true

require_relative "scan_history"

module SyntaxSuggest
  # This class is useful for exploring contents before and after
  # a block
  #
  # It searches above and below the passed in block to match for
  # whatever criteria you give it:
  #
  # Example:
  #
  #   def dog         # 1
  #     puts "bark"   # 2
  #     puts "bark"   # 3
  #   end             # 4
  #
  #   scan = AroundBlockScan.new(
  #     code_lines: code_lines
  #     block: CodeBlock.new(lines: code_lines[1])
  #   )
  #
  #   scan.scan_while { true }
  #
  #   puts scan.before_index # => 0
  #   puts scan.after_index  # => 3
  #
  class AroundBlockScan
    def initialize(code_lines:, block:)
      @code_lines = code_lines
      @orig_indent = block.current_indent

      @stop_after_kw = false
      @force_add_empty = false
      @force_add_hidden = false
      @target_indent = nil

      @scanner = ScanHistory.new(code_lines: code_lines, block: block)
    end

    # When using this flag, `scan_while` will
    # bypass the block it's given and always add a
    # line that responds truthy to `CodeLine#hidden?`
    #
    # Lines are hidden when they've been evaluated by
    # the parser as part of a block and found to contain
    # valid code.
    def force_add_hidden
      @force_add_hidden = true
      self
    end

    # When using this flag, `scan_while` will
    # bypass the block it's given and always add a
    # line that responds truthy to `CodeLine#empty?`
    #
    # Empty lines contain no code, only whitespace such
    # as leading spaces a newline.
    def force_add_empty
      @force_add_empty = true
      self
    end

    # Tells `scan_while` to look for mismatched keyword/end-s
    #
    # When scanning up, if we see more keywords then end-s it will
    # stop. This might happen when scanning outside of a method body.
    # the first scan line up would be a keyword and this setting would
    # trigger a stop.
    #
    # When scanning down, stop if there are more end-s than keywords.
    def stop_after_kw
      @stop_after_kw = true
      self
    end

    # Main work method
    #
    # The scan_while method takes a block that yields lines above and
    # below the block. If the yield returns true, the @before_index
    # or @after_index are modified to include the matched line.
    #
    # In addition to yielding individual lines, the internals of this
    # object give a mini DSL to handle common situations such as
    # stopping if we've found a keyword/end mis-match in one direction
    # or the other.
    def scan_while
      stop_next_up = false
      stop_next_down = false

      @scanner.scan(
        up: ->(line, kw_count, end_count) {
          next false if stop_next_up
          next true if @force_add_hidden && line.hidden?
          next true if @force_add_empty && line.empty?

          if @stop_after_kw && kw_count > end_count
            stop_next_up = true
          end

          yield line
        },
        down: ->(line, kw_count, end_count) {
          next false if stop_next_down
          next true if @force_add_hidden && line.hidden?
          next true if @force_add_empty && line.empty?

          if @stop_after_kw && end_count > kw_count
            stop_next_down = true
          end

          yield line
        }
      )

      self
    end

    # Scanning is intentionally conservative because
    # we have no way of rolling back an aggressive block (at this time)
    #
    # If a block was stopped for some trivial reason, (like an empty line)
    # but the next line would have caused it to be balanced then we
    # can check that condition and grab just one more line either up or
    # down.
    #
    # For example, below if we're scanning up, line 2 might cause
    # the scanning to stop. This is because empty lines might
    # denote logical breaks where the user intended to chunk code
    # which is a good place to stop and check validity. Unfortunately
    # it also means we might have a "dangling" keyword or end.
    #
    #   1 def bark
    #   2
    #   3 end
    #
    # If lines 2 and 3 are in the block, then when this method is
    # run it would see it is unbalanced, but that acquiring line 1
    # would make it balanced, so that's what it does.
    def lookahead_balance_one_line
      kw_count = 0
      end_count = 0
      lines.each do |line|
        kw_count += 1 if line.is_kw?
        end_count += 1 if line.is_end?
      end

      return self if kw_count == end_count # nothing to balance

      @scanner.commit_if_changed # Rollback point if we don't find anything to optimize

      # Try to eat up empty lines
      @scanner.scan(
        up: ->(line, _, _) { line.hidden? || line.empty? },
        down: ->(line, _, _) { line.hidden? || line.empty? }
      )

      # More ends than keywords, check if we can balance expanding up
      next_up = @scanner.next_up
      next_down = @scanner.next_down
      case end_count - kw_count
      when 1
        if next_up&.is_kw? && next_up.indent >= @target_indent
          @scanner.scan(
            up: ->(line, _, _) { line == next_up },
            down: ->(line, _, _) { false }
          )
          @scanner.commit_if_changed
        end
      when -1
        if next_down&.is_end? && next_down.indent >= @target_indent
          @scanner.scan(
            up: ->(line, _, _) { false },
            down: ->(line, _, _) { line == next_down }
          )
          @scanner.commit_if_changed
        end
      end
      # Rollback any uncommitted changes
      @scanner.stash_changes

      self
    end

    # Finds code lines at the same or greater indentation and adds them
    # to the block
    def scan_neighbors_not_empty
      @target_indent = @orig_indent
      scan_while { |line| line.not_empty? && line.indent >= @target_indent }
    end

    # Scan blocks based on indentation of next line above/below block
    #
    # Determines indentaion of the next line above/below the current block.
    #
    # Normally this is called when a block has expanded to capture all "neighbors"
    # at the same (or greater) indentation and needs to expand out. For example
    # the `def/end` lines surrounding a method.
    def scan_adjacent_indent
      before_after_indent = []

      before_after_indent << (@scanner.next_up&.indent || 0)
      before_after_indent << (@scanner.next_down&.indent || 0)

      @target_indent = before_after_indent.min
      scan_while { |line| line.not_empty? && line.indent >= @target_indent }

      self
    end

    # Return the currently matched lines as a `CodeBlock`
    #
    # When a `CodeBlock` is created it will gather metadata about
    # itself, so this is not a free conversion. Avoid allocating
    # more CodeBlock's than needed
    def code_block
      CodeBlock.new(lines: lines)
    end

    # Returns the lines matched by the current scan as an
    # array of CodeLines
    def lines
      @scanner.lines
    end

    # Manageable rspec errors
    def inspect
      "#<#{self.class}:0x0000123843lol >"
    end
  end
end
PK*J[�D.���)share/ruby/syntax_suggest/scan_history.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Scans up/down from the given block
  #
  # You can try out a change, stash it, or commit it to save for later
  #
  # Example:
  #
  #   scanner = ScanHistory.new(code_lines: code_lines, block: block)
  #   scanner.scan(
  #     up: ->(_, _, _) { true },
  #     down: ->(_, _, _) { true }
  #   )
  #   scanner.changed? # => true
  #   expect(scanner.lines).to eq(code_lines)
  #
  #   scanner.stash_changes
  #
  #   expect(scanner.lines).to_not eq(code_lines)
  class ScanHistory
    attr_reader :before_index, :after_index

    def initialize(code_lines:, block:)
      @code_lines = code_lines
      @history = [block]
      refresh_index
    end

    def commit_if_changed
      if changed?
        @history << CodeBlock.new(lines: @code_lines[before_index..after_index])
      end

      self
    end

    # Discards any changes that have not been committed
    def stash_changes
      refresh_index
      self
    end

    # Discard changes that have not been committed and revert the last commit
    #
    # Cannot revert the first commit
    def revert_last_commit
      if @history.length > 1
        @history.pop
        refresh_index
      end

      self
    end

    def changed?
      @before_index != current.lines.first.index ||
        @after_index != current.lines.last.index
    end

    # Iterates up and down
    #
    # Returns line, kw_count, end_count for each iteration
    def scan(up:, down:)
      kw_count = 0
      end_count = 0

      up_index = before_lines.reverse_each.take_while do |line|
        kw_count += 1 if line.is_kw?
        end_count += 1 if line.is_end?
        up.call(line, kw_count, end_count)
      end.last&.index

      kw_count = 0
      end_count = 0

      down_index = after_lines.each.take_while do |line|
        kw_count += 1 if line.is_kw?
        end_count += 1 if line.is_end?
        down.call(line, kw_count, end_count)
      end.last&.index

      @before_index = if up_index && up_index < @before_index
        up_index
      else
        @before_index
      end

      @after_index = if down_index && down_index > @after_index
        down_index
      else
        @after_index
      end

      self
    end

    def next_up
      return nil if @before_index <= 0

      @code_lines[@before_index - 1]
    end

    def next_down
      return nil if @after_index >= @code_lines.length

      @code_lines[@after_index + 1]
    end

    def lines
      @code_lines[@before_index..@after_index]
    end

    private def before_lines
      @code_lines[0...@before_index] || []
    end

    # Returns an array of all the CodeLines that exist after
    # the currently scanned block
    private def after_lines
      @code_lines[@after_index.next..] || []
    end

    private def current
      @history.last
    end

    private def refresh_index
      @before_index = current.lines.first.index
      @after_index = current.lines.last.index
      self
    end
  end
end
PK*J[�Y�Ө�$share/ruby/syntax_suggest/lex_all.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Ripper.lex is not guaranteed to lex the entire source document
  #
  # This class guarantees the whole document is lex-ed by iteratively
  # lexing the document where ripper stopped.
  #
  # Prism likely doesn't have the same problem. Once ripper support is removed
  # we can likely reduce the complexity here if not remove the whole concept.
  #
  # Example usage:
  #
  #   lex = LexAll.new(source: source)
  #   lex.each do |value|
  #     puts value.line
  #   end
  class LexAll
    include Enumerable

    def initialize(source:, source_lines: nil)
      @lex = self.class.lex(source, 1)
      lineno = @lex.last[0][0] + 1
      source_lines ||= source.lines
      last_lineno = source_lines.length

      until lineno >= last_lineno
        lines = source_lines[lineno..]

        @lex.concat(
          self.class.lex(lines.join, lineno + 1)
        )

        lineno = @lex.last[0].first + 1
      end

      last_lex = nil
      @lex.map! { |elem|
        last_lex = LexValue.new(elem[0].first, elem[1], elem[2], elem[3], last_lex)
      }
    end

    if SyntaxSuggest.use_prism_parser?
      def self.lex(source, line_number)
        Prism.lex_compat(source, line: line_number).value.sort_by { |values| values[0] }
      end
    else
      def self.lex(source, line_number)
        Ripper::Lexer.new(source, "-", line_number).parse.sort_by(&:pos)
      end
    end

    def to_a
      @lex
    end

    def each
      return @lex.each unless block_given?
      @lex.each do |x|
        yield x
      end
    end

    def [](index)
      @lex[index]
    end

    def last
      @lex.last
    end
  end
end

require_relative "lex_value"
PK*J[>K���+share/ruby/syntax_suggest/priority_queue.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Holds elements in a priority heap on insert
  #
  # Instead of constantly calling `sort!`, put
  # the element where it belongs the first time
  # around
  #
  # Example:
  #
  #   queue = PriorityQueue.new
  #   queue << 33
  #   queue << 44
  #   queue << 1
  #
  #   puts queue.peek # => 44
  #
  class PriorityQueue
    attr_reader :elements

    def initialize
      @elements = []
    end

    def <<(element)
      @elements << element
      bubble_up(last_index, element)
    end

    def pop
      exchange(0, last_index)
      max = @elements.pop
      bubble_down(0)
      max
    end

    def length
      @elements.length
    end

    def empty?
      @elements.empty?
    end

    def peek
      @elements.first
    end

    def to_a
      @elements
    end

    # Used for testing, extremely not performant
    def sorted
      out = []
      elements = @elements.dup
      while (element = pop)
        out << element
      end
      @elements = elements
      out.reverse
    end

    private def last_index
      @elements.size - 1
    end

    private def bubble_up(index, element)
      return if index <= 0

      parent_index = (index - 1) / 2
      parent = @elements[parent_index]

      return if (parent <=> element) >= 0

      exchange(index, parent_index)
      bubble_up(parent_index, element)
    end

    private def bubble_down(index)
      child_index = (index * 2) + 1

      return if child_index > last_index

      not_the_last_element = child_index < last_index
      left_element = @elements[child_index]
      right_element = @elements[child_index + 1]

      child_index += 1 if not_the_last_element && (right_element <=> left_element) == 1

      return if (@elements[index] <=> @elements[child_index]) >= 0

      exchange(index, child_index)
      bubble_down(child_index)
    end

    def exchange(source, target)
      a = @elements[source]
      b = @elements[target]
      @elements[source] = b
      @elements[target] = a
    end
  end
end
PK*J[�:�D~~&share/ruby/syntax_suggest/code_line.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Represents a single line of code of a given source file
  #
  # This object contains metadata about the line such as
  # amount of indentation, if it is empty or not, and
  # lexical data, such as if it has an `end` or a keyword
  # in it.
  #
  # Visibility of lines can be toggled off. Marking a line as invisible
  # indicates that it should not be used for syntax checks.
  # It's functionally the same as commenting it out.
  #
  # Example:
  #
  #   line = CodeLine.from_source("def foo\n").first
  #   line.number => 1
  #   line.empty? # => false
  #   line.visible? # => true
  #   line.mark_invisible
  #   line.visible? # => false
  #
  class CodeLine
    TRAILING_SLASH = ("\\" + $/).freeze

    # Returns an array of CodeLine objects
    # from the source string
    def self.from_source(source, lines: nil)
      lines ||= source.lines
      lex_array_for_line = LexAll.new(source: source, source_lines: lines).each_with_object(Hash.new { |h, k| h[k] = [] }) { |lex, hash| hash[lex.line] << lex }
      lines.map.with_index do |line, index|
        CodeLine.new(
          line: line,
          index: index,
          lex: lex_array_for_line[index + 1]
        )
      end
    end

    attr_reader :line, :index, :lex, :line_number, :indent
    def initialize(line:, index:, lex:)
      @lex = lex
      @line = line
      @index = index
      @original = line
      @line_number = @index + 1
      strip_line = line.dup
      strip_line.lstrip!

      @indent = if (@empty = strip_line.empty?)
        line.length - 1 # Newline removed from strip_line is not "whitespace"
      else
        line.length - strip_line.length
      end

      set_kw_end
    end

    # Used for stable sort via indentation level
    #
    # Ruby's sort is not "stable" meaning that when
    # multiple elements have the same value, they are
    # not guaranteed to return in the same order they
    # were put in.
    #
    # So when multiple code lines have the same indentation
    # level, they're sorted by their index value which is unique
    # and consistent.
    #
    # This is mostly needed for consistency of the test suite
    def indent_index
      @indent_index ||= [indent, index]
    end
    alias_method :number, :line_number

    # Returns true if the code line is determined
    # to contain a keyword that matches with an `end`
    #
    # For example: `def`, `do`, `begin`, `ensure`, etc.
    def is_kw?
      @is_kw
    end

    # Returns true if the code line is determined
    # to contain an `end` keyword
    def is_end?
      @is_end
    end

    # Used to hide lines
    #
    # The search alorithm will group lines into blocks
    # then if those blocks are determined to represent
    # valid code they will be hidden
    def mark_invisible
      @line = ""
    end

    # Means the line was marked as "invisible"
    # Confusingly, "empty" lines are visible...they
    # just don't contain any source code other than a newline ("\n").
    def visible?
      !line.empty?
    end

    # Opposite or `visible?` (note: different than `empty?`)
    def hidden?
      !visible?
    end

    # An `empty?` line is one that was originally left
    # empty in the source code, while a "hidden" line
    # is one that we've since marked as "invisible"
    def empty?
      @empty
    end

    # Opposite of `empty?` (note: different than `visible?`)
    def not_empty?
      !empty?
    end

    # Renders the given line
    #
    # Also allows us to represent source code as
    # an array of code lines.
    #
    # When we have an array of code line elements
    # calling `join` on the array will call `to_s`
    # on each element, which essentially converts
    # it back into it's original source string.
    def to_s
      line
    end

    # When the code line is marked invisible
    # we retain the original value of it's line
    # this is useful for debugging and for
    # showing extra context
    #
    # DisplayCodeWithLineNumbers will render
    # all lines given to it, not just visible
    # lines, it uses the original method to
    # obtain them.
    attr_reader :original

    # Comparison operator, needed for equality
    # and sorting
    def <=>(other)
      index <=> other.index
    end

    # [Not stable API]
    #
    # Lines that have a `on_ignored_nl` type token and NOT
    # a `BEG` type seem to be a good proxy for the ability
    # to join multiple lines into one.
    #
    # This predicate method is used to determine when those
    # two criteria have been met.
    #
    # The one known case this doesn't handle is:
    #
    #     Ripper.lex <<~EOM
    #       a &&
    #        b ||
    #        c
    #     EOM
    #
    # For some reason this introduces `on_ignore_newline` but with BEG type
    def ignore_newline_not_beg?
      @ignore_newline_not_beg
    end

    # Determines if the given line has a trailing slash
    #
    #     lines = CodeLine.from_source(<<~EOM)
    #       it "foo" \
    #     EOM
    #     expect(lines.first.trailing_slash?).to eq(true)
    #
    if SyntaxSuggest.use_prism_parser?
      def trailing_slash?
        last = @lex.last
        last&.type == :on_tstring_end
      end
    else
      def trailing_slash?
        last = @lex.last
        return false unless last
        return false unless last.type == :on_sp

        last.token == TRAILING_SLASH
      end
    end

    # Endless method detection
    #
    # From https://github.com/ruby/irb/commit/826ae909c9c93a2ddca6f9cfcd9c94dbf53d44ab
    # Detecting a "oneliner" seems to need a state machine.
    # This can be done by looking mostly at the "state" (last value):
    #
    #   ENDFN -> BEG (token = '=' ) -> END
    #
    private def set_kw_end
      oneliner_count = 0
      in_oneliner_def = nil

      kw_count = 0
      end_count = 0

      @ignore_newline_not_beg = false
      @lex.each do |lex|
        kw_count += 1 if lex.is_kw?
        end_count += 1 if lex.is_end?

        if lex.type == :on_ignored_nl
          @ignore_newline_not_beg = !lex.expr_beg?
        end

        if in_oneliner_def.nil?
          in_oneliner_def = :ENDFN if lex.state.allbits?(Ripper::EXPR_ENDFN)
        elsif lex.state.allbits?(Ripper::EXPR_ENDFN)
          # Continue
        elsif lex.state.allbits?(Ripper::EXPR_BEG)
          in_oneliner_def = :BODY if lex.token == "="
        elsif lex.state.allbits?(Ripper::EXPR_END)
          # We found an endless method, count it
          oneliner_count += 1 if in_oneliner_def == :BODY

          in_oneliner_def = nil
        else
          in_oneliner_def = nil
        end
      end

      kw_count -= oneliner_count

      @is_kw = (kw_count - end_count) > 0
      @is_end = (end_count - kw_count) > 0
    end
  end
end
PK*J[�
�F2share/ruby/syntax_suggest/priority_engulf_queue.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Keeps track of what elements are in the queue in
  # priority and also ensures that when one element
  # engulfs/covers/eats another that the larger element
  # evicts the smaller element
  class PriorityEngulfQueue
    def initialize
      @queue = PriorityQueue.new
    end

    def to_a
      @queue.to_a
    end

    def empty?
      @queue.empty?
    end

    def length
      @queue.length
    end

    def peek
      @queue.peek
    end

    def pop
      @queue.pop
    end

    def push(block)
      prune_engulf(block)
      @queue << block
      flush_deleted

      self
    end

    private def flush_deleted
      while @queue&.peek&.deleted?
        @queue.pop
      end
    end

    private def prune_engulf(block)
      # If we're about to pop off the same block, we can skip deleting
      # things from the frontier this iteration since we'll get it
      # on the next iteration
      return if @queue.peek && (block <=> @queue.peek) == 1

      if block.starts_at != block.ends_at # A block of size 1 cannot engulf another
        @queue.to_a.each { |b|
          if b.starts_at >= block.starts_at && b.ends_at <= block.ends_at
            b.delete
            true
          end
        }
      end
    end
  end
end
PK*J[w���mm share/ruby/syntax_suggest/api.rbnu�[���# frozen_string_literal: true

require_relative "version"

require "tmpdir"
require "stringio"
require "pathname"
require "timeout"

# We need Ripper loaded for `Prism.lex_compat` even if we're using Prism
# for lexing and parsing
require "ripper"

# Prism is the new parser, replacing Ripper
#
# We need to "dual boot" both for now because syntax_suggest
# supports older rubies that do not ship with syntax suggest.
#
# We also need the ability to control loading of this library
# so we can test that both modes work correctly in CI.
if (value = ENV["SYNTAX_SUGGEST_DISABLE_PRISM"])
  warn "Skipping loading prism due to SYNTAX_SUGGEST_DISABLE_PRISM=#{value}"
else
  begin
    require "prism"
  rescue LoadError
  end
end

module SyntaxSuggest
  # Used to indicate a default value that cannot
  # be confused with another input.
  DEFAULT_VALUE = Object.new.freeze

  class Error < StandardError; end
  TIMEOUT_DEFAULT = ENV.fetch("SYNTAX_SUGGEST_TIMEOUT", 1).to_i

  # SyntaxSuggest.use_prism_parser? [Private]
  #
  # Tells us if the prism parser is available for use
  # or if we should fallback to `Ripper`
  def self.use_prism_parser?
    defined?(Prism)
  end

  # SyntaxSuggest.handle_error [Public]
  #
  # Takes a `SyntaxError` exception, uses the
  # error message to locate the file. Then the file
  # will be analyzed to find the location of the syntax
  # error and emit that location to stderr.
  #
  # Example:
  #
  #   begin
  #     require 'bad_file'
  #   rescue => e
  #     SyntaxSuggest.handle_error(e)
  #   end
  #
  # By default it will re-raise the exception unless
  # `re_raise: false`. The message output location
  # can be configured using the `io: $stderr` input.
  #
  # If a valid filename cannot be determined, the original
  # exception will be re-raised (even with
  # `re_raise: false`).
  def self.handle_error(e, re_raise: true, io: $stderr)
    unless e.is_a?(SyntaxError)
      io.puts("SyntaxSuggest: Must pass a SyntaxError, got: #{e.class}")
      raise e
    end

    file = PathnameFromMessage.new(e.message, io: io).call.name
    raise e unless file

    io.sync = true

    call(
      io: io,
      source: file.read,
      filename: file
    )

    raise e if re_raise
  end

  # SyntaxSuggest.call [Private]
  #
  # Main private interface
  def self.call(source:, filename: DEFAULT_VALUE, terminal: DEFAULT_VALUE, record_dir: DEFAULT_VALUE, timeout: TIMEOUT_DEFAULT, io: $stderr)
    search = nil
    filename = nil if filename == DEFAULT_VALUE
    Timeout.timeout(timeout) do
      record_dir ||= ENV["DEBUG"] ? "tmp" : nil
      search = CodeSearch.new(source, record_dir: record_dir).call
    end

    blocks = search.invalid_blocks
    DisplayInvalidBlocks.new(
      io: io,
      blocks: blocks,
      filename: filename,
      terminal: terminal,
      code_lines: search.code_lines
    ).call
  rescue Timeout::Error => e
    io.puts "Search timed out SYNTAX_SUGGEST_TIMEOUT=#{timeout}, run with SYNTAX_SUGGEST_DEBUG=1 for more info"
    io.puts e.backtrace.first(3).join($/)
  end

  # SyntaxSuggest.record_dir [Private]
  #
  # Used to generate a unique directory to record
  # search steps for debugging
  def self.record_dir(dir)
    time = Time.now.strftime("%Y-%m-%d-%H-%M-%s-%N")
    dir = Pathname(dir)
    dir.join(time).tap { |path|
      path.mkpath
      alias_dir = dir.join("last")
      FileUtils.rm_rf(alias_dir) if alias_dir.exist?
      FileUtils.ln_sf(time, alias_dir)
    }
  end

  # SyntaxSuggest.valid_without? [Private]
  #
  # This will tell you if the `code_lines` would be valid
  # if you removed the `without_lines`. In short it's a
  # way to detect if we've found the lines with syntax errors
  # in our document yet.
  #
  #   code_lines = [
  #     CodeLine.new(line: "def foo\n",   index: 0)
  #     CodeLine.new(line: "  def bar\n", index: 1)
  #     CodeLine.new(line: "end\n",       index: 2)
  #   ]
  #
  #   SyntaxSuggest.valid_without?(
  #     without_lines: code_lines[1],
  #     code_lines: code_lines
  #   )                                    # => true
  #
  #   SyntaxSuggest.valid?(code_lines) # => false
  def self.valid_without?(without_lines:, code_lines:)
    lines = code_lines - Array(without_lines).flatten

    if lines.empty?
      true
    else
      valid?(lines)
    end
  end

  # SyntaxSuggest.invalid? [Private]
  #
  # Opposite of `SyntaxSuggest.valid?`
  if defined?(Prism)
    def self.invalid?(source)
      source = source.join if source.is_a?(Array)
      source = source.to_s

      Prism.parse(source).failure?
    end
  else
    def self.invalid?(source)
      source = source.join if source.is_a?(Array)
      source = source.to_s

      Ripper.new(source).tap(&:parse).error?
    end
  end

  # SyntaxSuggest.valid? [Private]
  #
  # Returns truthy if a given input source is valid syntax
  #
  #   SyntaxSuggest.valid?(<<~EOM) # => true
  #     def foo
  #     end
  #   EOM
  #
  #   SyntaxSuggest.valid?(<<~EOM) # => false
  #     def foo
  #       def bar # Syntax error here
  #     end
  #   EOM
  #
  # You can also pass in an array of lines and they'll be
  # joined before evaluating
  #
  #   SyntaxSuggest.valid?(
  #     [
  #       "def foo\n",
  #       "end\n"
  #     ]
  #   ) # => true
  #
  #   SyntaxSuggest.valid?(
  #     [
  #       "def foo\n",
  #       "  def bar\n", # Syntax error here
  #       "end\n"
  #     ]
  #   ) # => false
  #
  # As an FYI the CodeLine class instances respond to `to_s`
  # so passing a CodeLine in as an object or as an array
  # will convert it to it's code representation.
  def self.valid?(source)
    !invalid?(source)
  end
end

# Integration
require_relative "cli"

# Core logic
require_relative "code_search"
require_relative "code_frontier"
require_relative "explain_syntax"
require_relative "clean_document"

# Helpers
require_relative "lex_all"
require_relative "code_line"
require_relative "code_block"
require_relative "block_expand"
require_relative "mini_stringio"
require_relative "priority_queue"
require_relative "unvisited_lines"
require_relative "around_block_scan"
require_relative "priority_engulf_queue"
require_relative "pathname_from_message"
require_relative "display_invalid_blocks"
require_relative "parse_blocks_from_indent_line"
PK*J[Q0��*share/ruby/syntax_suggest/mini_stringio.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # Mini String IO [Private]
  #
  # Acts like a StringIO with reduced API, but without having to require that
  # class.
  #
  # The original codebase emitted directly to $stderr, but now SyntaxError#detailed_message
  # needs a string output. To accomplish that we kept the original print infrastructure in place and
  # added this class to accumulate the print output into a string.
  class MiniStringIO
    EMPTY_ARG = Object.new

    def initialize(isatty: $stderr.isatty)
      @string = +""
      @isatty = isatty
    end

    attr_reader :isatty
    def puts(value = EMPTY_ARG, **)
      if !value.equal?(EMPTY_ARG)
        @string << value
      end
      @string << $/
    end

    attr_reader :string
  end
end
PK*J[�z�
�
%share/ruby/syntax_suggest/core_ext.rbnu�[���# frozen_string_literal: true

# Ruby 3.2+ has a cleaner way to hook into Ruby that doesn't use `require`
if SyntaxError.method_defined?(:detailed_message)
  module SyntaxSuggest
    # SyntaxSuggest.module_for_detailed_message [Private]
    #
    # Used to monkeypatch SyntaxError via Module.prepend
    def self.module_for_detailed_message
      Module.new {
        def detailed_message(highlight: true, syntax_suggest: true, **kwargs)
          return super unless syntax_suggest

          require "syntax_suggest/api" unless defined?(SyntaxSuggest::DEFAULT_VALUE)

          message = super

          if path
            file = Pathname.new(path)
            io = SyntaxSuggest::MiniStringIO.new

            SyntaxSuggest.call(
              io: io,
              source: file.read,
              filename: file,
              terminal: highlight
            )
            annotation = io.string

            annotation += "\n" unless annotation.end_with?("\n")

            annotation + message
          else
            message
          end
        rescue => e
          if ENV["SYNTAX_SUGGEST_DEBUG"]
            $stderr.warn(e.message)
            $stderr.warn(e.backtrace)
          end

          # Ignore internal errors
          message
        end
      }
    end
  end

  SyntaxError.prepend(SyntaxSuggest.module_for_detailed_message)
else
  autoload :Pathname, "pathname"

  #--
  # Monkey patch kernel to ensure that all `require` calls call the same
  # method
  #++
  module Kernel
    # :stopdoc:

    module_function

    alias_method :syntax_suggest_original_require, :require
    alias_method :syntax_suggest_original_require_relative, :require_relative
    alias_method :syntax_suggest_original_load, :load

    def load(file, wrap = false)
      syntax_suggest_original_load(file)
    rescue SyntaxError => e
      require "syntax_suggest/api" unless defined?(SyntaxSuggest::DEFAULT_VALUE)

      SyntaxSuggest.handle_error(e)
    end

    def require(file)
      syntax_suggest_original_require(file)
    rescue SyntaxError => e
      require "syntax_suggest/api" unless defined?(SyntaxSuggest::DEFAULT_VALUE)

      SyntaxSuggest.handle_error(e)
    end

    def require_relative(file)
      if Pathname.new(file).absolute?
        syntax_suggest_original_require file
      else
        relative_from = caller_locations(1..1).first
        relative_from_path = relative_from.absolute_path || relative_from.path
        syntax_suggest_original_require File.expand_path("../#{file}", relative_from_path)
      end
    rescue SyntaxError => e
      require "syntax_suggest/api" unless defined?(SyntaxSuggest::DEFAULT_VALUE)

      SyntaxSuggest.handle_error(e)
    end
  end
end
PK*J[��0tt*share/ruby/syntax_suggest/code_frontier.rbnu�[���# frozen_string_literal: true

module SyntaxSuggest
  # The main function of the frontier is to hold the edges of our search and to
  # evaluate when we can stop searching.

  # There are three main phases in the algorithm:
  #
  # 1. Sanitize/format input source
  # 2. Search for invalid blocks
  # 3. Format invalid blocks into something meaningful
  #
  # The Code frontier is a critical part of the second step
  #
  # ## Knowing where we've been
  #
  # Once a code block is generated it is added onto the frontier. Then it will be
  # sorted by indentation and frontier can be filtered. Large blocks that fully enclose a
  # smaller block will cause the smaller block to be evicted.
  #
  #   CodeFrontier#<<(block) # Adds block to frontier
  #   CodeFrontier#pop # Removes block from frontier
  #
  # ## Knowing where we can go
  #
  # Internally the frontier keeps track of "unvisited" lines which are exposed via `next_indent_line`
  # when called, this method returns, a line of code with the highest indentation.
  #
  # The returned line of code can be used to build a CodeBlock and then that code block
  # is added back to the frontier. Then, the lines are removed from the
  # "unvisited" so we don't double-create the same block.
  #
  #   CodeFrontier#next_indent_line # Shows next line
  #   CodeFrontier#register_indent_block(block) # Removes lines from unvisited
  #
  # ## Knowing when to stop
  #
  # The frontier knows how to check the entire document for a syntax error. When blocks
  # are added onto the frontier, they're removed from the document. When all code containing
  # syntax errors has been added to the frontier, the document will be parsable without a
  # syntax error and the search can stop.
  #
  #   CodeFrontier#holds_all_syntax_errors? # Returns true when frontier holds all syntax errors
  #
  # ## Filtering false positives
  #
  # Once the search is completed, the frontier may have multiple blocks that do not contain
  # the syntax error. To limit the result to the smallest subset of "invalid blocks" call:
  #
  #   CodeFrontier#detect_invalid_blocks
  #
  class CodeFrontier
    def initialize(code_lines:, unvisited: UnvisitedLines.new(code_lines: code_lines))
      @code_lines = code_lines
      @unvisited = unvisited
      @queue = PriorityEngulfQueue.new

      @check_next = true
    end

    def count
      @queue.length
    end

    # Performance optimization
    #
    # Parsing with ripper is expensive
    # If we know we don't have any blocks with invalid
    # syntax, then we know we cannot have found
    # the incorrect syntax yet.
    #
    # When an invalid block is added onto the frontier
    # check document state
    private def can_skip_check?
      check_next = @check_next
      @check_next = false

      if check_next
        false
      else
        true
      end
    end

    # Returns true if the document is valid with all lines
    # removed. By default it checks all blocks in present in
    # the frontier array, but can be used for arbitrary arrays
    # of codeblocks as well
    def holds_all_syntax_errors?(block_array = @queue, can_cache: true)
      return false if can_cache && can_skip_check?

      without_lines = block_array.to_a.flat_map do |block|
        block.lines
      end

      SyntaxSuggest.valid_without?(
        without_lines: without_lines,
        code_lines: @code_lines
      )
    end

    # Returns a code block with the largest indentation possible
    def pop
      @queue.pop
    end

    def next_indent_line
      @unvisited.peek
    end

    def expand?
      return false if @queue.empty?
      return true if @unvisited.empty?

      frontier_indent = @queue.peek.current_indent
      unvisited_indent = next_indent_line.indent

      if ENV["SYNTAX_SUGGEST_DEBUG"]
        puts "```"
        puts @queue.peek
        puts "```"
        puts "  @frontier indent:  #{frontier_indent}"
        puts "  @unvisited indent: #{unvisited_indent}"
      end

      # Expand all blocks before moving to unvisited lines
      frontier_indent >= unvisited_indent
    end

    # Keeps track of what lines have been added to blocks and which are not yet
    # visited.
    def register_indent_block(block)
      @unvisited.visit_block(block)
      self
    end

    # When one element fully encapsulates another we remove the smaller
    # block from the frontier. This prevents double expansions and all-around
    # weird behavior. However this guarantee is quite expensive to maintain
    def register_engulf_block(block)
    end

    # Add a block to the frontier
    #
    # This method ensures the frontier always remains sorted (in indentation order)
    # and that each code block's lines are removed from the indentation hash so we
    # don't re-evaluate the same line multiple times.
    def <<(block)
      @unvisited.visit_block(block)

      @queue.push(block)

      @check_next = true if block.invalid?

      self
    end

    # Example:
    #
    #   combination([:a, :b, :c, :d])
    #   # => [[:a], [:b], [:c], [:d], [:a, :b], [:a, :c], [:a, :d], [:b, :c], [:b, :d], [:c, :d], [:a, :b, :c], [:a, :b, :d], [:a, :c, :d], [:b, :c, :d], [:a, :b, :c, :d]]
    def self.combination(array)
      guesses = []
      1.upto(array.length).each do |size|
        guesses.concat(array.combination(size).to_a)
      end
      guesses
    end

    # Given that we know our syntax error exists somewhere in our frontier, we want to find
    # the smallest possible set of blocks that contain all the syntax errors
    def detect_invalid_blocks
      self.class.combination(@queue.to_a.select(&:invalid?)).detect do |block_array|
        holds_all_syntax_errors?(block_array, can_cache: false)
      end || []
    end
  end
end
PK*J[�4����share/ruby/objspace/trace.rbnu�[���# This is a simple tool to enable the object allocation tracer.
# When you have an object of unknown provenance, you can use this
# to investigate where the object in question is created.
#
# = Important notice
#
# This is only for debugging purpose. Do not use this in production.
# Require'ing this file immediately starts tracing the object allocation,
# which brings a large performance overhead.
#
# = Usage
#
# 1. Add `require "objspace/trace"` into your code (or add `-robjspace/trace` into the command line)
# 2. `p obj` will show the allocation site of `obj`
#
# Note: This redefines `Kernel#p` method, but not `Object#inspect`.
#
# = Examples
#
#   1: require "objspace/trace"
#   2:
#   3: obj = "str"
#   4:
#   5: p obj  #=> "str" @ test.rb:3

require 'objspace.so'

module Kernel
  remove_method :p
  define_method(:p) do |*objs|
    objs.each do |obj|
      file = ObjectSpace.allocation_sourcefile(obj)
      line = ObjectSpace.allocation_sourceline(obj)
      if file
        puts "#{ obj.inspect } @ #{ file }:#{ line }"
      else
        puts obj.inspect
      end
    end
  end
end

ObjectSpace.trace_object_allocations_start

warn "objspace/trace is enabled"
PK*J[�f�8��share/ruby/timeout.rbnu�[���# frozen_string_literal: true
# Timeout long-running blocks
#
# == Synopsis
#
#   require 'timeout'
#   status = Timeout.timeout(5) {
#     # Something that should be interrupted if it takes more than 5 seconds...
#   }
#
# == Description
#
# Timeout provides a way to auto-terminate a potentially long-running
# operation if it hasn't finished in a fixed amount of time.
#
# == Copyright
#
# Copyright:: (C) 2000  Network Applied Communication Laboratory, Inc.
# Copyright:: (C) 2000  Information-technology Promotion Agency, Japan

module Timeout
  # The version
  VERSION = "0.4.3"

  # Internal error raised to when a timeout is triggered.
  class ExitException < Exception
    def exception(*) # :nodoc:
      self
    end
  end

  # Raised by Timeout.timeout when the block times out.
  class Error < RuntimeError
    def self.handle_timeout(message) # :nodoc:
      exc = ExitException.new(message)

      begin
        yield exc
      rescue ExitException => e
        raise new(message) if exc.equal?(e)
        raise
      end
    end
  end

  # :stopdoc:
  CONDVAR = ConditionVariable.new
  QUEUE = Queue.new
  QUEUE_MUTEX = Mutex.new
  TIMEOUT_THREAD_MUTEX = Mutex.new
  @timeout_thread = nil
  private_constant :CONDVAR, :QUEUE, :QUEUE_MUTEX, :TIMEOUT_THREAD_MUTEX

  class Request
    attr_reader :deadline

    def initialize(thread, timeout, exception_class, message)
      @thread = thread
      @deadline = GET_TIME.call(Process::CLOCK_MONOTONIC) + timeout
      @exception_class = exception_class
      @message = message

      @mutex = Mutex.new
      @done = false # protected by @mutex
    end

    def done?
      @mutex.synchronize do
        @done
      end
    end

    def expired?(now)
      now >= @deadline
    end

    def interrupt
      @mutex.synchronize do
        unless @done
          @thread.raise @exception_class, @message
          @done = true
        end
      end
    end

    def finished
      @mutex.synchronize do
        @done = true
      end
    end
  end
  private_constant :Request

  def self.create_timeout_thread
    watcher = Thread.new do
      requests = []
      while true
        until QUEUE.empty? and !requests.empty? # wait to have at least one request
          req = QUEUE.pop
          requests << req unless req.done?
        end
        closest_deadline = requests.min_by(&:deadline).deadline

        now = 0.0
        QUEUE_MUTEX.synchronize do
          while (now = GET_TIME.call(Process::CLOCK_MONOTONIC)) < closest_deadline and QUEUE.empty?
            CONDVAR.wait(QUEUE_MUTEX, closest_deadline - now)
          end
        end

        requests.each do |req|
          req.interrupt if req.expired?(now)
        end
        requests.reject!(&:done?)
      end
    end
    ThreadGroup::Default.add(watcher) unless watcher.group.enclosed?
    watcher.name = "Timeout stdlib thread"
    watcher.thread_variable_set(:"\0__detached_thread__", true)
    watcher
  end
  private_class_method :create_timeout_thread

  def self.ensure_timeout_thread_created
    unless @timeout_thread and @timeout_thread.alive?
      TIMEOUT_THREAD_MUTEX.synchronize do
        unless @timeout_thread and @timeout_thread.alive?
          @timeout_thread = create_timeout_thread
        end
      end
    end
  end

  # We keep a private reference so that time mocking libraries won't break
  # Timeout.
  GET_TIME = Process.method(:clock_gettime)
  private_constant :GET_TIME

  # :startdoc:

  # Perform an operation in a block, raising an error if it takes longer than
  # +sec+ seconds to complete.
  #
  # +sec+:: Number of seconds to wait for the block to terminate. Any non-negative number
  #         or nil may be used, including Floats to specify fractional seconds. A
  #         value of 0 or +nil+ will execute the block without any timeout.
  #         Any negative number will raise an ArgumentError.
  # +klass+:: Exception Class to raise if the block fails to terminate
  #           in +sec+ seconds.  Omitting will use the default, Timeout::Error
  # +message+:: Error message to raise with Exception Class.
  #             Omitting will use the default, "execution expired"
  #
  # Returns the result of the block *if* the block completed before
  # +sec+ seconds, otherwise throws an exception, based on the value of +klass+.
  #
  # The exception thrown to terminate the given block cannot be rescued inside
  # the block unless +klass+ is given explicitly. However, the block can use
  # ensure to prevent the handling of the exception.  For that reason, this
  # method cannot be relied on to enforce timeouts for untrusted blocks.
  #
  # If a scheduler is defined, it will be used to handle the timeout by invoking
  # Scheduler#timeout_after.
  #
  # Note that this is both a method of module Timeout, so you can <tt>include
  # Timeout</tt> into your classes so they have a #timeout method, as well as
  # a module method, so you can call it directly as Timeout.timeout().
  def timeout(sec, klass = nil, message = nil, &block)   #:yield: +sec+
    return yield(sec) if sec == nil or sec.zero?
    raise ArgumentError, "Timeout sec must be a non-negative number" if 0 > sec

    message ||= "execution expired"

    if Fiber.respond_to?(:current_scheduler) && (scheduler = Fiber.current_scheduler)&.respond_to?(:timeout_after)
      return scheduler.timeout_after(sec, klass || Error, message, &block)
    end

    Timeout.ensure_timeout_thread_created
    perform = Proc.new do |exc|
      request = Request.new(Thread.current, sec, exc, message)
      QUEUE_MUTEX.synchronize do
        QUEUE << request
        CONDVAR.signal
      end
      begin
        return yield(sec)
      ensure
        request.finished
      end
    end

    if klass
      perform.call(klass)
    else
      Error.handle_timeout(message, &perform)
    end
  end
  module_function :timeout
end
PK*J[���jshare/ruby/yaml/dbm.rbnu�[���# frozen_string_literal: false
require 'yaml'

begin
  require 'dbm'
rescue LoadError
end

module YAML

# YAML + DBM = YDBM
#
# YAML::DBM provides the same interface as ::DBM.
#
# However, while DBM only allows strings for both keys and values,
# this library allows one to use most Ruby objects for values
# by first converting them to YAML. Keys must be strings.
#
# Conversion to and from YAML is performed automatically.
#
# See the documentation for ::DBM and ::YAML for more information.
class DBM < ::DBM

    # :call-seq:
    #   ydbm[key] -> value
    #
    # Return value associated with +key+ from database.
    #
    # Returns +nil+ if there is no such +key+.
    #
    # See #fetch for more information.
    def []( key )
        fetch( key )
    end

    # :call-seq:
    #   ydbm[key] = value
    #
    # Set +key+ to +value+ in database.
    #
    # +value+ will be converted to YAML before storage.
    #
    # See #store for more information.
    def []=( key, val )
        store( key, val )
    end

    # :call-seq:
    #   ydbm.fetch( key, ifnone = nil )
    #   ydbm.fetch( key ) { |key| ... }
    #
    # Return value associated with +key+.
    #
    # If there is no value for +key+ and no block is given, returns +ifnone+.
    #
    # Otherwise, calls block passing in the given +key+.
    #
    # See ::DBM#fetch for more information.
    def fetch( keystr, ifnone = nil )
        begin
            val = super( keystr )
            if String === val
                if YAML.respond_to?(:safe_load)
                    return YAML.safe_load( val )
                else
                    return YAML.load( val )
                end
            end
        rescue IndexError
        end
        if block_given?
            yield keystr
        else
            ifnone
        end
    end

    # Deprecated, used YAML::DBM#key instead.
    # ----
    # Note:
    # YAML::DBM#index makes warning from internal of ::DBM#index.
    # It says 'DBM#index is deprecated; use DBM#key', but DBM#key
    # behaves not same as DBM#index.
    #
    def index( keystr )
        super( keystr.to_yaml )
    end

    # :call-seq:
    #   ydbm.key(value) -> string
    #
    # Returns the key for the specified value.
    def key( keystr )
        invert[keystr]
    end

    # :call-seq:
    #   ydbm.values_at(*keys)
    #
    # Returns an array containing the values associated with the given keys.
    def values_at( *keys )
        keys.collect { |k| fetch( k ) }
    end

    # :call-seq:
    #   ydbm.delete(key)
    #
    # Deletes value from database associated with +key+.
    #
    # Returns value or +nil+.
    def delete( key )
        v = super( key )
        if String === v
            if YAML.respond_to?(:safe_load)
                v = YAML.safe_load( v )
            else
                v = YAML.load( v )
            end
        end
        v
    end

    # :call-seq:
    #   ydbm.delete_if { |key, value| ... }
    #
    # Calls the given block once for each +key+, +value+ pair in the database.
    # Deletes all entries for which the block returns true.
    #
    # Returns +self+.
    def delete_if # :yields: [key, value]
        del_keys = keys.dup
        del_keys.delete_if { |k| yield( k, fetch( k ) ) == false }
        del_keys.each { |k| delete( k ) }
        self
    end

    # :call-seq:
    #   ydbm.reject { |key, value| ... }
    #
    # Converts the contents of the database to an in-memory Hash, then calls
    # Hash#reject with the specified code block, returning a new Hash.
    def reject
        hsh = self.to_hash
        hsh.reject { |k,v| yield k, v }
    end

    # :call-seq:
    #   ydbm.each_pair { |key, value| ... }
    #
    # Calls the given block once for each +key+, +value+ pair in the database.
    #
    # Returns +self+.
    def each_pair # :yields: [key, value]
        keys.each { |k| yield k, fetch( k ) }
        self
    end

    # :call-seq:
    #   ydbm.each_value { |value| ... }
    #
    # Calls the given block for each value in database.
    #
    # Returns +self+.
    def each_value # :yields: value
        super { |v| yield YAML.respond_to?(:safe_load) ? YAML.safe_load( v ) : YAML.load( v ) }
        self
    end

    # :call-seq:
    #   ydbm.values
    #
    # Returns an array of values from the database.
    def values
        super.collect { |v| YAML.respond_to?(:safe_load) ? YAML.safe_load( v ) : YAML.load( v ) }
    end

    # :call-seq:
    #   ydbm.has_value?(value)
    #
    # Returns true if specified +value+ is found in the database.
    def has_value?( val )
        each_value { |v| return true if v == val }
        return false
    end

    # :call-seq:
    #   ydbm.invert -> hash
    #
    # Returns a Hash (not a DBM database) created by using each value in the
    # database as a key, with the corresponding key as its value.
    #
    # Note that all values in the hash will be Strings, but the keys will be
    # actual objects.
    def invert
        h = {}
        keys.each { |k| h[ self.fetch( k ) ] = k }
        h
    end

    # :call-seq:
    #   ydbm.replace(hash) -> ydbm
    #
    # Replaces the contents of the database with the contents of the specified
    # object. Takes any object which implements the each_pair method, including
    # Hash and DBM objects.
    def replace( hsh )
        clear
        update( hsh )
    end

    # :call-seq:
    #   ydbm.shift -> [key, value]
    #
    # Removes a [key, value] pair from the database, and returns it.
    # If the database is empty, returns +nil+.
    #
    # The order in which values are removed/returned is not guaranteed.
    def shift
        a = super
        if a
          a[1] = YAML.respond_to?(:safe_load) ? YAML.safe_load( a[1] ) : YAML.load( a[1] )
        end
        a
    end

    # :call-seq:
    #   ydbm.select { |key, value| ... }
    #   ydbm.select(*keys)
    #
    # If a block is provided, returns a new array containing [key, value] pairs
    # for which the block returns true.
    #
    # Otherwise, same as #values_at
    def select( *keys )
        if block_given?
            self.keys.collect { |k| v = self[k]; [k, v] if yield k, v }.compact
        else
            values_at( *keys )
        end
    end

    # :call-seq:
    #   ydbm.store(key, value) -> value
    #
    # Stores +value+ in database with +key+ as the index. +value+ is converted
    # to YAML before being stored.
    #
    # Returns +value+
    def store( key, val )
        super( key, val.to_yaml )
        val
    end

    # :call-seq:
    #   ydbm.update(hash) -> ydbm
    #
    # Updates the database with multiple values from the specified object.
    # Takes any object which implements the each_pair method, including
    # Hash and DBM objects.
    #
    # Returns +self+.
    def update( hsh )
        hsh.each_pair do |k,v|
            self.store( k, v )
        end
        self
    end

    # :call-seq:
    #   ydbm.to_a -> array
    #
    # Converts the contents of the database to an array of [key, value] arrays,
    # and returns it.
    def to_a
        a = []
        keys.each { |k| a.push [ k, self.fetch( k ) ] }
        a
    end


    # :call-seq:
    #   ydbm.to_hash -> hash
    #
    # Converts the contents of the database to an in-memory Hash object, and
    # returns it.
    def to_hash
        h = {}
        keys.each { |k| h[ k ] = self.fetch( k ) }
        h
    end

    alias :each :each_pair
end

end if defined?(DBM)
PK*J[��0�eeshare/ruby/yaml/store.rbnu�[���# frozen_string_literal: false
#
# YAML::Store
#
require 'yaml'

begin
  require 'pstore'
rescue LoadError
end

# YAML::Store provides the same functionality as PStore, except it uses YAML
# to dump objects instead of Marshal.
#
# == Example
#
#   require 'yaml/store'
#
#   Person = Struct.new :first_name, :last_name
#
#   people = [Person.new("Bob", "Smith"), Person.new("Mary", "Johnson")]
#
#   store = YAML::Store.new "test.store"
#
#   store.transaction do
#     store["people"] = people
#     store["greeting"] = { "hello" => "world" }
#   end
#
# After running the above code, the contents of "test.store" will be:
#
#   ---
#   people:
#   - !ruby/struct:Person
#     first_name: Bob
#     last_name: Smith
#   - !ruby/struct:Person
#     first_name: Mary
#     last_name: Johnson
#   greeting:
#     hello: world

class YAML::Store < PStore

  # :call-seq:
  #   initialize( file_name, yaml_opts = {} )
  #   initialize( file_name, thread_safe = false, yaml_opts = {} )
  #
  # Creates a new YAML::Store object, which will store data in +file_name+.
  # If the file does not already exist, it will be created.
  #
  # YAML::Store objects are always reentrant. But if _thread_safe_ is set to true,
  # then it will become thread-safe at the cost of a minor performance hit.
  #
  # Options passed in through +yaml_opts+ will be used when converting the
  # store to YAML via Hash#to_yaml().
  def initialize( *o )
    @opt = {}
    if o.last.is_a? Hash
      @opt.update(o.pop)
    end
    super(*o)
  end

  # :stopdoc:

  def dump(table)
    table.to_yaml(@opt)
  end

  def load(content)
    table =  if YAML.respond_to?(:safe_load)
      if Psych::VERSION >= "3.1"
        YAML.safe_load(content, permitted_classes: [Symbol])
      else
        YAML.safe_load(content, [Symbol])
      end
    else
      YAML.load(content)
    end
    if table == false || table == nil
      {}
    else
      table
    end
  end

  def marshal_dump_supports_canonical_option?
    false
  end

  def empty_marshal_data
    {}.to_yaml(@opt)
  end
  def empty_marshal_checksum
    CHECKSUM_ALGO.digest(empty_marshal_data)
  end
end if defined?(::PStore)
PK*J[|�O��share/ruby/readline.rbnu�[���begin
  require "readline.#{RbConfig::CONFIG["DLEXT"]}"
rescue LoadError
  require 'reline' unless defined? Reline
  Object.send(:remove_const, :Readline) if Object.const_defined?(:Readline)
  Readline = Reline
end
PK*J[b7��:�:share/ruby/fiddle/struct.rbnu�[���# frozen_string_literal: true
require 'fiddle'
require 'fiddle/value'
require 'fiddle/pack'

module Fiddle
  # A base class for objects representing a C structure
  class CStruct
    include Enumerable

    # accessor to Fiddle::CStructEntity
    def CStruct.entity_class
      CStructEntity
    end

    def self.offsetof(name, members, types) # :nodoc:
      offset = 0
      worklist = name.split('.')
      this_type = self
      while search_name = worklist.shift
        index = 0
        member_index = members.index(search_name)

        unless member_index
          # Possibly a sub-structure
          member_index = members.index { |member_name, _|
            member_name == search_name
          }
          return unless member_index
        end

        types.each { |type, count = 1|
          orig_offset = offset
          if type.respond_to?(:entity_class)
            align = type.alignment
            type_size = type.size
          else
            align = PackInfo::ALIGN_MAP[type]
            type_size = PackInfo::SIZE_MAP[type]
          end

          # Unions shouldn't advance the offset
          if this_type.entity_class == CUnionEntity
            type_size = 0
          end

          offset = PackInfo.align(orig_offset, align)

          if worklist.empty?
            return offset if index == member_index
          else
            if index == member_index
              subtype = types[member_index]
              members = subtype.members
              types = subtype.types
              this_type = subtype
              break
            end
          end

          offset += (type_size * count)
          index += 1
        }
      end
      nil
    end

    def each
      return enum_for(__function__) unless block_given?

      self.class.members.each do |name,|
        yield(self[name])
      end
    end

    def each_pair
      return enum_for(__function__) unless block_given?

      self.class.members.each do |name,|
        yield(name, self[name])
      end
    end

    def to_h
      hash = {}
      each_pair do |name, value|
        hash[name] = unstruct(value)
      end
      hash
    end

    def replace(another)
      if another.nil?
        self.class.members.each do |name,|
          self[name] = nil
        end
      elsif another.respond_to?(:each_pair)
        another.each_pair do |name, value|
          self[name] = value
        end
      else
        another.each do |name, value|
          self[name] = value
        end
      end
      self
    end

    private
    def unstruct(value)
      case value
      when CStruct
        value.to_h
      when Array
        value.collect do |v|
          unstruct(v)
        end
      else
        value
      end
    end
  end

  # A base class for objects representing a C union
  class CUnion
    # accessor to Fiddle::CUnionEntity
    def CUnion.entity_class
      CUnionEntity
    end

    def self.offsetof(name, members, types) # :nodoc:
      0
    end
  end

  # Wrapper for arrays within a struct
  class StructArray < Array
    include ValueUtil

    def initialize(ptr, type, initial_values)
      @ptr = ptr
      @type = type
      @is_struct = @type.respond_to?(:entity_class)
      if @is_struct
        super(initial_values)
      else
        @size = Fiddle::PackInfo::SIZE_MAP[type]
        @pack_format = Fiddle::PackInfo::PACK_MAP[type]
        super(initial_values.collect { |v| unsigned_value(v, type) })
      end
    end

    def to_ptr
      @ptr
    end

    def []=(index, value)
      if index < 0 || index >= size
        raise IndexError, 'index %d outside of array bounds 0...%d' % [index, size]
      end

      if @is_struct
        self[index].replace(value)
      else
        to_ptr[index * @size, @size] = [value].pack(@pack_format)
        super(index, value)
      end
    end
  end

  # Used to construct C classes (CUnion, CStruct, etc)
  #
  # Fiddle::Importer#struct and Fiddle::Importer#union wrap this functionality in an
  # easy-to-use manner.
  module CStructBuilder
    # Construct a new class given a C:
    # * class +klass+ (CUnion, CStruct, or other that provide an
    #   #entity_class)
    # * +types+ (Fiddle::TYPE_INT, Fiddle::TYPE_SIZE_T, etc., see the C types
    #   constants)
    # * corresponding +members+
    #
    # Fiddle::Importer#struct and Fiddle::Importer#union wrap this functionality in an
    # easy-to-use manner.
    #
    # Examples:
    #
    #   require 'fiddle/struct'
    #   require 'fiddle/cparser'
    #
    #   include Fiddle::CParser
    #
    #   types, members = parse_struct_signature(['int i','char c'])
    #
    #   MyStruct = Fiddle::CStructBuilder.create(Fiddle::CUnion, types, members)
    #
    #   MyStruct.malloc(Fiddle::RUBY_FREE) do |obj|
    #     ...
    #   end
    #
    #   obj = MyStruct.malloc(Fiddle::RUBY_FREE)
    #   begin
    #     ...
    #   ensure
    #     obj.call_free
    #   end
    #
    #   obj = MyStruct.malloc
    #   begin
    #     ...
    #   ensure
    #     Fiddle.free obj.to_ptr
    #   end
    #
    def create(klass, types, members)
      new_class = Class.new(klass){
        define_method(:initialize){|addr, func = nil|
          if addr.is_a?(self.class.entity_class)
            @entity = addr
          else
            @entity = self.class.entity_class.new(addr, types, func)
          end
          @entity.assign_names(members)
        }
        define_method(:[]) { |*args| @entity.send(:[], *args) }
        define_method(:[]=) { |*args| @entity.send(:[]=, *args) }
        define_method(:to_ptr){ @entity }
        define_method(:to_i){ @entity.to_i }
        define_singleton_method(:types) { types }
        define_singleton_method(:members) { members }

        # Return the offset of a struct member given its name.
        # For example:
        #
        #     MyStruct = struct [
        #       "int64_t i",
        #       "char c",
        #     ]
        #
        #     MyStruct.offsetof("i") # => 0
        #     MyStruct.offsetof("c") # => 8
        #
        define_singleton_method(:offsetof) { |name|
          klass.offsetof(name, members, types)
        }
        members.each{|name|
          name = name[0] if name.is_a?(Array) # name is a nested struct
          next if method_defined?(name)
          define_method(name){ @entity[name] }
          define_method(name + "="){|val| @entity[name] = val }
        }
        entity_class = klass.entity_class
        alignment = entity_class.alignment(types)
        size = entity_class.size(types)
        define_singleton_method(:alignment) { alignment }
        define_singleton_method(:size) { size }
        define_singleton_method(:malloc) do |func=nil, &block|
          if block
            entity_class.malloc(types, func, size) do |entity|
              block.call(new(entity))
            end
          else
            new(entity_class.malloc(types, func, size))
          end
        end
      }
      return new_class
    end
    module_function :create
  end

  # A pointer to a C structure
  class CStructEntity < Fiddle::Pointer
    include PackInfo
    include ValueUtil

    def CStructEntity.alignment(types)
      max = 1
      types.each do |type, count = 1|
        if type.respond_to?(:entity_class)
          n = type.alignment
        else
          n = ALIGN_MAP[type]
        end
        max = n if n > max
      end
      max
    end

    # Allocates a C struct with the +types+ provided.
    #
    # See Fiddle::Pointer.malloc for memory management issues.
    def CStructEntity.malloc(types, func = nil, size = size(types))
      if block_given? and func.nil?
        message = "a free function must be supplied to #{self}.malloc " +
                  "when it is called with a block"
        raise ArgumentError, message
      end

      pointer = Pointer.malloc(size)
      begin
        struct = new(pointer, types, func)
      rescue
        pointer.free = func
        pointer.call_free
        raise
      end
      if block_given?
        begin
          yield(struct)
        ensure
          struct.call_free
        end
      else
        struct
      end
    end

    # Returns the offset for the packed sizes for the given +types+.
    #
    #   Fiddle::CStructEntity.size(
    #     [ Fiddle::TYPE_DOUBLE,
    #       Fiddle::TYPE_INT,
    #       Fiddle::TYPE_CHAR,
    #       Fiddle::TYPE_VOIDP ]) #=> 24
    def CStructEntity.size(types)
      offset = 0

      max_align = types.map { |type, count = 1|
        last_offset = offset

        if type.respond_to?(:entity_class)
          align = type.alignment
          type_size = type.size
        else
          align = PackInfo::ALIGN_MAP[type]
          type_size = PackInfo::SIZE_MAP[type]
        end
        offset = PackInfo.align(last_offset, align) +
                 (type_size * count)

        align
      }.max

      PackInfo.align(offset, max_align)
    end

    # Wraps the C pointer +addr+ as a C struct with the given +types+.
    #
    # When the instance is garbage collected, the C function +func+ is called.
    #
    # See also Fiddle::Pointer.new
    def initialize(addr, types, func = nil)
      if func && addr.is_a?(Pointer) && addr.free
        raise ArgumentError, 'free function specified on both underlying struct Pointer and when creating a CStructEntity - who do you want to free this?'
      end
      set_ctypes(types)
      super(addr, @size, func)
    end

    # Set the names of the +members+ in this C struct
    def assign_names(members)
      @members = []
      @nested_structs = {}
      members.each_with_index do |member, index|
        if member.is_a?(Array) # nested struct
          member_name = member[0]
          struct_type, struct_count = @ctypes[index]
          if struct_count.nil?
            struct = struct_type.new(to_i + @offset[index])
          else
            structs = struct_count.times.map do |i|
              struct_type.new(to_i + @offset[index] + i * struct_type.size)
            end
            struct = StructArray.new(to_i + @offset[index],
                                     struct_type,
                                     structs)
          end
          @nested_structs[member_name] = struct
        else
          member_name = member
        end
        @members << member_name
      end
    end

    # Calculates the offsets and sizes for the given +types+ in the struct.
    def set_ctypes(types)
      @ctypes = types
      @offset = []
      offset = 0

      max_align = types.map { |type, count = 1|
        orig_offset = offset
        if type.respond_to?(:entity_class)
          align = type.alignment
          type_size = type.size
        else
          align = ALIGN_MAP[type]
          type_size = SIZE_MAP[type]
        end
        offset = PackInfo.align(orig_offset, align)

        @offset << offset

        offset += (type_size * count)

        align
      }.max

      @size = PackInfo.align(offset, max_align)
    end

    # Fetch struct member +name+ if only one argument is specified. If two
    # arguments are specified, the first is an offset and the second is a
    # length and this method returns the string of +length+ bytes beginning at
    # +offset+.
    #
    # Examples:
    #
    #     my_struct = struct(['int id']).malloc
    #     my_struct.id = 1
    #     my_struct['id'] # => 1
    #     my_struct[0, 4] # => "\x01\x00\x00\x00".b
    #
    def [](*args)
      return super(*args) if args.size > 1
      name = args[0]
      idx = @members.index(name)
      if( idx.nil? )
        raise(ArgumentError, "no such member: #{name}")
      end
      ty = @ctypes[idx]
      if( ty.is_a?(Array) )
        if ty.first.respond_to?(:entity_class)
          return @nested_structs[name]
        else
          r = super(@offset[idx], SIZE_MAP[ty[0]] * ty[1])
        end
      elsif ty.respond_to?(:entity_class)
        return @nested_structs[name]
      else
        r = super(@offset[idx], SIZE_MAP[ty.abs])
      end
      packer = Packer.new([ty])
      val = packer.unpack([r])
      case ty
      when Array
        case ty[0]
        when TYPE_VOIDP
          val = val.collect{|v| Pointer.new(v)}
        end
      when TYPE_VOIDP
        val = Pointer.new(val[0])
      else
        val = val[0]
      end
      if( ty.is_a?(Integer) && (ty < 0) )
        return unsigned_value(val, ty)
      elsif( ty.is_a?(Array) && (ty[0] < 0) )
        return StructArray.new(self + @offset[idx], ty[0], val)
      else
        return val
      end
    end

    # Set struct member +name+, to value +val+. If more arguments are
    # specified, writes the string of bytes to the memory at the given
    # +offset+ and +length+.
    #
    # Examples:
    #
    #     my_struct = struct(['int id']).malloc
    #     my_struct['id'] = 1
    #     my_struct[0, 4] = "\x01\x00\x00\x00".b
    #     my_struct.id # => 1
    #
    def []=(*args)
      return super(*args) if args.size > 2
      name, val = *args
      name = name.to_s if name.is_a?(Symbol)
      nested_struct = @nested_structs[name]
      if nested_struct
        if nested_struct.is_a?(StructArray)
          if val.nil?
            nested_struct.each do |s|
              s.replace(nil)
            end
          else
            val.each_with_index do |v, i|
              nested_struct[i] = v
            end
          end
        else
          nested_struct.replace(val)
        end
        return val
      end
      idx = @members.index(name)
      if( idx.nil? )
        raise(ArgumentError, "no such member: #{name}")
      end
      ty  = @ctypes[idx]
      packer = Packer.new([ty])
      val = wrap_arg(val, ty, [])
      buff = packer.pack([val].flatten())
      super(@offset[idx], buff.size, buff)
      if( ty.is_a?(Integer) && (ty < 0) )
        return unsigned_value(val, ty)
      elsif( ty.is_a?(Array) && (ty[0] < 0) )
        return val.collect{|v| unsigned_value(v,ty[0])}
      else
        return val
      end
    end

    undef_method :size=
    def to_s() # :nodoc:
      super(@size)
    end

    def +(delta)
      Pointer.new(to_i + delta, @size - delta)
    end

    def -(delta)
      Pointer.new(to_i - delta, @size + delta)
    end
  end

  # A pointer to a C union
  class CUnionEntity < CStructEntity
    include PackInfo

    # Returns the size needed for the union with the given +types+.
    #
    #   Fiddle::CUnionEntity.size(
    #     [ Fiddle::TYPE_DOUBLE,
    #       Fiddle::TYPE_INT,
    #       Fiddle::TYPE_CHAR,
    #       Fiddle::TYPE_VOIDP ]) #=> 8
    def CUnionEntity.size(types)
      types.map { |type, count = 1|
        if type.respond_to?(:entity_class)
          type.size * count
        else
          PackInfo::SIZE_MAP[type] * count
        end
      }.max
    end

    # Calculate the necessary offset and for each union member with the given
    # +types+
    def set_ctypes(types)
      @ctypes = types
      @offset = Array.new(types.length, 0)
      @size   = self.class.size types
    end
  end
end
PK*J[w�share/ruby/fiddle/function.rbnu�[���# frozen_string_literal: true
module Fiddle
  class Function
    # The ABI of the Function.
    attr_reader :abi

    # The address of this function
    attr_reader :ptr

    # The name of this function
    attr_reader :name

    # Whether GVL is needed to call this function
    def need_gvl?
      @need_gvl
    end

    # The integer memory location of this function
    def to_i
      ptr.to_i
    end

    # Turn this function in to a proc
    def to_proc
      this = self
      lambda { |*args| this.call(*args) }
    end
  end
end
PK*J[�����share/ruby/fiddle/types.rbnu�[���# frozen_string_literal: true
module Fiddle
  # Adds Windows type aliases to the including class for use with
  # Fiddle::Importer.
  #
  # The aliases added are:
  # * ATOM
  # * BOOL
  # * BYTE
  # * DWORD
  # * DWORD32
  # * DWORD64
  # * HANDLE
  # * HDC
  # * HINSTANCE
  # * HWND
  # * LPCSTR
  # * LPSTR
  # * PBYTE
  # * PDWORD
  # * PHANDLE
  # * PVOID
  # * PWORD
  # * UCHAR
  # * UINT
  # * ULONG
  # * WORD
  module Win32Types
    def included(m) # :nodoc:
      # https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
      m.module_eval{
        typealias "ATOM", "WORD"
        typealias "BOOL", "int"
        typealias "BYTE", "unsigned char"
        typealias "DWORD", "unsigned long"
        typealias "DWORD32", "uint32_t"
        typealias "DWORD64", "uint64_t"
        typealias "HANDLE", "PVOID"
        typealias "HDC", "HANDLE"
        typealias "HINSTANCE", "HANDLE"
        typealias "HWND", "HANDLE"
        typealias "LPCSTR", "const char *"
        typealias "LPSTR", "char *"
        typealias "PBYTE", "BYTE *"
        typealias "PDWORD", "DWORD *"
        typealias "PHANDLE", "HANDLE *"
        typealias "PVOID", "void *"
        typealias "PWORD", "WORD *"
        typealias "UCHAR", "unsigned char"
        typealias "UINT", "unsigned int"
        typealias "ULONG", "unsigned long"
        typealias "WORD", "unsigned short"
      }
    end
    module_function :included
  end

  # Adds basic type aliases to the including class for use with Fiddle::Importer.
  #
  # The aliases added are +uint+ and +u_int+ (<tt>unsigned int</tt>) and
  # +ulong+ and +u_long+ (<tt>unsigned long</tt>)
  module BasicTypes
    def included(m) # :nodoc:
      m.module_eval{
        typealias "uint", "unsigned int"
        typealias "u_int", "unsigned int"
        typealias "ulong", "unsigned long"
        typealias "u_long", "unsigned long"
      }
    end
    module_function :included
  end
end
PK*J[�Б�;;share/ruby/fiddle/pack.rbnu�[���# frozen_string_literal: true
require 'fiddle'

module Fiddle
  module PackInfo # :nodoc: all
    ALIGN_MAP = {
      TYPE_VOIDP => ALIGN_VOIDP,
      TYPE_CHAR  => ALIGN_CHAR,
      TYPE_SHORT => ALIGN_SHORT,
      TYPE_INT   => ALIGN_INT,
      TYPE_LONG  => ALIGN_LONG,
      TYPE_FLOAT => ALIGN_FLOAT,
      TYPE_DOUBLE => ALIGN_DOUBLE,
      TYPE_UCHAR  => ALIGN_CHAR,
      TYPE_USHORT => ALIGN_SHORT,
      TYPE_UINT   => ALIGN_INT,
      TYPE_ULONG  => ALIGN_LONG,
      TYPE_BOOL   => ALIGN_BOOL,
    }

    PACK_MAP = {
      TYPE_VOIDP => "L!",
      TYPE_CHAR  => "c",
      TYPE_SHORT => "s!",
      TYPE_INT   => "i!",
      TYPE_LONG  => "l!",
      TYPE_FLOAT => "f",
      TYPE_DOUBLE => "d",
      TYPE_UCHAR  => "C",
      TYPE_USHORT => "S!",
      TYPE_UINT   => "I!",
      TYPE_ULONG  => "L!",
    }
    case SIZEOF_BOOL
    when SIZEOF_CHAR
      PACK_MAP[TYPE_BOOL] = PACK_MAP[TYPE_UCHAR]
    when SIZEOF_SHORT
      PACK_MAP[TYPE_BOOL] = PACK_MAP[TYPE_USHORT]
    when SIZEOF_INT
      PACK_MAP[TYPE_BOOL] = PACK_MAP[TYPE_UINT]
    when SIZEOF_LONG
      PACK_MAP[TYPE_BOOL] = PACK_MAP[TYPE_ULONG]
    end
    if RUBY_ENGINE == "jruby" and WINDOWS and [0].pack("l!").size == 8
      # JRuby's 'l!' pack string doesn't use 32-bit on Windows.
      # See https://github.com/jruby/jruby/issues/8357 for details
      PACK_MAP[TYPE_LONG] = PACK_MAP[TYPE_INT]
      PACK_MAP[TYPE_ULONG] = PACK_MAP[TYPE_UINT]
    end

    SIZE_MAP = {
      TYPE_VOIDP => SIZEOF_VOIDP,
      TYPE_CHAR  => SIZEOF_CHAR,
      TYPE_SHORT => SIZEOF_SHORT,
      TYPE_INT   => SIZEOF_INT,
      TYPE_LONG  => SIZEOF_LONG,
      TYPE_FLOAT => SIZEOF_FLOAT,
      TYPE_DOUBLE => SIZEOF_DOUBLE,
      TYPE_UCHAR  => SIZEOF_CHAR,
      TYPE_USHORT => SIZEOF_SHORT,
      TYPE_UINT   => SIZEOF_INT,
      TYPE_ULONG  => SIZEOF_LONG,
      TYPE_BOOL   => SIZEOF_BOOL,
    }
    if defined?(TYPE_LONG_LONG)
      ALIGN_MAP[TYPE_LONG_LONG] = ALIGN_MAP[TYPE_ULONG_LONG] = ALIGN_LONG_LONG
      PACK_MAP[TYPE_LONG_LONG] = "q"
      PACK_MAP[TYPE_ULONG_LONG] = "Q"
      SIZE_MAP[TYPE_LONG_LONG] = SIZE_MAP[TYPE_ULONG_LONG] = SIZEOF_LONG_LONG
      PACK_MAP[TYPE_VOIDP] = "Q" if SIZEOF_LONG_LONG == SIZEOF_VOIDP
    end

    def align(addr, align)
      d = addr % align
      if( d == 0 )
        addr
      else
        addr + (align - d)
      end
    end
    module_function :align
  end

  class Packer # :nodoc: all
    include PackInfo

    def self.[](*types)
      new(types)
    end

    def initialize(types)
      parse_types(types)
    end

    def size()
      @size
    end

    def pack(ary)
      case SIZEOF_VOIDP
      when SIZEOF_LONG
        ary.pack(@template)
      else
        if defined?(TYPE_LONG_LONG) and
          SIZEOF_VOIDP == SIZEOF_LONG_LONG
          ary.pack(@template)
        else
          raise(RuntimeError, "sizeof(void*)?")
        end
      end
    end

    def unpack(ary)
      case SIZEOF_VOIDP
      when SIZEOF_LONG
        ary.join().unpack(@template)
      else
        if defined?(TYPE_LONG_LONG) and
          SIZEOF_VOIDP == SIZEOF_LONG_LONG
          ary.join().unpack(@template)
        else
          raise(RuntimeError, "sizeof(void*)?")
        end
      end
    end

    private

    def parse_types(types)
      @template = "".dup
      addr     = 0
      types.each{|t|
        orig_addr = addr
        if( t.is_a?(Array) )
          addr = align(orig_addr, ALIGN_MAP[TYPE_VOIDP])
        else
          addr = align(orig_addr, ALIGN_MAP[t])
        end
        d = addr - orig_addr
        if( d > 0 )
          @template << "x#{d}"
        end
        if( t.is_a?(Array) )
          @template << (PACK_MAP[t[0]] * t[1])
          addr += (SIZE_MAP[t[0]] * t[1])
        else
          @template << PACK_MAP[t]
          addr += SIZE_MAP[t]
        end
      }
      addr = align(addr, ALIGN_MAP[TYPE_VOIDP])
      @size = addr
    end
  end
end
PK*J[~��^C^C share/ruby/fiddle/ffi_backend.rbnu�[���# This is based on JRuby's FFI-based fiddle implementation.

require 'ffi'

module Fiddle
  def self.malloc(size)
    Fiddle::Pointer.malloc(size)
  end

  def self.free(ptr)
    Fiddle::Pointer::LibC::FREE.call(ptr)
    nil
  end

  def self.dlwrap(val)
    Pointer.to_ptr(val)
  end

  module Types
    VOID         = 0
    VOIDP        = 1
    CHAR         = 2
    UCHAR        = -CHAR
    SHORT        = 3
    USHORT       = -SHORT
    INT          = 4
    UINT         = -INT
    LONG         = 5
    ULONG        = -LONG
    LONG_LONG    = 6
    ULONG_LONG   = -LONG_LONG
    FLOAT        = 7
    DOUBLE       = 8
    VARIADIC     = 9
    CONST_STRING = 10
    BOOL         = 11
    INT8_T       = CHAR
    UINT8_T      = UCHAR
    if FFI::Type::Builtin::SHORT.size == 2
      INT16_T    = SHORT
      UINT16_T   = USHORT
    elsif FFI::Type::Builtin::INT.size == 2
      INT16_T    = INT
      UINT16_T   = UINT
    end
    if FFI::Type::Builtin::SHORT.size == 4
      INT32_T    = SHORT
      UINT32_T   = USHORT
    elsif FFI::Type::Builtin::INT.size == 4
      INT32_T    = INT
      UINT32_T   = UINT
    elsif FFI::Type::Builtin::LONG.size == 4
      INT32_T    = LONG
      UINT32_T   = ULONG
    end
    if FFI::Type::Builtin::INT.size == 8
      INT64_T    = INT
      UINT64_T   = UINT
    elsif FFI::Type::Builtin::LONG.size == 8
      INT64_T    = LONG
      UINT64_T   = ULONG
    else
      INT64_T    = LONG_LONG
      UINT64_T   = ULONG_LONG
    end

    # FIXME: platform specific values
    SSIZE_T      = INT64_T
    SIZE_T       = -SSIZE_T
    PTRDIFF_T    = SSIZE_T
    INTPTR_T     = INT64_T
    UINTPTR_T    = -INTPTR_T
  end

  WINDOWS = FFI::Platform.windows?

  module FFIBackend
    FFITypes = {
        'c' => FFI::Type::INT8,
        'h' => FFI::Type::INT16,
        'i' => FFI::Type::INT32,
        'l' => FFI::Type::LONG,
        'f' => FFI::Type::FLOAT32,
        'd' => FFI::Type::FLOAT64,
        'p' => FFI::Type::POINTER,
        's' => FFI::Type::STRING,

        Types::VOID => FFI::Type::Builtin::VOID,
        Types::VOIDP => FFI::Type::Builtin::POINTER,
        Types::CHAR => FFI::Type::Builtin::CHAR,
        Types::UCHAR => FFI::Type::Builtin::UCHAR,
        Types::SHORT => FFI::Type::Builtin::SHORT,
        Types::USHORT => FFI::Type::Builtin::USHORT,
        Types::INT => FFI::Type::Builtin::INT,
        Types::UINT => FFI::Type::Builtin::UINT,
        Types::LONG => FFI::Type::Builtin::LONG,
        Types::ULONG => FFI::Type::Builtin::ULONG,
        Types::LONG_LONG => FFI::Type::Builtin::LONG_LONG,
        Types::ULONG_LONG => FFI::Type::Builtin::ULONG_LONG,
        Types::FLOAT => FFI::Type::Builtin::FLOAT,
        Types::DOUBLE => FFI::Type::Builtin::DOUBLE,
        Types::BOOL => FFI::Type::Builtin::BOOL,
        Types::CONST_STRING => FFI::Type::Builtin::POINTER,
        Types::VARIADIC => FFI::Type::Builtin::VARARGS,
    }

    def self.to_ffi_type(fiddle_type)
      if fiddle_type.is_a?(Symbol)
        fiddle_type = Types.const_get(fiddle_type.to_s.upcase)
      end
      if !fiddle_type.is_a?(Integer) && fiddle_type.respond_to?(:to_int)
        fiddle_type = fiddle_type.to_int
      end
      ffi_type = FFITypes[fiddle_type]
      ffi_type = FFITypes[-fiddle_type] if ffi_type.nil? && fiddle_type.is_a?(Integer) && fiddle_type < 0
      raise TypeError.new("cannot convert #{fiddle_type} to ffi") unless ffi_type
      ffi_type
    end
  end

  class Function
    DEFAULT = "default"
    STDCALL = "stdcall"

    def initialize(ptr, args, return_type, abi = DEFAULT, kwargs = nil)
      if kwargs.nil?
        if abi.kind_of? Hash
          kwargs = abi
          abi = DEFAULT
        end
      end
      @name = kwargs[:name] if kwargs.kind_of? Hash
      @ptr, @args, @return_type, @abi = ptr, args, return_type, abi
      raise TypeError.new "invalid argument types" unless args.is_a?(Array)

      ffi_return_type = Fiddle::FFIBackend.to_ffi_type(@return_type)
      ffi_args = @args.map { |t| Fiddle::FFIBackend.to_ffi_type(t) }
      pointer = FFI::Pointer.new(ptr.to_i)
      options = {convention: @abi}
      if ffi_args.last == FFI::Type::Builtin::VARARGS
        @function = FFI::VariadicInvoker.new(
          pointer,
          ffi_args,
          ffi_return_type,
          options
        )
      else
        @function = FFI::Function.new(ffi_return_type, ffi_args, pointer, options)
      end
    end

    def call(*args, &block)
      if @function.is_a?(FFI::VariadicInvoker)
        n_fixed_args = @args.size - 1
        n_fixed_args.step(args.size - 1, 2) do |i|
          if args[i] == :const_string || args[i] == Types::CONST_STRING
            args[i + 1] = String.try_convert(args[i + 1]) || args[i + 1]
          end
          args[i] = Fiddle::FFIBackend.to_ffi_type(args[i])
        end
      else
        @args.each_with_index do |arg_type, i|
          next unless arg_type == Types::VOIDP

          src = args[i]
          next if src.nil?
          next if src.is_a?(String)
          next if src.is_a?(FFI::AbstractMemory)
          next if src.is_a?(FFI::Struct)

          args[i] = Pointer[src]
        end
      end
      result = @function.call(*args, &block)
      result = Pointer.new(result) if result.is_a?(FFI::Pointer)
      result
    end
  end

  class Closure
    def initialize(ret, args, abi = Function::DEFAULT)
      raise TypeError.new "invalid argument types" unless args.is_a?(Array)

      @ctype, @args = ret, args
      ffi_args = @args.map { |t| Fiddle::FFIBackend.to_ffi_type(t) }
      if ffi_args.size == 1 && ffi_args[0] == FFI::Type::Builtin::VOID
        ffi_args = []
      end
      return_type = Fiddle::FFIBackend.to_ffi_type(@ctype)
      raise "#{self.class} must implement #call" unless respond_to?(:call)
      callable = method(:call)
      @function = FFI::Function.new(return_type, ffi_args, callable, convention: abi)
      @freed = false
    end

    def to_ptr
      @function
    end

    def to_i
      @function.to_i
    end

    def free
      return if @freed
      @function.free
      @freed = true
    end

    def freed?
      @freed
    end
  end

  class Error < StandardError; end
  class DLError < Error; end
  class ClearedReferenceError < Error; end

  class Pointer
    attr_reader :ffi_ptr
    extend FFI::DataConverter
    native_type FFI::Type::Builtin::POINTER

    def self.to_native(value, ctx)
      if value.is_a?(Pointer)
        value.ffi_ptr

      elsif value.is_a?(Integer)
        FFI::Pointer.new(value)

      elsif value.is_a?(String)
        value
      end
    end

    def self.from_native(value, ctx)
      self.new(value)
    end

    def self.to_ptr(value)
      if value.is_a?(String)
        cptr = Pointer.malloc(value.bytesize)
        cptr.ffi_ptr.put_string(0, value)
        cptr

      elsif value.is_a?(Array)
        raise NotImplementedError, "array ptr"

      elsif value.respond_to?(:to_ptr)
        ptr = value.to_ptr
        case ptr
        when Pointer
          ptr
        when FFI::Pointer
          Pointer.new(ptr)
        else
          raise DLError.new("to_ptr should return a Fiddle::Pointer object, was #{ptr.class}")
        end

      else
        Pointer.new(value)
      end
    end

    def self.write(addr, bytes)
      FFI::Pointer.new(addr).write_bytes(bytes)
    end

    def self.read(addr, len)
      FFI::Pointer.new(addr).read_bytes(len)
    end

    class << self
      alias [] to_ptr
    end

    def []=(*args, value)
      if args.size == 2
        if value.is_a?(Integer)
          value = self.class.new(value)
        end
        if value.is_a?(Fiddle::Pointer)
          value = value.to_str(args[1])
        end

        @ffi_ptr.put_bytes(args[0], value, 0, args[1])
      elsif args.size == 1
        if value.is_a?(Fiddle::Pointer)
          value = value.to_str(args[0] + 1)
        else
          value = value.chr
        end

        @ffi_ptr.put_bytes(args[0], value, 0, 1)
      end
    rescue FFI::NullPointerError
      raise DLError.new("NULL pointer access")
    end

    def initialize(addr, size = nil, free = nil)
      ptr = if addr.is_a?(FFI::Pointer)
              addr

            elsif addr.is_a?(Integer)
              FFI::Pointer.new(addr)

            elsif addr.respond_to?(:to_ptr)
              fiddle_ptr = addr.to_ptr
              if fiddle_ptr.is_a?(Pointer)
                fiddle_ptr.ffi_ptr
              elsif fiddle_ptr.is_a?(FFI::AutoPointer)
                addr.ffi_ptr
              elsif fiddle_ptr.is_a?(FFI::Pointer)
                fiddle_ptr
              else
                raise DLError.new("to_ptr should return a Fiddle::Pointer object, was #{fiddle_ptr.class}")
              end
            elsif addr.is_a?(IO)
              raise NotImplementedError, "IO ptr isn't supported"
            else
              FFI::Pointer.new(Integer(addr))
            end

      @size = size ? size : ptr.size
      @free = free
      @ffi_ptr = ptr
      @freed = false
    end

    module LibC
      extend FFI::Library
      ffi_lib FFI::Library::LIBC
      MALLOC = attach_function :malloc, [ :size_t ], :pointer
      REALLOC = attach_function :realloc, [ :pointer, :size_t ], :pointer
      FREE = attach_function :free, [ :pointer ], :void
    end

    def self.malloc(size, free = nil)
      if block_given? and free.nil?
        message = "a free function must be supplied to #{self}.malloc " +
                  "when it is called with a block"
        raise ArgumentError, message
      end

      pointer = new(LibC.malloc(size), size, free)
      if block_given?
        begin
          yield(pointer)
        ensure
          pointer.call_free
        end
      else
        pointer
      end
    end

    def null?
      @ffi_ptr.null?
    end

    def to_ptr
      @ffi_ptr
    end

    def size
      defined?(@layout) ? @layout.size : @size
    end

    def free
      @free
    end

    def free=(free)
      @free = free
    end

    def call_free
      return if @free.nil?
      return if @freed
      if @free == RUBY_FREE
        LibC::FREE.call(@ffi_ptr)
      else
        @free.call(@ffi_ptr)
      end
      @freed = true
    end

    def freed?
      @freed
    end

    def size=(size)
      @size = size
    end

    def [](index, length = nil)
      if length
        ffi_ptr.get_bytes(index, length)
      else
        ffi_ptr.get_char(index)
      end
    rescue FFI::NullPointerError
      raise DLError.new("NULL pointer dereference")
    end

    def to_i
      ffi_ptr.to_i
    end
    alias to_int to_i

    # without \0
    def to_s(len = nil)
      if len
        ffi_ptr.get_string(0, len)
      else
        ffi_ptr.get_string(0)
      end
    rescue FFI::NullPointerError
      raise DLError.new("NULL pointer access")
    end

    def to_str(len = nil)
      if len
        ffi_ptr.read_string(len)
      else
        ffi_ptr.read_string(@size)
      end
    rescue FFI::NullPointerError
      raise DLError.new("NULL pointer access")
    end

    def to_value
      raise NotImplementedError, "to_value isn't supported"
    end

    def inspect
      "#<#{self.class.name} ptr=#{to_i.to_s(16)} size=#{@size} free=#{@free.inspect}>"
    end

    def +(delta)
      self.class.new(to_i + delta, @size - delta)
    end

    def -(delta)
      self.class.new(to_i - delta, @size + delta)
    end

    def <=>(other)
      return unless other.is_a?(Pointer)
      diff = self.to_i - other.to_i
      return 0 if diff == 0
      diff > 0 ? 1 : -1
    end

    def eql?(other)
      return unless other.is_a?(Pointer)
      self.to_i == other.to_i
    end

    def ==(other)
      eql?(other)
    end

    def ptr
      Pointer.new(ffi_ptr.get_pointer(0))
    end

    def +@
      ptr
    end

    def -@
      ref
    end

    def ref
      cptr = Pointer.malloc(FFI::Type::POINTER.size, RUBY_FREE)
      cptr.ffi_ptr.put_pointer(0, ffi_ptr)
      cptr
    end
  end

  class Handle
    RTLD_GLOBAL = FFI::DynamicLibrary::RTLD_GLOBAL
    RTLD_LAZY = FFI::DynamicLibrary::RTLD_LAZY
    RTLD_NOW = FFI::DynamicLibrary::RTLD_NOW

    def initialize(libname = nil, flags = RTLD_LAZY | RTLD_GLOBAL)
      begin
        @lib = FFI::DynamicLibrary.open(libname, flags)
      rescue LoadError, RuntimeError # LoadError for JRuby, RuntimeError for TruffleRuby
        raise DLError, "Could not open #{libname}"
      end

      @open = true

      begin
        yield(self)
      ensure
        self.close
      end if block_given?
    end

    def close
      raise DLError.new("closed handle") unless @open
      @open = false
      0
    end

    def self.sym(func)
      DEFAULT.sym(func)
    end

    def sym(func)
      raise TypeError.new("invalid function name") unless func.is_a?(String)
      raise DLError.new("closed handle") unless @open
      address = @lib.find_function(func)
      raise DLError.new("unknown symbol #{func}") if address.nil? || address.null?
      address.to_i
    end

    def self.sym_defined?(func)
      DEFAULT.sym_defined?(func)
    end

    def sym_defined?(func)
      raise TypeError.new("invalid function name") unless func.is_a?(String)
      raise DLError.new("closed handle") unless @open
      address = @lib.find_function(func)
      !address.nil? && !address.null?
    end

    def self.[](func)
      self.sym(func)
    end

    def [](func)
      sym(func)
    end

    def enable_close
      @enable_close = true
    end

    def close_enabled?
      @enable_close
    end

    def disable_close
      @enable_close = false
    end

    DEFAULT = new
  end

  class Pinned
    def initialize(object)
      @object = object
    end

    def ref
      if @object.nil?
        raise ClearedReferenceError, "`ref` called on a cleared object"
      end
      @object
    end

    def clear
      @object = nil
    end

    def cleared?
      @object.nil?
    end
  end

  RUBY_FREE = Fiddle::Pointer::LibC::FREE.address
  NULL = Fiddle::Pointer.new(0)

  ALIGN_VOIDP       = Fiddle::FFIBackend::FFITypes[Types::VOIDP].alignment
  ALIGN_CHAR        = Fiddle::FFIBackend::FFITypes[Types::CHAR].alignment
  ALIGN_SHORT       = Fiddle::FFIBackend::FFITypes[Types::SHORT].alignment
  ALIGN_INT         = Fiddle::FFIBackend::FFITypes[Types::INT].alignment
  ALIGN_LONG        = Fiddle::FFIBackend::FFITypes[Types::LONG].alignment
  ALIGN_LONG_LONG   = Fiddle::FFIBackend::FFITypes[Types::LONG_LONG].alignment
  ALIGN_INT8_T      = Fiddle::FFIBackend::FFITypes[Types::INT8_T].alignment
  ALIGN_INT16_T     = Fiddle::FFIBackend::FFITypes[Types::INT16_T].alignment
  ALIGN_INT32_T     = Fiddle::FFIBackend::FFITypes[Types::INT32_T].alignment
  ALIGN_INT64_T     = Fiddle::FFIBackend::FFITypes[Types::INT64_T].alignment
  ALIGN_FLOAT       = Fiddle::FFIBackend::FFITypes[Types::FLOAT].alignment
  ALIGN_DOUBLE      = Fiddle::FFIBackend::FFITypes[Types::DOUBLE].alignment
  ALIGN_BOOL        = Fiddle::FFIBackend::FFITypes[Types::BOOL].alignment
  ALIGN_SIZE_T      = Fiddle::FFIBackend::FFITypes[Types::SIZE_T].alignment
  ALIGN_SSIZE_T     = ALIGN_SIZE_T
  ALIGN_PTRDIFF_T   = Fiddle::FFIBackend::FFITypes[Types::PTRDIFF_T].alignment
  ALIGN_INTPTR_T    = Fiddle::FFIBackend::FFITypes[Types::INTPTR_T].alignment
  ALIGN_UINTPTR_T   = Fiddle::FFIBackend::FFITypes[Types::UINTPTR_T].alignment

  SIZEOF_VOIDP       = Fiddle::FFIBackend::FFITypes[Types::VOIDP].size
  SIZEOF_CHAR        = Fiddle::FFIBackend::FFITypes[Types::CHAR].size
  SIZEOF_UCHAR       = Fiddle::FFIBackend::FFITypes[Types::UCHAR].size
  SIZEOF_SHORT       = Fiddle::FFIBackend::FFITypes[Types::SHORT].size
  SIZEOF_USHORT      = Fiddle::FFIBackend::FFITypes[Types::USHORT].size
  SIZEOF_INT         = Fiddle::FFIBackend::FFITypes[Types::INT].size
  SIZEOF_UINT        = Fiddle::FFIBackend::FFITypes[Types::UINT].size
  SIZEOF_LONG        = Fiddle::FFIBackend::FFITypes[Types::LONG].size
  SIZEOF_ULONG       = Fiddle::FFIBackend::FFITypes[Types::ULONG].size
  SIZEOF_LONG_LONG   = Fiddle::FFIBackend::FFITypes[Types::LONG_LONG].size
  SIZEOF_ULONG_LONG  = Fiddle::FFIBackend::FFITypes[Types::ULONG_LONG].size
  SIZEOF_INT8_T      = Fiddle::FFIBackend::FFITypes[Types::INT8_T].size
  SIZEOF_UINT8_T     = Fiddle::FFIBackend::FFITypes[Types::UINT8_T].size
  SIZEOF_INT16_T     = Fiddle::FFIBackend::FFITypes[Types::INT16_T].size
  SIZEOF_UINT16_T    = Fiddle::FFIBackend::FFITypes[Types::UINT16_T].size
  SIZEOF_INT32_T     = Fiddle::FFIBackend::FFITypes[Types::INT32_T].size
  SIZEOF_UINT32_T    = Fiddle::FFIBackend::FFITypes[Types::UINT32_T].size
  SIZEOF_INT64_T     = Fiddle::FFIBackend::FFITypes[Types::INT64_T].size
  SIZEOF_UINT64_T    = Fiddle::FFIBackend::FFITypes[Types::UINT64_T].size
  SIZEOF_FLOAT       = Fiddle::FFIBackend::FFITypes[Types::FLOAT].size
  SIZEOF_DOUBLE      = Fiddle::FFIBackend::FFITypes[Types::DOUBLE].size
  SIZEOF_BOOL        = Fiddle::FFIBackend::FFITypes[Types::BOOL].size
  SIZEOF_SIZE_T      = Fiddle::FFIBackend::FFITypes[Types::SIZE_T].size
  SIZEOF_SSIZE_T     = SIZEOF_SIZE_T
  SIZEOF_PTRDIFF_T   = Fiddle::FFIBackend::FFITypes[Types::PTRDIFF_T].size
  SIZEOF_INTPTR_T    = Fiddle::FFIBackend::FFITypes[Types::INTPTR_T].size
  SIZEOF_UINTPTR_T   = Fiddle::FFIBackend::FFITypes[Types::UINTPTR_T].size
  SIZEOF_CONST_STRING = Fiddle::FFIBackend::FFITypes[Types::VOIDP].size
end
PK*J[ӳ�&&share/ruby/fiddle/version.rbnu�[���module Fiddle
  VERSION = "1.1.6"
end
PK*J[�_���share/ruby/fiddle/closure.rbnu�[���# frozen_string_literal: true
module Fiddle
  class Closure
    class << self
      # Create a new closure. If a block is given, the created closure
      # is automatically freed after the given block is executed.
      #
      # The all given arguments are passed to Fiddle::Closure.new. So
      # using this method without block equals to Fiddle::Closure.new.
      #
      # == Example
      #
      #   Fiddle::Closure.create(TYPE_INT, [TYPE_INT]) do |closure|
      #     # closure is freed automatically when this block is finished.
      #   end
      def create(*args)
        if block_given?
          closure = new(*args)
          begin
            yield(closure)
          ensure
            closure.free
          end
        else
          new(*args)
        end
      end
    end

    # the C type of the return of the FFI closure
    attr_reader :ctype

    # arguments of the FFI closure
    attr_reader :args

    # Extends Fiddle::Closure to allow for building the closure in a block
    class BlockCaller < Fiddle::Closure

      # == Description
      #
      # Construct a new BlockCaller object.
      #
      # * +ctype+ is the C type to be returned
      # * +args+ are passed the callback
      # * +abi+ is the abi of the closure
      #
      # If there is an error in preparing the +ffi_cif+ or +ffi_prep_closure+,
      # then a RuntimeError will be raised.
      #
      # == Example
      #
      #   include Fiddle
      #
      #   cb = Closure::BlockCaller.new(TYPE_INT, [TYPE_INT]) do |one|
      #     one
      #   end
      #
      #   func = Function.new(cb, [TYPE_INT], TYPE_INT)
      #
      def initialize ctype, args, abi = Fiddle::Function::DEFAULT, &block
        super(ctype, args, abi)
        @block = block
      end

      # Calls the constructed BlockCaller, with +args+
      #
      # For an example see Fiddle::Closure::BlockCaller.new
      #
      def call *args
        @block.call(*args)
      end
    end
  end
end
PK*J[xE�%%share/ruby/fiddle/cparser.rbnu�[���# frozen_string_literal: true
module Fiddle
  # A mixin that provides methods for parsing C struct and prototype signatures.
  #
  # == Example
  #   require 'fiddle/import'
  #
  #   include Fiddle::CParser
  #     #=> Object
  #
  #   parse_ctype('int')
  #     #=> Fiddle::TYPE_INT
  #
  #   parse_struct_signature(['int i', 'char c'])
  #     #=> [[Fiddle::TYPE_INT, Fiddle::TYPE_CHAR], ["i", "c"]]
  #
  #   parse_signature('double sum(double, double)')
  #     #=> ["sum", Fiddle::TYPE_DOUBLE, [Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE]]
  #
  module CParser
    # Parses a C struct's members
    #
    # Example:
    #   require 'fiddle/import'
    #
    #   include Fiddle::CParser
    #     #=> Object
    #
    #   parse_struct_signature(['int i', 'char c'])
    #     #=> [[Fiddle::TYPE_INT, Fiddle::TYPE_CHAR], ["i", "c"]]
    #
    #   parse_struct_signature(['char buffer[80]'])
    #     #=> [[[Fiddle::TYPE_CHAR, 80]], ["buffer"]]
    #
    def parse_struct_signature(signature, tymap=nil)
      if signature.is_a?(String)
        signature = split_arguments(signature, /[,;]/)
      elsif signature.is_a?(Hash)
        signature = [signature]
      end
      mems = []
      tys  = []
      signature.each{|msig|
        msig = compact(msig) if msig.is_a?(String)
        case msig
        when Hash
          msig.each do |struct_name, struct_signature|
            struct_name = struct_name.to_s if struct_name.is_a?(Symbol)
            struct_name = compact(struct_name)
            struct_count = nil
            if struct_name =~ /^([\w\*\s]+)\[(\d+)\]$/
              struct_count = $2.to_i
              struct_name = $1
            end
            if struct_signature.respond_to?(:entity_class)
              struct_type = struct_signature
            else
              parsed_struct = parse_struct_signature(struct_signature, tymap)
              struct_type = CStructBuilder.create(CStruct, *parsed_struct)
            end
            if struct_count
              ty = [struct_type, struct_count]
            else
              ty = struct_type
            end
            mems.push([struct_name, struct_type.members])
            tys.push(ty)
          end
        when /^[\w\*\s]+[\*\s](\w+)$/
          mems.push($1)
          tys.push(parse_ctype(msig, tymap))
        when /^[\w\*\s]+\(\*(\w+)\)\(.*?\)$/
          mems.push($1)
          tys.push(parse_ctype(msig, tymap))
        when /^([\w\*\s]+[\*\s])(\w+)\[(\d+)\]$/
          mems.push($2)
          tys.push([parse_ctype($1.strip, tymap), $3.to_i])
        when /^([\w\*\s]+)\[(\d+)\](\w+)$/
          mems.push($3)
          tys.push([parse_ctype($1.strip, tymap), $2.to_i])
        else
          raise(RuntimeError,"can't parse the struct member: #{msig}")
        end
      }
      return tys, mems
    end

    # Parses a C prototype signature
    #
    # If Hash +tymap+ is provided, the return value and the arguments from the
    # +signature+ are expected to be keys, and the value will be the C type to
    # be looked up.
    #
    # Example:
    #   require 'fiddle/import'
    #
    #   include Fiddle::CParser
    #     #=> Object
    #
    #   parse_signature('double sum(double, double)')
    #     #=> ["sum", Fiddle::TYPE_DOUBLE, [Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE]]
    #
    #   parse_signature('void update(void (*cb)(int code))')
    #     #=> ["update", Fiddle::TYPE_VOID, [Fiddle::TYPE_VOIDP]]
    #
    #   parse_signature('char (*getbuffer(void))[80]')
    #     #=> ["getbuffer", Fiddle::TYPE_VOIDP, []]
    #
    def parse_signature(signature, tymap=nil)
      tymap ||= {}
      case compact(signature)
      when /^(?:[\w\*\s]+)\(\*(\w+)\((.*?)\)\)(?:\[\w*\]|\(.*?\));?$/
        func, args = $1, $2
        return [func, TYPE_VOIDP, split_arguments(args).collect {|arg| parse_ctype(arg, tymap)}]
      when /^([\w\*\s]+[\*\s])(\w+)\((.*?)\);?$/
        ret, func, args = $1.strip, $2, $3
        return [func, parse_ctype(ret, tymap), split_arguments(args).collect {|arg| parse_ctype(arg, tymap)}]
      else
        raise(RuntimeError,"can't parse the function prototype: #{signature}")
      end
    end

    # Given a String of C type +ty+, returns the corresponding Fiddle constant.
    #
    # +ty+ can also accept an Array of C type Strings, and will be returned in
    # a corresponding Array.
    #
    # If Hash +tymap+ is provided, +ty+ is expected to be the key, and the
    # value will be the C type to be looked up.
    #
    # Example:
    #   require 'fiddle/import'
    #
    #   include Fiddle::CParser
    #     #=> Object
    #
    #   parse_ctype('int')
    #     #=> Fiddle::TYPE_INT
    #
    #   parse_ctype('double diff')
    #     #=> Fiddle::TYPE_DOUBLE
    #
    #   parse_ctype('unsigned char byte')
    #     #=> -Fiddle::TYPE_CHAR
    #
    #   parse_ctype('const char* const argv[]')
    #     #=> -Fiddle::TYPE_VOIDP
    #
    def parse_ctype(ty, tymap=nil)
      tymap ||= {}
      if ty.is_a?(Array)
        return [parse_ctype(ty[0], tymap), ty[1]]
      end
      ty = ty.gsub(/\Aconst\s+/, "")
      case ty
      when 'void'
        return TYPE_VOID
      when /\A(?:(?:signed\s+)?long\s+long(?:\s+int\s+)?|int64_t)(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_LONG_LONG)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_LONG_LONG
      when /\A(?:unsigned\s+long\s+long(?:\s+int\s+)?|uint64_t)(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_LONG_LONG)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_ULONG_LONG
      when /\Aunsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?\z/,
           /\Aunsigned\s+int\s+long(?:\s+\w+)?\z/,
           /\Along(?:\s+int)?\s+unsigned(?:\s+\w+)?\z/,
           /\Aint\s+unsigned\s+long(?:\s+\w+)?\z/,
           /\A(?:int\s+)?long\s+unsigned(?:\s+\w+)?\z/
        return TYPE_ULONG
      when /\A(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?\z/,
           /\A(?:signed\s+)?int\s+long(?:\s+\w+)?\z/,
           /\Along(?:\s+int)?\s+signed(?:\s+\w+)?\z/
        return TYPE_LONG
      when /\Aunsigned\s+short(?:\s+int\s+)?(?:\s+\w+)?\z/,
           /\Aunsigned\s+int\s+short(?:\s+\w+)?\z/,
           /\Ashort(?:\s+int)?\s+unsigned(?:\s+\w+)?\z/,
           /\Aint\s+unsigned\s+short(?:\s+\w+)?\z/,
           /\A(?:int\s+)?short\s+unsigned(?:\s+\w+)?\z/
        return TYPE_USHORT
      when /\A(?:signed\s+)?short(?:\s+int\s+)?(?:\s+\w+)?\z/,
           /\A(?:signed\s+)?int\s+short(?:\s+\w+)?\z/,
           /\Aint\s+(?:signed\s+)?short(?:\s+\w+)?\z/
        return TYPE_SHORT
      when /\A(?:signed\s+)?int(?:\s+\w+)?\z/
        return TYPE_INT
      when /\A(?:unsigned\s+int|uint)(?:\s+\w+)?\z/
        return TYPE_UINT
      when /\A(?:signed\s+)?char(?:\s+\w+)?\z/
        return TYPE_CHAR
      when /\Aunsigned\s+char(?:\s+\w+)?\z/
        return  TYPE_UCHAR
      when /\Aint8_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT8_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_INT8_T
      when /\Auint8_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT8_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_UINT8_T
      when /\Aint16_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT16_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_INT16_T
      when /\Auint16_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT16_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_UINT16_T
      when /\Aint32_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT32_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_INT32_T
      when /\Auint32_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT32_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_UINT32_T
      when /\Aint64_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT64_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_INT64_T
      when /\Auint64_t(?:\s+\w+)?\z/
        unless Fiddle.const_defined?(:TYPE_INT64_T)
          raise(RuntimeError, "unsupported type: #{ty}")
        end
        return TYPE_UINT64_T
      when /\Afloat(?:\s+\w+)?\z/
        return TYPE_FLOAT
      when /\Adouble(?:\s+\w+)?\z/
        return TYPE_DOUBLE
      when /\Asize_t(?:\s+\w+)?\z/
        return TYPE_SIZE_T
      when /\Assize_t(?:\s+\w+)?\z/
        return TYPE_SSIZE_T
      when /\Aptrdiff_t(?:\s+\w+)?\z/
        return TYPE_PTRDIFF_T
      when /\Aintptr_t(?:\s+\w+)?\z/
        return TYPE_INTPTR_T
      when /\Auintptr_t(?:\s+\w+)?\z/
        return TYPE_UINTPTR_T
      when "bool"
        return TYPE_BOOL
      when /\*/, /\[[\s\d]*\]/
        return TYPE_VOIDP
      when "..."
        return TYPE_VARIADIC
      else
        ty = ty.split(' ', 2)[0]
        if( tymap[ty] )
          return parse_ctype(tymap[ty], tymap)
        else
          raise(DLError, "unknown type: #{ty}")
        end
      end
    end

    private

    def split_arguments(arguments, sep=',')
      return [] if arguments.strip == 'void'
      arguments.scan(/([\w\*\s]+\(\*\w*\)\(.*?\)|[\w\*\s\[\]]+|\.\.\.)(?:#{sep}\s*|\z)/).collect {|m| m[0]}
    end

    def compact(signature)
      signature.gsub(/\s+/, ' ').gsub(/\s*([\(\)\[\]\*,;])\s*/, '\1').strip
    end

  end
end
PK*J[r�W�<<share/ruby/fiddle/value.rbnu�[���# frozen_string_literal: true
require 'fiddle'

module Fiddle
  module ValueUtil #:nodoc: all
    def unsigned_value(val, ty)
      case ty.abs
      when TYPE_CHAR
        [val].pack("c").unpack1("C")
      when TYPE_SHORT
        [val].pack("s!").unpack1("S!")
      when TYPE_INT
        [val].pack("i!").unpack1("I!")
      when TYPE_LONG
        [val].pack("l!").unpack1("L!")
      else
        if defined?(TYPE_LONG_LONG) and
          ty.abs == TYPE_LONG_LONG
          [val].pack("q").unpack1("Q")
        else
          val
        end
      end
    end

    def signed_value(val, ty)
      case ty.abs
      when TYPE_CHAR
        [val].pack("C").unpack1("c")
      when TYPE_SHORT
        [val].pack("S!").unpack1("s!")
      when TYPE_INT
        [val].pack("I!").unpack1("i!")
      when TYPE_LONG
        [val].pack("L!").unpack1("l!")
      else
        if defined?(TYPE_LONG_LONG) and
          ty.abs == TYPE_LONG_LONG
          [val].pack("Q").unpack1("q")
        else
          val
        end
      end
    end

    def wrap_args(args, tys, funcs, &block)
      result = []
      tys ||= []
      args.each_with_index{|arg, idx|
        result.push(wrap_arg(arg, tys[idx], funcs, &block))
      }
      result
    end

    def wrap_arg(arg, ty, funcs = [], &block)
      funcs ||= []
      case arg
      when nil
        return 0
      when Pointer
        return arg.to_i
      when IO
        case ty
        when TYPE_VOIDP
          return Pointer[arg].to_i
        else
          return arg.to_i
        end
      when Function
        if( block )
          arg.bind_at_call(&block)
          funcs.push(arg)
        elsif !arg.bound?
          raise(RuntimeError, "block must be given.")
        end
        return arg.to_i
      when String
        if( ty.is_a?(Array) )
          return arg.unpack('C*')
        else
          case SIZEOF_VOIDP
          when SIZEOF_LONG
            return [arg].pack("p").unpack1("l!")
          else
            if defined?(SIZEOF_LONG_LONG) and
              SIZEOF_VOIDP == SIZEOF_LONG_LONG
              return [arg].pack("p").unpack1("q")
            else
              raise(RuntimeError, "sizeof(void*)?")
            end
          end
        end
      when Float, Integer
        return arg
      when Array
        if( ty.is_a?(Array) ) # used only by struct
          case ty[0]
          when TYPE_VOIDP
            return arg.collect{|v| Integer(v)}
          when TYPE_CHAR
            if( arg.is_a?(String) )
              return val.unpack('C*')
            end
          end
        end
        return arg
      else
        if( arg.respond_to?(:to_ptr) )
          return arg.to_ptr.to_i
        else
          begin
            return Integer(arg)
          rescue
            raise(ArgumentError, "unknown argument type: #{arg.class}")
          end
        end
      end
    end
  end
end
PK*J[taeP#P#share/ruby/fiddle/import.rbnu�[���# frozen_string_literal: true
require 'fiddle'
require 'fiddle/struct'
require 'fiddle/cparser'

module Fiddle

  # Used internally by Fiddle::Importer
  class CompositeHandler
    # Create a new handler with the open +handlers+
    #
    # Used internally by Fiddle::Importer.dlload
    def initialize(handlers)
      @handlers = handlers
    end

    # Array of the currently loaded libraries.
    def handlers()
      @handlers
    end

    # Returns the address as an Integer from any handlers with the function
    # named +symbol+.
    #
    # Raises a DLError if the handle is closed.
    def sym(symbol)
      @handlers.each{|handle|
        if( handle )
          begin
            addr = handle.sym(symbol)
            return addr
          rescue DLError
          end
        end
      }
      return nil
    end

    # See Fiddle::CompositeHandler.sym
    def [](symbol)
      sym(symbol)
    end
  end

  # A DSL that provides the means to dynamically load libraries and build
  # modules around them including calling extern functions within the C
  # library that has been loaded.
  #
  # == Example
  #
  #   require 'fiddle'
  #   require 'fiddle/import'
  #
  #   module LibSum
  #   	extend Fiddle::Importer
  #   	dlload './libsum.so'
  #   	extern 'double sum(double*, int)'
  #   	extern 'double split(double)'
  #   end
  #
  module Importer
    include Fiddle
    include CParser
    extend Importer

    attr_reader :type_alias
    private :type_alias

    # Creates an array of handlers for the given +libs+, can be an instance of
    # Fiddle::Handle, Fiddle::Importer, or will create a new instance of
    # Fiddle::Handle using Fiddle.dlopen
    #
    # Raises a DLError if the library cannot be loaded.
    #
    # See Fiddle.dlopen
    def dlload(*libs)
      handles = libs.collect{|lib|
        case lib
        when nil
          nil
        when Handle
          lib
        when Importer
          lib.handlers
        else
          Fiddle.dlopen(lib)
        end
      }.flatten()
      @handler = CompositeHandler.new(handles)
      @func_map = {}
      @type_alias = {}
    end

    # Sets the type alias for +alias_type+ as +orig_type+
    def typealias(alias_type, orig_type)
      @type_alias[alias_type] = orig_type
    end

    # Returns the sizeof +ty+, using Fiddle::Importer.parse_ctype to determine
    # the C type and the appropriate Fiddle constant.
    def sizeof(ty)
      case ty
      when String
        ty = parse_ctype(ty, type_alias).abs()
        case ty
        when TYPE_CHAR
          return SIZEOF_CHAR
        when TYPE_SHORT
          return SIZEOF_SHORT
        when TYPE_INT
          return SIZEOF_INT
        when TYPE_LONG
          return SIZEOF_LONG
        when TYPE_FLOAT
          return SIZEOF_FLOAT
        when TYPE_DOUBLE
          return SIZEOF_DOUBLE
        when TYPE_VOIDP
          return SIZEOF_VOIDP
        when TYPE_CONST_STRING
          return SIZEOF_CONST_STRING
        when TYPE_BOOL
          return SIZEOF_BOOL
        else
          if defined?(TYPE_LONG_LONG) and
            ty == TYPE_LONG_LONG
            return SIZEOF_LONG_LONG
          else
            raise(DLError, "unknown type: #{ty}")
          end
        end
      when Class
        if( ty.instance_methods().include?(:to_ptr) )
          return ty.size()
        end
      end
      return Pointer[ty].size()
    end

    def parse_bind_options(opts)
      h = {}
      while( opt = opts.shift() )
        case opt
        when :stdcall, :cdecl
          h[:call_type] = opt
        when :carried, :temp, :temporal, :bind
          h[:callback_type] = opt
          h[:carrier] = opts.shift()
        else
          h[opt] = true
        end
      end
      h
    end
    private :parse_bind_options

    # :stopdoc:
    CALL_TYPE_TO_ABI = Hash.new { |h, k|
      raise RuntimeError, "unsupported call type: #{k}"
    }.merge({ :stdcall => Function.const_defined?(:STDCALL) ? Function::STDCALL :
                          Function::DEFAULT,
              :cdecl   => Function::DEFAULT,
              nil      => Function::DEFAULT
            }).freeze
    private_constant :CALL_TYPE_TO_ABI
    # :startdoc:

    # Creates a global method from the given C +signature+.
    def extern(signature, *opts)
      symname, ctype, argtype = parse_signature(signature, type_alias)
      opt = parse_bind_options(opts)
      f = import_function(symname, ctype, argtype, opt[:call_type])
      name = symname.gsub(/@.+/,'')
      @func_map[name] = f
      # define_method(name){|*args,&block| f.call(*args,&block)}
      begin
        /^(.+?):(\d+)/ =~ caller.first
        file, line = $1, $2.to_i
      rescue
        file, line = __FILE__, __LINE__+3
      end
      module_eval(<<-EOS, file, line)
        def #{name}(*args, &block)
          @func_map['#{name}'].call(*args,&block)
        end
      EOS
      module_function(name)
      f
    end

    # Creates a global method from the given C +signature+ using the given
    # +opts+ as bind parameters with the given block.
    def bind(signature, *opts, &blk)
      name, ctype, argtype = parse_signature(signature, type_alias)
      h = parse_bind_options(opts)
      case h[:callback_type]
      when :bind, nil
        f = bind_function(name, ctype, argtype, h[:call_type], &blk)
      else
        raise(RuntimeError, "unknown callback type: #{h[:callback_type]}")
      end
      @func_map[name] = f
      #define_method(name){|*args,&block| f.call(*args,&block)}
      begin
        /^(.+?):(\d+)/ =~ caller.first
        file, line = $1, $2.to_i
      rescue
        file, line = __FILE__, __LINE__+3
      end
      module_eval(<<-EOS, file, line)
        def #{name}(*args,&block)
          @func_map['#{name}'].call(*args,&block)
        end
      EOS
      module_function(name)
      f
    end

    # Creates a class to wrap the C struct described by +signature+.
    #
    #   MyStruct = struct ['int i', 'char c']
    def struct(signature)
      tys, mems = parse_struct_signature(signature, type_alias)
      Fiddle::CStructBuilder.create(CStruct, tys, mems)
    end

    # Creates a class to wrap the C union described by +signature+.
    #
    #   MyUnion = union ['int i', 'char c']
    def union(signature)
      tys, mems = parse_struct_signature(signature, type_alias)
      Fiddle::CStructBuilder.create(CUnion, tys, mems)
    end

    # Returns the function mapped to +name+, that was created by either
    # Fiddle::Importer.extern or Fiddle::Importer.bind
    def [](name)
      @func_map[name]
    end

    # Creates a class to wrap the C struct with the value +ty+
    #
    # See also Fiddle::Importer.struct
    def create_value(ty, val=nil)
      s = struct([ty + " value"])
      ptr = s.malloc()
      if( val )
        ptr.value = val
      end
      return ptr
    end
    alias value create_value

    # Returns a new instance of the C struct with the value +ty+ at the +addr+
    # address.
    def import_value(ty, addr)
      s = struct([ty + " value"])
      ptr = s.new(addr)
      return ptr
    end


    # The Fiddle::CompositeHandler instance
    #
    # Will raise an error if no handlers are open.
    def handler
      (@handler ||= nil) or raise "call dlload before importing symbols and functions"
    end

    # Returns a new Fiddle::Pointer instance at the memory address of the given
    # +name+ symbol.
    #
    # Raises a DLError if the +name+ doesn't exist.
    #
    # See Fiddle::CompositeHandler.sym and Fiddle::Handle.sym
    def import_symbol(name)
      addr = handler.sym(name)
      if( !addr )
        raise(DLError, "cannot find the symbol: #{name}")
      end
      Pointer.new(addr)
    end

    # Returns a new Fiddle::Function instance at the memory address of the given
    # +name+ function.
    #
    # Raises a DLError if the +name+ doesn't exist.
    #
    # * +argtype+ is an Array of arguments, passed to the +name+ function.
    # * +ctype+ is the return type of the function
    # * +call_type+ is the ABI of the function
    #
    # See also Fiddle:Function.new
    #
    # See Fiddle::CompositeHandler.sym and Fiddle::Handler.sym
    def import_function(name, ctype, argtype, call_type = nil)
      addr = handler.sym(name)
      if( !addr )
        raise(DLError, "cannot find the function: #{name}()")
      end
      Function.new(addr, argtype, ctype, CALL_TYPE_TO_ABI[call_type],
                   name: name)
    end

    # Returns a new closure wrapper for the +name+ function.
    #
    # * +ctype+ is the return type of the function
    # * +argtype+ is an Array of arguments, passed to the callback function
    # * +call_type+ is the abi of the closure
    # * +block+ is passed to the callback
    #
    # See Fiddle::Closure
    def bind_function(name, ctype, argtype, call_type = nil, &block)
      abi = CALL_TYPE_TO_ABI[call_type]
      closure = Class.new(Fiddle::Closure) {
        define_method(:call, block)
      }.new(ctype, argtype, abi)

      Function.new(closure, argtype, ctype, abi, name: name)
    end
  end
end
PK*J[ڮ�R��share/ruby/ripper/core.rbnu�[���# frozen_string_literal: true
#
# $Id$
#
# Copyright (c) 2003-2005 Minero Aoki
#
# This program is free software.
# You can distribute and/or modify this program under the Ruby License.
# For details of Ruby License, see ruby/COPYING.
#

require 'ripper.so'

class Ripper

  # Parses the given Ruby program read from +src+.
  # +src+ must be a String or an IO or a object with a #gets method.
  def Ripper.parse(src, filename = '(ripper)', lineno = 1)
    new(src, filename, lineno).parse
  end

  # This array contains name of parser events.
  PARSER_EVENTS = PARSER_EVENT_TABLE.keys

  # This array contains name of scanner events.
  SCANNER_EVENTS = SCANNER_EVENT_TABLE.keys

  # This array contains name of all ripper events.
  EVENTS = PARSER_EVENTS + SCANNER_EVENTS

  private

  # :stopdoc:
  def _dispatch_0() nil end
  def _dispatch_1(a) a end
  def _dispatch_2(a, b) a end
  def _dispatch_3(a, b, c) a end
  def _dispatch_4(a, b, c, d) a end
  def _dispatch_5(a, b, c, d, e) a end
  def _dispatch_6(a, b, c, d, e, f) a end
  def _dispatch_7(a, b, c, d, e, f, g) a end
  # :startdoc:

  #
  # Parser Events
  #

  PARSER_EVENT_TABLE.each do |id, arity|
    alias_method "on_#{id}", "_dispatch_#{arity}"
  end

  # This method is called when weak warning is produced by the parser.
  # +fmt+ and +args+ is printf style.
  def warn(fmt, *args)
  end

  # This method is called when strong warning is produced by the parser.
  # +fmt+ and +args+ is printf style.
  def warning(fmt, *args)
  end

  # This method is called when the parser found syntax error.
  def compile_error(msg)
  end

  #
  # Scanner Events
  #

  SCANNER_EVENTS.each do |id|
    alias_method "on_#{id}", :_dispatch_1
  end

end
PK*J[��Cppshare/ruby/ripper/filter.rbnu�[���# frozen_string_literal: true
#
# $Id$
#
# Copyright (c) 2004,2005 Minero Aoki
#
# This program is free software.
# You can distribute and/or modify this program under the Ruby License.
# For details of Ruby License, see ruby/COPYING.
#

require 'ripper/lexer'

class Ripper

  # This class handles only scanner events,
  # which are dispatched in the 'right' order (same with input).
  class Filter

    # Creates a new Ripper::Filter instance, passes parameters +src+,
    # +filename+, and +lineno+ to Ripper::Lexer.new
    #
    # The lexer is for internal use only.
    def initialize(src, filename = '-', lineno = 1)
      @__lexer = Lexer.new(src, filename, lineno)
      @__line = nil
      @__col = nil
      @__state = nil
    end

    # The file name of the input.
    def filename
      @__lexer.filename
    end

    # The line number of the current token.
    # This value starts from 1.
    # This method is valid only in event handlers.
    def lineno
      @__line
    end

    # The column number of the current token.
    # This value starts from 0.
    # This method is valid only in event handlers.
    def column
      @__col
    end

    # The scanner's state of the current token.
    # This value is the bitwise OR of zero or more of the +Ripper::EXPR_*+ constants.
    def state
      @__state
    end

    # Starts the parser.
    # +init+ is a data accumulator and is passed to the next event handler (as
    # of Enumerable#inject).
    def parse(init = nil)
      data = init
      @__lexer.lex.each do |pos, event, tok, state|
        @__line, @__col = *pos
        @__state = state
        data = if respond_to?(event, true)
               then __send__(event, tok, data)
               else on_default(event, tok, data)
               end
      end
      data
    end

    private

    # This method is called when some event handler is undefined.
    # +event+ is :on_XXX, +token+ is the scanned token, and +data+ is a data
    # accumulator.
    #
    # The return value of this method is passed to the next event handler (as
    # of Enumerable#inject).
    def on_default(event, token, data)
      data
    end

  end

end
PK*J[ty��&�&share/ruby/ripper/lexer.rbnu�[���# frozen_string_literal: true
#
# $Id$
#
# Copyright (c) 2004,2005 Minero Aoki
#
# This program is free software.
# You can distribute and/or modify this program under the Ruby License.
# For details of Ruby License, see ruby/COPYING.
#

require 'ripper/core'

class Ripper

  # Tokenizes the Ruby program and returns an array of strings.
  # The +filename+ and +lineno+ arguments are mostly ignored, since the
  # return value is just the tokenized input.
  # By default, this method does not handle syntax errors in +src+,
  # use the +raise_errors+ keyword to raise a SyntaxError for an error in +src+.
  #
  #   p Ripper.tokenize("def m(a) nil end")
  #      # => ["def", " ", "m", "(", "a", ")", " ", "nil", " ", "end"]
  #
  def Ripper.tokenize(src, filename = '-', lineno = 1, **kw)
    Lexer.new(src, filename, lineno).tokenize(**kw)
  end

  # Tokenizes the Ruby program and returns an array of an array,
  # which is formatted like
  # <code>[[lineno, column], type, token, state]</code>.
  # The +filename+ argument is mostly ignored.
  # By default, this method does not handle syntax errors in +src+,
  # use the +raise_errors+ keyword to raise a SyntaxError for an error in +src+.
  #
  #   require 'ripper'
  #   require 'pp'
  #
  #   pp Ripper.lex("def m(a) nil end")
  #   #=> [[[1,  0], :on_kw,     "def", FNAME    ],
  #        [[1,  3], :on_sp,     " ",   FNAME    ],
  #        [[1,  4], :on_ident,  "m",   ENDFN    ],
  #        [[1,  5], :on_lparen, "(",   BEG|LABEL],
  #        [[1,  6], :on_ident,  "a",   ARG      ],
  #        [[1,  7], :on_rparen, ")",   ENDFN    ],
  #        [[1,  8], :on_sp,     " ",   BEG      ],
  #        [[1,  9], :on_kw,     "nil", END      ],
  #        [[1, 12], :on_sp,     " ",   END      ],
  #        [[1, 13], :on_kw,     "end", END      ]]
  #
  def Ripper.lex(src, filename = '-', lineno = 1, **kw)
    Lexer.new(src, filename, lineno).lex(**kw)
  end

  class Lexer < ::Ripper   #:nodoc: internal use only
    # :stopdoc:
    class State
      attr_reader :to_int, :to_s

      def initialize(i)
        @to_int = i
        @to_s = Ripper.lex_state_name(i)
        freeze
      end

      def [](index)
        case index
        when 0, :to_int
          @to_int
        when 1, :to_s
          @event
        else
          nil
        end
      end

      alias to_i to_int
      alias inspect to_s
      def pretty_print(q) q.text(to_s) end
      def ==(i) super or to_int == i end
      def &(i) self.class.new(to_int & i) end
      def |(i) self.class.new(to_int | i) end
      def allbits?(i) to_int.allbits?(i) end
      def anybits?(i) to_int.anybits?(i) end
      def nobits?(i) to_int.nobits?(i) end
    end

    class Elem
      attr_accessor :pos, :event, :tok, :state, :message

      def initialize(pos, event, tok, state, message = nil)
        @pos = pos
        @event = event
        @tok = tok
        @state = State.new(state)
        @message = message
      end

      def [](index)
        case index
        when 0, :pos
          @pos
        when 1, :event
          @event
        when 2, :tok
          @tok
        when 3, :state
          @state
        when 4, :message
          @message
        else
          nil
        end
      end

      def inspect
        "#<#{self.class}: #{event}@#{pos[0]}:#{pos[1]}:#{state}: #{tok.inspect}#{": " if message}#{message}>"
      end

      alias to_s inspect

      def pretty_print(q)
        q.group(2, "#<#{self.class}:", ">") {
          q.breakable
          q.text("#{event}@#{pos[0]}:#{pos[1]}")
          q.breakable
          state.pretty_print(q)
          q.breakable
          q.text("token: ")
          tok.pretty_print(q)
          if message
            q.breakable
            q.text("message: ")
            q.text(message)
          end
        }
      end

      def to_a
        if @message
          [@pos, @event, @tok, @state, @message]
        else
          [@pos, @event, @tok, @state]
        end
      end
    end

    attr_reader :errors

    def tokenize(**kw)
      parse(**kw).sort_by(&:pos).map(&:tok)
    end

    def lex(**kw)
      parse(**kw).sort_by(&:pos).map(&:to_a)
    end

    # parse the code and returns elements including errors.
    def scan(**kw)
      result = (parse(**kw) + errors + @stack.flatten).uniq.sort_by {|e| [*e.pos, (e.message ? -1 : 0)]}
      result.each_with_index do |e, i|
        if e.event == :on_parse_error and e.tok.empty? and (pre = result[i-1]) and
          pre.pos[0] == e.pos[0] and (pre.pos[1] + pre.tok.size) == e.pos[1]
          e.tok = pre.tok
          e.pos[1] = pre.pos[1]
          result[i-1] = e
          result[i] = pre
        end
      end
      result
    end

    def parse(raise_errors: false)
      @errors = []
      @buf = []
      @stack = []
      super()
      @buf = @stack.pop unless @stack.empty?
      if raise_errors and !@errors.empty?
        raise SyntaxError, @errors.map(&:message).join(' ;')
      end
      @buf.flatten!
      unless (result = @buf).empty?
        result.concat(@buf) until (@buf = []; super(); @buf.flatten!; @buf.empty?)
      end
      result
    end

    private

    unless SCANNER_EVENT_TABLE.key?(:ignored_sp)
      SCANNER_EVENT_TABLE[:ignored_sp] = 1
      SCANNER_EVENTS << :ignored_sp
      EVENTS << :ignored_sp
    end

    def on_heredoc_dedent(v, w)
      ignored_sp = []
      heredoc = @buf.last
      if Array === heredoc
        heredoc.each_with_index do |e, i|
          if Elem === e and e.event == :on_tstring_content and e.pos[1].zero?
            tok = e.tok.dup if w > 0 and /\A\s/ =~ e.tok
            if (n = dedent_string(e.tok, w)) > 0
              if e.tok.empty?
                e.tok = tok[0, n]
                e.event = :on_ignored_sp
                next
              end
              ignored_sp << [i, Elem.new(e.pos.dup, :on_ignored_sp, tok[0, n], e.state)]
              e.pos[1] += n
            end
          end
        end
      end
      ignored_sp.reverse_each do |i, e|
        heredoc[i, 0] = [e]
      end
      v
    end

    def on_heredoc_beg(tok)
      @stack.push @buf
      buf = []
      @buf.push buf
      @buf = buf
      @buf.push Elem.new([lineno(), column()], __callee__, tok, state())
    end

    def on_heredoc_end(tok)
      @buf.push Elem.new([lineno(), column()], __callee__, tok, state())
      @buf = @stack.pop unless @stack.empty?
    end

    def _push_token(tok)
      e = Elem.new([lineno(), column()], __callee__, tok, state())
      @buf.push(e)
      e
    end

    def on_error1(mesg)
      @errors.push Elem.new([lineno(), column()], __callee__, token(), state(), mesg)
    end

    def on_error2(mesg, elem)
      if elem
        elem = Elem.new(elem.pos, __callee__, elem.tok, elem.state, mesg)
      else
        elem = Elem.new([lineno(), column()], __callee__, token(), state(), mesg)
      end
      @errors.push elem
    end
    PARSER_EVENTS.grep(/_error\z/) do |e|
      arity = PARSER_EVENT_TABLE.fetch(e)
      alias_method "on_#{e}", "on_error#{arity}"
    end
    alias compile_error on_error1

    (SCANNER_EVENTS.map {|event|:"on_#{event}"} - private_instance_methods(false)).each do |event|
      alias_method event, :_push_token
    end
    # :startdoc:
  end

  # [EXPERIMENTAL]
  # Parses +src+ and return a string which was matched to +pattern+.
  # +pattern+ should be described as Regexp.
  #
  #   require 'ripper'
  #
  #   p Ripper.slice('def m(a) nil end', 'ident')                   #=> "m"
  #   p Ripper.slice('def m(a) nil end', '[ident lparen rparen]+')  #=> "m(a)"
  #   p Ripper.slice("<<EOS\nstring\nEOS",
  #                  'heredoc_beg nl $(tstring_content*) heredoc_end', 1)
  #       #=> "string\n"
  #
  def Ripper.slice(src, pattern, n = 0)
    if m = token_match(src, pattern)
    then m.string(n)
    else nil
    end
  end

  def Ripper.token_match(src, pattern)   #:nodoc:
    TokenPattern.compile(pattern).match(src)
  end

  class TokenPattern   #:nodoc:

    class Error < ::StandardError # :nodoc:
    end
    class CompileError < Error # :nodoc:
    end
    class MatchError < Error # :nodoc:
    end

    class << self
      alias compile new
    end

    def initialize(pattern)
      @source = pattern
      @re = compile(pattern)
    end

    def match(str)
      match_list(::Ripper.lex(str))
    end

    def match_list(tokens)
      if m = @re.match(map_tokens(tokens))
      then MatchData.new(tokens, m)
      else nil
      end
    end

    private

    def compile(pattern)
      if m = /[^\w\s$()\[\]{}?*+\.]/.match(pattern)
        raise CompileError, "invalid char in pattern: #{m[0].inspect}"
      end
      buf = +''
      pattern.scan(/(?:\w+|\$\(|[()\[\]\{\}?*+\.]+)/) do |tok|
        case tok
        when /\w/
          buf.concat map_token(tok)
        when '$('
          buf.concat '('
        when '('
          buf.concat '(?:'
        when /[?*\[\])\.]/
          buf.concat tok
        else
          raise 'must not happen'
        end
      end
      Regexp.compile(buf)
    rescue RegexpError => err
      raise CompileError, err.message
    end

    def map_tokens(tokens)
      tokens.map {|pos,type,str| map_token(type.to_s.delete_prefix('on_')) }.join
    end

    MAP = {}
    seed = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
    SCANNER_EVENT_TABLE.each do |ev, |
      raise CompileError, "[RIPPER FATAL] too many system token" if seed.empty?
      MAP[ev.to_s.delete_prefix('on_')] = seed.shift
    end

    def map_token(tok)
      MAP[tok]  or raise CompileError, "unknown token: #{tok}"
    end

    class MatchData # :nodoc:
      def initialize(tokens, match)
        @tokens = tokens
        @match = match
      end

      def string(n = 0)
        return nil unless @match
        match(n).join
      end

      private

      def match(n = 0)
        return [] unless @match
        @tokens[@match.begin(n)...@match.end(n)].map {|pos,type,str| str }
      end
    end

  end

end
PK*J[u&E,,share/ruby/ripper/sexp.rbnu�[���# frozen_string_literal: true
#
# $Id$
#
# Copyright (c) 2004,2005 Minero Aoki
#
# This program is free software.
# You can distribute and/or modify this program under the Ruby License.
# For details of Ruby License, see ruby/COPYING.
#

require 'ripper/core'

class Ripper

  # [EXPERIMENTAL]
  # Parses +src+ and create S-exp tree.
  # Returns more readable tree rather than Ripper.sexp_raw.
  # This method is mainly for developer use.
  # The +filename+ argument is mostly ignored.
  # By default, this method does not handle syntax errors in +src+,
  # returning +nil+ in such cases. Use the +raise_errors+ keyword
  # to raise a SyntaxError for an error in +src+.
  #
  #   require 'ripper'
  #   require 'pp'
  #
  #   pp Ripper.sexp("def m(a) nil end")
  #     #=> [:program,
  #          [[:def,
  #           [:@ident, "m", [1, 4]],
  #           [:paren, [:params, [[:@ident, "a", [1, 6]]], nil, nil, nil, nil, nil, nil]],
  #           [:bodystmt, [[:var_ref, [:@kw, "nil", [1, 9]]]], nil, nil, nil]]]]
  #
  def Ripper.sexp(src, filename = '-', lineno = 1, raise_errors: false)
    builder = SexpBuilderPP.new(src, filename, lineno)
    sexp = builder.parse
    if builder.error?
      if raise_errors
        raise SyntaxError, builder.error
      end
    else
      sexp
    end
  end

  # [EXPERIMENTAL]
  # Parses +src+ and create S-exp tree.
  # This method is mainly for developer use.
  # The +filename+ argument is mostly ignored.
  # By default, this method does not handle syntax errors in +src+,
  # returning +nil+ in such cases. Use the +raise_errors+ keyword
  # to raise a SyntaxError for an error in +src+.
  #
  #   require 'ripper'
  #   require 'pp'
  #
  #   pp Ripper.sexp_raw("def m(a) nil end")
  #     #=> [:program,
  #          [:stmts_add,
  #           [:stmts_new],
  #           [:def,
  #            [:@ident, "m", [1, 4]],
  #            [:paren, [:params, [[:@ident, "a", [1, 6]]], nil, nil, nil]],
  #            [:bodystmt,
  #             [:stmts_add, [:stmts_new], [:var_ref, [:@kw, "nil", [1, 9]]]],
  #             nil,
  #             nil,
  #             nil]]]]
  #
  def Ripper.sexp_raw(src, filename = '-', lineno = 1, raise_errors: false)
    builder = SexpBuilder.new(src, filename, lineno)
    sexp = builder.parse
    if builder.error?
      if raise_errors
        raise SyntaxError, builder.error
      end
    else
      sexp
    end
  end

  class SexpBuilder < ::Ripper   #:nodoc:
    attr_reader :error

    private

    def dedent_element(e, width)
      if (n = dedent_string(e[1], width)) > 0
        e[2][1] += n
      end
      e
    end

    def on_heredoc_dedent(val, width)
      sub = proc do |cont|
        cont.map! do |e|
          if Array === e
            case e[0]
            when :@tstring_content
              e = dedent_element(e, width)
            when /_add\z/
              e[1] = sub[e[1]]
            end
          elsif String === e
            dedent_string(e, width)
          end
          e
        end
      end
      sub[val]
      val
    end

    events = private_instance_methods(false).grep(/\Aon_/) {$'.to_sym}
    (PARSER_EVENTS - events).each do |event|
      module_eval(<<-End, __FILE__, __LINE__ + 1)
        def on_#{event}(*args)
          args.unshift :#{event}
          args
        end
      End
    end

    SCANNER_EVENTS.each do |event|
      module_eval(<<-End, __FILE__, __LINE__ + 1)
        def on_#{event}(tok)
          [:@#{event}, tok, [lineno(), column()]]
        end
      End
    end

    def on_error(mesg)
      @error = mesg
    end
    remove_method :on_parse_error
    alias on_parse_error on_error
    alias compile_error on_error
  end

  class SexpBuilderPP < SexpBuilder #:nodoc:
    private

    def on_heredoc_dedent(val, width)
      val.map! do |e|
        next e if Symbol === e and /_content\z/ =~ e
        if Array === e and e[0] == :@tstring_content
          e = dedent_element(e, width)
        elsif String === e
          dedent_string(e, width)
        end
        e
      end
      val
    end

    def _dispatch_event_new
      []
    end

    def _dispatch_event_push(list, item)
      list.push item
      list
    end

    def on_mlhs_paren(list)
      [:mlhs, *list]
    end

    def on_mlhs_add_star(list, star)
      list.push([:rest_param, star])
    end

    def on_mlhs_add_post(list, post)
      list.concat(post)
    end

    PARSER_EVENT_TABLE.each do |event, arity|
      if /_new\z/ =~ event and arity == 0
        alias_method "on_#{event}", :_dispatch_event_new
      elsif /_add\z/ =~ event
        alias_method "on_#{event}", :_dispatch_event_push
      end
    end
  end

end
PK*J[�w��ppshare/ruby/coverage.rbnu�[���require "coverage.so"

module Coverage
  def self.line_stub(file)
    lines = File.foreach(file).map { nil }
    iseqs = [RubyVM::InstructionSequence.compile_file(file)]
    until iseqs.empty?
      iseq = iseqs.pop
      iseq.trace_points.each {|n, type| lines[n - 1] = 0 if type == :line }
      iseq.each_child {|child| iseqs << child }
    end
    lines
  end
end
PK*J[L��;;share/ruby/optionparser.rbnu�[���# frozen_string_literal: false
require_relative 'optparse'
PK*J[�^C����share/ruby/socket.rbnu�[���# frozen_string_literal: true

require 'socket.so'

unless IO.method_defined?(:wait_writable, false)
  # It's only required on older Rubies < v3.2:
  require 'io/wait'
end

class Addrinfo
  # creates an Addrinfo object from the arguments.
  #
  # The arguments are interpreted as similar to self.
  #
  #   Addrinfo.tcp("0.0.0.0", 4649).family_addrinfo("www.ruby-lang.org", 80)
  #   #=> #<Addrinfo: 221.186.184.68:80 TCP (www.ruby-lang.org:80)>
  #
  #   Addrinfo.unix("/tmp/sock").family_addrinfo("/tmp/sock2")
  #   #=> #<Addrinfo: /tmp/sock2 SOCK_STREAM>
  #
  def family_addrinfo(*args)
    if args.empty?
      raise ArgumentError, "no address specified"
    elsif Addrinfo === args.first
      raise ArgumentError, "too many arguments" if args.length != 1
      addrinfo = args.first
      if (self.pfamily != addrinfo.pfamily) ||
         (self.socktype != addrinfo.socktype)
        raise ArgumentError, "Addrinfo type mismatch"
      end
      addrinfo
    elsif self.ip?
      raise ArgumentError, "IP address needs host and port but #{args.length} arguments given" if args.length != 2
      host, port = args
      Addrinfo.getaddrinfo(host, port, self.pfamily, self.socktype, self.protocol)[0]
    elsif self.unix?
      raise ArgumentError, "UNIX socket needs single path argument but #{args.length} arguments given" if args.length != 1
      path, = args
      Addrinfo.unix(path)
    else
      raise ArgumentError, "unexpected family"
    end
  end

  # creates a new Socket connected to the address of +local_addrinfo+.
  #
  # If _local_addrinfo_ is nil, the address of the socket is not bound.
  #
  # The _timeout_ specify the seconds for timeout.
  # Errno::ETIMEDOUT is raised when timeout occur.
  #
  # If a block is given the created socket is yielded for each address.
  #
  def connect_internal(local_addrinfo, timeout=nil) # :yields: socket
    sock = Socket.new(self.pfamily, self.socktype, self.protocol)
    begin
      sock.ipv6only! if self.ipv6?
      sock.bind local_addrinfo if local_addrinfo
      if timeout
        case sock.connect_nonblock(self, exception: false)
        when 0 # success or EISCONN, other errors raise
          break
        when :wait_writable
          sock.wait_writable(timeout) or
            raise Errno::ETIMEDOUT, 'user specified timeout'
        end while true
      else
        sock.connect(self)
      end
    rescue Exception
      sock.close
      raise
    end
    if block_given?
      begin
        yield sock
      ensure
        sock.close
      end
    else
      sock
    end
  end
  protected :connect_internal

  # :call-seq:
  #   addrinfo.connect_from([local_addr_args], [opts]) {|socket| ... }
  #   addrinfo.connect_from([local_addr_args], [opts])
  #
  # creates a socket connected to the address of self.
  #
  # If one or more arguments given as _local_addr_args_,
  # it is used as the local address of the socket.
  # _local_addr_args_ is given for family_addrinfo to obtain actual address.
  #
  # If _local_addr_args_ is not given, the local address of the socket is not bound.
  #
  # The optional last argument _opts_ is options represented by a hash.
  # _opts_ may have following options:
  #
  # [:timeout] specify the timeout in seconds.
  #
  # If a block is given, it is called with the socket and the value of the block is returned.
  # The socket is returned otherwise.
  #
  #   Addrinfo.tcp("www.ruby-lang.org", 80).connect_from("0.0.0.0", 4649) {|s|
  #     s.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
  #     puts s.read
  #   }
  #
  #   # Addrinfo object can be taken for the argument.
  #   Addrinfo.tcp("www.ruby-lang.org", 80).connect_from(Addrinfo.tcp("0.0.0.0", 4649)) {|s|
  #     s.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
  #     puts s.read
  #   }
  #
  def connect_from(*args, timeout: nil, &block)
    connect_internal(family_addrinfo(*args), timeout, &block)
  end

  # :call-seq:
  #   addrinfo.connect([opts]) {|socket| ... }
  #   addrinfo.connect([opts])
  #
  # creates a socket connected to the address of self.
  #
  # The optional argument _opts_ is options represented by a hash.
  # _opts_ may have following options:
  #
  # [:timeout] specify the timeout in seconds.
  #
  # If a block is given, it is called with the socket and the value of the block is returned.
  # The socket is returned otherwise.
  #
  #   Addrinfo.tcp("www.ruby-lang.org", 80).connect {|s|
  #     s.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
  #     puts s.read
  #   }
  #
  def connect(timeout: nil, &block)
    connect_internal(nil, timeout, &block)
  end

  # :call-seq:
  #   addrinfo.connect_to([remote_addr_args], [opts]) {|socket| ... }
  #   addrinfo.connect_to([remote_addr_args], [opts])
  #
  # creates a socket connected to _remote_addr_args_ and bound to self.
  #
  # The optional last argument _opts_ is options represented by a hash.
  # _opts_ may have following options:
  #
  # [:timeout] specify the timeout in seconds.
  #
  # If a block is given, it is called with the socket and the value of the block is returned.
  # The socket is returned otherwise.
  #
  #   Addrinfo.tcp("0.0.0.0", 4649).connect_to("www.ruby-lang.org", 80) {|s|
  #     s.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
  #     puts s.read
  #   }
  #
  def connect_to(*args, timeout: nil, &block)
    remote_addrinfo = family_addrinfo(*args)
    remote_addrinfo.connect_internal(self, timeout, &block)
  end

  # creates a socket bound to self.
  #
  # If a block is given, it is called with the socket and the value of the block is returned.
  # The socket is returned otherwise.
  #
  #   Addrinfo.udp("0.0.0.0", 9981).bind {|s|
  #     s.local_address.connect {|s| s.send "hello", 0 }
  #     p s.recv(10) #=> "hello"
  #   }
  #
  def bind
    sock = Socket.new(self.pfamily, self.socktype, self.protocol)
    begin
      sock.ipv6only! if self.ipv6?
      sock.setsockopt(:SOCKET, :REUSEADDR, 1)
      sock.bind(self)
    rescue Exception
      sock.close
      raise
    end
    if block_given?
      begin
        yield sock
      ensure
        sock.close
      end
    else
      sock
    end
  end

  # creates a listening socket bound to self.
  def listen(backlog=Socket::SOMAXCONN)
    sock = Socket.new(self.pfamily, self.socktype, self.protocol)
    begin
      sock.ipv6only! if self.ipv6?
      sock.setsockopt(:SOCKET, :REUSEADDR, 1) unless self.pfamily == Socket::PF_UNIX
      sock.bind(self)
      sock.listen(backlog)
    rescue Exception
      sock.close
      raise
    end
    if block_given?
      begin
        yield sock
      ensure
        sock.close
      end
    else
      sock
    end
  end

  # iterates over the list of Addrinfo objects obtained by Addrinfo.getaddrinfo.
  #
  #   Addrinfo.foreach(nil, 80) {|x| p x }
  #   #=> #<Addrinfo: 127.0.0.1:80 TCP (:80)>
  #   #   #<Addrinfo: 127.0.0.1:80 UDP (:80)>
  #   #   #<Addrinfo: [::1]:80 TCP (:80)>
  #   #   #<Addrinfo: [::1]:80 UDP (:80)>
  #
  def self.foreach(nodename, service, family=nil, socktype=nil, protocol=nil, flags=nil, timeout: nil, &block)
    Addrinfo.getaddrinfo(nodename, service, family, socktype, protocol, flags, timeout: timeout).each(&block)
  end
end

class BasicSocket < IO
  # Returns an address of the socket suitable for connect in the local machine.
  #
  # This method returns _self_.local_address, except following condition.
  #
  # - IPv4 unspecified address (0.0.0.0) is replaced by IPv4 loopback address (127.0.0.1).
  # - IPv6 unspecified address (::) is replaced by IPv6 loopback address (::1).
  #
  # If the local address is not suitable for connect, SocketError is raised.
  # IPv4 and IPv6 address which port is 0 is not suitable for connect.
  # Unix domain socket which has no path is not suitable for connect.
  #
  #   Addrinfo.tcp("0.0.0.0", 0).listen {|serv|
  #     p serv.connect_address #=> #<Addrinfo: 127.0.0.1:53660 TCP>
  #     serv.connect_address.connect {|c|
  #       s, _ = serv.accept
  #       p [c, s] #=> [#<Socket:fd 4>, #<Socket:fd 6>]
  #     }
  #   }
  #
  def connect_address
    addr = local_address
    afamily = addr.afamily
    if afamily == Socket::AF_INET
      raise SocketError, "unbound IPv4 socket" if addr.ip_port == 0
      if addr.ip_address == "0.0.0.0"
        addr = Addrinfo.new(["AF_INET", addr.ip_port, nil, "127.0.0.1"], addr.pfamily, addr.socktype, addr.protocol)
      end
    elsif defined?(Socket::AF_INET6) && afamily == Socket::AF_INET6
      raise SocketError, "unbound IPv6 socket" if addr.ip_port == 0
      if addr.ip_address == "::"
        addr = Addrinfo.new(["AF_INET6", addr.ip_port, nil, "::1"], addr.pfamily, addr.socktype, addr.protocol)
      elsif addr.ip_address == "0.0.0.0" # MacOS X 10.4 returns "a.b.c.d" for IPv4-mapped IPv6 address.
        addr = Addrinfo.new(["AF_INET6", addr.ip_port, nil, "::1"], addr.pfamily, addr.socktype, addr.protocol)
      elsif addr.ip_address == "::ffff:0.0.0.0" # MacOS X 10.6 returns "::ffff:a.b.c.d" for IPv4-mapped IPv6 address.
        addr = Addrinfo.new(["AF_INET6", addr.ip_port, nil, "::1"], addr.pfamily, addr.socktype, addr.protocol)
      end
    elsif defined?(Socket::AF_UNIX) && afamily == Socket::AF_UNIX
      raise SocketError, "unbound Unix socket" if addr.unix_path == ""
    end
    addr
  end

  # call-seq:
  #    basicsocket.sendmsg(mesg, flags=0, dest_sockaddr=nil, *controls) => numbytes_sent
  #
  # sendmsg sends a message using sendmsg(2) system call in blocking manner.
  #
  # _mesg_ is a string to send.
  #
  # _flags_ is bitwise OR of MSG_* constants such as Socket::MSG_OOB.
  #
  # _dest_sockaddr_ is a destination socket address for connection-less socket.
  # It should be a sockaddr such as a result of Socket.sockaddr_in.
  # An Addrinfo object can be used too.
  #
  # _controls_ is a list of ancillary data.
  # The element of _controls_ should be Socket::AncillaryData or
  # 3-elements array.
  # The 3-element array should contains cmsg_level, cmsg_type and data.
  #
  # The return value, _numbytes_sent_ is an integer which is the number of bytes sent.
  #
  # sendmsg can be used to implement send_io as follows:
  #
  #   # use Socket::AncillaryData.
  #   ancdata = Socket::AncillaryData.int(:UNIX, :SOCKET, :RIGHTS, io.fileno)
  #   sock.sendmsg("a", 0, nil, ancdata)
  #
  #   # use 3-element array.
  #   ancdata = [:SOCKET, :RIGHTS, [io.fileno].pack("i!")]
  #   sock.sendmsg("\0", 0, nil, ancdata)
  def sendmsg(mesg, flags = 0, dest_sockaddr = nil, *controls)
    __sendmsg(mesg, flags, dest_sockaddr, controls)
  end

  # call-seq:
  #    basicsocket.sendmsg_nonblock(mesg, flags=0, dest_sockaddr=nil, *controls, opts={}) => numbytes_sent
  #
  # sendmsg_nonblock sends a message using sendmsg(2) system call in non-blocking manner.
  #
  # It is similar to BasicSocket#sendmsg
  # but the non-blocking flag is set before the system call
  # and it doesn't retry the system call.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that sendmsg_nonblock should not raise an IO::WaitWritable exception, but
  # return the symbol +:wait_writable+ instead.
  def sendmsg_nonblock(mesg, flags = 0, dest_sockaddr = nil, *controls,
                       exception: true)
    __sendmsg_nonblock(mesg, flags, dest_sockaddr, controls, exception)
  end

  # call-seq:
  # 	basicsocket.recv_nonblock(maxlen [, flags [, buf [, options ]]]) => mesg
  #
  # Receives up to _maxlen_ bytes from +socket+ using recvfrom(2) after
  # O_NONBLOCK is set for the underlying file descriptor.
  # _flags_ is zero or more of the +MSG_+ options.
  # The result, _mesg_, is the data received.
  #
  # When recvfrom(2) returns 0, Socket#recv_nonblock returns nil.
  # In most cases it means the connection was closed, but for UDP connections
  # it may mean an empty packet was received, as the underlying API makes
  # it impossible to distinguish these two cases.
  #
  # === Parameters
  # * +maxlen+ - the number of bytes to receive from the socket
  # * +flags+ - zero or more of the +MSG_+ options
  # * +buf+ - destination String buffer
  # * +options+ - keyword hash, supporting `exception: false`
  #
  # === Example
  # 	serv = TCPServer.new("127.0.0.1", 0)
  # 	af, port, host, addr = serv.addr
  # 	c = TCPSocket.new(addr, port)
  # 	s = serv.accept
  # 	c.send "aaa", 0
  # 	begin # emulate blocking recv.
  # 	  p s.recv_nonblock(10) #=> "aaa"
  # 	rescue IO::WaitReadable
  # 	  IO.select([s])
  # 	  retry
  # 	end
  #
  # Refer to Socket#recvfrom for the exceptions that may be thrown if the call
  # to _recv_nonblock_ fails.
  #
  # BasicSocket#recv_nonblock may raise any error corresponding to recvfrom(2) failure,
  # including Errno::EWOULDBLOCK.
  #
  # If the exception is Errno::EWOULDBLOCK or Errno::EAGAIN,
  # it is extended by IO::WaitReadable.
  # So IO::WaitReadable can be used to rescue the exceptions for retrying recv_nonblock.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that recv_nonblock should not raise an IO::WaitReadable exception, but
  # return the symbol +:wait_readable+ instead.
  #
  # === See
  # * Socket#recvfrom
  def recv_nonblock(len, flag = 0, str = nil, exception: true)
    __recv_nonblock(len, flag, str, exception)
  end

  # call-seq:
  #    basicsocket.recvmsg(maxmesglen=nil, flags=0, maxcontrollen=nil, opts={}) => [mesg, sender_addrinfo, rflags, *controls]
  #
  # recvmsg receives a message using recvmsg(2) system call in blocking manner.
  #
  # _maxmesglen_ is the maximum length of mesg to receive.
  #
  # _flags_ is bitwise OR of MSG_* constants such as Socket::MSG_PEEK.
  #
  # _maxcontrollen_ is the maximum length of controls (ancillary data) to receive.
  #
  # _opts_ is option hash.
  # Currently :scm_rights=>bool is the only option.
  #
  # :scm_rights option specifies that application expects SCM_RIGHTS control message.
  # If the value is nil or false, application don't expects SCM_RIGHTS control message.
  # In this case, recvmsg closes the passed file descriptors immediately.
  # This is the default behavior.
  #
  # If :scm_rights value is neither nil nor false, application expects SCM_RIGHTS control message.
  # In this case, recvmsg creates IO objects for each file descriptors for
  # Socket::AncillaryData#unix_rights method.
  #
  # The return value is 4-elements array.
  #
  # _mesg_ is a string of the received message.
  #
  # _sender_addrinfo_ is a sender socket address for connection-less socket.
  # It is an Addrinfo object.
  # For connection-oriented socket such as TCP, sender_addrinfo is platform dependent.
  #
  # _rflags_ is a flags on the received message which is bitwise OR of MSG_* constants such as Socket::MSG_TRUNC.
  # It will be nil if the system uses 4.3BSD style old recvmsg system call.
  #
  # _controls_ is ancillary data which is an array of Socket::AncillaryData objects such as:
  #
  #   #<Socket::AncillaryData: AF_UNIX SOCKET RIGHTS 7>
  #
  # _maxmesglen_ and _maxcontrollen_ can be nil.
  # In that case, the buffer will be grown until the message is not truncated.
  # Internally, MSG_PEEK is used.
  # Buffer full and MSG_CTRUNC are checked for truncation.
  #
  # recvmsg can be used to implement recv_io as follows:
  #
  #   mesg, sender_sockaddr, rflags, *controls = sock.recvmsg(:scm_rights=>true)
  #   controls.each {|ancdata|
  #     if ancdata.cmsg_is?(:SOCKET, :RIGHTS)
  #       return ancdata.unix_rights[0]
  #     end
  #   }
  def recvmsg(dlen = nil, flags = 0, clen = nil, scm_rights: false)
    __recvmsg(dlen, flags, clen, scm_rights)
  end

  # call-seq:
  #    basicsocket.recvmsg_nonblock(maxdatalen=nil, flags=0, maxcontrollen=nil, opts={}) => [data, sender_addrinfo, rflags, *controls]
  #
  # recvmsg receives a message using recvmsg(2) system call in non-blocking manner.
  #
  # It is similar to BasicSocket#recvmsg
  # but non-blocking flag is set before the system call
  # and it doesn't retry the system call.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that recvmsg_nonblock should not raise an IO::WaitReadable exception, but
  # return the symbol +:wait_readable+ instead.
  def recvmsg_nonblock(dlen = nil, flags = 0, clen = nil,
                       scm_rights: false, exception: true)
    __recvmsg_nonblock(dlen, flags, clen, scm_rights, exception)
  end

  # Linux-specific optimizations to avoid fcntl for IO#read_nonblock
  # and IO#write_nonblock using MSG_DONTWAIT
  # Do other platforms support MSG_DONTWAIT reliably?
  if RUBY_PLATFORM =~ /linux/ && Socket.const_defined?(:MSG_DONTWAIT)
    def read_nonblock(len, str = nil, exception: true) # :nodoc:
      __read_nonblock(len, str, exception)
    end

    def write_nonblock(buf, exception: true) # :nodoc:
      __write_nonblock(buf, exception)
    end
  end
end

class Socket < BasicSocket
  # enable the socket option IPV6_V6ONLY if IPV6_V6ONLY is available.
  def ipv6only!
    if defined? Socket::IPV6_V6ONLY
      self.setsockopt(:IPV6, :V6ONLY, 1)
    end
  end

  # call-seq:
  #   socket.recvfrom_nonblock(maxlen[, flags[, outbuf[, opts]]]) => [mesg, sender_addrinfo]
  #
  # Receives up to _maxlen_ bytes from +socket+ using recvfrom(2) after
  # O_NONBLOCK is set for the underlying file descriptor.
  # _flags_ is zero or more of the +MSG_+ options.
  # The first element of the results, _mesg_, is the data received.
  # The second element, _sender_addrinfo_, contains protocol-specific address
  # information of the sender.
  #
  # When recvfrom(2) returns 0, Socket#recv_nonblock returns nil.
  # In most cases it means the connection was closed, but for UDP connections
  # it may mean an empty packet was received, as the underlying API makes
  # it impossible to distinguish these two cases.
  #
  # === Parameters
  # * +maxlen+ - the maximum number of bytes to receive from the socket
  # * +flags+ - zero or more of the +MSG_+ options
  # * +outbuf+ - destination String buffer
  # * +opts+ - keyword hash, supporting `exception: false`
  #
  # === Example
  #   # In one file, start this first
  #   require 'socket'
  #   include Socket::Constants
  #   socket = Socket.new(AF_INET, SOCK_STREAM, 0)
  #   sockaddr = Socket.sockaddr_in(2200, 'localhost')
  #   socket.bind(sockaddr)
  #   socket.listen(5)
  #   client, client_addrinfo = socket.accept
  #   begin # emulate blocking recvfrom
  #     pair = client.recvfrom_nonblock(20)
  #   rescue IO::WaitReadable
  #     IO.select([client])
  #     retry
  #   end
  #   data = pair[0].chomp
  #   puts "I only received 20 bytes '#{data}'"
  #   sleep 1
  #   socket.close
  #
  #   # In another file, start this second
  #   require 'socket'
  #   include Socket::Constants
  #   socket = Socket.new(AF_INET, SOCK_STREAM, 0)
  #   sockaddr = Socket.sockaddr_in(2200, 'localhost')
  #   socket.connect(sockaddr)
  #   socket.puts "Watch this get cut short!"
  #   socket.close
  #
  # Refer to Socket#recvfrom for the exceptions that may be thrown if the call
  # to _recvfrom_nonblock_ fails.
  #
  # Socket#recvfrom_nonblock may raise any error corresponding to recvfrom(2) failure,
  # including Errno::EWOULDBLOCK.
  #
  # If the exception is Errno::EWOULDBLOCK or Errno::EAGAIN,
  # it is extended by IO::WaitReadable.
  # So IO::WaitReadable can be used to rescue the exceptions for retrying
  # recvfrom_nonblock.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that recvfrom_nonblock should not raise an IO::WaitReadable exception, but
  # return the symbol +:wait_readable+ instead.
  #
  # === See
  # * Socket#recvfrom
  def recvfrom_nonblock(len, flag = 0, str = nil, exception: true)
    __recvfrom_nonblock(len, flag, str, exception)
  end

  # call-seq:
  #   socket.accept_nonblock([options]) => [client_socket, client_addrinfo]
  #
  # Accepts an incoming connection using accept(2) after
  # O_NONBLOCK is set for the underlying file descriptor.
  # It returns an array containing the accepted socket
  # for the incoming connection, _client_socket_,
  # and an Addrinfo, _client_addrinfo_.
  #
  # === Example
  #   # In one script, start this first
  #   require 'socket'
  #   include Socket::Constants
  #   socket = Socket.new(AF_INET, SOCK_STREAM, 0)
  #   sockaddr = Socket.sockaddr_in(2200, 'localhost')
  #   socket.bind(sockaddr)
  #   socket.listen(5)
  #   begin # emulate blocking accept
  #     client_socket, client_addrinfo = socket.accept_nonblock
  #   rescue IO::WaitReadable, Errno::EINTR
  #     IO.select([socket])
  #     retry
  #   end
  #   puts "The client said, '#{client_socket.readline.chomp}'"
  #   client_socket.puts "Hello from script one!"
  #   socket.close
  #
  #   # In another script, start this second
  #   require 'socket'
  #   include Socket::Constants
  #   socket = Socket.new(AF_INET, SOCK_STREAM, 0)
  #   sockaddr = Socket.sockaddr_in(2200, 'localhost')
  #   socket.connect(sockaddr)
  #   socket.puts "Hello from script 2."
  #   puts "The server said, '#{socket.readline.chomp}'"
  #   socket.close
  #
  # Refer to Socket#accept for the exceptions that may be thrown if the call
  # to _accept_nonblock_ fails.
  #
  # Socket#accept_nonblock may raise any error corresponding to accept(2) failure,
  # including Errno::EWOULDBLOCK.
  #
  # If the exception is Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED or Errno::EPROTO,
  # it is extended by IO::WaitReadable.
  # So IO::WaitReadable can be used to rescue the exceptions for retrying accept_nonblock.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that accept_nonblock should not raise an IO::WaitReadable exception, but
  # return the symbol +:wait_readable+ instead.
  #
  # === See
  # * Socket#accept
  def accept_nonblock(exception: true)
    __accept_nonblock(exception)
  end

  RESOLUTION_DELAY = 0.05
  private_constant :RESOLUTION_DELAY

  CONNECTION_ATTEMPT_DELAY = 0.25
  private_constant :CONNECTION_ATTEMPT_DELAY

  ADDRESS_FAMILIES = {
    ipv6: Socket::AF_INET6,
    ipv4: Socket::AF_INET
  }.freeze
  private_constant :ADDRESS_FAMILIES

  HOSTNAME_RESOLUTION_QUEUE_UPDATED = 0
  private_constant :HOSTNAME_RESOLUTION_QUEUE_UPDATED

  IPV6_ADRESS_FORMAT = /\A(?i:(?:(?:[0-9A-F]{1,4}:){7}(?:[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){6}(?:[0-9A-F]{1,4}|:(?:[0-9A-F]{1,4}:){1,5}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){5}(?:(?::[0-9A-F]{1,4}){1,2}|:(?:[0-9A-F]{1,4}:){1,4}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){4}(?:(?::[0-9A-F]{1,4}){1,3}|:(?:[0-9A-F]{1,4}:){1,3}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){3}(?:(?::[0-9A-F]{1,4}){1,4}|:(?:[0-9A-F]{1,4}:){1,2}[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){2}(?:(?::[0-9A-F]{1,4}){1,5}|:(?:[0-9A-F]{1,4}:)[0-9A-F]{1,4}|:)|(?:[0-9A-F]{1,4}:){1}(?:(?::[0-9A-F]{1,4}){1,6}|:(?:[0-9A-F]{1,4}:){0,5}[0-9A-F]{1,4}|:)|(?:::(?:[0-9A-F]{1,4}:){0,7}[0-9A-F]{1,4}|::)))(?:%.+)?\z/
  private_constant :IPV6_ADRESS_FORMAT

  # :call-seq:
  #   Socket.tcp(host, port, local_host=nil, local_port=nil, [opts]) {|socket| ... }
  #   Socket.tcp(host, port, local_host=nil, local_port=nil, [opts])
  #
  # creates a new socket object connected to host:port using TCP/IP.
  #
  # Starting from Ruby 3.4, this method operates according to the
  # Happy Eyeballs Version 2 ({RFC 8305}[https://datatracker.ietf.org/doc/html/rfc8305])
  # algorithm by default.
  #
  # For details on Happy Eyeballs Version 2,
  # see {Socket.tcp_fast_fallback=}[rdoc-ref:Socket.tcp_fast_fallback=].
  #
  # To make it behave the same as in Ruby 3.3 and earlier,
  # explicitly specify the option fast_fallback:false.
  # Or, setting Socket.tcp_fast_fallback=false will disable
  # Happy Eyeballs Version 2 not only for this method but for all Socket globally.
  #
  # If local_host:local_port is given,
  # the socket is bound to it.
  #
  # The optional last argument _opts_ is options represented by a hash.
  # _opts_ may have following options:
  #
  # [:resolv_timeout] Specifies the timeout in seconds from when the hostname resolution starts.
  # [:connect_timeout] This method sequentially attempts connecting to all candidate destination addresses.<br>The +connect_timeout+ specifies the timeout in seconds from the start of the connection attempt to the last candidate.<br>By default, all connection attempts continue until the timeout occurs.<br>When +fast_fallback:false+ is explicitly specified,<br>a timeout is set for each connection attempt and any connection attempt that exceeds its timeout will be canceled.
  # [:fast_fallback] Enables the Happy Eyeballs Version 2 algorithm (enabled by default).
  #
  # If a block is given, the block is called with the socket.
  # The value of the block is returned.
  # The socket is closed when this method returns.
  #
  # If no block is given, the socket is returned.
  #
  #   Socket.tcp("www.ruby-lang.org", 80) {|sock|
  #     sock.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
  #     sock.close_write
  #     puts sock.read
  #   }
  def self.tcp(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil, fast_fallback: tcp_fast_fallback, &) # :yield: socket
    sock = if fast_fallback && !(host && ip_address?(host))
      tcp_with_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:)
    else
      tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:)
    end

    if block_given?
      begin
        yield sock
      ensure
        sock.close
      end
    else
      sock
    end
  end

  def self.tcp_with_fast_fallback(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil)
    if local_host || local_port
      local_addrinfos = Addrinfo.getaddrinfo(local_host, local_port, nil, :STREAM, timeout: resolv_timeout)
      resolving_family_names = local_addrinfos.map { |lai| ADDRESS_FAMILIES.key(lai.afamily) }.uniq
    else
      local_addrinfos = []
      resolving_family_names = ADDRESS_FAMILIES.keys
    end

    hostname_resolution_threads = []
    resolution_store = HostnameResolutionStore.new(resolving_family_names)
    connecting_sockets = {}
    is_windows_environment ||= (RUBY_PLATFORM =~ /mswin|mingw|cygwin/)

    now = current_clock_time
    resolution_delay_expires_at = nil
    connection_attempt_delay_expires_at = nil
    user_specified_connect_timeout_at = nil
    last_error = nil
    last_error_from_thread = false

    if resolving_family_names.size == 1
      family_name = resolving_family_names.first
      addrinfos = Addrinfo.getaddrinfo(host, port, family_name, :STREAM, timeout: resolv_timeout)
      resolution_store.add_resolved(family_name, addrinfos)
      hostname_resolution_result = nil
      hostname_resolution_notifier = nil
      user_specified_resolv_timeout_at = nil
    else
      hostname_resolution_result = HostnameResolutionResult.new(resolving_family_names.size)
      hostname_resolution_notifier = hostname_resolution_result.notifier

      hostname_resolution_threads.concat(
        resolving_family_names.map { |family|
          thread_args = [family, host, port, hostname_resolution_result]
          thread = Thread.new(*thread_args) { |*thread_args| resolve_hostname(*thread_args) }
          Thread.pass
          thread
        }
      )

      user_specified_resolv_timeout_at = resolv_timeout ? now + resolv_timeout : Float::INFINITY
    end

    loop do
      if resolution_store.any_addrinfos? &&
          !resolution_delay_expires_at &&
          !connection_attempt_delay_expires_at
        while (addrinfo = resolution_store.get_addrinfo)
          if local_addrinfos.any?
            local_addrinfo = local_addrinfos.find { |lai| lai.afamily == addrinfo.afamily }

            if local_addrinfo.nil? # Connecting addrinfoと同じアドレスファミリのLocal addrinfoがない
              if resolution_store.any_addrinfos?
                # Try other Addrinfo in next "while"
                next
              elsif connecting_sockets.any? || resolution_store.any_unresolved_family?
                # Exit this "while" and wait for connections to be established or hostname resolution in next loop
                # Or exit this "while" and wait for hostname resolution in next loop
                break
              else
                raise SocketError.new 'no appropriate local address'
              end
            end
          end

          begin
            if resolution_store.any_addrinfos? ||
               connecting_sockets.any? ||
               resolution_store.any_unresolved_family?
              socket = Socket.new(addrinfo.pfamily, addrinfo.socktype, addrinfo.protocol)
              socket.bind(local_addrinfo) if local_addrinfo
              result = socket.connect_nonblock(addrinfo, exception: false)
            else
              result = socket = local_addrinfo ?
                addrinfo.connect_from(local_addrinfo, timeout: connect_timeout) :
                addrinfo.connect(timeout: connect_timeout)
            end

            if result == :wait_writable
              connection_attempt_delay_expires_at = now + CONNECTION_ATTEMPT_DELAY
              if resolution_store.empty_addrinfos?
                user_specified_connect_timeout_at = connect_timeout ? now + connect_timeout : Float::INFINITY
              end

              connecting_sockets[socket] = addrinfo
              break
            else
              return socket # connection established
            end
          rescue SystemCallError => e
            socket&.close
            last_error = e

            if resolution_store.any_addrinfos?
              # Try other Addrinfo in next "while"
              next
            elsif connecting_sockets.any? || resolution_store.any_unresolved_family?
              # Exit this "while" and wait for connections to be established or hostname resolution in next loop
              # Or exit this "while" and wait for hostname resolution in next loop
              break
            else
              raise last_error
            end
          end
        end
      end

      ends_at =
        if resolution_store.any_addrinfos?
          resolution_delay_expires_at || connection_attempt_delay_expires_at
        else
          [user_specified_resolv_timeout_at, user_specified_connect_timeout_at].compact.max
        end

      hostname_resolved, writable_sockets, except_sockets = IO.select(
        hostname_resolution_notifier,
        connecting_sockets.keys,
        # Use errorfds to wait for non-blocking connect failures on Windows
        is_windows_environment ? connecting_sockets.keys : nil,
        second_to_timeout(current_clock_time, ends_at),
      )
      now = current_clock_time
      resolution_delay_expires_at = nil if expired?(now, resolution_delay_expires_at)
      connection_attempt_delay_expires_at = nil if expired?(now, connection_attempt_delay_expires_at)

      if writable_sockets&.any?
        while (writable_socket = writable_sockets.pop)
          is_connected = is_windows_environment || (
            sockopt = writable_socket.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR)
            sockopt.int.zero?
          )

          if is_connected
            connecting_sockets.delete writable_socket
            return writable_socket
          else
            failed_ai = connecting_sockets.delete writable_socket
            writable_socket.close
            ip_address = failed_ai.ipv6? ? "[#{failed_ai.ip_address}]" : failed_ai.ip_address
            last_error = SystemCallError.new("connect(2) for #{ip_address}:#{failed_ai.ip_port}", sockopt.int)

            if writable_sockets.any? || connecting_sockets.any?
              # Try other writable socket in next "while"
              # Or exit this "while" and wait for connections to be established or hostname resolution in next loop
            elsif resolution_store.any_addrinfos? || resolution_store.any_unresolved_family?
              # Exit this "while" and try other connection attempt
              # Or exit this "while" and wait for hostname resolution in next loop
              connection_attempt_delay_expires_at = nil
              user_specified_connect_timeout_at = nil
            else
              raise last_error
            end
          end
        end
      end

      if except_sockets&.any?
        except_sockets.each do |except_socket|
          failed_ai = connecting_sockets.delete except_socket
          sockopt = except_socket.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR)
          except_socket.close
          ip_address = failed_ai.ipv6? ? "[#{failed_ai.ip_address}]" : failed_ai.ip_address
          last_error = SystemCallError.new("connect(2) for #{ip_address}:#{failed_ai.ip_port}", sockopt.int)

          if except_sockets.any? || connecting_sockets.any?
            # Cleanup other except socket in next "each"
            # Or exit this "while" and wait for connections to be established or hostname resolution in next loop
          elsif resolution_store.any_addrinfos? || resolution_store.any_unresolved_family?
            # Exit this "while" and try other connection attempt
            # Or exit this "while" and wait for hostname resolution in next loop
            connection_attempt_delay_expires_at = nil
            user_specified_connect_timeout_at = nil
          else
            raise last_error
          end
        end
      end

      if hostname_resolved&.any?
        while (family_and_result = hostname_resolution_result.get)
          family_name, result = family_and_result

          if result.is_a? Exception
            resolution_store.add_error(family_name, result)

            unless (Socket.const_defined?(:EAI_ADDRFAMILY)) &&
              (result.is_a?(Socket::ResolutionError)) &&
              (result.error_code == Socket::EAI_ADDRFAMILY)
              other = family_name == :ipv6 ? :ipv4 : :ipv6
              if !resolution_store.resolved?(other) || !resolution_store.resolved_successfully?(other)
                last_error = result
                last_error_from_thread = true
              end
            end
          else
            resolution_store.add_resolved(family_name, result)
          end
        end

        if resolution_store.resolved?(:ipv4)
          if resolution_store.resolved?(:ipv6)
            hostname_resolution_notifier = nil
            resolution_delay_expires_at = nil
            user_specified_resolv_timeout_at = nil
          elsif resolution_store.resolved_successfully?(:ipv4)
            resolution_delay_expires_at = now + RESOLUTION_DELAY
          end
        end
      end

      if resolution_store.empty_addrinfos?
        if connecting_sockets.empty? && resolution_store.resolved_all_families?
          if last_error_from_thread
            raise last_error.class, last_error.message, cause: last_error
          else
            raise last_error
          end
        end

        if (expired?(now, user_specified_resolv_timeout_at) || resolution_store.resolved_all_families?) &&
           (expired?(now, user_specified_connect_timeout_at) || connecting_sockets.empty?)
          raise Errno::ETIMEDOUT, 'user specified timeout'
        end
      end
    end
  ensure
    hostname_resolution_threads.each do |thread|
      thread.exit
    end

    hostname_resolution_result&.close

    connecting_sockets.each_key do |connecting_socket|
      connecting_socket.close
    end
  end

  def self.tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:)
    last_error = nil
    ret = nil

    local_addr_list = nil
    if local_host != nil || local_port != nil
      local_addr_list = Addrinfo.getaddrinfo(local_host, local_port, nil, :STREAM, nil)
    end

    Addrinfo.foreach(host, port, nil, :STREAM, timeout: resolv_timeout) {|ai|
      if local_addr_list
        local_addr = local_addr_list.find {|local_ai| local_ai.afamily == ai.afamily }
        next unless local_addr
      else
        local_addr = nil
      end
      begin
        sock = local_addr ?
          ai.connect_from(local_addr, timeout: connect_timeout) :
          ai.connect(timeout: connect_timeout)
      rescue SystemCallError
        last_error = $!
        next
      end
      ret = sock
      break
    }
    unless ret
      if last_error
        raise last_error
      else
        raise SocketError, "no appropriate local address"
      end
    end

    ret
  end
  private_class_method :tcp_without_fast_fallback

  def self.ip_address?(hostname)
    hostname.match?(IPV6_ADRESS_FORMAT) || hostname.match?(/\A([0-9]{1,3}\.){3}[0-9]{1,3}\z/)
  end
  private_class_method :ip_address?

  def self.resolve_hostname(family, host, port, hostname_resolution_result)
    begin
      resolved_addrinfos = Addrinfo.getaddrinfo(host, port, ADDRESS_FAMILIES[family], :STREAM)
      hostname_resolution_result.add(family, resolved_addrinfos)
    rescue => e
      hostname_resolution_result.add(family, e)
    end
  end
  private_class_method :resolve_hostname

  def self.current_clock_time
    Process.clock_gettime(Process::CLOCK_MONOTONIC)
  end
  private_class_method :current_clock_time

  def self.second_to_timeout(started_at, ends_at)
    return nil if ends_at == Float::INFINITY || ends_at.nil?

    remaining = (ends_at - started_at)
    remaining.negative? ? 0 : remaining
  end
  private_class_method :second_to_timeout

  def self.expired?(started_at, ends_at)
    second_to_timeout(started_at, ends_at)&.zero?
  end
  private_class_method :expired?

  class HostnameResolutionResult
    def initialize(size)
      @size = size
      @taken_count = 0
      @rpipe, @wpipe = IO.pipe
      @results = []
      @mutex = Mutex.new
    end

    def notifier
      [@rpipe]
    end

    def add(family, result)
      @mutex.synchronize do
        @results.push [family, result]
        @wpipe.putc HOSTNAME_RESOLUTION_QUEUE_UPDATED
      end
    end

    def get
      return nil if @results.empty?

      res = nil

      @mutex.synchronize do
        @rpipe.getbyte
        res = @results.shift
      end

      @taken_count += 1
      close if @taken_count == @size
      res
    end

    def close
      @rpipe.close
      @wpipe.close
    end
  end
  private_constant :HostnameResolutionResult

  class HostnameResolutionStore
    PRIORITY_ON_V6 = [:ipv6, :ipv4].freeze
    PRIORITY_ON_V4 = [:ipv4, :ipv6].freeze

    def initialize(family_names)
      @family_names = family_names
      @addrinfo_dict = {}
      @error_dict = {}
      @last_family = nil
    end

    def add_resolved(family_name, addrinfos)
      @addrinfo_dict[family_name] = addrinfos
    end

    def add_error(family_name, error)
      @addrinfo_dict[family_name] = []
      @error_dict[family_name] = error
    end

    def get_addrinfo
      precedences =
        case @last_family
        when :ipv4, nil then PRIORITY_ON_V6
        when :ipv6      then PRIORITY_ON_V4
        end

      precedences.each do |family_name|
        addrinfo = @addrinfo_dict[family_name]&.shift
        next unless addrinfo

        @last_family = family_name
        return addrinfo
      end

      nil
    end

    def empty_addrinfos?
      @addrinfo_dict.all? { |_, addrinfos| addrinfos.empty? }
    end

    def any_addrinfos?
      !empty_addrinfos?
    end

    def resolved?(family)
      @addrinfo_dict.has_key? family
    end

    def resolved_successfully?(family)
      resolved?(family) && !@error_dict[family]
    end

    def resolved_all_families?
      (@family_names - @addrinfo_dict.keys).empty?
    end

    def any_unresolved_family?
      !resolved_all_families?
    end
  end
  private_constant :HostnameResolutionStore

  # :stopdoc:
  def self.ip_sockets_port0(ai_list, reuseaddr)
    sockets = []
    begin
      sockets.clear
      port = nil
      ai_list.each {|ai|
        begin
          s = Socket.new(ai.pfamily, ai.socktype, ai.protocol)
        rescue SystemCallError
          next
        end
        sockets << s
        s.ipv6only! if ai.ipv6?
        if reuseaddr
          s.setsockopt(:SOCKET, :REUSEADDR, 1)
        end
        unless port
          s.bind(ai)
          port = s.local_address.ip_port
        else
          s.bind(ai.family_addrinfo(ai.ip_address, port))
        end
      }
    rescue Errno::EADDRINUSE
      sockets.each(&:close)
      retry
    rescue Exception
      sockets.each(&:close)
      raise
    end
    sockets
  end
  class << self
    private :ip_sockets_port0
  end

  def self.tcp_server_sockets_port0(host)
    ai_list = Addrinfo.getaddrinfo(host, 0, nil, :STREAM, nil, Socket::AI_PASSIVE)
    sockets = ip_sockets_port0(ai_list, true)
    begin
      sockets.each {|s|
        s.listen(Socket::SOMAXCONN)
      }
    rescue Exception
      sockets.each(&:close)
      raise
    end
    sockets
  end
  class << self
    private :tcp_server_sockets_port0
  end
  # :startdoc:

  # creates TCP/IP server sockets for _host_ and _port_.
  # _host_ is optional.
  #
  # If no block given,
  # it returns an array of listening sockets.
  #
  # If a block is given, the block is called with the sockets.
  # The value of the block is returned.
  # The socket is closed when this method returns.
  #
  # If _port_ is 0, actual port number is chosen dynamically.
  # However all sockets in the result has same port number.
  #
  #   # tcp_server_sockets returns two sockets.
  #   sockets = Socket.tcp_server_sockets(1296)
  #   p sockets #=> [#<Socket:fd 3>, #<Socket:fd 4>]
  #
  #   # The sockets contains IPv6 and IPv4 sockets.
  #   sockets.each {|s| p s.local_address }
  #   #=> #<Addrinfo: [::]:1296 TCP>
  #   #   #<Addrinfo: 0.0.0.0:1296 TCP>
  #
  #   # IPv6 and IPv4 socket has same port number, 53114, even if it is chosen dynamically.
  #   sockets = Socket.tcp_server_sockets(0)
  #   sockets.each {|s| p s.local_address }
  #   #=> #<Addrinfo: [::]:53114 TCP>
  #   #   #<Addrinfo: 0.0.0.0:53114 TCP>
  #
  #   # The block is called with the sockets.
  #   Socket.tcp_server_sockets(0) {|sockets|
  #     p sockets #=> [#<Socket:fd 3>, #<Socket:fd 4>]
  #   }
  #
  def self.tcp_server_sockets(host=nil, port)
    if port == 0
      sockets = tcp_server_sockets_port0(host)
    else
      last_error = nil
      sockets = []
      begin
        Addrinfo.foreach(host, port, nil, :STREAM, nil, Socket::AI_PASSIVE) {|ai|
          begin
            s = ai.listen
          rescue SystemCallError
            last_error = $!
            next
          end
          sockets << s
        }
        if sockets.empty?
          raise last_error
        end
      rescue Exception
        sockets.each(&:close)
        raise
      end
    end
    if block_given?
      begin
        yield sockets
      ensure
        sockets.each(&:close)
      end
    else
      sockets
    end
  end

  # yield socket and client address for each a connection accepted via given sockets.
  #
  # The arguments are a list of sockets.
  # The individual argument should be a socket or an array of sockets.
  #
  # This method yields the block sequentially.
  # It means that the next connection is not accepted until the block returns.
  # So concurrent mechanism, thread for example, should be used to service multiple clients at a time.
  #
  def self.accept_loop(*sockets) # :yield: socket, client_addrinfo
    sockets.flatten!(1)
    if sockets.empty?
      raise ArgumentError, "no sockets"
    end
    loop {
      readable, _, _ = IO.select(sockets)
      readable.each {|r|
        sock, addr = r.accept_nonblock(exception: false)
        next if sock == :wait_readable
        yield sock, addr
      }
    }
  end

  # creates a TCP/IP server on _port_ and calls the block for each connection accepted.
  # The block is called with a socket and a client_address as an Addrinfo object.
  #
  # If _host_ is specified, it is used with _port_ to determine the server addresses.
  #
  # The socket is *not* closed when the block returns.
  # So application should close it explicitly.
  #
  # This method calls the block sequentially.
  # It means that the next connection is not accepted until the block returns.
  # So concurrent mechanism, thread for example, should be used to service multiple clients at a time.
  #
  # Note that Addrinfo.getaddrinfo is used to determine the server socket addresses.
  # When Addrinfo.getaddrinfo returns two or more addresses,
  # IPv4 and IPv6 address for example,
  # all of them are used.
  # Socket.tcp_server_loop succeeds if one socket can be used at least.
  #
  #   # Sequential echo server.
  #   # It services only one client at a time.
  #   Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
  #     begin
  #       IO.copy_stream(sock, sock)
  #     ensure
  #       sock.close
  #     end
  #   }
  #
  #   # Threaded echo server
  #   # It services multiple clients at a time.
  #   # Note that it may accept connections too much.
  #   Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
  #     Thread.new {
  #       begin
  #         IO.copy_stream(sock, sock)
  #       ensure
  #         sock.close
  #       end
  #     }
  #   }
  #
  def self.tcp_server_loop(host=nil, port, &b) # :yield: socket, client_addrinfo
    tcp_server_sockets(host, port) {|sockets|
      accept_loop(sockets, &b)
    }
  end

  # :call-seq:
  #   Socket.udp_server_sockets([host, ] port)
  #
  # Creates UDP/IP sockets for a UDP server.
  #
  # If no block given, it returns an array of sockets.
  #
  # If a block is given, the block is called with the sockets.
  # The value of the block is returned.
  # The sockets are closed when this method returns.
  #
  # If _port_ is zero, some port is chosen.
  # But the chosen port is used for the all sockets.
  #
  #   # UDP/IP echo server
  #   Socket.udp_server_sockets(0) {|sockets|
  #     p sockets.first.local_address.ip_port     #=> 32963
  #     Socket.udp_server_loop_on(sockets) {|msg, msg_src|
  #       msg_src.reply msg
  #     }
  #   }
  #
  def self.udp_server_sockets(host=nil, port)
    last_error = nil
    sockets = []

    ipv6_recvpktinfo = nil
    if defined? Socket::AncillaryData
      if defined? Socket::IPV6_RECVPKTINFO # RFC 3542
        ipv6_recvpktinfo = Socket::IPV6_RECVPKTINFO
      elsif defined? Socket::IPV6_PKTINFO # RFC 2292
        ipv6_recvpktinfo = Socket::IPV6_PKTINFO
      end
    end

    local_addrs = Socket.ip_address_list

    ip_list = []
    Addrinfo.foreach(host, port, nil, :DGRAM, nil, Socket::AI_PASSIVE) {|ai|
      if ai.ipv4? && ai.ip_address == "0.0.0.0"
        local_addrs.each {|a|
          next unless a.ipv4?
          ip_list << Addrinfo.new(a.to_sockaddr, :INET, :DGRAM, 0);
        }
      elsif ai.ipv6? && ai.ip_address == "::" && !ipv6_recvpktinfo
        local_addrs.each {|a|
          next unless a.ipv6?
          ip_list << Addrinfo.new(a.to_sockaddr, :INET6, :DGRAM, 0);
        }
      else
        ip_list << ai
      end
    }
    ip_list.uniq!(&:to_sockaddr)

    if port == 0
      sockets = ip_sockets_port0(ip_list, false)
    else
      ip_list.each {|ip|
        ai = Addrinfo.udp(ip.ip_address, port)
        begin
          s = ai.bind
        rescue SystemCallError
          last_error = $!
          next
        end
        sockets << s
      }
      if sockets.empty?
        raise last_error
      end
    end

    sockets.each {|s|
      ai = s.local_address
      if ipv6_recvpktinfo && ai.ipv6? && ai.ip_address == "::"
        s.setsockopt(:IPV6, ipv6_recvpktinfo, 1)
      end
    }

    if block_given?
      begin
        yield sockets
      ensure
        sockets.each(&:close) if sockets
      end
    else
      sockets
    end
  end

  # :call-seq:
  #   Socket.udp_server_recv(sockets) {|msg, msg_src| ... }
  #
  # Receive UDP/IP packets from the given _sockets_.
  # For each packet received, the block is called.
  #
  # The block receives _msg_ and _msg_src_.
  # _msg_ is a string which is the payload of the received packet.
  # _msg_src_ is a Socket::UDPSource object which is used for reply.
  #
  # Socket.udp_server_loop can be implemented using this method as follows.
  #
  #   udp_server_sockets(host, port) {|sockets|
  #     loop {
  #       readable, _, _ = IO.select(sockets)
  #       udp_server_recv(readable) {|msg, msg_src| ... }
  #     }
  #   }
  #
  def self.udp_server_recv(sockets)
    sockets.each {|r|
      msg, sender_addrinfo, _, *controls = r.recvmsg_nonblock(exception: false)
      next if msg == :wait_readable
      ai = r.local_address
      if ai.ipv6? and pktinfo = controls.find {|c| c.cmsg_is?(:IPV6, :PKTINFO) }
        ai = Addrinfo.udp(pktinfo.ipv6_pktinfo_addr.ip_address, ai.ip_port)
        yield msg, UDPSource.new(sender_addrinfo, ai) {|reply_msg|
          r.sendmsg reply_msg, 0, sender_addrinfo, pktinfo
        }
      else
        yield msg, UDPSource.new(sender_addrinfo, ai) {|reply_msg|
          r.send reply_msg, 0, sender_addrinfo
        }
      end
    }
  end

  # :call-seq:
  #   Socket.udp_server_loop_on(sockets) {|msg, msg_src| ... }
  #
  # Run UDP/IP server loop on the given sockets.
  #
  # The return value of Socket.udp_server_sockets is appropriate for the argument.
  #
  # It calls the block for each message received.
  #
  def self.udp_server_loop_on(sockets, &b) # :yield: msg, msg_src
    loop {
      readable, _, _ = IO.select(sockets)
      udp_server_recv(readable, &b)
    }
  end

  # :call-seq:
  #   Socket.udp_server_loop(port) {|msg, msg_src| ... }
  #   Socket.udp_server_loop(host, port) {|msg, msg_src| ... }
  #
  # creates a UDP/IP server on _port_ and calls the block for each message arrived.
  # The block is called with the message and its source information.
  #
  # This method allocates sockets internally using _port_.
  # If _host_ is specified, it is used conjunction with _port_ to determine the server addresses.
  #
  # The _msg_ is a string.
  #
  # The _msg_src_ is a Socket::UDPSource object.
  # It is used for reply.
  #
  #   # UDP/IP echo server.
  #   Socket.udp_server_loop(9261) {|msg, msg_src|
  #     msg_src.reply msg
  #   }
  #
  def self.udp_server_loop(host=nil, port, &b) # :yield: message, message_source
    udp_server_sockets(host, port) {|sockets|
      udp_server_loop_on(sockets, &b)
    }
  end

  # UDP/IP address information used by Socket.udp_server_loop.
  class UDPSource
    # +remote_address+ is an Addrinfo object.
    #
    # +local_address+ is an Addrinfo object.
    #
    # +reply_proc+ is a Proc used to send reply back to the source.
    def initialize(remote_address, local_address, &reply_proc)
      @remote_address = remote_address
      @local_address = local_address
      @reply_proc = reply_proc
    end

    # Address of the source
    attr_reader :remote_address

    # Local address
    attr_reader :local_address

    def inspect # :nodoc:
      "\#<#{self.class}: #{@remote_address.inspect_sockaddr} to #{@local_address.inspect_sockaddr}>".dup
    end

    # Sends the String +msg+ to the source
    def reply(msg)
      @reply_proc.call msg
    end
  end

  # creates a new socket connected to path using UNIX socket socket.
  #
  # If a block is given, the block is called with the socket.
  # The value of the block is returned.
  # The socket is closed when this method returns.
  #
  # If no block is given, the socket is returned.
  #
  #   # talk to /tmp/sock socket.
  #   Socket.unix("/tmp/sock") {|sock|
  #     t = Thread.new { IO.copy_stream(sock, STDOUT) }
  #     IO.copy_stream(STDIN, sock)
  #     t.join
  #   }
  #
  def self.unix(path) # :yield: socket
    addr = Addrinfo.unix(path)
    sock = addr.connect
    if block_given?
      begin
        yield sock
      ensure
        sock.close
      end
    else
      sock
    end
  end

  # creates a UNIX server socket on _path_
  #
  # If no block given, it returns a listening socket.
  #
  # If a block is given, it is called with the socket and the block value is returned.
  # When the block exits, the socket is closed and the socket file is removed.
  #
  #   socket = Socket.unix_server_socket("/tmp/s")
  #   p socket                  #=> #<Socket:fd 3>
  #   p socket.local_address    #=> #<Addrinfo: /tmp/s SOCK_STREAM>
  #
  #   Socket.unix_server_socket("/tmp/sock") {|s|
  #     p s                     #=> #<Socket:fd 3>
  #     p s.local_address       #=> # #<Addrinfo: /tmp/sock SOCK_STREAM>
  #   }
  #
  def self.unix_server_socket(path)
    unless unix_socket_abstract_name?(path)
      begin
        st = File.lstat(path)
      rescue Errno::ENOENT
      end
      if st&.socket? && st.owned?
        File.unlink path
      end
    end
    s = Addrinfo.unix(path).listen
    if block_given?
      begin
        yield s
      ensure
        s.close
        unless unix_socket_abstract_name?(path)
          File.unlink path
        end
      end
    else
      s
    end
  end

  class << self
    private

    def unix_socket_abstract_name?(path)
      /linux/ =~ RUBY_PLATFORM && /\A(\0|\z)/ =~ path
    end
  end

  # creates a UNIX socket server on _path_.
  # It calls the block for each socket accepted.
  #
  # If _host_ is specified, it is used with _port_ to determine the server ports.
  #
  # The socket is *not* closed when the block returns.
  # So application should close it.
  #
  # This method deletes the socket file pointed by _path_ at first if
  # the file is a socket file and it is owned by the user of the application.
  # This is safe only if the directory of _path_ is not changed by a malicious user.
  # So don't use /tmp/malicious-users-directory/socket.
  # Note that /tmp/socket and /tmp/your-private-directory/socket is safe assuming that /tmp has sticky bit.
  #
  #   # Sequential echo server.
  #   # It services only one client at a time.
  #   Socket.unix_server_loop("/tmp/sock") {|sock, client_addrinfo|
  #     begin
  #       IO.copy_stream(sock, sock)
  #     ensure
  #       sock.close
  #     end
  #   }
  #
  def self.unix_server_loop(path, &b) # :yield: socket, client_addrinfo
    unix_server_socket(path) {|serv|
      accept_loop(serv, &b)
    }
  end

  # call-seq:
  #   socket.connect_nonblock(remote_sockaddr, [options]) => 0
  #
  # Requests a connection to be made on the given +remote_sockaddr+ after
  # O_NONBLOCK is set for the underlying file descriptor.
  # Returns 0 if successful, otherwise an exception is raised.
  #
  # === Parameter
  # * +remote_sockaddr+ - the +struct+ sockaddr contained in a string or Addrinfo object
  #
  # === Example:
  #   # Pull down Google's web page
  #   require 'socket'
  #   include Socket::Constants
  #   socket = Socket.new(AF_INET, SOCK_STREAM, 0)
  #   sockaddr = Socket.sockaddr_in(80, 'www.google.com')
  #   begin # emulate blocking connect
  #     socket.connect_nonblock(sockaddr)
  #   rescue IO::WaitWritable
  #     IO.select(nil, [socket]) # wait 3-way handshake completion
  #     begin
  #       socket.connect_nonblock(sockaddr) # check connection failure
  #     rescue Errno::EISCONN
  #     end
  #   end
  #   socket.write("GET / HTTP/1.0\r\n\r\n")
  #   results = socket.read
  #
  # Refer to Socket#connect for the exceptions that may be thrown if the call
  # to _connect_nonblock_ fails.
  #
  # Socket#connect_nonblock may raise any error corresponding to connect(2) failure,
  # including Errno::EINPROGRESS.
  #
  # If the exception is Errno::EINPROGRESS,
  # it is extended by IO::WaitWritable.
  # So IO::WaitWritable can be used to rescue the exceptions for retrying connect_nonblock.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that connect_nonblock should not raise an IO::WaitWritable exception, but
  # return the symbol +:wait_writable+ instead.
  #
  # === See
  # * Socket#connect
  def connect_nonblock(addr, exception: true)
    __connect_nonblock(addr, exception)
  end
end

class UDPSocket < IPSocket

  # call-seq:
  #   udpsocket.recvfrom_nonblock(maxlen [, flags[, outbuf [, options]]]) => [mesg, sender_inet_addr]
  #
  # Receives up to _maxlen_ bytes from +udpsocket+ using recvfrom(2) after
  # O_NONBLOCK is set for the underlying file descriptor.
  # _flags_ is zero or more of the +MSG_+ options.
  # The first element of the results, _mesg_, is the data received.
  # The second element, _sender_inet_addr_, is an array to represent the sender address.
  #
  # When recvfrom(2) returns 0, Socket#recv_nonblock returns nil.
  # In most cases it means the connection was closed, but it may also mean
  # an empty packet was received, as the underlying API makes
  # it impossible to distinguish these two cases.
  #
  # === Parameters
  # * +maxlen+ - the number of bytes to receive from the socket
  # * +flags+ - zero or more of the +MSG_+ options
  # * +outbuf+ - destination String buffer
  # * +options+ - keyword hash, supporting `exception: false`
  #
  # === Example
  # 	require 'socket'
  # 	s1 = UDPSocket.new
  # 	s1.bind("127.0.0.1", 0)
  # 	s2 = UDPSocket.new
  # 	s2.bind("127.0.0.1", 0)
  # 	s2.connect(*s1.addr.values_at(3,1))
  # 	s1.connect(*s2.addr.values_at(3,1))
  # 	s1.send "aaa", 0
  # 	begin # emulate blocking recvfrom
  # 	  p s2.recvfrom_nonblock(10)  #=> ["aaa", ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]
  # 	rescue IO::WaitReadable
  # 	  IO.select([s2])
  # 	  retry
  # 	end
  #
  # Refer to Socket#recvfrom for the exceptions that may be thrown if the call
  # to _recvfrom_nonblock_ fails.
  #
  # UDPSocket#recvfrom_nonblock may raise any error corresponding to recvfrom(2) failure,
  # including Errno::EWOULDBLOCK.
  #
  # If the exception is Errno::EWOULDBLOCK or Errno::EAGAIN,
  # it is extended by IO::WaitReadable.
  # So IO::WaitReadable can be used to rescue the exceptions for retrying recvfrom_nonblock.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that recvfrom_nonblock should not raise an IO::WaitReadable exception, but
  # return the symbol +:wait_readable+ instead.
  #
  # === See
  # * Socket#recvfrom
  def recvfrom_nonblock(len, flag = 0, outbuf = nil, exception: true)
    __recvfrom_nonblock(len, flag, outbuf, exception)
  end
end

class TCPServer < TCPSocket

  # call-seq:
  #   tcpserver.accept_nonblock([options]) => tcpsocket
  #
  # Accepts an incoming connection using accept(2) after
  # O_NONBLOCK is set for the underlying file descriptor.
  # It returns an accepted TCPSocket for the incoming connection.
  #
  # === Example
  # 	require 'socket'
  # 	serv = TCPServer.new(2202)
  # 	begin # emulate blocking accept
  # 	  sock = serv.accept_nonblock
  # 	rescue IO::WaitReadable, Errno::EINTR
  # 	  IO.select([serv])
  # 	  retry
  # 	end
  # 	# sock is an accepted socket.
  #
  # Refer to Socket#accept for the exceptions that may be thrown if the call
  # to TCPServer#accept_nonblock fails.
  #
  # TCPServer#accept_nonblock may raise any error corresponding to accept(2) failure,
  # including Errno::EWOULDBLOCK.
  #
  # If the exception is Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO,
  # it is extended by IO::WaitReadable.
  # So IO::WaitReadable can be used to rescue the exceptions for retrying accept_nonblock.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that accept_nonblock should not raise an IO::WaitReadable exception, but
  # return the symbol +:wait_readable+ instead.
  #
  # === See
  # * TCPServer#accept
  # * Socket#accept
  def accept_nonblock(exception: true)
    __accept_nonblock(exception)
  end
end

class UNIXServer < UNIXSocket
  # call-seq:
  #   unixserver.accept_nonblock([options]) => unixsocket
  #
  # Accepts an incoming connection using accept(2) after
  # O_NONBLOCK is set for the underlying file descriptor.
  # It returns an accepted UNIXSocket for the incoming connection.
  #
  # === Example
  # 	require 'socket'
  # 	serv = UNIXServer.new("/tmp/sock")
  # 	begin # emulate blocking accept
  # 	  sock = serv.accept_nonblock
  # 	rescue IO::WaitReadable, Errno::EINTR
  # 	  IO.select([serv])
  # 	  retry
  # 	end
  # 	# sock is an accepted socket.
  #
  # Refer to Socket#accept for the exceptions that may be thrown if the call
  # to UNIXServer#accept_nonblock fails.
  #
  # UNIXServer#accept_nonblock may raise any error corresponding to accept(2) failure,
  # including Errno::EWOULDBLOCK.
  #
  # If the exception is Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED or Errno::EPROTO,
  # it is extended by IO::WaitReadable.
  # So IO::WaitReadable can be used to rescue the exceptions for retrying accept_nonblock.
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that accept_nonblock should not raise an IO::WaitReadable exception, but
  # return the symbol +:wait_readable+ instead.
  #
  # === See
  # * UNIXServer#accept
  # * Socket#accept
  def accept_nonblock(exception: true)
    __accept_nonblock(exception)
  end
end if defined?(UNIXSocket)
PK*J[(�[D��share/ruby/forwardable/impl.rbnu�[���# :stopdoc:
module Forwardable
  def self._valid_method?(method)
    iseq = RubyVM::InstructionSequence.compile("().#{method}", nil, nil, 0, false)
  rescue SyntaxError
    false
  else
    iseq.to_a.dig(-1, 1, 1, :mid) == method.to_sym
  end

  def self._compile_method(src, file, line)
    RubyVM::InstructionSequence.compile(src, file, file, line,
               trace_instruction: false)
      .eval
  end
end
PK*J[[���share/ruby/monitor.rbnu�[���# frozen_string_literal: false
# = monitor.rb
#
# Copyright (C) 2001  Shugo Maeda <shugo@ruby-lang.org>
#
# This library is distributed under the terms of the Ruby license.
# You can freely distribute/modify this library.
#

require 'monitor.so'

#
# In concurrent programming, a monitor is an object or module intended to be
# used safely by more than one thread. The defining characteristic of a
# monitor is that its methods are executed with mutual exclusion. That is, at
# each point in time, at most one thread may be executing any of its methods.
# This mutual exclusion greatly simplifies reasoning about the implementation
# of monitors compared to reasoning about parallel code that updates a data
# structure.
#
# You can read more about the general principles on the Wikipedia page for
# Monitors[https://en.wikipedia.org/wiki/Monitor_%28synchronization%29].
#
# == Examples
#
# === Simple object.extend
#
#   require 'monitor.rb'
#
#   buf = []
#   buf.extend(MonitorMixin)
#   empty_cond = buf.new_cond
#
#   # consumer
#   Thread.start do
#     loop do
#       buf.synchronize do
#         empty_cond.wait_while { buf.empty? }
#         print buf.shift
#       end
#     end
#   end
#
#   # producer
#   while line = ARGF.gets
#     buf.synchronize do
#       buf.push(line)
#       empty_cond.signal
#     end
#   end
#
# The consumer thread waits for the producer thread to push a line to buf
# while <tt>buf.empty?</tt>. The producer thread (main thread) reads a
# line from ARGF and pushes it into buf then calls <tt>empty_cond.signal</tt>
# to notify the consumer thread of new data.
#
# === Simple Class include
#
#   require 'monitor'
#
#   class SynchronizedArray < Array
#
#     include MonitorMixin
#
#     def initialize(*args)
#       super(*args)
#     end
#
#     alias :old_shift :shift
#     alias :old_unshift :unshift
#
#     def shift(n=1)
#       self.synchronize do
#         self.old_shift(n)
#       end
#     end
#
#     def unshift(item)
#       self.synchronize do
#         self.old_unshift(item)
#       end
#     end
#
#     # other methods ...
#   end
#
# +SynchronizedArray+ implements an Array with synchronized access to items.
# This Class is implemented as subclass of Array which includes the
# MonitorMixin module.
#
module MonitorMixin
  #
  # FIXME: This isn't documented in Nutshell.
  #
  # Since MonitorMixin.new_cond returns a ConditionVariable, and the example
  # above calls while_wait and signal, this class should be documented.
  #
  class ConditionVariable
    #
    # Releases the lock held in the associated monitor and waits; reacquires the lock on wakeup.
    #
    # If +timeout+ is given, this method returns after +timeout+ seconds passed,
    # even if no other thread doesn't signal.
    #
    def wait(timeout = nil)
      @monitor.mon_check_owner
      @monitor.wait_for_cond(@cond, timeout)
    end

    #
    # Calls wait repeatedly while the given block yields a truthy value.
    #
    def wait_while
      while yield
        wait
      end
    end

    #
    # Calls wait repeatedly until the given block yields a truthy value.
    #
    def wait_until
      until yield
        wait
      end
    end

    #
    # Wakes up the first thread in line waiting for this lock.
    #
    def signal
      @monitor.mon_check_owner
      @cond.signal
    end

    #
    # Wakes up all threads waiting for this lock.
    #
    def broadcast
      @monitor.mon_check_owner
      @cond.broadcast
    end

    private

    def initialize(monitor) # :nodoc:
      @monitor = monitor
      @cond = Thread::ConditionVariable.new
    end
  end

  def self.extend_object(obj) # :nodoc:
    super(obj)
    obj.__send__(:mon_initialize)
  end

  #
  # Attempts to enter exclusive section.  Returns +false+ if lock fails.
  #
  def mon_try_enter
    @mon_data.try_enter
  end
  # For backward compatibility
  alias try_mon_enter mon_try_enter

  #
  # Enters exclusive section.
  #
  def mon_enter
    @mon_data.enter
  end

  #
  # Leaves exclusive section.
  #
  def mon_exit
    mon_check_owner
    @mon_data.exit
  end

  #
  # Returns true if this monitor is locked by any thread
  #
  def mon_locked?
    @mon_data.mon_locked?
  end

  #
  # Returns true if this monitor is locked by current thread.
  #
  def mon_owned?
    @mon_data.mon_owned?
  end

  #
  # Enters exclusive section and executes the block.  Leaves the exclusive
  # section automatically when the block exits.  See example under
  # +MonitorMixin+.
  #
  def mon_synchronize(&b)
    @mon_data.synchronize(&b)
  end
  alias synchronize mon_synchronize

  #
  # Creates a new MonitorMixin::ConditionVariable associated with the
  # Monitor object.
  #
  def new_cond
    unless defined?(@mon_data)
      mon_initialize
      @mon_initialized_by_new_cond = true
    end
    return ConditionVariable.new(@mon_data)
  end

  private

  # Use <tt>extend MonitorMixin</tt> or <tt>include MonitorMixin</tt> instead
  # of this constructor.  Have look at the examples above to understand how to
  # use this module.
  def initialize(...)
    super
    mon_initialize
  end

  # Initializes the MonitorMixin after being included in a class or when an
  # object has been extended with the MonitorMixin
  def mon_initialize
    if defined?(@mon_data)
      if defined?(@mon_initialized_by_new_cond)
        return # already initialized.
      elsif @mon_data_owner_object_id == self.object_id
        raise ThreadError, "already initialized"
      end
    end
    @mon_data = ::Monitor.new
    @mon_data_owner_object_id = self.object_id
  end

  # Ensures that the MonitorMixin is owned by the current thread,
  # otherwise raises an exception.
  def mon_check_owner
    @mon_data.mon_check_owner
  end
end

# Use the Monitor class when you want to have a lock object for blocks with
# mutual exclusion.
#
#   require 'monitor'
#
#   lock = Monitor.new
#   lock.synchronize do
#     # exclusive access
#   end
#
class Monitor
  #
  # Creates a new MonitorMixin::ConditionVariable associated with the
  # Monitor object.
  #
  def new_cond
    ::MonitorMixin::ConditionVariable.new(self)
  end

  # for compatibility
  alias try_mon_enter try_enter
  alias mon_try_enter try_enter
  alias mon_enter enter
  alias mon_exit exit
  alias mon_synchronize synchronize
end

# Documentation comments:
#  - All documentation comes from Nutshell.
#  - MonitorMixin.new_cond appears in the example, but is not documented in
#    Nutshell.
#  - All the internals (internal modules Accessible and Initializable, class
#    ConditionVariable) appear in RDoc.  It might be good to hide them, by
#    making them private, or marking them :nodoc:, etc.
#  - RDoc doesn't recognise aliases, so we have mon_synchronize documented, but
#    not synchronize.
#  - mon_owner is in Nutshell, but appears as an accessor in a separate module
#    here, so is hard/impossible to RDoc.  Some other useful accessors
#    (mon_count and some queue stuff) are also in this module, and don't appear
#    directly in the RDoc output.
#  - in short, it may be worth changing the code layout in this file to make the
#    documentation easier
PK*J[�[����share/ruby/date.rbnu�[���# frozen_string_literal: true
# date.rb: Written by Tadayoshi Funaba 1998-2011

require 'date_core'

class Date
  VERSION = "3.4.1" # :nodoc:

  # call-seq:
  #   infinite? -> false
  #
  # Returns +false+
  def infinite?
    false
  end

  class Infinity < Numeric # :nodoc:

    def initialize(d=1) @d = d <=> 0 end

    def d() @d end

    protected :d

    def zero?() false end
    def finite?() false end
    def infinite?() d.nonzero? end
    def nan?() d.zero? end

    def abs() self.class.new end

    def -@() self.class.new(-d) end
    def +@() self.class.new(+d) end

    def <=>(other)
      case other
      when Infinity; return d <=> other.d
      when Float::INFINITY; return d <=> 1
      when -Float::INFINITY; return d <=> -1
      when Numeric; return d
      else
        begin
          l, r = other.coerce(self)
          return l <=> r
        rescue NoMethodError
        end
      end
      nil
    end

    def coerce(other)
      case other
      when Numeric; return -d, d
      else
        super
      end
    end

    def to_f
      return 0 if @d == 0
      if @d > 0
        Float::INFINITY
      else
        -Float::INFINITY
      end
    end

  end

end
PK*J[�5V^%%share/ruby/open3/version.rbnu�[���module Open3
  VERSION = "0.2.1"
end
PK*J[��T�share/ruby/shellwords.rbnu�[���# frozen-string-literal: true
##
# == Manipulates strings like the UNIX Bourne shell
#
# This module manipulates strings according to the word parsing rules
# of the UNIX Bourne shell.
#
# The <tt>shellwords()</tt> function was originally a port of shellwords.pl, but
# modified to conform to {the Shell & Utilities volume of the IEEE Std 1003.1-2008, 2016
# Edition}[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html]
#
# === Usage
#
# You can use Shellwords to parse a string into a Bourne shell friendly Array.
#
#   require 'shellwords'
#
#   argv = Shellwords.split('three blind "mice"')
#   argv #=> ["three", "blind", "mice"]
#
# Once you've required Shellwords, you can use the #split alias
# String#shellsplit.
#
#   argv = "see how they run".shellsplit
#   argv #=> ["see", "how", "they", "run"]
#
# They treat quotes as special characters, so an unmatched quote will
# cause an ArgumentError.
#
#   argv = "they all ran after the farmer's wife".shellsplit
#        #=> ArgumentError: Unmatched quote: ...
#
# Shellwords also provides methods that do the opposite.
# Shellwords.escape, or its alias, String#shellescape, escapes
# shell metacharacters in a string for use in a command line.
#
#   filename = "special's.txt"
#
#   system("cat -- #{filename.shellescape}")
#   # runs "cat -- special\\'s.txt"
#
# Note the '--'.  Without it, cat(1) will treat the following argument
# as a command line option if it starts with '-'.  It is guaranteed
# that Shellwords.escape converts a string to a form that a Bourne
# shell will parse back to the original string, but it is the
# programmer's responsibility to make sure that passing an arbitrary
# argument to a command does no harm.
#
# Shellwords also comes with a core extension for Array, Array#shelljoin.
#
#   dir = "Funny GIFs"
#   argv = %W[ls -lta -- #{dir}]
#   system(argv.shelljoin + " | less")
#   # runs "ls -lta -- Funny\\ GIFs | less"
#
# You can use this method to build a complete command line out of an
# array of arguments.
#
# === Authors
# * Wakou Aoyama
# * Akinori MUSHA <knu@iDaemons.org>
#
# === Contact
# * Akinori MUSHA <knu@iDaemons.org> (current maintainer)

module Shellwords
  # The version number string.
  VERSION = "0.2.2"

  # Splits a string into an array of tokens in the same way the UNIX
  # Bourne shell does.
  #
  #   argv = Shellwords.split('here are "two words"')
  #   argv #=> ["here", "are", "two words"]
  #
  # +line+ must not contain NUL characters because of nature of
  # +exec+ system call.
  #
  # Note, however, that this is not a command line parser.  Shell
  # metacharacters except for the single and double quotes and
  # backslash are not treated as such.
  #
  #   argv = Shellwords.split('ruby my_prog.rb | less')
  #   argv #=> ["ruby", "my_prog.rb", "|", "less"]
  #
  # String#shellsplit is a shortcut for this function.
  #
  #   argv = 'here are "two words"'.shellsplit
  #   argv #=> ["here", "are", "two words"]
  def shellsplit(line)
    words = []
    field = String.new
    line.scan(/\G\s*(?>([^\0\s\\\'\"]+)|'([^\0\']*)'|"((?:[^\0\"\\]|\\[^\0])*)"|(\\[^\0]?)|(\S))(\s|\z)?/m) do
      |word, sq, dq, esc, garbage, sep|
      if garbage
        b = $~.begin(0)
        line = $~[0]
        line = "..." + line if b > 0
        raise ArgumentError, "#{garbage == "\0" ? 'Nul character' : 'Unmatched quote'} at #{b}: #{line}"
      end
      # 2.2.3 Double-Quotes:
      #
      #   The <backslash> shall retain its special meaning as an
      #   escape character only when followed by one of the following
      #   characters when considered special:
      #
      #   $ ` " \ <newline>
      field << (word || sq || (dq && dq.gsub(/\\([$`"\\\n])/, '\\1')) || esc.gsub(/\\(.)/, '\\1'))
      if sep
        words << field
        field = String.new
      end
    end
    words
  end

  alias shellwords shellsplit

  module_function :shellsplit, :shellwords

  class << self
    alias split shellsplit
  end

  # Escapes a string so that it can be safely used in a Bourne shell
  # command line.  +str+ can be a non-string object that responds to
  # +to_s+.
  #
  # +str+ must not contain NUL characters because of nature of +exec+
  # system call.
  #
  # Note that a resulted string should be used unquoted and is not
  # intended for use in double quotes nor in single quotes.
  #
  #   argv = Shellwords.escape("It's better to give than to receive")
  #   argv #=> "It\\'s\\ better\\ to\\ give\\ than\\ to\\ receive"
  #
  # String#shellescape is a shorthand for this function.
  #
  #   argv = "It's better to give than to receive".shellescape
  #   argv #=> "It\\'s\\ better\\ to\\ give\\ than\\ to\\ receive"
  #
  #   # Search files in lib for method definitions
  #   pattern = "^[ \t]*def "
  #   open("| grep -Ern -e #{pattern.shellescape} lib") { |grep|
  #     grep.each_line { |line|
  #       file, lineno, matched_line = line.split(':', 3)
  #       # ...
  #     }
  #   }
  #
  # It is the caller's responsibility to encode the string in the right
  # encoding for the shell environment where this string is used.
  #
  # Multibyte characters are treated as multibyte characters, not as bytes.
  #
  # Returns an empty quoted String if +str+ has a length of zero.
  def shellescape(str)
    str = str.to_s

    # An empty argument will be skipped, so return empty quotes.
    return "''".dup if str.empty?

    # Shellwords cannot contain NUL characters.
    raise ArgumentError, "NUL character" if str.index("\0")

    str = str.dup

    # Treat multibyte characters as is.  It is the caller's responsibility
    # to encode the string in the right encoding for the shell
    # environment.
    str.gsub!(/[^A-Za-z0-9_\-.,:+\/@\n]/, "\\\\\\&")

    # A LF cannot be escaped with a backslash because a backslash + LF
    # combo is regarded as a line continuation and simply ignored.
    str.gsub!(/\n/, "'\n'")

    return str
  end

  module_function :shellescape

  class << self
    alias escape shellescape
  end

  # Builds a command line string from an argument list, +array+.
  #
  # All elements are joined into a single string with fields separated by a
  # space, where each element is escaped for the Bourne shell and stringified
  # using +to_s+.
  # See also Shellwords.shellescape.
  #
  #   ary = ["There's", "a", "time", "and", "place", "for", "everything"]
  #   argv = Shellwords.join(ary)
  #   argv #=> "There\\'s a time and place for everything"
  #
  # Array#shelljoin is a shortcut for this function.
  #
  #   ary = ["Don't", "rock", "the", "boat"]
  #   argv = ary.shelljoin
  #   argv #=> "Don\\'t rock the boat"
  #
  # You can also mix non-string objects in the elements as allowed in Array#join.
  #
  #   output = `#{['ps', '-p', $$].shelljoin}`
  #
  def shelljoin(array)
    array.map { |arg| shellescape(arg) }.join(' ')
  end

  module_function :shelljoin

  class << self
    alias join shelljoin
  end
end

class String
  # call-seq:
  #   str.shellsplit => array
  #
  # Splits +str+ into an array of tokens in the same way the UNIX
  # Bourne shell does.
  #
  # See Shellwords.shellsplit for details.
  def shellsplit
    Shellwords.split(self)
  end

  # call-seq:
  #   str.shellescape => string
  #
  # Escapes +str+ so that it can be safely used in a Bourne shell
  # command line.
  #
  # See Shellwords.shellescape for details.
  def shellescape
    Shellwords.escape(self)
  end
end

class Array
  # call-seq:
  #   array.shelljoin => string
  #
  # Builds a command line string from an argument list +array+ joining
  # all elements escaped for the Bourne shell and separated by a space.
  #
  # See Shellwords.shelljoin for details.
  def shelljoin
    Shellwords.join(self)
  end
end
PK*J[+�uQuQshare/ruby/pstore.rbnu�[���# frozen_string_literal: true
# = PStore -- Transactional File Storage for Ruby Objects
#
# pstore.rb -
#   originally by matz
#   documentation by Kev Jackson and James Edward Gray II
#   improved by Hongli Lai
#
# See PStore for documentation.

require "digest"

# \PStore implements a file based persistence mechanism based on a Hash.
# User code can store hierarchies of Ruby objects (values)
# into the data store by name (keys).
# An object hierarchy may be just a single object.
# User code may later read values back from the data store
# or even update data, as needed.
#
# The transactional behavior ensures that any changes succeed or fail together.
# This can be used to ensure that the data store is not left in a transitory state,
# where some values were updated but others were not.
#
# Behind the scenes, Ruby objects are stored to the data store file with Marshal.
# That carries the usual limitations. Proc objects cannot be marshalled,
# for example.
#
# There are three important concepts here (details at the links):
#
# - {Store}[rdoc-ref:PStore@The+Store]: a store is an instance of \PStore.
# - {Entries}[rdoc-ref:PStore@Entries]: the store is hash-like;
#   each entry is the key for a stored object.
# - {Transactions}[rdoc-ref:PStore@Transactions]: each transaction is a collection
#   of prospective changes to the store;
#   a transaction is defined in the block given with a call
#   to PStore#transaction.
#
# == About the Examples
#
# Examples on this page need a store that has known properties.
# They can get a new (and populated) store by calling thus:
#
#   example_store do |store|
#     # Example code using store goes here.
#   end
#
# All we really need to know about +example_store+
# is that it yields a fresh store with a known population of entries;
# its implementation:
#
#   require 'pstore'
#   require 'tempfile'
#   # Yield a pristine store for use in examples.
#   def example_store
#     # Create the store in a temporary file.
#     Tempfile.create do |file|
#       store = PStore.new(file)
#       # Populate the store.
#       store.transaction do
#         store[:foo] = 0
#         store[:bar] = 1
#         store[:baz] = 2
#       end
#       yield store
#     end
#   end
#
# == The Store
#
# The contents of the store are maintained in a file whose path is specified
# when the store is created (see PStore.new).
# The objects are stored and retrieved using
# module Marshal, which means that certain objects cannot be added to the store;
# see {Marshal::dump}[rdoc-ref:Marshal.dump].
#
# == Entries
#
# A store may have any number of entries.
# Each entry has a key and a value, just as in a hash:
#
# - Key: as in a hash, the key can be (almost) any object;
#   see {Hash Keys}[rdoc-ref:Hash@Hash+Keys].
#   You may find it convenient to keep it simple by using only
#   symbols or strings as keys.
# - Value: the value may be any object that can be marshalled by \Marshal
#   (see {Marshal::dump}[rdoc-ref:Marshal.dump])
#   and in fact may be a collection
#   (e.g., an array, a hash, a set, a range, etc).
#   That collection may in turn contain nested objects,
#   including collections, to any depth;
#   those objects must also be \Marshal-able.
#   See {Hierarchical Values}[rdoc-ref:PStore@Hierarchical+Values].
#
# == Transactions
#
# === The Transaction Block
#
# The block given with a call to method #transaction#
# contains a _transaction_,
# which consists of calls to \PStore methods that
# read from or write to the store
# (that is, all \PStore methods except #transaction itself,
# #path, and Pstore.new):
#
#   example_store do |store|
#     store.transaction do
#       store.keys # => [:foo, :bar, :baz]
#       store[:bat] = 3
#       store.keys # => [:foo, :bar, :baz, :bat]
#     end
#   end
#
# Execution of the transaction is deferred until the block exits,
# and is executed _atomically_ (all-or-nothing):
# either all transaction calls are executed, or none are.
# This maintains the integrity of the store.
#
# Other code in the block (including even calls to #path and PStore.new)
# is executed immediately, not deferred.
#
# The transaction block:
#
# - May not contain a nested call to #transaction.
# - Is the only context where methods that read from or write to
#   the store are allowed.
#
# As seen above, changes in a transaction are made automatically
# when the block exits.
# The block may be exited early by calling method #commit or #abort.
#
# - Method #commit triggers the update to the store and exits the block:
#
#     example_store do |store|
#       store.transaction do
#         store.keys # => [:foo, :bar, :baz]
#         store[:bat] = 3
#         store.commit
#         fail 'Cannot get here'
#       end
#       store.transaction do
#         # Update was completed.
#         store.keys # => [:foo, :bar, :baz, :bat]
#       end
#     end
#
# - Method #abort discards the update to the store and exits the block:
#
#     example_store do |store|
#       store.transaction do
#         store.keys # => [:foo, :bar, :baz]
#         store[:bat] = 3
#         store.abort
#         fail 'Cannot get here'
#       end
#       store.transaction do
#         # Update was not completed.
#         store.keys # => [:foo, :bar, :baz]
#       end
#     end
#
# === Read-Only Transactions
#
# By default, a transaction allows both reading from and writing to
# the store:
#
#   store.transaction do
#     # Read-write transaction.
#     # Any code except a call to #transaction is allowed here.
#   end
#
# If argument +read_only+ is passed as +true+,
# only reading is allowed:
#
#   store.transaction(true) do
#     # Read-only transaction:
#     # Calls to #transaction, #[]=, and #delete are not allowed here.
#   end
#
# == Hierarchical Values
#
# The value for an entry may be a simple object (as seen above).
# It may also be a hierarchy of objects nested to any depth:
#
#   deep_store = PStore.new('deep.store')
#   deep_store.transaction do
#     array_of_hashes = [{}, {}, {}]
#     deep_store[:array_of_hashes] = array_of_hashes
#     deep_store[:array_of_hashes] # => [{}, {}, {}]
#     hash_of_arrays = {foo: [], bar: [], baz: []}
#     deep_store[:hash_of_arrays] = hash_of_arrays
#     deep_store[:hash_of_arrays]  # => {:foo=>[], :bar=>[], :baz=>[]}
#     deep_store[:hash_of_arrays][:foo].push(:bat)
#     deep_store[:hash_of_arrays]  # => {:foo=>[:bat], :bar=>[], :baz=>[]}
#   end
#
# And recall that you can use
# {dig methods}[rdoc-ref:dig_methods.rdoc]
# in a returned hierarchy of objects.
#
# == Working with the Store
#
# === Creating a Store
#
# Use method PStore.new to create a store.
# The new store creates or opens its containing file:
#
#   store = PStore.new('t.store')
#
# === Modifying the Store
#
# Use method #[]= to update or create an entry:
#
#   example_store do |store|
#     store.transaction do
#       store[:foo] = 1 # Update.
#       store[:bam] = 1 # Create.
#     end
#   end
#
# Use method #delete to remove an entry:
#
#   example_store do |store|
#     store.transaction do
#       store.delete(:foo)
#       store[:foo] # => nil
#     end
#   end
#
# === Retrieving Values
#
# Use method #fetch (allows default) or #[] (defaults to +nil+)
# to retrieve an entry:
#
#   example_store do |store|
#     store.transaction do
#       store[:foo]             # => 0
#       store[:nope]            # => nil
#       store.fetch(:baz)       # => 2
#       store.fetch(:nope, nil) # => nil
#       store.fetch(:nope)      # Raises exception.
#     end
#   end
#
# === Querying the Store
#
# Use method #key? to determine whether a given key exists:
#
#   example_store do |store|
#     store.transaction do
#       store.key?(:foo) # => true
#     end
#   end
#
# Use method #keys to retrieve keys:
#
#   example_store do |store|
#     store.transaction do
#       store.keys # => [:foo, :bar, :baz]
#     end
#   end
#
# Use method #path to retrieve the path to the store's underlying file;
# this method may be called from outside a transaction block:
#
#   store = PStore.new('t.store')
#   store.path # => "t.store"
#
# == Transaction Safety
#
# For transaction safety, see:
#
# - Optional argument +thread_safe+ at method PStore.new.
# - Attribute #ultra_safe.
#
# Needless to say, if you're storing valuable data with \PStore, then you should
# backup the \PStore file from time to time.
#
# == An Example Store
#
#  require "pstore"
#
#  # A mock wiki object.
#  class WikiPage
#
#    attr_reader :page_name
#
#    def initialize(page_name, author, contents)
#      @page_name = page_name
#      @revisions = Array.new
#      add_revision(author, contents)
#    end
#
#    def add_revision(author, contents)
#      @revisions << {created: Time.now,
#                     author: author,
#                     contents: contents}
#    end
#
#    def wiki_page_references
#      [@page_name] + @revisions.last[:contents].scan(/\b(?:[A-Z]+[a-z]+){2,}/)
#    end
#
#  end
#
#  # Create a new wiki page.
#  home_page = WikiPage.new("HomePage", "James Edward Gray II",
#                           "A page about the JoysOfDocumentation..." )
#
#  wiki = PStore.new("wiki_pages.pstore")
#  # Update page data and the index together, or not at all.
#  wiki.transaction do
#    # Store page.
#    wiki[home_page.page_name] = home_page
#    # Create page index.
#    wiki[:wiki_index] ||= Array.new
#    # Update wiki index.
#    wiki[:wiki_index].push(*home_page.wiki_page_references)
#  end
#
#  # Read wiki data, setting argument read_only to true.
#  wiki.transaction(true) do
#    wiki.keys.each do |key|
#      puts key
#      puts wiki[key]
#    end
#  end
#
class PStore
  VERSION = "0.1.4"

  RDWR_ACCESS = {mode: IO::RDWR | IO::CREAT | IO::BINARY, encoding: Encoding::ASCII_8BIT}.freeze
  RD_ACCESS = {mode: IO::RDONLY | IO::BINARY, encoding: Encoding::ASCII_8BIT}.freeze
  WR_ACCESS = {mode: IO::WRONLY | IO::CREAT | IO::TRUNC | IO::BINARY, encoding: Encoding::ASCII_8BIT}.freeze

  # The error type thrown by all PStore methods.
  class Error < StandardError
  end

  # Whether \PStore should do its best to prevent file corruptions,
  # even when an unlikely error (such as memory-error or filesystem error) occurs:
  #
  # - +true+: changes are posted by creating a temporary file,
  #   writing the updated data to it, then renaming the file to the given #path.
  #   File integrity is maintained.
  #   Note: has effect only if the filesystem has atomic file rename
  #   (as do POSIX platforms Linux, MacOS, FreeBSD and others).
  #
  # - +false+ (the default): changes are posted by rewinding the open file
  #   and writing the updated data.
  #   File integrity is maintained if the filesystem raises
  #   no unexpected I/O error;
  #   if such an error occurs during a write to the store,
  #   the file may become corrupted.
  #
  attr_accessor :ultra_safe

  # Returns a new \PStore object.
  #
  # Argument +file+ is the path to the file in which objects are to be stored;
  # if the file exists, it should be one that was written by \PStore.
  #
  #   path = 't.store'
  #   store = PStore.new(path)
  #
  # A \PStore object is
  # {reentrant}[https://en.wikipedia.org/wiki/Reentrancy_(computing)].
  # If argument +thread_safe+ is given as +true+,
  # the object is also thread-safe (at the cost of a small performance penalty):
  #
  #   store = PStore.new(path, true)
  #
  def initialize(file, thread_safe = false)
    dir = File::dirname(file)
    unless File::directory? dir
      raise PStore::Error, format("directory %s does not exist", dir)
    end
    if File::exist? file and not File::readable? file
      raise PStore::Error, format("file %s not readable", file)
    end
    @filename = file
    @abort = false
    @ultra_safe = false
    @thread_safe = thread_safe
    @lock = Thread::Mutex.new
  end

  # Raises PStore::Error if the calling code is not in a PStore#transaction.
  def in_transaction
    raise PStore::Error, "not in transaction" unless @lock.locked?
  end
  #
  # Raises PStore::Error if the calling code is not in a PStore#transaction or
  # if the code is in a read-only PStore#transaction.
  #
  def in_transaction_wr
    in_transaction
    raise PStore::Error, "in read-only transaction" if @rdonly
  end
  private :in_transaction, :in_transaction_wr

  # Returns the value for the given +key+ if the key exists.
  # +nil+ otherwise;
  # if not +nil+, the returned value is an object or a hierarchy of objects:
  #
  #   example_store do |store|
  #     store.transaction do
  #       store[:foo]  # => 0
  #       store[:nope] # => nil
  #     end
  #   end
  #
  # Returns +nil+ if there is no such key.
  #
  # See also {Hierarchical Values}[rdoc-ref:PStore@Hierarchical+Values].
  #
  # Raises an exception if called outside a transaction block.
  def [](key)
    in_transaction
    @table[key]
  end

  # Like #[], except that it accepts a default value for the store.
  # If the +key+ does not exist:
  #
  # - Raises an exception if +default+ is +PStore::Error+.
  # - Returns the value of +default+ otherwise:
  #
  #     example_store do |store|
  #       store.transaction do
  #         store.fetch(:nope, nil) # => nil
  #         store.fetch(:nope)      # Raises an exception.
  #       end
  #     end
  #
  # Raises an exception if called outside a transaction block.
  def fetch(key, default=PStore::Error)
    in_transaction
    unless @table.key? key
      if default == PStore::Error
        raise PStore::Error, format("undefined key '%s'", key)
      else
        return default
      end
    end
    @table[key]
  end

  # Creates or replaces the value for the given +key+:
  #
  #   example_store do |store|
  #     temp.transaction do
  #       temp[:bat] = 3
  #     end
  #   end
  #
  # See also {Hierarchical Values}[rdoc-ref:PStore@Hierarchical+Values].
  #
  # Raises an exception if called outside a transaction block.
  def []=(key, value)
    in_transaction_wr
    @table[key] = value
  end

  # Removes and returns the value at +key+ if it exists:
  #
  #   example_store do |store|
  #     store.transaction do
  #       store[:bat] = 3
  #       store.delete(:bat)
  #     end
  #   end
  #
  # Returns +nil+ if there is no such key.
  #
  # Raises an exception if called outside a transaction block.
  def delete(key)
    in_transaction_wr
    @table.delete key
  end

  # Returns an array of the existing keys:
  #
  #   example_store do |store|
  #     store.transaction do
  #       store.keys # => [:foo, :bar, :baz]
  #     end
  #   end
  #
  # Raises an exception if called outside a transaction block.
  def keys
    in_transaction
    @table.keys
  end
  alias roots keys

  # Returns +true+ if +key+ exists, +false+ otherwise:
  #
  #   example_store do |store|
  #     store.transaction do
  #       store.key?(:foo) # => true
  #     end
  #   end
  #
  # Raises an exception if called outside a transaction block.
  def key?(key)
    in_transaction
    @table.key? key
  end
  alias root? key?

  # Returns the string file path used to create the store:
  #
  #   store.path # => "flat.store"
  #
  def path
    @filename
  end

  # Exits the current transaction block, committing any changes
  # specified in the
  # {transaction block}[rdoc-ref:PStore@The+Transaction+Block].
  #
  # Raises an exception if called outside a transaction block.
  def commit
    in_transaction
    @abort = false
    throw :pstore_abort_transaction
  end

  # Exits the current transaction block, discarding any changes
  # specified in the
  # {transaction block}[rdoc-ref:PStore@The+Transaction+Block].
  #
  # Raises an exception if called outside a transaction block.
  def abort
    in_transaction
    @abort = true
    throw :pstore_abort_transaction
  end

  # Opens a transaction block for the store.
  # See {Transactions}[rdoc-ref:PStore@Transactions].
  #
  # With argument +read_only+ as +false+, the block may both read from
  # and write to the store.
  #
  # With argument +read_only+ as +true+, the block may not include calls
  # to #transaction, #[]=, or #delete.
  #
  # Raises an exception if called within a transaction block.
  def transaction(read_only = false)  # :yields:  pstore
    value = nil
    if !@thread_safe
      raise PStore::Error, "nested transaction" unless @lock.try_lock
    else
      begin
        @lock.lock
      rescue ThreadError
        raise PStore::Error, "nested transaction"
      end
    end
    begin
      @rdonly = read_only
      @abort = false
      file = open_and_lock_file(@filename, read_only)
      if file
        begin
          @table, checksum, original_data_size = load_data(file, read_only)

          catch(:pstore_abort_transaction) do
            value = yield(self)
          end

          if !@abort && !read_only
            save_data(checksum, original_data_size, file)
          end
        ensure
          file.close
        end
      else
        # This can only occur if read_only == true.
        @table = {}
        catch(:pstore_abort_transaction) do
          value = yield(self)
        end
      end
    ensure
      @lock.unlock
    end
    value
  end

  private
  # Constant for relieving Ruby's garbage collector.
  CHECKSUM_ALGO = %w[SHA512 SHA384 SHA256 SHA1 RMD160 MD5].each do |algo|
    begin
      break Digest(algo)
    rescue LoadError
    end
  end
  EMPTY_STRING = ""
  EMPTY_MARSHAL_DATA = Marshal.dump({})
  EMPTY_MARSHAL_CHECKSUM = CHECKSUM_ALGO.digest(EMPTY_MARSHAL_DATA)

  #
  # Open the specified filename (either in read-only mode or in
  # read-write mode) and lock it for reading or writing.
  #
  # The opened File object will be returned. If _read_only_ is true,
  # and the file does not exist, then nil will be returned.
  #
  # All exceptions are propagated.
  #
  def open_and_lock_file(filename, read_only)
    if read_only
      begin
        file = File.new(filename, **RD_ACCESS)
        begin
          file.flock(File::LOCK_SH)
          return file
        rescue
          file.close
          raise
        end
      rescue Errno::ENOENT
        return nil
      end
    else
      file = File.new(filename, **RDWR_ACCESS)
      file.flock(File::LOCK_EX)
      return file
    end
  end

  # Load the given PStore file.
  # If +read_only+ is true, the unmarshalled Hash will be returned.
  # If +read_only+ is false, a 3-tuple will be returned: the unmarshalled
  # Hash, a checksum of the data, and the size of the data.
  def load_data(file, read_only)
    if read_only
      begin
        table = load(file)
        raise Error, "PStore file seems to be corrupted." unless table.is_a?(Hash)
      rescue EOFError
        # This seems to be a newly-created file.
        table = {}
      end
      table
    else
      data = file.read
      if data.empty?
        # This seems to be a newly-created file.
        table = {}
        checksum = empty_marshal_checksum
        size = empty_marshal_data.bytesize
      else
        table = load(data)
        checksum = CHECKSUM_ALGO.digest(data)
        size = data.bytesize
        raise Error, "PStore file seems to be corrupted." unless table.is_a?(Hash)
      end
      data.replace(EMPTY_STRING)
      [table, checksum, size]
    end
  end

  def on_windows?
    is_windows = RUBY_PLATFORM =~ /mswin|mingw|bccwin|wince/
    self.class.__send__(:define_method, :on_windows?) do
      is_windows
    end
    is_windows
  end

  def save_data(original_checksum, original_file_size, file)
    new_data = dump(@table)

    if new_data.bytesize != original_file_size || CHECKSUM_ALGO.digest(new_data) != original_checksum
      if @ultra_safe && !on_windows?
        # Windows doesn't support atomic file renames.
        save_data_with_atomic_file_rename_strategy(new_data, file)
      else
        save_data_with_fast_strategy(new_data, file)
      end
    end

    new_data.replace(EMPTY_STRING)
  end

  def save_data_with_atomic_file_rename_strategy(data, file)
    temp_filename = "#{@filename}.tmp.#{Process.pid}.#{rand 1000000}"
    temp_file = File.new(temp_filename, **WR_ACCESS)
    begin
      temp_file.flock(File::LOCK_EX)
      temp_file.write(data)
      temp_file.flush
      File.rename(temp_filename, @filename)
    rescue
      File.unlink(temp_file) rescue nil
      raise
    ensure
      temp_file.close
    end
  end

  def save_data_with_fast_strategy(data, file)
    file.rewind
    file.write(data)
    file.truncate(data.bytesize)
  end


  # This method is just a wrapped around Marshal.dump
  # to allow subclass overriding used in YAML::Store.
  def dump(table)  # :nodoc:
    Marshal::dump(table)
  end

  # This method is just a wrapped around Marshal.load.
  # to allow subclass overriding used in YAML::Store.
  def load(content)  # :nodoc:
    Marshal::load(content)
  end

  def empty_marshal_data
    EMPTY_MARSHAL_DATA
  end
  def empty_marshal_checksum
    EMPTY_MARSHAL_CHECKSUM
  end
end
PK*J[Q�R��share/ruby/strscan/strscan.rbnu�[���# frozen_string_literal: true

class StringScanner
  # call-seq:
  #   scan_integer(base: 10)
  #
  # If `base` isn't provided or is `10`, then it is equivalent to calling `#scan` with a `[+-]?\d+` pattern,
  # and returns an Integer or nil.
  #
  # If `base` is `16`, then it is equivalent to calling `#scan` with a `[+-]?(0x)?[0-9a-fA-F]+` pattern,
  # and returns an Integer or nil.
  #
  # The scanned string must be encoded with an ASCII compatible encoding, otherwise
  # Encoding::CompatibilityError will be raised.
  def scan_integer(base: 10)
    case base
    when 10
      scan_base10_integer
    when 16
      scan_base16_integer
    else
      raise ArgumentError, "Unsupported integer base: #{base.inspect}, expected 10 or 16"
    end
  end
end
PK*J[�'t��[�[share/ruby/resolv.rbnu�[���# frozen_string_literal: true

require 'socket'
require 'timeout'
require 'io/wait'
require 'securerandom'

# Resolv is a thread-aware DNS resolver library written in Ruby.  Resolv can
# handle multiple DNS requests concurrently without blocking the entire Ruby
# interpreter.
#
# See also resolv-replace.rb to replace the libc resolver with Resolv.
#
# Resolv can look up various DNS resources using the DNS module directly.
#
# Examples:
#
#   p Resolv.getaddress "www.ruby-lang.org"
#   p Resolv.getname "210.251.121.214"
#
#   Resolv::DNS.open do |dns|
#     ress = dns.getresources "www.ruby-lang.org", Resolv::DNS::Resource::IN::A
#     p ress.map(&:address)
#     ress = dns.getresources "ruby-lang.org", Resolv::DNS::Resource::IN::MX
#     p ress.map { |r| [r.exchange.to_s, r.preference] }
#   end
#
#
# == Bugs
#
# * NIS is not supported.
# * /etc/nsswitch.conf is not supported.

class Resolv

  VERSION = "0.6.0"

  ##
  # Looks up the first IP address for +name+.

  def self.getaddress(name)
    DefaultResolver.getaddress(name)
  end

  ##
  # Looks up all IP address for +name+.

  def self.getaddresses(name)
    DefaultResolver.getaddresses(name)
  end

  ##
  # Iterates over all IP addresses for +name+.

  def self.each_address(name, &block)
    DefaultResolver.each_address(name, &block)
  end

  ##
  # Looks up the hostname of +address+.

  def self.getname(address)
    DefaultResolver.getname(address)
  end

  ##
  # Looks up all hostnames for +address+.

  def self.getnames(address)
    DefaultResolver.getnames(address)
  end

  ##
  # Iterates over all hostnames for +address+.

  def self.each_name(address, &proc)
    DefaultResolver.each_name(address, &proc)
  end

  ##
  # Creates a new Resolv using +resolvers+.
  #
  # If +resolvers+ is not given, a hash, or +nil+, uses a Hosts resolver and
  # and a DNS resolver.  If +resolvers+ is a hash, uses the hash as
  # configuration for the DNS resolver.

  def initialize(resolvers=(arg_not_set = true; nil), use_ipv6: (keyword_not_set = true; nil))
    if !keyword_not_set && !arg_not_set
      warn "Support for separate use_ipv6 keyword is deprecated, as it is ignored if an argument is provided. Do not provide a positional argument if using the use_ipv6 keyword argument.", uplevel: 1
    end

    @resolvers = case resolvers
    when Hash, nil
      [Hosts.new, DNS.new(DNS::Config.default_config_hash.merge(resolvers || {}))]
    else
      resolvers
    end
  end

  ##
  # Looks up the first IP address for +name+.

  def getaddress(name)
    each_address(name) {|address| return address}
    raise ResolvError.new("no address for #{name}")
  end

  ##
  # Looks up all IP address for +name+.

  def getaddresses(name)
    ret = []
    each_address(name) {|address| ret << address}
    return ret
  end

  ##
  # Iterates over all IP addresses for +name+.

  def each_address(name)
    if AddressRegex =~ name
      yield name
      return
    end
    yielded = false
    @resolvers.each {|r|
      r.each_address(name) {|address|
        yield address.to_s
        yielded = true
      }
      return if yielded
    }
  end

  ##
  # Looks up the hostname of +address+.

  def getname(address)
    each_name(address) {|name| return name}
    raise ResolvError.new("no name for #{address}")
  end

  ##
  # Looks up all hostnames for +address+.

  def getnames(address)
    ret = []
    each_name(address) {|name| ret << name}
    return ret
  end

  ##
  # Iterates over all hostnames for +address+.

  def each_name(address)
    yielded = false
    @resolvers.each {|r|
      r.each_name(address) {|name|
        yield name.to_s
        yielded = true
      }
      return if yielded
    }
  end

  ##
  # Indicates a failure to resolve a name or address.

  class ResolvError < StandardError; end

  ##
  # Indicates a timeout resolving a name or address.

  class ResolvTimeout < Timeout::Error; end

  ##
  # Resolv::Hosts is a hostname resolver that uses the system hosts file.

  class Hosts
    if /mswin|mingw|cygwin/ =~ RUBY_PLATFORM and
      begin
        require 'win32/resolv'
        DefaultFileName = Win32::Resolv.get_hosts_path || IO::NULL
      rescue LoadError
      end
    end
    DefaultFileName ||= '/etc/hosts'

    ##
    # Creates a new Resolv::Hosts, using +filename+ for its data source.

    def initialize(filename = DefaultFileName)
      @filename = filename
      @mutex = Thread::Mutex.new
      @initialized = nil
    end

    def lazy_initialize # :nodoc:
      @mutex.synchronize {
        unless @initialized
          @name2addr = {}
          @addr2name = {}
          File.open(@filename, 'rb') {|f|
            f.each {|line|
              line.sub!(/#.*/, '')
              addr, *hostnames = line.split(/\s+/)
              next unless addr
              (@addr2name[addr] ||= []).concat(hostnames)
              hostnames.each {|hostname| (@name2addr[hostname] ||= []) << addr}
            }
          }
          @name2addr.each {|name, arr| arr.reverse!}
          @initialized = true
        end
      }
      self
    end

    ##
    # Gets the IP address of +name+ from the hosts file.

    def getaddress(name)
      each_address(name) {|address| return address}
      raise ResolvError.new("#{@filename} has no name: #{name}")
    end

    ##
    # Gets all IP addresses for +name+ from the hosts file.

    def getaddresses(name)
      ret = []
      each_address(name) {|address| ret << address}
      return ret
    end

    ##
    # Iterates over all IP addresses for +name+ retrieved from the hosts file.

    def each_address(name, &proc)
      lazy_initialize
      @name2addr[name]&.each(&proc)
    end

    ##
    # Gets the hostname of +address+ from the hosts file.

    def getname(address)
      each_name(address) {|name| return name}
      raise ResolvError.new("#{@filename} has no address: #{address}")
    end

    ##
    # Gets all hostnames for +address+ from the hosts file.

    def getnames(address)
      ret = []
      each_name(address) {|name| ret << name}
      return ret
    end

    ##
    # Iterates over all hostnames for +address+ retrieved from the hosts file.

    def each_name(address, &proc)
      lazy_initialize
      @addr2name[address]&.each(&proc)
    end
  end

  ##
  # Resolv::DNS is a DNS stub resolver.
  #
  # Information taken from the following places:
  #
  # * STD0013
  # * RFC 1035
  # * ftp://ftp.isi.edu/in-notes/iana/assignments/dns-parameters
  # * etc.

  class DNS

    ##
    # Default DNS Port

    Port = 53

    ##
    # Default DNS UDP packet size

    UDPSize = 512

    ##
    # Creates a new DNS resolver.  See Resolv::DNS.new for argument details.
    #
    # Yields the created DNS resolver to the block, if given, otherwise
    # returns it.

    def self.open(*args)
      dns = new(*args)
      return dns unless block_given?
      begin
        yield dns
      ensure
        dns.close
      end
    end

    ##
    # Creates a new DNS resolver.
    #
    # +config_info+ can be:
    #
    # nil:: Uses /etc/resolv.conf.
    # String:: Path to a file using /etc/resolv.conf's format.
    # Hash:: Must contain :nameserver, :search and :ndots keys.
    # :nameserver_port can be used to specify port number of nameserver address.
    # :raise_timeout_errors can be used to raise timeout errors
    # as exceptions instead of treating the same as an NXDOMAIN response.
    #
    # The value of :nameserver should be an address string or
    # an array of address strings.
    # - :nameserver => '8.8.8.8'
    # - :nameserver => ['8.8.8.8', '8.8.4.4']
    #
    # The value of :nameserver_port should be an array of
    # pair of nameserver address and port number.
    # - :nameserver_port => [['8.8.8.8', 53], ['8.8.4.4', 53]]
    #
    # Example:
    #
    #   Resolv::DNS.new(:nameserver => ['210.251.121.21'],
    #                   :search => ['ruby-lang.org'],
    #                   :ndots => 1)

    def initialize(config_info=nil)
      @mutex = Thread::Mutex.new
      @config = Config.new(config_info)
      @initialized = nil
    end

    # Sets the resolver timeouts.  This may be a single positive number
    # or an array of positive numbers representing timeouts in seconds.
    # If an array is specified, a DNS request will retry and wait for
    # each successive interval in the array until a successful response
    # is received.  Specifying +nil+ reverts to the default timeouts:
    # [ 5, second = 5 * 2 / nameserver_count, 2 * second, 4 * second ]
    #
    # Example:
    #
    #   dns.timeouts = 3
    #
    def timeouts=(values)
      @config.timeouts = values
    end

    def lazy_initialize # :nodoc:
      @mutex.synchronize {
        unless @initialized
          @config.lazy_initialize
          @initialized = true
        end
      }
      self
    end

    ##
    # Closes the DNS resolver.

    def close
      @mutex.synchronize {
        if @initialized
          @initialized = false
        end
      }
    end

    ##
    # Gets the IP address of +name+ from the DNS resolver.
    #
    # +name+ can be a Resolv::DNS::Name or a String.  Retrieved address will
    # be a Resolv::IPv4 or Resolv::IPv6

    def getaddress(name)
      each_address(name) {|address| return address}
      raise ResolvError.new("DNS result has no information for #{name}")
    end

    ##
    # Gets all IP addresses for +name+ from the DNS resolver.
    #
    # +name+ can be a Resolv::DNS::Name or a String.  Retrieved addresses will
    # be a Resolv::IPv4 or Resolv::IPv6

    def getaddresses(name)
      ret = []
      each_address(name) {|address| ret << address}
      return ret
    end

    ##
    # Iterates over all IP addresses for +name+ retrieved from the DNS
    # resolver.
    #
    # +name+ can be a Resolv::DNS::Name or a String.  Retrieved addresses will
    # be a Resolv::IPv4 or Resolv::IPv6

    def each_address(name)
      if use_ipv6?
        each_resource(name, Resource::IN::AAAA) {|resource| yield resource.address}
      end
      each_resource(name, Resource::IN::A) {|resource| yield resource.address}
    end

    def use_ipv6? # :nodoc:
      @config.lazy_initialize unless @config.instance_variable_get(:@initialized)

      use_ipv6 = @config.use_ipv6?
      unless use_ipv6.nil?
        return use_ipv6
      end

      begin
        list = Socket.ip_address_list
      rescue NotImplementedError
        return true
      end
      list.any? {|a| a.ipv6? && !a.ipv6_loopback? && !a.ipv6_linklocal? }
    end
    private :use_ipv6?

    ##
    # Gets the hostname for +address+ from the DNS resolver.
    #
    # +address+ must be a Resolv::IPv4, Resolv::IPv6 or a String.  Retrieved
    # name will be a Resolv::DNS::Name.

    def getname(address)
      each_name(address) {|name| return name}
      raise ResolvError.new("DNS result has no information for #{address}")
    end

    ##
    # Gets all hostnames for +address+ from the DNS resolver.
    #
    # +address+ must be a Resolv::IPv4, Resolv::IPv6 or a String.  Retrieved
    # names will be Resolv::DNS::Name instances.

    def getnames(address)
      ret = []
      each_name(address) {|name| ret << name}
      return ret
    end

    ##
    # Iterates over all hostnames for +address+ retrieved from the DNS
    # resolver.
    #
    # +address+ must be a Resolv::IPv4, Resolv::IPv6 or a String.  Retrieved
    # names will be Resolv::DNS::Name instances.

    def each_name(address)
      case address
      when Name
        ptr = address
      when IPv4, IPv6
        ptr = address.to_name
      when IPv4::Regex
        ptr = IPv4.create(address).to_name
      when IPv6::Regex
        ptr = IPv6.create(address).to_name
      else
        raise ResolvError.new("cannot interpret as address: #{address}")
      end
      each_resource(ptr, Resource::IN::PTR) {|resource| yield resource.name}
    end

    ##
    # Look up the +typeclass+ DNS resource of +name+.
    #
    # +name+ must be a Resolv::DNS::Name or a String.
    #
    # +typeclass+ should be one of the following:
    #
    # * Resolv::DNS::Resource::IN::A
    # * Resolv::DNS::Resource::IN::AAAA
    # * Resolv::DNS::Resource::IN::ANY
    # * Resolv::DNS::Resource::IN::CNAME
    # * Resolv::DNS::Resource::IN::HINFO
    # * Resolv::DNS::Resource::IN::MINFO
    # * Resolv::DNS::Resource::IN::MX
    # * Resolv::DNS::Resource::IN::NS
    # * Resolv::DNS::Resource::IN::PTR
    # * Resolv::DNS::Resource::IN::SOA
    # * Resolv::DNS::Resource::IN::TXT
    # * Resolv::DNS::Resource::IN::WKS
    #
    # Returned resource is represented as a Resolv::DNS::Resource instance,
    # i.e. Resolv::DNS::Resource::IN::A.

    def getresource(name, typeclass)
      each_resource(name, typeclass) {|resource| return resource}
      raise ResolvError.new("DNS result has no information for #{name}")
    end

    ##
    # Looks up all +typeclass+ DNS resources for +name+.  See #getresource for
    # argument details.

    def getresources(name, typeclass)
      ret = []
      each_resource(name, typeclass) {|resource| ret << resource}
      return ret
    end

    ##
    # Iterates over all +typeclass+ DNS resources for +name+.  See
    # #getresource for argument details.

    def each_resource(name, typeclass, &proc)
      fetch_resource(name, typeclass) {|reply, reply_name|
        extract_resources(reply, reply_name, typeclass, &proc)
      }
    end

    def fetch_resource(name, typeclass)
      lazy_initialize
      truncated = {}
      requesters = {}
      udp_requester = begin
        make_udp_requester
      rescue Errno::EACCES
        # fall back to TCP
      end
      senders = {}

      begin
        @config.resolv(name) do |candidate, tout, nameserver, port|
          msg = Message.new
          msg.rd = 1
          msg.add_question(candidate, typeclass)

          requester = requesters.fetch([nameserver, port]) do
            if !truncated[candidate] && udp_requester
              udp_requester
            else
              requesters[[nameserver, port]] = make_tcp_requester(nameserver, port)
            end
          end

          unless sender = senders[[candidate, requester, nameserver, port]]
            sender = requester.sender(msg, candidate, nameserver, port)
            next if !sender
            senders[[candidate, requester, nameserver, port]] = sender
          end
          reply, reply_name = requester.request(sender, tout)
          case reply.rcode
          when RCode::NoError
            if reply.tc == 1 and not Requester::TCP === requester
              # Retry via TCP:
              truncated[candidate] = true
              redo
            else
              yield(reply, reply_name)
            end
            return
          when RCode::NXDomain
            raise Config::NXDomain.new(reply_name.to_s)
          else
            raise Config::OtherResolvError.new(reply_name.to_s)
          end
        end
      ensure
        udp_requester&.close
        requesters.each_value { |requester| requester&.close }
      end
    end

    def make_udp_requester # :nodoc:
      nameserver_port = @config.nameserver_port
      if nameserver_port.length == 1
        Requester::ConnectedUDP.new(*nameserver_port[0])
      else
        Requester::UnconnectedUDP.new(*nameserver_port)
      end
    end

    def make_tcp_requester(host, port) # :nodoc:
      return Requester::TCP.new(host, port)
    rescue Errno::ECONNREFUSED
      # Treat a refused TCP connection attempt to a nameserver like a timeout,
      # as Resolv::DNS::Config#resolv considers ResolvTimeout exceptions as a
      # hint to try the next nameserver:
      raise ResolvTimeout
    end

    def extract_resources(msg, name, typeclass) # :nodoc:
      if typeclass < Resource::ANY
        n0 = Name.create(name)
        msg.each_resource {|n, ttl, data|
          yield data if n0 == n
        }
      end
      yielded = false
      n0 = Name.create(name)
      msg.each_resource {|n, ttl, data|
        if n0 == n
          case data
          when typeclass
            yield data
            yielded = true
          when Resource::CNAME
            n0 = data.name
          end
        end
      }
      return if yielded
      msg.each_resource {|n, ttl, data|
        if n0 == n
          case data
          when typeclass
            yield data
          end
        end
      }
    end

    def self.random(arg) # :nodoc:
      begin
        SecureRandom.random_number(arg)
      rescue NotImplementedError
        rand(arg)
      end
    end

    RequestID = {} # :nodoc:
    RequestIDMutex = Thread::Mutex.new # :nodoc:

    def self.allocate_request_id(host, port) # :nodoc:
      id = nil
      RequestIDMutex.synchronize {
        h = (RequestID[[host, port]] ||= {})
        begin
          id = random(0x0000..0xffff)
        end while h[id]
        h[id] = true
      }
      id
    end

    def self.free_request_id(host, port, id) # :nodoc:
      RequestIDMutex.synchronize {
        key = [host, port]
        if h = RequestID[key]
          h.delete id
          if h.empty?
            RequestID.delete key
          end
        end
      }
    end

    def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
      begin
        port = random(1024..65535)
        udpsock.bind(bind_host, port)
      rescue Errno::EADDRINUSE, # POSIX
             Errno::EACCES, # SunOS: See PRIV_SYS_NFS in privileges(5)
             Errno::EPERM # FreeBSD: security.mac.portacl.port_high is configurable.  See mac_portacl(4).
        retry
      end
    end

    class Requester # :nodoc:
      def initialize
        @senders = {}
        @socks = nil
      end

      def request(sender, tout)
        start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
        timelimit = start + tout
        begin
          sender.send
        rescue Errno::EHOSTUNREACH, # multi-homed IPv6 may generate this
               Errno::ENETUNREACH
          raise ResolvTimeout
        end
        while true
          before_select = Process.clock_gettime(Process::CLOCK_MONOTONIC)
          timeout = timelimit - before_select
          if timeout <= 0
            raise ResolvTimeout
          end
          if @socks.size == 1
            select_result = @socks[0].wait_readable(timeout) ? [ @socks ] : nil
          else
            select_result = IO.select(@socks, nil, nil, timeout)
          end
          if !select_result
            after_select = Process.clock_gettime(Process::CLOCK_MONOTONIC)
            next if after_select < timelimit
            raise ResolvTimeout
          end
          begin
            reply, from = recv_reply(select_result[0])
          rescue Errno::ECONNREFUSED, # GNU/Linux, FreeBSD
                 Errno::ECONNRESET # Windows
            # No name server running on the server?
            # Don't wait anymore.
            raise ResolvTimeout
          end
          begin
            msg = Message.decode(reply)
          rescue DecodeError
            next # broken DNS message ignored
          end
          if sender == sender_for(from, msg)
            break
          else
            # unexpected DNS message ignored
          end
        end
        return msg, sender.data
      end

      def sender_for(addr, msg)
        @senders[[addr,msg.id]]
      end

      def close
        socks = @socks
        @socks = nil
        socks&.each(&:close)
      end

      class Sender # :nodoc:
        def initialize(msg, data, sock)
          @msg = msg
          @data = data
          @sock = sock
        end
      end

      class UnconnectedUDP < Requester # :nodoc:
        def initialize(*nameserver_port)
          super()
          @nameserver_port = nameserver_port
          @initialized = false
          @mutex = Thread::Mutex.new
        end

        def lazy_initialize
          @mutex.synchronize {
            next if @initialized
            @initialized = true
            @socks_hash = {}
            @socks = []
            @nameserver_port.each {|host, port|
              if host.index(':')
                bind_host = "::"
                af = Socket::AF_INET6
              else
                bind_host = "0.0.0.0"
                af = Socket::AF_INET
              end
              next if @socks_hash[bind_host]
              begin
                sock = UDPSocket.new(af)
              rescue Errno::EAFNOSUPPORT, Errno::EPROTONOSUPPORT
                next # The kernel doesn't support the address family.
              end
              @socks << sock
              @socks_hash[bind_host] = sock
              sock.do_not_reverse_lookup = true
              DNS.bind_random_port(sock, bind_host)
            }
          }
          self
        end

        def recv_reply(readable_socks)
          lazy_initialize
          reply, from = readable_socks[0].recvfrom(UDPSize)
          return reply, [from[3],from[1]]
        end

        def sender(msg, data, host, port=Port)
          host = Addrinfo.ip(host).ip_address
          lazy_initialize
          sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
          return nil if !sock
          service = [host, port]
          id = DNS.allocate_request_id(host, port)
          request = msg.encode
          request[0,2] = [id].pack('n')
          return @senders[[service, id]] =
            Sender.new(request, data, sock, host, port)
        end

        def close
          @mutex.synchronize {
            if @initialized
              super
              @senders.each_key {|service, id|
                DNS.free_request_id(service[0], service[1], id)
              }
              @initialized = false
            end
          }
        end

        class Sender < Requester::Sender # :nodoc:
          def initialize(msg, data, sock, host, port)
            super(msg, data, sock)
            @host = host
            @port = port
          end
          attr_reader :data

          def send
            raise "@sock is nil." if @sock.nil?
            @sock.send(@msg, 0, @host, @port)
          end
        end
      end

      class ConnectedUDP < Requester # :nodoc:
        def initialize(host, port=Port)
          super()
          @host = host
          @port = port
          @mutex = Thread::Mutex.new
          @initialized = false
        end

        def lazy_initialize
          @mutex.synchronize {
            next if @initialized
            @initialized = true
            is_ipv6 = @host.index(':')
            sock = UDPSocket.new(is_ipv6 ? Socket::AF_INET6 : Socket::AF_INET)
            @socks = [sock]
            sock.do_not_reverse_lookup = true
            DNS.bind_random_port(sock, is_ipv6 ? "::" : "0.0.0.0")
            sock.connect(@host, @port)
          }
          self
        end

        def recv_reply(readable_socks)
          lazy_initialize
          reply = readable_socks[0].recv(UDPSize)
          return reply, nil
        end

        def sender(msg, data, host=@host, port=@port)
          lazy_initialize
          unless host == @host && port == @port
            raise RequestError.new("host/port don't match: #{host}:#{port}")
          end
          id = DNS.allocate_request_id(@host, @port)
          request = msg.encode
          request[0,2] = [id].pack('n')
          return @senders[[nil,id]] = Sender.new(request, data, @socks[0])
        end

        def close
          @mutex.synchronize do
            if @initialized
              super
              @senders.each_key {|from, id|
                DNS.free_request_id(@host, @port, id)
              }
              @initialized = false
            end
          end
        end

        class Sender < Requester::Sender # :nodoc:
          def send
            raise "@sock is nil." if @sock.nil?
            @sock.send(@msg, 0)
          end
          attr_reader :data
        end
      end

      class MDNSOneShot < UnconnectedUDP # :nodoc:
        def sender(msg, data, host, port=Port)
          lazy_initialize
          id = DNS.allocate_request_id(host, port)
          request = msg.encode
          request[0,2] = [id].pack('n')
          sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
          return @senders[id] =
            UnconnectedUDP::Sender.new(request, data, sock, host, port)
        end

        def sender_for(addr, msg)
          lazy_initialize
          @senders[msg.id]
        end
      end

      class TCP < Requester # :nodoc:
        def initialize(host, port=Port)
          super()
          @host = host
          @port = port
          sock = TCPSocket.new(@host, @port)
          @socks = [sock]
          @senders = {}
        end

        def recv_reply(readable_socks)
          len = readable_socks[0].read(2).unpack('n')[0]
          reply = @socks[0].read(len)
          return reply, nil
        end

        def sender(msg, data, host=@host, port=@port)
          unless host == @host && port == @port
            raise RequestError.new("host/port don't match: #{host}:#{port}")
          end
          id = DNS.allocate_request_id(@host, @port)
          request = msg.encode
          request[0,2] = [request.length, id].pack('nn')
          return @senders[[nil,id]] = Sender.new(request, data, @socks[0])
        end

        class Sender < Requester::Sender # :nodoc:
          def send
            @sock.print(@msg)
            @sock.flush
          end
          attr_reader :data
        end

        def close
          super
          @senders.each_key {|from,id|
            DNS.free_request_id(@host, @port, id)
          }
        end
      end

      ##
      # Indicates a problem with the DNS request.

      class RequestError < StandardError
      end
    end

    class Config # :nodoc:
      def initialize(config_info=nil)
        @mutex = Thread::Mutex.new
        @config_info = config_info
        @initialized = nil
        @timeouts = nil
      end

      def timeouts=(values)
        if values
          values = Array(values)
          values.each do |t|
            Numeric === t or raise ArgumentError, "#{t.inspect} is not numeric"
            t > 0.0 or raise ArgumentError, "timeout=#{t} must be positive"
          end
          @timeouts = values
        else
          @timeouts = nil
        end
      end

      def Config.parse_resolv_conf(filename)
        nameserver = []
        search = nil
        ndots = 1
        File.open(filename, 'rb') {|f|
          f.each {|line|
            line.sub!(/[#;].*/, '')
            keyword, *args = line.split(/\s+/)
            next unless keyword
            case keyword
            when 'nameserver'
              nameserver.concat(args)
            when 'domain'
              next if args.empty?
              search = [args[0]]
            when 'search'
              next if args.empty?
              search = args
            when 'options'
              args.each {|arg|
                case arg
                when /\Andots:(\d+)\z/
                  ndots = $1.to_i
                end
              }
            end
          }
        }
        return { :nameserver => nameserver, :search => search, :ndots => ndots }
      end

      def Config.default_config_hash(filename="/etc/resolv.conf")
        if File.exist? filename
          config_hash = Config.parse_resolv_conf(filename)
        else
          if /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM
            require 'win32/resolv'
            search, nameserver = Win32::Resolv.get_resolv_info
            config_hash = {}
            config_hash[:nameserver] = nameserver if nameserver
            config_hash[:search] = [search].flatten if search
          end
        end
        config_hash || {}
      end

      def lazy_initialize
        @mutex.synchronize {
          unless @initialized
            @nameserver_port = []
            @use_ipv6 = nil
            @search = nil
            @ndots = 1
            case @config_info
            when nil
              config_hash = Config.default_config_hash
            when String
              config_hash = Config.parse_resolv_conf(@config_info)
            when Hash
              config_hash = @config_info.dup
              if String === config_hash[:nameserver]
                config_hash[:nameserver] = [config_hash[:nameserver]]
              end
              if String === config_hash[:search]
                config_hash[:search] = [config_hash[:search]]
              end
            else
              raise ArgumentError.new("invalid resolv configuration: #{@config_info.inspect}")
            end
            if config_hash.include? :nameserver
              @nameserver_port = config_hash[:nameserver].map {|ns| [ns, Port] }
            end
            if config_hash.include? :nameserver_port
              @nameserver_port = config_hash[:nameserver_port].map {|ns, port| [ns, (port || Port)] }
            end
            if config_hash.include? :use_ipv6
              @use_ipv6 = config_hash[:use_ipv6]
            end
            @search = config_hash[:search] if config_hash.include? :search
            @ndots = config_hash[:ndots] if config_hash.include? :ndots
            @raise_timeout_errors = config_hash[:raise_timeout_errors]

            if @nameserver_port.empty?
              @nameserver_port << ['0.0.0.0', Port]
            end
            if @search
              @search = @search.map {|arg| Label.split(arg) }
            else
              hostname = Socket.gethostname
              if /\./ =~ hostname
                @search = [Label.split($')]
              else
                @search = [[]]
              end
            end

            if !@nameserver_port.kind_of?(Array) ||
               @nameserver_port.any? {|ns_port|
                  !(Array === ns_port) ||
                  ns_port.length != 2
                  !(String === ns_port[0]) ||
                  !(Integer === ns_port[1])
               }
              raise ArgumentError.new("invalid nameserver config: #{@nameserver_port.inspect}")
            end

            if !@search.kind_of?(Array) ||
               !@search.all? {|ls| ls.all? {|l| Label::Str === l } }
              raise ArgumentError.new("invalid search config: #{@search.inspect}")
            end

            if !@ndots.kind_of?(Integer)
              raise ArgumentError.new("invalid ndots config: #{@ndots.inspect}")
            end

            @initialized = true
          end
        }
        self
      end

      def single?
        lazy_initialize
        if @nameserver_port.length == 1
          return @nameserver_port[0]
        else
          return nil
        end
      end

      def nameserver_port
        @nameserver_port
      end

      def use_ipv6?
        @use_ipv6
      end

      def generate_candidates(name)
        candidates = nil
        name = Name.create(name)
        if name.absolute?
          candidates = [name]
        else
          if @ndots <= name.length - 1
            candidates = [Name.new(name.to_a)]
          else
            candidates = []
          end
          candidates.concat(@search.map {|domain| Name.new(name.to_a + domain)})
          fname = Name.create("#{name}.")
          if !candidates.include?(fname)
            candidates << fname
          end
        end
        return candidates
      end

      InitialTimeout = 5

      def generate_timeouts
        ts = [InitialTimeout]
        ts << ts[-1] * 2 / @nameserver_port.length
        ts << ts[-1] * 2
        ts << ts[-1] * 2
        return ts
      end

      def resolv(name)
        candidates = generate_candidates(name)
        timeouts = @timeouts || generate_timeouts
        timeout_error = false
        begin
          candidates.each {|candidate|
            begin
              timeouts.each {|tout|
                @nameserver_port.each {|nameserver, port|
                  begin
                    yield candidate, tout, nameserver, port
                  rescue ResolvTimeout
                  end
                }
              }
              timeout_error = true
              raise ResolvError.new("DNS resolv timeout: #{name}")
            rescue NXDomain
            end
          }
        rescue ResolvError
          raise if @raise_timeout_errors && timeout_error
        end
      end

      ##
      # Indicates no such domain was found.

      class NXDomain < ResolvError
      end

      ##
      # Indicates some other unhandled resolver error was encountered.

      class OtherResolvError < ResolvError
      end
    end

    module OpCode # :nodoc:
      Query = 0
      IQuery = 1
      Status = 2
      Notify = 4
      Update = 5
    end

    module RCode # :nodoc:
      NoError = 0
      FormErr = 1
      ServFail = 2
      NXDomain = 3
      NotImp = 4
      Refused = 5
      YXDomain = 6
      YXRRSet = 7
      NXRRSet = 8
      NotAuth = 9
      NotZone = 10
      BADVERS = 16
      BADSIG = 16
      BADKEY = 17
      BADTIME = 18
      BADMODE = 19
      BADNAME = 20
      BADALG = 21
    end

    ##
    # Indicates that the DNS response was unable to be decoded.

    class DecodeError < StandardError
    end

    ##
    # Indicates that the DNS request was unable to be encoded.

    class EncodeError < StandardError
    end

    module Label # :nodoc:
      def self.split(arg)
        labels = []
        arg.scan(/[^\.]+/) {labels << Str.new($&)}
        return labels
      end

      class Str # :nodoc:
        def initialize(string)
          @string = string
          # case insensivity of DNS labels doesn't apply non-ASCII characters. [RFC 4343]
          # This assumes @string is given in ASCII compatible encoding.
          @downcase = string.b.downcase
        end
        attr_reader :string, :downcase

        def to_s
          return @string
        end

        def inspect
          return "#<#{self.class} #{self}>"
        end

        def ==(other)
          return self.class == other.class && @downcase == other.downcase
        end

        def eql?(other)
          return self == other
        end

        def hash
          return @downcase.hash
        end
      end
    end

    ##
    # A representation of a DNS name.

    class Name

      ##
      # Creates a new DNS name from +arg+.  +arg+ can be:
      #
      # Name:: returns +arg+.
      # String:: Creates a new Name.

      def self.create(arg)
        case arg
        when Name
          return arg
        when String
          return Name.new(Label.split(arg), /\.\z/ =~ arg ? true : false)
        else
          raise ArgumentError.new("cannot interpret as DNS name: #{arg.inspect}")
        end
      end

      def initialize(labels, absolute=true) # :nodoc:
        labels = labels.map {|label|
          case label
          when String then Label::Str.new(label)
          when Label::Str then label
          else
            raise ArgumentError, "unexpected label: #{label.inspect}"
          end
        }
        @labels = labels
        @absolute = absolute
      end

      def inspect # :nodoc:
        "#<#{self.class}: #{self}#{@absolute ? '.' : ''}>"
      end

      ##
      # True if this name is absolute.

      def absolute?
        return @absolute
      end

      def ==(other) # :nodoc:
        return false unless Name === other
        return false unless @absolute == other.absolute?
        return @labels == other.to_a
      end

      alias eql? == # :nodoc:

      ##
      # Returns true if +other+ is a subdomain.
      #
      # Example:
      #
      #   domain = Resolv::DNS::Name.create("y.z")
      #   p Resolv::DNS::Name.create("w.x.y.z").subdomain_of?(domain) #=> true
      #   p Resolv::DNS::Name.create("x.y.z").subdomain_of?(domain) #=> true
      #   p Resolv::DNS::Name.create("y.z").subdomain_of?(domain) #=> false
      #   p Resolv::DNS::Name.create("z").subdomain_of?(domain) #=> false
      #   p Resolv::DNS::Name.create("x.y.z.").subdomain_of?(domain) #=> false
      #   p Resolv::DNS::Name.create("w.z").subdomain_of?(domain) #=> false
      #

      def subdomain_of?(other)
        raise ArgumentError, "not a domain name: #{other.inspect}" unless Name === other
        return false if @absolute != other.absolute?
        other_len = other.length
        return false if @labels.length <= other_len
        return @labels[-other_len, other_len] == other.to_a
      end

      def hash # :nodoc:
        return @labels.hash ^ @absolute.hash
      end

      def to_a # :nodoc:
        return @labels
      end

      def length # :nodoc:
        return @labels.length
      end

      def [](i) # :nodoc:
        return @labels[i]
      end

      ##
      # returns the domain name as a string.
      #
      # The domain name doesn't have a trailing dot even if the name object is
      # absolute.
      #
      # Example:
      #
      #   p Resolv::DNS::Name.create("x.y.z.").to_s #=> "x.y.z"
      #   p Resolv::DNS::Name.create("x.y.z").to_s #=> "x.y.z"

      def to_s
        return @labels.join('.')
      end
    end

    class Message # :nodoc:
      @@identifier = -1

      def initialize(id = (@@identifier += 1) & 0xffff)
        @id = id
        @qr = 0
        @opcode = 0
        @aa = 0
        @tc = 0
        @rd = 0 # recursion desired
        @ra = 0 # recursion available
        @rcode = 0
        @question = []
        @answer = []
        @authority = []
        @additional = []
      end

      attr_accessor :id, :qr, :opcode, :aa, :tc, :rd, :ra, :rcode
      attr_reader :question, :answer, :authority, :additional

      def ==(other)
        return @id == other.id &&
               @qr == other.qr &&
               @opcode == other.opcode &&
               @aa == other.aa &&
               @tc == other.tc &&
               @rd == other.rd &&
               @ra == other.ra &&
               @rcode == other.rcode &&
               @question == other.question &&
               @answer == other.answer &&
               @authority == other.authority &&
               @additional == other.additional
      end

      def add_question(name, typeclass)
        @question << [Name.create(name), typeclass]
      end

      def each_question
        @question.each {|name, typeclass|
          yield name, typeclass
        }
      end

      def add_answer(name, ttl, data)
        @answer << [Name.create(name), ttl, data]
      end

      def each_answer
        @answer.each {|name, ttl, data|
          yield name, ttl, data
        }
      end

      def add_authority(name, ttl, data)
        @authority << [Name.create(name), ttl, data]
      end

      def each_authority
        @authority.each {|name, ttl, data|
          yield name, ttl, data
        }
      end

      def add_additional(name, ttl, data)
        @additional << [Name.create(name), ttl, data]
      end

      def each_additional
        @additional.each {|name, ttl, data|
          yield name, ttl, data
        }
      end

      def each_resource
        each_answer {|name, ttl, data| yield name, ttl, data}
        each_authority {|name, ttl, data| yield name, ttl, data}
        each_additional {|name, ttl, data| yield name, ttl, data}
      end

      def encode
        return MessageEncoder.new {|msg|
          msg.put_pack('nnnnnn',
            @id,
            (@qr & 1) << 15 |
            (@opcode & 15) << 11 |
            (@aa & 1) << 10 |
            (@tc & 1) << 9 |
            (@rd & 1) << 8 |
            (@ra & 1) << 7 |
            (@rcode & 15),
            @question.length,
            @answer.length,
            @authority.length,
            @additional.length)
          @question.each {|q|
            name, typeclass = q
            msg.put_name(name)
            msg.put_pack('nn', typeclass::TypeValue, typeclass::ClassValue)
          }
          [@answer, @authority, @additional].each {|rr|
            rr.each {|r|
              name, ttl, data = r
              msg.put_name(name)
              msg.put_pack('nnN', data.class::TypeValue, data.class::ClassValue, ttl)
              msg.put_length16 {data.encode_rdata(msg)}
            }
          }
        }.to_s
      end

      class MessageEncoder # :nodoc:
        def initialize
          @data = ''.dup
          @names = {}
          yield self
        end

        def to_s
          return @data
        end

        def put_bytes(d)
          @data << d
        end

        def put_pack(template, *d)
          @data << d.pack(template)
        end

        def put_length16
          length_index = @data.length
          @data << "\0\0"
          data_start = @data.length
          yield
          data_end = @data.length
          @data[length_index, 2] = [data_end - data_start].pack("n")
        end

        def put_string(d)
          self.put_pack("C", d.length)
          @data << d
        end

        def put_string_list(ds)
          ds.each {|d|
            self.put_string(d)
          }
        end

        def put_name(d, compress: true)
          put_labels(d.to_a, compress: compress)
        end

        def put_labels(d, compress: true)
          d.each_index {|i|
            domain = d[i..-1]
            if compress && idx = @names[domain]
              self.put_pack("n", 0xc000 | idx)
              return
            else
              if @data.length < 0x4000
                @names[domain] = @data.length
              end
              self.put_label(d[i])
            end
          }
          @data << "\0"
        end

        def put_label(d)
          self.put_string(d.to_s)
        end
      end

      def Message.decode(m)
        o = Message.new(0)
        MessageDecoder.new(m) {|msg|
          id, flag, qdcount, ancount, nscount, arcount =
            msg.get_unpack('nnnnnn')
          o.id = id
          o.tc = (flag >> 9) & 1
          o.rcode = flag & 15
          return o unless o.tc.zero?

          o.qr = (flag >> 15) & 1
          o.opcode = (flag >> 11) & 15
          o.aa = (flag >> 10) & 1
          o.rd = (flag >> 8) & 1
          o.ra = (flag >> 7) & 1
          (1..qdcount).each {
            name, typeclass = msg.get_question
            o.add_question(name, typeclass)
          }
          (1..ancount).each {
            name, ttl, data = msg.get_rr
            o.add_answer(name, ttl, data)
          }
          (1..nscount).each {
            name, ttl, data = msg.get_rr
            o.add_authority(name, ttl, data)
          }
          (1..arcount).each {
            name, ttl, data = msg.get_rr
            o.add_additional(name, ttl, data)
          }
        }
        return o
      end

      class MessageDecoder # :nodoc:
        def initialize(data)
          @data = data
          @index = 0
          @limit = data.bytesize
          yield self
        end

        def inspect
          "\#<#{self.class}: #{@data.byteslice(0, @index).inspect} #{@data.byteslice(@index..-1).inspect}>"
        end

        def get_length16
          len, = self.get_unpack('n')
          save_limit = @limit
          @limit = @index + len
          d = yield(len)
          if @index < @limit
            raise DecodeError.new("junk exists")
          elsif @limit < @index
            raise DecodeError.new("limit exceeded")
          end
          @limit = save_limit
          return d
        end

        def get_bytes(len = @limit - @index)
          raise DecodeError.new("limit exceeded") if @limit < @index + len
          d = @data.byteslice(@index, len)
          @index += len
          return d
        end

        def get_unpack(template)
          len = 0
          template.each_byte {|byte|
            byte = "%c" % byte
            case byte
            when ?c, ?C
              len += 1
            when ?n
              len += 2
            when ?N
              len += 4
            else
              raise StandardError.new("unsupported template: '#{byte.chr}' in '#{template}'")
            end
          }
          raise DecodeError.new("limit exceeded") if @limit < @index + len
          arr = @data.unpack("@#{@index}#{template}")
          @index += len
          return arr
        end

        def get_string
          raise DecodeError.new("limit exceeded") if @limit <= @index
          len = @data.getbyte(@index)
          raise DecodeError.new("limit exceeded") if @limit < @index + 1 + len
          d = @data.byteslice(@index + 1, len)
          @index += 1 + len
          return d
        end

        def get_string_list
          strings = []
          while @index < @limit
            strings << self.get_string
          end
          strings
        end

        def get_list
          [].tap do |values|
            while @index < @limit
              values << yield
            end
          end
        end

        def get_name
          return Name.new(self.get_labels)
        end

        def get_labels
          prev_index = @index
          save_index = nil
          d = []
          while true
            raise DecodeError.new("limit exceeded") if @limit <= @index
            case @data.getbyte(@index)
            when 0
              @index += 1
              if save_index
                @index = save_index
              end
              return d
            when 192..255
              idx = self.get_unpack('n')[0] & 0x3fff
              if prev_index <= idx
                raise DecodeError.new("non-backward name pointer")
              end
              prev_index = idx
              if !save_index
                save_index = @index
              end
              @index = idx
            else
              d << self.get_label
            end
          end
        end

        def get_label
          return Label::Str.new(self.get_string)
        end

        def get_question
          name = self.get_name
          type, klass = self.get_unpack("nn")
          return name, Resource.get_class(type, klass)
        end

        def get_rr
          name = self.get_name
          type, klass, ttl = self.get_unpack('nnN')
          typeclass = Resource.get_class(type, klass)
          res = self.get_length16 do
            begin
              typeclass.decode_rdata self
            rescue => e
              raise DecodeError, e.message, e.backtrace
            end
          end
          res.instance_variable_set :@ttl, ttl
          return name, ttl, res
        end
      end
    end

    ##
    # SvcParams for service binding RRs. [RFC9460]

    class SvcParams
      include Enumerable

      ##
      # Create a list of SvcParams with the given initial content.
      #
      # +params+ has to be an enumerable of +SvcParam+s.
      # If its content has +SvcParam+s with the duplicate key,
      # the one appears last takes precedence.

      def initialize(params = [])
        @params = {}

        params.each do |param|
          add param
        end
      end

      ##
      # Get SvcParam for the given +key+ in this list.

      def [](key)
        @params[canonical_key(key)]
      end

      ##
      # Get the number of SvcParams in this list.

      def count
        @params.count
      end

      ##
      # Get whether this list is empty.

      def empty?
        @params.empty?
      end

      ##
      # Add the SvcParam +param+ to this list, overwriting the existing one with the same key.

      def add(param)
        @params[param.class.key_number] = param
      end

      ##
      # Remove the +SvcParam+ with the given +key+ and return it.

      def delete(key)
        @params.delete(canonical_key(key))
      end

      ##
      # Enumerate the +SvcParam+s in this list.

      def each(&block)
        return enum_for(:each) unless block
        @params.each_value(&block)
      end

      def encode(msg) # :nodoc:
        @params.keys.sort.each do |key|
          msg.put_pack('n', key)
          msg.put_length16 do
            @params.fetch(key).encode(msg)
          end
        end
      end

      def self.decode(msg) # :nodoc:
        params = msg.get_list do
          key, = msg.get_unpack('n')
          msg.get_length16 do
            SvcParam::ClassHash[key].decode(msg)
          end
        end

        return self.new(params)
      end

      private

      def canonical_key(key) # :nodoc:
        case key
        when Integer
          key
        when /\Akey(\d+)\z/
          Integer($1)
        when Symbol
          SvcParam::ClassHash[key].key_number
        else
          raise TypeError, 'key must be either String or Symbol'
        end
      end
    end

    ##
    # Base class for SvcParam. [RFC9460]

    class SvcParam

      ##
      # Get the presentation name of the SvcParamKey.

      def self.key_name
        const_get(:KeyName)
      end

      ##
      # Get the registered number of the SvcParamKey.

      def self.key_number
        const_get(:KeyNumber)
      end

      ClassHash = Hash.new do |h, key| # :nodoc:
        case key
        when Integer
          Generic.create(key)
        when /\Akey(?<key>\d+)\z/
          Generic.create(key.to_int)
        when Symbol
          raise KeyError, "unknown key #{key}"
        else
          raise TypeError, 'key must be either String or Symbol'
        end
      end

      ##
      # Generic SvcParam abstract class.

      class Generic < SvcParam

        ##
        # SvcParamValue in wire-format byte string.

        attr_reader :value

        ##
        # Create generic SvcParam

        def initialize(value)
          @value = value
        end

        def encode(msg) # :nodoc:
          msg.put_bytes(@value)
        end

        def self.decode(msg) # :nodoc:
          return self.new(msg.get_bytes)
        end

        def self.create(key_number)
          c = Class.new(Generic)
          key_name = :"key#{key_number}"
          c.const_set(:KeyName, key_name)
          c.const_set(:KeyNumber, key_number)
          self.const_set(:"Key#{key_number}", c)
          ClassHash[key_name] = ClassHash[key_number] = c
          return c
        end
      end

      ##
      # "mandatory" SvcParam -- Mandatory keys in service binding RR

      class Mandatory < SvcParam
        KeyName = :mandatory
        KeyNumber = 0
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Mandatory keys.

        attr_reader :keys

        ##
        # Initialize "mandatory" ScvParam.

        def initialize(keys)
          @keys = keys.map(&:to_int)
        end

        def encode(msg) # :nodoc:
          @keys.sort.each do |key|
            msg.put_pack('n', key)
          end
        end

        def self.decode(msg) # :nodoc:
          keys = msg.get_list { msg.get_unpack('n')[0] }
          return self.new(keys)
        end
      end

      ##
      # "alpn" SvcParam -- Additional supported protocols

      class ALPN < SvcParam
        KeyName = :alpn
        KeyNumber = 1
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Supported protocol IDs.

        attr_reader :protocol_ids

        ##
        # Initialize "alpn" ScvParam.

        def initialize(protocol_ids)
          @protocol_ids = protocol_ids.map(&:to_str)
        end

        def encode(msg) # :nodoc:
          msg.put_string_list(@protocol_ids)
        end

        def self.decode(msg) # :nodoc:
          return self.new(msg.get_string_list)
        end
      end

      ##
      # "no-default-alpn" SvcParam -- No support for default protocol

      class NoDefaultALPN < SvcParam
        KeyName = :'no-default-alpn'
        KeyNumber = 2
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        def encode(msg) # :nodoc:
          # no payload
        end

        def self.decode(msg) # :nodoc:
          return self.new
        end
      end

      ##
      # "port" SvcParam -- Port for alternative endpoint

      class Port < SvcParam
        KeyName = :port
        KeyNumber = 3
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Port number.

        attr_reader :port

        ##
        # Initialize "port" ScvParam.

        def initialize(port)
          @port = port.to_int
        end

        def encode(msg) # :nodoc:
          msg.put_pack('n', @port)
        end

        def self.decode(msg) # :nodoc:
          port, = msg.get_unpack('n')
          return self.new(port)
        end
      end

      ##
      # "ipv4hint" SvcParam -- IPv4 address hints

      class IPv4Hint < SvcParam
        KeyName = :ipv4hint
        KeyNumber = 4
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Set of IPv4 addresses.

        attr_reader :addresses

        ##
        # Initialize "ipv4hint" ScvParam.

        def initialize(addresses)
          @addresses = addresses.map {|address| IPv4.create(address) }
        end

        def encode(msg) # :nodoc:
          @addresses.each do |address|
            msg.put_bytes(address.address)
          end
        end

        def self.decode(msg) # :nodoc:
          addresses = msg.get_list { IPv4.new(msg.get_bytes(4)) }
          return self.new(addresses)
        end
      end

      ##
      # "ipv6hint" SvcParam -- IPv6 address hints

      class IPv6Hint < SvcParam
        KeyName = :ipv6hint
        KeyNumber = 6
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # Set of IPv6 addresses.

        attr_reader :addresses

        ##
        # Initialize "ipv6hint" ScvParam.

        def initialize(addresses)
          @addresses = addresses.map {|address| IPv6.create(address) }
        end

        def encode(msg) # :nodoc:
          @addresses.each do |address|
            msg.put_bytes(address.address)
          end
        end

        def self.decode(msg) # :nodoc:
          addresses = msg.get_list { IPv6.new(msg.get_bytes(16)) }
          return self.new(addresses)
        end
      end

      ##
      # "dohpath" SvcParam -- DNS over HTTPS path template [RFC9461]

      class DoHPath < SvcParam
        KeyName = :dohpath
        KeyNumber = 7
        ClassHash[KeyName] = ClassHash[KeyNumber] = self # :nodoc:

        ##
        # URI template for DoH queries.

        attr_reader :template

        ##
        # Initialize "dohpath" ScvParam.

        def initialize(template)
          @template = template.encode('utf-8')
        end

        def encode(msg) # :nodoc:
          msg.put_bytes(@template)
        end

        def self.decode(msg) # :nodoc:
          template = msg.get_bytes.force_encoding('utf-8')
          return self.new(template)
        end
      end
    end

    ##
    # A DNS query abstract class.

    class Query
      def encode_rdata(msg) # :nodoc:
        raise EncodeError.new("#{self.class} is query.")
      end

      def self.decode_rdata(msg) # :nodoc:
        raise DecodeError.new("#{self.class} is query.")
      end
    end

    ##
    # A DNS resource abstract class.

    class Resource < Query

      ##
      # Remaining Time To Live for this Resource.

      attr_reader :ttl

      ClassHash = {} # :nodoc:

      def encode_rdata(msg) # :nodoc:
        raise NotImplementedError.new
      end

      def self.decode_rdata(msg) # :nodoc:
        raise NotImplementedError.new
      end

      def ==(other) # :nodoc:
        return false unless self.class == other.class
        s_ivars = self.instance_variables
        s_ivars.sort!
        s_ivars.delete :@ttl
        o_ivars = other.instance_variables
        o_ivars.sort!
        o_ivars.delete :@ttl
        return s_ivars == o_ivars &&
          s_ivars.collect {|name| self.instance_variable_get name} ==
            o_ivars.collect {|name| other.instance_variable_get name}
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        h = 0
        vars = self.instance_variables
        vars.delete :@ttl
        vars.each {|name|
          h ^= self.instance_variable_get(name).hash
        }
        return h
      end

      def self.get_class(type_value, class_value) # :nodoc:
        return ClassHash[[type_value, class_value]] ||
               Generic.create(type_value, class_value)
      end

      ##
      # A generic resource abstract class.

      class Generic < Resource

        ##
        # Creates a new generic resource.

        def initialize(data)
          @data = data
        end

        ##
        # Data for this generic resource.

        attr_reader :data

        def encode_rdata(msg) # :nodoc:
          msg.put_bytes(data)
        end

        def self.decode_rdata(msg) # :nodoc:
          return self.new(msg.get_bytes)
        end

        def self.create(type_value, class_value) # :nodoc:
          c = Class.new(Generic)
          c.const_set(:TypeValue, type_value)
          c.const_set(:ClassValue, class_value)
          Generic.const_set("Type#{type_value}_Class#{class_value}", c)
          ClassHash[[type_value, class_value]] = c
          return c
        end
      end

      ##
      # Domain Name resource abstract class.

      class DomainName < Resource

        ##
        # Creates a new DomainName from +name+.

        def initialize(name)
          @name = name
        end

        ##
        # The name of this DomainName.

        attr_reader :name

        def encode_rdata(msg) # :nodoc:
          msg.put_name(@name)
        end

        def self.decode_rdata(msg) # :nodoc:
          return self.new(msg.get_name)
        end
      end

      # Standard (class generic) RRs

      ClassValue = nil # :nodoc:

      ##
      # An authoritative name server.

      class NS < DomainName
        TypeValue = 2 # :nodoc:
      end

      ##
      # The canonical name for an alias.

      class CNAME < DomainName
        TypeValue = 5 # :nodoc:
      end

      ##
      # Start Of Authority resource.

      class SOA < Resource

        TypeValue = 6 # :nodoc:

        ##
        # Creates a new SOA record.  See the attr documentation for the
        # details of each argument.

        def initialize(mname, rname, serial, refresh, retry_, expire, minimum)
          @mname = mname
          @rname = rname
          @serial = serial
          @refresh = refresh
          @retry = retry_
          @expire = expire
          @minimum = minimum
        end

        ##
        # Name of the host where the master zone file for this zone resides.

        attr_reader :mname

        ##
        # The person responsible for this domain name.

        attr_reader :rname

        ##
        # The version number of the zone file.

        attr_reader :serial

        ##
        # How often, in seconds, a secondary name server is to check for
        # updates from the primary name server.

        attr_reader :refresh

        ##
        # How often, in seconds, a secondary name server is to retry after a
        # failure to check for a refresh.

        attr_reader :retry

        ##
        # Time in seconds that a secondary name server is to use the data
        # before refreshing from the primary name server.

        attr_reader :expire

        ##
        # The minimum number of seconds to be used for TTL values in RRs.

        attr_reader :minimum

        def encode_rdata(msg) # :nodoc:
          msg.put_name(@mname)
          msg.put_name(@rname)
          msg.put_pack('NNNNN', @serial, @refresh, @retry, @expire, @minimum)
        end

        def self.decode_rdata(msg) # :nodoc:
          mname = msg.get_name
          rname = msg.get_name
          serial, refresh, retry_, expire, minimum = msg.get_unpack('NNNNN')
          return self.new(
            mname, rname, serial, refresh, retry_, expire, minimum)
        end
      end

      ##
      # A Pointer to another DNS name.

      class PTR < DomainName
        TypeValue = 12 # :nodoc:
      end

      ##
      # Host Information resource.

      class HINFO < Resource

        TypeValue = 13 # :nodoc:

        ##
        # Creates a new HINFO running +os+ on +cpu+.

        def initialize(cpu, os)
          @cpu = cpu
          @os = os
        end

        ##
        # CPU architecture for this resource.

        attr_reader :cpu

        ##
        # Operating system for this resource.

        attr_reader :os

        def encode_rdata(msg) # :nodoc:
          msg.put_string(@cpu)
          msg.put_string(@os)
        end

        def self.decode_rdata(msg) # :nodoc:
          cpu = msg.get_string
          os = msg.get_string
          return self.new(cpu, os)
        end
      end

      ##
      # Mailing list or mailbox information.

      class MINFO < Resource

        TypeValue = 14 # :nodoc:

        def initialize(rmailbx, emailbx)
          @rmailbx = rmailbx
          @emailbx = emailbx
        end

        ##
        # Domain name responsible for this mail list or mailbox.

        attr_reader :rmailbx

        ##
        # Mailbox to use for error messages related to the mail list or mailbox.

        attr_reader :emailbx

        def encode_rdata(msg) # :nodoc:
          msg.put_name(@rmailbx)
          msg.put_name(@emailbx)
        end

        def self.decode_rdata(msg) # :nodoc:
          rmailbx = msg.get_string
          emailbx = msg.get_string
          return self.new(rmailbx, emailbx)
        end
      end

      ##
      # Mail Exchanger resource.

      class MX < Resource

        TypeValue= 15 # :nodoc:

        ##
        # Creates a new MX record with +preference+, accepting mail at
        # +exchange+.

        def initialize(preference, exchange)
          @preference = preference
          @exchange = exchange
        end

        ##
        # The preference for this MX.

        attr_reader :preference

        ##
        # The host of this MX.

        attr_reader :exchange

        def encode_rdata(msg) # :nodoc:
          msg.put_pack('n', @preference)
          msg.put_name(@exchange)
        end

        def self.decode_rdata(msg) # :nodoc:
          preference, = msg.get_unpack('n')
          exchange = msg.get_name
          return self.new(preference, exchange)
        end
      end

      ##
      # Unstructured text resource.

      class TXT < Resource

        TypeValue = 16 # :nodoc:

        def initialize(first_string, *rest_strings)
          @strings = [first_string, *rest_strings]
        end

        ##
        # Returns an Array of Strings for this TXT record.

        attr_reader :strings

        ##
        # Returns the concatenated string from +strings+.

        def data
          @strings.join("")
        end

        def encode_rdata(msg) # :nodoc:
          msg.put_string_list(@strings)
        end

        def self.decode_rdata(msg) # :nodoc:
          strings = msg.get_string_list
          return self.new(*strings)
        end
      end

      ##
      # Location resource

      class LOC < Resource

        TypeValue = 29 # :nodoc:

        def initialize(version, ssize, hprecision, vprecision, latitude, longitude, altitude)
          @version    = version
          @ssize      = Resolv::LOC::Size.create(ssize)
          @hprecision = Resolv::LOC::Size.create(hprecision)
          @vprecision = Resolv::LOC::Size.create(vprecision)
          @latitude   = Resolv::LOC::Coord.create(latitude)
          @longitude  = Resolv::LOC::Coord.create(longitude)
          @altitude   = Resolv::LOC::Alt.create(altitude)
        end

        ##
        # Returns the version value for this LOC record which should always be 00

        attr_reader :version

        ##
        # The spherical size of this LOC
        # in meters using scientific notation as 2 integers of XeY

        attr_reader :ssize

        ##
        # The horizontal precision using ssize type values
        # in meters using scientific notation as 2 integers of XeY
        # for precision use value/2 e.g. 2m = +/-1m

        attr_reader :hprecision

        ##
        # The vertical precision using ssize type values
        # in meters using scientific notation as 2 integers of XeY
        # for precision use value/2 e.g. 2m = +/-1m

        attr_reader :vprecision

        ##
        # The latitude for this LOC where 2**31 is the equator
        # in thousandths of an arc second as an unsigned 32bit integer

        attr_reader :latitude

        ##
        # The longitude for this LOC where 2**31 is the prime meridian
        # in thousandths of an arc second as an unsigned 32bit integer

        attr_reader :longitude

        ##
        # The altitude of the LOC above a reference sphere whose surface sits 100km below the WGS84 spheroid
        # in centimeters as an unsigned 32bit integer

        attr_reader :altitude

        def encode_rdata(msg) # :nodoc:
          msg.put_bytes(@version)
          msg.put_bytes(@ssize.scalar)
          msg.put_bytes(@hprecision.scalar)
          msg.put_bytes(@vprecision.scalar)
          msg.put_bytes(@latitude.coordinates)
          msg.put_bytes(@longitude.coordinates)
          msg.put_bytes(@altitude.altitude)
        end

        def self.decode_rdata(msg) # :nodoc:
          version    = msg.get_bytes(1)
          ssize      = msg.get_bytes(1)
          hprecision = msg.get_bytes(1)
          vprecision = msg.get_bytes(1)
          latitude   = msg.get_bytes(4)
          longitude  = msg.get_bytes(4)
          altitude   = msg.get_bytes(4)
          return self.new(
            version,
            Resolv::LOC::Size.new(ssize),
            Resolv::LOC::Size.new(hprecision),
            Resolv::LOC::Size.new(vprecision),
            Resolv::LOC::Coord.new(latitude,"lat"),
            Resolv::LOC::Coord.new(longitude,"lon"),
            Resolv::LOC::Alt.new(altitude)
          )
        end
      end

      ##
      # A Query type requesting any RR.

      class ANY < Query
        TypeValue = 255 # :nodoc:
      end

      ##
      # CAA resource record defined in RFC 8659
      #
      # These records identify certificate authority allowed to issue
      # certificates for the given domain.

      class CAA < Resource
        TypeValue = 257

        ##
        # Creates a new CAA for +flags+, +tag+ and +value+.

        def initialize(flags, tag, value)
          unless (0..255) === flags
            raise ArgumentError.new('flags must be an Integer between 0 and 255')
          end
          unless (1..15) === tag.bytesize
            raise ArgumentError.new('length of tag must be between 1 and 15')
          end

          @flags = flags
          @tag = tag
          @value = value
        end

        ##
        # Flags for this proprty:
        # - Bit 0 : 0 = not critical, 1 = critical

        attr_reader :flags

        ##
        # Property tag ("issue", "issuewild", "iodef"...).

        attr_reader :tag

        ##
        # Property value.

        attr_reader :value

        ##
        # Whether the critical flag is set on this property.

        def critical?
          flags & 0x80 != 0
        end

        def encode_rdata(msg) # :nodoc:
          msg.put_pack('C', @flags)
          msg.put_string(@tag)
          msg.put_bytes(@value)
        end

        def self.decode_rdata(msg) # :nodoc:
          flags, = msg.get_unpack('C')
          tag = msg.get_string
          value = msg.get_bytes
          self.new flags, tag, value
        end
      end

      ClassInsensitiveTypes = [ # :nodoc:
        NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, LOC, ANY, CAA
      ]

      ##
      # module IN contains ARPA Internet specific RRs.

      module IN

        ClassValue = 1 # :nodoc:

        ClassInsensitiveTypes.each {|s|
          c = Class.new(s)
          c.const_set(:TypeValue, s::TypeValue)
          c.const_set(:ClassValue, ClassValue)
          ClassHash[[s::TypeValue, ClassValue]] = c
          self.const_set(s.name.sub(/.*::/, ''), c)
        }

        ##
        # IPv4 Address resource

        class A < Resource
          TypeValue = 1
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          ##
          # Creates a new A for +address+.

          def initialize(address)
            @address = IPv4.create(address)
          end

          ##
          # The Resolv::IPv4 address for this A.

          attr_reader :address

          def encode_rdata(msg) # :nodoc:
            msg.put_bytes(@address.address)
          end

          def self.decode_rdata(msg) # :nodoc:
            return self.new(IPv4.new(msg.get_bytes(4)))
          end
        end

        ##
        # Well Known Service resource.

        class WKS < Resource
          TypeValue = 11
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          def initialize(address, protocol, bitmap)
            @address = IPv4.create(address)
            @protocol = protocol
            @bitmap = bitmap
          end

          ##
          # The host these services run on.

          attr_reader :address

          ##
          # IP protocol number for these services.

          attr_reader :protocol

          ##
          # A bit map of enabled services on this host.
          #
          # If protocol is 6 (TCP) then the 26th bit corresponds to the SMTP
          # service (port 25).  If this bit is set, then an SMTP server should
          # be listening on TCP port 25; if zero, SMTP service is not
          # supported.

          attr_reader :bitmap

          def encode_rdata(msg) # :nodoc:
            msg.put_bytes(@address.address)
            msg.put_pack("n", @protocol)
            msg.put_bytes(@bitmap)
          end

          def self.decode_rdata(msg) # :nodoc:
            address = IPv4.new(msg.get_bytes(4))
            protocol, = msg.get_unpack("n")
            bitmap = msg.get_bytes
            return self.new(address, protocol, bitmap)
          end
        end

        ##
        # An IPv6 address record.

        class AAAA < Resource
          TypeValue = 28
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          ##
          # Creates a new AAAA for +address+.

          def initialize(address)
            @address = IPv6.create(address)
          end

          ##
          # The Resolv::IPv6 address for this AAAA.

          attr_reader :address

          def encode_rdata(msg) # :nodoc:
            msg.put_bytes(@address.address)
          end

          def self.decode_rdata(msg) # :nodoc:
            return self.new(IPv6.new(msg.get_bytes(16)))
          end
        end

        ##
        # SRV resource record defined in RFC 2782
        #
        # These records identify the hostname and port that a service is
        # available at.

        class SRV < Resource
          TypeValue = 33
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

          # Create a SRV resource record.
          #
          # See the documentation for #priority, #weight, #port and #target
          # for +priority+, +weight+, +port and +target+ respectively.

          def initialize(priority, weight, port, target)
            @priority = priority.to_int
            @weight = weight.to_int
            @port = port.to_int
            @target = Name.create(target)
          end

          # The priority of this target host.
          #
          # A client MUST attempt to contact the target host with the
          # lowest-numbered priority it can reach; target hosts with the same
          # priority SHOULD be tried in an order defined by the weight field.
          # The range is 0-65535.  Note that it is not widely implemented and
          # should be set to zero.

          attr_reader :priority

          # A server selection mechanism.
          #
          # The weight field specifies a relative weight for entries with the
          # same priority. Larger weights SHOULD be given a proportionately
          # higher probability of being selected. The range of this number is
          # 0-65535.  Domain administrators SHOULD use Weight 0 when there
          # isn't any server selection to do, to make the RR easier to read
          # for humans (less noisy). Note that it is not widely implemented
          # and should be set to zero.

          attr_reader :weight

          # The port on this target host of this service.
          #
          # The range is 0-65535.

          attr_reader :port

          # The domain name of the target host.
          #
          # A target of "." means that the service is decidedly not available
          # at this domain.

          attr_reader :target

          def encode_rdata(msg) # :nodoc:
            msg.put_pack("n", @priority)
            msg.put_pack("n", @weight)
            msg.put_pack("n", @port)
            msg.put_name(@target, compress: false)
          end

          def self.decode_rdata(msg) # :nodoc:
            priority, = msg.get_unpack("n")
            weight,   = msg.get_unpack("n")
            port,     = msg.get_unpack("n")
            target    = msg.get_name
            return self.new(priority, weight, port, target)
          end
        end

        ##
        # Common implementation for SVCB-compatible resource records.

        class ServiceBinding

          ##
          # Create a service binding resource record.

          def initialize(priority, target, params = [])
            @priority = priority.to_int
            @target = Name.create(target)
            @params = SvcParams.new(params)
          end

          ##
          # The priority of this target host.
          #
          # The range is 0-65535.
          # If set to 0, this RR is in AliasMode. Otherwise, it is in ServiceMode.

          attr_reader :priority

          ##
          # The domain name of the target host.

          attr_reader :target

          ##
          # The service parameters for the target host.

          attr_reader :params

          ##
          # Whether this RR is in AliasMode.

          def alias_mode?
            self.priority == 0
          end

          ##
          # Whether this RR is in ServiceMode.

          def service_mode?
            !alias_mode?
          end

          def encode_rdata(msg) # :nodoc:
            msg.put_pack("n", @priority)
            msg.put_name(@target, compress: false)
            @params.encode(msg)
          end

          def self.decode_rdata(msg) # :nodoc:
            priority, = msg.get_unpack("n")
            target    = msg.get_name
            params    = SvcParams.decode(msg)
            return self.new(priority, target, params)
          end
        end

        ##
        # SVCB resource record [RFC9460]

        class SVCB < ServiceBinding
          TypeValue = 64
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:
        end

        ##
        # HTTPS resource record [RFC9460]

        class HTTPS < ServiceBinding
          TypeValue = 65
          ClassValue = IN::ClassValue
          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:
        end
      end
    end
  end

  ##
  # A Resolv::DNS IPv4 address.

  class IPv4

    ##
    # Regular expression IPv4 addresses must match.

    Regex256 = /0
               |1(?:[0-9][0-9]?)?
               |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
               |[3-9][0-9]?/x
    Regex = /\A(#{Regex256})\.(#{Regex256})\.(#{Regex256})\.(#{Regex256})\z/

    def self.create(arg)
      case arg
      when IPv4
        return arg
      when Regex
        if (0..255) === (a = $1.to_i) &&
           (0..255) === (b = $2.to_i) &&
           (0..255) === (c = $3.to_i) &&
           (0..255) === (d = $4.to_i)
          return self.new([a, b, c, d].pack("CCCC"))
        else
          raise ArgumentError.new("IPv4 address with invalid value: " + arg)
        end
      else
        raise ArgumentError.new("cannot interpret as IPv4 address: #{arg.inspect}")
      end
    end

    def initialize(address) # :nodoc:
      unless address.kind_of?(String)
        raise ArgumentError, 'IPv4 address must be a string'
      end
      unless address.length == 4
        raise ArgumentError, "IPv4 address expects 4 bytes but #{address.length} bytes"
      end
      @address = address
    end

    ##
    # A String representation of this IPv4 address.

    ##
    # The raw IPv4 address as a String.

    attr_reader :address

    def to_s # :nodoc:
      return sprintf("%d.%d.%d.%d", *@address.unpack("CCCC"))
    end

    def inspect # :nodoc:
      return "#<#{self.class} #{self}>"
    end

    ##
    # Turns this IPv4 address into a Resolv::DNS::Name.

    def to_name
      return DNS::Name.create(
        '%d.%d.%d.%d.in-addr.arpa.' % @address.unpack('CCCC').reverse)
    end

    def ==(other) # :nodoc:
      return @address == other.address
    end

    def eql?(other) # :nodoc:
      return self == other
    end

    def hash # :nodoc:
      return @address.hash
    end
  end

  ##
  # A Resolv::DNS IPv6 address.

  class IPv6

    ##
    # IPv6 address format a:b:c:d:e:f:g:h
    Regex_8Hex = /\A
      (?:[0-9A-Fa-f]{1,4}:){7}
         [0-9A-Fa-f]{1,4}
      \z/x

    ##
    # Compressed IPv6 address format a::b

    Regex_CompressedHex = /\A
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
      \z/x

    ##
    # IPv4 mapped IPv6 address format a:b:c:d:e:f:w.x.y.z

    Regex_6Hex4Dec = /\A
      ((?:[0-9A-Fa-f]{1,4}:){6,6})
      (\d+)\.(\d+)\.(\d+)\.(\d+)
      \z/x

    ##
    # Compressed IPv4 mapped IPv6 address format a::b:w.x.y.z

    Regex_CompressedHex4Dec = /\A
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
      ((?:[0-9A-Fa-f]{1,4}:)*)
      (\d+)\.(\d+)\.(\d+)\.(\d+)
      \z/x

    ##
    # IPv6 link local address format fe80:b:c:d:e:f:g:h%em1
    Regex_8HexLinkLocal = /\A
      [Ff][Ee]80
      (?::[0-9A-Fa-f]{1,4}){7}
      %[-0-9A-Za-z._~]+
      \z/x

    ##
    # Compressed IPv6 link local address format fe80::b%em1

    Regex_CompressedHexLinkLocal = /\A
      [Ff][Ee]80:
      (?:
        ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
        ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
        |
        :((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
      )?
      :[0-9A-Fa-f]{1,4}%[-0-9A-Za-z._~]+
      \z/x

    ##
    # A composite IPv6 address Regexp.

    Regex = /
      (?:#{Regex_8Hex}) |
      (?:#{Regex_CompressedHex}) |
      (?:#{Regex_6Hex4Dec}) |
      (?:#{Regex_CompressedHex4Dec}) |
      (?:#{Regex_8HexLinkLocal}) |
      (?:#{Regex_CompressedHexLinkLocal})
      /x

    ##
    # Creates a new IPv6 address from +arg+ which may be:
    #
    # IPv6:: returns +arg+.
    # String:: +arg+ must match one of the IPv6::Regex* constants

    def self.create(arg)
      case arg
      when IPv6
        return arg
      when String
        address = ''.b
        if Regex_8Hex =~ arg
          arg.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
        elsif Regex_CompressedHex =~ arg
          prefix = $1
          suffix = $2
          a1 = ''.b
          a2 = ''.b
          prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
          suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
          omitlen = 16 - a1.length - a2.length
          address << a1 << "\0" * omitlen << a2
        elsif Regex_6Hex4Dec =~ arg
          prefix, a, b, c, d = $1, $2.to_i, $3.to_i, $4.to_i, $5.to_i
          if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
            prefix.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
            address << [a, b, c, d].pack('CCCC')
          else
            raise ArgumentError.new("not numeric IPv6 address: " + arg)
          end
        elsif Regex_CompressedHex4Dec =~ arg
          prefix, suffix, a, b, c, d = $1, $2, $3.to_i, $4.to_i, $5.to_i, $6.to_i
          if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
            a1 = ''.b
            a2 = ''.b
            prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
            suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
            omitlen = 12 - a1.length - a2.length
            address << a1 << "\0" * omitlen << a2 << [a, b, c, d].pack('CCCC')
          else
            raise ArgumentError.new("not numeric IPv6 address: " + arg)
          end
        else
          raise ArgumentError.new("not numeric IPv6 address: " + arg)
        end
        return IPv6.new(address)
      else
        raise ArgumentError.new("cannot interpret as IPv6 address: #{arg.inspect}")
      end
    end

    def initialize(address) # :nodoc:
      unless address.kind_of?(String) && address.length == 16
        raise ArgumentError.new('IPv6 address must be 16 bytes')
      end
      @address = address
    end

    ##
    # The raw IPv6 address as a String.

    attr_reader :address

    def to_s # :nodoc:
      sprintf("%x:%x:%x:%x:%x:%x:%x:%x", *@address.unpack("nnnnnnnn")).sub(/(^|:)0(:0)+(:|$)/, '::')
    end

    def inspect # :nodoc:
      return "#<#{self.class} #{self}>"
    end

    ##
    # Turns this IPv6 address into a Resolv::DNS::Name.
    #--
    # ip6.arpa should be searched too. [RFC3152]

    def to_name
      return DNS::Name.new(
        @address.unpack("H32")[0].split(//).reverse + ['ip6', 'arpa'])
    end

    def ==(other) # :nodoc:
      return @address == other.address
    end

    def eql?(other) # :nodoc:
      return self == other
    end

    def hash # :nodoc:
      return @address.hash
    end
  end

  ##
  # Resolv::MDNS is a one-shot Multicast DNS (mDNS) resolver.  It blindly
  # makes queries to the mDNS addresses without understanding anything about
  # multicast ports.
  #
  # Information taken form the following places:
  #
  # * RFC 6762

  class MDNS < DNS

    ##
    # Default mDNS Port

    Port = 5353

    ##
    # Default IPv4 mDNS address

    AddressV4 = '224.0.0.251'

    ##
    # Default IPv6 mDNS address

    AddressV6 = 'ff02::fb'

    ##
    # Default mDNS addresses

    Addresses = [
      [AddressV4, Port],
      [AddressV6, Port],
    ]

    ##
    # Creates a new one-shot Multicast DNS (mDNS) resolver.
    #
    # +config_info+ can be:
    #
    # nil::
    #   Uses the default mDNS addresses
    #
    # Hash::
    #   Must contain :nameserver or :nameserver_port like
    #   Resolv::DNS#initialize.

    def initialize(config_info=nil)
      if config_info then
        super({ nameserver_port: Addresses }.merge(config_info))
      else
        super(nameserver_port: Addresses)
      end
    end

    ##
    # Iterates over all IP addresses for +name+ retrieved from the mDNS
    # resolver, provided name ends with "local".  If the name does not end in
    # "local" no records will be returned.
    #
    # +name+ can be a Resolv::DNS::Name or a String.  Retrieved addresses will
    # be a Resolv::IPv4 or Resolv::IPv6

    def each_address(name)
      name = Resolv::DNS::Name.create(name)

      return unless name[-1].to_s == 'local'

      super(name)
    end

    def make_udp_requester # :nodoc:
      nameserver_port = @config.nameserver_port
      Requester::MDNSOneShot.new(*nameserver_port)
    end

  end

  module LOC

    ##
    # A Resolv::LOC::Size

    class Size

      Regex = /^(\d+\.*\d*)[m]$/

      ##
      # Creates a new LOC::Size from +arg+ which may be:
      #
      # LOC::Size:: returns +arg+.
      # String:: +arg+ must match the LOC::Size::Regex constant

      def self.create(arg)
        case arg
        when Size
          return arg
        when String
          scalar = ''
          if Regex =~ arg
            scalar = [(($1.to_f*(1e2)).to_i.to_s[0].to_i*(2**4)+(($1.to_f*(1e2)).to_i.to_s.length-1))].pack("C")
          else
            raise ArgumentError.new("not a properly formed Size string: " + arg)
          end
          return Size.new(scalar)
        else
          raise ArgumentError.new("cannot interpret as Size: #{arg.inspect}")
        end
      end

      def initialize(scalar)
        @scalar = scalar
      end

      ##
      # The raw size

      attr_reader :scalar

      def to_s # :nodoc:
        s = @scalar.unpack("H2").join.to_s
        return ((s[0].to_i)*(10**(s[1].to_i-2))).to_s << "m"
      end

      def inspect # :nodoc:
        return "#<#{self.class} #{self}>"
      end

      def ==(other) # :nodoc:
        return @scalar == other.scalar
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        return @scalar.hash
      end

    end

    ##
    # A Resolv::LOC::Coord

    class Coord

      Regex = /^(\d+)\s(\d+)\s(\d+\.\d+)\s([NESW])$/

      ##
      # Creates a new LOC::Coord from +arg+ which may be:
      #
      # LOC::Coord:: returns +arg+.
      # String:: +arg+ must match the LOC::Coord::Regex constant

      def self.create(arg)
        case arg
        when Coord
          return arg
        when String
          coordinates = ''
          if Regex =~ arg && $1.to_f < 180
            m = $~
            hemi = (m[4][/[NE]/]) || (m[4][/[SW]/]) ? 1 : -1
            coordinates = [ ((m[1].to_i*(36e5)) + (m[2].to_i*(6e4)) +
                             (m[3].to_f*(1e3))) * hemi+(2**31) ].pack("N")
            orientation = m[4][/[NS]/] ? 'lat' : 'lon'
          else
            raise ArgumentError.new("not a properly formed Coord string: " + arg)
          end
          return Coord.new(coordinates,orientation)
        else
          raise ArgumentError.new("cannot interpret as Coord: #{arg.inspect}")
        end
      end

      def initialize(coordinates,orientation)
        unless coordinates.kind_of?(String)
          raise ArgumentError.new("Coord must be a 32bit unsigned integer in hex format: #{coordinates.inspect}")
        end
        unless orientation.kind_of?(String) && orientation[/^lon$|^lat$/]
          raise ArgumentError.new('Coord expects orientation to be a String argument of "lat" or "lon"')
        end
        @coordinates = coordinates
        @orientation = orientation
      end

      ##
      # The raw coordinates

      attr_reader :coordinates

      ## The orientation of the hemisphere as 'lat' or 'lon'

      attr_reader :orientation

      def to_s # :nodoc:
          c = @coordinates.unpack("N").join.to_i
          val      = (c - (2**31)).abs
          fracsecs = (val % 1e3).to_i.to_s
          val      = val / 1e3
          secs     = (val % 60).to_i.to_s
          val      = val / 60
          mins     = (val % 60).to_i.to_s
          degs     = (val / 60).to_i.to_s
          posi = (c >= 2**31)
          case posi
          when true
            hemi = @orientation[/^lat$/] ? "N" : "E"
          else
            hemi = @orientation[/^lon$/] ? "W" : "S"
          end
          return degs << " " << mins << " " << secs << "." << fracsecs << " " << hemi
      end

      def inspect # :nodoc:
        return "#<#{self.class} #{self}>"
      end

      def ==(other) # :nodoc:
        return @coordinates == other.coordinates
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        return @coordinates.hash
      end

    end

    ##
    # A Resolv::LOC::Alt

    class Alt

      Regex = /^([+-]*\d+\.*\d*)[m]$/

      ##
      # Creates a new LOC::Alt from +arg+ which may be:
      #
      # LOC::Alt:: returns +arg+.
      # String:: +arg+ must match the LOC::Alt::Regex constant

      def self.create(arg)
        case arg
        when Alt
          return arg
        when String
          altitude = ''
          if Regex =~ arg
            altitude = [($1.to_f*(1e2))+(1e7)].pack("N")
          else
            raise ArgumentError.new("not a properly formed Alt string: " + arg)
          end
          return Alt.new(altitude)
        else
          raise ArgumentError.new("cannot interpret as Alt: #{arg.inspect}")
        end
      end

      def initialize(altitude)
        @altitude = altitude
      end

      ##
      # The raw altitude

      attr_reader :altitude

      def to_s # :nodoc:
        a = @altitude.unpack("N").join.to_i
        return ((a.to_f/1e2)-1e5).to_s + "m"
      end

      def inspect # :nodoc:
        return "#<#{self.class} #{self}>"
      end

      def ==(other) # :nodoc:
        return @altitude == other.altitude
      end

      def eql?(other) # :nodoc:
        return self == other
      end

      def hash # :nodoc:
        return @altitude.hash
      end

    end

  end

  ##
  # Default resolver to use for Resolv class methods.

  DefaultResolver = self.new

  ##
  # Replaces the resolvers in the default resolver with +new_resolvers+.  This
  # allows resolvers to be changed for resolv-replace.

  def DefaultResolver.replace_resolvers new_resolvers
    @resolvers = new_resolvers
  end

  ##
  # Address Regexp to use for matching IP addresses.

  AddressRegex = /(?:#{IPv4::Regex})|(?:#{IPv6::Regex})/

end
PK*J[h���_�_share/ruby/time.rbnu�[���# frozen_string_literal: true
# shareable_constant_value: literal

require 'date'

# :stopdoc:

# = time.rb
#
# When 'time' is required, Time is extended with additional methods for parsing
# and converting Times.
#
# == Features
#
# This library extends the Time class with the following conversions between
# date strings and Time objects:
#
# * date-time defined by {RFC 2822}[http://www.ietf.org/rfc/rfc2822.txt]
# * HTTP-date defined by {RFC 2616}[http://www.ietf.org/rfc/rfc2616.txt]
# * dateTime defined by XML Schema Part 2: Datatypes ({ISO
#   8601}[http://www.iso.org/iso/date_and_time_format])
# * various formats handled by Date._parse
# * custom formats handled by Date._strptime

# :startdoc:

# #
class Time

  VERSION = "0.4.1"             # :nodoc:

  class << Time

    #
    # A hash of timezones mapped to hour differences from UTC. The
    # set of time zones corresponds to the ones specified by RFC 2822
    # and ISO 8601.
    #
    ZoneOffset = { # :nodoc:
      'UTC' => 0,
      # ISO 8601
      'Z' => 0,
      # RFC 822
      'UT' => 0, 'GMT' => 0,
      'EST' => -5, 'EDT' => -4,
      'CST' => -6, 'CDT' => -5,
      'MST' => -7, 'MDT' => -6,
      'PST' => -8, 'PDT' => -7,
      # Following definition of military zones is original one.
      # See RFC 1123 and RFC 2822 for the error in RFC 822.
      'A' => +1, 'B' => +2, 'C' => +3, 'D' => +4,  'E' => +5,  'F' => +6,
      'G' => +7, 'H' => +8, 'I' => +9, 'K' => +10, 'L' => +11, 'M' => +12,
      'N' => -1, 'O' => -2, 'P' => -3, 'Q' => -4,  'R' => -5,  'S' => -6,
      'T' => -7, 'U' => -8, 'V' => -9, 'W' => -10, 'X' => -11, 'Y' => -12,
    }

    #
    # Return the number of seconds the specified time zone differs
    # from UTC.
    #
    # Numeric time zones that include minutes, such as
    # <code>-10:00</code> or <code>+1330</code> will work, as will
    # simpler hour-only time zones like <code>-10</code> or
    # <code>+13</code>.
    #
    # Textual time zones listed in ZoneOffset are also supported.
    #
    # If the time zone does not match any of the above, +zone_offset+
    # will check if the local time zone (both with and without
    # potential Daylight Saving \Time changes being in effect) matches
    # +zone+. Specifying a value for +year+ will change the year used
    # to find the local time zone.
    #
    # If +zone_offset+ is unable to determine the offset, nil will be
    # returned.
    #
    #     require 'time'
    #
    #     Time.zone_offset("EST") #=> -18000
    #
    # You must require 'time' to use this method.
    #
    def zone_offset(zone, year=self.now.year)
      off = nil
      zone = zone.upcase
      if /\A([+-])(\d\d)(:?)(\d\d)(?:\3(\d\d))?\z/ =~ zone
        off = ($1 == '-' ? -1 : 1) * (($2.to_i * 60 + $4.to_i) * 60 + $5.to_i)
      elsif zone.match?(/\A[+-]\d\d\z/)
        off = zone.to_i * 3600
      elsif ZoneOffset.include?(zone)
        off = ZoneOffset[zone] * 3600
      elsif ((t = self.local(year, 1, 1)).zone.upcase == zone rescue false)
        off = t.utc_offset
      elsif ((t = self.local(year, 7, 1)).zone.upcase == zone rescue false)
        off = t.utc_offset
      end
      off
    end

    # :stopdoc:
    def zone_utc?(zone)
      # * +0000
      #   In RFC 2822, +0000 indicate a time zone at Universal Time.
      #   Europe/Lisbon is "a time zone at Universal Time" in Winter.
      #   Atlantic/Reykjavik is "a time zone at Universal Time".
      #   Africa/Dakar is "a time zone at Universal Time".
      #   So +0000 is a local time such as Europe/London, etc.
      # * GMT
      #   GMT is used as a time zone abbreviation in Europe/London,
      #   Africa/Dakar, etc.
      #   So it is a local time.
      #
      # * -0000, -00:00
      #   In RFC 2822, -0000 the date-time contains no information about the
      #   local time zone.
      #   In RFC 3339, -00:00 is used for the time in UTC is known,
      #   but the offset to local time is unknown.
      #   They are not appropriate for specific time zone such as
      #   Europe/London because time zone neutral,
      #   So -00:00 and -0000 are treated as UTC.
      zone.match?(/\A(?:-00:00|-0000|-00|UTC|Z|UT)\z/i)
    end
    private :zone_utc?

    def force_zone!(t, zone, offset=nil)
      if zone_utc?(zone)
        t.utc
      elsif offset ||= zone_offset(zone)
        # Prefer the local timezone over the fixed offset timezone because
        # the former is a real timezone and latter is an artificial timezone.
        t.localtime
        if t.utc_offset != offset
          # Use the fixed offset timezone only if the local timezone cannot
          # represent the given offset.
          t.localtime(offset)
        end
      else
        t.localtime
      end
    end
    private :force_zone!

    LeapYearMonthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # :nodoc:
    CommonYearMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # :nodoc:
    def month_days(y, m)
      if ((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)
        LeapYearMonthDays[m-1]
      else
        CommonYearMonthDays[m-1]
      end
    end
    private :month_days

    def apply_offset(year, mon, day, hour, min, sec, off)
      if off < 0
        off = -off
        off, o = off.divmod(60)
        if o != 0 then sec += o; o, sec = sec.divmod(60); off += o end
        off, o = off.divmod(60)
        if o != 0 then min += o; o, min = min.divmod(60); off += o end
        off, o = off.divmod(24)
        if o != 0 then hour += o; o, hour = hour.divmod(24); off += o end
        if off != 0
          day += off
          days = month_days(year, mon)
          if days and days < day
            mon += 1
            if 12 < mon
              mon = 1
              year += 1
            end
            day = 1
          end
        end
      elsif 0 < off
        off, o = off.divmod(60)
        if o != 0 then sec -= o; o, sec = sec.divmod(60); off -= o end
        off, o = off.divmod(60)
        if o != 0 then min -= o; o, min = min.divmod(60); off -= o end
        off, o = off.divmod(24)
        if o != 0 then hour -= o; o, hour = hour.divmod(24); off -= o end
        if off != 0 then
          day -= off
          if day < 1
            mon -= 1
            if mon < 1
              year -= 1
              mon = 12
            end
            day = month_days(year, mon)
          end
        end
      end
      return year, mon, day, hour, min, sec
    end
    private :apply_offset

    def make_time(date, year, yday, mon, day, hour, min, sec, sec_fraction, zone, now)
      if !year && !yday && !mon && !day && !hour && !min && !sec && !sec_fraction
        raise ArgumentError, "no time information in #{date.inspect}"
      end

      off = nil
      if year || now
        off_year = year || now.year
        off = zone_offset(zone, off_year) if zone
      end

      if yday
        unless (1..366) === yday
          raise ArgumentError, "yday #{yday} out of range"
        end
        mon, day = (yday-1).divmod(31)
        mon += 1
        day += 1
        t = make_time(date, year, nil, mon, day, hour, min, sec, sec_fraction, zone, now)
        diff = yday - t.yday
        return t if diff.zero?
        day += diff
        if day > 28 and day > (mday = month_days(off_year, mon))
          if (mon += 1) > 12
            raise ArgumentError, "yday #{yday} out of range"
          end
          day -= mday
        end
        return make_time(date, year, nil, mon, day, hour, min, sec, sec_fraction, zone, now)
      end

      if now and now.respond_to?(:getlocal)
        if off
          now = now.getlocal(off) if now.utc_offset != off
        else
          now = now.getlocal
        end
      end

      usec = nil
      usec = sec_fraction * 1000000 if sec_fraction

      if now
        begin
          break if year; year = now.year
          break if mon; mon = now.mon
          break if day; day = now.day
          break if hour; hour = now.hour
          break if min; min = now.min
          break if sec; sec = now.sec
          break if sec_fraction; usec = now.tv_usec
        end until true
      end

      year ||= 1970
      mon ||= 1
      day ||= 1
      hour ||= 0
      min ||= 0
      sec ||= 0
      usec ||= 0

      if year != off_year
        off = nil
        off = zone_offset(zone, year) if zone
      end

      if off
        year, mon, day, hour, min, sec =
          apply_offset(year, mon, day, hour, min, sec, off)
        t = self.utc(year, mon, day, hour, min, sec, usec)
        force_zone!(t, zone, off)
        t
      else
        self.local(year, mon, day, hour, min, sec, usec)
      end
    end
    private :make_time
    # :startdoc:

    #
    # Takes a string representation of a Time and attempts to parse it
    # using a heuristic.
    #
    # This method **does not** function as a validator.  If the input
    # string does not match valid formats strictly, you may get a
    # cryptic result.  Should consider to use Time.strptime instead
    # of this method as possible.
    #
    #     require 'time'
    #
    #     Time.parse("2010-10-31") #=> 2010-10-31 00:00:00 -0500
    #
    # Any missing pieces of the date are inferred based on the current date.
    #
    #     require 'time'
    #
    #     # assuming the current date is "2011-10-31"
    #     Time.parse("12:00") #=> 2011-10-31 12:00:00 -0500
    #
    # We can change the date used to infer our missing elements by passing a second
    # object that responds to #mon, #day and #year, such as Date, Time or DateTime.
    # We can also use our own object.
    #
    #     require 'time'
    #
    #     class MyDate
    #       attr_reader :mon, :day, :year
    #
    #       def initialize(mon, day, year)
    #         @mon, @day, @year = mon, day, year
    #       end
    #     end
    #
    #     d  = Date.parse("2010-10-28")
    #     t  = Time.parse("2010-10-29")
    #     dt = DateTime.parse("2010-10-30")
    #     md = MyDate.new(10,31,2010)
    #
    #     Time.parse("12:00", d)  #=> 2010-10-28 12:00:00 -0500
    #     Time.parse("12:00", t)  #=> 2010-10-29 12:00:00 -0500
    #     Time.parse("12:00", dt) #=> 2010-10-30 12:00:00 -0500
    #     Time.parse("12:00", md) #=> 2010-10-31 12:00:00 -0500
    #
    # If a block is given, the year described in +date+ is converted
    # by the block.  This is specifically designed for handling two
    # digit years. For example, if you wanted to treat all two digit
    # years prior to 70 as the year 2000+ you could write this:
    #
    #     require 'time'
    #
    #     Time.parse("01-10-31") {|year| year + (year < 70 ? 2000 : 1900)}
    #     #=> 2001-10-31 00:00:00 -0500
    #     Time.parse("70-10-31") {|year| year + (year < 70 ? 2000 : 1900)}
    #     #=> 1970-10-31 00:00:00 -0500
    #
    # If the upper components of the given time are broken or missing, they are
    # supplied with those of +now+.  For the lower components, the minimum
    # values (1 or 0) are assumed if broken or missing.  For example:
    #
    #     require 'time'
    #
    #     # Suppose it is "Thu Nov 29 14:33:20 2001" now and
    #     # your time zone is EST which is GMT-5.
    #     now = Time.parse("Thu Nov 29 14:33:20 2001")
    #     Time.parse("16:30", now)     #=> 2001-11-29 16:30:00 -0500
    #     Time.parse("7/23", now)      #=> 2001-07-23 00:00:00 -0500
    #     Time.parse("Aug 31", now)    #=> 2001-08-31 00:00:00 -0500
    #     Time.parse("Aug 2000", now)  #=> 2000-08-01 00:00:00 -0500
    #
    # Since there are numerous conflicts among locally defined time zone
    # abbreviations all over the world, this method is not intended to
    # understand all of them.  For example, the abbreviation "CST" is
    # used variously as:
    #
    #     -06:00 in America/Chicago,
    #     -05:00 in America/Havana,
    #     +08:00 in Asia/Harbin,
    #     +09:30 in Australia/Darwin,
    #     +10:30 in Australia/Adelaide,
    #     etc.
    #
    # Based on this fact, this method only understands the time zone
    # abbreviations described in RFC 822 and the system time zone, in the
    # order named. (i.e. a definition in RFC 822 overrides the system
    # time zone definition.)  The system time zone is taken from
    # <tt>Time.local(year, 1, 1).zone</tt> and
    # <tt>Time.local(year, 7, 1).zone</tt>.
    # If the extracted time zone abbreviation does not match any of them,
    # it is ignored and the given time is regarded as a local time.
    #
    # ArgumentError is raised if Date._parse cannot extract information from
    # +date+ or if the Time class cannot represent specified date.
    #
    # This method can be used as a fail-safe for other parsing methods as:
    #
    #   Time.rfc2822(date) rescue Time.parse(date)
    #   Time.httpdate(date) rescue Time.parse(date)
    #   Time.xmlschema(date) rescue Time.parse(date)
    #
    # A failure of Time.parse should be checked, though.
    #
    # You must require 'time' to use this method.
    #
    def parse(date, now=self.now)
      comp = !block_given?
      d = Date._parse(date, comp)
      year = d[:year]
      year = yield(year) if year && !comp
      make_time(date, year, d[:yday], d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
    end

    #
    # Works similar to +parse+ except that instead of using a
    # heuristic to detect the format of the input string, you provide
    # a second argument that describes the format of the string.
    #
    # Raises ArgumentError if the date or format is invalid.
    #
    # If a block is given, the year described in +date+ is converted by the
    # block.  For example:
    #
    #   Time.strptime(...) {|y| y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}
    #
    # Below is a list of the formatting options:
    #
    # %a :: The abbreviated weekday name ("Sun")
    # %A :: The  full  weekday  name ("Sunday")
    # %b :: The abbreviated month name ("Jan")
    # %B :: The  full  month  name ("January")
    # %c :: The preferred local date and time representation
    # %C :: Century (20 in 2009)
    # %d :: Day of the month (01..31)
    # %D :: \Date (%m/%d/%y)
    # %e :: Day of the month, blank-padded ( 1..31)
    # %F :: Equivalent to %Y-%m-%d (the ISO 8601 date format)
    # %g :: The last two digits of the commercial year
    # %G :: The week-based year according to ISO-8601 (week 1 starts on Monday
    #       and includes January 4)
    # %h :: Equivalent to %b
    # %H :: Hour of the day, 24-hour clock (00..23)
    # %I :: Hour of the day, 12-hour clock (01..12)
    # %j :: Day of the year (001..366)
    # %k :: hour, 24-hour clock, blank-padded ( 0..23)
    # %l :: hour, 12-hour clock, blank-padded ( 0..12)
    # %L :: Millisecond of the second (000..999)
    # %m :: Month of the year (01..12)
    # %M :: Minute of the hour (00..59)
    # %n :: Newline (\n)
    # %N :: Fractional seconds digits
    # %p :: Meridian indicator ("AM" or "PM")
    # %P :: Meridian indicator ("am" or "pm")
    # %r :: time, 12-hour (same as %I:%M:%S %p)
    # %R :: time, 24-hour (%H:%M)
    # %s :: Number of seconds since 1970-01-01 00:00:00 UTC.
    # %S :: Second of the minute (00..60)
    # %t :: Tab character (\t)
    # %T :: time, 24-hour (%H:%M:%S)
    # %u :: Day of the week as a decimal, Monday being 1. (1..7)
    # %U :: Week number of the current year, starting with the first Sunday as
    #       the first day of the first week (00..53)
    # %v :: VMS date (%e-%b-%Y)
    # %V :: Week number of year according to ISO 8601 (01..53)
    # %W :: Week  number  of the current year, starting with the first Monday
    #       as the first day of the first week (00..53)
    # %w :: Day of the week (Sunday is 0, 0..6)
    # %x :: Preferred representation for the date alone, no time
    # %X :: Preferred representation for the time alone, no date
    # %y :: Year without a century (00..99)
    # %Y :: Year which may include century, if provided
    # %z :: \Time zone as hour offset from UTC (e.g. +0900)
    # %Z :: \Time zone name
    # %% :: Literal "%" character
    # %+ :: date(1) (%a %b %e %H:%M:%S %Z %Y)
    #
    #     require 'time'
    #
    #     Time.strptime("2000-10-31", "%Y-%m-%d") #=> 2000-10-31 00:00:00 -0500
    #
    # You must require 'time' to use this method.
    #
    def strptime(date, format, now=self.now)
      d = Date._strptime(date, format)
      raise ArgumentError, "invalid date or strptime format - '#{date}' '#{format}'" unless d
      if seconds = d[:seconds]
        if sec_fraction = d[:sec_fraction]
          usec = sec_fraction * 1000000
          usec *= -1 if seconds < 0
        else
          usec = 0
        end
        t = Time.at(seconds, usec)
        if zone = d[:zone]
          force_zone!(t, zone)
        end
      else
        year = d[:year]
        year = yield(year) if year && block_given?
        yday = d[:yday]
        if (d[:cwyear] && !year) || ((d[:cwday] || d[:cweek]) && !(d[:mon] && d[:mday]))
          # make_time doesn't deal with cwyear/cwday/cweek
          return Date.strptime(date, format).to_time
        end
        if (d[:wnum0] || d[:wnum1]) && !yday && !(d[:mon] && d[:mday])
          yday = Date.strptime(date, format).yday
        end
        t = make_time(date, year, yday, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
      end
      t
    end

    MonthValue = { # :nodoc:
      'JAN' => 1, 'FEB' => 2, 'MAR' => 3, 'APR' => 4, 'MAY' => 5, 'JUN' => 6,
      'JUL' => 7, 'AUG' => 8, 'SEP' => 9, 'OCT' =>10, 'NOV' =>11, 'DEC' =>12
    }

    #
    # Parses +date+ as date-time defined by RFC 2822 and converts it to a Time
    # object.  The format is identical to the date format defined by RFC 822 and
    # updated by RFC 1123.
    #
    # ArgumentError is raised if +date+ is not compliant with RFC 2822
    # or if the Time class cannot represent specified date.
    #
    # See #rfc2822 for more information on this format.
    #
    #     require 'time'
    #
    #     Time.rfc2822("Wed, 05 Oct 2011 22:26:12 -0400")
    #     #=> 2010-10-05 22:26:12 -0400
    #
    # You must require 'time' to use this method.
    #
    def rfc2822(date)
      if /\A\s*
          (?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s*,\s*)?
          (\d{1,2})\s+
          (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+
          (\d{2,})\s+
          (\d{2})\s*
          :\s*(\d{2})
          (?:\s*:\s*(\d\d))?\s+
          ([+-]\d{4}|
           UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[A-IK-Z])/ix =~ date
        # Since RFC 2822 permit comments, the regexp has no right anchor.
        day = $1.to_i
        mon = MonthValue[$2.upcase]
        year = $3.to_i
        short_year_p = $3.length <= 3
        hour = $4.to_i
        min = $5.to_i
        sec = $6 ? $6.to_i : 0
        zone = $7

        if short_year_p
          # following year completion is compliant with RFC 2822.
          year = if year < 50
                   2000 + year
                 else
                   1900 + year
                 end
        end

        off = zone_offset(zone)
        year, mon, day, hour, min, sec =
          apply_offset(year, mon, day, hour, min, sec, off)
        t = self.utc(year, mon, day, hour, min, sec)
        force_zone!(t, zone, off)
        t
      else
        raise ArgumentError.new("not RFC 2822 compliant date: #{date.inspect}")
      end
    end
    alias rfc822 rfc2822

    #
    # Parses +date+ as an HTTP-date defined by RFC 2616 and converts it to a
    # Time object.
    #
    # ArgumentError is raised if +date+ is not compliant with RFC 2616 or if
    # the Time class cannot represent specified date.
    #
    # See #httpdate for more information on this format.
    #
    #     require 'time'
    #
    #     Time.httpdate("Thu, 06 Oct 2011 02:26:12 GMT")
    #     #=> 2011-10-06 02:26:12 UTC
    #
    # You must require 'time' to use this method.
    #
    def httpdate(date)
      if date.match?(/\A\s*
          (?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\x20
          (\d{2})\x20
          (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\x20
          (\d{4})\x20
          (\d{2}):(\d{2}):(\d{2})\x20
          GMT
          \s*\z/ix)
        self.rfc2822(date).utc
      elsif /\A\s*
             (?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday),\x20
             (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d)\x20
             (\d\d):(\d\d):(\d\d)\x20
             GMT
             \s*\z/ix =~ date
        year = $3.to_i
        if year < 50
          year += 2000
        else
          year += 1900
        end
        self.utc(year, $2, $1.to_i, $4.to_i, $5.to_i, $6.to_i)
      elsif /\A\s*
             (?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)\x20
             (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\x20
             (\d\d|\x20\d)\x20
             (\d\d):(\d\d):(\d\d)\x20
             (\d{4})
             \s*\z/ix =~ date
        self.utc($6.to_i, MonthValue[$1.upcase], $2.to_i,
                 $3.to_i, $4.to_i, $5.to_i)
      else
        raise ArgumentError.new("not RFC 2616 compliant date: #{date.inspect}")
      end
    end

    #
    # Parses +time+ as a dateTime defined by the XML Schema and converts it to
    # a Time object.  The format is a restricted version of the format defined
    # by ISO 8601.
    #
    # ArgumentError is raised if +time+ is not compliant with the format or if
    # the Time class cannot represent the specified time.
    #
    # See #xmlschema for more information on this format.
    #
    #     require 'time'
    #
    #     Time.xmlschema("2011-10-05T22:26:12-04:00")
    #     #=> 2011-10-05 22:26:12-04:00
    #
    # You must require 'time' to use this method.
    #
    def xmlschema(time)
      if /\A\s*
          (-?\d+)-(\d\d)-(\d\d)
          T
          (\d\d):(\d\d):(\d\d)
          (\.\d+)?
          (Z|[+-]\d\d(?::?\d\d)?)?
          \s*\z/ix =~ time
        year = $1.to_i
        mon = $2.to_i
        day = $3.to_i
        hour = $4.to_i
        min = $5.to_i
        sec = $6.to_i
        usec = 0
        if $7
          usec = Rational($7) * 1000000
        end
        if $8
          zone = $8
          off = zone_offset(zone)
          year, mon, day, hour, min, sec =
            apply_offset(year, mon, day, hour, min, sec, off)
          t = self.utc(year, mon, day, hour, min, sec, usec)
          force_zone!(t, zone, off)
          t
        else
          self.local(year, mon, day, hour, min, sec, usec)
        end
      else
        raise ArgumentError.new("invalid xmlschema format: #{time.inspect}")
      end
    end
    alias iso8601 xmlschema
  end # class << self

  #
  # Returns a string which represents the time as date-time defined by RFC 2822:
  #
  #   day-of-week, DD month-name CCYY hh:mm:ss zone
  #
  # where zone is [+-]hhmm.
  #
  # If +self+ is a UTC time, -0000 is used as zone.
  #
  #     require 'time'
  #
  #     t = Time.now
  #     t.rfc2822  # => "Wed, 05 Oct 2011 22:26:12 -0400"
  #
  # You must require 'time' to use this method.
  #
  def rfc2822
    strftime('%a, %d %b %Y %T ') << (utc? ? '-0000' : strftime('%z'))
  end
  alias rfc822 rfc2822

  #
  # Returns a string which represents the time as RFC 1123 date of HTTP-date
  # defined by RFC 2616:
  #
  #   day-of-week, DD month-name CCYY hh:mm:ss GMT
  #
  # Note that the result is always UTC (GMT).
  #
  #     require 'time'
  #
  #     t = Time.now
  #     t.httpdate # => "Thu, 06 Oct 2011 02:26:12 GMT"
  #
  # You must require 'time' to use this method.
  #
  def httpdate
    getutc.strftime('%a, %d %b %Y %T GMT')
  end

  unless method_defined?(:xmlschema)
    #
    # Returns a string which represents the time as a dateTime defined by XML
    # Schema:
    #
    #   CCYY-MM-DDThh:mm:ssTZD
    #   CCYY-MM-DDThh:mm:ss.sssTZD
    #
    # where TZD is Z or [+-]hh:mm.
    #
    # If self is a UTC time, Z is used as TZD.  [+-]hh:mm is used otherwise.
    #
    # +fraction_digits+ specifies a number of digits to use for fractional
    # seconds.  Its default value is 0.
    #
    #     require 'time'
    #
    #     t = Time.now
    #     t.iso8601  # => "2011-10-05T22:26:12-04:00"
    #
    # You must require 'time' to use this method.
    #
    def xmlschema(fraction_digits=0)
      fraction_digits = fraction_digits.to_i
      s = strftime("%FT%T")
      if fraction_digits > 0
        s << strftime(".%#{fraction_digits}N")
      end
      s << (utc? ? 'Z' : strftime("%:z"))
    end
  end
  alias iso8601 xmlschema unless method_defined?(:iso8601)
end
PK*J[%share/gems/gems/psych-5.2.2/lib/psychnuȯ��PK*J[N.����share/ruby/expect.rbnu�[���# frozen_string_literal: true
$expect_verbose = false

class IO
  # call-seq:
  #   IO#expect(pattern,timeout=9999999)                  ->  Array
  #   IO#expect(pattern,timeout=9999999) { |result| ... } ->  nil
  #
  # The +expect+ library adds instance method IO#expect,
  # which is similar to the
  # {TCL expect extension}[https://www.tcl.tk/man/expect5.31/expect.1.html].
  #
  # To use this method, you must require +expect+:
  #
  #   require 'expect'
  #
  # Reads from the IO until the given +pattern+ matches or the +timeout+ is over.
  #
  # It returns an array with the read buffer, followed by the matches.
  # If a block is given, the result is yielded to the block and returns nil.
  #
  # When called without a block, it waits until the input that matches the
  # given +pattern+ is obtained from the IO or the time specified as the
  # timeout passes. An array is returned when the pattern is obtained from the
  # IO. The first element of the array is the entire string obtained from the
  # IO until the pattern matches, followed by elements indicating which the
  # pattern which matched to the anchor in the regular expression.
  #
  # The optional timeout parameter defines, in seconds, the total time to wait
  # for the pattern.  If the timeout expires or eof is found, nil is returned
  # or yielded.  However, the buffer in a timeout session is kept for the next
  # expect call.  The default timeout is 9999999 seconds.
  def expect(pat,timeout=9999999)
    buf = ''.dup
    case pat
    when String
      e_pat = Regexp.new(Regexp.quote(pat))
    when Regexp
      e_pat = pat
    else
      raise TypeError, "unsupported pattern class: #{pat.class}"
    end
    @unusedBuf ||= ''
    while true
      if not @unusedBuf.empty?
        c = @unusedBuf.slice!(0)
      elsif !IO.select([self],nil,nil,timeout) or eof? then
        result = nil
        @unusedBuf = buf
        break
      else
        c = getc
      end
      buf << c
      if $expect_verbose
        STDOUT.print c
        STDOUT.flush
      end
      if mat=e_pat.match(buf) then
        result = [buf,*mat.captures]
        break
      end
    end
    if block_given? then
      yield result
    else
      return result
    end
    nil
  end
end
PK*J[-
i�#:#:share/ruby/erb.rbnu�[���# -*- coding: us-ascii -*-
# frozen_string_literal: true
# = ERB -- Ruby Templating
#
# Author:: Masatoshi SEKI
# Documentation:: James Edward Gray II, Gavin Sinclair, and Simon Chiang
#
# See ERB for primary documentation and ERB::Util for a couple of utility
# routines.
#
# Copyright (c) 1999-2000,2002,2003 Masatoshi SEKI
#
# You can redistribute it and/or modify it under the same terms as Ruby.

require 'cgi/util'
require 'erb/version'
require 'erb/compiler'
require 'erb/def_method'
require 'erb/util'

#
# = ERB -- Ruby Templating
#
# == Introduction
#
# ERB provides an easy to use but powerful templating system for Ruby.  Using
# ERB, actual Ruby code can be added to any plain text document for the
# purposes of generating document information details and/or flow control.
#
# A very simple example is this:
#
#   require 'erb'
#
#   x = 42
#   template = ERB.new <<-EOF
#     The value of x is: <%= x %>
#   EOF
#   puts template.result(binding)
#
# <em>Prints:</em> The value of x is: 42
#
# More complex examples are given below.
#
#
# == Recognized Tags
#
# ERB recognizes certain tags in the provided template and converts them based
# on the rules below:
#
#   <% Ruby code -- inline with output %>
#   <%= Ruby expression -- replace with result %>
#   <%# comment -- ignored -- useful in testing %> (`<% #` doesn't work. Don't use Ruby comments.)
#   % a line of Ruby code -- treated as <% line %> (optional -- see ERB.new)
#   %% replaced with % if first thing on a line and % processing is used
#   <%% or %%> -- replace with <% or %> respectively
#
# All other text is passed through ERB filtering unchanged.
#
#
# == Options
#
# There are several settings you can change when you use ERB:
# * the nature of the tags that are recognized;
# * the binding used to resolve local variables in the template.
#
# See the ERB.new and ERB#result methods for more detail.
#
# == Character encodings
#
# ERB (or Ruby code generated by ERB) returns a string in the same
# character encoding as the input string.  When the input string has
# a magic comment, however, it returns a string in the encoding specified
# by the magic comment.
#
#   # -*- coding: utf-8 -*-
#   require 'erb'
#
#   template = ERB.new <<EOF
#   <%#-*- coding: Big5 -*-%>
#     \_\_ENCODING\_\_ is <%= \_\_ENCODING\_\_ %>.
#   EOF
#   puts template.result
#
# <em>Prints:</em> \_\_ENCODING\_\_ is Big5.
#
#
# == Examples
#
# === Plain Text
#
# ERB is useful for any generic templating situation.  Note that in this example, we use the
# convenient "% at start of line" tag, and we quote the template literally with
# <tt>%q{...}</tt> to avoid trouble with the backslash.
#
#   require "erb"
#
#   # Create template.
#   template = %q{
#     From:  James Edward Gray II <james@grayproductions.net>
#     To:  <%= to %>
#     Subject:  Addressing Needs
#
#     <%= to[/\w+/] %>:
#
#     Just wanted to send a quick note assuring that your needs are being
#     addressed.
#
#     I want you to know that my team will keep working on the issues,
#     especially:
#
#     <%# ignore numerous minor requests -- focus on priorities %>
#     % priorities.each do |priority|
#       * <%= priority %>
#     % end
#
#     Thanks for your patience.
#
#     James Edward Gray II
#   }.gsub(/^  /, '')
#
#   message = ERB.new(template, trim_mode: "%<>")
#
#   # Set up template data.
#   to = "Community Spokesman <spokesman@ruby_community.org>"
#   priorities = [ "Run Ruby Quiz",
#                  "Document Modules",
#                  "Answer Questions on Ruby Talk" ]
#
#   # Produce result.
#   email = message.result
#   puts email
#
# <i>Generates:</i>
#
#   From:  James Edward Gray II <james@grayproductions.net>
#   To:  Community Spokesman <spokesman@ruby_community.org>
#   Subject:  Addressing Needs
#
#   Community:
#
#   Just wanted to send a quick note assuring that your needs are being addressed.
#
#   I want you to know that my team will keep working on the issues, especially:
#
#       * Run Ruby Quiz
#       * Document Modules
#       * Answer Questions on Ruby Talk
#
#   Thanks for your patience.
#
#   James Edward Gray II
#
# === Ruby in HTML
#
# ERB is often used in <tt>.rhtml</tt> files (HTML with embedded Ruby).  Notice the need in
# this example to provide a special binding when the template is run, so that the instance
# variables in the Product object can be resolved.
#
#   require "erb"
#
#   # Build template data class.
#   class Product
#     def initialize( code, name, desc, cost )
#       @code = code
#       @name = name
#       @desc = desc
#       @cost = cost
#
#       @features = [ ]
#     end
#
#     def add_feature( feature )
#       @features << feature
#     end
#
#     # Support templating of member data.
#     def get_binding
#       binding
#     end
#
#     # ...
#   end
#
#   # Create template.
#   template = %{
#     <html>
#       <head><title>Ruby Toys -- <%= @name %></title></head>
#       <body>
#
#         <h1><%= @name %> (<%= @code %>)</h1>
#         <p><%= @desc %></p>
#
#         <ul>
#           <% @features.each do |f| %>
#             <li><b><%= f %></b></li>
#           <% end %>
#         </ul>
#
#         <p>
#           <% if @cost < 10 %>
#             <b>Only <%= @cost %>!!!</b>
#           <% else %>
#              Call for a price, today!
#           <% end %>
#         </p>
#
#       </body>
#     </html>
#   }.gsub(/^  /, '')
#
#   rhtml = ERB.new(template)
#
#   # Set up template data.
#   toy = Product.new( "TZ-1002",
#                      "Rubysapien",
#                      "Geek's Best Friend!  Responds to Ruby commands...",
#                      999.95 )
#   toy.add_feature("Listens for verbal commands in the Ruby language!")
#   toy.add_feature("Ignores Perl, Java, and all C variants.")
#   toy.add_feature("Karate-Chop Action!!!")
#   toy.add_feature("Matz signature on left leg.")
#   toy.add_feature("Gem studded eyes... Rubies, of course!")
#
#   # Produce result.
#   rhtml.run(toy.get_binding)
#
# <i>Generates (some blank lines removed):</i>
#
#    <html>
#      <head><title>Ruby Toys -- Rubysapien</title></head>
#      <body>
#
#        <h1>Rubysapien (TZ-1002)</h1>
#        <p>Geek's Best Friend!  Responds to Ruby commands...</p>
#
#        <ul>
#            <li><b>Listens for verbal commands in the Ruby language!</b></li>
#            <li><b>Ignores Perl, Java, and all C variants.</b></li>
#            <li><b>Karate-Chop Action!!!</b></li>
#            <li><b>Matz signature on left leg.</b></li>
#            <li><b>Gem studded eyes... Rubies, of course!</b></li>
#        </ul>
#
#        <p>
#             Call for a price, today!
#        </p>
#
#      </body>
#    </html>
#
#
# == Notes
#
# There are a variety of templating solutions available in various Ruby projects.
# For example, RDoc, distributed with Ruby, uses its own template engine, which
# can be reused elsewhere.
#
# Other popular engines could be found in the corresponding
# {Category}[https://www.ruby-toolbox.com/categories/template_engines] of
# The Ruby Toolbox.
#
class ERB
  Revision = '$Date::                           $' # :nodoc: #'
  deprecate_constant :Revision

  # Returns revision information for the erb.rb module.
  def self.version
    VERSION
  end

  #
  # Constructs a new ERB object with the template specified in _str_.
  #
  # An ERB object works by building a chunk of Ruby code that will output
  # the completed template when run.
  #
  # If _trim_mode_ is passed a String containing one or more of the following
  # modifiers, ERB will adjust its code generation as listed:
  #
  #     %  enables Ruby code processing for lines beginning with %
  #     <> omit newline for lines starting with <% and ending in %>
  #     >  omit newline for lines ending in %>
  #     -  omit blank lines ending in -%>
  #
  # _eoutvar_ can be used to set the name of the variable ERB will build up
  # its output in.  This is useful when you need to run multiple ERB
  # templates through the same binding and/or when you want to control where
  # output ends up.  Pass the name of the variable to be used inside a String.
  #
  # === Example
  #
  #  require "erb"
  #
  #  # build data class
  #  class Listings
  #    PRODUCT = { :name => "Chicken Fried Steak",
  #                :desc => "A well messages pattie, breaded and fried.",
  #                :cost => 9.95 }
  #
  #    attr_reader :product, :price
  #
  #    def initialize( product = "", price = "" )
  #      @product = product
  #      @price = price
  #    end
  #
  #    def build
  #      b = binding
  #      # create and run templates, filling member data variables
  #      ERB.new(<<~'END_PRODUCT', trim_mode: "", eoutvar: "@product").result b
  #        <%= PRODUCT[:name] %>
  #        <%= PRODUCT[:desc] %>
  #      END_PRODUCT
  #      ERB.new(<<~'END_PRICE', trim_mode: "", eoutvar: "@price").result b
  #        <%= PRODUCT[:name] %> -- <%= PRODUCT[:cost] %>
  #        <%= PRODUCT[:desc] %>
  #      END_PRICE
  #    end
  #  end
  #
  #  # setup template data
  #  listings = Listings.new
  #  listings.build
  #
  #  puts listings.product + "\n" + listings.price
  #
  # _Generates_
  #
  #  Chicken Fried Steak
  #  A well messages pattie, breaded and fried.
  #
  #  Chicken Fried Steak -- 9.95
  #  A well messages pattie, breaded and fried.
  #
  def initialize(str, safe_level=NOT_GIVEN, legacy_trim_mode=NOT_GIVEN, legacy_eoutvar=NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout')
    # Complex initializer for $SAFE deprecation at [Feature #14256]. Use keyword arguments to pass trim_mode or eoutvar.
    if safe_level != NOT_GIVEN
      warn 'Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments.', uplevel: 1
    end
    if legacy_trim_mode != NOT_GIVEN
      warn 'Passing trim_mode with the 3rd argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, trim_mode: ...) instead.', uplevel: 1
      trim_mode = legacy_trim_mode
    end
    if legacy_eoutvar != NOT_GIVEN
      warn 'Passing eoutvar with the 4th argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, eoutvar: ...) instead.', uplevel: 1
      eoutvar = legacy_eoutvar
    end

    compiler = make_compiler(trim_mode)
    set_eoutvar(compiler, eoutvar)
    @src, @encoding, @frozen_string = *compiler.compile(str)
    @filename = nil
    @lineno = 0
    @_init = self.class.singleton_class
  end
  NOT_GIVEN = Object.new
  private_constant :NOT_GIVEN

  ##
  # Creates a new compiler for ERB.  See ERB::Compiler.new for details

  def make_compiler(trim_mode)
    ERB::Compiler.new(trim_mode)
  end

  # The Ruby code generated by ERB
  attr_reader :src

  # The encoding to eval
  attr_reader :encoding

  # The optional _filename_ argument passed to Kernel#eval when the ERB code
  # is run
  attr_accessor :filename

  # The optional _lineno_ argument passed to Kernel#eval when the ERB code
  # is run
  attr_accessor :lineno

  #
  # Sets optional filename and line number that will be used in ERB code
  # evaluation and error reporting. See also #filename= and #lineno=
  #
  #   erb = ERB.new('<%= some_x %>')
  #   erb.render
  #   # undefined local variable or method `some_x'
  #   #   from (erb):1
  #
  #   erb.location = ['file.erb', 3]
  #   # All subsequent error reporting would use new location
  #   erb.render
  #   # undefined local variable or method `some_x'
  #   #   from file.erb:4
  #
  def location=((filename, lineno))
    @filename = filename
    @lineno = lineno if lineno
  end

  #
  # Can be used to set _eoutvar_ as described in ERB::new.  It's probably
  # easier to just use the constructor though, since calling this method
  # requires the setup of an ERB _compiler_ object.
  #
  def set_eoutvar(compiler, eoutvar = '_erbout')
    compiler.put_cmd = "#{eoutvar}.<<"
    compiler.insert_cmd = "#{eoutvar}.<<"
    compiler.pre_cmd = ["#{eoutvar} = +''"]
    compiler.post_cmd = [eoutvar]
  end

  # Generate results and print them. (see ERB#result)
  def run(b=new_toplevel)
    print self.result(b)
  end

  #
  # Executes the generated ERB code to produce a completed template, returning
  # the results of that code.  (See ERB::new for details on how this process
  # can be affected by _safe_level_.)
  #
  # _b_ accepts a Binding object which is used to set the context of
  # code evaluation.
  #
  def result(b=new_toplevel)
    unless @_init.equal?(self.class.singleton_class)
      raise ArgumentError, "not initialized"
    end
    eval(@src, b, (@filename || '(erb)'), @lineno)
  end

  # Render a template on a new toplevel binding with local variables specified
  # by a Hash object.
  def result_with_hash(hash)
    b = new_toplevel(hash.keys)
    hash.each_pair do |key, value|
      b.local_variable_set(key, value)
    end
    result(b)
  end

  ##
  # Returns a new binding each time *near* TOPLEVEL_BINDING for runs that do
  # not specify a binding.

  def new_toplevel(vars = nil)
    b = TOPLEVEL_BINDING
    if vars
      vars = vars.select {|v| b.local_variable_defined?(v)}
      unless vars.empty?
        return b.eval("tap {|;#{vars.join(',')}| break binding}")
      end
    end
    b.dup
  end
  private :new_toplevel

  # Define _methodname_ as instance method of _mod_ from compiled Ruby source.
  #
  # example:
  #   filename = 'example.rhtml'   # 'arg1' and 'arg2' are used in example.rhtml
  #   erb = ERB.new(File.read(filename))
  #   erb.def_method(MyClass, 'render(arg1, arg2)', filename)
  #   print MyClass.new.render('foo', 123)
  def def_method(mod, methodname, fname='(ERB)')
    src = self.src.sub(/^(?!#|$)/) {"def #{methodname}\n"} << "\nend\n"
    mod.module_eval do
      eval(src, binding, fname, -1)
    end
  end

  # Create unnamed module, define _methodname_ as instance method of it, and return it.
  #
  # example:
  #   filename = 'example.rhtml'   # 'arg1' and 'arg2' are used in example.rhtml
  #   erb = ERB.new(File.read(filename))
  #   erb.filename = filename
  #   MyModule = erb.def_module('render(arg1, arg2)')
  #   class MyClass
  #     include MyModule
  #   end
  def def_module(methodname='erb')
    mod = Module.new
    def_method(mod, methodname, @filename || '(ERB)')
    mod
  end

  # Define unnamed class which has _methodname_ as instance method, and return it.
  #
  # example:
  #   class MyClass_
  #     def initialize(arg1, arg2)
  #       @arg1 = arg1;  @arg2 = arg2
  #     end
  #   end
  #   filename = 'example.rhtml'  # @arg1 and @arg2 are used in example.rhtml
  #   erb = ERB.new(File.read(filename))
  #   erb.filename = filename
  #   MyClass = erb.def_class(MyClass_, 'render()')
  #   print MyClass.new('foo', 123).render()
  def def_class(superklass=Object, methodname='result')
    cls = Class.new(superklass)
    def_method(cls, methodname, @filename || '(ERB)')
    cls
  end
end
PK*J[Wܢ��Y�Yshare/ruby/ipaddr.rbnu�[���# frozen_string_literal: true
#
# ipaddr.rb - A class to manipulate an IP address
#
# Copyright (c) 2002 Hajimu UMEMOTO <ume@mahoroba.org>.
# Copyright (c) 2007, 2009, 2012 Akinori MUSHA <knu@iDaemons.org>.
# All rights reserved.
#
# You can redistribute and/or modify it under the same terms as Ruby.
#
# $Id$
#
# Contact:
#   - Akinori MUSHA <knu@iDaemons.org> (current maintainer)
#
# TODO:
#   - scope_id support
#
require 'socket'

# IPAddr provides a set of methods to manipulate an IP address.  Both IPv4 and
# IPv6 are supported.
#
# == Example
#
#   require 'ipaddr'
#
#   ipaddr1 = IPAddr.new "3ffe:505:2::1"
#
#   p ipaddr1                   #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
#
#   p ipaddr1.to_s              #=> "3ffe:505:2::1"
#
#   ipaddr2 = ipaddr1.mask(48)  #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000>
#
#   p ipaddr2.to_s              #=> "3ffe:505:2::"
#
#   ipaddr3 = IPAddr.new "192.168.2.0/24"
#
#   p ipaddr3                   #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>

class IPAddr
  VERSION = "1.2.7"

  # 32 bit mask for IPv4
  IN4MASK = 0xffffffff
  # 128 bit mask for IPv6
  IN6MASK = 0xffffffffffffffffffffffffffffffff
  # Format string for IPv6
  IN6FORMAT = (["%.4x"] * 8).join(':').freeze

  # Regexp _internally_ used for parsing IPv4 address.
  RE_IPV4ADDRLIKE = %r{
    \A
    \d+ \. \d+ \. \d+ \. \d+
    \z
  }x

  # Regexp _internally_ used for parsing IPv6 address.
  RE_IPV6ADDRLIKE_FULL = %r{
    \A
    (?:
      (?: [\da-f]{1,4} : ){7} [\da-f]{1,4}
    |
      ( (?: [\da-f]{1,4} : ){6} )
      (\d+) \. (\d+) \. (\d+) \. (\d+)
    )
    \z
  }xi

  # Regexp _internally_ used for parsing IPv6 address.
  RE_IPV6ADDRLIKE_COMPRESSED = %r{
    \A
    ( (?: (?: [\da-f]{1,4} : )* [\da-f]{1,4} )? )
    ::
    ( (?:
      ( (?: [\da-f]{1,4} : )* )
      (?:
        [\da-f]{1,4}
      |
        (\d+) \. (\d+) \. (\d+) \. (\d+)
      )
    )? )
    \z
  }xi

  # Generic IPAddr related error. Exceptions raised in this class should
  # inherit from Error.
  class Error < ArgumentError; end

  # Raised when the provided IP address is an invalid address.
  class InvalidAddressError < Error; end

  # Raised when the address family is invalid such as an address with an
  # unsupported family, an address with an inconsistent family, or an address
  # who's family cannot be determined.
  class AddressFamilyError < Error; end

  # Raised when the address is an invalid length.
  class InvalidPrefixError < InvalidAddressError; end

  # Returns the address family of this IP address.
  attr_reader :family

  # Creates a new ipaddr containing the given network byte ordered
  # string form of an IP address.
  def self.new_ntoh(addr)
    return new(ntop(addr))
  end

  # Convert a network byte ordered string form of an IP address into
  # human readable form.
  # It expects the string to be encoded in Encoding::ASCII_8BIT (BINARY).
  def self.ntop(addr)
    if addr.is_a?(String) && addr.encoding != Encoding::BINARY
      raise InvalidAddressError, "invalid encoding (given #{addr.encoding}, expected BINARY)"
    end

    case addr.bytesize
    when 4
      addr.unpack('C4').join('.')
    when 16
      IN6FORMAT % addr.unpack('n8')
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  # Returns a new ipaddr built by bitwise AND.
  def &(other)
    return self.clone.set(@addr & coerce_other(other).to_i)
  end

  # Returns a new ipaddr built by bitwise OR.
  def |(other)
    return self.clone.set(@addr | coerce_other(other).to_i)
  end

  # Returns a new ipaddr built by bitwise right-shift.
  def >>(num)
    return self.clone.set(@addr >> num)
  end

  # Returns a new ipaddr built by bitwise left shift.
  def <<(num)
    return self.clone.set(addr_mask(@addr << num))
  end

  # Returns a new ipaddr built by bitwise negation.
  def ~
    return self.clone.set(addr_mask(~@addr))
  end

  # Returns true if two ipaddrs are equal.
  def ==(other)
    other = coerce_other(other)
  rescue
    false
  else
    @family == other.family && @addr == other.to_i
  end

  # Returns a new ipaddr built by masking IP address with the given
  # prefixlen/netmask. (e.g. 8, 64, "255.255.255.0", etc.)
  def mask(prefixlen)
    return self.clone.mask!(prefixlen)
  end

  # Returns true if the given ipaddr is in the range.
  #
  # e.g.:
  #   require 'ipaddr'
  #   net1 = IPAddr.new("192.168.2.0/24")
  #   net2 = IPAddr.new("192.168.2.100")
  #   net3 = IPAddr.new("192.168.3.0")
  #   net4 = IPAddr.new("192.168.2.0/16")
  #   p net1.include?(net2)     #=> true
  #   p net1.include?(net3)     #=> false
  #   p net1.include?(net4)     #=> false
  #   p net4.include?(net1)     #=> true
  def include?(other)
    other = coerce_other(other)
    return false unless other.family == family
    begin_addr <= other.begin_addr && end_addr >= other.end_addr
  end
  alias === include?

  # Returns the integer representation of the ipaddr.
  def to_i
    return @addr
  end

  # Returns a string containing the IP address representation.
  def to_s
    str = to_string
    return str if ipv4?

    str.gsub!(/\b0{1,3}([\da-f]+)\b/i, '\1')
    loop do
      break if str.sub!(/\A0:0:0:0:0:0:0:0\z/, '::')
      break if str.sub!(/\b0:0:0:0:0:0:0\b/, ':')
      break if str.sub!(/\b0:0:0:0:0:0\b/, ':')
      break if str.sub!(/\b0:0:0:0:0\b/, ':')
      break if str.sub!(/\b0:0:0:0\b/, ':')
      break if str.sub!(/\b0:0:0\b/, ':')
      break if str.sub!(/\b0:0\b/, ':')
      break
    end
    str.sub!(/:{3,}/, '::')

    if /\A::(ffff:)?([\da-f]{1,4}):([\da-f]{1,4})\z/i =~ str
      str = sprintf('::%s%d.%d.%d.%d', $1, $2.hex / 256, $2.hex % 256, $3.hex / 256, $3.hex % 256)
    end

    str
  end

  # Returns a string containing the IP address representation in
  # canonical form.
  def to_string
    str = _to_string(@addr)

    if @family == Socket::AF_INET6
      str << zone_id.to_s
    end

    return str
  end

  # Returns a string containing the IP address representation with prefix.
  def as_json(*)
    if ipv4? && prefix == 32
      to_s
    elsif ipv6? && prefix == 128
      to_s
    else
      cidr
    end
  end

  # Returns a json string containing the IP address representation.
  def to_json(*a)
    %Q{"#{as_json(*a)}"}
  end

  # Returns a string containing the IP address representation in
  # cidr notation
  def cidr
    "#{to_s}/#{prefix}"
  end

  # Returns a network byte ordered string form of the IP address.
  def hton
    case @family
    when Socket::AF_INET
      return [@addr].pack('N')
    when Socket::AF_INET6
      return (0..7).map { |i|
        (@addr >> (112 - 16 * i)) & 0xffff
      }.pack('n8')
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  # Returns true if the ipaddr is an IPv4 address.
  def ipv4?
    return @family == Socket::AF_INET
  end

  # Returns true if the ipaddr is an IPv6 address.
  def ipv6?
    return @family == Socket::AF_INET6
  end

  # Returns true if the ipaddr is a loopback address.
  # Loopback IPv4 addresses in the IPv4-mapped IPv6
  # address range are also considered as loopback addresses.
  def loopback?
    case @family
    when Socket::AF_INET
      @addr & 0xff000000 == 0x7f000000 # 127.0.0.1/8
    when Socket::AF_INET6
      @addr == 1 || # ::1
        (@addr & 0xffff_0000_0000 == 0xffff_0000_0000 && (
          @addr & 0xff000000 == 0x7f000000 # ::ffff:127.0.0.1/8
        ))
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  # Returns true if the ipaddr is a private address.  IPv4 addresses
  # in 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16 as defined in RFC
  # 1918 and IPv6 Unique Local Addresses in fc00::/7 as defined in RFC
  # 4193 are considered private. Private IPv4 addresses in the
  # IPv4-mapped IPv6 address range are also considered private.
  def private?
    case @family
    when Socket::AF_INET
      @addr & 0xff000000 == 0x0a000000 ||    # 10.0.0.0/8
        @addr & 0xfff00000 == 0xac100000 ||  # 172.16.0.0/12
        @addr & 0xffff0000 == 0xc0a80000     # 192.168.0.0/16
    when Socket::AF_INET6
      @addr & 0xfe00_0000_0000_0000_0000_0000_0000_0000 == 0xfc00_0000_0000_0000_0000_0000_0000_0000 ||
        (@addr & 0xffff_0000_0000 == 0xffff_0000_0000 && (
          @addr & 0xff000000 == 0x0a000000 ||  # ::ffff:10.0.0.0/8
          @addr & 0xfff00000 == 0xac100000 ||  # ::ffff::172.16.0.0/12
          @addr & 0xffff0000 == 0xc0a80000     # ::ffff::192.168.0.0/16
        ))
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  # Returns true if the ipaddr is a link-local address.  IPv4
  # addresses in 169.254.0.0/16 reserved by RFC 3927 and link-local
  # IPv6 Unicast Addresses in fe80::/10 reserved by RFC 4291 are
  # considered link-local. Link-local IPv4 addresses in the
  # IPv4-mapped IPv6 address range are also considered link-local.
  def link_local?
    case @family
    when Socket::AF_INET
      @addr & 0xffff0000 == 0xa9fe0000 # 169.254.0.0/16
    when Socket::AF_INET6
      @addr & 0xffc0_0000_0000_0000_0000_0000_0000_0000 == 0xfe80_0000_0000_0000_0000_0000_0000_0000 || # fe80::/10
        (@addr & 0xffff_0000_0000 == 0xffff_0000_0000 && (
          @addr & 0xffff0000 == 0xa9fe0000 # ::ffff:169.254.0.0/16
        ))
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  # Returns true if the ipaddr is an IPv4-mapped IPv6 address.
  def ipv4_mapped?
    return ipv6? && (@addr >> 32) == 0xffff
  end

  # Returns true if the ipaddr is an IPv4-compatible IPv6 address.
  def ipv4_compat?
    warn "IPAddr\##{__callee__} is obsolete", uplevel: 1 if $VERBOSE
    _ipv4_compat?
  end

  def _ipv4_compat?
    if !ipv6? || (@addr >> 32) != 0
      return false
    end
    a = (@addr & IN4MASK)
    return a != 0 && a != 1
  end

  private :_ipv4_compat?

  # Returns a new ipaddr built by converting the native IPv4 address
  # into an IPv4-mapped IPv6 address.
  def ipv4_mapped
    if !ipv4?
      raise InvalidAddressError, "not an IPv4 address: #{@addr}"
    end
    clone = self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
    clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
    clone
  end

  # Returns a new ipaddr built by converting the native IPv4 address
  # into an IPv4-compatible IPv6 address.
  def ipv4_compat
    warn "IPAddr\##{__callee__} is obsolete", uplevel: 1 if $VERBOSE
    if !ipv4?
      raise InvalidAddressError, "not an IPv4 address: #{@addr}"
    end
    return self.clone.set(@addr, Socket::AF_INET6)
  end

  # Returns a new ipaddr built by converting the IPv6 address into a
  # native IPv4 address.  If the IP address is not an IPv4-mapped or
  # IPv4-compatible IPv6 address, returns self.
  def native
    if !ipv4_mapped? && !_ipv4_compat?
      return self
    end
    return self.clone.set(@addr & IN4MASK, Socket::AF_INET)
  end

  # Returns a string for DNS reverse lookup.  It returns a string in
  # RFC3172 form for an IPv6 address.
  def reverse
    case @family
    when Socket::AF_INET
      return _reverse + ".in-addr.arpa"
    when Socket::AF_INET6
      return ip6_arpa
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  # Returns a string for DNS reverse lookup compatible with RFC3172.
  def ip6_arpa
    if !ipv6?
      raise InvalidAddressError, "not an IPv6 address: #{@addr}"
    end
    return _reverse + ".ip6.arpa"
  end

  # Returns a string for DNS reverse lookup compatible with RFC1886.
  def ip6_int
    if !ipv6?
      raise InvalidAddressError, "not an IPv6 address: #{@addr}"
    end
    return _reverse + ".ip6.int"
  end

  # Returns the successor to the ipaddr.
  def succ
    return self.clone.set(@addr + 1, @family)
  end

  # Compares the ipaddr with another.
  def <=>(other)
    other = coerce_other(other)
  rescue
    nil
  else
    @addr <=> other.to_i if other.family == @family
  end
  include Comparable

  # Checks equality used by Hash.
  def eql?(other)
    return self.class == other.class && self.hash == other.hash && self == other
  end

  # Returns a hash value used by Hash, Set, and Array classes
  def hash
    return ([@addr, @mask_addr, @zone_id].hash << 1) | (ipv4? ? 0 : 1)
  end

  # Creates a Range object for the network address.
  def to_range
    self.class.new(begin_addr, @family)..self.class.new(end_addr, @family)
  end

  # Returns the prefix length in bits for the ipaddr.
  def prefix
    case @family
    when Socket::AF_INET
      n = IN4MASK ^ @mask_addr
      i = 32
    when Socket::AF_INET6
      n = IN6MASK ^ @mask_addr
      i = 128
    else
      raise AddressFamilyError, "unsupported address family"
    end
    while n.positive?
      n >>= 1
      i -= 1
    end
    i
  end

  # Sets the prefix length in bits
  def prefix=(prefix)
    case prefix
    when Integer
      mask!(prefix)
    else
      raise InvalidPrefixError, "prefix must be an integer"
    end
  end

  # Returns a string containing a human-readable representation of the
  # ipaddr. ("#<IPAddr: family:address/mask>")
  def inspect
    case @family
    when Socket::AF_INET
      af = "IPv4"
    when Socket::AF_INET6
      af = "IPv6"
      zone_id = @zone_id.to_s
    else
      raise AddressFamilyError, "unsupported address family"
    end
    return sprintf("#<%s: %s:%s%s/%s>", self.class.name,
                   af, _to_string(@addr), zone_id, _to_string(@mask_addr))
  end

  # Returns the netmask in string format e.g. 255.255.0.0
  def netmask
    _to_string(@mask_addr)
  end

  # Returns the wildcard mask in string format e.g. 0.0.255.255
  def wildcard_mask
    case @family
    when Socket::AF_INET
      mask = IN4MASK ^ @mask_addr
    when Socket::AF_INET6
      mask = IN6MASK ^ @mask_addr
    else
      raise AddressFamilyError, "unsupported address family"
    end

    _to_string(mask)
  end

  # Returns the IPv6 zone identifier, if present.
  # Raises InvalidAddressError if not an IPv6 address.
  def zone_id
    if @family == Socket::AF_INET6
      @zone_id
    else
      raise InvalidAddressError, "not an IPv6 address"
    end
  end

  # Returns the IPv6 zone identifier, if present.
  # Raises InvalidAddressError if not an IPv6 address.
  def zone_id=(zid)
    if @family == Socket::AF_INET6
      case zid
      when nil, /\A%(\w+)\z/
        @zone_id = zid
      else
        raise InvalidAddressError, "invalid zone identifier for address"
      end
    else
      raise InvalidAddressError, "not an IPv6 address"
    end
  end

  protected

  def begin_addr
    @addr & @mask_addr
  end

  def end_addr
    case @family
    when Socket::AF_INET
      @addr | (IN4MASK ^ @mask_addr)
    when Socket::AF_INET6
      @addr | (IN6MASK ^ @mask_addr)
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  # Set +@addr+, the internal stored ip address, to given +addr+. The
  # parameter +addr+ is validated using the first +family+ member,
  # which is +Socket::AF_INET+ or +Socket::AF_INET6+.
  def set(addr, *family)
    case family[0] ? family[0] : @family
    when Socket::AF_INET
      if addr < 0 || addr > IN4MASK
        raise InvalidAddressError, "invalid address: #{addr}"
      end
    when Socket::AF_INET6
      if addr < 0 || addr > IN6MASK
        raise InvalidAddressError, "invalid address: #{addr}"
      end
    else
      raise AddressFamilyError, "unsupported address family"
    end
    @addr = addr
    if family[0]
      @family = family[0]
      if @family == Socket::AF_INET
        @mask_addr &= IN4MASK
      end
    end
    return self
  end

  # Set current netmask to given mask.
  def mask!(mask)
    case mask
    when String
      case mask
      when /\A(0|[1-9]+\d*)\z/
        prefixlen = mask.to_i
      when /\A\d+\z/
        raise InvalidPrefixError, "leading zeros in prefix"
      else
        m = IPAddr.new(mask)
        if m.family != @family
          raise InvalidPrefixError, "address family is not same"
        end
        @mask_addr = m.to_i
        n = @mask_addr ^ m.instance_variable_get(:@mask_addr)
        unless ((n + 1) & n).zero?
          raise InvalidPrefixError, "invalid mask #{mask}"
        end
        @addr &= @mask_addr
        return self
      end
    else
      prefixlen = mask
    end
    case @family
    when Socket::AF_INET
      if prefixlen < 0 || prefixlen > 32
        raise InvalidPrefixError, "invalid length"
      end
      masklen = 32 - prefixlen
      @mask_addr = ((IN4MASK >> masklen) << masklen)
    when Socket::AF_INET6
      if prefixlen < 0 || prefixlen > 128
        raise InvalidPrefixError, "invalid length"
      end
      masklen = 128 - prefixlen
      @mask_addr = ((IN6MASK >> masklen) << masklen)
    else
      raise AddressFamilyError, "unsupported address family"
    end
    @addr = ((@addr >> masklen) << masklen)
    return self
  end

  private

  # Creates a new ipaddr object either from a human readable IP
  # address representation in string, or from a packed in_addr value
  # followed by an address family.
  #
  # In the former case, the following are the valid formats that will
  # be recognized: "address", "address/prefixlen" and "address/mask",
  # where IPv6 address may be enclosed in square brackets (`[' and
  # `]').  If a prefixlen or a mask is specified, it returns a masked
  # IP address.  Although the address family is determined
  # automatically from a specified string, you can specify one
  # explicitly by the optional second argument.
  #
  # Otherwise an IP address is generated from a packed in_addr value
  # and an address family.
  #
  # The IPAddr class defines many methods and operators, and some of
  # those, such as &, |, include? and ==, accept a string, or a packed
  # in_addr value instead of an IPAddr object.
  def initialize(addr = '::', family = Socket::AF_UNSPEC)
    @mask_addr = nil
    if !addr.kind_of?(String)
      case family
      when Socket::AF_INET, Socket::AF_INET6
        set(addr.to_i, family)
        @mask_addr = (family == Socket::AF_INET) ? IN4MASK : IN6MASK
        return
      when Socket::AF_UNSPEC
        raise AddressFamilyError, "address family must be specified"
      else
        raise AddressFamilyError, "unsupported address family: #{family}"
      end
    end
    prefix, prefixlen = addr.split('/', 2)
    if prefix =~ /\A\[(.*)\]\z/i
      prefix = $1
      family = Socket::AF_INET6
    end
    if prefix =~ /\A(.*)(%\w+)\z/
      prefix = $1
      zone_id = $2
      family = Socket::AF_INET6
    end
    # It seems AI_NUMERICHOST doesn't do the job.
    #Socket.getaddrinfo(left, nil, Socket::AF_INET6, Socket::SOCK_STREAM, nil,
    #                  Socket::AI_NUMERICHOST)
    @addr = @family = nil
    if family == Socket::AF_UNSPEC || family == Socket::AF_INET
      @addr = in_addr(prefix)
      if @addr
        @family = Socket::AF_INET
      end
    end
    if !@addr && (family == Socket::AF_UNSPEC || family == Socket::AF_INET6)
      @addr = in6_addr(prefix)
      @family = Socket::AF_INET6
    end
    @zone_id = zone_id
    if family != Socket::AF_UNSPEC && @family != family
      raise AddressFamilyError, "address family mismatch"
    end
    if prefixlen
      mask!(prefixlen)
    else
      @mask_addr = (@family == Socket::AF_INET) ? IN4MASK : IN6MASK
    end
  end

  def coerce_other(other)
    case other
    when IPAddr
      other
    when String
      self.class.new(other)
    else
      self.class.new(other, @family)
    end
  end

  def in_addr(addr)
    case addr
    when Array
      octets = addr
    else
      RE_IPV4ADDRLIKE.match?(addr) or return nil
      octets = addr.split('.')
    end
    octets.inject(0) { |i, s|
      (n = s.to_i) < 256 or raise InvalidAddressError, "invalid address: #{@addr}"
      (s != '0') && s.start_with?('0') and raise InvalidAddressError, "zero-filled number in IPv4 address is ambiguous: #{@addr}"
      i << 8 | n
    }
  end

  def in6_addr(left)
    case left
    when RE_IPV6ADDRLIKE_FULL
      if $2
        addr = in_addr($~[2,4])
        left = $1 + ':'
      else
        addr = 0
      end
      right = ''
    when RE_IPV6ADDRLIKE_COMPRESSED
      if $4
        left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{@addr}"
        addr = in_addr($~[4,4])
        left = $1
        right = $3 + '0:0'
      else
        left.count(':') <= ($1.empty? || $2.empty? ? 8 : 7) or
          raise InvalidAddressError, "invalid address: #{@addr}"
        left = $1
        right = $2
        addr = 0
      end
    else
      raise InvalidAddressError, "invalid address: #{@addr}"
    end
    l = left.split(':')
    r = right.split(':')
    rest = 8 - l.size - r.size
    if rest < 0
      return nil
    end
    (l + Array.new(rest, '0') + r).inject(0) { |i, s|
      i << 16 | s.hex
    } | addr
  end

  def addr_mask(addr)
    case @family
    when Socket::AF_INET
      return addr & IN4MASK
    when Socket::AF_INET6
      return addr & IN6MASK
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  def _reverse
    case @family
    when Socket::AF_INET
      return (0..3).map { |i|
        (@addr >> (8 * i)) & 0xff
      }.join('.')
    when Socket::AF_INET6
      return ("%.32x" % @addr).reverse!.gsub!(/.(?!$)/, '\&.')
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

  def _to_string(addr)
    case @family
    when Socket::AF_INET
      return (0..3).map { |i|
        (addr >> (24 - 8 * i)) & 0xff
      }.join('.')
    when Socket::AF_INET6
      return (("%.32x" % addr).gsub!(/.{4}(?!$)/, '\&:'))
    else
      raise AddressFamilyError, "unsupported address family"
    end
  end

end

unless Socket.const_defined? :AF_INET6
  class Socket < BasicSocket
    # IPv6 protocol family
    AF_INET6 = Object.new.freeze
  end

  class << IPSocket
    private

    def valid_v6?(addr)
      case addr
      when IPAddr::RE_IPV6ADDRLIKE_FULL
        if $2
          $~[2,4].all? {|i| i.to_i < 256 }
        else
          true
        end
      when IPAddr::RE_IPV6ADDRLIKE_COMPRESSED
        if $4
          addr.count(':') <= 6 && $~[4,4].all? {|i| i.to_i < 256}
        else
          addr.count(':') <= 7
        end
      else
        false
      end
    end

    alias getaddress_orig getaddress

    public

    # Returns a +String+ based representation of a valid DNS hostname,
    # IPv4 or IPv6 address.
    #
    #   IPSocket.getaddress 'localhost'         #=> "::1"
    #   IPSocket.getaddress 'broadcasthost'     #=> "255.255.255.255"
    #   IPSocket.getaddress 'www.ruby-lang.org' #=> "221.186.184.68"
    #   IPSocket.getaddress 'www.ccc.de'        #=> "2a00:1328:e102:ccc0::122"
    def getaddress(s)
      if valid_v6?(s)
        s
      else
        getaddress_orig(s)
      end
    end
  end
end
PK*J[��4+�r�rshare/ruby/mkmf.rbnu�[���# -*- coding: us-ascii -*-
# frozen-string-literal: false
# module to create Makefile for extension modules
# invoke like: ruby -r mkmf extconf.rb

require 'rbconfig'
require 'fileutils'
require 'shellwords'

class String # :nodoc:
  # Wraps a string in escaped quotes if it contains whitespace.
  def quote
    /\s/ =~ self ? "\"#{self}\"" : "#{self}"
  end

  # Escape whitespaces for Makefile.
  def unspace
    gsub(/\s/, '\\\\\\&')
  end

  # Generates a string used as cpp macro name.
  def tr_cpp
    strip.upcase.tr_s("^A-Z0-9_*", "_").tr_s("*", "P")
  end

  def funcall_style
    /\)\z/ =~ self ? dup : "#{self}()"
  end

  def sans_arguments
    self[/\A[^()]+/]
  end
end

class Array # :nodoc:
  # Wraps all strings in escaped quotes if they contain whitespace.
  def quote
    map {|s| s.quote}
  end
end

##
# mkmf.rb is used by Ruby C extensions to generate a Makefile which will
# correctly compile and link the C extension to Ruby and a third-party
# library.
module MakeMakefile

  target_rbconfig = nil
  ARGV.delete_if do |arg|
    opt = arg.delete_prefix("--target-rbconfig=")
    unless opt == arg
      target_rbconfig = opt
    end
  end
  if target_rbconfig
    # Load the RbConfig for the target platform into this module.
    # Cross-compiling needs the same version of Ruby.
    Kernel.load target_rbconfig, self
  else
    # The RbConfig for the target platform where the built extension runs.
    RbConfig = ::RbConfig
  end

  #### defer until this module become global-state free.
  # def self.extended(obj)
  #   obj.init_mkmf
  #   super
  # end
  #
  # def initialize(*args, rbconfig: RbConfig, **rest)
  #   init_mkmf(rbconfig::MAKEFILE_CONFIG, rbconfig::CONFIG)
  #   super(*args, **rest)
  # end

  ##
  # The makefile configuration using the defaults from when Ruby was built.

  CONFIG = RbConfig::MAKEFILE_CONFIG

  ##
  # The saved original value of +LIB+ environment variable
  ORIG_LIBPATH = ENV['LIB']

  ##
  # Extensions for files compiled with a C compiler

  C_EXT = %w[c m]

  ##
  # Extensions for files compiled with a C++ compiler

  CXX_EXT = %w[cc mm cxx cpp]
  unless File.exist?(File.join(*File.split(__FILE__).tap {|d, b| b.swapcase}))
    CXX_EXT.concat(%w[C])
  end

  ##
  # Extensions for source files

  SRC_EXT = C_EXT + CXX_EXT

  ##
  # Extensions for header files

  HDR_EXT = %w[h hpp]
  $static = nil
  $config_h = '$(arch_hdrdir)/ruby/config.h'
  $default_static = $static

  unless defined? $configure_args
    $configure_args = {}
    args = CONFIG["configure_args"].shellsplit
    if arg = ENV["CONFIGURE_ARGS"]
      args.push(*arg.shellsplit)
    end
    args.delete_if {|a| /\A--(?:top(?:src)?|src|cur)dir(?=\z|=)/ =~ a}
    for arg in args.concat(ARGV)
      arg, val = arg.split('=', 2)
      next unless arg
      arg.tr!('_', '-')
      if arg.sub!(/\A(?!--)/, '--')
        val or next
        arg.downcase!
      end
      $configure_args[arg] = val || true
    end
  end

  $libdir = CONFIG["libdir"]
  $rubylibdir = CONFIG["rubylibdir"]
  $archdir = CONFIG["archdir"]
  $sitedir = CONFIG["sitedir"]
  $sitelibdir = CONFIG["sitelibdir"]
  $sitearchdir = CONFIG["sitearchdir"]
  $vendordir = CONFIG["vendordir"]
  $vendorlibdir = CONFIG["vendorlibdir"]
  $vendorarchdir = CONFIG["vendorarchdir"]

  $mswin = /mswin/ =~ RUBY_PLATFORM
  $mingw = /mingw/ =~ RUBY_PLATFORM
  $cygwin = /cygwin/ =~ RUBY_PLATFORM
  $netbsd = /netbsd/ =~ RUBY_PLATFORM
  $haiku = /haiku/ =~ RUBY_PLATFORM
  $solaris = /solaris/ =~ RUBY_PLATFORM
  $universal = /universal/ =~ RUBY_PLATFORM
  $dest_prefix_pattern = (File::PATH_SEPARATOR == ';' ? /\A([[:alpha:]]:)?/ : /\A/)

  # :stopdoc:

  def config_string(key, config = CONFIG)
    s = config[key] and !s.empty? and block_given? ? yield(s) : s
  end
  module_function :config_string

  def dir_re(dir)
    Regexp.new('\$(?:\('+dir+'\)|\{'+dir+'\})(?:\$(?:\(target_prefix\)|\{target_prefix\}))?')
  end
  module_function :dir_re

  def relative_from(path, base)
    dir = File.join(path, "")
    if File.expand_path(dir) == File.expand_path(dir, base)
      path
    else
      File.join(base, path)
    end
  end

  INSTALL_DIRS = [
    [dir_re('commondir'), "$(RUBYCOMMONDIR)"],
    [dir_re('sitedir'), "$(RUBYCOMMONDIR)"],
    [dir_re('vendordir'), "$(RUBYCOMMONDIR)"],
    [dir_re('rubylibdir'), "$(RUBYLIBDIR)"],
    [dir_re('archdir'), "$(RUBYARCHDIR)"],
    [dir_re('sitelibdir'), "$(RUBYLIBDIR)"],
    [dir_re('vendorlibdir'), "$(RUBYLIBDIR)"],
    [dir_re('sitearchdir'), "$(RUBYARCHDIR)"],
    [dir_re('vendorarchdir'), "$(RUBYARCHDIR)"],
    [dir_re('rubyhdrdir'), "$(RUBYHDRDIR)"],
    [dir_re('sitehdrdir'), "$(SITEHDRDIR)"],
    [dir_re('vendorhdrdir'), "$(VENDORHDRDIR)"],
    [dir_re('bindir'), "$(BINDIR)"],
  ]

  def install_dirs(target_prefix = nil)
    if $extout and $extmk
      dirs = [
        ['BINDIR',        '$(extout)/bin'],
        ['RUBYCOMMONDIR', '$(extout)/common'],
        ['RUBYLIBDIR',    '$(RUBYCOMMONDIR)$(target_prefix)'],
        ['RUBYARCHDIR',   '$(extout)/$(arch)$(target_prefix)'],
        ['HDRDIR',        '$(extout)/include/ruby$(target_prefix)'],
        ['ARCHHDRDIR',    '$(extout)/include/$(arch)/ruby$(target_prefix)'],
        ['extout',        "#$extout"],
        ['extout_prefix', "#$extout_prefix"],
      ]
    elsif $extmk
      dirs = [
        ['BINDIR',        '$(bindir)'],
        ['RUBYCOMMONDIR', '$(rubylibdir)'],
        ['RUBYLIBDIR',    '$(rubylibdir)$(target_prefix)'],
        ['RUBYARCHDIR',   '$(archdir)$(target_prefix)'],
        ['HDRDIR',        '$(rubyhdrdir)/ruby$(target_prefix)'],
        ['ARCHHDRDIR',    '$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'],
      ]
    elsif $configure_args.has_key?('--vendor')
      dirs = [
        ['BINDIR',        '$(bindir)'],
        ['RUBYCOMMONDIR', '$(vendordir)$(target_prefix)'],
        ['RUBYLIBDIR',    '$(vendorlibdir)$(target_prefix)'],
        ['RUBYARCHDIR',   '$(vendorarchdir)$(target_prefix)'],
        ['HDRDIR',        '$(vendorhdrdir)$(target_prefix)'],
        ['ARCHHDRDIR',    '$(vendorarchhdrdir)$(target_prefix)'],
      ]
    else
      dirs = [
        ['BINDIR',        '$(bindir)'],
        ['RUBYCOMMONDIR', '$(sitedir)$(target_prefix)'],
        ['RUBYLIBDIR',    '$(sitelibdir)$(target_prefix)'],
        ['RUBYARCHDIR',   '$(sitearchdir)$(target_prefix)'],
        ['HDRDIR',        '$(sitehdrdir)$(target_prefix)'],
        ['ARCHHDRDIR',    '$(sitearchhdrdir)$(target_prefix)'],
      ]
    end
    dirs << ['target_prefix', (target_prefix ? "/#{target_prefix}" : "")]
    dirs
  end

  def map_dir(dir, map = nil)
    map ||= INSTALL_DIRS
    map.inject(dir) {|d, (orig, new)| d.gsub(orig, new)}
  end

  topdir = File.dirname(File.dirname(__FILE__))
  path = File.expand_path($0)
  until (dir = File.dirname(path)) == path
    if File.identical?(dir, topdir)
      $extmk = true if %r"\A(?:ext|enc|tool|test)\z" =~ File.basename(path)
      break
    end
    path = dir
  end
  $extmk ||= false
  if not $extmk and File.exist?(($hdrdir = RbConfig::CONFIG["rubyhdrdir"]) + "/ruby/ruby.h")
    $topdir = $hdrdir
    $top_srcdir = $hdrdir
    $arch_hdrdir = RbConfig::CONFIG["rubyarchhdrdir"]
  elsif File.exist?(($hdrdir = ($top_srcdir ||= topdir) + "/include")  + "/ruby.h")
    $topdir ||= RbConfig::CONFIG["topdir"]
    $arch_hdrdir = "$(extout)/include/$(arch)"
  else
    abort <<MESSAGE
mkmf.rb can't find header files for ruby at #{$hdrdir}/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.
MESSAGE
  end

  CONFTEST = "conftest".freeze
  CONFTEST_C = "#{CONFTEST}.c"

  OUTFLAG = CONFIG['OUTFLAG']
  COUTFLAG = CONFIG['COUTFLAG']
  CSRCFLAG = CONFIG['CSRCFLAG']
  CPPOUTFILE = config_string('CPPOUTFILE') {|str| str.sub(/\bconftest\b/, CONFTEST)}

  # :startdoc:

  # Removes _files_.
  def rm_f(*files)
    opt = (Hash === files.last ? [files.pop] : [])
    FileUtils.rm_f(Dir[*files.flatten], *opt)
  end
  module_function :rm_f

  # Removes _files_ recursively.
  def rm_rf(*files)
    opt = (Hash === files.last ? [files.pop] : [])
    FileUtils.rm_rf(Dir[*files.flatten], *opt)
  end
  module_function :rm_rf

  # Returns time stamp of the +target+ file if it exists and is newer than or
  # equal to all of +times+.
  def modified?(target, times)
    (t = File.mtime(target)) rescue return nil
    Array === times or times = [times]
    t if times.all? {|n| n <= t}
  end

  # :stopdoc:

  def split_libs(*strs)
    sep = $mswin ? /\s+/ : /\s+(?=-|\z)/
    strs.flat_map {|s| s.lstrip.split(sep)}
  end

  def merge_libs(*libs)
    libs.inject([]) do |x, y|
      y = y.inject([]) {|ary, e| ary.last == e ? ary : ary << e}
      y.each_with_index do |v, yi|
        if xi = x.rindex(v)
          x[(xi+1)..-1] = merge_libs(y[(yi+1)..-1], x[(xi+1)..-1])
          x[xi, 0] = y[0...yi]
          break
        end
      end and x.concat(y)
      x
    end
  end

  # This is a custom logging module. It generates an mkmf.log file when you
  # run your extconf.rb script. This can be useful for debugging unexpected
  # failures.
  #
  # This module and its associated methods are meant for internal use only.
  #
  module Logging
    @log = nil
    @logfile = 'mkmf.log'
    @orgerr = $stderr.dup
    @orgout = $stdout.dup
    @postpone = 0
    @quiet = $extmk

    def self::log_open
      @log ||= File::open(@logfile, 'wb')
      @log.sync = true
    end

    def self::log_opened?
      @log and not @log.closed?
    end

    def self::open
      log_open
      $stderr.reopen(@log)
      $stdout.reopen(@log)
      yield
    ensure
      $stderr.reopen(@orgerr)
      $stdout.reopen(@orgout)
    end

    def self::message(*s)
      log_open
      @log.printf(*s)
    end

    def self::logfile file
      @logfile = file
      log_close
    end

    def self::log_close
      if @log and not @log.closed?
        @log.flush
        @log.close
        @log = nil
      end
    end

    def self::postpone
      tmplog = "mkmftmp#{@postpone += 1}.log"
      open do
        log, *save = @log, @logfile, @orgout, @orgerr
        @log, @logfile, @orgout, @orgerr = nil, tmplog, log, log
        begin
          log.print(open {yield @log})
        ensure
          @log.close if @log and not @log.closed?
          File::open(tmplog) {|t| FileUtils.copy_stream(t, log)} if File.exist?(tmplog)
          @log, @logfile, @orgout, @orgerr = log, *save
          @postpone -= 1
          MakeMakefile.rm_f tmplog
        end
      end
    end

    class << self
      attr_accessor :quiet
    end
  end

  def libpath_env
    # used only if native compiling
    if libpathenv = config_string("LIBPATHENV")
      pathenv = ENV[libpathenv]
      libpath = RbConfig.expand($DEFLIBPATH.join(File::PATH_SEPARATOR))
      {libpathenv => [libpath, pathenv].compact.join(File::PATH_SEPARATOR)}
    else
      {}
    end
  end

  def expand_command(commands, envs = libpath_env)
    varpat = /\$\((\w+)\)|\$\{(\w+)\}/
    vars = nil
    expand = proc do |command|
      case command
      when Array
        command.map(&expand)
      when String
        if varpat =~ command
          vars ||= Hash.new {|h, k| h[k] = ENV[k]}
          command = command.dup
          nil while command.gsub!(varpat) {vars[$1||$2]}
        end
        command
      else
        command
      end
    end
    if Array === commands
      env, *commands = commands if Hash === commands.first
      envs.merge!(env) if env
    end

    # disable ASAN leak reporting - conftest programs almost always don't bother
    # to free their memory.
    envs['ASAN_OPTIONS'] = "detect_leaks=0" unless ENV.key?('ASAN_OPTIONS')

    return envs, expand[commands]
  end

  def env_quote(envs)
    envs.map {|e, v| "#{e}=#{v.quote}"}
  end

  # :startdoc:

  # call-seq:
  #   xsystem(command, werror: false)   -> true or false
  #
  # Executes _command_ with expanding variables, and returns the exit
  # status like as Kernel#system.  If _werror_ is true and the error
  # output is not empty, returns +false+.  The output will logged.
  def xsystem(command, werror: false)
    env, command = expand_command(command)
    Logging::open do
      puts [env_quote(env), command.quote].join(' ')
      if werror
        result = nil
        Logging.postpone do |log|
          output = IO.popen(env, command, &:read)
          result = ($?.success? and File.zero?(log.path))
          output
        end
        result
      else
        system(env, *command)
      end
    end
  end

  # Executes _command_ similarly to xsystem, but yields opened pipe.
  def xpopen command, *mode, &block
    env, commands = expand_command(command)
    command = [env_quote(env), command].join(' ')
    Logging::open do
      case mode[0]
      when nil, Hash, /^r/
        puts "#{command} |"
      else
        puts "| #{command}"
      end
      IO.popen(env, commands, *mode, &block)
    end
  end

  # Logs _src_
  def log_src(src, heading="checked program was")
    src = src.split(/^/)
    fmt = "%#{src.size.to_s.size}d: %s"
    Logging::message <<"EOM"
#{heading}:
/* begin */
EOM
    src.each_with_index {|line, no| Logging::message fmt, no+1, line}
    Logging::message <<"EOM"
/* end */

EOM
  end

  # Returns the language-dependent source file name for configuration
  # checks.
  def conftest_source
    CONFTEST_C
  end

  # Creats temporary source file from +COMMON_HEADERS+ and _src_.
  # Yields the created source string and uses the returned string as
  # the source code, if the block is given.
  def create_tmpsrc(src)
    src = "#{COMMON_HEADERS}\n#{src}"
    src = yield(src) if block_given?
    src.gsub!(/[ \t]+$/, '')
    src.gsub!(/\A\n+|^\n+$/, '')
    src.sub!(/[^\n]\z/, "\\&\n")
    count = 0
    begin
      File.open(conftest_source, "wb") do |cfile|
        cfile.print src
      end
    rescue Errno::EACCES
      if (count += 1) < 5
        sleep 0.2
        retry
      end
    end
    src
  end

  # :stopdoc:

  def have_devel?
    unless defined? $have_devel
      $have_devel = true
      $have_devel = try_link(MAIN_DOES_NOTHING)
    end
    $have_devel
  end

  def try_do(src, command, **opts, &b)
    unless have_devel?
      raise <<MSG
The compiler failed to generate an executable file.
You have to install development tools first.
MSG
    end
    begin
      src = create_tmpsrc(src, &b)
      xsystem(command, **opts)
    ensure
      log_src(src)
    end
  end

  def link_config(ldflags, opt="", libpath=$DEFLIBPATH|$LIBPATH)
    librubyarg = $extmk ? $LIBRUBYARG_STATIC : "$(LIBRUBYARG)"
    conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote,
                                  'src' => "#{conftest_source}",
                                  'arch_hdrdir' => $arch_hdrdir.quote,
                                  'top_srcdir' => $top_srcdir.quote,
                                  'INCFLAGS' => "#$INCFLAGS",
                                  'CPPFLAGS' => "#$CPPFLAGS",
                                  'CFLAGS' => "#$CFLAGS",
                                  'ARCH_FLAG' => "#$ARCH_FLAG",
                                  'LDFLAGS' => "#$LDFLAGS #{ldflags}",
                                  'LOCAL_LIBS' => "#$LOCAL_LIBS #$libs",
                                  'LIBS' => "#{librubyarg} #{opt} #$LIBS")
    conf['LIBPATH'] = libpathflag(libpath.map {|s| RbConfig::expand(s.dup, conf)})
    conf
  end

  def link_command(ldflags, *opts)
    conf = link_config(ldflags, *opts)
    RbConfig::expand(TRY_LINK.dup, conf)
  end

  def cc_config(opt="")
    conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote,
                                  'arch_hdrdir' => $arch_hdrdir.quote,
                                  'top_srcdir' => $top_srcdir.quote)
    conf
  end

  def cc_command(opt="")
    conf = cc_config(opt)
    RbConfig::expand("$(CC) #$INCFLAGS #$CPPFLAGS #$CFLAGS #$ARCH_FLAG #{opt} -c #{CONFTEST_C}",
                     conf)
  end

  def cpp_command(outfile, opt="")
    conf = cc_config(opt)
    if $universal and (arch_flag = conf['ARCH_FLAG']) and !arch_flag.empty?
      conf['ARCH_FLAG'] = arch_flag.gsub(/(?:\G|\s)-arch\s+\S+/, '')
    end
    RbConfig::expand("$(CPP) #$INCFLAGS #$CPPFLAGS #$CFLAGS #{opt} #{CONFTEST_C} #{outfile}",
                     conf)
  end

  def libpathflag(libpath=$DEFLIBPATH|$LIBPATH)
    libpathflags = nil
    libpath.map{|x|
      case x
      when "$(topdir)", /\A\./
        LIBPATHFLAG
      else
        libpathflags ||= [LIBPATHFLAG, RPATHFLAG].grep(/\S/).join(" ")
      end % x.quote
    }.join(" ")
  end

  def werror_flag(opt = nil)
    config_string("WERRORFLAG") {|flag| opt = opt && !opt.empty? ? "#{opt} #{flag}" : flag}
    opt
  end

  def with_werror(opt, opts = nil)
    opt = werror_flag(opt) if opts and (opts = opts.dup).delete(:werror)
    yield(opt, opts)
  end

  def try_link0(src, opt = "", ldflags: "", **opts, &b) # :nodoc:
    exe = CONFTEST+$EXEEXT
    cmd = link_command(ldflags, opt)
    if $universal
      require 'tmpdir'
      Dir.mktmpdir("mkmf_", oldtmpdir = ENV["TMPDIR"]) do |tmpdir|
        begin
          ENV["TMPDIR"] = tmpdir
          try_do(src, cmd, **opts, &b)
        ensure
          ENV["TMPDIR"] = oldtmpdir
        end
      end
    else
      try_do(src, cmd, **opts, &b)
    end and File.executable?(exe) or return nil
    exe
  ensure
    MakeMakefile.rm_rf(*Dir["#{CONFTEST}*"]-[exe])
  end

  # Returns whether or not the +src+ can be compiled as a C source and linked
  # with its depending libraries successfully.  +opt+ is passed to the linker
  # as options. Note that <tt>$CFLAGS</tt> and <tt>$LDFLAGS</tt> are also
  # passed to the linker.
  #
  # If a block given, it is called with the source before compilation. You can
  # modify the source in the block.
  #
  # [+src+] a String which contains a C source
  # [+opt+] a String which contains linker options
  def try_link(src, opt = "", **opts, &b)
    exe = try_link0(src, opt, **opts, &b) or return false
    MakeMakefile.rm_f exe
    true
  end

  # Returns whether or not the +src+ can be compiled as a C source.  +opt+ is
  # passed to the C compiler as options. Note that <tt>$CFLAGS</tt> is also
  # passed to the compiler.
  #
  # If a block given, it is called with the source before compilation. You can
  # modify the source in the block.
  #
  # [+src+] a String which contains a C source
  # [+opt+] a String which contains compiler options
  def try_compile(src, opt = "", werror: nil, **opts, &b)
    opt = werror_flag(opt) if werror
    try_do(src, cc_command(opt), werror: werror, **opts, &b) and
      File.file?("#{CONFTEST}.#{$OBJEXT}")
  ensure
    MakeMakefile.rm_f "#{CONFTEST}*"
  end

  # Returns whether or not the +src+ can be preprocessed with the C
  # preprocessor.  +opt+ is passed to the preprocessor as options. Note that
  # <tt>$CFLAGS</tt> is also passed to the preprocessor.
  #
  # If a block given, it is called with the source before preprocessing. You
  # can modify the source in the block.
  #
  # [+src+] a String which contains a C source
  # [+opt+] a String which contains preprocessor options
  def try_cpp(src, opt = "", **opts, &b)
    try_do(src, cpp_command(CPPOUTFILE, opt), **opts, &b) and
      File.file?("#{CONFTEST}.i")
  ensure
    MakeMakefile.rm_f "#{CONFTEST}*"
  end

  alias try_header try_compile

  def cpp_include(header)
    if header
      header = [header] unless header.kind_of? Array
      header.map {|h| String === h ? "#include <#{h}>\n" : h}.join
    else
      ""
    end
  end

  # :startdoc:

  # Sets <tt>$CPPFLAGS</tt> to _flags_ and yields.  If the block returns a
  # falsy value, <tt>$CPPFLAGS</tt> is reset to its previous value, remains
  # set to _flags_ otherwise.
  #
  # [+flags+] a C preprocessor flag as a +String+
  #
  def with_cppflags(flags)
    cppflags = $CPPFLAGS
    $CPPFLAGS = flags.dup
    ret = yield
  ensure
    $CPPFLAGS = cppflags unless ret
  end

  # :nodoc:
  def try_cppflags(flags, werror: true, **opts)
    try_header(MAIN_DOES_NOTHING, flags, werror: werror, **opts)
  end

  # Check whether each given C preprocessor flag is acceptable and append it
  # to <tt>$CPPFLAGS</tt> if so.
  #
  # [+flags+] a C preprocessor flag as a +String+ or an +Array+ of them
  #
  def append_cppflags(flags, **opts)
    Array(flags).each do |flag|
      if checking_for("whether #{flag} is accepted as CPPFLAGS") {
           try_cppflags(flag, **opts)
         }
        $CPPFLAGS << " " << flag
      end
    end
  end

  # Sets <tt>$CFLAGS</tt> to _flags_ and yields.  If the block returns a falsy
  # value, <tt>$CFLAGS</tt> is reset to its previous value, remains set to
  # _flags_ otherwise.
  def with_cflags(flags)
    cflags = $CFLAGS
    $CFLAGS = flags.dup
    ret = yield
  ensure
    $CFLAGS = cflags unless ret
  end

  # :nodoc:
  def try_cflags(flags, werror: true, **opts)
    try_compile(MAIN_DOES_NOTHING, flags, werror: werror, **opts)
  end

  # Sets <tt>$LDFLAGS</tt> to _flags_ and yields.  If the block returns a
  # falsy value, <tt>$LDFLAGS</tt> is reset to its previous value, remains set
  # to _flags_ otherwise.
  def with_ldflags(flags)
    ldflags = $LDFLAGS
    $LDFLAGS = flags.dup
    ret = yield
  ensure
    $LDFLAGS = ldflags unless ret
  end

  # :nodoc:
  def try_ldflags(flags, werror: $mswin, **opts)
    try_link(MAIN_DOES_NOTHING, "", ldflags: flags, werror: werror, **opts)
  end

  # :startdoc:

  # Check whether each given linker flag is acceptable and append it to
  # <tt>$LDFLAGS</tt> if so.
  #
  # [+flags+] a linker flag as a +String+ or an +Array+ of them
  #
  def append_ldflags(flags, **opts)
    Array(flags).each do |flag|
      if checking_for("whether #{flag} is accepted as LDFLAGS") {
           try_ldflags(flag, **opts)
         }
        $LDFLAGS << " " << flag
      end
    end
  end

  # :stopdoc:

  def try_static_assert(expr, headers = nil, opt = "", &b)
    headers = cpp_include(headers)
    try_compile(<<SRC, opt, &b)
#{headers}
/*top*/
int conftest_const[(#{expr}) ? 1 : -1];
SRC
  end

  def try_constant(const, headers = nil, opt = "", &b)
    includes = cpp_include(headers)
    neg = try_static_assert("#{const} < 0", headers, opt)
    if CROSS_COMPILING
      if neg
        const = "-(#{const})"
      elsif try_static_assert("#{const} > 0", headers, opt)
        # positive constant
      elsif try_static_assert("#{const} == 0", headers, opt)
        return 0
      else
        # not a constant
        return nil
      end
      upper = 1
      until try_static_assert("#{const} <= #{upper}", headers, opt)
        lower = upper
        upper <<= 1
      end
      return nil unless lower
      while upper > lower + 1
        mid = (upper + lower) / 2
        if try_static_assert("#{const} > #{mid}", headers, opt)
          lower = mid
        else
          upper = mid
        end
      end
      upper = -upper if neg
      return upper
    else
      src = %{#{includes}
#include <stdio.h>
/*top*/
typedef#{neg ? '' : ' unsigned'}
#ifdef PRI_LL_PREFIX
#define PRI_CONFTEST_PREFIX PRI_LL_PREFIX
LONG_LONG
#else
#define PRI_CONFTEST_PREFIX "l"
long
#endif
conftest_type;
conftest_type conftest_const = (conftest_type)(#{const});
int main() {printf("%"PRI_CONFTEST_PREFIX"#{neg ? 'd' : 'u'}\\n", conftest_const); return 0;}
}
      begin
        if try_link0(src, opt, &b)
          xpopen("./#{CONFTEST}") do |f|
            return Integer(f.gets)
          end
        end
      ensure
        MakeMakefile.rm_f "#{CONFTEST}#{$EXEEXT}"
      end
    end
    nil
  end

  # You should use +have_func+ rather than +try_func+.
  #
  # [+func+] a String which contains a symbol name
  # [+libs+] a String which contains library names.
  # [+headers+] a String or an Array of strings which contains names of header
  #             files.
  def try_func(func, libs, headers = nil, opt = "", &b)
    headers = cpp_include(headers)
    prepare = String.new
    case func
    when /^&/
      decltype = proc {|x|"const volatile void *#{x}"}
    when /\)$/
      strvars = []
      call = func.gsub(/""/) {
        v = "s#{strvars.size + 1}"
        strvars << v
        v
      }
      unless strvars.empty?
        prepare << "char " << strvars.map {|v| "#{v}[1024]"}.join(", ") << "; "
      end
    when nil
      call = ""
    else
      call = "#{func}()"
      decltype = proc {|x| "void ((*#{x})())"}
    end
    if opt and !opt.empty?
      [[:to_str], [:join, " "], [:to_s]].each do |meth, *args|
        if opt.respond_to?(meth)
          break opt = opt.__send__(meth, *args)
        end
      end
      opt = "#{opt} #{libs}"
    else
      opt = libs
    end
    decltype && try_link(<<"SRC", opt, &b) or
#{headers}
/*top*/
extern int t(void);
#{MAIN_DOES_NOTHING 't'}
int t(void) { #{decltype["volatile p"]}; p = (#{decltype[]})#{func}; return !p; }
SRC
    call && try_link(<<"SRC", opt, &b)
#{headers}
/*top*/
extern int t(void);
#{MAIN_DOES_NOTHING 't'}
#{"extern void #{call};" if decltype}
int t(void) { #{prepare}#{call}; return 0; }
SRC
  end

  # You should use +have_var+ rather than +try_var+.
  def try_var(var, headers = nil, opt = "", &b)
    headers = cpp_include(headers)
    try_compile(<<"SRC", opt, &b)
#{headers}
/*top*/
extern int t(void);
#{MAIN_DOES_NOTHING 't'}
int t(void) { const volatile void *volatile p; p = &(&#{var})[0]; return !p; }
SRC
  end

  # :startdoc:

  # Returns whether or not the +src+ can be preprocessed with the C
  # preprocessor and matches with +pat+.
  #
  # If a block given, it is called with the source before compilation. You can
  # modify the source in the block.
  #
  # [+pat+] a Regexp or a String
  # [+src+] a String which contains a C source
  # [+opt+] a String which contains preprocessor options
  #
  # NOTE: When pat is a Regexp the matching will be checked in process,
  # otherwise egrep(1) will be invoked to check it.
  def egrep_cpp(pat, src, opt = "", &b)
    src = create_tmpsrc(src, &b)
    xpopen(cpp_command('', opt)) do |f|
      if Regexp === pat
        puts("    ruby -ne 'print if #{pat.inspect}'")
        f.grep(pat) {|l|
          puts "#{f.lineno}: #{l}"
          return true
        }
        false
      else
        puts("    egrep '#{pat}'")
        begin
          stdin = $stdin.dup
          $stdin.reopen(f)
          system("egrep", pat)
        ensure
          $stdin.reopen(stdin)
        end
      end
    end
  ensure
    MakeMakefile.rm_f "#{CONFTEST}*"
    log_src(src)
  end

  # :stopdoc:

  # This is used internally by the have_macro? method.
  def macro_defined?(macro, src, opt = "", &b)
    src = src.sub(/[^\n]\z/, "\\&\n")
    try_compile(src + <<"SRC", opt, &b)
/*top*/
#ifndef #{macro}
# error
|:/ === #{macro} undefined === /:|
#endif
SRC
  end

  # Returns whether or not:
  # * the +src+ can be compiled as a C source,
  # * the result object can be linked with its depending libraries
  #   successfully,
  # * the linked file can be invoked as an executable
  # * and the executable exits successfully
  #
  # +opt+ is passed to the linker as options. Note that <tt>$CFLAGS</tt> and
  # <tt>$LDFLAGS</tt> are also passed to the linker.
  #
  # If a block given, it is called with the source before compilation. You can
  # modify the source in the block.
  #
  # [+src+] a String which contains a C source
  # [+opt+] a String which contains linker options
  #
  # Returns true when the executable exits successfully, false when it fails,
  # or nil when preprocessing, compilation or link fails.
  def try_run(src, opt = "", &b)
    raise "cannot run test program while cross compiling" if CROSS_COMPILING
    if try_link0(src, opt, &b)
      xsystem("./#{CONFTEST}")
    else
      nil
    end
  ensure
    MakeMakefile.rm_f "#{CONFTEST}*"
  end

  def install_files(mfile, ifiles, map = nil, srcprefix = nil)
    ifiles or return
    ifiles.empty? and return
    srcprefix ||= "$(srcdir)/#{srcprefix}".chomp('/')
    RbConfig::expand(srcdir = srcprefix.dup)
    dirs = []
    path = Hash.new {|h, i| h[i] = dirs.push([i])[-1]}
    ifiles.each do |files, dir, prefix|
      dir = map_dir(dir, map)
      prefix &&= %r|\A#{Regexp.quote(prefix)}/?|
      if /\A\.\// =~ files
        # install files which are in current working directory.
        files = files[2..-1]
        len = nil
      else
        # install files which are under the $(srcdir).
        files = File.join(srcdir, files)
        len = srcdir.size
      end
      f = nil
      Dir.glob(files) do |fx|
        f = fx
        f[0..len] = "" if len
        case File.basename(f)
        when *$NONINSTALLFILES
          next
        end
        d = File.dirname(f)
        d.sub!(prefix, "") if prefix
        d = (d.empty? || d == ".") ? dir : File.join(dir, d)
        f = File.join(srcprefix, f) if len
        path[d] << f
      end
      unless len or f
        d = File.dirname(files)
        d.sub!(prefix, "") if prefix
        d = (d.empty? || d == ".") ? dir : File.join(dir, d)
        path[d] << files
      end
    end
    dirs
  end

  def install_rb(mfile, dest, srcdir = nil)
    install_files(mfile, [["lib/**/*.rb", dest, "lib"]], nil, srcdir)
  end

  def append_library(libs, lib) # :no-doc:
    format(LIBARG, lib) + " " + libs
  end

  # Prints messages to $stdout, if verbose mode.
  #
  # Internal use only.
  #
  def message(*s)
    unless Logging.quiet and not $VERBOSE
      printf(*s)
      $stdout.flush
    end
  end

  # This emits a string to stdout that allows users to see the results of the
  # various have* and find* methods as they are tested.
  #
  # Internal use only.
  #
  def checking_for(m, fmt = nil)
    if f = caller_locations(1, 1).first.base_label and /\A\w/ =~ f
      f += ": "
    else
      f = ""
    end
    m = "checking #{/\Acheck/ =~ f ? '' : 'for '}#{m}... "
    message "%s", m
    a = r = nil
    Logging::postpone do
      r = yield
      a = (fmt ? "#{fmt % r}" : r ? "yes" : "no")
      "#{f}#{m}-------------------- #{a}\n\n"
    end
    message "%s\n", a
    Logging::message "--------------------\n\n"
    r
  end

  # Build a message for checking.
  #
  # Internal use only.
  #
  def checking_message(target, place = nil, opt = nil)
    [["in", place], ["with", opt]].inject("#{target}") do |msg, (pre, noun)|
      if noun
        [[:to_str], [:join, ","], [:to_s]].each do |meth, *args|
          if noun.respond_to?(meth)
            break noun = noun.__send__(meth, *args)
          end
        end
        unless noun.empty?
          msg << " #{pre} " unless msg.empty?
          msg << noun
        end
      end
      msg
    end
  end

  # :startdoc:

  # Check whether each given C compiler flag is acceptable and append it
  # to <tt>$CFLAGS</tt> if so.
  #
  # [+flags+] a C compiler flag as a +String+ or an +Array+ of them
  #
  def append_cflags(flags, **opts)
    Array(flags).each do |flag|
      if checking_for("whether #{flag} is accepted as CFLAGS") {
           try_cflags(flag, **opts)
         }
        $CFLAGS << " " << flag
      end
    end
  end

  # Returns whether or not +macro+ is defined either in the common header
  # files or within any +headers+ you provide.
  #
  # Any options you pass to +opt+ are passed along to the compiler.
  #
  def have_macro(macro, headers = nil, opt = "", &b)
    checking_for checking_message(macro, headers, opt) do
      macro_defined?(macro, cpp_include(headers), opt, &b)
    end
  end

  # Returns whether or not the given entry point +func+ can be found within
  # +lib+.  If +func+ is +nil+, the <code>main()</code> entry point is used by
  # default.  If found, it adds the library to list of libraries to be used
  # when linking your extension.
  #
  # If +headers+ are provided, it will include those header files as the
  # header files it looks in when searching for +func+.
  #
  # The real name of the library to be linked can be altered by
  # <code>--with-FOOlib</code> configuration option.
  #
  def have_library(lib, func = nil, headers = nil, opt = "", &b)
    dir_config(lib)
    lib = with_config(lib+'lib', lib)
    checking_for checking_message(func && func.funcall_style, LIBARG%lib, opt) do
      if COMMON_LIBS.include?(lib)
        true
      else
        libs = append_library($libs, lib)
        if try_func(func, libs, headers, opt, &b)
          $libs = libs
          true
        else
          false
        end
      end
    end
  end

  # Returns whether or not the entry point +func+ can be found within the
  # library +lib+ in one of the +paths+ specified, where +paths+ is an array
  # of strings.  If +func+ is +nil+ , then the <code>main()</code> function is
  # used as the entry point.
  #
  # If +lib+ is found, then the path it was found on is added to the list of
  # library paths searched and linked against.
  #
  def find_library(lib, func, *paths, &b)
    dir_config(lib)
    lib = with_config(lib+'lib', lib)
    paths = paths.flat_map {|path| path.split(File::PATH_SEPARATOR)}
    checking_for checking_message(func && func.funcall_style, LIBARG%lib) do
      libpath = $LIBPATH
      libs = append_library($libs, lib)
      begin
        until r = try_func(func, libs, &b) or paths.empty?
          $LIBPATH = libpath | [paths.shift]
        end
        if r
          $libs = libs
          libpath = nil
        end
      ensure
        $LIBPATH = libpath if libpath
      end
      r
    end
  end

  # Returns whether or not the function +func+ can be found in the common
  # header files, or within any +headers+ that you provide.  If found, a macro
  # is passed as a preprocessor constant to the compiler using the function
  # name, in uppercase, prepended with +HAVE_+.
  #
  # To check functions in an additional library, you need to check that
  # library first using <code>have_library()</code>.  The +func+ shall be
  # either mere function name or function name with arguments.
  #
  # For example, if <code>have_func('foo')</code> returned +true+, then the
  # +HAVE_FOO+ preprocessor macro would be passed to the compiler.
  #
  def have_func(func, headers = nil, opt = "", &b)
    checking_for checking_message(func.funcall_style, headers, opt) do
      if try_func(func, $libs, headers, opt, &b)
        $defs << "-DHAVE_#{func.sans_arguments.tr_cpp}"
        true
      else
        false
      end
    end
  end

  # Returns whether or not the variable +var+ can be found in the common
  # header files, or within any +headers+ that you provide.  If found, a macro
  # is passed as a preprocessor constant to the compiler using the variable
  # name, in uppercase, prepended with +HAVE_+.
  #
  # To check variables in an additional library, you need to check that
  # library first using <code>have_library()</code>.
  #
  # For example, if <code>have_var('foo')</code> returned true, then the
  # +HAVE_FOO+ preprocessor macro would be passed to the compiler.
  #
  def have_var(var, headers = nil, opt = "", &b)
    checking_for checking_message(var, headers, opt) do
      if try_var(var, headers, opt, &b)
        $defs.push(format("-DHAVE_%s", var.tr_cpp))
        true
      else
        false
      end
    end
  end

  # Returns whether or not the given +header+ file can be found on your system.
  # If found, a macro is passed as a preprocessor constant to the compiler
  # using the header file name, in uppercase, prepended with +HAVE_+.
  #
  # For example, if <code>have_header('foo.h')</code> returned true, then the
  # +HAVE_FOO_H+ preprocessor macro would be passed to the compiler.
  #
  def have_header(header, preheaders = nil, opt = "", &b)
    dir_config(header[/.*?(?=\/)|.*?(?=\.)/])
    checking_for header do
      if try_header(cpp_include(preheaders)+cpp_include(header), opt, &b)
        $defs.push(format("-DHAVE_%s", header.tr_cpp))
        true
      else
        false
      end
    end
  end

  # Returns whether or not the given +framework+ can be found on your system.
  # If found, a macro is passed as a preprocessor constant to the compiler
  # using the framework name, in uppercase, prepended with +HAVE_FRAMEWORK_+.
  #
  # For example, if <code>have_framework('Ruby')</code> returned true, then
  # the +HAVE_FRAMEWORK_RUBY+ preprocessor macro would be passed to the
  # compiler.
  #
  # If +fw+ is a pair of the framework name and its header file name
  # that header file is checked, instead of the normally used header
  # file which is named same as the framework.
  def have_framework(fw, &b)
    if Array === fw
      fw, header = *fw
    else
      header = "#{fw}.h"
    end
    checking_for fw do
      src = cpp_include("#{fw}/#{header}") << "\n" "int main(void){return 0;}"
      opt = " -framework #{fw}"
      if try_link(src, opt, &b) or (objc = try_link(src, "-ObjC#{opt}", &b))
        $defs.push(format("-DHAVE_FRAMEWORK_%s", fw.tr_cpp))
        # TODO: non-worse way than this hack, to get rid of separating
        # option and its argument.
        $LDFLAGS << " -ObjC" if objc and /(\A|\s)-ObjC(\s|\z)/ !~ $LDFLAGS
        $LIBS << opt
        true
      else
        false
      end
    end
  end

  # Instructs mkmf to search for the given +header+ in any of the +paths+
  # provided, and returns whether or not it was found in those paths.
  #
  # If the header is found then the path it was found on is added to the list
  # of included directories that are sent to the compiler (via the
  # <code>-I</code> switch).
  #
  def find_header(header, *paths)
    message = checking_message(header, paths)
    header = cpp_include(header)
    checking_for message do
      if try_header(header)
        true
      else
        found = false
        paths.each do |dir|
          opt = "-I#{dir}".quote
          if try_header(header, opt)
            $INCFLAGS << " " << opt
            found = true
            break
          end
        end
        found
      end
    end
  end

  # Returns whether or not the struct of type +type+ contains +member+.  If
  # it does not, or the struct type can't be found, then false is returned.
  # You may optionally specify additional +headers+ in which to look for the
  # struct (in addition to the common header files).
  #
  # If found, a macro is passed as a preprocessor constant to the compiler
  # using the type name and the member name, in uppercase, prepended with
  # +HAVE_+.
  #
  # For example, if <code>have_struct_member('struct foo', 'bar')</code>
  # returned true, then the +HAVE_STRUCT_FOO_BAR+ preprocessor macro would be
  # passed to the compiler.
  #
  # +HAVE_ST_BAR+ is also defined for backward compatibility.
  #
  def have_struct_member(type, member, headers = nil, opt = "", &b)
    checking_for checking_message("#{type}.#{member}", headers) do
      if try_compile(<<"SRC", opt, &b)
#{cpp_include(headers)}
/*top*/
int s = (char *)&((#{type}*)0)->#{member} - (char *)0;
#{MAIN_DOES_NOTHING}
SRC
        $defs.push(format("-DHAVE_%s_%s", type.tr_cpp, member.tr_cpp))
        $defs.push(format("-DHAVE_ST_%s", member.tr_cpp)) # backward compatibility
        true
      else
        false
      end
    end
  end

  # :nodoc:
  # Returns whether or not the static type +type+ is defined.
  #
  # See also +have_type+
  #
  def try_type(type, headers = nil, opt = "", &b)
    if try_compile(<<"SRC", opt, &b)
#{cpp_include(headers)}
/*top*/
typedef #{type} conftest_type;
int conftestval[sizeof(conftest_type)?1:-1];
SRC
      $defs.push(format("-DHAVE_TYPE_%s", type.tr_cpp))
      true
    else
      false
    end
  end

  # Returns whether or not the static type +type+ is defined.  You may
  # optionally pass additional +headers+ to check against in addition to the
  # common header files.
  #
  # You may also pass additional flags to +opt+ which are then passed along to
  # the compiler.
  #
  # If found, a macro is passed as a preprocessor constant to the compiler
  # using the type name, in uppercase, prepended with +HAVE_TYPE_+.
  #
  # For example, if <code>have_type('foo')</code> returned true, then the
  # +HAVE_TYPE_FOO+ preprocessor macro would be passed to the compiler.
  #
  def have_type(type, headers = nil, opt = "", &b)
    checking_for checking_message(type, headers, opt) do
      try_type(type, headers, opt, &b)
    end
  end

  # Returns where the static type +type+ is defined.
  #
  # You may also pass additional flags to +opt+ which are then passed along to
  # the compiler.
  #
  # See also +have_type+.
  #
  def find_type(type, opt, *headers, &b)
    opt ||= ""
    fmt = "not found"
    def fmt.%(x)
      x ? x.respond_to?(:join) ? x.join(",") : x : self
    end
    checking_for checking_message(type, nil, opt), fmt do
      headers.find do |h|
        try_type(type, h, opt, &b)
      end
    end
  end

  # :nodoc:
  # Returns whether or not the constant +const+ is defined.
  #
  # See also +have_const+
  #
  def try_const(const, headers = nil, opt = "", &b)
    const, type = *const
    if try_compile(<<"SRC", opt, &b)
#{cpp_include(headers)}
/*top*/
typedef #{type || 'int'} conftest_type;
conftest_type conftestval = #{type ? '' : '(int)'}#{const};
SRC
      $defs.push(format("-DHAVE_CONST_%s", const.tr_cpp))
      true
    else
      false
    end
  end

  # Returns whether or not the constant +const+ is defined.  You may
  # optionally pass the +type+ of +const+ as <code>[const, type]</code>,
  # such as:
  #
  #   have_const(%w[PTHREAD_MUTEX_INITIALIZER pthread_mutex_t], "pthread.h")
  #
  # You may also pass additional +headers+ to check against in addition to the
  # common header files, and additional flags to +opt+ which are then passed
  # along to the compiler.
  #
  # If found, a macro is passed as a preprocessor constant to the compiler
  # using the type name, in uppercase, prepended with +HAVE_CONST_+.
  #
  # For example, if <code>have_const('foo')</code> returned true, then the
  # +HAVE_CONST_FOO+ preprocessor macro would be passed to the compiler.
  #
  def have_const(const, headers = nil, opt = "", &b)
    checking_for checking_message([*const].compact.join(' '), headers, opt) do
      try_const(const, headers, opt, &b)
    end
  end

  # :stopdoc:
  STRING_OR_FAILED_FORMAT = "%s"
  class << STRING_OR_FAILED_FORMAT # :nodoc:
    def %(x)
      x ? super : "failed"
    end
  end

  def typedef_expr(type, headers)
    typename, member = type.split('.', 2)
    prelude = cpp_include(headers).split(/$/)
    prelude << "typedef #{typename} rbcv_typedef_;\n"
    return "rbcv_typedef_", member, prelude
  end

  def try_signedness(type, member, headers = nil, opts = nil)
    raise ArgumentError, "don't know how to tell signedness of members" if member
    if try_static_assert("(#{type})-1 < 0", headers, opts)
      return -1
    elsif try_static_assert("(#{type})-1 > 0", headers, opts)
      return +1
    end
  end

  # :startdoc:

  # Returns the size of the given +type+.  You may optionally specify
  # additional +headers+ to search in for the +type+.
  #
  # If found, a macro is passed as a preprocessor constant to the compiler
  # using the type name, in uppercase, prepended with +SIZEOF_+, followed by
  # the type name, followed by <code>=X</code> where "X" is the actual size.
  #
  # For example, if <code>check_sizeof('mystruct')</code> returned 12, then
  # the <code>SIZEOF_MYSTRUCT=12</code> preprocessor macro would be passed to
  # the compiler.
  #
  def check_sizeof(type, headers = nil, opts = "", &b)
    typedef, member, prelude = typedef_expr(type, headers)
    prelude << "#{typedef} *rbcv_ptr_;\n"
    prelude = [prelude]
    expr = "sizeof((*rbcv_ptr_)#{"." << member if member})"
    fmt = STRING_OR_FAILED_FORMAT
    checking_for checking_message("size of #{type}", headers), fmt do
      if size = try_constant(expr, prelude, opts, &b)
        $defs.push(format("-DSIZEOF_%s=%s", type.tr_cpp, size))
        size
      end
    end
  end

  # Returns the signedness of the given +type+.  You may optionally specify
  # additional +headers+ to search in for the +type+.
  #
  # If the +type+ is found and is a numeric type, a macro is passed as a
  # preprocessor constant to the compiler using the +type+ name, in uppercase,
  # prepended with +SIGNEDNESS_OF_+, followed by the +type+ name, followed by
  # <code>=X</code> where "X" is positive integer if the +type+ is unsigned
  # and a negative integer if the +type+ is signed.
  #
  # For example, if +size_t+ is defined as unsigned, then
  # <code>check_signedness('size_t')</code> would return +1 and the
  # <code>SIGNEDNESS_OF_SIZE_T=+1</code> preprocessor macro would be passed to
  # the compiler.  The <code>SIGNEDNESS_OF_INT=-1</code> macro would be set
  # for <code>check_signedness('int')</code>
  #
  def check_signedness(type, headers = nil, opts = nil, &b)
    typedef, member, prelude = typedef_expr(type, headers)
    signed = nil
    checking_for("signedness of #{type}", STRING_OR_FAILED_FORMAT) do
      signed = try_signedness(typedef, member, [prelude], opts, &b) or next nil
      $defs.push("-DSIGNEDNESS_OF_%s=%+d" % [type.tr_cpp, signed])
      signed < 0 ? "signed" : "unsigned"
    end
    signed
  end

  # Returns the convertible integer type of the given +type+.  You may
  # optionally specify additional +headers+ to search in for the +type+.
  # _convertible_ means actually the same type, or typedef'd from the same
  # type.
  #
  # If the +type+ is an integer type and the _convertible_ type is found,
  # the following macros are passed as preprocessor constants to the compiler
  # using the +type+ name, in uppercase.
  #
  # * +TYPEOF_+, followed by the +type+ name, followed by <code>=X</code>
  #   where "X" is the found _convertible_ type name.
  # * +TYP2NUM+ and +NUM2TYP+,
  #   where +TYP+ is the +type+ name in uppercase with replacing an +_t+
  #   suffix with "T", followed by <code>=X</code> where "X" is the macro name
  #   to convert +type+ to an Integer object, and vice versa.
  #
  # For example, if +foobar_t+ is defined as unsigned long, then
  # <code>convertible_int("foobar_t")</code> would return "unsigned long", and
  # define these macros:
  #
  #   #define TYPEOF_FOOBAR_T unsigned long
  #   #define FOOBART2NUM ULONG2NUM
  #   #define NUM2FOOBART NUM2ULONG
  #
  def convertible_int(type, headers = nil, opts = nil, &b)
    type, macname = *type
    checking_for("convertible type of #{type}", STRING_OR_FAILED_FORMAT) do
      if UNIVERSAL_INTS.include?(type)
        type
      else
        typedef, member, prelude = typedef_expr(type, headers, &b)
        if member
          prelude << "static rbcv_typedef_ rbcv_var;"
          compat = UNIVERSAL_INTS.find {|t|
            try_static_assert("sizeof(rbcv_var.#{member}) == sizeof(#{t})", [prelude], opts, &b)
          }
        else
          next unless signed = try_signedness(typedef, member, [prelude])
          u = "unsigned " if signed > 0
          prelude << "extern rbcv_typedef_ foo();"
          compat = UNIVERSAL_INTS.find {|t|
            try_compile([prelude, "extern #{u}#{t} foo();"].join("\n"), opts, werror: true, &b)
          }
        end
        if compat
          macname ||= type.sub(/_(?=t\z)/, '').tr_cpp
          conv = (compat == "long long" ? "LL" : compat.upcase)
          compat = "#{u}#{compat}"
          typename = type.tr_cpp
          $defs.push(format("-DSIZEOF_%s=SIZEOF_%s", typename, compat.tr_cpp))
          $defs.push(format("-DTYPEOF_%s=%s", typename, compat.quote))
          $defs.push(format("-DPRI_%s_PREFIX=PRI_%s_PREFIX", macname, conv))
          conv = (u ? "U" : "") + conv
          $defs.push(format("-D%s2NUM=%s2NUM", macname, conv))
          $defs.push(format("-DNUM2%s=NUM2%s", macname, conv))
          compat
        end
      end
    end
  end
  # :stopdoc:

  # Used internally by the what_type? method to determine if +type+ is a scalar
  # pointer.
  def scalar_ptr_type?(type, member = nil, headers = nil, &b)
    try_compile(<<"SRC", &b)
#{cpp_include(headers)}
/*top*/
volatile #{type} conftestval;
extern int t(void);
#{MAIN_DOES_NOTHING 't'}
int t(void) {return (int)(1-*(conftestval#{member ? ".#{member}" : ""}));}
SRC
  end

  # Used internally by the what_type? method to determine if +type+ is a scalar
  # pointer.
  def scalar_type?(type, member = nil, headers = nil, &b)
    try_compile(<<"SRC", &b)
#{cpp_include(headers)}
/*top*/
volatile #{type} conftestval;
extern int t(void);
#{MAIN_DOES_NOTHING 't'}
int t(void) {return (int)(1-(conftestval#{member ? ".#{member}" : ""}));}
SRC
  end

  # Used internally by the what_type? method to check if the _typeof_ GCC
  # extension is available.
  def have_typeof?
    return $typeof if defined?($typeof)
    $typeof = %w[__typeof__ typeof].find do |t|
      try_compile(<<SRC)
int rbcv_foo;
#{t}(rbcv_foo) rbcv_bar;
SRC
    end
  end

  # :startdoc:

  # Returns a string represents the type of _type_, or _member_ of
  # _type_ if _member_ is not +nil+.
  def what_type?(type, member = nil, headers = nil, &b)
    m = "#{type}"
    var = val = "*rbcv_var_"
    func = "rbcv_func_(void)"
    if member
      m << "." << member
    else
      type, member = type.split('.', 2)
    end
    if member
      val = "(#{var}).#{member}"
    end
    prelude = [cpp_include(headers).split(/^/)]
    prelude << ["typedef #{type} rbcv_typedef_;\n",
                "extern rbcv_typedef_ *#{func};\n",
                "rbcv_typedef_ #{var};\n",
               ]
    type = "rbcv_typedef_"
    fmt = member && !(typeof = have_typeof?) ? "seems %s" : "%s"
    if typeof
      var = "*rbcv_member_"
      func = "rbcv_mem_func_(void)"
      member = nil
      type = "rbcv_mem_typedef_"
      prelude[-1] << "typedef #{typeof}(#{val}) #{type};\n"
      prelude[-1] << "extern #{type} *#{func};\n"
      prelude[-1] << "#{type} #{var};\n"
      val = var
    end
    def fmt.%(x)
      x ? super : "unknown"
    end
    checking_for checking_message(m, headers), fmt do
      if scalar_ptr_type?(type, member, prelude, &b)
        if try_static_assert("sizeof(*#{var}) == 1", prelude)
          return "string"
        end
        ptr = "*"
      elsif scalar_type?(type, member, prelude, &b)
        unless member and !typeof or try_static_assert("(#{type})-1 < 0", prelude)
          unsigned = "unsigned"
        end
        ptr = ""
      else
        next
      end
      type = UNIVERSAL_INTS.find do |t|
        pre = prelude
        unless member
          pre += [["#{unsigned} #{t} #{ptr}#{var};\n",
                   "extern #{unsigned} #{t} #{ptr}*#{func};\n"]]
        end
        try_static_assert("sizeof(#{ptr}#{val}) == sizeof(#{unsigned} #{t})", pre)
      end
      type or next
      [unsigned, type, ptr].join(" ").strip
    end
  end

  # :nodoc:
  #
  # This method is used internally by the find_executable method.
  #
  # Internal use only.
  #
  def find_executable0(bin, path = nil)
    executable_file = proc do |name|
      begin
        stat = File.stat(name)
      rescue SystemCallError
      else
        next name if stat.file? and stat.executable?
      end
    end

    exts = config_string('EXECUTABLE_EXTS') {|s| s.split} || config_string('EXEEXT') {|s| [s]}
    if File.expand_path(bin) == bin
      return bin if executable_file.call(bin)
      if exts
        exts.each {|ext| executable_file.call(file = bin + ext) and return file}
      end
      return nil
    end
    if path ||= ENV['PATH']
      path = path.split(File::PATH_SEPARATOR)
    else
      path = %w[/usr/local/bin /usr/ucb /usr/bin /bin]
    end
    file = nil
    path.each do |dir|
      dir.sub!(/\A"(.*)"\z/m, '\1') if $mswin or $mingw
      return file if executable_file.call(file = File.join(dir, bin))
      if exts
        exts.each {|ext| executable_file.call(ext = file + ext) and return ext}
      end
    end
    nil
  end

  # Searches for the executable +bin+ on +path+.  The default path is your
  # +PATH+ environment variable. If that isn't defined, it will resort to
  # searching /usr/local/bin, /usr/ucb, /usr/bin and /bin.
  #
  # If found, it will return the full path, including the executable name, of
  # where it was found.
  #
  # Note that this method does not actually affect the generated Makefile.
  #
  def find_executable(bin, path = nil)
    checking_for checking_message(bin, path) do
      find_executable0(bin, path)
    end
  end

  # :stopdoc:

  def arg_config(config, default=nil, &block)
    $arg_config << [config, default]
    defaults = []
    if default
      defaults << default
    elsif !block
      defaults << nil
    end
    $configure_args.fetch(config.tr('_', '-'), *defaults, &block)
  end

  # :startdoc:

  # Tests for the presence of a <tt>--with-</tt>_config_ or
  # <tt>--without-</tt>_config_ option.  Returns +true+ if the with option is
  # given, +false+ if the without option is given, and the default value
  # otherwise.
  #
  # This can be useful for adding custom definitions, such as debug
  # information.
  #
  # Example:
  #
  #    if with_config("debug")
  #       $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"
  #    end
  #
  def with_config(config, default=nil)
    config = config.sub(/^--with[-_]/, '')
    val = arg_config("--with-"+config) do
      if arg_config("--without-"+config)
        false
      elsif block_given?
        yield(config, default)
      else
        break default
      end
    end
    case val
    when "yes"
      true
    when "no"
      false
    else
      val
    end
  end

  # Tests for the presence of an <tt>--enable-</tt>_config_ or
  # <tt>--disable-</tt>_config_ option. Returns +true+ if the enable option is
  # given, +false+ if the disable option is given, and the default value
  # otherwise.
  #
  # This can be useful for adding custom definitions, such as debug
  # information.
  #
  # Example:
  #
  #    if enable_config("debug")
  #       $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"
  #    end
  #
  def enable_config(config, default=nil)
    if arg_config("--enable-"+config)
      true
    elsif arg_config("--disable-"+config)
      false
    elsif block_given?
      yield(config, default)
    else
      return default
    end
  end

  # Generates a header file consisting of the various macro definitions
  # generated by other methods such as have_func and have_header. These are
  # then wrapped in a custom <code>#ifndef</code> based on the +header+ file
  # name, which defaults to "extconf.h".
  #
  # For example:
  #
  #   # extconf.rb
  #   require 'mkmf'
  #   have_func('realpath')
  #   have_header('sys/utime.h')
  #   create_header
  #   create_makefile('foo')
  #
  # The above script would generate the following extconf.h file:
  #
  #   #ifndef EXTCONF_H
  #   #define EXTCONF_H
  #   #define HAVE_REALPATH 1
  #   #define HAVE_SYS_UTIME_H 1
  #   #endif
  #
  # Given that the create_header method generates a file based on definitions
  # set earlier in your extconf.rb file, you will probably want to make this
  # one of the last methods you call in your script.
  #
  def create_header(header = "extconf.h")
    message "creating %s\n", header
    sym = header.tr_cpp
    hdr = ["#ifndef #{sym}\n#define #{sym}\n"]
    for line in $defs
      case line
      when /^-D([^=]+)(?:=(.*))?/
        hdr << "#define #$1 #{$2 ? Shellwords.shellwords($2)[0].gsub(/(?=\t+)/, "\\\n") : 1}\n"
      when /^-U(.*)/
        hdr << "#undef #$1\n"
      end
    end
    hdr << "#endif\n"
    hdr = hdr.join("")
    log_src(hdr, "#{header} is")
    unless (File.read(header) == hdr rescue false)
      File.open(header, "wb") do |hfile|
        hfile.write(hdr)
      end
    end
    $extconf_h = header
  end

  # call-seq:
  #   dir_config(target)
  #   dir_config(target, prefix)
  #   dir_config(target, idefault, ldefault)
  #
  # Sets a +target+ name that the user can then use to configure
  # various "with" options with on the command line by using that
  # name.  For example, if the target is set to "foo", then the user
  # could use the <code>--with-foo-dir=prefix</code>,
  # <code>--with-foo-include=dir</code> and
  # <code>--with-foo-lib=dir</code> command line options to tell where
  # to search for header/library files.
  #
  # You may pass along additional parameters to specify default
  # values.  If one is given it is taken as default +prefix+, and if
  # two are given they are taken as "include" and "lib" defaults in
  # that order.
  #
  # In any case, the return value will be an array of determined
  # "include" and "lib" directories, either of which can be nil if no
  # corresponding command line option is given when no default value
  # is specified.
  #
  # Note that dir_config only adds to the list of places to search for
  # libraries and include files.  It does not link the libraries into your
  # application.
  #
  def dir_config(target, idefault=nil, ldefault=nil)
    key = [target, idefault, ldefault].compact.join("\0")
    if conf = $config_dirs[key]
      return conf
    end

    if dir = with_config(target + "-dir", (idefault unless ldefault))
      defaults = Array === dir ? dir : dir.split(File::PATH_SEPARATOR)
      idefault = ldefault = nil
    end

    idir = with_config(target + "-include", idefault)
    if conf = $arg_config.assoc("--with-#{target}-include")
      conf[1] ||= "${#{target}-dir}/include"
    end
    ldir = with_config(target + "-lib", ldefault)
    if conf = $arg_config.assoc("--with-#{target}-lib")
      conf[1] ||= "${#{target}-dir}/#{_libdir_basename}"
    end

    idirs = idir ? Array === idir ? idir.dup : idir.split(File::PATH_SEPARATOR) : []
    if defaults
      idirs.concat(defaults.collect {|d| d + "/include"})
      idir = ([idir] + idirs).compact.join(File::PATH_SEPARATOR)
    end
    unless idirs.empty?
      idirs.collect! {|d| "-I" + d}
      idirs -= Shellwords.shellwords($CPPFLAGS)
      unless idirs.empty?
        $CPPFLAGS = (idirs.quote << $CPPFLAGS).join(" ")
      end
    end

    ldirs = ldir ? Array === ldir ? ldir.dup : ldir.split(File::PATH_SEPARATOR) : []
    if defaults
      ldirs.concat(defaults.collect {|d| "#{d}/#{_libdir_basename}"})
      ldir = ([ldir] + ldirs).compact.join(File::PATH_SEPARATOR)
    end
    $LIBPATH = ldirs | $LIBPATH

    $config_dirs[key] = [idir, ldir]
  end

  # Returns compile/link information about an installed library in a tuple of <code>[cflags,
  # ldflags, libs]</code>, by using the command found first in the following commands:
  #
  # 1. If <code>--with-{pkg}-config={command}</code> is given via
  #    command line option: <code>{command} {options}</code>
  #
  # 2. <code>{pkg}-config {options}</code>
  #
  # 3. <code>pkg-config {options} {pkg}</code>
  #
  # Where +options+ is the option name without dashes, for instance <code>"cflags"</code> for the
  # <code>--cflags</code> flag.
  #
  # The values obtained are appended to <code>$INCFLAGS</code>, <code>$CFLAGS</code>,
  # <code>$LDFLAGS</code> and <code>$libs</code>.
  #
  # If one or more <code>options</code> argument is given, the config command is
  # invoked with the options and a stripped output string is returned without
  # modifying any of the global values mentioned above.
  def pkg_config(pkg, *options)
    fmt = "not found"
    def fmt.%(x)
      x ? x.inspect : self
    end

    checking_for "pkg-config for #{pkg}", fmt do
      _, ldir = dir_config(pkg)
      if ldir
        pkg_config_path = "#{ldir}/pkgconfig"
        if File.directory?(pkg_config_path)
          Logging.message("PKG_CONFIG_PATH = %s\n", pkg_config_path)
          envs = ["PKG_CONFIG_PATH"=>[pkg_config_path, ENV["PKG_CONFIG_PATH"]].compact.join(File::PATH_SEPARATOR)]
        end
      end
      if pkgconfig = with_config("#{pkg}-config") and find_executable0(pkgconfig)
      # if and only if package specific config command is given
      elsif ($PKGCONFIG ||=
             (pkgconfig = with_config("pkg-config") {config_string("PKG_CONFIG") || ENV["PKG_CONFIG"] || "pkg-config"}) &&
             find_executable0(pkgconfig) && pkgconfig) and
           xsystem([*envs, $PKGCONFIG, "--exists", pkg])
        # default to pkg-config command
        pkgconfig = $PKGCONFIG
        args = [pkg]
      elsif find_executable0(pkgconfig = "#{pkg}-config")
      # default to package specific config command, as a last resort.
      else
        pkgconfig = nil
      end
      if pkgconfig
        get = proc {|opts|
          opts = Array(opts).map { |o| "--#{o}" }
          opts = xpopen([*envs, pkgconfig, *opts, *args], err:[:child, :out], &:read)
          Logging.open {puts opts.each_line.map{|s|"=> #{s.inspect}"}}
          if $?.success?
            opts = opts.strip
            libarg, libpath = LIBARG, LIBPATHFLAG.strip
            opts = opts.shellsplit.map { |s|
              if s.start_with?('-l')
                libarg % s[2..]
              elsif s.start_with?('-L')
                libpath % s[2..]
              else
                s
              end
            }.quote.join(" ")
            opts
          end
        }
      end
      orig_ldflags = $LDFLAGS
      if get and !options.empty?
        get[options]
      elsif get and try_ldflags(ldflags = get['libs'])
        if incflags = get['cflags-only-I']
          $INCFLAGS << " " << incflags
          cflags = get['cflags-only-other']
        else
          cflags = get['cflags']
        end
        libs = get['libs-only-l']
        if cflags
          $CFLAGS += " " << cflags
          $CXXFLAGS += " " << cflags
        end
        if libs
          ldflags = (Shellwords.shellwords(ldflags) - Shellwords.shellwords(libs)).quote.join(" ")
        else
          libs, ldflags = Shellwords.shellwords(ldflags).partition {|s| s =~ /-l([^ ]+)/ }.map {|l|l.quote.join(" ")}
        end
        $libs += " " << libs

        $LDFLAGS = [orig_ldflags, ldflags].join(' ')
        Logging::message "package configuration for %s\n", pkg
        Logging::message "incflags: %s\ncflags: %s\nldflags: %s\nlibs: %s\n\n",
                         incflags, cflags, ldflags, libs
        [[incflags, cflags].join(' '), ldflags, libs]
      else
        Logging::message "package configuration for %s is not found\n", pkg
        nil
      end
    end
  end

  # :stopdoc:

  def with_destdir(dir)
    dir = dir.sub($dest_prefix_pattern, '')
    /\A\$[\(\{]/ =~ dir ? dir : "$(DESTDIR)"+dir
  end

  # Converts forward slashes to backslashes. Aimed at MS Windows.
  #
  # Internal use only.
  #
  def winsep(s)
    s.tr('/', '\\')
  end

  # Converts native path to format acceptable in Makefile
  #
  # Internal use only.
  #
  if !CROSS_COMPILING
    case CONFIG['build_os']
    when 'mingw32'
      def mkintpath(path)
        # mingw uses make from msys and it needs special care
        # converts from C:\some\path to /C/some/path
        path = path.dup
        path.tr!('\\', '/')
        path.sub!(/\A([A-Za-z]):(?=\/)/, '/\1')
        path
      end
    when 'cygwin', 'msys'
      if CONFIG['target_os'] != 'cygwin'
        def mkintpath(path)
          IO.popen(["cygpath", "-u", path], &:read).chomp
        end
      end
    end
  end
  unless method_defined?(:mkintpath)
    def mkintpath(path)
      path
    end
  end

  def configuration(srcdir)
    mk = []
    verbose = with_config('verbose') ?  "1" : (CONFIG['MKMF_VERBOSE'] || "0")
    vpath = $VPATH.dup
    CONFIG["hdrdir"] ||= $hdrdir
    mk << %{
SHELL = /bin/sh

# V=0 quiet, V=1 verbose.  other values don't work.
V = 1
V0 = $(V:0=)
Q1 = $(V:1=)
Q = $(Q1:0=@)
ECHO1 = $(V:1=@ #{CONFIG['NULLCMD']})
ECHO = $(ECHO1:0=@ echo)
NULLCMD = #{CONFIG['NULLCMD']}

#### Start of system configuration section. ####
#{"top_srcdir = " + $top_srcdir.sub(%r"\A#{Regexp.quote($topdir)}/", "$(topdir)/") if $extmk}
srcdir = #{srcdir.gsub(/\$\((srcdir)\)|\$\{(srcdir)\}/) {mkintpath(CONFIG[$1||$2]).unspace}}
topdir = #{mkintpath(topdir = $extmk ? CONFIG["topdir"] : $topdir).unspace}
hdrdir = #{(hdrdir = CONFIG["hdrdir"]) == topdir ? "$(topdir)" : mkintpath(hdrdir).unspace}
arch_hdrdir = #{mkintpath($arch_hdrdir).unspace}
PATH_SEPARATOR = #{CONFIG['PATH_SEPARATOR']}
VPATH = #{vpath.join(CONFIG['PATH_SEPARATOR'])}
}
    if $extmk
      mk << "RUBYLIB =\n""RUBYOPT = -\n"
    end
    prefix = mkintpath(CONFIG["prefix"])
    if destdir = prefix[$dest_prefix_pattern, 1]
      mk << "\nDESTDIR = #{destdir}\n"
      prefix = prefix[destdir.size..-1]
    end
    mk << "prefix = #{with_destdir(prefix).unspace}\n"
    CONFIG.each do |key, var|
      mk << "#{key} = #{with_destdir(mkintpath(var)).unspace}\n" if /.prefix$/ =~ key
    end
    CONFIG.each do |key, var|
      next if /^abs_/ =~ key
      next if /^(?:src|top(?:_src)?|build|hdr)dir$/ =~ key
      next unless /dir$/ =~ key
      mk << "#{key} = #{with_destdir(var)}\n"
    end
    if !$extmk and !$configure_args.has_key?('--ruby') and
        sep = config_string('BUILD_FILE_SEPARATOR')
      sep = ":/=#{sep}"
    else
      sep = ""
    end
    possible_command = (proc {|s| s if /top_srcdir|tooldir/ !~ s} unless $extmk)
    extconf_h = $extconf_h ? "-DRUBY_EXTCONF_H=\\\"$(RUBY_EXTCONF_H)\\\" " : $defs.join(" ") << " "
    headers = %w[
      $(hdrdir)/ruby.h
      $(hdrdir)/ruby/backward.h
      $(hdrdir)/ruby/ruby.h
      $(hdrdir)/ruby/defines.h
      $(hdrdir)/ruby/missing.h
      $(hdrdir)/ruby/intern.h
      $(hdrdir)/ruby/st.h
      $(hdrdir)/ruby/subst.h
    ]
    headers += $headers
    if RULE_SUBST
      headers.each {|h| h.sub!(/.*/, &RULE_SUBST.method(:%))}
    end
    headers << $config_h
    headers << '$(RUBY_EXTCONF_H)' if $extconf_h
    mk << %{

CC_WRAPPER = #{CONFIG['CC_WRAPPER']}
CC = #{CONFIG['CC']}
CXX = #{CONFIG['CXX']}
LIBRUBY = #{CONFIG['LIBRUBY']}
LIBRUBY_A = #{CONFIG['LIBRUBY_A']}
LIBRUBYARG_SHARED = #$LIBRUBYARG_SHARED
LIBRUBYARG_STATIC = #$LIBRUBYARG_STATIC
empty =
OUTFLAG = #{OUTFLAG}$(empty)
COUTFLAG = #{COUTFLAG}$(empty)
CSRCFLAG = #{CSRCFLAG}$(empty)

RUBY_EXTCONF_H = #{$extconf_h}
cflags   = #{CONFIG['cflags']}
cxxflags = #{CONFIG['cxxflags']}
optflags = #{CONFIG['optflags']}
debugflags = #{CONFIG['debugflags']}
warnflags = #{$warnflags}
cppflags = #{CONFIG['cppflags']}
CCDLFLAGS = #{$static ? '' : CONFIG['CCDLFLAGS']}
CFLAGS   = $(CCDLFLAGS) #$CFLAGS $(ARCH_FLAG)
INCFLAGS = -I. #$INCFLAGS
DEFS     = #{CONFIG['DEFS']}
CPPFLAGS = #{extconf_h}#{$CPPFLAGS}
CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG)
ldflags  = #{$LDFLAGS}
dldflags = #{$DLDFLAGS} #{CONFIG['EXTDLDFLAGS']}
ARCH_FLAG = #{$ARCH_FLAG}
DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
LDSHARED = #{CONFIG['LDSHARED']}
LDSHAREDXX = #{config_string('LDSHAREDXX') || '$(LDSHARED)'}
POSTLINK = #{config_string('POSTLINK', RbConfig::CONFIG)}
AR = #{CONFIG['AR']}
LD = #{CONFIG['LD']}
EXEEXT = #{CONFIG['EXEEXT']}

}
    CONFIG.each do |key, val|
      mk << "#{key} = #{val}\n" if /^RUBY.*NAME/ =~ key
    end
    mk << %{
arch = #{CONFIG['arch']}
sitearch = #{CONFIG['sitearch']}
ruby_version = #{RbConfig::CONFIG['ruby_version']}
ruby = #{$ruby.sub(%r[\A#{Regexp.quote(RbConfig::CONFIG['bindir'])}(?=/|\z)]) {'$(bindir)'}}
RUBY = $(ruby#{sep})
BUILTRUBY = #{if defined?($builtruby) && $builtruby
    $builtruby
  else
    File.join('$(bindir)', CONFIG["RUBY_INSTALL_NAME"] + CONFIG['EXEEXT'])
  end}
ruby_headers = #{headers.join(' ')}

RM = #{config_string('RM', &possible_command) || '$(RUBY) -run -e rm -- -f'}
RM_RF = #{config_string('RMALL', &possible_command) || '$(RUBY) -run -e rm -- -rf'}
RMDIRS = #{config_string('RMDIRS', &possible_command) || '$(RUBY) -run -e rmdir -- -p'}
MAKEDIRS = #{config_string('MAKEDIRS', &possible_command) || '@$(RUBY) -run -e mkdir -- -p'}
INSTALL = #{config_string('INSTALL', &possible_command) || '@$(RUBY) -run -e install -- -vp'}
INSTALL_PROG = #{config_string('INSTALL_PROG') || '$(INSTALL) -m 0755'}
INSTALL_DATA = #{config_string('INSTALL_DATA') || '$(INSTALL) -m 0644'}
COPY = #{config_string('CP', &possible_command) || '@$(RUBY) -run -e cp -- -v'}
TOUCH = exit >

#### End of system configuration section. ####

preload = #{defined?($preload) && $preload ? $preload.join(' ') : ''}
}
    mk
  end

  def timestamp_file(name, target_prefix = nil)
    pat = {}
    name = '$(RUBYARCHDIR)' if name == '$(TARGET_SO_DIR)'
    install_dirs.each do |n, d|
      pat[n] = $` if /\$\(target_prefix\)\z/ =~ d
    end
    name = name.gsub(/\$\((#{pat.keys.join("|")})\)/) {pat[$1]+target_prefix}
    name.sub!(/(\$\((?:site)?arch\))\/*/, '')
    arch = $1 || ''
    name.chomp!('/')
    name = name.gsub(/(\$[({]|[})])|(\/+)|[^-.\w]+/) {$1 ? "" : $2 ? ".-." : "_"}
    File.join("$(TIMESTAMP_DIR)", arch, "#{name.sub(/\A(?=.)/, '.')}.time")
  end
  # :startdoc:

  # Creates a stub Makefile.
  #
  def dummy_makefile(srcdir)
    configuration(srcdir) << <<RULES << CLEANINGS
CLEANFILES = #{$cleanfiles.join(' ')}
DISTCLEANFILES = #{$distcleanfiles.join(' ')}

all install static install-so install-rb: Makefile
	@$(NULLCMD)
.PHONY: all install static install-so install-rb
.PHONY: clean clean-so clean-static clean-rb

RULES
  end

  def each_compile_rules # :nodoc:
    vpath_splat = /\$\(\*VPATH\*\)/
    COMPILE_RULES.each do |rule|
      if vpath_splat =~ rule
        $VPATH.each do |path|
          yield rule.sub(vpath_splat) {path}
        end
      else
        yield rule
      end
    end
  end

  # Processes the data contents of the "depend" file.  Each line of this file
  # is expected to be a file name.
  #
  # Returns the output of findings, in Makefile format.
  #
  def depend_rules(depend)
    suffixes = []
    depout = []
    cont = implicit = nil
    impconv = proc do
      each_compile_rules {|rule| depout << (rule % implicit[0]) << implicit[1]}
      implicit = nil
    end
    ruleconv = proc do |line|
      if implicit
        if /\A\t/ =~ line
          implicit[1] << line
          next
        else
          impconv[]
        end
      end
      if m = /\A\.(\w+)\.(\w+)(?:\s*:)/.match(line)
        suffixes << m[1] << m[2]
        implicit = [[m[1], m[2]], [m.post_match]]
        next
      elsif RULE_SUBST and /\A(?!\s*\w+\s*=)[$\w][^#]*:/ =~ line
        line.sub!(/\s*\#.*$/, '')
        comment = $&
        line.gsub!(%r"(\s)(?!\.)([^$(){}+=:\s\\,]+)(?=\s|\z)") {$1 + RULE_SUBST % $2}
        line = line.chomp + comment + "\n" if comment
      end
      depout << line
    end
    depend.each_line do |line|
      line.gsub!(/\.o\b/, ".#{$OBJEXT}")
      line.gsub!(/\{\$\(VPATH\)\}/, "") unless $nmake
      line.gsub!(/\$\((?:hdr|top)dir\)\/config.h/, $config_h)
      if $nmake && /\A\s*\$\(RM|COPY\)/ =~ line
        line.gsub!(%r"[-\w\./]{2,}"){$&.tr("/", "\\")}
        line.gsub!(/(\$\((?!RM|COPY)[^:)]+)(?=\))/, '\1:/=\\')
      end
      if /(?:^|[^\\])(?:\\\\)*\\$/ =~ line
        (cont ||= []) << line
        next
      elsif cont
        line = (cont << line).join
        cont = nil
      end
      ruleconv.call(line)
    end
    if cont
      ruleconv.call(cont.join)
    elsif implicit
      impconv.call
    end
    unless suffixes.empty?
      depout.unshift(".SUFFIXES: ." + suffixes.uniq.join(" .") + "\n\n")
    end
    if $extconf_h
      depout.unshift("$(OBJS): $(RUBY_EXTCONF_H)\n\n")
      depout.unshift("$(OBJS): $(hdrdir)/ruby/win32.h\n\n") if $mswin or $mingw
    end
    depout.flatten!
    depout
  end

  # Generates the Makefile for your extension, passing along any options and
  # preprocessor constants that you may have generated through other methods.
  #
  # The +target+ name should correspond the name of the global function name
  # defined within your C extension, minus the +Init_+.  For example, if your
  # C extension is defined as +Init_foo+, then your target would simply be
  # "foo".
  #
  # If any "/" characters are present in the target name, only the last name
  # is interpreted as the target name, and the rest are considered toplevel
  # directory names, and the generated Makefile will be altered accordingly to
  # follow that directory structure.
  #
  # For example, if you pass "test/foo" as a target name, your extension will
  # be installed under the "test" directory.  This means that in order to
  # load the file within a Ruby program later, that directory structure will
  # have to be followed, e.g. <code>require 'test/foo'</code>.
  #
  # The +srcprefix+ should be used when your source files are not in the same
  # directory as your build script. This will not only eliminate the need for
  # you to manually copy the source files into the same directory as your
  # build script, but it also sets the proper +target_prefix+ in the generated
  # Makefile.
  #
  # Setting the +target_prefix+ will, in turn, install the generated binary in
  # a directory under your <code>RbConfig::CONFIG['sitearchdir']</code> that
  # mimics your local filesystem when you run <code>make install</code>.
  #
  # For example, given the following file tree:
  #
  #   ext/
  #     extconf.rb
  #     test/
  #       foo.c
  #
  # And given the following code:
  #
  #   create_makefile('test/foo', 'test')
  #
  # That will set the +target_prefix+ in the generated Makefile to "test".
  # That, in turn, will create the following file tree when installed via the
  # <code>make install</code> command:
  #
  #   /path/to/ruby/sitearchdir/test/foo.so
  #
  # It is recommended that you use this approach to generate your makefiles,
  # instead of copying files around manually, because some third party
  # libraries may depend on the +target_prefix+ being set properly.
  #
  # The +srcprefix+ argument can be used to override the default source
  # directory, i.e. the current directory.  It is included as part of the
  # +VPATH+ and added to the list of +INCFLAGS+.
  #
  def create_makefile(target, srcprefix = nil)
    $target = target
    libpath = $DEFLIBPATH|$LIBPATH
    message "creating Makefile\n"
    MakeMakefile.rm_f "#{CONFTEST}*"
    if CONFIG["DLEXT"] == $OBJEXT
      for lib in libs = $libs.split(' ')
        lib.sub!(/-l(.*)/, %%"lib\\1.#{$LIBEXT}"%)
      end
      $defs.push(format("-DEXTLIB='%s'", libs.join(",")))
    end

    if target.include?('/')
      target_prefix, target = File.split(target)
      target_prefix[0,0] = '/'
    else
      target_prefix = ""
    end

    srcprefix ||= "$(srcdir)/#{srcprefix}".chomp('/')
    RbConfig.expand(srcdir = srcprefix.dup)

    ext = ".#{$OBJEXT}"
    orig_srcs = Dir[File.join(srcdir, "*.{#{SRC_EXT.join(%q{,})}}")]
    if not $objs
      srcs = $srcs || orig_srcs
      $objs = []
      objs = srcs.inject(Hash.new {[]}) {|h, f|
        h.key?(o = File.basename(f, ".*") << ext) or $objs << o
        h[o] <<= f
        h
      }
      unless objs.delete_if {|b, f| f.size == 1}.empty?
        dups = objs.map {|b, f|
          "#{b[/.*\./]}{#{f.collect {|n| n[/([^.]+)\z/]}.join(',')}}"
        }
        abort "source files duplication - #{dups.join(", ")}"
      end
    else
      $objs.collect! {|o| File.basename(o, ".*") << ext} unless $OBJEXT == "o"
      srcs = $srcs || $objs.collect {|o| o.chomp(ext) << ".c"}
    end
    $srcs = srcs

    hdrs = Dir[File.join(srcdir, "*.{#{HDR_EXT.join(%q{,})}}")]

    target = nil if $objs.empty?

    if target and EXPORT_PREFIX
      if File.exist?(File.join(srcdir, target + '.def'))
        deffile = "$(srcdir)/$(TARGET).def"
        unless EXPORT_PREFIX.empty?
          makedef = %{$(RUBY) -pe "$$_.sub!(/^(?=\\w)/,'#{EXPORT_PREFIX}') unless 1../^EXPORTS$/i" #{deffile}}
        end
      else
        makedef = %{(echo EXPORTS && echo $(TARGET_ENTRY))}
      end
      if makedef
        $cleanfiles << '$(DEFFILE)'
        origdef = deffile
        deffile = "$(TARGET)-$(arch).def"
      end
    end
    origdef ||= ''

    if $extout and $INSTALLFILES
      $cleanfiles.concat($INSTALLFILES.collect {|files, dir|File.join(dir, files.delete_prefix('./'))})
      $distcleandirs.concat($INSTALLFILES.collect {|files, dir| dir})
    end

    if $extmk and $static
      $defs << "-DRUBY_EXPORT=1"
    end

    if $extmk and not $extconf_h
      create_header
    end

    libpath = libpathflag(libpath)

    dllib = target ? "$(TARGET).#{CONFIG['DLEXT']}" : ""
    staticlib = target ? "$(TARGET).#$LIBEXT" : ""
    conf = configuration(srcprefix)
    conf << "\
libpath = #{($DEFLIBPATH|$LIBPATH).join(" ")}
LIBPATH = #{libpath}
DEFFILE = #{deffile}

CLEANFILES = #{$cleanfiles.join(' ')}
DISTCLEANFILES = #{$distcleanfiles.join(' ')}
DISTCLEANDIRS = #{$distcleandirs.join(' ')}

extout = #{$extout && $extout.quote}
extout_prefix = #{$extout_prefix}
target_prefix = #{target_prefix}
LOCAL_LIBS = #{$LOCAL_LIBS}
LIBS = #{$LIBRUBYARG} #{$libs} #{$LIBS}
ORIG_SRCS = #{orig_srcs.collect(&File.method(:basename)).join(' ')}
SRCS = $(ORIG_SRCS) #{(srcs - orig_srcs).collect(&File.method(:basename)).join(' ')}
OBJS = #{$objs.join(" ")}
HDRS = #{hdrs.map{|h| '$(srcdir)/' + File.basename(h)}.join(' ')}
LOCAL_HDRS = #{$headers.join(' ')}
TARGET = #{target}
TARGET_NAME = #{target && target[/\A\w+/]}
TARGET_ENTRY = #{EXPORT_PREFIX || ''}Init_$(TARGET_NAME)
DLLIB = #{dllib}
EXTSTATIC = #{$static || ""}
STATIC_LIB = #{staticlib unless $static.nil?}
#{!$extout && defined?($installed_list) ? %[INSTALLED_LIST = #{$installed_list}\n] : ""}
TIMESTAMP_DIR = #{$extout && $extmk ? '$(extout)/.timestamp' : '.'}
" #"
    # TODO: fixme
    install_dirs.each {|d| conf << ("%-14s= %s\n" % d) if /^[[:upper:]]/ =~ d[0]}
    sodir = $extout ? '$(TARGET_SO_DIR)' : '$(RUBYARCHDIR)'
    n = '$(TARGET_SO_DIR)$(TARGET)'
    cleanobjs = ["$(OBJS)"]
    if $extmk
      %w[bc i s].each {|ex| cleanobjs << "$(OBJS:.#{$OBJEXT}=.#{ex})"}
    end
    if target
      config_string('cleanobjs') {|t| cleanobjs << t.gsub(/\$\*/, "$(TARGET)#{deffile ? '-$(arch)': ''}")}
    end
    conf << "\
TARGET_SO_DIR =#{$extout ? " $(RUBYARCHDIR)/" : ''}
TARGET_SO     = $(TARGET_SO_DIR)$(DLLIB)
CLEANLIBS     = #{'$(TARGET_SO) ' if target}#{config_string('cleanlibs') {|t| t.gsub(/\$\*/) {n}}}
CLEANOBJS     = #{cleanobjs.join(' ')} *.bak
TARGET_SO_DIR_TIMESTAMP = #{timestamp_file(sodir, target_prefix)}
" #"

    conf = yield(conf) if block_given?
    mfile = File.open("Makefile", "wb")
    mfile.puts(conf)
    mfile.print "
all:    #{$extout ? "install" : target ? "$(DLLIB)" : "Makefile"}
static: #{$extmk && !$static ? "all" : %[$(STATIC_LIB)#{$extout ? " install-rb" : ""}]}
.PHONY: all install static install-so install-rb
.PHONY: clean clean-so clean-static clean-rb
" #"
    mfile.print CLEANINGS
    fsep = config_string('BUILD_FILE_SEPARATOR') {|s| s unless s == "/"}
    if fsep
      sep = ":/=#{fsep}"
      fseprepl = proc {|s|
        s = s.gsub("/", fsep)
        s = s.gsub(/(\$\(\w+)(\))/) {$1+sep+$2}
        s.gsub(/(\$\{\w+)(\})/) {$1+sep+$2}
      }
      rsep = ":#{fsep}=/"
    else
      fseprepl = proc {|s| s}
      sep = ""
      rsep = ""
    end
    dirs = []
    mfile.print "install: install-so install-rb\n\n"
    dir = sodir.dup
    mfile.print("install-so: ")
    if target
      f = "$(DLLIB)"
      dest = "$(TARGET_SO)"
      stamp = '$(TARGET_SO_DIR_TIMESTAMP)'
      if $extout
        mfile.puts dest
        mfile.print "clean-so::\n"
        mfile.print "\t-$(Q)$(RM) #{fseprepl[dest]} #{fseprepl[stamp]}\n"
        mfile.print "\t-$(Q)$(RM_RF) #{fseprepl['$(CLEANLIBS)']}\n"
        mfile.print "\t-$(Q)$(RMDIRS) #{fseprepl[dir]}#{$ignore_error}\n"
      else
        mfile.print "#{f} #{stamp}\n"
        mfile.print "\t$(INSTALL_PROG) #{fseprepl[f]} #{dir}\n"
        if defined?($installed_list)
          mfile.print "\t@echo #{dir}/#{File.basename(f)}>>$(INSTALLED_LIST)\n"
        end
      end
      mfile.print "clean-static::\n"
      mfile.print "\t-$(Q)$(RM) $(STATIC_LIB)\n"
    else
      mfile.puts "Makefile"
    end
    mfile.print("install-rb: pre-install-rb do-install-rb install-rb-default\n")
    mfile.print("install-rb-default: pre-install-rb-default do-install-rb-default\n")
    mfile.print("pre-install-rb: Makefile\n")
    mfile.print("pre-install-rb-default: Makefile\n")
    mfile.print("do-install-rb:\n")
    mfile.print("do-install-rb-default:\n")
    for sfx, i in [["-default", [["lib/**/*.rb", "$(RUBYLIBDIR)", "lib"]]], ["", $INSTALLFILES]]
      files = install_files(mfile, i, nil, srcprefix) or next
      for dir, *files in files
        unless dirs.include?(dir)
          dirs << dir
          mfile.print "pre-install-rb#{sfx}: #{timestamp_file(dir, target_prefix)}\n"
        end
        for f in files
          dest = "#{dir}/#{File.basename(f)}"
          mfile.print("do-install-rb#{sfx}: #{dest}\n")
          mfile.print("#{dest}: #{f} #{timestamp_file(dir, target_prefix)}\n")
          mfile.print("\t$(Q) $(#{$extout ? 'COPY' : 'INSTALL_DATA'}) #{f} $@\n")
          if defined?($installed_list) and !$extout
            mfile.print("\t@echo #{dest}>>$(INSTALLED_LIST)\n")
          end
          if $extout
            mfile.print("clean-rb#{sfx}::\n")
            mfile.print("\t-$(Q)$(RM) #{fseprepl[dest]}\n")
          end
        end
      end
      mfile.print "pre-install-rb#{sfx}:\n"
      if files.empty?
        mfile.print("\t@$(NULLCMD)\n")
      else
        q = "$(MAKE) -q do-install-rb#{sfx}"
        if $nmake
          mfile.print "!if \"$(Q)\" == \"@\"\n\t@#{q} || \\\n!endif\n\t"
        else
          mfile.print "\t$(Q1:0=@#{q} || )"
        end
        mfile.print "$(ECHO1:0=echo) installing#{sfx.sub(/^-/, " ")} #{target} libraries\n"
      end
      if $extout
        dirs.uniq!
        unless dirs.empty?
          mfile.print("clean-rb#{sfx}::\n")
          for dir in dirs.sort_by {|d| -d.count('/')}
            stamp = timestamp_file(dir, target_prefix)
            mfile.print("\t-$(Q)$(RM) #{fseprepl[stamp]}\n")
            mfile.print("\t-$(Q)$(RMDIRS) #{fseprepl[dir]}#{$ignore_error}\n")
          end
        end
      end
    end
    if target and !dirs.include?(sodir)
      mfile.print "$(TARGET_SO_DIR_TIMESTAMP):\n\t$(Q) $(MAKEDIRS) $(@D) #{sodir}\n\t$(Q) $(TOUCH) $@\n"
    end
    dirs.each do |d|
      t = timestamp_file(d, target_prefix)
      mfile.print "#{t}:\n\t$(Q) $(MAKEDIRS) $(@D) #{d}\n\t$(Q) $(TOUCH) $@\n"
    end

    mfile.print <<-SITEINSTALL

site-install: site-install-so site-install-rb
site-install-so: install-so
site-install-rb: install-rb

    SITEINSTALL

    return unless target

    mfile.print ".SUFFIXES: .#{(SRC_EXT + [$OBJEXT, $ASMEXT]).compact.join(' .')}\n"
    mfile.print "\n"

    compile_command = "\n\t$(ECHO) compiling $(<#{rsep})\n\t$(Q) %s\n\n"
    command = compile_command % COMPILE_CXX
    asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX
    CXX_EXT.each do |e|
      each_compile_rules do |rule|
        mfile.printf(rule, e, $OBJEXT)
        mfile.print(command)
        mfile.printf(rule, e, $ASMEXT)
        mfile.print(asm_command)
      end
    end
    command = compile_command % COMPILE_C
    asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_C
    C_EXT.each do |e|
      each_compile_rules do |rule|
        mfile.printf(rule, e, $OBJEXT)
        mfile.print(command)
        mfile.printf(rule, e, $ASMEXT)
        mfile.print(asm_command)
      end
    end

    mfile.print "$(TARGET_SO): "
    mfile.print "$(DEFFILE) " if makedef
    mfile.print "$(OBJS) Makefile"
    mfile.print " $(TARGET_SO_DIR_TIMESTAMP)" if $extout
    mfile.print "\n"
    mfile.print "\t$(ECHO) linking shared-object #{target_prefix.sub(/\A\/(.*)/, '\1/')}$(DLLIB)\n"
    mfile.print "\t-$(Q)$(RM) $(@#{sep})\n"
    link_so = LINK_SO.gsub(/^/, "\t$(Q) ")
    if srcs.any?(&%r"\.(?:#{CXX_EXT.join('|')})\z".method(:===))
      link_so = link_so.sub(/\bLDSHARED\b/, '\&XX')
    end
    mfile.print link_so, "\n\n"
    unless $static.nil?
      mfile.print "$(STATIC_LIB): $(OBJS)\n\t-$(Q)$(RM) $(@#{sep})\n\t"
      mfile.print "$(ECHO) linking static-library $(@#{rsep})\n\t$(Q) "
      mfile.print "$(AR) #{config_string('ARFLAGS') || 'cru '}$@ $(OBJS)"
      config_string('RANLIB') do |ranlib|
        mfile.print "\n\t-$(Q)#{ranlib} $(@)#{$ignore_error}"
      end
    end
    mfile.print "\n\n"
    if makedef
      mfile.print "$(DEFFILE): #{origdef}\n"
      mfile.print "\t$(ECHO) generating $(@#{rsep})\n"
      mfile.print "\t$(Q) #{makedef} > $@\n\n"
    end

    depend = File.join(srcdir, "depend")
    if File.exist?(depend)
      mfile.print("###\n", *depend_rules(File.read(depend)))
    else
      mfile.print "$(OBJS): $(HDRS) $(ruby_headers)\n"
    end

    $makefile_created = true
  ensure
    mfile.close if mfile
  end

  # :stopdoc:

  def init_mkmf(config = CONFIG, rbconfig = RbConfig::CONFIG)
    $makefile_created = false
    $arg_config = []
    $enable_shared = config['ENABLE_SHARED'] == 'yes'
    $defs = []
    $extconf_h = nil
    $config_dirs = {}

    if $warnflags = CONFIG['warnflags'] and CONFIG['GCC'] == 'yes'
      # turn warnings into errors only for bundled extensions.
      config['warnflags'] = $warnflags.gsub(/(?:\A|\s)-W\Kerror[-=](?!implicit-function-declaration)/, '')
      if /icc\z/ =~ config['CC']
        config['warnflags'].gsub!(/(\A|\s)-W(?:division-by-zero|deprecated-declarations)/, '\1')
      end
      RbConfig.expand(rbconfig['warnflags'] = config['warnflags'].dup)
      config.each do |key, val|
        RbConfig.expand(rbconfig[key] = val.dup) if /warnflags/ =~ val
      end
      $warnflags = config['warnflags'] unless $extmk
    end
    if (w = rbconfig['CC_WRAPPER']) and !w.empty? and !File.executable?(w)
      rbconfig['CC_WRAPPER'] = config['CC_WRAPPER'] = ''
    end
    $CFLAGS = with_config("cflags", arg_config("CFLAGS", config["CFLAGS"])).dup
    $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup
    $ARCH_FLAG = with_config("arch_flag", arg_config("ARCH_FLAG", config["ARCH_FLAG"])).dup
    $CPPFLAGS = with_config("cppflags", arg_config("CPPFLAGS", config["CPPFLAGS"])).dup
    $LDFLAGS = with_config("ldflags", arg_config("LDFLAGS", config["LDFLAGS"])).dup
    $INCFLAGS = "-I$(arch_hdrdir)"
    $INCFLAGS << " -I$(hdrdir)/ruby/backward" unless $extmk
    $INCFLAGS << " -I$(hdrdir) -I$(srcdir)"
    $DLDFLAGS = with_config("dldflags", arg_config("DLDFLAGS", config["DLDFLAGS"])).dup
    config_string("ADDITIONAL_DLDFLAGS") {|flags| $DLDFLAGS << " " << flags} unless $extmk
    $LIBEXT = config['LIBEXT'].dup
    $OBJEXT = config["OBJEXT"].dup
    $EXEEXT = config["EXEEXT"].dup
    $ASMEXT = config_string('ASMEXT', &:dup) || 'S'
    $LIBS = "#{config['LIBS']} #{config['DLDLIBS']}"
    $LIBRUBYARG = ""
    $LIBRUBYARG_STATIC = config['LIBRUBYARG_STATIC']
    $LIBRUBYARG_SHARED = config['LIBRUBYARG_SHARED']
    $DEFLIBPATH = [$extmk ? "$(topdir)" : "$(#{config["libdirname"] || "libdir"})"]
    $DEFLIBPATH.unshift(".")
    $LIBPATH = []
    $INSTALLFILES = []
    $NONINSTALLFILES = [/~\z/, /\A#.*#\z/, /\A\.#/, /\.bak\z/i, /\.orig\z/, /\.rej\z/, /\.l[ao]\z/, /\.o\z/]
    $VPATH = %w[$(srcdir) $(arch_hdrdir)/ruby $(hdrdir)/ruby]

    $objs = nil
    $srcs = nil
    $headers = []
    $libs = ""
    if $enable_shared or RbConfig.expand(config["LIBRUBY"].dup) != RbConfig.expand(config["LIBRUBY_A"].dup)
      $LIBRUBYARG = config['LIBRUBYARG']
    end

    $LOCAL_LIBS = ""

    $cleanfiles = config_string('CLEANFILES') {|s| Shellwords.shellwords(s)} || []
    $cleanfiles << "mkmf.log"
    $distcleanfiles = config_string('DISTCLEANFILES') {|s| Shellwords.shellwords(s)} || []
    $distcleandirs = config_string('DISTCLEANDIRS') {|s| Shellwords.shellwords(s)} || []

    $extout ||= nil
    $extout_prefix ||= nil

    $arg_config.clear
    $config_dirs.clear
    dir_config("opt")
  end

  FailedMessage = <<MESSAGE
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
MESSAGE

  # Returns whether or not the Makefile was successfully generated. If not,
  # the script will abort with an error message.
  #
  # Internal use only.
  #
  def mkmf_failed(path)
    unless $makefile_created or File.exist?("Makefile")
      opts = $arg_config.collect {|t, n| "\t#{t}#{n ? "=#{n}" : ""}\n"}
      abort "*** #{path} failed ***\n" + FailedMessage + opts.join
    end
  end

  private

  def _libdir_basename
    @libdir_basename ||= config_string("libdir") {|name| name[/\A\$\(exec_prefix\)\/(.*)/, 1]} || "lib"
  end

  def MAIN_DOES_NOTHING(*refs)
    src = MAIN_DOES_NOTHING
    unless refs.empty?
      src = src.sub(/\{/) do
        $& +
          "\n  if (argc > 1000000) {\n" +
          refs.map {|n|"    int (* volatile #{n}p)(void)=(int (*)(void))&#{n};\n"}.join("") +
          refs.map {|n|"    printf(\"%d\", (*#{n}p)());\n"}.join("") +
          "  }\n"
      end
    end
    src
  end

  extend self
  init_mkmf

  $make = with_config("make-prog", ENV["MAKE"] || "make")
  make, = Shellwords.shellwords($make)
  $nmake = nil
  case
  when $mswin
    $nmake = ?m if /nmake/i =~ make
  end
  $ignore_error = " 2> #{File::NULL} || #{$mswin ? 'exit /b0' : 'true'}"

  RbConfig::CONFIG["srcdir"] = CONFIG["srcdir"] =
    $srcdir = arg_config("--srcdir", File.dirname($0))
  $configure_args["--topsrcdir"] ||= $srcdir
  if $curdir = arg_config("--curdir")
    RbConfig.expand(curdir = $curdir.dup)
  else
    curdir = $curdir = "."
  end
  unless File.expand_path(RbConfig::CONFIG["topdir"]) == File.expand_path(curdir)
    CONFIG["topdir"] = $curdir
    RbConfig::CONFIG["topdir"] = curdir
  end
  $configure_args["--topdir"] ||= $curdir
  $ruby = arg_config("--ruby", File.join(RbConfig::CONFIG["bindir"], CONFIG["ruby_install_name"]))

  RbConfig.expand(CONFIG["RUBY_SO_NAME"])

  # :startdoc:

  split = Shellwords.method(:shellwords).to_proc

  ##
  # The prefix added to exported symbols automatically

  EXPORT_PREFIX = config_string('EXPORT_PREFIX') {|s| s.strip}

  hdr = ['#include "ruby.h"' "\n"]
  config_string('COMMON_MACROS') do |s|
    Shellwords.shellwords(s).each do |w|
      w, v = w.split(/=/, 2)
      hdr << "#ifndef #{w}"
      hdr << "#define #{[w, v].compact.join(" ")}"
      hdr << "#endif /* #{w} */"
    end
  end
  config_string('COMMON_HEADERS') do |s|
    Shellwords.shellwords(s).each {|w| hdr << "#include <#{w}>"}
  end

  ##
  # Common headers for Ruby C extensions

  COMMON_HEADERS = hdr.join("\n")

  ##
  # Common libraries for Ruby C extensions

  COMMON_LIBS = config_string('COMMON_LIBS', &split) || []

  ##
  # make compile rules

  COMPILE_RULES = config_string('COMPILE_RULES', &split) || %w[.%s.%s:]

  ##
  # Substitution in rules for NMake

  RULE_SUBST = config_string('RULE_SUBST')

  ##
  # Command which will compile C files in the generated Makefile

  COMPILE_C = config_string('COMPILE_C') || '$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<'

  ##
  # Command which will compile C++ files in the generated Makefile

  COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<'

  ##
  # Command which will translate C files to assembler sources in the generated Makefile

  ASSEMBLE_C = config_string('ASSEMBLE_C') || COMPILE_C.sub(/(?<=\s)-c(?=\s)/, '-S')

  ##
  # Command which will translate C++ files to assembler sources in the generated Makefile

  ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')

  ##
  # Command which will compile a program in order to test linking a library

  TRY_LINK = config_string('TRY_LINK') ||
    "$(CC) #{OUTFLAG}#{CONFTEST}#{$EXEEXT} $(INCFLAGS) $(CPPFLAGS) " \
    "$(CFLAGS) $(src) $(LIBPATH) $(LDFLAGS) $(ARCH_FLAG) $(LOCAL_LIBS) $(LIBS)"

  ##
  # Command which will link a shared library

  LINK_SO = (config_string('LINK_SO') || "").sub(/^$/) do
    if CONFIG["DLEXT"] == $OBJEXT
      "ld $(DLDFLAGS) -r -o $@ $(OBJS)\n"
    else
      "$(LDSHARED) #{OUTFLAG}$@ $(OBJS) " \
      "$(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)"
    end
  end

  ##
  # Argument which will add a library path to the linker

  LIBPATHFLAG = config_string('LIBPATHFLAG') || '-L%s'

  ##
  # Argument which will add a runtime library path to the linker

  RPATHFLAG = config_string('RPATHFLAG') || ''

  ##
  # Argument which will add a library to the linker

  LIBARG = config_string('LIBARG') || '-l%s'

  ##
  # A C main function which does no work

  MAIN_DOES_NOTHING = config_string('MAIN_DOES_NOTHING') || "int main(int argc, char **argv)\n{\n  return !!argv[argc];\n}"

  ##
  # The type names for convertible_int

  UNIVERSAL_INTS = config_string('UNIVERSAL_INTS') {|s| Shellwords.shellwords(s)} ||
    %w[int short long long\ long]

  sep = config_string('BUILD_FILE_SEPARATOR') {|s| ":/=#{s}" if s != "/"} || ""

  ##
  # Makefile rules that will clean the extension build directory

  CLEANINGS = "
clean-static::
clean-rb-default::
clean-rb::
clean-so::
clean: clean-so clean-static clean-rb-default clean-rb
\t\t-$(Q)$(RM_RF) $(CLEANLIBS#{sep}) $(CLEANOBJS#{sep}) $(CLEANFILES#{sep}) .*.time

distclean-rb-default::
distclean-rb::
distclean-so::
distclean-static::
distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb
\t\t-$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) #{CONFTEST}.* mkmf.log#{' exts.mk' if $extmk}
\t\t-$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES#{sep})
\t\t-$(Q)$(RMDIRS) $(DISTCLEANDIRS#{sep})#{$ignore_error}

realclean: distclean
"

  @lang = Hash.new(self)

  ##
  # Retrieves the module for _name_ language.
  def self.[](name)
    @lang.fetch(name)
  end

  ##
  # Defines the module for _name_ language.
  def self.[]=(name, mod)
    @lang[name] = mod
  end

  ##
  # The language that this module is for
  LANGUAGE = -"C"

  self[self::LANGUAGE] = self

  cxx = Module.new do
    # Module for C++

    include MakeMakefile
    extend self

    # :stopdoc:

    CONFTEST_CXX = "#{CONFTEST}.#{config_string('CXX_EXT') || CXX_EXT[0]}"

    TRY_LINK_CXX = config_string('TRY_LINK_CXX') ||
                   ((cmd = TRY_LINK.gsub(/\$\(C(?:C|(FLAGS))\)/, '$(CXX\1)')) != TRY_LINK && cmd) ||
                   "$(CXX) #{OUTFLAG}#{CONFTEST}#{$EXEEXT} $(INCFLAGS) $(CPPFLAGS) " \
                   "$(CXXFLAGS) $(src) $(LIBPATH) $(LDFLAGS) $(ARCH_FLAG) $(LOCAL_LIBS) $(LIBS)"

    def have_devel?
      unless defined? @have_devel
        @have_devel = true
        @have_devel = try_link(MAIN_DOES_NOTHING)
      end
      @have_devel
    end

    def conftest_source
      CONFTEST_CXX
    end

    def cc_command(opt="")
      conf = cc_config(opt)
      RbConfig::expand("$(CXX) #$INCFLAGS #$CPPFLAGS #$CXXFLAGS #$ARCH_FLAG #{opt} -c #{CONFTEST_CXX}",
                       conf)
    end

    def link_command(ldflags, *opts)
      conf = link_config(ldflags, *opts)
      RbConfig::expand(TRY_LINK_CXX.dup, conf)
    end

    # :startdoc:
  end

  cxx::LANGUAGE = -"C++"
  self[cxx::LANGUAGE] = cxx
end

# MakeMakefile::Global = #
m = Module.new {
  include(MakeMakefile)
  private(*MakeMakefile.public_instance_methods(false))
}
include m

if not $extmk and /\A(extconf|makefile).rb\z/ =~ File.basename($0)
  END {mkmf_failed($0)}
end
PK*J[7�ɴR�Rshare/ruby/tempfile.rbnu�[���# frozen_string_literal: true
#
# tempfile - manipulates temporary files
#
# $Id$
#

require 'delegate'
require 'tmpdir'

# A utility class for managing temporary files.
#
# There are two kind of methods of creating a temporary file:
#
# - Tempfile.create (recommended)
# - Tempfile.new and Tempfile.open (mostly for backward compatibility, not recommended)
#
# Tempfile.create creates a usual \File object.
# The timing of file deletion is predictable.
# Also, it supports open-and-unlink technique which
# removes the temporary file immediately after creation.
#
# Tempfile.new and Tempfile.open creates a \Tempfile object.
# The created file is removed by the GC (finalizer).
# The timing of file deletion is not predictable.
#
# == Synopsis
#
#   require 'tempfile'
#
#   # Tempfile.create with a block
#   # The filename are choosen automatically.
#   # (You can specify the prefix and suffix of the filename by an optional argument.)
#   Tempfile.create {|f|
#     f.puts "foo"
#     f.rewind
#     f.read                # => "foo\n"
#   }                       # The file is removed at block exit.
#
#   # Tempfile.create without a block
#   # You need to unlink the file in non-block form.
#   f = Tempfile.create
#   f.puts "foo"
#   f.close
#   File.unlink(f.path)     # You need to unlink the file.
#
#   # Tempfile.create(anonymous: true) without a block
#   f = Tempfile.create(anonymous: true)
#   # The file is already removed because anonymous.
#   f.path                  # => "/tmp/"  (no filename since no file)
#   f.puts "foo"
#   f.rewind
#   f.read                  # => "foo\n"
#   f.close
#
#   # Tempfile.create(anonymous: true) with a block
#   Tempfile.create(anonymous: true) {|f|
#     # The file is already removed because anonymous.
#     f.path                # => "/tmp/"  (no filename since no file)
#     f.puts "foo"
#     f.rewind
#     f.read                # => "foo\n"
#   }
#
#   # Not recommended: Tempfile.new without a block
#   file = Tempfile.new('foo')
#   file.path      # => A unique filename in the OS's temp directory,
#                  #    e.g.: "/tmp/foo.24722.0"
#                  #    This filename contains 'foo' in its basename.
#   file.write("hello world")
#   file.rewind
#   file.read      # => "hello world"
#   file.close
#   file.unlink    # deletes the temp file
#
# == About Tempfile.new and Tempfile.open
#
# This section does not apply to Tempfile.create because
# it returns a File object (not a Tempfile object).
#
# When you create a Tempfile object,
# it will create a temporary file with a unique filename. A Tempfile
# objects behaves just like a File object, and you can perform all the usual
# file operations on it: reading data, writing data, changing its permissions,
# etc. So although this class does not explicitly document all instance methods
# supported by File, you can in fact call any File instance method on a
# Tempfile object.
#
# A Tempfile object has a finalizer to remove the temporary file.
# This means that the temporary file is removed via GC.
# This can cause several problems:
#
# - Long GC intervals and conservative GC can accumulate temporary files that are not removed.
# - Temporary files are not removed if Ruby exits abnormally (such as SIGKILL, SEGV).
#
# There are legacy good practices for Tempfile.new and Tempfile.open as follows.
#
# === Explicit close
#
# When a Tempfile object is garbage collected, or when the Ruby interpreter
# exits, its associated temporary file is automatically deleted. This means
# that it's unnecessary to explicitly delete a Tempfile after use, though
# it's a good practice to do so: not explicitly deleting unused Tempfiles can
# potentially leave behind a large number of temp files on the filesystem
# until they're garbage collected. The existence of these temp files can make
# it harder to determine a new Tempfile filename.
#
# Therefore, one should always call #unlink or close in an ensure block, like
# this:
#
#   file = Tempfile.new('foo')
#   begin
#      # ...do something with file...
#   ensure
#      file.close
#      file.unlink   # deletes the temp file
#   end
#
# Tempfile.create { ... } exists for this purpose and is more convenient to use.
# Note that Tempfile.create returns a File instance instead of a Tempfile, which
# also avoids the overhead and complications of delegation.
#
#   Tempfile.create('foo') do |file|
#      # ...do something with file...
#   end
#
# === Unlink after creation
#
# On POSIX systems, it's possible to unlink a file right after creating it,
# and before closing it. This removes the filesystem entry without closing
# the file handle, so it ensures that only the processes that already had
# the file handle open can access the file's contents. It's strongly
# recommended that you do this if you do not want any other processes to
# be able to read from or write to the Tempfile, and you do not need to
# know the Tempfile's filename either.
#
# Also, this guarantees the temporary file is removed even if Ruby exits abnormally.
# The OS reclaims the storage for the temporary file when the file is closed or
# the Ruby process exits (normally or abnormally).
#
# For example, a practical use case for unlink-after-creation would be this:
# you need a large byte buffer that's too large to comfortably fit in RAM,
# e.g. when you're writing a web server and you want to buffer the client's
# file upload data.
#
# `Tempfile.create(anonymous: true)` supports this behavior.
# It also works on Windows.
#
# == Minor notes
#
# Tempfile's filename picking method is both thread-safe and inter-process-safe:
# it guarantees that no other threads or processes will pick the same filename.
#
# Tempfile itself however may not be entirely thread-safe. If you access the
# same Tempfile object from multiple threads then you should protect it with a
# mutex.
class Tempfile < DelegateClass(File)

  # The version
  VERSION = "0.3.1"

  # Creates a file in the underlying file system;
  # returns a new \Tempfile object based on that file.
  #
  # If possible, consider instead using Tempfile.create, which:
  #
  # - Avoids the performance cost of delegation,
  #   incurred when Tempfile.new calls its superclass <tt>DelegateClass(File)</tt>.
  # - Does not rely on a finalizer to close and unlink the file,
  #   which can be unreliable.
  #
  # Creates and returns file whose:
  #
  # - Class is \Tempfile (not \File, as in Tempfile.create).
  # - Directory is the system temporary directory (system-dependent).
  # - Generated filename is unique in that directory.
  # - Permissions are <tt>0600</tt>;
  #   see {File Permissions}[rdoc-ref:File@File+Permissions].
  # - Mode is <tt>'w+'</tt> (read/write mode, positioned at the end).
  #
  # The underlying file is removed when the \Tempfile object dies
  # and is reclaimed by the garbage collector.
  #
  # Example:
  #
  #   f = Tempfile.new # => #<Tempfile:/tmp/20220505-17839-1s0kt30>
  #   f.class               # => Tempfile
  #   f.path                # => "/tmp/20220505-17839-1s0kt30"
  #   f.stat.mode.to_s(8)   # => "100600"
  #   File.exist?(f.path)   # => true
  #   File.unlink(f.path)   #
  #   File.exist?(f.path)   # => false
  #
  # Argument +basename+, if given, may be one of:
  #
  # - A string: the generated filename begins with +basename+:
  #
  #     Tempfile.new('foo') # => #<Tempfile:/tmp/foo20220505-17839-1whk2f>
  #
  # - An array of two strings <tt>[prefix, suffix]</tt>:
  #   the generated filename begins with +prefix+ and ends with +suffix+:
  #
  #     Tempfile.new(%w/foo .jpg/) # => #<Tempfile:/tmp/foo20220505-17839-58xtfi.jpg>
  #
  # With arguments +basename+ and +tmpdir+, the file is created in directory +tmpdir+:
  #
  #   Tempfile.new('foo', '.') # => #<Tempfile:./foo20220505-17839-xfstr8>
  #
  # Keyword arguments +mode+ and +options+ are passed directly to method
  # {File.open}[rdoc-ref:File.open]:
  #
  # - The value given with +mode+ must be an integer,
  #   and may be expressed as the logical OR of constants defined in
  #   {File::Constants}[rdoc-ref:File::Constants].
  # - For +options+, see {Open Options}[rdoc-ref:IO@Open+Options].
  #
  # Related: Tempfile.create.
  #
  def initialize(basename="", tmpdir=nil, mode: 0, **options)
    warn "Tempfile.new doesn't call the given block.", uplevel: 1 if block_given?

    @unlinked = false
    @mode = mode|File::RDWR|File::CREAT|File::EXCL
    tmpfile = nil
    ::Dir::Tmpname.create(basename, tmpdir, **options) do |tmpname, n, opts|
      opts[:perm] = 0600
      tmpfile = File.open(tmpname, @mode, **opts)
      @opts = opts.freeze
    end

    super(tmpfile)

    @finalizer_manager = FinalizerManager.new(__getobj__.path)
    @finalizer_manager.register(self, __getobj__)
  end

  def initialize_dup(other) # :nodoc:
    initialize_copy_iv(other)
    super(other)
    @finalizer_manager.register(self, __getobj__)
  end

  def initialize_clone(other) # :nodoc:
    initialize_copy_iv(other)
    super(other)
    @finalizer_manager.register(self, __getobj__)
  end

  private def initialize_copy_iv(other) # :nodoc:
    @unlinked = other.unlinked
    @mode = other.mode
    @opts = other.opts
    @finalizer_manager = other.finalizer_manager
  end

  # Opens or reopens the file with mode "r+".
  def open
    _close

    mode = @mode & ~(File::CREAT|File::EXCL)
    __setobj__(File.open(__getobj__.path, mode, **@opts))

    @finalizer_manager.register(self, __getobj__)

    __getobj__
  end

  def _close    # :nodoc:
    __getobj__.close
  end
  protected :_close

  # Closes the file. If +unlink_now+ is true, then the file will be unlinked
  # (deleted) after closing. Of course, you can choose to later call #unlink
  # if you do not unlink it now.
  #
  # If you don't explicitly unlink the temporary file, the removal
  # will be delayed until the object is finalized.
  def close(unlink_now=false)
    _close
    unlink if unlink_now
  end

  # Closes and unlinks (deletes) the file. Has the same effect as called
  # <tt>close(true)</tt>.
  def close!
    close(true)
  end

  # Unlinks (deletes) the file from the filesystem. One should always unlink
  # the file after using it, as is explained in the "Explicit close" good
  # practice section in the Tempfile overview:
  #
  #   file = Tempfile.new('foo')
  #   begin
  #      # ...do something with file...
  #   ensure
  #      file.close
  #      file.unlink   # deletes the temp file
  #   end
  #
  # === Unlink-before-close
  #
  # On POSIX systems it's possible to unlink a file before closing it. This
  # practice is explained in detail in the Tempfile overview (section
  # "Unlink after creation"); please refer there for more information.
  #
  # However, unlink-before-close may not be supported on non-POSIX operating
  # systems. Microsoft Windows is the most notable case: unlinking a non-closed
  # file will result in an error, which this method will silently ignore. If
  # you want to practice unlink-before-close whenever possible, then you should
  # write code like this:
  #
  #   file = Tempfile.new('foo')
  #   file.unlink   # On Windows this silently fails.
  #   begin
  #      # ... do something with file ...
  #   ensure
  #      file.close!   # Closes the file handle. If the file wasn't unlinked
  #                    # because #unlink failed, then this method will attempt
  #                    # to do so again.
  #   end
  def unlink
    return if @unlinked
    begin
      File.unlink(__getobj__.path)
    rescue Errno::ENOENT
    rescue Errno::EACCES
      # may not be able to unlink on Windows; just ignore
      return
    end

    @finalizer_manager.unlinked = true

    @unlinked = true
  end
  alias delete unlink

  # Returns the full path name of the temporary file.
  # This will be nil if #unlink has been called.
  def path
    @unlinked ? nil : __getobj__.path
  end

  # Returns the size of the temporary file.  As a side effect, the IO
  # buffer is flushed before determining the size.
  def size
    if !__getobj__.closed?
      __getobj__.size # File#size calls rb_io_flush_raw()
    else
      File.size(__getobj__.path)
    end
  end
  alias length size

  # :stopdoc:
  def inspect
    if __getobj__.closed?
      "#<#{self.class}:#{path} (closed)>"
    else
      "#<#{self.class}:#{path}>"
    end
  end
  alias to_s inspect

  protected

  attr_reader :unlinked, :mode, :opts, :finalizer_manager

  class FinalizerManager # :nodoc:
    attr_accessor :unlinked

    def initialize(path)
      @open_files = {}
      @path = path
      @pid = Process.pid
      @unlinked = false
    end

    def register(obj, file)
      ObjectSpace.undefine_finalizer(obj)
      ObjectSpace.define_finalizer(obj, self)
      @open_files[obj.object_id] = file
    end

    def call(object_id)
      @open_files.delete(object_id).close

      if @open_files.empty? && !@unlinked && Process.pid == @pid
        $stderr.puts "removing #{@path}..." if $DEBUG
        begin
          File.unlink(@path)
        rescue Errno::ENOENT
        end
        $stderr.puts "done" if $DEBUG
      end
    end
  end

  class << self
    # :startdoc:

    # Creates a new Tempfile.
    #
    # This method is not recommended and exists mostly for backward compatibility.
    # Please use Tempfile.create instead, which avoids the cost of delegation,
    # does not rely on a finalizer, and also unlinks the file when given a block.
    #
    # Tempfile.open is still appropriate if you need the Tempfile to be unlinked
    # by a finalizer and you cannot explicitly know where in the program the
    # Tempfile can be unlinked safely.
    #
    # If no block is given, this is a synonym for Tempfile.new.
    #
    # If a block is given, then a Tempfile object will be constructed,
    # and the block is run with the Tempfile object as argument. The Tempfile
    # object will be automatically closed after the block terminates.
    # However, the file will *not* be unlinked and needs to be manually unlinked
    # with Tempfile#close! or Tempfile#unlink. The finalizer will try to unlink
    # but should not be relied upon as it can keep the file on the disk much
    # longer than intended. For instance, on CRuby, finalizers can be delayed
    # due to conservative stack scanning and references left in unused memory.
    #
    # The call returns the value of the block.
    #
    # In any case, all arguments (<code>*args</code>) will be passed to Tempfile.new.
    #
    #   Tempfile.open('foo', '/home/temp') do |f|
    #      # ... do something with f ...
    #   end
    #
    #   # Equivalent:
    #   f = Tempfile.open('foo', '/home/temp')
    #   begin
    #      # ... do something with f ...
    #   ensure
    #      f.close
    #   end
    def open(*args, **kw)
      tempfile = new(*args, **kw)

      if block_given?
        begin
          yield(tempfile)
        ensure
          tempfile.close
        end
      else
        tempfile
      end
    end
  end
end

# Creates a file in the underlying file system;
# returns a new \File object based on that file.
#
# With no block given and no arguments, creates and returns file whose:
#
# - Class is {File}[rdoc-ref:File] (not \Tempfile).
# - Directory is the system temporary directory (system-dependent).
# - Generated filename is unique in that directory.
# - Permissions are <tt>0600</tt>;
#   see {File Permissions}[rdoc-ref:File@File+Permissions].
# - Mode is <tt>'w+'</tt> (read/write mode, positioned at the end).
#
# The temporary file removal depends on the keyword argument +anonymous+ and
# whether a block is given or not.
# See the description about the +anonymous+ keyword argument later.
#
# Example:
#
#   f = Tempfile.create     # => #<File:/tmp/20220505-9795-17ky6f6>
#   f.class                 # => File
#   f.path                  # => "/tmp/20220505-9795-17ky6f6"
#   f.stat.mode.to_s(8)     # => "100600"
#   f.close
#   File.exist?(f.path)     # => true
#   File.unlink(f.path)
#   File.exist?(f.path)     # => false
#
#   Tempfile.create {|f|
#     f.puts "foo"
#     f.rewind
#     f.read                # => "foo\n"
#     f.path                # => "/tmp/20240524-380207-oma0ny"
#     File.exist?(f.path)   # => true
#   }                       # The file is removed at block exit.
#
#   f = Tempfile.create(anonymous: true)
#   # The file is already removed because anonymous
#   f.path                  # => "/tmp/"  (no filename since no file)
#   f.puts "foo"
#   f.rewind
#   f.read                  # => "foo\n"
#   f.close
#
#   Tempfile.create(anonymous: true) {|f|
#     # The file is already removed because anonymous
#     f.path                # => "/tmp/"  (no filename since no file)
#     f.puts "foo"
#     f.rewind
#     f.read                # => "foo\n"
#   }
#
# The argument +basename+, if given, may be one of the following:
#
# - A string: the generated filename begins with +basename+:
#
#     Tempfile.create('foo') # => #<File:/tmp/foo20220505-9795-1gok8l9>
#
# - An array of two strings <tt>[prefix, suffix]</tt>:
#   the generated filename begins with +prefix+ and ends with +suffix+:
#
#     Tempfile.create(%w/foo .jpg/) # => #<File:/tmp/foo20220505-17839-tnjchh.jpg>
#
# With arguments +basename+ and +tmpdir+, the file is created in the directory +tmpdir+:
#
#   Tempfile.create('foo', '.') # => #<File:./foo20220505-9795-1emu6g8>
#
# Keyword arguments +mode+ and +options+ are passed directly to the method
# {File.open}[rdoc-ref:File.open]:
#
# - The value given for +mode+ must be an integer
#   and may be expressed as the logical OR of constants defined in
#   {File::Constants}[rdoc-ref:File::Constants].
# - For +options+, see {Open Options}[rdoc-ref:IO@Open+Options].
#
# The keyword argument +anonymous+ specifies when the file is removed.
#
# - <tt>anonymous=false</tt> (default) without a block: the file is not removed.
# - <tt>anonymous=false</tt> (default) with a block: the file is removed after the block exits.
# - <tt>anonymous=true</tt> without a block: the file is removed before returning.
# - <tt>anonymous=true</tt> with a block: the file is removed before the block is called.
#
# In the first case (<tt>anonymous=false</tt> without a block),
# the file is not removed automatically.
# It should be explicitly closed.
# It can be used to rename to the desired filename.
# If the file is not needed, it should be explicitly removed.
#
# The File#path method of the created file object returns the temporary directory with a trailing slash
# when +anonymous+ is true.
#
# When a block is given, it creates the file as described above, passes it to the block,
# and returns the block's value.
# Before the returning, the file object is closed and the underlying file is removed:
#
#   Tempfile.create {|file| file.path } # => "/tmp/20220505-9795-rkists"
#
# Implementation note:
#
# The keyword argument +anonymous=true+ is implemented using FILE_SHARE_DELETE on Windows.
# O_TMPFILE is used on Linux.
#
# Related: Tempfile.new.
#
def Tempfile.create(basename="", tmpdir=nil, mode: 0, anonymous: false, **options, &block)
  if anonymous
    create_anonymous(basename, tmpdir, mode: mode, **options, &block)
  else
    create_with_filename(basename, tmpdir, mode: mode, **options, &block)
  end
end

class << Tempfile
private def create_with_filename(basename="", tmpdir=nil, mode: 0, **options)
  tmpfile = nil
  Dir::Tmpname.create(basename, tmpdir, **options) do |tmpname, n, opts|
    mode |= File::RDWR|File::CREAT|File::EXCL
    opts[:perm] = 0600
    tmpfile = File.open(tmpname, mode, **opts)
  end
  if block_given?
    begin
      yield tmpfile
    ensure
      unless tmpfile.closed?
        if File.identical?(tmpfile, tmpfile.path)
          unlinked = File.unlink tmpfile.path rescue nil
        end
        tmpfile.close
      end
      unless unlinked
        begin
          File.unlink tmpfile.path
        rescue Errno::ENOENT
        end
      end
    end
  else
    tmpfile
  end
end

if RUBY_VERSION < "3.2"
  module PathAttr               # :nodoc:
    attr_reader :path

    def self.set_path(file, path)
      file.extend(self).instance_variable_set(:@path, path)
    end
  end
end

private def create_anonymous(basename="", tmpdir=nil, mode: 0, **options, &block)
  tmpfile = nil
  tmpdir = Dir.tmpdir() if tmpdir.nil?
  if defined?(File::TMPFILE) # O_TMPFILE since Linux 3.11
    begin
      tmpfile = File.open(tmpdir, File::RDWR | File::TMPFILE, 0600)
    rescue Errno::EISDIR, Errno::ENOENT, Errno::EOPNOTSUPP
      # kernel or the filesystem does not support O_TMPFILE
      # fallback to create-and-unlink
    end
  end
  if tmpfile.nil?
    mode |= File::SHARE_DELETE | File::BINARY # Windows needs them to unlink the opened file.
    tmpfile = create_with_filename(basename, tmpdir, mode: mode, **options)
    File.unlink(tmpfile.path)
    tmppath = tmpfile.path
  end
  path = File.join(tmpdir, '')
  unless tmppath == path
    # clear path.
    tmpfile.autoclose = false
    tmpfile = File.new(tmpfile.fileno, mode: File::RDWR, path: path)
    PathAttr.set_path(tmpfile, path) if defined?(PathAttr)
  end
  if block
    begin
      yield tmpfile
    ensure
      tmpfile.close
    end
  else
    tmpfile
  end
end
end
PK*J[Q�hV'V'share/ruby/cgi.rbnu�[���# frozen_string_literal: true
#
# cgi.rb - cgi support library
#
# Copyright (C) 2000  Network Applied Communication Laboratory, Inc.
#
# Copyright (C) 2000  Information-technology Promotion Agency, Japan
#
# Author: Wakou Aoyama <wakou@ruby-lang.org>
#
# Documentation: Wakou Aoyama (RDoc'd and embellished by William Webber)
#

# == Overview
#
# The Common Gateway Interface (CGI) is a simple protocol for passing an HTTP
# request from a web server to a standalone program, and returning the output
# to the web browser.  Basically, a CGI program is called with the parameters
# of the request passed in either in the environment (GET) or via $stdin
# (POST), and everything it prints to $stdout is returned to the client.
#
# This file holds the CGI class.  This class provides functionality for
# retrieving HTTP request parameters, managing cookies, and generating HTML
# output.
#
# The file CGI::Session provides session management functionality; see that
# class for more details.
#
# See http://www.w3.org/CGI/ for more information on the CGI protocol.
#
# == Introduction
#
# CGI is a large class, providing several categories of methods, many of which
# are mixed in from other modules.  Some of the documentation is in this class,
# some in the modules CGI::QueryExtension and CGI::HtmlExtension.  See
# CGI::Cookie for specific information on handling cookies, and cgi/session.rb
# (CGI::Session) for information on sessions.
#
# For queries, CGI provides methods to get at environmental variables,
# parameters, cookies, and multipart request data.  For responses, CGI provides
# methods for writing output and generating HTML.
#
# Read on for more details.  Examples are provided at the bottom.
#
# == Queries
#
# The CGI class dynamically mixes in parameter and cookie-parsing
# functionality,  environmental variable access, and support for
# parsing multipart requests (including uploaded files) from the
# CGI::QueryExtension module.
#
# === Environmental Variables
#
# The standard CGI environmental variables are available as read-only
# attributes of a CGI object.  The following is a list of these variables:
#
#
#   AUTH_TYPE               HTTP_HOST          REMOTE_IDENT
#   CONTENT_LENGTH          HTTP_NEGOTIATE     REMOTE_USER
#   CONTENT_TYPE            HTTP_PRAGMA        REQUEST_METHOD
#   GATEWAY_INTERFACE       HTTP_REFERER       SCRIPT_NAME
#   HTTP_ACCEPT             HTTP_USER_AGENT    SERVER_NAME
#   HTTP_ACCEPT_CHARSET     PATH_INFO          SERVER_PORT
#   HTTP_ACCEPT_ENCODING    PATH_TRANSLATED    SERVER_PROTOCOL
#   HTTP_ACCEPT_LANGUAGE    QUERY_STRING       SERVER_SOFTWARE
#   HTTP_CACHE_CONTROL      REMOTE_ADDR
#   HTTP_FROM               REMOTE_HOST
#
#
# For each of these variables, there is a corresponding attribute with the
# same name, except all lower case and without a preceding HTTP_.
# +content_length+ and +server_port+ are integers; the rest are strings.
#
# === Parameters
#
# The method #params() returns a hash of all parameters in the request as
# name/value-list pairs, where the value-list is an Array of one or more
# values.  The CGI object itself also behaves as a hash of parameter names
# to values, but only returns a single value (as a String) for each
# parameter name.
#
# For instance, suppose the request contains the parameter
# "favourite_colours" with the multiple values "blue" and "green".  The
# following behavior would occur:
#
#   cgi.params["favourite_colours"]  # => ["blue", "green"]
#   cgi["favourite_colours"]         # => "blue"
#
# If a parameter does not exist, the former method will return an empty
# array, the latter an empty string.  The simplest way to test for existence
# of a parameter is by the #has_key? method.
#
# === Cookies
#
# HTTP Cookies are automatically parsed from the request.  They are available
# from the #cookies() accessor, which returns a hash from cookie name to
# CGI::Cookie object.
#
# === Multipart requests
#
# If a request's method is POST and its content type is multipart/form-data,
# then it may contain uploaded files.  These are stored by the QueryExtension
# module in the parameters of the request.  The parameter name is the name
# attribute of the file input field, as usual.  However, the value is not
# a string, but an IO object, either an IOString for small files, or a
# Tempfile for larger ones.  This object also has the additional singleton
# methods:
#
# #local_path():: the path of the uploaded file on the local filesystem
# #original_filename():: the name of the file on the client computer
# #content_type():: the content type of the file
#
# == Responses
#
# The CGI class provides methods for sending header and content output to
# the HTTP client, and mixes in methods for programmatic HTML generation
# from CGI::HtmlExtension and CGI::TagMaker modules.  The precise version of HTML
# to use for HTML generation is specified at object creation time.
#
# === Writing output
#
# The simplest way to send output to the HTTP client is using the #out() method.
# This takes the HTTP headers as a hash parameter, and the body content
# via a block.  The headers can be generated as a string using the #http_header()
# method.  The output stream can be written directly to using the #print()
# method.
#
# === Generating HTML
#
# Each HTML element has a corresponding method for generating that
# element as a String.  The name of this method is the same as that
# of the element, all lowercase.  The attributes of the element are
# passed in as a hash, and the body as a no-argument block that evaluates
# to a String.  The HTML generation module knows which elements are
# always empty, and silently drops any passed-in body.  It also knows
# which elements require matching closing tags and which don't.  However,
# it does not know what attributes are legal for which elements.
#
# There are also some additional HTML generation methods mixed in from
# the CGI::HtmlExtension module.  These include individual methods for the
# different types of form inputs, and methods for elements that commonly
# take particular attributes where the attributes can be directly specified
# as arguments, rather than via a hash.
#
# === Utility HTML escape and other methods like a function.
#
# There are some utility tool defined in cgi/util.rb .
# And when include, you can use utility methods like a function.
#
# == Examples of use
#
# === Get form values
#
#   require "cgi"
#   cgi = CGI.new
#   value = cgi['field_name']   # <== value string for 'field_name'
#     # if not 'field_name' included, then return "".
#   fields = cgi.keys            # <== array of field names
#
#   # returns true if form has 'field_name'
#   cgi.has_key?('field_name')
#   cgi.has_key?('field_name')
#   cgi.include?('field_name')
#
# CAUTION! <code>cgi['field_name']</code> returned an Array with the old
# cgi.rb(included in Ruby 1.6)
#
# === Get form values as hash
#
#   require "cgi"
#   cgi = CGI.new
#   params = cgi.params
#
# cgi.params is a hash.
#
#   cgi.params['new_field_name'] = ["value"]  # add new param
#   cgi.params['field_name'] = ["new_value"]  # change value
#   cgi.params.delete('field_name')           # delete param
#   cgi.params.clear                          # delete all params
#
#
# === Save form values to file
#
#   require "pstore"
#   db = PStore.new("query.db")
#   db.transaction do
#     db["params"] = cgi.params
#   end
#
#
# === Restore form values from file
#
#   require "pstore"
#   db = PStore.new("query.db")
#   db.transaction do
#     cgi.params = db["params"]
#   end
#
#
# === Get multipart form values
#
#   require "cgi"
#   cgi = CGI.new
#   value = cgi['field_name']   # <== value string for 'field_name'
#   value.read                  # <== body of value
#   value.local_path            # <== path to local file of value
#   value.original_filename     # <== original filename of value
#   value.content_type          # <== content_type of value
#
# and value has StringIO or Tempfile class methods.
#
# === Get cookie values
#
#   require "cgi"
#   cgi = CGI.new
#   values = cgi.cookies['name']  # <== array of 'name'
#     # if not 'name' included, then return [].
#   names = cgi.cookies.keys      # <== array of cookie names
#
# and cgi.cookies is a hash.
#
# === Get cookie objects
#
#   require "cgi"
#   cgi = CGI.new
#   for name, cookie in cgi.cookies
#     cookie.expires = Time.now + 30
#   end
#   cgi.out("cookie" => cgi.cookies) {"string"}
#
#   cgi.cookies # { "name1" => cookie1, "name2" => cookie2, ... }
#
#   require "cgi"
#   cgi = CGI.new
#   cgi.cookies['name'].expires = Time.now + 30
#   cgi.out("cookie" => cgi.cookies['name']) {"string"}
#
# === Print http header and html string to $DEFAULT_OUTPUT ($>)
#
#   require "cgi"
#   cgi = CGI.new("html4")  # add HTML generation methods
#   cgi.out do
#     cgi.html do
#       cgi.head do
#         cgi.title { "TITLE" }
#       end +
#       cgi.body do
#         cgi.form("ACTION" => "uri") do
#           cgi.p do
#             cgi.textarea("get_text") +
#             cgi.br +
#             cgi.submit
#           end
#         end +
#         cgi.pre do
#           CGI.escapeHTML(
#             "params: #{cgi.params.inspect}\n" +
#             "cookies: #{cgi.cookies.inspect}\n" +
#             ENV.collect do |key, value|
#               "#{key} --> #{value}\n"
#             end.join("")
#           )
#         end
#       end
#     end
#   end
#
#   # add HTML generation methods
#   CGI.new("html3")    # html3.2
#   CGI.new("html4")    # html4.01 (Strict)
#   CGI.new("html4Tr")  # html4.01 Transitional
#   CGI.new("html4Fr")  # html4.01 Frameset
#   CGI.new("html5")    # html5
#
# === Some utility methods
#
#   require 'cgi/util'
#   CGI.escapeHTML('Usage: foo "bar" <baz>')
#
#
# === Some utility methods like a function
#
#   require 'cgi/util'
#   include CGI::Util
#   escapeHTML('Usage: foo "bar" <baz>')
#   h('Usage: foo "bar" <baz>') # alias
#
#

class CGI
  VERSION = "0.4.2"
end

require 'cgi/core'
require 'cgi/cookie'
require 'cgi/util'
CGI.autoload(:HtmlExtension, 'cgi/html')
PK*J[X���?�?share/ruby/prettyprint.rbnu�[���# frozen_string_literal: true
#
# This class implements a pretty printing algorithm. It finds line breaks and
# nice indentations for grouped structure.
#
# By default, the class assumes that primitive elements are strings and each
# byte in the strings have single column in width. But it can be used for
# other situations by giving suitable arguments for some methods:
# * newline object and space generation block for PrettyPrint.new
# * optional width argument for PrettyPrint#text
# * PrettyPrint#breakable
#
# There are several candidate uses:
# * text formatting using proportional fonts
# * multibyte characters which has columns different to number of bytes
# * non-string formatting
#
# == Bugs
# * Box based formatting?
# * Other (better) model/algorithm?
#
# Report any bugs at http://bugs.ruby-lang.org
#
# == References
# Christian Lindig, Strictly Pretty, March 2000,
# https://lindig.github.io/papers/strictly-pretty-2000.pdf
#
# Philip Wadler, A prettier printer, March 1998,
# https://homepages.inf.ed.ac.uk/wadler/topics/language-design.html#prettier
#
# == Author
# Tanaka Akira <akr@fsij.org>
#
class PrettyPrint

  VERSION = "0.2.0"

  # This is a convenience method which is same as follows:
  #
  #   begin
  #     q = PrettyPrint.new(output, maxwidth, newline, &genspace)
  #     ...
  #     q.flush
  #     output
  #   end
  #
  def PrettyPrint.format(output=''.dup, maxwidth=79, newline="\n", genspace=lambda {|n| ' ' * n})
    q = PrettyPrint.new(output, maxwidth, newline, &genspace)
    yield q
    q.flush
    output
  end

  # This is similar to PrettyPrint::format but the result has no breaks.
  #
  # +maxwidth+, +newline+ and +genspace+ are ignored.
  #
  # The invocation of +breakable+ in the block doesn't break a line and is
  # treated as just an invocation of +text+.
  #
  def PrettyPrint.singleline_format(output=''.dup, maxwidth=nil, newline=nil, genspace=nil)
    q = SingleLine.new(output)
    yield q
    output
  end

  # Creates a buffer for pretty printing.
  #
  # +output+ is an output target. If it is not specified, '' is assumed. It
  # should have a << method which accepts the first argument +obj+ of
  # PrettyPrint#text, the first argument +sep+ of PrettyPrint#breakable, the
  # first argument +newline+ of PrettyPrint.new, and the result of a given
  # block for PrettyPrint.new.
  #
  # +maxwidth+ specifies maximum line length. If it is not specified, 79 is
  # assumed. However actual outputs may overflow +maxwidth+ if long
  # non-breakable texts are provided.
  #
  # +newline+ is used for line breaks. "\n" is used if it is not specified.
  #
  # The block is used to generate spaces. {|width| ' ' * width} is used if it
  # is not given.
  #
  def initialize(output=''.dup, maxwidth=79, newline="\n", &genspace)
    @output = output
    @maxwidth = maxwidth
    @newline = newline
    @genspace = genspace || lambda {|n| ' ' * n}

    @output_width = 0
    @buffer_width = 0
    @buffer = []

    root_group = Group.new(0)
    @group_stack = [root_group]
    @group_queue = GroupQueue.new(root_group)
    @indent = 0
  end

  # The output object.
  #
  # This defaults to '', and should accept the << method
  attr_reader :output

  # The maximum width of a line, before it is separated in to a newline
  #
  # This defaults to 79, and should be an Integer
  attr_reader :maxwidth

  # The value that is appended to +output+ to add a new line.
  #
  # This defaults to "\n", and should be String
  attr_reader :newline

  # A lambda or Proc, that takes one argument, of an Integer, and returns
  # the corresponding number of spaces.
  #
  # By default this is:
  #   lambda {|n| ' ' * n}
  attr_reader :genspace

  # The number of spaces to be indented
  attr_reader :indent

  # The PrettyPrint::GroupQueue of groups in stack to be pretty printed
  attr_reader :group_queue

  # Returns the group most recently added to the stack.
  #
  # Contrived example:
  #   out = ""
  #   => ""
  #   q = PrettyPrint.new(out)
  #   => #<PrettyPrint:0x82f85c0 @output="", @maxwidth=79, @newline="\n", @genspace=#<Proc:0x82f8368@/home/vbatts/.rvm/rubies/ruby-head/lib/ruby/2.0.0/prettyprint.rb:82 (lambda)>, @output_width=0, @buffer_width=0, @buffer=[], @group_stack=[#<PrettyPrint::Group:0x82f8138 @depth=0, @breakables=[], @break=false>], @group_queue=#<PrettyPrint::GroupQueue:0x82fb7c0 @queue=[[#<PrettyPrint::Group:0x82f8138 @depth=0, @breakables=[], @break=false>]]>, @indent=0>
  #   q.group {
  #     q.text q.current_group.inspect
  #     q.text q.newline
  #     q.group(q.current_group.depth + 1) {
  #       q.text q.current_group.inspect
  #       q.text q.newline
  #       q.group(q.current_group.depth + 1) {
  #         q.text q.current_group.inspect
  #         q.text q.newline
  #         q.group(q.current_group.depth + 1) {
  #           q.text q.current_group.inspect
  #           q.text q.newline
  #         }
  #       }
  #     }
  #   }
  #   => 284
  #    puts out
  #   #<PrettyPrint::Group:0x8354758 @depth=1, @breakables=[], @break=false>
  #   #<PrettyPrint::Group:0x8354550 @depth=2, @breakables=[], @break=false>
  #   #<PrettyPrint::Group:0x83541cc @depth=3, @breakables=[], @break=false>
  #   #<PrettyPrint::Group:0x8347e54 @depth=4, @breakables=[], @break=false>
  def current_group
    @group_stack.last
  end

  # Breaks the buffer into lines that are shorter than #maxwidth
  def break_outmost_groups
    while @maxwidth < @output_width + @buffer_width
      return unless group = @group_queue.deq
      until group.breakables.empty?
        data = @buffer.shift
        @output_width = data.output(@output, @output_width)
        @buffer_width -= data.width
      end
      while !@buffer.empty? && Text === @buffer.first
        text = @buffer.shift
        @output_width = text.output(@output, @output_width)
        @buffer_width -= text.width
      end
    end
  end

  # This adds +obj+ as a text of +width+ columns in width.
  #
  # If +width+ is not specified, obj.length is used.
  #
  def text(obj, width=obj.length)
    if @buffer.empty?
      @output << obj
      @output_width += width
    else
      text = @buffer.last
      unless Text === text
        text = Text.new
        @buffer << text
      end
      text.add(obj, width)
      @buffer_width += width
      break_outmost_groups
    end
  end

  # This is similar to #breakable except
  # the decision to break or not is determined individually.
  #
  # Two #fill_breakable under a group may cause 4 results:
  # (break,break), (break,non-break), (non-break,break), (non-break,non-break).
  # This is different to #breakable because two #breakable under a group
  # may cause 2 results:
  # (break,break), (non-break,non-break).
  #
  # The text +sep+ is inserted if a line is not broken at this point.
  #
  # If +sep+ is not specified, " " is used.
  #
  # If +width+ is not specified, +sep.length+ is used. You will have to
  # specify this when +sep+ is a multibyte character, for example.
  #
  def fill_breakable(sep=' ', width=sep.length)
    group { breakable sep, width }
  end

  # This says "you can break a line here if necessary", and a +width+\-column
  # text +sep+ is inserted if a line is not broken at the point.
  #
  # If +sep+ is not specified, " " is used.
  #
  # If +width+ is not specified, +sep.length+ is used. You will have to
  # specify this when +sep+ is a multibyte character, for example.
  #
  def breakable(sep=' ', width=sep.length)
    group = @group_stack.last
    if group.break?
      flush
      @output << @newline
      @output << @genspace.call(@indent)
      @output_width = @indent
      @buffer_width = 0
    else
      @buffer << Breakable.new(sep, width, self)
      @buffer_width += width
      break_outmost_groups
    end
  end

  # Groups line break hints added in the block. The line break hints are all
  # to be used or not.
  #
  # If +indent+ is specified, the method call is regarded as nested by
  # nest(indent) { ... }.
  #
  # If +open_obj+ is specified, <tt>text open_obj, open_width</tt> is called
  # before grouping. If +close_obj+ is specified, <tt>text close_obj,
  # close_width</tt> is called after grouping.
  #
  def group(indent=0, open_obj='', close_obj='', open_width=open_obj.length, close_width=close_obj.length)
    text open_obj, open_width
    group_sub {
      nest(indent) {
        yield
      }
    }
    text close_obj, close_width
  end

  # Takes a block and queues a new group that is indented 1 level further.
  def group_sub
    group = Group.new(@group_stack.last.depth + 1)
    @group_stack.push group
    @group_queue.enq group
    begin
      yield
    ensure
      @group_stack.pop
      if group.breakables.empty?
        @group_queue.delete group
      end
    end
  end

  # Increases left margin after newline with +indent+ for line breaks added in
  # the block.
  #
  def nest(indent)
    @indent += indent
    begin
      yield
    ensure
      @indent -= indent
    end
  end

  # outputs buffered data.
  #
  def flush
    @buffer.each {|data|
      @output_width = data.output(@output, @output_width)
    }
    @buffer.clear
    @buffer_width = 0
  end

  # The Text class is the means by which to collect strings from objects.
  #
  # This class is intended for internal use of the PrettyPrint buffers.
  class Text # :nodoc:

    # Creates a new text object.
    #
    # This constructor takes no arguments.
    #
    # The workflow is to append a PrettyPrint::Text object to the buffer, and
    # being able to call the buffer.last() to reference it.
    #
    # As there are objects, use PrettyPrint::Text#add to include the objects
    # and the width to utilized by the String version of this object.
    def initialize
      @objs = []
      @width = 0
    end

    # The total width of the objects included in this Text object.
    attr_reader :width

    # Render the String text of the objects that have been added to this Text object.
    #
    # Output the text to +out+, and increment the width to +output_width+
    def output(out, output_width)
      @objs.each {|obj| out << obj}
      output_width + @width
    end

    # Include +obj+ in the objects to be pretty printed, and increment
    # this Text object's total width by +width+
    def add(obj, width)
      @objs << obj
      @width += width
    end
  end

  # The Breakable class is used for breaking up object information
  #
  # This class is intended for internal use of the PrettyPrint buffers.
  class Breakable # :nodoc:

    # Create a new Breakable object.
    #
    # Arguments:
    # * +sep+ String of the separator
    # * +width+ Integer width of the +sep+
    # * +q+ parent PrettyPrint object, to base from
    def initialize(sep, width, q)
      @obj = sep
      @width = width
      @pp = q
      @indent = q.indent
      @group = q.current_group
      @group.breakables.push self
    end

    # Holds the separator String
    #
    # The +sep+ argument from ::new
    attr_reader :obj

    # The width of +obj+ / +sep+
    attr_reader :width

    # The number of spaces to indent.
    #
    # This is inferred from +q+ within PrettyPrint, passed in ::new
    attr_reader :indent

    # Render the String text of the objects that have been added to this
    # Breakable object.
    #
    # Output the text to +out+, and increment the width to +output_width+
    def output(out, output_width)
      @group.breakables.shift
      if @group.break?
        out << @pp.newline
        out << @pp.genspace.call(@indent)
        @indent
      else
        @pp.group_queue.delete @group if @group.breakables.empty?
        out << @obj
        output_width + @width
      end
    end
  end

  # The Group class is used for making indentation easier.
  #
  # While this class does neither the breaking into newlines nor indentation,
  # it is used in a stack (as well as a queue) within PrettyPrint, to group
  # objects.
  #
  # For information on using groups, see PrettyPrint#group
  #
  # This class is intended for internal use of the PrettyPrint buffers.
  class Group # :nodoc:
    # Create a Group object
    #
    # Arguments:
    # * +depth+ - this group's relation to previous groups
    def initialize(depth)
      @depth = depth
      @breakables = []
      @break = false
    end

    # This group's relation to previous groups
    attr_reader :depth

    # Array to hold the Breakable objects for this Group
    attr_reader :breakables

    # Makes a break for this Group, and returns true
    def break
      @break = true
    end

    # Boolean of whether this Group has made a break
    def break?
      @break
    end

    # Boolean of whether this Group has been queried for being first
    #
    # This is used as a predicate, and ought to be called first.
    def first?
      if defined? @first
        false
      else
        @first = false
        true
      end
    end
  end

  # The GroupQueue class is used for managing the queue of Group to be pretty
  # printed.
  #
  # This queue groups the Group objects, based on their depth.
  #
  # This class is intended for internal use of the PrettyPrint buffers.
  class GroupQueue # :nodoc:
    # Create a GroupQueue object
    #
    # Arguments:
    # * +groups+ - one or more PrettyPrint::Group objects
    def initialize(*groups)
      @queue = []
      groups.each {|g| enq g}
    end

    # Enqueue +group+
    #
    # This does not strictly append the group to the end of the queue,
    # but instead adds it in line, base on the +group.depth+
    def enq(group)
      depth = group.depth
      @queue << [] until depth < @queue.length
      @queue[depth] << group
    end

    # Returns the outer group of the queue
    def deq
      @queue.each {|gs|
        (gs.length-1).downto(0) {|i|
          unless gs[i].breakables.empty?
            group = gs.slice!(i, 1).first
            group.break
            return group
          end
        }
        gs.each {|group| group.break}
        gs.clear
      }
      return nil
    end

    # Remote +group+ from this queue
    def delete(group)
      @queue[group.depth].delete(group)
    end
  end

  # PrettyPrint::SingleLine is used by PrettyPrint.singleline_format
  #
  # It is passed to be similar to a PrettyPrint object itself, by responding to:
  # * #text
  # * #breakable
  # * #nest
  # * #group
  # * #flush
  # * #first?
  #
  # but instead, the output has no line breaks
  #
  class SingleLine
    # Create a PrettyPrint::SingleLine object
    #
    # Arguments:
    # * +output+ - String (or similar) to store rendered text. Needs to respond to '<<'
    # * +maxwidth+ - Argument position expected to be here for compatibility.
    #                This argument is a noop.
    # * +newline+ - Argument position expected to be here for compatibility.
    #               This argument is a noop.
    def initialize(output, maxwidth=nil, newline=nil)
      @output = output
      @first = [true]
    end

    # Add +obj+ to the text to be output.
    #
    # +width+ argument is here for compatibility. It is a noop argument.
    def text(obj, width=nil)
      @output << obj
    end

    # Appends +sep+ to the text to be output. By default +sep+ is ' '
    #
    # +width+ argument is here for compatibility. It is a noop argument.
    def breakable(sep=' ', width=nil)
      @output << sep
    end

    # Takes +indent+ arg, but does nothing with it.
    #
    # Yields to a block.
    def nest(indent) # :nodoc:
      yield
    end

    # Opens a block for grouping objects to be pretty printed.
    #
    # Arguments:
    # * +indent+ - noop argument. Present for compatibility.
    # * +open_obj+ - text appended before the &blok. Default is ''
    # * +close_obj+ - text appended after the &blok. Default is ''
    # * +open_width+ - noop argument. Present for compatibility.
    # * +close_width+ - noop argument. Present for compatibility.
    def group(indent=nil, open_obj='', close_obj='', open_width=nil, close_width=nil)
      @first.push true
      @output << open_obj
      yield
      @output << close_obj
      @first.pop
    end

    # Method present for compatibility, but is a noop
    def flush # :nodoc:
    end

    # This is used as a predicate, and ought to be called first.
    def first?
      result = @first[-1]
      @first[-1] = false
      result
    end
  end
end
PK*J[Z�����share/ruby/net/http/header.rbnu�[���# frozen_string_literal: true
#
# The \HTTPHeader module provides access to \HTTP headers.
#
# The module is included in:
#
# - Net::HTTPGenericRequest (and therefore Net::HTTPRequest).
# - Net::HTTPResponse.
#
# The headers are a hash-like collection of key/value pairs called _fields_.
#
# == Request and Response Fields
#
# Headers may be included in:
#
# - A Net::HTTPRequest object:
#   the object's headers will be sent with the request.
#   Any fields may be defined in the request;
#   see {Setters}[rdoc-ref:Net::HTTPHeader@Setters].
# - A Net::HTTPResponse object:
#   the objects headers are usually those returned from the host.
#   Fields may be retrieved from the object;
#   see {Getters}[rdoc-ref:Net::HTTPHeader@Getters]
#   and {Iterators}[rdoc-ref:Net::HTTPHeader@Iterators].
#
# Exactly which fields should be sent or expected depends on the host;
# see:
#
# - {Request fields}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields].
# - {Response fields}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields].
#
# == About the Examples
#
# :include: doc/net-http/examples.rdoc
#
# == Fields
#
# A header field is a key/value pair.
#
# === Field Keys
#
# A field key may be:
#
# - A string: Key <tt>'Accept'</tt> is treated as if it were
#   <tt>'Accept'.downcase</tt>;  i.e., <tt>'accept'</tt>.
# - A symbol: Key <tt>:Accept</tt> is treated as if it were
#   <tt>:Accept.to_s.downcase</tt>;  i.e., <tt>'accept'</tt>.
#
# Examples:
#
#   req = Net::HTTP::Get.new(uri)
#   req[:accept]  # => "*/*"
#   req['Accept'] # => "*/*"
#   req['ACCEPT'] # => "*/*"
#
#   req['accept'] = 'text/html'
#   req[:accept] = 'text/html'
#   req['ACCEPT'] = 'text/html'
#
# === Field Values
#
# A field value may be returned as an array of strings or as a string:
#
# - These methods return field values as arrays:
#
#   - #get_fields: Returns the array value for the given key,
#     or +nil+ if it does not exist.
#   - #to_hash: Returns a hash of all header fields:
#     each key is a field name; its value is the array value for the field.
#
# - These methods return field values as string;
#   the string value for a field is equivalent to
#   <tt>self[key.downcase.to_s].join(', '))</tt>:
#
#   - #[]: Returns the string value for the given key,
#     or +nil+ if it does not exist.
#   - #fetch: Like #[], but accepts a default value
#     to be returned if the key does not exist.
#
# The field value may be set:
#
# - #[]=: Sets the value for the given key;
#   the given value may be a string, a symbol, an array, or a hash.
# - #add_field: Adds a given value to a value for the given key
#   (not overwriting the existing value).
# - #delete: Deletes the field for the given key.
#
# Example field values:
#
# - \String:
#
#     req['Accept'] = 'text/html' # => "text/html"
#     req['Accept']               # => "text/html"
#     req.get_fields('Accept')    # => ["text/html"]
#
# - \Symbol:
#
#     req['Accept'] = :text    # => :text
#     req['Accept']            # => "text"
#     req.get_fields('Accept') # => ["text"]
#
# - Simple array:
#
#     req[:foo] = %w[bar baz bat]
#     req[:foo]            # => "bar, baz, bat"
#     req.get_fields(:foo) # => ["bar", "baz", "bat"]
#
# - Simple hash:
#
#     req[:foo] = {bar: 0, baz: 1, bat: 2}
#     req[:foo]            # => "bar, 0, baz, 1, bat, 2"
#     req.get_fields(:foo) # => ["bar", "0", "baz", "1", "bat", "2"]
#
# - Nested:
#
#     req[:foo] = [%w[bar baz], {bat: 0, bam: 1}]
#     req[:foo]            # => "bar, baz, bat, 0, bam, 1"
#     req.get_fields(:foo) # => ["bar", "baz", "bat", "0", "bam", "1"]
#
#     req[:foo] = {bar: %w[baz bat], bam: {bah: 0, bad: 1}}
#     req[:foo]            # => "bar, baz, bat, bam, bah, 0, bad, 1"
#     req.get_fields(:foo) # => ["bar", "baz", "bat", "bam", "bah", "0", "bad", "1"]
#
# == Convenience Methods
#
# Various convenience methods retrieve values, set values, query values,
# set form values, or iterate over fields.
#
# === Setters
#
# \Method #[]= can set any field, but does little to validate the new value;
# some of the other setter methods provide some validation:
#
# - #[]=: Sets the string or array value for the given key.
# - #add_field: Creates or adds to the array value for the given key.
# - #basic_auth: Sets the string authorization header for <tt>'Authorization'</tt>.
# - #content_length=: Sets the integer length for field <tt>'Content-Length</tt>.
# - #content_type=: Sets the string value for field <tt>'Content-Type'</tt>.
# - #proxy_basic_auth: Sets the string authorization header for <tt>'Proxy-Authorization'</tt>.
# - #set_range: Sets the value for field <tt>'Range'</tt>.
#
# === Form Setters
#
# - #set_form: Sets an HTML form data set.
# - #set_form_data: Sets header fields and a body from HTML form data.
#
# === Getters
#
# \Method #[] can retrieve the value of any field that exists,
# but always as a string;
# some of the other getter methods return something different
# from the simple string value:
#
# - #[]: Returns the string field value for the given key.
# - #content_length: Returns the integer value of field <tt>'Content-Length'</tt>.
# - #content_range: Returns the Range value of field <tt>'Content-Range'</tt>.
# - #content_type: Returns the string value of field <tt>'Content-Type'</tt>.
# - #fetch: Returns the string field value for the given key.
# - #get_fields: Returns the array field value for the given +key+.
# - #main_type: Returns first part of the string value of field <tt>'Content-Type'</tt>.
# - #sub_type: Returns second part of the string value of field <tt>'Content-Type'</tt>.
# - #range: Returns an array of Range objects of field <tt>'Range'</tt>, or +nil+.
# - #range_length: Returns the integer length of the range given in field <tt>'Content-Range'</tt>.
# - #type_params: Returns the string parameters for <tt>'Content-Type'</tt>.
#
# === Queries
#
# - #chunked?: Returns whether field <tt>'Transfer-Encoding'</tt> is set to <tt>'chunked'</tt>.
# - #connection_close?: Returns whether field <tt>'Connection'</tt> is set to <tt>'close'</tt>.
# - #connection_keep_alive?: Returns whether field <tt>'Connection'</tt> is set to <tt>'keep-alive'</tt>.
# - #key?: Returns whether a given key exists.
#
# === Iterators
#
# - #each_capitalized: Passes each field capitalized-name/value pair to the block.
# - #each_capitalized_name: Passes each capitalized field name to the block.
# - #each_header: Passes each field name/value pair to the block.
# - #each_name: Passes each field name to the block.
# - #each_value: Passes each string field value to the block.
#
module Net::HTTPHeader
  MAX_KEY_LENGTH = 1024
  MAX_FIELD_LENGTH = 65536

  def initialize_http_header(initheader) #:nodoc:
    @header = {}
    return unless initheader
    initheader.each do |key, value|
      warn "net/http: duplicated HTTP header: #{key}", uplevel: 3 if key?(key) and $VERBOSE
      if value.nil?
        warn "net/http: nil HTTP header: #{key}", uplevel: 3 if $VERBOSE
      else
        value = value.strip # raise error for invalid byte sequences
        if key.to_s.bytesize > MAX_KEY_LENGTH
          raise ArgumentError, "too long (#{key.bytesize} bytes) header: #{key[0, 30].inspect}..."
        end
        if value.to_s.bytesize > MAX_FIELD_LENGTH
          raise ArgumentError, "header #{key} has too long field value: #{value.bytesize}"
        end
        if value.count("\r\n") > 0
          raise ArgumentError, "header #{key} has field value #{value.inspect}, this cannot include CR/LF"
        end
        @header[key.downcase.to_s] = [value]
      end
    end
  end

  def size   #:nodoc: obsolete
    @header.size
  end

  alias length size   #:nodoc: obsolete

  # Returns the string field value for the case-insensitive field +key+,
  # or +nil+ if there is no such key;
  # see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Connection'] # => "keep-alive"
  #   res['Nosuch']     # => nil
  #
  # Note that some field values may be retrieved via convenience methods;
  # see {Getters}[rdoc-ref:Net::HTTPHeader@Getters].
  def [](key)
    a = @header[key.downcase.to_s] or return nil
    a.join(', ')
  end

  # Sets the value for the case-insensitive +key+ to +val+,
  # overwriting the previous value if the field exists;
  # see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req['Accept'] # => "*/*"
  #   req['Accept'] = 'text/html'
  #   req['Accept'] # => "text/html"
  #
  # Note that some field values may be set via convenience methods;
  # see {Setters}[rdoc-ref:Net::HTTPHeader@Setters].
  def []=(key, val)
    unless val
      @header.delete key.downcase.to_s
      return val
    end
    set_field(key, val)
  end

  # Adds value +val+ to the value array for field +key+ if the field exists;
  # creates the field with the given +key+ and +val+ if it does not exist.
  # see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req.add_field('Foo', 'bar')
  #   req['Foo']            # => "bar"
  #   req.add_field('Foo', 'baz')
  #   req['Foo']            # => "bar, baz"
  #   req.add_field('Foo', %w[baz bam])
  #   req['Foo']            # => "bar, baz, baz, bam"
  #   req.get_fields('Foo') # => ["bar", "baz", "baz", "bam"]
  #
  def add_field(key, val)
    stringified_downcased_key = key.downcase.to_s
    if @header.key?(stringified_downcased_key)
      append_field_value(@header[stringified_downcased_key], val)
    else
      set_field(key, val)
    end
  end

  private def set_field(key, val)
    case val
    when Enumerable
      ary = []
      append_field_value(ary, val)
      @header[key.downcase.to_s] = ary
    else
      val = val.to_s # for compatibility use to_s instead of to_str
      if val.b.count("\r\n") > 0
        raise ArgumentError, 'header field value cannot include CR/LF'
      end
      @header[key.downcase.to_s] = [val]
    end
  end

  private def append_field_value(ary, val)
    case val
    when Enumerable
      val.each{|x| append_field_value(ary, x)}
    else
      val = val.to_s
      if /[\r\n]/n.match?(val.b)
        raise ArgumentError, 'header field value cannot include CR/LF'
      end
      ary.push val
    end
  end

  # Returns the array field value for the given +key+,
  # or +nil+ if there is no such field;
  # see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res.get_fields('Connection') # => ["keep-alive"]
  #   res.get_fields('Nosuch')     # => nil
  #
  def get_fields(key)
    stringified_downcased_key = key.downcase.to_s
    return nil unless @header[stringified_downcased_key]
    @header[stringified_downcased_key].dup
  end

  # call-seq:
  #   fetch(key, default_val = nil) {|key| ... } -> object
  #   fetch(key, default_val = nil) -> value or default_val
  #
  # With a block, returns the string value for +key+ if it exists;
  # otherwise returns the value of the block;
  # ignores the +default_val+;
  # see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #
  #   # Field exists; block not called.
  #   res.fetch('Connection') do |value|
  #     fail 'Cannot happen'
  #   end # => "keep-alive"
  #
  #   # Field does not exist; block called.
  #   res.fetch('Nosuch') do |value|
  #     value.downcase
  #   end # => "nosuch"
  #
  # With no block, returns the string value for +key+ if it exists;
  # otherwise, returns +default_val+ if it was given;
  # otherwise raises an exception:
  #
  #   res.fetch('Connection', 'Foo') # => "keep-alive"
  #   res.fetch('Nosuch', 'Foo')     # => "Foo"
  #   res.fetch('Nosuch')            # Raises KeyError.
  #
  def fetch(key, *args, &block)   #:yield: +key+
    a = @header.fetch(key.downcase.to_s, *args, &block)
    a.kind_of?(Array) ? a.join(', ') : a
  end

  # Calls the block with each key/value pair:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_header do |key, value|
  #     p [key, value] if key.start_with?('c')
  #   end
  #
  # Output:
  #
  #   ["content-type", "application/json; charset=utf-8"]
  #   ["connection", "keep-alive"]
  #   ["cache-control", "max-age=43200"]
  #   ["cf-cache-status", "HIT"]
  #   ["cf-ray", "771d17e9bc542cf5-ORD"]
  #
  # Returns an enumerator if no block is given.
  #
  # Net::HTTPHeader#each is an alias for Net::HTTPHeader#each_header.
  def each_header   #:yield: +key+, +value+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each do |k,va|
      yield k, va.join(', ')
    end
  end

  alias each each_header

  # Calls the block with each field key:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_key do |key|
  #     p key if key.start_with?('c')
  #   end
  #
  # Output:
  #
  #   "content-type"
  #   "connection"
  #   "cache-control"
  #   "cf-cache-status"
  #   "cf-ray"
  #
  # Returns an enumerator if no block is given.
  #
  # Net::HTTPHeader#each_name is an alias for Net::HTTPHeader#each_key.
  def each_name(&block)   #:yield: +key+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each_key(&block)
  end

  alias each_key each_name

  # Calls the block with each capitalized field name:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_capitalized_name do |key|
  #     p key if key.start_with?('C')
  #   end
  #
  # Output:
  #
  #   "Content-Type"
  #   "Connection"
  #   "Cache-Control"
  #   "Cf-Cache-Status"
  #   "Cf-Ray"
  #
  # The capitalization is system-dependent;
  # see {Case Mapping}[rdoc-ref:case_mapping.rdoc].
  #
  # Returns an enumerator if no block is given.
  def each_capitalized_name  #:yield: +key+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each_key do |k|
      yield capitalize(k)
    end
  end

  # Calls the block with each string field value:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res.each_value do |value|
  #     p value if value.start_with?('c')
  #   end
  #
  # Output:
  #
  #   "chunked"
  #   "cf-q-config;dur=6.0000002122251e-06"
  #   "cloudflare"
  #
  # Returns an enumerator if no block is given.
  def each_value   #:yield: +value+
    block_given? or return enum_for(__method__) { @header.size }
    @header.each_value do |va|
      yield va.join(', ')
    end
  end

  # Removes the header for the given case-insensitive +key+
  # (see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]);
  # returns the deleted value, or +nil+ if no such field exists:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req.delete('Accept') # => ["*/*"]
  #   req.delete('Nosuch') # => nil
  #
  def delete(key)
    @header.delete(key.downcase.to_s)
  end

  # Returns +true+ if the field for the case-insensitive +key+ exists, +false+ otherwise:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req.key?('Accept') # => true
  #   req.key?('Nosuch') # => false
  #
  def key?(key)
    @header.key?(key.downcase.to_s)
  end

  # Returns a hash of the key/value pairs:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req.to_hash
  #   # =>
  #   {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"],
  #    "accept"=>["*/*"],
  #    "user-agent"=>["Ruby"],
  #    "host"=>["jsonplaceholder.typicode.com"]}
  #
  def to_hash
    @header.dup
  end

  # Like #each_header, but the keys are returned in capitalized form.
  #
  # Net::HTTPHeader#canonical_each is an alias for Net::HTTPHeader#each_capitalized.
  def each_capitalized
    block_given? or return enum_for(__method__) { @header.size }
    @header.each do |k,v|
      yield capitalize(k), v.join(', ')
    end
  end

  alias canonical_each each_capitalized

  def capitalize(name)
    name.to_s.split('-'.freeze).map {|s| s.capitalize }.join('-'.freeze)
  end
  private :capitalize

  # Returns an array of Range objects that represent
  # the value of field <tt>'Range'</tt>,
  # or +nil+ if there is no such field;
  # see {Range request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#range-request-header]:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req['Range'] = 'bytes=0-99,200-299,400-499'
  #   req.range # => [0..99, 200..299, 400..499]
  #   req.delete('Range')
  #   req.range # # => nil
  #
  def range
    return nil unless @header['range']

    value = self['Range']
    # byte-range-set = *( "," OWS ) ( byte-range-spec / suffix-byte-range-spec )
    #   *( OWS "," [ OWS ( byte-range-spec / suffix-byte-range-spec ) ] )
    # corrected collected ABNF
    # http://tools.ietf.org/html/draft-ietf-httpbis-p5-range-19#section-5.4.1
    # http://tools.ietf.org/html/draft-ietf-httpbis-p5-range-19#appendix-C
    # http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-19#section-3.2.5
    unless /\Abytes=((?:,[ \t]*)*(?:\d+-\d*|-\d+)(?:[ \t]*,(?:[ \t]*\d+-\d*|-\d+)?)*)\z/ =~ value
      raise Net::HTTPHeaderSyntaxError, "invalid syntax for byte-ranges-specifier: '#{value}'"
    end

    byte_range_set = $1
    result = byte_range_set.split(/,/).map {|spec|
      m = /(\d+)?\s*-\s*(\d+)?/i.match(spec) or
              raise Net::HTTPHeaderSyntaxError, "invalid byte-range-spec: '#{spec}'"
      d1 = m[1].to_i
      d2 = m[2].to_i
      if m[1] and m[2]
        if d1 > d2
          raise Net::HTTPHeaderSyntaxError, "last-byte-pos MUST greater than or equal to first-byte-pos but '#{spec}'"
        end
        d1..d2
      elsif m[1]
        d1..-1
      elsif m[2]
        -d2..-1
      else
        raise Net::HTTPHeaderSyntaxError, 'range is not specified'
      end
    }
    # if result.empty?
    # byte-range-set must include at least one byte-range-spec or suffix-byte-range-spec
    # but above regexp already denies it.
    if result.size == 1 && result[0].begin == 0 && result[0].end == -1
      raise Net::HTTPHeaderSyntaxError, 'only one suffix-byte-range-spec with zero suffix-length'
    end
    result
  end

  # call-seq:
  #   set_range(length) -> length
  #   set_range(offset, length) -> range
  #   set_range(begin..length) -> range
  #
  # Sets the value for field <tt>'Range'</tt>;
  # see {Range request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#range-request-header]:
  #
  # With argument +length+:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req.set_range(100)      # => 100
  #   req['Range']            # => "bytes=0-99"
  #
  # With arguments +offset+ and +length+:
  #
  #   req.set_range(100, 100) # => 100...200
  #   req['Range']            # => "bytes=100-199"
  #
  # With argument +range+:
  #
  #   req.set_range(100..199) # => 100..199
  #   req['Range']            # => "bytes=100-199"
  #
  # Net::HTTPHeader#range= is an alias for Net::HTTPHeader#set_range.
  def set_range(r, e = nil)
    unless r
      @header.delete 'range'
      return r
    end
    r = (r...r+e) if e
    case r
    when Numeric
      n = r.to_i
      rangestr = (n > 0 ? "0-#{n-1}" : "-#{-n}")
    when Range
      first = r.first
      last = r.end
      last -= 1 if r.exclude_end?
      if last == -1
        rangestr = (first > 0 ? "#{first}-" : "-#{-first}")
      else
        raise Net::HTTPHeaderSyntaxError, 'range.first is negative' if first < 0
        raise Net::HTTPHeaderSyntaxError, 'range.last is negative' if last < 0
        raise Net::HTTPHeaderSyntaxError, 'must be .first < .last' if first > last
        rangestr = "#{first}-#{last}"
      end
    else
      raise TypeError, 'Range/Integer is required'
    end
    @header['range'] = ["bytes=#{rangestr}"]
    r
  end

  alias range= set_range

  # Returns the value of field <tt>'Content-Length'</tt> as an integer,
  # or +nil+ if there is no such field;
  # see {Content-Length request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-length-request-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/nosuch/1')
  #   res.content_length # => 2
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res.content_length # => nil
  #
  def content_length
    return nil unless key?('Content-Length')
    len = self['Content-Length'].slice(/\d+/) or
        raise Net::HTTPHeaderSyntaxError, 'wrong Content-Length format'
    len.to_i
  end

  # Sets the value of field <tt>'Content-Length'</tt> to the given numeric;
  # see {Content-Length response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-length-response-header]:
  #
  #   _uri = uri.dup
  #   hostname = _uri.hostname           # => "jsonplaceholder.typicode.com"
  #   _uri.path = '/posts'               # => "/posts"
  #   req = Net::HTTP::Post.new(_uri)    # => #<Net::HTTP::Post POST>
  #   req.body = '{"title": "foo","body": "bar","userId": 1}'
  #   req.content_length = req.body.size # => 42
  #   req.content_type = 'application/json'
  #   res = Net::HTTP.start(hostname) do |http|
  #     http.request(req)
  #   end # => #<Net::HTTPCreated 201 Created readbody=true>
  #
  def content_length=(len)
    unless len
      @header.delete 'content-length'
      return nil
    end
    @header['content-length'] = [len.to_i.to_s]
  end

  # Returns +true+ if field <tt>'Transfer-Encoding'</tt>
  # exists and has value <tt>'chunked'</tt>,
  # +false+ otherwise;
  # see {Transfer-Encoding response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#transfer-encoding-response-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Transfer-Encoding'] # => "chunked"
  #   res.chunked?             # => true
  #
  def chunked?
    return false unless @header['transfer-encoding']
    field = self['Transfer-Encoding']
    (/(?:\A|[^\-\w])chunked(?![\-\w])/i =~ field) ? true : false
  end

  # Returns a Range object representing the value of field
  # <tt>'Content-Range'</tt>, or +nil+ if no such field exists;
  # see {Content-Range response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range-response-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Content-Range'] # => nil
  #   res['Content-Range'] = 'bytes 0-499/1000'
  #   res['Content-Range'] # => "bytes 0-499/1000"
  #   res.content_range    # => 0..499
  #
  def content_range
    return nil unless @header['content-range']
    m = %r<\A\s*(\w+)\s+(\d+)-(\d+)/(\d+|\*)>.match(self['Content-Range']) or
        raise Net::HTTPHeaderSyntaxError, 'wrong Content-Range format'
    return unless m[1] == 'bytes'
    m[2].to_i .. m[3].to_i
  end

  # Returns the integer representing length of the value of field
  # <tt>'Content-Range'</tt>, or +nil+ if no such field exists;
  # see {Content-Range response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range-response-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['Content-Range'] # => nil
  #   res['Content-Range'] = 'bytes 0-499/1000'
  #   res.range_length     # => 500
  #
  def range_length
    r = content_range() or return nil
    r.end - r.begin + 1
  end

  # Returns the {media type}[https://en.wikipedia.org/wiki/Media_type]
  # from the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.content_type    # => "application/json"
  #
  def content_type
    main = main_type()
    return nil unless main

    sub = sub_type()
    if sub
      "#{main}/#{sub}"
    else
      main
    end
  end

  # Returns the leading ('type') part of the
  # {media type}[https://en.wikipedia.org/wiki/Media_type]
  # from the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.main_type       # => "application"
  #
  def main_type
    return nil unless @header['content-type']
    self['Content-Type'].split(';').first.to_s.split('/')[0].to_s.strip
  end

  # Returns the trailing ('subtype') part of the
  # {media type}[https://en.wikipedia.org/wiki/Media_type]
  # from the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.sub_type        # => "json"
  #
  def sub_type
    return nil unless @header['content-type']
    _, sub = *self['Content-Type'].split(';').first.to_s.split('/')
    return nil unless sub
    sub.strip
  end

  # Returns the trailing ('parameters') part of the value of field <tt>'Content-Type'</tt>,
  # or +nil+ if no such field exists;
  # see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
  #
  #   res = Net::HTTP.get_response(hostname, '/todos/1')
  #   res['content-type'] # => "application/json; charset=utf-8"
  #   res.type_params     # => {"charset"=>"utf-8"}
  #
  def type_params
    result = {}
    list = self['Content-Type'].to_s.split(';')
    list.shift
    list.each do |param|
      k, v = *param.split('=', 2)
      result[k.strip] = v.strip
    end
    result
  end

  # Sets the value of field <tt>'Content-Type'</tt>;
  # returns the new value;
  # see {Content-Type request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-request-header]:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req.set_content_type('application/json') # => ["application/json"]
  #
  # Net::HTTPHeader#content_type= is an alias for Net::HTTPHeader#set_content_type.
  def set_content_type(type, params = {})
    @header['content-type'] = [type + params.map{|k,v|"; #{k}=#{v}"}.join('')]
  end

  alias content_type= set_content_type

  # Sets the request body to a URL-encoded string derived from argument +params+,
  # and sets request header field <tt>'Content-Type'</tt>
  # to <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The resulting request is suitable for HTTP request +POST+ or +PUT+.
  #
  # Argument +params+ must be suitable for use as argument +enum+ to
  # {URI.encode_www_form}[rdoc-ref:URI.encode_www_form].
  #
  # With only argument +params+ given,
  # sets the body to a URL-encoded string with the default separator <tt>'&'</tt>:
  #
  #   req = Net::HTTP::Post.new('example.com')
  #
  #   req.set_form_data(q: 'ruby', lang: 'en')
  #   req.body            # => "q=ruby&lang=en"
  #   req['Content-Type'] # => "application/x-www-form-urlencoded"
  #
  #   req.set_form_data([['q', 'ruby'], ['lang', 'en']])
  #   req.body            # => "q=ruby&lang=en"
  #
  #   req.set_form_data(q: ['ruby', 'perl'], lang: 'en')
  #   req.body            # => "q=ruby&q=perl&lang=en"
  #
  #   req.set_form_data([['q', 'ruby'], ['q', 'perl'], ['lang', 'en']])
  #   req.body            # => "q=ruby&q=perl&lang=en"
  #
  # With string argument +sep+ also given,
  # uses that string as the separator:
  #
  #   req.set_form_data({q: 'ruby', lang: 'en'}, '|')
  #   req.body # => "q=ruby|lang=en"
  #
  # Net::HTTPHeader#form_data= is an alias for Net::HTTPHeader#set_form_data.
  def set_form_data(params, sep = '&')
    query = URI.encode_www_form(params)
    query.gsub!(/&/, sep) if sep != '&'
    self.body = query
    self.content_type = 'application/x-www-form-urlencoded'
  end

  alias form_data= set_form_data

  # Stores form data to be used in a +POST+ or +PUT+ request.
  #
  # The form data given in +params+ consists of zero or more fields;
  # each field is:
  #
  # - A scalar value.
  # - A name/value pair.
  # - An IO stream opened for reading.
  #
  # Argument +params+ should be an
  # {Enumerable}[rdoc-ref:Enumerable@Enumerable+in+Ruby+Classes]
  # (method <tt>params.map</tt> will be called),
  # and is often an array or hash.
  #
  # First, we set up a request:
  #
  #   _uri = uri.dup
  #   _uri.path ='/posts'
  #   req = Net::HTTP::Post.new(_uri)
  #
  # <b>Argument +params+ As an Array</b>
  #
  # When +params+ is an array,
  # each of its elements is a subarray that defines a field;
  # the subarray may contain:
  #
  # - One string:
  #
  #     req.set_form([['foo'], ['bar'], ['baz']])
  #
  # - Two strings:
  #
  #     req.set_form([%w[foo 0], %w[bar 1], %w[baz 2]])
  #
  # - When argument +enctype+ (see below) is given as
  #   <tt>'multipart/form-data'</tt>:
  #
  #   - A string name and an IO stream opened for reading:
  #
  #       require 'stringio'
  #       req.set_form([['file', StringIO.new('Ruby is cool.')]])
  #
  #   - A string name, an IO stream opened for reading,
  #     and an options hash, which may contain these entries:
  #
  #     - +:filename+: The name of the file to use.
  #     - +:content_type+: The content type of the uploaded file.
  #
  #     Example:
  #
  #       req.set_form([['file', file, {filename: "other-filename.foo"}]]
  #
  # The various forms may be mixed:
  #
  #   req.set_form(['foo', %w[bar 1], ['file', file]])
  #
  # <b>Argument +params+ As a Hash</b>
  #
  # When +params+ is a hash,
  # each of its entries is a name/value pair that defines a field:
  #
  # - The name is a string.
  # - The value may be:
  #
  #   - +nil+.
  #   - Another string.
  #   - An IO stream opened for reading
  #     (only when argument +enctype+ -- see below -- is given as
  #     <tt>'multipart/form-data'</tt>).
  #
  # Examples:
  #
  #   # Nil-valued fields.
  #   req.set_form({'foo' => nil, 'bar' => nil, 'baz' => nil})
  #
  #   # String-valued fields.
  #   req.set_form({'foo' => 0, 'bar' => 1, 'baz' => 2})
  #
  #   # IO-valued field.
  #   require 'stringio'
  #   req.set_form({'file' => StringIO.new('Ruby is cool.')})
  #
  #   # Mixture of fields.
  #   req.set_form({'foo' => nil, 'bar' => 1, 'file' => file})
  #
  # Optional argument +enctype+ specifies the value to be given
  # to field <tt>'Content-Type'</tt>, and must be one of:
  #
  # - <tt>'application/x-www-form-urlencoded'</tt> (the default).
  # - <tt>'multipart/form-data'</tt>;
  #   see {RFC 7578}[https://www.rfc-editor.org/rfc/rfc7578].
  #
  # Optional argument +formopt+ is a hash of options
  # (applicable only when argument +enctype+
  # is <tt>'multipart/form-data'</tt>)
  # that may include the following entries:
  #
  # - +:boundary+: The value is the boundary string for the multipart message.
  #   If not given, the boundary is a random string.
  #   See {Boundary}[https://www.rfc-editor.org/rfc/rfc7578#section-4.1].
  # - +:charset+: Value is the character set for the form submission.
  #   Field names and values of non-file fields should be encoded with this charset.
  #
  def set_form(params, enctype='application/x-www-form-urlencoded', formopt={})
    @body_data = params
    @body = nil
    @body_stream = nil
    @form_option = formopt
    case enctype
    when /\Aapplication\/x-www-form-urlencoded\z/i,
      /\Amultipart\/form-data\z/i
      self.content_type = enctype
    else
      raise ArgumentError, "invalid enctype: #{enctype}"
    end
  end

  # Sets header <tt>'Authorization'</tt> using the given
  # +account+ and +password+ strings:
  #
  #   req.basic_auth('my_account', 'my_password')
  #   req['Authorization']
  #   # => "Basic bXlfYWNjb3VudDpteV9wYXNzd29yZA=="
  #
  def basic_auth(account, password)
    @header['authorization'] = [basic_encode(account, password)]
  end

  # Sets header <tt>'Proxy-Authorization'</tt> using the given
  # +account+ and +password+ strings:
  #
  #   req.proxy_basic_auth('my_account', 'my_password')
  #   req['Proxy-Authorization']
  #   # => "Basic bXlfYWNjb3VudDpteV9wYXNzd29yZA=="
  #
  def proxy_basic_auth(account, password)
    @header['proxy-authorization'] = [basic_encode(account, password)]
  end

  def basic_encode(account, password)
    'Basic ' + ["#{account}:#{password}"].pack('m0')
  end
  private :basic_encode

# Returns whether the HTTP session is to be closed.
  def connection_close?
    token = /(?:\A|,)\s*close\s*(?:\z|,)/i
    @header['connection']&.grep(token) {return true}
    @header['proxy-connection']&.grep(token) {return true}
    false
  end

# Returns whether the HTTP session is to be kept alive.
  def connection_keep_alive?
    token = /(?:\A|,)\s*keep-alive\s*(?:\z|,)/i
    @header['connection']&.grep(token) {return true}
    @header['proxy-connection']&.grep(token) {return true}
    false
  end

end
PK*J[Io�Dp0p0&share/ruby/net/http/generic_request.rbnu�[���# frozen_string_literal: true
#
# \HTTPGenericRequest is the parent of the Net::HTTPRequest class.
#
# Do not use this directly; instead, use a subclass of Net::HTTPRequest.
#
# == About the Examples
#
# :include: doc/net-http/examples.rdoc
#
class Net::HTTPGenericRequest

  include Net::HTTPHeader

  def initialize(m, reqbody, resbody, uri_or_path, initheader = nil) # :nodoc:
    @method = m
    @request_has_body = reqbody
    @response_has_body = resbody

    if URI === uri_or_path then
      raise ArgumentError, "not an HTTP URI" unless URI::HTTP === uri_or_path
      hostname = uri_or_path.hostname
      raise ArgumentError, "no host component for URI" unless (hostname && hostname.length > 0)
      @uri = uri_or_path.dup
      host = @uri.hostname.dup
      host << ":" << @uri.port.to_s if @uri.port != @uri.default_port
      @path = uri_or_path.request_uri
      raise ArgumentError, "no HTTP request path given" unless @path
    else
      @uri = nil
      host = nil
      raise ArgumentError, "no HTTP request path given" unless uri_or_path
      raise ArgumentError, "HTTP request path is empty" if uri_or_path.empty?
      @path = uri_or_path.dup
    end

    @decode_content = false

    if Net::HTTP::HAVE_ZLIB then
      if !initheader ||
         !initheader.keys.any? { |k|
           %w[accept-encoding range].include? k.downcase
         } then
        @decode_content = true if @response_has_body
        initheader = initheader ? initheader.dup : {}
        initheader["accept-encoding"] =
          "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
      end
    end

    initialize_http_header initheader
    self['Accept'] ||= '*/*'
    self['User-Agent'] ||= 'Ruby'
    self['Host'] ||= host if host
    @body = nil
    @body_stream = nil
    @body_data = nil
  end

  # Returns the string method name for the request:
  #
  #   Net::HTTP::Get.new(uri).method  # => "GET"
  #   Net::HTTP::Post.new(uri).method # => "POST"
  #
  attr_reader :method

  # Returns the string path for the request:
  #
  #   Net::HTTP::Get.new(uri).path # => "/"
  #   Net::HTTP::Post.new('example.com').path # => "example.com"
  #
  attr_reader :path

  # Returns the URI object for the request, or +nil+ if none:
  #
  #   Net::HTTP::Get.new(uri).uri
  #   # => #<URI::HTTPS https://jsonplaceholder.typicode.com/>
  #   Net::HTTP::Get.new('example.com').uri # => nil
  #
  attr_reader :uri

  # Returns +false+ if the request's header <tt>'Accept-Encoding'</tt>
  # has been set manually or deleted
  # (indicating that the user intends to handle encoding in the response),
  # +true+ otherwise:
  #
  #   req = Net::HTTP::Get.new(uri) # => #<Net::HTTP::Get GET>
  #   req['Accept-Encoding']        # => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
  #   req.decode_content            # => true
  #   req['Accept-Encoding'] = 'foo'
  #   req.decode_content            # => false
  #   req.delete('Accept-Encoding')
  #   req.decode_content            # => false
  #
  attr_reader :decode_content

  # Returns a string representation of the request:
  #
  #   Net::HTTP::Post.new(uri).inspect # => "#<Net::HTTP::Post POST>"
  #
  def inspect
    "\#<#{self.class} #{@method}>"
  end

  ##
  # Don't automatically decode response content-encoding if the user indicates
  # they want to handle it.

  def []=(key, val) # :nodoc:
    @decode_content = false if key.downcase == 'accept-encoding'

    super key, val
  end

  # Returns whether the request may have a body:
  #
  #   Net::HTTP::Post.new(uri).request_body_permitted? # => true
  #   Net::HTTP::Get.new(uri).request_body_permitted?  # => false
  #
  def request_body_permitted?
    @request_has_body
  end

  # Returns whether the response may have a body:
  #
  #   Net::HTTP::Post.new(uri).response_body_permitted? # => true
  #   Net::HTTP::Head.new(uri).response_body_permitted? # => false
  #
  def response_body_permitted?
    @response_has_body
  end

  def body_exist? # :nodoc:
    warn "Net::HTTPRequest#body_exist? is obsolete; use response_body_permitted?", uplevel: 1 if $VERBOSE
    response_body_permitted?
  end

  # Returns the string body for the request, or +nil+ if there is none:
  #
  #   req = Net::HTTP::Post.new(uri)
  #   req.body # => nil
  #   req.body = '{"title": "foo","body": "bar","userId": 1}'
  #   req.body # => "{\"title\": \"foo\",\"body\": \"bar\",\"userId\": 1}"
  #
  attr_reader :body

  # Sets the body for the request:
  #
  #   req = Net::HTTP::Post.new(uri)
  #   req.body # => nil
  #   req.body = '{"title": "foo","body": "bar","userId": 1}'
  #   req.body # => "{\"title\": \"foo\",\"body\": \"bar\",\"userId\": 1}"
  #
  def body=(str)
    @body = str
    @body_stream = nil
    @body_data = nil
    str
  end

  # Returns the body stream object for the request, or +nil+ if there is none:
  #
  #   req = Net::HTTP::Post.new(uri)          # => #<Net::HTTP::Post POST>
  #   req.body_stream                         # => nil
  #   require 'stringio'
  #   req.body_stream = StringIO.new('xyzzy') # => #<StringIO:0x0000027d1e5affa8>
  #   req.body_stream                         # => #<StringIO:0x0000027d1e5affa8>
  #
  attr_reader :body_stream

  # Sets the body stream for the request:
  #
  #   req = Net::HTTP::Post.new(uri)          # => #<Net::HTTP::Post POST>
  #   req.body_stream                         # => nil
  #   require 'stringio'
  #   req.body_stream = StringIO.new('xyzzy') # => #<StringIO:0x0000027d1e5affa8>
  #   req.body_stream                         # => #<StringIO:0x0000027d1e5affa8>
  #
  def body_stream=(input)
    @body = nil
    @body_stream = input
    @body_data = nil
    input
  end

  def set_body_internal(str)   #:nodoc: internal use only
    raise ArgumentError, "both of body argument and HTTPRequest#body set" if str and (@body or @body_stream)
    self.body = str if str
    if @body.nil? && @body_stream.nil? && @body_data.nil? && request_body_permitted?
      self.body = ''
    end
  end

  #
  # write
  #

  def exec(sock, ver, path)   #:nodoc: internal use only
    if @body
      send_request_with_body sock, ver, path, @body
    elsif @body_stream
      send_request_with_body_stream sock, ver, path, @body_stream
    elsif @body_data
      send_request_with_body_data sock, ver, path, @body_data
    else
      write_header sock, ver, path
    end
  end

  def update_uri(addr, port, ssl) # :nodoc: internal use only
    # reflect the connection and @path to @uri
    return unless @uri

    if ssl
      scheme = 'https'
      klass = URI::HTTPS
    else
      scheme = 'http'
      klass = URI::HTTP
    end

    if host = self['host']
      host.sub!(/:.*/m, '')
    elsif host = @uri.host
    else
     host = addr
    end
    # convert the class of the URI
    if @uri.is_a?(klass)
      @uri.host = host
      @uri.port = port
    else
      @uri = klass.new(
        scheme, @uri.userinfo,
        host, port, nil,
        @uri.path, nil, @uri.query, nil)
    end
  end

  private

  class Chunker #:nodoc:
    def initialize(sock)
      @sock = sock
      @prev = nil
    end

    def write(buf)
      # avoid memcpy() of buf, buf can huge and eat memory bandwidth
      rv = buf.bytesize
      @sock.write("#{rv.to_s(16)}\r\n", buf, "\r\n")
      rv
    end

    def finish
      @sock.write("0\r\n\r\n")
    end
  end

  def send_request_with_body(sock, ver, path, body)
    self.content_length = body.bytesize
    delete 'Transfer-Encoding'
    supply_default_content_type
    write_header sock, ver, path
    wait_for_continue sock, ver if sock.continue_timeout
    sock.write body
  end

  def send_request_with_body_stream(sock, ver, path, f)
    unless content_length() or chunked?
      raise ArgumentError,
          "Content-Length not given and Transfer-Encoding is not `chunked'"
    end
    supply_default_content_type
    write_header sock, ver, path
    wait_for_continue sock, ver if sock.continue_timeout
    if chunked?
      chunker = Chunker.new(sock)
      IO.copy_stream(f, chunker)
      chunker.finish
    else
      IO.copy_stream(f, sock)
    end
  end

  def send_request_with_body_data(sock, ver, path, params)
    if /\Amultipart\/form-data\z/i !~ self.content_type
      self.content_type = 'application/x-www-form-urlencoded'
      return send_request_with_body(sock, ver, path, URI.encode_www_form(params))
    end

    opt = @form_option.dup
    require 'securerandom' unless defined?(SecureRandom)
    opt[:boundary] ||= SecureRandom.urlsafe_base64(40)
    self.set_content_type(self.content_type, boundary: opt[:boundary])
    if chunked?
      write_header sock, ver, path
      encode_multipart_form_data(sock, params, opt)
    else
      require 'tempfile'
      file = Tempfile.new('multipart')
      file.binmode
      encode_multipart_form_data(file, params, opt)
      file.rewind
      self.content_length = file.size
      write_header sock, ver, path
      IO.copy_stream(file, sock)
      file.close(true)
    end
  end

  def encode_multipart_form_data(out, params, opt)
    charset = opt[:charset]
    boundary = opt[:boundary]
    require 'securerandom' unless defined?(SecureRandom)
    boundary ||= SecureRandom.urlsafe_base64(40)
    chunked_p = chunked?

    buf = +''
    params.each do |key, value, h={}|
      key = quote_string(key, charset)
      filename =
        h.key?(:filename) ? h[:filename] :
        value.respond_to?(:to_path) ? File.basename(value.to_path) :
        nil

      buf << "--#{boundary}\r\n"
      if filename
        filename = quote_string(filename, charset)
        type = h[:content_type] || 'application/octet-stream'
        buf << "Content-Disposition: form-data; " \
          "name=\"#{key}\"; filename=\"#{filename}\"\r\n" \
          "Content-Type: #{type}\r\n\r\n"
        if !out.respond_to?(:write) || !value.respond_to?(:read)
          # if +out+ is not an IO or +value+ is not an IO
          buf << (value.respond_to?(:read) ? value.read : value)
        elsif value.respond_to?(:size) && chunked_p
          # if +out+ is an IO and +value+ is a File, use IO.copy_stream
          flush_buffer(out, buf, chunked_p)
          out << "%x\r\n" % value.size if chunked_p
          IO.copy_stream(value, out)
          out << "\r\n" if chunked_p
        else
          # +out+ is an IO, and +value+ is not a File but an IO
          flush_buffer(out, buf, chunked_p)
          1 while flush_buffer(out, value.read(4096), chunked_p)
        end
      else
        # non-file field:
        #   HTML5 says, "The parts of the generated multipart/form-data
        #   resource that correspond to non-file fields must not have a
        #   Content-Type header specified."
        buf << "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
        buf << (value.respond_to?(:read) ? value.read : value)
      end
      buf << "\r\n"
    end
    buf << "--#{boundary}--\r\n"
    flush_buffer(out, buf, chunked_p)
    out << "0\r\n\r\n" if chunked_p
  end

  def quote_string(str, charset)
    str = str.encode(charset, fallback:->(c){'&#%d;'%c.encode("UTF-8").ord}) if charset
    str.gsub(/[\\"]/, '\\\\\&')
  end

  def flush_buffer(out, buf, chunked_p)
    return unless buf
    out << "%x\r\n"%buf.bytesize if chunked_p
    out << buf
    out << "\r\n" if chunked_p
    buf.clear
  end

  def supply_default_content_type
    return if content_type()
    warn 'net/http: Content-Type did not set; using application/x-www-form-urlencoded', uplevel: 1 if $VERBOSE
    set_content_type 'application/x-www-form-urlencoded'
  end

  ##
  # Waits up to the continue timeout for a response from the server provided
  # we're speaking HTTP 1.1 and are expecting a 100-continue response.

  def wait_for_continue(sock, ver)
    if ver >= '1.1' and @header['expect'] and
        @header['expect'].include?('100-continue')
      if sock.io.to_io.wait_readable(sock.continue_timeout)
        res = Net::HTTPResponse.read_new(sock)
        unless res.kind_of?(Net::HTTPContinue)
          res.decode_content = @decode_content
          throw :response, res
        end
      end
    end
  end

  def write_header(sock, ver, path)
    reqline = "#{@method} #{path} HTTP/#{ver}"
    if /[\r\n]/ =~ reqline
      raise ArgumentError, "A Request-Line must not contain CR or LF"
    end
    buf = +''
    buf << reqline << "\r\n"
    each_capitalized do |k,v|
      buf << "#{k}: #{v}\r\n"
    end
    buf << "\r\n"
    sock.write buf
  end

end

PK*J[���f{L{Lshare/ruby/net/http/response.rbnu�[���# frozen_string_literal: true

# This class is the base class for \Net::HTTP response classes.
#
# == About the Examples
#
# :include: doc/net-http/examples.rdoc
#
# == Returned Responses
#
# \Method Net::HTTP.get_response returns
# an instance of one of the subclasses of \Net::HTTPResponse:
#
#   Net::HTTP.get_response(uri)
#   # => #<Net::HTTPOK 200 OK readbody=true>
#   Net::HTTP.get_response(hostname, '/nosuch')
#   # => #<Net::HTTPNotFound 404 Not Found readbody=true>
#
# As does method Net::HTTP#request:
#
#   req = Net::HTTP::Get.new(uri)
#   Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end # => #<Net::HTTPOK 200 OK readbody=true>
#
# \Class \Net::HTTPResponse includes module Net::HTTPHeader,
# which provides access to response header values via (among others):
#
# - \Hash-like method <tt>[]</tt>.
# - Specific reader methods, such as +content_type+.
#
# Examples:
#
#   res = Net::HTTP.get_response(uri) # => #<Net::HTTPOK 200 OK readbody=true>
#   res['Content-Type']               # => "text/html; charset=UTF-8"
#   res.content_type                  # => "text/html"
#
# == Response Subclasses
#
# \Class \Net::HTTPResponse has a subclass for each
# {HTTP status code}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes].
# You can look up the response class for a given code:
#
#   Net::HTTPResponse::CODE_TO_OBJ['200'] # => Net::HTTPOK
#   Net::HTTPResponse::CODE_TO_OBJ['400'] # => Net::HTTPBadRequest
#   Net::HTTPResponse::CODE_TO_OBJ['404'] # => Net::HTTPNotFound
#
# And you can retrieve the status code for a response object:
#
#   Net::HTTP.get_response(uri).code                 # => "200"
#   Net::HTTP.get_response(hostname, '/nosuch').code # => "404"
#
# The response subclasses (indentation shows class hierarchy):
#
# - Net::HTTPUnknownResponse (for unhandled \HTTP extensions).
#
# - Net::HTTPInformation:
#
#   - Net::HTTPContinue (100)
#   - Net::HTTPSwitchProtocol (101)
#   - Net::HTTPProcessing (102)
#   - Net::HTTPEarlyHints (103)
#
# - Net::HTTPSuccess:
#
#   - Net::HTTPOK (200)
#   - Net::HTTPCreated (201)
#   - Net::HTTPAccepted (202)
#   - Net::HTTPNonAuthoritativeInformation (203)
#   - Net::HTTPNoContent (204)
#   - Net::HTTPResetContent (205)
#   - Net::HTTPPartialContent (206)
#   - Net::HTTPMultiStatus (207)
#   - Net::HTTPAlreadyReported (208)
#   - Net::HTTPIMUsed (226)
#
# - Net::HTTPRedirection:
#
#   - Net::HTTPMultipleChoices (300)
#   - Net::HTTPMovedPermanently (301)
#   - Net::HTTPFound (302)
#   - Net::HTTPSeeOther (303)
#   - Net::HTTPNotModified (304)
#   - Net::HTTPUseProxy (305)
#   - Net::HTTPTemporaryRedirect (307)
#   - Net::HTTPPermanentRedirect (308)
#
# - Net::HTTPClientError:
#
#   - Net::HTTPBadRequest (400)
#   - Net::HTTPUnauthorized (401)
#   - Net::HTTPPaymentRequired (402)
#   - Net::HTTPForbidden (403)
#   - Net::HTTPNotFound (404)
#   - Net::HTTPMethodNotAllowed (405)
#   - Net::HTTPNotAcceptable (406)
#   - Net::HTTPProxyAuthenticationRequired (407)
#   - Net::HTTPRequestTimeOut (408)
#   - Net::HTTPConflict (409)
#   - Net::HTTPGone (410)
#   - Net::HTTPLengthRequired (411)
#   - Net::HTTPPreconditionFailed (412)
#   - Net::HTTPRequestEntityTooLarge (413)
#   - Net::HTTPRequestURITooLong (414)
#   - Net::HTTPUnsupportedMediaType (415)
#   - Net::HTTPRequestedRangeNotSatisfiable (416)
#   - Net::HTTPExpectationFailed (417)
#   - Net::HTTPMisdirectedRequest (421)
#   - Net::HTTPUnprocessableEntity (422)
#   - Net::HTTPLocked (423)
#   - Net::HTTPFailedDependency (424)
#   - Net::HTTPUpgradeRequired (426)
#   - Net::HTTPPreconditionRequired (428)
#   - Net::HTTPTooManyRequests (429)
#   - Net::HTTPRequestHeaderFieldsTooLarge (431)
#   - Net::HTTPUnavailableForLegalReasons (451)
#
# - Net::HTTPServerError:
#
#   - Net::HTTPInternalServerError (500)
#   - Net::HTTPNotImplemented (501)
#   - Net::HTTPBadGateway (502)
#   - Net::HTTPServiceUnavailable (503)
#   - Net::HTTPGatewayTimeOut (504)
#   - Net::HTTPVersionNotSupported (505)
#   - Net::HTTPVariantAlsoNegotiates (506)
#   - Net::HTTPInsufficientStorage (507)
#   - Net::HTTPLoopDetected (508)
#   - Net::HTTPNotExtended (510)
#   - Net::HTTPNetworkAuthenticationRequired (511)
#
# There is also the Net::HTTPBadResponse exception which is raised when
# there is a protocol error.
#
class Net::HTTPResponse
  class << self
    # true if the response has a body.
    def body_permitted?
      self::HAS_BODY
    end

    def exception_type   # :nodoc: internal use only
      self::EXCEPTION_TYPE
    end

    def read_new(sock)   #:nodoc: internal use only
      httpv, code, msg = read_status_line(sock)
      res = response_class(code).new(httpv, code, msg)
      each_response_header(sock) do |k,v|
        res.add_field k, v
      end
      res
    end

    private

    def read_status_line(sock)
      str = sock.readline
      m = /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)(?:\s+(.*))?\z/in.match(str) or
        raise Net::HTTPBadResponse, "wrong status line: #{str.dump}"
      m.captures
    end

    def response_class(code)
      CODE_TO_OBJ[code] or
      CODE_CLASS_TO_OBJ[code[0,1]] or
      Net::HTTPUnknownResponse
    end

    def each_response_header(sock)
      key = value = nil
      while true
        line = sock.readuntil("\n", true).sub(/\s+\z/, '')
        break if line.empty?
        if line[0] == ?\s or line[0] == ?\t and value
          value << ' ' unless value.empty?
          value << line.strip
        else
          yield key, value if key
          key, value = line.strip.split(/\s*:\s*/, 2)
          raise Net::HTTPBadResponse, 'wrong header line format' if value.nil?
        end
      end
      yield key, value if key
    end
  end

  # next is to fix bug in RDoc, where the private inside class << self
  # spills out.
  public

  include Net::HTTPHeader

  def initialize(httpv, code, msg)   #:nodoc: internal use only
    @http_version = httpv
    @code         = code
    @message      = msg
    initialize_http_header nil
    @body = nil
    @read = false
    @uri  = nil
    @decode_content = false
    @body_encoding = false
    @ignore_eof = true
  end

  # The HTTP version supported by the server.
  attr_reader :http_version

  # The HTTP result code string. For example, '302'.  You can also
  # determine the response type by examining which response subclass
  # the response object is an instance of.
  attr_reader :code

  # The HTTP result message sent by the server. For example, 'Not Found'.
  attr_reader :message
  alias msg message   # :nodoc: obsolete

  # The URI used to fetch this response.  The response URI is only available
  # if a URI was used to create the request.
  attr_reader :uri

  # Set to true automatically when the request did not contain an
  # Accept-Encoding header from the user.
  attr_accessor :decode_content

  # Returns the value set by body_encoding=, or +false+ if none;
  # see #body_encoding=.
  attr_reader :body_encoding

  # Sets the encoding that should be used when reading the body:
  #
  # - If the given value is an Encoding object, that encoding will be used.
  # - Otherwise if the value is a string, the value of
  #   {Encoding#find(value)}[rdoc-ref:Encoding.find]
  #   will be used.
  # - Otherwise an encoding will be deduced from the body itself.
  #
  # Examples:
  #
  #   http = Net::HTTP.new(hostname)
  #   req = Net::HTTP::Get.new('/')
  #
  #   http.request(req) do |res|
  #     p res.body.encoding # => #<Encoding:ASCII-8BIT>
  #   end
  #
  #   http.request(req) do |res|
  #     res.body_encoding = "UTF-8"
  #     p res.body.encoding # => #<Encoding:UTF-8>
  #   end
  #
  def body_encoding=(value)
    value = Encoding.find(value) if value.is_a?(String)
    @body_encoding = value
  end

  # Whether to ignore EOF when reading bodies with a specified Content-Length
  # header.
  attr_accessor :ignore_eof

  def inspect
    "#<#{self.class} #{@code} #{@message} readbody=#{@read}>"
  end

  #
  # response <-> exception relationship
  #

  def code_type   #:nodoc:
    self.class
  end

  def error!   #:nodoc:
    message = @code
    message = "#{message} #{@message.dump}" if @message
    raise error_type().new(message, self)
  end

  def error_type   #:nodoc:
    self.class::EXCEPTION_TYPE
  end

  # Raises an HTTP error if the response is not 2xx (success).
  def value
    error! unless self.kind_of?(Net::HTTPSuccess)
  end

  def uri= uri # :nodoc:
    @uri = uri.dup if uri
  end

  #
  # header (for backward compatibility only; DO NOT USE)
  #

  def response   #:nodoc:
    warn "Net::HTTPResponse#response is obsolete", uplevel: 1 if $VERBOSE
    self
  end

  def header   #:nodoc:
    warn "Net::HTTPResponse#header is obsolete", uplevel: 1 if $VERBOSE
    self
  end

  def read_header   #:nodoc:
    warn "Net::HTTPResponse#read_header is obsolete", uplevel: 1 if $VERBOSE
    self
  end

  #
  # body
  #

  def reading_body(sock, reqmethodallowbody)  #:nodoc: internal use only
    @socket = sock
    @body_exist = reqmethodallowbody && self.class.body_permitted?
    begin
      yield
      self.body   # ensure to read body
    ensure
      @socket = nil
    end
  end

  # Gets the entity body returned by the remote HTTP server.
  #
  # If a block is given, the body is passed to the block, and
  # the body is provided in fragments, as it is read in from the socket.
  #
  # If +dest+ argument is given, response is read into that variable,
  # with <code>dest#<<</code> method (it could be String or IO, or any
  # other object responding to <code><<</code>).
  #
  # Calling this method a second or subsequent time for the same
  # HTTPResponse object will return the value already read.
  #
  #   http.request_get('/index.html') {|res|
  #     puts res.read_body
  #   }
  #
  #   http.request_get('/index.html') {|res|
  #     p res.read_body.object_id   # 538149362
  #     p res.read_body.object_id   # 538149362
  #   }
  #
  #   # using iterator
  #   http.request_get('/index.html') {|res|
  #     res.read_body do |segment|
  #       print segment
  #     end
  #   }
  #
  def read_body(dest = nil, &block)
    if @read
      raise IOError, "#{self.class}\#read_body called twice" if dest or block
      return @body
    end
    to = procdest(dest, block)
    stream_check
    if @body_exist
      read_body_0 to
      @body = to
    else
      @body = nil
    end
    @read = true
    return if @body.nil?

    case enc = @body_encoding
    when Encoding, false, nil
      # Encoding: force given encoding
      # false/nil: do not force encoding
    else
      # other value: detect encoding from body
      enc = detect_encoding(@body)
    end

    @body.force_encoding(enc) if enc

    @body
  end

  # Returns the string response body;
  # note that repeated calls for the unmodified body return a cached string:
  #
  #   path = '/todos/1'
  #   Net::HTTP.start(hostname) do |http|
  #     res = http.get(path)
  #     p res.body
  #     p http.head(path).body # No body.
  #   end
  #
  # Output:
  #
  #   "{\n  \"userId\": 1,\n  \"id\": 1,\n  \"title\": \"delectus aut autem\",\n  \"completed\": false\n}"
  #   nil
  #
  def body
    read_body()
  end

  # Sets the body of the response to the given value.
  def body=(value)
    @body = value
  end

  alias entity body   #:nodoc: obsolete

  private

  # :nodoc:
  def detect_encoding(str, encoding=nil)
    if encoding
    elsif encoding = type_params['charset']
    elsif encoding = check_bom(str)
    else
      encoding = case content_type&.downcase
      when %r{text/x(?:ht)?ml|application/(?:[^+]+\+)?xml}
        /\A<xml[ \t\r\n]+
          version[ \t\r\n]*=[ \t\r\n]*(?:"[0-9.]+"|'[0-9.]*')[ \t\r\n]+
          encoding[ \t\r\n]*=[ \t\r\n]*
          (?:"([A-Za-z][\-A-Za-z0-9._]*)"|'([A-Za-z][\-A-Za-z0-9._]*)')/x =~ str
        encoding = $1 || $2 || Encoding::UTF_8
      when %r{text/html.*}
        sniff_encoding(str)
      end
    end
    return encoding
  end

  # :nodoc:
  def sniff_encoding(str, encoding=nil)
    # the encoding sniffing algorithm
    # http://www.w3.org/TR/html5/parsing.html#determining-the-character-encoding
    if enc = scanning_meta(str)
      enc
    # 6. last visited page or something
    # 7. frequency
    elsif str.ascii_only?
      Encoding::US_ASCII
    elsif str.dup.force_encoding(Encoding::UTF_8).valid_encoding?
      Encoding::UTF_8
    end
    # 8. implementation-defined or user-specified
  end

  # :nodoc:
  def check_bom(str)
    case str.byteslice(0, 2)
    when "\xFE\xFF"
      return Encoding::UTF_16BE
    when "\xFF\xFE"
      return Encoding::UTF_16LE
    end
    if "\xEF\xBB\xBF" == str.byteslice(0, 3)
      return Encoding::UTF_8
    end
    nil
  end

  # :nodoc:
  def scanning_meta(str)
    require 'strscan'
    ss = StringScanner.new(str)
    if ss.scan_until(/<meta[\t\n\f\r ]*/)
      attrs = {} # attribute_list
      got_pragma = false
      need_pragma = nil
      charset = nil

      # step: Attributes
      while attr = get_attribute(ss)
        name, value = *attr
        next if attrs[name]
        attrs[name] = true
        case name
        when 'http-equiv'
          got_pragma = true if value == 'content-type'
        when 'content'
          encoding = extracting_encodings_from_meta_elements(value)
          unless charset
            charset = encoding
          end
          need_pragma = true
        when 'charset'
          need_pragma = false
          charset = value
        end
      end

      # step: Processing
      return if need_pragma.nil?
      return if need_pragma && !got_pragma

      charset = Encoding.find(charset) rescue nil
      return unless charset
      charset = Encoding::UTF_8 if charset == Encoding::UTF_16
      return charset # tentative
    end
    nil
  end

  def get_attribute(ss)
    ss.scan(/[\t\n\f\r \/]*/)
    if ss.peek(1) == '>'
      ss.getch
      return nil
    end
    name = ss.scan(/[^=\t\n\f\r \/>]*/)
    name.downcase!
    raise if name.empty?
    ss.skip(/[\t\n\f\r ]*/)
    if ss.getch != '='
      value = ''
      return [name, value]
    end
    ss.skip(/[\t\n\f\r ]*/)
    case ss.peek(1)
    when '"'
      ss.getch
      value = ss.scan(/[^"]+/)
      value.downcase!
      ss.getch
    when "'"
      ss.getch
      value = ss.scan(/[^']+/)
      value.downcase!
      ss.getch
    when '>'
      value = ''
    else
      value = ss.scan(/[^\t\n\f\r >]+/)
      value.downcase!
    end
    [name, value]
  end

  def extracting_encodings_from_meta_elements(value)
    # http://dev.w3.org/html5/spec/fetching-resources.html#algorithm-for-extracting-an-encoding-from-a-meta-element
    if /charset[\t\n\f\r ]*=(?:"([^"]*)"|'([^']*)'|["']|\z|([^\t\n\f\r ;]+))/i =~ value
      return $1 || $2 || $3
    end
    return nil
  end

  ##
  # Checks for a supported Content-Encoding header and yields an Inflate
  # wrapper for this response's socket when zlib is present.  If the
  # Content-Encoding is not supported or zlib is missing, the plain socket is
  # yielded.
  #
  # If a Content-Range header is present, a plain socket is yielded as the
  # bytes in the range may not be a complete deflate block.

  def inflater # :nodoc:
    return yield @socket unless Net::HTTP::HAVE_ZLIB
    return yield @socket unless @decode_content
    return yield @socket if self['content-range']

    v = self['content-encoding']
    case v&.downcase
    when 'deflate', 'gzip', 'x-gzip' then
      self.delete 'content-encoding'

      inflate_body_io = Inflater.new(@socket)

      begin
        yield inflate_body_io
        success = true
      ensure
        begin
          inflate_body_io.finish
          if self['content-length']
            self['content-length'] = inflate_body_io.bytes_inflated.to_s
          end
        rescue => err
          # Ignore #finish's error if there is an exception from yield
          raise err if success
        end
      end
    when 'none', 'identity' then
      self.delete 'content-encoding'

      yield @socket
    else
      yield @socket
    end
  end

  def read_body_0(dest)
    inflater do |inflate_body_io|
      if chunked?
        read_chunked dest, inflate_body_io
        return
      end

      @socket = inflate_body_io

      clen = content_length()
      if clen
        @socket.read clen, dest, @ignore_eof
        return
      end
      clen = range_length()
      if clen
        @socket.read clen, dest
        return
      end
      @socket.read_all dest
    end
  end

  ##
  # read_chunked reads from +@socket+ for chunk-size, chunk-extension, CRLF,
  # etc. and +chunk_data_io+ for chunk-data which may be deflate or gzip
  # encoded.
  #
  # See RFC 2616 section 3.6.1 for definitions

  def read_chunked(dest, chunk_data_io) # :nodoc:
    total = 0
    while true
      line = @socket.readline
      hexlen = line.slice(/[0-9a-fA-F]+/) or
          raise Net::HTTPBadResponse, "wrong chunk size line: #{line}"
      len = hexlen.hex
      break if len == 0
      begin
        chunk_data_io.read len, dest
      ensure
        total += len
        @socket.read 2   # \r\n
      end
    end
    until @socket.readline.empty?
      # none
    end
  end

  def stream_check
    raise IOError, 'attempt to read body out of block' if @socket.nil? || @socket.closed?
  end

  def procdest(dest, block)
    raise ArgumentError, 'both arg and block given for HTTP method' if
      dest and block
    if block
      Net::ReadAdapter.new(block)
    else
      dest || +''
    end
  end

  ##
  # Inflater is a wrapper around Net::BufferedIO that transparently inflates
  # zlib and gzip streams.

  class Inflater # :nodoc:

    ##
    # Creates a new Inflater wrapping +socket+

    def initialize socket
      @socket = socket
      # zlib with automatic gzip detection
      @inflate = Zlib::Inflate.new(32 + Zlib::MAX_WBITS)
    end

    ##
    # Finishes the inflate stream.

    def finish
      return if @inflate.total_in == 0
      @inflate.finish
    end

    ##
    # The number of bytes inflated, used to update the Content-Length of
    # the response.

    def bytes_inflated
      @inflate.total_out
    end

    ##
    # Returns a Net::ReadAdapter that inflates each read chunk into +dest+.
    #
    # This allows a large response body to be inflated without storing the
    # entire body in memory.

    def inflate_adapter(dest)
      if dest.respond_to?(:set_encoding)
        dest.set_encoding(Encoding::ASCII_8BIT)
      elsif dest.respond_to?(:force_encoding)
        dest.force_encoding(Encoding::ASCII_8BIT)
      end
      block = proc do |compressed_chunk|
        @inflate.inflate(compressed_chunk) do |chunk|
          compressed_chunk.clear
          dest << chunk
        end
      end

      Net::ReadAdapter.new(block)
    end

    ##
    # Reads +clen+ bytes from the socket, inflates them, then writes them to
    # +dest+.  +ignore_eof+ is passed down to Net::BufferedIO#read
    #
    # Unlike Net::BufferedIO#read, this method returns more than +clen+ bytes.
    # At this time there is no way for a user of Net::HTTPResponse to read a
    # specific number of bytes from the HTTP response body, so this internal
    # API does not return the same number of bytes as were requested.
    #
    # See https://bugs.ruby-lang.org/issues/6492 for further discussion.

    def read clen, dest, ignore_eof = false
      temp_dest = inflate_adapter(dest)

      @socket.read clen, temp_dest, ignore_eof
    end

    ##
    # Reads the rest of the socket, inflates it, then writes it to +dest+.

    def read_all dest
      temp_dest = inflate_adapter(dest)

      @socket.read_all temp_dest
    end

  end

end

PK*J["=S�3�3share/ruby/net/http/requests.rbnu�[���# frozen_string_literal: true

# HTTP/1.1 methods --- RFC2616

# \Class for representing
# {HTTP method GET}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#GET_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Get.new(uri) # => #<Net::HTTP::Get GET>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: yes.
#
# Related:
#
# - Net::HTTP.get: sends +GET+ request, returns response body.
# - Net::HTTP#get: sends +GET+ request, returns response object.
#
class Net::HTTP::Get < Net::HTTPRequest
  METHOD = 'GET'
  REQUEST_HAS_BODY  = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method HEAD}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#HEAD_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Head.new(uri) # => #<Net::HTTP::Head HEAD>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: no.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: yes.
#
# Related:
#
# - Net::HTTP#head: sends +HEAD+ request, returns response object.
#
class Net::HTTP::Head < Net::HTTPRequest
  METHOD = 'HEAD'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = false
end

# \Class for representing
# {HTTP method POST}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#POST_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts'
#   req = Net::HTTP::Post.new(uri) # => #<Net::HTTP::Post POST>
#   req.body = '{"title": "foo","body": "bar","userId": 1}'
#   req.content_type = 'application/json'
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: yes.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: no.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: yes.
#
# Related:
#
# - Net::HTTP.post: sends +POST+ request, returns response object.
# - Net::HTTP#post: sends +POST+ request, returns response object.
#
class Net::HTTP::Post < Net::HTTPRequest
  METHOD = 'POST'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method PUT}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#PUT_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts'
#   req = Net::HTTP::Put.new(uri) # => #<Net::HTTP::Put PUT>
#   req.body = '{"title": "foo","body": "bar","userId": 1}'
#   req.content_type = 'application/json'
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: yes.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Net::HTTP.put: sends +PUT+ request, returns response object.
# - Net::HTTP#put: sends +PUT+ request, returns response object.
#
class Net::HTTP::Put < Net::HTTPRequest
  METHOD = 'PUT'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method DELETE}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#DELETE_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts/1'
#   req = Net::HTTP::Delete.new(uri) # => #<Net::HTTP::Delete DELETE>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Net::HTTP#delete: sends +DELETE+ request, returns response object.
#
class Net::HTTP::Delete < Net::HTTPRequest
  METHOD = 'DELETE'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method OPTIONS}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#OPTIONS_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Options.new(uri) # => #<Net::HTTP::Options OPTIONS>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: optional.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Net::HTTP#options: sends +OPTIONS+ request, returns response object.
#
class Net::HTTP::Options < Net::HTTPRequest
  METHOD = 'OPTIONS'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method TRACE}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#TRACE_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Trace.new(uri) # => #<Net::HTTP::Trace TRACE>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: no.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: yes.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Net::HTTP#trace: sends +TRACE+ request, returns response object.
#
class Net::HTTP::Trace < Net::HTTPRequest
  METHOD = 'TRACE'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {HTTP method PATCH}[https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#PATCH_method]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   uri.path = '/posts'
#   req = Net::HTTP::Patch.new(uri) # => #<Net::HTTP::Patch PATCH>
#   req.body = '{"title": "foo","body": "bar","userId": 1}'
#   req.content_type = 'application/json'
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Properties:
#
# - Request body: yes.
# - Response body: yes.
# - {Safe}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods]: no.
# - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: no.
# - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
#
# Related:
#
# - Net::HTTP#patch: sends +PATCH+ request, returns response object.
#
class Net::HTTP::Patch < Net::HTTPRequest
  METHOD = 'PATCH'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

#
# WebDAV methods --- RFC2518
#

# \Class for representing
# {WebDAV method PROPFIND}[http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Propfind.new(uri) # => #<Net::HTTP::Propfind PROPFIND>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Net::HTTP#propfind: sends +PROPFIND+ request, returns response object.
#
class Net::HTTP::Propfind < Net::HTTPRequest
  METHOD = 'PROPFIND'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method PROPPATCH}[http://www.webdav.org/specs/rfc4918.html#METHOD_PROPPATCH]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Proppatch.new(uri) # => #<Net::HTTP::Proppatch PROPPATCH>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Net::HTTP#proppatch: sends +PROPPATCH+ request, returns response object.
#
class Net::HTTP::Proppatch < Net::HTTPRequest
  METHOD = 'PROPPATCH'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method MKCOL}[http://www.webdav.org/specs/rfc4918.html#METHOD_MKCOL]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Mkcol.new(uri) # => #<Net::HTTP::Mkcol MKCOL>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Net::HTTP#mkcol: sends +MKCOL+ request, returns response object.
#
class Net::HTTP::Mkcol < Net::HTTPRequest
  METHOD = 'MKCOL'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method COPY}[http://www.webdav.org/specs/rfc4918.html#METHOD_COPY]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Copy.new(uri) # => #<Net::HTTP::Copy COPY>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Net::HTTP#copy: sends +COPY+ request, returns response object.
#
class Net::HTTP::Copy < Net::HTTPRequest
  METHOD = 'COPY'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method MOVE}[http://www.webdav.org/specs/rfc4918.html#METHOD_MOVE]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Move.new(uri) # => #<Net::HTTP::Move MOVE>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Net::HTTP#move: sends +MOVE+ request, returns response object.
#
class Net::HTTP::Move < Net::HTTPRequest
  METHOD = 'MOVE'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method LOCK}[http://www.webdav.org/specs/rfc4918.html#METHOD_LOCK]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Lock.new(uri) # => #<Net::HTTP::Lock LOCK>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Net::HTTP#lock: sends +LOCK+ request, returns response object.
#
class Net::HTTP::Lock < Net::HTTPRequest
  METHOD = 'LOCK'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

# \Class for representing
# {WebDAV method UNLOCK}[http://www.webdav.org/specs/rfc4918.html#METHOD_UNLOCK]:
#
#   require 'net/http'
#   uri = URI('http://example.com')
#   hostname = uri.hostname # => "example.com"
#   req = Net::HTTP::Unlock.new(uri) # => #<Net::HTTP::Unlock UNLOCK>
#   res = Net::HTTP.start(hostname) do |http|
#     http.request(req)
#   end
#
# See {Request Headers}[rdoc-ref:Net::HTTPRequest@Request+Headers].
#
# Related:
#
# - Net::HTTP#unlock: sends +UNLOCK+ request, returns response object.
#
class Net::HTTP::Unlock < Net::HTTPRequest
  METHOD = 'UNLOCK'
  REQUEST_HAS_BODY = true
  RESPONSE_HAS_BODY = true
end

PK*J[������ share/ruby/net/http/responses.rbnu�[���# frozen_string_literal: true
#--
# https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml

module Net

  class HTTPUnknownResponse < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPError                  #
  end

  # Parent class for informational (1xx) HTTP response classes.
  #
  # An informational response indicates that the request was received and understood.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.1xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_informational_response].
  #
  class HTTPInformation < HTTPResponse
    HAS_BODY = false
    EXCEPTION_TYPE = HTTPError                  #
  end

  # Parent class for success (2xx) HTTP response classes.
  #
  # A success response indicates the action requested by the client
  # was received, understood, and accepted.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.2xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_success].
  #
  class HTTPSuccess < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPError                  #
  end

  # Parent class for redirection (3xx) HTTP response classes.
  #
  # A redirection response indicates the client must take additional action
  # to complete the request.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.3xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_redirection].
  #
  class HTTPRedirection < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPRetriableError         #
  end

  # Parent class for client error (4xx) HTTP response classes.
  #
  # A client error response indicates that the client may have caused an error.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.4xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_client_errors].
  #
  class HTTPClientError < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPClientException        #
  end

  # Parent class for server error (5xx) HTTP response classes.
  #
  # A server error response indicates that the server failed to fulfill a request.
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#status.5xx].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_server_errors].
  #
  class HTTPServerError < HTTPResponse
    HAS_BODY = true
    EXCEPTION_TYPE = HTTPFatalError             #
  end

  # Response class for +Continue+ responses (status code 100).
  #
  # A +Continue+ response indicates that the server has received the request headers.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/100].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-100-continue].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#100].
  #
  class HTTPContinue < HTTPInformation
    HAS_BODY = false
  end

  # Response class for <tt>Switching Protocol</tt> responses (status code 101).
  #
  # The <tt>Switching Protocol<tt> response indicates that the server has received
  # a request to switch protocols, and has agreed to do so.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/101].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-101-switching-protocols].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#101].
  #
  class HTTPSwitchProtocol < HTTPInformation
    HAS_BODY = false
  end

  # Response class for +Processing+ responses (status code 102).
  #
  # The +Processing+ response indicates that the server has received
  # and is processing the request, but no response is available yet.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 2518}[https://www.rfc-editor.org/rfc/rfc2518#section-10.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#102].
  #
  class HTTPProcessing < HTTPInformation
    HAS_BODY = false
  end

  # Response class for <tt>Early Hints</tt> responses (status code 103).
  #
  # The <tt>Early Hints</tt> indicates that the server has received
  # and is processing the request, and contains certain headers;
  # the final response is not available yet.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103].
  # - {RFC 8297}[https://www.rfc-editor.org/rfc/rfc8297.html#section-2].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#103].
  #
  class HTTPEarlyHints < HTTPInformation
    HAS_BODY = false
  end

  # Response class for +OK+ responses (status code 200).
  #
  # The +OK+ response indicates that the server has received
  # a request and has responded successfully.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#200].
  #
  class HTTPOK < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for +Created+ responses (status code 201).
  #
  # The +Created+ response indicates that the server has received
  # and has fulfilled a request to create a new resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-201-created].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#201].
  #
  class HTTPCreated < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for +Accepted+ responses (status code 202).
  #
  # The +Accepted+ response indicates that the server has received
  # and is processing a request, but the processing has not yet been completed.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/202].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-202-accepted].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#202].
  #
  class HTTPAccepted < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Non-Authoritative Information</tt> responses (status code 203).
  #
  # The <tt>Non-Authoritative Information</tt> response indicates that the server
  # is a transforming proxy (such as a Web accelerator)
  # that received a 200 OK response from its origin,
  # and is returning a modified version of the origin's response.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/203].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-203-non-authoritative-infor].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#203].
  #
  class HTTPNonAuthoritativeInformation < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>No Content</tt> responses (status code 204).
  #
  # The <tt>No Content</tt> response indicates that the server
  # successfully processed the request, and is not returning any content.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-204-no-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#204].
  #
  class HTTPNoContent < HTTPSuccess
    HAS_BODY = false
  end

  # Response class for <tt>Reset Content</tt> responses (status code 205).
  #
  # The <tt>Reset Content</tt> response indicates that the server
  # successfully processed the request,
  # asks that the client reset its document view, and is not returning any content.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/205].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-205-reset-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#205].
  #
  class HTTPResetContent < HTTPSuccess
    HAS_BODY = false
  end

  # Response class for <tt>Partial Content</tt> responses (status code 206).
  #
  # The <tt>Partial Content</tt> response indicates that the server is delivering
  # only part of the resource (byte serving)
  # due to a Range header in the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-206-partial-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#206].
  #
  class HTTPPartialContent < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Multi-Status (WebDAV)</tt> responses (status code 207).
  #
  # The <tt>Multi-Status (WebDAV)</tt> response indicates that the server
  # has received the request,
  # and that the message body can contain a number of separate response codes.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 4818}[https://www.rfc-editor.org/rfc/rfc4918#section-11.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#207].
  #
  class HTTPMultiStatus < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Already Reported (WebDAV)</tt> responses (status code 208).
  #
  # The <tt>Already Reported (WebDAV)</tt> response indicates that the server
  # has received the request,
  # and that the members of a DAV binding have already been enumerated
  # in a preceding part of the (multi-status) response,
  # and are not being included again.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 5842}[https://www.rfc-editor.org/rfc/rfc5842.html#section-7.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#208].
  #
  class HTTPAlreadyReported < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>IM Used</tt> responses (status code 226).
  #
  # The <tt>IM Used</tt> response indicates that the server has fulfilled a request
  # for the resource, and the response is a representation of the result
  # of one or more instance-manipulations applied to the current instance.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 3229}[https://www.rfc-editor.org/rfc/rfc3229.html#section-10.4.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#226].
  #
  class HTTPIMUsed < HTTPSuccess
    HAS_BODY = true
  end

  # Response class for <tt>Multiple Choices</tt> responses (status code 300).
  #
  # The <tt>Multiple Choices</tt> response indicates that the server
  # offers multiple options for the resource from which the client may choose.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/300].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-300-multiple-choices].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#300].
  #
  class HTTPMultipleChoices < HTTPRedirection
    HAS_BODY = true
  end
  HTTPMultipleChoice = HTTPMultipleChoices

  # Response class for <tt>Moved Permanently</tt> responses (status code 301).
  #
  # The <tt>Moved Permanently</tt> response indicates that links or records
  # returning this response should be updated to use the given URL.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/301].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-301-moved-permanently].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#301].
  #
  class HTTPMovedPermanently < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Found</tt> responses (status code 302).
  #
  # The <tt>Found</tt> response indicates that the client
  # should look at (browse to) another URL.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-302-found].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#302].
  #
  class HTTPFound < HTTPRedirection
    HAS_BODY = true
  end
  HTTPMovedTemporarily = HTTPFound

  # Response class for <tt>See Other</tt> responses (status code 303).
  #
  # The response to the request can be found under another URI using the GET method.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/303].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-303-see-other].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#303].
  #
  class HTTPSeeOther < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Not Modified</tt> responses (status code 304).
  #
  # Indicates that the resource has not been modified since the version
  # specified by the request headers.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-304-not-modified].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#304].
  #
  class HTTPNotModified < HTTPRedirection
    HAS_BODY = false
  end

  # Response class for <tt>Use Proxy</tt> responses (status code 305).
  #
  # The requested resource is available only through a proxy,
  # whose address is provided in the response.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-305-use-proxy].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#305].
  #
  class HTTPUseProxy < HTTPRedirection
    HAS_BODY = false
  end

  # Response class for <tt>Temporary Redirect</tt> responses (status code 307).
  #
  # The request should be repeated with another URI;
  # however, future requests should still use the original URI.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-307-temporary-redirect].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#307].
  #
  class HTTPTemporaryRedirect < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Permanent Redirect</tt> responses (status code 308).
  #
  # This and all future requests should be directed to the given URI.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-308-permanent-redirect].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#308].
  #
  class HTTPPermanentRedirect < HTTPRedirection
    HAS_BODY = true
  end

  # Response class for <tt>Bad Request</tt> responses (status code 400).
  #
  # The server cannot or will not process the request due to an apparent client error.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-400-bad-request].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#400].
  #
  class HTTPBadRequest < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Unauthorized</tt> responses (status code 401).
  #
  # Authentication is required, but either was not provided or failed.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-401-unauthorized].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#401].
  #
  class HTTPUnauthorized < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Payment Required</tt> responses (status code 402).
  #
  # Reserved for future use.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/402].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-402-payment-required].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#402].
  #
  class HTTPPaymentRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Forbidden</tt> responses (status code 403).
  #
  # The request contained valid data and was understood by the server,
  # but the server is refusing action.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-403-forbidden].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#403].
  #
  class HTTPForbidden < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Not Found</tt> responses (status code 404).
  #
  # The requested resource could not be found but may be available in the future.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#404].
  #
  class HTTPNotFound < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Method Not Allowed</tt> responses (status code 405).
  #
  # The request method is not supported for the requested resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-405-method-not-allowed].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#405].
  #
  class HTTPMethodNotAllowed < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Not Acceptable</tt> responses (status code 406).
  #
  # The requested resource is capable of generating only content
  # that not acceptable according to the Accept headers sent in the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/406].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-406-not-acceptable].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#406].
  #
  class HTTPNotAcceptable < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Proxy Authentication Required</tt> responses (status code 407).
  #
  # The client must first authenticate itself with the proxy.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/407].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-407-proxy-authentication-re].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#407].
  #
  class HTTPProxyAuthenticationRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Request Timeout</tt> responses (status code 408).
  #
  # The server timed out waiting for the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-408-request-timeout].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#408].
  #
  class HTTPRequestTimeout < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestTimeOut = HTTPRequestTimeout

  # Response class for <tt>Conflict</tt> responses (status code 409).
  #
  # The request could not be processed because of conflict in the current state of the resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/409].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-409-conflict].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#409].
  #
  class HTTPConflict < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Gone</tt> responses (status code 410).
  #
  # The resource requested was previously in use but is no longer available
  # and will not be available again.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/410].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-410-gone].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#410].
  #
  class HTTPGone < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Length Required</tt> responses (status code 411).
  #
  # The request did not specify the length of its content,
  # which is required by the requested resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/411].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-411-length-required].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#411].
  #
  class HTTPLengthRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Precondition Failed</tt> responses (status code 412).
  #
  # The server does not meet one of the preconditions
  # specified in the request headers.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/412].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-412-precondition-failed].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#412].
  #
  class HTTPPreconditionFailed < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Payload Too Large</tt> responses (status code 413).
  #
  # The request is larger than the server is willing or able to process.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/413].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-413-content-too-large].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#413].
  #
  class HTTPPayloadTooLarge < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestEntityTooLarge = HTTPPayloadTooLarge

  # Response class for <tt>URI Too Long</tt> responses (status code 414).
  #
  # The URI provided was too long for the server to process.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/414].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-414-uri-too-long].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#414].
  #
  class HTTPURITooLong < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestURITooLong = HTTPURITooLong
  HTTPRequestURITooLarge = HTTPRequestURITooLong

  # Response class for <tt>Unsupported Media Type</tt> responses (status code 415).
  #
  # The request entity has a media type which the server or resource does not support.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/415].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-415-unsupported-media-type].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#415].
  #
  class HTTPUnsupportedMediaType < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Range Not Satisfiable</tt> responses (status code 416).
  #
  # The request entity has a media type which the server or resource does not support.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-416-range-not-satisfiable].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#416].
  #
  class HTTPRangeNotSatisfiable < HTTPClientError
    HAS_BODY = true
  end
  HTTPRequestedRangeNotSatisfiable = HTTPRangeNotSatisfiable

  # Response class for <tt>Expectation Failed</tt> responses (status code 417).
  #
  # The server cannot meet the requirements of the Expect request-header field.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/417].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-417-expectation-failed].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#417].
  #
  class HTTPExpectationFailed < HTTPClientError
    HAS_BODY = true
  end

  # 418 I'm a teapot - RFC 2324; a joke RFC
  # See https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#418.

  # 420 Enhance Your Calm - Twitter

  # Response class for <tt>Misdirected Request</tt> responses (status code 421).
  #
  # The request was directed at a server that is not able to produce a response.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-421-misdirected-request].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#421].
  #
  class HTTPMisdirectedRequest < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Unprocessable Entity</tt> responses (status code 422).
  #
  # The request was well-formed but had semantic errors.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-422-unprocessable-content].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#422].
  #
  class HTTPUnprocessableEntity < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Locked (WebDAV)</tt> responses (status code 423).
  #
  # The requested resource is locked.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 4918}[https://www.rfc-editor.org/rfc/rfc4918#section-11.3].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#423].
  #
  class HTTPLocked < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Failed Dependency (WebDAV)</tt> responses (status code 424).
  #
  # The request failed because it depended on another request and that request failed.
  # See {424 Failed Dependency (WebDAV)}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#424].
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {RFC 4918}[https://www.rfc-editor.org/rfc/rfc4918#section-11.4].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#424].
  #
  class HTTPFailedDependency < HTTPClientError
    HAS_BODY = true
  end

  # 425 Too Early
  # https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#425.

  # Response class for <tt>Upgrade Required</tt> responses (status code 426).
  #
  # The client should switch to the protocol given in the Upgrade header field.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/426].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-426-upgrade-required].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#426].
  #
  class HTTPUpgradeRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Precondition Required</tt> responses (status code 428).
  #
  # The origin server requires the request to be conditional.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/428].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-3].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#428].
  #
  class HTTPPreconditionRequired < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Too Many Requests</tt> responses (status code 429).
  #
  # The user has sent too many requests in a given amount of time.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-4].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#429].
  #
  class HTTPTooManyRequests < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Request Header Fields Too Large</tt> responses (status code 431).
  #
  # An individual header field is too large,
  # or all the header fields collectively, are too large.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/431].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-5].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#431].
  #
  class HTTPRequestHeaderFieldsTooLarge < HTTPClientError
    HAS_BODY = true
  end

  # Response class for <tt>Unavailable For Legal Reasons</tt> responses (status code 451).
  #
  # A server operator has received a legal demand to deny access to a resource or to a set of resources
  # that includes the requested resource.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/451].
  # - {RFC 7725}[https://www.rfc-editor.org/rfc/rfc7725.html#section-3].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#451].
  #
  class HTTPUnavailableForLegalReasons < HTTPClientError
    HAS_BODY = true
  end
  # 444 No Response - Nginx
  # 449 Retry With - Microsoft
  # 450 Blocked by Windows Parental Controls - Microsoft
  # 499 Client Closed Request - Nginx

  # Response class for <tt>Internal Server Error</tt> responses (status code 500).
  #
  # An unexpected condition was encountered and no more specific message is suitable.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-500-internal-server-error].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#500].
  #
  class HTTPInternalServerError < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Not Implemented</tt> responses (status code 501).
  #
  # The server either does not recognize the request method,
  # or it lacks the ability to fulfil the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-501-not-implemented].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#501].
  #
  class HTTPNotImplemented < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Bad Gateway</tt> responses (status code 502).
  #
  # The server was acting as a gateway or proxy
  # and received an invalid response from the upstream server.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-502-bad-gateway].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#502].
  #
  class HTTPBadGateway < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Service Unavailable</tt> responses (status code 503).
  #
  # The server cannot handle the request
  # (because it is overloaded or down for maintenance).
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-503-service-unavailable].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#503].
  #
  class HTTPServiceUnavailable < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Gateway Timeout</tt> responses (status code 504).
  #
  # The server was acting as a gateway or proxy
  # and did not receive a timely response from the upstream server.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/504].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-504-gateway-timeout].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#504].
  #
  class HTTPGatewayTimeout < HTTPServerError
    HAS_BODY = true
  end
  HTTPGatewayTimeOut = HTTPGatewayTimeout

  # Response class for <tt>HTTP Version Not Supported</tt> responses (status code 505).
  #
  # The server does not support the HTTP version used in the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/505].
  # - {RFC 9110}[https://www.rfc-editor.org/rfc/rfc9110.html#name-505-http-version-not-suppor].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#505].
  #
  class HTTPVersionNotSupported < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Variant Also Negotiates</tt> responses (status code 506).
  #
  # Transparent content negotiation for the request results in a circular reference.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/506].
  # - {RFC 2295}[https://www.rfc-editor.org/rfc/rfc2295#section-8.1].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#506].
  #
  class HTTPVariantAlsoNegotiates < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Insufficient Storage (WebDAV)</tt> responses (status code 507).
  #
  # The server is unable to store the representation needed to complete the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/507].
  # - {RFC 4918}[https://www.rfc-editor.org/rfc/rfc4918#section-11.5].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#507].
  #
  class HTTPInsufficientStorage < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Loop Detected (WebDAV)</tt> responses (status code 508).
  #
  # The server detected an infinite loop while processing the request.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/508].
  # - {RFC 5942}[https://www.rfc-editor.org/rfc/rfc5842.html#section-7.2].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#508].
  #
  class HTTPLoopDetected < HTTPServerError
    HAS_BODY = true
  end
  # 509 Bandwidth Limit Exceeded - Apache bw/limited extension

  # Response class for <tt>Not Extended</tt> responses (status code 510).
  #
  # Further extensions to the request are required for the server to fulfill it.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/510].
  # - {RFC 2774}[https://www.rfc-editor.org/rfc/rfc2774.html#section-7].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#510].
  #
  class HTTPNotExtended < HTTPServerError
    HAS_BODY = true
  end

  # Response class for <tt>Network Authentication Required</tt> responses (status code 511).
  #
  # The client needs to authenticate to gain network access.
  #
  # :include: doc/net-http/included_getters.rdoc
  #
  # References:
  #
  # - {Mozilla}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/511].
  # - {RFC 6585}[https://www.rfc-editor.org/rfc/rfc6585#section-6].
  # - {Wikipedia}[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#511].
  #
  class HTTPNetworkAuthenticationRequired < HTTPServerError
    HAS_BODY = true
  end

end

class Net::HTTPResponse
  CODE_CLASS_TO_OBJ = {
    '1' => Net::HTTPInformation,
    '2' => Net::HTTPSuccess,
    '3' => Net::HTTPRedirection,
    '4' => Net::HTTPClientError,
    '5' => Net::HTTPServerError
  }
  CODE_TO_OBJ = {
    '100' => Net::HTTPContinue,
    '101' => Net::HTTPSwitchProtocol,
    '102' => Net::HTTPProcessing,
    '103' => Net::HTTPEarlyHints,

    '200' => Net::HTTPOK,
    '201' => Net::HTTPCreated,
    '202' => Net::HTTPAccepted,
    '203' => Net::HTTPNonAuthoritativeInformation,
    '204' => Net::HTTPNoContent,
    '205' => Net::HTTPResetContent,
    '206' => Net::HTTPPartialContent,
    '207' => Net::HTTPMultiStatus,
    '208' => Net::HTTPAlreadyReported,
    '226' => Net::HTTPIMUsed,

    '300' => Net::HTTPMultipleChoices,
    '301' => Net::HTTPMovedPermanently,
    '302' => Net::HTTPFound,
    '303' => Net::HTTPSeeOther,
    '304' => Net::HTTPNotModified,
    '305' => Net::HTTPUseProxy,
    '307' => Net::HTTPTemporaryRedirect,
    '308' => Net::HTTPPermanentRedirect,

    '400' => Net::HTTPBadRequest,
    '401' => Net::HTTPUnauthorized,
    '402' => Net::HTTPPaymentRequired,
    '403' => Net::HTTPForbidden,
    '404' => Net::HTTPNotFound,
    '405' => Net::HTTPMethodNotAllowed,
    '406' => Net::HTTPNotAcceptable,
    '407' => Net::HTTPProxyAuthenticationRequired,
    '408' => Net::HTTPRequestTimeout,
    '409' => Net::HTTPConflict,
    '410' => Net::HTTPGone,
    '411' => Net::HTTPLengthRequired,
    '412' => Net::HTTPPreconditionFailed,
    '413' => Net::HTTPPayloadTooLarge,
    '414' => Net::HTTPURITooLong,
    '415' => Net::HTTPUnsupportedMediaType,
    '416' => Net::HTTPRangeNotSatisfiable,
    '417' => Net::HTTPExpectationFailed,
    '421' => Net::HTTPMisdirectedRequest,
    '422' => Net::HTTPUnprocessableEntity,
    '423' => Net::HTTPLocked,
    '424' => Net::HTTPFailedDependency,
    '426' => Net::HTTPUpgradeRequired,
    '428' => Net::HTTPPreconditionRequired,
    '429' => Net::HTTPTooManyRequests,
    '431' => Net::HTTPRequestHeaderFieldsTooLarge,
    '451' => Net::HTTPUnavailableForLegalReasons,

    '500' => Net::HTTPInternalServerError,
    '501' => Net::HTTPNotImplemented,
    '502' => Net::HTTPBadGateway,
    '503' => Net::HTTPServiceUnavailable,
    '504' => Net::HTTPGatewayTimeout,
    '505' => Net::HTTPVersionNotSupported,
    '506' => Net::HTTPVariantAlsoNegotiates,
    '507' => Net::HTTPInsufficientStorage,
    '508' => Net::HTTPLoopDetected,
    '510' => Net::HTTPNotExtended,
    '511' => Net::HTTPNetworkAuthenticationRequired,
  }
end
PK*J[	j��"share/ruby/net/http/proxy_delta.rbnu�[���# frozen_string_literal: true
module Net::HTTP::ProxyDelta   #:nodoc: internal use only
  private

  def conn_address
    proxy_address()
  end

  def conn_port
    proxy_port()
  end

  def edit_path(path)
    use_ssl? ? path : "http://#{addr_port()}#{path}"
  end
end

PK*J[�H�oEE!share/ruby/net/http/exceptions.rbnu�[���# frozen_string_literal: true
module Net
  # Net::HTTP exception class.
  # You cannot use Net::HTTPExceptions directly; instead, you must use
  # its subclasses.
  module HTTPExceptions
    def initialize(msg, res)   #:nodoc:
      super msg
      @response = res
    end
    attr_reader :response
    alias data response    #:nodoc: obsolete
  end

  class HTTPError < ProtocolError
    include HTTPExceptions
  end

  class HTTPRetriableError < ProtoRetriableError
    include HTTPExceptions
  end

  class HTTPClientException < ProtoServerError
    include HTTPExceptions
  end

  class HTTPFatalError < ProtoFatalError
    include HTTPExceptions
  end

  # We cannot use the name "HTTPServerError", it is the name of the response.
  HTTPServerException = HTTPClientException # :nodoc:
  deprecate_constant(:HTTPServerException)
end
PK*J[:,�~��share/ruby/net/http/status.rbnu�[���# frozen_string_literal: true

require_relative '../http'

if $0 == __FILE__
  require 'open-uri'
  File.foreach(__FILE__) do |line|
    puts line
    break if line.start_with?('end')
  end
  puts
  puts "Net::HTTP::STATUS_CODES = {"
  url = "https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv"
  URI(url).read.each_line do |line|
    code, mes, = line.split(',')
    next if ['(Unused)', 'Unassigned', 'Description'].include?(mes)
    puts "  #{code} => '#{mes}',"
  end
  puts "} # :nodoc:"
end

Net::HTTP::STATUS_CODES = {
  100 => 'Continue',
  101 => 'Switching Protocols',
  102 => 'Processing',
  103 => 'Early Hints',
  200 => 'OK',
  201 => 'Created',
  202 => 'Accepted',
  203 => 'Non-Authoritative Information',
  204 => 'No Content',
  205 => 'Reset Content',
  206 => 'Partial Content',
  207 => 'Multi-Status',
  208 => 'Already Reported',
  226 => 'IM Used',
  300 => 'Multiple Choices',
  301 => 'Moved Permanently',
  302 => 'Found',
  303 => 'See Other',
  304 => 'Not Modified',
  305 => 'Use Proxy',
  307 => 'Temporary Redirect',
  308 => 'Permanent Redirect',
  400 => 'Bad Request',
  401 => 'Unauthorized',
  402 => 'Payment Required',
  403 => 'Forbidden',
  404 => 'Not Found',
  405 => 'Method Not Allowed',
  406 => 'Not Acceptable',
  407 => 'Proxy Authentication Required',
  408 => 'Request Timeout',
  409 => 'Conflict',
  410 => 'Gone',
  411 => 'Length Required',
  412 => 'Precondition Failed',
  413 => 'Content Too Large',
  414 => 'URI Too Long',
  415 => 'Unsupported Media Type',
  416 => 'Range Not Satisfiable',
  417 => 'Expectation Failed',
  421 => 'Misdirected Request',
  422 => 'Unprocessable Content',
  423 => 'Locked',
  424 => 'Failed Dependency',
  425 => 'Too Early',
  426 => 'Upgrade Required',
  428 => 'Precondition Required',
  429 => 'Too Many Requests',
  431 => 'Request Header Fields Too Large',
  451 => 'Unavailable For Legal Reasons',
  500 => 'Internal Server Error',
  501 => 'Not Implemented',
  502 => 'Bad Gateway',
  503 => 'Service Unavailable',
  504 => 'Gateway Timeout',
  505 => 'HTTP Version Not Supported',
  506 => 'Variant Also Negotiates',
  507 => 'Insufficient Storage',
  508 => 'Loop Detected',
  510 => 'Not Extended (OBSOLETED)',
  511 => 'Network Authentication Required',
} # :nodoc:
PK*J[�Z,s55share/ruby/net/http/request.rbnu�[���# frozen_string_literal: true

# This class is the base class for \Net::HTTP request classes.
# The class should not be used directly;
# instead you should use its subclasses, listed below.
#
# == Creating a Request
#
# An request object may be created with either a URI or a string hostname:
#
#   require 'net/http'
#   uri = URI('https://jsonplaceholder.typicode.com/')
#   req = Net::HTTP::Get.new(uri)          # => #<Net::HTTP::Get GET>
#   req = Net::HTTP::Get.new(uri.hostname) # => #<Net::HTTP::Get GET>
#
# And with any of the subclasses:
#
#   req = Net::HTTP::Head.new(uri) # => #<Net::HTTP::Head HEAD>
#   req = Net::HTTP::Post.new(uri) # => #<Net::HTTP::Post POST>
#   req = Net::HTTP::Put.new(uri)  # => #<Net::HTTP::Put PUT>
#   # ...
#
# The new instance is suitable for use as the argument to Net::HTTP#request.
#
# == Request Headers
#
# A new request object has these header fields by default:
#
#   req.to_hash
#   # =>
#   {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"],
#   "accept"=>["*/*"],
#   "user-agent"=>["Ruby"],
#   "host"=>["jsonplaceholder.typicode.com"]}
#
# See:
#
# - {Request header Accept-Encoding}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Accept-Encoding]
#   and {Compression and Decompression}[rdoc-ref:Net::HTTP@Compression+and+Decompression].
# - {Request header Accept}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#accept-request-header].
# - {Request header User-Agent}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#user-agent-request-header].
# - {Request header Host}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#host-request-header].
#
# You can add headers or override default headers:
#
#   #   res = Net::HTTP::Get.new(uri, {'foo' => '0', 'bar' => '1'})
#
# This class (and therefore its subclasses) also includes (indirectly)
# module Net::HTTPHeader, which gives access to its
# {methods for setting headers}[rdoc-ref:Net::HTTPHeader@Setters].
#
# == Request Subclasses
#
# Subclasses for HTTP requests:
#
# - Net::HTTP::Get
# - Net::HTTP::Head
# - Net::HTTP::Post
# - Net::HTTP::Put
# - Net::HTTP::Delete
# - Net::HTTP::Options
# - Net::HTTP::Trace
# - Net::HTTP::Patch
#
# Subclasses for WebDAV requests:
#
# - Net::HTTP::Propfind
# - Net::HTTP::Proppatch
# - Net::HTTP::Mkcol
# - Net::HTTP::Copy
# - Net::HTTP::Move
# - Net::HTTP::Lock
# - Net::HTTP::Unlock
#
class Net::HTTPRequest < Net::HTTPGenericRequest
  # Creates an HTTP request object for +path+.
  #
  # +initheader+ are the default headers to use.  Net::HTTP adds
  # Accept-Encoding to enable compression of the response body unless
  # Accept-Encoding or Range are supplied in +initheader+.

  def initialize(path, initheader = nil)
    super self.class::METHOD,
          self.class::REQUEST_HAS_BODY,
          self.class::RESPONSE_HAS_BODY,
          path, initheader
  end
end
PK*J[y�!�-�-share/ruby/net/protocol.rbnu�[���# frozen_string_literal: true
#
# = net/protocol.rb
#
#--
# Copyright (c) 1999-2004 Yukihiro Matsumoto
# Copyright (c) 1999-2004 Minero Aoki
#
# written and maintained by Minero Aoki <aamine@loveruby.net>
#
# This program is free software. You can re-distribute and/or
# modify this program under the same terms as Ruby itself,
# Ruby Distribute License or GNU General Public License.
#
# $Id$
#++
#
# WARNING: This file is going to remove.
# Do not rely on the implementation written in this file.
#

require 'socket'
require 'timeout'
require 'io/wait'

module Net # :nodoc:

  class Protocol   #:nodoc: internal use only
    VERSION = "0.2.2"

    private
    def Protocol.protocol_param(name, val)
      module_eval(<<-End, __FILE__, __LINE__ + 1)
        def #{name}
          #{val}
        end
      End
    end

    def ssl_socket_connect(s, timeout)
      if timeout
        while true
          raise Net::OpenTimeout if timeout <= 0
          start = Process.clock_gettime Process::CLOCK_MONOTONIC
          # to_io is required because SSLSocket doesn't have wait_readable yet
          case s.connect_nonblock(exception: false)
          when :wait_readable; s.to_io.wait_readable(timeout)
          when :wait_writable; s.to_io.wait_writable(timeout)
          else; break
          end
          timeout -= Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
        end
      else
        s.connect
      end
    end
  end


  class ProtocolError          < StandardError; end
  class ProtoSyntaxError       < ProtocolError; end
  class ProtoFatalError        < ProtocolError; end
  class ProtoUnknownError      < ProtocolError; end
  class ProtoServerError       < ProtocolError; end
  class ProtoAuthError         < ProtocolError; end
  class ProtoCommandError      < ProtocolError; end
  class ProtoRetriableError    < ProtocolError; end
  ProtocRetryError = ProtoRetriableError

  ##
  # OpenTimeout, a subclass of Timeout::Error, is raised if a connection cannot
  # be created within the open_timeout.

  class OpenTimeout            < Timeout::Error; end

  ##
  # ReadTimeout, a subclass of Timeout::Error, is raised if a chunk of the
  # response cannot be read within the read_timeout.

  class ReadTimeout < Timeout::Error
    def initialize(io = nil)
      @io = io
    end
    attr_reader :io

    def message
      msg = super
      if @io
        msg = "#{msg} with #{@io.inspect}"
      end
      msg
    end
  end

  ##
  # WriteTimeout, a subclass of Timeout::Error, is raised if a chunk of the
  # response cannot be written within the write_timeout.  Not raised on Windows.

  class WriteTimeout < Timeout::Error
    def initialize(io = nil)
      @io = io
    end
    attr_reader :io

    def message
      msg = super
      if @io
        msg = "#{msg} with #{@io.inspect}"
      end
      msg
    end
  end


  class BufferedIO   #:nodoc: internal use only
    def initialize(io, read_timeout: 60, write_timeout: 60, continue_timeout: nil, debug_output: nil)
      @io = io
      @read_timeout = read_timeout
      @write_timeout = write_timeout
      @continue_timeout = continue_timeout
      @debug_output = debug_output
      @rbuf = ''.b
      @rbuf_empty = true
      @rbuf_offset = 0
    end

    attr_reader :io
    attr_accessor :read_timeout
    attr_accessor :write_timeout
    attr_accessor :continue_timeout
    attr_accessor :debug_output

    def inspect
      "#<#{self.class} io=#{@io}>"
    end

    def eof?
      @io.eof?
    end

    def closed?
      @io.closed?
    end

    def close
      @io.close
    end

    #
    # Read
    #

    public

    def read(len, dest = ''.b, ignore_eof = false)
      LOG "reading #{len} bytes..."
      read_bytes = 0
      begin
        while read_bytes + rbuf_size < len
          if s = rbuf_consume_all
            read_bytes += s.bytesize
            dest << s
          end
          rbuf_fill
        end
        s = rbuf_consume(len - read_bytes)
        read_bytes += s.bytesize
        dest << s
      rescue EOFError
        raise unless ignore_eof
      end
      LOG "read #{read_bytes} bytes"
      dest
    end

    def read_all(dest = ''.b)
      LOG 'reading all...'
      read_bytes = 0
      begin
        while true
          if s = rbuf_consume_all
            read_bytes += s.bytesize
            dest << s
          end
          rbuf_fill
        end
      rescue EOFError
        ;
      end
      LOG "read #{read_bytes} bytes"
      dest
    end

    def readuntil(terminator, ignore_eof = false)
      offset = @rbuf_offset
      begin
        until idx = @rbuf.index(terminator, offset)
          offset = @rbuf.bytesize
          rbuf_fill
        end
        return rbuf_consume(idx + terminator.bytesize - @rbuf_offset)
      rescue EOFError
        raise unless ignore_eof
        return rbuf_consume
      end
    end

    def readline
      readuntil("\n").chop
    end

    private

    BUFSIZE = 1024 * 16

    def rbuf_fill
      tmp = @rbuf_empty ? @rbuf : nil
      case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)
      when String
        @rbuf_empty = false
        if rv.equal?(tmp)
          @rbuf_offset = 0
        else
          @rbuf << rv
          rv.clear
        end
        return
      when :wait_readable
        (io = @io.to_io).wait_readable(@read_timeout) or raise Net::ReadTimeout.new(io)
        # continue looping
      when :wait_writable
        # OpenSSL::Buffering#read_nonblock may fail with IO::WaitWritable.
        # http://www.openssl.org/support/faq.html#PROG10
        (io = @io.to_io).wait_writable(@read_timeout) or raise Net::ReadTimeout.new(io)
        # continue looping
      when nil
        raise EOFError, 'end of file reached'
      end while true
    end

    def rbuf_flush
      if @rbuf_empty
        @rbuf.clear
        @rbuf_offset = 0
      end
      nil
    end

    def rbuf_size
      @rbuf.bytesize - @rbuf_offset
    end

    def rbuf_consume_all
      rbuf_consume if rbuf_size > 0
    end

    def rbuf_consume(len = nil)
      if @rbuf_offset == 0 && (len.nil? || len == @rbuf.bytesize)
        s = @rbuf
        @rbuf = ''.b
        @rbuf_offset = 0
        @rbuf_empty = true
      elsif len.nil?
        s = @rbuf.byteslice(@rbuf_offset..-1)
        @rbuf = ''.b
        @rbuf_offset = 0
        @rbuf_empty = true
      else
        s = @rbuf.byteslice(@rbuf_offset, len)
        @rbuf_offset += len
        @rbuf_empty = @rbuf_offset == @rbuf.bytesize
        rbuf_flush
      end

      @debug_output << %Q[-> #{s.dump}\n] if @debug_output
      s
    end

    #
    # Write
    #

    public

    def write(*strs)
      writing {
        write0(*strs)
      }
    end

    alias << write

    def writeline(str)
      writing {
        write0 str + "\r\n"
      }
    end

    private

    def writing
      @written_bytes = 0
      @debug_output << '<- ' if @debug_output
      yield
      @debug_output << "\n" if @debug_output
      bytes = @written_bytes
      @written_bytes = nil
      bytes
    end

    def write0(*strs)
      @debug_output << strs.map(&:dump).join if @debug_output
      orig_written_bytes = @written_bytes
      strs.each_with_index do |str, i|
        need_retry = true
        case len = @io.write_nonblock(str, exception: false)
        when Integer
          @written_bytes += len
          len -= str.bytesize
          if len == 0
            if strs.size == i+1
              return @written_bytes - orig_written_bytes
            else
              need_retry = false
              # next string
            end
          elsif len < 0
            str = str.byteslice(len, -len)
          else # len > 0
            need_retry = false
            # next string
          end
          # continue looping
        when :wait_writable
          (io = @io.to_io).wait_writable(@write_timeout) or raise Net::WriteTimeout.new(io)
          # continue looping
        end while need_retry
      end
    end

    #
    # Logging
    #

    private

    def LOG_off
      @save_debug_out = @debug_output
      @debug_output = nil
    end

    def LOG_on
      @debug_output = @save_debug_out
    end

    def LOG(msg)
      return unless @debug_output
      @debug_output << msg + "\n"
    end
  end


  class InternetMessageIO < BufferedIO   #:nodoc: internal use only
    def initialize(*, **)
      super
      @wbuf = nil
    end

    #
    # Read
    #

    def each_message_chunk
      LOG 'reading message...'
      LOG_off()
      read_bytes = 0
      while (line = readuntil("\r\n")) != ".\r\n"
        read_bytes += line.size
        yield line.delete_prefix('.')
      end
      LOG_on()
      LOG "read message (#{read_bytes} bytes)"
    end

    # *library private* (cannot handle 'break')
    def each_list_item
      while (str = readuntil("\r\n")) != ".\r\n"
        yield str.chop
      end
    end

    def write_message_0(src)
      prev = @written_bytes
      each_crlf_line(src) do |line|
        write0 dot_stuff(line)
      end
      @written_bytes - prev
    end

    #
    # Write
    #

    def write_message(src)
      LOG "writing message from #{src.class}"
      LOG_off()
      len = writing {
        using_each_crlf_line {
          write_message_0 src
        }
      }
      LOG_on()
      LOG "wrote #{len} bytes"
      len
    end

    def write_message_by_block(&block)
      LOG 'writing message from block'
      LOG_off()
      len = writing {
        using_each_crlf_line {
          begin
            block.call(WriteAdapter.new(self.method(:write_message_0)))
          rescue LocalJumpError
            # allow `break' from writer block
          end
        }
      }
      LOG_on()
      LOG "wrote #{len} bytes"
      len
    end

    private

    def dot_stuff(s)
      s.sub(/\A\./, '..')
    end

    def using_each_crlf_line
      @wbuf = ''.b
      yield
      if not @wbuf.empty?   # unterminated last line
        write0 dot_stuff(@wbuf.chomp) + "\r\n"
      elsif @written_bytes == 0   # empty src
        write0 "\r\n"
      end
      write0 ".\r\n"
      @wbuf = nil
    end

    def each_crlf_line(src)
      buffer_filling(@wbuf, src) do
        while line = @wbuf.slice!(/\A[^\r\n]*(?:\n|\r(?:\n|(?!\z)))/)
          yield line.chomp("\n") + "\r\n"
        end
      end
    end

    def buffer_filling(buf, src)
      case src
      when String    # for speeding up.
        0.step(src.size - 1, 1024) do |i|
          buf << src[i, 1024]
          yield
        end
      when File    # for speeding up.
        while s = src.read(1024)
          buf << s
          yield
        end
      else    # generic reader
        src.each do |str|
          buf << str
          yield if buf.size > 1024
        end
        yield unless buf.empty?
      end
    end
  end


  #
  # The writer adapter class
  #
  class WriteAdapter
    def initialize(writer)
      @writer = writer
    end

    def inspect
      "#<#{self.class} writer=#{@writer.inspect}>"
    end

    def write(str)
      @writer.call(str)
    end

    alias print write

    def <<(str)
      write str
      self
    end

    def puts(str = '')
      write str.chomp("\n") + "\n"
    end

    def printf(*args)
      write sprintf(*args)
    end
  end


  class ReadAdapter   #:nodoc: internal use only
    def initialize(block)
      @block = block
    end

    def inspect
      "#<#{self.class}>"
    end

    def <<(str)
      call_block(str, &@block) if @block
    end

    private

    # This method is needed because @block must be called by yield,
    # not Proc#call.  You can see difference when using `break' in
    # the block.
    def call_block(str)
      yield str
    end
  end


  module NetPrivate   #:nodoc: obsolete
    Socket = ::Net::InternetMessageIO
  end

end   # module Net
PK*J[=u�=share/ruby/net/https.rbnu�[���# frozen_string_literal: true
=begin

= net/https -- SSL/TLS enhancement for Net::HTTP.

  This file has been merged with net/http.  There is no longer any need to
  require 'net/https' to use HTTPS.

  See Net::HTTP for details on how to make HTTPS connections.

== Info
  'OpenSSL for Ruby 2' project
  Copyright (C) 2001 GOTOU Yuuzou <gotoyuzo@notwork.org>
  All rights reserved.

== Licence
  This program is licensed under the same licence as Ruby.
  (See the file 'LICENCE'.)

=end

require_relative 'http'
require 'openssl'
PK*J[���c9V9Vshare/ruby/net/http.rbnu�[���# frozen_string_literal: true
#
# = net/http.rb
#
# Copyright (c) 1999-2007 Yukihiro Matsumoto
# Copyright (c) 1999-2007 Minero Aoki
# Copyright (c) 2001 GOTOU Yuuzou
#
# Written and maintained by Minero Aoki <aamine@loveruby.net>.
# HTTPS support added by GOTOU Yuuzou <gotoyuzo@notwork.org>.
#
# This file is derived from "http-access.rb".
#
# Documented by Minero Aoki; converted to RDoc by William Webber.
#
# This program is free software. You can re-distribute and/or
# modify this program under the same terms of ruby itself ---
# Ruby Distribution License or GNU General Public License.
#
# See Net::HTTP for an overview and examples.
#

require 'net/protocol'
require 'uri'
require 'resolv'
autoload :OpenSSL, 'openssl'

module Net   #:nodoc:

  # :stopdoc:
  class HTTPBadResponse < StandardError; end
  class HTTPHeaderSyntaxError < StandardError; end
  # :startdoc:

  # \Class \Net::HTTP provides a rich library that implements the client
  # in a client-server model that uses the \HTTP request-response protocol.
  # For information about \HTTP, see:
  #
  # - {Hypertext Transfer Protocol}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol].
  # - {Technical overview}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Technical_overview].
  #
  # == About the Examples
  #
  # :include: doc/net-http/examples.rdoc
  #
  # == Strategies
  #
  # - If you will make only a few GET requests,
  #   consider using {OpenURI}[rdoc-ref:OpenURI].
  # - If you will make only a few requests of all kinds,
  #   consider using the various singleton convenience methods in this class.
  #   Each of the following methods automatically starts and finishes
  #   a {session}[rdoc-ref:Net::HTTP@Sessions] that sends a single request:
  #
  #     # Return string response body.
  #     Net::HTTP.get(hostname, path)
  #     Net::HTTP.get(uri)
  #
  #     # Write string response body to $stdout.
  #     Net::HTTP.get_print(hostname, path)
  #     Net::HTTP.get_print(uri)
  #
  #     # Return response as Net::HTTPResponse object.
  #     Net::HTTP.get_response(hostname, path)
  #     Net::HTTP.get_response(uri)
  #     data = '{"title": "foo", "body": "bar", "userId": 1}'
  #     Net::HTTP.post(uri, data)
  #     params = {title: 'foo', body: 'bar', userId: 1}
  #     Net::HTTP.post_form(uri, params)
  #     data = '{"title": "foo", "body": "bar", "userId": 1}'
  #     Net::HTTP.put(uri, data)
  #
  # - If performance is important, consider using sessions, which lower request overhead.
  #   This {session}[rdoc-ref:Net::HTTP@Sessions] has multiple requests for
  #   {HTTP methods}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods]
  #   and {WebDAV methods}[https://en.wikipedia.org/wiki/WebDAV#Implementation]:
  #
  #     Net::HTTP.start(hostname) do |http|
  #       # Session started automatically before block execution.
  #       http.get(path)
  #       http.head(path)
  #       body = 'Some text'
  #       http.post(path, body)  # Can also have a block.
  #       http.put(path, body)
  #       http.delete(path)
  #       http.options(path)
  #       http.trace(path)
  #       http.patch(path, body) # Can also have a block.
  #       http.copy(path)
  #       http.lock(path, body)
  #       http.mkcol(path, body)
  #       http.move(path)
  #       http.propfind(path, body)
  #       http.proppatch(path, body)
  #       http.unlock(path, body)
  #       # Session finished automatically at block exit.
  #     end
  #
  # The methods cited above are convenience methods that, via their few arguments,
  # allow minimal control over the requests.
  # For greater control, consider using {request objects}[rdoc-ref:Net::HTTPRequest].
  #
  # == URIs
  #
  # On the internet, a URI
  # ({Universal Resource Identifier}[https://en.wikipedia.org/wiki/Uniform_Resource_Identifier])
  # is a string that identifies a particular resource.
  # It consists of some or all of: scheme, hostname, path, query, and fragment;
  # see {URI syntax}[https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax].
  #
  # A Ruby {URI::Generic}[rdoc-ref:URI::Generic] object
  # represents an internet URI.
  # It provides, among others, methods
  # +scheme+, +hostname+, +path+, +query+, and +fragment+.
  #
  # === Schemes
  #
  # An internet \URI has
  # a {scheme}[https://en.wikipedia.org/wiki/List_of_URI_schemes].
  #
  # The two schemes supported in \Net::HTTP are <tt>'https'</tt> and <tt>'http'</tt>:
  #
  #   uri.scheme                       # => "https"
  #   URI('http://example.com').scheme # => "http"
  #
  # === Hostnames
  #
  # A hostname identifies a server (host) to which requests may be sent:
  #
  #   hostname = uri.hostname # => "jsonplaceholder.typicode.com"
  #   Net::HTTP.start(hostname) do |http|
  #     # Some HTTP stuff.
  #   end
  #
  # === Paths
  #
  # A host-specific path identifies a resource on the host:
  #
  #   _uri = uri.dup
  #   _uri.path = '/todos/1'
  #   hostname = _uri.hostname
  #   path = _uri.path
  #   Net::HTTP.get(hostname, path)
  #
  # === Queries
  #
  # A host-specific query adds name/value pairs to the URI:
  #
  #   _uri = uri.dup
  #   params = {userId: 1, completed: false}
  #   _uri.query = URI.encode_www_form(params)
  #   _uri # => #<URI::HTTPS https://jsonplaceholder.typicode.com?userId=1&completed=false>
  #   Net::HTTP.get(_uri)
  #
  # === Fragments
  #
  # A {URI fragment}[https://en.wikipedia.org/wiki/URI_fragment] has no effect
  # in \Net::HTTP;
  # the same data is returned, regardless of whether a fragment is included.
  #
  # == Request Headers
  #
  # Request headers may be used to pass additional information to the host,
  # similar to arguments passed in a method call;
  # each header is a name/value pair.
  #
  # Each of the \Net::HTTP methods that sends a request to the host
  # has optional argument +headers+,
  # where the headers are expressed as a hash of field-name/value pairs:
  #
  #   headers = {Accept: 'application/json', Connection: 'Keep-Alive'}
  #   Net::HTTP.get(uri, headers)
  #
  # See lists of both standard request fields and common request fields at
  # {Request Fields}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields].
  # A host may also accept other custom fields.
  #
  # == \HTTP Sessions
  #
  # A _session_ is a connection between a server (host) and a client that:
  #
  # - Is begun by instance method Net::HTTP#start.
  # - May contain any number of requests.
  # - Is ended by instance method Net::HTTP#finish.
  #
  # See example sessions at {Strategies}[rdoc-ref:Net::HTTP@Strategies].
  #
  # === Session Using \Net::HTTP.start
  #
  # If you have many requests to make to a single host (and port),
  # consider using singleton method Net::HTTP.start with a block;
  # the method handles the session automatically by:
  #
  # - Calling #start before block execution.
  # - Executing the block.
  # - Calling #finish after block execution.
  #
  # In the block, you can use these instance methods,
  # each of which that sends a single request:
  #
  # - {HTTP methods}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods]:
  #
  #   - #get, #request_get: GET.
  #   - #head, #request_head: HEAD.
  #   - #post, #request_post: POST.
  #   - #delete: DELETE.
  #   - #options: OPTIONS.
  #   - #trace: TRACE.
  #   - #patch: PATCH.
  #
  # - {WebDAV methods}[https://en.wikipedia.org/wiki/WebDAV#Implementation]:
  #
  #   - #copy: COPY.
  #   - #lock: LOCK.
  #   - #mkcol: MKCOL.
  #   - #move: MOVE.
  #   - #propfind: PROPFIND.
  #   - #proppatch: PROPPATCH.
  #   - #unlock: UNLOCK.
  #
  # === Session Using \Net::HTTP.start and \Net::HTTP.finish
  #
  # You can manage a session manually using methods #start and #finish:
  #
  #   http = Net::HTTP.new(hostname)
  #   http.start
  #   http.get('/todos/1')
  #   http.get('/todos/2')
  #   http.delete('/posts/1')
  #   http.finish # Needed to free resources.
  #
  # === Single-Request Session
  #
  # Certain convenience methods automatically handle a session by:
  #
  # - Creating an \HTTP object
  # - Starting a session.
  # - Sending a single request.
  # - Finishing the session.
  # - Destroying the object.
  #
  # Such methods that send GET requests:
  #
  # - ::get: Returns the string response body.
  # - ::get_print: Writes the string response body to $stdout.
  # - ::get_response: Returns a Net::HTTPResponse object.
  #
  # Such methods that send POST requests:
  #
  # - ::post: Posts data to the host.
  # - ::post_form: Posts form data to the host.
  #
  # == \HTTP Requests and Responses
  #
  # Many of the methods above are convenience methods,
  # each of which sends a request and returns a string
  # without directly using \Net::HTTPRequest and \Net::HTTPResponse objects.
  #
  # You can, however, directly create a request object, send the request,
  # and retrieve the response object; see:
  #
  # - Net::HTTPRequest.
  # - Net::HTTPResponse.
  #
  # == Following Redirection
  #
  # Each returned response is an instance of a subclass of Net::HTTPResponse.
  # See the {response class hierarchy}[rdoc-ref:Net::HTTPResponse@Response+Subclasses].
  #
  # In particular, class Net::HTTPRedirection is the parent
  # of all redirection classes.
  # This allows you to craft a case statement to handle redirections properly:
  #
  #   def fetch(uri, limit = 10)
  #     # You should choose a better exception.
  #     raise ArgumentError, 'Too many HTTP redirects' if limit == 0
  #
  #     res = Net::HTTP.get_response(URI(uri))
  #     case res
  #     when Net::HTTPSuccess     # Any success class.
  #       res
  #     when Net::HTTPRedirection # Any redirection class.
  #       location = res['Location']
  #       warn "Redirected to #{location}"
  #       fetch(location, limit - 1)
  #     else                      # Any other class.
  #       res.value
  #     end
  #   end
  #
  #   fetch(uri)
  #
  # == Basic Authentication
  #
  # Basic authentication is performed according to
  # {RFC2617}[http://www.ietf.org/rfc/rfc2617.txt]:
  #
  #   req = Net::HTTP::Get.new(uri)
  #   req.basic_auth('user', 'pass')
  #   res = Net::HTTP.start(hostname) do |http|
  #     http.request(req)
  #   end
  #
  # == Streaming Response Bodies
  #
  # By default \Net::HTTP reads an entire response into memory.  If you are
  # handling large files or wish to implement a progress bar you can instead
  # stream the body directly to an IO.
  #
  #   Net::HTTP.start(hostname) do |http|
  #     req = Net::HTTP::Get.new(uri)
  #     http.request(req) do |res|
  #       open('t.tmp', 'w') do |f|
  #         res.read_body do |chunk|
  #           f.write chunk
  #         end
  #       end
  #     end
  #   end
  #
  # == HTTPS
  #
  # HTTPS is enabled for an \HTTP connection by Net::HTTP#use_ssl=:
  #
  #   Net::HTTP.start(hostname, :use_ssl => true) do |http|
  #     req = Net::HTTP::Get.new(uri)
  #     res = http.request(req)
  #   end
  #
  # Or if you simply want to make a GET request, you may pass in a URI
  # object that has an \HTTPS URL. \Net::HTTP automatically turns on TLS
  # verification if the URI object has a 'https' URI scheme:
  #
  #   uri # => #<URI::HTTPS https://jsonplaceholder.typicode.com/>
  #   Net::HTTP.get(uri)
  #
  # == Proxy Server
  #
  # An \HTTP object can have
  # a {proxy server}[https://en.wikipedia.org/wiki/Proxy_server].
  #
  # You can create an \HTTP object with a proxy server
  # using method Net::HTTP.new or method Net::HTTP.start.
  #
  # The proxy may be defined either by argument +p_addr+
  # or by environment variable <tt>'http_proxy'</tt>.
  #
  # === Proxy Using Argument +p_addr+ as a \String
  #
  # When argument +p_addr+ is a string hostname,
  # the returned +http+ has the given host as its proxy:
  #
  #   http = Net::HTTP.new(hostname, nil, 'proxy.example')
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => false
  #   http.proxy_address   # => "proxy.example"
  #   # These use default values.
  #   http.proxy_port      # => 80
  #   http.proxy_user      # => nil
  #   http.proxy_pass      # => nil
  #
  # The port, username, and password for the proxy may also be given:
  #
  #   http = Net::HTTP.new(hostname, nil, 'proxy.example', 8000, 'pname', 'ppass')
  #   # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false>
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => false
  #   http.proxy_address   # => "proxy.example"
  #   http.proxy_port      # => 8000
  #   http.proxy_user      # => "pname"
  #   http.proxy_pass      # => "ppass"
  #
  # === Proxy Using '<tt>ENV['http_proxy']</tt>'
  #
  # When environment variable <tt>'http_proxy'</tt>
  # is set to a \URI string,
  # the returned +http+ will have the server at that URI as its proxy;
  # note that the \URI string must have a protocol
  # such as <tt>'http'</tt> or <tt>'https'</tt>:
  #
  #   ENV['http_proxy'] = 'http://example.com'
  #   http = Net::HTTP.new(hostname)
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => true
  #   http.proxy_address   # => "example.com"
  #   # These use default values.
  #   http.proxy_port      # => 80
  #   http.proxy_user      # => nil
  #   http.proxy_pass      # => nil
  #
  # The \URI string may include proxy username, password, and port number:
  #
  #   ENV['http_proxy'] = 'http://pname:ppass@example.com:8000'
  #   http = Net::HTTP.new(hostname)
  #   http.proxy?          # => true
  #   http.proxy_from_env? # => true
  #   http.proxy_address   # => "example.com"
  #   http.proxy_port      # => 8000
  #   http.proxy_user      # => "pname"
  #   http.proxy_pass      # => "ppass"
  #
  # === Filtering Proxies
  #
  # With method Net::HTTP.new (but not Net::HTTP.start),
  # you can use argument +p_no_proxy+ to filter proxies:
  #
  # - Reject a certain address:
  #
  #     http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example')
  #     http.proxy_address # => nil
  #
  # - Reject certain domains or subdomains:
  #
  #     http = Net::HTTP.new('example.com', nil, 'my.proxy.example', 8000, 'pname', 'ppass', 'proxy.example')
  #     http.proxy_address # => nil
  #
  # - Reject certain addresses and port combinations:
  #
  #     http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example:1234')
  #     http.proxy_address # => "proxy.example"
  #
  #     http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example:8000')
  #     http.proxy_address # => nil
  #
  # - Reject a list of the types above delimited using a comma:
  #
  #     http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'my.proxy,proxy.example:8000')
  #     http.proxy_address # => nil
  #
  #     http = Net::HTTP.new('example.com', nil, 'my.proxy', 8000, 'pname', 'ppass', 'my.proxy,proxy.example:8000')
  #     http.proxy_address # => nil
  #
  # == Compression and Decompression
  #
  # \Net::HTTP does not compress the body of a request before sending.
  #
  # By default, \Net::HTTP adds header <tt>'Accept-Encoding'</tt>
  # to a new {request object}[rdoc-ref:Net::HTTPRequest]:
  #
  #   Net::HTTP::Get.new(uri)['Accept-Encoding']
  #   # => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
  #
  # This requests the server to zip-encode the response body if there is one;
  # the server is not required to do so.
  #
  # \Net::HTTP does not automatically decompress a response body
  # if the response has header <tt>'Content-Range'</tt>.
  #
  # Otherwise decompression (or not) depends on the value of header
  # {Content-Encoding}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-encoding-response-header]:
  #
  # - <tt>'deflate'</tt>, <tt>'gzip'</tt>, or <tt>'x-gzip'</tt>:
  #   decompresses the body and deletes the header.
  # - <tt>'none'</tt> or <tt>'identity'</tt>:
  #   does not decompress the body, but deletes the header.
  # - Any other value:
  #   leaves the body and header unchanged.
  #
  # == What's Here
  #
  # First, what's elsewhere. Class Net::HTTP:
  #
  # - Inherits from {class Object}[rdoc-ref:Object@What-27s+Here].
  #
  # This is a categorized summary of methods and attributes.
  #
  # === \Net::HTTP Objects
  #
  # - {::new}[rdoc-ref:Net::HTTP.new]:
  #   Creates a new instance.
  # - {#inspect}[rdoc-ref:Net::HTTP#inspect]:
  #   Returns a string representation of +self+.
  #
  # === Sessions
  #
  # - {::start}[rdoc-ref:Net::HTTP.start]:
  #   Begins a new session in a new \Net::HTTP object.
  # - {#started?}[rdoc-ref:Net::HTTP#started?]:
  #   Returns whether in a session.
  # - {#finish}[rdoc-ref:Net::HTTP#finish]:
  #   Ends an active session.
  # - {#start}[rdoc-ref:Net::HTTP#start]:
  #   Begins a new session in an existing \Net::HTTP object (+self+).
  #
  # === Connections
  #
  # - {:continue_timeout}[rdoc-ref:Net::HTTP#continue_timeout]:
  #   Returns the continue timeout.
  # - {#continue_timeout=}[rdoc-ref:Net::HTTP#continue_timeout=]:
  #   Sets the continue timeout seconds.
  # - {:keep_alive_timeout}[rdoc-ref:Net::HTTP#keep_alive_timeout]:
  #   Returns the keep-alive timeout.
  # - {:keep_alive_timeout=}[rdoc-ref:Net::HTTP#keep_alive_timeout=]:
  #   Sets the keep-alive timeout.
  # - {:max_retries}[rdoc-ref:Net::HTTP#max_retries]:
  #   Returns the maximum retries.
  # - {#max_retries=}[rdoc-ref:Net::HTTP#max_retries=]:
  #   Sets the maximum retries.
  # - {:open_timeout}[rdoc-ref:Net::HTTP#open_timeout]:
  #   Returns the open timeout.
  # - {:open_timeout=}[rdoc-ref:Net::HTTP#open_timeout=]:
  #   Sets the open timeout.
  # - {:read_timeout}[rdoc-ref:Net::HTTP#read_timeout]:
  #   Returns the open timeout.
  # - {:read_timeout=}[rdoc-ref:Net::HTTP#read_timeout=]:
  #   Sets the read timeout.
  # - {:ssl_timeout}[rdoc-ref:Net::HTTP#ssl_timeout]:
  #   Returns the ssl timeout.
  # - {:ssl_timeout=}[rdoc-ref:Net::HTTP#ssl_timeout=]:
  #   Sets the ssl timeout.
  # - {:write_timeout}[rdoc-ref:Net::HTTP#write_timeout]:
  #   Returns the write timeout.
  # - {write_timeout=}[rdoc-ref:Net::HTTP#write_timeout=]:
  #   Sets the write timeout.
  #
  # === Requests
  #
  # - {::get}[rdoc-ref:Net::HTTP.get]:
  #   Sends a GET request and returns the string response body.
  # - {::get_print}[rdoc-ref:Net::HTTP.get_print]:
  #   Sends a GET request and write the string response body to $stdout.
  # - {::get_response}[rdoc-ref:Net::HTTP.get_response]:
  #   Sends a GET request and returns a response object.
  # - {::post_form}[rdoc-ref:Net::HTTP.post_form]:
  #   Sends a POST request with form data and returns a response object.
  # - {::post}[rdoc-ref:Net::HTTP.post]:
  #   Sends a POST request with data and returns a response object.
  # - {::put}[rdoc-ref:Net::HTTP.put]:
  #   Sends a PUT request with data and returns a response object.
  # - {#copy}[rdoc-ref:Net::HTTP#copy]:
  #   Sends a COPY request and returns a response object.
  # - {#delete}[rdoc-ref:Net::HTTP#delete]:
  #   Sends a DELETE request and returns a response object.
  # - {#get}[rdoc-ref:Net::HTTP#get]:
  #   Sends a GET request and returns a response object.
  # - {#head}[rdoc-ref:Net::HTTP#head]:
  #   Sends a HEAD request and returns a response object.
  # - {#lock}[rdoc-ref:Net::HTTP#lock]:
  #   Sends a LOCK request and returns a response object.
  # - {#mkcol}[rdoc-ref:Net::HTTP#mkcol]:
  #   Sends a MKCOL request and returns a response object.
  # - {#move}[rdoc-ref:Net::HTTP#move]:
  #   Sends a MOVE request and returns a response object.
  # - {#options}[rdoc-ref:Net::HTTP#options]:
  #   Sends a OPTIONS request and returns a response object.
  # - {#patch}[rdoc-ref:Net::HTTP#patch]:
  #   Sends a PATCH request and returns a response object.
  # - {#post}[rdoc-ref:Net::HTTP#post]:
  #   Sends a POST request and returns a response object.
  # - {#propfind}[rdoc-ref:Net::HTTP#propfind]:
  #   Sends a PROPFIND request and returns a response object.
  # - {#proppatch}[rdoc-ref:Net::HTTP#proppatch]:
  #   Sends a PROPPATCH request and returns a response object.
  # - {#put}[rdoc-ref:Net::HTTP#put]:
  #   Sends a PUT request and returns a response object.
  # - {#request}[rdoc-ref:Net::HTTP#request]:
  #   Sends a request and returns a response object.
  # - {#request_get}[rdoc-ref:Net::HTTP#request_get]:
  #   Sends a GET request and forms a response object;
  #   if a block given, calls the block with the object,
  #   otherwise returns the object.
  # - {#request_head}[rdoc-ref:Net::HTTP#request_head]:
  #   Sends a HEAD request and forms a response object;
  #   if a block given, calls the block with the object,
  #   otherwise returns the object.
  # - {#request_post}[rdoc-ref:Net::HTTP#request_post]:
  #   Sends a POST request and forms a response object;
  #   if a block given, calls the block with the object,
  #   otherwise returns the object.
  # - {#send_request}[rdoc-ref:Net::HTTP#send_request]:
  #   Sends a request and returns a response object.
  # - {#trace}[rdoc-ref:Net::HTTP#trace]:
  #   Sends a TRACE request and returns a response object.
  # - {#unlock}[rdoc-ref:Net::HTTP#unlock]:
  #   Sends an UNLOCK request and returns a response object.
  #
  # === Responses
  #
  # - {:close_on_empty_response}[rdoc-ref:Net::HTTP#close_on_empty_response]:
  #   Returns whether to close connection on empty response.
  # - {:close_on_empty_response=}[rdoc-ref:Net::HTTP#close_on_empty_response=]:
  #   Sets whether to close connection on empty response.
  # - {:ignore_eof}[rdoc-ref:Net::HTTP#ignore_eof]:
  #   Returns whether to ignore end-of-file when reading a response body
  #   with <tt>Content-Length</tt> headers.
  # - {:ignore_eof=}[rdoc-ref:Net::HTTP#ignore_eof=]:
  #   Sets whether to ignore end-of-file when reading a response body
  #   with <tt>Content-Length</tt> headers.
  # - {:response_body_encoding}[rdoc-ref:Net::HTTP#response_body_encoding]:
  #   Returns the encoding to use for the response body.
  # - {#response_body_encoding=}[rdoc-ref:Net::HTTP#response_body_encoding=]:
  #   Sets the response body encoding.
  #
  # === Proxies
  #
  # - {:proxy_address}[rdoc-ref:Net::HTTP#proxy_address]:
  #   Returns the proxy address.
  # - {:proxy_address=}[rdoc-ref:Net::HTTP#proxy_address=]:
  #   Sets the proxy address.
  # - {::proxy_class?}[rdoc-ref:Net::HTTP.proxy_class?]:
  #   Returns whether +self+ is a proxy class.
  # - {#proxy?}[rdoc-ref:Net::HTTP#proxy?]:
  #   Returns whether +self+ has a proxy.
  # - {#proxy_address}[rdoc-ref:Net::HTTP#proxy_address]:
  #   Returns the proxy address.
  # - {#proxy_from_env?}[rdoc-ref:Net::HTTP#proxy_from_env?]:
  #   Returns whether the proxy is taken from an environment variable.
  # - {:proxy_from_env=}[rdoc-ref:Net::HTTP#proxy_from_env=]:
  #   Sets whether the proxy is to be taken from an environment variable.
  # - {:proxy_pass}[rdoc-ref:Net::HTTP#proxy_pass]:
  #   Returns the proxy password.
  # - {:proxy_pass=}[rdoc-ref:Net::HTTP#proxy_pass=]:
  #   Sets the proxy password.
  # - {:proxy_port}[rdoc-ref:Net::HTTP#proxy_port]:
  #   Returns the proxy port.
  # - {:proxy_port=}[rdoc-ref:Net::HTTP#proxy_port=]:
  #   Sets the proxy port.
  # - {#proxy_user}[rdoc-ref:Net::HTTP#proxy_user]:
  #   Returns the proxy user name.
  # - {:proxy_user=}[rdoc-ref:Net::HTTP#proxy_user=]:
  #   Sets the proxy user.
  #
  # === Security
  #
  # - {:ca_file}[rdoc-ref:Net::HTTP#ca_file]:
  #   Returns the path to a CA certification file.
  # - {:ca_file=}[rdoc-ref:Net::HTTP#ca_file=]:
  #   Sets the path to a CA certification file.
  # - {:ca_path}[rdoc-ref:Net::HTTP#ca_path]:
  #   Returns the path of to CA directory containing certification files.
  # - {:ca_path=}[rdoc-ref:Net::HTTP#ca_path=]:
  #   Sets the path of to CA directory containing certification files.
  # - {:cert}[rdoc-ref:Net::HTTP#cert]:
  #   Returns the OpenSSL::X509::Certificate object to be used for client certification.
  # - {:cert=}[rdoc-ref:Net::HTTP#cert=]:
  #   Sets the OpenSSL::X509::Certificate object to be used for client certification.
  # - {:cert_store}[rdoc-ref:Net::HTTP#cert_store]:
  #   Returns the X509::Store to be used for verifying peer certificate.
  # - {:cert_store=}[rdoc-ref:Net::HTTP#cert_store=]:
  #   Sets the X509::Store to be used for verifying peer certificate.
  # - {:ciphers}[rdoc-ref:Net::HTTP#ciphers]:
  #   Returns the available SSL ciphers.
  # - {:ciphers=}[rdoc-ref:Net::HTTP#ciphers=]:
  #   Sets the available SSL ciphers.
  # - {:extra_chain_cert}[rdoc-ref:Net::HTTP#extra_chain_cert]:
  #   Returns the extra X509 certificates to be added to the certificate chain.
  # - {:extra_chain_cert=}[rdoc-ref:Net::HTTP#extra_chain_cert=]:
  #   Sets the extra X509 certificates to be added to the certificate chain.
  # - {:key}[rdoc-ref:Net::HTTP#key]:
  #   Returns the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
  # - {:key=}[rdoc-ref:Net::HTTP#key=]:
  #   Sets the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
  # - {:max_version}[rdoc-ref:Net::HTTP#max_version]:
  #   Returns the maximum SSL version.
  # - {:max_version=}[rdoc-ref:Net::HTTP#max_version=]:
  #   Sets the maximum SSL version.
  # - {:min_version}[rdoc-ref:Net::HTTP#min_version]:
  #   Returns the minimum SSL version.
  # - {:min_version=}[rdoc-ref:Net::HTTP#min_version=]:
  #   Sets the minimum SSL version.
  # - {#peer_cert}[rdoc-ref:Net::HTTP#peer_cert]:
  #   Returns the X509 certificate chain for the session's socket peer.
  # - {:ssl_version}[rdoc-ref:Net::HTTP#ssl_version]:
  #   Returns the SSL version.
  # - {:ssl_version=}[rdoc-ref:Net::HTTP#ssl_version=]:
  #   Sets the SSL version.
  # - {#use_ssl=}[rdoc-ref:Net::HTTP#use_ssl=]:
  #   Sets whether a new session is to use Transport Layer Security.
  # - {#use_ssl?}[rdoc-ref:Net::HTTP#use_ssl?]:
  #   Returns whether +self+ uses SSL.
  # - {:verify_callback}[rdoc-ref:Net::HTTP#verify_callback]:
  #   Returns the callback for the server certification verification.
  # - {:verify_callback=}[rdoc-ref:Net::HTTP#verify_callback=]:
  #   Sets the callback for the server certification verification.
  # - {:verify_depth}[rdoc-ref:Net::HTTP#verify_depth]:
  #   Returns the maximum depth for the certificate chain verification.
  # - {:verify_depth=}[rdoc-ref:Net::HTTP#verify_depth=]:
  #   Sets the maximum depth for the certificate chain verification.
  # - {:verify_hostname}[rdoc-ref:Net::HTTP#verify_hostname]:
  #   Returns the flags for server the certification verification at the beginning of the SSL/TLS session.
  # - {:verify_hostname=}[rdoc-ref:Net::HTTP#verify_hostname=]:
  #   Sets he flags for server the certification verification at the beginning of the SSL/TLS session.
  # - {:verify_mode}[rdoc-ref:Net::HTTP#verify_mode]:
  #   Returns the flags for server the certification verification at the beginning of the SSL/TLS session.
  # - {:verify_mode=}[rdoc-ref:Net::HTTP#verify_mode=]:
  #   Sets the flags for server the certification verification at the beginning of the SSL/TLS session.
  #
  # === Addresses and Ports
  #
  # - {:address}[rdoc-ref:Net::HTTP#address]:
  #   Returns the string host name or host IP.
  # - {::default_port}[rdoc-ref:Net::HTTP.default_port]:
  #   Returns integer 80, the default port to use for HTTP requests.
  # - {::http_default_port}[rdoc-ref:Net::HTTP.http_default_port]:
  #   Returns integer 80, the default port to use for HTTP requests.
  # - {::https_default_port}[rdoc-ref:Net::HTTP.https_default_port]:
  #   Returns integer 443, the default port to use for HTTPS requests.
  # - {#ipaddr}[rdoc-ref:Net::HTTP#ipaddr]:
  #   Returns the IP address for the connection.
  # - {#ipaddr=}[rdoc-ref:Net::HTTP#ipaddr=]:
  #   Sets the IP address for the connection.
  # - {:local_host}[rdoc-ref:Net::HTTP#local_host]:
  #   Returns the string local host used to establish the connection.
  # - {:local_host=}[rdoc-ref:Net::HTTP#local_host=]:
  #   Sets the string local host used to establish the connection.
  # - {:local_port}[rdoc-ref:Net::HTTP#local_port]:
  #   Returns the integer local port used to establish the connection.
  # - {:local_port=}[rdoc-ref:Net::HTTP#local_port=]:
  #   Sets the integer local port used to establish the connection.
  # - {:port}[rdoc-ref:Net::HTTP#port]:
  #   Returns the integer port number.
  #
  # === \HTTP Version
  #
  # - {::version_1_2?}[rdoc-ref:Net::HTTP.version_1_2?]
  #   (aliased as {::version_1_2}[rdoc-ref:Net::HTTP.version_1_2]):
  #   Returns true; retained for compatibility.
  #
  # === Debugging
  #
  # - {#set_debug_output}[rdoc-ref:Net::HTTP#set_debug_output]:
  #   Sets the output stream for debugging.
  #
  class HTTP < Protocol

    # :stopdoc:
    VERSION = "0.6.0"
    HTTPVersion = '1.1'
    begin
      require 'zlib'
      HAVE_ZLIB=true
    rescue LoadError
      HAVE_ZLIB=false
    end
    # :startdoc:

    # Returns +true+; retained for compatibility.
    def HTTP.version_1_2
      true
    end

    # Returns +true+; retained for compatibility.
    def HTTP.version_1_2?
      true
    end

    # Returns +false+; retained for compatibility.
    def HTTP.version_1_1?  #:nodoc:
      false
    end

    class << HTTP
      alias is_version_1_1? version_1_1?   #:nodoc:
      alias is_version_1_2? version_1_2?   #:nodoc:
    end

    # :call-seq:
    #   Net::HTTP.get_print(hostname, path, port = 80) -> nil
    #   Net::HTTP:get_print(uri, headers = {}, port = uri.port) -> nil
    #
    # Like Net::HTTP.get, but writes the returned body to $stdout;
    # returns +nil+.
    def HTTP.get_print(uri_or_host, path_or_headers = nil, port = nil)
      get_response(uri_or_host, path_or_headers, port) {|res|
        res.read_body do |chunk|
          $stdout.print chunk
        end
      }
      nil
    end

    # :call-seq:
    #   Net::HTTP.get(hostname, path, port = 80) -> body
    #   Net::HTTP:get(uri, headers = {}, port = uri.port) -> body
    #
    # Sends a GET request and returns the \HTTP response body as a string.
    #
    # With string arguments +hostname+ and +path+:
    #
    #   hostname = 'jsonplaceholder.typicode.com'
    #   path = '/todos/1'
    #   puts Net::HTTP.get(hostname, path)
    #
    # Output:
    #
    #   {
    #     "userId": 1,
    #     "id": 1,
    #     "title": "delectus aut autem",
    #     "completed": false
    #   }
    #
    # With URI object +uri+ and optional hash argument +headers+:
    #
    #   uri = URI('https://jsonplaceholder.typicode.com/todos/1')
    #   headers = {'Content-type' => 'application/json; charset=UTF-8'}
    #   Net::HTTP.get(uri, headers)
    #
    # Related:
    #
    # - Net::HTTP::Get: request class for \HTTP method +GET+.
    # - Net::HTTP#get: convenience method for \HTTP method +GET+.
    #
    def HTTP.get(uri_or_host, path_or_headers = nil, port = nil)
      get_response(uri_or_host, path_or_headers, port).body
    end

    # :call-seq:
    #   Net::HTTP.get_response(hostname, path, port = 80) -> http_response
    #   Net::HTTP:get_response(uri, headers = {}, port = uri.port) -> http_response
    #
    # Like Net::HTTP.get, but returns a Net::HTTPResponse object
    # instead of the body string.
    def HTTP.get_response(uri_or_host, path_or_headers = nil, port = nil, &block)
      if path_or_headers && !path_or_headers.is_a?(Hash)
        host = uri_or_host
        path = path_or_headers
        new(host, port || HTTP.default_port).start {|http|
          return http.request_get(path, &block)
        }
      else
        uri = uri_or_host
        headers = path_or_headers
        start(uri.hostname, uri.port,
              :use_ssl => uri.scheme == 'https') {|http|
          return http.request_get(uri, headers, &block)
        }
      end
    end

    # Posts data to a host; returns a Net::HTTPResponse object.
    #
    # Argument +url+ must be a URL;
    # argument +data+ must be a string:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   data = '{"title": "foo", "body": "bar", "userId": 1}'
    #   headers = {'content-type': 'application/json'}
    #   res = Net::HTTP.post(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true>
    #   puts res.body
    #
    # Output:
    #
    #   {
    #     "title": "foo",
    #     "body": "bar",
    #     "userId": 1,
    #     "id": 101
    #   }
    #
    # Related:
    #
    # - Net::HTTP::Post: request class for \HTTP method +POST+.
    # - Net::HTTP#post: convenience method for \HTTP method +POST+.
    #
    def HTTP.post(url, data, header = nil)
      start(url.hostname, url.port,
            :use_ssl => url.scheme == 'https' ) {|http|
        http.post(url, data, header)
      }
    end

    # Posts data to a host; returns a Net::HTTPResponse object.
    #
    # Argument +url+ must be a URI;
    # argument +data+ must be a hash:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   data = {title: 'foo', body: 'bar', userId: 1}
    #   res = Net::HTTP.post_form(_uri, data) # => #<Net::HTTPCreated 201 Created readbody=true>
    #   puts res.body
    #
    # Output:
    #
    #   {
    #     "title": "foo",
    #     "body": "bar",
    #     "userId": "1",
    #     "id": 101
    #   }
    #
    def HTTP.post_form(url, params)
      req = Post.new(url)
      req.form_data = params
      req.basic_auth url.user, url.password if url.user
      start(url.hostname, url.port,
            :use_ssl => url.scheme == 'https' ) {|http|
        http.request(req)
      }
    end

    # Sends a PUT request to the server; returns a Net::HTTPResponse object.
    #
    # Argument +url+ must be a URL;
    # argument +data+ must be a string:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   data = '{"title": "foo", "body": "bar", "userId": 1}'
    #   headers = {'content-type': 'application/json'}
    #   res = Net::HTTP.put(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true>
    #   puts res.body
    #
    # Output:
    #
    #   {
    #     "title": "foo",
    #     "body": "bar",
    #     "userId": 1,
    #     "id": 101
    #   }
    #
    # Related:
    #
    # - Net::HTTP::Put: request class for \HTTP method +PUT+.
    # - Net::HTTP#put: convenience method for \HTTP method +PUT+.
    #
    def HTTP.put(url, data, header = nil)
      start(url.hostname, url.port,
            :use_ssl => url.scheme == 'https' ) {|http|
        http.put(url, data, header)
      }
    end

    #
    # \HTTP session management
    #

    # Returns integer +80+, the default port to use for \HTTP requests:
    #
    #   Net::HTTP.default_port # => 80
    #
    def HTTP.default_port
      http_default_port()
    end

    # Returns integer +80+, the default port to use for \HTTP requests:
    #
    #   Net::HTTP.http_default_port # => 80
    #
    def HTTP.http_default_port
      80
    end

    # Returns integer +443+, the default port to use for HTTPS requests:
    #
    #   Net::HTTP.https_default_port # => 443
    #
    def HTTP.https_default_port
      443
    end

    def HTTP.socket_type   #:nodoc: obsolete
      BufferedIO
    end

    # :call-seq:
    #   HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) -> http
    #   HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) {|http| ... } -> object
    #
    # Creates a new \Net::HTTP object, +http+, via \Net::HTTP.new:
    #
    # - For arguments +address+ and +port+, see Net::HTTP.new.
    # - For proxy-defining arguments +p_addr+ through +p_pass+,
    #   see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    # - For argument +opts+, see below.
    #
    # With no block given:
    #
    # - Calls <tt>http.start</tt> with no block (see #start),
    #   which opens a TCP connection and \HTTP session.
    # - Returns +http+.
    # - The caller should call #finish to close the session:
    #
    #     http = Net::HTTP.start(hostname)
    #     http.started? # => true
    #     http.finish
    #     http.started? # => false
    #
    # With a block given:
    #
    # - Calls <tt>http.start</tt> with the block (see #start), which:
    #
    #   - Opens a TCP connection and \HTTP session.
    #   - Calls the block,
    #     which may make any number of requests to the host.
    #   - Closes the \HTTP session and TCP connection on block exit.
    #   - Returns the block's value +object+.
    #
    # - Returns +object+.
    #
    # Example:
    #
    #   hostname = 'jsonplaceholder.typicode.com'
    #   Net::HTTP.start(hostname) do |http|
    #     puts http.get('/todos/1').body
    #     puts http.get('/todos/2').body
    #   end
    #
    # Output:
    #
    #   {
    #     "userId": 1,
    #     "id": 1,
    #     "title": "delectus aut autem",
    #     "completed": false
    #   }
    #   {
    #     "userId": 1,
    #     "id": 2,
    #     "title": "quis ut nam facilis et officia qui",
    #     "completed": false
    #   }
    #
    # If the last argument given is a hash, it is the +opts+ hash,
    # where each key is a method or accessor to be called,
    # and its value is the value to be set.
    #
    # The keys may include:
    #
    # - #ca_file
    # - #ca_path
    # - #cert
    # - #cert_store
    # - #ciphers
    # - #close_on_empty_response
    # - +ipaddr+ (calls #ipaddr=)
    # - #keep_alive_timeout
    # - #key
    # - #open_timeout
    # - #read_timeout
    # - #ssl_timeout
    # - #ssl_version
    # - +use_ssl+ (calls #use_ssl=)
    # - #verify_callback
    # - #verify_depth
    # - #verify_mode
    # - #write_timeout
    #
    # Note: If +port+ is +nil+ and <tt>opts[:use_ssl]</tt> is a truthy value,
    # the value passed to +new+ is Net::HTTP.https_default_port, not +port+.
    #
    def HTTP.start(address, *arg, &block) # :yield: +http+
      arg.pop if opt = Hash.try_convert(arg[-1])
      port, p_addr, p_port, p_user, p_pass = *arg
      p_addr = :ENV if arg.size < 2
      port = https_default_port if !port && opt && opt[:use_ssl]
      http = new(address, port, p_addr, p_port, p_user, p_pass)
      http.ipaddr = opt[:ipaddr] if opt && opt[:ipaddr]

      if opt
        if opt[:use_ssl]
          opt = {verify_mode: OpenSSL::SSL::VERIFY_PEER}.update(opt)
        end
        http.methods.grep(/\A(\w+)=\z/) do |meth|
          key = $1.to_sym
          opt.key?(key) or next
          http.__send__(meth, opt[key])
        end
      end

      http.start(&block)
    end

    class << HTTP
      alias newobj new # :nodoc:
    end

    # Returns a new \Net::HTTP object +http+
    # (but does not open a TCP connection or \HTTP session).
    #
    # With only string argument +address+ given
    # (and <tt>ENV['http_proxy']</tt> undefined or +nil+),
    # the returned +http+:
    #
    # - Has the given address.
    # - Has the default port number, Net::HTTP.default_port (80).
    # - Has no proxy.
    #
    # Example:
    #
    #   http = Net::HTTP.new(hostname)
    #   # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false>
    #   http.address # => "jsonplaceholder.typicode.com"
    #   http.port    # => 80
    #   http.proxy?  # => false
    #
    # With integer argument +port+ also given,
    # the returned +http+ has the given port:
    #
    #   http = Net::HTTP.new(hostname, 8000)
    #   # => #<Net::HTTP jsonplaceholder.typicode.com:8000 open=false>
    #   http.port # => 8000
    #
    # For proxy-defining arguments +p_addr+ through +p_no_proxy+,
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    #
    def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil, p_use_ssl = nil)
      http = super address, port

      if proxy_class? then # from Net::HTTP::Proxy()
        http.proxy_from_env = @proxy_from_env
        http.proxy_address  = @proxy_address
        http.proxy_port     = @proxy_port
        http.proxy_user     = @proxy_user
        http.proxy_pass     = @proxy_pass
        http.proxy_use_ssl  = @proxy_use_ssl
      elsif p_addr == :ENV then
        http.proxy_from_env = true
      else
        if p_addr && p_no_proxy && !URI::Generic.use_proxy?(address, address, port, p_no_proxy)
          p_addr = nil
          p_port = nil
        end
        http.proxy_address = p_addr
        http.proxy_port    = p_port || default_port
        http.proxy_user    = p_user
        http.proxy_pass    = p_pass
        http.proxy_use_ssl = p_use_ssl
      end

      http
    end

    class << HTTP
      # Allows to set the default configuration that will be used
      # when creating a new connection.
      #
      # Example:
      #
      #   Net::HTTP.default_configuration = {
      #     read_timeout: 1,
      #     write_timeout: 1
      #   }
      #   http = Net::HTTP.new(hostname)
      #   http.open_timeout   # => 60
      #   http.read_timeout   # => 1
      #   http.write_timeout  # => 1
      #
      attr_accessor :default_configuration
    end

    # Creates a new \Net::HTTP object for the specified server address,
    # without opening the TCP connection or initializing the \HTTP session.
    # The +address+ should be a DNS hostname or IP address.
    def initialize(address, port = nil) # :nodoc:
      defaults = {
        keep_alive_timeout: 2,
        close_on_empty_response: false,
        open_timeout: 60,
        read_timeout: 60,
        write_timeout: 60,
        continue_timeout: nil,
        max_retries: 1,
        debug_output: nil,
        response_body_encoding: false,
        ignore_eof: true
      }
      options = defaults.merge(self.class.default_configuration || {})

      @address = address
      @port    = (port || HTTP.default_port)
      @ipaddr = nil
      @local_host = nil
      @local_port = nil
      @curr_http_version = HTTPVersion
      @keep_alive_timeout = options[:keep_alive_timeout]
      @last_communicated = nil
      @close_on_empty_response = options[:close_on_empty_response]
      @socket  = nil
      @started = false
      @open_timeout = options[:open_timeout]
      @read_timeout = options[:read_timeout]
      @write_timeout = options[:write_timeout]
      @continue_timeout = options[:continue_timeout]
      @max_retries = options[:max_retries]
      @debug_output = options[:debug_output]
      @response_body_encoding = options[:response_body_encoding]
      @ignore_eof = options[:ignore_eof]

      @proxy_from_env = false
      @proxy_uri      = nil
      @proxy_address  = nil
      @proxy_port     = nil
      @proxy_user     = nil
      @proxy_pass     = nil
      @proxy_use_ssl  = nil

      @use_ssl = false
      @ssl_context = nil
      @ssl_session = nil
      @sspi_enabled = false
      SSL_IVNAMES.each do |ivname|
        instance_variable_set ivname, nil
      end
    end

    # Returns a string representation of +self+:
    #
    #   Net::HTTP.new(hostname).inspect
    #   # => "#<Net::HTTP jsonplaceholder.typicode.com:80 open=false>"
    #
    def inspect
      "#<#{self.class} #{@address}:#{@port} open=#{started?}>"
    end

    # *WARNING* This method opens a serious security hole.
    # Never use this method in production code.
    #
    # Sets the output stream for debugging:
    #
    #   http = Net::HTTP.new(hostname)
    #   File.open('t.tmp', 'w') do |file|
    #     http.set_debug_output(file)
    #     http.start
    #     http.get('/nosuch/1')
    #     http.finish
    #   end
    #   puts File.read('t.tmp')
    #
    # Output:
    #
    #   opening connection to jsonplaceholder.typicode.com:80...
    #   opened
    #   <- "GET /nosuch/1 HTTP/1.1\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: jsonplaceholder.typicode.com\r\n\r\n"
    #   -> "HTTP/1.1 404 Not Found\r\n"
    #   -> "Date: Mon, 12 Dec 2022 21:14:11 GMT\r\n"
    #   -> "Content-Type: application/json; charset=utf-8\r\n"
    #   -> "Content-Length: 2\r\n"
    #   -> "Connection: keep-alive\r\n"
    #   -> "X-Powered-By: Express\r\n"
    #   -> "X-Ratelimit-Limit: 1000\r\n"
    #   -> "X-Ratelimit-Remaining: 999\r\n"
    #   -> "X-Ratelimit-Reset: 1670879660\r\n"
    #   -> "Vary: Origin, Accept-Encoding\r\n"
    #   -> "Access-Control-Allow-Credentials: true\r\n"
    #   -> "Cache-Control: max-age=43200\r\n"
    #   -> "Pragma: no-cache\r\n"
    #   -> "Expires: -1\r\n"
    #   -> "X-Content-Type-Options: nosniff\r\n"
    #   -> "Etag: W/\"2-vyGp6PvFo4RvsFtPoIWeCReyIC8\"\r\n"
    #   -> "Via: 1.1 vegur\r\n"
    #   -> "CF-Cache-Status: MISS\r\n"
    #   -> "Server-Timing: cf-q-config;dur=1.3000000762986e-05\r\n"
    #   -> "Report-To: {\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=yOr40jo%2BwS1KHzhTlVpl54beJ5Wx2FcG4gGV0XVrh3X9OlR5q4drUn2dkt5DGO4GDcE%2BVXT7CNgJvGs%2BZleIyMu8CLieFiDIvOviOY3EhHg94m0ZNZgrEdpKD0S85S507l1vsEwEHkoTm%2Ff19SiO\"}],\"group\":\"cf-nel\",\"max_age\":604800}\r\n"
    #   -> "NEL: {\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}\r\n"
    #   -> "Server: cloudflare\r\n"
    #   -> "CF-RAY: 778977dc484ce591-DFW\r\n"
    #   -> "alt-svc: h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400\r\n"
    #   -> "\r\n"
    #   reading 2 bytes...
    #   -> "{}"
    #   read 2 bytes
    #   Conn keep-alive
    #
    def set_debug_output(output)
      warn 'Net::HTTP#set_debug_output called after HTTP started', uplevel: 1 if started?
      @debug_output = output
    end

    # Returns the string host name or host IP given as argument +address+ in ::new.
    attr_reader :address

    # Returns the integer port number given as argument +port+ in ::new.
    attr_reader :port

    # Sets or returns the string local host used to establish the connection;
    # initially +nil+.
    attr_accessor :local_host

    # Sets or returns the integer local port used to establish the connection;
    # initially +nil+.
    attr_accessor :local_port

    # Returns the encoding to use for the response body;
    # see #response_body_encoding=.
    attr_reader :response_body_encoding

    # Sets the encoding to be used for the response body;
    # returns the encoding.
    #
    # The given +value+ may be:
    #
    # - An Encoding object.
    # - The name of an encoding.
    # - An alias for an encoding name.
    #
    # See {Encoding}[rdoc-ref:Encoding].
    #
    # Examples:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.response_body_encoding = Encoding::US_ASCII # => #<Encoding:US-ASCII>
    #   http.response_body_encoding = 'US-ASCII'         # => "US-ASCII"
    #   http.response_body_encoding = 'ASCII'            # => "ASCII"
    #
    def response_body_encoding=(value)
      value = Encoding.find(value) if value.is_a?(String)
      @response_body_encoding = value
    end

    # Sets whether to determine the proxy from environment variable
    # '<tt>ENV['http_proxy']</tt>';
    # see {Proxy Using ENV['http_proxy']}[rdoc-ref:Net::HTTP@Proxy+Using+-27ENV-5B-27http_proxy-27-5D-27].
    attr_writer :proxy_from_env

    # Sets the proxy address;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    attr_writer :proxy_address

    # Sets the proxy port;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    attr_writer :proxy_port

    # Sets the proxy user;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    attr_writer :proxy_user

    # Sets the proxy password;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    attr_writer :proxy_pass
    attr_writer :proxy_use_ssl

    # Returns the IP address for the connection.
    #
    # If the session has not been started,
    # returns the value set by #ipaddr=,
    # or +nil+ if it has not been set:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.ipaddr # => nil
    #   http.ipaddr = '172.67.155.76'
    #   http.ipaddr # => "172.67.155.76"
    #
    # If the session has been started,
    # returns the IP address from the socket:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.start
    #   http.ipaddr # => "172.67.155.76"
    #   http.finish
    #
    def ipaddr
      started? ?  @socket.io.peeraddr[3] : @ipaddr
    end

    # Sets the IP address for the connection:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.ipaddr # => nil
    #   http.ipaddr = '172.67.155.76'
    #   http.ipaddr # => "172.67.155.76"
    #
    # The IP address may not be set if the session has been started.
    def ipaddr=(addr)
      raise IOError, "ipaddr value changed, but session already started" if started?
      @ipaddr = addr
    end

    # Sets or returns the numeric (\Integer or \Float) number of seconds
    # to wait for a connection to open;
    # initially 60.
    # If the connection is not made in the given interval,
    # an exception is raised.
    attr_accessor :open_timeout

    # Returns the numeric (\Integer or \Float) number of seconds
    # to wait for one block to be read (via one read(2) call);
    # see #read_timeout=.
    attr_reader :read_timeout

    # Returns the numeric (\Integer or \Float) number of seconds
    # to wait for one block to be written (via one write(2) call);
    # see #write_timeout=.
    attr_reader :write_timeout

    # Sets the maximum number of times to retry an idempotent request in case of
    # \Net::ReadTimeout, IOError, EOFError, Errno::ECONNRESET,
    # Errno::ECONNABORTED, Errno::EPIPE, OpenSSL::SSL::SSLError,
    # Timeout::Error.
    # The initial value is 1.
    #
    # Argument +retries+ must be a non-negative numeric value:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.max_retries = 2   # => 2
    #   http.max_retries       # => 2
    #
    def max_retries=(retries)
      retries = retries.to_int
      if retries < 0
        raise ArgumentError, 'max_retries should be non-negative integer number'
      end
      @max_retries = retries
    end

    # Returns the maximum number of times to retry an idempotent request;
    # see #max_retries=.
    attr_reader :max_retries

    # Sets the read timeout, in seconds, for +self+ to integer +sec+;
    # the initial value is 60.
    #
    # Argument +sec+ must be a non-negative numeric value:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.read_timeout # => 60
    #   http.get('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true>
    #   http.read_timeout = 0
    #   http.get('/todos/1') # Raises Net::ReadTimeout.
    #
    def read_timeout=(sec)
      @socket.read_timeout = sec if @socket
      @read_timeout = sec
    end

    # Sets the write timeout, in seconds, for +self+ to integer +sec+;
    # the initial value is 60.
    #
    # Argument +sec+ must be a non-negative numeric value:
    #
    #   _uri = uri.dup
    #   _uri.path = '/posts'
    #   body = 'bar' * 200000
    #   data = <<EOF
    #   {"title": "foo", "body": "#{body}", "userId": "1"}
    #   EOF
    #   headers = {'content-type': 'application/json'}
    #   http = Net::HTTP.new(hostname)
    #   http.write_timeout # => 60
    #   http.post(_uri.path, data, headers)
    #   # => #<Net::HTTPCreated 201 Created readbody=true>
    #   http.write_timeout = 0
    #   http.post(_uri.path, data, headers) # Raises Net::WriteTimeout.
    #
    def write_timeout=(sec)
      @socket.write_timeout = sec if @socket
      @write_timeout = sec
    end

    # Returns the continue timeout value;
    # see continue_timeout=.
    attr_reader :continue_timeout

    # Sets the continue timeout value,
    # which is the number of seconds to wait for an expected 100 Continue response.
    # If the \HTTP object does not receive a response in this many seconds
    # it sends the request body.
    def continue_timeout=(sec)
      @socket.continue_timeout = sec if @socket
      @continue_timeout = sec
    end

    # Sets or returns the numeric (\Integer or \Float) number of seconds
    # to keep the connection open after a request is sent;
    # initially 2.
    # If a new request is made during the given interval,
    # the still-open connection is used;
    # otherwise the connection will have been closed
    # and a new connection is opened.
    attr_accessor :keep_alive_timeout

    # Sets or returns whether to ignore end-of-file when reading a response body
    # with <tt>Content-Length</tt> headers;
    # initially +true+.
    attr_accessor :ignore_eof

    # Returns +true+ if the \HTTP session has been started:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.started? # => false
    #   http.start
    #   http.started? # => true
    #   http.finish # => nil
    #   http.started? # => false
    #
    #   Net::HTTP.start(hostname) do |http|
    #     http.started?
    #   end # => true
    #   http.started? # => false
    #
    def started?
      @started
    end

    alias active? started?   #:nodoc: obsolete

    # Sets or returns whether to close the connection when the response is empty;
    # initially +false+.
    attr_accessor :close_on_empty_response

    # Returns +true+ if +self+ uses SSL, +false+ otherwise.
    # See Net::HTTP#use_ssl=.
    def use_ssl?
      @use_ssl
    end

    # Sets whether a new session is to use
    # {Transport Layer Security}[https://en.wikipedia.org/wiki/Transport_Layer_Security]:
    #
    # Raises IOError if attempting to change during a session.
    #
    # Raises OpenSSL::SSL::SSLError if the port is not an HTTPS port.
    def use_ssl=(flag)
      flag = flag ? true : false
      if started? and @use_ssl != flag
        raise IOError, "use_ssl value changed, but session already started"
      end
      @use_ssl = flag
    end

    SSL_ATTRIBUTES = [
      :ca_file,
      :ca_path,
      :cert,
      :cert_store,
      :ciphers,
      :extra_chain_cert,
      :key,
      :ssl_timeout,
      :ssl_version,
      :min_version,
      :max_version,
      :verify_callback,
      :verify_depth,
      :verify_mode,
      :verify_hostname,
    ] # :nodoc:

    SSL_IVNAMES = SSL_ATTRIBUTES.map { |a| "@#{a}".to_sym } # :nodoc:

    # Sets or returns the path to a CA certification file in PEM format.
    attr_accessor :ca_file

    # Sets or returns the path of to CA directory
    # containing certification files in PEM format.
    attr_accessor :ca_path

    # Sets or returns the OpenSSL::X509::Certificate object
    # to be used for client certification.
    attr_accessor :cert

    # Sets or returns the X509::Store to be used for verifying peer certificate.
    attr_accessor :cert_store

    # Sets or returns the available SSL ciphers.
    # See {OpenSSL::SSL::SSLContext#ciphers=}[OpenSSL::SSL::SSL::Context#ciphers=].
    attr_accessor :ciphers

    # Sets or returns the extra X509 certificates to be added to the certificate chain.
    # See {OpenSSL::SSL::SSLContext#add_certificate}[OpenSSL::SSL::SSL::Context#add_certificate].
    attr_accessor :extra_chain_cert

    # Sets or returns the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
    attr_accessor :key

    # Sets or returns the SSL timeout seconds.
    attr_accessor :ssl_timeout

    # Sets or returns the SSL version.
    # See {OpenSSL::SSL::SSLContext#ssl_version=}[OpenSSL::SSL::SSL::Context#ssl_version=].
    attr_accessor :ssl_version

    # Sets or returns the minimum SSL version.
    # See {OpenSSL::SSL::SSLContext#min_version=}[OpenSSL::SSL::SSL::Context#min_version=].
    attr_accessor :min_version

    # Sets or returns the maximum SSL version.
    # See {OpenSSL::SSL::SSLContext#max_version=}[OpenSSL::SSL::SSL::Context#max_version=].
    attr_accessor :max_version

    # Sets or returns the callback for the server certification verification.
    attr_accessor :verify_callback

    # Sets or returns the maximum depth for the certificate chain verification.
    attr_accessor :verify_depth

    # Sets or returns the flags for server the certification verification
    # at the beginning of the SSL/TLS session.
    # OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER are acceptable.
    attr_accessor :verify_mode

    # Sets or returns whether to verify that the server certificate is valid
    # for the hostname.
    # See {OpenSSL::SSL::SSLContext#verify_hostname=}[OpenSSL::SSL::SSL::Context#verify_hostname=].
    attr_accessor :verify_hostname

    # Returns the X509 certificate chain (an array of strings)
    # for the session's socket peer,
    # or +nil+ if none.
    def peer_cert
      if not use_ssl? or not @socket
        return nil
      end
      @socket.io.peer_cert
    end

    # Starts an \HTTP session.
    #
    # Without a block, returns +self+:
    #
    #   http = Net::HTTP.new(hostname)
    #   # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false>
    #   http.start
    #   # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=true>
    #   http.started? # => true
    #   http.finish
    #
    # With a block, calls the block with +self+,
    # finishes the session when the block exits,
    # and returns the block's value:
    #
    #   http.start do |http|
    #     http
    #   end
    #   # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false>
    #   http.started? # => false
    #
    def start  # :yield: http
      raise IOError, 'HTTP session already opened' if @started
      if block_given?
        begin
          do_start
          return yield(self)
        ensure
          do_finish
        end
      end
      do_start
      self
    end

    def do_start
      connect
      @started = true
    end
    private :do_start

    def connect
      if use_ssl?
        # reference early to load OpenSSL before connecting,
        # as OpenSSL may take time to load.
        @ssl_context = OpenSSL::SSL::SSLContext.new
      end

      if proxy? then
        conn_addr = proxy_address
        conn_port = proxy_port
      else
        conn_addr = conn_address
        conn_port = port
      end

      debug "opening connection to #{conn_addr}:#{conn_port}..."
      s = Timeout.timeout(@open_timeout, Net::OpenTimeout) {
        begin
          TCPSocket.open(conn_addr, conn_port, @local_host, @local_port)
        rescue => e
          raise e, "Failed to open TCP connection to " +
            "#{conn_addr}:#{conn_port} (#{e.message})"
        end
      }
      s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
      debug "opened"
      if use_ssl?
        if proxy?
          if @proxy_use_ssl
            proxy_sock = OpenSSL::SSL::SSLSocket.new(s)
            ssl_socket_connect(proxy_sock, @open_timeout)
          else
            proxy_sock = s
          end
          proxy_sock = BufferedIO.new(proxy_sock, read_timeout: @read_timeout,
                                      write_timeout: @write_timeout,
                                      continue_timeout: @continue_timeout,
                                      debug_output: @debug_output)
          buf = +"CONNECT #{conn_address}:#{@port} HTTP/#{HTTPVersion}\r\n" \
            "Host: #{@address}:#{@port}\r\n"
          if proxy_user
            credential = ["#{proxy_user}:#{proxy_pass}"].pack('m0')
            buf << "Proxy-Authorization: Basic #{credential}\r\n"
          end
          buf << "\r\n"
          proxy_sock.write(buf)
          HTTPResponse.read_new(proxy_sock).value
          # assuming nothing left in buffers after successful CONNECT response
        end

        ssl_parameters = Hash.new
        iv_list = instance_variables
        SSL_IVNAMES.each_with_index do |ivname, i|
          if iv_list.include?(ivname)
            value = instance_variable_get(ivname)
            unless value.nil?
              ssl_parameters[SSL_ATTRIBUTES[i]] = value
            end
          end
        end
        @ssl_context.set_params(ssl_parameters)
        unless @ssl_context.session_cache_mode.nil? # a dummy method on JRuby
          @ssl_context.session_cache_mode =
              OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT |
                  OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_STORE
        end
        if @ssl_context.respond_to?(:session_new_cb) # not implemented under JRuby
          @ssl_context.session_new_cb = proc {|sock, sess| @ssl_session = sess }
        end

        # Still do the post_connection_check below even if connecting
        # to IP address
        verify_hostname = @ssl_context.verify_hostname

        # Server Name Indication (SNI) RFC 3546/6066
        case @address
        when Resolv::IPv4::Regex, Resolv::IPv6::Regex
          # don't set SNI, as IP addresses in SNI is not valid
          # per RFC 6066, section 3.

          # Avoid openssl warning
          @ssl_context.verify_hostname = false
        else
          ssl_host_address = @address
        end

        debug "starting SSL for #{conn_addr}:#{conn_port}..."
        s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context)
        s.sync_close = true
        s.hostname = ssl_host_address if s.respond_to?(:hostname=) && ssl_host_address

        if @ssl_session and
           Process.clock_gettime(Process::CLOCK_REALTIME) < @ssl_session.time.to_f + @ssl_session.timeout
          s.session = @ssl_session
        end
        ssl_socket_connect(s, @open_timeout)
        if (@ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE) && verify_hostname
          s.post_connection_check(@address)
        end
        debug "SSL established, protocol: #{s.ssl_version}, cipher: #{s.cipher[0]}"
      end
      @socket = BufferedIO.new(s, read_timeout: @read_timeout,
                               write_timeout: @write_timeout,
                               continue_timeout: @continue_timeout,
                               debug_output: @debug_output)
      @last_communicated = nil
      on_connect
    rescue => exception
      if s
        debug "Conn close because of connect error #{exception}"
        s.close
      end
      raise
    end
    private :connect

    def on_connect
    end
    private :on_connect

    # Finishes the \HTTP session:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.start
    #   http.started? # => true
    #   http.finish   # => nil
    #   http.started? # => false
    #
    # Raises IOError if not in a session.
    def finish
      raise IOError, 'HTTP session not yet started' unless started?
      do_finish
    end

    def do_finish
      @started = false
      @socket.close if @socket
      @socket = nil
    end
    private :do_finish

    #
    # proxy
    #

    public

    # no proxy
    @is_proxy_class = false
    @proxy_from_env = false
    @proxy_addr = nil
    @proxy_port = nil
    @proxy_user = nil
    @proxy_pass = nil
    @proxy_use_ssl = nil

    # Creates an \HTTP proxy class which behaves like \Net::HTTP, but
    # performs all access via the specified proxy.
    #
    # This class is obsolete.  You may pass these same parameters directly to
    # \Net::HTTP.new.  See Net::HTTP.new for details of the arguments.
    def HTTP.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_use_ssl = nil) #:nodoc:
      return self unless p_addr

      Class.new(self) {
        @is_proxy_class = true

        if p_addr == :ENV then
          @proxy_from_env = true
          @proxy_address = nil
          @proxy_port    = nil
        else
          @proxy_from_env = false
          @proxy_address = p_addr
          @proxy_port    = p_port || default_port
        end

        @proxy_user = p_user
        @proxy_pass = p_pass
        @proxy_use_ssl = p_use_ssl
      }
    end

    class << HTTP
      # Returns true if self is a class which was created by HTTP::Proxy.
      def proxy_class?
        defined?(@is_proxy_class) ? @is_proxy_class : false
      end

      # Returns the address of the proxy host, or +nil+ if none;
      # see Net::HTTP@Proxy+Server.
      attr_reader :proxy_address

      # Returns the port number of the proxy host, or +nil+ if none;
      # see Net::HTTP@Proxy+Server.
      attr_reader :proxy_port

      # Returns the user name for accessing the proxy, or +nil+ if none;
      # see Net::HTTP@Proxy+Server.
      attr_reader :proxy_user

      # Returns the password for accessing the proxy, or +nil+ if none;
      # see Net::HTTP@Proxy+Server.
      attr_reader :proxy_pass

      # Use SSL when talking to the proxy. If Net::HTTP does not use a proxy, nil.
      attr_reader :proxy_use_ssl
    end

    # Returns +true+ if a proxy server is defined, +false+ otherwise;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    def proxy?
      !!(@proxy_from_env ? proxy_uri : @proxy_address)
    end

    # Returns +true+ if the proxy server is defined in the environment,
    # +false+ otherwise;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    def proxy_from_env?
      @proxy_from_env
    end

    # The proxy URI determined from the environment for this connection.
    def proxy_uri # :nodoc:
      return if @proxy_uri == false
      @proxy_uri ||= URI::HTTP.new(
        "http", nil, address, port, nil, nil, nil, nil, nil
      ).find_proxy || false
      @proxy_uri || nil
    end

    # Returns the address of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    def proxy_address
      if @proxy_from_env then
        proxy_uri&.hostname
      else
        @proxy_address
      end
    end

    # Returns the port number of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    def proxy_port
      if @proxy_from_env then
        proxy_uri&.port
      else
        @proxy_port
      end
    end

    # Returns the user name of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    def proxy_user
      if @proxy_from_env
        user = proxy_uri&.user
        unescape(user) if user
      else
        @proxy_user
      end
    end

    # Returns the password of the proxy server, if defined, +nil+ otherwise;
    # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
    def proxy_pass
      if @proxy_from_env
        pass = proxy_uri&.password
        unescape(pass) if pass
      else
        @proxy_pass
      end
    end

    alias proxyaddr proxy_address   #:nodoc: obsolete
    alias proxyport proxy_port      #:nodoc: obsolete

    private

    def unescape(value)
      require 'cgi/util'
      CGI.unescape(value)
    end

    # without proxy, obsolete

    def conn_address # :nodoc:
      @ipaddr || address()
    end

    def conn_port # :nodoc:
      port()
    end

    def edit_path(path)
      if proxy?
        if path.start_with?("ftp://") || use_ssl?
          path
        else
          "http://#{addr_port}#{path}"
        end
      else
        path
      end
    end

    #
    # HTTP operations
    #

    public

    # :call-seq:
    #    get(path, initheader = nil) {|res| ... }
    #
    # Sends a GET request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Get object
    # created from string +path+ and initial headers hash +initheader+.
    #
    # With a block given, calls the block with the response body:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.get('/todos/1') do |res|
    #     p res
    #   end # => #<Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   "{\n  \"userId\": 1,\n  \"id\": 1,\n  \"title\": \"delectus aut autem\",\n  \"completed\": false\n}"
    #
    # With no block given, simply returns the response object:
    #
    #   http.get('/') # => #<Net::HTTPOK 200 OK readbody=true>
    #
    # Related:
    #
    # - Net::HTTP::Get: request class for \HTTP method GET.
    # - Net::HTTP.get: sends GET request, returns response body.
    #
    def get(path, initheader = nil, dest = nil, &block) # :yield: +body_segment+
      res = nil

      request(Get.new(path, initheader)) {|r|
        r.read_body dest, &block
        res = r
      }
      res
    end

    # Sends a HEAD request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Head object
    # created from string +path+ and initial headers hash +initheader+:
    #
    #   res = http.head('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true>
    #   res.body                    # => nil
    #   res.to_hash.take(3)
    #   # =>
    #   [["date", ["Wed, 15 Feb 2023 15:25:42 GMT"]],
    #    ["content-type", ["application/json; charset=utf-8"]],
    #    ["connection", ["close"]]]
    #
    def head(path, initheader = nil)
      request(Head.new(path, initheader))
    end

    # :call-seq:
    #    post(path, data, initheader = nil) {|res| ... }
    #
    # Sends a POST request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Post object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    # With a block given, calls the block with the response body:
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Net::HTTP.new(hostname)
    #   http.post('/todos', data) do |res|
    #     p res
    #   end # => #<Net::HTTPCreated 201 Created readbody=true>
    #
    # Output:
    #
    #   "{\n  \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\",\n  \"id\": 201\n}"
    #
    # With no block given, simply returns the response object:
    #
    #   http.post('/todos', data) # => #<Net::HTTPCreated 201 Created readbody=true>
    #
    # Related:
    #
    # - Net::HTTP::Post: request class for \HTTP method POST.
    # - Net::HTTP.post: sends POST request, returns response body.
    #
    def post(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+
      send_entity(path, data, initheader, dest, Post, &block)
    end

    # :call-seq:
    #    patch(path, data, initheader = nil) {|res| ... }
    #
    # Sends a PATCH request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Patch object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    # With a block given, calls the block with the response body:
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Net::HTTP.new(hostname)
    #   http.patch('/todos/1', data) do |res|
    #     p res
    #   end # => #<Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   "{\n  \"userId\": 1,\n  \"id\": 1,\n  \"title\": \"delectus aut autem\",\n  \"completed\": false,\n  \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\"\n}"
    #
    # With no block given, simply returns the response object:
    #
    #   http.patch('/todos/1', data) # => #<Net::HTTPCreated 201 Created readbody=true>
    #
    def patch(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+
      send_entity(path, data, initheader, dest, Patch, &block)
    end

    # Sends a PUT request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Put object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Net::HTTP.new(hostname)
    #   http.put('/todos/1', data) # => #<Net::HTTPOK 200 OK readbody=true>
    #
    # Related:
    #
    # - Net::HTTP::Put: request class for \HTTP method PUT.
    # - Net::HTTP.put: sends PUT request, returns response body.
    #
    def put(path, data, initheader = nil)
      request(Put.new(path, initheader), data)
    end

    # Sends a PROPPATCH request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Proppatch object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Net::HTTP.new(hostname)
    #   http.proppatch('/todos/1', data)
    #
    def proppatch(path, body, initheader = nil)
      request(Proppatch.new(path, initheader), body)
    end

    # Sends a LOCK request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Lock object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Net::HTTP.new(hostname)
    #   http.lock('/todos/1', data)
    #
    def lock(path, body, initheader = nil)
      request(Lock.new(path, initheader), body)
    end

    # Sends an UNLOCK request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Unlock object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Net::HTTP.new(hostname)
    #   http.unlock('/todos/1', data)
    #
    def unlock(path, body, initheader = nil)
      request(Unlock.new(path, initheader), body)
    end

    # Sends an Options request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Options object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Net::HTTP.new(hostname)
    #   http.options('/')
    #
    def options(path, initheader = nil)
      request(Options.new(path, initheader))
    end

    # Sends a PROPFIND request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Propfind object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http = Net::HTTP.new(hostname)
    #   http.propfind('/todos/1', data)
    #
    def propfind(path, body = nil, initheader = {'Depth' => '0'})
      request(Propfind.new(path, initheader), body)
    end

    # Sends a DELETE request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Delete object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Net::HTTP.new(hostname)
    #   http.delete('/todos/1')
    #
    def delete(path, initheader = {'Depth' => 'Infinity'})
      request(Delete.new(path, initheader))
    end

    # Sends a MOVE request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Move object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Net::HTTP.new(hostname)
    #   http.move('/todos/1')
    #
    def move(path, initheader = nil)
      request(Move.new(path, initheader))
    end

    # Sends a COPY request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Copy object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Net::HTTP.new(hostname)
    #   http.copy('/todos/1')
    #
    def copy(path, initheader = nil)
      request(Copy.new(path, initheader))
    end

    # Sends a MKCOL request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Mkcol object
    # created from string +path+, string +body+, and initial headers hash +initheader+.
    #
    #   data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
    #   http.mkcol('/todos/1', data)
    #   http = Net::HTTP.new(hostname)
    #
    def mkcol(path, body = nil, initheader = nil)
      request(Mkcol.new(path, initheader), body)
    end

    # Sends a TRACE request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Trace object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Net::HTTP.new(hostname)
    #   http.trace('/todos/1')
    #
    def trace(path, initheader = nil)
      request(Trace.new(path, initheader))
    end

    # Sends a GET request to the server;
    # forms the response into a Net::HTTPResponse object.
    #
    # The request is based on the Net::HTTP::Get object
    # created from string +path+ and initial headers hash +initheader+.
    #
    # With no block given, returns the response object:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.request_get('/todos') # => #<Net::HTTPOK 200 OK readbody=true>
    #
    # With a block given, calls the block with the response object
    # and returns the response object:
    #
    #   http.request_get('/todos') do |res|
    #     p res
    #   end # => #<Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   #<Net::HTTPOK 200 OK readbody=false>
    #
    def request_get(path, initheader = nil, &block) # :yield: +response+
      request(Get.new(path, initheader), &block)
    end

    # Sends a HEAD request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Head object
    # created from string +path+ and initial headers hash +initheader+.
    #
    #   http = Net::HTTP.new(hostname)
    #   http.head('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true>
    #
    def request_head(path, initheader = nil, &block)
      request(Head.new(path, initheader), &block)
    end

    # Sends a POST request to the server;
    # forms the response into a Net::HTTPResponse object.
    #
    # The request is based on the Net::HTTP::Post object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    # With no block given, returns the response object:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.post('/todos', 'xyzzy')
    #   # => #<Net::HTTPCreated 201 Created readbody=true>
    #
    # With a block given, calls the block with the response body
    # and returns the response object:
    #
    #   http.post('/todos', 'xyzzy') do |res|
    #     p res
    #   end # => #<Net::HTTPCreated 201 Created readbody=true>
    #
    # Output:
    #
    #   "{\n  \"xyzzy\": \"\",\n  \"id\": 201\n}"
    #
    def request_post(path, data, initheader = nil, &block) # :yield: +response+
      request Post.new(path, initheader), data, &block
    end

    # Sends a PUT request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTP::Put object
    # created from string +path+, string +data+, and initial headers hash +initheader+.
    #
    #   http = Net::HTTP.new(hostname)
    #   http.put('/todos/1', 'xyzzy')
    #   # => #<Net::HTTPOK 200 OK readbody=true>
    #
    def request_put(path, data, initheader = nil, &block)   #:nodoc:
      request Put.new(path, initheader), data, &block
    end

    alias get2   request_get    #:nodoc: obsolete
    alias head2  request_head   #:nodoc: obsolete
    alias post2  request_post   #:nodoc: obsolete
    alias put2   request_put    #:nodoc: obsolete

    # Sends an \HTTP request to the server;
    # returns an instance of a subclass of Net::HTTPResponse.
    #
    # The request is based on the Net::HTTPRequest object
    # created from string +path+, string +data+, and initial headers hash +header+.
    # That object is an instance of the
    # {subclass of Net::HTTPRequest}[rdoc-ref:Net::HTTPRequest@Request+Subclasses],
    # that corresponds to the given uppercase string +name+,
    # which must be
    # an {HTTP request method}[https://en.wikipedia.org/wiki/HTTP#Request_methods]
    # or a {WebDAV request method}[https://en.wikipedia.org/wiki/WebDAV#Implementation].
    #
    # Examples:
    #
    #   http = Net::HTTP.new(hostname)
    #   http.send_request('GET', '/todos/1')
    #   # => #<Net::HTTPOK 200 OK readbody=true>
    #   http.send_request('POST', '/todos', 'xyzzy')
    #   # => #<Net::HTTPCreated 201 Created readbody=true>
    #
    def send_request(name, path, data = nil, header = nil)
      has_response_body = name != 'HEAD'
      r = HTTPGenericRequest.new(name,(data ? true : false),has_response_body,path,header)
      request r, data
    end

    # Sends the given request +req+ to the server;
    # forms the response into a Net::HTTPResponse object.
    #
    # The given +req+ must be an instance of a
    # {subclass of Net::HTTPRequest}[rdoc-ref:Net::HTTPRequest@Request+Subclasses].
    # Argument +body+ should be given only if needed for the request.
    #
    # With no block given, returns the response object:
    #
    #   http = Net::HTTP.new(hostname)
    #
    #   req = Net::HTTP::Get.new('/todos/1')
    #   http.request(req)
    #   # => #<Net::HTTPOK 200 OK readbody=true>
    #
    #   req = Net::HTTP::Post.new('/todos')
    #   http.request(req, 'xyzzy')
    #   # => #<Net::HTTPCreated 201 Created readbody=true>
    #
    # With a block given, calls the block with the response and returns the response:
    #
    #   req = Net::HTTP::Get.new('/todos/1')
    #   http.request(req) do |res|
    #     p res
    #   end # => #<Net::HTTPOK 200 OK readbody=true>
    #
    # Output:
    #
    #   #<Net::HTTPOK 200 OK readbody=false>
    #
    def request(req, body = nil, &block)  # :yield: +response+
      unless started?
        start {
          req['connection'] ||= 'close'
          return request(req, body, &block)
        }
      end
      if proxy_user()
        req.proxy_basic_auth proxy_user(), proxy_pass() unless use_ssl?
      end
      req.set_body_internal body
      res = transport_request(req, &block)
      if sspi_auth?(res)
        sspi_auth(req)
        res = transport_request(req, &block)
      end
      res
    end

    private

    # Executes a request which uses a representation
    # and returns its body.
    def send_entity(path, data, initheader, dest, type, &block)
      res = nil
      request(type.new(path, initheader), data) {|r|
        r.read_body dest, &block
        res = r
      }
      res
    end

    IDEMPOTENT_METHODS_ = %w/GET HEAD PUT DELETE OPTIONS TRACE/ # :nodoc:

    def transport_request(req)
      count = 0
      begin
        begin_transport req
        res = catch(:response) {
          begin
            req.exec @socket, @curr_http_version, edit_path(req.path)
          rescue Errno::EPIPE
            # Failure when writing full request, but we can probably
            # still read the received response.
          end

          begin
            res = HTTPResponse.read_new(@socket)
            res.decode_content = req.decode_content
            res.body_encoding = @response_body_encoding
            res.ignore_eof = @ignore_eof
          end while res.kind_of?(HTTPInformation)

          res.uri = req.uri

          res
        }
        res.reading_body(@socket, req.response_body_permitted?) {
          if block_given?
            count = max_retries # Don't restart in the middle of a download
            yield res
          end
        }
      rescue Net::OpenTimeout
        raise
      rescue Net::ReadTimeout, IOError, EOFError,
             Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, Errno::ETIMEDOUT,
             # avoid a dependency on OpenSSL
             defined?(OpenSSL::SSL) ? OpenSSL::SSL::SSLError : IOError,
             Timeout::Error => exception
        if count < max_retries && IDEMPOTENT_METHODS_.include?(req.method)
          count += 1
          @socket.close if @socket
          debug "Conn close because of error #{exception}, and retry"
          retry
        end
        debug "Conn close because of error #{exception}"
        @socket.close if @socket
        raise
      end

      end_transport req, res
      res
    rescue => exception
      debug "Conn close because of error #{exception}"
      @socket.close if @socket
      raise exception
    end

    def begin_transport(req)
      if @socket.closed?
        connect
      elsif @last_communicated
        if @last_communicated + @keep_alive_timeout < Process.clock_gettime(Process::CLOCK_MONOTONIC)
          debug 'Conn close because of keep_alive_timeout'
          @socket.close
          connect
        elsif @socket.io.to_io.wait_readable(0) && @socket.eof?
          debug "Conn close because of EOF"
          @socket.close
          connect
        end
      end

      if not req.response_body_permitted? and @close_on_empty_response
        req['connection'] ||= 'close'
      end

      req.update_uri address, port, use_ssl?
      req['host'] ||= addr_port()
    end

    def end_transport(req, res)
      @curr_http_version = res.http_version
      @last_communicated = nil
      if @socket.closed?
        debug 'Conn socket closed'
      elsif not res.body and @close_on_empty_response
        debug 'Conn close'
        @socket.close
      elsif keep_alive?(req, res)
        debug 'Conn keep-alive'
        @last_communicated = Process.clock_gettime(Process::CLOCK_MONOTONIC)
      else
        debug 'Conn close'
        @socket.close
      end
    end

    def keep_alive?(req, res)
      return false if req.connection_close?
      if @curr_http_version <= '1.0'
        res.connection_keep_alive?
      else   # HTTP/1.1 or later
        not res.connection_close?
      end
    end

    def sspi_auth?(res)
      return false unless @sspi_enabled
      if res.kind_of?(HTTPProxyAuthenticationRequired) and
          proxy? and res["Proxy-Authenticate"].include?("Negotiate")
        begin
          require 'win32/sspi'
          true
        rescue LoadError
          false
        end
      else
        false
      end
    end

    def sspi_auth(req)
      n = Win32::SSPI::NegotiateAuth.new
      req["Proxy-Authorization"] = "Negotiate #{n.get_initial_token}"
      # Some versions of ISA will close the connection if this isn't present.
      req["Connection"] = "Keep-Alive"
      req["Proxy-Connection"] = "Keep-Alive"
      res = transport_request(req)
      authphrase = res["Proxy-Authenticate"]  or return res
      req["Proxy-Authorization"] = "Negotiate #{n.complete_authentication(authphrase)}"
    rescue => err
      raise HTTPAuthenticationError.new('HTTP authentication failed', err)
    end

    #
    # utils
    #

    private

    def addr_port
      addr = address
      addr = "[#{addr}]" if addr.include?(":")
      default_port = use_ssl? ? HTTP.https_default_port : HTTP.http_default_port
      default_port == port ? addr : "#{addr}:#{port}"
    end

    # Adds a message to debugging output
    def debug(msg)
      return unless @debug_output
      @debug_output << msg
      @debug_output << "\n"
    end

    alias_method :D, :debug
  end

  # for backward compatibility until Ruby 3.5
  # https://bugs.ruby-lang.org/issues/20900
  # https://github.com/bblimke/webmock/pull/1081
  HTTPSession = HTTP
  deprecate_constant :HTTPSession
end

require_relative 'http/exceptions'

require_relative 'http/header'

require_relative 'http/generic_request'
require_relative 'http/request'
require_relative 'http/requests'

require_relative 'http/response'
require_relative 'http/responses'

require_relative 'http/proxy_delta'
PK*J[����	�	share/ruby/ripper.rbnu�[���# frozen_string_literal: true
require 'ripper/core'
require 'ripper/lexer'
require 'ripper/filter'
require 'ripper/sexp'

# Ripper is a Ruby script parser.
#
# You can get information from the parser with event-based style.
# Information such as abstract syntax trees or simple lexical analysis of the
# Ruby program.
#
# == Usage
#
# Ripper provides an easy interface for parsing your program into a symbolic
# expression tree (or S-expression).
#
# Understanding the output of the parser may come as a challenge, it's
# recommended you use PP to format the output for legibility.
#
#   require 'ripper'
#   require 'pp'
#
#   pp Ripper.sexp('def hello(world) "Hello, #{world}!"; end')
#     #=> [:program,
#          [[:def,
#            [:@ident, "hello", [1, 4]],
#            [:paren,
#             [:params, [[:@ident, "world", [1, 10]]], nil, nil, nil, nil, nil, nil]],
#            [:bodystmt,
#             [[:string_literal,
#               [:string_content,
#                [:@tstring_content, "Hello, ", [1, 18]],
#                [:string_embexpr, [[:var_ref, [:@ident, "world", [1, 27]]]]],
#                [:@tstring_content, "!", [1, 33]]]]],
#             nil,
#             nil,
#             nil]]]]
#
# You can see in the example above, the expression starts with +:program+.
#
# From here, a method definition at +:def+, followed by the method's identifier
# <code>:@ident</code>. After the method's identifier comes the parentheses
# +:paren+ and the method parameters under +:params+.
#
# Next is the method body, starting at +:bodystmt+ (+stmt+ meaning statement),
# which contains the full definition of the method.
#
# In our case, we're simply returning a String, so next we have the
# +:string_literal+ expression.
#
# Within our +:string_literal+ you'll notice two <code>@tstring_content</code>,
# this is the literal part for <code>Hello, </code> and <code>!</code>. Between
# the two <code>@tstring_content</code> statements is a +:string_embexpr+,
# where _embexpr_ is an embedded expression. Our expression consists of a local
# variable, or +var_ref+, with the identifier (<code>@ident</code>) of +world+.
#
# == Resources
#
# * {Ruby Inside}[http://www.rubyinside.com/using-ripper-to-see-how-ruby-is-parsing-your-code-5270.html]
#
# == Requirements
#
# * ruby 1.9 (support CVS HEAD only)
# * bison 1.28 or later (Other yaccs do not work)
#
# == License
#
# Ruby License.
#
# - Minero Aoki
# - aamine@loveruby.net
# - http://i.loveruby.net
class Ripper; end
PK*J[<� <<share/ruby/openssl.rbnu�[���# frozen_string_literal: true
=begin
= Info
  'OpenSSL for Ruby 2' project
  Copyright (C) 2002  Michal Rokos <m.rokos@sh.cvut.cz>
  All rights reserved.

= Licence
  This program is licensed under the same licence as Ruby.
  (See the file 'COPYING'.)
=end

require 'openssl.so'

require_relative 'openssl/bn'
require_relative 'openssl/asn1'
require_relative 'openssl/pkey'
require_relative 'openssl/cipher'
require_relative 'openssl/digest'
require_relative 'openssl/hmac'
require_relative 'openssl/x509'
require_relative 'openssl/ssl'
require_relative 'openssl/pkcs5'
require_relative 'openssl/version'

module OpenSSL
  # call-seq:
  #   OpenSSL.secure_compare(string, string) -> boolean
  #
  # Constant time memory comparison. Inputs are hashed using SHA-256 to mask
  # the length of the secret. Returns +true+ if the strings are identical,
  # +false+ otherwise.
  def self.secure_compare(a, b)
    hashed_a = OpenSSL::Digest.digest('SHA256', a)
    hashed_b = OpenSSL::Digest.digest('SHA256', b)
    OpenSSL.fixed_length_secure_compare(hashed_a, hashed_b) && a == b
  end
end
PK*J[��JJshare/ruby/syntax_suggest.rbnu�[���# frozen_string_literal: true

require_relative "syntax_suggest/core_ext"
PK*J[�brp$$share/ruby/forwardable.rbnu�[���# frozen_string_literal: false
#
#   forwardable.rb -
#       $Release Version: 1.1$
#       $Revision$
#       by Keiju ISHITSUKA(keiju@ishitsuka.com)
#       original definition by delegator.rb
#       Revised by Daniel J. Berger with suggestions from Florian Gross.
#
#       Documentation by James Edward Gray II and Gavin Sinclair



# The Forwardable module provides delegation of specified
# methods to a designated object, using the methods #def_delegator
# and #def_delegators.
#
# For example, say you have a class RecordCollection which
# contains an array <tt>@records</tt>.  You could provide the lookup method
# #record_number(), which simply calls #[] on the <tt>@records</tt>
# array, like this:
#
#   require 'forwardable'
#
#   class RecordCollection
#     attr_accessor :records
#     extend Forwardable
#     def_delegator :@records, :[], :record_number
#   end
#
# We can use the lookup method like so:
#
#   r = RecordCollection.new
#   r.records = [4,5,6]
#   r.record_number(0)  # => 4
#
# Further, if you wish to provide the methods #size, #<<, and #map,
# all of which delegate to @records, this is how you can do it:
#
#   class RecordCollection # re-open RecordCollection class
#     def_delegators :@records, :size, :<<, :map
#   end
#
#   r = RecordCollection.new
#   r.records = [1,2,3]
#   r.record_number(0)   # => 1
#   r.size               # => 3
#   r << 4               # => [1, 2, 3, 4]
#   r.map { |x| x * 2 }  # => [2, 4, 6, 8]
#
# You can even extend regular objects with Forwardable.
#
#   my_hash = Hash.new
#   my_hash.extend Forwardable              # prepare object for delegation
#   my_hash.def_delegator "STDOUT", "puts"  # add delegation for STDOUT.puts()
#   my_hash.puts "Howdy!"
#
# == Another example
#
# You could use Forwardable as an alternative to inheritance, when you don't want
# to inherit all methods from the superclass. For instance, here is how you might
# add a range of +Array+ instance methods to a new class +Queue+:
#
#   class Queue
#     extend Forwardable
#
#     def initialize
#       @q = [ ]    # prepare delegate object
#     end
#
#     # setup preferred interface, enq() and deq()...
#     def_delegator :@q, :push, :enq
#     def_delegator :@q, :shift, :deq
#
#     # support some general Array methods that fit Queues well
#     def_delegators :@q, :clear, :first, :push, :shift, :size
#   end
#
#   q = Thread::Queue.new
#   q.enq 1, 2, 3, 4, 5
#   q.push 6
#
#   q.shift    # => 1
#   while q.size > 0
#     puts q.deq
#   end
#
#   q.enq "Ruby", "Perl", "Python"
#   puts q.first
#   q.clear
#   puts q.first
#
# This should output:
#
#   2
#   3
#   4
#   5
#   6
#   Ruby
#   nil
#
# == Notes
#
# Be advised, RDoc will not detect delegated methods.
#
# +forwardable.rb+ provides single-method delegation via the def_delegator and
# def_delegators methods. For full-class delegation via DelegateClass, see
# +delegate.rb+.
#
module Forwardable
  require 'forwardable/impl'

  # Version of +forwardable.rb+
  VERSION = "1.3.3"
  VERSION.freeze
  FORWARDABLE_VERSION = VERSION
  FORWARDABLE_VERSION.freeze

  @debug = nil
  class << self
    # ignored
    attr_accessor :debug
  end

  # Takes a hash as its argument.  The key is a symbol or an array of
  # symbols.  These symbols correspond to method names, instance variable
  # names, or constant names (see def_delegator).  The value is
  # the accessor to which the methods will be delegated.
  #
  # :call-seq:
  #    delegate method => accessor
  #    delegate [method, method, ...] => accessor
  #
  def instance_delegate(hash)
    hash.each do |methods, accessor|
      unless defined?(methods.each)
        def_instance_delegator(accessor, methods)
      else
        methods.each {|method| def_instance_delegator(accessor, method)}
      end
    end
  end

  #
  # Shortcut for defining multiple delegator methods, but with no
  # provision for using a different name.  The following two code
  # samples have the same effect:
  #
  #   def_delegators :@records, :size, :<<, :map
  #
  #   def_delegator :@records, :size
  #   def_delegator :@records, :<<
  #   def_delegator :@records, :map
  #
  def def_instance_delegators(accessor, *methods)
    methods.each do |method|
      next if /\A__(?:send|id)__\z/ =~ method
      def_instance_delegator(accessor, method)
    end
  end

  # Define +method+ as delegator instance method with an optional
  # alias name +ali+. Method calls to +ali+ will be delegated to
  # +accessor.method+.  +accessor+ should be a method name, instance
  # variable name, or constant name.  Use the full path to the
  # constant if providing the constant name.
  # Returns the name of the method defined.
  #
  #   class MyQueue
  #     CONST = 1
  #     extend Forwardable
  #     attr_reader :queue
  #     def initialize
  #       @queue = []
  #     end
  #
  #     def_delegator :@queue, :push, :mypush
  #     def_delegator 'MyQueue::CONST', :to_i
  #   end
  #
  #   q = MyQueue.new
  #   q.mypush 42
  #   q.queue    #=> [42]
  #   q.push 23  #=> NoMethodError
  #   q.to_i     #=> 1
  #
  def def_instance_delegator(accessor, method, ali = method)
    gen = Forwardable._delegator_method(self, accessor, method, ali)

    # If it's not a class or module, it's an instance
    mod = Module === self ? self : singleton_class
    ret = mod.module_eval(&gen)
    mod.__send__(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
    ret
  end

  alias delegate instance_delegate
  alias def_delegators def_instance_delegators
  alias def_delegator def_instance_delegator

  # :nodoc:
  def self._delegator_method(obj, accessor, method, ali)
    accessor = accessor.to_s unless Symbol === accessor

    if Module === obj ?
         obj.method_defined?(accessor) || obj.private_method_defined?(accessor) :
         obj.respond_to?(accessor, true)
      accessor = "#{accessor}()"
    end

    method_call = ".__send__(:#{method}, *args, &block)"
    if _valid_method?(method)
      loc, = caller_locations(2,1)
      pre = "_ ="
      mesg = "#{Module === obj ? obj : obj.class}\##{ali} at #{loc.path}:#{loc.lineno} forwarding to private method "
      method_call = "#{<<-"begin;"}\n#{<<-"end;".chomp}"
        begin;
          unless defined? _.#{method}
            ::Kernel.warn #{mesg.dump}"\#{_.class}"'##{method}', uplevel: 1
            _#{method_call}
          else
            _.#{method}(*args, &block)
          end
        end;
    end

    _compile_method("#{<<-"begin;"}\n#{<<-"end;"}", __FILE__, __LINE__+1)
    begin;
      proc do
        def #{ali}(*args, &block)
          #{pre}
          begin
            #{accessor}
          end#{method_call}
        end
      end
    end;
  end
end

# SingleForwardable can be used to setup delegation at the object level as well.
#
#    printer = String.new
#    printer.extend SingleForwardable        # prepare object for delegation
#    printer.def_delegator "STDOUT", "puts"  # add delegation for STDOUT.puts()
#    printer.puts "Howdy!"
#
# Also, SingleForwardable can be used to set up delegation for a Class or Module.
#
#   class Implementation
#     def self.service
#       puts "serviced!"
#     end
#   end
#
#   module Facade
#     extend SingleForwardable
#     def_delegator :Implementation, :service
#   end
#
#   Facade.service #=> serviced!
#
# If you want to use both Forwardable and SingleForwardable, you can
# use methods def_instance_delegator and def_single_delegator, etc.
module SingleForwardable
  # Takes a hash as its argument.  The key is a symbol or an array of
  # symbols.  These symbols correspond to method names.  The value is
  # the accessor to which the methods will be delegated.
  #
  # :call-seq:
  #    delegate method => accessor
  #    delegate [method, method, ...] => accessor
  #
  def single_delegate(hash)
    hash.each do |methods, accessor|
      unless defined?(methods.each)
        def_single_delegator(accessor, methods)
      else
        methods.each {|method| def_single_delegator(accessor, method)}
      end
    end
  end

  #
  # Shortcut for defining multiple delegator methods, but with no
  # provision for using a different name.  The following two code
  # samples have the same effect:
  #
  #   def_delegators :@records, :size, :<<, :map
  #
  #   def_delegator :@records, :size
  #   def_delegator :@records, :<<
  #   def_delegator :@records, :map
  #
  def def_single_delegators(accessor, *methods)
    methods.each do |method|
      next if /\A__(?:send|id)__\z/ =~ method
      def_single_delegator(accessor, method)
    end
  end

  # :call-seq:
  #   def_single_delegator(accessor, method, new_name=method)
  #
  # Defines a method _method_ which delegates to _accessor_ (i.e. it calls
  # the method of the same name in _accessor_).  If _new_name_ is
  # provided, it is used as the name for the delegate method.
  # Returns the name of the method defined.
  def def_single_delegator(accessor, method, ali = method)
    gen = Forwardable._delegator_method(self, accessor, method, ali)

    ret = instance_eval(&gen)
    singleton_class.__send__(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
    ret
  end

  alias delegate single_delegate
  alias def_delegators def_single_delegators
  alias def_delegator def_single_delegator
end
PK*J[���߬,�,share/ruby/un.rbnu�[���# frozen_string_literal: false
#
# = un.rb
#
# Copyright (c) 2003 WATANABE Hirofumi <eban@ruby-lang.org>
#
# This program is free software.
# You can distribute/modify this program under the same terms of Ruby.
#
# == Utilities to replace common UNIX commands in Makefiles etc
#
# == SYNOPSIS
#
#   ruby -run -e cp -- [OPTION] SOURCE DEST
#   ruby -run -e ln -- [OPTION] TARGET LINK_NAME
#   ruby -run -e mv -- [OPTION] SOURCE DEST
#   ruby -run -e rm -- [OPTION] FILE
#   ruby -run -e mkdir -- [OPTION] DIRS
#   ruby -run -e rmdir -- [OPTION] DIRS
#   ruby -run -e install -- [OPTION] SOURCE DEST
#   ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
#   ruby -run -e touch -- [OPTION] FILE
#   ruby -run -e wait_writable -- [OPTION] FILE
#   ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
#   ruby -run -e httpd -- [OPTION] [DocumentRoot]
#   ruby -run -e colorize -- [FILE]
#   ruby -run -e help [COMMAND]

require "fileutils"
require "optparse"

module FileUtils
  @fileutils_output = $stdout
end

# :nodoc:
def setup(options = "", *long_options)
  caller = caller_locations(1, 1)[0].label
  opt_hash = {}
  argv = []
  OptionParser.new do |o|
    options.scan(/.:?/) do |s|
      opt_name = s.delete(":").intern
      o.on("-" + s.tr(":", " ")) do |val|
        opt_hash[opt_name] = val
      end
    end
    long_options.each do |s|
      opt_name, arg_name = s.split(/(?=[\s=])/, 2)
      opt_name.delete_prefix!('--')
      s = "--#{opt_name.gsub(/([A-Z]+|[a-z])([A-Z])/, '\1-\2').downcase}#{arg_name}"
      puts "#{opt_name}=>#{s}" if $DEBUG
      opt_name = opt_name.intern
      o.on(s) do |val|
        opt_hash[opt_name] = val
      end
    end
    o.on("-v") do opt_hash[:verbose] = true end
    o.on("--help") do
      UN.help([caller])
      exit
    end
    o.order!(ARGV) do |x|
      if /[*?\[{]/ =~ x
        argv.concat(Dir[x])
      else
        argv << x
      end
    end
  end
  yield argv, opt_hash
end

##
# Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY
#
#   ruby -run -e cp -- [OPTION] SOURCE DEST
#
#   -p          preserve file attributes if possible
#   -r          copy recursively
#   -l          make hard link instead of copying (implies -r)
#   -v          verbose
#

def cp
  setup("prl") do |argv, options|
    cmd = "cp"
    cmd += "_r" if options.delete :r
    cmd = "cp_lr" if options.delete :l
    options[:preserve] = true if options.delete :p
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.__send__ cmd, argv, dest, **options
  end
end

##
# Create a link to the specified TARGET with LINK_NAME.
#
#   ruby -run -e ln -- [OPTION] TARGET LINK_NAME
#
#   -s          make symbolic links instead of hard links
#   -f          remove existing destination files
#   -v          verbose
#

def ln
  setup("sf") do |argv, options|
    cmd = "ln"
    cmd += "_s" if options.delete :s
    options[:force] = true if options.delete :f
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.__send__ cmd, argv, dest, **options
  end
end

##
# Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
#
#   ruby -run -e mv -- [OPTION] SOURCE DEST
#
#   -v          verbose
#

def mv
  setup do |argv, options|
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.mv argv, dest, **options
  end
end

##
# Remove the FILE
#
#   ruby -run -e rm -- [OPTION] FILE
#
#   -f          ignore nonexistent files
#   -r          remove the contents of directories recursively
#   -v          verbose
#

def rm
  setup("fr") do |argv, options|
    cmd = "rm"
    cmd += "_r" if options.delete :r
    options[:force] = true if options.delete :f
    FileUtils.__send__ cmd, argv, **options
  end
end

##
# Create the DIR, if they do not already exist.
#
#   ruby -run -e mkdir -- [OPTION] DIR
#
#   -p          no error if existing, make parent directories as needed
#   -v          verbose
#

def mkdir
  setup("p") do |argv, options|
    cmd = "mkdir"
    cmd += "_p" if options.delete :p
    FileUtils.__send__ cmd, argv, **options
  end
end

##
# Remove the DIR.
#
#   ruby -run -e rmdir -- [OPTION] DIR
#
#   -p          remove DIRECTORY and its ancestors.
#   -v          verbose
#

def rmdir
  setup("p") do |argv, options|
    options[:parents] = true if options.delete :p
    FileUtils.rmdir argv, **options
  end
end

##
# Copy SOURCE to DEST.
#
#   ruby -run -e install -- [OPTION] SOURCE DEST
#
#   -p          apply access/modification times of SOURCE files to
#               corresponding destination files
#   -m          set permission mode (as in chmod), instead of 0755
#   -o          set owner user id, instead of the current owner
#   -g          set owner group id, instead of the current group
#   -v          verbose
#

def install
  setup("pm:o:g:") do |argv, options|
    (mode = options.delete :m) and options[:mode] = /\A\d/ =~ mode ? mode.oct : mode
    options[:preserve] = true if options.delete :p
    (owner = options.delete :o) and options[:owner] = owner
    (group = options.delete :g) and options[:group] = group
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.install argv, dest, **options
  end
end

##
# Change the mode of each FILE to OCTAL-MODE.
#
#   ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
#
#   -v          verbose
#

def chmod
  setup do |argv, options|
    mode = argv.shift
    mode = /\A\d/ =~ mode ? mode.oct : mode
    FileUtils.chmod mode, argv, **options
  end
end

##
# Update the access and modification times of each FILE to the current time.
#
#   ruby -run -e touch -- [OPTION] FILE
#
#   -v          verbose
#

def touch
  setup do |argv, options|
    FileUtils.touch argv, **options
  end
end

##
# Wait until the file becomes writable.
#
#   ruby -run -e wait_writable -- [OPTION] FILE
#
#   -n RETRY    count to retry
#   -w SEC      each wait time in seconds
#   -v          verbose
#

def wait_writable
  setup("n:w:v") do |argv, options|
    verbose = options[:verbose]
    n = options[:n] and n = Integer(n)
    wait = (wait = options[:w]) ? Float(wait) : 0.2
    argv.each do |file|
      begin
        File.open(file, "r+b") {}
      rescue Errno::ENOENT
        break
      rescue Errno::EACCES => e
        raise if n and (n -= 1) <= 0
        if verbose
          puts e
          STDOUT.flush
        end
        sleep wait
        retry
      end
    end
  end
end

##
# Create makefile using mkmf.
#
#   ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
#
#   -d ARGS     run dir_config
#   -h ARGS     run have_header
#   -l ARGS     run have_library
#   -f ARGS     run have_func
#   -v ARGS     run have_var
#   -t ARGS     run have_type
#   -m ARGS     run have_macro
#   -c ARGS     run have_const
#   --vendor    install to vendor_ruby
#

def mkmf
  setup("d:h:l:f:v:t:m:c:", "vendor") do |argv, options|
    require 'mkmf'
    opt = options[:d] and opt.split(/:/).each {|n| dir_config(*n.split(/,/))}
    opt = options[:h] and opt.split(/:/).each {|n| have_header(*n.split(/,/))}
    opt = options[:l] and opt.split(/:/).each {|n| have_library(*n.split(/,/))}
    opt = options[:f] and opt.split(/:/).each {|n| have_func(*n.split(/,/))}
    opt = options[:v] and opt.split(/:/).each {|n| have_var(*n.split(/,/))}
    opt = options[:t] and opt.split(/:/).each {|n| have_type(*n.split(/,/))}
    opt = options[:m] and opt.split(/:/).each {|n| have_macro(*n.split(/,/))}
    opt = options[:c] and opt.split(/:/).each {|n| have_const(*n.split(/,/))}
    $configure_args["--vendor"] = true if options[:vendor]
    create_makefile(*argv)
  end
end

##
# Run WEBrick HTTP server.
#
#   ruby -run -e httpd -- [OPTION] [DocumentRoot]
#
#   --bind-address=ADDR         address to bind
#   --port=NUM                  listening port number
#   --max-clients=MAX           max number of simultaneous clients
#   --temp-dir=DIR              temporary directory
#   --do-not-reverse-lookup     disable reverse lookup
#   --request-timeout=SECOND    request timeout in seconds
#   --http-version=VERSION      HTTP version
#   --server-name=NAME          name of the server host
#   --server-software=NAME      name and version of the server
#   --ssl-certificate=CERT      The SSL certificate file for the server
#   --ssl-private-key=KEY       The SSL private key file for the server certificate
#   -v                          verbose
#

def httpd
  setup("", "BindAddress=ADDR", "Port=PORT", "MaxClients=NUM", "TempDir=DIR",
        "DoNotReverseLookup", "RequestTimeout=SECOND", "HTTPVersion=VERSION",
        "ServerName=NAME", "ServerSoftware=NAME",
        "SSLCertificate=CERT", "SSLPrivateKey=KEY") do
    |argv, options|
    begin
      require 'webrick'
    rescue LoadError
      abort "webrick is not found. You may need to `gem install webrick` to install webrick."
    end
    opt = options[:RequestTimeout] and options[:RequestTimeout] = opt.to_i
    [:Port, :MaxClients].each do |name|
      opt = options[name] and (options[name] = Integer(opt)) rescue nil
    end
    if cert = options[:SSLCertificate]
      key = options[:SSLPrivateKey] or
        raise "--ssl-private-key option must also be given"
      require 'webrick/https'
      options[:SSLEnable] = true
      options[:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read(cert))
      options[:SSLPrivateKey] = OpenSSL::PKey.read(File.read(key))
      options[:Port] ||= 8443   # HTTPS Alternate
    end
    options[:Port] ||= 8080     # HTTP Alternate
    options[:DocumentRoot] = argv.shift || '.'
    s = nil
    options[:StartCallback] = proc {
      logger = s.logger
      logger.info("To access this server, open this URL in a browser:")
      s.listeners.each do |listener|
        if options[:SSLEnable]
          addr = listener.addr
          addr[3] = "127.0.0.1" if addr[3] == "0.0.0.0"
          addr[3] = "::1" if addr[3] == "::"
          logger.info("    https://#{Addrinfo.new(addr).inspect_sockaddr}")
        else
          logger.info("    http://#{listener.connect_address.inspect_sockaddr}")
        end
      end
    }
    s = WEBrick::HTTPServer.new(options)
    shut = proc {s.shutdown}
    siglist = %w"TERM QUIT"
    siglist.concat(%w"HUP INT") if STDIN.tty?
    siglist &= Signal.list.keys
    siglist.each do |sig|
      Signal.trap(sig, shut)
    end
    s.start
  end
end

##
# Colorize ruby code.
#
#   ruby -run -e colorize -- [FILE]
#

def colorize
  begin
    require "irb/color"
  rescue LoadError
    raise "colorize requires irb 1.1.0 or later"
  end
  setup do |argv, |
    if argv.empty?
      puts IRB::Color.colorize_code STDIN.read
      return
    end
    argv.each do |file|
      puts IRB::Color.colorize_code File.read(file)
    end
  end
end

##
# Display help message.
#
#   ruby -run -e help [COMMAND]
#

def help
  setup do |argv,|
    UN.help(argv)
  end
end

module UN # :nodoc:

  VERSION = "0.3.0"

  module_function
  def help(argv, output: $stdout)
    all = argv.empty?
    cmd = nil
    if all
      store = proc {|msg| output << msg}
    else
      messages = {}
      store = proc {|msg| messages[cmd] = msg}
    end
    File.open(__FILE__) do |me|
      while me.gets("##\n")
        if help = me.gets("\n\n")
          if all or argv.include?(cmd = help[/^#\s*ruby\s.*-e\s+(\w+)/, 1])
            store[help.gsub(/^# ?/, "")]
            break unless all or argv.size > messages.size
          end
        end
      end
    end
    if messages
      argv.each {|arg| output << messages[arg]}
    end
  end
end
PK*J[KU���;�;share/ruby/reline.rbnu�[���require 'io/console'
require 'forwardable'
require 'reline/version'
require 'reline/config'
require 'reline/key_actor'
require 'reline/key_stroke'
require 'reline/line_editor'
require 'reline/history'
require 'reline/io'
require 'reline/face'
require 'rbconfig'

module Reline
  # NOTE: For making compatible with the rb-readline gem
  FILENAME_COMPLETION_PROC = nil
  USERNAME_COMPLETION_PROC = nil

  class ConfigEncodingConversionError < StandardError; end

  # EOF key: { char: nil, method_symbol: nil }
  # Other key: { char: String, method_symbol: Symbol }
  Key = Struct.new(:char, :method_symbol, :unused_boolean) do
    # For dialog_proc `key.match?(dialog.name)`
    def match?(sym)
      method_symbol && method_symbol == sym
    end
  end
  CursorPos = Struct.new(:x, :y)
  DialogRenderInfo = Struct.new(
    :pos,
    :contents,
    :face,
    :bg_color, # For the time being, this line should stay here for the compatibility with IRB.
    :width,
    :height,
    :scrollbar,
    keyword_init: true
  )

  class Core
    ATTR_READER_NAMES = %i(
      completion_append_character
      basic_word_break_characters
      completer_word_break_characters
      basic_quote_characters
      completer_quote_characters
      filename_quote_characters
      special_prefixes
      completion_proc
      output_modifier_proc
      prompt_proc
      auto_indent_proc
      pre_input_hook
      dig_perfect_match_proc
    ).each(&method(:attr_reader))

    attr_accessor :config
    attr_accessor :key_stroke
    attr_accessor :line_editor
    attr_accessor :last_incremental_search
    attr_reader :output

    extend Forwardable
    def_delegators :config,
      :autocompletion,
      :autocompletion=

    def initialize
      self.output = STDOUT
      @mutex = Mutex.new
      @dialog_proc_list = {}
      yield self
      @completion_quote_character = nil
    end

    def io_gate
      Reline::IOGate
    end

    def encoding
      io_gate.encoding
    end

    def completion_append_character=(val)
      if val.nil?
        @completion_append_character = nil
      elsif val.size == 1
        @completion_append_character = val.encode(encoding)
      elsif val.size > 1
        @completion_append_character = val[0].encode(encoding)
      else
        @completion_append_character = nil
      end
    end

    def basic_word_break_characters=(v)
      @basic_word_break_characters = v.encode(encoding)
    end

    def completer_word_break_characters=(v)
      @completer_word_break_characters = v.encode(encoding)
    end

    def basic_quote_characters=(v)
      @basic_quote_characters = v.encode(encoding)
    end

    def completer_quote_characters=(v)
      @completer_quote_characters = v.encode(encoding)
    end

    def filename_quote_characters=(v)
      @filename_quote_characters = v.encode(encoding)
    end

    def special_prefixes=(v)
      @special_prefixes = v.encode(encoding)
    end

    def completion_case_fold=(v)
      @config.completion_ignore_case = v
    end

    def completion_case_fold
      @config.completion_ignore_case
    end

    def completion_quote_character
      @completion_quote_character
    end

    def completion_proc=(p)
      raise ArgumentError unless p.respond_to?(:call) or p.nil?
      @completion_proc = p
    end

    def output_modifier_proc=(p)
      raise ArgumentError unless p.respond_to?(:call) or p.nil?
      @output_modifier_proc = p
    end

    def prompt_proc=(p)
      raise ArgumentError unless p.respond_to?(:call) or p.nil?
      @prompt_proc = p
    end

    def auto_indent_proc=(p)
      raise ArgumentError unless p.respond_to?(:call) or p.nil?
      @auto_indent_proc = p
    end

    def pre_input_hook=(p)
      @pre_input_hook = p
    end

    def dig_perfect_match_proc=(p)
      raise ArgumentError unless p.respond_to?(:call) or p.nil?
      @dig_perfect_match_proc = p
    end

    DialogProc = Struct.new(:dialog_proc, :context)
    def add_dialog_proc(name_sym, p, context = nil)
      raise ArgumentError unless name_sym.instance_of?(Symbol)
      if p.nil?
        @dialog_proc_list.delete(name_sym)
      else
        raise ArgumentError unless p.respond_to?(:call)
        @dialog_proc_list[name_sym] = DialogProc.new(p, context)
      end
    end

    def dialog_proc(name_sym)
      @dialog_proc_list[name_sym]
    end

    def input=(val)
      raise TypeError unless val.respond_to?(:getc) or val.nil?
      if val.respond_to?(:getc) && io_gate.respond_to?(:input=)
        io_gate.input = val
      end
    end

    def output=(val)
      raise TypeError unless val.respond_to?(:write) or val.nil?
      @output = val
      io_gate.output = val
    end

    def vi_editing_mode
      config.editing_mode = :vi_insert
      nil
    end

    def emacs_editing_mode
      config.editing_mode = :emacs
      nil
    end

    def vi_editing_mode?
      config.editing_mode_is?(:vi_insert, :vi_command)
    end

    def emacs_editing_mode?
      config.editing_mode_is?(:emacs)
    end

    def get_screen_size
      io_gate.get_screen_size
    end

    Reline::DEFAULT_DIALOG_PROC_AUTOCOMPLETE = ->() {
      # autocomplete
      return unless config.autocompletion

      journey_data = completion_journey_data
      return unless journey_data

      target = journey_data.list.first
      completed = journey_data.list[journey_data.pointer]
      result = journey_data.list.drop(1)
      pointer = journey_data.pointer - 1
      return if completed.empty? || (result == [completed] && pointer < 0)

      target_width = Reline::Unicode.calculate_width(target)
      completed_width = Reline::Unicode.calculate_width(completed)
      if cursor_pos.x <= completed_width - target_width
        # When target is rendered on the line above cursor position
        x = screen_width - completed_width
        y = -1
      else
        x = [cursor_pos.x - completed_width, 0].max
        y = 0
      end
      cursor_pos_to_render = Reline::CursorPos.new(x, y)
      if context and context.is_a?(Array)
        context.clear
        context.push(cursor_pos_to_render, result, pointer, dialog)
      end
      dialog.pointer = pointer
      DialogRenderInfo.new(
        pos: cursor_pos_to_render,
        contents: result,
        scrollbar: true,
        height: [15, preferred_dialog_height].min,
        face: :completion_dialog
      )
    }
    Reline::DEFAULT_DIALOG_CONTEXT = Array.new

    def readmultiline(prompt = '', add_hist = false, &confirm_multiline_termination)
      @mutex.synchronize do
        unless confirm_multiline_termination
          raise ArgumentError.new('#readmultiline needs block to confirm multiline termination')
        end

        io_gate.with_raw_input do
          inner_readline(prompt, add_hist, true, &confirm_multiline_termination)
        end

        whole_buffer = line_editor.whole_buffer.dup
        whole_buffer.taint if RUBY_VERSION < '2.7'
        if add_hist and whole_buffer and whole_buffer.chomp("\n").size > 0
          Reline::HISTORY << whole_buffer
        end

        if line_editor.eof?
          line_editor.reset_line
          # Return nil if the input is aborted by C-d.
          nil
        else
          whole_buffer
        end
      end
    end

    def readline(prompt = '', add_hist = false)
      @mutex.synchronize do
        io_gate.with_raw_input do
          inner_readline(prompt, add_hist, false)
        end

        line = line_editor.line.dup
        line.taint if RUBY_VERSION < '2.7'
        if add_hist and line and line.chomp("\n").size > 0
          Reline::HISTORY << line.chomp("\n")
        end

        line_editor.reset_line if line_editor.line.nil?
        line
      end
    end

    private def inner_readline(prompt, add_hist, multiline, &confirm_multiline_termination)
      if ENV['RELINE_STDERR_TTY']
        if io_gate.win?
          $stderr = File.open(ENV['RELINE_STDERR_TTY'], 'a')
        else
          $stderr.reopen(ENV['RELINE_STDERR_TTY'], 'w')
        end
        $stderr.sync = true
        $stderr.puts "Reline is used by #{Process.pid}"
      end
      unless config.test_mode or config.loaded?
        config.read
        io_gate.set_default_key_bindings(config)
      end
      otio = io_gate.prep

      may_req_ambiguous_char_width
      key_stroke.encoding = encoding
      line_editor.reset(prompt)
      if multiline
        line_editor.multiline_on
        if block_given?
          line_editor.confirm_multiline_termination_proc = confirm_multiline_termination
        end
      else
        line_editor.multiline_off
      end
      line_editor.completion_proc = completion_proc
      line_editor.completion_append_character = completion_append_character
      line_editor.output_modifier_proc = output_modifier_proc
      line_editor.prompt_proc = prompt_proc
      line_editor.auto_indent_proc = auto_indent_proc
      line_editor.dig_perfect_match_proc = dig_perfect_match_proc

      # Readline calls pre_input_hook just after printing the first prompt.
      line_editor.print_nomultiline_prompt
      pre_input_hook&.call

      unless Reline::IOGate.dumb?
        @dialog_proc_list.each_pair do |name_sym, d|
          line_editor.add_dialog_proc(name_sym, d.dialog_proc, d.context)
        end
      end

      line_editor.update_dialogs
      line_editor.rerender

      begin
        line_editor.set_signal_handlers
        loop do
          read_io(config.keyseq_timeout) { |inputs|
            line_editor.set_pasting_state(io_gate.in_pasting?)
            inputs.each do |key|
              case key.method_symbol
              when :bracketed_paste_start
                # io_gate is Reline::ANSI because the key :bracketed_paste_start is only assigned in Reline::ANSI
                key = Reline::Key.new(io_gate.read_bracketed_paste, :insert_multiline_text)
              when :quoted_insert, :ed_quoted_insert
                key = Reline::Key.new(io_gate.read_single_char(config.keyseq_timeout), :insert_raw_char)
              end
              line_editor.update(key)
            end
          }
          if line_editor.finished?
            line_editor.render_finished
            break
          else
            line_editor.set_pasting_state(io_gate.in_pasting?)
            line_editor.rerender
          end
        end
        io_gate.move_cursor_column(0)
      rescue Errno::EIO
        # Maybe the I/O has been closed.
      ensure
        line_editor.finalize
        io_gate.deprep(otio)
      end
    end

    # GNU Readline watis for "keyseq-timeout" milliseconds when the input is
    # ambiguous whether it is matching or matched.
    # If the next character does not arrive within the specified timeout, input
    # is considered as matched.
    # `ESC` is ambiguous because it can be a standalone ESC (matched) or part of
    # `ESC char` or part of CSI sequence (matching).
    private def read_io(keyseq_timeout, &block)
      buffer = []
      status = KeyStroke::MATCHING
      loop do
        timeout = status == KeyStroke::MATCHING_MATCHED ? keyseq_timeout.fdiv(1000) : Float::INFINITY
        c = io_gate.getc(timeout)
        if c.nil? || c == -1
          if status == KeyStroke::MATCHING_MATCHED
            status = KeyStroke::MATCHED
          elsif buffer.empty?
            # io_gate is closed and reached EOF
            block.call([Key.new(nil, nil, false)])
            return
          else
            status = KeyStroke::UNMATCHED
          end
        else
          buffer << c
          status = key_stroke.match_status(buffer)
        end

        if status == KeyStroke::MATCHED || status == KeyStroke::UNMATCHED
          expanded, rest_bytes = key_stroke.expand(buffer)
          rest_bytes.reverse_each { |c| io_gate.ungetc(c) }
          block.call(expanded)
          return
        end
      end
    end

    def ambiguous_width
      may_req_ambiguous_char_width unless defined? @ambiguous_width
      @ambiguous_width
    end

    private def may_req_ambiguous_char_width
      @ambiguous_width = 1 if io_gate.dumb? || !STDIN.tty? || !STDOUT.tty?
      return if defined? @ambiguous_width
      io_gate.move_cursor_column(0)
      begin
        output.write "\u{25bd}"
      rescue Encoding::UndefinedConversionError
        # LANG=C
        @ambiguous_width = 1
      else
        @ambiguous_width = io_gate.cursor_pos.x == 2 ? 2 : 1
      end
      io_gate.move_cursor_column(0)
      io_gate.erase_after_cursor
    end
  end

  extend Forwardable
  extend SingleForwardable

  #--------------------------------------------------------
  # Documented API
  #--------------------------------------------------------

  (Core::ATTR_READER_NAMES).each { |name|
    def_single_delegators :core, :"#{name}", :"#{name}="
  }
  def_single_delegators :core, :input=, :output=
  def_single_delegators :core, :vi_editing_mode, :emacs_editing_mode
  def_single_delegators :core, :readline
  def_single_delegators :core, :completion_case_fold, :completion_case_fold=
  def_single_delegators :core, :completion_quote_character
  def_instance_delegators self, :readline
  private :readline


  #--------------------------------------------------------
  # Undocumented API
  #--------------------------------------------------------

  # Testable in original
  def_single_delegators :core, :get_screen_size
  def_single_delegators :line_editor, :eof?
  def_instance_delegators self, :eof?
  def_single_delegators :line_editor, :delete_text
  def_single_delegator :line_editor, :line, :line_buffer
  def_single_delegator :line_editor, :byte_pointer, :point
  def_single_delegator :line_editor, :byte_pointer=, :point=

  def self.insert_text(text)
    line_editor.insert_multiline_text(text)
    self
  end

  # Untestable in original
  def_single_delegator :line_editor, :rerender, :redisplay
  def_single_delegators :core, :vi_editing_mode?, :emacs_editing_mode?
  def_single_delegators :core, :ambiguous_width
  def_single_delegators :core, :last_incremental_search
  def_single_delegators :core, :last_incremental_search=
  def_single_delegators :core, :add_dialog_proc
  def_single_delegators :core, :dialog_proc
  def_single_delegators :core, :autocompletion, :autocompletion=

  def_single_delegators :core, :readmultiline
  def_instance_delegators self, :readmultiline
  private :readmultiline

  def self.encoding_system_needs
    self.core.encoding
  end

  def self.core
    @core ||= Core.new { |core|
      core.config = Reline::Config.new
      core.key_stroke = Reline::KeyStroke.new(core.config, core.encoding)
      core.line_editor = Reline::LineEditor.new(core.config)

      core.basic_word_break_characters = " \t\n`><=;|&{("
      core.completer_word_break_characters = " \t\n`><=;|&{("
      core.basic_quote_characters = '"\''
      core.completer_quote_characters = '"\''
      core.filename_quote_characters = ""
      core.special_prefixes = ""
      core.add_dialog_proc(:autocomplete, Reline::DEFAULT_DIALOG_PROC_AUTOCOMPLETE, Reline::DEFAULT_DIALOG_CONTEXT)
    }
  end

  def self.ungetc(c)
    core.io_gate.ungetc(c)
  end

  def self.line_editor
    core.line_editor
  end
end


Reline::IOGate = Reline::IO.decide_io_gate

# Deprecated
Reline::GeneralIO = Reline::Dumb.new

Reline::Face.load_initial_configs

Reline::HISTORY = Reline::History.new(Reline.core.config)
PK*J[��share/ruby/uri/ldap.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# Author::
#  Takaaki Tateishi <ttate@jaist.ac.jp>
#  Akira Yamada <akira@ruby-lang.org>
# License::
#   URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada.
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'generic'

module URI

  #
  # LDAP URI SCHEMA (described in RFC2255).
  #--
  # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]]
  #++
  class LDAP < Generic

    # A Default port of 389 for URI::LDAP.
    DEFAULT_PORT = 389

    # An Array of the available components for URI::LDAP.
    COMPONENT = [
      :scheme,
      :host, :port,
      :dn,
      :attributes,
      :scope,
      :filter,
      :extensions,
    ].freeze

    # Scopes available for the starting point.
    #
    # * SCOPE_BASE - the Base DN
    # * SCOPE_ONE  - one level under the Base DN, not including the base DN and
    #   not including any entries under this
    # * SCOPE_SUB  - subtrees, all entries at all levels
    #
    SCOPE = [
      SCOPE_ONE = 'one',
      SCOPE_SUB = 'sub',
      SCOPE_BASE = 'base',
    ].freeze

    #
    # == Description
    #
    # Creates a new URI::LDAP object from components, with syntax checking.
    #
    # The components accepted are host, port, dn, attributes,
    # scope, filter, and extensions.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, port, dn, attributes, scope, filter, extensions]</code>.
    #
    # Example:
    #
    #     uri = URI::LDAP.build({:host => 'ldap.example.com',
    #       :dn => '/dc=example'})
    #
    #     uri = URI::LDAP.build(["ldap.example.com", nil,
    #       "/dc=example;dc=com", "query", nil, nil, nil])
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)

      if tmp[:dn]
        tmp[:path] = tmp[:dn]
      end

      query = []
      [:extensions, :filter, :scope, :attributes].collect do |x|
        next if !tmp[x] && query.size == 0
        query.unshift(tmp[x])
      end

      tmp[:query] = query.join('?')

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new URI::LDAP object from generic URI components as per
    # RFC 2396. No LDAP-specific syntax checking is performed.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    # Example:
    #
    #     uri = URI::LDAP.new("ldap", nil, "ldap.example.com", nil, nil,
    #       "/dc=example;dc=com", nil, "query", nil)
    #
    # See also URI::Generic.new.
    #
    def initialize(*arg)
      super(*arg)

      if @fragment
        raise InvalidURIError, 'bad LDAP URL'
      end

      parse_dn
      parse_query
    end

    # Private method to cleanup +dn+ from using the +path+ component attribute.
    def parse_dn
      raise InvalidURIError, 'bad LDAP URL' unless @path
      @dn = @path[1..-1]
    end
    private :parse_dn

    # Private method to cleanup +attributes+, +scope+, +filter+, and +extensions+
    # from using the +query+ component attribute.
    def parse_query
      @attributes = nil
      @scope      = nil
      @filter     = nil
      @extensions = nil

      if @query
        attrs, scope, filter, extensions = @query.split('?')

        @attributes = attrs if attrs && attrs.size > 0
        @scope      = scope if scope && scope.size > 0
        @filter     = filter if filter && filter.size > 0
        @extensions = extensions if extensions && extensions.size > 0
      end
    end
    private :parse_query

    # Private method to assemble +query+ from +attributes+, +scope+, +filter+, and +extensions+.
    def build_path_query
      @path = '/' + @dn

      query = []
      [@extensions, @filter, @scope, @attributes].each do |x|
        next if !x && query.size == 0
        query.unshift(x)
      end
      @query = query.join('?')
    end
    private :build_path_query

    # Returns dn.
    def dn
      @dn
    end

    # Private setter for dn +val+.
    def set_dn(val)
      @dn = val
      build_path_query
      @dn
    end
    protected :set_dn

    # Setter for dn +val+.
    def dn=(val)
      set_dn(val)
      val
    end

    # Returns attributes.
    def attributes
      @attributes
    end

    # Private setter for attributes +val+.
    def set_attributes(val)
      @attributes = val
      build_path_query
      @attributes
    end
    protected :set_attributes

    # Setter for attributes +val+.
    def attributes=(val)
      set_attributes(val)
      val
    end

    # Returns scope.
    def scope
      @scope
    end

    # Private setter for scope +val+.
    def set_scope(val)
      @scope = val
      build_path_query
      @scope
    end
    protected :set_scope

    # Setter for scope +val+.
    def scope=(val)
      set_scope(val)
      val
    end

    # Returns filter.
    def filter
      @filter
    end

    # Private setter for filter +val+.
    def set_filter(val)
      @filter = val
      build_path_query
      @filter
    end
    protected :set_filter

    # Setter for filter +val+.
    def filter=(val)
      set_filter(val)
      val
    end

    # Returns extensions.
    def extensions
      @extensions
    end

    # Private setter for extensions +val+.
    def set_extensions(val)
      @extensions = val
      build_path_query
      @extensions
    end
    protected :set_extensions

    # Setter for extensions +val+.
    def extensions=(val)
      set_extensions(val)
      val
    end

    # Checks if URI has a path.
    # For URI::LDAP this will return +false+.
    def hierarchical?
      false
    end
  end

  register_scheme 'LDAP', LDAP
end
PK*J[җA��share/ruby/uri/ldaps.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'ldap'

module URI

  # The default port for LDAPS URIs is 636, and the scheme is 'ldaps:' rather
  # than 'ldap:'. Other than that, LDAPS URIs are identical to LDAP URIs;
  # see URI::LDAP.
  class LDAPS < LDAP
    # A Default port of 636 for URI::LDAPS
    DEFAULT_PORT = 636
  end

  register_scheme 'LDAPS', LDAPS
end
PK*J[�B�4�4�share/ruby/uri/generic.rbnu�[���# frozen_string_literal: true

# = uri/generic.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'common'
autoload :IPSocket, 'socket'
autoload :IPAddr, 'ipaddr'

module URI

  #
  # Base class for all URI classes.
  # Implements generic URI syntax as per RFC 2396.
  #
  class Generic
    include URI

    #
    # A Default port of nil for URI::Generic.
    #
    DEFAULT_PORT = nil

    #
    # Returns default port.
    #
    def self.default_port
      self::DEFAULT_PORT
    end

    #
    # Returns default port.
    #
    def default_port
      self.class.default_port
    end

    #
    # An Array of the available components for URI::Generic.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port, :registry,
      :path, :opaque,
      :query,
      :fragment
    ].freeze

    #
    # Components of the URI in the order.
    #
    def self.component
      self::COMPONENT
    end

    USE_REGISTRY = false # :nodoc:

    def self.use_registry # :nodoc:
      self::USE_REGISTRY
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # At first, tries to create a new URI::Generic instance using
    # URI::Generic::build. But, if exception URI::InvalidComponentError is raised,
    # then it does URI::Escape.escape all URI components and tries again.
    #
    def self.build2(args)
      begin
        return self.build(args)
      rescue InvalidComponentError
        if args.kind_of?(Array)
          return self.build(args.collect{|x|
            if x.is_a?(String)
              URI::RFC2396_PARSER.escape(x)
            else
              x
            end
          })
        elsif args.kind_of?(Hash)
          tmp = {}
          args.each do |key, value|
            tmp[key] = if value
                URI::RFC2396_PARSER.escape(value)
              else
                value
              end
          end
          return self.build(tmp)
        end
      end
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # Creates a new URI::Generic instance from components of URI::Generic
    # with check.  Components are: scheme, userinfo, host, port, registry, path,
    # opaque, query, and fragment. You can provide arguments either by an Array or a Hash.
    # See ::new for hash keys to use or for order of array items.
    #
    def self.build(args)
      if args.kind_of?(Array) &&
          args.size == ::URI::Generic::COMPONENT.size
        tmp = args.dup
      elsif args.kind_of?(Hash)
        tmp = ::URI::Generic::COMPONENT.collect do |c|
          if args.include?(c)
            args[c]
          else
            nil
          end
        end
      else
        component = self.class.component rescue ::URI::Generic::COMPONENT
        raise ArgumentError,
        "expected Array of or Hash of components of #{self.class} (#{component.join(', ')})"
      end

      tmp << nil
      tmp << true
      return self.new(*tmp)
    end

    #
    # == Args
    #
    # +scheme+::
    #   Protocol scheme, i.e. 'http','ftp','mailto' and so on.
    # +userinfo+::
    #   User name and password, i.e. 'sdmitry:bla'.
    # +host+::
    #   Server host name.
    # +port+::
    #   Server port.
    # +registry+::
    #   Registry of naming authorities.
    # +path+::
    #   Path on server.
    # +opaque+::
    #   Opaque part.
    # +query+::
    #   Query data.
    # +fragment+::
    #   Part of the URI after '#' character.
    # +parser+::
    #   Parser for internal use [URI::DEFAULT_PARSER by default].
    # +arg_check+::
    #   Check arguments [false by default].
    #
    # == Description
    #
    # Creates a new URI::Generic instance from ``generic'' components without check.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = DEFAULT_PARSER,
                   arg_check = false)
      @scheme = nil
      @user = nil
      @password = nil
      @host = nil
      @port = nil
      @path = nil
      @query = nil
      @opaque = nil
      @fragment = nil
      @parser = parser == DEFAULT_PARSER ? nil : parser

      if arg_check
        self.scheme = scheme
        self.userinfo = userinfo
        self.hostname = host
        self.port = port
        self.path = path
        self.query = query
        self.opaque = opaque
        self.fragment = fragment
      else
        self.set_scheme(scheme)
        self.set_userinfo(userinfo)
        self.set_host(host)
        self.set_port(port)
        self.set_path(path)
        self.query = query
        self.set_opaque(opaque)
        self.fragment=(fragment)
      end
      if registry
        raise InvalidURIError,
          "the scheme #{@scheme} does not accept registry part: #{registry} (or bad hostname?)"
      end

      @scheme&.freeze
      self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)
      self.set_port(self.default_port) if self.default_port && !@port
    end

    #
    # Returns the scheme component of the URI.
    #
    #   URI("http://foo/bar/baz").scheme #=> "http"
    #
    attr_reader :scheme

    # Returns the host component of the URI.
    #
    #   URI("http://foo/bar/baz").host #=> "foo"
    #
    # It returns nil if no host component exists.
    #
    #   URI("mailto:foo@example.org").host #=> nil
    #
    # The component does not contain the port number.
    #
    #   URI("http://foo:8080/bar/baz").host #=> "foo"
    #
    # Since IPv6 addresses are wrapped with brackets in URIs,
    # this method returns IPv6 addresses wrapped with brackets.
    # This form is not appropriate to pass to socket methods such as TCPSocket.open.
    # If unwrapped host names are required, use the #hostname method.
    #
    #   URI("http://[::1]/bar/baz").host     #=> "[::1]"
    #   URI("http://[::1]/bar/baz").hostname #=> "::1"
    #
    attr_reader :host

    # Returns the port component of the URI.
    #
    #   URI("http://foo/bar/baz").port      #=> 80
    #   URI("http://foo:8080/bar/baz").port #=> 8080
    #
    attr_reader :port

    def registry # :nodoc:
      nil
    end

    # Returns the path component of the URI.
    #
    #   URI("http://foo/bar/baz").path #=> "/bar/baz"
    #
    attr_reader :path

    # Returns the query component of the URI.
    #
    #   URI("http://foo/bar/baz?search=FooBar").query #=> "search=FooBar"
    #
    attr_reader :query

    # Returns the opaque part of the URI.
    #
    #   URI("mailto:foo@example.org").opaque #=> "foo@example.org"
    #   URI("http://foo/bar/baz").opaque     #=> nil
    #
    # The portion of the path that does not make use of the slash '/'.
    # The path typically refers to an absolute path or an opaque part.
    # (See RFC2396 Section 3 and 5.2.)
    #
    attr_reader :opaque

    # Returns the fragment component of the URI.
    #
    #   URI("http://foo/bar/baz?search=FooBar#ponies").fragment #=> "ponies"
    #
    attr_reader :fragment

    # Returns the parser to be used.
    #
    # Unless a URI::Parser is defined, DEFAULT_PARSER is used.
    #
    def parser
      if !defined?(@parser) || !@parser
        DEFAULT_PARSER
      else
        @parser || DEFAULT_PARSER
      end
    end

    # Replaces self by other URI object.
    #
    def replace!(oth)
      if self.class != oth.class
        raise ArgumentError, "expected #{self.class} object"
      end

      component.each do |c|
        self.__send__("#{c}=", oth.__send__(c))
      end
    end
    private :replace!

    #
    # Components of the URI in the order.
    #
    def component
      self.class.component
    end

    #
    # Checks the scheme +v+ component against the URI::Parser Regexp for :SCHEME.
    #
    def check_scheme(v)
      if v && parser.regexp[:SCHEME] !~ v
        raise InvalidComponentError,
          "bad component(expected scheme component): #{v}"
      end

      return true
    end
    private :check_scheme

    # Protected setter for the scheme component +v+.
    #
    # See also URI::Generic.scheme=.
    #
    def set_scheme(v)
      @scheme = v&.downcase
    end
    protected :set_scheme

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the scheme component +v+
    # (with validation).
    #
    # See also URI::Generic.check_scheme.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com")
    #   uri.scheme = "https"
    #   uri.to_s  #=> "https://my.example.com"
    #
    def scheme=(v)
      check_scheme(v)
      set_scheme(v)
      v
    end

    #
    # Checks the +user+ and +password+.
    #
    # If +password+ is not provided, then +user+ is
    # split, using URI::Generic.split_userinfo, to
    # pull +user+ and +password.
    #
    # See also URI::Generic.check_user, URI::Generic.check_password.
    #
    def check_userinfo(user, password = nil)
      if !password
        user, password = split_userinfo(user)
      end
      check_user(user)
      check_password(password, user)

      return true
    end
    private :check_userinfo

    #
    # Checks the user +v+ component for RFC2396 compliance
    # and against the URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_user(v)
      if @opaque
        raise InvalidURIError,
          "cannot set user with opaque"
      end

      return v unless v

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad component(expected userinfo component or user component): #{v}"
      end

      return true
    end
    private :check_user

    #
    # Checks the password +v+ component for RFC2396 compliance
    # and against the URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_password(v, user = @user)
      if @opaque
        raise InvalidURIError,
          "cannot set password with opaque"
      end
      return v unless v

      if !user
        raise InvalidURIError,
          "password component depends user component"
      end

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad password component"
      end

      return true
    end
    private :check_password

    #
    # Sets userinfo, argument is string like 'name:pass'.
    #
    def userinfo=(userinfo)
      if userinfo.nil?
        return nil
      end
      check_userinfo(*userinfo)
      set_userinfo(*userinfo)
      # returns userinfo
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +user+ component
    # (with validation).
    #
    # See also URI::Generic.check_user.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.user = "sam"
    #   uri.to_s  #=> "http://sam:V3ry_S3nsit1ve@my.example.com"
    #
    def user=(user)
      check_user(user)
      set_user(user)
      # returns user
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +password+ component
    # (with validation).
    #
    # See also URI::Generic.check_password.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.password = "V3ry_S3nsit1ve"
    #   uri.to_s  #=> "http://john:V3ry_S3nsit1ve@my.example.com"
    #
    def password=(password)
      check_password(password)
      set_password(password)
      # returns password
    end

    # Protected setter for the +user+ component, and +password+ if available
    # (with validation).
    #
    # See also URI::Generic.userinfo=.
    #
    def set_userinfo(user, password = nil)
      unless password
        user, password = split_userinfo(user)
      end
      @user     = user
      @password = password if password

      [@user, @password]
    end
    protected :set_userinfo

    # Protected setter for the user component +v+.
    #
    # See also URI::Generic.user=.
    #
    def set_user(v)
      set_userinfo(v, @password)
      v
    end
    protected :set_user

    # Protected setter for the password component +v+.
    #
    # See also URI::Generic.password=.
    #
    def set_password(v)
      @password = v
      # returns v
    end
    protected :set_password

    # Returns the userinfo +ui+ as <code>[user, password]</code>
    # if properly formatted as 'user:password'.
    def split_userinfo(ui)
      return nil, nil unless ui
      user, password = ui.split(':', 2)

      return user, password
    end
    private :split_userinfo

    # Escapes 'user:password' +v+ based on RFC 1738 section 3.1.
    def escape_userpass(v)
      parser.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/
    end
    private :escape_userpass

    # Returns the userinfo, either as 'user' or 'user:password'.
    def userinfo
      if @user.nil?
        nil
      elsif @password.nil?
        @user
      else
        @user + ':' + @password
      end
    end

    # Returns the user component (without URI decoding).
    def user
      @user
    end

    # Returns the password component (without URI decoding).
    def password
      @password
    end

    # Returns the user component after URI decoding.
    def decoded_user
      URI.decode_uri_component(@user) if @user
    end

    # Returns the password component after URI decoding.
    def decoded_password
      URI.decode_uri_component(@password) if @password
    end

    #
    # Checks the host +v+ component for RFC2396 compliance
    # and against the URI::Parser Regexp for :HOST.
    #
    # Can not have a registry or opaque component defined,
    # with a host component defined.
    #
    def check_host(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "cannot set host with registry or opaque"
      elsif parser.regexp[:HOST] !~ v
        raise InvalidComponentError,
          "bad component(expected host component): #{v}"
      end

      return true
    end
    private :check_host

    # Protected setter for the host component +v+.
    #
    # See also URI::Generic.host=.
    #
    def set_host(v)
      @host = v
    end
    protected :set_host

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the host component +v+
    # (with validation).
    #
    # See also URI::Generic.check_host.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com")
    #   uri.host = "foo.com"
    #   uri.to_s  #=> "http://foo.com"
    #
    def host=(v)
      check_host(v)
      set_host(v)
      v
    end

    # Extract the host part of the URI and unwrap brackets for IPv6 addresses.
    #
    # This method is the same as URI::Generic#host except
    # brackets for IPv6 (and future IP) addresses are removed.
    #
    #   uri = URI("http://[::1]/bar")
    #   uri.hostname      #=> "::1"
    #   uri.host          #=> "[::1]"
    #
    def hostname
      v = self.host
      v&.start_with?('[') && v.end_with?(']') ? v[1..-2] : v
    end

    # Sets the host part of the URI as the argument with brackets for IPv6 addresses.
    #
    # This method is the same as URI::Generic#host= except
    # the argument can be a bare IPv6 address.
    #
    #   uri = URI("http://foo/bar")
    #   uri.hostname = "::1"
    #   uri.to_s  #=> "http://[::1]/bar"
    #
    # If the argument seems to be an IPv6 address,
    # it is wrapped with brackets.
    #
    def hostname=(v)
      v = "[#{v}]" if !(v&.start_with?('[') && v&.end_with?(']')) && v&.index(':')
      self.host = v
    end

    #
    # Checks the port +v+ component for RFC2396 compliance
    # and against the URI::Parser Regexp for :PORT.
    #
    # Can not have a registry or opaque component defined,
    # with a port component defined.
    #
    def check_port(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "cannot set port with registry or opaque"
      elsif !v.kind_of?(Integer) && parser.regexp[:PORT] !~ v
        raise InvalidComponentError,
          "bad component(expected port component): #{v.inspect}"
      end

      return true
    end
    private :check_port

    # Protected setter for the port component +v+.
    #
    # See also URI::Generic.port=.
    #
    def set_port(v)
      v = v.empty? ? nil : v.to_i unless !v || v.kind_of?(Integer)
      @port = v
    end
    protected :set_port

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the port component +v+
    # (with validation).
    #
    # See also URI::Generic.check_port.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com")
    #   uri.port = 8080
    #   uri.to_s  #=> "http://my.example.com:8080"
    #
    def port=(v)
      check_port(v)
      set_port(v)
      port
    end

    def check_registry(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end
    private :check_registry

    def set_registry(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end
    protected :set_registry

    def registry=(v) # :nodoc:
      raise InvalidURIError, "cannot set registry"
    end

    #
    # Checks the path +v+ component for RFC2396 compliance
    # and against the URI::Parser Regexp
    # for :ABS_PATH and :REL_PATH.
    #
    # Can not have a opaque component defined,
    # with a path component defined.
    #
    def check_path(v)
      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if v && @opaque
        raise InvalidURIError,
          "path conflicts with opaque"
      end

      # If scheme is ftp, path may be relative.
      # See RFC 1738 section 3.2.2, and RFC 2396.
      if @scheme && @scheme != "ftp"
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected absolute path component): #{v}"
        end
      else
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v &&
           parser.regexp[:REL_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected relative path component): #{v}"
        end
      end

      return true
    end
    private :check_path

    # Protected setter for the path component +v+.
    #
    # See also URI::Generic.path=.
    #
    def set_path(v)
      @path = v
    end
    protected :set_path

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the path component +v+
    # (with validation).
    #
    # See also URI::Generic.check_path.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com/pub/files")
    #   uri.path = "/faq/"
    #   uri.to_s  #=> "http://my.example.com/faq/"
    #
    def path=(v)
      check_path(v)
      set_path(v)
      v
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the query component +v+.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com/?id=25")
    #   uri.query = "id=1"
    #   uri.to_s  #=> "http://my.example.com/?id=1"
    #
    def query=(v)
      return @query = nil unless v
      raise InvalidURIError, "query conflicts with opaque" if @opaque

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      raise InvalidURIError, "invalid percent escape: #{$1}" if /(%\H\H)/n.match(v)
      v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @query = v
    end

    #
    # Checks the opaque +v+ component for RFC2396 compliance and
    # against the URI::Parser Regexp for :OPAQUE.
    #
    # Can not have a host, port, user, or path component defined,
    # with an opaque component defined.
    #
    def check_opaque(v)
      return v unless v

      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if @host || @port || @user || @path  # userinfo = @user + ':' + @password
        raise InvalidURIError,
          "cannot set opaque with host, port, userinfo or path"
      elsif v && parser.regexp[:OPAQUE] !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      return true
    end
    private :check_opaque

    # Protected setter for the opaque component +v+.
    #
    # See also URI::Generic.opaque=.
    #
    def set_opaque(v)
      @opaque = v
    end
    protected :set_opaque

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the opaque component +v+
    # (with validation).
    #
    # See also URI::Generic.check_opaque.
    #
    def opaque=(v)
      check_opaque(v)
      set_opaque(v)
      v
    end

    #
    # Checks the fragment +v+ component against the URI::Parser Regexp for :FRAGMENT.
    #
    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the fragment component +v+
    # (with validation).
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com/?id=25#time=1305212049")
    #   uri.fragment = "time=1305212086"
    #   uri.to_s  #=> "http://my.example.com/?id=25#time=1305212086"
    #
    def fragment=(v)
      return @fragment = nil unless v

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @fragment = v
    end

    #
    # Returns true if URI is hierarchical.
    #
    # == Description
    #
    # URI has components listed in order of decreasing significance from left to right,
    # see RFC3986 https://www.rfc-editor.org/rfc/rfc3986 1.2.3.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com/")
    #   uri.hierarchical?
    #   #=> true
    #   uri = URI.parse("mailto:joe@example.com")
    #   uri.hierarchical?
    #   #=> false
    #
    def hierarchical?
      if @path
        true
      else
        false
      end
    end

    #
    # Returns true if URI has a scheme (e.g. http:// or https://) specified.
    #
    def absolute?
      if @scheme
        true
      else
        false
      end
    end
    alias absolute absolute?

    #
    # Returns true if URI does not have a scheme (e.g. http:// or https://) specified.
    #
    def relative?
      !absolute?
    end

    #
    # Returns an Array of the path split on '/'.
    #
    def split_path(path)
      path.split("/", -1)
    end
    private :split_path

    #
    # Merges a base path +base+, with relative path +rel+,
    # returns a modified base path.
    #
    def merge_path(base, rel)

      # RFC2396, Section 5.2, 5)
      # RFC2396, Section 5.2, 6)
      base_path = split_path(base)
      rel_path  = split_path(rel)

      # RFC2396, Section 5.2, 6), a)
      base_path << '' if base_path.last == '..'
      while i = base_path.index('..')
        base_path.slice!(i - 1, 2)
      end

      if (first = rel_path.first) and first.empty?
        base_path.clear
        rel_path.shift
      end

      # RFC2396, Section 5.2, 6), c)
      # RFC2396, Section 5.2, 6), d)
      rel_path.push('') if rel_path.last == '.' || rel_path.last == '..'
      rel_path.delete('.')

      # RFC2396, Section 5.2, 6), e)
      tmp = []
      rel_path.each do |x|
        if x == '..' &&
            !(tmp.empty? || tmp.last == '..')
          tmp.pop
        else
          tmp << x
        end
      end

      add_trailer_slash = !tmp.empty?
      if base_path.empty?
        base_path = [''] # keep '/' for root directory
      elsif add_trailer_slash
        base_path.pop
      end
      while x = tmp.shift
        if x == '..'
          # RFC2396, Section 4
          # a .. or . in an absolute path has no special meaning
          base_path.pop if base_path.size > 1
        else
          # if x == '..'
          #   valid absolute (but abnormal) path "/../..."
          # else
          #   valid absolute path
          # end
          base_path << x
          tmp.each {|t| base_path << t}
          add_trailer_slash = false
          break
        end
      end
      base_path.push('') if add_trailer_slash

      return base_path.join('/')
    end
    private :merge_path

    #
    # == Args
    #
    # +oth+::
    #    URI or String
    #
    # == Description
    #
    # Destructive form of #merge.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com")
    #   uri.merge!("/main.rbx?page=1")
    #   uri.to_s  # => "http://my.example.com/main.rbx?page=1"
    #
    def merge!(oth)
      t = merge(oth)
      if self == t
        nil
      else
        replace!(t)
        self
      end
    end

    #
    # == Args
    #
    # +oth+::
    #    URI or String
    #
    # == Description
    #
    # Merges two URIs.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com")
    #   uri.merge("/main.rbx?page=1")
    #   # => "http://my.example.com/main.rbx?page=1"
    #
    def merge(oth)
      rel = parser.__send__(:convert_to_uri, oth)

      if rel.absolute?
        #raise BadURIError, "both URI are absolute" if absolute?
        # hmm... should return oth for usability?
        return rel
      end

      unless self.absolute?
        raise BadURIError, "both URI are relative"
      end

      base = self.dup

      authority = rel.userinfo || rel.host || rel.port

      # RFC2396, Section 5.2, 2)
      if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query
        base.fragment=(rel.fragment) if rel.fragment
        return base
      end

      base.query = nil
      base.fragment=(nil)

      # RFC2396, Section 5.2, 4)
      if authority
        base.set_userinfo(rel.userinfo)
        base.set_host(rel.host)
        base.set_port(rel.port || base.default_port)
        base.set_path(rel.path)
      elsif base.path && rel.path
        base.set_path(merge_path(base.path, rel.path))
      end

      # RFC2396, Section 5.2, 7)
      base.query = rel.query       if rel.query
      base.fragment=(rel.fragment) if rel.fragment

      return base
    end # merge
    alias + merge

    # :stopdoc:
    def route_from_path(src, dst)
      case dst
      when src
        # RFC2396, Section 4.2
        return ''
      when %r{(?:\A|/)\.\.?(?:/|\z)}
        # dst has abnormal absolute path,
        # like "/./", "/../", "/x/../", ...
        return dst.dup
      end

      src_path = src.scan(%r{[^/]*/})
      dst_path = dst.scan(%r{[^/]*/?})

      # discard same parts
      while !dst_path.empty? && dst_path.first == src_path.first
        src_path.shift
        dst_path.shift
      end

      tmp = dst_path.join

      # calculate
      if src_path.empty?
        if tmp.empty?
          return './'
        elsif dst_path.first.include?(':') # (see RFC2396 Section 5)
          return './' + tmp
        else
          return tmp
        end
      end

      return '../' * src_path.size + tmp
    end
    private :route_from_path
    # :startdoc:

    # :stopdoc:
    def route_from0(oth)
      oth = parser.__send__(:convert_to_uri, oth)
      if self.relative?
        raise BadURIError,
          "relative URI: #{self}"
      end
      if oth.relative?
        raise BadURIError,
          "relative URI: #{oth}"
      end

      if self.scheme != oth.scheme
        return self, self.dup
      end
      rel = URI::Generic.new(nil, # it is relative URI
                             self.userinfo, self.host, self.port,
                             nil, self.path, self.opaque,
                             self.query, self.fragment, parser)

      if rel.userinfo != oth.userinfo ||
          rel.host.to_s.downcase != oth.host.to_s.downcase ||
          rel.port != oth.port

        if self.userinfo.nil? && self.host.nil?
          return self, self.dup
        end

        rel.set_port(nil) if rel.port == oth.default_port
        return rel, rel
      end
      rel.set_userinfo(nil)
      rel.set_host(nil)
      rel.set_port(nil)

      if rel.path && rel.path == oth.path
        rel.set_path('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      elsif rel.opaque && rel.opaque == oth.opaque
        rel.set_opaque('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      end

      # you can modify `rel', but cannot `oth'.
      return oth, rel
    end
    private :route_from0
    # :startdoc:

    #
    # == Args
    #
    # +oth+::
    #    URI or String
    #
    # == Description
    #
    # Calculates relative path from oth to self.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse('http://my.example.com/main.rbx?page=1')
    #   uri.route_from('http://my.example.com')
    #   #=> #<URI::Generic /main.rbx?page=1>
    #
    def route_from(oth)
      # you can modify `rel', but cannot `oth'.
      begin
        oth, rel = route_from0(oth)
      rescue
        raise $!.class, $!.message
      end
      if oth == rel
        return rel
      end

      rel.set_path(route_from_path(oth.path, self.path))
      if rel.path == './' && self.query
        # "./?foo" -> "?foo"
        rel.set_path('')
      end

      return rel
    end

    alias - route_from

    #
    # == Args
    #
    # +oth+::
    #    URI or String
    #
    # == Description
    #
    # Calculates relative path to oth from self.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse('http://my.example.com')
    #   uri.route_to('http://my.example.com/main.rbx?page=1')
    #   #=> #<URI::Generic /main.rbx?page=1>
    #
    def route_to(oth)
      parser.__send__(:convert_to_uri, oth).route_from(self)
    end

    #
    # Returns normalized URI.
    #
    #   require 'uri'
    #
    #   URI("HTTP://my.EXAMPLE.com").normalize
    #   #=> #<URI::HTTP http://my.example.com/>
    #
    # Normalization here means:
    #
    # * scheme and host are converted to lowercase,
    # * an empty path component is set to "/".
    #
    def normalize
      uri = dup
      uri.normalize!
      uri
    end

    #
    # Destructive version of #normalize.
    #
    def normalize!
      if path&.empty?
        set_path('/')
      end
      if scheme && scheme != scheme.downcase
        set_scheme(self.scheme.downcase)
      end
      if host && host != host.downcase
        set_host(self.host.downcase)
      end
    end

    #
    # Constructs String from URI.
    #
    def to_s
      str = ''.dup
      if @scheme
        str << @scheme
        str << ':'
      end

      if @opaque
        str << @opaque
      else
        if @host || %w[file postgres].include?(@scheme)
          str << '//'
        end
        if self.userinfo
          str << self.userinfo
          str << '@'
        end
        if @host
          str << @host
        end
        if @port && @port != self.default_port
          str << ':'
          str << @port.to_s
        end
        if (@host || @port) && !@path.empty? && !@path.start_with?('/')
          str << '/'
        end
        str << @path
        if @query
          str << '?'
          str << @query
        end
      end
      if @fragment
        str << '#'
        str << @fragment
      end
      str
    end
    alias to_str to_s

    #
    # Compares two URIs.
    #
    def ==(oth)
      if self.class == oth.class
        self.normalize.component_ary == oth.normalize.component_ary
      else
        false
      end
    end

    # Returns the hash value.
    def hash
      self.component_ary.hash
    end

    # Compares with _oth_ for Hash.
    def eql?(oth)
      self.class == oth.class &&
      parser == oth.parser &&
      self.component_ary.eql?(oth.component_ary)
    end

    # Returns an Array of the components defined from the COMPONENT Array.
    def component_ary
      component.collect do |x|
        self.__send__(x)
      end
    end
    protected :component_ary

    # == Args
    #
    # +components+::
    #    Multiple Symbol arguments defined in URI::HTTP.
    #
    # == Description
    #
    # Selects specified components from URI.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse('http://myuser:mypass@my.example.com/test.rbx')
    #   uri.select(:userinfo, :host, :path)
    #   # => ["myuser:mypass", "my.example.com", "/test.rbx"]
    #
    def select(*components)
      components.collect do |c|
        if component.include?(c)
          self.__send__(c)
        else
          raise ArgumentError,
            "expected of components of #{self.class} (#{self.class.component.join(', ')})"
        end
      end
    end

    def inspect # :nodoc:
      "#<#{self.class} #{self}>"
    end

    #
    # == Args
    #
    # +v+::
    #    URI or String
    #
    # == Description
    #
    # Attempts to parse other URI +oth+,
    # returns [parsed_oth, self].
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("http://my.example.com")
    #   uri.coerce("http://foo.com")
    #   #=> [#<URI::HTTP http://foo.com>, #<URI::HTTP http://my.example.com>]
    #
    def coerce(oth)
      case oth
      when String
        oth = parser.parse(oth)
      else
        super
      end

      return oth, self
    end

    # Returns a proxy URI.
    # The proxy URI is obtained from environment variables such as http_proxy,
    # ftp_proxy, no_proxy, etc.
    # If there is no proper proxy, nil is returned.
    #
    # If the optional parameter +env+ is specified, it is used instead of ENV.
    #
    # Note that capitalized variables (HTTP_PROXY, FTP_PROXY, NO_PROXY, etc.)
    # are examined, too.
    #
    # But http_proxy and HTTP_PROXY is treated specially under CGI environment.
    # It's because HTTP_PROXY may be set by Proxy: header.
    # So HTTP_PROXY is not used.
    # http_proxy is not used too if the variable is case insensitive.
    # CGI_HTTP_PROXY can be used instead.
    def find_proxy(env=ENV)
      raise BadURIError, "relative URI: #{self}" if self.relative?
      name = self.scheme.downcase + '_proxy'
      proxy_uri = nil
      if name == 'http_proxy' && env.include?('REQUEST_METHOD') # CGI?
        # HTTP_PROXY conflicts with *_proxy for proxy settings and
        # HTTP_* for header information in CGI.
        # So it should be careful to use it.
        pairs = env.reject {|k, v| /\Ahttp_proxy\z/i !~ k }
        case pairs.length
        when 0 # no proxy setting anyway.
          proxy_uri = nil
        when 1
          k, _ = pairs.shift
          if k == 'http_proxy' && env[k.upcase] == nil
            # http_proxy is safe to use because ENV is case sensitive.
            proxy_uri = env[name]
          else
            proxy_uri = nil
          end
        else # http_proxy is safe to use because ENV is case sensitive.
          proxy_uri = env.to_hash[name]
        end
        if !proxy_uri
          # Use CGI_HTTP_PROXY.  cf. libwww-perl.
          proxy_uri = env["CGI_#{name.upcase}"]
        end
      elsif name == 'http_proxy'
        if RUBY_ENGINE == 'jruby' && p_addr = ENV_JAVA['http.proxyHost']
          p_port = ENV_JAVA['http.proxyPort']
          if p_user = ENV_JAVA['http.proxyUser']
            p_pass = ENV_JAVA['http.proxyPass']
            proxy_uri = "http://#{p_user}:#{p_pass}@#{p_addr}:#{p_port}"
          else
            proxy_uri = "http://#{p_addr}:#{p_port}"
          end
        else
          unless proxy_uri = env[name]
            if proxy_uri = env[name.upcase]
              warn 'The environment variable HTTP_PROXY is discouraged.  Use http_proxy.', uplevel: 1
            end
          end
        end
      else
        proxy_uri = env[name] || env[name.upcase]
      end

      if proxy_uri.nil? || proxy_uri.empty?
        return nil
      end

      if self.hostname
        begin
          addr = IPSocket.getaddress(self.hostname)
          return nil if /\A127\.|\A::1\z/ =~ addr
        rescue SocketError
        end
      end

      name = 'no_proxy'
      if no_proxy = env[name] || env[name.upcase]
        return nil unless URI::Generic.use_proxy?(self.hostname, addr, self.port, no_proxy)
      end
      URI.parse(proxy_uri)
    end

    def self.use_proxy?(hostname, addr, port, no_proxy) # :nodoc:
      hostname = hostname.downcase
      dothostname = ".#{hostname}"
      no_proxy.scan(/([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|
        if !p_port || port == p_port.to_i
          if p_host.start_with?('.')
            return false if hostname.end_with?(p_host.downcase)
          else
            return false if dothostname.end_with?(".#{p_host.downcase}")
          end
          if addr
            begin
              return false if IPAddr.new(p_host).include?(addr)
            rescue IPAddr::InvalidAddressError
              next
            end
          end
        end
      }
      true
    end
  end
end
PK*J[�N share/ruby/uri/rfc3986_parser.rbnu�[���# frozen_string_literal: true
module URI
  class RFC3986_Parser # :nodoc:
    # URI defined in RFC3986
    HOST = %r[
      (?<IP-literal>\[(?:
          (?<IPv6address>
            (?:\h{1,4}:){6}
            (?<ls32>\h{1,4}:\h{1,4}
            | (?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)
                \.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>)
            )
          | ::(?:\h{1,4}:){5}\g<ls32>
          | \h{1,4}?::(?:\h{1,4}:){4}\g<ls32>
          | (?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>
          | (?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>
          | (?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>
          | (?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>
          | (?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}
          | (?:(?:\h{1,4}:){,6}\h{1,4})?::
          )
        | (?<IPvFuture>v\h++\.[!$&-.0-9:;=A-Z_a-z~]++)
        )\])
    | \g<IPv4address>
    | (?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*+)
    ]x

    USERINFO = /(?:%\h\h|[!$&-.0-9:;=A-Z_a-z~])*+/

    SCHEME = %r[[A-Za-z][+\-.0-9A-Za-z]*+].source
    SEG = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/])].source
    SEG_NC = %r[(?:%\h\h|[!$&-.0-9;=@A-Z_a-z~])].source
    FRAGMENT = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+].source

    RFC3986_URI = %r[\A
    (?<seg>#{SEG}){0}
    (?<URI>
      (?<scheme>#{SCHEME}):
      (?<hier-part>//
        (?<authority>
          (?:(?<userinfo>#{USERINFO.source})@)?
          (?<host>#{HOST.source.delete(" \n")})
          (?::(?<port>\d*+))?
        )
        (?<path-abempty>(?:/\g<seg>*+)?)
      | (?<path-absolute>/((?!/)\g<seg>++)?)
      | (?<path-rootless>(?!/)\g<seg>++)
      | (?<path-empty>)
      )
      (?:\?(?<query>[^\#]*+))?
      (?:\#(?<fragment>#{FRAGMENT}))?
    )\z]x

    RFC3986_relative_ref = %r[\A
    (?<seg>#{SEG}){0}
    (?<relative-ref>
      (?<relative-part>//
        (?<authority>
          (?:(?<userinfo>#{USERINFO.source})@)?
          (?<host>#{HOST.source.delete(" \n")}(?<!/))?
          (?::(?<port>\d*+))?
        )
        (?<path-abempty>(?:/\g<seg>*+)?)
      | (?<path-absolute>/\g<seg>*+)
      | (?<path-noscheme>#{SEG_NC}++(?:/\g<seg>*+)?)
      | (?<path-empty>)
      )
      (?:\?(?<query>[^#]*+))?
      (?:\#(?<fragment>#{FRAGMENT}))?
    )\z]x
    attr_reader :regexp

    def initialize
      @regexp = default_regexp.each_value(&:freeze).freeze
    end

    def split(uri) #:nodoc:
      begin
        uri = uri.to_str
      rescue NoMethodError
        raise InvalidURIError, "bad URI (is not URI?): #{uri.inspect}"
      end
      uri.ascii_only? or
        raise InvalidURIError, "URI must be ascii only #{uri.dump}"
      if m = RFC3986_URI.match(uri)
        query = m["query"]
        scheme = m["scheme"]
        opaque = m["path-rootless"]
        if opaque
          opaque << "?#{query}" if query
          [ scheme,
            nil, # userinfo
            nil, # host
            nil, # port
            nil, # registry
            nil, # path
            opaque,
            nil, # query
            m["fragment"]
          ]
        else # normal
          [ scheme,
            m["userinfo"],
            m["host"],
            m["port"],
            nil, # registry
            (m["path-abempty"] ||
             m["path-absolute"] ||
             m["path-empty"]),
            nil, # opaque
            query,
            m["fragment"]
          ]
        end
      elsif m = RFC3986_relative_ref.match(uri)
        [ nil, # scheme
          m["userinfo"],
          m["host"],
          m["port"],
          nil, # registry,
          (m["path-abempty"] ||
           m["path-absolute"] ||
           m["path-noscheme"] ||
           m["path-empty"]),
          nil, # opaque
          m["query"],
          m["fragment"]
        ]
      else
        raise InvalidURIError, "bad URI (is not URI?): #{uri.inspect}"
      end
    end

    def parse(uri) # :nodoc:
      URI.for(*self.split(uri), self)
    end

    def join(*uris) # :nodoc:
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    # Compatibility for RFC2396 parser
    def extract(str, schemes = nil, &block) # :nodoc:
      warn "URI::RFC3986_PARSER.extract is obsolete. Use URI::RFC2396_PARSER.extract explicitly.", uplevel: 1 if $VERBOSE
      RFC2396_PARSER.extract(str, schemes, &block)
    end

    # Compatibility for RFC2396 parser
    def make_regexp(schemes = nil) # :nodoc:
      warn "URI::RFC3986_PARSER.make_regexp is obsolete. Use URI::RFC2396_PARSER.make_regexp explicitly.", uplevel: 1 if $VERBOSE
      RFC2396_PARSER.make_regexp(schemes)
    end

    # Compatibility for RFC2396 parser
    def escape(str, unsafe = nil) # :nodoc:
      warn "URI::RFC3986_PARSER.escape is obsolete. Use URI::RFC2396_PARSER.escape explicitly.", uplevel: 1 if $VERBOSE
      unsafe ? RFC2396_PARSER.escape(str, unsafe) : RFC2396_PARSER.escape(str)
    end

    # Compatibility for RFC2396 parser
    def unescape(str, escaped = nil) # :nodoc:
      warn "URI::RFC3986_PARSER.unescape is obsolete. Use URI::RFC2396_PARSER.unescape explicitly.", uplevel: 1 if $VERBOSE
      escaped ? RFC2396_PARSER.unescape(str, escaped) : RFC2396_PARSER.unescape(str)
    end

    @@to_s = Kernel.instance_method(:to_s)
    if @@to_s.respond_to?(:bind_call)
      def inspect
        @@to_s.bind_call(self)
      end
    else
      def inspect
        @@to_s.bind(self).call
      end
    end

    private

    def default_regexp # :nodoc:
      {
        SCHEME: %r[\A#{SCHEME}\z]o,
        USERINFO: %r[\A#{USERINFO}\z]o,
        HOST: %r[\A#{HOST}\z]o,
        ABS_PATH: %r[\A/#{SEG}*+\z]o,
        REL_PATH: %r[\A(?!/)#{SEG}++\z]o,
        QUERY: %r[\A(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+\z],
        FRAGMENT: %r[\A#{FRAGMENT}\z]o,
        OPAQUE: %r[\A(?:[^/].*)?\z],
        PORT: /\A[\x09\x0a\x0c\x0d ]*+\d*[\x09\x0a\x0c\x0d ]*\z/,
      }
    end

    def convert_to_uri(uri)
      if uri.is_a?(URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected URI object or URI string)"
      end
    end

  end # class Parser
end # module URI
PK*J[���..share/ruby/uri/https.rbnu�[���# frozen_string_literal: false
# = uri/https.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'http'

module URI

  # The default port for HTTPS URIs is 443, and the scheme is 'https:' rather
  # than 'http:'. Other than that, HTTPS URIs are identical to HTTP URIs;
  # see URI::HTTP.
  class HTTPS < HTTP
    # A Default port of 443 for URI::HTTPS
    DEFAULT_PORT = 443
  end

  register_scheme 'HTTPS', HTTPS
end
PK*J[�(�g��share/ruby/uri/version.rbnu�[���module URI
  # :stopdoc:
  VERSION_CODE = '010003'.freeze
  VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
  # :startdoc:
end
PK*J[\\�&&share/ruby/uri/ftp.rbnu�[���# frozen_string_literal: false
# = uri/ftp.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'generic'

module URI

  #
  # FTP URI syntax is defined by RFC1738 section 3.2.
  #
  # This class will be redesigned because of difference of implementations;
  # the structure of its path. draft-hoffman-ftp-uri-04 is a draft but it
  # is a good summary about the de facto spec.
  # https://datatracker.ietf.org/doc/html/draft-hoffman-ftp-uri-04
  #
  class FTP < Generic
    # A Default port of 21 for URI::FTP.
    DEFAULT_PORT = 21

    #
    # An Array of the available components for URI::FTP.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port,
      :path, :typecode
    ].freeze

    #
    # Typecode is "a", "i", or "d".
    #
    # * "a" indicates a text file (the FTP command was ASCII)
    # * "i" indicates a binary file (FTP command IMAGE)
    # * "d" indicates the contents of a directory should be displayed
    #
    TYPECODE = ['a', 'i', 'd'].freeze

    # Typecode prefix ";type=".
    TYPECODE_PREFIX = ';type='.freeze

    def self.new2(user, password, host, port, path,
                  typecode = nil, arg_check = true) # :nodoc:
      # Do not use this method!  Not tested.  [Bug #7301]
      # This methods remains just for compatibility,
      # Keep it undocumented until the active maintainer is assigned.
      typecode = nil if typecode.size == 0
      if typecode && !TYPECODE.include?(typecode)
        raise ArgumentError,
          "bad typecode is specified: #{typecode}"
      end

      # do escape

      self.new('ftp',
               [user, password],
               host, port, nil,
               typecode ? path + TYPECODE_PREFIX + typecode : path,
               nil, nil, nil, arg_check)
    end

    #
    # == Description
    #
    # Creates a new URI::FTP object from components, with syntax checking.
    #
    # The components accepted are +userinfo+, +host+, +port+, +path+, and
    # +typecode+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, typecode]</code>.
    #
    # If the path supplied is absolute, it will be escaped in order to
    # make it absolute in the URI.
    #
    # Examples:
    #
    #     require 'uri'
    #
    #     uri1 = URI::FTP.build(['user:password', 'ftp.example.com', nil,
    #       '/path/file.zip', 'i'])
    #     uri1.to_s  # => "ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=i"
    #
    #     uri2 = URI::FTP.build({:host => 'ftp.example.com',
    #       :path => 'ruby/src'})
    #     uri2.to_s  # => "ftp://ftp.example.com/ruby/src"
    #
    def self.build(args)

      # Fix the incoming path to be generic URL syntax
      # FTP path  ->  URL path
      # foo/bar       /foo/bar
      # /foo/bar      /%2Ffoo/bar
      #
      if args.kind_of?(Array)
        args[3] = '/' + args[3].sub(/^\//, '%2F')
      else
        args[:path] = '/' + args[:path].sub(/^\//, '%2F')
      end

      tmp = Util::make_components_hash(self, args)

      if tmp[:typecode]
        if tmp[:typecode].size == 1
          tmp[:typecode] = TYPECODE_PREFIX + tmp[:typecode]
        end
        tmp[:path] << tmp[:typecode]
      end

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new URI::FTP object from generic URL components with no
    # syntax checking.
    #
    # Unlike build(), this method does not escape the path component as
    # required by RFC1738; instead it is treated as per RFC2396.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = nil,
                   arg_check = false)
      raise InvalidURIError unless path
      path = path.sub(/^\//,'')
      path.sub!(/^%2F/,'/')
      super(scheme, userinfo, host, port, registry, path, opaque,
            query, fragment, parser, arg_check)
      @typecode = nil
      if tmp = @path.index(TYPECODE_PREFIX)
        typecode = @path[tmp + TYPECODE_PREFIX.size..-1]
        @path = @path[0..tmp - 1]

        if arg_check
          self.typecode = typecode
        else
          self.set_typecode(typecode)
        end
      end
    end

    # typecode accessor.
    #
    # See URI::FTP::COMPONENT.
    attr_reader :typecode

    # Validates typecode +v+,
    # returns +true+ or +false+.
    #
    def check_typecode(v)
      if TYPECODE.include?(v)
        return true
      else
        raise InvalidComponentError,
          "bad typecode(expected #{TYPECODE.join(', ')}): #{v}"
      end
    end
    private :check_typecode

    # Private setter for the typecode +v+.
    #
    # See also URI::FTP.typecode=.
    #
    def set_typecode(v)
      @typecode = v
    end
    protected :set_typecode

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the typecode +v+
    # (with validation).
    #
    # See also URI::FTP.check_typecode.
    #
    # == Usage
    #
    #   require 'uri'
    #
    #   uri = URI.parse("ftp://john@ftp.example.com/my_file.img")
    #   #=> #<URI::FTP ftp://john@ftp.example.com/my_file.img>
    #   uri.typecode = "i"
    #   uri
    #   #=> #<URI::FTP ftp://john@ftp.example.com/my_file.img;type=i>
    #
    def typecode=(typecode)
      check_typecode(typecode)
      set_typecode(typecode)
      typecode
    end

    def merge(oth) # :nodoc:
      tmp = super(oth)
      if self != tmp
        tmp.set_typecode(oth.typecode)
      end

      return tmp
    end

    # Returns the path from an FTP URI.
    #
    # RFC 1738 specifically states that the path for an FTP URI does not
    # include the / which separates the URI path from the URI host. Example:
    #
    # <code>ftp://ftp.example.com/pub/ruby</code>
    #
    # The above URI indicates that the client should connect to
    # ftp.example.com then cd to pub/ruby from the initial login directory.
    #
    # If you want to cd to an absolute directory, you must include an
    # escaped / (%2F) in the path. Example:
    #
    # <code>ftp://ftp.example.com/%2Fpub/ruby</code>
    #
    # This method will then return "/pub/ruby".
    #
    def path
      return @path.sub(/^\//,'').sub(/^%2F/,'/')
    end

    # Private setter for the path of the URI::FTP.
    def set_path(v)
      super("/" + v.sub(/^\//, "%2F"))
    end
    protected :set_path

    # Returns a String representation of the URI::FTP.
    def to_s
      save_path = nil
      if @typecode
        save_path = @path
        @path = @path + TYPECODE_PREFIX + @typecode
      end
      str = super
      if @typecode
        @path = save_path
      end

      return str
    end
  end

  register_scheme 'FTP', FTP
end
PK*J[J�؂*E*E share/ruby/uri/rfc2396_parser.rbnu�[���# frozen_string_literal: false
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

module URI
  #
  # Includes URI::REGEXP::PATTERN
  #
  module RFC2396_REGEXP
    #
    # Patterns used to parse URI's
    #
    module PATTERN
      # :stopdoc:

      # RFC 2396 (URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # alpha         = lowalpha | upalpha
      ALPHA = "a-zA-Z"
      # alphanum      = alpha | digit
      ALNUM = "#{ALPHA}\\d"

      # hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" |
      #                         "a" | "b" | "c" | "d" | "e" | "f"
      HEX     = "a-fA-F\\d"
      # escaped       = "%" hex hex
      ESCAPED = "%[#{HEX}]{2}"
      # mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
      #                 "(" | ")"
      # unreserved    = alphanum | mark
      UNRESERVED = "\\-_.!~*'()#{ALNUM}"
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | ","
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | "," | "[" | "]" (RFC 2732)
      RESERVED = ";/?:@&=+$,\\[\\]"

      # domainlabel   = alphanum | alphanum *( alphanum | "-" ) alphanum
      DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # toplabel      = alpha | alpha *( alphanum | "-" ) alphanum
      TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"

      # :startdoc:
    end # PATTERN

    # :startdoc:
  end # REGEXP

  # Class that parses String's into URI's.
  #
  # It contains a Hash set of patterns and Regexp's that match and validate.
  #
  class RFC2396_Parser
    include RFC2396_REGEXP

    #
    # == Synopsis
    #
    #   URI::Parser.new([opts])
    #
    # == Args
    #
    # The constructor accepts a hash as options for parser.
    # Keys of options are pattern names of URI components
    # and values of options are pattern strings.
    # The constructor generates set of regexps for parsing URIs.
    #
    # You can use the following keys:
    #
    #   * :ESCAPED (URI::PATTERN::ESCAPED in default)
    #   * :UNRESERVED (URI::PATTERN::UNRESERVED in default)
    #   * :DOMLABEL (URI::PATTERN::DOMLABEL in default)
    #   * :TOPLABEL (URI::PATTERN::TOPLABEL in default)
    #   * :HOSTNAME (URI::PATTERN::HOSTNAME in default)
    #
    # == Examples
    #
    #   p = URI::Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
    #   u = p.parse("http://example.jp/%uABCD") #=> #<URI::HTTP http://example.jp/%uABCD>
    #   URI.parse(u.to_s) #=> raises URI::InvalidURIError
    #
    #   s = "http://example.com/ABCD"
    #   u1 = p.parse(s) #=> #<URI::HTTP http://example.com/ABCD>
    #   u2 = URI.parse(s) #=> #<URI::HTTP http://example.com/ABCD>
    #   u1 == u2 #=> true
    #   u1.eql?(u2) #=> false
    #
    def initialize(opts = {})
      @pattern = initialize_pattern(opts)
      @pattern.each_value(&:freeze)
      @pattern.freeze

      @regexp = initialize_regexp(@pattern)
      @regexp.each_value(&:freeze)
      @regexp.freeze
    end

    # The Hash of patterns.
    #
    # See also URI::Parser.initialize_pattern.
    attr_reader :pattern

    # The Hash of Regexp.
    #
    # See also URI::Parser.initialize_regexp.
    attr_reader :regexp

    # Returns a split URI against +regexp[:ABS_URI]+.
    def split(uri)
      case uri
      when ''
        # null uri

      when @regexp[:ABS_URI]
        scheme, opaque, userinfo, host, port,
          registry, path, query, fragment = $~[1..-1]

        # URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # absoluteURI   = scheme ":" ( hier_part | opaque_part )
        # hier_part     = ( net_path | abs_path ) [ "?" query ]
        # opaque_part   = uric_no_slash *uric

        # abs_path      = "/"  path_segments
        # net_path      = "//" authority [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

        if !scheme
          raise InvalidURIError,
            "bad URI (absolute but no scheme): #{uri}"
        end
        if !opaque && (!path && (!host && !registry))
          raise InvalidURIError,
            "bad URI (absolute but no path): #{uri}"
        end

      when @regexp[:REL_URI]
        scheme = nil
        opaque = nil

        userinfo, host, port, registry,
          rel_segment, abs_path, query, fragment = $~[1..-1]
        if rel_segment && abs_path
          path = rel_segment + abs_path
        elsif rel_segment
          path = rel_segment
        elsif abs_path
          path = abs_path
        end

        # URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]

        # net_path      = "//" authority [ abs_path ]
        # abs_path      = "/"  path_segments
        # rel_path      = rel_segment [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

      else
        raise InvalidURIError, "bad URI (is not URI?): #{uri}"
      end

      path = '' if !path && !opaque # (see RFC2396 Section 5.2)
      ret = [
        scheme,
        userinfo, host, port,         # X
        registry,                     # X
        path,                         # Y
        opaque,                       # Y
        query,
        fragment
      ]
      return ret
    end

    #
    # == Args
    #
    # +uri+::
    #    String
    #
    # == Description
    #
    # Parses +uri+ and constructs either matching URI scheme object
    # (File, FTP, HTTP, HTTPS, LDAP, LDAPS, or MailTo) or URI::Generic.
    #
    # == Usage
    #
    #   p = URI::Parser.new
    #   p.parse("ldap://ldap.example.com/dc=example?user=john")
    #   #=> #<URI::LDAP ldap://ldap.example.com/dc=example?user=john>
    #
    def parse(uri)
      URI.for(*self.split(uri), self)
    end

    #
    # == Args
    #
    # +uris+::
    #    an Array of Strings
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    #
    def join(*uris)
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    #
    # :call-seq:
    #   extract( str )
    #   extract( str, schemes )
    #   extract( str, schemes ) {|item| block }
    #
    # == Args
    #
    # +str+::
    #    String to search
    # +schemes+::
    #    Patterns to apply to +str+
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    # If no +block+ given, then returns the result,
    # else it calls +block+ for each element in result.
    #
    # See also URI::Parser.make_regexp.
    #
    def extract(str, schemes = nil)
      if block_given?
        str.scan(make_regexp(schemes)) { yield $& }
        nil
      else
        result = []
        str.scan(make_regexp(schemes)) { result.push $& }
        result
      end
    end

    # Returns Regexp that is default +self.regexp[:ABS_URI_REF]+,
    # unless +schemes+ is provided. Then it is a Regexp.union with +self.pattern[:X_ABS_URI]+.
    def make_regexp(schemes = nil)
      unless schemes
        @regexp[:ABS_URI_REF]
      else
        /(?=#{Regexp.union(*schemes)}:)#{@pattern[:X_ABS_URI]}/x
      end
    end

    #
    # :call-seq:
    #   escape( str )
    #   escape( str, unsafe )
    #
    # == Args
    #
    # +str+::
    #    String to make safe
    # +unsafe+::
    #    Regexp to apply. Defaults to +self.regexp[:UNSAFE]+
    #
    # == Description
    #
    # Constructs a safe String from +str+, removing unsafe characters,
    # replacing them with codes.
    #
    def escape(str, unsafe = @regexp[:UNSAFE])
      unless unsafe.kind_of?(Regexp)
        # perhaps unsafe is String object
        unsafe = Regexp.new("[#{Regexp.quote(unsafe)}]", false)
      end
      str.gsub(unsafe) do
        us = $&
        tmp = ''
        us.each_byte do |uc|
          tmp << sprintf('%%%02X', uc)
        end
        tmp
      end.force_encoding(Encoding::US_ASCII)
    end

    #
    # :call-seq:
    #   unescape( str )
    #   unescape( str, escaped )
    #
    # == Args
    #
    # +str+::
    #    String to remove escapes from
    # +escaped+::
    #    Regexp to apply. Defaults to +self.regexp[:ESCAPED]+
    #
    # == Description
    #
    # Removes escapes from +str+.
    #
    def unescape(str, escaped = @regexp[:ESCAPED])
      enc = str.encoding
      enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
      str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
    end

    TO_S = Kernel.instance_method(:to_s) # :nodoc:
    if TO_S.respond_to?(:bind_call)
      def inspect # :nodoc:
        TO_S.bind_call(self)
      end
    else
      def inspect # :nodoc:
        TO_S.bind(self).call
      end
    end

    private

    # Constructs the default Hash of patterns.
    def initialize_pattern(opts = {})
      ret = {}
      ret[:ESCAPED] = escaped = (opts.delete(:ESCAPED) || PATTERN::ESCAPED)
      ret[:UNRESERVED] = unreserved = opts.delete(:UNRESERVED) || PATTERN::UNRESERVED
      ret[:RESERVED] = reserved = opts.delete(:RESERVED) || PATTERN::RESERVED
      ret[:DOMLABEL] = opts.delete(:DOMLABEL) || PATTERN::DOMLABEL
      ret[:TOPLABEL] = opts.delete(:TOPLABEL) || PATTERN::TOPLABEL
      ret[:HOSTNAME] = hostname = opts.delete(:HOSTNAME)

      # RFC 2396 (URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # uric          = reserved | unreserved | escaped
      ret[:URIC] = uric = "(?:[#{unreserved}#{reserved}]|#{escaped})"
      # uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
      #                 "&" | "=" | "+" | "$" | ","
      ret[:URIC_NO_SLASH] = uric_no_slash = "(?:[#{unreserved};?:@&=+$,]|#{escaped})"
      # query         = *uric
      ret[:QUERY] = query = "#{uric}*"
      # fragment      = *uric
      ret[:FRAGMENT] = fragment = "#{uric}*"

      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      # reg-name      = *( unreserved / pct-encoded / sub-delims ) # RFC3986
      unless hostname
        ret[:HOSTNAME] = hostname = "(?:[a-zA-Z0-9\\-.]|%\\h\\h)+"
      end

      # RFC 2373, APPENDIX B:
      # IPv6address = hexpart [ ":" IPv4address ]
      # IPv4address   = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      # hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
      # hexseq  = hex4 *( ":" hex4)
      # hex4    = 1*4HEXDIG
      #
      # XXX: This definition has a flaw. "::" + IPv4address must be
      # allowed too.  Here is a replacement.
      #
      # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      ret[:IPV4ADDR] = ipv4addr = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
      # hex4     = 1*4HEXDIG
      hex4 = "[#{PATTERN::HEX}]{1,4}"
      # lastpart = hex4 | IPv4address
      lastpart = "(?:#{hex4}|#{ipv4addr})"
      # hexseq1  = *( hex4 ":" ) hex4
      hexseq1 = "(?:#{hex4}:)*#{hex4}"
      # hexseq2  = *( hex4 ":" ) lastpart
      hexseq2 = "(?:#{hex4}:)*#{lastpart}"
      # IPv6address = hexseq2 | [ hexseq1 ] "::" [ hexseq2 ]
      ret[:IPV6ADDR] = ipv6addr = "(?:#{hexseq2}|(?:#{hexseq1})?::(?:#{hexseq2})?)"

      # IPv6prefix  = ( hexseq1 | [ hexseq1 ] "::" [ hexseq1 ] ) "/" 1*2DIGIT
      # unused

      # ipv6reference = "[" IPv6address "]" (RFC 2732)
      ret[:IPV6REF] = ipv6ref = "\\[#{ipv6addr}\\]"

      # host          = hostname | IPv4address
      # host          = hostname | IPv4address | IPv6reference (RFC 2732)
      ret[:HOST] = host = "(?:#{hostname}|#{ipv4addr}|#{ipv6ref})"
      # port          = *digit
      ret[:PORT] = port = '\d*'
      # hostport      = host [ ":" port ]
      ret[:HOSTPORT] = hostport = "#{host}(?::#{port})?"

      # userinfo      = *( unreserved | escaped |
      #                    ";" | ":" | "&" | "=" | "+" | "$" | "," )
      ret[:USERINFO] = userinfo = "(?:[#{unreserved};:&=+$,]|#{escaped})*"

      # pchar         = unreserved | escaped |
      #                 ":" | "@" | "&" | "=" | "+" | "$" | ","
      pchar = "(?:[#{unreserved}:@&=+$,]|#{escaped})"
      # param         = *pchar
      param = "#{pchar}*"
      # segment       = *pchar *( ";" param )
      segment = "#{pchar}*(?:;#{param})*"
      # path_segments = segment *( "/" segment )
      ret[:PATH_SEGMENTS] = path_segments = "#{segment}(?:/#{segment})*"

      # server        = [ [ userinfo "@" ] hostport ]
      server = "(?:#{userinfo}@)?#{hostport}"
      # reg_name      = 1*( unreserved | escaped | "$" | "," |
      #                     ";" | ":" | "@" | "&" | "=" | "+" )
      ret[:REG_NAME] = reg_name = "(?:[#{unreserved}$,;:@&=+]|#{escaped})+"
      # authority     = server | reg_name
      authority = "(?:#{server}|#{reg_name})"

      # rel_segment   = 1*( unreserved | escaped |
      #                     ";" | "@" | "&" | "=" | "+" | "$" | "," )
      ret[:REL_SEGMENT] = rel_segment = "(?:[#{unreserved};@&=+$,]|#{escaped})+"

      # scheme        = alpha *( alpha | digit | "+" | "-" | "." )
      ret[:SCHEME] = scheme = "[#{PATTERN::ALPHA}][\\-+.#{PATTERN::ALPHA}\\d]*"

      # abs_path      = "/"  path_segments
      ret[:ABS_PATH] = abs_path = "/#{path_segments}"
      # rel_path      = rel_segment [ abs_path ]
      ret[:REL_PATH] = rel_path = "#{rel_segment}(?:#{abs_path})?"
      # net_path      = "//" authority [ abs_path ]
      ret[:NET_PATH] = net_path = "//#{authority}(?:#{abs_path})?"

      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      ret[:HIER_PART] = hier_part = "(?:#{net_path}|#{abs_path})(?:\\?(?:#{query}))?"
      # opaque_part   = uric_no_slash *uric
      ret[:OPAQUE_PART] = opaque_part = "#{uric_no_slash}#{uric}*"

      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      ret[:ABS_URI] = abs_uri = "#{scheme}:(?:#{hier_part}|#{opaque_part})"
      # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
      ret[:REL_URI] = rel_uri = "(?:#{net_path}|#{abs_path}|#{rel_path})(?:\\?#{query})?"

      # URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
      ret[:URI_REF] = "(?:#{abs_uri}|#{rel_uri})?(?:##{fragment})?"

      ret[:X_ABS_URI] = "
        (#{scheme}):                           (?# 1: scheme)
        (?:
           (#{opaque_part})                    (?# 2: opaque)
        |
           (?:(?:
             //(?:
                 (?:(?:(#{userinfo})@)?        (?# 3: userinfo)
                   (?:(#{host})(?::(\\d*))?))? (?# 4: host, 5: port)
               |
                 (#{reg_name})                 (?# 6: registry)
               )
             |
             (?!//))                           (?# XXX: '//' is the mark for hostport)
             (#{abs_path})?                    (?# 7: path)
           )(?:\\?(#{query}))?                 (?# 8: query)
        )
        (?:\\#(#{fragment}))?                  (?# 9: fragment)
      "

      ret[:X_REL_URI] = "
        (?:
          (?:
            //
            (?:
              (?:(#{userinfo})@)?       (?# 1: userinfo)
                (#{host})?(?::(\\d*))?  (?# 2: host, 3: port)
            |
              (#{reg_name})             (?# 4: registry)
            )
          )
        |
          (#{rel_segment})              (?# 5: rel_segment)
        )?
        (#{abs_path})?                  (?# 6: abs_path)
        (?:\\?(#{query}))?              (?# 7: query)
        (?:\\#(#{fragment}))?           (?# 8: fragment)
      "

      ret
    end

    # Constructs the default Hash of Regexp's.
    def initialize_regexp(pattern)
      ret = {}

      # for URI::split
      ret[:ABS_URI] = Regexp.new('\A\s*+' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
      ret[:REL_URI] = Regexp.new('\A\s*+' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)

      # for URI::extract
      ret[:URI_REF]     = Regexp.new(pattern[:URI_REF])
      ret[:ABS_URI_REF] = Regexp.new(pattern[:X_ABS_URI], Regexp::EXTENDED)
      ret[:REL_URI_REF] = Regexp.new(pattern[:X_REL_URI], Regexp::EXTENDED)

      # for URI::escape/unescape
      ret[:ESCAPED] = Regexp.new(pattern[:ESCAPED])
      ret[:UNSAFE]  = Regexp.new("[^#{pattern[:UNRESERVED]}#{pattern[:RESERVED]}]")

      # for Generic#initialize
      ret[:SCHEME]   = Regexp.new("\\A#{pattern[:SCHEME]}\\z")
      ret[:USERINFO] = Regexp.new("\\A#{pattern[:USERINFO]}\\z")
      ret[:HOST]     = Regexp.new("\\A#{pattern[:HOST]}\\z")
      ret[:PORT]     = Regexp.new("\\A#{pattern[:PORT]}\\z")
      ret[:OPAQUE]   = Regexp.new("\\A#{pattern[:OPAQUE_PART]}\\z")
      ret[:REGISTRY] = Regexp.new("\\A#{pattern[:REG_NAME]}\\z")
      ret[:ABS_PATH] = Regexp.new("\\A#{pattern[:ABS_PATH]}\\z")
      ret[:REL_PATH] = Regexp.new("\\A#{pattern[:REL_PATH]}\\z")
      ret[:QUERY]    = Regexp.new("\\A#{pattern[:QUERY]}\\z")
      ret[:FRAGMENT] = Regexp.new("\\A#{pattern[:FRAGMENT]}\\z")

      ret
    end

    def convert_to_uri(uri)
      if uri.is_a?(URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected URI object or URI string)"
      end
    end

  end # class Parser

  # Backward compatibility for URI::REGEXP::PATTERN::*
  RFC2396_Parser.new.pattern.each_pair do |sym, str|
    unless RFC2396_REGEXP::PATTERN.const_defined?(sym, false)
      RFC2396_REGEXP::PATTERN.const_set(sym, str)
    end
  end
end # module URI
PK*J[���QQshare/ruby/uri/mailto.rbnu�[���# frozen_string_literal: false
# = uri/mailto.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'generic'

module URI

  #
  # RFC6068, the mailto URL scheme.
  #
  class MailTo < Generic
    include RFC2396_REGEXP

    # A Default port of nil for URI::MailTo.
    DEFAULT_PORT = nil

    # An Array of the available components for URI::MailTo.
    COMPONENT = [ :scheme, :to, :headers ].freeze

    # :stopdoc:
    #  "hname" and "hvalue" are encodings of an RFC 822 header name and
    #  value, respectively. As with "to", all URL reserved characters must
    #  be encoded.
    #
    #  "#mailbox" is as specified in RFC 822 [RFC822]. This means that it
    #  consists of zero or more comma-separated mail addresses, possibly
    #  including "phrase" and "comment" components. Note that all URL
    #  reserved characters in "to" must be encoded: in particular,
    #  parentheses, commas, and the percent sign ("%"), which commonly occur
    #  in the "mailbox" syntax.
    #
    #  Within mailto URLs, the characters "?", "=", "&" are reserved.

    # ; RFC 6068
    # hfields      = "?" hfield *( "&" hfield )
    # hfield       = hfname "=" hfvalue
    # hfname       = *qchar
    # hfvalue      = *qchar
    # qchar        = unreserved / pct-encoded / some-delims
    # some-delims  = "!" / "$" / "'" / "(" / ")" / "*"
    #              / "+" / "," / ";" / ":" / "@"
    #
    # ; RFC3986
    # unreserved   = ALPHA / DIGIT / "-" / "." / "_" / "~"
    # pct-encoded  = "%" HEXDIG HEXDIG
    HEADER_REGEXP  = /\A(?<hfield>(?:%\h\h|[!$'-.0-;@-Z_a-z~])*=(?:%\h\h|[!$'-.0-;@-Z_a-z~])*)(?:&\g<hfield>)*\z/
    # practical regexp for email address
    # https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
    EMAIL_REGEXP = /\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/
    # :startdoc:

    #
    # == Description
    #
    # Creates a new URI::MailTo object from components, with syntax checking.
    #
    # Components can be provided as an Array or Hash. If an Array is used,
    # the components must be supplied as <code>[to, headers]</code>.
    #
    # If a Hash is used, the keys are the component names preceded by colons.
    #
    # The headers can be supplied as a pre-encoded string, such as
    # <code>"subject=subscribe&cc=address"</code>, or as an Array of Arrays
    # like <code>[['subject', 'subscribe'], ['cc', 'address']]</code>.
    #
    # Examples:
    #
    #    require 'uri'
    #
    #    m1 = URI::MailTo.build(['joe@example.com', 'subject=Ruby'])
    #    m1.to_s  # => "mailto:joe@example.com?subject=Ruby"
    #
    #    m2 = URI::MailTo.build(['john@example.com', [['Subject', 'Ruby'], ['Cc', 'jack@example.com']]])
    #    m2.to_s  # => "mailto:john@example.com?Subject=Ruby&Cc=jack@example.com"
    #
    #    m3 = URI::MailTo.build({:to => 'listman@example.com', :headers => [['subject', 'subscribe']]})
    #    m3.to_s  # => "mailto:listman@example.com?subject=subscribe"
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)

      case tmp[:to]
      when Array
        tmp[:opaque] = tmp[:to].join(',')
      when String
        tmp[:opaque] = tmp[:to].dup
      else
        tmp[:opaque] = ''
      end

      if tmp[:headers]
        query =
          case tmp[:headers]
          when Array
            tmp[:headers].collect { |x|
              if x.kind_of?(Array)
                x[0] + '=' + x[1..-1].join
              else
                x.to_s
              end
            }.join('&')
          when Hash
            tmp[:headers].collect { |h,v|
              h + '=' + v
            }.join('&')
          else
            tmp[:headers].to_s
          end
        unless query.empty?
          tmp[:opaque] << '?' << query
        end
      end

      super(tmp)
    end

    #
    # == Description
    #
    # Creates a new URI::MailTo object from generic URL components with
    # no syntax checking.
    #
    # This method is usually called from URI::parse, which checks
    # the validity of each component.
    #
    def initialize(*arg)
      super(*arg)

      @to = nil
      @headers = []

      # The RFC3986 parser does not normally populate opaque
      @opaque = "?#{@query}" if @query && !@opaque

      unless @opaque
        raise InvalidComponentError,
          "missing opaque part for mailto URL"
      end
      to, header = @opaque.split('?', 2)
      # allow semicolon as a addr-spec separator
      # http://support.microsoft.com/kb/820868
      unless /\A(?:[^@,;]+@[^@,;]+(?:\z|[,;]))*\z/ =~ to
        raise InvalidComponentError,
          "unrecognised opaque part for mailtoURL: #{@opaque}"
      end

      if arg[10] # arg_check
        self.to = to
        self.headers = header
      else
        set_to(to)
        set_headers(header)
      end
    end

    # The primary e-mail address of the URL, as a String.
    attr_reader :to

    # E-mail headers set by the URL, as an Array of Arrays.
    attr_reader :headers

    # Checks the to +v+ component.
    def check_to(v)
      return true unless v
      return true if v.size == 0

      v.split(/[,;]/).each do |addr|
        # check url safety as path-rootless
        if /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*\z/ !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as URI #{addr.dump}"
        end

        # check addr-spec
        # don't s/\+/ /g
        addr.gsub!(/%\h\h/, URI::TBLDECWWWCOMP_)
        if EMAIL_REGEXP !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as uri-escaped addr-spec #{addr.dump}"
        end
      end

      true
    end
    private :check_to

    # Private setter for to +v+.
    def set_to(v)
      @to = v
    end
    protected :set_to

    # Setter for to +v+.
    def to=(v)
      check_to(v)
      set_to(v)
      v
    end

    # Checks the headers +v+ component against either
    # * HEADER_REGEXP
    def check_headers(v)
      return true unless v
      return true if v.size == 0
      if HEADER_REGEXP !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      true
    end
    private :check_headers

    # Private setter for headers +v+.
    def set_headers(v)
      @headers = []
      if v
        v.split('&').each do |x|
          @headers << x.split(/=/, 2)
        end
      end
    end
    protected :set_headers

    # Setter for headers +v+.
    def headers=(v)
      check_headers(v)
      set_headers(v)
      v
    end

    # Constructs String from URI.
    def to_s
      @scheme + ':' +
        if @to
          @to
        else
          ''
        end +
        if @headers.size > 0
          '?' + @headers.collect{|x| x.join('=')}.join('&')
        else
          ''
        end +
        if @fragment
          '#' + @fragment
        else
          ''
        end
    end

    # Returns the RFC822 e-mail text equivalent of the URL, as a String.
    #
    # Example:
    #
    #   require 'uri'
    #
    #   uri = URI.parse("mailto:ruby-list@ruby-lang.org?Subject=subscribe&cc=myaddr")
    #   uri.to_mailtext
    #   # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"
    #
    def to_mailtext
      to = URI.decode_www_form_component(@to)
      head = ''
      body = ''
      @headers.each do |x|
        case x[0]
        when 'body'
          body = URI.decode_www_form_component(x[1])
        when 'to'
          to << ', ' + URI.decode_www_form_component(x[1])
        else
          head << URI.decode_www_form_component(x[0]).capitalize + ': ' +
            URI.decode_www_form_component(x[1])  + "\n"
        end
      end

      "To: #{to}
#{head}
#{body}
"
    end
    alias to_rfc822text to_mailtext
  end

  register_scheme 'MAILTO', MailTo
end
PK*J[�R�share/ruby/uri/wss.rbnu�[���# frozen_string_literal: false
# = uri/wss.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'ws'

module URI

  # The default port for WSS URIs is 443, and the scheme is 'wss:' rather
  # than 'ws:'. Other than that, WSS URIs are identical to WS URIs;
  # see URI::WS.
  class WSS < WS
    # A Default port of 443 for URI::WSS
    DEFAULT_PORT = 443
  end

  register_scheme 'WSS', WSS
end
PK*J[��q��share/ruby/uri/file.rbnu�[���# frozen_string_literal: true

require_relative 'generic'

module URI

  #
  # The "file" URI is defined by RFC8089.
  #
  class File < Generic
    # A Default port of nil for URI::File.
    DEFAULT_PORT = nil

    #
    # An Array of the available components for URI::File.
    #
    COMPONENT = [
      :scheme,
      :host,
      :path
    ].freeze

    #
    # == Description
    #
    # Creates a new URI::File object from components, with syntax checking.
    #
    # The components accepted are +host+ and +path+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, path]</code>.
    #
    # A path from e.g. the File class should be escaped before
    # being passed.
    #
    # Examples:
    #
    #     require 'uri'
    #
    #     uri1 = URI::File.build(['host.example.com', '/path/file.zip'])
    #     uri1.to_s  # => "file://host.example.com/path/file.zip"
    #
    #     uri2 = URI::File.build({:host => 'host.example.com',
    #       :path => '/ruby/src'})
    #     uri2.to_s  # => "file://host.example.com/ruby/src"
    #
    #     uri3 = URI::File.build({:path => URI::escape('/path/my file.txt')})
    #     uri3.to_s  # => "file:///path/my%20file.txt"
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)
      super(tmp)
    end

    # Protected setter for the host component +v+.
    #
    # See also URI::Generic.host=.
    #
    def set_host(v)
      v = "" if v.nil? || v == "localhost"
      @host = v
    end

    # do nothing
    def set_port(v)
    end

    # raise InvalidURIError
    def check_userinfo(user)
      raise URI::InvalidURIError, "cannot set userinfo for file URI"
    end

    # raise InvalidURIError
    def check_user(user)
      raise URI::InvalidURIError, "cannot set user for file URI"
    end

    # raise InvalidURIError
    def check_password(user)
      raise URI::InvalidURIError, "cannot set password for file URI"
    end

    # do nothing
    def set_userinfo(v)
    end

    # do nothing
    def set_user(v)
    end

    # do nothing
    def set_password(v)
    end
  end

  register_scheme 'FILE', File
end
PK*J[�K���share/ruby/uri/ws.rbnu�[���# frozen_string_literal: false
# = uri/ws.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'generic'

module URI

  #
  # The syntax of WS URIs is defined in RFC6455 section 3.
  #
  # Note that the Ruby URI library allows WS URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class WS < Generic
    # A Default port of 80 for URI::WS.
    DEFAULT_PORT = 80

    # An Array of the available components for URI::WS.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
    ].freeze

    #
    # == Description
    #
    # Creates a new URI::WS object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, and query.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query]</code>.
    #
    # Example:
    #
    #     uri = URI::WS.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = URI::WS.build([nil, "www.example.com", nil, "/path", "query"])
    #
    # Currently, if passed userinfo components this method generates
    # invalid WS URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for a WS URI, as required by Net::HTTP::Get.
    #
    # If the URI contains a query, the full path is URI#path + '?' + URI#query.
    # Otherwise, the path is simply URI#path.
    #
    # Example:
    #
    #     uri = URI::WS.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end
  end

  register_scheme 'WS', WS
end
PK*J[rR��AiAishare/ruby/uri/common.rbnu�[���# frozen_string_literal: true
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative "rfc2396_parser"
require_relative "rfc3986_parser"

module URI
  # The default parser instance for RFC 2396.
  RFC2396_PARSER = RFC2396_Parser.new
  Ractor.make_shareable(RFC2396_PARSER) if defined?(Ractor)

  # The default parser instance for RFC 3986.
  RFC3986_PARSER = RFC3986_Parser.new
  Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor)

  # The default parser instance.
  DEFAULT_PARSER = RFC3986_PARSER
  Ractor.make_shareable(DEFAULT_PARSER) if defined?(Ractor)

  # Set the default parser instance.
  def self.parser=(parser = RFC3986_PARSER)
    remove_const(:Parser) if defined?(::URI::Parser)
    const_set("Parser", parser.class)

    remove_const(:REGEXP) if defined?(::URI::REGEXP)
    remove_const(:PATTERN) if defined?(::URI::PATTERN)
    if Parser == RFC2396_Parser
      const_set("REGEXP", URI::RFC2396_REGEXP)
      const_set("PATTERN", URI::RFC2396_REGEXP::PATTERN)
    end

    Parser.new.regexp.each_pair do |sym, str|
      remove_const(sym) if const_defined?(sym, false)
      const_set(sym, str)
    end
  end
  self.parser = RFC3986_PARSER

  def self.const_missing(const) # :nodoc:
    if const == :REGEXP
      warn "URI::REGEXP is obsolete. Use URI::RFC2396_REGEXP explicitly.", uplevel: 1 if $VERBOSE
      URI::RFC2396_REGEXP
    elsif value = RFC2396_PARSER.regexp[const]
      warn "URI::#{const} is obsolete. Use RFC2396_PARSER.regexp[#{const.inspect}] explicitly.", uplevel: 1 if $VERBOSE
      value
    elsif value = RFC2396_Parser.const_get(const)
      warn "URI::#{const} is obsolete. Use RFC2396_Parser::#{const} explicitly.", uplevel: 1 if $VERBOSE
      value
    else
      super
    end
  end

  module Util # :nodoc:
    def make_components_hash(klass, array_hash)
      tmp = {}
      if array_hash.kind_of?(Array) &&
          array_hash.size == klass.component.size - 1
        klass.component[1..-1].each_index do |i|
          begin
            tmp[klass.component[i + 1]] = array_hash[i].clone
          rescue TypeError
            tmp[klass.component[i + 1]] = array_hash[i]
          end
        end

      elsif array_hash.kind_of?(Hash)
        array_hash.each do |key, value|
          begin
            tmp[key] = value.clone
          rescue TypeError
            tmp[key] = value
          end
        end
      else
        raise ArgumentError,
          "expected Array of or Hash of components of #{klass} (#{klass.component[1..-1].join(', ')})"
      end
      tmp[:scheme] = klass.to_s.sub(/\A.*::/, '').downcase

      return tmp
    end
    module_function :make_components_hash
  end

  module Schemes # :nodoc:
  end
  private_constant :Schemes

  # Registers the given +klass+ as the class to be instantiated
  # when parsing a \URI with the given +scheme+:
  #
  #   URI.register_scheme('MS_SEARCH', URI::Generic) # => URI::Generic
  #   URI.scheme_list['MS_SEARCH']                   # => URI::Generic
  #
  # Note that after calling String#upcase on +scheme+, it must be a valid
  # constant name.
  def self.register_scheme(scheme, klass)
    Schemes.const_set(scheme.to_s.upcase, klass)
  end

  # Returns a hash of the defined schemes:
  #
  #   URI.scheme_list
  #   # =>
  #   {"MAILTO"=>URI::MailTo,
  #    "LDAPS"=>URI::LDAPS,
  #    "WS"=>URI::WS,
  #    "HTTP"=>URI::HTTP,
  #    "HTTPS"=>URI::HTTPS,
  #    "LDAP"=>URI::LDAP,
  #    "FILE"=>URI::File,
  #    "FTP"=>URI::FTP}
  #
  # Related: URI.register_scheme.
  def self.scheme_list
    Schemes.constants.map { |name|
      [name.to_s.upcase, Schemes.const_get(name)]
    }.to_h
  end

  INITIAL_SCHEMES = scheme_list
  private_constant :INITIAL_SCHEMES
  Ractor.make_shareable(INITIAL_SCHEMES) if defined?(Ractor)

  # Returns a new object constructed from the given +scheme+, +arguments+,
  # and +default+:
  #
  # - The new object is an instance of <tt>URI.scheme_list[scheme.upcase]</tt>.
  # - The object is initialized by calling the class initializer
  #   using +scheme+ and +arguments+.
  #   See URI::Generic.new.
  #
  # Examples:
  #
  #   values = ['john.doe', 'www.example.com', '123', nil, '/forum/questions/', nil, 'tag=networking&order=newest', 'top']
  #   URI.for('https', *values)
  #   # => #<URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #   URI.for('foo', *values, default: URI::HTTP)
  #   # => #<URI::HTTP foo://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #
  def self.for(scheme, *arguments, default: Generic)
    const_name = scheme.to_s.upcase

    uri_class = INITIAL_SCHEMES[const_name]
    uri_class ||= if /\A[A-Z]\w*\z/.match?(const_name) && Schemes.const_defined?(const_name, false)
      Schemes.const_get(const_name, false)
    end
    uri_class ||= default

    return uri_class.new(scheme, *arguments)
  end

  #
  # Base class for all URI exceptions.
  #
  class Error < StandardError; end
  #
  # Not a URI.
  #
  class InvalidURIError < Error; end
  #
  # Not a URI component.
  #
  class InvalidComponentError < Error; end
  #
  # URI is valid, bad usage is not.
  #
  class BadURIError < Error; end

  # Returns a 9-element array representing the parts of the \URI
  # formed from the string +uri+;
  # each array element is a string or +nil+:
  #
  #   names = %w[scheme userinfo host port registry path opaque query fragment]
  #   values = URI.split('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   names.zip(values)
  #   # =>
  #   [["scheme", "https"],
  #    ["userinfo", "john.doe"],
  #    ["host", "www.example.com"],
  #    ["port", "123"],
  #    ["registry", nil],
  #    ["path", "/forum/questions/"],
  #    ["opaque", nil],
  #    ["query", "tag=networking&order=newest"],
  #    ["fragment", "top"]]
  #
  def self.split(uri)
    DEFAULT_PARSER.split(uri)
  end

  # Returns a new \URI object constructed from the given string +uri+:
  #
  #   URI.parse('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   # => #<URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #   URI.parse('http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
  #   # => #<URI::HTTP http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
  #
  # It's recommended to first ::escape string +uri+
  # if it may contain invalid URI characters.
  #
  def self.parse(uri)
    DEFAULT_PARSER.parse(uri)
  end

  # Merges the given URI strings +str+
  # per {RFC 2396}[https://www.rfc-editor.org/rfc/rfc2396.html].
  #
  # Each string in +str+ is converted to an
  # {RFC3986 URI}[https://www.rfc-editor.org/rfc/rfc3986.html] before being merged.
  #
  # Examples:
  #
  #   URI.join("http://example.com/","main.rbx")
  #   # => #<URI::HTTP http://example.com/main.rbx>
  #
  #   URI.join('http://example.com', 'foo')
  #   # => #<URI::HTTP http://example.com/foo>
  #
  #   URI.join('http://example.com', '/foo', '/bar')
  #   # => #<URI::HTTP http://example.com/bar>
  #
  #   URI.join('http://example.com', '/foo', 'bar')
  #   # => #<URI::HTTP http://example.com/bar>
  #
  #   URI.join('http://example.com', '/foo/', 'bar')
  #   # => #<URI::HTTP http://example.com/foo/bar>
  #
  def self.join(*str)
    DEFAULT_PARSER.join(*str)
  end

  #
  # == Synopsis
  #
  #   URI::extract(str[, schemes][,&blk])
  #
  # == Args
  #
  # +str+::
  #   String to extract URIs from.
  # +schemes+::
  #   Limit URI matching to specific schemes.
  #
  # == Description
  #
  # Extracts URIs from a string. If block given, iterates through all matched URIs.
  # Returns nil if block given or array with matches.
  #
  # == Usage
  #
  #   require "uri"
  #
  #   URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
  #   # => ["http://foo.example.com/bla", "mailto:test@example.com"]
  #
  def self.extract(str, schemes = nil, &block) # :nodoc:
    warn "URI.extract is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.extract(str, schemes, &block)
  end

  #
  # == Synopsis
  #
  #   URI::regexp([match_schemes])
  #
  # == Args
  #
  # +match_schemes+::
  #   Array of schemes. If given, resulting regexp matches to URIs
  #   whose scheme is one of the match_schemes.
  #
  # == Description
  #
  # Returns a Regexp object which matches to URI-like strings.
  # The Regexp object returned by this method includes arbitrary
  # number of capture group (parentheses).  Never rely on its number.
  #
  # == Usage
  #
  #   require 'uri'
  #
  #   # extract first URI from html_string
  #   html_string.slice(URI.regexp)
  #
  #   # remove ftp URIs
  #   html_string.sub(URI.regexp(['ftp']), '')
  #
  #   # You should not rely on the number of parentheses
  #   html_string.scan(URI.regexp) do |*matches|
  #     p $&
  #   end
  #
  def self.regexp(schemes = nil)# :nodoc:
    warn "URI.regexp is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.make_regexp(schemes)
  end

  TBLENCWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
  end
  TBLENCURICOMP_ = TBLENCWWWCOMP_.dup.freeze # :nodoc:
  TBLENCWWWCOMP_[' '] = '+'
  TBLENCWWWCOMP_.freeze
  TBLDECWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    h, l = i>>4, i&15
    TBLDECWWWCOMP_[-('%%%X%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%X%x' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%x' % [h, l])] = -i.chr
  end
  TBLDECWWWCOMP_['+'] = ' '
  TBLDECWWWCOMP_.freeze

  # Returns a URL-encoded string derived from the given string +str+.
  #
  # The returned string:
  #
  # - Preserves:
  #
  #   - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
  #   - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
  #     and <tt>'0'..'9'</tt>.
  #
  #   Example:
  #
  #     URI.encode_www_form_component('*.-_azAZ09')
  #     # => "*.-_azAZ09"
  #
  # - Converts:
  #
  #   - Character <tt>' '</tt> to character <tt>'+'</tt>.
  #   - Any other character to "percent notation";
  #     the percent notation for character <i>c</i> is <tt>'%%%X' % c.ord</tt>.
  #
  #   Example:
  #
  #     URI.encode_www_form_component('Here are some punctuation characters: ,;?:')
  #     # => "Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A"
  #
  # Encoding:
  #
  # - If +str+ has encoding Encoding::ASCII_8BIT, argument +enc+ is ignored.
  # - Otherwise +str+ is converted first to Encoding::UTF_8
  #   (with suitable character replacements),
  #   and then to encoding +enc+.
  #
  # In either case, the returned string has forced encoding Encoding::US_ASCII.
  #
  # Related: URI.encode_uri_component (encodes <tt>' '</tt> as <tt>'%20'</tt>).
  def self.encode_www_form_component(str, enc=nil)
    _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCWWWCOMP_, str, enc)
  end

  # Returns a string decoded from the given \URL-encoded string +str+.
  #
  # The given string is first encoded as Encoding::ASCII-8BIT (using String#b),
  # then decoded (as below), and finally force-encoded to the given encoding +enc+.
  #
  # The returned string:
  #
  # - Preserves:
  #
  #   - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
  #   - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
  #     and <tt>'0'..'9'</tt>.
  #
  #   Example:
  #
  #     URI.decode_www_form_component('*.-_azAZ09')
  #     # => "*.-_azAZ09"
  #
  # - Converts:
  #
  #   - Character <tt>'+'</tt> to character <tt>' '</tt>.
  #   - Each "percent notation" to an ASCII character.
  #
  #   Example:
  #
  #     URI.decode_www_form_component('Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A')
  #     # => "Here are some punctuation characters: ,;?:"
  #
  # Related: URI.decode_uri_component (preserves <tt>'+'</tt>).
  def self.decode_www_form_component(str, enc=Encoding::UTF_8)
    _decode_uri_component(/\+|%\h\h/, str, enc)
  end

  # Like URI.encode_www_form_component, except that <tt>' '</tt> (space)
  # is encoded as <tt>'%20'</tt> (instead of <tt>'+'</tt>).
  def self.encode_uri_component(str, enc=nil)
    _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCURICOMP_, str, enc)
  end

  # Like URI.decode_www_form_component, except that <tt>'+'</tt> is preserved.
  def self.decode_uri_component(str, enc=Encoding::UTF_8)
    _decode_uri_component(/%\h\h/, str, enc)
  end

  def self._encode_uri_component(regexp, table, str, enc)
    str = str.to_s.dup
    if str.encoding != Encoding::ASCII_8BIT
      if enc && enc != Encoding::ASCII_8BIT
        str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace)
        str.encode!(enc, fallback: ->(x){"&##{x.ord};"})
      end
      str.force_encoding(Encoding::ASCII_8BIT)
    end
    str.gsub!(regexp, table)
    str.force_encoding(Encoding::US_ASCII)
  end
  private_class_method :_encode_uri_component

  def self._decode_uri_component(regexp, str, enc)
    raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/.match?(str)
    str.b.gsub(regexp, TBLDECWWWCOMP_).force_encoding(enc)
  end
  private_class_method :_decode_uri_component

  # Returns a URL-encoded string derived from the given
  # {Enumerable}[rdoc-ref:Enumerable@Enumerable+in+Ruby+Classes]
  # +enum+.
  #
  # The result is suitable for use as form data
  # for an \HTTP request whose <tt>Content-Type</tt> is
  # <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The returned string consists of the elements of +enum+,
  # each converted to one or more URL-encoded strings,
  # and all joined with character <tt>'&'</tt>.
  #
  # Simple examples:
  #
  #   URI.encode_www_form([['foo', 0], ['bar', 1], ['baz', 2]])
  #   # => "foo=0&bar=1&baz=2"
  #   URI.encode_www_form({foo: 0, bar: 1, baz: 2})
  #   # => "foo=0&bar=1&baz=2"
  #
  # The returned string is formed using method URI.encode_www_form_component,
  # which converts certain characters:
  #
  #   URI.encode_www_form('f#o': '/', 'b-r': '$', 'b z': '@')
  #   # => "f%23o=%2F&b-r=%24&b+z=%40"
  #
  # When +enum+ is Array-like, each element +ele+ is converted to a field:
  #
  # - If +ele+ is an array of two or more elements,
  #   the field is formed from its first two elements
  #   (and any additional elements are ignored):
  #
  #     name = URI.encode_www_form_component(ele[0], enc)
  #     value = URI.encode_www_form_component(ele[1], enc)
  #     "#{name}=#{value}"
  #
  #   Examples:
  #
  #     URI.encode_www_form([%w[foo bar], %w[baz bat bah]])
  #     # => "foo=bar&baz=bat"
  #     URI.encode_www_form([['foo', 0], ['bar', :baz, 'bat']])
  #     # => "foo=0&bar=baz"
  #
  # - If +ele+ is an array of one element,
  #   the field is formed from <tt>ele[0]</tt>:
  #
  #     URI.encode_www_form_component(ele[0])
  #
  #   Example:
  #
  #     URI.encode_www_form([['foo'], [:bar], [0]])
  #     # => "foo&bar&0"
  #
  # - Otherwise the field is formed from +ele+:
  #
  #     URI.encode_www_form_component(ele)
  #
  #   Example:
  #
  #     URI.encode_www_form(['foo', :bar, 0])
  #     # => "foo&bar&0"
  #
  # The elements of an Array-like +enum+ may be mixture:
  #
  #   URI.encode_www_form([['foo', 0], ['bar', 1, 2], ['baz'], :bat])
  #   # => "foo=0&bar=1&baz&bat"
  #
  # When +enum+ is Hash-like,
  # each +key+/+value+ pair is converted to one or more fields:
  #
  # - If +value+ is
  #   {Array-convertible}[rdoc-ref:implicit_conversion.rdoc@Array-Convertible+Objects],
  #   each element +ele+ in +value+ is paired with +key+ to form a field:
  #
  #     name = URI.encode_www_form_component(key, enc)
  #     value = URI.encode_www_form_component(ele, enc)
  #     "#{name}=#{value}"
  #
  #   Example:
  #
  #     URI.encode_www_form({foo: [:bar, 1], baz: [:bat, :bam, 2]})
  #     # => "foo=bar&foo=1&baz=bat&baz=bam&baz=2"
  #
  # - Otherwise, +key+ and +value+ are paired to form a field:
  #
  #     name = URI.encode_www_form_component(key, enc)
  #     value = URI.encode_www_form_component(value, enc)
  #     "#{name}=#{value}"
  #
  #   Example:
  #
  #     URI.encode_www_form({foo: 0, bar: 1, baz: 2})
  #     # => "foo=0&bar=1&baz=2"
  #
  # The elements of a Hash-like +enum+ may be mixture:
  #
  #   URI.encode_www_form({foo: [0, 1], bar: 2})
  #   # => "foo=0&foo=1&bar=2"
  #
  def self.encode_www_form(enum, enc=nil)
    enum.map do |k,v|
      if v.nil?
        encode_www_form_component(k, enc)
      elsif v.respond_to?(:to_ary)
        v.to_ary.map do |w|
          str = encode_www_form_component(k, enc)
          unless w.nil?
            str << '='
            str << encode_www_form_component(w, enc)
          end
        end.join('&')
      else
        str = encode_www_form_component(k, enc)
        str << '='
        str << encode_www_form_component(v, enc)
      end
    end.join('&')
  end

  # Returns name/value pairs derived from the given string +str+,
  # which must be an ASCII string.
  #
  # The method may be used to decode the body of Net::HTTPResponse object +res+
  # for which <tt>res['Content-Type']</tt> is <tt>'application/x-www-form-urlencoded'</tt>.
  #
  # The returned data is an array of 2-element subarrays;
  # each subarray is a name/value pair (both are strings).
  # Each returned string has encoding +enc+,
  # and has had invalid characters removed via
  # {String#scrub}[rdoc-ref:String#scrub].
  #
  # A simple example:
  #
  #   URI.decode_www_form('foo=0&bar=1&baz')
  #   # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
  #
  # The returned strings have certain conversions,
  # similar to those performed in URI.decode_www_form_component:
  #
  #   URI.decode_www_form('f%23o=%2F&b-r=%24&b+z=%40')
  #   # => [["f#o", "/"], ["b-r", "$"], ["b z", "@"]]
  #
  # The given string may contain consecutive separators:
  #
  #   URI.decode_www_form('foo=0&&bar=1&&baz=2')
  #   # => [["foo", "0"], ["", ""], ["bar", "1"], ["", ""], ["baz", "2"]]
  #
  # A different separator may be specified:
  #
  #   URI.decode_www_form('foo=0--bar=1--baz', separator: '--')
  #   # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
  #
  def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_: false, isindex: false)
    raise ArgumentError, "the input of #{self.name}.#{__method__} must be ASCII only string" unless str.ascii_only?
    ary = []
    return ary if str.empty?
    enc = Encoding.find(enc)
    str.b.each_line(separator) do |string|
      string.chomp!(separator)
      key, sep, val = string.partition('=')
      if isindex
        if sep.empty?
          val = key
          key = +''
        end
        isindex = false
      end

      if use__charset_ and key == '_charset_' and e = get_encoding(val)
        enc = e
        use__charset_ = false
      end

      key.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      if val
        val.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      else
        val = +''
      end

      ary << [key, val]
    end
    ary.each do |k, v|
      k.force_encoding(enc)
      k.scrub!
      v.force_encoding(enc)
      v.scrub!
    end
    ary
  end

  private
=begin command for WEB_ENCODINGS_
  curl https://encoding.spec.whatwg.org/encodings.json|
  ruby -rjson -e 'H={}
  h={
    "shift_jis"=>"Windows-31J",
    "euc-jp"=>"cp51932",
    "iso-2022-jp"=>"cp50221",
    "x-mac-cyrillic"=>"macCyrillic",
  }
  JSON($<.read).map{|x|x["encodings"]}.flatten.each{|x|
    Encoding.find(n=h.fetch(n=x["name"].downcase,n))rescue next
    x["labels"].each{|y|H[y]=n}
  }
  puts "{"
  H.each{|k,v|puts %[  #{k.dump}=>#{v.dump},]}
  puts "}"
'
=end
  WEB_ENCODINGS_ = {
    "unicode-1-1-utf-8"=>"utf-8",
    "utf-8"=>"utf-8",
    "utf8"=>"utf-8",
    "866"=>"ibm866",
    "cp866"=>"ibm866",
    "csibm866"=>"ibm866",
    "ibm866"=>"ibm866",
    "csisolatin2"=>"iso-8859-2",
    "iso-8859-2"=>"iso-8859-2",
    "iso-ir-101"=>"iso-8859-2",
    "iso8859-2"=>"iso-8859-2",
    "iso88592"=>"iso-8859-2",
    "iso_8859-2"=>"iso-8859-2",
    "iso_8859-2:1987"=>"iso-8859-2",
    "l2"=>"iso-8859-2",
    "latin2"=>"iso-8859-2",
    "csisolatin3"=>"iso-8859-3",
    "iso-8859-3"=>"iso-8859-3",
    "iso-ir-109"=>"iso-8859-3",
    "iso8859-3"=>"iso-8859-3",
    "iso88593"=>"iso-8859-3",
    "iso_8859-3"=>"iso-8859-3",
    "iso_8859-3:1988"=>"iso-8859-3",
    "l3"=>"iso-8859-3",
    "latin3"=>"iso-8859-3",
    "csisolatin4"=>"iso-8859-4",
    "iso-8859-4"=>"iso-8859-4",
    "iso-ir-110"=>"iso-8859-4",
    "iso8859-4"=>"iso-8859-4",
    "iso88594"=>"iso-8859-4",
    "iso_8859-4"=>"iso-8859-4",
    "iso_8859-4:1988"=>"iso-8859-4",
    "l4"=>"iso-8859-4",
    "latin4"=>"iso-8859-4",
    "csisolatincyrillic"=>"iso-8859-5",
    "cyrillic"=>"iso-8859-5",
    "iso-8859-5"=>"iso-8859-5",
    "iso-ir-144"=>"iso-8859-5",
    "iso8859-5"=>"iso-8859-5",
    "iso88595"=>"iso-8859-5",
    "iso_8859-5"=>"iso-8859-5",
    "iso_8859-5:1988"=>"iso-8859-5",
    "arabic"=>"iso-8859-6",
    "asmo-708"=>"iso-8859-6",
    "csiso88596e"=>"iso-8859-6",
    "csiso88596i"=>"iso-8859-6",
    "csisolatinarabic"=>"iso-8859-6",
    "ecma-114"=>"iso-8859-6",
    "iso-8859-6"=>"iso-8859-6",
    "iso-8859-6-e"=>"iso-8859-6",
    "iso-8859-6-i"=>"iso-8859-6",
    "iso-ir-127"=>"iso-8859-6",
    "iso8859-6"=>"iso-8859-6",
    "iso88596"=>"iso-8859-6",
    "iso_8859-6"=>"iso-8859-6",
    "iso_8859-6:1987"=>"iso-8859-6",
    "csisolatingreek"=>"iso-8859-7",
    "ecma-118"=>"iso-8859-7",
    "elot_928"=>"iso-8859-7",
    "greek"=>"iso-8859-7",
    "greek8"=>"iso-8859-7",
    "iso-8859-7"=>"iso-8859-7",
    "iso-ir-126"=>"iso-8859-7",
    "iso8859-7"=>"iso-8859-7",
    "iso88597"=>"iso-8859-7",
    "iso_8859-7"=>"iso-8859-7",
    "iso_8859-7:1987"=>"iso-8859-7",
    "sun_eu_greek"=>"iso-8859-7",
    "csiso88598e"=>"iso-8859-8",
    "csisolatinhebrew"=>"iso-8859-8",
    "hebrew"=>"iso-8859-8",
    "iso-8859-8"=>"iso-8859-8",
    "iso-8859-8-e"=>"iso-8859-8",
    "iso-ir-138"=>"iso-8859-8",
    "iso8859-8"=>"iso-8859-8",
    "iso88598"=>"iso-8859-8",
    "iso_8859-8"=>"iso-8859-8",
    "iso_8859-8:1988"=>"iso-8859-8",
    "visual"=>"iso-8859-8",
    "csisolatin6"=>"iso-8859-10",
    "iso-8859-10"=>"iso-8859-10",
    "iso-ir-157"=>"iso-8859-10",
    "iso8859-10"=>"iso-8859-10",
    "iso885910"=>"iso-8859-10",
    "l6"=>"iso-8859-10",
    "latin6"=>"iso-8859-10",
    "iso-8859-13"=>"iso-8859-13",
    "iso8859-13"=>"iso-8859-13",
    "iso885913"=>"iso-8859-13",
    "iso-8859-14"=>"iso-8859-14",
    "iso8859-14"=>"iso-8859-14",
    "iso885914"=>"iso-8859-14",
    "csisolatin9"=>"iso-8859-15",
    "iso-8859-15"=>"iso-8859-15",
    "iso8859-15"=>"iso-8859-15",
    "iso885915"=>"iso-8859-15",
    "iso_8859-15"=>"iso-8859-15",
    "l9"=>"iso-8859-15",
    "iso-8859-16"=>"iso-8859-16",
    "cskoi8r"=>"koi8-r",
    "koi"=>"koi8-r",
    "koi8"=>"koi8-r",
    "koi8-r"=>"koi8-r",
    "koi8_r"=>"koi8-r",
    "koi8-ru"=>"koi8-u",
    "koi8-u"=>"koi8-u",
    "dos-874"=>"windows-874",
    "iso-8859-11"=>"windows-874",
    "iso8859-11"=>"windows-874",
    "iso885911"=>"windows-874",
    "tis-620"=>"windows-874",
    "windows-874"=>"windows-874",
    "cp1250"=>"windows-1250",
    "windows-1250"=>"windows-1250",
    "x-cp1250"=>"windows-1250",
    "cp1251"=>"windows-1251",
    "windows-1251"=>"windows-1251",
    "x-cp1251"=>"windows-1251",
    "ansi_x3.4-1968"=>"windows-1252",
    "ascii"=>"windows-1252",
    "cp1252"=>"windows-1252",
    "cp819"=>"windows-1252",
    "csisolatin1"=>"windows-1252",
    "ibm819"=>"windows-1252",
    "iso-8859-1"=>"windows-1252",
    "iso-ir-100"=>"windows-1252",
    "iso8859-1"=>"windows-1252",
    "iso88591"=>"windows-1252",
    "iso_8859-1"=>"windows-1252",
    "iso_8859-1:1987"=>"windows-1252",
    "l1"=>"windows-1252",
    "latin1"=>"windows-1252",
    "us-ascii"=>"windows-1252",
    "windows-1252"=>"windows-1252",
    "x-cp1252"=>"windows-1252",
    "cp1253"=>"windows-1253",
    "windows-1253"=>"windows-1253",
    "x-cp1253"=>"windows-1253",
    "cp1254"=>"windows-1254",
    "csisolatin5"=>"windows-1254",
    "iso-8859-9"=>"windows-1254",
    "iso-ir-148"=>"windows-1254",
    "iso8859-9"=>"windows-1254",
    "iso88599"=>"windows-1254",
    "iso_8859-9"=>"windows-1254",
    "iso_8859-9:1989"=>"windows-1254",
    "l5"=>"windows-1254",
    "latin5"=>"windows-1254",
    "windows-1254"=>"windows-1254",
    "x-cp1254"=>"windows-1254",
    "cp1255"=>"windows-1255",
    "windows-1255"=>"windows-1255",
    "x-cp1255"=>"windows-1255",
    "cp1256"=>"windows-1256",
    "windows-1256"=>"windows-1256",
    "x-cp1256"=>"windows-1256",
    "cp1257"=>"windows-1257",
    "windows-1257"=>"windows-1257",
    "x-cp1257"=>"windows-1257",
    "cp1258"=>"windows-1258",
    "windows-1258"=>"windows-1258",
    "x-cp1258"=>"windows-1258",
    "x-mac-cyrillic"=>"macCyrillic",
    "x-mac-ukrainian"=>"macCyrillic",
    "chinese"=>"gbk",
    "csgb2312"=>"gbk",
    "csiso58gb231280"=>"gbk",
    "gb2312"=>"gbk",
    "gb_2312"=>"gbk",
    "gb_2312-80"=>"gbk",
    "gbk"=>"gbk",
    "iso-ir-58"=>"gbk",
    "x-gbk"=>"gbk",
    "gb18030"=>"gb18030",
    "big5"=>"big5",
    "big5-hkscs"=>"big5",
    "cn-big5"=>"big5",
    "csbig5"=>"big5",
    "x-x-big5"=>"big5",
    "cseucpkdfmtjapanese"=>"cp51932",
    "euc-jp"=>"cp51932",
    "x-euc-jp"=>"cp51932",
    "csiso2022jp"=>"cp50221",
    "iso-2022-jp"=>"cp50221",
    "csshiftjis"=>"Windows-31J",
    "ms932"=>"Windows-31J",
    "ms_kanji"=>"Windows-31J",
    "shift-jis"=>"Windows-31J",
    "shift_jis"=>"Windows-31J",
    "sjis"=>"Windows-31J",
    "windows-31j"=>"Windows-31J",
    "x-sjis"=>"Windows-31J",
    "cseuckr"=>"euc-kr",
    "csksc56011987"=>"euc-kr",
    "euc-kr"=>"euc-kr",
    "iso-ir-149"=>"euc-kr",
    "korean"=>"euc-kr",
    "ks_c_5601-1987"=>"euc-kr",
    "ks_c_5601-1989"=>"euc-kr",
    "ksc5601"=>"euc-kr",
    "ksc_5601"=>"euc-kr",
    "windows-949"=>"euc-kr",
    "utf-16be"=>"utf-16be",
    "utf-16"=>"utf-16le",
    "utf-16le"=>"utf-16le",
  } # :nodoc:
  Ractor.make_shareable(WEB_ENCODINGS_) if defined?(Ractor)

  # :nodoc:
  # return encoding or nil
  # http://encoding.spec.whatwg.org/#concept-encoding-get
  def self.get_encoding(label)
    Encoding.find(WEB_ENCODINGS_[label.to_str.strip.downcase]) rescue nil
  end
end # module URI

module Kernel

  #
  # Returns a \URI object derived from the given +uri+,
  # which may be a \URI string or an existing \URI object:
  #
  #   # Returns a new URI.
  #   uri = URI('http://github.com/ruby/ruby')
  #   # => #<URI::HTTP http://github.com/ruby/ruby>
  #   # Returns the given URI.
  #   URI(uri)
  #   # => #<URI::HTTP http://github.com/ruby/ruby>
  #
  def URI(uri)
    if uri.is_a?(URI::Generic)
      uri
    elsif uri = String.try_convert(uri)
      URI.parse(uri)
    else
      raise ArgumentError,
        "bad argument (expected URI object or URI string)"
    end
  end
  module_function :URI
end
PK*J[��c~~share/ruby/uri/http.rbnu�[���# frozen_string_literal: false
# = uri/http.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See URI for general documentation
#

require_relative 'generic'

module URI

  #
  # The syntax of HTTP URIs is defined in RFC1738 section 3.3.
  #
  # Note that the Ruby URI library allows HTTP URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class HTTP < Generic
    # A Default port of 80 for URI::HTTP.
    DEFAULT_PORT = 80

    # An Array of the available components for URI::HTTP.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
      fragment
    ].freeze

    #
    # == Description
    #
    # Creates a new URI::HTTP object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, query, and
    # fragment.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query, fragment]</code>.
    #
    # Example:
    #
    #     uri = URI::HTTP.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = URI::HTTP.build([nil, "www.example.com", nil, "/path",
    #       "query", 'fragment'])
    #
    # Currently, if passed userinfo components this method generates
    # invalid HTTP URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for an HTTP request, as required by Net::HTTP::Get.
    #
    # If the URI contains a query, the full path is URI#path + '?' + URI#query.
    # Otherwise, the path is simply URI#path.
    #
    # Example:
    #
    #     uri = URI::HTTP.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end

    #
    # == Description
    #
    # Returns the authority for an HTTP uri, as defined in
    # https://www.rfc-editor.org/rfc/rfc3986#section-3.2.
    #
    #
    # Example:
    #
    #     URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').authority #=> "www.example.com"
    #     URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').authority #=> "www.example.com:8000"
    #     URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').authority #=> "www.example.com"
    #
    def authority
      if port == default_port
        host
      else
        "#{host}:#{port}"
      end
    end

    #
    # == Description
    #
    # Returns the origin for an HTTP uri, as defined in
    # https://www.rfc-editor.org/rfc/rfc6454.
    #
    #
    # Example:
    #
    #     URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').origin #=> "http://www.example.com"
    #     URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').origin #=> "http://www.example.com:8000"
    #     URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').origin #=> "http://www.example.com"
    #     URI::HTTPS.build(host: 'www.example.com', path: '/foo/bar').origin #=> "https://www.example.com"
    #
    def origin
      "#{scheme}://#{authority}"
    end
  end

  register_scheme 'HTTP', HTTP
end
PK*J[z�� share/ruby/bundled_gems.rbnu�[���# -*- frozen-string-literal: true -*-

module Gem::BUNDLED_GEMS # :nodoc:
  SINCE = {
    "matrix" => "3.1.0",
    "net-ftp" => "3.1.0",
    "net-imap" => "3.1.0",
    "net-pop" => "3.1.0",
    "net-smtp" => "3.1.0",
    "prime" => "3.1.0",
    "racc" => "3.3.0",
    "abbrev" => "3.4.0",
    "base64" => "3.4.0",
    "bigdecimal" => "3.4.0",
    "csv" => "3.4.0",
    "drb" => "3.4.0",
    "getoptlong" => "3.4.0",
    "mutex_m" => "3.4.0",
    "nkf" => "3.4.0",
    "observer" => "3.4.0",
    "resolv-replace" => "3.4.0",
    "rinda" => "3.4.0",
    "syslog" => "3.4.0",
    "ostruct" => "3.5.0",
    "pstore" => "3.5.0",
    "rdoc" => "3.5.0",
    "win32ole" => "3.5.0",
    "fiddle" => "3.5.0",
    "logger" => "3.5.0",
    "benchmark" => "3.5.0",
    "irb" => "3.5.0",
    "reline" => "3.5.0",
    # "readline" => "3.5.0", # This is wrapper for reline. We don't warn for this.
  }.freeze

  SINCE_FAST_PATH = SINCE.transform_keys { |g| g.sub(/\A.*\-/, "") }.freeze

  EXACT = {
    "kconv" => "nkf",
  }.freeze

  PREFIXED = {
    "bigdecimal" => true,
    "csv" => true,
    "drb" => true,
    "rinda" => true,
    "syslog" => true,
    "fiddle" => true,
  }.freeze

  WARNED = {}                   # unfrozen

  conf = ::RbConfig::CONFIG
  if ENV["TEST_BUNDLED_GEMS_FAKE_RBCONFIG"]
    LIBDIR = (File.expand_path(File.join(__dir__, "..", "lib")) + "/").freeze
    rubyarchdir = $LOAD_PATH.find{|path| path.include?(".ext/common") }
    ARCHDIR = (File.expand_path(rubyarchdir) + "/").freeze
  else
    LIBDIR = (conf["rubylibdir"] + "/").freeze
    ARCHDIR = (conf["rubyarchdir"] + "/").freeze
  end
  dlext = [conf["DLEXT"], "so"].uniq
  DLEXT = /\.#{Regexp.union(dlext)}\z/
  LIBEXT = /\.#{Regexp.union("rb", *dlext)}\z/

  def self.replace_require(specs)
    return if [::Kernel.singleton_class, ::Kernel].any? {|klass| klass.respond_to?(:no_warning_require) }

    spec_names = specs.to_a.each_with_object({}) {|spec, h| h[spec.name] = true }

    [::Kernel.singleton_class, ::Kernel].each do |kernel_class|
      kernel_class.send(:alias_method, :no_warning_require, :require)
      kernel_class.send(:define_method, :require) do |name|
        if message = ::Gem::BUNDLED_GEMS.warning?(name, specs: spec_names)
          uplevel = ::Gem::BUNDLED_GEMS.uplevel
          if uplevel > 0
            Kernel.warn message, uplevel: uplevel
          else
            Kernel.warn message
          end
        end
        kernel_class.send(:no_warning_require, name)
      end
      if kernel_class == ::Kernel
        kernel_class.send(:private, :require)
      else
        kernel_class.send(:public, :require)
      end
    end
  end

  def self.uplevel
    frame_count = 0
    require_labels = ["replace_require", "require"]
    uplevel = 0
    require_found = false
    Thread.each_caller_location do |cl|
      frame_count += 1

      if require_found
        unless require_labels.include?(cl.base_label)
          return uplevel
        end
      else
        if require_labels.include?(cl.base_label)
          require_found = true
        end
      end
      uplevel += 1
      # Don't show script name when bundle exec and call ruby script directly.
      if cl.path.end_with?("bundle")
        frame_count = 0
        break
      end
    end
    require_found ? 1 : frame_count - 1
  end

  def self.find_gem(path)
    if !path
      return
    elsif path.start_with?(ARCHDIR)
      n = path.delete_prefix(ARCHDIR).sub(DLEXT, "").chomp(".rb")
    elsif path.start_with?(LIBDIR)
      n = path.delete_prefix(LIBDIR).chomp(".rb")
    else
      return
    end
    (EXACT[n] || !!SINCE[n]) or PREFIXED[n = n[%r[\A[^/]+(?=/)]]] && n
  end

  def self.warning?(name, specs: nil)
    # name can be a feature name or a file path with String or Pathname
    feature = File.path(name)

    # irb already has reline as a dependency on gemspec, so we don't want to warn about it.
    # We should update this with a more general solution when we have another case.
    # ex: Gem.loaded_specs[called_gem].dependencies.any? {|d| d.name == feature }
    return false if feature.start_with?("reline") && caller_locations(2, 1)[0].to_s.include?("irb")

    # The actual checks needed to properly identify the gem being required
    # are costly (see [Bug #20641]), so we first do a much cheaper check
    # to exclude the vast majority of candidates.
    if feature.include?("/")
      # bootsnap expands `require "csv"` to `require "#{LIBDIR}/csv.rb"`,
      # and `require "syslog"` to `require "#{ARCHDIR}/syslog.so"`.
      name = feature.delete_prefix(ARCHDIR).delete_prefix(LIBDIR).sub(LIBEXT, "")
      segments = name.split("/")
      name = segments.first
      if !SINCE[name]
        name = segments[0..1].join("-")
        return unless SINCE[name]
      end
    else
      name = feature.sub(LIBEXT, "")
      return unless SINCE_FAST_PATH[name]
    end

    return if specs.include?(name)
    _t, path = $:.resolve_feature_path(feature)
    if gem = find_gem(path)
      return if specs.include?(gem)
    elsif SINCE[name] && !path
      gem = true
    else
      return
    end

    return if WARNED[name]
    WARNED[name] = true
    if gem == true
      gem = name
      "#{feature} was loaded from the standard library, but"
    elsif gem
      "#{feature} is found in #{gem}, which"
    else
      return
    end + build_message(gem)
  end

  def self.build_message(gem)
    msg = " #{RUBY_VERSION < SINCE[gem] ? "will no longer be" : "is not"} part of the default gems starting from Ruby #{SINCE[gem]}."

    if defined?(Bundler)
      msg += "\nYou can add #{gem} to your Gemfile or gemspec to silence this warning."

      # We detect the gem name from caller_locations. First we walk until we find `require`
      # then take the first frame that's not from `require`.
      #
      # Additionally, we need to skip Bootsnap and Zeitwerk if present, these
      # gems decorate Kernel#require, so they are not really the ones issuing
      # the require call users should be warned about. Those are upwards.
      frames_to_skip = 3
      location = nil
      require_found = false
      Thread.each_caller_location do |cl|
        if frames_to_skip >= 1
          frames_to_skip -= 1
          next
        end

        if require_found
          if cl.base_label != "require"
            location = cl.path
            break
          end
        else
          if cl.base_label == "require"
            require_found = true
          end
        end
      end

      if location && File.file?(location) && !location.start_with?(Gem::BUNDLED_GEMS::LIBDIR)
        caller_gem = nil
        Gem.path.each do |path|
          if location =~ %r{#{path}/gems/([\w\-\.]+)}
            caller_gem = $1
            break
          end
        end
        if caller_gem
          msg += "\nAlso please contact the author of #{caller_gem} to request adding #{gem} into its gemspec."
        end
      end
    else
      msg += " Install #{gem} from RubyGems."
    end

    msg
  end

  freeze
end

# for RubyGems without Bundler environment.
# If loading library is not part of the default gems and the bundled gems, warn it.
class LoadError
  def message # :nodoc:
    return super unless path

    name = path.tr("/", "-")
    if !defined?(Bundler) && Gem::BUNDLED_GEMS::SINCE[name] && !Gem::BUNDLED_GEMS::WARNED[name]
      warn name + Gem::BUNDLED_GEMS.build_message(name), uplevel: Gem::BUNDLED_GEMS.uplevel
    end
    super
  end
end
PK*J[S�Q8�)�)share/ruby/openssl/buffering.rbnu�[���# coding: binary
# frozen_string_literal: true
#--
#= Info
#  'OpenSSL for Ruby 2' project
#  Copyright (C) 2001 GOTOU YUUZOU <gotoyuzo@notwork.org>
#  All rights reserved.
#
#= Licence
#  This program is licensed under the same licence as Ruby.
#  (See the file 'COPYING'.)
#++

##
# OpenSSL IO buffering mix-in module.
#
# This module allows an OpenSSL::SSL::SSLSocket to behave like an IO.
#
# You typically won't use this module directly, you can see it implemented in
# OpenSSL::SSL::SSLSocket.

module OpenSSL::Buffering
  include Enumerable

  # A buffer which will retain binary encoding.
  class Buffer < String
    BINARY = Encoding::BINARY

    def initialize
      super

      force_encoding(BINARY)
    end

    def << string
      if string.encoding == BINARY
        super(string)
      else
        super(string.b)
      end

      return self
    end

    alias concat <<
  end

  ##
  # The "sync mode" of the SSLSocket.
  #
  # See IO#sync for full details.

  attr_accessor :sync

  ##
  # Default size to read from or write to the SSLSocket for buffer operations.

  BLOCK_SIZE = 1024*16

  ##
  # Creates an instance of OpenSSL's buffering IO module.

  def initialize(*)
    super
    @eof = false
    @rbuffer = Buffer.new
    @sync = @io.sync
  end

  #
  # for reading.
  #
  private

  ##
  # Fills the buffer from the underlying SSLSocket

  def fill_rbuff
    begin
      @rbuffer << self.sysread(BLOCK_SIZE)
    rescue Errno::EAGAIN
      retry
    rescue EOFError
      @eof = true
    end
  end

  ##
  # Consumes _size_ bytes from the buffer

  def consume_rbuff(size=nil)
    if @rbuffer.empty?
      nil
    else
      size = @rbuffer.size unless size
      @rbuffer.slice!(0, size)
    end
  end

  public

  # call-seq:
  #   ssl.getbyte => 81
  #
  # Get the next 8bit byte from `ssl`.  Returns `nil` on EOF
  def getbyte
    read(1)&.ord
  end

  # Get the next 8bit byte. Raises EOFError on EOF
  def readbyte
    raise EOFError if eof?
    getbyte
  end

  ##
  # Reads _size_ bytes from the stream.  If _buf_ is provided it must
  # reference a string which will receive the data.
  #
  # See IO#read for full details.

  def read(size=nil, buf=nil)
    if size == 0
      if buf
        buf.clear
        return buf
      else
        return ""
      end
    end
    until @eof
      break if size && size <= @rbuffer.size
      fill_rbuff
    end
    ret = consume_rbuff(size) || ""
    if buf
      buf.replace(ret)
      ret = buf
    end
    (size && ret.empty?) ? nil : ret
  end

  ##
  # Reads at most _maxlen_ bytes from the stream.  If _buf_ is provided it
  # must reference a string which will receive the data.
  #
  # See IO#readpartial for full details.

  def readpartial(maxlen, buf=nil)
    if maxlen == 0
      if buf
        buf.clear
        return buf
      else
        return ""
      end
    end
    if @rbuffer.empty?
      begin
        return sysread(maxlen, buf)
      rescue Errno::EAGAIN
        retry
      end
    end
    ret = consume_rbuff(maxlen)
    if buf
      buf.replace(ret)
      ret = buf
    end
    ret
  end

  ##
  # Reads at most _maxlen_ bytes in the non-blocking manner.
  #
  # When no data can be read without blocking it raises
  # OpenSSL::SSL::SSLError extended by IO::WaitReadable or IO::WaitWritable.
  #
  # IO::WaitReadable means SSL needs to read internally so read_nonblock
  # should be called again when the underlying IO is readable.
  #
  # IO::WaitWritable means SSL needs to write internally so read_nonblock
  # should be called again after the underlying IO is writable.
  #
  # OpenSSL::Buffering#read_nonblock needs two rescue clause as follows:
  #
  #   # emulates blocking read (readpartial).
  #   begin
  #     result = ssl.read_nonblock(maxlen)
  #   rescue IO::WaitReadable
  #     IO.select([io])
  #     retry
  #   rescue IO::WaitWritable
  #     IO.select(nil, [io])
  #     retry
  #   end
  #
  # Note that one reason that read_nonblock writes to the underlying IO is
  # when the peer requests a new TLS/SSL handshake.  See openssl the FAQ for
  # more details.  http://www.openssl.org/support/faq.html
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that read_nonblock should not raise an IO::Wait*able exception, but
  # return the symbol +:wait_writable+ or +:wait_readable+ instead. At EOF,
  # it will return +nil+ instead of raising EOFError.

  def read_nonblock(maxlen, buf=nil, exception: true)
    if maxlen == 0
      if buf
        buf.clear
        return buf
      else
        return ""
      end
    end
    if @rbuffer.empty?
      return sysread_nonblock(maxlen, buf, exception: exception)
    end
    ret = consume_rbuff(maxlen)
    if buf
      buf.replace(ret)
      ret = buf
    end
    ret
  end

  ##
  # Reads the next "line" from the stream.  Lines are separated by _eol_.  If
  # _limit_ is provided the result will not be longer than the given number of
  # bytes.
  #
  # _eol_ may be a String or Regexp.
  #
  # Unlike IO#gets the line read will not be assigned to +$_+.
  #
  # Unlike IO#gets the separator must be provided if a limit is provided.

  def gets(eol=$/, limit=nil, chomp: false)
    idx = @rbuffer.index(eol)
    until @eof
      break if idx
      fill_rbuff
      idx = @rbuffer.index(eol)
    end
    if eol.is_a?(Regexp)
      size = idx ? idx+$&.size : nil
    else
      size = idx ? idx+eol.size : nil
    end
    if size && limit && limit >= 0
      size = [size, limit].min
    end
    line = consume_rbuff(size)
    if chomp && line
      line.chomp!(eol)
    end
    line
  end

  ##
  # Executes the block for every line in the stream where lines are separated
  # by _eol_.
  #
  # See also #gets

  def each(eol=$/)
    while line = self.gets(eol)
      yield line
    end
  end
  alias each_line each

  ##
  # Reads lines from the stream which are separated by _eol_.
  #
  # See also #gets

  def readlines(eol=$/)
    ary = []
    while line = self.gets(eol)
      ary << line
    end
    ary
  end

  ##
  # Reads a line from the stream which is separated by _eol_.
  #
  # Raises EOFError if at end of file.

  def readline(eol=$/)
    raise EOFError if eof?
    gets(eol)
  end

  ##
  # Reads one character from the stream.  Returns nil if called at end of
  # file.

  def getc
    read(1)
  end

  ##
  # Calls the given block once for each byte in the stream.

  def each_byte # :yields: byte
    while c = getc
      yield(c.ord)
    end
  end

  ##
  # Reads a one-character string from the stream.  Raises an EOFError at end
  # of file.

  def readchar
    raise EOFError if eof?
    getc
  end

  ##
  # Pushes character _c_ back onto the stream such that a subsequent buffered
  # character read will return it.
  #
  # Unlike IO#getc multiple bytes may be pushed back onto the stream.
  #
  # Has no effect on unbuffered reads (such as #sysread).

  def ungetc(c)
    @rbuffer[0,0] = c.chr
  end

  ##
  # Returns true if the stream is at file which means there is no more data to
  # be read.

  def eof?
    fill_rbuff if !@eof && @rbuffer.empty?
    @eof && @rbuffer.empty?
  end
  alias eof eof?

  #
  # for writing.
  #
  private

  ##
  # Writes _s_ to the buffer.  When the buffer is full or #sync is true the
  # buffer is flushed to the underlying socket.

  def do_write(s)
    @wbuffer = Buffer.new unless defined? @wbuffer
    @wbuffer << s
    @wbuffer.force_encoding(Encoding::BINARY)
    @sync ||= false
    buffer_size = @wbuffer.size
    if @sync or buffer_size > BLOCK_SIZE
      nwrote = 0
      begin
        while nwrote < buffer_size do
          begin
            nwrote += syswrite(@wbuffer[nwrote, buffer_size - nwrote])
          rescue Errno::EAGAIN
            retry
          end
        end
      ensure
        @wbuffer[0, nwrote] = ""
      end
    end
  end

  public

  ##
  # Writes _s_ to the stream.  If the argument is not a String it will be
  # converted using +.to_s+ method.  Returns the number of bytes written.

  def write(*s)
    s.inject(0) do |written, str|
      do_write(str)
      written + str.bytesize
    end
  end

  ##
  # Writes _s_ in the non-blocking manner.
  #
  # If there is buffered data, it is flushed first.  This may block.
  #
  # write_nonblock returns number of bytes written to the SSL connection.
  #
  # When no data can be written without blocking it raises
  # OpenSSL::SSL::SSLError extended by IO::WaitReadable or IO::WaitWritable.
  #
  # IO::WaitReadable means SSL needs to read internally so write_nonblock
  # should be called again after the underlying IO is readable.
  #
  # IO::WaitWritable means SSL needs to write internally so write_nonblock
  # should be called again after underlying IO is writable.
  #
  # So OpenSSL::Buffering#write_nonblock needs two rescue clause as follows.
  #
  #   # emulates blocking write.
  #   begin
  #     result = ssl.write_nonblock(str)
  #   rescue IO::WaitReadable
  #     IO.select([io])
  #     retry
  #   rescue IO::WaitWritable
  #     IO.select(nil, [io])
  #     retry
  #   end
  #
  # Note that one reason that write_nonblock reads from the underlying IO
  # is when the peer requests a new TLS/SSL handshake.  See the openssl FAQ
  # for more details.  http://www.openssl.org/support/faq.html
  #
  # By specifying a keyword argument _exception_ to +false+, you can indicate
  # that write_nonblock should not raise an IO::Wait*able exception, but
  # return the symbol +:wait_writable+ or +:wait_readable+ instead.

  def write_nonblock(s, exception: true)
    flush
    syswrite_nonblock(s, exception: exception)
  end

  ##
  # Writes _s_ to the stream.  _s_ will be converted to a String using
  # +.to_s+ method.

  def <<(s)
    do_write(s)
    self
  end

  ##
  # Writes _args_ to the stream along with a record separator.
  #
  # See IO#puts for full details.

  def puts(*args)
    s = Buffer.new
    if args.empty?
      s << "\n"
    end
    args.each{|arg|
      s << arg.to_s
      s.sub!(/(?<!\n)\z/, "\n")
    }
    do_write(s)
    nil
  end

  ##
  # Writes _args_ to the stream.
  #
  # See IO#print for full details.

  def print(*args)
    s = Buffer.new
    args.each{ |arg| s << arg.to_s }
    do_write(s)
    nil
  end

  ##
  # Formats and writes to the stream converting parameters under control of
  # the format string.
  #
  # See Kernel#sprintf for format string details.

  def printf(s, *args)
    do_write(s % args)
    nil
  end

  ##
  # Flushes buffered data to the SSLSocket.

  def flush
    osync = @sync
    @sync = true
    do_write ""
    return self
  ensure
    @sync = osync
  end

  ##
  # Closes the SSLSocket and flushes any unwritten data.

  def close
    flush rescue nil
    sysclose
  end
end
PK*J[��?U�.�.share/ruby/openssl/x509.rbnu�[���# frozen_string_literal: true
#--
# = Ruby-space definitions that completes C-space funcs for X509 and subclasses
#
# = Info
# 'OpenSSL for Ruby 2' project
# Copyright (C) 2002  Michal Rokos <m.rokos@sh.cvut.cz>
# All rights reserved.
#
# = Licence
# This program is licensed under the same licence as Ruby.
# (See the file 'COPYING'.)
#++

require_relative 'marshal'

module OpenSSL
  module X509
    class ExtensionFactory
      def create_extension(*arg)
        if arg.size > 1
          create_ext(*arg)
        else
          send("create_ext_from_"+arg[0].class.name.downcase, arg[0])
        end
      end

      def create_ext_from_array(ary)
        raise ExtensionError, "unexpected array form" if ary.size > 3
        create_ext(ary[0], ary[1], ary[2])
      end

      def create_ext_from_string(str) # "oid = critical, value"
        oid, value = str.split(/=/, 2)
        oid.strip!
        value.strip!
        create_ext(oid, value)
      end

      def create_ext_from_hash(hash)
        create_ext(hash["oid"], hash["value"], hash["critical"])
      end
    end

    class Extension
      include OpenSSL::Marshal

      def ==(other)
        return false unless Extension === other
        to_der == other.to_der
      end

      def to_s # "oid = critical, value"
        str = self.oid
        str << " = "
        str << "critical, " if self.critical?
        str << self.value.gsub(/\n/, ", ")
      end

      def to_h # {"oid"=>sn|ln, "value"=>value, "critical"=>true|false}
        {"oid"=>self.oid,"value"=>self.value,"critical"=>self.critical?}
      end

      def to_a
        [ self.oid, self.value, self.critical? ]
      end

      module Helpers
        def find_extension(oid)
          extensions.find { |e| e.oid == oid }
        end
      end

      module SubjectKeyIdentifier
        include Helpers

        # Get the subject's key identifier from the subjectKeyIdentifier
        # exteension, as described in RFC5280 Section 4.2.1.2.
        #
        # Returns the binary String key identifier or nil or raises
        # ASN1::ASN1Error.
        def subject_key_identifier
          ext = find_extension("subjectKeyIdentifier")
          return nil if ext.nil?

          ski_asn1 = ASN1.decode(ext.value_der)
          if ext.critical? || ski_asn1.tag_class != :UNIVERSAL || ski_asn1.tag != ASN1::OCTET_STRING
            raise ASN1::ASN1Error, "invalid extension"
          end

          ski_asn1.value
        end
      end

      module AuthorityKeyIdentifier
        include Helpers

        # Get the issuing certificate's key identifier from the
        # authorityKeyIdentifier extension, as described in RFC5280
        # Section 4.2.1.1
        #
        # Returns the binary String keyIdentifier or nil or raises
        # ASN1::ASN1Error.
        def authority_key_identifier
          ext = find_extension("authorityKeyIdentifier")
          return nil if ext.nil?

          aki_asn1 = ASN1.decode(ext.value_der)
          if ext.critical? || aki_asn1.tag_class != :UNIVERSAL || aki_asn1.tag != ASN1::SEQUENCE
            raise ASN1::ASN1Error, "invalid extension"
          end

          key_id = aki_asn1.value.find do |v|
            v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0
          end

          key_id.nil? ? nil : key_id.value
        end
      end

      module CRLDistributionPoints
        include Helpers

        # Get the distributionPoint fullName URI from the certificate's CRL
        # distribution points extension, as described in RFC 5280 Section
        # 4.2.1.13.
        #
        # Returns an array of strings or nil or raises ASN1::ASN1Error.
        def crl_uris
          ext = find_extension("crlDistributionPoints")
          return nil if ext.nil?

          cdp_asn1 = ASN1.decode(ext.value_der)
          if cdp_asn1.tag_class != :UNIVERSAL || cdp_asn1.tag != ASN1::SEQUENCE
            raise ASN1::ASN1Error, "invalid extension"
          end

          crl_uris = cdp_asn1.flat_map do |crl_distribution_point|
            distribution_point = crl_distribution_point.value.find do |v|
              v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0
            end
            full_name = distribution_point&.value&.find do |v|
              v.tag_class == :CONTEXT_SPECIFIC && v.tag == 0
            end
            full_name&.value&.select do |v|
              v.tag_class == :CONTEXT_SPECIFIC && v.tag == 6 # uniformResourceIdentifier
            end
          end

          crl_uris.empty? ? nil : crl_uris.map(&:value)
        end
      end

      module AuthorityInfoAccess
        include Helpers

        # Get the information and services for the issuer from the certificate's
        # authority information access extension exteension, as described in RFC5280
        # Section 4.2.2.1.
        #
        # Returns an array of strings or nil or raises ASN1::ASN1Error.
        def ca_issuer_uris
          aia_asn1 = parse_aia_asn1
          return nil if aia_asn1.nil?

          ca_issuer = aia_asn1.value.select do |authority_info_access|
            authority_info_access.value.first.value == "caIssuers"
          end

          ca_issuer&.map(&:value)&.map(&:last)&.map(&:value)
        end

        # Get the URIs for OCSP from the certificate's authority information access
        # extension exteension, as described in RFC5280 Section 4.2.2.1.
        #
        # Returns an array of strings or nil or raises ASN1::ASN1Error.
        def ocsp_uris
          aia_asn1 = parse_aia_asn1
          return nil if aia_asn1.nil?

          ocsp = aia_asn1.value.select do |authority_info_access|
            authority_info_access.value.first.value == "OCSP"
          end

          ocsp&.map(&:value)&.map(&:last)&.map(&:value)
        end

        private

          def parse_aia_asn1
            ext = find_extension("authorityInfoAccess")
            return nil if ext.nil?

            aia_asn1 = ASN1.decode(ext.value_der)
            if ext.critical? || aia_asn1.tag_class != :UNIVERSAL || aia_asn1.tag != ASN1::SEQUENCE
              raise ASN1::ASN1Error, "invalid extension"
            end

            aia_asn1
          end
      end
    end

    class Name
      include OpenSSL::Marshal

      module RFC2253DN
        Special = ',=+<>#;'
        HexChar = /[0-9a-fA-F]/
        HexPair = /#{HexChar}#{HexChar}/
        HexString = /#{HexPair}+/
        Pair = /\\(?:[#{Special}]|\\|"|#{HexPair})/
        StringChar = /[^\\"#{Special}]/
        QuoteChar = /[^\\"]/
        AttributeType = /[a-zA-Z][0-9a-zA-Z]*|[0-9]+(?:\.[0-9]+)*/
        AttributeValue = /
          (?!["#])((?:#{StringChar}|#{Pair})*)|
          \#(#{HexString})|
          "((?:#{QuoteChar}|#{Pair})*)"
        /x
        TypeAndValue = /\A(#{AttributeType})=#{AttributeValue}/

        module_function

        def expand_pair(str)
          return nil unless str
          return str.gsub(Pair){
            pair = $&
            case pair.size
            when 2 then pair[1,1]
            when 3 then Integer("0x#{pair[1,2]}").chr
            else raise OpenSSL::X509::NameError, "invalid pair: #{str}"
            end
          }
        end

        def expand_hexstring(str)
          return nil unless str
          der = str.gsub(HexPair){$&.to_i(16).chr }
          a1 = OpenSSL::ASN1.decode(der)
          return a1.value, a1.tag
        end

        def expand_value(str1, str2, str3)
          value = expand_pair(str1)
          value, tag = expand_hexstring(str2) unless value
          value = expand_pair(str3) unless value
          return value, tag
        end

        def scan(dn)
          str = dn
          ary = []
          while true
            if md = TypeAndValue.match(str)
              remain = md.post_match
              type = md[1]
              value, tag = expand_value(md[2], md[3], md[4]) rescue nil
              if value
                type_and_value = [type, value]
                type_and_value.push(tag) if tag
                ary.unshift(type_and_value)
                if remain.length > 2 && remain[0] == ?,
                  str = remain[1..-1]
                  next
                elsif remain.length > 2 && remain[0] == ?+
                  raise OpenSSL::X509::NameError,
                    "multi-valued RDN is not supported: #{dn}"
                elsif remain.empty?
                  break
                end
              end
            end
            msg_dn = dn[0, dn.length - str.length] + " =>" + str
            raise OpenSSL::X509::NameError, "malformed RDN: #{msg_dn}"
          end
          return ary
        end
      end

      class << self
        # Parses the UTF-8 string representation of a distinguished name,
        # according to RFC 2253.
        #
        # See also #to_utf8 for the opposite operation.
        def parse_rfc2253(str, template=OBJECT_TYPE_TEMPLATE)
          ary = OpenSSL::X509::Name::RFC2253DN.scan(str)
          self.new(ary, template)
        end

        # Parses the string representation of a distinguished name. Two
        # different forms are supported:
        #
        # - \OpenSSL format (<tt>X509_NAME_oneline()</tt>) used by
        #   <tt>#to_s</tt>. For example: <tt>/DC=com/DC=example/CN=nobody</tt>
        # - \OpenSSL format (<tt>X509_NAME_print()</tt>)
        #   used by <tt>#to_s(OpenSSL::X509::Name::COMPAT)</tt>. For example:
        #   <tt>DC=com, DC=example, CN=nobody</tt>
        #
        # Neither of them is standardized and has quirks and inconsistencies
        # in handling of escaped characters or multi-valued RDNs.
        #
        # Use of this method is discouraged in new applications. See
        # Name.parse_rfc2253 and #to_utf8 for the alternative.
        def parse_openssl(str, template=OBJECT_TYPE_TEMPLATE)
          if str.start_with?("/")
            # /A=B/C=D format
            ary = str[1..-1].split("/").map { |i| i.split("=", 2) }
          else
            # Comma-separated
            ary = str.split(",").map { |i| i.strip.split("=", 2) }
          end
          self.new(ary, template)
        end

        alias parse parse_openssl
      end

      def pretty_print(q)
        q.object_group(self) {
          q.text ' '
          q.text to_s(OpenSSL::X509::Name::RFC2253)
        }
      end
    end

    class Attribute
      include OpenSSL::Marshal

      def ==(other)
        return false unless Attribute === other
        to_der == other.to_der
      end
    end

    class StoreContext
      def cleanup
        warn "(#{caller.first}) OpenSSL::X509::StoreContext#cleanup is deprecated with no replacement" if $VERBOSE
      end
    end

    class Certificate
      include OpenSSL::Marshal
      include Extension::SubjectKeyIdentifier
      include Extension::AuthorityKeyIdentifier
      include Extension::CRLDistributionPoints
      include Extension::AuthorityInfoAccess

      def pretty_print(q)
        q.object_group(self) {
          q.breakable
          q.text 'subject='; q.pp self.subject; q.text ','; q.breakable
          q.text 'issuer='; q.pp self.issuer; q.text ','; q.breakable
          q.text 'serial='; q.pp self.serial; q.text ','; q.breakable
          q.text 'not_before='; q.pp self.not_before; q.text ','; q.breakable
          q.text 'not_after='; q.pp self.not_after
        }
      end

      def self.load_file(path)
        load(File.binread(path))
      end
    end

    class CRL
      include OpenSSL::Marshal
      include Extension::AuthorityKeyIdentifier

      def ==(other)
        return false unless CRL === other
        to_der == other.to_der
      end
    end

    class Revoked
      def ==(other)
        return false unless Revoked === other
        to_der == other.to_der
      end
    end

    class Request
      include OpenSSL::Marshal

      def ==(other)
        return false unless Request === other
        to_der == other.to_der
      end
    end
  end
end
PK*J[͒����share/ruby/openssl/bn.rbnu�[���# frozen_string_literal: true
#--
#
# = Ruby-space definitions that completes C-space funcs for BN
#
# = Info
# 'OpenSSL for Ruby 2' project
# Copyright (C) 2002  Michal Rokos <m.rokos@sh.cvut.cz>
# All rights reserved.
#
# = Licence
# This program is licensed under the same licence as Ruby.
# (See the file 'COPYING'.)
#++

module OpenSSL
  class BN
    include Comparable

    def pretty_print(q)
      q.object_group(self) {
        q.text ' '
        q.text to_i.to_s
      }
    end
  end # BN
end # OpenSSL

##
#--
# Add double dispatch to Integer
#++
class Integer
  # Casts an Integer as an OpenSSL::BN
  #
  # See `man bn` for more info.
  def to_bn
    OpenSSL::BN::new(self)
  end
end # Integer
PK*J[�*eeshare/ruby/openssl/pkcs5.rbnu�[���# frozen_string_literal: true
#--
# Ruby/OpenSSL Project
# Copyright (C) 2017 Ruby/OpenSSL Project Authors
#++

module OpenSSL
  module PKCS5
    module_function

    # OpenSSL::PKCS5.pbkdf2_hmac has been renamed to OpenSSL::KDF.pbkdf2_hmac.
    # This method is provided for backwards compatibility.
    def pbkdf2_hmac(pass, salt, iter, keylen, digest)
      OpenSSL::KDF.pbkdf2_hmac(pass, salt: salt, iterations: iter,
                               length: keylen, hash: digest)
    end

    def pbkdf2_hmac_sha1(pass, salt, iter, keylen)
      pbkdf2_hmac(pass, salt, iter, keylen, "sha1")
    end
  end
end
PK*J[�a��share/ruby/openssl/asn1.rbnu�[���# frozen_string_literal: true
#--
#
# = Ruby-space definitions that completes C-space funcs for ASN.1
#
# = Licence
# This program is licensed under the same licence as Ruby.
# (See the file 'COPYING'.)
#++

module OpenSSL
  module ASN1
    class ASN1Data
      #
      # Carries the value of a ASN.1 type.
      # Please confer Constructive and Primitive for the mappings between
      # ASN.1 data types and Ruby classes.
      #
      attr_accessor :value

      # An Integer representing the tag number of this ASN1Data. Never +nil+.
      attr_accessor :tag

      # A Symbol representing the tag class of this ASN1Data. Never +nil+.
      # See ASN1Data for possible values.
      attr_accessor :tag_class

      #
      # Never +nil+. A boolean value indicating whether the encoding uses
      # indefinite length (in the case of parsing) or whether an indefinite
      # length form shall be used (in the encoding case).
      # In DER, every value uses definite length form. But in scenarios where
      # large amounts of data need to be transferred it might be desirable to
      # have some kind of streaming support available.
      # For example, huge OCTET STRINGs are preferably sent in smaller-sized
      # chunks, each at a time.
      # This is possible in BER by setting the length bytes of an encoding
      # to zero and by this indicating that the following value will be
      # sent in chunks. Indefinite length encodings are always constructed.
      # The end of such a stream of chunks is indicated by sending a EOC
      # (End of Content) tag. SETs and SEQUENCEs may use an indefinite length
      # encoding, but also primitive types such as e.g. OCTET STRINGS or
      # BIT STRINGS may leverage this functionality (cf. ITU-T X.690).
      #
      attr_accessor :indefinite_length

      alias infinite_length indefinite_length
      alias infinite_length= indefinite_length=

      #
      # :call-seq:
      #    OpenSSL::ASN1::ASN1Data.new(value, tag, tag_class) => ASN1Data
      #
      # _value_: Please have a look at Constructive and Primitive to see how Ruby
      # types are mapped to ASN.1 types and vice versa.
      #
      # _tag_: An Integer indicating the tag number.
      #
      # _tag_class_: A Symbol indicating the tag class. Please cf. ASN1 for
      # possible values.
      #
      # == Example
      #   asn1_int = OpenSSL::ASN1Data.new(42, 2, :UNIVERSAL) # => Same as OpenSSL::ASN1::Integer.new(42)
      #   tagged_int = OpenSSL::ASN1Data.new(42, 0, :CONTEXT_SPECIFIC) # implicitly 0-tagged INTEGER
      #
      def initialize(value, tag, tag_class)
        raise ASN1Error, "invalid tag class" unless tag_class.is_a?(Symbol)

        @tag = tag
        @value = value
        @tag_class = tag_class
        @indefinite_length = false
      end
    end

    module TaggedASN1Data
      #
      # May be used as a hint for encoding a value either implicitly or
      # explicitly by setting it either to +:IMPLICIT+ or to +:EXPLICIT+.
      # _tagging_ is not set when a ASN.1 structure is parsed using
      # OpenSSL::ASN1.decode.
      #
      attr_accessor :tagging

      # :call-seq:
      #    OpenSSL::ASN1::Primitive.new(value [, tag, tagging, tag_class ]) => Primitive
      #
      # _value_: is mandatory.
      #
      # _tag_: optional, may be specified for tagged values. If no _tag_ is
      # specified, the UNIVERSAL tag corresponding to the Primitive sub-class
      # is used by default.
      #
      # _tagging_: may be used as an encoding hint to encode a value either
      # explicitly or implicitly, see ASN1 for possible values.
      #
      # _tag_class_: if _tag_ and _tagging_ are +nil+ then this is set to
      # +:UNIVERSAL+ by default. If either _tag_ or _tagging_ are set then
      # +:CONTEXT_SPECIFIC+ is used as the default. For possible values please
      # cf. ASN1.
      #
      # == Example
      #   int = OpenSSL::ASN1::Integer.new(42)
      #   zero_tagged_int = OpenSSL::ASN1::Integer.new(42, 0, :IMPLICIT)
      #   private_explicit_zero_tagged_int = OpenSSL::ASN1::Integer.new(42, 0, :EXPLICIT, :PRIVATE)
      #
      def initialize(value, tag = nil, tagging = nil, tag_class = nil)
        tag ||= ASN1.take_default_tag(self.class)

        raise ASN1Error, "must specify tag number" unless tag

        if tagging
          raise ASN1Error, "invalid tagging method" unless tagging.is_a?(Symbol)
        end

        tag_class ||= tagging ? :CONTEXT_SPECIFIC : :UNIVERSAL

        raise ASN1Error, "invalid tag class" unless tag_class.is_a?(Symbol)

        @tagging = tagging
        super(value ,tag, tag_class)
      end
    end

    class Primitive < ASN1Data
      include TaggedASN1Data

      undef_method :indefinite_length=
      undef_method :infinite_length=
    end

    class Constructive < ASN1Data
      include TaggedASN1Data
      include Enumerable

      # :call-seq:
      #    asn1_ary.each { |asn1| block } => asn1_ary
      #
      # Calls the given block once for each element in self, passing that element
      # as parameter _asn1_. If no block is given, an enumerator is returned
      # instead.
      #
      # == Example
      #   asn1_ary.each do |asn1|
      #     puts asn1
      #   end
      #
      def each(&blk)
        @value.each(&blk)

        self
      end
    end

    class Boolean < Primitive ; end
    class Integer < Primitive ; end
    class Enumerated < Primitive ; end

    class BitString < Primitive
      attr_accessor :unused_bits

      def initialize(*)
        super

        @unused_bits = 0
      end
    end

    class EndOfContent < ASN1Data
      def initialize
        super("", 0, :UNIVERSAL)
      end
    end

    # :nodoc:
    def self.take_default_tag(klass)
      tag = CLASS_TAG_MAP[klass]

      return tag if tag

      sklass = klass.superclass

      return unless sklass

      take_default_tag(sklass)
    end
  end
end
PK*J[�(*G;;share/ruby/openssl/pkey.rbnu�[���# frozen_string_literal: true
#--
# Ruby/OpenSSL Project
# Copyright (C) 2017 Ruby/OpenSSL Project Authors
#++

require_relative 'marshal'

module OpenSSL::PKey
  class DH
    include OpenSSL::Marshal

    # :call-seq:
    #    dh.public_key -> dhnew
    #
    # Returns a new DH instance that carries just the \DH parameters.
    #
    # Contrary to the method name, the returned DH object contains only
    # parameters and not the public key.
    #
    # This method is provided for backwards compatibility. In most cases, there
    # is no need to call this method.
    #
    # For the purpose of re-generating the key pair while keeping the
    # parameters, check OpenSSL::PKey.generate_key.
    #
    # Example:
    #   # OpenSSL::PKey::DH.generate by default generates a random key pair
    #   dh1 = OpenSSL::PKey::DH.generate(2048)
    #   p dh1.priv_key #=> #<OpenSSL::BN 1288347...>
    #   dhcopy = dh1.public_key
    #   p dhcopy.priv_key #=> nil
    def public_key
      DH.new(to_der)
    end

    # :call-seq:
    #    dh.compute_key(pub_bn) -> string
    #
    # Returns a String containing a shared secret computed from the other
    # party's public value.
    #
    # This method is provided for backwards compatibility, and calls #derive
    # internally.
    #
    # === Parameters
    # * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by
    #   DH#public_key as that contains the DH parameters only.
    def compute_key(pub_bn)
      # FIXME: This is constructing an X.509 SubjectPublicKeyInfo and is very
      # inefficient
      obj = OpenSSL::ASN1.Sequence([
        OpenSSL::ASN1.Sequence([
          OpenSSL::ASN1.ObjectId("dhKeyAgreement"),
          OpenSSL::ASN1.Sequence([
            OpenSSL::ASN1.Integer(p),
            OpenSSL::ASN1.Integer(g),
          ]),
        ]),
        OpenSSL::ASN1.BitString(OpenSSL::ASN1.Integer(pub_bn).to_der),
      ])
      derive(OpenSSL::PKey.read(obj.to_der))
    end

    # :call-seq:
    #    dh.generate_key! -> self
    #
    # Generates a private and public key unless a private key already exists.
    # If this DH instance was generated from public \DH parameters (e.g. by
    # encoding the result of DH#public_key), then this method needs to be
    # called first in order to generate the per-session keys before performing
    # the actual key exchange.
    #
    # <b>Deprecated in version 3.0</b>. This method is incompatible with
    # OpenSSL 3.0.0 or later.
    #
    # See also OpenSSL::PKey.generate_key.
    #
    # Example:
    #   # DEPRECATED USAGE: This will not work on OpenSSL 3.0 or later
    #   dh0 = OpenSSL::PKey::DH.new(2048)
    #   dh = dh0.public_key # #public_key only copies the DH parameters (contrary to the name)
    #   dh.generate_key!
    #   puts dh.private? # => true
    #   puts dh0.pub_key == dh.pub_key #=> false
    #
    #   # With OpenSSL::PKey.generate_key
    #   dh0 = OpenSSL::PKey::DH.new(2048)
    #   dh = OpenSSL::PKey.generate_key(dh0)
    #   puts dh0.pub_key == dh.pub_key #=> false
    def generate_key!
      if OpenSSL::OPENSSL_VERSION_NUMBER >= 0x30000000
        raise DHError, "OpenSSL::PKey::DH is immutable on OpenSSL 3.0; " \
        "use OpenSSL::PKey.generate_key instead"
      end

      unless priv_key
        tmp = OpenSSL::PKey.generate_key(self)
        set_key(tmp.pub_key, tmp.priv_key)
      end
      self
    end

    class << self
      # :call-seq:
      #    DH.generate(size, generator = 2) -> dh
      #
      # Creates a new DH instance from scratch by generating random parameters
      # and a key pair.
      #
      # See also OpenSSL::PKey.generate_parameters and
      # OpenSSL::PKey.generate_key.
      #
      # +size+::
      #   The desired key size in bits.
      # +generator+::
      #   The generator.
      def generate(size, generator = 2, &blk)
        dhparams = OpenSSL::PKey.generate_parameters("DH", {
          "dh_paramgen_prime_len" => size,
          "dh_paramgen_generator" => generator,
        }, &blk)
        OpenSSL::PKey.generate_key(dhparams)
      end

      # Handle DH.new(size, generator) form here; new(str) and new() forms
      # are handled by #initialize
      def new(*args, &blk) # :nodoc:
        if args[0].is_a?(Integer)
          generate(*args, &blk)
        else
          super
        end
      end
    end
  end

  class DSA
    include OpenSSL::Marshal

    # :call-seq:
    #    dsa.public_key -> dsanew
    #
    # Returns a new DSA instance that carries just the \DSA parameters and the
    # public key.
    #
    # This method is provided for backwards compatibility. In most cases, there
    # is no need to call this method.
    #
    # For the purpose of serializing the public key, to PEM or DER encoding of
    # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and
    # PKey#public_to_der.
    def public_key
      OpenSSL::PKey.read(public_to_der)
    end

    class << self
      # :call-seq:
      #    DSA.generate(size) -> dsa
      #
      # Creates a new DSA instance by generating a private/public key pair
      # from scratch.
      #
      # See also OpenSSL::PKey.generate_parameters and
      # OpenSSL::PKey.generate_key.
      #
      # +size+::
      #   The desired key size in bits.
      def generate(size, &blk)
        # FIPS 186-4 specifies four (L,N) pairs: (1024,160), (2048,224),
        # (2048,256), and (3072,256).
        #
        # q size is derived here with compatibility with
        # DSA_generator_parameters_ex() which previous versions of ruby/openssl
        # used to call.
        qsize = size >= 2048 ? 256 : 160
        dsaparams = OpenSSL::PKey.generate_parameters("DSA", {
          "dsa_paramgen_bits" => size,
          "dsa_paramgen_q_bits" => qsize,
        }, &blk)
        OpenSSL::PKey.generate_key(dsaparams)
      end

      # Handle DSA.new(size) form here; new(str) and new() forms
      # are handled by #initialize
      def new(*args, &blk) # :nodoc:
        if args[0].is_a?(Integer)
          generate(*args, &blk)
        else
          super
        end
      end
    end

    # :call-seq:
    #    dsa.syssign(string) -> string
    #
    # Computes and returns the \DSA signature of +string+, where +string+ is
    # expected to be an already-computed message digest of the original input
    # data. The signature is issued using the private key of this DSA instance.
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead.
    #
    # +string+::
    #   A message digest of the original input data to be signed.
    #
    # Example:
    #   dsa = OpenSSL::PKey::DSA.new(2048)
    #   doc = "Sign me"
    #   digest = OpenSSL::Digest.digest('SHA1', doc)
    #
    #   # With legacy #syssign and #sysverify:
    #   sig = dsa.syssign(digest)
    #   p dsa.sysverify(digest, sig) #=> true
    #
    #   # With #sign_raw and #verify_raw:
    #   sig = dsa.sign_raw(nil, digest)
    #   p dsa.verify_raw(nil, sig, digest) #=> true
    def syssign(string)
      q or raise OpenSSL::PKey::DSAError, "incomplete DSA"
      private? or raise OpenSSL::PKey::DSAError, "Private DSA key needed!"
      begin
        sign_raw(nil, string)
      rescue OpenSSL::PKey::PKeyError
        raise OpenSSL::PKey::DSAError, $!.message
      end
    end

    # :call-seq:
    #    dsa.sysverify(digest, sig) -> true | false
    #
    # Verifies whether the signature is valid given the message digest input.
    # It does so by validating +sig+ using the public key of this DSA instance.
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead.
    #
    # +digest+::
    #   A message digest of the original input data to be signed.
    # +sig+::
    #   A \DSA signature value.
    def sysverify(digest, sig)
      verify_raw(nil, sig, digest)
    rescue OpenSSL::PKey::PKeyError
      raise OpenSSL::PKey::DSAError, $!.message
    end
  end

  if defined?(EC)
  class EC
    include OpenSSL::Marshal

    # :call-seq:
    #    key.dsa_sign_asn1(data) -> String
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead.
    def dsa_sign_asn1(data)
      sign_raw(nil, data)
    rescue OpenSSL::PKey::PKeyError
      raise OpenSSL::PKey::ECError, $!.message
    end

    # :call-seq:
    #    key.dsa_verify_asn1(data, sig) -> true | false
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead.
    def dsa_verify_asn1(data, sig)
      verify_raw(nil, sig, data)
    rescue OpenSSL::PKey::PKeyError
      raise OpenSSL::PKey::ECError, $!.message
    end

    # :call-seq:
    #    ec.dh_compute_key(pubkey) -> string
    #
    # Derives a shared secret by ECDH. _pubkey_ must be an instance of
    # OpenSSL::PKey::EC::Point and must belong to the same group.
    #
    # This method is provided for backwards compatibility, and calls #derive
    # internally.
    def dh_compute_key(pubkey)
      obj = OpenSSL::ASN1.Sequence([
        OpenSSL::ASN1.Sequence([
          OpenSSL::ASN1.ObjectId("id-ecPublicKey"),
          group.to_der,
        ]),
        OpenSSL::ASN1.BitString(pubkey.to_octet_string(:uncompressed)),
      ])
      derive(OpenSSL::PKey.read(obj.to_der))
    end
  end

  class EC::Point
    # :call-seq:
    #    point.to_bn([conversion_form]) -> OpenSSL::BN
    #
    # Returns the octet string representation of the EC point as an instance of
    # OpenSSL::BN.
    #
    # If _conversion_form_ is not given, the _point_conversion_form_ attribute
    # set to the group is used.
    #
    # See #to_octet_string for more information.
    def to_bn(conversion_form = group.point_conversion_form)
      OpenSSL::BN.new(to_octet_string(conversion_form), 2)
    end
  end
  end

  class RSA
    include OpenSSL::Marshal

    # :call-seq:
    #    rsa.public_key -> rsanew
    #
    # Returns a new RSA instance that carries just the public key components.
    #
    # This method is provided for backwards compatibility. In most cases, there
    # is no need to call this method.
    #
    # For the purpose of serializing the public key, to PEM or DER encoding of
    # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and
    # PKey#public_to_der.
    def public_key
      OpenSSL::PKey.read(public_to_der)
    end

    class << self
      # :call-seq:
      #    RSA.generate(size, exponent = 65537) -> RSA
      #
      # Generates an \RSA keypair.
      #
      # See also OpenSSL::PKey.generate_key.
      #
      # +size+::
      #   The desired key size in bits.
      # +exponent+::
      #   An odd Integer, normally 3, 17, or 65537.
      def generate(size, exp = 0x10001, &blk)
        OpenSSL::PKey.generate_key("RSA", {
          "rsa_keygen_bits" => size,
          "rsa_keygen_pubexp" => exp,
        }, &blk)
      end

      # Handle RSA.new(size, exponent) form here; new(str) and new() forms
      # are handled by #initialize
      def new(*args, &blk) # :nodoc:
        if args[0].is_a?(Integer)
          generate(*args, &blk)
        else
          super
        end
      end
    end

    # :call-seq:
    #    rsa.private_encrypt(string)          -> String
    #    rsa.private_encrypt(string, padding) -> String
    #
    # Encrypt +string+ with the private key.  +padding+ defaults to
    # PKCS1_PADDING, which is known to be insecure but is kept for backwards
    # compatibility. The encrypted string output can be decrypted using
    # #public_decrypt.
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and
    # PKey::PKey#verify_recover instead.
    def private_encrypt(string, padding = PKCS1_PADDING)
      n or raise OpenSSL::PKey::RSAError, "incomplete RSA"
      private? or raise OpenSSL::PKey::RSAError, "private key needed."
      begin
        sign_raw(nil, string, {
          "rsa_padding_mode" => translate_padding_mode(padding),
        })
      rescue OpenSSL::PKey::PKeyError
        raise OpenSSL::PKey::RSAError, $!.message
      end
    end

    # :call-seq:
    #    rsa.public_decrypt(string)          -> String
    #    rsa.public_decrypt(string, padding) -> String
    #
    # Decrypt +string+, which has been encrypted with the private key, with the
    # public key.  +padding+ defaults to PKCS1_PADDING which is known to be
    # insecure but is kept for backwards compatibility.
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and
    # PKey::PKey#verify_recover instead.
    def public_decrypt(string, padding = PKCS1_PADDING)
      n or raise OpenSSL::PKey::RSAError, "incomplete RSA"
      begin
        verify_recover(nil, string, {
          "rsa_padding_mode" => translate_padding_mode(padding),
        })
      rescue OpenSSL::PKey::PKeyError
        raise OpenSSL::PKey::RSAError, $!.message
      end
    end

    # :call-seq:
    #    rsa.public_encrypt(string)          -> String
    #    rsa.public_encrypt(string, padding) -> String
    #
    # Encrypt +string+ with the public key.  +padding+ defaults to
    # PKCS1_PADDING, which is known to be insecure but is kept for backwards
    # compatibility. The encrypted string output can be decrypted using
    # #private_decrypt.
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead.
    def public_encrypt(data, padding = PKCS1_PADDING)
      n or raise OpenSSL::PKey::RSAError, "incomplete RSA"
      begin
        encrypt(data, {
          "rsa_padding_mode" => translate_padding_mode(padding),
        })
      rescue OpenSSL::PKey::PKeyError
        raise OpenSSL::PKey::RSAError, $!.message
      end
    end

    # :call-seq:
    #    rsa.private_decrypt(string)          -> String
    #    rsa.private_decrypt(string, padding) -> String
    #
    # Decrypt +string+, which has been encrypted with the public key, with the
    # private key. +padding+ defaults to PKCS1_PADDING, which is known to be
    # insecure but is kept for backwards compatibility.
    #
    # <b>Deprecated in version 3.0</b>.
    # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead.
    def private_decrypt(data, padding = PKCS1_PADDING)
      n or raise OpenSSL::PKey::RSAError, "incomplete RSA"
      private? or raise OpenSSL::PKey::RSAError, "private key needed."
      begin
        decrypt(data, {
          "rsa_padding_mode" => translate_padding_mode(padding),
        })
      rescue OpenSSL::PKey::PKeyError
        raise OpenSSL::PKey::RSAError, $!.message
      end
    end

    PKCS1_PADDING = 1
    SSLV23_PADDING = 2
    NO_PADDING = 3
    PKCS1_OAEP_PADDING = 4

    private def translate_padding_mode(num)
      case num
      when PKCS1_PADDING
        "pkcs1"
      when SSLV23_PADDING
        "sslv23"
      when NO_PADDING
        "none"
      when PKCS1_OAEP_PADDING
        "oaep"
      else
        raise OpenSSL::PKey::PKeyError, "unsupported padding mode"
      end
    end
  end
end
PK*J[	�P�	�	share/ruby/openssl/hmac.rbnu�[���# frozen_string_literal: true

module OpenSSL
  class HMAC
    # Securely compare with another HMAC instance in constant time.
    def ==(other)
      return false unless HMAC === other
      return false unless self.digest.bytesize == other.digest.bytesize

      OpenSSL.fixed_length_secure_compare(self.digest, other.digest)
    end

    # :call-seq:
    #    hmac.base64digest -> string
    #
    # Returns the authentication code an a Base64-encoded string.
    def base64digest
      [digest].pack("m0")
    end

    class << self
      # :call-seq:
      #    HMAC.digest(digest, key, data) -> aString
      #
      # Returns the authentication code as a binary string. The _digest_ parameter
      # specifies the digest algorithm to use. This may be a String representing
      # the algorithm name or an instance of OpenSSL::Digest.
      #
      # === Example
      #  key = 'key'
      #  data = 'The quick brown fox jumps over the lazy dog'
      #
      #  hmac = OpenSSL::HMAC.digest('SHA1', key, data)
      #  #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9"
      def digest(digest, key, data)
        hmac = new(key, digest)
        hmac << data
        hmac.digest
      end

      # :call-seq:
      #    HMAC.hexdigest(digest, key, data) -> aString
      #
      # Returns the authentication code as a hex-encoded string. The _digest_
      # parameter specifies the digest algorithm to use. This may be a String
      # representing the algorithm name or an instance of OpenSSL::Digest.
      #
      # === Example
      #  key = 'key'
      #  data = 'The quick brown fox jumps over the lazy dog'
      #
      #  hmac = OpenSSL::HMAC.hexdigest('SHA1', key, data)
      #  #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"
      def hexdigest(digest, key, data)
        hmac = new(key, digest)
        hmac << data
        hmac.hexdigest
      end

      # :call-seq:
      #    HMAC.base64digest(digest, key, data) -> aString
      #
      # Returns the authentication code as a Base64-encoded string. The _digest_
      # parameter specifies the digest algorithm to use. This may be a String
      # representing the algorithm name or an instance of OpenSSL::Digest.
      #
      # === Example
      #  key = 'key'
      #  data = 'The quick brown fox jumps over the lazy dog'
      #
      #  hmac = OpenSSL::HMAC.base64digest('SHA1', key, data)
      #  #=> "3nybhbi3iqa8ino29wqQcBydtNk="
      def base64digest(digest, key, data)
        [digest(digest, key, data)].pack("m0")
      end
    end
  end
end
PK*J[�ORFFshare/ruby/openssl/version.rbnu�[���# frozen_string_literal: true

module OpenSSL
  VERSION = "3.3.0"
end
PK*J[�NRjLjLshare/ruby/openssl/ssl.rbnu�[���# frozen_string_literal: true
=begin
= Info
  'OpenSSL for Ruby 2' project
  Copyright (C) 2001 GOTOU YUUZOU <gotoyuzo@notwork.org>
  All rights reserved.

= Licence
  This program is licensed under the same licence as Ruby.
  (See the file 'COPYING'.)
=end

require "openssl/buffering"

if defined?(OpenSSL::SSL)

require "io/nonblock"
require "ipaddr"
require "socket"

module OpenSSL
  module SSL
    class SSLContext
      DEFAULT_PARAMS = { # :nodoc:
        :verify_mode => OpenSSL::SSL::VERIFY_PEER,
        :verify_hostname => true,
        :options => -> {
          opts = OpenSSL::SSL::OP_ALL
          opts &= ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS
          opts |= OpenSSL::SSL::OP_NO_COMPRESSION
          opts
        }.call
      }

      if defined?(OpenSSL::PKey::DH)
        DH_ffdhe2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg==
-----END DH PARAMETERS-----
        _end_of_pem_
        private_constant :DH_ffdhe2048

        DEFAULT_TMP_DH_CALLBACK = lambda { |ctx, is_export, keylen| # :nodoc:
          warn "using default DH parameters." if $VERBOSE
          DH_ffdhe2048
        }
      end

      if !(OpenSSL::OPENSSL_VERSION.start_with?("OpenSSL") &&
           OpenSSL::OPENSSL_VERSION_NUMBER >= 0x10100000)
        DEFAULT_PARAMS.merge!(
          min_version: OpenSSL::SSL::TLS1_VERSION,
          ciphers: %w{
            ECDHE-ECDSA-AES128-GCM-SHA256
            ECDHE-RSA-AES128-GCM-SHA256
            ECDHE-ECDSA-AES256-GCM-SHA384
            ECDHE-RSA-AES256-GCM-SHA384
            DHE-RSA-AES128-GCM-SHA256
            DHE-DSS-AES128-GCM-SHA256
            DHE-RSA-AES256-GCM-SHA384
            DHE-DSS-AES256-GCM-SHA384
            ECDHE-ECDSA-AES128-SHA256
            ECDHE-RSA-AES128-SHA256
            ECDHE-ECDSA-AES128-SHA
            ECDHE-RSA-AES128-SHA
            ECDHE-ECDSA-AES256-SHA384
            ECDHE-RSA-AES256-SHA384
            ECDHE-ECDSA-AES256-SHA
            ECDHE-RSA-AES256-SHA
            DHE-RSA-AES128-SHA256
            DHE-RSA-AES256-SHA256
            DHE-RSA-AES128-SHA
            DHE-RSA-AES256-SHA
            DHE-DSS-AES128-SHA256
            DHE-DSS-AES256-SHA256
            DHE-DSS-AES128-SHA
            DHE-DSS-AES256-SHA
            AES128-GCM-SHA256
            AES256-GCM-SHA384
            AES128-SHA256
            AES256-SHA256
            AES128-SHA
            AES256-SHA
          }.join(":"),
        )
      end

      DEFAULT_CERT_STORE = OpenSSL::X509::Store.new # :nodoc:
      DEFAULT_CERT_STORE.set_default_paths
      DEFAULT_CERT_STORE.flags = OpenSSL::X509::V_FLAG_CRL_CHECK_ALL

      # A callback invoked when DH parameters are required for ephemeral DH key
      # exchange.
      #
      # The callback is invoked with the SSLSocket, a
      # flag indicating the use of an export cipher and the keylength
      # required.
      #
      # The callback must return an OpenSSL::PKey::DH instance of the correct
      # key length.
      #
      # <b>Deprecated in version 3.0.</b> Use #tmp_dh= instead.
      attr_accessor :tmp_dh_callback

      # A callback invoked at connect time to distinguish between multiple
      # server names.
      #
      # The callback is invoked with an SSLSocket and a server name.  The
      # callback must return an SSLContext for the server name or nil.
      attr_accessor :servername_cb

      # call-seq:
      #    SSLContext.new           -> ctx
      #    SSLContext.new(:TLSv1)   -> ctx
      #    SSLContext.new("SSLv23") -> ctx
      #
      # Creates a new SSL context.
      #
      # If an argument is given, #ssl_version= is called with the value. Note
      # that this form is deprecated. New applications should use #min_version=
      # and #max_version= as necessary.
      def initialize(version = nil)
        self.ssl_version = version if version
        self.verify_mode = OpenSSL::SSL::VERIFY_NONE
        self.verify_hostname = false
      end

      ##
      # call-seq:
      #   ctx.set_params(params = {}) -> params
      #
      # Sets saner defaults optimized for the use with HTTP-like protocols.
      #
      # If a Hash _params_ is given, the parameters are overridden with it.
      # The keys in _params_ must be assignment methods on SSLContext.
      #
      # If the verify_mode is not VERIFY_NONE and ca_file, ca_path and
      # cert_store are not set then the system default certificate store is
      # used.
      def set_params(params={})
        params = DEFAULT_PARAMS.merge(params)
        self.options |= params.delete(:options) # set before min_version/max_version
        params.each{|name, value| self.__send__("#{name}=", value) }
        if self.verify_mode != OpenSSL::SSL::VERIFY_NONE
          unless self.ca_file or self.ca_path or self.cert_store
            self.cert_store = DEFAULT_CERT_STORE
          end
        end
        return params
      end

      # call-seq:
      #    ctx.min_version = OpenSSL::SSL::TLS1_2_VERSION
      #    ctx.min_version = :TLS1_2
      #    ctx.min_version = nil
      #
      # Sets the lower bound on the supported SSL/TLS protocol version. The
      # version may be specified by an integer constant named
      # OpenSSL::SSL::*_VERSION, a Symbol, or +nil+ which means "any version".
      #
      # Be careful that you don't overwrite OpenSSL::SSL::OP_NO_{SSL,TLS}v*
      # options by #options= once you have called #min_version= or
      # #max_version=.
      #
      # === Example
      #   ctx = OpenSSL::SSL::SSLContext.new
      #   ctx.min_version = OpenSSL::SSL::TLS1_1_VERSION
      #   ctx.max_version = OpenSSL::SSL::TLS1_2_VERSION
      #
      #   sock = OpenSSL::SSL::SSLSocket.new(tcp_sock, ctx)
      #   sock.connect # Initiates a connection using either TLS 1.1 or TLS 1.2
      def min_version=(version)
        set_minmax_proto_version(version, @max_proto_version ||= nil)
        @min_proto_version = version
      end

      # call-seq:
      #    ctx.max_version = OpenSSL::SSL::TLS1_2_VERSION
      #    ctx.max_version = :TLS1_2
      #    ctx.max_version = nil
      #
      # Sets the upper bound of the supported SSL/TLS protocol version. See
      # #min_version= for the possible values.
      def max_version=(version)
        set_minmax_proto_version(@min_proto_version ||= nil, version)
        @max_proto_version = version
      end

      # call-seq:
      #    ctx.ssl_version = :TLSv1
      #    ctx.ssl_version = "SSLv23"
      #
      # Sets the SSL/TLS protocol version for the context. This forces
      # connections to use only the specified protocol version. This is
      # deprecated and only provided for backwards compatibility. Use
      # #min_version= and #max_version= instead.
      #
      # === History
      # As the name hints, this used to call the SSL_CTX_set_ssl_version()
      # function which sets the SSL method used for connections created from
      # the context. As of Ruby/OpenSSL 2.1, this accessor method is
      # implemented to call #min_version= and #max_version= instead.
      def ssl_version=(meth)
        meth = meth.to_s if meth.is_a?(Symbol)
        if /(?<type>_client|_server)\z/ =~ meth
          meth = $`
          if $VERBOSE
            warn "#{caller(1, 1)[0]}: method type #{type.inspect} is ignored"
          end
        end
        version = METHODS_MAP[meth.intern] or
          raise ArgumentError, "unknown SSL method `%s'" % meth
        set_minmax_proto_version(version, version)
        @min_proto_version = @max_proto_version = version
      end

      METHODS_MAP = {
        SSLv23: 0,
        SSLv2: OpenSSL::SSL::SSL2_VERSION,
        SSLv3: OpenSSL::SSL::SSL3_VERSION,
        TLSv1: OpenSSL::SSL::TLS1_VERSION,
        TLSv1_1: OpenSSL::SSL::TLS1_1_VERSION,
        TLSv1_2: OpenSSL::SSL::TLS1_2_VERSION,
      }.freeze
      private_constant :METHODS_MAP

      # The list of available SSL/TLS methods. This constant is only provided
      # for backwards compatibility.
      METHODS = METHODS_MAP.flat_map { |name,|
        [name, :"#{name}_client", :"#{name}_server"]
      }.freeze
      deprecate_constant :METHODS
    end

    module SocketForwarder
      # The file descriptor for the socket.
      def fileno
        to_io.fileno
      end

      def addr
        to_io.addr
      end

      def peeraddr
        to_io.peeraddr
      end

      def local_address
        to_io.local_address
      end

      def remote_address
        to_io.remote_address
      end

      def setsockopt(level, optname, optval)
        to_io.setsockopt(level, optname, optval)
      end

      def getsockopt(level, optname)
        to_io.getsockopt(level, optname)
      end

      def fcntl(*args)
        to_io.fcntl(*args)
      end

      def closed?
        to_io.closed?
      end

      def do_not_reverse_lookup=(flag)
        to_io.do_not_reverse_lookup = flag
      end

      def close_on_exec=(value)
        to_io.close_on_exec = value
      end

      def close_on_exec?
        to_io.close_on_exec?
      end

      def wait(*args)
        to_io.wait(*args)
      end

      def wait_readable(*args)
        to_io.wait_readable(*args)
      end

      def wait_writable(*args)
        to_io.wait_writable(*args)
      end

      if IO.method_defined?(:timeout)
        def timeout
          to_io.timeout
        end

        def timeout=(value)
          to_io.timeout=(value)
        end
      end
    end

    def verify_certificate_identity(cert, hostname)
      should_verify_common_name = true
      cert.extensions.each{|ext|
        next if ext.oid != "subjectAltName"
        ostr = OpenSSL::ASN1.decode(ext.to_der).value.last
        sequence = OpenSSL::ASN1.decode(ostr.value)
        sequence.value.each{|san|
          case san.tag
          when 2 # dNSName in GeneralName (RFC5280)
            should_verify_common_name = false
            return true if verify_hostname(hostname, san.value)
          when 7 # iPAddress in GeneralName (RFC5280)
            should_verify_common_name = false
            if san.value.size == 4 || san.value.size == 16
              begin
                return true if san.value == IPAddr.new(hostname).hton
              rescue IPAddr::InvalidAddressError
              end
            end
          end
        }
      }
      if should_verify_common_name
        cert.subject.to_a.each{|oid, value|
          if oid == "CN"
            return true if verify_hostname(hostname, value)
          end
        }
      end
      return false
    end
    module_function :verify_certificate_identity

    def verify_hostname(hostname, san) # :nodoc:
      # RFC 5280, IA5String is limited to the set of ASCII characters
      return false unless san.ascii_only?
      return false unless hostname.ascii_only?

      # See RFC 6125, section 6.4.1
      # Matching is case-insensitive.
      san_parts = san.downcase.split(".")

      # TODO: this behavior should probably be more strict
      return san == hostname if san_parts.size < 2

      # Matching is case-insensitive.
      host_parts = hostname.downcase.split(".")

      # RFC 6125, section 6.4.3, subitem 2.
      # If the wildcard character is the only character of the left-most
      # label in the presented identifier, the client SHOULD NOT compare
      # against anything but the left-most label of the reference
      # identifier (e.g., *.example.com would match foo.example.com but
      # not bar.foo.example.com or example.com).
      return false unless san_parts.size == host_parts.size

      # RFC 6125, section 6.4.3, subitem 1.
      # The client SHOULD NOT attempt to match a presented identifier in
      # which the wildcard character comprises a label other than the
      # left-most label (e.g., do not match bar.*.example.net).
      return false unless verify_wildcard(host_parts.shift, san_parts.shift)

      san_parts.join(".") == host_parts.join(".")
    end
    module_function :verify_hostname

    def verify_wildcard(domain_component, san_component) # :nodoc:
      parts = san_component.split("*", -1)

      return false if parts.size > 2
      return san_component == domain_component if parts.size == 1

      # RFC 6125, section 6.4.3, subitem 3.
      # The client SHOULD NOT attempt to match a presented identifier
      # where the wildcard character is embedded within an A-label or
      # U-label of an internationalized domain name.
      return false if domain_component.start_with?("xn--") && san_component != "*"

      parts[0].length + parts[1].length < domain_component.length &&
      domain_component.start_with?(parts[0]) &&
      domain_component.end_with?(parts[1])
    end
    module_function :verify_wildcard

    class SSLSocket
      include Buffering
      include SocketForwarder

      attr_reader :hostname

      # The underlying IO object.
      attr_reader :io
      alias :to_io :io

      # The SSLContext object used in this connection.
      attr_reader :context

      # Whether to close the underlying socket as well, when the SSL/TLS
      # connection is shut down. This defaults to +false+.
      attr_accessor :sync_close

      # call-seq:
      #    ssl.sysclose => nil
      #
      # Sends "close notify" to the peer and tries to shut down the SSL
      # connection gracefully.
      #
      # If sync_close is set to +true+, the underlying IO is also closed.
      def sysclose
        return if closed?
        stop
        io.close if sync_close
      end

      # call-seq:
      #   ssl.post_connection_check(hostname) -> true
      #
      # Perform hostname verification following RFC 6125.
      #
      # This method MUST be called after calling #connect to ensure that the
      # hostname of a remote peer has been verified.
      def post_connection_check(hostname)
        if peer_cert.nil?
          msg = "Peer verification enabled, but no certificate received."
          if using_anon_cipher?
            msg += " Anonymous cipher suite #{cipher[0]} was negotiated. " \
                   "Anonymous suites must be disabled to use peer verification."
          end
          raise SSLError, msg
        end

        unless OpenSSL::SSL.verify_certificate_identity(peer_cert, hostname)
          raise SSLError, "hostname \"#{hostname}\" does not match the server certificate"
        end
        return true
      end

      # call-seq:
      #   ssl.session -> aSession
      #
      # Returns the SSLSession object currently used, or nil if the session is
      # not established.
      def session
        SSL::Session.new(self)
      rescue SSL::Session::SessionError
        nil
      end

      # Close the stream for reading.
      # This method is ignored by OpenSSL as there is no reasonable way to
      # implement it, but exists for compatibility with IO.
      def close_read
        # Unsupported and ignored.
        # Just don't read any more.
      end

      # Closes the stream for writing. The behavior of this method depends on
      # the version of OpenSSL and the TLS protocol in use.
      #
      # - Sends a 'close_notify' alert to the peer.
      # - Does not wait for the peer's 'close_notify' alert in response.
      #
      # In TLS 1.2 and earlier:
      # - On receipt of a 'close_notify' alert, responds with a 'close_notify'
      #   alert of its own and close down the connection immediately,
      #   discarding any pending writes.
      #
      # Therefore, on TLS 1.2, this method will cause the connection to be
      # completely shut down. On TLS 1.3, the connection will remain open for
      # reading only.
      def close_write
        stop
      end

      private

      def using_anon_cipher?
        ctx = OpenSSL::SSL::SSLContext.new
        ctx.ciphers = "aNULL"
        ctx.ciphers.include?(cipher)
      end

      def client_cert_cb
        @context.client_cert_cb
      end

      def tmp_dh_callback
        @context.tmp_dh_callback || OpenSSL::SSL::SSLContext::DEFAULT_TMP_DH_CALLBACK
      end

      def session_new_cb
        @context.session_new_cb
      end

      def session_get_cb
        @context.session_get_cb
      end

      class << self

        # call-seq:
        #   open(remote_host, remote_port, local_host=nil, local_port=nil, context: nil)
        #
        # Creates a new instance of SSLSocket.
        # _remote\_host_ and _remote\_port_ are used to open TCPSocket.
        # If _local\_host_ and _local\_port_ are specified,
        # then those parameters are used on the local end to establish the connection.
        # If _context_ is provided,
        # the SSL Sockets initial params will be taken from the context.
        #
        # === Examples
        #
        #   sock = OpenSSL::SSL::SSLSocket.open('localhost', 443)
        #   sock.connect # Initiates a connection to localhost:443
        #
        # with SSLContext:
        #
        #   ctx = OpenSSL::SSL::SSLContext.new
        #   sock = OpenSSL::SSL::SSLSocket.open('localhost', 443, context: ctx)
        #   sock.connect # Initiates a connection to localhost:443 with SSLContext
        def open(remote_host, remote_port, local_host=nil, local_port=nil, context: nil)
          sock = ::TCPSocket.open(remote_host, remote_port, local_host, local_port)
          if context.nil?
            return OpenSSL::SSL::SSLSocket.new(sock)
          else
            return OpenSSL::SSL::SSLSocket.new(sock, context)
          end
        end
      end
    end

    ##
    # SSLServer represents a TCP/IP server socket with Secure Sockets Layer.
    class SSLServer
      include SocketForwarder
      # When true then #accept works exactly the same as TCPServer#accept
      attr_accessor :start_immediately

      # Creates a new instance of SSLServer.
      # * _srv_ is an instance of TCPServer.
      # * _ctx_ is an instance of OpenSSL::SSL::SSLContext.
      def initialize(svr, ctx)
        @svr = svr
        @ctx = ctx
        unless ctx.session_id_context
          # see #6137 - session id may not exceed 32 bytes
          prng = ::Random.new($0.hash)
          session_id = prng.bytes(16).unpack1('H*')
          @ctx.session_id_context = session_id
        end
        @start_immediately = true
      end

      # Returns the TCPServer passed to the SSLServer when initialized.
      def to_io
        @svr
      end

      # See TCPServer#listen for details.
      def listen(backlog=Socket::SOMAXCONN)
        @svr.listen(backlog)
      end

      # See BasicSocket#shutdown for details.
      def shutdown(how=Socket::SHUT_RDWR)
        @svr.shutdown(how)
      end

      # Works similar to TCPServer#accept.
      def accept
        # Socket#accept returns [socket, addrinfo].
        # TCPServer#accept returns a socket.
        # The following comma strips addrinfo.
        sock, = @svr.accept
        begin
          ssl = OpenSSL::SSL::SSLSocket.new(sock, @ctx)
          ssl.sync_close = true
          ssl.accept if @start_immediately
          ssl
        rescue Exception => ex
          if ssl
            ssl.close
          else
            sock.close
          end
          raise ex
        end
      end

      # See IO#close for details.
      def close
        @svr.close
      end
    end
  end
end

end
PK*J[新�88share/ruby/openssl/marshal.rbnu�[���# frozen_string_literal: true
#--
# = Ruby-space definitions to add DER (de)serialization to classes
#
# = Info
# 'OpenSSL for Ruby 2' project
# Copyright (C) 2002  Michal Rokos <m.rokos@sh.cvut.cz>
# All rights reserved.
#
# = Licence
# This program is licensed under the same licence as Ruby.
# (See the file 'COPYING'.)
#++
module OpenSSL
  module Marshal
    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      def _load(string)
        new(string)
      end
    end

    def _dump(_level)
      to_der
    end
  end
end
PK*J[Kk�,,share/ruby/openssl/digest.rbnu�[���# frozen_string_literal: true
#--
# = Ruby-space predefined Digest subclasses
#
# = Info
# 'OpenSSL for Ruby 2' project
# Copyright (C) 2002  Michal Rokos <m.rokos@sh.cvut.cz>
# All rights reserved.
#
# = Licence
# This program is licensed under the same licence as Ruby.
# (See the file 'COPYING'.)
#++

module OpenSSL
  class Digest

    # Return the hash value computed with _name_ Digest. _name_ is either the
    # long name or short name of a supported digest algorithm.
    #
    # === Example
    #
    #   OpenSSL::Digest.digest("SHA256", "abc")

    def self.digest(name, data)
      super(data, name)
    end

    %w(MD4 MD5 RIPEMD160 SHA1 SHA224 SHA256 SHA384 SHA512).each do |name|
      klass = Class.new(self) {
        define_method(:initialize, ->(data = nil) {super(name, data)})
      }

      singleton = (class << klass; self; end)

      singleton.class_eval{
        define_method(:digest) {|data| new.digest(data)}
        define_method(:hexdigest) {|data| new.hexdigest(data)}
      }

      const_set(name.tr('-', '_'), klass)
    end

    # Deprecated.
    #
    # This class is only provided for backwards compatibility.
    # Use OpenSSL::Digest instead.
    class Digest < Digest; end # :nodoc:
    deprecate_constant :Digest

  end # Digest

  # Returns a Digest subclass by _name_
  #
  #   require 'openssl'
  #
  #   OpenSSL::Digest("MD5")
  #   # => OpenSSL::Digest::MD5
  #
  #   Digest("Foo")
  #   # => NameError: wrong constant name Foo

  def Digest(name)
    OpenSSL::Digest.const_get(name)
  end

  module_function :Digest

end # OpenSSL
PK*J[����share/ruby/openssl/cipher.rbnu�[���# frozen_string_literal: true
#--
# = Ruby-space predefined Cipher subclasses
#
# = Info
# 'OpenSSL for Ruby 2' project
# Copyright (C) 2002  Michal Rokos <m.rokos@sh.cvut.cz>
# All rights reserved.
#
# = Licence
# This program is licensed under the same licence as Ruby.
# (See the file 'COPYING'.)
#++

module OpenSSL
  class Cipher
    %w(AES CAST5 BF DES IDEA RC2 RC4 RC5).each{|name|
      klass = Class.new(Cipher){
        define_method(:initialize){|*args|
          cipher_name = args.inject(name){|n, arg| "#{n}-#{arg}" }
          super(cipher_name.downcase)
        }
      }
      const_set(name, klass)
    }

    %w(128 192 256).each{|keylen|
      klass = Class.new(Cipher){
        define_method(:initialize){|mode = "CBC"|
          super("aes-#{keylen}-#{mode}".downcase)
        }
      }
      const_set("AES#{keylen}", klass)
    }

    # call-seq:
    #   cipher.random_key -> key
    #
    # Generate a random key with OpenSSL::Random.random_bytes and sets it to
    # the cipher, and returns it.
    #
    # You must call #encrypt or #decrypt before calling this method.
    def random_key
      str = OpenSSL::Random.random_bytes(self.key_len)
      self.key = str
    end

    # call-seq:
    #   cipher.random_iv -> iv
    #
    # Generate a random IV with OpenSSL::Random.random_bytes and sets it to the
    # cipher, and returns it.
    #
    # You must call #encrypt or #decrypt before calling this method.
    def random_iv
      str = OpenSSL::Random.random_bytes(self.iv_len)
      self.iv = str
    end

    # Deprecated.
    #
    # This class is only provided for backwards compatibility.
    # Use OpenSSL::Cipher.
    class Cipher < Cipher; end
    deprecate_constant :Cipher
  end # Cipher
end # OpenSSL
PK*J[���p-p-share/ruby/erb/compiler.rbnu�[���# frozen_string_literal: true
#--
# ERB::Compiler
#
# Compiles ERB templates into Ruby code; the compiled code produces the
# template result when evaluated. ERB::Compiler provides hooks to define how
# generated output is handled.
#
# Internally ERB does something like this to generate the code returned by
# ERB#src:
#
#   compiler = ERB::Compiler.new('<>')
#   compiler.pre_cmd    = ["_erbout=+''"]
#   compiler.put_cmd    = "_erbout.<<"
#   compiler.insert_cmd = "_erbout.<<"
#   compiler.post_cmd   = ["_erbout"]
#
#   code, enc = compiler.compile("Got <%= obj %>!\n")
#   puts code
#
# <i>Generates</i>:
#
#   #coding:UTF-8
#   _erbout=+''; _erbout.<< "Got ".freeze; _erbout.<<(( obj ).to_s); _erbout.<< "!\n".freeze; _erbout
#
# By default the output is sent to the print method.  For example:
#
#   compiler = ERB::Compiler.new('<>')
#   code, enc = compiler.compile("Got <%= obj %>!\n")
#   puts code
#
# <i>Generates</i>:
#
#   #coding:UTF-8
#   print "Got ".freeze; print(( obj ).to_s); print "!\n".freeze
#
# == Evaluation
#
# The compiled code can be used in any context where the names in the code
# correctly resolve. Using the last example, each of these print 'Got It!'
#
# Evaluate using a variable:
#
#   obj = 'It'
#   eval code
#
# Evaluate using an input:
#
#   mod = Module.new
#   mod.module_eval %{
#     def get(obj)
#       #{code}
#     end
#   }
#   extend mod
#   get('It')
#
# Evaluate using an accessor:
#
#   klass = Class.new Object
#   klass.class_eval %{
#     attr_accessor :obj
#     def initialize(obj)
#       @obj = obj
#     end
#     def get_it
#       #{code}
#     end
#   }
#   klass.new('It').get_it
#
# Good! See also ERB#def_method, ERB#def_module, and ERB#def_class.
class ERB::Compiler # :nodoc:
  class PercentLine # :nodoc:
    def initialize(str)
      @value = str
    end
    attr_reader :value
    alias :to_s :value
  end

  class Scanner # :nodoc:
    @scanner_map = {}
    class << self
      def register_scanner(klass, trim_mode, percent)
        @scanner_map[[trim_mode, percent]] = klass
      end
      alias :regist_scanner :register_scanner
    end

    def self.default_scanner=(klass)
      @default_scanner = klass
    end

    def self.make_scanner(src, trim_mode, percent)
      klass = @scanner_map.fetch([trim_mode, percent], @default_scanner)
      klass.new(src, trim_mode, percent)
    end

    DEFAULT_STAGS = %w(<%% <%= <%# <%).freeze
    DEFAULT_ETAGS = %w(%%> %>).freeze
    def initialize(src, trim_mode, percent)
      @src = src
      @stag = nil
      @stags = DEFAULT_STAGS
      @etags = DEFAULT_ETAGS
    end
    attr_accessor :stag
    attr_reader :stags, :etags

    def scan; end
  end

  class TrimScanner < Scanner # :nodoc:
    def initialize(src, trim_mode, percent)
      super
      @trim_mode = trim_mode
      @percent = percent
      if @trim_mode == '>'
        @scan_reg  = /(.*?)(%>\r?\n|#{(stags + etags).join('|')}|\n|\z)/m
        @scan_line = self.method(:trim_line1)
      elsif @trim_mode == '<>'
        @scan_reg  = /(.*?)(%>\r?\n|#{(stags + etags).join('|')}|\n|\z)/m
        @scan_line = self.method(:trim_line2)
      elsif @trim_mode == '-'
        @scan_reg  = /(.*?)(^[ \t]*<%\-|<%\-|-%>\r?\n|-%>|#{(stags + etags).join('|')}|\z)/m
        @scan_line = self.method(:explicit_trim_line)
      else
        @scan_reg  = /(.*?)(#{(stags + etags).join('|')}|\n|\z)/m
        @scan_line = self.method(:scan_line)
      end
    end

    def scan(&block)
      @stag = nil
      if @percent
        @src.each_line do |line|
          percent_line(line, &block)
        end
      else
        @scan_line.call(@src, &block)
      end
      nil
    end

    def percent_line(line, &block)
      if @stag || line[0] != ?%
        return @scan_line.call(line, &block)
      end

      line[0] = ''
      if line[0] == ?%
        @scan_line.call(line, &block)
      else
        yield(PercentLine.new(line.chomp))
      end
    end

    def scan_line(line)
      line.scan(@scan_reg) do |tokens|
        tokens.each do |token|
          next if token.empty?
          yield(token)
        end
      end
    end

    def trim_line1(line)
      line.scan(@scan_reg) do |tokens|
        tokens.each do |token|
          next if token.empty?
          if token == "%>\n" || token == "%>\r\n"
            yield('%>')
            yield(:cr)
          else
            yield(token)
          end
        end
      end
    end

    def trim_line2(line)
      head = nil
      line.scan(@scan_reg) do |tokens|
        tokens.each do |token|
          next if token.empty?
          head = token unless head
          if token == "%>\n" || token == "%>\r\n"
            yield('%>')
            if is_erb_stag?(head)
              yield(:cr)
            else
              yield("\n")
            end
            head = nil
          else
            yield(token)
            head = nil if token == "\n"
          end
        end
      end
    end

    def explicit_trim_line(line)
      line.scan(@scan_reg) do |tokens|
        tokens.each do |token|
          next if token.empty?
          if @stag.nil? && /[ \t]*<%-/ =~ token
            yield('<%')
          elsif @stag && (token == "-%>\n" || token == "-%>\r\n")
            yield('%>')
            yield(:cr)
          elsif @stag && token == '-%>'
            yield('%>')
          else
            yield(token)
          end
        end
      end
    end

    ERB_STAG = %w(<%= <%# <%)
    def is_erb_stag?(s)
      ERB_STAG.member?(s)
    end
  end

  Scanner.default_scanner = TrimScanner

  begin
    require 'strscan'
  rescue LoadError
  else
    class SimpleScanner < Scanner # :nodoc:
      def scan
        stag_reg = (stags == DEFAULT_STAGS) ? /(.*?)(<%[%=#]?|\z)/m : /(.*?)(#{stags.join('|')}|\z)/m
        etag_reg = (etags == DEFAULT_ETAGS) ? /(.*?)(%%?>|\z)/m : /(.*?)(#{etags.join('|')}|\z)/m
        scanner = StringScanner.new(@src)
        while ! scanner.eos?
          scanner.scan(@stag ? etag_reg : stag_reg)
          yield(scanner[1])
          yield(scanner[2])
        end
      end
    end
    Scanner.register_scanner(SimpleScanner, nil, false)

    class ExplicitScanner < Scanner # :nodoc:
      def scan
        stag_reg = /(.*?)(^[ \t]*<%-|<%-|#{stags.join('|')}|\z)/m
        etag_reg = /(.*?)(-%>|#{etags.join('|')}|\z)/m
        scanner = StringScanner.new(@src)
        while ! scanner.eos?
          scanner.scan(@stag ? etag_reg : stag_reg)
          yield(scanner[1])

          elem = scanner[2]
          if /[ \t]*<%-/ =~ elem
            yield('<%')
          elsif elem == '-%>'
            yield('%>')
            yield(:cr) if scanner.scan(/(\r?\n|\z)/)
          else
            yield(elem)
          end
        end
      end
    end
    Scanner.register_scanner(ExplicitScanner, '-', false)
  end

  class Buffer # :nodoc:
    def initialize(compiler, enc=nil, frozen=nil)
      @compiler = compiler
      @line = []
      @script = +''
      @script << "#coding:#{enc}\n" if enc
      @script << "#frozen-string-literal:#{frozen}\n" unless frozen.nil?
      @compiler.pre_cmd.each do |x|
        push(x)
      end
    end
    attr_reader :script

    def push(cmd)
      @line << cmd
    end

    def cr
      @script << (@line.join('; '))
      @line = []
      @script << "\n"
    end

    def close
      return unless @line
      @compiler.post_cmd.each do |x|
        push(x)
      end
      @script << (@line.join('; '))
      @line = nil
    end
  end

  def add_put_cmd(out, content)
    out.push("#{@put_cmd} #{content.dump}.freeze#{"\n" * content.count("\n")}")
  end

  def add_insert_cmd(out, content)
    out.push("#{@insert_cmd}((#{content}).to_s)")
  end

  # Compiles an ERB template into Ruby code.  Returns an array of the code
  # and encoding like ["code", Encoding].
  def compile(s)
    enc = s.encoding
    raise ArgumentError, "#{enc} is not ASCII compatible" if enc.dummy?
    s = s.b # see String#b
    magic_comment = detect_magic_comment(s, enc)
    out = Buffer.new(self, *magic_comment)

    self.content = +''
    scanner = make_scanner(s)
    scanner.scan do |token|
      next if token.nil?
      next if token == ''
      if scanner.stag.nil?
        compile_stag(token, out, scanner)
      else
        compile_etag(token, out, scanner)
      end
    end
    add_put_cmd(out, content) if content.size > 0
    out.close
    return out.script, *magic_comment
  end

  def compile_stag(stag, out, scanner)
    case stag
    when PercentLine
      add_put_cmd(out, content) if content.size > 0
      self.content = +''
      out.push(stag.to_s)
      out.cr
    when :cr
      out.cr
    when '<%', '<%=', '<%#'
      scanner.stag = stag
      add_put_cmd(out, content) if content.size > 0
      self.content = +''
    when "\n"
      content << "\n"
      add_put_cmd(out, content)
      self.content = +''
    when '<%%'
      content << '<%'
    else
      content << stag
    end
  end

  def compile_etag(etag, out, scanner)
    case etag
    when '%>'
      compile_content(scanner.stag, out)
      scanner.stag = nil
      self.content = +''
    when '%%>'
      content << '%>'
    else
      content << etag
    end
  end

  def compile_content(stag, out)
    case stag
    when '<%'
      if content[-1] == ?\n
        content.chop!
        out.push(content)
        out.cr
      else
        out.push(content)
      end
    when '<%='
      add_insert_cmd(out, content)
    when '<%#'
      out.push("\n" * content.count("\n")) # only adjust lineno
    end
  end

  def prepare_trim_mode(mode) # :nodoc:
    case mode
    when 1
      return [false, '>']
    when 2
      return [false, '<>']
    when 0, nil
      return [false, nil]
    when String
      unless mode.match?(/\A(%|-|>|<>){1,2}\z/)
        warn_invalid_trim_mode(mode, uplevel: 5)
      end

      perc = mode.include?('%')
      if mode.include?('-')
        return [perc, '-']
      elsif mode.include?('<>')
        return [perc, '<>']
      elsif mode.include?('>')
        return [perc, '>']
      else
        [perc, nil]
      end
    else
      warn_invalid_trim_mode(mode, uplevel: 5)
      return [false, nil]
    end
  end

  def make_scanner(src) # :nodoc:
    Scanner.make_scanner(src, @trim_mode, @percent)
  end

  # Construct a new compiler using the trim_mode. See ERB::new for available
  # trim modes.
  def initialize(trim_mode)
    @percent, @trim_mode = prepare_trim_mode(trim_mode)
    @put_cmd = 'print'
    @insert_cmd = @put_cmd
    @pre_cmd = []
    @post_cmd = []
  end
  attr_reader :percent, :trim_mode

  # The command to handle text that ends with a newline
  attr_accessor :put_cmd

  # The command to handle text that is inserted prior to a newline
  attr_accessor :insert_cmd

  # An array of commands prepended to compiled code
  attr_accessor :pre_cmd

  # An array of commands appended to compiled code
  attr_accessor :post_cmd

  private

  # A buffered text in #compile
  attr_accessor :content

  def detect_magic_comment(s, enc = nil)
    re = @percent ? /\G(?:<%#(.*)%>|%#(.*)\n)/ : /\G<%#(.*)%>/
    frozen = nil
    s.scan(re) do
      comment = $+
      comment = $1 if comment[/-\*-\s*([^\s].*?)\s*-\*-$/]
      case comment
      when %r"coding\s*[=:]\s*([[:alnum:]\-_]+)"
        enc = Encoding.find($1.sub(/-(?:mac|dos|unix)/i, ''))
      when %r"frozen[-_]string[-_]literal\s*:\s*([[:alnum:]]+)"
        frozen = $1
      end
    end
    return enc, frozen
  end

  def warn_invalid_trim_mode(mode, uplevel:)
    warn "Invalid ERB trim mode: #{mode.inspect} (trim_mode: nil, 0, 1, 2, or String composed of '%' and/or '-', '>', '<>')", uplevel: uplevel + 1
  end
end
PK*J[�I���share/ruby/erb/def_method.rbnu�[���# frozen_string_literal: true
#--
# ERB::DefMethod
#
# Utility module to define eRuby script as instance method.
#
# === Example
#
# example.rhtml:
#   <% for item in @items %>
#   <b><%= item %></b>
#   <% end %>
#
# example.rb:
#   require 'erb'
#   class MyClass
#     extend ERB::DefMethod
#     def_erb_method('render()', 'example.rhtml')
#     def initialize(items)
#       @items = items
#     end
#   end
#   print MyClass.new([10,20,30]).render()
#
# result:
#
#   <b>10</b>
#
#   <b>20</b>
#
#   <b>30</b>
#
module ERB::DefMethod
  # define _methodname_ as instance method of current module, using ERB
  # object or eRuby file
  def def_erb_method(methodname, erb_or_fname)
    if erb_or_fname.kind_of? String
      fname = erb_or_fname
      erb = ERB.new(File.read(fname))
      erb.def_method(self, methodname, fname)
    else
      erb = erb_or_fname
      erb.def_method(self, methodname, erb.filename || '(ERB)')
    end
  end
  module_function :def_erb_method
end
PK*J[��
�\\share/ruby/erb/version.rbnu�[���# frozen_string_literal: true
class ERB
  VERSION = '4.0.4'
  private_constant :VERSION
end
PK*J[�H,ȧ�share/ruby/erb/util.rbnu�[���# frozen_string_literal: true
#--
# ERB::Escape
#
# A subset of ERB::Util. Unlike ERB::Util#html_escape, we expect/hope
# Rails will not monkey-patch ERB::Escape#html_escape.
begin
  # We don't build the C extension for JRuby, TruffleRuby, and WASM
  if $LOAD_PATH.resolve_feature_path('erb/escape')
    require 'erb/escape'
  end
rescue LoadError # resolve_feature_path raises LoadError on TruffleRuby 22.3.0
end
unless defined?(ERB::Escape)
  module ERB::Escape
    def html_escape(s)
      CGI.escapeHTML(s.to_s)
    end
    module_function :html_escape
  end
end

#--
# ERB::Util
#
# A utility module for conversion routines, often handy in HTML generation.
module ERB::Util
  #
  # A utility method for escaping HTML tag characters in _s_.
  #
  #   require "erb"
  #   include ERB::Util
  #
  #   puts html_escape("is a > 0 & a < 10?")
  #
  # _Generates_
  #
  #   is a &gt; 0 &amp; a &lt; 10?
  #
  include ERB::Escape # html_escape
  module_function :html_escape
  alias h html_escape
  module_function :h

  #
  # A utility method for encoding the String _s_ as a URL.
  #
  #   require "erb"
  #   include ERB::Util
  #
  #   puts url_encode("Programming Ruby:  The Pragmatic Programmer's Guide")
  #
  # _Generates_
  #
  #   Programming%20Ruby%3A%20%20The%20Pragmatic%20Programmer%27s%20Guide
  #
  def url_encode(s)
    CGI.escapeURIComponent(s.to_s)
  end
  alias u url_encode
  module_function :u
  module_function :url_encode
end
PK*J[m��0101share/ruby/random/formatter.rbnu�[���# -*- coding: us-ascii -*-
# frozen_string_literal: true

# == \Random number formatter.
#
# Formats generated random numbers in many manners. When <tt>'random/formatter'</tt>
# is required, several methods are added to empty core module <tt>Random::Formatter</tt>,
# making them available as Random's instance and module methods.
#
# Standard library SecureRandom is also extended with the module, and the methods
# described below are available as a module methods in it.
#
# === Examples
#
# Generate random hexadecimal strings:
#
#   require 'random/formatter'
#
#   prng = Random.new
#   prng.hex(10) #=> "52750b30ffbc7de3b362"
#   prng.hex(10) #=> "92b15d6c8dc4beb5f559"
#   prng.hex(13) #=> "39b290146bea6ce975c37cfc23"
#   # or just
#   Random.hex #=> "1aed0c631e41be7f77365415541052ee"
#
# Generate random base64 strings:
#
#   prng.base64(10) #=> "EcmTPZwWRAozdA=="
#   prng.base64(10) #=> "KO1nIU+p9DKxGg=="
#   prng.base64(12) #=> "7kJSM/MzBJI+75j8"
#   Random.base64(4) #=> "bsQ3fQ=="
#
# Generate random binary strings:
#
#   prng.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
#   prng.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"
#   Random.random_bytes(6) #=> "\xA1\xE6Lr\xC43"
#
# Generate alphanumeric strings:
#
#   prng.alphanumeric(10) #=> "S8baxMJnPl"
#   prng.alphanumeric(10) #=> "aOxAg8BAJe"
#   Random.alphanumeric #=> "TmP9OsJHJLtaZYhP"
#
# Generate UUIDs:
#
#   prng.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
#   prng.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
#   Random.uuid #=> "f14e0271-de96-45cc-8911-8910292a42cd"
#
# All methods are available in the standard library SecureRandom, too:
#
#   SecureRandom.hex #=> "05b45376a30c67238eb93b16499e50cf"

module Random::Formatter

  # Generate a random binary string.
  #
  # The argument _n_ specifies the length of the result string.
  #
  # If _n_ is not specified or is nil, 16 is assumed.
  # It may be larger in future.
  #
  # The result may contain any byte: "\x00" - "\xff".
  #
  #   require 'random/formatter'
  #
  #   Random.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6"
  #   # or
  #   prng = Random.new
  #   prng.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97"
  def random_bytes(n=nil)
    n = n ? n.to_int : 16
    gen_random(n)
  end

  # Generate a random hexadecimal string.
  #
  # The argument _n_ specifies the length, in bytes, of the random number to be generated.
  # The length of the resulting hexadecimal string is twice of _n_.
  #
  # If _n_ is not specified or is nil, 16 is assumed.
  # It may be larger in the future.
  #
  # The result may contain 0-9 and a-f.
  #
  #   require 'random/formatter'
  #
  #   Random.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
  #   # or
  #   prng = Random.new
  #   prng.hex #=> "91dc3bfb4de5b11d029d376634589b61"
  def hex(n=nil)
    random_bytes(n).unpack1("H*")
  end

  # Generate a random base64 string.
  #
  # The argument _n_ specifies the length, in bytes, of the random number
  # to be generated. The length of the result string is about 4/3 of _n_.
  #
  # If _n_ is not specified or is nil, 16 is assumed.
  # It may be larger in the future.
  #
  # The result may contain A-Z, a-z, 0-9, "+", "/" and "=".
  #
  #   require 'random/formatter'
  #
  #   Random.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
  #   # or
  #   prng = Random.new
  #   prng.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
  #
  # See RFC 3548 for the definition of base64.
  def base64(n=nil)
    [random_bytes(n)].pack("m0")
  end

  # Generate a random URL-safe base64 string.
  #
  # The argument _n_ specifies the length, in bytes, of the random number
  # to be generated. The length of the result string is about 4/3 of _n_.
  #
  # If _n_ is not specified or is nil, 16 is assumed.
  # It may be larger in the future.
  #
  # The boolean argument _padding_ specifies the padding.
  # If it is false or nil, padding is not generated.
  # Otherwise padding is generated.
  # By default, padding is not generated because "=" may be used as a URL delimiter.
  #
  # The result may contain A-Z, a-z, 0-9, "-" and "_".
  # "=" is also used if _padding_ is true.
  #
  #   require 'random/formatter'
  #
  #   Random.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg"
  #   # or
  #   prng = Random.new
  #   prng.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg"
  #
  #   prng.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ=="
  #   prng.urlsafe_base64(nil, true) #=> "-M8rLhr7JEpJlqFGUMmOxg=="
  #
  # See RFC 3548 for the definition of URL-safe base64.
  def urlsafe_base64(n=nil, padding=false)
    s = [random_bytes(n)].pack("m0")
    s.tr!("+/", "-_")
    s.delete!("=") unless padding
    s
  end

  # Generate a random v4 UUID (Universally Unique IDentifier).
  #
  #   require 'random/formatter'
  #
  #   Random.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
  #   Random.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
  #   # or
  #   prng = Random.new
  #   prng.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"
  #
  # The version 4 UUID is purely random (except the version).
  # It doesn't contain meaningful information such as MAC addresses, timestamps, etc.
  #
  # The result contains 122 random bits (15.25 random bytes).
  #
  # See RFC9562[https://www.rfc-editor.org/rfc/rfc9562] for details of UUIDv4.
  #
  def uuid
    ary = random_bytes(16)
    ary.setbyte(6, (ary.getbyte(6) & 0x0f) | 0x40)
    ary.setbyte(8, (ary.getbyte(8) & 0x3f) | 0x80)
    ary.unpack("H8H4H4H4H12").join(?-)
  end

  alias uuid_v4 uuid

  # Generate a random v7 UUID (Universally Unique IDentifier).
  #
  #   require 'random/formatter'
  #
  #   Random.uuid_v7 # => "0188d4c3-1311-7f96-85c7-242a7aa58f1e"
  #   Random.uuid_v7 # => "0188d4c3-16fe-744f-86af-38fa04c62bb5"
  #   Random.uuid_v7 # => "0188d4c3-1af8-764f-b049-c204ce0afa23"
  #   Random.uuid_v7 # => "0188d4c3-1e74-7085-b14f-ef6415dc6f31"
  #   #                    |<--sorted-->| |<----- random ---->|
  #
  #   # or
  #   prng = Random.new
  #   prng.uuid_v7 # => "0188ca51-5e72-7950-a11d-def7ff977c98"
  #
  # The version 7 UUID starts with the least significant 48 bits of a 64 bit
  # Unix timestamp (milliseconds since the epoch) and fills the remaining bits
  # with random data, excluding the version and variant bits.
  #
  # This allows version 7 UUIDs to be sorted by creation time.  Time ordered
  # UUIDs can be used for better database index locality of newly inserted
  # records, which may have a significant performance benefit compared to random
  # data inserts.
  #
  # The result contains 74 random bits (9.25 random bytes).
  #
  # Note that this method cannot be made reproducible because its output
  # includes not only random bits but also timestamp.
  #
  # See RFC9562[https://www.rfc-editor.org/rfc/rfc9562] for details of UUIDv7.
  #
  # ==== Monotonicity
  #
  # UUIDv7 has millisecond precision by default, so multiple UUIDs created
  # within the same millisecond are not issued in monotonically increasing
  # order.  To create UUIDs that are time-ordered with sub-millisecond
  # precision, up to 12 bits of additional timestamp may added with
  # +extra_timestamp_bits+.  The extra timestamp precision comes at the expense
  # of random bits.  Setting <tt>extra_timestamp_bits: 12</tt> provides ~244ns
  # of precision, but only 62 random bits (7.75 random bytes).
  #
  #   prng = Random.new
  #   Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 12) }
  #   # =>
  #   ["0188d4c7-13da-74f9-8b53-22a786ffdd5a",
  #    "0188d4c7-13da-753b-83a5-7fb9b2afaeea",
  #    "0188d4c7-13da-754a-88ea-ac0baeedd8db",
  #    "0188d4c7-13da-7557-83e1-7cad9cda0d8d"]
  #   # |<--- sorted --->| |<-- random --->|
  #
  #   Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 8) }
  #   # =>
  #   ["0188d4c7-3333-7a95-850a-de6edb858f7e",
  #    "0188d4c7-3333-7ae8-842e-bc3a8b7d0cf9",  # <- out of order
  #    "0188d4c7-3333-7ae2-995a-9f135dc44ead",  # <- out of order
  #    "0188d4c7-3333-7af9-87c3-8f612edac82e"]
  #   # |<--- sorted -->||<---- random --->|
  #
  # Any rollbacks of the system clock will break monotonicity.  UUIDv7 is based
  # on UTC, which excludes leap seconds and can rollback the clock.  To avoid
  # this, the system clock can synchronize with an NTP server configured to use
  # a "leap smear" approach.  NTP or PTP will also be needed to synchronize
  # across distributed nodes.
  #
  # Counters and other mechanisms for stronger guarantees of monotonicity are
  # not implemented.  Applications with stricter requirements should follow
  # {Section 6.2}[https://www.rfc-editor.org/rfc/rfc9562.html#name-monotonicity-and-counters]
  # of the specification.
  #
  def uuid_v7(extra_timestamp_bits: 0)
    case (extra_timestamp_bits = Integer(extra_timestamp_bits))
    when 0 # min timestamp precision
      ms = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)
      rand = random_bytes(10)
      rand.setbyte(0, rand.getbyte(0) & 0x0f | 0x70) # version
      rand.setbyte(2, rand.getbyte(2) & 0x3f | 0x80) # variant
      "%08x-%04x-%s" % [
        (ms & 0x0000_ffff_ffff_0000) >> 16,
        (ms & 0x0000_0000_0000_ffff),
        rand.unpack("H4H4H12").join("-")
      ]

    when 12 # max timestamp precision
      ms, ns = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)
        .divmod(1_000_000)
      extra_bits = ns * 4096 / 1_000_000
      rand = random_bytes(8)
      rand.setbyte(0, rand.getbyte(0) & 0x3f | 0x80) # variant
      "%08x-%04x-7%03x-%s" % [
        (ms & 0x0000_ffff_ffff_0000) >> 16,
        (ms & 0x0000_0000_0000_ffff),
        extra_bits,
        rand.unpack("H4H12").join("-")
      ]

    when (0..12) # the generic version is slower than the special cases above
      rand_a, rand_b1, rand_b2, rand_b3 = random_bytes(10).unpack("nnnN")
      rand_mask_bits = 12 - extra_timestamp_bits
      ms, ns = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)
        .divmod(1_000_000)
      "%08x-%04x-%04x-%04x-%04x%08x" % [
        (ms & 0x0000_ffff_ffff_0000) >> 16,
        (ms & 0x0000_0000_0000_ffff),
        0x7000 |
          ((ns * (1 << extra_timestamp_bits) / 1_000_000) << rand_mask_bits) |
          rand_a & ((1 << rand_mask_bits) - 1),
        0x8000 | (rand_b1 & 0x3fff),
        rand_b2,
        rand_b3
      ]

    else
      raise ArgumentError, "extra_timestamp_bits must be in 0..12"
    end
  end

  # Internal interface to Random; Generate random data _n_ bytes.
  private def gen_random(n)
    self.bytes(n)
  end

  # Generate a string that randomly draws from a
  # source array of characters.
  #
  # The argument _source_ specifies the array of characters from which
  # to generate the string.
  # The argument _n_ specifies the length, in characters, of the string to be
  # generated.
  #
  # The result may contain whatever characters are in the source array.
  #
  #   require 'random/formatter'
  #
  #   prng.choose([*'l'..'r'], 16) #=> "lmrqpoonmmlqlron"
  #   prng.choose([*'0'..'9'], 5)  #=> "27309"
  private def choose(source, n)
    size = source.size
    m = 1
    limit = size
    while limit * size <= 0x100000000
      limit *= size
      m += 1
    end
    result = ''.dup
    while m <= n
      rs = random_number(limit)
      is = rs.digits(size)
      (m-is.length).times { is << 0 }
      result << source.values_at(*is).join('')
      n -= m
    end
    if 0 < n
      rs = random_number(limit)
      is = rs.digits(size)
      if is.length < n
        (n-is.length).times { is << 0 }
      else
        is.pop while n < is.length
      end
      result.concat source.values_at(*is).join('')
    end
    result
  end

  # The default character list for #alphanumeric.
  ALPHANUMERIC = [*'A'..'Z', *'a'..'z', *'0'..'9'].map(&:freeze).freeze

  # Generate a random alphanumeric string.
  #
  # The argument _n_ specifies the length, in characters, of the alphanumeric
  # string to be generated.
  # The argument _chars_ specifies the character list which the result is
  # consist of.
  #
  # If _n_ is not specified or is nil, 16 is assumed.
  # It may be larger in the future.
  #
  # The result may contain A-Z, a-z and 0-9, unless _chars_ is specified.
  #
  #   require 'random/formatter'
  #
  #   Random.alphanumeric     #=> "2BuBuLf3WfSKyQbR"
  #   # or
  #   prng = Random.new
  #   prng.alphanumeric(10) #=> "i6K93NdqiH"
  #
  #   Random.alphanumeric(4, chars: [*"0".."9"]) #=> "2952"
  #   # or
  #   prng = Random.new
  #   prng.alphanumeric(10, chars: [*"!".."/"]) #=> ",.,++%/''."
  def alphanumeric(n = nil, chars: ALPHANUMERIC)
    n = 16 if n.nil?
    choose(chars, n)
  end
end
PK*J[ϰ��D�Dshare/ruby/pathname.rbnu�[���# frozen_string_literal: true
#
# = pathname.rb
#
# Object-Oriented Pathname Class
#
# Author:: Tanaka Akira <akr@m17n.org>
# Documentation:: Author and Gavin Sinclair
#
# For documentation, see class Pathname.
#

require 'pathname.so'

class Pathname

  VERSION = "0.4.0"

  # :stopdoc:

  # to_path is implemented so Pathname objects are usable with File.open, etc.
  TO_PATH = :to_path

  SAME_PATHS = if File::FNM_SYSCASE.nonzero?
    # Avoid #zero? here because #casecmp can return nil.
    proc {|a, b| a.casecmp(b) == 0}
  else
    proc {|a, b| a == b}
  end


  if File::ALT_SEPARATOR
    SEPARATOR_LIST = "#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}"
    SEPARATOR_PAT = /[#{SEPARATOR_LIST}]/
  else
    SEPARATOR_LIST = "#{Regexp.quote File::SEPARATOR}"
    SEPARATOR_PAT = /#{Regexp.quote File::SEPARATOR}/
  end

  if File.dirname('A:') == 'A:.' # DOSish drive letter
    ABSOLUTE_PATH = /\A(?:[A-Za-z]:|#{SEPARATOR_PAT})/o
  else
    ABSOLUTE_PATH = /\A#{SEPARATOR_PAT}/o
  end
  private_constant :ABSOLUTE_PATH

  # :startdoc:

  # chop_basename(path) -> [pre-basename, basename] or nil
  def chop_basename(path) # :nodoc:
    base = File.basename(path)
    if /\A#{SEPARATOR_PAT}?\z/o.match?(base)
      return nil
    else
      return path[0, path.rindex(base)], base
    end
  end
  private :chop_basename

  # split_names(path) -> prefix, [name, ...]
  def split_names(path) # :nodoc:
    names = []
    while r = chop_basename(path)
      path, basename = r
      names.unshift basename
    end
    return path, names
  end
  private :split_names

  def prepend_prefix(prefix, relpath) # :nodoc:
    if relpath.empty?
      File.dirname(prefix)
    elsif /#{SEPARATOR_PAT}/o.match?(prefix)
      prefix = File.dirname(prefix)
      prefix = File.join(prefix, "") if File.basename(prefix + 'a') != 'a'
      prefix + relpath
    else
      prefix + relpath
    end
  end
  private :prepend_prefix

  # Returns clean pathname of +self+ with consecutive slashes and useless dots
  # removed.  The filesystem is not accessed.
  #
  # If +consider_symlink+ is +true+, then a more conservative algorithm is used
  # to avoid breaking symbolic linkages.  This may retain more +..+
  # entries than absolutely necessary, but without accessing the filesystem,
  # this can't be avoided.
  #
  # See Pathname#realpath.
  #
  def cleanpath(consider_symlink=false)
    if consider_symlink
      cleanpath_conservative
    else
      cleanpath_aggressive
    end
  end

  #
  # Clean the path simply by resolving and removing excess +.+ and +..+ entries.
  # Nothing more, nothing less.
  #
  def cleanpath_aggressive # :nodoc:
    path = @path
    names = []
    pre = path
    while r = chop_basename(pre)
      pre, base = r
      case base
      when '.'
      when '..'
        names.unshift base
      else
        if names[0] == '..'
          names.shift
        else
          names.unshift base
        end
      end
    end
    pre.tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
    if /#{SEPARATOR_PAT}/o.match?(File.basename(pre))
      names.shift while names[0] == '..'
    end
    self.class.new(prepend_prefix(pre, File.join(*names)))
  end
  private :cleanpath_aggressive

  # has_trailing_separator?(path) -> bool
  def has_trailing_separator?(path) # :nodoc:
    if r = chop_basename(path)
      pre, basename = r
      pre.length + basename.length < path.length
    else
      false
    end
  end
  private :has_trailing_separator?

  # add_trailing_separator(path) -> path
  def add_trailing_separator(path) # :nodoc:
    if File.basename(path + 'a') == 'a'
      path
    else
      File.join(path, "") # xxx: Is File.join is appropriate to add separator?
    end
  end
  private :add_trailing_separator

  def del_trailing_separator(path) # :nodoc:
    if r = chop_basename(path)
      pre, basename = r
      pre + basename
    elsif /#{SEPARATOR_PAT}+\z/o =~ path
      $` + File.dirname(path)[/#{SEPARATOR_PAT}*\z/o]
    else
      path
    end
  end
  private :del_trailing_separator

  def cleanpath_conservative # :nodoc:
    path = @path
    names = []
    pre = path
    while r = chop_basename(pre)
      pre, base = r
      names.unshift base if base != '.'
    end
    pre.tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
    if /#{SEPARATOR_PAT}/o.match?(File.basename(pre))
      names.shift while names[0] == '..'
    end
    if names.empty?
      self.class.new(File.dirname(pre))
    else
      if names.last != '..' && File.basename(path) == '.'
        names << '.'
      end
      result = prepend_prefix(pre, File.join(*names))
      if /\A(?:\.|\.\.)\z/ !~ names.last && has_trailing_separator?(path)
        self.class.new(add_trailing_separator(result))
      else
        self.class.new(result)
      end
    end
  end
  private :cleanpath_conservative

  # Returns the parent directory.
  #
  # This is same as <code>self + '..'</code>.
  def parent
    self + '..'
  end

  # Returns +true+ if +self+ points to a mountpoint.
  def mountpoint?
    begin
      stat1 = self.lstat
      stat2 = self.parent.lstat
      stat1.dev != stat2.dev || stat1.ino == stat2.ino
    rescue Errno::ENOENT
      false
    end
  end

  #
  # Predicate method for root directories.  Returns +true+ if the
  # pathname consists of consecutive slashes.
  #
  # It doesn't access the filesystem.  So it may return +false+ for some
  # pathnames which points to roots such as <tt>/usr/..</tt>.
  #
  def root?
    chop_basename(@path) == nil && /#{SEPARATOR_PAT}/o.match?(@path)
  end

  # Predicate method for testing whether a path is absolute.
  #
  # It returns +true+ if the pathname begins with a slash.
  #
  #   p = Pathname.new('/im/sure')
  #   p.absolute?
  #       #=> true
  #
  #   p = Pathname.new('not/so/sure')
  #   p.absolute?
  #       #=> false
  def absolute?
    ABSOLUTE_PATH.match? @path
  end

  # The opposite of Pathname#absolute?
  #
  # It returns +false+ if the pathname begins with a slash.
  #
  #   p = Pathname.new('/im/sure')
  #   p.relative?
  #       #=> false
  #
  #   p = Pathname.new('not/so/sure')
  #   p.relative?
  #       #=> true
  def relative?
    !absolute?
  end

  #
  # Iterates over each component of the path.
  #
  #   Pathname.new("/usr/bin/ruby").each_filename {|filename| ... }
  #     # yields "usr", "bin", and "ruby".
  #
  # Returns an Enumerator if no block was given.
  #
  #   enum = Pathname.new("/usr/bin/ruby").each_filename
  #     # ... do stuff ...
  #   enum.each { |e| ... }
  #     # yields "usr", "bin", and "ruby".
  #
  def each_filename # :yield: filename
    return to_enum(__method__) unless block_given?
    _, names = split_names(@path)
    names.each {|filename| yield filename }
    nil
  end

  # Iterates over and yields a new Pathname object
  # for each element in the given path in descending order.
  #
  #  Pathname.new('/path/to/some/file.rb').descend {|v| p v}
  #     #<Pathname:/>
  #     #<Pathname:/path>
  #     #<Pathname:/path/to>
  #     #<Pathname:/path/to/some>
  #     #<Pathname:/path/to/some/file.rb>
  #
  #  Pathname.new('path/to/some/file.rb').descend {|v| p v}
  #     #<Pathname:path>
  #     #<Pathname:path/to>
  #     #<Pathname:path/to/some>
  #     #<Pathname:path/to/some/file.rb>
  #
  # Returns an Enumerator if no block was given.
  #
  #   enum = Pathname.new("/usr/bin/ruby").descend
  #     # ... do stuff ...
  #   enum.each { |e| ... }
  #     # yields Pathnames /, /usr, /usr/bin, and /usr/bin/ruby.
  #
  # It doesn't access the filesystem.
  #
  def descend
    return to_enum(__method__) unless block_given?
    vs = []
    ascend {|v| vs << v }
    vs.reverse_each {|v| yield v }
    nil
  end

  # Iterates over and yields a new Pathname object
  # for each element in the given path in ascending order.
  #
  #  Pathname.new('/path/to/some/file.rb').ascend {|v| p v}
  #     #<Pathname:/path/to/some/file.rb>
  #     #<Pathname:/path/to/some>
  #     #<Pathname:/path/to>
  #     #<Pathname:/path>
  #     #<Pathname:/>
  #
  #  Pathname.new('path/to/some/file.rb').ascend {|v| p v}
  #     #<Pathname:path/to/some/file.rb>
  #     #<Pathname:path/to/some>
  #     #<Pathname:path/to>
  #     #<Pathname:path>
  #
  # Returns an Enumerator if no block was given.
  #
  #   enum = Pathname.new("/usr/bin/ruby").ascend
  #     # ... do stuff ...
  #   enum.each { |e| ... }
  #     # yields Pathnames /usr/bin/ruby, /usr/bin, /usr, and /.
  #
  # It doesn't access the filesystem.
  #
  def ascend
    return to_enum(__method__) unless block_given?
    path = @path
    yield self
    while r = chop_basename(path)
      path, = r
      break if path.empty?
      yield self.class.new(del_trailing_separator(path))
    end
  end

  #
  # Appends a pathname fragment to +self+ to produce a new Pathname object.
  # Since +other+ is considered as a path relative to +self+, if +other+ is
  # an absolute path, the new Pathname object is created from just +other+.
  #
  #   p1 = Pathname.new("/usr")      # Pathname:/usr
  #   p2 = p1 + "bin/ruby"           # Pathname:/usr/bin/ruby
  #   p3 = p1 + "/etc/passwd"        # Pathname:/etc/passwd
  #
  #   # / is aliased to +.
  #   p4 = p1 / "bin/ruby"           # Pathname:/usr/bin/ruby
  #   p5 = p1 / "/etc/passwd"        # Pathname:/etc/passwd
  #
  # This method doesn't access the file system; it is pure string manipulation.
  #
  def +(other)
    other = Pathname.new(other) unless Pathname === other
    Pathname.new(plus(@path, other.to_s))
  end
  alias / +

  def plus(path1, path2) # -> path # :nodoc:
    prefix2 = path2
    index_list2 = []
    basename_list2 = []
    while r2 = chop_basename(prefix2)
      prefix2, basename2 = r2
      index_list2.unshift prefix2.length
      basename_list2.unshift basename2
    end
    return path2 if prefix2 != ''
    prefix1 = path1
    while true
      while !basename_list2.empty? && basename_list2.first == '.'
        index_list2.shift
        basename_list2.shift
      end
      break unless r1 = chop_basename(prefix1)
      prefix1, basename1 = r1
      next if basename1 == '.'
      if basename1 == '..' || basename_list2.empty? || basename_list2.first != '..'
        prefix1 = prefix1 + basename1
        break
      end
      index_list2.shift
      basename_list2.shift
    end
    r1 = chop_basename(prefix1)
    if !r1 && (r1 = /#{SEPARATOR_PAT}/o.match?(File.basename(prefix1)))
      while !basename_list2.empty? && basename_list2.first == '..'
        index_list2.shift
        basename_list2.shift
      end
    end
    if !basename_list2.empty?
      suffix2 = path2[index_list2.first..-1]
      r1 ? File.join(prefix1, suffix2) : prefix1 + suffix2
    else
      r1 ? prefix1 : File.dirname(prefix1)
    end
  end
  private :plus

  #
  # Joins the given pathnames onto +self+ to create a new Pathname object.
  # This is effectively the same as using Pathname#+ to append +self+ and
  # all arguments sequentially.
  #
  #   path0 = Pathname.new("/usr")                # Pathname:/usr
  #   path0 = path0.join("bin/ruby")              # Pathname:/usr/bin/ruby
  #       # is the same as
  #   path1 = Pathname.new("/usr") + "bin/ruby"   # Pathname:/usr/bin/ruby
  #   path0 == path1
  #       #=> true
  #
  def join(*args)
    return self if args.empty?
    result = args.pop
    result = Pathname.new(result) unless Pathname === result
    return result if result.absolute?
    args.reverse_each {|arg|
      arg = Pathname.new(arg) unless Pathname === arg
      result = arg + result
      return result if result.absolute?
    }
    self + result
  end

  #
  # Returns the children of the directory (files and subdirectories, not
  # recursive) as an array of Pathname objects.
  #
  # By default, the returned pathnames will have enough information to access
  # the files. If you set +with_directory+ to +false+, then the returned
  # pathnames will contain the filename only.
  #
  # For example:
  #   pn = Pathname("/usr/lib/ruby/1.8")
  #   pn.children
  #       # -> [ Pathname:/usr/lib/ruby/1.8/English.rb,
  #              Pathname:/usr/lib/ruby/1.8/Env.rb,
  #              Pathname:/usr/lib/ruby/1.8/abbrev.rb, ... ]
  #   pn.children(false)
  #       # -> [ Pathname:English.rb, Pathname:Env.rb, Pathname:abbrev.rb, ... ]
  #
  # Note that the results never contain the entries +.+ and +..+ in
  # the directory because they are not children.
  #
  def children(with_directory=true)
    with_directory = false if @path == '.'
    result = []
    Dir.foreach(@path) {|e|
      next if e == '.' || e == '..'
      if with_directory
        result << self.class.new(File.join(@path, e))
      else
        result << self.class.new(e)
      end
    }
    result
  end

  # Iterates over the children of the directory
  # (files and subdirectories, not recursive).
  #
  # It yields Pathname object for each child.
  #
  # By default, the yielded pathnames will have enough information to access
  # the files.
  #
  # If you set +with_directory+ to +false+, then the returned pathnames will
  # contain the filename only.
  #
  #   Pathname("/usr/local").each_child {|f| p f }
  #   #=> #<Pathname:/usr/local/share>
  #   #   #<Pathname:/usr/local/bin>
  #   #   #<Pathname:/usr/local/games>
  #   #   #<Pathname:/usr/local/lib>
  #   #   #<Pathname:/usr/local/include>
  #   #   #<Pathname:/usr/local/sbin>
  #   #   #<Pathname:/usr/local/src>
  #   #   #<Pathname:/usr/local/man>
  #
  #   Pathname("/usr/local").each_child(false) {|f| p f }
  #   #=> #<Pathname:share>
  #   #   #<Pathname:bin>
  #   #   #<Pathname:games>
  #   #   #<Pathname:lib>
  #   #   #<Pathname:include>
  #   #   #<Pathname:sbin>
  #   #   #<Pathname:src>
  #   #   #<Pathname:man>
  #
  # Note that the results never contain the entries +.+ and +..+ in
  # the directory because they are not children.
  #
  # See Pathname#children
  #
  def each_child(with_directory=true, &b)
    children(with_directory).each(&b)
  end

  #
  # Returns a relative path from the given +base_directory+ to the receiver.
  #
  # If +self+ is absolute, then +base_directory+ must be absolute too.
  #
  # If +self+ is relative, then +base_directory+ must be relative too.
  #
  # This method doesn't access the filesystem.  It assumes no symlinks.
  #
  # ArgumentError is raised when it cannot find a relative path.
  #
  # Note that this method does not handle situations where the case sensitivity
  # of the filesystem in use differs from the operating system default.
  #
  def relative_path_from(base_directory)
    base_directory = Pathname.new(base_directory) unless base_directory.is_a? Pathname
    dest_directory = self.cleanpath.to_s
    base_directory = base_directory.cleanpath.to_s
    dest_prefix = dest_directory
    dest_names = []
    while r = chop_basename(dest_prefix)
      dest_prefix, basename = r
      dest_names.unshift basename if basename != '.'
    end
    base_prefix = base_directory
    base_names = []
    while r = chop_basename(base_prefix)
      base_prefix, basename = r
      base_names.unshift basename if basename != '.'
    end
    unless SAME_PATHS[dest_prefix, base_prefix]
      raise ArgumentError, "different prefix: #{dest_prefix.inspect} and #{base_directory.inspect}"
    end
    while !dest_names.empty? &&
          !base_names.empty? &&
          SAME_PATHS[dest_names.first, base_names.first]
      dest_names.shift
      base_names.shift
    end
    if base_names.include? '..'
      raise ArgumentError, "base_directory has ..: #{base_directory.inspect}"
    end
    base_names.fill('..')
    relpath_names = base_names + dest_names
    if relpath_names.empty?
      Pathname.new('.')
    else
      Pathname.new(File.join(*relpath_names))
    end
  end
end


class Pathname    # * Find *
  #
  # Iterates over the directory tree in a depth first manner, yielding a
  # Pathname for each file under "this" directory.
  #
  # Returns an Enumerator if no block is given.
  #
  # Since it is implemented by the standard library module Find, Find.prune can
  # be used to control the traversal.
  #
  # If +self+ is +.+, yielded pathnames begin with a filename in the
  # current directory, not +./+.
  #
  # See Find.find
  #
  def find(ignore_error: true) # :yield: pathname
    return to_enum(__method__, ignore_error: ignore_error) unless block_given?
    require 'find'
    if @path == '.'
      Find.find(@path, ignore_error: ignore_error) {|f| yield self.class.new(f.delete_prefix('./')) }
    else
      Find.find(@path, ignore_error: ignore_error) {|f| yield self.class.new(f) }
    end
  end
end


class Pathname    # * FileUtils *
  # Creates a full path, including any intermediate directories that don't yet
  # exist.
  #
  # See FileUtils.mkpath and FileUtils.mkdir_p
  def mkpath(mode: nil)
    require 'fileutils'
    FileUtils.mkpath(@path, mode: mode)
    self
  end

  # Recursively deletes a directory, including all directories beneath it.
  #
  # See FileUtils.rm_rf
  def rmtree(noop: nil, verbose: nil, secure: nil)
    # The name "rmtree" is borrowed from File::Path of Perl.
    # File::Path provides "mkpath" and "rmtree".
    require 'fileutils'
    FileUtils.rm_rf(@path, noop: noop, verbose: verbose, secure: secure)
    self
  end
end

class Pathname    # * tmpdir *
  # Creates a tmp directory and wraps the returned path in a Pathname object.
  #
  # See Dir.mktmpdir
  def self.mktmpdir
    require 'tmpdir' unless defined?(Dir.mktmpdir)
    if block_given?
      Dir.mktmpdir do |dir|
        dir = self.new(dir)
        yield dir
      end
    else
      self.new(Dir.mktmpdir)
    end
  end
end
PK*J[���h

share/ruby/find.rbnu�[���# frozen_string_literal: true
#
# find.rb: the Find module for processing all files under a given directory.
#

#
# The +Find+ module supports the top-down traversal of a set of file paths.
#
# For example, to total the size of all files under your home directory,
# ignoring anything in a "dot" directory (e.g. $HOME/.ssh):
#
#   require 'find'
#
#   total_size = 0
#
#   Find.find(ENV["HOME"]) do |path|
#     if FileTest.directory?(path)
#       if File.basename(path).start_with?('.')
#         Find.prune       # Don't look any further into this directory.
#       else
#         next
#       end
#     else
#       total_size += FileTest.size(path)
#     end
#   end
#
module Find

  VERSION = "0.2.0"

  #
  # Calls the associated block with the name of every file and directory listed
  # as arguments, then recursively on their subdirectories, and so on.
  #
  # Returns an enumerator if no block is given.
  #
  # See the +Find+ module documentation for an example.
  #
  def find(*paths, ignore_error: true) # :yield: path
    block_given? or return enum_for(__method__, *paths, ignore_error: ignore_error)

    fs_encoding = Encoding.find("filesystem")

    paths.collect!{|d| raise Errno::ENOENT, d unless File.exist?(d); d.dup}.each do |path|
      path = path.to_path if path.respond_to? :to_path
      enc = path.encoding == Encoding::US_ASCII ? fs_encoding : path.encoding
      ps = [path]
      while file = ps.shift
        catch(:prune) do
          yield file.dup
          begin
            s = File.lstat(file)
          rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG, Errno::EINVAL
            raise unless ignore_error
            next
          end
          if s.directory? then
            begin
              fs = Dir.children(file, encoding: enc)
            rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG, Errno::EINVAL
              raise unless ignore_error
              next
            end
            fs.sort!
            fs.reverse_each {|f|
              f = File.join(file, f)
              ps.unshift f
            }
          end
        end
      end
    end
    nil
  end

  #
  # Skips the current file or directory, restarting the loop with the next
  # entry. If the current file is a directory, that directory will not be
  # recursively entered. Meaningful only within the block associated with
  # Find::find.
  #
  # See the +Find+ module documentation for an example.
  #
  def prune
    throw :prune
  end

  module_function :find, :prune
end
PK*J[�6�		share/ruby/securerandom.rbnu�[���# -*- coding: us-ascii -*-
# frozen_string_literal: true

require 'random/formatter'

# == Secure random number generator interface.
#
# This library is an interface to secure random number generators which are
# suitable for generating session keys in HTTP cookies, etc.
#
# You can use this library in your application by requiring it:
#
#   require 'securerandom'
#
# It supports the following secure random number generators:
#
# * openssl
# * /dev/urandom
# * Win32
#
# SecureRandom is extended by the Random::Formatter module which
# defines the following methods:
#
# * alphanumeric
# * base64
# * choose
# * gen_random
# * hex
# * rand
# * random_bytes
# * random_number
# * urlsafe_base64
# * uuid
#
# These methods are usable as class methods of SecureRandom such as
# +SecureRandom.hex+.
#
# If a secure random number generator is not available,
# +NotImplementedError+ is raised.

module SecureRandom

  # The version
  VERSION = "0.4.1"

  class << self
    # Returns a random binary string containing +size+ bytes.
    #
    # See Random.bytes
    def bytes(n)
      return gen_random(n)
    end

    # Compatibility methods for Ruby 3.2, we can remove this after dropping to support Ruby 3.2
    def alphanumeric(n = nil, chars: ALPHANUMERIC)
      n = 16 if n.nil?
      choose(chars, n)
    end if RUBY_VERSION < '3.3'

    private

    # :stopdoc:

    # Implementation using OpenSSL
    def gen_random_openssl(n)
      return OpenSSL::Random.random_bytes(n)
    end

    # Implementation using system random device
    def gen_random_urandom(n)
      ret = Random.urandom(n)
      unless ret
        raise NotImplementedError, "No random device"
      end
      unless ret.length == n
        raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes"
      end
      ret
    end

    begin
      # Check if Random.urandom is available
      Random.urandom(1)
      alias gen_random gen_random_urandom
    rescue RuntimeError
      begin
        require 'openssl'
      rescue NoMethodError
        raise NotImplementedError, "No random device"
      else
        alias gen_random gen_random_openssl
      end
    end

    # :startdoc:

    # Generate random data bytes for Random::Formatter
    public :gen_random
  end
end

SecureRandom.extend(Random::Formatter)
PK*J[#share/gems/gems/json-2.9.1/lib/jsonnuȯ��PK*J[�<[���share/ruby/set/sorted_set.rbnu�[���begin
  require 'sorted_set'
rescue ::LoadError
  raise "The `SortedSet` class has been extracted from the `set` library. " \
        "You must use the `sorted_set` gem or other alternatives."
end
PK*J[�:�D__share/ruby/uri.rbnu�[���# frozen_string_literal: false
# URI is a module providing classes to handle Uniform Resource Identifiers
# (RFC2396[https://www.rfc-editor.org/rfc/rfc2396]).
#
# == Features
#
# * Uniform way of handling URIs.
# * Flexibility to introduce custom URI schemes.
# * Flexibility to have an alternate URI::Parser (or just different patterns
#   and regexp's).
#
# == Basic example
#
#   require 'uri'
#
#   uri = URI("http://foo.com/posts?id=30&limit=5#time=1305298413")
#   #=> #<URI::HTTP http://foo.com/posts?id=30&limit=5#time=1305298413>
#
#   uri.scheme    #=> "http"
#   uri.host      #=> "foo.com"
#   uri.path      #=> "/posts"
#   uri.query     #=> "id=30&limit=5"
#   uri.fragment  #=> "time=1305298413"
#
#   uri.to_s      #=> "http://foo.com/posts?id=30&limit=5#time=1305298413"
#
# == Adding custom URIs
#
#   module URI
#     class RSYNC < Generic
#       DEFAULT_PORT = 873
#     end
#     register_scheme 'RSYNC', RSYNC
#   end
#   #=> URI::RSYNC
#
#   URI.scheme_list
#   #=> {"FILE"=>URI::File, "FTP"=>URI::FTP, "HTTP"=>URI::HTTP,
#   #    "HTTPS"=>URI::HTTPS, "LDAP"=>URI::LDAP, "LDAPS"=>URI::LDAPS,
#   #    "MAILTO"=>URI::MailTo, "RSYNC"=>URI::RSYNC}
#
#   uri = URI("rsync://rsync.foo.com")
#   #=> #<URI::RSYNC rsync://rsync.foo.com>
#
# == RFC References
#
# A good place to view an RFC spec is http://www.ietf.org/rfc.html.
#
# Here is a list of all related RFC's:
# - RFC822[https://www.rfc-editor.org/rfc/rfc822]
# - RFC1738[https://www.rfc-editor.org/rfc/rfc1738]
# - RFC2255[https://www.rfc-editor.org/rfc/rfc2255]
# - RFC2368[https://www.rfc-editor.org/rfc/rfc2368]
# - RFC2373[https://www.rfc-editor.org/rfc/rfc2373]
# - RFC2396[https://www.rfc-editor.org/rfc/rfc2396]
# - RFC2732[https://www.rfc-editor.org/rfc/rfc2732]
# - RFC3986[https://www.rfc-editor.org/rfc/rfc3986]
#
# == Class tree
#
# - URI::Generic (in uri/generic.rb)
#   - URI::File - (in uri/file.rb)
#   - URI::FTP - (in uri/ftp.rb)
#   - URI::HTTP - (in uri/http.rb)
#     - URI::HTTPS - (in uri/https.rb)
#   - URI::LDAP - (in uri/ldap.rb)
#     - URI::LDAPS - (in uri/ldaps.rb)
#   - URI::MailTo - (in uri/mailto.rb)
# - URI::Parser - (in uri/common.rb)
# - URI::REGEXP - (in uri/common.rb)
#   - URI::REGEXP::PATTERN - (in uri/common.rb)
# - URI::Util - (in uri/common.rb)
# - URI::Error - (in uri/common.rb)
#   - URI::InvalidURIError - (in uri/common.rb)
#   - URI::InvalidComponentError - (in uri/common.rb)
#   - URI::BadURIError - (in uri/common.rb)
#
# == Copyright Info
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# Documentation::
#   Akira Yamada <akira@ruby-lang.org>
#   Dmitry V. Sabanin <sdmitry@lrn.ru>
#   Vincent Batts <vbatts@hashbangbash.com>
# License::
#  Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
#  You can redistribute it and/or modify it under the same term as Ruby.
#

module URI
end

require_relative 'uri/version'
require_relative 'uri/common'
require_relative 'uri/generic'
require_relative 'uri/file'
require_relative 'uri/ftp'
require_relative 'uri/http'
require_relative 'uri/https'
require_relative 'uri/ldap'
require_relative 'uri/ldaps'
require_relative 'uri/mailto'
require_relative 'uri/ws'
require_relative 'uri/wss'
PK*J[��
R�J�Jshare/ruby/benchmark.rbnu�[���# frozen_string_literal: true
#--
# benchmark.rb - a performance benchmarking library
#
# $Id$
#
# Created by Gotoken (gotoken@notwork.org).
#
# Documentation by Gotoken (original RD), Lyle Johnson (RDoc conversion), and
# Gavin Sinclair (editing).
#++
#
# == Overview
#
# The Benchmark module provides methods for benchmarking Ruby code, giving
# detailed reports on the time taken for each task.
#

# The Benchmark module provides methods to measure and report the time
# used to execute Ruby code.
#
# * Measure the time to construct the string given by the expression
#   <code>"a"*1_000_000_000</code>:
#
#       require 'benchmark'
#
#       puts Benchmark.measure { "a"*1_000_000_000 }
#
#   On my machine (OSX 10.8.3 on i5 1.7 GHz) this generates:
#
#       0.350000   0.400000   0.750000 (  0.835234)
#
#   This report shows the user CPU time, system CPU time, the sum of
#   the user and system CPU times, and the elapsed real time. The unit
#   of time is seconds.
#
# * Do some experiments sequentially using the #bm method:
#
#       require 'benchmark'
#
#       n = 5000000
#       Benchmark.bm do |x|
#         x.report { for i in 1..n; a = "1"; end }
#         x.report { n.times do   ; a = "1"; end }
#         x.report { 1.upto(n) do ; a = "1"; end }
#       end
#
#   The result:
#
#              user     system      total        real
#          1.010000   0.000000   1.010000 (  1.014479)
#          1.000000   0.000000   1.000000 (  0.998261)
#          0.980000   0.000000   0.980000 (  0.981335)
#
# * Continuing the previous example, put a label in each report:
#
#       require 'benchmark'
#
#       n = 5000000
#       Benchmark.bm(7) do |x|
#         x.report("for:")   { for i in 1..n; a = "1"; end }
#         x.report("times:") { n.times do   ; a = "1"; end }
#         x.report("upto:")  { 1.upto(n) do ; a = "1"; end }
#       end
#
# The result:
#
#                     user     system      total        real
#       for:      1.010000   0.000000   1.010000 (  1.015688)
#       times:    1.000000   0.000000   1.000000 (  1.003611)
#       upto:     1.030000   0.000000   1.030000 (  1.028098)
#
# * The times for some benchmarks depend on the order in which items
#   are run.  These differences are due to the cost of memory
#   allocation and garbage collection. To avoid these discrepancies,
#   the #bmbm method is provided.  For example, to compare ways to
#   sort an array of floats:
#
#       require 'benchmark'
#
#       array = (1..1000000).map { rand }
#
#       Benchmark.bmbm do |x|
#         x.report("sort!") { array.dup.sort! }
#         x.report("sort")  { array.dup.sort  }
#       end
#
#   The result:
#
#        Rehearsal -----------------------------------------
#        sort!   1.490000   0.010000   1.500000 (  1.490520)
#        sort    1.460000   0.000000   1.460000 (  1.463025)
#        -------------------------------- total: 2.960000sec
#
#                    user     system      total        real
#        sort!   1.460000   0.000000   1.460000 (  1.460465)
#        sort    1.450000   0.010000   1.460000 (  1.448327)
#
# * Report statistics of sequential experiments with unique labels,
#   using the #benchmark method:
#
#       require 'benchmark'
#       include Benchmark         # we need the CAPTION and FORMAT constants
#
#       n = 5000000
#       Benchmark.benchmark(CAPTION, 7, FORMAT, ">total:", ">avg:") do |x|
#         tf = x.report("for:")   { for i in 1..n; a = "1"; end }
#         tt = x.report("times:") { n.times do   ; a = "1"; end }
#         tu = x.report("upto:")  { 1.upto(n) do ; a = "1"; end }
#         [tf+tt+tu, (tf+tt+tu)/3]
#       end
#
#   The result:
#
#                     user     system      total        real
#        for:      0.950000   0.000000   0.950000 (  0.952039)
#        times:    0.980000   0.000000   0.980000 (  0.984938)
#        upto:     0.950000   0.000000   0.950000 (  0.946787)
#        >total:   2.880000   0.000000   2.880000 (  2.883764)
#        >avg:     0.960000   0.000000   0.960000 (  0.961255)

module Benchmark

  VERSION = "0.4.0"

  BENCHMARK_VERSION = "2002-04-25" # :nodoc:

  # Invokes the block with a Benchmark::Report object, which
  # may be used to collect and report on the results of individual
  # benchmark tests. Reserves +label_width+ leading spaces for
  # labels on each line. Prints +caption+ at the top of the
  # report, and uses +format+ to format each line.
  # (Note: +caption+ must contain a terminating newline character,
  # see the default Benchmark::Tms::CAPTION for an example.)
  #
  # Returns an array of Benchmark::Tms objects.
  #
  # If the block returns an array of
  # Benchmark::Tms objects, these will be used to format
  # additional lines of output. If +labels+ parameter are
  # given, these are used to label these extra lines.
  #
  # _Note_: Other methods provide a simpler interface to this one, and are
  # suitable for nearly all benchmarking requirements.  See the examples in
  # Benchmark, and the #bm and #bmbm methods.
  #
  # Example:
  #
  #     require 'benchmark'
  #     include Benchmark          # we need the CAPTION and FORMAT constants
  #
  #     n = 5000000
  #     Benchmark.benchmark(CAPTION, 7, FORMAT, ">total:", ">avg:") do |x|
  #       tf = x.report("for:")   { for i in 1..n; a = "1"; end }
  #       tt = x.report("times:") { n.times do   ; a = "1"; end }
  #       tu = x.report("upto:")  { 1.upto(n) do ; a = "1"; end }
  #       [tf+tt+tu, (tf+tt+tu)/3]
  #     end
  #
  # Generates:
  #
  #                     user     system      total        real
  #       for:      0.970000   0.000000   0.970000 (  0.970493)
  #       times:    0.990000   0.000000   0.990000 (  0.989542)
  #       upto:     0.970000   0.000000   0.970000 (  0.972854)
  #       >total:   2.930000   0.000000   2.930000 (  2.932889)
  #       >avg:     0.976667   0.000000   0.976667 (  0.977630)
  #

  def benchmark(caption = "", label_width = nil, format = nil, *labels) # :yield: report
    sync = $stdout.sync
    $stdout.sync = true
    label_width ||= 0
    label_width += 1
    format ||= FORMAT
    report = Report.new(label_width, format)
    results = yield(report)

    print " " * report.width + caption unless caption.empty?
    report.list.each { |i|
      print i.label.to_s.ljust(report.width)
      print i.format(report.format, *format)
    }

    Array === results and results.grep(Tms).each {|t|
      print((labels.shift || t.label || "").ljust(label_width), t.format(format))
    }
    report.list
  ensure
    $stdout.sync = sync unless sync.nil?
  end


  # A simple interface to the #benchmark method, #bm generates sequential
  # reports with labels. +label_width+ and +labels+ parameters have the same
  # meaning as for #benchmark.
  #
  #     require 'benchmark'
  #
  #     n = 5000000
  #     Benchmark.bm(7) do |x|
  #       x.report("for:")   { for i in 1..n; a = "1"; end }
  #       x.report("times:") { n.times do   ; a = "1"; end }
  #       x.report("upto:")  { 1.upto(n) do ; a = "1"; end }
  #     end
  #
  # Generates:
  #
  #                     user     system      total        real
  #       for:      0.960000   0.000000   0.960000 (  0.957966)
  #       times:    0.960000   0.000000   0.960000 (  0.960423)
  #       upto:     0.950000   0.000000   0.950000 (  0.954864)
  #

  def bm(label_width = 0, *labels, &blk) # :yield: report
    benchmark(CAPTION, label_width, FORMAT, *labels, &blk)
  end


  # Sometimes benchmark results are skewed because code executed
  # earlier encounters different garbage collection overheads than
  # that run later. #bmbm attempts to minimize this effect by running
  # the tests twice, the first time as a rehearsal in order to get the
  # runtime environment stable, the second time for
  # real. GC.start is executed before the start of each of
  # the real timings; the cost of this is not included in the
  # timings. In reality, though, there's only so much that #bmbm can
  # do, and the results are not guaranteed to be isolated from garbage
  # collection and other effects.
  #
  # Because #bmbm takes two passes through the tests, it can
  # calculate the required label width.
  #
  #       require 'benchmark'
  #
  #       array = (1..1000000).map { rand }
  #
  #       Benchmark.bmbm do |x|
  #         x.report("sort!") { array.dup.sort! }
  #         x.report("sort")  { array.dup.sort  }
  #       end
  #
  # Generates:
  #
  #        Rehearsal -----------------------------------------
  #        sort!   1.440000   0.010000   1.450000 (  1.446833)
  #        sort    1.440000   0.000000   1.440000 (  1.448257)
  #        -------------------------------- total: 2.890000sec
  #
  #                    user     system      total        real
  #        sort!   1.460000   0.000000   1.460000 (  1.458065)
  #        sort    1.450000   0.000000   1.450000 (  1.455963)
  #
  # #bmbm yields a Benchmark::Job object and returns an array of
  # Benchmark::Tms objects.
  #
  def bmbm(width = 0) # :yield: job
    job = Job.new(width)
    yield(job)
    width = job.width + 1
    sync = $stdout.sync
    $stdout.sync = true

    # rehearsal
    puts 'Rehearsal '.ljust(width+CAPTION.length,'-')
    ets = job.list.inject(Tms.new) { |sum,(label,item)|
      print label.ljust(width)
      res = Benchmark.measure(&item)
      print res.format
      sum + res
    }.format("total: %tsec")
    print " #{ets}\n\n".rjust(width+CAPTION.length+2,'-')

    # take
    print ' '*width + CAPTION
    job.list.map { |label,item|
      GC.start
      print label.ljust(width)
      Benchmark.measure(label, &item).tap { |res| print res }
    }
  ensure
    $stdout.sync = sync unless sync.nil?
  end

  #
  # Returns the time used to execute the given block as a
  # Benchmark::Tms object. Takes +label+ option.
  #
  #       require 'benchmark'
  #
  #       n = 1000000
  #
  #       time = Benchmark.measure do
  #         n.times { a = "1" }
  #       end
  #       puts time
  #
  # Generates:
  #
  #        0.220000   0.000000   0.220000 (  0.227313)
  #
  def measure(label = "") # :yield:
    t0, r0 = Process.times, Process.clock_gettime(Process::CLOCK_MONOTONIC)
    yield
    t1, r1 = Process.times, Process.clock_gettime(Process::CLOCK_MONOTONIC)
    Benchmark::Tms.new(t1.utime  - t0.utime,
                       t1.stime  - t0.stime,
                       t1.cutime - t0.cutime,
                       t1.cstime - t0.cstime,
                       r1 - r0,
                       label)
  end

  #
  # Returns the elapsed real time used to execute the given block.
  # The unit of time is seconds.
  #
  #       Benchmark.realtime { "a" * 1_000_000_000 }
  #       #=> 0.5098029999935534
  #
  def realtime # :yield:
    r0 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
    yield
    Process.clock_gettime(Process::CLOCK_MONOTONIC) - r0
  end

  module_function :benchmark, :measure, :realtime, :bm, :bmbm

  #
  # A Job is a sequence of labelled blocks to be processed by the
  # Benchmark.bmbm method.  It is of little direct interest to the user.
  #
  class Job # :nodoc:
    #
    # Returns an initialized Job instance.
    # Usually, one doesn't call this method directly, as new
    # Job objects are created by the #bmbm method.
    # +width+ is a initial value for the label offset used in formatting;
    # the #bmbm method passes its +width+ argument to this constructor.
    #
    def initialize(width)
      @width = width
      @list = []
    end

    #
    # Registers the given label and block pair in the job list.
    #
    def item(label = "", &blk) # :yield:
      raise ArgumentError, "no block" unless block_given?
      label = label.to_s
      w = label.length
      @width = w if @width < w
      @list << [label, blk]
      self
    end

    alias report item

    # An array of 2-element arrays, consisting of label and block pairs.
    attr_reader :list

    # Length of the widest label in the #list.
    attr_reader :width
  end

  #
  # This class is used by the Benchmark.benchmark and Benchmark.bm methods.
  # It is of little direct interest to the user.
  #
  class Report # :nodoc:
    #
    # Returns an initialized Report instance.
    # Usually, one doesn't call this method directly, as new
    # Report objects are created by the #benchmark and #bm methods.
    # +width+ and +format+ are the label offset and
    # format string used by Tms#format.
    #
    def initialize(width = 0, format = nil)
      @width, @format, @list = width, format, []
    end

    #
    # Prints the +label+ and measured time for the block,
    # formatted by +format+. See Tms#format for the
    # formatting rules.
    #
    def item(label = "", *format, &blk) # :yield:
      w = label.to_s.length
      @width = w if @width < w
      @list << res = Benchmark.measure(label, &blk)
      res
    end

    alias report item

    # An array of Benchmark::Tms objects representing each item.
    attr_reader :width, :format, :list
  end



  #
  # A data object, representing the times associated with a benchmark
  # measurement.
  #
  class Tms

    # Default caption, see also Benchmark::CAPTION
    CAPTION = "      user     system      total        real\n"

    # Default format string, see also Benchmark::FORMAT
    FORMAT = "%10.6u %10.6y %10.6t %10.6r\n"

    # User CPU time
    attr_reader :utime

    # System CPU time
    attr_reader :stime

    # User CPU time of children
    attr_reader :cutime

    # System CPU time of children
    attr_reader :cstime

    # Elapsed real time
    attr_reader :real

    # Total time, that is +utime+ + +stime+ + +cutime+ + +cstime+
    attr_reader :total

    # Label
    attr_reader :label

    #
    # Returns an initialized Tms object which has
    # +utime+ as the user CPU time, +stime+ as the system CPU time,
    # +cutime+ as the children's user CPU time, +cstime+ as the children's
    # system CPU time, +real+ as the elapsed real time and +label+ as the label.
    #
    def initialize(utime = 0.0, stime = 0.0, cutime = 0.0, cstime = 0.0, real = 0.0, label = nil)
      @utime, @stime, @cutime, @cstime, @real, @label = utime, stime, cutime, cstime, real, label.to_s
      @total = @utime + @stime + @cutime + @cstime
    end

    #
    # Returns a new Tms object whose times are the sum of the times for this
    # Tms object, plus the time required to execute the code block (+blk+).
    #
    def add(&blk) # :yield:
      self + Benchmark.measure(&blk)
    end

    #
    # An in-place version of #add.
    # Changes the times of this Tms object by making it the sum of the times
    # for this Tms object, plus the time required to execute
    # the code block (+blk+).
    #
    def add!(&blk)
      t = Benchmark.measure(&blk)
      @utime  = utime + t.utime
      @stime  = stime + t.stime
      @cutime = cutime + t.cutime
      @cstime = cstime + t.cstime
      @real   = real + t.real
      self
    end

    #
    # Returns a new Tms object obtained by memberwise summation
    # of the individual times for this Tms object with those of the +other+
    # Tms object.
    # This method and #/() are useful for taking statistics.
    #
    def +(other); memberwise(:+, other) end

    #
    # Returns a new Tms object obtained by memberwise subtraction
    # of the individual times for the +other+ Tms object from those of this
    # Tms object.
    #
    def -(other); memberwise(:-, other) end

    #
    # Returns a new Tms object obtained by memberwise multiplication
    # of the individual times for this Tms object by +x+.
    #
    def *(x); memberwise(:*, x) end

    #
    # Returns a new Tms object obtained by memberwise division
    # of the individual times for this Tms object by +x+.
    # This method and #+() are useful for taking statistics.
    #
    def /(x); memberwise(:/, x) end

    #
    # Returns the contents of this Tms object as
    # a formatted string, according to a +format+ string
    # like that passed to Kernel.format. In addition, #format
    # accepts the following extensions:
    #
    # <tt>%u</tt>::     Replaced by the user CPU time, as reported by Tms#utime.
    # <tt>%y</tt>::     Replaced by the system CPU time, as reported by #stime (Mnemonic: y of "s*y*stem")
    # <tt>%U</tt>::     Replaced by the children's user CPU time, as reported by Tms#cutime
    # <tt>%Y</tt>::     Replaced by the children's system CPU time, as reported by Tms#cstime
    # <tt>%t</tt>::     Replaced by the total CPU time, as reported by Tms#total
    # <tt>%r</tt>::     Replaced by the elapsed real time, as reported by Tms#real
    # <tt>%n</tt>::     Replaced by the label string, as reported by Tms#label (Mnemonic: n of "*n*ame")
    #
    # If +format+ is not given, FORMAT is used as default value, detailing the
    # user, system and real elapsed time.
    #
    def format(format = nil, *args)
      str = (format || FORMAT).dup
      str.gsub!(/(%[-+.\d]*)n/) { "#{$1}s" % label }
      str.gsub!(/(%[-+.\d]*)u/) { "#{$1}f" % utime }
      str.gsub!(/(%[-+.\d]*)y/) { "#{$1}f" % stime }
      str.gsub!(/(%[-+.\d]*)U/) { "#{$1}f" % cutime }
      str.gsub!(/(%[-+.\d]*)Y/) { "#{$1}f" % cstime }
      str.gsub!(/(%[-+.\d]*)t/) { "#{$1}f" % total }
      str.gsub!(/(%[-+.\d]*)r/) { "(#{$1}f)" % real }
      format ? str % args : str
    end

    #
    # Same as #format.
    #
    def to_s
      format
    end

    #
    # Returns a new 6-element array, consisting of the
    # label, user CPU time, system CPU time, children's
    # user CPU time, children's system CPU time and elapsed
    # real time.
    #
    def to_a
      [@label, @utime, @stime, @cutime, @cstime, @real]
    end

    #
    # Returns a hash containing the same data as `to_a`.
    #
    def to_h
      {
        label:  @label,
        utime:  @utime,
        stime:  @stime,
        cutime: @cutime,
        cstime: @cstime,
        real:   @real
      }
    end

    protected

    #
    # Returns a new Tms object obtained by memberwise operation +op+
    # of the individual times for this Tms object with those of the other
    # Tms object (+x+).
    #
    # +op+ can be a mathematical operation such as <tt>+</tt>, <tt>-</tt>,
    # <tt>*</tt>, <tt>/</tt>
    #
    def memberwise(op, x)
      case x
      when Benchmark::Tms
        Benchmark::Tms.new(utime.__send__(op, x.utime),
                           stime.__send__(op, x.stime),
                           cutime.__send__(op, x.cutime),
                           cstime.__send__(op, x.cstime),
                           real.__send__(op, x.real)
                           )
      else
        Benchmark::Tms.new(utime.__send__(op, x),
                           stime.__send__(op, x),
                           cutime.__send__(op, x),
                           cstime.__send__(op, x),
                           real.__send__(op, x)
                           )
      end
    end
  end

  # The default caption string (heading above the output times).
  CAPTION = Benchmark::Tms::CAPTION

  # The default format string used to display times.  See also Benchmark::Tms#format.
  FORMAT = Benchmark::Tms::FORMAT
end
PK*J[�@|�ddshare/ruby/set.rbnu�[���# frozen_string_literal: true
# :markup: markdown
#
# set.rb - defines the Set class
#
# Copyright (c) 2002-2024 Akinori MUSHA <knu@iDaemons.org>
#
# Documentation by Akinori MUSHA and Gavin Sinclair.
#
# All rights reserved.  You can redistribute and/or modify it under the same
# terms as Ruby.


##
# This library provides the Set class, which implements a collection
# of unordered values with no duplicates. It is a hybrid of Array's
# intuitive inter-operation facilities and Hash's fast lookup.
#
# The method `to_set` is added to Enumerable for convenience.
#
# Set is easy to use with Enumerable objects (implementing `each`).
# Most of the initializer methods and binary operators accept generic
# Enumerable objects besides sets and arrays.  An Enumerable object
# can be converted to Set using the `to_set` method.
#
# Set uses Hash as storage, so you must note the following points:
#
# * Equality of elements is determined according to Object#eql? and
#   Object#hash.  Use Set#compare_by_identity to make a set compare
#   its elements by their identity.
# * Set assumes that the identity of each element does not change
#   while it is stored.  Modifying an element of a set will render the
#   set to an unreliable state.
# * When a string is to be stored, a frozen copy of the string is
#   stored instead unless the original string is already frozen.
#
# ## Comparison
#
# The comparison operators `<`, `>`, `<=`, and `>=` are implemented as
# shorthand for the {proper_,}{subset?,superset?} methods.  The `<=>`
# operator reflects this order, or return `nil` for sets that both
# have distinct elements (`{x, y}` vs. `{x, z}` for example).
#
# ## Example
#
# ```ruby
# require 'set'
# s1 = Set[1, 2]                        #=> #<Set: {1, 2}>
# s2 = [1, 2].to_set                    #=> #<Set: {1, 2}>
# s1 == s2                              #=> true
# s1.add("foo")                         #=> #<Set: {1, 2, "foo"}>
# s1.merge([2, 6])                      #=> #<Set: {1, 2, "foo", 6}>
# s1.subset?(s2)                        #=> false
# s2.subset?(s1)                        #=> true
# ```
#
# ## Contact
#
# - Akinori MUSHA <<knu@iDaemons.org>> (current maintainer)
#
# ## What's Here
#
#  First, what's elsewhere. \Class \Set:
#
# - Inherits from {class Object}[rdoc-ref:Object@What-27s+Here].
# - Includes {module Enumerable}[rdoc-ref:Enumerable@What-27s+Here],
#   which provides dozens of additional methods.
#
# In particular, class \Set does not have many methods of its own
# for fetching or for iterating.
# Instead, it relies on those in \Enumerable.
#
# Here, class \Set provides methods that are useful for:
#
# - [Creating a Set](#class-Set-label-Methods+for+Creating+a+Set)
# - [Set Operations](#class-Set-label-Methods+for+Set+Operations)
# - [Comparing](#class-Set-label-Methods+for+Comparing)
# - [Querying](#class-Set-label-Methods+for+Querying)
# - [Assigning](#class-Set-label-Methods+for+Assigning)
# - [Deleting](#class-Set-label-Methods+for+Deleting)
# - [Converting](#class-Set-label-Methods+for+Converting)
# - [Iterating](#class-Set-label-Methods+for+Iterating)
# - [And more....](#class-Set-label-Other+Methods)
#
# ### Methods for Creating a \Set
#
# - ::[]:
#   Returns a new set containing the given objects.
# - ::new:
#   Returns a new set containing either the given objects
#   (if no block given) or the return values from the called block
#   (if a block given).
#
# ### Methods for \Set Operations
#
# - [|](#method-i-7C) (aliased as #union and #+):
#   Returns a new set containing all elements from +self+
#   and all elements from a given enumerable (no duplicates).
# - [&](#method-i-26) (aliased as #intersection):
#   Returns a new set containing all elements common to +self+
#   and a given enumerable.
# - [-](#method-i-2D) (aliased as #difference):
#   Returns a copy of +self+ with all elements
#   in a given enumerable removed.
# - [\^](#method-i-5E):
#   Returns a new set containing all elements from +self+
#   and a given enumerable except those common to both.
#
# ### Methods for Comparing
#
# - [<=>](#method-i-3C-3D-3E):
#   Returns -1, 0, or 1 as +self+ is less than, equal to,
#   or greater than a given object.
# - [==](#method-i-3D-3D):
#   Returns whether +self+ and a given enumerable are equal,
#   as determined by Object#eql?.
# - \#compare_by_identity?:
#   Returns whether the set considers only identity
#   when comparing elements.
#
# ### Methods for Querying
#
# - \#length (aliased as #size):
#   Returns the count of elements.
# - \#empty?:
#   Returns whether the set has no elements.
# - \#include? (aliased as #member? and #===):
#   Returns whether a given object is an element in the set.
# - \#subset? (aliased as [<=](#method-i-3C-3D)):
#   Returns whether a given object is a subset of the set.
# - \#proper_subset? (aliased as [<](#method-i-3C)):
#   Returns whether a given enumerable is a proper subset of the set.
# - \#superset? (aliased as [>=](#method-i-3E-3D])):
#   Returns whether a given enumerable is a superset of the set.
# - \#proper_superset? (aliased as [>](#method-i-3E)):
#   Returns whether a given enumerable is a proper superset of the set.
# - \#disjoint?:
#   Returns +true+ if the set and a given enumerable
#   have no common elements, +false+ otherwise.
# - \#intersect?:
#   Returns +true+ if the set and a given enumerable:
#   have any common elements, +false+ otherwise.
# - \#compare_by_identity?:
#   Returns whether the set considers only identity
#   when comparing elements.
#
# ### Methods for Assigning
#
# - \#add (aliased as #<<):
#   Adds a given object to the set; returns +self+.
# - \#add?:
#   If the given object is not an element in the set,
#   adds it and returns +self+; otherwise, returns +nil+.
# - \#merge:
#   Merges the elements of each given enumerable object to the set; returns +self+.
# - \#replace:
#   Replaces the contents of the set with the contents
#   of a given enumerable.
#
# ### Methods for Deleting
#
# - \#clear:
#   Removes all elements in the set; returns +self+.
# - \#delete:
#   Removes a given object from the set; returns +self+.
# - \#delete?:
#   If the given object is an element in the set,
#   removes it and returns +self+; otherwise, returns +nil+.
# - \#subtract:
#   Removes each given object from the set; returns +self+.
# - \#delete_if - Removes elements specified by a given block.
# - \#select! (aliased as #filter!):
#   Removes elements not specified by a given block.
# - \#keep_if:
#   Removes elements not specified by a given block.
# - \#reject!
#   Removes elements specified by a given block.
#
# ### Methods for Converting
#
# - \#classify:
#   Returns a hash that classifies the elements,
#   as determined by the given block.
# - \#collect! (aliased as #map!):
#   Replaces each element with a block return-value.
# - \#divide:
#   Returns a hash that classifies the elements,
#   as determined by the given block;
#   differs from #classify in that the block may accept
#   either one or two arguments.
# - \#flatten:
#   Returns a new set that is a recursive flattening of +self+.
#  \#flatten!:
#   Replaces each nested set in +self+ with the elements from that set.
# - \#inspect (aliased as #to_s):
#   Returns a string displaying the elements.
# - \#join:
#   Returns a string containing all elements, converted to strings
#   as needed, and joined by the given record separator.
# - \#to_a:
#   Returns an array containing all set elements.
# - \#to_set:
#   Returns +self+ if given no arguments and no block;
#   with a block given, returns a new set consisting of block
#   return values.
#
# ### Methods for Iterating
#
# - \#each:
#   Calls the block with each successive element; returns +self+.
#
# ### Other Methods
#
# - \#reset:
#   Resets the internal state; useful if an object
#   has been modified while an element in the set.
#
class Set
  VERSION = "1.1.1"

  include Enumerable

  # Creates a new set containing the given objects.
  #
  #     Set[1, 2]                   # => #<Set: {1, 2}>
  #     Set[1, 2, 1]                # => #<Set: {1, 2}>
  #     Set[1, 'c', :s]             # => #<Set: {1, "c", :s}>
  def self.[](*ary)
    new(ary)
  end

  # Creates a new set containing the elements of the given enumerable
  # object.
  #
  # If a block is given, the elements of enum are preprocessed by the
  # given block.
  #
  #     Set.new([1, 2])                       #=> #<Set: {1, 2}>
  #     Set.new([1, 2, 1])                    #=> #<Set: {1, 2}>
  #     Set.new([1, 'c', :s])                 #=> #<Set: {1, "c", :s}>
  #     Set.new(1..5)                         #=> #<Set: {1, 2, 3, 4, 5}>
  #     Set.new([1, 2, 3]) { |x| x * x }      #=> #<Set: {1, 4, 9}>
  def initialize(enum = nil, &block) # :yields: o
    @hash ||= Hash.new(false)

    enum.nil? and return

    if block
      do_with_enum(enum) { |o| add(block[o]) }
    else
      merge(enum)
    end
  end

  # Makes the set compare its elements by their identity and returns
  # self.  This method may not be supported by all subclasses of Set.
  def compare_by_identity
    if @hash.respond_to?(:compare_by_identity)
      @hash.compare_by_identity
      self
    else
      raise NotImplementedError, "#{self.class.name}\##{__method__} is not implemented"
    end
  end

  # Returns true if the set will compare its elements by their
  # identity.  Also see Set#compare_by_identity.
  def compare_by_identity?
    @hash.respond_to?(:compare_by_identity?) && @hash.compare_by_identity?
  end

  def do_with_enum(enum, &block) # :nodoc:
    if enum.respond_to?(:each_entry)
      enum.each_entry(&block) if block
    elsif enum.respond_to?(:each)
      enum.each(&block) if block
    else
      raise ArgumentError, "value must be enumerable"
    end
  end
  private :do_with_enum

  # Dup internal hash.
  def initialize_dup(orig)
    super
    @hash = orig.instance_variable_get(:@hash).dup
  end

  # Clone internal hash.
  def initialize_clone(orig, **options)
    super
    @hash = orig.instance_variable_get(:@hash).clone(**options)
  end

  def freeze    # :nodoc:
    @hash.freeze
    super
  end

  # Returns the number of elements.
  def size
    @hash.size
  end
  alias length size

  # Returns true if the set contains no elements.
  def empty?
    @hash.empty?
  end

  # Removes all elements and returns self.
  #
  #     set = Set[1, 'c', :s]             #=> #<Set: {1, "c", :s}>
  #     set.clear                         #=> #<Set: {}>
  #     set                               #=> #<Set: {}>
  def clear
    @hash.clear
    self
  end

  # Replaces the contents of the set with the contents of the given
  # enumerable object and returns self.
  #
  #     set = Set[1, 'c', :s]             #=> #<Set: {1, "c", :s}>
  #     set.replace([1, 2])               #=> #<Set: {1, 2}>
  #     set                               #=> #<Set: {1, 2}>
  def replace(enum)
    if enum.instance_of?(self.class)
      @hash.replace(enum.instance_variable_get(:@hash))
      self
    else
      do_with_enum(enum)  # make sure enum is enumerable before calling clear
      clear
      merge(enum)
    end
  end

  # Returns an array containing all elements in the set.
  #
  #     Set[1, 2].to_a                    #=> [1, 2]
  #     Set[1, 'c', :s].to_a              #=> [1, "c", :s]
  def to_a
    @hash.keys
  end

  # Returns self if no arguments are given.  Otherwise, converts the
  # set to another with `klass.new(self, *args, &block)`.
  #
  # In subclasses, returns `klass.new(self, *args, &block)` unless
  # overridden.
  def to_set(klass = Set, *args, &block)
    return self if instance_of?(Set) && klass == Set && block.nil? && args.empty?
    klass.new(self, *args, &block)
  end

  def flatten_merge(set, seen = {}) # :nodoc:
    set.each { |e|
      if e.is_a?(Set)
        case seen[e_id = e.object_id]
        when true
          raise ArgumentError, "tried to flatten recursive Set"
        when false
          next
        end

        seen[e_id] = true
        flatten_merge(e, seen)
        seen[e_id] = false
      else
        add(e)
      end
    }

    self
  end
  protected :flatten_merge

  # Returns a new set that is a copy of the set, flattening each
  # containing set recursively.
  def flatten
    self.class.new.flatten_merge(self)
  end

  # Equivalent to Set#flatten, but replaces the receiver with the
  # result in place.  Returns nil if no modifications were made.
  def flatten!
    replace(flatten()) if any?(Set)
  end

  # Returns true if the set contains the given object.
  #
  # Note that <code>include?</code> and <code>member?</code> do not test member
  # equality using <code>==</code> as do other Enumerables.
  #
  # See also Enumerable#include?
  def include?(o)
    @hash[o]
  end
  alias member? include?

  # Returns true if the set is a superset of the given set.
  def superset?(set)
    case
    when set.instance_of?(self.class) && @hash.respond_to?(:>=)
      @hash >= set.instance_variable_get(:@hash)
    when set.is_a?(Set)
      size >= set.size && set.all?(self)
    else
      raise ArgumentError, "value must be a set"
    end
  end
  alias >= superset?

  # Returns true if the set is a proper superset of the given set.
  def proper_superset?(set)
    case
    when set.instance_of?(self.class) && @hash.respond_to?(:>)
      @hash > set.instance_variable_get(:@hash)
    when set.is_a?(Set)
      size > set.size && set.all?(self)
    else
      raise ArgumentError, "value must be a set"
    end
  end
  alias > proper_superset?

  # Returns true if the set is a subset of the given set.
  def subset?(set)
    case
    when set.instance_of?(self.class) && @hash.respond_to?(:<=)
      @hash <= set.instance_variable_get(:@hash)
    when set.is_a?(Set)
      size <= set.size && all?(set)
    else
      raise ArgumentError, "value must be a set"
    end
  end
  alias <= subset?

  # Returns true if the set is a proper subset of the given set.
  def proper_subset?(set)
    case
    when set.instance_of?(self.class) && @hash.respond_to?(:<)
      @hash < set.instance_variable_get(:@hash)
    when set.is_a?(Set)
      size < set.size && all?(set)
    else
      raise ArgumentError, "value must be a set"
    end
  end
  alias < proper_subset?

  # Returns 0 if the set are equal,
  # -1 / +1 if the set is a proper subset / superset of the given set,
  # or nil if they both have unique elements.
  def <=>(set)
    return unless set.is_a?(Set)

    case size <=> set.size
    when -1 then -1 if proper_subset?(set)
    when +1 then +1 if proper_superset?(set)
    else 0 if self.==(set)
    end
  end

  # Returns true if the set and the given enumerable have at least one
  # element in common.
  #
  #     Set[1, 2, 3].intersect? Set[4, 5]   #=> false
  #     Set[1, 2, 3].intersect? Set[3, 4]   #=> true
  #     Set[1, 2, 3].intersect? 4..5        #=> false
  #     Set[1, 2, 3].intersect? [3, 4]      #=> true
  def intersect?(set)
    case set
    when Set
      if size < set.size
        any?(set)
      else
        set.any?(self)
      end
    when Enumerable
      set.any?(self)
    else
      raise ArgumentError, "value must be enumerable"
    end
  end

  # Returns true if the set and the given enumerable have
  # no element in common.  This method is the opposite of `intersect?`.
  #
  #     Set[1, 2, 3].disjoint? Set[3, 4]   #=> false
  #     Set[1, 2, 3].disjoint? Set[4, 5]   #=> true
  #     Set[1, 2, 3].disjoint? [3, 4]      #=> false
  #     Set[1, 2, 3].disjoint? 4..5        #=> true
  def disjoint?(set)
    !intersect?(set)
  end

  # Calls the given block once for each element in the set, passing
  # the element as parameter.  Returns an enumerator if no block is
  # given.
  def each(&block)
    block_given? or return enum_for(__method__) { size }
    @hash.each_key(&block)
    self
  end

  # Adds the given object to the set and returns self.  Use `merge` to
  # add many elements at once.
  #
  #     Set[1, 2].add(3)                    #=> #<Set: {1, 2, 3}>
  #     Set[1, 2].add([3, 4])               #=> #<Set: {1, 2, [3, 4]}>
  #     Set[1, 2].add(2)                    #=> #<Set: {1, 2}>
  def add(o)
    @hash[o] = true
    self
  end
  alias << add

  # Adds the given object to the set and returns self.  If the
  # object is already in the set, returns nil.
  #
  #     Set[1, 2].add?(3)                    #=> #<Set: {1, 2, 3}>
  #     Set[1, 2].add?([3, 4])               #=> #<Set: {1, 2, [3, 4]}>
  #     Set[1, 2].add?(2)                    #=> nil
  def add?(o)
    add(o) unless include?(o)
  end

  # Deletes the given object from the set and returns self.  Use
  # `subtract` to delete many items at once.
  def delete(o)
    @hash.delete(o)
    self
  end

  # Deletes the given object from the set and returns self.  If the
  # object is not in the set, returns nil.
  def delete?(o)
    delete(o) if include?(o)
  end

  # Deletes every element of the set for which block evaluates to
  # true, and returns self. Returns an enumerator if no block is
  # given.
  def delete_if(&block)
    block_given? or return enum_for(__method__) { size }
    # Instead of directly using @hash.delete_if, perform enumeration
    # using self.each that subclasses may override.
    select(&block).each { |o| @hash.delete(o) }
    self
  end

  # Deletes every element of the set for which block evaluates to
  # false, and returns self. Returns an enumerator if no block is
  # given.
  def keep_if(&block)
    block_given? or return enum_for(__method__) { size }
    # Instead of directly using @hash.keep_if, perform enumeration
    # using self.each that subclasses may override.
    reject(&block).each { |o| @hash.delete(o) }
    self
  end

  # Replaces the elements with ones returned by `collect()`.
  # Returns an enumerator if no block is given.
  def collect!
    block_given? or return enum_for(__method__) { size }
    set = self.class.new
    each { |o| set << yield(o) }
    replace(set)
  end
  alias map! collect!

  # Equivalent to Set#delete_if, but returns nil if no changes were
  # made. Returns an enumerator if no block is given.
  def reject!(&block)
    block_given? or return enum_for(__method__) { size }
    n = size
    delete_if(&block)
    self if size != n
  end

  # Equivalent to Set#keep_if, but returns nil if no changes were
  # made. Returns an enumerator if no block is given.
  def select!(&block)
    block_given? or return enum_for(__method__) { size }
    n = size
    keep_if(&block)
    self if size != n
  end

  # Equivalent to Set#select!
  alias filter! select!

  # Merges the elements of the given enumerable objects to the set and
  # returns self.
  def merge(*enums, **nil)
    enums.each do |enum|
      if enum.instance_of?(self.class)
        @hash.update(enum.instance_variable_get(:@hash))
      else
        do_with_enum(enum) { |o| add(o) }
      end
    end

    self
  end

  # Deletes every element that appears in the given enumerable object
  # and returns self.
  def subtract(enum)
    do_with_enum(enum) { |o| delete(o) }
    self
  end

  # Returns a new set built by merging the set and the elements of the
  # given enumerable object.
  #
  #     Set[1, 2, 3] | Set[2, 4, 5]         #=> #<Set: {1, 2, 3, 4, 5}>
  #     Set[1, 5, 'z'] | (1..6)             #=> #<Set: {1, 5, "z", 2, 3, 4, 6}>
  def |(enum)
    dup.merge(enum)
  end
  alias + |
  alias union |

  # Returns a new set built by duplicating the set, removing every
  # element that appears in the given enumerable object.
  #
  #     Set[1, 3, 5] - Set[1, 5]                #=> #<Set: {3}>
  #     Set['a', 'b', 'z'] - ['a', 'c']         #=> #<Set: {"b", "z"}>
  def -(enum)
    dup.subtract(enum)
  end
  alias difference -

  # Returns a new set containing elements common to the set and the
  # given enumerable object.
  #
  #     Set[1, 3, 5] & Set[3, 2, 1]             #=> #<Set: {3, 1}>
  #     Set['a', 'b', 'z'] & ['a', 'b', 'c']    #=> #<Set: {"a", "b"}>
  def &(enum)
    n = self.class.new
    if enum.is_a?(Set)
      if enum.size > size
        each { |o| n.add(o) if enum.include?(o) }
      else
        enum.each { |o| n.add(o) if include?(o) }
      end
    else
      do_with_enum(enum) { |o| n.add(o) if include?(o) }
    end
    n
  end
  alias intersection &

  # Returns a new set containing elements exclusive between the set
  # and the given enumerable object.  `(set ^ enum)` is equivalent to
  # `((set | enum) - (set & enum))`.
  #
  #     Set[1, 2] ^ Set[2, 3]                   #=> #<Set: {3, 1}>
  #     Set[1, 'b', 'c'] ^ ['b', 'd']           #=> #<Set: {"d", 1, "c"}>
  def ^(enum)
    n = self.class.new(enum)
    each { |o| n.add(o) unless n.delete?(o) }
    n
  end

  # Returns true if two sets are equal.  The equality of each couple
  # of elements is defined according to Object#eql?.
  #
  #     Set[1, 2] == Set[2, 1]                       #=> true
  #     Set[1, 3, 5] == Set[1, 5]                    #=> false
  #     Set['a', 'b', 'c'] == Set['a', 'c', 'b']     #=> true
  #     Set['a', 'b', 'c'] == ['a', 'c', 'b']        #=> false
  def ==(other)
    if self.equal?(other)
      true
    elsif other.instance_of?(self.class)
      @hash == other.instance_variable_get(:@hash)
    elsif other.is_a?(Set) && self.size == other.size
      other.all? { |o| @hash.include?(o) }
    else
      false
    end
  end

  def hash      # :nodoc:
    @hash.hash
  end

  def eql?(o)   # :nodoc:
    return false unless o.is_a?(Set)
    @hash.eql?(o.instance_variable_get(:@hash))
  end

  # Resets the internal state after modification to existing elements
  # and returns self.
  #
  # Elements will be reindexed and deduplicated.
  def reset
    if @hash.respond_to?(:rehash)
      @hash.rehash # This should perform frozenness check.
    else
      raise FrozenError, "can't modify frozen #{self.class.name}" if frozen?
    end
    self
  end

  # Returns true if the given object is a member of the set,
  # and false otherwise.
  #
  # Used in case statements:
  #
  #     require 'set'
  #
  #     case :apple
  #     when Set[:potato, :carrot]
  #       "vegetable"
  #     when Set[:apple, :banana]
  #       "fruit"
  #     end
  #     # => "fruit"
  #
  # Or by itself:
  #
  #     Set[1, 2, 3] === 2   #=> true
  #     Set[1, 2, 3] === 4   #=> false
  #
  alias === include?

  # Classifies the set by the return value of the given block and
  # returns a hash of {value => set of elements} pairs.  The block is
  # called once for each element of the set, passing the element as
  # parameter.
  #
  #     require 'set'
  #     files = Set.new(Dir.glob("*.rb"))
  #     hash = files.classify { |f| File.mtime(f).year }
  #     hash       #=> {2000=>#<Set: {"a.rb", "b.rb"}>,
  #                #    2001=>#<Set: {"c.rb", "d.rb", "e.rb"}>,
  #                #    2002=>#<Set: {"f.rb"}>}
  #
  # Returns an enumerator if no block is given.
  def classify # :yields: o
    block_given? or return enum_for(__method__) { size }

    h = {}

    each { |i|
      (h[yield(i)] ||= self.class.new).add(i)
    }

    h
  end

  # Divides the set into a set of subsets according to the commonality
  # defined by the given block.
  #
  # If the arity of the block is 2, elements o1 and o2 are in common
  # if block.call(o1, o2) is true.  Otherwise, elements o1 and o2 are
  # in common if block.call(o1) == block.call(o2).
  #
  #     require 'set'
  #     numbers = Set[1, 3, 4, 6, 9, 10, 11]
  #     set = numbers.divide { |i,j| (i - j).abs == 1 }
  #     set        #=> #<Set: {#<Set: {1}>,
  #                #           #<Set: {11, 9, 10}>,
  #                #           #<Set: {3, 4}>,
  #                #           #<Set: {6}>}>
  #
  # Returns an enumerator if no block is given.
  def divide(&func)
    func or return enum_for(__method__) { size }

    if func.arity == 2
      require 'tsort'

      class << dig = {}         # :nodoc:
        include TSort

        alias tsort_each_node each_key
        def tsort_each_child(node, &block)
          fetch(node).each(&block)
        end
      end

      each { |u|
        dig[u] = a = []
        each{ |v| func.call(u, v) and a << v }
      }

      set = Set.new()
      dig.each_strongly_connected_component { |css|
        set.add(self.class.new(css))
      }
      set
    else
      Set.new(classify(&func).values)
    end
  end

  # Returns a string created by converting each element of the set to a string
  # See also: Array#join
  def join(separator=nil)
    to_a.join(separator)
  end

  InspectKey = :__inspect_key__         # :nodoc:

  # Returns a string containing a human-readable representation of the
  # set ("#<Set: {element1, element2, ...}>").
  def inspect
    ids = (Thread.current[InspectKey] ||= [])

    if ids.include?(object_id)
      return sprintf('#<%s: {...}>', self.class.name)
    end

    ids << object_id
    begin
      return sprintf('#<%s: {%s}>', self.class, to_a.inspect[1..-2])
    ensure
      ids.pop
    end
  end

  alias to_s inspect

  def pretty_print(pp)  # :nodoc:
    pp.group(1, sprintf('#<%s:', self.class.name), '>') {
      pp.breakable
      pp.group(1, '{', '}') {
        pp.seplist(self) { |o|
          pp.pp o
        }
      }
    }
  end

  def pretty_print_cycle(pp)    # :nodoc:
    pp.text sprintf('#<%s: {%s}>', self.class.name, empty? ? '' : '...')
  end
end

module Enumerable
  # Makes a set from the enumerable object with given arguments.
  # Needs to `require "set"` to use this method.
  def to_set(klass = Set, *args, &block)
    klass.new(self, *args, &block)
  end unless method_defined?(:to_set)
end

autoload :SortedSet, "#{__dir__}/set/sorted_set"
PK*J[m�gD%9%9share/ruby/tsort.rbnu�[���# frozen_string_literal: true

#--
# tsort.rb - provides a module for topological sorting and strongly connected components.
#++
#

#
# TSort implements topological sorting using Tarjan's algorithm for
# strongly connected components.
#
# TSort is designed to be able to be used with any object which can be
# interpreted as a directed graph.
#
# TSort requires two methods to interpret an object as a graph,
# tsort_each_node and tsort_each_child.
#
# * tsort_each_node is used to iterate for all nodes over a graph.
# * tsort_each_child is used to iterate for child nodes of a given node.
#
# The equality of nodes are defined by eql? and hash since
# TSort uses Hash internally.
#
# == A Simple Example
#
# The following example demonstrates how to mix the TSort module into an
# existing class (in this case, Hash). Here, we're treating each key in
# the hash as a node in the graph, and so we simply alias the required
# #tsort_each_node method to Hash's #each_key method. For each key in the
# hash, the associated value is an array of the node's child nodes. This
# choice in turn leads to our implementation of the required #tsort_each_child
# method, which fetches the array of child nodes and then iterates over that
# array using the user-supplied block.
#
#   require 'tsort'
#
#   class Hash
#     include TSort
#     alias tsort_each_node each_key
#     def tsort_each_child(node, &block)
#       fetch(node).each(&block)
#     end
#   end
#
#   {1=>[2, 3], 2=>[3], 3=>[], 4=>[]}.tsort
#   #=> [3, 2, 1, 4]
#
#   {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}.strongly_connected_components
#   #=> [[4], [2, 3], [1]]
#
# == A More Realistic Example
#
# A very simple `make' like tool can be implemented as follows:
#
#   require 'tsort'
#
#   class Make
#     def initialize
#       @dep = {}
#       @dep.default = []
#     end
#
#     def rule(outputs, inputs=[], &block)
#       triple = [outputs, inputs, block]
#       outputs.each {|f| @dep[f] = [triple]}
#       @dep[triple] = inputs
#     end
#
#     def build(target)
#       each_strongly_connected_component_from(target) {|ns|
#         if ns.length != 1
#           fs = ns.delete_if {|n| Array === n}
#           raise TSort::Cyclic.new("cyclic dependencies: #{fs.join ', '}")
#         end
#         n = ns.first
#         if Array === n
#           outputs, inputs, block = n
#           inputs_time = inputs.map {|f| File.mtime f}.max
#           begin
#             outputs_time = outputs.map {|f| File.mtime f}.min
#           rescue Errno::ENOENT
#             outputs_time = nil
#           end
#           if outputs_time == nil ||
#              inputs_time != nil && outputs_time <= inputs_time
#             sleep 1 if inputs_time != nil && inputs_time.to_i == Time.now.to_i
#             block.call
#           end
#         end
#       }
#     end
#
#     def tsort_each_child(node, &block)
#       @dep[node].each(&block)
#     end
#     include TSort
#   end
#
#   def command(arg)
#     print arg, "\n"
#     system arg
#   end
#
#   m = Make.new
#   m.rule(%w[t1]) { command 'date > t1' }
#   m.rule(%w[t2]) { command 'date > t2' }
#   m.rule(%w[t3]) { command 'date > t3' }
#   m.rule(%w[t4], %w[t1 t3]) { command 'cat t1 t3 > t4' }
#   m.rule(%w[t5], %w[t4 t2]) { command 'cat t4 t2 > t5' }
#   m.build('t5')
#
# == Bugs
#
# * 'tsort.rb' is wrong name because this library uses
#   Tarjan's algorithm for strongly connected components.
#   Although 'strongly_connected_components.rb' is correct but too long.
#
# == References
#
# R. E. Tarjan, "Depth First Search and Linear Graph Algorithms",
# <em>SIAM Journal on Computing</em>, Vol. 1, No. 2, pp. 146-160, June 1972.
#

module TSort

  VERSION = "0.2.0"

  class Cyclic < StandardError
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # If there is a cycle, TSort::Cyclic is raised.
  #
  #   class G
  #     include TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.tsort #=> [4, 2, 3, 1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.tsort # raises TSort::Cyclic
  #
  def tsort
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    TSort.tsort(each_node, each_child)
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  # If there is a cycle, TSort::Cyclic is raised.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p TSort.tsort(each_node, each_child) #=> [4, 2, 3, 1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p TSort.tsort(each_node, each_child) # raises TSort::Cyclic
  #
  def self.tsort(each_node, each_child)
    tsort_each(each_node, each_child).to_a
  end

  # The iterator version of the #tsort method.
  # <tt><em>obj</em>.tsort_each</tt> is similar to <tt><em>obj</em>.tsort.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #tsort_each returns +nil+.
  # If there is a cycle, TSort::Cyclic is raised.
  #
  #   class G
  #     include TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.tsort_each {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def tsort_each(&block) # :yields: node
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    TSort.tsort_each(each_node, each_child, &block)
  end

  # The iterator version of the TSort.tsort method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   TSort.tsort_each(each_node, each_child) {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def self.tsort_each(each_node, each_child) # :yields: node
    return to_enum(__method__, each_node, each_child) unless block_given?

    each_strongly_connected_component(each_node, each_child) {|component|
      if component.size == 1
        yield component.first
      else
        raise Cyclic.new("topological sort failed: #{component.inspect}")
      end
    }
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  #   class G
  #     include TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2], [3], [1]]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2, 3], [1]]
  #
  def strongly_connected_components
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    TSort.strongly_connected_components(each_node, each_child)
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2], [3], [1]]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2, 3], [1]]
  #
  def self.strongly_connected_components(each_node, each_child)
    each_strongly_connected_component(each_node, each_child).to_a
  end

  # The iterator version of the #strongly_connected_components method.
  # <tt><em>obj</em>.each_strongly_connected_component</tt> is similar to
  # <tt><em>obj</em>.strongly_connected_components.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #each_strongly_connected_component returns +nil+.
  #
  #   class G
  #     include TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def each_strongly_connected_component(&block) # :yields: nodes
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    TSort.each_strongly_connected_component(each_node, each_child, &block)
  end

  # The iterator version of the TSort.strongly_connected_components method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component(each_node, each_child) # :yields: nodes
    return to_enum(__method__, each_node, each_child) unless block_given?

    id_map = {}
    stack = []
    each_node.call {|node|
      unless id_map.include? node
        each_strongly_connected_component_from(node, each_child, id_map, stack) {|c|
          yield c
        }
      end
    }
    nil
  end

  # Iterates over strongly connected component in the subgraph reachable from
  # _node_.
  #
  # Return value is unspecified.
  #
  # #each_strongly_connected_component_from doesn't call #tsort_each_node.
  #
  #   class G
  #     include TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #
  def each_strongly_connected_component_from(node, id_map={}, stack=[], &block) # :yields: nodes
    TSort.each_strongly_connected_component_from(node, method(:tsort_each_child), id_map, stack, &block)
  end

  # Iterates over strongly connected components in a graph.
  # The graph is represented by _node_ and _each_child_.
  #
  # _node_ is the first node.
  # _each_child_ should have +call+ method which takes a node argument
  # and yields for each child node.
  #
  # Return value is unspecified.
  #
  # #TSort.each_strongly_connected_component_from is a class method and
  # it doesn't need a class to represent a graph which includes TSort.
  #
  #   graph = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_child = lambda {|n, &b| graph[n].each(&b) }
  #   TSort.each_strongly_connected_component_from(1, each_child) {|scc|
  #     p scc
  #   }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component_from(node, each_child, id_map={}, stack=[]) # :yields: nodes
    return to_enum(__method__, node, each_child, id_map, stack) unless block_given?

    minimum_id = node_id = id_map[node] = id_map.size
    stack_length = stack.length
    stack << node

    each_child.call(node) {|child|
      if id_map.include? child
        child_id = id_map[child]
        minimum_id = child_id if child_id && child_id < minimum_id
      else
        sub_minimum_id =
          each_strongly_connected_component_from(child, each_child, id_map, stack) {|c|
            yield c
          }
        minimum_id = sub_minimum_id if sub_minimum_id < minimum_id
      end
    }

    if node_id == minimum_id
      component = stack.slice!(stack_length .. -1)
      component.each {|n| id_map[n] = nil}
      yield component
    end

    minimum_id
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_node is used to iterate for all nodes over a graph.
  #
  def tsort_each_node # :yields: node
    raise NotImplementedError.new
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_child is used to iterate for child nodes of _node_.
  #
  def tsort_each_child(node) # :yields: child
    raise NotImplementedError.new
  end
end
PK*J[�:i7share/ruby/digest/sha2.rbnu�[���# frozen_string_literal: false
#--
# sha2.rb - defines Digest::SHA2 class which wraps up the SHA256,
#           SHA384, and SHA512 classes.
#++
# Copyright (c) 2006 Akinori MUSHA <knu@iDaemons.org>
#
# All rights reserved.  You can redistribute and/or modify it under the same
# terms as Ruby.
#
#   $Id$

require 'digest'
require 'digest/sha2/loader'

module Digest
  #
  # A meta digest provider class for SHA256, SHA384 and SHA512.
  #
  # FIPS 180-2 describes SHA2 family of digest algorithms. It defines
  # three algorithms:
  # * one which works on chunks of 512 bits and returns a 256-bit
  #   digest (SHA256),
  # * one which works on chunks of 1024 bits and returns a 384-bit
  #   digest (SHA384),
  # * and one which works on chunks of 1024 bits and returns a 512-bit
  #   digest (SHA512).
  #
  # ==Examples
  #  require 'digest'
  #
  #  # Compute a complete digest
  #  Digest::SHA2.hexdigest 'abc'          # => "ba7816bf8..."
  #  Digest::SHA2.new(256).hexdigest 'abc' # => "ba7816bf8..."
  #  Digest::SHA256.hexdigest 'abc'        # => "ba7816bf8..."
  #
  #  Digest::SHA2.new(384).hexdigest 'abc' # => "cb00753f4..."
  #  Digest::SHA384.hexdigest 'abc'        # => "cb00753f4..."
  #
  #  Digest::SHA2.new(512).hexdigest 'abc' # => "ddaf35a19..."
  #  Digest::SHA512.hexdigest 'abc'        # => "ddaf35a19..."
  #
  #  # Compute digest by chunks
  #  sha2 = Digest::SHA2.new               # =>#<Digest::SHA2:256>
  #  sha2.update "ab"
  #  sha2 << "c"                           # alias for #update
  #  sha2.hexdigest                        # => "ba7816bf8..."
  #
  #  # Use the same object to compute another digest
  #  sha2.reset
  #  sha2 << "message"
  #  sha2.hexdigest                        # => "ab530a13e..."
  #
  class SHA2 < Digest::Class
    # call-seq:
    #   Digest::SHA2.new(bitlen = 256) -> digest_obj
    #
    # Create a new SHA2 hash object with a given bit length.
    #
    # Valid bit lengths are 256, 384 and 512.
    def initialize(bitlen = 256)
      case bitlen
      when 256
        @sha2 = Digest::SHA256.new
      when 384
        @sha2 = Digest::SHA384.new
      when 512
        @sha2 = Digest::SHA512.new
      else
        raise ArgumentError, "unsupported bit length: %s" % bitlen.inspect
      end
      @bitlen = bitlen
    end

    # call-seq:
    #   digest_obj.reset -> digest_obj
    #
    # Reset the digest to the initial state and return self.
    def reset
      @sha2.reset
      self
    end

    # call-seq:
    #   digest_obj.update(string) -> digest_obj
    #   digest_obj << string -> digest_obj
    #
    # Update the digest using a given _string_ and return self.
    def update(str)
      @sha2.update(str)
      self
    end
    alias << update

    def finish # :nodoc:
      @sha2.digest!
    end
    private :finish


    # call-seq:
    #   digest_obj.block_length -> Integer
    #
    # Return the block length of the digest in bytes.
    #
    #   Digest::SHA256.new.block_length * 8
    #   # => 512
    #   Digest::SHA384.new.block_length * 8
    #   # => 1024
    #   Digest::SHA512.new.block_length * 8
    #   # => 1024
    def block_length
      @sha2.block_length
    end

    # call-seq:
    #   digest_obj.digest_length -> Integer
    #
    # Return the length of the hash value (the digest) in bytes.
    #
    #   Digest::SHA256.new.digest_length * 8
    #   # => 256
    #   Digest::SHA384.new.digest_length * 8
    #   # => 384
    #   Digest::SHA512.new.digest_length * 8
    #   # => 512
    #
    # For example, digests produced by Digest::SHA256 will always be 32 bytes
    # (256 bits) in size.
    def digest_length
      @sha2.digest_length
    end

    def initialize_copy(other) # :nodoc:
      @sha2 = other.instance_eval { @sha2.clone }
    end

    def inspect # :nodoc:
      "#<%s:%d %s>" % [self.class.name, @bitlen, hexdigest]
    end
  end
end
PK*J[24�Z88 share/ruby/digest/sha2/loader.rbnu�[���# frozen_string_literal: true

require 'digest/sha2.so'
PK*J[�JF�EEshare/ruby/digest/version.rbnu�[���# frozen_string_literal: true

module Digest
  VERSION = "3.2.0"
end
PK*J[�6�33share/ruby/digest/loader.rbnu�[���# frozen_string_literal: true

require 'digest.so'
PK*J[�v88 share/ruby/ruby_vm/rjit/block.rbnu�[���class RubyVM::RJIT::Block < Struct.new(
  :iseq,        # @param ``
  :pc,          # @param [Integer] Starting PC
  :ctx,         # @param [RubyVM::RJIT::Context] **Starting** Context (TODO: freeze?)
  :start_addr,  # @param [Integer] Starting address of this block's JIT code
  :entry_exit,  # @param [Integer] Address of entry exit (optional)
  :incoming,    # @param [Array<RubyVM::RJIT::BranchStub>] Incoming branches
  :invalidated, # @param [TrueClass,FalseClass] true if already invalidated
)
  def initialize(incoming: [], invalidated: false, **) = super
end
PK*J[�x2.�,�,"share/ruby/ruby_vm/rjit/context.rbnu�[���module RubyVM::RJIT
  # Maximum number of temp value types we keep track of
  MAX_TEMP_TYPES = 8
  # Maximum number of local variable types we keep track of
  MAX_LOCAL_TYPES = 8

  # Operand to a YARV bytecode instruction
  SelfOpnd = :SelfOpnd # The value is self
  StackOpnd = Data.define(:index) # Temporary stack operand with stack index

  # Potential mapping of a value on the temporary stack to self,
  # a local variable, or constant so that we can track its type
  MapToStack = :MapToStack # Normal stack value
  MapToSelf  = :MapToSelf  # Temp maps to the self operand
  MapToLocal = Data.define(:local_index) # Temp maps to a local variable with index

  class Context < Struct.new(
    :stack_size,   # @param [Integer] The number of values on the stack
    :sp_offset,    # @param [Integer] JIT sp offset relative to the interpreter's sp
    :chain_depth,  # @param [Integer] jit_chain_guard depth
    :local_types,  # @param [Array<RubyVM::RJIT::Type>] Local variable types we keep track of
    :temp_types,   # @param [Array<RubyVM::RJIT::Type>] Temporary variable types we keep track of
    :self_type,    # @param [RubyVM::RJIT::Type] Type we track for self
    :temp_mapping, # @param [Array<Symbol>] Mapping of temp stack entries to types we track
  )
    def initialize(
      stack_size:   0,
      sp_offset:    0,
      chain_depth:  0,
      local_types:  [Type::Unknown] * MAX_LOCAL_TYPES,
      temp_types:   [Type::Unknown] * MAX_TEMP_TYPES,
      self_type:    Type::Unknown,
      temp_mapping: [MapToStack] * MAX_TEMP_TYPES
    ) = super

    # Deep dup by default for safety
    def dup
      ctx = super
      ctx.local_types = ctx.local_types.dup
      ctx.temp_types = ctx.temp_types.dup
      ctx.temp_mapping = ctx.temp_mapping.dup
      ctx
    end

    # Create a new Context instance with a given stack_size and sp_offset adjusted
    # accordingly. This is useful when you want to virtually rewind a stack_size for
    # generating a side exit while considering past sp_offset changes on gen_save_sp.
    def with_stack_size(stack_size)
      ctx = self.dup
      ctx.sp_offset -= ctx.stack_size - stack_size
      ctx.stack_size = stack_size
      ctx
    end

    def stack_opnd(depth_from_top)
      [SP, C.VALUE.size * (self.sp_offset - 1 - depth_from_top)]
    end

    def sp_opnd(offset_bytes = 0)
      [SP, (C.VALUE.size * self.sp_offset) + offset_bytes]
    end

    # Push one new value on the temp stack with an explicit mapping
    # Return a pointer to the new stack top
    def stack_push_mapping(mapping_temp_type)
      stack_size = self.stack_size

      # Keep track of the type and mapping of the value
      if stack_size < MAX_TEMP_TYPES
        mapping, temp_type = mapping_temp_type
        self.temp_mapping[stack_size] = mapping
        self.temp_types[stack_size] = temp_type

        case mapping
        in MapToLocal[idx]
          assert(idx < MAX_LOCAL_TYPES)
        else
        end
      end

      self.stack_size += 1
      self.sp_offset += 1

      return self.stack_opnd(0)
    end

    # Push one new value on the temp stack
    # Return a pointer to the new stack top
    def stack_push(val_type)
      return self.stack_push_mapping([MapToStack, val_type])
    end

    # Push the self value on the stack
    def stack_push_self
      return self.stack_push_mapping([MapToStack, Type::Unknown])
    end

    # Push a local variable on the stack
    def stack_push_local(local_idx)
      if local_idx >= MAX_LOCAL_TYPES
        return self.stack_push(Type::Unknown)
      end

      return self.stack_push_mapping([MapToLocal[local_idx], Type::Unknown])
    end

    # Pop N values off the stack
    # Return a pointer to the stack top before the pop operation
    def stack_pop(n = 1)
      assert(n <= self.stack_size)

      top = self.stack_opnd(0)

      # Clear the types of the popped values
      n.times do |i|
        idx = self.stack_size - i - 1

        if idx < MAX_TEMP_TYPES
          self.temp_types[idx] = Type::Unknown
          self.temp_mapping[idx] = MapToStack
        end
      end

      self.stack_size -= n
      self.sp_offset -= n

      return top
    end

    def shift_stack(argc)
      assert(argc < self.stack_size)

      method_name_index = self.stack_size - argc - 1

      (method_name_index...(self.stack_size - 1)).each do |i|
        if i + 1 < MAX_TEMP_TYPES
          self.temp_types[i] = self.temp_types[i + 1]
          self.temp_mapping[i] = self.temp_mapping[i + 1]
        end
      end
      self.stack_pop(1)
    end

    # Get the type of an instruction operand
    def get_opnd_type(opnd)
      case opnd
      in SelfOpnd
        self.self_type
      in StackOpnd[idx]
        assert(idx < self.stack_size)
        stack_idx = self.stack_size - 1 - idx

        # If outside of tracked range, do nothing
        if stack_idx >= MAX_TEMP_TYPES
          return Type::Unknown
        end

        mapping = self.temp_mapping[stack_idx]

        case mapping
        in MapToSelf
          self.self_type
        in MapToStack
          self.temp_types[self.stack_size - 1 - idx]
        in MapToLocal[idx]
          assert(idx < MAX_LOCAL_TYPES)
          self.local_types[idx]
        end
      end
    end

    # Get the currently tracked type for a local variable
    def get_local_type(idx)
      self.local_types[idx] || Type::Unknown
    end

    # Upgrade (or "learn") the type of an instruction operand
    # This value must be compatible and at least as specific as the previously known type.
    # If this value originated from self, or an lvar, the learned type will be
    # propagated back to its source.
    def upgrade_opnd_type(opnd, opnd_type)
      case opnd
      in SelfOpnd
        self.self_type = self.self_type.upgrade(opnd_type)
      in StackOpnd[idx]
        assert(idx < self.stack_size)
        stack_idx = self.stack_size - 1 - idx

        # If outside of tracked range, do nothing
        if stack_idx >= MAX_TEMP_TYPES
          return
        end

        mapping = self.temp_mapping[stack_idx]

        case mapping
        in MapToSelf
          self.self_type = self.self_type.upgrade(opnd_type)
        in MapToStack
          self.temp_types[stack_idx] = self.temp_types[stack_idx].upgrade(opnd_type)
        in MapToLocal[idx]
          assert(idx < MAX_LOCAL_TYPES)
          self.local_types[idx] = self.local_types[idx].upgrade(opnd_type)
        end
      end
    end

    # Get both the type and mapping (where the value originates) of an operand.
    # This is can be used with stack_push_mapping or set_opnd_mapping to copy
    # a stack value's type while maintaining the mapping.
    def get_opnd_mapping(opnd)
      opnd_type = self.get_opnd_type(opnd)

      case opnd
      in SelfOpnd
        return [MapToSelf, opnd_type]
      in StackOpnd[idx]
        assert(idx < self.stack_size)
        stack_idx = self.stack_size - 1 - idx

        if stack_idx < MAX_TEMP_TYPES
          return [self.temp_mapping[stack_idx], opnd_type]
        else
          # We can't know the source of this stack operand, so we assume it is
          # a stack-only temporary. type will be UNKNOWN
          assert(opnd_type == Type::Unknown)
          return [MapToStack, opnd_type]
        end
      end
    end

    # Overwrite both the type and mapping of a stack operand.
    def set_opnd_mapping(opnd, mapping_opnd_type)
      case opnd
      in SelfOpnd
        raise 'self always maps to self'
      in StackOpnd[idx]
        assert(idx < self.stack_size)
        stack_idx = self.stack_size - 1 - idx

        # If outside of tracked range, do nothing
        if stack_idx >= MAX_TEMP_TYPES
          return
        end

        mapping, opnd_type = mapping_opnd_type
        self.temp_mapping[stack_idx] = mapping

        # Only used when mapping == MAP_STACK
        self.temp_types[stack_idx] = opnd_type
      end
    end

    # Set the type of a local variable
    def set_local_type(local_idx, local_type)
      if local_idx >= MAX_LOCAL_TYPES
        return
      end

      # If any values on the stack map to this local we must detach them
      MAX_TEMP_TYPES.times do |stack_idx|
        case self.temp_mapping[stack_idx]
        in MapToStack
          # noop
        in MapToSelf
          # noop
        in MapToLocal[idx]
          if idx == local_idx
            self.temp_types[stack_idx] = self.local_types[idx]
            self.temp_mapping[stack_idx] = MapToStack
          else
            # noop
          end
        end
      end

      self.local_types[local_idx] = local_type
    end

    # Erase local variable type information
    # eg: because of a call we can't track
    def clear_local_types
      # When clearing local types we must detach any stack mappings to those
      # locals. Even if local values may have changed, stack values will not.
      MAX_TEMP_TYPES.times do |stack_idx|
        case self.temp_mapping[stack_idx]
        in MapToStack
          # noop
        in MapToSelf
          # noop
        in MapToLocal[local_idx]
          self.temp_types[stack_idx] = self.local_types[local_idx]
          self.temp_mapping[stack_idx] = MapToStack
        end
      end

      # Clear the local types
      self.local_types = [Type::Unknown] * MAX_LOCAL_TYPES
    end

    # Compute a difference score for two context objects
    def diff(dst)
      # Self is the source context (at the end of the predecessor)
      src = self

      # Can only lookup the first version in the chain
      if dst.chain_depth != 0
        return TypeDiff::Incompatible
      end

      # Blocks with depth > 0 always produce new versions
      # Sidechains cannot overlap
      if src.chain_depth != 0
        return TypeDiff::Incompatible
      end

      if dst.stack_size != src.stack_size
        return TypeDiff::Incompatible
      end

      if dst.sp_offset != src.sp_offset
        return TypeDiff::Incompatible
      end

      # Difference sum
      diff = 0

      # Check the type of self
      diff += case src.self_type.diff(dst.self_type)
      in TypeDiff::Compatible[diff] then diff
      in TypeDiff::Incompatible then return TypeDiff::Incompatible
      end

      # For each local type we track
      src.local_types.size.times do |i|
        t_src = src.local_types[i]
        t_dst = dst.local_types[i]
        diff += case t_src.diff(t_dst)
        in TypeDiff::Compatible[diff] then diff
        in TypeDiff::Incompatible then return TypeDiff::Incompatible
        end
      end

      # For each value on the temp stack
      src.stack_size.times do |i|
        src_mapping, src_type = src.get_opnd_mapping(StackOpnd[i])
        dst_mapping, dst_type = dst.get_opnd_mapping(StackOpnd[i])

        # If the two mappings aren't the same
        if src_mapping != dst_mapping
          if dst_mapping == MapToStack
            # We can safely drop information about the source of the temp
            # stack operand.
            diff += 1
          else
            return TypeDiff::Incompatible
          end
        end

        diff += case src_type.diff(dst_type)
        in TypeDiff::Compatible[diff] then diff
        in TypeDiff::Incompatible then return TypeDiff::Incompatible
        end
      end

      return TypeDiff::Compatible[diff]
    end

    private

    def assert(cond)
      unless cond
        raise "'#{cond.inspect}' was not true"
      end
    end
  end
end
PK*J[��		%share/ruby/ruby_vm/rjit/code_block.rbnu�[���module RubyVM::RJIT
  class CodeBlock
    # @param mem_block [Integer] JIT buffer address
    # @param mem_size  [Integer] JIT buffer size
    # @param outliend  [TrueClass,FalseClass] true for outlined CodeBlock
    def initialize(mem_block:, mem_size:, outlined: false)
      @comments  = Hash.new { |h, k| h[k] = [] } if dump_disasm?
      @mem_block = mem_block
      @mem_size  = mem_size
      @write_pos = 0
      @outlined  = outlined
    end

    # @param asm [RubyVM::RJIT::Assembler]
    def write(asm)
      return 0 if @write_pos + asm.size >= @mem_size

      start_addr = write_addr

      # Write machine code
      C.mprotect_write(@mem_block, @mem_size)
      @write_pos += asm.assemble(start_addr)
      C.mprotect_exec(@mem_block, @mem_size)

      end_addr = write_addr

      # Convert comment indexes to addresses
      asm.comments.each do |index, comments|
        @comments[start_addr + index] += comments if dump_disasm?
      end
      asm.comments.clear

      # Dump disasm if --rjit-dump-disasm
      if C.rjit_opts.dump_disasm && start_addr < end_addr
        dump_disasm(start_addr, end_addr)
      end
      start_addr
    end

    def set_write_addr(addr)
      @write_pos = addr - @mem_block
      @comments.delete(addr) if dump_disasm?
    end

    def with_write_addr(addr)
      old_write_pos = @write_pos
      set_write_addr(addr)
      yield
    ensure
      @write_pos = old_write_pos
    end

    def write_addr
      @mem_block + @write_pos
    end

    def include?(addr)
      (@mem_block...(@mem_block + @mem_size)).include?(addr)
    end

    def dump_disasm(from, to, io: STDOUT, color: true, test: false)
      C.dump_disasm(from, to, test:).each do |address, mnemonic, op_str|
        @comments.fetch(address, []).each do |comment|
          io.puts colorize("  # #{comment}", bold: true, color:)
        end
        io.puts colorize("  0x#{format("%x", address)}: #{mnemonic} #{op_str}", color:)
      end
      io.puts
    end

    private

    def colorize(text, bold: false, color:)
      return text unless color
      buf = +''
      buf << "\e[1m" if bold
      buf << "\e[34m" if @outlined
      buf << text
      buf << "\e[0m"
      buf
    end

    def bold(text)
      "\e[1m#{text}\e[0m"
    end

    def dump_disasm?
      C.rjit_opts.dump_disasm
    end
  end
end
PK*J[�����%share/ruby/ruby_vm/rjit/invariants.rbnu�[���require 'set'

module RubyVM::RJIT
  class Invariants
    class << self
      # Called by RubyVM::RJIT::Compiler to lazily initialize this
      # @param cb [CodeBlock]
      # @param ocb [CodeBlock]
      # @param compiler [RubyVM::RJIT::Compiler]
      # @param exit_compiler [RubyVM::RJIT::ExitCompiler]
      def initialize(cb, ocb, compiler, exit_compiler)
        @cb = cb
        @ocb = ocb
        @compiler = compiler
        @exit_compiler = exit_compiler
        @bop_blocks = Set.new # TODO: actually invalidate this
        @cme_blocks = Hash.new { |h, k| h[k] = Set.new }
        @const_blocks = Hash.new { |h, k| h[k] = Set.new }
        @patches = {}

        # freeze # workaround a binding.irb issue. TODO: resurrect this
      end

      # @param jit [RubyVM::RJIT::JITState]
      # @param klass [Integer]
      # @param op [Integer]
      def assume_bop_not_redefined(jit, klass, op)
        return false unless C.BASIC_OP_UNREDEFINED_P(klass, op)

        ensure_block_entry_exit(jit, cause: 'assume_bop_not_redefined')
        @bop_blocks << jit.block
        true
      end

      # @param jit [RubyVM::RJIT::JITState]
      def assume_method_lookup_stable(jit, cme)
        ensure_block_entry_exit(jit, cause: 'assume_method_lookup_stable')
        @cme_blocks[cme.to_i] << jit.block
      end

      # @param jit [RubyVM::RJIT::JITState]
      def assume_method_basic_definition(jit, klass, mid)
        if C.rb_method_basic_definition_p(klass, mid)
          cme = C.rb_callable_method_entry(klass, mid)
          assume_method_lookup_stable(jit, cme)
          true
        else
          false
        end
      end

      def assume_stable_constant_names(jit, idlist)
        (0..).each do |i|
          break if (id = idlist[i]) == 0
          @const_blocks[id] << jit.block
        end
      end

      # @param asm [RubyVM::RJIT::Assembler]
      def record_global_inval_patch(asm, target)
        asm.pos_marker do |address|
          if @patches.key?(address)
            raise 'multiple patches in the same address'
          end
          @patches[address] = target
        end
      end

      def on_cme_invalidate(cme)
        @cme_blocks.fetch(cme.to_i, []).each do |block|
          @cb.with_write_addr(block.start_addr) do
            asm = Assembler.new
            asm.comment('on_cme_invalidate')
            asm.jmp(block.entry_exit)
            @cb.write(asm)
          end
          # TODO: re-generate branches that refer to this block
        end
        @cme_blocks.delete(cme.to_i)
      end

      def on_constant_ic_update(iseq, ic, insn_idx)
        # TODO: check multi ractor as well
        if ic.entry.ic_cref
          # No need to recompile the slowpath
          return
        end

        pc = iseq.body.iseq_encoded + insn_idx
        insn_name = Compiler.decode_insn(pc.*).name
        if insn_name != :opt_getconstant_path && insn_name != :trace_opt_getconstant_path
          raise 'insn_idx was not at opt_getconstant_path'
        end
        if ic.to_i != pc[1]
          raise 'insn_idx + 1 was not at the updated IC'
        end
        @compiler.invalidate_blocks(iseq, pc.to_i)
      end

      def on_constant_state_changed(id)
        @const_blocks.fetch(id, []).each do |block|
          @compiler.invalidate_block(block)
        end
      end

      def on_tracing_invalidate_all
        invalidate_all
      end

      def on_update_references
        # Give up. In order to support GC.compact, you'd have to update ISEQ
        # addresses in BranchStub, etc. Ideally, we'd need to update moved
        # pointers in JITed code here, but we just invalidate all for now.
        invalidate_all
      end

      # @param jit [RubyVM::RJIT::JITState]
      # @param block [RubyVM::RJIT::Block]
      def ensure_block_entry_exit(jit, cause:)
        block = jit.block
        if block.entry_exit.nil?
          block.entry_exit = Assembler.new.then do |asm|
            @exit_compiler.compile_entry_exit(block.pc, block.ctx, asm, cause:)
            @ocb.write(asm)
          end
        end
      end

      private

      def invalidate_all
        # On-Stack Replacement
        @patches.each do |address, target|
          # TODO: assert patches don't overlap each other
          @cb.with_write_addr(address) do
            asm = Assembler.new
            asm.comment('on_tracing_invalidate_all')
            asm.jmp(target)
            @cb.write(asm)
          end
        end
        @patches.clear

        C.rjit_for_each_iseq do |iseq|
          # Avoid entering past code
          iseq.body.jit_entry = 0
          # Avoid reusing past code
          iseq.body.rjit_blocks.clear if iseq.body.rjit_blocks
          # Compile this again if not converted to trace_* insns
          iseq.body.jit_entry_calls = 0
        end
      end
    end
  end
end
PK*J[ȍ�ҧ���&share/ruby/ruby_vm/rjit/instruction.rbnu�[���module RubyVM::RJIT # :nodoc: all
  Instruction = Data.define(:name, :bin, :len, :operands)

  INSNS = {
    0 => Instruction.new(
      name: :nop,
      bin: 0, # BIN(nop)
      len: 1, # insn_len
      operands: [],
    ),
    1 => Instruction.new(
      name: :getlocal,
      bin: 1, # BIN(getlocal)
      len: 3, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}],
    ),
    2 => Instruction.new(
      name: :setlocal,
      bin: 2, # BIN(setlocal)
      len: 3, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}],
    ),
    3 => Instruction.new(
      name: :getblockparam,
      bin: 3, # BIN(getblockparam)
      len: 3, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}],
    ),
    4 => Instruction.new(
      name: :setblockparam,
      bin: 4, # BIN(setblockparam)
      len: 3, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}],
    ),
    5 => Instruction.new(
      name: :getblockparamproxy,
      bin: 5, # BIN(getblockparamproxy)
      len: 3, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}],
    ),
    6 => Instruction.new(
      name: :getspecial,
      bin: 6, # BIN(getspecial)
      len: 3, # insn_len
      operands: [{:decl=>"rb_num_t key", :type=>"rb_num_t", :name=>"key"}, {:decl=>"rb_num_t type", :type=>"rb_num_t", :name=>"type"}],
    ),
    7 => Instruction.new(
      name: :setspecial,
      bin: 7, # BIN(setspecial)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t key", :type=>"rb_num_t", :name=>"key"}],
    ),
    8 => Instruction.new(
      name: :getinstancevariable,
      bin: 8, # BIN(getinstancevariable)
      len: 3, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"IVC ic", :type=>"IVC", :name=>"ic"}],
    ),
    9 => Instruction.new(
      name: :setinstancevariable,
      bin: 9, # BIN(setinstancevariable)
      len: 3, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"IVC ic", :type=>"IVC", :name=>"ic"}],
    ),
    10 => Instruction.new(
      name: :getclassvariable,
      bin: 10, # BIN(getclassvariable)
      len: 3, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ICVARC ic", :type=>"ICVARC", :name=>"ic"}],
    ),
    11 => Instruction.new(
      name: :setclassvariable,
      bin: 11, # BIN(setclassvariable)
      len: 3, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ICVARC ic", :type=>"ICVARC", :name=>"ic"}],
    ),
    12 => Instruction.new(
      name: :opt_getconstant_path,
      bin: 12, # BIN(opt_getconstant_path)
      len: 2, # insn_len
      operands: [{:decl=>"IC ic", :type=>"IC", :name=>"ic"}],
    ),
    13 => Instruction.new(
      name: :getconstant,
      bin: 13, # BIN(getconstant)
      len: 2, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}],
    ),
    14 => Instruction.new(
      name: :setconstant,
      bin: 14, # BIN(setconstant)
      len: 2, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}],
    ),
    15 => Instruction.new(
      name: :getglobal,
      bin: 15, # BIN(getglobal)
      len: 2, # insn_len
      operands: [{:decl=>"ID gid", :type=>"ID", :name=>"gid"}],
    ),
    16 => Instruction.new(
      name: :setglobal,
      bin: 16, # BIN(setglobal)
      len: 2, # insn_len
      operands: [{:decl=>"ID gid", :type=>"ID", :name=>"gid"}],
    ),
    17 => Instruction.new(
      name: :putnil,
      bin: 17, # BIN(putnil)
      len: 1, # insn_len
      operands: [],
    ),
    18 => Instruction.new(
      name: :putself,
      bin: 18, # BIN(putself)
      len: 1, # insn_len
      operands: [],
    ),
    19 => Instruction.new(
      name: :putobject,
      bin: 19, # BIN(putobject)
      len: 2, # insn_len
      operands: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}],
    ),
    20 => Instruction.new(
      name: :putspecialobject,
      bin: 20, # BIN(putspecialobject)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t value_type", :type=>"rb_num_t", :name=>"value_type"}],
    ),
    21 => Instruction.new(
      name: :putstring,
      bin: 21, # BIN(putstring)
      len: 2, # insn_len
      operands: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}],
    ),
    22 => Instruction.new(
      name: :putchilledstring,
      bin: 22, # BIN(putchilledstring)
      len: 2, # insn_len
      operands: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}],
    ),
    23 => Instruction.new(
      name: :concatstrings,
      bin: 23, # BIN(concatstrings)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}],
    ),
    24 => Instruction.new(
      name: :anytostring,
      bin: 24, # BIN(anytostring)
      len: 1, # insn_len
      operands: [],
    ),
    25 => Instruction.new(
      name: :toregexp,
      bin: 25, # BIN(toregexp)
      len: 3, # insn_len
      operands: [{:decl=>"rb_num_t opt", :type=>"rb_num_t", :name=>"opt"}, {:decl=>"rb_num_t cnt", :type=>"rb_num_t", :name=>"cnt"}],
    ),
    26 => Instruction.new(
      name: :intern,
      bin: 26, # BIN(intern)
      len: 1, # insn_len
      operands: [],
    ),
    27 => Instruction.new(
      name: :newarray,
      bin: 27, # BIN(newarray)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}],
    ),
    28 => Instruction.new(
      name: :pushtoarraykwsplat,
      bin: 28, # BIN(pushtoarraykwsplat)
      len: 1, # insn_len
      operands: [],
    ),
    29 => Instruction.new(
      name: :duparray,
      bin: 29, # BIN(duparray)
      len: 2, # insn_len
      operands: [{:decl=>"VALUE ary", :type=>"VALUE", :name=>"ary"}],
    ),
    30 => Instruction.new(
      name: :duphash,
      bin: 30, # BIN(duphash)
      len: 2, # insn_len
      operands: [{:decl=>"VALUE hash", :type=>"VALUE", :name=>"hash"}],
    ),
    31 => Instruction.new(
      name: :expandarray,
      bin: 31, # BIN(expandarray)
      len: 3, # insn_len
      operands: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}, {:decl=>"rb_num_t flag", :type=>"rb_num_t", :name=>"flag"}],
    ),
    32 => Instruction.new(
      name: :concatarray,
      bin: 32, # BIN(concatarray)
      len: 1, # insn_len
      operands: [],
    ),
    33 => Instruction.new(
      name: :concattoarray,
      bin: 33, # BIN(concattoarray)
      len: 1, # insn_len
      operands: [],
    ),
    34 => Instruction.new(
      name: :pushtoarray,
      bin: 34, # BIN(pushtoarray)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}],
    ),
    35 => Instruction.new(
      name: :splatarray,
      bin: 35, # BIN(splatarray)
      len: 2, # insn_len
      operands: [{:decl=>"VALUE flag", :type=>"VALUE", :name=>"flag"}],
    ),
    36 => Instruction.new(
      name: :splatkw,
      bin: 36, # BIN(splatkw)
      len: 1, # insn_len
      operands: [],
    ),
    37 => Instruction.new(
      name: :newhash,
      bin: 37, # BIN(newhash)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}],
    ),
    38 => Instruction.new(
      name: :newrange,
      bin: 38, # BIN(newrange)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t flag", :type=>"rb_num_t", :name=>"flag"}],
    ),
    39 => Instruction.new(
      name: :pop,
      bin: 39, # BIN(pop)
      len: 1, # insn_len
      operands: [],
    ),
    40 => Instruction.new(
      name: :dup,
      bin: 40, # BIN(dup)
      len: 1, # insn_len
      operands: [],
    ),
    41 => Instruction.new(
      name: :dupn,
      bin: 41, # BIN(dupn)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}],
    ),
    42 => Instruction.new(
      name: :swap,
      bin: 42, # BIN(swap)
      len: 1, # insn_len
      operands: [],
    ),
    43 => Instruction.new(
      name: :opt_reverse,
      bin: 43, # BIN(opt_reverse)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}],
    ),
    44 => Instruction.new(
      name: :topn,
      bin: 44, # BIN(topn)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}],
    ),
    45 => Instruction.new(
      name: :setn,
      bin: 45, # BIN(setn)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}],
    ),
    46 => Instruction.new(
      name: :adjuststack,
      bin: 46, # BIN(adjuststack)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}],
    ),
    47 => Instruction.new(
      name: :defined,
      bin: 47, # BIN(defined)
      len: 4, # insn_len
      operands: [{:decl=>"rb_num_t op_type", :type=>"rb_num_t", :name=>"op_type"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}, {:decl=>"VALUE pushval", :type=>"VALUE", :name=>"pushval"}],
    ),
    48 => Instruction.new(
      name: :definedivar,
      bin: 48, # BIN(definedivar)
      len: 4, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"IVC ic", :type=>"IVC", :name=>"ic"}, {:decl=>"VALUE pushval", :type=>"VALUE", :name=>"pushval"}],
    ),
    49 => Instruction.new(
      name: :checkmatch,
      bin: 49, # BIN(checkmatch)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t flag", :type=>"rb_num_t", :name=>"flag"}],
    ),
    50 => Instruction.new(
      name: :checkkeyword,
      bin: 50, # BIN(checkkeyword)
      len: 3, # insn_len
      operands: [{:decl=>"lindex_t kw_bits_index", :type=>"lindex_t", :name=>"kw_bits_index"}, {:decl=>"lindex_t keyword_index", :type=>"lindex_t", :name=>"keyword_index"}],
    ),
    51 => Instruction.new(
      name: :checktype,
      bin: 51, # BIN(checktype)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t type", :type=>"rb_num_t", :name=>"type"}],
    ),
    52 => Instruction.new(
      name: :defineclass,
      bin: 52, # BIN(defineclass)
      len: 4, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ISEQ class_iseq", :type=>"ISEQ", :name=>"class_iseq"}, {:decl=>"rb_num_t flags", :type=>"rb_num_t", :name=>"flags"}],
    ),
    53 => Instruction.new(
      name: :definemethod,
      bin: 53, # BIN(definemethod)
      len: 3, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ISEQ iseq", :type=>"ISEQ", :name=>"iseq"}],
    ),
    54 => Instruction.new(
      name: :definesmethod,
      bin: 54, # BIN(definesmethod)
      len: 3, # insn_len
      operands: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ISEQ iseq", :type=>"ISEQ", :name=>"iseq"}],
    ),
    55 => Instruction.new(
      name: :send,
      bin: 55, # BIN(send)
      len: 3, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}, {:decl=>"ISEQ blockiseq", :type=>"ISEQ", :name=>"blockiseq"}],
    ),
    56 => Instruction.new(
      name: :sendforward,
      bin: 56, # BIN(sendforward)
      len: 3, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}, {:decl=>"ISEQ blockiseq", :type=>"ISEQ", :name=>"blockiseq"}],
    ),
    57 => Instruction.new(
      name: :opt_send_without_block,
      bin: 57, # BIN(opt_send_without_block)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    58 => Instruction.new(
      name: :objtostring,
      bin: 58, # BIN(objtostring)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    59 => Instruction.new(
      name: :opt_ary_freeze,
      bin: 59, # BIN(opt_ary_freeze)
      len: 3, # insn_len
      operands: [{:decl=>"VALUE ary", :type=>"VALUE", :name=>"ary"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    60 => Instruction.new(
      name: :opt_hash_freeze,
      bin: 60, # BIN(opt_hash_freeze)
      len: 3, # insn_len
      operands: [{:decl=>"VALUE hash", :type=>"VALUE", :name=>"hash"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    61 => Instruction.new(
      name: :opt_str_freeze,
      bin: 61, # BIN(opt_str_freeze)
      len: 3, # insn_len
      operands: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    62 => Instruction.new(
      name: :opt_nil_p,
      bin: 62, # BIN(opt_nil_p)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    63 => Instruction.new(
      name: :opt_str_uminus,
      bin: 63, # BIN(opt_str_uminus)
      len: 3, # insn_len
      operands: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    64 => Instruction.new(
      name: :opt_duparray_send,
      bin: 64, # BIN(opt_duparray_send)
      len: 4, # insn_len
      operands: [{:decl=>"VALUE ary", :type=>"VALUE", :name=>"ary"}, {:decl=>"ID method", :type=>"ID", :name=>"method"}, {:decl=>"rb_num_t argc", :type=>"rb_num_t", :name=>"argc"}],
    ),
    65 => Instruction.new(
      name: :opt_newarray_send,
      bin: 65, # BIN(opt_newarray_send)
      len: 3, # insn_len
      operands: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}, {:decl=>"rb_num_t method", :type=>"rb_num_t", :name=>"method"}],
    ),
    66 => Instruction.new(
      name: :invokesuper,
      bin: 66, # BIN(invokesuper)
      len: 3, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}, {:decl=>"ISEQ blockiseq", :type=>"ISEQ", :name=>"blockiseq"}],
    ),
    67 => Instruction.new(
      name: :invokesuperforward,
      bin: 67, # BIN(invokesuperforward)
      len: 3, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}, {:decl=>"ISEQ blockiseq", :type=>"ISEQ", :name=>"blockiseq"}],
    ),
    68 => Instruction.new(
      name: :invokeblock,
      bin: 68, # BIN(invokeblock)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    69 => Instruction.new(
      name: :leave,
      bin: 69, # BIN(leave)
      len: 1, # insn_len
      operands: [],
    ),
    70 => Instruction.new(
      name: :throw,
      bin: 70, # BIN(throw)
      len: 2, # insn_len
      operands: [{:decl=>"rb_num_t throw_state", :type=>"rb_num_t", :name=>"throw_state"}],
    ),
    71 => Instruction.new(
      name: :jump,
      bin: 71, # BIN(jump)
      len: 2, # insn_len
      operands: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}],
    ),
    72 => Instruction.new(
      name: :branchif,
      bin: 72, # BIN(branchif)
      len: 2, # insn_len
      operands: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}],
    ),
    73 => Instruction.new(
      name: :branchunless,
      bin: 73, # BIN(branchunless)
      len: 2, # insn_len
      operands: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}],
    ),
    74 => Instruction.new(
      name: :branchnil,
      bin: 74, # BIN(branchnil)
      len: 2, # insn_len
      operands: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}],
    ),
    75 => Instruction.new(
      name: :once,
      bin: 75, # BIN(once)
      len: 3, # insn_len
      operands: [{:decl=>"ISEQ iseq", :type=>"ISEQ", :name=>"iseq"}, {:decl=>"ISE ise", :type=>"ISE", :name=>"ise"}],
    ),
    76 => Instruction.new(
      name: :opt_case_dispatch,
      bin: 76, # BIN(opt_case_dispatch)
      len: 3, # insn_len
      operands: [{:decl=>"CDHASH hash", :type=>"CDHASH", :name=>"hash"}, {:decl=>"OFFSET else_offset", :type=>"OFFSET", :name=>"else_offset"}],
    ),
    77 => Instruction.new(
      name: :opt_plus,
      bin: 77, # BIN(opt_plus)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    78 => Instruction.new(
      name: :opt_minus,
      bin: 78, # BIN(opt_minus)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    79 => Instruction.new(
      name: :opt_mult,
      bin: 79, # BIN(opt_mult)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    80 => Instruction.new(
      name: :opt_div,
      bin: 80, # BIN(opt_div)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    81 => Instruction.new(
      name: :opt_mod,
      bin: 81, # BIN(opt_mod)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    82 => Instruction.new(
      name: :opt_eq,
      bin: 82, # BIN(opt_eq)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    83 => Instruction.new(
      name: :opt_neq,
      bin: 83, # BIN(opt_neq)
      len: 3, # insn_len
      operands: [{:decl=>"CALL_DATA cd_eq", :type=>"CALL_DATA", :name=>"cd_eq"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    84 => Instruction.new(
      name: :opt_lt,
      bin: 84, # BIN(opt_lt)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    85 => Instruction.new(
      name: :opt_le,
      bin: 85, # BIN(opt_le)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    86 => Instruction.new(
      name: :opt_gt,
      bin: 86, # BIN(opt_gt)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    87 => Instruction.new(
      name: :opt_ge,
      bin: 87, # BIN(opt_ge)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    88 => Instruction.new(
      name: :opt_ltlt,
      bin: 88, # BIN(opt_ltlt)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    89 => Instruction.new(
      name: :opt_and,
      bin: 89, # BIN(opt_and)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    90 => Instruction.new(
      name: :opt_or,
      bin: 90, # BIN(opt_or)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    91 => Instruction.new(
      name: :opt_aref,
      bin: 91, # BIN(opt_aref)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    92 => Instruction.new(
      name: :opt_aset,
      bin: 92, # BIN(opt_aset)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    93 => Instruction.new(
      name: :opt_aset_with,
      bin: 93, # BIN(opt_aset_with)
      len: 3, # insn_len
      operands: [{:decl=>"VALUE key", :type=>"VALUE", :name=>"key"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    94 => Instruction.new(
      name: :opt_aref_with,
      bin: 94, # BIN(opt_aref_with)
      len: 3, # insn_len
      operands: [{:decl=>"VALUE key", :type=>"VALUE", :name=>"key"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    95 => Instruction.new(
      name: :opt_length,
      bin: 95, # BIN(opt_length)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    96 => Instruction.new(
      name: :opt_size,
      bin: 96, # BIN(opt_size)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    97 => Instruction.new(
      name: :opt_empty_p,
      bin: 97, # BIN(opt_empty_p)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    98 => Instruction.new(
      name: :opt_succ,
      bin: 98, # BIN(opt_succ)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    99 => Instruction.new(
      name: :opt_not,
      bin: 99, # BIN(opt_not)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    100 => Instruction.new(
      name: :opt_regexpmatch2,
      bin: 100, # BIN(opt_regexpmatch2)
      len: 2, # insn_len
      operands: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}],
    ),
    101 => Instruction.new(
      name: :invokebuiltin,
      bin: 101, # BIN(invokebuiltin)
      len: 2, # insn_len
      operands: [{:decl=>"RB_BUILTIN bf", :type=>"RB_BUILTIN", :name=>"bf"}],
    ),
    102 => Instruction.new(
      name: :opt_invokebuiltin_delegate,
      bin: 102, # BIN(opt_invokebuiltin_delegate)
      len: 3, # insn_len
      operands: [{:decl=>"RB_BUILTIN bf", :type=>"RB_BUILTIN", :name=>"bf"}, {:decl=>"rb_num_t index", :type=>"rb_num_t", :name=>"index"}],
    ),
    103 => Instruction.new(
      name: :opt_invokebuiltin_delegate_leave,
      bin: 103, # BIN(opt_invokebuiltin_delegate_leave)
      len: 3, # insn_len
      operands: [{:decl=>"RB_BUILTIN bf", :type=>"RB_BUILTIN", :name=>"bf"}, {:decl=>"rb_num_t index", :type=>"rb_num_t", :name=>"index"}],
    ),
    104 => Instruction.new(
      name: :getlocal_WC_0,
      bin: 104, # BIN(getlocal_WC_0)
      len: 2, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}],
    ),
    105 => Instruction.new(
      name: :getlocal_WC_1,
      bin: 105, # BIN(getlocal_WC_1)
      len: 2, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}],
    ),
    106 => Instruction.new(
      name: :setlocal_WC_0,
      bin: 106, # BIN(setlocal_WC_0)
      len: 2, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}],
    ),
    107 => Instruction.new(
      name: :setlocal_WC_1,
      bin: 107, # BIN(setlocal_WC_1)
      len: 2, # insn_len
      operands: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}],
    ),
    108 => Instruction.new(
      name: :putobject_INT2FIX_0_,
      bin: 108, # BIN(putobject_INT2FIX_0_)
      len: 1, # insn_len
      operands: [],
    ),
    109 => Instruction.new(
      name: :putobject_INT2FIX_1_,
      bin: 109, # BIN(putobject_INT2FIX_1_)
      len: 1, # insn_len
      operands: [],
    ),
    110 => Instruction.new(
      name: :trace_nop,
      bin: 110, # BIN(trace_nop)
      len: 1, # insn_len
      operands: nil,
    ),
    111 => Instruction.new(
      name: :trace_getlocal,
      bin: 111, # BIN(trace_getlocal)
      len: 3, # insn_len
      operands: nil,
    ),
    112 => Instruction.new(
      name: :trace_setlocal,
      bin: 112, # BIN(trace_setlocal)
      len: 3, # insn_len
      operands: nil,
    ),
    113 => Instruction.new(
      name: :trace_getblockparam,
      bin: 113, # BIN(trace_getblockparam)
      len: 3, # insn_len
      operands: nil,
    ),
    114 => Instruction.new(
      name: :trace_setblockparam,
      bin: 114, # BIN(trace_setblockparam)
      len: 3, # insn_len
      operands: nil,
    ),
    115 => Instruction.new(
      name: :trace_getblockparamproxy,
      bin: 115, # BIN(trace_getblockparamproxy)
      len: 3, # insn_len
      operands: nil,
    ),
    116 => Instruction.new(
      name: :trace_getspecial,
      bin: 116, # BIN(trace_getspecial)
      len: 3, # insn_len
      operands: nil,
    ),
    117 => Instruction.new(
      name: :trace_setspecial,
      bin: 117, # BIN(trace_setspecial)
      len: 2, # insn_len
      operands: nil,
    ),
    118 => Instruction.new(
      name: :trace_getinstancevariable,
      bin: 118, # BIN(trace_getinstancevariable)
      len: 3, # insn_len
      operands: nil,
    ),
    119 => Instruction.new(
      name: :trace_setinstancevariable,
      bin: 119, # BIN(trace_setinstancevariable)
      len: 3, # insn_len
      operands: nil,
    ),
    120 => Instruction.new(
      name: :trace_getclassvariable,
      bin: 120, # BIN(trace_getclassvariable)
      len: 3, # insn_len
      operands: nil,
    ),
    121 => Instruction.new(
      name: :trace_setclassvariable,
      bin: 121, # BIN(trace_setclassvariable)
      len: 3, # insn_len
      operands: nil,
    ),
    122 => Instruction.new(
      name: :trace_opt_getconstant_path,
      bin: 122, # BIN(trace_opt_getconstant_path)
      len: 2, # insn_len
      operands: nil,
    ),
    123 => Instruction.new(
      name: :trace_getconstant,
      bin: 123, # BIN(trace_getconstant)
      len: 2, # insn_len
      operands: nil,
    ),
    124 => Instruction.new(
      name: :trace_setconstant,
      bin: 124, # BIN(trace_setconstant)
      len: 2, # insn_len
      operands: nil,
    ),
    125 => Instruction.new(
      name: :trace_getglobal,
      bin: 125, # BIN(trace_getglobal)
      len: 2, # insn_len
      operands: nil,
    ),
    126 => Instruction.new(
      name: :trace_setglobal,
      bin: 126, # BIN(trace_setglobal)
      len: 2, # insn_len
      operands: nil,
    ),
    127 => Instruction.new(
      name: :trace_putnil,
      bin: 127, # BIN(trace_putnil)
      len: 1, # insn_len
      operands: nil,
    ),
    128 => Instruction.new(
      name: :trace_putself,
      bin: 128, # BIN(trace_putself)
      len: 1, # insn_len
      operands: nil,
    ),
    129 => Instruction.new(
      name: :trace_putobject,
      bin: 129, # BIN(trace_putobject)
      len: 2, # insn_len
      operands: nil,
    ),
    130 => Instruction.new(
      name: :trace_putspecialobject,
      bin: 130, # BIN(trace_putspecialobject)
      len: 2, # insn_len
      operands: nil,
    ),
    131 => Instruction.new(
      name: :trace_putstring,
      bin: 131, # BIN(trace_putstring)
      len: 2, # insn_len
      operands: nil,
    ),
    132 => Instruction.new(
      name: :trace_putchilledstring,
      bin: 132, # BIN(trace_putchilledstring)
      len: 2, # insn_len
      operands: nil,
    ),
    133 => Instruction.new(
      name: :trace_concatstrings,
      bin: 133, # BIN(trace_concatstrings)
      len: 2, # insn_len
      operands: nil,
    ),
    134 => Instruction.new(
      name: :trace_anytostring,
      bin: 134, # BIN(trace_anytostring)
      len: 1, # insn_len
      operands: nil,
    ),
    135 => Instruction.new(
      name: :trace_toregexp,
      bin: 135, # BIN(trace_toregexp)
      len: 3, # insn_len
      operands: nil,
    ),
    136 => Instruction.new(
      name: :trace_intern,
      bin: 136, # BIN(trace_intern)
      len: 1, # insn_len
      operands: nil,
    ),
    137 => Instruction.new(
      name: :trace_newarray,
      bin: 137, # BIN(trace_newarray)
      len: 2, # insn_len
      operands: nil,
    ),
    138 => Instruction.new(
      name: :trace_pushtoarraykwsplat,
      bin: 138, # BIN(trace_pushtoarraykwsplat)
      len: 1, # insn_len
      operands: nil,
    ),
    139 => Instruction.new(
      name: :trace_duparray,
      bin: 139, # BIN(trace_duparray)
      len: 2, # insn_len
      operands: nil,
    ),
    140 => Instruction.new(
      name: :trace_duphash,
      bin: 140, # BIN(trace_duphash)
      len: 2, # insn_len
      operands: nil,
    ),
    141 => Instruction.new(
      name: :trace_expandarray,
      bin: 141, # BIN(trace_expandarray)
      len: 3, # insn_len
      operands: nil,
    ),
    142 => Instruction.new(
      name: :trace_concatarray,
      bin: 142, # BIN(trace_concatarray)
      len: 1, # insn_len
      operands: nil,
    ),
    143 => Instruction.new(
      name: :trace_concattoarray,
      bin: 143, # BIN(trace_concattoarray)
      len: 1, # insn_len
      operands: nil,
    ),
    144 => Instruction.new(
      name: :trace_pushtoarray,
      bin: 144, # BIN(trace_pushtoarray)
      len: 2, # insn_len
      operands: nil,
    ),
    145 => Instruction.new(
      name: :trace_splatarray,
      bin: 145, # BIN(trace_splatarray)
      len: 2, # insn_len
      operands: nil,
    ),
    146 => Instruction.new(
      name: :trace_splatkw,
      bin: 146, # BIN(trace_splatkw)
      len: 1, # insn_len
      operands: nil,
    ),
    147 => Instruction.new(
      name: :trace_newhash,
      bin: 147, # BIN(trace_newhash)
      len: 2, # insn_len
      operands: nil,
    ),
    148 => Instruction.new(
      name: :trace_newrange,
      bin: 148, # BIN(trace_newrange)
      len: 2, # insn_len
      operands: nil,
    ),
    149 => Instruction.new(
      name: :trace_pop,
      bin: 149, # BIN(trace_pop)
      len: 1, # insn_len
      operands: nil,
    ),
    150 => Instruction.new(
      name: :trace_dup,
      bin: 150, # BIN(trace_dup)
      len: 1, # insn_len
      operands: nil,
    ),
    151 => Instruction.new(
      name: :trace_dupn,
      bin: 151, # BIN(trace_dupn)
      len: 2, # insn_len
      operands: nil,
    ),
    152 => Instruction.new(
      name: :trace_swap,
      bin: 152, # BIN(trace_swap)
      len: 1, # insn_len
      operands: nil,
    ),
    153 => Instruction.new(
      name: :trace_opt_reverse,
      bin: 153, # BIN(trace_opt_reverse)
      len: 2, # insn_len
      operands: nil,
    ),
    154 => Instruction.new(
      name: :trace_topn,
      bin: 154, # BIN(trace_topn)
      len: 2, # insn_len
      operands: nil,
    ),
    155 => Instruction.new(
      name: :trace_setn,
      bin: 155, # BIN(trace_setn)
      len: 2, # insn_len
      operands: nil,
    ),
    156 => Instruction.new(
      name: :trace_adjuststack,
      bin: 156, # BIN(trace_adjuststack)
      len: 2, # insn_len
      operands: nil,
    ),
    157 => Instruction.new(
      name: :trace_defined,
      bin: 157, # BIN(trace_defined)
      len: 4, # insn_len
      operands: nil,
    ),
    158 => Instruction.new(
      name: :trace_definedivar,
      bin: 158, # BIN(trace_definedivar)
      len: 4, # insn_len
      operands: nil,
    ),
    159 => Instruction.new(
      name: :trace_checkmatch,
      bin: 159, # BIN(trace_checkmatch)
      len: 2, # insn_len
      operands: nil,
    ),
    160 => Instruction.new(
      name: :trace_checkkeyword,
      bin: 160, # BIN(trace_checkkeyword)
      len: 3, # insn_len
      operands: nil,
    ),
    161 => Instruction.new(
      name: :trace_checktype,
      bin: 161, # BIN(trace_checktype)
      len: 2, # insn_len
      operands: nil,
    ),
    162 => Instruction.new(
      name: :trace_defineclass,
      bin: 162, # BIN(trace_defineclass)
      len: 4, # insn_len
      operands: nil,
    ),
    163 => Instruction.new(
      name: :trace_definemethod,
      bin: 163, # BIN(trace_definemethod)
      len: 3, # insn_len
      operands: nil,
    ),
    164 => Instruction.new(
      name: :trace_definesmethod,
      bin: 164, # BIN(trace_definesmethod)
      len: 3, # insn_len
      operands: nil,
    ),
    165 => Instruction.new(
      name: :trace_send,
      bin: 165, # BIN(trace_send)
      len: 3, # insn_len
      operands: nil,
    ),
    166 => Instruction.new(
      name: :trace_sendforward,
      bin: 166, # BIN(trace_sendforward)
      len: 3, # insn_len
      operands: nil,
    ),
    167 => Instruction.new(
      name: :trace_opt_send_without_block,
      bin: 167, # BIN(trace_opt_send_without_block)
      len: 2, # insn_len
      operands: nil,
    ),
    168 => Instruction.new(
      name: :trace_objtostring,
      bin: 168, # BIN(trace_objtostring)
      len: 2, # insn_len
      operands: nil,
    ),
    169 => Instruction.new(
      name: :trace_opt_ary_freeze,
      bin: 169, # BIN(trace_opt_ary_freeze)
      len: 3, # insn_len
      operands: nil,
    ),
    170 => Instruction.new(
      name: :trace_opt_hash_freeze,
      bin: 170, # BIN(trace_opt_hash_freeze)
      len: 3, # insn_len
      operands: nil,
    ),
    171 => Instruction.new(
      name: :trace_opt_str_freeze,
      bin: 171, # BIN(trace_opt_str_freeze)
      len: 3, # insn_len
      operands: nil,
    ),
    172 => Instruction.new(
      name: :trace_opt_nil_p,
      bin: 172, # BIN(trace_opt_nil_p)
      len: 2, # insn_len
      operands: nil,
    ),
    173 => Instruction.new(
      name: :trace_opt_str_uminus,
      bin: 173, # BIN(trace_opt_str_uminus)
      len: 3, # insn_len
      operands: nil,
    ),
    174 => Instruction.new(
      name: :trace_opt_duparray_send,
      bin: 174, # BIN(trace_opt_duparray_send)
      len: 4, # insn_len
      operands: nil,
    ),
    175 => Instruction.new(
      name: :trace_opt_newarray_send,
      bin: 175, # BIN(trace_opt_newarray_send)
      len: 3, # insn_len
      operands: nil,
    ),
    176 => Instruction.new(
      name: :trace_invokesuper,
      bin: 176, # BIN(trace_invokesuper)
      len: 3, # insn_len
      operands: nil,
    ),
    177 => Instruction.new(
      name: :trace_invokesuperforward,
      bin: 177, # BIN(trace_invokesuperforward)
      len: 3, # insn_len
      operands: nil,
    ),
    178 => Instruction.new(
      name: :trace_invokeblock,
      bin: 178, # BIN(trace_invokeblock)
      len: 2, # insn_len
      operands: nil,
    ),
    179 => Instruction.new(
      name: :trace_leave,
      bin: 179, # BIN(trace_leave)
      len: 1, # insn_len
      operands: nil,
    ),
    180 => Instruction.new(
      name: :trace_throw,
      bin: 180, # BIN(trace_throw)
      len: 2, # insn_len
      operands: nil,
    ),
    181 => Instruction.new(
      name: :trace_jump,
      bin: 181, # BIN(trace_jump)
      len: 2, # insn_len
      operands: nil,
    ),
    182 => Instruction.new(
      name: :trace_branchif,
      bin: 182, # BIN(trace_branchif)
      len: 2, # insn_len
      operands: nil,
    ),
    183 => Instruction.new(
      name: :trace_branchunless,
      bin: 183, # BIN(trace_branchunless)
      len: 2, # insn_len
      operands: nil,
    ),
    184 => Instruction.new(
      name: :trace_branchnil,
      bin: 184, # BIN(trace_branchnil)
      len: 2, # insn_len
      operands: nil,
    ),
    185 => Instruction.new(
      name: :trace_once,
      bin: 185, # BIN(trace_once)
      len: 3, # insn_len
      operands: nil,
    ),
    186 => Instruction.new(
      name: :trace_opt_case_dispatch,
      bin: 186, # BIN(trace_opt_case_dispatch)
      len: 3, # insn_len
      operands: nil,
    ),
    187 => Instruction.new(
      name: :trace_opt_plus,
      bin: 187, # BIN(trace_opt_plus)
      len: 2, # insn_len
      operands: nil,
    ),
    188 => Instruction.new(
      name: :trace_opt_minus,
      bin: 188, # BIN(trace_opt_minus)
      len: 2, # insn_len
      operands: nil,
    ),
    189 => Instruction.new(
      name: :trace_opt_mult,
      bin: 189, # BIN(trace_opt_mult)
      len: 2, # insn_len
      operands: nil,
    ),
    190 => Instruction.new(
      name: :trace_opt_div,
      bin: 190, # BIN(trace_opt_div)
      len: 2, # insn_len
      operands: nil,
    ),
    191 => Instruction.new(
      name: :trace_opt_mod,
      bin: 191, # BIN(trace_opt_mod)
      len: 2, # insn_len
      operands: nil,
    ),
    192 => Instruction.new(
      name: :trace_opt_eq,
      bin: 192, # BIN(trace_opt_eq)
      len: 2, # insn_len
      operands: nil,
    ),
    193 => Instruction.new(
      name: :trace_opt_neq,
      bin: 193, # BIN(trace_opt_neq)
      len: 3, # insn_len
      operands: nil,
    ),
    194 => Instruction.new(
      name: :trace_opt_lt,
      bin: 194, # BIN(trace_opt_lt)
      len: 2, # insn_len
      operands: nil,
    ),
    195 => Instruction.new(
      name: :trace_opt_le,
      bin: 195, # BIN(trace_opt_le)
      len: 2, # insn_len
      operands: nil,
    ),
    196 => Instruction.new(
      name: :trace_opt_gt,
      bin: 196, # BIN(trace_opt_gt)
      len: 2, # insn_len
      operands: nil,
    ),
    197 => Instruction.new(
      name: :trace_opt_ge,
      bin: 197, # BIN(trace_opt_ge)
      len: 2, # insn_len
      operands: nil,
    ),
    198 => Instruction.new(
      name: :trace_opt_ltlt,
      bin: 198, # BIN(trace_opt_ltlt)
      len: 2, # insn_len
      operands: nil,
    ),
    199 => Instruction.new(
      name: :trace_opt_and,
      bin: 199, # BIN(trace_opt_and)
      len: 2, # insn_len
      operands: nil,
    ),
    200 => Instruction.new(
      name: :trace_opt_or,
      bin: 200, # BIN(trace_opt_or)
      len: 2, # insn_len
      operands: nil,
    ),
    201 => Instruction.new(
      name: :trace_opt_aref,
      bin: 201, # BIN(trace_opt_aref)
      len: 2, # insn_len
      operands: nil,
    ),
    202 => Instruction.new(
      name: :trace_opt_aset,
      bin: 202, # BIN(trace_opt_aset)
      len: 2, # insn_len
      operands: nil,
    ),
    203 => Instruction.new(
      name: :trace_opt_aset_with,
      bin: 203, # BIN(trace_opt_aset_with)
      len: 3, # insn_len
      operands: nil,
    ),
    204 => Instruction.new(
      name: :trace_opt_aref_with,
      bin: 204, # BIN(trace_opt_aref_with)
      len: 3, # insn_len
      operands: nil,
    ),
    205 => Instruction.new(
      name: :trace_opt_length,
      bin: 205, # BIN(trace_opt_length)
      len: 2, # insn_len
      operands: nil,
    ),
    206 => Instruction.new(
      name: :trace_opt_size,
      bin: 206, # BIN(trace_opt_size)
      len: 2, # insn_len
      operands: nil,
    ),
    207 => Instruction.new(
      name: :trace_opt_empty_p,
      bin: 207, # BIN(trace_opt_empty_p)
      len: 2, # insn_len
      operands: nil,
    ),
    208 => Instruction.new(
      name: :trace_opt_succ,
      bin: 208, # BIN(trace_opt_succ)
      len: 2, # insn_len
      operands: nil,
    ),
    209 => Instruction.new(
      name: :trace_opt_not,
      bin: 209, # BIN(trace_opt_not)
      len: 2, # insn_len
      operands: nil,
    ),
    210 => Instruction.new(
      name: :trace_opt_regexpmatch2,
      bin: 210, # BIN(trace_opt_regexpmatch2)
      len: 2, # insn_len
      operands: nil,
    ),
    211 => Instruction.new(
      name: :trace_invokebuiltin,
      bin: 211, # BIN(trace_invokebuiltin)
      len: 2, # insn_len
      operands: nil,
    ),
    212 => Instruction.new(
      name: :trace_opt_invokebuiltin_delegate,
      bin: 212, # BIN(trace_opt_invokebuiltin_delegate)
      len: 3, # insn_len
      operands: nil,
    ),
    213 => Instruction.new(
      name: :trace_opt_invokebuiltin_delegate_leave,
      bin: 213, # BIN(trace_opt_invokebuiltin_delegate_leave)
      len: 3, # insn_len
      operands: nil,
    ),
    214 => Instruction.new(
      name: :trace_getlocal_WC_0,
      bin: 214, # BIN(trace_getlocal_WC_0)
      len: 2, # insn_len
      operands: nil,
    ),
    215 => Instruction.new(
      name: :trace_getlocal_WC_1,
      bin: 215, # BIN(trace_getlocal_WC_1)
      len: 2, # insn_len
      operands: nil,
    ),
    216 => Instruction.new(
      name: :trace_setlocal_WC_0,
      bin: 216, # BIN(trace_setlocal_WC_0)
      len: 2, # insn_len
      operands: nil,
    ),
    217 => Instruction.new(
      name: :trace_setlocal_WC_1,
      bin: 217, # BIN(trace_setlocal_WC_1)
      len: 2, # insn_len
      operands: nil,
    ),
    218 => Instruction.new(
      name: :trace_putobject_INT2FIX_0_,
      bin: 218, # BIN(trace_putobject_INT2FIX_0_)
      len: 1, # insn_len
      operands: nil,
    ),
    219 => Instruction.new(
      name: :trace_putobject_INT2FIX_1_,
      bin: 219, # BIN(trace_putobject_INT2FIX_1_)
      len: 1, # insn_len
      operands: nil,
    ),
  }
end
PK*J[��f�� share/ruby/ruby_vm/rjit/stats.rbnu�[���# frozen_string_literal: true
module RubyVM::RJIT
  # Return a Hash for \RJIT statistics. \--rjit-stats makes more information available.
  def self.runtime_stats
    stats = {}

    # Insn exits
    INSNS.each_value do |insn|
      exits = C.rjit_insn_exits[insn.bin]
      if exits > 0
        stats[:"exit_#{insn.name}"] = exits
      end
    end

    # Runtime stats
    C.rb_rjit_runtime_counters.members.each do |member|
      stats[member] = C.rb_rjit_counters.public_send(member)
    end
    stats[:vm_insns_count] = C.rb_vm_insns_count

    # Other stats are calculated here
    stats[:side_exit_count] = stats.select { |name, _count| name.start_with?('exit_') }.sum(&:last)
    if stats[:vm_insns_count] > 0
      retired_in_rjit = stats[:rjit_insns_count] - stats[:side_exit_count]
      stats[:total_insns_count] = retired_in_rjit + stats[:vm_insns_count]
      stats[:ratio_in_rjit] = 100.0 * retired_in_rjit / stats[:total_insns_count]
    else
      stats.delete(:vm_insns_count)
    end

    stats
  end

  # :nodoc: all
  class << self
    private

    # --yjit-stats at_exit
    def print_stats
      stats = runtime_stats
      $stderr.puts("***RJIT: Printing RJIT statistics on exit***")

      print_counters(stats, prefix: 'send_', prompt: 'method call exit reasons')
      print_counters(stats, prefix: 'invokeblock_', prompt: 'invokeblock exit reasons')
      print_counters(stats, prefix: 'invokesuper_', prompt: 'invokesuper exit reasons')
      print_counters(stats, prefix: 'getblockpp_', prompt: 'getblockparamproxy exit reasons')
      print_counters(stats, prefix: 'getivar_', prompt: 'getinstancevariable exit reasons')
      print_counters(stats, prefix: 'setivar_', prompt: 'setinstancevariable exit reasons')
      print_counters(stats, prefix: 'optaref_', prompt: 'opt_aref exit reasons')
      print_counters(stats, prefix: 'optgetconst_', prompt: 'opt_getconstant_path exit reasons')
      print_counters(stats, prefix: 'expandarray_', prompt: 'expandarray exit reasons')

      $stderr.puts "compiled_block_count:  #{format_number(13, stats[:compiled_block_count])}"
      $stderr.puts "side_exit_count:       #{format_number(13, stats[:side_exit_count])}"
      $stderr.puts "total_insns_count:     #{format_number(13, stats[:total_insns_count])}" if stats.key?(:total_insns_count)
      $stderr.puts "vm_insns_count:        #{format_number(13, stats[:vm_insns_count])}" if stats.key?(:vm_insns_count)
      $stderr.puts "rjit_insns_count:      #{format_number(13, stats[:rjit_insns_count])}"
      $stderr.puts "ratio_in_rjit:         #{format('%12.1f', stats[:ratio_in_rjit])}%" if stats.key?(:ratio_in_rjit)

      print_exit_counts(stats)
    end

    def print_counters(stats, prefix:, prompt:)
      $stderr.puts("#{prompt}: ")
      counters = stats.filter { |key, _| key.start_with?(prefix) }
      counters.filter! { |_, value| value != 0 }
      counters.transform_keys! { |key| key.to_s.delete_prefix(prefix) }

      if counters.empty?
        $stderr.puts("    (all relevant counters are zero)")
        return
      end

      counters = counters.to_a
      counters.sort_by! { |(_, counter_value)| counter_value }
      longest_name_length = counters.max_by { |(name, _)| name.length }.first.length
      total = counters.sum { |(_, counter_value)| counter_value }

      counters.reverse_each do |(name, value)|
        percentage = value.fdiv(total) * 100
        $stderr.printf("    %*s %s (%4.1f%%)\n", longest_name_length, name, format_number(10, value), percentage)
      end
    end

    def print_exit_counts(stats, how_many: 20, padding: 2)
      exits = stats.filter_map { |name, count| [name.to_s.delete_prefix('exit_'), count] if name.start_with?('exit_') }.to_h
      return if exits.empty?

      top_exits = exits.sort_by { |_name, count| -count }.first(how_many).to_h
      total_exits = exits.values.sum
      $stderr.puts "Top-#{top_exits.size} most frequent exit ops (#{format("%.1f", 100.0 * top_exits.values.sum / total_exits)}% of exits):"

      name_width  = top_exits.map { |name, _count| name.length }.max + padding
      count_width = top_exits.map { |_name, count| format_number(10, count).length }.max + padding
      top_exits.each do |name, count|
        ratio = 100.0 * count / total_exits
        $stderr.puts "#{format("%#{name_width}s", name)}: #{format_number(count_width, count)} (#{format('%4.1f', ratio)}%)"
      end
    end

    # Format large numbers with comma separators for readability
    def format_number(pad, number)
      integer, decimal = number.to_s.split('.')
      d_groups = integer.chars.reverse.each_slice(3)
      with_commas = d_groups.map(&:join).join(',').reverse
      [with_commas, decimal].compact.join('.').rjust(pad, ' ')
    end

    # --yjit-trace-exits at_exit
    def dump_trace_exits
      filename = "#{Dir.pwd}/rjit_exit_locations.dump"
      File.binwrite(filename, Marshal.dump(exit_traces))
      $stderr.puts("RJIT exit locations dumped to:\n#{filename}")
    end

    # Convert rb_rjit_raw_samples and rb_rjit_line_samples into a StackProf format.
    def exit_traces
      results = C.rjit_exit_traces
      raw_samples = results[:raw].dup
      line_samples = results[:lines].dup
      frames = results[:frames].dup
      samples_count = 0

      # Loop through the instructions and set the frame hash with the data.
      # We use nonexistent.def for the file name, otherwise insns.def will be displayed
      # and that information isn't useful in this context.
      RubyVM::INSTRUCTION_NAMES.each_with_index do |name, frame_id|
        frame_hash = { samples: 0, total_samples: 0, edges: {}, name: name, file: "nonexistent.def", line: nil, lines: {} }
        results[:frames][frame_id] = frame_hash
        frames[frame_id] = frame_hash
      end

      # Loop through the raw_samples and build the hashes for StackProf.
      # The loop is based off an example in the StackProf documentation and therefore
      # this functionality can only work with that library.
      #
      # Raw Samples:
      # [ length, frame1, frame2, frameN, ..., instruction, count
      #
      # Line Samples
      # [ length, line_1, line_2, line_n, ..., dummy value, count
      i = 0
      while i < raw_samples.length
        stack_length = raw_samples[i] + 1
        i += 1 # consume the stack length

        prev_frame_id = nil
        stack_length.times do |idx|
          idx += i
          frame_id = raw_samples[idx]

          if prev_frame_id
            prev_frame = frames[prev_frame_id]
            prev_frame[:edges][frame_id] ||= 0
            prev_frame[:edges][frame_id] += 1
          end

          frame_info = frames[frame_id]
          frame_info[:total_samples] += 1

          frame_info[:lines][line_samples[idx]] ||= [0, 0]
          frame_info[:lines][line_samples[idx]][0] += 1

          prev_frame_id = frame_id
        end

        i += stack_length # consume the stack

        top_frame_id = prev_frame_id
        top_frame_line = 1

        sample_count = raw_samples[i]

        frames[top_frame_id][:samples] += sample_count
        frames[top_frame_id][:lines] ||= {}
        frames[top_frame_id][:lines][top_frame_line] ||= [0, 0]
        frames[top_frame_id][:lines][top_frame_line][1] += sample_count

        samples_count += sample_count
        i += 1
      end

      results[:samples] = samples_count
      # Set missed_samples and gc_samples to 0 as their values
      # don't matter to us in this context.
      results[:missed_samples] = 0
      results[:gc_samples] = 0
      results
    end
  end
end
PK*J[�nD?�� share/ruby/ruby_vm/rjit/hooks.rbnu�[���module RubyVM::RJIT
  module Hooks # :nodoc: all
    def self.on_bop_redefined(_redefined_flag, _bop)
      # C.rjit_cancel_all("BOP is redefined")
    end

    def self.on_cme_invalidate(cme)
      cme = C.rb_callable_method_entry_struct.new(cme)
      Invariants.on_cme_invalidate(cme)
    end

    def self.on_ractor_spawn
      # C.rjit_cancel_all("Ractor is spawned")
    end

    # Global constant changes like const_set
    def self.on_constant_state_changed(id)
      Invariants.on_constant_state_changed(id)
    end

    # ISEQ-specific constant invalidation
    def self.on_constant_ic_update(iseq, ic, insn_idx)
      iseq = C.rb_iseq_t.new(iseq)
      ic = C.IC.new(ic)
      Invariants.on_constant_ic_update(iseq, ic, insn_idx)
    end

    def self.on_tracing_invalidate_all(_new_iseq_events)
      Invariants.on_tracing_invalidate_all
    end

    def self.on_update_references
      Invariants.on_update_references
    end
  end
end
PK*J[
�M��B�B#share/ruby/ruby_vm/rjit/compiler.rbnu�[���require 'ruby_vm/rjit/assembler'
require 'ruby_vm/rjit/block'
require 'ruby_vm/rjit/branch_stub'
require 'ruby_vm/rjit/code_block'
require 'ruby_vm/rjit/context'
require 'ruby_vm/rjit/entry_stub'
require 'ruby_vm/rjit/exit_compiler'
require 'ruby_vm/rjit/insn_compiler'
require 'ruby_vm/rjit/instruction'
require 'ruby_vm/rjit/invariants'
require 'ruby_vm/rjit/jit_state'
require 'ruby_vm/rjit/type'

module RubyVM::RJIT
  # Compilation status
  KeepCompiling = :KeepCompiling
  CantCompile = :CantCompile
  EndBlock = :EndBlock

  # Ruby constants
  Qtrue = Fiddle::Qtrue
  Qfalse = Fiddle::Qfalse
  Qnil = Fiddle::Qnil
  Qundef = Fiddle::Qundef

  # Callee-saved registers
  # TODO: support using r12/r13 here
  EC  = :r14
  CFP = :r15
  SP  = :rbx

  # Scratch registers: rax, rcx, rdx

  # Mark objects in this Array during GC
  GC_REFS = []

  # Maximum number of versions per block
  # 1 means always create generic versions
  MAX_VERSIONS = 4

  class Compiler
    attr_accessor :write_pos

    def self.decode_insn(encoded)
      INSNS.fetch(C.rb_vm_insn_decode(encoded))
    end

    def initialize
      mem_size = C.rjit_opts.exec_mem_size * 1024 * 1024
      mem_block = C.mmap(mem_size)
      @cb = CodeBlock.new(mem_block: mem_block, mem_size: mem_size / 2)
      @ocb = CodeBlock.new(mem_block: mem_block + mem_size / 2, mem_size: mem_size / 2, outlined: true)
      @exit_compiler = ExitCompiler.new
      @insn_compiler = InsnCompiler.new(@cb, @ocb, @exit_compiler)
      Invariants.initialize(@cb, @ocb, self, @exit_compiler)
    end

    # Compile an ISEQ from its entry point.
    # @param iseq `RubyVM::RJIT::CPointer::Struct_rb_iseq_t`
    # @param cfp `RubyVM::RJIT::CPointer::Struct_rb_control_frame_t`
    def compile(iseq, cfp)
      return unless supported_platform?
      pc = cfp.pc.to_i
      jit = JITState.new(iseq:, cfp:)
      asm = Assembler.new
      compile_prologue(asm, iseq, pc)
      compile_block(asm, jit:, pc:)
      iseq.body.jit_entry = @cb.write(asm)
    rescue Exception => e
      STDERR.puts "#{e.class}: #{e.message}"
      STDERR.puts e.backtrace
      exit 1
    end

    # Compile an entry.
    # @param entry [RubyVM::RJIT::EntryStub]
    def entry_stub_hit(entry_stub, cfp)
      # Compile a new entry guard as a next entry
      pc = cfp.pc.to_i
      next_entry = Assembler.new.then do |asm|
        compile_entry_chain_guard(asm, cfp.iseq, pc)
        @cb.write(asm)
      end

      # Try to find an existing compiled version of this block
      ctx = Context.new
      block = find_block(cfp.iseq, pc, ctx)
      if block
        # If an existing block is found, generate a jump to the block.
        asm = Assembler.new
        asm.jmp(block.start_addr)
        @cb.write(asm)
      else
        # If this block hasn't yet been compiled, generate blocks after the entry guard.
        asm = Assembler.new
        jit = JITState.new(iseq: cfp.iseq, cfp:)
        compile_block(asm, jit:, pc:, ctx:)
        @cb.write(asm)

        block = jit.block
      end

      # Regenerate the previous entry
      @cb.with_write_addr(entry_stub.start_addr) do
        # The last instruction of compile_entry_chain_guard is jne
        asm = Assembler.new
        asm.jne(next_entry)
        @cb.write(asm)
      end

      return block.start_addr
    rescue Exception => e
      STDERR.puts e.full_message
      exit 1
    end

    # Compile a branch stub.
    # @param branch_stub [RubyVM::RJIT::BranchStub]
    # @param cfp `RubyVM::RJIT::CPointer::Struct_rb_control_frame_t`
    # @param target0_p [TrueClass,FalseClass]
    # @return [Integer] The starting address of the compiled branch stub
    def branch_stub_hit(branch_stub, cfp, target0_p)
      # Update cfp->pc for `jit.at_current_insn?`
      target = target0_p ? branch_stub.target0 : branch_stub.target1
      cfp.pc = target.pc

      # Reuse an existing block if it already exists
      block = find_block(branch_stub.iseq, target.pc, target.ctx)

      # If the branch stub's jump is the last code, allow overwriting part of
      # the old branch code with the new block code.
      fallthrough = block.nil? && @cb.write_addr == branch_stub.end_addr
      if fallthrough
        # If the branch stub's jump is the last code, allow overwriting part of
        # the old branch code with the new block code.
        @cb.set_write_addr(branch_stub.start_addr)
        branch_stub.shape = target0_p ? Next0 : Next1
        Assembler.new.tap do |branch_asm|
          branch_stub.compile.call(branch_asm)
          @cb.write(branch_asm)
        end
      end

      # Reuse or generate a block
      if block
        target.address = block.start_addr
      else
        jit = JITState.new(iseq: branch_stub.iseq, cfp:)
        target.address = Assembler.new.then do |asm|
          compile_block(asm, jit:, pc: target.pc, ctx: target.ctx.dup)
          @cb.write(asm)
        end
        block = jit.block
      end
      block.incoming << branch_stub # prepare for invalidate_block

      # Re-generate the branch code for non-fallthrough cases
      unless fallthrough
        @cb.with_write_addr(branch_stub.start_addr) do
          branch_asm = Assembler.new
          branch_stub.compile.call(branch_asm)
          @cb.write(branch_asm)
        end
      end

      return target.address
    rescue Exception => e
      STDERR.puts e.full_message
      exit 1
    end

    # @param iseq `RubyVM::RJIT::CPointer::Struct_rb_iseq_t`
    # @param pc [Integer]
    def invalidate_blocks(iseq, pc)
      list_blocks(iseq, pc).each do |block|
        invalidate_block(block)
      end

      # If they were the ISEQ's first blocks, re-compile RJIT entry as well
      if iseq.body.iseq_encoded.to_i == pc
        iseq.body.jit_entry = 0
        iseq.body.jit_entry_calls = 0
      end
    end

    def invalidate_block(block)
      iseq = block.iseq
      # Avoid touching GCed ISEQs. We assume it won't be re-entered.
      return unless C.imemo_type_p(iseq, C.imemo_iseq)

      # Remove this block from the version array
      remove_block(iseq, block)

      # Invalidate the block with entry exit
      unless block.invalidated
        @cb.with_write_addr(block.start_addr) do
          asm = Assembler.new
          asm.comment('invalidate_block')
          asm.jmp(block.entry_exit)
          @cb.write(asm)
        end
        block.invalidated = true
      end

      # Re-stub incoming branches
      block.incoming.each do |branch_stub|
        target = [branch_stub.target0, branch_stub.target1].compact.find do |target|
          target.pc == block.pc && target.ctx == block.ctx
        end
        next if target.nil?
        # TODO: Could target.address be a stub address? Is invalidation not needed in that case?

        # If the target being re-generated is currently a fallthrough block,
        # the fallthrough code must be rewritten with a jump to the stub.
        if target.address == branch_stub.end_addr
          branch_stub.shape = Default
        end

        target.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(block.ctx, ocb_asm, branch_stub, target == branch_stub.target0)
          @ocb.write(ocb_asm)
        end
        @cb.with_write_addr(branch_stub.start_addr) do
          branch_asm = Assembler.new
          branch_stub.compile.call(branch_asm)
          @cb.write(branch_asm)
        end
      end
    end

    private

    # Callee-saved: rbx, rsp, rbp, r12, r13, r14, r15
    # Caller-saved: rax, rdi, rsi, rdx, rcx, r8, r9, r10, r11
    #
    # @param asm [RubyVM::RJIT::Assembler]
    def compile_prologue(asm, iseq, pc)
      asm.comment('RJIT entry point')

      # Save callee-saved registers used by JITed code
      asm.push(CFP)
      asm.push(EC)
      asm.push(SP)

      # Move arguments EC and CFP to dedicated registers
      asm.mov(EC, :rdi)
      asm.mov(CFP, :rsi)

      # Load sp to a dedicated register
      asm.mov(SP, [CFP, C.rb_control_frame_t.offsetof(:sp)]) # rbx = cfp->sp

      # Setup cfp->jit_return
      asm.mov(:rax, leave_exit)
      asm.mov([CFP, C.rb_control_frame_t.offsetof(:jit_return)], :rax)

      # We're compiling iseqs that we *expect* to start at `insn_idx`. But in
      # the case of optional parameters, the interpreter can set the pc to a
      # different location depending on the optional parameters.  If an iseq
      # has optional parameters, we'll add a runtime check that the PC we've
      # compiled for is the same PC that the interpreter wants us to run with.
      # If they don't match, then we'll take a side exit.
      if iseq.body.param.flags.has_opt
        compile_entry_chain_guard(asm, iseq, pc)
      end
    end

    def compile_entry_chain_guard(asm, iseq, pc)
      entry_stub = EntryStub.new
      stub_addr = Assembler.new.then do |ocb_asm|
        @exit_compiler.compile_entry_stub(ocb_asm, entry_stub)
        @ocb.write(ocb_asm)
      end

      asm.comment('guard expected PC')
      asm.mov(:rax, pc)
      asm.cmp([CFP, C.rb_control_frame_t.offsetof(:pc)], :rax)

      asm.stub(entry_stub) do
        asm.jne(stub_addr)
      end
    end

    # @param asm [RubyVM::RJIT::Assembler]
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    def compile_block(asm, jit:, pc:, ctx: Context.new)
      # Mark the block start address and prepare an exit code storage
      ctx = limit_block_versions(jit.iseq, pc, ctx)
      block = Block.new(iseq: jit.iseq, pc:, ctx: ctx.dup)
      jit.block = block
      asm.block(block)

      iseq = jit.iseq
      asm.comment("Block: #{iseq.body.location.label}@#{C.rb_iseq_path(iseq)}:#{iseq_lineno(iseq, pc)}")

      # Compile each insn
      index = (pc - iseq.body.iseq_encoded.to_i) / C.VALUE.size
      while index < iseq.body.iseq_size
        # Set the current instruction
        insn = self.class.decode_insn(iseq.body.iseq_encoded[index])
        jit.pc = (iseq.body.iseq_encoded + index).to_i
        jit.stack_size_for_pc = ctx.stack_size
        jit.side_exit_for_pc.clear

        # If previous instruction requested to record the boundary
        if jit.record_boundary_patch_point
          # Generate an exit to this instruction and record it
          exit_pos = Assembler.new.then do |ocb_asm|
            @exit_compiler.compile_side_exit(jit.pc, ctx, ocb_asm)
            @ocb.write(ocb_asm)
          end
          Invariants.record_global_inval_patch(asm, exit_pos)
          jit.record_boundary_patch_point = false
        end

        # In debug mode, verify our existing assumption
        if C.rjit_opts.verify_ctx && jit.at_current_insn?
          verify_ctx(jit, ctx)
        end

        case status = @insn_compiler.compile(jit, ctx, asm, insn)
        when KeepCompiling
          # For now, reset the chain depth after each instruction as only the
          # first instruction in the block can concern itself with the depth.
          ctx.chain_depth = 0

          index += insn.len
        when EndBlock
          # TODO: pad nops if entry exit exists (not needed for x86_64?)
          break
        when CantCompile
          # Rewind stack_size using ctx.with_stack_size to allow stack_size changes
          # before you return CantCompile.
          @exit_compiler.compile_side_exit(jit.pc, ctx.with_stack_size(jit.stack_size_for_pc), asm)

          # If this is the first instruction, this block never needs to be invalidated.
          if block.pc == iseq.body.iseq_encoded.to_i + index * C.VALUE.size
            block.invalidated = true
          end

          break
        else
          raise "compiling #{insn.name} returned unexpected status: #{status.inspect}"
        end
      end

      incr_counter(:compiled_block_count)
      add_block(iseq, block)
    end

    def leave_exit
      @leave_exit ||= Assembler.new.then do |asm|
        @exit_compiler.compile_leave_exit(asm)
        @ocb.write(asm)
      end
    end

    def incr_counter(name)
      if C.rjit_opts.stats
        C.rb_rjit_counters[name][0] += 1
      end
    end

    # Produce a generic context when the block version limit is hit for the block
    def limit_block_versions(iseq, pc, ctx)
      # Guard chains implement limits separately, do nothing
      if ctx.chain_depth > 0
        return ctx.dup
      end

      # If this block version we're about to add will hit the version limit
      if list_blocks(iseq, pc).size + 1 >= MAX_VERSIONS
        # Produce a generic context that stores no type information,
        # but still respects the stack_size and sp_offset constraints.
        # This new context will then match all future requests.
        generic_ctx = Context.new
        generic_ctx.stack_size = ctx.stack_size
        generic_ctx.sp_offset = ctx.sp_offset

        if ctx.diff(generic_ctx) == TypeDiff::Incompatible
          raise 'should substitute a compatible context'
        end

        return generic_ctx
      end

      return ctx.dup
    end

    def list_blocks(iseq, pc)
      rjit_blocks(iseq)[pc]
    end

    # @param [Integer] pc
    # @param [RubyVM::RJIT::Context] ctx
    # @return [RubyVM::RJIT::Block,NilClass]
    def find_block(iseq, pc, ctx)
      versions = rjit_blocks(iseq)[pc]

      best_version = nil
      best_diff = Float::INFINITY

      versions.each do |block|
        # Note that we always prefer the first matching
        # version found because of inline-cache chains
        case ctx.diff(block.ctx)
        in TypeDiff::Compatible[diff] if diff < best_diff
          best_version = block
          best_diff = diff
        else
        end
      end

      return best_version
    end

    # @param [RubyVM::RJIT::Block] block
    def add_block(iseq, block)
      rjit_blocks(iseq)[block.pc] << block
    end

    # @param [RubyVM::RJIT::Block] block
    def remove_block(iseq, block)
      rjit_blocks(iseq)[block.pc].delete(block)
    end

    def rjit_blocks(iseq)
      # Guard against ISEQ GC at random moments

      unless C.imemo_type_p(iseq, C.imemo_iseq)
        return Hash.new { |h, k| h[k] = [] }
      end

      unless iseq.body.rjit_blocks
        iseq.body.rjit_blocks = Hash.new { |blocks, pc| blocks[pc] = [] }
        # For some reason, rb_rjit_iseq_mark didn't protect this Hash
        # from being freed. So we rely on GC_REFS to keep the Hash.
        GC_REFS << iseq.body.rjit_blocks
      end
      iseq.body.rjit_blocks
    end

    def iseq_lineno(iseq, pc)
      C.rb_iseq_line_no(iseq, (pc - iseq.body.iseq_encoded.to_i) / C.VALUE.size)
    rescue RangeError # bignum too big to convert into `unsigned long long' (RangeError)
      -1
    end

    # Verify the ctx's types and mappings against the compile-time stack, self, and locals.
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    def verify_ctx(jit, ctx)
      # Only able to check types when at current insn
      assert(jit.at_current_insn?)

      self_val = jit.peek_at_self
      self_val_type = Type.from(self_val)

      # Verify self operand type
      assert_compatible(self_val_type, ctx.get_opnd_type(SelfOpnd))

      # Verify stack operand types
      [ctx.stack_size, MAX_TEMP_TYPES].min.times do |i|
        learned_mapping, learned_type = ctx.get_opnd_mapping(StackOpnd[i])
        stack_val = jit.peek_at_stack(i)
        val_type = Type.from(stack_val)

        case learned_mapping
        in MapToSelf
          if C.to_value(self_val) != C.to_value(stack_val)
            raise "verify_ctx: stack value was mapped to self, but values did not match:\n"\
              "stack: #{stack_val.inspect}, self: #{self_val.inspect}"
          end
        in MapToLocal[local_idx]
          local_val = jit.peek_at_local(local_idx)
          if C.to_value(local_val) != C.to_value(stack_val)
            raise "verify_ctx: stack value was mapped to local, but values did not match:\n"\
              "stack: #{stack_val.inspect}, local: #{local_val.inspect}"
          end
        in MapToStack
          # noop
        end

        # If the actual type differs from the learned type
        assert_compatible(val_type, learned_type)
      end

      # Verify local variable types
      local_table_size = jit.iseq.body.local_table_size
      [local_table_size, MAX_TEMP_TYPES].min.times do |i|
        learned_type = ctx.get_local_type(i)
        local_val = jit.peek_at_local(i)
        local_type = Type.from(local_val)

        assert_compatible(local_type, learned_type)
      end
    end

    def assert_compatible(actual_type, ctx_type)
      if actual_type.diff(ctx_type) == TypeDiff::Incompatible
        raise "verify_ctx: ctx type (#{ctx_type.type.inspect}) is incompatible with actual type (#{actual_type.type.inspect})"
      end
    end

    def assert(cond)
      unless cond
        raise "'#{cond.inspect}' was not true"
      end
    end

    def supported_platform?
      return @supported_platform if defined?(@supported_platform)
      @supported_platform = RUBY_PLATFORM.match?(/x86_64/).tap do |supported|
        warn "warning: RJIT does not support #{RUBY_PLATFORM} yet" unless supported
      end
    end
  end
end
PK*J[gI����$share/ruby/ruby_vm/rjit/jit_state.rbnu�[���module RubyVM::RJIT
  class JITState < Struct.new(
    :iseq,                        # @param `RubyVM::RJIT::CPointer::Struct_rb_iseq_t`
    :pc,                          # @param [Integer] The JIT target PC
    :cfp,                         # @param `RubyVM::RJIT::CPointer::Struct_rb_control_frame_t` The JIT source CFP (before RJIT is called)
    :block,                       # @param [RubyVM::RJIT::Block]
    :stack_size_for_pc,           # @param [Integer]
    :side_exit_for_pc,            # @param [Hash{ Integer => Integer }] { sp_offset => address }
    :record_boundary_patch_point, # @param [TrueClass,FalseClass]
  )
    def initialize(side_exit_for_pc: {}, record_boundary_patch_point: false, **) = super

    def insn
      Compiler.decode_insn(C.VALUE.new(pc).*)
    end

    def operand(index, signed: false, ruby: false)
      addr = pc + (index + 1) * Fiddle::SIZEOF_VOIDP
      value = Fiddle::Pointer.new(addr)[0, Fiddle::SIZEOF_VOIDP].unpack(signed ? 'q' : 'Q')[0]
      if ruby
        value = C.to_ruby(value)
      end
      value
    end

    def at_current_insn?
      pc == cfp.pc.to_i
    end

    def peek_at_local(n)
      local_table_size = iseq.body.local_table_size
      offset = -C::VM_ENV_DATA_SIZE - local_table_size + n + 1
      value = (cfp.ep + offset).*
      C.to_ruby(value)
    end

    def peek_at_stack(depth_from_top)
      raise 'not at current insn' unless at_current_insn?
      offset = -(1 + depth_from_top)
      # rb_rjit_branch_stub_hit updates SP, so you don't need to worry about sp_offset
      value = (cfp.sp + offset).*
      C.to_ruby(value)
    end

    def peek_at_self
      C.to_ruby(cfp.self)
    end

    def peek_at_block_handler(level)
      ep = ep_at_level(cfp, level:)
      ep[C::VM_ENV_DATA_INDEX_SPECVAL]
    end

    private

    def ep_at_level(cfp, level:)
      ep = cfp.ep
      level.times do
        # VM_ENV_PREV_EP
        ep = C.VALUE.new(ep[C::VM_ENV_DATA_INDEX_SPECVAL] & ~0x03)
      end
      ep
    end
  end
end
PK*J["�F�oo&share/ruby/ruby_vm/rjit/branch_stub.rbnu�[���module RubyVM::RJIT
  # Branch shapes
  Next0   = :Next0   # target0 is a fallthrough
  Next1   = :Next1   # target1 is a fallthrough
  Default = :Default # neither targets is a fallthrough

  class BranchStub < Struct.new(
    :iseq,       # @param [RubyVM::RJIT::CPointer::Struct_rb_iseq_struct] Branch target ISEQ
    :shape,      # @param [Symbol] Next0, Next1, or Default
    :target0,    # @param [RubyVM::RJIT::BranchTarget] First branch target
    :target1,    # @param [RubyVM::RJIT::BranchTarget,NilClass] Second branch target (optional)
    :compile,    # @param [Proc] A callback to (re-)generate this branch stub
    :start_addr, # @param [Integer] Stub source start address to be re-generated
    :end_addr,   # @param [Integer] Stub source end address to be re-generated
  )
  end

  class BranchTarget < Struct.new(
    :pc,
    :ctx,
    :address,
  )
  end
end
PK*J[��kO��%share/ruby/ruby_vm/rjit/entry_stub.rbnu�[���module RubyVM::RJIT
  class EntryStub < Struct.new(
    :start_addr, # @param [Integer] Stub source start address to be re-generated
    :end_addr,   # @param [Integer] Stub source end address to be re-generated
  )
  end
end
PK*J[nI���share/ruby/ruby_vm/rjit/type.rbnu�[���module RubyVM::RJIT
  # Represent the type of a value (local/stack/self) in RJIT
  Type = Data.define(:type) do
    # Check if the type is an immediate
    def imm?
      case self
      in Type::UnknownImm then true
      in Type::Nil then true
      in Type::True then true
      in Type::False then true
      in Type::Fixnum then true
      in Type::Flonum then true
      in Type::ImmSymbol then true
      else false
      end
    end

    # Returns true when the type is not specific.
    def unknown?
      case self
      in Type::Unknown | Type::UnknownImm | Type::UnknownHeap then true
      else false
      end
    end

    # Returns true when we know the VALUE is a specific handle type,
    # such as a static symbol ([Type::ImmSymbol], i.e. true from RB_STATIC_SYM_P()).
    # Opposite of [Self::is_unknown].
    def specific?
      !self.unknown?
    end

    # Check if the type is a heap object
    def heap?
      case self
      in Type::UnknownHeap then true
      in Type::TArray then true
      in Type::Hash then true
      in Type::HeapSymbol then true
      in Type::TString then true
      in Type::CString then true
      in Type::BlockParamProxy then true
      else false
      end
    end

    # Check if it's a T_ARRAY object
    def array?
      case self
      in Type::TArray then true
      else false
      end
    end

    # Check if it's a T_STRING object (both TString and CString are T_STRING)
    def string?
      case self
      in Type::TString then true
      in Type::CString then true
      else false
      end
    end

    # Returns the class if it is known, otherwise nil
    def known_class
      case self
      in Type::Nil then C.rb_cNilClass
      in Type::True then C.rb_cTrueClass
      in Type::False then C.rb_cFalseClass
      in Type::Fixnum then C.rb_cInteger
      in Type::Flonum then C.rb_cFloat
      in Type::ImmSymbol | Type::HeapSymbol then C.rb_cSymbol
      in Type::CString then C.rb_cString
      else nil
      end
    end

    # Returns a boolean representing whether the value is truthy if known, otherwise nil
    def known_truthy
      case self
      in Type::Nil then false
      in Type::False then false
      in Type::UnknownHeap then false
      in Type::Unknown | Type::UnknownImm then nil
      else true
      end
    end

    # Returns a boolean representing whether the value is equal to nil if known, otherwise nil
    def known_nil
      case [self, self.known_truthy]
      in Type::Nil, _ then true
      in Type::False, _ then false # Qfalse is not nil
      in _, true then false # if truthy, can't be nil
      in _, _ then nil # otherwise unknown
      end
    end

    def diff(dst)
      # Perfect match, difference is zero
      if self == dst
        return TypeDiff::Compatible[0]
      end

      # Any type can flow into an unknown type
      if dst == Type::Unknown
        return TypeDiff::Compatible[1]
      end

      # A CString is also a TString.
      if self == Type::CString && dst == Type::TString
        return TypeDiff::Compatible[1]
      end

      # Specific heap type into unknown heap type is imperfect but valid
      if self.heap? && dst == Type::UnknownHeap
        return TypeDiff::Compatible[1]
      end

      # Specific immediate type into unknown immediate type is imperfect but valid
      if self.imm? && dst == Type::UnknownImm
        return TypeDiff::Compatible[1]
      end

      # Incompatible types
      return TypeDiff::Incompatible
    end

    def upgrade(new_type)
      assert(new_type.diff(self) != TypeDiff::Incompatible)
      new_type
    end

    private

    def assert(cond)
      unless cond
        raise "'#{cond.inspect}' was not true"
      end
    end
  end

  # This returns an appropriate Type based on a known value
  class << Type
    def from(val)
      if C::SPECIAL_CONST_P(val)
        if fixnum?(val)
          Type::Fixnum
        elsif val.nil?
          Type::Nil
        elsif val == true
          Type::True
        elsif val == false
          Type::False
        elsif static_symbol?(val)
          Type::ImmSymbol
        elsif flonum?(val)
          Type::Flonum
        else
          raise "Illegal value: #{val.inspect}"
        end
      else
        val_class = C.to_value(C.rb_class_of(val))
        if val_class == C.rb_cString && C.rb_obj_frozen_p(val)
          return Type::CString
        end
        if C.to_value(val) == C.rb_block_param_proxy
          return Type::BlockParamProxy
        end
        case C::BUILTIN_TYPE(val)
        in C::RUBY_T_ARRAY
          Type::TArray
        in C::RUBY_T_HASH
          Type::Hash
        in C::RUBY_T_STRING
          Type::TString
        else
          Type::UnknownHeap
        end
      end
    end

    private

    def fixnum?(obj)
      (C.to_value(obj) & C::RUBY_FIXNUM_FLAG) == C::RUBY_FIXNUM_FLAG
    end

    def flonum?(obj)
      (C.to_value(obj) & C::RUBY_FLONUM_MASK) == C::RUBY_FLONUM_FLAG
    end

    def static_symbol?(obj)
      (C.to_value(obj) & 0xff) == C::RUBY_SYMBOL_FLAG
    end
  end

  # List of types
  Type::Unknown     = Type[:Unknown]
  Type::UnknownImm  = Type[:UnknownImm]
  Type::UnknownHeap = Type[:UnknownHeap]
  Type::Nil         = Type[:Nil]
  Type::True        = Type[:True]
  Type::False       = Type[:False]
  Type::Fixnum      = Type[:Fixnum]
  Type::Flonum      = Type[:Flonum]
  Type::Hash        = Type[:Hash]
  Type::ImmSymbol   = Type[:ImmSymbol]
  Type::HeapSymbol  = Type[:HeapSymbol]

  Type::TString = Type[:TString] # An object with the T_STRING flag set, possibly an rb_cString
  Type::CString = Type[:CString] # An un-subclassed string of type rb_cString (can have instance vars in some cases)
  Type::TArray  = Type[:TArray]  # An object with the T_ARRAY flag set, possibly an rb_cArray

  Type::BlockParamProxy = Type[:BlockParamProxy] # A special sentinel value indicating the block parameter should be read from

  module TypeDiff
    Compatible = Data.define(:diversion) # The smaller, the more compatible.
    Incompatible = :Incompatible
  end
end
PK*J[|���*�*$share/ruby/ruby_vm/rjit/c_pointer.rbnu�[���module RubyVM::RJIT
  # Every class under this namespace is a pointer. Even if the type is
  # immediate, it shouldn't be dereferenced until `*` is called.
  module CPointer
    # Note: We'd like to avoid alphabetic method names to avoid a conflict
    # with member methods. to_i and to_s are considered an exception.
    class Struct
      # @param name [String]
      # @param sizeof [Integer]
      # @param members [Hash{ Symbol => [RubyVM::RJIT::CType::*, Integer, TrueClass] }]
      def initialize(addr, sizeof, members)
        @addr = addr
        @sizeof = sizeof
        @members = members
      end

      # Get a raw address
      def to_i
        @addr
      end

      # Serialized address for generated code
      def to_s
        "0x#{@addr.to_s(16)}"
      end

      # Pointer diff
      def -(struct)
        raise ArgumentError if self.class != struct.class
        (@addr - struct.to_i) / @sizeof
      end

      # Primitive API that does no automatic dereference
      # TODO: remove this?
      # @param member [Symbol]
      def [](member)
        type, offset = @members.fetch(member)
        type.new(@addr + offset / 8)
      end

      private

      # @param member [Symbol]
      # @param value [Object]
      def []=(member, value)
        type, offset = @members.fetch(member)
        type[@addr + offset / 8] = value
      end

      # @param size [Integer]
      # @param members [Hash{ Symbol => [Integer, RubyVM::RJIT::CType::*] }]
      def self.define(size, members)
        Class.new(self) do
          # Return the size of this type
          define_singleton_method(:size) { size }

          # Return the offset to a field
          define_singleton_method(:offsetof) do |field, *fields|
            member, offset = members.fetch(field)
            offset /= 8
            unless fields.empty?
              offset += member.offsetof(*fields)
            end
            offset
          end

          # Return member names
          define_singleton_method(:members) { members.keys }

          define_method(:initialize) do |addr = nil|
            if addr.nil? # TODO: get rid of this feature later
              addr = Fiddle.malloc(size)
            end
            super(addr, size, members)
          end

          members.each do |member, (type, offset, to_ruby)|
            # Intelligent API that does automatic dereference
            define_method(member) do
              value = self[member]
              if value.respond_to?(:*)
                value = value.*
              end
              if to_ruby
                value = C.to_ruby(value)
              end
              value
            end

            define_method("#{member}=") do |value|
              if to_ruby
                value = C.to_value(value)
              end
              self[member] = value
            end
          end
        end
      end
    end

    # Note: We'd like to avoid alphabetic method names to avoid a conflict
    # with member methods. to_i is considered an exception.
    class Union
      # @param _name [String] To be used when it starts defining a union pointer class
      # @param sizeof [Integer]
      # @param members [Hash{ Symbol => RubyVM::RJIT::CType::* }]
      def initialize(addr, sizeof, members)
        @addr = addr
        @sizeof = sizeof
        @members = members
      end

      # Get a raw address
      def to_i
        @addr
      end

      # Move addr to access this pointer like an array
      def +(index)
        raise ArgumentError unless index.is_a?(Integer)
        self.class.new(@addr + index * @sizeof)
      end

      # Pointer diff
      def -(union)
        raise ArgumentError if self.class != union.class
        (@addr - union.instance_variable_get(:@addr)) / @sizeof
      end

      # @param sizeof [Integer]
      # @param members [Hash{ Symbol => RubyVM::RJIT::CType::* }]
      def self.define(sizeof, members)
        Class.new(self) do
          # Return the size of this type
          define_singleton_method(:sizeof) { sizeof }

          # Part of Struct's offsetof implementation
          define_singleton_method(:offsetof) do |field, *fields|
            member = members.fetch(field)
            offset = 0
            unless fields.empty?
              offset += member.offsetof(*fields)
            end
            offset
          end

          define_method(:initialize) do |addr|
            super(addr, sizeof, members)
          end

          members.each do |member, type|
            # Intelligent API that does automatic dereference
            define_method(member) do
              value = type.new(@addr)
              if value.respond_to?(:*)
                value = value.*
              end
              value
            end
          end
        end
      end
    end

    class Immediate
      # @param addr [Integer]
      # @param size [Integer]
      # @param pack [String]
      def initialize(addr, size, pack)
        @addr = addr
        @size = size
        @pack = pack
      end

      # Get a raw address
      def to_i
        @addr
      end

      # Move addr to addess this pointer like an array
      def +(index)
        Immediate.new(@addr + index * @size, @size, @pack)
      end

      # Dereference
      def *
        self[0]
      end

      # Array access
      def [](index)
        return nil if @addr == 0
        Fiddle::Pointer.new(@addr + index * @size)[0, @size].unpack1(@pack)
      end

      # Array set
      def []=(index, value)
        Fiddle::Pointer.new(@addr + index * @size)[0, @size] = [value].pack(@pack)
      end

      # Serialized address for generated code. Used for embedding things like body->iseq_encoded.
      def to_s
        "0x#{Integer(@addr).to_s(16)}"
      end

      # @param fiddle_type [Integer] Fiddle::TYPE_*
      def self.define(fiddle_type)
        size = Fiddle::PackInfo::SIZE_MAP.fetch(fiddle_type)
        pack = Fiddle::PackInfo::PACK_MAP.fetch(fiddle_type)

        Class.new(self) do
          define_method(:initialize) do |addr|
            super(addr, size, pack)
          end

          define_singleton_method(:size) do
            size
          end

          # Type-level []=: Used by struct fields
          define_singleton_method(:[]=) do |addr, value|
            Fiddle::Pointer.new(addr)[0, size] = [value].pack(pack)
          end
        end
      end
    end

    # -Fiddle::TYPE_CHAR Immediate with special handling of true/false
    class Bool < Immediate.define(-Fiddle::TYPE_CHAR)
      # Dereference
      def *
        return nil if @addr == 0
        super != 0
      end

      def self.[]=(addr, value)
        super(addr, value ? 1 : 0)
      end
    end

    # Basically Immediate but without #* to skip auto-dereference of structs.
    class Array
      attr_reader :type

      # @param addr [Integer]
      # @param type [Class] RubyVM::RJIT::CType::*
      def initialize(addr, type)
        @addr = addr
        @type = type
      end

      # Array access
      def [](index)
        @type.new(@addr)[index]
      end

      # Array set
      # @param index [Integer]
      # @param value [Integer, RubyVM::RJIT::CPointer::Struct] an address itself or an object that return an address with to_i
      def []=(index, value)
        @type.new(@addr)[index] = value
      end

      private

      def self.define(block)
        Class.new(self) do
          define_method(:initialize) do |addr|
            super(addr, block.call)
          end
        end
      end
    end

    class Pointer
      attr_reader :type

      # @param addr [Integer]
      # @param type [Class] RubyVM::RJIT::CType::*
      def initialize(addr, type)
        @addr = addr
        @type = type
      end

      # Move addr to addess this pointer like an array
      def +(index)
        raise ArgumentError unless index.is_a?(Integer)
        Pointer.new(@addr + index * Fiddle::SIZEOF_VOIDP, @type)
      end

      # Dereference
      def *
        return nil if dest_addr == 0
        @type.new(dest_addr)
      end

      # Array access
      def [](index)
        (self + index).*
      end

      # Array set
      # @param index [Integer]
      # @param value [Integer, RubyVM::RJIT::CPointer::Struct] an address itself or an object that return an address with to_i
      def []=(index, value)
        Fiddle::Pointer.new(@addr + index * Fiddle::SIZEOF_VOIDP)[0, Fiddle::SIZEOF_VOIDP] =
          [value.to_i].pack(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP])
      end

      # Get a raw address
      def to_i
        @addr
      end

      private

      def dest_addr
        Fiddle::Pointer.new(@addr)[0, Fiddle::SIZEOF_VOIDP].unpack1(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP])
      end

      def self.define(block)
        Class.new(self) do
          define_method(:initialize) do |addr|
            super(addr, block.call)
          end

          # Type-level []=: Used by struct fields
          # @param addr [Integer]
          # @param value [Integer, RubyVM::RJIT::CPointer::Struct] an address itself, or an object that return an address with to_i
          define_singleton_method(:[]=) do |addr, value|
            value = value.to_i
            Fiddle::Pointer.new(addr)[0, Fiddle::SIZEOF_VOIDP] = [value].pack(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP])
          end
        end
      end
    end

    class BitField
      # @param addr [Integer]
      # @param width [Integer]
      # @param offset [Integer]
      def initialize(addr, width, offset)
        @addr = addr
        @width = width
        @offset = offset
      end

      # Dereference
      def *
        byte = Fiddle::Pointer.new(@addr)[0, Fiddle::SIZEOF_CHAR].unpack('c').first
        if @width == 1
          bit = (1 & (byte >> @offset))
          bit == 1
        elsif @width <= 8 && @offset == 0
          bitmask = @width.times.map { |i| 1 << i }.sum
          byte & bitmask
        else
          raise NotImplementedError.new("not-implemented bit field access: width=#{@width} offset=#{@offset}")
        end
      end

      # @param width [Integer]
      # @param offset [Integer]
      def self.define(width, offset)
        Class.new(self) do
          define_method(:initialize) do |addr|
            super(addr, width, offset)
          end
        end
      end
    end

    # Give a name to a dynamic CPointer class to see it on inspect
    def self.with_class_name(prefix, name, cache: false, &block)
      return block.call if !name.nil? && name.empty?

      # Use a cached result only if cache: true
      class_name = "#{prefix}_#{name}"
      klass =
        if cache && self.const_defined?(class_name)
          self.const_get(class_name)
        else
          block.call
        end

      # Give it a name unless it's already defined
      unless self.const_defined?(class_name)
        self.const_set(class_name, klass)
      end

      klass
    end
  end
end
PK*J[�.�=�
�
!share/ruby/ruby_vm/rjit/c_type.rbnu�[���require 'fiddle'
require 'fiddle/pack'
require_relative 'c_pointer'

module RubyVM::RJIT
  module CType
    module Struct
      # @param name [String]
      # @param members [Hash{ Symbol => [Integer, RubyVM::RJIT::CType::*] }]
      def self.new(name, sizeof, **members)
        name = members.keys.join('_') if name.empty?
        CPointer.with_class_name('Struct', name) do
          CPointer::Struct.define(sizeof, members)
        end
      end
    end

    module Union
      # @param name [String]
      # @param members [Hash{ Symbol => RubyVM::RJIT::CType::* }]
      def self.new(name, sizeof, **members)
        name = members.keys.join('_') if name.empty?
        CPointer.with_class_name('Union', name) do
          CPointer::Union.define(sizeof, members)
        end
      end
    end

    module Immediate
      # @param fiddle_type [Integer]
      def self.new(fiddle_type)
        name = Fiddle.constants.find do |const|
          const.start_with?('TYPE_') && Fiddle.const_get(const) == fiddle_type.abs
        end&.name
        name = name.delete_prefix('TYPE_')
        if fiddle_type.negative?
          name.prepend('U')
        end
        CPointer.with_class_name('Immediate', name, cache: true) do
          CPointer::Immediate.define(fiddle_type)
        end
      end

      # @param type [String]
      def self.parse(ctype)
        new(Fiddle::Importer.parse_ctype(ctype))
      end

      def self.find(size, signed)
        fiddle_type = TYPE_MAP.fetch(size)
        fiddle_type = -fiddle_type unless signed
        new(fiddle_type)
      end

      TYPE_MAP = Fiddle::PackInfo::SIZE_MAP.map { |type, size| [size, type.abs] }.to_h
      private_constant :TYPE_MAP
    end

    module Bool
      def self.new
        CPointer::Bool
      end
    end

    class Array
      def self.new(&block)
        CPointer.with_class_name('Array', block.object_id.to_s) do
          CPointer::Array.define(block)
        end
      end
    end

    class Pointer
      # This takes a block to avoid "stack level too deep" on a cyclic reference
      # @param block [Proc]
      def self.new(&block)
        CPointer.with_class_name('Pointer', block.object_id.to_s) do
          CPointer::Pointer.define(block)
        end
      end
    end

    module BitField
      # @param width [Integer]
      # @param offset [Integer]
      def self.new(width, offset)
        CPointer.with_class_name('BitField', "#{offset}_#{width}") do
          CPointer::BitField.define(width, offset)
        end
      end
    end

    # Types that are referenced but not part of code generation targets
    Stub = ::Struct.new(:name)

    # Types that it failed to figure out from the header
    Unknown = Module.new
  end
end
PK*J[��XNN(share/ruby/ruby_vm/rjit/exit_compiler.rbnu�[���module RubyVM::RJIT
  class ExitCompiler
    def initialize = freeze

    # Used for invalidating a block on entry.
    # @param pc [Integer]
    # @param asm [RubyVM::RJIT::Assembler]
    def compile_entry_exit(pc, ctx, asm, cause:)
      # Fix pc/sp offsets for the interpreter
      save_pc_and_sp(pc, ctx, asm, reset_sp_offset: false)

      # Increment per-insn exit counter
      count_insn_exit(pc, asm)

      # Restore callee-saved registers
      asm.comment("#{cause}: entry exit")
      asm.pop(SP)
      asm.pop(EC)
      asm.pop(CFP)

      asm.mov(C_RET, Qundef)
      asm.ret
    end

    # Set to cfp->jit_return by default for leave insn
    # @param asm [RubyVM::RJIT::Assembler]
    def compile_leave_exit(asm)
      asm.comment('default cfp->jit_return')

      # Restore callee-saved registers
      asm.pop(SP)
      asm.pop(EC)
      asm.pop(CFP)

      # :rax is written by #leave
      asm.ret
    end

    # Fire cfunc events on invalidation by TracePoint
    # @param asm [RubyVM::RJIT::Assembler]
    def compile_full_cfunc_return(asm)
      # This chunk of code expects REG_EC to be filled properly and
      # RAX to contain the return value of the C method.

      asm.comment('full cfunc return')
      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], :rax)
      asm.call(C.rjit_full_cfunc_return)

      # TODO: count the exit

      # Restore callee-saved registers
      asm.pop(SP)
      asm.pop(EC)
      asm.pop(CFP)

      asm.mov(C_RET, Qundef)
      asm.ret
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def compile_side_exit(pc, ctx, asm)
      # Fix pc/sp offsets for the interpreter
      save_pc_and_sp(pc, ctx.dup, asm) # dup to avoid sp_offset update

      # Increment per-insn exit counter
      count_insn_exit(pc, asm)

      # Restore callee-saved registers
      asm.comment("exit to interpreter on #{pc_to_insn(pc).name}")
      asm.pop(SP)
      asm.pop(EC)
      asm.pop(CFP)

      asm.mov(C_RET, Qundef)
      asm.ret
    end

    # @param asm [RubyVM::RJIT::Assembler]
    # @param entry_stub [RubyVM::RJIT::EntryStub]
    def compile_entry_stub(asm, entry_stub)
      # Call rb_rjit_entry_stub_hit
      asm.comment('entry stub hit')
      asm.mov(C_ARGS[0], to_value(entry_stub))
      asm.call(C.rb_rjit_entry_stub_hit)

      # Jump to the address returned by rb_rjit_entry_stub_hit
      asm.jmp(:rax)
    end

    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    # @param branch_stub [RubyVM::RJIT::BranchStub]
    # @param target0_p [TrueClass,FalseClass]
    def compile_branch_stub(ctx, asm, branch_stub, target0_p)
      # Call rb_rjit_branch_stub_hit
      iseq = branch_stub.iseq
      if C.rjit_opts.dump_disasm && C.imemo_type_p(iseq, C.imemo_iseq) # Guard against ISEQ GC at random moments
        asm.comment("branch stub hit: #{iseq.body.location.label}@#{C.rb_iseq_path(iseq)}:#{iseq_lineno(iseq, target0_p ? branch_stub.target0.pc : branch_stub.target1.pc)}")
      end
      asm.mov(:rdi, to_value(branch_stub))
      asm.mov(:esi, ctx.sp_offset)
      asm.mov(:edx, target0_p ? 1 : 0)
      asm.call(C.rb_rjit_branch_stub_hit)

      # Jump to the address returned by rb_rjit_branch_stub_hit
      asm.jmp(:rax)
    end

    private

    def pc_to_insn(pc)
      Compiler.decode_insn(C.VALUE.new(pc).*)
    end

    # @param pc [Integer]
    # @param asm [RubyVM::RJIT::Assembler]
    def count_insn_exit(pc, asm)
      if C.rjit_opts.stats
        insn = Compiler.decode_insn(C.VALUE.new(pc).*)
        asm.comment("increment insn exit: #{insn.name}")
        asm.mov(:rax, (C.rjit_insn_exits + insn.bin).to_i)
        asm.add([:rax], 1) # TODO: lock
      end
      if C.rjit_opts.trace_exits
        asm.comment('rjit_record_exit_stack')
        asm.mov(C_ARGS[0], pc)
        asm.call(C.rjit_record_exit_stack)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def save_pc_and_sp(pc, ctx, asm, reset_sp_offset: true)
      # Update pc (TODO: manage PC offset?)
      asm.comment("save PC#{' and SP' if ctx.sp_offset != 0} to CFP")
      asm.mov(:rax, pc) # rax = jit.pc
      asm.mov([CFP, C.rb_control_frame_t.offsetof(:pc)], :rax) # cfp->pc = rax

      # Update sp
      if ctx.sp_offset != 0
        asm.add(SP, C.VALUE.size * ctx.sp_offset) # sp += stack_size
        asm.mov([CFP, C.rb_control_frame_t.offsetof(:sp)], SP) # cfp->sp = sp
        if reset_sp_offset
          ctx.sp_offset = 0
        end
      end
    end

    def to_value(obj)
      GC_REFS << obj
      C.to_value(obj)
    end

    def iseq_lineno(iseq, pc)
      C.rb_iseq_line_no(iseq, (pc - iseq.body.iseq_encoded.to_i) / C.VALUE.size)
    rescue RangeError # bignum too big to convert into `unsigned long long' (RangeError)
      -1
    end
  end
end
PK*J[�<o@�@�$share/ruby/ruby_vm/rjit/assembler.rbnu�[���# frozen_string_literal: true
module RubyVM::RJIT
  # 8-bit memory access
  class BytePtr < Data.define(:reg, :disp); end

  # 32-bit memory access
  class DwordPtr < Data.define(:reg, :disp); end

  # 64-bit memory access
  QwordPtr = Array

  # SystemV x64 calling convention
  C_ARGS = [:rdi, :rsi, :rdx, :rcx, :r8, :r9]
  C_RET  = :rax

  # https://cdrdv2.intel.com/v1/dl/getContent/671110
  # Mostly an x86_64 assembler, but this also has some stuff that is useful for any architecture.
  class Assembler
    # rel8 jumps are made with labels
    class Label < Data.define(:id, :name); end

    # rel32 is inserted as [Rel32, Rel32Pad..] and converted on #resolve_rel32
    class Rel32 < Data.define(:addr); end
    Rel32Pad = Object.new

    # A set of ModR/M values encoded on #insn
    class ModRM < Data.define(:mod, :reg, :rm); end
    Mod00 = 0b00 # Mod 00: [reg]
    Mod01 = 0b01 # Mod 01: [reg]+disp8
    Mod10 = 0b10 # Mod 10: [reg]+disp32
    Mod11 = 0b11 # Mod 11: reg

    # REX =   0100WR0B
    REX_B = 0b01000001
    REX_R = 0b01000100
    REX_W = 0b01001000

    # Operand matchers
    R32   = -> (op) { op.is_a?(Symbol) && r32?(op) }
    R64   = -> (op) { op.is_a?(Symbol) && r64?(op) }
    IMM8  = -> (op) { op.is_a?(Integer) && imm8?(op) }
    IMM32 = -> (op) { op.is_a?(Integer) && imm32?(op) }
    IMM64 = -> (op) { op.is_a?(Integer) && imm64?(op) }

    def initialize
      @bytes = []
      @labels = {}
      @label_id = 0
      @comments = Hash.new { |h, k| h[k] = [] }
      @blocks = Hash.new { |h, k| h[k] = [] }
      @stub_starts = Hash.new { |h, k| h[k] = [] }
      @stub_ends = Hash.new { |h, k| h[k] = [] }
      @pos_markers = Hash.new { |h, k| h[k] = [] }
    end

    def assemble(addr)
      set_code_addrs(addr)
      resolve_rel32(addr)
      resolve_labels

      write_bytes(addr)

      @pos_markers.each do |write_pos, markers|
        markers.each { |marker| marker.call(addr + write_pos) }
      end
      @bytes.size
    ensure
      @bytes.clear
    end

    def size
      @bytes.size
    end

    #
    # Instructions
    #

    def add(dst, src)
      case [dst, src]
      # ADD r/m64, imm8 (Mod 00: [reg])
      in [QwordPtr[R64 => dst_reg], IMM8 => src_imm]
        # REX.W + 83 /0 ib
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod00, reg: 0, rm: dst_reg],
          imm: imm8(src_imm),
        )
      # ADD r/m64, imm8 (Mod 11: reg)
      in [R64 => dst_reg, IMM8 => src_imm]
        # REX.W + 83 /0 ib
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod11, reg: 0, rm: dst_reg],
          imm: imm8(src_imm),
        )
      # ADD r/m64 imm32 (Mod 11: reg)
      in [R64 => dst_reg, IMM32 => src_imm]
        # REX.W + 81 /0 id
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x81,
          mod_rm: ModRM[mod: Mod11, reg: 0, rm: dst_reg],
          imm: imm32(src_imm),
        )
      # ADD r/m64, r64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 01 /r
        # MR: Operand 1: ModRM:r/m (r, w), Operand 2: ModRM:reg (r)
        insn(
          prefix: REX_W,
          opcode: 0x01,
          mod_rm: ModRM[mod: Mod11, reg: src_reg, rm: dst_reg],
        )
      end
    end

    def and(dst, src)
      case [dst, src]
      # AND r/m64, imm8 (Mod 11: reg)
      in [R64 => dst_reg, IMM8 => src_imm]
        # REX.W + 83 /4 ib
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod11, reg: 4, rm: dst_reg],
          imm: imm8(src_imm),
        )
      # AND r/m64, imm32 (Mod 11: reg)
      in [R64 => dst_reg, IMM32 => src_imm]
        # REX.W + 81 /4 id
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x81,
          mod_rm: ModRM[mod: Mod11, reg: 4, rm: dst_reg],
          imm: imm32(src_imm),
        )
      # AND r64, r/m64 (Mod 01: [reg]+disp8)
      in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM8 => src_disp]]
        # REX.W + 23 /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: 0x23,
          mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg],
          disp: imm8(src_disp),
        )
      # AND r64, r/m64 (Mod 10: [reg]+disp32)
      in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM32 => src_disp]]
        # REX.W + 23 /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: 0x23,
          mod_rm: ModRM[mod: Mod10, reg: dst_reg, rm: src_reg],
          disp: imm32(src_disp),
        )
      end
    end

    def call(dst)
      case dst
      # CALL rel32
      in Integer => dst_addr
        # E8 cd
        # D: Operand 1: Offset
        insn(opcode: 0xe8, imm: rel32(dst_addr))
      # CALL r/m64 (Mod 11: reg)
      in R64 => dst_reg
        # FF /2
        # M: Operand 1: ModRM:r/m (r)
        insn(
          opcode: 0xff,
          mod_rm: ModRM[mod: Mod11, reg: 2, rm: dst_reg],
        )
      end
    end

    def cmove(dst, src)
      case [dst, src]
      # CMOVE r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 44 /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x44],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      end
    end

    def cmovg(dst, src)
      case [dst, src]
      # CMOVG r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 4F /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x4f],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      end
    end

    def cmovge(dst, src)
      case [dst, src]
      # CMOVGE r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 4D /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x4d],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      end
    end

    def cmovl(dst, src)
      case [dst, src]
      # CMOVL r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 4C /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x4c],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      end
    end

    def cmovle(dst, src)
      case [dst, src]
      # CMOVLE r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 4E /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x4e],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      end
    end

    def cmovne(dst, src)
      case [dst, src]
      # CMOVNE r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 45 /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x45],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      end
    end

    def cmovnz(dst, src)
      case [dst, src]
      # CMOVNZ r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 45 /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x45],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      end
    end

    def cmovz(dst, src)
      case [dst, src]
      # CMOVZ r64, r/m64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 0F 44 /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x44],
          mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
        )
      # CMOVZ r64, r/m64 (Mod 01: [reg]+disp8)
      in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM8 => src_disp]]
        # REX.W + 0F 44 /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: [0x0f, 0x44],
          mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg],
          disp: imm8(src_disp),
        )
      end
    end

    def cmp(left, right)
      case [left, right]
      # CMP r/m8, imm8 (Mod 01: [reg]+disp8)
      in [BytePtr[R64 => left_reg, IMM8 => left_disp], IMM8 => right_imm]
        # 80 /7 ib
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          opcode: 0x80,
          mod_rm: ModRM[mod: Mod01, reg: 7, rm: left_reg],
          disp: left_disp,
          imm: imm8(right_imm),
        )
      # CMP r/m32, imm32 (Mod 01: [reg]+disp8)
      in [DwordPtr[R64 => left_reg, IMM8 => left_disp], IMM32 => right_imm]
        # 81 /7 id
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          opcode: 0x81,
          mod_rm: ModRM[mod: Mod01, reg: 7, rm: left_reg],
          disp: left_disp,
          imm: imm32(right_imm),
        )
      # CMP r/m64, imm8 (Mod 01: [reg]+disp8)
      in [QwordPtr[R64 => left_reg, IMM8 => left_disp], IMM8 => right_imm]
        # REX.W + 83 /7 ib
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod01, reg: 7, rm: left_reg],
          disp: left_disp,
          imm: imm8(right_imm),
        )
      # CMP r/m64, imm32 (Mod 01: [reg]+disp8)
      in [QwordPtr[R64 => left_reg, IMM8 => left_disp], IMM32 => right_imm]
        # REX.W + 81 /7 id
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x81,
          mod_rm: ModRM[mod: Mod01, reg: 7, rm: left_reg],
          disp: left_disp,
          imm: imm32(right_imm),
        )
      # CMP r/m64, imm8 (Mod 10: [reg]+disp32)
      in [QwordPtr[R64 => left_reg, IMM32 => left_disp], IMM8 => right_imm]
        # REX.W + 83 /7 ib
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod10, reg: 7, rm: left_reg],
          disp: imm32(left_disp),
          imm: imm8(right_imm),
        )
      # CMP r/m64, imm8 (Mod 11: reg)
      in [R64 => left_reg, IMM8 => right_imm]
        # REX.W + 83 /7 ib
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod11, reg: 7, rm: left_reg],
          imm: imm8(right_imm),
        )
      # CMP r/m64, imm32 (Mod 11: reg)
      in [R64 => left_reg, IMM32 => right_imm]
        # REX.W + 81 /7 id
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x81,
          mod_rm: ModRM[mod: Mod11, reg: 7, rm: left_reg],
          imm: imm32(right_imm),
        )
      # CMP r/m64, r64 (Mod 01: [reg]+disp8)
      in [QwordPtr[R64 => left_reg, IMM8 => left_disp], R64 => right_reg]
        # REX.W + 39 /r
        # MR: Operand 1: ModRM:r/m (r), Operand 2: ModRM:reg (r)
        insn(
          prefix: REX_W,
          opcode: 0x39,
          mod_rm: ModRM[mod: Mod01, reg: right_reg, rm: left_reg],
          disp: left_disp,
        )
      # CMP r/m64, r64 (Mod 10: [reg]+disp32)
      in [QwordPtr[R64 => left_reg, IMM32 => left_disp], R64 => right_reg]
        # REX.W + 39 /r
        # MR: Operand 1: ModRM:r/m (r), Operand 2: ModRM:reg (r)
        insn(
          prefix: REX_W,
          opcode: 0x39,
          mod_rm: ModRM[mod: Mod10, reg: right_reg, rm: left_reg],
          disp: imm32(left_disp),
        )
      # CMP r/m64, r64 (Mod 11: reg)
      in [R64 => left_reg, R64 => right_reg]
        # REX.W + 39 /r
        # MR: Operand 1: ModRM:r/m (r), Operand 2: ModRM:reg (r)
        insn(
          prefix: REX_W,
          opcode: 0x39,
          mod_rm: ModRM[mod: Mod11, reg: right_reg, rm: left_reg],
        )
      end
    end

    def jbe(dst)
      case dst
      # JBE rel8
      in Label => dst_label
        # 76 cb
        insn(opcode: 0x76, imm: dst_label)
      # JBE rel32
      in Integer => dst_addr
        # 0F 86 cd
        insn(opcode: [0x0f, 0x86], imm: rel32(dst_addr))
      end
    end

    def je(dst)
      case dst
      # JE rel8
      in Label => dst_label
        # 74 cb
        insn(opcode: 0x74, imm: dst_label)
      # JE rel32
      in Integer => dst_addr
        # 0F 84 cd
        insn(opcode: [0x0f, 0x84], imm: rel32(dst_addr))
      end
    end

    def jl(dst)
      case dst
      # JL rel32
      in Integer => dst_addr
        # 0F 8C cd
        insn(opcode: [0x0f, 0x8c], imm: rel32(dst_addr))
      end
    end

    def jmp(dst)
      case dst
      # JZ rel8
      in Label => dst_label
        # EB cb
        insn(opcode: 0xeb, imm: dst_label)
      # JMP rel32
      in Integer => dst_addr
        # E9 cd
        insn(opcode: 0xe9, imm: rel32(dst_addr))
      # JMP r/m64 (Mod 01: [reg]+disp8)
      in QwordPtr[R64 => dst_reg, IMM8 => dst_disp]
        # FF /4
        insn(opcode: 0xff, mod_rm: ModRM[mod: Mod01, reg: 4, rm: dst_reg], disp: dst_disp)
      # JMP r/m64 (Mod 11: reg)
      in R64 => dst_reg
        # FF /4
        insn(opcode: 0xff, mod_rm: ModRM[mod: Mod11, reg: 4, rm: dst_reg])
      end
    end

    def jne(dst)
      case dst
      # JNE rel8
      in Label => dst_label
        # 75 cb
        insn(opcode: 0x75, imm: dst_label)
      # JNE rel32
      in Integer => dst_addr
        # 0F 85 cd
        insn(opcode: [0x0f, 0x85], imm: rel32(dst_addr))
      end
    end

    def jnz(dst)
      case dst
      # JE rel8
      in Label => dst_label
        # 75 cb
        insn(opcode: 0x75, imm: dst_label)
      # JNZ rel32
      in Integer => dst_addr
        # 0F 85 cd
        insn(opcode: [0x0f, 0x85], imm: rel32(dst_addr))
      end
    end

    def jo(dst)
      case dst
      # JO rel32
      in Integer => dst_addr
        # 0F 80 cd
        insn(opcode: [0x0f, 0x80], imm: rel32(dst_addr))
      end
    end

    def jz(dst)
      case dst
      # JZ rel8
      in Label => dst_label
        # 74 cb
        insn(opcode: 0x74, imm: dst_label)
      # JZ rel32
      in Integer => dst_addr
        # 0F 84 cd
        insn(opcode: [0x0f, 0x84], imm: rel32(dst_addr))
      end
    end

    def lea(dst, src)
      case [dst, src]
      # LEA r64,m (Mod 01: [reg]+disp8)
      in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM8 => src_disp]]
        # REX.W + 8D /r
        # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: 0x8d,
          mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg],
          disp: imm8(src_disp),
        )
      # LEA r64,m (Mod 10: [reg]+disp32)
      in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM32 => src_disp]]
        # REX.W + 8D /r
        # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: 0x8d,
          mod_rm: ModRM[mod: Mod10, reg: dst_reg, rm: src_reg],
          disp: imm32(src_disp),
        )
      end
    end

    def mov(dst, src)
      case dst
      in R32 => dst_reg
        case src
        # MOV r32 r/m32 (Mod 01: [reg]+disp8)
        in DwordPtr[R64 => src_reg, IMM8 => src_disp]
          # 8B /r
          # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r)
          insn(
            opcode: 0x8b,
            mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg],
            disp: src_disp,
          )
        # MOV r32, imm32 (Mod 11: reg)
        in IMM32 => src_imm
          # B8+ rd id
          # OI: Operand 1: opcode + rd (w), Operand 2: imm8/16/32/64
          insn(
            opcode: 0xb8,
            rd: dst_reg,
            imm: imm32(src_imm),
          )
        end
      in R64 => dst_reg
        case src
        # MOV r64, r/m64 (Mod 00: [reg])
        in QwordPtr[R64 => src_reg]
          # REX.W + 8B /r
          # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r)
          insn(
            prefix: REX_W,
            opcode: 0x8b,
            mod_rm: ModRM[mod: Mod00, reg: dst_reg, rm: src_reg],
          )
        # MOV r64, r/m64 (Mod 01: [reg]+disp8)
        in QwordPtr[R64 => src_reg, IMM8 => src_disp]
          # REX.W + 8B /r
          # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r)
          insn(
            prefix: REX_W,
            opcode: 0x8b,
            mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg],
            disp: src_disp,
          )
        # MOV r64, r/m64 (Mod 10: [reg]+disp32)
        in QwordPtr[R64 => src_reg, IMM32 => src_disp]
          # REX.W + 8B /r
          # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r)
          insn(
            prefix: REX_W,
            opcode: 0x8b,
            mod_rm: ModRM[mod: Mod10, reg: dst_reg, rm: src_reg],
            disp: imm32(src_disp),
          )
        # MOV r64, r/m64 (Mod 11: reg)
        in R64 => src_reg
          # REX.W + 8B /r
          # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r)
          insn(
            prefix: REX_W,
            opcode: 0x8b,
            mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
          )
        # MOV r/m64, imm32 (Mod 11: reg)
        in IMM32 => src_imm
          # REX.W + C7 /0 id
          # MI: Operand 1: ModRM:r/m (w), Operand 2: imm8/16/32/64
          insn(
            prefix: REX_W,
            opcode: 0xc7,
            mod_rm: ModRM[mod: Mod11, reg: 0, rm: dst_reg],
            imm: imm32(src_imm),
          )
        # MOV r64, imm64
        in IMM64 => src_imm
          # REX.W + B8+ rd io
          # OI: Operand 1: opcode + rd (w), Operand 2: imm8/16/32/64
          insn(
            prefix: REX_W,
            opcode: 0xb8,
            rd: dst_reg,
            imm: imm64(src_imm),
          )
        end
      in DwordPtr[R64 => dst_reg, IMM8 => dst_disp]
        case src
        # MOV r/m32, imm32 (Mod 01: [reg]+disp8)
        in IMM32 => src_imm
          # C7 /0 id
          # MI: Operand 1: ModRM:r/m (w), Operand 2: imm8/16/32/64
          insn(
            opcode: 0xc7,
            mod_rm: ModRM[mod: Mod01, reg: 0, rm: dst_reg],
            disp: dst_disp,
            imm: imm32(src_imm),
          )
        end
      in QwordPtr[R64 => dst_reg]
        case src
        # MOV r/m64, imm32 (Mod 00: [reg])
        in IMM32 => src_imm
          # REX.W + C7 /0 id
          # MI: Operand 1: ModRM:r/m (w), Operand 2: imm8/16/32/64
          insn(
            prefix: REX_W,
            opcode: 0xc7,
            mod_rm: ModRM[mod: Mod00, reg: 0, rm: dst_reg],
            imm: imm32(src_imm),
          )
        # MOV r/m64, r64 (Mod 00: [reg])
        in R64 => src_reg
          # REX.W + 89 /r
          # MR: Operand 1: ModRM:r/m (w), Operand 2: ModRM:reg (r)
          insn(
            prefix: REX_W,
            opcode: 0x89,
            mod_rm: ModRM[mod: Mod00, reg: src_reg, rm: dst_reg],
          )
        end
      in QwordPtr[R64 => dst_reg, IMM8 => dst_disp]
        # Optimize encoding when disp is 0
        return mov([dst_reg], src) if dst_disp == 0

        case src
        # MOV r/m64, imm32 (Mod 01: [reg]+disp8)
        in IMM32 => src_imm
          # REX.W + C7 /0 id
          # MI: Operand 1: ModRM:r/m (w), Operand 2: imm8/16/32/64
          insn(
            prefix: REX_W,
            opcode: 0xc7,
            mod_rm: ModRM[mod: Mod01, reg: 0, rm: dst_reg],
            disp: dst_disp,
            imm: imm32(src_imm),
          )
        # MOV r/m64, r64 (Mod 01: [reg]+disp8)
        in R64 => src_reg
          # REX.W + 89 /r
          # MR: Operand 1: ModRM:r/m (w), Operand 2: ModRM:reg (r)
          insn(
            prefix: REX_W,
            opcode: 0x89,
            mod_rm: ModRM[mod: Mod01, reg: src_reg, rm: dst_reg],
            disp: dst_disp,
          )
        end
      in QwordPtr[R64 => dst_reg, IMM32 => dst_disp]
        case src
        # MOV r/m64, imm32 (Mod 10: [reg]+disp32)
        in IMM32 => src_imm
          # REX.W + C7 /0 id
          # MI: Operand 1: ModRM:r/m (w), Operand 2: imm8/16/32/64
          insn(
            prefix: REX_W,
            opcode: 0xc7,
            mod_rm: ModRM[mod: Mod10, reg: 0, rm: dst_reg],
            disp: imm32(dst_disp),
            imm: imm32(src_imm),
          )
        # MOV r/m64, r64 (Mod 10: [reg]+disp32)
        in R64 => src_reg
          # REX.W + 89 /r
          # MR: Operand 1: ModRM:r/m (w), Operand 2: ModRM:reg (r)
          insn(
            prefix: REX_W,
            opcode: 0x89,
            mod_rm: ModRM[mod: Mod10, reg: src_reg, rm: dst_reg],
            disp: imm32(dst_disp),
          )
        end
      end
    end

    def or(dst, src)
      case [dst, src]
      # OR r/m64, imm8 (Mod 11: reg)
      in [R64 => dst_reg, IMM8 => src_imm]
        # REX.W + 83 /1 ib
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod11, reg: 1, rm: dst_reg],
          imm: imm8(src_imm),
        )
      # OR r/m64, imm32 (Mod 11: reg)
      in [R64 => dst_reg, IMM32 => src_imm]
        # REX.W + 81 /1 id
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x81,
          mod_rm: ModRM[mod: Mod11, reg: 1, rm: dst_reg],
          imm: imm32(src_imm),
        )
      # OR r64, r/m64 (Mod 01: [reg]+disp8)
      in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM8 => src_disp]]
        # REX.W + 0B /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: 0x0b,
          mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg],
          disp: imm8(src_disp),
        )
      # OR r64, r/m64 (Mod 10: [reg]+disp32)
      in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM32 => src_disp]]
        # REX.W + 0B /r
        # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
        insn(
          prefix: REX_W,
          opcode: 0x0b,
          mod_rm: ModRM[mod: Mod10, reg: dst_reg, rm: src_reg],
          disp: imm32(src_disp),
        )
      end
    end

    def push(src)
      case src
      # PUSH r64
      in R64 => src_reg
        # 50+rd
        # O: Operand 1: opcode + rd (r)
        insn(opcode: 0x50, rd: src_reg)
      end
    end

    def pop(dst)
      case dst
      # POP r64
      in R64 => dst_reg
        # 58+ rd
        # O: Operand 1: opcode + rd (r)
        insn(opcode: 0x58, rd: dst_reg)
      end
    end

    def ret
      # RET
      # Near return: A return to a procedure within the current code segment
      insn(opcode: 0xc3)
    end

    def sar(dst, src)
      case [dst, src]
      in [R64 => dst_reg, IMM8 => src_imm]
        # REX.W + C1 /7 ib
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8
        insn(
          prefix: REX_W,
          opcode: 0xc1,
          mod_rm: ModRM[mod: Mod11, reg: 7, rm: dst_reg],
          imm: imm8(src_imm),
        )
      end
    end

    def sub(dst, src)
      case [dst, src]
      # SUB r/m64, imm8 (Mod 11: reg)
      in [R64 => dst_reg, IMM8 => src_imm]
        # REX.W + 83 /5 ib
        # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0x83,
          mod_rm: ModRM[mod: Mod11, reg: 5, rm: dst_reg],
          imm: imm8(src_imm),
        )
      # SUB r/m64, r64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 29 /r
        # MR: Operand 1: ModRM:r/m (r, w), Operand 2: ModRM:reg (r)
        insn(
          prefix: REX_W,
          opcode: 0x29,
          mod_rm: ModRM[mod: Mod11, reg: src_reg, rm: dst_reg],
        )
      end
    end

    def test(left, right)
      case [left, right]
      # TEST r/m8*, imm8 (Mod 01: [reg]+disp8)
      in [BytePtr[R64 => left_reg, IMM8 => left_disp], IMM8 => right_imm]
        # REX + F6 /0 ib
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          opcode: 0xf6,
          mod_rm: ModRM[mod: Mod01, reg: 0, rm: left_reg],
          disp: left_disp,
          imm: imm8(right_imm),
        )
      # TEST r/m64, imm32 (Mod 01: [reg]+disp8)
      in [QwordPtr[R64 => left_reg, IMM8 => left_disp], IMM32 => right_imm]
        # REX.W + F7 /0 id
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0xf7,
          mod_rm: ModRM[mod: Mod01, reg: 0, rm: left_reg],
          disp: left_disp,
          imm: imm32(right_imm),
        )
      # TEST r/m64, imm32 (Mod 10: [reg]+disp32)
      in [QwordPtr[R64 => left_reg, IMM32 => left_disp], IMM32 => right_imm]
        # REX.W + F7 /0 id
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0xf7,
          mod_rm: ModRM[mod: Mod10, reg: 0, rm: left_reg],
          disp: imm32(left_disp),
          imm: imm32(right_imm),
        )
      # TEST r/m64, imm32 (Mod 11: reg)
      in [R64 => left_reg, IMM32 => right_imm]
        # REX.W + F7 /0 id
        # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32
        insn(
          prefix: REX_W,
          opcode: 0xf7,
          mod_rm: ModRM[mod: Mod11, reg: 0, rm: left_reg],
          imm: imm32(right_imm),
        )
      # TEST r/m32, r32 (Mod 11: reg)
      in [R32 => left_reg, R32 => right_reg]
        # 85 /r
        # MR: Operand 1: ModRM:r/m (r), Operand 2: ModRM:reg (r)
        insn(
          opcode: 0x85,
          mod_rm: ModRM[mod: Mod11, reg: right_reg, rm: left_reg],
        )
      # TEST r/m64, r64 (Mod 11: reg)
      in [R64 => left_reg, R64 => right_reg]
        # REX.W + 85 /r
        # MR: Operand 1: ModRM:r/m (r), Operand 2: ModRM:reg (r)
        insn(
          prefix: REX_W,
          opcode: 0x85,
          mod_rm: ModRM[mod: Mod11, reg: right_reg, rm: left_reg],
        )
      end
    end

    def xor(dst, src)
      case [dst, src]
      # XOR r/m64, r64 (Mod 11: reg)
      in [R64 => dst_reg, R64 => src_reg]
        # REX.W + 31 /r
        # MR: Operand 1: ModRM:r/m (r, w), Operand 2: ModRM:reg (r)
        insn(
          prefix: REX_W,
          opcode: 0x31,
          mod_rm: ModRM[mod: Mod11, reg: src_reg, rm: dst_reg],
        )
      end
    end

    #
    # Utilities
    #

    attr_reader :comments

    def comment(message)
      @comments[@bytes.size] << message
    end

    # Mark the starting address of a block
    def block(block)
      @blocks[@bytes.size] << block
    end

    # Mark the starting/ending addresses of a stub
    def stub(stub)
      @stub_starts[@bytes.size] << stub
      yield
    ensure
      @stub_ends[@bytes.size] << stub
    end

    def pos_marker(&block)
      @pos_markers[@bytes.size] << block
    end

    def new_label(name)
      Label.new(id: @label_id += 1, name:)
    end

    # @param [RubyVM::RJIT::Assembler::Label] label
    def write_label(label)
      @labels[label] = @bytes.size
    end

    def incr_counter(name)
      if C.rjit_opts.stats
        comment("increment counter #{name}")
        mov(:rax, C.rb_rjit_counters[name].to_i)
        add([:rax], 1) # TODO: lock
      end
    end

    private

    def insn(prefix: 0, opcode:, rd: nil, mod_rm: nil, disp: nil, imm: nil)
      # Determine prefix
      if rd
        prefix |= REX_B if extended_reg?(rd)
        opcode += reg_code(rd)
      end
      if mod_rm
        prefix |= REX_R if mod_rm.reg.is_a?(Symbol) && extended_reg?(mod_rm.reg)
        prefix |= REX_B if mod_rm.rm.is_a?(Symbol) && extended_reg?(mod_rm.rm)
      end

      # Encode insn
      if prefix > 0
        @bytes.push(prefix)
      end
      @bytes.push(*Array(opcode))
      if mod_rm
        mod_rm_byte = encode_mod_rm(
          mod: mod_rm.mod,
          reg: mod_rm.reg.is_a?(Symbol) ? reg_code(mod_rm.reg) : mod_rm.reg,
          rm: mod_rm.rm.is_a?(Symbol) ? reg_code(mod_rm.rm) : mod_rm.rm,
        )
        @bytes.push(mod_rm_byte)
      end
      if disp
        @bytes.push(*Array(disp))
      end
      if imm
        @bytes.push(*imm)
      end
    end

    def reg_code(reg)
      reg_code_extended(reg).first
    end

    # Table 2-2. 32-Bit Addressing Forms with the ModR/M Byte
    #
    #  7  6  5  4  3  2  1  0
    # +--+--+--+--+--+--+--+--+
    # | Mod | Reg/   | R/M    |
    # |     | Opcode |        |
    # +--+--+--+--+--+--+--+--+
    #
    # The r/m field can specify a register as an operand or it can be combined
    # with the mod field to encode an addressing mode.
    #
    # /0: R/M is 0 (not used)
    # /r: R/M is a register
    def encode_mod_rm(mod:, reg: 0, rm: 0)
      if mod > 0b11
        raise ArgumentError, "too large Mod: #{mod}"
      end
      if reg > 0b111
        raise ArgumentError, "too large Reg/Opcode: #{reg}"
      end
      if rm > 0b111
        raise ArgumentError, "too large R/M: #{rm}"
      end
      (mod << 6) + (reg << 3) + rm
    end

    # ib: 1 byte
    def imm8(imm)
      unless imm8?(imm)
        raise ArgumentError, "unexpected imm8: #{imm}"
      end
      [imm].pack('c').unpack('c*') # TODO: consider uimm
    end

    # id: 4 bytes
    def imm32(imm)
      unless imm32?(imm)
        raise ArgumentError, "unexpected imm32: #{imm}"
      end
      [imm].pack('l').unpack('c*') # TODO: consider uimm
    end

    # io: 8 bytes
    def imm64(imm)
      unless imm64?(imm)
        raise ArgumentError, "unexpected imm64: #{imm}"
      end
      imm_bytes(imm, 8)
    end

    def imm_bytes(imm, num_bytes)
      bytes = []
      bits = imm
      num_bytes.times do
        bytes << (bits & 0xff)
        bits >>= 8
      end
      if bits != 0
        raise ArgumentError, "unexpected imm with #{num_bytes} bytes: #{imm}"
      end
      bytes
    end

    def rel32(addr)
      [Rel32.new(addr), Rel32Pad, Rel32Pad, Rel32Pad]
    end

    def set_code_addrs(write_addr)
      (@bytes.size + 1).times do |index|
        @blocks.fetch(index, []).each do |block|
          block.start_addr = write_addr + index
        end
        @stub_starts.fetch(index, []).each do |stub|
          stub.start_addr = write_addr + index
        end
        @stub_ends.fetch(index, []).each do |stub|
          stub.end_addr = write_addr + index
        end
      end
    end

    def resolve_rel32(write_addr)
      @bytes.each_with_index do |byte, index|
        if byte.is_a?(Rel32)
          src_addr = write_addr + index + 4 # offset 4 bytes for rel32 itself
          dst_addr = byte.addr
          rel32 = dst_addr - src_addr
          raise "unexpected offset: #{rel32}" unless imm32?(rel32)
          imm32(rel32).each_with_index do |rel_byte, rel_index|
            @bytes[index + rel_index] = rel_byte
          end
        end
      end
    end

    def resolve_labels
      @bytes.each_with_index do |byte, index|
        if byte.is_a?(Label)
          src_index = index + 1 # offset 1 byte for rel8 itself
          dst_index = @labels.fetch(byte)
          rel8 = dst_index - src_index
          raise "unexpected offset: #{rel8}" unless imm8?(rel8)
          @bytes[index] = rel8
        end
      end
    end

    def write_bytes(addr)
      Fiddle::Pointer.new(addr)[0, @bytes.size] = @bytes.pack('c*')
    end
  end

  module OperandMatcher
    def imm8?(imm)
      (-0x80..0x7f).include?(imm)
    end

    def imm32?(imm)
      (-0x8000_0000..0x7fff_ffff).include?(imm) # TODO: consider uimm
    end

    def imm64?(imm)
      (-0x8000_0000_0000_0000..0xffff_ffff_ffff_ffff).include?(imm)
    end

    def r32?(reg)
      if extended_reg?(reg)
        reg.end_with?('d')
      else
        reg.start_with?('e')
      end
    end

    def r64?(reg)
      if extended_reg?(reg)
        reg.match?(/\Ar\d+\z/)
      else
        reg.start_with?('r')
      end
    end

    def extended_reg?(reg)
      reg_code_extended(reg).last
    end

    def reg_code_extended(reg)
      case reg
      # Not extended
      when :al, :ax, :eax, :rax then [0, false]
      when :cl, :cx, :ecx, :rcx then [1, false]
      when :dl, :dx, :edx, :rdx then [2, false]
      when :bl, :bx, :ebx, :rbx then [3, false]
      when :ah, :sp, :esp, :rsp then [4, false]
      when :ch, :bp, :ebp, :rbp then [5, false]
      when :dh, :si, :esi, :rsi then [6, false]
      when :bh, :di, :edi, :rdi then [7, false]
      # Extended
      when :r8b,  :r8w,  :r8d,  :r8  then [0, true]
      when :r9b,  :r9w,  :r9d,  :r9  then [1, true]
      when :r10b, :r10w, :r10d, :r10 then [2, true]
      when :r11b, :r11w, :r11d, :r11 then [3, true]
      when :r12b, :r12w, :r12d, :r12 then [4, true]
      when :r13b, :r13w, :r13d, :r13 then [5, true]
      when :r14b, :r14w, :r14d, :r14 then [6, true]
      when :r15b, :r15w, :r15d, :r15 then [7, true]
      else raise ArgumentError, "unexpected reg: #{reg.inspect}"
      end
    end
  end

  class Assembler
    include OperandMatcher
    extend OperandMatcher
  end
end
PK*J[��:3:3(share/ruby/ruby_vm/rjit/insn_compiler.rbnu�[���# frozen_string_literal: true
module RubyVM::RJIT
  class InsnCompiler
    # struct rb_calling_info. Storing flags instead of ci.
    CallingInfo = Struct.new(:argc, :flags, :kwarg, :ci_addr, :send_shift, :block_handler) do
      def kw_splat = flags & C::VM_CALL_KW_SPLAT != 0
    end

    # @param ocb [CodeBlock]
    # @param exit_compiler [RubyVM::RJIT::ExitCompiler]
    def initialize(cb, ocb, exit_compiler)
      @ocb = ocb
      @exit_compiler = exit_compiler

      @cfunc_codegen_table = {}
      register_cfunc_codegen_funcs
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    # @param insn `RubyVM::RJIT::Instruction`
    def compile(jit, ctx, asm, insn)
      asm.incr_counter(:rjit_insns_count)

      stack = ctx.stack_size.times.map do |stack_idx|
        ctx.get_opnd_type(StackOpnd[ctx.stack_size - stack_idx - 1]).type
      end
      locals = jit.iseq.body.local_table_size.times.map do |local_idx|
        (ctx.local_types[local_idx] || Type::Unknown).type
      end

      insn_idx = format('%04d', (jit.pc.to_i - jit.iseq.body.iseq_encoded.to_i) / C.VALUE.size)
      asm.comment("Insn: #{insn_idx} #{insn.name} (stack: [#{stack.join(', ')}], locals: [#{locals.join(', ')}])")

      # 83/102
      case insn.name
      when :nop then nop(jit, ctx, asm)
      when :getlocal then getlocal(jit, ctx, asm)
      when :setlocal then setlocal(jit, ctx, asm)
      when :getblockparam then getblockparam(jit, ctx, asm)
      # setblockparam
      when :getblockparamproxy then getblockparamproxy(jit, ctx, asm)
      when :getspecial then getspecial(jit, ctx, asm)
      # setspecial
      when :getinstancevariable then getinstancevariable(jit, ctx, asm)
      when :setinstancevariable then setinstancevariable(jit, ctx, asm)
      when :getclassvariable then getclassvariable(jit, ctx, asm)
      when :setclassvariable then setclassvariable(jit, ctx, asm)
      when :opt_getconstant_path then opt_getconstant_path(jit, ctx, asm)
      when :getconstant then getconstant(jit, ctx, asm)
      # setconstant
      when :getglobal then getglobal(jit, ctx, asm)
      # setglobal
      when :putnil then putnil(jit, ctx, asm)
      when :putself then putself(jit, ctx, asm)
      when :putobject then putobject(jit, ctx, asm)
      when :putspecialobject then putspecialobject(jit, ctx, asm)
      when :putstring then putstring(jit, ctx, asm)
      when :putchilledstring then putchilledstring(jit, ctx, asm)
      when :concatstrings then concatstrings(jit, ctx, asm)
      when :anytostring then anytostring(jit, ctx, asm)
      when :toregexp then toregexp(jit, ctx, asm)
      when :intern then intern(jit, ctx, asm)
      when :newarray then newarray(jit, ctx, asm)
      when :duparray then duparray(jit, ctx, asm)
      # duphash
      when :expandarray then expandarray(jit, ctx, asm)
      when :concatarray then concatarray(jit, ctx, asm)
      when :splatarray then splatarray(jit, ctx, asm)
      when :newhash then newhash(jit, ctx, asm)
      when :newrange then newrange(jit, ctx, asm)
      when :pop then pop(jit, ctx, asm)
      when :dup then dup(jit, ctx, asm)
      when :dupn then dupn(jit, ctx, asm)
      when :swap then swap(jit, ctx, asm)
      # opt_reverse
      when :topn then topn(jit, ctx, asm)
      when :setn then setn(jit, ctx, asm)
      when :adjuststack then adjuststack(jit, ctx, asm)
      when :defined then defined(jit, ctx, asm)
      when :definedivar then definedivar(jit, ctx, asm)
      # checkmatch
      when :checkkeyword then checkkeyword(jit, ctx, asm)
      # checktype
      # defineclass
      # definemethod
      # definesmethod
      when :send then send(jit, ctx, asm)
      when :opt_send_without_block then opt_send_without_block(jit, ctx, asm)
      when :objtostring then objtostring(jit, ctx, asm)
      when :opt_str_freeze then opt_str_freeze(jit, ctx, asm)
      when :opt_ary_freeze then opt_ary_freeze(jit, ctx, asm)
      when :opt_hash_freeze then opt_hash_freeze(jit, ctx, asm)
      when :opt_nil_p then opt_nil_p(jit, ctx, asm)
      # opt_str_uminus
      when :opt_newarray_send then opt_newarray_send(jit, ctx, asm)
      when :invokesuper then invokesuper(jit, ctx, asm)
      when :invokeblock then invokeblock(jit, ctx, asm)
      when :leave then leave(jit, ctx, asm)
      when :throw then throw(jit, ctx, asm)
      when :jump then jump(jit, ctx, asm)
      when :branchif then branchif(jit, ctx, asm)
      when :branchunless then branchunless(jit, ctx, asm)
      when :branchnil then branchnil(jit, ctx, asm)
      # once
      when :opt_case_dispatch then opt_case_dispatch(jit, ctx, asm)
      when :opt_plus then opt_plus(jit, ctx, asm)
      when :opt_minus then opt_minus(jit, ctx, asm)
      when :opt_mult then opt_mult(jit, ctx, asm)
      when :opt_div then opt_div(jit, ctx, asm)
      when :opt_mod then opt_mod(jit, ctx, asm)
      when :opt_eq then opt_eq(jit, ctx, asm)
      when :opt_neq then opt_neq(jit, ctx, asm)
      when :opt_lt then opt_lt(jit, ctx, asm)
      when :opt_le then opt_le(jit, ctx, asm)
      when :opt_gt then opt_gt(jit, ctx, asm)
      when :opt_ge then opt_ge(jit, ctx, asm)
      when :opt_ltlt then opt_ltlt(jit, ctx, asm)
      when :opt_and then opt_and(jit, ctx, asm)
      when :opt_or then opt_or(jit, ctx, asm)
      when :opt_aref then opt_aref(jit, ctx, asm)
      when :opt_aset then opt_aset(jit, ctx, asm)
      # opt_aset_with
      # opt_aref_with
      when :opt_length then opt_length(jit, ctx, asm)
      when :opt_size then opt_size(jit, ctx, asm)
      when :opt_empty_p then opt_empty_p(jit, ctx, asm)
      when :opt_succ then opt_succ(jit, ctx, asm)
      when :opt_not then opt_not(jit, ctx, asm)
      when :opt_regexpmatch2 then opt_regexpmatch2(jit, ctx, asm)
      # invokebuiltin
      when :opt_invokebuiltin_delegate then opt_invokebuiltin_delegate(jit, ctx, asm)
      when :opt_invokebuiltin_delegate_leave then opt_invokebuiltin_delegate_leave(jit, ctx, asm)
      when :getlocal_WC_0 then getlocal_WC_0(jit, ctx, asm)
      when :getlocal_WC_1 then getlocal_WC_1(jit, ctx, asm)
      when :setlocal_WC_0 then setlocal_WC_0(jit, ctx, asm)
      when :setlocal_WC_1 then setlocal_WC_1(jit, ctx, asm)
      when :putobject_INT2FIX_0_ then putobject_INT2FIX_0_(jit, ctx, asm)
      when :putobject_INT2FIX_1_ then putobject_INT2FIX_1_(jit, ctx, asm)
      else CantCompile
      end
    end

    private

    #
    # Insns
    #

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def nop(jit, ctx, asm)
      # Do nothing
      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getlocal(jit, ctx, asm)
      idx = jit.operand(0)
      level = jit.operand(1)
      jit_getlocal_generic(jit, ctx, asm, idx:, level:)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getlocal_WC_0(jit, ctx, asm)
      idx = jit.operand(0)
      jit_getlocal_generic(jit, ctx, asm, idx:, level: 0)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getlocal_WC_1(jit, ctx, asm)
      idx = jit.operand(0)
      jit_getlocal_generic(jit, ctx, asm, idx:, level: 1)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def setlocal(jit, ctx, asm)
      idx = jit.operand(0)
      level = jit.operand(1)
      jit_setlocal_generic(jit, ctx, asm, idx:, level:)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def setlocal_WC_0(jit, ctx, asm)
      idx = jit.operand(0)
      jit_setlocal_generic(jit, ctx, asm, idx:, level: 0)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def setlocal_WC_1(jit, ctx, asm)
      idx = jit.operand(0)
      jit_setlocal_generic(jit, ctx, asm, idx:, level: 1)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getblockparam(jit, ctx, asm)
      # EP level
      level = jit.operand(1)

      # Save the PC and SP because we might allocate
      jit_prepare_routine_call(jit, ctx, asm)

      # A mirror of the interpreter code. Checking for the case
      # where it's pushing rb_block_param_proxy.
      side_exit = side_exit(jit, ctx)

      # Load environment pointer EP from CFP
      ep_reg = :rax
      jit_get_ep(asm, level, reg: ep_reg)

      # Bail when VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) is non zero
      # FIXME: This is testing bits in the same place that the WB check is testing.
      # We should combine these at some point
      asm.test([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)

      # If the frame flag has been modified, then the actual proc value is
      # already in the EP and we should just use the value.
      frame_flag_modified = asm.new_label('frame_flag_modified')
      asm.jnz(frame_flag_modified)

      # This instruction writes the block handler to the EP.  If we need to
      # fire a write barrier for the write, then exit (we'll let the
      # interpreter handle it so it can fire the write barrier).
      # flags & VM_ENV_FLAG_WB_REQUIRED
      asm.test([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], C::VM_ENV_FLAG_WB_REQUIRED)

      # if (flags & VM_ENV_FLAG_WB_REQUIRED) != 0
      asm.jnz(side_exit)

      # Convert the block handler in to a proc
      # call rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler)
      asm.mov(C_ARGS[0], EC)
      # The block handler for the current frame
      # note, VM_ASSERT(VM_ENV_LOCAL_P(ep))
      asm.mov(C_ARGS[1], [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL])
      asm.call(C.rb_vm_bh_to_procval)

      # Load environment pointer EP from CFP (again)
      ep_reg = :rcx
      jit_get_ep(asm, level, reg: ep_reg)

      # Write the value at the environment pointer
      idx = jit.operand(0)
      offs = -(C.VALUE.size * idx)
      asm.mov([ep_reg, offs], C_RET);

      # Set the frame modified flag
      asm.mov(:rax, [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS]) # flag_check
      asm.or(:rax, C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) # modified_flag
      asm.mov([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], :rax)

      asm.write_label(frame_flag_modified)

      # Push the proc on the stack
      stack_ret = ctx.stack_push(Type::Unknown)
      ep_reg = :rax
      jit_get_ep(asm, level, reg: ep_reg)
      asm.mov(:rax, [ep_reg, offs])
      asm.mov(stack_ret, :rax)

      KeepCompiling
    end

    # setblockparam

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getblockparamproxy(jit, ctx, asm)
      # To get block_handler
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      starting_context = ctx.dup # make a copy for use with jit_chain_guard

      # A mirror of the interpreter code. Checking for the case
      # where it's pushing rb_block_param_proxy.
      side_exit = side_exit(jit, ctx)

      # EP level
      level = jit.operand(1)

      # Peek at the block handler so we can check whether it's nil
      comptime_handler = jit.peek_at_block_handler(level)

      # When a block handler is present, it should always be a GC-guarded
      # pointer (VM_BH_ISEQ_BLOCK_P)
      if comptime_handler != 0 && comptime_handler & 0x3 != 0x1
        asm.incr_counter(:getblockpp_not_gc_guarded)
        return CantCompile
      end

      # Load environment pointer EP from CFP
      ep_reg = :rax
      jit_get_ep(asm, level, reg: ep_reg)

      # Bail when VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) is non zero
      asm.test([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)
      asm.jnz(counted_exit(side_exit, :getblockpp_block_param_modified))

      # Load the block handler for the current frame
      # note, VM_ASSERT(VM_ENV_LOCAL_P(ep))
      block_handler = :rax
      asm.mov(block_handler, [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL])

      # Specialize compilation for the case where no block handler is present
      if comptime_handler == 0
        # Bail if there is a block handler
        asm.cmp(block_handler, 0)

        jit_chain_guard(:jnz, jit, starting_context, asm, counted_exit(side_exit, :getblockpp_block_handler_none))

        putobject(jit, ctx, asm, val: Qnil)
      else
        # Block handler is a tagged pointer. Look at the tag. 0x03 is from VM_BH_ISEQ_BLOCK_P().
        asm.and(block_handler, 0x3)

        # Bail unless VM_BH_ISEQ_BLOCK_P(bh). This also checks for null.
        asm.cmp(block_handler, 0x1)

        jit_chain_guard(:jnz, jit, starting_context, asm, counted_exit(side_exit, :getblockpp_not_iseq_block))

        # Push rb_block_param_proxy. It's a root, so no need to use jit_mov_gc_ptr.
        top = ctx.stack_push(Type::BlockParamProxy)
        asm.mov(:rax, C.rb_block_param_proxy)
        asm.mov(top, :rax)
      end

      jump_to_next_insn(jit, ctx, asm)

      EndBlock
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getspecial(jit, ctx, asm)
      # This takes two arguments, key and type
      # key is only used when type == 0
      # A non-zero type determines which type of backref to fetch
      #rb_num_t key = jit.jit_get_arg(0);
      rtype = jit.operand(1)

      if rtype == 0
        # not yet implemented
        return CantCompile;
      elsif rtype & 0x01 != 0
        # Fetch a "special" backref based on a char encoded by shifting by 1

        # Can raise if matchdata uninitialized
        jit_prepare_routine_call(jit, ctx, asm)

        # call rb_backref_get()
        asm.comment('rb_backref_get')
        asm.call(C.rb_backref_get)

        asm.mov(C_ARGS[0], C_RET) # backref
        case [rtype >> 1].pack('c')
        in ?&
          asm.comment("rb_reg_last_match")
          asm.call(C.rb_reg_last_match)
        in ?`
          asm.comment("rb_reg_match_pre")
          asm.call(C.rb_reg_match_pre)
        in ?'
          asm.comment("rb_reg_match_post")
          asm.call(C.rb_reg_match_post)
        in ?+
          asm.comment("rb_reg_match_last")
          asm.call(C.rb_reg_match_last)
        end

        stack_ret = ctx.stack_push(Type::Unknown)
        asm.mov(stack_ret, C_RET)

        KeepCompiling
      else
        # Fetch the N-th match from the last backref based on type shifted by 1

        # Can raise if matchdata uninitialized
        jit_prepare_routine_call(jit, ctx, asm)

        # call rb_backref_get()
        asm.comment('rb_backref_get')
        asm.call(C.rb_backref_get)

        # rb_reg_nth_match((int)(type >> 1), backref);
        asm.comment('rb_reg_nth_match')
        asm.mov(C_ARGS[0], rtype >> 1)
        asm.mov(C_ARGS[1], C_RET) # backref
        asm.call(C.rb_reg_nth_match)

        stack_ret = ctx.stack_push(Type::Unknown)
        asm.mov(stack_ret, C_RET)

        KeepCompiling
      end
    end

    # setspecial

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getinstancevariable(jit, ctx, asm)
      # Specialize on a compile-time receiver, and split a block for chain guards
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      id = jit.operand(0)
      comptime_obj = jit.peek_at_self

      jit_getivar(jit, ctx, asm, comptime_obj, id, nil, SelfOpnd)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def setinstancevariable(jit, ctx, asm)
      starting_context = ctx.dup # make a copy for use with jit_chain_guard

      # Defer compilation so we can specialize on a runtime `self`
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      ivar_name = jit.operand(0)
      comptime_receiver = jit.peek_at_self

      # If the comptime receiver is frozen, writing an IV will raise an exception
      # and we don't want to JIT code to deal with that situation.
      if C.rb_obj_frozen_p(comptime_receiver)
        asm.incr_counter(:setivar_frozen)
        return CantCompile
      end

      # Check if the comptime receiver is a T_OBJECT
      receiver_t_object = C::BUILTIN_TYPE(comptime_receiver) == C::T_OBJECT

      # If the receiver isn't a T_OBJECT, or uses a custom allocator,
      # then just write out the IV write as a function call.
      # too-complex shapes can't use index access, so we use rb_ivar_get for them too.
      if !receiver_t_object || shape_too_complex?(comptime_receiver) || ctx.chain_depth >= 10
        asm.comment('call rb_vm_setinstancevariable')

        ic = jit.operand(1)

        # The function could raise exceptions.
        # Note that this modifies REG_SP, which is why we do it first
        jit_prepare_routine_call(jit, ctx, asm)

        # Get the operands from the stack
        val_opnd = ctx.stack_pop(1)

        # Call rb_vm_setinstancevariable(iseq, obj, id, val, ic);
        asm.mov(:rdi, jit.iseq.to_i)
        asm.mov(:rsi, [CFP, C.rb_control_frame_t.offsetof(:self)])
        asm.mov(:rdx, ivar_name)
        asm.mov(:rcx, val_opnd)
        asm.mov(:r8, ic)
        asm.call(C.rb_vm_setinstancevariable)
      else
        # Get the iv index
        shape_id = C.rb_shape_get_shape_id(comptime_receiver)
        ivar_index = C.rb_shape_get_iv_index(shape_id, ivar_name)

        # Get the receiver
        asm.mov(:rax, [CFP, C.rb_control_frame_t.offsetof(:self)])

        # Generate a side exit
        side_exit = side_exit(jit, ctx)

        # Upgrade type
        guard_object_is_heap(jit, ctx, asm, :rax, SelfOpnd, :setivar_not_heap)

        asm.comment('guard shape')
        asm.cmp(DwordPtr[:rax, C.rb_shape_id_offset], shape_id)
        megamorphic_side_exit = counted_exit(side_exit, :setivar_megamorphic)
        jit_chain_guard(:jne, jit, starting_context, asm, megamorphic_side_exit)

        # If we don't have an instance variable index, then we need to
        # transition out of the current shape.
        if ivar_index.nil?
          shape = C.rb_shape_get_shape_by_id(shape_id)

          current_capacity = shape.capacity
          dest_shape = C.rb_shape_get_next_no_warnings(shape, comptime_receiver, ivar_name)
          new_shape_id = C.rb_shape_id(dest_shape)

          if new_shape_id == C::OBJ_TOO_COMPLEX_SHAPE_ID
            asm.incr_counter(:setivar_too_complex)
            return CantCompile
          end

          ivar_index = shape.next_iv_index

          # If the new shape has a different capacity, we need to
          # reallocate the object.
          needs_extension = dest_shape.capacity != shape.capacity

          if needs_extension
            # Generate the C call so that runtime code will increase
            # the capacity and set the buffer.
            asm.mov(C_ARGS[0], :rax)
            asm.mov(C_ARGS[1], current_capacity)
            asm.mov(C_ARGS[2], dest_shape.capacity)
            asm.call(C.rb_ensure_iv_list_size)

            # Load the receiver again after the function call
            asm.mov(:rax, [CFP, C.rb_control_frame_t.offsetof(:self)])
          end

          write_val = ctx.stack_pop(1)
          jit_write_iv(asm, comptime_receiver, :rax, :rcx, ivar_index, write_val, needs_extension)

          # Store the new shape
          asm.comment('write shape')
          asm.mov(:rax, [CFP, C.rb_control_frame_t.offsetof(:self)]) # reload after jit_write_iv
          asm.mov(DwordPtr[:rax, C.rb_shape_id_offset], new_shape_id)
        else
          # If the iv index already exists, then we don't need to
          # transition to a new shape.  The reason is because we find
          # the iv index by searching up the shape tree.  If we've
          # made the transition already, then there's no reason to
          # update the shape on the object.  Just set the IV.
          write_val = ctx.stack_pop(1)
          jit_write_iv(asm, comptime_receiver, :rax, :rcx, ivar_index, write_val, false)
        end

        skip_wb = asm.new_label('skip_wb')
        # If the value we're writing is an immediate, we don't need to WB
        asm.test(write_val, C::RUBY_IMMEDIATE_MASK)
        asm.jnz(skip_wb)

        # If the value we're writing is nil or false, we don't need to WB
        asm.cmp(write_val, Qnil)
        asm.jbe(skip_wb)

        asm.comment('write barrier')
        asm.mov(C_ARGS[0], [CFP, C.rb_control_frame_t.offsetof(:self)]) # reload after jit_write_iv
        asm.mov(C_ARGS[1], write_val)
        asm.call(C.rb_gc_writebarrier)

        asm.write_label(skip_wb)
      end

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getclassvariable(jit, ctx, asm)
      # rb_vm_getclassvariable can raise exceptions.
      jit_prepare_routine_call(jit, ctx, asm)

      asm.mov(C_ARGS[0], [CFP, C.rb_control_frame_t.offsetof(:iseq)])
      asm.mov(C_ARGS[1], CFP)
      asm.mov(C_ARGS[2], jit.operand(0))
      asm.mov(C_ARGS[3], jit.operand(1))
      asm.call(C.rb_vm_getclassvariable)

      top = ctx.stack_push(Type::Unknown)
      asm.mov(top, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def setclassvariable(jit, ctx, asm)
      # rb_vm_setclassvariable can raise exceptions.
      jit_prepare_routine_call(jit, ctx, asm)

      asm.mov(C_ARGS[0], [CFP, C.rb_control_frame_t.offsetof(:iseq)])
      asm.mov(C_ARGS[1], CFP)
      asm.mov(C_ARGS[2], jit.operand(0))
      asm.mov(C_ARGS[3], ctx.stack_pop(1))
      asm.mov(C_ARGS[4], jit.operand(1))
      asm.call(C.rb_vm_setclassvariable)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_getconstant_path(jit, ctx, asm)
      # Cut the block for invalidation
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      ic = C.iseq_inline_constant_cache.new(jit.operand(0))
      idlist = ic.segments

      # Make sure there is an exit for this block as the interpreter might want
      # to invalidate this block from rb_rjit_constant_ic_update().
      # For now, we always take an entry exit even if it was a side exit.
      Invariants.ensure_block_entry_exit(jit, cause: 'opt_getconstant_path')

      # See vm_ic_hit_p(). The same conditions are checked in yjit_constant_ic_update().
      ice = ic.entry
      if ice.nil?
        # In this case, leave a block that unconditionally side exits
        # for the interpreter to invalidate.
        asm.incr_counter(:optgetconst_not_cached)
        return CantCompile
      end

      if ice.ic_cref # with cref
        # Cache is keyed on a certain lexical scope. Use the interpreter's cache.
        side_exit = side_exit(jit, ctx)

        # Call function to verify the cache. It doesn't allocate or call methods.
        asm.mov(C_ARGS[0], ic.to_i)
        asm.mov(C_ARGS[1], [CFP, C.rb_control_frame_t.offsetof(:ep)])
        asm.call(C.rb_vm_ic_hit_p)

        # Check the result. SysV only specifies one byte for _Bool return values,
        # so it's important we only check one bit to ignore the higher bits in the register.
        asm.test(C_RET, 1)
        asm.jz(counted_exit(side_exit, :optgetconst_cache_miss))

        asm.mov(:rax, ic.to_i) # inline_cache
        asm.mov(:rax, [:rax, C.iseq_inline_constant_cache.offsetof(:entry)]) # ic_entry
        asm.mov(:rax, [:rax, C.iseq_inline_constant_cache_entry.offsetof(:value)]) # ic_entry_val

        # Push ic->entry->value
        stack_top = ctx.stack_push(Type::Unknown)
        asm.mov(stack_top, :rax)
      else # without cref
        # TODO: implement this
        # Optimize for single ractor mode.
        # if !assume_single_ractor_mode(jit, ocb)
        #   return CantCompile
        # end

        # Invalidate output code on any constant writes associated with
        # constants referenced within the current block.
        Invariants.assume_stable_constant_names(jit, idlist)

        putobject(jit, ctx, asm, val: ice.value)
      end

      jump_to_next_insn(jit, ctx, asm)
      EndBlock
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getconstant(jit, ctx, asm)
      id = jit.operand(0)

      # vm_get_ev_const can raise exceptions.
      jit_prepare_routine_call(jit, ctx, asm)

      allow_nil_opnd = ctx.stack_pop(1)
      klass_opnd = ctx.stack_pop(1)

      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], klass_opnd)
      asm.mov(C_ARGS[2], id)
      asm.mov(C_ARGS[3], allow_nil_opnd)
      asm.call(C.rb_vm_get_ev_const)

      top = ctx.stack_push(Type::Unknown)
      asm.mov(top, C_RET)

      KeepCompiling
    end

    # setconstant

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def getglobal(jit, ctx, asm)
      gid = jit.operand(0)

      # Save the PC and SP because we might make a Ruby call for warning
      jit_prepare_routine_call(jit, ctx, asm)

      asm.mov(C_ARGS[0], gid)
      asm.call(C.rb_gvar_get)

      top = ctx.stack_push(Type::Unknown)
      asm.mov(top, C_RET)

      KeepCompiling
    end

    # setglobal

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putnil(jit, ctx, asm)
      putobject(jit, ctx, asm, val: Qnil)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putself(jit, ctx, asm)
      stack_top = ctx.stack_push_self
      asm.mov(:rax, [CFP, C.rb_control_frame_t.offsetof(:self)])
      asm.mov(stack_top, :rax)
      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putobject(jit, ctx, asm, val: jit.operand(0))
      # Push it to the stack
      val_type = Type.from(C.to_ruby(val))
      stack_top = ctx.stack_push(val_type)
      if asm.imm32?(val)
        asm.mov(stack_top, val)
      else # 64-bit immediates can't be directly written to memory
        asm.mov(:rax, val)
        asm.mov(stack_top, :rax)
      end

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putspecialobject(jit, ctx, asm)
      object_type = jit.operand(0)
      if object_type == C::VM_SPECIAL_OBJECT_VMCORE
        stack_top = ctx.stack_push(Type::UnknownHeap)
        asm.mov(:rax, C.rb_mRubyVMFrozenCore)
        asm.mov(stack_top, :rax)
        KeepCompiling
      else
        # TODO: implement for VM_SPECIAL_OBJECT_CBASE and
        # VM_SPECIAL_OBJECT_CONST_BASE
        CantCompile
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putstring(jit, ctx, asm)
      put_val = jit.operand(0, ruby: true)

      # Save the PC and SP because the callee will allocate
      jit_prepare_routine_call(jit, ctx, asm)

      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], to_value(put_val))
      asm.mov(C_ARGS[2], 0)
      asm.call(C.rb_ec_str_resurrect)

      stack_top = ctx.stack_push(Type::TString)
      asm.mov(stack_top, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putchilledstring(jit, ctx, asm)
      put_val = jit.operand(0, ruby: true)

      # Save the PC and SP because the callee will allocate
      jit_prepare_routine_call(jit, ctx, asm)

      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], to_value(put_val))
      asm.mov(C_ARGS[2], 1)
      asm.call(C.rb_ec_str_resurrect)

      stack_top = ctx.stack_push(Type::TString)
      asm.mov(stack_top, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def concatstrings(jit, ctx, asm)
      n = jit.operand(0)

      # Save the PC and SP because we are allocating
      jit_prepare_routine_call(jit, ctx, asm)

      asm.lea(:rax, ctx.sp_opnd(-C.VALUE.size * n))

      # call rb_str_concat_literals(size_t n, const VALUE *strings);
      asm.mov(C_ARGS[0], n)
      asm.mov(C_ARGS[1], :rax)
      asm.call(C.rb_str_concat_literals)

      ctx.stack_pop(n)
      stack_ret = ctx.stack_push(Type::TString)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def anytostring(jit, ctx, asm)
      # Save the PC and SP since we might call #to_s
      jit_prepare_routine_call(jit, ctx, asm)

      str = ctx.stack_pop(1)
      val = ctx.stack_pop(1)

      asm.mov(C_ARGS[0], str)
      asm.mov(C_ARGS[1], val)
      asm.call(C.rb_obj_as_string_result)

      # Push the return value
      stack_ret = ctx.stack_push(Type::TString)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def toregexp(jit, ctx, asm)
      opt = jit.operand(0, signed: true)
      cnt = jit.operand(1)

      # Save the PC and SP because this allocates an object and could
      # raise an exception.
      jit_prepare_routine_call(jit, ctx, asm)

      asm.lea(:rax, ctx.sp_opnd(-C.VALUE.size * cnt)) # values_ptr
      ctx.stack_pop(cnt)

      asm.mov(C_ARGS[0], 0)
      asm.mov(C_ARGS[1], cnt)
      asm.mov(C_ARGS[2], :rax) # values_ptr
      asm.call(C.rb_ary_tmp_new_from_values)

      # Save the array so we can clear it later
      asm.push(C_RET)
      asm.push(C_RET) # Alignment

      asm.mov(C_ARGS[0], C_RET)
      asm.mov(C_ARGS[1], opt)
      asm.call(C.rb_reg_new_ary)

      # The actual regex is in RAX now.  Pop the temp array from
      # rb_ary_tmp_new_from_values into C arg regs so we can clear it
      asm.pop(:rcx) # Alignment
      asm.pop(:rcx) # ary

      # The value we want to push on the stack is in RAX right now
      stack_ret = ctx.stack_push(Type::UnknownHeap)
      asm.mov(stack_ret, C_RET)

      # Clear the temp array.
      asm.mov(C_ARGS[0], :rcx) # ary
      asm.call(C.rb_ary_clear)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def intern(jit, ctx, asm)
      # Save the PC and SP because we might allocate
      jit_prepare_routine_call(jit, ctx, asm);

      str = ctx.stack_pop(1)
      asm.mov(C_ARGS[0], str)
      asm.call(C.rb_str_intern)

      # Push the return value
      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def newarray(jit, ctx, asm)
      n = jit.operand(0)

      # Save the PC and SP because we are allocating
      jit_prepare_routine_call(jit, ctx, asm)

      # If n is 0, then elts is never going to be read, so we can just pass null
      if n == 0
        values_ptr = 0
      else
        asm.comment('load pointer to array elts')
        offset_magnitude = C.VALUE.size * n
        values_opnd = ctx.sp_opnd(-(offset_magnitude))
        asm.lea(:rax, values_opnd)
        values_ptr = :rax
      end

      # call rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts);
      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], n)
      asm.mov(C_ARGS[2], values_ptr)
      asm.call(C.rb_ec_ary_new_from_values)

      ctx.stack_pop(n)
      stack_ret = ctx.stack_push(Type::TArray)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def duparray(jit, ctx, asm)
      ary = jit.operand(0)

      # Save the PC and SP because we are allocating
      jit_prepare_routine_call(jit, ctx, asm)

      # call rb_ary_resurrect(VALUE ary);
      asm.comment('call rb_ary_resurrect')
      asm.mov(C_ARGS[0], ary)
      asm.call(C.rb_ary_resurrect)

      stack_ret = ctx.stack_push(Type::TArray)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # duphash

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def expandarray(jit, ctx, asm)
      # Both arguments are rb_num_t which is unsigned
      num = jit.operand(0)
      flag = jit.operand(1)

      # If this instruction has the splat flag, then bail out.
      if flag & 0x01 != 0
        asm.incr_counter(:expandarray_splat)
        return CantCompile
      end

      # If this instruction has the postarg flag, then bail out.
      if flag & 0x02 != 0
        asm.incr_counter(:expandarray_postarg)
        return CantCompile
      end

      side_exit = side_exit(jit, ctx)

      array_opnd = ctx.stack_opnd(0)
      array_stack_opnd = StackOpnd[0]

      # num is the number of requested values. If there aren't enough in the
      # array then we're going to push on nils.
      if ctx.get_opnd_type(array_stack_opnd) == Type::Nil
        ctx.stack_pop(1) # pop after using the type info
        # special case for a, b = nil pattern
        # push N nils onto the stack
        num.times do
          push_opnd = ctx.stack_push(Type::Nil)
          asm.mov(push_opnd, Qnil)
        end
        return KeepCompiling
      end

      # Move the array from the stack and check that it's an array.
      asm.mov(:rax, array_opnd)
      guard_object_is_array(jit, ctx, asm, :rax, :rcx, array_stack_opnd, :expandarray_not_array)
      ctx.stack_pop(1) # pop after using the type info

      # If we don't actually want any values, then just return.
      if num == 0
        return KeepCompiling
      end

      jit_array_len(asm, :rax, :rcx)

      # Only handle the case where the number of values in the array is greater
      # than or equal to the number of values requested.
      asm.cmp(:rcx, num)
      asm.jl(counted_exit(side_exit, :expandarray_rhs_too_small))

      # Conditionally load the address of the heap array into REG1.
      # (struct RArray *)(obj)->as.heap.ptr
      #asm.mov(:rax, array_opnd)
      asm.mov(:rcx, [:rax, C.RBasic.offsetof(:flags)])
      asm.test(:rcx, C::RARRAY_EMBED_FLAG);
      asm.mov(:rcx, [:rax, C.RArray.offsetof(:as, :heap, :ptr)])

      # Load the address of the embedded array into REG1.
      # (struct RArray *)(obj)->as.ary
      asm.lea(:rax, [:rax, C.RArray.offsetof(:as, :ary)])

      asm.cmovnz(:rcx, :rax)

      # Loop backward through the array and push each element onto the stack.
      (num - 1).downto(0).each do |i|
        top = ctx.stack_push(Type::Unknown)
        asm.mov(:rax, [:rcx, i * C.VALUE.size])
        asm.mov(top, :rax)
      end

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def concatarray(jit, ctx, asm)
      # Save the PC and SP because the callee may allocate
      # Note that this modifies REG_SP, which is why we do it first
      jit_prepare_routine_call(jit, ctx, asm)

      # Get the operands from the stack
      ary2st_opnd = ctx.stack_pop(1)
      ary1_opnd = ctx.stack_pop(1)

      # Call rb_vm_concat_array(ary1, ary2st)
      asm.mov(C_ARGS[0], ary1_opnd)
      asm.mov(C_ARGS[1], ary2st_opnd)
      asm.call(C.rb_vm_concat_array)

      stack_ret = ctx.stack_push(Type::TArray)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def splatarray(jit, ctx, asm)
      flag = jit.operand(0)

      # Save the PC and SP because the callee may allocate
      # Note that this modifies REG_SP, which is why we do it first
      jit_prepare_routine_call(jit, ctx, asm)

      # Get the operands from the stack
      ary_opnd = ctx.stack_pop(1)

      # Call rb_vm_splat_array(flag, ary)
      asm.mov(C_ARGS[0], flag)
      asm.mov(C_ARGS[1], ary_opnd)
      asm.call(C.rb_vm_splat_array)

      stack_ret = ctx.stack_push(Type::TArray)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def newhash(jit, ctx, asm)
      num = jit.operand(0)

      # Save the PC and SP because we are allocating
      jit_prepare_routine_call(jit, ctx, asm)

      if num != 0
        # val = rb_hash_new_with_size(num / 2);
        asm.mov(C_ARGS[0], num / 2)
        asm.call(C.rb_hash_new_with_size)

        # Save the allocated hash as we want to push it after insertion
        asm.push(C_RET)
        asm.push(C_RET) # x86 alignment

        # Get a pointer to the values to insert into the hash
        asm.lea(:rcx, ctx.stack_opnd(num - 1))

        # rb_hash_bulk_insert(num, STACK_ADDR_FROM_TOP(num), val);
        asm.mov(C_ARGS[0], num)
        asm.mov(C_ARGS[1], :rcx)
        asm.mov(C_ARGS[2], C_RET)
        asm.call(C.rb_hash_bulk_insert)

        asm.pop(:rax)
        asm.pop(:rax)

        ctx.stack_pop(num)
        stack_ret = ctx.stack_push(Type::Hash)
        asm.mov(stack_ret, :rax)
      else
        # val = rb_hash_new();
        asm.call(C.rb_hash_new)
        stack_ret = ctx.stack_push(Type::Hash)
        asm.mov(stack_ret, C_RET)
      end

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def newrange(jit, ctx, asm)
      flag = jit.operand(0)

      # rb_range_new() allocates and can raise
      jit_prepare_routine_call(jit, ctx, asm)

      # val = rb_range_new(low, high, (int)flag);
      asm.mov(C_ARGS[0], ctx.stack_opnd(1))
      asm.mov(C_ARGS[1], ctx.stack_opnd(0))
      asm.mov(C_ARGS[2], flag)
      asm.call(C.rb_range_new)

      ctx.stack_pop(2)
      stack_ret = ctx.stack_push(Type::UnknownHeap)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def pop(jit, ctx, asm)
      ctx.stack_pop
      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def dup(jit, ctx, asm)
      dup_val = ctx.stack_opnd(0)
      mapping, tmp_type = ctx.get_opnd_mapping(StackOpnd[0])

      loc0 = ctx.stack_push_mapping([mapping, tmp_type])
      asm.mov(:rax, dup_val)
      asm.mov(loc0, :rax)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def dupn(jit, ctx, asm)
      n = jit.operand(0)

      # In practice, seems to be only used for n==2
      if n != 2
        return CantCompile
      end

      opnd1 = ctx.stack_opnd(1)
      opnd0 = ctx.stack_opnd(0)

      mapping1 = ctx.get_opnd_mapping(StackOpnd[1])
      mapping0 = ctx.get_opnd_mapping(StackOpnd[0])

      dst1 = ctx.stack_push_mapping(mapping1)
      asm.mov(:rax, opnd1)
      asm.mov(dst1, :rax)

      dst0 = ctx.stack_push_mapping(mapping0)
      asm.mov(:rax, opnd0)
      asm.mov(dst0, :rax)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def swap(jit, ctx, asm)
      stack_swap(jit, ctx, asm, 0, 1)
      KeepCompiling
    end

    # opt_reverse

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def topn(jit, ctx, asm)
      n = jit.operand(0)

      top_n_val = ctx.stack_opnd(n)
      mapping = ctx.get_opnd_mapping(StackOpnd[n])
      loc0 = ctx.stack_push_mapping(mapping)
      asm.mov(:rax, top_n_val)
      asm.mov(loc0, :rax)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def setn(jit, ctx, asm)
      n = jit.operand(0)

      top_val = ctx.stack_pop(0)
      dst_opnd = ctx.stack_opnd(n)
      asm.mov(:rax, top_val)
      asm.mov(dst_opnd, :rax)

      mapping = ctx.get_opnd_mapping(StackOpnd[0])
      ctx.set_opnd_mapping(StackOpnd[n], mapping)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def adjuststack(jit, ctx, asm)
      n = jit.operand(0)
      ctx.stack_pop(n)
      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def defined(jit, ctx, asm)
      op_type = jit.operand(0)
      obj = jit.operand(1, ruby: true)
      pushval = jit.operand(2, ruby: true)

      # Save the PC and SP because the callee may allocate
      # Note that this modifies REG_SP, which is why we do it first
      jit_prepare_routine_call(jit, ctx, asm)

      # Get the operands from the stack
      v_opnd = ctx.stack_pop(1)

      # Call vm_defined(ec, reg_cfp, op_type, obj, v)
      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], CFP)
      asm.mov(C_ARGS[2], op_type)
      asm.mov(C_ARGS[3], to_value(obj))
      asm.mov(C_ARGS[4], v_opnd)
      asm.call(C.rb_vm_defined)

      asm.test(C_RET, 255)
      asm.mov(:rax, Qnil)
      asm.mov(:rcx, to_value(pushval))
      asm.cmovnz(:rax, :rcx)

      # Push the return value onto the stack
      out_type = if C::SPECIAL_CONST_P(pushval)
        Type::UnknownImm
      else
        Type::Unknown
      end
      stack_ret = ctx.stack_push(out_type)
      asm.mov(stack_ret, :rax)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def definedivar(jit, ctx, asm)
      # Defer compilation so we can specialize base on a runtime receiver
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      ivar_name = jit.operand(0)
      # Value that will be pushed on the stack if the ivar is defined. In practice this is always the
      # string "instance-variable". If the ivar is not defined, nil will be pushed instead.
      pushval = jit.operand(2, ruby: true)

      # Get the receiver
      recv = :rcx
      asm.mov(recv, [CFP, C.rb_control_frame_t.offsetof(:self)])

      # Specialize base on compile time values
      comptime_receiver = jit.peek_at_self

      if shape_too_complex?(comptime_receiver)
        # Fall back to calling rb_ivar_defined

        # Save the PC and SP because the callee may allocate
        # Note that this modifies REG_SP, which is why we do it first
        jit_prepare_routine_call(jit, ctx, asm) # clobbers :rax

        # Call rb_ivar_defined(recv, ivar_name)
        asm.mov(C_ARGS[0], recv)
        asm.mov(C_ARGS[1], ivar_name)
        asm.call(C.rb_ivar_defined)

        # if (rb_ivar_defined(recv, ivar_name)) {
        #  val = pushval;
        # }
        asm.test(C_RET, 255)
        asm.mov(:rax, Qnil)
        asm.mov(:rcx, to_value(pushval))
        asm.cmovnz(:rax, :rcx)

        # Push the return value onto the stack
        out_type = C::SPECIAL_CONST_P(pushval) ? Type::UnknownImm : Type::Unknown
        stack_ret = ctx.stack_push(out_type)
        asm.mov(stack_ret, :rax)

        return KeepCompiling
      end

      shape_id = C.rb_shape_get_shape_id(comptime_receiver)
      ivar_exists = C.rb_shape_get_iv_index(shape_id, ivar_name)

      side_exit = side_exit(jit, ctx)

      # Guard heap object (recv_opnd must be used before stack_pop)
      guard_object_is_heap(jit, ctx, asm, recv, SelfOpnd)

      shape_opnd = DwordPtr[recv, C.rb_shape_id_offset]

      asm.comment('guard shape')
      asm.cmp(shape_opnd, shape_id)
      jit_chain_guard(:jne, jit, ctx, asm, side_exit)

      result = ivar_exists ? C.to_value(pushval) : Qnil
      putobject(jit, ctx, asm, val: result)

      # Jump to next instruction. This allows guard chains to share the same successor.
      jump_to_next_insn(jit, ctx, asm)

      return EndBlock
    end

    # checkmatch

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def checkkeyword(jit, ctx, asm)
      # When a keyword is unspecified past index 32, a hash will be used
      # instead. This can only happen in iseqs taking more than 32 keywords.
      if jit.iseq.body.param.keyword.num >= 32
        return CantCompile
      end

      # The EP offset to the undefined bits local
      bits_offset = jit.operand(0)

      # The index of the keyword we want to check
      index = jit.operand(1, signed: true)

      # Load environment pointer EP
      ep_reg = :rax
      jit_get_ep(asm, 0, reg: ep_reg)

      # VALUE kw_bits = *(ep - bits)
      bits_opnd = [ep_reg, C.VALUE.size * -bits_offset]

      # unsigned int b = (unsigned int)FIX2ULONG(kw_bits);
      # if ((b & (0x01 << idx))) {
      #
      # We can skip the FIX2ULONG conversion by shifting the bit we test
      bit_test = 0x01 << (index + 1)
      asm.test(bits_opnd, bit_test)
      asm.mov(:rax, Qfalse)
      asm.mov(:rcx, Qtrue)
      asm.cmovz(:rax, :rcx)

      stack_ret = ctx.stack_push(Type::UnknownImm)
      asm.mov(stack_ret, :rax)

      KeepCompiling
    end

    # checktype
    # defineclass
    # definemethod
    # definesmethod

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def send(jit, ctx, asm)
      # Specialize on a compile-time receiver, and split a block for chain guards
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      cd = C.rb_call_data.new(jit.operand(0))
      blockiseq = jit.operand(1)

      # calling->ci
      mid = C.vm_ci_mid(cd.ci)
      calling = build_calling(ci: cd.ci, block_handler: blockiseq)

      if calling.flags & C::VM_CALL_FORWARDING != 0
        return CantCompile
      end

      # vm_sendish
      cme, comptime_recv_klass = jit_search_method(jit, ctx, asm, mid, calling)
      if cme == CantCompile
        return CantCompile
      end
      jit_call_general(jit, ctx, asm, mid, calling, cme, comptime_recv_klass)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_send_without_block(jit, ctx, asm, cd: C.rb_call_data.new(jit.operand(0)))
      # Specialize on a compile-time receiver, and split a block for chain guards
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      # calling->ci
      mid = C.vm_ci_mid(cd.ci)
      calling = build_calling(ci: cd.ci, block_handler: C::VM_BLOCK_HANDLER_NONE)

      # vm_sendish
      cme, comptime_recv_klass = jit_search_method(jit, ctx, asm, mid, calling)
      if cme == CantCompile
        return CantCompile
      end
      jit_call_general(jit, ctx, asm, mid, calling, cme, comptime_recv_klass)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def objtostring(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      recv = ctx.stack_opnd(0)
      comptime_recv = jit.peek_at_stack(0)

      if C.RB_TYPE_P(comptime_recv, C::RUBY_T_STRING)
        side_exit = side_exit(jit, ctx)

        jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_recv), recv, StackOpnd[0], comptime_recv, side_exit)
        # No work needed. The string value is already on the top of the stack.
        KeepCompiling
      else
        cd = C.rb_call_data.new(jit.operand(0))
        opt_send_without_block(jit, ctx, asm, cd:)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_ary_freeze(jit, ctx, asm)
      unless Invariants.assume_bop_not_redefined(jit, C::ARRAY_REDEFINED_OP_FLAG, C::BOP_FREEZE)
        return CantCompile;
      end

      ary = jit.operand(0, ruby: true)

      # Push the return value onto the stack
      stack_ret = ctx.stack_push(Type::CArray)
      asm.mov(:rax, to_value(ary))
      asm.mov(stack_ret, :rax)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_hash_freeze(jit, ctx, asm)
      unless Invariants.assume_bop_not_redefined(jit, C::HASH_REDEFINED_OP_FLAG, C::BOP_FREEZE)
        return CantCompile;
      end

      hash = jit.operand(0, ruby: true)

      # Push the return value onto the stack
      stack_ret = ctx.stack_push(Type::CHash)
      asm.mov(:rax, to_value(hash))
      asm.mov(stack_ret, :rax)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_str_freeze(jit, ctx, asm)
      unless Invariants.assume_bop_not_redefined(jit, C::STRING_REDEFINED_OP_FLAG, C::BOP_FREEZE)
        return CantCompile;
      end

      str = jit.operand(0, ruby: true)

      # Push the return value onto the stack
      stack_ret = ctx.stack_push(Type::CString)
      asm.mov(:rax, to_value(str))
      asm.mov(stack_ret, :rax)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_nil_p(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # opt_str_uminus

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_newarray_send(jit, ctx, asm)
      type = C.ID2SYM jit.operand(1)

      case type
      when :min then opt_newarray_min(jit, ctx, asm)
      when :max then opt_newarray_max(jit, ctx, asm)
      when :hash then opt_newarray_hash(jit, ctx, asm)
      else
        return CantCompile
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_newarray_min(jit, ctx, asm)
      num = jit.operand(0)

      # Save the PC and SP because we may allocate
      jit_prepare_routine_call(jit, ctx, asm)

      offset_magnitude = C.VALUE.size * num
      values_opnd = ctx.sp_opnd(-offset_magnitude)
      asm.lea(:rax, values_opnd)

      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], num)
      asm.mov(C_ARGS[2], :rax)
      asm.call(C.rb_vm_opt_newarray_min)

      ctx.stack_pop(num)
      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_newarray_max(jit, ctx, asm)
      num = jit.operand(0)

      # Save the PC and SP because we may allocate
      jit_prepare_routine_call(jit, ctx, asm)

      offset_magnitude = C.VALUE.size * num
      values_opnd = ctx.sp_opnd(-offset_magnitude)
      asm.lea(:rax, values_opnd)

      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], num)
      asm.mov(C_ARGS[2], :rax)
      asm.call(C.rb_vm_opt_newarray_max)

      ctx.stack_pop(num)
      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_newarray_hash(jit, ctx, asm)
      num = jit.operand(0)

      # Save the PC and SP because we may allocate
      jit_prepare_routine_call(jit, ctx, asm)

      offset_magnitude = C.VALUE.size * num
      values_opnd = ctx.sp_opnd(-offset_magnitude)
      asm.lea(:rax, values_opnd)

      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], num)
      asm.mov(C_ARGS[2], :rax)
      asm.call(C.rb_vm_opt_newarray_hash)

      ctx.stack_pop(num)
      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def invokesuper(jit, ctx, asm)
      cd = C.rb_call_data.new(jit.operand(0))
      block = jit.operand(1)

      # Defer compilation so we can specialize on class of receiver
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      me = C.rb_vm_frame_method_entry(jit.cfp)
      if me.nil?
        return CantCompile
      end

      # FIXME: We should track and invalidate this block when this cme is invalidated
      current_defined_class = me.defined_class
      mid = me.def.original_id

      if me.to_i != C.rb_callable_method_entry(current_defined_class, me.called_id).to_i
        # Though we likely could generate this call, as we are only concerned
        # with the method entry remaining valid, assume_method_lookup_stable
        # below requires that the method lookup matches as well
        return CantCompile
      end

      # vm_search_normal_superclass
      rbasic_klass = C.to_ruby(C.RBasic.new(C.to_value(current_defined_class)).klass)
      if C::BUILTIN_TYPE(current_defined_class) == C::RUBY_T_ICLASS && C::BUILTIN_TYPE(rbasic_klass) == C::RUBY_T_MODULE && \
          C::FL_TEST_RAW(rbasic_klass, C::RMODULE_IS_REFINEMENT)
        return CantCompile
      end
      comptime_superclass = C.rb_class_get_superclass(C.RCLASS_ORIGIN(current_defined_class))

      ci = cd.ci
      argc = C.vm_ci_argc(ci)

      ci_flags = C.vm_ci_flag(ci)

      # Don't JIT calls that aren't simple
      # Note, not using VM_CALL_ARGS_SIMPLE because sometimes we pass a block.

      if ci_flags & C::VM_CALL_KWARG != 0
        asm.incr_counter(:send_keywords)
        return CantCompile
      end
      if ci_flags & C::VM_CALL_KW_SPLAT != 0
        asm.incr_counter(:send_kw_splat)
        return CantCompile
      end
      if ci_flags & C::VM_CALL_ARGS_BLOCKARG != 0
        asm.incr_counter(:send_block_arg)
        return CantCompile
      end

      # Ensure we haven't rebound this method onto an incompatible class.
      # In the interpreter we try to avoid making this check by performing some
      # cheaper calculations first, but since we specialize on the method entry
      # and so only have to do this once at compile time this is fine to always
      # check and side exit.
      comptime_recv = jit.peek_at_stack(argc)
      unless C.obj_is_kind_of(comptime_recv, current_defined_class)
        return CantCompile
      end

      # Do method lookup
      cme = C.rb_callable_method_entry(comptime_superclass, mid)

      if cme.nil?
        return CantCompile
      end

      # Check that we'll be able to write this method dispatch before generating checks
      cme_def_type = cme.def.type
      if cme_def_type != C::VM_METHOD_TYPE_ISEQ && cme_def_type != C::VM_METHOD_TYPE_CFUNC
        # others unimplemented
        return CantCompile
      end

      asm.comment('guard known me')
      lep_opnd = :rax
      jit_get_lep(jit, asm, reg: lep_opnd)
      ep_me_opnd = [lep_opnd, C.VALUE.size * C::VM_ENV_DATA_INDEX_ME_CREF]

      asm.mov(:rcx, me.to_i)
      asm.cmp(ep_me_opnd, :rcx)
      asm.jne(counted_exit(side_exit(jit, ctx), :invokesuper_me_changed))

      if block == C::VM_BLOCK_HANDLER_NONE
        # Guard no block passed
        # rb_vm_frame_block_handler(GET_EC()->cfp) == VM_BLOCK_HANDLER_NONE
        # note, we assume VM_ASSERT(VM_ENV_LOCAL_P(ep))
        #
        # TODO: this could properly forward the current block handler, but
        # would require changes to gen_send_*
        asm.comment('guard no block given')
        ep_specval_opnd = [lep_opnd, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL]
        asm.cmp(ep_specval_opnd, C::VM_BLOCK_HANDLER_NONE)
        asm.jne(counted_exit(side_exit(jit, ctx), :invokesuper_block))
      end

      # We need to assume that both our current method entry and the super
      # method entry we invoke remain stable
      Invariants.assume_method_lookup_stable(jit, me)
      Invariants.assume_method_lookup_stable(jit, cme)

      # Method calls may corrupt types
      ctx.clear_local_types

      calling = build_calling(ci:, block_handler: block)
      case cme_def_type
      in C::VM_METHOD_TYPE_ISEQ
        iseq = def_iseq_ptr(cme.def)
        frame_type = C::VM_FRAME_MAGIC_METHOD | C::VM_ENV_FLAG_LOCAL
        jit_call_iseq(jit, ctx, asm, cme, calling, iseq, frame_type:)
      in C::VM_METHOD_TYPE_CFUNC
        jit_call_cfunc(jit, ctx, asm, cme, calling)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def invokeblock(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      # Get call info
      cd = C.rb_call_data.new(jit.operand(0))
      calling = build_calling(ci: cd.ci, block_handler: :captured)

      # Get block_handler
      cfp = jit.cfp
      lep = C.rb_vm_ep_local_ep(cfp.ep)
      comptime_handler = lep[C::VM_ENV_DATA_INDEX_SPECVAL]

      # Handle each block_handler type
      if comptime_handler == C::VM_BLOCK_HANDLER_NONE # no block given
        asm.incr_counter(:invokeblock_none)
        CantCompile
      elsif comptime_handler & 0x3 == 0x1 # VM_BH_ISEQ_BLOCK_P
        asm.comment('get local EP')
        ep_reg = :rax
        jit_get_lep(jit, asm, reg: ep_reg)
        asm.mov(:rax, [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL]) # block_handler_opnd

        asm.comment('guard block_handler type')
        side_exit = side_exit(jit, ctx)
        asm.mov(:rcx, :rax)
        asm.and(:rcx, 0x3) # block_handler is a tagged pointer
        asm.cmp(:rcx, 0x1) # VM_BH_ISEQ_BLOCK_P
        tag_changed_exit = counted_exit(side_exit, :invokeblock_tag_changed)
        jit_chain_guard(:jne, jit, ctx, asm, tag_changed_exit)

        comptime_captured = C.rb_captured_block.new(comptime_handler & ~0x3)
        comptime_iseq = comptime_captured.code.iseq

        asm.comment('guard known ISEQ')
        asm.and(:rax, ~0x3) # captured
        asm.mov(:rax, [:rax, C.VALUE.size * 2]) # captured->iseq
        asm.mov(:rcx, comptime_iseq.to_i)
        asm.cmp(:rax, :rcx)
        block_changed_exit = counted_exit(side_exit, :invokeblock_iseq_block_changed)
        jit_chain_guard(:jne, jit, ctx, asm, block_changed_exit)

        jit_call_iseq(jit, ctx, asm, nil, calling, comptime_iseq, frame_type: C::VM_FRAME_MAGIC_BLOCK)
      elsif comptime_handler & 0x3 == 0x3 # VM_BH_IFUNC_P
        # We aren't handling CALLER_SETUP_ARG and CALLER_REMOVE_EMPTY_KW_SPLAT yet.
        if calling.flags & C::VM_CALL_ARGS_SPLAT != 0
          asm.incr_counter(:invokeblock_ifunc_args_splat)
          return CantCompile
        end
        if calling.flags & C::VM_CALL_KW_SPLAT != 0
          asm.incr_counter(:invokeblock_ifunc_kw_splat)
          return CantCompile
        end

        asm.comment('get local EP')
        jit_get_lep(jit, asm, reg: :rax)
        asm.mov(:rcx, [:rax, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL]) # block_handler_opnd

        asm.comment('guard block_handler type');
        side_exit = side_exit(jit, ctx)
        asm.mov(:rax, :rcx) # block_handler_opnd
        asm.and(:rax, 0x3) # tag_opnd: block_handler is a tagged pointer
        asm.cmp(:rax, 0x3) # VM_BH_IFUNC_P
        tag_changed_exit = counted_exit(side_exit, :invokeblock_tag_changed)
        jit_chain_guard(:jne, jit, ctx, asm, tag_changed_exit)

        # The cfunc may not be leaf
        jit_prepare_routine_call(jit, ctx, asm) # clobbers :rax

        asm.comment('call ifunc')
        asm.and(:rcx, ~0x3) # captured_opnd
        asm.lea(:rax, ctx.sp_opnd(-calling.argc * C.VALUE.size)) # argv
        asm.mov(C_ARGS[0], EC)
        asm.mov(C_ARGS[1], :rcx) # captured_opnd
        asm.mov(C_ARGS[2], calling.argc)
        asm.mov(C_ARGS[3], :rax) # argv
        asm.call(C.rb_vm_yield_with_cfunc)

        ctx.stack_pop(calling.argc)
        stack_ret = ctx.stack_push(Type::Unknown)
        asm.mov(stack_ret, C_RET)

        # cfunc calls may corrupt types
        ctx.clear_local_types

        # Share the successor with other chains
        jump_to_next_insn(jit, ctx, asm)
        EndBlock
      elsif symbol?(comptime_handler)
        asm.incr_counter(:invokeblock_symbol)
        CantCompile
      else # Proc
        asm.incr_counter(:invokeblock_proc)
        CantCompile
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def leave(jit, ctx, asm)
      assert_equal(ctx.stack_size, 1)

      jit_check_ints(jit, ctx, asm)

      asm.comment('pop stack frame')
      asm.lea(:rax, [CFP, C.rb_control_frame_t.size])
      asm.mov(CFP, :rax)
      asm.mov([EC, C.rb_execution_context_t.offsetof(:cfp)], :rax)

      # Return a value (for compile_leave_exit)
      ret_opnd = ctx.stack_pop
      asm.mov(:rax, ret_opnd)

      # Set caller's SP and push a value to its stack (for JIT)
      asm.mov(SP, [CFP, C.rb_control_frame_t.offsetof(:sp)]) # Note: SP is in the position after popping a receiver and arguments
      asm.mov([SP], :rax)

      # Jump to cfp->jit_return
      asm.jmp([CFP, -C.rb_control_frame_t.size + C.rb_control_frame_t.offsetof(:jit_return)])

      EndBlock
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def throw(jit, ctx, asm)
      throw_state = jit.operand(0)
      asm.mov(:rcx, ctx.stack_pop(1)) # throwobj

      # THROW_DATA_NEW allocates. Save SP for GC and PC for allocation tracing as
      # well as handling the catch table. However, not using jit_prepare_routine_call
      # since we don't need a patch point for this implementation.
      jit_save_pc(jit, asm) # clobbers rax
      jit_save_sp(ctx, asm)

      # rb_vm_throw verifies it's a valid throw, sets ec->tag->state, and returns throw
      # data, which is throwobj or a vm_throw_data wrapping it. When ec->tag->state is
      # set, JIT code callers will handle the throw with vm_exec_handle_exception.
      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], CFP)
      asm.mov(C_ARGS[2], throw_state)
      # asm.mov(C_ARGS[3], :rcx) # same reg
      asm.call(C.rb_vm_throw)

      asm.comment('exit from throw')
      asm.pop(SP)
      asm.pop(EC)
      asm.pop(CFP)

      # return C_RET as C_RET
      asm.ret
      EndBlock
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jump(jit, ctx, asm)
      # Check for interrupts, but only on backward branches that may create loops
      jump_offset = jit.operand(0, signed: true)
      if jump_offset < 0
        jit_check_ints(jit, ctx, asm)
      end

      pc = jit.pc + C.VALUE.size * (jit.insn.len + jump_offset)
      jit_direct_jump(jit.iseq, pc, ctx, asm)
      EndBlock
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def branchif(jit, ctx, asm)
      # Check for interrupts, but only on backward branches that may create loops
      jump_offset = jit.operand(0, signed: true)
      if jump_offset < 0
        jit_check_ints(jit, ctx, asm)
      end

      # Get the branch target instruction offsets
      next_pc = jit.pc + C.VALUE.size * jit.insn.len
      jump_pc = jit.pc + C.VALUE.size * (jit.insn.len + jump_offset)

      val_type = ctx.get_opnd_type(StackOpnd[0])
      val_opnd = ctx.stack_pop(1)

      if (result = val_type.known_truthy) != nil
        target_pc = result ? jump_pc : next_pc
        jit_direct_jump(jit.iseq, target_pc, ctx, asm)
      else
        # This `test` sets ZF only for Qnil and Qfalse, which let jz jump.
        asm.test(val_opnd, ~Qnil)

        # Set stubs
        branch_stub = BranchStub.new(
          iseq: jit.iseq,
          shape: Default,
          target0: BranchTarget.new(ctx:, pc: jump_pc), # branch target
          target1: BranchTarget.new(ctx:, pc: next_pc), # fallthrough
        )
        branch_stub.target0.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(ctx, ocb_asm, branch_stub, true)
          @ocb.write(ocb_asm)
        end
        branch_stub.target1.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(ctx, ocb_asm, branch_stub, false)
          @ocb.write(ocb_asm)
        end

        # Jump to target0 on jnz
        branch_stub.compile = compile_branchif(branch_stub)
        branch_stub.compile.call(asm)
      end

      EndBlock
    end

    def compile_branchif(branch_stub) # Proc escapes arguments in memory
      proc do |branch_asm|
        branch_asm.comment("branchif #{branch_stub.shape}")
        branch_asm.stub(branch_stub) do
          case branch_stub.shape
          in Default
            branch_asm.jnz(branch_stub.target0.address)
            branch_asm.jmp(branch_stub.target1.address)
          in Next0
            branch_asm.jz(branch_stub.target1.address)
          in Next1
            branch_asm.jnz(branch_stub.target0.address)
          end
        end
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def branchunless(jit, ctx, asm)
      # Check for interrupts, but only on backward branches that may create loops
      jump_offset = jit.operand(0, signed: true)
      if jump_offset < 0
        jit_check_ints(jit, ctx, asm)
      end

      # Get the branch target instruction offsets
      next_pc = jit.pc + C.VALUE.size * jit.insn.len
      jump_pc = jit.pc + C.VALUE.size * (jit.insn.len + jump_offset)

      val_type = ctx.get_opnd_type(StackOpnd[0])
      val_opnd = ctx.stack_pop(1)

      if (result = val_type.known_truthy) != nil
        target_pc = result ? next_pc : jump_pc
        jit_direct_jump(jit.iseq, target_pc, ctx, asm)
      else
        # This `test` sets ZF only for Qnil and Qfalse, which let jz jump.
        asm.test(val_opnd, ~Qnil)

        # Set stubs
        branch_stub = BranchStub.new(
          iseq: jit.iseq,
          shape: Default,
          target0: BranchTarget.new(ctx:, pc: jump_pc), # branch target
          target1: BranchTarget.new(ctx:, pc: next_pc), # fallthrough
        )
        branch_stub.target0.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(ctx, ocb_asm, branch_stub, true)
          @ocb.write(ocb_asm)
        end
        branch_stub.target1.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(ctx, ocb_asm, branch_stub, false)
          @ocb.write(ocb_asm)
        end

        # Jump to target0 on jz
        branch_stub.compile = compile_branchunless(branch_stub)
        branch_stub.compile.call(asm)
      end

      EndBlock
    end

    def compile_branchunless(branch_stub) # Proc escapes arguments in memory
      proc do |branch_asm|
        branch_asm.comment("branchunless #{branch_stub.shape}")
        branch_asm.stub(branch_stub) do
          case branch_stub.shape
          in Default
            branch_asm.jz(branch_stub.target0.address)
            branch_asm.jmp(branch_stub.target1.address)
          in Next0
            branch_asm.jnz(branch_stub.target1.address)
          in Next1
            branch_asm.jz(branch_stub.target0.address)
          end
        end
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def branchnil(jit, ctx, asm)
      # Check for interrupts, but only on backward branches that may create loops
      jump_offset = jit.operand(0, signed: true)
      if jump_offset < 0
        jit_check_ints(jit, ctx, asm)
      end

      # Get the branch target instruction offsets
      next_pc = jit.pc + C.VALUE.size * jit.insn.len
      jump_pc = jit.pc + C.VALUE.size * (jit.insn.len + jump_offset)

      val_type = ctx.get_opnd_type(StackOpnd[0])
      val_opnd = ctx.stack_pop(1)

      if (result = val_type.known_nil) != nil
        target_pc = result ? jump_pc : next_pc
        jit_direct_jump(jit.iseq, target_pc, ctx, asm)
      else
        asm.cmp(val_opnd, Qnil)

        # Set stubs
        branch_stub = BranchStub.new(
          iseq: jit.iseq,
          shape: Default,
          target0: BranchTarget.new(ctx:, pc: jump_pc), # branch target
          target1: BranchTarget.new(ctx:, pc: next_pc), # fallthrough
        )
        branch_stub.target0.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(ctx, ocb_asm, branch_stub, true)
          @ocb.write(ocb_asm)
        end
        branch_stub.target1.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(ctx, ocb_asm, branch_stub, false)
          @ocb.write(ocb_asm)
        end

        # Jump to target0 on je
        branch_stub.compile = compile_branchnil(branch_stub)
        branch_stub.compile.call(asm)
      end

      EndBlock
    end

    def compile_branchnil(branch_stub) # Proc escapes arguments in memory
      proc do |branch_asm|
        branch_asm.comment("branchnil #{branch_stub.shape}")
        branch_asm.stub(branch_stub) do
          case branch_stub.shape
          in Default
            branch_asm.je(branch_stub.target0.address)
            branch_asm.jmp(branch_stub.target1.address)
          in Next0
            branch_asm.jne(branch_stub.target1.address)
          in Next1
            branch_asm.je(branch_stub.target0.address)
          end
        end
      end
    end

    # once

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_case_dispatch(jit, ctx, asm)
      # Normally this instruction would lookup the key in a hash and jump to an
      # offset based on that.
      # Instead we can take the fallback case and continue with the next
      # instruction.
      # We'd hope that our jitted code will be sufficiently fast without the
      # hash lookup, at least for small hashes, but it's worth revisiting this
      # assumption in the future.
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end
      starting_context = ctx.dup

      case_hash = jit.operand(0, ruby: true)
      else_offset = jit.operand(1)

      # Try to reorder case/else branches so that ones that are actually used come first.
      # Supporting only Fixnum for now so that the implementation can be an equality check.
      key_opnd = ctx.stack_pop(1)
      comptime_key = jit.peek_at_stack(0)

      # Check that all cases are fixnums to avoid having to register BOP assumptions on
      # all the types that case hashes support. This spends compile time to save memory.
      if fixnum?(comptime_key) && comptime_key <= 2**32 && C.rb_hash_keys(case_hash).all? { |key| fixnum?(key) }
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_EQQ)
          return CantCompile
        end

        # Check if the key is the same value
        asm.cmp(key_opnd, to_value(comptime_key))
        side_exit = side_exit(jit, starting_context)
        jit_chain_guard(:jne, jit, starting_context, asm, side_exit)

        # Get the offset for the compile-time key
        offset = C.rb_hash_stlike_lookup(case_hash, comptime_key)
        # NOTE: If we hit the else branch with various values, it could negatively impact the performance.
        jump_offset = offset || else_offset

        # Jump to the offset of case or else
        target_pc = jit.pc + (jit.insn.len + jump_offset) * C.VALUE.size
        jit_direct_jump(jit.iseq, target_pc, ctx, asm)
        EndBlock
      else
        KeepCompiling # continue with === branches
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_plus(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      comptime_recv = jit.peek_at_stack(1)
      comptime_obj  = jit.peek_at_stack(0)

      if fixnum?(comptime_recv) && fixnum?(comptime_obj)
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_PLUS)
          return CantCompile
        end

        # Check that both operands are fixnums
        guard_two_fixnums(jit, ctx, asm)

        obj_opnd  = ctx.stack_pop
        recv_opnd = ctx.stack_pop

        asm.mov(:rax, recv_opnd)
        asm.sub(:rax, 1) # untag
        asm.mov(:rcx, obj_opnd)
        asm.add(:rax, :rcx)
        asm.jo(side_exit(jit, ctx))

        dst_opnd = ctx.stack_push(Type::Fixnum)
        asm.mov(dst_opnd, :rax)

        KeepCompiling
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_minus(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      comptime_recv = jit.peek_at_stack(1)
      comptime_obj  = jit.peek_at_stack(0)

      if fixnum?(comptime_recv) && fixnum?(comptime_obj)
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_MINUS)
          return CantCompile
        end

        # Check that both operands are fixnums
        guard_two_fixnums(jit, ctx, asm)

        obj_opnd  = ctx.stack_pop
        recv_opnd = ctx.stack_pop

        asm.mov(:rax, recv_opnd)
        asm.mov(:rcx, obj_opnd)
        asm.sub(:rax, :rcx)
        asm.jo(side_exit(jit, ctx))
        asm.add(:rax, 1) # re-tag

        dst_opnd = ctx.stack_push(Type::Fixnum)
        asm.mov(dst_opnd, :rax)

        KeepCompiling
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_mult(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_div(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_mod(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      if two_fixnums_on_stack?(jit)
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_MOD)
          return CantCompile
        end

        # Check that both operands are fixnums
        guard_two_fixnums(jit, ctx, asm)

        # Get the operands and destination from the stack
        arg1 = ctx.stack_pop(1)
        arg0 = ctx.stack_pop(1)

        # Check for arg0 % 0
        asm.cmp(arg1, 0)
        asm.je(side_exit(jit, ctx))

        # Call rb_fix_mod_fix(VALUE recv, VALUE obj)
        asm.mov(C_ARGS[0], arg0)
        asm.mov(C_ARGS[1], arg1)
        asm.call(C.rb_fix_mod_fix)

        # Push the return value onto the stack
        stack_ret = ctx.stack_push(Type::Fixnum)
        asm.mov(stack_ret, C_RET)

        KeepCompiling
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_eq(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      if jit_equality_specialized(jit, ctx, asm, true)
        jump_to_next_insn(jit, ctx, asm)
        EndBlock
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_neq(jit, ctx, asm)
      # opt_neq is passed two rb_call_data as arguments:
      # first for ==, second for !=
      neq_cd = C.rb_call_data.new(jit.operand(1))
      opt_send_without_block(jit, ctx, asm, cd: neq_cd)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_lt(jit, ctx, asm)
      jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovl, bop: C::BOP_LT)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_le(jit, ctx, asm)
      jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovle, bop: C::BOP_LE)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_gt(jit, ctx, asm)
      jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovg, bop: C::BOP_GT)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_ge(jit, ctx, asm)
      jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovge, bop: C::BOP_GE)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_ltlt(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_and(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      if two_fixnums_on_stack?(jit)
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_AND)
          return CantCompile
        end

        # Check that both operands are fixnums
        guard_two_fixnums(jit, ctx, asm)

        # Get the operands and destination from the stack
        arg1 = ctx.stack_pop(1)
        arg0 = ctx.stack_pop(1)

        asm.comment('bitwise and')
        asm.mov(:rax, arg0)
        asm.and(:rax, arg1)

        # Push the return value onto the stack
        dst = ctx.stack_push(Type::Fixnum)
        asm.mov(dst, :rax)

        KeepCompiling
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_or(jit, ctx, asm)
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      if two_fixnums_on_stack?(jit)
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_OR)
          return CantCompile
        end

        # Check that both operands are fixnums
        guard_two_fixnums(jit, ctx, asm)

        # Get the operands and destination from the stack
        asm.comment('bitwise or')
        arg1 = ctx.stack_pop(1)
        arg0 = ctx.stack_pop(1)

        # Do the bitwise or arg0 | arg1
        asm.mov(:rax, arg0)
        asm.or(:rax, arg1)

        # Push the return value onto the stack
        dst = ctx.stack_push(Type::Fixnum)
        asm.mov(dst, :rax)

        KeepCompiling
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_aref(jit, ctx, asm)
      cd = C.rb_call_data.new(jit.operand(0))
      argc = C.vm_ci_argc(cd.ci)

      if argc != 1
        asm.incr_counter(:optaref_argc_not_one)
        return CantCompile
      end

      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      comptime_recv = jit.peek_at_stack(1)
      comptime_obj  = jit.peek_at_stack(0)

      side_exit = side_exit(jit, ctx)

      if C.rb_class_of(comptime_recv) == Array && fixnum?(comptime_obj)
        unless Invariants.assume_bop_not_redefined(jit, C::ARRAY_REDEFINED_OP_FLAG, C::BOP_AREF)
          return CantCompile
        end

        idx_opnd = ctx.stack_opnd(0)
        recv_opnd = ctx.stack_opnd(1)

        not_array_exit = counted_exit(side_exit, :optaref_recv_not_array)
        jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_recv), recv_opnd, StackOpnd[1], comptime_recv, not_array_exit)

        # Bail if idx is not a FIXNUM
        asm.mov(:rax, idx_opnd)
        asm.test(:rax, C::RUBY_FIXNUM_FLAG)
        asm.jz(counted_exit(side_exit, :optaref_arg_not_fixnum))

        # Call VALUE rb_ary_entry_internal(VALUE ary, long offset).
        # It never raises or allocates, so we don't need to write to cfp->pc.
        asm.sar(:rax, 1) # Convert fixnum to int
        asm.mov(C_ARGS[0], recv_opnd)
        asm.mov(C_ARGS[1], :rax)
        asm.call(C.rb_ary_entry_internal)

        # Pop the argument and the receiver
        ctx.stack_pop(2)

        # Push the return value onto the stack
        stack_ret = ctx.stack_push(Type::Unknown)
        asm.mov(stack_ret, C_RET)

        # Let guard chains share the same successor
        jump_to_next_insn(jit, ctx, asm)
        EndBlock
      elsif C.rb_class_of(comptime_recv) == Hash
        unless Invariants.assume_bop_not_redefined(jit, C::HASH_REDEFINED_OP_FLAG, C::BOP_AREF)
          return CantCompile
        end

        recv_opnd = ctx.stack_opnd(1)

        # Guard that the receiver is a Hash
        not_hash_exit = counted_exit(side_exit, :optaref_recv_not_hash)
        jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_recv), recv_opnd, StackOpnd[1], comptime_recv, not_hash_exit)

        # Prepare to call rb_hash_aref(). It might call #hash on the key.
        jit_prepare_routine_call(jit, ctx, asm)

        asm.comment('call rb_hash_aref')
        key_opnd = ctx.stack_opnd(0)
        recv_opnd = ctx.stack_opnd(1)
        asm.mov(:rdi, recv_opnd)
        asm.mov(:rsi, key_opnd)
        asm.call(C.rb_hash_aref)

        # Pop the key and the receiver
        ctx.stack_pop(2)

        stack_ret = ctx.stack_push(Type::Unknown)
        asm.mov(stack_ret, C_RET)

        # Let guard chains share the same successor
        jump_to_next_insn(jit, ctx, asm)
        EndBlock
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_aset(jit, ctx, asm)
      # Defer compilation so we can specialize on a runtime `self`
      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      comptime_recv = jit.peek_at_stack(2)
      comptime_key = jit.peek_at_stack(1)

      # Get the operands from the stack
      recv = ctx.stack_opnd(2)
      key = ctx.stack_opnd(1)
      _val = ctx.stack_opnd(0)

      if C.rb_class_of(comptime_recv) == Array && fixnum?(comptime_key)
        side_exit = side_exit(jit, ctx)

        # Guard receiver is an Array
        jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_recv), recv, StackOpnd[2], comptime_recv, side_exit)

        # Guard key is a fixnum
        jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_key), key, StackOpnd[1], comptime_key, side_exit)

        # We might allocate or raise
        jit_prepare_routine_call(jit, ctx, asm)

        asm.comment('call rb_ary_store')
        recv = ctx.stack_opnd(2)
        key = ctx.stack_opnd(1)
        val = ctx.stack_opnd(0)
        asm.mov(:rax, key)
        asm.sar(:rax, 1) # FIX2LONG(key)
        asm.mov(C_ARGS[0], recv)
        asm.mov(C_ARGS[1], :rax)
        asm.mov(C_ARGS[2], val)
        asm.call(C.rb_ary_store)

        # rb_ary_store returns void
        # stored value should still be on stack
        val = ctx.stack_opnd(0)

        # Push the return value onto the stack
        ctx.stack_pop(3)
        stack_ret = ctx.stack_push(Type::Unknown)
        asm.mov(:rax, val)
        asm.mov(stack_ret, :rax)

        jump_to_next_insn(jit, ctx, asm)
        EndBlock
      elsif C.rb_class_of(comptime_recv) == Hash
        side_exit = side_exit(jit, ctx)

        # Guard receiver is a Hash
        jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_recv), recv, StackOpnd[2], comptime_recv, side_exit)

        # We might allocate or raise
        jit_prepare_routine_call(jit, ctx, asm)

        # Call rb_hash_aset
        recv = ctx.stack_opnd(2)
        key = ctx.stack_opnd(1)
        val = ctx.stack_opnd(0)
        asm.mov(C_ARGS[0], recv)
        asm.mov(C_ARGS[1], key)
        asm.mov(C_ARGS[2], val)
        asm.call(C.rb_hash_aset)

        # Push the return value onto the stack
        ctx.stack_pop(3)
        stack_ret = ctx.stack_push(Type::Unknown)
        asm.mov(stack_ret, C_RET)

        jump_to_next_insn(jit, ctx, asm)
        EndBlock
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # opt_aset_with
    # opt_aref_with

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_length(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_size(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_empty_p(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_succ(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_not(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_regexpmatch2(jit, ctx, asm)
      opt_send_without_block(jit, ctx, asm)
    end

    # invokebuiltin

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_invokebuiltin_delegate(jit, ctx, asm)
      bf = C.rb_builtin_function.new(jit.operand(0))
      bf_argc = bf.argc
      start_index = jit.operand(1)

      # ec, self, and arguments
      if bf_argc + 2 > C_ARGS.size
        return CantCompile
      end

      # If the calls don't allocate, do they need up to date PC, SP?
      jit_prepare_routine_call(jit, ctx, asm)

      # Call the builtin func (ec, recv, arg1, arg2, ...)
      asm.comment('call builtin func')
      asm.mov(C_ARGS[0], EC)
      asm.mov(C_ARGS[1], [CFP, C.rb_control_frame_t.offsetof(:self)])

      # Copy arguments from locals
      if bf_argc > 0
        # Load environment pointer EP from CFP
        asm.mov(:rax, [CFP, C.rb_control_frame_t.offsetof(:ep)])

        bf_argc.times do |i|
          table_size = jit.iseq.body.local_table_size
          offs = -table_size - C::VM_ENV_DATA_SIZE + 1 + start_index + i
          asm.mov(C_ARGS[2 + i], [:rax, offs * C.VALUE.size])
        end
      end
      asm.call(bf.func_ptr)

      # Push the return value
      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)

      KeepCompiling
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def opt_invokebuiltin_delegate_leave(jit, ctx, asm)
      opt_invokebuiltin_delegate(jit, ctx, asm)
      # opt_invokebuiltin_delegate is always followed by leave insn
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putobject_INT2FIX_0_(jit, ctx, asm)
      putobject(jit, ctx, asm, val: C.to_value(0))
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def putobject_INT2FIX_1_(jit, ctx, asm)
      putobject(jit, ctx, asm, val: C.to_value(1))
    end

    #
    # C func
    #

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_true(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 0
      asm.comment('nil? == true')
      ctx.stack_pop(1)
      stack_ret = ctx.stack_push(Type::True)
      asm.mov(stack_ret, Qtrue)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_false(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 0
      asm.comment('nil? == false')
      ctx.stack_pop(1)
      stack_ret = ctx.stack_push(Type::False)
      asm.mov(stack_ret, Qfalse)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_kernel_is_a(jit, ctx, asm, argc, known_recv_class)
      if argc != 1
        return false
      end

      # If this is a super call we might not know the class
      if known_recv_class.nil?
        return false
      end

      # Important note: The output code will simply `return true/false`.
      # Correctness follows from:
      #  - `known_recv_class` implies there is a guard scheduled before here
      #    for a particular `CLASS_OF(lhs)`.
      #  - We guard that rhs is identical to the compile-time sample
      #  - In general, for any two Class instances A, B, `A < B` does not change at runtime.
      #    Class#superclass is stable.

      sample_rhs = jit.peek_at_stack(0)
      sample_lhs = jit.peek_at_stack(1)

      # We are not allowing module here because the module hierarchy can change at runtime.
      if C.RB_TYPE_P(sample_rhs, C::RUBY_T_CLASS)
        return false
      end
      sample_is_a = C.obj_is_kind_of(sample_lhs, sample_rhs)

      side_exit = side_exit(jit, ctx)
      asm.comment('Kernel#is_a?')
      asm.mov(:rax, to_value(sample_rhs))
      asm.cmp(ctx.stack_opnd(0), :rax)
      asm.jne(counted_exit(side_exit, :send_is_a_class_mismatch))

      ctx.stack_pop(2)

      if sample_is_a
        stack_ret = ctx.stack_push(Type::True)
        asm.mov(stack_ret, Qtrue)
      else
        stack_ret = ctx.stack_push(Type::False)
        asm.mov(stack_ret, Qfalse)
      end
      return true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_kernel_instance_of(jit, ctx, asm, argc, known_recv_class)
      if argc != 1
        return false
      end

      # If this is a super call we might not know the class
      if known_recv_class.nil?
        return false
      end

      # Important note: The output code will simply `return true/false`.
      # Correctness follows from:
      #  - `known_recv_class` implies there is a guard scheduled before here
      #    for a particular `CLASS_OF(lhs)`.
      #  - We guard that rhs is identical to the compile-time sample
      #  - For a particular `CLASS_OF(lhs)`, `rb_obj_class(lhs)` does not change.
      #    (because for any singleton class `s`, `s.superclass.equal?(s.attached_object.class)`)

      sample_rhs = jit.peek_at_stack(0)
      sample_lhs = jit.peek_at_stack(1)

      # Filters out cases where the C implementation raises
      unless C.RB_TYPE_P(sample_rhs, C::RUBY_T_CLASS) || C.RB_TYPE_P(sample_rhs, C::RUBY_T_MODULE)
        return false
      end

      # We need to grab the class here to deal with singleton classes.
      # Instance of grabs the "real class" of the object rather than the
      # singleton class.
      sample_lhs_real_class = C.rb_obj_class(sample_lhs)

      sample_instance_of = (sample_lhs_real_class == sample_rhs)

      side_exit = side_exit(jit, ctx)
      asm.comment('Kernel#instance_of?')
      asm.mov(:rax, to_value(sample_rhs))
      asm.cmp(ctx.stack_opnd(0), :rax)
      asm.jne(counted_exit(side_exit, :send_instance_of_class_mismatch))

      ctx.stack_pop(2)

      if sample_instance_of
        stack_ret = ctx.stack_push(Type::True)
        asm.mov(stack_ret, Qtrue)
      else
        stack_ret = ctx.stack_push(Type::False)
        asm.mov(stack_ret, Qfalse)
      end
      return true;
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_obj_not(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 0
      recv_type = ctx.get_opnd_type(StackOpnd[0])

      case recv_type.known_truthy
      in false
        asm.comment('rb_obj_not(nil_or_false)')
        ctx.stack_pop(1)
        out_opnd = ctx.stack_push(Type::True)
        asm.mov(out_opnd, Qtrue)
      in true
        # Note: recv_type != Type::Nil && recv_type != Type::False.
        asm.comment('rb_obj_not(truthy)')
        ctx.stack_pop(1)
        out_opnd = ctx.stack_push(Type::False)
        asm.mov(out_opnd, Qfalse)
      in nil
        asm.comment('rb_obj_not')

        recv = ctx.stack_pop
        # This `test` sets ZF only for Qnil and Qfalse, which let cmovz set.
        asm.test(recv, ~Qnil)
        asm.mov(:rax, Qfalse)
        asm.mov(:rcx, Qtrue)
        asm.cmovz(:rax, :rcx)

        stack_ret = ctx.stack_push(Type::UnknownImm)
        asm.mov(stack_ret, :rax)
      end
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_obj_equal(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      asm.comment('equal?')
      obj1 = ctx.stack_pop(1)
      obj2 = ctx.stack_pop(1)

      asm.mov(:rax, obj1)
      asm.mov(:rcx, obj2)
      asm.cmp(:rax, :rcx)
      asm.mov(:rax, Qfalse)
      asm.mov(:rcx, Qtrue)
      asm.cmove(:rax, :rcx)

      stack_ret = ctx.stack_push(Type::UnknownImm)
      asm.mov(stack_ret, :rax)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_obj_not_equal(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      jit_equality_specialized(jit, ctx, asm, false)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_mod_eqq(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1

      asm.comment('Module#===')
      # By being here, we know that the receiver is a T_MODULE or a T_CLASS, because Module#=== can
      # only live on these objects. With that, we can call rb_obj_is_kind_of() without
      # jit_prepare_routine_call() or a control frame push because it can't raise, allocate, or call
      # Ruby methods with these inputs.
      # Note the difference in approach from Kernel#is_a? because we don't get a free guard for the
      # right hand side.
      lhs = ctx.stack_opnd(1) # the module
      rhs = ctx.stack_opnd(0)
      asm.mov(C_ARGS[0], rhs);
      asm.mov(C_ARGS[1], lhs);
      asm.call(C.rb_obj_is_kind_of)

      # Return the result
      ctx.stack_pop(2)
      stack_ret = ctx.stack_push(Type::UnknownImm)
      asm.mov(stack_ret, C_RET)

      return true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_int_equal(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      return false unless two_fixnums_on_stack?(jit)

      guard_two_fixnums(jit, ctx, asm)

      # Compare the arguments
      asm.comment('rb_int_equal')
      arg1 = ctx.stack_pop(1)
      arg0 = ctx.stack_pop(1)
      asm.mov(:rax, arg1)
      asm.cmp(arg0, :rax)
      asm.mov(:rax, Qfalse)
      asm.mov(:rcx, Qtrue)
      asm.cmove(:rax, :rcx)

      stack_ret = ctx.stack_push(Type::UnknownImm)
      asm.mov(stack_ret, :rax)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_int_mul(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      return false unless two_fixnums_on_stack?(jit)

      guard_two_fixnums(jit, ctx, asm)

      asm.comment('rb_int_mul')
      y_opnd = ctx.stack_pop
      x_opnd = ctx.stack_pop
      asm.mov(C_ARGS[0], x_opnd)
      asm.mov(C_ARGS[1], y_opnd)
      asm.call(C.rb_fix_mul_fix)

      ret_opnd = ctx.stack_push(Type::Unknown)
      asm.mov(ret_opnd, C_RET)
      true
    end

    def jit_rb_int_div(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      return false unless two_fixnums_on_stack?(jit)

      guard_two_fixnums(jit, ctx, asm)

      asm.comment('rb_int_div')
      y_opnd = ctx.stack_pop
      x_opnd = ctx.stack_pop
      asm.mov(:rax, y_opnd)
      asm.cmp(:rax, C.to_value(0))
      asm.je(side_exit(jit, ctx))

      asm.mov(C_ARGS[0], x_opnd)
      asm.mov(C_ARGS[1], :rax)
      asm.call(C.rb_fix_div_fix)

      ret_opnd = ctx.stack_push(Type::Unknown)
      asm.mov(ret_opnd, C_RET)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_int_aref(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      return false unless two_fixnums_on_stack?(jit)

      guard_two_fixnums(jit, ctx, asm)

      asm.comment('rb_int_aref')
      y_opnd = ctx.stack_pop
      x_opnd = ctx.stack_pop

      asm.mov(C_ARGS[0], x_opnd)
      asm.mov(C_ARGS[1], y_opnd)
      asm.call(C.rb_fix_aref)

      ret_opnd = ctx.stack_push(Type::UnknownImm)
      asm.mov(ret_opnd, C_RET)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_str_empty_p(jit, ctx, asm, argc, known_recv_class)
      recv_opnd = ctx.stack_pop(1)
      out_opnd = ctx.stack_push(Type::UnknownImm)

      asm.comment('get string length')
      asm.mov(:rax, recv_opnd)
      str_len_opnd = [:rax, C.RString.offsetof(:len)]

      asm.cmp(str_len_opnd, 0)
      asm.mov(:rax, Qfalse)
      asm.mov(:rcx, Qtrue)
      asm.cmove(:rax, :rcx)
      asm.mov(out_opnd, :rax)

      return true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_str_to_s(jit, ctx, asm, argc, known_recv_class)
      return false if argc != 0
      if known_recv_class == String
        asm.comment('to_s on plain string')
        # The method returns the receiver, which is already on the stack.
        # No stack movement.
        return true
      end
      false
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_str_bytesize(jit, ctx, asm, argc, known_recv_class)
      asm.comment('String#bytesize')

      recv = ctx.stack_pop(1)
      asm.mov(C_ARGS[0], recv)
      asm.call(C.rb_str_bytesize)

      out_opnd = ctx.stack_push(Type::Fixnum)
      asm.mov(out_opnd, C_RET)

      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_str_concat(jit, ctx, asm, argc, known_recv_class)
      # The << operator can accept integer codepoints for characters
      # as the argument. We only specially optimise string arguments.
      # If the peeked-at compile time argument is something other than
      # a string, assume it won't be a string later either.
      comptime_arg = jit.peek_at_stack(0)
      unless C.RB_TYPE_P(comptime_arg, C::RUBY_T_STRING)
        return false
      end

      # Guard that the concat argument is a string
      asm.mov(:rax, ctx.stack_opnd(0))
      guard_object_is_string(jit, ctx, asm, :rax, :rcx, StackOpnd[0])

      # Guard buffers from GC since rb_str_buf_append may allocate. During the VM lock on GC,
      # other Ractors may trigger global invalidation, so we need ctx.clear_local_types.
      # PC is used on errors like Encoding::CompatibilityError raised by rb_str_buf_append.
      jit_prepare_routine_call(jit, ctx, asm)

      concat_arg = ctx.stack_pop(1)
      recv = ctx.stack_pop(1)

      # Test if string encodings differ. If different, use rb_str_append. If the same,
      # use rb_yjit_str_simple_append, which calls rb_str_cat.
      asm.comment('<< on strings')

      # Take receiver's object flags XOR arg's flags. If any
      # string-encoding flags are different between the two,
      # the encodings don't match.
      recv_reg = :rax
      asm.mov(recv_reg, recv)
      concat_arg_reg = :rcx
      asm.mov(concat_arg_reg, concat_arg)
      asm.mov(recv_reg, [recv_reg, C.RBasic.offsetof(:flags)])
      asm.mov(concat_arg_reg, [concat_arg_reg, C.RBasic.offsetof(:flags)])
      asm.xor(recv_reg, concat_arg_reg)
      asm.test(recv_reg, C::RUBY_ENCODING_MASK)

      # Push once, use the resulting operand in both branches below.
      stack_ret = ctx.stack_push(Type::TString)

      enc_mismatch = asm.new_label('enc_mismatch')
      asm.jnz(enc_mismatch)

      # If encodings match, call the simple append function and jump to return
      asm.mov(C_ARGS[0], recv)
      asm.mov(C_ARGS[1], concat_arg)
      asm.call(C.rjit_str_simple_append)
      ret_label = asm.new_label('func_return')
      asm.mov(stack_ret, C_RET)
      asm.jmp(ret_label)

      # If encodings are different, use a slower encoding-aware concatenate
      asm.write_label(enc_mismatch)
      asm.mov(C_ARGS[0], recv)
      asm.mov(C_ARGS[1], concat_arg)
      asm.call(C.rb_str_buf_append)
      asm.mov(stack_ret, C_RET)
      # Drop through to return

      asm.write_label(ret_label)

      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_str_uplus(jit, ctx, asm, argc, _known_recv_class)
      if argc != 0
        return false
      end

      # We allocate when we dup the string
      jit_prepare_routine_call(jit, ctx, asm)

      asm.comment('Unary plus on string')
      asm.mov(:rax, ctx.stack_pop(1)) # recv_opnd
      asm.mov(:rcx, [:rax, C.RBasic.offsetof(:flags)]) # flags_opnd
      asm.test(:rcx, C::RUBY_FL_FREEZE)

      ret_label = asm.new_label('stack_ret')

      # String#+@ can only exist on T_STRING
      stack_ret = ctx.stack_push(Type::TString)

      # If the string isn't frozen, we just return it.
      asm.mov(stack_ret, :rax) # recv_opnd
      asm.jz(ret_label)

      # Str is frozen - duplicate it
      asm.mov(C_ARGS[0], :rax) # recv_opnd
      asm.call(C.rb_str_dup)
      asm.mov(stack_ret, C_RET)

      asm.write_label(ret_label)

      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_str_getbyte(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      asm.comment('rb_str_getbyte')

      index_opnd = ctx.stack_pop
      str_opnd = ctx.stack_pop
      asm.mov(C_ARGS[0], str_opnd)
      asm.mov(C_ARGS[1], index_opnd)
      asm.call(C.rb_str_getbyte)

      ret_opnd = ctx.stack_push(Type::Fixnum)
      asm.mov(ret_opnd, C_RET)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_ary_empty_p(jit, ctx, asm, argc, _known_recv_class)
      array_reg = :rax
      asm.mov(array_reg, ctx.stack_pop(1))
      jit_array_len(asm, array_reg, :rcx)

      asm.test(:rcx, :rcx)
      asm.mov(:rax, Qfalse)
      asm.mov(:rcx, Qtrue)
      asm.cmovz(:rax, :rcx)

      out_opnd = ctx.stack_push(Type::UnknownImm)
      asm.mov(out_opnd, :rax)

      return true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_ary_push(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 1
      asm.comment('rb_ary_push')

      jit_prepare_routine_call(jit, ctx, asm)

      item_opnd = ctx.stack_pop
      ary_opnd = ctx.stack_pop
      asm.mov(C_ARGS[0], ary_opnd)
      asm.mov(C_ARGS[1], item_opnd)
      asm.call(C.rb_ary_push)

      ret_opnd = ctx.stack_push(Type::TArray)
      asm.mov(ret_opnd, C_RET)
      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_obj_respond_to(jit, ctx, asm, argc, known_recv_class)
      # respond_to(:sym) or respond_to(:sym, true)
      if argc != 1 && argc != 2
        return false
      end

      if known_recv_class.nil?
        return false
      end

      recv_class = known_recv_class

      # Get the method_id from compile time. We will later add a guard against it.
      mid_sym = jit.peek_at_stack(argc - 1)
      unless static_symbol?(mid_sym)
        return false
      end
      mid = C.rb_sym2id(mid_sym)

      # This represents the value of the "include_all" argument and whether it's known
      allow_priv = if argc == 1
        # Default is false
        false
      else
        # Get value from type information (may or may not be known)
        ctx.get_opnd_type(StackOpnd[0]).known_truthy
      end

      target_cme = C.rb_callable_method_entry_or_negative(recv_class, mid)

      # Should never be null, as in that case we will be returned a "negative CME"
      assert_equal(false, target_cme.nil?)

      cme_def_type = C.UNDEFINED_METHOD_ENTRY_P(target_cme) ? C::VM_METHOD_TYPE_UNDEF : target_cme.def.type

      if cme_def_type == C::VM_METHOD_TYPE_REFINED
        return false
      end

      visibility = if cme_def_type == C::VM_METHOD_TYPE_UNDEF
        C::METHOD_VISI_UNDEF
      else
        C.METHOD_ENTRY_VISI(target_cme)
      end

      result =
        case [visibility, allow_priv]
        in C::METHOD_VISI_UNDEF, _ then Qfalse # No method => false
        in C::METHOD_VISI_PUBLIC, _ then Qtrue # Public method => true regardless of include_all
        in _, true then Qtrue # include_all => always true
        else return false # not public and include_all not known, can't compile
        end

      if result != Qtrue
        # Only if respond_to_missing? hasn't been overridden
        # In the future, we might want to jit the call to respond_to_missing?
        unless Invariants.assume_method_basic_definition(jit, recv_class, C.idRespond_to_missing)
          return false
        end
      end

      # Invalidate this block if method lookup changes for the method being queried. This works
      # both for the case where a method does or does not exist, as for the latter we asked for a
      # "negative CME" earlier.
      Invariants.assume_method_lookup_stable(jit, target_cme)

      # Generate a side exit
      side_exit = side_exit(jit, ctx)

      if argc == 2
        # pop include_all argument (we only use its type info)
        ctx.stack_pop(1)
      end

      sym_opnd = ctx.stack_pop(1)
      _recv_opnd = ctx.stack_pop(1)

      # This is necessary because we have no guarantee that sym_opnd is a constant
      asm.comment('guard known mid')
      asm.mov(:rax, to_value(mid_sym))
      asm.cmp(sym_opnd, :rax)
      asm.jne(side_exit)

      putobject(jit, ctx, asm, val: result)

      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_rb_f_block_given_p(jit, ctx, asm, argc, _known_recv_class)
      asm.comment('block_given?')

      # Same as rb_vm_frame_block_handler
      jit_get_lep(jit, asm, reg: :rax)
      asm.mov(:rax, [:rax, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL]) # block_handler

      ctx.stack_pop(1)
      out_opnd = ctx.stack_push(Type::UnknownImm)

      # Return `block_handler != VM_BLOCK_HANDLER_NONE`
      asm.cmp(:rax, C::VM_BLOCK_HANDLER_NONE)
      asm.mov(:rax, Qfalse)
      asm.mov(:rcx, Qtrue)
      asm.cmovne(:rax, :rcx) # block_given
      asm.mov(out_opnd, :rax)

      true
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_thread_s_current(jit, ctx, asm, argc, _known_recv_class)
      return false if argc != 0
      asm.comment('Thread.current')
      ctx.stack_pop(1)

      # ec->thread_ptr
      asm.mov(:rax, [EC, C.rb_execution_context_t.offsetof(:thread_ptr)])

      # thread->self
      asm.mov(:rax, [:rax, C.rb_thread_struct.offsetof(:self)])

      stack_ret = ctx.stack_push(Type::UnknownHeap)
      asm.mov(stack_ret, :rax)
      true
    end

    #
    # Helpers
    #

    def register_cfunc_codegen_funcs
      # Specialization for C methods. See register_cfunc_method for details.
      register_cfunc_method(BasicObject, :!, :jit_rb_obj_not)

      register_cfunc_method(NilClass, :nil?, :jit_rb_true)
      register_cfunc_method(Kernel, :nil?, :jit_rb_false)
      register_cfunc_method(Kernel, :is_a?, :jit_rb_kernel_is_a)
      register_cfunc_method(Kernel, :kind_of?, :jit_rb_kernel_is_a)
      register_cfunc_method(Kernel, :instance_of?, :jit_rb_kernel_instance_of)

      register_cfunc_method(BasicObject, :==, :jit_rb_obj_equal)
      register_cfunc_method(BasicObject, :equal?, :jit_rb_obj_equal)
      register_cfunc_method(BasicObject, :!=, :jit_rb_obj_not_equal)
      register_cfunc_method(Kernel, :eql?, :jit_rb_obj_equal)
      register_cfunc_method(Module, :==, :jit_rb_obj_equal)
      register_cfunc_method(Module, :===, :jit_rb_mod_eqq)
      register_cfunc_method(Symbol, :==, :jit_rb_obj_equal)
      register_cfunc_method(Symbol, :===, :jit_rb_obj_equal)
      register_cfunc_method(Integer, :==, :jit_rb_int_equal)
      register_cfunc_method(Integer, :===, :jit_rb_int_equal)

      # rb_str_to_s() methods in string.c
      register_cfunc_method(String, :empty?, :jit_rb_str_empty_p)
      register_cfunc_method(String, :to_s, :jit_rb_str_to_s)
      register_cfunc_method(String, :to_str, :jit_rb_str_to_s)
      register_cfunc_method(String, :bytesize, :jit_rb_str_bytesize)
      register_cfunc_method(String, :<<, :jit_rb_str_concat)
      register_cfunc_method(String, :+@, :jit_rb_str_uplus)

      # rb_ary_empty_p() method in array.c
      register_cfunc_method(Array, :empty?, :jit_rb_ary_empty_p)

      register_cfunc_method(Kernel, :respond_to?, :jit_obj_respond_to)
      register_cfunc_method(Kernel, :block_given?, :jit_rb_f_block_given_p)

      # Thread.current
      register_cfunc_method(C.rb_singleton_class(Thread), :current, :jit_thread_s_current)

      #---
      register_cfunc_method(Array, :<<, :jit_rb_ary_push)
      register_cfunc_method(Integer, :*, :jit_rb_int_mul)
      register_cfunc_method(Integer, :/, :jit_rb_int_div)
      register_cfunc_method(Integer, :[], :jit_rb_int_aref)
      register_cfunc_method(String, :getbyte, :jit_rb_str_getbyte)
    end

    def register_cfunc_method(klass, mid_sym, func)
      mid = C.rb_intern(mid_sym.to_s)
      me = C.rb_method_entry_at(klass, mid)

      assert_equal(false, me.nil?)

      # Only cfuncs are supported
      method_serial = me.def.method_serial

      @cfunc_codegen_table[method_serial] = method(func)
    end

    def lookup_cfunc_codegen(cme_def)
      @cfunc_codegen_table[cme_def.method_serial]
    end

    def stack_swap(_jit, ctx, asm, offset0, offset1)
      stack0_mem = ctx.stack_opnd(offset0)
      stack1_mem = ctx.stack_opnd(offset1)

      mapping0 = ctx.get_opnd_mapping(StackOpnd[offset0])
      mapping1 = ctx.get_opnd_mapping(StackOpnd[offset1])

      asm.mov(:rax, stack0_mem)
      asm.mov(:rcx, stack1_mem)
      asm.mov(stack0_mem, :rcx)
      asm.mov(stack1_mem, :rax)

      ctx.set_opnd_mapping(StackOpnd[offset0], mapping1)
      ctx.set_opnd_mapping(StackOpnd[offset1], mapping0)
    end

    def jit_getlocal_generic(jit, ctx, asm, idx:, level:)
      # Load environment pointer EP (level 0) from CFP
      ep_reg = :rax
      jit_get_ep(asm, level, reg: ep_reg)

      # Load the local from the block
      # val = *(vm_get_ep(GET_EP(), level) - idx);
      asm.mov(:rax, [ep_reg, -idx * C.VALUE.size])

      # Write the local at SP
      stack_top = if level == 0
        local_idx = ep_offset_to_local_idx(jit.iseq, idx)
        ctx.stack_push_local(local_idx)
      else
        ctx.stack_push(Type::Unknown)
      end

      asm.mov(stack_top, :rax)
      KeepCompiling
    end

    def jit_setlocal_generic(jit, ctx, asm, idx:, level:)
      value_type = ctx.get_opnd_type(StackOpnd[0])

      # Load environment pointer EP at level
      ep_reg = :rax
      jit_get_ep(asm, level, reg: ep_reg)

      # Write barriers may be required when VM_ENV_FLAG_WB_REQUIRED is set, however write barriers
      # only affect heap objects being written. If we know an immediate value is being written we
      # can skip this check.
      unless value_type.imm?
        # flags & VM_ENV_FLAG_WB_REQUIRED
        flags_opnd = [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS]
        asm.test(flags_opnd, C::VM_ENV_FLAG_WB_REQUIRED)

        # if (flags & VM_ENV_FLAG_WB_REQUIRED) != 0
        asm.jnz(side_exit(jit, ctx))
      end

      if level == 0
        local_idx = ep_offset_to_local_idx(jit.iseq, idx)
        ctx.set_local_type(local_idx, value_type)
      end

      # Pop the value to write from the stack
      stack_top = ctx.stack_pop(1)

      # Write the value at the environment pointer
      asm.mov(:rcx, stack_top)
      asm.mov([ep_reg, -(C.VALUE.size * idx)], :rcx)

      KeepCompiling
    end

    # Compute the index of a local variable from its slot index
    def ep_offset_to_local_idx(iseq, ep_offset)
      # Layout illustration
      # This is an array of VALUE
      #                                           | VM_ENV_DATA_SIZE |
      #                                           v                  v
      # low addr <+-------+-------+-------+-------+------------------+
      #           |local 0|local 1|  ...  |local n|       ....       |
      #           +-------+-------+-------+-------+------------------+
      #           ^       ^                       ^                  ^
      #           +-------+---local_table_size----+         cfp->ep--+
      #                   |                                          |
      #                   +------------------ep_offset---------------+
      #
      # See usages of local_var_name() from iseq.c for similar calculation.

      # Equivalent of iseq->body->local_table_size
      local_table_size = iseq.body.local_table_size
      op = ep_offset - C::VM_ENV_DATA_SIZE
      local_idx = local_table_size - op - 1
      assert_equal(true, local_idx >= 0 && local_idx < local_table_size)
      local_idx
    end

    # Compute the index of a local variable from its slot index
    def slot_to_local_idx(iseq, slot_idx)
      # Layout illustration
      # This is an array of VALUE
      #                                           | VM_ENV_DATA_SIZE |
      #                                           v                  v
      # low addr <+-------+-------+-------+-------+------------------+
      #           |local 0|local 1|  ...  |local n|       ....       |
      #           +-------+-------+-------+-------+------------------+
      #           ^       ^                       ^                  ^
      #           +-------+---local_table_size----+         cfp->ep--+
      #                   |                                          |
      #                   +------------------slot_idx----------------+
      #
      # See usages of local_var_name() from iseq.c for similar calculation.

      local_table_size = iseq.body.local_table_size
      op = slot_idx - C::VM_ENV_DATA_SIZE
      local_table_size - op - 1
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def guard_object_is_heap(jit, ctx, asm, object, object_opnd, counter = nil)
      object_type = ctx.get_opnd_type(object_opnd)
      if object_type.heap?
        return
      end

      side_exit = side_exit(jit, ctx)
      side_exit = counted_exit(side_exit, counter) if counter

      asm.comment('guard object is heap')
      # Test that the object is not an immediate
      asm.test(object, C::RUBY_IMMEDIATE_MASK)
      asm.jnz(side_exit)

      # Test that the object is not false
      asm.cmp(object, Qfalse)
      asm.je(side_exit)

      if object_type.diff(Type::UnknownHeap) != TypeDiff::Incompatible
        ctx.upgrade_opnd_type(object_opnd, Type::UnknownHeap)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def guard_object_is_array(jit, ctx, asm, object_reg, flags_reg, object_opnd, counter = nil)
      object_type = ctx.get_opnd_type(object_opnd)
      if object_type.array?
        return
      end

      guard_object_is_heap(jit, ctx, asm, object_reg, object_opnd, counter)

      side_exit = side_exit(jit, ctx)
      side_exit = counted_exit(side_exit, counter) if counter

      asm.comment('guard object is array')
      # Pull out the type mask
      asm.mov(flags_reg, [object_reg, C.RBasic.offsetof(:flags)])
      asm.and(flags_reg, C::RUBY_T_MASK)

      # Compare the result with T_ARRAY
      asm.cmp(flags_reg, C::RUBY_T_ARRAY)
      asm.jne(side_exit)

      if object_type.diff(Type::TArray) != TypeDiff::Incompatible
        ctx.upgrade_opnd_type(object_opnd, Type::TArray)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def guard_object_is_string(jit, ctx, asm, object_reg, flags_reg, object_opnd, counter = nil)
      object_type = ctx.get_opnd_type(object_opnd)
      if object_type.string?
        return
      end

      guard_object_is_heap(jit, ctx, asm, object_reg, object_opnd, counter)

      side_exit = side_exit(jit, ctx)
      side_exit = counted_exit(side_exit, counter) if counter

      asm.comment('guard object is string')
      # Pull out the type mask
      asm.mov(flags_reg, [object_reg, C.RBasic.offsetof(:flags)])
      asm.and(flags_reg, C::RUBY_T_MASK)

      # Compare the result with T_STRING
      asm.cmp(flags_reg, C::RUBY_T_STRING)
      asm.jne(side_exit)

      if object_type.diff(Type::TString) != TypeDiff::Incompatible
        ctx.upgrade_opnd_type(object_opnd, Type::TString)
      end
    end

    # clobbers object_reg
    def guard_object_is_not_ruby2_keyword_hash(asm, object_reg, flags_reg, side_exit)
      asm.comment('guard object is not ruby2 keyword hash')

      not_ruby2_keyword = asm.new_label('not_ruby2_keyword')
      asm.test(object_reg, C::RUBY_IMMEDIATE_MASK)
      asm.jnz(not_ruby2_keyword)

      asm.cmp(object_reg, Qfalse)
      asm.je(not_ruby2_keyword)

      asm.mov(flags_reg, [object_reg, C.RBasic.offsetof(:flags)])
      type_reg = object_reg
      asm.mov(type_reg, flags_reg)
      asm.and(type_reg, C::RUBY_T_MASK)

      asm.cmp(type_reg, C::RUBY_T_HASH)
      asm.jne(not_ruby2_keyword)

      asm.test(flags_reg, C::RHASH_PASS_AS_KEYWORDS)
      asm.jnz(side_exit)

      asm.write_label(not_ruby2_keyword)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_chain_guard(opcode, jit, ctx, asm, side_exit, limit: 20)
      opcode => :je | :jne | :jnz | :jz

      if ctx.chain_depth < limit
        deeper = ctx.dup
        deeper.chain_depth += 1

        branch_stub = BranchStub.new(
          iseq: jit.iseq,
          shape: Default,
          target0: BranchTarget.new(ctx: deeper, pc: jit.pc),
        )
        branch_stub.target0.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(deeper, ocb_asm, branch_stub, true)
          @ocb.write(ocb_asm)
        end
        branch_stub.compile = compile_jit_chain_guard(branch_stub, opcode:)
        branch_stub.compile.call(asm)
      else
        asm.public_send(opcode, side_exit)
      end
    end

    def compile_jit_chain_guard(branch_stub, opcode:) # Proc escapes arguments in memory
      proc do |branch_asm|
        # Not using `asm.comment` here since it's usually put before cmp/test before this.
        branch_asm.stub(branch_stub) do
          case branch_stub.shape
          in Default
            branch_asm.public_send(opcode, branch_stub.target0.address)
          end
        end
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_guard_known_klass(jit, ctx, asm, known_klass, obj_opnd, insn_opnd, comptime_obj, side_exit, limit: 10)
      # Only memory operand is supported for now
      assert_equal(true, obj_opnd.is_a?(Array))

      known_klass = C.to_value(known_klass)
      val_type = ctx.get_opnd_type(insn_opnd)
      if val_type.known_class == known_klass
        # We already know from type information that this is a match
        return
      end

      # Touching this as Ruby could crash for FrozenCore
      if known_klass == C.rb_cNilClass
        assert(!val_type.heap?)
        assert(val_type.unknown?)

        asm.comment('guard object is nil')
        asm.cmp(obj_opnd, Qnil)
        jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)

        ctx.upgrade_opnd_type(insn_opnd, Type::Nil)
      elsif known_klass == C.rb_cTrueClass
        assert(!val_type.heap?)
        assert(val_type.unknown?)

        asm.comment('guard object is true')
        asm.cmp(obj_opnd, Qtrue)
        jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)

        ctx.upgrade_opnd_type(insn_opnd, Type::True)
      elsif known_klass == C.rb_cFalseClass
        assert(!val_type.heap?)
        assert(val_type.unknown?)

        asm.comment('guard object is false')
        asm.cmp(obj_opnd, Qfalse)
        jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)

        ctx.upgrade_opnd_type(insn_opnd, Type::False)
      elsif known_klass == C.rb_cInteger && fixnum?(comptime_obj)
        # We will guard fixnum and bignum as though they were separate classes
        # BIGNUM can be handled by the general else case below
        assert(val_type.unknown?)

        asm.comment('guard object is fixnum')
        asm.test(obj_opnd, C::RUBY_FIXNUM_FLAG)
        jit_chain_guard(:jz, jit, ctx, asm, side_exit, limit:)

        ctx.upgrade_opnd_type(insn_opnd, Type::Fixnum)
      elsif known_klass == C.rb_cSymbol && static_symbol?(comptime_obj)
        assert(!val_type.heap?)
        # We will guard STATIC vs DYNAMIC as though they were separate classes
        # DYNAMIC symbols can be handled by the general else case below
        if val_type != Type::ImmSymbol || !val_type.imm?
          assert(val_type.unknown?)

          asm.comment('guard object is static symbol')
          assert_equal(8, C::RUBY_SPECIAL_SHIFT)
          asm.cmp(BytePtr[*obj_opnd], C::RUBY_SYMBOL_FLAG)
          jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)

          ctx.upgrade_opnd_type(insn_opnd, Type::ImmSymbol)
        end
      elsif known_klass == C.rb_cFloat && flonum?(comptime_obj)
        assert(!val_type.heap?)
        if val_type != Type::Flonum || !val_type.imm?
          assert(val_type.unknown?)

          # We will guard flonum vs heap float as though they were separate classes
          asm.comment('guard object is flonum')
          asm.mov(:rax, obj_opnd)
          asm.and(:rax, C::RUBY_FLONUM_MASK)
          asm.cmp(:rax, C::RUBY_FLONUM_FLAG)
          jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)

          ctx.upgrade_opnd_type(insn_opnd, Type::Flonum)
        end
      elsif C.RCLASS_SINGLETON_P(known_klass) && comptime_obj == C.rb_class_attached_object(known_klass)
        # Singleton classes are attached to one specific object, so we can
        # avoid one memory access (and potentially the is_heap check) by
        # looking for the expected object directly.
        # Note that in case the sample instance has a singleton class that
        # doesn't attach to the sample instance, it means the sample instance
        # has an empty singleton class that hasn't been materialized yet. In
        # this case, comparing against the sample instance doesn't guarantee
        # that its singleton class is empty, so we can't avoid the memory
        # access. As an example, `Object.new.singleton_class` is an object in
        # this situation.
        asm.comment('guard known object with singleton class')
        asm.mov(:rax, to_value(comptime_obj))
        asm.cmp(obj_opnd, :rax)
        jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)
      elsif val_type == Type::CString && known_klass == C.rb_cString
        # guard elided because the context says we've already checked
        assert_equal(C.to_value(C.rb_class_of(comptime_obj)), C.rb_cString)
      else
        assert(!val_type.imm?)

        # Load memory to a register
        asm.mov(:rax, obj_opnd)
        obj_opnd = :rax

        # Check that the receiver is a heap object
        # Note: if we get here, the class doesn't have immediate instances.
        unless val_type.heap?
          asm.comment('guard not immediate')
          asm.test(obj_opnd, C::RUBY_IMMEDIATE_MASK)
          jit_chain_guard(:jnz, jit, ctx, asm, side_exit, limit:)
          asm.cmp(obj_opnd, Qfalse)
          jit_chain_guard(:je, jit, ctx, asm, side_exit, limit:)
        end

        # Bail if receiver class is different from known_klass
        klass_opnd = [obj_opnd, C.RBasic.offsetof(:klass)]
        asm.comment("guard known class #{known_klass}")
        asm.mov(:rcx, known_klass)
        asm.cmp(klass_opnd, :rcx)
        jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)

        if known_klass == C.rb_cString
          # Upgrading to Type::CString here is incorrect.
          # The guard we put only checks RBASIC_CLASS(obj),
          # which adding a singleton class can change. We
          # additionally need to know the string is frozen
          # to claim Type::CString.
          ctx.upgrade_opnd_type(insn_opnd, Type::TString)
        elsif known_klass == C.rb_cArray
          ctx.upgrade_opnd_type(insn_opnd, Type::TArray)
        end
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    def two_fixnums_on_stack?(jit)
      comptime_recv = jit.peek_at_stack(1)
      comptime_arg = jit.peek_at_stack(0)
      return fixnum?(comptime_recv) && fixnum?(comptime_arg)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def guard_two_fixnums(jit, ctx, asm)
      # Get stack operands without popping them
      arg1 = ctx.stack_opnd(0)
      arg0 = ctx.stack_opnd(1)

      # Get the stack operand types
      arg1_type = ctx.get_opnd_type(StackOpnd[0])
      arg0_type = ctx.get_opnd_type(StackOpnd[1])

      if arg0_type.heap? || arg1_type.heap?
        asm.comment('arg is heap object')
        asm.jmp(side_exit(jit, ctx))
        return
      end

      if arg0_type != Type::Fixnum && arg0_type.specific?
        asm.comment('arg0 not fixnum')
        asm.jmp(side_exit(jit, ctx))
        return
      end

      if arg1_type != Type::Fixnum && arg1_type.specific?
        asm.comment('arg1 not fixnum')
        asm.jmp(side_exit(jit, ctx))
        return
      end

      assert(!arg0_type.heap?)
      assert(!arg1_type.heap?)
      assert(arg0_type == Type::Fixnum || arg0_type.unknown?)
      assert(arg1_type == Type::Fixnum || arg1_type.unknown?)

      # If not fixnums at run-time, fall back
      if arg0_type != Type::Fixnum
        asm.comment('guard arg0 fixnum')
        asm.test(arg0, C::RUBY_FIXNUM_FLAG)
        jit_chain_guard(:jz, jit, ctx, asm, side_exit(jit, ctx))
      end
      if arg1_type != Type::Fixnum
        asm.comment('guard arg1 fixnum')
        asm.test(arg1, C::RUBY_FIXNUM_FLAG)
        jit_chain_guard(:jz, jit, ctx, asm, side_exit(jit, ctx))
      end

      # Set stack types in context
      ctx.upgrade_opnd_type(StackOpnd[0], Type::Fixnum)
      ctx.upgrade_opnd_type(StackOpnd[1], Type::Fixnum)
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_fixnum_cmp(jit, ctx, asm, opcode:, bop:)
      opcode => :cmovl | :cmovle | :cmovg | :cmovge

      unless jit.at_current_insn?
        defer_compilation(jit, ctx, asm)
        return EndBlock
      end

      comptime_recv = jit.peek_at_stack(1)
      comptime_obj  = jit.peek_at_stack(0)

      if fixnum?(comptime_recv) && fixnum?(comptime_obj)
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, bop)
          return CantCompile
        end

        # Check that both operands are fixnums
        guard_two_fixnums(jit, ctx, asm)

        obj_opnd  = ctx.stack_pop
        recv_opnd = ctx.stack_pop

        asm.mov(:rax, obj_opnd)
        asm.cmp(recv_opnd, :rax)
        asm.mov(:rax, Qfalse)
        asm.mov(:rcx, Qtrue)
        asm.public_send(opcode, :rax, :rcx)

        dst_opnd = ctx.stack_push(Type::UnknownImm)
        asm.mov(dst_opnd, :rax)

        KeepCompiling
      else
        opt_send_without_block(jit, ctx, asm)
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_equality_specialized(jit, ctx, asm, gen_eq)
      # Create a side-exit to fall back to the interpreter
      side_exit = side_exit(jit, ctx)

      a_opnd = ctx.stack_opnd(1)
      b_opnd = ctx.stack_opnd(0)

      comptime_a = jit.peek_at_stack(1)
      comptime_b = jit.peek_at_stack(0)

      if two_fixnums_on_stack?(jit)
        unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_EQ)
          return false
        end

        guard_two_fixnums(jit, ctx, asm)

        asm.comment('check fixnum equality')
        asm.mov(:rax, a_opnd)
        asm.mov(:rcx, b_opnd)
        asm.cmp(:rax, :rcx)
        asm.mov(:rax, gen_eq ? Qfalse : Qtrue)
        asm.mov(:rcx, gen_eq ? Qtrue  : Qfalse)
        asm.cmove(:rax, :rcx)

        # Push the output on the stack
        ctx.stack_pop(2)
        dst = ctx.stack_push(Type::UnknownImm)
        asm.mov(dst, :rax)

        true
      elsif C.rb_class_of(comptime_a) == String && C.rb_class_of(comptime_b) == String
        unless Invariants.assume_bop_not_redefined(jit, C::STRING_REDEFINED_OP_FLAG, C::BOP_EQ)
          # if overridden, emit the generic version
          return false
        end

        # Guard that a is a String
        jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_a), a_opnd, StackOpnd[1], comptime_a, side_exit)

        equal_label = asm.new_label(:equal)
        ret_label = asm.new_label(:ret)

        # If they are equal by identity, return true
        asm.mov(:rax, a_opnd)
        asm.mov(:rcx, b_opnd)
        asm.cmp(:rax, :rcx)
        asm.je(equal_label)

        # Otherwise guard that b is a T_STRING (from type info) or String (from runtime guard)
        btype = ctx.get_opnd_type(StackOpnd[0])
        unless btype.string?
          # Note: any T_STRING is valid here, but we check for a ::String for simplicity
          # To pass a mutable static variable (rb_cString) requires an unsafe block
          jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_b), b_opnd, StackOpnd[0], comptime_b, side_exit)
        end

        asm.comment('call rb_str_eql_internal')
        asm.mov(C_ARGS[0], a_opnd)
        asm.mov(C_ARGS[1], b_opnd)
        asm.call(gen_eq ? C.rb_str_eql_internal : C.rjit_str_neq_internal)

        # Push the output on the stack
        ctx.stack_pop(2)
        dst = ctx.stack_push(Type::UnknownImm)
        asm.mov(dst, C_RET)
        asm.jmp(ret_label)

        asm.write_label(equal_label)
        asm.mov(dst, gen_eq ? Qtrue : Qfalse)

        asm.write_label(ret_label)

        true
      else
        false
      end
    end

    # NOTE: This clobbers :rax
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_prepare_routine_call(jit, ctx, asm)
      jit.record_boundary_patch_point = true
      jit_save_pc(jit, asm)
      jit_save_sp(ctx, asm)

      # In case the routine calls Ruby methods, it can set local variables
      # through Kernel#binding and other means.
      ctx.clear_local_types
    end

    # NOTE: This clobbers :rax
    # @param jit [RubyVM::RJIT::JITState]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_save_pc(jit, asm, comment: 'save PC to CFP')
      next_pc = jit.pc + jit.insn.len * C.VALUE.size # Use the next one for backtrace and side exits
      asm.comment(comment)
      asm.mov(:rax, next_pc)
      asm.mov([CFP, C.rb_control_frame_t.offsetof(:pc)], :rax)
    end

    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_save_sp(ctx, asm)
      if ctx.sp_offset != 0
        asm.comment('save SP to CFP')
        asm.lea(SP, ctx.sp_opnd)
        asm.mov([CFP, C.rb_control_frame_t.offsetof(:sp)], SP)
        ctx.sp_offset = 0
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jump_to_next_insn(jit, ctx, asm)
      reset_depth = ctx.dup
      reset_depth.chain_depth = 0

      next_pc = jit.pc + jit.insn.len * C.VALUE.size

      # We are at the end of the current instruction. Record the boundary.
      if jit.record_boundary_patch_point
        exit_pos = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_side_exit(next_pc, ctx, ocb_asm)
          @ocb.write(ocb_asm)
        end
        Invariants.record_global_inval_patch(asm, exit_pos)
        jit.record_boundary_patch_point = false
      end

      jit_direct_jump(jit.iseq, next_pc, reset_depth, asm, comment: 'jump_to_next_insn')
    end

    # rb_vm_check_ints
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_check_ints(jit, ctx, asm)
      asm.comment('RUBY_VM_CHECK_INTS(ec)')
      asm.mov(:eax, DwordPtr[EC, C.rb_execution_context_t.offsetof(:interrupt_flag)])
      asm.test(:eax, :eax)
      asm.jnz(side_exit(jit, ctx))
    end

    # See get_lvar_level in compile.c
    def get_lvar_level(iseq)
      level = 0
      while iseq.to_i != iseq.body.local_iseq.to_i
        level += 1
        iseq = iseq.body.parent_iseq
      end
      return level
    end

    # GET_LEP
    # @param jit [RubyVM::RJIT::JITState]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_get_lep(jit, asm, reg:)
      level = get_lvar_level(jit.iseq)
      jit_get_ep(asm, level, reg:)
    end

    # vm_get_ep
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_get_ep(asm, level, reg:)
      asm.mov(reg, [CFP, C.rb_control_frame_t.offsetof(:ep)])
      level.times do
        # GET_PREV_EP: ep[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03
        asm.mov(reg, [reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL])
        asm.and(reg, ~0x03)
      end
    end

    # vm_getivar
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_getivar(jit, ctx, asm, comptime_obj, ivar_id, obj_opnd, obj_yarv_opnd)
      side_exit = side_exit(jit, ctx)
      starting_ctx = ctx.dup # copy for jit_chain_guard

      # Guard not special const
      if C::SPECIAL_CONST_P(comptime_obj)
        asm.incr_counter(:getivar_special_const)
        return CantCompile
      end

      case C::BUILTIN_TYPE(comptime_obj)
      when C::T_OBJECT
        # This is the only supported case for now (ROBJECT_IVPTR)
      else
        # General case. Call rb_ivar_get().
        # VALUE rb_ivar_get(VALUE obj, ID id)
        asm.comment('call rb_ivar_get()')
        asm.mov(C_ARGS[0], obj_opnd ? obj_opnd : [CFP, C.rb_control_frame_t.offsetof(:self)])
        asm.mov(C_ARGS[1], ivar_id)

        # The function could raise exceptions.
        jit_prepare_routine_call(jit, ctx, asm) # clobbers obj_opnd and :rax

        asm.call(C.rb_ivar_get)

        if obj_opnd # attr_reader
          ctx.stack_pop
        end

        # Push the ivar on the stack
        out_opnd = ctx.stack_push(Type::Unknown)
        asm.mov(out_opnd, C_RET)

        # Jump to next instruction. This allows guard chains to share the same successor.
        jump_to_next_insn(jit, ctx, asm)
        return EndBlock
      end

      asm.mov(:rax, obj_opnd ? obj_opnd : [CFP, C.rb_control_frame_t.offsetof(:self)])
      guard_object_is_heap(jit, ctx, asm, :rax, obj_yarv_opnd, :getivar_not_heap)

      shape_id = C.rb_shape_get_shape_id(comptime_obj)
      if shape_id == C::OBJ_TOO_COMPLEX_SHAPE_ID
        asm.incr_counter(:getivar_too_complex)
        return CantCompile
      end

      asm.comment('guard shape')
      asm.cmp(DwordPtr[:rax, C.rb_shape_id_offset], shape_id)
      jit_chain_guard(:jne, jit, starting_ctx, asm, counted_exit(side_exit, :getivar_megamorphic))

      if obj_opnd
        ctx.stack_pop # pop receiver for attr_reader
      end

      index = C.rb_shape_get_iv_index(shape_id, ivar_id)
      # If there is no IVAR index, then the ivar was undefined
      # when we entered the compiler.  That means we can just return
      # nil for this shape + iv name
      if index.nil?
        stack_opnd = ctx.stack_push(Type::Nil)
        val_opnd = Qnil
      else
        asm.comment('ROBJECT_IVPTR')
        if C::FL_TEST_RAW(comptime_obj, C::ROBJECT_EMBED)
          # Access embedded array
          asm.mov(:rax, [:rax, C.RObject.offsetof(:as, :ary) + (index * C.VALUE.size)])
        else
          # Pull out an ivar table on heap
          asm.mov(:rax, [:rax, C.RObject.offsetof(:as, :heap, :ivptr)])
          # Read the table
          asm.mov(:rax, [:rax, index * C.VALUE.size])
        end
        stack_opnd = ctx.stack_push(Type::Unknown)
        val_opnd = :rax
      end
      asm.mov(stack_opnd, val_opnd)

      # Let guard chains share the same successor
      jump_to_next_insn(jit, ctx, asm)
      EndBlock
    end

    def jit_write_iv(asm, comptime_receiver, recv_reg, temp_reg, ivar_index, set_value, needs_extension)
      # Compile time self is embedded and the ivar index lands within the object
      embed_test_result = C::FL_TEST_RAW(comptime_receiver, C::ROBJECT_EMBED) && !needs_extension

      if embed_test_result
        # Find the IV offset
        offs = C.RObject.offsetof(:as, :ary) + ivar_index * C.VALUE.size

        # Write the IV
        asm.comment('write IV')
        asm.mov(temp_reg, set_value)
        asm.mov([recv_reg, offs], temp_reg)
      else
        # Compile time value is *not* embedded.

        # Get a pointer to the extended table
        asm.mov(recv_reg, [recv_reg, C.RObject.offsetof(:as, :heap, :ivptr)])

        # Write the ivar in to the extended table
        asm.comment("write IV");
        asm.mov(temp_reg, set_value)
        asm.mov([recv_reg, C.VALUE.size * ivar_index], temp_reg)
      end
    end

    # vm_caller_setup_arg_block: Handle VM_CALL_ARGS_BLOCKARG cases.
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def guard_block_arg(jit, ctx, asm, calling)
      if calling.flags & C::VM_CALL_ARGS_BLOCKARG != 0
        block_arg_type = ctx.get_opnd_type(StackOpnd[0])
        case block_arg_type
        in Type::Nil
          calling.block_handler = C::VM_BLOCK_HANDLER_NONE
        in Type::BlockParamProxy
          calling.block_handler = C.rb_block_param_proxy
        else
          asm.incr_counter(:send_block_arg)
          return CantCompile
        end
      end
    end

    # vm_search_method
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_search_method(jit, ctx, asm, mid, calling)
      assert_equal(true, jit.at_current_insn?)

      # Generate a side exit
      side_exit = side_exit(jit, ctx)

      # kw_splat is not supported yet
      if calling.flags & C::VM_CALL_KW_SPLAT != 0
        asm.incr_counter(:send_kw_splat)
        return CantCompile
      end

      # Get a compile-time receiver and its class
      recv_idx = calling.argc + (calling.flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
      recv_idx += calling.send_shift
      comptime_recv = jit.peek_at_stack(recv_idx)
      comptime_recv_klass = C.rb_class_of(comptime_recv)

      # Guard the receiver class (part of vm_search_method_fastpath)
      recv_opnd = ctx.stack_opnd(recv_idx)
      megamorphic_exit = counted_exit(side_exit, :send_klass_megamorphic)
      jit_guard_known_klass(jit, ctx, asm, comptime_recv_klass, recv_opnd, StackOpnd[recv_idx], comptime_recv, megamorphic_exit)

      # Do method lookup (vm_cc_cme(cc) != NULL)
      cme = C.rb_callable_method_entry(comptime_recv_klass, mid)
      if cme.nil?
        asm.incr_counter(:send_missing_cme)
        return CantCompile # We don't support vm_call_method_name
      end

      # Invalidate on redefinition (part of vm_search_method_fastpath)
      Invariants.assume_method_lookup_stable(jit, cme)

      return cme, comptime_recv_klass
    end

    # vm_call_general
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_general(jit, ctx, asm, mid, calling, cme, known_recv_class)
      jit_call_method(jit, ctx, asm, mid, calling, cme, known_recv_class)
    end

    # vm_call_method
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    # @param send_shift [Integer] The number of shifts needed for VM_CALL_OPT_SEND
    def jit_call_method(jit, ctx, asm, mid, calling, cme, known_recv_class)
      # The main check of vm_call_method before vm_call_method_each_type
      case C::METHOD_ENTRY_VISI(cme)
      in C::METHOD_VISI_PUBLIC
        # You can always call public methods
      in C::METHOD_VISI_PRIVATE
        # Allow only callsites without a receiver
        if calling.flags & C::VM_CALL_FCALL == 0
          asm.incr_counter(:send_private)
          return CantCompile
        end
      in C::METHOD_VISI_PROTECTED
        # If the method call is an FCALL, it is always valid
        if calling.flags & C::VM_CALL_FCALL == 0
          # otherwise we need an ancestry check to ensure the receiver is valid to be called as protected
          jit_protected_callee_ancestry_guard(asm, cme, side_exit(jit, ctx))
        end
      end

      # Get a compile-time receiver
      recv_idx = calling.argc + (calling.flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
      recv_idx += calling.send_shift
      comptime_recv = jit.peek_at_stack(recv_idx)
      recv_opnd = ctx.stack_opnd(recv_idx)

      jit_call_method_each_type(jit, ctx, asm, calling, cme, comptime_recv, recv_opnd, known_recv_class)
    end

    # Generate ancestry guard for protected callee.
    # Calls to protected callees only go through when self.is_a?(klass_that_defines_the_callee).
    def jit_protected_callee_ancestry_guard(asm, cme, side_exit)
      # See vm_call_method().
      def_class = cme.defined_class
      # Note: PC isn't written to current control frame as rb_is_kind_of() shouldn't raise.
      # VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);

      asm.mov(C_ARGS[0], [CFP, C.rb_control_frame_t.offsetof(:self)])
      asm.mov(C_ARGS[1], to_value(def_class))
      asm.call(C.rb_obj_is_kind_of)
      asm.test(C_RET, C_RET)
      asm.jz(counted_exit(side_exit, :send_protected_check_failed))
    end

    # vm_call_method_each_type
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_method_each_type(jit, ctx, asm, calling, cme, comptime_recv, recv_opnd, known_recv_class)
      case cme.def.type
      in C::VM_METHOD_TYPE_ISEQ
        iseq = def_iseq_ptr(cme.def)
        jit_call_iseq(jit, ctx, asm, cme, calling, iseq)
      in C::VM_METHOD_TYPE_NOTIMPLEMENTED
        asm.incr_counter(:send_notimplemented)
        return CantCompile
      in C::VM_METHOD_TYPE_CFUNC
        jit_call_cfunc(jit, ctx, asm, cme, calling, known_recv_class:)
      in C::VM_METHOD_TYPE_ATTRSET
        jit_call_attrset(jit, ctx, asm, cme, calling, comptime_recv, recv_opnd)
      in C::VM_METHOD_TYPE_IVAR
        jit_call_ivar(jit, ctx, asm, cme, calling, comptime_recv, recv_opnd)
      in C::VM_METHOD_TYPE_MISSING
        asm.incr_counter(:send_missing)
        return CantCompile
      in C::VM_METHOD_TYPE_BMETHOD
        jit_call_bmethod(jit, ctx, asm, calling, cme, comptime_recv, recv_opnd, known_recv_class)
      in C::VM_METHOD_TYPE_ALIAS
        jit_call_alias(jit, ctx, asm, calling, cme, comptime_recv, recv_opnd, known_recv_class)
      in C::VM_METHOD_TYPE_OPTIMIZED
        jit_call_optimized(jit, ctx, asm, cme, calling, known_recv_class)
      in C::VM_METHOD_TYPE_UNDEF
        asm.incr_counter(:send_undef)
        return CantCompile
      in C::VM_METHOD_TYPE_ZSUPER
        asm.incr_counter(:send_zsuper)
        return CantCompile
      in C::VM_METHOD_TYPE_REFINED
        asm.incr_counter(:send_refined)
        return CantCompile
      end
    end

    # vm_call_iseq_setup
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_iseq(jit, ctx, asm, cme, calling, iseq, frame_type: nil, prev_ep: nil)
      argc = calling.argc
      flags = calling.flags
      send_shift = calling.send_shift

      # When you have keyword arguments, there is an extra object that gets
      # placed on the stack the represents a bitmap of the keywords that were not
      # specified at the call site. We need to keep track of the fact that this
      # value is present on the stack in order to properly set up the callee's
      # stack pointer.
      doing_kw_call = iseq.body.param.flags.has_kw
      supplying_kws = flags & C::VM_CALL_KWARG != 0

      if flags & C::VM_CALL_TAILCALL != 0
        # We can't handle tailcalls
        asm.incr_counter(:send_tailcall)
        return CantCompile
      end

      # No support for callees with these parameters yet as they require allocation
      # or complex handling.
      if iseq.body.param.flags.has_post
        asm.incr_counter(:send_iseq_has_opt)
        return CantCompile
      end
      if iseq.body.param.flags.has_kwrest
        asm.incr_counter(:send_iseq_has_kwrest)
        return CantCompile
      end

      # In order to handle backwards compatibility between ruby 3 and 2
      # ruby2_keywords was introduced. It is called only on methods
      # with splat and changes they way they handle them.
      # We are just going to not compile these.
      # https://www.rubydoc.info/stdlib/core/Proc:ruby2_keywords
      if iseq.body.param.flags.ruby2_keywords && flags & C::VM_CALL_ARGS_SPLAT != 0
        asm.incr_counter(:send_iseq_ruby2_keywords)
        return CantCompile
      end

      iseq_has_rest = iseq.body.param.flags.has_rest
      if iseq_has_rest && calling.block_handler == :captured
        asm.incr_counter(:send_iseq_has_rest_and_captured)
        return CantCompile
      end

      if iseq_has_rest && iseq.body.param.flags.has_kw && supplying_kws
        asm.incr_counter(:send_iseq_has_rest_and_kw_supplied)
        return CantCompile
      end

      # If we have keyword arguments being passed to a callee that only takes
      # positionals, then we need to allocate a hash. For now we're going to
      # call that too complex and bail.
      if supplying_kws && !iseq.body.param.flags.has_kw
        asm.incr_counter(:send_iseq_has_no_kw)
        return CantCompile
      end

      # If we have a method accepting no kwargs (**nil), exit if we have passed
      # it any kwargs.
      if supplying_kws && iseq.body.param.flags.accepts_no_kwarg
        asm.incr_counter(:send_iseq_accepts_no_kwarg)
        return CantCompile
      end

      # For computing number of locals to set up for the callee
      num_params = iseq.body.param.size

      # Block parameter handling. This mirrors setup_parameters_complex().
      if iseq.body.param.flags.has_block
        if iseq.body.local_iseq.to_i == iseq.to_i
          num_params -= 1
        else
          # In this case (param.flags.has_block && local_iseq != iseq),
          # the block argument is setup as a local variable and requires
          # materialization (allocation). Bail.
          asm.incr_counter(:send_iseq_materialized_block)
          return CantCompile
        end
      end

      if flags & C::VM_CALL_ARGS_SPLAT != 0 && flags & C::VM_CALL_ZSUPER != 0
        # zsuper methods are super calls without any arguments.
        # They are also marked as splat, but don't actually have an array
        # they pull arguments from, instead we need to change to call
        # a different method with the current stack.
        asm.incr_counter(:send_iseq_zsuper)
        return CantCompile
      end

      start_pc_offset = 0
      required_num = iseq.body.param.lead_num

      # This struct represents the metadata about the caller-specified
      # keyword arguments.
      kw_arg = calling.kwarg
      kw_arg_num = if kw_arg.nil?
        0
      else
        kw_arg.keyword_len
      end

      # Arity handling and optional parameter setup
      opts_filled = argc - required_num - kw_arg_num
      opt_num = iseq.body.param.opt_num
      opts_missing = opt_num - opts_filled

      if doing_kw_call && flags & C::VM_CALL_ARGS_SPLAT != 0
        asm.incr_counter(:send_iseq_splat_with_kw)
        return CantCompile
      end

      if flags & C::VM_CALL_KW_SPLAT != 0
        asm.incr_counter(:send_iseq_kw_splat)
        return CantCompile
      end

      if iseq_has_rest && opt_num != 0
        asm.incr_counter(:send_iseq_has_rest_and_optional)
        return CantCompile
      end

      if opts_filled < 0 && flags & C::VM_CALL_ARGS_SPLAT == 0
        # Too few arguments and no splat to make up for it
        asm.incr_counter(:send_iseq_arity_error)
        return CantCompile
      end

      if opts_filled > opt_num && !iseq_has_rest
        # Too many arguments and no place to put them (i.e. rest arg)
        asm.incr_counter(:send_iseq_arity_error)
        return CantCompile
      end

      block_arg = flags & C::VM_CALL_ARGS_BLOCKARG != 0

      # Guard block_arg_type
      if guard_block_arg(jit, ctx, asm, calling) == CantCompile
        return CantCompile
      end

      # If we have unfilled optional arguments and keyword arguments then we
      # would need to adjust the arguments location to account for that.
      # For now we aren't handling this case.
      if doing_kw_call && opts_missing > 0
        asm.incr_counter(:send_iseq_missing_optional_kw)
        return CantCompile
      end

      # We will handle splat case later
      if opt_num > 0 && flags & C::VM_CALL_ARGS_SPLAT == 0
        num_params -= opts_missing
        start_pc_offset = iseq.body.param.opt_table[opts_filled]
      end

      if doing_kw_call
        # Here we're calling a method with keyword arguments and specifying
        # keyword arguments at this call site.

        # This struct represents the metadata about the callee-specified
        # keyword parameters.
        keyword = iseq.body.param.keyword
        keyword_num = keyword.num
        keyword_required_num = keyword.required_num

        required_kwargs_filled = 0

        if keyword_num > 30
          # We have so many keywords that (1 << num) encoded as a FIXNUM
          # (which shifts it left one more) no longer fits inside a 32-bit
          # immediate.
          asm.incr_counter(:send_iseq_too_many_kwargs)
          return CantCompile
        end

        # Check that the kwargs being passed are valid
        if supplying_kws
          # This is the list of keyword arguments that the callee specified
          # in its initial declaration.
          # SAFETY: see compile.c for sizing of this slice.
          callee_kwargs = keyword_num.times.map { |i| keyword.table[i] }

          # Here we're going to build up a list of the IDs that correspond to
          # the caller-specified keyword arguments. If they're not in the
          # same order as the order specified in the callee declaration, then
          # we're going to need to generate some code to swap values around
          # on the stack.
          caller_kwargs = []
          kw_arg.keyword_len.times do |kwarg_idx|
            sym = C.to_ruby(kw_arg[:keywords][kwarg_idx])
            caller_kwargs << C.rb_sym2id(sym)
          end

          # First, we're going to be sure that the names of every
          # caller-specified keyword argument correspond to a name in the
          # list of callee-specified keyword parameters.
          caller_kwargs.each do |caller_kwarg|
            search_result = callee_kwargs.map.with_index.find { |kwarg, _| kwarg == caller_kwarg }

            case search_result
            in nil
              # If the keyword was never found, then we know we have a
              # mismatch in the names of the keyword arguments, so we need to
              # bail.
              asm.incr_counter(:send_iseq_kwargs_mismatch)
              return CantCompile
            in _, callee_idx if callee_idx < keyword_required_num
              # Keep a count to ensure all required kwargs are specified
              required_kwargs_filled += 1
            else
            end
          end
        end
        assert_equal(true, required_kwargs_filled <= keyword_required_num)
        if required_kwargs_filled != keyword_required_num
          asm.incr_counter(:send_iseq_kwargs_mismatch)
          return CantCompile
        end
      end

      # Check if we need the arg0 splat handling of vm_callee_setup_block_arg
      arg_setup_block = (calling.block_handler == :captured) # arg_setup_type: arg_setup_block (invokeblock)
      block_arg0_splat = arg_setup_block && argc == 1 &&
        (iseq.body.param.flags.has_lead || opt_num > 1) &&
        !iseq.body.param.flags.ambiguous_param0
      if block_arg0_splat
        # If block_arg0_splat, we still need side exits after splat, but
        # doing push_splat_args here disallows it. So bail out.
        if flags & C::VM_CALL_ARGS_SPLAT != 0 && !iseq_has_rest
          asm.incr_counter(:invokeblock_iseq_arg0_args_splat)
          return CantCompile
        end
        # The block_arg0_splat implementation is for the rb_simple_iseq_p case,
        # but doing_kw_call means it's not a simple ISEQ.
        if doing_kw_call
          asm.incr_counter(:invokeblock_iseq_arg0_has_kw)
          return CantCompile
        end
        # The block_arg0_splat implementation cannot deal with optional parameters.
        # This is a setup_parameters_complex() situation and interacts with the
        # starting position of the callee.
        if opt_num > 1
          asm.incr_counter(:invokeblock_iseq_arg0_optional)
          return CantCompile
        end
      end
      if flags & C::VM_CALL_ARGS_SPLAT != 0 && !iseq_has_rest
        array = jit.peek_at_stack(block_arg ? 1 : 0)
        splat_array_length = if array.nil?
          0
        else
          array.length
        end

        if opt_num == 0 && required_num != splat_array_length + argc - 1
          asm.incr_counter(:send_iseq_splat_arity_error)
          return CantCompile
        end
      end

      # Don't compile forwardable iseqs
      if iseq.body.param.flags.forwardable
        return CantCompile
      end

      # We will not have CantCompile from here.

      if block_arg
        ctx.stack_pop(1)
      end

      if calling.block_handler == C::VM_BLOCK_HANDLER_NONE && iseq.body.builtin_attrs & C::BUILTIN_ATTR_LEAF != 0
        if jit_leaf_builtin_func(jit, ctx, asm, flags, iseq)
          return KeepCompiling
        end
      end

      # Number of locals that are not parameters
      num_locals = iseq.body.local_table_size - num_params

      # Stack overflow check
      # Note that vm_push_frame checks it against a decremented cfp, hence the multiply by 2.
      # #define CHECK_VM_STACK_OVERFLOW0(cfp, sp, margin)
      asm.comment('stack overflow check')
      locals_offs = C.VALUE.size * (num_locals + iseq.body.stack_max) + 2 * C.rb_control_frame_t.size
      asm.lea(:rax, ctx.sp_opnd(locals_offs))
      asm.cmp(CFP, :rax)
      asm.jbe(counted_exit(side_exit(jit, ctx), :send_stackoverflow))

      # push_splat_args does stack manipulation so we can no longer side exit
      if splat_array_length
        remaining_opt = (opt_num + required_num) - (splat_array_length + (argc - 1))

        if opt_num > 0
          # We are going to jump to the correct offset based on how many optional
          # params are remaining.
          offset = opt_num - remaining_opt
          start_pc_offset = iseq.body.param.opt_table[offset]
        end
        # We are going to assume that the splat fills
        # all the remaining arguments. In the generated code
        # we test if this is true and if not side exit.
        argc = argc - 1 + splat_array_length + remaining_opt
        push_splat_args(splat_array_length, jit, ctx, asm)

        remaining_opt.times do
          # We need to push nil for the optional arguments
          stack_ret = ctx.stack_push(Type::Unknown)
          asm.mov(stack_ret, Qnil)
        end
      end

      # This is a .send call and we need to adjust the stack
      if flags & C::VM_CALL_OPT_SEND != 0
        handle_opt_send_shift_stack(asm, argc, ctx, send_shift:)
      end

      if iseq_has_rest
        # We are going to allocate so setting pc and sp.
        jit_save_pc(jit, asm) # clobbers rax
        jit_save_sp(ctx, asm)

        if flags & C::VM_CALL_ARGS_SPLAT != 0
          non_rest_arg_count = argc - 1
          # We start by dupping the array because someone else might have
          # a reference to it.
          array = ctx.stack_pop(1)
          asm.mov(C_ARGS[0], array)
          asm.call(C.rb_ary_dup)
          array = C_RET
          if non_rest_arg_count > required_num
            # If we have more arguments than required, we need to prepend
            # the items from the stack onto the array.
            diff = (non_rest_arg_count - required_num)

            # diff is >0 so no need to worry about null pointer
            asm.comment('load pointer to array elements')
            offset_magnitude = C.VALUE.size * diff
            values_opnd = ctx.sp_opnd(-offset_magnitude)
            values_ptr = :rcx
            asm.lea(values_ptr, values_opnd)

            asm.comment('prepend stack values to rest array')
            asm.mov(C_ARGS[0], diff)
            asm.mov(C_ARGS[1], values_ptr)
            asm.mov(C_ARGS[2], array)
            asm.call(C.rb_ary_unshift_m)
            ctx.stack_pop(diff)

            stack_ret = ctx.stack_push(Type::TArray)
            asm.mov(stack_ret, C_RET)
            # We now should have the required arguments
            # and an array of all the rest arguments
            argc = required_num + 1
          elsif non_rest_arg_count < required_num
            # If we have fewer arguments than required, we need to take some
            # from the array and move them to the stack.
            diff = (required_num - non_rest_arg_count)
            # This moves the arguments onto the stack. But it doesn't modify the array.
            move_rest_args_to_stack(array, diff, jit, ctx, asm)

            # We will now slice the array to give us a new array of the correct size
            asm.mov(C_ARGS[0], array)
            asm.mov(C_ARGS[1], diff)
            asm.call(C.rjit_rb_ary_subseq_length)
            stack_ret = ctx.stack_push(Type::TArray)
            asm.mov(stack_ret, C_RET)

            # We now should have the required arguments
            # and an array of all the rest arguments
            argc = required_num + 1
          else
            # The arguments are equal so we can just push to the stack
            assert_equal(non_rest_arg_count, required_num)
            stack_ret = ctx.stack_push(Type::TArray)
            asm.mov(stack_ret, array)
          end
        else
          assert_equal(true, argc >= required_num)
          n = (argc - required_num)
          argc = required_num + 1
          # If n is 0, then elts is never going to be read, so we can just pass null
          if n == 0
            values_ptr = 0
          else
            asm.comment('load pointer to array elements')
            offset_magnitude = C.VALUE.size * n
            values_opnd = ctx.sp_opnd(-offset_magnitude)
            values_ptr = :rcx
            asm.lea(values_ptr, values_opnd)
          end

          asm.mov(C_ARGS[0], EC)
          asm.mov(C_ARGS[1], n)
          asm.mov(C_ARGS[2], values_ptr)
          asm.call(C.rb_ec_ary_new_from_values)

          ctx.stack_pop(n)
          stack_ret = ctx.stack_push(Type::TArray)
          asm.mov(stack_ret, C_RET)
        end
      end

      if doing_kw_call
        # Here we're calling a method with keyword arguments and specifying
        # keyword arguments at this call site.

        # Number of positional arguments the callee expects before the first
        # keyword argument
        args_before_kw = required_num + opt_num

        # This struct represents the metadata about the caller-specified
        # keyword arguments.
        ci_kwarg = calling.kwarg
        caller_keyword_len = if ci_kwarg.nil?
          0
        else
          ci_kwarg.keyword_len
        end

        # This struct represents the metadata about the callee-specified
        # keyword parameters.
        keyword = iseq.body.param.keyword

        asm.comment('keyword args')

        # This is the list of keyword arguments that the callee specified
        # in its initial declaration.
        callee_kwargs = keyword.table
        total_kwargs = keyword.num

        # Here we're going to build up a list of the IDs that correspond to
        # the caller-specified keyword arguments. If they're not in the
        # same order as the order specified in the callee declaration, then
        # we're going to need to generate some code to swap values around
        # on the stack.
        caller_kwargs = []

        caller_keyword_len.times do |kwarg_idx|
          sym = C.to_ruby(ci_kwarg[:keywords][kwarg_idx])
          caller_kwargs << C.rb_sym2id(sym)
        end
        kwarg_idx = caller_keyword_len

        unspecified_bits = 0

        keyword_required_num = keyword.required_num
        (keyword_required_num...total_kwargs).each do |callee_idx|
          already_passed = false
          callee_kwarg = callee_kwargs[callee_idx]

          caller_keyword_len.times do |caller_idx|
            if caller_kwargs[caller_idx] == callee_kwarg
              already_passed = true
              break
            end
          end

          unless already_passed
            # Reserve space on the stack for each default value we'll be
            # filling in (which is done in the next loop). Also increments
            # argc so that the callee's SP is recorded correctly.
            argc += 1
            default_arg = ctx.stack_push(Type::Unknown)

            # callee_idx - keyword->required_num is used in a couple of places below.
            req_num = keyword.required_num
            extra_args = callee_idx - req_num

            # VALUE default_value = keyword->default_values[callee_idx - keyword->required_num];
            default_value = keyword.default_values[extra_args]

            if default_value == Qundef
              # Qundef means that this value is not constant and must be
              # recalculated at runtime, so we record it in unspecified_bits
              # (Qnil is then used as a placeholder instead of Qundef).
              unspecified_bits |= 0x01 << extra_args
              default_value = Qnil
            end

            asm.mov(:rax, default_value)
            asm.mov(default_arg, :rax)

            caller_kwargs[kwarg_idx] = callee_kwarg
            kwarg_idx += 1
          end
        end

        assert_equal(kwarg_idx, total_kwargs)

        # Next, we're going to loop through every keyword that was
        # specified by the caller and make sure that it's in the correct
        # place. If it's not we're going to swap it around with another one.
        total_kwargs.times do |kwarg_idx|
          callee_kwarg = callee_kwargs[kwarg_idx]

          # If the argument is already in the right order, then we don't
          # need to generate any code since the expected value is already
          # in the right place on the stack.
          if callee_kwarg == caller_kwargs[kwarg_idx]
            next
          end

          # In this case the argument is not in the right place, so we
          # need to find its position where it _should_ be and swap with
          # that location.
          ((kwarg_idx + 1)...total_kwargs).each do |swap_idx|
            if callee_kwarg == caller_kwargs[swap_idx]
              # First we're going to generate the code that is going
              # to perform the actual swapping at runtime.
              offset0 = argc - 1 - swap_idx - args_before_kw
              offset1 = argc - 1 - kwarg_idx - args_before_kw
              stack_swap(jit, ctx, asm, offset0, offset1)

              # Next we're going to do some bookkeeping on our end so
              # that we know the order that the arguments are
              # actually in now.
              caller_kwargs[kwarg_idx], caller_kwargs[swap_idx] =
                caller_kwargs[swap_idx], caller_kwargs[kwarg_idx]

              break
            end
          end
        end

        # Keyword arguments cause a special extra local variable to be
        # pushed onto the stack that represents the parameters that weren't
        # explicitly given a value and have a non-constant default.
        asm.mov(ctx.stack_opnd(-1), C.to_value(unspecified_bits))
      end

      # Same as vm_callee_setup_block_arg_arg0_check and vm_callee_setup_block_arg_arg0_splat
      # on vm_callee_setup_block_arg for arg_setup_block. This is done after CALLER_SETUP_ARG
      # and CALLER_REMOVE_EMPTY_KW_SPLAT, so this implementation is put here. This may need
      # side exits, so you still need to allow side exits here if block_arg0_splat is true.
      # Note that you can't have side exits after this arg0 splat.
      if block_arg0_splat
        asm.incr_counter(:send_iseq_block_arg0_splat)
        return CantCompile
      end

      # Create a context for the callee
      callee_ctx = Context.new

      # Set the argument types in the callee's context
      argc.times do |arg_idx|
        stack_offs = argc - arg_idx - 1
        arg_type = ctx.get_opnd_type(StackOpnd[stack_offs])
        callee_ctx.set_local_type(arg_idx, arg_type)
      end

      recv_type = if calling.block_handler == :captured
        Type::Unknown # we don't track the type information of captured->self for now
      else
        ctx.get_opnd_type(StackOpnd[argc])
      end
      callee_ctx.upgrade_opnd_type(SelfOpnd, recv_type)

      # Setup the new frame
      frame_type ||= C::VM_FRAME_MAGIC_METHOD | C::VM_ENV_FLAG_LOCAL
      jit_push_frame(
        jit, ctx, asm, cme, flags, argc, frame_type, calling.block_handler,
        iseq:       iseq,
        local_size: num_locals,
        stack_max:  iseq.body.stack_max,
        prev_ep:,
        doing_kw_call:,
      )

      # Directly jump to the entry point of the callee
      pc = (iseq.body.iseq_encoded + start_pc_offset).to_i
      jit_direct_jump(iseq, pc, callee_ctx, asm)

      EndBlock
    end

    def jit_leaf_builtin_func(jit, ctx, asm, flags, iseq)
      builtin_func = builtin_function(iseq)
      if builtin_func.nil?
        return false
      end

      # this is a .send call not currently supported for builtins
      if flags & C::VM_CALL_OPT_SEND != 0
        return false
      end

      builtin_argc = builtin_func.argc
      if builtin_argc + 1 >= C_ARGS.size
        return false
      end

      asm.comment('inlined leaf builtin')

      # The callee may allocate, e.g. Integer#abs on a Bignum.
      # Save SP for GC, save PC for allocation tracing, and prepare
      # for global invalidation after GC's VM lock contention.
      jit_prepare_routine_call(jit, ctx, asm)

      # Call the builtin func (ec, recv, arg1, arg2, ...)
      asm.mov(C_ARGS[0], EC)

      # Copy self and arguments
      (0..builtin_argc).each do |i|
        stack_opnd = ctx.stack_opnd(builtin_argc - i)
        asm.mov(C_ARGS[i + 1], stack_opnd)
      end
      ctx.stack_pop(builtin_argc + 1)
      asm.call(builtin_func.func_ptr)

      # Push the return value
      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)
      return true
    end

    # vm_call_cfunc
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_cfunc(jit, ctx, asm, cme, calling, known_recv_class: nil)
      argc = calling.argc
      flags = calling.flags

      cfunc = cme.def.body.cfunc
      cfunc_argc = cfunc.argc

      # If the function expects a Ruby array of arguments
      if cfunc_argc < 0 && cfunc_argc != -1
        asm.incr_counter(:send_cfunc_ruby_array_varg)
        return CantCompile
      end

      # We aren't handling a vararg cfuncs with splat currently.
      if flags & C::VM_CALL_ARGS_SPLAT != 0 && cfunc_argc == -1
        asm.incr_counter(:send_args_splat_cfunc_var_args)
        return CantCompile
      end

      if flags & C::VM_CALL_ARGS_SPLAT != 0 && flags & C::VM_CALL_ZSUPER != 0
        # zsuper methods are super calls without any arguments.
        # They are also marked as splat, but don't actually have an array
        # they pull arguments from, instead we need to change to call
        # a different method with the current stack.
        asm.incr_counter(:send_args_splat_cfunc_zuper)
        return CantCompile;
      end

      # In order to handle backwards compatibility between ruby 3 and 2
      # ruby2_keywords was introduced. It is called only on methods
      # with splat and changes they way they handle them.
      # We are just going to not compile these.
      # https://docs.ruby-lang.org/en/3.2/Module.html#method-i-ruby2_keywords
      if jit.iseq.body.param.flags.ruby2_keywords && flags & C::VM_CALL_ARGS_SPLAT != 0
        asm.incr_counter(:send_args_splat_cfunc_ruby2_keywords)
        return CantCompile;
      end

      kw_arg = calling.kwarg
      kw_arg_num = if kw_arg.nil?
        0
      else
        kw_arg.keyword_len
      end

      if kw_arg_num != 0 && flags & C::VM_CALL_ARGS_SPLAT != 0
        asm.incr_counter(:send_cfunc_splat_with_kw)
        return CantCompile
      end

      if c_method_tracing_currently_enabled?
        # Don't JIT if tracing c_call or c_return
        asm.incr_counter(:send_cfunc_tracing)
        return CantCompile
      end

      # Delegate to codegen for C methods if we have it.
      if kw_arg.nil? && flags & C::VM_CALL_OPT_SEND == 0 && flags & C::VM_CALL_ARGS_SPLAT == 0 && (cfunc_argc == -1 || argc == cfunc_argc)
        known_cfunc_codegen = lookup_cfunc_codegen(cme.def)
        if known_cfunc_codegen&.call(jit, ctx, asm, argc, known_recv_class)
          # cfunc codegen generated code. Terminate the block so
          # there isn't multiple calls in the same block.
          jump_to_next_insn(jit, ctx, asm)
          return EndBlock
        end
      end

      # Check for interrupts
      jit_check_ints(jit, ctx, asm)

      # Stack overflow check
      # #define CHECK_VM_STACK_OVERFLOW0(cfp, sp, margin)
      # REG_CFP <= REG_SP + 4 * SIZEOF_VALUE + sizeof(rb_control_frame_t)
      asm.comment('stack overflow check')
      asm.lea(:rax, ctx.sp_opnd(C.VALUE.size * 4 + 2 * C.rb_control_frame_t.size))
      asm.cmp(CFP, :rax)
      asm.jbe(counted_exit(side_exit(jit, ctx), :send_stackoverflow))

      # Number of args which will be passed through to the callee
      # This is adjusted by the kwargs being combined into a hash.
      passed_argc = if kw_arg.nil?
        argc
      else
        argc - kw_arg_num + 1
      end

      # If the argument count doesn't match
      if cfunc_argc >= 0 && cfunc_argc != passed_argc && flags & C::VM_CALL_ARGS_SPLAT == 0
        asm.incr_counter(:send_cfunc_argc_mismatch)
        return CantCompile
      end

      # Don't JIT functions that need C stack arguments for now
      if cfunc_argc >= 0 && passed_argc + 1 > C_ARGS.size
        asm.incr_counter(:send_cfunc_toomany_args)
        return CantCompile
      end

      block_arg = flags & C::VM_CALL_ARGS_BLOCKARG != 0

      # Guard block_arg_type
      if guard_block_arg(jit, ctx, asm, calling) == CantCompile
        return CantCompile
      end

      if block_arg
        ctx.stack_pop(1)
      end

      # push_splat_args does stack manipulation so we can no longer side exit
      if flags & C::VM_CALL_ARGS_SPLAT != 0
        assert_equal(true, cfunc_argc >= 0)
        required_args = cfunc_argc - (argc - 1)
        # + 1 because we pass self
        if required_args + 1 >= C_ARGS.size
          asm.incr_counter(:send_cfunc_toomany_args)
          return CantCompile
        end

        # We are going to assume that the splat fills
        # all the remaining arguments. So the number of args
        # should just equal the number of args the cfunc takes.
        # In the generated code we test if this is true
        # and if not side exit.
        argc = cfunc_argc
        passed_argc = argc
        push_splat_args(required_args, jit, ctx, asm)
      end

      # This is a .send call and we need to adjust the stack
      if flags & C::VM_CALL_OPT_SEND != 0
        handle_opt_send_shift_stack(asm, argc, ctx, send_shift: calling.send_shift)
      end

      # Points to the receiver operand on the stack

      # Store incremented PC into current control frame in case callee raises.
      jit_save_pc(jit, asm)

      # Increment the stack pointer by 3 (in the callee)
      # sp += 3

      frame_type = C::VM_FRAME_MAGIC_CFUNC | C::VM_FRAME_FLAG_CFRAME | C::VM_ENV_FLAG_LOCAL
      if kw_arg
        frame_type |= C::VM_FRAME_FLAG_CFRAME_KW
      end

      jit_push_frame(jit, ctx, asm, cme, flags, argc, frame_type, calling.block_handler)

      if kw_arg
        # Build a hash from all kwargs passed
        asm.comment('build_kwhash')
        imemo_ci = calling.ci_addr
        # we assume all callinfos with kwargs are on the GC heap
        assert_equal(true, C.imemo_type_p(imemo_ci, C.imemo_callinfo))
        asm.mov(C_ARGS[0], imemo_ci)
        asm.lea(C_ARGS[1], ctx.sp_opnd(0))
        asm.call(C.rjit_build_kwhash)

        # Replace the stack location at the start of kwargs with the new hash
        stack_opnd = ctx.stack_opnd(argc - passed_argc)
        asm.mov(stack_opnd, C_RET)
      end

      # Copy SP because REG_SP will get overwritten
      sp = :rax
      asm.lea(sp, ctx.sp_opnd(0))

      # Pop the C function arguments from the stack (in the caller)
      ctx.stack_pop(argc + 1)

      # Write interpreter SP into CFP.
      # Needed in case the callee yields to the block.
      jit_save_sp(ctx, asm)

      # Non-variadic method
      case cfunc_argc
      in (0..) # Non-variadic method
        # Copy the arguments from the stack to the C argument registers
        # self is the 0th argument and is at index argc from the stack top
        (0..passed_argc).each do |i|
          asm.mov(C_ARGS[i], [sp, -(argc + 1 - i) * C.VALUE.size])
        end
      in -1 # Variadic method: rb_f_puts(int argc, VALUE *argv, VALUE recv)
        # The method gets a pointer to the first argument
        # rb_f_puts(int argc, VALUE *argv, VALUE recv)
        asm.mov(C_ARGS[0], passed_argc)
        asm.lea(C_ARGS[1], [sp, -argc * C.VALUE.size]) # argv
        asm.mov(C_ARGS[2], [sp, -(argc + 1) * C.VALUE.size]) # recv
      end

      # Call the C function
      # VALUE ret = (cfunc->func)(recv, argv[0], argv[1]);
      # cfunc comes from compile-time cme->def, which we assume to be stable.
      # Invalidation logic is in yjit_method_lookup_change()
      asm.comment('call C function')
      asm.mov(:rax, cfunc.func)
      asm.call(:rax) # TODO: use rel32 if close enough

      # Record code position for TracePoint patching. See full_cfunc_return().
      Invariants.record_global_inval_patch(asm, full_cfunc_return)

      # Push the return value on the Ruby stack
      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)

      # Pop the stack frame (ec->cfp++)
      # Instead of recalculating, we can reuse the previous CFP, which is stored in a callee-saved
      # register
      asm.mov([EC, C.rb_execution_context_t.offsetof(:cfp)], CFP)

      # cfunc calls may corrupt types
      ctx.clear_local_types

      # Note: the return block of jit_call_iseq has ctx->sp_offset == 1
      # which allows for sharing the same successor.

      # Jump (fall through) to the call continuation block
      # We do this to end the current block after the call
      assert_equal(1, ctx.sp_offset)
      jump_to_next_insn(jit, ctx, asm)
      EndBlock
    end

    # vm_call_attrset
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_attrset(jit, ctx, asm, cme, calling, comptime_recv, recv_opnd)
      argc = calling.argc
      flags = calling.flags
      send_shift = calling.send_shift

      if flags & C::VM_CALL_ARGS_SPLAT != 0
        asm.incr_counter(:send_attrset_splat)
        return CantCompile
      end
      if flags & C::VM_CALL_KWARG != 0
        asm.incr_counter(:send_attrset_kwarg)
        return CantCompile
      elsif argc != 1 || !C.RB_TYPE_P(comptime_recv, C::RUBY_T_OBJECT)
        asm.incr_counter(:send_attrset_method)
        return CantCompile
      elsif c_method_tracing_currently_enabled?
        # Can't generate code for firing c_call and c_return events
        # See :attr-tracing:
        asm.incr_counter(:send_c_tracingg)
        return CantCompile
      elsif flags & C::VM_CALL_ARGS_BLOCKARG != 0
        asm.incr_counter(:send_block_arg)
        return CantCompile
      end

      ivar_name = cme.def.body.attr.id

      # This is a .send call and we need to adjust the stack
      if flags & C::VM_CALL_OPT_SEND != 0
        handle_opt_send_shift_stack(asm, argc, ctx, send_shift:)
      end

      # Save the PC and SP because the callee may allocate
      # Note that this modifies REG_SP, which is why we do it first
      jit_prepare_routine_call(jit, ctx, asm)

      # Get the operands from the stack
      val_opnd = ctx.stack_pop(1)
      recv_opnd = ctx.stack_pop(1)

      # Call rb_vm_set_ivar_id with the receiver, the ivar name, and the value
      asm.mov(C_ARGS[0], recv_opnd)
      asm.mov(C_ARGS[1], ivar_name)
      asm.mov(C_ARGS[2], val_opnd)
      asm.call(C.rb_vm_set_ivar_id)

      out_opnd = ctx.stack_push(Type::Unknown)
      asm.mov(out_opnd, C_RET)

      KeepCompiling
    end

    # vm_call_ivar (+ part of vm_call_method_each_type)
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_ivar(jit, ctx, asm, cme, calling, comptime_recv, recv_opnd)
      argc = calling.argc
      flags = calling.flags

      if flags & C::VM_CALL_ARGS_SPLAT != 0
        asm.incr_counter(:send_ivar_splat)
        return CantCompile
      end

      if argc != 0
        asm.incr_counter(:send_arity)
        return CantCompile
      end

      # We don't support handle_opt_send_shift_stack for this yet.
      if flags & C::VM_CALL_OPT_SEND != 0
        asm.incr_counter(:send_ivar_opt_send)
        return CantCompile
      end

      ivar_id = cme.def.body.attr.id

      # Not handling block_handler
      if flags & C::VM_CALL_ARGS_BLOCKARG != 0
        asm.incr_counter(:send_block_arg)
        return CantCompile
      end

      jit_getivar(jit, ctx, asm, comptime_recv, ivar_id, recv_opnd, StackOpnd[0])
    end

    # vm_call_bmethod
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_bmethod(jit, ctx, asm, calling, cme, comptime_recv, recv_opnd, known_recv_class)
      proc_addr = cme.def.body.bmethod.proc

      proc_t = C.rb_yjit_get_proc_ptr(proc_addr)
      proc_block = proc_t.block

      if proc_block.type != C.block_type_iseq
        asm.incr_counter(:send_bmethod_not_iseq)
        return CantCompile
      end

      capture = proc_block.as.captured
      iseq = capture.code.iseq

      # TODO: implement this
      # Optimize for single ractor mode and avoid runtime check for
      # "defined with an un-shareable Proc in a different Ractor"
      # if !assume_single_ractor_mode(jit, ocb)
      #     return CantCompile;
      # end

      # Passing a block to a block needs logic different from passing
      # a block to a method and sometimes requires allocation. Bail for now.
      if calling.block_handler != C::VM_BLOCK_HANDLER_NONE
        asm.incr_counter(:send_bmethod_blockarg)
        return CantCompile
      end

      jit_call_iseq(
        jit, ctx, asm, cme, calling, iseq,
        frame_type: C::VM_FRAME_MAGIC_BLOCK | C::VM_FRAME_FLAG_BMETHOD | C::VM_FRAME_FLAG_LAMBDA,
        prev_ep: capture.ep,
      )
    end

    # vm_call_alias
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_alias(jit, ctx, asm, calling, cme, comptime_recv, recv_opnd, known_recv_class)
      cme = C.rb_aliased_callable_method_entry(cme)
      jit_call_method_each_type(jit, ctx, asm, calling, cme, comptime_recv, recv_opnd, known_recv_class)
    end

    # vm_call_optimized
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_optimized(jit, ctx, asm, cme, calling, known_recv_class)
      if calling.flags & C::VM_CALL_ARGS_BLOCKARG != 0
        # Not working yet
        asm.incr_counter(:send_block_arg)
        return CantCompile
      end

      case cme.def.body.optimized.type
      in C::OPTIMIZED_METHOD_TYPE_SEND
        jit_call_opt_send(jit, ctx, asm, cme, calling, known_recv_class)
      in C::OPTIMIZED_METHOD_TYPE_CALL
        jit_call_opt_call(jit, ctx, asm, cme, calling.flags, calling.argc, calling.block_handler, known_recv_class, send_shift: calling.send_shift)
      in C::OPTIMIZED_METHOD_TYPE_BLOCK_CALL
        asm.incr_counter(:send_optimized_block_call)
        return CantCompile
      in C::OPTIMIZED_METHOD_TYPE_STRUCT_AREF
        jit_call_opt_struct_aref(jit, ctx, asm, cme, calling.flags, calling.argc, calling.block_handler, known_recv_class, send_shift: calling.send_shift)
      in C::OPTIMIZED_METHOD_TYPE_STRUCT_ASET
        asm.incr_counter(:send_optimized_struct_aset)
        return CantCompile
      end
    end

    # vm_call_opt_send
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_opt_send(jit, ctx, asm, cme, calling, known_recv_class)
      if jit_caller_setup_arg(jit, ctx, asm, calling.flags) == CantCompile
        return CantCompile
      end

      if calling.argc == 0
        asm.incr_counter(:send_optimized_send_no_args)
        return CantCompile
      end

      calling.argc -= 1
      # We aren't handling `send(:send, ...)` yet. This might work, but not tested yet.
      if calling.send_shift > 0
        asm.incr_counter(:send_optimized_send_send)
        return CantCompile
      end
      # Lazily handle stack shift in handle_opt_send_shift_stack
      calling.send_shift += 1

      jit_call_symbol(jit, ctx, asm, cme, calling, known_recv_class, C::VM_CALL_FCALL)
    end

    # vm_call_opt_call
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_opt_call(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
      if block_handler != C::VM_BLOCK_HANDLER_NONE
        asm.incr_counter(:send_optimized_call_block)
        return CantCompile
      end

      if flags & C::VM_CALL_KWARG != 0
        asm.incr_counter(:send_optimized_call_kwarg)
        return CantCompile
      end

      if flags & C::VM_CALL_ARGS_SPLAT != 0
        asm.incr_counter(:send_optimized_call_splat)
        return CantCompile
      end

      # TODO: implement this
      # Optimize for single ractor mode and avoid runtime check for
      # "defined with an un-shareable Proc in a different Ractor"
      # if !assume_single_ractor_mode(jit, ocb)
      #   return CantCompile
      # end

      # If this is a .send call we need to adjust the stack
      if flags & C::VM_CALL_OPT_SEND != 0
        handle_opt_send_shift_stack(asm, argc, ctx, send_shift:)
      end

      # About to reset the SP, need to load this here
      recv_idx = argc # blockarg is not supported. send_shift is already handled.
      asm.mov(:rcx, ctx.stack_opnd(recv_idx)) # recv

      # Save the PC and SP because the callee can make Ruby calls
      jit_prepare_routine_call(jit, ctx, asm) # NOTE: clobbers rax

      asm.lea(:rax, ctx.sp_opnd(0)) # sp

      kw_splat = flags & C::VM_CALL_KW_SPLAT

      asm.mov(C_ARGS[0], :rcx)
      asm.mov(C_ARGS[1], EC)
      asm.mov(C_ARGS[2], argc)
      asm.lea(C_ARGS[3], [:rax, -argc * C.VALUE.size]) # stack_argument_pointer. NOTE: C_ARGS[3] is rcx
      asm.mov(C_ARGS[4], kw_splat)
      asm.mov(C_ARGS[5], C::VM_BLOCK_HANDLER_NONE)
      asm.call(C.rjit_optimized_call)

      ctx.stack_pop(argc + 1)

      stack_ret = ctx.stack_push(Type::Unknown)
      asm.mov(stack_ret, C_RET)
      return KeepCompiling
    end

    # vm_call_opt_struct_aref
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_opt_struct_aref(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
      if argc != 0
        asm.incr_counter(:send_optimized_struct_aref_error)
        return CantCompile
      end

      if c_method_tracing_currently_enabled?
        # Don't JIT if tracing c_call or c_return
        asm.incr_counter(:send_cfunc_tracing)
        return CantCompile
      end

      off = cme.def.body.optimized.index

      recv_idx = argc # blockarg is not supported
      recv_idx += send_shift
      comptime_recv = jit.peek_at_stack(recv_idx)

      # This is a .send call and we need to adjust the stack
      if flags & C::VM_CALL_OPT_SEND != 0
        handle_opt_send_shift_stack(asm, argc, ctx, send_shift:)
      end

      # All structs from the same Struct class should have the same
      # length. So if our comptime_recv is embedded all runtime
      # structs of the same class should be as well, and the same is
      # true of the converse.
      embedded = C::FL_TEST_RAW(comptime_recv, C::RSTRUCT_EMBED_LEN_MASK)

      asm.comment('struct aref')
      asm.mov(:rax, ctx.stack_pop(1)) # recv

      if embedded
        asm.mov(:rax, [:rax, C.RStruct.offsetof(:as, :ary) + (C.VALUE.size * off)])
      else
        asm.mov(:rax, [:rax, C.RStruct.offsetof(:as, :heap, :ptr)])
        asm.mov(:rax, [:rax, C.VALUE.size * off])
      end

      ret = ctx.stack_push(Type::Unknown)
      asm.mov(ret, :rax)

      jump_to_next_insn(jit, ctx, asm)
      EndBlock
    end

    # vm_call_opt_send (lazy part)
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def handle_opt_send_shift_stack(asm, argc, ctx, send_shift:)
      # We don't support `send(:send, ...)` for now.
      assert_equal(1, send_shift)

      asm.comment('shift stack')
      (0...argc).reverse_each do |i|
        opnd = ctx.stack_opnd(i)
        opnd2 = ctx.stack_opnd(i + 1)
        asm.mov(:rax, opnd)
        asm.mov(opnd2, :rax)
      end

      ctx.shift_stack(argc)
    end

    # vm_call_symbol
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_call_symbol(jit, ctx, asm, cme, calling, known_recv_class, flags)
      flags |= C::VM_CALL_OPT_SEND | (calling.kw_splat ? C::VM_CALL_KW_SPLAT : 0)

      comptime_symbol = jit.peek_at_stack(calling.argc)
      if comptime_symbol.class != String && !static_symbol?(comptime_symbol)
        asm.incr_counter(:send_optimized_send_not_sym_or_str)
        return CantCompile
      end

      mid = C.get_symbol_id(comptime_symbol)
      if mid == 0
        asm.incr_counter(:send_optimized_send_null_mid)
        return CantCompile
      end

      asm.comment("Guard #{comptime_symbol.inspect} is on stack")
      class_changed_exit = counted_exit(side_exit(jit, ctx), :send_optimized_send_mid_class_changed)
      jit_guard_known_klass(
        jit, ctx, asm, C.rb_class_of(comptime_symbol), ctx.stack_opnd(calling.argc),
        StackOpnd[calling.argc], comptime_symbol, class_changed_exit,
      )
      asm.mov(C_ARGS[0], ctx.stack_opnd(calling.argc))
      asm.call(C.rb_get_symbol_id)
      asm.cmp(C_RET, mid)
      id_changed_exit = counted_exit(side_exit(jit, ctx), :send_optimized_send_mid_id_changed)
      jit_chain_guard(:jne, jit, ctx, asm, id_changed_exit)

      # rb_callable_method_entry_with_refinements
      calling.flags = flags
      cme, _ = jit_search_method(jit, ctx, asm, mid, calling)
      if cme == CantCompile
        return CantCompile
      end

      if flags & C::VM_CALL_FCALL != 0
        return jit_call_method(jit, ctx, asm, mid, calling, cme, known_recv_class)
      end

      raise NotImplementedError # unreachable for now
    end

    # vm_push_frame
    #
    # Frame structure:
    # | args | locals | cme/cref | block_handler/prev EP | frame type (EP here) | stack bottom (SP here)
    #
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_push_frame(jit, ctx, asm, cme, flags, argc, frame_type, block_handler, iseq: nil, local_size: 0, stack_max: 0, prev_ep: nil, doing_kw_call: nil)
      # Save caller SP and PC before pushing a callee frame for backtrace and side exits
      asm.comment('save SP to caller CFP')
      recv_idx = argc # blockarg is already popped
      recv_idx += (block_handler == :captured) ? 0 : 1 # receiver is not on stack when captured->self is used
      if iseq
        # Skip setting this to SP register. This cfp->sp will be copied to SP on leave insn.
        asm.lea(:rax, ctx.sp_opnd(C.VALUE.size * -recv_idx)) # Pop receiver and arguments to prepare for side exits
        asm.mov([CFP, C.rb_control_frame_t.offsetof(:sp)], :rax)
      else
        asm.lea(SP, ctx.sp_opnd(C.VALUE.size * -recv_idx))
        asm.mov([CFP, C.rb_control_frame_t.offsetof(:sp)], SP)
        ctx.sp_offset = recv_idx
      end
      jit_save_pc(jit, asm, comment: 'save PC to caller CFP')

      sp_offset = ctx.sp_offset + 3 + local_size + (doing_kw_call ? 1 : 0) # callee_sp
      local_size.times do |i|
        asm.comment('set local variables') if i == 0
        local_index = sp_offset + i - local_size - 3
        asm.mov([SP, C.VALUE.size * local_index], Qnil)
      end

      asm.comment('set up EP with managing data')
      ep_offset = sp_offset - 1
      # ep[-2]: cref_or_me
      asm.mov(:rax, cme.to_i)
      asm.mov([SP, C.VALUE.size * (ep_offset - 2)], :rax)
      # ep[-1]: block handler or prev env ptr (specval)
      if prev_ep
        asm.mov(:rax, prev_ep.to_i | 1) # tagged prev ep
        asm.mov([SP, C.VALUE.size * (ep_offset - 1)], :rax)
      elsif block_handler == :captured
        # Set captured->ep, saving captured in :rcx for captured->self
        ep_reg = :rcx
        jit_get_lep(jit, asm, reg: ep_reg)
        asm.mov(:rcx, [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL]) # block_handler
        asm.and(:rcx, ~0x3) # captured
        asm.mov(:rax, [:rcx, C.VALUE.size]) # captured->ep
        asm.or(:rax, 0x1) # GC_GUARDED_PTR
        asm.mov([SP, C.VALUE.size * (ep_offset - 1)], :rax)
      elsif block_handler == C::VM_BLOCK_HANDLER_NONE
        asm.mov([SP, C.VALUE.size * (ep_offset - 1)], C::VM_BLOCK_HANDLER_NONE)
      elsif block_handler == C.rb_block_param_proxy
        # vm_caller_setup_arg_block: block_code == rb_block_param_proxy
        jit_get_lep(jit, asm, reg: :rax) # VM_CF_BLOCK_HANDLER: VM_CF_LEP
        asm.mov(:rax, [:rax, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL]) # VM_CF_BLOCK_HANDLER: VM_ENV_BLOCK_HANDLER
        asm.mov([CFP, C.rb_control_frame_t.offsetof(:block_code)], :rax) # reg_cfp->block_code = handler
        asm.mov([SP, C.VALUE.size * (ep_offset - 1)], :rax) # return handler;
      else # assume blockiseq
        asm.mov(:rax, block_handler)
        asm.mov([CFP, C.rb_control_frame_t.offsetof(:block_code)], :rax)
        asm.lea(:rax, [CFP, C.rb_control_frame_t.offsetof(:self)]) # VM_CFP_TO_CAPTURED_BLOCK
        asm.or(:rax, 1) # VM_BH_FROM_ISEQ_BLOCK
        asm.mov([SP, C.VALUE.size * (ep_offset - 1)], :rax)
      end
      # ep[-0]: ENV_FLAGS
      asm.mov([SP, C.VALUE.size * (ep_offset - 0)], frame_type)

      asm.comment('set up new frame')
      cfp_offset = -C.rb_control_frame_t.size # callee CFP
      # For ISEQ, JIT code will set it as needed. However, C func needs 0 there for svar frame detection.
      if iseq.nil?
        asm.mov([CFP, cfp_offset + C.rb_control_frame_t.offsetof(:pc)], 0)
      end
      asm.mov(:rax, iseq.to_i)
      asm.mov([CFP, cfp_offset + C.rb_control_frame_t.offsetof(:iseq)], :rax)
      if block_handler == :captured
        asm.mov(:rax, [:rcx]) # captured->self
      else
        self_index = ctx.sp_offset - (1 + argc) # blockarg has been popped
        asm.mov(:rax, [SP, C.VALUE.size * self_index])
      end
      asm.mov([CFP, cfp_offset + C.rb_control_frame_t.offsetof(:self)], :rax)
      asm.lea(:rax, [SP, C.VALUE.size * ep_offset])
      asm.mov([CFP, cfp_offset + C.rb_control_frame_t.offsetof(:ep)], :rax)
      asm.mov([CFP, cfp_offset + C.rb_control_frame_t.offsetof(:block_code)], 0)
      # Update SP register only for ISEQ calls. SP-relative operations should be done above this.
      sp_reg = iseq ? SP : :rax
      asm.lea(sp_reg, [SP, C.VALUE.size * sp_offset])
      asm.mov([CFP, cfp_offset + C.rb_control_frame_t.offsetof(:sp)], sp_reg)

      # cfp->jit_return is used only for ISEQs
      if iseq
        # The callee might change locals through Kernel#binding and other means.
        ctx.clear_local_types

        # Stub cfp->jit_return
        return_ctx = ctx.dup
        return_ctx.stack_pop(argc + ((block_handler == :captured) ? 0 : 1)) # Pop args and receiver. blockarg has been popped
        return_ctx.stack_push(Type::Unknown) # push callee's return value
        return_ctx.sp_offset = 1 # SP is in the position after popping a receiver and arguments
        return_ctx.chain_depth = 0
        branch_stub = BranchStub.new(
          iseq: jit.iseq,
          shape: Default,
          target0: BranchTarget.new(ctx: return_ctx, pc: jit.pc + jit.insn.len * C.VALUE.size),
        )
        branch_stub.target0.address = Assembler.new.then do |ocb_asm|
          @exit_compiler.compile_branch_stub(return_ctx, ocb_asm, branch_stub, true)
          @ocb.write(ocb_asm)
        end
        branch_stub.compile = compile_jit_return(branch_stub, cfp_offset:)
        branch_stub.compile.call(asm)
      end

      asm.comment('switch to callee CFP')
      # Update CFP register only for ISEQ calls
      cfp_reg = iseq ? CFP : :rax
      asm.lea(cfp_reg, [CFP, cfp_offset])
      asm.mov([EC, C.rb_execution_context_t.offsetof(:cfp)], cfp_reg)
    end

    def compile_jit_return(branch_stub, cfp_offset:) # Proc escapes arguments in memory
      proc do |branch_asm|
        branch_asm.comment('set jit_return to callee CFP')
        branch_asm.stub(branch_stub) do
          case branch_stub.shape
          in Default
            branch_asm.mov(:rax, branch_stub.target0.address)
            branch_asm.mov([CFP, cfp_offset + C.rb_control_frame_t.offsetof(:jit_return)], :rax)
          end
        end
      end
    end

    # CALLER_SETUP_ARG: Return CantCompile if not supported
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def jit_caller_setup_arg(jit, ctx, asm, flags)
      if flags & C::VM_CALL_ARGS_SPLAT != 0 && flags & C::VM_CALL_KW_SPLAT != 0
        asm.incr_counter(:send_args_splat_kw_splat)
        return CantCompile
      elsif flags & C::VM_CALL_ARGS_SPLAT != 0
        # splat is not supported in this path
        asm.incr_counter(:send_args_splat)
        return CantCompile
      elsif flags & C::VM_CALL_KW_SPLAT != 0
        asm.incr_counter(:send_args_kw_splat)
        return CantCompile
      elsif flags & C::VM_CALL_KWARG != 0
        asm.incr_counter(:send_kwarg)
        return CantCompile
      end
    end

    # Pushes arguments from an array to the stack. Differs from push splat because
    # the array can have items left over.
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def move_rest_args_to_stack(array, num_args, jit, ctx, asm)
      side_exit = side_exit(jit, ctx)

      asm.comment('move_rest_args_to_stack')

      # array is :rax
      array_len_opnd = :rcx
      jit_array_len(asm, array, array_len_opnd)

      asm.comment('Side exit if length is less than required')
      asm.cmp(array_len_opnd, num_args)
      asm.jl(counted_exit(side_exit, :send_iseq_has_rest_and_splat_not_equal))

      asm.comment('Push arguments from array')

      # Load the address of the embedded array
      # (struct RArray *)(obj)->as.ary
      array_reg = array

      # Conditionally load the address of the heap array
      # (struct RArray *)(obj)->as.heap.ptr
      flags_opnd = [array_reg, C.RBasic.offsetof(:flags)]
      asm.test(flags_opnd, C::RARRAY_EMBED_FLAG)
      heap_ptr_opnd = [array_reg, C.RArray.offsetof(:as, :heap, :ptr)]
      # Load the address of the embedded array
      # (struct RArray *)(obj)->as.ary
      ary_opnd = :rdx # NOTE: array :rax is used after move_rest_args_to_stack too
      asm.lea(:rcx, [array_reg, C.RArray.offsetof(:as, :ary)])
      asm.mov(ary_opnd, heap_ptr_opnd)
      asm.cmovnz(ary_opnd, :rcx)

      num_args.times do |i|
        top = ctx.stack_push(Type::Unknown)
        asm.mov(:rcx, [ary_opnd, i * C.VALUE.size])
        asm.mov(top, :rcx)
      end
    end

    # vm_caller_setup_arg_splat (+ CALLER_SETUP_ARG):
    # Pushes arguments from an array to the stack that are passed with a splat (i.e. *args).
    # It optimistically compiles to a static size that is the exact number of arguments needed for the function.
    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def push_splat_args(required_args, jit, ctx, asm)
      side_exit = side_exit(jit, ctx)

      asm.comment('push_splat_args')

      array_opnd = ctx.stack_opnd(0)
      array_stack_opnd = StackOpnd[0]
      array_reg = :rax
      asm.mov(array_reg, array_opnd)

      guard_object_is_array(jit, ctx, asm, array_reg, :rcx, array_stack_opnd, :send_args_splat_not_array)

      array_len_opnd = :rcx
      jit_array_len(asm, array_reg, array_len_opnd)

      asm.comment('Side exit if length is not equal to remaining args')
      asm.cmp(array_len_opnd, required_args)
      asm.jne(counted_exit(side_exit, :send_args_splat_length_not_equal))

      asm.comment('Check last argument is not ruby2keyword hash')

      ary_opnd = :rcx
      jit_array_ptr(asm, array_reg, ary_opnd) # clobbers array_reg

      last_array_value = :rax
      asm.mov(last_array_value, [ary_opnd, (required_args - 1) * C.VALUE.size])

      ruby2_exit = counted_exit(side_exit, :send_args_splat_ruby2_hash);
      guard_object_is_not_ruby2_keyword_hash(asm, last_array_value, :rcx, ruby2_exit) # clobbers :rax

      asm.comment('Push arguments from array')
      array_opnd = ctx.stack_pop(1)

      if required_args > 0
        # Load the address of the embedded array
        # (struct RArray *)(obj)->as.ary
        array_reg = :rax
        asm.mov(array_reg, array_opnd)

        # Conditionally load the address of the heap array
        # (struct RArray *)(obj)->as.heap.ptr
        flags_opnd = [array_reg, C.RBasic.offsetof(:flags)]
        asm.test(flags_opnd, C::RARRAY_EMBED_FLAG)
        heap_ptr_opnd = [array_reg, C.RArray.offsetof(:as, :heap, :ptr)]
        # Load the address of the embedded array
        # (struct RArray *)(obj)->as.ary
        asm.lea(:rcx, [array_reg, C.RArray.offsetof(:as, :ary)])
        asm.mov(:rax, heap_ptr_opnd)
        asm.cmovnz(:rax, :rcx)
        ary_opnd = :rax

        (0...required_args).each do |i|
          top = ctx.stack_push(Type::Unknown)
          asm.mov(:rcx, [ary_opnd, i * C.VALUE.size])
          asm.mov(top, :rcx)
        end

        asm.comment('end push_each')
      end
    end

    # Generate RARRAY_LEN. For array_opnd, use Opnd::Reg to reduce memory access,
    # and use Opnd::Mem to save registers.
    def jit_array_len(asm, array_reg, len_reg)
      asm.comment('get array length for embedded or heap')

      # Pull out the embed flag to check if it's an embedded array.
      asm.mov(len_reg, [array_reg, C.RBasic.offsetof(:flags)])

      # Get the length of the array
      asm.and(len_reg, C::RARRAY_EMBED_LEN_MASK)
      asm.sar(len_reg, C::RARRAY_EMBED_LEN_SHIFT)

      # Conditionally move the length of the heap array
      asm.test([array_reg, C.RBasic.offsetof(:flags)], C::RARRAY_EMBED_FLAG)

      # Select the array length value
      asm.cmovz(len_reg, [array_reg, C.RArray.offsetof(:as, :heap, :len)])
    end

    # Generate RARRAY_CONST_PTR (part of RARRAY_AREF)
    def jit_array_ptr(asm, array_reg, ary_opnd) # clobbers array_reg
      asm.comment('get array pointer for embedded or heap')

      flags_opnd = [array_reg, C.RBasic.offsetof(:flags)]
      asm.test(flags_opnd, C::RARRAY_EMBED_FLAG)
      # Load the address of the embedded array
      # (struct RArray *)(obj)->as.ary
      asm.mov(ary_opnd, [array_reg, C.RArray.offsetof(:as, :heap, :ptr)])
      asm.lea(array_reg, [array_reg, C.RArray.offsetof(:as, :ary)]) # clobbers array_reg
      asm.cmovnz(ary_opnd, array_reg)
    end

    def assert(cond)
      assert_equal(cond, true)
    end

    def assert_equal(left, right)
      if left != right
        raise "'#{left.inspect}' was not '#{right.inspect}'"
      end
    end

    def fixnum?(obj)
      (C.to_value(obj) & C::RUBY_FIXNUM_FLAG) == C::RUBY_FIXNUM_FLAG
    end

    def flonum?(obj)
      (C.to_value(obj) & C::RUBY_FLONUM_MASK) == C::RUBY_FLONUM_FLAG
    end

    def symbol?(obj)
      static_symbol?(obj) || dynamic_symbol?(obj)
    end

    def static_symbol?(obj)
      (C.to_value(obj) & 0xff) == C::RUBY_SYMBOL_FLAG
    end

    def dynamic_symbol?(obj)
      return false if C::SPECIAL_CONST_P(obj)
      C.RB_TYPE_P(obj, C::RUBY_T_SYMBOL)
    end

    def shape_too_complex?(obj)
      C.rb_shape_get_shape_id(obj) == C::OBJ_TOO_COMPLEX_SHAPE_ID
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    # @param asm [RubyVM::RJIT::Assembler]
    def defer_compilation(jit, ctx, asm)
      # Make a stub to compile the current insn
      if ctx.chain_depth != 0
        raise "double defer!"
      end
      ctx.chain_depth += 1
      jit_direct_jump(jit.iseq, jit.pc, ctx, asm, comment: 'defer_compilation')
    end

    def jit_direct_jump(iseq, pc, ctx, asm, comment: 'jit_direct_jump')
      branch_stub = BranchStub.new(
        iseq:,
        shape: Default,
        target0: BranchTarget.new(ctx:, pc:),
      )
      branch_stub.target0.address = Assembler.new.then do |ocb_asm|
        @exit_compiler.compile_branch_stub(ctx, ocb_asm, branch_stub, true)
        @ocb.write(ocb_asm)
      end
      branch_stub.compile = compile_jit_direct_jump(branch_stub, comment:)
      branch_stub.compile.call(asm)
    end

    def compile_jit_direct_jump(branch_stub, comment:) # Proc escapes arguments in memory
      proc do |branch_asm|
        branch_asm.comment(comment)
        branch_asm.stub(branch_stub) do
          case branch_stub.shape
          in Default
            branch_asm.jmp(branch_stub.target0.address)
          in Next0
            # Just write the block without a jump
          end
        end
      end
    end

    # @param jit [RubyVM::RJIT::JITState]
    # @param ctx [RubyVM::RJIT::Context]
    def side_exit(jit, ctx)
      # We use the latest ctx.sp_offset to generate a side exit to tolerate sp_offset changes by jit_save_sp.
      # However, we want to simulate an old stack_size when we take a side exit. We do that by adjusting the
      # sp_offset because gen_outlined_exit uses ctx.sp_offset to move SP.
      ctx = ctx.with_stack_size(jit.stack_size_for_pc)

      jit.side_exit_for_pc[ctx.sp_offset] ||= Assembler.new.then do |asm|
        @exit_compiler.compile_side_exit(jit.pc, ctx, asm)
        @ocb.write(asm)
      end
    end

    def counted_exit(side_exit, name)
      asm = Assembler.new
      asm.incr_counter(name)
      asm.jmp(side_exit)
      @ocb.write(asm)
    end

    def def_iseq_ptr(cme_def)
      C.rb_iseq_check(cme_def.body.iseq.iseqptr)
    end

    def to_value(obj)
      GC_REFS << obj
      C.to_value(obj)
    end

    def full_cfunc_return
      @full_cfunc_return ||= Assembler.new.then do |asm|
        @exit_compiler.compile_full_cfunc_return(asm)
        @ocb.write(asm)
      end
    end

    def c_method_tracing_currently_enabled?
      C.rb_rjit_global_events & (C::RUBY_EVENT_C_CALL | C::RUBY_EVENT_C_RETURN) != 0
    end

    # Return a builtin function if a given iseq consists of only that builtin function
    def builtin_function(iseq)
      opt_invokebuiltin_delegate_leave = INSNS.values.find { |i| i.name == :opt_invokebuiltin_delegate_leave }
      leave = INSNS.values.find { |i| i.name == :leave }
      if iseq.body.iseq_size == opt_invokebuiltin_delegate_leave.len + leave.len &&
          C.rb_vm_insn_decode(iseq.body.iseq_encoded[0]) == opt_invokebuiltin_delegate_leave.bin &&
          C.rb_vm_insn_decode(iseq.body.iseq_encoded[opt_invokebuiltin_delegate_leave.len]) == leave.bin
        C.rb_builtin_function.new(iseq.body.iseq_encoded[1])
      end
    end

    def build_calling(ci:, block_handler:)
      CallingInfo.new(
        argc: C.vm_ci_argc(ci),
        flags: C.vm_ci_flag(ci),
        kwarg: C.vm_ci_kwarg(ci),
        ci_addr: ci.to_i,
        send_shift: 0,
        block_handler:,
      )
    end
  end
end
PK*J[)�1��share/ruby/objspace.rbnu�[���# frozen_string_literal: true

require 'objspace.so'

module ObjectSpace
  class << self
    private :_dump
    private :_dump_all
    private :_dump_shapes
  end

  module_function

  # Dump the contents of a ruby object as JSON.
  #
  # _output_ can be one of: +:stdout+, +:file+, +:string+, or IO object.
  #
  # * +:file+ means dumping to a tempfile and returning corresponding File object;
  # * +:stdout+ means printing the dump and returning +nil+;
  # * +:string+ means returning a string with the dump;
  # * if an instance of IO object is provided, the output goes there, and the object
  #   is returned.
  #
  # This method is only expected to work with C Ruby.
  # This is an experimental method and is subject to change.
  # In particular, the function signature and output format are
  # not guaranteed to be compatible in future versions of ruby.
  def dump(obj, output: :string)
    out = case output
    when :file, nil
      require 'tempfile'
      Tempfile.create(%w(rubyobj .json))
    when :stdout
      STDOUT
    when :string
      +''
    when IO
      output
    else
      raise ArgumentError, "wrong output option: #{output.inspect}"
    end

    ret = _dump(obj, out)
    return nil if output == :stdout
    ret
  end


  # Dump the contents of the ruby heap as JSON.
  #
  # _output_ argument is the same as for #dump.
  #
  # _full_ must be a boolean. If true, all heap slots are dumped including the empty ones (+T_NONE+).
  #
  # _since_ must be a non-negative integer or +nil+.
  #
  # If _since_ is a positive integer, only objects of that generation and
  # newer generations are dumped. The current generation can be accessed using
  # GC::count. Objects that were allocated without object allocation tracing enabled
  # are ignored. See ::trace_object_allocations for more information and
  # examples.
  #
  # If _since_ is omitted or is +nil+, all objects are dumped.
  #
  # _shapes_ must be a boolean or a non-negative integer.
  #
  # If _shapes_ is a positive integer, only shapes newer than the provided
  # shape id are dumped. The current shape_id can be accessed using <tt>RubyVM.stat(:next_shape_id)</tt>.
  #
  # If _shapes_ is +false+, no shapes are dumped.
  #
  # To only dump objects allocated past a certain point you can combine _since_ and _shapes_:
  #   ObjectSpace.trace_object_allocations
  #   GC.start
  #   gc_generation = GC.count
  #   shape_generation = RubyVM.stat(:next_shape_id)
  #   call_method_to_instrument
  #   ObjectSpace.dump_all(since: gc_generation, shapes: shape_generation)
  #
  # This method is only expected to work with C Ruby.
  # This is an experimental method and is subject to change.
  # In particular, the function signature and output format are
  # not guaranteed to be compatible in future versions of ruby.
  def dump_all(output: :file, full: false, since: nil, shapes: true)
    out = case output
    when :file, nil
      require 'tempfile'
      Tempfile.create(%w(rubyheap .json))
    when :stdout
      STDOUT
    when :string
      +''
    when IO
      output
    else
      raise ArgumentError, "wrong output option: #{output.inspect}"
    end

    shapes = 0 if shapes == true
    ret = _dump_all(out, full, since, shapes)
    return nil if output == :stdout
    ret
  end

  #  Dump the contents of the ruby shape tree as JSON.
  #
  #  _output_ argument is the same as for #dump.
  #
  #  If _since_ is a positive integer, only shapes newer than the provided
  #  shape id are dumped. The current shape_id can be accessed using <tt>RubyVM.stat(:next_shape_id)</tt>.
  #
  #  This method is only expected to work with C Ruby.
  #  This is an experimental method and is subject to change.
  #  In particular, the function signature and output format are
  #  not guaranteed to be compatible in future versions of ruby.
  def dump_shapes(output: :file, since: 0)
    out = case output
    when :file, nil
      require 'tempfile'
      Tempfile.create(%w(rubyshapes .json))
    when :stdout
      STDOUT
    when :string
      +''
    when IO
      output
    else
      raise ArgumentError, "wrong output option: #{output.inspect}"
    end

    ret = _dump_shapes(out, since)
    return nil if output == :stdout
    ret
  end
end
PK*J[P���share/ruby/prism.rbnu�[���# frozen_string_literal: true

# The Prism Ruby parser.
#
# "Parsing Ruby is suddenly manageable!"
#   - You, hopefully
#
module Prism
  # There are many files in prism that are templated to handle every node type,
  # which means the files can end up being quite large. We autoload them to make
  # our require speed faster since consuming libraries are unlikely to use all
  # of these features.

  autoload :BasicVisitor, "prism/visitor"
  autoload :Compiler, "prism/compiler"
  autoload :DesugarCompiler, "prism/desugar_compiler"
  autoload :Dispatcher, "prism/dispatcher"
  autoload :DotVisitor, "prism/dot_visitor"
  autoload :DSL, "prism/dsl"
  autoload :InspectVisitor, "prism/inspect_visitor"
  autoload :LexCompat, "prism/lex_compat"
  autoload :LexRipper, "prism/lex_compat"
  autoload :MutationCompiler, "prism/mutation_compiler"
  autoload :Pack, "prism/pack"
  autoload :Pattern, "prism/pattern"
  autoload :Reflection, "prism/reflection"
  autoload :Relocation, "prism/relocation"
  autoload :Serialize, "prism/serialize"
  autoload :StringQuery, "prism/string_query"
  autoload :Translation, "prism/translation"
  autoload :Visitor, "prism/visitor"

  # Some of these constants are not meant to be exposed, so marking them as
  # private here.

  private_constant :LexCompat
  private_constant :LexRipper

  # :call-seq:
  #   Prism::lex_compat(source, **options) -> LexCompat::Result
  #
  # Returns a parse result whose value is an array of tokens that closely
  # resembles the return value of Ripper::lex. The main difference is that the
  # `:on_sp` token is not emitted.
  #
  # For supported options, see Prism::parse.
  def self.lex_compat(source, **options)
    LexCompat.new(source, **options).result # steep:ignore
  end

  # :call-seq:
  #   Prism::lex_ripper(source) -> Array
  #
  # This lexes with the Ripper lex. It drops any space events but otherwise
  # returns the same tokens. Raises SyntaxError if the syntax in source is
  # invalid.
  def self.lex_ripper(source)
    LexRipper.new(source).result # steep:ignore
  end

  # :call-seq:
  #   Prism::load(source, serialized) -> ParseResult
  #
  # Load the serialized AST using the source as a reference into a tree.
  def self.load(source, serialized)
    Serialize.load(source, serialized)
  end
end

require_relative "prism/polyfill/byteindex"
require_relative "prism/node"
require_relative "prism/node_ext"
require_relative "prism/parse_result"

# This is a Ruby implementation of the prism parser. If we're running on CRuby
# and we haven't explicitly set the PRISM_FFI_BACKEND environment variable, then
# it's going to require the built library. Otherwise, it's going to require a
# module that uses FFI to call into the library.
if RUBY_ENGINE == "ruby" and !ENV["PRISM_FFI_BACKEND"]
  # The C extension is the default backend on CRuby.
  Prism::BACKEND = :CEXT

  require "prism/prism"
else
  # The FFI backend is used on other Ruby implementations.
  Prism::BACKEND = :FFI

  require_relative "prism/ffi"
end
PK*J[p뢞'share/ruby/did_you_mean/jaro_winkler.rbnu�[���module DidYouMean
  module Jaro
    module_function

    def distance(str1, str2)
      str1, str2 = str2, str1 if str1.length > str2.length
      length1, length2 = str1.length, str2.length

      m          = 0.0
      t          = 0.0
      range      = length2 > 3 ? length2 / 2 - 1 : 0
      flags1     = 0
      flags2     = 0

      # Avoid duplicating enumerable objects
      str1_codepoints = str1.codepoints
      str2_codepoints = str2.codepoints

      i = 0
      while i < length1
        last = i + range
        j    = (i >= range) ? i - range : 0

        while j <= last
          if flags2[j] == 0 && str1_codepoints[i] == str2_codepoints[j]
            flags2 |= (1 << j)
            flags1 |= (1 << i)
            m += 1
            break
          end

          j += 1
        end

        i += 1
      end

      k = i = 0
      while i < length1
        if flags1[i] != 0
          j = index = k

          k = while j < length2
            index = j
            break(j + 1) if flags2[j] != 0

            j += 1
          end

          t += 1 if str1_codepoints[i] != str2_codepoints[index]
        end

        i += 1
      end
      t = (t / 2).floor

      m == 0 ? 0 : (m / length1 + m / length2 + (m - t) / m) / 3
    end
  end

  module JaroWinkler
    WEIGHT    = 0.1
    THRESHOLD = 0.7

    module_function

    def distance(str1, str2)
      jaro_distance = Jaro.distance(str1, str2)

      if jaro_distance > THRESHOLD
        codepoints2  = str2.codepoints
        prefix_bonus = 0

        str1.each_codepoint do |char1|
          char1 == codepoints2[prefix_bonus] && prefix_bonus < 4 ? prefix_bonus += 1 : break
        end

        jaro_distance + (prefix_bonus * WEIGHT * (1 - jaro_distance))
      else
        jaro_distance
      end
    end
  end
end
PK*J[>�(share/ruby/did_you_mean/spell_checker.rbnu�[���# frozen-string-literal: true

require_relative "levenshtein"
require_relative "jaro_winkler"

module DidYouMean
  class SpellChecker
    def initialize(dictionary:)
      @dictionary = dictionary
    end

    def correct(input)
      normalized_input = normalize(input)
      threshold = normalized_input.length > 3 ? 0.834 : 0.77

      words = @dictionary.select { |word| JaroWinkler.distance(normalize(word), normalized_input) >= threshold }
      words.reject! { |word| input.to_s == word.to_s }
      words.sort_by! { |word| JaroWinkler.distance(word.to_s, normalized_input) }
      words.reverse!

      # Correct mistypes
      threshold   = (normalized_input.length * 0.25).ceil
      corrections = words.select { |c| Levenshtein.distance(normalize(c), normalized_input) <= threshold }

      # Correct misspells
      if corrections.empty?
        corrections = words.select do |word|
          word   = normalize(word)
          length = normalized_input.length < word.length ? normalized_input.length : word.length

          Levenshtein.distance(word, normalized_input) < length
        end.first(1)
      end

      corrections
    end

    private

    def normalize(str_or_symbol) #:nodoc:
      str = str_or_symbol.to_s.downcase
      str.tr!("@", "")
      str
    end
  end
end
PK*J[+*�77=share/ruby/did_you_mean/spell_checkers/name_error_checkers.rbnu�[���require_relative 'name_error_checkers/class_name_checker'
require_relative 'name_error_checkers/variable_name_checker'

module DidYouMean
  class << (NameErrorCheckers = Object.new)
    def new(exception)
      case exception.original_message
      when /uninitialized constant/
        ClassNameChecker
      when /undefined local variable or method/,
           /undefined method/,
           /uninitialized class variable/,
           /no member '.*' in struct/
        VariableNameChecker
      else
        NullChecker
      end.new(exception)
    end
  end
end
PK*J[	���hh6share/ruby/did_you_mean/spell_checkers/null_checker.rbnu�[���module DidYouMean
  class NullChecker
    def initialize(*);  end
    def corrections; [] end
  end
end
PK*J[���MMSshare/ruby/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rbnu�[���# frozen-string-literal: true

require_relative "../../spell_checker"

module DidYouMean
  class VariableNameChecker
    attr_reader :name, :method_names, :lvar_names, :ivar_names, :cvar_names

    NAMES_TO_EXCLUDE = { 'foo' => [:fork, :for] }
    NAMES_TO_EXCLUDE.default = []
    Ractor.make_shareable(NAMES_TO_EXCLUDE) if defined?(Ractor)

    # +VariableNameChecker::RB_RESERVED_WORDS+ is the list of all reserved
    # words in Ruby. They could be declared like methods are, and a typo would
    # cause Ruby to raise a +NameError+ because of the way they are declared.
    #
    # The +:VariableNameChecker+ will use this list to suggest a reversed word
    # if a +NameError+ is raised and found closest matches, excluding:
    #
    #   * +do+
    #   * +if+
    #   * +in+
    #   * +or+
    #
    # Also see +MethodNameChecker::RB_RESERVED_WORDS+.
    RB_RESERVED_WORDS = %i(
      BEGIN
      END
      alias
      and
      begin
      break
      case
      class
      def
      defined?
      else
      elsif
      end
      ensure
      false
      for
      module
      next
      nil
      not
      redo
      rescue
      retry
      return
      self
      super
      then
      true
      undef
      unless
      until
      when
      while
      yield
      __LINE__
      __FILE__
      __ENCODING__
    )

    Ractor.make_shareable(RB_RESERVED_WORDS) if defined?(Ractor)

    def initialize(exception)
      @name       = exception.name.to_s.tr("@", "")
      @lvar_names = exception.respond_to?(:local_variables) ? exception.local_variables : []
      receiver    = exception.receiver

      @method_names = receiver.methods + receiver.private_methods
      @ivar_names   = receiver.instance_variables
      @cvar_names   = receiver.class.class_variables
      @cvar_names  += receiver.class_variables if receiver.kind_of?(Module)
    end

    def corrections
      @corrections ||= SpellChecker
                     .new(dictionary: (RB_RESERVED_WORDS + lvar_names + method_names + ivar_names + cvar_names))
                     .correct(name).uniq - NAMES_TO_EXCLUDE[@name]
    end
  end
end
PK*J[�l'��Pshare/ruby/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rbnu�[���# frozen-string-literal: true

require_relative "../../spell_checker"

module DidYouMean
  class ClassNameChecker
    attr_reader :class_name

    def initialize(exception)
      @class_name, @receiver, @original_message = exception.name, exception.receiver, exception.original_message
    end

    def corrections
      @corrections ||= SpellChecker.new(dictionary: class_names)
                         .correct(class_name)
                         .map(&:full_name)
                         .reject {|qualified_name| @original_message.include?(qualified_name) }
    end

    def class_names
      scopes.flat_map do |scope|
        scope.constants.map do |c|
          ClassName.new(c, scope == Object ? "" : "#{scope}::")
        end
      end
    end

    def scopes
      @scopes ||= @receiver.to_s.split("::").inject([Object]) do |_scopes, scope|
        _scopes << _scopes.last.const_get(scope)
      end.uniq
    end

    class ClassName < String
      attr :namespace

      def initialize(name, namespace = '')
        super(name.to_s)
        @namespace = namespace
      end

      def full_name
        self.class.new("#{namespace}#{self}")
      end
    end

    private_constant :ClassName
  end
end
PK*J[,����=share/ruby/did_you_mean/spell_checkers/method_name_checker.rbnu�[���require_relative "../spell_checker"

module DidYouMean
  class MethodNameChecker
    attr_reader :method_name, :receiver

    NAMES_TO_EXCLUDE = { NilClass => nil.methods }
    NAMES_TO_EXCLUDE.default = []
    Ractor.make_shareable(NAMES_TO_EXCLUDE) if defined?(Ractor)

    # +MethodNameChecker::RB_RESERVED_WORDS+ is the list of reserved words in
    # Ruby that take an argument. Unlike
    # +VariableNameChecker::RB_RESERVED_WORDS+, these reserved words require
    # an argument, and a +NoMethodError+ is raised due to the presence of the
    # argument.
    #
    # The +MethodNameChecker+ will use this list to suggest a reversed word if
    # a +NoMethodError+ is raised and found closest matches.
    #
    # Also see +VariableNameChecker::RB_RESERVED_WORDS+.
    RB_RESERVED_WORDS = %i(
      alias
      case
      def
      defined?
      elsif
      end
      ensure
      for
      rescue
      super
      undef
      unless
      until
      when
      while
      yield
    )

    Ractor.make_shareable(RB_RESERVED_WORDS) if defined?(Ractor)

    def initialize(exception)
      @method_name  = exception.name
      @receiver     = exception.receiver
      @private_call = exception.respond_to?(:private_call?) ? exception.private_call? : false
    end

    def corrections
      @corrections ||= begin
                         dictionary = method_names
                         dictionary = RB_RESERVED_WORDS + dictionary if @private_call

                         SpellChecker.new(dictionary: dictionary).correct(method_name) - names_to_exclude
                       end
    end

    def method_names
      if Object === receiver
        method_names = receiver.methods + receiver.singleton_methods
        method_names += receiver.private_methods if @private_call
        method_names.uniq!
        # Assume that people trying to use a writer are not interested in a reader
        # and vice versa
        if method_name.match?(/=\Z/)
          method_names.select! { |name| name.match?(/=\Z/) }
        else
          method_names.reject! { |name| name.match?(/=\Z/) }
        end
        method_names
      else
        []
      end
    end

    def names_to_exclude
      Object === receiver ? NAMES_TO_EXCLUDE[receiver.class] : []
    end
  end
end
PK*J[:mG���Bshare/ruby/did_you_mean/spell_checkers/pattern_key_name_checker.rbnu�[���require_relative "../spell_checker"

module DidYouMean
  class PatternKeyNameChecker
    def initialize(no_matching_pattern_key_error)
      @key = no_matching_pattern_key_error.key
      @keys = no_matching_pattern_key_error.matchee.keys
    end

    def corrections
      @corrections ||= exact_matches.empty? ? SpellChecker.new(dictionary: @keys).correct(@key).map(&:inspect) : exact_matches
    end

    private

    def exact_matches
      @exact_matches ||= @keys.select { |word| @key == word.to_s }.map { |obj| format_object(obj) }
    end

    def format_object(symbol_or_object)
      if symbol_or_object.is_a?(Symbol)
        ":#{symbol_or_object}"
      else
        symbol_or_object.to_s
      end
    end
  end
end
PK*J[
5�ė�;share/ruby/did_you_mean/spell_checkers/key_error_checker.rbnu�[���require_relative "../spell_checker"

module DidYouMean
  class KeyErrorChecker
    def initialize(key_error)
      @key = key_error.key
      @keys = key_error.receiver.keys
    end

    def corrections
      @corrections ||= exact_matches.empty? ? SpellChecker.new(dictionary: @keys).correct(@key).map(&:inspect) : exact_matches
    end

    private

    def exact_matches
      @exact_matches ||= @keys.select { |word| @key == word.to_s }.map { |obj| format_object(obj) }
    end

    def format_object(symbol_or_object)
      if symbol_or_object.is_a?(Symbol)
        ":#{symbol_or_object}"
      else
        symbol_or_object.to_s
      end
    end
  end
end
PK*J[!s����>share/ruby/did_you_mean/spell_checkers/require_path_checker.rbnu�[���# frozen-string-literal: true

require_relative "../spell_checker"
require_relative "../tree_spell_checker"
require "rbconfig"

module DidYouMean
  class RequirePathChecker
    attr_reader :path

    INITIAL_LOAD_PATH = $LOAD_PATH.dup.freeze
    Ractor.make_shareable(INITIAL_LOAD_PATH) if defined?(Ractor)

    ENV_SPECIFIC_EXT = ".#{RbConfig::CONFIG["DLEXT"]}"
    Ractor.make_shareable(ENV_SPECIFIC_EXT) if defined?(Ractor)

    private_constant :INITIAL_LOAD_PATH, :ENV_SPECIFIC_EXT

    def self.requireables
      @requireables ||= INITIAL_LOAD_PATH
                          .flat_map {|path| Dir.glob("**/???*{.rb,#{ENV_SPECIFIC_EXT}}", base: path) }
                          .map {|path| path.chomp!(".rb") || path.chomp!(ENV_SPECIFIC_EXT) }
    end

    def initialize(exception)
      @path = exception.path
    end

    def corrections
      @corrections ||= begin
                         threshold     = path.size * 2
                         dictionary    = self.class.requireables.reject {|str| str.size >= threshold }
                         spell_checker = path.include?("/") ? TreeSpellChecker : SpellChecker

                         spell_checker.new(dictionary: dictionary).correct(path).uniq
                       end
    end
  end
end
PK*J[(�9�99-share/ruby/did_you_mean/tree_spell_checker.rbnu�[���# frozen_string_literal: true

module DidYouMean
  # spell checker for a dictionary that has a tree
  # structure, see doc/tree_spell_checker_api.md
  class TreeSpellChecker
    attr_reader :dictionary, :separator, :augment

    def initialize(dictionary:, separator: '/', augment: nil)
      @dictionary = dictionary
      @separator = separator
      @augment = augment
    end

    def correct(input)
      plausibles = plausible_dimensions(input)
      return fall_back_to_normal_spell_check(input) if plausibles.empty?

      suggestions = find_suggestions(input, plausibles)
      return fall_back_to_normal_spell_check(input) if suggestions.empty?

      suggestions
    end

    def dictionary_without_leaves
      @dictionary_without_leaves ||= dictionary.map { |word| word.split(separator)[0..-2] }.uniq
    end

    def tree_depth
      @tree_depth ||= dictionary_without_leaves.max { |a, b| a.size <=> b.size }.size
    end

    def dimensions
      @dimensions ||= tree_depth.times.map do |index|
                        dictionary_without_leaves.map { |element| element[index] }.compact.uniq
                      end
    end

    def find_leaves(path)
      path_with_separator = "#{path}#{separator}"

      dictionary
        .select {|str| str.include?(path_with_separator) }
        .map {|str| str.gsub(path_with_separator, '') }
    end

    def plausible_dimensions(input)
      input.split(separator)[0..-2]
        .map
        .with_index { |element, index| correct_element(dimensions[index], element) if dimensions[index] }
        .compact
    end

    def possible_paths(states)
      states.map { |state| state.join(separator) }
    end

    private

    def find_suggestions(input, plausibles)
      states = plausibles[0].product(*plausibles[1..-1])
      paths  = possible_paths(states)
      leaf   = input.split(separator).last

      find_ideas(paths, leaf)
    end

    def fall_back_to_normal_spell_check(input)
      return [] unless augment

      ::DidYouMean::SpellChecker.new(dictionary: dictionary).correct(input)
    end

    def find_ideas(paths, leaf)
      paths.flat_map do |path|
        names = find_leaves(path)
        ideas = correct_element(names, leaf)

        ideas_to_paths(ideas, leaf, names, path)
      end.compact
    end

    def ideas_to_paths(ideas, leaf, names, path)
      if ideas.empty?
        nil
      elsif names.include?(leaf)
        ["#{path}#{separator}#{leaf}"]
      else
        ideas.map {|str| "#{path}#{separator}#{str}" }
      end
    end

    def correct_element(names, element)
      return names if names.size == 1

      str = normalize(element)

      return [str] if names.include?(str)

      ::DidYouMean::SpellChecker.new(dictionary: names).correct(str)
    end

    def normalize(str)
      str.downcase!
      str.tr!('@', ' ') if str.include?('@')
      str
    end
  end
end
PK*J[��YV11"share/ruby/did_you_mean/version.rbnu�[���module DidYouMean
  VERSION = "2.0.0".freeze
end
PK*J[a�~��5share/ruby/did_you_mean/formatters/plain_formatter.rbnu�[���require_relative '../formatter'

warn "`require 'did_you_mean/formatters/plain_formatter'` is deprecated. Please `require 'did_you_mean/formatter'` " \
     "instead."
PK*J[�z[a7share/ruby/did_you_mean/formatters/verbose_formatter.rbnu�[���# frozen-string-literal: true

warn "`require 'did_you_mean/formatters/verbose_formatter'` is deprecated and falls back to the default formatter. "

require_relative '../formatter'

module DidYouMean
  # For compatibility:
  VerboseFormatter = Formatter
end
PK*J[B�H�$share/ruby/did_you_mean/formatter.rbnu�[���# frozen-string-literal: true

module DidYouMean
  # The +DidYouMean::Formatter+ is the basic, default formatter for the
  # gem. The formatter responds to the +message_for+ method and it returns a
  # human readable string.
  class Formatter

    # Returns a human readable string that contains +corrections+. This
    # formatter is designed to be less verbose to not take too much screen
    # space while being helpful enough to the user.
    #
    # @example
    #
    #   formatter = DidYouMean::Formatter.new
    #
    #   # displays suggestions in two lines with the leading empty line
    #   puts formatter.message_for(["methods", "method"])
    #
    #   Did you mean?  methods
    #                   method
    #   # => nil
    #
    #   # displays an empty line
    #   puts formatter.message_for([])
    #
    #   # => nil
    #
    def self.message_for(corrections)
      corrections.empty? ? "" : "\nDid you mean?  #{corrections.join("\n               ")}"
    end

    def message_for(corrections)
      warn "The instance method #message_for has been deprecated. Please use the class method " \
           "DidYouMean::Formatter.message_for(...) instead."

      self.class.message_for(corrections)
    end
  end

  PlainFormatter = Formatter

  deprecate_constant :PlainFormatter
end
PK*J[\Ն0��'share/ruby/did_you_mean/experimental.rbnu�[���warn "Experimental features in the did_you_mean gem has been removed " \
     "and `require \"did_you_mean/experimental\"' has no effect."
PK*J[��&�.share/ruby/did_you_mean/core_ext/name_error.rbnu�[���module DidYouMean
  module Correctable
    if Exception.method_defined?(:detailed_message)
      # just for compatibility
      def original_message
        # we cannot use alias here because
        to_s
      end

      def detailed_message(highlight: true, did_you_mean: true, **)
        msg = super.dup

        return msg unless did_you_mean

        suggestion = DidYouMean.formatter.message_for(corrections)

        if highlight
          suggestion = suggestion.gsub(/.+/) { "\e[1m" + $& + "\e[m" }
        end

        msg << suggestion
        msg
      rescue
        super
      end
    else
      SKIP_TO_S_FOR_SUPER_LOOKUP = true
      private_constant :SKIP_TO_S_FOR_SUPER_LOOKUP

      def original_message
        meth = method(:to_s)
        while meth.owner.const_defined?(:SKIP_TO_S_FOR_SUPER_LOOKUP)
          meth = meth.super_method
        end
        meth.call
      end

      def to_s
        msg = super.dup
        suggestion = DidYouMean.formatter.message_for(corrections)

        msg << suggestion if !msg.include?(suggestion)
        msg
      rescue
        super
      end
    end

    def corrections
      @corrections ||= spell_checker.corrections
    end

    def spell_checker
      DidYouMean.spell_checkers[self.class.to_s].new(self)
    end
  end
end
PK*J[�x�J��"share/ruby/did_you_mean/verbose.rbnu�[���warn "The verbose formatter has been removed and now `require 'did_you_mean/verbose'` has no effect. Please " \
     "remove this call."
PK*J[U1i__&share/ruby/did_you_mean/levenshtein.rbnu�[���module DidYouMean
  module Levenshtein # :nodoc:
    # This code is based directly on the Text gem implementation
    # Copyright (c) 2006-2013 Paul Battley, Michael Neumann, Tim Fletcher.
    #
    # Returns a value representing the "cost" of transforming str1 into str2
    def distance(str1, str2)
      n = str1.length
      m = str2.length
      return m if n.zero?
      return n if m.zero?

      d = (0..m).to_a
      x = nil

      # to avoid duplicating an enumerable object, create it outside of the loop
      str2_codepoints = str2.codepoints

      str1.each_codepoint.with_index(1) do |char1, i|
        j = 0
        while j < m
          cost = (char1 == str2_codepoints[j]) ? 0 : 1
          x = min3(
            d[j+1] + 1, # insertion
            i + 1,      # deletion
            d[j] + cost # substitution
          )
          d[j] = i
          i = x

          j += 1
        end
        d[m] = x
      end

      x
    end
    module_function :distance

    private

    # detects the minimum value out of three arguments. This method is
    # faster than `[a, b, c].min` and puts less GC pressure.
    # See https://github.com/ruby/did_you_mean/pull/1 for a performance
    # benchmark.
    def min3(a, b, c)
      if a < b && a < c
        a
      elsif b < c
        b
      else
        c
      end
    end
    module_function :min3
  end
end
PK*J[n߷��share/ruby/yaml.rbnu�[���# frozen_string_literal: false

begin
  require 'psych'
rescue LoadError
  case RUBY_ENGINE
  when 'jruby'
    warn "The Psych YAML extension failed to load.\n" \
      "Check your env for conflicting versions of SnakeYAML\n" \
      "See https://github.com/jruby/jruby/wiki/FAQs#why-does-the-psych-yaml-extension-fail-to-load-in-my-environment",
         uplevel: 1
  else
    warn "It seems your ruby installation is missing psych (for YAML output).\n" \
      "To eliminate this warning, please install libyaml and reinstall your ruby.\n",
         uplevel: 1
  end
  raise
end

YAML = Psych # :nodoc:

# YAML Ain't Markup Language
#
# This module provides a Ruby interface for data serialization in YAML format.
#
# The YAML module is an alias of Psych, the YAML engine for Ruby.
#
# == Usage
#
# Working with YAML can be very simple, for example:
#
#     require 'yaml'
#     # Parse a YAML string
#     YAML.load("--- foo") #=> "foo"
#
#     # Emit some YAML
#     YAML.dump("foo")     # => "--- foo\n...\n"
#     { :a => 'b'}.to_yaml  # => "---\n:a: b\n"
#
# As the implementation is provided by the Psych library, detailed documentation
# can be found in that library's docs (also part of standard library).
#
# == Security
#
# Do not use YAML to load untrusted data. Doing so is unsafe and could allow
# malicious input to execute arbitrary code inside your application. Please see
# doc/security.rdoc for more information.
#
# == History
#
# Syck was the original YAML implementation in Ruby's standard library
# developed by why the lucky stiff.
#
# You can still use Syck, if you prefer, for parsing and emitting YAML, but you
# must install the 'syck' gem now in order to use it.
#
# In older Ruby versions, ie. <= 1.9, Syck is still provided, however it was
# completely removed with the release of Ruby 2.0.0.
#
# == More info
#
# For more advanced details on the implementation see Psych, and also check out
# http://yaml.org for spec details and other helpful information.
#
# Psych is maintained by Aaron Patterson on github: https://github.com/ruby/psych
#
# Syck can also be found on github: https://github.com/ruby/syck
module YAML
  LOADER_VERSION = "0.4.0"
end
PK*J[JU�\3;3;share/ruby/fileutils.rbnu�[���# frozen_string_literal: true

begin
  require 'rbconfig'
rescue LoadError
  # for make rjit-headers
end

# Namespace for file utility methods for copying, moving, removing, etc.
#
# == What's Here
#
# First, what’s elsewhere. \Module \FileUtils:
#
# - Inherits from {class Object}[rdoc-ref:Object].
# - Supplements {class File}[rdoc-ref:File]
#   (but is not included or extended there).
#
# Here, module \FileUtils provides methods that are useful for:
#
# - {Creating}[rdoc-ref:FileUtils@Creating].
# - {Deleting}[rdoc-ref:FileUtils@Deleting].
# - {Querying}[rdoc-ref:FileUtils@Querying].
# - {Setting}[rdoc-ref:FileUtils@Setting].
# - {Comparing}[rdoc-ref:FileUtils@Comparing].
# - {Copying}[rdoc-ref:FileUtils@Copying].
# - {Moving}[rdoc-ref:FileUtils@Moving].
# - {Options}[rdoc-ref:FileUtils@Options].
#
# === Creating
#
# - ::mkdir: Creates directories.
# - ::mkdir_p, ::makedirs, ::mkpath: Creates directories,
#   also creating ancestor directories as needed.
# - ::link_entry: Creates a hard link.
# - ::ln, ::link: Creates hard links.
# - ::ln_s, ::symlink: Creates symbolic links.
# - ::ln_sf: Creates symbolic links, overwriting if necessary.
# - ::ln_sr: Creates symbolic links relative to targets
#
# === Deleting
#
# - ::remove_dir: Removes a directory and its descendants.
# - ::remove_entry: Removes an entry, including its descendants if it is a directory.
# - ::remove_entry_secure: Like ::remove_entry, but removes securely.
# - ::remove_file: Removes a file entry.
# - ::rm, ::remove: Removes entries.
# - ::rm_f, ::safe_unlink: Like ::rm, but removes forcibly.
# - ::rm_r: Removes entries and their descendants.
# - ::rm_rf, ::rmtree: Like ::rm_r, but removes forcibly.
# - ::rmdir: Removes directories.
#
# === Querying
#
# - ::pwd, ::getwd: Returns the path to the working directory.
# - ::uptodate?: Returns whether a given entry is newer than given other entries.
#
# === Setting
#
# - ::cd, ::chdir: Sets the working directory.
# - ::chmod: Sets permissions for an entry.
# - ::chmod_R: Sets permissions for an entry and its descendants.
# - ::chown: Sets the owner and group for entries.
# - ::chown_R: Sets the owner and group for entries and their descendants.
# - ::touch: Sets modification and access times for entries,
#   creating if necessary.
#
# === Comparing
#
# - ::compare_file, ::cmp, ::identical?: Returns whether two entries are identical.
# - ::compare_stream: Returns whether two streams are identical.
#
# === Copying
#
# - ::copy_entry: Recursively copies an entry.
# - ::copy_file: Copies an entry.
# - ::copy_stream: Copies a stream.
# - ::cp, ::copy: Copies files.
# - ::cp_lr: Recursively creates hard links.
# - ::cp_r: Recursively copies files, retaining mode, owner, and group.
# - ::install: Recursively copies files, optionally setting mode,
#   owner, and group.
#
# === Moving
#
# - ::mv, ::move: Moves entries.
#
# === Options
#
# - ::collect_method: Returns the names of methods that accept a given option.
# - ::commands: Returns the names of methods that accept options.
# - ::have_option?: Returns whether a given method accepts a given option.
# - ::options: Returns all option names.
# - ::options_of: Returns the names of the options for a given method.
#
# == Path Arguments
#
# Some methods in \FileUtils accept _path_ arguments,
# which are interpreted as paths to filesystem entries:
#
# - If the argument is a string, that value is the path.
# - If the argument has method +:to_path+, it is converted via that method.
# - If the argument has method +:to_str+, it is converted via that method.
#
# == About the Examples
#
# Some examples here involve trees of file entries.
# For these, we sometimes display trees using the
# {tree command-line utility}[https://en.wikipedia.org/wiki/Tree_(command)],
# which is a recursive directory-listing utility that produces
# a depth-indented listing of files and directories.
#
# We use a helper method to launch the command and control the format:
#
#   def tree(dirpath = '.')
#     command = "tree --noreport --charset=ascii #{dirpath}"
#     system(command)
#   end
#
# To illustrate:
#
#   tree('src0')
#   # => src0
#   #    |-- sub0
#   #    |   |-- src0.txt
#   #    |   `-- src1.txt
#   #    `-- sub1
#   #        |-- src2.txt
#   #        `-- src3.txt
#
# == Avoiding the TOCTTOU Vulnerability
#
# For certain methods that recursively remove entries,
# there is a potential vulnerability called the
# {Time-of-check to time-of-use}[https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use],
# or TOCTTOU, vulnerability that can exist when:
#
# - An ancestor directory of the entry at the target path is world writable;
#   such directories include <tt>/tmp</tt>.
# - The directory tree at the target path includes:
#
#   - A world-writable descendant directory.
#   - A symbolic link.
#
# To avoid that vulnerability, you can use this method to remove entries:
#
# - FileUtils.remove_entry_secure: removes recursively
#   if the target path points to a directory.
#
# Also available are these methods,
# each of which calls \FileUtils.remove_entry_secure:
#
# - FileUtils.rm_r with keyword argument <tt>secure: true</tt>.
# - FileUtils.rm_rf with keyword argument <tt>secure: true</tt>.
#
# Finally, this method for moving entries calls \FileUtils.remove_entry_secure
# if the source and destination are on different file systems
# (which means that the "move" is really a copy and remove):
#
# - FileUtils.mv with keyword argument <tt>secure: true</tt>.
#
# \Method \FileUtils.remove_entry_secure removes securely
# by applying a special pre-process:
#
# - If the target path points to a directory, this method uses methods
#   {File#chown}[rdoc-ref:File#chown]
#   and {File#chmod}[rdoc-ref:File#chmod]
#   in removing directories.
# - The owner of the target directory should be either the current process
#   or the super user (root).
#
# WARNING: You must ensure that *ALL* parent directories cannot be
# moved by other untrusted users.  For example, parent directories
# should not be owned by untrusted users, and should not be world
# writable except when the sticky bit is set.
#
# For details of this security vulnerability, see Perl cases:
#
# - {CVE-2005-0448}[https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448].
# - {CVE-2004-0452}[https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452].
#
module FileUtils
  # The version number.
  VERSION = "1.7.3"

  def self.private_module_function(name)   #:nodoc:
    module_function name
    private_class_method name
  end

  #
  # Returns a string containing the path to the current directory:
  #
  #   FileUtils.pwd # => "/rdoc/fileutils"
  #
  # Related: FileUtils.cd.
  #
  def pwd
    Dir.pwd
  end
  module_function :pwd

  alias getwd pwd
  module_function :getwd

  # Changes the working directory to the given +dir+, which
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments]:
  #
  # With no block given,
  # changes the current directory to the directory at +dir+; returns zero:
  #
  #   FileUtils.pwd # => "/rdoc/fileutils"
  #   FileUtils.cd('..')
  #   FileUtils.pwd # => "/rdoc"
  #   FileUtils.cd('fileutils')
  #
  # With a block given, changes the current directory to the directory
  # at +dir+, calls the block with argument +dir+,
  # and restores the original current directory; returns the block's value:
  #
  #   FileUtils.pwd                                     # => "/rdoc/fileutils"
  #   FileUtils.cd('..') { |arg| [arg, FileUtils.pwd] } # => ["..", "/rdoc"]
  #   FileUtils.pwd                                     # => "/rdoc/fileutils"
  #
  # Keyword arguments:
  #
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.cd('..')
  #     FileUtils.cd('fileutils')
  #
  #   Output:
  #
  #     cd ..
  #     cd fileutils
  #
  # Related: FileUtils.pwd.
  #
  def cd(dir, verbose: nil, &block) # :yield: dir
    fu_output_message "cd #{dir}" if verbose
    result = Dir.chdir(dir, &block)
    fu_output_message 'cd -' if verbose and block
    result
  end
  module_function :cd

  alias chdir cd
  module_function :chdir

  #
  # Returns +true+ if the file at path +new+
  # is newer than all the files at paths in array +old_list+;
  # +false+ otherwise.
  #
  # Argument +new+ and the elements of +old_list+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments]:
  #
  #   FileUtils.uptodate?('Rakefile', ['Gemfile', 'README.md']) # => true
  #   FileUtils.uptodate?('Gemfile', ['Rakefile', 'README.md']) # => false
  #
  # A non-existent file is considered to be infinitely old.
  #
  # Related: FileUtils.touch.
  #
  def uptodate?(new, old_list)
    return false unless File.exist?(new)
    new_time = File.mtime(new)
    old_list.each do |old|
      if File.exist?(old)
        return false unless new_time > File.mtime(old)
      end
    end
    true
  end
  module_function :uptodate?

  def remove_trailing_slash(dir)   #:nodoc:
    dir == '/' ? dir : dir.chomp(?/)
  end
  private_module_function :remove_trailing_slash

  #
  # Creates directories at the paths in the given +list+
  # (a single path or an array of paths);
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, creates a directory at each +path+ in +list+
  # by calling: <tt>Dir.mkdir(path, mode)</tt>;
  # see {Dir.mkdir}[rdoc-ref:Dir.mkdir]:
  #
  #   FileUtils.mkdir(%w[tmp0 tmp1]) # => ["tmp0", "tmp1"]
  #   FileUtils.mkdir('tmp4')        # => ["tmp4"]
  #
  # Keyword arguments:
  #
  # - <tt>mode: <i>mode</i></tt> - also calls <tt>File.chmod(mode, path)</tt>;
  #   see {File.chmod}[rdoc-ref:File.chmod].
  # - <tt>noop: true</tt> - does not create directories.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.mkdir(%w[tmp0 tmp1], verbose: true)
  #     FileUtils.mkdir(%w[tmp2 tmp3], mode: 0700, verbose: true)
  #
  #   Output:
  #
  #     mkdir tmp0 tmp1
  #     mkdir -m 700 tmp2 tmp3
  #
  # Raises an exception if any path points to an existing
  # file or directory, or if for any reason a directory cannot be created.
  #
  # Related: FileUtils.mkdir_p.
  #
  def mkdir(list, mode: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "mkdir #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
    return if noop

    list.each do |dir|
      fu_mkdir dir, mode
    end
  end
  module_function :mkdir

  #
  # Creates directories at the paths in the given +list+
  # (a single path or an array of paths),
  # also creating ancestor directories as needed;
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, creates a directory at each +path+ in +list+,
  # along with any needed ancestor directories,
  # by calling: <tt>Dir.mkdir(path, mode)</tt>;
  # see {Dir.mkdir}[rdoc-ref:Dir.mkdir]:
  #
  #   FileUtils.mkdir_p(%w[tmp0/tmp1 tmp2/tmp3]) # => ["tmp0/tmp1", "tmp2/tmp3"]
  #   FileUtils.mkdir_p('tmp4/tmp5')             # => ["tmp4/tmp5"]
  #
  # Keyword arguments:
  #
  # - <tt>mode: <i>mode</i></tt> - also calls <tt>File.chmod(mode, path)</tt>;
  #   see {File.chmod}[rdoc-ref:File.chmod].
  # - <tt>noop: true</tt> - does not create directories.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.mkdir_p(%w[tmp0 tmp1], verbose: true)
  #     FileUtils.mkdir_p(%w[tmp2 tmp3], mode: 0700, verbose: true)
  #
  #   Output:
  #
  #     mkdir -p tmp0 tmp1
  #     mkdir -p -m 700 tmp2 tmp3
  #
  # Raises an exception if for any reason a directory cannot be created.
  #
  # FileUtils.mkpath and FileUtils.makedirs are aliases for FileUtils.mkdir_p.
  #
  # Related: FileUtils.mkdir.
  #
  def mkdir_p(list, mode: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "mkdir -p #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
    return *list if noop

    list.each do |item|
      path = remove_trailing_slash(item)

      stack = []
      until File.directory?(path) || File.dirname(path) == path
        stack.push path
        path = File.dirname(path)
      end
      stack.reverse_each do |dir|
        begin
          fu_mkdir dir, mode
        rescue SystemCallError
          raise unless File.directory?(dir)
        end
      end
    end

    return *list
  end
  module_function :mkdir_p

  alias mkpath    mkdir_p
  alias makedirs  mkdir_p
  module_function :mkpath
  module_function :makedirs

  def fu_mkdir(path, mode)   #:nodoc:
    path = remove_trailing_slash(path)
    if mode
      Dir.mkdir path, mode
      File.chmod mode, path
    else
      Dir.mkdir path
    end
  end
  private_module_function :fu_mkdir

  #
  # Removes directories at the paths in the given +list+
  # (a single path or an array of paths);
  # returns +list+, if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, removes the directory at each +path+ in +list+,
  # by calling: <tt>Dir.rmdir(path)</tt>;
  # see {Dir.rmdir}[rdoc-ref:Dir.rmdir]:
  #
  #   FileUtils.rmdir(%w[tmp0/tmp1 tmp2/tmp3]) # => ["tmp0/tmp1", "tmp2/tmp3"]
  #   FileUtils.rmdir('tmp4/tmp5')             # => ["tmp4/tmp5"]
  #
  # Keyword arguments:
  #
  # - <tt>parents: true</tt> - removes successive ancestor directories
  #   if empty.
  # - <tt>noop: true</tt> - does not remove directories.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.rmdir(%w[tmp0/tmp1 tmp2/tmp3], parents: true, verbose: true)
  #     FileUtils.rmdir('tmp4/tmp5', parents: true, verbose: true)
  #
  #   Output:
  #
  #     rmdir -p tmp0/tmp1 tmp2/tmp3
  #     rmdir -p tmp4/tmp5
  #
  # Raises an exception if a directory does not exist
  # or if for any reason a directory cannot be removed.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rmdir(list, parents: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "rmdir #{parents ? '-p ' : ''}#{list.join ' '}" if verbose
    return if noop
    list.each do |dir|
      Dir.rmdir(dir = remove_trailing_slash(dir))
      if parents
        begin
          until (parent = File.dirname(dir)) == '.' or parent == dir
            dir = parent
            Dir.rmdir(dir)
          end
        rescue Errno::ENOTEMPTY, Errno::EEXIST, Errno::ENOENT
        end
      end
    end
  end
  module_function :rmdir

  # Creates {hard links}[https://en.wikipedia.org/wiki/Hard_link].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # When +src+ is the path to an existing file
  # and +dest+ is the path to a non-existent file,
  # creates a hard link at +dest+ pointing to +src+; returns zero:
  #
  #   Dir.children('tmp0/')                    # => ["t.txt"]
  #   Dir.children('tmp1/')                    # => []
  #   FileUtils.ln('tmp0/t.txt', 'tmp1/t.lnk') # => 0
  #   Dir.children('tmp1/')                    # => ["t.lnk"]
  #
  # When +src+ is the path to an existing file
  # and +dest+ is the path to an existing directory,
  # creates a hard link at <tt>dest/src</tt> pointing to +src+; returns zero:
  #
  #   Dir.children('tmp2')               # => ["t.dat"]
  #   Dir.children('tmp3')               # => []
  #   FileUtils.ln('tmp2/t.dat', 'tmp3') # => 0
  #   Dir.children('tmp3')               # => ["t.dat"]
  #
  # When +src+ is an array of paths to existing files
  # and +dest+ is the path to an existing directory,
  # then for each path +target+ in +src+,
  # creates a hard link at <tt>dest/target</tt> pointing to +target+;
  # returns +src+:
  #
  #   Dir.children('tmp4/')                               # => []
  #   FileUtils.ln(['tmp0/t.txt', 'tmp2/t.dat'], 'tmp4/') # => ["tmp0/t.txt", "tmp2/t.dat"]
  #   Dir.children('tmp4/')                               # => ["t.dat", "t.txt"]
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - overwrites +dest+ if it exists.
  # - <tt>noop: true</tt> - does not create links.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.ln('tmp0/t.txt', 'tmp1/t.lnk', verbose: true)
  #     FileUtils.ln('tmp2/t.dat', 'tmp3', verbose: true)
  #     FileUtils.ln(['tmp0/t.txt', 'tmp2/t.dat'], 'tmp4/', verbose: true)
  #
  #   Output:
  #
  #     ln tmp0/t.txt tmp1/t.lnk
  #     ln tmp2/t.dat tmp3
  #     ln tmp0/t.txt tmp2/t.dat tmp4/
  #
  # Raises an exception if +dest+ is the path to an existing file
  # and keyword argument +force+ is not +true+.
  #
  # Related: FileUtils.link_entry (has different options).
  #
  def ln(src, dest, force: nil, noop: nil, verbose: nil)
    fu_output_message "ln#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest0(src, dest) do |s,d|
      remove_file d, true if force
      File.link s, d
    end
  end
  module_function :ln

  alias link ln
  module_function :link

  # Creates {hard links}[https://en.wikipedia.org/wiki/Hard_link].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a directory and +dest+ does not exist,
  # creates links +dest+ and descendents pointing to +src+ and its descendents:
  #
  #   tree('src0')
  #   # => src0
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   File.exist?('dest0') # => false
  #   FileUtils.cp_lr('src0', 'dest0')
  #   tree('dest0')
  #   # => dest0
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #
  # If +src+ and +dest+ are both paths to directories,
  # creates links <tt>dest/src</tt> and descendents
  # pointing to +src+ and its descendents:
  #
  #   tree('src1')
  #   # => src1
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   FileUtils.mkdir('dest1')
  #   FileUtils.cp_lr('src1', 'dest1')
  #   tree('dest1')
  #   # => dest1
  #   #    `-- src1
  #   #        |-- sub0
  #   #        |   |-- src0.txt
  #   #        |   `-- src1.txt
  #   #        `-- sub1
  #   #            |-- src2.txt
  #   #            `-- src3.txt
  #
  # If +src+ is an array of paths to entries and +dest+ is the path to a directory,
  # for each path +filepath+ in +src+, creates a link at <tt>dest/filepath</tt>
  # pointing to that path:
  #
  #   tree('src2')
  #   # => src2
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   FileUtils.mkdir('dest2')
  #   FileUtils.cp_lr(['src2/sub0', 'src2/sub1'], 'dest2')
  #   tree('dest2')
  #   # => dest2
  #   #    |-- sub0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- sub1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: false</tt> - if +src+ is a symbolic link,
  #   does not dereference it.
  # - <tt>noop: true</tt> - does not create links.
  # - <tt>remove_destination: true</tt> - removes +dest+ before creating links.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.cp_lr('src0', 'dest0', noop: true, verbose: true)
  #     FileUtils.cp_lr('src1', 'dest1', noop: true, verbose: true)
  #     FileUtils.cp_lr(['src2/sub0', 'src2/sub1'], 'dest2', noop: true, verbose: true)
  #
  #   Output:
  #
  #     cp -lr src0 dest0
  #     cp -lr src1 dest1
  #     cp -lr src2/sub0 src2/sub1 dest2
  #
  # Raises an exception if +dest+ is the path to an existing file or directory
  # and keyword argument <tt>remove_destination: true</tt> is not given.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def cp_lr(src, dest, noop: nil, verbose: nil,
            dereference_root: true, remove_destination: false)
    fu_output_message "cp -lr#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      link_entry s, d, dereference_root, remove_destination
    end
  end
  module_function :cp_lr

  # Creates {symbolic links}[https://en.wikipedia.org/wiki/Symbolic_link].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to an existing file:
  #
  # - When +dest+ is the path to a non-existent file,
  #   creates a symbolic link at +dest+ pointing to +src+:
  #
  #     FileUtils.touch('src0.txt')
  #     File.exist?('dest0.txt')   # => false
  #     FileUtils.ln_s('src0.txt', 'dest0.txt')
  #     File.symlink?('dest0.txt') # => true
  #
  # - When +dest+ is the path to an existing file,
  #   creates a symbolic link at +dest+ pointing to +src+
  #   if and only if keyword argument <tt>force: true</tt> is given
  #   (raises an exception otherwise):
  #
  #     FileUtils.touch('src1.txt')
  #     FileUtils.touch('dest1.txt')
  #     FileUtils.ln_s('src1.txt', 'dest1.txt', force: true)
  #     FileTest.symlink?('dest1.txt') # => true
  #
  #     FileUtils.ln_s('src1.txt', 'dest1.txt') # Raises Errno::EEXIST.
  #
  # If +dest+ is the path to a directory,
  # creates a symbolic link at <tt>dest/src</tt> pointing to +src+:
  #
  #   FileUtils.touch('src2.txt')
  #   FileUtils.mkdir('destdir2')
  #   FileUtils.ln_s('src2.txt', 'destdir2')
  #   File.symlink?('destdir2/src2.txt') # => true
  #
  # If +src+ is an array of paths to existing files and +dest+ is a directory,
  # for each child +child+ in +src+ creates a symbolic link <tt>dest/child</tt>
  # pointing to +child+:
  #
  #   FileUtils.mkdir('srcdir3')
  #   FileUtils.touch('srcdir3/src0.txt')
  #   FileUtils.touch('srcdir3/src1.txt')
  #   FileUtils.mkdir('destdir3')
  #   FileUtils.ln_s(['srcdir3/src0.txt', 'srcdir3/src1.txt'], 'destdir3')
  #   File.symlink?('destdir3/src0.txt') # => true
  #   File.symlink?('destdir3/src1.txt') # => true
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - overwrites +dest+ if it exists.
  # - <tt>relative: false</tt> - create links relative to +dest+.
  # - <tt>noop: true</tt> - does not create links.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.ln_s('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     FileUtils.ln_s('src1.txt', 'destdir1', noop: true, verbose: true)
  #     FileUtils.ln_s('src2.txt', 'dest2.txt', force: true, noop: true, verbose: true)
  #     FileUtils.ln_s(['srcdir3/src0.txt', 'srcdir3/src1.txt'], 'destdir3', noop: true, verbose: true)
  #
  #   Output:
  #
  #     ln -s src0.txt dest0.txt
  #     ln -s src1.txt destdir1
  #     ln -sf src2.txt dest2.txt
  #     ln -s srcdir3/src0.txt srcdir3/src1.txt destdir3
  #
  # Related: FileUtils.ln_sf.
  #
  def ln_s(src, dest, force: nil, relative: false, target_directory: true, noop: nil, verbose: nil)
    if relative
      return ln_sr(src, dest, force: force, noop: noop, verbose: verbose)
    end
    fu_output_message "ln -s#{force ? 'f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest0(src, dest) do |s,d|
      remove_file d, true if force
      File.symlink s, d
    end
  end
  module_function :ln_s

  alias symlink ln_s
  module_function :symlink

  # Like FileUtils.ln_s, but always with keyword argument <tt>force: true</tt> given.
  #
  def ln_sf(src, dest, noop: nil, verbose: nil)
    ln_s src, dest, force: true, noop: noop, verbose: verbose
  end
  module_function :ln_sf

  # Like FileUtils.ln_s, but create links relative to +dest+.
  #
  def ln_sr(src, dest, target_directory: true, force: nil, noop: nil, verbose: nil)
    options = "#{force ? 'f' : ''}#{target_directory ? '' : 'T'}"
    dest = File.path(dest)
    srcs = Array(src)
    link = proc do |s, target_dir_p = true|
      s = File.path(s)
      if target_dir_p
        d = File.join(destdirs = dest, File.basename(s))
      else
        destdirs = File.dirname(d = dest)
      end
      destdirs = fu_split_path(File.realpath(destdirs))
      if fu_starting_path?(s)
        srcdirs = fu_split_path((File.realdirpath(s) rescue File.expand_path(s)))
        base = fu_relative_components_from(srcdirs, destdirs)
        s = File.join(*base)
      else
        srcdirs = fu_clean_components(*fu_split_path(s))
        base = fu_relative_components_from(fu_split_path(Dir.pwd), destdirs)
        while srcdirs.first&. == ".." and base.last&.!=("..") and !fu_starting_path?(base.last)
          srcdirs.shift
          base.pop
        end
        s = File.join(*base, *srcdirs)
      end
      fu_output_message "ln -s#{options} #{s} #{d}" if verbose
      next if noop
      remove_file d, true if force
      File.symlink s, d
    end
    case srcs.size
    when 0
    when 1
      link[srcs[0], target_directory && File.directory?(dest)]
    else
      srcs.each(&link)
    end
  end
  module_function :ln_sr

  # Creates {hard links}[https://en.wikipedia.org/wiki/Hard_link]; returns +nil+.
  #
  # Arguments +src+ and +dest+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a file and +dest+ does not exist,
  # creates a hard link at +dest+ pointing to +src+:
  #
  #   FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   FileUtils.link_entry('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is the path to a directory and +dest+ does not exist,
  # recursively creates hard links at +dest+ pointing to paths in +src+:
  #
  #   FileUtils.mkdir_p(['src1/dir0', 'src1/dir1'])
  #   src_file_paths = [
  #     'src1/dir0/t0.txt',
  #     'src1/dir0/t1.txt',
  #     'src1/dir1/t2.txt',
  #     'src1/dir1/t3.txt',
  #     ]
  #   FileUtils.touch(src_file_paths)
  #   File.directory?('dest1')        # => true
  #   FileUtils.link_entry('src1', 'dest1')
  #   File.file?('dest1/dir0/t0.txt') # => true
  #   File.file?('dest1/dir0/t1.txt') # => true
  #   File.file?('dest1/dir1/t2.txt') # => true
  #   File.file?('dest1/dir1/t3.txt') # => true
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: true</tt> - dereferences +src+ if it is a symbolic link.
  # - <tt>remove_destination: true</tt> - removes +dest+ before creating links.
  #
  # Raises an exception if +dest+ is the path to an existing file or directory
  # and keyword argument <tt>remove_destination: true</tt> is not given.
  #
  # Related: FileUtils.ln (has different options).
  #
  def link_entry(src, dest, dereference_root = false, remove_destination = false)
    Entry_.new(src, nil, dereference_root).traverse do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      File.unlink destent.path if remove_destination && File.file?(destent.path)
      ent.link destent.path
    end
  end
  module_function :link_entry

  # Copies files.
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a file and +dest+ is not the path to a directory,
  # copies +src+ to +dest+:
  #
  #   FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   FileUtils.cp('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is the path to a file and +dest+ is the path to a directory,
  # copies +src+ to <tt>dest/src</tt>:
  #
  #   FileUtils.touch('src1.txt')
  #   FileUtils.mkdir('dest1')
  #   FileUtils.cp('src1.txt', 'dest1')
  #   File.file?('dest1/src1.txt') # => true
  #
  # If +src+ is an array of paths to files and +dest+ is the path to a directory,
  # copies from each +src+ to +dest+:
  #
  #   src_file_paths = ['src2.txt', 'src2.dat']
  #   FileUtils.touch(src_file_paths)
  #   FileUtils.mkdir('dest2')
  #   FileUtils.cp(src_file_paths, 'dest2')
  #   File.file?('dest2/src2.txt') # => true
  #   File.file?('dest2/src2.dat') # => true
  #
  # Keyword arguments:
  #
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>noop: true</tt> - does not copy files.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.cp('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     FileUtils.cp('src1.txt', 'dest1', noop: true, verbose: true)
  #     FileUtils.cp(src_file_paths, 'dest2', noop: true, verbose: true)
  #
  #   Output:
  #
  #     cp src0.txt dest0.txt
  #     cp src1.txt dest1
  #     cp src2.txt src2.dat dest2
  #
  # Raises an exception if +src+ is a directory.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
    fu_output_message "cp#{preserve ? ' -p' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      copy_file s, d, preserve
    end
  end
  module_function :cp

  alias copy cp
  module_function :copy

  # Recursively copies files.
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # The mode, owner, and group are retained in the copy;
  # to change those, use FileUtils.install instead.
  #
  # If +src+ is the path to a file and +dest+ is not the path to a directory,
  # copies +src+ to +dest+:
  #
  #   FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   FileUtils.cp_r('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is the path to a file and +dest+ is the path to a directory,
  # copies +src+ to <tt>dest/src</tt>:
  #
  #   FileUtils.touch('src1.txt')
  #   FileUtils.mkdir('dest1')
  #   FileUtils.cp_r('src1.txt', 'dest1')
  #   File.file?('dest1/src1.txt') # => true
  #
  # If +src+ is the path to a directory and +dest+ does not exist,
  # recursively copies +src+ to +dest+:
  #
  #   tree('src2')
  #   # => src2
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #    |-- src2.txt
  #   #    `-- src3.txt
  #   FileUtils.exist?('dest2') # => false
  #   FileUtils.cp_r('src2', 'dest2')
  #   tree('dest2')
  #   # => dest2
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #    |-- src2.txt
  #   #    `-- src3.txt
  #
  # If +src+ and +dest+ are paths to directories,
  # recursively copies +src+ to <tt>dest/src</tt>:
  #
  #   tree('src3')
  #   # => src3
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #    |-- src2.txt
  #   #    `-- src3.txt
  #   FileUtils.mkdir('dest3')
  #   FileUtils.cp_r('src3', 'dest3')
  #   tree('dest3')
  #   # => dest3
  #   #    `-- src3
  #   #      |-- dir0
  #   #      |   |-- src0.txt
  #   #      |   `-- src1.txt
  #   #      `-- dir1
  #   #          |-- src2.txt
  #   #          `-- src3.txt
  #
  # If +src+ is an array of paths and +dest+ is a directory,
  # recursively copies from each path in +src+ to +dest+;
  # the paths in +src+ may point to files and/or directories.
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: false</tt> - if +src+ is a symbolic link,
  #   does not dereference it.
  # - <tt>noop: true</tt> - does not copy files.
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.cp_r('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     FileUtils.cp_r('src1.txt', 'dest1', noop: true, verbose: true)
  #     FileUtils.cp_r('src2', 'dest2', noop: true, verbose: true)
  #     FileUtils.cp_r('src3', 'dest3', noop: true, verbose: true)
  #
  #   Output:
  #
  #     cp -r src0.txt dest0.txt
  #     cp -r src1.txt dest1
  #     cp -r src2 dest2
  #     cp -r src3 dest3
  #
  # Raises an exception of +src+ is the path to a directory
  # and +dest+ is the path to a file.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def cp_r(src, dest, preserve: nil, noop: nil, verbose: nil,
           dereference_root: true, remove_destination: nil)
    fu_output_message "cp -r#{preserve ? 'p' : ''}#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      copy_entry s, d, preserve, dereference_root, remove_destination
    end
  end
  module_function :cp_r

  # Recursively copies files from +src+ to +dest+.
  #
  # Arguments +src+ and +dest+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ is the path to a file, copies +src+ to +dest+:
  #
  #   FileUtils.touch('src0.txt')
  #   File.exist?('dest0.txt') # => false
  #   FileUtils.copy_entry('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt')  # => true
  #
  # If +src+ is a directory, recursively copies +src+ to +dest+:
  #
  #   tree('src1')
  #   # => src1
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   FileUtils.copy_entry('src1', 'dest1')
  #   tree('dest1')
  #   # => dest1
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #
  # The recursive copying preserves file types for regular files,
  # directories, and symbolic links;
  # other file types (FIFO streams, device files, etc.) are not supported.
  #
  # Keyword arguments:
  #
  # - <tt>dereference_root: true</tt> - if +src+ is a symbolic link,
  #   follows the link.
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
    if dereference_root
      src = File.realpath(src)
    end

    Entry_.new(src, nil, false).wrap_traverse(proc do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
      ent.copy destent.path
    end, proc do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      ent.copy_metadata destent.path if preserve
    end)
  end
  module_function :copy_entry

  # Copies file from +src+ to +dest+, which should not be directories.
  #
  # Arguments +src+ and +dest+
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Examples:
  #
  #   FileUtils.touch('src0.txt')
  #   FileUtils.copy_file('src0.txt', 'dest0.txt')
  #   File.file?('dest0.txt') # => true
  #
  # Keyword arguments:
  #
  # - <tt>dereference: false</tt> - if +src+ is a symbolic link,
  #   does not follow the link.
  # - <tt>preserve: true</tt> - preserves file times.
  # - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def copy_file(src, dest, preserve = false, dereference = true)
    ent = Entry_.new(src, nil, dereference)
    ent.copy_file dest
    ent.copy_metadata dest if preserve
  end
  module_function :copy_file

  # Copies \IO stream +src+ to \IO stream +dest+ via
  # {IO.copy_stream}[rdoc-ref:IO.copy_stream].
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def copy_stream(src, dest)
    IO.copy_stream(src, dest)
  end
  module_function :copy_stream

  # Moves entries.
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # If +src+ and +dest+ are on different file systems,
  # first copies, then removes +src+.
  #
  # May cause a local vulnerability if not called with keyword argument
  # <tt>secure: true</tt>;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # If +src+ is the path to a single file or directory and +dest+ does not exist,
  # moves +src+ to +dest+:
  #
  #   tree('src0')
  #   # => src0
  #   #    |-- src0.txt
  #   #    `-- src1.txt
  #   File.exist?('dest0') # => false
  #   FileUtils.mv('src0', 'dest0')
  #   File.exist?('src0')  # => false
  #   tree('dest0')
  #   # => dest0
  #   #    |-- src0.txt
  #   #    `-- src1.txt
  #
  # If +src+ is an array of paths to files and directories
  # and +dest+ is the path to a directory,
  # copies from each path in the array to +dest+:
  #
  #   File.file?('src1.txt') # => true
  #   tree('src1')
  #   # => src1
  #   #    |-- src.dat
  #   #    `-- src.txt
  #   Dir.empty?('dest1')    # => true
  #   FileUtils.mv(['src1.txt', 'src1'], 'dest1')
  #   tree('dest1')
  #   # => dest1
  #   #    |-- src1
  #   #    |   |-- src.dat
  #   #    |   `-- src.txt
  #   #    `-- src1.txt
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - if the move includes removing +src+
  #   (that is, if +src+ and +dest+ are on different file systems),
  #   ignores raised exceptions of StandardError and its descendants.
  # - <tt>noop: true</tt> - does not move files.
  # - <tt>secure: true</tt> - removes +src+ securely;
  #   see details at FileUtils.remove_entry_secure.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.mv('src0', 'dest0', noop: true, verbose: true)
  #     FileUtils.mv(['src1.txt', 'src1'], 'dest1', noop: true, verbose: true)
  #
  #   Output:
  #
  #     mv src0 dest0
  #     mv src1.txt src1 dest1
  #
  def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
    fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      destent = Entry_.new(d, nil, true)
      begin
        if destent.exist?
          if destent.directory?
            raise Errno::EEXIST, d
          end
        end
        begin
          File.rename s, d
        rescue Errno::EXDEV,
               Errno::EPERM # move from unencrypted to encrypted dir (ext4)
          copy_entry s, d, true
          if secure
            remove_entry_secure s, force
          else
            remove_entry s, force
          end
        end
      rescue SystemCallError
        raise unless force
      end
    end
  end
  module_function :mv

  alias move mv
  module_function :move

  # Removes entries at the paths in the given +list+
  # (a single path or an array of paths)
  # returns +list+, if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # With no keyword arguments, removes files at the paths given in +list+:
  #
  #   FileUtils.touch(['src0.txt', 'src0.dat'])
  #   FileUtils.rm(['src0.dat', 'src0.txt']) # => ["src0.dat", "src0.txt"]
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - ignores raised exceptions of StandardError
  #   and its descendants.
  # - <tt>noop: true</tt> - does not remove files; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.rm(['src0.dat', 'src0.txt'], noop: true, verbose: true)
  #
  #   Output:
  #
  #     rm src0.dat src0.txt
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm(list, force: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "rm#{force ? ' -f' : ''} #{list.join ' '}" if verbose
    return if noop

    list.each do |path|
      remove_file path, force
    end
  end
  module_function :rm

  alias remove rm
  module_function :remove

  # Equivalent to:
  #
  #   FileUtils.rm(list, force: true, **kwargs)
  #
  # Argument +list+ (a single path or an array of paths)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # See FileUtils.rm for keyword arguments.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm_f(list, noop: nil, verbose: nil)
    rm list, force: true, noop: noop, verbose: verbose
  end
  module_function :rm_f

  alias safe_unlink rm_f
  module_function :safe_unlink

  # Removes entries at the paths in the given +list+
  # (a single path or an array of paths);
  # returns +list+, if it is an array, <tt>[list]</tt> otherwise.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # May cause a local vulnerability if not called with keyword argument
  # <tt>secure: true</tt>;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # For each file path, removes the file at that path:
  #
  #   FileUtils.touch(['src0.txt', 'src0.dat'])
  #   FileUtils.rm_r(['src0.dat', 'src0.txt'])
  #   File.exist?('src0.txt') # => false
  #   File.exist?('src0.dat') # => false
  #
  # For each directory path, recursively removes files and directories:
  #
  #   tree('src1')
  #   # => src1
  #   #    |-- dir0
  #   #    |   |-- src0.txt
  #   #    |   `-- src1.txt
  #   #    `-- dir1
  #   #        |-- src2.txt
  #   #        `-- src3.txt
  #   FileUtils.rm_r('src1')
  #   File.exist?('src1') # => false
  #
  # Keyword arguments:
  #
  # - <tt>force: true</tt> - ignores raised exceptions of StandardError
  #   and its descendants.
  # - <tt>noop: true</tt> - does not remove entries; returns +nil+.
  # - <tt>secure: true</tt> - removes +src+ securely;
  #   see details at FileUtils.remove_entry_secure.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.rm_r(['src0.dat', 'src0.txt'], noop: true, verbose: true)
  #     FileUtils.rm_r('src1', noop: true, verbose: true)
  #
  #   Output:
  #
  #     rm -r src0.dat src0.txt
  #     rm -r src1
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm_r(list, force: nil, noop: nil, verbose: nil, secure: nil)
    list = fu_list(list)
    fu_output_message "rm -r#{force ? 'f' : ''} #{list.join ' '}" if verbose
    return if noop
    list.each do |path|
      if secure
        remove_entry_secure path, force
      else
        remove_entry path, force
      end
    end
  end
  module_function :rm_r

  # Equivalent to:
  #
  #   FileUtils.rm_r(list, force: true, **kwargs)
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # May cause a local vulnerability if not called with keyword argument
  # <tt>secure: true</tt>;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # See FileUtils.rm_r for keyword arguments.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def rm_rf(list, noop: nil, verbose: nil, secure: nil)
    rm_r list, force: true, noop: noop, verbose: verbose, secure: secure
  end
  module_function :rm_rf

  alias rmtree rm_rf
  module_function :rmtree

  # Securely removes the entry given by +path+,
  # which should be the entry for a regular file, a symbolic link,
  # or a directory.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Avoids a local vulnerability that can exist in certain circumstances;
  # see {Avoiding the TOCTTOU Vulnerability}[rdoc-ref:FileUtils@Avoiding+the+TOCTTOU+Vulnerability].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def remove_entry_secure(path, force = false)
    unless fu_have_symlink?
      remove_entry path, force
      return
    end
    fullpath = File.expand_path(path)
    st = File.lstat(fullpath)
    unless st.directory?
      File.unlink fullpath
      return
    end
    # is a directory.
    parent_st = File.stat(File.dirname(fullpath))
    unless parent_st.world_writable?
      remove_entry path, force
      return
    end
    unless parent_st.sticky?
      raise ArgumentError, "parent directory is world writable, FileUtils#remove_entry_secure does not work; abort: #{path.inspect} (parent directory mode #{'%o' % parent_st.mode})"
    end

    # freeze tree root
    euid = Process.euid
    dot_file = fullpath + "/."
    begin
      File.open(dot_file) {|f|
        unless fu_stat_identical_entry?(st, f.stat)
          # symlink (TOC-to-TOU attack?)
          File.unlink fullpath
          return
        end
        f.chown euid, -1
        f.chmod 0700
      }
    rescue Errno::EISDIR # JRuby in non-native mode can't open files as dirs
      File.lstat(dot_file).tap {|fstat|
        unless fu_stat_identical_entry?(st, fstat)
          # symlink (TOC-to-TOU attack?)
          File.unlink fullpath
          return
        end
        File.chown euid, -1, dot_file
        File.chmod 0700, dot_file
      }
    end

    unless fu_stat_identical_entry?(st, File.lstat(fullpath))
      # TOC-to-TOU attack?
      File.unlink fullpath
      return
    end

    # ---- tree root is frozen ----
    root = Entry_.new(path)
    root.preorder_traverse do |ent|
      if ent.directory?
        ent.chown euid, -1
        ent.chmod 0700
      end
    end
    root.postorder_traverse do |ent|
      begin
        ent.remove
      rescue
        raise unless force
      end
    end
  rescue
    raise unless force
  end
  module_function :remove_entry_secure

  def fu_have_symlink?   #:nodoc:
    File.symlink nil, nil
  rescue NotImplementedError
    return false
  rescue TypeError
    return true
  end
  private_module_function :fu_have_symlink?

  def fu_stat_identical_entry?(a, b)   #:nodoc:
    a.dev == b.dev and a.ino == b.ino
  end
  private_module_function :fu_stat_identical_entry?

  # Removes the entry given by +path+,
  # which should be the entry for a regular file, a symbolic link,
  # or a directory.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: FileUtils.remove_entry_secure.
  #
  def remove_entry(path, force = false)
    Entry_.new(path).postorder_traverse do |ent|
      begin
        ent.remove
      rescue
        raise unless force
      end
    end
  rescue
    raise unless force
  end
  module_function :remove_entry

  # Removes the file entry given by +path+,
  # which should be the entry for a regular file or a symbolic link.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def remove_file(path, force = false)
    Entry_.new(path).remove_file
  rescue
    raise unless force
  end
  module_function :remove_file

  # Recursively removes the directory entry given by +path+,
  # which should be the entry for a regular file, a symbolic link,
  # or a directory.
  #
  # Argument +path+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Optional argument +force+ specifies whether to ignore
  # raised exceptions of StandardError and its descendants.
  #
  # Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
  #
  def remove_dir(path, force = false)
    remove_entry path, force   # FIXME?? check if it is a directory
  end
  module_function :remove_dir

  # Returns +true+ if the contents of files +a+ and +b+ are identical,
  # +false+ otherwise.
  #
  # Arguments +a+ and +b+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # FileUtils.identical? and FileUtils.cmp are aliases for FileUtils.compare_file.
  #
  # Related: FileUtils.compare_stream.
  #
  def compare_file(a, b)
    return false unless File.size(a) == File.size(b)
    File.open(a, 'rb') {|fa|
      File.open(b, 'rb') {|fb|
        return compare_stream(fa, fb)
      }
    }
  end
  module_function :compare_file

  alias identical? compare_file
  alias cmp compare_file
  module_function :identical?
  module_function :cmp

  # Returns +true+ if the contents of streams +a+ and +b+ are identical,
  # +false+ otherwise.
  #
  # Arguments +a+ and +b+
  # should be {interpretable as a path}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Related: FileUtils.compare_file.
  #
  def compare_stream(a, b)
    bsize = fu_stream_blksize(a, b)

    sa = String.new(capacity: bsize)
    sb = String.new(capacity: bsize)

    begin
      a.read(bsize, sa)
      b.read(bsize, sb)
      return true if sa.empty? && sb.empty?
    end while sa == sb
    false
  end
  module_function :compare_stream

  # Copies a file entry.
  # See {install(1)}[https://man7.org/linux/man-pages/man1/install.1.html].
  #
  # Arguments +src+ (a single path or an array of paths)
  # and +dest+ (a single path)
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments];
  #
  # If the entry at +dest+ does not exist, copies from +src+ to +dest+:
  #
  #   File.read('src0.txt')    # => "aaa\n"
  #   File.exist?('dest0.txt') # => false
  #   FileUtils.install('src0.txt', 'dest0.txt')
  #   File.read('dest0.txt')   # => "aaa\n"
  #
  # If +dest+ is a file entry, copies from +src+ to +dest+, overwriting:
  #
  #   File.read('src1.txt')  # => "aaa\n"
  #   File.read('dest1.txt') # => "bbb\n"
  #   FileUtils.install('src1.txt', 'dest1.txt')
  #   File.read('dest1.txt') # => "aaa\n"
  #
  # If +dest+ is a directory entry, copies from +src+ to <tt>dest/src</tt>,
  # overwriting if necessary:
  #
  #   File.read('src2.txt')       # => "aaa\n"
  #   File.read('dest2/src2.txt') # => "bbb\n"
  #   FileUtils.install('src2.txt', 'dest2')
  #   File.read('dest2/src2.txt') # => "aaa\n"
  #
  # If +src+ is an array of paths and +dest+ points to a directory,
  # copies each path +path+ in +src+ to <tt>dest/path</tt>:
  #
  #   File.file?('src3.txt') # => true
  #   File.file?('src3.dat') # => true
  #   FileUtils.mkdir('dest3')
  #   FileUtils.install(['src3.txt', 'src3.dat'], 'dest3')
  #   File.file?('dest3/src3.txt') # => true
  #   File.file?('dest3/src3.dat') # => true
  #
  # Keyword arguments:
  #
  # - <tt>group: <i>group</i></tt> - changes the group if not +nil+,
  #   using {File.chown}[rdoc-ref:File.chown].
  # - <tt>mode: <i>permissions</i></tt> - changes the permissions.
  #   using {File.chmod}[rdoc-ref:File.chmod].
  # - <tt>noop: true</tt> - does not copy entries; returns +nil+.
  # - <tt>owner: <i>owner</i></tt> - changes the owner if not +nil+,
  #   using {File.chown}[rdoc-ref:File.chown].
  # - <tt>preserve: true</tt> - preserve timestamps
  #   using {File.utime}[rdoc-ref:File.utime].
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.install('src0.txt', 'dest0.txt', noop: true, verbose: true)
  #     FileUtils.install('src1.txt', 'dest1.txt', noop: true, verbose: true)
  #     FileUtils.install('src2.txt', 'dest2', noop: true, verbose: true)
  #
  #   Output:
  #
  #     install -c src0.txt dest0.txt
  #     install -c src1.txt dest1.txt
  #     install -c src2.txt dest2
  #
  # Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
  #
  def install(src, dest, mode: nil, owner: nil, group: nil, preserve: nil,
              noop: nil, verbose: nil)
    if verbose
      msg = +"install -c"
      msg << ' -p' if preserve
      msg << ' -m ' << mode_to_s(mode) if mode
      msg << " -o #{owner}" if owner
      msg << " -g #{group}" if group
      msg << ' ' << [src,dest].flatten.join(' ')
      fu_output_message msg
    end
    return if noop
    uid = fu_get_uid(owner)
    gid = fu_get_gid(group)
    fu_each_src_dest(src, dest) do |s, d|
      st = File.stat(s)
      unless File.exist?(d) and compare_file(s, d)
        remove_file d, true
        if d.end_with?('/')
          mkdir_p d
          copy_file s, d + File.basename(s)
        else
          mkdir_p File.expand_path('..', d)
          copy_file s, d
        end
        File.utime st.atime, st.mtime, d if preserve
        File.chmod fu_mode(mode, st), d if mode
        File.chown uid, gid, d if uid or gid
      end
    end
  end
  module_function :install

  def user_mask(target)  #:nodoc:
    target.each_char.inject(0) do |mask, chr|
      case chr
      when "u"
        mask | 04700
      when "g"
        mask | 02070
      when "o"
        mask | 01007
      when "a"
        mask | 07777
      else
        raise ArgumentError, "invalid 'who' symbol in file mode: #{chr}"
      end
    end
  end
  private_module_function :user_mask

  def apply_mask(mode, user_mask, op, mode_mask)   #:nodoc:
    case op
    when '='
      (mode & ~user_mask) | (user_mask & mode_mask)
    when '+'
      mode | (user_mask & mode_mask)
    when '-'
      mode & ~(user_mask & mode_mask)
    end
  end
  private_module_function :apply_mask

  def symbolic_modes_to_i(mode_sym, path)  #:nodoc:
    path = File.stat(path) unless File::Stat === path
    mode = path.mode
    mode_sym.split(/,/).inject(mode & 07777) do |current_mode, clause|
      target, *actions = clause.split(/([=+-])/)
      raise ArgumentError, "invalid file mode: #{mode_sym}" if actions.empty?
      target = 'a' if target.empty?
      user_mask = user_mask(target)
      actions.each_slice(2) do |op, perm|
        need_apply = op == '='
        mode_mask = (perm || '').each_char.inject(0) do |mask, chr|
          case chr
          when "r"
            mask | 0444
          when "w"
            mask | 0222
          when "x"
            mask | 0111
          when "X"
            if path.directory?
              mask | 0111
            else
              mask
            end
          when "s"
            mask | 06000
          when "t"
            mask | 01000
          when "u", "g", "o"
            if mask.nonzero?
              current_mode = apply_mask(current_mode, user_mask, op, mask)
            end
            need_apply = false
            copy_mask = user_mask(chr)
            (current_mode & copy_mask) / (copy_mask & 0111) * (user_mask & 0111)
          else
            raise ArgumentError, "invalid 'perm' symbol in file mode: #{chr}"
          end
        end

        if mode_mask.nonzero? || need_apply
          current_mode = apply_mask(current_mode, user_mask, op, mode_mask)
        end
      end
      current_mode
    end
  end
  private_module_function :symbolic_modes_to_i

  def fu_mode(mode, path)  #:nodoc:
    mode.is_a?(String) ? symbolic_modes_to_i(mode, path) : mode
  end
  private_module_function :fu_mode

  def mode_to_s(mode)  #:nodoc:
    mode.is_a?(String) ? mode : "%o" % mode
  end
  private_module_function :mode_to_s

  # Changes permissions on the entries at the paths given in +list+
  # (a single path or an array of paths)
  # to the permissions given by +mode+;
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise:
  #
  # - Modifies each entry that is a regular file using
  #   {File.chmod}[rdoc-ref:File.chmod].
  # - Modifies each entry that is a symbolic link using
  #   {File.lchmod}[rdoc-ref:File.lchmod].
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Argument +mode+ may be either an integer or a string:
  #
  # - \Integer +mode+: represents the permission bits to be set:
  #
  #     FileUtils.chmod(0755, 'src0.txt')
  #     FileUtils.chmod(0644, ['src0.txt', 'src0.dat'])
  #
  # - \String +mode+: represents the permissions to be set:
  #
  #   The string is of the form <tt>[targets][[operator][perms[,perms]]</tt>, where:
  #
  #   - +targets+ may be any combination of these letters:
  #
  #     - <tt>'u'</tt>: permissions apply to the file's owner.
  #     - <tt>'g'</tt>: permissions apply to users in the file's group.
  #     - <tt>'o'</tt>: permissions apply to other users not in the file's group.
  #     - <tt>'a'</tt> (the default): permissions apply to all users.
  #
  #   - +operator+ may be one of these letters:
  #
  #     - <tt>'+'</tt>: adds permissions.
  #     - <tt>'-'</tt>: removes permissions.
  #     - <tt>'='</tt>: sets (replaces) permissions.
  #
  #   - +perms+ (may be repeated, with separating commas)
  #     may be any combination of these letters:
  #
  #     - <tt>'r'</tt>: Read.
  #     - <tt>'w'</tt>: Write.
  #     - <tt>'x'</tt>: Execute (search, for a directory).
  #     - <tt>'X'</tt>: Search (for a directories only;
  #       must be used with <tt>'+'</tt>)
  #     - <tt>'s'</tt>: Uid or gid.
  #     - <tt>'t'</tt>: Sticky bit.
  #
  #   Examples:
  #
  #     FileUtils.chmod('u=wrx,go=rx', 'src1.txt')
  #     FileUtils.chmod('u=wrx,go=rx', '/usr/bin/ruby')
  #
  # Keyword arguments:
  #
  # - <tt>noop: true</tt> - does not change permissions; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.chmod(0755, 'src0.txt', noop: true, verbose: true)
  #     FileUtils.chmod(0644, ['src0.txt', 'src0.dat'], noop: true, verbose: true)
  #     FileUtils.chmod('u=wrx,go=rx', 'src1.txt', noop: true, verbose: true)
  #     FileUtils.chmod('u=wrx,go=rx', '/usr/bin/ruby', noop: true, verbose: true)
  #
  #   Output:
  #
  #     chmod 755 src0.txt
  #     chmod 644 src0.txt src0.dat
  #     chmod u=wrx,go=rx src1.txt
  #     chmod u=wrx,go=rx /usr/bin/ruby
  #
  # Related: FileUtils.chmod_R.
  #
  def chmod(mode, list, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message sprintf('chmod %s %s', mode_to_s(mode), list.join(' ')) if verbose
    return if noop
    list.each do |path|
      Entry_.new(path).chmod(fu_mode(mode, path))
    end
  end
  module_function :chmod

  # Like FileUtils.chmod, but changes permissions recursively.
  #
  def chmod_R(mode, list, noop: nil, verbose: nil, force: nil)
    list = fu_list(list)
    fu_output_message sprintf('chmod -R%s %s %s',
                              (force ? 'f' : ''),
                              mode_to_s(mode), list.join(' ')) if verbose
    return if noop
    list.each do |root|
      Entry_.new(root).traverse do |ent|
        begin
          ent.chmod(fu_mode(mode, ent.path))
        rescue
          raise unless force
        end
      end
    end
  end
  module_function :chmod_R

  # Changes the owner and group on the entries at the paths given in +list+
  # (a single path or an array of paths)
  # to the given +user+ and +group+;
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise:
  #
  # - Modifies each entry that is a regular file using
  #   {File.chown}[rdoc-ref:File.chown].
  # - Modifies each entry that is a symbolic link using
  #   {File.lchown}[rdoc-ref:File.lchown].
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # User and group:
  #
  # - Argument +user+ may be a user name or a user id;
  #   if +nil+ or +-1+, the user is not changed.
  # - Argument +group+ may be a group name or a group id;
  #   if +nil+ or +-1+, the group is not changed.
  # - The user must be a member of the group.
  #
  # Examples:
  #
  #   # One path.
  #   # User and group as string names.
  #   File.stat('src0.txt').uid # => 1004
  #   File.stat('src0.txt').gid # => 1004
  #   FileUtils.chown('user2', 'group1', 'src0.txt')
  #   File.stat('src0.txt').uid # => 1006
  #   File.stat('src0.txt').gid # => 1005
  #
  #   # User and group as uid and gid.
  #   FileUtils.chown(1004, 1004, 'src0.txt')
  #   File.stat('src0.txt').uid # => 1004
  #   File.stat('src0.txt').gid # => 1004
  #
  #   # Array of paths.
  #   FileUtils.chown(1006, 1005, ['src0.txt', 'src0.dat'])
  #
  #   # Directory (not recursive).
  #   FileUtils.chown('user2', 'group1', '.')
  #
  # Keyword arguments:
  #
  # - <tt>noop: true</tt> - does not change permissions; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.chown('user2', 'group1', 'src0.txt', noop: true, verbose: true)
  #     FileUtils.chown(1004, 1004, 'src0.txt', noop: true, verbose: true)
  #     FileUtils.chown(1006, 1005, ['src0.txt', 'src0.dat'], noop: true, verbose: true)
  #     FileUtils.chown('user2', 'group1', path, noop: true, verbose: true)
  #     FileUtils.chown('user2', 'group1', '.', noop: true, verbose: true)
  #
  #   Output:
  #
  #     chown user2:group1 src0.txt
  #     chown 1004:1004 src0.txt
  #     chown 1006:1005 src0.txt src0.dat
  #     chown user2:group1 src0.txt
  #     chown user2:group1 .
  #
  # Related: FileUtils.chown_R.
  #
  def chown(user, group, list, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message sprintf('chown %s %s',
                              (group ? "#{user}:#{group}" : user || ':'),
                              list.join(' ')) if verbose
    return if noop
    uid = fu_get_uid(user)
    gid = fu_get_gid(group)
    list.each do |path|
      Entry_.new(path).chown uid, gid
    end
  end
  module_function :chown

  # Like FileUtils.chown, but changes owner and group recursively.
  #
  def chown_R(user, group, list, noop: nil, verbose: nil, force: nil)
    list = fu_list(list)
    fu_output_message sprintf('chown -R%s %s %s',
                              (force ? 'f' : ''),
                              (group ? "#{user}:#{group}" : user || ':'),
                              list.join(' ')) if verbose
    return if noop
    uid = fu_get_uid(user)
    gid = fu_get_gid(group)
    list.each do |root|
      Entry_.new(root).traverse do |ent|
        begin
          ent.chown uid, gid
        rescue
          raise unless force
        end
      end
    end
  end
  module_function :chown_R

  def fu_get_uid(user)   #:nodoc:
    return nil unless user
    case user
    when Integer
      user
    when /\A\d+\z/
      user.to_i
    else
      require 'etc'
      Etc.getpwnam(user) ? Etc.getpwnam(user).uid : nil
    end
  end
  private_module_function :fu_get_uid

  def fu_get_gid(group)   #:nodoc:
    return nil unless group
    case group
    when Integer
      group
    when /\A\d+\z/
      group.to_i
    else
      require 'etc'
      Etc.getgrnam(group) ? Etc.getgrnam(group).gid : nil
    end
  end
  private_module_function :fu_get_gid

  # Updates modification times (mtime) and access times (atime)
  # of the entries given by the paths in +list+
  # (a single path or an array of paths);
  # returns +list+ if it is an array, <tt>[list]</tt> otherwise.
  #
  # By default, creates an empty file for any path to a non-existent entry;
  # use keyword argument +nocreate+ to raise an exception instead.
  #
  # Argument +list+ or its elements
  # should be {interpretable as paths}[rdoc-ref:FileUtils@Path+Arguments].
  #
  # Examples:
  #
  #   # Single path.
  #   f = File.new('src0.txt') # Existing file.
  #   f.atime # => 2022-06-10 11:11:21.200277 -0700
  #   f.mtime # => 2022-06-10 11:11:21.200277 -0700
  #   FileUtils.touch('src0.txt')
  #   f = File.new('src0.txt')
  #   f.atime # => 2022-06-11 08:28:09.8185343 -0700
  #   f.mtime # => 2022-06-11 08:28:09.8185343 -0700
  #
  #   # Array of paths.
  #   FileUtils.touch(['src0.txt', 'src0.dat'])
  #
  # Keyword arguments:
  #
  # - <tt>mtime: <i>time</i></tt> - sets the entry's mtime to the given time,
  #   instead of the current time.
  # - <tt>nocreate: true</tt> - raises an exception if the entry does not exist.
  # - <tt>noop: true</tt> - does not touch entries; returns +nil+.
  # - <tt>verbose: true</tt> - prints an equivalent command:
  #
  #     FileUtils.touch('src0.txt', noop: true, verbose: true)
  #     FileUtils.touch(['src0.txt', 'src0.dat'], noop: true, verbose: true)
  #     FileUtils.touch(path, noop: true, verbose: true)
  #
  #   Output:
  #
  #     touch src0.txt
  #     touch src0.txt src0.dat
  #     touch src0.txt
  #
  # Related: FileUtils.uptodate?.
  #
  def touch(list, noop: nil, verbose: nil, mtime: nil, nocreate: nil)
    list = fu_list(list)
    t = mtime
    if verbose
      fu_output_message "touch #{nocreate ? '-c ' : ''}#{t ? t.strftime('-t %Y%m%d%H%M.%S ') : ''}#{list.join ' '}"
    end
    return if noop
    list.each do |path|
      created = nocreate
      begin
        File.utime(t, t, path)
      rescue Errno::ENOENT
        raise if created
        File.open(path, 'a') {
          ;
        }
        created = true
        retry if t
      end
    end
  end
  module_function :touch

  private

  module StreamUtils_ # :nodoc:

    private

    case (defined?(::RbConfig) ? ::RbConfig::CONFIG['host_os'] : ::RUBY_PLATFORM)
    when /mswin|mingw/
      def fu_windows?; true end #:nodoc:
    else
      def fu_windows?; false end #:nodoc:
    end

    def fu_copy_stream0(src, dest, blksize = nil)   #:nodoc:
      IO.copy_stream(src, dest)
    end

    def fu_stream_blksize(*streams) #:nodoc:
      streams.each do |s|
        next unless s.respond_to?(:stat)
        size = fu_blksize(s.stat)
        return size if size
      end
      fu_default_blksize()
    end

    def fu_blksize(st) #:nodoc:
      s = st.blksize
      return nil unless s
      return nil if s == 0
      s
    end

    def fu_default_blksize #:nodoc:
      1024
    end
  end

  include StreamUtils_
  extend StreamUtils_

  class Entry_   #:nodoc: internal use only
    include StreamUtils_

    def initialize(a, b = nil, deref = false)
      @prefix = @rel = @path = nil
      if b
        @prefix = a
        @rel = b
      else
        @path = a
      end
      @deref = deref
      @stat = nil
      @lstat = nil
    end

    def inspect
      "\#<#{self.class} #{path()}>"
    end

    def path
      if @path
        File.path(@path)
      else
        join(@prefix, @rel)
      end
    end

    def prefix
      @prefix || @path
    end

    def rel
      @rel
    end

    def dereference?
      @deref
    end

    def exist?
      begin
        lstat
        true
      rescue Errno::ENOENT
        false
      end
    end

    def file?
      s = lstat!
      s and s.file?
    end

    def directory?
      s = lstat!
      s and s.directory?
    end

    def symlink?
      s = lstat!
      s and s.symlink?
    end

    def chardev?
      s = lstat!
      s and s.chardev?
    end

    def blockdev?
      s = lstat!
      s and s.blockdev?
    end

    def socket?
      s = lstat!
      s and s.socket?
    end

    def pipe?
      s = lstat!
      s and s.pipe?
    end

    S_IF_DOOR = 0xD000

    def door?
      s = lstat!
      s and (s.mode & 0xF000 == S_IF_DOOR)
    end

    def entries
      opts = {}
      opts[:encoding] = fu_windows? ? ::Encoding::UTF_8 : path.encoding

      files = Dir.children(path, **opts)

      untaint = RUBY_VERSION < '2.7'
      files.map {|n| Entry_.new(prefix(), join(rel(), untaint ? n.untaint : n)) }
    end

    def stat
      return @stat if @stat
      if lstat() and lstat().symlink?
        @stat = File.stat(path())
      else
        @stat = lstat()
      end
      @stat
    end

    def stat!
      return @stat if @stat
      if lstat! and lstat!.symlink?
        @stat = File.stat(path())
      else
        @stat = lstat!
      end
      @stat
    rescue SystemCallError
      nil
    end

    def lstat
      if dereference?
        @lstat ||= File.stat(path())
      else
        @lstat ||= File.lstat(path())
      end
    end

    def lstat!
      lstat()
    rescue SystemCallError
      nil
    end

    def chmod(mode)
      if symlink?
        File.lchmod mode, path() if have_lchmod?
      else
        File.chmod mode, path()
      end
    rescue Errno::EOPNOTSUPP
    end

    def chown(uid, gid)
      if symlink?
        File.lchown uid, gid, path() if have_lchown?
      else
        File.chown uid, gid, path()
      end
    end

    def link(dest)
      case
      when directory?
        if !File.exist?(dest) and descendant_directory?(dest, path)
          raise ArgumentError, "cannot link directory %s to itself %s" % [path, dest]
        end
        begin
          Dir.mkdir dest
        rescue
          raise unless File.directory?(dest)
        end
      else
        File.link path(), dest
      end
    end

    def copy(dest)
      lstat
      case
      when file?
        copy_file dest
      when directory?
        if !File.exist?(dest) and descendant_directory?(dest, path)
          raise ArgumentError, "cannot copy directory %s to itself %s" % [path, dest]
        end
        begin
          Dir.mkdir dest
        rescue
          raise unless File.directory?(dest)
        end
      when symlink?
        File.symlink File.readlink(path()), dest
      when chardev?, blockdev?
        raise "cannot handle device file"
      when socket?
        begin
          require 'socket'
        rescue LoadError
          raise "cannot handle socket"
        else
          raise "cannot handle socket" unless defined?(UNIXServer)
        end
        UNIXServer.new(dest).close
        File.chmod lstat().mode, dest
      when pipe?
        raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
        File.mkfifo dest, lstat().mode
      when door?
        raise "cannot handle door: #{path()}"
      else
        raise "unknown file type: #{path()}"
      end
    end

    def copy_file(dest)
      File.open(path()) do |s|
        File.open(dest, 'wb', s.stat.mode) do |f|
          IO.copy_stream(s, f)
        end
      end
    end

    def copy_metadata(path)
      st = lstat()
      if !st.symlink?
        File.utime st.atime, st.mtime, path
      end
      mode = st.mode
      begin
        if st.symlink?
          begin
            File.lchown st.uid, st.gid, path
          rescue NotImplementedError
          end
        else
          File.chown st.uid, st.gid, path
        end
      rescue Errno::EPERM, Errno::EACCES
        # clear setuid/setgid
        mode &= 01777
      end
      if st.symlink?
        begin
          File.lchmod mode, path
        rescue NotImplementedError, Errno::EOPNOTSUPP
        end
      else
        File.chmod mode, path
      end
    end

    def remove
      if directory?
        remove_dir1
      else
        remove_file
      end
    end

    def remove_dir1
      platform_support {
        Dir.rmdir path().chomp(?/)
      }
    end

    def remove_file
      platform_support {
        File.unlink path
      }
    end

    def platform_support
      return yield unless fu_windows?
      first_time_p = true
      begin
        yield
      rescue Errno::ENOENT
        raise
      rescue => err
        if first_time_p
          first_time_p = false
          begin
            File.chmod 0700, path()   # Windows does not have symlink
            retry
          rescue SystemCallError
          end
        end
        raise err
      end
    end

    def preorder_traverse
      stack = [self]
      while ent = stack.pop
        yield ent
        stack.concat ent.entries.reverse if ent.directory?
      end
    end

    alias traverse preorder_traverse

    def postorder_traverse
      if directory?
        begin
          children = entries()
        rescue Errno::EACCES
          # Failed to get the list of children.
          # Assuming there is no children, try to process the parent directory.
          yield self
          return
        end

        children.each do |ent|
          ent.postorder_traverse do |e|
            yield e
          end
        end
      end
      yield self
    end

    def wrap_traverse(pre, post)
      pre.call self
      if directory?
        entries.each do |ent|
          ent.wrap_traverse pre, post
        end
      end
      post.call self
    end

    private

    @@fileutils_rb_have_lchmod = nil

    def have_lchmod?
      # This is not MT-safe, but it does not matter.
      if @@fileutils_rb_have_lchmod == nil
        @@fileutils_rb_have_lchmod = check_have_lchmod?
      end
      @@fileutils_rb_have_lchmod
    end

    def check_have_lchmod?
      return false unless File.respond_to?(:lchmod)
      File.lchmod 0
      return true
    rescue NotImplementedError
      return false
    end

    @@fileutils_rb_have_lchown = nil

    def have_lchown?
      # This is not MT-safe, but it does not matter.
      if @@fileutils_rb_have_lchown == nil
        @@fileutils_rb_have_lchown = check_have_lchown?
      end
      @@fileutils_rb_have_lchown
    end

    def check_have_lchown?
      return false unless File.respond_to?(:lchown)
      File.lchown nil, nil
      return true
    rescue NotImplementedError
      return false
    end

    def join(dir, base)
      return File.path(dir) if not base or base == '.'
      return File.path(base) if not dir or dir == '.'
      begin
        File.join(dir, base)
      rescue EncodingError
        if fu_windows?
          File.join(dir.encode(::Encoding::UTF_8), base.encode(::Encoding::UTF_8))
        else
          raise
        end
      end
    end

    if File::ALT_SEPARATOR
      DIRECTORY_TERM = "(?=[/#{Regexp.quote(File::ALT_SEPARATOR)}]|\\z)"
    else
      DIRECTORY_TERM = "(?=/|\\z)"
    end

    def descendant_directory?(descendant, ascendant)
      if File::FNM_SYSCASE.nonzero?
        File.expand_path(File.dirname(descendant)).casecmp(File.expand_path(ascendant)) == 0
      else
        File.expand_path(File.dirname(descendant)) == File.expand_path(ascendant)
      end
    end
  end   # class Entry_

  def fu_list(arg)   #:nodoc:
    [arg].flatten.map {|path| File.path(path) }
  end
  private_module_function :fu_list

  def fu_each_src_dest(src, dest)   #:nodoc:
    fu_each_src_dest0(src, dest) do |s, d|
      raise ArgumentError, "same file: #{s} and #{d}" if fu_same?(s, d)
      yield s, d
    end
  end
  private_module_function :fu_each_src_dest

  def fu_each_src_dest0(src, dest, target_directory = true)   #:nodoc:
    if tmp = Array.try_convert(src)
      tmp.each do |s|
        s = File.path(s)
        yield s, (target_directory ? File.join(dest, File.basename(s)) : dest)
      end
    else
      src = File.path(src)
      if target_directory and File.directory?(dest)
        yield src, File.join(dest, File.basename(src))
      else
        yield src, File.path(dest)
      end
    end
  end
  private_module_function :fu_each_src_dest0

  def fu_same?(a, b)   #:nodoc:
    File.identical?(a, b)
  end
  private_module_function :fu_same?

  def fu_output_message(msg)   #:nodoc:
    output = @fileutils_output if defined?(@fileutils_output)
    output ||= $stdout
    if defined?(@fileutils_label)
      msg = @fileutils_label + msg
    end
    output.puts msg
  end
  private_module_function :fu_output_message

  def fu_split_path(path) #:nodoc:
    path = File.path(path)
    list = []
    until (parent, base = File.split(path); parent == path or parent == ".")
      list << base
      path = parent
    end
    list << path
    list.reverse!
  end
  private_module_function :fu_split_path

  def fu_relative_components_from(target, base) #:nodoc:
    i = 0
    while target[i]&.== base[i]
      i += 1
    end
    Array.new(base.size-i, '..').concat(target[i..-1])
  end
  private_module_function :fu_relative_components_from

  def fu_clean_components(*comp) #:nodoc:
    comp.shift while comp.first == "."
    return comp if comp.empty?
    clean = [comp.shift]
    path = File.join(*clean, "") # ending with File::SEPARATOR
    while c = comp.shift
      if c == ".." and clean.last != ".." and !(fu_have_symlink? && File.symlink?(path))
        clean.pop
        path.chomp!(%r((?<=\A|/)[^/]+/\z), "")
      else
        clean << c
        path << c << "/"
      end
    end
    clean
  end
  private_module_function :fu_clean_components

  if fu_windows?
    def fu_starting_path?(path) #:nodoc:
      path&.start_with?(%r(\w:|/))
    end
  else
    def fu_starting_path?(path) #:nodoc:
      path&.start_with?("/")
    end
  end
  private_module_function :fu_starting_path?

  # This hash table holds command options.
  OPT_TABLE = {}    #:nodoc: internal use only
  (private_instance_methods & methods(false)).inject(OPT_TABLE) {|tbl, name|
    (tbl[name.to_s] = instance_method(name).parameters).map! {|t, n| n if t == :key}.compact!
    tbl
  }

  public

  # Returns an array of the string names of \FileUtils methods
  # that accept one or more keyword arguments:
  #
  #   FileUtils.commands.sort.take(3) # => ["cd", "chdir", "chmod"]
  #
  def self.commands
    OPT_TABLE.keys
  end

  # Returns an array of the string keyword names:
  #
  #   FileUtils.options.take(3) # => ["noop", "verbose", "force"]
  #
  def self.options
    OPT_TABLE.values.flatten.uniq.map {|sym| sym.to_s }
  end

  # Returns +true+ if method +mid+ accepts the given option +opt+, +false+ otherwise;
  # the arguments may be strings or symbols:
  #
  #   FileUtils.have_option?(:chmod, :noop) # => true
  #   FileUtils.have_option?('chmod', 'secure') # => false
  #
  def self.have_option?(mid, opt)
    li = OPT_TABLE[mid.to_s] or raise ArgumentError, "no such method: #{mid}"
    li.include?(opt)
  end

  # Returns an array of the string keyword name for method +mid+;
  # the argument may be a string or a symbol:
  #
  #   FileUtils.options_of(:rm) # => ["force", "noop", "verbose"]
  #   FileUtils.options_of('mv') # => ["force", "noop", "verbose", "secure"]
  #
  def self.options_of(mid)
    OPT_TABLE[mid.to_s].map {|sym| sym.to_s }
  end

  # Returns an array of the string method names of the methods
  # that accept the given keyword option +opt+;
  # the argument must be a symbol:
  #
  #   FileUtils.collect_method(:preserve) # => ["cp", "copy", "cp_r", "install"]
  #
  def self.collect_method(opt)
    OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
  end

  private

  LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern) # :nodoc:
  module LowMethods # :nodoc: internal use only
    private
    def _do_nothing(*)end
    ::FileUtils::LOW_METHODS.map {|name| alias_method name, :_do_nothing}
  end

  METHODS = singleton_methods() - [:private_module_function,                  # :nodoc:
      :commands, :options, :have_option?, :options_of, :collect_method]

  #
  # This module has all methods of FileUtils module, but it outputs messages
  # before acting.  This equates to passing the <tt>:verbose</tt> flag to
  # methods in FileUtils.
  #
  module Verbose
    include FileUtils
    names = ::FileUtils.collect_method(:verbose)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, verbose: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::FileUtils::METHODS)
    end
  end

  #
  # This module has all methods of FileUtils module, but never changes
  # files/directories.  This equates to passing the <tt>:noop</tt> flag
  # to methods in FileUtils.
  #
  module NoWrite
    include FileUtils
    include LowMethods
    names = ::FileUtils.collect_method(:noop)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, noop: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::FileUtils::METHODS)
    end
  end

  #
  # This module has all methods of FileUtils module, but never changes
  # files/directories, with printing message before acting.
  # This equates to passing the <tt>:noop</tt> and <tt>:verbose</tt> flag
  # to methods in FileUtils.
  #
  module DryRun
    include FileUtils
    include LowMethods
    names = ::FileUtils.collect_method(:noop)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, noop: true, verbose: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::FileUtils::METHODS)
    end
  end

end
PK*J[��\llshare/ruby/weakref.rbnu�[���# frozen_string_literal: true
require "delegate"

# Weak Reference class that allows a referenced object to be
# garbage-collected.
#
# A WeakRef may be used exactly like the object it references.
#
# Usage:
#
#   foo = Object.new            # create a new object instance
#   p foo.to_s                  # original's class
#   foo = WeakRef.new(foo)      # reassign foo with WeakRef instance
#   p foo.to_s                  # should be same class
#   GC.start                    # start the garbage collector
#   p foo.to_s                  # should raise exception (recycled)
#

class WeakRef < Delegator
  VERSION = "0.1.3"

  ##
  # RefError is raised when a referenced object has been recycled by the
  # garbage collector

  class RefError < StandardError
  end

  @@__map = ::ObjectSpace::WeakMap.new

  ##
  # Creates a weak reference to +orig+

  def initialize(orig)
    case orig
    when true, false, nil
      @delegate_sd_obj = orig
    else
      @@__map[self] = orig
    end
    super
  end

  def __getobj__ # :nodoc:
    @@__map[self] or defined?(@delegate_sd_obj) ? @delegate_sd_obj :
      Kernel::raise(RefError, "Invalid Reference - probably recycled", Kernel::caller(2))
  end

  def __setobj__(obj) # :nodoc:
  end

  ##
  # Returns true if the referenced object is still alive.

  def weakref_alive?
    @@__map.key?(self) or defined?(@delegate_sd_obj)
  end
end
PK*J[�QӴ.�.share/ruby/delegate.rbnu�[���# frozen_string_literal: true
# = delegate -- Support for the Delegation Pattern
#
# Documentation by James Edward Gray II and Gavin Sinclair

##
# This library provides three different ways to delegate method calls to an
# object.  The easiest to use is SimpleDelegator.  Pass an object to the
# constructor and all methods supported by the object will be delegated.  This
# object can be changed later.
#
# Going a step further, the top level DelegateClass method allows you to easily
# setup delegation through class inheritance.  This is considerably more
# flexible and thus probably the most common use for this library.
#
# Finally, if you need full control over the delegation scheme, you can inherit
# from the abstract class Delegator and customize as needed.  (If you find
# yourself needing this control, have a look at Forwardable which is also in
# the standard library.  It may suit your needs better.)
#
# SimpleDelegator's implementation serves as a nice example of the use of
# Delegator:
#
#   require 'delegate'
#
#   class SimpleDelegator < Delegator
#     def __getobj__
#       @delegate_sd_obj # return object we are delegating to, required
#     end
#
#     def __setobj__(obj)
#       @delegate_sd_obj = obj # change delegation object,
#                              # a feature we're providing
#     end
#   end
#
# == Notes
#
# Be advised, RDoc will not detect delegated methods.
#
class Delegator < BasicObject
  VERSION = "0.4.0"

  kernel = ::Kernel.dup
  kernel.class_eval do
    alias __raise__ raise
    [:to_s, :inspect, :!~, :===, :<=>, :hash].each do |m|
      undef_method m
    end
    private_instance_methods.each do |m|
      if /\Ablock_given\?\z|\Aiterator\?\z|\A__.*__\z/ =~ m
        next
      end
      undef_method m
    end
  end
  include kernel

  # :stopdoc:
  def self.const_missing(n)
    ::Object.const_get(n)
  end
  # :startdoc:

  ##
  # :method: raise
  # Use #__raise__ if your Delegator does not have a object to delegate the
  # #raise method call.
  #

  #
  # Pass in the _obj_ to delegate method calls to.  All methods supported by
  # _obj_ will be delegated to.
  #
  def initialize(obj)
    __setobj__(obj)
  end

  #
  # Handles the magic of delegation through \_\_getobj\_\_.
  #
  ruby2_keywords def method_missing(m, *args, &block)
    r = true
    target = self.__getobj__ {r = false}

    if r && target_respond_to?(target, m, false)
      target.__send__(m, *args, &block)
    elsif ::Kernel.method_defined?(m) || ::Kernel.private_method_defined?(m)
      ::Kernel.instance_method(m).bind_call(self, *args, &block)
    else
      super(m, *args, &block)
    end
  end

  #
  # Checks for a method provided by this the delegate object by forwarding the
  # call through \_\_getobj\_\_.
  #
  def respond_to_missing?(m, include_private)
    r = true
    target = self.__getobj__ {r = false}
    r &&= target_respond_to?(target, m, include_private)
    if r && include_private && !target_respond_to?(target, m, false)
      warn "delegator does not forward private method \##{m}", uplevel: 3
      return false
    end
    r
  end

  KERNEL_RESPOND_TO = ::Kernel.instance_method(:respond_to?)
  private_constant :KERNEL_RESPOND_TO

  # Handle BasicObject instances
  private def target_respond_to?(target, m, include_private)
    case target
    when Object
      target.respond_to?(m, include_private)
    else
      if KERNEL_RESPOND_TO.bind_call(target, :respond_to?)
        target.respond_to?(m, include_private)
      else
        KERNEL_RESPOND_TO.bind_call(target, m, include_private)
      end
    end
  end

  #
  # Returns the methods available to this delegate object as the union
  # of this object's and \_\_getobj\_\_ methods.
  #
  def methods(all=true)
    __getobj__.methods(all) | super
  end

  #
  # Returns the methods available to this delegate object as the union
  # of this object's and \_\_getobj\_\_ public methods.
  #
  def public_methods(all=true)
    __getobj__.public_methods(all) | super
  end

  #
  # Returns the methods available to this delegate object as the union
  # of this object's and \_\_getobj\_\_ protected methods.
  #
  def protected_methods(all=true)
    __getobj__.protected_methods(all) | super
  end

  # Note: no need to specialize private_methods, since they are not forwarded

  #
  # Returns true if two objects are considered of equal value.
  #
  def ==(obj)
    return true if obj.equal?(self)
    self.__getobj__ == obj
  end

  #
  # Returns true if two objects are not considered of equal value.
  #
  def !=(obj)
    return false if obj.equal?(self)
    __getobj__ != obj
  end

  #
  # Returns true if two objects are considered of equal value.
  #
  def eql?(obj)
    return true if obj.equal?(self)
    obj.eql?(__getobj__)
  end

  #
  # Delegates ! to the \_\_getobj\_\_
  #
  def !
    !__getobj__
  end

  #
  # This method must be overridden by subclasses and should return the object
  # method calls are being delegated to.
  #
  def __getobj__
    __raise__ ::NotImplementedError, "need to define '__getobj__'"
  end

  #
  # This method must be overridden by subclasses and change the object delegate
  # to _obj_.
  #
  def __setobj__(obj)
    __raise__ ::NotImplementedError, "need to define '__setobj__'"
  end

  #
  # Serialization support for the object returned by \_\_getobj\_\_.
  #
  def marshal_dump
    ivars = instance_variables.reject {|var| /\A@delegate_/ =~ var}
    [
      :__v2__,
      ivars, ivars.map {|var| instance_variable_get(var)},
      __getobj__
    ]
  end

  #
  # Reinitializes delegation from a serialized object.
  #
  def marshal_load(data)
    version, vars, values, obj = data
    if version == :__v2__
      vars.each_with_index {|var, i| instance_variable_set(var, values[i])}
      __setobj__(obj)
    else
      __setobj__(data)
    end
  end

  def initialize_clone(obj, freeze: nil) # :nodoc:
    self.__setobj__(obj.__getobj__.clone(freeze: freeze))
  end
  def initialize_dup(obj) # :nodoc:
    self.__setobj__(obj.__getobj__.dup)
  end
  private :initialize_clone, :initialize_dup

  ##
  # :method: freeze
  # Freeze both the object returned by \_\_getobj\_\_ and self.
  #
  def freeze
    __getobj__.freeze
    super()
  end

  @delegator_api = self.public_instance_methods
  def self.public_api # :nodoc:
    @delegator_api
  end
end

##
# A concrete implementation of Delegator, this class provides the means to
# delegate all supported method calls to the object passed into the constructor
# and even to change the object being delegated to at a later time with
# #__setobj__.
#
#   class User
#     def born_on
#       Date.new(1989, 9, 10)
#     end
#   end
#
#   require 'delegate'
#
#   class UserDecorator < SimpleDelegator
#     def birth_year
#       born_on.year
#     end
#   end
#
#   decorated_user = UserDecorator.new(User.new)
#   decorated_user.birth_year  #=> 1989
#   decorated_user.__getobj__  #=> #<User: ...>
#
# A SimpleDelegator instance can take advantage of the fact that SimpleDelegator
# is a subclass of +Delegator+ to call <tt>super</tt> to have methods called on
# the object being delegated to.
#
#   class SuperArray < SimpleDelegator
#     def [](*args)
#       super + 1
#     end
#   end
#
#   SuperArray.new([1])[0]  #=> 2
#
# Here's a simple example that takes advantage of the fact that
# SimpleDelegator's delegation object can be changed at any time.
#
#   class Stats
#     def initialize
#       @source = SimpleDelegator.new([])
#     end
#
#     def stats(records)
#       @source.__setobj__(records)
#
#       "Elements:  #{@source.size}\n" +
#       " Non-Nil:  #{@source.compact.size}\n" +
#       "  Unique:  #{@source.uniq.size}\n"
#     end
#   end
#
#   s = Stats.new
#   puts s.stats(%w{James Edward Gray II})
#   puts
#   puts s.stats([1, 2, 3, nil, 4, 5, 1, 2])
#
# Prints:
#
#   Elements:  4
#    Non-Nil:  4
#     Unique:  4
#
#   Elements:  8
#    Non-Nil:  7
#     Unique:  6
#
class SimpleDelegator < Delegator
  # Returns the current object method calls are being delegated to.
  def __getobj__
    unless defined?(@delegate_sd_obj)
      return yield if block_given?
      __raise__ ::ArgumentError, "not delegated"
    end
    @delegate_sd_obj
  end

  #
  # Changes the delegate object to _obj_.
  #
  # It's important to note that this does *not* cause SimpleDelegator's methods
  # to change.  Because of this, you probably only want to change delegation
  # to objects of the same type as the original delegate.
  #
  # Here's an example of changing the delegation object.
  #
  #   names = SimpleDelegator.new(%w{James Edward Gray II})
  #   puts names[1]    # => Edward
  #   names.__setobj__(%w{Gavin Sinclair})
  #   puts names[1]    # => Sinclair
  #
  def __setobj__(obj)
    __raise__ ::ArgumentError, "cannot delegate to self" if self.equal?(obj)
    @delegate_sd_obj = obj
  end
end

def Delegator.delegating_block(mid) # :nodoc:
  lambda do |*args, &block|
    target = self.__getobj__
    target.__send__(mid, *args, &block)
  end.ruby2_keywords
end

#
# The primary interface to this library.  Use to setup delegation when defining
# your class.
#
#   class MyClass < DelegateClass(ClassToDelegateTo) # Step 1
#     def initialize
#       super(obj_of_ClassToDelegateTo)              # Step 2
#     end
#   end
#
# or:
#
#   MyClass = DelegateClass(ClassToDelegateTo) do    # Step 1
#     def initialize
#       super(obj_of_ClassToDelegateTo)              # Step 2
#     end
#   end
#
# Here's a sample of use from Tempfile which is really a File object with a
# few special rules about storage location and when the File should be
# deleted.  That makes for an almost textbook perfect example of how to use
# delegation.
#
#   class Tempfile < DelegateClass(File)
#     # constant and class member data initialization...
#
#     def initialize(basename, tmpdir=Dir::tmpdir)
#       # build up file path/name in var tmpname...
#
#       @tmpfile = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL, 0600)
#
#       # ...
#
#       super(@tmpfile)
#
#       # below this point, all methods of File are supported...
#     end
#
#     # ...
#   end
#
def DelegateClass(superclass, &block)
  klass = Class.new(Delegator)
  ignores = [*::Delegator.public_api, :to_s, :inspect, :=~, :!~, :===]
  protected_instance_methods = superclass.protected_instance_methods
  protected_instance_methods -= ignores
  public_instance_methods = superclass.public_instance_methods
  public_instance_methods -= ignores
  klass.module_eval do
    def __getobj__ # :nodoc:
      unless defined?(@delegate_dc_obj)
        return yield if block_given?
        __raise__ ::ArgumentError, "not delegated"
      end
      @delegate_dc_obj
    end
    def __setobj__(obj)  # :nodoc:
      __raise__ ::ArgumentError, "cannot delegate to self" if self.equal?(obj)
      @delegate_dc_obj = obj
    end
    protected_instance_methods.each do |method|
      define_method(method, Delegator.delegating_block(method))
      protected method
    end
    public_instance_methods.each do |method|
      define_method(method, Delegator.delegating_block(method))
    end
  end
  klass.define_singleton_method :public_instance_methods do |all=true|
    super(all) | superclass.public_instance_methods
  end
  klass.define_singleton_method :protected_instance_methods do |all=true|
    super(all) | superclass.protected_instance_methods
  end
  klass.define_singleton_method :instance_methods do |all=true|
    super(all) | superclass.instance_methods
  end
  klass.define_singleton_method :public_instance_method do |name|
    super(name)
  rescue NameError
    raise unless self.public_instance_methods.include?(name)
    superclass.public_instance_method(name)
  end
  klass.define_singleton_method :instance_method do |name|
    super(name)
  rescue NameError
    raise unless self.instance_methods.include?(name)
    superclass.instance_method(name)
  end
  klass.module_eval(&block) if block
  return klass
end
PK*J[6B�((share/ruby/English.rbnu�[���# frozen_string_literal: true
#  Include the English library file in a Ruby script, and you can
#  reference the global variables such as <code>$_</code> using less
#  cryptic names, listed below.
#
#  Without 'English':
#
#      $\ = ' -- '
#      "waterbuffalo" =~ /buff/
#      print $', $$, "\n"
#
#  With English:
#
#      require "English"
#
#      $OUTPUT_FIELD_SEPARATOR = ' -- '
#      "waterbuffalo" =~ /buff/
#      print $POSTMATCH, $PID, "\n"
#
#  Below is a full list of descriptive aliases and their associated global
#  variable:
#
#  $ERROR_INFO::              $!
#  $ERROR_POSITION::          $@
#  $FS::                      $;
#  $FIELD_SEPARATOR::         $;
#  $OFS::                     $,
#  $OUTPUT_FIELD_SEPARATOR::  $,
#  $RS::                      $/
#  $INPUT_RECORD_SEPARATOR::  $/
#  $ORS::                     $\
#  $OUTPUT_RECORD_SEPARATOR:: $\
#  $INPUT_LINE_NUMBER::       $.
#  $NR::                      $.
#  $LAST_READ_LINE::          $_
#  $DEFAULT_OUTPUT::          $>
#  $DEFAULT_INPUT::           $<
#  $PID::                     $$
#  $PROCESS_ID::              $$
#  $CHILD_STATUS::            $?
#  $LAST_MATCH_INFO::         $~
#  $ARGV::                    $*
#  $MATCH::                   $&
#  $PREMATCH::                $`
#  $POSTMATCH::               $'
#  $LAST_PAREN_MATCH::        $+
#
module English end if false

# The exception object passed to +raise+.
alias $ERROR_INFO              $!

# The stack backtrace generated by the last
# exception. See Kernel#caller for details. Thread local.
alias $ERROR_POSITION          $@

# The default separator pattern used by String#split.  May be set from
# the command line using the <code>-F</code> flag.
alias $FS                      $;
alias $FIELD_SEPARATOR         $;

# The separator string output between the parameters to methods such
# as Kernel#print and Array#join. Defaults to +nil+, which adds no
# text.

# The separator string output between the parameters to methods such
# as Kernel#print and Array#join. Defaults to +nil+, which adds no
# text.
alias $OFS                     $,
alias $OUTPUT_FIELD_SEPARATOR  $,

# The input record separator (newline by default). This is the value
# that routines such as Kernel#gets use to determine record
# boundaries. If set to +nil+, +gets+ will read the entire file.
alias $RS                      $/
alias $INPUT_RECORD_SEPARATOR  $/

# The string appended to the output of every call to methods such as
# Kernel#print and IO#write. The default value is +nil+.
alias $ORS                     $\
alias $OUTPUT_RECORD_SEPARATOR $\

# The number of the last line read from the current input file.
alias $NR                      $.
alias $INPUT_LINE_NUMBER       $.

# The last line read by Kernel#gets or
# Kernel#readline. Many string-related functions in the
# Kernel module operate on <code>$_</code> by default. The variable is
# local to the current scope. Thread local.
alias $LAST_READ_LINE          $_

# The destination of output for Kernel#print
# and Kernel#printf. The default value is
# <code>$stdout</code>.
alias $DEFAULT_OUTPUT          $>

# An object that provides access to the concatenation
# of the contents of all the files
# given as command-line arguments, or <code>$stdin</code>
# (in the case where there are no
# arguments). <code>$<</code> supports methods similar to a
# File object:
# +inmode+, +close+,
# <code>closed?</code>, +each+,
# <code>each_byte</code>, <code>each_line</code>,
# +eof+, <code>eof?</code>, +file+,
# +filename+, +fileno+,
# +getc+, +gets+, +lineno+,
# <code>lineno=</code>, +path+,
# +pos+, <code>pos=</code>,
# +read+, +readchar+,
# +readline+, +readlines+,
# +rewind+, +seek+, +skip+,
# +tell+, <code>to_a</code>, <code>to_i</code>,
# <code>to_io</code>, <code>to_s</code>, along with the
# methods in Enumerable. The method +file+
# returns a File object for the file currently
# being read. This may change as <code>$<</code> reads
# through the files on the command line. Read only.
alias $DEFAULT_INPUT           $<

# The process number of the program being executed. Read only.
alias $PID                     $$
alias $PROCESS_ID              $$

# The exit status of the last child process to terminate. Read
# only. Thread local.
alias $CHILD_STATUS            $?

# A +MatchData+ object that encapsulates the results of a successful
# pattern match. The variables <code>$&</code>, <code>$`</code>, <code>$'</code>,
# and <code>$1</code> to <code>$9</code> are all derived from
# <code>$~</code>. Assigning to <code>$~</code> changes the values of these
# derived variables.  This variable is local to the current
# scope.
alias $LAST_MATCH_INFO         $~

# An array of strings containing the command-line
# options from the invocation of the program. Options
# used by the Ruby interpreter will have been
# removed. Read only. Also known simply as +ARGV+.
alias $ARGV                    $*

# The string matched by the last successful pattern
# match. This variable is local to the current
# scope. Read only.
alias $MATCH                   $&

# The string preceding the match in the last
# successful pattern match. This variable is local to
# the current scope. Read only.
alias $PREMATCH                $`

# The string following the match in the last
# successful pattern match. This variable is local to
# the current scope. Read only.
alias $POSTMATCH               $'

# The contents of the highest-numbered group matched in the last
# successful pattern match. Thus, in <code>"cat" =~ /(c|a)(t|z)/</code>,
# <code>$+</code> will be set to "t".  This variable is local to the
# current scope. Read only.
alias $LAST_PAREN_MATCH        $+
PK*J[��!vmvm&share/ruby/unicode_normalize/tables.rbnu�[���# coding: us-ascii
# frozen_string_literal: true

# automatically generated by template/unicode_norm_gen.tmpl

module UnicodeNormalize  # :nodoc:
  accents = "" \
    "[\u0300-\u034E" \
    "\u0350-\u036F" \
    "\u0483-\u0487" \
    "\u0591-\u05BD" \
    "\u05BF" \
    "\u05C1\u05C2" \
    "\u05C4\u05C5" \
    "\u05C7" \
    "\u0610-\u061A" \
    "\u064B-\u065F" \
    "\u0670" \
    "\u06D6-\u06DC" \
    "\u06DF-\u06E4" \
    "\u06E7\u06E8" \
    "\u06EA-\u06ED" \
    "\u0711" \
    "\u0730-\u074A" \
    "\u07EB-\u07F3" \
    "\u07FD" \
    "\u0816-\u0819" \
    "\u081B-\u0823" \
    "\u0825-\u0827" \
    "\u0829-\u082D" \
    "\u0859-\u085B" \
    "\u0898-\u089F" \
    "\u08CA-\u08E1" \
    "\u08E3-\u08FF" \
    "\u093C" \
    "\u094D" \
    "\u0951-\u0954" \
    "\u09BC" \
    "\u09BE" \
    "\u09CD" \
    "\u09D7" \
    "\u09FE" \
    "\u0A3C" \
    "\u0A4D" \
    "\u0ABC" \
    "\u0ACD" \
    "\u0B3C" \
    "\u0B3E" \
    "\u0B4D" \
    "\u0B56\u0B57" \
    "\u0BBE" \
    "\u0BCD" \
    "\u0BD7" \
    "\u0C3C" \
    "\u0C4D" \
    "\u0C55\u0C56" \
    "\u0CBC" \
    "\u0CC2" \
    "\u0CCD" \
    "\u0CD5\u0CD6" \
    "\u0D3B\u0D3C" \
    "\u0D3E" \
    "\u0D4D" \
    "\u0D57" \
    "\u0DCA" \
    "\u0DCF" \
    "\u0DDF" \
    "\u0E38-\u0E3A" \
    "\u0E48-\u0E4B" \
    "\u0EB8-\u0EBA" \
    "\u0EC8-\u0ECB" \
    "\u0F18\u0F19" \
    "\u0F35" \
    "\u0F37" \
    "\u0F39" \
    "\u0F71\u0F72" \
    "\u0F74" \
    "\u0F7A-\u0F7D" \
    "\u0F80" \
    "\u0F82-\u0F84" \
    "\u0F86\u0F87" \
    "\u0FC6" \
    "\u102E" \
    "\u1037" \
    "\u1039\u103A" \
    "\u108D" \
    "\u135D-\u135F" \
    "\u1714\u1715" \
    "\u1734" \
    "\u17D2" \
    "\u17DD" \
    "\u18A9" \
    "\u1939-\u193B" \
    "\u1A17\u1A18" \
    "\u1A60" \
    "\u1A75-\u1A7C" \
    "\u1A7F" \
    "\u1AB0-\u1ABD" \
    "\u1ABF-\u1ACE" \
    "\u1B34\u1B35" \
    "\u1B44" \
    "\u1B6B-\u1B73" \
    "\u1BAA\u1BAB" \
    "\u1BE6" \
    "\u1BF2\u1BF3" \
    "\u1C37" \
    "\u1CD0-\u1CD2" \
    "\u1CD4-\u1CE0" \
    "\u1CE2-\u1CE8" \
    "\u1CED" \
    "\u1CF4" \
    "\u1CF8\u1CF9" \
    "\u1DC0-\u1DFF" \
    "\u20D0-\u20DC" \
    "\u20E1" \
    "\u20E5-\u20F0" \
    "\u2CEF-\u2CF1" \
    "\u2D7F" \
    "\u2DE0-\u2DFF" \
    "\u302A-\u302F" \
    "\u3099\u309A" \
    "\uA66F" \
    "\uA674-\uA67D" \
    "\uA69E\uA69F" \
    "\uA6F0\uA6F1" \
    "\uA806" \
    "\uA82C" \
    "\uA8C4" \
    "\uA8E0-\uA8F1" \
    "\uA92B-\uA92D" \
    "\uA953" \
    "\uA9B3" \
    "\uA9C0" \
    "\uAAB0" \
    "\uAAB2-\uAAB4" \
    "\uAAB7\uAAB8" \
    "\uAABE\uAABF" \
    "\uAAC1" \
    "\uAAF6" \
    "\uABED" \
    "\uFB1E" \
    "\uFE20-\uFE2F" \
    "\u{101FD}" \
    "\u{102E0}" \
    "\u{10376}-\u{1037A}" \
    "\u{10A0D}" \
    "\u{10A0F}" \
    "\u{10A38}-\u{10A3A}" \
    "\u{10A3F}" \
    "\u{10AE5}\u{10AE6}" \
    "\u{10D24}-\u{10D27}" \
    "\u{10EAB}\u{10EAC}" \
    "\u{10EFD}-\u{10EFF}" \
    "\u{10F46}-\u{10F50}" \
    "\u{10F82}-\u{10F85}" \
    "\u{11046}" \
    "\u{11070}" \
    "\u{1107F}" \
    "\u{110B9}\u{110BA}" \
    "\u{11100}-\u{11102}" \
    "\u{11127}" \
    "\u{11133}\u{11134}" \
    "\u{11173}" \
    "\u{111C0}" \
    "\u{111CA}" \
    "\u{11235}\u{11236}" \
    "\u{112E9}\u{112EA}" \
    "\u{1133B}\u{1133C}" \
    "\u{1133E}" \
    "\u{1134D}" \
    "\u{11357}" \
    "\u{11366}-\u{1136C}" \
    "\u{11370}-\u{11374}" \
    "\u{11442}" \
    "\u{11446}" \
    "\u{1145E}" \
    "\u{114B0}" \
    "\u{114BA}" \
    "\u{114BD}" \
    "\u{114C2}\u{114C3}" \
    "\u{115AF}" \
    "\u{115BF}\u{115C0}" \
    "\u{1163F}" \
    "\u{116B6}\u{116B7}" \
    "\u{1172B}" \
    "\u{11839}\u{1183A}" \
    "\u{11930}" \
    "\u{1193D}\u{1193E}" \
    "\u{11943}" \
    "\u{119E0}" \
    "\u{11A34}" \
    "\u{11A47}" \
    "\u{11A99}" \
    "\u{11C3F}" \
    "\u{11D42}" \
    "\u{11D44}\u{11D45}" \
    "\u{11D97}" \
    "\u{11F41}\u{11F42}" \
    "\u{16AF0}-\u{16AF4}" \
    "\u{16B30}-\u{16B36}" \
    "\u{16FF0}\u{16FF1}" \
    "\u{1BC9E}" \
    "\u{1D165}-\u{1D169}" \
    "\u{1D16D}-\u{1D172}" \
    "\u{1D17B}-\u{1D182}" \
    "\u{1D185}-\u{1D18B}" \
    "\u{1D1AA}-\u{1D1AD}" \
    "\u{1D242}-\u{1D244}" \
    "\u{1E000}-\u{1E006}" \
    "\u{1E008}-\u{1E018}" \
    "\u{1E01B}-\u{1E021}" \
    "\u{1E023}\u{1E024}" \
    "\u{1E026}-\u{1E02A}" \
    "\u{1E08F}" \
    "\u{1E130}-\u{1E136}" \
    "\u{1E2AE}" \
    "\u{1E2EC}-\u{1E2EF}" \
    "\u{1E4EC}-\u{1E4EF}" \
    "\u{1E8D0}-\u{1E8D6}" \
    "\u{1E944}-\u{1E94A}" \
    "]"
  ACCENTS = accents
  REGEXP_D_STRING = "#{''  # composition starters and composition exclusions
    }" \
    "[\u00C0-\u00C5" \
    "\u00C7-\u00CF" \
    "\u00D1-\u00D6" \
    "\u00D9-\u00DD" \
    "\u00E0-\u00E5" \
    "\u00E7-\u00EF" \
    "\u00F1-\u00F6" \
    "\u00F9-\u00FD" \
    "\u00FF-\u010F" \
    "\u0112-\u0125" \
    "\u0128-\u0130" \
    "\u0134-\u0137" \
    "\u0139-\u013E" \
    "\u0143-\u0148" \
    "\u014C-\u0151" \
    "\u0154-\u0165" \
    "\u0168-\u017E" \
    "\u01A0\u01A1" \
    "\u01AF\u01B0" \
    "\u01CD-\u01DC" \
    "\u01DE-\u01E3" \
    "\u01E6-\u01F0" \
    "\u01F4\u01F5" \
    "\u01F8-\u021B" \
    "\u021E\u021F" \
    "\u0226-\u0233" \
    "\u0340\u0341" \
    "\u0343\u0344" \
    "\u0374" \
    "\u037E" \
    "\u0385-\u038A" \
    "\u038C" \
    "\u038E-\u0390" \
    "\u03AA-\u03B0" \
    "\u03CA-\u03CE" \
    "\u03D3\u03D4" \
    "\u0400\u0401" \
    "\u0403" \
    "\u0407" \
    "\u040C-\u040E" \
    "\u0419" \
    "\u0439" \
    "\u0450\u0451" \
    "\u0453" \
    "\u0457" \
    "\u045C-\u045E" \
    "\u0476\u0477" \
    "\u04C1\u04C2" \
    "\u04D0-\u04D3" \
    "\u04D6\u04D7" \
    "\u04DA-\u04DF" \
    "\u04E2-\u04E7" \
    "\u04EA-\u04F5" \
    "\u04F8\u04F9" \
    "\u0622-\u0626" \
    "\u06C0" \
    "\u06C2" \
    "\u06D3" \
    "\u0929" \
    "\u0931" \
    "\u0934" \
    "\u0958-\u095F" \
    "\u09CB\u09CC" \
    "\u09DC\u09DD" \
    "\u09DF" \
    "\u0A33" \
    "\u0A36" \
    "\u0A59-\u0A5B" \
    "\u0A5E" \
    "\u0B48" \
    "\u0B4B\u0B4C" \
    "\u0B5C\u0B5D" \
    "\u0B94" \
    "\u0BCA-\u0BCC" \
    "\u0C48" \
    "\u0CC0" \
    "\u0CC7\u0CC8" \
    "\u0CCA\u0CCB" \
    "\u0D4A-\u0D4C" \
    "\u0DDA" \
    "\u0DDC-\u0DDE" \
    "\u0F43" \
    "\u0F4D" \
    "\u0F52" \
    "\u0F57" \
    "\u0F5C" \
    "\u0F69" \
    "\u0F73" \
    "\u0F75\u0F76" \
    "\u0F78" \
    "\u0F81" \
    "\u0F93" \
    "\u0F9D" \
    "\u0FA2" \
    "\u0FA7" \
    "\u0FAC" \
    "\u0FB9" \
    "\u1026" \
    "\u1B06" \
    "\u1B08" \
    "\u1B0A" \
    "\u1B0C" \
    "\u1B0E" \
    "\u1B12" \
    "\u1B3B" \
    "\u1B3D" \
    "\u1B40\u1B41" \
    "\u1B43" \
    "\u1E00-\u1E99" \
    "\u1E9B" \
    "\u1EA0-\u1EF9" \
    "\u1F00-\u1F15" \
    "\u1F18-\u1F1D" \
    "\u1F20-\u1F45" \
    "\u1F48-\u1F4D" \
    "\u1F50-\u1F57" \
    "\u1F59" \
    "\u1F5B" \
    "\u1F5D" \
    "\u1F5F-\u1F7D" \
    "\u1F80-\u1FB4" \
    "\u1FB6-\u1FBC" \
    "\u1FBE" \
    "\u1FC1-\u1FC4" \
    "\u1FC6-\u1FD3" \
    "\u1FD6-\u1FDB" \
    "\u1FDD-\u1FEF" \
    "\u1FF2-\u1FF4" \
    "\u1FF6-\u1FFD" \
    "\u2000\u2001" \
    "\u2126" \
    "\u212A\u212B" \
    "\u219A\u219B" \
    "\u21AE" \
    "\u21CD-\u21CF" \
    "\u2204" \
    "\u2209" \
    "\u220C" \
    "\u2224" \
    "\u2226" \
    "\u2241" \
    "\u2244" \
    "\u2247" \
    "\u2249" \
    "\u2260" \
    "\u2262" \
    "\u226D-\u2271" \
    "\u2274\u2275" \
    "\u2278\u2279" \
    "\u2280\u2281" \
    "\u2284\u2285" \
    "\u2288\u2289" \
    "\u22AC-\u22AF" \
    "\u22E0-\u22E3" \
    "\u22EA-\u22ED" \
    "\u2329\u232A" \
    "\u2ADC" \
    "\u304C" \
    "\u304E" \
    "\u3050" \
    "\u3052" \
    "\u3054" \
    "\u3056" \
    "\u3058" \
    "\u305A" \
    "\u305C" \
    "\u305E" \
    "\u3060" \
    "\u3062" \
    "\u3065" \
    "\u3067" \
    "\u3069" \
    "\u3070\u3071" \
    "\u3073\u3074" \
    "\u3076\u3077" \
    "\u3079\u307A" \
    "\u307C\u307D" \
    "\u3094" \
    "\u309E" \
    "\u30AC" \
    "\u30AE" \
    "\u30B0" \
    "\u30B2" \
    "\u30B4" \
    "\u30B6" \
    "\u30B8" \
    "\u30BA" \
    "\u30BC" \
    "\u30BE" \
    "\u30C0" \
    "\u30C2" \
    "\u30C5" \
    "\u30C7" \
    "\u30C9" \
    "\u30D0\u30D1" \
    "\u30D3\u30D4" \
    "\u30D6\u30D7" \
    "\u30D9\u30DA" \
    "\u30DC\u30DD" \
    "\u30F4" \
    "\u30F7-\u30FA" \
    "\u30FE" \
    "\uF900-\uFA0D" \
    "\uFA10" \
    "\uFA12" \
    "\uFA15-\uFA1E" \
    "\uFA20" \
    "\uFA22" \
    "\uFA25\uFA26" \
    "\uFA2A-\uFA6D" \
    "\uFA70-\uFAD9" \
    "\uFB1D" \
    "\uFB1F" \
    "\uFB2A-\uFB36" \
    "\uFB38-\uFB3C" \
    "\uFB3E" \
    "\uFB40\uFB41" \
    "\uFB43\uFB44" \
    "\uFB46-\uFB4E" \
    "\u{1109A}" \
    "\u{1109C}" \
    "\u{110AB}" \
    "\u{1112E}\u{1112F}" \
    "\u{1134B}\u{1134C}" \
    "\u{114BB}\u{114BC}" \
    "\u{114BE}" \
    "\u{115BA}\u{115BB}" \
    "\u{11938}" \
    "\u{1D15E}-\u{1D164}" \
    "\u{1D1BB}-\u{1D1C0}" \
    "\u{2F800}-\u{2FA1D}" \
    "]#{accents}*" \
    "|#{''  # characters that can be the result of a composition, except composition starters
    }" \
    "[<->" \
    "A-P" \
    "R-Z" \
    "a-p" \
    "r-z" \
    "\u00A8" \
    "\u00C6" \
    "\u00D8" \
    "\u00E6" \
    "\u00F8" \
    "\u017F" \
    "\u01B7" \
    "\u0292" \
    "\u0391" \
    "\u0395" \
    "\u0397" \
    "\u0399" \
    "\u039F" \
    "\u03A1" \
    "\u03A5" \
    "\u03A9" \
    "\u03B1" \
    "\u03B5" \
    "\u03B7" \
    "\u03B9" \
    "\u03BF" \
    "\u03C1" \
    "\u03C5" \
    "\u03C9" \
    "\u03D2" \
    "\u0406" \
    "\u0410" \
    "\u0413" \
    "\u0415-\u0418" \
    "\u041A" \
    "\u041E" \
    "\u0423" \
    "\u0427" \
    "\u042B" \
    "\u042D" \
    "\u0430" \
    "\u0433" \
    "\u0435-\u0438" \
    "\u043A" \
    "\u043E" \
    "\u0443" \
    "\u0447" \
    "\u044B" \
    "\u044D" \
    "\u0456" \
    "\u0474\u0475" \
    "\u04D8\u04D9" \
    "\u04E8\u04E9" \
    "\u0627" \
    "\u0648" \
    "\u064A" \
    "\u06C1" \
    "\u06D2" \
    "\u06D5" \
    "\u0928" \
    "\u0930" \
    "\u0933" \
    "\u09C7" \
    "\u0B47" \
    "\u0B92" \
    "\u0BC6\u0BC7" \
    "\u0C46" \
    "\u0CBF" \
    "\u0CC6" \
    "\u0D46\u0D47" \
    "\u0DD9" \
    "\u1025" \
    "\u1B05" \
    "\u1B07" \
    "\u1B09" \
    "\u1B0B" \
    "\u1B0D" \
    "\u1B11" \
    "\u1B3A" \
    "\u1B3C" \
    "\u1B3E\u1B3F" \
    "\u1B42" \
    "\u1FBF" \
    "\u1FFE" \
    "\u2190" \
    "\u2192" \
    "\u2194" \
    "\u21D0" \
    "\u21D2" \
    "\u21D4" \
    "\u2203" \
    "\u2208" \
    "\u220B" \
    "\u2223" \
    "\u2225" \
    "\u223C" \
    "\u2243" \
    "\u2245" \
    "\u2248" \
    "\u224D" \
    "\u2261" \
    "\u2264\u2265" \
    "\u2272\u2273" \
    "\u2276\u2277" \
    "\u227A-\u227D" \
    "\u2282\u2283" \
    "\u2286\u2287" \
    "\u2291\u2292" \
    "\u22A2" \
    "\u22A8\u22A9" \
    "\u22AB" \
    "\u22B2-\u22B5" \
    "\u3046" \
    "\u304B" \
    "\u304D" \
    "\u304F" \
    "\u3051" \
    "\u3053" \
    "\u3055" \
    "\u3057" \
    "\u3059" \
    "\u305B" \
    "\u305D" \
    "\u305F" \
    "\u3061" \
    "\u3064" \
    "\u3066" \
    "\u3068" \
    "\u306F" \
    "\u3072" \
    "\u3075" \
    "\u3078" \
    "\u307B" \
    "\u309D" \
    "\u30A6" \
    "\u30AB" \
    "\u30AD" \
    "\u30AF" \
    "\u30B1" \
    "\u30B3" \
    "\u30B5" \
    "\u30B7" \
    "\u30B9" \
    "\u30BB" \
    "\u30BD" \
    "\u30BF" \
    "\u30C1" \
    "\u30C4" \
    "\u30C6" \
    "\u30C8" \
    "\u30CF" \
    "\u30D2" \
    "\u30D5" \
    "\u30D8" \
    "\u30DB" \
    "\u30EF-\u30F2" \
    "\u30FD" \
    "\u{11099}" \
    "\u{1109B}" \
    "\u{110A5}" \
    "\u{11131}\u{11132}" \
    "\u{11347}" \
    "\u{114B9}" \
    "\u{115B8}\u{115B9}" \
    "\u{11935}" \
    "]?#{accents}+" \
    "|#{''  # precomposed Hangul syllables
    }" \
    "[\u{AC00}-\u{D7A4}]"
  REGEXP_C_STRING = "#{''  # composition exclusions
    }" \
    "[\u0340\u0341" \
    "\u0343\u0344" \
    "\u0374" \
    "\u037E" \
    "\u0387" \
    "\u0958-\u095F" \
    "\u09DC\u09DD" \
    "\u09DF" \
    "\u0A33" \
    "\u0A36" \
    "\u0A59-\u0A5B" \
    "\u0A5E" \
    "\u0B5C\u0B5D" \
    "\u0F43" \
    "\u0F4D" \
    "\u0F52" \
    "\u0F57" \
    "\u0F5C" \
    "\u0F69" \
    "\u0F73" \
    "\u0F75\u0F76" \
    "\u0F78" \
    "\u0F81" \
    "\u0F93" \
    "\u0F9D" \
    "\u0FA2" \
    "\u0FA7" \
    "\u0FAC" \
    "\u0FB9" \
    "\u1F71" \
    "\u1F73" \
    "\u1F75" \
    "\u1F77" \
    "\u1F79" \
    "\u1F7B" \
    "\u1F7D" \
    "\u1FBB" \
    "\u1FBE" \
    "\u1FC9" \
    "\u1FCB" \
    "\u1FD3" \
    "\u1FDB" \
    "\u1FE3" \
    "\u1FEB" \
    "\u1FEE\u1FEF" \
    "\u1FF9" \
    "\u1FFB" \
    "\u1FFD" \
    "\u2000\u2001" \
    "\u2126" \
    "\u212A\u212B" \
    "\u2329\u232A" \
    "\u2ADC" \
    "\uF900-\uFA0D" \
    "\uFA10" \
    "\uFA12" \
    "\uFA15-\uFA1E" \
    "\uFA20" \
    "\uFA22" \
    "\uFA25\uFA26" \
    "\uFA2A-\uFA6D" \
    "\uFA70-\uFAD9" \
    "\uFB1D" \
    "\uFB1F" \
    "\uFB2A-\uFB36" \
    "\uFB38-\uFB3C" \
    "\uFB3E" \
    "\uFB40\uFB41" \
    "\uFB43\uFB44" \
    "\uFB46-\uFB4E" \
    "\u{1D15E}-\u{1D164}" \
    "\u{1D1BB}-\u{1D1C0}" \
    "\u{2F800}-\u{2FA1D}" \
    "]#{accents}*" \
    "|#{''  # composition starters and characters that can be the result of a composition
    }" \
    "[<->" \
    "A-P" \
    "R-Z" \
    "a-p" \
    "r-z" \
    "\u00A8" \
    "\u00C0-\u00CF" \
    "\u00D1-\u00D6" \
    "\u00D8-\u00DD" \
    "\u00E0-\u00EF" \
    "\u00F1-\u00F6" \
    "\u00F8-\u00FD" \
    "\u00FF-\u010F" \
    "\u0112-\u0125" \
    "\u0128-\u0130" \
    "\u0134-\u0137" \
    "\u0139-\u013E" \
    "\u0143-\u0148" \
    "\u014C-\u0151" \
    "\u0154-\u0165" \
    "\u0168-\u017F" \
    "\u01A0\u01A1" \
    "\u01AF\u01B0" \
    "\u01B7" \
    "\u01CD-\u01DC" \
    "\u01DE-\u01E3" \
    "\u01E6-\u01F0" \
    "\u01F4\u01F5" \
    "\u01F8-\u021B" \
    "\u021E\u021F" \
    "\u0226-\u0233" \
    "\u0292" \
    "\u0385\u0386" \
    "\u0388-\u038A" \
    "\u038C" \
    "\u038E-\u0391" \
    "\u0395" \
    "\u0397" \
    "\u0399" \
    "\u039F" \
    "\u03A1" \
    "\u03A5" \
    "\u03A9-\u03B1" \
    "\u03B5" \
    "\u03B7" \
    "\u03B9" \
    "\u03BF" \
    "\u03C1" \
    "\u03C5" \
    "\u03C9-\u03CE" \
    "\u03D2-\u03D4" \
    "\u0400\u0401" \
    "\u0403" \
    "\u0406\u0407" \
    "\u040C-\u040E" \
    "\u0410" \
    "\u0413" \
    "\u0415-\u041A" \
    "\u041E" \
    "\u0423" \
    "\u0427" \
    "\u042B" \
    "\u042D" \
    "\u0430" \
    "\u0433" \
    "\u0435-\u043A" \
    "\u043E" \
    "\u0443" \
    "\u0447" \
    "\u044B" \
    "\u044D" \
    "\u0450\u0451" \
    "\u0453" \
    "\u0456\u0457" \
    "\u045C-\u045E" \
    "\u0474-\u0477" \
    "\u04C1\u04C2" \
    "\u04D0-\u04D3" \
    "\u04D6-\u04DF" \
    "\u04E2-\u04F5" \
    "\u04F8\u04F9" \
    "\u0622-\u0627" \
    "\u0648" \
    "\u064A" \
    "\u06C0-\u06C2" \
    "\u06D2\u06D3" \
    "\u06D5" \
    "\u0928\u0929" \
    "\u0930\u0931" \
    "\u0933\u0934" \
    "\u09C7" \
    "\u09CB\u09CC" \
    "\u0B47\u0B48" \
    "\u0B4B\u0B4C" \
    "\u0B92" \
    "\u0B94" \
    "\u0BC6\u0BC7" \
    "\u0BCA-\u0BCC" \
    "\u0C46" \
    "\u0C48" \
    "\u0CBF\u0CC0" \
    "\u0CC6-\u0CC8" \
    "\u0CCA\u0CCB" \
    "\u0D46\u0D47" \
    "\u0D4A-\u0D4C" \
    "\u0DD9\u0DDA" \
    "\u0DDC-\u0DDE" \
    "\u1025\u1026" \
    "\u1B05-\u1B0E" \
    "\u1B11\u1B12" \
    "\u1B3A-\u1B43" \
    "\u1E00-\u1E99" \
    "\u1E9B" \
    "\u1EA0-\u1EF9" \
    "\u1F00-\u1F15" \
    "\u1F18-\u1F1D" \
    "\u1F20-\u1F45" \
    "\u1F48-\u1F4D" \
    "\u1F50-\u1F57" \
    "\u1F59" \
    "\u1F5B" \
    "\u1F5D" \
    "\u1F5F-\u1F70" \
    "\u1F72" \
    "\u1F74" \
    "\u1F76" \
    "\u1F78" \
    "\u1F7A" \
    "\u1F7C" \
    "\u1F80-\u1FB4" \
    "\u1FB6-\u1FBA" \
    "\u1FBC" \
    "\u1FBF" \
    "\u1FC1-\u1FC4" \
    "\u1FC6-\u1FC8" \
    "\u1FCA" \
    "\u1FCC-\u1FD2" \
    "\u1FD6-\u1FDA" \
    "\u1FDD-\u1FE2" \
    "\u1FE4-\u1FEA" \
    "\u1FEC\u1FED" \
    "\u1FF2-\u1FF4" \
    "\u1FF6-\u1FF8" \
    "\u1FFA" \
    "\u1FFC" \
    "\u1FFE" \
    "\u2190" \
    "\u2192" \
    "\u2194" \
    "\u219A\u219B" \
    "\u21AE" \
    "\u21CD-\u21D0" \
    "\u21D2" \
    "\u21D4" \
    "\u2203\u2204" \
    "\u2208\u2209" \
    "\u220B\u220C" \
    "\u2223-\u2226" \
    "\u223C" \
    "\u2241" \
    "\u2243-\u2245" \
    "\u2247-\u2249" \
    "\u224D" \
    "\u2260-\u2262" \
    "\u2264\u2265" \
    "\u226D-\u227D" \
    "\u2280-\u2289" \
    "\u2291\u2292" \
    "\u22A2" \
    "\u22A8\u22A9" \
    "\u22AB-\u22AF" \
    "\u22B2-\u22B5" \
    "\u22E0-\u22E3" \
    "\u22EA-\u22ED" \
    "\u3046" \
    "\u304B-\u3062" \
    "\u3064-\u3069" \
    "\u306F-\u307D" \
    "\u3094" \
    "\u309D\u309E" \
    "\u30A6" \
    "\u30AB-\u30C2" \
    "\u30C4-\u30C9" \
    "\u30CF-\u30DD" \
    "\u30EF-\u30F2" \
    "\u30F4" \
    "\u30F7-\u30FA" \
    "\u30FD\u30FE" \
    "\u{11099}-\u{1109C}" \
    "\u{110A5}" \
    "\u{110AB}" \
    "\u{1112E}\u{1112F}" \
    "\u{11131}\u{11132}" \
    "\u{11347}" \
    "\u{1134B}\u{1134C}" \
    "\u{114B9}" \
    "\u{114BB}\u{114BC}" \
    "\u{114BE}" \
    "\u{115B8}-\u{115BB}" \
    "\u{11935}" \
    "\u{11938}" \
    "]?#{accents}+" \
    "|#{''  # Hangul syllables with separate trailer
    }" \
    "[\uAC00" \
    "\uAC1C" \
    "\uAC38" \
    "\uAC54" \
    "\uAC70" \
    "\uAC8C" \
    "\uACA8" \
    "\uACC4" \
    "\uACE0" \
    "\uACFC" \
    "\uAD18" \
    "\uAD34" \
    "\uAD50" \
    "\uAD6C" \
    "\uAD88" \
    "\uADA4" \
    "\uADC0" \
    "\uADDC" \
    "\uADF8" \
    "\uAE14" \
    "\uAE30" \
    "\uAE4C" \
    "\uAE68" \
    "\uAE84" \
    "\uAEA0" \
    "\uAEBC" \
    "\uAED8" \
    "\uAEF4" \
    "\uAF10" \
    "\uAF2C" \
    "\uAF48" \
    "\uAF64" \
    "\uAF80" \
    "\uAF9C" \
    "\uAFB8" \
    "\uAFD4" \
    "\uAFF0" \
    "\uB00C" \
    "\uB028" \
    "\uB044" \
    "\uB060" \
    "\uB07C" \
    "\uB098" \
    "\uB0B4" \
    "\uB0D0" \
    "\uB0EC" \
    "\uB108" \
    "\uB124" \
    "\uB140" \
    "\uB15C" \
    "\uB178" \
    "\uB194" \
    "\uB1B0" \
    "\uB1CC" \
    "\uB1E8" \
    "\uB204" \
    "\uB220" \
    "\uB23C" \
    "\uB258" \
    "\uB274" \
    "\uB290" \
    "\uB2AC" \
    "\uB2C8" \
    "\uB2E4" \
    "\uB300" \
    "\uB31C" \
    "\uB338" \
    "\uB354" \
    "\uB370" \
    "\uB38C" \
    "\uB3A8" \
    "\uB3C4" \
    "\uB3E0" \
    "\uB3FC" \
    "\uB418" \
    "\uB434" \
    "\uB450" \
    "\uB46C" \
    "\uB488" \
    "\uB4A4" \
    "\uB4C0" \
    "\uB4DC" \
    "\uB4F8" \
    "\uB514" \
    "\uB530" \
    "\uB54C" \
    "\uB568" \
    "\uB584" \
    "\uB5A0" \
    "\uB5BC" \
    "\uB5D8" \
    "\uB5F4" \
    "\uB610" \
    "\uB62C" \
    "\uB648" \
    "\uB664" \
    "\uB680" \
    "\uB69C" \
    "\uB6B8" \
    "\uB6D4" \
    "\uB6F0" \
    "\uB70C" \
    "\uB728" \
    "\uB744" \
    "\uB760" \
    "\uB77C" \
    "\uB798" \
    "\uB7B4" \
    "\uB7D0" \
    "\uB7EC" \
    "\uB808" \
    "\uB824" \
    "\uB840" \
    "\uB85C" \
    "\uB878" \
    "\uB894" \
    "\uB8B0" \
    "\uB8CC" \
    "\uB8E8" \
    "\uB904" \
    "\uB920" \
    "\uB93C" \
    "\uB958" \
    "\uB974" \
    "\uB990" \
    "\uB9AC" \
    "\uB9C8" \
    "\uB9E4" \
    "\uBA00" \
    "\uBA1C" \
    "\uBA38" \
    "\uBA54" \
    "\uBA70" \
    "\uBA8C" \
    "\uBAA8" \
    "\uBAC4" \
    "\uBAE0" \
    "\uBAFC" \
    "\uBB18" \
    "\uBB34" \
    "\uBB50" \
    "\uBB6C" \
    "\uBB88" \
    "\uBBA4" \
    "\uBBC0" \
    "\uBBDC" \
    "\uBBF8" \
    "\uBC14" \
    "\uBC30" \
    "\uBC4C" \
    "\uBC68" \
    "\uBC84" \
    "\uBCA0" \
    "\uBCBC" \
    "\uBCD8" \
    "\uBCF4" \
    "\uBD10" \
    "\uBD2C" \
    "\uBD48" \
    "\uBD64" \
    "\uBD80" \
    "\uBD9C" \
    "\uBDB8" \
    "\uBDD4" \
    "\uBDF0" \
    "\uBE0C" \
    "\uBE28" \
    "\uBE44" \
    "\uBE60" \
    "\uBE7C" \
    "\uBE98" \
    "\uBEB4" \
    "\uBED0" \
    "\uBEEC" \
    "\uBF08" \
    "\uBF24" \
    "\uBF40" \
    "\uBF5C" \
    "\uBF78" \
    "\uBF94" \
    "\uBFB0" \
    "\uBFCC" \
    "\uBFE8" \
    "\uC004" \
    "\uC020" \
    "\uC03C" \
    "\uC058" \
    "\uC074" \
    "\uC090" \
    "\uC0AC" \
    "\uC0C8" \
    "\uC0E4" \
    "\uC100" \
    "\uC11C" \
    "\uC138" \
    "\uC154" \
    "\uC170" \
    "\uC18C" \
    "\uC1A8" \
    "\uC1C4" \
    "\uC1E0" \
    "\uC1FC" \
    "\uC218" \
    "\uC234" \
    "\uC250" \
    "\uC26C" \
    "\uC288" \
    "\uC2A4" \
    "\uC2C0" \
    "\uC2DC" \
    "\uC2F8" \
    "\uC314" \
    "\uC330" \
    "\uC34C" \
    "\uC368" \
    "\uC384" \
    "\uC3A0" \
    "\uC3BC" \
    "\uC3D8" \
    "\uC3F4" \
    "\uC410" \
    "\uC42C" \
    "\uC448" \
    "\uC464" \
    "\uC480" \
    "\uC49C" \
    "\uC4B8" \
    "\uC4D4" \
    "\uC4F0" \
    "\uC50C" \
    "\uC528" \
    "\uC544" \
    "\uC560" \
    "\uC57C" \
    "\uC598" \
    "\uC5B4" \
    "\uC5D0" \
    "\uC5EC" \
    "\uC608" \
    "\uC624" \
    "\uC640" \
    "\uC65C" \
    "\uC678" \
    "\uC694" \
    "\uC6B0" \
    "\uC6CC" \
    "\uC6E8" \
    "\uC704" \
    "\uC720" \
    "\uC73C" \
    "\uC758" \
    "\uC774" \
    "\uC790" \
    "\uC7AC" \
    "\uC7C8" \
    "\uC7E4" \
    "\uC800" \
    "\uC81C" \
    "\uC838" \
    "\uC854" \
    "\uC870" \
    "\uC88C" \
    "\uC8A8" \
    "\uC8C4" \
    "\uC8E0" \
    "\uC8FC" \
    "\uC918" \
    "\uC934" \
    "\uC950" \
    "\uC96C" \
    "\uC988" \
    "\uC9A4" \
    "\uC9C0" \
    "\uC9DC" \
    "\uC9F8" \
    "\uCA14" \
    "\uCA30" \
    "\uCA4C" \
    "\uCA68" \
    "\uCA84" \
    "\uCAA0" \
    "\uCABC" \
    "\uCAD8" \
    "\uCAF4" \
    "\uCB10" \
    "\uCB2C" \
    "\uCB48" \
    "\uCB64" \
    "\uCB80" \
    "\uCB9C" \
    "\uCBB8" \
    "\uCBD4" \
    "\uCBF0" \
    "\uCC0C" \
    "\uCC28" \
    "\uCC44" \
    "\uCC60" \
    "\uCC7C" \
    "\uCC98" \
    "\uCCB4" \
    "\uCCD0" \
    "\uCCEC" \
    "\uCD08" \
    "\uCD24" \
    "\uCD40" \
    "\uCD5C" \
    "\uCD78" \
    "\uCD94" \
    "\uCDB0" \
    "\uCDCC" \
    "\uCDE8" \
    "\uCE04" \
    "\uCE20" \
    "\uCE3C" \
    "\uCE58" \
    "\uCE74" \
    "\uCE90" \
    "\uCEAC" \
    "\uCEC8" \
    "\uCEE4" \
    "\uCF00" \
    "\uCF1C" \
    "\uCF38" \
    "\uCF54" \
    "\uCF70" \
    "\uCF8C" \
    "\uCFA8" \
    "\uCFC4" \
    "\uCFE0" \
    "\uCFFC" \
    "\uD018" \
    "\uD034" \
    "\uD050" \
    "\uD06C" \
    "\uD088" \
    "\uD0A4" \
    "\uD0C0" \
    "\uD0DC" \
    "\uD0F8" \
    "\uD114" \
    "\uD130" \
    "\uD14C" \
    "\uD168" \
    "\uD184" \
    "\uD1A0" \
    "\uD1BC" \
    "\uD1D8" \
    "\uD1F4" \
    "\uD210" \
    "\uD22C" \
    "\uD248" \
    "\uD264" \
    "\uD280" \
    "\uD29C" \
    "\uD2B8" \
    "\uD2D4" \
    "\uD2F0" \
    "\uD30C" \
    "\uD328" \
    "\uD344" \
    "\uD360" \
    "\uD37C" \
    "\uD398" \
    "\uD3B4" \
    "\uD3D0" \
    "\uD3EC" \
    "\uD408" \
    "\uD424" \
    "\uD440" \
    "\uD45C" \
    "\uD478" \
    "\uD494" \
    "\uD4B0" \
    "\uD4CC" \
    "\uD4E8" \
    "\uD504" \
    "\uD520" \
    "\uD53C" \
    "\uD558" \
    "\uD574" \
    "\uD590" \
    "\uD5AC" \
    "\uD5C8" \
    "\uD5E4" \
    "\uD600" \
    "\uD61C" \
    "\uD638" \
    "\uD654" \
    "\uD670" \
    "\uD68C" \
    "\uD6A8" \
    "\uD6C4" \
    "\uD6E0" \
    "\uD6FC" \
    "\uD718" \
    "\uD734" \
    "\uD750" \
    "\uD76C" \
    "\uD788" \
    "][\u11A8-\u11C2]" \
    "|#{''  # decomposed Hangul syllables
    }" \
    "[\u1100-\u1112][\u1161-\u1175][\u11A8-\u11C2]?"
  REGEXP_K_STRING = "" \
    "[\u00A0" \
    "\u00A8" \
    "\u00AA" \
    "\u00AF" \
    "\u00B2-\u00B5" \
    "\u00B8-\u00BA" \
    "\u00BC-\u00BE" \
    "\u0132\u0133" \
    "\u013F\u0140" \
    "\u0149" \
    "\u017F" \
    "\u01C4-\u01CC" \
    "\u01F1-\u01F3" \
    "\u02B0-\u02B8" \
    "\u02D8-\u02DD" \
    "\u02E0-\u02E4" \
    "\u037A" \
    "\u0384\u0385" \
    "\u03D0-\u03D6" \
    "\u03F0-\u03F2" \
    "\u03F4\u03F5" \
    "\u03F9" \
    "\u0587" \
    "\u0675-\u0678" \
    "\u0E33" \
    "\u0EB3" \
    "\u0EDC\u0EDD" \
    "\u0F0C" \
    "\u0F77" \
    "\u0F79" \
    "\u10FC" \
    "\u1D2C-\u1D2E" \
    "\u1D30-\u1D3A" \
    "\u1D3C-\u1D4D" \
    "\u1D4F-\u1D6A" \
    "\u1D78" \
    "\u1D9B-\u1DBF" \
    "\u1E9A\u1E9B" \
    "\u1FBD" \
    "\u1FBF-\u1FC1" \
    "\u1FCD-\u1FCF" \
    "\u1FDD-\u1FDF" \
    "\u1FED\u1FEE" \
    "\u1FFD\u1FFE" \
    "\u2000-\u200A" \
    "\u2011" \
    "\u2017" \
    "\u2024-\u2026" \
    "\u202F" \
    "\u2033\u2034" \
    "\u2036\u2037" \
    "\u203C" \
    "\u203E" \
    "\u2047-\u2049" \
    "\u2057" \
    "\u205F" \
    "\u2070\u2071" \
    "\u2074-\u208E" \
    "\u2090-\u209C" \
    "\u20A8" \
    "\u2100-\u2103" \
    "\u2105-\u2107" \
    "\u2109-\u2113" \
    "\u2115\u2116" \
    "\u2119-\u211D" \
    "\u2120-\u2122" \
    "\u2124" \
    "\u2128" \
    "\u212C\u212D" \
    "\u212F-\u2131" \
    "\u2133-\u2139" \
    "\u213B-\u2140" \
    "\u2145-\u2149" \
    "\u2150-\u217F" \
    "\u2189" \
    "\u222C\u222D" \
    "\u222F\u2230" \
    "\u2460-\u24EA" \
    "\u2A0C" \
    "\u2A74-\u2A76" \
    "\u2C7C\u2C7D" \
    "\u2D6F" \
    "\u2E9F" \
    "\u2EF3" \
    "\u2F00-\u2FD5" \
    "\u3000" \
    "\u3036" \
    "\u3038-\u303A" \
    "\u309B\u309C" \
    "\u309F" \
    "\u30FF" \
    "\u3131-\u318E" \
    "\u3192-\u319F" \
    "\u3200-\u321E" \
    "\u3220-\u3247" \
    "\u3250-\u327E" \
    "\u3280-\u33FF" \
    "\uA69C\uA69D" \
    "\uA770" \
    "\uA7F2-\uA7F4" \
    "\uA7F8\uA7F9" \
    "\uAB5C-\uAB5F" \
    "\uAB69" \
    "\uFB00-\uFB06" \
    "\uFB13-\uFB17" \
    "\uFB20-\uFB29" \
    "\uFB4F-\uFBB1" \
    "\uFBD3-\uFD3D" \
    "\uFD50-\uFD8F" \
    "\uFD92-\uFDC7" \
    "\uFDF0-\uFDFC" \
    "\uFE10-\uFE19" \
    "\uFE30-\uFE44" \
    "\uFE47-\uFE52" \
    "\uFE54-\uFE66" \
    "\uFE68-\uFE6B" \
    "\uFE70-\uFE72" \
    "\uFE74" \
    "\uFE76-\uFEFC" \
    "\uFF01-\uFFBE" \
    "\uFFC2-\uFFC7" \
    "\uFFCA-\uFFCF" \
    "\uFFD2-\uFFD7" \
    "\uFFDA-\uFFDC" \
    "\uFFE0-\uFFE6" \
    "\uFFE8-\uFFEE" \
    "\u{10781}-\u{10785}" \
    "\u{10787}-\u{107B0}" \
    "\u{107B2}-\u{107BA}" \
    "\u{1D400}-\u{1D454}" \
    "\u{1D456}-\u{1D49C}" \
    "\u{1D49E}\u{1D49F}" \
    "\u{1D4A2}" \
    "\u{1D4A5}\u{1D4A6}" \
    "\u{1D4A9}-\u{1D4AC}" \
    "\u{1D4AE}-\u{1D4B9}" \
    "\u{1D4BB}" \
    "\u{1D4BD}-\u{1D4C3}" \
    "\u{1D4C5}-\u{1D505}" \
    "\u{1D507}-\u{1D50A}" \
    "\u{1D50D}-\u{1D514}" \
    "\u{1D516}-\u{1D51C}" \
    "\u{1D51E}-\u{1D539}" \
    "\u{1D53B}-\u{1D53E}" \
    "\u{1D540}-\u{1D544}" \
    "\u{1D546}" \
    "\u{1D54A}-\u{1D550}" \
    "\u{1D552}-\u{1D6A5}" \
    "\u{1D6A8}-\u{1D7CB}" \
    "\u{1D7CE}-\u{1D7FF}" \
    "\u{1E030}-\u{1E06D}" \
    "\u{1EE00}-\u{1EE03}" \
    "\u{1EE05}-\u{1EE1F}" \
    "\u{1EE21}\u{1EE22}" \
    "\u{1EE24}" \
    "\u{1EE27}" \
    "\u{1EE29}-\u{1EE32}" \
    "\u{1EE34}-\u{1EE37}" \
    "\u{1EE39}" \
    "\u{1EE3B}" \
    "\u{1EE42}" \
    "\u{1EE47}" \
    "\u{1EE49}" \
    "\u{1EE4B}" \
    "\u{1EE4D}-\u{1EE4F}" \
    "\u{1EE51}\u{1EE52}" \
    "\u{1EE54}" \
    "\u{1EE57}" \
    "\u{1EE59}" \
    "\u{1EE5B}" \
    "\u{1EE5D}" \
    "\u{1EE5F}" \
    "\u{1EE61}\u{1EE62}" \
    "\u{1EE64}" \
    "\u{1EE67}-\u{1EE6A}" \
    "\u{1EE6C}-\u{1EE72}" \
    "\u{1EE74}-\u{1EE77}" \
    "\u{1EE79}-\u{1EE7C}" \
    "\u{1EE7E}" \
    "\u{1EE80}-\u{1EE89}" \
    "\u{1EE8B}-\u{1EE9B}" \
    "\u{1EEA1}-\u{1EEA3}" \
    "\u{1EEA5}-\u{1EEA9}" \
    "\u{1EEAB}-\u{1EEBB}" \
    "\u{1F100}-\u{1F10A}" \
    "\u{1F110}-\u{1F12E}" \
    "\u{1F130}-\u{1F14F}" \
    "\u{1F16A}-\u{1F16C}" \
    "\u{1F190}" \
    "\u{1F200}-\u{1F202}" \
    "\u{1F210}-\u{1F23B}" \
    "\u{1F240}-\u{1F248}" \
    "\u{1F250}\u{1F251}" \
    "\u{1FBF0}-\u{1FBF9}" \
    "]"

  class_table = {
    "\u0300"=>230,
    "\u0301"=>230,
    "\u0302"=>230,
    "\u0303"=>230,
    "\u0304"=>230,
    "\u0305"=>230,
    "\u0306"=>230,
    "\u0307"=>230,
    "\u0308"=>230,
    "\u0309"=>230,
    "\u030A"=>230,
    "\u030B"=>230,
    "\u030C"=>230,
    "\u030D"=>230,
    "\u030E"=>230,
    "\u030F"=>230,
    "\u0310"=>230,
    "\u0311"=>230,
    "\u0312"=>230,
    "\u0313"=>230,
    "\u0314"=>230,
    "\u0315"=>232,
    "\u0316"=>220,
    "\u0317"=>220,
    "\u0318"=>220,
    "\u0319"=>220,
    "\u031A"=>232,
    "\u031B"=>216,
    "\u031C"=>220,
    "\u031D"=>220,
    "\u031E"=>220,
    "\u031F"=>220,
    "\u0320"=>220,
    "\u0321"=>202,
    "\u0322"=>202,
    "\u0323"=>220,
    "\u0324"=>220,
    "\u0325"=>220,
    "\u0326"=>220,
    "\u0327"=>202,
    "\u0328"=>202,
    "\u0329"=>220,
    "\u032A"=>220,
    "\u032B"=>220,
    "\u032C"=>220,
    "\u032D"=>220,
    "\u032E"=>220,
    "\u032F"=>220,
    "\u0330"=>220,
    "\u0331"=>220,
    "\u0332"=>220,
    "\u0333"=>220,
    "\u0334"=>1,
    "\u0335"=>1,
    "\u0336"=>1,
    "\u0337"=>1,
    "\u0338"=>1,
    "\u0339"=>220,
    "\u033A"=>220,
    "\u033B"=>220,
    "\u033C"=>220,
    "\u033D"=>230,
    "\u033E"=>230,
    "\u033F"=>230,
    "\u0340"=>230,
    "\u0341"=>230,
    "\u0342"=>230,
    "\u0343"=>230,
    "\u0344"=>230,
    "\u0345"=>240,
    "\u0346"=>230,
    "\u0347"=>220,
    "\u0348"=>220,
    "\u0349"=>220,
    "\u034A"=>230,
    "\u034B"=>230,
    "\u034C"=>230,
    "\u034D"=>220,
    "\u034E"=>220,
    "\u0350"=>230,
    "\u0351"=>230,
    "\u0352"=>230,
    "\u0353"=>220,
    "\u0354"=>220,
    "\u0355"=>220,
    "\u0356"=>220,
    "\u0357"=>230,
    "\u0358"=>232,
    "\u0359"=>220,
    "\u035A"=>220,
    "\u035B"=>230,
    "\u035C"=>233,
    "\u035D"=>234,
    "\u035E"=>234,
    "\u035F"=>233,
    "\u0360"=>234,
    "\u0361"=>234,
    "\u0362"=>233,
    "\u0363"=>230,
    "\u0364"=>230,
    "\u0365"=>230,
    "\u0366"=>230,
    "\u0367"=>230,
    "\u0368"=>230,
    "\u0369"=>230,
    "\u036A"=>230,
    "\u036B"=>230,
    "\u036C"=>230,
    "\u036D"=>230,
    "\u036E"=>230,
    "\u036F"=>230,
    "\u0483"=>230,
    "\u0484"=>230,
    "\u0485"=>230,
    "\u0486"=>230,
    "\u0487"=>230,
    "\u0591"=>220,
    "\u0592"=>230,
    "\u0593"=>230,
    "\u0594"=>230,
    "\u0595"=>230,
    "\u0596"=>220,
    "\u0597"=>230,
    "\u0598"=>230,
    "\u0599"=>230,
    "\u059A"=>222,
    "\u059B"=>220,
    "\u059C"=>230,
    "\u059D"=>230,
    "\u059E"=>230,
    "\u059F"=>230,
    "\u05A0"=>230,
    "\u05A1"=>230,
    "\u05A2"=>220,
    "\u05A3"=>220,
    "\u05A4"=>220,
    "\u05A5"=>220,
    "\u05A6"=>220,
    "\u05A7"=>220,
    "\u05A8"=>230,
    "\u05A9"=>230,
    "\u05AA"=>220,
    "\u05AB"=>230,
    "\u05AC"=>230,
    "\u05AD"=>222,
    "\u05AE"=>228,
    "\u05AF"=>230,
    "\u05B0"=>10,
    "\u05B1"=>11,
    "\u05B2"=>12,
    "\u05B3"=>13,
    "\u05B4"=>14,
    "\u05B5"=>15,
    "\u05B6"=>16,
    "\u05B7"=>17,
    "\u05B8"=>18,
    "\u05B9"=>19,
    "\u05BA"=>19,
    "\u05BB"=>20,
    "\u05BC"=>21,
    "\u05BD"=>22,
    "\u05BF"=>23,
    "\u05C1"=>24,
    "\u05C2"=>25,
    "\u05C4"=>230,
    "\u05C5"=>220,
    "\u05C7"=>18,
    "\u0610"=>230,
    "\u0611"=>230,
    "\u0612"=>230,
    "\u0613"=>230,
    "\u0614"=>230,
    "\u0615"=>230,
    "\u0616"=>230,
    "\u0617"=>230,
    "\u0618"=>30,
    "\u0619"=>31,
    "\u061A"=>32,
    "\u064B"=>27,
    "\u064C"=>28,
    "\u064D"=>29,
    "\u064E"=>30,
    "\u064F"=>31,
    "\u0650"=>32,
    "\u0651"=>33,
    "\u0652"=>34,
    "\u0653"=>230,
    "\u0654"=>230,
    "\u0655"=>220,
    "\u0656"=>220,
    "\u0657"=>230,
    "\u0658"=>230,
    "\u0659"=>230,
    "\u065A"=>230,
    "\u065B"=>230,
    "\u065C"=>220,
    "\u065D"=>230,
    "\u065E"=>230,
    "\u065F"=>220,
    "\u0670"=>35,
    "\u06D6"=>230,
    "\u06D7"=>230,
    "\u06D8"=>230,
    "\u06D9"=>230,
    "\u06DA"=>230,
    "\u06DB"=>230,
    "\u06DC"=>230,
    "\u06DF"=>230,
    "\u06E0"=>230,
    "\u06E1"=>230,
    "\u06E2"=>230,
    "\u06E3"=>220,
    "\u06E4"=>230,
    "\u06E7"=>230,
    "\u06E8"=>230,
    "\u06EA"=>220,
    "\u06EB"=>230,
    "\u06EC"=>230,
    "\u06ED"=>220,
    "\u0711"=>36,
    "\u0730"=>230,
    "\u0731"=>220,
    "\u0732"=>230,
    "\u0733"=>230,
    "\u0734"=>220,
    "\u0735"=>230,
    "\u0736"=>230,
    "\u0737"=>220,
    "\u0738"=>220,
    "\u0739"=>220,
    "\u073A"=>230,
    "\u073B"=>220,
    "\u073C"=>220,
    "\u073D"=>230,
    "\u073E"=>220,
    "\u073F"=>230,
    "\u0740"=>230,
    "\u0741"=>230,
    "\u0742"=>220,
    "\u0743"=>230,
    "\u0744"=>220,
    "\u0745"=>230,
    "\u0746"=>220,
    "\u0747"=>230,
    "\u0748"=>220,
    "\u0749"=>230,
    "\u074A"=>230,
    "\u07EB"=>230,
    "\u07EC"=>230,
    "\u07ED"=>230,
    "\u07EE"=>230,
    "\u07EF"=>230,
    "\u07F0"=>230,
    "\u07F1"=>230,
    "\u07F2"=>220,
    "\u07F3"=>230,
    "\u07FD"=>220,
    "\u0816"=>230,
    "\u0817"=>230,
    "\u0818"=>230,
    "\u0819"=>230,
    "\u081B"=>230,
    "\u081C"=>230,
    "\u081D"=>230,
    "\u081E"=>230,
    "\u081F"=>230,
    "\u0820"=>230,
    "\u0821"=>230,
    "\u0822"=>230,
    "\u0823"=>230,
    "\u0825"=>230,
    "\u0826"=>230,
    "\u0827"=>230,
    "\u0829"=>230,
    "\u082A"=>230,
    "\u082B"=>230,
    "\u082C"=>230,
    "\u082D"=>230,
    "\u0859"=>220,
    "\u085A"=>220,
    "\u085B"=>220,
    "\u0898"=>230,
    "\u0899"=>220,
    "\u089A"=>220,
    "\u089B"=>220,
    "\u089C"=>230,
    "\u089D"=>230,
    "\u089E"=>230,
    "\u089F"=>230,
    "\u08CA"=>230,
    "\u08CB"=>230,
    "\u08CC"=>230,
    "\u08CD"=>230,
    "\u08CE"=>230,
    "\u08CF"=>220,
    "\u08D0"=>220,
    "\u08D1"=>220,
    "\u08D2"=>220,
    "\u08D3"=>220,
    "\u08D4"=>230,
    "\u08D5"=>230,
    "\u08D6"=>230,
    "\u08D7"=>230,
    "\u08D8"=>230,
    "\u08D9"=>230,
    "\u08DA"=>230,
    "\u08DB"=>230,
    "\u08DC"=>230,
    "\u08DD"=>230,
    "\u08DE"=>230,
    "\u08DF"=>230,
    "\u08E0"=>230,
    "\u08E1"=>230,
    "\u08E3"=>220,
    "\u08E4"=>230,
    "\u08E5"=>230,
    "\u08E6"=>220,
    "\u08E7"=>230,
    "\u08E8"=>230,
    "\u08E9"=>220,
    "\u08EA"=>230,
    "\u08EB"=>230,
    "\u08EC"=>230,
    "\u08ED"=>220,
    "\u08EE"=>220,
    "\u08EF"=>220,
    "\u08F0"=>27,
    "\u08F1"=>28,
    "\u08F2"=>29,
    "\u08F3"=>230,
    "\u08F4"=>230,
    "\u08F5"=>230,
    "\u08F6"=>220,
    "\u08F7"=>230,
    "\u08F8"=>230,
    "\u08F9"=>220,
    "\u08FA"=>220,
    "\u08FB"=>230,
    "\u08FC"=>230,
    "\u08FD"=>230,
    "\u08FE"=>230,
    "\u08FF"=>230,
    "\u093C"=>7,
    "\u094D"=>9,
    "\u0951"=>230,
    "\u0952"=>220,
    "\u0953"=>230,
    "\u0954"=>230,
    "\u09BC"=>7,
    "\u09CD"=>9,
    "\u09FE"=>230,
    "\u0A3C"=>7,
    "\u0A4D"=>9,
    "\u0ABC"=>7,
    "\u0ACD"=>9,
    "\u0B3C"=>7,
    "\u0B4D"=>9,
    "\u0BCD"=>9,
    "\u0C3C"=>7,
    "\u0C4D"=>9,
    "\u0C55"=>84,
    "\u0C56"=>91,
    "\u0CBC"=>7,
    "\u0CCD"=>9,
    "\u0D3B"=>9,
    "\u0D3C"=>9,
    "\u0D4D"=>9,
    "\u0DCA"=>9,
    "\u0E38"=>103,
    "\u0E39"=>103,
    "\u0E3A"=>9,
    "\u0E48"=>107,
    "\u0E49"=>107,
    "\u0E4A"=>107,
    "\u0E4B"=>107,
    "\u0EB8"=>118,
    "\u0EB9"=>118,
    "\u0EBA"=>9,
    "\u0EC8"=>122,
    "\u0EC9"=>122,
    "\u0ECA"=>122,
    "\u0ECB"=>122,
    "\u0F18"=>220,
    "\u0F19"=>220,
    "\u0F35"=>220,
    "\u0F37"=>220,
    "\u0F39"=>216,
    "\u0F71"=>129,
    "\u0F72"=>130,
    "\u0F74"=>132,
    "\u0F7A"=>130,
    "\u0F7B"=>130,
    "\u0F7C"=>130,
    "\u0F7D"=>130,
    "\u0F80"=>130,
    "\u0F82"=>230,
    "\u0F83"=>230,
    "\u0F84"=>9,
    "\u0F86"=>230,
    "\u0F87"=>230,
    "\u0FC6"=>220,
    "\u1037"=>7,
    "\u1039"=>9,
    "\u103A"=>9,
    "\u108D"=>220,
    "\u135D"=>230,
    "\u135E"=>230,
    "\u135F"=>230,
    "\u1714"=>9,
    "\u1715"=>9,
    "\u1734"=>9,
    "\u17D2"=>9,
    "\u17DD"=>230,
    "\u18A9"=>228,
    "\u1939"=>222,
    "\u193A"=>230,
    "\u193B"=>220,
    "\u1A17"=>230,
    "\u1A18"=>220,
    "\u1A60"=>9,
    "\u1A75"=>230,
    "\u1A76"=>230,
    "\u1A77"=>230,
    "\u1A78"=>230,
    "\u1A79"=>230,
    "\u1A7A"=>230,
    "\u1A7B"=>230,
    "\u1A7C"=>230,
    "\u1A7F"=>220,
    "\u1AB0"=>230,
    "\u1AB1"=>230,
    "\u1AB2"=>230,
    "\u1AB3"=>230,
    "\u1AB4"=>230,
    "\u1AB5"=>220,
    "\u1AB6"=>220,
    "\u1AB7"=>220,
    "\u1AB8"=>220,
    "\u1AB9"=>220,
    "\u1ABA"=>220,
    "\u1ABB"=>230,
    "\u1ABC"=>230,
    "\u1ABD"=>220,
    "\u1ABF"=>220,
    "\u1AC0"=>220,
    "\u1AC1"=>230,
    "\u1AC2"=>230,
    "\u1AC3"=>220,
    "\u1AC4"=>220,
    "\u1AC5"=>230,
    "\u1AC6"=>230,
    "\u1AC7"=>230,
    "\u1AC8"=>230,
    "\u1AC9"=>230,
    "\u1ACA"=>220,
    "\u1ACB"=>230,
    "\u1ACC"=>230,
    "\u1ACD"=>230,
    "\u1ACE"=>230,
    "\u1B34"=>7,
    "\u1B44"=>9,
    "\u1B6B"=>230,
    "\u1B6C"=>220,
    "\u1B6D"=>230,
    "\u1B6E"=>230,
    "\u1B6F"=>230,
    "\u1B70"=>230,
    "\u1B71"=>230,
    "\u1B72"=>230,
    "\u1B73"=>230,
    "\u1BAA"=>9,
    "\u1BAB"=>9,
    "\u1BE6"=>7,
    "\u1BF2"=>9,
    "\u1BF3"=>9,
    "\u1C37"=>7,
    "\u1CD0"=>230,
    "\u1CD1"=>230,
    "\u1CD2"=>230,
    "\u1CD4"=>1,
    "\u1CD5"=>220,
    "\u1CD6"=>220,
    "\u1CD7"=>220,
    "\u1CD8"=>220,
    "\u1CD9"=>220,
    "\u1CDA"=>230,
    "\u1CDB"=>230,
    "\u1CDC"=>220,
    "\u1CDD"=>220,
    "\u1CDE"=>220,
    "\u1CDF"=>220,
    "\u1CE0"=>230,
    "\u1CE2"=>1,
    "\u1CE3"=>1,
    "\u1CE4"=>1,
    "\u1CE5"=>1,
    "\u1CE6"=>1,
    "\u1CE7"=>1,
    "\u1CE8"=>1,
    "\u1CED"=>220,
    "\u1CF4"=>230,
    "\u1CF8"=>230,
    "\u1CF9"=>230,
    "\u1DC0"=>230,
    "\u1DC1"=>230,
    "\u1DC2"=>220,
    "\u1DC3"=>230,
    "\u1DC4"=>230,
    "\u1DC5"=>230,
    "\u1DC6"=>230,
    "\u1DC7"=>230,
    "\u1DC8"=>230,
    "\u1DC9"=>230,
    "\u1DCA"=>220,
    "\u1DCB"=>230,
    "\u1DCC"=>230,
    "\u1DCD"=>234,
    "\u1DCE"=>214,
    "\u1DCF"=>220,
    "\u1DD0"=>202,
    "\u1DD1"=>230,
    "\u1DD2"=>230,
    "\u1DD3"=>230,
    "\u1DD4"=>230,
    "\u1DD5"=>230,
    "\u1DD6"=>230,
    "\u1DD7"=>230,
    "\u1DD8"=>230,
    "\u1DD9"=>230,
    "\u1DDA"=>230,
    "\u1DDB"=>230,
    "\u1DDC"=>230,
    "\u1DDD"=>230,
    "\u1DDE"=>230,
    "\u1DDF"=>230,
    "\u1DE0"=>230,
    "\u1DE1"=>230,
    "\u1DE2"=>230,
    "\u1DE3"=>230,
    "\u1DE4"=>230,
    "\u1DE5"=>230,
    "\u1DE6"=>230,
    "\u1DE7"=>230,
    "\u1DE8"=>230,
    "\u1DE9"=>230,
    "\u1DEA"=>230,
    "\u1DEB"=>230,
    "\u1DEC"=>230,
    "\u1DED"=>230,
    "\u1DEE"=>230,
    "\u1DEF"=>230,
    "\u1DF0"=>230,
    "\u1DF1"=>230,
    "\u1DF2"=>230,
    "\u1DF3"=>230,
    "\u1DF4"=>230,
    "\u1DF5"=>230,
    "\u1DF6"=>232,
    "\u1DF7"=>228,
    "\u1DF8"=>228,
    "\u1DF9"=>220,
    "\u1DFA"=>218,
    "\u1DFB"=>230,
    "\u1DFC"=>233,
    "\u1DFD"=>220,
    "\u1DFE"=>230,
    "\u1DFF"=>220,
    "\u20D0"=>230,
    "\u20D1"=>230,
    "\u20D2"=>1,
    "\u20D3"=>1,
    "\u20D4"=>230,
    "\u20D5"=>230,
    "\u20D6"=>230,
    "\u20D7"=>230,
    "\u20D8"=>1,
    "\u20D9"=>1,
    "\u20DA"=>1,
    "\u20DB"=>230,
    "\u20DC"=>230,
    "\u20E1"=>230,
    "\u20E5"=>1,
    "\u20E6"=>1,
    "\u20E7"=>230,
    "\u20E8"=>220,
    "\u20E9"=>230,
    "\u20EA"=>1,
    "\u20EB"=>1,
    "\u20EC"=>220,
    "\u20ED"=>220,
    "\u20EE"=>220,
    "\u20EF"=>220,
    "\u20F0"=>230,
    "\u2CEF"=>230,
    "\u2CF0"=>230,
    "\u2CF1"=>230,
    "\u2D7F"=>9,
    "\u2DE0"=>230,
    "\u2DE1"=>230,
    "\u2DE2"=>230,
    "\u2DE3"=>230,
    "\u2DE4"=>230,
    "\u2DE5"=>230,
    "\u2DE6"=>230,
    "\u2DE7"=>230,
    "\u2DE8"=>230,
    "\u2DE9"=>230,
    "\u2DEA"=>230,
    "\u2DEB"=>230,
    "\u2DEC"=>230,
    "\u2DED"=>230,
    "\u2DEE"=>230,
    "\u2DEF"=>230,
    "\u2DF0"=>230,
    "\u2DF1"=>230,
    "\u2DF2"=>230,
    "\u2DF3"=>230,
    "\u2DF4"=>230,
    "\u2DF5"=>230,
    "\u2DF6"=>230,
    "\u2DF7"=>230,
    "\u2DF8"=>230,
    "\u2DF9"=>230,
    "\u2DFA"=>230,
    "\u2DFB"=>230,
    "\u2DFC"=>230,
    "\u2DFD"=>230,
    "\u2DFE"=>230,
    "\u2DFF"=>230,
    "\u302A"=>218,
    "\u302B"=>228,
    "\u302C"=>232,
    "\u302D"=>222,
    "\u302E"=>224,
    "\u302F"=>224,
    "\u3099"=>8,
    "\u309A"=>8,
    "\uA66F"=>230,
    "\uA674"=>230,
    "\uA675"=>230,
    "\uA676"=>230,
    "\uA677"=>230,
    "\uA678"=>230,
    "\uA679"=>230,
    "\uA67A"=>230,
    "\uA67B"=>230,
    "\uA67C"=>230,
    "\uA67D"=>230,
    "\uA69E"=>230,
    "\uA69F"=>230,
    "\uA6F0"=>230,
    "\uA6F1"=>230,
    "\uA806"=>9,
    "\uA82C"=>9,
    "\uA8C4"=>9,
    "\uA8E0"=>230,
    "\uA8E1"=>230,
    "\uA8E2"=>230,
    "\uA8E3"=>230,
    "\uA8E4"=>230,
    "\uA8E5"=>230,
    "\uA8E6"=>230,
    "\uA8E7"=>230,
    "\uA8E8"=>230,
    "\uA8E9"=>230,
    "\uA8EA"=>230,
    "\uA8EB"=>230,
    "\uA8EC"=>230,
    "\uA8ED"=>230,
    "\uA8EE"=>230,
    "\uA8EF"=>230,
    "\uA8F0"=>230,
    "\uA8F1"=>230,
    "\uA92B"=>220,
    "\uA92C"=>220,
    "\uA92D"=>220,
    "\uA953"=>9,
    "\uA9B3"=>7,
    "\uA9C0"=>9,
    "\uAAB0"=>230,
    "\uAAB2"=>230,
    "\uAAB3"=>230,
    "\uAAB4"=>220,
    "\uAAB7"=>230,
    "\uAAB8"=>230,
    "\uAABE"=>230,
    "\uAABF"=>230,
    "\uAAC1"=>230,
    "\uAAF6"=>9,
    "\uABED"=>9,
    "\uFB1E"=>26,
    "\uFE20"=>230,
    "\uFE21"=>230,
    "\uFE22"=>230,
    "\uFE23"=>230,
    "\uFE24"=>230,
    "\uFE25"=>230,
    "\uFE26"=>230,
    "\uFE27"=>220,
    "\uFE28"=>220,
    "\uFE29"=>220,
    "\uFE2A"=>220,
    "\uFE2B"=>220,
    "\uFE2C"=>220,
    "\uFE2D"=>220,
    "\uFE2E"=>230,
    "\uFE2F"=>230,
    "\u{101FD}"=>220,
    "\u{102E0}"=>220,
    "\u{10376}"=>230,
    "\u{10377}"=>230,
    "\u{10378}"=>230,
    "\u{10379}"=>230,
    "\u{1037A}"=>230,
    "\u{10A0D}"=>220,
    "\u{10A0F}"=>230,
    "\u{10A38}"=>230,
    "\u{10A39}"=>1,
    "\u{10A3A}"=>220,
    "\u{10A3F}"=>9,
    "\u{10AE5}"=>230,
    "\u{10AE6}"=>220,
    "\u{10D24}"=>230,
    "\u{10D25}"=>230,
    "\u{10D26}"=>230,
    "\u{10D27}"=>230,
    "\u{10EAB}"=>230,
    "\u{10EAC}"=>230,
    "\u{10EFD}"=>220,
    "\u{10EFE}"=>220,
    "\u{10EFF}"=>220,
    "\u{10F46}"=>220,
    "\u{10F47}"=>220,
    "\u{10F48}"=>230,
    "\u{10F49}"=>230,
    "\u{10F4A}"=>230,
    "\u{10F4B}"=>220,
    "\u{10F4C}"=>230,
    "\u{10F4D}"=>220,
    "\u{10F4E}"=>220,
    "\u{10F4F}"=>220,
    "\u{10F50}"=>220,
    "\u{10F82}"=>230,
    "\u{10F83}"=>220,
    "\u{10F84}"=>230,
    "\u{10F85}"=>220,
    "\u{11046}"=>9,
    "\u{11070}"=>9,
    "\u{1107F}"=>9,
    "\u{110B9}"=>9,
    "\u{110BA}"=>7,
    "\u{11100}"=>230,
    "\u{11101}"=>230,
    "\u{11102}"=>230,
    "\u{11133}"=>9,
    "\u{11134}"=>9,
    "\u{11173}"=>7,
    "\u{111C0}"=>9,
    "\u{111CA}"=>7,
    "\u{11235}"=>9,
    "\u{11236}"=>7,
    "\u{112E9}"=>7,
    "\u{112EA}"=>9,
    "\u{1133B}"=>7,
    "\u{1133C}"=>7,
    "\u{1134D}"=>9,
    "\u{11366}"=>230,
    "\u{11367}"=>230,
    "\u{11368}"=>230,
    "\u{11369}"=>230,
    "\u{1136A}"=>230,
    "\u{1136B}"=>230,
    "\u{1136C}"=>230,
    "\u{11370}"=>230,
    "\u{11371}"=>230,
    "\u{11372}"=>230,
    "\u{11373}"=>230,
    "\u{11374}"=>230,
    "\u{11442}"=>9,
    "\u{11446}"=>7,
    "\u{1145E}"=>230,
    "\u{114C2}"=>9,
    "\u{114C3}"=>7,
    "\u{115BF}"=>9,
    "\u{115C0}"=>7,
    "\u{1163F}"=>9,
    "\u{116B6}"=>9,
    "\u{116B7}"=>7,
    "\u{1172B}"=>9,
    "\u{11839}"=>9,
    "\u{1183A}"=>7,
    "\u{1193D}"=>9,
    "\u{1193E}"=>9,
    "\u{11943}"=>7,
    "\u{119E0}"=>9,
    "\u{11A34}"=>9,
    "\u{11A47}"=>9,
    "\u{11A99}"=>9,
    "\u{11C3F}"=>9,
    "\u{11D42}"=>7,
    "\u{11D44}"=>9,
    "\u{11D45}"=>9,
    "\u{11D97}"=>9,
    "\u{11F41}"=>9,
    "\u{11F42}"=>9,
    "\u{16AF0}"=>1,
    "\u{16AF1}"=>1,
    "\u{16AF2}"=>1,
    "\u{16AF3}"=>1,
    "\u{16AF4}"=>1,
    "\u{16B30}"=>230,
    "\u{16B31}"=>230,
    "\u{16B32}"=>230,
    "\u{16B33}"=>230,
    "\u{16B34}"=>230,
    "\u{16B35}"=>230,
    "\u{16B36}"=>230,
    "\u{16FF0}"=>6,
    "\u{16FF1}"=>6,
    "\u{1BC9E}"=>1,
    "\u{1D165}"=>216,
    "\u{1D166}"=>216,
    "\u{1D167}"=>1,
    "\u{1D168}"=>1,
    "\u{1D169}"=>1,
    "\u{1D16D}"=>226,
    "\u{1D16E}"=>216,
    "\u{1D16F}"=>216,
    "\u{1D170}"=>216,
    "\u{1D171}"=>216,
    "\u{1D172}"=>216,
    "\u{1D17B}"=>220,
    "\u{1D17C}"=>220,
    "\u{1D17D}"=>220,
    "\u{1D17E}"=>220,
    "\u{1D17F}"=>220,
    "\u{1D180}"=>220,
    "\u{1D181}"=>220,
    "\u{1D182}"=>220,
    "\u{1D185}"=>230,
    "\u{1D186}"=>230,
    "\u{1D187}"=>230,
    "\u{1D188}"=>230,
    "\u{1D189}"=>230,
    "\u{1D18A}"=>220,
    "\u{1D18B}"=>220,
    "\u{1D1AA}"=>230,
    "\u{1D1AB}"=>230,
    "\u{1D1AC}"=>230,
    "\u{1D1AD}"=>230,
    "\u{1D242}"=>230,
    "\u{1D243}"=>230,
    "\u{1D244}"=>230,
    "\u{1E000}"=>230,
    "\u{1E001}"=>230,
    "\u{1E002}"=>230,
    "\u{1E003}"=>230,
    "\u{1E004}"=>230,
    "\u{1E005}"=>230,
    "\u{1E006}"=>230,
    "\u{1E008}"=>230,
    "\u{1E009}"=>230,
    "\u{1E00A}"=>230,
    "\u{1E00B}"=>230,
    "\u{1E00C}"=>230,
    "\u{1E00D}"=>230,
    "\u{1E00E}"=>230,
    "\u{1E00F}"=>230,
    "\u{1E010}"=>230,
    "\u{1E011}"=>230,
    "\u{1E012}"=>230,
    "\u{1E013}"=>230,
    "\u{1E014}"=>230,
    "\u{1E015}"=>230,
    "\u{1E016}"=>230,
    "\u{1E017}"=>230,
    "\u{1E018}"=>230,
    "\u{1E01B}"=>230,
    "\u{1E01C}"=>230,
    "\u{1E01D}"=>230,
    "\u{1E01E}"=>230,
    "\u{1E01F}"=>230,
    "\u{1E020}"=>230,
    "\u{1E021}"=>230,
    "\u{1E023}"=>230,
    "\u{1E024}"=>230,
    "\u{1E026}"=>230,
    "\u{1E027}"=>230,
    "\u{1E028}"=>230,
    "\u{1E029}"=>230,
    "\u{1E02A}"=>230,
    "\u{1E08F}"=>230,
    "\u{1E130}"=>230,
    "\u{1E131}"=>230,
    "\u{1E132}"=>230,
    "\u{1E133}"=>230,
    "\u{1E134}"=>230,
    "\u{1E135}"=>230,
    "\u{1E136}"=>230,
    "\u{1E2AE}"=>230,
    "\u{1E2EC}"=>230,
    "\u{1E2ED}"=>230,
    "\u{1E2EE}"=>230,
    "\u{1E2EF}"=>230,
    "\u{1E4EC}"=>232,
    "\u{1E4ED}"=>232,
    "\u{1E4EE}"=>220,
    "\u{1E4EF}"=>230,
    "\u{1E8D0}"=>220,
    "\u{1E8D1}"=>220,
    "\u{1E8D2}"=>220,
    "\u{1E8D3}"=>220,
    "\u{1E8D4}"=>220,
    "\u{1E8D5}"=>220,
    "\u{1E8D6}"=>220,
    "\u{1E944}"=>230,
    "\u{1E945}"=>230,
    "\u{1E946}"=>230,
    "\u{1E947}"=>230,
    "\u{1E948}"=>230,
    "\u{1E949}"=>230,
    "\u{1E94A}"=>7,
  }
  class_table.default = 0
  CLASS_TABLE = class_table.freeze

  DECOMPOSITION_TABLE = {
    "\u00C0"=>"A\u0300",
    "\u00C1"=>"A\u0301",
    "\u00C2"=>"A\u0302",
    "\u00C3"=>"A\u0303",
    "\u00C4"=>"A\u0308",
    "\u00C5"=>"A\u030A",
    "\u00C7"=>"C\u0327",
    "\u00C8"=>"E\u0300",
    "\u00C9"=>"E\u0301",
    "\u00CA"=>"E\u0302",
    "\u00CB"=>"E\u0308",
    "\u00CC"=>"I\u0300",
    "\u00CD"=>"I\u0301",
    "\u00CE"=>"I\u0302",
    "\u00CF"=>"I\u0308",
    "\u00D1"=>"N\u0303",
    "\u00D2"=>"O\u0300",
    "\u00D3"=>"O\u0301",
    "\u00D4"=>"O\u0302",
    "\u00D5"=>"O\u0303",
    "\u00D6"=>"O\u0308",
    "\u00D9"=>"U\u0300",
    "\u00DA"=>"U\u0301",
    "\u00DB"=>"U\u0302",
    "\u00DC"=>"U\u0308",
    "\u00DD"=>"Y\u0301",
    "\u00E0"=>"a\u0300",
    "\u00E1"=>"a\u0301",
    "\u00E2"=>"a\u0302",
    "\u00E3"=>"a\u0303",
    "\u00E4"=>"a\u0308",
    "\u00E5"=>"a\u030A",
    "\u00E7"=>"c\u0327",
    "\u00E8"=>"e\u0300",
    "\u00E9"=>"e\u0301",
    "\u00EA"=>"e\u0302",
    "\u00EB"=>"e\u0308",
    "\u00EC"=>"i\u0300",
    "\u00ED"=>"i\u0301",
    "\u00EE"=>"i\u0302",
    "\u00EF"=>"i\u0308",
    "\u00F1"=>"n\u0303",
    "\u00F2"=>"o\u0300",
    "\u00F3"=>"o\u0301",
    "\u00F4"=>"o\u0302",
    "\u00F5"=>"o\u0303",
    "\u00F6"=>"o\u0308",
    "\u00F9"=>"u\u0300",
    "\u00FA"=>"u\u0301",
    "\u00FB"=>"u\u0302",
    "\u00FC"=>"u\u0308",
    "\u00FD"=>"y\u0301",
    "\u00FF"=>"y\u0308",
    "\u0100"=>"A\u0304",
    "\u0101"=>"a\u0304",
    "\u0102"=>"A\u0306",
    "\u0103"=>"a\u0306",
    "\u0104"=>"A\u0328",
    "\u0105"=>"a\u0328",
    "\u0106"=>"C\u0301",
    "\u0107"=>"c\u0301",
    "\u0108"=>"C\u0302",
    "\u0109"=>"c\u0302",
    "\u010A"=>"C\u0307",
    "\u010B"=>"c\u0307",
    "\u010C"=>"C\u030C",
    "\u010D"=>"c\u030C",
    "\u010E"=>"D\u030C",
    "\u010F"=>"d\u030C",
    "\u0112"=>"E\u0304",
    "\u0113"=>"e\u0304",
    "\u0114"=>"E\u0306",
    "\u0115"=>"e\u0306",
    "\u0116"=>"E\u0307",
    "\u0117"=>"e\u0307",
    "\u0118"=>"E\u0328",
    "\u0119"=>"e\u0328",
    "\u011A"=>"E\u030C",
    "\u011B"=>"e\u030C",
    "\u011C"=>"G\u0302",
    "\u011D"=>"g\u0302",
    "\u011E"=>"G\u0306",
    "\u011F"=>"g\u0306",
    "\u0120"=>"G\u0307",
    "\u0121"=>"g\u0307",
    "\u0122"=>"G\u0327",
    "\u0123"=>"g\u0327",
    "\u0124"=>"H\u0302",
    "\u0125"=>"h\u0302",
    "\u0128"=>"I\u0303",
    "\u0129"=>"i\u0303",
    "\u012A"=>"I\u0304",
    "\u012B"=>"i\u0304",
    "\u012C"=>"I\u0306",
    "\u012D"=>"i\u0306",
    "\u012E"=>"I\u0328",
    "\u012F"=>"i\u0328",
    "\u0130"=>"I\u0307",
    "\u0134"=>"J\u0302",
    "\u0135"=>"j\u0302",
    "\u0136"=>"K\u0327",
    "\u0137"=>"k\u0327",
    "\u0139"=>"L\u0301",
    "\u013A"=>"l\u0301",
    "\u013B"=>"L\u0327",
    "\u013C"=>"l\u0327",
    "\u013D"=>"L\u030C",
    "\u013E"=>"l\u030C",
    "\u0143"=>"N\u0301",
    "\u0144"=>"n\u0301",
    "\u0145"=>"N\u0327",
    "\u0146"=>"n\u0327",
    "\u0147"=>"N\u030C",
    "\u0148"=>"n\u030C",
    "\u014C"=>"O\u0304",
    "\u014D"=>"o\u0304",
    "\u014E"=>"O\u0306",
    "\u014F"=>"o\u0306",
    "\u0150"=>"O\u030B",
    "\u0151"=>"o\u030B",
    "\u0154"=>"R\u0301",
    "\u0155"=>"r\u0301",
    "\u0156"=>"R\u0327",
    "\u0157"=>"r\u0327",
    "\u0158"=>"R\u030C",
    "\u0159"=>"r\u030C",
    "\u015A"=>"S\u0301",
    "\u015B"=>"s\u0301",
    "\u015C"=>"S\u0302",
    "\u015D"=>"s\u0302",
    "\u015E"=>"S\u0327",
    "\u015F"=>"s\u0327",
    "\u0160"=>"S\u030C",
    "\u0161"=>"s\u030C",
    "\u0162"=>"T\u0327",
    "\u0163"=>"t\u0327",
    "\u0164"=>"T\u030C",
    "\u0165"=>"t\u030C",
    "\u0168"=>"U\u0303",
    "\u0169"=>"u\u0303",
    "\u016A"=>"U\u0304",
    "\u016B"=>"u\u0304",
    "\u016C"=>"U\u0306",
    "\u016D"=>"u\u0306",
    "\u016E"=>"U\u030A",
    "\u016F"=>"u\u030A",
    "\u0170"=>"U\u030B",
    "\u0171"=>"u\u030B",
    "\u0172"=>"U\u0328",
    "\u0173"=>"u\u0328",
    "\u0174"=>"W\u0302",
    "\u0175"=>"w\u0302",
    "\u0176"=>"Y\u0302",
    "\u0177"=>"y\u0302",
    "\u0178"=>"Y\u0308",
    "\u0179"=>"Z\u0301",
    "\u017A"=>"z\u0301",
    "\u017B"=>"Z\u0307",
    "\u017C"=>"z\u0307",
    "\u017D"=>"Z\u030C",
    "\u017E"=>"z\u030C",
    "\u01A0"=>"O\u031B",
    "\u01A1"=>"o\u031B",
    "\u01AF"=>"U\u031B",
    "\u01B0"=>"u\u031B",
    "\u01CD"=>"A\u030C",
    "\u01CE"=>"a\u030C",
    "\u01CF"=>"I\u030C",
    "\u01D0"=>"i\u030C",
    "\u01D1"=>"O\u030C",
    "\u01D2"=>"o\u030C",
    "\u01D3"=>"U\u030C",
    "\u01D4"=>"u\u030C",
    "\u01D5"=>"U\u0308\u0304",
    "\u01D6"=>"u\u0308\u0304",
    "\u01D7"=>"U\u0308\u0301",
    "\u01D8"=>"u\u0308\u0301",
    "\u01D9"=>"U\u0308\u030C",
    "\u01DA"=>"u\u0308\u030C",
    "\u01DB"=>"U\u0308\u0300",
    "\u01DC"=>"u\u0308\u0300",
    "\u01DE"=>"A\u0308\u0304",
    "\u01DF"=>"a\u0308\u0304",
    "\u01E0"=>"A\u0307\u0304",
    "\u01E1"=>"a\u0307\u0304",
    "\u01E2"=>"\u00C6\u0304",
    "\u01E3"=>"\u00E6\u0304",
    "\u01E6"=>"G\u030C",
    "\u01E7"=>"g\u030C",
    "\u01E8"=>"K\u030C",
    "\u01E9"=>"k\u030C",
    "\u01EA"=>"O\u0328",
    "\u01EB"=>"o\u0328",
    "\u01EC"=>"O\u0328\u0304",
    "\u01ED"=>"o\u0328\u0304",
    "\u01EE"=>"\u01B7\u030C",
    "\u01EF"=>"\u0292\u030C",
    "\u01F0"=>"j\u030C",
    "\u01F4"=>"G\u0301",
    "\u01F5"=>"g\u0301",
    "\u01F8"=>"N\u0300",
    "\u01F9"=>"n\u0300",
    "\u01FA"=>"A\u030A\u0301",
    "\u01FB"=>"a\u030A\u0301",
    "\u01FC"=>"\u00C6\u0301",
    "\u01FD"=>"\u00E6\u0301",
    "\u01FE"=>"\u00D8\u0301",
    "\u01FF"=>"\u00F8\u0301",
    "\u0200"=>"A\u030F",
    "\u0201"=>"a\u030F",
    "\u0202"=>"A\u0311",
    "\u0203"=>"a\u0311",
    "\u0204"=>"E\u030F",
    "\u0205"=>"e\u030F",
    "\u0206"=>"E\u0311",
    "\u0207"=>"e\u0311",
    "\u0208"=>"I\u030F",
    "\u0209"=>"i\u030F",
    "\u020A"=>"I\u0311",
    "\u020B"=>"i\u0311",
    "\u020C"=>"O\u030F",
    "\u020D"=>"o\u030F",
    "\u020E"=>"O\u0311",
    "\u020F"=>"o\u0311",
    "\u0210"=>"R\u030F",
    "\u0211"=>"r\u030F",
    "\u0212"=>"R\u0311",
    "\u0213"=>"r\u0311",
    "\u0214"=>"U\u030F",
    "\u0215"=>"u\u030F",
    "\u0216"=>"U\u0311",
    "\u0217"=>"u\u0311",
    "\u0218"=>"S\u0326",
    "\u0219"=>"s\u0326",
    "\u021A"=>"T\u0326",
    "\u021B"=>"t\u0326",
    "\u021E"=>"H\u030C",
    "\u021F"=>"h\u030C",
    "\u0226"=>"A\u0307",
    "\u0227"=>"a\u0307",
    "\u0228"=>"E\u0327",
    "\u0229"=>"e\u0327",
    "\u022A"=>"O\u0308\u0304",
    "\u022B"=>"o\u0308\u0304",
    "\u022C"=>"O\u0303\u0304",
    "\u022D"=>"o\u0303\u0304",
    "\u022E"=>"O\u0307",
    "\u022F"=>"o\u0307",
    "\u0230"=>"O\u0307\u0304",
    "\u0231"=>"o\u0307\u0304",
    "\u0232"=>"Y\u0304",
    "\u0233"=>"y\u0304",
    "\u0340"=>"\u0300",
    "\u0341"=>"\u0301",
    "\u0343"=>"\u0313",
    "\u0344"=>"\u0308\u0301",
    "\u0374"=>"\u02B9",
    "\u037E"=>";",
    "\u0385"=>"\u00A8\u0301",
    "\u0386"=>"\u0391\u0301",
    "\u0387"=>"\u00B7",
    "\u0388"=>"\u0395\u0301",
    "\u0389"=>"\u0397\u0301",
    "\u038A"=>"\u0399\u0301",
    "\u038C"=>"\u039F\u0301",
    "\u038E"=>"\u03A5\u0301",
    "\u038F"=>"\u03A9\u0301",
    "\u0390"=>"\u03B9\u0308\u0301",
    "\u03AA"=>"\u0399\u0308",
    "\u03AB"=>"\u03A5\u0308",
    "\u03AC"=>"\u03B1\u0301",
    "\u03AD"=>"\u03B5\u0301",
    "\u03AE"=>"\u03B7\u0301",
    "\u03AF"=>"\u03B9\u0301",
    "\u03B0"=>"\u03C5\u0308\u0301",
    "\u03CA"=>"\u03B9\u0308",
    "\u03CB"=>"\u03C5\u0308",
    "\u03CC"=>"\u03BF\u0301",
    "\u03CD"=>"\u03C5\u0301",
    "\u03CE"=>"\u03C9\u0301",
    "\u03D3"=>"\u03D2\u0301",
    "\u03D4"=>"\u03D2\u0308",
    "\u0400"=>"\u0415\u0300",
    "\u0401"=>"\u0415\u0308",
    "\u0403"=>"\u0413\u0301",
    "\u0407"=>"\u0406\u0308",
    "\u040C"=>"\u041A\u0301",
    "\u040D"=>"\u0418\u0300",
    "\u040E"=>"\u0423\u0306",
    "\u0419"=>"\u0418\u0306",
    "\u0439"=>"\u0438\u0306",
    "\u0450"=>"\u0435\u0300",
    "\u0451"=>"\u0435\u0308",
    "\u0453"=>"\u0433\u0301",
    "\u0457"=>"\u0456\u0308",
    "\u045C"=>"\u043A\u0301",
    "\u045D"=>"\u0438\u0300",
    "\u045E"=>"\u0443\u0306",
    "\u0476"=>"\u0474\u030F",
    "\u0477"=>"\u0475\u030F",
    "\u04C1"=>"\u0416\u0306",
    "\u04C2"=>"\u0436\u0306",
    "\u04D0"=>"\u0410\u0306",
    "\u04D1"=>"\u0430\u0306",
    "\u04D2"=>"\u0410\u0308",
    "\u04D3"=>"\u0430\u0308",
    "\u04D6"=>"\u0415\u0306",
    "\u04D7"=>"\u0435\u0306",
    "\u04DA"=>"\u04D8\u0308",
    "\u04DB"=>"\u04D9\u0308",
    "\u04DC"=>"\u0416\u0308",
    "\u04DD"=>"\u0436\u0308",
    "\u04DE"=>"\u0417\u0308",
    "\u04DF"=>"\u0437\u0308",
    "\u04E2"=>"\u0418\u0304",
    "\u04E3"=>"\u0438\u0304",
    "\u04E4"=>"\u0418\u0308",
    "\u04E5"=>"\u0438\u0308",
    "\u04E6"=>"\u041E\u0308",
    "\u04E7"=>"\u043E\u0308",
    "\u04EA"=>"\u04E8\u0308",
    "\u04EB"=>"\u04E9\u0308",
    "\u04EC"=>"\u042D\u0308",
    "\u04ED"=>"\u044D\u0308",
    "\u04EE"=>"\u0423\u0304",
    "\u04EF"=>"\u0443\u0304",
    "\u04F0"=>"\u0423\u0308",
    "\u04F1"=>"\u0443\u0308",
    "\u04F2"=>"\u0423\u030B",
    "\u04F3"=>"\u0443\u030B",
    "\u04F4"=>"\u0427\u0308",
    "\u04F5"=>"\u0447\u0308",
    "\u04F8"=>"\u042B\u0308",
    "\u04F9"=>"\u044B\u0308",
    "\u0622"=>"\u0627\u0653",
    "\u0623"=>"\u0627\u0654",
    "\u0624"=>"\u0648\u0654",
    "\u0625"=>"\u0627\u0655",
    "\u0626"=>"\u064A\u0654",
    "\u06C0"=>"\u06D5\u0654",
    "\u06C2"=>"\u06C1\u0654",
    "\u06D3"=>"\u06D2\u0654",
    "\u0929"=>"\u0928\u093C",
    "\u0931"=>"\u0930\u093C",
    "\u0934"=>"\u0933\u093C",
    "\u0958"=>"\u0915\u093C",
    "\u0959"=>"\u0916\u093C",
    "\u095A"=>"\u0917\u093C",
    "\u095B"=>"\u091C\u093C",
    "\u095C"=>"\u0921\u093C",
    "\u095D"=>"\u0922\u093C",
    "\u095E"=>"\u092B\u093C",
    "\u095F"=>"\u092F\u093C",
    "\u09CB"=>"\u09C7\u09BE",
    "\u09CC"=>"\u09C7\u09D7",
    "\u09DC"=>"\u09A1\u09BC",
    "\u09DD"=>"\u09A2\u09BC",
    "\u09DF"=>"\u09AF\u09BC",
    "\u0A33"=>"\u0A32\u0A3C",
    "\u0A36"=>"\u0A38\u0A3C",
    "\u0A59"=>"\u0A16\u0A3C",
    "\u0A5A"=>"\u0A17\u0A3C",
    "\u0A5B"=>"\u0A1C\u0A3C",
    "\u0A5E"=>"\u0A2B\u0A3C",
    "\u0B48"=>"\u0B47\u0B56",
    "\u0B4B"=>"\u0B47\u0B3E",
    "\u0B4C"=>"\u0B47\u0B57",
    "\u0B5C"=>"\u0B21\u0B3C",
    "\u0B5D"=>"\u0B22\u0B3C",
    "\u0B94"=>"\u0B92\u0BD7",
    "\u0BCA"=>"\u0BC6\u0BBE",
    "\u0BCB"=>"\u0BC7\u0BBE",
    "\u0BCC"=>"\u0BC6\u0BD7",
    "\u0C48"=>"\u0C46\u0C56",
    "\u0CC0"=>"\u0CBF\u0CD5",
    "\u0CC7"=>"\u0CC6\u0CD5",
    "\u0CC8"=>"\u0CC6\u0CD6",
    "\u0CCA"=>"\u0CC6\u0CC2",
    "\u0CCB"=>"\u0CC6\u0CC2\u0CD5",
    "\u0D4A"=>"\u0D46\u0D3E",
    "\u0D4B"=>"\u0D47\u0D3E",
    "\u0D4C"=>"\u0D46\u0D57",
    "\u0DDA"=>"\u0DD9\u0DCA",
    "\u0DDC"=>"\u0DD9\u0DCF",
    "\u0DDD"=>"\u0DD9\u0DCF\u0DCA",
    "\u0DDE"=>"\u0DD9\u0DDF",
    "\u0F43"=>"\u0F42\u0FB7",
    "\u0F4D"=>"\u0F4C\u0FB7",
    "\u0F52"=>"\u0F51\u0FB7",
    "\u0F57"=>"\u0F56\u0FB7",
    "\u0F5C"=>"\u0F5B\u0FB7",
    "\u0F69"=>"\u0F40\u0FB5",
    "\u0F73"=>"\u0F71\u0F72",
    "\u0F75"=>"\u0F71\u0F74",
    "\u0F76"=>"\u0FB2\u0F80",
    "\u0F78"=>"\u0FB3\u0F80",
    "\u0F81"=>"\u0F71\u0F80",
    "\u0F93"=>"\u0F92\u0FB7",
    "\u0F9D"=>"\u0F9C\u0FB7",
    "\u0FA2"=>"\u0FA1\u0FB7",
    "\u0FA7"=>"\u0FA6\u0FB7",
    "\u0FAC"=>"\u0FAB\u0FB7",
    "\u0FB9"=>"\u0F90\u0FB5",
    "\u1026"=>"\u1025\u102E",
    "\u1B06"=>"\u1B05\u1B35",
    "\u1B08"=>"\u1B07\u1B35",
    "\u1B0A"=>"\u1B09\u1B35",
    "\u1B0C"=>"\u1B0B\u1B35",
    "\u1B0E"=>"\u1B0D\u1B35",
    "\u1B12"=>"\u1B11\u1B35",
    "\u1B3B"=>"\u1B3A\u1B35",
    "\u1B3D"=>"\u1B3C\u1B35",
    "\u1B40"=>"\u1B3E\u1B35",
    "\u1B41"=>"\u1B3F\u1B35",
    "\u1B43"=>"\u1B42\u1B35",
    "\u1E00"=>"A\u0325",
    "\u1E01"=>"a\u0325",
    "\u1E02"=>"B\u0307",
    "\u1E03"=>"b\u0307",
    "\u1E04"=>"B\u0323",
    "\u1E05"=>"b\u0323",
    "\u1E06"=>"B\u0331",
    "\u1E07"=>"b\u0331",
    "\u1E08"=>"C\u0327\u0301",
    "\u1E09"=>"c\u0327\u0301",
    "\u1E0A"=>"D\u0307",
    "\u1E0B"=>"d\u0307",
    "\u1E0C"=>"D\u0323",
    "\u1E0D"=>"d\u0323",
    "\u1E0E"=>"D\u0331",
    "\u1E0F"=>"d\u0331",
    "\u1E10"=>"D\u0327",
    "\u1E11"=>"d\u0327",
    "\u1E12"=>"D\u032D",
    "\u1E13"=>"d\u032D",
    "\u1E14"=>"E\u0304\u0300",
    "\u1E15"=>"e\u0304\u0300",
    "\u1E16"=>"E\u0304\u0301",
    "\u1E17"=>"e\u0304\u0301",
    "\u1E18"=>"E\u032D",
    "\u1E19"=>"e\u032D",
    "\u1E1A"=>"E\u0330",
    "\u1E1B"=>"e\u0330",
    "\u1E1C"=>"E\u0327\u0306",
    "\u1E1D"=>"e\u0327\u0306",
    "\u1E1E"=>"F\u0307",
    "\u1E1F"=>"f\u0307",
    "\u1E20"=>"G\u0304",
    "\u1E21"=>"g\u0304",
    "\u1E22"=>"H\u0307",
    "\u1E23"=>"h\u0307",
    "\u1E24"=>"H\u0323",
    "\u1E25"=>"h\u0323",
    "\u1E26"=>"H\u0308",
    "\u1E27"=>"h\u0308",
    "\u1E28"=>"H\u0327",
    "\u1E29"=>"h\u0327",
    "\u1E2A"=>"H\u032E",
    "\u1E2B"=>"h\u032E",
    "\u1E2C"=>"I\u0330",
    "\u1E2D"=>"i\u0330",
    "\u1E2E"=>"I\u0308\u0301",
    "\u1E2F"=>"i\u0308\u0301",
    "\u1E30"=>"K\u0301",
    "\u1E31"=>"k\u0301",
    "\u1E32"=>"K\u0323",
    "\u1E33"=>"k\u0323",
    "\u1E34"=>"K\u0331",
    "\u1E35"=>"k\u0331",
    "\u1E36"=>"L\u0323",
    "\u1E37"=>"l\u0323",
    "\u1E38"=>"L\u0323\u0304",
    "\u1E39"=>"l\u0323\u0304",
    "\u1E3A"=>"L\u0331",
    "\u1E3B"=>"l\u0331",
    "\u1E3C"=>"L\u032D",
    "\u1E3D"=>"l\u032D",
    "\u1E3E"=>"M\u0301",
    "\u1E3F"=>"m\u0301",
    "\u1E40"=>"M\u0307",
    "\u1E41"=>"m\u0307",
    "\u1E42"=>"M\u0323",
    "\u1E43"=>"m\u0323",
    "\u1E44"=>"N\u0307",
    "\u1E45"=>"n\u0307",
    "\u1E46"=>"N\u0323",
    "\u1E47"=>"n\u0323",
    "\u1E48"=>"N\u0331",
    "\u1E49"=>"n\u0331",
    "\u1E4A"=>"N\u032D",
    "\u1E4B"=>"n\u032D",
    "\u1E4C"=>"O\u0303\u0301",
    "\u1E4D"=>"o\u0303\u0301",
    "\u1E4E"=>"O\u0303\u0308",
    "\u1E4F"=>"o\u0303\u0308",
    "\u1E50"=>"O\u0304\u0300",
    "\u1E51"=>"o\u0304\u0300",
    "\u1E52"=>"O\u0304\u0301",
    "\u1E53"=>"o\u0304\u0301",
    "\u1E54"=>"P\u0301",
    "\u1E55"=>"p\u0301",
    "\u1E56"=>"P\u0307",
    "\u1E57"=>"p\u0307",
    "\u1E58"=>"R\u0307",
    "\u1E59"=>"r\u0307",
    "\u1E5A"=>"R\u0323",
    "\u1E5B"=>"r\u0323",
    "\u1E5C"=>"R\u0323\u0304",
    "\u1E5D"=>"r\u0323\u0304",
    "\u1E5E"=>"R\u0331",
    "\u1E5F"=>"r\u0331",
    "\u1E60"=>"S\u0307",
    "\u1E61"=>"s\u0307",
    "\u1E62"=>"S\u0323",
    "\u1E63"=>"s\u0323",
    "\u1E64"=>"S\u0301\u0307",
    "\u1E65"=>"s\u0301\u0307",
    "\u1E66"=>"S\u030C\u0307",
    "\u1E67"=>"s\u030C\u0307",
    "\u1E68"=>"S\u0323\u0307",
    "\u1E69"=>"s\u0323\u0307",
    "\u1E6A"=>"T\u0307",
    "\u1E6B"=>"t\u0307",
    "\u1E6C"=>"T\u0323",
    "\u1E6D"=>"t\u0323",
    "\u1E6E"=>"T\u0331",
    "\u1E6F"=>"t\u0331",
    "\u1E70"=>"T\u032D",
    "\u1E71"=>"t\u032D",
    "\u1E72"=>"U\u0324",
    "\u1E73"=>"u\u0324",
    "\u1E74"=>"U\u0330",
    "\u1E75"=>"u\u0330",
    "\u1E76"=>"U\u032D",
    "\u1E77"=>"u\u032D",
    "\u1E78"=>"U\u0303\u0301",
    "\u1E79"=>"u\u0303\u0301",
    "\u1E7A"=>"U\u0304\u0308",
    "\u1E7B"=>"u\u0304\u0308",
    "\u1E7C"=>"V\u0303",
    "\u1E7D"=>"v\u0303",
    "\u1E7E"=>"V\u0323",
    "\u1E7F"=>"v\u0323",
    "\u1E80"=>"W\u0300",
    "\u1E81"=>"w\u0300",
    "\u1E82"=>"W\u0301",
    "\u1E83"=>"w\u0301",
    "\u1E84"=>"W\u0308",
    "\u1E85"=>"w\u0308",
    "\u1E86"=>"W\u0307",
    "\u1E87"=>"w\u0307",
    "\u1E88"=>"W\u0323",
    "\u1E89"=>"w\u0323",
    "\u1E8A"=>"X\u0307",
    "\u1E8B"=>"x\u0307",
    "\u1E8C"=>"X\u0308",
    "\u1E8D"=>"x\u0308",
    "\u1E8E"=>"Y\u0307",
    "\u1E8F"=>"y\u0307",
    "\u1E90"=>"Z\u0302",
    "\u1E91"=>"z\u0302",
    "\u1E92"=>"Z\u0323",
    "\u1E93"=>"z\u0323",
    "\u1E94"=>"Z\u0331",
    "\u1E95"=>"z\u0331",
    "\u1E96"=>"h\u0331",
    "\u1E97"=>"t\u0308",
    "\u1E98"=>"w\u030A",
    "\u1E99"=>"y\u030A",
    "\u1E9B"=>"\u017F\u0307",
    "\u1EA0"=>"A\u0323",
    "\u1EA1"=>"a\u0323",
    "\u1EA2"=>"A\u0309",
    "\u1EA3"=>"a\u0309",
    "\u1EA4"=>"A\u0302\u0301",
    "\u1EA5"=>"a\u0302\u0301",
    "\u1EA6"=>"A\u0302\u0300",
    "\u1EA7"=>"a\u0302\u0300",
    "\u1EA8"=>"A\u0302\u0309",
    "\u1EA9"=>"a\u0302\u0309",
    "\u1EAA"=>"A\u0302\u0303",
    "\u1EAB"=>"a\u0302\u0303",
    "\u1EAC"=>"A\u0323\u0302",
    "\u1EAD"=>"a\u0323\u0302",
    "\u1EAE"=>"A\u0306\u0301",
    "\u1EAF"=>"a\u0306\u0301",
    "\u1EB0"=>"A\u0306\u0300",
    "\u1EB1"=>"a\u0306\u0300",
    "\u1EB2"=>"A\u0306\u0309",
    "\u1EB3"=>"a\u0306\u0309",
    "\u1EB4"=>"A\u0306\u0303",
    "\u1EB5"=>"a\u0306\u0303",
    "\u1EB6"=>"A\u0323\u0306",
    "\u1EB7"=>"a\u0323\u0306",
    "\u1EB8"=>"E\u0323",
    "\u1EB9"=>"e\u0323",
    "\u1EBA"=>"E\u0309",
    "\u1EBB"=>"e\u0309",
    "\u1EBC"=>"E\u0303",
    "\u1EBD"=>"e\u0303",
    "\u1EBE"=>"E\u0302\u0301",
    "\u1EBF"=>"e\u0302\u0301",
    "\u1EC0"=>"E\u0302\u0300",
    "\u1EC1"=>"e\u0302\u0300",
    "\u1EC2"=>"E\u0302\u0309",
    "\u1EC3"=>"e\u0302\u0309",
    "\u1EC4"=>"E\u0302\u0303",
    "\u1EC5"=>"e\u0302\u0303",
    "\u1EC6"=>"E\u0323\u0302",
    "\u1EC7"=>"e\u0323\u0302",
    "\u1EC8"=>"I\u0309",
    "\u1EC9"=>"i\u0309",
    "\u1ECA"=>"I\u0323",
    "\u1ECB"=>"i\u0323",
    "\u1ECC"=>"O\u0323",
    "\u1ECD"=>"o\u0323",
    "\u1ECE"=>"O\u0309",
    "\u1ECF"=>"o\u0309",
    "\u1ED0"=>"O\u0302\u0301",
    "\u1ED1"=>"o\u0302\u0301",
    "\u1ED2"=>"O\u0302\u0300",
    "\u1ED3"=>"o\u0302\u0300",
    "\u1ED4"=>"O\u0302\u0309",
    "\u1ED5"=>"o\u0302\u0309",
    "\u1ED6"=>"O\u0302\u0303",
    "\u1ED7"=>"o\u0302\u0303",
    "\u1ED8"=>"O\u0323\u0302",
    "\u1ED9"=>"o\u0323\u0302",
    "\u1EDA"=>"O\u031B\u0301",
    "\u1EDB"=>"o\u031B\u0301",
    "\u1EDC"=>"O\u031B\u0300",
    "\u1EDD"=>"o\u031B\u0300",
    "\u1EDE"=>"O\u031B\u0309",
    "\u1EDF"=>"o\u031B\u0309",
    "\u1EE0"=>"O\u031B\u0303",
    "\u1EE1"=>"o\u031B\u0303",
    "\u1EE2"=>"O\u031B\u0323",
    "\u1EE3"=>"o\u031B\u0323",
    "\u1EE4"=>"U\u0323",
    "\u1EE5"=>"u\u0323",
    "\u1EE6"=>"U\u0309",
    "\u1EE7"=>"u\u0309",
    "\u1EE8"=>"U\u031B\u0301",
    "\u1EE9"=>"u\u031B\u0301",
    "\u1EEA"=>"U\u031B\u0300",
    "\u1EEB"=>"u\u031B\u0300",
    "\u1EEC"=>"U\u031B\u0309",
    "\u1EED"=>"u\u031B\u0309",
    "\u1EEE"=>"U\u031B\u0303",
    "\u1EEF"=>"u\u031B\u0303",
    "\u1EF0"=>"U\u031B\u0323",
    "\u1EF1"=>"u\u031B\u0323",
    "\u1EF2"=>"Y\u0300",
    "\u1EF3"=>"y\u0300",
    "\u1EF4"=>"Y\u0323",
    "\u1EF5"=>"y\u0323",
    "\u1EF6"=>"Y\u0309",
    "\u1EF7"=>"y\u0309",
    "\u1EF8"=>"Y\u0303",
    "\u1EF9"=>"y\u0303",
    "\u1F00"=>"\u03B1\u0313",
    "\u1F01"=>"\u03B1\u0314",
    "\u1F02"=>"\u03B1\u0313\u0300",
    "\u1F03"=>"\u03B1\u0314\u0300",
    "\u1F04"=>"\u03B1\u0313\u0301",
    "\u1F05"=>"\u03B1\u0314\u0301",
    "\u1F06"=>"\u03B1\u0313\u0342",
    "\u1F07"=>"\u03B1\u0314\u0342",
    "\u1F08"=>"\u0391\u0313",
    "\u1F09"=>"\u0391\u0314",
    "\u1F0A"=>"\u0391\u0313\u0300",
    "\u1F0B"=>"\u0391\u0314\u0300",
    "\u1F0C"=>"\u0391\u0313\u0301",
    "\u1F0D"=>"\u0391\u0314\u0301",
    "\u1F0E"=>"\u0391\u0313\u0342",
    "\u1F0F"=>"\u0391\u0314\u0342",
    "\u1F10"=>"\u03B5\u0313",
    "\u1F11"=>"\u03B5\u0314",
    "\u1F12"=>"\u03B5\u0313\u0300",
    "\u1F13"=>"\u03B5\u0314\u0300",
    "\u1F14"=>"\u03B5\u0313\u0301",
    "\u1F15"=>"\u03B5\u0314\u0301",
    "\u1F18"=>"\u0395\u0313",
    "\u1F19"=>"\u0395\u0314",
    "\u1F1A"=>"\u0395\u0313\u0300",
    "\u1F1B"=>"\u0395\u0314\u0300",
    "\u1F1C"=>"\u0395\u0313\u0301",
    "\u1F1D"=>"\u0395\u0314\u0301",
    "\u1F20"=>"\u03B7\u0313",
    "\u1F21"=>"\u03B7\u0314",
    "\u1F22"=>"\u03B7\u0313\u0300",
    "\u1F23"=>"\u03B7\u0314\u0300",
    "\u1F24"=>"\u03B7\u0313\u0301",
    "\u1F25"=>"\u03B7\u0314\u0301",
    "\u1F26"=>"\u03B7\u0313\u0342",
    "\u1F27"=>"\u03B7\u0314\u0342",
    "\u1F28"=>"\u0397\u0313",
    "\u1F29"=>"\u0397\u0314",
    "\u1F2A"=>"\u0397\u0313\u0300",
    "\u1F2B"=>"\u0397\u0314\u0300",
    "\u1F2C"=>"\u0397\u0313\u0301",
    "\u1F2D"=>"\u0397\u0314\u0301",
    "\u1F2E"=>"\u0397\u0313\u0342",
    "\u1F2F"=>"\u0397\u0314\u0342",
    "\u1F30"=>"\u03B9\u0313",
    "\u1F31"=>"\u03B9\u0314",
    "\u1F32"=>"\u03B9\u0313\u0300",
    "\u1F33"=>"\u03B9\u0314\u0300",
    "\u1F34"=>"\u03B9\u0313\u0301",
    "\u1F35"=>"\u03B9\u0314\u0301",
    "\u1F36"=>"\u03B9\u0313\u0342",
    "\u1F37"=>"\u03B9\u0314\u0342",
    "\u1F38"=>"\u0399\u0313",
    "\u1F39"=>"\u0399\u0314",
    "\u1F3A"=>"\u0399\u0313\u0300",
    "\u1F3B"=>"\u0399\u0314\u0300",
    "\u1F3C"=>"\u0399\u0313\u0301",
    "\u1F3D"=>"\u0399\u0314\u0301",
    "\u1F3E"=>"\u0399\u0313\u0342",
    "\u1F3F"=>"\u0399\u0314\u0342",
    "\u1F40"=>"\u03BF\u0313",
    "\u1F41"=>"\u03BF\u0314",
    "\u1F42"=>"\u03BF\u0313\u0300",
    "\u1F43"=>"\u03BF\u0314\u0300",
    "\u1F44"=>"\u03BF\u0313\u0301",
    "\u1F45"=>"\u03BF\u0314\u0301",
    "\u1F48"=>"\u039F\u0313",
    "\u1F49"=>"\u039F\u0314",
    "\u1F4A"=>"\u039F\u0313\u0300",
    "\u1F4B"=>"\u039F\u0314\u0300",
    "\u1F4C"=>"\u039F\u0313\u0301",
    "\u1F4D"=>"\u039F\u0314\u0301",
    "\u1F50"=>"\u03C5\u0313",
    "\u1F51"=>"\u03C5\u0314",
    "\u1F52"=>"\u03C5\u0313\u0300",
    "\u1F53"=>"\u03C5\u0314\u0300",
    "\u1F54"=>"\u03C5\u0313\u0301",
    "\u1F55"=>"\u03C5\u0314\u0301",
    "\u1F56"=>"\u03C5\u0313\u0342",
    "\u1F57"=>"\u03C5\u0314\u0342",
    "\u1F59"=>"\u03A5\u0314",
    "\u1F5B"=>"\u03A5\u0314\u0300",
    "\u1F5D"=>"\u03A5\u0314\u0301",
    "\u1F5F"=>"\u03A5\u0314\u0342",
    "\u1F60"=>"\u03C9\u0313",
    "\u1F61"=>"\u03C9\u0314",
    "\u1F62"=>"\u03C9\u0313\u0300",
    "\u1F63"=>"\u03C9\u0314\u0300",
    "\u1F64"=>"\u03C9\u0313\u0301",
    "\u1F65"=>"\u03C9\u0314\u0301",
    "\u1F66"=>"\u03C9\u0313\u0342",
    "\u1F67"=>"\u03C9\u0314\u0342",
    "\u1F68"=>"\u03A9\u0313",
    "\u1F69"=>"\u03A9\u0314",
    "\u1F6A"=>"\u03A9\u0313\u0300",
    "\u1F6B"=>"\u03A9\u0314\u0300",
    "\u1F6C"=>"\u03A9\u0313\u0301",
    "\u1F6D"=>"\u03A9\u0314\u0301",
    "\u1F6E"=>"\u03A9\u0313\u0342",
    "\u1F6F"=>"\u03A9\u0314\u0342",
    "\u1F70"=>"\u03B1\u0300",
    "\u1F71"=>"\u03B1\u0301",
    "\u1F72"=>"\u03B5\u0300",
    "\u1F73"=>"\u03B5\u0301",
    "\u1F74"=>"\u03B7\u0300",
    "\u1F75"=>"\u03B7\u0301",
    "\u1F76"=>"\u03B9\u0300",
    "\u1F77"=>"\u03B9\u0301",
    "\u1F78"=>"\u03BF\u0300",
    "\u1F79"=>"\u03BF\u0301",
    "\u1F7A"=>"\u03C5\u0300",
    "\u1F7B"=>"\u03C5\u0301",
    "\u1F7C"=>"\u03C9\u0300",
    "\u1F7D"=>"\u03C9\u0301",
    "\u1F80"=>"\u03B1\u0313\u0345",
    "\u1F81"=>"\u03B1\u0314\u0345",
    "\u1F82"=>"\u03B1\u0313\u0300\u0345",
    "\u1F83"=>"\u03B1\u0314\u0300\u0345",
    "\u1F84"=>"\u03B1\u0313\u0301\u0345",
    "\u1F85"=>"\u03B1\u0314\u0301\u0345",
    "\u1F86"=>"\u03B1\u0313\u0342\u0345",
    "\u1F87"=>"\u03B1\u0314\u0342\u0345",
    "\u1F88"=>"\u0391\u0313\u0345",
    "\u1F89"=>"\u0391\u0314\u0345",
    "\u1F8A"=>"\u0391\u0313\u0300\u0345",
    "\u1F8B"=>"\u0391\u0314\u0300\u0345",
    "\u1F8C"=>"\u0391\u0313\u0301\u0345",
    "\u1F8D"=>"\u0391\u0314\u0301\u0345",
    "\u1F8E"=>"\u0391\u0313\u0342\u0345",
    "\u1F8F"=>"\u0391\u0314\u0342\u0345",
    "\u1F90"=>"\u03B7\u0313\u0345",
    "\u1F91"=>"\u03B7\u0314\u0345",
    "\u1F92"=>"\u03B7\u0313\u0300\u0345",
    "\u1F93"=>"\u03B7\u0314\u0300\u0345",
    "\u1F94"=>"\u03B7\u0313\u0301\u0345",
    "\u1F95"=>"\u03B7\u0314\u0301\u0345",
    "\u1F96"=>"\u03B7\u0313\u0342\u0345",
    "\u1F97"=>"\u03B7\u0314\u0342\u0345",
    "\u1F98"=>"\u0397\u0313\u0345",
    "\u1F99"=>"\u0397\u0314\u0345",
    "\u1F9A"=>"\u0397\u0313\u0300\u0345",
    "\u1F9B"=>"\u0397\u0314\u0300\u0345",
    "\u1F9C"=>"\u0397\u0313\u0301\u0345",
    "\u1F9D"=>"\u0397\u0314\u0301\u0345",
    "\u1F9E"=>"\u0397\u0313\u0342\u0345",
    "\u1F9F"=>"\u0397\u0314\u0342\u0345",
    "\u1FA0"=>"\u03C9\u0313\u0345",
    "\u1FA1"=>"\u03C9\u0314\u0345",
    "\u1FA2"=>"\u03C9\u0313\u0300\u0345",
    "\u1FA3"=>"\u03C9\u0314\u0300\u0345",
    "\u1FA4"=>"\u03C9\u0313\u0301\u0345",
    "\u1FA5"=>"\u03C9\u0314\u0301\u0345",
    "\u1FA6"=>"\u03C9\u0313\u0342\u0345",
    "\u1FA7"=>"\u03C9\u0314\u0342\u0345",
    "\u1FA8"=>"\u03A9\u0313\u0345",
    "\u1FA9"=>"\u03A9\u0314\u0345",
    "\u1FAA"=>"\u03A9\u0313\u0300\u0345",
    "\u1FAB"=>"\u03A9\u0314\u0300\u0345",
    "\u1FAC"=>"\u03A9\u0313\u0301\u0345",
    "\u1FAD"=>"\u03A9\u0314\u0301\u0345",
    "\u1FAE"=>"\u03A9\u0313\u0342\u0345",
    "\u1FAF"=>"\u03A9\u0314\u0342\u0345",
    "\u1FB0"=>"\u03B1\u0306",
    "\u1FB1"=>"\u03B1\u0304",
    "\u1FB2"=>"\u03B1\u0300\u0345",
    "\u1FB3"=>"\u03B1\u0345",
    "\u1FB4"=>"\u03B1\u0301\u0345",
    "\u1FB6"=>"\u03B1\u0342",
    "\u1FB7"=>"\u03B1\u0342\u0345",
    "\u1FB8"=>"\u0391\u0306",
    "\u1FB9"=>"\u0391\u0304",
    "\u1FBA"=>"\u0391\u0300",
    "\u1FBB"=>"\u0391\u0301",
    "\u1FBC"=>"\u0391\u0345",
    "\u1FBE"=>"\u03B9",
    "\u1FC1"=>"\u00A8\u0342",
    "\u1FC2"=>"\u03B7\u0300\u0345",
    "\u1FC3"=>"\u03B7\u0345",
    "\u1FC4"=>"\u03B7\u0301\u0345",
    "\u1FC6"=>"\u03B7\u0342",
    "\u1FC7"=>"\u03B7\u0342\u0345",
    "\u1FC8"=>"\u0395\u0300",
    "\u1FC9"=>"\u0395\u0301",
    "\u1FCA"=>"\u0397\u0300",
    "\u1FCB"=>"\u0397\u0301",
    "\u1FCC"=>"\u0397\u0345",
    "\u1FCD"=>"\u1FBF\u0300",
    "\u1FCE"=>"\u1FBF\u0301",
    "\u1FCF"=>"\u1FBF\u0342",
    "\u1FD0"=>"\u03B9\u0306",
    "\u1FD1"=>"\u03B9\u0304",
    "\u1FD2"=>"\u03B9\u0308\u0300",
    "\u1FD3"=>"\u03B9\u0308\u0301",
    "\u1FD6"=>"\u03B9\u0342",
    "\u1FD7"=>"\u03B9\u0308\u0342",
    "\u1FD8"=>"\u0399\u0306",
    "\u1FD9"=>"\u0399\u0304",
    "\u1FDA"=>"\u0399\u0300",
    "\u1FDB"=>"\u0399\u0301",
    "\u1FDD"=>"\u1FFE\u0300",
    "\u1FDE"=>"\u1FFE\u0301",
    "\u1FDF"=>"\u1FFE\u0342",
    "\u1FE0"=>"\u03C5\u0306",
    "\u1FE1"=>"\u03C5\u0304",
    "\u1FE2"=>"\u03C5\u0308\u0300",
    "\u1FE3"=>"\u03C5\u0308\u0301",
    "\u1FE4"=>"\u03C1\u0313",
    "\u1FE5"=>"\u03C1\u0314",
    "\u1FE6"=>"\u03C5\u0342",
    "\u1FE7"=>"\u03C5\u0308\u0342",
    "\u1FE8"=>"\u03A5\u0306",
    "\u1FE9"=>"\u03A5\u0304",
    "\u1FEA"=>"\u03A5\u0300",
    "\u1FEB"=>"\u03A5\u0301",
    "\u1FEC"=>"\u03A1\u0314",
    "\u1FED"=>"\u00A8\u0300",
    "\u1FEE"=>"\u00A8\u0301",
    "\u1FEF"=>"`",
    "\u1FF2"=>"\u03C9\u0300\u0345",
    "\u1FF3"=>"\u03C9\u0345",
    "\u1FF4"=>"\u03C9\u0301\u0345",
    "\u1FF6"=>"\u03C9\u0342",
    "\u1FF7"=>"\u03C9\u0342\u0345",
    "\u1FF8"=>"\u039F\u0300",
    "\u1FF9"=>"\u039F\u0301",
    "\u1FFA"=>"\u03A9\u0300",
    "\u1FFB"=>"\u03A9\u0301",
    "\u1FFC"=>"\u03A9\u0345",
    "\u1FFD"=>"\u00B4",
    "\u2000"=>"\u2002",
    "\u2001"=>"\u2003",
    "\u2126"=>"\u03A9",
    "\u212A"=>"K",
    "\u212B"=>"A\u030A",
    "\u219A"=>"\u2190\u0338",
    "\u219B"=>"\u2192\u0338",
    "\u21AE"=>"\u2194\u0338",
    "\u21CD"=>"\u21D0\u0338",
    "\u21CE"=>"\u21D4\u0338",
    "\u21CF"=>"\u21D2\u0338",
    "\u2204"=>"\u2203\u0338",
    "\u2209"=>"\u2208\u0338",
    "\u220C"=>"\u220B\u0338",
    "\u2224"=>"\u2223\u0338",
    "\u2226"=>"\u2225\u0338",
    "\u2241"=>"\u223C\u0338",
    "\u2244"=>"\u2243\u0338",
    "\u2247"=>"\u2245\u0338",
    "\u2249"=>"\u2248\u0338",
    "\u2260"=>"=\u0338",
    "\u2262"=>"\u2261\u0338",
    "\u226D"=>"\u224D\u0338",
    "\u226E"=>"<\u0338",
    "\u226F"=>">\u0338",
    "\u2270"=>"\u2264\u0338",
    "\u2271"=>"\u2265\u0338",
    "\u2274"=>"\u2272\u0338",
    "\u2275"=>"\u2273\u0338",
    "\u2278"=>"\u2276\u0338",
    "\u2279"=>"\u2277\u0338",
    "\u2280"=>"\u227A\u0338",
    "\u2281"=>"\u227B\u0338",
    "\u2284"=>"\u2282\u0338",
    "\u2285"=>"\u2283\u0338",
    "\u2288"=>"\u2286\u0338",
    "\u2289"=>"\u2287\u0338",
    "\u22AC"=>"\u22A2\u0338",
    "\u22AD"=>"\u22A8\u0338",
    "\u22AE"=>"\u22A9\u0338",
    "\u22AF"=>"\u22AB\u0338",
    "\u22E0"=>"\u227C\u0338",
    "\u22E1"=>"\u227D\u0338",
    "\u22E2"=>"\u2291\u0338",
    "\u22E3"=>"\u2292\u0338",
    "\u22EA"=>"\u22B2\u0338",
    "\u22EB"=>"\u22B3\u0338",
    "\u22EC"=>"\u22B4\u0338",
    "\u22ED"=>"\u22B5\u0338",
    "\u2329"=>"\u3008",
    "\u232A"=>"\u3009",
    "\u2ADC"=>"\u2ADD\u0338",
    "\u304C"=>"\u304B\u3099",
    "\u304E"=>"\u304D\u3099",
    "\u3050"=>"\u304F\u3099",
    "\u3052"=>"\u3051\u3099",
    "\u3054"=>"\u3053\u3099",
    "\u3056"=>"\u3055\u3099",
    "\u3058"=>"\u3057\u3099",
    "\u305A"=>"\u3059\u3099",
    "\u305C"=>"\u305B\u3099",
    "\u305E"=>"\u305D\u3099",
    "\u3060"=>"\u305F\u3099",
    "\u3062"=>"\u3061\u3099",
    "\u3065"=>"\u3064\u3099",
    "\u3067"=>"\u3066\u3099",
    "\u3069"=>"\u3068\u3099",
    "\u3070"=>"\u306F\u3099",
    "\u3071"=>"\u306F\u309A",
    "\u3073"=>"\u3072\u3099",
    "\u3074"=>"\u3072\u309A",
    "\u3076"=>"\u3075\u3099",
    "\u3077"=>"\u3075\u309A",
    "\u3079"=>"\u3078\u3099",
    "\u307A"=>"\u3078\u309A",
    "\u307C"=>"\u307B\u3099",
    "\u307D"=>"\u307B\u309A",
    "\u3094"=>"\u3046\u3099",
    "\u309E"=>"\u309D\u3099",
    "\u30AC"=>"\u30AB\u3099",
    "\u30AE"=>"\u30AD\u3099",
    "\u30B0"=>"\u30AF\u3099",
    "\u30B2"=>"\u30B1\u3099",
    "\u30B4"=>"\u30B3\u3099",
    "\u30B6"=>"\u30B5\u3099",
    "\u30B8"=>"\u30B7\u3099",
    "\u30BA"=>"\u30B9\u3099",
    "\u30BC"=>"\u30BB\u3099",
    "\u30BE"=>"\u30BD\u3099",
    "\u30C0"=>"\u30BF\u3099",
    "\u30C2"=>"\u30C1\u3099",
    "\u30C5"=>"\u30C4\u3099",
    "\u30C7"=>"\u30C6\u3099",
    "\u30C9"=>"\u30C8\u3099",
    "\u30D0"=>"\u30CF\u3099",
    "\u30D1"=>"\u30CF\u309A",
    "\u30D3"=>"\u30D2\u3099",
    "\u30D4"=>"\u30D2\u309A",
    "\u30D6"=>"\u30D5\u3099",
    "\u30D7"=>"\u30D5\u309A",
    "\u30D9"=>"\u30D8\u3099",
    "\u30DA"=>"\u30D8\u309A",
    "\u30DC"=>"\u30DB\u3099",
    "\u30DD"=>"\u30DB\u309A",
    "\u30F4"=>"\u30A6\u3099",
    "\u30F7"=>"\u30EF\u3099",
    "\u30F8"=>"\u30F0\u3099",
    "\u30F9"=>"\u30F1\u3099",
    "\u30FA"=>"\u30F2\u3099",
    "\u30FE"=>"\u30FD\u3099",
    "\uF900"=>"\u8C48",
    "\uF901"=>"\u66F4",
    "\uF902"=>"\u8ECA",
    "\uF903"=>"\u8CC8",
    "\uF904"=>"\u6ED1",
    "\uF905"=>"\u4E32",
    "\uF906"=>"\u53E5",
    "\uF907"=>"\u9F9C",
    "\uF908"=>"\u9F9C",
    "\uF909"=>"\u5951",
    "\uF90A"=>"\u91D1",
    "\uF90B"=>"\u5587",
    "\uF90C"=>"\u5948",
    "\uF90D"=>"\u61F6",
    "\uF90E"=>"\u7669",
    "\uF90F"=>"\u7F85",
    "\uF910"=>"\u863F",
    "\uF911"=>"\u87BA",
    "\uF912"=>"\u88F8",
    "\uF913"=>"\u908F",
    "\uF914"=>"\u6A02",
    "\uF915"=>"\u6D1B",
    "\uF916"=>"\u70D9",
    "\uF917"=>"\u73DE",
    "\uF918"=>"\u843D",
    "\uF919"=>"\u916A",
    "\uF91A"=>"\u99F1",
    "\uF91B"=>"\u4E82",
    "\uF91C"=>"\u5375",
    "\uF91D"=>"\u6B04",
    "\uF91E"=>"\u721B",
    "\uF91F"=>"\u862D",
    "\uF920"=>"\u9E1E",
    "\uF921"=>"\u5D50",
    "\uF922"=>"\u6FEB",
    "\uF923"=>"\u85CD",
    "\uF924"=>"\u8964",
    "\uF925"=>"\u62C9",
    "\uF926"=>"\u81D8",
    "\uF927"=>"\u881F",
    "\uF928"=>"\u5ECA",
    "\uF929"=>"\u6717",
    "\uF92A"=>"\u6D6A",
    "\uF92B"=>"\u72FC",
    "\uF92C"=>"\u90CE",
    "\uF92D"=>"\u4F86",
    "\uF92E"=>"\u51B7",
    "\uF92F"=>"\u52DE",
    "\uF930"=>"\u64C4",
    "\uF931"=>"\u6AD3",
    "\uF932"=>"\u7210",
    "\uF933"=>"\u76E7",
    "\uF934"=>"\u8001",
    "\uF935"=>"\u8606",
    "\uF936"=>"\u865C",
    "\uF937"=>"\u8DEF",
    "\uF938"=>"\u9732",
    "\uF939"=>"\u9B6F",
    "\uF93A"=>"\u9DFA",
    "\uF93B"=>"\u788C",
    "\uF93C"=>"\u797F",
    "\uF93D"=>"\u7DA0",
    "\uF93E"=>"\u83C9",
    "\uF93F"=>"\u9304",
    "\uF940"=>"\u9E7F",
    "\uF941"=>"\u8AD6",
    "\uF942"=>"\u58DF",
    "\uF943"=>"\u5F04",
    "\uF944"=>"\u7C60",
    "\uF945"=>"\u807E",
    "\uF946"=>"\u7262",
    "\uF947"=>"\u78CA",
    "\uF948"=>"\u8CC2",
    "\uF949"=>"\u96F7",
    "\uF94A"=>"\u58D8",
    "\uF94B"=>"\u5C62",
    "\uF94C"=>"\u6A13",
    "\uF94D"=>"\u6DDA",
    "\uF94E"=>"\u6F0F",
    "\uF94F"=>"\u7D2F",
    "\uF950"=>"\u7E37",
    "\uF951"=>"\u964B",
    "\uF952"=>"\u52D2",
    "\uF953"=>"\u808B",
    "\uF954"=>"\u51DC",
    "\uF955"=>"\u51CC",
    "\uF956"=>"\u7A1C",
    "\uF957"=>"\u7DBE",
    "\uF958"=>"\u83F1",
    "\uF959"=>"\u9675",
    "\uF95A"=>"\u8B80",
    "\uF95B"=>"\u62CF",
    "\uF95C"=>"\u6A02",
    "\uF95D"=>"\u8AFE",
    "\uF95E"=>"\u4E39",
    "\uF95F"=>"\u5BE7",
    "\uF960"=>"\u6012",
    "\uF961"=>"\u7387",
    "\uF962"=>"\u7570",
    "\uF963"=>"\u5317",
    "\uF964"=>"\u78FB",
    "\uF965"=>"\u4FBF",
    "\uF966"=>"\u5FA9",
    "\uF967"=>"\u4E0D",
    "\uF968"=>"\u6CCC",
    "\uF969"=>"\u6578",
    "\uF96A"=>"\u7D22",
    "\uF96B"=>"\u53C3",
    "\uF96C"=>"\u585E",
    "\uF96D"=>"\u7701",
    "\uF96E"=>"\u8449",
    "\uF96F"=>"\u8AAA",
    "\uF970"=>"\u6BBA",
    "\uF971"=>"\u8FB0",
    "\uF972"=>"\u6C88",
    "\uF973"=>"\u62FE",
    "\uF974"=>"\u82E5",
    "\uF975"=>"\u63A0",
    "\uF976"=>"\u7565",
    "\uF977"=>"\u4EAE",
    "\uF978"=>"\u5169",
    "\uF979"=>"\u51C9",
    "\uF97A"=>"\u6881",
    "\uF97B"=>"\u7CE7",
    "\uF97C"=>"\u826F",
    "\uF97D"=>"\u8AD2",
    "\uF97E"=>"\u91CF",
    "\uF97F"=>"\u52F5",
    "\uF980"=>"\u5442",
    "\uF981"=>"\u5973",
    "\uF982"=>"\u5EEC",
    "\uF983"=>"\u65C5",
    "\uF984"=>"\u6FFE",
    "\uF985"=>"\u792A",
    "\uF986"=>"\u95AD",
    "\uF987"=>"\u9A6A",
    "\uF988"=>"\u9E97",
    "\uF989"=>"\u9ECE",
    "\uF98A"=>"\u529B",
    "\uF98B"=>"\u66C6",
    "\uF98C"=>"\u6B77",
    "\uF98D"=>"\u8F62",
    "\uF98E"=>"\u5E74",
    "\uF98F"=>"\u6190",
    "\uF990"=>"\u6200",
    "\uF991"=>"\u649A",
    "\uF992"=>"\u6F23",
    "\uF993"=>"\u7149",
    "\uF994"=>"\u7489",
    "\uF995"=>"\u79CA",
    "\uF996"=>"\u7DF4",
    "\uF997"=>"\u806F",
    "\uF998"=>"\u8F26",
    "\uF999"=>"\u84EE",
    "\uF99A"=>"\u9023",
    "\uF99B"=>"\u934A",
    "\uF99C"=>"\u5217",
    "\uF99D"=>"\u52A3",
    "\uF99E"=>"\u54BD",
    "\uF99F"=>"\u70C8",
    "\uF9A0"=>"\u88C2",
    "\uF9A1"=>"\u8AAA",
    "\uF9A2"=>"\u5EC9",
    "\uF9A3"=>"\u5FF5",
    "\uF9A4"=>"\u637B",
    "\uF9A5"=>"\u6BAE",
    "\uF9A6"=>"\u7C3E",
    "\uF9A7"=>"\u7375",
    "\uF9A8"=>"\u4EE4",
    "\uF9A9"=>"\u56F9",
    "\uF9AA"=>"\u5BE7",
    "\uF9AB"=>"\u5DBA",
    "\uF9AC"=>"\u601C",
    "\uF9AD"=>"\u73B2",
    "\uF9AE"=>"\u7469",
    "\uF9AF"=>"\u7F9A",
    "\uF9B0"=>"\u8046",
    "\uF9B1"=>"\u9234",
    "\uF9B2"=>"\u96F6",
    "\uF9B3"=>"\u9748",
    "\uF9B4"=>"\u9818",
    "\uF9B5"=>"\u4F8B",
    "\uF9B6"=>"\u79AE",
    "\uF9B7"=>"\u91B4",
    "\uF9B8"=>"\u96B8",
    "\uF9B9"=>"\u60E1",
    "\uF9BA"=>"\u4E86",
    "\uF9BB"=>"\u50DA",
    "\uF9BC"=>"\u5BEE",
    "\uF9BD"=>"\u5C3F",
    "\uF9BE"=>"\u6599",
    "\uF9BF"=>"\u6A02",
    "\uF9C0"=>"\u71CE",
    "\uF9C1"=>"\u7642",
    "\uF9C2"=>"\u84FC",
    "\uF9C3"=>"\u907C",
    "\uF9C4"=>"\u9F8D",
    "\uF9C5"=>"\u6688",
    "\uF9C6"=>"\u962E",
    "\uF9C7"=>"\u5289",
    "\uF9C8"=>"\u677B",
    "\uF9C9"=>"\u67F3",
    "\uF9CA"=>"\u6D41",
    "\uF9CB"=>"\u6E9C",
    "\uF9CC"=>"\u7409",
    "\uF9CD"=>"\u7559",
    "\uF9CE"=>"\u786B",
    "\uF9CF"=>"\u7D10",
    "\uF9D0"=>"\u985E",
    "\uF9D1"=>"\u516D",
    "\uF9D2"=>"\u622E",
    "\uF9D3"=>"\u9678",
    "\uF9D4"=>"\u502B",
    "\uF9D5"=>"\u5D19",
    "\uF9D6"=>"\u6DEA",
    "\uF9D7"=>"\u8F2A",
    "\uF9D8"=>"\u5F8B",
    "\uF9D9"=>"\u6144",
    "\uF9DA"=>"\u6817",
    "\uF9DB"=>"\u7387",
    "\uF9DC"=>"\u9686",
    "\uF9DD"=>"\u5229",
    "\uF9DE"=>"\u540F",
    "\uF9DF"=>"\u5C65",
    "\uF9E0"=>"\u6613",
    "\uF9E1"=>"\u674E",
    "\uF9E2"=>"\u68A8",
    "\uF9E3"=>"\u6CE5",
    "\uF9E4"=>"\u7406",
    "\uF9E5"=>"\u75E2",
    "\uF9E6"=>"\u7F79",
    "\uF9E7"=>"\u88CF",
    "\uF9E8"=>"\u88E1",
    "\uF9E9"=>"\u91CC",
    "\uF9EA"=>"\u96E2",
    "\uF9EB"=>"\u533F",
    "\uF9EC"=>"\u6EBA",
    "\uF9ED"=>"\u541D",
    "\uF9EE"=>"\u71D0",
    "\uF9EF"=>"\u7498",
    "\uF9F0"=>"\u85FA",
    "\uF9F1"=>"\u96A3",
    "\uF9F2"=>"\u9C57",
    "\uF9F3"=>"\u9E9F",
    "\uF9F4"=>"\u6797",
    "\uF9F5"=>"\u6DCB",
    "\uF9F6"=>"\u81E8",
    "\uF9F7"=>"\u7ACB",
    "\uF9F8"=>"\u7B20",
    "\uF9F9"=>"\u7C92",
    "\uF9FA"=>"\u72C0",
    "\uF9FB"=>"\u7099",
    "\uF9FC"=>"\u8B58",
    "\uF9FD"=>"\u4EC0",
    "\uF9FE"=>"\u8336",
    "\uF9FF"=>"\u523A",
    "\uFA00"=>"\u5207",
    "\uFA01"=>"\u5EA6",
    "\uFA02"=>"\u62D3",
    "\uFA03"=>"\u7CD6",
    "\uFA04"=>"\u5B85",
    "\uFA05"=>"\u6D1E",
    "\uFA06"=>"\u66B4",
    "\uFA07"=>"\u8F3B",
    "\uFA08"=>"\u884C",
    "\uFA09"=>"\u964D",
    "\uFA0A"=>"\u898B",
    "\uFA0B"=>"\u5ED3",
    "\uFA0C"=>"\u5140",
    "\uFA0D"=>"\u55C0",
    "\uFA10"=>"\u585A",
    "\uFA12"=>"\u6674",
    "\uFA15"=>"\u51DE",
    "\uFA16"=>"\u732A",
    "\uFA17"=>"\u76CA",
    "\uFA18"=>"\u793C",
    "\uFA19"=>"\u795E",
    "\uFA1A"=>"\u7965",
    "\uFA1B"=>"\u798F",
    "\uFA1C"=>"\u9756",
    "\uFA1D"=>"\u7CBE",
    "\uFA1E"=>"\u7FBD",
    "\uFA20"=>"\u8612",
    "\uFA22"=>"\u8AF8",
    "\uFA25"=>"\u9038",
    "\uFA26"=>"\u90FD",
    "\uFA2A"=>"\u98EF",
    "\uFA2B"=>"\u98FC",
    "\uFA2C"=>"\u9928",
    "\uFA2D"=>"\u9DB4",
    "\uFA2E"=>"\u90DE",
    "\uFA2F"=>"\u96B7",
    "\uFA30"=>"\u4FAE",
    "\uFA31"=>"\u50E7",
    "\uFA32"=>"\u514D",
    "\uFA33"=>"\u52C9",
    "\uFA34"=>"\u52E4",
    "\uFA35"=>"\u5351",
    "\uFA36"=>"\u559D",
    "\uFA37"=>"\u5606",
    "\uFA38"=>"\u5668",
    "\uFA39"=>"\u5840",
    "\uFA3A"=>"\u58A8",
    "\uFA3B"=>"\u5C64",
    "\uFA3C"=>"\u5C6E",
    "\uFA3D"=>"\u6094",
    "\uFA3E"=>"\u6168",
    "\uFA3F"=>"\u618E",
    "\uFA40"=>"\u61F2",
    "\uFA41"=>"\u654F",
    "\uFA42"=>"\u65E2",
    "\uFA43"=>"\u6691",
    "\uFA44"=>"\u6885",
    "\uFA45"=>"\u6D77",
    "\uFA46"=>"\u6E1A",
    "\uFA47"=>"\u6F22",
    "\uFA48"=>"\u716E",
    "\uFA49"=>"\u722B",
    "\uFA4A"=>"\u7422",
    "\uFA4B"=>"\u7891",
    "\uFA4C"=>"\u793E",
    "\uFA4D"=>"\u7949",
    "\uFA4E"=>"\u7948",
    "\uFA4F"=>"\u7950",
    "\uFA50"=>"\u7956",
    "\uFA51"=>"\u795D",
    "\uFA52"=>"\u798D",
    "\uFA53"=>"\u798E",
    "\uFA54"=>"\u7A40",
    "\uFA55"=>"\u7A81",
    "\uFA56"=>"\u7BC0",
    "\uFA57"=>"\u7DF4",
    "\uFA58"=>"\u7E09",
    "\uFA59"=>"\u7E41",
    "\uFA5A"=>"\u7F72",
    "\uFA5B"=>"\u8005",
    "\uFA5C"=>"\u81ED",
    "\uFA5D"=>"\u8279",
    "\uFA5E"=>"\u8279",
    "\uFA5F"=>"\u8457",
    "\uFA60"=>"\u8910",
    "\uFA61"=>"\u8996",
    "\uFA62"=>"\u8B01",
    "\uFA63"=>"\u8B39",
    "\uFA64"=>"\u8CD3",
    "\uFA65"=>"\u8D08",
    "\uFA66"=>"\u8FB6",
    "\uFA67"=>"\u9038",
    "\uFA68"=>"\u96E3",
    "\uFA69"=>"\u97FF",
    "\uFA6A"=>"\u983B",
    "\uFA6B"=>"\u6075",
    "\uFA6C"=>"\u{242EE}",
    "\uFA6D"=>"\u8218",
    "\uFA70"=>"\u4E26",
    "\uFA71"=>"\u51B5",
    "\uFA72"=>"\u5168",
    "\uFA73"=>"\u4F80",
    "\uFA74"=>"\u5145",
    "\uFA75"=>"\u5180",
    "\uFA76"=>"\u52C7",
    "\uFA77"=>"\u52FA",
    "\uFA78"=>"\u559D",
    "\uFA79"=>"\u5555",
    "\uFA7A"=>"\u5599",
    "\uFA7B"=>"\u55E2",
    "\uFA7C"=>"\u585A",
    "\uFA7D"=>"\u58B3",
    "\uFA7E"=>"\u5944",
    "\uFA7F"=>"\u5954",
    "\uFA80"=>"\u5A62",
    "\uFA81"=>"\u5B28",
    "\uFA82"=>"\u5ED2",
    "\uFA83"=>"\u5ED9",
    "\uFA84"=>"\u5F69",
    "\uFA85"=>"\u5FAD",
    "\uFA86"=>"\u60D8",
    "\uFA87"=>"\u614E",
    "\uFA88"=>"\u6108",
    "\uFA89"=>"\u618E",
    "\uFA8A"=>"\u6160",
    "\uFA8B"=>"\u61F2",
    "\uFA8C"=>"\u6234",
    "\uFA8D"=>"\u63C4",
    "\uFA8E"=>"\u641C",
    "\uFA8F"=>"\u6452",
    "\uFA90"=>"\u6556",
    "\uFA91"=>"\u6674",
    "\uFA92"=>"\u6717",
    "\uFA93"=>"\u671B",
    "\uFA94"=>"\u6756",
    "\uFA95"=>"\u6B79",
    "\uFA96"=>"\u6BBA",
    "\uFA97"=>"\u6D41",
    "\uFA98"=>"\u6EDB",
    "\uFA99"=>"\u6ECB",
    "\uFA9A"=>"\u6F22",
    "\uFA9B"=>"\u701E",
    "\uFA9C"=>"\u716E",
    "\uFA9D"=>"\u77A7",
    "\uFA9E"=>"\u7235",
    "\uFA9F"=>"\u72AF",
    "\uFAA0"=>"\u732A",
    "\uFAA1"=>"\u7471",
    "\uFAA2"=>"\u7506",
    "\uFAA3"=>"\u753B",
    "\uFAA4"=>"\u761D",
    "\uFAA5"=>"\u761F",
    "\uFAA6"=>"\u76CA",
    "\uFAA7"=>"\u76DB",
    "\uFAA8"=>"\u76F4",
    "\uFAA9"=>"\u774A",
    "\uFAAA"=>"\u7740",
    "\uFAAB"=>"\u78CC",
    "\uFAAC"=>"\u7AB1",
    "\uFAAD"=>"\u7BC0",
    "\uFAAE"=>"\u7C7B",
    "\uFAAF"=>"\u7D5B",
    "\uFAB0"=>"\u7DF4",
    "\uFAB1"=>"\u7F3E",
    "\uFAB2"=>"\u8005",
    "\uFAB3"=>"\u8352",
    "\uFAB4"=>"\u83EF",
    "\uFAB5"=>"\u8779",
    "\uFAB6"=>"\u8941",
    "\uFAB7"=>"\u8986",
    "\uFAB8"=>"\u8996",
    "\uFAB9"=>"\u8ABF",
    "\uFABA"=>"\u8AF8",
    "\uFABB"=>"\u8ACB",
    "\uFABC"=>"\u8B01",
    "\uFABD"=>"\u8AFE",
    "\uFABE"=>"\u8AED",
    "\uFABF"=>"\u8B39",
    "\uFAC0"=>"\u8B8A",
    "\uFAC1"=>"\u8D08",
    "\uFAC2"=>"\u8F38",
    "\uFAC3"=>"\u9072",
    "\uFAC4"=>"\u9199",
    "\uFAC5"=>"\u9276",
    "\uFAC6"=>"\u967C",
    "\uFAC7"=>"\u96E3",
    "\uFAC8"=>"\u9756",
    "\uFAC9"=>"\u97DB",
    "\uFACA"=>"\u97FF",
    "\uFACB"=>"\u980B",
    "\uFACC"=>"\u983B",
    "\uFACD"=>"\u9B12",
    "\uFACE"=>"\u9F9C",
    "\uFACF"=>"\u{2284A}",
    "\uFAD0"=>"\u{22844}",
    "\uFAD1"=>"\u{233D5}",
    "\uFAD2"=>"\u3B9D",
    "\uFAD3"=>"\u4018",
    "\uFAD4"=>"\u4039",
    "\uFAD5"=>"\u{25249}",
    "\uFAD6"=>"\u{25CD0}",
    "\uFAD7"=>"\u{27ED3}",
    "\uFAD8"=>"\u9F43",
    "\uFAD9"=>"\u9F8E",
    "\uFB1D"=>"\u05D9\u05B4",
    "\uFB1F"=>"\u05F2\u05B7",
    "\uFB2A"=>"\u05E9\u05C1",
    "\uFB2B"=>"\u05E9\u05C2",
    "\uFB2C"=>"\u05E9\u05BC\u05C1",
    "\uFB2D"=>"\u05E9\u05BC\u05C2",
    "\uFB2E"=>"\u05D0\u05B7",
    "\uFB2F"=>"\u05D0\u05B8",
    "\uFB30"=>"\u05D0\u05BC",
    "\uFB31"=>"\u05D1\u05BC",
    "\uFB32"=>"\u05D2\u05BC",
    "\uFB33"=>"\u05D3\u05BC",
    "\uFB34"=>"\u05D4\u05BC",
    "\uFB35"=>"\u05D5\u05BC",
    "\uFB36"=>"\u05D6\u05BC",
    "\uFB38"=>"\u05D8\u05BC",
    "\uFB39"=>"\u05D9\u05BC",
    "\uFB3A"=>"\u05DA\u05BC",
    "\uFB3B"=>"\u05DB\u05BC",
    "\uFB3C"=>"\u05DC\u05BC",
    "\uFB3E"=>"\u05DE\u05BC",
    "\uFB40"=>"\u05E0\u05BC",
    "\uFB41"=>"\u05E1\u05BC",
    "\uFB43"=>"\u05E3\u05BC",
    "\uFB44"=>"\u05E4\u05BC",
    "\uFB46"=>"\u05E6\u05BC",
    "\uFB47"=>"\u05E7\u05BC",
    "\uFB48"=>"\u05E8\u05BC",
    "\uFB49"=>"\u05E9\u05BC",
    "\uFB4A"=>"\u05EA\u05BC",
    "\uFB4B"=>"\u05D5\u05B9",
    "\uFB4C"=>"\u05D1\u05BF",
    "\uFB4D"=>"\u05DB\u05BF",
    "\uFB4E"=>"\u05E4\u05BF",
    "\u{1109A}"=>"\u{11099}\u{110BA}",
    "\u{1109C}"=>"\u{1109B}\u{110BA}",
    "\u{110AB}"=>"\u{110A5}\u{110BA}",
    "\u{1112E}"=>"\u{11131}\u{11127}",
    "\u{1112F}"=>"\u{11132}\u{11127}",
    "\u{1134B}"=>"\u{11347}\u{1133E}",
    "\u{1134C}"=>"\u{11347}\u{11357}",
    "\u{114BB}"=>"\u{114B9}\u{114BA}",
    "\u{114BC}"=>"\u{114B9}\u{114B0}",
    "\u{114BE}"=>"\u{114B9}\u{114BD}",
    "\u{115BA}"=>"\u{115B8}\u{115AF}",
    "\u{115BB}"=>"\u{115B9}\u{115AF}",
    "\u{11938}"=>"\u{11935}\u{11930}",
    "\u{1D15E}"=>"\u{1D157}\u{1D165}",
    "\u{1D15F}"=>"\u{1D158}\u{1D165}",
    "\u{1D160}"=>"\u{1D158}\u{1D165}\u{1D16E}",
    "\u{1D161}"=>"\u{1D158}\u{1D165}\u{1D16F}",
    "\u{1D162}"=>"\u{1D158}\u{1D165}\u{1D170}",
    "\u{1D163}"=>"\u{1D158}\u{1D165}\u{1D171}",
    "\u{1D164}"=>"\u{1D158}\u{1D165}\u{1D172}",
    "\u{1D1BB}"=>"\u{1D1B9}\u{1D165}",
    "\u{1D1BC}"=>"\u{1D1BA}\u{1D165}",
    "\u{1D1BD}"=>"\u{1D1B9}\u{1D165}\u{1D16E}",
    "\u{1D1BE}"=>"\u{1D1BA}\u{1D165}\u{1D16E}",
    "\u{1D1BF}"=>"\u{1D1B9}\u{1D165}\u{1D16F}",
    "\u{1D1C0}"=>"\u{1D1BA}\u{1D165}\u{1D16F}",
    "\u{2F800}"=>"\u4E3D",
    "\u{2F801}"=>"\u4E38",
    "\u{2F802}"=>"\u4E41",
    "\u{2F803}"=>"\u{20122}",
    "\u{2F804}"=>"\u4F60",
    "\u{2F805}"=>"\u4FAE",
    "\u{2F806}"=>"\u4FBB",
    "\u{2F807}"=>"\u5002",
    "\u{2F808}"=>"\u507A",
    "\u{2F809}"=>"\u5099",
    "\u{2F80A}"=>"\u50E7",
    "\u{2F80B}"=>"\u50CF",
    "\u{2F80C}"=>"\u349E",
    "\u{2F80D}"=>"\u{2063A}",
    "\u{2F80E}"=>"\u514D",
    "\u{2F80F}"=>"\u5154",
    "\u{2F810}"=>"\u5164",
    "\u{2F811}"=>"\u5177",
    "\u{2F812}"=>"\u{2051C}",
    "\u{2F813}"=>"\u34B9",
    "\u{2F814}"=>"\u5167",
    "\u{2F815}"=>"\u518D",
    "\u{2F816}"=>"\u{2054B}",
    "\u{2F817}"=>"\u5197",
    "\u{2F818}"=>"\u51A4",
    "\u{2F819}"=>"\u4ECC",
    "\u{2F81A}"=>"\u51AC",
    "\u{2F81B}"=>"\u51B5",
    "\u{2F81C}"=>"\u{291DF}",
    "\u{2F81D}"=>"\u51F5",
    "\u{2F81E}"=>"\u5203",
    "\u{2F81F}"=>"\u34DF",
    "\u{2F820}"=>"\u523B",
    "\u{2F821}"=>"\u5246",
    "\u{2F822}"=>"\u5272",
    "\u{2F823}"=>"\u5277",
    "\u{2F824}"=>"\u3515",
    "\u{2F825}"=>"\u52C7",
    "\u{2F826}"=>"\u52C9",
    "\u{2F827}"=>"\u52E4",
    "\u{2F828}"=>"\u52FA",
    "\u{2F829}"=>"\u5305",
    "\u{2F82A}"=>"\u5306",
    "\u{2F82B}"=>"\u5317",
    "\u{2F82C}"=>"\u5349",
    "\u{2F82D}"=>"\u5351",
    "\u{2F82E}"=>"\u535A",
    "\u{2F82F}"=>"\u5373",
    "\u{2F830}"=>"\u537D",
    "\u{2F831}"=>"\u537F",
    "\u{2F832}"=>"\u537F",
    "\u{2F833}"=>"\u537F",
    "\u{2F834}"=>"\u{20A2C}",
    "\u{2F835}"=>"\u7070",
    "\u{2F836}"=>"\u53CA",
    "\u{2F837}"=>"\u53DF",
    "\u{2F838}"=>"\u{20B63}",
    "\u{2F839}"=>"\u53EB",
    "\u{2F83A}"=>"\u53F1",
    "\u{2F83B}"=>"\u5406",
    "\u{2F83C}"=>"\u549E",
    "\u{2F83D}"=>"\u5438",
    "\u{2F83E}"=>"\u5448",
    "\u{2F83F}"=>"\u5468",
    "\u{2F840}"=>"\u54A2",
    "\u{2F841}"=>"\u54F6",
    "\u{2F842}"=>"\u5510",
    "\u{2F843}"=>"\u5553",
    "\u{2F844}"=>"\u5563",
    "\u{2F845}"=>"\u5584",
    "\u{2F846}"=>"\u5584",
    "\u{2F847}"=>"\u5599",
    "\u{2F848}"=>"\u55AB",
    "\u{2F849}"=>"\u55B3",
    "\u{2F84A}"=>"\u55C2",
    "\u{2F84B}"=>"\u5716",
    "\u{2F84C}"=>"\u5606",
    "\u{2F84D}"=>"\u5717",
    "\u{2F84E}"=>"\u5651",
    "\u{2F84F}"=>"\u5674",
    "\u{2F850}"=>"\u5207",
    "\u{2F851}"=>"\u58EE",
    "\u{2F852}"=>"\u57CE",
    "\u{2F853}"=>"\u57F4",
    "\u{2F854}"=>"\u580D",
    "\u{2F855}"=>"\u578B",
    "\u{2F856}"=>"\u5832",
    "\u{2F857}"=>"\u5831",
    "\u{2F858}"=>"\u58AC",
    "\u{2F859}"=>"\u{214E4}",
    "\u{2F85A}"=>"\u58F2",
    "\u{2F85B}"=>"\u58F7",
    "\u{2F85C}"=>"\u5906",
    "\u{2F85D}"=>"\u591A",
    "\u{2F85E}"=>"\u5922",
    "\u{2F85F}"=>"\u5962",
    "\u{2F860}"=>"\u{216A8}",
    "\u{2F861}"=>"\u{216EA}",
    "\u{2F862}"=>"\u59EC",
    "\u{2F863}"=>"\u5A1B",
    "\u{2F864}"=>"\u5A27",
    "\u{2F865}"=>"\u59D8",
    "\u{2F866}"=>"\u5A66",
    "\u{2F867}"=>"\u36EE",
    "\u{2F868}"=>"\u36FC",
    "\u{2F869}"=>"\u5B08",
    "\u{2F86A}"=>"\u5B3E",
    "\u{2F86B}"=>"\u5B3E",
    "\u{2F86C}"=>"\u{219C8}",
    "\u{2F86D}"=>"\u5BC3",
    "\u{2F86E}"=>"\u5BD8",
    "\u{2F86F}"=>"\u5BE7",
    "\u{2F870}"=>"\u5BF3",
    "\u{2F871}"=>"\u{21B18}",
    "\u{2F872}"=>"\u5BFF",
    "\u{2F873}"=>"\u5C06",
    "\u{2F874}"=>"\u5F53",
    "\u{2F875}"=>"\u5C22",
    "\u{2F876}"=>"\u3781",
    "\u{2F877}"=>"\u5C60",
    "\u{2F878}"=>"\u5C6E",
    "\u{2F879}"=>"\u5CC0",
    "\u{2F87A}"=>"\u5C8D",
    "\u{2F87B}"=>"\u{21DE4}",
    "\u{2F87C}"=>"\u5D43",
    "\u{2F87D}"=>"\u{21DE6}",
    "\u{2F87E}"=>"\u5D6E",
    "\u{2F87F}"=>"\u5D6B",
    "\u{2F880}"=>"\u5D7C",
    "\u{2F881}"=>"\u5DE1",
    "\u{2F882}"=>"\u5DE2",
    "\u{2F883}"=>"\u382F",
    "\u{2F884}"=>"\u5DFD",
    "\u{2F885}"=>"\u5E28",
    "\u{2F886}"=>"\u5E3D",
    "\u{2F887}"=>"\u5E69",
    "\u{2F888}"=>"\u3862",
    "\u{2F889}"=>"\u{22183}",
    "\u{2F88A}"=>"\u387C",
    "\u{2F88B}"=>"\u5EB0",
    "\u{2F88C}"=>"\u5EB3",
    "\u{2F88D}"=>"\u5EB6",
    "\u{2F88E}"=>"\u5ECA",
    "\u{2F88F}"=>"\u{2A392}",
    "\u{2F890}"=>"\u5EFE",
    "\u{2F891}"=>"\u{22331}",
    "\u{2F892}"=>"\u{22331}",
    "\u{2F893}"=>"\u8201",
    "\u{2F894}"=>"\u5F22",
    "\u{2F895}"=>"\u5F22",
    "\u{2F896}"=>"\u38C7",
    "\u{2F897}"=>"\u{232B8}",
    "\u{2F898}"=>"\u{261DA}",
    "\u{2F899}"=>"\u5F62",
    "\u{2F89A}"=>"\u5F6B",
    "\u{2F89B}"=>"\u38E3",
    "\u{2F89C}"=>"\u5F9A",
    "\u{2F89D}"=>"\u5FCD",
    "\u{2F89E}"=>"\u5FD7",
    "\u{2F89F}"=>"\u5FF9",
    "\u{2F8A0}"=>"\u6081",
    "\u{2F8A1}"=>"\u393A",
    "\u{2F8A2}"=>"\u391C",
    "\u{2F8A3}"=>"\u6094",
    "\u{2F8A4}"=>"\u{226D4}",
    "\u{2F8A5}"=>"\u60C7",
    "\u{2F8A6}"=>"\u6148",
    "\u{2F8A7}"=>"\u614C",
    "\u{2F8A8}"=>"\u614E",
    "\u{2F8A9}"=>"\u614C",
    "\u{2F8AA}"=>"\u617A",
    "\u{2F8AB}"=>"\u618E",
    "\u{2F8AC}"=>"\u61B2",
    "\u{2F8AD}"=>"\u61A4",
    "\u{2F8AE}"=>"\u61AF",
    "\u{2F8AF}"=>"\u61DE",
    "\u{2F8B0}"=>"\u61F2",
    "\u{2F8B1}"=>"\u61F6",
    "\u{2F8B2}"=>"\u6210",
    "\u{2F8B3}"=>"\u621B",
    "\u{2F8B4}"=>"\u625D",
    "\u{2F8B5}"=>"\u62B1",
    "\u{2F8B6}"=>"\u62D4",
    "\u{2F8B7}"=>"\u6350",
    "\u{2F8B8}"=>"\u{22B0C}",
    "\u{2F8B9}"=>"\u633D",
    "\u{2F8BA}"=>"\u62FC",
    "\u{2F8BB}"=>"\u6368",
    "\u{2F8BC}"=>"\u6383",
    "\u{2F8BD}"=>"\u63E4",
    "\u{2F8BE}"=>"\u{22BF1}",
    "\u{2F8BF}"=>"\u6422",
    "\u{2F8C0}"=>"\u63C5",
    "\u{2F8C1}"=>"\u63A9",
    "\u{2F8C2}"=>"\u3A2E",
    "\u{2F8C3}"=>"\u6469",
    "\u{2F8C4}"=>"\u647E",
    "\u{2F8C5}"=>"\u649D",
    "\u{2F8C6}"=>"\u6477",
    "\u{2F8C7}"=>"\u3A6C",
    "\u{2F8C8}"=>"\u654F",
    "\u{2F8C9}"=>"\u656C",
    "\u{2F8CA}"=>"\u{2300A}",
    "\u{2F8CB}"=>"\u65E3",
    "\u{2F8CC}"=>"\u66F8",
    "\u{2F8CD}"=>"\u6649",
    "\u{2F8CE}"=>"\u3B19",
    "\u{2F8CF}"=>"\u6691",
    "\u{2F8D0}"=>"\u3B08",
    "\u{2F8D1}"=>"\u3AE4",
    "\u{2F8D2}"=>"\u5192",
    "\u{2F8D3}"=>"\u5195",
    "\u{2F8D4}"=>"\u6700",
    "\u{2F8D5}"=>"\u669C",
    "\u{2F8D6}"=>"\u80AD",
    "\u{2F8D7}"=>"\u43D9",
    "\u{2F8D8}"=>"\u6717",
    "\u{2F8D9}"=>"\u671B",
    "\u{2F8DA}"=>"\u6721",
    "\u{2F8DB}"=>"\u675E",
    "\u{2F8DC}"=>"\u6753",
    "\u{2F8DD}"=>"\u{233C3}",
    "\u{2F8DE}"=>"\u3B49",
    "\u{2F8DF}"=>"\u67FA",
    "\u{2F8E0}"=>"\u6785",
    "\u{2F8E1}"=>"\u6852",
    "\u{2F8E2}"=>"\u6885",
    "\u{2F8E3}"=>"\u{2346D}",
    "\u{2F8E4}"=>"\u688E",
    "\u{2F8E5}"=>"\u681F",
    "\u{2F8E6}"=>"\u6914",
    "\u{2F8E7}"=>"\u3B9D",
    "\u{2F8E8}"=>"\u6942",
    "\u{2F8E9}"=>"\u69A3",
    "\u{2F8EA}"=>"\u69EA",
    "\u{2F8EB}"=>"\u6AA8",
    "\u{2F8EC}"=>"\u{236A3}",
    "\u{2F8ED}"=>"\u6ADB",
    "\u{2F8EE}"=>"\u3C18",
    "\u{2F8EF}"=>"\u6B21",
    "\u{2F8F0}"=>"\u{238A7}",
    "\u{2F8F1}"=>"\u6B54",
    "\u{2F8F2}"=>"\u3C4E",
    "\u{2F8F3}"=>"\u6B72",
    "\u{2F8F4}"=>"\u6B9F",
    "\u{2F8F5}"=>"\u6BBA",
    "\u{2F8F6}"=>"\u6BBB",
    "\u{2F8F7}"=>"\u{23A8D}",
    "\u{2F8F8}"=>"\u{21D0B}",
    "\u{2F8F9}"=>"\u{23AFA}",
    "\u{2F8FA}"=>"\u6C4E",
    "\u{2F8FB}"=>"\u{23CBC}",
    "\u{2F8FC}"=>"\u6CBF",
    "\u{2F8FD}"=>"\u6CCD",
    "\u{2F8FE}"=>"\u6C67",
    "\u{2F8FF}"=>"\u6D16",
    "\u{2F900}"=>"\u6D3E",
    "\u{2F901}"=>"\u6D77",
    "\u{2F902}"=>"\u6D41",
    "\u{2F903}"=>"\u6D69",
    "\u{2F904}"=>"\u6D78",
    "\u{2F905}"=>"\u6D85",
    "\u{2F906}"=>"\u{23D1E}",
    "\u{2F907}"=>"\u6D34",
    "\u{2F908}"=>"\u6E2F",
    "\u{2F909}"=>"\u6E6E",
    "\u{2F90A}"=>"\u3D33",
    "\u{2F90B}"=>"\u6ECB",
    "\u{2F90C}"=>"\u6EC7",
    "\u{2F90D}"=>"\u{23ED1}",
    "\u{2F90E}"=>"\u6DF9",
    "\u{2F90F}"=>"\u6F6E",
    "\u{2F910}"=>"\u{23F5E}",
    "\u{2F911}"=>"\u{23F8E}",
    "\u{2F912}"=>"\u6FC6",
    "\u{2F913}"=>"\u7039",
    "\u{2F914}"=>"\u701E",
    "\u{2F915}"=>"\u701B",
    "\u{2F916}"=>"\u3D96",
    "\u{2F917}"=>"\u704A",
    "\u{2F918}"=>"\u707D",
    "\u{2F919}"=>"\u7077",
    "\u{2F91A}"=>"\u70AD",
    "\u{2F91B}"=>"\u{20525}",
    "\u{2F91C}"=>"\u7145",
    "\u{2F91D}"=>"\u{24263}",
    "\u{2F91E}"=>"\u719C",
    "\u{2F91F}"=>"\u{243AB}",
    "\u{2F920}"=>"\u7228",
    "\u{2F921}"=>"\u7235",
    "\u{2F922}"=>"\u7250",
    "\u{2F923}"=>"\u{24608}",
    "\u{2F924}"=>"\u7280",
    "\u{2F925}"=>"\u7295",
    "\u{2F926}"=>"\u{24735}",
    "\u{2F927}"=>"\u{24814}",
    "\u{2F928}"=>"\u737A",
    "\u{2F929}"=>"\u738B",
    "\u{2F92A}"=>"\u3EAC",
    "\u{2F92B}"=>"\u73A5",
    "\u{2F92C}"=>"\u3EB8",
    "\u{2F92D}"=>"\u3EB8",
    "\u{2F92E}"=>"\u7447",
    "\u{2F92F}"=>"\u745C",
    "\u{2F930}"=>"\u7471",
    "\u{2F931}"=>"\u7485",
    "\u{2F932}"=>"\u74CA",
    "\u{2F933}"=>"\u3F1B",
    "\u{2F934}"=>"\u7524",
    "\u{2F935}"=>"\u{24C36}",
    "\u{2F936}"=>"\u753E",
    "\u{2F937}"=>"\u{24C92}",
    "\u{2F938}"=>"\u7570",
    "\u{2F939}"=>"\u{2219F}",
    "\u{2F93A}"=>"\u7610",
    "\u{2F93B}"=>"\u{24FA1}",
    "\u{2F93C}"=>"\u{24FB8}",
    "\u{2F93D}"=>"\u{25044}",
    "\u{2F93E}"=>"\u3FFC",
    "\u{2F93F}"=>"\u4008",
    "\u{2F940}"=>"\u76F4",
    "\u{2F941}"=>"\u{250F3}",
    "\u{2F942}"=>"\u{250F2}",
    "\u{2F943}"=>"\u{25119}",
    "\u{2F944}"=>"\u{25133}",
    "\u{2F945}"=>"\u771E",
    "\u{2F946}"=>"\u771F",
    "\u{2F947}"=>"\u771F",
    "\u{2F948}"=>"\u774A",
    "\u{2F949}"=>"\u4039",
    "\u{2F94A}"=>"\u778B",
    "\u{2F94B}"=>"\u4046",
    "\u{2F94C}"=>"\u4096",
    "\u{2F94D}"=>"\u{2541D}",
    "\u{2F94E}"=>"\u784E",
    "\u{2F94F}"=>"\u788C",
    "\u{2F950}"=>"\u78CC",
    "\u{2F951}"=>"\u40E3",
    "\u{2F952}"=>"\u{25626}",
    "\u{2F953}"=>"\u7956",
    "\u{2F954}"=>"\u{2569A}",
    "\u{2F955}"=>"\u{256C5}",
    "\u{2F956}"=>"\u798F",
    "\u{2F957}"=>"\u79EB",
    "\u{2F958}"=>"\u412F",
    "\u{2F959}"=>"\u7A40",
    "\u{2F95A}"=>"\u7A4A",
    "\u{2F95B}"=>"\u7A4F",
    "\u{2F95C}"=>"\u{2597C}",
    "\u{2F95D}"=>"\u{25AA7}",
    "\u{2F95E}"=>"\u{25AA7}",
    "\u{2F95F}"=>"\u7AEE",
    "\u{2F960}"=>"\u4202",
    "\u{2F961}"=>"\u{25BAB}",
    "\u{2F962}"=>"\u7BC6",
    "\u{2F963}"=>"\u7BC9",
    "\u{2F964}"=>"\u4227",
    "\u{2F965}"=>"\u{25C80}",
    "\u{2F966}"=>"\u7CD2",
    "\u{2F967}"=>"\u42A0",
    "\u{2F968}"=>"\u7CE8",
    "\u{2F969}"=>"\u7CE3",
    "\u{2F96A}"=>"\u7D00",
    "\u{2F96B}"=>"\u{25F86}",
    "\u{2F96C}"=>"\u7D63",
    "\u{2F96D}"=>"\u4301",
    "\u{2F96E}"=>"\u7DC7",
    "\u{2F96F}"=>"\u7E02",
    "\u{2F970}"=>"\u7E45",
    "\u{2F971}"=>"\u4334",
    "\u{2F972}"=>"\u{26228}",
    "\u{2F973}"=>"\u{26247}",
    "\u{2F974}"=>"\u4359",
    "\u{2F975}"=>"\u{262D9}",
    "\u{2F976}"=>"\u7F7A",
    "\u{2F977}"=>"\u{2633E}",
    "\u{2F978}"=>"\u7F95",
    "\u{2F979}"=>"\u7FFA",
    "\u{2F97A}"=>"\u8005",
    "\u{2F97B}"=>"\u{264DA}",
    "\u{2F97C}"=>"\u{26523}",
    "\u{2F97D}"=>"\u8060",
    "\u{2F97E}"=>"\u{265A8}",
    "\u{2F97F}"=>"\u8070",
    "\u{2F980}"=>"\u{2335F}",
    "\u{2F981}"=>"\u43D5",
    "\u{2F982}"=>"\u80B2",
    "\u{2F983}"=>"\u8103",
    "\u{2F984}"=>"\u440B",
    "\u{2F985}"=>"\u813E",
    "\u{2F986}"=>"\u5AB5",
    "\u{2F987}"=>"\u{267A7}",
    "\u{2F988}"=>"\u{267B5}",
    "\u{2F989}"=>"\u{23393}",
    "\u{2F98A}"=>"\u{2339C}",
    "\u{2F98B}"=>"\u8201",
    "\u{2F98C}"=>"\u8204",
    "\u{2F98D}"=>"\u8F9E",
    "\u{2F98E}"=>"\u446B",
    "\u{2F98F}"=>"\u8291",
    "\u{2F990}"=>"\u828B",
    "\u{2F991}"=>"\u829D",
    "\u{2F992}"=>"\u52B3",
    "\u{2F993}"=>"\u82B1",
    "\u{2F994}"=>"\u82B3",
    "\u{2F995}"=>"\u82BD",
    "\u{2F996}"=>"\u82E6",
    "\u{2F997}"=>"\u{26B3C}",
    "\u{2F998}"=>"\u82E5",
    "\u{2F999}"=>"\u831D",
    "\u{2F99A}"=>"\u8363",
    "\u{2F99B}"=>"\u83AD",
    "\u{2F99C}"=>"\u8323",
    "\u{2F99D}"=>"\u83BD",
    "\u{2F99E}"=>"\u83E7",
    "\u{2F99F}"=>"\u8457",
    "\u{2F9A0}"=>"\u8353",
    "\u{2F9A1}"=>"\u83CA",
    "\u{2F9A2}"=>"\u83CC",
    "\u{2F9A3}"=>"\u83DC",
    "\u{2F9A4}"=>"\u{26C36}",
    "\u{2F9A5}"=>"\u{26D6B}",
    "\u{2F9A6}"=>"\u{26CD5}",
    "\u{2F9A7}"=>"\u452B",
    "\u{2F9A8}"=>"\u84F1",
    "\u{2F9A9}"=>"\u84F3",
    "\u{2F9AA}"=>"\u8516",
    "\u{2F9AB}"=>"\u{273CA}",
    "\u{2F9AC}"=>"\u8564",
    "\u{2F9AD}"=>"\u{26F2C}",
    "\u{2F9AE}"=>"\u455D",
    "\u{2F9AF}"=>"\u4561",
    "\u{2F9B0}"=>"\u{26FB1}",
    "\u{2F9B1}"=>"\u{270D2}",
    "\u{2F9B2}"=>"\u456B",
    "\u{2F9B3}"=>"\u8650",
    "\u{2F9B4}"=>"\u865C",
    "\u{2F9B5}"=>"\u8667",
    "\u{2F9B6}"=>"\u8669",
    "\u{2F9B7}"=>"\u86A9",
    "\u{2F9B8}"=>"\u8688",
    "\u{2F9B9}"=>"\u870E",
    "\u{2F9BA}"=>"\u86E2",
    "\u{2F9BB}"=>"\u8779",
    "\u{2F9BC}"=>"\u8728",
    "\u{2F9BD}"=>"\u876B",
    "\u{2F9BE}"=>"\u8786",
    "\u{2F9BF}"=>"\u45D7",
    "\u{2F9C0}"=>"\u87E1",
    "\u{2F9C1}"=>"\u8801",
    "\u{2F9C2}"=>"\u45F9",
    "\u{2F9C3}"=>"\u8860",
    "\u{2F9C4}"=>"\u8863",
    "\u{2F9C5}"=>"\u{27667}",
    "\u{2F9C6}"=>"\u88D7",
    "\u{2F9C7}"=>"\u88DE",
    "\u{2F9C8}"=>"\u4635",
    "\u{2F9C9}"=>"\u88FA",
    "\u{2F9CA}"=>"\u34BB",
    "\u{2F9CB}"=>"\u{278AE}",
    "\u{2F9CC}"=>"\u{27966}",
    "\u{2F9CD}"=>"\u46BE",
    "\u{2F9CE}"=>"\u46C7",
    "\u{2F9CF}"=>"\u8AA0",
    "\u{2F9D0}"=>"\u8AED",
    "\u{2F9D1}"=>"\u8B8A",
    "\u{2F9D2}"=>"\u8C55",
    "\u{2F9D3}"=>"\u{27CA8}",
    "\u{2F9D4}"=>"\u8CAB",
    "\u{2F9D5}"=>"\u8CC1",
    "\u{2F9D6}"=>"\u8D1B",
    "\u{2F9D7}"=>"\u8D77",
    "\u{2F9D8}"=>"\u{27F2F}",
    "\u{2F9D9}"=>"\u{20804}",
    "\u{2F9DA}"=>"\u8DCB",
    "\u{2F9DB}"=>"\u8DBC",
    "\u{2F9DC}"=>"\u8DF0",
    "\u{2F9DD}"=>"\u{208DE}",
    "\u{2F9DE}"=>"\u8ED4",
    "\u{2F9DF}"=>"\u8F38",
    "\u{2F9E0}"=>"\u{285D2}",
    "\u{2F9E1}"=>"\u{285ED}",
    "\u{2F9E2}"=>"\u9094",
    "\u{2F9E3}"=>"\u90F1",
    "\u{2F9E4}"=>"\u9111",
    "\u{2F9E5}"=>"\u{2872E}",
    "\u{2F9E6}"=>"\u911B",
    "\u{2F9E7}"=>"\u9238",
    "\u{2F9E8}"=>"\u92D7",
    "\u{2F9E9}"=>"\u92D8",
    "\u{2F9EA}"=>"\u927C",
    "\u{2F9EB}"=>"\u93F9",
    "\u{2F9EC}"=>"\u9415",
    "\u{2F9ED}"=>"\u{28BFA}",
    "\u{2F9EE}"=>"\u958B",
    "\u{2F9EF}"=>"\u4995",
    "\u{2F9F0}"=>"\u95B7",
    "\u{2F9F1}"=>"\u{28D77}",
    "\u{2F9F2}"=>"\u49E6",
    "\u{2F9F3}"=>"\u96C3",
    "\u{2F9F4}"=>"\u5DB2",
    "\u{2F9F5}"=>"\u9723",
    "\u{2F9F6}"=>"\u{29145}",
    "\u{2F9F7}"=>"\u{2921A}",
    "\u{2F9F8}"=>"\u4A6E",
    "\u{2F9F9}"=>"\u4A76",
    "\u{2F9FA}"=>"\u97E0",
    "\u{2F9FB}"=>"\u{2940A}",
    "\u{2F9FC}"=>"\u4AB2",
    "\u{2F9FD}"=>"\u{29496}",
    "\u{2F9FE}"=>"\u980B",
    "\u{2F9FF}"=>"\u980B",
    "\u{2FA00}"=>"\u9829",
    "\u{2FA01}"=>"\u{295B6}",
    "\u{2FA02}"=>"\u98E2",
    "\u{2FA03}"=>"\u4B33",
    "\u{2FA04}"=>"\u9929",
    "\u{2FA05}"=>"\u99A7",
    "\u{2FA06}"=>"\u99C2",
    "\u{2FA07}"=>"\u99FE",
    "\u{2FA08}"=>"\u4BCE",
    "\u{2FA09}"=>"\u{29B30}",
    "\u{2FA0A}"=>"\u9B12",
    "\u{2FA0B}"=>"\u9C40",
    "\u{2FA0C}"=>"\u9CFD",
    "\u{2FA0D}"=>"\u4CCE",
    "\u{2FA0E}"=>"\u4CED",
    "\u{2FA0F}"=>"\u9D67",
    "\u{2FA10}"=>"\u{2A0CE}",
    "\u{2FA11}"=>"\u4CF8",
    "\u{2FA12}"=>"\u{2A105}",
    "\u{2FA13}"=>"\u{2A20E}",
    "\u{2FA14}"=>"\u{2A291}",
    "\u{2FA15}"=>"\u9EBB",
    "\u{2FA16}"=>"\u4D56",
    "\u{2FA17}"=>"\u9EF9",
    "\u{2FA18}"=>"\u9EFE",
    "\u{2FA19}"=>"\u9F05",
    "\u{2FA1A}"=>"\u9F0F",
    "\u{2FA1B}"=>"\u9F16",
    "\u{2FA1C}"=>"\u9F3B",
    "\u{2FA1D}"=>"\u{2A600}",
  }.freeze

  KOMPATIBLE_TABLE = {
    "\u00A0"=>" ",
    "\u00A8"=>" \u0308",
    "\u00AA"=>"a",
    "\u00AF"=>" \u0304",
    "\u00B2"=>"2",
    "\u00B3"=>"3",
    "\u00B4"=>" \u0301",
    "\u00B5"=>"\u03BC",
    "\u00B8"=>" \u0327",
    "\u00B9"=>"1",
    "\u00BA"=>"o",
    "\u00BC"=>"1\u20444",
    "\u00BD"=>"1\u20442",
    "\u00BE"=>"3\u20444",
    "\u0132"=>"IJ",
    "\u0133"=>"ij",
    "\u013F"=>"L\u00B7",
    "\u0140"=>"l\u00B7",
    "\u0149"=>"\u02BCn",
    "\u017F"=>"s",
    "\u01C4"=>"D\u017D",
    "\u01C5"=>"D\u017E",
    "\u01C6"=>"d\u017E",
    "\u01C7"=>"LJ",
    "\u01C8"=>"Lj",
    "\u01C9"=>"lj",
    "\u01CA"=>"NJ",
    "\u01CB"=>"Nj",
    "\u01CC"=>"nj",
    "\u01F1"=>"DZ",
    "\u01F2"=>"Dz",
    "\u01F3"=>"dz",
    "\u02B0"=>"h",
    "\u02B1"=>"\u0266",
    "\u02B2"=>"j",
    "\u02B3"=>"r",
    "\u02B4"=>"\u0279",
    "\u02B5"=>"\u027B",
    "\u02B6"=>"\u0281",
    "\u02B7"=>"w",
    "\u02B8"=>"y",
    "\u02D8"=>" \u0306",
    "\u02D9"=>" \u0307",
    "\u02DA"=>" \u030A",
    "\u02DB"=>" \u0328",
    "\u02DC"=>" \u0303",
    "\u02DD"=>" \u030B",
    "\u02E0"=>"\u0263",
    "\u02E1"=>"l",
    "\u02E2"=>"s",
    "\u02E3"=>"x",
    "\u02E4"=>"\u0295",
    "\u037A"=>" \u0345",
    "\u0384"=>" \u0301",
    "\u03D0"=>"\u03B2",
    "\u03D1"=>"\u03B8",
    "\u03D2"=>"\u03A5",
    "\u03D5"=>"\u03C6",
    "\u03D6"=>"\u03C0",
    "\u03F0"=>"\u03BA",
    "\u03F1"=>"\u03C1",
    "\u03F2"=>"\u03C2",
    "\u03F4"=>"\u0398",
    "\u03F5"=>"\u03B5",
    "\u03F9"=>"\u03A3",
    "\u0587"=>"\u0565\u0582",
    "\u0675"=>"\u0627\u0674",
    "\u0676"=>"\u0648\u0674",
    "\u0677"=>"\u06C7\u0674",
    "\u0678"=>"\u064A\u0674",
    "\u0E33"=>"\u0E4D\u0E32",
    "\u0EB3"=>"\u0ECD\u0EB2",
    "\u0EDC"=>"\u0EAB\u0E99",
    "\u0EDD"=>"\u0EAB\u0EA1",
    "\u0F0C"=>"\u0F0B",
    "\u0F77"=>"\u0FB2\u0F81",
    "\u0F79"=>"\u0FB3\u0F81",
    "\u10FC"=>"\u10DC",
    "\u1D2C"=>"A",
    "\u1D2D"=>"\u00C6",
    "\u1D2E"=>"B",
    "\u1D30"=>"D",
    "\u1D31"=>"E",
    "\u1D32"=>"\u018E",
    "\u1D33"=>"G",
    "\u1D34"=>"H",
    "\u1D35"=>"I",
    "\u1D36"=>"J",
    "\u1D37"=>"K",
    "\u1D38"=>"L",
    "\u1D39"=>"M",
    "\u1D3A"=>"N",
    "\u1D3C"=>"O",
    "\u1D3D"=>"\u0222",
    "\u1D3E"=>"P",
    "\u1D3F"=>"R",
    "\u1D40"=>"T",
    "\u1D41"=>"U",
    "\u1D42"=>"W",
    "\u1D43"=>"a",
    "\u1D44"=>"\u0250",
    "\u1D45"=>"\u0251",
    "\u1D46"=>"\u1D02",
    "\u1D47"=>"b",
    "\u1D48"=>"d",
    "\u1D49"=>"e",
    "\u1D4A"=>"\u0259",
    "\u1D4B"=>"\u025B",
    "\u1D4C"=>"\u025C",
    "\u1D4D"=>"g",
    "\u1D4F"=>"k",
    "\u1D50"=>"m",
    "\u1D51"=>"\u014B",
    "\u1D52"=>"o",
    "\u1D53"=>"\u0254",
    "\u1D54"=>"\u1D16",
    "\u1D55"=>"\u1D17",
    "\u1D56"=>"p",
    "\u1D57"=>"t",
    "\u1D58"=>"u",
    "\u1D59"=>"\u1D1D",
    "\u1D5A"=>"\u026F",
    "\u1D5B"=>"v",
    "\u1D5C"=>"\u1D25",
    "\u1D5D"=>"\u03B2",
    "\u1D5E"=>"\u03B3",
    "\u1D5F"=>"\u03B4",
    "\u1D60"=>"\u03C6",
    "\u1D61"=>"\u03C7",
    "\u1D62"=>"i",
    "\u1D63"=>"r",
    "\u1D64"=>"u",
    "\u1D65"=>"v",
    "\u1D66"=>"\u03B2",
    "\u1D67"=>"\u03B3",
    "\u1D68"=>"\u03C1",
    "\u1D69"=>"\u03C6",
    "\u1D6A"=>"\u03C7",
    "\u1D78"=>"\u043D",
    "\u1D9B"=>"\u0252",
    "\u1D9C"=>"c",
    "\u1D9D"=>"\u0255",
    "\u1D9E"=>"\u00F0",
    "\u1D9F"=>"\u025C",
    "\u1DA0"=>"f",
    "\u1DA1"=>"\u025F",
    "\u1DA2"=>"\u0261",
    "\u1DA3"=>"\u0265",
    "\u1DA4"=>"\u0268",
    "\u1DA5"=>"\u0269",
    "\u1DA6"=>"\u026A",
    "\u1DA7"=>"\u1D7B",
    "\u1DA8"=>"\u029D",
    "\u1DA9"=>"\u026D",
    "\u1DAA"=>"\u1D85",
    "\u1DAB"=>"\u029F",
    "\u1DAC"=>"\u0271",
    "\u1DAD"=>"\u0270",
    "\u1DAE"=>"\u0272",
    "\u1DAF"=>"\u0273",
    "\u1DB0"=>"\u0274",
    "\u1DB1"=>"\u0275",
    "\u1DB2"=>"\u0278",
    "\u1DB3"=>"\u0282",
    "\u1DB4"=>"\u0283",
    "\u1DB5"=>"\u01AB",
    "\u1DB6"=>"\u0289",
    "\u1DB7"=>"\u028A",
    "\u1DB8"=>"\u1D1C",
    "\u1DB9"=>"\u028B",
    "\u1DBA"=>"\u028C",
    "\u1DBB"=>"z",
    "\u1DBC"=>"\u0290",
    "\u1DBD"=>"\u0291",
    "\u1DBE"=>"\u0292",
    "\u1DBF"=>"\u03B8",
    "\u1E9A"=>"a\u02BE",
    "\u1FBD"=>" \u0313",
    "\u1FBF"=>" \u0313",
    "\u1FC0"=>" \u0342",
    "\u1FFE"=>" \u0314",
    "\u2002"=>" ",
    "\u2003"=>" ",
    "\u2004"=>" ",
    "\u2005"=>" ",
    "\u2006"=>" ",
    "\u2007"=>" ",
    "\u2008"=>" ",
    "\u2009"=>" ",
    "\u200A"=>" ",
    "\u2011"=>"\u2010",
    "\u2017"=>" \u0333",
    "\u2024"=>".",
    "\u2025"=>"..",
    "\u2026"=>"...",
    "\u202F"=>" ",
    "\u2033"=>"\u2032\u2032",
    "\u2034"=>"\u2032\u2032\u2032",
    "\u2036"=>"\u2035\u2035",
    "\u2037"=>"\u2035\u2035\u2035",
    "\u203C"=>"!!",
    "\u203E"=>" \u0305",
    "\u2047"=>"??",
    "\u2048"=>"?!",
    "\u2049"=>"!?",
    "\u2057"=>"\u2032\u2032\u2032\u2032",
    "\u205F"=>" ",
    "\u2070"=>"0",
    "\u2071"=>"i",
    "\u2074"=>"4",
    "\u2075"=>"5",
    "\u2076"=>"6",
    "\u2077"=>"7",
    "\u2078"=>"8",
    "\u2079"=>"9",
    "\u207A"=>"+",
    "\u207B"=>"\u2212",
    "\u207C"=>"=",
    "\u207D"=>"(",
    "\u207E"=>")",
    "\u207F"=>"n",
    "\u2080"=>"0",
    "\u2081"=>"1",
    "\u2082"=>"2",
    "\u2083"=>"3",
    "\u2084"=>"4",
    "\u2085"=>"5",
    "\u2086"=>"6",
    "\u2087"=>"7",
    "\u2088"=>"8",
    "\u2089"=>"9",
    "\u208A"=>"+",
    "\u208B"=>"\u2212",
    "\u208C"=>"=",
    "\u208D"=>"(",
    "\u208E"=>")",
    "\u2090"=>"a",
    "\u2091"=>"e",
    "\u2092"=>"o",
    "\u2093"=>"x",
    "\u2094"=>"\u0259",
    "\u2095"=>"h",
    "\u2096"=>"k",
    "\u2097"=>"l",
    "\u2098"=>"m",
    "\u2099"=>"n",
    "\u209A"=>"p",
    "\u209B"=>"s",
    "\u209C"=>"t",
    "\u20A8"=>"Rs",
    "\u2100"=>"a/c",
    "\u2101"=>"a/s",
    "\u2102"=>"C",
    "\u2103"=>"\u00B0C",
    "\u2105"=>"c/o",
    "\u2106"=>"c/u",
    "\u2107"=>"\u0190",
    "\u2109"=>"\u00B0F",
    "\u210A"=>"g",
    "\u210B"=>"H",
    "\u210C"=>"H",
    "\u210D"=>"H",
    "\u210E"=>"h",
    "\u210F"=>"\u0127",
    "\u2110"=>"I",
    "\u2111"=>"I",
    "\u2112"=>"L",
    "\u2113"=>"l",
    "\u2115"=>"N",
    "\u2116"=>"No",
    "\u2119"=>"P",
    "\u211A"=>"Q",
    "\u211B"=>"R",
    "\u211C"=>"R",
    "\u211D"=>"R",
    "\u2120"=>"SM",
    "\u2121"=>"TEL",
    "\u2122"=>"TM",
    "\u2124"=>"Z",
    "\u2128"=>"Z",
    "\u212C"=>"B",
    "\u212D"=>"C",
    "\u212F"=>"e",
    "\u2130"=>"E",
    "\u2131"=>"F",
    "\u2133"=>"M",
    "\u2134"=>"o",
    "\u2135"=>"\u05D0",
    "\u2136"=>"\u05D1",
    "\u2137"=>"\u05D2",
    "\u2138"=>"\u05D3",
    "\u2139"=>"i",
    "\u213B"=>"FAX",
    "\u213C"=>"\u03C0",
    "\u213D"=>"\u03B3",
    "\u213E"=>"\u0393",
    "\u213F"=>"\u03A0",
    "\u2140"=>"\u2211",
    "\u2145"=>"D",
    "\u2146"=>"d",
    "\u2147"=>"e",
    "\u2148"=>"i",
    "\u2149"=>"j",
    "\u2150"=>"1\u20447",
    "\u2151"=>"1\u20449",
    "\u2152"=>"1\u204410",
    "\u2153"=>"1\u20443",
    "\u2154"=>"2\u20443",
    "\u2155"=>"1\u20445",
    "\u2156"=>"2\u20445",
    "\u2157"=>"3\u20445",
    "\u2158"=>"4\u20445",
    "\u2159"=>"1\u20446",
    "\u215A"=>"5\u20446",
    "\u215B"=>"1\u20448",
    "\u215C"=>"3\u20448",
    "\u215D"=>"5\u20448",
    "\u215E"=>"7\u20448",
    "\u215F"=>"1\u2044",
    "\u2160"=>"I",
    "\u2161"=>"II",
    "\u2162"=>"III",
    "\u2163"=>"IV",
    "\u2164"=>"V",
    "\u2165"=>"VI",
    "\u2166"=>"VII",
    "\u2167"=>"VIII",
    "\u2168"=>"IX",
    "\u2169"=>"X",
    "\u216A"=>"XI",
    "\u216B"=>"XII",
    "\u216C"=>"L",
    "\u216D"=>"C",
    "\u216E"=>"D",
    "\u216F"=>"M",
    "\u2170"=>"i",
    "\u2171"=>"ii",
    "\u2172"=>"iii",
    "\u2173"=>"iv",
    "\u2174"=>"v",
    "\u2175"=>"vi",
    "\u2176"=>"vii",
    "\u2177"=>"viii",
    "\u2178"=>"ix",
    "\u2179"=>"x",
    "\u217A"=>"xi",
    "\u217B"=>"xii",
    "\u217C"=>"l",
    "\u217D"=>"c",
    "\u217E"=>"d",
    "\u217F"=>"m",
    "\u2189"=>"0\u20443",
    "\u222C"=>"\u222B\u222B",
    "\u222D"=>"\u222B\u222B\u222B",
    "\u222F"=>"\u222E\u222E",
    "\u2230"=>"\u222E\u222E\u222E",
    "\u2460"=>"1",
    "\u2461"=>"2",
    "\u2462"=>"3",
    "\u2463"=>"4",
    "\u2464"=>"5",
    "\u2465"=>"6",
    "\u2466"=>"7",
    "\u2467"=>"8",
    "\u2468"=>"9",
    "\u2469"=>"10",
    "\u246A"=>"11",
    "\u246B"=>"12",
    "\u246C"=>"13",
    "\u246D"=>"14",
    "\u246E"=>"15",
    "\u246F"=>"16",
    "\u2470"=>"17",
    "\u2471"=>"18",
    "\u2472"=>"19",
    "\u2473"=>"20",
    "\u2474"=>"(1)",
    "\u2475"=>"(2)",
    "\u2476"=>"(3)",
    "\u2477"=>"(4)",
    "\u2478"=>"(5)",
    "\u2479"=>"(6)",
    "\u247A"=>"(7)",
    "\u247B"=>"(8)",
    "\u247C"=>"(9)",
    "\u247D"=>"(10)",
    "\u247E"=>"(11)",
    "\u247F"=>"(12)",
    "\u2480"=>"(13)",
    "\u2481"=>"(14)",
    "\u2482"=>"(15)",
    "\u2483"=>"(16)",
    "\u2484"=>"(17)",
    "\u2485"=>"(18)",
    "\u2486"=>"(19)",
    "\u2487"=>"(20)",
    "\u2488"=>"1.",
    "\u2489"=>"2.",
    "\u248A"=>"3.",
    "\u248B"=>"4.",
    "\u248C"=>"5.",
    "\u248D"=>"6.",
    "\u248E"=>"7.",
    "\u248F"=>"8.",
    "\u2490"=>"9.",
    "\u2491"=>"10.",
    "\u2492"=>"11.",
    "\u2493"=>"12.",
    "\u2494"=>"13.",
    "\u2495"=>"14.",
    "\u2496"=>"15.",
    "\u2497"=>"16.",
    "\u2498"=>"17.",
    "\u2499"=>"18.",
    "\u249A"=>"19.",
    "\u249B"=>"20.",
    "\u249C"=>"(a)",
    "\u249D"=>"(b)",
    "\u249E"=>"(c)",
    "\u249F"=>"(d)",
    "\u24A0"=>"(e)",
    "\u24A1"=>"(f)",
    "\u24A2"=>"(g)",
    "\u24A3"=>"(h)",
    "\u24A4"=>"(i)",
    "\u24A5"=>"(j)",
    "\u24A6"=>"(k)",
    "\u24A7"=>"(l)",
    "\u24A8"=>"(m)",
    "\u24A9"=>"(n)",
    "\u24AA"=>"(o)",
    "\u24AB"=>"(p)",
    "\u24AC"=>"(q)",
    "\u24AD"=>"(r)",
    "\u24AE"=>"(s)",
    "\u24AF"=>"(t)",
    "\u24B0"=>"(u)",
    "\u24B1"=>"(v)",
    "\u24B2"=>"(w)",
    "\u24B3"=>"(x)",
    "\u24B4"=>"(y)",
    "\u24B5"=>"(z)",
    "\u24B6"=>"A",
    "\u24B7"=>"B",
    "\u24B8"=>"C",
    "\u24B9"=>"D",
    "\u24BA"=>"E",
    "\u24BB"=>"F",
    "\u24BC"=>"G",
    "\u24BD"=>"H",
    "\u24BE"=>"I",
    "\u24BF"=>"J",
    "\u24C0"=>"K",
    "\u24C1"=>"L",
    "\u24C2"=>"M",
    "\u24C3"=>"N",
    "\u24C4"=>"O",
    "\u24C5"=>"P",
    "\u24C6"=>"Q",
    "\u24C7"=>"R",
    "\u24C8"=>"S",
    "\u24C9"=>"T",
    "\u24CA"=>"U",
    "\u24CB"=>"V",
    "\u24CC"=>"W",
    "\u24CD"=>"X",
    "\u24CE"=>"Y",
    "\u24CF"=>"Z",
    "\u24D0"=>"a",
    "\u24D1"=>"b",
    "\u24D2"=>"c",
    "\u24D3"=>"d",
    "\u24D4"=>"e",
    "\u24D5"=>"f",
    "\u24D6"=>"g",
    "\u24D7"=>"h",
    "\u24D8"=>"i",
    "\u24D9"=>"j",
    "\u24DA"=>"k",
    "\u24DB"=>"l",
    "\u24DC"=>"m",
    "\u24DD"=>"n",
    "\u24DE"=>"o",
    "\u24DF"=>"p",
    "\u24E0"=>"q",
    "\u24E1"=>"r",
    "\u24E2"=>"s",
    "\u24E3"=>"t",
    "\u24E4"=>"u",
    "\u24E5"=>"v",
    "\u24E6"=>"w",
    "\u24E7"=>"x",
    "\u24E8"=>"y",
    "\u24E9"=>"z",
    "\u24EA"=>"0",
    "\u2A0C"=>"\u222B\u222B\u222B\u222B",
    "\u2A74"=>"::=",
    "\u2A75"=>"==",
    "\u2A76"=>"===",
    "\u2C7C"=>"j",
    "\u2C7D"=>"V",
    "\u2D6F"=>"\u2D61",
    "\u2E9F"=>"\u6BCD",
    "\u2EF3"=>"\u9F9F",
    "\u2F00"=>"\u4E00",
    "\u2F01"=>"\u4E28",
    "\u2F02"=>"\u4E36",
    "\u2F03"=>"\u4E3F",
    "\u2F04"=>"\u4E59",
    "\u2F05"=>"\u4E85",
    "\u2F06"=>"\u4E8C",
    "\u2F07"=>"\u4EA0",
    "\u2F08"=>"\u4EBA",
    "\u2F09"=>"\u513F",
    "\u2F0A"=>"\u5165",
    "\u2F0B"=>"\u516B",
    "\u2F0C"=>"\u5182",
    "\u2F0D"=>"\u5196",
    "\u2F0E"=>"\u51AB",
    "\u2F0F"=>"\u51E0",
    "\u2F10"=>"\u51F5",
    "\u2F11"=>"\u5200",
    "\u2F12"=>"\u529B",
    "\u2F13"=>"\u52F9",
    "\u2F14"=>"\u5315",
    "\u2F15"=>"\u531A",
    "\u2F16"=>"\u5338",
    "\u2F17"=>"\u5341",
    "\u2F18"=>"\u535C",
    "\u2F19"=>"\u5369",
    "\u2F1A"=>"\u5382",
    "\u2F1B"=>"\u53B6",
    "\u2F1C"=>"\u53C8",
    "\u2F1D"=>"\u53E3",
    "\u2F1E"=>"\u56D7",
    "\u2F1F"=>"\u571F",
    "\u2F20"=>"\u58EB",
    "\u2F21"=>"\u5902",
    "\u2F22"=>"\u590A",
    "\u2F23"=>"\u5915",
    "\u2F24"=>"\u5927",
    "\u2F25"=>"\u5973",
    "\u2F26"=>"\u5B50",
    "\u2F27"=>"\u5B80",
    "\u2F28"=>"\u5BF8",
    "\u2F29"=>"\u5C0F",
    "\u2F2A"=>"\u5C22",
    "\u2F2B"=>"\u5C38",
    "\u2F2C"=>"\u5C6E",
    "\u2F2D"=>"\u5C71",
    "\u2F2E"=>"\u5DDB",
    "\u2F2F"=>"\u5DE5",
    "\u2F30"=>"\u5DF1",
    "\u2F31"=>"\u5DFE",
    "\u2F32"=>"\u5E72",
    "\u2F33"=>"\u5E7A",
    "\u2F34"=>"\u5E7F",
    "\u2F35"=>"\u5EF4",
    "\u2F36"=>"\u5EFE",
    "\u2F37"=>"\u5F0B",
    "\u2F38"=>"\u5F13",
    "\u2F39"=>"\u5F50",
    "\u2F3A"=>"\u5F61",
    "\u2F3B"=>"\u5F73",
    "\u2F3C"=>"\u5FC3",
    "\u2F3D"=>"\u6208",
    "\u2F3E"=>"\u6236",
    "\u2F3F"=>"\u624B",
    "\u2F40"=>"\u652F",
    "\u2F41"=>"\u6534",
    "\u2F42"=>"\u6587",
    "\u2F43"=>"\u6597",
    "\u2F44"=>"\u65A4",
    "\u2F45"=>"\u65B9",
    "\u2F46"=>"\u65E0",
    "\u2F47"=>"\u65E5",
    "\u2F48"=>"\u66F0",
    "\u2F49"=>"\u6708",
    "\u2F4A"=>"\u6728",
    "\u2F4B"=>"\u6B20",
    "\u2F4C"=>"\u6B62",
    "\u2F4D"=>"\u6B79",
    "\u2F4E"=>"\u6BB3",
    "\u2F4F"=>"\u6BCB",
    "\u2F50"=>"\u6BD4",
    "\u2F51"=>"\u6BDB",
    "\u2F52"=>"\u6C0F",
    "\u2F53"=>"\u6C14",
    "\u2F54"=>"\u6C34",
    "\u2F55"=>"\u706B",
    "\u2F56"=>"\u722A",
    "\u2F57"=>"\u7236",
    "\u2F58"=>"\u723B",
    "\u2F59"=>"\u723F",
    "\u2F5A"=>"\u7247",
    "\u2F5B"=>"\u7259",
    "\u2F5C"=>"\u725B",
    "\u2F5D"=>"\u72AC",
    "\u2F5E"=>"\u7384",
    "\u2F5F"=>"\u7389",
    "\u2F60"=>"\u74DC",
    "\u2F61"=>"\u74E6",
    "\u2F62"=>"\u7518",
    "\u2F63"=>"\u751F",
    "\u2F64"=>"\u7528",
    "\u2F65"=>"\u7530",
    "\u2F66"=>"\u758B",
    "\u2F67"=>"\u7592",
    "\u2F68"=>"\u7676",
    "\u2F69"=>"\u767D",
    "\u2F6A"=>"\u76AE",
    "\u2F6B"=>"\u76BF",
    "\u2F6C"=>"\u76EE",
    "\u2F6D"=>"\u77DB",
    "\u2F6E"=>"\u77E2",
    "\u2F6F"=>"\u77F3",
    "\u2F70"=>"\u793A",
    "\u2F71"=>"\u79B8",
    "\u2F72"=>"\u79BE",
    "\u2F73"=>"\u7A74",
    "\u2F74"=>"\u7ACB",
    "\u2F75"=>"\u7AF9",
    "\u2F76"=>"\u7C73",
    "\u2F77"=>"\u7CF8",
    "\u2F78"=>"\u7F36",
    "\u2F79"=>"\u7F51",
    "\u2F7A"=>"\u7F8A",
    "\u2F7B"=>"\u7FBD",
    "\u2F7C"=>"\u8001",
    "\u2F7D"=>"\u800C",
    "\u2F7E"=>"\u8012",
    "\u2F7F"=>"\u8033",
    "\u2F80"=>"\u807F",
    "\u2F81"=>"\u8089",
    "\u2F82"=>"\u81E3",
    "\u2F83"=>"\u81EA",
    "\u2F84"=>"\u81F3",
    "\u2F85"=>"\u81FC",
    "\u2F86"=>"\u820C",
    "\u2F87"=>"\u821B",
    "\u2F88"=>"\u821F",
    "\u2F89"=>"\u826E",
    "\u2F8A"=>"\u8272",
    "\u2F8B"=>"\u8278",
    "\u2F8C"=>"\u864D",
    "\u2F8D"=>"\u866B",
    "\u2F8E"=>"\u8840",
    "\u2F8F"=>"\u884C",
    "\u2F90"=>"\u8863",
    "\u2F91"=>"\u897E",
    "\u2F92"=>"\u898B",
    "\u2F93"=>"\u89D2",
    "\u2F94"=>"\u8A00",
    "\u2F95"=>"\u8C37",
    "\u2F96"=>"\u8C46",
    "\u2F97"=>"\u8C55",
    "\u2F98"=>"\u8C78",
    "\u2F99"=>"\u8C9D",
    "\u2F9A"=>"\u8D64",
    "\u2F9B"=>"\u8D70",
    "\u2F9C"=>"\u8DB3",
    "\u2F9D"=>"\u8EAB",
    "\u2F9E"=>"\u8ECA",
    "\u2F9F"=>"\u8F9B",
    "\u2FA0"=>"\u8FB0",
    "\u2FA1"=>"\u8FB5",
    "\u2FA2"=>"\u9091",
    "\u2FA3"=>"\u9149",
    "\u2FA4"=>"\u91C6",
    "\u2FA5"=>"\u91CC",
    "\u2FA6"=>"\u91D1",
    "\u2FA7"=>"\u9577",
    "\u2FA8"=>"\u9580",
    "\u2FA9"=>"\u961C",
    "\u2FAA"=>"\u96B6",
    "\u2FAB"=>"\u96B9",
    "\u2FAC"=>"\u96E8",
    "\u2FAD"=>"\u9751",
    "\u2FAE"=>"\u975E",
    "\u2FAF"=>"\u9762",
    "\u2FB0"=>"\u9769",
    "\u2FB1"=>"\u97CB",
    "\u2FB2"=>"\u97ED",
    "\u2FB3"=>"\u97F3",
    "\u2FB4"=>"\u9801",
    "\u2FB5"=>"\u98A8",
    "\u2FB6"=>"\u98DB",
    "\u2FB7"=>"\u98DF",
    "\u2FB8"=>"\u9996",
    "\u2FB9"=>"\u9999",
    "\u2FBA"=>"\u99AC",
    "\u2FBB"=>"\u9AA8",
    "\u2FBC"=>"\u9AD8",
    "\u2FBD"=>"\u9ADF",
    "\u2FBE"=>"\u9B25",
    "\u2FBF"=>"\u9B2F",
    "\u2FC0"=>"\u9B32",
    "\u2FC1"=>"\u9B3C",
    "\u2FC2"=>"\u9B5A",
    "\u2FC3"=>"\u9CE5",
    "\u2FC4"=>"\u9E75",
    "\u2FC5"=>"\u9E7F",
    "\u2FC6"=>"\u9EA5",
    "\u2FC7"=>"\u9EBB",
    "\u2FC8"=>"\u9EC3",
    "\u2FC9"=>"\u9ECD",
    "\u2FCA"=>"\u9ED1",
    "\u2FCB"=>"\u9EF9",
    "\u2FCC"=>"\u9EFD",
    "\u2FCD"=>"\u9F0E",
    "\u2FCE"=>"\u9F13",
    "\u2FCF"=>"\u9F20",
    "\u2FD0"=>"\u9F3B",
    "\u2FD1"=>"\u9F4A",
    "\u2FD2"=>"\u9F52",
    "\u2FD3"=>"\u9F8D",
    "\u2FD4"=>"\u9F9C",
    "\u2FD5"=>"\u9FA0",
    "\u3000"=>" ",
    "\u3036"=>"\u3012",
    "\u3038"=>"\u5341",
    "\u3039"=>"\u5344",
    "\u303A"=>"\u5345",
    "\u309B"=>" \u3099",
    "\u309C"=>" \u309A",
    "\u309F"=>"\u3088\u308A",
    "\u30FF"=>"\u30B3\u30C8",
    "\u3131"=>"\u1100",
    "\u3132"=>"\u1101",
    "\u3133"=>"\u11AA",
    "\u3134"=>"\u1102",
    "\u3135"=>"\u11AC",
    "\u3136"=>"\u11AD",
    "\u3137"=>"\u1103",
    "\u3138"=>"\u1104",
    "\u3139"=>"\u1105",
    "\u313A"=>"\u11B0",
    "\u313B"=>"\u11B1",
    "\u313C"=>"\u11B2",
    "\u313D"=>"\u11B3",
    "\u313E"=>"\u11B4",
    "\u313F"=>"\u11B5",
    "\u3140"=>"\u111A",
    "\u3141"=>"\u1106",
    "\u3142"=>"\u1107",
    "\u3143"=>"\u1108",
    "\u3144"=>"\u1121",
    "\u3145"=>"\u1109",
    "\u3146"=>"\u110A",
    "\u3147"=>"\u110B",
    "\u3148"=>"\u110C",
    "\u3149"=>"\u110D",
    "\u314A"=>"\u110E",
    "\u314B"=>"\u110F",
    "\u314C"=>"\u1110",
    "\u314D"=>"\u1111",
    "\u314E"=>"\u1112",
    "\u314F"=>"\u1161",
    "\u3150"=>"\u1162",
    "\u3151"=>"\u1163",
    "\u3152"=>"\u1164",
    "\u3153"=>"\u1165",
    "\u3154"=>"\u1166",
    "\u3155"=>"\u1167",
    "\u3156"=>"\u1168",
    "\u3157"=>"\u1169",
    "\u3158"=>"\u116A",
    "\u3159"=>"\u116B",
    "\u315A"=>"\u116C",
    "\u315B"=>"\u116D",
    "\u315C"=>"\u116E",
    "\u315D"=>"\u116F",
    "\u315E"=>"\u1170",
    "\u315F"=>"\u1171",
    "\u3160"=>"\u1172",
    "\u3161"=>"\u1173",
    "\u3162"=>"\u1174",
    "\u3163"=>"\u1175",
    "\u3164"=>"\u1160",
    "\u3165"=>"\u1114",
    "\u3166"=>"\u1115",
    "\u3167"=>"\u11C7",
    "\u3168"=>"\u11C8",
    "\u3169"=>"\u11CC",
    "\u316A"=>"\u11CE",
    "\u316B"=>"\u11D3",
    "\u316C"=>"\u11D7",
    "\u316D"=>"\u11D9",
    "\u316E"=>"\u111C",
    "\u316F"=>"\u11DD",
    "\u3170"=>"\u11DF",
    "\u3171"=>"\u111D",
    "\u3172"=>"\u111E",
    "\u3173"=>"\u1120",
    "\u3174"=>"\u1122",
    "\u3175"=>"\u1123",
    "\u3176"=>"\u1127",
    "\u3177"=>"\u1129",
    "\u3178"=>"\u112B",
    "\u3179"=>"\u112C",
    "\u317A"=>"\u112D",
    "\u317B"=>"\u112E",
    "\u317C"=>"\u112F",
    "\u317D"=>"\u1132",
    "\u317E"=>"\u1136",
    "\u317F"=>"\u1140",
    "\u3180"=>"\u1147",
    "\u3181"=>"\u114C",
    "\u3182"=>"\u11F1",
    "\u3183"=>"\u11F2",
    "\u3184"=>"\u1157",
    "\u3185"=>"\u1158",
    "\u3186"=>"\u1159",
    "\u3187"=>"\u1184",
    "\u3188"=>"\u1185",
    "\u3189"=>"\u1188",
    "\u318A"=>"\u1191",
    "\u318B"=>"\u1192",
    "\u318C"=>"\u1194",
    "\u318D"=>"\u119E",
    "\u318E"=>"\u11A1",
    "\u3192"=>"\u4E00",
    "\u3193"=>"\u4E8C",
    "\u3194"=>"\u4E09",
    "\u3195"=>"\u56DB",
    "\u3196"=>"\u4E0A",
    "\u3197"=>"\u4E2D",
    "\u3198"=>"\u4E0B",
    "\u3199"=>"\u7532",
    "\u319A"=>"\u4E59",
    "\u319B"=>"\u4E19",
    "\u319C"=>"\u4E01",
    "\u319D"=>"\u5929",
    "\u319E"=>"\u5730",
    "\u319F"=>"\u4EBA",
    "\u3200"=>"(\u1100)",
    "\u3201"=>"(\u1102)",
    "\u3202"=>"(\u1103)",
    "\u3203"=>"(\u1105)",
    "\u3204"=>"(\u1106)",
    "\u3205"=>"(\u1107)",
    "\u3206"=>"(\u1109)",
    "\u3207"=>"(\u110B)",
    "\u3208"=>"(\u110C)",
    "\u3209"=>"(\u110E)",
    "\u320A"=>"(\u110F)",
    "\u320B"=>"(\u1110)",
    "\u320C"=>"(\u1111)",
    "\u320D"=>"(\u1112)",
    "\u320E"=>"(\u1100\u1161)",
    "\u320F"=>"(\u1102\u1161)",
    "\u3210"=>"(\u1103\u1161)",
    "\u3211"=>"(\u1105\u1161)",
    "\u3212"=>"(\u1106\u1161)",
    "\u3213"=>"(\u1107\u1161)",
    "\u3214"=>"(\u1109\u1161)",
    "\u3215"=>"(\u110B\u1161)",
    "\u3216"=>"(\u110C\u1161)",
    "\u3217"=>"(\u110E\u1161)",
    "\u3218"=>"(\u110F\u1161)",
    "\u3219"=>"(\u1110\u1161)",
    "\u321A"=>"(\u1111\u1161)",
    "\u321B"=>"(\u1112\u1161)",
    "\u321C"=>"(\u110C\u116E)",
    "\u321D"=>"(\u110B\u1169\u110C\u1165\u11AB)",
    "\u321E"=>"(\u110B\u1169\u1112\u116E)",
    "\u3220"=>"(\u4E00)",
    "\u3221"=>"(\u4E8C)",
    "\u3222"=>"(\u4E09)",
    "\u3223"=>"(\u56DB)",
    "\u3224"=>"(\u4E94)",
    "\u3225"=>"(\u516D)",
    "\u3226"=>"(\u4E03)",
    "\u3227"=>"(\u516B)",
    "\u3228"=>"(\u4E5D)",
    "\u3229"=>"(\u5341)",
    "\u322A"=>"(\u6708)",
    "\u322B"=>"(\u706B)",
    "\u322C"=>"(\u6C34)",
    "\u322D"=>"(\u6728)",
    "\u322E"=>"(\u91D1)",
    "\u322F"=>"(\u571F)",
    "\u3230"=>"(\u65E5)",
    "\u3231"=>"(\u682A)",
    "\u3232"=>"(\u6709)",
    "\u3233"=>"(\u793E)",
    "\u3234"=>"(\u540D)",
    "\u3235"=>"(\u7279)",
    "\u3236"=>"(\u8CA1)",
    "\u3237"=>"(\u795D)",
    "\u3238"=>"(\u52B4)",
    "\u3239"=>"(\u4EE3)",
    "\u323A"=>"(\u547C)",
    "\u323B"=>"(\u5B66)",
    "\u323C"=>"(\u76E3)",
    "\u323D"=>"(\u4F01)",
    "\u323E"=>"(\u8CC7)",
    "\u323F"=>"(\u5354)",
    "\u3240"=>"(\u796D)",
    "\u3241"=>"(\u4F11)",
    "\u3242"=>"(\u81EA)",
    "\u3243"=>"(\u81F3)",
    "\u3244"=>"\u554F",
    "\u3245"=>"\u5E7C",
    "\u3246"=>"\u6587",
    "\u3247"=>"\u7B8F",
    "\u3250"=>"PTE",
    "\u3251"=>"21",
    "\u3252"=>"22",
    "\u3253"=>"23",
    "\u3254"=>"24",
    "\u3255"=>"25",
    "\u3256"=>"26",
    "\u3257"=>"27",
    "\u3258"=>"28",
    "\u3259"=>"29",
    "\u325A"=>"30",
    "\u325B"=>"31",
    "\u325C"=>"32",
    "\u325D"=>"33",
    "\u325E"=>"34",
    "\u325F"=>"35",
    "\u3260"=>"\u1100",
    "\u3261"=>"\u1102",
    "\u3262"=>"\u1103",
    "\u3263"=>"\u1105",
    "\u3264"=>"\u1106",
    "\u3265"=>"\u1107",
    "\u3266"=>"\u1109",
    "\u3267"=>"\u110B",
    "\u3268"=>"\u110C",
    "\u3269"=>"\u110E",
    "\u326A"=>"\u110F",
    "\u326B"=>"\u1110",
    "\u326C"=>"\u1111",
    "\u326D"=>"\u1112",
    "\u326E"=>"\u1100\u1161",
    "\u326F"=>"\u1102\u1161",
    "\u3270"=>"\u1103\u1161",
    "\u3271"=>"\u1105\u1161",
    "\u3272"=>"\u1106\u1161",
    "\u3273"=>"\u1107\u1161",
    "\u3274"=>"\u1109\u1161",
    "\u3275"=>"\u110B\u1161",
    "\u3276"=>"\u110C\u1161",
    "\u3277"=>"\u110E\u1161",
    "\u3278"=>"\u110F\u1161",
    "\u3279"=>"\u1110\u1161",
    "\u327A"=>"\u1111\u1161",
    "\u327B"=>"\u1112\u1161",
    "\u327C"=>"\u110E\u1161\u11B7\u1100\u1169",
    "\u327D"=>"\u110C\u116E\u110B\u1174",
    "\u327E"=>"\u110B\u116E",
    "\u3280"=>"\u4E00",
    "\u3281"=>"\u4E8C",
    "\u3282"=>"\u4E09",
    "\u3283"=>"\u56DB",
    "\u3284"=>"\u4E94",
    "\u3285"=>"\u516D",
    "\u3286"=>"\u4E03",
    "\u3287"=>"\u516B",
    "\u3288"=>"\u4E5D",
    "\u3289"=>"\u5341",
    "\u328A"=>"\u6708",
    "\u328B"=>"\u706B",
    "\u328C"=>"\u6C34",
    "\u328D"=>"\u6728",
    "\u328E"=>"\u91D1",
    "\u328F"=>"\u571F",
    "\u3290"=>"\u65E5",
    "\u3291"=>"\u682A",
    "\u3292"=>"\u6709",
    "\u3293"=>"\u793E",
    "\u3294"=>"\u540D",
    "\u3295"=>"\u7279",
    "\u3296"=>"\u8CA1",
    "\u3297"=>"\u795D",
    "\u3298"=>"\u52B4",
    "\u3299"=>"\u79D8",
    "\u329A"=>"\u7537",
    "\u329B"=>"\u5973",
    "\u329C"=>"\u9069",
    "\u329D"=>"\u512A",
    "\u329E"=>"\u5370",
    "\u329F"=>"\u6CE8",
    "\u32A0"=>"\u9805",
    "\u32A1"=>"\u4F11",
    "\u32A2"=>"\u5199",
    "\u32A3"=>"\u6B63",
    "\u32A4"=>"\u4E0A",
    "\u32A5"=>"\u4E2D",
    "\u32A6"=>"\u4E0B",
    "\u32A7"=>"\u5DE6",
    "\u32A8"=>"\u53F3",
    "\u32A9"=>"\u533B",
    "\u32AA"=>"\u5B97",
    "\u32AB"=>"\u5B66",
    "\u32AC"=>"\u76E3",
    "\u32AD"=>"\u4F01",
    "\u32AE"=>"\u8CC7",
    "\u32AF"=>"\u5354",
    "\u32B0"=>"\u591C",
    "\u32B1"=>"36",
    "\u32B2"=>"37",
    "\u32B3"=>"38",
    "\u32B4"=>"39",
    "\u32B5"=>"40",
    "\u32B6"=>"41",
    "\u32B7"=>"42",
    "\u32B8"=>"43",
    "\u32B9"=>"44",
    "\u32BA"=>"45",
    "\u32BB"=>"46",
    "\u32BC"=>"47",
    "\u32BD"=>"48",
    "\u32BE"=>"49",
    "\u32BF"=>"50",
    "\u32C0"=>"1\u6708",
    "\u32C1"=>"2\u6708",
    "\u32C2"=>"3\u6708",
    "\u32C3"=>"4\u6708",
    "\u32C4"=>"5\u6708",
    "\u32C5"=>"6\u6708",
    "\u32C6"=>"7\u6708",
    "\u32C7"=>"8\u6708",
    "\u32C8"=>"9\u6708",
    "\u32C9"=>"10\u6708",
    "\u32CA"=>"11\u6708",
    "\u32CB"=>"12\u6708",
    "\u32CC"=>"Hg",
    "\u32CD"=>"erg",
    "\u32CE"=>"eV",
    "\u32CF"=>"LTD",
    "\u32D0"=>"\u30A2",
    "\u32D1"=>"\u30A4",
    "\u32D2"=>"\u30A6",
    "\u32D3"=>"\u30A8",
    "\u32D4"=>"\u30AA",
    "\u32D5"=>"\u30AB",
    "\u32D6"=>"\u30AD",
    "\u32D7"=>"\u30AF",
    "\u32D8"=>"\u30B1",
    "\u32D9"=>"\u30B3",
    "\u32DA"=>"\u30B5",
    "\u32DB"=>"\u30B7",
    "\u32DC"=>"\u30B9",
    "\u32DD"=>"\u30BB",
    "\u32DE"=>"\u30BD",
    "\u32DF"=>"\u30BF",
    "\u32E0"=>"\u30C1",
    "\u32E1"=>"\u30C4",
    "\u32E2"=>"\u30C6",
    "\u32E3"=>"\u30C8",
    "\u32E4"=>"\u30CA",
    "\u32E5"=>"\u30CB",
    "\u32E6"=>"\u30CC",
    "\u32E7"=>"\u30CD",
    "\u32E8"=>"\u30CE",
    "\u32E9"=>"\u30CF",
    "\u32EA"=>"\u30D2",
    "\u32EB"=>"\u30D5",
    "\u32EC"=>"\u30D8",
    "\u32ED"=>"\u30DB",
    "\u32EE"=>"\u30DE",
    "\u32EF"=>"\u30DF",
    "\u32F0"=>"\u30E0",
    "\u32F1"=>"\u30E1",
    "\u32F2"=>"\u30E2",
    "\u32F3"=>"\u30E4",
    "\u32F4"=>"\u30E6",
    "\u32F5"=>"\u30E8",
    "\u32F6"=>"\u30E9",
    "\u32F7"=>"\u30EA",
    "\u32F8"=>"\u30EB",
    "\u32F9"=>"\u30EC",
    "\u32FA"=>"\u30ED",
    "\u32FB"=>"\u30EF",
    "\u32FC"=>"\u30F0",
    "\u32FD"=>"\u30F1",
    "\u32FE"=>"\u30F2",
    "\u32FF"=>"\u4EE4\u548C",
    "\u3300"=>"\u30A2\u30D1\u30FC\u30C8",
    "\u3301"=>"\u30A2\u30EB\u30D5\u30A1",
    "\u3302"=>"\u30A2\u30F3\u30DA\u30A2",
    "\u3303"=>"\u30A2\u30FC\u30EB",
    "\u3304"=>"\u30A4\u30CB\u30F3\u30B0",
    "\u3305"=>"\u30A4\u30F3\u30C1",
    "\u3306"=>"\u30A6\u30A9\u30F3",
    "\u3307"=>"\u30A8\u30B9\u30AF\u30FC\u30C9",
    "\u3308"=>"\u30A8\u30FC\u30AB\u30FC",
    "\u3309"=>"\u30AA\u30F3\u30B9",
    "\u330A"=>"\u30AA\u30FC\u30E0",
    "\u330B"=>"\u30AB\u30A4\u30EA",
    "\u330C"=>"\u30AB\u30E9\u30C3\u30C8",
    "\u330D"=>"\u30AB\u30ED\u30EA\u30FC",
    "\u330E"=>"\u30AC\u30ED\u30F3",
    "\u330F"=>"\u30AC\u30F3\u30DE",
    "\u3310"=>"\u30AE\u30AC",
    "\u3311"=>"\u30AE\u30CB\u30FC",
    "\u3312"=>"\u30AD\u30E5\u30EA\u30FC",
    "\u3313"=>"\u30AE\u30EB\u30C0\u30FC",
    "\u3314"=>"\u30AD\u30ED",
    "\u3315"=>"\u30AD\u30ED\u30B0\u30E9\u30E0",
    "\u3316"=>"\u30AD\u30ED\u30E1\u30FC\u30C8\u30EB",
    "\u3317"=>"\u30AD\u30ED\u30EF\u30C3\u30C8",
    "\u3318"=>"\u30B0\u30E9\u30E0",
    "\u3319"=>"\u30B0\u30E9\u30E0\u30C8\u30F3",
    "\u331A"=>"\u30AF\u30EB\u30BC\u30A4\u30ED",
    "\u331B"=>"\u30AF\u30ED\u30FC\u30CD",
    "\u331C"=>"\u30B1\u30FC\u30B9",
    "\u331D"=>"\u30B3\u30EB\u30CA",
    "\u331E"=>"\u30B3\u30FC\u30DD",
    "\u331F"=>"\u30B5\u30A4\u30AF\u30EB",
    "\u3320"=>"\u30B5\u30F3\u30C1\u30FC\u30E0",
    "\u3321"=>"\u30B7\u30EA\u30F3\u30B0",
    "\u3322"=>"\u30BB\u30F3\u30C1",
    "\u3323"=>"\u30BB\u30F3\u30C8",
    "\u3324"=>"\u30C0\u30FC\u30B9",
    "\u3325"=>"\u30C7\u30B7",
    "\u3326"=>"\u30C9\u30EB",
    "\u3327"=>"\u30C8\u30F3",
    "\u3328"=>"\u30CA\u30CE",
    "\u3329"=>"\u30CE\u30C3\u30C8",
    "\u332A"=>"\u30CF\u30A4\u30C4",
    "\u332B"=>"\u30D1\u30FC\u30BB\u30F3\u30C8",
    "\u332C"=>"\u30D1\u30FC\u30C4",
    "\u332D"=>"\u30D0\u30FC\u30EC\u30EB",
    "\u332E"=>"\u30D4\u30A2\u30B9\u30C8\u30EB",
    "\u332F"=>"\u30D4\u30AF\u30EB",
    "\u3330"=>"\u30D4\u30B3",
    "\u3331"=>"\u30D3\u30EB",
    "\u3332"=>"\u30D5\u30A1\u30E9\u30C3\u30C9",
    "\u3333"=>"\u30D5\u30A3\u30FC\u30C8",
    "\u3334"=>"\u30D6\u30C3\u30B7\u30A7\u30EB",
    "\u3335"=>"\u30D5\u30E9\u30F3",
    "\u3336"=>"\u30D8\u30AF\u30BF\u30FC\u30EB",
    "\u3337"=>"\u30DA\u30BD",
    "\u3338"=>"\u30DA\u30CB\u30D2",
    "\u3339"=>"\u30D8\u30EB\u30C4",
    "\u333A"=>"\u30DA\u30F3\u30B9",
    "\u333B"=>"\u30DA\u30FC\u30B8",
    "\u333C"=>"\u30D9\u30FC\u30BF",
    "\u333D"=>"\u30DD\u30A4\u30F3\u30C8",
    "\u333E"=>"\u30DC\u30EB\u30C8",
    "\u333F"=>"\u30DB\u30F3",
    "\u3340"=>"\u30DD\u30F3\u30C9",
    "\u3341"=>"\u30DB\u30FC\u30EB",
    "\u3342"=>"\u30DB\u30FC\u30F3",
    "\u3343"=>"\u30DE\u30A4\u30AF\u30ED",
    "\u3344"=>"\u30DE\u30A4\u30EB",
    "\u3345"=>"\u30DE\u30C3\u30CF",
    "\u3346"=>"\u30DE\u30EB\u30AF",
    "\u3347"=>"\u30DE\u30F3\u30B7\u30E7\u30F3",
    "\u3348"=>"\u30DF\u30AF\u30ED\u30F3",
    "\u3349"=>"\u30DF\u30EA",
    "\u334A"=>"\u30DF\u30EA\u30D0\u30FC\u30EB",
    "\u334B"=>"\u30E1\u30AC",
    "\u334C"=>"\u30E1\u30AC\u30C8\u30F3",
    "\u334D"=>"\u30E1\u30FC\u30C8\u30EB",
    "\u334E"=>"\u30E4\u30FC\u30C9",
    "\u334F"=>"\u30E4\u30FC\u30EB",
    "\u3350"=>"\u30E6\u30A2\u30F3",
    "\u3351"=>"\u30EA\u30C3\u30C8\u30EB",
    "\u3352"=>"\u30EA\u30E9",
    "\u3353"=>"\u30EB\u30D4\u30FC",
    "\u3354"=>"\u30EB\u30FC\u30D6\u30EB",
    "\u3355"=>"\u30EC\u30E0",
    "\u3356"=>"\u30EC\u30F3\u30C8\u30B2\u30F3",
    "\u3357"=>"\u30EF\u30C3\u30C8",
    "\u3358"=>"0\u70B9",
    "\u3359"=>"1\u70B9",
    "\u335A"=>"2\u70B9",
    "\u335B"=>"3\u70B9",
    "\u335C"=>"4\u70B9",
    "\u335D"=>"5\u70B9",
    "\u335E"=>"6\u70B9",
    "\u335F"=>"7\u70B9",
    "\u3360"=>"8\u70B9",
    "\u3361"=>"9\u70B9",
    "\u3362"=>"10\u70B9",
    "\u3363"=>"11\u70B9",
    "\u3364"=>"12\u70B9",
    "\u3365"=>"13\u70B9",
    "\u3366"=>"14\u70B9",
    "\u3367"=>"15\u70B9",
    "\u3368"=>"16\u70B9",
    "\u3369"=>"17\u70B9",
    "\u336A"=>"18\u70B9",
    "\u336B"=>"19\u70B9",
    "\u336C"=>"20\u70B9",
    "\u336D"=>"21\u70B9",
    "\u336E"=>"22\u70B9",
    "\u336F"=>"23\u70B9",
    "\u3370"=>"24\u70B9",
    "\u3371"=>"hPa",
    "\u3372"=>"da",
    "\u3373"=>"AU",
    "\u3374"=>"bar",
    "\u3375"=>"oV",
    "\u3376"=>"pc",
    "\u3377"=>"dm",
    "\u3378"=>"dm2",
    "\u3379"=>"dm3",
    "\u337A"=>"IU",
    "\u337B"=>"\u5E73\u6210",
    "\u337C"=>"\u662D\u548C",
    "\u337D"=>"\u5927\u6B63",
    "\u337E"=>"\u660E\u6CBB",
    "\u337F"=>"\u682A\u5F0F\u4F1A\u793E",
    "\u3380"=>"pA",
    "\u3381"=>"nA",
    "\u3382"=>"\u03BCA",
    "\u3383"=>"mA",
    "\u3384"=>"kA",
    "\u3385"=>"KB",
    "\u3386"=>"MB",
    "\u3387"=>"GB",
    "\u3388"=>"cal",
    "\u3389"=>"kcal",
    "\u338A"=>"pF",
    "\u338B"=>"nF",
    "\u338C"=>"\u03BCF",
    "\u338D"=>"\u03BCg",
    "\u338E"=>"mg",
    "\u338F"=>"kg",
    "\u3390"=>"Hz",
    "\u3391"=>"kHz",
    "\u3392"=>"MHz",
    "\u3393"=>"GHz",
    "\u3394"=>"THz",
    "\u3395"=>"\u03BCl",
    "\u3396"=>"ml",
    "\u3397"=>"dl",
    "\u3398"=>"kl",
    "\u3399"=>"fm",
    "\u339A"=>"nm",
    "\u339B"=>"\u03BCm",
    "\u339C"=>"mm",
    "\u339D"=>"cm",
    "\u339E"=>"km",
    "\u339F"=>"mm2",
    "\u33A0"=>"cm2",
    "\u33A1"=>"m2",
    "\u33A2"=>"km2",
    "\u33A3"=>"mm3",
    "\u33A4"=>"cm3",
    "\u33A5"=>"m3",
    "\u33A6"=>"km3",
    "\u33A7"=>"m\u2215s",
    "\u33A8"=>"m\u2215s2",
    "\u33A9"=>"Pa",
    "\u33AA"=>"kPa",
    "\u33AB"=>"MPa",
    "\u33AC"=>"GPa",
    "\u33AD"=>"rad",
    "\u33AE"=>"rad\u2215s",
    "\u33AF"=>"rad\u2215s2",
    "\u33B0"=>"ps",
    "\u33B1"=>"ns",
    "\u33B2"=>"\u03BCs",
    "\u33B3"=>"ms",
    "\u33B4"=>"pV",
    "\u33B5"=>"nV",
    "\u33B6"=>"\u03BCV",
    "\u33B7"=>"mV",
    "\u33B8"=>"kV",
    "\u33B9"=>"MV",
    "\u33BA"=>"pW",
    "\u33BB"=>"nW",
    "\u33BC"=>"\u03BCW",
    "\u33BD"=>"mW",
    "\u33BE"=>"kW",
    "\u33BF"=>"MW",
    "\u33C0"=>"k\u03A9",
    "\u33C1"=>"M\u03A9",
    "\u33C2"=>"a.m.",
    "\u33C3"=>"Bq",
    "\u33C4"=>"cc",
    "\u33C5"=>"cd",
    "\u33C6"=>"C\u2215kg",
    "\u33C7"=>"Co.",
    "\u33C8"=>"dB",
    "\u33C9"=>"Gy",
    "\u33CA"=>"ha",
    "\u33CB"=>"HP",
    "\u33CC"=>"in",
    "\u33CD"=>"KK",
    "\u33CE"=>"KM",
    "\u33CF"=>"kt",
    "\u33D0"=>"lm",
    "\u33D1"=>"ln",
    "\u33D2"=>"log",
    "\u33D3"=>"lx",
    "\u33D4"=>"mb",
    "\u33D5"=>"mil",
    "\u33D6"=>"mol",
    "\u33D7"=>"PH",
    "\u33D8"=>"p.m.",
    "\u33D9"=>"PPM",
    "\u33DA"=>"PR",
    "\u33DB"=>"sr",
    "\u33DC"=>"Sv",
    "\u33DD"=>"Wb",
    "\u33DE"=>"V\u2215m",
    "\u33DF"=>"A\u2215m",
    "\u33E0"=>"1\u65E5",
    "\u33E1"=>"2\u65E5",
    "\u33E2"=>"3\u65E5",
    "\u33E3"=>"4\u65E5",
    "\u33E4"=>"5\u65E5",
    "\u33E5"=>"6\u65E5",
    "\u33E6"=>"7\u65E5",
    "\u33E7"=>"8\u65E5",
    "\u33E8"=>"9\u65E5",
    "\u33E9"=>"10\u65E5",
    "\u33EA"=>"11\u65E5",
    "\u33EB"=>"12\u65E5",
    "\u33EC"=>"13\u65E5",
    "\u33ED"=>"14\u65E5",
    "\u33EE"=>"15\u65E5",
    "\u33EF"=>"16\u65E5",
    "\u33F0"=>"17\u65E5",
    "\u33F1"=>"18\u65E5",
    "\u33F2"=>"19\u65E5",
    "\u33F3"=>"20\u65E5",
    "\u33F4"=>"21\u65E5",
    "\u33F5"=>"22\u65E5",
    "\u33F6"=>"23\u65E5",
    "\u33F7"=>"24\u65E5",
    "\u33F8"=>"25\u65E5",
    "\u33F9"=>"26\u65E5",
    "\u33FA"=>"27\u65E5",
    "\u33FB"=>"28\u65E5",
    "\u33FC"=>"29\u65E5",
    "\u33FD"=>"30\u65E5",
    "\u33FE"=>"31\u65E5",
    "\u33FF"=>"gal",
    "\uA69C"=>"\u044A",
    "\uA69D"=>"\u044C",
    "\uA770"=>"\uA76F",
    "\uA7F2"=>"C",
    "\uA7F3"=>"F",
    "\uA7F4"=>"Q",
    "\uA7F8"=>"\u0126",
    "\uA7F9"=>"\u0153",
    "\uAB5C"=>"\uA727",
    "\uAB5D"=>"\uAB37",
    "\uAB5E"=>"\u026B",
    "\uAB5F"=>"\uAB52",
    "\uAB69"=>"\u028D",
    "\uFB00"=>"ff",
    "\uFB01"=>"fi",
    "\uFB02"=>"fl",
    "\uFB03"=>"ffi",
    "\uFB04"=>"ffl",
    "\uFB05"=>"st",
    "\uFB06"=>"st",
    "\uFB13"=>"\u0574\u0576",
    "\uFB14"=>"\u0574\u0565",
    "\uFB15"=>"\u0574\u056B",
    "\uFB16"=>"\u057E\u0576",
    "\uFB17"=>"\u0574\u056D",
    "\uFB20"=>"\u05E2",
    "\uFB21"=>"\u05D0",
    "\uFB22"=>"\u05D3",
    "\uFB23"=>"\u05D4",
    "\uFB24"=>"\u05DB",
    "\uFB25"=>"\u05DC",
    "\uFB26"=>"\u05DD",
    "\uFB27"=>"\u05E8",
    "\uFB28"=>"\u05EA",
    "\uFB29"=>"+",
    "\uFB4F"=>"\u05D0\u05DC",
    "\uFB50"=>"\u0671",
    "\uFB51"=>"\u0671",
    "\uFB52"=>"\u067B",
    "\uFB53"=>"\u067B",
    "\uFB54"=>"\u067B",
    "\uFB55"=>"\u067B",
    "\uFB56"=>"\u067E",
    "\uFB57"=>"\u067E",
    "\uFB58"=>"\u067E",
    "\uFB59"=>"\u067E",
    "\uFB5A"=>"\u0680",
    "\uFB5B"=>"\u0680",
    "\uFB5C"=>"\u0680",
    "\uFB5D"=>"\u0680",
    "\uFB5E"=>"\u067A",
    "\uFB5F"=>"\u067A",
    "\uFB60"=>"\u067A",
    "\uFB61"=>"\u067A",
    "\uFB62"=>"\u067F",
    "\uFB63"=>"\u067F",
    "\uFB64"=>"\u067F",
    "\uFB65"=>"\u067F",
    "\uFB66"=>"\u0679",
    "\uFB67"=>"\u0679",
    "\uFB68"=>"\u0679",
    "\uFB69"=>"\u0679",
    "\uFB6A"=>"\u06A4",
    "\uFB6B"=>"\u06A4",
    "\uFB6C"=>"\u06A4",
    "\uFB6D"=>"\u06A4",
    "\uFB6E"=>"\u06A6",
    "\uFB6F"=>"\u06A6",
    "\uFB70"=>"\u06A6",
    "\uFB71"=>"\u06A6",
    "\uFB72"=>"\u0684",
    "\uFB73"=>"\u0684",
    "\uFB74"=>"\u0684",
    "\uFB75"=>"\u0684",
    "\uFB76"=>"\u0683",
    "\uFB77"=>"\u0683",
    "\uFB78"=>"\u0683",
    "\uFB79"=>"\u0683",
    "\uFB7A"=>"\u0686",
    "\uFB7B"=>"\u0686",
    "\uFB7C"=>"\u0686",
    "\uFB7D"=>"\u0686",
    "\uFB7E"=>"\u0687",
    "\uFB7F"=>"\u0687",
    "\uFB80"=>"\u0687",
    "\uFB81"=>"\u0687",
    "\uFB82"=>"\u068D",
    "\uFB83"=>"\u068D",
    "\uFB84"=>"\u068C",
    "\uFB85"=>"\u068C",
    "\uFB86"=>"\u068E",
    "\uFB87"=>"\u068E",
    "\uFB88"=>"\u0688",
    "\uFB89"=>"\u0688",
    "\uFB8A"=>"\u0698",
    "\uFB8B"=>"\u0698",
    "\uFB8C"=>"\u0691",
    "\uFB8D"=>"\u0691",
    "\uFB8E"=>"\u06A9",
    "\uFB8F"=>"\u06A9",
    "\uFB90"=>"\u06A9",
    "\uFB91"=>"\u06A9",
    "\uFB92"=>"\u06AF",
    "\uFB93"=>"\u06AF",
    "\uFB94"=>"\u06AF",
    "\uFB95"=>"\u06AF",
    "\uFB96"=>"\u06B3",
    "\uFB97"=>"\u06B3",
    "\uFB98"=>"\u06B3",
    "\uFB99"=>"\u06B3",
    "\uFB9A"=>"\u06B1",
    "\uFB9B"=>"\u06B1",
    "\uFB9C"=>"\u06B1",
    "\uFB9D"=>"\u06B1",
    "\uFB9E"=>"\u06BA",
    "\uFB9F"=>"\u06BA",
    "\uFBA0"=>"\u06BB",
    "\uFBA1"=>"\u06BB",
    "\uFBA2"=>"\u06BB",
    "\uFBA3"=>"\u06BB",
    "\uFBA4"=>"\u06C0",
    "\uFBA5"=>"\u06C0",
    "\uFBA6"=>"\u06C1",
    "\uFBA7"=>"\u06C1",
    "\uFBA8"=>"\u06C1",
    "\uFBA9"=>"\u06C1",
    "\uFBAA"=>"\u06BE",
    "\uFBAB"=>"\u06BE",
    "\uFBAC"=>"\u06BE",
    "\uFBAD"=>"\u06BE",
    "\uFBAE"=>"\u06D2",
    "\uFBAF"=>"\u06D2",
    "\uFBB0"=>"\u06D3",
    "\uFBB1"=>"\u06D3",
    "\uFBD3"=>"\u06AD",
    "\uFBD4"=>"\u06AD",
    "\uFBD5"=>"\u06AD",
    "\uFBD6"=>"\u06AD",
    "\uFBD7"=>"\u06C7",
    "\uFBD8"=>"\u06C7",
    "\uFBD9"=>"\u06C6",
    "\uFBDA"=>"\u06C6",
    "\uFBDB"=>"\u06C8",
    "\uFBDC"=>"\u06C8",
    "\uFBDD"=>"\u06C7\u0674",
    "\uFBDE"=>"\u06CB",
    "\uFBDF"=>"\u06CB",
    "\uFBE0"=>"\u06C5",
    "\uFBE1"=>"\u06C5",
    "\uFBE2"=>"\u06C9",
    "\uFBE3"=>"\u06C9",
    "\uFBE4"=>"\u06D0",
    "\uFBE5"=>"\u06D0",
    "\uFBE6"=>"\u06D0",
    "\uFBE7"=>"\u06D0",
    "\uFBE8"=>"\u0649",
    "\uFBE9"=>"\u0649",
    "\uFBEA"=>"\u0626\u0627",
    "\uFBEB"=>"\u0626\u0627",
    "\uFBEC"=>"\u0626\u06D5",
    "\uFBED"=>"\u0626\u06D5",
    "\uFBEE"=>"\u0626\u0648",
    "\uFBEF"=>"\u0626\u0648",
    "\uFBF0"=>"\u0626\u06C7",
    "\uFBF1"=>"\u0626\u06C7",
    "\uFBF2"=>"\u0626\u06C6",
    "\uFBF3"=>"\u0626\u06C6",
    "\uFBF4"=>"\u0626\u06C8",
    "\uFBF5"=>"\u0626\u06C8",
    "\uFBF6"=>"\u0626\u06D0",
    "\uFBF7"=>"\u0626\u06D0",
    "\uFBF8"=>"\u0626\u06D0",
    "\uFBF9"=>"\u0626\u0649",
    "\uFBFA"=>"\u0626\u0649",
    "\uFBFB"=>"\u0626\u0649",
    "\uFBFC"=>"\u06CC",
    "\uFBFD"=>"\u06CC",
    "\uFBFE"=>"\u06CC",
    "\uFBFF"=>"\u06CC",
    "\uFC00"=>"\u0626\u062C",
    "\uFC01"=>"\u0626\u062D",
    "\uFC02"=>"\u0626\u0645",
    "\uFC03"=>"\u0626\u0649",
    "\uFC04"=>"\u0626\u064A",
    "\uFC05"=>"\u0628\u062C",
    "\uFC06"=>"\u0628\u062D",
    "\uFC07"=>"\u0628\u062E",
    "\uFC08"=>"\u0628\u0645",
    "\uFC09"=>"\u0628\u0649",
    "\uFC0A"=>"\u0628\u064A",
    "\uFC0B"=>"\u062A\u062C",
    "\uFC0C"=>"\u062A\u062D",
    "\uFC0D"=>"\u062A\u062E",
    "\uFC0E"=>"\u062A\u0645",
    "\uFC0F"=>"\u062A\u0649",
    "\uFC10"=>"\u062A\u064A",
    "\uFC11"=>"\u062B\u062C",
    "\uFC12"=>"\u062B\u0645",
    "\uFC13"=>"\u062B\u0649",
    "\uFC14"=>"\u062B\u064A",
    "\uFC15"=>"\u062C\u062D",
    "\uFC16"=>"\u062C\u0645",
    "\uFC17"=>"\u062D\u062C",
    "\uFC18"=>"\u062D\u0645",
    "\uFC19"=>"\u062E\u062C",
    "\uFC1A"=>"\u062E\u062D",
    "\uFC1B"=>"\u062E\u0645",
    "\uFC1C"=>"\u0633\u062C",
    "\uFC1D"=>"\u0633\u062D",
    "\uFC1E"=>"\u0633\u062E",
    "\uFC1F"=>"\u0633\u0645",
    "\uFC20"=>"\u0635\u062D",
    "\uFC21"=>"\u0635\u0645",
    "\uFC22"=>"\u0636\u062C",
    "\uFC23"=>"\u0636\u062D",
    "\uFC24"=>"\u0636\u062E",
    "\uFC25"=>"\u0636\u0645",
    "\uFC26"=>"\u0637\u062D",
    "\uFC27"=>"\u0637\u0645",
    "\uFC28"=>"\u0638\u0645",
    "\uFC29"=>"\u0639\u062C",
    "\uFC2A"=>"\u0639\u0645",
    "\uFC2B"=>"\u063A\u062C",
    "\uFC2C"=>"\u063A\u0645",
    "\uFC2D"=>"\u0641\u062C",
    "\uFC2E"=>"\u0641\u062D",
    "\uFC2F"=>"\u0641\u062E",
    "\uFC30"=>"\u0641\u0645",
    "\uFC31"=>"\u0641\u0649",
    "\uFC32"=>"\u0641\u064A",
    "\uFC33"=>"\u0642\u062D",
    "\uFC34"=>"\u0642\u0645",
    "\uFC35"=>"\u0642\u0649",
    "\uFC36"=>"\u0642\u064A",
    "\uFC37"=>"\u0643\u0627",
    "\uFC38"=>"\u0643\u062C",
    "\uFC39"=>"\u0643\u062D",
    "\uFC3A"=>"\u0643\u062E",
    "\uFC3B"=>"\u0643\u0644",
    "\uFC3C"=>"\u0643\u0645",
    "\uFC3D"=>"\u0643\u0649",
    "\uFC3E"=>"\u0643\u064A",
    "\uFC3F"=>"\u0644\u062C",
    "\uFC40"=>"\u0644\u062D",
    "\uFC41"=>"\u0644\u062E",
    "\uFC42"=>"\u0644\u0645",
    "\uFC43"=>"\u0644\u0649",
    "\uFC44"=>"\u0644\u064A",
    "\uFC45"=>"\u0645\u062C",
    "\uFC46"=>"\u0645\u062D",
    "\uFC47"=>"\u0645\u062E",
    "\uFC48"=>"\u0645\u0645",
    "\uFC49"=>"\u0645\u0649",
    "\uFC4A"=>"\u0645\u064A",
    "\uFC4B"=>"\u0646\u062C",
    "\uFC4C"=>"\u0646\u062D",
    "\uFC4D"=>"\u0646\u062E",
    "\uFC4E"=>"\u0646\u0645",
    "\uFC4F"=>"\u0646\u0649",
    "\uFC50"=>"\u0646\u064A",
    "\uFC51"=>"\u0647\u062C",
    "\uFC52"=>"\u0647\u0645",
    "\uFC53"=>"\u0647\u0649",
    "\uFC54"=>"\u0647\u064A",
    "\uFC55"=>"\u064A\u062C",
    "\uFC56"=>"\u064A\u062D",
    "\uFC57"=>"\u064A\u062E",
    "\uFC58"=>"\u064A\u0645",
    "\uFC59"=>"\u064A\u0649",
    "\uFC5A"=>"\u064A\u064A",
    "\uFC5B"=>"\u0630\u0670",
    "\uFC5C"=>"\u0631\u0670",
    "\uFC5D"=>"\u0649\u0670",
    "\uFC5E"=>" \u064C\u0651",
    "\uFC5F"=>" \u064D\u0651",
    "\uFC60"=>" \u064E\u0651",
    "\uFC61"=>" \u064F\u0651",
    "\uFC62"=>" \u0650\u0651",
    "\uFC63"=>" \u0651\u0670",
    "\uFC64"=>"\u0626\u0631",
    "\uFC65"=>"\u0626\u0632",
    "\uFC66"=>"\u0626\u0645",
    "\uFC67"=>"\u0626\u0646",
    "\uFC68"=>"\u0626\u0649",
    "\uFC69"=>"\u0626\u064A",
    "\uFC6A"=>"\u0628\u0631",
    "\uFC6B"=>"\u0628\u0632",
    "\uFC6C"=>"\u0628\u0645",
    "\uFC6D"=>"\u0628\u0646",
    "\uFC6E"=>"\u0628\u0649",
    "\uFC6F"=>"\u0628\u064A",
    "\uFC70"=>"\u062A\u0631",
    "\uFC71"=>"\u062A\u0632",
    "\uFC72"=>"\u062A\u0645",
    "\uFC73"=>"\u062A\u0646",
    "\uFC74"=>"\u062A\u0649",
    "\uFC75"=>"\u062A\u064A",
    "\uFC76"=>"\u062B\u0631",
    "\uFC77"=>"\u062B\u0632",
    "\uFC78"=>"\u062B\u0645",
    "\uFC79"=>"\u062B\u0646",
    "\uFC7A"=>"\u062B\u0649",
    "\uFC7B"=>"\u062B\u064A",
    "\uFC7C"=>"\u0641\u0649",
    "\uFC7D"=>"\u0641\u064A",
    "\uFC7E"=>"\u0642\u0649",
    "\uFC7F"=>"\u0642\u064A",
    "\uFC80"=>"\u0643\u0627",
    "\uFC81"=>"\u0643\u0644",
    "\uFC82"=>"\u0643\u0645",
    "\uFC83"=>"\u0643\u0649",
    "\uFC84"=>"\u0643\u064A",
    "\uFC85"=>"\u0644\u0645",
    "\uFC86"=>"\u0644\u0649",
    "\uFC87"=>"\u0644\u064A",
    "\uFC88"=>"\u0645\u0627",
    "\uFC89"=>"\u0645\u0645",
    "\uFC8A"=>"\u0646\u0631",
    "\uFC8B"=>"\u0646\u0632",
    "\uFC8C"=>"\u0646\u0645",
    "\uFC8D"=>"\u0646\u0646",
    "\uFC8E"=>"\u0646\u0649",
    "\uFC8F"=>"\u0646\u064A",
    "\uFC90"=>"\u0649\u0670",
    "\uFC91"=>"\u064A\u0631",
    "\uFC92"=>"\u064A\u0632",
    "\uFC93"=>"\u064A\u0645",
    "\uFC94"=>"\u064A\u0646",
    "\uFC95"=>"\u064A\u0649",
    "\uFC96"=>"\u064A\u064A",
    "\uFC97"=>"\u0626\u062C",
    "\uFC98"=>"\u0626\u062D",
    "\uFC99"=>"\u0626\u062E",
    "\uFC9A"=>"\u0626\u0645",
    "\uFC9B"=>"\u0626\u0647",
    "\uFC9C"=>"\u0628\u062C",
    "\uFC9D"=>"\u0628\u062D",
    "\uFC9E"=>"\u0628\u062E",
    "\uFC9F"=>"\u0628\u0645",
    "\uFCA0"=>"\u0628\u0647",
    "\uFCA1"=>"\u062A\u062C",
    "\uFCA2"=>"\u062A\u062D",
    "\uFCA3"=>"\u062A\u062E",
    "\uFCA4"=>"\u062A\u0645",
    "\uFCA5"=>"\u062A\u0647",
    "\uFCA6"=>"\u062B\u0645",
    "\uFCA7"=>"\u062C\u062D",
    "\uFCA8"=>"\u062C\u0645",
    "\uFCA9"=>"\u062D\u062C",
    "\uFCAA"=>"\u062D\u0645",
    "\uFCAB"=>"\u062E\u062C",
    "\uFCAC"=>"\u062E\u0645",
    "\uFCAD"=>"\u0633\u062C",
    "\uFCAE"=>"\u0633\u062D",
    "\uFCAF"=>"\u0633\u062E",
    "\uFCB0"=>"\u0633\u0645",
    "\uFCB1"=>"\u0635\u062D",
    "\uFCB2"=>"\u0635\u062E",
    "\uFCB3"=>"\u0635\u0645",
    "\uFCB4"=>"\u0636\u062C",
    "\uFCB5"=>"\u0636\u062D",
    "\uFCB6"=>"\u0636\u062E",
    "\uFCB7"=>"\u0636\u0645",
    "\uFCB8"=>"\u0637\u062D",
    "\uFCB9"=>"\u0638\u0645",
    "\uFCBA"=>"\u0639\u062C",
    "\uFCBB"=>"\u0639\u0645",
    "\uFCBC"=>"\u063A\u062C",
    "\uFCBD"=>"\u063A\u0645",
    "\uFCBE"=>"\u0641\u062C",
    "\uFCBF"=>"\u0641\u062D",
    "\uFCC0"=>"\u0641\u062E",
    "\uFCC1"=>"\u0641\u0645",
    "\uFCC2"=>"\u0642\u062D",
    "\uFCC3"=>"\u0642\u0645",
    "\uFCC4"=>"\u0643\u062C",
    "\uFCC5"=>"\u0643\u062D",
    "\uFCC6"=>"\u0643\u062E",
    "\uFCC7"=>"\u0643\u0644",
    "\uFCC8"=>"\u0643\u0645",
    "\uFCC9"=>"\u0644\u062C",
    "\uFCCA"=>"\u0644\u062D",
    "\uFCCB"=>"\u0644\u062E",
    "\uFCCC"=>"\u0644\u0645",
    "\uFCCD"=>"\u0644\u0647",
    "\uFCCE"=>"\u0645\u062C",
    "\uFCCF"=>"\u0645\u062D",
    "\uFCD0"=>"\u0645\u062E",
    "\uFCD1"=>"\u0645\u0645",
    "\uFCD2"=>"\u0646\u062C",
    "\uFCD3"=>"\u0646\u062D",
    "\uFCD4"=>"\u0646\u062E",
    "\uFCD5"=>"\u0646\u0645",
    "\uFCD6"=>"\u0646\u0647",
    "\uFCD7"=>"\u0647\u062C",
    "\uFCD8"=>"\u0647\u0645",
    "\uFCD9"=>"\u0647\u0670",
    "\uFCDA"=>"\u064A\u062C",
    "\uFCDB"=>"\u064A\u062D",
    "\uFCDC"=>"\u064A\u062E",
    "\uFCDD"=>"\u064A\u0645",
    "\uFCDE"=>"\u064A\u0647",
    "\uFCDF"=>"\u0626\u0645",
    "\uFCE0"=>"\u0626\u0647",
    "\uFCE1"=>"\u0628\u0645",
    "\uFCE2"=>"\u0628\u0647",
    "\uFCE3"=>"\u062A\u0645",
    "\uFCE4"=>"\u062A\u0647",
    "\uFCE5"=>"\u062B\u0645",
    "\uFCE6"=>"\u062B\u0647",
    "\uFCE7"=>"\u0633\u0645",
    "\uFCE8"=>"\u0633\u0647",
    "\uFCE9"=>"\u0634\u0645",
    "\uFCEA"=>"\u0634\u0647",
    "\uFCEB"=>"\u0643\u0644",
    "\uFCEC"=>"\u0643\u0645",
    "\uFCED"=>"\u0644\u0645",
    "\uFCEE"=>"\u0646\u0645",
    "\uFCEF"=>"\u0646\u0647",
    "\uFCF0"=>"\u064A\u0645",
    "\uFCF1"=>"\u064A\u0647",
    "\uFCF2"=>"\u0640\u064E\u0651",
    "\uFCF3"=>"\u0640\u064F\u0651",
    "\uFCF4"=>"\u0640\u0650\u0651",
    "\uFCF5"=>"\u0637\u0649",
    "\uFCF6"=>"\u0637\u064A",
    "\uFCF7"=>"\u0639\u0649",
    "\uFCF8"=>"\u0639\u064A",
    "\uFCF9"=>"\u063A\u0649",
    "\uFCFA"=>"\u063A\u064A",
    "\uFCFB"=>"\u0633\u0649",
    "\uFCFC"=>"\u0633\u064A",
    "\uFCFD"=>"\u0634\u0649",
    "\uFCFE"=>"\u0634\u064A",
    "\uFCFF"=>"\u062D\u0649",
    "\uFD00"=>"\u062D\u064A",
    "\uFD01"=>"\u062C\u0649",
    "\uFD02"=>"\u062C\u064A",
    "\uFD03"=>"\u062E\u0649",
    "\uFD04"=>"\u062E\u064A",
    "\uFD05"=>"\u0635\u0649",
    "\uFD06"=>"\u0635\u064A",
    "\uFD07"=>"\u0636\u0649",
    "\uFD08"=>"\u0636\u064A",
    "\uFD09"=>"\u0634\u062C",
    "\uFD0A"=>"\u0634\u062D",
    "\uFD0B"=>"\u0634\u062E",
    "\uFD0C"=>"\u0634\u0645",
    "\uFD0D"=>"\u0634\u0631",
    "\uFD0E"=>"\u0633\u0631",
    "\uFD0F"=>"\u0635\u0631",
    "\uFD10"=>"\u0636\u0631",
    "\uFD11"=>"\u0637\u0649",
    "\uFD12"=>"\u0637\u064A",
    "\uFD13"=>"\u0639\u0649",
    "\uFD14"=>"\u0639\u064A",
    "\uFD15"=>"\u063A\u0649",
    "\uFD16"=>"\u063A\u064A",
    "\uFD17"=>"\u0633\u0649",
    "\uFD18"=>"\u0633\u064A",
    "\uFD19"=>"\u0634\u0649",
    "\uFD1A"=>"\u0634\u064A",
    "\uFD1B"=>"\u062D\u0649",
    "\uFD1C"=>"\u062D\u064A",
    "\uFD1D"=>"\u062C\u0649",
    "\uFD1E"=>"\u062C\u064A",
    "\uFD1F"=>"\u062E\u0649",
    "\uFD20"=>"\u062E\u064A",
    "\uFD21"=>"\u0635\u0649",
    "\uFD22"=>"\u0635\u064A",
    "\uFD23"=>"\u0636\u0649",
    "\uFD24"=>"\u0636\u064A",
    "\uFD25"=>"\u0634\u062C",
    "\uFD26"=>"\u0634\u062D",
    "\uFD27"=>"\u0634\u062E",
    "\uFD28"=>"\u0634\u0645",
    "\uFD29"=>"\u0634\u0631",
    "\uFD2A"=>"\u0633\u0631",
    "\uFD2B"=>"\u0635\u0631",
    "\uFD2C"=>"\u0636\u0631",
    "\uFD2D"=>"\u0634\u062C",
    "\uFD2E"=>"\u0634\u062D",
    "\uFD2F"=>"\u0634\u062E",
    "\uFD30"=>"\u0634\u0645",
    "\uFD31"=>"\u0633\u0647",
    "\uFD32"=>"\u0634\u0647",
    "\uFD33"=>"\u0637\u0645",
    "\uFD34"=>"\u0633\u062C",
    "\uFD35"=>"\u0633\u062D",
    "\uFD36"=>"\u0633\u062E",
    "\uFD37"=>"\u0634\u062C",
    "\uFD38"=>"\u0634\u062D",
    "\uFD39"=>"\u0634\u062E",
    "\uFD3A"=>"\u0637\u0645",
    "\uFD3B"=>"\u0638\u0645",
    "\uFD3C"=>"\u0627\u064B",
    "\uFD3D"=>"\u0627\u064B",
    "\uFD50"=>"\u062A\u062C\u0645",
    "\uFD51"=>"\u062A\u062D\u062C",
    "\uFD52"=>"\u062A\u062D\u062C",
    "\uFD53"=>"\u062A\u062D\u0645",
    "\uFD54"=>"\u062A\u062E\u0645",
    "\uFD55"=>"\u062A\u0645\u062C",
    "\uFD56"=>"\u062A\u0645\u062D",
    "\uFD57"=>"\u062A\u0645\u062E",
    "\uFD58"=>"\u062C\u0645\u062D",
    "\uFD59"=>"\u062C\u0645\u062D",
    "\uFD5A"=>"\u062D\u0645\u064A",
    "\uFD5B"=>"\u062D\u0645\u0649",
    "\uFD5C"=>"\u0633\u062D\u062C",
    "\uFD5D"=>"\u0633\u062C\u062D",
    "\uFD5E"=>"\u0633\u062C\u0649",
    "\uFD5F"=>"\u0633\u0645\u062D",
    "\uFD60"=>"\u0633\u0645\u062D",
    "\uFD61"=>"\u0633\u0645\u062C",
    "\uFD62"=>"\u0633\u0645\u0645",
    "\uFD63"=>"\u0633\u0645\u0645",
    "\uFD64"=>"\u0635\u062D\u062D",
    "\uFD65"=>"\u0635\u062D\u062D",
    "\uFD66"=>"\u0635\u0645\u0645",
    "\uFD67"=>"\u0634\u062D\u0645",
    "\uFD68"=>"\u0634\u062D\u0645",
    "\uFD69"=>"\u0634\u062C\u064A",
    "\uFD6A"=>"\u0634\u0645\u062E",
    "\uFD6B"=>"\u0634\u0645\u062E",
    "\uFD6C"=>"\u0634\u0645\u0645",
    "\uFD6D"=>"\u0634\u0645\u0645",
    "\uFD6E"=>"\u0636\u062D\u0649",
    "\uFD6F"=>"\u0636\u062E\u0645",
    "\uFD70"=>"\u0636\u062E\u0645",
    "\uFD71"=>"\u0637\u0645\u062D",
    "\uFD72"=>"\u0637\u0645\u062D",
    "\uFD73"=>"\u0637\u0645\u0645",
    "\uFD74"=>"\u0637\u0645\u064A",
    "\uFD75"=>"\u0639\u062C\u0645",
    "\uFD76"=>"\u0639\u0645\u0645",
    "\uFD77"=>"\u0639\u0645\u0645",
    "\uFD78"=>"\u0639\u0645\u0649",
    "\uFD79"=>"\u063A\u0645\u0645",
    "\uFD7A"=>"\u063A\u0645\u064A",
    "\uFD7B"=>"\u063A\u0645\u0649",
    "\uFD7C"=>"\u0641\u062E\u0645",
    "\uFD7D"=>"\u0641\u062E\u0645",
    "\uFD7E"=>"\u0642\u0645\u062D",
    "\uFD7F"=>"\u0642\u0645\u0645",
    "\uFD80"=>"\u0644\u062D\u0645",
    "\uFD81"=>"\u0644\u062D\u064A",
    "\uFD82"=>"\u0644\u062D\u0649",
    "\uFD83"=>"\u0644\u062C\u062C",
    "\uFD84"=>"\u0644\u062C\u062C",
    "\uFD85"=>"\u0644\u062E\u0645",
    "\uFD86"=>"\u0644\u062E\u0645",
    "\uFD87"=>"\u0644\u0645\u062D",
    "\uFD88"=>"\u0644\u0645\u062D",
    "\uFD89"=>"\u0645\u062D\u062C",
    "\uFD8A"=>"\u0645\u062D\u0645",
    "\uFD8B"=>"\u0645\u062D\u064A",
    "\uFD8C"=>"\u0645\u062C\u062D",
    "\uFD8D"=>"\u0645\u062C\u0645",
    "\uFD8E"=>"\u0645\u062E\u062C",
    "\uFD8F"=>"\u0645\u062E\u0645",
    "\uFD92"=>"\u0645\u062C\u062E",
    "\uFD93"=>"\u0647\u0645\u062C",
    "\uFD94"=>"\u0647\u0645\u0645",
    "\uFD95"=>"\u0646\u062D\u0645",
    "\uFD96"=>"\u0646\u062D\u0649",
    "\uFD97"=>"\u0646\u062C\u0645",
    "\uFD98"=>"\u0646\u062C\u0645",
    "\uFD99"=>"\u0646\u062C\u0649",
    "\uFD9A"=>"\u0646\u0645\u064A",
    "\uFD9B"=>"\u0646\u0645\u0649",
    "\uFD9C"=>"\u064A\u0645\u0645",
    "\uFD9D"=>"\u064A\u0645\u0645",
    "\uFD9E"=>"\u0628\u062E\u064A",
    "\uFD9F"=>"\u062A\u062C\u064A",
    "\uFDA0"=>"\u062A\u062C\u0649",
    "\uFDA1"=>"\u062A\u062E\u064A",
    "\uFDA2"=>"\u062A\u062E\u0649",
    "\uFDA3"=>"\u062A\u0645\u064A",
    "\uFDA4"=>"\u062A\u0645\u0649",
    "\uFDA5"=>"\u062C\u0645\u064A",
    "\uFDA6"=>"\u062C\u062D\u0649",
    "\uFDA7"=>"\u062C\u0645\u0649",
    "\uFDA8"=>"\u0633\u062E\u0649",
    "\uFDA9"=>"\u0635\u062D\u064A",
    "\uFDAA"=>"\u0634\u062D\u064A",
    "\uFDAB"=>"\u0636\u062D\u064A",
    "\uFDAC"=>"\u0644\u062C\u064A",
    "\uFDAD"=>"\u0644\u0645\u064A",
    "\uFDAE"=>"\u064A\u062D\u064A",
    "\uFDAF"=>"\u064A\u062C\u064A",
    "\uFDB0"=>"\u064A\u0645\u064A",
    "\uFDB1"=>"\u0645\u0645\u064A",
    "\uFDB2"=>"\u0642\u0645\u064A",
    "\uFDB3"=>"\u0646\u062D\u064A",
    "\uFDB4"=>"\u0642\u0645\u062D",
    "\uFDB5"=>"\u0644\u062D\u0645",
    "\uFDB6"=>"\u0639\u0645\u064A",
    "\uFDB7"=>"\u0643\u0645\u064A",
    "\uFDB8"=>"\u0646\u062C\u062D",
    "\uFDB9"=>"\u0645\u062E\u064A",
    "\uFDBA"=>"\u0644\u062C\u0645",
    "\uFDBB"=>"\u0643\u0645\u0645",
    "\uFDBC"=>"\u0644\u062C\u0645",
    "\uFDBD"=>"\u0646\u062C\u062D",
    "\uFDBE"=>"\u062C\u062D\u064A",
    "\uFDBF"=>"\u062D\u062C\u064A",
    "\uFDC0"=>"\u0645\u062C\u064A",
    "\uFDC1"=>"\u0641\u0645\u064A",
    "\uFDC2"=>"\u0628\u062D\u064A",
    "\uFDC3"=>"\u0643\u0645\u0645",
    "\uFDC4"=>"\u0639\u062C\u0645",
    "\uFDC5"=>"\u0635\u0645\u0645",
    "\uFDC6"=>"\u0633\u062E\u064A",
    "\uFDC7"=>"\u0646\u062C\u064A",
    "\uFDF0"=>"\u0635\u0644\u06D2",
    "\uFDF1"=>"\u0642\u0644\u06D2",
    "\uFDF2"=>"\u0627\u0644\u0644\u0647",
    "\uFDF3"=>"\u0627\u0643\u0628\u0631",
    "\uFDF4"=>"\u0645\u062D\u0645\u062F",
    "\uFDF5"=>"\u0635\u0644\u0639\u0645",
    "\uFDF6"=>"\u0631\u0633\u0648\u0644",
    "\uFDF7"=>"\u0639\u0644\u064A\u0647",
    "\uFDF8"=>"\u0648\u0633\u0644\u0645",
    "\uFDF9"=>"\u0635\u0644\u0649",
    "\uFDFA"=>"\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064A\u0647 \u0648\u0633\u0644\u0645",
    "\uFDFB"=>"\u062C\u0644 \u062C\u0644\u0627\u0644\u0647",
    "\uFDFC"=>"\u0631\u06CC\u0627\u0644",
    "\uFE10"=>",",
    "\uFE11"=>"\u3001",
    "\uFE12"=>"\u3002",
    "\uFE13"=>":",
    "\uFE14"=>";",
    "\uFE15"=>"!",
    "\uFE16"=>"?",
    "\uFE17"=>"\u3016",
    "\uFE18"=>"\u3017",
    "\uFE19"=>"...",
    "\uFE30"=>"..",
    "\uFE31"=>"\u2014",
    "\uFE32"=>"\u2013",
    "\uFE33"=>"_",
    "\uFE34"=>"_",
    "\uFE35"=>"(",
    "\uFE36"=>")",
    "\uFE37"=>"{",
    "\uFE38"=>"}",
    "\uFE39"=>"\u3014",
    "\uFE3A"=>"\u3015",
    "\uFE3B"=>"\u3010",
    "\uFE3C"=>"\u3011",
    "\uFE3D"=>"\u300A",
    "\uFE3E"=>"\u300B",
    "\uFE3F"=>"\u3008",
    "\uFE40"=>"\u3009",
    "\uFE41"=>"\u300C",
    "\uFE42"=>"\u300D",
    "\uFE43"=>"\u300E",
    "\uFE44"=>"\u300F",
    "\uFE47"=>"[",
    "\uFE48"=>"]",
    "\uFE49"=>" \u0305",
    "\uFE4A"=>" \u0305",
    "\uFE4B"=>" \u0305",
    "\uFE4C"=>" \u0305",
    "\uFE4D"=>"_",
    "\uFE4E"=>"_",
    "\uFE4F"=>"_",
    "\uFE50"=>",",
    "\uFE51"=>"\u3001",
    "\uFE52"=>".",
    "\uFE54"=>";",
    "\uFE55"=>":",
    "\uFE56"=>"?",
    "\uFE57"=>"!",
    "\uFE58"=>"\u2014",
    "\uFE59"=>"(",
    "\uFE5A"=>")",
    "\uFE5B"=>"{",
    "\uFE5C"=>"}",
    "\uFE5D"=>"\u3014",
    "\uFE5E"=>"\u3015",
    "\uFE5F"=>"#",
    "\uFE60"=>"&",
    "\uFE61"=>"*",
    "\uFE62"=>"+",
    "\uFE63"=>"-",
    "\uFE64"=>"<",
    "\uFE65"=>">",
    "\uFE66"=>"=",
    "\uFE68"=>"\\",
    "\uFE69"=>"$",
    "\uFE6A"=>"%",
    "\uFE6B"=>"@",
    "\uFE70"=>" \u064B",
    "\uFE71"=>"\u0640\u064B",
    "\uFE72"=>" \u064C",
    "\uFE74"=>" \u064D",
    "\uFE76"=>" \u064E",
    "\uFE77"=>"\u0640\u064E",
    "\uFE78"=>" \u064F",
    "\uFE79"=>"\u0640\u064F",
    "\uFE7A"=>" \u0650",
    "\uFE7B"=>"\u0640\u0650",
    "\uFE7C"=>" \u0651",
    "\uFE7D"=>"\u0640\u0651",
    "\uFE7E"=>" \u0652",
    "\uFE7F"=>"\u0640\u0652",
    "\uFE80"=>"\u0621",
    "\uFE81"=>"\u0622",
    "\uFE82"=>"\u0622",
    "\uFE83"=>"\u0623",
    "\uFE84"=>"\u0623",
    "\uFE85"=>"\u0624",
    "\uFE86"=>"\u0624",
    "\uFE87"=>"\u0625",
    "\uFE88"=>"\u0625",
    "\uFE89"=>"\u0626",
    "\uFE8A"=>"\u0626",
    "\uFE8B"=>"\u0626",
    "\uFE8C"=>"\u0626",
    "\uFE8D"=>"\u0627",
    "\uFE8E"=>"\u0627",
    "\uFE8F"=>"\u0628",
    "\uFE90"=>"\u0628",
    "\uFE91"=>"\u0628",
    "\uFE92"=>"\u0628",
    "\uFE93"=>"\u0629",
    "\uFE94"=>"\u0629",
    "\uFE95"=>"\u062A",
    "\uFE96"=>"\u062A",
    "\uFE97"=>"\u062A",
    "\uFE98"=>"\u062A",
    "\uFE99"=>"\u062B",
    "\uFE9A"=>"\u062B",
    "\uFE9B"=>"\u062B",
    "\uFE9C"=>"\u062B",
    "\uFE9D"=>"\u062C",
    "\uFE9E"=>"\u062C",
    "\uFE9F"=>"\u062C",
    "\uFEA0"=>"\u062C",
    "\uFEA1"=>"\u062D",
    "\uFEA2"=>"\u062D",
    "\uFEA3"=>"\u062D",
    "\uFEA4"=>"\u062D",
    "\uFEA5"=>"\u062E",
    "\uFEA6"=>"\u062E",
    "\uFEA7"=>"\u062E",
    "\uFEA8"=>"\u062E",
    "\uFEA9"=>"\u062F",
    "\uFEAA"=>"\u062F",
    "\uFEAB"=>"\u0630",
    "\uFEAC"=>"\u0630",
    "\uFEAD"=>"\u0631",
    "\uFEAE"=>"\u0631",
    "\uFEAF"=>"\u0632",
    "\uFEB0"=>"\u0632",
    "\uFEB1"=>"\u0633",
    "\uFEB2"=>"\u0633",
    "\uFEB3"=>"\u0633",
    "\uFEB4"=>"\u0633",
    "\uFEB5"=>"\u0634",
    "\uFEB6"=>"\u0634",
    "\uFEB7"=>"\u0634",
    "\uFEB8"=>"\u0634",
    "\uFEB9"=>"\u0635",
    "\uFEBA"=>"\u0635",
    "\uFEBB"=>"\u0635",
    "\uFEBC"=>"\u0635",
    "\uFEBD"=>"\u0636",
    "\uFEBE"=>"\u0636",
    "\uFEBF"=>"\u0636",
    "\uFEC0"=>"\u0636",
    "\uFEC1"=>"\u0637",
    "\uFEC2"=>"\u0637",
    "\uFEC3"=>"\u0637",
    "\uFEC4"=>"\u0637",
    "\uFEC5"=>"\u0638",
    "\uFEC6"=>"\u0638",
    "\uFEC7"=>"\u0638",
    "\uFEC8"=>"\u0638",
    "\uFEC9"=>"\u0639",
    "\uFECA"=>"\u0639",
    "\uFECB"=>"\u0639",
    "\uFECC"=>"\u0639",
    "\uFECD"=>"\u063A",
    "\uFECE"=>"\u063A",
    "\uFECF"=>"\u063A",
    "\uFED0"=>"\u063A",
    "\uFED1"=>"\u0641",
    "\uFED2"=>"\u0641",
    "\uFED3"=>"\u0641",
    "\uFED4"=>"\u0641",
    "\uFED5"=>"\u0642",
    "\uFED6"=>"\u0642",
    "\uFED7"=>"\u0642",
    "\uFED8"=>"\u0642",
    "\uFED9"=>"\u0643",
    "\uFEDA"=>"\u0643",
    "\uFEDB"=>"\u0643",
    "\uFEDC"=>"\u0643",
    "\uFEDD"=>"\u0644",
    "\uFEDE"=>"\u0644",
    "\uFEDF"=>"\u0644",
    "\uFEE0"=>"\u0644",
    "\uFEE1"=>"\u0645",
    "\uFEE2"=>"\u0645",
    "\uFEE3"=>"\u0645",
    "\uFEE4"=>"\u0645",
    "\uFEE5"=>"\u0646",
    "\uFEE6"=>"\u0646",
    "\uFEE7"=>"\u0646",
    "\uFEE8"=>"\u0646",
    "\uFEE9"=>"\u0647",
    "\uFEEA"=>"\u0647",
    "\uFEEB"=>"\u0647",
    "\uFEEC"=>"\u0647",
    "\uFEED"=>"\u0648",
    "\uFEEE"=>"\u0648",
    "\uFEEF"=>"\u0649",
    "\uFEF0"=>"\u0649",
    "\uFEF1"=>"\u064A",
    "\uFEF2"=>"\u064A",
    "\uFEF3"=>"\u064A",
    "\uFEF4"=>"\u064A",
    "\uFEF5"=>"\u0644\u0622",
    "\uFEF6"=>"\u0644\u0622",
    "\uFEF7"=>"\u0644\u0623",
    "\uFEF8"=>"\u0644\u0623",
    "\uFEF9"=>"\u0644\u0625",
    "\uFEFA"=>"\u0644\u0625",
    "\uFEFB"=>"\u0644\u0627",
    "\uFEFC"=>"\u0644\u0627",
    "\uFF01"=>"!",
    "\uFF02"=>"\"",
    "\uFF03"=>"#",
    "\uFF04"=>"$",
    "\uFF05"=>"%",
    "\uFF06"=>"&",
    "\uFF07"=>"'",
    "\uFF08"=>"(",
    "\uFF09"=>")",
    "\uFF0A"=>"*",
    "\uFF0B"=>"+",
    "\uFF0C"=>",",
    "\uFF0D"=>"-",
    "\uFF0E"=>".",
    "\uFF0F"=>"/",
    "\uFF10"=>"0",
    "\uFF11"=>"1",
    "\uFF12"=>"2",
    "\uFF13"=>"3",
    "\uFF14"=>"4",
    "\uFF15"=>"5",
    "\uFF16"=>"6",
    "\uFF17"=>"7",
    "\uFF18"=>"8",
    "\uFF19"=>"9",
    "\uFF1A"=>":",
    "\uFF1B"=>";",
    "\uFF1C"=>"<",
    "\uFF1D"=>"=",
    "\uFF1E"=>">",
    "\uFF1F"=>"?",
    "\uFF20"=>"@",
    "\uFF21"=>"A",
    "\uFF22"=>"B",
    "\uFF23"=>"C",
    "\uFF24"=>"D",
    "\uFF25"=>"E",
    "\uFF26"=>"F",
    "\uFF27"=>"G",
    "\uFF28"=>"H",
    "\uFF29"=>"I",
    "\uFF2A"=>"J",
    "\uFF2B"=>"K",
    "\uFF2C"=>"L",
    "\uFF2D"=>"M",
    "\uFF2E"=>"N",
    "\uFF2F"=>"O",
    "\uFF30"=>"P",
    "\uFF31"=>"Q",
    "\uFF32"=>"R",
    "\uFF33"=>"S",
    "\uFF34"=>"T",
    "\uFF35"=>"U",
    "\uFF36"=>"V",
    "\uFF37"=>"W",
    "\uFF38"=>"X",
    "\uFF39"=>"Y",
    "\uFF3A"=>"Z",
    "\uFF3B"=>"[",
    "\uFF3C"=>"\\",
    "\uFF3D"=>"]",
    "\uFF3E"=>"^",
    "\uFF3F"=>"_",
    "\uFF40"=>"`",
    "\uFF41"=>"a",
    "\uFF42"=>"b",
    "\uFF43"=>"c",
    "\uFF44"=>"d",
    "\uFF45"=>"e",
    "\uFF46"=>"f",
    "\uFF47"=>"g",
    "\uFF48"=>"h",
    "\uFF49"=>"i",
    "\uFF4A"=>"j",
    "\uFF4B"=>"k",
    "\uFF4C"=>"l",
    "\uFF4D"=>"m",
    "\uFF4E"=>"n",
    "\uFF4F"=>"o",
    "\uFF50"=>"p",
    "\uFF51"=>"q",
    "\uFF52"=>"r",
    "\uFF53"=>"s",
    "\uFF54"=>"t",
    "\uFF55"=>"u",
    "\uFF56"=>"v",
    "\uFF57"=>"w",
    "\uFF58"=>"x",
    "\uFF59"=>"y",
    "\uFF5A"=>"z",
    "\uFF5B"=>"{",
    "\uFF5C"=>"|",
    "\uFF5D"=>"}",
    "\uFF5E"=>"~",
    "\uFF5F"=>"\u2985",
    "\uFF60"=>"\u2986",
    "\uFF61"=>"\u3002",
    "\uFF62"=>"\u300C",
    "\uFF63"=>"\u300D",
    "\uFF64"=>"\u3001",
    "\uFF65"=>"\u30FB",
    "\uFF66"=>"\u30F2",
    "\uFF67"=>"\u30A1",
    "\uFF68"=>"\u30A3",
    "\uFF69"=>"\u30A5",
    "\uFF6A"=>"\u30A7",
    "\uFF6B"=>"\u30A9",
    "\uFF6C"=>"\u30E3",
    "\uFF6D"=>"\u30E5",
    "\uFF6E"=>"\u30E7",
    "\uFF6F"=>"\u30C3",
    "\uFF70"=>"\u30FC",
    "\uFF71"=>"\u30A2",
    "\uFF72"=>"\u30A4",
    "\uFF73"=>"\u30A6",
    "\uFF74"=>"\u30A8",
    "\uFF75"=>"\u30AA",
    "\uFF76"=>"\u30AB",
    "\uFF77"=>"\u30AD",
    "\uFF78"=>"\u30AF",
    "\uFF79"=>"\u30B1",
    "\uFF7A"=>"\u30B3",
    "\uFF7B"=>"\u30B5",
    "\uFF7C"=>"\u30B7",
    "\uFF7D"=>"\u30B9",
    "\uFF7E"=>"\u30BB",
    "\uFF7F"=>"\u30BD",
    "\uFF80"=>"\u30BF",
    "\uFF81"=>"\u30C1",
    "\uFF82"=>"\u30C4",
    "\uFF83"=>"\u30C6",
    "\uFF84"=>"\u30C8",
    "\uFF85"=>"\u30CA",
    "\uFF86"=>"\u30CB",
    "\uFF87"=>"\u30CC",
    "\uFF88"=>"\u30CD",
    "\uFF89"=>"\u30CE",
    "\uFF8A"=>"\u30CF",
    "\uFF8B"=>"\u30D2",
    "\uFF8C"=>"\u30D5",
    "\uFF8D"=>"\u30D8",
    "\uFF8E"=>"\u30DB",
    "\uFF8F"=>"\u30DE",
    "\uFF90"=>"\u30DF",
    "\uFF91"=>"\u30E0",
    "\uFF92"=>"\u30E1",
    "\uFF93"=>"\u30E2",
    "\uFF94"=>"\u30E4",
    "\uFF95"=>"\u30E6",
    "\uFF96"=>"\u30E8",
    "\uFF97"=>"\u30E9",
    "\uFF98"=>"\u30EA",
    "\uFF99"=>"\u30EB",
    "\uFF9A"=>"\u30EC",
    "\uFF9B"=>"\u30ED",
    "\uFF9C"=>"\u30EF",
    "\uFF9D"=>"\u30F3",
    "\uFF9E"=>"\u3099",
    "\uFF9F"=>"\u309A",
    "\uFFA0"=>"\u1160",
    "\uFFA1"=>"\u1100",
    "\uFFA2"=>"\u1101",
    "\uFFA3"=>"\u11AA",
    "\uFFA4"=>"\u1102",
    "\uFFA5"=>"\u11AC",
    "\uFFA6"=>"\u11AD",
    "\uFFA7"=>"\u1103",
    "\uFFA8"=>"\u1104",
    "\uFFA9"=>"\u1105",
    "\uFFAA"=>"\u11B0",
    "\uFFAB"=>"\u11B1",
    "\uFFAC"=>"\u11B2",
    "\uFFAD"=>"\u11B3",
    "\uFFAE"=>"\u11B4",
    "\uFFAF"=>"\u11B5",
    "\uFFB0"=>"\u111A",
    "\uFFB1"=>"\u1106",
    "\uFFB2"=>"\u1107",
    "\uFFB3"=>"\u1108",
    "\uFFB4"=>"\u1121",
    "\uFFB5"=>"\u1109",
    "\uFFB6"=>"\u110A",
    "\uFFB7"=>"\u110B",
    "\uFFB8"=>"\u110C",
    "\uFFB9"=>"\u110D",
    "\uFFBA"=>"\u110E",
    "\uFFBB"=>"\u110F",
    "\uFFBC"=>"\u1110",
    "\uFFBD"=>"\u1111",
    "\uFFBE"=>"\u1112",
    "\uFFC2"=>"\u1161",
    "\uFFC3"=>"\u1162",
    "\uFFC4"=>"\u1163",
    "\uFFC5"=>"\u1164",
    "\uFFC6"=>"\u1165",
    "\uFFC7"=>"\u1166",
    "\uFFCA"=>"\u1167",
    "\uFFCB"=>"\u1168",
    "\uFFCC"=>"\u1169",
    "\uFFCD"=>"\u116A",
    "\uFFCE"=>"\u116B",
    "\uFFCF"=>"\u116C",
    "\uFFD2"=>"\u116D",
    "\uFFD3"=>"\u116E",
    "\uFFD4"=>"\u116F",
    "\uFFD5"=>"\u1170",
    "\uFFD6"=>"\u1171",
    "\uFFD7"=>"\u1172",
    "\uFFDA"=>"\u1173",
    "\uFFDB"=>"\u1174",
    "\uFFDC"=>"\u1175",
    "\uFFE0"=>"\u00A2",
    "\uFFE1"=>"\u00A3",
    "\uFFE2"=>"\u00AC",
    "\uFFE3"=>" \u0304",
    "\uFFE4"=>"\u00A6",
    "\uFFE5"=>"\u00A5",
    "\uFFE6"=>"\u20A9",
    "\uFFE8"=>"\u2502",
    "\uFFE9"=>"\u2190",
    "\uFFEA"=>"\u2191",
    "\uFFEB"=>"\u2192",
    "\uFFEC"=>"\u2193",
    "\uFFED"=>"\u25A0",
    "\uFFEE"=>"\u25CB",
    "\u{10781}"=>"\u02D0",
    "\u{10782}"=>"\u02D1",
    "\u{10783}"=>"\u00E6",
    "\u{10784}"=>"\u0299",
    "\u{10785}"=>"\u0253",
    "\u{10787}"=>"\u02A3",
    "\u{10788}"=>"\uAB66",
    "\u{10789}"=>"\u02A5",
    "\u{1078A}"=>"\u02A4",
    "\u{1078B}"=>"\u0256",
    "\u{1078C}"=>"\u0257",
    "\u{1078D}"=>"\u1D91",
    "\u{1078E}"=>"\u0258",
    "\u{1078F}"=>"\u025E",
    "\u{10790}"=>"\u02A9",
    "\u{10791}"=>"\u0264",
    "\u{10792}"=>"\u0262",
    "\u{10793}"=>"\u0260",
    "\u{10794}"=>"\u029B",
    "\u{10795}"=>"\u0127",
    "\u{10796}"=>"\u029C",
    "\u{10797}"=>"\u0267",
    "\u{10798}"=>"\u0284",
    "\u{10799}"=>"\u02AA",
    "\u{1079A}"=>"\u02AB",
    "\u{1079B}"=>"\u026C",
    "\u{1079C}"=>"\u{1DF04}",
    "\u{1079D}"=>"\uA78E",
    "\u{1079E}"=>"\u026E",
    "\u{1079F}"=>"\u{1DF05}",
    "\u{107A0}"=>"\u028E",
    "\u{107A1}"=>"\u{1DF06}",
    "\u{107A2}"=>"\u00F8",
    "\u{107A3}"=>"\u0276",
    "\u{107A4}"=>"\u0277",
    "\u{107A5}"=>"q",
    "\u{107A6}"=>"\u027A",
    "\u{107A7}"=>"\u{1DF08}",
    "\u{107A8}"=>"\u027D",
    "\u{107A9}"=>"\u027E",
    "\u{107AA}"=>"\u0280",
    "\u{107AB}"=>"\u02A8",
    "\u{107AC}"=>"\u02A6",
    "\u{107AD}"=>"\uAB67",
    "\u{107AE}"=>"\u02A7",
    "\u{107AF}"=>"\u0288",
    "\u{107B0}"=>"\u2C71",
    "\u{107B2}"=>"\u028F",
    "\u{107B3}"=>"\u02A1",
    "\u{107B4}"=>"\u02A2",
    "\u{107B5}"=>"\u0298",
    "\u{107B6}"=>"\u01C0",
    "\u{107B7}"=>"\u01C1",
    "\u{107B8}"=>"\u01C2",
    "\u{107B9}"=>"\u{1DF0A}",
    "\u{107BA}"=>"\u{1DF1E}",
    "\u{1D400}"=>"A",
    "\u{1D401}"=>"B",
    "\u{1D402}"=>"C",
    "\u{1D403}"=>"D",
    "\u{1D404}"=>"E",
    "\u{1D405}"=>"F",
    "\u{1D406}"=>"G",
    "\u{1D407}"=>"H",
    "\u{1D408}"=>"I",
    "\u{1D409}"=>"J",
    "\u{1D40A}"=>"K",
    "\u{1D40B}"=>"L",
    "\u{1D40C}"=>"M",
    "\u{1D40D}"=>"N",
    "\u{1D40E}"=>"O",
    "\u{1D40F}"=>"P",
    "\u{1D410}"=>"Q",
    "\u{1D411}"=>"R",
    "\u{1D412}"=>"S",
    "\u{1D413}"=>"T",
    "\u{1D414}"=>"U",
    "\u{1D415}"=>"V",
    "\u{1D416}"=>"W",
    "\u{1D417}"=>"X",
    "\u{1D418}"=>"Y",
    "\u{1D419}"=>"Z",
    "\u{1D41A}"=>"a",
    "\u{1D41B}"=>"b",
    "\u{1D41C}"=>"c",
    "\u{1D41D}"=>"d",
    "\u{1D41E}"=>"e",
    "\u{1D41F}"=>"f",
    "\u{1D420}"=>"g",
    "\u{1D421}"=>"h",
    "\u{1D422}"=>"i",
    "\u{1D423}"=>"j",
    "\u{1D424}"=>"k",
    "\u{1D425}"=>"l",
    "\u{1D426}"=>"m",
    "\u{1D427}"=>"n",
    "\u{1D428}"=>"o",
    "\u{1D429}"=>"p",
    "\u{1D42A}"=>"q",
    "\u{1D42B}"=>"r",
    "\u{1D42C}"=>"s",
    "\u{1D42D}"=>"t",
    "\u{1D42E}"=>"u",
    "\u{1D42F}"=>"v",
    "\u{1D430}"=>"w",
    "\u{1D431}"=>"x",
    "\u{1D432}"=>"y",
    "\u{1D433}"=>"z",
    "\u{1D434}"=>"A",
    "\u{1D435}"=>"B",
    "\u{1D436}"=>"C",
    "\u{1D437}"=>"D",
    "\u{1D438}"=>"E",
    "\u{1D439}"=>"F",
    "\u{1D43A}"=>"G",
    "\u{1D43B}"=>"H",
    "\u{1D43C}"=>"I",
    "\u{1D43D}"=>"J",
    "\u{1D43E}"=>"K",
    "\u{1D43F}"=>"L",
    "\u{1D440}"=>"M",
    "\u{1D441}"=>"N",
    "\u{1D442}"=>"O",
    "\u{1D443}"=>"P",
    "\u{1D444}"=>"Q",
    "\u{1D445}"=>"R",
    "\u{1D446}"=>"S",
    "\u{1D447}"=>"T",
    "\u{1D448}"=>"U",
    "\u{1D449}"=>"V",
    "\u{1D44A}"=>"W",
    "\u{1D44B}"=>"X",
    "\u{1D44C}"=>"Y",
    "\u{1D44D}"=>"Z",
    "\u{1D44E}"=>"a",
    "\u{1D44F}"=>"b",
    "\u{1D450}"=>"c",
    "\u{1D451}"=>"d",
    "\u{1D452}"=>"e",
    "\u{1D453}"=>"f",
    "\u{1D454}"=>"g",
    "\u{1D456}"=>"i",
    "\u{1D457}"=>"j",
    "\u{1D458}"=>"k",
    "\u{1D459}"=>"l",
    "\u{1D45A}"=>"m",
    "\u{1D45B}"=>"n",
    "\u{1D45C}"=>"o",
    "\u{1D45D}"=>"p",
    "\u{1D45E}"=>"q",
    "\u{1D45F}"=>"r",
    "\u{1D460}"=>"s",
    "\u{1D461}"=>"t",
    "\u{1D462}"=>"u",
    "\u{1D463}"=>"v",
    "\u{1D464}"=>"w",
    "\u{1D465}"=>"x",
    "\u{1D466}"=>"y",
    "\u{1D467}"=>"z",
    "\u{1D468}"=>"A",
    "\u{1D469}"=>"B",
    "\u{1D46A}"=>"C",
    "\u{1D46B}"=>"D",
    "\u{1D46C}"=>"E",
    "\u{1D46D}"=>"F",
    "\u{1D46E}"=>"G",
    "\u{1D46F}"=>"H",
    "\u{1D470}"=>"I",
    "\u{1D471}"=>"J",
    "\u{1D472}"=>"K",
    "\u{1D473}"=>"L",
    "\u{1D474}"=>"M",
    "\u{1D475}"=>"N",
    "\u{1D476}"=>"O",
    "\u{1D477}"=>"P",
    "\u{1D478}"=>"Q",
    "\u{1D479}"=>"R",
    "\u{1D47A}"=>"S",
    "\u{1D47B}"=>"T",
    "\u{1D47C}"=>"U",
    "\u{1D47D}"=>"V",
    "\u{1D47E}"=>"W",
    "\u{1D47F}"=>"X",
    "\u{1D480}"=>"Y",
    "\u{1D481}"=>"Z",
    "\u{1D482}"=>"a",
    "\u{1D483}"=>"b",
    "\u{1D484}"=>"c",
    "\u{1D485}"=>"d",
    "\u{1D486}"=>"e",
    "\u{1D487}"=>"f",
    "\u{1D488}"=>"g",
    "\u{1D489}"=>"h",
    "\u{1D48A}"=>"i",
    "\u{1D48B}"=>"j",
    "\u{1D48C}"=>"k",
    "\u{1D48D}"=>"l",
    "\u{1D48E}"=>"m",
    "\u{1D48F}"=>"n",
    "\u{1D490}"=>"o",
    "\u{1D491}"=>"p",
    "\u{1D492}"=>"q",
    "\u{1D493}"=>"r",
    "\u{1D494}"=>"s",
    "\u{1D495}"=>"t",
    "\u{1D496}"=>"u",
    "\u{1D497}"=>"v",
    "\u{1D498}"=>"w",
    "\u{1D499}"=>"x",
    "\u{1D49A}"=>"y",
    "\u{1D49B}"=>"z",
    "\u{1D49C}"=>"A",
    "\u{1D49E}"=>"C",
    "\u{1D49F}"=>"D",
    "\u{1D4A2}"=>"G",
    "\u{1D4A5}"=>"J",
    "\u{1D4A6}"=>"K",
    "\u{1D4A9}"=>"N",
    "\u{1D4AA}"=>"O",
    "\u{1D4AB}"=>"P",
    "\u{1D4AC}"=>"Q",
    "\u{1D4AE}"=>"S",
    "\u{1D4AF}"=>"T",
    "\u{1D4B0}"=>"U",
    "\u{1D4B1}"=>"V",
    "\u{1D4B2}"=>"W",
    "\u{1D4B3}"=>"X",
    "\u{1D4B4}"=>"Y",
    "\u{1D4B5}"=>"Z",
    "\u{1D4B6}"=>"a",
    "\u{1D4B7}"=>"b",
    "\u{1D4B8}"=>"c",
    "\u{1D4B9}"=>"d",
    "\u{1D4BB}"=>"f",
    "\u{1D4BD}"=>"h",
    "\u{1D4BE}"=>"i",
    "\u{1D4BF}"=>"j",
    "\u{1D4C0}"=>"k",
    "\u{1D4C1}"=>"l",
    "\u{1D4C2}"=>"m",
    "\u{1D4C3}"=>"n",
    "\u{1D4C5}"=>"p",
    "\u{1D4C6}"=>"q",
    "\u{1D4C7}"=>"r",
    "\u{1D4C8}"=>"s",
    "\u{1D4C9}"=>"t",
    "\u{1D4CA}"=>"u",
    "\u{1D4CB}"=>"v",
    "\u{1D4CC}"=>"w",
    "\u{1D4CD}"=>"x",
    "\u{1D4CE}"=>"y",
    "\u{1D4CF}"=>"z",
    "\u{1D4D0}"=>"A",
    "\u{1D4D1}"=>"B",
    "\u{1D4D2}"=>"C",
    "\u{1D4D3}"=>"D",
    "\u{1D4D4}"=>"E",
    "\u{1D4D5}"=>"F",
    "\u{1D4D6}"=>"G",
    "\u{1D4D7}"=>"H",
    "\u{1D4D8}"=>"I",
    "\u{1D4D9}"=>"J",
    "\u{1D4DA}"=>"K",
    "\u{1D4DB}"=>"L",
    "\u{1D4DC}"=>"M",
    "\u{1D4DD}"=>"N",
    "\u{1D4DE}"=>"O",
    "\u{1D4DF}"=>"P",
    "\u{1D4E0}"=>"Q",
    "\u{1D4E1}"=>"R",
    "\u{1D4E2}"=>"S",
    "\u{1D4E3}"=>"T",
    "\u{1D4E4}"=>"U",
    "\u{1D4E5}"=>"V",
    "\u{1D4E6}"=>"W",
    "\u{1D4E7}"=>"X",
    "\u{1D4E8}"=>"Y",
    "\u{1D4E9}"=>"Z",
    "\u{1D4EA}"=>"a",
    "\u{1D4EB}"=>"b",
    "\u{1D4EC}"=>"c",
    "\u{1D4ED}"=>"d",
    "\u{1D4EE}"=>"e",
    "\u{1D4EF}"=>"f",
    "\u{1D4F0}"=>"g",
    "\u{1D4F1}"=>"h",
    "\u{1D4F2}"=>"i",
    "\u{1D4F3}"=>"j",
    "\u{1D4F4}"=>"k",
    "\u{1D4F5}"=>"l",
    "\u{1D4F6}"=>"m",
    "\u{1D4F7}"=>"n",
    "\u{1D4F8}"=>"o",
    "\u{1D4F9}"=>"p",
    "\u{1D4FA}"=>"q",
    "\u{1D4FB}"=>"r",
    "\u{1D4FC}"=>"s",
    "\u{1D4FD}"=>"t",
    "\u{1D4FE}"=>"u",
    "\u{1D4FF}"=>"v",
    "\u{1D500}"=>"w",
    "\u{1D501}"=>"x",
    "\u{1D502}"=>"y",
    "\u{1D503}"=>"z",
    "\u{1D504}"=>"A",
    "\u{1D505}"=>"B",
    "\u{1D507}"=>"D",
    "\u{1D508}"=>"E",
    "\u{1D509}"=>"F",
    "\u{1D50A}"=>"G",
    "\u{1D50D}"=>"J",
    "\u{1D50E}"=>"K",
    "\u{1D50F}"=>"L",
    "\u{1D510}"=>"M",
    "\u{1D511}"=>"N",
    "\u{1D512}"=>"O",
    "\u{1D513}"=>"P",
    "\u{1D514}"=>"Q",
    "\u{1D516}"=>"S",
    "\u{1D517}"=>"T",
    "\u{1D518}"=>"U",
    "\u{1D519}"=>"V",
    "\u{1D51A}"=>"W",
    "\u{1D51B}"=>"X",
    "\u{1D51C}"=>"Y",
    "\u{1D51E}"=>"a",
    "\u{1D51F}"=>"b",
    "\u{1D520}"=>"c",
    "\u{1D521}"=>"d",
    "\u{1D522}"=>"e",
    "\u{1D523}"=>"f",
    "\u{1D524}"=>"g",
    "\u{1D525}"=>"h",
    "\u{1D526}"=>"i",
    "\u{1D527}"=>"j",
    "\u{1D528}"=>"k",
    "\u{1D529}"=>"l",
    "\u{1D52A}"=>"m",
    "\u{1D52B}"=>"n",
    "\u{1D52C}"=>"o",
    "\u{1D52D}"=>"p",
    "\u{1D52E}"=>"q",
    "\u{1D52F}"=>"r",
    "\u{1D530}"=>"s",
    "\u{1D531}"=>"t",
    "\u{1D532}"=>"u",
    "\u{1D533}"=>"v",
    "\u{1D534}"=>"w",
    "\u{1D535}"=>"x",
    "\u{1D536}"=>"y",
    "\u{1D537}"=>"z",
    "\u{1D538}"=>"A",
    "\u{1D539}"=>"B",
    "\u{1D53B}"=>"D",
    "\u{1D53C}"=>"E",
    "\u{1D53D}"=>"F",
    "\u{1D53E}"=>"G",
    "\u{1D540}"=>"I",
    "\u{1D541}"=>"J",
    "\u{1D542}"=>"K",
    "\u{1D543}"=>"L",
    "\u{1D544}"=>"M",
    "\u{1D546}"=>"O",
    "\u{1D54A}"=>"S",
    "\u{1D54B}"=>"T",
    "\u{1D54C}"=>"U",
    "\u{1D54D}"=>"V",
    "\u{1D54E}"=>"W",
    "\u{1D54F}"=>"X",
    "\u{1D550}"=>"Y",
    "\u{1D552}"=>"a",
    "\u{1D553}"=>"b",
    "\u{1D554}"=>"c",
    "\u{1D555}"=>"d",
    "\u{1D556}"=>"e",
    "\u{1D557}"=>"f",
    "\u{1D558}"=>"g",
    "\u{1D559}"=>"h",
    "\u{1D55A}"=>"i",
    "\u{1D55B}"=>"j",
    "\u{1D55C}"=>"k",
    "\u{1D55D}"=>"l",
    "\u{1D55E}"=>"m",
    "\u{1D55F}"=>"n",
    "\u{1D560}"=>"o",
    "\u{1D561}"=>"p",
    "\u{1D562}"=>"q",
    "\u{1D563}"=>"r",
    "\u{1D564}"=>"s",
    "\u{1D565}"=>"t",
    "\u{1D566}"=>"u",
    "\u{1D567}"=>"v",
    "\u{1D568}"=>"w",
    "\u{1D569}"=>"x",
    "\u{1D56A}"=>"y",
    "\u{1D56B}"=>"z",
    "\u{1D56C}"=>"A",
    "\u{1D56D}"=>"B",
    "\u{1D56E}"=>"C",
    "\u{1D56F}"=>"D",
    "\u{1D570}"=>"E",
    "\u{1D571}"=>"F",
    "\u{1D572}"=>"G",
    "\u{1D573}"=>"H",
    "\u{1D574}"=>"I",
    "\u{1D575}"=>"J",
    "\u{1D576}"=>"K",
    "\u{1D577}"=>"L",
    "\u{1D578}"=>"M",
    "\u{1D579}"=>"N",
    "\u{1D57A}"=>"O",
    "\u{1D57B}"=>"P",
    "\u{1D57C}"=>"Q",
    "\u{1D57D}"=>"R",
    "\u{1D57E}"=>"S",
    "\u{1D57F}"=>"T",
    "\u{1D580}"=>"U",
    "\u{1D581}"=>"V",
    "\u{1D582}"=>"W",
    "\u{1D583}"=>"X",
    "\u{1D584}"=>"Y",
    "\u{1D585}"=>"Z",
    "\u{1D586}"=>"a",
    "\u{1D587}"=>"b",
    "\u{1D588}"=>"c",
    "\u{1D589}"=>"d",
    "\u{1D58A}"=>"e",
    "\u{1D58B}"=>"f",
    "\u{1D58C}"=>"g",
    "\u{1D58D}"=>"h",
    "\u{1D58E}"=>"i",
    "\u{1D58F}"=>"j",
    "\u{1D590}"=>"k",
    "\u{1D591}"=>"l",
    "\u{1D592}"=>"m",
    "\u{1D593}"=>"n",
    "\u{1D594}"=>"o",
    "\u{1D595}"=>"p",
    "\u{1D596}"=>"q",
    "\u{1D597}"=>"r",
    "\u{1D598}"=>"s",
    "\u{1D599}"=>"t",
    "\u{1D59A}"=>"u",
    "\u{1D59B}"=>"v",
    "\u{1D59C}"=>"w",
    "\u{1D59D}"=>"x",
    "\u{1D59E}"=>"y",
    "\u{1D59F}"=>"z",
    "\u{1D5A0}"=>"A",
    "\u{1D5A1}"=>"B",
    "\u{1D5A2}"=>"C",
    "\u{1D5A3}"=>"D",
    "\u{1D5A4}"=>"E",
    "\u{1D5A5}"=>"F",
    "\u{1D5A6}"=>"G",
    "\u{1D5A7}"=>"H",
    "\u{1D5A8}"=>"I",
    "\u{1D5A9}"=>"J",
    "\u{1D5AA}"=>"K",
    "\u{1D5AB}"=>"L",
    "\u{1D5AC}"=>"M",
    "\u{1D5AD}"=>"N",
    "\u{1D5AE}"=>"O",
    "\u{1D5AF}"=>"P",
    "\u{1D5B0}"=>"Q",
    "\u{1D5B1}"=>"R",
    "\u{1D5B2}"=>"S",
    "\u{1D5B3}"=>"T",
    "\u{1D5B4}"=>"U",
    "\u{1D5B5}"=>"V",
    "\u{1D5B6}"=>"W",
    "\u{1D5B7}"=>"X",
    "\u{1D5B8}"=>"Y",
    "\u{1D5B9}"=>"Z",
    "\u{1D5BA}"=>"a",
    "\u{1D5BB}"=>"b",
    "\u{1D5BC}"=>"c",
    "\u{1D5BD}"=>"d",
    "\u{1D5BE}"=>"e",
    "\u{1D5BF}"=>"f",
    "\u{1D5C0}"=>"g",
    "\u{1D5C1}"=>"h",
    "\u{1D5C2}"=>"i",
    "\u{1D5C3}"=>"j",
    "\u{1D5C4}"=>"k",
    "\u{1D5C5}"=>"l",
    "\u{1D5C6}"=>"m",
    "\u{1D5C7}"=>"n",
    "\u{1D5C8}"=>"o",
    "\u{1D5C9}"=>"p",
    "\u{1D5CA}"=>"q",
    "\u{1D5CB}"=>"r",
    "\u{1D5CC}"=>"s",
    "\u{1D5CD}"=>"t",
    "\u{1D5CE}"=>"u",
    "\u{1D5CF}"=>"v",
    "\u{1D5D0}"=>"w",
    "\u{1D5D1}"=>"x",
    "\u{1D5D2}"=>"y",
    "\u{1D5D3}"=>"z",
    "\u{1D5D4}"=>"A",
    "\u{1D5D5}"=>"B",
    "\u{1D5D6}"=>"C",
    "\u{1D5D7}"=>"D",
    "\u{1D5D8}"=>"E",
    "\u{1D5D9}"=>"F",
    "\u{1D5DA}"=>"G",
    "\u{1D5DB}"=>"H",
    "\u{1D5DC}"=>"I",
    "\u{1D5DD}"=>"J",
    "\u{1D5DE}"=>"K",
    "\u{1D5DF}"=>"L",
    "\u{1D5E0}"=>"M",
    "\u{1D5E1}"=>"N",
    "\u{1D5E2}"=>"O",
    "\u{1D5E3}"=>"P",
    "\u{1D5E4}"=>"Q",
    "\u{1D5E5}"=>"R",
    "\u{1D5E6}"=>"S",
    "\u{1D5E7}"=>"T",
    "\u{1D5E8}"=>"U",
    "\u{1D5E9}"=>"V",
    "\u{1D5EA}"=>"W",
    "\u{1D5EB}"=>"X",
    "\u{1D5EC}"=>"Y",
    "\u{1D5ED}"=>"Z",
    "\u{1D5EE}"=>"a",
    "\u{1D5EF}"=>"b",
    "\u{1D5F0}"=>"c",
    "\u{1D5F1}"=>"d",
    "\u{1D5F2}"=>"e",
    "\u{1D5F3}"=>"f",
    "\u{1D5F4}"=>"g",
    "\u{1D5F5}"=>"h",
    "\u{1D5F6}"=>"i",
    "\u{1D5F7}"=>"j",
    "\u{1D5F8}"=>"k",
    "\u{1D5F9}"=>"l",
    "\u{1D5FA}"=>"m",
    "\u{1D5FB}"=>"n",
    "\u{1D5FC}"=>"o",
    "\u{1D5FD}"=>"p",
    "\u{1D5FE}"=>"q",
    "\u{1D5FF}"=>"r",
    "\u{1D600}"=>"s",
    "\u{1D601}"=>"t",
    "\u{1D602}"=>"u",
    "\u{1D603}"=>"v",
    "\u{1D604}"=>"w",
    "\u{1D605}"=>"x",
    "\u{1D606}"=>"y",
    "\u{1D607}"=>"z",
    "\u{1D608}"=>"A",
    "\u{1D609}"=>"B",
    "\u{1D60A}"=>"C",
    "\u{1D60B}"=>"D",
    "\u{1D60C}"=>"E",
    "\u{1D60D}"=>"F",
    "\u{1D60E}"=>"G",
    "\u{1D60F}"=>"H",
    "\u{1D610}"=>"I",
    "\u{1D611}"=>"J",
    "\u{1D612}"=>"K",
    "\u{1D613}"=>"L",
    "\u{1D614}"=>"M",
    "\u{1D615}"=>"N",
    "\u{1D616}"=>"O",
    "\u{1D617}"=>"P",
    "\u{1D618}"=>"Q",
    "\u{1D619}"=>"R",
    "\u{1D61A}"=>"S",
    "\u{1D61B}"=>"T",
    "\u{1D61C}"=>"U",
    "\u{1D61D}"=>"V",
    "\u{1D61E}"=>"W",
    "\u{1D61F}"=>"X",
    "\u{1D620}"=>"Y",
    "\u{1D621}"=>"Z",
    "\u{1D622}"=>"a",
    "\u{1D623}"=>"b",
    "\u{1D624}"=>"c",
    "\u{1D625}"=>"d",
    "\u{1D626}"=>"e",
    "\u{1D627}"=>"f",
    "\u{1D628}"=>"g",
    "\u{1D629}"=>"h",
    "\u{1D62A}"=>"i",
    "\u{1D62B}"=>"j",
    "\u{1D62C}"=>"k",
    "\u{1D62D}"=>"l",
    "\u{1D62E}"=>"m",
    "\u{1D62F}"=>"n",
    "\u{1D630}"=>"o",
    "\u{1D631}"=>"p",
    "\u{1D632}"=>"q",
    "\u{1D633}"=>"r",
    "\u{1D634}"=>"s",
    "\u{1D635}"=>"t",
    "\u{1D636}"=>"u",
    "\u{1D637}"=>"v",
    "\u{1D638}"=>"w",
    "\u{1D639}"=>"x",
    "\u{1D63A}"=>"y",
    "\u{1D63B}"=>"z",
    "\u{1D63C}"=>"A",
    "\u{1D63D}"=>"B",
    "\u{1D63E}"=>"C",
    "\u{1D63F}"=>"D",
    "\u{1D640}"=>"E",
    "\u{1D641}"=>"F",
    "\u{1D642}"=>"G",
    "\u{1D643}"=>"H",
    "\u{1D644}"=>"I",
    "\u{1D645}"=>"J",
    "\u{1D646}"=>"K",
    "\u{1D647}"=>"L",
    "\u{1D648}"=>"M",
    "\u{1D649}"=>"N",
    "\u{1D64A}"=>"O",
    "\u{1D64B}"=>"P",
    "\u{1D64C}"=>"Q",
    "\u{1D64D}"=>"R",
    "\u{1D64E}"=>"S",
    "\u{1D64F}"=>"T",
    "\u{1D650}"=>"U",
    "\u{1D651}"=>"V",
    "\u{1D652}"=>"W",
    "\u{1D653}"=>"X",
    "\u{1D654}"=>"Y",
    "\u{1D655}"=>"Z",
    "\u{1D656}"=>"a",
    "\u{1D657}"=>"b",
    "\u{1D658}"=>"c",
    "\u{1D659}"=>"d",
    "\u{1D65A}"=>"e",
    "\u{1D65B}"=>"f",
    "\u{1D65C}"=>"g",
    "\u{1D65D}"=>"h",
    "\u{1D65E}"=>"i",
    "\u{1D65F}"=>"j",
    "\u{1D660}"=>"k",
    "\u{1D661}"=>"l",
    "\u{1D662}"=>"m",
    "\u{1D663}"=>"n",
    "\u{1D664}"=>"o",
    "\u{1D665}"=>"p",
    "\u{1D666}"=>"q",
    "\u{1D667}"=>"r",
    "\u{1D668}"=>"s",
    "\u{1D669}"=>"t",
    "\u{1D66A}"=>"u",
    "\u{1D66B}"=>"v",
    "\u{1D66C}"=>"w",
    "\u{1D66D}"=>"x",
    "\u{1D66E}"=>"y",
    "\u{1D66F}"=>"z",
    "\u{1D670}"=>"A",
    "\u{1D671}"=>"B",
    "\u{1D672}"=>"C",
    "\u{1D673}"=>"D",
    "\u{1D674}"=>"E",
    "\u{1D675}"=>"F",
    "\u{1D676}"=>"G",
    "\u{1D677}"=>"H",
    "\u{1D678}"=>"I",
    "\u{1D679}"=>"J",
    "\u{1D67A}"=>"K",
    "\u{1D67B}"=>"L",
    "\u{1D67C}"=>"M",
    "\u{1D67D}"=>"N",
    "\u{1D67E}"=>"O",
    "\u{1D67F}"=>"P",
    "\u{1D680}"=>"Q",
    "\u{1D681}"=>"R",
    "\u{1D682}"=>"S",
    "\u{1D683}"=>"T",
    "\u{1D684}"=>"U",
    "\u{1D685}"=>"V",
    "\u{1D686}"=>"W",
    "\u{1D687}"=>"X",
    "\u{1D688}"=>"Y",
    "\u{1D689}"=>"Z",
    "\u{1D68A}"=>"a",
    "\u{1D68B}"=>"b",
    "\u{1D68C}"=>"c",
    "\u{1D68D}"=>"d",
    "\u{1D68E}"=>"e",
    "\u{1D68F}"=>"f",
    "\u{1D690}"=>"g",
    "\u{1D691}"=>"h",
    "\u{1D692}"=>"i",
    "\u{1D693}"=>"j",
    "\u{1D694}"=>"k",
    "\u{1D695}"=>"l",
    "\u{1D696}"=>"m",
    "\u{1D697}"=>"n",
    "\u{1D698}"=>"o",
    "\u{1D699}"=>"p",
    "\u{1D69A}"=>"q",
    "\u{1D69B}"=>"r",
    "\u{1D69C}"=>"s",
    "\u{1D69D}"=>"t",
    "\u{1D69E}"=>"u",
    "\u{1D69F}"=>"v",
    "\u{1D6A0}"=>"w",
    "\u{1D6A1}"=>"x",
    "\u{1D6A2}"=>"y",
    "\u{1D6A3}"=>"z",
    "\u{1D6A4}"=>"\u0131",
    "\u{1D6A5}"=>"\u0237",
    "\u{1D6A8}"=>"\u0391",
    "\u{1D6A9}"=>"\u0392",
    "\u{1D6AA}"=>"\u0393",
    "\u{1D6AB}"=>"\u0394",
    "\u{1D6AC}"=>"\u0395",
    "\u{1D6AD}"=>"\u0396",
    "\u{1D6AE}"=>"\u0397",
    "\u{1D6AF}"=>"\u0398",
    "\u{1D6B0}"=>"\u0399",
    "\u{1D6B1}"=>"\u039A",
    "\u{1D6B2}"=>"\u039B",
    "\u{1D6B3}"=>"\u039C",
    "\u{1D6B4}"=>"\u039D",
    "\u{1D6B5}"=>"\u039E",
    "\u{1D6B6}"=>"\u039F",
    "\u{1D6B7}"=>"\u03A0",
    "\u{1D6B8}"=>"\u03A1",
    "\u{1D6B9}"=>"\u0398",
    "\u{1D6BA}"=>"\u03A3",
    "\u{1D6BB}"=>"\u03A4",
    "\u{1D6BC}"=>"\u03A5",
    "\u{1D6BD}"=>"\u03A6",
    "\u{1D6BE}"=>"\u03A7",
    "\u{1D6BF}"=>"\u03A8",
    "\u{1D6C0}"=>"\u03A9",
    "\u{1D6C1}"=>"\u2207",
    "\u{1D6C2}"=>"\u03B1",
    "\u{1D6C3}"=>"\u03B2",
    "\u{1D6C4}"=>"\u03B3",
    "\u{1D6C5}"=>"\u03B4",
    "\u{1D6C6}"=>"\u03B5",
    "\u{1D6C7}"=>"\u03B6",
    "\u{1D6C8}"=>"\u03B7",
    "\u{1D6C9}"=>"\u03B8",
    "\u{1D6CA}"=>"\u03B9",
    "\u{1D6CB}"=>"\u03BA",
    "\u{1D6CC}"=>"\u03BB",
    "\u{1D6CD}"=>"\u03BC",
    "\u{1D6CE}"=>"\u03BD",
    "\u{1D6CF}"=>"\u03BE",
    "\u{1D6D0}"=>"\u03BF",
    "\u{1D6D1}"=>"\u03C0",
    "\u{1D6D2}"=>"\u03C1",
    "\u{1D6D3}"=>"\u03C2",
    "\u{1D6D4}"=>"\u03C3",
    "\u{1D6D5}"=>"\u03C4",
    "\u{1D6D6}"=>"\u03C5",
    "\u{1D6D7}"=>"\u03C6",
    "\u{1D6D8}"=>"\u03C7",
    "\u{1D6D9}"=>"\u03C8",
    "\u{1D6DA}"=>"\u03C9",
    "\u{1D6DB}"=>"\u2202",
    "\u{1D6DC}"=>"\u03B5",
    "\u{1D6DD}"=>"\u03B8",
    "\u{1D6DE}"=>"\u03BA",
    "\u{1D6DF}"=>"\u03C6",
    "\u{1D6E0}"=>"\u03C1",
    "\u{1D6E1}"=>"\u03C0",
    "\u{1D6E2}"=>"\u0391",
    "\u{1D6E3}"=>"\u0392",
    "\u{1D6E4}"=>"\u0393",
    "\u{1D6E5}"=>"\u0394",
    "\u{1D6E6}"=>"\u0395",
    "\u{1D6E7}"=>"\u0396",
    "\u{1D6E8}"=>"\u0397",
    "\u{1D6E9}"=>"\u0398",
    "\u{1D6EA}"=>"\u0399",
    "\u{1D6EB}"=>"\u039A",
    "\u{1D6EC}"=>"\u039B",
    "\u{1D6ED}"=>"\u039C",
    "\u{1D6EE}"=>"\u039D",
    "\u{1D6EF}"=>"\u039E",
    "\u{1D6F0}"=>"\u039F",
    "\u{1D6F1}"=>"\u03A0",
    "\u{1D6F2}"=>"\u03A1",
    "\u{1D6F3}"=>"\u0398",
    "\u{1D6F4}"=>"\u03A3",
    "\u{1D6F5}"=>"\u03A4",
    "\u{1D6F6}"=>"\u03A5",
    "\u{1D6F7}"=>"\u03A6",
    "\u{1D6F8}"=>"\u03A7",
    "\u{1D6F9}"=>"\u03A8",
    "\u{1D6FA}"=>"\u03A9",
    "\u{1D6FB}"=>"\u2207",
    "\u{1D6FC}"=>"\u03B1",
    "\u{1D6FD}"=>"\u03B2",
    "\u{1D6FE}"=>"\u03B3",
    "\u{1D6FF}"=>"\u03B4",
    "\u{1D700}"=>"\u03B5",
    "\u{1D701}"=>"\u03B6",
    "\u{1D702}"=>"\u03B7",
    "\u{1D703}"=>"\u03B8",
    "\u{1D704}"=>"\u03B9",
    "\u{1D705}"=>"\u03BA",
    "\u{1D706}"=>"\u03BB",
    "\u{1D707}"=>"\u03BC",
    "\u{1D708}"=>"\u03BD",
    "\u{1D709}"=>"\u03BE",
    "\u{1D70A}"=>"\u03BF",
    "\u{1D70B}"=>"\u03C0",
    "\u{1D70C}"=>"\u03C1",
    "\u{1D70D}"=>"\u03C2",
    "\u{1D70E}"=>"\u03C3",
    "\u{1D70F}"=>"\u03C4",
    "\u{1D710}"=>"\u03C5",
    "\u{1D711}"=>"\u03C6",
    "\u{1D712}"=>"\u03C7",
    "\u{1D713}"=>"\u03C8",
    "\u{1D714}"=>"\u03C9",
    "\u{1D715}"=>"\u2202",
    "\u{1D716}"=>"\u03B5",
    "\u{1D717}"=>"\u03B8",
    "\u{1D718}"=>"\u03BA",
    "\u{1D719}"=>"\u03C6",
    "\u{1D71A}"=>"\u03C1",
    "\u{1D71B}"=>"\u03C0",
    "\u{1D71C}"=>"\u0391",
    "\u{1D71D}"=>"\u0392",
    "\u{1D71E}"=>"\u0393",
    "\u{1D71F}"=>"\u0394",
    "\u{1D720}"=>"\u0395",
    "\u{1D721}"=>"\u0396",
    "\u{1D722}"=>"\u0397",
    "\u{1D723}"=>"\u0398",
    "\u{1D724}"=>"\u0399",
    "\u{1D725}"=>"\u039A",
    "\u{1D726}"=>"\u039B",
    "\u{1D727}"=>"\u039C",
    "\u{1D728}"=>"\u039D",
    "\u{1D729}"=>"\u039E",
    "\u{1D72A}"=>"\u039F",
    "\u{1D72B}"=>"\u03A0",
    "\u{1D72C}"=>"\u03A1",
    "\u{1D72D}"=>"\u0398",
    "\u{1D72E}"=>"\u03A3",
    "\u{1D72F}"=>"\u03A4",
    "\u{1D730}"=>"\u03A5",
    "\u{1D731}"=>"\u03A6",
    "\u{1D732}"=>"\u03A7",
    "\u{1D733}"=>"\u03A8",
    "\u{1D734}"=>"\u03A9",
    "\u{1D735}"=>"\u2207",
    "\u{1D736}"=>"\u03B1",
    "\u{1D737}"=>"\u03B2",
    "\u{1D738}"=>"\u03B3",
    "\u{1D739}"=>"\u03B4",
    "\u{1D73A}"=>"\u03B5",
    "\u{1D73B}"=>"\u03B6",
    "\u{1D73C}"=>"\u03B7",
    "\u{1D73D}"=>"\u03B8",
    "\u{1D73E}"=>"\u03B9",
    "\u{1D73F}"=>"\u03BA",
    "\u{1D740}"=>"\u03BB",
    "\u{1D741}"=>"\u03BC",
    "\u{1D742}"=>"\u03BD",
    "\u{1D743}"=>"\u03BE",
    "\u{1D744}"=>"\u03BF",
    "\u{1D745}"=>"\u03C0",
    "\u{1D746}"=>"\u03C1",
    "\u{1D747}"=>"\u03C2",
    "\u{1D748}"=>"\u03C3",
    "\u{1D749}"=>"\u03C4",
    "\u{1D74A}"=>"\u03C5",
    "\u{1D74B}"=>"\u03C6",
    "\u{1D74C}"=>"\u03C7",
    "\u{1D74D}"=>"\u03C8",
    "\u{1D74E}"=>"\u03C9",
    "\u{1D74F}"=>"\u2202",
    "\u{1D750}"=>"\u03B5",
    "\u{1D751}"=>"\u03B8",
    "\u{1D752}"=>"\u03BA",
    "\u{1D753}"=>"\u03C6",
    "\u{1D754}"=>"\u03C1",
    "\u{1D755}"=>"\u03C0",
    "\u{1D756}"=>"\u0391",
    "\u{1D757}"=>"\u0392",
    "\u{1D758}"=>"\u0393",
    "\u{1D759}"=>"\u0394",
    "\u{1D75A}"=>"\u0395",
    "\u{1D75B}"=>"\u0396",
    "\u{1D75C}"=>"\u0397",
    "\u{1D75D}"=>"\u0398",
    "\u{1D75E}"=>"\u0399",
    "\u{1D75F}"=>"\u039A",
    "\u{1D760}"=>"\u039B",
    "\u{1D761}"=>"\u039C",
    "\u{1D762}"=>"\u039D",
    "\u{1D763}"=>"\u039E",
    "\u{1D764}"=>"\u039F",
    "\u{1D765}"=>"\u03A0",
    "\u{1D766}"=>"\u03A1",
    "\u{1D767}"=>"\u0398",
    "\u{1D768}"=>"\u03A3",
    "\u{1D769}"=>"\u03A4",
    "\u{1D76A}"=>"\u03A5",
    "\u{1D76B}"=>"\u03A6",
    "\u{1D76C}"=>"\u03A7",
    "\u{1D76D}"=>"\u03A8",
    "\u{1D76E}"=>"\u03A9",
    "\u{1D76F}"=>"\u2207",
    "\u{1D770}"=>"\u03B1",
    "\u{1D771}"=>"\u03B2",
    "\u{1D772}"=>"\u03B3",
    "\u{1D773}"=>"\u03B4",
    "\u{1D774}"=>"\u03B5",
    "\u{1D775}"=>"\u03B6",
    "\u{1D776}"=>"\u03B7",
    "\u{1D777}"=>"\u03B8",
    "\u{1D778}"=>"\u03B9",
    "\u{1D779}"=>"\u03BA",
    "\u{1D77A}"=>"\u03BB",
    "\u{1D77B}"=>"\u03BC",
    "\u{1D77C}"=>"\u03BD",
    "\u{1D77D}"=>"\u03BE",
    "\u{1D77E}"=>"\u03BF",
    "\u{1D77F}"=>"\u03C0",
    "\u{1D780}"=>"\u03C1",
    "\u{1D781}"=>"\u03C2",
    "\u{1D782}"=>"\u03C3",
    "\u{1D783}"=>"\u03C4",
    "\u{1D784}"=>"\u03C5",
    "\u{1D785}"=>"\u03C6",
    "\u{1D786}"=>"\u03C7",
    "\u{1D787}"=>"\u03C8",
    "\u{1D788}"=>"\u03C9",
    "\u{1D789}"=>"\u2202",
    "\u{1D78A}"=>"\u03B5",
    "\u{1D78B}"=>"\u03B8",
    "\u{1D78C}"=>"\u03BA",
    "\u{1D78D}"=>"\u03C6",
    "\u{1D78E}"=>"\u03C1",
    "\u{1D78F}"=>"\u03C0",
    "\u{1D790}"=>"\u0391",
    "\u{1D791}"=>"\u0392",
    "\u{1D792}"=>"\u0393",
    "\u{1D793}"=>"\u0394",
    "\u{1D794}"=>"\u0395",
    "\u{1D795}"=>"\u0396",
    "\u{1D796}"=>"\u0397",
    "\u{1D797}"=>"\u0398",
    "\u{1D798}"=>"\u0399",
    "\u{1D799}"=>"\u039A",
    "\u{1D79A}"=>"\u039B",
    "\u{1D79B}"=>"\u039C",
    "\u{1D79C}"=>"\u039D",
    "\u{1D79D}"=>"\u039E",
    "\u{1D79E}"=>"\u039F",
    "\u{1D79F}"=>"\u03A0",
    "\u{1D7A0}"=>"\u03A1",
    "\u{1D7A1}"=>"\u0398",
    "\u{1D7A2}"=>"\u03A3",
    "\u{1D7A3}"=>"\u03A4",
    "\u{1D7A4}"=>"\u03A5",
    "\u{1D7A5}"=>"\u03A6",
    "\u{1D7A6}"=>"\u03A7",
    "\u{1D7A7}"=>"\u03A8",
    "\u{1D7A8}"=>"\u03A9",
    "\u{1D7A9}"=>"\u2207",
    "\u{1D7AA}"=>"\u03B1",
    "\u{1D7AB}"=>"\u03B2",
    "\u{1D7AC}"=>"\u03B3",
    "\u{1D7AD}"=>"\u03B4",
    "\u{1D7AE}"=>"\u03B5",
    "\u{1D7AF}"=>"\u03B6",
    "\u{1D7B0}"=>"\u03B7",
    "\u{1D7B1}"=>"\u03B8",
    "\u{1D7B2}"=>"\u03B9",
    "\u{1D7B3}"=>"\u03BA",
    "\u{1D7B4}"=>"\u03BB",
    "\u{1D7B5}"=>"\u03BC",
    "\u{1D7B6}"=>"\u03BD",
    "\u{1D7B7}"=>"\u03BE",
    "\u{1D7B8}"=>"\u03BF",
    "\u{1D7B9}"=>"\u03C0",
    "\u{1D7BA}"=>"\u03C1",
    "\u{1D7BB}"=>"\u03C2",
    "\u{1D7BC}"=>"\u03C3",
    "\u{1D7BD}"=>"\u03C4",
    "\u{1D7BE}"=>"\u03C5",
    "\u{1D7BF}"=>"\u03C6",
    "\u{1D7C0}"=>"\u03C7",
    "\u{1D7C1}"=>"\u03C8",
    "\u{1D7C2}"=>"\u03C9",
    "\u{1D7C3}"=>"\u2202",
    "\u{1D7C4}"=>"\u03B5",
    "\u{1D7C5}"=>"\u03B8",
    "\u{1D7C6}"=>"\u03BA",
    "\u{1D7C7}"=>"\u03C6",
    "\u{1D7C8}"=>"\u03C1",
    "\u{1D7C9}"=>"\u03C0",
    "\u{1D7CA}"=>"\u03DC",
    "\u{1D7CB}"=>"\u03DD",
    "\u{1D7CE}"=>"0",
    "\u{1D7CF}"=>"1",
    "\u{1D7D0}"=>"2",
    "\u{1D7D1}"=>"3",
    "\u{1D7D2}"=>"4",
    "\u{1D7D3}"=>"5",
    "\u{1D7D4}"=>"6",
    "\u{1D7D5}"=>"7",
    "\u{1D7D6}"=>"8",
    "\u{1D7D7}"=>"9",
    "\u{1D7D8}"=>"0",
    "\u{1D7D9}"=>"1",
    "\u{1D7DA}"=>"2",
    "\u{1D7DB}"=>"3",
    "\u{1D7DC}"=>"4",
    "\u{1D7DD}"=>"5",
    "\u{1D7DE}"=>"6",
    "\u{1D7DF}"=>"7",
    "\u{1D7E0}"=>"8",
    "\u{1D7E1}"=>"9",
    "\u{1D7E2}"=>"0",
    "\u{1D7E3}"=>"1",
    "\u{1D7E4}"=>"2",
    "\u{1D7E5}"=>"3",
    "\u{1D7E6}"=>"4",
    "\u{1D7E7}"=>"5",
    "\u{1D7E8}"=>"6",
    "\u{1D7E9}"=>"7",
    "\u{1D7EA}"=>"8",
    "\u{1D7EB}"=>"9",
    "\u{1D7EC}"=>"0",
    "\u{1D7ED}"=>"1",
    "\u{1D7EE}"=>"2",
    "\u{1D7EF}"=>"3",
    "\u{1D7F0}"=>"4",
    "\u{1D7F1}"=>"5",
    "\u{1D7F2}"=>"6",
    "\u{1D7F3}"=>"7",
    "\u{1D7F4}"=>"8",
    "\u{1D7F5}"=>"9",
    "\u{1D7F6}"=>"0",
    "\u{1D7F7}"=>"1",
    "\u{1D7F8}"=>"2",
    "\u{1D7F9}"=>"3",
    "\u{1D7FA}"=>"4",
    "\u{1D7FB}"=>"5",
    "\u{1D7FC}"=>"6",
    "\u{1D7FD}"=>"7",
    "\u{1D7FE}"=>"8",
    "\u{1D7FF}"=>"9",
    "\u{1E030}"=>"\u0430",
    "\u{1E031}"=>"\u0431",
    "\u{1E032}"=>"\u0432",
    "\u{1E033}"=>"\u0433",
    "\u{1E034}"=>"\u0434",
    "\u{1E035}"=>"\u0435",
    "\u{1E036}"=>"\u0436",
    "\u{1E037}"=>"\u0437",
    "\u{1E038}"=>"\u0438",
    "\u{1E039}"=>"\u043A",
    "\u{1E03A}"=>"\u043B",
    "\u{1E03B}"=>"\u043C",
    "\u{1E03C}"=>"\u043E",
    "\u{1E03D}"=>"\u043F",
    "\u{1E03E}"=>"\u0440",
    "\u{1E03F}"=>"\u0441",
    "\u{1E040}"=>"\u0442",
    "\u{1E041}"=>"\u0443",
    "\u{1E042}"=>"\u0444",
    "\u{1E043}"=>"\u0445",
    "\u{1E044}"=>"\u0446",
    "\u{1E045}"=>"\u0447",
    "\u{1E046}"=>"\u0448",
    "\u{1E047}"=>"\u044B",
    "\u{1E048}"=>"\u044D",
    "\u{1E049}"=>"\u044E",
    "\u{1E04A}"=>"\uA689",
    "\u{1E04B}"=>"\u04D9",
    "\u{1E04C}"=>"\u0456",
    "\u{1E04D}"=>"\u0458",
    "\u{1E04E}"=>"\u04E9",
    "\u{1E04F}"=>"\u04AF",
    "\u{1E050}"=>"\u04CF",
    "\u{1E051}"=>"\u0430",
    "\u{1E052}"=>"\u0431",
    "\u{1E053}"=>"\u0432",
    "\u{1E054}"=>"\u0433",
    "\u{1E055}"=>"\u0434",
    "\u{1E056}"=>"\u0435",
    "\u{1E057}"=>"\u0436",
    "\u{1E058}"=>"\u0437",
    "\u{1E059}"=>"\u0438",
    "\u{1E05A}"=>"\u043A",
    "\u{1E05B}"=>"\u043B",
    "\u{1E05C}"=>"\u043E",
    "\u{1E05D}"=>"\u043F",
    "\u{1E05E}"=>"\u0441",
    "\u{1E05F}"=>"\u0443",
    "\u{1E060}"=>"\u0444",
    "\u{1E061}"=>"\u0445",
    "\u{1E062}"=>"\u0446",
    "\u{1E063}"=>"\u0447",
    "\u{1E064}"=>"\u0448",
    "\u{1E065}"=>"\u044A",
    "\u{1E066}"=>"\u044B",
    "\u{1E067}"=>"\u0491",
    "\u{1E068}"=>"\u0456",
    "\u{1E069}"=>"\u0455",
    "\u{1E06A}"=>"\u045F",
    "\u{1E06B}"=>"\u04AB",
    "\u{1E06C}"=>"\uA651",
    "\u{1E06D}"=>"\u04B1",
    "\u{1EE00}"=>"\u0627",
    "\u{1EE01}"=>"\u0628",
    "\u{1EE02}"=>"\u062C",
    "\u{1EE03}"=>"\u062F",
    "\u{1EE05}"=>"\u0648",
    "\u{1EE06}"=>"\u0632",
    "\u{1EE07}"=>"\u062D",
    "\u{1EE08}"=>"\u0637",
    "\u{1EE09}"=>"\u064A",
    "\u{1EE0A}"=>"\u0643",
    "\u{1EE0B}"=>"\u0644",
    "\u{1EE0C}"=>"\u0645",
    "\u{1EE0D}"=>"\u0646",
    "\u{1EE0E}"=>"\u0633",
    "\u{1EE0F}"=>"\u0639",
    "\u{1EE10}"=>"\u0641",
    "\u{1EE11}"=>"\u0635",
    "\u{1EE12}"=>"\u0642",
    "\u{1EE13}"=>"\u0631",
    "\u{1EE14}"=>"\u0634",
    "\u{1EE15}"=>"\u062A",
    "\u{1EE16}"=>"\u062B",
    "\u{1EE17}"=>"\u062E",
    "\u{1EE18}"=>"\u0630",
    "\u{1EE19}"=>"\u0636",
    "\u{1EE1A}"=>"\u0638",
    "\u{1EE1B}"=>"\u063A",
    "\u{1EE1C}"=>"\u066E",
    "\u{1EE1D}"=>"\u06BA",
    "\u{1EE1E}"=>"\u06A1",
    "\u{1EE1F}"=>"\u066F",
    "\u{1EE21}"=>"\u0628",
    "\u{1EE22}"=>"\u062C",
    "\u{1EE24}"=>"\u0647",
    "\u{1EE27}"=>"\u062D",
    "\u{1EE29}"=>"\u064A",
    "\u{1EE2A}"=>"\u0643",
    "\u{1EE2B}"=>"\u0644",
    "\u{1EE2C}"=>"\u0645",
    "\u{1EE2D}"=>"\u0646",
    "\u{1EE2E}"=>"\u0633",
    "\u{1EE2F}"=>"\u0639",
    "\u{1EE30}"=>"\u0641",
    "\u{1EE31}"=>"\u0635",
    "\u{1EE32}"=>"\u0642",
    "\u{1EE34}"=>"\u0634",
    "\u{1EE35}"=>"\u062A",
    "\u{1EE36}"=>"\u062B",
    "\u{1EE37}"=>"\u062E",
    "\u{1EE39}"=>"\u0636",
    "\u{1EE3B}"=>"\u063A",
    "\u{1EE42}"=>"\u062C",
    "\u{1EE47}"=>"\u062D",
    "\u{1EE49}"=>"\u064A",
    "\u{1EE4B}"=>"\u0644",
    "\u{1EE4D}"=>"\u0646",
    "\u{1EE4E}"=>"\u0633",
    "\u{1EE4F}"=>"\u0639",
    "\u{1EE51}"=>"\u0635",
    "\u{1EE52}"=>"\u0642",
    "\u{1EE54}"=>"\u0634",
    "\u{1EE57}"=>"\u062E",
    "\u{1EE59}"=>"\u0636",
    "\u{1EE5B}"=>"\u063A",
    "\u{1EE5D}"=>"\u06BA",
    "\u{1EE5F}"=>"\u066F",
    "\u{1EE61}"=>"\u0628",
    "\u{1EE62}"=>"\u062C",
    "\u{1EE64}"=>"\u0647",
    "\u{1EE67}"=>"\u062D",
    "\u{1EE68}"=>"\u0637",
    "\u{1EE69}"=>"\u064A",
    "\u{1EE6A}"=>"\u0643",
    "\u{1EE6C}"=>"\u0645",
    "\u{1EE6D}"=>"\u0646",
    "\u{1EE6E}"=>"\u0633",
    "\u{1EE6F}"=>"\u0639",
    "\u{1EE70}"=>"\u0641",
    "\u{1EE71}"=>"\u0635",
    "\u{1EE72}"=>"\u0642",
    "\u{1EE74}"=>"\u0634",
    "\u{1EE75}"=>"\u062A",
    "\u{1EE76}"=>"\u062B",
    "\u{1EE77}"=>"\u062E",
    "\u{1EE79}"=>"\u0636",
    "\u{1EE7A}"=>"\u0638",
    "\u{1EE7B}"=>"\u063A",
    "\u{1EE7C}"=>"\u066E",
    "\u{1EE7E}"=>"\u06A1",
    "\u{1EE80}"=>"\u0627",
    "\u{1EE81}"=>"\u0628",
    "\u{1EE82}"=>"\u062C",
    "\u{1EE83}"=>"\u062F",
    "\u{1EE84}"=>"\u0647",
    "\u{1EE85}"=>"\u0648",
    "\u{1EE86}"=>"\u0632",
    "\u{1EE87}"=>"\u062D",
    "\u{1EE88}"=>"\u0637",
    "\u{1EE89}"=>"\u064A",
    "\u{1EE8B}"=>"\u0644",
    "\u{1EE8C}"=>"\u0645",
    "\u{1EE8D}"=>"\u0646",
    "\u{1EE8E}"=>"\u0633",
    "\u{1EE8F}"=>"\u0639",
    "\u{1EE90}"=>"\u0641",
    "\u{1EE91}"=>"\u0635",
    "\u{1EE92}"=>"\u0642",
    "\u{1EE93}"=>"\u0631",
    "\u{1EE94}"=>"\u0634",
    "\u{1EE95}"=>"\u062A",
    "\u{1EE96}"=>"\u062B",
    "\u{1EE97}"=>"\u062E",
    "\u{1EE98}"=>"\u0630",
    "\u{1EE99}"=>"\u0636",
    "\u{1EE9A}"=>"\u0638",
    "\u{1EE9B}"=>"\u063A",
    "\u{1EEA1}"=>"\u0628",
    "\u{1EEA2}"=>"\u062C",
    "\u{1EEA3}"=>"\u062F",
    "\u{1EEA5}"=>"\u0648",
    "\u{1EEA6}"=>"\u0632",
    "\u{1EEA7}"=>"\u062D",
    "\u{1EEA8}"=>"\u0637",
    "\u{1EEA9}"=>"\u064A",
    "\u{1EEAB}"=>"\u0644",
    "\u{1EEAC}"=>"\u0645",
    "\u{1EEAD}"=>"\u0646",
    "\u{1EEAE}"=>"\u0633",
    "\u{1EEAF}"=>"\u0639",
    "\u{1EEB0}"=>"\u0641",
    "\u{1EEB1}"=>"\u0635",
    "\u{1EEB2}"=>"\u0642",
    "\u{1EEB3}"=>"\u0631",
    "\u{1EEB4}"=>"\u0634",
    "\u{1EEB5}"=>"\u062A",
    "\u{1EEB6}"=>"\u062B",
    "\u{1EEB7}"=>"\u062E",
    "\u{1EEB8}"=>"\u0630",
    "\u{1EEB9}"=>"\u0636",
    "\u{1EEBA}"=>"\u0638",
    "\u{1EEBB}"=>"\u063A",
    "\u{1F100}"=>"0.",
    "\u{1F101}"=>"0,",
    "\u{1F102}"=>"1,",
    "\u{1F103}"=>"2,",
    "\u{1F104}"=>"3,",
    "\u{1F105}"=>"4,",
    "\u{1F106}"=>"5,",
    "\u{1F107}"=>"6,",
    "\u{1F108}"=>"7,",
    "\u{1F109}"=>"8,",
    "\u{1F10A}"=>"9,",
    "\u{1F110}"=>"(A)",
    "\u{1F111}"=>"(B)",
    "\u{1F112}"=>"(C)",
    "\u{1F113}"=>"(D)",
    "\u{1F114}"=>"(E)",
    "\u{1F115}"=>"(F)",
    "\u{1F116}"=>"(G)",
    "\u{1F117}"=>"(H)",
    "\u{1F118}"=>"(I)",
    "\u{1F119}"=>"(J)",
    "\u{1F11A}"=>"(K)",
    "\u{1F11B}"=>"(L)",
    "\u{1F11C}"=>"(M)",
    "\u{1F11D}"=>"(N)",
    "\u{1F11E}"=>"(O)",
    "\u{1F11F}"=>"(P)",
    "\u{1F120}"=>"(Q)",
    "\u{1F121}"=>"(R)",
    "\u{1F122}"=>"(S)",
    "\u{1F123}"=>"(T)",
    "\u{1F124}"=>"(U)",
    "\u{1F125}"=>"(V)",
    "\u{1F126}"=>"(W)",
    "\u{1F127}"=>"(X)",
    "\u{1F128}"=>"(Y)",
    "\u{1F129}"=>"(Z)",
    "\u{1F12A}"=>"\u3014S\u3015",
    "\u{1F12B}"=>"C",
    "\u{1F12C}"=>"R",
    "\u{1F12D}"=>"CD",
    "\u{1F12E}"=>"WZ",
    "\u{1F130}"=>"A",
    "\u{1F131}"=>"B",
    "\u{1F132}"=>"C",
    "\u{1F133}"=>"D",
    "\u{1F134}"=>"E",
    "\u{1F135}"=>"F",
    "\u{1F136}"=>"G",
    "\u{1F137}"=>"H",
    "\u{1F138}"=>"I",
    "\u{1F139}"=>"J",
    "\u{1F13A}"=>"K",
    "\u{1F13B}"=>"L",
    "\u{1F13C}"=>"M",
    "\u{1F13D}"=>"N",
    "\u{1F13E}"=>"O",
    "\u{1F13F}"=>"P",
    "\u{1F140}"=>"Q",
    "\u{1F141}"=>"R",
    "\u{1F142}"=>"S",
    "\u{1F143}"=>"T",
    "\u{1F144}"=>"U",
    "\u{1F145}"=>"V",
    "\u{1F146}"=>"W",
    "\u{1F147}"=>"X",
    "\u{1F148}"=>"Y",
    "\u{1F149}"=>"Z",
    "\u{1F14A}"=>"HV",
    "\u{1F14B}"=>"MV",
    "\u{1F14C}"=>"SD",
    "\u{1F14D}"=>"SS",
    "\u{1F14E}"=>"PPV",
    "\u{1F14F}"=>"WC",
    "\u{1F16A}"=>"MC",
    "\u{1F16B}"=>"MD",
    "\u{1F16C}"=>"MR",
    "\u{1F190}"=>"DJ",
    "\u{1F200}"=>"\u307B\u304B",
    "\u{1F201}"=>"\u30B3\u30B3",
    "\u{1F202}"=>"\u30B5",
    "\u{1F210}"=>"\u624B",
    "\u{1F211}"=>"\u5B57",
    "\u{1F212}"=>"\u53CC",
    "\u{1F213}"=>"\u30C7",
    "\u{1F214}"=>"\u4E8C",
    "\u{1F215}"=>"\u591A",
    "\u{1F216}"=>"\u89E3",
    "\u{1F217}"=>"\u5929",
    "\u{1F218}"=>"\u4EA4",
    "\u{1F219}"=>"\u6620",
    "\u{1F21A}"=>"\u7121",
    "\u{1F21B}"=>"\u6599",
    "\u{1F21C}"=>"\u524D",
    "\u{1F21D}"=>"\u5F8C",
    "\u{1F21E}"=>"\u518D",
    "\u{1F21F}"=>"\u65B0",
    "\u{1F220}"=>"\u521D",
    "\u{1F221}"=>"\u7D42",
    "\u{1F222}"=>"\u751F",
    "\u{1F223}"=>"\u8CA9",
    "\u{1F224}"=>"\u58F0",
    "\u{1F225}"=>"\u5439",
    "\u{1F226}"=>"\u6F14",
    "\u{1F227}"=>"\u6295",
    "\u{1F228}"=>"\u6355",
    "\u{1F229}"=>"\u4E00",
    "\u{1F22A}"=>"\u4E09",
    "\u{1F22B}"=>"\u904A",
    "\u{1F22C}"=>"\u5DE6",
    "\u{1F22D}"=>"\u4E2D",
    "\u{1F22E}"=>"\u53F3",
    "\u{1F22F}"=>"\u6307",
    "\u{1F230}"=>"\u8D70",
    "\u{1F231}"=>"\u6253",
    "\u{1F232}"=>"\u7981",
    "\u{1F233}"=>"\u7A7A",
    "\u{1F234}"=>"\u5408",
    "\u{1F235}"=>"\u6E80",
    "\u{1F236}"=>"\u6709",
    "\u{1F237}"=>"\u6708",
    "\u{1F238}"=>"\u7533",
    "\u{1F239}"=>"\u5272",
    "\u{1F23A}"=>"\u55B6",
    "\u{1F23B}"=>"\u914D",
    "\u{1F240}"=>"\u3014\u672C\u3015",
    "\u{1F241}"=>"\u3014\u4E09\u3015",
    "\u{1F242}"=>"\u3014\u4E8C\u3015",
    "\u{1F243}"=>"\u3014\u5B89\u3015",
    "\u{1F244}"=>"\u3014\u70B9\u3015",
    "\u{1F245}"=>"\u3014\u6253\u3015",
    "\u{1F246}"=>"\u3014\u76D7\u3015",
    "\u{1F247}"=>"\u3014\u52DD\u3015",
    "\u{1F248}"=>"\u3014\u6557\u3015",
    "\u{1F250}"=>"\u5F97",
    "\u{1F251}"=>"\u53EF",
    "\u{1FBF0}"=>"0",
    "\u{1FBF1}"=>"1",
    "\u{1FBF2}"=>"2",
    "\u{1FBF3}"=>"3",
    "\u{1FBF4}"=>"4",
    "\u{1FBF5}"=>"5",
    "\u{1FBF6}"=>"6",
    "\u{1FBF7}"=>"7",
    "\u{1FBF8}"=>"8",
    "\u{1FBF9}"=>"9",
    "\u0385"=>" \u0308\u0301",
    "\u03D3"=>"\u03A5\u0301",
    "\u03D4"=>"\u03A5\u0308",
    "\u1E9B"=>"s\u0307",
    "\u1FC1"=>" \u0308\u0342",
    "\u1FCD"=>" \u0313\u0300",
    "\u1FCE"=>" \u0313\u0301",
    "\u1FCF"=>" \u0313\u0342",
    "\u1FDD"=>" \u0314\u0300",
    "\u1FDE"=>" \u0314\u0301",
    "\u1FDF"=>" \u0314\u0342",
    "\u1FED"=>" \u0308\u0300",
    "\u1FEE"=>" \u0308\u0301",
    "\u1FFD"=>" \u0301",
    "\u2000"=>" ",
    "\u2001"=>" ",
  }.freeze

  COMPOSITION_TABLE = {
    "A\u0300"=>"\u00C0",
    "A\u0301"=>"\u00C1",
    "A\u0302"=>"\u00C2",
    "A\u0303"=>"\u00C3",
    "A\u0308"=>"\u00C4",
    "A\u030A"=>"\u00C5",
    "C\u0327"=>"\u00C7",
    "E\u0300"=>"\u00C8",
    "E\u0301"=>"\u00C9",
    "E\u0302"=>"\u00CA",
    "E\u0308"=>"\u00CB",
    "I\u0300"=>"\u00CC",
    "I\u0301"=>"\u00CD",
    "I\u0302"=>"\u00CE",
    "I\u0308"=>"\u00CF",
    "N\u0303"=>"\u00D1",
    "O\u0300"=>"\u00D2",
    "O\u0301"=>"\u00D3",
    "O\u0302"=>"\u00D4",
    "O\u0303"=>"\u00D5",
    "O\u0308"=>"\u00D6",
    "U\u0300"=>"\u00D9",
    "U\u0301"=>"\u00DA",
    "U\u0302"=>"\u00DB",
    "U\u0308"=>"\u00DC",
    "Y\u0301"=>"\u00DD",
    "a\u0300"=>"\u00E0",
    "a\u0301"=>"\u00E1",
    "a\u0302"=>"\u00E2",
    "a\u0303"=>"\u00E3",
    "a\u0308"=>"\u00E4",
    "a\u030A"=>"\u00E5",
    "c\u0327"=>"\u00E7",
    "e\u0300"=>"\u00E8",
    "e\u0301"=>"\u00E9",
    "e\u0302"=>"\u00EA",
    "e\u0308"=>"\u00EB",
    "i\u0300"=>"\u00EC",
    "i\u0301"=>"\u00ED",
    "i\u0302"=>"\u00EE",
    "i\u0308"=>"\u00EF",
    "n\u0303"=>"\u00F1",
    "o\u0300"=>"\u00F2",
    "o\u0301"=>"\u00F3",
    "o\u0302"=>"\u00F4",
    "o\u0303"=>"\u00F5",
    "o\u0308"=>"\u00F6",
    "u\u0300"=>"\u00F9",
    "u\u0301"=>"\u00FA",
    "u\u0302"=>"\u00FB",
    "u\u0308"=>"\u00FC",
    "y\u0301"=>"\u00FD",
    "y\u0308"=>"\u00FF",
    "A\u0304"=>"\u0100",
    "a\u0304"=>"\u0101",
    "A\u0306"=>"\u0102",
    "a\u0306"=>"\u0103",
    "A\u0328"=>"\u0104",
    "a\u0328"=>"\u0105",
    "C\u0301"=>"\u0106",
    "c\u0301"=>"\u0107",
    "C\u0302"=>"\u0108",
    "c\u0302"=>"\u0109",
    "C\u0307"=>"\u010A",
    "c\u0307"=>"\u010B",
    "C\u030C"=>"\u010C",
    "c\u030C"=>"\u010D",
    "D\u030C"=>"\u010E",
    "d\u030C"=>"\u010F",
    "E\u0304"=>"\u0112",
    "e\u0304"=>"\u0113",
    "E\u0306"=>"\u0114",
    "e\u0306"=>"\u0115",
    "E\u0307"=>"\u0116",
    "e\u0307"=>"\u0117",
    "E\u0328"=>"\u0118",
    "e\u0328"=>"\u0119",
    "E\u030C"=>"\u011A",
    "e\u030C"=>"\u011B",
    "G\u0302"=>"\u011C",
    "g\u0302"=>"\u011D",
    "G\u0306"=>"\u011E",
    "g\u0306"=>"\u011F",
    "G\u0307"=>"\u0120",
    "g\u0307"=>"\u0121",
    "G\u0327"=>"\u0122",
    "g\u0327"=>"\u0123",
    "H\u0302"=>"\u0124",
    "h\u0302"=>"\u0125",
    "I\u0303"=>"\u0128",
    "i\u0303"=>"\u0129",
    "I\u0304"=>"\u012A",
    "i\u0304"=>"\u012B",
    "I\u0306"=>"\u012C",
    "i\u0306"=>"\u012D",
    "I\u0328"=>"\u012E",
    "i\u0328"=>"\u012F",
    "I\u0307"=>"\u0130",
    "J\u0302"=>"\u0134",
    "j\u0302"=>"\u0135",
    "K\u0327"=>"\u0136",
    "k\u0327"=>"\u0137",
    "L\u0301"=>"\u0139",
    "l\u0301"=>"\u013A",
    "L\u0327"=>"\u013B",
    "l\u0327"=>"\u013C",
    "L\u030C"=>"\u013D",
    "l\u030C"=>"\u013E",
    "N\u0301"=>"\u0143",
    "n\u0301"=>"\u0144",
    "N\u0327"=>"\u0145",
    "n\u0327"=>"\u0146",
    "N\u030C"=>"\u0147",
    "n\u030C"=>"\u0148",
    "O\u0304"=>"\u014C",
    "o\u0304"=>"\u014D",
    "O\u0306"=>"\u014E",
    "o\u0306"=>"\u014F",
    "O\u030B"=>"\u0150",
    "o\u030B"=>"\u0151",
    "R\u0301"=>"\u0154",
    "r\u0301"=>"\u0155",
    "R\u0327"=>"\u0156",
    "r\u0327"=>"\u0157",
    "R\u030C"=>"\u0158",
    "r\u030C"=>"\u0159",
    "S\u0301"=>"\u015A",
    "s\u0301"=>"\u015B",
    "S\u0302"=>"\u015C",
    "s\u0302"=>"\u015D",
    "S\u0327"=>"\u015E",
    "s\u0327"=>"\u015F",
    "S\u030C"=>"\u0160",
    "s\u030C"=>"\u0161",
    "T\u0327"=>"\u0162",
    "t\u0327"=>"\u0163",
    "T\u030C"=>"\u0164",
    "t\u030C"=>"\u0165",
    "U\u0303"=>"\u0168",
    "u\u0303"=>"\u0169",
    "U\u0304"=>"\u016A",
    "u\u0304"=>"\u016B",
    "U\u0306"=>"\u016C",
    "u\u0306"=>"\u016D",
    "U\u030A"=>"\u016E",
    "u\u030A"=>"\u016F",
    "U\u030B"=>"\u0170",
    "u\u030B"=>"\u0171",
    "U\u0328"=>"\u0172",
    "u\u0328"=>"\u0173",
    "W\u0302"=>"\u0174",
    "w\u0302"=>"\u0175",
    "Y\u0302"=>"\u0176",
    "y\u0302"=>"\u0177",
    "Y\u0308"=>"\u0178",
    "Z\u0301"=>"\u0179",
    "z\u0301"=>"\u017A",
    "Z\u0307"=>"\u017B",
    "z\u0307"=>"\u017C",
    "Z\u030C"=>"\u017D",
    "z\u030C"=>"\u017E",
    "O\u031B"=>"\u01A0",
    "o\u031B"=>"\u01A1",
    "U\u031B"=>"\u01AF",
    "u\u031B"=>"\u01B0",
    "A\u030C"=>"\u01CD",
    "a\u030C"=>"\u01CE",
    "I\u030C"=>"\u01CF",
    "i\u030C"=>"\u01D0",
    "O\u030C"=>"\u01D1",
    "o\u030C"=>"\u01D2",
    "U\u030C"=>"\u01D3",
    "u\u030C"=>"\u01D4",
    "\u00DC\u0304"=>"\u01D5",
    "\u00FC\u0304"=>"\u01D6",
    "\u00DC\u0301"=>"\u01D7",
    "\u00FC\u0301"=>"\u01D8",
    "\u00DC\u030C"=>"\u01D9",
    "\u00FC\u030C"=>"\u01DA",
    "\u00DC\u0300"=>"\u01DB",
    "\u00FC\u0300"=>"\u01DC",
    "\u00C4\u0304"=>"\u01DE",
    "\u00E4\u0304"=>"\u01DF",
    "\u0226\u0304"=>"\u01E0",
    "\u0227\u0304"=>"\u01E1",
    "\u00C6\u0304"=>"\u01E2",
    "\u00E6\u0304"=>"\u01E3",
    "G\u030C"=>"\u01E6",
    "g\u030C"=>"\u01E7",
    "K\u030C"=>"\u01E8",
    "k\u030C"=>"\u01E9",
    "O\u0328"=>"\u01EA",
    "o\u0328"=>"\u01EB",
    "\u01EA\u0304"=>"\u01EC",
    "\u01EB\u0304"=>"\u01ED",
    "\u01B7\u030C"=>"\u01EE",
    "\u0292\u030C"=>"\u01EF",
    "j\u030C"=>"\u01F0",
    "G\u0301"=>"\u01F4",
    "g\u0301"=>"\u01F5",
    "N\u0300"=>"\u01F8",
    "n\u0300"=>"\u01F9",
    "\u00C5\u0301"=>"\u01FA",
    "\u00E5\u0301"=>"\u01FB",
    "\u00C6\u0301"=>"\u01FC",
    "\u00E6\u0301"=>"\u01FD",
    "\u00D8\u0301"=>"\u01FE",
    "\u00F8\u0301"=>"\u01FF",
    "A\u030F"=>"\u0200",
    "a\u030F"=>"\u0201",
    "A\u0311"=>"\u0202",
    "a\u0311"=>"\u0203",
    "E\u030F"=>"\u0204",
    "e\u030F"=>"\u0205",
    "E\u0311"=>"\u0206",
    "e\u0311"=>"\u0207",
    "I\u030F"=>"\u0208",
    "i\u030F"=>"\u0209",
    "I\u0311"=>"\u020A",
    "i\u0311"=>"\u020B",
    "O\u030F"=>"\u020C",
    "o\u030F"=>"\u020D",
    "O\u0311"=>"\u020E",
    "o\u0311"=>"\u020F",
    "R\u030F"=>"\u0210",
    "r\u030F"=>"\u0211",
    "R\u0311"=>"\u0212",
    "r\u0311"=>"\u0213",
    "U\u030F"=>"\u0214",
    "u\u030F"=>"\u0215",
    "U\u0311"=>"\u0216",
    "u\u0311"=>"\u0217",
    "S\u0326"=>"\u0218",
    "s\u0326"=>"\u0219",
    "T\u0326"=>"\u021A",
    "t\u0326"=>"\u021B",
    "H\u030C"=>"\u021E",
    "h\u030C"=>"\u021F",
    "A\u0307"=>"\u0226",
    "a\u0307"=>"\u0227",
    "E\u0327"=>"\u0228",
    "e\u0327"=>"\u0229",
    "\u00D6\u0304"=>"\u022A",
    "\u00F6\u0304"=>"\u022B",
    "\u00D5\u0304"=>"\u022C",
    "\u00F5\u0304"=>"\u022D",
    "O\u0307"=>"\u022E",
    "o\u0307"=>"\u022F",
    "\u022E\u0304"=>"\u0230",
    "\u022F\u0304"=>"\u0231",
    "Y\u0304"=>"\u0232",
    "y\u0304"=>"\u0233",
    "\u00A8\u0301"=>"\u0385",
    "\u0391\u0301"=>"\u0386",
    "\u0395\u0301"=>"\u0388",
    "\u0397\u0301"=>"\u0389",
    "\u0399\u0301"=>"\u038A",
    "\u039F\u0301"=>"\u038C",
    "\u03A5\u0301"=>"\u038E",
    "\u03A9\u0301"=>"\u038F",
    "\u03CA\u0301"=>"\u0390",
    "\u0399\u0308"=>"\u03AA",
    "\u03A5\u0308"=>"\u03AB",
    "\u03B1\u0301"=>"\u03AC",
    "\u03B5\u0301"=>"\u03AD",
    "\u03B7\u0301"=>"\u03AE",
    "\u03B9\u0301"=>"\u03AF",
    "\u03CB\u0301"=>"\u03B0",
    "\u03B9\u0308"=>"\u03CA",
    "\u03C5\u0308"=>"\u03CB",
    "\u03BF\u0301"=>"\u03CC",
    "\u03C5\u0301"=>"\u03CD",
    "\u03C9\u0301"=>"\u03CE",
    "\u03D2\u0301"=>"\u03D3",
    "\u03D2\u0308"=>"\u03D4",
    "\u0415\u0300"=>"\u0400",
    "\u0415\u0308"=>"\u0401",
    "\u0413\u0301"=>"\u0403",
    "\u0406\u0308"=>"\u0407",
    "\u041A\u0301"=>"\u040C",
    "\u0418\u0300"=>"\u040D",
    "\u0423\u0306"=>"\u040E",
    "\u0418\u0306"=>"\u0419",
    "\u0438\u0306"=>"\u0439",
    "\u0435\u0300"=>"\u0450",
    "\u0435\u0308"=>"\u0451",
    "\u0433\u0301"=>"\u0453",
    "\u0456\u0308"=>"\u0457",
    "\u043A\u0301"=>"\u045C",
    "\u0438\u0300"=>"\u045D",
    "\u0443\u0306"=>"\u045E",
    "\u0474\u030F"=>"\u0476",
    "\u0475\u030F"=>"\u0477",
    "\u0416\u0306"=>"\u04C1",
    "\u0436\u0306"=>"\u04C2",
    "\u0410\u0306"=>"\u04D0",
    "\u0430\u0306"=>"\u04D1",
    "\u0410\u0308"=>"\u04D2",
    "\u0430\u0308"=>"\u04D3",
    "\u0415\u0306"=>"\u04D6",
    "\u0435\u0306"=>"\u04D7",
    "\u04D8\u0308"=>"\u04DA",
    "\u04D9\u0308"=>"\u04DB",
    "\u0416\u0308"=>"\u04DC",
    "\u0436\u0308"=>"\u04DD",
    "\u0417\u0308"=>"\u04DE",
    "\u0437\u0308"=>"\u04DF",
    "\u0418\u0304"=>"\u04E2",
    "\u0438\u0304"=>"\u04E3",
    "\u0418\u0308"=>"\u04E4",
    "\u0438\u0308"=>"\u04E5",
    "\u041E\u0308"=>"\u04E6",
    "\u043E\u0308"=>"\u04E7",
    "\u04E8\u0308"=>"\u04EA",
    "\u04E9\u0308"=>"\u04EB",
    "\u042D\u0308"=>"\u04EC",
    "\u044D\u0308"=>"\u04ED",
    "\u0423\u0304"=>"\u04EE",
    "\u0443\u0304"=>"\u04EF",
    "\u0423\u0308"=>"\u04F0",
    "\u0443\u0308"=>"\u04F1",
    "\u0423\u030B"=>"\u04F2",
    "\u0443\u030B"=>"\u04F3",
    "\u0427\u0308"=>"\u04F4",
    "\u0447\u0308"=>"\u04F5",
    "\u042B\u0308"=>"\u04F8",
    "\u044B\u0308"=>"\u04F9",
    "\u0627\u0653"=>"\u0622",
    "\u0627\u0654"=>"\u0623",
    "\u0648\u0654"=>"\u0624",
    "\u0627\u0655"=>"\u0625",
    "\u064A\u0654"=>"\u0626",
    "\u06D5\u0654"=>"\u06C0",
    "\u06C1\u0654"=>"\u06C2",
    "\u06D2\u0654"=>"\u06D3",
    "\u0928\u093C"=>"\u0929",
    "\u0930\u093C"=>"\u0931",
    "\u0933\u093C"=>"\u0934",
    "\u09C7\u09BE"=>"\u09CB",
    "\u09C7\u09D7"=>"\u09CC",
    "\u0B47\u0B56"=>"\u0B48",
    "\u0B47\u0B3E"=>"\u0B4B",
    "\u0B47\u0B57"=>"\u0B4C",
    "\u0B92\u0BD7"=>"\u0B94",
    "\u0BC6\u0BBE"=>"\u0BCA",
    "\u0BC7\u0BBE"=>"\u0BCB",
    "\u0BC6\u0BD7"=>"\u0BCC",
    "\u0C46\u0C56"=>"\u0C48",
    "\u0CBF\u0CD5"=>"\u0CC0",
    "\u0CC6\u0CD5"=>"\u0CC7",
    "\u0CC6\u0CD6"=>"\u0CC8",
    "\u0CC6\u0CC2"=>"\u0CCA",
    "\u0CCA\u0CD5"=>"\u0CCB",
    "\u0D46\u0D3E"=>"\u0D4A",
    "\u0D47\u0D3E"=>"\u0D4B",
    "\u0D46\u0D57"=>"\u0D4C",
    "\u0DD9\u0DCA"=>"\u0DDA",
    "\u0DD9\u0DCF"=>"\u0DDC",
    "\u0DDC\u0DCA"=>"\u0DDD",
    "\u0DD9\u0DDF"=>"\u0DDE",
    "\u1025\u102E"=>"\u1026",
    "\u1B05\u1B35"=>"\u1B06",
    "\u1B07\u1B35"=>"\u1B08",
    "\u1B09\u1B35"=>"\u1B0A",
    "\u1B0B\u1B35"=>"\u1B0C",
    "\u1B0D\u1B35"=>"\u1B0E",
    "\u1B11\u1B35"=>"\u1B12",
    "\u1B3A\u1B35"=>"\u1B3B",
    "\u1B3C\u1B35"=>"\u1B3D",
    "\u1B3E\u1B35"=>"\u1B40",
    "\u1B3F\u1B35"=>"\u1B41",
    "\u1B42\u1B35"=>"\u1B43",
    "A\u0325"=>"\u1E00",
    "a\u0325"=>"\u1E01",
    "B\u0307"=>"\u1E02",
    "b\u0307"=>"\u1E03",
    "B\u0323"=>"\u1E04",
    "b\u0323"=>"\u1E05",
    "B\u0331"=>"\u1E06",
    "b\u0331"=>"\u1E07",
    "\u00C7\u0301"=>"\u1E08",
    "\u00E7\u0301"=>"\u1E09",
    "D\u0307"=>"\u1E0A",
    "d\u0307"=>"\u1E0B",
    "D\u0323"=>"\u1E0C",
    "d\u0323"=>"\u1E0D",
    "D\u0331"=>"\u1E0E",
    "d\u0331"=>"\u1E0F",
    "D\u0327"=>"\u1E10",
    "d\u0327"=>"\u1E11",
    "D\u032D"=>"\u1E12",
    "d\u032D"=>"\u1E13",
    "\u0112\u0300"=>"\u1E14",
    "\u0113\u0300"=>"\u1E15",
    "\u0112\u0301"=>"\u1E16",
    "\u0113\u0301"=>"\u1E17",
    "E\u032D"=>"\u1E18",
    "e\u032D"=>"\u1E19",
    "E\u0330"=>"\u1E1A",
    "e\u0330"=>"\u1E1B",
    "\u0228\u0306"=>"\u1E1C",
    "\u0229\u0306"=>"\u1E1D",
    "F\u0307"=>"\u1E1E",
    "f\u0307"=>"\u1E1F",
    "G\u0304"=>"\u1E20",
    "g\u0304"=>"\u1E21",
    "H\u0307"=>"\u1E22",
    "h\u0307"=>"\u1E23",
    "H\u0323"=>"\u1E24",
    "h\u0323"=>"\u1E25",
    "H\u0308"=>"\u1E26",
    "h\u0308"=>"\u1E27",
    "H\u0327"=>"\u1E28",
    "h\u0327"=>"\u1E29",
    "H\u032E"=>"\u1E2A",
    "h\u032E"=>"\u1E2B",
    "I\u0330"=>"\u1E2C",
    "i\u0330"=>"\u1E2D",
    "\u00CF\u0301"=>"\u1E2E",
    "\u00EF\u0301"=>"\u1E2F",
    "K\u0301"=>"\u1E30",
    "k\u0301"=>"\u1E31",
    "K\u0323"=>"\u1E32",
    "k\u0323"=>"\u1E33",
    "K\u0331"=>"\u1E34",
    "k\u0331"=>"\u1E35",
    "L\u0323"=>"\u1E36",
    "l\u0323"=>"\u1E37",
    "\u1E36\u0304"=>"\u1E38",
    "\u1E37\u0304"=>"\u1E39",
    "L\u0331"=>"\u1E3A",
    "l\u0331"=>"\u1E3B",
    "L\u032D"=>"\u1E3C",
    "l\u032D"=>"\u1E3D",
    "M\u0301"=>"\u1E3E",
    "m\u0301"=>"\u1E3F",
    "M\u0307"=>"\u1E40",
    "m\u0307"=>"\u1E41",
    "M\u0323"=>"\u1E42",
    "m\u0323"=>"\u1E43",
    "N\u0307"=>"\u1E44",
    "n\u0307"=>"\u1E45",
    "N\u0323"=>"\u1E46",
    "n\u0323"=>"\u1E47",
    "N\u0331"=>"\u1E48",
    "n\u0331"=>"\u1E49",
    "N\u032D"=>"\u1E4A",
    "n\u032D"=>"\u1E4B",
    "\u00D5\u0301"=>"\u1E4C",
    "\u00F5\u0301"=>"\u1E4D",
    "\u00D5\u0308"=>"\u1E4E",
    "\u00F5\u0308"=>"\u1E4F",
    "\u014C\u0300"=>"\u1E50",
    "\u014D\u0300"=>"\u1E51",
    "\u014C\u0301"=>"\u1E52",
    "\u014D\u0301"=>"\u1E53",
    "P\u0301"=>"\u1E54",
    "p\u0301"=>"\u1E55",
    "P\u0307"=>"\u1E56",
    "p\u0307"=>"\u1E57",
    "R\u0307"=>"\u1E58",
    "r\u0307"=>"\u1E59",
    "R\u0323"=>"\u1E5A",
    "r\u0323"=>"\u1E5B",
    "\u1E5A\u0304"=>"\u1E5C",
    "\u1E5B\u0304"=>"\u1E5D",
    "R\u0331"=>"\u1E5E",
    "r\u0331"=>"\u1E5F",
    "S\u0307"=>"\u1E60",
    "s\u0307"=>"\u1E61",
    "S\u0323"=>"\u1E62",
    "s\u0323"=>"\u1E63",
    "\u015A\u0307"=>"\u1E64",
    "\u015B\u0307"=>"\u1E65",
    "\u0160\u0307"=>"\u1E66",
    "\u0161\u0307"=>"\u1E67",
    "\u1E62\u0307"=>"\u1E68",
    "\u1E63\u0307"=>"\u1E69",
    "T\u0307"=>"\u1E6A",
    "t\u0307"=>"\u1E6B",
    "T\u0323"=>"\u1E6C",
    "t\u0323"=>"\u1E6D",
    "T\u0331"=>"\u1E6E",
    "t\u0331"=>"\u1E6F",
    "T\u032D"=>"\u1E70",
    "t\u032D"=>"\u1E71",
    "U\u0324"=>"\u1E72",
    "u\u0324"=>"\u1E73",
    "U\u0330"=>"\u1E74",
    "u\u0330"=>"\u1E75",
    "U\u032D"=>"\u1E76",
    "u\u032D"=>"\u1E77",
    "\u0168\u0301"=>"\u1E78",
    "\u0169\u0301"=>"\u1E79",
    "\u016A\u0308"=>"\u1E7A",
    "\u016B\u0308"=>"\u1E7B",
    "V\u0303"=>"\u1E7C",
    "v\u0303"=>"\u1E7D",
    "V\u0323"=>"\u1E7E",
    "v\u0323"=>"\u1E7F",
    "W\u0300"=>"\u1E80",
    "w\u0300"=>"\u1E81",
    "W\u0301"=>"\u1E82",
    "w\u0301"=>"\u1E83",
    "W\u0308"=>"\u1E84",
    "w\u0308"=>"\u1E85",
    "W\u0307"=>"\u1E86",
    "w\u0307"=>"\u1E87",
    "W\u0323"=>"\u1E88",
    "w\u0323"=>"\u1E89",
    "X\u0307"=>"\u1E8A",
    "x\u0307"=>"\u1E8B",
    "X\u0308"=>"\u1E8C",
    "x\u0308"=>"\u1E8D",
    "Y\u0307"=>"\u1E8E",
    "y\u0307"=>"\u1E8F",
    "Z\u0302"=>"\u1E90",
    "z\u0302"=>"\u1E91",
    "Z\u0323"=>"\u1E92",
    "z\u0323"=>"\u1E93",
    "Z\u0331"=>"\u1E94",
    "z\u0331"=>"\u1E95",
    "h\u0331"=>"\u1E96",
    "t\u0308"=>"\u1E97",
    "w\u030A"=>"\u1E98",
    "y\u030A"=>"\u1E99",
    "\u017F\u0307"=>"\u1E9B",
    "A\u0323"=>"\u1EA0",
    "a\u0323"=>"\u1EA1",
    "A\u0309"=>"\u1EA2",
    "a\u0309"=>"\u1EA3",
    "\u00C2\u0301"=>"\u1EA4",
    "\u00E2\u0301"=>"\u1EA5",
    "\u00C2\u0300"=>"\u1EA6",
    "\u00E2\u0300"=>"\u1EA7",
    "\u00C2\u0309"=>"\u1EA8",
    "\u00E2\u0309"=>"\u1EA9",
    "\u00C2\u0303"=>"\u1EAA",
    "\u00E2\u0303"=>"\u1EAB",
    "\u1EA0\u0302"=>"\u1EAC",
    "\u1EA1\u0302"=>"\u1EAD",
    "\u0102\u0301"=>"\u1EAE",
    "\u0103\u0301"=>"\u1EAF",
    "\u0102\u0300"=>"\u1EB0",
    "\u0103\u0300"=>"\u1EB1",
    "\u0102\u0309"=>"\u1EB2",
    "\u0103\u0309"=>"\u1EB3",
    "\u0102\u0303"=>"\u1EB4",
    "\u0103\u0303"=>"\u1EB5",
    "\u1EA0\u0306"=>"\u1EB6",
    "\u1EA1\u0306"=>"\u1EB7",
    "E\u0323"=>"\u1EB8",
    "e\u0323"=>"\u1EB9",
    "E\u0309"=>"\u1EBA",
    "e\u0309"=>"\u1EBB",
    "E\u0303"=>"\u1EBC",
    "e\u0303"=>"\u1EBD",
    "\u00CA\u0301"=>"\u1EBE",
    "\u00EA\u0301"=>"\u1EBF",
    "\u00CA\u0300"=>"\u1EC0",
    "\u00EA\u0300"=>"\u1EC1",
    "\u00CA\u0309"=>"\u1EC2",
    "\u00EA\u0309"=>"\u1EC3",
    "\u00CA\u0303"=>"\u1EC4",
    "\u00EA\u0303"=>"\u1EC5",
    "\u1EB8\u0302"=>"\u1EC6",
    "\u1EB9\u0302"=>"\u1EC7",
    "I\u0309"=>"\u1EC8",
    "i\u0309"=>"\u1EC9",
    "I\u0323"=>"\u1ECA",
    "i\u0323"=>"\u1ECB",
    "O\u0323"=>"\u1ECC",
    "o\u0323"=>"\u1ECD",
    "O\u0309"=>"\u1ECE",
    "o\u0309"=>"\u1ECF",
    "\u00D4\u0301"=>"\u1ED0",
    "\u00F4\u0301"=>"\u1ED1",
    "\u00D4\u0300"=>"\u1ED2",
    "\u00F4\u0300"=>"\u1ED3",
    "\u00D4\u0309"=>"\u1ED4",
    "\u00F4\u0309"=>"\u1ED5",
    "\u00D4\u0303"=>"\u1ED6",
    "\u00F4\u0303"=>"\u1ED7",
    "\u1ECC\u0302"=>"\u1ED8",
    "\u1ECD\u0302"=>"\u1ED9",
    "\u01A0\u0301"=>"\u1EDA",
    "\u01A1\u0301"=>"\u1EDB",
    "\u01A0\u0300"=>"\u1EDC",
    "\u01A1\u0300"=>"\u1EDD",
    "\u01A0\u0309"=>"\u1EDE",
    "\u01A1\u0309"=>"\u1EDF",
    "\u01A0\u0303"=>"\u1EE0",
    "\u01A1\u0303"=>"\u1EE1",
    "\u01A0\u0323"=>"\u1EE2",
    "\u01A1\u0323"=>"\u1EE3",
    "U\u0323"=>"\u1EE4",
    "u\u0323"=>"\u1EE5",
    "U\u0309"=>"\u1EE6",
    "u\u0309"=>"\u1EE7",
    "\u01AF\u0301"=>"\u1EE8",
    "\u01B0\u0301"=>"\u1EE9",
    "\u01AF\u0300"=>"\u1EEA",
    "\u01B0\u0300"=>"\u1EEB",
    "\u01AF\u0309"=>"\u1EEC",
    "\u01B0\u0309"=>"\u1EED",
    "\u01AF\u0303"=>"\u1EEE",
    "\u01B0\u0303"=>"\u1EEF",
    "\u01AF\u0323"=>"\u1EF0",
    "\u01B0\u0323"=>"\u1EF1",
    "Y\u0300"=>"\u1EF2",
    "y\u0300"=>"\u1EF3",
    "Y\u0323"=>"\u1EF4",
    "y\u0323"=>"\u1EF5",
    "Y\u0309"=>"\u1EF6",
    "y\u0309"=>"\u1EF7",
    "Y\u0303"=>"\u1EF8",
    "y\u0303"=>"\u1EF9",
    "\u03B1\u0313"=>"\u1F00",
    "\u03B1\u0314"=>"\u1F01",
    "\u1F00\u0300"=>"\u1F02",
    "\u1F01\u0300"=>"\u1F03",
    "\u1F00\u0301"=>"\u1F04",
    "\u1F01\u0301"=>"\u1F05",
    "\u1F00\u0342"=>"\u1F06",
    "\u1F01\u0342"=>"\u1F07",
    "\u0391\u0313"=>"\u1F08",
    "\u0391\u0314"=>"\u1F09",
    "\u1F08\u0300"=>"\u1F0A",
    "\u1F09\u0300"=>"\u1F0B",
    "\u1F08\u0301"=>"\u1F0C",
    "\u1F09\u0301"=>"\u1F0D",
    "\u1F08\u0342"=>"\u1F0E",
    "\u1F09\u0342"=>"\u1F0F",
    "\u03B5\u0313"=>"\u1F10",
    "\u03B5\u0314"=>"\u1F11",
    "\u1F10\u0300"=>"\u1F12",
    "\u1F11\u0300"=>"\u1F13",
    "\u1F10\u0301"=>"\u1F14",
    "\u1F11\u0301"=>"\u1F15",
    "\u0395\u0313"=>"\u1F18",
    "\u0395\u0314"=>"\u1F19",
    "\u1F18\u0300"=>"\u1F1A",
    "\u1F19\u0300"=>"\u1F1B",
    "\u1F18\u0301"=>"\u1F1C",
    "\u1F19\u0301"=>"\u1F1D",
    "\u03B7\u0313"=>"\u1F20",
    "\u03B7\u0314"=>"\u1F21",
    "\u1F20\u0300"=>"\u1F22",
    "\u1F21\u0300"=>"\u1F23",
    "\u1F20\u0301"=>"\u1F24",
    "\u1F21\u0301"=>"\u1F25",
    "\u1F20\u0342"=>"\u1F26",
    "\u1F21\u0342"=>"\u1F27",
    "\u0397\u0313"=>"\u1F28",
    "\u0397\u0314"=>"\u1F29",
    "\u1F28\u0300"=>"\u1F2A",
    "\u1F29\u0300"=>"\u1F2B",
    "\u1F28\u0301"=>"\u1F2C",
    "\u1F29\u0301"=>"\u1F2D",
    "\u1F28\u0342"=>"\u1F2E",
    "\u1F29\u0342"=>"\u1F2F",
    "\u03B9\u0313"=>"\u1F30",
    "\u03B9\u0314"=>"\u1F31",
    "\u1F30\u0300"=>"\u1F32",
    "\u1F31\u0300"=>"\u1F33",
    "\u1F30\u0301"=>"\u1F34",
    "\u1F31\u0301"=>"\u1F35",
    "\u1F30\u0342"=>"\u1F36",
    "\u1F31\u0342"=>"\u1F37",
    "\u0399\u0313"=>"\u1F38",
    "\u0399\u0314"=>"\u1F39",
    "\u1F38\u0300"=>"\u1F3A",
    "\u1F39\u0300"=>"\u1F3B",
    "\u1F38\u0301"=>"\u1F3C",
    "\u1F39\u0301"=>"\u1F3D",
    "\u1F38\u0342"=>"\u1F3E",
    "\u1F39\u0342"=>"\u1F3F",
    "\u03BF\u0313"=>"\u1F40",
    "\u03BF\u0314"=>"\u1F41",
    "\u1F40\u0300"=>"\u1F42",
    "\u1F41\u0300"=>"\u1F43",
    "\u1F40\u0301"=>"\u1F44",
    "\u1F41\u0301"=>"\u1F45",
    "\u039F\u0313"=>"\u1F48",
    "\u039F\u0314"=>"\u1F49",
    "\u1F48\u0300"=>"\u1F4A",
    "\u1F49\u0300"=>"\u1F4B",
    "\u1F48\u0301"=>"\u1F4C",
    "\u1F49\u0301"=>"\u1F4D",
    "\u03C5\u0313"=>"\u1F50",
    "\u03C5\u0314"=>"\u1F51",
    "\u1F50\u0300"=>"\u1F52",
    "\u1F51\u0300"=>"\u1F53",
    "\u1F50\u0301"=>"\u1F54",
    "\u1F51\u0301"=>"\u1F55",
    "\u1F50\u0342"=>"\u1F56",
    "\u1F51\u0342"=>"\u1F57",
    "\u03A5\u0314"=>"\u1F59",
    "\u1F59\u0300"=>"\u1F5B",
    "\u1F59\u0301"=>"\u1F5D",
    "\u1F59\u0342"=>"\u1F5F",
    "\u03C9\u0313"=>"\u1F60",
    "\u03C9\u0314"=>"\u1F61",
    "\u1F60\u0300"=>"\u1F62",
    "\u1F61\u0300"=>"\u1F63",
    "\u1F60\u0301"=>"\u1F64",
    "\u1F61\u0301"=>"\u1F65",
    "\u1F60\u0342"=>"\u1F66",
    "\u1F61\u0342"=>"\u1F67",
    "\u03A9\u0313"=>"\u1F68",
    "\u03A9\u0314"=>"\u1F69",
    "\u1F68\u0300"=>"\u1F6A",
    "\u1F69\u0300"=>"\u1F6B",
    "\u1F68\u0301"=>"\u1F6C",
    "\u1F69\u0301"=>"\u1F6D",
    "\u1F68\u0342"=>"\u1F6E",
    "\u1F69\u0342"=>"\u1F6F",
    "\u03B1\u0300"=>"\u1F70",
    "\u03B5\u0300"=>"\u1F72",
    "\u03B7\u0300"=>"\u1F74",
    "\u03B9\u0300"=>"\u1F76",
    "\u03BF\u0300"=>"\u1F78",
    "\u03C5\u0300"=>"\u1F7A",
    "\u03C9\u0300"=>"\u1F7C",
    "\u1F00\u0345"=>"\u1F80",
    "\u1F01\u0345"=>"\u1F81",
    "\u1F02\u0345"=>"\u1F82",
    "\u1F03\u0345"=>"\u1F83",
    "\u1F04\u0345"=>"\u1F84",
    "\u1F05\u0345"=>"\u1F85",
    "\u1F06\u0345"=>"\u1F86",
    "\u1F07\u0345"=>"\u1F87",
    "\u1F08\u0345"=>"\u1F88",
    "\u1F09\u0345"=>"\u1F89",
    "\u1F0A\u0345"=>"\u1F8A",
    "\u1F0B\u0345"=>"\u1F8B",
    "\u1F0C\u0345"=>"\u1F8C",
    "\u1F0D\u0345"=>"\u1F8D",
    "\u1F0E\u0345"=>"\u1F8E",
    "\u1F0F\u0345"=>"\u1F8F",
    "\u1F20\u0345"=>"\u1F90",
    "\u1F21\u0345"=>"\u1F91",
    "\u1F22\u0345"=>"\u1F92",
    "\u1F23\u0345"=>"\u1F93",
    "\u1F24\u0345"=>"\u1F94",
    "\u1F25\u0345"=>"\u1F95",
    "\u1F26\u0345"=>"\u1F96",
    "\u1F27\u0345"=>"\u1F97",
    "\u1F28\u0345"=>"\u1F98",
    "\u1F29\u0345"=>"\u1F99",
    "\u1F2A\u0345"=>"\u1F9A",
    "\u1F2B\u0345"=>"\u1F9B",
    "\u1F2C\u0345"=>"\u1F9C",
    "\u1F2D\u0345"=>"\u1F9D",
    "\u1F2E\u0345"=>"\u1F9E",
    "\u1F2F\u0345"=>"\u1F9F",
    "\u1F60\u0345"=>"\u1FA0",
    "\u1F61\u0345"=>"\u1FA1",
    "\u1F62\u0345"=>"\u1FA2",
    "\u1F63\u0345"=>"\u1FA3",
    "\u1F64\u0345"=>"\u1FA4",
    "\u1F65\u0345"=>"\u1FA5",
    "\u1F66\u0345"=>"\u1FA6",
    "\u1F67\u0345"=>"\u1FA7",
    "\u1F68\u0345"=>"\u1FA8",
    "\u1F69\u0345"=>"\u1FA9",
    "\u1F6A\u0345"=>"\u1FAA",
    "\u1F6B\u0345"=>"\u1FAB",
    "\u1F6C\u0345"=>"\u1FAC",
    "\u1F6D\u0345"=>"\u1FAD",
    "\u1F6E\u0345"=>"\u1FAE",
    "\u1F6F\u0345"=>"\u1FAF",
    "\u03B1\u0306"=>"\u1FB0",
    "\u03B1\u0304"=>"\u1FB1",
    "\u1F70\u0345"=>"\u1FB2",
    "\u03B1\u0345"=>"\u1FB3",
    "\u03AC\u0345"=>"\u1FB4",
    "\u03B1\u0342"=>"\u1FB6",
    "\u1FB6\u0345"=>"\u1FB7",
    "\u0391\u0306"=>"\u1FB8",
    "\u0391\u0304"=>"\u1FB9",
    "\u0391\u0300"=>"\u1FBA",
    "\u0391\u0345"=>"\u1FBC",
    "\u00A8\u0342"=>"\u1FC1",
    "\u1F74\u0345"=>"\u1FC2",
    "\u03B7\u0345"=>"\u1FC3",
    "\u03AE\u0345"=>"\u1FC4",
    "\u03B7\u0342"=>"\u1FC6",
    "\u1FC6\u0345"=>"\u1FC7",
    "\u0395\u0300"=>"\u1FC8",
    "\u0397\u0300"=>"\u1FCA",
    "\u0397\u0345"=>"\u1FCC",
    "\u1FBF\u0300"=>"\u1FCD",
    "\u1FBF\u0301"=>"\u1FCE",
    "\u1FBF\u0342"=>"\u1FCF",
    "\u03B9\u0306"=>"\u1FD0",
    "\u03B9\u0304"=>"\u1FD1",
    "\u03CA\u0300"=>"\u1FD2",
    "\u03B9\u0342"=>"\u1FD6",
    "\u03CA\u0342"=>"\u1FD7",
    "\u0399\u0306"=>"\u1FD8",
    "\u0399\u0304"=>"\u1FD9",
    "\u0399\u0300"=>"\u1FDA",
    "\u1FFE\u0300"=>"\u1FDD",
    "\u1FFE\u0301"=>"\u1FDE",
    "\u1FFE\u0342"=>"\u1FDF",
    "\u03C5\u0306"=>"\u1FE0",
    "\u03C5\u0304"=>"\u1FE1",
    "\u03CB\u0300"=>"\u1FE2",
    "\u03C1\u0313"=>"\u1FE4",
    "\u03C1\u0314"=>"\u1FE5",
    "\u03C5\u0342"=>"\u1FE6",
    "\u03CB\u0342"=>"\u1FE7",
    "\u03A5\u0306"=>"\u1FE8",
    "\u03A5\u0304"=>"\u1FE9",
    "\u03A5\u0300"=>"\u1FEA",
    "\u03A1\u0314"=>"\u1FEC",
    "\u00A8\u0300"=>"\u1FED",
    "\u1F7C\u0345"=>"\u1FF2",
    "\u03C9\u0345"=>"\u1FF3",
    "\u03CE\u0345"=>"\u1FF4",
    "\u03C9\u0342"=>"\u1FF6",
    "\u1FF6\u0345"=>"\u1FF7",
    "\u039F\u0300"=>"\u1FF8",
    "\u03A9\u0300"=>"\u1FFA",
    "\u03A9\u0345"=>"\u1FFC",
    "\u2190\u0338"=>"\u219A",
    "\u2192\u0338"=>"\u219B",
    "\u2194\u0338"=>"\u21AE",
    "\u21D0\u0338"=>"\u21CD",
    "\u21D4\u0338"=>"\u21CE",
    "\u21D2\u0338"=>"\u21CF",
    "\u2203\u0338"=>"\u2204",
    "\u2208\u0338"=>"\u2209",
    "\u220B\u0338"=>"\u220C",
    "\u2223\u0338"=>"\u2224",
    "\u2225\u0338"=>"\u2226",
    "\u223C\u0338"=>"\u2241",
    "\u2243\u0338"=>"\u2244",
    "\u2245\u0338"=>"\u2247",
    "\u2248\u0338"=>"\u2249",
    "=\u0338"=>"\u2260",
    "\u2261\u0338"=>"\u2262",
    "\u224D\u0338"=>"\u226D",
    "<\u0338"=>"\u226E",
    ">\u0338"=>"\u226F",
    "\u2264\u0338"=>"\u2270",
    "\u2265\u0338"=>"\u2271",
    "\u2272\u0338"=>"\u2274",
    "\u2273\u0338"=>"\u2275",
    "\u2276\u0338"=>"\u2278",
    "\u2277\u0338"=>"\u2279",
    "\u227A\u0338"=>"\u2280",
    "\u227B\u0338"=>"\u2281",
    "\u2282\u0338"=>"\u2284",
    "\u2283\u0338"=>"\u2285",
    "\u2286\u0338"=>"\u2288",
    "\u2287\u0338"=>"\u2289",
    "\u22A2\u0338"=>"\u22AC",
    "\u22A8\u0338"=>"\u22AD",
    "\u22A9\u0338"=>"\u22AE",
    "\u22AB\u0338"=>"\u22AF",
    "\u227C\u0338"=>"\u22E0",
    "\u227D\u0338"=>"\u22E1",
    "\u2291\u0338"=>"\u22E2",
    "\u2292\u0338"=>"\u22E3",
    "\u22B2\u0338"=>"\u22EA",
    "\u22B3\u0338"=>"\u22EB",
    "\u22B4\u0338"=>"\u22EC",
    "\u22B5\u0338"=>"\u22ED",
    "\u304B\u3099"=>"\u304C",
    "\u304D\u3099"=>"\u304E",
    "\u304F\u3099"=>"\u3050",
    "\u3051\u3099"=>"\u3052",
    "\u3053\u3099"=>"\u3054",
    "\u3055\u3099"=>"\u3056",
    "\u3057\u3099"=>"\u3058",
    "\u3059\u3099"=>"\u305A",
    "\u305B\u3099"=>"\u305C",
    "\u305D\u3099"=>"\u305E",
    "\u305F\u3099"=>"\u3060",
    "\u3061\u3099"=>"\u3062",
    "\u3064\u3099"=>"\u3065",
    "\u3066\u3099"=>"\u3067",
    "\u3068\u3099"=>"\u3069",
    "\u306F\u3099"=>"\u3070",
    "\u306F\u309A"=>"\u3071",
    "\u3072\u3099"=>"\u3073",
    "\u3072\u309A"=>"\u3074",
    "\u3075\u3099"=>"\u3076",
    "\u3075\u309A"=>"\u3077",
    "\u3078\u3099"=>"\u3079",
    "\u3078\u309A"=>"\u307A",
    "\u307B\u3099"=>"\u307C",
    "\u307B\u309A"=>"\u307D",
    "\u3046\u3099"=>"\u3094",
    "\u309D\u3099"=>"\u309E",
    "\u30AB\u3099"=>"\u30AC",
    "\u30AD\u3099"=>"\u30AE",
    "\u30AF\u3099"=>"\u30B0",
    "\u30B1\u3099"=>"\u30B2",
    "\u30B3\u3099"=>"\u30B4",
    "\u30B5\u3099"=>"\u30B6",
    "\u30B7\u3099"=>"\u30B8",
    "\u30B9\u3099"=>"\u30BA",
    "\u30BB\u3099"=>"\u30BC",
    "\u30BD\u3099"=>"\u30BE",
    "\u30BF\u3099"=>"\u30C0",
    "\u30C1\u3099"=>"\u30C2",
    "\u30C4\u3099"=>"\u30C5",
    "\u30C6\u3099"=>"\u30C7",
    "\u30C8\u3099"=>"\u30C9",
    "\u30CF\u3099"=>"\u30D0",
    "\u30CF\u309A"=>"\u30D1",
    "\u30D2\u3099"=>"\u30D3",
    "\u30D2\u309A"=>"\u30D4",
    "\u30D5\u3099"=>"\u30D6",
    "\u30D5\u309A"=>"\u30D7",
    "\u30D8\u3099"=>"\u30D9",
    "\u30D8\u309A"=>"\u30DA",
    "\u30DB\u3099"=>"\u30DC",
    "\u30DB\u309A"=>"\u30DD",
    "\u30A6\u3099"=>"\u30F4",
    "\u30EF\u3099"=>"\u30F7",
    "\u30F0\u3099"=>"\u30F8",
    "\u30F1\u3099"=>"\u30F9",
    "\u30F2\u3099"=>"\u30FA",
    "\u30FD\u3099"=>"\u30FE",
    "\u{11099}\u{110BA}"=>"\u{1109A}",
    "\u{1109B}\u{110BA}"=>"\u{1109C}",
    "\u{110A5}\u{110BA}"=>"\u{110AB}",
    "\u{11131}\u{11127}"=>"\u{1112E}",
    "\u{11132}\u{11127}"=>"\u{1112F}",
    "\u{11347}\u{1133E}"=>"\u{1134B}",
    "\u{11347}\u{11357}"=>"\u{1134C}",
    "\u{114B9}\u{114BA}"=>"\u{114BB}",
    "\u{114B9}\u{114B0}"=>"\u{114BC}",
    "\u{114B9}\u{114BD}"=>"\u{114BE}",
    "\u{115B8}\u{115AF}"=>"\u{115BA}",
    "\u{115B9}\u{115AF}"=>"\u{115BB}",
    "\u{11935}\u{11930}"=>"\u{11938}",
  }.freeze
end
PK*J[���)share/ruby/unicode_normalize/normalize.rbnu�[���# coding: utf-8
# frozen_string_literal: false

# Copyright Ayumu Nojima (野島 歩) and Martin J. Dürst (duerst@it.aoyama.ac.jp)

# This file, the companion file tables.rb (autogenerated), and the module,
# constants, and method defined herein are part of the implementation of the
# built-in String class, not part of the standard library. They should
# therefore never be gemified. They implement the methods
# String#unicode_normalize, String#unicode_normalize!, and String#unicode_normalized?.
#
# They are placed here because they are written in Ruby. They are loaded on
# demand when any of the three methods mentioned above is executed for the
# first time. This reduces the memory footprint and startup time for scripts
# and applications that do not use those methods.
#
# The name and even the existence of the module UnicodeNormalize and all of its
# content are purely an implementation detail, and should not be exposed in
# any test or spec or otherwise.

require_relative 'tables'

# :stopdoc:
module UnicodeNormalize  # :nodoc:
  ## Constant for max hash capacity to avoid DoS attack
  MAX_HASH_LENGTH = 18000 # enough for all test cases, otherwise tests get slow

  ## Regular Expressions and Hash Constants
  REGEXP_D = Regexp.compile(REGEXP_D_STRING, Regexp::EXTENDED)
  REGEXP_C = Regexp.compile(REGEXP_C_STRING, Regexp::EXTENDED)
  REGEXP_K = Regexp.compile(REGEXP_K_STRING, Regexp::EXTENDED)
  NF_HASH_D = Hash.new do |hash, key|
                         hash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack
                         hash[key] = nfd_one(key)
                       end
  NF_HASH_C = Hash.new do |hash, key|
                         hash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack
                         hash[key] = nfc_one(key)
                       end

  ## Constants For Hangul
  # for details such as the meaning of the identifiers below, please see
  # http://www.unicode.org/versions/Unicode7.0.0/ch03.pdf, pp. 144/145
  SBASE = 0xAC00
  LBASE = 0x1100
  VBASE = 0x1161
  TBASE = 0x11A7
  LCOUNT = 19
  VCOUNT = 21
  TCOUNT = 28
  NCOUNT = VCOUNT * TCOUNT
  SCOUNT = LCOUNT * NCOUNT

  # Unicode-based encodings (except UTF-8)
  UNICODE_ENCODINGS = [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE,
                       Encoding::GB18030, Encoding::UCS_2BE, Encoding::UCS_4BE]

  ## Hangul Algorithm
  def self.hangul_decomp_one(target)
    syllable_index = target.ord - SBASE
    return target if syllable_index < 0 || syllable_index >= SCOUNT
    l = LBASE + syllable_index / NCOUNT
    v = VBASE + (syllable_index % NCOUNT) / TCOUNT
    t = TBASE + syllable_index % TCOUNT
    (t==TBASE ? [l, v] : [l, v, t]).pack('U*') + target[1..-1]
  end

  def self.hangul_comp_one(string)
    length = string.length
    if length>1 and 0 <= (lead =string[0].ord-LBASE) and lead  < LCOUNT and
                    0 <= (vowel=string[1].ord-VBASE) and vowel < VCOUNT
      lead_vowel = SBASE + (lead * VCOUNT + vowel) * TCOUNT
      if length>2 and 0 < (trail=string[2].ord-TBASE) and trail < TCOUNT
        (lead_vowel + trail).chr(Encoding::UTF_8) + string[3..-1]
      else
        lead_vowel.chr(Encoding::UTF_8) + string[2..-1]
      end
    else
      string
    end
  end

  ## Canonical Ordering
  def self.canonical_ordering_one(string)
    sorting = string.each_char.collect { |c| [c, CLASS_TABLE[c]] }
    (sorting.length-2).downto(0) do |i| # almost, but not exactly bubble sort
      (0..i).each do |j|
        later_class = sorting[j+1].last
        if 0<later_class and later_class<sorting[j].last
          sorting[j], sorting[j+1] = sorting[j+1], sorting[j]
        end
      end
    end
    return sorting.collect(&:first).join('')
  end

  ## Normalization Forms for Patterns (not whole Strings)
  def self.nfd_one(string)
    string = string.chars.map! {|c| DECOMPOSITION_TABLE[c] || c}.join('')
    canonical_ordering_one(hangul_decomp_one(string))
  end

  def self.nfc_one(string)
    nfd_string = nfd_one string
    start = nfd_string[0]
    last_class = CLASS_TABLE[start]-1
    accents = ''
    nfd_string[1..-1].each_char do |accent|
      accent_class = CLASS_TABLE[accent]
      if last_class<accent_class and composite = COMPOSITION_TABLE[start+accent]
        start = composite
      else
        accents << accent
        last_class = accent_class
      end
    end
    hangul_comp_one(start+accents)
  end

  def self.normalize(string, form = :nfc)
    encoding = string.encoding
    case encoding
    when Encoding::UTF_8
      case form
      when :nfc then
        string.gsub REGEXP_C, NF_HASH_C
      when :nfd then
        string.gsub REGEXP_D, NF_HASH_D
      when :nfkc then
        string.gsub(REGEXP_K, KOMPATIBLE_TABLE).gsub(REGEXP_C, NF_HASH_C)
      when :nfkd then
        string.gsub(REGEXP_K, KOMPATIBLE_TABLE).gsub(REGEXP_D, NF_HASH_D)
      else
        raise ArgumentError, "Invalid normalization form #{form}."
      end
    when Encoding::US_ASCII
      string
    when *UNICODE_ENCODINGS
      normalize(string.encode(Encoding::UTF_8), form).encode(encoding)
    else
      raise Encoding::CompatibilityError, "Unicode Normalization not appropriate for #{encoding}"
    end
  end

  def self.normalized?(string, form = :nfc)
    encoding = string.encoding
    case encoding
    when Encoding::UTF_8
      case form
      when :nfc then
        string.scan REGEXP_C do |match|
          return false  if NF_HASH_C[match] != match
        end
        true
      when :nfd then
        string.scan REGEXP_D do |match|
          return false  if NF_HASH_D[match] != match
        end
        true
      when :nfkc then
        normalized?(string, :nfc) and string !~ REGEXP_K
      when :nfkd then
        normalized?(string, :nfd) and string !~ REGEXP_K
      else
        raise ArgumentError, "Invalid normalization form #{form}."
      end
    when Encoding::US_ASCII
      true
    when *UNICODE_ENCODINGS
      normalized? string.encode(Encoding::UTF_8), form
    else
      raise Encoding::CompatibilityError, "Unicode Normalization not appropriate for #{encoding}"
    end
  end
end # module
PK*J[/share/gems/gems/bigdecimal-3.1.8/lib/bigdecimalnuȯ��PK*J[����share/ruby/fiddle.rbnu�[���# frozen_string_literal: true

if RUBY_ENGINE == 'ruby'
  require 'fiddle.so'
else
  require 'fiddle/ffi_backend'
end
require 'fiddle/closure'
require 'fiddle/function'
require 'fiddle/version'

module Fiddle
  if WINDOWS
    # Returns the last win32 +Error+ of the current executing +Thread+ or nil
    # if none
    def self.win32_last_error
      if RUBY_ENGINE == 'jruby'
        errno = FFI.errno
        errno == 0 ? nil : errno
      else
        Thread.current[:__FIDDLE_WIN32_LAST_ERROR__]
      end
    end

    # Sets the last win32 +Error+ of the current executing +Thread+ to +error+
    def self.win32_last_error= error
      if RUBY_ENGINE == 'jruby'
        FFI.errno = error || 0
      else
        Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] = error
      end
    end

    # Returns the last win32 socket +Error+ of the current executing
    # +Thread+ or nil if none
    def self.win32_last_socket_error
      if RUBY_ENGINE == 'jruby'
        errno = FFI.errno
        errno == 0 ? nil : errno
      else
        Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__]
      end
    end

    # Sets the last win32 socket +Error+ of the current executing
    # +Thread+ to +error+
    def self.win32_last_socket_error= error
      if RUBY_ENGINE == 'jruby'
        FFI.errno = error || 0
      else
        Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] = error
      end
    end
  end

  # Returns the last +Error+ of the current executing +Thread+ or nil if none
  def self.last_error
    if RUBY_ENGINE == 'jruby'
      errno = FFI.errno
      errno == 0 ? nil : errno
    else
      Thread.current[:__FIDDLE_LAST_ERROR__]
    end
  end

  # Sets the last +Error+ of the current executing +Thread+ to +error+
  def self.last_error= error
    if RUBY_ENGINE == 'jruby'
      FFI.errno = error || 0
    else
      Thread.current[:__DL2_LAST_ERROR__] = error
      Thread.current[:__FIDDLE_LAST_ERROR__] = error
    end
  end

  # call-seq: dlopen(library) => Fiddle::Handle
  #
  # Creates a new handler that opens +library+, and returns an instance of
  # Fiddle::Handle.
  #
  # If +nil+ is given for the +library+, Fiddle::Handle::DEFAULT is used, which
  # is the equivalent to RTLD_DEFAULT. See <code>man 3 dlopen</code> for more.
  #
  #   lib = Fiddle.dlopen(nil)
  #
  # The default is dependent on OS, and provide a handle for all libraries
  # already loaded. For example, in most cases you can use this to access
  # +libc+ functions, or ruby functions like +rb_str_new+.
  #
  # See Fiddle::Handle.new for more.
  def dlopen library
    begin
      Fiddle::Handle.new(library)
    rescue DLError => error
      case RUBY_PLATFORM
      when /linux/
        case error.message
        when /\A(\/.+?): (?:invalid ELF header|file too short)/
          # This may be a linker script:
          # https://sourceware.org/binutils/docs/ld.html#Scripts
          path = $1
        else
          raise
        end
      else
        raise
      end

      File.open(path) do |input|
        input.each_line do |line|
          case line
          when /\A\s*(?:INPUT|GROUP)\s*\(\s*([^\s,\)]+)/
            # TODO: Should we support multiple files?
            first_input = $1
            if first_input.start_with?("-l")
              first_input = "lib#{first_input[2..-1]}.so"
            end
            return dlopen(first_input)
          end
        end
      end

      # Not found
      raise
    end
  end
  module_function :dlopen

  # Add constants for backwards compat

  RTLD_GLOBAL = Handle::RTLD_GLOBAL # :nodoc:
  RTLD_LAZY   = Handle::RTLD_LAZY   # :nodoc:
  RTLD_NOW    = Handle::RTLD_NOW    # :nodoc:

  Fiddle::Types.constants.each do |type|
    const_set "TYPE_#{type}", Fiddle::Types.const_get(type)
  end
end
PK*J[��2]+o+o share/ruby/prism/parse_result.rbnu�[���# frozen_string_literal: true

module Prism
  # This represents a source of Ruby code that has been parsed. It is used in
  # conjunction with locations to allow them to resolve line numbers and source
  # ranges.
  class Source
    # Create a new source object with the given source code. This method should
    # be used instead of `new` and it will return either a `Source` or a
    # specialized and more performant `ASCIISource` if no multibyte characters
    # are present in the source code.
    def self.for(source, start_line = 1, offsets = [])
      if source.ascii_only?
        ASCIISource.new(source, start_line, offsets)
      elsif source.encoding == Encoding::BINARY
        source.force_encoding(Encoding::UTF_8)

        if source.valid_encoding?
          new(source, start_line, offsets)
        else
          # This is an extremely niche use case where the file is marked as
          # binary, contains multi-byte characters, and those characters are not
          # valid UTF-8. In this case we'll mark it as binary and fall back to
          # treating everything as a single-byte character. This _may_ cause
          # problems when asking for code units, but it appears to be the
          # cleanest solution at the moment.
          source.force_encoding(Encoding::BINARY)
          ASCIISource.new(source, start_line, offsets)
        end
      else
        new(source, start_line, offsets)
      end
    end

    # The source code that this source object represents.
    attr_reader :source

    # The line number where this source starts.
    attr_reader :start_line

    # The list of newline byte offsets in the source code.
    attr_reader :offsets

    # Create a new source object with the given source code.
    def initialize(source, start_line = 1, offsets = [])
      @source = source
      @start_line = start_line # set after parsing is done
      @offsets = offsets # set after parsing is done
    end

    # Returns the encoding of the source code, which is set by parameters to the
    # parser or by the encoding magic comment.
    def encoding
      source.encoding
    end

    # Returns the lines of the source code as an array of strings.
    def lines
      source.lines
    end

    # Perform a byteslice on the source code using the given byte offset and
    # byte length.
    def slice(byte_offset, length)
      source.byteslice(byte_offset, length) or raise
    end

    # Binary search through the offsets to find the line number for the given
    # byte offset.
    def line(byte_offset)
      start_line + find_line(byte_offset)
    end

    # Return the byte offset of the start of the line corresponding to the given
    # byte offset.
    def line_start(byte_offset)
      offsets[find_line(byte_offset)]
    end

    # Returns the byte offset of the end of the line corresponding to the given
    # byte offset.
    def line_end(byte_offset)
      offsets[find_line(byte_offset) + 1] || source.bytesize
    end

    # Return the column number for the given byte offset.
    def column(byte_offset)
      byte_offset - line_start(byte_offset)
    end

    # Return the character offset for the given byte offset.
    def character_offset(byte_offset)
      (source.byteslice(0, byte_offset) or raise).length
    end

    # Return the column number in characters for the given byte offset.
    def character_column(byte_offset)
      character_offset(byte_offset) - character_offset(line_start(byte_offset))
    end

    # Returns the offset from the start of the file for the given byte offset
    # counting in code units for the given encoding.
    #
    # This method is tested with UTF-8, UTF-16, and UTF-32. If there is the
    # concept of code units that differs from the number of characters in other
    # encodings, it is not captured here.
    #
    # We purposefully replace invalid and undefined characters with replacement
    # characters in this conversion. This happens for two reasons. First, it's
    # possible that the given byte offset will not occur on a character
    # boundary. Second, it's possible that the source code will contain a
    # character that has no equivalent in the given encoding.
    def code_units_offset(byte_offset, encoding)
      byteslice = (source.byteslice(0, byte_offset) or raise).encode(encoding, invalid: :replace, undef: :replace)

      if encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE
        byteslice.bytesize / 2
      else
        byteslice.length
      end
    end

    # Generate a cache that targets a specific encoding for calculating code
    # unit offsets.
    def code_units_cache(encoding)
      CodeUnitsCache.new(source, encoding)
    end

    # Returns the column number in code units for the given encoding for the
    # given byte offset.
    def code_units_column(byte_offset, encoding)
      code_units_offset(byte_offset, encoding) - code_units_offset(line_start(byte_offset), encoding)
    end

    private

    # Binary search through the offsets to find the line number for the given
    # byte offset.
    def find_line(byte_offset)
      left = 0
      right = offsets.length - 1

      while left <= right
        mid = left + (right - left) / 2
        return mid if (offset = offsets[mid]) == byte_offset

        if offset < byte_offset
          left = mid + 1
        else
          right = mid - 1
        end
      end

      left - 1
    end
  end

  # A cache that can be used to quickly compute code unit offsets from byte
  # offsets. It purposefully provides only a single #[] method to access the
  # cache in order to minimize surface area.
  #
  # Note that there are some known issues here that may or may not be addressed
  # in the future:
  #
  # * The first is that there are issues when the cache computes values that are
  #   not on character boundaries. This can result in subsequent computations
  #   being off by one or more code units.
  # * The second is that this cache is currently unbounded. In theory we could
  #   introduce some kind of LRU cache to limit the number of entries, but this
  #   has not yet been implemented.
  #
  class CodeUnitsCache
    class UTF16Counter # :nodoc:
      def initialize(source, encoding)
        @source = source
        @encoding = encoding
      end

      def count(byte_offset, byte_length)
        @source.byteslice(byte_offset, byte_length).encode(@encoding, invalid: :replace, undef: :replace).bytesize / 2
      end
    end

    class LengthCounter # :nodoc:
      def initialize(source, encoding)
        @source = source
        @encoding = encoding
      end

      def count(byte_offset, byte_length)
        @source.byteslice(byte_offset, byte_length).encode(@encoding, invalid: :replace, undef: :replace).length
      end
    end

    private_constant :UTF16Counter, :LengthCounter

    # Initialize a new cache with the given source and encoding.
    def initialize(source, encoding)
      @source = source
      @counter =
        if encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE
          UTF16Counter.new(source, encoding)
        else
          LengthCounter.new(source, encoding)
        end

      @cache = {} #: Hash[Integer, Integer]
      @offsets = [] #: Array[Integer]
    end

    # Retrieve the code units offset from the given byte offset.
    def [](byte_offset)
      @cache[byte_offset] ||=
        if (index = @offsets.bsearch_index { |offset| offset > byte_offset }).nil?
          @offsets << byte_offset
          @counter.count(0, byte_offset)
        elsif index == 0
          @offsets.unshift(byte_offset)
          @counter.count(0, byte_offset)
        else
          @offsets.insert(index, byte_offset)
          offset = @offsets[index - 1]
          @cache[offset] + @counter.count(offset, byte_offset - offset)
        end
    end
  end

  # Specialized version of Prism::Source for source code that includes ASCII
  # characters only. This class is used to apply performance optimizations that
  # cannot be applied to sources that include multibyte characters.
  #
  # In the extremely rare case that a source includes multi-byte characters but
  # is marked as binary because of a magic encoding comment and it cannot be
  # eagerly converted to UTF-8, this class will be used as well. This is because
  # at that point we will treat everything as single-byte characters.
  class ASCIISource < Source
    # Return the character offset for the given byte offset.
    def character_offset(byte_offset)
      byte_offset
    end

    # Return the column number in characters for the given byte offset.
    def character_column(byte_offset)
      byte_offset - line_start(byte_offset)
    end

    # Returns the offset from the start of the file for the given byte offset
    # counting in code units for the given encoding.
    #
    # This method is tested with UTF-8, UTF-16, and UTF-32. If there is the
    # concept of code units that differs from the number of characters in other
    # encodings, it is not captured here.
    def code_units_offset(byte_offset, encoding)
      byte_offset
    end

    # Returns a cache that is the identity function in order to maintain the
    # same interface. We can do this because code units are always equivalent to
    # byte offsets for ASCII-only sources.
    def code_units_cache(encoding)
      ->(byte_offset) { byte_offset }
    end

    # Specialized version of `code_units_column` that does not depend on
    # `code_units_offset`, which is a more expensive operation. This is
    # essentially the same as `Prism::Source#column`.
    def code_units_column(byte_offset, encoding)
      byte_offset - line_start(byte_offset)
    end
  end

  # This represents a location in the source.
  class Location
    # A Source object that is used to determine more information from the given
    # offset and length.
    attr_reader :source
    protected :source

    # The byte offset from the beginning of the source where this location
    # starts.
    attr_reader :start_offset

    # The length of this location in bytes.
    attr_reader :length

    # Create a new location object with the given source, start byte offset, and
    # byte length.
    def initialize(source, start_offset, length)
      @source = source
      @start_offset = start_offset
      @length = length

      # These are used to store comments that are associated with this location.
      # They are initialized to `nil` to save on memory when there are no
      # comments to be attached and/or the comment-related APIs are not used.
      @leading_comments = nil
      @trailing_comments = nil
    end

    # These are the comments that are associated with this location that exist
    # before the start of this location.
    def leading_comments
      @leading_comments ||= []
    end

    # Attach a comment to the leading comments of this location.
    def leading_comment(comment)
      leading_comments << comment
    end

    # These are the comments that are associated with this location that exist
    # after the end of this location.
    def trailing_comments
      @trailing_comments ||= []
    end

    # Attach a comment to the trailing comments of this location.
    def trailing_comment(comment)
      trailing_comments << comment
    end

    # Returns all comments that are associated with this location (both leading
    # and trailing comments).
    def comments
      [*@leading_comments, *@trailing_comments]
    end

    # Create a new location object with the given options.
    def copy(source: self.source, start_offset: self.start_offset, length: self.length)
      Location.new(source, start_offset, length)
    end

    # Returns a new location that is the result of chopping off the last byte.
    def chop
      copy(length: length == 0 ? length : length - 1)
    end

    # Returns a string representation of this location.
    def inspect
      "#<Prism::Location @start_offset=#{@start_offset} @length=#{@length} start_line=#{start_line}>"
    end

    # Returns all of the lines of the source code associated with this location.
    def source_lines
      source.lines
    end

    # The source code that this location represents.
    def slice
      source.slice(start_offset, length)
    end

    # The source code that this location represents starting from the beginning
    # of the line that this location starts on to the end of the line that this
    # location ends on.
    def slice_lines
      line_start = source.line_start(start_offset)
      line_end = source.line_end(end_offset)
      source.slice(line_start, line_end - line_start)
    end

    # The character offset from the beginning of the source where this location
    # starts.
    def start_character_offset
      source.character_offset(start_offset)
    end

    # The offset from the start of the file in code units of the given encoding.
    def start_code_units_offset(encoding = Encoding::UTF_16LE)
      source.code_units_offset(start_offset, encoding)
    end

    # The start offset from the start of the file in code units using the given
    # cache to fetch or calculate the value.
    def cached_start_code_units_offset(cache)
      cache[start_offset]
    end

    # The byte offset from the beginning of the source where this location ends.
    def end_offset
      start_offset + length
    end

    # The character offset from the beginning of the source where this location
    # ends.
    def end_character_offset
      source.character_offset(end_offset)
    end

    # The offset from the start of the file in code units of the given encoding.
    def end_code_units_offset(encoding = Encoding::UTF_16LE)
      source.code_units_offset(end_offset, encoding)
    end

    # The end offset from the start of the file in code units using the given
    # cache to fetch or calculate the value.
    def cached_end_code_units_offset(cache)
      cache[end_offset]
    end

    # The line number where this location starts.
    def start_line
      source.line(start_offset)
    end

    # The content of the line where this location starts before this location.
    def start_line_slice
      offset = source.line_start(start_offset)
      source.slice(offset, start_offset - offset)
    end

    # The line number where this location ends.
    def end_line
      source.line(end_offset)
    end

    # The column number in bytes where this location starts from the start of
    # the line.
    def start_column
      source.column(start_offset)
    end

    # The column number in characters where this location ends from the start of
    # the line.
    def start_character_column
      source.character_column(start_offset)
    end

    # The column number in code units of the given encoding where this location
    # starts from the start of the line.
    def start_code_units_column(encoding = Encoding::UTF_16LE)
      source.code_units_column(start_offset, encoding)
    end

    # The start column in code units using the given cache to fetch or calculate
    # the value.
    def cached_start_code_units_column(cache)
      cache[start_offset] - cache[source.line_start(start_offset)]
    end

    # The column number in bytes where this location ends from the start of the
    # line.
    def end_column
      source.column(end_offset)
    end

    # The column number in characters where this location ends from the start of
    # the line.
    def end_character_column
      source.character_column(end_offset)
    end

    # The column number in code units of the given encoding where this location
    # ends from the start of the line.
    def end_code_units_column(encoding = Encoding::UTF_16LE)
      source.code_units_column(end_offset, encoding)
    end

    # The end column in code units using the given cache to fetch or calculate
    # the value.
    def cached_end_code_units_column(cache)
      cache[end_offset] - cache[source.line_start(end_offset)]
    end

    # Implement the hash pattern matching interface for Location.
    def deconstruct_keys(keys)
      { start_offset: start_offset, end_offset: end_offset }
    end

    # Implement the pretty print interface for Location.
    def pretty_print(q)
      q.text("(#{start_line},#{start_column})-(#{end_line},#{end_column})")
    end

    # Returns true if the given other location is equal to this location.
    def ==(other)
      Location === other &&
        other.start_offset == start_offset &&
        other.end_offset == end_offset
    end

    # Returns a new location that stretches from this location to the given
    # other location. Raises an error if this location is not before the other
    # location or if they don't share the same source.
    def join(other)
      raise "Incompatible sources" if source != other.source
      raise "Incompatible locations" if start_offset > other.start_offset

      Location.new(source, start_offset, other.end_offset - start_offset)
    end

    # Join this location with the first occurrence of the string in the source
    # that occurs after this location on the same line, and return the new
    # location. This will raise an error if the string does not exist.
    def adjoin(string)
      line_suffix = source.slice(end_offset, source.line_end(end_offset) - end_offset)

      line_suffix_index = line_suffix.byteindex(string)
      raise "Could not find #{string}" if line_suffix_index.nil?

      Location.new(source, start_offset, length + line_suffix_index + string.bytesize)
    end
  end

  # This represents a comment that was encountered during parsing. It is the
  # base class for all comment types.
  class Comment
    # The location of this comment in the source.
    attr_reader :location

    # Create a new comment object with the given location.
    def initialize(location)
      @location = location
    end

    # Implement the hash pattern matching interface for Comment.
    def deconstruct_keys(keys)
      { location: location }
    end

    # Returns the content of the comment by slicing it from the source code.
    def slice
      location.slice
    end
  end

  # InlineComment objects are the most common. They correspond to comments in
  # the source file like this one that start with #.
  class InlineComment < Comment
    # Returns true if this comment happens on the same line as other code and
    # false if the comment is by itself.
    def trailing?
      !location.start_line_slice.strip.empty?
    end

    # Returns a string representation of this comment.
    def inspect
      "#<Prism::InlineComment @location=#{location.inspect}>"
    end
  end

  # EmbDocComment objects correspond to comments that are surrounded by =begin
  # and =end.
  class EmbDocComment < Comment
    # This can only be true for inline comments.
    def trailing?
      false
    end

    # Returns a string representation of this comment.
    def inspect
      "#<Prism::EmbDocComment @location=#{location.inspect}>"
    end
  end

  # This represents a magic comment that was encountered during parsing.
  class MagicComment
    # A Location object representing the location of the key in the source.
    attr_reader :key_loc

    # A Location object representing the location of the value in the source.
    attr_reader :value_loc

    # Create a new magic comment object with the given key and value locations.
    def initialize(key_loc, value_loc)
      @key_loc = key_loc
      @value_loc = value_loc
    end

    # Returns the key of the magic comment by slicing it from the source code.
    def key
      key_loc.slice
    end

    # Returns the value of the magic comment by slicing it from the source code.
    def value
      value_loc.slice
    end

    # Implement the hash pattern matching interface for MagicComment.
    def deconstruct_keys(keys)
      { key_loc: key_loc, value_loc: value_loc }
    end

    # Returns a string representation of this magic comment.
    def inspect
      "#<Prism::MagicComment @key=#{key.inspect} @value=#{value.inspect}>"
    end
  end

  # This represents an error that was encountered during parsing.
  class ParseError
    # The type of error. This is an _internal_ symbol that is used for
    # communicating with translation layers. It is not meant to be public API.
    attr_reader :type

    # The message associated with this error.
    attr_reader :message

    # A Location object representing the location of this error in the source.
    attr_reader :location

    # The level of this error.
    attr_reader :level

    # Create a new error object with the given message and location.
    def initialize(type, message, location, level)
      @type = type
      @message = message
      @location = location
      @level = level
    end

    # Implement the hash pattern matching interface for ParseError.
    def deconstruct_keys(keys)
      { type: type, message: message, location: location, level: level }
    end

    # Returns a string representation of this error.
    def inspect
      "#<Prism::ParseError @type=#{@type.inspect} @message=#{@message.inspect} @location=#{@location.inspect} @level=#{@level.inspect}>"
    end
  end

  # This represents a warning that was encountered during parsing.
  class ParseWarning
    # The type of warning. This is an _internal_ symbol that is used for
    # communicating with translation layers. It is not meant to be public API.
    attr_reader :type

    # The message associated with this warning.
    attr_reader :message

    # A Location object representing the location of this warning in the source.
    attr_reader :location

    # The level of this warning.
    attr_reader :level

    # Create a new warning object with the given message and location.
    def initialize(type, message, location, level)
      @type = type
      @message = message
      @location = location
      @level = level
    end

    # Implement the hash pattern matching interface for ParseWarning.
    def deconstruct_keys(keys)
      { type: type, message: message, location: location, level: level }
    end

    # Returns a string representation of this warning.
    def inspect
      "#<Prism::ParseWarning @type=#{@type.inspect} @message=#{@message.inspect} @location=#{@location.inspect} @level=#{@level.inspect}>"
    end
  end

  # This represents the result of a call to ::parse or ::parse_file. It contains
  # the requested structure, any comments that were encounters, and any errors
  # that were encountered.
  class Result
    # The list of comments that were encountered during parsing.
    attr_reader :comments

    # The list of magic comments that were encountered during parsing.
    attr_reader :magic_comments

    # An optional location that represents the location of the __END__ marker
    # and the rest of the content of the file. This content is loaded into the
    # DATA constant when the file being parsed is the main file being executed.
    attr_reader :data_loc

    # The list of errors that were generated during parsing.
    attr_reader :errors

    # The list of warnings that were generated during parsing.
    attr_reader :warnings

    # A Source instance that represents the source code that was parsed.
    attr_reader :source

    # Create a new result object with the given values.
    def initialize(comments, magic_comments, data_loc, errors, warnings, source)
      @comments = comments
      @magic_comments = magic_comments
      @data_loc = data_loc
      @errors = errors
      @warnings = warnings
      @source = source
    end

    # Implement the hash pattern matching interface for Result.
    def deconstruct_keys(keys)
      { comments: comments, magic_comments: magic_comments, data_loc: data_loc, errors: errors, warnings: warnings }
    end

    # Returns the encoding of the source code that was parsed.
    def encoding
      source.encoding
    end

    # Returns true if there were no errors during parsing and false if there
    # were.
    def success?
      errors.empty?
    end

    # Returns true if there were errors during parsing and false if there were
    # not.
    def failure?
      !success?
    end

    # Create a code units cache for the given encoding.
    def code_units_cache(encoding)
      source.code_units_cache(encoding)
    end
  end

  # This is a result specific to the `parse` and `parse_file` methods.
  class ParseResult < Result
    autoload :Comments, "prism/parse_result/comments"
    autoload :Errors, "prism/parse_result/errors"
    autoload :Newlines, "prism/parse_result/newlines"

    private_constant :Comments
    private_constant :Errors
    private_constant :Newlines

    # The syntax tree that was parsed from the source code.
    attr_reader :value

    # Create a new parse result object with the given values.
    def initialize(value, comments, magic_comments, data_loc, errors, warnings, source)
      @value = value
      super(comments, magic_comments, data_loc, errors, warnings, source)
    end

    # Implement the hash pattern matching interface for ParseResult.
    def deconstruct_keys(keys)
      super.merge!(value: value)
    end

    # Attach the list of comments to their respective locations in the tree.
    def attach_comments!
      Comments.new(self).attach! # steep:ignore
    end

    # Walk the tree and mark nodes that are on a new line, loosely emulating
    # the behavior of CRuby's `:line` tracepoint event.
    def mark_newlines!
      value.accept(Newlines.new(source.offsets.size)) # steep:ignore
    end

    # Returns a string representation of the syntax tree with the errors
    # displayed inline.
    def errors_format
      Errors.new(self).format
    end
  end

  # This is a result specific to the `lex` and `lex_file` methods.
  class LexResult < Result
    # The list of tokens that were parsed from the source code.
    attr_reader :value

    # Create a new lex result object with the given values.
    def initialize(value, comments, magic_comments, data_loc, errors, warnings, source)
      @value = value
      super(comments, magic_comments, data_loc, errors, warnings, source)
    end

    # Implement the hash pattern matching interface for LexResult.
    def deconstruct_keys(keys)
      super.merge!(value: value)
    end
  end

  # This is a result specific to the `parse_lex` and `parse_lex_file` methods.
  class ParseLexResult < Result
    # A tuple of the syntax tree and the list of tokens that were parsed from
    # the source code.
    attr_reader :value

    # Create a new parse lex result object with the given values.
    def initialize(value, comments, magic_comments, data_loc, errors, warnings, source)
      @value = value
      super(comments, magic_comments, data_loc, errors, warnings, source)
    end

    # Implement the hash pattern matching interface for ParseLexResult.
    def deconstruct_keys(keys)
      super.merge!(value: value)
    end
  end

  # This represents a token from the Ruby source.
  class Token
    # The Source object that represents the source this token came from.
    attr_reader :source
    private :source

    # The type of token that this token is.
    attr_reader :type

    # A byteslice of the source that this token represents.
    attr_reader :value

    # Create a new token object with the given type, value, and location.
    def initialize(source, type, value, location)
      @source = source
      @type = type
      @value = value
      @location = location
    end

    # Implement the hash pattern matching interface for Token.
    def deconstruct_keys(keys)
      { type: type, value: value, location: location }
    end

    # A Location object representing the location of this token in the source.
    def location
      location = @location
      return location if location.is_a?(Location)
      @location = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Implement the pretty print interface for Token.
    def pretty_print(q)
      q.group do
        q.text(type.to_s)
        self.location.pretty_print(q)
        q.text("(")
        q.nest(2) do
          q.breakable("")
          q.pp(value)
        end
        q.breakable("")
        q.text(")")
      end
    end

    # Returns true if the given other token is equal to this token.
    def ==(other)
      Token === other &&
        other.type == type &&
        other.value == value
    end

    # Returns a string representation of this token.
    def inspect
      location
      super
    end
  end
end
PK*J[W��9�I�Ishare/ruby/prism/ffi.rbnu�[���# frozen_string_literal: true
# typed: ignore

# This file is responsible for mirroring the API provided by the C extension by
# using FFI to call into the shared library.

require "rbconfig"
require "ffi"

module Prism
  module LibRubyParser # :nodoc:
    extend FFI::Library

    # Define the library that we will be pulling functions from. Note that this
    # must align with the build shared library from make/rake.
    libprism_in_build = File.expand_path("../../build/libprism.#{RbConfig::CONFIG["SOEXT"]}", __dir__)
    libprism_in_libdir = "#{RbConfig::CONFIG["libdir"]}/prism/libprism.#{RbConfig::CONFIG["SOEXT"]}"
    if File.exist? libprism_in_build
      INCLUDE_DIR = File.expand_path("../../include", __dir__)
      ffi_lib libprism_in_build
    else
      INCLUDE_DIR = "#{RbConfig::CONFIG["libdir"]}/prism/include"
      ffi_lib libprism_in_libdir
    end

    # Convert a native C type declaration into a symbol that FFI understands.
    # For example:
    #
    #     const char * -> :pointer
    #     bool         -> :bool
    #     size_t       -> :size_t
    #     void         -> :void
    #
    def self.resolve_type(type, callbacks)
      type = type.strip

      if !type.end_with?("*")
        type.delete_prefix("const ").to_sym
      else
        type = type.delete_suffix("*").rstrip
        callbacks.include?(type.to_sym) ? type.to_sym : :pointer
      end
    end

    # Read through the given header file and find the declaration of each of the
    # given functions. For each one, define a function with the same name and
    # signature as the C function.
    def self.load_exported_functions_from(header, *functions, callbacks)
      File.foreach("#{INCLUDE_DIR}/#{header}") do |line|
        # We only want to attempt to load exported functions.
        next unless line.start_with?("PRISM_EXPORTED_FUNCTION ")

        # We only want to load the functions that we are interested in.
        next unless functions.any? { |function| line.include?(function) }

        # Parse the function declaration.
        unless /^PRISM_EXPORTED_FUNCTION (?<return_type>.+) (?<name>\w+)\((?<arg_types>.+)\);$/ =~ line
          raise "Could not parse #{line}"
        end

        # Delete the function from the list of functions we are looking for to
        # mark it as having been found.
        functions.delete(name)

        # Split up the argument types into an array, ensure we handle the case
        # where there are no arguments (by explicit void).
        arg_types = arg_types.split(",").map(&:strip)
        arg_types = [] if arg_types == %w[void]

        # Resolve the type of the argument by dropping the name of the argument
        # first if it is present.
        arg_types.map! { |type| resolve_type(type.sub(/\w+$/, ""), callbacks) }

        # Attach the function using the FFI library.
        attach_function name, arg_types, resolve_type(return_type, [])
      end

      # If we didn't find all of the functions, raise an error.
      raise "Could not find functions #{functions.inspect}" unless functions.empty?
    end

    callback :pm_parse_stream_fgets_t, [:pointer, :int, :pointer], :pointer
    enum :pm_string_init_result_t, %i[PM_STRING_INIT_SUCCESS PM_STRING_INIT_ERROR_GENERIC PM_STRING_INIT_ERROR_DIRECTORY]
    enum :pm_string_query_t, [:PM_STRING_QUERY_ERROR, -1, :PM_STRING_QUERY_FALSE, :PM_STRING_QUERY_TRUE]

    load_exported_functions_from(
      "prism.h",
      "pm_version",
      "pm_serialize_parse",
      "pm_serialize_parse_stream",
      "pm_serialize_parse_comments",
      "pm_serialize_lex",
      "pm_serialize_parse_lex",
      "pm_parse_success_p",
      "pm_string_query_local",
      "pm_string_query_constant",
      "pm_string_query_method_name",
      [:pm_parse_stream_fgets_t]
    )

    load_exported_functions_from(
      "prism/util/pm_buffer.h",
      "pm_buffer_sizeof",
      "pm_buffer_init",
      "pm_buffer_value",
      "pm_buffer_length",
      "pm_buffer_free",
      []
    )

    load_exported_functions_from(
      "prism/util/pm_string.h",
      "pm_string_mapped_init",
      "pm_string_free",
      "pm_string_source",
      "pm_string_length",
      "pm_string_sizeof",
      []
    )

    # This object represents a pm_buffer_t. We only use it as an opaque pointer,
    # so it doesn't need to know the fields of pm_buffer_t.
    class PrismBuffer # :nodoc:
      SIZEOF = LibRubyParser.pm_buffer_sizeof

      attr_reader :pointer

      def initialize(pointer)
        @pointer = pointer
      end

      def value
        LibRubyParser.pm_buffer_value(pointer)
      end

      def length
        LibRubyParser.pm_buffer_length(pointer)
      end

      def read
        value.read_string(length)
      end

      # Initialize a new buffer and yield it to the block. The buffer will be
      # automatically freed when the block returns.
      def self.with
        FFI::MemoryPointer.new(SIZEOF) do |pointer|
          raise unless LibRubyParser.pm_buffer_init(pointer)
          return yield new(pointer)
        ensure
          LibRubyParser.pm_buffer_free(pointer)
        end
      end
    end

    # This object represents a pm_string_t. We only use it as an opaque pointer,
    # so it doesn't have to be an FFI::Struct.
    class PrismString # :nodoc:
      SIZEOF = LibRubyParser.pm_string_sizeof

      attr_reader :pointer, :length

      def initialize(pointer, length, from_string)
        @pointer = pointer
        @length = length
        @from_string = from_string
      end

      def read
        raise "should use the original String instead" if @from_string
        @pointer.read_string(@length)
      end

      # Yields a pm_string_t pointer to the given block.
      def self.with_string(string)
        raise TypeError unless string.is_a?(String)

        length = string.bytesize
        # + 1 to never get an address of 0, which pm_parser_init() asserts
        FFI::MemoryPointer.new(:char, length + 1, false) do |pointer|
          pointer.write_string(string)
          # since we have the extra byte we might as well \0-terminate
          pointer.put_char(length, 0)
          return yield new(pointer, length, true)
        end
      end

      # Yields a pm_string_t pointer to the given block.
      def self.with_file(filepath)
        raise TypeError unless filepath.is_a?(String)

        # On Windows and Mac, it's expected that filepaths will be encoded in
        # UTF-8. If they are not, we need to convert them to UTF-8 before
        # passing them into pm_string_mapped_init.
        if RbConfig::CONFIG["host_os"].match?(/bccwin|cygwin|djgpp|mingw|mswin|wince|darwin/i) &&
           (encoding = filepath.encoding) != Encoding::ASCII_8BIT && encoding != Encoding::UTF_8
          filepath = filepath.encode(Encoding::UTF_8)
        end

        FFI::MemoryPointer.new(SIZEOF) do |pm_string|
          case (result = LibRubyParser.pm_string_mapped_init(pm_string, filepath))
          when :PM_STRING_INIT_SUCCESS
            pointer = LibRubyParser.pm_string_source(pm_string)
            length = LibRubyParser.pm_string_length(pm_string)
            return yield new(pointer, length, false)
          when :PM_STRING_INIT_ERROR_GENERIC
            raise SystemCallError.new(filepath, FFI.errno)
          when :PM_STRING_INIT_ERROR_DIRECTORY
            raise Errno::EISDIR.new(filepath)
          else
            raise "Unknown error initializing pm_string_t: #{result.inspect}"
          end
        ensure
          LibRubyParser.pm_string_free(pm_string)
        end
      end
    end
  end

  # Mark the LibRubyParser module as private as it should only be called through
  # the prism module.
  private_constant :LibRubyParser

  # The version constant is set by reading the result of calling pm_version.
  VERSION = LibRubyParser.pm_version.read_string

  class << self
    # Mirror the Prism.dump API by using the serialization API.
    def dump(source, **options)
      LibRubyParser::PrismString.with_string(source) { |string| dump_common(string, options) }
    end

    # Mirror the Prism.dump_file API by using the serialization API.
    def dump_file(filepath, **options)
      options[:filepath] = filepath
      LibRubyParser::PrismString.with_file(filepath) { |string| dump_common(string, options) }
    end

    # Mirror the Prism.lex API by using the serialization API.
    def lex(code, **options)
      LibRubyParser::PrismString.with_string(code) { |string| lex_common(string, code, options) }
    end

    # Mirror the Prism.lex_file API by using the serialization API.
    def lex_file(filepath, **options)
      options[:filepath] = filepath
      LibRubyParser::PrismString.with_file(filepath) { |string| lex_common(string, string.read, options) }
    end

    # Mirror the Prism.parse API by using the serialization API.
    def parse(code, **options)
      LibRubyParser::PrismString.with_string(code) { |string| parse_common(string, code, options) }
    end

    # Mirror the Prism.parse_file API by using the serialization API. This uses
    # native strings instead of Ruby strings because it allows us to use mmap
    # when it is available.
    def parse_file(filepath, **options)
      options[:filepath] = filepath
      LibRubyParser::PrismString.with_file(filepath) { |string| parse_common(string, string.read, options) }
    end

    # Mirror the Prism.parse_stream API by using the serialization API.
    def parse_stream(stream, **options)
      LibRubyParser::PrismBuffer.with do |buffer|
        source = +""
        callback = -> (string, size, _) {
          raise "Expected size to be >= 0, got: #{size}" if size <= 0

          if !(line = stream.gets(size - 1)).nil?
            source << line
            string.write_string("#{line}\x00", line.bytesize + 1)
          end
        }

        # In the pm_serialize_parse_stream function it accepts a pointer to the
        # IO object as a void* and then passes it through to the callback as the
        # third argument, but it never touches it itself. As such, since we have
        # access to the IO object already through the closure of the lambda, we
        # can pass a null pointer here and not worry.
        LibRubyParser.pm_serialize_parse_stream(buffer.pointer, nil, callback, dump_options(options))
        Prism.load(source, buffer.read)
      end
    end

    # Mirror the Prism.parse_comments API by using the serialization API.
    def parse_comments(code, **options)
      LibRubyParser::PrismString.with_string(code) { |string| parse_comments_common(string, code, options) }
    end

    # Mirror the Prism.parse_file_comments API by using the serialization
    # API. This uses native strings instead of Ruby strings because it allows us
    # to use mmap when it is available.
    def parse_file_comments(filepath, **options)
      options[:filepath] = filepath
      LibRubyParser::PrismString.with_file(filepath) { |string| parse_comments_common(string, string.read, options) }
    end

    # Mirror the Prism.parse_lex API by using the serialization API.
    def parse_lex(code, **options)
      LibRubyParser::PrismString.with_string(code) { |string| parse_lex_common(string, code, options) }
    end

    # Mirror the Prism.parse_lex_file API by using the serialization API.
    def parse_lex_file(filepath, **options)
      options[:filepath] = filepath
      LibRubyParser::PrismString.with_file(filepath) { |string| parse_lex_common(string, string.read, options) }
    end

    # Mirror the Prism.parse_success? API by using the serialization API.
    def parse_success?(code, **options)
      LibRubyParser::PrismString.with_string(code) { |string| parse_file_success_common(string, options) }
    end

    # Mirror the Prism.parse_failure? API by using the serialization API.
    def parse_failure?(code, **options)
      !parse_success?(code, **options)
    end

    # Mirror the Prism.parse_file_success? API by using the serialization API.
    def parse_file_success?(filepath, **options)
      options[:filepath] = filepath
      LibRubyParser::PrismString.with_file(filepath) { |string| parse_file_success_common(string, options) }
    end

    # Mirror the Prism.parse_file_failure? API by using the serialization API.
    def parse_file_failure?(filepath, **options)
      !parse_file_success?(filepath, **options)
    end

    # Mirror the Prism.profile API by using the serialization API.
    def profile(source, **options)
      LibRubyParser::PrismString.with_string(source) do |string|
        LibRubyParser::PrismBuffer.with do |buffer|
          LibRubyParser.pm_serialize_parse(buffer.pointer, string.pointer, string.length, dump_options(options))
          nil
        end
      end
    end

    # Mirror the Prism.profile_file API by using the serialization API.
    def profile_file(filepath, **options)
      LibRubyParser::PrismString.with_file(filepath) do |string|
        LibRubyParser::PrismBuffer.with do |buffer|
          options[:filepath] = filepath
          LibRubyParser.pm_serialize_parse(buffer.pointer, string.pointer, string.length, dump_options(options))
          nil
        end
      end
    end

    private

    def dump_common(string, options) # :nodoc:
      LibRubyParser::PrismBuffer.with do |buffer|
        LibRubyParser.pm_serialize_parse(buffer.pointer, string.pointer, string.length, dump_options(options))
        buffer.read
      end
    end

    def lex_common(string, code, options) # :nodoc:
      serialized = LibRubyParser::PrismBuffer.with do |buffer|
        LibRubyParser.pm_serialize_lex(buffer.pointer, string.pointer, string.length, dump_options(options))
        buffer.read
      end

      Serialize.load_tokens(Source.for(code), serialized)
    end

    def parse_common(string, code, options) # :nodoc:
      serialized = dump_common(string, options)
      Prism.load(code, serialized)
    end

    def parse_comments_common(string, code, options) # :nodoc:
      LibRubyParser::PrismBuffer.with do |buffer|
        LibRubyParser.pm_serialize_parse_comments(buffer.pointer, string.pointer, string.length, dump_options(options))

        source = Source.for(code)
        loader = Serialize::Loader.new(source, buffer.read)

        loader.load_header
        loader.load_encoding
        loader.load_start_line
        loader.load_comments
      end
    end

    def parse_lex_common(string, code, options) # :nodoc:
      LibRubyParser::PrismBuffer.with do |buffer|
        LibRubyParser.pm_serialize_parse_lex(buffer.pointer, string.pointer, string.length, dump_options(options))

        source = Source.for(code)
        loader = Serialize::Loader.new(source, buffer.read)

        tokens = loader.load_tokens
        node, comments, magic_comments, data_loc, errors, warnings = loader.load_nodes
        tokens.each { |token,| token.value.force_encoding(loader.encoding) }

        ParseLexResult.new([node, tokens], comments, magic_comments, data_loc, errors, warnings, source)
      end
    end

    def parse_file_success_common(string, options) # :nodoc:
      LibRubyParser.pm_parse_success_p(string.pointer, string.length, dump_options(options))
    end

    # Return the value that should be dumped for the command_line option.
    def dump_options_command_line(options)
      command_line = options.fetch(:command_line, "")
      raise ArgumentError, "command_line must be a string" unless command_line.is_a?(String)

      command_line.each_char.inject(0) do |value, char|
        case char
        when "a" then value | 0b000001
        when "e" then value | 0b000010
        when "l" then value | 0b000100
        when "n" then value | 0b001000
        when "p" then value | 0b010000
        when "x" then value | 0b100000
        else raise ArgumentError, "invalid command_line option: #{char}"
        end
      end
    end

    # Return the value that should be dumped for the version option.
    def dump_options_version(version)
      case version
      when nil, "latest"
        0
      when /\A3\.3(\.\d+)?\z/
        1
      when /\A3\.4(\.\d+)?\z/
        0
      else
        raise ArgumentError, "invalid version: #{version}"
      end
    end

    # Convert the given options into a serialized options string.
    def dump_options(options)
      template = +""
      values = []

      template << "L"
      if (filepath = options[:filepath])
        values.push(filepath.bytesize, filepath.b)
        template << "A*"
      else
        values << 0
      end

      template << "l"
      values << options.fetch(:line, 1)

      template << "L"
      if (encoding = options[:encoding])
        name = encoding.is_a?(Encoding) ? encoding.name : encoding
        values.push(name.bytesize, name.b)
        template << "A*"
      else
        values << 0
      end

      template << "C"
      values << (options.fetch(:frozen_string_literal, false) ? 1 : 0)

      template << "C"
      values << dump_options_command_line(options)

      template << "C"
      values << dump_options_version(options[:version])

      template << "C"
      values << (options[:encoding] == false ? 1 : 0)

      template << "C"
      values << (options.fetch(:main_script, false) ? 1 : 0)

      template << "C"
      values << (options.fetch(:partial_script, false) ? 1 : 0)

      template << "L"
      if (scopes = options[:scopes])
        values << scopes.length

        scopes.each do |scope|
          template << "L"
          values << scope.length

          scope.each do |local|
            name = local.name
            template << "L"
            values << name.bytesize

            template << "A*"
            values << name.b
          end
        end
      else
        values << 0
      end

      values.pack(template)
    end
  end

  # Here we are going to patch StringQuery to put in the class-level methods so
  # that it can maintain a consistent interface
  class StringQuery
    class << self
      # Mirrors the C extension's StringQuery::local? method.
      def local?(string)
        query(LibRubyParser.pm_string_query_local(string, string.bytesize, string.encoding.name))
      end

      # Mirrors the C extension's StringQuery::constant? method.
      def constant?(string)
        query(LibRubyParser.pm_string_query_constant(string, string.bytesize, string.encoding.name))
      end

      # Mirrors the C extension's StringQuery::method_name? method.
      def method_name?(string)
        query(LibRubyParser.pm_string_query_method_name(string, string.bytesize, string.encoding.name))
      end

      private

      # Parse the enum result and return an appropriate boolean.
      def query(result)
        case result
        when :PM_STRING_QUERY_ERROR
          raise ArgumentError, "Invalid or non ascii-compatible encoding"
        when :PM_STRING_QUERY_FALSE
          false
        when :PM_STRING_QUERY_TRUE
          true
        end
      end
    end
  end
end
PK*J[���W��'share/ruby/prism/parse_result/errors.rbnu�[���# frozen_string_literal: true

require "stringio"

module Prism
  class ParseResult < Result
    # An object to represent the set of errors on a parse result. This object
    # can be used to format the errors in a human-readable way.
    class Errors
      # The parse result that contains the errors.
      attr_reader :parse_result

      # Initialize a new set of errors from the given parse result.
      def initialize(parse_result)
        @parse_result = parse_result
      end

      # Formats the errors in a human-readable way and return them as a string.
      def format
        error_lines = {} #: Hash[Integer, Array[ParseError]]
        parse_result.errors.each do |error|
          location = error.location
          (location.start_line..location.end_line).each do |line|
            error_lines[line] ||= []
            error_lines[line] << error
          end
        end

        source_lines = parse_result.source.source.lines
        source_lines << "" if error_lines.key?(source_lines.size + 1)

        io = StringIO.new
        source_lines.each.with_index(1) do |line, line_number|
          io.puts(line)

          (error_lines.delete(line_number) || []).each do |error|
            location = error.location

            case line_number
            when location.start_line
              io.print(" " * location.start_column + "^")

              if location.start_line == location.end_line
                if location.start_column != location.end_column
                  io.print("~" * (location.end_column - location.start_column - 1))
                end

                io.puts(" " + error.message)
              else
                io.puts("~" * (line.bytesize - location.start_column))
              end
            when location.end_line
              io.puts("~" * location.end_column + " " + error.message)
            else
              io.puts("~" * line.bytesize)
            end
          end
        end

        io.puts
        io.string
      end
    end
  end
end
PK*J[<_���)share/ruby/prism/parse_result/newlines.rbnu�[���# frozen_string_literal: true

module Prism
  class ParseResult < Result
    # The :line tracepoint event gets fired whenever the Ruby VM encounters an
    # expression on a new line. The types of expressions that can trigger this
    # event are:
    #
    # * if statements
    # * unless statements
    # * nodes that are children of statements lists
    #
    # In order to keep track of the newlines, we have a list of offsets that
    # come back from the parser. We assign these offsets to the first nodes that
    # we find in the tree that are on those lines.
    #
    # Note that the logic in this file should be kept in sync with the Java
    # MarkNewlinesVisitor, since that visitor is responsible for marking the
    # newlines for JRuby/TruffleRuby.
    #
    # This file is autoloaded only when `mark_newlines!` is called, so the
    # re-opening of the various nodes in this file will only be performed in
    # that case. We do that to avoid storing the extra `@newline` instance
    # variable on every node if we don't need it.
    class Newlines < Visitor
      # Create a new Newlines visitor with the given newline offsets.
      def initialize(lines)
        # @type var lines: Integer
        @lines = Array.new(1 + lines, false)
      end

      # Permit block/lambda nodes to mark newlines within themselves.
      def visit_block_node(node)
        old_lines = @lines
        @lines = Array.new(old_lines.size, false)

        begin
          super(node)
        ensure
          @lines = old_lines
        end
      end

      alias_method :visit_lambda_node, :visit_block_node

      # Mark if/unless nodes as newlines.
      def visit_if_node(node)
        node.newline_flag!(@lines)
        super(node)
      end

      alias_method :visit_unless_node, :visit_if_node

      # Permit statements lists to mark newlines within themselves.
      def visit_statements_node(node)
        node.body.each do |child|
          child.newline_flag!(@lines)
        end
        super(node)
      end
    end
  end

  class Node
    def newline_flag? # :nodoc:
      !!defined?(@newline_flag)
    end

    def newline_flag!(lines) # :nodoc:
      line = location.start_line
      unless lines[line]
        lines[line] = true
        @newline_flag = true
      end
    end
  end

  class BeginNode < Node
    def newline_flag!(lines) # :nodoc:
      # Never mark BeginNode with a newline flag, mark children instead.
    end
  end

  class ParenthesesNode < Node
    def newline_flag!(lines) # :nodoc:
      # Never mark ParenthesesNode with a newline flag, mark children instead.
    end
  end

  class IfNode < Node
    def newline_flag!(lines) # :nodoc:
      predicate.newline_flag!(lines)
    end
  end

  class UnlessNode < Node
    def newline_flag!(lines) # :nodoc:
      predicate.newline_flag!(lines)
    end
  end

  class UntilNode < Node
    def newline_flag!(lines) # :nodoc:
      predicate.newline_flag!(lines)
    end
  end

  class WhileNode < Node
    def newline_flag!(lines) # :nodoc:
      predicate.newline_flag!(lines)
    end
  end

  class RescueModifierNode < Node
    def newline_flag!(lines) # :nodoc:
      expression.newline_flag!(lines)
    end
  end

  class InterpolatedMatchLastLineNode < Node
    def newline_flag!(lines) # :nodoc:
      first = parts.first
      first.newline_flag!(lines) if first
    end
  end

  class InterpolatedRegularExpressionNode < Node
    def newline_flag!(lines) # :nodoc:
      first = parts.first
      first.newline_flag!(lines) if first
    end
  end

  class InterpolatedStringNode < Node
    def newline_flag!(lines) # :nodoc:
      first = parts.first
      first.newline_flag!(lines) if first
    end
  end

  class InterpolatedSymbolNode < Node
    def newline_flag!(lines) # :nodoc:
      first = parts.first
      first.newline_flag!(lines) if first
    end
  end

  class InterpolatedXStringNode < Node
    def newline_flag!(lines) # :nodoc:
      first = parts.first
      first.newline_flag!(lines) if first
    end
  end
end
PK*J[d_֨��)share/ruby/prism/parse_result/comments.rbnu�[���# frozen_string_literal: true

module Prism
  class ParseResult < Result
    # When we've parsed the source, we have both the syntax tree and the list of
    # comments that we found in the source. This class is responsible for
    # walking the tree and finding the nearest location to attach each comment.
    #
    # It does this by first finding the nearest locations to each comment.
    # Locations can either come from nodes directly or from location fields on
    # nodes. For example, a `ClassNode` has an overall location encompassing the
    # entire class, but it also has a location for the `class` keyword.
    #
    # Once the nearest locations are found, it determines which one to attach
    # to. If it's a trailing comment (a comment on the same line as other source
    # code), it will favor attaching to the nearest location that occurs before
    # the comment. Otherwise it will favor attaching to the nearest location
    # that is after the comment.
    class Comments
      # A target for attaching comments that is based on a specific node's
      # location.
      class NodeTarget # :nodoc:
        attr_reader :node

        def initialize(node)
          @node = node
        end

        def start_offset
          node.start_offset
        end

        def end_offset
          node.end_offset
        end

        def encloses?(comment)
          start_offset <= comment.location.start_offset &&
            comment.location.end_offset <= end_offset
        end

        def leading_comment(comment)
          node.location.leading_comment(comment)
        end

        def trailing_comment(comment)
          node.location.trailing_comment(comment)
        end
      end

      # A target for attaching comments that is based on a location field on a
      # node. For example, the `end` token of a ClassNode.
      class LocationTarget # :nodoc:
        attr_reader :location

        def initialize(location)
          @location = location
        end

        def start_offset
          location.start_offset
        end

        def end_offset
          location.end_offset
        end

        def encloses?(comment)
          false
        end

        def leading_comment(comment)
          location.leading_comment(comment)
        end

        def trailing_comment(comment)
          location.trailing_comment(comment)
        end
      end

      # The parse result that we are attaching comments to.
      attr_reader :parse_result

      # Create a new Comments object that will attach comments to the given
      # parse result.
      def initialize(parse_result)
        @parse_result = parse_result
      end

      # Attach the comments to their respective locations in the tree by
      # mutating the parse result.
      def attach!
        parse_result.comments.each do |comment|
          preceding, enclosing, following = nearest_targets(parse_result.value, comment)

          if comment.trailing?
            if preceding
              preceding.trailing_comment(comment)
            else
              (following || enclosing || NodeTarget.new(parse_result.value)).leading_comment(comment)
            end
          else
            # If a comment exists on its own line, prefer a leading comment.
            if following
              following.leading_comment(comment)
            elsif preceding
              preceding.trailing_comment(comment)
            else
              (enclosing || NodeTarget.new(parse_result.value)).leading_comment(comment)
            end
          end
        end
      end

      private

      # Responsible for finding the nearest targets to the given comment within
      # the context of the given encapsulating node.
      def nearest_targets(node, comment)
        comment_start = comment.location.start_offset
        comment_end = comment.location.end_offset

        targets = [] #: Array[_Target]
        node.comment_targets.map do |value|
          case value
          when StatementsNode
            targets.concat(value.body.map { |node| NodeTarget.new(node) })
          when Node
            targets << NodeTarget.new(value)
          when Location
            targets << LocationTarget.new(value)
          end
        end

        targets.sort_by!(&:start_offset)
        preceding = nil #: _Target?
        following = nil #: _Target?

        left = 0
        right = targets.length

        # This is a custom binary search that finds the nearest nodes to the
        # given comment. When it finds a node that completely encapsulates the
        # comment, it recurses downward into the tree.
        while left < right
          middle = (left + right) / 2
          target = targets[middle]

          target_start = target.start_offset
          target_end = target.end_offset

          if target.encloses?(comment)
            # @type var target: NodeTarget
            # The comment is completely contained by this target. Abandon the
            # binary search at this level.
            return nearest_targets(target.node, comment)
          end

          if target_end <= comment_start
            # This target falls completely before the comment. Because we will
            # never consider this target or any targets before it again, this
            # target must be the closest preceding target we have encountered so
            # far.
            preceding = target
            left = middle + 1
            next
          end

          if comment_end <= target_start
            # This target falls completely after the comment. Because we will
            # never consider this target or any targets after it again, this
            # target must be the closest following target we have encountered so
            # far.
            following = target
            right = middle
            next
          end

          # This should only happen if there is a bug in this parser.
          raise "Comment location overlaps with a target location"
        end

        [preceding, NodeTarget.new(node), following]
      end
    end
  end
end
PK*J[ �3�y'y'$share/ruby/prism/desugar_compiler.rbnu�[���# frozen_string_literal: true

module Prism
  class DesugarAndWriteNode # :nodoc:
    include DSL

    attr_reader :node, :default_source, :read_class, :write_class, :arguments

    def initialize(node, default_source, read_class, write_class, **arguments)
      @node = node
      @default_source = default_source
      @read_class = read_class
      @write_class = write_class
      @arguments = arguments
    end

    # Desugar `x &&= y` to `x && x = y`
    def compile
      and_node(
        location: node.location,
        left: public_send(read_class, location: node.name_loc, **arguments),
        right: public_send(
          write_class,
          location: node.location,
          **arguments,
          name_loc: node.name_loc,
          value: node.value,
          operator_loc: node.operator_loc
        ),
        operator_loc: node.operator_loc
      )
    end
  end

  class DesugarOrWriteDefinedNode # :nodoc:
    include DSL

    attr_reader :node, :default_source, :read_class, :write_class, :arguments

    def initialize(node, default_source, read_class, write_class, **arguments)
      @node = node
      @default_source = default_source
      @read_class = read_class
      @write_class = write_class
      @arguments = arguments
    end

    # Desugar `x ||= y` to `defined?(x) ? x : x = y`
    def compile
      if_node(
        location: node.location,
        if_keyword_loc: node.operator_loc,
        predicate: defined_node(
          location: node.name_loc,
          value: public_send(read_class, location: node.name_loc, **arguments),
          keyword_loc: node.operator_loc
        ),
        then_keyword_loc: node.operator_loc,
        statements: statements_node(
          location: node.location,
          body: [public_send(read_class, location: node.name_loc, **arguments)]
        ),
        subsequent: else_node(
          location: node.location,
          else_keyword_loc: node.operator_loc,
          statements: statements_node(
            location: node.location,
            body: [
              public_send(
                write_class,
                location: node.location,
                **arguments,
                name_loc: node.name_loc,
                value: node.value,
                operator_loc: node.operator_loc
              )
            ]
          ),
          end_keyword_loc: node.operator_loc
        ),
        end_keyword_loc: node.operator_loc
      )
    end
  end

  class DesugarOperatorWriteNode # :nodoc:
    include DSL

    attr_reader :node, :default_source, :read_class, :write_class, :arguments

    def initialize(node, default_source, read_class, write_class, **arguments)
      @node = node
      @default_source = default_source
      @read_class = read_class
      @write_class = write_class
      @arguments = arguments
    end

    # Desugar `x += y` to `x = x + y`
    def compile
      binary_operator_loc = node.binary_operator_loc.chop

      public_send(
        write_class,
        location: node.location,
        **arguments,
        name_loc: node.name_loc,
        value: call_node(
          location: node.location,
          receiver: public_send(
            read_class,
            location: node.name_loc,
            **arguments
          ),
          name: binary_operator_loc.slice.to_sym,
          message_loc: binary_operator_loc,
          arguments: arguments_node(
            location: node.value.location,
            arguments: [node.value]
          )
        ),
        operator_loc: node.binary_operator_loc.copy(
          start_offset: node.binary_operator_loc.end_offset - 1,
          length: 1
        )
      )
    end
  end

  class DesugarOrWriteNode # :nodoc:
    include DSL

    attr_reader :node, :default_source, :read_class, :write_class, :arguments

    def initialize(node, default_source, read_class, write_class, **arguments)
      @node = node
      @default_source = default_source
      @read_class = read_class
      @write_class = write_class
      @arguments = arguments
    end

    # Desugar `x ||= y` to `x || x = y`
    def compile
      or_node(
        location: node.location,
        left: public_send(read_class, location: node.name_loc, **arguments),
        right: public_send(
          write_class,
          location: node.location,
          **arguments,
          name_loc: node.name_loc,
          value: node.value,
          operator_loc: node.operator_loc
        ),
        operator_loc: node.operator_loc
      )
    end
  end

  private_constant :DesugarAndWriteNode, :DesugarOrWriteNode, :DesugarOrWriteDefinedNode, :DesugarOperatorWriteNode

  class ClassVariableAndWriteNode
    def desugar # :nodoc:
      DesugarAndWriteNode.new(self, source, :class_variable_read_node, :class_variable_write_node, name: name).compile
    end
  end

  class ClassVariableOrWriteNode
    def desugar # :nodoc:
      DesugarOrWriteDefinedNode.new(self, source, :class_variable_read_node, :class_variable_write_node, name: name).compile
    end
  end

  class ClassVariableOperatorWriteNode
    def desugar # :nodoc:
      DesugarOperatorWriteNode.new(self, source, :class_variable_read_node, :class_variable_write_node, name: name).compile
    end
  end

  class ConstantAndWriteNode
    def desugar # :nodoc:
      DesugarAndWriteNode.new(self, source, :constant_read_node, :constant_write_node, name: name).compile
    end
  end

  class ConstantOrWriteNode
    def desugar # :nodoc:
      DesugarOrWriteDefinedNode.new(self, source, :constant_read_node, :constant_write_node, name: name).compile
    end
  end

  class ConstantOperatorWriteNode
    def desugar # :nodoc:
      DesugarOperatorWriteNode.new(self, source, :constant_read_node, :constant_write_node, name: name).compile
    end
  end

  class GlobalVariableAndWriteNode
    def desugar # :nodoc:
      DesugarAndWriteNode.new(self, source, :global_variable_read_node, :global_variable_write_node, name: name).compile
    end
  end

  class GlobalVariableOrWriteNode
    def desugar # :nodoc:
      DesugarOrWriteDefinedNode.new(self, source, :global_variable_read_node, :global_variable_write_node, name: name).compile
    end
  end

  class GlobalVariableOperatorWriteNode
    def desugar # :nodoc:
      DesugarOperatorWriteNode.new(self, source, :global_variable_read_node, :global_variable_write_node, name: name).compile
    end
  end

  class InstanceVariableAndWriteNode
    def desugar # :nodoc:
      DesugarAndWriteNode.new(self, source, :instance_variable_read_node, :instance_variable_write_node, name: name).compile
    end
  end

  class InstanceVariableOrWriteNode
    def desugar # :nodoc:
      DesugarOrWriteNode.new(self, source, :instance_variable_read_node, :instance_variable_write_node, name: name).compile
    end
  end

  class InstanceVariableOperatorWriteNode
    def desugar # :nodoc:
      DesugarOperatorWriteNode.new(self, source, :instance_variable_read_node, :instance_variable_write_node, name: name).compile
    end
  end

  class LocalVariableAndWriteNode
    def desugar # :nodoc:
      DesugarAndWriteNode.new(self, source, :local_variable_read_node, :local_variable_write_node, name: name, depth: depth).compile
    end
  end

  class LocalVariableOrWriteNode
    def desugar # :nodoc:
      DesugarOrWriteNode.new(self, source, :local_variable_read_node, :local_variable_write_node, name: name, depth: depth).compile
    end
  end

  class LocalVariableOperatorWriteNode
    def desugar # :nodoc:
      DesugarOperatorWriteNode.new(self, source, :local_variable_read_node, :local_variable_write_node, name: name, depth: depth).compile
    end
  end

  # DesugarCompiler is a compiler that desugars Ruby code into a more primitive
  # form. This is useful for consumers that want to deal with fewer node types.
  class DesugarCompiler < MutationCompiler
    # @@foo &&= bar
    #
    # becomes
    #
    # @@foo && @@foo = bar
    def visit_class_variable_and_write_node(node)
      node.desugar
    end

    # @@foo ||= bar
    #
    # becomes
    #
    # defined?(@@foo) ? @@foo : @@foo = bar
    def visit_class_variable_or_write_node(node)
      node.desugar
    end

    # @@foo += bar
    #
    # becomes
    #
    # @@foo = @@foo + bar
    def visit_class_variable_operator_write_node(node)
      node.desugar
    end

    # Foo &&= bar
    #
    # becomes
    #
    # Foo && Foo = bar
    def visit_constant_and_write_node(node)
      node.desugar
    end

    # Foo ||= bar
    #
    # becomes
    #
    # defined?(Foo) ? Foo : Foo = bar
    def visit_constant_or_write_node(node)
      node.desugar
    end

    # Foo += bar
    #
    # becomes
    #
    # Foo = Foo + bar
    def visit_constant_operator_write_node(node)
      node.desugar
    end

    # $foo &&= bar
    #
    # becomes
    #
    # $foo && $foo = bar
    def visit_global_variable_and_write_node(node)
      node.desugar
    end

    # $foo ||= bar
    #
    # becomes
    #
    # defined?($foo) ? $foo : $foo = bar
    def visit_global_variable_or_write_node(node)
      node.desugar
    end

    # $foo += bar
    #
    # becomes
    #
    # $foo = $foo + bar
    def visit_global_variable_operator_write_node(node)
      node.desugar
    end

    # @foo &&= bar
    #
    # becomes
    #
    # @foo && @foo = bar
    def visit_instance_variable_and_write_node(node)
      node.desugar
    end

    # @foo ||= bar
    #
    # becomes
    #
    # @foo || @foo = bar
    def visit_instance_variable_or_write_node(node)
      node.desugar
    end

    # @foo += bar
    #
    # becomes
    #
    # @foo = @foo + bar
    def visit_instance_variable_operator_write_node(node)
      node.desugar
    end

    # foo &&= bar
    #
    # becomes
    #
    # foo && foo = bar
    def visit_local_variable_and_write_node(node)
      node.desugar
    end

    # foo ||= bar
    #
    # becomes
    #
    # foo || foo = bar
    def visit_local_variable_or_write_node(node)
      node.desugar
    end

    # foo += bar
    #
    # becomes
    #
    # foo = foo + bar
    def visit_local_variable_operator_write_node(node)
      node.desugar
    end
  end
end
PK*J[���9�<�<share/ruby/prism/compiler.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/compiler.rb.erb
if you are looking to modify the template
=end

module Prism
  # A compiler is a visitor that returns the value of each node as it visits.
  # This is as opposed to a visitor which will only walk the tree. This can be
  # useful when you are trying to compile a tree into a different format.
  #
  # For example, to build a representation of the tree as s-expressions, you
  # could write:
  #
  #     class SExpressions < Prism::Compiler
  #       def visit_arguments_node(node) = [:arguments, super]
  #       def visit_call_node(node) = [:call, super]
  #       def visit_integer_node(node) = [:integer]
  #       def visit_program_node(node) = [:program, super]
  #     end
  #
  #     Prism.parse("1 + 2").value.accept(SExpressions.new)
  #     # => [:program, [[[:call, [[:integer], [:arguments, [[:integer]]]]]]]]
  #
  class Compiler < Visitor
    # Visit an individual node.
    def visit(node)
      node&.accept(self)
    end

    # Visit a list of nodes.
    def visit_all(nodes)
      nodes.map { |node| node&.accept(self) }
    end

    # Visit the child nodes of the given node.
    def visit_child_nodes(node)
      node.compact_child_nodes.map { |node| node.accept(self) }
    end

    # Compile a AliasGlobalVariableNode node
    alias visit_alias_global_variable_node visit_child_nodes

    # Compile a AliasMethodNode node
    alias visit_alias_method_node visit_child_nodes

    # Compile a AlternationPatternNode node
    alias visit_alternation_pattern_node visit_child_nodes

    # Compile a AndNode node
    alias visit_and_node visit_child_nodes

    # Compile a ArgumentsNode node
    alias visit_arguments_node visit_child_nodes

    # Compile a ArrayNode node
    alias visit_array_node visit_child_nodes

    # Compile a ArrayPatternNode node
    alias visit_array_pattern_node visit_child_nodes

    # Compile a AssocNode node
    alias visit_assoc_node visit_child_nodes

    # Compile a AssocSplatNode node
    alias visit_assoc_splat_node visit_child_nodes

    # Compile a BackReferenceReadNode node
    alias visit_back_reference_read_node visit_child_nodes

    # Compile a BeginNode node
    alias visit_begin_node visit_child_nodes

    # Compile a BlockArgumentNode node
    alias visit_block_argument_node visit_child_nodes

    # Compile a BlockLocalVariableNode node
    alias visit_block_local_variable_node visit_child_nodes

    # Compile a BlockNode node
    alias visit_block_node visit_child_nodes

    # Compile a BlockParameterNode node
    alias visit_block_parameter_node visit_child_nodes

    # Compile a BlockParametersNode node
    alias visit_block_parameters_node visit_child_nodes

    # Compile a BreakNode node
    alias visit_break_node visit_child_nodes

    # Compile a CallAndWriteNode node
    alias visit_call_and_write_node visit_child_nodes

    # Compile a CallNode node
    alias visit_call_node visit_child_nodes

    # Compile a CallOperatorWriteNode node
    alias visit_call_operator_write_node visit_child_nodes

    # Compile a CallOrWriteNode node
    alias visit_call_or_write_node visit_child_nodes

    # Compile a CallTargetNode node
    alias visit_call_target_node visit_child_nodes

    # Compile a CapturePatternNode node
    alias visit_capture_pattern_node visit_child_nodes

    # Compile a CaseMatchNode node
    alias visit_case_match_node visit_child_nodes

    # Compile a CaseNode node
    alias visit_case_node visit_child_nodes

    # Compile a ClassNode node
    alias visit_class_node visit_child_nodes

    # Compile a ClassVariableAndWriteNode node
    alias visit_class_variable_and_write_node visit_child_nodes

    # Compile a ClassVariableOperatorWriteNode node
    alias visit_class_variable_operator_write_node visit_child_nodes

    # Compile a ClassVariableOrWriteNode node
    alias visit_class_variable_or_write_node visit_child_nodes

    # Compile a ClassVariableReadNode node
    alias visit_class_variable_read_node visit_child_nodes

    # Compile a ClassVariableTargetNode node
    alias visit_class_variable_target_node visit_child_nodes

    # Compile a ClassVariableWriteNode node
    alias visit_class_variable_write_node visit_child_nodes

    # Compile a ConstantAndWriteNode node
    alias visit_constant_and_write_node visit_child_nodes

    # Compile a ConstantOperatorWriteNode node
    alias visit_constant_operator_write_node visit_child_nodes

    # Compile a ConstantOrWriteNode node
    alias visit_constant_or_write_node visit_child_nodes

    # Compile a ConstantPathAndWriteNode node
    alias visit_constant_path_and_write_node visit_child_nodes

    # Compile a ConstantPathNode node
    alias visit_constant_path_node visit_child_nodes

    # Compile a ConstantPathOperatorWriteNode node
    alias visit_constant_path_operator_write_node visit_child_nodes

    # Compile a ConstantPathOrWriteNode node
    alias visit_constant_path_or_write_node visit_child_nodes

    # Compile a ConstantPathTargetNode node
    alias visit_constant_path_target_node visit_child_nodes

    # Compile a ConstantPathWriteNode node
    alias visit_constant_path_write_node visit_child_nodes

    # Compile a ConstantReadNode node
    alias visit_constant_read_node visit_child_nodes

    # Compile a ConstantTargetNode node
    alias visit_constant_target_node visit_child_nodes

    # Compile a ConstantWriteNode node
    alias visit_constant_write_node visit_child_nodes

    # Compile a DefNode node
    alias visit_def_node visit_child_nodes

    # Compile a DefinedNode node
    alias visit_defined_node visit_child_nodes

    # Compile a ElseNode node
    alias visit_else_node visit_child_nodes

    # Compile a EmbeddedStatementsNode node
    alias visit_embedded_statements_node visit_child_nodes

    # Compile a EmbeddedVariableNode node
    alias visit_embedded_variable_node visit_child_nodes

    # Compile a EnsureNode node
    alias visit_ensure_node visit_child_nodes

    # Compile a FalseNode node
    alias visit_false_node visit_child_nodes

    # Compile a FindPatternNode node
    alias visit_find_pattern_node visit_child_nodes

    # Compile a FlipFlopNode node
    alias visit_flip_flop_node visit_child_nodes

    # Compile a FloatNode node
    alias visit_float_node visit_child_nodes

    # Compile a ForNode node
    alias visit_for_node visit_child_nodes

    # Compile a ForwardingArgumentsNode node
    alias visit_forwarding_arguments_node visit_child_nodes

    # Compile a ForwardingParameterNode node
    alias visit_forwarding_parameter_node visit_child_nodes

    # Compile a ForwardingSuperNode node
    alias visit_forwarding_super_node visit_child_nodes

    # Compile a GlobalVariableAndWriteNode node
    alias visit_global_variable_and_write_node visit_child_nodes

    # Compile a GlobalVariableOperatorWriteNode node
    alias visit_global_variable_operator_write_node visit_child_nodes

    # Compile a GlobalVariableOrWriteNode node
    alias visit_global_variable_or_write_node visit_child_nodes

    # Compile a GlobalVariableReadNode node
    alias visit_global_variable_read_node visit_child_nodes

    # Compile a GlobalVariableTargetNode node
    alias visit_global_variable_target_node visit_child_nodes

    # Compile a GlobalVariableWriteNode node
    alias visit_global_variable_write_node visit_child_nodes

    # Compile a HashNode node
    alias visit_hash_node visit_child_nodes

    # Compile a HashPatternNode node
    alias visit_hash_pattern_node visit_child_nodes

    # Compile a IfNode node
    alias visit_if_node visit_child_nodes

    # Compile a ImaginaryNode node
    alias visit_imaginary_node visit_child_nodes

    # Compile a ImplicitNode node
    alias visit_implicit_node visit_child_nodes

    # Compile a ImplicitRestNode node
    alias visit_implicit_rest_node visit_child_nodes

    # Compile a InNode node
    alias visit_in_node visit_child_nodes

    # Compile a IndexAndWriteNode node
    alias visit_index_and_write_node visit_child_nodes

    # Compile a IndexOperatorWriteNode node
    alias visit_index_operator_write_node visit_child_nodes

    # Compile a IndexOrWriteNode node
    alias visit_index_or_write_node visit_child_nodes

    # Compile a IndexTargetNode node
    alias visit_index_target_node visit_child_nodes

    # Compile a InstanceVariableAndWriteNode node
    alias visit_instance_variable_and_write_node visit_child_nodes

    # Compile a InstanceVariableOperatorWriteNode node
    alias visit_instance_variable_operator_write_node visit_child_nodes

    # Compile a InstanceVariableOrWriteNode node
    alias visit_instance_variable_or_write_node visit_child_nodes

    # Compile a InstanceVariableReadNode node
    alias visit_instance_variable_read_node visit_child_nodes

    # Compile a InstanceVariableTargetNode node
    alias visit_instance_variable_target_node visit_child_nodes

    # Compile a InstanceVariableWriteNode node
    alias visit_instance_variable_write_node visit_child_nodes

    # Compile a IntegerNode node
    alias visit_integer_node visit_child_nodes

    # Compile a InterpolatedMatchLastLineNode node
    alias visit_interpolated_match_last_line_node visit_child_nodes

    # Compile a InterpolatedRegularExpressionNode node
    alias visit_interpolated_regular_expression_node visit_child_nodes

    # Compile a InterpolatedStringNode node
    alias visit_interpolated_string_node visit_child_nodes

    # Compile a InterpolatedSymbolNode node
    alias visit_interpolated_symbol_node visit_child_nodes

    # Compile a InterpolatedXStringNode node
    alias visit_interpolated_x_string_node visit_child_nodes

    # Compile a ItLocalVariableReadNode node
    alias visit_it_local_variable_read_node visit_child_nodes

    # Compile a ItParametersNode node
    alias visit_it_parameters_node visit_child_nodes

    # Compile a KeywordHashNode node
    alias visit_keyword_hash_node visit_child_nodes

    # Compile a KeywordRestParameterNode node
    alias visit_keyword_rest_parameter_node visit_child_nodes

    # Compile a LambdaNode node
    alias visit_lambda_node visit_child_nodes

    # Compile a LocalVariableAndWriteNode node
    alias visit_local_variable_and_write_node visit_child_nodes

    # Compile a LocalVariableOperatorWriteNode node
    alias visit_local_variable_operator_write_node visit_child_nodes

    # Compile a LocalVariableOrWriteNode node
    alias visit_local_variable_or_write_node visit_child_nodes

    # Compile a LocalVariableReadNode node
    alias visit_local_variable_read_node visit_child_nodes

    # Compile a LocalVariableTargetNode node
    alias visit_local_variable_target_node visit_child_nodes

    # Compile a LocalVariableWriteNode node
    alias visit_local_variable_write_node visit_child_nodes

    # Compile a MatchLastLineNode node
    alias visit_match_last_line_node visit_child_nodes

    # Compile a MatchPredicateNode node
    alias visit_match_predicate_node visit_child_nodes

    # Compile a MatchRequiredNode node
    alias visit_match_required_node visit_child_nodes

    # Compile a MatchWriteNode node
    alias visit_match_write_node visit_child_nodes

    # Compile a MissingNode node
    alias visit_missing_node visit_child_nodes

    # Compile a ModuleNode node
    alias visit_module_node visit_child_nodes

    # Compile a MultiTargetNode node
    alias visit_multi_target_node visit_child_nodes

    # Compile a MultiWriteNode node
    alias visit_multi_write_node visit_child_nodes

    # Compile a NextNode node
    alias visit_next_node visit_child_nodes

    # Compile a NilNode node
    alias visit_nil_node visit_child_nodes

    # Compile a NoKeywordsParameterNode node
    alias visit_no_keywords_parameter_node visit_child_nodes

    # Compile a NumberedParametersNode node
    alias visit_numbered_parameters_node visit_child_nodes

    # Compile a NumberedReferenceReadNode node
    alias visit_numbered_reference_read_node visit_child_nodes

    # Compile a OptionalKeywordParameterNode node
    alias visit_optional_keyword_parameter_node visit_child_nodes

    # Compile a OptionalParameterNode node
    alias visit_optional_parameter_node visit_child_nodes

    # Compile a OrNode node
    alias visit_or_node visit_child_nodes

    # Compile a ParametersNode node
    alias visit_parameters_node visit_child_nodes

    # Compile a ParenthesesNode node
    alias visit_parentheses_node visit_child_nodes

    # Compile a PinnedExpressionNode node
    alias visit_pinned_expression_node visit_child_nodes

    # Compile a PinnedVariableNode node
    alias visit_pinned_variable_node visit_child_nodes

    # Compile a PostExecutionNode node
    alias visit_post_execution_node visit_child_nodes

    # Compile a PreExecutionNode node
    alias visit_pre_execution_node visit_child_nodes

    # Compile a ProgramNode node
    alias visit_program_node visit_child_nodes

    # Compile a RangeNode node
    alias visit_range_node visit_child_nodes

    # Compile a RationalNode node
    alias visit_rational_node visit_child_nodes

    # Compile a RedoNode node
    alias visit_redo_node visit_child_nodes

    # Compile a RegularExpressionNode node
    alias visit_regular_expression_node visit_child_nodes

    # Compile a RequiredKeywordParameterNode node
    alias visit_required_keyword_parameter_node visit_child_nodes

    # Compile a RequiredParameterNode node
    alias visit_required_parameter_node visit_child_nodes

    # Compile a RescueModifierNode node
    alias visit_rescue_modifier_node visit_child_nodes

    # Compile a RescueNode node
    alias visit_rescue_node visit_child_nodes

    # Compile a RestParameterNode node
    alias visit_rest_parameter_node visit_child_nodes

    # Compile a RetryNode node
    alias visit_retry_node visit_child_nodes

    # Compile a ReturnNode node
    alias visit_return_node visit_child_nodes

    # Compile a SelfNode node
    alias visit_self_node visit_child_nodes

    # Compile a ShareableConstantNode node
    alias visit_shareable_constant_node visit_child_nodes

    # Compile a SingletonClassNode node
    alias visit_singleton_class_node visit_child_nodes

    # Compile a SourceEncodingNode node
    alias visit_source_encoding_node visit_child_nodes

    # Compile a SourceFileNode node
    alias visit_source_file_node visit_child_nodes

    # Compile a SourceLineNode node
    alias visit_source_line_node visit_child_nodes

    # Compile a SplatNode node
    alias visit_splat_node visit_child_nodes

    # Compile a StatementsNode node
    alias visit_statements_node visit_child_nodes

    # Compile a StringNode node
    alias visit_string_node visit_child_nodes

    # Compile a SuperNode node
    alias visit_super_node visit_child_nodes

    # Compile a SymbolNode node
    alias visit_symbol_node visit_child_nodes

    # Compile a TrueNode node
    alias visit_true_node visit_child_nodes

    # Compile a UndefNode node
    alias visit_undef_node visit_child_nodes

    # Compile a UnlessNode node
    alias visit_unless_node visit_child_nodes

    # Compile a UntilNode node
    alias visit_until_node visit_child_nodes

    # Compile a WhenNode node
    alias visit_when_node visit_child_nodes

    # Compile a WhileNode node
    alias visit_while_node visit_child_nodes

    # Compile a XStringNode node
    alias visit_x_string_node visit_child_nodes

    # Compile a YieldNode node
    alias visit_yield_node visit_child_nodes
  end
end
PK*J[�wkDD&share/ruby/prism/polyfill/byteindex.rbnu�[���# frozen_string_literal: true

# Polyfill for String#byteindex, which didn't exist until Ruby 3.2.
if !("".respond_to?(:byteindex))
  String.include(
    Module.new {
      def byteindex(needle, offset = 0)
        charindex = index(needle, offset)
        slice(0...charindex).bytesize if charindex
      end
    }
  )
end
PK*J[<b{$share/ruby/prism/polyfill/unpack1.rbnu�[���# frozen_string_literal: true

# Polyfill for String#unpack1 with the offset parameter. Not all Ruby engines
# have Method#parameters implemented, so we check the arity instead if
# necessary.
if (unpack1 = String.instance_method(:unpack1)).respond_to?(:parameters) ? unpack1.parameters.none? { |_, name| name == :offset } : (unpack1.arity == 1)
  String.prepend(
    Module.new {
      def unpack1(format, offset: 0) # :nodoc:
        offset == 0 ? super(format) : self[offset..].unpack1(format) # steep:ignore
      end
    }
  )
end
PK*J[��.�;�;share/ruby/prism/node_ext.rbnu�[���# frozen_string_literal: true

# Here we are reopening the prism module to provide methods on nodes that aren't
# templated and are meant as convenience methods.
module Prism
  class Node
    def deprecated(*replacements) # :nodoc:
      location = caller_locations(1, 1)
      location = location[0].label if location
      suggest = replacements.map { |replacement| "#{self.class}##{replacement}" }

      warn(<<~MSG, category: :deprecated)
        [deprecation]: #{self.class}##{location} is deprecated and will be \
        removed in the next major version. Use #{suggest.join("/")} instead.
        #{(caller(1, 3) || []).join("\n")}
      MSG
    end
  end

  module RegularExpressionOptions # :nodoc:
    # Returns a numeric value that represents the flags that were used to create
    # the regular expression.
    def options
      o = 0
      o |= Regexp::IGNORECASE if flags.anybits?(RegularExpressionFlags::IGNORE_CASE)
      o |= Regexp::EXTENDED if flags.anybits?(RegularExpressionFlags::EXTENDED)
      o |= Regexp::MULTILINE if flags.anybits?(RegularExpressionFlags::MULTI_LINE)
      o |= Regexp::FIXEDENCODING if flags.anybits?(RegularExpressionFlags::EUC_JP | RegularExpressionFlags::WINDOWS_31J | RegularExpressionFlags::UTF_8)
      o |= Regexp::NOENCODING if flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
      o
    end
  end

  class InterpolatedMatchLastLineNode < Node
    include RegularExpressionOptions
  end

  class InterpolatedRegularExpressionNode < Node
    include RegularExpressionOptions
  end

  class MatchLastLineNode < Node
    include RegularExpressionOptions
  end

  class RegularExpressionNode < Node
    include RegularExpressionOptions
  end

  private_constant :RegularExpressionOptions

  module HeredocQuery # :nodoc:
    # Returns true if this node was represented as a heredoc in the source code.
    def heredoc?
      opening&.start_with?("<<")
    end
  end

  class InterpolatedStringNode < Node
    include HeredocQuery
  end

  class InterpolatedXStringNode < Node
    include HeredocQuery
  end

  class StringNode < Node
    include HeredocQuery

    # Occasionally it's helpful to treat a string as if it were interpolated so
    # that there's a consistent interface for working with strings.
    def to_interpolated
      InterpolatedStringNode.new(
        source,
        -1,
        location,
        frozen? ? InterpolatedStringNodeFlags::FROZEN : 0,
        opening_loc,
        [copy(location: content_loc, opening_loc: nil, closing_loc: nil)],
        closing_loc
      )
    end
  end

  class XStringNode < Node
    include HeredocQuery

    # Occasionally it's helpful to treat a string as if it were interpolated so
    # that there's a consistent interface for working with strings.
    def to_interpolated
      InterpolatedXStringNode.new(
        source,
        -1,
        location,
        flags,
        opening_loc,
        [StringNode.new(source, node_id, content_loc, 0, nil, content_loc, nil, unescaped)],
        closing_loc
      )
    end
  end

  private_constant :HeredocQuery

  class ImaginaryNode < Node
    # Returns the value of the node as a Ruby Complex.
    def value
      Complex(0, numeric.value)
    end
  end

  class RationalNode < Node
    # Returns the value of the node as a Ruby Rational.
    def value
      Rational(numerator, denominator)
    end

    # Returns the value of the node as an IntegerNode or a FloatNode. This
    # method is deprecated in favor of #value or #numerator/#denominator.
    def numeric
      deprecated("value", "numerator", "denominator")

      if denominator == 1
        IntegerNode.new(source, -1, location.chop, flags, numerator)
      else
        FloatNode.new(source, -1, location.chop, 0, numerator.to_f / denominator)
      end
    end
  end

  class ConstantReadNode < Node
    # Returns the list of parts for the full name of this constant.
    # For example: [:Foo]
    def full_name_parts
      [name]
    end

    # Returns the full name of this constant. For example: "Foo"
    def full_name
      name.to_s
    end
  end

  class ConstantWriteNode < Node
    # Returns the list of parts for the full name of this constant.
    # For example: [:Foo]
    def full_name_parts
      [name]
    end

    # Returns the full name of this constant. For example: "Foo"
    def full_name
      name.to_s
    end
  end

  class ConstantPathNode < Node
    # An error class raised when dynamic parts are found while computing a
    # constant path's full name. For example:
    # Foo::Bar::Baz -> does not raise because all parts of the constant path are
    # simple constants
    # var::Bar::Baz -> raises because the first part of the constant path is a
    # local variable
    class DynamicPartsInConstantPathError < StandardError; end

    # An error class raised when missing nodes are found while computing a
    # constant path's full name. For example:
    # Foo:: -> raises because the constant path is missing the last part
    class MissingNodesInConstantPathError < StandardError; end

    # Returns the list of parts for the full name of this constant path.
    # For example: [:Foo, :Bar]
    def full_name_parts
      parts = [] #: Array[Symbol]
      current = self #: node?

      while current.is_a?(ConstantPathNode)
        name = current.name
        if name.nil?
          raise MissingNodesInConstantPathError, "Constant path contains missing nodes. Cannot compute full name"
        end

        parts.unshift(name)
        current = current.parent
      end

      if !current.is_a?(ConstantReadNode) && !current.nil?
        raise DynamicPartsInConstantPathError, "Constant path contains dynamic parts. Cannot compute full name"
      end

      parts.unshift(current&.name || :"")
    end

    # Returns the full name of this constant path. For example: "Foo::Bar"
    def full_name
      full_name_parts.join("::")
    end

    # Previously, we had a child node on this class that contained either a
    # constant read or a missing node. To not cause a breaking change, we
    # continue to supply that API.
    def child
      deprecated("name", "name_loc")

      if name
        ConstantReadNode.new(source, -1, name_loc, 0, name)
      else
        MissingNode.new(source, -1, location, 0)
      end
    end
  end

  class ConstantPathTargetNode < Node
    # Returns the list of parts for the full name of this constant path.
    # For example: [:Foo, :Bar]
    def full_name_parts
      parts =
        case parent
        when ConstantPathNode, ConstantReadNode
          parent.full_name_parts
        when nil
          [:""]
        else
          # e.g. self::Foo, (var)::Bar = baz
          raise ConstantPathNode::DynamicPartsInConstantPathError, "Constant target path contains dynamic parts. Cannot compute full name"
        end

      if name.nil?
        raise ConstantPathNode::MissingNodesInConstantPathError, "Constant target path contains missing nodes. Cannot compute full name"
      end

      parts.push(name)
    end

    # Returns the full name of this constant path. For example: "Foo::Bar"
    def full_name
      full_name_parts.join("::")
    end

    # Previously, we had a child node on this class that contained either a
    # constant read or a missing node. To not cause a breaking change, we
    # continue to supply that API.
    def child
      deprecated("name", "name_loc")

      if name
        ConstantReadNode.new(source, -1, name_loc, 0, name)
      else
        MissingNode.new(source, -1, location, 0)
      end
    end
  end

  class ConstantTargetNode < Node
    # Returns the list of parts for the full name of this constant.
    # For example: [:Foo]
    def full_name_parts
      [name]
    end

    # Returns the full name of this constant. For example: "Foo"
    def full_name
      name.to_s
    end
  end

  class ParametersNode < Node
    # Mirrors the Method#parameters method.
    def signature
      names = [] #: Array[[Symbol, Symbol] | [Symbol]]

      requireds.each do |param|
        names << (param.is_a?(MultiTargetNode) ? [:req] : [:req, param.name])
      end

      optionals.each { |param| names << [:opt, param.name] }

      if rest && rest.is_a?(RestParameterNode)
        names << [:rest, rest.name || :*]
      end

      posts.each do |param|
        case param
        when MultiTargetNode
          names << [:req]
        when NoKeywordsParameterNode, KeywordRestParameterNode, ForwardingParameterNode
          # Invalid syntax, e.g. "def f(**nil, ...)" moves the NoKeywordsParameterNode to posts
          raise "Invalid syntax"
        else
          names << [:req, param.name]
        end
      end

      # Regardless of the order in which the keywords were defined, the required
      # keywords always come first followed by the optional keywords.
      keyopt = [] #: Array[OptionalKeywordParameterNode]
      keywords.each do |param|
        if param.is_a?(OptionalKeywordParameterNode)
          keyopt << param
        else
          names << [:keyreq, param.name]
        end
      end

      keyopt.each { |param| names << [:key, param.name] }

      case keyword_rest
      when ForwardingParameterNode
        names.concat([[:rest, :*], [:keyrest, :**], [:block, :&]])
      when KeywordRestParameterNode
        names << [:keyrest, keyword_rest.name || :**]
      when NoKeywordsParameterNode
        names << [:nokey]
      end

      names << [:block, block.name || :&] if block
      names
    end
  end

  class CallNode < Node
    # When a call node has the attribute_write flag set, it means that the call
    # is using the attribute write syntax. This is either a method call to []=
    # or a method call to a method that ends with =. Either way, the = sign is
    # present in the source.
    #
    # Prism returns the message_loc _without_ the = sign attached, because there
    # can be any amount of space between the message and the = sign. However,
    # sometimes you want the location of the full message including the inner
    # space and the = sign. This method provides that.
    def full_message_loc
      attribute_write? ? message_loc&.adjoin("=") : message_loc
    end
  end

  class CallOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class ClassVariableOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class ConstantOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class ConstantPathOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class GlobalVariableOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class IndexOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class InstanceVariableOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class LocalVariableOperatorWriteNode < Node
    # Returns the binary operator used to modify the receiver. This method is
    # deprecated in favor of #binary_operator.
    def operator
      deprecated("binary_operator")
      binary_operator
    end

    # Returns the location of the binary operator used to modify the receiver.
    # This method is deprecated in favor of #binary_operator_loc.
    def operator_loc
      deprecated("binary_operator_loc")
      binary_operator_loc
    end
  end

  class CaseMatchNode < Node
    # Returns the else clause of the case match node. This method is deprecated
    # in favor of #else_clause.
    def consequent
      deprecated("else_clause")
      else_clause
    end
  end

  class CaseNode < Node
    # Returns the else clause of the case node. This method is deprecated in
    # favor of #else_clause.
    def consequent
      deprecated("else_clause")
      else_clause
    end
  end

  class IfNode < Node
    # Returns the subsequent if/elsif/else clause of the if node. This method is
    # deprecated in favor of #subsequent.
    def consequent
      deprecated("subsequent")
      subsequent
    end
  end

  class RescueNode < Node
    # Returns the subsequent rescue clause of the rescue node. This method is
    # deprecated in favor of #subsequent.
    def consequent
      deprecated("subsequent")
      subsequent
    end
  end

  class UnlessNode < Node
    # Returns the else clause of the unless node. This method is deprecated in
    # favor of #else_clause.
    def consequent
      deprecated("else_clause")
      else_clause
    end
  end
end
PK*J[�4�mmshare/ruby/prism/pack.rbnu�[���# frozen_string_literal: true
# typed: ignore

module Prism
  # A parser for the pack template language.
  module Pack
    %i[
      SPACE
      COMMENT
      INTEGER
      UTF8
      BER
      FLOAT
      STRING_SPACE_PADDED
      STRING_NULL_PADDED
      STRING_NULL_TERMINATED
      STRING_MSB
      STRING_LSB
      STRING_HEX_HIGH
      STRING_HEX_LOW
      STRING_UU
      STRING_MIME
      STRING_BASE64
      STRING_FIXED
      STRING_POINTER
      MOVE
      BACK
      NULL

      UNSIGNED
      SIGNED
      SIGNED_NA

      AGNOSTIC_ENDIAN
      LITTLE_ENDIAN
      BIG_ENDIAN
      NATIVE_ENDIAN
      ENDIAN_NA

      SIZE_SHORT
      SIZE_INT
      SIZE_LONG
      SIZE_LONG_LONG
      SIZE_8
      SIZE_16
      SIZE_32
      SIZE_64
      SIZE_P
      SIZE_NA

      LENGTH_FIXED
      LENGTH_MAX
      LENGTH_RELATIVE
      LENGTH_NA
    ].each do |const|
      const_set(const, const)
    end

    # A directive in the pack template language.
    class Directive
      # A symbol representing the version of Ruby.
      attr_reader :version

      # A symbol representing whether or not we are packing or unpacking.
      attr_reader :variant

      # A byteslice of the source string that this directive represents.
      attr_reader :source

      # The type of the directive.
      attr_reader :type

      # The type of signedness of the directive.
      attr_reader :signed

      # The type of endianness of the directive.
      attr_reader :endian

      # The size of the directive.
      attr_reader :size

      # The length type of this directive (used for integers).
      attr_reader :length_type

      # The length of this directive (used for integers).
      attr_reader :length

      # Initialize a new directive with the given values.
      def initialize(version, variant, source, type, signed, endian, size, length_type, length)
        @version = version
        @variant = variant
        @source = source
        @type = type
        @signed = signed
        @endian = endian
        @size = size
        @length_type = length_type
        @length = length
      end

      # The descriptions of the various types of endianness.
      ENDIAN_DESCRIPTIONS = {
        AGNOSTIC_ENDIAN: "agnostic",
        LITTLE_ENDIAN: "little-endian (VAX)",
        BIG_ENDIAN: "big-endian (network)",
        NATIVE_ENDIAN: "native-endian",
        ENDIAN_NA: "n/a"
      }

      # The descriptions of the various types of signedness.
      SIGNED_DESCRIPTIONS = {
        UNSIGNED: "unsigned",
        SIGNED: "signed",
        SIGNED_NA: "n/a"
      }

      # The descriptions of the various types of sizes.
      SIZE_DESCRIPTIONS = {
        SIZE_SHORT: "short",
        SIZE_INT: "int-width",
        SIZE_LONG: "long",
        SIZE_LONG_LONG: "long long",
        SIZE_8: "8-bit",
        SIZE_16: "16-bit",
        SIZE_32: "32-bit",
        SIZE_64: "64-bit",
        SIZE_P: "pointer-width"
      }

      # Provide a human-readable description of the directive.
      def describe
        case type
        when SPACE
          "whitespace"
        when COMMENT
          "comment"
        when INTEGER
          if size == SIZE_8
            base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} integer"
          else
            base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} integer"
          end
          case length_type
          when LENGTH_FIXED
            if length > 1
              base + ", x#{length}"
            else
              base
            end
          when LENGTH_MAX
            base + ", as many as possible"
          else
            raise
          end
        when UTF8
          "UTF-8 character"
        when BER
          "BER-compressed integer"
        when FLOAT
          "#{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} float"
        when STRING_SPACE_PADDED
          "arbitrary binary string (space padded)"
        when STRING_NULL_PADDED
          "arbitrary binary string (null padded, count is width)"
        when STRING_NULL_TERMINATED
          "arbitrary binary string (null padded, count is width), except that null is added with *"
        when STRING_MSB
          "bit string (MSB first)"
        when STRING_LSB
          "bit string (LSB first)"
        when STRING_HEX_HIGH
          "hex string (high nibble first)"
        when STRING_HEX_LOW
          "hex string (low nibble first)"
        when STRING_UU
          "UU-encoded string"
        when STRING_MIME
          "quoted printable, MIME encoding"
        when STRING_BASE64
          "base64 encoded string"
        when STRING_FIXED
          "pointer to a structure (fixed-length string)"
        when STRING_POINTER
          "pointer to a null-terminated string"
        when MOVE
          "move to absolute position"
        when BACK
          "back up a byte"
        when NULL
          "null byte"
        else
          raise
        end
      end
    end

    # The result of parsing a pack template.
    class Format
      # A list of the directives in the template.
      attr_reader :directives

      # The encoding of the template.
      attr_reader :encoding

      # Create a new Format with the given directives and encoding.
      def initialize(directives, encoding)
        @directives = directives
        @encoding = encoding
      end

      # Provide a human-readable description of the format.
      def describe
        source_width = directives.map { |d| d.source.inspect.length }.max
        directive_lines = directives.map do |directive|
          if directive.type == SPACE
            source = directive.source.inspect
          else
            source = directive.source
          end
          # @type var source_width: Integer
          "  #{source.ljust(source_width)}  #{directive.describe}"
        end

        (["Directives:"] + directive_lines + ["Encoding:", "  #{encoding}"]).join("\n")
      end
    end
  end
end
PK*J[!m�����share/ruby/prism/dsl.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/dsl.rb.erb
if you are looking to modify the template
=end

module Prism
  # The DSL module provides a set of methods that can be used to create prism
  # nodes in a more concise manner. For example, instead of writing:
  #
  #     source = Prism::Source.for("[1]")
  #
  #     Prism::ArrayNode.new(
  #       source,
  #       0,
  #       Prism::Location.new(source, 0, 3),
  #       0,
  #       [
  #         Prism::IntegerNode.new(
  #           source,
  #           0,
  #           Prism::Location.new(source, 1, 1),
  #           Prism::IntegerBaseFlags::DECIMAL,
  #           1
  #         )
  #       ],
  #       Prism::Location.new(source, 0, 1),
  #       Prism::Location.new(source, 2, 1)
  #     )
  #
  # you could instead write:
  #
  #     class Builder
  #       include Prism::DSL
  #
  #       attr_reader :default_source
  #
  #       def initialize
  #         @default_source = source("[1]")
  #       end
  #
  #       def build
  #         array_node(
  #           location: location(start_offset: 0, length: 3),
  #           elements: [
  #             integer_node(
  #               location: location(start_offset: 1, length: 1),
  #               flags: integer_base_flag(:decimal),
  #               value: 1
  #             )
  #           ],
  #           opening_loc: location(start_offset: 0, length: 1),
  #           closing_loc: location(start_offset: 2, length: 1)
  #         )
  #       end
  #     end
  #
  # This is mostly helpful in the context of generating trees programmatically.
  module DSL
    # Provide all of these methods as module methods as well, to allow for
    # building nodes like Prism::DSL.nil_node.
    extend self

    # Create a new Source object.
    def source(string)
      Source.for(string)
    end

    # Create a new Location object.
    def location(source: default_source, start_offset: 0, length: 0)
      Location.new(source, start_offset, length)
    end

    # Create a new AliasGlobalVariableNode node.
    def alias_global_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, new_name: global_variable_read_node(source: source), old_name: global_variable_read_node(source: source), keyword_loc: location)
      AliasGlobalVariableNode.new(source, node_id, location, flags, new_name, old_name, keyword_loc)
    end

    # Create a new AliasMethodNode node.
    def alias_method_node(source: default_source, node_id: 0, location: default_location, flags: 0, new_name: symbol_node(source: source), old_name: symbol_node(source: source), keyword_loc: location)
      AliasMethodNode.new(source, node_id, location, flags, new_name, old_name, keyword_loc)
    end

    # Create a new AlternationPatternNode node.
    def alternation_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location)
      AlternationPatternNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # Create a new AndNode node.
    def and_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location)
      AndNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # Create a new ArgumentsNode node.
    def arguments_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: [])
      ArgumentsNode.new(source, node_id, location, flags, arguments)
    end

    # Create a new ArrayNode node.
    def array_node(source: default_source, node_id: 0, location: default_location, flags: 0, elements: [], opening_loc: nil, closing_loc: nil)
      ArrayNode.new(source, node_id, location, flags, elements, opening_loc, closing_loc)
    end

    # Create a new ArrayPatternNode node.
    def array_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, requireds: [], rest: nil, posts: [], opening_loc: nil, closing_loc: nil)
      ArrayPatternNode.new(source, node_id, location, flags, constant, requireds, rest, posts, opening_loc, closing_loc)
    end

    # Create a new AssocNode node.
    def assoc_node(source: default_source, node_id: 0, location: default_location, flags: 0, key: default_node(source, location), value: default_node(source, location), operator_loc: nil)
      AssocNode.new(source, node_id, location, flags, key, value, operator_loc)
    end

    # Create a new AssocSplatNode node.
    def assoc_splat_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: nil, operator_loc: location)
      AssocSplatNode.new(source, node_id, location, flags, value, operator_loc)
    end

    # Create a new BackReferenceReadNode node.
    def back_reference_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      BackReferenceReadNode.new(source, node_id, location, flags, name)
    end

    # Create a new BeginNode node.
    def begin_node(source: default_source, node_id: 0, location: default_location, flags: 0, begin_keyword_loc: nil, statements: nil, rescue_clause: nil, else_clause: nil, ensure_clause: nil, end_keyword_loc: nil)
      BeginNode.new(source, node_id, location, flags, begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc)
    end

    # Create a new BlockArgumentNode node.
    def block_argument_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: nil, operator_loc: location)
      BlockArgumentNode.new(source, node_id, location, flags, expression, operator_loc)
    end

    # Create a new BlockLocalVariableNode node.
    def block_local_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      BlockLocalVariableNode.new(source, node_id, location, flags, name)
    end

    # Create a new BlockNode node.
    def block_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], parameters: nil, body: nil, opening_loc: location, closing_loc: location)
      BlockNode.new(source, node_id, location, flags, locals, parameters, body, opening_loc, closing_loc)
    end

    # Create a new BlockParameterNode node.
    def block_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location)
      BlockParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc)
    end

    # Create a new BlockParametersNode node.
    def block_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, parameters: nil, locals: [], opening_loc: nil, closing_loc: nil)
      BlockParametersNode.new(source, node_id, location, flags, parameters, locals, opening_loc, closing_loc)
    end

    # Create a new BreakNode node.
    def break_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: nil, keyword_loc: location)
      BreakNode.new(source, node_id, location, flags, arguments, keyword_loc)
    end

    # Create a new CallAndWriteNode node.
    def call_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", operator_loc: location, value: default_node(source, location))
      CallAndWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value)
    end

    # Create a new CallNode node.
    def call_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, name: :"", message_loc: nil, opening_loc: nil, arguments: nil, closing_loc: nil, block: nil)
      CallNode.new(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc, opening_loc, arguments, closing_loc, block)
    end

    # Create a new CallOperatorWriteNode node.
    def call_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", binary_operator: :"", binary_operator_loc: location, value: default_node(source, location))
      CallOperatorWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, binary_operator, binary_operator_loc, value)
    end

    # Create a new CallOrWriteNode node.
    def call_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", operator_loc: location, value: default_node(source, location))
      CallOrWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value)
    end

    # Create a new CallTargetNode node.
    def call_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: default_node(source, location), call_operator_loc: location, name: :"", message_loc: location)
      CallTargetNode.new(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc)
    end

    # Create a new CapturePatternNode node.
    def capture_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), target: local_variable_target_node(source: source), operator_loc: location)
      CapturePatternNode.new(source, node_id, location, flags, value, target, operator_loc)
    end

    # Create a new CaseMatchNode node.
    def case_match_node(source: default_source, node_id: 0, location: default_location, flags: 0, predicate: nil, conditions: [], else_clause: nil, case_keyword_loc: location, end_keyword_loc: location)
      CaseMatchNode.new(source, node_id, location, flags, predicate, conditions, else_clause, case_keyword_loc, end_keyword_loc)
    end

    # Create a new CaseNode node.
    def case_node(source: default_source, node_id: 0, location: default_location, flags: 0, predicate: nil, conditions: [], else_clause: nil, case_keyword_loc: location, end_keyword_loc: location)
      CaseNode.new(source, node_id, location, flags, predicate, conditions, else_clause, case_keyword_loc, end_keyword_loc)
    end

    # Create a new ClassNode node.
    def class_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], class_keyword_loc: location, constant_path: constant_read_node(source: source), inheritance_operator_loc: nil, superclass: nil, body: nil, end_keyword_loc: location, name: :"")
      ClassNode.new(source, node_id, location, flags, locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name)
    end

    # Create a new ClassVariableAndWriteNode node.
    def class_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      ClassVariableAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new ClassVariableOperatorWriteNode node.
    def class_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :"")
      ClassVariableOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # Create a new ClassVariableOrWriteNode node.
    def class_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      ClassVariableOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new ClassVariableReadNode node.
    def class_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      ClassVariableReadNode.new(source, node_id, location, flags, name)
    end

    # Create a new ClassVariableTargetNode node.
    def class_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      ClassVariableTargetNode.new(source, node_id, location, flags, name)
    end

    # Create a new ClassVariableWriteNode node.
    def class_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location)
      ClassVariableWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # Create a new ConstantAndWriteNode node.
    def constant_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      ConstantAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new ConstantOperatorWriteNode node.
    def constant_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :"")
      ConstantOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # Create a new ConstantOrWriteNode node.
    def constant_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      ConstantOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new ConstantPathAndWriteNode node.
    def constant_path_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location))
      ConstantPathAndWriteNode.new(source, node_id, location, flags, target, operator_loc, value)
    end

    # Create a new ConstantPathNode node.
    def constant_path_node(source: default_source, node_id: 0, location: default_location, flags: 0, parent: nil, name: nil, delimiter_loc: location, name_loc: location)
      ConstantPathNode.new(source, node_id, location, flags, parent, name, delimiter_loc, name_loc)
    end

    # Create a new ConstantPathOperatorWriteNode node.
    def constant_path_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), binary_operator_loc: location, value: default_node(source, location), binary_operator: :"")
      ConstantPathOperatorWriteNode.new(source, node_id, location, flags, target, binary_operator_loc, value, binary_operator)
    end

    # Create a new ConstantPathOrWriteNode node.
    def constant_path_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location))
      ConstantPathOrWriteNode.new(source, node_id, location, flags, target, operator_loc, value)
    end

    # Create a new ConstantPathTargetNode node.
    def constant_path_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, parent: nil, name: nil, delimiter_loc: location, name_loc: location)
      ConstantPathTargetNode.new(source, node_id, location, flags, parent, name, delimiter_loc, name_loc)
    end

    # Create a new ConstantPathWriteNode node.
    def constant_path_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, target: constant_path_node(source: source), operator_loc: location, value: default_node(source, location))
      ConstantPathWriteNode.new(source, node_id, location, flags, target, operator_loc, value)
    end

    # Create a new ConstantReadNode node.
    def constant_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      ConstantReadNode.new(source, node_id, location, flags, name)
    end

    # Create a new ConstantTargetNode node.
    def constant_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      ConstantTargetNode.new(source, node_id, location, flags, name)
    end

    # Create a new ConstantWriteNode node.
    def constant_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location)
      ConstantWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # Create a new DefNode node.
    def def_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, receiver: nil, parameters: nil, body: nil, locals: [], def_keyword_loc: location, operator_loc: nil, lparen_loc: nil, rparen_loc: nil, equal_loc: nil, end_keyword_loc: nil)
      DefNode.new(source, node_id, location, flags, name, name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc)
    end

    # Create a new DefinedNode node.
    def defined_node(source: default_source, node_id: 0, location: default_location, flags: 0, lparen_loc: nil, value: default_node(source, location), rparen_loc: nil, keyword_loc: location)
      DefinedNode.new(source, node_id, location, flags, lparen_loc, value, rparen_loc, keyword_loc)
    end

    # Create a new ElseNode node.
    def else_node(source: default_source, node_id: 0, location: default_location, flags: 0, else_keyword_loc: location, statements: nil, end_keyword_loc: nil)
      ElseNode.new(source, node_id, location, flags, else_keyword_loc, statements, end_keyword_loc)
    end

    # Create a new EmbeddedStatementsNode node.
    def embedded_statements_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, statements: nil, closing_loc: location)
      EmbeddedStatementsNode.new(source, node_id, location, flags, opening_loc, statements, closing_loc)
    end

    # Create a new EmbeddedVariableNode node.
    def embedded_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, variable: instance_variable_read_node(source: source))
      EmbeddedVariableNode.new(source, node_id, location, flags, operator_loc, variable)
    end

    # Create a new EnsureNode node.
    def ensure_node(source: default_source, node_id: 0, location: default_location, flags: 0, ensure_keyword_loc: location, statements: nil, end_keyword_loc: location)
      EnsureNode.new(source, node_id, location, flags, ensure_keyword_loc, statements, end_keyword_loc)
    end

    # Create a new FalseNode node.
    def false_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      FalseNode.new(source, node_id, location, flags)
    end

    # Create a new FindPatternNode node.
    def find_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, left: splat_node(source: source), requireds: [], right: splat_node(source: source), opening_loc: nil, closing_loc: nil)
      FindPatternNode.new(source, node_id, location, flags, constant, left, requireds, right, opening_loc, closing_loc)
    end

    # Create a new FlipFlopNode node.
    def flip_flop_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: nil, right: nil, operator_loc: location)
      FlipFlopNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # Create a new FloatNode node.
    def float_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: 0.0)
      FloatNode.new(source, node_id, location, flags, value)
    end

    # Create a new ForNode node.
    def for_node(source: default_source, node_id: 0, location: default_location, flags: 0, index: local_variable_target_node(source: source), collection: default_node(source, location), statements: nil, for_keyword_loc: location, in_keyword_loc: location, do_keyword_loc: nil, end_keyword_loc: location)
      ForNode.new(source, node_id, location, flags, index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc)
    end

    # Create a new ForwardingArgumentsNode node.
    def forwarding_arguments_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      ForwardingArgumentsNode.new(source, node_id, location, flags)
    end

    # Create a new ForwardingParameterNode node.
    def forwarding_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      ForwardingParameterNode.new(source, node_id, location, flags)
    end

    # Create a new ForwardingSuperNode node.
    def forwarding_super_node(source: default_source, node_id: 0, location: default_location, flags: 0, block: nil)
      ForwardingSuperNode.new(source, node_id, location, flags, block)
    end

    # Create a new GlobalVariableAndWriteNode node.
    def global_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      GlobalVariableAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new GlobalVariableOperatorWriteNode node.
    def global_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :"")
      GlobalVariableOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # Create a new GlobalVariableOrWriteNode node.
    def global_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      GlobalVariableOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new GlobalVariableReadNode node.
    def global_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      GlobalVariableReadNode.new(source, node_id, location, flags, name)
    end

    # Create a new GlobalVariableTargetNode node.
    def global_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      GlobalVariableTargetNode.new(source, node_id, location, flags, name)
    end

    # Create a new GlobalVariableWriteNode node.
    def global_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location)
      GlobalVariableWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # Create a new HashNode node.
    def hash_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, elements: [], closing_loc: location)
      HashNode.new(source, node_id, location, flags, opening_loc, elements, closing_loc)
    end

    # Create a new HashPatternNode node.
    def hash_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, elements: [], rest: nil, opening_loc: nil, closing_loc: nil)
      HashPatternNode.new(source, node_id, location, flags, constant, elements, rest, opening_loc, closing_loc)
    end

    # Create a new IfNode node.
    def if_node(source: default_source, node_id: 0, location: default_location, flags: 0, if_keyword_loc: nil, predicate: default_node(source, location), then_keyword_loc: nil, statements: nil, subsequent: nil, end_keyword_loc: nil)
      IfNode.new(source, node_id, location, flags, if_keyword_loc, predicate, then_keyword_loc, statements, subsequent, end_keyword_loc)
    end

    # Create a new ImaginaryNode node.
    def imaginary_node(source: default_source, node_id: 0, location: default_location, flags: 0, numeric: float_node(source: source))
      ImaginaryNode.new(source, node_id, location, flags, numeric)
    end

    # Create a new ImplicitNode node.
    def implicit_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: local_variable_read_node(source: source))
      ImplicitNode.new(source, node_id, location, flags, value)
    end

    # Create a new ImplicitRestNode node.
    def implicit_rest_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      ImplicitRestNode.new(source, node_id, location, flags)
    end

    # Create a new InNode node.
    def in_node(source: default_source, node_id: 0, location: default_location, flags: 0, pattern: default_node(source, location), statements: nil, in_loc: location, then_loc: nil)
      InNode.new(source, node_id, location, flags, pattern, statements, in_loc, then_loc)
    end

    # Create a new IndexAndWriteNode node.
    def index_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, operator_loc: location, value: default_node(source, location))
      IndexAndWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value)
    end

    # Create a new IndexOperatorWriteNode node.
    def index_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, binary_operator: :"", binary_operator_loc: location, value: default_node(source, location))
      IndexOperatorWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, binary_operator, binary_operator_loc, value)
    end

    # Create a new IndexOrWriteNode node.
    def index_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, opening_loc: location, arguments: nil, closing_loc: location, block: nil, operator_loc: location, value: default_node(source, location))
      IndexOrWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value)
    end

    # Create a new IndexTargetNode node.
    def index_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: default_node(source, location), opening_loc: location, arguments: nil, closing_loc: location, block: nil)
      IndexTargetNode.new(source, node_id, location, flags, receiver, opening_loc, arguments, closing_loc, block)
    end

    # Create a new InstanceVariableAndWriteNode node.
    def instance_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      InstanceVariableAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new InstanceVariableOperatorWriteNode node.
    def instance_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, binary_operator_loc: location, value: default_node(source, location), binary_operator: :"")
      InstanceVariableOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # Create a new InstanceVariableOrWriteNode node.
    def instance_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      InstanceVariableOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new InstanceVariableReadNode node.
    def instance_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      InstanceVariableReadNode.new(source, node_id, location, flags, name)
    end

    # Create a new InstanceVariableTargetNode node.
    def instance_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      InstanceVariableTargetNode.new(source, node_id, location, flags, name)
    end

    # Create a new InstanceVariableWriteNode node.
    def instance_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location), operator_loc: location)
      InstanceVariableWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # Create a new IntegerNode node.
    def integer_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: 0)
      IntegerNode.new(source, node_id, location, flags, value)
    end

    # Create a new InterpolatedMatchLastLineNode node.
    def interpolated_match_last_line_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location)
      InterpolatedMatchLastLineNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # Create a new InterpolatedRegularExpressionNode node.
    def interpolated_regular_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location)
      InterpolatedRegularExpressionNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # Create a new InterpolatedStringNode node.
    def interpolated_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, parts: [], closing_loc: nil)
      InterpolatedStringNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # Create a new InterpolatedSymbolNode node.
    def interpolated_symbol_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, parts: [], closing_loc: nil)
      InterpolatedSymbolNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # Create a new InterpolatedXStringNode node.
    def interpolated_x_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location)
      InterpolatedXStringNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # Create a new ItLocalVariableReadNode node.
    def it_local_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      ItLocalVariableReadNode.new(source, node_id, location, flags)
    end

    # Create a new ItParametersNode node.
    def it_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      ItParametersNode.new(source, node_id, location, flags)
    end

    # Create a new KeywordHashNode node.
    def keyword_hash_node(source: default_source, node_id: 0, location: default_location, flags: 0, elements: [])
      KeywordHashNode.new(source, node_id, location, flags, elements)
    end

    # Create a new KeywordRestParameterNode node.
    def keyword_rest_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location)
      KeywordRestParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc)
    end

    # Create a new LambdaNode node.
    def lambda_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], operator_loc: location, opening_loc: location, closing_loc: location, parameters: nil, body: nil)
      LambdaNode.new(source, node_id, location, flags, locals, operator_loc, opening_loc, closing_loc, parameters, body)
    end

    # Create a new LocalVariableAndWriteNode node.
    def local_variable_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, operator_loc: location, value: default_node(source, location), name: :"", depth: 0)
      LocalVariableAndWriteNode.new(source, node_id, location, flags, name_loc, operator_loc, value, name, depth)
    end

    # Create a new LocalVariableOperatorWriteNode node.
    def local_variable_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, binary_operator_loc: location, value: default_node(source, location), name: :"", binary_operator: :"", depth: 0)
      LocalVariableOperatorWriteNode.new(source, node_id, location, flags, name_loc, binary_operator_loc, value, name, binary_operator, depth)
    end

    # Create a new LocalVariableOrWriteNode node.
    def local_variable_or_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name_loc: location, operator_loc: location, value: default_node(source, location), name: :"", depth: 0)
      LocalVariableOrWriteNode.new(source, node_id, location, flags, name_loc, operator_loc, value, name, depth)
    end

    # Create a new LocalVariableReadNode node.
    def local_variable_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0)
      LocalVariableReadNode.new(source, node_id, location, flags, name, depth)
    end

    # Create a new LocalVariableTargetNode node.
    def local_variable_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0)
      LocalVariableTargetNode.new(source, node_id, location, flags, name, depth)
    end

    # Create a new LocalVariableWriteNode node.
    def local_variable_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", depth: 0, name_loc: location, value: default_node(source, location), operator_loc: location)
      LocalVariableWriteNode.new(source, node_id, location, flags, name, depth, name_loc, value, operator_loc)
    end

    # Create a new MatchLastLineNode node.
    def match_last_line_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: "")
      MatchLastLineNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # Create a new MatchPredicateNode node.
    def match_predicate_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), pattern: default_node(source, location), operator_loc: location)
      MatchPredicateNode.new(source, node_id, location, flags, value, pattern, operator_loc)
    end

    # Create a new MatchRequiredNode node.
    def match_required_node(source: default_source, node_id: 0, location: default_location, flags: 0, value: default_node(source, location), pattern: default_node(source, location), operator_loc: location)
      MatchRequiredNode.new(source, node_id, location, flags, value, pattern, operator_loc)
    end

    # Create a new MatchWriteNode node.
    def match_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, call: call_node(source: source), targets: [])
      MatchWriteNode.new(source, node_id, location, flags, call, targets)
    end

    # Create a new MissingNode node.
    def missing_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      MissingNode.new(source, node_id, location, flags)
    end

    # Create a new ModuleNode node.
    def module_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], module_keyword_loc: location, constant_path: constant_read_node(source: source), body: nil, end_keyword_loc: location, name: :"")
      ModuleNode.new(source, node_id, location, flags, locals, module_keyword_loc, constant_path, body, end_keyword_loc, name)
    end

    # Create a new MultiTargetNode node.
    def multi_target_node(source: default_source, node_id: 0, location: default_location, flags: 0, lefts: [], rest: nil, rights: [], lparen_loc: nil, rparen_loc: nil)
      MultiTargetNode.new(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc)
    end

    # Create a new MultiWriteNode node.
    def multi_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, lefts: [], rest: nil, rights: [], lparen_loc: nil, rparen_loc: nil, operator_loc: location, value: default_node(source, location))
      MultiWriteNode.new(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc, operator_loc, value)
    end

    # Create a new NextNode node.
    def next_node(source: default_source, node_id: 0, location: default_location, flags: 0, arguments: nil, keyword_loc: location)
      NextNode.new(source, node_id, location, flags, arguments, keyword_loc)
    end

    # Create a new NilNode node.
    def nil_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      NilNode.new(source, node_id, location, flags)
    end

    # Create a new NoKeywordsParameterNode node.
    def no_keywords_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, keyword_loc: location)
      NoKeywordsParameterNode.new(source, node_id, location, flags, operator_loc, keyword_loc)
    end

    # Create a new NumberedParametersNode node.
    def numbered_parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, maximum: 0)
      NumberedParametersNode.new(source, node_id, location, flags, maximum)
    end

    # Create a new NumberedReferenceReadNode node.
    def numbered_reference_read_node(source: default_source, node_id: 0, location: default_location, flags: 0, number: 0)
      NumberedReferenceReadNode.new(source, node_id, location, flags, number)
    end

    # Create a new OptionalKeywordParameterNode node.
    def optional_keyword_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, value: default_node(source, location))
      OptionalKeywordParameterNode.new(source, node_id, location, flags, name, name_loc, value)
    end

    # Create a new OptionalParameterNode node.
    def optional_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location, operator_loc: location, value: default_node(source, location))
      OptionalParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # Create a new OrNode node.
    def or_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: default_node(source, location), right: default_node(source, location), operator_loc: location)
      OrNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # Create a new ParametersNode node.
    def parameters_node(source: default_source, node_id: 0, location: default_location, flags: 0, requireds: [], optionals: [], rest: nil, posts: [], keywords: [], keyword_rest: nil, block: nil)
      ParametersNode.new(source, node_id, location, flags, requireds, optionals, rest, posts, keywords, keyword_rest, block)
    end

    # Create a new ParenthesesNode node.
    def parentheses_node(source: default_source, node_id: 0, location: default_location, flags: 0, body: nil, opening_loc: location, closing_loc: location)
      ParenthesesNode.new(source, node_id, location, flags, body, opening_loc, closing_loc)
    end

    # Create a new PinnedExpressionNode node.
    def pinned_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: default_node(source, location), operator_loc: location, lparen_loc: location, rparen_loc: location)
      PinnedExpressionNode.new(source, node_id, location, flags, expression, operator_loc, lparen_loc, rparen_loc)
    end

    # Create a new PinnedVariableNode node.
    def pinned_variable_node(source: default_source, node_id: 0, location: default_location, flags: 0, variable: local_variable_read_node(source: source), operator_loc: location)
      PinnedVariableNode.new(source, node_id, location, flags, variable, operator_loc)
    end

    # Create a new PostExecutionNode node.
    def post_execution_node(source: default_source, node_id: 0, location: default_location, flags: 0, statements: nil, keyword_loc: location, opening_loc: location, closing_loc: location)
      PostExecutionNode.new(source, node_id, location, flags, statements, keyword_loc, opening_loc, closing_loc)
    end

    # Create a new PreExecutionNode node.
    def pre_execution_node(source: default_source, node_id: 0, location: default_location, flags: 0, statements: nil, keyword_loc: location, opening_loc: location, closing_loc: location)
      PreExecutionNode.new(source, node_id, location, flags, statements, keyword_loc, opening_loc, closing_loc)
    end

    # Create a new ProgramNode node.
    def program_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], statements: statements_node(source: source))
      ProgramNode.new(source, node_id, location, flags, locals, statements)
    end

    # Create a new RangeNode node.
    def range_node(source: default_source, node_id: 0, location: default_location, flags: 0, left: nil, right: nil, operator_loc: location)
      RangeNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # Create a new RationalNode node.
    def rational_node(source: default_source, node_id: 0, location: default_location, flags: 0, numerator: 0, denominator: 0)
      RationalNode.new(source, node_id, location, flags, numerator, denominator)
    end

    # Create a new RedoNode node.
    def redo_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      RedoNode.new(source, node_id, location, flags)
    end

    # Create a new RegularExpressionNode node.
    def regular_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: "")
      RegularExpressionNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # Create a new RequiredKeywordParameterNode node.
    def required_keyword_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"", name_loc: location)
      RequiredKeywordParameterNode.new(source, node_id, location, flags, name, name_loc)
    end

    # Create a new RequiredParameterNode node.
    def required_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: :"")
      RequiredParameterNode.new(source, node_id, location, flags, name)
    end

    # Create a new RescueModifierNode node.
    def rescue_modifier_node(source: default_source, node_id: 0, location: default_location, flags: 0, expression: default_node(source, location), keyword_loc: location, rescue_expression: default_node(source, location))
      RescueModifierNode.new(source, node_id, location, flags, expression, keyword_loc, rescue_expression)
    end

    # Create a new RescueNode node.
    def rescue_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, exceptions: [], operator_loc: nil, reference: nil, statements: nil, subsequent: nil)
      RescueNode.new(source, node_id, location, flags, keyword_loc, exceptions, operator_loc, reference, statements, subsequent)
    end

    # Create a new RestParameterNode node.
    def rest_parameter_node(source: default_source, node_id: 0, location: default_location, flags: 0, name: nil, name_loc: nil, operator_loc: location)
      RestParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc)
    end

    # Create a new RetryNode node.
    def retry_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      RetryNode.new(source, node_id, location, flags)
    end

    # Create a new ReturnNode node.
    def return_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, arguments: nil)
      ReturnNode.new(source, node_id, location, flags, keyword_loc, arguments)
    end

    # Create a new SelfNode node.
    def self_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      SelfNode.new(source, node_id, location, flags)
    end

    # Create a new ShareableConstantNode node.
    def shareable_constant_node(source: default_source, node_id: 0, location: default_location, flags: 0, write: constant_write_node(source: source))
      ShareableConstantNode.new(source, node_id, location, flags, write)
    end

    # Create a new SingletonClassNode node.
    def singleton_class_node(source: default_source, node_id: 0, location: default_location, flags: 0, locals: [], class_keyword_loc: location, operator_loc: location, expression: default_node(source, location), body: nil, end_keyword_loc: location)
      SingletonClassNode.new(source, node_id, location, flags, locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc)
    end

    # Create a new SourceEncodingNode node.
    def source_encoding_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      SourceEncodingNode.new(source, node_id, location, flags)
    end

    # Create a new SourceFileNode node.
    def source_file_node(source: default_source, node_id: 0, location: default_location, flags: 0, filepath: "")
      SourceFileNode.new(source, node_id, location, flags, filepath)
    end

    # Create a new SourceLineNode node.
    def source_line_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      SourceLineNode.new(source, node_id, location, flags)
    end

    # Create a new SplatNode node.
    def splat_node(source: default_source, node_id: 0, location: default_location, flags: 0, operator_loc: location, expression: nil)
      SplatNode.new(source, node_id, location, flags, operator_loc, expression)
    end

    # Create a new StatementsNode node.
    def statements_node(source: default_source, node_id: 0, location: default_location, flags: 0, body: [])
      StatementsNode.new(source, node_id, location, flags, body)
    end

    # Create a new StringNode node.
    def string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, content_loc: location, closing_loc: nil, unescaped: "")
      StringNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # Create a new SuperNode node.
    def super_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, lparen_loc: nil, arguments: nil, rparen_loc: nil, block: nil)
      SuperNode.new(source, node_id, location, flags, keyword_loc, lparen_loc, arguments, rparen_loc, block)
    end

    # Create a new SymbolNode node.
    def symbol_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, value_loc: nil, closing_loc: nil, unescaped: "")
      SymbolNode.new(source, node_id, location, flags, opening_loc, value_loc, closing_loc, unescaped)
    end

    # Create a new TrueNode node.
    def true_node(source: default_source, node_id: 0, location: default_location, flags: 0)
      TrueNode.new(source, node_id, location, flags)
    end

    # Create a new UndefNode node.
    def undef_node(source: default_source, node_id: 0, location: default_location, flags: 0, names: [], keyword_loc: location)
      UndefNode.new(source, node_id, location, flags, names, keyword_loc)
    end

    # Create a new UnlessNode node.
    def unless_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, predicate: default_node(source, location), then_keyword_loc: nil, statements: nil, else_clause: nil, end_keyword_loc: nil)
      UnlessNode.new(source, node_id, location, flags, keyword_loc, predicate, then_keyword_loc, statements, else_clause, end_keyword_loc)
    end

    # Create a new UntilNode node.
    def until_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, do_keyword_loc: nil, closing_loc: nil, predicate: default_node(source, location), statements: nil)
      UntilNode.new(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements)
    end

    # Create a new WhenNode node.
    def when_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, conditions: [], then_keyword_loc: nil, statements: nil)
      WhenNode.new(source, node_id, location, flags, keyword_loc, conditions, then_keyword_loc, statements)
    end

    # Create a new WhileNode node.
    def while_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, do_keyword_loc: nil, closing_loc: nil, predicate: default_node(source, location), statements: nil)
      WhileNode.new(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements)
    end

    # Create a new XStringNode node.
    def x_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: "")
      XStringNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # Create a new YieldNode node.
    def yield_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, lparen_loc: nil, arguments: nil, rparen_loc: nil)
      YieldNode.new(source, node_id, location, flags, keyword_loc, lparen_loc, arguments, rparen_loc)
    end

    # Retrieve the value of one of the ArgumentsNodeFlags flags.
    def arguments_node_flag(name)
      case name
      when :contains_forwarding then ArgumentsNodeFlags::CONTAINS_FORWARDING
      when :contains_keywords then ArgumentsNodeFlags::CONTAINS_KEYWORDS
      when :contains_keyword_splat then ArgumentsNodeFlags::CONTAINS_KEYWORD_SPLAT
      when :contains_splat then ArgumentsNodeFlags::CONTAINS_SPLAT
      when :contains_multiple_splats then ArgumentsNodeFlags::CONTAINS_MULTIPLE_SPLATS
      else Kernel.raise ArgumentError, "invalid ArgumentsNodeFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the ArrayNodeFlags flags.
    def array_node_flag(name)
      case name
      when :contains_splat then ArrayNodeFlags::CONTAINS_SPLAT
      else Kernel.raise ArgumentError, "invalid ArrayNodeFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the CallNodeFlags flags.
    def call_node_flag(name)
      case name
      when :safe_navigation then CallNodeFlags::SAFE_NAVIGATION
      when :variable_call then CallNodeFlags::VARIABLE_CALL
      when :attribute_write then CallNodeFlags::ATTRIBUTE_WRITE
      when :ignore_visibility then CallNodeFlags::IGNORE_VISIBILITY
      else Kernel.raise ArgumentError, "invalid CallNodeFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the EncodingFlags flags.
    def encoding_flag(name)
      case name
      when :forced_utf8_encoding then EncodingFlags::FORCED_UTF8_ENCODING
      when :forced_binary_encoding then EncodingFlags::FORCED_BINARY_ENCODING
      else Kernel.raise ArgumentError, "invalid EncodingFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the IntegerBaseFlags flags.
    def integer_base_flag(name)
      case name
      when :binary then IntegerBaseFlags::BINARY
      when :decimal then IntegerBaseFlags::DECIMAL
      when :octal then IntegerBaseFlags::OCTAL
      when :hexadecimal then IntegerBaseFlags::HEXADECIMAL
      else Kernel.raise ArgumentError, "invalid IntegerBaseFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the InterpolatedStringNodeFlags flags.
    def interpolated_string_node_flag(name)
      case name
      when :frozen then InterpolatedStringNodeFlags::FROZEN
      when :mutable then InterpolatedStringNodeFlags::MUTABLE
      else Kernel.raise ArgumentError, "invalid InterpolatedStringNodeFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the KeywordHashNodeFlags flags.
    def keyword_hash_node_flag(name)
      case name
      when :symbol_keys then KeywordHashNodeFlags::SYMBOL_KEYS
      else Kernel.raise ArgumentError, "invalid KeywordHashNodeFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the LoopFlags flags.
    def loop_flag(name)
      case name
      when :begin_modifier then LoopFlags::BEGIN_MODIFIER
      else Kernel.raise ArgumentError, "invalid LoopFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the ParameterFlags flags.
    def parameter_flag(name)
      case name
      when :repeated_parameter then ParameterFlags::REPEATED_PARAMETER
      else Kernel.raise ArgumentError, "invalid ParameterFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the RangeFlags flags.
    def range_flag(name)
      case name
      when :exclude_end then RangeFlags::EXCLUDE_END
      else Kernel.raise ArgumentError, "invalid RangeFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the RegularExpressionFlags flags.
    def regular_expression_flag(name)
      case name
      when :ignore_case then RegularExpressionFlags::IGNORE_CASE
      when :extended then RegularExpressionFlags::EXTENDED
      when :multi_line then RegularExpressionFlags::MULTI_LINE
      when :once then RegularExpressionFlags::ONCE
      when :euc_jp then RegularExpressionFlags::EUC_JP
      when :ascii_8bit then RegularExpressionFlags::ASCII_8BIT
      when :windows_31j then RegularExpressionFlags::WINDOWS_31J
      when :utf_8 then RegularExpressionFlags::UTF_8
      when :forced_utf8_encoding then RegularExpressionFlags::FORCED_UTF8_ENCODING
      when :forced_binary_encoding then RegularExpressionFlags::FORCED_BINARY_ENCODING
      when :forced_us_ascii_encoding then RegularExpressionFlags::FORCED_US_ASCII_ENCODING
      else Kernel.raise ArgumentError, "invalid RegularExpressionFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the ShareableConstantNodeFlags flags.
    def shareable_constant_node_flag(name)
      case name
      when :literal then ShareableConstantNodeFlags::LITERAL
      when :experimental_everything then ShareableConstantNodeFlags::EXPERIMENTAL_EVERYTHING
      when :experimental_copy then ShareableConstantNodeFlags::EXPERIMENTAL_COPY
      else Kernel.raise ArgumentError, "invalid ShareableConstantNodeFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the StringFlags flags.
    def string_flag(name)
      case name
      when :forced_utf8_encoding then StringFlags::FORCED_UTF8_ENCODING
      when :forced_binary_encoding then StringFlags::FORCED_BINARY_ENCODING
      when :frozen then StringFlags::FROZEN
      when :mutable then StringFlags::MUTABLE
      else Kernel.raise ArgumentError, "invalid StringFlags flag: #{name.inspect}"
      end
    end

    # Retrieve the value of one of the SymbolFlags flags.
    def symbol_flag(name)
      case name
      when :forced_utf8_encoding then SymbolFlags::FORCED_UTF8_ENCODING
      when :forced_binary_encoding then SymbolFlags::FORCED_BINARY_ENCODING
      when :forced_us_ascii_encoding then SymbolFlags::FORCED_US_ASCII_ENCODING
      else Kernel.raise ArgumentError, "invalid SymbolFlags flag: #{name.inspect}"
      end
    end

    private

    # The default source object that gets attached to nodes and locations if no
    # source is specified.
    def default_source
      Source.for("")
    end

    # The default location object that gets attached to nodes if no location is
    # specified, which uses the given source.
    def default_location
      Location.new(default_source, 0, 0)
    end

    # The default node that gets attached to nodes if no node is specified for a
    # required node field.
    def default_node(source, location)
      MissingNode.new(source, -1, location, 0)
    end
  end
end
PK*J[T����share/ruby/prism/translation.rbnu�[���# frozen_string_literal: true

module Prism
  # This module is responsible for converting the prism syntax tree into other
  # syntax trees.
  module Translation # steep:ignore
    autoload :Parser, "prism/translation/parser"
    autoload :Parser33, "prism/translation/parser33"
    autoload :Parser34, "prism/translation/parser34"
    autoload :Ripper, "prism/translation/ripper"
    autoload :RubyParser, "prism/translation/ruby_parser"
  end
end
PK*J[��W�f<f<share/ruby/prism/relocation.rbnu�[���# frozen_string_literal: true

module Prism
  # Prism parses deterministically for the same input. This provides a nice
  # property that is exposed through the #node_id API on nodes. Effectively this
  # means that for the same input, these values will remain consistent every
  # time the source is parsed. This means we can reparse the source same with a
  # #node_id value and find the exact same node again.
  #
  # The Relocation module provides an API around this property. It allows you to
  # "save" nodes and locations using a minimal amount of memory (just the
  # node_id and a field identifier) and then reify them later.
  module Relocation
    # An entry in a repository that will lazily reify its values when they are
    # first accessed.
    class Entry
      # Raised if a value that could potentially be on an entry is missing
      # because it was either not configured on the repository or it has not yet
      # been fetched.
      class MissingValueError < StandardError
      end

      # Initialize a new entry with the given repository.
      def initialize(repository)
        @repository = repository
        @values = nil
      end

      # Fetch the filepath of the value.
      def filepath
        fetch_value(:filepath)
      end

      # Fetch the start line of the value.
      def start_line
        fetch_value(:start_line)
      end

      # Fetch the end line of the value.
      def end_line
        fetch_value(:end_line)
      end

      # Fetch the start byte offset of the value.
      def start_offset
        fetch_value(:start_offset)
      end

      # Fetch the end byte offset of the value.
      def end_offset
        fetch_value(:end_offset)
      end

      # Fetch the start character offset of the value.
      def start_character_offset
        fetch_value(:start_character_offset)
      end

      # Fetch the end character offset of the value.
      def end_character_offset
        fetch_value(:end_character_offset)
      end

      # Fetch the start code units offset of the value, for the encoding that
      # was configured on the repository.
      def start_code_units_offset
        fetch_value(:start_code_units_offset)
      end

      # Fetch the end code units offset of the value, for the encoding that was
      # configured on the repository.
      def end_code_units_offset
        fetch_value(:end_code_units_offset)
      end

      # Fetch the start byte column of the value.
      def start_column
        fetch_value(:start_column)
      end

      # Fetch the end byte column of the value.
      def end_column
        fetch_value(:end_column)
      end

      # Fetch the start character column of the value.
      def start_character_column
        fetch_value(:start_character_column)
      end

      # Fetch the end character column of the value.
      def end_character_column
        fetch_value(:end_character_column)
      end

      # Fetch the start code units column of the value, for the encoding that
      # was configured on the repository.
      def start_code_units_column
        fetch_value(:start_code_units_column)
      end

      # Fetch the end code units column of the value, for the encoding that was
      # configured on the repository.
      def end_code_units_column
        fetch_value(:end_code_units_column)
      end

      # Fetch the leading comments of the value.
      def leading_comments
        fetch_value(:leading_comments)
      end

      # Fetch the trailing comments of the value.
      def trailing_comments
        fetch_value(:trailing_comments)
      end

      # Fetch the leading and trailing comments of the value.
      def comments
        leading_comments.concat(trailing_comments)
      end

      # Reify the values on this entry with the given values. This is an
      # internal-only API that is called from the repository when it is time to
      # reify the values.
      def reify!(values) # :nodoc:
        @repository = nil
        @values = values
      end

      private

      # Fetch a value from the entry, raising an error if it is missing.
      def fetch_value(name)
        values.fetch(name) do
          raise MissingValueError, "No value for #{name}, make sure the " \
            "repository has been properly configured"
        end
      end

      # Return the values from the repository, reifying them if necessary.
      def values
        @values || (@repository.reify!; @values)
      end
    end

    # Represents the source of a repository that will be reparsed.
    class Source
      # The value that will need to be reparsed.
      attr_reader :value

      # Initialize the source with the given value.
      def initialize(value)
        @value = value
      end

      # Reparse the value and return the parse result.
      def result
        raise NotImplementedError, "Subclasses must implement #result"
      end

      # Create a code units cache for the given encoding.
      def code_units_cache(encoding)
        result.code_units_cache(encoding)
      end
    end

    # A source that is represented by a file path.
    class SourceFilepath < Source
      # Reparse the file and return the parse result.
      def result
        Prism.parse_file(value)
      end
    end

    # A source that is represented by a string.
    class SourceString < Source
      # Reparse the string and return the parse result.
      def result
        Prism.parse(value)
      end
    end

    # A field that represents the file path.
    class FilepathField
      # The file path that this field represents.
      attr_reader :value

      # Initialize a new field with the given file path.
      def initialize(value)
        @value = value
      end

      # Fetch the file path.
      def fields(_value)
        { filepath: value }
      end
    end

    # A field representing the start and end lines.
    class LinesField
      # Fetches the start and end line of a value.
      def fields(value)
        { start_line: value.start_line, end_line: value.end_line }
      end
    end

    # A field representing the start and end byte offsets.
    class OffsetsField
      # Fetches the start and end byte offset of a value.
      def fields(value)
        { start_offset: value.start_offset, end_offset: value.end_offset }
      end
    end

    # A field representing the start and end character offsets.
    class CharacterOffsetsField
      # Fetches the start and end character offset of a value.
      def fields(value)
        {
          start_character_offset: value.start_character_offset,
          end_character_offset: value.end_character_offset
        }
      end
    end

    # A field representing the start and end code unit offsets.
    class CodeUnitOffsetsField
      # A pointer to the repository object that is used for lazily creating a
      # code units cache.
      attr_reader :repository

      # The associated encoding for the code units.
      attr_reader :encoding

      # Initialize a new field with the associated repository and encoding.
      def initialize(repository, encoding)
        @repository = repository
        @encoding = encoding
        @cache = nil
      end

      # Fetches the start and end code units offset of a value for a particular
      # encoding.
      def fields(value)
        {
          start_code_units_offset: value.cached_start_code_units_offset(cache),
          end_code_units_offset: value.cached_end_code_units_offset(cache)
        }
      end

      private

      # Lazily create a code units cache for the associated encoding.
      def cache
        @cache ||= repository.code_units_cache(encoding)
      end
    end

    # A field representing the start and end byte columns.
    class ColumnsField
      # Fetches the start and end byte column of a value.
      def fields(value)
        { start_column: value.start_column, end_column: value.end_column }
      end
    end

    # A field representing the start and end character columns.
    class CharacterColumnsField
      # Fetches the start and end character column of a value.
      def fields(value)
        {
          start_character_column: value.start_character_column,
          end_character_column: value.end_character_column
        }
      end
    end

    # A field representing the start and end code unit columns for a specific
    # encoding.
    class CodeUnitColumnsField
      # The repository object that is used for lazily creating a code units
      # cache.
      attr_reader :repository

      # The associated encoding for the code units.
      attr_reader :encoding

      # Initialize a new field with the associated repository and encoding.
      def initialize(repository, encoding)
        @repository = repository
        @encoding = encoding
        @cache = nil
      end

      # Fetches the start and end code units column of a value for a particular
      # encoding.
      def fields(value)
        {
          start_code_units_column: value.cached_start_code_units_column(cache),
          end_code_units_column: value.cached_end_code_units_column(cache)
        }
      end

      private

      # Lazily create a code units cache for the associated encoding.
      def cache
        @cache ||= repository.code_units_cache(encoding)
      end
    end

    # An abstract field used as the parent class of the two comments fields.
    class CommentsField
      # An object that represents a slice of a comment.
      class Comment
        # The slice of the comment.
        attr_reader :slice

        # Initialize a new comment with the given slice.
        def initialize(slice)
          @slice = slice
        end
      end

      private

      # Create comment objects from the given values.
      def comments(values)
        values.map { |value| Comment.new(value.slice) }
      end
    end

    # A field representing the leading comments.
    class LeadingCommentsField < CommentsField
      # Fetches the leading comments of a value.
      def fields(value)
        { leading_comments: comments(value.leading_comments) }
      end
    end

    # A field representing the trailing comments.
    class TrailingCommentsField < CommentsField
      # Fetches the trailing comments of a value.
      def fields(value)
        { trailing_comments: comments(value.trailing_comments) }
      end
    end

    # A repository is a configured collection of fields and a set of entries
    # that knows how to reparse a source and reify the values.
    class Repository
      # Raised when multiple fields of the same type are configured on the same
      # repository.
      class ConfigurationError < StandardError
      end

      # The source associated with this repository. This will be either a
      # SourceFilepath (the most common use case) or a SourceString.
      attr_reader :source

      # The fields that have been configured on this repository.
      attr_reader :fields

      # The entries that have been saved on this repository.
      attr_reader :entries

      # Initialize a new repository with the given source.
      def initialize(source)
        @source = source
        @fields = {}
        @entries = Hash.new { |hash, node_id| hash[node_id] = {} }
      end

      # Create a code units cache for the given encoding from the source.
      def code_units_cache(encoding)
        source.code_units_cache(encoding)
      end

      # Configure the filepath field for this repository and return self.
      def filepath
        raise ConfigurationError, "Can only specify filepath for a filepath source" unless source.is_a?(SourceFilepath)
        field(:filepath, FilepathField.new(source.value))
      end

      # Configure the lines field for this repository and return self.
      def lines
        field(:lines, LinesField.new)
      end

      # Configure the offsets field for this repository and return self.
      def offsets
        field(:offsets, OffsetsField.new)
      end

      # Configure the character offsets field for this repository and return
      # self.
      def character_offsets
        field(:character_offsets, CharacterOffsetsField.new)
      end

      # Configure the code unit offsets field for this repository for a specific
      # encoding and return self.
      def code_unit_offsets(encoding)
        field(:code_unit_offsets, CodeUnitOffsetsField.new(self, encoding))
      end

      # Configure the columns field for this repository and return self.
      def columns
        field(:columns, ColumnsField.new)
      end

      # Configure the character columns field for this repository and return
      # self.
      def character_columns
        field(:character_columns, CharacterColumnsField.new)
      end

      # Configure the code unit columns field for this repository for a specific
      # encoding and return self.
      def code_unit_columns(encoding)
        field(:code_unit_columns, CodeUnitColumnsField.new(self, encoding))
      end

      # Configure the leading comments field for this repository and return
      # self.
      def leading_comments
        field(:leading_comments, LeadingCommentsField.new)
      end

      # Configure the trailing comments field for this repository and return
      # self.
      def trailing_comments
        field(:trailing_comments, TrailingCommentsField.new)
      end

      # Configure both the leading and trailing comment fields for this
      # repository and return self.
      def comments
        leading_comments.trailing_comments
      end

      # This method is called from nodes and locations when they want to enter
      # themselves into the repository. It it internal-only and meant to be
      # called from the #save* APIs.
      def enter(node_id, field_name) # :nodoc:
        entry = Entry.new(self)
        @entries[node_id][field_name] = entry
        entry
      end

      # This method is called from the entries in the repository when they need
      # to reify their values. It is internal-only and meant to be called from
      # the various value APIs.
      def reify! # :nodoc:
        result = source.result

        # Attach the comments if they have been requested as part of the
        # configuration of this repository.
        if fields.key?(:leading_comments) || fields.key?(:trailing_comments)
          result.attach_comments!
        end

        queue = [result.value] #: Array[Prism::node]
        while (node = queue.shift)
          @entries[node.node_id].each do |field_name, entry|
            value = node.public_send(field_name)
            values = {} #: Hash[Symbol, untyped]

            fields.each_value do |field|
              values.merge!(field.fields(value))
            end

            entry.reify!(values)
          end

          queue.concat(node.compact_child_nodes)
        end

        @entries.clear
      end

      private

      # Append the given field to the repository and return the repository so
      # that these calls can be chained.
      def field(name, value)
        raise ConfigurationError, "Cannot specify multiple #{name} fields" if @fields.key?(name)
        @fields[name] = value
        self
      end
    end

    # Create a new repository for the given filepath.
    def self.filepath(value)
      Repository.new(SourceFilepath.new(value))
    end

    # Create a new repository for the given string.
    def self.string(value)
      Repository.new(SourceString.new(value))
    end
  end
end
PK*J[��N� � share/ruby/prism/pattern.rbnu�[���# frozen_string_literal: true

module Prism
  # A pattern is an object that wraps a Ruby pattern matching expression. The
  # expression would normally be passed to an `in` clause within a `case`
  # expression or a rightward assignment expression. For example, in the
  # following snippet:
  #
  #     case node
  #     in ConstantPathNode[ConstantReadNode[name: :Prism], ConstantReadNode[name: :Pattern]]
  #     end
  #
  # the pattern is the <tt>ConstantPathNode[...]</tt> expression.
  #
  # The pattern gets compiled into an object that responds to #call by running
  # the #compile method. This method itself will run back through Prism to
  # parse the expression into a tree, then walk the tree to generate the
  # necessary callable objects. For example, if you wanted to compile the
  # expression above into a callable, you would:
  #
  #     callable = Prism::Pattern.new("ConstantPathNode[ConstantReadNode[name: :Prism], ConstantReadNode[name: :Pattern]]").compile
  #     callable.call(node)
  #
  # The callable object returned by #compile is guaranteed to respond to #call
  # with a single argument, which is the node to match against. It also is
  # guaranteed to respond to #===, which means it itself can be used in a `case`
  # expression, as in:
  #
  #     case node
  #     when callable
  #     end
  #
  # If the query given to the initializer cannot be compiled into a valid
  # matcher (either because of a syntax error or because it is using syntax we
  # do not yet support) then a Prism::Pattern::CompilationError will be
  # raised.
  class Pattern
    # Raised when the query given to a pattern is either invalid Ruby syntax or
    # is using syntax that we don't yet support.
    class CompilationError < StandardError
      # Create a new CompilationError with the given representation of the node
      # that caused the error.
      def initialize(repr)
        super(<<~ERROR)
          prism was unable to compile the pattern you provided into a usable
          expression. It failed on to understand the node represented by:

          #{repr}

          Note that not all syntax supported by Ruby's pattern matching syntax
          is also supported by prism's patterns. If you're using some syntax
          that you believe should be supported, please open an issue on
          GitHub at https://github.com/ruby/prism/issues/new.
        ERROR
      end
    end

    # The query that this pattern was initialized with.
    attr_reader :query

    # Create a new pattern with the given query. The query should be a string
    # containing a Ruby pattern matching expression.
    def initialize(query)
      @query = query
      @compiled = nil
    end

    # Compile the query into a callable object that can be used to match against
    # nodes.
    def compile
      result = Prism.parse("case nil\nin #{query}\nend")

      case_match_node = result.value.statements.body.last
      raise CompilationError, case_match_node.inspect unless case_match_node.is_a?(CaseMatchNode)

      in_node = case_match_node.conditions.last
      raise CompilationError, in_node.inspect unless in_node.is_a?(InNode)

      compile_node(in_node.pattern)
    end

    # Scan the given node and all of its children for nodes that match the
    # pattern. If a block is given, it will be called with each node that
    # matches the pattern. If no block is given, an enumerator will be returned
    # that will yield each node that matches the pattern.
    def scan(root)
      return to_enum(:scan, root) unless block_given?

      @compiled ||= compile
      queue = [root]

      while (node = queue.shift)
        yield node if @compiled.call(node) # steep:ignore
        queue.concat(node.compact_child_nodes)
      end
    end

    private

    # Shortcut for combining two procs into one that returns true if both return
    # true.
    def combine_and(left, right)
      ->(other) { left.call(other) && right.call(other) }
    end

    # Shortcut for combining two procs into one that returns true if either
    # returns true.
    def combine_or(left, right)
      ->(other) { left.call(other) || right.call(other) }
    end

    # Raise an error because the given node is not supported.
    def compile_error(node)
      raise CompilationError, node.inspect
    end

    # in [foo, bar, baz]
    def compile_array_pattern_node(node)
      compile_error(node) if !node.rest.nil? || node.posts.any?

      constant = node.constant
      compiled_constant = compile_node(constant) if constant

      preprocessed = node.requireds.map { |required| compile_node(required) }

      compiled_requireds = ->(other) do
        deconstructed = other.deconstruct

        deconstructed.length == preprocessed.length &&
          preprocessed
            .zip(deconstructed)
            .all? { |(matcher, value)| matcher.call(value) }
      end

      if compiled_constant
        combine_and(compiled_constant, compiled_requireds)
      else
        compiled_requireds
      end
    end

    # in foo | bar
    def compile_alternation_pattern_node(node)
      combine_or(compile_node(node.left), compile_node(node.right))
    end

    # in Prism::ConstantReadNode
    def compile_constant_path_node(node)
      parent = node.parent

      if parent.is_a?(ConstantReadNode) && parent.slice == "Prism"
        name = node.name
        raise CompilationError, node.inspect if name.nil?

        compile_constant_name(node, name)
      else
        compile_error(node)
      end
    end

    # in ConstantReadNode
    # in String
    def compile_constant_read_node(node)
      compile_constant_name(node, node.name)
    end

    # Compile a name associated with a constant.
    def compile_constant_name(node, name)
      if Prism.const_defined?(name, false)
        clazz = Prism.const_get(name)

        ->(other) { clazz === other }
      elsif Object.const_defined?(name, false)
        clazz = Object.const_get(name)

        ->(other) { clazz === other }
      else
        compile_error(node)
      end
    end

    # in InstanceVariableReadNode[name: Symbol]
    # in { name: Symbol }
    def compile_hash_pattern_node(node)
      compile_error(node) if node.rest
      compiled_constant = compile_node(node.constant) if node.constant

      preprocessed =
        node.elements.to_h do |element|
          key = element.key
          if key.is_a?(SymbolNode)
            [key.unescaped.to_sym, compile_node(element.value)]
          else
            raise CompilationError, element.inspect
          end
        end

      compiled_keywords = ->(other) do
        deconstructed = other.deconstruct_keys(preprocessed.keys)

        preprocessed.all? do |keyword, matcher|
          deconstructed.key?(keyword) && matcher.call(deconstructed[keyword])
        end
      end

      if compiled_constant
        combine_and(compiled_constant, compiled_keywords)
      else
        compiled_keywords
      end
    end

    # in nil
    def compile_nil_node(node)
      ->(attribute) { attribute.nil? }
    end

    # in /foo/
    def compile_regular_expression_node(node)
      regexp = Regexp.new(node.unescaped, node.closing[1..])

      ->(attribute) { regexp === attribute }
    end

    # in ""
    # in "foo"
    def compile_string_node(node)
      string = node.unescaped

      ->(attribute) { string === attribute }
    end

    # in :+
    # in :foo
    def compile_symbol_node(node)
      symbol = node.unescaped.to_sym

      ->(attribute) { symbol === attribute }
    end

    # Compile any kind of node. Dispatch out to the individual compilation
    # methods based on the type of node.
    def compile_node(node)
      case node
      when AlternationPatternNode
        compile_alternation_pattern_node(node)
      when ArrayPatternNode
        compile_array_pattern_node(node)
      when ConstantPathNode
        compile_constant_path_node(node)
      when ConstantReadNode
        compile_constant_read_node(node)
      when HashPatternNode
        compile_hash_pattern_node(node)
      when NilNode
        compile_nil_node(node)
      when RegularExpressionNode
        compile_regular_expression_node(node)
      when StringNode
        compile_string_node(node)
      when SymbolNode
        compile_symbol_node(node)
      else
        compile_error(node)
      end
    end
  end
end
PK*J[i�l�OTOT%share/ruby/prism/mutation_compiler.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/mutation_compiler.rb.erb
if you are looking to modify the template
=end

module Prism
  # This visitor walks through the tree and copies each node as it is being
  # visited. This is useful for consumers that want to mutate the tree, as you
  # can change subtrees in place without effecting the rest of the tree.
  class MutationCompiler < Compiler
    # Copy a AliasGlobalVariableNode node
    def visit_alias_global_variable_node(node)
      node.copy(new_name: visit(node.new_name), old_name: visit(node.old_name))
    end

    # Copy a AliasMethodNode node
    def visit_alias_method_node(node)
      node.copy(new_name: visit(node.new_name), old_name: visit(node.old_name))
    end

    # Copy a AlternationPatternNode node
    def visit_alternation_pattern_node(node)
      node.copy(left: visit(node.left), right: visit(node.right))
    end

    # Copy a AndNode node
    def visit_and_node(node)
      node.copy(left: visit(node.left), right: visit(node.right))
    end

    # Copy a ArgumentsNode node
    def visit_arguments_node(node)
      node.copy(arguments: visit_all(node.arguments))
    end

    # Copy a ArrayNode node
    def visit_array_node(node)
      node.copy(elements: visit_all(node.elements))
    end

    # Copy a ArrayPatternNode node
    def visit_array_pattern_node(node)
      node.copy(constant: visit(node.constant), requireds: visit_all(node.requireds), rest: visit(node.rest), posts: visit_all(node.posts))
    end

    # Copy a AssocNode node
    def visit_assoc_node(node)
      node.copy(key: visit(node.key), value: visit(node.value))
    end

    # Copy a AssocSplatNode node
    def visit_assoc_splat_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a BackReferenceReadNode node
    def visit_back_reference_read_node(node)
      node.copy
    end

    # Copy a BeginNode node
    def visit_begin_node(node)
      node.copy(statements: visit(node.statements), rescue_clause: visit(node.rescue_clause), else_clause: visit(node.else_clause), ensure_clause: visit(node.ensure_clause))
    end

    # Copy a BlockArgumentNode node
    def visit_block_argument_node(node)
      node.copy(expression: visit(node.expression))
    end

    # Copy a BlockLocalVariableNode node
    def visit_block_local_variable_node(node)
      node.copy
    end

    # Copy a BlockNode node
    def visit_block_node(node)
      node.copy(parameters: visit(node.parameters), body: visit(node.body))
    end

    # Copy a BlockParameterNode node
    def visit_block_parameter_node(node)
      node.copy
    end

    # Copy a BlockParametersNode node
    def visit_block_parameters_node(node)
      node.copy(parameters: visit(node.parameters), locals: visit_all(node.locals))
    end

    # Copy a BreakNode node
    def visit_break_node(node)
      node.copy(arguments: visit(node.arguments))
    end

    # Copy a CallAndWriteNode node
    def visit_call_and_write_node(node)
      node.copy(receiver: visit(node.receiver), value: visit(node.value))
    end

    # Copy a CallNode node
    def visit_call_node(node)
      node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block))
    end

    # Copy a CallOperatorWriteNode node
    def visit_call_operator_write_node(node)
      node.copy(receiver: visit(node.receiver), value: visit(node.value))
    end

    # Copy a CallOrWriteNode node
    def visit_call_or_write_node(node)
      node.copy(receiver: visit(node.receiver), value: visit(node.value))
    end

    # Copy a CallTargetNode node
    def visit_call_target_node(node)
      node.copy(receiver: visit(node.receiver))
    end

    # Copy a CapturePatternNode node
    def visit_capture_pattern_node(node)
      node.copy(value: visit(node.value), target: visit(node.target))
    end

    # Copy a CaseMatchNode node
    def visit_case_match_node(node)
      node.copy(predicate: visit(node.predicate), conditions: visit_all(node.conditions), else_clause: visit(node.else_clause))
    end

    # Copy a CaseNode node
    def visit_case_node(node)
      node.copy(predicate: visit(node.predicate), conditions: visit_all(node.conditions), else_clause: visit(node.else_clause))
    end

    # Copy a ClassNode node
    def visit_class_node(node)
      node.copy(constant_path: visit(node.constant_path), superclass: visit(node.superclass), body: visit(node.body))
    end

    # Copy a ClassVariableAndWriteNode node
    def visit_class_variable_and_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ClassVariableOperatorWriteNode node
    def visit_class_variable_operator_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ClassVariableOrWriteNode node
    def visit_class_variable_or_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ClassVariableReadNode node
    def visit_class_variable_read_node(node)
      node.copy
    end

    # Copy a ClassVariableTargetNode node
    def visit_class_variable_target_node(node)
      node.copy
    end

    # Copy a ClassVariableWriteNode node
    def visit_class_variable_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ConstantAndWriteNode node
    def visit_constant_and_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ConstantOperatorWriteNode node
    def visit_constant_operator_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ConstantOrWriteNode node
    def visit_constant_or_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ConstantPathAndWriteNode node
    def visit_constant_path_and_write_node(node)
      node.copy(target: visit(node.target), value: visit(node.value))
    end

    # Copy a ConstantPathNode node
    def visit_constant_path_node(node)
      node.copy(parent: visit(node.parent))
    end

    # Copy a ConstantPathOperatorWriteNode node
    def visit_constant_path_operator_write_node(node)
      node.copy(target: visit(node.target), value: visit(node.value))
    end

    # Copy a ConstantPathOrWriteNode node
    def visit_constant_path_or_write_node(node)
      node.copy(target: visit(node.target), value: visit(node.value))
    end

    # Copy a ConstantPathTargetNode node
    def visit_constant_path_target_node(node)
      node.copy(parent: visit(node.parent))
    end

    # Copy a ConstantPathWriteNode node
    def visit_constant_path_write_node(node)
      node.copy(target: visit(node.target), value: visit(node.value))
    end

    # Copy a ConstantReadNode node
    def visit_constant_read_node(node)
      node.copy
    end

    # Copy a ConstantTargetNode node
    def visit_constant_target_node(node)
      node.copy
    end

    # Copy a ConstantWriteNode node
    def visit_constant_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a DefNode node
    def visit_def_node(node)
      node.copy(receiver: visit(node.receiver), parameters: visit(node.parameters), body: visit(node.body))
    end

    # Copy a DefinedNode node
    def visit_defined_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ElseNode node
    def visit_else_node(node)
      node.copy(statements: visit(node.statements))
    end

    # Copy a EmbeddedStatementsNode node
    def visit_embedded_statements_node(node)
      node.copy(statements: visit(node.statements))
    end

    # Copy a EmbeddedVariableNode node
    def visit_embedded_variable_node(node)
      node.copy(variable: visit(node.variable))
    end

    # Copy a EnsureNode node
    def visit_ensure_node(node)
      node.copy(statements: visit(node.statements))
    end

    # Copy a FalseNode node
    def visit_false_node(node)
      node.copy
    end

    # Copy a FindPatternNode node
    def visit_find_pattern_node(node)
      node.copy(constant: visit(node.constant), left: visit(node.left), requireds: visit_all(node.requireds), right: visit(node.right))
    end

    # Copy a FlipFlopNode node
    def visit_flip_flop_node(node)
      node.copy(left: visit(node.left), right: visit(node.right))
    end

    # Copy a FloatNode node
    def visit_float_node(node)
      node.copy
    end

    # Copy a ForNode node
    def visit_for_node(node)
      node.copy(index: visit(node.index), collection: visit(node.collection), statements: visit(node.statements))
    end

    # Copy a ForwardingArgumentsNode node
    def visit_forwarding_arguments_node(node)
      node.copy
    end

    # Copy a ForwardingParameterNode node
    def visit_forwarding_parameter_node(node)
      node.copy
    end

    # Copy a ForwardingSuperNode node
    def visit_forwarding_super_node(node)
      node.copy(block: visit(node.block))
    end

    # Copy a GlobalVariableAndWriteNode node
    def visit_global_variable_and_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a GlobalVariableOperatorWriteNode node
    def visit_global_variable_operator_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a GlobalVariableOrWriteNode node
    def visit_global_variable_or_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a GlobalVariableReadNode node
    def visit_global_variable_read_node(node)
      node.copy
    end

    # Copy a GlobalVariableTargetNode node
    def visit_global_variable_target_node(node)
      node.copy
    end

    # Copy a GlobalVariableWriteNode node
    def visit_global_variable_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a HashNode node
    def visit_hash_node(node)
      node.copy(elements: visit_all(node.elements))
    end

    # Copy a HashPatternNode node
    def visit_hash_pattern_node(node)
      node.copy(constant: visit(node.constant), elements: visit_all(node.elements), rest: visit(node.rest))
    end

    # Copy a IfNode node
    def visit_if_node(node)
      node.copy(predicate: visit(node.predicate), statements: visit(node.statements), subsequent: visit(node.subsequent))
    end

    # Copy a ImaginaryNode node
    def visit_imaginary_node(node)
      node.copy(numeric: visit(node.numeric))
    end

    # Copy a ImplicitNode node
    def visit_implicit_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a ImplicitRestNode node
    def visit_implicit_rest_node(node)
      node.copy
    end

    # Copy a InNode node
    def visit_in_node(node)
      node.copy(pattern: visit(node.pattern), statements: visit(node.statements))
    end

    # Copy a IndexAndWriteNode node
    def visit_index_and_write_node(node)
      node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block), value: visit(node.value))
    end

    # Copy a IndexOperatorWriteNode node
    def visit_index_operator_write_node(node)
      node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block), value: visit(node.value))
    end

    # Copy a IndexOrWriteNode node
    def visit_index_or_write_node(node)
      node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block), value: visit(node.value))
    end

    # Copy a IndexTargetNode node
    def visit_index_target_node(node)
      node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block))
    end

    # Copy a InstanceVariableAndWriteNode node
    def visit_instance_variable_and_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a InstanceVariableOperatorWriteNode node
    def visit_instance_variable_operator_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a InstanceVariableOrWriteNode node
    def visit_instance_variable_or_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a InstanceVariableReadNode node
    def visit_instance_variable_read_node(node)
      node.copy
    end

    # Copy a InstanceVariableTargetNode node
    def visit_instance_variable_target_node(node)
      node.copy
    end

    # Copy a InstanceVariableWriteNode node
    def visit_instance_variable_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a IntegerNode node
    def visit_integer_node(node)
      node.copy
    end

    # Copy a InterpolatedMatchLastLineNode node
    def visit_interpolated_match_last_line_node(node)
      node.copy(parts: visit_all(node.parts))
    end

    # Copy a InterpolatedRegularExpressionNode node
    def visit_interpolated_regular_expression_node(node)
      node.copy(parts: visit_all(node.parts))
    end

    # Copy a InterpolatedStringNode node
    def visit_interpolated_string_node(node)
      node.copy(parts: visit_all(node.parts))
    end

    # Copy a InterpolatedSymbolNode node
    def visit_interpolated_symbol_node(node)
      node.copy(parts: visit_all(node.parts))
    end

    # Copy a InterpolatedXStringNode node
    def visit_interpolated_x_string_node(node)
      node.copy(parts: visit_all(node.parts))
    end

    # Copy a ItLocalVariableReadNode node
    def visit_it_local_variable_read_node(node)
      node.copy
    end

    # Copy a ItParametersNode node
    def visit_it_parameters_node(node)
      node.copy
    end

    # Copy a KeywordHashNode node
    def visit_keyword_hash_node(node)
      node.copy(elements: visit_all(node.elements))
    end

    # Copy a KeywordRestParameterNode node
    def visit_keyword_rest_parameter_node(node)
      node.copy
    end

    # Copy a LambdaNode node
    def visit_lambda_node(node)
      node.copy(parameters: visit(node.parameters), body: visit(node.body))
    end

    # Copy a LocalVariableAndWriteNode node
    def visit_local_variable_and_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a LocalVariableOperatorWriteNode node
    def visit_local_variable_operator_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a LocalVariableOrWriteNode node
    def visit_local_variable_or_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a LocalVariableReadNode node
    def visit_local_variable_read_node(node)
      node.copy
    end

    # Copy a LocalVariableTargetNode node
    def visit_local_variable_target_node(node)
      node.copy
    end

    # Copy a LocalVariableWriteNode node
    def visit_local_variable_write_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a MatchLastLineNode node
    def visit_match_last_line_node(node)
      node.copy
    end

    # Copy a MatchPredicateNode node
    def visit_match_predicate_node(node)
      node.copy(value: visit(node.value), pattern: visit(node.pattern))
    end

    # Copy a MatchRequiredNode node
    def visit_match_required_node(node)
      node.copy(value: visit(node.value), pattern: visit(node.pattern))
    end

    # Copy a MatchWriteNode node
    def visit_match_write_node(node)
      node.copy(call: visit(node.call), targets: visit_all(node.targets))
    end

    # Copy a MissingNode node
    def visit_missing_node(node)
      node.copy
    end

    # Copy a ModuleNode node
    def visit_module_node(node)
      node.copy(constant_path: visit(node.constant_path), body: visit(node.body))
    end

    # Copy a MultiTargetNode node
    def visit_multi_target_node(node)
      node.copy(lefts: visit_all(node.lefts), rest: visit(node.rest), rights: visit_all(node.rights))
    end

    # Copy a MultiWriteNode node
    def visit_multi_write_node(node)
      node.copy(lefts: visit_all(node.lefts), rest: visit(node.rest), rights: visit_all(node.rights), value: visit(node.value))
    end

    # Copy a NextNode node
    def visit_next_node(node)
      node.copy(arguments: visit(node.arguments))
    end

    # Copy a NilNode node
    def visit_nil_node(node)
      node.copy
    end

    # Copy a NoKeywordsParameterNode node
    def visit_no_keywords_parameter_node(node)
      node.copy
    end

    # Copy a NumberedParametersNode node
    def visit_numbered_parameters_node(node)
      node.copy
    end

    # Copy a NumberedReferenceReadNode node
    def visit_numbered_reference_read_node(node)
      node.copy
    end

    # Copy a OptionalKeywordParameterNode node
    def visit_optional_keyword_parameter_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a OptionalParameterNode node
    def visit_optional_parameter_node(node)
      node.copy(value: visit(node.value))
    end

    # Copy a OrNode node
    def visit_or_node(node)
      node.copy(left: visit(node.left), right: visit(node.right))
    end

    # Copy a ParametersNode node
    def visit_parameters_node(node)
      node.copy(requireds: visit_all(node.requireds), optionals: visit_all(node.optionals), rest: visit(node.rest), posts: visit_all(node.posts), keywords: visit_all(node.keywords), keyword_rest: visit(node.keyword_rest), block: visit(node.block))
    end

    # Copy a ParenthesesNode node
    def visit_parentheses_node(node)
      node.copy(body: visit(node.body))
    end

    # Copy a PinnedExpressionNode node
    def visit_pinned_expression_node(node)
      node.copy(expression: visit(node.expression))
    end

    # Copy a PinnedVariableNode node
    def visit_pinned_variable_node(node)
      node.copy(variable: visit(node.variable))
    end

    # Copy a PostExecutionNode node
    def visit_post_execution_node(node)
      node.copy(statements: visit(node.statements))
    end

    # Copy a PreExecutionNode node
    def visit_pre_execution_node(node)
      node.copy(statements: visit(node.statements))
    end

    # Copy a ProgramNode node
    def visit_program_node(node)
      node.copy(statements: visit(node.statements))
    end

    # Copy a RangeNode node
    def visit_range_node(node)
      node.copy(left: visit(node.left), right: visit(node.right))
    end

    # Copy a RationalNode node
    def visit_rational_node(node)
      node.copy
    end

    # Copy a RedoNode node
    def visit_redo_node(node)
      node.copy
    end

    # Copy a RegularExpressionNode node
    def visit_regular_expression_node(node)
      node.copy
    end

    # Copy a RequiredKeywordParameterNode node
    def visit_required_keyword_parameter_node(node)
      node.copy
    end

    # Copy a RequiredParameterNode node
    def visit_required_parameter_node(node)
      node.copy
    end

    # Copy a RescueModifierNode node
    def visit_rescue_modifier_node(node)
      node.copy(expression: visit(node.expression), rescue_expression: visit(node.rescue_expression))
    end

    # Copy a RescueNode node
    def visit_rescue_node(node)
      node.copy(exceptions: visit_all(node.exceptions), reference: visit(node.reference), statements: visit(node.statements), subsequent: visit(node.subsequent))
    end

    # Copy a RestParameterNode node
    def visit_rest_parameter_node(node)
      node.copy
    end

    # Copy a RetryNode node
    def visit_retry_node(node)
      node.copy
    end

    # Copy a ReturnNode node
    def visit_return_node(node)
      node.copy(arguments: visit(node.arguments))
    end

    # Copy a SelfNode node
    def visit_self_node(node)
      node.copy
    end

    # Copy a ShareableConstantNode node
    def visit_shareable_constant_node(node)
      node.copy(write: visit(node.write))
    end

    # Copy a SingletonClassNode node
    def visit_singleton_class_node(node)
      node.copy(expression: visit(node.expression), body: visit(node.body))
    end

    # Copy a SourceEncodingNode node
    def visit_source_encoding_node(node)
      node.copy
    end

    # Copy a SourceFileNode node
    def visit_source_file_node(node)
      node.copy
    end

    # Copy a SourceLineNode node
    def visit_source_line_node(node)
      node.copy
    end

    # Copy a SplatNode node
    def visit_splat_node(node)
      node.copy(expression: visit(node.expression))
    end

    # Copy a StatementsNode node
    def visit_statements_node(node)
      node.copy(body: visit_all(node.body))
    end

    # Copy a StringNode node
    def visit_string_node(node)
      node.copy
    end

    # Copy a SuperNode node
    def visit_super_node(node)
      node.copy(arguments: visit(node.arguments), block: visit(node.block))
    end

    # Copy a SymbolNode node
    def visit_symbol_node(node)
      node.copy
    end

    # Copy a TrueNode node
    def visit_true_node(node)
      node.copy
    end

    # Copy a UndefNode node
    def visit_undef_node(node)
      node.copy(names: visit_all(node.names))
    end

    # Copy a UnlessNode node
    def visit_unless_node(node)
      node.copy(predicate: visit(node.predicate), statements: visit(node.statements), else_clause: visit(node.else_clause))
    end

    # Copy a UntilNode node
    def visit_until_node(node)
      node.copy(predicate: visit(node.predicate), statements: visit(node.statements))
    end

    # Copy a WhenNode node
    def visit_when_node(node)
      node.copy(conditions: visit_all(node.conditions), statements: visit(node.statements))
    end

    # Copy a WhileNode node
    def visit_while_node(node)
      node.copy(predicate: visit(node.predicate), statements: visit(node.statements))
    end

    # Copy a XStringNode node
    def visit_x_string_node(node)
      node.copy
    end

    # Copy a YieldNode node
    def visit_yield_node(node)
      node.copy(arguments: visit(node.arguments))
    end
  end
end
PK*J[!ۘ���+share/ruby/prism/translation/ripper/shim.rbnu�[���# frozen_string_literal: true

# This writes the prism ripper translation into the Ripper constant so that
# users can transparently use Ripper without any changes.
Ripper = Prism::Translation::Ripper
PK*J[<���//+share/ruby/prism/translation/ripper/sexp.rbnu�[���# frozen_string_literal: true

require_relative "../ripper"

module Prism
  module Translation
    class Ripper
      # This class mirrors the ::Ripper::SexpBuilder subclass of ::Ripper that
      # returns the arrays of [type, *children].
      class SexpBuilder < Ripper
        # :stopdoc:

        attr_reader :error

        private

        def dedent_element(e, width)
          if (n = dedent_string(e[1], width)) > 0
            e[2][1] += n
          end
          e
        end

        def on_heredoc_dedent(val, width)
          sub = proc do |cont|
            cont.map! do |e|
              if Array === e
                case e[0]
                when :@tstring_content
                  e = dedent_element(e, width)
                when /_add\z/
                  e[1] = sub[e[1]]
                end
              elsif String === e
                dedent_string(e, width)
              end
              e
            end
          end
          sub[val]
          val
        end

        events = private_instance_methods(false).grep(/\Aon_/) {$'.to_sym}
        (PARSER_EVENTS - events).each do |event|
          module_eval(<<-End, __FILE__, __LINE__ + 1)
            def on_#{event}(*args)
              args.unshift :#{event}
            end
          End
        end

        SCANNER_EVENTS.each do |event|
          module_eval(<<-End, __FILE__, __LINE__ + 1)
            def on_#{event}(tok)
              [:@#{event}, tok, [lineno(), column()]]
            end
          End
        end

        def on_error(mesg)
          @error = mesg
        end
        remove_method :on_parse_error
        alias on_parse_error on_error
        alias compile_error on_error

        # :startdoc:
      end

      # This class mirrors the ::Ripper::SexpBuilderPP subclass of ::Ripper that
      # returns the same values as ::Ripper::SexpBuilder except with a couple of
      # niceties that flatten linked lists into arrays.
      class SexpBuilderPP < SexpBuilder
        # :stopdoc:

        private

        def on_heredoc_dedent(val, width)
          val.map! do |e|
            next e if Symbol === e and /_content\z/ =~ e
            if Array === e and e[0] == :@tstring_content
              e = dedent_element(e, width)
            elsif String === e
              dedent_string(e, width)
            end
            e
          end
          val
        end

        def _dispatch_event_new
          []
        end

        def _dispatch_event_push(list, item)
          list.push item
          list
        end

        def on_mlhs_paren(list)
          [:mlhs, *list]
        end

        def on_mlhs_add_star(list, star)
          list.push([:rest_param, star])
        end

        def on_mlhs_add_post(list, post)
          list.concat(post)
        end

        PARSER_EVENT_TABLE.each do |event, arity|
          if /_new\z/ =~ event and arity == 0
            alias_method "on_#{event}", :_dispatch_event_new
          elsif /_add\z/ =~ event
            alias_method "on_#{event}", :_dispatch_event_push
          end
        end

        # :startdoc:
      end
    end
  end
end
PK*J[}��}G/G/&share/ruby/prism/translation/parser.rbnu�[���# frozen_string_literal: true

begin
  require "parser"
rescue LoadError
  warn(%q{Error: Unable to load parser. Add `gem "parser"` to your Gemfile.})
  exit(1)
end

module Prism
  module Translation
    # This class is the entry-point for converting a prism syntax tree into the
    # whitequark/parser gem's syntax tree. It inherits from the base parser for
    # the parser gem, and overrides the parse* methods to parse with prism and
    # then translate.
    class Parser < ::Parser::Base
      Diagnostic = ::Parser::Diagnostic # :nodoc:
      private_constant :Diagnostic

      # The parser gem has a list of diagnostics with a hard-coded set of error
      # messages. We create our own diagnostic class in order to set our own
      # error messages.
      class PrismDiagnostic < Diagnostic
        # This is the cached message coming from prism.
        attr_reader :message

        # Initialize a new diagnostic with the given message and location.
        def initialize(message, level, reason, location)
          @message = message
          super(level, reason, {}, location, [])
        end
      end

      Racc_debug_parser = false # :nodoc:

      def version # :nodoc:
        34
      end

      # The default encoding for Ruby files is UTF-8.
      def default_encoding
        Encoding::UTF_8
      end

      def yyerror # :nodoc:
      end

      # Parses a source buffer and returns the AST.
      def parse(source_buffer)
        @source_buffer = source_buffer
        source = source_buffer.source

        offset_cache = build_offset_cache(source)
        result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache)

        build_ast(result.value, offset_cache)
      ensure
        @source_buffer = nil
      end

      # Parses a source buffer and returns the AST and the source code comments.
      def parse_with_comments(source_buffer)
        @source_buffer = source_buffer
        source = source_buffer.source

        offset_cache = build_offset_cache(source)
        result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache)

        [
          build_ast(result.value, offset_cache),
          build_comments(result.comments, offset_cache)
        ]
      ensure
        @source_buffer = nil
      end

      # Parses a source buffer and returns the AST, the source code comments,
      # and the tokens emitted by the lexer.
      def tokenize(source_buffer, recover = false)
        @source_buffer = source_buffer
        source = source_buffer.source

        offset_cache = build_offset_cache(source)
        result =
          begin
            unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache)
          rescue ::Parser::SyntaxError
            raise if !recover
          end

        program, tokens = result.value
        ast = build_ast(program, offset_cache) if result.success?

        [
          ast,
          build_comments(result.comments, offset_cache),
          build_tokens(tokens, offset_cache)
        ]
      ensure
        @source_buffer = nil
      end

      # Since prism resolves num params for us, we don't need to support this
      # kind of logic here.
      def try_declare_numparam(node)
        node.children[0].match?(/\A_[1-9]\z/)
      end

      private

      # This is a hook to allow consumers to disable some errors if they don't
      # want them to block creating the syntax tree.
      def valid_error?(error)
        true
      end

      # This is a hook to allow consumers to disable some warnings if they don't
      # want them to block creating the syntax tree.
      def valid_warning?(warning)
        true
      end

      # Build a diagnostic from the given prism parse error.
      def error_diagnostic(error, offset_cache)
        location = error.location
        diagnostic_location = build_range(location, offset_cache)

        case error.type
        when :argument_block_multi
          Diagnostic.new(:error, :block_and_blockarg, {}, diagnostic_location, [])
        when :argument_formal_constant
          Diagnostic.new(:error, :argument_const, {}, diagnostic_location, [])
        when :argument_formal_class
          Diagnostic.new(:error, :argument_cvar, {}, diagnostic_location, [])
        when :argument_formal_global
          Diagnostic.new(:error, :argument_gvar, {}, diagnostic_location, [])
        when :argument_formal_ivar
          Diagnostic.new(:error, :argument_ivar, {}, diagnostic_location, [])
        when :argument_no_forwarding_amp
          Diagnostic.new(:error, :no_anonymous_blockarg, {}, diagnostic_location, [])
        when :argument_no_forwarding_star
          Diagnostic.new(:error, :no_anonymous_restarg, {}, diagnostic_location, [])
        when :argument_no_forwarding_star_star
          Diagnostic.new(:error, :no_anonymous_kwrestarg, {}, diagnostic_location, [])
        when :begin_lonely_else
          location = location.copy(length: 4)
          diagnostic_location = build_range(location, offset_cache)
          Diagnostic.new(:error, :useless_else, {}, diagnostic_location, [])
        when :class_name, :module_name
          Diagnostic.new(:error, :module_name_const, {}, diagnostic_location, [])
        when :class_in_method
          Diagnostic.new(:error, :class_in_def, {}, diagnostic_location, [])
        when :def_endless_setter
          Diagnostic.new(:error, :endless_setter, {}, diagnostic_location, [])
        when :embdoc_term
          Diagnostic.new(:error, :embedded_document, {}, diagnostic_location, [])
        when :incomplete_variable_class, :incomplete_variable_class_3_3
          location = location.copy(length: location.length + 1)
          diagnostic_location = build_range(location, offset_cache)

          Diagnostic.new(:error, :cvar_name, { name: location.slice }, diagnostic_location, [])
        when :incomplete_variable_instance, :incomplete_variable_instance_3_3
          location = location.copy(length: location.length + 1)
          diagnostic_location = build_range(location, offset_cache)

          Diagnostic.new(:error, :ivar_name, { name: location.slice }, diagnostic_location, [])
        when :invalid_variable_global, :invalid_variable_global_3_3
          Diagnostic.new(:error, :gvar_name, { name: location.slice }, diagnostic_location, [])
        when :module_in_method
          Diagnostic.new(:error, :module_in_def, {}, diagnostic_location, [])
        when :numbered_parameter_ordinary
          Diagnostic.new(:error, :ordinary_param_defined, {}, diagnostic_location, [])
        when :numbered_parameter_outer_scope
          Diagnostic.new(:error, :numparam_used_in_outer_scope, {}, diagnostic_location, [])
        when :parameter_circular
          Diagnostic.new(:error, :circular_argument_reference, { var_name: location.slice }, diagnostic_location, [])
        when :parameter_name_repeat
          Diagnostic.new(:error, :duplicate_argument, {}, diagnostic_location, [])
        when :parameter_numbered_reserved
          Diagnostic.new(:error, :reserved_for_numparam, { name: location.slice }, diagnostic_location, [])
        when :regexp_unknown_options
          Diagnostic.new(:error, :regexp_options, { options: location.slice[1..] }, diagnostic_location, [])
        when :singleton_for_literals
          Diagnostic.new(:error, :singleton_literal, {}, diagnostic_location, [])
        when :string_literal_eof
          Diagnostic.new(:error, :string_eof, {}, diagnostic_location, [])
        when :unexpected_token_ignore
          Diagnostic.new(:error, :unexpected_token, { token: location.slice }, diagnostic_location, [])
        when :write_target_in_method
          Diagnostic.new(:error, :dynamic_const, {}, diagnostic_location, [])
        else
          PrismDiagnostic.new(error.message, :error, error.type, diagnostic_location)
        end
      end

      # Build a diagnostic from the given prism parse warning.
      def warning_diagnostic(warning, offset_cache)
        diagnostic_location = build_range(warning.location, offset_cache)

        case warning.type
        when :ambiguous_first_argument_plus
          Diagnostic.new(:warning, :ambiguous_prefix, { prefix: "+" }, diagnostic_location, [])
        when :ambiguous_first_argument_minus
          Diagnostic.new(:warning, :ambiguous_prefix, { prefix: "-" }, diagnostic_location, [])
        when :ambiguous_prefix_ampersand
          Diagnostic.new(:warning, :ambiguous_prefix, { prefix: "&" }, diagnostic_location, [])
        when :ambiguous_prefix_star
          Diagnostic.new(:warning, :ambiguous_prefix, { prefix: "*" }, diagnostic_location, [])
        when :ambiguous_prefix_star_star
          Diagnostic.new(:warning, :ambiguous_prefix, { prefix: "**" }, diagnostic_location, [])
        when :ambiguous_slash
          Diagnostic.new(:warning, :ambiguous_regexp, {}, diagnostic_location, [])
        when :dot_dot_dot_eol
          Diagnostic.new(:warning, :triple_dot_at_eol, {}, diagnostic_location, [])
        when :duplicated_hash_key
          # skip, parser does this on its own
        else
          PrismDiagnostic.new(warning.message, :warning, warning.type, diagnostic_location)
        end
      end

      # If there was a error generated during the parse, then raise an
      # appropriate syntax error. Otherwise return the result.
      def unwrap(result, offset_cache)
        result.errors.each do |error|
          next unless valid_error?(error)
          diagnostics.process(error_diagnostic(error, offset_cache))
        end

        result.warnings.each do |warning|
          next unless valid_warning?(warning)
          diagnostic = warning_diagnostic(warning, offset_cache)
          diagnostics.process(diagnostic) if diagnostic
        end

        result
      end

      # Prism deals with offsets in bytes, while the parser gem deals with
      # offsets in characters. We need to handle this conversion in order to
      # build the parser gem AST.
      #
      # If the bytesize of the source is the same as the length, then we can
      # just use the offset directly. Otherwise, we build an array where the
      # index is the byte offset and the value is the character offset.
      def build_offset_cache(source)
        if source.bytesize == source.length
          -> (offset) { offset }
        else
          offset_cache = []
          offset = 0

          source.each_char do |char|
            char.bytesize.times { offset_cache << offset }
            offset += 1
          end

          offset_cache << offset
        end
      end

      # Build the parser gem AST from the prism AST.
      def build_ast(program, offset_cache)
        program.accept(Compiler.new(self, offset_cache))
      end

      # Build the parser gem comments from the prism comments.
      def build_comments(comments, offset_cache)
        comments.map do |comment|
          ::Parser::Source::Comment.new(build_range(comment.location, offset_cache))
        end
      end

      # Build the parser gem tokens from the prism tokens.
      def build_tokens(tokens, offset_cache)
        Lexer.new(source_buffer, tokens, offset_cache).to_a
      end

      # Build a range from a prism location.
      def build_range(location, offset_cache)
        ::Parser::Source::Range.new(
          source_buffer,
          offset_cache[location.start_offset],
          offset_cache[location.end_offset]
        )
      end

      # Converts the version format handled by Parser to the format handled by Prism.
      def convert_for_prism(version)
        case version
        when 33
          "3.3.1"
        when 34
          "3.4.0"
        else
          "latest"
        end
      end

      require_relative "parser/compiler"
      require_relative "parser/lexer"

      private_constant :Compiler
      private_constant :Lexer
    end
  end
end
PK*J[���,��/share/ruby/prism/translation/parser/compiler.rbnu�[���# frozen_string_literal: true

module Prism
  module Translation
    class Parser
      # A visitor that knows how to convert a prism syntax tree into the
      # whitequark/parser gem's syntax tree.
      class Compiler < ::Prism::Compiler
        # Raised when the tree is malformed or there is a bug in the compiler.
        class CompilationError < StandardError
        end

        # The Parser::Base instance that is being used to build the AST.
        attr_reader :parser

        # The Parser::Builders::Default instance that is being used to build the
        # AST.
        attr_reader :builder

        # The Parser::Source::Buffer instance that is holding a reference to the
        # source code.
        attr_reader :source_buffer

        # The offset cache that is used to map between byte and character
        # offsets in the file.
        attr_reader :offset_cache

        # The types of values that can be forwarded in the current scope.
        attr_reader :forwarding

        # Whether or not the current node is in a destructure.
        attr_reader :in_destructure

        # Whether or not the current node is in a pattern.
        attr_reader :in_pattern

        # Initialize a new compiler with the given parser, offset cache, and
        # options.
        def initialize(parser, offset_cache, forwarding: [], in_destructure: false, in_pattern: false)
          @parser = parser
          @builder = parser.builder
          @source_buffer = parser.source_buffer
          @offset_cache = offset_cache

          @forwarding = forwarding
          @in_destructure = in_destructure
          @in_pattern = in_pattern
        end

        # alias foo bar
        # ^^^^^^^^^^^^^
        def visit_alias_method_node(node)
          builder.alias(token(node.keyword_loc), visit(node.new_name), visit(node.old_name))
        end

        # alias $foo $bar
        # ^^^^^^^^^^^^^^^
        def visit_alias_global_variable_node(node)
          builder.alias(token(node.keyword_loc), visit(node.new_name), visit(node.old_name))
        end

        # foo => bar | baz
        #        ^^^^^^^^^
        def visit_alternation_pattern_node(node)
          builder.match_alt(visit(node.left), token(node.operator_loc), visit(node.right))
        end

        # a and b
        # ^^^^^^^
        def visit_and_node(node)
          builder.logical_op(:and, visit(node.left), token(node.operator_loc), visit(node.right))
        end

        # []
        # ^^
        def visit_array_node(node)
          builder.array(token(node.opening_loc), visit_all(node.elements), token(node.closing_loc))
        end

        # foo => [bar]
        #        ^^^^^
        def visit_array_pattern_node(node)
          elements = [*node.requireds]
          elements << node.rest if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)
          elements.concat(node.posts)
          visited = visit_all(elements)

          if node.rest.is_a?(ImplicitRestNode)
            visited[-1] = builder.match_with_trailing_comma(visited[-1], token(node.rest.location))
          end

          if node.constant
            if visited.empty?
              builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.array_pattern(token(node.opening_loc), visited, token(node.closing_loc)), token(node.closing_loc))
            else
              builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.array_pattern(nil, visited, nil), token(node.closing_loc))
            end
          else
            builder.array_pattern(token(node.opening_loc), visited, token(node.closing_loc))
          end
        end

        # foo(bar)
        #     ^^^
        def visit_arguments_node(node)
          visit_all(node.arguments)
        end

        # { a: 1 }
        #   ^^^^
        def visit_assoc_node(node)
          key = node.key

          if in_pattern
            if node.value.is_a?(ImplicitNode)
              if key.is_a?(SymbolNode)
                if key.opening.nil?
                  builder.match_hash_var([key.unescaped, srange(key.location)])
                else
                  builder.match_hash_var_from_str(token(key.opening_loc), [builder.string_internal([key.unescaped, srange(key.value_loc)])], token(key.closing_loc))
                end
              else
                builder.match_hash_var_from_str(token(key.opening_loc), visit_all(key.parts), token(key.closing_loc))
              end
            elsif key.opening.nil?
              builder.pair_keyword([key.unescaped, srange(key.location)], visit(node.value))
            else
              builder.pair_quoted(token(key.opening_loc), [builder.string_internal([key.unescaped, srange(key.value_loc)])], token(key.closing_loc), visit(node.value))
            end
          elsif node.value.is_a?(ImplicitNode)
            if (value = node.value.value).is_a?(LocalVariableReadNode)
              builder.pair_keyword(
                [key.unescaped, srange(key)],
                builder.ident([value.name, srange(key.value_loc)]).updated(:lvar)
              )
            else
              builder.pair_label([key.unescaped, srange(key.location)])
            end
          elsif node.operator_loc
            builder.pair(visit(key), token(node.operator_loc), visit(node.value))
          elsif key.is_a?(SymbolNode) && key.opening_loc.nil?
            builder.pair_keyword([key.unescaped, srange(key.location)], visit(node.value))
          else
            parts =
              if key.is_a?(SymbolNode)
                [builder.string_internal([key.unescaped, srange(key.value_loc)])]
              else
                visit_all(key.parts)
              end

            builder.pair_quoted(token(key.opening_loc), parts, token(key.closing_loc), visit(node.value))
          end
        end

        # def foo(**); bar(**); end
        #                  ^^
        #
        # { **foo }
        #   ^^^^^
        def visit_assoc_splat_node(node)
          if in_pattern
            builder.match_rest(token(node.operator_loc), token(node.value&.location))
          elsif node.value.nil? && forwarding.include?(:**)
            builder.forwarded_kwrestarg(token(node.operator_loc))
          else
            builder.kwsplat(token(node.operator_loc), visit(node.value))
          end
        end

        # $+
        # ^^
        def visit_back_reference_read_node(node)
          builder.back_ref(token(node.location))
        end

        # begin end
        # ^^^^^^^^^
        def visit_begin_node(node)
          rescue_bodies = []

          if (rescue_clause = node.rescue_clause)
            begin
              find_start_offset = (rescue_clause.reference&.location || rescue_clause.exceptions.last&.location || rescue_clause.keyword_loc).end_offset
              find_end_offset = (rescue_clause.statements&.location&.start_offset || rescue_clause.subsequent&.location&.start_offset || (find_start_offset + 1))

              rescue_bodies << builder.rescue_body(
                token(rescue_clause.keyword_loc),
                rescue_clause.exceptions.any? ? builder.array(nil, visit_all(rescue_clause.exceptions), nil) : nil,
                token(rescue_clause.operator_loc),
                visit(rescue_clause.reference),
                srange_find(find_start_offset, find_end_offset, ";"),
                visit(rescue_clause.statements)
              )
            end until (rescue_clause = rescue_clause.subsequent).nil?
          end

          begin_body =
            builder.begin_body(
              visit(node.statements),
              rescue_bodies,
              token(node.else_clause&.else_keyword_loc),
              visit(node.else_clause),
              token(node.ensure_clause&.ensure_keyword_loc),
              visit(node.ensure_clause&.statements)
            )

          if node.begin_keyword_loc
            builder.begin_keyword(token(node.begin_keyword_loc), begin_body, token(node.end_keyword_loc))
          else
            begin_body
          end
        end

        # foo(&bar)
        #     ^^^^
        def visit_block_argument_node(node)
          builder.block_pass(token(node.operator_loc), visit(node.expression))
        end

        # foo { |; bar| }
        #          ^^^
        def visit_block_local_variable_node(node)
          builder.shadowarg(token(node.location))
        end

        # A block on a keyword or method call.
        def visit_block_node(node)
          raise CompilationError, "Cannot directly compile block nodes"
        end

        # def foo(&bar); end
        #         ^^^^
        def visit_block_parameter_node(node)
          builder.blockarg(token(node.operator_loc), token(node.name_loc))
        end

        # A block's parameters.
        def visit_block_parameters_node(node)
          [*visit(node.parameters)].concat(visit_all(node.locals))
        end

        # break
        # ^^^^^
        #
        # break foo
        # ^^^^^^^^^
        def visit_break_node(node)
          builder.keyword_cmd(:break, token(node.keyword_loc), nil, visit(node.arguments) || [], nil)
        end

        # foo
        # ^^^
        #
        # foo.bar
        # ^^^^^^^
        #
        # foo.bar() {}
        # ^^^^^^^^^^^^
        def visit_call_node(node)
          name = node.name
          arguments = node.arguments&.arguments || []
          block = node.block

          if block.is_a?(BlockArgumentNode)
            arguments = [*arguments, block]
            block = nil
          end

          if node.call_operator_loc.nil?
            case name
            when :-@
              case (receiver = node.receiver).type
              when :integer_node, :float_node, :rational_node, :imaginary_node
                return visit(numeric_negate(node.message_loc, receiver))
              end
            when :!
              return visit_block(builder.not_op(token(node.message_loc), token(node.opening_loc), visit(node.receiver), token(node.closing_loc)), block)
            when :=~
              if (receiver = node.receiver).is_a?(RegularExpressionNode)
                return builder.match_op(visit(receiver), token(node.message_loc), visit(node.arguments.arguments.first))
              end
            when :[]
              return visit_block(builder.index(visit(node.receiver), token(node.opening_loc), visit_all(arguments), token(node.closing_loc)), block)
            when :[]=
              if node.message != "[]=" && node.arguments && block.nil? && !node.safe_navigation?
                arguments = node.arguments.arguments[...-1]
                arguments << node.block if node.block

                return visit_block(
                  builder.assign(
                    builder.index_asgn(
                      visit(node.receiver),
                      token(node.opening_loc),
                      visit_all(arguments),
                      token(node.closing_loc),
                    ),
                    srange_find(node.message_loc.end_offset, node.arguments.arguments.last.location.start_offset, "="),
                    visit(node.arguments.arguments.last)
                  ),
                  block
                )
              end
            end
          end

          message_loc = node.message_loc
          call_operator_loc = node.call_operator_loc
          call_operator = [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)] if call_operator_loc

          visit_block(
            if name.end_with?("=") && !message_loc.slice.end_with?("=") && node.arguments && block.nil?
              builder.assign(
                builder.attr_asgn(visit(node.receiver), call_operator, token(message_loc)),
                srange_find(message_loc.end_offset, node.arguments.location.start_offset, "="),
                visit(node.arguments.arguments.last)
              )
            else
              builder.call_method(
                visit(node.receiver),
                call_operator,
                message_loc ? [node.name, srange(message_loc)] : nil,
                token(node.opening_loc),
                visit_all(arguments),
                token(node.closing_loc)
              )
            end,
            block
          )
        end

        # foo.bar += baz
        # ^^^^^^^^^^^^^^^
        def visit_call_operator_write_node(node)
          call_operator_loc = node.call_operator_loc

          builder.op_assign(
            builder.call_method(
              visit(node.receiver),
              call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
              node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
              nil,
              [],
              nil
            ),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # foo.bar &&= baz
        # ^^^^^^^^^^^^^^^
        def visit_call_and_write_node(node)
          call_operator_loc = node.call_operator_loc

          builder.op_assign(
            builder.call_method(
              visit(node.receiver),
              call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
              node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
              nil,
              [],
              nil
            ),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # foo.bar ||= baz
        # ^^^^^^^^^^^^^^^
        def visit_call_or_write_node(node)
          call_operator_loc = node.call_operator_loc

          builder.op_assign(
            builder.call_method(
              visit(node.receiver),
              call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
              node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
              nil,
              [],
              nil
            ),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # foo.bar, = 1
        # ^^^^^^^
        def visit_call_target_node(node)
          call_operator_loc = node.call_operator_loc

          builder.attr_asgn(
            visit(node.receiver),
            call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
            token(node.message_loc)
          )
        end

        # foo => bar => baz
        #        ^^^^^^^^^^
        def visit_capture_pattern_node(node)
          builder.match_as(visit(node.value), token(node.operator_loc), visit(node.target))
        end

        # case foo; when bar; end
        # ^^^^^^^^^^^^^^^^^^^^^^^
        def visit_case_node(node)
          builder.case(
            token(node.case_keyword_loc),
            visit(node.predicate),
            visit_all(node.conditions),
            token(node.else_clause&.else_keyword_loc),
            visit(node.else_clause),
            token(node.end_keyword_loc)
          )
        end

        # case foo; in bar; end
        # ^^^^^^^^^^^^^^^^^^^^^
        def visit_case_match_node(node)
          builder.case_match(
            token(node.case_keyword_loc),
            visit(node.predicate),
            visit_all(node.conditions),
            token(node.else_clause&.else_keyword_loc),
            visit(node.else_clause),
            token(node.end_keyword_loc)
          )
        end

        # class Foo; end
        # ^^^^^^^^^^^^^^
        def visit_class_node(node)
          builder.def_class(
            token(node.class_keyword_loc),
            visit(node.constant_path),
            token(node.inheritance_operator_loc),
            visit(node.superclass),
            node.body&.accept(copy_compiler(forwarding: [])),
            token(node.end_keyword_loc)
          )
        end

        # @@foo
        # ^^^^^
        def visit_class_variable_read_node(node)
          builder.cvar(token(node.location))
        end

        # @@foo = 1
        # ^^^^^^^^^
        def visit_class_variable_write_node(node)
          builder.assign(
            builder.assignable(builder.cvar(token(node.name_loc))),
            token(node.operator_loc),
            visit(node.value)
          )
        end

        # @@foo += bar
        # ^^^^^^^^^^^^
        def visit_class_variable_operator_write_node(node)
          builder.op_assign(
            builder.assignable(builder.cvar(token(node.name_loc))),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # @@foo &&= bar
        # ^^^^^^^^^^^^^
        def visit_class_variable_and_write_node(node)
          builder.op_assign(
            builder.assignable(builder.cvar(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # @@foo ||= bar
        # ^^^^^^^^^^^^^
        def visit_class_variable_or_write_node(node)
          builder.op_assign(
            builder.assignable(builder.cvar(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # @@foo, = bar
        # ^^^^^
        def visit_class_variable_target_node(node)
          builder.assignable(builder.cvar(token(node.location)))
        end

        # Foo
        # ^^^
        def visit_constant_read_node(node)
          builder.const([node.name, srange(node.location)])
        end

        # Foo = 1
        # ^^^^^^^
        #
        # Foo, Bar = 1
        # ^^^  ^^^
        def visit_constant_write_node(node)
          builder.assign(builder.assignable(builder.const([node.name, srange(node.name_loc)])), token(node.operator_loc), visit(node.value))
        end

        # Foo += bar
        # ^^^^^^^^^^^
        def visit_constant_operator_write_node(node)
          builder.op_assign(
            builder.assignable(builder.const([node.name, srange(node.name_loc)])),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # Foo &&= bar
        # ^^^^^^^^^^^^
        def visit_constant_and_write_node(node)
          builder.op_assign(
            builder.assignable(builder.const([node.name, srange(node.name_loc)])),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # Foo ||= bar
        # ^^^^^^^^^^^^
        def visit_constant_or_write_node(node)
          builder.op_assign(
            builder.assignable(builder.const([node.name, srange(node.name_loc)])),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # Foo, = bar
        # ^^^
        def visit_constant_target_node(node)
          builder.assignable(builder.const([node.name, srange(node.location)]))
        end

        # Foo::Bar
        # ^^^^^^^^
        def visit_constant_path_node(node)
          if node.parent.nil?
            builder.const_global(
              token(node.delimiter_loc),
              [node.name, srange(node.name_loc)]
            )
          else
            builder.const_fetch(
              visit(node.parent),
              token(node.delimiter_loc),
              [node.name, srange(node.name_loc)]
            )
          end
        end

        # Foo::Bar = 1
        # ^^^^^^^^^^^^
        #
        # Foo::Foo, Bar::Bar = 1
        # ^^^^^^^^  ^^^^^^^^
        def visit_constant_path_write_node(node)
          builder.assign(
            builder.assignable(visit(node.target)),
            token(node.operator_loc),
            visit(node.value)
          )
        end

        # Foo::Bar += baz
        # ^^^^^^^^^^^^^^^
        def visit_constant_path_operator_write_node(node)
          builder.op_assign(
            builder.assignable(visit(node.target)),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # Foo::Bar &&= baz
        # ^^^^^^^^^^^^^^^^
        def visit_constant_path_and_write_node(node)
          builder.op_assign(
            builder.assignable(visit(node.target)),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # Foo::Bar ||= baz
        # ^^^^^^^^^^^^^^^^
        def visit_constant_path_or_write_node(node)
          builder.op_assign(
            builder.assignable(visit(node.target)),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # Foo::Bar, = baz
        # ^^^^^^^^
        def visit_constant_path_target_node(node)
          builder.assignable(visit_constant_path_node(node))
        end

        # def foo; end
        # ^^^^^^^^^^^^
        #
        # def self.foo; end
        # ^^^^^^^^^^^^^^^^^
        def visit_def_node(node)
          if node.equal_loc
            if node.receiver
              builder.def_endless_singleton(
                token(node.def_keyword_loc),
                visit(node.receiver.is_a?(ParenthesesNode) ? node.receiver.body : node.receiver),
                token(node.operator_loc),
                token(node.name_loc),
                builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
                token(node.equal_loc),
                node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters)))
              )
            else
              builder.def_endless_method(
                token(node.def_keyword_loc),
                token(node.name_loc),
                builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
                token(node.equal_loc),
                node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters)))
              )
            end
          elsif node.receiver
            builder.def_singleton(
              token(node.def_keyword_loc),
              visit(node.receiver.is_a?(ParenthesesNode) ? node.receiver.body : node.receiver),
              token(node.operator_loc),
              token(node.name_loc),
              builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
              node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters))),
              token(node.end_keyword_loc)
            )
          else
            builder.def_method(
              token(node.def_keyword_loc),
              token(node.name_loc),
              builder.args(token(node.lparen_loc), visit(node.parameters) || [], token(node.rparen_loc), false),
              node.body&.accept(copy_compiler(forwarding: find_forwarding(node.parameters))),
              token(node.end_keyword_loc)
            )
          end
        end

        # defined? a
        # ^^^^^^^^^^
        #
        # defined?(a)
        # ^^^^^^^^^^^
        def visit_defined_node(node)
          builder.keyword_cmd(
            :defined?,
            token(node.keyword_loc),
            token(node.lparen_loc),
            [visit(node.value)],
            token(node.rparen_loc)
          )
        end

        # if foo then bar else baz end
        #                 ^^^^^^^^^^^^
        def visit_else_node(node)
          visit(node.statements)
        end

        # "foo #{bar}"
        #      ^^^^^^
        def visit_embedded_statements_node(node)
          builder.begin(
            token(node.opening_loc),
            visit(node.statements),
            token(node.closing_loc)
          )
        end

        # "foo #@bar"
        #      ^^^^^
        def visit_embedded_variable_node(node)
          visit(node.variable)
        end

        # begin; foo; ensure; bar; end
        #             ^^^^^^^^^^^^
        def visit_ensure_node(node)
          raise CompilationError, "Cannot directly compile ensure nodes"
        end

        # false
        # ^^^^^
        def visit_false_node(node)
          builder.false(token(node.location))
        end

        # foo => [*, bar, *]
        #        ^^^^^^^^^^^
        def visit_find_pattern_node(node)
          elements = [node.left, *node.requireds, node.right]

          if node.constant
            builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.find_pattern(nil, visit_all(elements), nil), token(node.closing_loc))
          else
            builder.find_pattern(token(node.opening_loc), visit_all(elements), token(node.closing_loc))
          end
        end

        # 1.0
        # ^^^
        def visit_float_node(node)
          visit_numeric(node, builder.float([node.value, srange(node.location)]))
        end

        # for foo in bar do end
        # ^^^^^^^^^^^^^^^^^^^^^
        def visit_for_node(node)
          builder.for(
            token(node.for_keyword_loc),
            visit(node.index),
            token(node.in_keyword_loc),
            visit(node.collection),
            if (do_keyword_loc = node.do_keyword_loc)
              token(do_keyword_loc)
            else
              srange_find(node.collection.location.end_offset, (node.statements&.location || node.end_keyword_loc).start_offset, ";")
            end,
            visit(node.statements),
            token(node.end_keyword_loc)
          )
        end

        # def foo(...); bar(...); end
        #                   ^^^
        def visit_forwarding_arguments_node(node)
          builder.forwarded_args(token(node.location))
        end

        # def foo(...); end
        #         ^^^
        def visit_forwarding_parameter_node(node)
          builder.forward_arg(token(node.location))
        end

        # super
        # ^^^^^
        #
        # super {}
        # ^^^^^^^^
        def visit_forwarding_super_node(node)
          visit_block(
            builder.keyword_cmd(
              :zsuper,
              ["super", srange_offsets(node.location.start_offset, node.location.start_offset + 5)]
            ),
            node.block
          )
        end

        # $foo
        # ^^^^
        def visit_global_variable_read_node(node)
          builder.gvar(token(node.location))
        end

        # $foo = 1
        # ^^^^^^^^
        def visit_global_variable_write_node(node)
          builder.assign(
            builder.assignable(builder.gvar(token(node.name_loc))),
            token(node.operator_loc),
            visit(node.value)
          )
        end

        # $foo += bar
        # ^^^^^^^^^^^
        def visit_global_variable_operator_write_node(node)
          builder.op_assign(
            builder.assignable(builder.gvar(token(node.name_loc))),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # $foo &&= bar
        # ^^^^^^^^^^^^
        def visit_global_variable_and_write_node(node)
          builder.op_assign(
            builder.assignable(builder.gvar(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # $foo ||= bar
        # ^^^^^^^^^^^^
        def visit_global_variable_or_write_node(node)
          builder.op_assign(
            builder.assignable(builder.gvar(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # $foo, = bar
        # ^^^^
        def visit_global_variable_target_node(node)
          builder.assignable(builder.gvar([node.slice, srange(node.location)]))
        end

        # {}
        # ^^
        def visit_hash_node(node)
          builder.associate(
            token(node.opening_loc),
            visit_all(node.elements),
            token(node.closing_loc)
          )
        end

        # foo => {}
        #        ^^
        def visit_hash_pattern_node(node)
          elements = [*node.elements, *node.rest]

          if node.constant
            builder.const_pattern(visit(node.constant), token(node.opening_loc), builder.hash_pattern(nil, visit_all(elements), nil), token(node.closing_loc))
          else
            builder.hash_pattern(token(node.opening_loc), visit_all(elements), token(node.closing_loc))
          end
        end

        # if foo then bar end
        # ^^^^^^^^^^^^^^^^^^^
        #
        # bar if foo
        # ^^^^^^^^^^
        #
        # foo ? bar : baz
        # ^^^^^^^^^^^^^^^
        def visit_if_node(node)
          if !node.if_keyword_loc
            builder.ternary(
              visit(node.predicate),
              token(node.then_keyword_loc),
              visit(node.statements),
              token(node.subsequent.else_keyword_loc),
              visit(node.subsequent)
            )
          elsif node.if_keyword_loc.start_offset == node.location.start_offset
            builder.condition(
              token(node.if_keyword_loc),
              visit(node.predicate),
              if (then_keyword_loc = node.then_keyword_loc)
                token(then_keyword_loc)
              else
                srange_find(node.predicate.location.end_offset, (node.statements&.location || node.subsequent&.location || node.end_keyword_loc).start_offset, ";")
              end,
              visit(node.statements),
              case node.subsequent
              when IfNode
                token(node.subsequent.if_keyword_loc)
              when ElseNode
                token(node.subsequent.else_keyword_loc)
              end,
              visit(node.subsequent),
              if node.if_keyword != "elsif"
                token(node.end_keyword_loc)
              end
            )
          else
            builder.condition_mod(
              visit(node.statements),
              visit(node.subsequent),
              token(node.if_keyword_loc),
              visit(node.predicate)
            )
          end
        end

        # 1i
        # ^^
        def visit_imaginary_node(node)
          visit_numeric(node, builder.complex([Complex(0, node.numeric.value), srange(node.location)]))
        end

        # { foo: }
        #   ^^^^
        def visit_implicit_node(node)
          raise CompilationError, "Cannot directly compile implicit nodes"
        end

        # foo { |bar,| }
        #           ^
        def visit_implicit_rest_node(node)
          raise CompilationError, "Cannot compile implicit rest nodes"
        end

        # case foo; in bar; end
        # ^^^^^^^^^^^^^^^^^^^^^
        def visit_in_node(node)
          pattern = nil
          guard = nil

          case node.pattern
          when IfNode
            pattern = within_pattern { |compiler| node.pattern.statements.accept(compiler) }
            guard = builder.if_guard(token(node.pattern.if_keyword_loc), visit(node.pattern.predicate))
          when UnlessNode
            pattern = within_pattern { |compiler| node.pattern.statements.accept(compiler) }
            guard = builder.unless_guard(token(node.pattern.keyword_loc), visit(node.pattern.predicate))
          else
            pattern = within_pattern { |compiler| node.pattern.accept(compiler) }
          end

          builder.in_pattern(
            token(node.in_loc),
            pattern,
            guard,
            if (then_loc = node.then_loc)
              token(then_loc)
            else
              srange_find(node.pattern.location.end_offset, node.statements&.location&.start_offset, ";")
            end,
            visit(node.statements)
          )
        end

        # foo[bar] += baz
        # ^^^^^^^^^^^^^^^
        def visit_index_operator_write_node(node)
          arguments = node.arguments&.arguments || []
          arguments << node.block if node.block

          builder.op_assign(
            builder.index(
              visit(node.receiver),
              token(node.opening_loc),
              visit_all(arguments),
              token(node.closing_loc)
            ),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # foo[bar] &&= baz
        # ^^^^^^^^^^^^^^^^
        def visit_index_and_write_node(node)
          arguments = node.arguments&.arguments || []
          arguments << node.block if node.block

          builder.op_assign(
            builder.index(
              visit(node.receiver),
              token(node.opening_loc),
              visit_all(arguments),
              token(node.closing_loc)
            ),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # foo[bar] ||= baz
        # ^^^^^^^^^^^^^^^^
        def visit_index_or_write_node(node)
          arguments = node.arguments&.arguments || []
          arguments << node.block if node.block

          builder.op_assign(
            builder.index(
              visit(node.receiver),
              token(node.opening_loc),
              visit_all(arguments),
              token(node.closing_loc)
            ),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # foo[bar], = 1
        # ^^^^^^^^
        def visit_index_target_node(node)
          builder.index_asgn(
            visit(node.receiver),
            token(node.opening_loc),
            visit_all(node.arguments.arguments),
            token(node.closing_loc),
          )
        end

        # @foo
        # ^^^^
        def visit_instance_variable_read_node(node)
          builder.ivar(token(node.location))
        end

        # @foo = 1
        # ^^^^^^^^
        def visit_instance_variable_write_node(node)
          builder.assign(
            builder.assignable(builder.ivar(token(node.name_loc))),
            token(node.operator_loc),
            visit(node.value)
          )
        end

        # @foo += bar
        # ^^^^^^^^^^^
        def visit_instance_variable_operator_write_node(node)
          builder.op_assign(
            builder.assignable(builder.ivar(token(node.name_loc))),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # @foo &&= bar
        # ^^^^^^^^^^^^
        def visit_instance_variable_and_write_node(node)
          builder.op_assign(
            builder.assignable(builder.ivar(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # @foo ||= bar
        # ^^^^^^^^^^^^
        def visit_instance_variable_or_write_node(node)
          builder.op_assign(
            builder.assignable(builder.ivar(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # @foo, = bar
        # ^^^^
        def visit_instance_variable_target_node(node)
          builder.assignable(builder.ivar(token(node.location)))
        end

        # 1
        # ^
        def visit_integer_node(node)
          visit_numeric(node, builder.integer([node.value, srange(node.location)]))
        end

        # /foo #{bar}/
        # ^^^^^^^^^^^^
        def visit_interpolated_regular_expression_node(node)
          builder.regexp_compose(
            token(node.opening_loc),
            visit_all(node.parts),
            [node.closing[0], srange_offsets(node.closing_loc.start_offset, node.closing_loc.start_offset + 1)],
            builder.regexp_options([node.closing[1..], srange_offsets(node.closing_loc.start_offset + 1, node.closing_loc.end_offset)])
          )
        end

        # if /foo #{bar}/ then end
        #    ^^^^^^^^^^^^
        alias visit_interpolated_match_last_line_node visit_interpolated_regular_expression_node

        # "foo #{bar}"
        # ^^^^^^^^^^^^
        def visit_interpolated_string_node(node)
          if node.heredoc?
            return visit_heredoc(node) { |children, closing| builder.string_compose(token(node.opening_loc), children, closing) }
          end

          parts = if node.parts.one? { |part| part.type == :string_node }
            node.parts.flat_map do |node|
              if node.type == :string_node && node.unescaped.lines.count >= 2
                start_offset = node.content_loc.start_offset

                node.unescaped.lines.map do |line|
                  end_offset = start_offset + line.length
                  offsets = srange_offsets(start_offset, end_offset)
                  start_offset = end_offset

                  builder.string_internal([line, offsets])
                end
              else
                visit(node)
              end
            end
          else
            visit_all(node.parts)
          end

          builder.string_compose(
            token(node.opening_loc),
            parts,
            token(node.closing_loc)
          )
        end

        # :"foo #{bar}"
        # ^^^^^^^^^^^^^
        def visit_interpolated_symbol_node(node)
          builder.symbol_compose(
            token(node.opening_loc),
            visit_all(node.parts),
            token(node.closing_loc)
          )
        end

        # `foo #{bar}`
        # ^^^^^^^^^^^^
        def visit_interpolated_x_string_node(node)
          if node.heredoc?
            visit_heredoc(node) { |children, closing| builder.xstring_compose(token(node.opening_loc), children, closing) }
          else
            builder.xstring_compose(
              token(node.opening_loc),
              visit_all(node.parts),
              token(node.closing_loc)
            )
          end
        end

        # -> { it }
        #      ^^
        def visit_it_local_variable_read_node(node)
          builder.ident([:it, srange(node.location)]).updated(:lvar)
        end

        # -> { it }
        # ^^^^^^^^^
        def visit_it_parameters_node(node)
          builder.args(nil, [], nil, false)
        end

        # foo(bar: baz)
        #     ^^^^^^^^
        def visit_keyword_hash_node(node)
          builder.associate(nil, visit_all(node.elements), nil)
        end

        # def foo(**bar); end
        #         ^^^^^
        #
        # def foo(**); end
        #         ^^
        def visit_keyword_rest_parameter_node(node)
          builder.kwrestarg(
            token(node.operator_loc),
            node.name ? [node.name, srange(node.name_loc)] : nil
          )
        end

        # -> {}
        # ^^^^^
        def visit_lambda_node(node)
          parameters = node.parameters
          implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)

          builder.block(
            builder.call_lambda(token(node.operator_loc)),
            [node.opening, srange(node.opening_loc)],
            if parameters.nil?
              builder.args(nil, [], nil, false)
            elsif implicit_parameters
              visit(node.parameters)
            else
              builder.args(
                token(node.parameters.opening_loc),
                visit(node.parameters),
                token(node.parameters.closing_loc),
                false
              )
            end,
            node.body&.accept(copy_compiler(forwarding: implicit_parameters ? [] : find_forwarding(parameters&.parameters))),
            [node.closing, srange(node.closing_loc)]
          )
        end

        # foo
        # ^^^
        def visit_local_variable_read_node(node)
          builder.ident([node.name, srange(node.location)]).updated(:lvar)
        end

        # foo = 1
        # ^^^^^^^
        def visit_local_variable_write_node(node)
          builder.assign(
            builder.assignable(builder.ident(token(node.name_loc))),
            token(node.operator_loc),
            visit(node.value)
          )
        end

        # foo += bar
        # ^^^^^^^^^^
        def visit_local_variable_operator_write_node(node)
          builder.op_assign(
            builder.assignable(builder.ident(token(node.name_loc))),
            [node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
            visit(node.value)
          )
        end

        # foo &&= bar
        # ^^^^^^^^^^^
        def visit_local_variable_and_write_node(node)
          builder.op_assign(
            builder.assignable(builder.ident(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # foo ||= bar
        # ^^^^^^^^^^^
        def visit_local_variable_or_write_node(node)
          builder.op_assign(
            builder.assignable(builder.ident(token(node.name_loc))),
            [node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
            visit(node.value)
          )
        end

        # foo, = bar
        # ^^^
        def visit_local_variable_target_node(node)
          if in_pattern
            builder.assignable(builder.match_var([node.name, srange(node.location)]))
          else
            builder.assignable(builder.ident(token(node.location)))
          end
        end

        # foo in bar
        # ^^^^^^^^^^
        def visit_match_predicate_node(node)
          builder.match_pattern_p(
            visit(node.value),
            token(node.operator_loc),
            within_pattern { |compiler| node.pattern.accept(compiler) }
          )
        end

        # foo => bar
        # ^^^^^^^^^^
        def visit_match_required_node(node)
          builder.match_pattern(
            visit(node.value),
            token(node.operator_loc),
            within_pattern { |compiler| node.pattern.accept(compiler) }
          )
        end

        # /(?<foo>foo)/ =~ bar
        # ^^^^^^^^^^^^^^^^^^^^
        def visit_match_write_node(node)
          builder.match_op(
            visit(node.call.receiver),
            token(node.call.message_loc),
            visit(node.call.arguments.arguments.first)
          )
        end

        # A node that is missing from the syntax tree. This is only used in the
        # case of a syntax error. The parser gem doesn't have such a concept, so
        # we invent our own here.
        def visit_missing_node(node)
          ::AST::Node.new(:missing, [], location: ::Parser::Source::Map.new(srange(node.location)))
        end

        # module Foo; end
        # ^^^^^^^^^^^^^^^
        def visit_module_node(node)
          builder.def_module(
            token(node.module_keyword_loc),
            visit(node.constant_path),
            node.body&.accept(copy_compiler(forwarding: [])),
            token(node.end_keyword_loc)
          )
        end

        # foo, bar = baz
        # ^^^^^^^^
        def visit_multi_target_node(node)
          builder.multi_lhs(
            token(node.lparen_loc),
            visit_all(multi_target_elements(node)),
            token(node.rparen_loc)
          )
        end

        # foo, bar = baz
        # ^^^^^^^^^^^^^^
        def visit_multi_write_node(node)
          elements = multi_target_elements(node)

          if elements.length == 1 && elements.first.is_a?(MultiTargetNode)
            elements = multi_target_elements(elements.first)
          end

          builder.multi_assign(
            builder.multi_lhs(
              token(node.lparen_loc),
              visit_all(elements),
              token(node.rparen_loc)
            ),
            token(node.operator_loc),
            visit(node.value)
          )
        end

        # next
        # ^^^^
        #
        # next foo
        # ^^^^^^^^
        def visit_next_node(node)
          builder.keyword_cmd(
            :next,
            token(node.keyword_loc),
            nil,
            visit(node.arguments) || [],
            nil
          )
        end

        # nil
        # ^^^
        def visit_nil_node(node)
          builder.nil(token(node.location))
        end

        # def foo(**nil); end
        #         ^^^^^
        def visit_no_keywords_parameter_node(node)
          if in_pattern
            builder.match_nil_pattern(token(node.operator_loc), token(node.keyword_loc))
          else
            builder.kwnilarg(token(node.operator_loc), token(node.keyword_loc))
          end
        end

        # -> { _1 + _2 }
        # ^^^^^^^^^^^^^^
        def visit_numbered_parameters_node(node)
          builder.numargs(node.maximum)
        end

        # $1
        # ^^
        def visit_numbered_reference_read_node(node)
          builder.nth_ref([node.number, srange(node.location)])
        end

        # def foo(bar: baz); end
        #         ^^^^^^^^
        def visit_optional_keyword_parameter_node(node)
          builder.kwoptarg([node.name, srange(node.name_loc)], visit(node.value))
        end

        # def foo(bar = 1); end
        #         ^^^^^^^
        def visit_optional_parameter_node(node)
          builder.optarg(token(node.name_loc), token(node.operator_loc), visit(node.value))
        end

        # a or b
        # ^^^^^^
        def visit_or_node(node)
          builder.logical_op(:or, visit(node.left), token(node.operator_loc), visit(node.right))
        end

        # def foo(bar, *baz); end
        #         ^^^^^^^^^
        def visit_parameters_node(node)
          params = []

          if node.requireds.any?
            node.requireds.each do |required|
              params <<
                if required.is_a?(RequiredParameterNode)
                  visit(required)
                else
                  required.accept(copy_compiler(in_destructure: true))
                end
            end
          end

          params.concat(visit_all(node.optionals)) if node.optionals.any?
          params << visit(node.rest) if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)

          if node.posts.any?
            node.posts.each do |post|
              params <<
                if post.is_a?(RequiredParameterNode)
                  visit(post)
                else
                  post.accept(copy_compiler(in_destructure: true))
                end
            end
          end

          params.concat(visit_all(node.keywords)) if node.keywords.any?
          params << visit(node.keyword_rest) if !node.keyword_rest.nil?
          params << visit(node.block) if !node.block.nil?
          params
        end

        # ()
        # ^^
        #
        # (1)
        # ^^^
        def visit_parentheses_node(node)
          builder.begin(
            token(node.opening_loc),
            visit(node.body),
            token(node.closing_loc)
          )
        end

        # foo => ^(bar)
        #        ^^^^^^
        def visit_pinned_expression_node(node)
          expression = builder.begin(token(node.lparen_loc), visit(node.expression), token(node.rparen_loc))
          builder.pin(token(node.operator_loc), expression)
        end

        # foo = 1 and bar => ^foo
        #                    ^^^^
        def visit_pinned_variable_node(node)
          builder.pin(token(node.operator_loc), visit(node.variable))
        end

        # END {}
        def visit_post_execution_node(node)
          builder.postexe(
            token(node.keyword_loc),
            token(node.opening_loc),
            visit(node.statements),
            token(node.closing_loc)
          )
        end

        # BEGIN {}
        def visit_pre_execution_node(node)
          builder.preexe(
            token(node.keyword_loc),
            token(node.opening_loc),
            visit(node.statements),
            token(node.closing_loc)
          )
        end

        # The top-level program node.
        def visit_program_node(node)
          visit(node.statements)
        end

        # 0..5
        # ^^^^
        def visit_range_node(node)
          if node.exclude_end?
            builder.range_exclusive(
              visit(node.left),
              token(node.operator_loc),
              visit(node.right)
            )
          else
            builder.range_inclusive(
              visit(node.left),
              token(node.operator_loc),
              visit(node.right)
            )
          end
        end

        # if foo .. bar; end
        #    ^^^^^^^^^^
        alias visit_flip_flop_node visit_range_node

        # 1r
        # ^^
        def visit_rational_node(node)
          visit_numeric(node, builder.rational([node.value, srange(node.location)]))
        end

        # redo
        # ^^^^
        def visit_redo_node(node)
          builder.keyword_cmd(:redo, token(node.location))
        end

        # /foo/
        # ^^^^^
        def visit_regular_expression_node(node)
          content = node.content
          parts =
            if content.include?("\n")
              offset = node.content_loc.start_offset
              content.lines.map do |line|
                builder.string_internal([line, srange_offsets(offset, offset += line.bytesize)])
              end
            else
              [builder.string_internal(token(node.content_loc))]
            end

          builder.regexp_compose(
            token(node.opening_loc),
            parts,
            [node.closing[0], srange_offsets(node.closing_loc.start_offset, node.closing_loc.start_offset + 1)],
            builder.regexp_options([node.closing[1..], srange_offsets(node.closing_loc.start_offset + 1, node.closing_loc.end_offset)])
          )
        end

        # if /foo/ then end
        #    ^^^^^
        alias visit_match_last_line_node visit_regular_expression_node

        # def foo(bar:); end
        #         ^^^^
        def visit_required_keyword_parameter_node(node)
          builder.kwarg([node.name, srange(node.name_loc)])
        end

        # def foo(bar); end
        #         ^^^
        def visit_required_parameter_node(node)
          builder.arg(token(node.location))
        end

        # foo rescue bar
        # ^^^^^^^^^^^^^^
        def visit_rescue_modifier_node(node)
          builder.begin_body(
            visit(node.expression),
            [
              builder.rescue_body(
                token(node.keyword_loc),
                nil,
                nil,
                nil,
                nil,
                visit(node.rescue_expression)
              )
            ]
          )
        end

        # begin; rescue; end
        #        ^^^^^^^
        def visit_rescue_node(node)
          raise CompilationError, "Cannot directly compile rescue nodes"
        end

        # def foo(*bar); end
        #         ^^^^
        #
        # def foo(*); end
        #         ^
        def visit_rest_parameter_node(node)
          builder.restarg(token(node.operator_loc), token(node.name_loc))
        end

        # retry
        # ^^^^^
        def visit_retry_node(node)
          builder.keyword_cmd(:retry, token(node.location))
        end

        # return
        # ^^^^^^
        #
        # return 1
        # ^^^^^^^^
        def visit_return_node(node)
          builder.keyword_cmd(
            :return,
            token(node.keyword_loc),
            nil,
            visit(node.arguments) || [],
            nil
          )
        end

        # self
        # ^^^^
        def visit_self_node(node)
          builder.self(token(node.location))
        end

        # A shareable constant.
        def visit_shareable_constant_node(node)
          visit(node.write)
        end

        # class << self; end
        # ^^^^^^^^^^^^^^^^^^
        def visit_singleton_class_node(node)
          builder.def_sclass(
            token(node.class_keyword_loc),
            token(node.operator_loc),
            visit(node.expression),
            node.body&.accept(copy_compiler(forwarding: [])),
            token(node.end_keyword_loc)
          )
        end

        # __ENCODING__
        # ^^^^^^^^^^^^
        def visit_source_encoding_node(node)
          builder.accessible(builder.__ENCODING__(token(node.location)))
        end

        # __FILE__
        # ^^^^^^^^
        def visit_source_file_node(node)
          builder.accessible(builder.__FILE__(token(node.location)))
        end

        # __LINE__
        # ^^^^^^^^
        def visit_source_line_node(node)
          builder.accessible(builder.__LINE__(token(node.location)))
        end

        # foo(*bar)
        #     ^^^^
        #
        # def foo((bar, *baz)); end
        #               ^^^^
        #
        # def foo(*); bar(*); end
        #                 ^
        def visit_splat_node(node)
          if node.expression.nil? && forwarding.include?(:*)
            builder.forwarded_restarg(token(node.operator_loc))
          elsif in_destructure
            builder.restarg(token(node.operator_loc), token(node.expression&.location))
          elsif in_pattern
            builder.match_rest(token(node.operator_loc), token(node.expression&.location))
          else
            builder.splat(token(node.operator_loc), visit(node.expression))
          end
        end

        # A list of statements.
        def visit_statements_node(node)
          builder.compstmt(visit_all(node.body))
        end

        # "foo"
        # ^^^^^
        def visit_string_node(node)
          if node.heredoc?
            visit_heredoc(node.to_interpolated) { |children, closing| builder.string_compose(token(node.opening_loc), children, closing) }
          elsif node.opening == "?"
            builder.character([node.unescaped, srange(node.location)])
          elsif node.opening&.start_with?("%") && node.unescaped.empty?
            builder.string_compose(token(node.opening_loc), [], token(node.closing_loc))
          else
            content_lines = node.content.lines
            unescaped_lines = node.unescaped.lines

            parts =
              if content_lines.length <= 1 || unescaped_lines.length <= 1
                [builder.string_internal([node.unescaped, srange(node.content_loc)])]
              elsif content_lines.length != unescaped_lines.length
                # This occurs when we have line continuations in the string. We
                # need to come back and fix this, but for now this stops the
                # code from breaking when we encounter it because of trying to
                # transpose arrays of different lengths.
                [builder.string_internal([node.unescaped, srange(node.content_loc)])]
              else
                start_offset = node.content_loc.start_offset

                [content_lines, unescaped_lines].transpose.map do |content_line, unescaped_line|
                  end_offset = start_offset + content_line.length
                  offsets = srange_offsets(start_offset, end_offset)
                  start_offset = end_offset

                  builder.string_internal([unescaped_line, offsets])
                end
              end

            builder.string_compose(
              token(node.opening_loc),
              parts,
              token(node.closing_loc)
            )
          end
        end

        # super(foo)
        # ^^^^^^^^^^
        def visit_super_node(node)
          arguments = node.arguments&.arguments || []
          block = node.block

          if block.is_a?(BlockArgumentNode)
            arguments = [*arguments, block]
            block = nil
          end

          visit_block(
            builder.keyword_cmd(
              :super,
              token(node.keyword_loc),
              token(node.lparen_loc),
              visit_all(arguments),
              token(node.rparen_loc)
            ),
            block
          )
        end

        # :foo
        # ^^^^
        def visit_symbol_node(node)
          if node.closing_loc.nil?
            if node.opening_loc.nil?
              builder.symbol_internal([node.unescaped, srange(node.location)])
            else
              builder.symbol([node.unescaped, srange(node.location)])
            end
          else
            parts = if node.value.lines.one?
              [builder.string_internal([node.unescaped, srange(node.value_loc)])]
            else
              start_offset = node.value_loc.start_offset

              node.value.lines.map do |line|
                end_offset = start_offset + line.length
                offsets = srange_offsets(start_offset, end_offset)
                start_offset = end_offset

                builder.string_internal([line, offsets])
              end
            end

            builder.symbol_compose(
              token(node.opening_loc),
              parts,
              token(node.closing_loc)
            )
          end
        end

        # true
        # ^^^^
        def visit_true_node(node)
          builder.true(token(node.location))
        end

        # undef foo
        # ^^^^^^^^^
        def visit_undef_node(node)
          builder.undef_method(token(node.keyword_loc), visit_all(node.names))
        end

        # unless foo; bar end
        # ^^^^^^^^^^^^^^^^^^^
        #
        # bar unless foo
        # ^^^^^^^^^^^^^^
        def visit_unless_node(node)
          if node.keyword_loc.start_offset == node.location.start_offset
            builder.condition(
              token(node.keyword_loc),
              visit(node.predicate),
              if (then_keyword_loc = node.then_keyword_loc)
                token(then_keyword_loc)
              else
                srange_find(node.predicate.location.end_offset, (node.statements&.location || node.else_clause&.location || node.end_keyword_loc).start_offset, ";")
              end,
              visit(node.else_clause),
              token(node.else_clause&.else_keyword_loc),
              visit(node.statements),
              token(node.end_keyword_loc)
            )
          else
            builder.condition_mod(
              visit(node.else_clause),
              visit(node.statements),
              token(node.keyword_loc),
              visit(node.predicate)
            )
          end
        end

        # until foo; bar end
        # ^^^^^^^^^^^^^^^^^^
        #
        # bar until foo
        # ^^^^^^^^^^^^^
        def visit_until_node(node)
          if node.location.start_offset == node.keyword_loc.start_offset
            builder.loop(
              :until,
              token(node.keyword_loc),
              visit(node.predicate),
              if (do_keyword_loc = node.do_keyword_loc)
                token(do_keyword_loc)
              else
                srange_find(node.predicate.location.end_offset, (node.statements&.location || node.closing_loc).start_offset, ";")
              end,
              visit(node.statements),
              token(node.closing_loc)
            )
          else
            builder.loop_mod(
              :until,
              visit(node.statements),
              token(node.keyword_loc),
              visit(node.predicate)
            )
          end
        end

        # case foo; when bar; end
        #           ^^^^^^^^^^^^^
        def visit_when_node(node)
          builder.when(
            token(node.keyword_loc),
            visit_all(node.conditions),
            if (then_keyword_loc = node.then_keyword_loc)
              token(then_keyword_loc)
            else
              srange_find(node.conditions.last.location.end_offset, node.statements&.location&.start_offset, ";")
            end,
            visit(node.statements)
          )
        end

        # while foo; bar end
        # ^^^^^^^^^^^^^^^^^^
        #
        # bar while foo
        # ^^^^^^^^^^^^^
        def visit_while_node(node)
          if node.location.start_offset == node.keyword_loc.start_offset
            builder.loop(
              :while,
              token(node.keyword_loc),
              visit(node.predicate),
              if (do_keyword_loc = node.do_keyword_loc)
                token(do_keyword_loc)
              else
                srange_find(node.predicate.location.end_offset, (node.statements&.location || node.closing_loc).start_offset, ";")
              end,
              visit(node.statements),
              token(node.closing_loc)
            )
          else
            builder.loop_mod(
              :while,
              visit(node.statements),
              token(node.keyword_loc),
              visit(node.predicate)
            )
          end
        end

        # `foo`
        # ^^^^^
        def visit_x_string_node(node)
          if node.heredoc?
            visit_heredoc(node.to_interpolated) { |children, closing| builder.xstring_compose(token(node.opening_loc), children, closing) }
          else
            parts = if node.unescaped.lines.one?
              [builder.string_internal([node.unescaped, srange(node.content_loc)])]
            else
              start_offset = node.content_loc.start_offset

              node.unescaped.lines.map do |line|
                end_offset = start_offset + line.length
                offsets = srange_offsets(start_offset, end_offset)
                start_offset = end_offset

                builder.string_internal([line, offsets])
              end
            end

            builder.xstring_compose(
              token(node.opening_loc),
              parts,
              token(node.closing_loc)
            )
          end
        end

        # yield
        # ^^^^^
        #
        # yield 1
        # ^^^^^^^
        def visit_yield_node(node)
          builder.keyword_cmd(
            :yield,
            token(node.keyword_loc),
            token(node.lparen_loc),
            visit(node.arguments) || [],
            token(node.rparen_loc)
          )
        end

        private

        # Initialize a new compiler with the given option overrides, used to
        # visit a subtree with the given options.
        def copy_compiler(forwarding: self.forwarding, in_destructure: self.in_destructure, in_pattern: self.in_pattern)
          Compiler.new(parser, offset_cache, forwarding: forwarding, in_destructure: in_destructure, in_pattern: in_pattern)
        end

        # When *, **, &, or ... are used as an argument in a method call, we
        # check if they were allowed by the current context. To determine that
        # we build this lookup table.
        def find_forwarding(node)
          return [] if node.nil?

          forwarding = []
          forwarding << :* if node.rest.is_a?(RestParameterNode) && node.rest.name.nil?
          forwarding << :** if node.keyword_rest.is_a?(KeywordRestParameterNode) && node.keyword_rest.name.nil?
          forwarding << :& if !node.block.nil? && node.block.name.nil?
          forwarding |= [:&, :"..."] if node.keyword_rest.is_a?(ForwardingParameterNode)

          forwarding
        end

        # Returns the set of targets for a MultiTargetNode or a MultiWriteNode.
        def multi_target_elements(node)
          elements = [*node.lefts]
          elements << node.rest if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)
          elements.concat(node.rights)
          elements
        end

        # Negate the value of a numeric node. This is a special case where you
        # have a negative sign on one line and then a number on the next line.
        # In normal Ruby, this will always be a method call. The parser gem,
        # however, marks this as a numeric literal. We have to massage the tree
        # here to get it into the correct form.
        def numeric_negate(message_loc, receiver)
          case receiver.type
          when :integer_node, :float_node
            receiver.copy(value: -receiver.value, location: message_loc.join(receiver.location))
          when :rational_node
            receiver.copy(numerator: -receiver.numerator, location: message_loc.join(receiver.location))
          when :imaginary_node
            receiver.copy(numeric: numeric_negate(message_loc, receiver.numeric), location: message_loc.join(receiver.location))
          end
        end

        # Blocks can have a special set of parameters that automatically expand
        # when given arrays if they have a single required parameter and no
        # other parameters.
        def procarg0?(parameters)
          parameters &&
            parameters.requireds.length == 1 &&
            parameters.optionals.empty? &&
            parameters.rest.nil? &&
            parameters.posts.empty? &&
            parameters.keywords.empty? &&
            parameters.keyword_rest.nil? &&
            parameters.block.nil?
        end

        # Locations in the parser gem AST are generated using this class. We
        # store a reference to its constant to make it slightly faster to look
        # up.
        Range = ::Parser::Source::Range

        # Constructs a new source range from the given start and end offsets.
        def srange(location)
          Range.new(source_buffer, offset_cache[location.start_offset], offset_cache[location.end_offset]) if location
        end

        # Constructs a new source range from the given start and end offsets.
        def srange_offsets(start_offset, end_offset)
          Range.new(source_buffer, offset_cache[start_offset], offset_cache[end_offset])
        end

        # Constructs a new source range by finding the given character between
        # the given start offset and end offset. If the needle is not found, it
        # returns nil. Importantly it does not search past newlines or comments.
        #
        # Note that end_offset is allowed to be nil, in which case this will
        # search until the end of the string.
        def srange_find(start_offset, end_offset, character)
          if (match = source_buffer.source.byteslice(start_offset...end_offset)[/\A\s*#{character}/])
            final_offset = start_offset + match.bytesize
            [character, Range.new(source_buffer, offset_cache[final_offset - character.bytesize], offset_cache[final_offset])]
          end
        end

        # Transform a location into a token that the parser gem expects.
        def token(location)
          [location.slice, Range.new(source_buffer, offset_cache[location.start_offset], offset_cache[location.end_offset])] if location
        end

        # Visit a block node on a call.
        def visit_block(call, block)
          if block
            parameters = block.parameters
            implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)

            builder.block(
              call,
              token(block.opening_loc),
              if parameters.nil?
                builder.args(nil, [], nil, false)
              elsif implicit_parameters
                visit(parameters)
              else
                builder.args(
                  token(parameters.opening_loc),
                  if procarg0?(parameters.parameters)
                    parameter = parameters.parameters.requireds.first
                    visited = parameter.is_a?(RequiredParameterNode) ? visit(parameter) : parameter.accept(copy_compiler(in_destructure: true))
                    [builder.procarg0(visited)].concat(visit_all(parameters.locals))
                  else
                    visit(parameters)
                  end,
                  token(parameters.closing_loc),
                  false
                )
              end,
              block.body&.accept(copy_compiler(forwarding: implicit_parameters ? [] : find_forwarding(parameters&.parameters))),
              token(block.closing_loc)
            )
          else
            call
          end
        end

        # The parser gem automatically converts \r\n to \n, meaning our offsets
        # need to be adjusted to always subtract 1 from the length.
        def chomped_bytesize(line)
          chomped = line.chomp
          chomped.bytesize + (chomped == line ? 0 : 1)
        end

        # Visit a heredoc that can be either a string or an xstring.
        def visit_heredoc(node)
          children = Array.new
          indented = false

          # If this is a dedenting heredoc, then we need to insert the opening
          # content into the children as well.
          if node.opening.start_with?("<<~") && node.parts.length > 0 && !node.parts.first.is_a?(StringNode)
            location = node.parts.first.location
            location = location.copy(start_offset: location.start_offset - location.start_line_slice.bytesize)
            children << builder.string_internal(token(location))
            indented = true
          end

          node.parts.each do |part|
            pushing =
              if part.is_a?(StringNode) && part.unescaped.include?("\n")
                unescaped = part.unescaped.lines
                escaped = part.content.lines

                escaped_lengths = []
                normalized_lengths = []

                if node.opening.end_with?("'")
                  escaped.each do |line|
                    escaped_lengths << line.bytesize
                    normalized_lengths << chomped_bytesize(line)
                  end
                else
                  escaped
                    .chunk_while { |before, after| before.match?(/(?<!\\)\\\r?\n$/) }
                    .each do |lines|
                      escaped_lengths << lines.sum(&:bytesize)
                      normalized_lengths << lines.sum { |line| chomped_bytesize(line) }
                    end
                end

                start_offset = part.location.start_offset

                unescaped.map.with_index do |unescaped_line, index|
                  inner_part = builder.string_internal([unescaped_line, srange_offsets(start_offset, start_offset + normalized_lengths.fetch(index, 0))])
                  start_offset += escaped_lengths.fetch(index, 0)
                  inner_part
                end
              else
                [visit(part)]
              end

            pushing.each do |child|
              if child.type == :str && child.children.last == ""
                # nothing
              elsif child.type == :str && children.last && children.last.type == :str && !children.last.children.first.end_with?("\n")
                appendee = children[-1]

                location = appendee.loc
                location = location.with_expression(location.expression.join(child.loc.expression))

                children[-1] = appendee.updated(:str, [appendee.children.first << child.children.first], location: location)
              else
                children << child
              end
            end
          end

          closing = node.closing
          closing_t = [closing.chomp, srange_offsets(node.closing_loc.start_offset, node.closing_loc.end_offset - (closing[/\s+$/]&.length || 0))]
          composed = yield children, closing_t

          composed = composed.updated(nil, children[1..-1]) if indented
          composed
        end

        # Visit a numeric node and account for the optional sign.
        def visit_numeric(node, value)
          if (slice = node.slice).match?(/^[+-]/)
            builder.unary_num(
              [slice[0].to_sym, srange_offsets(node.location.start_offset, node.location.start_offset + 1)],
              value
            )
          else
            value
          end
        end

        # Within the given block, track that we're within a pattern.
        def within_pattern
          begin
            parser.pattern_variables.push
            yield copy_compiler(in_pattern: true)
          ensure
            parser.pattern_variables.pop
          end
        end
      end
    end
  end
end
PK*J[����B�B,share/ruby/prism/translation/parser/lexer.rbnu�[���# frozen_string_literal: true

module Prism
  module Translation
    class Parser
      # Accepts a list of prism tokens and converts them into the expected
      # format for the parser gem.
      class Lexer
        # The direct translating of types between the two lexers.
        TYPES = {
          # These tokens should never appear in the output of the lexer.
          EOF: nil,
          MISSING: nil,
          NOT_PROVIDED: nil,
          IGNORED_NEWLINE: nil,
          EMBDOC_END: nil,
          EMBDOC_LINE: nil,
          __END__: nil,

          # These tokens have more or less direct mappings.
          AMPERSAND: :tAMPER2,
          AMPERSAND_AMPERSAND: :tANDOP,
          AMPERSAND_AMPERSAND_EQUAL: :tOP_ASGN,
          AMPERSAND_DOT: :tANDDOT,
          AMPERSAND_EQUAL: :tOP_ASGN,
          BACK_REFERENCE: :tBACK_REF,
          BACKTICK: :tXSTRING_BEG,
          BANG: :tBANG,
          BANG_EQUAL: :tNEQ,
          BANG_TILDE: :tNMATCH,
          BRACE_LEFT: :tLCURLY,
          BRACE_RIGHT: :tRCURLY,
          BRACKET_LEFT: :tLBRACK2,
          BRACKET_LEFT_ARRAY: :tLBRACK,
          BRACKET_LEFT_RIGHT: :tAREF,
          BRACKET_LEFT_RIGHT_EQUAL: :tASET,
          BRACKET_RIGHT: :tRBRACK,
          CARET: :tCARET,
          CARET_EQUAL: :tOP_ASGN,
          CHARACTER_LITERAL: :tCHARACTER,
          CLASS_VARIABLE: :tCVAR,
          COLON: :tCOLON,
          COLON_COLON: :tCOLON2,
          COMMA: :tCOMMA,
          COMMENT: :tCOMMENT,
          CONSTANT: :tCONSTANT,
          DOT: :tDOT,
          DOT_DOT: :tDOT2,
          DOT_DOT_DOT: :tDOT3,
          EMBDOC_BEGIN: :tCOMMENT,
          EMBEXPR_BEGIN: :tSTRING_DBEG,
          EMBEXPR_END: :tSTRING_DEND,
          EMBVAR: :tSTRING_DVAR,
          EQUAL: :tEQL,
          EQUAL_EQUAL: :tEQ,
          EQUAL_EQUAL_EQUAL: :tEQQ,
          EQUAL_GREATER: :tASSOC,
          EQUAL_TILDE: :tMATCH,
          FLOAT: :tFLOAT,
          FLOAT_IMAGINARY: :tIMAGINARY,
          FLOAT_RATIONAL: :tRATIONAL,
          FLOAT_RATIONAL_IMAGINARY: :tIMAGINARY,
          GLOBAL_VARIABLE: :tGVAR,
          GREATER: :tGT,
          GREATER_EQUAL: :tGEQ,
          GREATER_GREATER: :tRSHFT,
          GREATER_GREATER_EQUAL: :tOP_ASGN,
          HEREDOC_START: :tSTRING_BEG,
          HEREDOC_END: :tSTRING_END,
          IDENTIFIER: :tIDENTIFIER,
          INSTANCE_VARIABLE: :tIVAR,
          INTEGER: :tINTEGER,
          INTEGER_IMAGINARY: :tIMAGINARY,
          INTEGER_RATIONAL: :tRATIONAL,
          INTEGER_RATIONAL_IMAGINARY: :tIMAGINARY,
          KEYWORD_ALIAS: :kALIAS,
          KEYWORD_AND: :kAND,
          KEYWORD_BEGIN: :kBEGIN,
          KEYWORD_BEGIN_UPCASE: :klBEGIN,
          KEYWORD_BREAK: :kBREAK,
          KEYWORD_CASE: :kCASE,
          KEYWORD_CLASS: :kCLASS,
          KEYWORD_DEF: :kDEF,
          KEYWORD_DEFINED: :kDEFINED,
          KEYWORD_DO: :kDO,
          KEYWORD_DO_LOOP: :kDO_COND,
          KEYWORD_END: :kEND,
          KEYWORD_END_UPCASE: :klEND,
          KEYWORD_ENSURE: :kENSURE,
          KEYWORD_ELSE: :kELSE,
          KEYWORD_ELSIF: :kELSIF,
          KEYWORD_FALSE: :kFALSE,
          KEYWORD_FOR: :kFOR,
          KEYWORD_IF: :kIF,
          KEYWORD_IF_MODIFIER: :kIF_MOD,
          KEYWORD_IN: :kIN,
          KEYWORD_MODULE: :kMODULE,
          KEYWORD_NEXT: :kNEXT,
          KEYWORD_NIL: :kNIL,
          KEYWORD_NOT: :kNOT,
          KEYWORD_OR: :kOR,
          KEYWORD_REDO: :kREDO,
          KEYWORD_RESCUE: :kRESCUE,
          KEYWORD_RESCUE_MODIFIER: :kRESCUE_MOD,
          KEYWORD_RETRY: :kRETRY,
          KEYWORD_RETURN: :kRETURN,
          KEYWORD_SELF: :kSELF,
          KEYWORD_SUPER: :kSUPER,
          KEYWORD_THEN: :kTHEN,
          KEYWORD_TRUE: :kTRUE,
          KEYWORD_UNDEF: :kUNDEF,
          KEYWORD_UNLESS: :kUNLESS,
          KEYWORD_UNLESS_MODIFIER: :kUNLESS_MOD,
          KEYWORD_UNTIL: :kUNTIL,
          KEYWORD_UNTIL_MODIFIER: :kUNTIL_MOD,
          KEYWORD_WHEN: :kWHEN,
          KEYWORD_WHILE: :kWHILE,
          KEYWORD_WHILE_MODIFIER: :kWHILE_MOD,
          KEYWORD_YIELD: :kYIELD,
          KEYWORD___ENCODING__: :k__ENCODING__,
          KEYWORD___FILE__: :k__FILE__,
          KEYWORD___LINE__: :k__LINE__,
          LABEL: :tLABEL,
          LABEL_END: :tLABEL_END,
          LAMBDA_BEGIN: :tLAMBEG,
          LESS: :tLT,
          LESS_EQUAL: :tLEQ,
          LESS_EQUAL_GREATER: :tCMP,
          LESS_LESS: :tLSHFT,
          LESS_LESS_EQUAL: :tOP_ASGN,
          METHOD_NAME: :tFID,
          MINUS: :tMINUS,
          MINUS_EQUAL: :tOP_ASGN,
          MINUS_GREATER: :tLAMBDA,
          NEWLINE: :tNL,
          NUMBERED_REFERENCE: :tNTH_REF,
          PARENTHESIS_LEFT: :tLPAREN2,
          PARENTHESIS_LEFT_PARENTHESES: :tLPAREN_ARG,
          PARENTHESIS_RIGHT: :tRPAREN,
          PERCENT: :tPERCENT,
          PERCENT_EQUAL: :tOP_ASGN,
          PERCENT_LOWER_I: :tQSYMBOLS_BEG,
          PERCENT_LOWER_W: :tQWORDS_BEG,
          PERCENT_UPPER_I: :tSYMBOLS_BEG,
          PERCENT_UPPER_W: :tWORDS_BEG,
          PERCENT_LOWER_X: :tXSTRING_BEG,
          PLUS: :tPLUS,
          PLUS_EQUAL: :tOP_ASGN,
          PIPE_EQUAL: :tOP_ASGN,
          PIPE: :tPIPE,
          PIPE_PIPE: :tOROP,
          PIPE_PIPE_EQUAL: :tOP_ASGN,
          QUESTION_MARK: :tEH,
          REGEXP_BEGIN: :tREGEXP_BEG,
          REGEXP_END: :tSTRING_END,
          SEMICOLON: :tSEMI,
          SLASH: :tDIVIDE,
          SLASH_EQUAL: :tOP_ASGN,
          STAR: :tSTAR2,
          STAR_EQUAL: :tOP_ASGN,
          STAR_STAR: :tPOW,
          STAR_STAR_EQUAL: :tOP_ASGN,
          STRING_BEGIN: :tSTRING_BEG,
          STRING_CONTENT: :tSTRING_CONTENT,
          STRING_END: :tSTRING_END,
          SYMBOL_BEGIN: :tSYMBEG,
          TILDE: :tTILDE,
          UAMPERSAND: :tAMPER,
          UCOLON_COLON: :tCOLON3,
          UDOT_DOT: :tBDOT2,
          UDOT_DOT_DOT: :tBDOT3,
          UMINUS: :tUMINUS,
          UMINUS_NUM: :tUNARY_NUM,
          UPLUS: :tUPLUS,
          USTAR: :tSTAR,
          USTAR_STAR: :tDSTAR,
          WORDS_SEP: :tSPACE
        }

        # These constants represent flags in our lex state. We really, really
        # don't want to be using them and we really, really don't want to be
        # exposing them as part of our public API. Unfortunately, we don't have
        # another way of matching the exact tokens that the parser gem expects
        # without them. We should find another way to do this, but in the
        # meantime we'll hide them from the documentation and mark them as
        # private constants.
        EXPR_BEG = 0x1 # :nodoc:
        EXPR_LABEL = 0x400 # :nodoc:

        # It is used to determine whether `do` is of the token type `kDO` or `kDO_LAMBDA`.
        #
        # NOTE: In edge cases like `-> (foo = -> (bar) {}) do end`, please note that `kDO` is still returned
        # instead of `kDO_LAMBDA`, which is expected: https://github.com/ruby/prism/pull/3046
        LAMBDA_TOKEN_TYPES = [:kDO_LAMBDA, :tLAMBDA, :tLAMBEG]

        # The `PARENTHESIS_LEFT` token in Prism is classified as either `tLPAREN` or `tLPAREN2` in the Parser gem.
        # The following token types are listed as those classified as `tLPAREN`.
        LPAREN_CONVERSION_TOKEN_TYPES = [
          :kBREAK, :kCASE, :tDIVIDE, :kFOR, :kIF, :kNEXT, :kRETURN, :kUNTIL, :kWHILE, :tAMPER, :tANDOP, :tBANG, :tCOMMA, :tDOT2, :tDOT3,
          :tEQL, :tLPAREN, :tLPAREN2, :tLSHFT, :tNL, :tOP_ASGN, :tOROP, :tPIPE, :tSEMI, :tSTRING_DBEG, :tUMINUS, :tUPLUS
        ]

        private_constant :TYPES, :EXPR_BEG, :EXPR_LABEL, :LAMBDA_TOKEN_TYPES, :LPAREN_CONVERSION_TOKEN_TYPES

        # The Parser::Source::Buffer that the tokens were lexed from.
        attr_reader :source_buffer

        # An array of tuples that contain prism tokens and their associated lex
        # state when they were lexed.
        attr_reader :lexed

        # A hash that maps offsets in bytes to offsets in characters.
        attr_reader :offset_cache

        # Initialize the lexer with the given source buffer, prism tokens, and
        # offset cache.
        def initialize(source_buffer, lexed, offset_cache)
          @source_buffer = source_buffer
          @lexed = lexed
          @offset_cache = offset_cache
        end

        Range = ::Parser::Source::Range # :nodoc:
        private_constant :Range

        # Convert the prism tokens into the expected format for the parser gem.
        def to_a
          tokens = []

          index = 0
          length = lexed.length

          heredoc_identifier_stack = []

          while index < length
            token, state = lexed[index]
            index += 1
            next if %i[IGNORED_NEWLINE __END__ EOF].include?(token.type)

            type = TYPES.fetch(token.type)
            value = token.value
            location = Range.new(source_buffer, offset_cache[token.location.start_offset], offset_cache[token.location.end_offset])

            case type
            when :kDO
              types = tokens.map(&:first)
              nearest_lambda_token_type = types.reverse.find { |type| LAMBDA_TOKEN_TYPES.include?(type) }

              if nearest_lambda_token_type == :tLAMBDA
                type = :kDO_LAMBDA
              end
            when :tCHARACTER
              value.delete_prefix!("?")
            when :tCOMMENT
              if token.type == :EMBDOC_BEGIN
                start_index = index

                while !((next_token = lexed[index][0]) && next_token.type == :EMBDOC_END) && (index < length - 1)
                  value += next_token.value
                  index += 1
                end

                if start_index != index
                  value += next_token.value
                  location = Range.new(source_buffer, offset_cache[token.location.start_offset], offset_cache[lexed[index][0].location.end_offset])
                  index += 1
                end
              else
                value.chomp!
                location = Range.new(source_buffer, offset_cache[token.location.start_offset], offset_cache[token.location.end_offset - 1])
              end
            when :tNL
              value = nil
            when :tFLOAT
              value = parse_float(value)
            when :tIMAGINARY
              value = parse_complex(value)
            when :tINTEGER
              if value.start_with?("+")
                tokens << [:tUNARY_NUM, ["+", Range.new(source_buffer, offset_cache[token.location.start_offset], offset_cache[token.location.start_offset + 1])]]
                location = Range.new(source_buffer, offset_cache[token.location.start_offset + 1], offset_cache[token.location.end_offset])
              end

              value = parse_integer(value)
            when :tLABEL
              value.chomp!(":")
            when :tLABEL_END
              value.chomp!(":")
            when :tLCURLY
              type = :tLBRACE if state == EXPR_BEG | EXPR_LABEL
            when :tLPAREN2
              type = :tLPAREN if tokens.empty? || LPAREN_CONVERSION_TOKEN_TYPES.include?(tokens.dig(-1, 0))
            when :tNTH_REF
              value = parse_integer(value.delete_prefix("$"))
            when :tOP_ASGN
              value.chomp!("=")
            when :tRATIONAL
              value = parse_rational(value)
            when :tSPACE
              value = nil
            when :tSTRING_BEG
              if token.type == :HEREDOC_START
                heredoc_identifier_stack.push(value.match(/<<[-~]?["'`]?(?<heredoc_identifier>.*?)["'`]?\z/)[:heredoc_identifier])
              end
              if ["\"", "'"].include?(value) && (next_token = lexed[index][0]) && next_token.type == :STRING_END
                next_location = token.location.join(next_token.location)
                type = :tSTRING
                value = ""
                location = Range.new(source_buffer, offset_cache[next_location.start_offset], offset_cache[next_location.end_offset])
                index += 1
              elsif ["\"", "'"].include?(value) && (next_token = lexed[index][0]) && next_token.type == :STRING_CONTENT && next_token.value.lines.count <= 1 && (next_next_token = lexed[index + 1][0]) && next_next_token.type == :STRING_END
                next_location = token.location.join(next_next_token.location)
                type = :tSTRING
                value = next_token.value.gsub("\\\\", "\\")
                location = Range.new(source_buffer, offset_cache[next_location.start_offset], offset_cache[next_location.end_offset])
                index += 2
              elsif value.start_with?("<<")
                quote = value[2] == "-" || value[2] == "~" ? value[3] : value[2]
                if quote == "`"
                  type = :tXSTRING_BEG
                  value = "<<`"
                else
                  value = "<<#{quote == "'" || quote == "\"" ? quote : "\""}"
                end
              end
            when :tSTRING_CONTENT
              unless (lines = token.value.lines).one?
                start_offset = offset_cache[token.location.start_offset]
                lines.map do |line|
                  newline = line.end_with?("\r\n") ? "\r\n" : "\n"
                  chomped_line = line.chomp
                  if match = chomped_line.match(/(?<backslashes>\\+)\z/)
                    adjustment = match[:backslashes].size / 2
                    adjusted_line = chomped_line.delete_suffix("\\" * adjustment)
                    if match[:backslashes].size.odd?
                      adjusted_line.delete_suffix!("\\")
                      adjustment += 2
                    else
                      adjusted_line << newline
                    end
                  else
                    adjusted_line = line
                    adjustment = 0
                  end

                  end_offset = start_offset + adjusted_line.length + adjustment
                  tokens << [:tSTRING_CONTENT, [adjusted_line, Range.new(source_buffer, offset_cache[start_offset], offset_cache[end_offset])]]
                  start_offset = end_offset
                end
                next
              end
            when :tSTRING_DVAR
              value = nil
            when :tSTRING_END
              if token.type == :HEREDOC_END && value.end_with?("\n")
                newline_length = value.end_with?("\r\n") ? 2 : 1
                value = heredoc_identifier_stack.pop
                location = Range.new(source_buffer, offset_cache[token.location.start_offset], offset_cache[token.location.end_offset - newline_length])
              elsif token.type == :REGEXP_END
                value = value[0]
                location = Range.new(source_buffer, offset_cache[token.location.start_offset], offset_cache[token.location.start_offset + 1])
              end
            when :tSYMBEG
              if (next_token = lexed[index][0]) && next_token.type != :STRING_CONTENT && next_token.type != :EMBEXPR_BEGIN && next_token.type != :EMBVAR && next_token.type != :STRING_END
                next_location = token.location.join(next_token.location)
                type = :tSYMBOL
                value = next_token.value
                value = { "~@" => "~", "!@" => "!" }.fetch(value, value)
                location = Range.new(source_buffer, offset_cache[next_location.start_offset], offset_cache[next_location.end_offset])
                index += 1
              end
            when :tFID
              if !tokens.empty? && tokens.dig(-1, 0) == :kDEF
                type = :tIDENTIFIER
              end
            when :tXSTRING_BEG
              if (next_token = lexed[index][0]) && next_token.type != :STRING_CONTENT && next_token.type != :STRING_END
                type = :tBACK_REF2
              end
            end

            tokens << [type, [value, location]]

            if token.type == :REGEXP_END
              tokens << [:tREGEXP_OPT, [token.value[1..], Range.new(source_buffer, offset_cache[token.location.start_offset + 1], offset_cache[token.location.end_offset])]]
            end
          end

          tokens
        end

        private

        # Parse an integer from the string representation.
        def parse_integer(value)
          Integer(value)
        rescue ArgumentError
          0
        end

        # Parse a float from the string representation.
        def parse_float(value)
          Float(value)
        rescue ArgumentError
          0.0
        end

        # Parse a complex from the string representation.
        def parse_complex(value)
          value.chomp!("i")

          if value.end_with?("r")
            Complex(0, parse_rational(value))
          elsif value.start_with?(/0[BbOoDdXx]/)
            Complex(0, parse_integer(value))
          else
            Complex(0, value)
          end
        rescue ArgumentError
          0i
        end

        # Parse a rational from the string representation.
        def parse_rational(value)
          value.chomp!("r")

          if value.start_with?(/0[BbOoDdXx]/)
            Rational(parse_integer(value))
          else
            Rational(value)
          end
        rescue ArgumentError
          0r
        end
      end
    end
  end
end
PK*J[O���VyVy&share/ruby/prism/translation/ripper.rbnu�[���# frozen_string_literal: true

require "ripper"

module Prism
  module Translation
    # This class provides a compatibility layer between prism and Ripper. It
    # functions by parsing the entire tree first and then walking it and
    # executing each of the Ripper callbacks as it goes. To use this class, you
    # treat `Prism::Translation::Ripper` effectively as you would treat the
    # `Ripper` class.
    #
    # Note that this class will serve the most common use cases, but Ripper's
    # API is extensive and undocumented. It relies on reporting the state of the
    # parser at any given time. We do our best to replicate that here, but
    # because it is a different architecture it is not possible to perfectly
    # replicate the behavior of Ripper.
    #
    # The main known difference is that we may omit dispatching some events in
    # some cases. This impacts the following events:
    #
    # - on_assign_error
    # - on_comma
    # - on_ignored_nl
    # - on_ignored_sp
    # - on_kw
    # - on_label_end
    # - on_lbrace
    # - on_lbracket
    # - on_lparen
    # - on_nl
    # - on_op
    # - on_operator_ambiguous
    # - on_rbrace
    # - on_rbracket
    # - on_rparen
    # - on_semicolon
    # - on_sp
    # - on_symbeg
    # - on_tstring_beg
    # - on_tstring_end
    #
    class Ripper < Compiler
      # Parses the given Ruby program read from +src+.
      # +src+ must be a String or an IO or a object with a #gets method.
      def self.parse(src, filename = "(ripper)", lineno = 1)
        new(src, filename, lineno).parse
      end

      # Tokenizes the Ruby program and returns an array of an array,
      # which is formatted like
      # <code>[[lineno, column], type, token, state]</code>.
      # The +filename+ argument is mostly ignored.
      # By default, this method does not handle syntax errors in +src+,
      # use the +raise_errors+ keyword to raise a SyntaxError for an error in +src+.
      #
      #     require "ripper"
      #     require "pp"
      #
      #     pp Ripper.lex("def m(a) nil end")
      #     #=> [[[1,  0], :on_kw,     "def", FNAME    ],
      #          [[1,  3], :on_sp,     " ",   FNAME    ],
      #          [[1,  4], :on_ident,  "m",   ENDFN    ],
      #          [[1,  5], :on_lparen, "(",   BEG|LABEL],
      #          [[1,  6], :on_ident,  "a",   ARG      ],
      #          [[1,  7], :on_rparen, ")",   ENDFN    ],
      #          [[1,  8], :on_sp,     " ",   BEG      ],
      #          [[1,  9], :on_kw,     "nil", END      ],
      #          [[1, 12], :on_sp,     " ",   END      ],
      #          [[1, 13], :on_kw,     "end", END      ]]
      #
      def self.lex(src, filename = "-", lineno = 1, raise_errors: false)
        result = Prism.lex_compat(src, filepath: filename, line: lineno)

        if result.failure? && raise_errors
          raise SyntaxError, result.errors.first.message
        else
          result.value
        end
      end

      # This contains a table of all of the parser events and their
      # corresponding arity.
      PARSER_EVENT_TABLE = {
        BEGIN: 1,
        END: 1,
        alias: 2,
        alias_error: 2,
        aref: 2,
        aref_field: 2,
        arg_ambiguous: 1,
        arg_paren: 1,
        args_add: 2,
        args_add_block: 2,
        args_add_star: 2,
        args_forward: 0,
        args_new: 0,
        array: 1,
        aryptn: 4,
        assign: 2,
        assign_error: 2,
        assoc_new: 2,
        assoc_splat: 1,
        assoclist_from_args: 1,
        bare_assoc_hash: 1,
        begin: 1,
        binary: 3,
        block_var: 2,
        blockarg: 1,
        bodystmt: 4,
        brace_block: 2,
        break: 1,
        call: 3,
        case: 2,
        class: 3,
        class_name_error: 2,
        command: 2,
        command_call: 4,
        const_path_field: 2,
        const_path_ref: 2,
        const_ref: 1,
        def: 3,
        defined: 1,
        defs: 5,
        do_block: 2,
        dot2: 2,
        dot3: 2,
        dyna_symbol: 1,
        else: 1,
        elsif: 3,
        ensure: 1,
        excessed_comma: 0,
        fcall: 1,
        field: 3,
        fndptn: 4,
        for: 3,
        hash: 1,
        heredoc_dedent: 2,
        hshptn: 3,
        if: 3,
        if_mod: 2,
        ifop: 3,
        in: 3,
        kwrest_param: 1,
        lambda: 2,
        magic_comment: 2,
        massign: 2,
        method_add_arg: 2,
        method_add_block: 2,
        mlhs_add: 2,
        mlhs_add_post: 2,
        mlhs_add_star: 2,
        mlhs_new: 0,
        mlhs_paren: 1,
        module: 2,
        mrhs_add: 2,
        mrhs_add_star: 2,
        mrhs_new: 0,
        mrhs_new_from_args: 1,
        next: 1,
        nokw_param: 1,
        opassign: 3,
        operator_ambiguous: 2,
        param_error: 2,
        params: 7,
        paren: 1,
        parse_error: 1,
        program: 1,
        qsymbols_add: 2,
        qsymbols_new: 0,
        qwords_add: 2,
        qwords_new: 0,
        redo: 0,
        regexp_add: 2,
        regexp_literal: 2,
        regexp_new: 0,
        rescue: 4,
        rescue_mod: 2,
        rest_param: 1,
        retry: 0,
        return: 1,
        return0: 0,
        sclass: 2,
        stmts_add: 2,
        stmts_new: 0,
        string_add: 2,
        string_concat: 2,
        string_content: 0,
        string_dvar: 1,
        string_embexpr: 1,
        string_literal: 1,
        super: 1,
        symbol: 1,
        symbol_literal: 1,
        symbols_add: 2,
        symbols_new: 0,
        top_const_field: 1,
        top_const_ref: 1,
        unary: 2,
        undef: 1,
        unless: 3,
        unless_mod: 2,
        until: 2,
        until_mod: 2,
        var_alias: 2,
        var_field: 1,
        var_ref: 1,
        vcall: 1,
        void_stmt: 0,
        when: 3,
        while: 2,
        while_mod: 2,
        word_add: 2,
        word_new: 0,
        words_add: 2,
        words_new: 0,
        xstring_add: 2,
        xstring_literal: 1,
        xstring_new: 0,
        yield: 1,
        yield0: 0,
        zsuper: 0
      }

      # This contains a table of all of the scanner events and their
      # corresponding arity.
      SCANNER_EVENT_TABLE = {
        CHAR: 1,
        __end__: 1,
        backref: 1,
        backtick: 1,
        comma: 1,
        comment: 1,
        const: 1,
        cvar: 1,
        embdoc: 1,
        embdoc_beg: 1,
        embdoc_end: 1,
        embexpr_beg: 1,
        embexpr_end: 1,
        embvar: 1,
        float: 1,
        gvar: 1,
        heredoc_beg: 1,
        heredoc_end: 1,
        ident: 1,
        ignored_nl: 1,
        imaginary: 1,
        int: 1,
        ivar: 1,
        kw: 1,
        label: 1,
        label_end: 1,
        lbrace: 1,
        lbracket: 1,
        lparen: 1,
        nl: 1,
        op: 1,
        period: 1,
        qsymbols_beg: 1,
        qwords_beg: 1,
        rational: 1,
        rbrace: 1,
        rbracket: 1,
        regexp_beg: 1,
        regexp_end: 1,
        rparen: 1,
        semicolon: 1,
        sp: 1,
        symbeg: 1,
        symbols_beg: 1,
        tlambda: 1,
        tlambeg: 1,
        tstring_beg: 1,
        tstring_content: 1,
        tstring_end: 1,
        words_beg: 1,
        words_sep: 1,
        ignored_sp: 1
      }

      # This array contains name of parser events.
      PARSER_EVENTS = PARSER_EVENT_TABLE.keys

      # This array contains name of scanner events.
      SCANNER_EVENTS = SCANNER_EVENT_TABLE.keys

      # This array contains name of all ripper events.
      EVENTS = PARSER_EVENTS + SCANNER_EVENTS

      # A list of all of the Ruby keywords.
      KEYWORDS = [
        "alias",
        "and",
        "begin",
        "BEGIN",
        "break",
        "case",
        "class",
        "def",
        "defined?",
        "do",
        "else",
        "elsif",
        "end",
        "END",
        "ensure",
        "false",
        "for",
        "if",
        "in",
        "module",
        "next",
        "nil",
        "not",
        "or",
        "redo",
        "rescue",
        "retry",
        "return",
        "self",
        "super",
        "then",
        "true",
        "undef",
        "unless",
        "until",
        "when",
        "while",
        "yield",
        "__ENCODING__",
        "__FILE__",
        "__LINE__"
      ]

      # A list of all of the Ruby binary operators.
      BINARY_OPERATORS = [
        :!=,
        :!~,
        :=~,
        :==,
        :===,
        :<=>,
        :>,
        :>=,
        :<,
        :<=,
        :&,
        :|,
        :^,
        :>>,
        :<<,
        :-,
        :+,
        :%,
        :/,
        :*,
        :**
      ]

      private_constant :KEYWORDS, :BINARY_OPERATORS

      # Parses +src+ and create S-exp tree.
      # Returns more readable tree rather than Ripper.sexp_raw.
      # This method is mainly for developer use.
      # The +filename+ argument is mostly ignored.
      # By default, this method does not handle syntax errors in +src+,
      # returning +nil+ in such cases. Use the +raise_errors+ keyword
      # to raise a SyntaxError for an error in +src+.
      #
      #     require "ripper"
      #     require "pp"
      #
      #     pp Ripper.sexp("def m(a) nil end")
      #       #=> [:program,
      #            [[:def,
      #             [:@ident, "m", [1, 4]],
      #             [:paren, [:params, [[:@ident, "a", [1, 6]]], nil, nil, nil, nil, nil, nil]],
      #             [:bodystmt, [[:var_ref, [:@kw, "nil", [1, 9]]]], nil, nil, nil]]]]
      #
      def self.sexp(src, filename = "-", lineno = 1, raise_errors: false)
        builder = SexpBuilderPP.new(src, filename, lineno)
        sexp = builder.parse
        if builder.error?
          if raise_errors
            raise SyntaxError, builder.error
          end
        else
          sexp
        end
      end

      # Parses +src+ and create S-exp tree.
      # This method is mainly for developer use.
      # The +filename+ argument is mostly ignored.
      # By default, this method does not handle syntax errors in +src+,
      # returning +nil+ in such cases. Use the +raise_errors+ keyword
      # to raise a SyntaxError for an error in +src+.
      #
      #     require "ripper"
      #     require "pp"
      #
      #     pp Ripper.sexp_raw("def m(a) nil end")
      #       #=> [:program,
      #            [:stmts_add,
      #             [:stmts_new],
      #             [:def,
      #              [:@ident, "m", [1, 4]],
      #              [:paren, [:params, [[:@ident, "a", [1, 6]]], nil, nil, nil]],
      #              [:bodystmt,
      #               [:stmts_add, [:stmts_new], [:var_ref, [:@kw, "nil", [1, 9]]]],
      #               nil,
      #               nil,
      #               nil]]]]
      #
      def self.sexp_raw(src, filename = "-", lineno = 1, raise_errors: false)
        builder = SexpBuilder.new(src, filename, lineno)
        sexp = builder.parse
        if builder.error?
          if raise_errors
            raise SyntaxError, builder.error
          end
        else
          sexp
        end
      end

      autoload :SexpBuilder, "prism/translation/ripper/sexp"
      autoload :SexpBuilderPP, "prism/translation/ripper/sexp"

      # The source that is being parsed.
      attr_reader :source

      # The filename of the source being parsed.
      attr_reader :filename

      # The current line number of the parser.
      attr_reader :lineno

      # The current column number of the parser.
      attr_reader :column

      # Create a new Translation::Ripper object with the given source.
      def initialize(source, filename = "(ripper)", lineno = 1)
        @source = source
        @filename = filename
        @lineno = lineno
        @column = 0
        @result = nil
      end

      ##########################################################################
      # Public interface
      ##########################################################################

      # True if the parser encountered an error during parsing.
      def error?
        result.failure?
      end

      # Parse the source and return the result.
      def parse
        result.comments.each do |comment|
          location = comment.location
          bounds(location)

          if comment.is_a?(InlineComment)
            on_comment(comment.slice)
          else
            offset = location.start_offset
            lines = comment.slice.lines

            lines.each_with_index do |line, index|
              bounds(location.copy(start_offset: offset))

              if index == 0
                on_embdoc_beg(line)
              elsif index == lines.size - 1
                on_embdoc_end(line)
              else
                on_embdoc(line)
              end

              offset += line.bytesize
            end
          end
        end

        result.magic_comments.each do |magic_comment|
          on_magic_comment(magic_comment.key, magic_comment.value)
        end

        unless result.data_loc.nil?
          on___end__(result.data_loc.slice.each_line.first)
        end

        result.warnings.each do |warning|
          bounds(warning.location)

          if warning.level == :default
            warning(warning.message)
          else
            case warning.type
            when :ambiguous_first_argument_plus
              on_arg_ambiguous("+")
            when :ambiguous_first_argument_minus
              on_arg_ambiguous("-")
            when :ambiguous_slash
              on_arg_ambiguous("/")
            else
              warn(warning.message)
            end
          end
        end

        if error?
          result.errors.each do |error|
            location = error.location
            bounds(location)

            case error.type
            when :alias_argument
              on_alias_error("can't make alias for the number variables", location.slice)
            when :argument_formal_class
              on_param_error("formal argument cannot be a class variable", location.slice)
            when :argument_format_constant
              on_param_error("formal argument cannot be a constant", location.slice)
            when :argument_formal_global
              on_param_error("formal argument cannot be a global variable", location.slice)
            when :argument_formal_ivar
              on_param_error("formal argument cannot be an instance variable", location.slice)
            when :class_name, :module_name
              on_class_name_error("class/module name must be CONSTANT", location.slice)
            else
              on_parse_error(error.message)
            end
          end

          nil
        else
          result.value.accept(self)
        end
      end

      ##########################################################################
      # Visitor methods
      ##########################################################################

      # alias foo bar
      # ^^^^^^^^^^^^^
      def visit_alias_method_node(node)
        new_name = visit(node.new_name)
        old_name = visit(node.old_name)

        bounds(node.location)
        on_alias(new_name, old_name)
      end

      # alias $foo $bar
      # ^^^^^^^^^^^^^^^
      def visit_alias_global_variable_node(node)
        new_name = visit_alias_global_variable_node_value(node.new_name)
        old_name = visit_alias_global_variable_node_value(node.old_name)

        bounds(node.location)
        on_var_alias(new_name, old_name)
      end

      # Visit one side of an alias global variable node.
      private def visit_alias_global_variable_node_value(node)
        bounds(node.location)

        case node
        when BackReferenceReadNode
          on_backref(node.slice)
        when GlobalVariableReadNode
          on_gvar(node.name.to_s)
        else
          raise
        end
      end

      # foo => bar | baz
      #        ^^^^^^^^^
      def visit_alternation_pattern_node(node)
        left = visit_pattern_node(node.left)
        right = visit_pattern_node(node.right)

        bounds(node.location)
        on_binary(left, :|, right)
      end

      # Visit a pattern within a pattern match. This is used to bypass the
      # parenthesis node that can be used to wrap patterns.
      private def visit_pattern_node(node)
        if node.is_a?(ParenthesesNode)
          visit(node.body)
        else
          visit(node)
        end
      end

      # a and b
      # ^^^^^^^
      def visit_and_node(node)
        left = visit(node.left)
        right = visit(node.right)

        bounds(node.location)
        on_binary(left, node.operator.to_sym, right)
      end

      # []
      # ^^
      def visit_array_node(node)
        case (opening = node.opening)
        when /^%w/
          opening_loc = node.opening_loc
          bounds(opening_loc)
          on_qwords_beg(opening)

          elements = on_qwords_new
          previous = nil

          node.elements.each do |element|
            visit_words_sep(opening_loc, previous, element)

            bounds(element.location)
            elements = on_qwords_add(elements, on_tstring_content(element.content))

            previous = element
          end

          bounds(node.closing_loc)
          on_tstring_end(node.closing)
        when /^%i/
          opening_loc = node.opening_loc
          bounds(opening_loc)
          on_qsymbols_beg(opening)

          elements = on_qsymbols_new
          previous = nil

          node.elements.each do |element|
            visit_words_sep(opening_loc, previous, element)

            bounds(element.location)
            elements = on_qsymbols_add(elements, on_tstring_content(element.value))

            previous = element
          end

          bounds(node.closing_loc)
          on_tstring_end(node.closing)
        when /^%W/
          opening_loc = node.opening_loc
          bounds(opening_loc)
          on_words_beg(opening)

          elements = on_words_new
          previous = nil

          node.elements.each do |element|
            visit_words_sep(opening_loc, previous, element)

            bounds(element.location)
            elements =
              on_words_add(
                elements,
                if element.is_a?(StringNode)
                  on_word_add(on_word_new, on_tstring_content(element.content))
                else
                  element.parts.inject(on_word_new) do |word, part|
                    word_part =
                      if part.is_a?(StringNode)
                        bounds(part.location)
                        on_tstring_content(part.content)
                      else
                        visit(part)
                      end

                    on_word_add(word, word_part)
                  end
                end
              )

            previous = element
          end

          bounds(node.closing_loc)
          on_tstring_end(node.closing)
        when /^%I/
          opening_loc = node.opening_loc
          bounds(opening_loc)
          on_symbols_beg(opening)

          elements = on_symbols_new
          previous = nil

          node.elements.each do |element|
            visit_words_sep(opening_loc, previous, element)

            bounds(element.location)
            elements =
              on_symbols_add(
                elements,
                if element.is_a?(SymbolNode)
                  on_word_add(on_word_new, on_tstring_content(element.value))
                else
                  element.parts.inject(on_word_new) do |word, part|
                    word_part =
                      if part.is_a?(StringNode)
                        bounds(part.location)
                        on_tstring_content(part.content)
                      else
                        visit(part)
                      end

                    on_word_add(word, word_part)
                  end
                end
              )

            previous = element
          end

          bounds(node.closing_loc)
          on_tstring_end(node.closing)
        else
          bounds(node.opening_loc)
          on_lbracket(opening)

          elements = visit_arguments(node.elements) unless node.elements.empty?

          bounds(node.closing_loc)
          on_rbracket(node.closing)
        end

        bounds(node.location)
        on_array(elements)
      end

      # Dispatch a words_sep event that contains the space between the elements
      # of list literals.
      private def visit_words_sep(opening_loc, previous, current)
        end_offset = (previous.nil? ? opening_loc : previous.location).end_offset
        start_offset = current.location.start_offset

        if end_offset != start_offset
          bounds(current.location.copy(start_offset: end_offset))
          on_words_sep(source.byteslice(end_offset...start_offset))
        end
      end

      # Visit a list of elements, like the elements of an array or arguments.
      private def visit_arguments(elements)
        bounds(elements.first.location)
        elements.inject(on_args_new) do |args, element|
          arg = visit(element)
          bounds(element.location)

          case element
          when BlockArgumentNode
            on_args_add_block(args, arg)
          when SplatNode
            on_args_add_star(args, arg)
          else
            on_args_add(args, arg)
          end
        end
      end

      # foo => [bar]
      #        ^^^^^
      def visit_array_pattern_node(node)
        constant = visit(node.constant)
        requireds = visit_all(node.requireds) if node.requireds.any?
        rest =
          if (rest_node = node.rest).is_a?(SplatNode)
            if rest_node.expression.nil?
              bounds(rest_node.location)
              on_var_field(nil)
            else
              visit(rest_node.expression)
            end
          end

        posts = visit_all(node.posts) if node.posts.any?

        bounds(node.location)
        on_aryptn(constant, requireds, rest, posts)
      end

      # foo(bar)
      #     ^^^
      def visit_arguments_node(node)
        arguments, _ = visit_call_node_arguments(node, nil, false)
        arguments
      end

      # { a: 1 }
      #   ^^^^
      def visit_assoc_node(node)
        key = visit(node.key)
        value = visit(node.value)

        bounds(node.location)
        on_assoc_new(key, value)
      end

      # def foo(**); bar(**); end
      #                  ^^
      #
      # { **foo }
      #   ^^^^^
      def visit_assoc_splat_node(node)
        value = visit(node.value)

        bounds(node.location)
        on_assoc_splat(value)
      end

      # $+
      # ^^
      def visit_back_reference_read_node(node)
        bounds(node.location)
        on_backref(node.slice)
      end

      # begin end
      # ^^^^^^^^^
      def visit_begin_node(node)
        clauses = visit_begin_node_clauses(node.begin_keyword_loc, node, false)

        bounds(node.location)
        on_begin(clauses)
      end

      # Visit the clauses of a begin node to form an on_bodystmt call.
      private def visit_begin_node_clauses(location, node, allow_newline)
        statements =
          if node.statements.nil?
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            body = node.statements.body
            body.unshift(nil) if void_stmt?(location, node.statements.body[0].location, allow_newline)

            bounds(node.statements.location)
            visit_statements_node_body(body)
          end

        rescue_clause = visit(node.rescue_clause)
        else_clause =
          unless (else_clause_node = node.else_clause).nil?
            else_statements =
              if else_clause_node.statements.nil?
                [nil]
              else
                body = else_clause_node.statements.body
                body.unshift(nil) if void_stmt?(else_clause_node.else_keyword_loc, else_clause_node.statements.body[0].location, allow_newline)
                body
              end

            bounds(else_clause_node.location)
            visit_statements_node_body(else_statements)
          end
        ensure_clause = visit(node.ensure_clause)

        bounds(node.location)
        on_bodystmt(statements, rescue_clause, else_clause, ensure_clause)
      end

      # Visit the body of a structure that can have either a set of statements
      # or statements wrapped in rescue/else/ensure.
      private def visit_body_node(location, node, allow_newline = false)
        case node
        when nil
          bounds(location)
          on_bodystmt(visit_statements_node_body([nil]), nil, nil, nil)
        when StatementsNode
          body = [*node.body]
          body.unshift(nil) if void_stmt?(location, body[0].location, allow_newline)
          stmts = visit_statements_node_body(body)

          bounds(node.body.first.location)
          on_bodystmt(stmts, nil, nil, nil)
        when BeginNode
          visit_begin_node_clauses(location, node, allow_newline)
        else
          raise
        end
      end

      # foo(&bar)
      #     ^^^^
      def visit_block_argument_node(node)
        visit(node.expression)
      end

      # foo { |; bar| }
      #          ^^^
      def visit_block_local_variable_node(node)
        bounds(node.location)
        on_ident(node.name.to_s)
      end

      # Visit a BlockNode.
      def visit_block_node(node)
        braces = node.opening == "{"
        parameters = visit(node.parameters)

        body =
          case node.body
          when nil
            bounds(node.location)
            stmts = on_stmts_add(on_stmts_new, on_void_stmt)

            bounds(node.location)
            braces ? stmts : on_bodystmt(stmts, nil, nil, nil)
          when StatementsNode
            stmts = node.body.body
            stmts.unshift(nil) if void_stmt?(node.parameters&.location || node.opening_loc, node.body.location, false)
            stmts = visit_statements_node_body(stmts)

            bounds(node.body.location)
            braces ? stmts : on_bodystmt(stmts, nil, nil, nil)
          when BeginNode
            visit_body_node(node.parameters&.location || node.opening_loc, node.body)
          else
            raise
          end

        if braces
          bounds(node.location)
          on_brace_block(parameters, body)
        else
          bounds(node.location)
          on_do_block(parameters, body)
        end
      end

      # def foo(&bar); end
      #         ^^^^
      def visit_block_parameter_node(node)
        if node.name_loc.nil?
          bounds(node.location)
          on_blockarg(nil)
        else
          bounds(node.name_loc)
          name = visit_token(node.name.to_s)

          bounds(node.location)
          on_blockarg(name)
        end
      end

      # A block's parameters.
      def visit_block_parameters_node(node)
        parameters =
          if node.parameters.nil?
            on_params(nil, nil, nil, nil, nil, nil, nil)
          else
            visit(node.parameters)
          end

        locals =
          if node.locals.any?
            visit_all(node.locals)
          else
            false
          end

        bounds(node.location)
        on_block_var(parameters, locals)
      end

      # break
      # ^^^^^
      #
      # break foo
      # ^^^^^^^^^
      def visit_break_node(node)
        if node.arguments.nil?
          bounds(node.location)
          on_break(on_args_new)
        else
          arguments = visit(node.arguments)

          bounds(node.location)
          on_break(arguments)
        end
      end

      # foo
      # ^^^
      #
      # foo.bar
      # ^^^^^^^
      #
      # foo.bar() {}
      # ^^^^^^^^^^^^
      def visit_call_node(node)
        if node.call_operator_loc.nil?
          case node.name
          when :[]
            receiver = visit(node.receiver)
            arguments, block = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.closing_loc))

            bounds(node.location)
            call = on_aref(receiver, arguments)

            if block.nil?
              call
            else
              bounds(node.location)
              on_method_add_block(call, block)
            end
          when :[]=
            receiver = visit(node.receiver)

            *arguments, last_argument = node.arguments.arguments
            arguments << node.block if !node.block.nil?

            arguments =
              if arguments.any?
                args = visit_arguments(arguments)

                if !node.block.nil?
                  args
                else
                  bounds(arguments.first.location)
                  on_args_add_block(args, false)
                end
              end

            bounds(node.location)
            call = on_aref_field(receiver, arguments)
            value = visit_write_value(last_argument)

            bounds(last_argument.location)
            on_assign(call, value)
          when :-@, :+@, :~
            receiver = visit(node.receiver)

            bounds(node.location)
            on_unary(node.name, receiver)
          when :!
            if node.message == "not"
              receiver =
                if !node.receiver.is_a?(ParenthesesNode) || !node.receiver.body.nil?
                  visit(node.receiver)
                end

              bounds(node.location)
              on_unary(:not, receiver)
            else
              receiver = visit(node.receiver)

              bounds(node.location)
              on_unary(:!, receiver)
            end
          when *BINARY_OPERATORS
            receiver = visit(node.receiver)
            value = visit(node.arguments.arguments.first)

            bounds(node.location)
            on_binary(receiver, node.name, value)
          else
            bounds(node.message_loc)
            message = visit_token(node.message, false)

            if node.variable_call?
              on_vcall(message)
            else
              arguments, block = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.closing_loc || node.location))
              call =
                if node.opening_loc.nil? && arguments&.any?
                  bounds(node.location)
                  on_command(message, arguments)
                elsif !node.opening_loc.nil?
                  bounds(node.location)
                  on_method_add_arg(on_fcall(message), on_arg_paren(arguments))
                else
                  bounds(node.location)
                  on_method_add_arg(on_fcall(message), on_args_new)
                end

              if block.nil?
                call
              else
                bounds(node.block.location)
                on_method_add_block(call, block)
              end
            end
          end
        else
          receiver = visit(node.receiver)

          bounds(node.call_operator_loc)
          call_operator = visit_token(node.call_operator)

          message =
            if node.message_loc.nil?
              :call
            else
              bounds(node.message_loc)
              visit_token(node.message, false)
            end

          if node.name.end_with?("=") && !node.message.end_with?("=") && !node.arguments.nil? && node.block.nil?
            value = visit_write_value(node.arguments.arguments.first)

            bounds(node.location)
            on_assign(on_field(receiver, call_operator, message), value)
          else
            arguments, block = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.closing_loc || node.location))
            call =
              if node.opening_loc.nil?
                bounds(node.location)

                if node.arguments.nil? && !node.block.is_a?(BlockArgumentNode)
                  on_call(receiver, call_operator, message)
                else
                  on_command_call(receiver, call_operator, message, arguments)
                end
              else
                bounds(node.opening_loc)
                arguments = on_arg_paren(arguments)

                bounds(node.location)
                on_method_add_arg(on_call(receiver, call_operator, message), arguments)
              end

            if block.nil?
              call
            else
              bounds(node.block.location)
              on_method_add_block(call, block)
            end
          end
        end
      end

      # Visit the arguments and block of a call node and return the arguments
      # and block as they should be used.
      private def visit_call_node_arguments(arguments_node, block_node, trailing_comma)
        arguments = arguments_node&.arguments || []
        block = block_node

        if block.is_a?(BlockArgumentNode)
          arguments << block
          block = nil
        end

        [
          if arguments.length == 1 && arguments.first.is_a?(ForwardingArgumentsNode)
            visit(arguments.first)
          elsif arguments.any?
            args = visit_arguments(arguments)

            if block_node.is_a?(BlockArgumentNode) || arguments.last.is_a?(ForwardingArgumentsNode) || command?(arguments.last) || trailing_comma
              args
            else
              bounds(arguments.first.location)
              on_args_add_block(args, false)
            end
          end,
          visit(block)
        ]
      end

      # Returns true if the given node is a command node.
      private def command?(node)
        node.is_a?(CallNode) &&
          node.opening_loc.nil? &&
          (!node.arguments.nil? || node.block.is_a?(BlockArgumentNode)) &&
          !BINARY_OPERATORS.include?(node.name)
      end

      # foo.bar += baz
      # ^^^^^^^^^^^^^^^
      def visit_call_operator_write_node(node)
        receiver = visit(node.receiver)

        bounds(node.call_operator_loc)
        call_operator = visit_token(node.call_operator)

        bounds(node.message_loc)
        message = visit_token(node.message)

        bounds(node.location)
        target = on_field(receiver, call_operator, message)

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo.bar &&= baz
      # ^^^^^^^^^^^^^^^
      def visit_call_and_write_node(node)
        receiver = visit(node.receiver)

        bounds(node.call_operator_loc)
        call_operator = visit_token(node.call_operator)

        bounds(node.message_loc)
        message = visit_token(node.message)

        bounds(node.location)
        target = on_field(receiver, call_operator, message)

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo.bar ||= baz
      # ^^^^^^^^^^^^^^^
      def visit_call_or_write_node(node)
        receiver = visit(node.receiver)

        bounds(node.call_operator_loc)
        call_operator = visit_token(node.call_operator)

        bounds(node.message_loc)
        message = visit_token(node.message)

        bounds(node.location)
        target = on_field(receiver, call_operator, message)

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo.bar, = 1
      # ^^^^^^^
      def visit_call_target_node(node)
        if node.call_operator == "::"
          receiver = visit(node.receiver)

          bounds(node.message_loc)
          message = visit_token(node.message)

          bounds(node.location)
          on_const_path_field(receiver, message)
        else
          receiver = visit(node.receiver)

          bounds(node.call_operator_loc)
          call_operator = visit_token(node.call_operator)

          bounds(node.message_loc)
          message = visit_token(node.message)

          bounds(node.location)
          on_field(receiver, call_operator, message)
        end
      end

      # foo => bar => baz
      #        ^^^^^^^^^^
      def visit_capture_pattern_node(node)
        value = visit(node.value)
        target = visit(node.target)

        bounds(node.location)
        on_binary(value, :"=>", target)
      end

      # case foo; when bar; end
      # ^^^^^^^^^^^^^^^^^^^^^^^
      def visit_case_node(node)
        predicate = visit(node.predicate)
        clauses =
          node.conditions.reverse_each.inject(visit(node.else_clause)) do |current, condition|
            on_when(*visit(condition), current)
          end

        bounds(node.location)
        on_case(predicate, clauses)
      end

      # case foo; in bar; end
      # ^^^^^^^^^^^^^^^^^^^^^
      def visit_case_match_node(node)
        predicate = visit(node.predicate)
        clauses =
          node.conditions.reverse_each.inject(visit(node.else_clause)) do |current, condition|
            on_in(*visit(condition), current)
          end

        bounds(node.location)
        on_case(predicate, clauses)
      end

      # class Foo; end
      # ^^^^^^^^^^^^^^
      def visit_class_node(node)
        constant_path =
          if node.constant_path.is_a?(ConstantReadNode)
            bounds(node.constant_path.location)
            on_const_ref(on_const(node.constant_path.name.to_s))
          else
            visit(node.constant_path)
          end

        superclass = visit(node.superclass)
        bodystmt = visit_body_node(node.superclass&.location || node.constant_path.location, node.body, node.superclass.nil?)

        bounds(node.location)
        on_class(constant_path, superclass, bodystmt)
      end

      # @@foo
      # ^^^^^
      def visit_class_variable_read_node(node)
        bounds(node.location)
        on_var_ref(on_cvar(node.slice))
      end

      # @@foo = 1
      # ^^^^^^^^^
      #
      # @@foo, @@bar = 1
      # ^^^^^  ^^^^^
      def visit_class_variable_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_cvar(node.name.to_s))
        value = visit_write_value(node.value)

        bounds(node.location)
        on_assign(target, value)
      end

      # @@foo += bar
      # ^^^^^^^^^^^^
      def visit_class_variable_operator_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_cvar(node.name.to_s))

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # @@foo &&= bar
      # ^^^^^^^^^^^^^
      def visit_class_variable_and_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_cvar(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # @@foo ||= bar
      # ^^^^^^^^^^^^^
      def visit_class_variable_or_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_cvar(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # @@foo, = bar
      # ^^^^^
      def visit_class_variable_target_node(node)
        bounds(node.location)
        on_var_field(on_cvar(node.name.to_s))
      end

      # Foo
      # ^^^
      def visit_constant_read_node(node)
        bounds(node.location)
        on_var_ref(on_const(node.name.to_s))
      end

      # Foo = 1
      # ^^^^^^^
      #
      # Foo, Bar = 1
      # ^^^  ^^^
      def visit_constant_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_const(node.name.to_s))
        value = visit_write_value(node.value)

        bounds(node.location)
        on_assign(target, value)
      end

      # Foo += bar
      # ^^^^^^^^^^^
      def visit_constant_operator_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_const(node.name.to_s))

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # Foo &&= bar
      # ^^^^^^^^^^^^
      def visit_constant_and_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_const(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # Foo ||= bar
      # ^^^^^^^^^^^^
      def visit_constant_or_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_const(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # Foo, = bar
      # ^^^
      def visit_constant_target_node(node)
        bounds(node.location)
        on_var_field(on_const(node.name.to_s))
      end

      # Foo::Bar
      # ^^^^^^^^
      def visit_constant_path_node(node)
        if node.parent.nil?
          bounds(node.name_loc)
          child = on_const(node.name.to_s)

          bounds(node.location)
          on_top_const_ref(child)
        else
          parent = visit(node.parent)

          bounds(node.name_loc)
          child = on_const(node.name.to_s)

          bounds(node.location)
          on_const_path_ref(parent, child)
        end
      end

      # Foo::Bar = 1
      # ^^^^^^^^^^^^
      #
      # Foo::Foo, Bar::Bar = 1
      # ^^^^^^^^  ^^^^^^^^
      def visit_constant_path_write_node(node)
        target = visit_constant_path_write_node_target(node.target)
        value = visit_write_value(node.value)

        bounds(node.location)
        on_assign(target, value)
      end

      # Visit a constant path that is part of a write node.
      private def visit_constant_path_write_node_target(node)
        if node.parent.nil?
          bounds(node.name_loc)
          child = on_const(node.name.to_s)

          bounds(node.location)
          on_top_const_field(child)
        else
          parent = visit(node.parent)

          bounds(node.name_loc)
          child = on_const(node.name.to_s)

          bounds(node.location)
          on_const_path_field(parent, child)
        end
      end

      # Foo::Bar += baz
      # ^^^^^^^^^^^^^^^
      def visit_constant_path_operator_write_node(node)
        target = visit_constant_path_write_node_target(node.target)
        value = visit(node.value)

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # Foo::Bar &&= baz
      # ^^^^^^^^^^^^^^^^
      def visit_constant_path_and_write_node(node)
        target = visit_constant_path_write_node_target(node.target)
        value = visit(node.value)

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # Foo::Bar ||= baz
      # ^^^^^^^^^^^^^^^^
      def visit_constant_path_or_write_node(node)
        target = visit_constant_path_write_node_target(node.target)
        value = visit(node.value)

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # Foo::Bar, = baz
      # ^^^^^^^^
      def visit_constant_path_target_node(node)
        visit_constant_path_write_node_target(node)
      end

      # def foo; end
      # ^^^^^^^^^^^^
      #
      # def self.foo; end
      # ^^^^^^^^^^^^^^^^^
      def visit_def_node(node)
        receiver = visit(node.receiver)
        operator =
          if !node.operator_loc.nil?
            bounds(node.operator_loc)
            visit_token(node.operator)
          end

        bounds(node.name_loc)
        name = visit_token(node.name_loc.slice)

        parameters =
          if node.parameters.nil?
            bounds(node.location)
            on_params(nil, nil, nil, nil, nil, nil, nil)
          else
            visit(node.parameters)
          end

        if !node.lparen_loc.nil?
          bounds(node.lparen_loc)
          parameters = on_paren(parameters)
        end

        bodystmt =
          if node.equal_loc.nil?
            visit_body_node(node.rparen_loc || node.end_keyword_loc, node.body)
          else
            body = visit(node.body.body.first)

            bounds(node.body.location)
            on_bodystmt(body, nil, nil, nil)
          end

        bounds(node.location)
        if receiver.nil?
          on_def(name, parameters, bodystmt)
        else
          on_defs(receiver, operator, name, parameters, bodystmt)
        end
      end

      # defined? a
      # ^^^^^^^^^^
      #
      # defined?(a)
      # ^^^^^^^^^^^
      def visit_defined_node(node)
        bounds(node.location)
        on_defined(visit(node.value))
      end

      # if foo then bar else baz end
      #                 ^^^^^^^^^^^^
      def visit_else_node(node)
        statements =
          if node.statements.nil?
            [nil]
          else
            body = node.statements.body
            body.unshift(nil) if void_stmt?(node.else_keyword_loc, node.statements.body[0].location, false)
            body
          end

        bounds(node.location)
        on_else(visit_statements_node_body(statements))
      end

      # "foo #{bar}"
      #      ^^^^^^
      def visit_embedded_statements_node(node)
        bounds(node.opening_loc)
        on_embexpr_beg(node.opening)

        statements =
          if node.statements.nil?
            bounds(node.location)
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.statements)
          end

        bounds(node.closing_loc)
        on_embexpr_end(node.closing)

        bounds(node.location)
        on_string_embexpr(statements)
      end

      # "foo #@bar"
      #      ^^^^^
      def visit_embedded_variable_node(node)
        bounds(node.operator_loc)
        on_embvar(node.operator)

        variable = visit(node.variable)

        bounds(node.location)
        on_string_dvar(variable)
      end

      # Visit an EnsureNode node.
      def visit_ensure_node(node)
        statements =
          if node.statements.nil?
            [nil]
          else
            body = node.statements.body
            body.unshift(nil) if void_stmt?(node.ensure_keyword_loc, body[0].location, false)
            body
          end

        statements = visit_statements_node_body(statements)

        bounds(node.location)
        on_ensure(statements)
      end

      # false
      # ^^^^^
      def visit_false_node(node)
        bounds(node.location)
        on_var_ref(on_kw("false"))
      end

      # foo => [*, bar, *]
      #        ^^^^^^^^^^^
      def visit_find_pattern_node(node)
        constant = visit(node.constant)
        left =
          if node.left.expression.nil?
            bounds(node.left.location)
            on_var_field(nil)
          else
            visit(node.left.expression)
          end

        requireds = visit_all(node.requireds) if node.requireds.any?
        right =
          if node.right.expression.nil?
            bounds(node.right.location)
            on_var_field(nil)
          else
            visit(node.right.expression)
          end

        bounds(node.location)
        on_fndptn(constant, left, requireds, right)
      end

      # if foo .. bar; end
      #    ^^^^^^^^^^
      def visit_flip_flop_node(node)
        left = visit(node.left)
        right = visit(node.right)

        bounds(node.location)
        if node.exclude_end?
          on_dot3(left, right)
        else
          on_dot2(left, right)
        end
      end

      # 1.0
      # ^^^
      def visit_float_node(node)
        visit_number_node(node) { |text| on_float(text) }
      end

      # for foo in bar do end
      # ^^^^^^^^^^^^^^^^^^^^^
      def visit_for_node(node)
        index = visit(node.index)
        collection = visit(node.collection)
        statements =
          if node.statements.nil?
            bounds(node.location)
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.statements)
          end

        bounds(node.location)
        on_for(index, collection, statements)
      end

      # def foo(...); bar(...); end
      #                   ^^^
      def visit_forwarding_arguments_node(node)
        bounds(node.location)
        on_args_forward
      end

      # def foo(...); end
      #         ^^^
      def visit_forwarding_parameter_node(node)
        bounds(node.location)
        on_args_forward
      end

      # super
      # ^^^^^
      #
      # super {}
      # ^^^^^^^^
      def visit_forwarding_super_node(node)
        if node.block.nil?
          bounds(node.location)
          on_zsuper
        else
          block = visit(node.block)

          bounds(node.location)
          on_method_add_block(on_zsuper, block)
        end
      end

      # $foo
      # ^^^^
      def visit_global_variable_read_node(node)
        bounds(node.location)
        on_var_ref(on_gvar(node.name.to_s))
      end

      # $foo = 1
      # ^^^^^^^^
      #
      # $foo, $bar = 1
      # ^^^^  ^^^^
      def visit_global_variable_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_gvar(node.name.to_s))
        value = visit_write_value(node.value)

        bounds(node.location)
        on_assign(target, value)
      end

      # $foo += bar
      # ^^^^^^^^^^^
      def visit_global_variable_operator_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_gvar(node.name.to_s))

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # $foo &&= bar
      # ^^^^^^^^^^^^
      def visit_global_variable_and_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_gvar(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # $foo ||= bar
      # ^^^^^^^^^^^^
      def visit_global_variable_or_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_gvar(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # $foo, = bar
      # ^^^^
      def visit_global_variable_target_node(node)
        bounds(node.location)
        on_var_field(on_gvar(node.name.to_s))
      end

      # {}
      # ^^
      def visit_hash_node(node)
        elements =
          if node.elements.any?
            args = visit_all(node.elements)

            bounds(node.elements.first.location)
            on_assoclist_from_args(args)
          end

        bounds(node.location)
        on_hash(elements)
      end

      # foo => {}
      #        ^^
      def visit_hash_pattern_node(node)
        constant = visit(node.constant)
        elements =
          if node.elements.any? || !node.rest.nil?
            node.elements.map do |element|
              [
                if (key = element.key).opening_loc.nil?
                  visit(key)
                else
                  bounds(key.value_loc)
                  if (value = key.value).empty?
                    on_string_content
                  else
                    on_string_add(on_string_content, on_tstring_content(value))
                  end
                end,
                visit(element.value)
              ]
            end
          end

        rest =
          case node.rest
          when AssocSplatNode
            visit(node.rest.value)
          when NoKeywordsParameterNode
            bounds(node.rest.location)
            on_var_field(visit(node.rest))
          end

        bounds(node.location)
        on_hshptn(constant, elements, rest)
      end

      # if foo then bar end
      # ^^^^^^^^^^^^^^^^^^^
      #
      # bar if foo
      # ^^^^^^^^^^
      #
      # foo ? bar : baz
      # ^^^^^^^^^^^^^^^
      def visit_if_node(node)
        if node.then_keyword == "?"
          predicate = visit(node.predicate)
          truthy = visit(node.statements.body.first)
          falsy = visit(node.subsequent.statements.body.first)

          bounds(node.location)
          on_ifop(predicate, truthy, falsy)
        elsif node.statements.nil? || (node.predicate.location.start_offset < node.statements.location.start_offset)
          predicate = visit(node.predicate)
          statements =
            if node.statements.nil?
              bounds(node.location)
              on_stmts_add(on_stmts_new, on_void_stmt)
            else
              visit(node.statements)
            end
          subsequent = visit(node.subsequent)

          bounds(node.location)
          if node.if_keyword == "if"
            on_if(predicate, statements, subsequent)
          else
            on_elsif(predicate, statements, subsequent)
          end
        else
          statements = visit(node.statements.body.first)
          predicate = visit(node.predicate)

          bounds(node.location)
          on_if_mod(predicate, statements)
        end
      end

      # 1i
      # ^^
      def visit_imaginary_node(node)
        visit_number_node(node) { |text| on_imaginary(text) }
      end

      # { foo: }
      #   ^^^^
      def visit_implicit_node(node)
      end

      # foo { |bar,| }
      #           ^
      def visit_implicit_rest_node(node)
        bounds(node.location)
        on_excessed_comma
      end

      # case foo; in bar; end
      # ^^^^^^^^^^^^^^^^^^^^^
      def visit_in_node(node)
        # This is a special case where we're not going to call on_in directly
        # because we don't have access to the subsequent. Instead, we'll return
        # the component parts and let the parent node handle it.
        pattern = visit_pattern_node(node.pattern)
        statements =
          if node.statements.nil?
            bounds(node.location)
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.statements)
          end

        [pattern, statements]
      end

      # foo[bar] += baz
      # ^^^^^^^^^^^^^^^
      def visit_index_operator_write_node(node)
        receiver = visit(node.receiver)
        arguments, _ = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.closing_loc))

        bounds(node.location)
        target = on_aref_field(receiver, arguments)

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo[bar] &&= baz
      # ^^^^^^^^^^^^^^^^
      def visit_index_and_write_node(node)
        receiver = visit(node.receiver)
        arguments, _ = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.closing_loc))

        bounds(node.location)
        target = on_aref_field(receiver, arguments)

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo[bar] ||= baz
      # ^^^^^^^^^^^^^^^^
      def visit_index_or_write_node(node)
        receiver = visit(node.receiver)
        arguments, _ = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.closing_loc))

        bounds(node.location)
        target = on_aref_field(receiver, arguments)

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo[bar], = 1
      # ^^^^^^^^
      def visit_index_target_node(node)
        receiver = visit(node.receiver)
        arguments, _ = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.closing_loc))

        bounds(node.location)
        on_aref_field(receiver, arguments)
      end

      # @foo
      # ^^^^
      def visit_instance_variable_read_node(node)
        bounds(node.location)
        on_var_ref(on_ivar(node.name.to_s))
      end

      # @foo = 1
      # ^^^^^^^^
      def visit_instance_variable_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ivar(node.name.to_s))
        value = visit_write_value(node.value)

        bounds(node.location)
        on_assign(target, value)
      end

      # @foo += bar
      # ^^^^^^^^^^^
      def visit_instance_variable_operator_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ivar(node.name.to_s))

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # @foo &&= bar
      # ^^^^^^^^^^^^
      def visit_instance_variable_and_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ivar(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # @foo ||= bar
      # ^^^^^^^^^^^^
      def visit_instance_variable_or_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ivar(node.name.to_s))

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # @foo, = bar
      # ^^^^
      def visit_instance_variable_target_node(node)
        bounds(node.location)
        on_var_field(on_ivar(node.name.to_s))
      end

      # 1
      # ^
      def visit_integer_node(node)
        visit_number_node(node) { |text| on_int(text) }
      end

      # if /foo #{bar}/ then end
      #    ^^^^^^^^^^^^
      def visit_interpolated_match_last_line_node(node)
        bounds(node.opening_loc)
        on_regexp_beg(node.opening)

        bounds(node.parts.first.location)
        parts =
          node.parts.inject(on_regexp_new) do |content, part|
            on_regexp_add(content, visit_string_content(part))
          end

        bounds(node.closing_loc)
        closing = on_regexp_end(node.closing)

        bounds(node.location)
        on_regexp_literal(parts, closing)
      end

      # /foo #{bar}/
      # ^^^^^^^^^^^^
      def visit_interpolated_regular_expression_node(node)
        bounds(node.opening_loc)
        on_regexp_beg(node.opening)

        bounds(node.parts.first.location)
        parts =
          node.parts.inject(on_regexp_new) do |content, part|
            on_regexp_add(content, visit_string_content(part))
          end

        bounds(node.closing_loc)
        closing = on_regexp_end(node.closing)

        bounds(node.location)
        on_regexp_literal(parts, closing)
      end

      # "foo #{bar}"
      # ^^^^^^^^^^^^
      def visit_interpolated_string_node(node)
        if node.opening&.start_with?("<<~")
          heredoc = visit_heredoc_string_node(node)

          bounds(node.location)
          on_string_literal(heredoc)
        elsif !node.heredoc? && node.parts.length > 1 && node.parts.any? { |part| (part.is_a?(StringNode) || part.is_a?(InterpolatedStringNode)) && !part.opening_loc.nil? }
          first, *rest = node.parts
          rest.inject(visit(first)) do |content, part|
            concat = visit(part)

            bounds(part.location)
            on_string_concat(content, concat)
          end
        else
          bounds(node.parts.first.location)
          parts =
            node.parts.inject(on_string_content) do |content, part|
              on_string_add(content, visit_string_content(part))
            end

          bounds(node.location)
          on_string_literal(parts)
        end
      end

      # :"foo #{bar}"
      # ^^^^^^^^^^^^^
      def visit_interpolated_symbol_node(node)
        bounds(node.parts.first.location)
        parts =
          node.parts.inject(on_string_content) do |content, part|
            on_string_add(content, visit_string_content(part))
          end

        bounds(node.location)
        on_dyna_symbol(parts)
      end

      # `foo #{bar}`
      # ^^^^^^^^^^^^
      def visit_interpolated_x_string_node(node)
        if node.opening.start_with?("<<~")
          heredoc = visit_heredoc_x_string_node(node)

          bounds(node.location)
          on_xstring_literal(heredoc)
        else
          bounds(node.parts.first.location)
          parts =
            node.parts.inject(on_xstring_new) do |content, part|
              on_xstring_add(content, visit_string_content(part))
            end

          bounds(node.location)
          on_xstring_literal(parts)
        end
      end

      # Visit an individual part of a string-like node.
      private def visit_string_content(part)
        if part.is_a?(StringNode)
          bounds(part.content_loc)
          on_tstring_content(part.content)
        else
          visit(part)
        end
      end

      # -> { it }
      #      ^^
      def visit_it_local_variable_read_node(node)
        bounds(node.location)
        on_vcall(on_ident(node.slice))
      end

      # -> { it }
      # ^^^^^^^^^
      def visit_it_parameters_node(node)
      end

      # foo(bar: baz)
      #     ^^^^^^^^
      def visit_keyword_hash_node(node)
        elements = visit_all(node.elements)

        bounds(node.location)
        on_bare_assoc_hash(elements)
      end

      # def foo(**bar); end
      #         ^^^^^
      #
      # def foo(**); end
      #         ^^
      def visit_keyword_rest_parameter_node(node)
        if node.name_loc.nil?
          bounds(node.location)
          on_kwrest_param(nil)
        else
          bounds(node.name_loc)
          name = on_ident(node.name.to_s)

          bounds(node.location)
          on_kwrest_param(name)
        end
      end

      # -> {}
      def visit_lambda_node(node)
        bounds(node.operator_loc)
        on_tlambda(node.operator)

        parameters =
          if node.parameters.is_a?(BlockParametersNode)
            # Ripper does not track block-locals within lambdas, so we skip
            # directly to the parameters here.
            params =
              if node.parameters.parameters.nil?
                bounds(node.location)
                on_params(nil, nil, nil, nil, nil, nil, nil)
              else
                visit(node.parameters.parameters)
              end

            if node.parameters.opening_loc.nil?
              params
            else
              bounds(node.parameters.opening_loc)
              on_paren(params)
            end
          else
            bounds(node.location)
            on_params(nil, nil, nil, nil, nil, nil, nil)
          end

        braces = node.opening == "{"
        if braces
          bounds(node.opening_loc)
          on_tlambeg(node.opening)
        end

        body =
          case node.body
          when nil
            bounds(node.location)
            stmts = on_stmts_add(on_stmts_new, on_void_stmt)

            bounds(node.location)
            braces ? stmts : on_bodystmt(stmts, nil, nil, nil)
          when StatementsNode
            stmts = node.body.body
            stmts.unshift(nil) if void_stmt?(node.parameters&.location || node.opening_loc, node.body.location, false)
            stmts = visit_statements_node_body(stmts)

            bounds(node.body.location)
            braces ? stmts : on_bodystmt(stmts, nil, nil, nil)
          when BeginNode
            visit_body_node(node.opening_loc, node.body)
          else
            raise
          end

        bounds(node.location)
        on_lambda(parameters, body)
      end

      # foo
      # ^^^
      def visit_local_variable_read_node(node)
        bounds(node.location)
        on_var_ref(on_ident(node.slice))
      end

      # foo = 1
      # ^^^^^^^
      def visit_local_variable_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ident(node.name_loc.slice))
        value = visit_write_value(node.value)

        bounds(node.location)
        on_assign(target, value)
      end

      # foo += bar
      # ^^^^^^^^^^
      def visit_local_variable_operator_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ident(node.name_loc.slice))

        bounds(node.binary_operator_loc)
        operator = on_op("#{node.binary_operator}=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo &&= bar
      # ^^^^^^^^^^^
      def visit_local_variable_and_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ident(node.name_loc.slice))

        bounds(node.operator_loc)
        operator = on_op("&&=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo ||= bar
      # ^^^^^^^^^^^
      def visit_local_variable_or_write_node(node)
        bounds(node.name_loc)
        target = on_var_field(on_ident(node.name_loc.slice))

        bounds(node.operator_loc)
        operator = on_op("||=")
        value = visit_write_value(node.value)

        bounds(node.location)
        on_opassign(target, operator, value)
      end

      # foo, = bar
      # ^^^
      def visit_local_variable_target_node(node)
        bounds(node.location)
        on_var_field(on_ident(node.name.to_s))
      end

      # if /foo/ then end
      #    ^^^^^
      def visit_match_last_line_node(node)
        bounds(node.opening_loc)
        on_regexp_beg(node.opening)

        bounds(node.content_loc)
        tstring_content = on_tstring_content(node.content)

        bounds(node.closing_loc)
        closing = on_regexp_end(node.closing)

        on_regexp_literal(on_regexp_add(on_regexp_new, tstring_content), closing)
      end

      # foo in bar
      # ^^^^^^^^^^
      def visit_match_predicate_node(node)
        value = visit(node.value)
        pattern = on_in(visit_pattern_node(node.pattern), nil, nil)

        on_case(value, pattern)
      end

      # foo => bar
      # ^^^^^^^^^^
      def visit_match_required_node(node)
        value = visit(node.value)
        pattern = on_in(visit_pattern_node(node.pattern), nil, nil)

        on_case(value, pattern)
      end

      # /(?<foo>foo)/ =~ bar
      # ^^^^^^^^^^^^^^^^^^^^
      def visit_match_write_node(node)
        visit(node.call)
      end

      # A node that is missing from the syntax tree. This is only used in the
      # case of a syntax error.
      def visit_missing_node(node)
        raise "Cannot visit missing nodes directly."
      end

      # module Foo; end
      # ^^^^^^^^^^^^^^^
      def visit_module_node(node)
        constant_path =
          if node.constant_path.is_a?(ConstantReadNode)
            bounds(node.constant_path.location)
            on_const_ref(on_const(node.constant_path.name.to_s))
          else
            visit(node.constant_path)
          end

        bodystmt = visit_body_node(node.constant_path.location, node.body, true)

        bounds(node.location)
        on_module(constant_path, bodystmt)
      end

      # (foo, bar), bar = qux
      # ^^^^^^^^^^
      def visit_multi_target_node(node)
        bounds(node.location)
        targets = visit_multi_target_node_targets(node.lefts, node.rest, node.rights, true)

        if node.lparen_loc.nil?
          targets
        else
          bounds(node.lparen_loc)
          on_mlhs_paren(targets)
        end
      end

      # Visit the targets of a multi-target node.
      private def visit_multi_target_node_targets(lefts, rest, rights, skippable)
        if skippable && lefts.length == 1 && lefts.first.is_a?(MultiTargetNode) && rest.nil? && rights.empty?
          return visit(lefts.first)
        end

        mlhs = on_mlhs_new

        lefts.each do |left|
          bounds(left.location)
          mlhs = on_mlhs_add(mlhs, visit(left))
        end

        case rest
        when nil
          # do nothing
        when ImplicitRestNode
          # these do not get put into the generated tree
          bounds(rest.location)
          on_excessed_comma
        else
          bounds(rest.location)
          mlhs = on_mlhs_add_star(mlhs, visit(rest))
        end

        if rights.any?
          bounds(rights.first.location)
          post = on_mlhs_new

          rights.each do |right|
            bounds(right.location)
            post = on_mlhs_add(post, visit(right))
          end

          mlhs = on_mlhs_add_post(mlhs, post)
        end

        mlhs
      end

      # foo, bar = baz
      # ^^^^^^^^^^^^^^
      def visit_multi_write_node(node)
        bounds(node.location)
        targets = visit_multi_target_node_targets(node.lefts, node.rest, node.rights, true)

        unless node.lparen_loc.nil?
          bounds(node.lparen_loc)
          targets = on_mlhs_paren(targets)
        end

        value = visit_write_value(node.value)

        bounds(node.location)
        on_massign(targets, value)
      end

      # next
      # ^^^^
      #
      # next foo
      # ^^^^^^^^
      def visit_next_node(node)
        if node.arguments.nil?
          bounds(node.location)
          on_next(on_args_new)
        else
          arguments = visit(node.arguments)

          bounds(node.location)
          on_next(arguments)
        end
      end

      # nil
      # ^^^
      def visit_nil_node(node)
        bounds(node.location)
        on_var_ref(on_kw("nil"))
      end

      # def foo(**nil); end
      #         ^^^^^
      def visit_no_keywords_parameter_node(node)
        bounds(node.location)
        on_nokw_param(nil)

        :nil
      end

      # -> { _1 + _2 }
      # ^^^^^^^^^^^^^^
      def visit_numbered_parameters_node(node)
      end

      # $1
      # ^^
      def visit_numbered_reference_read_node(node)
        bounds(node.location)
        on_backref(node.slice)
      end

      # def foo(bar: baz); end
      #         ^^^^^^^^
      def visit_optional_keyword_parameter_node(node)
        bounds(node.name_loc)
        name = on_label("#{node.name}:")
        value = visit(node.value)

        [name, value]
      end

      # def foo(bar = 1); end
      #         ^^^^^^^
      def visit_optional_parameter_node(node)
        bounds(node.name_loc)
        name = visit_token(node.name.to_s)
        value = visit(node.value)

        [name, value]
      end

      # a or b
      # ^^^^^^
      def visit_or_node(node)
        left = visit(node.left)
        right = visit(node.right)

        bounds(node.location)
        on_binary(left, node.operator.to_sym, right)
      end

      # def foo(bar, *baz); end
      #         ^^^^^^^^^
      def visit_parameters_node(node)
        requireds = node.requireds.map { |required| required.is_a?(MultiTargetNode) ? visit_destructured_parameter_node(required) : visit(required) } if node.requireds.any?
        optionals = visit_all(node.optionals) if node.optionals.any?
        rest = visit(node.rest)
        posts = node.posts.map { |post| post.is_a?(MultiTargetNode) ? visit_destructured_parameter_node(post) : visit(post) } if node.posts.any?
        keywords = visit_all(node.keywords) if node.keywords.any?
        keyword_rest = visit(node.keyword_rest)
        block = visit(node.block)

        bounds(node.location)
        on_params(requireds, optionals, rest, posts, keywords, keyword_rest, block)
      end

      # Visit a destructured positional parameter node.
      private def visit_destructured_parameter_node(node)
        bounds(node.location)
        targets = visit_multi_target_node_targets(node.lefts, node.rest, node.rights, false)

        bounds(node.lparen_loc)
        on_mlhs_paren(targets)
      end

      # ()
      # ^^
      #
      # (1)
      # ^^^
      def visit_parentheses_node(node)
        body =
          if node.body.nil?
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.body)
          end

        bounds(node.location)
        on_paren(body)
      end

      # foo => ^(bar)
      #        ^^^^^^
      def visit_pinned_expression_node(node)
        expression = visit(node.expression)

        bounds(node.location)
        on_begin(expression)
      end

      # foo = 1 and bar => ^foo
      #                    ^^^^
      def visit_pinned_variable_node(node)
        visit(node.variable)
      end

      # END {}
      # ^^^^^^
      def visit_post_execution_node(node)
        statements =
          if node.statements.nil?
            bounds(node.location)
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.statements)
          end

        bounds(node.location)
        on_END(statements)
      end

      # BEGIN {}
      # ^^^^^^^^
      def visit_pre_execution_node(node)
        statements =
          if node.statements.nil?
            bounds(node.location)
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.statements)
          end

        bounds(node.location)
        on_BEGIN(statements)
      end

      # The top-level program node.
      def visit_program_node(node)
        body = node.statements.body
        body << nil if body.empty?
        statements = visit_statements_node_body(body)

        bounds(node.location)
        on_program(statements)
      end

      # 0..5
      # ^^^^
      def visit_range_node(node)
        left = visit(node.left)
        right = visit(node.right)

        bounds(node.location)
        if node.exclude_end?
          on_dot3(left, right)
        else
          on_dot2(left, right)
        end
      end

      # 1r
      # ^^
      def visit_rational_node(node)
        visit_number_node(node) { |text| on_rational(text) }
      end

      # redo
      # ^^^^
      def visit_redo_node(node)
        bounds(node.location)
        on_redo
      end

      # /foo/
      # ^^^^^
      def visit_regular_expression_node(node)
        bounds(node.opening_loc)
        on_regexp_beg(node.opening)

        if node.content.empty?
          bounds(node.closing_loc)
          closing = on_regexp_end(node.closing)

          on_regexp_literal(on_regexp_new, closing)
        else
          bounds(node.content_loc)
          tstring_content = on_tstring_content(node.content)

          bounds(node.closing_loc)
          closing = on_regexp_end(node.closing)

          on_regexp_literal(on_regexp_add(on_regexp_new, tstring_content), closing)
        end
      end

      # def foo(bar:); end
      #         ^^^^
      def visit_required_keyword_parameter_node(node)
        bounds(node.name_loc)
        [on_label("#{node.name}:"), false]
      end

      # def foo(bar); end
      #         ^^^
      def visit_required_parameter_node(node)
        bounds(node.location)
        on_ident(node.name.to_s)
      end

      # foo rescue bar
      # ^^^^^^^^^^^^^^
      def visit_rescue_modifier_node(node)
        expression = visit_write_value(node.expression)
        rescue_expression = visit(node.rescue_expression)

        bounds(node.location)
        on_rescue_mod(expression, rescue_expression)
      end

      # begin; rescue; end
      #        ^^^^^^^
      def visit_rescue_node(node)
        exceptions =
          case node.exceptions.length
          when 0
            nil
          when 1
            if (exception = node.exceptions.first).is_a?(SplatNode)
              bounds(exception.location)
              on_mrhs_add_star(on_mrhs_new, visit(exception))
            else
              [visit(node.exceptions.first)]
            end
          else
            bounds(node.location)
            length = node.exceptions.length

            node.exceptions.each_with_index.inject(on_args_new) do |mrhs, (exception, index)|
              arg = visit(exception)

              bounds(exception.location)
              mrhs = on_mrhs_new_from_args(mrhs) if index == length - 1

              if exception.is_a?(SplatNode)
                if index == length - 1
                  on_mrhs_add_star(mrhs, arg)
                else
                  on_args_add_star(mrhs, arg)
                end
              else
                if index == length - 1
                  on_mrhs_add(mrhs, arg)
                else
                  on_args_add(mrhs, arg)
                end
              end
            end
          end

        reference = visit(node.reference)
        statements =
          if node.statements.nil?
            bounds(node.location)
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.statements)
          end

        subsequent = visit(node.subsequent)

        bounds(node.location)
        on_rescue(exceptions, reference, statements, subsequent)
      end

      # def foo(*bar); end
      #         ^^^^
      #
      # def foo(*); end
      #         ^
      def visit_rest_parameter_node(node)
        if node.name_loc.nil?
          bounds(node.location)
          on_rest_param(nil)
        else
          bounds(node.name_loc)
          on_rest_param(visit_token(node.name.to_s))
        end
      end

      # retry
      # ^^^^^
      def visit_retry_node(node)
        bounds(node.location)
        on_retry
      end

      # return
      # ^^^^^^
      #
      # return 1
      # ^^^^^^^^
      def visit_return_node(node)
        if node.arguments.nil?
          bounds(node.location)
          on_return0
        else
          arguments = visit(node.arguments)

          bounds(node.location)
          on_return(arguments)
        end
      end

      # self
      # ^^^^
      def visit_self_node(node)
        bounds(node.location)
        on_var_ref(on_kw("self"))
      end

      # A shareable constant.
      def visit_shareable_constant_node(node)
        visit(node.write)
      end

      # class << self; end
      # ^^^^^^^^^^^^^^^^^^
      def visit_singleton_class_node(node)
        expression = visit(node.expression)
        bodystmt = visit_body_node(node.body&.location || node.end_keyword_loc, node.body)

        bounds(node.location)
        on_sclass(expression, bodystmt)
      end

      # __ENCODING__
      # ^^^^^^^^^^^^
      def visit_source_encoding_node(node)
        bounds(node.location)
        on_var_ref(on_kw("__ENCODING__"))
      end

      # __FILE__
      # ^^^^^^^^
      def visit_source_file_node(node)
        bounds(node.location)
        on_var_ref(on_kw("__FILE__"))
      end

      # __LINE__
      # ^^^^^^^^
      def visit_source_line_node(node)
        bounds(node.location)
        on_var_ref(on_kw("__LINE__"))
      end

      # foo(*bar)
      #     ^^^^
      #
      # def foo((bar, *baz)); end
      #               ^^^^
      #
      # def foo(*); bar(*); end
      #                 ^
      def visit_splat_node(node)
        visit(node.expression)
      end

      # A list of statements.
      def visit_statements_node(node)
        bounds(node.location)
        visit_statements_node_body(node.body)
      end

      # Visit the list of statements of a statements node. We support nil
      # statements in the list. This would normally not be allowed by the
      # structure of the prism parse tree, but we manually add them here so that
      # we can mirror Ripper's void stmt.
      private def visit_statements_node_body(body)
        body.inject(on_stmts_new) do |stmts, stmt|
          on_stmts_add(stmts, stmt.nil? ? on_void_stmt : visit(stmt))
        end
      end

      # "foo"
      # ^^^^^
      def visit_string_node(node)
        if (content = node.content).empty?
          bounds(node.location)
          on_string_literal(on_string_content)
        elsif (opening = node.opening) == "?"
          bounds(node.location)
          on_CHAR("?#{node.content}")
        elsif opening.start_with?("<<~")
          heredoc = visit_heredoc_string_node(node.to_interpolated)

          bounds(node.location)
          on_string_literal(heredoc)
        else
          bounds(node.content_loc)
          tstring_content = on_tstring_content(content)

          bounds(node.location)
          on_string_literal(on_string_add(on_string_content, tstring_content))
        end
      end

      # Ripper gives back the escaped string content but strips out the common
      # leading whitespace. Prism gives back the unescaped string content and
      # a location for the escaped string content. Unfortunately these don't
      # work well together, so here we need to re-derive the common leading
      # whitespace.
      private def visit_heredoc_node_whitespace(parts)
        common_whitespace = nil
        dedent_next = true

        parts.each do |part|
          if part.is_a?(StringNode)
            if dedent_next && !(content = part.content).chomp.empty?
              common_whitespace = [
                common_whitespace || Float::INFINITY,
                content[/\A\s*/].each_char.inject(0) do |part_whitespace, char|
                  char == "\t" ? ((part_whitespace / 8 + 1) * 8) : (part_whitespace + 1)
                end
              ].min
            end

            dedent_next = true
          else
            dedent_next = false
          end
        end

        common_whitespace || 0
      end

      # Visit a string that is expressed using a <<~ heredoc.
      private def visit_heredoc_node(parts, base)
        common_whitespace = visit_heredoc_node_whitespace(parts)

        if common_whitespace == 0
          bounds(parts.first.location)

          string = []
          result = base

          parts.each do |part|
            if part.is_a?(StringNode)
              if string.empty?
                string = [part]
              else
                string << part
              end
            else
              unless string.empty?
                bounds(string[0].location)
                result = yield result, on_tstring_content(string.map(&:content).join)
                string = []
              end

              result = yield result, visit(part)
            end
          end

          unless string.empty?
            bounds(string[0].location)
            result = yield result, on_tstring_content(string.map(&:content).join)
          end

          result
        else
          bounds(parts.first.location)
          result =
            parts.inject(base) do |string_content, part|
              yield string_content, visit_string_content(part)
            end

          bounds(parts.first.location)
          on_heredoc_dedent(result, common_whitespace)
        end
      end

      # Visit a heredoc node that is representing a string.
      private def visit_heredoc_string_node(node)
        bounds(node.opening_loc)
        on_heredoc_beg(node.opening)

        bounds(node.location)
        result =
          visit_heredoc_node(node.parts, on_string_content) do |parts, part|
            on_string_add(parts, part)
          end

        bounds(node.closing_loc)
        on_heredoc_end(node.closing)

        result
      end

      # Visit a heredoc node that is representing an xstring.
      private def visit_heredoc_x_string_node(node)
        bounds(node.opening_loc)
        on_heredoc_beg(node.opening)

        bounds(node.location)
        result =
          visit_heredoc_node(node.parts, on_xstring_new) do |parts, part|
            on_xstring_add(parts, part)
          end

        bounds(node.closing_loc)
        on_heredoc_end(node.closing)

        result
      end

      # super(foo)
      # ^^^^^^^^^^
      def visit_super_node(node)
        arguments, block = visit_call_node_arguments(node.arguments, node.block, trailing_comma?(node.arguments&.location || node.location, node.rparen_loc || node.location))

        if !node.lparen_loc.nil?
          bounds(node.lparen_loc)
          arguments = on_arg_paren(arguments)
        end

        bounds(node.location)
        call = on_super(arguments)

        if block.nil?
          call
        else
          bounds(node.block.location)
          on_method_add_block(call, block)
        end
      end

      # :foo
      # ^^^^
      def visit_symbol_node(node)
        if (opening = node.opening)&.match?(/^%s|['"]:?$/)
          bounds(node.value_loc)
          content = on_string_content

          if !(value = node.value).empty?
            content = on_string_add(content, on_tstring_content(value))
          end

          on_dyna_symbol(content)
        elsif (closing = node.closing) == ":"
          bounds(node.location)
          on_label("#{node.value}:")
        elsif opening.nil? && node.closing_loc.nil?
          bounds(node.value_loc)
          on_symbol_literal(visit_token(node.value))
        else
          bounds(node.value_loc)
          on_symbol_literal(on_symbol(visit_token(node.value)))
        end
      end

      # true
      # ^^^^
      def visit_true_node(node)
        bounds(node.location)
        on_var_ref(on_kw("true"))
      end

      # undef foo
      # ^^^^^^^^^
      def visit_undef_node(node)
        names = visit_all(node.names)

        bounds(node.location)
        on_undef(names)
      end

      # unless foo; bar end
      # ^^^^^^^^^^^^^^^^^^^
      #
      # bar unless foo
      # ^^^^^^^^^^^^^^
      def visit_unless_node(node)
        if node.statements.nil? || (node.predicate.location.start_offset < node.statements.location.start_offset)
          predicate = visit(node.predicate)
          statements =
            if node.statements.nil?
              bounds(node.location)
              on_stmts_add(on_stmts_new, on_void_stmt)
            else
              visit(node.statements)
            end
          else_clause = visit(node.else_clause)

          bounds(node.location)
          on_unless(predicate, statements, else_clause)
        else
          statements = visit(node.statements.body.first)
          predicate = visit(node.predicate)

          bounds(node.location)
          on_unless_mod(predicate, statements)
        end
      end

      # until foo; bar end
      # ^^^^^^^^^^^^^^^^^
      #
      # bar until foo
      # ^^^^^^^^^^^^^
      def visit_until_node(node)
        if node.statements.nil? || (node.predicate.location.start_offset < node.statements.location.start_offset)
          predicate = visit(node.predicate)
          statements =
            if node.statements.nil?
              bounds(node.location)
              on_stmts_add(on_stmts_new, on_void_stmt)
            else
              visit(node.statements)
            end

          bounds(node.location)
          on_until(predicate, statements)
        else
          statements = visit(node.statements.body.first)
          predicate = visit(node.predicate)

          bounds(node.location)
          on_until_mod(predicate, statements)
        end
      end

      # case foo; when bar; end
      #           ^^^^^^^^^^^^^
      def visit_when_node(node)
        # This is a special case where we're not going to call on_when directly
        # because we don't have access to the subsequent. Instead, we'll return
        # the component parts and let the parent node handle it.
        conditions = visit_arguments(node.conditions)
        statements =
          if node.statements.nil?
            bounds(node.location)
            on_stmts_add(on_stmts_new, on_void_stmt)
          else
            visit(node.statements)
          end

        [conditions, statements]
      end

      # while foo; bar end
      # ^^^^^^^^^^^^^^^^^^
      #
      # bar while foo
      # ^^^^^^^^^^^^^
      def visit_while_node(node)
        if node.statements.nil? || (node.predicate.location.start_offset < node.statements.location.start_offset)
          predicate = visit(node.predicate)
          statements =
            if node.statements.nil?
              bounds(node.location)
              on_stmts_add(on_stmts_new, on_void_stmt)
            else
              visit(node.statements)
            end

          bounds(node.location)
          on_while(predicate, statements)
        else
          statements = visit(node.statements.body.first)
          predicate = visit(node.predicate)

          bounds(node.location)
          on_while_mod(predicate, statements)
        end
      end

      # `foo`
      # ^^^^^
      def visit_x_string_node(node)
        if node.unescaped.empty?
          bounds(node.location)
          on_xstring_literal(on_xstring_new)
        elsif node.opening.start_with?("<<~")
          heredoc = visit_heredoc_x_string_node(node.to_interpolated)

          bounds(node.location)
          on_xstring_literal(heredoc)
        else
          bounds(node.content_loc)
          content = on_tstring_content(node.content)

          bounds(node.location)
          on_xstring_literal(on_xstring_add(on_xstring_new, content))
        end
      end

      # yield
      # ^^^^^
      #
      # yield 1
      # ^^^^^^^
      def visit_yield_node(node)
        if node.arguments.nil? && node.lparen_loc.nil?
          bounds(node.location)
          on_yield0
        else
          arguments =
            if node.arguments.nil?
              bounds(node.location)
              on_args_new
            else
              visit(node.arguments)
            end

          unless node.lparen_loc.nil?
            bounds(node.lparen_loc)
            arguments = on_paren(arguments)
          end

          bounds(node.location)
          on_yield(arguments)
        end
      end

      private

      # Lazily initialize the parse result.
      def result
        @result ||= Prism.parse(source, partial_script: true)
      end

      ##########################################################################
      # Helpers
      ##########################################################################

      # Returns true if there is a comma between the two locations.
      def trailing_comma?(left, right)
        source.byteslice(left.end_offset...right.start_offset).include?(",")
      end

      # Returns true if there is a semicolon between the two locations.
      def void_stmt?(left, right, allow_newline)
        pattern = allow_newline ? /[;\n]/ : /;/
        source.byteslice(left.end_offset...right.start_offset).match?(pattern)
      end

      # Visit the string content of a particular node. This method is used to
      # split into the various token types.
      def visit_token(token, allow_keywords = true)
        case token
        when "."
          on_period(token)
        when "`"
          on_backtick(token)
        when *(allow_keywords ? KEYWORDS : [])
          on_kw(token)
        when /^_/
          on_ident(token)
        when /^[[:upper:]]\w*$/
          on_const(token)
        when /^@@/
          on_cvar(token)
        when /^@/
          on_ivar(token)
        when /^\$/
          on_gvar(token)
        when /^[[:punct:]]/
          on_op(token)
        else
          on_ident(token)
        end
      end

      # Visit a node that represents a number. We need to explicitly handle the
      # unary - operator.
      def visit_number_node(node)
        slice = node.slice
        location = node.location

        if slice[0] == "-"
          bounds(location.copy(start_offset: location.start_offset + 1))
          value = yield slice[1..-1]

          bounds(node.location)
          on_unary(:-@, value)
        else
          bounds(location)
          yield slice
        end
      end

      # Visit a node that represents a write value. This is used to handle the
      # special case of an implicit array that is generated without brackets.
      def visit_write_value(node)
        if node.is_a?(ArrayNode) && node.opening_loc.nil?
          elements = node.elements
          length = elements.length

          bounds(elements.first.location)
          elements.each_with_index.inject((elements.first.is_a?(SplatNode) && length == 1) ? on_mrhs_new : on_args_new) do |args, (element, index)|
            arg = visit(element)
            bounds(element.location)

            if index == length - 1
              if element.is_a?(SplatNode)
                mrhs = index == 0 ? args : on_mrhs_new_from_args(args)
                on_mrhs_add_star(mrhs, arg)
              else
                on_mrhs_add(on_mrhs_new_from_args(args), arg)
              end
            else
              case element
              when BlockArgumentNode
                on_args_add_block(args, arg)
              when SplatNode
                on_args_add_star(args, arg)
              else
                on_args_add(args, arg)
              end
            end
          end
        else
          visit(node)
        end
      end

      # This method is responsible for updating lineno and column information
      # to reflect the current node.
      #
      # This method could be drastically improved with some caching on the start
      # of every line, but for now it's good enough.
      def bounds(location)
        @lineno = location.start_line
        @column = location.start_column
      end

      ##########################################################################
      # Ripper interface
      ##########################################################################

      # :stopdoc:
      def _dispatch_0; end
      def _dispatch_1(_); end
      def _dispatch_2(_, _); end
      def _dispatch_3(_, _, _); end
      def _dispatch_4(_, _, _, _); end
      def _dispatch_5(_, _, _, _, _); end
      def _dispatch_7(_, _, _, _, _, _, _); end
      # :startdoc:

      #
      # Parser Events
      #

      PARSER_EVENT_TABLE.each do |id, arity|
        alias_method "on_#{id}", "_dispatch_#{arity}"
      end

      # This method is called when weak warning is produced by the parser.
      # +fmt+ and +args+ is printf style.
      def warn(fmt, *args)
      end

      # This method is called when strong warning is produced by the parser.
      # +fmt+ and +args+ is printf style.
      def warning(fmt, *args)
      end

      # This method is called when the parser found syntax error.
      def compile_error(msg)
      end

      #
      # Scanner Events
      #

      SCANNER_EVENTS.each do |id|
        alias_method "on_#{id}", :_dispatch_1
      end

      # This method is provided by the Ripper C extension. It is called when a
      # string needs to be dedented because of a tilde heredoc. It is expected
      # that it will modify the string in place and return the number of bytes
      # that were removed.
      def dedent_string(string, width)
        whitespace = 0
        cursor = 0

        while cursor < string.length && string[cursor].match?(/\s/) && whitespace < width
          if string[cursor] == "\t"
            whitespace = ((whitespace / 8 + 1) * 8)
            break if whitespace > width
          else
            whitespace += 1
          end

          cursor += 1
        end

        string.replace(string[cursor..])
        cursor
      end
    end
  end
end
PK*J[��v��(share/ruby/prism/translation/parser34.rbnu�[���# frozen_string_literal: true

module Prism
  module Translation
    # This class is the entry-point for Ruby 3.4 of `Prism::Translation::Parser`.
    class Parser34 < Parser
      def version # :nodoc:
        34
      end
    end
  end
end
PK*J[�(��+share/ruby/prism/translation/ruby_parser.rbnu�[���# frozen_string_literal: true

begin
  require "ruby_parser"
rescue LoadError
  warn(%q{Error: Unable to load ruby_parser. Add `gem "ruby_parser"` to your Gemfile.})
  exit(1)
end

module Prism
  module Translation
    # This module is the entry-point for converting a prism syntax tree into the
    # seattlerb/ruby_parser gem's syntax tree.
    class RubyParser
      # A prism visitor that builds Sexp objects.
      class Compiler < ::Prism::Compiler
        # This is the name of the file that we are compiling. We set it on every
        # Sexp object that is generated, and also use it to compile __FILE__
        # nodes.
        attr_reader :file

        # Class variables will change their type based on if they are inside of
        # a method definition or not, so we need to track that state.
        attr_reader :in_def

        # Some nodes will change their representation if they are inside of a
        # pattern, so we need to track that state.
        attr_reader :in_pattern

        # Initialize a new compiler with the given file name.
        def initialize(file, in_def: false, in_pattern: false)
          @file = file
          @in_def = in_def
          @in_pattern = in_pattern
        end

        # alias foo bar
        # ^^^^^^^^^^^^^
        def visit_alias_method_node(node)
          s(node, :alias, visit(node.new_name), visit(node.old_name))
        end

        # alias $foo $bar
        # ^^^^^^^^^^^^^^^
        def visit_alias_global_variable_node(node)
          s(node, :valias, node.new_name.name, node.old_name.name)
        end

        # foo => bar | baz
        #        ^^^^^^^^^
        def visit_alternation_pattern_node(node)
          s(node, :or, visit(node.left), visit(node.right))
        end

        # a and b
        # ^^^^^^^
        def visit_and_node(node)
          left = visit(node.left)

          if left[0] == :and
            # ruby_parser has the and keyword as right-associative as opposed to
            # prism which has it as left-associative. We reverse that
            # associativity here.
            nest = left
            nest = nest[2] while nest[2][0] == :and
            nest[2] = s(node, :and, nest[2], visit(node.right))
            left
          else
            s(node, :and, left, visit(node.right))
          end
        end

        # []
        # ^^
        def visit_array_node(node)
          if in_pattern
            s(node, :array_pat, nil).concat(visit_all(node.elements))
          else
            s(node, :array).concat(visit_all(node.elements))
          end
        end

        # foo => [bar]
        #        ^^^^^
        def visit_array_pattern_node(node)
          if node.constant.nil? && node.requireds.empty? && node.rest.nil? && node.posts.empty?
            s(node, :array_pat)
          else
            result = s(node, :array_pat, visit_pattern_constant(node.constant)).concat(visit_all(node.requireds))

            case node.rest
            when SplatNode
              result << :"*#{node.rest.expression&.name}"
            when ImplicitRestNode
              result << :*

              # This doesn't make any sense at all, but since we're trying to
              # replicate the behavior directly, we'll copy it.
              result.line(666)
            end

            result.concat(visit_all(node.posts))
          end
        end

        # foo(bar)
        #     ^^^
        def visit_arguments_node(node)
          raise "Cannot visit arguments directly"
        end

        # { a: 1 }
        #   ^^^^
        def visit_assoc_node(node)
          [visit(node.key), visit(node.value)]
        end

        # def foo(**); bar(**); end
        #                  ^^
        #
        # { **foo }
        #   ^^^^^
        def visit_assoc_splat_node(node)
          if node.value.nil?
            [s(node, :kwsplat)]
          else
            [s(node, :kwsplat, visit(node.value))]
          end
        end

        # $+
        # ^^
        def visit_back_reference_read_node(node)
          s(node, :back_ref, node.name.name.delete_prefix("$").to_sym)
        end

        # begin end
        # ^^^^^^^^^
        def visit_begin_node(node)
          result = node.statements.nil? ? s(node, :nil) : visit(node.statements)

          if !node.rescue_clause.nil?
            if !node.statements.nil?
              result = s(node.statements, :rescue, result, visit(node.rescue_clause))
            else
              result = s(node.rescue_clause, :rescue, visit(node.rescue_clause))
            end

            current = node.rescue_clause
            until (current = current.subsequent).nil?
              result << visit(current)
            end
          end

          if !node.else_clause&.statements.nil?
            result << visit(node.else_clause)
          end

          if !node.ensure_clause.nil?
            if !node.statements.nil? || !node.rescue_clause.nil? || !node.else_clause.nil?
              result = s(node.statements || node.rescue_clause || node.else_clause || node.ensure_clause, :ensure, result, visit(node.ensure_clause))
            else
              result = s(node.ensure_clause, :ensure, visit(node.ensure_clause))
            end
          end

          result
        end

        # foo(&bar)
        #     ^^^^
        def visit_block_argument_node(node)
          s(node, :block_pass).tap do |result|
            result << visit(node.expression) unless node.expression.nil?
          end
        end

        # foo { |; bar| }
        #          ^^^
        def visit_block_local_variable_node(node)
          node.name
        end

        # A block on a keyword or method call.
        def visit_block_node(node)
          s(node, :block_pass, visit(node.expression))
        end

        # def foo(&bar); end
        #         ^^^^
        def visit_block_parameter_node(node)
          :"&#{node.name}"
        end

        # A block's parameters.
        def visit_block_parameters_node(node)
          # If this block parameters has no parameters and is using pipes, then
          # it inherits its location from its shadow locals, even if they're not
          # on the same lines as the pipes.
          shadow_loc = true

          result =
            if node.parameters.nil?
              s(node, :args)
            else
              shadow_loc = false
              visit(node.parameters)
            end

          if node.opening == "("
            result.line = node.opening_loc.start_line
            result.line_max = node.closing_loc.end_line
            shadow_loc = false
          end

          if node.locals.any?
            shadow = s(node, :shadow).concat(visit_all(node.locals))
            shadow.line = node.locals.first.location.start_line
            shadow.line_max = node.locals.last.location.end_line
            result << shadow

            if shadow_loc
              result.line = shadow.line
              result.line_max = shadow.line_max
            end
          end

          result
        end

        # break
        # ^^^^^
        #
        # break foo
        # ^^^^^^^^^
        def visit_break_node(node)
          if node.arguments.nil?
            s(node, :break)
          elsif node.arguments.arguments.length == 1
            s(node, :break, visit(node.arguments.arguments.first))
          else
            s(node, :break, s(node.arguments, :array).concat(visit_all(node.arguments.arguments)))
          end
        end

        # foo
        # ^^^
        #
        # foo.bar
        # ^^^^^^^
        #
        # foo.bar() {}
        # ^^^^^^^^^^^^
        def visit_call_node(node)
          case node.name
          when :!~
            return s(node, :not, visit(node.copy(name: :"=~")))
          when :=~
            if node.arguments&.arguments&.length == 1 && node.block.nil?
              case node.receiver
              when StringNode
                return s(node, :match3, visit(node.arguments.arguments.first), visit(node.receiver))
              when RegularExpressionNode, InterpolatedRegularExpressionNode
                return s(node, :match2, visit(node.receiver), visit(node.arguments.arguments.first))
              end

              case node.arguments.arguments.first
              when RegularExpressionNode, InterpolatedRegularExpressionNode
                return s(node, :match3, visit(node.arguments.arguments.first), visit(node.receiver))
              end
            end
          end

          type = node.attribute_write? ? :attrasgn : :call
          type = :"safe_#{type}" if node.safe_navigation?

          arguments = node.arguments&.arguments || []
          write_value = arguments.pop if type == :attrasgn
          block = node.block

          if block.is_a?(BlockArgumentNode)
            arguments << block
            block = nil
          end

          result = s(node, type, visit(node.receiver), node.name).concat(visit_all(arguments))
          result << visit_write_value(write_value) unless write_value.nil?

          visit_block(node, result, block)
        end

        # foo.bar += baz
        # ^^^^^^^^^^^^^^^
        def visit_call_operator_write_node(node)
          if op_asgn?(node)
            s(node, op_asgn_type(node, :op_asgn), visit(node.receiver), visit_write_value(node.value), node.read_name, node.binary_operator)
          else
            s(node, op_asgn_type(node, :op_asgn2), visit(node.receiver), node.write_name, node.binary_operator, visit_write_value(node.value))
          end
        end

        # foo.bar &&= baz
        # ^^^^^^^^^^^^^^^
        def visit_call_and_write_node(node)
          if op_asgn?(node)
            s(node, op_asgn_type(node, :op_asgn), visit(node.receiver), visit_write_value(node.value), node.read_name, :"&&")
          else
            s(node, op_asgn_type(node, :op_asgn2), visit(node.receiver), node.write_name, :"&&", visit_write_value(node.value))
          end
        end

        # foo.bar ||= baz
        # ^^^^^^^^^^^^^^^
        def visit_call_or_write_node(node)
          if op_asgn?(node)
            s(node, op_asgn_type(node, :op_asgn), visit(node.receiver), visit_write_value(node.value), node.read_name, :"||")
          else
            s(node, op_asgn_type(node, :op_asgn2), visit(node.receiver), node.write_name, :"||", visit_write_value(node.value))
          end
        end

        # Call nodes with operators following them will either be op_asgn or
        # op_asgn2 nodes. That is determined by their call operator and their
        # right-hand side.
        private def op_asgn?(node)
          node.call_operator == "::" || (node.value.is_a?(CallNode) && node.value.opening_loc.nil? && !node.value.arguments.nil?)
        end

        # Call nodes with operators following them can use &. as an operator,
        # which changes their type by prefixing "safe_".
        private def op_asgn_type(node, type)
          node.safe_navigation? ? :"safe_#{type}" : type
        end

        # foo.bar, = 1
        # ^^^^^^^
        def visit_call_target_node(node)
          s(node, :attrasgn, visit(node.receiver), node.name)
        end

        # foo => bar => baz
        #        ^^^^^^^^^^
        def visit_capture_pattern_node(node)
          visit(node.target) << visit(node.value)
        end

        # case foo; when bar; end
        # ^^^^^^^^^^^^^^^^^^^^^^^
        def visit_case_node(node)
          s(node, :case, visit(node.predicate)).concat(visit_all(node.conditions)) << visit(node.else_clause)
        end

        # case foo; in bar; end
        # ^^^^^^^^^^^^^^^^^^^^^
        def visit_case_match_node(node)
          s(node, :case, visit(node.predicate)).concat(visit_all(node.conditions)) << visit(node.else_clause)
        end

        # class Foo; end
        # ^^^^^^^^^^^^^^
        def visit_class_node(node)
          name =
            if node.constant_path.is_a?(ConstantReadNode)
              node.name
            else
              visit(node.constant_path)
            end

          if node.body.nil?
            s(node, :class, name, visit(node.superclass))
          elsif node.body.is_a?(StatementsNode)
            compiler = copy_compiler(in_def: false)
            s(node, :class, name, visit(node.superclass)).concat(node.body.body.map { |child| child.accept(compiler) })
          else
            s(node, :class, name, visit(node.superclass), node.body.accept(copy_compiler(in_def: false)))
          end
        end

        # @@foo
        # ^^^^^
        def visit_class_variable_read_node(node)
          s(node, :cvar, node.name)
        end

        # @@foo = 1
        # ^^^^^^^^^
        #
        # @@foo, @@bar = 1
        # ^^^^^  ^^^^^
        def visit_class_variable_write_node(node)
          s(node, class_variable_write_type, node.name, visit_write_value(node.value))
        end

        # @@foo += bar
        # ^^^^^^^^^^^^
        def visit_class_variable_operator_write_node(node)
          s(node, class_variable_write_type, node.name, s(node, :call, s(node, :cvar, node.name), node.binary_operator, visit_write_value(node.value)))
        end

        # @@foo &&= bar
        # ^^^^^^^^^^^^^
        def visit_class_variable_and_write_node(node)
          s(node, :op_asgn_and, s(node, :cvar, node.name), s(node, class_variable_write_type, node.name, visit_write_value(node.value)))
        end

        # @@foo ||= bar
        # ^^^^^^^^^^^^^
        def visit_class_variable_or_write_node(node)
          s(node, :op_asgn_or, s(node, :cvar, node.name), s(node, class_variable_write_type, node.name, visit_write_value(node.value)))
        end

        # @@foo, = bar
        # ^^^^^
        def visit_class_variable_target_node(node)
          s(node, class_variable_write_type, node.name)
        end

        # If a class variable is written within a method definition, it has a
        # different type than everywhere else.
        private def class_variable_write_type
          in_def ? :cvasgn : :cvdecl
        end

        # Foo
        # ^^^
        def visit_constant_read_node(node)
          s(node, :const, node.name)
        end

        # Foo = 1
        # ^^^^^^^
        #
        # Foo, Bar = 1
        # ^^^  ^^^
        def visit_constant_write_node(node)
          s(node, :cdecl, node.name, visit_write_value(node.value))
        end

        # Foo += bar
        # ^^^^^^^^^^^
        def visit_constant_operator_write_node(node)
          s(node, :cdecl, node.name, s(node, :call, s(node, :const, node.name), node.binary_operator, visit_write_value(node.value)))
        end

        # Foo &&= bar
        # ^^^^^^^^^^^^
        def visit_constant_and_write_node(node)
          s(node, :op_asgn_and, s(node, :const, node.name), s(node, :cdecl, node.name, visit(node.value)))
        end

        # Foo ||= bar
        # ^^^^^^^^^^^^
        def visit_constant_or_write_node(node)
          s(node, :op_asgn_or, s(node, :const, node.name), s(node, :cdecl, node.name, visit(node.value)))
        end

        # Foo, = bar
        # ^^^
        def visit_constant_target_node(node)
          s(node, :cdecl, node.name)
        end

        # Foo::Bar
        # ^^^^^^^^
        def visit_constant_path_node(node)
          if node.parent.nil?
            s(node, :colon3, node.name)
          else
            s(node, :colon2, visit(node.parent), node.name)
          end
        end

        # Foo::Bar = 1
        # ^^^^^^^^^^^^
        #
        # Foo::Foo, Bar::Bar = 1
        # ^^^^^^^^  ^^^^^^^^
        def visit_constant_path_write_node(node)
          s(node, :cdecl, visit(node.target), visit_write_value(node.value))
        end

        # Foo::Bar += baz
        # ^^^^^^^^^^^^^^^
        def visit_constant_path_operator_write_node(node)
          s(node, :op_asgn, visit(node.target), node.binary_operator, visit_write_value(node.value))
        end

        # Foo::Bar &&= baz
        # ^^^^^^^^^^^^^^^^
        def visit_constant_path_and_write_node(node)
          s(node, :op_asgn_and, visit(node.target), visit_write_value(node.value))
        end

        # Foo::Bar ||= baz
        # ^^^^^^^^^^^^^^^^
        def visit_constant_path_or_write_node(node)
          s(node, :op_asgn_or, visit(node.target), visit_write_value(node.value))
        end

        # Foo::Bar, = baz
        # ^^^^^^^^
        def visit_constant_path_target_node(node)
          inner =
            if node.parent.nil?
              s(node, :colon3, node.name)
            else
              s(node, :colon2, visit(node.parent), node.name)
            end

          s(node, :const, inner)
        end

        # def foo; end
        # ^^^^^^^^^^^^
        #
        # def self.foo; end
        # ^^^^^^^^^^^^^^^^^
        def visit_def_node(node)
          name = node.name_loc.slice.to_sym
          result =
            if node.receiver.nil?
              s(node, :defn, name)
            else
              s(node, :defs, visit(node.receiver), name)
            end

          result.line(node.name_loc.start_line)
          if node.parameters.nil?
            result << s(node, :args).line(node.name_loc.start_line)
          else
            result << visit(node.parameters)
          end

          if node.body.nil?
            result << s(node, :nil)
          elsif node.body.is_a?(StatementsNode)
            compiler = copy_compiler(in_def: true)
            result.concat(node.body.body.map { |child| child.accept(compiler) })
          else
            result << node.body.accept(copy_compiler(in_def: true))
          end
        end

        # defined? a
        # ^^^^^^^^^^
        #
        # defined?(a)
        # ^^^^^^^^^^^
        def visit_defined_node(node)
          s(node, :defined, visit(node.value))
        end

        # if foo then bar else baz end
        #                 ^^^^^^^^^^^^
        def visit_else_node(node)
          visit(node.statements)
        end

        # "foo #{bar}"
        #      ^^^^^^
        def visit_embedded_statements_node(node)
          result = s(node, :evstr)
          result << visit(node.statements) unless node.statements.nil?
          result
        end

        # "foo #@bar"
        #      ^^^^^
        def visit_embedded_variable_node(node)
          s(node, :evstr, visit(node.variable))
        end

        # begin; foo; ensure; bar; end
        #             ^^^^^^^^^^^^
        def visit_ensure_node(node)
          node.statements.nil? ? s(node, :nil) : visit(node.statements)
        end

        # false
        # ^^^^^
        def visit_false_node(node)
          s(node, :false)
        end

        # foo => [*, bar, *]
        #        ^^^^^^^^^^^
        def visit_find_pattern_node(node)
          s(node, :find_pat, visit_pattern_constant(node.constant), :"*#{node.left.expression&.name}", *visit_all(node.requireds), :"*#{node.right.expression&.name}")
        end

        # if foo .. bar; end
        #    ^^^^^^^^^^
        def visit_flip_flop_node(node)
          if node.left.is_a?(IntegerNode) && node.right.is_a?(IntegerNode)
            s(node, :lit, Range.new(node.left.value, node.right.value, node.exclude_end?))
          else
            s(node, node.exclude_end? ? :flip3 : :flip2, visit(node.left), visit(node.right))
          end
        end

        # 1.0
        # ^^^
        def visit_float_node(node)
          s(node, :lit, node.value)
        end

        # for foo in bar do end
        # ^^^^^^^^^^^^^^^^^^^^^
        def visit_for_node(node)
          s(node, :for, visit(node.collection), visit(node.index), visit(node.statements))
        end

        # def foo(...); bar(...); end
        #                   ^^^
        def visit_forwarding_arguments_node(node)
          s(node, :forward_args)
        end

        # def foo(...); end
        #         ^^^
        def visit_forwarding_parameter_node(node)
          s(node, :forward_args)
        end

        # super
        # ^^^^^
        #
        # super {}
        # ^^^^^^^^
        def visit_forwarding_super_node(node)
          visit_block(node, s(node, :zsuper), node.block)
        end

        # $foo
        # ^^^^
        def visit_global_variable_read_node(node)
          s(node, :gvar, node.name)
        end

        # $foo = 1
        # ^^^^^^^^
        #
        # $foo, $bar = 1
        # ^^^^  ^^^^
        def visit_global_variable_write_node(node)
          s(node, :gasgn, node.name, visit_write_value(node.value))
        end

        # $foo += bar
        # ^^^^^^^^^^^
        def visit_global_variable_operator_write_node(node)
          s(node, :gasgn, node.name, s(node, :call, s(node, :gvar, node.name), node.binary_operator, visit(node.value)))
        end

        # $foo &&= bar
        # ^^^^^^^^^^^^
        def visit_global_variable_and_write_node(node)
          s(node, :op_asgn_and, s(node, :gvar, node.name), s(node, :gasgn, node.name, visit_write_value(node.value)))
        end

        # $foo ||= bar
        # ^^^^^^^^^^^^
        def visit_global_variable_or_write_node(node)
          s(node, :op_asgn_or, s(node, :gvar, node.name), s(node, :gasgn, node.name, visit_write_value(node.value)))
        end

        # $foo, = bar
        # ^^^^
        def visit_global_variable_target_node(node)
          s(node, :gasgn, node.name)
        end

        # {}
        # ^^
        def visit_hash_node(node)
          s(node, :hash).concat(node.elements.flat_map { |element| visit(element) })
        end

        # foo => {}
        #        ^^
        def visit_hash_pattern_node(node)
          result = s(node, :hash_pat, visit_pattern_constant(node.constant)).concat(node.elements.flat_map { |element| visit(element) })

          case node.rest
          when AssocSplatNode
            result << s(node.rest, :kwrest, :"**#{node.rest.value&.name}")
          when NoKeywordsParameterNode
            result << visit(node.rest)
          end

          result
        end

        # if foo then bar end
        # ^^^^^^^^^^^^^^^^^^^
        #
        # bar if foo
        # ^^^^^^^^^^
        #
        # foo ? bar : baz
        # ^^^^^^^^^^^^^^^
        def visit_if_node(node)
          s(node, :if, visit(node.predicate), visit(node.statements), visit(node.subsequent))
        end

        # 1i
        def visit_imaginary_node(node)
          s(node, :lit, node.value)
        end

        # { foo: }
        #   ^^^^
        def visit_implicit_node(node)
        end

        # foo { |bar,| }
        #           ^
        def visit_implicit_rest_node(node)
        end

        # case foo; in bar; end
        # ^^^^^^^^^^^^^^^^^^^^^
        def visit_in_node(node)
          pattern =
            if node.pattern.is_a?(ConstantPathNode)
              s(node.pattern, :const, visit(node.pattern))
            else
              node.pattern.accept(copy_compiler(in_pattern: true))
            end

          s(node, :in, pattern).concat(node.statements.nil? ? [nil] : visit_all(node.statements.body))
        end

        # foo[bar] += baz
        # ^^^^^^^^^^^^^^^
        def visit_index_operator_write_node(node)
          arglist = nil

          if !node.arguments.nil? || !node.block.nil?
            arglist = s(node, :arglist).concat(visit_all(node.arguments&.arguments || []))
            arglist << visit(node.block) if !node.block.nil?
          end

          s(node, :op_asgn1, visit(node.receiver), arglist, node.binary_operator, visit_write_value(node.value))
        end

        # foo[bar] &&= baz
        # ^^^^^^^^^^^^^^^^
        def visit_index_and_write_node(node)
          arglist = nil

          if !node.arguments.nil? || !node.block.nil?
            arglist = s(node, :arglist).concat(visit_all(node.arguments&.arguments || []))
            arglist << visit(node.block) if !node.block.nil?
          end

          s(node, :op_asgn1, visit(node.receiver), arglist, :"&&", visit_write_value(node.value))
        end

        # foo[bar] ||= baz
        # ^^^^^^^^^^^^^^^^
        def visit_index_or_write_node(node)
          arglist = nil

          if !node.arguments.nil? || !node.block.nil?
            arglist = s(node, :arglist).concat(visit_all(node.arguments&.arguments || []))
            arglist << visit(node.block) if !node.block.nil?
          end

          s(node, :op_asgn1, visit(node.receiver), arglist, :"||", visit_write_value(node.value))
        end

        # foo[bar], = 1
        # ^^^^^^^^
        def visit_index_target_node(node)
          arguments = visit_all(node.arguments&.arguments || [])
          arguments << visit(node.block) unless node.block.nil?

          s(node, :attrasgn, visit(node.receiver), :[]=).concat(arguments)
        end

        # @foo
        # ^^^^
        def visit_instance_variable_read_node(node)
          s(node, :ivar, node.name)
        end

        # @foo = 1
        # ^^^^^^^^
        #
        # @foo, @bar = 1
        # ^^^^  ^^^^
        def visit_instance_variable_write_node(node)
          s(node, :iasgn, node.name, visit_write_value(node.value))
        end

        # @foo += bar
        # ^^^^^^^^^^^
        def visit_instance_variable_operator_write_node(node)
          s(node, :iasgn, node.name, s(node, :call, s(node, :ivar, node.name), node.binary_operator, visit_write_value(node.value)))
        end

        # @foo &&= bar
        # ^^^^^^^^^^^^
        def visit_instance_variable_and_write_node(node)
          s(node, :op_asgn_and, s(node, :ivar, node.name), s(node, :iasgn, node.name, visit(node.value)))
        end

        # @foo ||= bar
        # ^^^^^^^^^^^^
        def visit_instance_variable_or_write_node(node)
          s(node, :op_asgn_or, s(node, :ivar, node.name), s(node, :iasgn, node.name, visit(node.value)))
        end

        # @foo, = bar
        # ^^^^
        def visit_instance_variable_target_node(node)
          s(node, :iasgn, node.name)
        end

        # 1
        # ^
        def visit_integer_node(node)
          s(node, :lit, node.value)
        end

        # if /foo #{bar}/ then end
        #    ^^^^^^^^^^^^
        def visit_interpolated_match_last_line_node(node)
          parts = visit_interpolated_parts(node.parts)
          regexp =
            if parts.length == 1
              s(node, :lit, Regexp.new(parts.first, node.options))
            else
              s(node, :dregx).concat(parts).tap do |result|
                options = node.options
                result << options if options != 0
              end
            end

          s(node, :match, regexp)
        end

        # /foo #{bar}/
        # ^^^^^^^^^^^^
        def visit_interpolated_regular_expression_node(node)
          parts = visit_interpolated_parts(node.parts)

          if parts.length == 1
            s(node, :lit, Regexp.new(parts.first, node.options))
          else
            s(node, :dregx).concat(parts).tap do |result|
              options = node.options
              result << options if options != 0
            end
          end
        end

        # "foo #{bar}"
        # ^^^^^^^^^^^^
        def visit_interpolated_string_node(node)
          parts = visit_interpolated_parts(node.parts)
          parts.length == 1 ? s(node, :str, parts.first) : s(node, :dstr).concat(parts)
        end

        # :"foo #{bar}"
        # ^^^^^^^^^^^^^
        def visit_interpolated_symbol_node(node)
          parts = visit_interpolated_parts(node.parts)
          parts.length == 1 ? s(node, :lit, parts.first.to_sym) : s(node, :dsym).concat(parts)
        end

        # `foo #{bar}`
        # ^^^^^^^^^^^^
        def visit_interpolated_x_string_node(node)
          source = node.heredoc? ? node.parts.first : node
          parts = visit_interpolated_parts(node.parts)
          parts.length == 1 ? s(source, :xstr, parts.first) : s(source, :dxstr).concat(parts)
        end

        # Visit the interpolated content of the string-like node.
        private def visit_interpolated_parts(parts)
          visited = []

          parts.each do |part|
            result = visit(part)

            if result[0] == :evstr && result[1]
              if result[1][0] == :str
                visited << result[1]
              elsif result[1][0] == :dstr
                visited.concat(result[1][1..-1])
              else
                visited << result
              end
              visited << :space
            elsif result[0] == :dstr
              if !visited.empty? && part.parts[0].is_a?(StringNode)
                # If we are in the middle of an implicitly concatenated string,
                # we should not have a bare string as the first part. In this
                # case we need to visit just that first part and then we can
                # push the rest of the parts onto the visited array.
                result[1] = visit(part.parts[0])
              end
              visited.concat(result[1..-1])
            else
              visited << result
            end
          end

          state = :beginning #: :beginning | :string_content | :interpolated_content
          results = []

          visited.each_with_index do |result, index|
            case state
            when :beginning
              if result.is_a?(String)
                results << result
                state = :string_content
              elsif result.is_a?(Array) && result[0] == :str
                results << result[1]
                state = :string_content
              else
                results << ""
                results << result
                state = :interpolated_content
              end
            when :string_content
              if result == :space
                # continue
              elsif result.is_a?(String)
                results[0] << result
              elsif result.is_a?(Array) && result[0] == :str
                results[0] << result[1]
              else
                results << result
                state = :interpolated_content
              end
            when :interpolated_content
              if result == :space
                # continue
              elsif visited[index - 1] != :space && result.is_a?(Array) && result[0] == :str && results[-1][0] == :str && (results[-1].line_max == result.line)
                results[-1][1] << result[1]
                results[-1].line_max = result.line_max
              else
                results << result
              end
            end
          end

          results
        end

        # -> { it }
        #      ^^
        def visit_it_local_variable_read_node(node)
          s(node, :call, nil, :it)
        end

        # foo(bar: baz)
        #     ^^^^^^^^
        def visit_keyword_hash_node(node)
          s(node, :hash).concat(node.elements.flat_map { |element| visit(element) })
        end

        # def foo(**bar); end
        #         ^^^^^
        #
        # def foo(**); end
        #         ^^
        def visit_keyword_rest_parameter_node(node)
          :"**#{node.name}"
        end

        # -> {}
        def visit_lambda_node(node)
          parameters =
            case node.parameters
            when nil, NumberedParametersNode
              s(node, :args)
            else
              visit(node.parameters)
            end

          if node.body.nil?
            s(node, :iter, s(node, :lambda), parameters)
          else
            s(node, :iter, s(node, :lambda), parameters, visit(node.body))
          end
        end

        # foo
        # ^^^
        def visit_local_variable_read_node(node)
          if node.name.match?(/^_\d$/)
            s(node, :call, nil, node.name)
          else
            s(node, :lvar, node.name)
          end
        end

        # foo = 1
        # ^^^^^^^
        #
        # foo, bar = 1
        # ^^^  ^^^
        def visit_local_variable_write_node(node)
          s(node, :lasgn, node.name, visit_write_value(node.value))
        end

        # foo += bar
        # ^^^^^^^^^^
        def visit_local_variable_operator_write_node(node)
          s(node, :lasgn, node.name, s(node, :call, s(node, :lvar, node.name), node.binary_operator, visit_write_value(node.value)))
        end

        # foo &&= bar
        # ^^^^^^^^^^^
        def visit_local_variable_and_write_node(node)
          s(node, :op_asgn_and, s(node, :lvar, node.name), s(node, :lasgn, node.name, visit_write_value(node.value)))
        end

        # foo ||= bar
        # ^^^^^^^^^^^
        def visit_local_variable_or_write_node(node)
          s(node, :op_asgn_or, s(node, :lvar, node.name), s(node, :lasgn, node.name, visit_write_value(node.value)))
        end

        # foo, = bar
        # ^^^
        def visit_local_variable_target_node(node)
          s(node, :lasgn, node.name)
        end

        # if /foo/ then end
        #    ^^^^^
        def visit_match_last_line_node(node)
          s(node, :match, s(node, :lit, Regexp.new(node.unescaped, node.options)))
        end

        # foo in bar
        # ^^^^^^^^^^
        def visit_match_predicate_node(node)
          s(node, :case, visit(node.value), s(node, :in, node.pattern.accept(copy_compiler(in_pattern: true)), nil), nil)
        end

        # foo => bar
        # ^^^^^^^^^^
        def visit_match_required_node(node)
          s(node, :case, visit(node.value), s(node, :in, node.pattern.accept(copy_compiler(in_pattern: true)), nil), nil)
        end

        # /(?<foo>foo)/ =~ bar
        # ^^^^^^^^^^^^^^^^^^^^
        def visit_match_write_node(node)
          s(node, :match2, visit(node.call.receiver), visit(node.call.arguments.arguments.first))
        end

        # A node that is missing from the syntax tree. This is only used in the
        # case of a syntax error. The parser gem doesn't have such a concept, so
        # we invent our own here.
        def visit_missing_node(node)
          raise "Cannot visit missing node directly"
        end

        # module Foo; end
        # ^^^^^^^^^^^^^^^
        def visit_module_node(node)
          name =
            if node.constant_path.is_a?(ConstantReadNode)
              node.name
            else
              visit(node.constant_path)
            end

          if node.body.nil?
            s(node, :module, name)
          elsif node.body.is_a?(StatementsNode)
            compiler = copy_compiler(in_def: false)
            s(node, :module, name).concat(node.body.body.map { |child| child.accept(compiler) })
          else
            s(node, :module, name, node.body.accept(copy_compiler(in_def: false)))
          end
        end

        # foo, bar = baz
        # ^^^^^^^^
        def visit_multi_target_node(node)
          targets = [*node.lefts]
          targets << node.rest if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)
          targets.concat(node.rights)

          s(node, :masgn, s(node, :array).concat(visit_all(targets)))
        end

        # foo, bar = baz
        # ^^^^^^^^^^^^^^
        def visit_multi_write_node(node)
          targets = [*node.lefts]
          targets << node.rest if !node.rest.nil? && !node.rest.is_a?(ImplicitRestNode)
          targets.concat(node.rights)

          value =
            if node.value.is_a?(ArrayNode) && node.value.opening_loc.nil?
              if node.value.elements.length == 1 && node.value.elements.first.is_a?(SplatNode)
                visit(node.value.elements.first)
              else
                visit(node.value)
              end
            else
              s(node.value, :to_ary, visit(node.value))
            end

          s(node, :masgn, s(node, :array).concat(visit_all(targets)), value)
        end

        # next
        # ^^^^
        #
        # next foo
        # ^^^^^^^^
        def visit_next_node(node)
          if node.arguments.nil?
            s(node, :next)
          elsif node.arguments.arguments.length == 1
            argument = node.arguments.arguments.first
            s(node, :next, argument.is_a?(SplatNode) ? s(node, :svalue, visit(argument)) : visit(argument))
          else
            s(node, :next, s(node, :array).concat(visit_all(node.arguments.arguments)))
          end
        end

        # nil
        # ^^^
        def visit_nil_node(node)
          s(node, :nil)
        end

        # def foo(**nil); end
        #         ^^^^^
        def visit_no_keywords_parameter_node(node)
          in_pattern ? s(node, :kwrest, :"**nil") : :"**nil"
        end

        # -> { _1 + _2 }
        # ^^^^^^^^^^^^^^
        def visit_numbered_parameters_node(node)
          raise "Cannot visit numbered parameters directly"
        end

        # $1
        # ^^
        def visit_numbered_reference_read_node(node)
          s(node, :nth_ref, node.number)
        end

        # def foo(bar: baz); end
        #         ^^^^^^^^
        def visit_optional_keyword_parameter_node(node)
          s(node, :kwarg, node.name, visit(node.value))
        end

        # def foo(bar = 1); end
        #         ^^^^^^^
        def visit_optional_parameter_node(node)
          s(node, :lasgn, node.name, visit(node.value))
        end

        # a or b
        # ^^^^^^
        def visit_or_node(node)
          left = visit(node.left)

          if left[0] == :or
            # ruby_parser has the or keyword as right-associative as opposed to
            # prism which has it as left-associative. We reverse that
            # associativity here.
            nest = left
            nest = nest[2] while nest[2][0] == :or
            nest[2] = s(node, :or, nest[2], visit(node.right))
            left
          else
            s(node, :or, left, visit(node.right))
          end
        end

        # def foo(bar, *baz); end
        #         ^^^^^^^^^
        def visit_parameters_node(node)
          children =
            node.compact_child_nodes.map do |element|
              if element.is_a?(MultiTargetNode)
                visit_destructured_parameter(element)
              else
                visit(element)
              end
            end

          s(node, :args).concat(children)
        end

        # def foo((bar, baz)); end
        #         ^^^^^^^^^^
        private def visit_destructured_parameter(node)
          children =
            [*node.lefts, *node.rest, *node.rights].map do |child|
              case child
              when RequiredParameterNode
                visit(child)
              when MultiTargetNode
                visit_destructured_parameter(child)
              when SplatNode
                :"*#{child.expression&.name}"
              else
                raise
              end
            end

          s(node, :masgn).concat(children)
        end

        # ()
        # ^^
        #
        # (1)
        # ^^^
        def visit_parentheses_node(node)
          if node.body.nil?
            s(node, :nil)
          else
            visit(node.body)
          end
        end

        # foo => ^(bar)
        #        ^^^^^^
        def visit_pinned_expression_node(node)
          node.expression.accept(copy_compiler(in_pattern: false))
        end

        # foo = 1 and bar => ^foo
        #                    ^^^^
        def visit_pinned_variable_node(node)
          if node.variable.is_a?(LocalVariableReadNode) && node.variable.name.match?(/^_\d$/)
            s(node, :lvar, node.variable.name)
          else
            visit(node.variable)
          end
        end

        # END {}
        def visit_post_execution_node(node)
          s(node, :iter, s(node, :postexe), 0, visit(node.statements))
        end

        # BEGIN {}
        def visit_pre_execution_node(node)
          s(node, :iter, s(node, :preexe), 0, visit(node.statements))
        end

        # The top-level program node.
        def visit_program_node(node)
          visit(node.statements)
        end

        # 0..5
        # ^^^^
        def visit_range_node(node)
          if !in_pattern && !node.left.nil? && !node.right.nil? && ([node.left.type, node.right.type] - %i[nil_node integer_node]).empty?
            left = node.left.value if node.left.is_a?(IntegerNode)
            right = node.right.value if node.right.is_a?(IntegerNode)
            s(node, :lit, Range.new(left, right, node.exclude_end?))
          else
            s(node, node.exclude_end? ? :dot3 : :dot2, visit_range_bounds_node(node.left), visit_range_bounds_node(node.right))
          end
        end

        # If the bounds of a range node are empty parentheses, then they do not
        # get replaced by their usual s(:nil), but instead are s(:begin).
        private def visit_range_bounds_node(node)
          if node.is_a?(ParenthesesNode) && node.body.nil?
            s(node, :begin)
          else
            visit(node)
          end
        end

        # 1r
        # ^^
        def visit_rational_node(node)
          s(node, :lit, node.value)
        end

        # redo
        # ^^^^
        def visit_redo_node(node)
          s(node, :redo)
        end

        # /foo/
        # ^^^^^
        def visit_regular_expression_node(node)
          s(node, :lit, Regexp.new(node.unescaped, node.options))
        end

        # def foo(bar:); end
        #         ^^^^
        def visit_required_keyword_parameter_node(node)
          s(node, :kwarg, node.name)
        end

        # def foo(bar); end
        #         ^^^
        def visit_required_parameter_node(node)
          node.name
        end

        # foo rescue bar
        # ^^^^^^^^^^^^^^
        def visit_rescue_modifier_node(node)
          s(node, :rescue, visit(node.expression), s(node.rescue_expression, :resbody, s(node.rescue_expression, :array), visit(node.rescue_expression)))
        end

        # begin; rescue; end
        #        ^^^^^^^
        def visit_rescue_node(node)
          exceptions =
            if node.exceptions.length == 1 && node.exceptions.first.is_a?(SplatNode)
              visit(node.exceptions.first)
            else
              s(node, :array).concat(visit_all(node.exceptions))
            end

          if !node.reference.nil?
            exceptions << (visit(node.reference) << s(node.reference, :gvar, :"$!"))
          end

          s(node, :resbody, exceptions).concat(node.statements.nil? ? [nil] : visit_all(node.statements.body))
        end

        # def foo(*bar); end
        #         ^^^^
        #
        # def foo(*); end
        #         ^
        def visit_rest_parameter_node(node)
          :"*#{node.name}"
        end

        # retry
        # ^^^^^
        def visit_retry_node(node)
          s(node, :retry)
        end

        # return
        # ^^^^^^
        #
        # return 1
        # ^^^^^^^^
        def visit_return_node(node)
          if node.arguments.nil?
            s(node, :return)
          elsif node.arguments.arguments.length == 1
            argument = node.arguments.arguments.first
            s(node, :return, argument.is_a?(SplatNode) ? s(node, :svalue, visit(argument)) : visit(argument))
          else
            s(node, :return, s(node, :array).concat(visit_all(node.arguments.arguments)))
          end
        end

        # self
        # ^^^^
        def visit_self_node(node)
          s(node, :self)
        end

        # A shareable constant.
        def visit_shareable_constant_node(node)
          visit(node.write)
        end

        # class << self; end
        # ^^^^^^^^^^^^^^^^^^
        def visit_singleton_class_node(node)
          s(node, :sclass, visit(node.expression)).tap do |sexp|
            sexp << node.body.accept(copy_compiler(in_def: false)) unless node.body.nil?
          end
        end

        # __ENCODING__
        # ^^^^^^^^^^^^
        def visit_source_encoding_node(node)
          # TODO
          s(node, :colon2, s(node, :const, :Encoding), :UTF_8)
        end

        # __FILE__
        # ^^^^^^^^
        def visit_source_file_node(node)
          s(node, :str, node.filepath)
        end

        # __LINE__
        # ^^^^^^^^
        def visit_source_line_node(node)
          s(node, :lit, node.location.start_line)
        end

        # foo(*bar)
        #     ^^^^
        #
        # def foo((bar, *baz)); end
        #               ^^^^
        #
        # def foo(*); bar(*); end
        #                 ^
        def visit_splat_node(node)
          if node.expression.nil?
            s(node, :splat)
          else
            s(node, :splat, visit(node.expression))
          end
        end

        # A list of statements.
        def visit_statements_node(node)
          first, *rest = node.body

          if rest.empty?
            visit(first)
          else
            s(node, :block).concat(visit_all(node.body))
          end
        end

        # "foo"
        # ^^^^^
        def visit_string_node(node)
          unescaped = node.unescaped

          if node.forced_binary_encoding?
            unescaped.force_encoding(Encoding::BINARY)
          end

          s(node, :str, unescaped)
        end

        # super(foo)
        # ^^^^^^^^^^
        def visit_super_node(node)
          arguments = node.arguments&.arguments || []
          block = node.block

          if block.is_a?(BlockArgumentNode)
            arguments << block
            block = nil
          end

          visit_block(node, s(node, :super).concat(visit_all(arguments)), block)
        end

        # :foo
        # ^^^^
        def visit_symbol_node(node)
          node.value == "!@" ? s(node, :lit, :"!@") : s(node, :lit, node.unescaped.to_sym)
        end

        # true
        # ^^^^
        def visit_true_node(node)
          s(node, :true)
        end

        # undef foo
        # ^^^^^^^^^
        def visit_undef_node(node)
          names = node.names.map { |name| s(node, :undef, visit(name)) }
          names.length == 1 ? names.first : s(node, :block).concat(names)
        end

        # unless foo; bar end
        # ^^^^^^^^^^^^^^^^^^^
        #
        # bar unless foo
        # ^^^^^^^^^^^^^^
        def visit_unless_node(node)
          s(node, :if, visit(node.predicate), visit(node.else_clause), visit(node.statements))
        end

        # until foo; bar end
        # ^^^^^^^^^^^^^^^^^
        #
        # bar until foo
        # ^^^^^^^^^^^^^
        def visit_until_node(node)
          s(node, :until, visit(node.predicate), visit(node.statements), !node.begin_modifier?)
        end

        # case foo; when bar; end
        #           ^^^^^^^^^^^^^
        def visit_when_node(node)
          s(node, :when, s(node, :array).concat(visit_all(node.conditions))).concat(node.statements.nil? ? [nil] : visit_all(node.statements.body))
        end

        # while foo; bar end
        # ^^^^^^^^^^^^^^^^^^
        #
        # bar while foo
        # ^^^^^^^^^^^^^
        def visit_while_node(node)
          s(node, :while, visit(node.predicate), visit(node.statements), !node.begin_modifier?)
        end

        # `foo`
        # ^^^^^
        def visit_x_string_node(node)
          result = s(node, :xstr, node.unescaped)

          if node.heredoc?
            result.line = node.content_loc.start_line
            result.line_max = node.content_loc.end_line
          end

          result
        end

        # yield
        # ^^^^^
        #
        # yield 1
        # ^^^^^^^
        def visit_yield_node(node)
          s(node, :yield).concat(visit_all(node.arguments&.arguments || []))
        end

        private

        # Create a new compiler with the given options.
        def copy_compiler(in_def: self.in_def, in_pattern: self.in_pattern)
          Compiler.new(file, in_def: in_def, in_pattern: in_pattern)
        end

        # Create a new Sexp object from the given prism node and arguments.
        def s(node, *arguments)
          result = Sexp.new(*arguments)
          result.file = file
          result.line = node.location.start_line
          result.line_max = node.location.end_line
          result
        end

        # Visit a block node, which will modify the AST by wrapping the given
        # visited node in an iter node.
        def visit_block(node, sexp, block)
          if block.nil?
            sexp
          else
            parameters =
              case block.parameters
              when nil, NumberedParametersNode
                0
              else
                visit(block.parameters)
              end

            if block.body.nil?
              s(node, :iter, sexp, parameters)
            else
              s(node, :iter, sexp, parameters, visit(block.body))
            end
          end
        end

        # Pattern constants get wrapped in another layer of :const.
        def visit_pattern_constant(node)
          case node
          when nil
            # nothing
          when ConstantReadNode
            visit(node)
          else
            s(node, :const, visit(node))
          end
        end

        # Visit the value of a write, which will be on the right-hand side of
        # a write operator. Because implicit arrays can have splats, those could
        # potentially be wrapped in an svalue node.
        def visit_write_value(node)
          if node.is_a?(ArrayNode) && node.opening_loc.nil?
            if node.elements.length == 1 && node.elements.first.is_a?(SplatNode)
              s(node, :svalue, visit(node.elements.first))
            else
              s(node, :svalue, visit(node))
            end
          else
            visit(node)
          end
        end
      end

      private_constant :Compiler

      # Parse the given source and translate it into the seattlerb/ruby_parser
      # gem's Sexp format.
      def parse(source, filepath = "(string)")
        translate(Prism.parse(source, filepath: filepath, partial_script: true), filepath)
      end

      # Parse the given file and translate it into the seattlerb/ruby_parser
      # gem's Sexp format.
      def parse_file(filepath)
        translate(Prism.parse_file(filepath, partial_script: true), filepath)
      end

      class << self
        # Parse the given source and translate it into the seattlerb/ruby_parser
        # gem's Sexp format.
        def parse(source, filepath = "(string)")
          new.parse(source, filepath)
        end

        # Parse the given file and translate it into the seattlerb/ruby_parser
        # gem's Sexp format.
        def parse_file(filepath)
          new.parse_file(filepath)
        end
      end

      private

      # Translate the given parse result and filepath into the
      # seattlerb/ruby_parser gem's Sexp format.
      def translate(result, filepath)
        if result.failure?
          error = result.errors.first
          raise ::RubyParser::SyntaxError, "#{filepath}:#{error.location.start_line} :: #{error.message}"
        end

        result.value.accept(Compiler.new(filepath))
      end
    end
  end
end
PK*J[��.���(share/ruby/prism/translation/parser33.rbnu�[���# frozen_string_literal: true

module Prism
  module Translation
    # This class is the entry-point for Ruby 3.3 of `Prism::Translation::Parser`.
    class Parser33 < Parser
      def version # :nodoc:
        33
      end
    end
  end
end
PK*J[�b�r�rshare/ruby/prism/reflection.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/reflection.rb.erb
if you are looking to modify the template
=end

module Prism
  # The Reflection module provides the ability to reflect on the structure of
  # the syntax tree itself, as opposed to looking at a single syntax tree. This
  # is useful in metaprogramming contexts.
  module Reflection
    # A field represents a single piece of data on a node. It is the base class
    # for all other field types.
    class Field
      # The name of the field.
      attr_reader :name

      # Initializes the field with the given name.
      def initialize(name)
        @name = name
      end
    end

    # A node field represents a single child node in the syntax tree. It
    # resolves to a Prism::Node in Ruby.
    class NodeField < Field
    end

    # An optional node field represents a single child node in the syntax tree
    # that may or may not be present. It resolves to either a Prism::Node or nil
    # in Ruby.
    class OptionalNodeField < Field
    end

    # A node list field represents a list of child nodes in the syntax tree. It
    # resolves to an array of Prism::Node instances in Ruby.
    class NodeListField < Field
    end

    # A constant field represents a constant value on a node. Effectively, it
    # represents an identifier found within the source. It resolves to a symbol
    # in Ruby.
    class ConstantField < Field
    end

    # An optional constant field represents a constant value on a node that may
    # or may not be present. It resolves to either a symbol or nil in Ruby.
    class OptionalConstantField < Field
    end

    # A constant list field represents a list of constant values on a node. It
    # resolves to an array of symbols in Ruby.
    class ConstantListField < Field
    end

    # A string field represents a string value on a node. It almost always
    # represents the unescaped value of a string-like literal. It resolves to a
    # string in Ruby.
    class StringField < Field
    end

    # A location field represents the location of some part of the node in the
    # source code. For example, the location of a keyword or an operator. It
    # resolves to a Prism::Location in Ruby.
    class LocationField < Field
    end

    # An optional location field represents the location of some part of the
    # node in the source code that may or may not be present. It resolves to
    # either a Prism::Location or nil in Ruby.
    class OptionalLocationField < Field
    end

    # An integer field represents an integer value. It is used to represent the
    # value of an integer literal, the depth of local variables, and the number
    # of a numbered reference. It resolves to an Integer in Ruby.
    class IntegerField < Field
    end

    # A float field represents a double-precision floating point value. It is
    # used exclusively to represent the value of a floating point literal. It
    # resolves to a Float in Ruby.
    class FloatField < Field
    end

    # A flags field represents a bitset of flags on a node. It resolves to an
    # integer in Ruby. Note that the flags cannot be accessed directly on the
    # node because the integer is kept private. Instead, the various flags in
    # the bitset should be accessed through their query methods.
    class FlagsField < Field
      # The names of the flags in the bitset.
      attr_reader :flags

      # Initializes the flags field with the given name and flags.
      def initialize(name, flags)
        super(name)
        @flags = flags
      end
    end

    # Returns the fields for the given node.
    def self.fields_for(node)
      case node.type
      when :alias_global_variable_node
        [NodeField.new(:new_name), NodeField.new(:old_name), LocationField.new(:keyword_loc)]
      when :alias_method_node
        [NodeField.new(:new_name), NodeField.new(:old_name), LocationField.new(:keyword_loc)]
      when :alternation_pattern_node
        [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
      when :and_node
        [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
      when :arguments_node
        [FlagsField.new(:flags, [:contains_forwarding?, :contains_keywords?, :contains_keyword_splat?, :contains_splat?, :contains_multiple_splats?]), NodeListField.new(:arguments)]
      when :array_node
        [FlagsField.new(:flags, [:contains_splat?]), NodeListField.new(:elements), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
      when :array_pattern_node
        [OptionalNodeField.new(:constant), NodeListField.new(:requireds), OptionalNodeField.new(:rest), NodeListField.new(:posts), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
      when :assoc_node
        [NodeField.new(:key), NodeField.new(:value), OptionalLocationField.new(:operator_loc)]
      when :assoc_splat_node
        [OptionalNodeField.new(:value), LocationField.new(:operator_loc)]
      when :back_reference_read_node
        [ConstantField.new(:name)]
      when :begin_node
        [OptionalLocationField.new(:begin_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:rescue_clause), OptionalNodeField.new(:else_clause), OptionalNodeField.new(:ensure_clause), OptionalLocationField.new(:end_keyword_loc)]
      when :block_argument_node
        [OptionalNodeField.new(:expression), LocationField.new(:operator_loc)]
      when :block_local_variable_node
        [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name)]
      when :block_node
        [ConstantListField.new(:locals), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
      when :block_parameter_node
        [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
      when :block_parameters_node
        [OptionalNodeField.new(:parameters), NodeListField.new(:locals), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
      when :break_node
        [OptionalNodeField.new(:arguments), LocationField.new(:keyword_loc)]
      when :call_and_write_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), OptionalLocationField.new(:message_loc), ConstantField.new(:read_name), ConstantField.new(:write_name), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :call_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), ConstantField.new(:name), OptionalLocationField.new(:message_loc), OptionalLocationField.new(:opening_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:closing_loc), OptionalNodeField.new(:block)]
      when :call_operator_write_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), OptionalLocationField.new(:message_loc), ConstantField.new(:read_name), ConstantField.new(:write_name), ConstantField.new(:binary_operator), LocationField.new(:binary_operator_loc), NodeField.new(:value)]
      when :call_or_write_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), OptionalLocationField.new(:message_loc), ConstantField.new(:read_name), ConstantField.new(:write_name), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :call_target_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), NodeField.new(:receiver), LocationField.new(:call_operator_loc), ConstantField.new(:name), LocationField.new(:message_loc)]
      when :capture_pattern_node
        [NodeField.new(:value), NodeField.new(:target), LocationField.new(:operator_loc)]
      when :case_match_node
        [OptionalNodeField.new(:predicate), NodeListField.new(:conditions), OptionalNodeField.new(:else_clause), LocationField.new(:case_keyword_loc), LocationField.new(:end_keyword_loc)]
      when :case_node
        [OptionalNodeField.new(:predicate), NodeListField.new(:conditions), OptionalNodeField.new(:else_clause), LocationField.new(:case_keyword_loc), LocationField.new(:end_keyword_loc)]
      when :class_node
        [ConstantListField.new(:locals), LocationField.new(:class_keyword_loc), NodeField.new(:constant_path), OptionalLocationField.new(:inheritance_operator_loc), OptionalNodeField.new(:superclass), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc), ConstantField.new(:name)]
      when :class_variable_and_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :class_variable_operator_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
      when :class_variable_or_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :class_variable_read_node
        [ConstantField.new(:name)]
      when :class_variable_target_node
        [ConstantField.new(:name)]
      when :class_variable_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
      when :constant_and_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :constant_operator_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
      when :constant_or_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :constant_path_and_write_node
        [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :constant_path_node
        [OptionalNodeField.new(:parent), OptionalConstantField.new(:name), LocationField.new(:delimiter_loc), LocationField.new(:name_loc)]
      when :constant_path_operator_write_node
        [NodeField.new(:target), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
      when :constant_path_or_write_node
        [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :constant_path_target_node
        [OptionalNodeField.new(:parent), OptionalConstantField.new(:name), LocationField.new(:delimiter_loc), LocationField.new(:name_loc)]
      when :constant_path_write_node
        [NodeField.new(:target), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :constant_read_node
        [ConstantField.new(:name)]
      when :constant_target_node
        [ConstantField.new(:name)]
      when :constant_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
      when :def_node
        [ConstantField.new(:name), LocationField.new(:name_loc), OptionalNodeField.new(:receiver), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body), ConstantListField.new(:locals), LocationField.new(:def_keyword_loc), OptionalLocationField.new(:operator_loc), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc), OptionalLocationField.new(:equal_loc), OptionalLocationField.new(:end_keyword_loc)]
      when :defined_node
        [OptionalLocationField.new(:lparen_loc), NodeField.new(:value), OptionalLocationField.new(:rparen_loc), LocationField.new(:keyword_loc)]
      when :else_node
        [LocationField.new(:else_keyword_loc), OptionalNodeField.new(:statements), OptionalLocationField.new(:end_keyword_loc)]
      when :embedded_statements_node
        [LocationField.new(:opening_loc), OptionalNodeField.new(:statements), LocationField.new(:closing_loc)]
      when :embedded_variable_node
        [LocationField.new(:operator_loc), NodeField.new(:variable)]
      when :ensure_node
        [LocationField.new(:ensure_keyword_loc), OptionalNodeField.new(:statements), LocationField.new(:end_keyword_loc)]
      when :false_node
        []
      when :find_pattern_node
        [OptionalNodeField.new(:constant), NodeField.new(:left), NodeListField.new(:requireds), NodeField.new(:right), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
      when :flip_flop_node
        [FlagsField.new(:flags, [:exclude_end?]), OptionalNodeField.new(:left), OptionalNodeField.new(:right), LocationField.new(:operator_loc)]
      when :float_node
        [FloatField.new(:value)]
      when :for_node
        [NodeField.new(:index), NodeField.new(:collection), OptionalNodeField.new(:statements), LocationField.new(:for_keyword_loc), LocationField.new(:in_keyword_loc), OptionalLocationField.new(:do_keyword_loc), LocationField.new(:end_keyword_loc)]
      when :forwarding_arguments_node
        []
      when :forwarding_parameter_node
        []
      when :forwarding_super_node
        [OptionalNodeField.new(:block)]
      when :global_variable_and_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :global_variable_operator_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
      when :global_variable_or_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :global_variable_read_node
        [ConstantField.new(:name)]
      when :global_variable_target_node
        [ConstantField.new(:name)]
      when :global_variable_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
      when :hash_node
        [LocationField.new(:opening_loc), NodeListField.new(:elements), LocationField.new(:closing_loc)]
      when :hash_pattern_node
        [OptionalNodeField.new(:constant), NodeListField.new(:elements), OptionalNodeField.new(:rest), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:closing_loc)]
      when :if_node
        [OptionalLocationField.new(:if_keyword_loc), NodeField.new(:predicate), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:subsequent), OptionalLocationField.new(:end_keyword_loc)]
      when :imaginary_node
        [NodeField.new(:numeric)]
      when :implicit_node
        [NodeField.new(:value)]
      when :implicit_rest_node
        []
      when :in_node
        [NodeField.new(:pattern), OptionalNodeField.new(:statements), LocationField.new(:in_loc), OptionalLocationField.new(:then_loc)]
      when :index_and_write_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :index_operator_write_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block), ConstantField.new(:binary_operator), LocationField.new(:binary_operator_loc), NodeField.new(:value)]
      when :index_or_write_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), OptionalNodeField.new(:receiver), OptionalLocationField.new(:call_operator_loc), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :index_target_node
        [FlagsField.new(:flags, [:safe_navigation?, :variable_call?, :attribute_write?, :ignore_visibility?]), NodeField.new(:receiver), LocationField.new(:opening_loc), OptionalNodeField.new(:arguments), LocationField.new(:closing_loc), OptionalNodeField.new(:block)]
      when :instance_variable_and_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :instance_variable_operator_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:binary_operator)]
      when :instance_variable_or_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :instance_variable_read_node
        [ConstantField.new(:name)]
      when :instance_variable_target_node
        [ConstantField.new(:name)]
      when :instance_variable_write_node
        [ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
      when :integer_node
        [FlagsField.new(:flags, [:binary?, :decimal?, :octal?, :hexadecimal?]), IntegerField.new(:value)]
      when :interpolated_match_last_line_node
        [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), NodeListField.new(:parts), LocationField.new(:closing_loc)]
      when :interpolated_regular_expression_node
        [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), NodeListField.new(:parts), LocationField.new(:closing_loc)]
      when :interpolated_string_node
        [FlagsField.new(:flags, [:frozen?, :mutable?]), OptionalLocationField.new(:opening_loc), NodeListField.new(:parts), OptionalLocationField.new(:closing_loc)]
      when :interpolated_symbol_node
        [OptionalLocationField.new(:opening_loc), NodeListField.new(:parts), OptionalLocationField.new(:closing_loc)]
      when :interpolated_x_string_node
        [LocationField.new(:opening_loc), NodeListField.new(:parts), LocationField.new(:closing_loc)]
      when :it_local_variable_read_node
        []
      when :it_parameters_node
        []
      when :keyword_hash_node
        [FlagsField.new(:flags, [:symbol_keys?]), NodeListField.new(:elements)]
      when :keyword_rest_parameter_node
        [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
      when :lambda_node
        [ConstantListField.new(:locals), LocationField.new(:operator_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc), OptionalNodeField.new(:parameters), OptionalNodeField.new(:body)]
      when :local_variable_and_write_node
        [LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:name), IntegerField.new(:depth)]
      when :local_variable_operator_write_node
        [LocationField.new(:name_loc), LocationField.new(:binary_operator_loc), NodeField.new(:value), ConstantField.new(:name), ConstantField.new(:binary_operator), IntegerField.new(:depth)]
      when :local_variable_or_write_node
        [LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value), ConstantField.new(:name), IntegerField.new(:depth)]
      when :local_variable_read_node
        [ConstantField.new(:name), IntegerField.new(:depth)]
      when :local_variable_target_node
        [ConstantField.new(:name), IntegerField.new(:depth)]
      when :local_variable_write_node
        [ConstantField.new(:name), IntegerField.new(:depth), LocationField.new(:name_loc), NodeField.new(:value), LocationField.new(:operator_loc)]
      when :match_last_line_node
        [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), LocationField.new(:content_loc), LocationField.new(:closing_loc), StringField.new(:unescaped)]
      when :match_predicate_node
        [NodeField.new(:value), NodeField.new(:pattern), LocationField.new(:operator_loc)]
      when :match_required_node
        [NodeField.new(:value), NodeField.new(:pattern), LocationField.new(:operator_loc)]
      when :match_write_node
        [NodeField.new(:call), NodeListField.new(:targets)]
      when :missing_node
        []
      when :module_node
        [ConstantListField.new(:locals), LocationField.new(:module_keyword_loc), NodeField.new(:constant_path), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc), ConstantField.new(:name)]
      when :multi_target_node
        [NodeListField.new(:lefts), OptionalNodeField.new(:rest), NodeListField.new(:rights), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc)]
      when :multi_write_node
        [NodeListField.new(:lefts), OptionalNodeField.new(:rest), NodeListField.new(:rights), OptionalLocationField.new(:lparen_loc), OptionalLocationField.new(:rparen_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :next_node
        [OptionalNodeField.new(:arguments), LocationField.new(:keyword_loc)]
      when :nil_node
        []
      when :no_keywords_parameter_node
        [LocationField.new(:operator_loc), LocationField.new(:keyword_loc)]
      when :numbered_parameters_node
        [IntegerField.new(:maximum)]
      when :numbered_reference_read_node
        [IntegerField.new(:number)]
      when :optional_keyword_parameter_node
        [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc), NodeField.new(:value)]
      when :optional_parameter_node
        [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc), LocationField.new(:operator_loc), NodeField.new(:value)]
      when :or_node
        [NodeField.new(:left), NodeField.new(:right), LocationField.new(:operator_loc)]
      when :parameters_node
        [NodeListField.new(:requireds), NodeListField.new(:optionals), OptionalNodeField.new(:rest), NodeListField.new(:posts), NodeListField.new(:keywords), OptionalNodeField.new(:keyword_rest), OptionalNodeField.new(:block)]
      when :parentheses_node
        [OptionalNodeField.new(:body), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
      when :pinned_expression_node
        [NodeField.new(:expression), LocationField.new(:operator_loc), LocationField.new(:lparen_loc), LocationField.new(:rparen_loc)]
      when :pinned_variable_node
        [NodeField.new(:variable), LocationField.new(:operator_loc)]
      when :post_execution_node
        [OptionalNodeField.new(:statements), LocationField.new(:keyword_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
      when :pre_execution_node
        [OptionalNodeField.new(:statements), LocationField.new(:keyword_loc), LocationField.new(:opening_loc), LocationField.new(:closing_loc)]
      when :program_node
        [ConstantListField.new(:locals), NodeField.new(:statements)]
      when :range_node
        [FlagsField.new(:flags, [:exclude_end?]), OptionalNodeField.new(:left), OptionalNodeField.new(:right), LocationField.new(:operator_loc)]
      when :rational_node
        [FlagsField.new(:flags, [:binary?, :decimal?, :octal?, :hexadecimal?]), IntegerField.new(:numerator), IntegerField.new(:denominator)]
      when :redo_node
        []
      when :regular_expression_node
        [FlagsField.new(:flags, [:ignore_case?, :extended?, :multi_line?, :once?, :euc_jp?, :ascii_8bit?, :windows_31j?, :utf_8?, :forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), LocationField.new(:opening_loc), LocationField.new(:content_loc), LocationField.new(:closing_loc), StringField.new(:unescaped)]
      when :required_keyword_parameter_node
        [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name), LocationField.new(:name_loc)]
      when :required_parameter_node
        [FlagsField.new(:flags, [:repeated_parameter?]), ConstantField.new(:name)]
      when :rescue_modifier_node
        [NodeField.new(:expression), LocationField.new(:keyword_loc), NodeField.new(:rescue_expression)]
      when :rescue_node
        [LocationField.new(:keyword_loc), NodeListField.new(:exceptions), OptionalLocationField.new(:operator_loc), OptionalNodeField.new(:reference), OptionalNodeField.new(:statements), OptionalNodeField.new(:subsequent)]
      when :rest_parameter_node
        [FlagsField.new(:flags, [:repeated_parameter?]), OptionalConstantField.new(:name), OptionalLocationField.new(:name_loc), LocationField.new(:operator_loc)]
      when :retry_node
        []
      when :return_node
        [LocationField.new(:keyword_loc), OptionalNodeField.new(:arguments)]
      when :self_node
        []
      when :shareable_constant_node
        [FlagsField.new(:flags, [:literal?, :experimental_everything?, :experimental_copy?]), NodeField.new(:write)]
      when :singleton_class_node
        [ConstantListField.new(:locals), LocationField.new(:class_keyword_loc), LocationField.new(:operator_loc), NodeField.new(:expression), OptionalNodeField.new(:body), LocationField.new(:end_keyword_loc)]
      when :source_encoding_node
        []
      when :source_file_node
        [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?, :frozen?, :mutable?]), StringField.new(:filepath)]
      when :source_line_node
        []
      when :splat_node
        [LocationField.new(:operator_loc), OptionalNodeField.new(:expression)]
      when :statements_node
        [NodeListField.new(:body)]
      when :string_node
        [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?, :frozen?, :mutable?]), OptionalLocationField.new(:opening_loc), LocationField.new(:content_loc), OptionalLocationField.new(:closing_loc), StringField.new(:unescaped)]
      when :super_node
        [LocationField.new(:keyword_loc), OptionalLocationField.new(:lparen_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:rparen_loc), OptionalNodeField.new(:block)]
      when :symbol_node
        [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?, :forced_us_ascii_encoding?]), OptionalLocationField.new(:opening_loc), OptionalLocationField.new(:value_loc), OptionalLocationField.new(:closing_loc), StringField.new(:unescaped)]
      when :true_node
        []
      when :undef_node
        [NodeListField.new(:names), LocationField.new(:keyword_loc)]
      when :unless_node
        [LocationField.new(:keyword_loc), NodeField.new(:predicate), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements), OptionalNodeField.new(:else_clause), OptionalLocationField.new(:end_keyword_loc)]
      when :until_node
        [FlagsField.new(:flags, [:begin_modifier?]), LocationField.new(:keyword_loc), OptionalLocationField.new(:do_keyword_loc), OptionalLocationField.new(:closing_loc), NodeField.new(:predicate), OptionalNodeField.new(:statements)]
      when :when_node
        [LocationField.new(:keyword_loc), NodeListField.new(:conditions), OptionalLocationField.new(:then_keyword_loc), OptionalNodeField.new(:statements)]
      when :while_node
        [FlagsField.new(:flags, [:begin_modifier?]), LocationField.new(:keyword_loc), OptionalLocationField.new(:do_keyword_loc), OptionalLocationField.new(:closing_loc), NodeField.new(:predicate), OptionalNodeField.new(:statements)]
      when :x_string_node
        [FlagsField.new(:flags, [:forced_utf8_encoding?, :forced_binary_encoding?]), LocationField.new(:opening_loc), LocationField.new(:content_loc), LocationField.new(:closing_loc), StringField.new(:unescaped)]
      when :yield_node
        [LocationField.new(:keyword_loc), OptionalLocationField.new(:lparen_loc), OptionalNodeField.new(:arguments), OptionalLocationField.new(:rparen_loc)]
      else
        raise "Unknown node type: #{node.type.inspect}"
      end
    end
  end
end
PK*J[@c���share/ruby/prism/dispatcher.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/dispatcher.rb.erb
if you are looking to modify the template
=end

module Prism
  # The dispatcher class fires events for nodes that are found while walking an
  # AST to all registered listeners. It's useful for performing different types
  # of analysis on the AST while only having to walk the tree once.
  #
  # To use the dispatcher, you would first instantiate it and register listeners
  # for the events you're interested in:
  #
  #     class OctalListener
  #       def on_integer_node_enter(node)
  #         if node.octal? && !node.slice.start_with?("0o")
  #           warn("Octal integers should be written with the 0o prefix")
  #         end
  #       end
  #     end
  #
  #     listener = OctalListener.new
  #     dispatcher = Prism::Dispatcher.new
  #     dispatcher.register(listener, :on_integer_node_enter)
  #
  # Then, you can walk any number of trees and dispatch events to the listeners:
  #
  #     result = Prism.parse("001 + 002 + 003")
  #     dispatcher.dispatch(result.value)
  #
  # Optionally, you can also use `#dispatch_once` to dispatch enter and leave
  # events for a single node without recursing further down the tree. This can
  # be useful in circumstances where you want to reuse the listeners you already
  # have registers but want to stop walking the tree at a certain point.
  #
  #     integer = result.value.statements.body.first.receiver.receiver
  #     dispatcher.dispatch_once(integer)
  #
  class Dispatcher < Visitor
    # attr_reader listeners: Hash[Symbol, Array[Listener]]
    attr_reader :listeners

    # Initialize a new dispatcher.
    def initialize
      @listeners = {}
    end

    # Register a listener for one or more events.
    #
    # def register: (Listener, *Symbol) -> void
    def register(listener, *events)
      events.each { |event| (listeners[event] ||= []) << listener }
    end

    # Walks `root` dispatching events to all registered listeners.
    #
    # def dispatch: (Node) -> void
    alias dispatch visit

    # Dispatches a single event for `node` to all registered listeners.
    #
    # def dispatch_once: (Node) -> void
    def dispatch_once(node)
      node.accept(DispatchOnce.new(listeners))
    end

    # Dispatch enter and leave events for AliasGlobalVariableNode nodes and continue
    # walking the tree.
    def visit_alias_global_variable_node(node)
      listeners[:on_alias_global_variable_node_enter]&.each { |listener| listener.on_alias_global_variable_node_enter(node) }
      super
      listeners[:on_alias_global_variable_node_leave]&.each { |listener| listener.on_alias_global_variable_node_leave(node) }
    end

    # Dispatch enter and leave events for AliasMethodNode nodes and continue
    # walking the tree.
    def visit_alias_method_node(node)
      listeners[:on_alias_method_node_enter]&.each { |listener| listener.on_alias_method_node_enter(node) }
      super
      listeners[:on_alias_method_node_leave]&.each { |listener| listener.on_alias_method_node_leave(node) }
    end

    # Dispatch enter and leave events for AlternationPatternNode nodes and continue
    # walking the tree.
    def visit_alternation_pattern_node(node)
      listeners[:on_alternation_pattern_node_enter]&.each { |listener| listener.on_alternation_pattern_node_enter(node) }
      super
      listeners[:on_alternation_pattern_node_leave]&.each { |listener| listener.on_alternation_pattern_node_leave(node) }
    end

    # Dispatch enter and leave events for AndNode nodes and continue
    # walking the tree.
    def visit_and_node(node)
      listeners[:on_and_node_enter]&.each { |listener| listener.on_and_node_enter(node) }
      super
      listeners[:on_and_node_leave]&.each { |listener| listener.on_and_node_leave(node) }
    end

    # Dispatch enter and leave events for ArgumentsNode nodes and continue
    # walking the tree.
    def visit_arguments_node(node)
      listeners[:on_arguments_node_enter]&.each { |listener| listener.on_arguments_node_enter(node) }
      super
      listeners[:on_arguments_node_leave]&.each { |listener| listener.on_arguments_node_leave(node) }
    end

    # Dispatch enter and leave events for ArrayNode nodes and continue
    # walking the tree.
    def visit_array_node(node)
      listeners[:on_array_node_enter]&.each { |listener| listener.on_array_node_enter(node) }
      super
      listeners[:on_array_node_leave]&.each { |listener| listener.on_array_node_leave(node) }
    end

    # Dispatch enter and leave events for ArrayPatternNode nodes and continue
    # walking the tree.
    def visit_array_pattern_node(node)
      listeners[:on_array_pattern_node_enter]&.each { |listener| listener.on_array_pattern_node_enter(node) }
      super
      listeners[:on_array_pattern_node_leave]&.each { |listener| listener.on_array_pattern_node_leave(node) }
    end

    # Dispatch enter and leave events for AssocNode nodes and continue
    # walking the tree.
    def visit_assoc_node(node)
      listeners[:on_assoc_node_enter]&.each { |listener| listener.on_assoc_node_enter(node) }
      super
      listeners[:on_assoc_node_leave]&.each { |listener| listener.on_assoc_node_leave(node) }
    end

    # Dispatch enter and leave events for AssocSplatNode nodes and continue
    # walking the tree.
    def visit_assoc_splat_node(node)
      listeners[:on_assoc_splat_node_enter]&.each { |listener| listener.on_assoc_splat_node_enter(node) }
      super
      listeners[:on_assoc_splat_node_leave]&.each { |listener| listener.on_assoc_splat_node_leave(node) }
    end

    # Dispatch enter and leave events for BackReferenceReadNode nodes and continue
    # walking the tree.
    def visit_back_reference_read_node(node)
      listeners[:on_back_reference_read_node_enter]&.each { |listener| listener.on_back_reference_read_node_enter(node) }
      super
      listeners[:on_back_reference_read_node_leave]&.each { |listener| listener.on_back_reference_read_node_leave(node) }
    end

    # Dispatch enter and leave events for BeginNode nodes and continue
    # walking the tree.
    def visit_begin_node(node)
      listeners[:on_begin_node_enter]&.each { |listener| listener.on_begin_node_enter(node) }
      super
      listeners[:on_begin_node_leave]&.each { |listener| listener.on_begin_node_leave(node) }
    end

    # Dispatch enter and leave events for BlockArgumentNode nodes and continue
    # walking the tree.
    def visit_block_argument_node(node)
      listeners[:on_block_argument_node_enter]&.each { |listener| listener.on_block_argument_node_enter(node) }
      super
      listeners[:on_block_argument_node_leave]&.each { |listener| listener.on_block_argument_node_leave(node) }
    end

    # Dispatch enter and leave events for BlockLocalVariableNode nodes and continue
    # walking the tree.
    def visit_block_local_variable_node(node)
      listeners[:on_block_local_variable_node_enter]&.each { |listener| listener.on_block_local_variable_node_enter(node) }
      super
      listeners[:on_block_local_variable_node_leave]&.each { |listener| listener.on_block_local_variable_node_leave(node) }
    end

    # Dispatch enter and leave events for BlockNode nodes and continue
    # walking the tree.
    def visit_block_node(node)
      listeners[:on_block_node_enter]&.each { |listener| listener.on_block_node_enter(node) }
      super
      listeners[:on_block_node_leave]&.each { |listener| listener.on_block_node_leave(node) }
    end

    # Dispatch enter and leave events for BlockParameterNode nodes and continue
    # walking the tree.
    def visit_block_parameter_node(node)
      listeners[:on_block_parameter_node_enter]&.each { |listener| listener.on_block_parameter_node_enter(node) }
      super
      listeners[:on_block_parameter_node_leave]&.each { |listener| listener.on_block_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for BlockParametersNode nodes and continue
    # walking the tree.
    def visit_block_parameters_node(node)
      listeners[:on_block_parameters_node_enter]&.each { |listener| listener.on_block_parameters_node_enter(node) }
      super
      listeners[:on_block_parameters_node_leave]&.each { |listener| listener.on_block_parameters_node_leave(node) }
    end

    # Dispatch enter and leave events for BreakNode nodes and continue
    # walking the tree.
    def visit_break_node(node)
      listeners[:on_break_node_enter]&.each { |listener| listener.on_break_node_enter(node) }
      super
      listeners[:on_break_node_leave]&.each { |listener| listener.on_break_node_leave(node) }
    end

    # Dispatch enter and leave events for CallAndWriteNode nodes and continue
    # walking the tree.
    def visit_call_and_write_node(node)
      listeners[:on_call_and_write_node_enter]&.each { |listener| listener.on_call_and_write_node_enter(node) }
      super
      listeners[:on_call_and_write_node_leave]&.each { |listener| listener.on_call_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for CallNode nodes and continue
    # walking the tree.
    def visit_call_node(node)
      listeners[:on_call_node_enter]&.each { |listener| listener.on_call_node_enter(node) }
      super
      listeners[:on_call_node_leave]&.each { |listener| listener.on_call_node_leave(node) }
    end

    # Dispatch enter and leave events for CallOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_call_operator_write_node(node)
      listeners[:on_call_operator_write_node_enter]&.each { |listener| listener.on_call_operator_write_node_enter(node) }
      super
      listeners[:on_call_operator_write_node_leave]&.each { |listener| listener.on_call_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for CallOrWriteNode nodes and continue
    # walking the tree.
    def visit_call_or_write_node(node)
      listeners[:on_call_or_write_node_enter]&.each { |listener| listener.on_call_or_write_node_enter(node) }
      super
      listeners[:on_call_or_write_node_leave]&.each { |listener| listener.on_call_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for CallTargetNode nodes and continue
    # walking the tree.
    def visit_call_target_node(node)
      listeners[:on_call_target_node_enter]&.each { |listener| listener.on_call_target_node_enter(node) }
      super
      listeners[:on_call_target_node_leave]&.each { |listener| listener.on_call_target_node_leave(node) }
    end

    # Dispatch enter and leave events for CapturePatternNode nodes and continue
    # walking the tree.
    def visit_capture_pattern_node(node)
      listeners[:on_capture_pattern_node_enter]&.each { |listener| listener.on_capture_pattern_node_enter(node) }
      super
      listeners[:on_capture_pattern_node_leave]&.each { |listener| listener.on_capture_pattern_node_leave(node) }
    end

    # Dispatch enter and leave events for CaseMatchNode nodes and continue
    # walking the tree.
    def visit_case_match_node(node)
      listeners[:on_case_match_node_enter]&.each { |listener| listener.on_case_match_node_enter(node) }
      super
      listeners[:on_case_match_node_leave]&.each { |listener| listener.on_case_match_node_leave(node) }
    end

    # Dispatch enter and leave events for CaseNode nodes and continue
    # walking the tree.
    def visit_case_node(node)
      listeners[:on_case_node_enter]&.each { |listener| listener.on_case_node_enter(node) }
      super
      listeners[:on_case_node_leave]&.each { |listener| listener.on_case_node_leave(node) }
    end

    # Dispatch enter and leave events for ClassNode nodes and continue
    # walking the tree.
    def visit_class_node(node)
      listeners[:on_class_node_enter]&.each { |listener| listener.on_class_node_enter(node) }
      super
      listeners[:on_class_node_leave]&.each { |listener| listener.on_class_node_leave(node) }
    end

    # Dispatch enter and leave events for ClassVariableAndWriteNode nodes and continue
    # walking the tree.
    def visit_class_variable_and_write_node(node)
      listeners[:on_class_variable_and_write_node_enter]&.each { |listener| listener.on_class_variable_and_write_node_enter(node) }
      super
      listeners[:on_class_variable_and_write_node_leave]&.each { |listener| listener.on_class_variable_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ClassVariableOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_class_variable_operator_write_node(node)
      listeners[:on_class_variable_operator_write_node_enter]&.each { |listener| listener.on_class_variable_operator_write_node_enter(node) }
      super
      listeners[:on_class_variable_operator_write_node_leave]&.each { |listener| listener.on_class_variable_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ClassVariableOrWriteNode nodes and continue
    # walking the tree.
    def visit_class_variable_or_write_node(node)
      listeners[:on_class_variable_or_write_node_enter]&.each { |listener| listener.on_class_variable_or_write_node_enter(node) }
      super
      listeners[:on_class_variable_or_write_node_leave]&.each { |listener| listener.on_class_variable_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ClassVariableReadNode nodes and continue
    # walking the tree.
    def visit_class_variable_read_node(node)
      listeners[:on_class_variable_read_node_enter]&.each { |listener| listener.on_class_variable_read_node_enter(node) }
      super
      listeners[:on_class_variable_read_node_leave]&.each { |listener| listener.on_class_variable_read_node_leave(node) }
    end

    # Dispatch enter and leave events for ClassVariableTargetNode nodes and continue
    # walking the tree.
    def visit_class_variable_target_node(node)
      listeners[:on_class_variable_target_node_enter]&.each { |listener| listener.on_class_variable_target_node_enter(node) }
      super
      listeners[:on_class_variable_target_node_leave]&.each { |listener| listener.on_class_variable_target_node_leave(node) }
    end

    # Dispatch enter and leave events for ClassVariableWriteNode nodes and continue
    # walking the tree.
    def visit_class_variable_write_node(node)
      listeners[:on_class_variable_write_node_enter]&.each { |listener| listener.on_class_variable_write_node_enter(node) }
      super
      listeners[:on_class_variable_write_node_leave]&.each { |listener| listener.on_class_variable_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantAndWriteNode nodes and continue
    # walking the tree.
    def visit_constant_and_write_node(node)
      listeners[:on_constant_and_write_node_enter]&.each { |listener| listener.on_constant_and_write_node_enter(node) }
      super
      listeners[:on_constant_and_write_node_leave]&.each { |listener| listener.on_constant_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_constant_operator_write_node(node)
      listeners[:on_constant_operator_write_node_enter]&.each { |listener| listener.on_constant_operator_write_node_enter(node) }
      super
      listeners[:on_constant_operator_write_node_leave]&.each { |listener| listener.on_constant_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantOrWriteNode nodes and continue
    # walking the tree.
    def visit_constant_or_write_node(node)
      listeners[:on_constant_or_write_node_enter]&.each { |listener| listener.on_constant_or_write_node_enter(node) }
      super
      listeners[:on_constant_or_write_node_leave]&.each { |listener| listener.on_constant_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantPathAndWriteNode nodes and continue
    # walking the tree.
    def visit_constant_path_and_write_node(node)
      listeners[:on_constant_path_and_write_node_enter]&.each { |listener| listener.on_constant_path_and_write_node_enter(node) }
      super
      listeners[:on_constant_path_and_write_node_leave]&.each { |listener| listener.on_constant_path_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantPathNode nodes and continue
    # walking the tree.
    def visit_constant_path_node(node)
      listeners[:on_constant_path_node_enter]&.each { |listener| listener.on_constant_path_node_enter(node) }
      super
      listeners[:on_constant_path_node_leave]&.each { |listener| listener.on_constant_path_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantPathOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_constant_path_operator_write_node(node)
      listeners[:on_constant_path_operator_write_node_enter]&.each { |listener| listener.on_constant_path_operator_write_node_enter(node) }
      super
      listeners[:on_constant_path_operator_write_node_leave]&.each { |listener| listener.on_constant_path_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantPathOrWriteNode nodes and continue
    # walking the tree.
    def visit_constant_path_or_write_node(node)
      listeners[:on_constant_path_or_write_node_enter]&.each { |listener| listener.on_constant_path_or_write_node_enter(node) }
      super
      listeners[:on_constant_path_or_write_node_leave]&.each { |listener| listener.on_constant_path_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantPathTargetNode nodes and continue
    # walking the tree.
    def visit_constant_path_target_node(node)
      listeners[:on_constant_path_target_node_enter]&.each { |listener| listener.on_constant_path_target_node_enter(node) }
      super
      listeners[:on_constant_path_target_node_leave]&.each { |listener| listener.on_constant_path_target_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantPathWriteNode nodes and continue
    # walking the tree.
    def visit_constant_path_write_node(node)
      listeners[:on_constant_path_write_node_enter]&.each { |listener| listener.on_constant_path_write_node_enter(node) }
      super
      listeners[:on_constant_path_write_node_leave]&.each { |listener| listener.on_constant_path_write_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantReadNode nodes and continue
    # walking the tree.
    def visit_constant_read_node(node)
      listeners[:on_constant_read_node_enter]&.each { |listener| listener.on_constant_read_node_enter(node) }
      super
      listeners[:on_constant_read_node_leave]&.each { |listener| listener.on_constant_read_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantTargetNode nodes and continue
    # walking the tree.
    def visit_constant_target_node(node)
      listeners[:on_constant_target_node_enter]&.each { |listener| listener.on_constant_target_node_enter(node) }
      super
      listeners[:on_constant_target_node_leave]&.each { |listener| listener.on_constant_target_node_leave(node) }
    end

    # Dispatch enter and leave events for ConstantWriteNode nodes and continue
    # walking the tree.
    def visit_constant_write_node(node)
      listeners[:on_constant_write_node_enter]&.each { |listener| listener.on_constant_write_node_enter(node) }
      super
      listeners[:on_constant_write_node_leave]&.each { |listener| listener.on_constant_write_node_leave(node) }
    end

    # Dispatch enter and leave events for DefNode nodes and continue
    # walking the tree.
    def visit_def_node(node)
      listeners[:on_def_node_enter]&.each { |listener| listener.on_def_node_enter(node) }
      super
      listeners[:on_def_node_leave]&.each { |listener| listener.on_def_node_leave(node) }
    end

    # Dispatch enter and leave events for DefinedNode nodes and continue
    # walking the tree.
    def visit_defined_node(node)
      listeners[:on_defined_node_enter]&.each { |listener| listener.on_defined_node_enter(node) }
      super
      listeners[:on_defined_node_leave]&.each { |listener| listener.on_defined_node_leave(node) }
    end

    # Dispatch enter and leave events for ElseNode nodes and continue
    # walking the tree.
    def visit_else_node(node)
      listeners[:on_else_node_enter]&.each { |listener| listener.on_else_node_enter(node) }
      super
      listeners[:on_else_node_leave]&.each { |listener| listener.on_else_node_leave(node) }
    end

    # Dispatch enter and leave events for EmbeddedStatementsNode nodes and continue
    # walking the tree.
    def visit_embedded_statements_node(node)
      listeners[:on_embedded_statements_node_enter]&.each { |listener| listener.on_embedded_statements_node_enter(node) }
      super
      listeners[:on_embedded_statements_node_leave]&.each { |listener| listener.on_embedded_statements_node_leave(node) }
    end

    # Dispatch enter and leave events for EmbeddedVariableNode nodes and continue
    # walking the tree.
    def visit_embedded_variable_node(node)
      listeners[:on_embedded_variable_node_enter]&.each { |listener| listener.on_embedded_variable_node_enter(node) }
      super
      listeners[:on_embedded_variable_node_leave]&.each { |listener| listener.on_embedded_variable_node_leave(node) }
    end

    # Dispatch enter and leave events for EnsureNode nodes and continue
    # walking the tree.
    def visit_ensure_node(node)
      listeners[:on_ensure_node_enter]&.each { |listener| listener.on_ensure_node_enter(node) }
      super
      listeners[:on_ensure_node_leave]&.each { |listener| listener.on_ensure_node_leave(node) }
    end

    # Dispatch enter and leave events for FalseNode nodes and continue
    # walking the tree.
    def visit_false_node(node)
      listeners[:on_false_node_enter]&.each { |listener| listener.on_false_node_enter(node) }
      super
      listeners[:on_false_node_leave]&.each { |listener| listener.on_false_node_leave(node) }
    end

    # Dispatch enter and leave events for FindPatternNode nodes and continue
    # walking the tree.
    def visit_find_pattern_node(node)
      listeners[:on_find_pattern_node_enter]&.each { |listener| listener.on_find_pattern_node_enter(node) }
      super
      listeners[:on_find_pattern_node_leave]&.each { |listener| listener.on_find_pattern_node_leave(node) }
    end

    # Dispatch enter and leave events for FlipFlopNode nodes and continue
    # walking the tree.
    def visit_flip_flop_node(node)
      listeners[:on_flip_flop_node_enter]&.each { |listener| listener.on_flip_flop_node_enter(node) }
      super
      listeners[:on_flip_flop_node_leave]&.each { |listener| listener.on_flip_flop_node_leave(node) }
    end

    # Dispatch enter and leave events for FloatNode nodes and continue
    # walking the tree.
    def visit_float_node(node)
      listeners[:on_float_node_enter]&.each { |listener| listener.on_float_node_enter(node) }
      super
      listeners[:on_float_node_leave]&.each { |listener| listener.on_float_node_leave(node) }
    end

    # Dispatch enter and leave events for ForNode nodes and continue
    # walking the tree.
    def visit_for_node(node)
      listeners[:on_for_node_enter]&.each { |listener| listener.on_for_node_enter(node) }
      super
      listeners[:on_for_node_leave]&.each { |listener| listener.on_for_node_leave(node) }
    end

    # Dispatch enter and leave events for ForwardingArgumentsNode nodes and continue
    # walking the tree.
    def visit_forwarding_arguments_node(node)
      listeners[:on_forwarding_arguments_node_enter]&.each { |listener| listener.on_forwarding_arguments_node_enter(node) }
      super
      listeners[:on_forwarding_arguments_node_leave]&.each { |listener| listener.on_forwarding_arguments_node_leave(node) }
    end

    # Dispatch enter and leave events for ForwardingParameterNode nodes and continue
    # walking the tree.
    def visit_forwarding_parameter_node(node)
      listeners[:on_forwarding_parameter_node_enter]&.each { |listener| listener.on_forwarding_parameter_node_enter(node) }
      super
      listeners[:on_forwarding_parameter_node_leave]&.each { |listener| listener.on_forwarding_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for ForwardingSuperNode nodes and continue
    # walking the tree.
    def visit_forwarding_super_node(node)
      listeners[:on_forwarding_super_node_enter]&.each { |listener| listener.on_forwarding_super_node_enter(node) }
      super
      listeners[:on_forwarding_super_node_leave]&.each { |listener| listener.on_forwarding_super_node_leave(node) }
    end

    # Dispatch enter and leave events for GlobalVariableAndWriteNode nodes and continue
    # walking the tree.
    def visit_global_variable_and_write_node(node)
      listeners[:on_global_variable_and_write_node_enter]&.each { |listener| listener.on_global_variable_and_write_node_enter(node) }
      super
      listeners[:on_global_variable_and_write_node_leave]&.each { |listener| listener.on_global_variable_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for GlobalVariableOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_global_variable_operator_write_node(node)
      listeners[:on_global_variable_operator_write_node_enter]&.each { |listener| listener.on_global_variable_operator_write_node_enter(node) }
      super
      listeners[:on_global_variable_operator_write_node_leave]&.each { |listener| listener.on_global_variable_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for GlobalVariableOrWriteNode nodes and continue
    # walking the tree.
    def visit_global_variable_or_write_node(node)
      listeners[:on_global_variable_or_write_node_enter]&.each { |listener| listener.on_global_variable_or_write_node_enter(node) }
      super
      listeners[:on_global_variable_or_write_node_leave]&.each { |listener| listener.on_global_variable_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for GlobalVariableReadNode nodes and continue
    # walking the tree.
    def visit_global_variable_read_node(node)
      listeners[:on_global_variable_read_node_enter]&.each { |listener| listener.on_global_variable_read_node_enter(node) }
      super
      listeners[:on_global_variable_read_node_leave]&.each { |listener| listener.on_global_variable_read_node_leave(node) }
    end

    # Dispatch enter and leave events for GlobalVariableTargetNode nodes and continue
    # walking the tree.
    def visit_global_variable_target_node(node)
      listeners[:on_global_variable_target_node_enter]&.each { |listener| listener.on_global_variable_target_node_enter(node) }
      super
      listeners[:on_global_variable_target_node_leave]&.each { |listener| listener.on_global_variable_target_node_leave(node) }
    end

    # Dispatch enter and leave events for GlobalVariableWriteNode nodes and continue
    # walking the tree.
    def visit_global_variable_write_node(node)
      listeners[:on_global_variable_write_node_enter]&.each { |listener| listener.on_global_variable_write_node_enter(node) }
      super
      listeners[:on_global_variable_write_node_leave]&.each { |listener| listener.on_global_variable_write_node_leave(node) }
    end

    # Dispatch enter and leave events for HashNode nodes and continue
    # walking the tree.
    def visit_hash_node(node)
      listeners[:on_hash_node_enter]&.each { |listener| listener.on_hash_node_enter(node) }
      super
      listeners[:on_hash_node_leave]&.each { |listener| listener.on_hash_node_leave(node) }
    end

    # Dispatch enter and leave events for HashPatternNode nodes and continue
    # walking the tree.
    def visit_hash_pattern_node(node)
      listeners[:on_hash_pattern_node_enter]&.each { |listener| listener.on_hash_pattern_node_enter(node) }
      super
      listeners[:on_hash_pattern_node_leave]&.each { |listener| listener.on_hash_pattern_node_leave(node) }
    end

    # Dispatch enter and leave events for IfNode nodes and continue
    # walking the tree.
    def visit_if_node(node)
      listeners[:on_if_node_enter]&.each { |listener| listener.on_if_node_enter(node) }
      super
      listeners[:on_if_node_leave]&.each { |listener| listener.on_if_node_leave(node) }
    end

    # Dispatch enter and leave events for ImaginaryNode nodes and continue
    # walking the tree.
    def visit_imaginary_node(node)
      listeners[:on_imaginary_node_enter]&.each { |listener| listener.on_imaginary_node_enter(node) }
      super
      listeners[:on_imaginary_node_leave]&.each { |listener| listener.on_imaginary_node_leave(node) }
    end

    # Dispatch enter and leave events for ImplicitNode nodes and continue
    # walking the tree.
    def visit_implicit_node(node)
      listeners[:on_implicit_node_enter]&.each { |listener| listener.on_implicit_node_enter(node) }
      super
      listeners[:on_implicit_node_leave]&.each { |listener| listener.on_implicit_node_leave(node) }
    end

    # Dispatch enter and leave events for ImplicitRestNode nodes and continue
    # walking the tree.
    def visit_implicit_rest_node(node)
      listeners[:on_implicit_rest_node_enter]&.each { |listener| listener.on_implicit_rest_node_enter(node) }
      super
      listeners[:on_implicit_rest_node_leave]&.each { |listener| listener.on_implicit_rest_node_leave(node) }
    end

    # Dispatch enter and leave events for InNode nodes and continue
    # walking the tree.
    def visit_in_node(node)
      listeners[:on_in_node_enter]&.each { |listener| listener.on_in_node_enter(node) }
      super
      listeners[:on_in_node_leave]&.each { |listener| listener.on_in_node_leave(node) }
    end

    # Dispatch enter and leave events for IndexAndWriteNode nodes and continue
    # walking the tree.
    def visit_index_and_write_node(node)
      listeners[:on_index_and_write_node_enter]&.each { |listener| listener.on_index_and_write_node_enter(node) }
      super
      listeners[:on_index_and_write_node_leave]&.each { |listener| listener.on_index_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for IndexOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_index_operator_write_node(node)
      listeners[:on_index_operator_write_node_enter]&.each { |listener| listener.on_index_operator_write_node_enter(node) }
      super
      listeners[:on_index_operator_write_node_leave]&.each { |listener| listener.on_index_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for IndexOrWriteNode nodes and continue
    # walking the tree.
    def visit_index_or_write_node(node)
      listeners[:on_index_or_write_node_enter]&.each { |listener| listener.on_index_or_write_node_enter(node) }
      super
      listeners[:on_index_or_write_node_leave]&.each { |listener| listener.on_index_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for IndexTargetNode nodes and continue
    # walking the tree.
    def visit_index_target_node(node)
      listeners[:on_index_target_node_enter]&.each { |listener| listener.on_index_target_node_enter(node) }
      super
      listeners[:on_index_target_node_leave]&.each { |listener| listener.on_index_target_node_leave(node) }
    end

    # Dispatch enter and leave events for InstanceVariableAndWriteNode nodes and continue
    # walking the tree.
    def visit_instance_variable_and_write_node(node)
      listeners[:on_instance_variable_and_write_node_enter]&.each { |listener| listener.on_instance_variable_and_write_node_enter(node) }
      super
      listeners[:on_instance_variable_and_write_node_leave]&.each { |listener| listener.on_instance_variable_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for InstanceVariableOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_instance_variable_operator_write_node(node)
      listeners[:on_instance_variable_operator_write_node_enter]&.each { |listener| listener.on_instance_variable_operator_write_node_enter(node) }
      super
      listeners[:on_instance_variable_operator_write_node_leave]&.each { |listener| listener.on_instance_variable_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for InstanceVariableOrWriteNode nodes and continue
    # walking the tree.
    def visit_instance_variable_or_write_node(node)
      listeners[:on_instance_variable_or_write_node_enter]&.each { |listener| listener.on_instance_variable_or_write_node_enter(node) }
      super
      listeners[:on_instance_variable_or_write_node_leave]&.each { |listener| listener.on_instance_variable_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for InstanceVariableReadNode nodes and continue
    # walking the tree.
    def visit_instance_variable_read_node(node)
      listeners[:on_instance_variable_read_node_enter]&.each { |listener| listener.on_instance_variable_read_node_enter(node) }
      super
      listeners[:on_instance_variable_read_node_leave]&.each { |listener| listener.on_instance_variable_read_node_leave(node) }
    end

    # Dispatch enter and leave events for InstanceVariableTargetNode nodes and continue
    # walking the tree.
    def visit_instance_variable_target_node(node)
      listeners[:on_instance_variable_target_node_enter]&.each { |listener| listener.on_instance_variable_target_node_enter(node) }
      super
      listeners[:on_instance_variable_target_node_leave]&.each { |listener| listener.on_instance_variable_target_node_leave(node) }
    end

    # Dispatch enter and leave events for InstanceVariableWriteNode nodes and continue
    # walking the tree.
    def visit_instance_variable_write_node(node)
      listeners[:on_instance_variable_write_node_enter]&.each { |listener| listener.on_instance_variable_write_node_enter(node) }
      super
      listeners[:on_instance_variable_write_node_leave]&.each { |listener| listener.on_instance_variable_write_node_leave(node) }
    end

    # Dispatch enter and leave events for IntegerNode nodes and continue
    # walking the tree.
    def visit_integer_node(node)
      listeners[:on_integer_node_enter]&.each { |listener| listener.on_integer_node_enter(node) }
      super
      listeners[:on_integer_node_leave]&.each { |listener| listener.on_integer_node_leave(node) }
    end

    # Dispatch enter and leave events for InterpolatedMatchLastLineNode nodes and continue
    # walking the tree.
    def visit_interpolated_match_last_line_node(node)
      listeners[:on_interpolated_match_last_line_node_enter]&.each { |listener| listener.on_interpolated_match_last_line_node_enter(node) }
      super
      listeners[:on_interpolated_match_last_line_node_leave]&.each { |listener| listener.on_interpolated_match_last_line_node_leave(node) }
    end

    # Dispatch enter and leave events for InterpolatedRegularExpressionNode nodes and continue
    # walking the tree.
    def visit_interpolated_regular_expression_node(node)
      listeners[:on_interpolated_regular_expression_node_enter]&.each { |listener| listener.on_interpolated_regular_expression_node_enter(node) }
      super
      listeners[:on_interpolated_regular_expression_node_leave]&.each { |listener| listener.on_interpolated_regular_expression_node_leave(node) }
    end

    # Dispatch enter and leave events for InterpolatedStringNode nodes and continue
    # walking the tree.
    def visit_interpolated_string_node(node)
      listeners[:on_interpolated_string_node_enter]&.each { |listener| listener.on_interpolated_string_node_enter(node) }
      super
      listeners[:on_interpolated_string_node_leave]&.each { |listener| listener.on_interpolated_string_node_leave(node) }
    end

    # Dispatch enter and leave events for InterpolatedSymbolNode nodes and continue
    # walking the tree.
    def visit_interpolated_symbol_node(node)
      listeners[:on_interpolated_symbol_node_enter]&.each { |listener| listener.on_interpolated_symbol_node_enter(node) }
      super
      listeners[:on_interpolated_symbol_node_leave]&.each { |listener| listener.on_interpolated_symbol_node_leave(node) }
    end

    # Dispatch enter and leave events for InterpolatedXStringNode nodes and continue
    # walking the tree.
    def visit_interpolated_x_string_node(node)
      listeners[:on_interpolated_x_string_node_enter]&.each { |listener| listener.on_interpolated_x_string_node_enter(node) }
      super
      listeners[:on_interpolated_x_string_node_leave]&.each { |listener| listener.on_interpolated_x_string_node_leave(node) }
    end

    # Dispatch enter and leave events for ItLocalVariableReadNode nodes and continue
    # walking the tree.
    def visit_it_local_variable_read_node(node)
      listeners[:on_it_local_variable_read_node_enter]&.each { |listener| listener.on_it_local_variable_read_node_enter(node) }
      super
      listeners[:on_it_local_variable_read_node_leave]&.each { |listener| listener.on_it_local_variable_read_node_leave(node) }
    end

    # Dispatch enter and leave events for ItParametersNode nodes and continue
    # walking the tree.
    def visit_it_parameters_node(node)
      listeners[:on_it_parameters_node_enter]&.each { |listener| listener.on_it_parameters_node_enter(node) }
      super
      listeners[:on_it_parameters_node_leave]&.each { |listener| listener.on_it_parameters_node_leave(node) }
    end

    # Dispatch enter and leave events for KeywordHashNode nodes and continue
    # walking the tree.
    def visit_keyword_hash_node(node)
      listeners[:on_keyword_hash_node_enter]&.each { |listener| listener.on_keyword_hash_node_enter(node) }
      super
      listeners[:on_keyword_hash_node_leave]&.each { |listener| listener.on_keyword_hash_node_leave(node) }
    end

    # Dispatch enter and leave events for KeywordRestParameterNode nodes and continue
    # walking the tree.
    def visit_keyword_rest_parameter_node(node)
      listeners[:on_keyword_rest_parameter_node_enter]&.each { |listener| listener.on_keyword_rest_parameter_node_enter(node) }
      super
      listeners[:on_keyword_rest_parameter_node_leave]&.each { |listener| listener.on_keyword_rest_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for LambdaNode nodes and continue
    # walking the tree.
    def visit_lambda_node(node)
      listeners[:on_lambda_node_enter]&.each { |listener| listener.on_lambda_node_enter(node) }
      super
      listeners[:on_lambda_node_leave]&.each { |listener| listener.on_lambda_node_leave(node) }
    end

    # Dispatch enter and leave events for LocalVariableAndWriteNode nodes and continue
    # walking the tree.
    def visit_local_variable_and_write_node(node)
      listeners[:on_local_variable_and_write_node_enter]&.each { |listener| listener.on_local_variable_and_write_node_enter(node) }
      super
      listeners[:on_local_variable_and_write_node_leave]&.each { |listener| listener.on_local_variable_and_write_node_leave(node) }
    end

    # Dispatch enter and leave events for LocalVariableOperatorWriteNode nodes and continue
    # walking the tree.
    def visit_local_variable_operator_write_node(node)
      listeners[:on_local_variable_operator_write_node_enter]&.each { |listener| listener.on_local_variable_operator_write_node_enter(node) }
      super
      listeners[:on_local_variable_operator_write_node_leave]&.each { |listener| listener.on_local_variable_operator_write_node_leave(node) }
    end

    # Dispatch enter and leave events for LocalVariableOrWriteNode nodes and continue
    # walking the tree.
    def visit_local_variable_or_write_node(node)
      listeners[:on_local_variable_or_write_node_enter]&.each { |listener| listener.on_local_variable_or_write_node_enter(node) }
      super
      listeners[:on_local_variable_or_write_node_leave]&.each { |listener| listener.on_local_variable_or_write_node_leave(node) }
    end

    # Dispatch enter and leave events for LocalVariableReadNode nodes and continue
    # walking the tree.
    def visit_local_variable_read_node(node)
      listeners[:on_local_variable_read_node_enter]&.each { |listener| listener.on_local_variable_read_node_enter(node) }
      super
      listeners[:on_local_variable_read_node_leave]&.each { |listener| listener.on_local_variable_read_node_leave(node) }
    end

    # Dispatch enter and leave events for LocalVariableTargetNode nodes and continue
    # walking the tree.
    def visit_local_variable_target_node(node)
      listeners[:on_local_variable_target_node_enter]&.each { |listener| listener.on_local_variable_target_node_enter(node) }
      super
      listeners[:on_local_variable_target_node_leave]&.each { |listener| listener.on_local_variable_target_node_leave(node) }
    end

    # Dispatch enter and leave events for LocalVariableWriteNode nodes and continue
    # walking the tree.
    def visit_local_variable_write_node(node)
      listeners[:on_local_variable_write_node_enter]&.each { |listener| listener.on_local_variable_write_node_enter(node) }
      super
      listeners[:on_local_variable_write_node_leave]&.each { |listener| listener.on_local_variable_write_node_leave(node) }
    end

    # Dispatch enter and leave events for MatchLastLineNode nodes and continue
    # walking the tree.
    def visit_match_last_line_node(node)
      listeners[:on_match_last_line_node_enter]&.each { |listener| listener.on_match_last_line_node_enter(node) }
      super
      listeners[:on_match_last_line_node_leave]&.each { |listener| listener.on_match_last_line_node_leave(node) }
    end

    # Dispatch enter and leave events for MatchPredicateNode nodes and continue
    # walking the tree.
    def visit_match_predicate_node(node)
      listeners[:on_match_predicate_node_enter]&.each { |listener| listener.on_match_predicate_node_enter(node) }
      super
      listeners[:on_match_predicate_node_leave]&.each { |listener| listener.on_match_predicate_node_leave(node) }
    end

    # Dispatch enter and leave events for MatchRequiredNode nodes and continue
    # walking the tree.
    def visit_match_required_node(node)
      listeners[:on_match_required_node_enter]&.each { |listener| listener.on_match_required_node_enter(node) }
      super
      listeners[:on_match_required_node_leave]&.each { |listener| listener.on_match_required_node_leave(node) }
    end

    # Dispatch enter and leave events for MatchWriteNode nodes and continue
    # walking the tree.
    def visit_match_write_node(node)
      listeners[:on_match_write_node_enter]&.each { |listener| listener.on_match_write_node_enter(node) }
      super
      listeners[:on_match_write_node_leave]&.each { |listener| listener.on_match_write_node_leave(node) }
    end

    # Dispatch enter and leave events for MissingNode nodes and continue
    # walking the tree.
    def visit_missing_node(node)
      listeners[:on_missing_node_enter]&.each { |listener| listener.on_missing_node_enter(node) }
      super
      listeners[:on_missing_node_leave]&.each { |listener| listener.on_missing_node_leave(node) }
    end

    # Dispatch enter and leave events for ModuleNode nodes and continue
    # walking the tree.
    def visit_module_node(node)
      listeners[:on_module_node_enter]&.each { |listener| listener.on_module_node_enter(node) }
      super
      listeners[:on_module_node_leave]&.each { |listener| listener.on_module_node_leave(node) }
    end

    # Dispatch enter and leave events for MultiTargetNode nodes and continue
    # walking the tree.
    def visit_multi_target_node(node)
      listeners[:on_multi_target_node_enter]&.each { |listener| listener.on_multi_target_node_enter(node) }
      super
      listeners[:on_multi_target_node_leave]&.each { |listener| listener.on_multi_target_node_leave(node) }
    end

    # Dispatch enter and leave events for MultiWriteNode nodes and continue
    # walking the tree.
    def visit_multi_write_node(node)
      listeners[:on_multi_write_node_enter]&.each { |listener| listener.on_multi_write_node_enter(node) }
      super
      listeners[:on_multi_write_node_leave]&.each { |listener| listener.on_multi_write_node_leave(node) }
    end

    # Dispatch enter and leave events for NextNode nodes and continue
    # walking the tree.
    def visit_next_node(node)
      listeners[:on_next_node_enter]&.each { |listener| listener.on_next_node_enter(node) }
      super
      listeners[:on_next_node_leave]&.each { |listener| listener.on_next_node_leave(node) }
    end

    # Dispatch enter and leave events for NilNode nodes and continue
    # walking the tree.
    def visit_nil_node(node)
      listeners[:on_nil_node_enter]&.each { |listener| listener.on_nil_node_enter(node) }
      super
      listeners[:on_nil_node_leave]&.each { |listener| listener.on_nil_node_leave(node) }
    end

    # Dispatch enter and leave events for NoKeywordsParameterNode nodes and continue
    # walking the tree.
    def visit_no_keywords_parameter_node(node)
      listeners[:on_no_keywords_parameter_node_enter]&.each { |listener| listener.on_no_keywords_parameter_node_enter(node) }
      super
      listeners[:on_no_keywords_parameter_node_leave]&.each { |listener| listener.on_no_keywords_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for NumberedParametersNode nodes and continue
    # walking the tree.
    def visit_numbered_parameters_node(node)
      listeners[:on_numbered_parameters_node_enter]&.each { |listener| listener.on_numbered_parameters_node_enter(node) }
      super
      listeners[:on_numbered_parameters_node_leave]&.each { |listener| listener.on_numbered_parameters_node_leave(node) }
    end

    # Dispatch enter and leave events for NumberedReferenceReadNode nodes and continue
    # walking the tree.
    def visit_numbered_reference_read_node(node)
      listeners[:on_numbered_reference_read_node_enter]&.each { |listener| listener.on_numbered_reference_read_node_enter(node) }
      super
      listeners[:on_numbered_reference_read_node_leave]&.each { |listener| listener.on_numbered_reference_read_node_leave(node) }
    end

    # Dispatch enter and leave events for OptionalKeywordParameterNode nodes and continue
    # walking the tree.
    def visit_optional_keyword_parameter_node(node)
      listeners[:on_optional_keyword_parameter_node_enter]&.each { |listener| listener.on_optional_keyword_parameter_node_enter(node) }
      super
      listeners[:on_optional_keyword_parameter_node_leave]&.each { |listener| listener.on_optional_keyword_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for OptionalParameterNode nodes and continue
    # walking the tree.
    def visit_optional_parameter_node(node)
      listeners[:on_optional_parameter_node_enter]&.each { |listener| listener.on_optional_parameter_node_enter(node) }
      super
      listeners[:on_optional_parameter_node_leave]&.each { |listener| listener.on_optional_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for OrNode nodes and continue
    # walking the tree.
    def visit_or_node(node)
      listeners[:on_or_node_enter]&.each { |listener| listener.on_or_node_enter(node) }
      super
      listeners[:on_or_node_leave]&.each { |listener| listener.on_or_node_leave(node) }
    end

    # Dispatch enter and leave events for ParametersNode nodes and continue
    # walking the tree.
    def visit_parameters_node(node)
      listeners[:on_parameters_node_enter]&.each { |listener| listener.on_parameters_node_enter(node) }
      super
      listeners[:on_parameters_node_leave]&.each { |listener| listener.on_parameters_node_leave(node) }
    end

    # Dispatch enter and leave events for ParenthesesNode nodes and continue
    # walking the tree.
    def visit_parentheses_node(node)
      listeners[:on_parentheses_node_enter]&.each { |listener| listener.on_parentheses_node_enter(node) }
      super
      listeners[:on_parentheses_node_leave]&.each { |listener| listener.on_parentheses_node_leave(node) }
    end

    # Dispatch enter and leave events for PinnedExpressionNode nodes and continue
    # walking the tree.
    def visit_pinned_expression_node(node)
      listeners[:on_pinned_expression_node_enter]&.each { |listener| listener.on_pinned_expression_node_enter(node) }
      super
      listeners[:on_pinned_expression_node_leave]&.each { |listener| listener.on_pinned_expression_node_leave(node) }
    end

    # Dispatch enter and leave events for PinnedVariableNode nodes and continue
    # walking the tree.
    def visit_pinned_variable_node(node)
      listeners[:on_pinned_variable_node_enter]&.each { |listener| listener.on_pinned_variable_node_enter(node) }
      super
      listeners[:on_pinned_variable_node_leave]&.each { |listener| listener.on_pinned_variable_node_leave(node) }
    end

    # Dispatch enter and leave events for PostExecutionNode nodes and continue
    # walking the tree.
    def visit_post_execution_node(node)
      listeners[:on_post_execution_node_enter]&.each { |listener| listener.on_post_execution_node_enter(node) }
      super
      listeners[:on_post_execution_node_leave]&.each { |listener| listener.on_post_execution_node_leave(node) }
    end

    # Dispatch enter and leave events for PreExecutionNode nodes and continue
    # walking the tree.
    def visit_pre_execution_node(node)
      listeners[:on_pre_execution_node_enter]&.each { |listener| listener.on_pre_execution_node_enter(node) }
      super
      listeners[:on_pre_execution_node_leave]&.each { |listener| listener.on_pre_execution_node_leave(node) }
    end

    # Dispatch enter and leave events for ProgramNode nodes and continue
    # walking the tree.
    def visit_program_node(node)
      listeners[:on_program_node_enter]&.each { |listener| listener.on_program_node_enter(node) }
      super
      listeners[:on_program_node_leave]&.each { |listener| listener.on_program_node_leave(node) }
    end

    # Dispatch enter and leave events for RangeNode nodes and continue
    # walking the tree.
    def visit_range_node(node)
      listeners[:on_range_node_enter]&.each { |listener| listener.on_range_node_enter(node) }
      super
      listeners[:on_range_node_leave]&.each { |listener| listener.on_range_node_leave(node) }
    end

    # Dispatch enter and leave events for RationalNode nodes and continue
    # walking the tree.
    def visit_rational_node(node)
      listeners[:on_rational_node_enter]&.each { |listener| listener.on_rational_node_enter(node) }
      super
      listeners[:on_rational_node_leave]&.each { |listener| listener.on_rational_node_leave(node) }
    end

    # Dispatch enter and leave events for RedoNode nodes and continue
    # walking the tree.
    def visit_redo_node(node)
      listeners[:on_redo_node_enter]&.each { |listener| listener.on_redo_node_enter(node) }
      super
      listeners[:on_redo_node_leave]&.each { |listener| listener.on_redo_node_leave(node) }
    end

    # Dispatch enter and leave events for RegularExpressionNode nodes and continue
    # walking the tree.
    def visit_regular_expression_node(node)
      listeners[:on_regular_expression_node_enter]&.each { |listener| listener.on_regular_expression_node_enter(node) }
      super
      listeners[:on_regular_expression_node_leave]&.each { |listener| listener.on_regular_expression_node_leave(node) }
    end

    # Dispatch enter and leave events for RequiredKeywordParameterNode nodes and continue
    # walking the tree.
    def visit_required_keyword_parameter_node(node)
      listeners[:on_required_keyword_parameter_node_enter]&.each { |listener| listener.on_required_keyword_parameter_node_enter(node) }
      super
      listeners[:on_required_keyword_parameter_node_leave]&.each { |listener| listener.on_required_keyword_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for RequiredParameterNode nodes and continue
    # walking the tree.
    def visit_required_parameter_node(node)
      listeners[:on_required_parameter_node_enter]&.each { |listener| listener.on_required_parameter_node_enter(node) }
      super
      listeners[:on_required_parameter_node_leave]&.each { |listener| listener.on_required_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for RescueModifierNode nodes and continue
    # walking the tree.
    def visit_rescue_modifier_node(node)
      listeners[:on_rescue_modifier_node_enter]&.each { |listener| listener.on_rescue_modifier_node_enter(node) }
      super
      listeners[:on_rescue_modifier_node_leave]&.each { |listener| listener.on_rescue_modifier_node_leave(node) }
    end

    # Dispatch enter and leave events for RescueNode nodes and continue
    # walking the tree.
    def visit_rescue_node(node)
      listeners[:on_rescue_node_enter]&.each { |listener| listener.on_rescue_node_enter(node) }
      super
      listeners[:on_rescue_node_leave]&.each { |listener| listener.on_rescue_node_leave(node) }
    end

    # Dispatch enter and leave events for RestParameterNode nodes and continue
    # walking the tree.
    def visit_rest_parameter_node(node)
      listeners[:on_rest_parameter_node_enter]&.each { |listener| listener.on_rest_parameter_node_enter(node) }
      super
      listeners[:on_rest_parameter_node_leave]&.each { |listener| listener.on_rest_parameter_node_leave(node) }
    end

    # Dispatch enter and leave events for RetryNode nodes and continue
    # walking the tree.
    def visit_retry_node(node)
      listeners[:on_retry_node_enter]&.each { |listener| listener.on_retry_node_enter(node) }
      super
      listeners[:on_retry_node_leave]&.each { |listener| listener.on_retry_node_leave(node) }
    end

    # Dispatch enter and leave events for ReturnNode nodes and continue
    # walking the tree.
    def visit_return_node(node)
      listeners[:on_return_node_enter]&.each { |listener| listener.on_return_node_enter(node) }
      super
      listeners[:on_return_node_leave]&.each { |listener| listener.on_return_node_leave(node) }
    end

    # Dispatch enter and leave events for SelfNode nodes and continue
    # walking the tree.
    def visit_self_node(node)
      listeners[:on_self_node_enter]&.each { |listener| listener.on_self_node_enter(node) }
      super
      listeners[:on_self_node_leave]&.each { |listener| listener.on_self_node_leave(node) }
    end

    # Dispatch enter and leave events for ShareableConstantNode nodes and continue
    # walking the tree.
    def visit_shareable_constant_node(node)
      listeners[:on_shareable_constant_node_enter]&.each { |listener| listener.on_shareable_constant_node_enter(node) }
      super
      listeners[:on_shareable_constant_node_leave]&.each { |listener| listener.on_shareable_constant_node_leave(node) }
    end

    # Dispatch enter and leave events for SingletonClassNode nodes and continue
    # walking the tree.
    def visit_singleton_class_node(node)
      listeners[:on_singleton_class_node_enter]&.each { |listener| listener.on_singleton_class_node_enter(node) }
      super
      listeners[:on_singleton_class_node_leave]&.each { |listener| listener.on_singleton_class_node_leave(node) }
    end

    # Dispatch enter and leave events for SourceEncodingNode nodes and continue
    # walking the tree.
    def visit_source_encoding_node(node)
      listeners[:on_source_encoding_node_enter]&.each { |listener| listener.on_source_encoding_node_enter(node) }
      super
      listeners[:on_source_encoding_node_leave]&.each { |listener| listener.on_source_encoding_node_leave(node) }
    end

    # Dispatch enter and leave events for SourceFileNode nodes and continue
    # walking the tree.
    def visit_source_file_node(node)
      listeners[:on_source_file_node_enter]&.each { |listener| listener.on_source_file_node_enter(node) }
      super
      listeners[:on_source_file_node_leave]&.each { |listener| listener.on_source_file_node_leave(node) }
    end

    # Dispatch enter and leave events for SourceLineNode nodes and continue
    # walking the tree.
    def visit_source_line_node(node)
      listeners[:on_source_line_node_enter]&.each { |listener| listener.on_source_line_node_enter(node) }
      super
      listeners[:on_source_line_node_leave]&.each { |listener| listener.on_source_line_node_leave(node) }
    end

    # Dispatch enter and leave events for SplatNode nodes and continue
    # walking the tree.
    def visit_splat_node(node)
      listeners[:on_splat_node_enter]&.each { |listener| listener.on_splat_node_enter(node) }
      super
      listeners[:on_splat_node_leave]&.each { |listener| listener.on_splat_node_leave(node) }
    end

    # Dispatch enter and leave events for StatementsNode nodes and continue
    # walking the tree.
    def visit_statements_node(node)
      listeners[:on_statements_node_enter]&.each { |listener| listener.on_statements_node_enter(node) }
      super
      listeners[:on_statements_node_leave]&.each { |listener| listener.on_statements_node_leave(node) }
    end

    # Dispatch enter and leave events for StringNode nodes and continue
    # walking the tree.
    def visit_string_node(node)
      listeners[:on_string_node_enter]&.each { |listener| listener.on_string_node_enter(node) }
      super
      listeners[:on_string_node_leave]&.each { |listener| listener.on_string_node_leave(node) }
    end

    # Dispatch enter and leave events for SuperNode nodes and continue
    # walking the tree.
    def visit_super_node(node)
      listeners[:on_super_node_enter]&.each { |listener| listener.on_super_node_enter(node) }
      super
      listeners[:on_super_node_leave]&.each { |listener| listener.on_super_node_leave(node) }
    end

    # Dispatch enter and leave events for SymbolNode nodes and continue
    # walking the tree.
    def visit_symbol_node(node)
      listeners[:on_symbol_node_enter]&.each { |listener| listener.on_symbol_node_enter(node) }
      super
      listeners[:on_symbol_node_leave]&.each { |listener| listener.on_symbol_node_leave(node) }
    end

    # Dispatch enter and leave events for TrueNode nodes and continue
    # walking the tree.
    def visit_true_node(node)
      listeners[:on_true_node_enter]&.each { |listener| listener.on_true_node_enter(node) }
      super
      listeners[:on_true_node_leave]&.each { |listener| listener.on_true_node_leave(node) }
    end

    # Dispatch enter and leave events for UndefNode nodes and continue
    # walking the tree.
    def visit_undef_node(node)
      listeners[:on_undef_node_enter]&.each { |listener| listener.on_undef_node_enter(node) }
      super
      listeners[:on_undef_node_leave]&.each { |listener| listener.on_undef_node_leave(node) }
    end

    # Dispatch enter and leave events for UnlessNode nodes and continue
    # walking the tree.
    def visit_unless_node(node)
      listeners[:on_unless_node_enter]&.each { |listener| listener.on_unless_node_enter(node) }
      super
      listeners[:on_unless_node_leave]&.each { |listener| listener.on_unless_node_leave(node) }
    end

    # Dispatch enter and leave events for UntilNode nodes and continue
    # walking the tree.
    def visit_until_node(node)
      listeners[:on_until_node_enter]&.each { |listener| listener.on_until_node_enter(node) }
      super
      listeners[:on_until_node_leave]&.each { |listener| listener.on_until_node_leave(node) }
    end

    # Dispatch enter and leave events for WhenNode nodes and continue
    # walking the tree.
    def visit_when_node(node)
      listeners[:on_when_node_enter]&.each { |listener| listener.on_when_node_enter(node) }
      super
      listeners[:on_when_node_leave]&.each { |listener| listener.on_when_node_leave(node) }
    end

    # Dispatch enter and leave events for WhileNode nodes and continue
    # walking the tree.
    def visit_while_node(node)
      listeners[:on_while_node_enter]&.each { |listener| listener.on_while_node_enter(node) }
      super
      listeners[:on_while_node_leave]&.each { |listener| listener.on_while_node_leave(node) }
    end

    # Dispatch enter and leave events for XStringNode nodes and continue
    # walking the tree.
    def visit_x_string_node(node)
      listeners[:on_x_string_node_enter]&.each { |listener| listener.on_x_string_node_enter(node) }
      super
      listeners[:on_x_string_node_leave]&.each { |listener| listener.on_x_string_node_leave(node) }
    end

    # Dispatch enter and leave events for YieldNode nodes and continue
    # walking the tree.
    def visit_yield_node(node)
      listeners[:on_yield_node_enter]&.each { |listener| listener.on_yield_node_enter(node) }
      super
      listeners[:on_yield_node_leave]&.each { |listener| listener.on_yield_node_leave(node) }
    end

    class DispatchOnce < Visitor # :nodoc:
      attr_reader :listeners

      def initialize(listeners)
        @listeners = listeners
      end

      # Dispatch enter and leave events for AliasGlobalVariableNode nodes.
      def visit_alias_global_variable_node(node)
        listeners[:on_alias_global_variable_node_enter]&.each { |listener| listener.on_alias_global_variable_node_enter(node) }
        listeners[:on_alias_global_variable_node_leave]&.each { |listener| listener.on_alias_global_variable_node_leave(node) }
      end

      # Dispatch enter and leave events for AliasMethodNode nodes.
      def visit_alias_method_node(node)
        listeners[:on_alias_method_node_enter]&.each { |listener| listener.on_alias_method_node_enter(node) }
        listeners[:on_alias_method_node_leave]&.each { |listener| listener.on_alias_method_node_leave(node) }
      end

      # Dispatch enter and leave events for AlternationPatternNode nodes.
      def visit_alternation_pattern_node(node)
        listeners[:on_alternation_pattern_node_enter]&.each { |listener| listener.on_alternation_pattern_node_enter(node) }
        listeners[:on_alternation_pattern_node_leave]&.each { |listener| listener.on_alternation_pattern_node_leave(node) }
      end

      # Dispatch enter and leave events for AndNode nodes.
      def visit_and_node(node)
        listeners[:on_and_node_enter]&.each { |listener| listener.on_and_node_enter(node) }
        listeners[:on_and_node_leave]&.each { |listener| listener.on_and_node_leave(node) }
      end

      # Dispatch enter and leave events for ArgumentsNode nodes.
      def visit_arguments_node(node)
        listeners[:on_arguments_node_enter]&.each { |listener| listener.on_arguments_node_enter(node) }
        listeners[:on_arguments_node_leave]&.each { |listener| listener.on_arguments_node_leave(node) }
      end

      # Dispatch enter and leave events for ArrayNode nodes.
      def visit_array_node(node)
        listeners[:on_array_node_enter]&.each { |listener| listener.on_array_node_enter(node) }
        listeners[:on_array_node_leave]&.each { |listener| listener.on_array_node_leave(node) }
      end

      # Dispatch enter and leave events for ArrayPatternNode nodes.
      def visit_array_pattern_node(node)
        listeners[:on_array_pattern_node_enter]&.each { |listener| listener.on_array_pattern_node_enter(node) }
        listeners[:on_array_pattern_node_leave]&.each { |listener| listener.on_array_pattern_node_leave(node) }
      end

      # Dispatch enter and leave events for AssocNode nodes.
      def visit_assoc_node(node)
        listeners[:on_assoc_node_enter]&.each { |listener| listener.on_assoc_node_enter(node) }
        listeners[:on_assoc_node_leave]&.each { |listener| listener.on_assoc_node_leave(node) }
      end

      # Dispatch enter and leave events for AssocSplatNode nodes.
      def visit_assoc_splat_node(node)
        listeners[:on_assoc_splat_node_enter]&.each { |listener| listener.on_assoc_splat_node_enter(node) }
        listeners[:on_assoc_splat_node_leave]&.each { |listener| listener.on_assoc_splat_node_leave(node) }
      end

      # Dispatch enter and leave events for BackReferenceReadNode nodes.
      def visit_back_reference_read_node(node)
        listeners[:on_back_reference_read_node_enter]&.each { |listener| listener.on_back_reference_read_node_enter(node) }
        listeners[:on_back_reference_read_node_leave]&.each { |listener| listener.on_back_reference_read_node_leave(node) }
      end

      # Dispatch enter and leave events for BeginNode nodes.
      def visit_begin_node(node)
        listeners[:on_begin_node_enter]&.each { |listener| listener.on_begin_node_enter(node) }
        listeners[:on_begin_node_leave]&.each { |listener| listener.on_begin_node_leave(node) }
      end

      # Dispatch enter and leave events for BlockArgumentNode nodes.
      def visit_block_argument_node(node)
        listeners[:on_block_argument_node_enter]&.each { |listener| listener.on_block_argument_node_enter(node) }
        listeners[:on_block_argument_node_leave]&.each { |listener| listener.on_block_argument_node_leave(node) }
      end

      # Dispatch enter and leave events for BlockLocalVariableNode nodes.
      def visit_block_local_variable_node(node)
        listeners[:on_block_local_variable_node_enter]&.each { |listener| listener.on_block_local_variable_node_enter(node) }
        listeners[:on_block_local_variable_node_leave]&.each { |listener| listener.on_block_local_variable_node_leave(node) }
      end

      # Dispatch enter and leave events for BlockNode nodes.
      def visit_block_node(node)
        listeners[:on_block_node_enter]&.each { |listener| listener.on_block_node_enter(node) }
        listeners[:on_block_node_leave]&.each { |listener| listener.on_block_node_leave(node) }
      end

      # Dispatch enter and leave events for BlockParameterNode nodes.
      def visit_block_parameter_node(node)
        listeners[:on_block_parameter_node_enter]&.each { |listener| listener.on_block_parameter_node_enter(node) }
        listeners[:on_block_parameter_node_leave]&.each { |listener| listener.on_block_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for BlockParametersNode nodes.
      def visit_block_parameters_node(node)
        listeners[:on_block_parameters_node_enter]&.each { |listener| listener.on_block_parameters_node_enter(node) }
        listeners[:on_block_parameters_node_leave]&.each { |listener| listener.on_block_parameters_node_leave(node) }
      end

      # Dispatch enter and leave events for BreakNode nodes.
      def visit_break_node(node)
        listeners[:on_break_node_enter]&.each { |listener| listener.on_break_node_enter(node) }
        listeners[:on_break_node_leave]&.each { |listener| listener.on_break_node_leave(node) }
      end

      # Dispatch enter and leave events for CallAndWriteNode nodes.
      def visit_call_and_write_node(node)
        listeners[:on_call_and_write_node_enter]&.each { |listener| listener.on_call_and_write_node_enter(node) }
        listeners[:on_call_and_write_node_leave]&.each { |listener| listener.on_call_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for CallNode nodes.
      def visit_call_node(node)
        listeners[:on_call_node_enter]&.each { |listener| listener.on_call_node_enter(node) }
        listeners[:on_call_node_leave]&.each { |listener| listener.on_call_node_leave(node) }
      end

      # Dispatch enter and leave events for CallOperatorWriteNode nodes.
      def visit_call_operator_write_node(node)
        listeners[:on_call_operator_write_node_enter]&.each { |listener| listener.on_call_operator_write_node_enter(node) }
        listeners[:on_call_operator_write_node_leave]&.each { |listener| listener.on_call_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for CallOrWriteNode nodes.
      def visit_call_or_write_node(node)
        listeners[:on_call_or_write_node_enter]&.each { |listener| listener.on_call_or_write_node_enter(node) }
        listeners[:on_call_or_write_node_leave]&.each { |listener| listener.on_call_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for CallTargetNode nodes.
      def visit_call_target_node(node)
        listeners[:on_call_target_node_enter]&.each { |listener| listener.on_call_target_node_enter(node) }
        listeners[:on_call_target_node_leave]&.each { |listener| listener.on_call_target_node_leave(node) }
      end

      # Dispatch enter and leave events for CapturePatternNode nodes.
      def visit_capture_pattern_node(node)
        listeners[:on_capture_pattern_node_enter]&.each { |listener| listener.on_capture_pattern_node_enter(node) }
        listeners[:on_capture_pattern_node_leave]&.each { |listener| listener.on_capture_pattern_node_leave(node) }
      end

      # Dispatch enter and leave events for CaseMatchNode nodes.
      def visit_case_match_node(node)
        listeners[:on_case_match_node_enter]&.each { |listener| listener.on_case_match_node_enter(node) }
        listeners[:on_case_match_node_leave]&.each { |listener| listener.on_case_match_node_leave(node) }
      end

      # Dispatch enter and leave events for CaseNode nodes.
      def visit_case_node(node)
        listeners[:on_case_node_enter]&.each { |listener| listener.on_case_node_enter(node) }
        listeners[:on_case_node_leave]&.each { |listener| listener.on_case_node_leave(node) }
      end

      # Dispatch enter and leave events for ClassNode nodes.
      def visit_class_node(node)
        listeners[:on_class_node_enter]&.each { |listener| listener.on_class_node_enter(node) }
        listeners[:on_class_node_leave]&.each { |listener| listener.on_class_node_leave(node) }
      end

      # Dispatch enter and leave events for ClassVariableAndWriteNode nodes.
      def visit_class_variable_and_write_node(node)
        listeners[:on_class_variable_and_write_node_enter]&.each { |listener| listener.on_class_variable_and_write_node_enter(node) }
        listeners[:on_class_variable_and_write_node_leave]&.each { |listener| listener.on_class_variable_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ClassVariableOperatorWriteNode nodes.
      def visit_class_variable_operator_write_node(node)
        listeners[:on_class_variable_operator_write_node_enter]&.each { |listener| listener.on_class_variable_operator_write_node_enter(node) }
        listeners[:on_class_variable_operator_write_node_leave]&.each { |listener| listener.on_class_variable_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ClassVariableOrWriteNode nodes.
      def visit_class_variable_or_write_node(node)
        listeners[:on_class_variable_or_write_node_enter]&.each { |listener| listener.on_class_variable_or_write_node_enter(node) }
        listeners[:on_class_variable_or_write_node_leave]&.each { |listener| listener.on_class_variable_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ClassVariableReadNode nodes.
      def visit_class_variable_read_node(node)
        listeners[:on_class_variable_read_node_enter]&.each { |listener| listener.on_class_variable_read_node_enter(node) }
        listeners[:on_class_variable_read_node_leave]&.each { |listener| listener.on_class_variable_read_node_leave(node) }
      end

      # Dispatch enter and leave events for ClassVariableTargetNode nodes.
      def visit_class_variable_target_node(node)
        listeners[:on_class_variable_target_node_enter]&.each { |listener| listener.on_class_variable_target_node_enter(node) }
        listeners[:on_class_variable_target_node_leave]&.each { |listener| listener.on_class_variable_target_node_leave(node) }
      end

      # Dispatch enter and leave events for ClassVariableWriteNode nodes.
      def visit_class_variable_write_node(node)
        listeners[:on_class_variable_write_node_enter]&.each { |listener| listener.on_class_variable_write_node_enter(node) }
        listeners[:on_class_variable_write_node_leave]&.each { |listener| listener.on_class_variable_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantAndWriteNode nodes.
      def visit_constant_and_write_node(node)
        listeners[:on_constant_and_write_node_enter]&.each { |listener| listener.on_constant_and_write_node_enter(node) }
        listeners[:on_constant_and_write_node_leave]&.each { |listener| listener.on_constant_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantOperatorWriteNode nodes.
      def visit_constant_operator_write_node(node)
        listeners[:on_constant_operator_write_node_enter]&.each { |listener| listener.on_constant_operator_write_node_enter(node) }
        listeners[:on_constant_operator_write_node_leave]&.each { |listener| listener.on_constant_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantOrWriteNode nodes.
      def visit_constant_or_write_node(node)
        listeners[:on_constant_or_write_node_enter]&.each { |listener| listener.on_constant_or_write_node_enter(node) }
        listeners[:on_constant_or_write_node_leave]&.each { |listener| listener.on_constant_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantPathAndWriteNode nodes.
      def visit_constant_path_and_write_node(node)
        listeners[:on_constant_path_and_write_node_enter]&.each { |listener| listener.on_constant_path_and_write_node_enter(node) }
        listeners[:on_constant_path_and_write_node_leave]&.each { |listener| listener.on_constant_path_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantPathNode nodes.
      def visit_constant_path_node(node)
        listeners[:on_constant_path_node_enter]&.each { |listener| listener.on_constant_path_node_enter(node) }
        listeners[:on_constant_path_node_leave]&.each { |listener| listener.on_constant_path_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantPathOperatorWriteNode nodes.
      def visit_constant_path_operator_write_node(node)
        listeners[:on_constant_path_operator_write_node_enter]&.each { |listener| listener.on_constant_path_operator_write_node_enter(node) }
        listeners[:on_constant_path_operator_write_node_leave]&.each { |listener| listener.on_constant_path_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantPathOrWriteNode nodes.
      def visit_constant_path_or_write_node(node)
        listeners[:on_constant_path_or_write_node_enter]&.each { |listener| listener.on_constant_path_or_write_node_enter(node) }
        listeners[:on_constant_path_or_write_node_leave]&.each { |listener| listener.on_constant_path_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantPathTargetNode nodes.
      def visit_constant_path_target_node(node)
        listeners[:on_constant_path_target_node_enter]&.each { |listener| listener.on_constant_path_target_node_enter(node) }
        listeners[:on_constant_path_target_node_leave]&.each { |listener| listener.on_constant_path_target_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantPathWriteNode nodes.
      def visit_constant_path_write_node(node)
        listeners[:on_constant_path_write_node_enter]&.each { |listener| listener.on_constant_path_write_node_enter(node) }
        listeners[:on_constant_path_write_node_leave]&.each { |listener| listener.on_constant_path_write_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantReadNode nodes.
      def visit_constant_read_node(node)
        listeners[:on_constant_read_node_enter]&.each { |listener| listener.on_constant_read_node_enter(node) }
        listeners[:on_constant_read_node_leave]&.each { |listener| listener.on_constant_read_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantTargetNode nodes.
      def visit_constant_target_node(node)
        listeners[:on_constant_target_node_enter]&.each { |listener| listener.on_constant_target_node_enter(node) }
        listeners[:on_constant_target_node_leave]&.each { |listener| listener.on_constant_target_node_leave(node) }
      end

      # Dispatch enter and leave events for ConstantWriteNode nodes.
      def visit_constant_write_node(node)
        listeners[:on_constant_write_node_enter]&.each { |listener| listener.on_constant_write_node_enter(node) }
        listeners[:on_constant_write_node_leave]&.each { |listener| listener.on_constant_write_node_leave(node) }
      end

      # Dispatch enter and leave events for DefNode nodes.
      def visit_def_node(node)
        listeners[:on_def_node_enter]&.each { |listener| listener.on_def_node_enter(node) }
        listeners[:on_def_node_leave]&.each { |listener| listener.on_def_node_leave(node) }
      end

      # Dispatch enter and leave events for DefinedNode nodes.
      def visit_defined_node(node)
        listeners[:on_defined_node_enter]&.each { |listener| listener.on_defined_node_enter(node) }
        listeners[:on_defined_node_leave]&.each { |listener| listener.on_defined_node_leave(node) }
      end

      # Dispatch enter and leave events for ElseNode nodes.
      def visit_else_node(node)
        listeners[:on_else_node_enter]&.each { |listener| listener.on_else_node_enter(node) }
        listeners[:on_else_node_leave]&.each { |listener| listener.on_else_node_leave(node) }
      end

      # Dispatch enter and leave events for EmbeddedStatementsNode nodes.
      def visit_embedded_statements_node(node)
        listeners[:on_embedded_statements_node_enter]&.each { |listener| listener.on_embedded_statements_node_enter(node) }
        listeners[:on_embedded_statements_node_leave]&.each { |listener| listener.on_embedded_statements_node_leave(node) }
      end

      # Dispatch enter and leave events for EmbeddedVariableNode nodes.
      def visit_embedded_variable_node(node)
        listeners[:on_embedded_variable_node_enter]&.each { |listener| listener.on_embedded_variable_node_enter(node) }
        listeners[:on_embedded_variable_node_leave]&.each { |listener| listener.on_embedded_variable_node_leave(node) }
      end

      # Dispatch enter and leave events for EnsureNode nodes.
      def visit_ensure_node(node)
        listeners[:on_ensure_node_enter]&.each { |listener| listener.on_ensure_node_enter(node) }
        listeners[:on_ensure_node_leave]&.each { |listener| listener.on_ensure_node_leave(node) }
      end

      # Dispatch enter and leave events for FalseNode nodes.
      def visit_false_node(node)
        listeners[:on_false_node_enter]&.each { |listener| listener.on_false_node_enter(node) }
        listeners[:on_false_node_leave]&.each { |listener| listener.on_false_node_leave(node) }
      end

      # Dispatch enter and leave events for FindPatternNode nodes.
      def visit_find_pattern_node(node)
        listeners[:on_find_pattern_node_enter]&.each { |listener| listener.on_find_pattern_node_enter(node) }
        listeners[:on_find_pattern_node_leave]&.each { |listener| listener.on_find_pattern_node_leave(node) }
      end

      # Dispatch enter and leave events for FlipFlopNode nodes.
      def visit_flip_flop_node(node)
        listeners[:on_flip_flop_node_enter]&.each { |listener| listener.on_flip_flop_node_enter(node) }
        listeners[:on_flip_flop_node_leave]&.each { |listener| listener.on_flip_flop_node_leave(node) }
      end

      # Dispatch enter and leave events for FloatNode nodes.
      def visit_float_node(node)
        listeners[:on_float_node_enter]&.each { |listener| listener.on_float_node_enter(node) }
        listeners[:on_float_node_leave]&.each { |listener| listener.on_float_node_leave(node) }
      end

      # Dispatch enter and leave events for ForNode nodes.
      def visit_for_node(node)
        listeners[:on_for_node_enter]&.each { |listener| listener.on_for_node_enter(node) }
        listeners[:on_for_node_leave]&.each { |listener| listener.on_for_node_leave(node) }
      end

      # Dispatch enter and leave events for ForwardingArgumentsNode nodes.
      def visit_forwarding_arguments_node(node)
        listeners[:on_forwarding_arguments_node_enter]&.each { |listener| listener.on_forwarding_arguments_node_enter(node) }
        listeners[:on_forwarding_arguments_node_leave]&.each { |listener| listener.on_forwarding_arguments_node_leave(node) }
      end

      # Dispatch enter and leave events for ForwardingParameterNode nodes.
      def visit_forwarding_parameter_node(node)
        listeners[:on_forwarding_parameter_node_enter]&.each { |listener| listener.on_forwarding_parameter_node_enter(node) }
        listeners[:on_forwarding_parameter_node_leave]&.each { |listener| listener.on_forwarding_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for ForwardingSuperNode nodes.
      def visit_forwarding_super_node(node)
        listeners[:on_forwarding_super_node_enter]&.each { |listener| listener.on_forwarding_super_node_enter(node) }
        listeners[:on_forwarding_super_node_leave]&.each { |listener| listener.on_forwarding_super_node_leave(node) }
      end

      # Dispatch enter and leave events for GlobalVariableAndWriteNode nodes.
      def visit_global_variable_and_write_node(node)
        listeners[:on_global_variable_and_write_node_enter]&.each { |listener| listener.on_global_variable_and_write_node_enter(node) }
        listeners[:on_global_variable_and_write_node_leave]&.each { |listener| listener.on_global_variable_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for GlobalVariableOperatorWriteNode nodes.
      def visit_global_variable_operator_write_node(node)
        listeners[:on_global_variable_operator_write_node_enter]&.each { |listener| listener.on_global_variable_operator_write_node_enter(node) }
        listeners[:on_global_variable_operator_write_node_leave]&.each { |listener| listener.on_global_variable_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for GlobalVariableOrWriteNode nodes.
      def visit_global_variable_or_write_node(node)
        listeners[:on_global_variable_or_write_node_enter]&.each { |listener| listener.on_global_variable_or_write_node_enter(node) }
        listeners[:on_global_variable_or_write_node_leave]&.each { |listener| listener.on_global_variable_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for GlobalVariableReadNode nodes.
      def visit_global_variable_read_node(node)
        listeners[:on_global_variable_read_node_enter]&.each { |listener| listener.on_global_variable_read_node_enter(node) }
        listeners[:on_global_variable_read_node_leave]&.each { |listener| listener.on_global_variable_read_node_leave(node) }
      end

      # Dispatch enter and leave events for GlobalVariableTargetNode nodes.
      def visit_global_variable_target_node(node)
        listeners[:on_global_variable_target_node_enter]&.each { |listener| listener.on_global_variable_target_node_enter(node) }
        listeners[:on_global_variable_target_node_leave]&.each { |listener| listener.on_global_variable_target_node_leave(node) }
      end

      # Dispatch enter and leave events for GlobalVariableWriteNode nodes.
      def visit_global_variable_write_node(node)
        listeners[:on_global_variable_write_node_enter]&.each { |listener| listener.on_global_variable_write_node_enter(node) }
        listeners[:on_global_variable_write_node_leave]&.each { |listener| listener.on_global_variable_write_node_leave(node) }
      end

      # Dispatch enter and leave events for HashNode nodes.
      def visit_hash_node(node)
        listeners[:on_hash_node_enter]&.each { |listener| listener.on_hash_node_enter(node) }
        listeners[:on_hash_node_leave]&.each { |listener| listener.on_hash_node_leave(node) }
      end

      # Dispatch enter and leave events for HashPatternNode nodes.
      def visit_hash_pattern_node(node)
        listeners[:on_hash_pattern_node_enter]&.each { |listener| listener.on_hash_pattern_node_enter(node) }
        listeners[:on_hash_pattern_node_leave]&.each { |listener| listener.on_hash_pattern_node_leave(node) }
      end

      # Dispatch enter and leave events for IfNode nodes.
      def visit_if_node(node)
        listeners[:on_if_node_enter]&.each { |listener| listener.on_if_node_enter(node) }
        listeners[:on_if_node_leave]&.each { |listener| listener.on_if_node_leave(node) }
      end

      # Dispatch enter and leave events for ImaginaryNode nodes.
      def visit_imaginary_node(node)
        listeners[:on_imaginary_node_enter]&.each { |listener| listener.on_imaginary_node_enter(node) }
        listeners[:on_imaginary_node_leave]&.each { |listener| listener.on_imaginary_node_leave(node) }
      end

      # Dispatch enter and leave events for ImplicitNode nodes.
      def visit_implicit_node(node)
        listeners[:on_implicit_node_enter]&.each { |listener| listener.on_implicit_node_enter(node) }
        listeners[:on_implicit_node_leave]&.each { |listener| listener.on_implicit_node_leave(node) }
      end

      # Dispatch enter and leave events for ImplicitRestNode nodes.
      def visit_implicit_rest_node(node)
        listeners[:on_implicit_rest_node_enter]&.each { |listener| listener.on_implicit_rest_node_enter(node) }
        listeners[:on_implicit_rest_node_leave]&.each { |listener| listener.on_implicit_rest_node_leave(node) }
      end

      # Dispatch enter and leave events for InNode nodes.
      def visit_in_node(node)
        listeners[:on_in_node_enter]&.each { |listener| listener.on_in_node_enter(node) }
        listeners[:on_in_node_leave]&.each { |listener| listener.on_in_node_leave(node) }
      end

      # Dispatch enter and leave events for IndexAndWriteNode nodes.
      def visit_index_and_write_node(node)
        listeners[:on_index_and_write_node_enter]&.each { |listener| listener.on_index_and_write_node_enter(node) }
        listeners[:on_index_and_write_node_leave]&.each { |listener| listener.on_index_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for IndexOperatorWriteNode nodes.
      def visit_index_operator_write_node(node)
        listeners[:on_index_operator_write_node_enter]&.each { |listener| listener.on_index_operator_write_node_enter(node) }
        listeners[:on_index_operator_write_node_leave]&.each { |listener| listener.on_index_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for IndexOrWriteNode nodes.
      def visit_index_or_write_node(node)
        listeners[:on_index_or_write_node_enter]&.each { |listener| listener.on_index_or_write_node_enter(node) }
        listeners[:on_index_or_write_node_leave]&.each { |listener| listener.on_index_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for IndexTargetNode nodes.
      def visit_index_target_node(node)
        listeners[:on_index_target_node_enter]&.each { |listener| listener.on_index_target_node_enter(node) }
        listeners[:on_index_target_node_leave]&.each { |listener| listener.on_index_target_node_leave(node) }
      end

      # Dispatch enter and leave events for InstanceVariableAndWriteNode nodes.
      def visit_instance_variable_and_write_node(node)
        listeners[:on_instance_variable_and_write_node_enter]&.each { |listener| listener.on_instance_variable_and_write_node_enter(node) }
        listeners[:on_instance_variable_and_write_node_leave]&.each { |listener| listener.on_instance_variable_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for InstanceVariableOperatorWriteNode nodes.
      def visit_instance_variable_operator_write_node(node)
        listeners[:on_instance_variable_operator_write_node_enter]&.each { |listener| listener.on_instance_variable_operator_write_node_enter(node) }
        listeners[:on_instance_variable_operator_write_node_leave]&.each { |listener| listener.on_instance_variable_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for InstanceVariableOrWriteNode nodes.
      def visit_instance_variable_or_write_node(node)
        listeners[:on_instance_variable_or_write_node_enter]&.each { |listener| listener.on_instance_variable_or_write_node_enter(node) }
        listeners[:on_instance_variable_or_write_node_leave]&.each { |listener| listener.on_instance_variable_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for InstanceVariableReadNode nodes.
      def visit_instance_variable_read_node(node)
        listeners[:on_instance_variable_read_node_enter]&.each { |listener| listener.on_instance_variable_read_node_enter(node) }
        listeners[:on_instance_variable_read_node_leave]&.each { |listener| listener.on_instance_variable_read_node_leave(node) }
      end

      # Dispatch enter and leave events for InstanceVariableTargetNode nodes.
      def visit_instance_variable_target_node(node)
        listeners[:on_instance_variable_target_node_enter]&.each { |listener| listener.on_instance_variable_target_node_enter(node) }
        listeners[:on_instance_variable_target_node_leave]&.each { |listener| listener.on_instance_variable_target_node_leave(node) }
      end

      # Dispatch enter and leave events for InstanceVariableWriteNode nodes.
      def visit_instance_variable_write_node(node)
        listeners[:on_instance_variable_write_node_enter]&.each { |listener| listener.on_instance_variable_write_node_enter(node) }
        listeners[:on_instance_variable_write_node_leave]&.each { |listener| listener.on_instance_variable_write_node_leave(node) }
      end

      # Dispatch enter and leave events for IntegerNode nodes.
      def visit_integer_node(node)
        listeners[:on_integer_node_enter]&.each { |listener| listener.on_integer_node_enter(node) }
        listeners[:on_integer_node_leave]&.each { |listener| listener.on_integer_node_leave(node) }
      end

      # Dispatch enter and leave events for InterpolatedMatchLastLineNode nodes.
      def visit_interpolated_match_last_line_node(node)
        listeners[:on_interpolated_match_last_line_node_enter]&.each { |listener| listener.on_interpolated_match_last_line_node_enter(node) }
        listeners[:on_interpolated_match_last_line_node_leave]&.each { |listener| listener.on_interpolated_match_last_line_node_leave(node) }
      end

      # Dispatch enter and leave events for InterpolatedRegularExpressionNode nodes.
      def visit_interpolated_regular_expression_node(node)
        listeners[:on_interpolated_regular_expression_node_enter]&.each { |listener| listener.on_interpolated_regular_expression_node_enter(node) }
        listeners[:on_interpolated_regular_expression_node_leave]&.each { |listener| listener.on_interpolated_regular_expression_node_leave(node) }
      end

      # Dispatch enter and leave events for InterpolatedStringNode nodes.
      def visit_interpolated_string_node(node)
        listeners[:on_interpolated_string_node_enter]&.each { |listener| listener.on_interpolated_string_node_enter(node) }
        listeners[:on_interpolated_string_node_leave]&.each { |listener| listener.on_interpolated_string_node_leave(node) }
      end

      # Dispatch enter and leave events for InterpolatedSymbolNode nodes.
      def visit_interpolated_symbol_node(node)
        listeners[:on_interpolated_symbol_node_enter]&.each { |listener| listener.on_interpolated_symbol_node_enter(node) }
        listeners[:on_interpolated_symbol_node_leave]&.each { |listener| listener.on_interpolated_symbol_node_leave(node) }
      end

      # Dispatch enter and leave events for InterpolatedXStringNode nodes.
      def visit_interpolated_x_string_node(node)
        listeners[:on_interpolated_x_string_node_enter]&.each { |listener| listener.on_interpolated_x_string_node_enter(node) }
        listeners[:on_interpolated_x_string_node_leave]&.each { |listener| listener.on_interpolated_x_string_node_leave(node) }
      end

      # Dispatch enter and leave events for ItLocalVariableReadNode nodes.
      def visit_it_local_variable_read_node(node)
        listeners[:on_it_local_variable_read_node_enter]&.each { |listener| listener.on_it_local_variable_read_node_enter(node) }
        listeners[:on_it_local_variable_read_node_leave]&.each { |listener| listener.on_it_local_variable_read_node_leave(node) }
      end

      # Dispatch enter and leave events for ItParametersNode nodes.
      def visit_it_parameters_node(node)
        listeners[:on_it_parameters_node_enter]&.each { |listener| listener.on_it_parameters_node_enter(node) }
        listeners[:on_it_parameters_node_leave]&.each { |listener| listener.on_it_parameters_node_leave(node) }
      end

      # Dispatch enter and leave events for KeywordHashNode nodes.
      def visit_keyword_hash_node(node)
        listeners[:on_keyword_hash_node_enter]&.each { |listener| listener.on_keyword_hash_node_enter(node) }
        listeners[:on_keyword_hash_node_leave]&.each { |listener| listener.on_keyword_hash_node_leave(node) }
      end

      # Dispatch enter and leave events for KeywordRestParameterNode nodes.
      def visit_keyword_rest_parameter_node(node)
        listeners[:on_keyword_rest_parameter_node_enter]&.each { |listener| listener.on_keyword_rest_parameter_node_enter(node) }
        listeners[:on_keyword_rest_parameter_node_leave]&.each { |listener| listener.on_keyword_rest_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for LambdaNode nodes.
      def visit_lambda_node(node)
        listeners[:on_lambda_node_enter]&.each { |listener| listener.on_lambda_node_enter(node) }
        listeners[:on_lambda_node_leave]&.each { |listener| listener.on_lambda_node_leave(node) }
      end

      # Dispatch enter and leave events for LocalVariableAndWriteNode nodes.
      def visit_local_variable_and_write_node(node)
        listeners[:on_local_variable_and_write_node_enter]&.each { |listener| listener.on_local_variable_and_write_node_enter(node) }
        listeners[:on_local_variable_and_write_node_leave]&.each { |listener| listener.on_local_variable_and_write_node_leave(node) }
      end

      # Dispatch enter and leave events for LocalVariableOperatorWriteNode nodes.
      def visit_local_variable_operator_write_node(node)
        listeners[:on_local_variable_operator_write_node_enter]&.each { |listener| listener.on_local_variable_operator_write_node_enter(node) }
        listeners[:on_local_variable_operator_write_node_leave]&.each { |listener| listener.on_local_variable_operator_write_node_leave(node) }
      end

      # Dispatch enter and leave events for LocalVariableOrWriteNode nodes.
      def visit_local_variable_or_write_node(node)
        listeners[:on_local_variable_or_write_node_enter]&.each { |listener| listener.on_local_variable_or_write_node_enter(node) }
        listeners[:on_local_variable_or_write_node_leave]&.each { |listener| listener.on_local_variable_or_write_node_leave(node) }
      end

      # Dispatch enter and leave events for LocalVariableReadNode nodes.
      def visit_local_variable_read_node(node)
        listeners[:on_local_variable_read_node_enter]&.each { |listener| listener.on_local_variable_read_node_enter(node) }
        listeners[:on_local_variable_read_node_leave]&.each { |listener| listener.on_local_variable_read_node_leave(node) }
      end

      # Dispatch enter and leave events for LocalVariableTargetNode nodes.
      def visit_local_variable_target_node(node)
        listeners[:on_local_variable_target_node_enter]&.each { |listener| listener.on_local_variable_target_node_enter(node) }
        listeners[:on_local_variable_target_node_leave]&.each { |listener| listener.on_local_variable_target_node_leave(node) }
      end

      # Dispatch enter and leave events for LocalVariableWriteNode nodes.
      def visit_local_variable_write_node(node)
        listeners[:on_local_variable_write_node_enter]&.each { |listener| listener.on_local_variable_write_node_enter(node) }
        listeners[:on_local_variable_write_node_leave]&.each { |listener| listener.on_local_variable_write_node_leave(node) }
      end

      # Dispatch enter and leave events for MatchLastLineNode nodes.
      def visit_match_last_line_node(node)
        listeners[:on_match_last_line_node_enter]&.each { |listener| listener.on_match_last_line_node_enter(node) }
        listeners[:on_match_last_line_node_leave]&.each { |listener| listener.on_match_last_line_node_leave(node) }
      end

      # Dispatch enter and leave events for MatchPredicateNode nodes.
      def visit_match_predicate_node(node)
        listeners[:on_match_predicate_node_enter]&.each { |listener| listener.on_match_predicate_node_enter(node) }
        listeners[:on_match_predicate_node_leave]&.each { |listener| listener.on_match_predicate_node_leave(node) }
      end

      # Dispatch enter and leave events for MatchRequiredNode nodes.
      def visit_match_required_node(node)
        listeners[:on_match_required_node_enter]&.each { |listener| listener.on_match_required_node_enter(node) }
        listeners[:on_match_required_node_leave]&.each { |listener| listener.on_match_required_node_leave(node) }
      end

      # Dispatch enter and leave events for MatchWriteNode nodes.
      def visit_match_write_node(node)
        listeners[:on_match_write_node_enter]&.each { |listener| listener.on_match_write_node_enter(node) }
        listeners[:on_match_write_node_leave]&.each { |listener| listener.on_match_write_node_leave(node) }
      end

      # Dispatch enter and leave events for MissingNode nodes.
      def visit_missing_node(node)
        listeners[:on_missing_node_enter]&.each { |listener| listener.on_missing_node_enter(node) }
        listeners[:on_missing_node_leave]&.each { |listener| listener.on_missing_node_leave(node) }
      end

      # Dispatch enter and leave events for ModuleNode nodes.
      def visit_module_node(node)
        listeners[:on_module_node_enter]&.each { |listener| listener.on_module_node_enter(node) }
        listeners[:on_module_node_leave]&.each { |listener| listener.on_module_node_leave(node) }
      end

      # Dispatch enter and leave events for MultiTargetNode nodes.
      def visit_multi_target_node(node)
        listeners[:on_multi_target_node_enter]&.each { |listener| listener.on_multi_target_node_enter(node) }
        listeners[:on_multi_target_node_leave]&.each { |listener| listener.on_multi_target_node_leave(node) }
      end

      # Dispatch enter and leave events for MultiWriteNode nodes.
      def visit_multi_write_node(node)
        listeners[:on_multi_write_node_enter]&.each { |listener| listener.on_multi_write_node_enter(node) }
        listeners[:on_multi_write_node_leave]&.each { |listener| listener.on_multi_write_node_leave(node) }
      end

      # Dispatch enter and leave events for NextNode nodes.
      def visit_next_node(node)
        listeners[:on_next_node_enter]&.each { |listener| listener.on_next_node_enter(node) }
        listeners[:on_next_node_leave]&.each { |listener| listener.on_next_node_leave(node) }
      end

      # Dispatch enter and leave events for NilNode nodes.
      def visit_nil_node(node)
        listeners[:on_nil_node_enter]&.each { |listener| listener.on_nil_node_enter(node) }
        listeners[:on_nil_node_leave]&.each { |listener| listener.on_nil_node_leave(node) }
      end

      # Dispatch enter and leave events for NoKeywordsParameterNode nodes.
      def visit_no_keywords_parameter_node(node)
        listeners[:on_no_keywords_parameter_node_enter]&.each { |listener| listener.on_no_keywords_parameter_node_enter(node) }
        listeners[:on_no_keywords_parameter_node_leave]&.each { |listener| listener.on_no_keywords_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for NumberedParametersNode nodes.
      def visit_numbered_parameters_node(node)
        listeners[:on_numbered_parameters_node_enter]&.each { |listener| listener.on_numbered_parameters_node_enter(node) }
        listeners[:on_numbered_parameters_node_leave]&.each { |listener| listener.on_numbered_parameters_node_leave(node) }
      end

      # Dispatch enter and leave events for NumberedReferenceReadNode nodes.
      def visit_numbered_reference_read_node(node)
        listeners[:on_numbered_reference_read_node_enter]&.each { |listener| listener.on_numbered_reference_read_node_enter(node) }
        listeners[:on_numbered_reference_read_node_leave]&.each { |listener| listener.on_numbered_reference_read_node_leave(node) }
      end

      # Dispatch enter and leave events for OptionalKeywordParameterNode nodes.
      def visit_optional_keyword_parameter_node(node)
        listeners[:on_optional_keyword_parameter_node_enter]&.each { |listener| listener.on_optional_keyword_parameter_node_enter(node) }
        listeners[:on_optional_keyword_parameter_node_leave]&.each { |listener| listener.on_optional_keyword_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for OptionalParameterNode nodes.
      def visit_optional_parameter_node(node)
        listeners[:on_optional_parameter_node_enter]&.each { |listener| listener.on_optional_parameter_node_enter(node) }
        listeners[:on_optional_parameter_node_leave]&.each { |listener| listener.on_optional_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for OrNode nodes.
      def visit_or_node(node)
        listeners[:on_or_node_enter]&.each { |listener| listener.on_or_node_enter(node) }
        listeners[:on_or_node_leave]&.each { |listener| listener.on_or_node_leave(node) }
      end

      # Dispatch enter and leave events for ParametersNode nodes.
      def visit_parameters_node(node)
        listeners[:on_parameters_node_enter]&.each { |listener| listener.on_parameters_node_enter(node) }
        listeners[:on_parameters_node_leave]&.each { |listener| listener.on_parameters_node_leave(node) }
      end

      # Dispatch enter and leave events for ParenthesesNode nodes.
      def visit_parentheses_node(node)
        listeners[:on_parentheses_node_enter]&.each { |listener| listener.on_parentheses_node_enter(node) }
        listeners[:on_parentheses_node_leave]&.each { |listener| listener.on_parentheses_node_leave(node) }
      end

      # Dispatch enter and leave events for PinnedExpressionNode nodes.
      def visit_pinned_expression_node(node)
        listeners[:on_pinned_expression_node_enter]&.each { |listener| listener.on_pinned_expression_node_enter(node) }
        listeners[:on_pinned_expression_node_leave]&.each { |listener| listener.on_pinned_expression_node_leave(node) }
      end

      # Dispatch enter and leave events for PinnedVariableNode nodes.
      def visit_pinned_variable_node(node)
        listeners[:on_pinned_variable_node_enter]&.each { |listener| listener.on_pinned_variable_node_enter(node) }
        listeners[:on_pinned_variable_node_leave]&.each { |listener| listener.on_pinned_variable_node_leave(node) }
      end

      # Dispatch enter and leave events for PostExecutionNode nodes.
      def visit_post_execution_node(node)
        listeners[:on_post_execution_node_enter]&.each { |listener| listener.on_post_execution_node_enter(node) }
        listeners[:on_post_execution_node_leave]&.each { |listener| listener.on_post_execution_node_leave(node) }
      end

      # Dispatch enter and leave events for PreExecutionNode nodes.
      def visit_pre_execution_node(node)
        listeners[:on_pre_execution_node_enter]&.each { |listener| listener.on_pre_execution_node_enter(node) }
        listeners[:on_pre_execution_node_leave]&.each { |listener| listener.on_pre_execution_node_leave(node) }
      end

      # Dispatch enter and leave events for ProgramNode nodes.
      def visit_program_node(node)
        listeners[:on_program_node_enter]&.each { |listener| listener.on_program_node_enter(node) }
        listeners[:on_program_node_leave]&.each { |listener| listener.on_program_node_leave(node) }
      end

      # Dispatch enter and leave events for RangeNode nodes.
      def visit_range_node(node)
        listeners[:on_range_node_enter]&.each { |listener| listener.on_range_node_enter(node) }
        listeners[:on_range_node_leave]&.each { |listener| listener.on_range_node_leave(node) }
      end

      # Dispatch enter and leave events for RationalNode nodes.
      def visit_rational_node(node)
        listeners[:on_rational_node_enter]&.each { |listener| listener.on_rational_node_enter(node) }
        listeners[:on_rational_node_leave]&.each { |listener| listener.on_rational_node_leave(node) }
      end

      # Dispatch enter and leave events for RedoNode nodes.
      def visit_redo_node(node)
        listeners[:on_redo_node_enter]&.each { |listener| listener.on_redo_node_enter(node) }
        listeners[:on_redo_node_leave]&.each { |listener| listener.on_redo_node_leave(node) }
      end

      # Dispatch enter and leave events for RegularExpressionNode nodes.
      def visit_regular_expression_node(node)
        listeners[:on_regular_expression_node_enter]&.each { |listener| listener.on_regular_expression_node_enter(node) }
        listeners[:on_regular_expression_node_leave]&.each { |listener| listener.on_regular_expression_node_leave(node) }
      end

      # Dispatch enter and leave events for RequiredKeywordParameterNode nodes.
      def visit_required_keyword_parameter_node(node)
        listeners[:on_required_keyword_parameter_node_enter]&.each { |listener| listener.on_required_keyword_parameter_node_enter(node) }
        listeners[:on_required_keyword_parameter_node_leave]&.each { |listener| listener.on_required_keyword_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for RequiredParameterNode nodes.
      def visit_required_parameter_node(node)
        listeners[:on_required_parameter_node_enter]&.each { |listener| listener.on_required_parameter_node_enter(node) }
        listeners[:on_required_parameter_node_leave]&.each { |listener| listener.on_required_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for RescueModifierNode nodes.
      def visit_rescue_modifier_node(node)
        listeners[:on_rescue_modifier_node_enter]&.each { |listener| listener.on_rescue_modifier_node_enter(node) }
        listeners[:on_rescue_modifier_node_leave]&.each { |listener| listener.on_rescue_modifier_node_leave(node) }
      end

      # Dispatch enter and leave events for RescueNode nodes.
      def visit_rescue_node(node)
        listeners[:on_rescue_node_enter]&.each { |listener| listener.on_rescue_node_enter(node) }
        listeners[:on_rescue_node_leave]&.each { |listener| listener.on_rescue_node_leave(node) }
      end

      # Dispatch enter and leave events for RestParameterNode nodes.
      def visit_rest_parameter_node(node)
        listeners[:on_rest_parameter_node_enter]&.each { |listener| listener.on_rest_parameter_node_enter(node) }
        listeners[:on_rest_parameter_node_leave]&.each { |listener| listener.on_rest_parameter_node_leave(node) }
      end

      # Dispatch enter and leave events for RetryNode nodes.
      def visit_retry_node(node)
        listeners[:on_retry_node_enter]&.each { |listener| listener.on_retry_node_enter(node) }
        listeners[:on_retry_node_leave]&.each { |listener| listener.on_retry_node_leave(node) }
      end

      # Dispatch enter and leave events for ReturnNode nodes.
      def visit_return_node(node)
        listeners[:on_return_node_enter]&.each { |listener| listener.on_return_node_enter(node) }
        listeners[:on_return_node_leave]&.each { |listener| listener.on_return_node_leave(node) }
      end

      # Dispatch enter and leave events for SelfNode nodes.
      def visit_self_node(node)
        listeners[:on_self_node_enter]&.each { |listener| listener.on_self_node_enter(node) }
        listeners[:on_self_node_leave]&.each { |listener| listener.on_self_node_leave(node) }
      end

      # Dispatch enter and leave events for ShareableConstantNode nodes.
      def visit_shareable_constant_node(node)
        listeners[:on_shareable_constant_node_enter]&.each { |listener| listener.on_shareable_constant_node_enter(node) }
        listeners[:on_shareable_constant_node_leave]&.each { |listener| listener.on_shareable_constant_node_leave(node) }
      end

      # Dispatch enter and leave events for SingletonClassNode nodes.
      def visit_singleton_class_node(node)
        listeners[:on_singleton_class_node_enter]&.each { |listener| listener.on_singleton_class_node_enter(node) }
        listeners[:on_singleton_class_node_leave]&.each { |listener| listener.on_singleton_class_node_leave(node) }
      end

      # Dispatch enter and leave events for SourceEncodingNode nodes.
      def visit_source_encoding_node(node)
        listeners[:on_source_encoding_node_enter]&.each { |listener| listener.on_source_encoding_node_enter(node) }
        listeners[:on_source_encoding_node_leave]&.each { |listener| listener.on_source_encoding_node_leave(node) }
      end

      # Dispatch enter and leave events for SourceFileNode nodes.
      def visit_source_file_node(node)
        listeners[:on_source_file_node_enter]&.each { |listener| listener.on_source_file_node_enter(node) }
        listeners[:on_source_file_node_leave]&.each { |listener| listener.on_source_file_node_leave(node) }
      end

      # Dispatch enter and leave events for SourceLineNode nodes.
      def visit_source_line_node(node)
        listeners[:on_source_line_node_enter]&.each { |listener| listener.on_source_line_node_enter(node) }
        listeners[:on_source_line_node_leave]&.each { |listener| listener.on_source_line_node_leave(node) }
      end

      # Dispatch enter and leave events for SplatNode nodes.
      def visit_splat_node(node)
        listeners[:on_splat_node_enter]&.each { |listener| listener.on_splat_node_enter(node) }
        listeners[:on_splat_node_leave]&.each { |listener| listener.on_splat_node_leave(node) }
      end

      # Dispatch enter and leave events for StatementsNode nodes.
      def visit_statements_node(node)
        listeners[:on_statements_node_enter]&.each { |listener| listener.on_statements_node_enter(node) }
        listeners[:on_statements_node_leave]&.each { |listener| listener.on_statements_node_leave(node) }
      end

      # Dispatch enter and leave events for StringNode nodes.
      def visit_string_node(node)
        listeners[:on_string_node_enter]&.each { |listener| listener.on_string_node_enter(node) }
        listeners[:on_string_node_leave]&.each { |listener| listener.on_string_node_leave(node) }
      end

      # Dispatch enter and leave events for SuperNode nodes.
      def visit_super_node(node)
        listeners[:on_super_node_enter]&.each { |listener| listener.on_super_node_enter(node) }
        listeners[:on_super_node_leave]&.each { |listener| listener.on_super_node_leave(node) }
      end

      # Dispatch enter and leave events for SymbolNode nodes.
      def visit_symbol_node(node)
        listeners[:on_symbol_node_enter]&.each { |listener| listener.on_symbol_node_enter(node) }
        listeners[:on_symbol_node_leave]&.each { |listener| listener.on_symbol_node_leave(node) }
      end

      # Dispatch enter and leave events for TrueNode nodes.
      def visit_true_node(node)
        listeners[:on_true_node_enter]&.each { |listener| listener.on_true_node_enter(node) }
        listeners[:on_true_node_leave]&.each { |listener| listener.on_true_node_leave(node) }
      end

      # Dispatch enter and leave events for UndefNode nodes.
      def visit_undef_node(node)
        listeners[:on_undef_node_enter]&.each { |listener| listener.on_undef_node_enter(node) }
        listeners[:on_undef_node_leave]&.each { |listener| listener.on_undef_node_leave(node) }
      end

      # Dispatch enter and leave events for UnlessNode nodes.
      def visit_unless_node(node)
        listeners[:on_unless_node_enter]&.each { |listener| listener.on_unless_node_enter(node) }
        listeners[:on_unless_node_leave]&.each { |listener| listener.on_unless_node_leave(node) }
      end

      # Dispatch enter and leave events for UntilNode nodes.
      def visit_until_node(node)
        listeners[:on_until_node_enter]&.each { |listener| listener.on_until_node_enter(node) }
        listeners[:on_until_node_leave]&.each { |listener| listener.on_until_node_leave(node) }
      end

      # Dispatch enter and leave events for WhenNode nodes.
      def visit_when_node(node)
        listeners[:on_when_node_enter]&.each { |listener| listener.on_when_node_enter(node) }
        listeners[:on_when_node_leave]&.each { |listener| listener.on_when_node_leave(node) }
      end

      # Dispatch enter and leave events for WhileNode nodes.
      def visit_while_node(node)
        listeners[:on_while_node_enter]&.each { |listener| listener.on_while_node_enter(node) }
        listeners[:on_while_node_leave]&.each { |listener| listener.on_while_node_leave(node) }
      end

      # Dispatch enter and leave events for XStringNode nodes.
      def visit_x_string_node(node)
        listeners[:on_x_string_node_enter]&.each { |listener| listener.on_x_string_node_enter(node) }
        listeners[:on_x_string_node_leave]&.each { |listener| listener.on_x_string_node_leave(node) }
      end

      # Dispatch enter and leave events for YieldNode nodes.
      def visit_yield_node(node)
        listeners[:on_yield_node_enter]&.each { |listener| listener.on_yield_node_enter(node) }
        listeners[:on_yield_node_leave]&.each { |listener| listener.on_yield_node_leave(node) }
      end
    end

    private_constant :DispatchOnce
  end
end
PK*J[���(�O�Oshare/ruby/prism/serialize.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/serialize.rb.erb
if you are looking to modify the template
=end

require "stringio"
require_relative "polyfill/unpack1"

module Prism
  # A module responsible for deserializing parse results.
  module Serialize
    # The major version of prism that we are expecting to find in the serialized
    # strings.
    MAJOR_VERSION = 1

    # The minor version of prism that we are expecting to find in the serialized
    # strings.
    MINOR_VERSION = 2

    # The patch version of prism that we are expecting to find in the serialized
    # strings.
    PATCH_VERSION = 0

    # Deserialize the AST represented by the given string into a parse result.
    def self.load(input, serialized)
      input = input.dup
      source = Source.for(input)

      loader = Loader.new(source, serialized)
      result = loader.load_result

      input.force_encoding(loader.encoding)

      # This is an extremely niche use-case where the file was marked as binary
      # but it contained UTF-8-encoded characters. In that case we will actually
      # put it back to UTF-8 to give the location APIs the best chance of being
      # correct.
      if !input.ascii_only? && input.encoding == Encoding::BINARY
        input.force_encoding(Encoding::UTF_8)
        input.force_encoding(Encoding::BINARY) unless input.valid_encoding?
      end

      result
    end

    # Deserialize the tokens represented by the given string into a parse
    # result.
    def self.load_tokens(source, serialized)
      Loader.new(source, serialized).load_tokens_result
    end

    class Loader # :nodoc:
      if RUBY_ENGINE == "truffleruby"
        # StringIO is synchronized and that adds a high overhead on TruffleRuby.
        class FastStringIO # :nodoc:
          attr_accessor :pos

          def initialize(string)
            @string = string
            @pos = 0
          end

          def getbyte
            byte = @string.getbyte(@pos)
            @pos += 1
            byte
          end

          def read(n)
            slice = @string.byteslice(@pos, n)
            @pos += n
            slice
          end

          def eof?
            @pos >= @string.bytesize
          end
        end
      else
        FastStringIO = ::StringIO
      end
      private_constant :FastStringIO

      attr_reader :encoding, :input, :serialized, :io
      attr_reader :constant_pool_offset, :constant_pool, :source
      attr_reader :start_line

      def initialize(source, serialized)
        @encoding = Encoding::UTF_8

        @input = source.source.dup
        raise unless serialized.encoding == Encoding::BINARY
        @serialized = serialized
        @io = FastStringIO.new(serialized)

        @constant_pool_offset = nil
        @constant_pool = nil

        @source = source
        define_load_node_lambdas unless RUBY_ENGINE == "ruby"
      end

      def load_header
        raise "Invalid serialization" if io.read(5) != "PRISM"
        raise "Invalid serialization" if io.read(3).unpack("C3") != [MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION]
        only_semantic_fields = io.getbyte
        unless only_semantic_fields == 0
          raise "Invalid serialization (location fields must be included but are not)"
        end
      end

      def load_encoding
        @encoding = Encoding.find(io.read(load_varuint))
        @input = input.force_encoding(@encoding).freeze
        @encoding
      end

      def load_start_line
        source.instance_variable_set :@start_line, load_varsint
      end

      def load_line_offsets
        source.instance_variable_set :@offsets, Array.new(load_varuint) { load_varuint }
      end

      def load_comments
        Array.new(load_varuint) do
          case load_varuint
          when 0 then InlineComment.new(load_location_object)
          when 1 then EmbDocComment.new(load_location_object)
          end
        end
      end

      DIAGNOSTIC_TYPES = [
        :alias_argument,
        :alias_argument_numbered_reference,
        :ampampeq_multi_assign,
        :argument_after_block,
        :argument_after_forwarding_ellipses,
        :argument_bare_hash,
        :argument_block_forwarding,
        :argument_block_multi,
        :argument_conflict_ampersand,
        :argument_conflict_star,
        :argument_conflict_star_star,
        :argument_formal_class,
        :argument_formal_constant,
        :argument_formal_global,
        :argument_formal_ivar,
        :argument_forwarding_unbound,
        :argument_no_forwarding_ampersand,
        :argument_no_forwarding_ellipses,
        :argument_no_forwarding_star,
        :argument_no_forwarding_star_star,
        :argument_splat_after_assoc_splat,
        :argument_splat_after_splat,
        :argument_term_paren,
        :argument_unexpected_block,
        :array_element,
        :array_expression,
        :array_expression_after_star,
        :array_separator,
        :array_term,
        :begin_lonely_else,
        :begin_term,
        :begin_upcase_brace,
        :begin_upcase_term,
        :begin_upcase_toplevel,
        :block_param_local_variable,
        :block_param_pipe_term,
        :block_term_brace,
        :block_term_end,
        :cannot_parse_expression,
        :cannot_parse_string_part,
        :case_expression_after_case,
        :case_expression_after_when,
        :case_match_missing_predicate,
        :case_missing_conditions,
        :case_term,
        :class_in_method,
        :class_name,
        :class_superclass,
        :class_term,
        :class_unexpected_end,
        :class_variable_bare,
        :conditional_elsif_predicate,
        :conditional_if_predicate,
        :conditional_predicate_term,
        :conditional_term,
        :conditional_term_else,
        :conditional_unless_predicate,
        :conditional_until_predicate,
        :conditional_while_predicate,
        :constant_path_colon_colon_constant,
        :def_endless,
        :def_endless_setter,
        :def_name,
        :def_params_term,
        :def_params_term_paren,
        :def_receiver,
        :def_receiver_term,
        :def_term,
        :defined_expression,
        :embdoc_term,
        :embexpr_end,
        :embvar_invalid,
        :end_upcase_brace,
        :end_upcase_term,
        :escape_invalid_control,
        :escape_invalid_control_repeat,
        :escape_invalid_hexadecimal,
        :escape_invalid_meta,
        :escape_invalid_meta_repeat,
        :escape_invalid_unicode,
        :escape_invalid_unicode_cm_flags,
        :escape_invalid_unicode_list,
        :escape_invalid_unicode_literal,
        :escape_invalid_unicode_long,
        :escape_invalid_unicode_short,
        :escape_invalid_unicode_term,
        :expect_argument,
        :expect_eol_after_statement,
        :expect_expression_after_ampampeq,
        :expect_expression_after_comma,
        :expect_expression_after_equal,
        :expect_expression_after_less_less,
        :expect_expression_after_lparen,
        :expect_expression_after_operator,
        :expect_expression_after_pipepipeeq,
        :expect_expression_after_question,
        :expect_expression_after_splat,
        :expect_expression_after_splat_hash,
        :expect_expression_after_star,
        :expect_for_delimiter,
        :expect_ident_req_parameter,
        :expect_in_delimiter,
        :expect_lparen_req_parameter,
        :expect_message,
        :expect_rbracket,
        :expect_rparen,
        :expect_rparen_after_multi,
        :expect_rparen_req_parameter,
        :expect_singleton_class_delimiter,
        :expect_string_content,
        :expect_when_delimiter,
        :expression_bare_hash,
        :expression_not_writable,
        :expression_not_writable_encoding,
        :expression_not_writable_false,
        :expression_not_writable_file,
        :expression_not_writable_line,
        :expression_not_writable_nil,
        :expression_not_writable_numbered,
        :expression_not_writable_self,
        :expression_not_writable_true,
        :float_parse,
        :for_collection,
        :for_in,
        :for_index,
        :for_term,
        :global_variable_bare,
        :hash_expression_after_label,
        :hash_key,
        :hash_rocket,
        :hash_term,
        :hash_value,
        :heredoc_identifier,
        :heredoc_term,
        :incomplete_question_mark,
        :incomplete_variable_class,
        :incomplete_variable_class_3_3,
        :incomplete_variable_instance,
        :incomplete_variable_instance_3_3,
        :instance_variable_bare,
        :invalid_block_exit,
        :invalid_character,
        :invalid_comma,
        :invalid_encoding_magic_comment,
        :invalid_escape_character,
        :invalid_float_exponent,
        :invalid_local_variable_read,
        :invalid_local_variable_write,
        :invalid_multibyte_char,
        :invalid_multibyte_character,
        :invalid_multibyte_escape,
        :invalid_number_binary,
        :invalid_number_decimal,
        :invalid_number_fraction,
        :invalid_number_hexadecimal,
        :invalid_number_octal,
        :invalid_number_underscore_inner,
        :invalid_number_underscore_trailing,
        :invalid_percent,
        :invalid_percent_eof,
        :invalid_printable_character,
        :invalid_retry_after_else,
        :invalid_retry_after_ensure,
        :invalid_retry_without_rescue,
        :invalid_symbol,
        :invalid_variable_global,
        :invalid_variable_global_3_3,
        :invalid_yield,
        :it_not_allowed_numbered,
        :it_not_allowed_ordinary,
        :lambda_open,
        :lambda_term_brace,
        :lambda_term_end,
        :list_i_lower_element,
        :list_i_lower_term,
        :list_i_upper_element,
        :list_i_upper_term,
        :list_w_lower_element,
        :list_w_lower_term,
        :list_w_upper_element,
        :list_w_upper_term,
        :malloc_failed,
        :mixed_encoding,
        :module_in_method,
        :module_name,
        :module_term,
        :multi_assign_multi_splats,
        :multi_assign_unexpected_rest,
        :nesting_too_deep,
        :no_local_variable,
        :non_associative_operator,
        :not_expression,
        :number_literal_underscore,
        :numbered_parameter_inner_block,
        :numbered_parameter_it,
        :numbered_parameter_ordinary,
        :numbered_parameter_outer_block,
        :operator_multi_assign,
        :operator_write_arguments,
        :operator_write_block,
        :parameter_assoc_splat_multi,
        :parameter_block_multi,
        :parameter_circular,
        :parameter_forwarding_after_rest,
        :parameter_method_name,
        :parameter_name_duplicated,
        :parameter_no_default,
        :parameter_no_default_kw,
        :parameter_numbered_reserved,
        :parameter_order,
        :parameter_splat_multi,
        :parameter_star,
        :parameter_unexpected_fwd,
        :parameter_unexpected_no_kw,
        :parameter_wild_loose_comma,
        :pattern_array_multiple_rests,
        :pattern_capture_duplicate,
        :pattern_expression_after_bracket,
        :pattern_expression_after_comma,
        :pattern_expression_after_hrocket,
        :pattern_expression_after_in,
        :pattern_expression_after_key,
        :pattern_expression_after_paren,
        :pattern_expression_after_pin,
        :pattern_expression_after_pipe,
        :pattern_expression_after_range,
        :pattern_expression_after_rest,
        :pattern_find_missing_inner,
        :pattern_hash_implicit,
        :pattern_hash_key,
        :pattern_hash_key_duplicate,
        :pattern_hash_key_interpolated,
        :pattern_hash_key_label,
        :pattern_hash_key_locals,
        :pattern_ident_after_hrocket,
        :pattern_label_after_comma,
        :pattern_rest,
        :pattern_term_brace,
        :pattern_term_bracket,
        :pattern_term_paren,
        :pipepipeeq_multi_assign,
        :regexp_encoding_option_mismatch,
        :regexp_incompat_char_encoding,
        :regexp_invalid_unicode_range,
        :regexp_non_escaped_mbc,
        :regexp_parse_error,
        :regexp_term,
        :regexp_unknown_options,
        :regexp_utf8_char_non_utf8_regexp,
        :rescue_expression,
        :rescue_modifier_value,
        :rescue_term,
        :rescue_variable,
        :return_invalid,
        :script_not_found,
        :singleton_for_literals,
        :statement_alias,
        :statement_postexe_end,
        :statement_preexe_begin,
        :statement_undef,
        :string_concatenation,
        :string_interpolated_term,
        :string_literal_eof,
        :string_literal_term,
        :symbol_invalid,
        :symbol_term_dynamic,
        :symbol_term_interpolated,
        :ternary_colon,
        :ternary_expression_false,
        :ternary_expression_true,
        :unary_disallowed,
        :unary_receiver,
        :undef_argument,
        :unexpected_block_argument,
        :unexpected_index_block,
        :unexpected_index_keywords,
        :unexpected_label,
        :unexpected_multi_write,
        :unexpected_range_operator,
        :unexpected_safe_navigation,
        :unexpected_token_close_context,
        :unexpected_token_ignore,
        :until_term,
        :void_expression,
        :while_term,
        :write_target_in_method,
        :write_target_readonly,
        :write_target_unexpected,
        :xstring_term,
        :ambiguous_binary_operator,
        :ambiguous_first_argument_minus,
        :ambiguous_first_argument_plus,
        :ambiguous_prefix_ampersand,
        :ambiguous_prefix_star,
        :ambiguous_prefix_star_star,
        :ambiguous_slash,
        :comparison_after_comparison,
        :dot_dot_dot_eol,
        :equal_in_conditional,
        :equal_in_conditional_3_3,
        :end_in_method,
        :duplicated_hash_key,
        :duplicated_when_clause,
        :float_out_of_range,
        :ignored_frozen_string_literal,
        :indentation_mismatch,
        :integer_in_flip_flop,
        :invalid_character,
        :invalid_magic_comment_value,
        :invalid_numbered_reference,
        :keyword_eol,
        :literal_in_condition_default,
        :literal_in_condition_verbose,
        :shareable_constant_value_line,
        :shebang_carriage_return,
        :unexpected_carriage_return,
        :unreachable_statement,
        :unused_local_variable,
        :void_statement,
      ].freeze

      private_constant :DIAGNOSTIC_TYPES

      def load_metadata
        comments = load_comments
        magic_comments = Array.new(load_varuint) { MagicComment.new(load_location_object, load_location_object) }
        data_loc = load_optional_location_object
        errors = Array.new(load_varuint) { ParseError.new(DIAGNOSTIC_TYPES.fetch(load_varuint), load_embedded_string, load_location_object, load_error_level) }
        warnings = Array.new(load_varuint) { ParseWarning.new(DIAGNOSTIC_TYPES.fetch(load_varuint), load_embedded_string, load_location_object, load_warning_level) }
        [comments, magic_comments, data_loc, errors, warnings]
      end

      def load_tokens
        tokens = []
        while type = TOKEN_TYPES.fetch(load_varuint)
          start = load_varuint
          length = load_varuint
          lex_state = load_varuint
          location = Location.new(@source, start, length)
          tokens << [Token.new(source, type, location.slice, location), lex_state]
        end

        tokens
      end

      def load_tokens_result
        tokens = load_tokens
        encoding = load_encoding
        load_start_line
        load_line_offsets
        comments, magic_comments, data_loc, errors, warnings = load_metadata
        tokens.each { |token,| token.value.force_encoding(encoding) }

        raise "Expected to consume all bytes while deserializing" unless @io.eof?
        LexResult.new(tokens, comments, magic_comments, data_loc, errors, warnings, @source)
      end

      def load_nodes
        load_header
        load_encoding
        load_start_line
        load_line_offsets

        comments, magic_comments, data_loc, errors, warnings = load_metadata

        @constant_pool_offset = load_uint32
        @constant_pool = Array.new(load_varuint, nil)

        [load_node, comments, magic_comments, data_loc, errors, warnings]
      end

      def load_result
        node, comments, magic_comments, data_loc, errors, warnings = load_nodes
        ParseResult.new(node, comments, magic_comments, data_loc, errors, warnings, @source)
      end

      private

      # variable-length integer using https://en.wikipedia.org/wiki/LEB128
      # This is also what protobuf uses: https://protobuf.dev/programming-guides/encoding/#varints
      def load_varuint
        n = io.getbyte
        if n < 128
          n
        else
          n -= 128
          shift = 0
          while (b = io.getbyte) >= 128
            n += (b - 128) << (shift += 7)
          end
          n + (b << (shift + 7))
        end
      end

      def load_varsint
        n = load_varuint
        (n >> 1) ^ (-(n & 1))
      end

      def load_integer
        negative = io.getbyte != 0
        length = load_varuint

        value = 0
        length.times { |index| value |= (load_varuint << (index * 32)) }

        value = -value if negative
        value
      end

      def load_double
        io.read(8).unpack1("D")
      end

      def load_uint32
        io.read(4).unpack1("L")
      end

      def load_optional_node
        if io.getbyte != 0
          io.pos -= 1
          load_node
        end
      end

      def load_embedded_string
        io.read(load_varuint).force_encoding(encoding)
      end

      def load_string
        type = io.getbyte
        case type
        when 1
          input.byteslice(load_varuint, load_varuint).force_encoding(encoding)
        when 2
          load_embedded_string
        else
          raise "Unknown serialized string type: #{type}"
        end
      end

      def load_location
        (load_varuint << 32) | load_varuint
      end

      def load_location_object
        Location.new(source, load_varuint, load_varuint)
      end

      def load_optional_location
        load_location if io.getbyte != 0
      end

      def load_optional_location_object
        load_location_object if io.getbyte != 0
      end

      def load_constant(index)
        constant = constant_pool[index]

        unless constant
          offset = constant_pool_offset + index * 8
          start = @serialized.unpack1("L", offset: offset)
          length = @serialized.unpack1("L", offset: offset + 4)

          constant =
            if start.nobits?(1 << 31)
              input.byteslice(start, length).force_encoding(@encoding).to_sym
            else
              @serialized.byteslice(start & ((1 << 31) - 1), length).force_encoding(@encoding).to_sym
            end

          constant_pool[index] = constant
        end

        constant
      end

      def load_required_constant
        load_constant(load_varuint - 1)
      end

      def load_optional_constant
        index = load_varuint
        load_constant(index - 1) if index != 0
      end

      def load_error_level
        level = io.getbyte

        case level
        when 0
          :syntax
        when 1
          :argument
        when 2
          :load
        else
          raise "Unknown level: #{level}"
        end
      end

      def load_warning_level
        level = io.getbyte

        case level
        when 0
          :default
        when 1
          :verbose
        else
          raise "Unknown level: #{level}"
        end
      end

      if RUBY_ENGINE == "ruby"
        def load_node
          type = io.getbyte
          node_id = load_varuint
          location = load_location

          case type
          when 1 then
            AliasGlobalVariableNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 2 then
            AliasMethodNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 3 then
            AlternationPatternNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 4 then
            AndNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 5 then
            ArgumentsNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node })
          when 6 then
            ArrayNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
          when 7 then
            ArrayPatternNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
          when 8 then
            AssocNode.new(source, node_id, location, load_varuint, load_node, load_node, load_optional_location)
          when 9 then
            AssocSplatNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
          when 10 then
            BackReferenceReadNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 11 then
            BeginNode.new(source, node_id, location, load_varuint, load_optional_location, load_optional_node, load_optional_node, load_optional_node, load_optional_node, load_optional_location)
          when 12 then
            BlockArgumentNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
          when 13 then
            BlockLocalVariableNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 14 then
            BlockNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_optional_node, load_optional_node, load_location, load_location)
          when 15 then
            BlockParameterNode.new(source, node_id, location, load_varuint, load_optional_constant, load_optional_location, load_location)
          when 16 then
            BlockParametersNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
          when 17 then
            BreakNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
          when 18 then
            CallAndWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node)
          when 19 then
            CallNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_required_constant, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node)
          when 20 then
            CallOperatorWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_required_constant, load_location, load_node)
          when 21 then
            CallOrWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node)
          when 22 then
            CallTargetNode.new(source, node_id, location, load_varuint, load_node, load_location, load_required_constant, load_location)
          when 23 then
            CapturePatternNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 24 then
            CaseMatchNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location)
          when 25 then
            CaseNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location)
          when 26 then
            ClassNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_location, load_required_constant)
          when 27 then
            ClassVariableAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 28 then
            ClassVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
          when 29 then
            ClassVariableOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 30 then
            ClassVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 31 then
            ClassVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 32 then
            ClassVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
          when 33 then
            ConstantAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 34 then
            ConstantOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
          when 35 then
            ConstantOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 36 then
            ConstantPathAndWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
          when 37 then
            ConstantPathNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_constant, load_location, load_location)
          when 38 then
            ConstantPathOperatorWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node, load_required_constant)
          when 39 then
            ConstantPathOrWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
          when 40 then
            ConstantPathTargetNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_constant, load_location, load_location)
          when 41 then
            ConstantPathWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
          when 42 then
            ConstantReadNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 43 then
            ConstantTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 44 then
            ConstantWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
          when 45 then
            load_uint32
            DefNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_optional_node, load_optional_node, load_optional_node, Array.new(load_varuint) { load_required_constant }, load_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location)
          when 46 then
            DefinedNode.new(source, node_id, location, load_varuint, load_optional_location, load_node, load_optional_location, load_location)
          when 47 then
            ElseNode.new(source, node_id, location, load_varuint, load_location, load_optional_node, load_optional_location)
          when 48 then
            EmbeddedStatementsNode.new(source, node_id, location, load_varuint, load_location, load_optional_node, load_location)
          when 49 then
            EmbeddedVariableNode.new(source, node_id, location, load_varuint, load_location, load_node)
          when 50 then
            EnsureNode.new(source, node_id, location, load_varuint, load_location, load_optional_node, load_location)
          when 51 then
            FalseNode.new(source, node_id, location, load_varuint)
          when 52 then
            FindPatternNode.new(source, node_id, location, load_varuint, load_optional_node, load_node, Array.new(load_varuint) { load_node }, load_node, load_optional_location, load_optional_location)
          when 53 then
            FlipFlopNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_node, load_location)
          when 54 then
            FloatNode.new(source, node_id, location, load_varuint, load_double)
          when 55 then
            ForNode.new(source, node_id, location, load_varuint, load_node, load_node, load_optional_node, load_location, load_location, load_optional_location, load_location)
          when 56 then
            ForwardingArgumentsNode.new(source, node_id, location, load_varuint)
          when 57 then
            ForwardingParameterNode.new(source, node_id, location, load_varuint)
          when 58 then
            ForwardingSuperNode.new(source, node_id, location, load_varuint, load_optional_node)
          when 59 then
            GlobalVariableAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 60 then
            GlobalVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
          when 61 then
            GlobalVariableOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 62 then
            GlobalVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 63 then
            GlobalVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 64 then
            GlobalVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
          when 65 then
            HashNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
          when 66 then
            HashPatternNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_location, load_optional_location)
          when 67 then
            IfNode.new(source, node_id, location, load_varuint, load_optional_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location)
          when 68 then
            ImaginaryNode.new(source, node_id, location, load_varuint, load_node)
          when 69 then
            ImplicitNode.new(source, node_id, location, load_varuint, load_node)
          when 70 then
            ImplicitRestNode.new(source, node_id, location, load_varuint)
          when 71 then
            InNode.new(source, node_id, location, load_varuint, load_node, load_optional_node, load_location, load_optional_location)
          when 72 then
            IndexAndWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node)
          when 73 then
            IndexOperatorWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_required_constant, load_location, load_node)
          when 74 then
            IndexOrWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node)
          when 75 then
            IndexTargetNode.new(source, node_id, location, load_varuint, load_node, load_location, load_optional_node, load_location, load_optional_node)
          when 76 then
            InstanceVariableAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 77 then
            InstanceVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
          when 78 then
            InstanceVariableOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 79 then
            InstanceVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 80 then
            InstanceVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 81 then
            InstanceVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
          when 82 then
            IntegerNode.new(source, node_id, location, load_varuint, load_integer)
          when 83 then
            InterpolatedMatchLastLineNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
          when 84 then
            InterpolatedRegularExpressionNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
          when 85 then
            InterpolatedStringNode.new(source, node_id, location, load_varuint, load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location)
          when 86 then
            InterpolatedSymbolNode.new(source, node_id, location, load_varuint, load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location)
          when 87 then
            InterpolatedXStringNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
          when 88 then
            ItLocalVariableReadNode.new(source, node_id, location, load_varuint)
          when 89 then
            ItParametersNode.new(source, node_id, location, load_varuint)
          when 90 then
            KeywordHashNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node })
          when 91 then
            KeywordRestParameterNode.new(source, node_id, location, load_varuint, load_optional_constant, load_optional_location, load_location)
          when 92 then
            LambdaNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_location, load_optional_node, load_optional_node)
          when 93 then
            LocalVariableAndWriteNode.new(source, node_id, location, load_varuint, load_location, load_location, load_node, load_required_constant, load_varuint)
          when 94 then
            LocalVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_location, load_location, load_node, load_required_constant, load_required_constant, load_varuint)
          when 95 then
            LocalVariableOrWriteNode.new(source, node_id, location, load_varuint, load_location, load_location, load_node, load_required_constant, load_varuint)
          when 96 then
            LocalVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant, load_varuint)
          when 97 then
            LocalVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant, load_varuint)
          when 98 then
            LocalVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_varuint, load_location, load_node, load_location)
          when 99 then
            MatchLastLineNode.new(source, node_id, location, load_varuint, load_location, load_location, load_location, load_string)
          when 100 then
            MatchPredicateNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 101 then
            MatchRequiredNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 102 then
            MatchWriteNode.new(source, node_id, location, load_varuint, load_node, Array.new(load_varuint) { load_node })
          when 103 then
            MissingNode.new(source, node_id, location, load_varuint)
          when 104 then
            ModuleNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_node, load_location, load_required_constant)
          when 105 then
            MultiTargetNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
          when 106 then
            MultiWriteNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, load_location, load_node)
          when 107 then
            NextNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
          when 108 then
            NilNode.new(source, node_id, location, load_varuint)
          when 109 then
            NoKeywordsParameterNode.new(source, node_id, location, load_varuint, load_location, load_location)
          when 110 then
            NumberedParametersNode.new(source, node_id, location, load_varuint, io.getbyte)
          when 111 then
            NumberedReferenceReadNode.new(source, node_id, location, load_varuint, load_varuint)
          when 112 then
            OptionalKeywordParameterNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node)
          when 113 then
            OptionalParameterNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
          when 114 then
            OrNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
          when 115 then
            ParametersNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_node)
          when 116 then
            ParenthesesNode.new(source, node_id, location, load_varuint, load_optional_node, load_location, load_location)
          when 117 then
            PinnedExpressionNode.new(source, node_id, location, load_varuint, load_node, load_location, load_location, load_location)
          when 118 then
            PinnedVariableNode.new(source, node_id, location, load_varuint, load_node, load_location)
          when 119 then
            PostExecutionNode.new(source, node_id, location, load_varuint, load_optional_node, load_location, load_location, load_location)
          when 120 then
            PreExecutionNode.new(source, node_id, location, load_varuint, load_optional_node, load_location, load_location, load_location)
          when 121 then
            ProgramNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_node)
          when 122 then
            RangeNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_node, load_location)
          when 123 then
            RationalNode.new(source, node_id, location, load_varuint, load_integer, load_integer)
          when 124 then
            RedoNode.new(source, node_id, location, load_varuint)
          when 125 then
            RegularExpressionNode.new(source, node_id, location, load_varuint, load_location, load_location, load_location, load_string)
          when 126 then
            RequiredKeywordParameterNode.new(source, node_id, location, load_varuint, load_required_constant, load_location)
          when 127 then
            RequiredParameterNode.new(source, node_id, location, load_varuint, load_required_constant)
          when 128 then
            RescueModifierNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
          when 129 then
            RescueNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node)
          when 130 then
            RestParameterNode.new(source, node_id, location, load_varuint, load_optional_constant, load_optional_location, load_location)
          when 131 then
            RetryNode.new(source, node_id, location, load_varuint)
          when 132 then
            ReturnNode.new(source, node_id, location, load_varuint, load_location, load_optional_node)
          when 133 then
            SelfNode.new(source, node_id, location, load_varuint)
          when 134 then
            ShareableConstantNode.new(source, node_id, location, load_varuint, load_node)
          when 135 then
            SingletonClassNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_node, load_optional_node, load_location)
          when 136 then
            SourceEncodingNode.new(source, node_id, location, load_varuint)
          when 137 then
            SourceFileNode.new(source, node_id, location, load_varuint, load_string)
          when 138 then
            SourceLineNode.new(source, node_id, location, load_varuint)
          when 139 then
            SplatNode.new(source, node_id, location, load_varuint, load_location, load_optional_node)
          when 140 then
            StatementsNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node })
          when 141 then
            StringNode.new(source, node_id, location, load_varuint, load_optional_location, load_location, load_optional_location, load_string)
          when 142 then
            SuperNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node)
          when 143 then
            SymbolNode.new(source, node_id, location, load_varuint, load_optional_location, load_optional_location, load_optional_location, load_string)
          when 144 then
            TrueNode.new(source, node_id, location, load_varuint)
          when 145 then
            UndefNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_location)
          when 146 then
            UnlessNode.new(source, node_id, location, load_varuint, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location)
          when 147 then
            UntilNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_location, load_node, load_optional_node)
          when 148 then
            WhenNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node)
          when 149 then
            WhileNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_location, load_node, load_optional_node)
          when 150 then
            XStringNode.new(source, node_id, location, load_varuint, load_location, load_location, load_location, load_string)
          when 151 then
            YieldNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_node, load_optional_location)
          end
        end
      else
        def load_node
          type = io.getbyte
          @load_node_lambdas[type].call
        end

        def define_load_node_lambdas
          @load_node_lambdas = [
            nil,
            -> {
              node_id = load_varuint
              location = load_location
              AliasGlobalVariableNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              AliasMethodNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              AlternationPatternNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              AndNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ArgumentsNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node })
            },
            -> {
              node_id = load_varuint
              location = load_location
              ArrayNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ArrayPatternNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              AssocNode.new(source, node_id, location, load_varuint, load_node, load_node, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              AssocSplatNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BackReferenceReadNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BeginNode.new(source, node_id, location, load_varuint, load_optional_location, load_optional_node, load_optional_node, load_optional_node, load_optional_node, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BlockArgumentNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BlockLocalVariableNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BlockNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_optional_node, load_optional_node, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BlockParameterNode.new(source, node_id, location, load_varuint, load_optional_constant, load_optional_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BlockParametersNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              BreakNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CallAndWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CallNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_required_constant, load_optional_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CallOperatorWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_required_constant, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CallOrWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_optional_location, load_required_constant, load_required_constant, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CallTargetNode.new(source, node_id, location, load_varuint, load_node, load_location, load_required_constant, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CapturePatternNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CaseMatchNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              CaseNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ClassNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_location, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ClassVariableAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ClassVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ClassVariableOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ClassVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ClassVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ClassVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantPathAndWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantPathNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_constant, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantPathOperatorWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantPathOrWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantPathTargetNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_constant, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantPathWriteNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantReadNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ConstantWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              load_uint32
              DefNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_optional_node, load_optional_node, load_optional_node, Array.new(load_varuint) { load_required_constant }, load_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              DefinedNode.new(source, node_id, location, load_varuint, load_optional_location, load_node, load_optional_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ElseNode.new(source, node_id, location, load_varuint, load_location, load_optional_node, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              EmbeddedStatementsNode.new(source, node_id, location, load_varuint, load_location, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              EmbeddedVariableNode.new(source, node_id, location, load_varuint, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              EnsureNode.new(source, node_id, location, load_varuint, load_location, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              FalseNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              FindPatternNode.new(source, node_id, location, load_varuint, load_optional_node, load_node, Array.new(load_varuint) { load_node }, load_node, load_optional_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              FlipFlopNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              FloatNode.new(source, node_id, location, load_varuint, load_double)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ForNode.new(source, node_id, location, load_varuint, load_node, load_node, load_optional_node, load_location, load_location, load_optional_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ForwardingArgumentsNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ForwardingParameterNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ForwardingSuperNode.new(source, node_id, location, load_varuint, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              GlobalVariableAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              GlobalVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              GlobalVariableOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              GlobalVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              GlobalVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              GlobalVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              HashNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              HashPatternNode.new(source, node_id, location, load_varuint, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              IfNode.new(source, node_id, location, load_varuint, load_optional_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ImaginaryNode.new(source, node_id, location, load_varuint, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ImplicitNode.new(source, node_id, location, load_varuint, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ImplicitRestNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InNode.new(source, node_id, location, load_varuint, load_node, load_optional_node, load_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              IndexAndWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              IndexOperatorWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_required_constant, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              IndexOrWriteNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_location, load_location, load_optional_node, load_location, load_optional_node, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              IndexTargetNode.new(source, node_id, location, load_varuint, load_node, load_location, load_optional_node, load_location, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InstanceVariableAndWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InstanceVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InstanceVariableOrWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InstanceVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InstanceVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InstanceVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              IntegerNode.new(source, node_id, location, load_varuint, load_integer)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InterpolatedMatchLastLineNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InterpolatedRegularExpressionNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InterpolatedStringNode.new(source, node_id, location, load_varuint, load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InterpolatedSymbolNode.new(source, node_id, location, load_varuint, load_optional_location, Array.new(load_varuint) { load_node }, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              InterpolatedXStringNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ItLocalVariableReadNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ItParametersNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              KeywordHashNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node })
            },
            -> {
              node_id = load_varuint
              location = load_location
              KeywordRestParameterNode.new(source, node_id, location, load_varuint, load_optional_constant, load_optional_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              LambdaNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_location, load_optional_node, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              LocalVariableAndWriteNode.new(source, node_id, location, load_varuint, load_location, load_location, load_node, load_required_constant, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              LocalVariableOperatorWriteNode.new(source, node_id, location, load_varuint, load_location, load_location, load_node, load_required_constant, load_required_constant, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              LocalVariableOrWriteNode.new(source, node_id, location, load_varuint, load_location, load_location, load_node, load_required_constant, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              LocalVariableReadNode.new(source, node_id, location, load_varuint, load_required_constant, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              LocalVariableTargetNode.new(source, node_id, location, load_varuint, load_required_constant, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              LocalVariableWriteNode.new(source, node_id, location, load_varuint, load_required_constant, load_varuint, load_location, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              MatchLastLineNode.new(source, node_id, location, load_varuint, load_location, load_location, load_location, load_string)
            },
            -> {
              node_id = load_varuint
              location = load_location
              MatchPredicateNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              MatchRequiredNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              MatchWriteNode.new(source, node_id, location, load_varuint, load_node, Array.new(load_varuint) { load_node })
            },
            -> {
              node_id = load_varuint
              location = load_location
              MissingNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ModuleNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_node, load_location, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              MultiTargetNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              MultiWriteNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              NextNode.new(source, node_id, location, load_varuint, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              NilNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              NoKeywordsParameterNode.new(source, node_id, location, load_varuint, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              NumberedParametersNode.new(source, node_id, location, load_varuint, io.getbyte)
            },
            -> {
              node_id = load_varuint
              location = load_location
              NumberedReferenceReadNode.new(source, node_id, location, load_varuint, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              OptionalKeywordParameterNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              OptionalParameterNode.new(source, node_id, location, load_varuint, load_required_constant, load_location, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              OrNode.new(source, node_id, location, load_varuint, load_node, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ParametersNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ParenthesesNode.new(source, node_id, location, load_varuint, load_optional_node, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              PinnedExpressionNode.new(source, node_id, location, load_varuint, load_node, load_location, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              PinnedVariableNode.new(source, node_id, location, load_varuint, load_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              PostExecutionNode.new(source, node_id, location, load_varuint, load_optional_node, load_location, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              PreExecutionNode.new(source, node_id, location, load_varuint, load_optional_node, load_location, load_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ProgramNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RangeNode.new(source, node_id, location, load_varuint, load_optional_node, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RationalNode.new(source, node_id, location, load_varuint, load_integer, load_integer)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RedoNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RegularExpressionNode.new(source, node_id, location, load_varuint, load_location, load_location, load_location, load_string)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RequiredKeywordParameterNode.new(source, node_id, location, load_varuint, load_required_constant, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RequiredParameterNode.new(source, node_id, location, load_varuint, load_required_constant)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RescueModifierNode.new(source, node_id, location, load_varuint, load_node, load_location, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RescueNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RestParameterNode.new(source, node_id, location, load_varuint, load_optional_constant, load_optional_location, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              RetryNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ReturnNode.new(source, node_id, location, load_varuint, load_location, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SelfNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              ShareableConstantNode.new(source, node_id, location, load_varuint, load_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SingletonClassNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_node, load_optional_node, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SourceEncodingNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SourceFileNode.new(source, node_id, location, load_varuint, load_string)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SourceLineNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SplatNode.new(source, node_id, location, load_varuint, load_location, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              StatementsNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node })
            },
            -> {
              node_id = load_varuint
              location = load_location
              StringNode.new(source, node_id, location, load_varuint, load_optional_location, load_location, load_optional_location, load_string)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SuperNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              SymbolNode.new(source, node_id, location, load_varuint, load_optional_location, load_optional_location, load_optional_location, load_string)
            },
            -> {
              node_id = load_varuint
              location = load_location
              TrueNode.new(source, node_id, location, load_varuint)
            },
            -> {
              node_id = load_varuint
              location = load_location
              UndefNode.new(source, node_id, location, load_varuint, Array.new(load_varuint) { load_node }, load_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              UnlessNode.new(source, node_id, location, load_varuint, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location)
            },
            -> {
              node_id = load_varuint
              location = load_location
              UntilNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_location, load_node, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              WhenNode.new(source, node_id, location, load_varuint, load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              WhileNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_location, load_node, load_optional_node)
            },
            -> {
              node_id = load_varuint
              location = load_location
              XStringNode.new(source, node_id, location, load_varuint, load_location, load_location, load_location, load_string)
            },
            -> {
              node_id = load_varuint
              location = load_location
              YieldNode.new(source, node_id, location, load_varuint, load_location, load_optional_location, load_optional_node, load_optional_location)
            },
          ]
        end
      end
    end

    # The token types that can be indexed by their enum values.
    TOKEN_TYPES = [
      nil,
      :EOF,
      :MISSING,
      :NOT_PROVIDED,
      :AMPERSAND,
      :AMPERSAND_AMPERSAND,
      :AMPERSAND_AMPERSAND_EQUAL,
      :AMPERSAND_DOT,
      :AMPERSAND_EQUAL,
      :BACKTICK,
      :BACK_REFERENCE,
      :BANG,
      :BANG_EQUAL,
      :BANG_TILDE,
      :BRACE_LEFT,
      :BRACE_RIGHT,
      :BRACKET_LEFT,
      :BRACKET_LEFT_ARRAY,
      :BRACKET_LEFT_RIGHT,
      :BRACKET_LEFT_RIGHT_EQUAL,
      :BRACKET_RIGHT,
      :CARET,
      :CARET_EQUAL,
      :CHARACTER_LITERAL,
      :CLASS_VARIABLE,
      :COLON,
      :COLON_COLON,
      :COMMA,
      :COMMENT,
      :CONSTANT,
      :DOT,
      :DOT_DOT,
      :DOT_DOT_DOT,
      :EMBDOC_BEGIN,
      :EMBDOC_END,
      :EMBDOC_LINE,
      :EMBEXPR_BEGIN,
      :EMBEXPR_END,
      :EMBVAR,
      :EQUAL,
      :EQUAL_EQUAL,
      :EQUAL_EQUAL_EQUAL,
      :EQUAL_GREATER,
      :EQUAL_TILDE,
      :FLOAT,
      :FLOAT_IMAGINARY,
      :FLOAT_RATIONAL,
      :FLOAT_RATIONAL_IMAGINARY,
      :GLOBAL_VARIABLE,
      :GREATER,
      :GREATER_EQUAL,
      :GREATER_GREATER,
      :GREATER_GREATER_EQUAL,
      :HEREDOC_END,
      :HEREDOC_START,
      :IDENTIFIER,
      :IGNORED_NEWLINE,
      :INSTANCE_VARIABLE,
      :INTEGER,
      :INTEGER_IMAGINARY,
      :INTEGER_RATIONAL,
      :INTEGER_RATIONAL_IMAGINARY,
      :KEYWORD_ALIAS,
      :KEYWORD_AND,
      :KEYWORD_BEGIN,
      :KEYWORD_BEGIN_UPCASE,
      :KEYWORD_BREAK,
      :KEYWORD_CASE,
      :KEYWORD_CLASS,
      :KEYWORD_DEF,
      :KEYWORD_DEFINED,
      :KEYWORD_DO,
      :KEYWORD_DO_LOOP,
      :KEYWORD_ELSE,
      :KEYWORD_ELSIF,
      :KEYWORD_END,
      :KEYWORD_END_UPCASE,
      :KEYWORD_ENSURE,
      :KEYWORD_FALSE,
      :KEYWORD_FOR,
      :KEYWORD_IF,
      :KEYWORD_IF_MODIFIER,
      :KEYWORD_IN,
      :KEYWORD_MODULE,
      :KEYWORD_NEXT,
      :KEYWORD_NIL,
      :KEYWORD_NOT,
      :KEYWORD_OR,
      :KEYWORD_REDO,
      :KEYWORD_RESCUE,
      :KEYWORD_RESCUE_MODIFIER,
      :KEYWORD_RETRY,
      :KEYWORD_RETURN,
      :KEYWORD_SELF,
      :KEYWORD_SUPER,
      :KEYWORD_THEN,
      :KEYWORD_TRUE,
      :KEYWORD_UNDEF,
      :KEYWORD_UNLESS,
      :KEYWORD_UNLESS_MODIFIER,
      :KEYWORD_UNTIL,
      :KEYWORD_UNTIL_MODIFIER,
      :KEYWORD_WHEN,
      :KEYWORD_WHILE,
      :KEYWORD_WHILE_MODIFIER,
      :KEYWORD_YIELD,
      :KEYWORD___ENCODING__,
      :KEYWORD___FILE__,
      :KEYWORD___LINE__,
      :LABEL,
      :LABEL_END,
      :LAMBDA_BEGIN,
      :LESS,
      :LESS_EQUAL,
      :LESS_EQUAL_GREATER,
      :LESS_LESS,
      :LESS_LESS_EQUAL,
      :METHOD_NAME,
      :MINUS,
      :MINUS_EQUAL,
      :MINUS_GREATER,
      :NEWLINE,
      :NUMBERED_REFERENCE,
      :PARENTHESIS_LEFT,
      :PARENTHESIS_LEFT_PARENTHESES,
      :PARENTHESIS_RIGHT,
      :PERCENT,
      :PERCENT_EQUAL,
      :PERCENT_LOWER_I,
      :PERCENT_LOWER_W,
      :PERCENT_LOWER_X,
      :PERCENT_UPPER_I,
      :PERCENT_UPPER_W,
      :PIPE,
      :PIPE_EQUAL,
      :PIPE_PIPE,
      :PIPE_PIPE_EQUAL,
      :PLUS,
      :PLUS_EQUAL,
      :QUESTION_MARK,
      :REGEXP_BEGIN,
      :REGEXP_END,
      :SEMICOLON,
      :SLASH,
      :SLASH_EQUAL,
      :STAR,
      :STAR_EQUAL,
      :STAR_STAR,
      :STAR_STAR_EQUAL,
      :STRING_BEGIN,
      :STRING_CONTENT,
      :STRING_END,
      :SYMBOL_BEGIN,
      :TILDE,
      :UAMPERSAND,
      :UCOLON_COLON,
      :UDOT_DOT,
      :UDOT_DOT_DOT,
      :UMINUS,
      :UMINUS_NUM,
      :UPLUS,
      :USTAR,
      :USTAR_STAR,
      :WORDS_SEP,
      :__END__,
    ]
  end
end
PK*J[`�ո����share/ruby/prism/lex_compat.rbnu�[���# frozen_string_literal: true

require "delegate"
require "ripper"

module Prism
  # This class is responsible for lexing the source using prism and then
  # converting those tokens to be compatible with Ripper. In the vast majority
  # of cases, this is a one-to-one mapping of the token type. Everything else
  # generally lines up. However, there are a few cases that require special
  # handling.
  class LexCompat # :nodoc:
    # A result class specialized for holding tokens produced by the lexer.
    class Result < Prism::Result
      # The list of tokens that were produced by the lexer.
      attr_reader :value

      # Create a new lex compat result object with the given values.
      def initialize(value, comments, magic_comments, data_loc, errors, warnings, source)
        @value = value
        super(comments, magic_comments, data_loc, errors, warnings, source)
      end

      # Implement the hash pattern matching interface for Result.
      def deconstruct_keys(keys)
        super.merge!(value: value)
      end
    end

    # This is a mapping of prism token types to Ripper token types. This is a
    # many-to-one mapping because we split up our token types, whereas Ripper
    # tends to group them.
    RIPPER = {
      AMPERSAND: :on_op,
      AMPERSAND_AMPERSAND: :on_op,
      AMPERSAND_AMPERSAND_EQUAL: :on_op,
      AMPERSAND_DOT: :on_op,
      AMPERSAND_EQUAL: :on_op,
      BACK_REFERENCE: :on_backref,
      BACKTICK: :on_backtick,
      BANG: :on_op,
      BANG_EQUAL: :on_op,
      BANG_TILDE: :on_op,
      BRACE_LEFT: :on_lbrace,
      BRACE_RIGHT: :on_rbrace,
      BRACKET_LEFT: :on_lbracket,
      BRACKET_LEFT_ARRAY: :on_lbracket,
      BRACKET_LEFT_RIGHT: :on_op,
      BRACKET_LEFT_RIGHT_EQUAL: :on_op,
      BRACKET_RIGHT: :on_rbracket,
      CARET: :on_op,
      CARET_EQUAL: :on_op,
      CHARACTER_LITERAL: :on_CHAR,
      CLASS_VARIABLE: :on_cvar,
      COLON: :on_op,
      COLON_COLON: :on_op,
      COMMA: :on_comma,
      COMMENT: :on_comment,
      CONSTANT: :on_const,
      DOT: :on_period,
      DOT_DOT: :on_op,
      DOT_DOT_DOT: :on_op,
      EMBDOC_BEGIN: :on_embdoc_beg,
      EMBDOC_END: :on_embdoc_end,
      EMBDOC_LINE: :on_embdoc,
      EMBEXPR_BEGIN: :on_embexpr_beg,
      EMBEXPR_END: :on_embexpr_end,
      EMBVAR: :on_embvar,
      EOF: :on_eof,
      EQUAL: :on_op,
      EQUAL_EQUAL: :on_op,
      EQUAL_EQUAL_EQUAL: :on_op,
      EQUAL_GREATER: :on_op,
      EQUAL_TILDE: :on_op,
      FLOAT: :on_float,
      FLOAT_IMAGINARY: :on_imaginary,
      FLOAT_RATIONAL: :on_rational,
      FLOAT_RATIONAL_IMAGINARY: :on_imaginary,
      GREATER: :on_op,
      GREATER_EQUAL: :on_op,
      GREATER_GREATER: :on_op,
      GREATER_GREATER_EQUAL: :on_op,
      GLOBAL_VARIABLE: :on_gvar,
      HEREDOC_END: :on_heredoc_end,
      HEREDOC_START: :on_heredoc_beg,
      IDENTIFIER: :on_ident,
      IGNORED_NEWLINE: :on_ignored_nl,
      INTEGER: :on_int,
      INTEGER_IMAGINARY: :on_imaginary,
      INTEGER_RATIONAL: :on_rational,
      INTEGER_RATIONAL_IMAGINARY: :on_imaginary,
      INSTANCE_VARIABLE: :on_ivar,
      INVALID: :INVALID,
      KEYWORD___ENCODING__: :on_kw,
      KEYWORD___LINE__: :on_kw,
      KEYWORD___FILE__: :on_kw,
      KEYWORD_ALIAS: :on_kw,
      KEYWORD_AND: :on_kw,
      KEYWORD_BEGIN: :on_kw,
      KEYWORD_BEGIN_UPCASE: :on_kw,
      KEYWORD_BREAK: :on_kw,
      KEYWORD_CASE: :on_kw,
      KEYWORD_CLASS: :on_kw,
      KEYWORD_DEF: :on_kw,
      KEYWORD_DEFINED: :on_kw,
      KEYWORD_DO: :on_kw,
      KEYWORD_DO_LOOP: :on_kw,
      KEYWORD_ELSE: :on_kw,
      KEYWORD_ELSIF: :on_kw,
      KEYWORD_END: :on_kw,
      KEYWORD_END_UPCASE: :on_kw,
      KEYWORD_ENSURE: :on_kw,
      KEYWORD_FALSE: :on_kw,
      KEYWORD_FOR: :on_kw,
      KEYWORD_IF: :on_kw,
      KEYWORD_IF_MODIFIER: :on_kw,
      KEYWORD_IN: :on_kw,
      KEYWORD_MODULE: :on_kw,
      KEYWORD_NEXT: :on_kw,
      KEYWORD_NIL: :on_kw,
      KEYWORD_NOT: :on_kw,
      KEYWORD_OR: :on_kw,
      KEYWORD_REDO: :on_kw,
      KEYWORD_RESCUE: :on_kw,
      KEYWORD_RESCUE_MODIFIER: :on_kw,
      KEYWORD_RETRY: :on_kw,
      KEYWORD_RETURN: :on_kw,
      KEYWORD_SELF: :on_kw,
      KEYWORD_SUPER: :on_kw,
      KEYWORD_THEN: :on_kw,
      KEYWORD_TRUE: :on_kw,
      KEYWORD_UNDEF: :on_kw,
      KEYWORD_UNLESS: :on_kw,
      KEYWORD_UNLESS_MODIFIER: :on_kw,
      KEYWORD_UNTIL: :on_kw,
      KEYWORD_UNTIL_MODIFIER: :on_kw,
      KEYWORD_WHEN: :on_kw,
      KEYWORD_WHILE: :on_kw,
      KEYWORD_WHILE_MODIFIER: :on_kw,
      KEYWORD_YIELD: :on_kw,
      LABEL: :on_label,
      LABEL_END: :on_label_end,
      LAMBDA_BEGIN: :on_tlambeg,
      LESS: :on_op,
      LESS_EQUAL: :on_op,
      LESS_EQUAL_GREATER: :on_op,
      LESS_LESS: :on_op,
      LESS_LESS_EQUAL: :on_op,
      METHOD_NAME: :on_ident,
      MINUS: :on_op,
      MINUS_EQUAL: :on_op,
      MINUS_GREATER: :on_tlambda,
      NEWLINE: :on_nl,
      NUMBERED_REFERENCE: :on_backref,
      PARENTHESIS_LEFT: :on_lparen,
      PARENTHESIS_LEFT_PARENTHESES: :on_lparen,
      PARENTHESIS_RIGHT: :on_rparen,
      PERCENT: :on_op,
      PERCENT_EQUAL: :on_op,
      PERCENT_LOWER_I: :on_qsymbols_beg,
      PERCENT_LOWER_W: :on_qwords_beg,
      PERCENT_LOWER_X: :on_backtick,
      PERCENT_UPPER_I: :on_symbols_beg,
      PERCENT_UPPER_W: :on_words_beg,
      PIPE: :on_op,
      PIPE_EQUAL: :on_op,
      PIPE_PIPE: :on_op,
      PIPE_PIPE_EQUAL: :on_op,
      PLUS: :on_op,
      PLUS_EQUAL: :on_op,
      QUESTION_MARK: :on_op,
      RATIONAL_FLOAT: :on_rational,
      RATIONAL_INTEGER: :on_rational,
      REGEXP_BEGIN: :on_regexp_beg,
      REGEXP_END: :on_regexp_end,
      SEMICOLON: :on_semicolon,
      SLASH: :on_op,
      SLASH_EQUAL: :on_op,
      STAR: :on_op,
      STAR_EQUAL: :on_op,
      STAR_STAR: :on_op,
      STAR_STAR_EQUAL: :on_op,
      STRING_BEGIN: :on_tstring_beg,
      STRING_CONTENT: :on_tstring_content,
      STRING_END: :on_tstring_end,
      SYMBOL_BEGIN: :on_symbeg,
      TILDE: :on_op,
      UAMPERSAND: :on_op,
      UCOLON_COLON: :on_op,
      UDOT_DOT: :on_op,
      UDOT_DOT_DOT: :on_op,
      UMINUS: :on_op,
      UMINUS_NUM: :on_op,
      UPLUS: :on_op,
      USTAR: :on_op,
      USTAR_STAR: :on_op,
      WORDS_SEP: :on_words_sep,
      "__END__": :on___end__
    }.freeze

    # When we produce tokens, we produce the same arrays that Ripper does.
    # However, we add a couple of convenience methods onto them to make them a
    # little easier to work with. We delegate all other methods to the array.
    class Token < SimpleDelegator
      # @dynamic initialize, each, []

      # The location of the token in the source.
      def location
        self[0]
      end

      # The type of the token.
      def event
        self[1]
      end

      # The slice of the source that this token represents.
      def value
        self[2]
      end

      # The state of the lexer when this token was produced.
      def state
        self[3]
      end
    end

    # Ripper doesn't include the rest of the token in the event, so we need to
    # trim it down to just the content on the first line when comparing.
    class EndContentToken < Token
      def ==(other) # :nodoc:
        [self[0], self[1], self[2][0..self[2].index("\n")], self[3]] == other
      end
    end

    # Tokens where state should be ignored
    # used for :on_comment, :on_heredoc_end, :on_embexpr_end
    class IgnoreStateToken < Token
      def ==(other) # :nodoc:
        self[0...-1] == other[0...-1]
      end
    end

    # Ident tokens for the most part are exactly the same, except sometimes we
    # know an ident is a local when ripper doesn't (when they are introduced
    # through named captures in regular expressions). In that case we don't
    # compare the state.
    class IdentToken < Token
      def ==(other) # :nodoc:
        (self[0...-1] == other[0...-1]) && (
          (other[3] == Ripper::EXPR_LABEL | Ripper::EXPR_END) ||
          (other[3] & Ripper::EXPR_ARG_ANY != 0)
        )
      end
    end

    # Ignored newlines can occasionally have a LABEL state attached to them, so
    # we compare the state differently here.
    class IgnoredNewlineToken < Token
      def ==(other) # :nodoc:
        return false unless self[0...-1] == other[0...-1]

        if self[3] == Ripper::EXPR_ARG | Ripper::EXPR_LABELED
          other[3] & Ripper::EXPR_ARG | Ripper::EXPR_LABELED != 0
        else
          self[3] == other[3]
        end
      end
    end

    # If we have an identifier that follows a method name like:
    #
    #     def foo bar
    #
    # then Ripper will mark bar as END|LABEL if there is a local in a parent
    # scope named bar because it hasn't pushed the local table yet. We do this
    # more accurately, so we need to allow comparing against both END and
    # END|LABEL.
    class ParamToken < Token
      def ==(other) # :nodoc:
        (self[0...-1] == other[0...-1]) && (
          (other[3] == Ripper::EXPR_END) ||
          (other[3] == Ripper::EXPR_END | Ripper::EXPR_LABEL)
        )
      end
    end

    # A heredoc in this case is a list of tokens that belong to the body of the
    # heredoc that should be appended onto the list of tokens when the heredoc
    # closes.
    module Heredoc # :nodoc:
      # Heredocs that are no dash or tilde heredocs are just a list of tokens.
      # We need to keep them around so that we can insert them in the correct
      # order back into the token stream and set the state of the last token to
      # the state that the heredoc was opened in.
      class PlainHeredoc # :nodoc:
        attr_reader :tokens

        def initialize
          @tokens = []
        end

        def <<(token)
          tokens << token
        end

        def to_a
          tokens
        end
      end

      # Dash heredocs are a little more complicated. They are a list of tokens
      # that need to be split on "\\\n" to mimic Ripper's behavior. We also need
      # to keep track of the state that the heredoc was opened in.
      class DashHeredoc # :nodoc:
        attr_reader :split, :tokens

        def initialize(split)
          @split = split
          @tokens = []
        end

        def <<(token)
          tokens << token
        end

        def to_a
          embexpr_balance = 0

          tokens.each_with_object([]) do |token, results| #$ Array[Token]
            case token.event
            when :on_embexpr_beg
              embexpr_balance += 1
              results << token
            when :on_embexpr_end
              embexpr_balance -= 1
              results << token
            when :on_tstring_content
              if embexpr_balance == 0
                lineno = token[0][0]
                column = token[0][1]

                if split
                  # Split on "\\\n" to mimic Ripper's behavior. Use a lookbehind
                  # to keep the delimiter in the result.
                  token.value.split(/(?<=[^\\]\\\n)|(?<=[^\\]\\\r\n)/).each_with_index do |value, index|
                    column = 0 if index > 0
                    results << Token.new([[lineno, column], :on_tstring_content, value, token.state])
                    lineno += value.count("\n")
                  end
                else
                  results << token
                end
              else
                results << token
              end
            else
              results << token
            end
          end
        end
      end

      # Heredocs that are dedenting heredocs are a little more complicated.
      # Ripper outputs on_ignored_sp tokens for the whitespace that is being
      # removed from the output. prism only modifies the node itself and keeps
      # the token the same. This simplifies prism, but makes comparing against
      # Ripper much harder because there is a length mismatch.
      #
      # Fortunately, we already have to pull out the heredoc tokens in order to
      # insert them into the stream in the correct order. As such, we can do
      # some extra manipulation on the tokens to make them match Ripper's
      # output by mirroring the dedent logic that Ripper uses.
      class DedentingHeredoc # :nodoc:
        TAB_WIDTH = 8

        attr_reader :tokens, :dedent_next, :dedent, :embexpr_balance

        def initialize
          @tokens = []
          @dedent_next = true
          @dedent = nil
          @embexpr_balance = 0
          @ended_on_newline = false
        end

        # As tokens are coming in, we track the minimum amount of common leading
        # whitespace on plain string content tokens. This allows us to later
        # remove that amount of whitespace from the beginning of each line.
        def <<(token)
          case token.event
          when :on_embexpr_beg, :on_heredoc_beg
            @embexpr_balance += 1
            @dedent = 0 if @dedent_next && @ended_on_newline
          when :on_embexpr_end, :on_heredoc_end
            @embexpr_balance -= 1
          when :on_tstring_content
            if embexpr_balance == 0
              line = token.value

              if dedent_next && !(line.strip.empty? && line.end_with?("\n"))
                leading = line[/\A(\s*)\n?/, 1]
                next_dedent = 0

                leading.each_char do |char|
                  if char == "\t"
                    next_dedent = next_dedent - (next_dedent % TAB_WIDTH) + TAB_WIDTH
                  else
                    next_dedent += 1
                  end
                end

                @dedent = [dedent, next_dedent].compact.min
                @dedent_next = true
                @ended_on_newline = line.end_with?("\n")
                tokens << token
                return
              end
            end
          end

          @dedent_next = token.event == :on_tstring_content && embexpr_balance == 0
          @ended_on_newline = false
          tokens << token
        end

        def to_a
          # If every line in the heredoc is blank, we still need to split up the
          # string content token into multiple tokens.
          if dedent.nil?
            results = [] #: Array[Token]
            embexpr_balance = 0

            tokens.each do |token|
              case token.event
              when :on_embexpr_beg, :on_heredoc_beg
                embexpr_balance += 1
                results << token
              when :on_embexpr_end, :on_heredoc_end
                embexpr_balance -= 1
                results << token
              when :on_tstring_content
                if embexpr_balance == 0
                  lineno = token[0][0]
                  column = token[0][1]

                  token.value.split(/(?<=\n)/).each_with_index do |value, index|
                    column = 0 if index > 0
                    results << Token.new([[lineno, column], :on_tstring_content, value, token.state])
                    lineno += 1
                  end
                else
                  results << token
                end
              else
                results << token
              end
            end

            return results
          end

          # If the minimum common whitespace is 0, then we need to concatenate
          # string nodes together that are immediately adjacent.
          if dedent == 0
            results = [] #: Array[Token]
            embexpr_balance = 0

            index = 0
            max_index = tokens.length

            while index < max_index
              token = tokens[index]
              results << token
              index += 1

              case token.event
              when :on_embexpr_beg, :on_heredoc_beg
                embexpr_balance += 1
              when :on_embexpr_end, :on_heredoc_end
                embexpr_balance -= 1
              when :on_tstring_content
                if embexpr_balance == 0
                  while index < max_index && tokens[index].event == :on_tstring_content && !token.value.match?(/\\\r?\n\z/)
                    token.value << tokens[index].value
                    index += 1
                  end
                end
              end
            end

            return results
          end

          # Otherwise, we're going to run through each token in the list and
          # insert on_ignored_sp tokens for the amount of dedent that we need to
          # perform. We also need to remove the dedent from the beginning of
          # each line of plain string content tokens.
          results = [] #: Array[Token]
          dedent_next = true
          embexpr_balance = 0

          tokens.each do |token|
            # Notice that the structure of this conditional largely matches the
            # whitespace calculation we performed above. This is because
            # checking if the subsequent token needs to be dedented is common to
            # both the dedent calculation and the ignored_sp insertion.
            case token.event
            when :on_embexpr_beg
              embexpr_balance += 1
              results << token
            when :on_embexpr_end
              embexpr_balance -= 1
              results << token
            when :on_tstring_content
              if embexpr_balance == 0
                # Here we're going to split the string on newlines, but maintain
                # the newlines in the resulting array. We'll do that with a look
                # behind assertion.
                splits = token.value.split(/(?<=\n)/)
                index = 0

                while index < splits.length
                  line = splits[index]
                  lineno = token[0][0] + index
                  column = token[0][1]

                  # Blank lines do not count toward common leading whitespace
                  # calculation and do not need to be dedented.
                  if dedent_next || index > 0
                    column = 0
                  end

                  # If the dedent is 0 and we're not supposed to dedent the next
                  # line or this line doesn't start with whitespace, then we
                  # should concatenate the rest of the string to match ripper.
                  if dedent == 0 && (!dedent_next || !line.start_with?(/\s/))
                    line = splits[index..].join
                    index = splits.length
                  end

                  # If we are supposed to dedent this line or if this is not the
                  # first line of the string and this line isn't entirely blank,
                  # then we need to insert an on_ignored_sp token and remove the
                  # dedent from the beginning of the line.
                  if (dedent > 0) && (dedent_next || index > 0)
                    deleting = 0
                    deleted_chars = [] #: Array[String]

                    # Gather up all of the characters that we're going to
                    # delete, stopping when you hit a character that would put
                    # you over the dedent amount.
                    line.each_char.with_index do |char, i|
                      case char
                      when "\r"
                        if line[i + 1] == "\n"
                          break
                        end
                      when "\n"
                        break
                      when "\t"
                        deleting = deleting - (deleting % TAB_WIDTH) + TAB_WIDTH
                      else
                        deleting += 1
                      end

                      break if deleting > dedent
                      deleted_chars << char
                    end

                    # If we have something to delete, then delete it from the
                    # string and insert an on_ignored_sp token.
                    if deleted_chars.any?
                      ignored = deleted_chars.join
                      line.delete_prefix!(ignored)

                      results << Token.new([[lineno, 0], :on_ignored_sp, ignored, token[3]])
                      column = ignored.length
                    end
                  end

                  results << Token.new([[lineno, column], token[1], line, token[3]]) unless line.empty?
                  index += 1
                end
              else
                results << token
              end
            else
              results << token
            end

            dedent_next =
              ((token.event == :on_tstring_content) || (token.event == :on_heredoc_end)) &&
              embexpr_balance == 0
          end

          results
        end
      end

      # Here we will split between the two types of heredocs and return the
      # object that will store their tokens.
      def self.build(opening)
        case opening.value[2]
        when "~"
          DedentingHeredoc.new
        when "-"
          DashHeredoc.new(opening.value[3] != "'")
        else
          PlainHeredoc.new
        end
      end
    end

    private_constant :Heredoc

    attr_reader :source, :options

    def initialize(source, **options)
      @source = source
      @options = options
    end

    def result
      tokens = [] #: Array[LexCompat::Token]

      state = :default
      heredoc_stack = [[]] #: Array[Array[Heredoc::PlainHeredoc | Heredoc::DashHeredoc | Heredoc::DedentingHeredoc]]

      result = Prism.lex(source, **options)
      result_value = result.value
      previous_state = nil #: Ripper::Lexer::State?
      last_heredoc_end = nil #: Integer?

      # In previous versions of Ruby, Ripper wouldn't flush the bom before the
      # first token, so we had to have a hack in place to account for that. This
      # checks for that behavior.
      bom_flushed = Ripper.lex("\xEF\xBB\xBF# test")[0][0][1] == 0
      bom = source.byteslice(0..2) == "\xEF\xBB\xBF"

      result_value.each_with_index do |(token, lex_state), index|
        lineno = token.location.start_line
        column = token.location.start_column

        # If there's a UTF-8 byte-order mark as the start of the file, then for
        # certain tokens ripper sets the first token back by 3 bytes. It also
        # keeps the byte order mark in the first token's value. This is weird,
        # and I don't want to mirror that in our parser. So instead, we'll match
        # up the columns and values here.
        if bom && lineno == 1
          column -= 3

          if index == 0 && column == 0 && !bom_flushed
            flushed =
              case token.type
              when :BACK_REFERENCE, :INSTANCE_VARIABLE, :CLASS_VARIABLE,
                  :GLOBAL_VARIABLE, :NUMBERED_REFERENCE, :PERCENT_LOWER_I,
                  :PERCENT_LOWER_X, :PERCENT_LOWER_W, :PERCENT_UPPER_I,
                  :PERCENT_UPPER_W, :STRING_BEGIN
                true
              when :REGEXP_BEGIN, :SYMBOL_BEGIN
                token.value.start_with?("%")
              else
                false
              end

            unless flushed
              column -= 3
              value = token.value
              value.prepend(String.new("\xEF\xBB\xBF", encoding: value.encoding))
            end
          end
        end

        event = RIPPER.fetch(token.type)
        value = token.value
        lex_state = Ripper::Lexer::State.new(lex_state)

        token =
          case event
          when :on___end__
            EndContentToken.new([[lineno, column], event, value, lex_state])
          when :on_comment
            IgnoreStateToken.new([[lineno, column], event, value, lex_state])
          when :on_heredoc_end
            # Heredoc end tokens can be emitted in an odd order, so we don't
            # want to bother comparing the state on them.
            last_heredoc_end = token.location.end_offset
            IgnoreStateToken.new([[lineno, column], event, value, lex_state])
          when :on_ident
            if lex_state == Ripper::EXPR_END
              # If we have an identifier that follows a method name like:
              #
              #     def foo bar
              #
              # then Ripper will mark bar as END|LABEL if there is a local in a
              # parent scope named bar because it hasn't pushed the local table
              # yet. We do this more accurately, so we need to allow comparing
              # against both END and END|LABEL.
              ParamToken.new([[lineno, column], event, value, lex_state])
            elsif lex_state == Ripper::EXPR_END | Ripper::EXPR_LABEL
              # In the event that we're comparing identifiers, we're going to
              # allow a little divergence. Ripper doesn't account for local
              # variables introduced through named captures in regexes, and we
              # do, which accounts for this difference.
              IdentToken.new([[lineno, column], event, value, lex_state])
            else
              Token.new([[lineno, column], event, value, lex_state])
            end
          when :on_embexpr_end
            IgnoreStateToken.new([[lineno, column], event, value, lex_state])
          when :on_ignored_nl
            # Ignored newlines can occasionally have a LABEL state attached to
            # them which doesn't actually impact anything. We don't mirror that
            # state so we ignored it.
            IgnoredNewlineToken.new([[lineno, column], event, value, lex_state])
          when :on_regexp_end
            # On regex end, Ripper scans and then sets end state, so the ripper
            # lexed output is begin, when it should be end. prism sets lex state
            # correctly to end state, but we want to be able to compare against
            # Ripper's lexed state. So here, if it's a regexp end token, we
            # output the state as the previous state, solely for the sake of
            # comparison.
            previous_token = result_value[index - 1][0]
            lex_state =
              if RIPPER.fetch(previous_token.type) == :on_embexpr_end
                # If the previous token is embexpr_end, then we have to do even
                # more processing. The end of an embedded expression sets the
                # state to the state that it had at the beginning of the
                # embedded expression. So we have to go and find that state and
                # set it here.
                counter = 1
                current_index = index - 1

                until counter == 0
                  current_index -= 1
                  current_event = RIPPER.fetch(result_value[current_index][0].type)
                  counter += { on_embexpr_beg: -1, on_embexpr_end: 1 }[current_event] || 0
                end

                Ripper::Lexer::State.new(result_value[current_index][1])
              else
                previous_state
              end

            Token.new([[lineno, column], event, value, lex_state])
          when :on_eof
            previous_token = result_value[index - 1][0]

            # If we're at the end of the file and the previous token was a
            # comment and there is still whitespace after the comment, then
            # Ripper will append a on_nl token (even though there isn't
            # necessarily a newline). We mirror that here.
            if previous_token.type == :COMMENT
              # If the comment is at the start of a heredoc: <<HEREDOC # comment
              # then the comment's end_offset is up near the heredoc_beg.
              # This is not the correct offset to use for figuring out if
              # there is trailing whitespace after the last token.
              # Use the greater offset of the two to determine the start of
              # the trailing whitespace.
              start_offset = [previous_token.location.end_offset, last_heredoc_end].compact.max
              end_offset = token.location.start_offset

              if start_offset < end_offset
                if bom
                  start_offset += 3
                  end_offset += 3
                end

                tokens << Token.new([[lineno, 0], :on_nl, source.byteslice(start_offset...end_offset), lex_state])
              end
            end

            Token.new([[lineno, column], event, value, lex_state])
          else
            Token.new([[lineno, column], event, value, lex_state])
          end

        previous_state = lex_state

        # The order in which tokens appear in our lexer is different from the
        # order that they appear in Ripper. When we hit the declaration of a
        # heredoc in prism, we skip forward and lex the rest of the content of
        # the heredoc before going back and lexing at the end of the heredoc
        # identifier.
        #
        # To match up to ripper, we keep a small state variable around here to
        # track whether we're in the middle of a heredoc or not. In this way we
        # can shuffle around the token to match Ripper's output.
        case state
        when :default
          # The default state is when there are no heredocs at all. In this
          # state we can append the token to the list of tokens and move on.
          tokens << token

          # If we get the declaration of a heredoc, then we open a new heredoc
          # and move into the heredoc_opened state.
          if event == :on_heredoc_beg
            state = :heredoc_opened
            heredoc_stack.last << Heredoc.build(token)
          end
        when :heredoc_opened
          # The heredoc_opened state is when we've seen the declaration of a
          # heredoc and are now lexing the body of the heredoc. In this state we
          # push tokens onto the most recently created heredoc.
          heredoc_stack.last.last << token

          case event
          when :on_heredoc_beg
            # If we receive a heredoc declaration while lexing the body of a
            # heredoc, this means we have nested heredocs. In this case we'll
            # push a new heredoc onto the stack and stay in the heredoc_opened
            # state since we're now lexing the body of the new heredoc.
            heredoc_stack << [Heredoc.build(token)]
          when :on_heredoc_end
            # If we receive the end of a heredoc, then we're done lexing the
            # body of the heredoc. In this case we now have a completed heredoc
            # but need to wait for the next newline to push it into the token
            # stream.
            state = :heredoc_closed
          end
        when :heredoc_closed
          if %i[on_nl on_ignored_nl on_comment].include?(event) || (event == :on_tstring_content && value.end_with?("\n"))
            if heredoc_stack.size > 1
              flushing = heredoc_stack.pop
              heredoc_stack.last.last << token

              flushing.each do |heredoc|
                heredoc.to_a.each do |flushed_token|
                  heredoc_stack.last.last << flushed_token
                end
              end

              state = :heredoc_opened
              next
            end
          elsif event == :on_heredoc_beg
            tokens << token
            state = :heredoc_opened
            heredoc_stack.last << Heredoc.build(token)
            next
          elsif heredoc_stack.size > 1
            heredoc_stack[-2].last << token
            next
          end

          heredoc_stack.last.each do |heredoc|
            tokens.concat(heredoc.to_a)
          end

          heredoc_stack.last.clear
          state = :default

          tokens << token
        end
      end

      # Drop the EOF token from the list
      tokens = tokens[0...-1]

      # We sort by location to compare against Ripper's output
      tokens.sort_by!(&:location)

      Result.new(tokens, result.comments, result.magic_comments, result.data_loc, result.errors, result.warnings, Source.for(source))
    end
  end

  private_constant :LexCompat

  # This is a class that wraps the Ripper lexer to produce almost exactly the
  # same tokens.
  class LexRipper # :nodoc:
    attr_reader :source

    def initialize(source)
      @source = source
    end

    def result
      previous = [] #: [[Integer, Integer], Symbol, String, untyped] | []
      results = [] #: Array[[[Integer, Integer], Symbol, String, untyped]]

      lex(source).each do |token|
        case token[1]
        when :on_sp
          # skip
        when :on_tstring_content
          if previous[1] == :on_tstring_content && (token[2].start_with?("\#$") || token[2].start_with?("\#@"))
            previous[2] << token[2]
          else
            results << token
            previous = token
          end
        when :on_words_sep
          if previous[1] == :on_words_sep
            previous[2] << token[2]
          else
            results << token
            previous = token
          end
        else
          results << token
          previous = token
        end
      end

      results
    end

    private

    if Ripper.method(:lex).parameters.assoc(:keyrest)
      def lex(source)
        Ripper.lex(source, raise_errors: true)
      end
    else
      def lex(source)
        ripper = Ripper::Lexer.new(source)
        ripper.lex.tap do |result|
          raise SyntaxError, ripper.errors.map(&:message).join(' ;') if ripper.errors.any?
        end
      end
    end
  end

  private_constant :LexRipper
end
PK*J[V�B�� share/ruby/prism/string_query.rbnu�[���# frozen_string_literal: true

module Prism
  # Query methods that allow categorizing strings based on their context for
  # where they could be valid in a Ruby syntax tree.
  class StringQuery
    # The string that this query is wrapping.
    attr_reader :string

    # Initialize a new query with the given string.
    def initialize(string)
      @string = string
    end

    # Whether or not this string is a valid local variable name.
    def local?
      StringQuery.local?(string)
    end

    # Whether or not this string is a valid constant name.
    def constant?
      StringQuery.constant?(string)
    end

    # Whether or not this string is a valid method name.
    def method_name?
      StringQuery.method_name?(string)
    end
  end
end
PK*J[c!��=�=share/ruby/prism/visitor.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/visitor.rb.erb
if you are looking to modify the template
=end

module Prism
  # A class that knows how to walk down the tree. None of the individual visit
  # methods are implemented on this visitor, so it forces the consumer to
  # implement each one that they need. For a default implementation that
  # continues walking the tree, see the Visitor class.
  class BasicVisitor
    # Calls `accept` on the given node if it is not `nil`, which in turn should
    # call back into this visitor by calling the appropriate `visit_*` method.
    def visit(node)
      # @type self: _Visitor
      node&.accept(self)
    end

    # Visits each node in `nodes` by calling `accept` on each one.
    def visit_all(nodes)
      # @type self: _Visitor
      nodes.each { |node| node&.accept(self) }
    end

    # Visits the child nodes of `node` by calling `accept` on each one.
    def visit_child_nodes(node)
      # @type self: _Visitor
      node.compact_child_nodes.each { |node| node.accept(self) }
    end
  end

  # A visitor is a class that provides a default implementation for every accept
  # method defined on the nodes. This means it can walk a tree without the
  # caller needing to define any special handling. This allows you to handle a
  # subset of the tree, while still walking the whole tree.
  #
  # For example, to find all of the method calls that call the `foo` method, you
  # could write:
  #
  #     class FooCalls < Prism::Visitor
  #       def visit_call_node(node)
  #         if node.name == "foo"
  #           # Do something with the node
  #         end
  #
  #         # Call super so that the visitor continues walking the tree
  #         super
  #       end
  #     end
  #
  class Visitor < BasicVisitor
    # Visit a AliasGlobalVariableNode node
    alias visit_alias_global_variable_node visit_child_nodes

    # Visit a AliasMethodNode node
    alias visit_alias_method_node visit_child_nodes

    # Visit a AlternationPatternNode node
    alias visit_alternation_pattern_node visit_child_nodes

    # Visit a AndNode node
    alias visit_and_node visit_child_nodes

    # Visit a ArgumentsNode node
    alias visit_arguments_node visit_child_nodes

    # Visit a ArrayNode node
    alias visit_array_node visit_child_nodes

    # Visit a ArrayPatternNode node
    alias visit_array_pattern_node visit_child_nodes

    # Visit a AssocNode node
    alias visit_assoc_node visit_child_nodes

    # Visit a AssocSplatNode node
    alias visit_assoc_splat_node visit_child_nodes

    # Visit a BackReferenceReadNode node
    alias visit_back_reference_read_node visit_child_nodes

    # Visit a BeginNode node
    alias visit_begin_node visit_child_nodes

    # Visit a BlockArgumentNode node
    alias visit_block_argument_node visit_child_nodes

    # Visit a BlockLocalVariableNode node
    alias visit_block_local_variable_node visit_child_nodes

    # Visit a BlockNode node
    alias visit_block_node visit_child_nodes

    # Visit a BlockParameterNode node
    alias visit_block_parameter_node visit_child_nodes

    # Visit a BlockParametersNode node
    alias visit_block_parameters_node visit_child_nodes

    # Visit a BreakNode node
    alias visit_break_node visit_child_nodes

    # Visit a CallAndWriteNode node
    alias visit_call_and_write_node visit_child_nodes

    # Visit a CallNode node
    alias visit_call_node visit_child_nodes

    # Visit a CallOperatorWriteNode node
    alias visit_call_operator_write_node visit_child_nodes

    # Visit a CallOrWriteNode node
    alias visit_call_or_write_node visit_child_nodes

    # Visit a CallTargetNode node
    alias visit_call_target_node visit_child_nodes

    # Visit a CapturePatternNode node
    alias visit_capture_pattern_node visit_child_nodes

    # Visit a CaseMatchNode node
    alias visit_case_match_node visit_child_nodes

    # Visit a CaseNode node
    alias visit_case_node visit_child_nodes

    # Visit a ClassNode node
    alias visit_class_node visit_child_nodes

    # Visit a ClassVariableAndWriteNode node
    alias visit_class_variable_and_write_node visit_child_nodes

    # Visit a ClassVariableOperatorWriteNode node
    alias visit_class_variable_operator_write_node visit_child_nodes

    # Visit a ClassVariableOrWriteNode node
    alias visit_class_variable_or_write_node visit_child_nodes

    # Visit a ClassVariableReadNode node
    alias visit_class_variable_read_node visit_child_nodes

    # Visit a ClassVariableTargetNode node
    alias visit_class_variable_target_node visit_child_nodes

    # Visit a ClassVariableWriteNode node
    alias visit_class_variable_write_node visit_child_nodes

    # Visit a ConstantAndWriteNode node
    alias visit_constant_and_write_node visit_child_nodes

    # Visit a ConstantOperatorWriteNode node
    alias visit_constant_operator_write_node visit_child_nodes

    # Visit a ConstantOrWriteNode node
    alias visit_constant_or_write_node visit_child_nodes

    # Visit a ConstantPathAndWriteNode node
    alias visit_constant_path_and_write_node visit_child_nodes

    # Visit a ConstantPathNode node
    alias visit_constant_path_node visit_child_nodes

    # Visit a ConstantPathOperatorWriteNode node
    alias visit_constant_path_operator_write_node visit_child_nodes

    # Visit a ConstantPathOrWriteNode node
    alias visit_constant_path_or_write_node visit_child_nodes

    # Visit a ConstantPathTargetNode node
    alias visit_constant_path_target_node visit_child_nodes

    # Visit a ConstantPathWriteNode node
    alias visit_constant_path_write_node visit_child_nodes

    # Visit a ConstantReadNode node
    alias visit_constant_read_node visit_child_nodes

    # Visit a ConstantTargetNode node
    alias visit_constant_target_node visit_child_nodes

    # Visit a ConstantWriteNode node
    alias visit_constant_write_node visit_child_nodes

    # Visit a DefNode node
    alias visit_def_node visit_child_nodes

    # Visit a DefinedNode node
    alias visit_defined_node visit_child_nodes

    # Visit a ElseNode node
    alias visit_else_node visit_child_nodes

    # Visit a EmbeddedStatementsNode node
    alias visit_embedded_statements_node visit_child_nodes

    # Visit a EmbeddedVariableNode node
    alias visit_embedded_variable_node visit_child_nodes

    # Visit a EnsureNode node
    alias visit_ensure_node visit_child_nodes

    # Visit a FalseNode node
    alias visit_false_node visit_child_nodes

    # Visit a FindPatternNode node
    alias visit_find_pattern_node visit_child_nodes

    # Visit a FlipFlopNode node
    alias visit_flip_flop_node visit_child_nodes

    # Visit a FloatNode node
    alias visit_float_node visit_child_nodes

    # Visit a ForNode node
    alias visit_for_node visit_child_nodes

    # Visit a ForwardingArgumentsNode node
    alias visit_forwarding_arguments_node visit_child_nodes

    # Visit a ForwardingParameterNode node
    alias visit_forwarding_parameter_node visit_child_nodes

    # Visit a ForwardingSuperNode node
    alias visit_forwarding_super_node visit_child_nodes

    # Visit a GlobalVariableAndWriteNode node
    alias visit_global_variable_and_write_node visit_child_nodes

    # Visit a GlobalVariableOperatorWriteNode node
    alias visit_global_variable_operator_write_node visit_child_nodes

    # Visit a GlobalVariableOrWriteNode node
    alias visit_global_variable_or_write_node visit_child_nodes

    # Visit a GlobalVariableReadNode node
    alias visit_global_variable_read_node visit_child_nodes

    # Visit a GlobalVariableTargetNode node
    alias visit_global_variable_target_node visit_child_nodes

    # Visit a GlobalVariableWriteNode node
    alias visit_global_variable_write_node visit_child_nodes

    # Visit a HashNode node
    alias visit_hash_node visit_child_nodes

    # Visit a HashPatternNode node
    alias visit_hash_pattern_node visit_child_nodes

    # Visit a IfNode node
    alias visit_if_node visit_child_nodes

    # Visit a ImaginaryNode node
    alias visit_imaginary_node visit_child_nodes

    # Visit a ImplicitNode node
    alias visit_implicit_node visit_child_nodes

    # Visit a ImplicitRestNode node
    alias visit_implicit_rest_node visit_child_nodes

    # Visit a InNode node
    alias visit_in_node visit_child_nodes

    # Visit a IndexAndWriteNode node
    alias visit_index_and_write_node visit_child_nodes

    # Visit a IndexOperatorWriteNode node
    alias visit_index_operator_write_node visit_child_nodes

    # Visit a IndexOrWriteNode node
    alias visit_index_or_write_node visit_child_nodes

    # Visit a IndexTargetNode node
    alias visit_index_target_node visit_child_nodes

    # Visit a InstanceVariableAndWriteNode node
    alias visit_instance_variable_and_write_node visit_child_nodes

    # Visit a InstanceVariableOperatorWriteNode node
    alias visit_instance_variable_operator_write_node visit_child_nodes

    # Visit a InstanceVariableOrWriteNode node
    alias visit_instance_variable_or_write_node visit_child_nodes

    # Visit a InstanceVariableReadNode node
    alias visit_instance_variable_read_node visit_child_nodes

    # Visit a InstanceVariableTargetNode node
    alias visit_instance_variable_target_node visit_child_nodes

    # Visit a InstanceVariableWriteNode node
    alias visit_instance_variable_write_node visit_child_nodes

    # Visit a IntegerNode node
    alias visit_integer_node visit_child_nodes

    # Visit a InterpolatedMatchLastLineNode node
    alias visit_interpolated_match_last_line_node visit_child_nodes

    # Visit a InterpolatedRegularExpressionNode node
    alias visit_interpolated_regular_expression_node visit_child_nodes

    # Visit a InterpolatedStringNode node
    alias visit_interpolated_string_node visit_child_nodes

    # Visit a InterpolatedSymbolNode node
    alias visit_interpolated_symbol_node visit_child_nodes

    # Visit a InterpolatedXStringNode node
    alias visit_interpolated_x_string_node visit_child_nodes

    # Visit a ItLocalVariableReadNode node
    alias visit_it_local_variable_read_node visit_child_nodes

    # Visit a ItParametersNode node
    alias visit_it_parameters_node visit_child_nodes

    # Visit a KeywordHashNode node
    alias visit_keyword_hash_node visit_child_nodes

    # Visit a KeywordRestParameterNode node
    alias visit_keyword_rest_parameter_node visit_child_nodes

    # Visit a LambdaNode node
    alias visit_lambda_node visit_child_nodes

    # Visit a LocalVariableAndWriteNode node
    alias visit_local_variable_and_write_node visit_child_nodes

    # Visit a LocalVariableOperatorWriteNode node
    alias visit_local_variable_operator_write_node visit_child_nodes

    # Visit a LocalVariableOrWriteNode node
    alias visit_local_variable_or_write_node visit_child_nodes

    # Visit a LocalVariableReadNode node
    alias visit_local_variable_read_node visit_child_nodes

    # Visit a LocalVariableTargetNode node
    alias visit_local_variable_target_node visit_child_nodes

    # Visit a LocalVariableWriteNode node
    alias visit_local_variable_write_node visit_child_nodes

    # Visit a MatchLastLineNode node
    alias visit_match_last_line_node visit_child_nodes

    # Visit a MatchPredicateNode node
    alias visit_match_predicate_node visit_child_nodes

    # Visit a MatchRequiredNode node
    alias visit_match_required_node visit_child_nodes

    # Visit a MatchWriteNode node
    alias visit_match_write_node visit_child_nodes

    # Visit a MissingNode node
    alias visit_missing_node visit_child_nodes

    # Visit a ModuleNode node
    alias visit_module_node visit_child_nodes

    # Visit a MultiTargetNode node
    alias visit_multi_target_node visit_child_nodes

    # Visit a MultiWriteNode node
    alias visit_multi_write_node visit_child_nodes

    # Visit a NextNode node
    alias visit_next_node visit_child_nodes

    # Visit a NilNode node
    alias visit_nil_node visit_child_nodes

    # Visit a NoKeywordsParameterNode node
    alias visit_no_keywords_parameter_node visit_child_nodes

    # Visit a NumberedParametersNode node
    alias visit_numbered_parameters_node visit_child_nodes

    # Visit a NumberedReferenceReadNode node
    alias visit_numbered_reference_read_node visit_child_nodes

    # Visit a OptionalKeywordParameterNode node
    alias visit_optional_keyword_parameter_node visit_child_nodes

    # Visit a OptionalParameterNode node
    alias visit_optional_parameter_node visit_child_nodes

    # Visit a OrNode node
    alias visit_or_node visit_child_nodes

    # Visit a ParametersNode node
    alias visit_parameters_node visit_child_nodes

    # Visit a ParenthesesNode node
    alias visit_parentheses_node visit_child_nodes

    # Visit a PinnedExpressionNode node
    alias visit_pinned_expression_node visit_child_nodes

    # Visit a PinnedVariableNode node
    alias visit_pinned_variable_node visit_child_nodes

    # Visit a PostExecutionNode node
    alias visit_post_execution_node visit_child_nodes

    # Visit a PreExecutionNode node
    alias visit_pre_execution_node visit_child_nodes

    # Visit a ProgramNode node
    alias visit_program_node visit_child_nodes

    # Visit a RangeNode node
    alias visit_range_node visit_child_nodes

    # Visit a RationalNode node
    alias visit_rational_node visit_child_nodes

    # Visit a RedoNode node
    alias visit_redo_node visit_child_nodes

    # Visit a RegularExpressionNode node
    alias visit_regular_expression_node visit_child_nodes

    # Visit a RequiredKeywordParameterNode node
    alias visit_required_keyword_parameter_node visit_child_nodes

    # Visit a RequiredParameterNode node
    alias visit_required_parameter_node visit_child_nodes

    # Visit a RescueModifierNode node
    alias visit_rescue_modifier_node visit_child_nodes

    # Visit a RescueNode node
    alias visit_rescue_node visit_child_nodes

    # Visit a RestParameterNode node
    alias visit_rest_parameter_node visit_child_nodes

    # Visit a RetryNode node
    alias visit_retry_node visit_child_nodes

    # Visit a ReturnNode node
    alias visit_return_node visit_child_nodes

    # Visit a SelfNode node
    alias visit_self_node visit_child_nodes

    # Visit a ShareableConstantNode node
    alias visit_shareable_constant_node visit_child_nodes

    # Visit a SingletonClassNode node
    alias visit_singleton_class_node visit_child_nodes

    # Visit a SourceEncodingNode node
    alias visit_source_encoding_node visit_child_nodes

    # Visit a SourceFileNode node
    alias visit_source_file_node visit_child_nodes

    # Visit a SourceLineNode node
    alias visit_source_line_node visit_child_nodes

    # Visit a SplatNode node
    alias visit_splat_node visit_child_nodes

    # Visit a StatementsNode node
    alias visit_statements_node visit_child_nodes

    # Visit a StringNode node
    alias visit_string_node visit_child_nodes

    # Visit a SuperNode node
    alias visit_super_node visit_child_nodes

    # Visit a SymbolNode node
    alias visit_symbol_node visit_child_nodes

    # Visit a TrueNode node
    alias visit_true_node visit_child_nodes

    # Visit a UndefNode node
    alias visit_undef_node visit_child_nodes

    # Visit a UnlessNode node
    alias visit_unless_node visit_child_nodes

    # Visit a UntilNode node
    alias visit_until_node visit_child_nodes

    # Visit a WhenNode node
    alias visit_when_node visit_child_nodes

    # Visit a WhileNode node
    alias visit_while_node visit_child_nodes

    # Visit a XStringNode node
    alias visit_x_string_node visit_child_nodes

    # Visit a YieldNode node
    alias visit_yield_node visit_child_nodes
  end
end
PK*J[�2��$	�$	share/ruby/prism/node.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/node.rb.erb
if you are looking to modify the template
=end

module Prism
  # This represents a node in the tree. It is the parent class of all of the
  # various node types.
  class Node
    # A pointer to the source that this node was created from.
    attr_reader :source
    private :source

    # A unique identifier for this node. This is used in a very specific
    # use case where you want to keep around a reference to a node without
    # having to keep around the syntax tree in memory. This unique identifier
    # will be consistent across multiple parses of the same source code.
    attr_reader :node_id

    # Save this node using a saved source so that it can be retrieved later.
    def save(repository)
      repository.enter(node_id, :itself)
    end

    # A Location instance that represents the location of this node in the
    # source.
    def location
      location = @location
      return location if location.is_a?(Location)
      @location = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the location using a saved source so that it can be retrieved later.
    def save_location(repository)
      repository.enter(node_id, :location)
    end

    # Delegates to the start_line of the associated location object.
    def start_line
      location.start_line
    end

    # Delegates to the end_line of the associated location object.
    def end_line
      location.end_line
    end

    # The start offset of the node in the source. This method is effectively a
    # delegate method to the location object.
    def start_offset
      location = @location
      location.is_a?(Location) ? location.start_offset : location >> 32
    end

    # The end offset of the node in the source. This method is effectively a
    # delegate method to the location object.
    def end_offset
      location = @location
      location.is_a?(Location) ? location.end_offset : ((location >> 32) + (location & 0xFFFFFFFF))
    end

    # Delegates to the start_character_offset of the associated location object.
    def start_character_offset
      location.start_character_offset
    end

    # Delegates to the end_character_offset of the associated location object.
    def end_character_offset
      location.end_character_offset
    end

    # Delegates to the cached_start_code_units_offset of the associated location
    # object.
    def cached_start_code_units_offset(cache)
      location.cached_start_code_units_offset(cache)
    end

    # Delegates to the cached_end_code_units_offset of the associated location
    # object.
    def cached_end_code_units_offset(cache)
      location.cached_end_code_units_offset(cache)
    end

    # Delegates to the start_column of the associated location object.
    def start_column
      location.start_column
    end

    # Delegates to the end_column of the associated location object.
    def end_column
      location.end_column
    end

    # Delegates to the start_character_column of the associated location object.
    def start_character_column
      location.start_character_column
    end

    # Delegates to the end_character_column of the associated location object.
    def end_character_column
      location.end_character_column
    end

    # Delegates to the cached_start_code_units_column of the associated location
    # object.
    def cached_start_code_units_column(cache)
      location.cached_start_code_units_column(cache)
    end

    # Delegates to the cached_end_code_units_column of the associated location
    # object.
    def cached_end_code_units_column(cache)
      location.cached_end_code_units_column(cache)
    end

    # Delegates to the leading_comments of the associated location object.
    def leading_comments
      location.leading_comments
    end

    # Delegates to the trailing_comments of the associated location object.
    def trailing_comments
      location.trailing_comments
    end

    # Delegates to the comments of the associated location object.
    def comments
      location.comments
    end

    # Returns all of the lines of the source code associated with this node.
    def source_lines
      location.source_lines
    end

    # An alias for source_lines, used to mimic the API from
    # RubyVM::AbstractSyntaxTree to make it easier to migrate.
    alias script_lines source_lines

    # Slice the location of the node from the source.
    def slice
      location.slice
    end

    # Slice the location of the node from the source, starting at the beginning
    # of the line that the location starts on, ending at the end of the line
    # that the location ends on.
    def slice_lines
      location.slice_lines
    end

    # An bitset of flags for this node. There are certain flags that are common
    # for all nodes, and then some nodes have specific flags.
    attr_reader :flags
    protected :flags

    # Returns true if the node has the newline flag set.
    def newline?
      flags.anybits?(NodeFlags::NEWLINE)
    end

    # Returns true if the node has the static literal flag set.
    def static_literal?
      flags.anybits?(NodeFlags::STATIC_LITERAL)
    end

    # Similar to inspect, but respects the current level of indentation given by
    # the pretty print object.
    def pretty_print(q)
      q.seplist(inspect.chomp.each_line, -> { q.breakable }) do |line|
        q.text(line.chomp)
      end
      q.current_group.break
    end

    # Convert this node into a graphviz dot graph string.
    def to_dot
      # @type self: node
      DotVisitor.new.tap { |visitor| accept(visitor) }.to_dot
    end

    # Returns a list of nodes that are descendants of this node that contain the
    # given line and column. This is useful for locating a node that is selected
    # based on the line and column of the source code.
    #
    # Important to note is that the column given to this method should be in
    # bytes, as opposed to characters or code units.
    def tunnel(line, column)
      queue = [self] #: Array[Prism::node]
      result = [] #: Array[Prism::node]

      while (node = queue.shift)
        result << node

        node.compact_child_nodes.each do |child_node|
          child_location = child_node.location

          start_line = child_location.start_line
          end_line = child_location.end_line

          if start_line == end_line
            if line == start_line && column >= child_location.start_column && column < child_location.end_column
              queue << child_node
              break
            end
          elsif (line == start_line && column >= child_location.start_column) || (line == end_line && column < child_location.end_column)
            queue << child_node
            break
          elsif line > start_line && line < end_line
            queue << child_node
            break
          end
        end
      end

      result
    end

    # Returns the first node that matches the given block when visited in a
    # depth-first search. This is useful for finding a node that matches a
    # particular condition.
    #
    #     node.breadth_first_search { |node| node.node_id == node_id }
    #
    def breadth_first_search(&block)
      queue = [self] #: Array[Prism::node]

      while (node = queue.shift)
        return node if yield node
        queue.concat(node.compact_child_nodes)
      end

      nil
    end

    # Returns a list of the fields that exist for this node class. Fields
    # describe the structure of the node. This kind of reflection is useful for
    # things like recursively visiting each node _and_ field in the tree.
    def self.fields
      # This method should only be called on subclasses of Node, not Node
      # itself.
      raise NoMethodError, "undefined method `fields' for #{inspect}" if self == Node

      Reflection.fields_for(self)
    end

    # --------------------------------------------------------------------------
    # :section: Node interface
    # These methods are effectively abstract methods that must be implemented by
    # the various subclasses of Node. They are here to make it easier to work
    # with typecheckers.
    # --------------------------------------------------------------------------

    # Accepts a visitor and calls back into the specialized visit function.
    def accept(visitor)
      raise NoMethodError, "undefined method `accept' for #{inspect}"
    end

    # Returns an array of child nodes, including `nil`s in the place of optional
    # nodes that were not present.
    def child_nodes
      raise NoMethodError, "undefined method `child_nodes' for #{inspect}"
    end

    alias deconstruct child_nodes

    # Returns an array of child nodes, excluding any `nil`s in the place of
    # optional nodes that were not present.
    def compact_child_nodes
      raise NoMethodError, "undefined method `compact_child_nodes' for #{inspect}"
    end

    # Returns an array of child nodes and locations that could potentially have
    # comments attached to them.
    def comment_targets
      raise NoMethodError, "undefined method `comment_targets' for #{inspect}"
    end

    # Returns a string representation of the node.
    def inspect
      raise NoMethodError, "undefined method `inspect' for #{inspect}"
    end

    # Sometimes you want to check an instance of a node against a list of
    # classes to see what kind of behavior to perform. Usually this is done by
    # calling `[cls1, cls2].include?(node.class)` or putting the node into a
    # case statement and doing `case node; when cls1; when cls2; end`. Both of
    # these approaches are relatively slow because of the constant lookups,
    # method calls, and/or array allocations.
    #
    # Instead, you can call #type, which will return to you a symbol that you
    # can use for comparison. This is faster than the other approaches because
    # it uses a single integer comparison, but also because if you're on CRuby
    # you can take advantage of the fact that case statements with all symbol
    # keys will use a jump table.
    def type
      raise NoMethodError, "undefined method `type' for #{inspect}"
    end

    # Similar to #type, this method returns a symbol that you can use for
    # splitting on the type of the node without having to do a long === chain.
    # Note that like #type, it will still be slower than using == for a single
    # class, but should be faster in a case statement or an array comparison.
    def self.type
      raise NoMethodError, "undefined method `type' for #{inspect}"
    end
  end

  # Represents the use of the `alias` keyword to alias a global variable.
  #
  #     alias $foo $bar
  #     ^^^^^^^^^^^^^^^
  class AliasGlobalVariableNode < Node
    # Initialize a new AliasGlobalVariableNode node.
    def initialize(source, node_id, location, flags, new_name, old_name, keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @new_name = new_name
      @old_name = old_name
      @keyword_loc = keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_alias_global_variable_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [new_name, old_name]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [new_name, old_name]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [new_name, old_name, keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?new_name: GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode, ?old_name: GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode | SymbolNode | MissingNode, ?keyword_loc: Location) -> AliasGlobalVariableNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, new_name: self.new_name, old_name: self.old_name, keyword_loc: self.keyword_loc)
      AliasGlobalVariableNode.new(source, node_id, location, flags, new_name, old_name, keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, new_name: GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode, old_name: GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode | SymbolNode | MissingNode, keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, new_name: new_name, old_name: old_name, keyword_loc: keyword_loc }
    end

    # Represents the new name of the global variable that can be used after aliasing.
    #
    #     alias $foo $bar
    #           ^^^^
    attr_reader :new_name

    # Represents the old name of the global variable that can be used before aliasing.
    #
    #     alias $foo $bar
    #                ^^^^
    attr_reader :old_name

    # The location of the `alias` keyword.
    #
    #     alias $foo $bar
    #     ^^^^^
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :alias_global_variable_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :alias_global_variable_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(AliasGlobalVariableNode) &&
        (new_name === other.new_name) &&
        (old_name === other.old_name) &&
        (keyword_loc.nil? == other.keyword_loc.nil?)
    end
  end

  # Represents the use of the `alias` keyword to alias a method.
  #
  #     alias foo bar
  #     ^^^^^^^^^^^^^
  class AliasMethodNode < Node
    # Initialize a new AliasMethodNode node.
    def initialize(source, node_id, location, flags, new_name, old_name, keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @new_name = new_name
      @old_name = old_name
      @keyword_loc = keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_alias_method_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [new_name, old_name]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [new_name, old_name]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [new_name, old_name, keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?new_name: SymbolNode | InterpolatedSymbolNode, ?old_name: SymbolNode | InterpolatedSymbolNode | GlobalVariableReadNode | MissingNode, ?keyword_loc: Location) -> AliasMethodNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, new_name: self.new_name, old_name: self.old_name, keyword_loc: self.keyword_loc)
      AliasMethodNode.new(source, node_id, location, flags, new_name, old_name, keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, new_name: SymbolNode | InterpolatedSymbolNode, old_name: SymbolNode | InterpolatedSymbolNode | GlobalVariableReadNode | MissingNode, keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, new_name: new_name, old_name: old_name, keyword_loc: keyword_loc }
    end

    # Represents the new name of the method that will be aliased.
    #
    #     alias foo bar
    #           ^^^
    #
    #     alias :foo :bar
    #           ^^^^
    #
    #     alias :"#{foo}" :"#{bar}"
    #           ^^^^^^^^^
    attr_reader :new_name

    # Represents the old name of the method that will be aliased.
    #
    #     alias foo bar
    #               ^^^
    #
    #     alias :foo :bar
    #                ^^^^
    #
    #     alias :"#{foo}" :"#{bar}"
    #                     ^^^^^^^^^
    attr_reader :old_name

    # Represents the location of the `alias` keyword.
    #
    #     alias foo bar
    #     ^^^^^
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :alias_method_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :alias_method_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(AliasMethodNode) &&
        (new_name === other.new_name) &&
        (old_name === other.old_name) &&
        (keyword_loc.nil? == other.keyword_loc.nil?)
    end
  end

  # Represents an alternation pattern in pattern matching.
  #
  #     foo => bar | baz
  #            ^^^^^^^^^
  class AlternationPatternNode < Node
    # Initialize a new AlternationPatternNode node.
    def initialize(source, node_id, location, flags, left, right, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @left = left
      @right = right
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_alternation_pattern_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [left, right]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [left, right]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [left, right, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?left: Prism::node, ?right: Prism::node, ?operator_loc: Location) -> AlternationPatternNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, left: self.left, right: self.right, operator_loc: self.operator_loc)
      AlternationPatternNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, left: Prism::node, right: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, left: left, right: right, operator_loc: operator_loc }
    end

    # Represents the left side of the expression.
    #
    #     foo => bar | baz
    #            ^^^
    attr_reader :left

    # Represents the right side of the expression.
    #
    #     foo => bar | baz
    #                  ^^^
    attr_reader :right

    # Represents the alternation operator location.
    #
    #     foo => bar | baz
    #                ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :alternation_pattern_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :alternation_pattern_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(AlternationPatternNode) &&
        (left === other.left) &&
        (right === other.right) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents the use of the `&&` operator or the `and` keyword.
  #
  #     left and right
  #     ^^^^^^^^^^^^^^
  class AndNode < Node
    # Initialize a new AndNode node.
    def initialize(source, node_id, location, flags, left, right, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @left = left
      @right = right
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_and_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [left, right]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [left, right]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [left, right, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?left: Prism::node, ?right: Prism::node, ?operator_loc: Location) -> AndNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, left: self.left, right: self.right, operator_loc: self.operator_loc)
      AndNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, left: Prism::node, right: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, left: left, right: right, operator_loc: operator_loc }
    end

    # Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     left and right
    #     ^^^^
    #
    #     1 && 2
    #     ^
    attr_reader :left

    # Represents the right side of the expression.
    #
    #     left && right
    #             ^^^^^
    #
    #     1 and 2
    #           ^
    attr_reader :right

    # The location of the `and` keyword or the `&&` operator.
    #
    #     left and right
    #          ^^^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :and_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :and_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(AndNode) &&
        (left === other.left) &&
        (right === other.right) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a set of arguments to a method or a keyword.
  #
  #     return foo, bar, baz
  #            ^^^^^^^^^^^^^
  class ArgumentsNode < Node
    # Initialize a new ArgumentsNode node.
    def initialize(source, node_id, location, flags, arguments)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @arguments = arguments
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_arguments_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*arguments]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*arguments]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*arguments] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?arguments: Array[Prism::node]) -> ArgumentsNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, arguments: self.arguments)
      ArgumentsNode.new(source, node_id, location, flags, arguments)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, arguments: Array[Prism::node] }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, arguments: arguments }
    end

    # def contains_forwarding?: () -> bool
    def contains_forwarding?
      flags.anybits?(ArgumentsNodeFlags::CONTAINS_FORWARDING)
    end

    # def contains_keywords?: () -> bool
    def contains_keywords?
      flags.anybits?(ArgumentsNodeFlags::CONTAINS_KEYWORDS)
    end

    # def contains_keyword_splat?: () -> bool
    def contains_keyword_splat?
      flags.anybits?(ArgumentsNodeFlags::CONTAINS_KEYWORD_SPLAT)
    end

    # def contains_splat?: () -> bool
    def contains_splat?
      flags.anybits?(ArgumentsNodeFlags::CONTAINS_SPLAT)
    end

    # def contains_multiple_splats?: () -> bool
    def contains_multiple_splats?
      flags.anybits?(ArgumentsNodeFlags::CONTAINS_MULTIPLE_SPLATS)
    end

    # The list of arguments, if present. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo(bar, baz)
    #         ^^^^^^^^
    attr_reader :arguments

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :arguments_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :arguments_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ArgumentsNode) &&
        (flags === other.flags) &&
        (arguments.length == other.arguments.length) &&
        arguments.zip(other.arguments).all? { |left, right| left === right }
    end
  end

  # Represents an array literal. This can be a regular array using brackets or a special array using % like %w or %i.
  #
  #     [1, 2, 3]
  #     ^^^^^^^^^
  class ArrayNode < Node
    # Initialize a new ArrayNode node.
    def initialize(source, node_id, location, flags, elements, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @elements = elements
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_array_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*elements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*elements]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*elements, *opening_loc, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?elements: Array[Prism::node], ?opening_loc: Location?, ?closing_loc: Location?) -> ArrayNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, elements: self.elements, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      ArrayNode.new(source, node_id, location, flags, elements, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, elements: Array[Prism::node], opening_loc: Location?, closing_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, elements: elements, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # def contains_splat?: () -> bool
    def contains_splat?
      flags.anybits?(ArrayNodeFlags::CONTAINS_SPLAT)
    end

    # Represent the list of zero or more [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression) within the array.
    attr_reader :elements

    # Represents the optional source location for the opening token.
    #
    #     [1,2,3]                 # "["
    #     %w[foo bar baz]         # "%w["
    #     %I(apple orange banana) # "%I("
    #     foo = 1, 2, 3           # nil
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # Represents the optional source location for the closing token.
    #
    #     [1,2,3]                 # "]"
    #     %w[foo bar baz]         # "]"
    #     %I(apple orange banana) # ")"
    #     foo = 1, 2, 3           # nil
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :array_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :array_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ArrayNode) &&
        (flags === other.flags) &&
        (elements.length == other.elements.length) &&
        elements.zip(other.elements).all? { |left, right| left === right } &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents an array pattern in pattern matching.
  #
  #     foo in 1, 2
  #     ^^^^^^^^^^^
  #
  #     foo in [1, 2]
  #     ^^^^^^^^^^^^^
  #
  #     foo in *bar
  #     ^^^^^^^^^^^
  #
  #     foo in Bar[]
  #     ^^^^^^^^^^^^
  #
  #     foo in Bar[1, 2, 3]
  #     ^^^^^^^^^^^^^^^^^^^
  class ArrayPatternNode < Node
    # Initialize a new ArrayPatternNode node.
    def initialize(source, node_id, location, flags, constant, requireds, rest, posts, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @constant = constant
      @requireds = requireds
      @rest = rest
      @posts = posts
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_array_pattern_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [constant, *requireds, rest, *posts]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << constant if constant
      compact.concat(requireds)
      compact << rest if rest
      compact.concat(posts)
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*constant, *requireds, *rest, *posts, *opening_loc, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?constant: ConstantReadNode | ConstantPathNode | nil, ?requireds: Array[Prism::node], ?rest: Prism::node?, ?posts: Array[Prism::node], ?opening_loc: Location?, ?closing_loc: Location?) -> ArrayPatternNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, constant: self.constant, requireds: self.requireds, rest: self.rest, posts: self.posts, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      ArrayPatternNode.new(source, node_id, location, flags, constant, requireds, rest, posts, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, constant: ConstantReadNode | ConstantPathNode | nil, requireds: Array[Prism::node], rest: Prism::node?, posts: Array[Prism::node], opening_loc: Location?, closing_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, constant: constant, requireds: requireds, rest: rest, posts: posts, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # attr_reader constant: ConstantReadNode | ConstantPathNode | nil
    attr_reader :constant

    # Represents the required elements of the array pattern.
    #
    #     foo in [1, 2]
    #             ^  ^
    attr_reader :requireds

    # Represents the rest element of the array pattern.
    #
    #     foo in *bar
    #            ^^^^
    attr_reader :rest

    # Represents the elements after the rest element of the array pattern.
    #
    #     foo in *bar, baz
    #                  ^^^
    attr_reader :posts

    # Represents the opening location of the array pattern.
    #
    #     foo in [1, 2]
    #            ^
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # Represents the closing location of the array pattern.
    #
    #     foo in [1, 2]
    #                 ^
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :array_pattern_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :array_pattern_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ArrayPatternNode) &&
        (constant === other.constant) &&
        (requireds.length == other.requireds.length) &&
        requireds.zip(other.requireds).all? { |left, right| left === right } &&
        (rest === other.rest) &&
        (posts.length == other.posts.length) &&
        posts.zip(other.posts).all? { |left, right| left === right } &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents a hash key/value pair.
  #
  #     { a => b }
  #       ^^^^^^
  class AssocNode < Node
    # Initialize a new AssocNode node.
    def initialize(source, node_id, location, flags, key, value, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @key = key
      @value = value
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_assoc_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [key, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [key, value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [key, value, *operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?key: Prism::node, ?value: Prism::node, ?operator_loc: Location?) -> AssocNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, key: self.key, value: self.value, operator_loc: self.operator_loc)
      AssocNode.new(source, node_id, location, flags, key, value, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, key: Prism::node, value: Prism::node, operator_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, key: key, value: value, operator_loc: operator_loc }
    end

    # The key of the association. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     { a: b }
    #       ^
    #
    #     { foo => bar }
    #       ^^^
    #
    #     { def a; end => 1 }
    #       ^^^^^^^^^^
    attr_reader :key

    # The value of the association, if present. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     { foo => bar }
    #              ^^^
    #
    #     { x: 1 }
    #          ^
    attr_reader :value

    # The location of the `=>` operator, if present.
    #
    #     { foo => bar }
    #           ^^
    def operator_loc
      location = @operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc) unless @operator_loc.nil?
    end

    # def operator: () -> String?
    def operator
      operator_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :assoc_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :assoc_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(AssocNode) &&
        (key === other.key) &&
        (value === other.value) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a splat in a hash literal.
  #
  #     { **foo }
  #       ^^^^^
  class AssocSplatNode < Node
    # Initialize a new AssocSplatNode node.
    def initialize(source, node_id, location, flags, value, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @value = value
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_assoc_splat_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << value if value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*value, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?value: Prism::node?, ?operator_loc: Location) -> AssocSplatNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, value: self.value, operator_loc: self.operator_loc)
      AssocSplatNode.new(source, node_id, location, flags, value, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, value: Prism::node?, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, value: value, operator_loc: operator_loc }
    end

    # The value to be splatted, if present. Will be missing when keyword rest argument forwarding is used.
    #
    #     { **foo }
    #         ^^^
    attr_reader :value

    # The location of the `**` operator.
    #
    #     { **x }
    #       ^^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :assoc_splat_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :assoc_splat_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(AssocSplatNode) &&
        (value === other.value) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents reading a reference to a field in the previous match.
  #
  #     $'
  #     ^^
  class BackReferenceReadNode < Node
    # Initialize a new BackReferenceReadNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_back_reference_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> BackReferenceReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      BackReferenceReadNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # The name of the back-reference variable, including the leading `$`.
    #
    #     $& # name `:$&`
    #
    #     $+ # name `:$+`
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :back_reference_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :back_reference_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BackReferenceReadNode) &&
        (name === other.name)
    end
  end

  # Represents a begin statement.
  #
  #     begin
  #       foo
  #     end
  #     ^^^^^
  class BeginNode < Node
    # Initialize a new BeginNode node.
    def initialize(source, node_id, location, flags, begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @begin_keyword_loc = begin_keyword_loc
      @statements = statements
      @rescue_clause = rescue_clause
      @else_clause = else_clause
      @ensure_clause = ensure_clause
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_begin_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [statements, rescue_clause, else_clause, ensure_clause]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << statements if statements
      compact << rescue_clause if rescue_clause
      compact << else_clause if else_clause
      compact << ensure_clause if ensure_clause
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*begin_keyword_loc, *statements, *rescue_clause, *else_clause, *ensure_clause, *end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?begin_keyword_loc: Location?, ?statements: StatementsNode?, ?rescue_clause: RescueNode?, ?else_clause: ElseNode?, ?ensure_clause: EnsureNode?, ?end_keyword_loc: Location?) -> BeginNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, begin_keyword_loc: self.begin_keyword_loc, statements: self.statements, rescue_clause: self.rescue_clause, else_clause: self.else_clause, ensure_clause: self.ensure_clause, end_keyword_loc: self.end_keyword_loc)
      BeginNode.new(source, node_id, location, flags, begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, begin_keyword_loc: Location?, statements: StatementsNode?, rescue_clause: RescueNode?, else_clause: ElseNode?, ensure_clause: EnsureNode?, end_keyword_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, begin_keyword_loc: begin_keyword_loc, statements: statements, rescue_clause: rescue_clause, else_clause: else_clause, ensure_clause: ensure_clause, end_keyword_loc: end_keyword_loc }
    end

    # Represents the location of the `begin` keyword.
    #
    #     begin x end
    #     ^^^^^
    def begin_keyword_loc
      location = @begin_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @begin_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the begin_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_begin_keyword_loc(repository)
      repository.enter(node_id, :begin_keyword_loc) unless @begin_keyword_loc.nil?
    end

    # Represents the statements within the begin block.
    #
    #     begin x end
    #           ^
    attr_reader :statements

    # Represents the rescue clause within the begin block.
    #
    #     begin x; rescue y; end
    #              ^^^^^^^^
    attr_reader :rescue_clause

    # Represents the else clause within the begin block.
    #
    #     begin x; rescue y; else z; end
    #                        ^^^^^^
    attr_reader :else_clause

    # Represents the ensure clause within the begin block.
    #
    #     begin x; ensure y; end
    #              ^^^^^^^^
    attr_reader :ensure_clause

    # Represents the location of the `end` keyword.
    #
    #     begin x end
    #             ^^^
    def end_keyword_loc
      location = @end_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc) unless @end_keyword_loc.nil?
    end

    # def begin_keyword: () -> String?
    def begin_keyword
      begin_keyword_loc&.slice
    end

    # def end_keyword: () -> String?
    def end_keyword
      end_keyword_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :begin_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :begin_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BeginNode) &&
        (begin_keyword_loc.nil? == other.begin_keyword_loc.nil?) &&
        (statements === other.statements) &&
        (rescue_clause === other.rescue_clause) &&
        (else_clause === other.else_clause) &&
        (ensure_clause === other.ensure_clause) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents a block argument using `&`.
  #
  #     bar(&args)
  #     ^^^^^^^^^^
  class BlockArgumentNode < Node
    # Initialize a new BlockArgumentNode node.
    def initialize(source, node_id, location, flags, expression, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @expression = expression
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_block_argument_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [expression]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << expression if expression
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*expression, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?expression: Prism::node?, ?operator_loc: Location) -> BlockArgumentNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, expression: self.expression, operator_loc: self.operator_loc)
      BlockArgumentNode.new(source, node_id, location, flags, expression, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, expression: Prism::node?, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, expression: expression, operator_loc: operator_loc }
    end

    # The expression that is being passed as a block argument. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo(&args)
    #         ^^^^^
    attr_reader :expression

    # Represents the location of the `&` operator.
    #
    #     foo(&args)
    #         ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :block_argument_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :block_argument_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BlockArgumentNode) &&
        (expression === other.expression) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a block local variable.
  #
  #     a { |; b| }
  #            ^
  class BlockLocalVariableNode < Node
    # Initialize a new BlockLocalVariableNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_block_local_variable_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> BlockLocalVariableNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      BlockLocalVariableNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # The name of the block local variable.
    #
    #     a { |; b| } # name `:b`
    #            ^
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :block_local_variable_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :block_local_variable_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BlockLocalVariableNode) &&
        (flags === other.flags) &&
        (name === other.name)
    end
  end

  # Represents a block of ruby code.
  #
  #     [1, 2, 3].each { |i| puts x }
  #                    ^^^^^^^^^^^^^^
  class BlockNode < Node
    # Initialize a new BlockNode node.
    def initialize(source, node_id, location, flags, locals, parameters, body, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @locals = locals
      @parameters = parameters
      @body = body
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_block_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [parameters, body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << parameters if parameters
      compact << body if body
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*parameters, *body, opening_loc, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?locals: Array[Symbol], ?parameters: BlockParametersNode | NumberedParametersNode | ItParametersNode | nil, ?body: StatementsNode | BeginNode | nil, ?opening_loc: Location, ?closing_loc: Location) -> BlockNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, locals: self.locals, parameters: self.parameters, body: self.body, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      BlockNode.new(source, node_id, location, flags, locals, parameters, body, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, locals: Array[Symbol], parameters: BlockParametersNode | NumberedParametersNode | ItParametersNode | nil, body: StatementsNode | BeginNode | nil, opening_loc: Location, closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, locals: locals, parameters: parameters, body: body, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # The local variables declared in the block.
    #
    #     [1, 2, 3].each { |i| puts x } # locals: [:i]
    #                       ^
    attr_reader :locals

    # The parameters of the block.
    #
    #     [1, 2, 3].each { |i| puts x }
    #                      ^^^
    #     [1, 2, 3].each { puts _1 }
    #                    ^^^^^^^^^^^
    #     [1, 2, 3].each { puts it }
    #                    ^^^^^^^^^^^
    attr_reader :parameters

    # The body of the block.
    #
    #     [1, 2, 3].each { |i| puts x }
    #                          ^^^^^^
    attr_reader :body

    # Represents the location of the opening `|`.
    #
    #     [1, 2, 3].each { |i| puts x }
    #                      ^
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # Represents the location of the closing `|`.
    #
    #     [1, 2, 3].each { |i| puts x }
    #                        ^
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :block_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :block_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BlockNode) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (parameters === other.parameters) &&
        (body === other.body) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents a block parameter of a method, block, or lambda definition.
  #
  #     def a(&b)
  #           ^^
  #     end
  class BlockParameterNode < Node
    # Initialize a new BlockParameterNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_block_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*name_loc, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol?, ?name_loc: Location?, ?operator_loc: Location) -> BlockParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc)
      BlockParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol?, name_loc: Location?, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # The name of the block parameter.
    #
    #     def a(&b) # name `:b`
    #            ^
    #     end
    attr_reader :name

    # Represents the location of the block parameter name.
    #
    #     def a(&b)
    #            ^
    def name_loc
      location = @name_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc) unless @name_loc.nil?
    end

    # Represents the location of the `&` operator.
    #
    #     def a(&b)
    #           ^
    #     end
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :block_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :block_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BlockParameterNode) &&
        (flags === other.flags) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a block's parameters declaration.
  #
  #     -> (a, b = 1; local) { }
  #        ^^^^^^^^^^^^^^^^^
  #
  #     foo do |a, b = 1; local|
  #            ^^^^^^^^^^^^^^^^^
  #     end
  class BlockParametersNode < Node
    # Initialize a new BlockParametersNode node.
    def initialize(source, node_id, location, flags, parameters, locals, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @parameters = parameters
      @locals = locals
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_block_parameters_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [parameters, *locals]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << parameters if parameters
      compact.concat(locals)
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*parameters, *locals, *opening_loc, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?parameters: ParametersNode?, ?locals: Array[BlockLocalVariableNode], ?opening_loc: Location?, ?closing_loc: Location?) -> BlockParametersNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, parameters: self.parameters, locals: self.locals, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      BlockParametersNode.new(source, node_id, location, flags, parameters, locals, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, parameters: ParametersNode?, locals: Array[BlockLocalVariableNode], opening_loc: Location?, closing_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, parameters: parameters, locals: locals, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # Represents the parameters of the block.
    #
    #     -> (a, b = 1; local) { }
    #         ^^^^^^^^
    #
    #     foo do |a, b = 1; local|
    #             ^^^^^^^^
    #     end
    attr_reader :parameters

    # Represents the local variables of the block.
    #
    #     -> (a, b = 1; local) { }
    #                   ^^^^^
    #
    #     foo do |a, b = 1; local|
    #                       ^^^^^
    #     end
    attr_reader :locals

    # Represents the opening location of the block parameters.
    #
    #     -> (a, b = 1; local) { }
    #        ^
    #
    #     foo do |a, b = 1; local|
    #            ^
    #     end
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # Represents the closing location of the block parameters.
    #
    #     -> (a, b = 1; local) { }
    #                        ^
    #
    #     foo do |a, b = 1; local|
    #                            ^
    #     end
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :block_parameters_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :block_parameters_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BlockParametersNode) &&
        (parameters === other.parameters) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents the use of the `break` keyword.
  #
  #     break foo
  #     ^^^^^^^^^
  class BreakNode < Node
    # Initialize a new BreakNode node.
    def initialize(source, node_id, location, flags, arguments, keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @arguments = arguments
      @keyword_loc = keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_break_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [arguments]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << arguments if arguments
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*arguments, keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?arguments: ArgumentsNode?, ?keyword_loc: Location) -> BreakNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, arguments: self.arguments, keyword_loc: self.keyword_loc)
      BreakNode.new(source, node_id, location, flags, arguments, keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, arguments: ArgumentsNode?, keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, arguments: arguments, keyword_loc: keyword_loc }
    end

    # The arguments to the break statement, if present. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     break foo
    #           ^^^
    attr_reader :arguments

    # The location of the `break` keyword.
    #
    #     break foo
    #     ^^^^^
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :break_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :break_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(BreakNode) &&
        (arguments === other.arguments) &&
        (keyword_loc.nil? == other.keyword_loc.nil?)
    end
  end

  # Represents the use of the `&&=` operator on a call.
  #
  #     foo.bar &&= value
  #     ^^^^^^^^^^^^^^^^^
  class CallAndWriteNode < Node
    # Initialize a new CallAndWriteNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @message_loc = message_loc
      @read_name = read_name
      @write_name = write_name
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_call_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*receiver, *call_operator_loc, *message_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ?operator_loc: Location, ?value: Prism::node) -> CallAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, message_loc: self.message_loc, read_name: self.read_name, write_name: self.write_name, operator_loc: self.operator_loc, value: self.value)
      CallAndWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, message_loc: Location?, read_name: Symbol, write_name: Symbol, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, message_loc: message_loc, read_name: read_name, write_name: write_name, operator_loc: operator_loc, value: value }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo.bar &&= value
    #     ^^^
    attr_reader :receiver

    # Represents the location of the call operator.
    #
    #     foo.bar &&= value
    #        ^
    def call_operator_loc
      location = @call_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc) unless @call_operator_loc.nil?
    end

    # Represents the location of the message.
    #
    #     foo.bar &&= value
    #         ^^^
    def message_loc
      location = @message_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @message_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the message_loc location using the given saved source so that
    # it can be retrieved later.
    def save_message_loc(repository)
      repository.enter(node_id, :message_loc) unless @message_loc.nil?
    end

    # Represents the name of the method being called.
    #
    #     foo.bar &&= value # read_name `:bar`
    #         ^^^
    attr_reader :read_name

    # Represents the name of the method being written to.
    #
    #     foo.bar &&= value # write_name `:bar=`
    #         ^^^
    attr_reader :write_name

    # Represents the location of the operator.
    #
    #     foo.bar &&= value
    #             ^^^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # Represents the value being assigned.
    #
    #     foo.bar &&= value
    #                 ^^^^^
    attr_reader :value

    # def call_operator: () -> String?
    def call_operator
      call_operator_loc&.slice
    end

    # def message: () -> String?
    def message
      message_loc&.slice
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :call_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :call_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CallAndWriteNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (message_loc.nil? == other.message_loc.nil?) &&
        (read_name === other.read_name) &&
        (write_name === other.write_name) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents a method call, in all of the various forms that can take.
  #
  #     foo
  #     ^^^
  #
  #     foo()
  #     ^^^^^
  #
  #     +foo
  #     ^^^^
  #
  #     foo + bar
  #     ^^^^^^^^^
  #
  #     foo.bar
  #     ^^^^^^^
  #
  #     foo&.bar
  #     ^^^^^^^^
  class CallNode < Node
    # Initialize a new CallNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc, opening_loc, arguments, closing_loc, block)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @name = name
      @message_loc = message_loc
      @opening_loc = opening_loc
      @arguments = arguments
      @closing_loc = closing_loc
      @block = block
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_call_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, arguments, block]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << arguments if arguments
      compact << block if block
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*receiver, *call_operator_loc, *message_loc, *opening_loc, *arguments, *closing_loc, *block] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?name: Symbol, ?message_loc: Location?, ?opening_loc: Location?, ?arguments: ArgumentsNode?, ?closing_loc: Location?, ?block: BlockNode | BlockArgumentNode | nil) -> CallNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, name: self.name, message_loc: self.message_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block)
      CallNode.new(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc, opening_loc, arguments, closing_loc, block)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, name: Symbol, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, block: BlockNode | BlockArgumentNode | nil }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, name: name, message_loc: message_loc, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo.bar
    #     ^^^
    #
    #     +foo
    #      ^^^
    #
    #     foo + bar
    #     ^^^
    attr_reader :receiver

    # Represents the location of the call operator.
    #
    #     foo.bar
    #        ^
    #
    #     foo&.bar
    #        ^^
    def call_operator_loc
      location = @call_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc) unless @call_operator_loc.nil?
    end

    # Represents the name of the method being called.
    #
    #     foo.bar # name `:foo`
    #     ^^^
    attr_reader :name

    # Represents the location of the message.
    #
    #     foo.bar
    #         ^^^
    def message_loc
      location = @message_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @message_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the message_loc location using the given saved source so that
    # it can be retrieved later.
    def save_message_loc(repository)
      repository.enter(node_id, :message_loc) unless @message_loc.nil?
    end

    # Represents the location of the left parenthesis.
    #     foo(bar)
    #        ^
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # Represents the arguments to the method call. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo(bar)
    #         ^^^
    attr_reader :arguments

    # Represents the location of the right parenthesis.
    #
    #     foo(bar)
    #            ^
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # Represents the block that is being passed to the method.
    #
    #     foo { |a| a }
    #         ^^^^^^^^^
    attr_reader :block

    # def call_operator: () -> String?
    def call_operator
      call_operator_loc&.slice
    end

    # def message: () -> String?
    def message
      message_loc&.slice
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :call_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :call_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CallNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (name === other.name) &&
        (message_loc.nil? == other.message_loc.nil?) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (arguments === other.arguments) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (block === other.block)
    end
  end

  # Represents the use of an assignment operator on a call.
  #
  #     foo.bar += baz
  #     ^^^^^^^^^^^^^^
  class CallOperatorWriteNode < Node
    # Initialize a new CallOperatorWriteNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, binary_operator, binary_operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @message_loc = message_loc
      @read_name = read_name
      @write_name = write_name
      @binary_operator = binary_operator
      @binary_operator_loc = binary_operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_call_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*receiver, *call_operator_loc, *message_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ?binary_operator: Symbol, ?binary_operator_loc: Location, ?value: Prism::node) -> CallOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, message_loc: self.message_loc, read_name: self.read_name, write_name: self.write_name, binary_operator: self.binary_operator, binary_operator_loc: self.binary_operator_loc, value: self.value)
      CallOperatorWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, binary_operator, binary_operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, message_loc: Location?, read_name: Symbol, write_name: Symbol, binary_operator: Symbol, binary_operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, message_loc: message_loc, read_name: read_name, write_name: write_name, binary_operator: binary_operator, binary_operator_loc: binary_operator_loc, value: value }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo.bar += value
    #     ^^^
    attr_reader :receiver

    # Represents the location of the call operator.
    #
    #     foo.bar += value
    #        ^
    def call_operator_loc
      location = @call_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc) unless @call_operator_loc.nil?
    end

    # Represents the location of the message.
    #
    #     foo.bar += value
    #         ^^^
    def message_loc
      location = @message_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @message_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the message_loc location using the given saved source so that
    # it can be retrieved later.
    def save_message_loc(repository)
      repository.enter(node_id, :message_loc) unless @message_loc.nil?
    end

    # Represents the name of the method being called.
    #
    #     foo.bar += value # read_name `:bar`
    #         ^^^
    attr_reader :read_name

    # Represents the name of the method being written to.
    #
    #     foo.bar += value # write_name `:bar=`
    #         ^^^
    attr_reader :write_name

    # Represents the binary operator being used.
    #
    #     foo.bar += value # binary_operator `:+`
    #             ^
    attr_reader :binary_operator

    # Represents the location of the binary operator.
    #
    #     foo.bar += value
    #             ^^
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # Represents the value being assigned.
    #
    #     foo.bar += value
    #                ^^^^^
    attr_reader :value

    # def call_operator: () -> String?
    def call_operator
      call_operator_loc&.slice
    end

    # def message: () -> String?
    def message
      message_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :call_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :call_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CallOperatorWriteNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (message_loc.nil? == other.message_loc.nil?) &&
        (read_name === other.read_name) &&
        (write_name === other.write_name) &&
        (binary_operator === other.binary_operator) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents the use of the `||=` operator on a call.
  #
  #     foo.bar ||= value
  #     ^^^^^^^^^^^^^^^^^
  class CallOrWriteNode < Node
    # Initialize a new CallOrWriteNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @message_loc = message_loc
      @read_name = read_name
      @write_name = write_name
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_call_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*receiver, *call_operator_loc, *message_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ?operator_loc: Location, ?value: Prism::node) -> CallOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, message_loc: self.message_loc, read_name: self.read_name, write_name: self.write_name, operator_loc: self.operator_loc, value: self.value)
      CallOrWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, message_loc, read_name, write_name, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, message_loc: Location?, read_name: Symbol, write_name: Symbol, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, message_loc: message_loc, read_name: read_name, write_name: write_name, operator_loc: operator_loc, value: value }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo.bar ||= value
    #     ^^^
    attr_reader :receiver

    # Represents the location of the call operator.
    #
    #     foo.bar ||= value
    #        ^
    def call_operator_loc
      location = @call_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc) unless @call_operator_loc.nil?
    end

    # Represents the location of the message.
    #
    #     foo.bar ||= value
    #         ^^^
    def message_loc
      location = @message_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @message_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the message_loc location using the given saved source so that
    # it can be retrieved later.
    def save_message_loc(repository)
      repository.enter(node_id, :message_loc) unless @message_loc.nil?
    end

    # Represents the name of the method being called.
    #
    #     foo.bar ||= value # read_name `:bar`
    #         ^^^
    attr_reader :read_name

    # Represents the name of the method being written to.
    #
    #     foo.bar ||= value # write_name `:bar=`
    #         ^^^
    attr_reader :write_name

    # Represents the location of the operator.
    #
    #     foo.bar ||= value
    #             ^^^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # Represents the value being assigned.
    #
    #     foo.bar ||= value
    #                 ^^^^^
    attr_reader :value

    # def call_operator: () -> String?
    def call_operator
      call_operator_loc&.slice
    end

    # def message: () -> String?
    def message
      message_loc&.slice
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :call_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :call_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CallOrWriteNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (message_loc.nil? == other.message_loc.nil?) &&
        (read_name === other.read_name) &&
        (write_name === other.write_name) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents assigning to a method call.
  #
  #     foo.bar, = 1
  #     ^^^^^^^
  #
  #     begin
  #     rescue => foo.bar
  #               ^^^^^^^
  #     end
  #
  #     for foo.bar in baz do end
  #         ^^^^^^^
  class CallTargetNode < Node
    # Initialize a new CallTargetNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @name = name
      @message_loc = message_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_call_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [receiver]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [receiver, call_operator_loc, message_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node, ?call_operator_loc: Location, ?name: Symbol, ?message_loc: Location) -> CallTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, name: self.name, message_loc: self.message_loc)
      CallTargetNode.new(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node, call_operator_loc: Location, name: Symbol, message_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, name: name, message_loc: message_loc }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # The object that the method is being called on. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo.bar = 1
    #     ^^^
    attr_reader :receiver

    # Represents the location of the call operator.
    #
    #     foo.bar = 1
    #        ^
    def call_operator_loc
      location = @call_operator_loc
      return location if location.is_a?(Location)
      @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc)
    end

    # Represents the name of the method being called.
    #
    #     foo.bar = 1 # name `:foo`
    #     ^^^
    attr_reader :name

    # Represents the location of the message.
    #
    #     foo.bar = 1
    #         ^^^
    def message_loc
      location = @message_loc
      return location if location.is_a?(Location)
      @message_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the message_loc location using the given saved source so that
    # it can be retrieved later.
    def save_message_loc(repository)
      repository.enter(node_id, :message_loc)
    end

    # def call_operator: () -> String
    def call_operator
      call_operator_loc.slice
    end

    # def message: () -> String
    def message
      message_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :call_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :call_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CallTargetNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (name === other.name) &&
        (message_loc.nil? == other.message_loc.nil?)
    end
  end

  # Represents assigning to a local variable in pattern matching.
  #
  #     foo => [bar => baz]
  #            ^^^^^^^^^^^^
  class CapturePatternNode < Node
    # Initialize a new CapturePatternNode node.
    def initialize(source, node_id, location, flags, value, target, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @value = value
      @target = target
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_capture_pattern_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value, target]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value, target]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [value, target, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?value: Prism::node, ?target: LocalVariableTargetNode, ?operator_loc: Location) -> CapturePatternNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, value: self.value, target: self.target, operator_loc: self.operator_loc)
      CapturePatternNode.new(source, node_id, location, flags, value, target, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, value: Prism::node, target: LocalVariableTargetNode, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, value: value, target: target, operator_loc: operator_loc }
    end

    # Represents the value to capture.
    #
    #     foo => bar
    #            ^^^
    attr_reader :value

    # Represents the target of the capture.
    #
    #     foo => bar
    #     ^^^
    attr_reader :target

    # Represents the location of the `=>` operator.
    #
    #     foo => bar
    #         ^^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :capture_pattern_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :capture_pattern_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CapturePatternNode) &&
        (value === other.value) &&
        (target === other.target) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents the use of a case statement for pattern matching.
  #
  #     case true
  #     in false
  #     end
  #     ^^^^^^^^^
  class CaseMatchNode < Node
    # Initialize a new CaseMatchNode node.
    def initialize(source, node_id, location, flags, predicate, conditions, else_clause, case_keyword_loc, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @predicate = predicate
      @conditions = conditions
      @else_clause = else_clause
      @case_keyword_loc = case_keyword_loc
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_case_match_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [predicate, *conditions, else_clause]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << predicate if predicate
      compact.concat(conditions)
      compact << else_clause if else_clause
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*predicate, *conditions, *else_clause, case_keyword_loc, end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?predicate: Prism::node?, ?conditions: Array[InNode], ?else_clause: ElseNode?, ?case_keyword_loc: Location, ?end_keyword_loc: Location) -> CaseMatchNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, predicate: self.predicate, conditions: self.conditions, else_clause: self.else_clause, case_keyword_loc: self.case_keyword_loc, end_keyword_loc: self.end_keyword_loc)
      CaseMatchNode.new(source, node_id, location, flags, predicate, conditions, else_clause, case_keyword_loc, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, predicate: Prism::node?, conditions: Array[InNode], else_clause: ElseNode?, case_keyword_loc: Location, end_keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, predicate: predicate, conditions: conditions, else_clause: else_clause, case_keyword_loc: case_keyword_loc, end_keyword_loc: end_keyword_loc }
    end

    # Represents the predicate of the case match. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     case true; in false; end
    #     ^^^^
    attr_reader :predicate

    # Represents the conditions of the case match.
    #
    #     case true; in false; end
    #                ^^^^^^^^
    attr_reader :conditions

    # Represents the else clause of the case match.
    #
    #     case true; in false; else; end
    #                          ^^^^
    attr_reader :else_clause

    # Represents the location of the `case` keyword.
    #
    #     case true; in false; end
    #     ^^^^
    def case_keyword_loc
      location = @case_keyword_loc
      return location if location.is_a?(Location)
      @case_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the case_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_case_keyword_loc(repository)
      repository.enter(node_id, :case_keyword_loc)
    end

    # Represents the location of the `end` keyword.
    #
    #     case true; in false; end
    #                          ^^^
    def end_keyword_loc
      location = @end_keyword_loc
      return location if location.is_a?(Location)
      @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc)
    end

    # def case_keyword: () -> String
    def case_keyword
      case_keyword_loc.slice
    end

    # def end_keyword: () -> String
    def end_keyword
      end_keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :case_match_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :case_match_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CaseMatchNode) &&
        (predicate === other.predicate) &&
        (conditions.length == other.conditions.length) &&
        conditions.zip(other.conditions).all? { |left, right| left === right } &&
        (else_clause === other.else_clause) &&
        (case_keyword_loc.nil? == other.case_keyword_loc.nil?) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents the use of a case statement.
  #
  #     case true
  #     when false
  #     end
  #     ^^^^^^^^^^
  class CaseNode < Node
    # Initialize a new CaseNode node.
    def initialize(source, node_id, location, flags, predicate, conditions, else_clause, case_keyword_loc, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @predicate = predicate
      @conditions = conditions
      @else_clause = else_clause
      @case_keyword_loc = case_keyword_loc
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_case_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [predicate, *conditions, else_clause]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << predicate if predicate
      compact.concat(conditions)
      compact << else_clause if else_clause
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*predicate, *conditions, *else_clause, case_keyword_loc, end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?predicate: Prism::node?, ?conditions: Array[WhenNode], ?else_clause: ElseNode?, ?case_keyword_loc: Location, ?end_keyword_loc: Location) -> CaseNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, predicate: self.predicate, conditions: self.conditions, else_clause: self.else_clause, case_keyword_loc: self.case_keyword_loc, end_keyword_loc: self.end_keyword_loc)
      CaseNode.new(source, node_id, location, flags, predicate, conditions, else_clause, case_keyword_loc, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, predicate: Prism::node?, conditions: Array[WhenNode], else_clause: ElseNode?, case_keyword_loc: Location, end_keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, predicate: predicate, conditions: conditions, else_clause: else_clause, case_keyword_loc: case_keyword_loc, end_keyword_loc: end_keyword_loc }
    end

    # Represents the predicate of the case statement. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     case true; when false; end
    #     ^^^^
    attr_reader :predicate

    # Represents the conditions of the case statement.
    #
    #     case true; when false; end
    #                ^^^^^^^^^^
    attr_reader :conditions

    # Represents the else clause of the case statement.
    #
    #     case true; when false; else; end
    #                            ^^^^
    attr_reader :else_clause

    # Represents the location of the `case` keyword.
    #
    #     case true; when false; end
    #     ^^^^
    def case_keyword_loc
      location = @case_keyword_loc
      return location if location.is_a?(Location)
      @case_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the case_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_case_keyword_loc(repository)
      repository.enter(node_id, :case_keyword_loc)
    end

    # Represents the location of the `end` keyword.
    #
    #     case true; when false; end
    #                            ^^^
    def end_keyword_loc
      location = @end_keyword_loc
      return location if location.is_a?(Location)
      @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc)
    end

    # def case_keyword: () -> String
    def case_keyword
      case_keyword_loc.slice
    end

    # def end_keyword: () -> String
    def end_keyword
      end_keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :case_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :case_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(CaseNode) &&
        (predicate === other.predicate) &&
        (conditions.length == other.conditions.length) &&
        conditions.zip(other.conditions).all? { |left, right| left === right } &&
        (else_clause === other.else_clause) &&
        (case_keyword_loc.nil? == other.case_keyword_loc.nil?) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents a class declaration involving the `class` keyword.
  #
  #     class Foo end
  #     ^^^^^^^^^^^^^
  class ClassNode < Node
    # Initialize a new ClassNode node.
    def initialize(source, node_id, location, flags, locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @locals = locals
      @class_keyword_loc = class_keyword_loc
      @constant_path = constant_path
      @inheritance_operator_loc = inheritance_operator_loc
      @superclass = superclass
      @body = body
      @end_keyword_loc = end_keyword_loc
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_class_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [constant_path, superclass, body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << constant_path
      compact << superclass if superclass
      compact << body if body
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [class_keyword_loc, constant_path, *inheritance_operator_loc, *superclass, *body, end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?locals: Array[Symbol], ?class_keyword_loc: Location, ?constant_path: ConstantReadNode | ConstantPathNode | CallNode, ?inheritance_operator_loc: Location?, ?superclass: Prism::node?, ?body: StatementsNode | BeginNode | nil, ?end_keyword_loc: Location, ?name: Symbol) -> ClassNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, locals: self.locals, class_keyword_loc: self.class_keyword_loc, constant_path: self.constant_path, inheritance_operator_loc: self.inheritance_operator_loc, superclass: self.superclass, body: self.body, end_keyword_loc: self.end_keyword_loc, name: self.name)
      ClassNode.new(source, node_id, location, flags, locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, locals: Array[Symbol], class_keyword_loc: Location, constant_path: ConstantReadNode | ConstantPathNode | CallNode, inheritance_operator_loc: Location?, superclass: Prism::node?, body: StatementsNode | BeginNode | nil, end_keyword_loc: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, locals: locals, class_keyword_loc: class_keyword_loc, constant_path: constant_path, inheritance_operator_loc: inheritance_operator_loc, superclass: superclass, body: body, end_keyword_loc: end_keyword_loc, name: name }
    end

    # attr_reader locals: Array[Symbol]
    attr_reader :locals

    # attr_reader class_keyword_loc: Location
    def class_keyword_loc
      location = @class_keyword_loc
      return location if location.is_a?(Location)
      @class_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the class_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_class_keyword_loc(repository)
      repository.enter(node_id, :class_keyword_loc)
    end

    # attr_reader constant_path: ConstantReadNode | ConstantPathNode | CallNode
    attr_reader :constant_path

    # attr_reader inheritance_operator_loc: Location?
    def inheritance_operator_loc
      location = @inheritance_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @inheritance_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the inheritance_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_inheritance_operator_loc(repository)
      repository.enter(node_id, :inheritance_operator_loc) unless @inheritance_operator_loc.nil?
    end

    # attr_reader superclass: Prism::node?
    attr_reader :superclass

    # attr_reader body: StatementsNode | BeginNode | nil
    attr_reader :body

    # attr_reader end_keyword_loc: Location
    def end_keyword_loc
      location = @end_keyword_loc
      return location if location.is_a?(Location)
      @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc)
    end

    # attr_reader name: Symbol
    attr_reader :name

    # def class_keyword: () -> String
    def class_keyword
      class_keyword_loc.slice
    end

    # def inheritance_operator: () -> String?
    def inheritance_operator
      inheritance_operator_loc&.slice
    end

    # def end_keyword: () -> String
    def end_keyword
      end_keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :class_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :class_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ClassNode) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (class_keyword_loc.nil? == other.class_keyword_loc.nil?) &&
        (constant_path === other.constant_path) &&
        (inheritance_operator_loc.nil? == other.inheritance_operator_loc.nil?) &&
        (superclass === other.superclass) &&
        (body === other.body) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?) &&
        (name === other.name)
    end
  end

  # Represents the use of the `&&=` operator for assignment to a class variable.
  #
  #     @@target &&= value
  #     ^^^^^^^^^^^^^^^^^^
  class ClassVariableAndWriteNode < Node
    # Initialize a new ClassVariableAndWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_class_variable_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> ClassVariableAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      ClassVariableAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
    #
    #     @@target &&= value # name `:@@target`
    #     ^^^^^^^^
    attr_reader :name

    # Represents the location of the variable name.
    #
    #     @@target &&= value
    #     ^^^^^^^^
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # Represents the location of the `&&=` operator.
    #
    #     @@target &&= value
    #              ^^^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # Represents the value being assigned. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     @@target &&= value
    #                  ^^^^^
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :class_variable_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :class_variable_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ClassVariableAndWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents assigning to a class variable using an operator that isn't `=`.
  #
  #     @@target += value
  #     ^^^^^^^^^^^^^^^^^
  class ClassVariableOperatorWriteNode < Node
    # Initialize a new ClassVariableOperatorWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @binary_operator_loc = binary_operator_loc
      @value = value
      @binary_operator = binary_operator
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_class_variable_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol) -> ClassVariableOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator)
      ClassVariableOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader binary_operator_loc: Location
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader binary_operator: Symbol
    attr_reader :binary_operator

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :class_variable_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :class_variable_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ClassVariableOperatorWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value) &&
        (binary_operator === other.binary_operator)
    end
  end

  # Represents the use of the `||=` operator for assignment to a class variable.
  #
  #     @@target ||= value
  #     ^^^^^^^^^^^^^^^^^^
  class ClassVariableOrWriteNode < Node
    # Initialize a new ClassVariableOrWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_class_variable_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> ClassVariableOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      ClassVariableOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :class_variable_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :class_variable_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ClassVariableOrWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents referencing a class variable.
  #
  #     @@foo
  #     ^^^^^
  class ClassVariableReadNode < Node
    # Initialize a new ClassVariableReadNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_class_variable_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> ClassVariableReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      ClassVariableReadNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
    #
    #     @@abc   # name `:@@abc`
    #
    #     @@_test # name `:@@_test`
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :class_variable_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :class_variable_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ClassVariableReadNode) &&
        (name === other.name)
    end
  end

  # Represents writing to a class variable in a context that doesn't have an explicit value.
  #
  #     @@foo, @@bar = baz
  #     ^^^^^  ^^^^^
  class ClassVariableTargetNode < Node
    # Initialize a new ClassVariableTargetNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_class_variable_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> ClassVariableTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      ClassVariableTargetNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :class_variable_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :class_variable_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ClassVariableTargetNode) &&
        (name === other.name)
    end
  end

  # Represents writing to a class variable.
  #
  #     @@foo = 1
  #     ^^^^^^^^^
  class ClassVariableWriteNode < Node
    # Initialize a new ClassVariableWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, value, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @value = value
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_class_variable_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, value, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?value: Prism::node, ?operator_loc: Location) -> ClassVariableWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, value: self.value, operator_loc: self.operator_loc)
      ClassVariableWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, value: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, value: value, operator_loc: operator_loc }
    end

    # The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
    #
    #     @@abc = 123     # name `@@abc`
    #
    #     @@_test = :test # name `@@_test`
    attr_reader :name

    # The location of the variable name.
    #
    #     @@foo = :bar
    #     ^^^^^
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # The value to write to the class variable. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     @@foo = :bar
    #             ^^^^
    #
    #     @@_xyz = 123
    #              ^^^
    attr_reader :value

    # The location of the `=` operator.
    #
    #     @@foo = :bar
    #           ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :class_variable_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :class_variable_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ClassVariableWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (value === other.value) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents the use of the `&&=` operator for assignment to a constant.
  #
  #     Target &&= value
  #     ^^^^^^^^^^^^^^^^
  class ConstantAndWriteNode < Node
    # Initialize a new ConstantAndWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> ConstantAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      ConstantAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantAndWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents assigning to a constant using an operator that isn't `=`.
  #
  #     Target += value
  #     ^^^^^^^^^^^^^^^
  class ConstantOperatorWriteNode < Node
    # Initialize a new ConstantOperatorWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @binary_operator_loc = binary_operator_loc
      @value = value
      @binary_operator = binary_operator
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol) -> ConstantOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator)
      ConstantOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader binary_operator_loc: Location
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader binary_operator: Symbol
    attr_reader :binary_operator

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantOperatorWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value) &&
        (binary_operator === other.binary_operator)
    end
  end

  # Represents the use of the `||=` operator for assignment to a constant.
  #
  #     Target ||= value
  #     ^^^^^^^^^^^^^^^^
  class ConstantOrWriteNode < Node
    # Initialize a new ConstantOrWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> ConstantOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      ConstantOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantOrWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents the use of the `&&=` operator for assignment to a constant path.
  #
  #     Parent::Child &&= value
  #     ^^^^^^^^^^^^^^^^^^^^^^^
  class ConstantPathAndWriteNode < Node
    # Initialize a new ConstantPathAndWriteNode node.
    def initialize(source, node_id, location, flags, target, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @target = target
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_path_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [target, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [target, value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [target, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?target: ConstantPathNode, ?operator_loc: Location, ?value: Prism::node) -> ConstantPathAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, target: self.target, operator_loc: self.operator_loc, value: self.value)
      ConstantPathAndWriteNode.new(source, node_id, location, flags, target, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, target: ConstantPathNode, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, target: target, operator_loc: operator_loc, value: value }
    end

    # attr_reader target: ConstantPathNode
    attr_reader :target

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_path_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_path_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantPathAndWriteNode) &&
        (target === other.target) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents accessing a constant through a path of `::` operators.
  #
  #     Foo::Bar
  #     ^^^^^^^^
  class ConstantPathNode < Node
    # Initialize a new ConstantPathNode node.
    def initialize(source, node_id, location, flags, parent, name, delimiter_loc, name_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @parent = parent
      @name = name
      @delimiter_loc = delimiter_loc
      @name_loc = name_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_path_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [parent]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << parent if parent
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*parent, delimiter_loc, name_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?parent: Prism::node?, ?name: Symbol?, ?delimiter_loc: Location, ?name_loc: Location) -> ConstantPathNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, parent: self.parent, name: self.name, delimiter_loc: self.delimiter_loc, name_loc: self.name_loc)
      ConstantPathNode.new(source, node_id, location, flags, parent, name, delimiter_loc, name_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, parent: Prism::node?, name: Symbol?, delimiter_loc: Location, name_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, parent: parent, name: name, delimiter_loc: delimiter_loc, name_loc: name_loc }
    end

    # The left-hand node of the path, if present. It can be `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). It will be `nil` when the constant lookup is at the root of the module tree.
    #
    #     Foo::Bar
    #     ^^^
    #
    #     self::Test
    #     ^^^^
    #
    #     a.b::C
    #     ^^^
    attr_reader :parent

    # The name of the constant being accessed. This could be `nil` in the event of a syntax error.
    attr_reader :name

    # The location of the `::` delimiter.
    #
    #     ::Foo
    #     ^^
    #
    #     One::Two
    #        ^^
    def delimiter_loc
      location = @delimiter_loc
      return location if location.is_a?(Location)
      @delimiter_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the delimiter_loc location using the given saved source so that
    # it can be retrieved later.
    def save_delimiter_loc(repository)
      repository.enter(node_id, :delimiter_loc)
    end

    # The location of the name of the constant.
    #
    #     ::Foo
    #       ^^^
    #
    #     One::Two
    #          ^^^
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # def delimiter: () -> String
    def delimiter
      delimiter_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_path_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_path_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantPathNode) &&
        (parent === other.parent) &&
        (name === other.name) &&
        (delimiter_loc.nil? == other.delimiter_loc.nil?) &&
        (name_loc.nil? == other.name_loc.nil?)
    end
  end

  # Represents assigning to a constant path using an operator that isn't `=`.
  #
  #     Parent::Child += value
  #     ^^^^^^^^^^^^^^^^^^^^^^
  class ConstantPathOperatorWriteNode < Node
    # Initialize a new ConstantPathOperatorWriteNode node.
    def initialize(source, node_id, location, flags, target, binary_operator_loc, value, binary_operator)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @target = target
      @binary_operator_loc = binary_operator_loc
      @value = value
      @binary_operator = binary_operator
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_path_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [target, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [target, value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [target, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?target: ConstantPathNode, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol) -> ConstantPathOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, target: self.target, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator)
      ConstantPathOperatorWriteNode.new(source, node_id, location, flags, target, binary_operator_loc, value, binary_operator)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, target: ConstantPathNode, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, target: target, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator }
    end

    # attr_reader target: ConstantPathNode
    attr_reader :target

    # attr_reader binary_operator_loc: Location
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader binary_operator: Symbol
    attr_reader :binary_operator

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_path_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_path_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantPathOperatorWriteNode) &&
        (target === other.target) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value) &&
        (binary_operator === other.binary_operator)
    end
  end

  # Represents the use of the `||=` operator for assignment to a constant path.
  #
  #     Parent::Child ||= value
  #     ^^^^^^^^^^^^^^^^^^^^^^^
  class ConstantPathOrWriteNode < Node
    # Initialize a new ConstantPathOrWriteNode node.
    def initialize(source, node_id, location, flags, target, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @target = target
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_path_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [target, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [target, value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [target, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?target: ConstantPathNode, ?operator_loc: Location, ?value: Prism::node) -> ConstantPathOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, target: self.target, operator_loc: self.operator_loc, value: self.value)
      ConstantPathOrWriteNode.new(source, node_id, location, flags, target, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, target: ConstantPathNode, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, target: target, operator_loc: operator_loc, value: value }
    end

    # attr_reader target: ConstantPathNode
    attr_reader :target

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_path_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_path_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantPathOrWriteNode) &&
        (target === other.target) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents writing to a constant path in a context that doesn't have an explicit value.
  #
  #     Foo::Foo, Bar::Bar = baz
  #     ^^^^^^^^  ^^^^^^^^
  class ConstantPathTargetNode < Node
    # Initialize a new ConstantPathTargetNode node.
    def initialize(source, node_id, location, flags, parent, name, delimiter_loc, name_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @parent = parent
      @name = name
      @delimiter_loc = delimiter_loc
      @name_loc = name_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_path_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [parent]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << parent if parent
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*parent, delimiter_loc, name_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?parent: Prism::node?, ?name: Symbol?, ?delimiter_loc: Location, ?name_loc: Location) -> ConstantPathTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, parent: self.parent, name: self.name, delimiter_loc: self.delimiter_loc, name_loc: self.name_loc)
      ConstantPathTargetNode.new(source, node_id, location, flags, parent, name, delimiter_loc, name_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, parent: Prism::node?, name: Symbol?, delimiter_loc: Location, name_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, parent: parent, name: name, delimiter_loc: delimiter_loc, name_loc: name_loc }
    end

    # attr_reader parent: Prism::node?
    attr_reader :parent

    # attr_reader name: Symbol?
    attr_reader :name

    # attr_reader delimiter_loc: Location
    def delimiter_loc
      location = @delimiter_loc
      return location if location.is_a?(Location)
      @delimiter_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the delimiter_loc location using the given saved source so that
    # it can be retrieved later.
    def save_delimiter_loc(repository)
      repository.enter(node_id, :delimiter_loc)
    end

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # def delimiter: () -> String
    def delimiter
      delimiter_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_path_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_path_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantPathTargetNode) &&
        (parent === other.parent) &&
        (name === other.name) &&
        (delimiter_loc.nil? == other.delimiter_loc.nil?) &&
        (name_loc.nil? == other.name_loc.nil?)
    end
  end

  # Represents writing to a constant path.
  #
  #     ::Foo = 1
  #     ^^^^^^^^^
  #
  #     Foo::Bar = 1
  #     ^^^^^^^^^^^^
  #
  #     ::Foo::Bar = 1
  #     ^^^^^^^^^^^^^^
  class ConstantPathWriteNode < Node
    # Initialize a new ConstantPathWriteNode node.
    def initialize(source, node_id, location, flags, target, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @target = target
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_path_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [target, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [target, value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [target, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?target: ConstantPathNode, ?operator_loc: Location, ?value: Prism::node) -> ConstantPathWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, target: self.target, operator_loc: self.operator_loc, value: self.value)
      ConstantPathWriteNode.new(source, node_id, location, flags, target, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, target: ConstantPathNode, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, target: target, operator_loc: operator_loc, value: value }
    end

    # A node representing the constant path being written to.
    #
    #     Foo::Bar = 1
    #     ^^^^^^^^
    #
    #     ::Foo = :abc
    #     ^^^^^
    attr_reader :target

    # The location of the `=` operator.
    #
    #     ::ABC = 123
    #           ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # The value to write to the constant path. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     FOO::BAR = :abc
    #                ^^^^
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_path_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_path_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantPathWriteNode) &&
        (target === other.target) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents referencing a constant.
  #
  #     Foo
  #     ^^^
  class ConstantReadNode < Node
    # Initialize a new ConstantReadNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> ConstantReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      ConstantReadNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # The name of the [constant](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#constants).
    #
    #     X              # name `:X`
    #
    #     SOME_CONSTANT  # name `:SOME_CONSTANT`
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantReadNode) &&
        (name === other.name)
    end
  end

  # Represents writing to a constant in a context that doesn't have an explicit value.
  #
  #     Foo, Bar = baz
  #     ^^^  ^^^
  class ConstantTargetNode < Node
    # Initialize a new ConstantTargetNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> ConstantTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      ConstantTargetNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantTargetNode) &&
        (name === other.name)
    end
  end

  # Represents writing to a constant.
  #
  #     Foo = 1
  #     ^^^^^^^
  class ConstantWriteNode < Node
    # Initialize a new ConstantWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, value, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @value = value
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_constant_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, value, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?value: Prism::node, ?operator_loc: Location) -> ConstantWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, value: self.value, operator_loc: self.operator_loc)
      ConstantWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, value: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, value: value, operator_loc: operator_loc }
    end

    # The name of the [constant](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#constants).
    #
    #     Foo = :bar # name `:Foo`
    #
    #     XYZ = 1    # name `:XYZ`
    attr_reader :name

    # The location of the constant name.
    #
    #     FOO = 1
    #     ^^^
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # The value to write to the constant. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     FOO = :bar
    #           ^^^^
    #
    #     MyClass = Class.new
    #               ^^^^^^^^^
    attr_reader :value

    # The location of the `=` operator.
    #
    #     FOO = :bar
    #         ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :constant_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :constant_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ConstantWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (value === other.value) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a method definition.
  #
  #     def method
  #     end
  #     ^^^^^^^^^^
  class DefNode < Node
    # Initialize a new DefNode node.
    def initialize(source, node_id, location, flags, name, name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @receiver = receiver
      @parameters = parameters
      @body = body
      @locals = locals
      @def_keyword_loc = def_keyword_loc
      @operator_loc = operator_loc
      @lparen_loc = lparen_loc
      @rparen_loc = rparen_loc
      @equal_loc = equal_loc
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_def_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, parameters, body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << parameters if parameters
      compact << body if body
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, *receiver, *parameters, *body, def_keyword_loc, *operator_loc, *lparen_loc, *rparen_loc, *equal_loc, *end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?receiver: Prism::node?, ?parameters: ParametersNode?, ?body: StatementsNode | BeginNode | nil, ?locals: Array[Symbol], ?def_keyword_loc: Location, ?operator_loc: Location?, ?lparen_loc: Location?, ?rparen_loc: Location?, ?equal_loc: Location?, ?end_keyword_loc: Location?) -> DefNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, receiver: self.receiver, parameters: self.parameters, body: self.body, locals: self.locals, def_keyword_loc: self.def_keyword_loc, operator_loc: self.operator_loc, lparen_loc: self.lparen_loc, rparen_loc: self.rparen_loc, equal_loc: self.equal_loc, end_keyword_loc: self.end_keyword_loc)
      DefNode.new(source, node_id, location, flags, name, name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, receiver: Prism::node?, parameters: ParametersNode?, body: StatementsNode | BeginNode | nil, locals: Array[Symbol], def_keyword_loc: Location, operator_loc: Location?, lparen_loc: Location?, rparen_loc: Location?, equal_loc: Location?, end_keyword_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, receiver: receiver, parameters: parameters, body: body, locals: locals, def_keyword_loc: def_keyword_loc, operator_loc: operator_loc, lparen_loc: lparen_loc, rparen_loc: rparen_loc, equal_loc: equal_loc, end_keyword_loc: end_keyword_loc }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader receiver: Prism::node?
    attr_reader :receiver

    # attr_reader parameters: ParametersNode?
    attr_reader :parameters

    # attr_reader body: StatementsNode | BeginNode | nil
    attr_reader :body

    # attr_reader locals: Array[Symbol]
    attr_reader :locals

    # attr_reader def_keyword_loc: Location
    def def_keyword_loc
      location = @def_keyword_loc
      return location if location.is_a?(Location)
      @def_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the def_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_def_keyword_loc(repository)
      repository.enter(node_id, :def_keyword_loc)
    end

    # attr_reader operator_loc: Location?
    def operator_loc
      location = @operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc) unless @operator_loc.nil?
    end

    # attr_reader lparen_loc: Location?
    def lparen_loc
      location = @lparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the lparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc) unless @lparen_loc.nil?
    end

    # attr_reader rparen_loc: Location?
    def rparen_loc
      location = @rparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the rparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc) unless @rparen_loc.nil?
    end

    # attr_reader equal_loc: Location?
    def equal_loc
      location = @equal_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @equal_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the equal_loc location using the given saved source so that
    # it can be retrieved later.
    def save_equal_loc(repository)
      repository.enter(node_id, :equal_loc) unless @equal_loc.nil?
    end

    # attr_reader end_keyword_loc: Location?
    def end_keyword_loc
      location = @end_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc) unless @end_keyword_loc.nil?
    end

    # def def_keyword: () -> String
    def def_keyword
      def_keyword_loc.slice
    end

    # def operator: () -> String?
    def operator
      operator_loc&.slice
    end

    # def lparen: () -> String?
    def lparen
      lparen_loc&.slice
    end

    # def rparen: () -> String?
    def rparen
      rparen_loc&.slice
    end

    # def equal: () -> String?
    def equal
      equal_loc&.slice
    end

    # def end_keyword: () -> String?
    def end_keyword
      end_keyword_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :def_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :def_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(DefNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (receiver === other.receiver) &&
        (parameters === other.parameters) &&
        (body === other.body) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (def_keyword_loc.nil? == other.def_keyword_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (lparen_loc.nil? == other.lparen_loc.nil?) &&
        (rparen_loc.nil? == other.rparen_loc.nil?) &&
        (equal_loc.nil? == other.equal_loc.nil?) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents the use of the `defined?` keyword.
  #
  #     defined?(a)
  #     ^^^^^^^^^^^
  class DefinedNode < Node
    # Initialize a new DefinedNode node.
    def initialize(source, node_id, location, flags, lparen_loc, value, rparen_loc, keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @lparen_loc = lparen_loc
      @value = value
      @rparen_loc = rparen_loc
      @keyword_loc = keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_defined_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*lparen_loc, value, *rparen_loc, keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?lparen_loc: Location?, ?value: Prism::node, ?rparen_loc: Location?, ?keyword_loc: Location) -> DefinedNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, lparen_loc: self.lparen_loc, value: self.value, rparen_loc: self.rparen_loc, keyword_loc: self.keyword_loc)
      DefinedNode.new(source, node_id, location, flags, lparen_loc, value, rparen_loc, keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, lparen_loc: Location?, value: Prism::node, rparen_loc: Location?, keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, lparen_loc: lparen_loc, value: value, rparen_loc: rparen_loc, keyword_loc: keyword_loc }
    end

    # attr_reader lparen_loc: Location?
    def lparen_loc
      location = @lparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the lparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc) unless @lparen_loc.nil?
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader rparen_loc: Location?
    def rparen_loc
      location = @rparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the rparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc) unless @rparen_loc.nil?
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # def lparen: () -> String?
    def lparen
      lparen_loc&.slice
    end

    # def rparen: () -> String?
    def rparen
      rparen_loc&.slice
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :defined_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :defined_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(DefinedNode) &&
        (lparen_loc.nil? == other.lparen_loc.nil?) &&
        (value === other.value) &&
        (rparen_loc.nil? == other.rparen_loc.nil?) &&
        (keyword_loc.nil? == other.keyword_loc.nil?)
    end
  end

  # Represents an `else` clause in a `case`, `if`, or `unless` statement.
  #
  #     if a then b else c end
  #                 ^^^^^^^^^^
  class ElseNode < Node
    # Initialize a new ElseNode node.
    def initialize(source, node_id, location, flags, else_keyword_loc, statements, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @else_keyword_loc = else_keyword_loc
      @statements = statements
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_else_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [else_keyword_loc, *statements, *end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?else_keyword_loc: Location, ?statements: StatementsNode?, ?end_keyword_loc: Location?) -> ElseNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, else_keyword_loc: self.else_keyword_loc, statements: self.statements, end_keyword_loc: self.end_keyword_loc)
      ElseNode.new(source, node_id, location, flags, else_keyword_loc, statements, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, else_keyword_loc: Location, statements: StatementsNode?, end_keyword_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, else_keyword_loc: else_keyword_loc, statements: statements, end_keyword_loc: end_keyword_loc }
    end

    # attr_reader else_keyword_loc: Location
    def else_keyword_loc
      location = @else_keyword_loc
      return location if location.is_a?(Location)
      @else_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the else_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_else_keyword_loc(repository)
      repository.enter(node_id, :else_keyword_loc)
    end

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # attr_reader end_keyword_loc: Location?
    def end_keyword_loc
      location = @end_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc) unless @end_keyword_loc.nil?
    end

    # def else_keyword: () -> String
    def else_keyword
      else_keyword_loc.slice
    end

    # def end_keyword: () -> String?
    def end_keyword
      end_keyword_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :else_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :else_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ElseNode) &&
        (else_keyword_loc.nil? == other.else_keyword_loc.nil?) &&
        (statements === other.statements) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents an interpolated set of statements.
  #
  #     "foo #{bar}"
  #          ^^^^^^
  class EmbeddedStatementsNode < Node
    # Initialize a new EmbeddedStatementsNode node.
    def initialize(source, node_id, location, flags, opening_loc, statements, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @statements = statements
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_embedded_statements_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, *statements, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?statements: StatementsNode?, ?closing_loc: Location) -> EmbeddedStatementsNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, statements: self.statements, closing_loc: self.closing_loc)
      EmbeddedStatementsNode.new(source, node_id, location, flags, opening_loc, statements, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, statements: StatementsNode?, closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, statements: statements, closing_loc: closing_loc }
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :embedded_statements_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :embedded_statements_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(EmbeddedStatementsNode) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (statements === other.statements) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents an interpolated variable.
  #
  #     "foo #@bar"
  #          ^^^^^
  class EmbeddedVariableNode < Node
    # Initialize a new EmbeddedVariableNode node.
    def initialize(source, node_id, location, flags, operator_loc, variable)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @operator_loc = operator_loc
      @variable = variable
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_embedded_variable_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [variable]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [variable]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [operator_loc, variable] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?operator_loc: Location, ?variable: InstanceVariableReadNode | ClassVariableReadNode | GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode) -> EmbeddedVariableNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, operator_loc: self.operator_loc, variable: self.variable)
      EmbeddedVariableNode.new(source, node_id, location, flags, operator_loc, variable)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, operator_loc: Location, variable: InstanceVariableReadNode | ClassVariableReadNode | GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, operator_loc: operator_loc, variable: variable }
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader variable: InstanceVariableReadNode | ClassVariableReadNode | GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode
    attr_reader :variable

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :embedded_variable_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :embedded_variable_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(EmbeddedVariableNode) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (variable === other.variable)
    end
  end

  # Represents an `ensure` clause in a `begin` statement.
  #
  #     begin
  #       foo
  #     ensure
  #     ^^^^^^
  #       bar
  #     end
  class EnsureNode < Node
    # Initialize a new EnsureNode node.
    def initialize(source, node_id, location, flags, ensure_keyword_loc, statements, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @ensure_keyword_loc = ensure_keyword_loc
      @statements = statements
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_ensure_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [ensure_keyword_loc, *statements, end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?ensure_keyword_loc: Location, ?statements: StatementsNode?, ?end_keyword_loc: Location) -> EnsureNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, ensure_keyword_loc: self.ensure_keyword_loc, statements: self.statements, end_keyword_loc: self.end_keyword_loc)
      EnsureNode.new(source, node_id, location, flags, ensure_keyword_loc, statements, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, ensure_keyword_loc: Location, statements: StatementsNode?, end_keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, ensure_keyword_loc: ensure_keyword_loc, statements: statements, end_keyword_loc: end_keyword_loc }
    end

    # attr_reader ensure_keyword_loc: Location
    def ensure_keyword_loc
      location = @ensure_keyword_loc
      return location if location.is_a?(Location)
      @ensure_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the ensure_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_ensure_keyword_loc(repository)
      repository.enter(node_id, :ensure_keyword_loc)
    end

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # attr_reader end_keyword_loc: Location
    def end_keyword_loc
      location = @end_keyword_loc
      return location if location.is_a?(Location)
      @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc)
    end

    # def ensure_keyword: () -> String
    def ensure_keyword
      ensure_keyword_loc.slice
    end

    # def end_keyword: () -> String
    def end_keyword
      end_keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :ensure_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :ensure_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(EnsureNode) &&
        (ensure_keyword_loc.nil? == other.ensure_keyword_loc.nil?) &&
        (statements === other.statements) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents the use of the literal `false` keyword.
  #
  #     false
  #     ^^^^^
  class FalseNode < Node
    # Initialize a new FalseNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_false_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> FalseNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      FalseNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :false_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :false_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(FalseNode)
    end
  end

  # Represents a find pattern in pattern matching.
  #
  #     foo in *bar, baz, *qux
  #            ^^^^^^^^^^^^^^^
  #
  #     foo in [*bar, baz, *qux]
  #            ^^^^^^^^^^^^^^^^^
  #
  #     foo in Foo(*bar, baz, *qux)
  #            ^^^^^^^^^^^^^^^^^^^^
  class FindPatternNode < Node
    # Initialize a new FindPatternNode node.
    def initialize(source, node_id, location, flags, constant, left, requireds, right, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @constant = constant
      @left = left
      @requireds = requireds
      @right = right
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_find_pattern_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [constant, left, *requireds, right]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << constant if constant
      compact << left
      compact.concat(requireds)
      compact << right
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*constant, left, *requireds, right, *opening_loc, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?constant: ConstantReadNode | ConstantPathNode | nil, ?left: SplatNode, ?requireds: Array[Prism::node], ?right: SplatNode | MissingNode, ?opening_loc: Location?, ?closing_loc: Location?) -> FindPatternNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, constant: self.constant, left: self.left, requireds: self.requireds, right: self.right, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      FindPatternNode.new(source, node_id, location, flags, constant, left, requireds, right, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, constant: ConstantReadNode | ConstantPathNode | nil, left: SplatNode, requireds: Array[Prism::node], right: SplatNode | MissingNode, opening_loc: Location?, closing_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, constant: constant, left: left, requireds: requireds, right: right, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # attr_reader constant: ConstantReadNode | ConstantPathNode | nil
    attr_reader :constant

    # attr_reader left: SplatNode
    attr_reader :left

    # attr_reader requireds: Array[Prism::node]
    attr_reader :requireds

    # attr_reader right: SplatNode | MissingNode
    attr_reader :right

    # attr_reader opening_loc: Location?
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :find_pattern_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :find_pattern_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(FindPatternNode) &&
        (constant === other.constant) &&
        (left === other.left) &&
        (requireds.length == other.requireds.length) &&
        requireds.zip(other.requireds).all? { |left, right| left === right } &&
        (right === other.right) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents the use of the `..` or `...` operators to create flip flops.
  #
  #     baz if foo .. bar
  #            ^^^^^^^^^^
  class FlipFlopNode < Node
    # Initialize a new FlipFlopNode node.
    def initialize(source, node_id, location, flags, left, right, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @left = left
      @right = right
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_flip_flop_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [left, right]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << left if left
      compact << right if right
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*left, *right, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?left: Prism::node?, ?right: Prism::node?, ?operator_loc: Location) -> FlipFlopNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, left: self.left, right: self.right, operator_loc: self.operator_loc)
      FlipFlopNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, left: Prism::node?, right: Prism::node?, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, left: left, right: right, operator_loc: operator_loc }
    end

    # def exclude_end?: () -> bool
    def exclude_end?
      flags.anybits?(RangeFlags::EXCLUDE_END)
    end

    # attr_reader left: Prism::node?
    attr_reader :left

    # attr_reader right: Prism::node?
    attr_reader :right

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :flip_flop_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :flip_flop_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(FlipFlopNode) &&
        (flags === other.flags) &&
        (left === other.left) &&
        (right === other.right) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a floating point number literal.
  #
  #     1.0
  #     ^^^
  class FloatNode < Node
    # Initialize a new FloatNode node.
    def initialize(source, node_id, location, flags, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_float_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?value: Float) -> FloatNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, value: self.value)
      FloatNode.new(source, node_id, location, flags, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, value: Float }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, value: value }
    end

    # The value of the floating point number as a Float.
    attr_reader :value

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :float_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :float_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(FloatNode) &&
        (value === other.value)
    end
  end

  # Represents the use of the `for` keyword.
  #
  #     for i in a end
  #     ^^^^^^^^^^^^^^
  class ForNode < Node
    # Initialize a new ForNode node.
    def initialize(source, node_id, location, flags, index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @index = index
      @collection = collection
      @statements = statements
      @for_keyword_loc = for_keyword_loc
      @in_keyword_loc = in_keyword_loc
      @do_keyword_loc = do_keyword_loc
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_for_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [index, collection, statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << index
      compact << collection
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [index, collection, *statements, for_keyword_loc, in_keyword_loc, *do_keyword_loc, end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?index: LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | BackReferenceReadNode | NumberedReferenceReadNode | MissingNode, ?collection: Prism::node, ?statements: StatementsNode?, ?for_keyword_loc: Location, ?in_keyword_loc: Location, ?do_keyword_loc: Location?, ?end_keyword_loc: Location) -> ForNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, index: self.index, collection: self.collection, statements: self.statements, for_keyword_loc: self.for_keyword_loc, in_keyword_loc: self.in_keyword_loc, do_keyword_loc: self.do_keyword_loc, end_keyword_loc: self.end_keyword_loc)
      ForNode.new(source, node_id, location, flags, index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, index: LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | BackReferenceReadNode | NumberedReferenceReadNode | MissingNode, collection: Prism::node, statements: StatementsNode?, for_keyword_loc: Location, in_keyword_loc: Location, do_keyword_loc: Location?, end_keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, index: index, collection: collection, statements: statements, for_keyword_loc: for_keyword_loc, in_keyword_loc: in_keyword_loc, do_keyword_loc: do_keyword_loc, end_keyword_loc: end_keyword_loc }
    end

    # The index expression for `for` loops.
    #
    #     for i in a end
    #         ^
    attr_reader :index

    # The collection to iterate over.
    #
    #     for i in a end
    #              ^
    attr_reader :collection

    # Represents the body of statements to execute for each iteration of the loop.
    #
    #     for i in a
    #       foo(i)
    #       ^^^^^^
    #     end
    attr_reader :statements

    # The location of the `for` keyword.
    #
    #     for i in a end
    #     ^^^
    def for_keyword_loc
      location = @for_keyword_loc
      return location if location.is_a?(Location)
      @for_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the for_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_for_keyword_loc(repository)
      repository.enter(node_id, :for_keyword_loc)
    end

    # The location of the `in` keyword.
    #
    #     for i in a end
    #           ^^
    def in_keyword_loc
      location = @in_keyword_loc
      return location if location.is_a?(Location)
      @in_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the in_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_in_keyword_loc(repository)
      repository.enter(node_id, :in_keyword_loc)
    end

    # The location of the `do` keyword, if present.
    #
    #     for i in a do end
    #                ^^
    def do_keyword_loc
      location = @do_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @do_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the do_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_do_keyword_loc(repository)
      repository.enter(node_id, :do_keyword_loc) unless @do_keyword_loc.nil?
    end

    # The location of the `end` keyword.
    #
    #     for i in a end
    #                ^^^
    def end_keyword_loc
      location = @end_keyword_loc
      return location if location.is_a?(Location)
      @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc)
    end

    # def for_keyword: () -> String
    def for_keyword
      for_keyword_loc.slice
    end

    # def in_keyword: () -> String
    def in_keyword
      in_keyword_loc.slice
    end

    # def do_keyword: () -> String?
    def do_keyword
      do_keyword_loc&.slice
    end

    # def end_keyword: () -> String
    def end_keyword
      end_keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :for_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :for_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ForNode) &&
        (index === other.index) &&
        (collection === other.collection) &&
        (statements === other.statements) &&
        (for_keyword_loc.nil? == other.for_keyword_loc.nil?) &&
        (in_keyword_loc.nil? == other.in_keyword_loc.nil?) &&
        (do_keyword_loc.nil? == other.do_keyword_loc.nil?) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents forwarding all arguments to this method to another method.
  #
  #     def foo(...)
  #       bar(...)
  #           ^^^
  #     end
  class ForwardingArgumentsNode < Node
    # Initialize a new ForwardingArgumentsNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_forwarding_arguments_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> ForwardingArgumentsNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      ForwardingArgumentsNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :forwarding_arguments_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :forwarding_arguments_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ForwardingArgumentsNode)
    end
  end

  # Represents the use of the forwarding parameter in a method, block, or lambda declaration.
  #
  #     def foo(...)
  #             ^^^
  #     end
  class ForwardingParameterNode < Node
    # Initialize a new ForwardingParameterNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_forwarding_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> ForwardingParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      ForwardingParameterNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :forwarding_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :forwarding_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ForwardingParameterNode)
    end
  end

  # Represents the use of the `super` keyword without parentheses or arguments.
  #
  #     super
  #     ^^^^^
  class ForwardingSuperNode < Node
    # Initialize a new ForwardingSuperNode node.
    def initialize(source, node_id, location, flags, block)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @block = block
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_forwarding_super_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [block]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << block if block
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*block] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?block: BlockNode?) -> ForwardingSuperNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, block: self.block)
      ForwardingSuperNode.new(source, node_id, location, flags, block)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, block: BlockNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, block: block }
    end

    # attr_reader block: BlockNode?
    attr_reader :block

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :forwarding_super_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :forwarding_super_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ForwardingSuperNode) &&
        (block === other.block)
    end
  end

  # Represents the use of the `&&=` operator for assignment to a global variable.
  #
  #     $target &&= value
  #     ^^^^^^^^^^^^^^^^^
  class GlobalVariableAndWriteNode < Node
    # Initialize a new GlobalVariableAndWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_global_variable_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> GlobalVariableAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      GlobalVariableAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :global_variable_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :global_variable_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(GlobalVariableAndWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents assigning to a global variable using an operator that isn't `=`.
  #
  #     $target += value
  #     ^^^^^^^^^^^^^^^^
  class GlobalVariableOperatorWriteNode < Node
    # Initialize a new GlobalVariableOperatorWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @binary_operator_loc = binary_operator_loc
      @value = value
      @binary_operator = binary_operator
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_global_variable_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol) -> GlobalVariableOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator)
      GlobalVariableOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader binary_operator_loc: Location
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader binary_operator: Symbol
    attr_reader :binary_operator

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :global_variable_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :global_variable_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(GlobalVariableOperatorWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value) &&
        (binary_operator === other.binary_operator)
    end
  end

  # Represents the use of the `||=` operator for assignment to a global variable.
  #
  #     $target ||= value
  #     ^^^^^^^^^^^^^^^^^
  class GlobalVariableOrWriteNode < Node
    # Initialize a new GlobalVariableOrWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_global_variable_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> GlobalVariableOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      GlobalVariableOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :global_variable_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :global_variable_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(GlobalVariableOrWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents referencing a global variable.
  #
  #     $foo
  #     ^^^^
  class GlobalVariableReadNode < Node
    # Initialize a new GlobalVariableReadNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_global_variable_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> GlobalVariableReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      GlobalVariableReadNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # The name of the global variable, which is a `$` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifier). Alternatively, it can be one of the special global variables designated by a symbol.
    #
    #     $foo   # name `:$foo`
    #
    #     $_Test # name `:$_Test`
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :global_variable_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :global_variable_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(GlobalVariableReadNode) &&
        (name === other.name)
    end
  end

  # Represents writing to a global variable in a context that doesn't have an explicit value.
  #
  #     $foo, $bar = baz
  #     ^^^^  ^^^^
  class GlobalVariableTargetNode < Node
    # Initialize a new GlobalVariableTargetNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_global_variable_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> GlobalVariableTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      GlobalVariableTargetNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :global_variable_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :global_variable_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(GlobalVariableTargetNode) &&
        (name === other.name)
    end
  end

  # Represents writing to a global variable.
  #
  #     $foo = 1
  #     ^^^^^^^^
  class GlobalVariableWriteNode < Node
    # Initialize a new GlobalVariableWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, value, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @value = value
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_global_variable_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, value, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?value: Prism::node, ?operator_loc: Location) -> GlobalVariableWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, value: self.value, operator_loc: self.operator_loc)
      GlobalVariableWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, value: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, value: value, operator_loc: operator_loc }
    end

    # The name of the global variable, which is a `$` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifier). Alternatively, it can be one of the special global variables designated by a symbol.
    #
    #     $foo = :bar  # name `:$foo`
    #
    #     $_Test = 123 # name `:$_Test`
    attr_reader :name

    # The location of the global variable's name.
    #
    #     $foo = :bar
    #     ^^^^
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # The value to write to the global variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     $foo = :bar
    #            ^^^^
    #
    #     $-xyz = 123
    #             ^^^
    attr_reader :value

    # The location of the `=` operator.
    #
    #     $foo = :bar
    #          ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :global_variable_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :global_variable_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(GlobalVariableWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (value === other.value) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a hash literal.
  #
  #     { a => b }
  #     ^^^^^^^^^^
  class HashNode < Node
    # Initialize a new HashNode node.
    def initialize(source, node_id, location, flags, opening_loc, elements, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @elements = elements
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_hash_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*elements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*elements]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, *elements, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?elements: Array[AssocNode | AssocSplatNode], ?closing_loc: Location) -> HashNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, elements: self.elements, closing_loc: self.closing_loc)
      HashNode.new(source, node_id, location, flags, opening_loc, elements, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, elements: Array[AssocNode | AssocSplatNode], closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, elements: elements, closing_loc: closing_loc }
    end

    # The location of the opening brace.
    #
    #     { a => b }
    #     ^
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # The elements of the hash. These can be either `AssocNode`s or `AssocSplatNode`s.
    #
    #     { a: b }
    #       ^^^^
    #
    #     { **foo }
    #       ^^^^^
    attr_reader :elements

    # The location of the closing brace.
    #
    #     { a => b }
    #              ^
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :hash_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :hash_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(HashNode) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (elements.length == other.elements.length) &&
        elements.zip(other.elements).all? { |left, right| left === right } &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents a hash pattern in pattern matching.
  #
  #     foo => { a: 1, b: 2 }
  #            ^^^^^^^^^^^^^^
  #
  #     foo => { a: 1, b: 2, **c }
  #            ^^^^^^^^^^^^^^^^^^^
  class HashPatternNode < Node
    # Initialize a new HashPatternNode node.
    def initialize(source, node_id, location, flags, constant, elements, rest, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @constant = constant
      @elements = elements
      @rest = rest
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_hash_pattern_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [constant, *elements, rest]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << constant if constant
      compact.concat(elements)
      compact << rest if rest
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*constant, *elements, *rest, *opening_loc, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?constant: ConstantReadNode | ConstantPathNode | nil, ?elements: Array[AssocNode], ?rest: AssocSplatNode | NoKeywordsParameterNode | nil, ?opening_loc: Location?, ?closing_loc: Location?) -> HashPatternNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, constant: self.constant, elements: self.elements, rest: self.rest, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      HashPatternNode.new(source, node_id, location, flags, constant, elements, rest, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, constant: ConstantReadNode | ConstantPathNode | nil, elements: Array[AssocNode], rest: AssocSplatNode | NoKeywordsParameterNode | nil, opening_loc: Location?, closing_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, constant: constant, elements: elements, rest: rest, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # attr_reader constant: ConstantReadNode | ConstantPathNode | nil
    attr_reader :constant

    # attr_reader elements: Array[AssocNode]
    attr_reader :elements

    # attr_reader rest: AssocSplatNode | NoKeywordsParameterNode | nil
    attr_reader :rest

    # attr_reader opening_loc: Location?
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :hash_pattern_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :hash_pattern_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(HashPatternNode) &&
        (constant === other.constant) &&
        (elements.length == other.elements.length) &&
        elements.zip(other.elements).all? { |left, right| left === right } &&
        (rest === other.rest) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents the use of the `if` keyword, either in the block form or the modifier form, or a ternary expression.
  #
  #     bar if foo
  #     ^^^^^^^^^^
  #
  #     if foo then bar end
  #     ^^^^^^^^^^^^^^^^^^^
  #
  #     foo ? bar : baz
  #     ^^^^^^^^^^^^^^^
  class IfNode < Node
    # Initialize a new IfNode node.
    def initialize(source, node_id, location, flags, if_keyword_loc, predicate, then_keyword_loc, statements, subsequent, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @if_keyword_loc = if_keyword_loc
      @predicate = predicate
      @then_keyword_loc = then_keyword_loc
      @statements = statements
      @subsequent = subsequent
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_if_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [predicate, statements, subsequent]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << predicate
      compact << statements if statements
      compact << subsequent if subsequent
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*if_keyword_loc, predicate, *then_keyword_loc, *statements, *subsequent, *end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?if_keyword_loc: Location?, ?predicate: Prism::node, ?then_keyword_loc: Location?, ?statements: StatementsNode?, ?subsequent: ElseNode | IfNode | nil, ?end_keyword_loc: Location?) -> IfNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, if_keyword_loc: self.if_keyword_loc, predicate: self.predicate, then_keyword_loc: self.then_keyword_loc, statements: self.statements, subsequent: self.subsequent, end_keyword_loc: self.end_keyword_loc)
      IfNode.new(source, node_id, location, flags, if_keyword_loc, predicate, then_keyword_loc, statements, subsequent, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, if_keyword_loc: Location?, predicate: Prism::node, then_keyword_loc: Location?, statements: StatementsNode?, subsequent: ElseNode | IfNode | nil, end_keyword_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, if_keyword_loc: if_keyword_loc, predicate: predicate, then_keyword_loc: then_keyword_loc, statements: statements, subsequent: subsequent, end_keyword_loc: end_keyword_loc }
    end

    # The location of the `if` keyword if present.
    #
    #     bar if foo
    #         ^^
    #
    # The `if_keyword_loc` field will be `nil` when the `IfNode` represents a ternary expression.
    def if_keyword_loc
      location = @if_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @if_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the if_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_if_keyword_loc(repository)
      repository.enter(node_id, :if_keyword_loc) unless @if_keyword_loc.nil?
    end

    # The node for the condition the `IfNode` is testing.
    #
    #     if foo
    #        ^^^
    #       bar
    #     end
    #
    #     bar if foo
    #            ^^^
    #
    #     foo ? bar : baz
    #     ^^^
    attr_reader :predicate

    # The location of the `then` keyword (if present) or the `?` in a ternary expression, `nil` otherwise.
    #
    #     if foo then bar end
    #            ^^^^
    #
    #     a ? b : c
    #       ^
    def then_keyword_loc
      location = @then_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @then_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the then_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_then_keyword_loc(repository)
      repository.enter(node_id, :then_keyword_loc) unless @then_keyword_loc.nil?
    end

    # Represents the body of statements that will be executed when the predicate is evaluated as truthy. Will be `nil` when no body is provided.
    #
    #     if foo
    #       bar
    #       ^^^
    #       baz
    #       ^^^
    #     end
    attr_reader :statements

    # Represents an `ElseNode` or an `IfNode` when there is an `else` or an `elsif` in the `if` statement.
    #
    #     if foo
    #       bar
    #     elsif baz
    #     ^^^^^^^^^
    #       qux
    #       ^^^
    #     end
    #     ^^^
    #
    #     if foo then bar else baz end
    #                     ^^^^^^^^^^^^
    attr_reader :subsequent

    # The location of the `end` keyword if present, `nil` otherwise.
    #
    #     if foo
    #       bar
    #     end
    #     ^^^
    def end_keyword_loc
      location = @end_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc) unless @end_keyword_loc.nil?
    end

    # def if_keyword: () -> String?
    def if_keyword
      if_keyword_loc&.slice
    end

    # def then_keyword: () -> String?
    def then_keyword
      then_keyword_loc&.slice
    end

    # def end_keyword: () -> String?
    def end_keyword
      end_keyword_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :if_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :if_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(IfNode) &&
        (if_keyword_loc.nil? == other.if_keyword_loc.nil?) &&
        (predicate === other.predicate) &&
        (then_keyword_loc.nil? == other.then_keyword_loc.nil?) &&
        (statements === other.statements) &&
        (subsequent === other.subsequent) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents an imaginary number literal.
  #
  #     1.0i
  #     ^^^^
  class ImaginaryNode < Node
    # Initialize a new ImaginaryNode node.
    def initialize(source, node_id, location, flags, numeric)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @numeric = numeric
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_imaginary_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [numeric]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [numeric]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [numeric] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?numeric: FloatNode | IntegerNode | RationalNode) -> ImaginaryNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, numeric: self.numeric)
      ImaginaryNode.new(source, node_id, location, flags, numeric)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, numeric: FloatNode | IntegerNode | RationalNode }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, numeric: numeric }
    end

    # attr_reader numeric: FloatNode | IntegerNode | RationalNode
    attr_reader :numeric

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :imaginary_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :imaginary_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ImaginaryNode) &&
        (numeric === other.numeric)
    end
  end

  # Represents a node that is implicitly being added to the tree but doesn't correspond directly to a node in the source.
  #
  #     { foo: }
  #       ^^^^
  #
  #     { Foo: }
  #       ^^^^
  #
  #     foo in { bar: }
  #              ^^^^
  class ImplicitNode < Node
    # Initialize a new ImplicitNode node.
    def initialize(source, node_id, location, flags, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_implicit_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?value: LocalVariableReadNode | CallNode | ConstantReadNode | LocalVariableTargetNode) -> ImplicitNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, value: self.value)
      ImplicitNode.new(source, node_id, location, flags, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, value: LocalVariableReadNode | CallNode | ConstantReadNode | LocalVariableTargetNode }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, value: value }
    end

    # attr_reader value: LocalVariableReadNode | CallNode | ConstantReadNode | LocalVariableTargetNode
    attr_reader :value

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :implicit_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :implicit_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ImplicitNode) &&
        (value === other.value)
    end
  end

  # Represents using a trailing comma to indicate an implicit rest parameter.
  #
  #     foo { |bar,| }
  #               ^
  #
  #     foo in [bar,]
  #                ^
  #
  #     for foo, in bar do end
  #            ^
  #
  #     foo, = bar
  #        ^
  class ImplicitRestNode < Node
    # Initialize a new ImplicitRestNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_implicit_rest_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> ImplicitRestNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      ImplicitRestNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :implicit_rest_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :implicit_rest_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ImplicitRestNode)
    end
  end

  # Represents the use of the `in` keyword in a case statement.
  #
  #     case a; in b then c end
  #             ^^^^^^^^^^^
  class InNode < Node
    # Initialize a new InNode node.
    def initialize(source, node_id, location, flags, pattern, statements, in_loc, then_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @pattern = pattern
      @statements = statements
      @in_loc = in_loc
      @then_loc = then_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_in_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [pattern, statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << pattern
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [pattern, *statements, in_loc, *then_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?pattern: Prism::node, ?statements: StatementsNode?, ?in_loc: Location, ?then_loc: Location?) -> InNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, pattern: self.pattern, statements: self.statements, in_loc: self.in_loc, then_loc: self.then_loc)
      InNode.new(source, node_id, location, flags, pattern, statements, in_loc, then_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, pattern: Prism::node, statements: StatementsNode?, in_loc: Location, then_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, pattern: pattern, statements: statements, in_loc: in_loc, then_loc: then_loc }
    end

    # attr_reader pattern: Prism::node
    attr_reader :pattern

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # attr_reader in_loc: Location
    def in_loc
      location = @in_loc
      return location if location.is_a?(Location)
      @in_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the in_loc location using the given saved source so that
    # it can be retrieved later.
    def save_in_loc(repository)
      repository.enter(node_id, :in_loc)
    end

    # attr_reader then_loc: Location?
    def then_loc
      location = @then_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @then_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the then_loc location using the given saved source so that
    # it can be retrieved later.
    def save_then_loc(repository)
      repository.enter(node_id, :then_loc) unless @then_loc.nil?
    end

    # def in: () -> String
    def in
      in_loc.slice
    end

    # def then: () -> String?
    def then
      then_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :in_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :in_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InNode) &&
        (pattern === other.pattern) &&
        (statements === other.statements) &&
        (in_loc.nil? == other.in_loc.nil?) &&
        (then_loc.nil? == other.then_loc.nil?)
    end
  end

  # Represents the use of the `&&=` operator on a call to the `[]` method.
  #
  #     foo.bar[baz] &&= value
  #     ^^^^^^^^^^^^^^^^^^^^^^
  class IndexAndWriteNode < Node
    # Initialize a new IndexAndWriteNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @opening_loc = opening_loc
      @arguments = arguments
      @closing_loc = closing_loc
      @block = block
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_index_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, arguments, block, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << arguments if arguments
      compact << block if block
      compact << value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*receiver, *call_operator_loc, opening_loc, *arguments, closing_loc, *block, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: BlockArgumentNode?, ?operator_loc: Location, ?value: Prism::node) -> IndexAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block, operator_loc: self.operator_loc, value: self.value)
      IndexAndWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: BlockArgumentNode?, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block, operator_loc: operator_loc, value: value }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # attr_reader receiver: Prism::node?
    attr_reader :receiver

    # attr_reader call_operator_loc: Location?
    def call_operator_loc
      location = @call_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc) unless @call_operator_loc.nil?
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader block: BlockArgumentNode?
    attr_reader :block

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def call_operator: () -> String?
    def call_operator
      call_operator_loc&.slice
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :index_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :index_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(IndexAndWriteNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (arguments === other.arguments) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (block === other.block) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents the use of an assignment operator on a call to `[]`.
  #
  #     foo.bar[baz] += value
  #     ^^^^^^^^^^^^^^^^^^^^^
  class IndexOperatorWriteNode < Node
    # Initialize a new IndexOperatorWriteNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, binary_operator, binary_operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @opening_loc = opening_loc
      @arguments = arguments
      @closing_loc = closing_loc
      @block = block
      @binary_operator = binary_operator
      @binary_operator_loc = binary_operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_index_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, arguments, block, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << arguments if arguments
      compact << block if block
      compact << value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*receiver, *call_operator_loc, opening_loc, *arguments, closing_loc, *block, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: BlockArgumentNode?, ?binary_operator: Symbol, ?binary_operator_loc: Location, ?value: Prism::node) -> IndexOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block, binary_operator: self.binary_operator, binary_operator_loc: self.binary_operator_loc, value: self.value)
      IndexOperatorWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, binary_operator, binary_operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: BlockArgumentNode?, binary_operator: Symbol, binary_operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block, binary_operator: binary_operator, binary_operator_loc: binary_operator_loc, value: value }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # attr_reader receiver: Prism::node?
    attr_reader :receiver

    # attr_reader call_operator_loc: Location?
    def call_operator_loc
      location = @call_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc) unless @call_operator_loc.nil?
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader block: BlockArgumentNode?
    attr_reader :block

    # attr_reader binary_operator: Symbol
    attr_reader :binary_operator

    # attr_reader binary_operator_loc: Location
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def call_operator: () -> String?
    def call_operator
      call_operator_loc&.slice
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :index_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :index_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(IndexOperatorWriteNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (arguments === other.arguments) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (block === other.block) &&
        (binary_operator === other.binary_operator) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents the use of the `||=` operator on a call to `[]`.
  #
  #     foo.bar[baz] ||= value
  #     ^^^^^^^^^^^^^^^^^^^^^^
  class IndexOrWriteNode < Node
    # Initialize a new IndexOrWriteNode node.
    def initialize(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @call_operator_loc = call_operator_loc
      @opening_loc = opening_loc
      @arguments = arguments
      @closing_loc = closing_loc
      @block = block
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_index_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, arguments, block, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver if receiver
      compact << arguments if arguments
      compact << block if block
      compact << value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*receiver, *call_operator_loc, opening_loc, *arguments, closing_loc, *block, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: BlockArgumentNode?, ?operator_loc: Location, ?value: Prism::node) -> IndexOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block, operator_loc: self.operator_loc, value: self.value)
      IndexOrWriteNode.new(source, node_id, location, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: BlockArgumentNode?, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, call_operator_loc: call_operator_loc, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block, operator_loc: operator_loc, value: value }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # attr_reader receiver: Prism::node?
    attr_reader :receiver

    # attr_reader call_operator_loc: Location?
    def call_operator_loc
      location = @call_operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @call_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the call_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_call_operator_loc(repository)
      repository.enter(node_id, :call_operator_loc) unless @call_operator_loc.nil?
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader block: BlockArgumentNode?
    attr_reader :block

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def call_operator: () -> String?
    def call_operator
      call_operator_loc&.slice
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :index_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :index_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(IndexOrWriteNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (call_operator_loc.nil? == other.call_operator_loc.nil?) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (arguments === other.arguments) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (block === other.block) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents assigning to an index.
  #
  #     foo[bar], = 1
  #     ^^^^^^^^
  #
  #     begin
  #     rescue => foo[bar]
  #               ^^^^^^^^
  #     end
  #
  #     for foo[bar] in baz do end
  #         ^^^^^^^^
  class IndexTargetNode < Node
    # Initialize a new IndexTargetNode node.
    def initialize(source, node_id, location, flags, receiver, opening_loc, arguments, closing_loc, block)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @receiver = receiver
      @opening_loc = opening_loc
      @arguments = arguments
      @closing_loc = closing_loc
      @block = block
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_index_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [receiver, arguments, block]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << receiver
      compact << arguments if arguments
      compact << block if block
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [receiver, opening_loc, *arguments, closing_loc, *block] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: BlockArgumentNode?) -> IndexTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block)
      IndexTargetNode.new(source, node_id, location, flags, receiver, opening_loc, arguments, closing_loc, block)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: BlockArgumentNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, receiver: receiver, opening_loc: opening_loc, arguments: arguments, closing_loc: closing_loc, block: block }
    end

    # def safe_navigation?: () -> bool
    def safe_navigation?
      flags.anybits?(CallNodeFlags::SAFE_NAVIGATION)
    end

    # def variable_call?: () -> bool
    def variable_call?
      flags.anybits?(CallNodeFlags::VARIABLE_CALL)
    end

    # def attribute_write?: () -> bool
    def attribute_write?
      flags.anybits?(CallNodeFlags::ATTRIBUTE_WRITE)
    end

    # def ignore_visibility?: () -> bool
    def ignore_visibility?
      flags.anybits?(CallNodeFlags::IGNORE_VISIBILITY)
    end

    # attr_reader receiver: Prism::node
    attr_reader :receiver

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader block: BlockArgumentNode?
    attr_reader :block

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :index_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :index_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(IndexTargetNode) &&
        (flags === other.flags) &&
        (receiver === other.receiver) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (arguments === other.arguments) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (block === other.block)
    end
  end

  # Represents the use of the `&&=` operator for assignment to an instance variable.
  #
  #     @target &&= value
  #     ^^^^^^^^^^^^^^^^^
  class InstanceVariableAndWriteNode < Node
    # Initialize a new InstanceVariableAndWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_instance_variable_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> InstanceVariableAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      InstanceVariableAndWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :instance_variable_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :instance_variable_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InstanceVariableAndWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents assigning to an instance variable using an operator that isn't `=`.
  #
  #     @target += value
  #     ^^^^^^^^^^^^^^^^
  class InstanceVariableOperatorWriteNode < Node
    # Initialize a new InstanceVariableOperatorWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @binary_operator_loc = binary_operator_loc
      @value = value
      @binary_operator = binary_operator
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_instance_variable_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol) -> InstanceVariableOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, binary_operator: self.binary_operator)
      InstanceVariableOperatorWriteNode.new(source, node_id, location, flags, name, name_loc, binary_operator_loc, value, binary_operator)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, binary_operator: binary_operator }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader binary_operator_loc: Location
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader binary_operator: Symbol
    attr_reader :binary_operator

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :instance_variable_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :instance_variable_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InstanceVariableOperatorWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value) &&
        (binary_operator === other.binary_operator)
    end
  end

  # Represents the use of the `||=` operator for assignment to an instance variable.
  #
  #     @target ||= value
  #     ^^^^^^^^^^^^^^^^^
  class InstanceVariableOrWriteNode < Node
    # Initialize a new InstanceVariableOrWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_instance_variable_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> InstanceVariableOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      InstanceVariableOrWriteNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :instance_variable_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :instance_variable_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InstanceVariableOrWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents referencing an instance variable.
  #
  #     @foo
  #     ^^^^
  class InstanceVariableReadNode < Node
    # Initialize a new InstanceVariableReadNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_instance_variable_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> InstanceVariableReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      InstanceVariableReadNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # The name of the instance variable, which is a `@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
    #
    #     @x     # name `:@x`
    #
    #     @_test # name `:@_test`
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :instance_variable_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :instance_variable_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InstanceVariableReadNode) &&
        (name === other.name)
    end
  end

  # Represents writing to an instance variable in a context that doesn't have an explicit value.
  #
  #     @foo, @bar = baz
  #     ^^^^  ^^^^
  class InstanceVariableTargetNode < Node
    # Initialize a new InstanceVariableTargetNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_instance_variable_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> InstanceVariableTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      InstanceVariableTargetNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :instance_variable_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :instance_variable_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InstanceVariableTargetNode) &&
        (name === other.name)
    end
  end

  # Represents writing to an instance variable.
  #
  #     @foo = 1
  #     ^^^^^^^^
  class InstanceVariableWriteNode < Node
    # Initialize a new InstanceVariableWriteNode node.
    def initialize(source, node_id, location, flags, name, name_loc, value, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @value = value
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_instance_variable_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, value, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?value: Prism::node, ?operator_loc: Location) -> InstanceVariableWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, value: self.value, operator_loc: self.operator_loc)
      InstanceVariableWriteNode.new(source, node_id, location, flags, name, name_loc, value, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, value: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, value: value, operator_loc: operator_loc }
    end

    # The name of the instance variable, which is a `@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
    #
    #     @x = :y       # name `:@x`
    #
    #     @_foo = "bar" # name `@_foo`
    attr_reader :name

    # The location of the variable name.
    #
    #     @_x = 1
    #     ^^^
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # The value to write to the instance variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     @foo = :bar
    #            ^^^^
    #
    #     @_x = 1234
    #           ^^^^
    attr_reader :value

    # The location of the `=` operator.
    #
    #     @x = y
    #        ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :instance_variable_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :instance_variable_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InstanceVariableWriteNode) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (value === other.value) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents an integer number literal.
  #
  #     1
  #     ^
  class IntegerNode < Node
    # Initialize a new IntegerNode node.
    def initialize(source, node_id, location, flags, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_integer_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?value: Integer) -> IntegerNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, value: self.value)
      IntegerNode.new(source, node_id, location, flags, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, value: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, value: value }
    end

    # def binary?: () -> bool
    def binary?
      flags.anybits?(IntegerBaseFlags::BINARY)
    end

    # def decimal?: () -> bool
    def decimal?
      flags.anybits?(IntegerBaseFlags::DECIMAL)
    end

    # def octal?: () -> bool
    def octal?
      flags.anybits?(IntegerBaseFlags::OCTAL)
    end

    # def hexadecimal?: () -> bool
    def hexadecimal?
      flags.anybits?(IntegerBaseFlags::HEXADECIMAL)
    end

    # The value of the integer literal as a number.
    attr_reader :value

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :integer_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :integer_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(IntegerNode) &&
        (flags === other.flags) &&
        (value === other.value)
    end
  end

  # Represents a regular expression literal that contains interpolation that is being used in the predicate of a conditional to implicitly match against the last line read by an IO object.
  #
  #     if /foo #{bar} baz/ then end
  #        ^^^^^^^^^^^^^^^^
  class InterpolatedMatchLastLineNode < Node
    # Initialize a new InterpolatedMatchLastLineNode node.
    def initialize(source, node_id, location, flags, opening_loc, parts, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @parts = parts
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_interpolated_match_last_line_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*parts]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*parts]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, *parts, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], ?closing_loc: Location) -> InterpolatedMatchLastLineNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, parts: self.parts, closing_loc: self.closing_loc)
      InterpolatedMatchLastLineNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, parts: parts, closing_loc: closing_loc }
    end

    # def ignore_case?: () -> bool
    def ignore_case?
      flags.anybits?(RegularExpressionFlags::IGNORE_CASE)
    end

    # def extended?: () -> bool
    def extended?
      flags.anybits?(RegularExpressionFlags::EXTENDED)
    end

    # def multi_line?: () -> bool
    def multi_line?
      flags.anybits?(RegularExpressionFlags::MULTI_LINE)
    end

    # def once?: () -> bool
    def once?
      flags.anybits?(RegularExpressionFlags::ONCE)
    end

    # def euc_jp?: () -> bool
    def euc_jp?
      flags.anybits?(RegularExpressionFlags::EUC_JP)
    end

    # def ascii_8bit?: () -> bool
    def ascii_8bit?
      flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
    end

    # def windows_31j?: () -> bool
    def windows_31j?
      flags.anybits?(RegularExpressionFlags::WINDOWS_31J)
    end

    # def utf_8?: () -> bool
    def utf_8?
      flags.anybits?(RegularExpressionFlags::UTF_8)
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_BINARY_ENCODING)
    end

    # def forced_us_ascii_encoding?: () -> bool
    def forced_us_ascii_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_US_ASCII_ENCODING)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode]
    attr_reader :parts

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :interpolated_match_last_line_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :interpolated_match_last_line_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InterpolatedMatchLastLineNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (parts.length == other.parts.length) &&
        parts.zip(other.parts).all? { |left, right| left === right } &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents a regular expression literal that contains interpolation.
  #
  #     /foo #{bar} baz/
  #     ^^^^^^^^^^^^^^^^
  class InterpolatedRegularExpressionNode < Node
    # Initialize a new InterpolatedRegularExpressionNode node.
    def initialize(source, node_id, location, flags, opening_loc, parts, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @parts = parts
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_interpolated_regular_expression_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*parts]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*parts]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, *parts, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], ?closing_loc: Location) -> InterpolatedRegularExpressionNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, parts: self.parts, closing_loc: self.closing_loc)
      InterpolatedRegularExpressionNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, parts: parts, closing_loc: closing_loc }
    end

    # def ignore_case?: () -> bool
    def ignore_case?
      flags.anybits?(RegularExpressionFlags::IGNORE_CASE)
    end

    # def extended?: () -> bool
    def extended?
      flags.anybits?(RegularExpressionFlags::EXTENDED)
    end

    # def multi_line?: () -> bool
    def multi_line?
      flags.anybits?(RegularExpressionFlags::MULTI_LINE)
    end

    # def once?: () -> bool
    def once?
      flags.anybits?(RegularExpressionFlags::ONCE)
    end

    # def euc_jp?: () -> bool
    def euc_jp?
      flags.anybits?(RegularExpressionFlags::EUC_JP)
    end

    # def ascii_8bit?: () -> bool
    def ascii_8bit?
      flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
    end

    # def windows_31j?: () -> bool
    def windows_31j?
      flags.anybits?(RegularExpressionFlags::WINDOWS_31J)
    end

    # def utf_8?: () -> bool
    def utf_8?
      flags.anybits?(RegularExpressionFlags::UTF_8)
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_BINARY_ENCODING)
    end

    # def forced_us_ascii_encoding?: () -> bool
    def forced_us_ascii_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_US_ASCII_ENCODING)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode]
    attr_reader :parts

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :interpolated_regular_expression_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :interpolated_regular_expression_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InterpolatedRegularExpressionNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (parts.length == other.parts.length) &&
        parts.zip(other.parts).all? { |left, right| left === right } &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents a string literal that contains interpolation.
  #
  #     "foo #{bar} baz"
  #     ^^^^^^^^^^^^^^^^
  class InterpolatedStringNode < Node
    # Initialize a new InterpolatedStringNode node.
    def initialize(source, node_id, location, flags, opening_loc, parts, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @parts = parts
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_interpolated_string_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*parts]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*parts]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*opening_loc, *parts, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode], ?closing_loc: Location?) -> InterpolatedStringNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, parts: self.parts, closing_loc: self.closing_loc)
      InterpolatedStringNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location?, parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode], closing_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, parts: parts, closing_loc: closing_loc }
    end

    # def frozen?: () -> bool
    def frozen?
      flags.anybits?(InterpolatedStringNodeFlags::FROZEN)
    end

    # def mutable?: () -> bool
    def mutable?
      flags.anybits?(InterpolatedStringNodeFlags::MUTABLE)
    end

    # attr_reader opening_loc: Location?
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode]
    attr_reader :parts

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :interpolated_string_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :interpolated_string_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InterpolatedStringNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (parts.length == other.parts.length) &&
        parts.zip(other.parts).all? { |left, right| left === right } &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents a symbol literal that contains interpolation.
  #
  #     :"foo #{bar} baz"
  #     ^^^^^^^^^^^^^^^^^
  class InterpolatedSymbolNode < Node
    # Initialize a new InterpolatedSymbolNode node.
    def initialize(source, node_id, location, flags, opening_loc, parts, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @parts = parts
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_interpolated_symbol_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*parts]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*parts]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*opening_loc, *parts, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], ?closing_loc: Location?) -> InterpolatedSymbolNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, parts: self.parts, closing_loc: self.closing_loc)
      InterpolatedSymbolNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location?, parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], closing_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, parts: parts, closing_loc: closing_loc }
    end

    # attr_reader opening_loc: Location?
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode]
    attr_reader :parts

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :interpolated_symbol_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :interpolated_symbol_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InterpolatedSymbolNode) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (parts.length == other.parts.length) &&
        parts.zip(other.parts).all? { |left, right| left === right } &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents an xstring literal that contains interpolation.
  #
  #     `foo #{bar} baz`
  #     ^^^^^^^^^^^^^^^^
  class InterpolatedXStringNode < Node
    # Initialize a new InterpolatedXStringNode node.
    def initialize(source, node_id, location, flags, opening_loc, parts, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @parts = parts
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_interpolated_x_string_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*parts]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*parts]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, *parts, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], ?closing_loc: Location) -> InterpolatedXStringNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, parts: self.parts, closing_loc: self.closing_loc)
      InterpolatedXStringNode.new(source, node_id, location, flags, opening_loc, parts, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, parts: parts, closing_loc: closing_loc }
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode]
    attr_reader :parts

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :interpolated_x_string_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :interpolated_x_string_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(InterpolatedXStringNode) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (parts.length == other.parts.length) &&
        parts.zip(other.parts).all? { |left, right| left === right } &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents reading from the implicit `it` local variable.
  #
  #     -> { it }
  #          ^^
  class ItLocalVariableReadNode < Node
    # Initialize a new ItLocalVariableReadNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_it_local_variable_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> ItLocalVariableReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      ItLocalVariableReadNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :it_local_variable_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :it_local_variable_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ItLocalVariableReadNode)
    end
  end

  # Represents an implicit set of parameters through the use of the `it` keyword within a block or lambda.
  #
  #     -> { it + it }
  #     ^^^^^^^^^^^^^^
  class ItParametersNode < Node
    # Initialize a new ItParametersNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_it_parameters_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> ItParametersNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      ItParametersNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :it_parameters_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :it_parameters_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ItParametersNode)
    end
  end

  # Represents a hash literal without opening and closing braces.
  #
  #     foo(a: b)
  #         ^^^^
  class KeywordHashNode < Node
    # Initialize a new KeywordHashNode node.
    def initialize(source, node_id, location, flags, elements)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @elements = elements
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_keyword_hash_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*elements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*elements]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*elements] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?elements: Array[AssocNode | AssocSplatNode]) -> KeywordHashNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, elements: self.elements)
      KeywordHashNode.new(source, node_id, location, flags, elements)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, elements: Array[AssocNode | AssocSplatNode] }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, elements: elements }
    end

    # def symbol_keys?: () -> bool
    def symbol_keys?
      flags.anybits?(KeywordHashNodeFlags::SYMBOL_KEYS)
    end

    # attr_reader elements: Array[AssocNode | AssocSplatNode]
    attr_reader :elements

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :keyword_hash_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :keyword_hash_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(KeywordHashNode) &&
        (flags === other.flags) &&
        (elements.length == other.elements.length) &&
        elements.zip(other.elements).all? { |left, right| left === right }
    end
  end

  # Represents a keyword rest parameter to a method, block, or lambda definition.
  #
  #     def a(**b)
  #           ^^^
  #     end
  class KeywordRestParameterNode < Node
    # Initialize a new KeywordRestParameterNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_keyword_rest_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*name_loc, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol?, ?name_loc: Location?, ?operator_loc: Location) -> KeywordRestParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc)
      KeywordRestParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol?, name_loc: Location?, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # attr_reader name: Symbol?
    attr_reader :name

    # attr_reader name_loc: Location?
    def name_loc
      location = @name_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc) unless @name_loc.nil?
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :keyword_rest_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :keyword_rest_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(KeywordRestParameterNode) &&
        (flags === other.flags) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents using a lambda literal (not the lambda method call).
  #
  #     ->(value) { value * 2 }
  #     ^^^^^^^^^^^^^^^^^^^^^^^
  class LambdaNode < Node
    # Initialize a new LambdaNode node.
    def initialize(source, node_id, location, flags, locals, operator_loc, opening_loc, closing_loc, parameters, body)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @locals = locals
      @operator_loc = operator_loc
      @opening_loc = opening_loc
      @closing_loc = closing_loc
      @parameters = parameters
      @body = body
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_lambda_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [parameters, body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << parameters if parameters
      compact << body if body
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [operator_loc, opening_loc, closing_loc, *parameters, *body] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?locals: Array[Symbol], ?operator_loc: Location, ?opening_loc: Location, ?closing_loc: Location, ?parameters: BlockParametersNode | NumberedParametersNode | ItParametersNode | nil, ?body: StatementsNode | BeginNode | nil) -> LambdaNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, locals: self.locals, operator_loc: self.operator_loc, opening_loc: self.opening_loc, closing_loc: self.closing_loc, parameters: self.parameters, body: self.body)
      LambdaNode.new(source, node_id, location, flags, locals, operator_loc, opening_loc, closing_loc, parameters, body)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, locals: Array[Symbol], operator_loc: Location, opening_loc: Location, closing_loc: Location, parameters: BlockParametersNode | NumberedParametersNode | ItParametersNode | nil, body: StatementsNode | BeginNode | nil }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, locals: locals, operator_loc: operator_loc, opening_loc: opening_loc, closing_loc: closing_loc, parameters: parameters, body: body }
    end

    # attr_reader locals: Array[Symbol]
    attr_reader :locals

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader parameters: BlockParametersNode | NumberedParametersNode | ItParametersNode | nil
    attr_reader :parameters

    # attr_reader body: StatementsNode | BeginNode | nil
    attr_reader :body

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :lambda_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :lambda_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(LambdaNode) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (parameters === other.parameters) &&
        (body === other.body)
    end
  end

  # Represents the use of the `&&=` operator for assignment to a local variable.
  #
  #     target &&= value
  #     ^^^^^^^^^^^^^^^^
  class LocalVariableAndWriteNode < Node
    # Initialize a new LocalVariableAndWriteNode node.
    def initialize(source, node_id, location, flags, name_loc, operator_loc, value, name, depth)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
      @name = name
      @depth = depth
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_local_variable_and_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node, ?name: Symbol, ?depth: Integer) -> LocalVariableAndWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value, name: self.name, depth: self.depth)
      LocalVariableAndWriteNode.new(source, node_id, location, flags, name_loc, operator_loc, value, name, depth)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name_loc: Location, operator_loc: Location, value: Prism::node, name: Symbol, depth: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name_loc: name_loc, operator_loc: operator_loc, value: value, name: name, depth: depth }
    end

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader depth: Integer
    attr_reader :depth

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :local_variable_and_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :local_variable_and_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(LocalVariableAndWriteNode) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value) &&
        (name === other.name) &&
        (depth === other.depth)
    end
  end

  # Represents assigning to a local variable using an operator that isn't `=`.
  #
  #     target += value
  #     ^^^^^^^^^^^^^^^
  class LocalVariableOperatorWriteNode < Node
    # Initialize a new LocalVariableOperatorWriteNode node.
    def initialize(source, node_id, location, flags, name_loc, binary_operator_loc, value, name, binary_operator, depth)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name_loc = name_loc
      @binary_operator_loc = binary_operator_loc
      @value = value
      @name = name
      @binary_operator = binary_operator
      @depth = depth
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_local_variable_operator_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, binary_operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?name: Symbol, ?binary_operator: Symbol, ?depth: Integer) -> LocalVariableOperatorWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name_loc: self.name_loc, binary_operator_loc: self.binary_operator_loc, value: self.value, name: self.name, binary_operator: self.binary_operator, depth: self.depth)
      LocalVariableOperatorWriteNode.new(source, node_id, location, flags, name_loc, binary_operator_loc, value, name, binary_operator, depth)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name_loc: Location, binary_operator_loc: Location, value: Prism::node, name: Symbol, binary_operator: Symbol, depth: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name_loc: name_loc, binary_operator_loc: binary_operator_loc, value: value, name: name, binary_operator: binary_operator, depth: depth }
    end

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader binary_operator_loc: Location
    def binary_operator_loc
      location = @binary_operator_loc
      return location if location.is_a?(Location)
      @binary_operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the binary_operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_binary_operator_loc(repository)
      repository.enter(node_id, :binary_operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader binary_operator: Symbol
    attr_reader :binary_operator

    # attr_reader depth: Integer
    attr_reader :depth

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :local_variable_operator_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :local_variable_operator_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(LocalVariableOperatorWriteNode) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (binary_operator_loc.nil? == other.binary_operator_loc.nil?) &&
        (value === other.value) &&
        (name === other.name) &&
        (binary_operator === other.binary_operator) &&
        (depth === other.depth)
    end
  end

  # Represents the use of the `||=` operator for assignment to a local variable.
  #
  #     target ||= value
  #     ^^^^^^^^^^^^^^^^
  class LocalVariableOrWriteNode < Node
    # Initialize a new LocalVariableOrWriteNode node.
    def initialize(source, node_id, location, flags, name_loc, operator_loc, value, name, depth)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
      @name = name
      @depth = depth
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_local_variable_or_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node, ?name: Symbol, ?depth: Integer) -> LocalVariableOrWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value, name: self.name, depth: self.depth)
      LocalVariableOrWriteNode.new(source, node_id, location, flags, name_loc, operator_loc, value, name, depth)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name_loc: Location, operator_loc: Location, value: Prism::node, name: Symbol, depth: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name_loc: name_loc, operator_loc: operator_loc, value: value, name: name, depth: depth }
    end

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader depth: Integer
    attr_reader :depth

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :local_variable_or_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :local_variable_or_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(LocalVariableOrWriteNode) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value) &&
        (name === other.name) &&
        (depth === other.depth)
    end
  end

  # Represents reading a local variable. Note that this requires that a local variable of the same name has already been written to in the same scope, otherwise it is parsed as a method call.
  #
  #     foo
  #     ^^^
  class LocalVariableReadNode < Node
    # Initialize a new LocalVariableReadNode node.
    def initialize(source, node_id, location, flags, name, depth)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @depth = depth
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_local_variable_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?depth: Integer) -> LocalVariableReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, depth: self.depth)
      LocalVariableReadNode.new(source, node_id, location, flags, name, depth)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, depth: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, depth: depth }
    end

    # The name of the local variable, which is an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
    #
    #     x      # name `:x`
    #
    #     _Test  # name `:_Test`
    #
    # Note that this can also be an underscore followed by a number for the default block parameters.
    #
    #     _1     # name `:_1`
    attr_reader :name

    # The number of visible scopes that should be searched to find the origin of this local variable.
    #
    #     foo = 1; foo # depth 0
    #
    #     bar = 2; tap { bar } # depth 1
    #
    # The specific rules for calculating the depth may differ from individual Ruby implementations, as they are not specified by the language. For more information, see [the Prism documentation](https://github.com/ruby/prism/blob/main/docs/local_variable_depth.md).
    attr_reader :depth

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :local_variable_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :local_variable_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(LocalVariableReadNode) &&
        (name === other.name) &&
        (depth === other.depth)
    end
  end

  # Represents writing to a local variable in a context that doesn't have an explicit value.
  #
  #     foo, bar = baz
  #     ^^^  ^^^
  class LocalVariableTargetNode < Node
    # Initialize a new LocalVariableTargetNode node.
    def initialize(source, node_id, location, flags, name, depth)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @depth = depth
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_local_variable_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?depth: Integer) -> LocalVariableTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, depth: self.depth)
      LocalVariableTargetNode.new(source, node_id, location, flags, name, depth)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, depth: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, depth: depth }
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader depth: Integer
    attr_reader :depth

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :local_variable_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :local_variable_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(LocalVariableTargetNode) &&
        (name === other.name) &&
        (depth === other.depth)
    end
  end

  # Represents writing to a local variable.
  #
  #     foo = 1
  #     ^^^^^^^
  class LocalVariableWriteNode < Node
    # Initialize a new LocalVariableWriteNode node.
    def initialize(source, node_id, location, flags, name, depth, name_loc, value, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @depth = depth
      @name_loc = name_loc
      @value = value
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_local_variable_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, value, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?depth: Integer, ?name_loc: Location, ?value: Prism::node, ?operator_loc: Location) -> LocalVariableWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, depth: self.depth, name_loc: self.name_loc, value: self.value, operator_loc: self.operator_loc)
      LocalVariableWriteNode.new(source, node_id, location, flags, name, depth, name_loc, value, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, depth: Integer, name_loc: Location, value: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, depth: depth, name_loc: name_loc, value: value, operator_loc: operator_loc }
    end

    # The name of the local variable, which is an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
    #
    #     foo = :bar # name `:foo`
    #
    #     abc = 123  # name `:abc`
    attr_reader :name

    # The number of semantic scopes we have to traverse to find the declaration of this variable.
    #
    #     foo = 1         # depth 0
    #
    #     tap { foo = 1 } # depth 1
    #
    # The specific rules for calculating the depth may differ from individual Ruby implementations, as they are not specified by the language. For more information, see [the Prism documentation](https://github.com/ruby/prism/blob/main/docs/local_variable_depth.md).
    attr_reader :depth

    # The location of the variable name.
    #
    #     foo = :bar
    #     ^^^
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # The value to write to the local variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     foo = :bar
    #           ^^^^
    #
    #     abc = 1234
    #           ^^^^
    #
    # Note that since the name of a local variable is known before the value is parsed, it is valid for a local variable to appear within the value of its own write.
    #
    #     foo = foo
    attr_reader :value

    # The location of the `=` operator.
    #
    #     x = :y
    #       ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :local_variable_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :local_variable_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(LocalVariableWriteNode) &&
        (name === other.name) &&
        (depth === other.depth) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (value === other.value) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a regular expression literal used in the predicate of a conditional to implicitly match against the last line read by an IO object.
  #
  #     if /foo/i then end
  #        ^^^^^^
  class MatchLastLineNode < Node
    # Initialize a new MatchLastLineNode node.
    def initialize(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @content_loc = content_loc
      @closing_loc = closing_loc
      @unescaped = unescaped
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_match_last_line_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, content_loc, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?content_loc: Location, ?closing_loc: Location, ?unescaped: String) -> MatchLastLineNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, content_loc: self.content_loc, closing_loc: self.closing_loc, unescaped: self.unescaped)
      MatchLastLineNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, content_loc: content_loc, closing_loc: closing_loc, unescaped: unescaped }
    end

    # def ignore_case?: () -> bool
    def ignore_case?
      flags.anybits?(RegularExpressionFlags::IGNORE_CASE)
    end

    # def extended?: () -> bool
    def extended?
      flags.anybits?(RegularExpressionFlags::EXTENDED)
    end

    # def multi_line?: () -> bool
    def multi_line?
      flags.anybits?(RegularExpressionFlags::MULTI_LINE)
    end

    # def once?: () -> bool
    def once?
      flags.anybits?(RegularExpressionFlags::ONCE)
    end

    # def euc_jp?: () -> bool
    def euc_jp?
      flags.anybits?(RegularExpressionFlags::EUC_JP)
    end

    # def ascii_8bit?: () -> bool
    def ascii_8bit?
      flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
    end

    # def windows_31j?: () -> bool
    def windows_31j?
      flags.anybits?(RegularExpressionFlags::WINDOWS_31J)
    end

    # def utf_8?: () -> bool
    def utf_8?
      flags.anybits?(RegularExpressionFlags::UTF_8)
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_BINARY_ENCODING)
    end

    # def forced_us_ascii_encoding?: () -> bool
    def forced_us_ascii_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_US_ASCII_ENCODING)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader content_loc: Location
    def content_loc
      location = @content_loc
      return location if location.is_a?(Location)
      @content_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the content_loc location using the given saved source so that
    # it can be retrieved later.
    def save_content_loc(repository)
      repository.enter(node_id, :content_loc)
    end

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader unescaped: String
    attr_reader :unescaped

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def content: () -> String
    def content
      content_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :match_last_line_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :match_last_line_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(MatchLastLineNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (content_loc.nil? == other.content_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (unescaped === other.unescaped)
    end
  end

  # Represents the use of the modifier `in` operator.
  #
  #     foo in bar
  #     ^^^^^^^^^^
  class MatchPredicateNode < Node
    # Initialize a new MatchPredicateNode node.
    def initialize(source, node_id, location, flags, value, pattern, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @value = value
      @pattern = pattern
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_match_predicate_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value, pattern]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value, pattern]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [value, pattern, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?value: Prism::node, ?pattern: Prism::node, ?operator_loc: Location) -> MatchPredicateNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, value: self.value, pattern: self.pattern, operator_loc: self.operator_loc)
      MatchPredicateNode.new(source, node_id, location, flags, value, pattern, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, value: Prism::node, pattern: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, value: value, pattern: pattern, operator_loc: operator_loc }
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader pattern: Prism::node
    attr_reader :pattern

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :match_predicate_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :match_predicate_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(MatchPredicateNode) &&
        (value === other.value) &&
        (pattern === other.pattern) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents the use of the `=>` operator.
  #
  #     foo => bar
  #     ^^^^^^^^^^
  class MatchRequiredNode < Node
    # Initialize a new MatchRequiredNode node.
    def initialize(source, node_id, location, flags, value, pattern, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @value = value
      @pattern = pattern
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_match_required_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value, pattern]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value, pattern]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [value, pattern, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?value: Prism::node, ?pattern: Prism::node, ?operator_loc: Location) -> MatchRequiredNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, value: self.value, pattern: self.pattern, operator_loc: self.operator_loc)
      MatchRequiredNode.new(source, node_id, location, flags, value, pattern, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, value: Prism::node, pattern: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, value: value, pattern: pattern, operator_loc: operator_loc }
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # attr_reader pattern: Prism::node
    attr_reader :pattern

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :match_required_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :match_required_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(MatchRequiredNode) &&
        (value === other.value) &&
        (pattern === other.pattern) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents writing local variables using a regular expression match with named capture groups.
  #
  #     /(?<foo>bar)/ =~ baz
  #     ^^^^^^^^^^^^^^^^^^^^
  class MatchWriteNode < Node
    # Initialize a new MatchWriteNode node.
    def initialize(source, node_id, location, flags, call, targets)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @call = call
      @targets = targets
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_match_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [call, *targets]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [call, *targets]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [call, *targets] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?call: CallNode, ?targets: Array[LocalVariableTargetNode]) -> MatchWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, call: self.call, targets: self.targets)
      MatchWriteNode.new(source, node_id, location, flags, call, targets)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, call: CallNode, targets: Array[LocalVariableTargetNode] }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, call: call, targets: targets }
    end

    # attr_reader call: CallNode
    attr_reader :call

    # attr_reader targets: Array[LocalVariableTargetNode]
    attr_reader :targets

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :match_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :match_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(MatchWriteNode) &&
        (call === other.call) &&
        (targets.length == other.targets.length) &&
        targets.zip(other.targets).all? { |left, right| left === right }
    end
  end

  # Represents a node that is missing from the source and results in a syntax error.
  class MissingNode < Node
    # Initialize a new MissingNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_missing_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> MissingNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      MissingNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :missing_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :missing_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(MissingNode)
    end
  end

  # Represents a module declaration involving the `module` keyword.
  #
  #     module Foo end
  #     ^^^^^^^^^^^^^^
  class ModuleNode < Node
    # Initialize a new ModuleNode node.
    def initialize(source, node_id, location, flags, locals, module_keyword_loc, constant_path, body, end_keyword_loc, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @locals = locals
      @module_keyword_loc = module_keyword_loc
      @constant_path = constant_path
      @body = body
      @end_keyword_loc = end_keyword_loc
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_module_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [constant_path, body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << constant_path
      compact << body if body
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [module_keyword_loc, constant_path, *body, end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?locals: Array[Symbol], ?module_keyword_loc: Location, ?constant_path: ConstantReadNode | ConstantPathNode | MissingNode, ?body: StatementsNode | BeginNode | nil, ?end_keyword_loc: Location, ?name: Symbol) -> ModuleNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, locals: self.locals, module_keyword_loc: self.module_keyword_loc, constant_path: self.constant_path, body: self.body, end_keyword_loc: self.end_keyword_loc, name: self.name)
      ModuleNode.new(source, node_id, location, flags, locals, module_keyword_loc, constant_path, body, end_keyword_loc, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, locals: Array[Symbol], module_keyword_loc: Location, constant_path: ConstantReadNode | ConstantPathNode | MissingNode, body: StatementsNode | BeginNode | nil, end_keyword_loc: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, locals: locals, module_keyword_loc: module_keyword_loc, constant_path: constant_path, body: body, end_keyword_loc: end_keyword_loc, name: name }
    end

    # attr_reader locals: Array[Symbol]
    attr_reader :locals

    # attr_reader module_keyword_loc: Location
    def module_keyword_loc
      location = @module_keyword_loc
      return location if location.is_a?(Location)
      @module_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the module_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_module_keyword_loc(repository)
      repository.enter(node_id, :module_keyword_loc)
    end

    # attr_reader constant_path: ConstantReadNode | ConstantPathNode | MissingNode
    attr_reader :constant_path

    # attr_reader body: StatementsNode | BeginNode | nil
    attr_reader :body

    # attr_reader end_keyword_loc: Location
    def end_keyword_loc
      location = @end_keyword_loc
      return location if location.is_a?(Location)
      @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc)
    end

    # attr_reader name: Symbol
    attr_reader :name

    # def module_keyword: () -> String
    def module_keyword
      module_keyword_loc.slice
    end

    # def end_keyword: () -> String
    def end_keyword
      end_keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :module_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :module_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ModuleNode) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (module_keyword_loc.nil? == other.module_keyword_loc.nil?) &&
        (constant_path === other.constant_path) &&
        (body === other.body) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?) &&
        (name === other.name)
    end
  end

  # Represents a multi-target expression.
  #
  #     a, (b, c) = 1, 2, 3
  #        ^^^^^^
  #
  # This can be a part of `MultiWriteNode` as above, or the target of a `for` loop
  #
  #     for a, b in [[1, 2], [3, 4]]
  #         ^^^^
  class MultiTargetNode < Node
    # Initialize a new MultiTargetNode node.
    def initialize(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @lefts = lefts
      @rest = rest
      @rights = rights
      @lparen_loc = lparen_loc
      @rparen_loc = rparen_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_multi_target_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*lefts, rest, *rights]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact.concat(lefts)
      compact << rest if rest
      compact.concat(rights)
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*lefts, *rest, *rights, *lparen_loc, *rparen_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?lefts: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode | BackReferenceReadNode | NumberedReferenceReadNode], ?rest: ImplicitRestNode | SplatNode | nil, ?rights: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode | BackReferenceReadNode | NumberedReferenceReadNode], ?lparen_loc: Location?, ?rparen_loc: Location?) -> MultiTargetNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, lefts: self.lefts, rest: self.rest, rights: self.rights, lparen_loc: self.lparen_loc, rparen_loc: self.rparen_loc)
      MultiTargetNode.new(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, lefts: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode | BackReferenceReadNode | NumberedReferenceReadNode], rest: ImplicitRestNode | SplatNode | nil, rights: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | RequiredParameterNode | BackReferenceReadNode | NumberedReferenceReadNode], lparen_loc: Location?, rparen_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, lefts: lefts, rest: rest, rights: rights, lparen_loc: lparen_loc, rparen_loc: rparen_loc }
    end

    # Represents the targets expressions before a splat node.
    #
    #     a, (b, c, *) = 1, 2, 3, 4, 5
    #         ^^^^
    #
    # The splat node can be absent, in that case all target expressions are in the left field.
    #
    #     a, (b, c) = 1, 2, 3, 4, 5
    #         ^^^^
    attr_reader :lefts

    # Represents a splat node in the target expression.
    #
    #     a, (b, *c) = 1, 2, 3, 4
    #            ^^
    #
    # The variable can be empty, this results in a `SplatNode` with a `nil` expression field.
    #
    #     a, (b, *) = 1, 2, 3, 4
    #            ^
    #
    # If the `*` is omitted, this field will contain an `ImplicitRestNode`
    #
    #     a, (b,) = 1, 2, 3, 4
    #          ^
    attr_reader :rest

    # Represents the targets expressions after a splat node.
    #
    #     a, (*, b, c) = 1, 2, 3, 4, 5
    #            ^^^^
    attr_reader :rights

    # The location of the opening parenthesis.
    #
    #     a, (b, c) = 1, 2, 3
    #        ^
    def lparen_loc
      location = @lparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the lparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc) unless @lparen_loc.nil?
    end

    # The location of the closing parenthesis.
    #
    #     a, (b, c) = 1, 2, 3
    #             ^
    def rparen_loc
      location = @rparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the rparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc) unless @rparen_loc.nil?
    end

    # def lparen: () -> String?
    def lparen
      lparen_loc&.slice
    end

    # def rparen: () -> String?
    def rparen
      rparen_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :multi_target_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :multi_target_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(MultiTargetNode) &&
        (lefts.length == other.lefts.length) &&
        lefts.zip(other.lefts).all? { |left, right| left === right } &&
        (rest === other.rest) &&
        (rights.length == other.rights.length) &&
        rights.zip(other.rights).all? { |left, right| left === right } &&
        (lparen_loc.nil? == other.lparen_loc.nil?) &&
        (rparen_loc.nil? == other.rparen_loc.nil?)
    end
  end

  # Represents a write to a multi-target expression.
  #
  #     a, b, c = 1, 2, 3
  #     ^^^^^^^^^^^^^^^^^
  class MultiWriteNode < Node
    # Initialize a new MultiWriteNode node.
    def initialize(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @lefts = lefts
      @rest = rest
      @rights = rights
      @lparen_loc = lparen_loc
      @rparen_loc = rparen_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_multi_write_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*lefts, rest, *rights, value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact.concat(lefts)
      compact << rest if rest
      compact.concat(rights)
      compact << value
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*lefts, *rest, *rights, *lparen_loc, *rparen_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?lefts: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | BackReferenceReadNode | NumberedReferenceReadNode], ?rest: ImplicitRestNode | SplatNode | nil, ?rights: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | BackReferenceReadNode | NumberedReferenceReadNode], ?lparen_loc: Location?, ?rparen_loc: Location?, ?operator_loc: Location, ?value: Prism::node) -> MultiWriteNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, lefts: self.lefts, rest: self.rest, rights: self.rights, lparen_loc: self.lparen_loc, rparen_loc: self.rparen_loc, operator_loc: self.operator_loc, value: self.value)
      MultiWriteNode.new(source, node_id, location, flags, lefts, rest, rights, lparen_loc, rparen_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, lefts: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | BackReferenceReadNode | NumberedReferenceReadNode], rest: ImplicitRestNode | SplatNode | nil, rights: Array[LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | MultiTargetNode | BackReferenceReadNode | NumberedReferenceReadNode], lparen_loc: Location?, rparen_loc: Location?, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, lefts: lefts, rest: rest, rights: rights, lparen_loc: lparen_loc, rparen_loc: rparen_loc, operator_loc: operator_loc, value: value }
    end

    # Represents the targets expressions before a splat node.
    #
    #     a, b, * = 1, 2, 3, 4, 5
    #     ^^^^
    #
    # The splat node can be absent, in that case all target expressions are in the left field.
    #
    #     a, b, c = 1, 2, 3, 4, 5
    #     ^^^^^^^
    attr_reader :lefts

    # Represents a splat node in the target expression.
    #
    #     a, b, *c = 1, 2, 3, 4
    #           ^^
    #
    # The variable can be empty, this results in a `SplatNode` with a `nil` expression field.
    #
    #     a, b, * = 1, 2, 3, 4
    #           ^
    #
    # If the `*` is omitted, this field will contain an `ImplicitRestNode`
    #
    #     a, b, = 1, 2, 3, 4
    #         ^
    attr_reader :rest

    # Represents the targets expressions after a splat node.
    #
    #     a, *, b, c = 1, 2, 3, 4, 5
    #           ^^^^
    attr_reader :rights

    # The location of the opening parenthesis.
    #
    #     (a, b, c) = 1, 2, 3
    #     ^
    def lparen_loc
      location = @lparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the lparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc) unless @lparen_loc.nil?
    end

    # The location of the closing parenthesis.
    #
    #     (a, b, c) = 1, 2, 3
    #             ^
    def rparen_loc
      location = @rparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the rparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc) unless @rparen_loc.nil?
    end

    # The location of the operator.
    #
    #     a, b, c = 1, 2, 3
    #             ^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # The value to write to the targets. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     a, b, c = 1, 2, 3
    #               ^^^^^^^
    attr_reader :value

    # def lparen: () -> String?
    def lparen
      lparen_loc&.slice
    end

    # def rparen: () -> String?
    def rparen
      rparen_loc&.slice
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :multi_write_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :multi_write_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(MultiWriteNode) &&
        (lefts.length == other.lefts.length) &&
        lefts.zip(other.lefts).all? { |left, right| left === right } &&
        (rest === other.rest) &&
        (rights.length == other.rights.length) &&
        rights.zip(other.rights).all? { |left, right| left === right } &&
        (lparen_loc.nil? == other.lparen_loc.nil?) &&
        (rparen_loc.nil? == other.rparen_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents the use of the `next` keyword.
  #
  #     next 1
  #     ^^^^^^
  class NextNode < Node
    # Initialize a new NextNode node.
    def initialize(source, node_id, location, flags, arguments, keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @arguments = arguments
      @keyword_loc = keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_next_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [arguments]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << arguments if arguments
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*arguments, keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?arguments: ArgumentsNode?, ?keyword_loc: Location) -> NextNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, arguments: self.arguments, keyword_loc: self.keyword_loc)
      NextNode.new(source, node_id, location, flags, arguments, keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, arguments: ArgumentsNode?, keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, arguments: arguments, keyword_loc: keyword_loc }
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :next_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :next_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(NextNode) &&
        (arguments === other.arguments) &&
        (keyword_loc.nil? == other.keyword_loc.nil?)
    end
  end

  # Represents the use of the `nil` keyword.
  #
  #     nil
  #     ^^^
  class NilNode < Node
    # Initialize a new NilNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_nil_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> NilNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      NilNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :nil_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :nil_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(NilNode)
    end
  end

  # Represents the use of `**nil` inside method arguments.
  #
  #     def a(**nil)
  #           ^^^^^
  #     end
  class NoKeywordsParameterNode < Node
    # Initialize a new NoKeywordsParameterNode node.
    def initialize(source, node_id, location, flags, operator_loc, keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @operator_loc = operator_loc
      @keyword_loc = keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_no_keywords_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [operator_loc, keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?operator_loc: Location, ?keyword_loc: Location) -> NoKeywordsParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, operator_loc: self.operator_loc, keyword_loc: self.keyword_loc)
      NoKeywordsParameterNode.new(source, node_id, location, flags, operator_loc, keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, operator_loc: Location, keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, operator_loc: operator_loc, keyword_loc: keyword_loc }
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :no_keywords_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :no_keywords_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(NoKeywordsParameterNode) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (keyword_loc.nil? == other.keyword_loc.nil?)
    end
  end

  # Represents an implicit set of parameters through the use of numbered parameters within a block or lambda.
  #
  #     -> { _1 + _2 }
  #     ^^^^^^^^^^^^^^
  class NumberedParametersNode < Node
    # Initialize a new NumberedParametersNode node.
    def initialize(source, node_id, location, flags, maximum)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @maximum = maximum
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_numbered_parameters_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?maximum: Integer) -> NumberedParametersNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, maximum: self.maximum)
      NumberedParametersNode.new(source, node_id, location, flags, maximum)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, maximum: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, maximum: maximum }
    end

    # attr_reader maximum: Integer
    attr_reader :maximum

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :numbered_parameters_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :numbered_parameters_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(NumberedParametersNode) &&
        (maximum === other.maximum)
    end
  end

  # Represents reading a numbered reference to a capture in the previous match.
  #
  #     $1
  #     ^^
  class NumberedReferenceReadNode < Node
    # Initialize a new NumberedReferenceReadNode node.
    def initialize(source, node_id, location, flags, number)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @number = number
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_numbered_reference_read_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?number: Integer) -> NumberedReferenceReadNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, number: self.number)
      NumberedReferenceReadNode.new(source, node_id, location, flags, number)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, number: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, number: number }
    end

    # The (1-indexed, from the left) number of the capture group. Numbered references that are too large result in this value being `0`.
    #
    #     $1          # number `1`
    #
    #     $5432       # number `5432`
    #
    #     $4294967296 # number `0`
    attr_reader :number

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :numbered_reference_read_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :numbered_reference_read_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(NumberedReferenceReadNode) &&
        (number === other.number)
    end
  end

  # Represents an optional keyword parameter to a method, block, or lambda definition.
  #
  #     def a(b: 1)
  #           ^^^^
  #     end
  class OptionalKeywordParameterNode < Node
    # Initialize a new OptionalKeywordParameterNode node.
    def initialize(source, node_id, location, flags, name, name_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_optional_keyword_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?value: Prism::node) -> OptionalKeywordParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, value: self.value)
      OptionalKeywordParameterNode.new(source, node_id, location, flags, name, name_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, value: value }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :optional_keyword_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :optional_keyword_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(OptionalKeywordParameterNode) &&
        (flags === other.flags) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents an optional parameter to a method, block, or lambda definition.
  #
  #     def a(b = 1)
  #           ^^^^^
  #     end
  class OptionalParameterNode < Node
    # Initialize a new OptionalParameterNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc, value)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
      @value = value
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_optional_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [value]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [value]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc, operator_loc, value] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node) -> OptionalParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc, value: self.value)
      OptionalParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc, value)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc, value: value }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader value: Prism::node
    attr_reader :value

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :optional_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :optional_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(OptionalParameterNode) &&
        (flags === other.flags) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (value === other.value)
    end
  end

  # Represents the use of the `||` operator or the `or` keyword.
  #
  #     left or right
  #     ^^^^^^^^^^^^^
  class OrNode < Node
    # Initialize a new OrNode node.
    def initialize(source, node_id, location, flags, left, right, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @left = left
      @right = right
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_or_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [left, right]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [left, right]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [left, right, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?left: Prism::node, ?right: Prism::node, ?operator_loc: Location) -> OrNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, left: self.left, right: self.right, operator_loc: self.operator_loc)
      OrNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, left: Prism::node, right: Prism::node, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, left: left, right: right, operator_loc: operator_loc }
    end

    # Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     left or right
    #     ^^^^
    #
    #     1 || 2
    #     ^
    attr_reader :left

    # Represents the right side of the expression.
    #
    #     left || right
    #             ^^^^^
    #
    #     1 or 2
    #          ^
    attr_reader :right

    # The location of the `or` keyword or the `||` operator.
    #
    #     left or right
    #          ^^
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :or_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :or_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(OrNode) &&
        (left === other.left) &&
        (right === other.right) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents the list of parameters on a method, block, or lambda definition.
  #
  #     def a(b, c, d)
  #           ^^^^^^^
  #     end
  class ParametersNode < Node
    # Initialize a new ParametersNode node.
    def initialize(source, node_id, location, flags, requireds, optionals, rest, posts, keywords, keyword_rest, block)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @requireds = requireds
      @optionals = optionals
      @rest = rest
      @posts = posts
      @keywords = keywords
      @keyword_rest = keyword_rest
      @block = block
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_parameters_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*requireds, *optionals, rest, *posts, *keywords, keyword_rest, block]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact.concat(requireds)
      compact.concat(optionals)
      compact << rest if rest
      compact.concat(posts)
      compact.concat(keywords)
      compact << keyword_rest if keyword_rest
      compact << block if block
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*requireds, *optionals, *rest, *posts, *keywords, *keyword_rest, *block] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?requireds: Array[RequiredParameterNode | MultiTargetNode], ?optionals: Array[OptionalParameterNode], ?rest: RestParameterNode | ImplicitRestNode | nil, ?posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode], ?keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], ?keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, ?block: BlockParameterNode?) -> ParametersNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, requireds: self.requireds, optionals: self.optionals, rest: self.rest, posts: self.posts, keywords: self.keywords, keyword_rest: self.keyword_rest, block: self.block)
      ParametersNode.new(source, node_id, location, flags, requireds, optionals, rest, posts, keywords, keyword_rest, block)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, requireds: Array[RequiredParameterNode | MultiTargetNode], optionals: Array[OptionalParameterNode], rest: RestParameterNode | ImplicitRestNode | nil, posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode], keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, block: BlockParameterNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, requireds: requireds, optionals: optionals, rest: rest, posts: posts, keywords: keywords, keyword_rest: keyword_rest, block: block }
    end

    # attr_reader requireds: Array[RequiredParameterNode | MultiTargetNode]
    attr_reader :requireds

    # attr_reader optionals: Array[OptionalParameterNode]
    attr_reader :optionals

    # attr_reader rest: RestParameterNode | ImplicitRestNode | nil
    attr_reader :rest

    # attr_reader posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode]
    attr_reader :posts

    # attr_reader keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode]
    attr_reader :keywords

    # attr_reader keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil
    attr_reader :keyword_rest

    # attr_reader block: BlockParameterNode?
    attr_reader :block

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :parameters_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :parameters_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ParametersNode) &&
        (requireds.length == other.requireds.length) &&
        requireds.zip(other.requireds).all? { |left, right| left === right } &&
        (optionals.length == other.optionals.length) &&
        optionals.zip(other.optionals).all? { |left, right| left === right } &&
        (rest === other.rest) &&
        (posts.length == other.posts.length) &&
        posts.zip(other.posts).all? { |left, right| left === right } &&
        (keywords.length == other.keywords.length) &&
        keywords.zip(other.keywords).all? { |left, right| left === right } &&
        (keyword_rest === other.keyword_rest) &&
        (block === other.block)
    end
  end

  # Represents a parenthesized expression
  #
  #     (10 + 34)
  #     ^^^^^^^^^
  class ParenthesesNode < Node
    # Initialize a new ParenthesesNode node.
    def initialize(source, node_id, location, flags, body, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @body = body
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_parentheses_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << body if body
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*body, opening_loc, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?body: Prism::node?, ?opening_loc: Location, ?closing_loc: Location) -> ParenthesesNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, body: self.body, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      ParenthesesNode.new(source, node_id, location, flags, body, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, body: Prism::node?, opening_loc: Location, closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, body: body, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # attr_reader body: Prism::node?
    attr_reader :body

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :parentheses_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :parentheses_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ParenthesesNode) &&
        (body === other.body) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents the use of the `^` operator for pinning an expression in a pattern matching expression.
  #
  #     foo in ^(bar)
  #            ^^^^^^
  class PinnedExpressionNode < Node
    # Initialize a new PinnedExpressionNode node.
    def initialize(source, node_id, location, flags, expression, operator_loc, lparen_loc, rparen_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @expression = expression
      @operator_loc = operator_loc
      @lparen_loc = lparen_loc
      @rparen_loc = rparen_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_pinned_expression_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [expression]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [expression]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [expression, operator_loc, lparen_loc, rparen_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?expression: Prism::node, ?operator_loc: Location, ?lparen_loc: Location, ?rparen_loc: Location) -> PinnedExpressionNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, expression: self.expression, operator_loc: self.operator_loc, lparen_loc: self.lparen_loc, rparen_loc: self.rparen_loc)
      PinnedExpressionNode.new(source, node_id, location, flags, expression, operator_loc, lparen_loc, rparen_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, expression: Prism::node, operator_loc: Location, lparen_loc: Location, rparen_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, expression: expression, operator_loc: operator_loc, lparen_loc: lparen_loc, rparen_loc: rparen_loc }
    end

    # attr_reader expression: Prism::node
    attr_reader :expression

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader lparen_loc: Location
    def lparen_loc
      location = @lparen_loc
      return location if location.is_a?(Location)
      @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the lparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc)
    end

    # attr_reader rparen_loc: Location
    def rparen_loc
      location = @rparen_loc
      return location if location.is_a?(Location)
      @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the rparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def lparen: () -> String
    def lparen
      lparen_loc.slice
    end

    # def rparen: () -> String
    def rparen
      rparen_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :pinned_expression_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :pinned_expression_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(PinnedExpressionNode) &&
        (expression === other.expression) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (lparen_loc.nil? == other.lparen_loc.nil?) &&
        (rparen_loc.nil? == other.rparen_loc.nil?)
    end
  end

  # Represents the use of the `^` operator for pinning a variable in a pattern matching expression.
  #
  #     foo in ^bar
  #            ^^^^
  class PinnedVariableNode < Node
    # Initialize a new PinnedVariableNode node.
    def initialize(source, node_id, location, flags, variable, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @variable = variable
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_pinned_variable_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [variable]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [variable]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [variable, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?variable: LocalVariableReadNode | InstanceVariableReadNode | ClassVariableReadNode | GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode | ItLocalVariableReadNode | MissingNode, ?operator_loc: Location) -> PinnedVariableNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, variable: self.variable, operator_loc: self.operator_loc)
      PinnedVariableNode.new(source, node_id, location, flags, variable, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, variable: LocalVariableReadNode | InstanceVariableReadNode | ClassVariableReadNode | GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode | ItLocalVariableReadNode | MissingNode, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, variable: variable, operator_loc: operator_loc }
    end

    # attr_reader variable: LocalVariableReadNode | InstanceVariableReadNode | ClassVariableReadNode | GlobalVariableReadNode | BackReferenceReadNode | NumberedReferenceReadNode | ItLocalVariableReadNode | MissingNode
    attr_reader :variable

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :pinned_variable_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :pinned_variable_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(PinnedVariableNode) &&
        (variable === other.variable) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents the use of the `END` keyword.
  #
  #     END { foo }
  #     ^^^^^^^^^^^
  class PostExecutionNode < Node
    # Initialize a new PostExecutionNode node.
    def initialize(source, node_id, location, flags, statements, keyword_loc, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @statements = statements
      @keyword_loc = keyword_loc
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_post_execution_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*statements, keyword_loc, opening_loc, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?statements: StatementsNode?, ?keyword_loc: Location, ?opening_loc: Location, ?closing_loc: Location) -> PostExecutionNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, statements: self.statements, keyword_loc: self.keyword_loc, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      PostExecutionNode.new(source, node_id, location, flags, statements, keyword_loc, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, statements: StatementsNode?, keyword_loc: Location, opening_loc: Location, closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, statements: statements, keyword_loc: keyword_loc, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :post_execution_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :post_execution_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(PostExecutionNode) &&
        (statements === other.statements) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # Represents the use of the `BEGIN` keyword.
  #
  #     BEGIN { foo }
  #     ^^^^^^^^^^^^^
  class PreExecutionNode < Node
    # Initialize a new PreExecutionNode node.
    def initialize(source, node_id, location, flags, statements, keyword_loc, opening_loc, closing_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @statements = statements
      @keyword_loc = keyword_loc
      @opening_loc = opening_loc
      @closing_loc = closing_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_pre_execution_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*statements, keyword_loc, opening_loc, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?statements: StatementsNode?, ?keyword_loc: Location, ?opening_loc: Location, ?closing_loc: Location) -> PreExecutionNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, statements: self.statements, keyword_loc: self.keyword_loc, opening_loc: self.opening_loc, closing_loc: self.closing_loc)
      PreExecutionNode.new(source, node_id, location, flags, statements, keyword_loc, opening_loc, closing_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, statements: StatementsNode?, keyword_loc: Location, opening_loc: Location, closing_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, statements: statements, keyword_loc: keyword_loc, opening_loc: opening_loc, closing_loc: closing_loc }
    end

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :pre_execution_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :pre_execution_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(PreExecutionNode) &&
        (statements === other.statements) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?)
    end
  end

  # The top level node of any parse tree.
  class ProgramNode < Node
    # Initialize a new ProgramNode node.
    def initialize(source, node_id, location, flags, locals, statements)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @locals = locals
      @statements = statements
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_program_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [statements]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [statements] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?locals: Array[Symbol], ?statements: StatementsNode) -> ProgramNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, locals: self.locals, statements: self.statements)
      ProgramNode.new(source, node_id, location, flags, locals, statements)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, locals: Array[Symbol], statements: StatementsNode }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, locals: locals, statements: statements }
    end

    # attr_reader locals: Array[Symbol]
    attr_reader :locals

    # attr_reader statements: StatementsNode
    attr_reader :statements

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :program_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :program_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ProgramNode) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (statements === other.statements)
    end
  end

  # Represents the use of the `..` or `...` operators.
  #
  #     1..2
  #     ^^^^
  #
  #     c if a =~ /left/ ... b =~ /right/
  #          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  class RangeNode < Node
    # Initialize a new RangeNode node.
    def initialize(source, node_id, location, flags, left, right, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @left = left
      @right = right
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_range_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [left, right]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << left if left
      compact << right if right
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*left, *right, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?left: Prism::node?, ?right: Prism::node?, ?operator_loc: Location) -> RangeNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, left: self.left, right: self.right, operator_loc: self.operator_loc)
      RangeNode.new(source, node_id, location, flags, left, right, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, left: Prism::node?, right: Prism::node?, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, left: left, right: right, operator_loc: operator_loc }
    end

    # def exclude_end?: () -> bool
    def exclude_end?
      flags.anybits?(RangeFlags::EXCLUDE_END)
    end

    # The left-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     1...
    #     ^
    #
    #     hello...goodbye
    #     ^^^^^
    attr_reader :left

    # The right-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     ..5
    #       ^
    #
    #     1...foo
    #         ^^^
    # If neither right-hand or left-hand side was included, this will be a MissingNode.
    attr_reader :right

    # The location of the `..` or `...` operator.
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :range_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :range_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RangeNode) &&
        (flags === other.flags) &&
        (left === other.left) &&
        (right === other.right) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents a rational number literal.
  #
  #     1.0r
  #     ^^^^
  class RationalNode < Node
    # Initialize a new RationalNode node.
    def initialize(source, node_id, location, flags, numerator, denominator)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @numerator = numerator
      @denominator = denominator
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_rational_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?numerator: Integer, ?denominator: Integer) -> RationalNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, numerator: self.numerator, denominator: self.denominator)
      RationalNode.new(source, node_id, location, flags, numerator, denominator)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, numerator: Integer, denominator: Integer }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, numerator: numerator, denominator: denominator }
    end

    # def binary?: () -> bool
    def binary?
      flags.anybits?(IntegerBaseFlags::BINARY)
    end

    # def decimal?: () -> bool
    def decimal?
      flags.anybits?(IntegerBaseFlags::DECIMAL)
    end

    # def octal?: () -> bool
    def octal?
      flags.anybits?(IntegerBaseFlags::OCTAL)
    end

    # def hexadecimal?: () -> bool
    def hexadecimal?
      flags.anybits?(IntegerBaseFlags::HEXADECIMAL)
    end

    # The numerator of the rational number.
    #
    #     1.5r # numerator 3
    attr_reader :numerator

    # The denominator of the rational number.
    #
    #     1.5r # denominator 2
    attr_reader :denominator

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :rational_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :rational_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RationalNode) &&
        (flags === other.flags) &&
        (numerator === other.numerator) &&
        (denominator === other.denominator)
    end
  end

  # Represents the use of the `redo` keyword.
  #
  #     redo
  #     ^^^^
  class RedoNode < Node
    # Initialize a new RedoNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_redo_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> RedoNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      RedoNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :redo_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :redo_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RedoNode)
    end
  end

  # Represents a regular expression literal with no interpolation.
  #
  #     /foo/i
  #     ^^^^^^
  class RegularExpressionNode < Node
    # Initialize a new RegularExpressionNode node.
    def initialize(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @content_loc = content_loc
      @closing_loc = closing_loc
      @unescaped = unescaped
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_regular_expression_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, content_loc, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?content_loc: Location, ?closing_loc: Location, ?unescaped: String) -> RegularExpressionNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, content_loc: self.content_loc, closing_loc: self.closing_loc, unescaped: self.unescaped)
      RegularExpressionNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, content_loc: content_loc, closing_loc: closing_loc, unescaped: unescaped }
    end

    # def ignore_case?: () -> bool
    def ignore_case?
      flags.anybits?(RegularExpressionFlags::IGNORE_CASE)
    end

    # def extended?: () -> bool
    def extended?
      flags.anybits?(RegularExpressionFlags::EXTENDED)
    end

    # def multi_line?: () -> bool
    def multi_line?
      flags.anybits?(RegularExpressionFlags::MULTI_LINE)
    end

    # def once?: () -> bool
    def once?
      flags.anybits?(RegularExpressionFlags::ONCE)
    end

    # def euc_jp?: () -> bool
    def euc_jp?
      flags.anybits?(RegularExpressionFlags::EUC_JP)
    end

    # def ascii_8bit?: () -> bool
    def ascii_8bit?
      flags.anybits?(RegularExpressionFlags::ASCII_8BIT)
    end

    # def windows_31j?: () -> bool
    def windows_31j?
      flags.anybits?(RegularExpressionFlags::WINDOWS_31J)
    end

    # def utf_8?: () -> bool
    def utf_8?
      flags.anybits?(RegularExpressionFlags::UTF_8)
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_BINARY_ENCODING)
    end

    # def forced_us_ascii_encoding?: () -> bool
    def forced_us_ascii_encoding?
      flags.anybits?(RegularExpressionFlags::FORCED_US_ASCII_ENCODING)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader content_loc: Location
    def content_loc
      location = @content_loc
      return location if location.is_a?(Location)
      @content_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the content_loc location using the given saved source so that
    # it can be retrieved later.
    def save_content_loc(repository)
      repository.enter(node_id, :content_loc)
    end

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader unescaped: String
    attr_reader :unescaped

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def content: () -> String
    def content
      content_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :regular_expression_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :regular_expression_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RegularExpressionNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (content_loc.nil? == other.content_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (unescaped === other.unescaped)
    end
  end

  # Represents a required keyword parameter to a method, block, or lambda definition.
  #
  #     def a(b: )
  #           ^^
  #     end
  class RequiredKeywordParameterNode < Node
    # Initialize a new RequiredKeywordParameterNode node.
    def initialize(source, node_id, location, flags, name, name_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_required_keyword_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [name_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol, ?name_loc: Location) -> RequiredKeywordParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc)
      RequiredKeywordParameterNode.new(source, node_id, location, flags, name, name_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol, name_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # attr_reader name: Symbol
    attr_reader :name

    # attr_reader name_loc: Location
    def name_loc
      location = @name_loc
      return location if location.is_a?(Location)
      @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc)
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :required_keyword_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :required_keyword_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RequiredKeywordParameterNode) &&
        (flags === other.flags) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?)
    end
  end

  # Represents a required parameter to a method, block, or lambda definition.
  #
  #     def a(b)
  #           ^
  #     end
  class RequiredParameterNode < Node
    # Initialize a new RequiredParameterNode node.
    def initialize(source, node_id, location, flags, name)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_required_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol) -> RequiredParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name)
      RequiredParameterNode.new(source, node_id, location, flags, name)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # attr_reader name: Symbol
    attr_reader :name

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :required_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :required_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RequiredParameterNode) &&
        (flags === other.flags) &&
        (name === other.name)
    end
  end

  # Represents an expression modified with a rescue.
  #
  #     foo rescue nil
  #     ^^^^^^^^^^^^^^
  class RescueModifierNode < Node
    # Initialize a new RescueModifierNode node.
    def initialize(source, node_id, location, flags, expression, keyword_loc, rescue_expression)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @expression = expression
      @keyword_loc = keyword_loc
      @rescue_expression = rescue_expression
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_rescue_modifier_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [expression, rescue_expression]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [expression, rescue_expression]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [expression, keyword_loc, rescue_expression] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?expression: Prism::node, ?keyword_loc: Location, ?rescue_expression: Prism::node) -> RescueModifierNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, expression: self.expression, keyword_loc: self.keyword_loc, rescue_expression: self.rescue_expression)
      RescueModifierNode.new(source, node_id, location, flags, expression, keyword_loc, rescue_expression)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, expression: Prism::node, keyword_loc: Location, rescue_expression: Prism::node }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, expression: expression, keyword_loc: keyword_loc, rescue_expression: rescue_expression }
    end

    # attr_reader expression: Prism::node
    attr_reader :expression

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader rescue_expression: Prism::node
    attr_reader :rescue_expression

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :rescue_modifier_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :rescue_modifier_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RescueModifierNode) &&
        (expression === other.expression) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (rescue_expression === other.rescue_expression)
    end
  end

  # Represents a rescue statement.
  #
  #     begin
  #     rescue Foo, *splat, Bar => ex
  #       foo
  #     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  #     end
  #
  # `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field.
  class RescueNode < Node
    # Initialize a new RescueNode node.
    def initialize(source, node_id, location, flags, keyword_loc, exceptions, operator_loc, reference, statements, subsequent)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @exceptions = exceptions
      @operator_loc = operator_loc
      @reference = reference
      @statements = statements
      @subsequent = subsequent
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_rescue_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*exceptions, reference, statements, subsequent]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact.concat(exceptions)
      compact << reference if reference
      compact << statements if statements
      compact << subsequent if subsequent
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, *exceptions, *operator_loc, *reference, *statements, *subsequent] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?exceptions: Array[Prism::node], ?operator_loc: Location?, ?reference: LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | BackReferenceReadNode | NumberedReferenceReadNode | MissingNode | nil, ?statements: StatementsNode?, ?subsequent: RescueNode?) -> RescueNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, exceptions: self.exceptions, operator_loc: self.operator_loc, reference: self.reference, statements: self.statements, subsequent: self.subsequent)
      RescueNode.new(source, node_id, location, flags, keyword_loc, exceptions, operator_loc, reference, statements, subsequent)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, exceptions: Array[Prism::node], operator_loc: Location?, reference: LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | BackReferenceReadNode | NumberedReferenceReadNode | MissingNode | nil, statements: StatementsNode?, subsequent: RescueNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, exceptions: exceptions, operator_loc: operator_loc, reference: reference, statements: statements, subsequent: subsequent }
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader exceptions: Array[Prism::node]
    attr_reader :exceptions

    # attr_reader operator_loc: Location?
    def operator_loc
      location = @operator_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc) unless @operator_loc.nil?
    end

    # attr_reader reference: LocalVariableTargetNode | InstanceVariableTargetNode | ClassVariableTargetNode | GlobalVariableTargetNode | ConstantTargetNode | ConstantPathTargetNode | CallTargetNode | IndexTargetNode | BackReferenceReadNode | NumberedReferenceReadNode | MissingNode | nil
    attr_reader :reference

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # attr_reader subsequent: RescueNode?
    attr_reader :subsequent

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def operator: () -> String?
    def operator
      operator_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :rescue_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :rescue_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RescueNode) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (exceptions.length == other.exceptions.length) &&
        exceptions.zip(other.exceptions).all? { |left, right| left === right } &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (reference === other.reference) &&
        (statements === other.statements) &&
        (subsequent === other.subsequent)
    end
  end

  # Represents a rest parameter to a method, block, or lambda definition.
  #
  #     def a(*b)
  #           ^^
  #     end
  class RestParameterNode < Node
    # Initialize a new RestParameterNode node.
    def initialize(source, node_id, location, flags, name, name_loc, operator_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @name = name
      @name_loc = name_loc
      @operator_loc = operator_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_rest_parameter_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*name_loc, operator_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?name: Symbol?, ?name_loc: Location?, ?operator_loc: Location) -> RestParameterNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, name: self.name, name_loc: self.name_loc, operator_loc: self.operator_loc)
      RestParameterNode.new(source, node_id, location, flags, name, name_loc, operator_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, name: Symbol?, name_loc: Location?, operator_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, name: name, name_loc: name_loc, operator_loc: operator_loc }
    end

    # def repeated_parameter?: () -> bool
    def repeated_parameter?
      flags.anybits?(ParameterFlags::REPEATED_PARAMETER)
    end

    # attr_reader name: Symbol?
    attr_reader :name

    # attr_reader name_loc: Location?
    def name_loc
      location = @name_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @name_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the name_loc location using the given saved source so that
    # it can be retrieved later.
    def save_name_loc(repository)
      repository.enter(node_id, :name_loc) unless @name_loc.nil?
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :rest_parameter_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :rest_parameter_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RestParameterNode) &&
        (flags === other.flags) &&
        (name === other.name) &&
        (name_loc.nil? == other.name_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?)
    end
  end

  # Represents the use of the `retry` keyword.
  #
  #     retry
  #     ^^^^^
  class RetryNode < Node
    # Initialize a new RetryNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_retry_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> RetryNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      RetryNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :retry_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :retry_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(RetryNode)
    end
  end

  # Represents the use of the `return` keyword.
  #
  #     return 1
  #     ^^^^^^^^
  class ReturnNode < Node
    # Initialize a new ReturnNode node.
    def initialize(source, node_id, location, flags, keyword_loc, arguments)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @arguments = arguments
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_return_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [arguments]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << arguments if arguments
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, *arguments] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?arguments: ArgumentsNode?) -> ReturnNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, arguments: self.arguments)
      ReturnNode.new(source, node_id, location, flags, keyword_loc, arguments)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, arguments: ArgumentsNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, arguments: arguments }
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :return_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :return_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ReturnNode) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (arguments === other.arguments)
    end
  end

  # Represents the `self` keyword.
  #
  #     self
  #     ^^^^
  class SelfNode < Node
    # Initialize a new SelfNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_self_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> SelfNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      SelfNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :self_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :self_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SelfNode)
    end
  end

  # This node wraps a constant write to indicate that when the value is written, it should have its shareability state modified.
  #
  #     # shareable_constant_value: literal
  #     C = { a: 1 }
  #     ^^^^^^^^^^^^
  class ShareableConstantNode < Node
    # Initialize a new ShareableConstantNode node.
    def initialize(source, node_id, location, flags, write)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @write = write
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_shareable_constant_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [write]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [write]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [write] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?write: ConstantWriteNode | ConstantAndWriteNode | ConstantOrWriteNode | ConstantOperatorWriteNode | ConstantPathWriteNode | ConstantPathAndWriteNode | ConstantPathOrWriteNode | ConstantPathOperatorWriteNode) -> ShareableConstantNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, write: self.write)
      ShareableConstantNode.new(source, node_id, location, flags, write)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, write: ConstantWriteNode | ConstantAndWriteNode | ConstantOrWriteNode | ConstantOperatorWriteNode | ConstantPathWriteNode | ConstantPathAndWriteNode | ConstantPathOrWriteNode | ConstantPathOperatorWriteNode }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, write: write }
    end

    # def literal?: () -> bool
    def literal?
      flags.anybits?(ShareableConstantNodeFlags::LITERAL)
    end

    # def experimental_everything?: () -> bool
    def experimental_everything?
      flags.anybits?(ShareableConstantNodeFlags::EXPERIMENTAL_EVERYTHING)
    end

    # def experimental_copy?: () -> bool
    def experimental_copy?
      flags.anybits?(ShareableConstantNodeFlags::EXPERIMENTAL_COPY)
    end

    # The constant write that should be modified with the shareability state.
    attr_reader :write

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :shareable_constant_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :shareable_constant_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(ShareableConstantNode) &&
        (flags === other.flags) &&
        (write === other.write)
    end
  end

  # Represents a singleton class declaration involving the `class` keyword.
  #
  #     class << self end
  #     ^^^^^^^^^^^^^^^^^
  class SingletonClassNode < Node
    # Initialize a new SingletonClassNode node.
    def initialize(source, node_id, location, flags, locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @locals = locals
      @class_keyword_loc = class_keyword_loc
      @operator_loc = operator_loc
      @expression = expression
      @body = body
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_singleton_class_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [expression, body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << expression
      compact << body if body
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [class_keyword_loc, operator_loc, expression, *body, end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?locals: Array[Symbol], ?class_keyword_loc: Location, ?operator_loc: Location, ?expression: Prism::node, ?body: StatementsNode | BeginNode | nil, ?end_keyword_loc: Location) -> SingletonClassNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, locals: self.locals, class_keyword_loc: self.class_keyword_loc, operator_loc: self.operator_loc, expression: self.expression, body: self.body, end_keyword_loc: self.end_keyword_loc)
      SingletonClassNode.new(source, node_id, location, flags, locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, locals: Array[Symbol], class_keyword_loc: Location, operator_loc: Location, expression: Prism::node, body: StatementsNode | BeginNode | nil, end_keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, locals: locals, class_keyword_loc: class_keyword_loc, operator_loc: operator_loc, expression: expression, body: body, end_keyword_loc: end_keyword_loc }
    end

    # attr_reader locals: Array[Symbol]
    attr_reader :locals

    # attr_reader class_keyword_loc: Location
    def class_keyword_loc
      location = @class_keyword_loc
      return location if location.is_a?(Location)
      @class_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the class_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_class_keyword_loc(repository)
      repository.enter(node_id, :class_keyword_loc)
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader expression: Prism::node
    attr_reader :expression

    # attr_reader body: StatementsNode | BeginNode | nil
    attr_reader :body

    # attr_reader end_keyword_loc: Location
    def end_keyword_loc
      location = @end_keyword_loc
      return location if location.is_a?(Location)
      @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc)
    end

    # def class_keyword: () -> String
    def class_keyword
      class_keyword_loc.slice
    end

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def end_keyword: () -> String
    def end_keyword
      end_keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :singleton_class_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :singleton_class_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SingletonClassNode) &&
        (locals.length == other.locals.length) &&
        locals.zip(other.locals).all? { |left, right| left === right } &&
        (class_keyword_loc.nil? == other.class_keyword_loc.nil?) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (expression === other.expression) &&
        (body === other.body) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents the use of the `__ENCODING__` keyword.
  #
  #     __ENCODING__
  #     ^^^^^^^^^^^^
  class SourceEncodingNode < Node
    # Initialize a new SourceEncodingNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_source_encoding_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> SourceEncodingNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      SourceEncodingNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :source_encoding_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :source_encoding_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SourceEncodingNode)
    end
  end

  # Represents the use of the `__FILE__` keyword.
  #
  #     __FILE__
  #     ^^^^^^^^
  class SourceFileNode < Node
    # Initialize a new SourceFileNode node.
    def initialize(source, node_id, location, flags, filepath)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @filepath = filepath
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_source_file_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?filepath: String) -> SourceFileNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, filepath: self.filepath)
      SourceFileNode.new(source, node_id, location, flags, filepath)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, filepath: String }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, filepath: filepath }
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(StringFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(StringFlags::FORCED_BINARY_ENCODING)
    end

    # def frozen?: () -> bool
    def frozen?
      flags.anybits?(StringFlags::FROZEN)
    end

    # def mutable?: () -> bool
    def mutable?
      flags.anybits?(StringFlags::MUTABLE)
    end

    # Represents the file path being parsed. This corresponds directly to the `filepath` option given to the various `Prism::parse*` APIs.
    attr_reader :filepath

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :source_file_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :source_file_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SourceFileNode) &&
        (flags === other.flags) &&
        (filepath === other.filepath)
    end
  end

  # Represents the use of the `__LINE__` keyword.
  #
  #     __LINE__
  #     ^^^^^^^^
  class SourceLineNode < Node
    # Initialize a new SourceLineNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_source_line_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> SourceLineNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      SourceLineNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :source_line_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :source_line_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SourceLineNode)
    end
  end

  # Represents the use of the splat operator.
  #
  #     [*a]
  #      ^^
  class SplatNode < Node
    # Initialize a new SplatNode node.
    def initialize(source, node_id, location, flags, operator_loc, expression)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @operator_loc = operator_loc
      @expression = expression
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_splat_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [expression]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << expression if expression
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [operator_loc, *expression] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?operator_loc: Location, ?expression: Prism::node?) -> SplatNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, operator_loc: self.operator_loc, expression: self.expression)
      SplatNode.new(source, node_id, location, flags, operator_loc, expression)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, operator_loc: Location, expression: Prism::node? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, operator_loc: operator_loc, expression: expression }
    end

    # attr_reader operator_loc: Location
    def operator_loc
      location = @operator_loc
      return location if location.is_a?(Location)
      @operator_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the operator_loc location using the given saved source so that
    # it can be retrieved later.
    def save_operator_loc(repository)
      repository.enter(node_id, :operator_loc)
    end

    # attr_reader expression: Prism::node?
    attr_reader :expression

    # def operator: () -> String
    def operator
      operator_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :splat_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :splat_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SplatNode) &&
        (operator_loc.nil? == other.operator_loc.nil?) &&
        (expression === other.expression)
    end
  end

  # Represents a set of statements contained within some scope.
  #
  #     foo; bar; baz
  #     ^^^^^^^^^^^^^
  class StatementsNode < Node
    # Initialize a new StatementsNode node.
    def initialize(source, node_id, location, flags, body)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @body = body
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_statements_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*body]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*body]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*body] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?body: Array[Prism::node]) -> StatementsNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, body: self.body)
      StatementsNode.new(source, node_id, location, flags, body)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, body: Array[Prism::node] }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, body: body }
    end

    # attr_reader body: Array[Prism::node]
    attr_reader :body

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :statements_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :statements_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(StatementsNode) &&
        (body.length == other.body.length) &&
        body.zip(other.body).all? { |left, right| left === right }
    end
  end

  # Represents a string literal, a string contained within a `%w` list, or plain string content within an interpolated string.
  #
  #     "foo"
  #     ^^^^^
  #
  #     %w[foo]
  #        ^^^
  #
  #     "foo #{bar} baz"
  #      ^^^^      ^^^^
  class StringNode < Node
    # Initialize a new StringNode node.
    def initialize(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @content_loc = content_loc
      @closing_loc = closing_loc
      @unescaped = unescaped
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_string_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*opening_loc, content_loc, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?content_loc: Location, ?closing_loc: Location?, ?unescaped: String) -> StringNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, content_loc: self.content_loc, closing_loc: self.closing_loc, unescaped: self.unescaped)
      StringNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location?, content_loc: Location, closing_loc: Location?, unescaped: String }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, content_loc: content_loc, closing_loc: closing_loc, unescaped: unescaped }
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(StringFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(StringFlags::FORCED_BINARY_ENCODING)
    end

    # def frozen?: () -> bool
    def frozen?
      flags.anybits?(StringFlags::FROZEN)
    end

    # def mutable?: () -> bool
    def mutable?
      flags.anybits?(StringFlags::MUTABLE)
    end

    # attr_reader opening_loc: Location?
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # attr_reader content_loc: Location
    def content_loc
      location = @content_loc
      return location if location.is_a?(Location)
      @content_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the content_loc location using the given saved source so that
    # it can be retrieved later.
    def save_content_loc(repository)
      repository.enter(node_id, :content_loc)
    end

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # attr_reader unescaped: String
    attr_reader :unescaped

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def content: () -> String
    def content
      content_loc.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :string_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :string_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(StringNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (content_loc.nil? == other.content_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (unescaped === other.unescaped)
    end
  end

  # Represents the use of the `super` keyword with parentheses or arguments.
  #
  #     super()
  #     ^^^^^^^
  #
  #     super foo, bar
  #     ^^^^^^^^^^^^^^
  class SuperNode < Node
    # Initialize a new SuperNode node.
    def initialize(source, node_id, location, flags, keyword_loc, lparen_loc, arguments, rparen_loc, block)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @lparen_loc = lparen_loc
      @arguments = arguments
      @rparen_loc = rparen_loc
      @block = block
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_super_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [arguments, block]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << arguments if arguments
      compact << block if block
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, *lparen_loc, *arguments, *rparen_loc, *block] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?lparen_loc: Location?, ?arguments: ArgumentsNode?, ?rparen_loc: Location?, ?block: BlockNode | BlockArgumentNode | nil) -> SuperNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, lparen_loc: self.lparen_loc, arguments: self.arguments, rparen_loc: self.rparen_loc, block: self.block)
      SuperNode.new(source, node_id, location, flags, keyword_loc, lparen_loc, arguments, rparen_loc, block)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, lparen_loc: Location?, arguments: ArgumentsNode?, rparen_loc: Location?, block: BlockNode | BlockArgumentNode | nil }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, lparen_loc: lparen_loc, arguments: arguments, rparen_loc: rparen_loc, block: block }
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader lparen_loc: Location?
    def lparen_loc
      location = @lparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the lparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc) unless @lparen_loc.nil?
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # attr_reader rparen_loc: Location?
    def rparen_loc
      location = @rparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the rparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc) unless @rparen_loc.nil?
    end

    # attr_reader block: BlockNode | BlockArgumentNode | nil
    attr_reader :block

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def lparen: () -> String?
    def lparen
      lparen_loc&.slice
    end

    # def rparen: () -> String?
    def rparen
      rparen_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :super_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :super_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SuperNode) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (lparen_loc.nil? == other.lparen_loc.nil?) &&
        (arguments === other.arguments) &&
        (rparen_loc.nil? == other.rparen_loc.nil?) &&
        (block === other.block)
    end
  end

  # Represents a symbol literal or a symbol contained within a `%i` list.
  #
  #     :foo
  #     ^^^^
  #
  #     %i[foo]
  #        ^^^
  class SymbolNode < Node
    # Initialize a new SymbolNode node.
    def initialize(source, node_id, location, flags, opening_loc, value_loc, closing_loc, unescaped)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @value_loc = value_loc
      @closing_loc = closing_loc
      @unescaped = unescaped
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_symbol_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*opening_loc, *value_loc, *closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?value_loc: Location?, ?closing_loc: Location?, ?unescaped: String) -> SymbolNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, value_loc: self.value_loc, closing_loc: self.closing_loc, unescaped: self.unescaped)
      SymbolNode.new(source, node_id, location, flags, opening_loc, value_loc, closing_loc, unescaped)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location?, value_loc: Location?, closing_loc: Location?, unescaped: String }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, value_loc: value_loc, closing_loc: closing_loc, unescaped: unescaped }
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(SymbolFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(SymbolFlags::FORCED_BINARY_ENCODING)
    end

    # def forced_us_ascii_encoding?: () -> bool
    def forced_us_ascii_encoding?
      flags.anybits?(SymbolFlags::FORCED_US_ASCII_ENCODING)
    end

    # attr_reader opening_loc: Location?
    def opening_loc
      location = @opening_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc) unless @opening_loc.nil?
    end

    # attr_reader value_loc: Location?
    def value_loc
      location = @value_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @value_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the value_loc location using the given saved source so that
    # it can be retrieved later.
    def save_value_loc(repository)
      repository.enter(node_id, :value_loc) unless @value_loc.nil?
    end

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # attr_reader unescaped: String
    attr_reader :unescaped

    # def opening: () -> String?
    def opening
      opening_loc&.slice
    end

    # def value: () -> String?
    def value
      value_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :symbol_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :symbol_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(SymbolNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (value_loc.nil? == other.value_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (unescaped === other.unescaped)
    end
  end

  # Represents the use of the literal `true` keyword.
  #
  #     true
  #     ^^^^
  class TrueNode < Node
    # Initialize a new TrueNode node.
    def initialize(source, node_id, location, flags)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_true_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer) -> TrueNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags)
      TrueNode.new(source, node_id, location, flags)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location }
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :true_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :true_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(TrueNode)
    end
  end

  # Represents the use of the `undef` keyword.
  #
  #     undef :foo, :bar, :baz
  #     ^^^^^^^^^^^^^^^^^^^^^^
  class UndefNode < Node
    # Initialize a new UndefNode node.
    def initialize(source, node_id, location, flags, names, keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @names = names
      @keyword_loc = keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_undef_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*names]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      [*names]
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [*names, keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?names: Array[SymbolNode | InterpolatedSymbolNode], ?keyword_loc: Location) -> UndefNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, names: self.names, keyword_loc: self.keyword_loc)
      UndefNode.new(source, node_id, location, flags, names, keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, names: Array[SymbolNode | InterpolatedSymbolNode], keyword_loc: Location }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, names: names, keyword_loc: keyword_loc }
    end

    # attr_reader names: Array[SymbolNode | InterpolatedSymbolNode]
    attr_reader :names

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :undef_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :undef_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(UndefNode) &&
        (names.length == other.names.length) &&
        names.zip(other.names).all? { |left, right| left === right } &&
        (keyword_loc.nil? == other.keyword_loc.nil?)
    end
  end

  # Represents the use of the `unless` keyword, either in the block form or the modifier form.
  #
  #     bar unless foo
  #     ^^^^^^^^^^^^^^
  #
  #     unless foo then bar end
  #     ^^^^^^^^^^^^^^^^^^^^^^^
  class UnlessNode < Node
    # Initialize a new UnlessNode node.
    def initialize(source, node_id, location, flags, keyword_loc, predicate, then_keyword_loc, statements, else_clause, end_keyword_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @predicate = predicate
      @then_keyword_loc = then_keyword_loc
      @statements = statements
      @else_clause = else_clause
      @end_keyword_loc = end_keyword_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_unless_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [predicate, statements, else_clause]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << predicate
      compact << statements if statements
      compact << else_clause if else_clause
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, predicate, *then_keyword_loc, *statements, *else_clause, *end_keyword_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?predicate: Prism::node, ?then_keyword_loc: Location?, ?statements: StatementsNode?, ?else_clause: ElseNode?, ?end_keyword_loc: Location?) -> UnlessNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, predicate: self.predicate, then_keyword_loc: self.then_keyword_loc, statements: self.statements, else_clause: self.else_clause, end_keyword_loc: self.end_keyword_loc)
      UnlessNode.new(source, node_id, location, flags, keyword_loc, predicate, then_keyword_loc, statements, else_clause, end_keyword_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, predicate: Prism::node, then_keyword_loc: Location?, statements: StatementsNode?, else_clause: ElseNode?, end_keyword_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, predicate: predicate, then_keyword_loc: then_keyword_loc, statements: statements, else_clause: else_clause, end_keyword_loc: end_keyword_loc }
    end

    # The location of the `unless` keyword.
    #
    #     unless cond then bar end
    #     ^^^^^^
    #
    #     bar unless cond
    #         ^^^^^^
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # The condition to be evaluated for the unless expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
    #
    #     unless cond then bar end
    #            ^^^^
    #
    #     bar unless cond
    #                ^^^^
    attr_reader :predicate

    # The location of the `then` keyword, if present.
    #
    #     unless cond then bar end
    #                 ^^^^
    def then_keyword_loc
      location = @then_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @then_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the then_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_then_keyword_loc(repository)
      repository.enter(node_id, :then_keyword_loc) unless @then_keyword_loc.nil?
    end

    # The body of statements that will executed if the unless condition is
    # falsey. Will be `nil` if no body is provided.
    #
    #     unless cond then bar end
    #                      ^^^
    attr_reader :statements

    # The else clause of the unless expression, if present.
    #
    #     unless cond then bar else baz end
    #                          ^^^^^^^^
    attr_reader :else_clause

    # The location of the `end` keyword, if present.
    #
    #     unless cond then bar end
    #                          ^^^
    def end_keyword_loc
      location = @end_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @end_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the end_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_end_keyword_loc(repository)
      repository.enter(node_id, :end_keyword_loc) unless @end_keyword_loc.nil?
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def then_keyword: () -> String?
    def then_keyword
      then_keyword_loc&.slice
    end

    # def end_keyword: () -> String?
    def end_keyword
      end_keyword_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :unless_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :unless_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(UnlessNode) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (predicate === other.predicate) &&
        (then_keyword_loc.nil? == other.then_keyword_loc.nil?) &&
        (statements === other.statements) &&
        (else_clause === other.else_clause) &&
        (end_keyword_loc.nil? == other.end_keyword_loc.nil?)
    end
  end

  # Represents the use of the `until` keyword, either in the block form or the modifier form.
  #
  #     bar until foo
  #     ^^^^^^^^^^^^^
  #
  #     until foo do bar end
  #     ^^^^^^^^^^^^^^^^^^^^
  class UntilNode < Node
    # Initialize a new UntilNode node.
    def initialize(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @do_keyword_loc = do_keyword_loc
      @closing_loc = closing_loc
      @predicate = predicate
      @statements = statements
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_until_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [predicate, statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << predicate
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, *do_keyword_loc, *closing_loc, predicate, *statements] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?do_keyword_loc: Location?, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> UntilNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, do_keyword_loc: self.do_keyword_loc, closing_loc: self.closing_loc, predicate: self.predicate, statements: self.statements)
      UntilNode.new(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, do_keyword_loc: Location?, closing_loc: Location?, predicate: Prism::node, statements: StatementsNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, do_keyword_loc: do_keyword_loc, closing_loc: closing_loc, predicate: predicate, statements: statements }
    end

    # def begin_modifier?: () -> bool
    def begin_modifier?
      flags.anybits?(LoopFlags::BEGIN_MODIFIER)
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader do_keyword_loc: Location?
    def do_keyword_loc
      location = @do_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @do_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the do_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_do_keyword_loc(repository)
      repository.enter(node_id, :do_keyword_loc) unless @do_keyword_loc.nil?
    end

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # attr_reader predicate: Prism::node
    attr_reader :predicate

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def do_keyword: () -> String?
    def do_keyword
      do_keyword_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :until_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :until_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(UntilNode) &&
        (flags === other.flags) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (do_keyword_loc.nil? == other.do_keyword_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (predicate === other.predicate) &&
        (statements === other.statements)
    end
  end

  # Represents the use of the `when` keyword within a case statement.
  #
  #     case true
  #     when true
  #     ^^^^^^^^^
  #     end
  class WhenNode < Node
    # Initialize a new WhenNode node.
    def initialize(source, node_id, location, flags, keyword_loc, conditions, then_keyword_loc, statements)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @conditions = conditions
      @then_keyword_loc = then_keyword_loc
      @statements = statements
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_when_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [*conditions, statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact.concat(conditions)
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, *conditions, *then_keyword_loc, *statements] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?conditions: Array[Prism::node], ?then_keyword_loc: Location?, ?statements: StatementsNode?) -> WhenNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, conditions: self.conditions, then_keyword_loc: self.then_keyword_loc, statements: self.statements)
      WhenNode.new(source, node_id, location, flags, keyword_loc, conditions, then_keyword_loc, statements)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, conditions: Array[Prism::node], then_keyword_loc: Location?, statements: StatementsNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, conditions: conditions, then_keyword_loc: then_keyword_loc, statements: statements }
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader conditions: Array[Prism::node]
    attr_reader :conditions

    # attr_reader then_keyword_loc: Location?
    def then_keyword_loc
      location = @then_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @then_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the then_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_then_keyword_loc(repository)
      repository.enter(node_id, :then_keyword_loc) unless @then_keyword_loc.nil?
    end

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def then_keyword: () -> String?
    def then_keyword
      then_keyword_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :when_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :when_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(WhenNode) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (conditions.length == other.conditions.length) &&
        conditions.zip(other.conditions).all? { |left, right| left === right } &&
        (then_keyword_loc.nil? == other.then_keyword_loc.nil?) &&
        (statements === other.statements)
    end
  end

  # Represents the use of the `while` keyword, either in the block form or the modifier form.
  #
  #     bar while foo
  #     ^^^^^^^^^^^^^
  #
  #     while foo do bar end
  #     ^^^^^^^^^^^^^^^^^^^^
  class WhileNode < Node
    # Initialize a new WhileNode node.
    def initialize(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @do_keyword_loc = do_keyword_loc
      @closing_loc = closing_loc
      @predicate = predicate
      @statements = statements
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_while_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [predicate, statements]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << predicate
      compact << statements if statements
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, *do_keyword_loc, *closing_loc, predicate, *statements] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?do_keyword_loc: Location?, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> WhileNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, do_keyword_loc: self.do_keyword_loc, closing_loc: self.closing_loc, predicate: self.predicate, statements: self.statements)
      WhileNode.new(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, do_keyword_loc: Location?, closing_loc: Location?, predicate: Prism::node, statements: StatementsNode? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, do_keyword_loc: do_keyword_loc, closing_loc: closing_loc, predicate: predicate, statements: statements }
    end

    # def begin_modifier?: () -> bool
    def begin_modifier?
      flags.anybits?(LoopFlags::BEGIN_MODIFIER)
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader do_keyword_loc: Location?
    def do_keyword_loc
      location = @do_keyword_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @do_keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the do_keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_do_keyword_loc(repository)
      repository.enter(node_id, :do_keyword_loc) unless @do_keyword_loc.nil?
    end

    # attr_reader closing_loc: Location?
    def closing_loc
      location = @closing_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc) unless @closing_loc.nil?
    end

    # attr_reader predicate: Prism::node
    attr_reader :predicate

    # attr_reader statements: StatementsNode?
    attr_reader :statements

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def do_keyword: () -> String?
    def do_keyword
      do_keyword_loc&.slice
    end

    # def closing: () -> String?
    def closing
      closing_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :while_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :while_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(WhileNode) &&
        (flags === other.flags) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (do_keyword_loc.nil? == other.do_keyword_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (predicate === other.predicate) &&
        (statements === other.statements)
    end
  end

  # Represents an xstring literal with no interpolation.
  #
  #     `foo`
  #     ^^^^^
  class XStringNode < Node
    # Initialize a new XStringNode node.
    def initialize(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @opening_loc = opening_loc
      @content_loc = content_loc
      @closing_loc = closing_loc
      @unescaped = unescaped
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_x_string_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      []
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      []
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [opening_loc, content_loc, closing_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?content_loc: Location, ?closing_loc: Location, ?unescaped: String) -> XStringNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, content_loc: self.content_loc, closing_loc: self.closing_loc, unescaped: self.unescaped)
      XStringNode.new(source, node_id, location, flags, opening_loc, content_loc, closing_loc, unescaped)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, opening_loc: opening_loc, content_loc: content_loc, closing_loc: closing_loc, unescaped: unescaped }
    end

    # def forced_utf8_encoding?: () -> bool
    def forced_utf8_encoding?
      flags.anybits?(EncodingFlags::FORCED_UTF8_ENCODING)
    end

    # def forced_binary_encoding?: () -> bool
    def forced_binary_encoding?
      flags.anybits?(EncodingFlags::FORCED_BINARY_ENCODING)
    end

    # attr_reader opening_loc: Location
    def opening_loc
      location = @opening_loc
      return location if location.is_a?(Location)
      @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the opening_loc location using the given saved source so that
    # it can be retrieved later.
    def save_opening_loc(repository)
      repository.enter(node_id, :opening_loc)
    end

    # attr_reader content_loc: Location
    def content_loc
      location = @content_loc
      return location if location.is_a?(Location)
      @content_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the content_loc location using the given saved source so that
    # it can be retrieved later.
    def save_content_loc(repository)
      repository.enter(node_id, :content_loc)
    end

    # attr_reader closing_loc: Location
    def closing_loc
      location = @closing_loc
      return location if location.is_a?(Location)
      @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the closing_loc location using the given saved source so that
    # it can be retrieved later.
    def save_closing_loc(repository)
      repository.enter(node_id, :closing_loc)
    end

    # attr_reader unescaped: String
    attr_reader :unescaped

    # def opening: () -> String
    def opening
      opening_loc.slice
    end

    # def content: () -> String
    def content
      content_loc.slice
    end

    # def closing: () -> String
    def closing
      closing_loc.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :x_string_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :x_string_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(XStringNode) &&
        (flags === other.flags) &&
        (opening_loc.nil? == other.opening_loc.nil?) &&
        (content_loc.nil? == other.content_loc.nil?) &&
        (closing_loc.nil? == other.closing_loc.nil?) &&
        (unescaped === other.unescaped)
    end
  end

  # Represents the use of the `yield` keyword.
  #
  #     yield 1
  #     ^^^^^^^
  class YieldNode < Node
    # Initialize a new YieldNode node.
    def initialize(source, node_id, location, flags, keyword_loc, lparen_loc, arguments, rparen_loc)
      @source = source
      @node_id = node_id
      @location = location
      @flags = flags
      @keyword_loc = keyword_loc
      @lparen_loc = lparen_loc
      @arguments = arguments
      @rparen_loc = rparen_loc
    end

    # def accept: (Visitor visitor) -> void
    def accept(visitor)
      visitor.visit_yield_node(self)
    end

    # def child_nodes: () -> Array[nil | Node]
    def child_nodes
      [arguments]
    end

    # def compact_child_nodes: () -> Array[Node]
    def compact_child_nodes
      compact = [] #: Array[Prism::node]
      compact << arguments if arguments
      compact
    end

    # def comment_targets: () -> Array[Node | Location]
    def comment_targets
      [keyword_loc, *lparen_loc, *arguments, *rparen_loc] #: Array[Prism::node | Location]
    end

    # def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?lparen_loc: Location?, ?arguments: ArgumentsNode?, ?rparen_loc: Location?) -> YieldNode
    def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, lparen_loc: self.lparen_loc, arguments: self.arguments, rparen_loc: self.rparen_loc)
      YieldNode.new(source, node_id, location, flags, keyword_loc, lparen_loc, arguments, rparen_loc)
    end

    # def deconstruct: () -> Array[nil | Node]
    alias deconstruct child_nodes

    # def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, lparen_loc: Location?, arguments: ArgumentsNode?, rparen_loc: Location? }
    def deconstruct_keys(keys)
      { node_id: node_id, location: location, keyword_loc: keyword_loc, lparen_loc: lparen_loc, arguments: arguments, rparen_loc: rparen_loc }
    end

    # attr_reader keyword_loc: Location
    def keyword_loc
      location = @keyword_loc
      return location if location.is_a?(Location)
      @keyword_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
    end

    # Save the keyword_loc location using the given saved source so that
    # it can be retrieved later.
    def save_keyword_loc(repository)
      repository.enter(node_id, :keyword_loc)
    end

    # attr_reader lparen_loc: Location?
    def lparen_loc
      location = @lparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @lparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the lparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_lparen_loc(repository)
      repository.enter(node_id, :lparen_loc) unless @lparen_loc.nil?
    end

    # attr_reader arguments: ArgumentsNode?
    attr_reader :arguments

    # attr_reader rparen_loc: Location?
    def rparen_loc
      location = @rparen_loc
      case location
      when nil
        nil
      when Location
        location
      else
        @rparen_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF)
      end
    end

    # Save the rparen_loc location using the given saved source so that
    # it can be retrieved later.
    def save_rparen_loc(repository)
      repository.enter(node_id, :rparen_loc) unless @rparen_loc.nil?
    end

    # def keyword: () -> String
    def keyword
      keyword_loc.slice
    end

    # def lparen: () -> String?
    def lparen
      lparen_loc&.slice
    end

    # def rparen: () -> String?
    def rparen
      rparen_loc&.slice
    end

    # def inspect -> String
    def inspect
      InspectVisitor.compose(self)
    end

    # Return a symbol representation of this node type. See `Node#type`.
    def type
      :yield_node
    end

    # Return a symbol representation of this node type. See `Node::type`.
    def self.type
      :yield_node
    end

    # Implements case-equality for the node. This is effectively == but without
    # comparing the value of locations. Locations are checked only for presence.
    def ===(other)
      other.is_a?(YieldNode) &&
        (keyword_loc.nil? == other.keyword_loc.nil?) &&
        (lparen_loc.nil? == other.lparen_loc.nil?) &&
        (arguments === other.arguments) &&
        (rparen_loc.nil? == other.rparen_loc.nil?)
    end
  end

  # Flags for arguments nodes.
  module ArgumentsNodeFlags
    # if the arguments contain forwarding
    CONTAINS_FORWARDING = 1 << 2

    # if the arguments contain keywords
    CONTAINS_KEYWORDS = 1 << 3

    # if the arguments contain a keyword splat
    CONTAINS_KEYWORD_SPLAT = 1 << 4

    # if the arguments contain a splat
    CONTAINS_SPLAT = 1 << 5

    # if the arguments contain multiple splats
    CONTAINS_MULTIPLE_SPLATS = 1 << 6
  end

  # Flags for array nodes.
  module ArrayNodeFlags
    # if array contains splat nodes
    CONTAINS_SPLAT = 1 << 2
  end

  # Flags for call nodes.
  module CallNodeFlags
    # &. operator
    SAFE_NAVIGATION = 1 << 2

    # a call that could have been a local variable
    VARIABLE_CALL = 1 << 3

    # a call that is an attribute write, so the value being written should be returned
    ATTRIBUTE_WRITE = 1 << 4

    # a call that ignores method visibility
    IGNORE_VISIBILITY = 1 << 5
  end

  # Flags for nodes that have unescaped content.
  module EncodingFlags
    # internal bytes forced the encoding to UTF-8
    FORCED_UTF8_ENCODING = 1 << 2

    # internal bytes forced the encoding to binary
    FORCED_BINARY_ENCODING = 1 << 3
  end

  # Flags for integer nodes that correspond to the base of the integer.
  module IntegerBaseFlags
    # 0b prefix
    BINARY = 1 << 2

    # 0d or no prefix
    DECIMAL = 1 << 3

    # 0o or 0 prefix
    OCTAL = 1 << 4

    # 0x prefix
    HEXADECIMAL = 1 << 5
  end

  # Flags for interpolated string nodes that indicated mutability if they are also marked as literals.
  module InterpolatedStringNodeFlags
    # frozen by virtue of a `frozen_string_literal: true` comment or `--enable-frozen-string-literal`; only for adjacent string literals like `'a' 'b'`
    FROZEN = 1 << 2

    # mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`; only for adjacent string literals like `'a' 'b'`
    MUTABLE = 1 << 3
  end

  # Flags for keyword hash nodes.
  module KeywordHashNodeFlags
    # a keyword hash which only has `AssocNode` elements all with symbol keys, which means the elements can be treated as keyword arguments
    SYMBOL_KEYS = 1 << 2
  end

  # Flags for while and until loop nodes.
  module LoopFlags
    # a loop after a begin statement, so the body is executed first before the condition
    BEGIN_MODIFIER = 1 << 2
  end

  # Flags for parameter nodes.
  module ParameterFlags
    # a parameter name that has been repeated in the method signature
    REPEATED_PARAMETER = 1 << 2
  end

  # Flags for range and flip-flop nodes.
  module RangeFlags
    # ... operator
    EXCLUDE_END = 1 << 2
  end

  # Flags for regular expression and match last line nodes.
  module RegularExpressionFlags
    # i - ignores the case of characters when matching
    IGNORE_CASE = 1 << 2

    # x - ignores whitespace and allows comments in regular expressions
    EXTENDED = 1 << 3

    # m - allows $ to match the end of lines within strings
    MULTI_LINE = 1 << 4

    # o - only interpolates values into the regular expression once
    ONCE = 1 << 5

    # e - forces the EUC-JP encoding
    EUC_JP = 1 << 6

    # n - forces the ASCII-8BIT encoding
    ASCII_8BIT = 1 << 7

    # s - forces the Windows-31J encoding
    WINDOWS_31J = 1 << 8

    # u - forces the UTF-8 encoding
    UTF_8 = 1 << 9

    # internal bytes forced the encoding to UTF-8
    FORCED_UTF8_ENCODING = 1 << 10

    # internal bytes forced the encoding to binary
    FORCED_BINARY_ENCODING = 1 << 11

    # internal bytes forced the encoding to US-ASCII
    FORCED_US_ASCII_ENCODING = 1 << 12
  end

  # Flags for shareable constant nodes.
  module ShareableConstantNodeFlags
    # constant writes that should be modified with shareable constant value literal
    LITERAL = 1 << 2

    # constant writes that should be modified with shareable constant value experimental everything
    EXPERIMENTAL_EVERYTHING = 1 << 3

    # constant writes that should be modified with shareable constant value experimental copy
    EXPERIMENTAL_COPY = 1 << 4
  end

  # Flags for string nodes.
  module StringFlags
    # internal bytes forced the encoding to UTF-8
    FORCED_UTF8_ENCODING = 1 << 2

    # internal bytes forced the encoding to binary
    FORCED_BINARY_ENCODING = 1 << 3

    # frozen by virtue of a `frozen_string_literal: true` comment or `--enable-frozen-string-literal`
    FROZEN = 1 << 4

    # mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`
    MUTABLE = 1 << 5
  end

  # Flags for symbol nodes.
  module SymbolFlags
    # internal bytes forced the encoding to UTF-8
    FORCED_UTF8_ENCODING = 1 << 2

    # internal bytes forced the encoding to binary
    FORCED_BINARY_ENCODING = 1 << 3

    # internal bytes forced the encoding to US-ASCII
    FORCED_US_ASCII_ENCODING = 1 << 4
  end

  # The flags that are common to all nodes.
  module NodeFlags
    # A flag to indicate that the node is a candidate to emit a :line event
    # through tracepoint when compiled.
    NEWLINE = 1

    # A flag to indicate that the value that the node represents is a value that
    # can be determined at parse-time.
    STATIC_LITERAL = 2
  end
end
PK*J[�������#share/ruby/prism/inspect_visitor.rbnu�[���# frozen_string_literal: true

=begin
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/inspect_visitor.rb.erb
if you are looking to modify the template
=end

module Prism
  # This visitor is responsible for composing the strings that get returned by
  # the various #inspect methods defined on each of the nodes.
  class InspectVisitor < Visitor
    # Most of the time, we can simply pass down the indent to the next node.
    # However, when we are inside a list we want some extra special formatting
    # when we hit an element in that list. In this case, we have a special
    # command that replaces the subsequent indent with the given value.
    class Replace # :nodoc:
      attr_reader :value

      def initialize(value)
        @value = value
      end
    end

    private_constant :Replace

    # The current prefix string.
    attr_reader :indent

    # The list of commands that we need to execute in order to compose the
    # final string.
    attr_reader :commands

    # Initializes a new instance of the InspectVisitor.
    def initialize(indent = +"")
      @indent = indent
      @commands = []
    end

    # Compose an inspect string for the given node.
    def self.compose(node)
      visitor = new
      node.accept(visitor)
      visitor.compose
    end

    # Compose the final string.
    def compose
      buffer = +""
      replace = nil

      until commands.empty?
        # @type var command: String | node | Replace
        # @type var indent: String
        command, indent = *commands.shift

        case command
        when String
          buffer << (replace || indent)
          buffer << command
          replace = nil
        when Node
          visitor = InspectVisitor.new(indent)
          command.accept(visitor)
          @commands = [*visitor.commands, *@commands]
        when Replace
          replace = command.value
        else
          raise "Unknown command: #{command.inspect}"
        end
      end

      buffer
    end

    # Inspect a AliasGlobalVariableNode node.
    def visit_alias_global_variable_node(node)
      commands << [inspect_node("AliasGlobalVariableNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── new_name:\n", indent]
      commands << [node.new_name, "#{indent}│   "]
      commands << ["├── old_name:\n", indent]
      commands << [node.old_name, "#{indent}│   "]
      commands << ["└── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
    end

    # Inspect a AliasMethodNode node.
    def visit_alias_method_node(node)
      commands << [inspect_node("AliasMethodNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── new_name:\n", indent]
      commands << [node.new_name, "#{indent}│   "]
      commands << ["├── old_name:\n", indent]
      commands << [node.old_name, "#{indent}│   "]
      commands << ["└── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
    end

    # Inspect a AlternationPatternNode node.
    def visit_alternation_pattern_node(node)
      commands << [inspect_node("AlternationPatternNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── left:\n", indent]
      commands << [node.left, "#{indent}│   "]
      commands << ["├── right:\n", indent]
      commands << [node.right, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a AndNode node.
    def visit_and_node(node)
      commands << [inspect_node("AndNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── left:\n", indent]
      commands << [node.left, "#{indent}│   "]
      commands << ["├── right:\n", indent]
      commands << [node.right, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a ArgumentsNode node.
    def visit_arguments_node(node)
      commands << [inspect_node("ArgumentsNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("contains_forwarding" if node.contains_forwarding?), ("contains_keywords" if node.contains_keywords?), ("contains_keyword_splat" if node.contains_keyword_splat?), ("contains_splat" if node.contains_splat?), ("contains_multiple_splats" if node.contains_multiple_splats?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── arguments: (length: #{(arguments = node.arguments).length})\n", indent]
      if arguments.any?
        arguments[0...-1].each do |child|
          commands << [Replace.new("#{indent}    ├── "), indent]
          commands << [child, "#{indent}    │   "]
        end
        commands << [Replace.new("#{indent}    └── "), indent]
        commands << [arguments[-1], "#{indent}        "]
      end
    end

    # Inspect a ArrayNode node.
    def visit_array_node(node)
      commands << [inspect_node("ArrayNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("contains_splat" if node.contains_splat?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── elements: (length: #{(elements = node.elements).length})\n", indent]
      if elements.any?
        elements[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [elements[-1], "#{indent}│       "]
      end
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a ArrayPatternNode node.
    def visit_array_pattern_node(node)
      commands << [inspect_node("ArrayPatternNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (constant = node.constant).nil?
        commands << ["├── constant: ∅\n", indent]
      else
        commands << ["├── constant:\n", indent]
        commands << [constant, "#{indent}│   "]
      end
      commands << ["├── requireds: (length: #{(requireds = node.requireds).length})\n", indent]
      if requireds.any?
        requireds[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [requireds[-1], "#{indent}│       "]
      end
      if (rest = node.rest).nil?
        commands << ["├── rest: ∅\n", indent]
      else
        commands << ["├── rest:\n", indent]
        commands << [rest, "#{indent}│   "]
      end
      commands << ["├── posts: (length: #{(posts = node.posts).length})\n", indent]
      if posts.any?
        posts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [posts[-1], "#{indent}│       "]
      end
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a AssocNode node.
    def visit_assoc_node(node)
      commands << [inspect_node("AssocNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── key:\n", indent]
      commands << [node.key, "#{indent}│   "]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a AssocSplatNode node.
    def visit_assoc_splat_node(node)
      commands << [inspect_node("AssocSplatNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (value = node.value).nil?
        commands << ["├── value: ∅\n", indent]
      else
        commands << ["├── value:\n", indent]
        commands << [value, "#{indent}│   "]
      end
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a BackReferenceReadNode node.
    def visit_back_reference_read_node(node)
      commands << [inspect_node("BackReferenceReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a BeginNode node.
    def visit_begin_node(node)
      commands << [inspect_node("BeginNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── begin_keyword_loc: #{inspect_location(node.begin_keyword_loc)}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      if (rescue_clause = node.rescue_clause).nil?
        commands << ["├── rescue_clause: ∅\n", indent]
      else
        commands << ["├── rescue_clause:\n", indent]
        commands << [rescue_clause, "#{indent}│   "]
      end
      if (else_clause = node.else_clause).nil?
        commands << ["├── else_clause: ∅\n", indent]
      else
        commands << ["├── else_clause:\n", indent]
        commands << [else_clause, "#{indent}│   "]
      end
      if (ensure_clause = node.ensure_clause).nil?
        commands << ["├── ensure_clause: ∅\n", indent]
      else
        commands << ["├── ensure_clause:\n", indent]
        commands << [ensure_clause, "#{indent}│   "]
      end
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a BlockArgumentNode node.
    def visit_block_argument_node(node)
      commands << [inspect_node("BlockArgumentNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (expression = node.expression).nil?
        commands << ["├── expression: ∅\n", indent]
      else
        commands << ["├── expression:\n", indent]
        commands << [expression, "#{indent}│   "]
      end
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a BlockLocalVariableNode node.
    def visit_block_local_variable_node(node)
      commands << [inspect_node("BlockLocalVariableNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a BlockNode node.
    def visit_block_node(node)
      commands << [inspect_node("BlockNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── locals: #{node.locals.inspect}\n", indent]
      if (parameters = node.parameters).nil?
        commands << ["├── parameters: ∅\n", indent]
      else
        commands << ["├── parameters:\n", indent]
        commands << [parameters, "#{indent}│   "]
      end
      if (body = node.body).nil?
        commands << ["├── body: ∅\n", indent]
      else
        commands << ["├── body:\n", indent]
        commands << [body, "#{indent}│   "]
      end
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a BlockParameterNode node.
    def visit_block_parameter_node(node)
      commands << [inspect_node("BlockParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (name = node.name).nil?
        commands << ["├── name: ∅\n", indent]
      else
        commands << ["├── name: #{name.inspect}\n", indent]
      end
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a BlockParametersNode node.
    def visit_block_parameters_node(node)
      commands << [inspect_node("BlockParametersNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (parameters = node.parameters).nil?
        commands << ["├── parameters: ∅\n", indent]
      else
        commands << ["├── parameters:\n", indent]
        commands << [parameters, "#{indent}│   "]
      end
      commands << ["├── locals: (length: #{(locals = node.locals).length})\n", indent]
      if locals.any?
        locals[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [locals[-1], "#{indent}│       "]
      end
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a BreakNode node.
    def visit_break_node(node)
      commands << [inspect_node("BreakNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["└── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
    end

    # Inspect a CallAndWriteNode node.
    def visit_call_and_write_node(node)
      commands << [inspect_node("CallAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── message_loc: #{inspect_location(node.message_loc)}\n", indent]
      commands << ["├── read_name: #{node.read_name.inspect}\n", indent]
      commands << ["├── write_name: #{node.write_name.inspect}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a CallNode node.
    def visit_call_node(node)
      commands << [inspect_node("CallNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── message_loc: #{inspect_location(node.message_loc)}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      if (block = node.block).nil?
        commands << ["└── block: ∅\n", indent]
      else
        commands << ["└── block:\n", indent]
        commands << [block, "#{indent}    "]
      end
    end

    # Inspect a CallOperatorWriteNode node.
    def visit_call_operator_write_node(node)
      commands << [inspect_node("CallOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── message_loc: #{inspect_location(node.message_loc)}\n", indent]
      commands << ["├── read_name: #{node.read_name.inspect}\n", indent]
      commands << ["├── write_name: #{node.write_name.inspect}\n", indent]
      commands << ["├── binary_operator: #{node.binary_operator.inspect}\n", indent]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a CallOrWriteNode node.
    def visit_call_or_write_node(node)
      commands << [inspect_node("CallOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── message_loc: #{inspect_location(node.message_loc)}\n", indent]
      commands << ["├── read_name: #{node.read_name.inspect}\n", indent]
      commands << ["├── write_name: #{node.write_name.inspect}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a CallTargetNode node.
    def visit_call_target_node(node)
      commands << [inspect_node("CallTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── receiver:\n", indent]
      commands << [node.receiver, "#{indent}│   "]
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["└── message_loc: #{inspect_location(node.message_loc)}\n", indent]
    end

    # Inspect a CapturePatternNode node.
    def visit_capture_pattern_node(node)
      commands << [inspect_node("CapturePatternNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["├── target:\n", indent]
      commands << [node.target, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a CaseMatchNode node.
    def visit_case_match_node(node)
      commands << [inspect_node("CaseMatchNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (predicate = node.predicate).nil?
        commands << ["├── predicate: ∅\n", indent]
      else
        commands << ["├── predicate:\n", indent]
        commands << [predicate, "#{indent}│   "]
      end
      commands << ["├── conditions: (length: #{(conditions = node.conditions).length})\n", indent]
      if conditions.any?
        conditions[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [conditions[-1], "#{indent}│       "]
      end
      if (else_clause = node.else_clause).nil?
        commands << ["├── else_clause: ∅\n", indent]
      else
        commands << ["├── else_clause:\n", indent]
        commands << [else_clause, "#{indent}│   "]
      end
      commands << ["├── case_keyword_loc: #{inspect_location(node.case_keyword_loc)}\n", indent]
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a CaseNode node.
    def visit_case_node(node)
      commands << [inspect_node("CaseNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (predicate = node.predicate).nil?
        commands << ["├── predicate: ∅\n", indent]
      else
        commands << ["├── predicate:\n", indent]
        commands << [predicate, "#{indent}│   "]
      end
      commands << ["├── conditions: (length: #{(conditions = node.conditions).length})\n", indent]
      if conditions.any?
        conditions[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [conditions[-1], "#{indent}│       "]
      end
      if (else_clause = node.else_clause).nil?
        commands << ["├── else_clause: ∅\n", indent]
      else
        commands << ["├── else_clause:\n", indent]
        commands << [else_clause, "#{indent}│   "]
      end
      commands << ["├── case_keyword_loc: #{inspect_location(node.case_keyword_loc)}\n", indent]
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a ClassNode node.
    def visit_class_node(node)
      commands << [inspect_node("ClassNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── locals: #{node.locals.inspect}\n", indent]
      commands << ["├── class_keyword_loc: #{inspect_location(node.class_keyword_loc)}\n", indent]
      commands << ["├── constant_path:\n", indent]
      commands << [node.constant_path, "#{indent}│   "]
      commands << ["├── inheritance_operator_loc: #{inspect_location(node.inheritance_operator_loc)}\n", indent]
      if (superclass = node.superclass).nil?
        commands << ["├── superclass: ∅\n", indent]
      else
        commands << ["├── superclass:\n", indent]
        commands << [superclass, "#{indent}│   "]
      end
      if (body = node.body).nil?
        commands << ["├── body: ∅\n", indent]
      else
        commands << ["├── body:\n", indent]
        commands << [body, "#{indent}│   "]
      end
      commands << ["├── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a ClassVariableAndWriteNode node.
    def visit_class_variable_and_write_node(node)
      commands << [inspect_node("ClassVariableAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ClassVariableOperatorWriteNode node.
    def visit_class_variable_operator_write_node(node)
      commands << [inspect_node("ClassVariableOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── binary_operator: #{node.binary_operator.inspect}\n", indent]
    end

    # Inspect a ClassVariableOrWriteNode node.
    def visit_class_variable_or_write_node(node)
      commands << [inspect_node("ClassVariableOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ClassVariableReadNode node.
    def visit_class_variable_read_node(node)
      commands << [inspect_node("ClassVariableReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a ClassVariableTargetNode node.
    def visit_class_variable_target_node(node)
      commands << [inspect_node("ClassVariableTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a ClassVariableWriteNode node.
    def visit_class_variable_write_node(node)
      commands << [inspect_node("ClassVariableWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a ConstantAndWriteNode node.
    def visit_constant_and_write_node(node)
      commands << [inspect_node("ConstantAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ConstantOperatorWriteNode node.
    def visit_constant_operator_write_node(node)
      commands << [inspect_node("ConstantOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── binary_operator: #{node.binary_operator.inspect}\n", indent]
    end

    # Inspect a ConstantOrWriteNode node.
    def visit_constant_or_write_node(node)
      commands << [inspect_node("ConstantOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ConstantPathAndWriteNode node.
    def visit_constant_path_and_write_node(node)
      commands << [inspect_node("ConstantPathAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── target:\n", indent]
      commands << [node.target, "#{indent}│   "]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ConstantPathNode node.
    def visit_constant_path_node(node)
      commands << [inspect_node("ConstantPathNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (parent = node.parent).nil?
        commands << ["├── parent: ∅\n", indent]
      else
        commands << ["├── parent:\n", indent]
        commands << [parent, "#{indent}│   "]
      end
      if (name = node.name).nil?
        commands << ["├── name: ∅\n", indent]
      else
        commands << ["├── name: #{name.inspect}\n", indent]
      end
      commands << ["├── delimiter_loc: #{inspect_location(node.delimiter_loc)}\n", indent]
      commands << ["└── name_loc: #{inspect_location(node.name_loc)}\n", indent]
    end

    # Inspect a ConstantPathOperatorWriteNode node.
    def visit_constant_path_operator_write_node(node)
      commands << [inspect_node("ConstantPathOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── target:\n", indent]
      commands << [node.target, "#{indent}│   "]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── binary_operator: #{node.binary_operator.inspect}\n", indent]
    end

    # Inspect a ConstantPathOrWriteNode node.
    def visit_constant_path_or_write_node(node)
      commands << [inspect_node("ConstantPathOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── target:\n", indent]
      commands << [node.target, "#{indent}│   "]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ConstantPathTargetNode node.
    def visit_constant_path_target_node(node)
      commands << [inspect_node("ConstantPathTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (parent = node.parent).nil?
        commands << ["├── parent: ∅\n", indent]
      else
        commands << ["├── parent:\n", indent]
        commands << [parent, "#{indent}│   "]
      end
      if (name = node.name).nil?
        commands << ["├── name: ∅\n", indent]
      else
        commands << ["├── name: #{name.inspect}\n", indent]
      end
      commands << ["├── delimiter_loc: #{inspect_location(node.delimiter_loc)}\n", indent]
      commands << ["└── name_loc: #{inspect_location(node.name_loc)}\n", indent]
    end

    # Inspect a ConstantPathWriteNode node.
    def visit_constant_path_write_node(node)
      commands << [inspect_node("ConstantPathWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── target:\n", indent]
      commands << [node.target, "#{indent}│   "]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ConstantReadNode node.
    def visit_constant_read_node(node)
      commands << [inspect_node("ConstantReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a ConstantTargetNode node.
    def visit_constant_target_node(node)
      commands << [inspect_node("ConstantTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a ConstantWriteNode node.
    def visit_constant_write_node(node)
      commands << [inspect_node("ConstantWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a DefNode node.
    def visit_def_node(node)
      commands << [inspect_node("DefNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      if (parameters = node.parameters).nil?
        commands << ["├── parameters: ∅\n", indent]
      else
        commands << ["├── parameters:\n", indent]
        commands << [parameters, "#{indent}│   "]
      end
      if (body = node.body).nil?
        commands << ["├── body: ∅\n", indent]
      else
        commands << ["├── body:\n", indent]
        commands << [body, "#{indent}│   "]
      end
      commands << ["├── locals: #{node.locals.inspect}\n", indent]
      commands << ["├── def_keyword_loc: #{inspect_location(node.def_keyword_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["├── lparen_loc: #{inspect_location(node.lparen_loc)}\n", indent]
      commands << ["├── rparen_loc: #{inspect_location(node.rparen_loc)}\n", indent]
      commands << ["├── equal_loc: #{inspect_location(node.equal_loc)}\n", indent]
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a DefinedNode node.
    def visit_defined_node(node)
      commands << [inspect_node("DefinedNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── lparen_loc: #{inspect_location(node.lparen_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["├── rparen_loc: #{inspect_location(node.rparen_loc)}\n", indent]
      commands << ["└── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
    end

    # Inspect a ElseNode node.
    def visit_else_node(node)
      commands << [inspect_node("ElseNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── else_keyword_loc: #{inspect_location(node.else_keyword_loc)}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a EmbeddedStatementsNode node.
    def visit_embedded_statements_node(node)
      commands << [inspect_node("EmbeddedStatementsNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a EmbeddedVariableNode node.
    def visit_embedded_variable_node(node)
      commands << [inspect_node("EmbeddedVariableNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── variable:\n", indent]
      commands << [node.variable, "#{indent}    "]
    end

    # Inspect a EnsureNode node.
    def visit_ensure_node(node)
      commands << [inspect_node("EnsureNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── ensure_keyword_loc: #{inspect_location(node.ensure_keyword_loc)}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a FalseNode node.
    def visit_false_node(node)
      commands << [inspect_node("FalseNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a FindPatternNode node.
    def visit_find_pattern_node(node)
      commands << [inspect_node("FindPatternNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (constant = node.constant).nil?
        commands << ["├── constant: ∅\n", indent]
      else
        commands << ["├── constant:\n", indent]
        commands << [constant, "#{indent}│   "]
      end
      commands << ["├── left:\n", indent]
      commands << [node.left, "#{indent}│   "]
      commands << ["├── requireds: (length: #{(requireds = node.requireds).length})\n", indent]
      if requireds.any?
        requireds[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [requireds[-1], "#{indent}│       "]
      end
      commands << ["├── right:\n", indent]
      commands << [node.right, "#{indent}│   "]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a FlipFlopNode node.
    def visit_flip_flop_node(node)
      commands << [inspect_node("FlipFlopNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("exclude_end" if node.exclude_end?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (left = node.left).nil?
        commands << ["├── left: ∅\n", indent]
      else
        commands << ["├── left:\n", indent]
        commands << [left, "#{indent}│   "]
      end
      if (right = node.right).nil?
        commands << ["├── right: ∅\n", indent]
      else
        commands << ["├── right:\n", indent]
        commands << [right, "#{indent}│   "]
      end
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a FloatNode node.
    def visit_float_node(node)
      commands << [inspect_node("FloatNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── value: #{node.value.inspect}\n", indent]
    end

    # Inspect a ForNode node.
    def visit_for_node(node)
      commands << [inspect_node("ForNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── index:\n", indent]
      commands << [node.index, "#{indent}│   "]
      commands << ["├── collection:\n", indent]
      commands << [node.collection, "#{indent}│   "]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      commands << ["├── for_keyword_loc: #{inspect_location(node.for_keyword_loc)}\n", indent]
      commands << ["├── in_keyword_loc: #{inspect_location(node.in_keyword_loc)}\n", indent]
      commands << ["├── do_keyword_loc: #{inspect_location(node.do_keyword_loc)}\n", indent]
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a ForwardingArgumentsNode node.
    def visit_forwarding_arguments_node(node)
      commands << [inspect_node("ForwardingArgumentsNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a ForwardingParameterNode node.
    def visit_forwarding_parameter_node(node)
      commands << [inspect_node("ForwardingParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a ForwardingSuperNode node.
    def visit_forwarding_super_node(node)
      commands << [inspect_node("ForwardingSuperNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (block = node.block).nil?
        commands << ["└── block: ∅\n", indent]
      else
        commands << ["└── block:\n", indent]
        commands << [block, "#{indent}    "]
      end
    end

    # Inspect a GlobalVariableAndWriteNode node.
    def visit_global_variable_and_write_node(node)
      commands << [inspect_node("GlobalVariableAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a GlobalVariableOperatorWriteNode node.
    def visit_global_variable_operator_write_node(node)
      commands << [inspect_node("GlobalVariableOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── binary_operator: #{node.binary_operator.inspect}\n", indent]
    end

    # Inspect a GlobalVariableOrWriteNode node.
    def visit_global_variable_or_write_node(node)
      commands << [inspect_node("GlobalVariableOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a GlobalVariableReadNode node.
    def visit_global_variable_read_node(node)
      commands << [inspect_node("GlobalVariableReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a GlobalVariableTargetNode node.
    def visit_global_variable_target_node(node)
      commands << [inspect_node("GlobalVariableTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a GlobalVariableWriteNode node.
    def visit_global_variable_write_node(node)
      commands << [inspect_node("GlobalVariableWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a HashNode node.
    def visit_hash_node(node)
      commands << [inspect_node("HashNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── elements: (length: #{(elements = node.elements).length})\n", indent]
      if elements.any?
        elements[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [elements[-1], "#{indent}│       "]
      end
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a HashPatternNode node.
    def visit_hash_pattern_node(node)
      commands << [inspect_node("HashPatternNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (constant = node.constant).nil?
        commands << ["├── constant: ∅\n", indent]
      else
        commands << ["├── constant:\n", indent]
        commands << [constant, "#{indent}│   "]
      end
      commands << ["├── elements: (length: #{(elements = node.elements).length})\n", indent]
      if elements.any?
        elements[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [elements[-1], "#{indent}│       "]
      end
      if (rest = node.rest).nil?
        commands << ["├── rest: ∅\n", indent]
      else
        commands << ["├── rest:\n", indent]
        commands << [rest, "#{indent}│   "]
      end
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a IfNode node.
    def visit_if_node(node)
      commands << [inspect_node("IfNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── if_keyword_loc: #{inspect_location(node.if_keyword_loc)}\n", indent]
      commands << ["├── predicate:\n", indent]
      commands << [node.predicate, "#{indent}│   "]
      commands << ["├── then_keyword_loc: #{inspect_location(node.then_keyword_loc)}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      if (subsequent = node.subsequent).nil?
        commands << ["├── subsequent: ∅\n", indent]
      else
        commands << ["├── subsequent:\n", indent]
        commands << [subsequent, "#{indent}│   "]
      end
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a ImaginaryNode node.
    def visit_imaginary_node(node)
      commands << [inspect_node("ImaginaryNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── numeric:\n", indent]
      commands << [node.numeric, "#{indent}    "]
    end

    # Inspect a ImplicitNode node.
    def visit_implicit_node(node)
      commands << [inspect_node("ImplicitNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a ImplicitRestNode node.
    def visit_implicit_rest_node(node)
      commands << [inspect_node("ImplicitRestNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a InNode node.
    def visit_in_node(node)
      commands << [inspect_node("InNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── pattern:\n", indent]
      commands << [node.pattern, "#{indent}│   "]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      commands << ["├── in_loc: #{inspect_location(node.in_loc)}\n", indent]
      commands << ["└── then_loc: #{inspect_location(node.then_loc)}\n", indent]
    end

    # Inspect a IndexAndWriteNode node.
    def visit_index_and_write_node(node)
      commands << [inspect_node("IndexAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      if (block = node.block).nil?
        commands << ["├── block: ∅\n", indent]
      else
        commands << ["├── block:\n", indent]
        commands << [block, "#{indent}│   "]
      end
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a IndexOperatorWriteNode node.
    def visit_index_operator_write_node(node)
      commands << [inspect_node("IndexOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      if (block = node.block).nil?
        commands << ["├── block: ∅\n", indent]
      else
        commands << ["├── block:\n", indent]
        commands << [block, "#{indent}│   "]
      end
      commands << ["├── binary_operator: #{node.binary_operator.inspect}\n", indent]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a IndexOrWriteNode node.
    def visit_index_or_write_node(node)
      commands << [inspect_node("IndexOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (receiver = node.receiver).nil?
        commands << ["├── receiver: ∅\n", indent]
      else
        commands << ["├── receiver:\n", indent]
        commands << [receiver, "#{indent}│   "]
      end
      commands << ["├── call_operator_loc: #{inspect_location(node.call_operator_loc)}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      if (block = node.block).nil?
        commands << ["├── block: ∅\n", indent]
      else
        commands << ["├── block:\n", indent]
        commands << [block, "#{indent}│   "]
      end
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a IndexTargetNode node.
    def visit_index_target_node(node)
      commands << [inspect_node("IndexTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("safe_navigation" if node.safe_navigation?), ("variable_call" if node.variable_call?), ("attribute_write" if node.attribute_write?), ("ignore_visibility" if node.ignore_visibility?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── receiver:\n", indent]
      commands << [node.receiver, "#{indent}│   "]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      if (block = node.block).nil?
        commands << ["└── block: ∅\n", indent]
      else
        commands << ["└── block:\n", indent]
        commands << [block, "#{indent}    "]
      end
    end

    # Inspect a InstanceVariableAndWriteNode node.
    def visit_instance_variable_and_write_node(node)
      commands << [inspect_node("InstanceVariableAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a InstanceVariableOperatorWriteNode node.
    def visit_instance_variable_operator_write_node(node)
      commands << [inspect_node("InstanceVariableOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── binary_operator: #{node.binary_operator.inspect}\n", indent]
    end

    # Inspect a InstanceVariableOrWriteNode node.
    def visit_instance_variable_or_write_node(node)
      commands << [inspect_node("InstanceVariableOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a InstanceVariableReadNode node.
    def visit_instance_variable_read_node(node)
      commands << [inspect_node("InstanceVariableReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a InstanceVariableTargetNode node.
    def visit_instance_variable_target_node(node)
      commands << [inspect_node("InstanceVariableTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a InstanceVariableWriteNode node.
    def visit_instance_variable_write_node(node)
      commands << [inspect_node("InstanceVariableWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a IntegerNode node.
    def visit_integer_node(node)
      commands << [inspect_node("IntegerNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("binary" if node.binary?), ("decimal" if node.decimal?), ("octal" if node.octal?), ("hexadecimal" if node.hexadecimal?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── value: #{node.value.inspect}\n", indent]
    end

    # Inspect a InterpolatedMatchLastLineNode node.
    def visit_interpolated_match_last_line_node(node)
      commands << [inspect_node("InterpolatedMatchLastLineNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("ignore_case" if node.ignore_case?), ("extended" if node.extended?), ("multi_line" if node.multi_line?), ("once" if node.once?), ("euc_jp" if node.euc_jp?), ("ascii_8bit" if node.ascii_8bit?), ("windows_31j" if node.windows_31j?), ("utf_8" if node.utf_8?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?), ("forced_us_ascii_encoding" if node.forced_us_ascii_encoding?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── parts: (length: #{(parts = node.parts).length})\n", indent]
      if parts.any?
        parts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [parts[-1], "#{indent}│       "]
      end
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a InterpolatedRegularExpressionNode node.
    def visit_interpolated_regular_expression_node(node)
      commands << [inspect_node("InterpolatedRegularExpressionNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("ignore_case" if node.ignore_case?), ("extended" if node.extended?), ("multi_line" if node.multi_line?), ("once" if node.once?), ("euc_jp" if node.euc_jp?), ("ascii_8bit" if node.ascii_8bit?), ("windows_31j" if node.windows_31j?), ("utf_8" if node.utf_8?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?), ("forced_us_ascii_encoding" if node.forced_us_ascii_encoding?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── parts: (length: #{(parts = node.parts).length})\n", indent]
      if parts.any?
        parts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [parts[-1], "#{indent}│       "]
      end
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a InterpolatedStringNode node.
    def visit_interpolated_string_node(node)
      commands << [inspect_node("InterpolatedStringNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("frozen" if node.frozen?), ("mutable" if node.mutable?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── parts: (length: #{(parts = node.parts).length})\n", indent]
      if parts.any?
        parts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [parts[-1], "#{indent}│       "]
      end
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a InterpolatedSymbolNode node.
    def visit_interpolated_symbol_node(node)
      commands << [inspect_node("InterpolatedSymbolNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── parts: (length: #{(parts = node.parts).length})\n", indent]
      if parts.any?
        parts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [parts[-1], "#{indent}│       "]
      end
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a InterpolatedXStringNode node.
    def visit_interpolated_x_string_node(node)
      commands << [inspect_node("InterpolatedXStringNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── parts: (length: #{(parts = node.parts).length})\n", indent]
      if parts.any?
        parts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [parts[-1], "#{indent}│       "]
      end
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a ItLocalVariableReadNode node.
    def visit_it_local_variable_read_node(node)
      commands << [inspect_node("ItLocalVariableReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a ItParametersNode node.
    def visit_it_parameters_node(node)
      commands << [inspect_node("ItParametersNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a KeywordHashNode node.
    def visit_keyword_hash_node(node)
      commands << [inspect_node("KeywordHashNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("symbol_keys" if node.symbol_keys?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── elements: (length: #{(elements = node.elements).length})\n", indent]
      if elements.any?
        elements[0...-1].each do |child|
          commands << [Replace.new("#{indent}    ├── "), indent]
          commands << [child, "#{indent}    │   "]
        end
        commands << [Replace.new("#{indent}    └── "), indent]
        commands << [elements[-1], "#{indent}        "]
      end
    end

    # Inspect a KeywordRestParameterNode node.
    def visit_keyword_rest_parameter_node(node)
      commands << [inspect_node("KeywordRestParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (name = node.name).nil?
        commands << ["├── name: ∅\n", indent]
      else
        commands << ["├── name: #{name.inspect}\n", indent]
      end
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a LambdaNode node.
    def visit_lambda_node(node)
      commands << [inspect_node("LambdaNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── locals: #{node.locals.inspect}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      if (parameters = node.parameters).nil?
        commands << ["├── parameters: ∅\n", indent]
      else
        commands << ["├── parameters:\n", indent]
        commands << [parameters, "#{indent}│   "]
      end
      if (body = node.body).nil?
        commands << ["└── body: ∅\n", indent]
      else
        commands << ["└── body:\n", indent]
        commands << [body, "#{indent}    "]
      end
    end

    # Inspect a LocalVariableAndWriteNode node.
    def visit_local_variable_and_write_node(node)
      commands << [inspect_node("LocalVariableAndWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["└── depth: #{node.depth.inspect}\n", indent]
    end

    # Inspect a LocalVariableOperatorWriteNode node.
    def visit_local_variable_operator_write_node(node)
      commands << [inspect_node("LocalVariableOperatorWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── binary_operator_loc: #{inspect_location(node.binary_operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── binary_operator: #{node.binary_operator.inspect}\n", indent]
      commands << ["└── depth: #{node.depth.inspect}\n", indent]
    end

    # Inspect a LocalVariableOrWriteNode node.
    def visit_local_variable_or_write_node(node)
      commands << [inspect_node("LocalVariableOrWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["└── depth: #{node.depth.inspect}\n", indent]
    end

    # Inspect a LocalVariableReadNode node.
    def visit_local_variable_read_node(node)
      commands << [inspect_node("LocalVariableReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["└── depth: #{node.depth.inspect}\n", indent]
    end

    # Inspect a LocalVariableTargetNode node.
    def visit_local_variable_target_node(node)
      commands << [inspect_node("LocalVariableTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["└── depth: #{node.depth.inspect}\n", indent]
    end

    # Inspect a LocalVariableWriteNode node.
    def visit_local_variable_write_node(node)
      commands << [inspect_node("LocalVariableWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── depth: #{node.depth.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a MatchLastLineNode node.
    def visit_match_last_line_node(node)
      commands << [inspect_node("MatchLastLineNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("ignore_case" if node.ignore_case?), ("extended" if node.extended?), ("multi_line" if node.multi_line?), ("once" if node.once?), ("euc_jp" if node.euc_jp?), ("ascii_8bit" if node.ascii_8bit?), ("windows_31j" if node.windows_31j?), ("utf_8" if node.utf_8?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?), ("forced_us_ascii_encoding" if node.forced_us_ascii_encoding?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── content_loc: #{inspect_location(node.content_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      commands << ["└── unescaped: #{node.unescaped.inspect}\n", indent]
    end

    # Inspect a MatchPredicateNode node.
    def visit_match_predicate_node(node)
      commands << [inspect_node("MatchPredicateNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["├── pattern:\n", indent]
      commands << [node.pattern, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a MatchRequiredNode node.
    def visit_match_required_node(node)
      commands << [inspect_node("MatchRequiredNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── value:\n", indent]
      commands << [node.value, "#{indent}│   "]
      commands << ["├── pattern:\n", indent]
      commands << [node.pattern, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a MatchWriteNode node.
    def visit_match_write_node(node)
      commands << [inspect_node("MatchWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── call:\n", indent]
      commands << [node.call, "#{indent}│   "]
      commands << ["└── targets: (length: #{(targets = node.targets).length})\n", indent]
      if targets.any?
        targets[0...-1].each do |child|
          commands << [Replace.new("#{indent}    ├── "), indent]
          commands << [child, "#{indent}    │   "]
        end
        commands << [Replace.new("#{indent}    └── "), indent]
        commands << [targets[-1], "#{indent}        "]
      end
    end

    # Inspect a MissingNode node.
    def visit_missing_node(node)
      commands << [inspect_node("MissingNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a ModuleNode node.
    def visit_module_node(node)
      commands << [inspect_node("ModuleNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── locals: #{node.locals.inspect}\n", indent]
      commands << ["├── module_keyword_loc: #{inspect_location(node.module_keyword_loc)}\n", indent]
      commands << ["├── constant_path:\n", indent]
      commands << [node.constant_path, "#{indent}│   "]
      if (body = node.body).nil?
        commands << ["├── body: ∅\n", indent]
      else
        commands << ["├── body:\n", indent]
        commands << [body, "#{indent}│   "]
      end
      commands << ["├── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a MultiTargetNode node.
    def visit_multi_target_node(node)
      commands << [inspect_node("MultiTargetNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── lefts: (length: #{(lefts = node.lefts).length})\n", indent]
      if lefts.any?
        lefts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [lefts[-1], "#{indent}│       "]
      end
      if (rest = node.rest).nil?
        commands << ["├── rest: ∅\n", indent]
      else
        commands << ["├── rest:\n", indent]
        commands << [rest, "#{indent}│   "]
      end
      commands << ["├── rights: (length: #{(rights = node.rights).length})\n", indent]
      if rights.any?
        rights[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [rights[-1], "#{indent}│       "]
      end
      commands << ["├── lparen_loc: #{inspect_location(node.lparen_loc)}\n", indent]
      commands << ["└── rparen_loc: #{inspect_location(node.rparen_loc)}\n", indent]
    end

    # Inspect a MultiWriteNode node.
    def visit_multi_write_node(node)
      commands << [inspect_node("MultiWriteNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── lefts: (length: #{(lefts = node.lefts).length})\n", indent]
      if lefts.any?
        lefts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [lefts[-1], "#{indent}│       "]
      end
      if (rest = node.rest).nil?
        commands << ["├── rest: ∅\n", indent]
      else
        commands << ["├── rest:\n", indent]
        commands << [rest, "#{indent}│   "]
      end
      commands << ["├── rights: (length: #{(rights = node.rights).length})\n", indent]
      if rights.any?
        rights[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [rights[-1], "#{indent}│       "]
      end
      commands << ["├── lparen_loc: #{inspect_location(node.lparen_loc)}\n", indent]
      commands << ["├── rparen_loc: #{inspect_location(node.rparen_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a NextNode node.
    def visit_next_node(node)
      commands << [inspect_node("NextNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["└── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
    end

    # Inspect a NilNode node.
    def visit_nil_node(node)
      commands << [inspect_node("NilNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a NoKeywordsParameterNode node.
    def visit_no_keywords_parameter_node(node)
      commands << [inspect_node("NoKeywordsParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
    end

    # Inspect a NumberedParametersNode node.
    def visit_numbered_parameters_node(node)
      commands << [inspect_node("NumberedParametersNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── maximum: #{node.maximum.inspect}\n", indent]
    end

    # Inspect a NumberedReferenceReadNode node.
    def visit_numbered_reference_read_node(node)
      commands << [inspect_node("NumberedReferenceReadNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── number: #{node.number.inspect}\n", indent]
    end

    # Inspect a OptionalKeywordParameterNode node.
    def visit_optional_keyword_parameter_node(node)
      commands << [inspect_node("OptionalKeywordParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a OptionalParameterNode node.
    def visit_optional_parameter_node(node)
      commands << [inspect_node("OptionalParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["└── value:\n", indent]
      commands << [node.value, "#{indent}    "]
    end

    # Inspect a OrNode node.
    def visit_or_node(node)
      commands << [inspect_node("OrNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── left:\n", indent]
      commands << [node.left, "#{indent}│   "]
      commands << ["├── right:\n", indent]
      commands << [node.right, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a ParametersNode node.
    def visit_parameters_node(node)
      commands << [inspect_node("ParametersNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── requireds: (length: #{(requireds = node.requireds).length})\n", indent]
      if requireds.any?
        requireds[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [requireds[-1], "#{indent}│       "]
      end
      commands << ["├── optionals: (length: #{(optionals = node.optionals).length})\n", indent]
      if optionals.any?
        optionals[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [optionals[-1], "#{indent}│       "]
      end
      if (rest = node.rest).nil?
        commands << ["├── rest: ∅\n", indent]
      else
        commands << ["├── rest:\n", indent]
        commands << [rest, "#{indent}│   "]
      end
      commands << ["├── posts: (length: #{(posts = node.posts).length})\n", indent]
      if posts.any?
        posts[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [posts[-1], "#{indent}│       "]
      end
      commands << ["├── keywords: (length: #{(keywords = node.keywords).length})\n", indent]
      if keywords.any?
        keywords[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [keywords[-1], "#{indent}│       "]
      end
      if (keyword_rest = node.keyword_rest).nil?
        commands << ["├── keyword_rest: ∅\n", indent]
      else
        commands << ["├── keyword_rest:\n", indent]
        commands << [keyword_rest, "#{indent}│   "]
      end
      if (block = node.block).nil?
        commands << ["└── block: ∅\n", indent]
      else
        commands << ["└── block:\n", indent]
        commands << [block, "#{indent}    "]
      end
    end

    # Inspect a ParenthesesNode node.
    def visit_parentheses_node(node)
      commands << [inspect_node("ParenthesesNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (body = node.body).nil?
        commands << ["├── body: ∅\n", indent]
      else
        commands << ["├── body:\n", indent]
        commands << [body, "#{indent}│   "]
      end
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a PinnedExpressionNode node.
    def visit_pinned_expression_node(node)
      commands << [inspect_node("PinnedExpressionNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── expression:\n", indent]
      commands << [node.expression, "#{indent}│   "]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["├── lparen_loc: #{inspect_location(node.lparen_loc)}\n", indent]
      commands << ["└── rparen_loc: #{inspect_location(node.rparen_loc)}\n", indent]
    end

    # Inspect a PinnedVariableNode node.
    def visit_pinned_variable_node(node)
      commands << [inspect_node("PinnedVariableNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── variable:\n", indent]
      commands << [node.variable, "#{indent}│   "]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a PostExecutionNode node.
    def visit_post_execution_node(node)
      commands << [inspect_node("PostExecutionNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a PreExecutionNode node.
    def visit_pre_execution_node(node)
      commands << [inspect_node("PreExecutionNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["└── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
    end

    # Inspect a ProgramNode node.
    def visit_program_node(node)
      commands << [inspect_node("ProgramNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── locals: #{node.locals.inspect}\n", indent]
      commands << ["└── statements:\n", indent]
      commands << [node.statements, "#{indent}    "]
    end

    # Inspect a RangeNode node.
    def visit_range_node(node)
      commands << [inspect_node("RangeNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("exclude_end" if node.exclude_end?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (left = node.left).nil?
        commands << ["├── left: ∅\n", indent]
      else
        commands << ["├── left:\n", indent]
        commands << [left, "#{indent}│   "]
      end
      if (right = node.right).nil?
        commands << ["├── right: ∅\n", indent]
      else
        commands << ["├── right:\n", indent]
        commands << [right, "#{indent}│   "]
      end
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a RationalNode node.
    def visit_rational_node(node)
      commands << [inspect_node("RationalNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("binary" if node.binary?), ("decimal" if node.decimal?), ("octal" if node.octal?), ("hexadecimal" if node.hexadecimal?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── numerator: #{node.numerator.inspect}\n", indent]
      commands << ["└── denominator: #{node.denominator.inspect}\n", indent]
    end

    # Inspect a RedoNode node.
    def visit_redo_node(node)
      commands << [inspect_node("RedoNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a RegularExpressionNode node.
    def visit_regular_expression_node(node)
      commands << [inspect_node("RegularExpressionNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("ignore_case" if node.ignore_case?), ("extended" if node.extended?), ("multi_line" if node.multi_line?), ("once" if node.once?), ("euc_jp" if node.euc_jp?), ("ascii_8bit" if node.ascii_8bit?), ("windows_31j" if node.windows_31j?), ("utf_8" if node.utf_8?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?), ("forced_us_ascii_encoding" if node.forced_us_ascii_encoding?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── content_loc: #{inspect_location(node.content_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      commands << ["└── unescaped: #{node.unescaped.inspect}\n", indent]
    end

    # Inspect a RequiredKeywordParameterNode node.
    def visit_required_keyword_parameter_node(node)
      commands << [inspect_node("RequiredKeywordParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── name: #{node.name.inspect}\n", indent]
      commands << ["└── name_loc: #{inspect_location(node.name_loc)}\n", indent]
    end

    # Inspect a RequiredParameterNode node.
    def visit_required_parameter_node(node)
      commands << [inspect_node("RequiredParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── name: #{node.name.inspect}\n", indent]
    end

    # Inspect a RescueModifierNode node.
    def visit_rescue_modifier_node(node)
      commands << [inspect_node("RescueModifierNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── expression:\n", indent]
      commands << [node.expression, "#{indent}│   "]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["└── rescue_expression:\n", indent]
      commands << [node.rescue_expression, "#{indent}    "]
    end

    # Inspect a RescueNode node.
    def visit_rescue_node(node)
      commands << [inspect_node("RescueNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── exceptions: (length: #{(exceptions = node.exceptions).length})\n", indent]
      if exceptions.any?
        exceptions[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [exceptions[-1], "#{indent}│       "]
      end
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      if (reference = node.reference).nil?
        commands << ["├── reference: ∅\n", indent]
      else
        commands << ["├── reference:\n", indent]
        commands << [reference, "#{indent}│   "]
      end
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      if (subsequent = node.subsequent).nil?
        commands << ["└── subsequent: ∅\n", indent]
      else
        commands << ["└── subsequent:\n", indent]
        commands << [subsequent, "#{indent}    "]
      end
    end

    # Inspect a RestParameterNode node.
    def visit_rest_parameter_node(node)
      commands << [inspect_node("RestParameterNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("repeated_parameter" if node.repeated_parameter?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      if (name = node.name).nil?
        commands << ["├── name: ∅\n", indent]
      else
        commands << ["├── name: #{name.inspect}\n", indent]
      end
      commands << ["├── name_loc: #{inspect_location(node.name_loc)}\n", indent]
      commands << ["└── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
    end

    # Inspect a RetryNode node.
    def visit_retry_node(node)
      commands << [inspect_node("RetryNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a ReturnNode node.
    def visit_return_node(node)
      commands << [inspect_node("ReturnNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["└── arguments: ∅\n", indent]
      else
        commands << ["└── arguments:\n", indent]
        commands << [arguments, "#{indent}    "]
      end
    end

    # Inspect a SelfNode node.
    def visit_self_node(node)
      commands << [inspect_node("SelfNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a ShareableConstantNode node.
    def visit_shareable_constant_node(node)
      commands << [inspect_node("ShareableConstantNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("literal" if node.literal?), ("experimental_everything" if node.experimental_everything?), ("experimental_copy" if node.experimental_copy?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── write:\n", indent]
      commands << [node.write, "#{indent}    "]
    end

    # Inspect a SingletonClassNode node.
    def visit_singleton_class_node(node)
      commands << [inspect_node("SingletonClassNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── locals: #{node.locals.inspect}\n", indent]
      commands << ["├── class_keyword_loc: #{inspect_location(node.class_keyword_loc)}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      commands << ["├── expression:\n", indent]
      commands << [node.expression, "#{indent}│   "]
      if (body = node.body).nil?
        commands << ["├── body: ∅\n", indent]
      else
        commands << ["├── body:\n", indent]
        commands << [body, "#{indent}│   "]
      end
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a SourceEncodingNode node.
    def visit_source_encoding_node(node)
      commands << [inspect_node("SourceEncodingNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a SourceFileNode node.
    def visit_source_file_node(node)
      commands << [inspect_node("SourceFileNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?), ("frozen" if node.frozen?), ("mutable" if node.mutable?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── filepath: #{node.filepath.inspect}\n", indent]
    end

    # Inspect a SourceLineNode node.
    def visit_source_line_node(node)
      commands << [inspect_node("SourceLineNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a SplatNode node.
    def visit_splat_node(node)
      commands << [inspect_node("SplatNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── operator_loc: #{inspect_location(node.operator_loc)}\n", indent]
      if (expression = node.expression).nil?
        commands << ["└── expression: ∅\n", indent]
      else
        commands << ["└── expression:\n", indent]
        commands << [expression, "#{indent}    "]
      end
    end

    # Inspect a StatementsNode node.
    def visit_statements_node(node)
      commands << [inspect_node("StatementsNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["└── body: (length: #{(body = node.body).length})\n", indent]
      if body.any?
        body[0...-1].each do |child|
          commands << [Replace.new("#{indent}    ├── "), indent]
          commands << [child, "#{indent}    │   "]
        end
        commands << [Replace.new("#{indent}    └── "), indent]
        commands << [body[-1], "#{indent}        "]
      end
    end

    # Inspect a StringNode node.
    def visit_string_node(node)
      commands << [inspect_node("StringNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?), ("frozen" if node.frozen?), ("mutable" if node.mutable?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── content_loc: #{inspect_location(node.content_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      commands << ["└── unescaped: #{node.unescaped.inspect}\n", indent]
    end

    # Inspect a SuperNode node.
    def visit_super_node(node)
      commands << [inspect_node("SuperNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── lparen_loc: #{inspect_location(node.lparen_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["├── rparen_loc: #{inspect_location(node.rparen_loc)}\n", indent]
      if (block = node.block).nil?
        commands << ["└── block: ∅\n", indent]
      else
        commands << ["└── block:\n", indent]
        commands << [block, "#{indent}    "]
      end
    end

    # Inspect a SymbolNode node.
    def visit_symbol_node(node)
      commands << [inspect_node("SymbolNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?), ("forced_us_ascii_encoding" if node.forced_us_ascii_encoding?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── value_loc: #{inspect_location(node.value_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      commands << ["└── unescaped: #{node.unescaped.inspect}\n", indent]
    end

    # Inspect a TrueNode node.
    def visit_true_node(node)
      commands << [inspect_node("TrueNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["└── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
    end

    # Inspect a UndefNode node.
    def visit_undef_node(node)
      commands << [inspect_node("UndefNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── names: (length: #{(names = node.names).length})\n", indent]
      if names.any?
        names[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [names[-1], "#{indent}│       "]
      end
      commands << ["└── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
    end

    # Inspect a UnlessNode node.
    def visit_unless_node(node)
      commands << [inspect_node("UnlessNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── predicate:\n", indent]
      commands << [node.predicate, "#{indent}│   "]
      commands << ["├── then_keyword_loc: #{inspect_location(node.then_keyword_loc)}\n", indent]
      if (statements = node.statements).nil?
        commands << ["├── statements: ∅\n", indent]
      else
        commands << ["├── statements:\n", indent]
        commands << [statements, "#{indent}│   "]
      end
      if (else_clause = node.else_clause).nil?
        commands << ["├── else_clause: ∅\n", indent]
      else
        commands << ["├── else_clause:\n", indent]
        commands << [else_clause, "#{indent}│   "]
      end
      commands << ["└── end_keyword_loc: #{inspect_location(node.end_keyword_loc)}\n", indent]
    end

    # Inspect a UntilNode node.
    def visit_until_node(node)
      commands << [inspect_node("UntilNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("begin_modifier" if node.begin_modifier?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── do_keyword_loc: #{inspect_location(node.do_keyword_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      commands << ["├── predicate:\n", indent]
      commands << [node.predicate, "#{indent}│   "]
      if (statements = node.statements).nil?
        commands << ["└── statements: ∅\n", indent]
      else
        commands << ["└── statements:\n", indent]
        commands << [statements, "#{indent}    "]
      end
    end

    # Inspect a WhenNode node.
    def visit_when_node(node)
      commands << [inspect_node("WhenNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── conditions: (length: #{(conditions = node.conditions).length})\n", indent]
      if conditions.any?
        conditions[0...-1].each do |child|
          commands << [Replace.new("#{indent}│   ├── "), indent]
          commands << [child, "#{indent}│   │   "]
        end
        commands << [Replace.new("#{indent}│   └── "), indent]
        commands << [conditions[-1], "#{indent}│       "]
      end
      commands << ["├── then_keyword_loc: #{inspect_location(node.then_keyword_loc)}\n", indent]
      if (statements = node.statements).nil?
        commands << ["└── statements: ∅\n", indent]
      else
        commands << ["└── statements:\n", indent]
        commands << [statements, "#{indent}    "]
      end
    end

    # Inspect a WhileNode node.
    def visit_while_node(node)
      commands << [inspect_node("WhileNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("begin_modifier" if node.begin_modifier?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── do_keyword_loc: #{inspect_location(node.do_keyword_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      commands << ["├── predicate:\n", indent]
      commands << [node.predicate, "#{indent}│   "]
      if (statements = node.statements).nil?
        commands << ["└── statements: ∅\n", indent]
      else
        commands << ["└── statements:\n", indent]
        commands << [statements, "#{indent}    "]
      end
    end

    # Inspect a XStringNode node.
    def visit_x_string_node(node)
      commands << [inspect_node("XStringNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ("forced_utf8_encoding" if node.forced_utf8_encoding?), ("forced_binary_encoding" if node.forced_binary_encoding?)].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── opening_loc: #{inspect_location(node.opening_loc)}\n", indent]
      commands << ["├── content_loc: #{inspect_location(node.content_loc)}\n", indent]
      commands << ["├── closing_loc: #{inspect_location(node.closing_loc)}\n", indent]
      commands << ["└── unescaped: #{node.unescaped.inspect}\n", indent]
    end

    # Inspect a YieldNode node.
    def visit_yield_node(node)
      commands << [inspect_node("YieldNode", node), indent]
      flags = [("newline" if node.newline?), ("static_literal" if node.static_literal?), ].compact
      commands << ["├── flags: #{flags.empty? ? "∅" : flags.join(", ")}\n", indent]
      commands << ["├── keyword_loc: #{inspect_location(node.keyword_loc)}\n", indent]
      commands << ["├── lparen_loc: #{inspect_location(node.lparen_loc)}\n", indent]
      if (arguments = node.arguments).nil?
        commands << ["├── arguments: ∅\n", indent]
      else
        commands << ["├── arguments:\n", indent]
        commands << [arguments, "#{indent}│   "]
      end
      commands << ["└── rparen_loc: #{inspect_location(node.rparen_loc)}\n", indent]
    end

    private

    # Compose a header for the given node.
    def inspect_node(name, node)
      location = node.location
      "@ #{name} (location: (#{location.start_line},#{location.start_column})-(#{location.end_line},#{location.end_column}))\n"
    end

    # Compose a string representing the given inner location field.
    def inspect_location(location)
      if location
        "(#{location.start_line},#{location.start_column})-(#{location.end_line},#{location.end_column}) = #{location.slice.inspect}"
      else
        "∅"
      end
    end
  end
end
PK*J[*�uD�\�\"share/ruby/error_highlight/base.rbnu�[���require_relative "version"

module ErrorHighlight
  # Identify the code fragment at that a given exception occurred.
  #
  # Options:
  #
  # point_type: :name | :args
  #   :name (default) points the method/variable name that the exception occurred.
  #   :args points the arguments of the method call that the exception occurred.
  #
  # backtrace_location: Thread::Backtrace::Location
  #   It locates the code fragment of the given backtrace_location.
  #   By default, it uses the first frame of backtrace_locations of the given exception.
  #
  # Returns:
  #  {
  #    first_lineno: Integer,
  #    first_column: Integer,
  #    last_lineno: Integer,
  #    last_column: Integer,
  #    snippet: String,
  #    script_lines: [String],
  #  } | nil
  #
  # Limitations:
  #
  # Currently, ErrorHighlight.spot only supports a single-line code fragment.
  # Therefore, if the return value is not nil, first_lineno and last_lineno will have
  # the same value. If the relevant code fragment spans multiple lines
  # (e.g., Array#[] of +ary[(newline)expr(newline)]+), the method will return nil.
  # This restriction may be removed in the future.
  def self.spot(obj, **opts)
    case obj
    when Exception
      exc = obj
      loc = opts[:backtrace_location]
      opts = { point_type: opts.fetch(:point_type, :name) }

      unless loc
        case exc
        when TypeError, ArgumentError
          opts[:point_type] = :args
        end

        locs = exc.backtrace_locations
        return nil unless locs

        loc = locs.first
        return nil unless loc

        opts[:name] = exc.name if NameError === obj
      end

      return nil unless Thread::Backtrace::Location === loc

      node =
        begin
          RubyVM::AbstractSyntaxTree.of(loc, keep_script_lines: true)
        rescue RuntimeError => error
          # RubyVM::AbstractSyntaxTree.of raises an error with a message that
          # includes "prism" when the ISEQ was compiled with the prism compiler.
          # In this case, we'll try to parse again with prism instead.
          raise unless error.message.include?("prism")
          prism_find(loc)
        end

      Spotter.new(node, **opts).spot

    when RubyVM::AbstractSyntaxTree::Node, Prism::Node
      Spotter.new(obj, **opts).spot

    else
      raise TypeError, "Exception is expected"
    end

  rescue SyntaxError,
         SystemCallError, # file not found or something
         ArgumentError # eval'ed code

    return nil
  end

  # Accepts a Thread::Backtrace::Location object and returns a Prism::Node
  # corresponding to the backtrace location in the source code.
  def self.prism_find(location)
    require "prism"
    return nil if Prism::VERSION < "1.0.0"

    absolute_path = location.absolute_path
    return unless absolute_path

    node_id = RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(location)
    Prism.parse_file(absolute_path).value.breadth_first_search { |node| node.node_id == node_id }
  end

  private_class_method :prism_find

  class Spotter
    class NonAscii < Exception; end
    private_constant :NonAscii

    def initialize(node, point_type: :name, name: nil)
      @node = node
      @point_type = point_type
      @name = name

      # Not-implemented-yet options
      @arg = nil # Specify the index or keyword at which argument caused the TypeError/ArgumentError
      @multiline = false # Allow multiline spot

      @fetch = -> (lineno, last_lineno = lineno) do
        snippet = @node.script_lines[lineno - 1 .. last_lineno - 1].join("")
        snippet += "\n" unless snippet.end_with?("\n")

        # It require some work to support Unicode (or multibyte) characters.
        # Tentatively, we stop highlighting if the code snippet has non-ascii characters.
        # See https://github.com/ruby/error_highlight/issues/4
        raise NonAscii unless snippet.ascii_only?

        snippet
      end
    end

    OPT_GETCONSTANT_PATH = (RUBY_VERSION.split(".").map {|s| s.to_i } <=> [3, 2]) >= 0
    private_constant :OPT_GETCONSTANT_PATH

    def spot
      return nil unless @node

      if OPT_GETCONSTANT_PATH
        # In Ruby 3.2 or later, a nested constant access (like `Foo::Bar::Baz`)
        # is compiled to one instruction (opt_getconstant_path).
        # @node points to the node of the whole `Foo::Bar::Baz` even if `Foo`
        # or `Foo::Bar` causes NameError.
        # So we try to spot the sub-node that causes the NameError by using
        # `NameError#name`.
        case @node.type
        when :COLON2
          subnodes = []
          node = @node
          while node.type == :COLON2
            node2, const = node.children
            subnodes << node if const == @name
            node = node2
          end
          if node.type == :CONST || node.type == :COLON3
            if node.children.first == @name
              subnodes << node
            end

            # If we found only one sub-node whose name is equal to @name, use it
            return nil if subnodes.size != 1
            @node = subnodes.first
          else
            # Do nothing; opt_getconstant_path is used only when the const base is
            # NODE_CONST (`Foo`) or NODE_COLON3 (`::Foo`)
          end
        when :constant_path_node
          subnodes = []
          node = @node

          begin
            subnodes << node if node.name == @name
          end while (node = node.parent).is_a?(Prism::ConstantPathNode)

          if node.is_a?(Prism::ConstantReadNode) && node.name == @name
            subnodes << node
          end

          # If we found only one sub-node whose name is equal to @name, use it
          return nil if subnodes.size != 1
          @node = subnodes.first
        end
      end

      case @node.type

      when :CALL, :QCALL
        case @point_type
        when :name
          spot_call_for_name
        when :args
          spot_call_for_args
        end

      when :ATTRASGN
        case @point_type
        when :name
          spot_attrasgn_for_name
        when :args
          spot_attrasgn_for_args
        end

      when :OPCALL
        case @point_type
        when :name
          spot_opcall_for_name
        when :args
          spot_opcall_for_args
        end

      when :FCALL
        case @point_type
        when :name
          spot_fcall_for_name
        when :args
          spot_fcall_for_args
        end

      when :VCALL
        spot_vcall

      when :OP_ASGN1
        case @point_type
        when :name
          spot_op_asgn1_for_name
        when :args
          spot_op_asgn1_for_args
        end

      when :OP_ASGN2
        case @point_type
        when :name
          spot_op_asgn2_for_name
        when :args
          spot_op_asgn2_for_args
        end

      when :CONST
        spot_vcall

      when :COLON2
        spot_colon2

      when :COLON3
        spot_vcall

      when :OP_CDECL
        spot_op_cdecl

      when :call_node
        case @point_type
        when :name
          prism_spot_call_for_name
        when :args
          prism_spot_call_for_args
        end

      when :local_variable_operator_write_node
        case @point_type
        when :name
          prism_spot_local_variable_operator_write_for_name
        when :args
          prism_spot_local_variable_operator_write_for_args
        end

      when :call_operator_write_node
        case @point_type
        when :name
          prism_spot_call_operator_write_for_name
        when :args
          prism_spot_call_operator_write_for_args
        end

      when :index_operator_write_node
        case @point_type
        when :name
          prism_spot_index_operator_write_for_name
        when :args
          prism_spot_index_operator_write_for_args
        end

      when :constant_read_node
        prism_spot_constant_read

      when :constant_path_node
        prism_spot_constant_path

      when :constant_path_operator_write_node
        prism_spot_constant_path_operator_write

      end

      if @snippet && @beg_column && @end_column && @beg_column < @end_column
        return {
          first_lineno: @beg_lineno,
          first_column: @beg_column,
          last_lineno: @end_lineno,
          last_column: @end_column,
          snippet: @snippet,
          script_lines: @node.script_lines,
        }
      else
        return nil
      end

    rescue NonAscii
      nil
    end

    private

    # Example:
    #   x.foo
    #    ^^^^
    #   x.foo(42)
    #    ^^^^
    #   x&.foo
    #    ^^^^^
    #   x[42]
    #    ^^^^
    #   x += 1
    #     ^
    def spot_call_for_name
      nd_recv, mid, nd_args = @node.children
      lineno = nd_recv.last_lineno
      lines = @fetch[lineno, @node.last_lineno]
      if mid == :[] && lines.match(/\G[\s)]*(\[(?:\s*\])?)/, nd_recv.last_column)
        @beg_column = $~.begin(1)
        @snippet = lines[/.*\n/]
        @beg_lineno = @end_lineno = lineno
        if nd_args
          if nd_recv.last_lineno == nd_args.last_lineno && @snippet.match(/\s*\]/, nd_args.last_column)
            @end_column = $~.end(0)
          end
        else
          if lines.match(/\G[\s)]*?\[\s*\]/, nd_recv.last_column)
            @end_column = $~.end(0)
          end
        end
      elsif lines.match(/\G[\s)]*?(\&?\.)(\s*?)(#{ Regexp.quote(mid) }).*\n/, nd_recv.last_column)
        lines = $` + $&
        @beg_column = $~.begin($2.include?("\n") ? 3 : 1)
        @end_column = $~.end(3)
        if i = lines[..@beg_column].rindex("\n")
          @beg_lineno = @end_lineno = lineno + lines[..@beg_column].count("\n")
          @snippet = lines[i + 1..]
          @beg_column -= i + 1
          @end_column -= i + 1
        else
          @snippet = lines
          @beg_lineno = @end_lineno = lineno
        end
      elsif mid.to_s =~ /\A\W+\z/ && lines.match(/\G\s*(#{ Regexp.quote(mid) })=.*\n/, nd_recv.last_column)
        @snippet = $` + $&
        @beg_column = $~.begin(1)
        @end_column = $~.end(1)
      end
    end

    # Example:
    #   x.foo(42)
    #         ^^
    #   x[42]
    #     ^^
    #   x += 1
    #        ^
    def spot_call_for_args
      _nd_recv, _mid, nd_args = @node.children
      if nd_args && nd_args.first_lineno == nd_args.last_lineno
        fetch_line(nd_args.first_lineno)
        @beg_column = nd_args.first_column
        @end_column = nd_args.last_column
      end
      # TODO: support @arg
    end

    # Example:
    #   x.foo = 1
    #    ^^^^^^
    #   x[42] = 1
    #    ^^^^^^
    def spot_attrasgn_for_name
      nd_recv, mid, nd_args = @node.children
      *nd_args, _nd_last_arg, _nil = nd_args.children
      fetch_line(nd_recv.last_lineno)
      if mid == :[]= && @snippet.match(/\G[\s)]*(\[)/, nd_recv.last_column)
        @beg_column = $~.begin(1)
        args_last_column = $~.end(0)
        if nd_args.last && nd_recv.last_lineno == nd_args.last.last_lineno
          args_last_column = nd_args.last.last_column
        end
        if @snippet.match(/[\s)]*\]\s*=/, args_last_column)
          @end_column = $~.end(0)
        end
      elsif @snippet.match(/\G[\s)]*(\.\s*#{ Regexp.quote(mid.to_s.sub(/=\z/, "")) }\s*=)/, nd_recv.last_column)
        @beg_column = $~.begin(1)
        @end_column = $~.end(1)
      end
    end

    # Example:
    #   x.foo = 1
    #           ^
    #   x[42] = 1
    #     ^^^^^^^
    #   x[] = 1
    #     ^^^^^
    def spot_attrasgn_for_args
      nd_recv, mid, nd_args = @node.children
      fetch_line(nd_recv.last_lineno)
      if mid == :[]= && @snippet.match(/\G[\s)]*\[/, nd_recv.last_column)
        @beg_column = $~.end(0)
        if nd_recv.last_lineno == nd_args.last_lineno
          @end_column = nd_args.last_column
        end
      elsif nd_args && nd_args.first_lineno == nd_args.last_lineno
        @beg_column = nd_args.first_column
        @end_column = nd_args.last_column
      end
      # TODO: support @arg
    end

    # Example:
    #   x + 1
    #     ^
    #   +x
    #   ^
    def spot_opcall_for_name
      nd_recv, op, nd_arg = @node.children
      fetch_line(nd_recv.last_lineno)
      if nd_arg
        # binary operator
        if @snippet.match(/\G[\s)]*(#{ Regexp.quote(op) })/, nd_recv.last_column)
          @beg_column = $~.begin(1)
          @end_column = $~.end(1)
        end
      else
        # unary operator
        if @snippet[...nd_recv.first_column].match(/(#{ Regexp.quote(op.to_s.sub(/@\z/, "")) })\s*\(?\s*\z/)
          @beg_column = $~.begin(1)
          @end_column = $~.end(1)
        end
      end
    end

    # Example:
    #   x + 1
    #       ^
    def spot_opcall_for_args
      _nd_recv, _op, nd_arg = @node.children
      if nd_arg && nd_arg.first_lineno == nd_arg.last_lineno
        # binary operator
        fetch_line(nd_arg.first_lineno)
        @beg_column = nd_arg.first_column
        @end_column = nd_arg.last_column
      end
    end

    # Example:
    #   foo(42)
    #   ^^^
    #   foo 42
    #   ^^^
    def spot_fcall_for_name
      mid, _nd_args = @node.children
      fetch_line(@node.first_lineno)
      if @snippet.match(/(#{ Regexp.quote(mid) })/, @node.first_column)
        @beg_column = $~.begin(1)
        @end_column = $~.end(1)
      end
    end

    # Example:
    #   foo(42)
    #       ^^
    #   foo 42
    #       ^^
    def spot_fcall_for_args
      _mid, nd_args = @node.children
      if nd_args && nd_args.first_lineno == nd_args.last_lineno
        # binary operator
        fetch_line(nd_args.first_lineno)
        @beg_column = nd_args.first_column
        @end_column = nd_args.last_column
      end
    end

    # Example:
    #   foo
    #   ^^^
    def spot_vcall
      if @node.first_lineno == @node.last_lineno
        fetch_line(@node.last_lineno)
        @beg_column = @node.first_column
        @end_column = @node.last_column
      end
    end

    # Example:
    #   x[1] += 42
    #    ^^^    (for [])
    #   x[1] += 42
    #        ^  (for +)
    #   x[1] += 42
    #    ^^^^^^ (for []=)
    def spot_op_asgn1_for_name
      nd_recv, op, nd_args, _nd_rhs = @node.children
      fetch_line(nd_recv.last_lineno)
      if @snippet.match(/\G[\s)]*(\[)/, nd_recv.last_column)
        bracket_beg_column = $~.begin(1)
        args_last_column = $~.end(0)
        if nd_args && nd_recv.last_lineno == nd_args.last_lineno
          args_last_column = nd_args.last_column
        end
        if @snippet.match(/\s*\](\s*)(#{ Regexp.quote(op) })=()/, args_last_column)
          case @name
          when :[], :[]=
            @beg_column = bracket_beg_column
            @end_column = $~.begin(@name == :[] ? 1 : 3)
          when op
            @beg_column = $~.begin(2)
            @end_column = $~.end(2)
          end
        end
      end
    end

    # Example:
    #   x[1] += 42
    #     ^^^^^^^^
    def spot_op_asgn1_for_args
      nd_recv, mid, nd_args, nd_rhs = @node.children
      fetch_line(nd_recv.last_lineno)
      if mid == :[]= && @snippet.match(/\G\s*\[/, nd_recv.last_column)
        @beg_column = $~.end(0)
        if nd_recv.last_lineno == nd_rhs.last_lineno
          @end_column = nd_rhs.last_column
        end
      elsif nd_args && nd_args.first_lineno == nd_rhs.last_lineno
        @beg_column = nd_args.first_column
        @end_column = nd_rhs.last_column
      end
      # TODO: support @arg
    end

    # Example:
    #   x.foo += 42
    #    ^^^     (for foo)
    #   x.foo += 42
    #         ^  (for +)
    #   x.foo += 42
    #    ^^^^^^^ (for foo=)
    def spot_op_asgn2_for_name
      nd_recv, _qcall, attr, op, _nd_rhs = @node.children
      fetch_line(nd_recv.last_lineno)
      if @snippet.match(/\G[\s)]*(\.)\s*#{ Regexp.quote(attr) }()\s*(#{ Regexp.quote(op) })(=)/, nd_recv.last_column)
        case @name
        when attr
          @beg_column = $~.begin(1)
          @end_column = $~.begin(2)
        when op
          @beg_column = $~.begin(3)
          @end_column = $~.end(3)
        when :"#{ attr }="
          @beg_column = $~.begin(1)
          @end_column = $~.end(4)
        end
      end
    end

    # Example:
    #   x.foo += 42
    #            ^^
    def spot_op_asgn2_for_args
      _nd_recv, _qcall, _attr, _op, nd_rhs = @node.children
      if nd_rhs.first_lineno == nd_rhs.last_lineno
        fetch_line(nd_rhs.first_lineno)
        @beg_column = nd_rhs.first_column
        @end_column = nd_rhs.last_column
      end
    end

    # Example:
    #   Foo::Bar
    #      ^^^^^
    def spot_colon2
      nd_parent, const = @node.children
      if nd_parent.last_lineno == @node.last_lineno
        fetch_line(nd_parent.last_lineno)
        @beg_column = nd_parent.last_column
        @end_column = @node.last_column
      else
        @snippet = @fetch[@node.last_lineno]
        if @snippet[...@node.last_column].match(/#{ Regexp.quote(const) }\z/)
          @beg_column = $~.begin(0)
          @end_column = $~.end(0)
        end
      end
    end

    # Example:
    #   Foo::Bar += 1
    #      ^^^^^^^^
    def spot_op_cdecl
      nd_lhs, op, _nd_rhs = @node.children
      *nd_parent_lhs, _const = nd_lhs.children
      if @name == op
        @snippet = @fetch[nd_lhs.last_lineno]
        if @snippet.match(/\G\s*(#{ Regexp.quote(op) })=/, nd_lhs.last_column)
          @beg_column = $~.begin(1)
          @end_column = $~.end(1)
        end
      else
        # constant access error
        @end_column = nd_lhs.last_column
        if nd_parent_lhs.empty? # example: ::C += 1
          if nd_lhs.first_lineno == nd_lhs.last_lineno
            @snippet = @fetch[nd_lhs.last_lineno]
            @beg_column = nd_lhs.first_column
          end
        else # example: Foo::Bar::C += 1
          if nd_parent_lhs.last.last_lineno == nd_lhs.last_lineno
            @snippet = @fetch[nd_lhs.last_lineno]
            @beg_column = nd_parent_lhs.last.last_column
          end
        end
      end
    end

    def fetch_line(lineno)
      @beg_lineno = @end_lineno = lineno
      @snippet = @fetch[lineno]
    end

    # Take a location from the prism parser and set the necessary instance
    # variables.
    def prism_location(location)
      @beg_lineno = location.start_line
      @beg_column = location.start_column
      @end_lineno = location.end_line
      @end_column = location.end_column
      @snippet = @fetch[@beg_lineno, @end_lineno]
    end

    # Example:
    #   x.foo
    #    ^^^^
    #   x.foo(42)
    #    ^^^^
    #   x&.foo
    #    ^^^^^
    #   x[42]
    #    ^^^^
    #   x.foo = 1
    #    ^^^^^^
    #   x[42] = 1
    #    ^^^^^^
    #   x + 1
    #     ^
    #   +x
    #   ^
    #   foo(42)
    #   ^^^
    #   foo 42
    #   ^^^
    #   foo
    #   ^^^
    def prism_spot_call_for_name
      # Explicitly turn off foo.() syntax because error_highlight expects this
      # to not work.
      return nil if @node.name == :call && @node.message_loc.nil?

      location = @node.message_loc || @node.call_operator_loc || @node.location
      location = @node.call_operator_loc.join(location) if @node.call_operator_loc&.start_line == location.start_line

      # If the method name ends with "=" but the message does not, then this is
      # a method call using the "attribute assignment" syntax
      # (e.g., foo.bar = 1). In this case we need to go retrieve the = sign and
      # add it to the location.
      if (name = @node.name).end_with?("=") && !@node.message.end_with?("=")
        location = location.adjoin("=")
      end

      prism_location(location)

      if !name.end_with?("=") && !name.match?(/[[:alpha:]_\[]/)
        # If the method name is an operator, then error_highlight only
        # highlights the first line.
        fetch_line(location.start_line)
      end
    end

    # Example:
    #   x.foo(42)
    #         ^^
    #   x[42]
    #     ^^
    #   x.foo = 1
    #           ^
    #   x[42] = 1
    #     ^^^^^^^
    #   x[] = 1
    #     ^^^^^
    #   x + 1
    #       ^
    #   foo(42)
    #       ^^
    #   foo 42
    #       ^^
    def prism_spot_call_for_args
      # Disallow highlighting arguments if there are no arguments.
      return if @node.arguments.nil?

      # Explicitly turn off foo.() syntax because error_highlight expects this
      # to not work.
      return nil if @node.name == :call && @node.message_loc.nil?

      if @node.name == :[]= && @node.opening == "[" && (@node.arguments&.arguments || []).length == 1
        prism_location(@node.opening_loc.copy(start_offset: @node.opening_loc.start_offset + 1).join(@node.arguments.location))
      else
        prism_location(@node.arguments.location)
      end
    end

    # Example:
    #   x += 1
    #     ^
    def prism_spot_local_variable_operator_write_for_name
      prism_location(@node.binary_operator_loc.chop)
    end

    # Example:
    #   x += 1
    #        ^
    def prism_spot_local_variable_operator_write_for_args
      prism_location(@node.value.location)
    end

    # Example:
    #   x.foo += 42
    #    ^^^     (for foo)
    #   x.foo += 42
    #         ^  (for +)
    #   x.foo += 42
    #    ^^^^^^^ (for foo=)
    def prism_spot_call_operator_write_for_name
      if !@name.start_with?(/[[:alpha:]_]/)
        prism_location(@node.binary_operator_loc.chop)
      else
        location = @node.message_loc
        if @node.call_operator_loc.start_line == location.start_line
          location = @node.call_operator_loc.join(location)
        end

        location = location.adjoin("=") if @name.end_with?("=")
        prism_location(location)
      end
    end

    # Example:
    #   x.foo += 42
    #            ^^
    def prism_spot_call_operator_write_for_args
      prism_location(@node.value.location)
    end

    # Example:
    #   x[1] += 42
    #    ^^^    (for [])
    #   x[1] += 42
    #        ^  (for +)
    #   x[1] += 42
    #    ^^^^^^ (for []=)
    def prism_spot_index_operator_write_for_name
      case @name
      when :[]
        prism_location(@node.opening_loc.join(@node.closing_loc))
      when :[]=
        prism_location(@node.opening_loc.join(@node.closing_loc).adjoin("="))
      else
        # Explicitly turn off foo[] += 1 syntax when the operator is not on
        # the same line because error_highlight expects this to not work.
        return nil if @node.binary_operator_loc.start_line != @node.opening_loc.start_line

        prism_location(@node.binary_operator_loc.chop)
      end
    end

    # Example:
    #   x[1] += 42
    #     ^^^^^^^^
    def prism_spot_index_operator_write_for_args
      opening_loc =
        if @node.arguments.nil?
          @node.opening_loc.copy(start_offset: @node.opening_loc.start_offset + 1)
        else
          @node.arguments.location
        end

      prism_location(opening_loc.join(@node.value.location))
    end

    # Example:
    #   Foo
    #   ^^^
    def prism_spot_constant_read
      prism_location(@node.location)
    end

    # Example:
    #   Foo::Bar
    #      ^^^^^
    def prism_spot_constant_path
      if @node.parent && @node.parent.location.end_line == @node.location.end_line
        fetch_line(@node.parent.location.end_line)
        prism_location(@node.delimiter_loc.join(@node.name_loc))
      else
        fetch_line(@node.location.end_line)
        location = @node.name_loc
        location = @node.delimiter_loc.join(location) if @node.delimiter_loc.end_line == location.start_line
        prism_location(location)
      end
    end

    # Example:
    #   Foo::Bar += 1
    #      ^^^^^^^^
    def prism_spot_constant_path_operator_write
      if @name == (target = @node.target).name
        prism_location(target.delimiter_loc.join(target.name_loc))
      else
        prism_location(@node.binary_operator_loc.chop)
      end
    end
  end

  private_constant :Spotter
end
PK*J[XH7�..%share/ruby/error_highlight/version.rbnu�[���module ErrorHighlight
  VERSION = "0.7.0"
end
PK*J[�ޞ��	�	'share/ruby/error_highlight/formatter.rbnu�[���module ErrorHighlight
  class DefaultFormatter
    MIN_SNIPPET_WIDTH = 20

    def self.message_for(spot)
      # currently only a one-line code snippet is supported
      return "" unless spot[:first_lineno] == spot[:last_lineno]

      snippet      = spot[:snippet]
      first_column = spot[:first_column]
      last_column  = spot[:last_column]
      ellipsis     = "..."

      # truncate snippet to fit in the viewport
      if max_snippet_width && snippet.size > max_snippet_width
        available_width = max_snippet_width - ellipsis.size
        center          = first_column - max_snippet_width / 2

        visible_start  = last_column < available_width ? 0 : [center, 0].max
        visible_end    = visible_start + max_snippet_width
        visible_start  = snippet.size - max_snippet_width if visible_end > snippet.size

        prefix = visible_start.positive?    ? ellipsis : ""
        suffix = visible_end < snippet.size ? ellipsis : ""

        snippet = prefix + snippet[(visible_start + prefix.size)...(visible_end - suffix.size)] + suffix
        snippet << "\n" unless snippet.end_with?("\n")

        first_column -= visible_start
        last_column  = [last_column - visible_start, snippet.size - 1].min
      end

      indent = snippet[0...first_column].gsub(/[^\t]/, " ")
      marker = indent + "^" * (last_column - first_column)

      "\n\n#{ snippet }#{ marker }"
    end

    def self.max_snippet_width
      return if Ractor.current[:__error_highlight_max_snippet_width__] == :disabled

      Ractor.current[:__error_highlight_max_snippet_width__] ||= terminal_width
    end

    def self.max_snippet_width=(width)
      return Ractor.current[:__error_highlight_max_snippet_width__] = :disabled if width.nil?

      width = width.to_i

      if width < MIN_SNIPPET_WIDTH
        warn "'max_snippet_width' adjusted to minimum value of #{MIN_SNIPPET_WIDTH}."
        width = MIN_SNIPPET_WIDTH
      end

      Ractor.current[:__error_highlight_max_snippet_width__] = width
    end

    def self.terminal_width
      # lazy load io/console, so it's not loaded when 'max_snippet_width' is set
      require "io/console"
      STDERR.winsize[1] if STDERR.tty?
    rescue LoadError, NoMethodError, SystemCallError
      # do not truncate when window size is not available
    end
  end

  def self.formatter
    Ractor.current[:__error_highlight_formatter__] || DefaultFormatter
  end

  def self.formatter=(formatter)
    Ractor.current[:__error_highlight_formatter__] = formatter
  end
end
PK*J[��=��&share/ruby/error_highlight/core_ext.rbnu�[���require_relative "formatter"

module ErrorHighlight
  module CoreExt
    private def generate_snippet
      spot = ErrorHighlight.spot(self)
      return "" unless spot
      return ErrorHighlight.formatter.message_for(spot)
    end

    if Exception.method_defined?(:detailed_message)
      def detailed_message(highlight: false, error_highlight: true, **)
        return super unless error_highlight
        snippet = generate_snippet
        if highlight
          snippet = snippet.gsub(/.+/) { "\e[1m" + $& + "\e[m" }
        end
        super + snippet
      end
    else
      # This is a marker to let `DidYouMean::Correctable#original_message` skip
      # the following method definition of `to_s`.
      # See https://github.com/ruby/did_you_mean/pull/152
      SKIP_TO_S_FOR_SUPER_LOOKUP = true
      private_constant :SKIP_TO_S_FOR_SUPER_LOOKUP

      def to_s
        msg = super
        snippet = generate_snippet
        if snippet != "" && !msg.include?(snippet)
          msg + snippet
        else
          msg
        end
      end
    end
  end

  NameError.prepend(CoreExt)

  if Exception.method_defined?(:detailed_message)
    # ErrorHighlight is enabled for TypeError and ArgumentError only when Exception#detailed_message is available.
    # This is because changing ArgumentError#message is highly incompatible.
    TypeError.prepend(CoreExt)
    ArgumentError.prepend(CoreExt)
  end
end
PK*J[D4��8�8share/ruby/ostruct.rbnu�[���# frozen_string_literal: true
#
# = ostruct.rb: OpenStruct implementation
#
# Author:: Yukihiro Matsumoto
# Documentation:: Gavin Sinclair
#
# OpenStruct allows the creation of data objects with arbitrary attributes.
# See OpenStruct for an example.
#

#
# An OpenStruct is a data structure, similar to a Hash, that allows the
# definition of arbitrary attributes with their accompanying values. This is
# accomplished by using Ruby's metaprogramming to define methods on the class
# itself.
#
# == Examples
#
#   require "ostruct"
#
#   person = OpenStruct.new
#   person.name = "John Smith"
#   person.age  = 70
#
#   person.name      # => "John Smith"
#   person.age       # => 70
#   person.address   # => nil
#
# An OpenStruct employs a Hash internally to store the attributes and values
# and can even be initialized with one:
#
#   australia = OpenStruct.new(:country => "Australia", :capital => "Canberra")
#     # => #<OpenStruct country="Australia", capital="Canberra">
#
# Hash keys with spaces or characters that could normally not be used for
# method calls (e.g. <code>()[]*</code>) will not be immediately available
# on the OpenStruct object as a method for retrieval or assignment, but can
# still be reached through the Object#send method or using [].
#
#   measurements = OpenStruct.new("length (in inches)" => 24)
#   measurements[:"length (in inches)"]       # => 24
#   measurements.send("length (in inches)")   # => 24
#
#   message = OpenStruct.new(:queued? => true)
#   message.queued?                           # => true
#   message.send("queued?=", false)
#   message.queued?                           # => false
#
# Removing the presence of an attribute requires the execution of the
# delete_field method as setting the property value to +nil+ will not
# remove the attribute.
#
#   first_pet  = OpenStruct.new(:name => "Rowdy", :owner => "John Smith")
#   second_pet = OpenStruct.new(:name => "Rowdy")
#
#   first_pet.owner = nil
#   first_pet                 # => #<OpenStruct name="Rowdy", owner=nil>
#   first_pet == second_pet   # => false
#
#   first_pet.delete_field(:owner)
#   first_pet                 # => #<OpenStruct name="Rowdy">
#   first_pet == second_pet   # => true
#
# Ractor compatibility: A frozen OpenStruct with shareable values is itself shareable.
#
# == Caveats
#
# An OpenStruct utilizes Ruby's method lookup structure to find and define the
# necessary methods for properties. This is accomplished through the methods
# method_missing and define_singleton_method.
#
# This should be a consideration if there is a concern about the performance of
# the objects that are created, as there is much more overhead in the setting
# of these properties compared to using a Hash or a Struct.
# Creating an open struct from a small Hash and accessing a few of the
# entries can be 200 times slower than accessing the hash directly.
#
# This is a potential security issue; building OpenStruct from untrusted user data
# (e.g. JSON web request) may be susceptible to a "symbol denial of service" attack
# since the keys create methods and names of methods are never garbage collected.
#
# This may also be the source of incompatibilities between Ruby versions:
#
#   o = OpenStruct.new
#   o.then # => nil in Ruby < 2.6, enumerator for Ruby >= 2.6
#
# Builtin methods may be overwritten this way, which may be a source of bugs
# or security issues:
#
#   o = OpenStruct.new
#   o.methods # => [:to_h, :marshal_load, :marshal_dump, :each_pair, ...
#   o.methods = [:foo, :bar]
#   o.methods # => [:foo, :bar]
#
# To help remedy clashes, OpenStruct uses only protected/private methods ending with <code>!</code>
# and defines aliases for builtin public methods by adding a <code>!</code>:
#
#   o = OpenStruct.new(make: 'Bentley', class: :luxury)
#   o.class # => :luxury
#   o.class! # => OpenStruct
#
# It is recommended (but not enforced) to not use fields ending in <code>!</code>;
# Note that a subclass' methods may not be overwritten, nor can OpenStruct's own methods
# ending with <code>!</code>.
#
# For all these reasons, consider not using OpenStruct at all.
#
class OpenStruct
  VERSION = "0.6.1"

  HAS_PERFORMANCE_WARNINGS = begin
    Warning[:performance]
    true
  rescue NoMethodError, ArgumentError
    false
  end
  private_constant :HAS_PERFORMANCE_WARNINGS

  #
  # Creates a new OpenStruct object.  By default, the resulting OpenStruct
  # object will have no attributes.
  #
  # The optional +hash+, if given, will generate attributes and values
  # (can be a Hash, an OpenStruct or a Struct).
  # For example:
  #
  #   require "ostruct"
  #   hash = { "country" => "Australia", :capital => "Canberra" }
  #   data = OpenStruct.new(hash)
  #
  #   data   # => #<OpenStruct country="Australia", capital="Canberra">
  #
  def initialize(hash=nil)
    if HAS_PERFORMANCE_WARNINGS && Warning[:performance]
       warn "OpenStruct use is discouraged for performance reasons", uplevel: 1, category: :performance
    end

    if hash
      update_to_values!(hash)
    else
      @table = {}
    end
  end

  # Duplicates an OpenStruct object's Hash table.
  private def initialize_clone(orig) # :nodoc:
    super # clones the singleton class for us
    @table = @table.dup unless @table.frozen?
  end

  private def initialize_dup(orig) # :nodoc:
    super
    update_to_values!(@table)
  end

  private def update_to_values!(hash) # :nodoc:
    @table = {}
    hash.each_pair do |k, v|
      set_ostruct_member_value!(k, v)
    end
  end

  #
  # call-seq:
  #   ostruct.to_h                        -> hash
  #   ostruct.to_h {|name, value| block } -> hash
  #
  # Converts the OpenStruct to a hash with keys representing
  # each attribute (as symbols) and their corresponding values.
  #
  # If a block is given, the results of the block on each pair of
  # the receiver will be used as pairs.
  #
  #   require "ostruct"
  #   data = OpenStruct.new("country" => "Australia", :capital => "Canberra")
  #   data.to_h   # => {:country => "Australia", :capital => "Canberra" }
  #   data.to_h {|name, value| [name.to_s, value.upcase] }
  #               # => {"country" => "AUSTRALIA", "capital" => "CANBERRA" }
  #
  if {test: :to_h}.to_h{ [:works, true] }[:works] # RUBY_VERSION < 2.6 compatibility
    def to_h(&block)
      if block
        @table.to_h(&block)
      else
        @table.dup
      end
    end
  else
    def to_h(&block)
      if block
        @table.map(&block).to_h
      else
        @table.dup
      end
    end
  end

  #
  # :call-seq:
  #   ostruct.each_pair {|name, value| block }  -> ostruct
  #   ostruct.each_pair                         -> Enumerator
  #
  # Yields all attributes (as symbols) along with the corresponding values
  # or returns an enumerator if no block is given.
  #
  #   require "ostruct"
  #   data = OpenStruct.new("country" => "Australia", :capital => "Canberra")
  #   data.each_pair.to_a   # => [[:country, "Australia"], [:capital, "Canberra"]]
  #
  def each_pair
    return to_enum(__method__) { @table.size } unless defined?(yield)
    @table.each_pair{|p| yield p}
    self
  end

  #
  # Provides marshalling support for use by the Marshal library.
  #
  def marshal_dump # :nodoc:
    @table
  end

  #
  # Provides marshalling support for use by the Marshal library.
  #
  alias_method :marshal_load, :update_to_values! # :nodoc:

  #
  # Used internally to defined properties on the
  # OpenStruct. It does this by using the metaprogramming function
  # define_singleton_method for both the getter method and the setter method.
  #
  def new_ostruct_member!(name) # :nodoc:
    unless @table.key?(name) || is_method_protected!(name)
      if defined?(::Ractor)
        getter_proc = nil.instance_eval{ Proc.new { @table[name] } }
        setter_proc = nil.instance_eval{ Proc.new {|x| @table[name] = x} }
        ::Ractor.make_shareable(getter_proc)
        ::Ractor.make_shareable(setter_proc)
      else
        getter_proc = Proc.new { @table[name] }
        setter_proc = Proc.new {|x| @table[name] = x}
      end
      define_singleton_method!(name, &getter_proc)
      define_singleton_method!("#{name}=", &setter_proc)
    end
  end
  private :new_ostruct_member!

  private def is_method_protected!(name) # :nodoc:
    if !respond_to?(name, true)
      false
    elsif name.match?(/!$/)
      true
    else
      owner = method!(name).owner
      if owner.class == ::Class
        owner < ::OpenStruct
      else
        self.class!.ancestors.any? do |mod|
          return false if mod == ::OpenStruct
          mod == owner
        end
      end
    end
  end

  def freeze
    @table.freeze
    super
  end

  private def method_missing(mid, *args) # :nodoc:
    len = args.length
    if mname = mid[/.*(?==\z)/m]
      if len != 1
        raise! ArgumentError, "wrong number of arguments (given #{len}, expected 1)", caller(1)
      end
      set_ostruct_member_value!(mname, args[0])
    elsif len == 0
      @table[mid]
    else
      begin
        super
      rescue NoMethodError => err
        err.backtrace.shift
        raise!
      end
    end
  end

  #
  # :call-seq:
  #   ostruct[name]  -> object
  #
  # Returns the value of an attribute, or +nil+ if there is no such attribute.
  #
  #   require "ostruct"
  #   person = OpenStruct.new("name" => "John Smith", "age" => 70)
  #   person[:age]   # => 70, same as person.age
  #
  def [](name)
    @table[name.to_sym]
  end

  #
  # :call-seq:
  #   ostruct[name] = obj  -> obj
  #
  # Sets the value of an attribute.
  #
  #   require "ostruct"
  #   person = OpenStruct.new("name" => "John Smith", "age" => 70)
  #   person[:age] = 42   # equivalent to person.age = 42
  #   person.age          # => 42
  #
  def []=(name, value)
    name = name.to_sym
    new_ostruct_member!(name)
    @table[name] = value
  end
  alias_method :set_ostruct_member_value!, :[]=
  private :set_ostruct_member_value!

  # :call-seq:
  #   ostruct.dig(name, *identifiers) -> object
  #
  # Finds and returns the object in nested objects
  # that is specified by +name+ and +identifiers+.
  # The nested objects may be instances of various classes.
  # See {Dig Methods}[rdoc-ref:dig_methods.rdoc].
  #
  # Examples:
  #   require "ostruct"
  #   address = OpenStruct.new("city" => "Anytown NC", "zip" => 12345)
  #   person  = OpenStruct.new("name" => "John Smith", "address" => address)
  #   person.dig(:address, "zip") # => 12345
  #   person.dig(:business_address, "zip") # => nil
  def dig(name, *names)
    begin
      name = name.to_sym
    rescue NoMethodError
      raise! TypeError, "#{name} is not a symbol nor a string"
    end
    @table.dig(name, *names)
  end

  #
  # Removes the named field from the object and returns the value the field
  # contained if it was defined. You may optionally provide a block.
  # If the field is not defined, the result of the block is returned,
  # or a NameError is raised if no block was given.
  #
  #   require "ostruct"
  #
  #   person = OpenStruct.new(name: "John", age: 70, pension: 300)
  #
  #   person.delete_field!("age")  # => 70
  #   person                       # => #<OpenStruct name="John", pension=300>
  #
  # Setting the value to +nil+ will not remove the attribute:
  #
  #   person.pension = nil
  #   person                 # => #<OpenStruct name="John", pension=nil>
  #
  #   person.delete_field('number')  # => NameError
  #
  #   person.delete_field('number') { 8675_309 } # => 8675309
  #
  def delete_field(name, &block)
    sym = name.to_sym
    begin
      singleton_class.remove_method(sym, "#{sym}=")
    rescue NameError
    end
    @table.delete(sym) do
      return yield if block
      raise! NameError.new("no field '#{sym}' in #{self}", sym)
    end
  end

  InspectKey = :__inspect_key__ # :nodoc:

  #
  # Returns a string containing a detailed summary of the keys and values.
  #
  def inspect
    ids = (Thread.current[InspectKey] ||= [])
    if ids.include?(object_id)
      detail = ' ...'
    else
      ids << object_id
      begin
        detail = @table.map do |key, value|
          " #{key}=#{value.inspect}"
        end.join(',')
      ensure
        ids.pop
      end
    end
    ['#<', self.class!, detail, '>'].join
  end
  alias :to_s :inspect

  attr_reader :table # :nodoc:
  alias table! table
  protected :table!

  #
  # Compares this object and +other+ for equality.  An OpenStruct is equal to
  # +other+ when +other+ is an OpenStruct and the two objects' Hash tables are
  # equal.
  #
  #   require "ostruct"
  #   first_pet  = OpenStruct.new("name" => "Rowdy")
  #   second_pet = OpenStruct.new(:name  => "Rowdy")
  #   third_pet  = OpenStruct.new("name" => "Rowdy", :age => nil)
  #
  #   first_pet == second_pet   # => true
  #   first_pet == third_pet    # => false
  #
  def ==(other)
    return false unless other.kind_of?(OpenStruct)
    @table == other.table!
  end

  #
  # Compares this object and +other+ for equality.  An OpenStruct is eql? to
  # +other+ when +other+ is an OpenStruct and the two objects' Hash tables are
  # eql?.
  #
  def eql?(other)
    return false unless other.kind_of?(OpenStruct)
    @table.eql?(other.table!)
  end

  # Computes a hash code for this OpenStruct.
  def hash # :nodoc:
    @table.hash
  end

  #
  # Provides marshalling support for use by the YAML library.
  #
  def encode_with(coder) # :nodoc:
    @table.each_pair do |key, value|
      coder[key.to_s] = value
    end
    if @table.size == 1 && @table.key?(:table) # support for legacy format
      # in the very unlikely case of a single entry called 'table'
      coder['legacy_support!'] = true # add a bogus second entry
    end
  end

  #
  # Provides marshalling support for use by the YAML library.
  #
  def init_with(coder) # :nodoc:
    h = coder.map
    if h.size == 1 # support for legacy format
      key, val = h.first
      if key == 'table'
        h = val
      end
    end
    update_to_values!(h)
  end

  # Make all public methods (builtin or our own) accessible with <code>!</code>:
  give_access = instance_methods
  # See https://github.com/ruby/ostruct/issues/30
  give_access -= %i[instance_exec instance_eval eval] if RUBY_ENGINE == 'jruby'
  give_access.each do |method|
    next if method.match(/\W$/)

    new_name = "#{method}!"
    alias_method new_name, method
  end
  # Other builtin private methods we use:
  alias_method :raise!, :raise
  private :raise!

  # See https://github.com/ruby/ostruct/issues/40
  if RUBY_ENGINE != 'jruby'
    alias_method :block_given!, :block_given?
    private :block_given!
  end
end
PK*J[baA2��)share/ruby/reline/key_actor/vi_command.rbnu�[���module Reline::KeyActor
  VI_COMMAND_MAPPING = [
    #   0 ^@
    nil,
    #   1 ^A
    :ed_move_to_beg,
    #   2 ^B
    nil,
    #   3 ^C
    :ed_ignore,
    #   4 ^D
    :vi_end_of_transmission,
    #   5 ^E
    :ed_move_to_end,
    #   6 ^F
    nil,
    #   7 ^G
    nil,
    #   8 ^H
    :ed_prev_char,
    #   9 ^I
    nil,
    #  10 ^J
    :ed_newline,
    #  11 ^K
    :ed_kill_line,
    #  12 ^L
    :ed_clear_screen,
    #  13 ^M
    :ed_newline,
    #  14 ^N
    :ed_next_history,
    #  15 ^O
    :ed_ignore,
    #  16 ^P
    :ed_prev_history,
    #  17 ^Q
    :ed_ignore,
    #  18 ^R
    :vi_search_prev,
    #  19 ^S
    :ed_ignore,
    #  20 ^T
    :ed_transpose_chars,
    #  21 ^U
    :vi_kill_line_prev,
    #  22 ^V
    :ed_quoted_insert,
    #  23 ^W
    :ed_delete_prev_word,
    #  24 ^X
    nil,
    #  25 ^Y
    :em_yank,
    #  26 ^Z
    nil,
    #  27 ^[
    nil,
    #  28 ^\
    :ed_ignore,
    #  29 ^]
    nil,
    #  30 ^^
    nil,
    #  31 ^_
    nil,
    #  32 SPACE
    :ed_next_char,
    #  33 !
    nil,
    #  34 "
    nil,
    #  35 #
    :vi_comment_out,
    #  36 $
    :ed_move_to_end,
    #  37 %
    nil,
    #  38 &
    nil,
    #  39 '
    nil,
    #  40 (
    nil,
    #  41 )
    nil,
    #  42 *
    nil,
    #  43 +
    :ed_next_history,
    #  44 ,
    nil,
    #  45 -
    :ed_prev_history,
    #  46 .
    nil,
    #  47 /
    :vi_search_prev,
    #  48 0
    :vi_zero,
    #  49 1
    :ed_argument_digit,
    #  50 2
    :ed_argument_digit,
    #  51 3
    :ed_argument_digit,
    #  52 4
    :ed_argument_digit,
    #  53 5
    :ed_argument_digit,
    #  54 6
    :ed_argument_digit,
    #  55 7
    :ed_argument_digit,
    #  56 8
    :ed_argument_digit,
    #  57 9
    :ed_argument_digit,
    #  58 :
    nil,
    #  59 ;
    nil,
    #  60 <
    nil,
    #  61 =
    nil,
    #  62 >
    nil,
    #  63 ?
    :vi_search_next,
    #  64 @
    :vi_alias,
    #  65 A
    :vi_add_at_eol,
    #  66 B
    :vi_prev_big_word,
    #  67 C
    :vi_change_to_eol,
    #  68 D
    :ed_kill_line,
    #  69 E
    :vi_end_big_word,
    #  70 F
    :vi_prev_char,
    #  71 G
    :vi_to_history_line,
    #  72 H
    nil,
    #  73 I
    :vi_insert_at_bol,
    #  74 J
    :vi_join_lines,
    #  75 K
    :vi_search_prev,
    #  76 L
    nil,
    #  77 M
    nil,
    #  78 N
    nil,
    #  79 O
    nil,
    #  80 P
    :vi_paste_prev,
    #  81 Q
    nil,
    #  82 R
    nil,
    #  83 S
    nil,
    #  84 T
    :vi_to_prev_char,
    #  85 U
    nil,
    #  86 V
    nil,
    #  87 W
    :vi_next_big_word,
    #  88 X
    :ed_delete_prev_char,
    #  89 Y
    nil,
    #  90 Z
    nil,
    #  91 [
    nil,
    #  92 \
    nil,
    #  93 ]
    nil,
    #  94 ^
    :vi_first_print,
    #  95 _
    nil,
    #  96 `
    nil,
    #  97 a
    :vi_add,
    #  98 b
    :vi_prev_word,
    #  99 c
    :vi_change_meta,
    # 100 d
    :vi_delete_meta,
    # 101 e
    :vi_end_word,
    # 102 f
    :vi_next_char,
    # 103 g
    nil,
    # 104 h
    :ed_prev_char,
    # 105 i
    :vi_insert,
    # 106 j
    :ed_next_history,
    # 107 k
    :ed_prev_history,
    # 108 l
    :ed_next_char,
    # 109 m
    nil,
    # 110 n
    nil,
    # 111 o
    nil,
    # 112 p
    :vi_paste_next,
    # 113 q
    nil,
    # 114 r
    :vi_replace_char,
    # 115 s
    nil,
    # 116 t
    :vi_to_next_char,
    # 117 u
    nil,
    # 118 v
    :vi_histedit,
    # 119 w
    :vi_next_word,
    # 120 x
    :ed_delete_next_char,
    # 121 y
    :vi_yank,
    # 122 z
    nil,
    # 123 {
    nil,
    # 124 |
    :vi_to_column,
    # 125 }
    nil,
    # 126 ~
    nil,
    # 127 ^?
    :em_delete_prev_char,
    # 128 M-^@
    nil,
    # 129 M-^A
    nil,
    # 130 M-^B
    nil,
    # 131 M-^C
    nil,
    # 132 M-^D
    nil,
    # 133 M-^E
    nil,
    # 134 M-^F
    nil,
    # 135 M-^G
    nil,
    # 136 M-^H
    nil,
    # 137 M-^I
    nil,
    # 138 M-^J
    nil,
    # 139 M-^K
    nil,
    # 140 M-^L
    nil,
    # 141 M-^M
    nil,
    # 142 M-^N
    nil,
    # 143 M-^O
    nil,
    # 144 M-^P
    nil,
    # 145 M-^Q
    nil,
    # 146 M-^R
    nil,
    # 147 M-^S
    nil,
    # 148 M-^T
    nil,
    # 149 M-^U
    nil,
    # 150 M-^V
    nil,
    # 151 M-^W
    nil,
    # 152 M-^X
    nil,
    # 153 M-^Y
    nil,
    # 154 M-^Z
    nil,
    # 155 M-^[
    nil,
    # 156 M-^\
    nil,
    # 157 M-^]
    nil,
    # 158 M-^^
    nil,
    # 159 M-^_
    nil,
    # 160 M-SPACE
    nil,
    # 161 M-!
    nil,
    # 162 M-"
    nil,
    # 163 M-#
    nil,
    # 164 M-$
    nil,
    # 165 M-%
    nil,
    # 166 M-&
    nil,
    # 167 M-'
    nil,
    # 168 M-(
    nil,
    # 169 M-)
    nil,
    # 170 M-*
    nil,
    # 171 M-+
    nil,
    # 172 M-,
    nil,
    # 173 M--
    nil,
    # 174 M-.
    nil,
    # 175 M-/
    nil,
    # 176 M-0
    nil,
    # 177 M-1
    nil,
    # 178 M-2
    nil,
    # 179 M-3
    nil,
    # 180 M-4
    nil,
    # 181 M-5
    nil,
    # 182 M-6
    nil,
    # 183 M-7
    nil,
    # 184 M-8
    nil,
    # 185 M-9
    nil,
    # 186 M-:
    nil,
    # 187 M-;
    nil,
    # 188 M-<
    nil,
    # 189 M-=
    nil,
    # 190 M->
    nil,
    # 191 M-?
    nil,
    # 192 M-@
    nil,
    # 193 M-A
    nil,
    # 194 M-B
    nil,
    # 195 M-C
    nil,
    # 196 M-D
    nil,
    # 197 M-E
    nil,
    # 198 M-F
    nil,
    # 199 M-G
    nil,
    # 200 M-H
    nil,
    # 201 M-I
    nil,
    # 202 M-J
    nil,
    # 203 M-K
    nil,
    # 204 M-L
    nil,
    # 205 M-M
    nil,
    # 206 M-N
    nil,
    # 207 M-O
    nil,
    # 208 M-P
    nil,
    # 209 M-Q
    nil,
    # 210 M-R
    nil,
    # 211 M-S
    nil,
    # 212 M-T
    nil,
    # 213 M-U
    nil,
    # 214 M-V
    nil,
    # 215 M-W
    nil,
    # 216 M-X
    nil,
    # 217 M-Y
    nil,
    # 218 M-Z
    nil,
    # 219 M-[
    nil,
    # 220 M-\
    nil,
    # 221 M-]
    nil,
    # 222 M-^
    nil,
    # 223 M-_
    nil,
    # 224 M-`
    nil,
    # 225 M-a
    nil,
    # 226 M-b
    nil,
    # 227 M-c
    nil,
    # 228 M-d
    nil,
    # 229 M-e
    nil,
    # 230 M-f
    nil,
    # 231 M-g
    nil,
    # 232 M-h
    nil,
    # 233 M-i
    nil,
    # 234 M-j
    nil,
    # 235 M-k
    nil,
    # 236 M-l
    nil,
    # 237 M-m
    nil,
    # 238 M-n
    nil,
    # 239 M-o
    nil,
    # 240 M-p
    nil,
    # 241 M-q
    nil,
    # 242 M-r
    nil,
    # 243 M-s
    nil,
    # 244 M-t
    nil,
    # 245 M-u
    nil,
    # 246 M-v
    nil,
    # 247 M-w
    nil,
    # 248 M-x
    nil,
    # 249 M-y
    nil,
    # 250 M-z
    nil,
    # 251 M-{
    nil,
    # 252 M-|
    nil,
    # 253 M-}
    nil,
    # 254 M-~
    nil,
    # 255 M-^?
    nil
    # EOF
  ]
end

PK*J[��Sgg(share/ruby/reline/key_actor/vi_insert.rbnu�[���module Reline::KeyActor
  VI_INSERT_MAPPING = [
    #   0 ^@
    nil,
    #   1 ^A
    :ed_insert,
    #   2 ^B
    :ed_insert,
    #   3 ^C
    :ed_insert,
    #   4 ^D
    :vi_list_or_eof,
    #   5 ^E
    :ed_insert,
    #   6 ^F
    :ed_insert,
    #   7 ^G
    :ed_insert,
    #   8 ^H
    :vi_delete_prev_char,
    #   9 ^I
    :complete,
    #  10 ^J
    :ed_newline,
    #  11 ^K
    :ed_insert,
    #  12 ^L
    :ed_insert,
    #  13 ^M
    :ed_newline,
    #  14 ^N
    :menu_complete,
    #  15 ^O
    :ed_insert,
    #  16 ^P
    :menu_complete_backward,
    #  17 ^Q
    :ed_ignore,
    #  18 ^R
    :vi_search_prev,
    #  19 ^S
    :vi_search_next,
    #  20 ^T
    :ed_transpose_chars,
    #  21 ^U
    :vi_kill_line_prev,
    #  22 ^V
    :ed_quoted_insert,
    #  23 ^W
    :ed_delete_prev_word,
    #  24 ^X
    :ed_insert,
    #  25 ^Y
    :em_yank,
    #  26 ^Z
    :ed_insert,
    #  27 ^[
    :vi_command_mode,
    #  28 ^\
    :ed_ignore,
    #  29 ^]
    :ed_insert,
    #  30 ^^
    :ed_insert,
    #  31 ^_
    :ed_insert,
    #  32 SPACE
    :ed_insert,
    #  33 !
    :ed_insert,
    #  34 "
    :ed_insert,
    #  35 #
    :ed_insert,
    #  36 $
    :ed_insert,
    #  37 %
    :ed_insert,
    #  38 &
    :ed_insert,
    #  39 '
    :ed_insert,
    #  40 (
    :ed_insert,
    #  41 )
    :ed_insert,
    #  42 *
    :ed_insert,
    #  43 +
    :ed_insert,
    #  44 ,
    :ed_insert,
    #  45 -
    :ed_insert,
    #  46 .
    :ed_insert,
    #  47 /
    :ed_insert,
    #  48 0
    :ed_digit,
    #  49 1
    :ed_digit,
    #  50 2
    :ed_digit,
    #  51 3
    :ed_digit,
    #  52 4
    :ed_digit,
    #  53 5
    :ed_digit,
    #  54 6
    :ed_digit,
    #  55 7
    :ed_digit,
    #  56 8
    :ed_digit,
    #  57 9
    :ed_digit,
    #  58 :
    :ed_insert,
    #  59 ;
    :ed_insert,
    #  60 <
    :ed_insert,
    #  61 =
    :ed_insert,
    #  62 >
    :ed_insert,
    #  63 ?
    :ed_insert,
    #  64 @
    :ed_insert,
    #  65 A
    :ed_insert,
    #  66 B
    :ed_insert,
    #  67 C
    :ed_insert,
    #  68 D
    :ed_insert,
    #  69 E
    :ed_insert,
    #  70 F
    :ed_insert,
    #  71 G
    :ed_insert,
    #  72 H
    :ed_insert,
    #  73 I
    :ed_insert,
    #  74 J
    :ed_insert,
    #  75 K
    :ed_insert,
    #  76 L
    :ed_insert,
    #  77 M
    :ed_insert,
    #  78 N
    :ed_insert,
    #  79 O
    :ed_insert,
    #  80 P
    :ed_insert,
    #  81 Q
    :ed_insert,
    #  82 R
    :ed_insert,
    #  83 S
    :ed_insert,
    #  84 T
    :ed_insert,
    #  85 U
    :ed_insert,
    #  86 V
    :ed_insert,
    #  87 W
    :ed_insert,
    #  88 X
    :ed_insert,
    #  89 Y
    :ed_insert,
    #  90 Z
    :ed_insert,
    #  91 [
    :ed_insert,
    #  92 \
    :ed_insert,
    #  93 ]
    :ed_insert,
    #  94 ^
    :ed_insert,
    #  95 _
    :ed_insert,
    #  96 `
    :ed_insert,
    #  97 a
    :ed_insert,
    #  98 b
    :ed_insert,
    #  99 c
    :ed_insert,
    # 100 d
    :ed_insert,
    # 101 e
    :ed_insert,
    # 102 f
    :ed_insert,
    # 103 g
    :ed_insert,
    # 104 h
    :ed_insert,
    # 105 i
    :ed_insert,
    # 106 j
    :ed_insert,
    # 107 k
    :ed_insert,
    # 108 l
    :ed_insert,
    # 109 m
    :ed_insert,
    # 110 n
    :ed_insert,
    # 111 o
    :ed_insert,
    # 112 p
    :ed_insert,
    # 113 q
    :ed_insert,
    # 114 r
    :ed_insert,
    # 115 s
    :ed_insert,
    # 116 t
    :ed_insert,
    # 117 u
    :ed_insert,
    # 118 v
    :ed_insert,
    # 119 w
    :ed_insert,
    # 120 x
    :ed_insert,
    # 121 y
    :ed_insert,
    # 122 z
    :ed_insert,
    # 123 {
    :ed_insert,
    # 124 |
    :ed_insert,
    # 125 }
    :ed_insert,
    # 126 ~
    :ed_insert,
    # 127 ^?
    :vi_delete_prev_char,
    # 128 M-^@
    nil,
    # 129 M-^A
    nil,
    # 130 M-^B
    nil,
    # 131 M-^C
    nil,
    # 132 M-^D
    nil,
    # 133 M-^E
    nil,
    # 134 M-^F
    nil,
    # 135 M-^G
    nil,
    # 136 M-^H
    nil,
    # 137 M-^I
    nil,
    # 138 M-^J
    :key_newline,
    # 139 M-^K
    nil,
    # 140 M-^L
    nil,
    # 141 M-^M
    :key_newline,
    # 142 M-^N
    nil,
    # 143 M-^O
    nil,
    # 144 M-^P
    nil,
    # 145 M-^Q
    nil,
    # 146 M-^R
    nil,
    # 147 M-^S
    nil,
    # 148 M-^T
    nil,
    # 149 M-^U
    nil,
    # 150 M-^V
    nil,
    # 151 M-^W
    nil,
    # 152 M-^X
    nil,
    # 153 M-^Y
    nil,
    # 154 M-^Z
    nil,
    # 155 M-^[
    nil,
    # 156 M-^\
    nil,
    # 157 M-^]
    nil,
    # 158 M-^^
    nil,
    # 159 M-^_
    nil,
    # 160 M-SPACE
    nil,
    # 161 M-!
    nil,
    # 162 M-"
    nil,
    # 163 M-#
    nil,
    # 164 M-$
    nil,
    # 165 M-%
    nil,
    # 166 M-&
    nil,
    # 167 M-'
    nil,
    # 168 M-(
    nil,
    # 169 M-)
    nil,
    # 170 M-*
    nil,
    # 171 M-+
    nil,
    # 172 M-,
    nil,
    # 173 M--
    nil,
    # 174 M-.
    nil,
    # 175 M-/
    nil,
    # 176 M-0
    nil,
    # 177 M-1
    nil,
    # 178 M-2
    nil,
    # 179 M-3
    nil,
    # 180 M-4
    nil,
    # 181 M-5
    nil,
    # 182 M-6
    nil,
    # 183 M-7
    nil,
    # 184 M-8
    nil,
    # 185 M-9
    nil,
    # 186 M-:
    nil,
    # 187 M-;
    nil,
    # 188 M-<
    nil,
    # 189 M-=
    nil,
    # 190 M->
    nil,
    # 191 M-?
    nil,
    # 192 M-@
    nil,
    # 193 M-A
    nil,
    # 194 M-B
    nil,
    # 195 M-C
    nil,
    # 196 M-D
    nil,
    # 197 M-E
    nil,
    # 198 M-F
    nil,
    # 199 M-G
    nil,
    # 200 M-H
    nil,
    # 201 M-I
    nil,
    # 202 M-J
    nil,
    # 203 M-K
    nil,
    # 204 M-L
    nil,
    # 205 M-M
    nil,
    # 206 M-N
    nil,
    # 207 M-O
    nil,
    # 208 M-P
    nil,
    # 209 M-Q
    nil,
    # 210 M-R
    nil,
    # 211 M-S
    nil,
    # 212 M-T
    nil,
    # 213 M-U
    nil,
    # 214 M-V
    nil,
    # 215 M-W
    nil,
    # 216 M-X
    nil,
    # 217 M-Y
    nil,
    # 218 M-Z
    nil,
    # 219 M-[
    nil,
    # 220 M-\
    nil,
    # 221 M-]
    nil,
    # 222 M-^
    nil,
    # 223 M-_
    nil,
    # 224 M-`
    nil,
    # 225 M-a
    nil,
    # 226 M-b
    nil,
    # 227 M-c
    nil,
    # 228 M-d
    nil,
    # 229 M-e
    nil,
    # 230 M-f
    nil,
    # 231 M-g
    nil,
    # 232 M-h
    nil,
    # 233 M-i
    nil,
    # 234 M-j
    nil,
    # 235 M-k
    nil,
    # 236 M-l
    nil,
    # 237 M-m
    nil,
    # 238 M-n
    nil,
    # 239 M-o
    nil,
    # 240 M-p
    nil,
    # 241 M-q
    nil,
    # 242 M-r
    nil,
    # 243 M-s
    nil,
    # 244 M-t
    nil,
    # 245 M-u
    nil,
    # 246 M-v
    nil,
    # 247 M-w
    nil,
    # 248 M-x
    nil,
    # 249 M-y
    nil,
    # 250 M-z
    nil,
    # 251 M-{
    nil,
    # 252 M-|
    nil,
    # 253 M-}
    nil,
    # 254 M-~
    nil,
    # 255 M-^?
    nil
    # EOF
  ]
end
PK*J[�yx�DD(share/ruby/reline/key_actor/composite.rbnu�[���class Reline::KeyActor::Composite
  def initialize(key_actors)
    @key_actors = key_actors
  end

  def matching?(key)
    @key_actors.any? { |key_actor| key_actor.matching?(key) }
  end

  def get(key)
    @key_actors.each do |key_actor|
      func = key_actor.get(key)
      return func if func
    end
    nil
  end
end
PK*J[`�X���#share/ruby/reline/key_actor/base.rbnu�[���class Reline::KeyActor::Base
  def initialize(mappings = nil)
    @matching_bytes = {}
    @key_bindings = {}
    add_mappings(mappings) if mappings
  end

  def add_mappings(mappings)
    add([27], :ed_ignore)
    128.times do |key|
      func = mappings[key]
      meta_func = mappings[key | 0b10000000]
      add([key], func) if func
      add([27, key], meta_func) if meta_func
    end
  end

  def add(key, func)
    (1...key.size).each do |size|
      @matching_bytes[key.take(size)] = true
    end
    @key_bindings[key] = func
  end

  def matching?(key)
    @matching_bytes[key]
  end

  def get(key)
    @key_bindings[key]
  end

  def clear
    @matching_bytes.clear
    @key_bindings.clear
  end
end
PK*J[��$share/ruby/reline/key_actor/emacs.rbnu�[���module Reline::KeyActor
  EMACS_MAPPING = [
    #   0 ^@
    :em_set_mark,
    #   1 ^A
    :ed_move_to_beg,
    #   2 ^B
    :ed_prev_char,
    #   3 ^C
    :ed_ignore,
    #   4 ^D
    :em_delete,
    #   5 ^E
    :ed_move_to_end,
    #   6 ^F
    :ed_next_char,
    #   7 ^G
    nil,
    #   8 ^H
    :em_delete_prev_char,
    #   9 ^I
    :complete,
    #  10 ^J
    :ed_newline,
    #  11 ^K
    :ed_kill_line,
    #  12 ^L
    :ed_clear_screen,
    #  13 ^M
    :ed_newline,
    #  14 ^N
    :ed_next_history,
    #  15 ^O
    :ed_ignore,
    #  16 ^P
    :ed_prev_history,
    #  17 ^Q
    :ed_quoted_insert,
    #  18 ^R
    :vi_search_prev,
    #  19 ^S
    :vi_search_next,
    #  20 ^T
    :ed_transpose_chars,
    #  21 ^U
    :unix_line_discard,
    #  22 ^V
    :ed_quoted_insert,
    #  23 ^W
    :em_kill_region,
    #  24 ^X
    nil,
    #  25 ^Y
    :em_yank,
    #  26 ^Z
    :ed_ignore,
    #  27 ^[
    nil,
    #  28 ^\
    :ed_ignore,
    #  29 ^]
    :ed_ignore,
    #  30 ^^
    nil,
    #  31 ^_
    :undo,
    #  32 SPACE
    :ed_insert,
    #  33 !
    :ed_insert,
    #  34 "
    :ed_insert,
    #  35 #
    :ed_insert,
    #  36 $
    :ed_insert,
    #  37 %
    :ed_insert,
    #  38 &
    :ed_insert,
    #  39 '
    :ed_insert,
    #  40 (
    :ed_insert,
    #  41 )
    :ed_insert,
    #  42 *
    :ed_insert,
    #  43 +
    :ed_insert,
    #  44 ,
    :ed_insert,
    #  45 -
    :ed_insert,
    #  46 .
    :ed_insert,
    #  47 /
    :ed_insert,
    #  48 0
    :ed_digit,
    #  49 1
    :ed_digit,
    #  50 2
    :ed_digit,
    #  51 3
    :ed_digit,
    #  52 4
    :ed_digit,
    #  53 5
    :ed_digit,
    #  54 6
    :ed_digit,
    #  55 7
    :ed_digit,
    #  56 8
    :ed_digit,
    #  57 9
    :ed_digit,
    #  58 :
    :ed_insert,
    #  59 ;
    :ed_insert,
    #  60 <
    :ed_insert,
    #  61 =
    :ed_insert,
    #  62 >
    :ed_insert,
    #  63 ?
    :ed_insert,
    #  64 @
    :ed_insert,
    #  65 A
    :ed_insert,
    #  66 B
    :ed_insert,
    #  67 C
    :ed_insert,
    #  68 D
    :ed_insert,
    #  69 E
    :ed_insert,
    #  70 F
    :ed_insert,
    #  71 G
    :ed_insert,
    #  72 H
    :ed_insert,
    #  73 I
    :ed_insert,
    #  74 J
    :ed_insert,
    #  75 K
    :ed_insert,
    #  76 L
    :ed_insert,
    #  77 M
    :ed_insert,
    #  78 N
    :ed_insert,
    #  79 O
    :ed_insert,
    #  80 P
    :ed_insert,
    #  81 Q
    :ed_insert,
    #  82 R
    :ed_insert,
    #  83 S
    :ed_insert,
    #  84 T
    :ed_insert,
    #  85 U
    :ed_insert,
    #  86 V
    :ed_insert,
    #  87 W
    :ed_insert,
    #  88 X
    :ed_insert,
    #  89 Y
    :ed_insert,
    #  90 Z
    :ed_insert,
    #  91 [
    :ed_insert,
    #  92 \
    :ed_insert,
    #  93 ]
    :ed_insert,
    #  94 ^
    :ed_insert,
    #  95 _
    :ed_insert,
    #  96 `
    :ed_insert,
    #  97 a
    :ed_insert,
    #  98 b
    :ed_insert,
    #  99 c
    :ed_insert,
    # 100 d
    :ed_insert,
    # 101 e
    :ed_insert,
    # 102 f
    :ed_insert,
    # 103 g
    :ed_insert,
    # 104 h
    :ed_insert,
    # 105 i
    :ed_insert,
    # 106 j
    :ed_insert,
    # 107 k
    :ed_insert,
    # 108 l
    :ed_insert,
    # 109 m
    :ed_insert,
    # 110 n
    :ed_insert,
    # 111 o
    :ed_insert,
    # 112 p
    :ed_insert,
    # 113 q
    :ed_insert,
    # 114 r
    :ed_insert,
    # 115 s
    :ed_insert,
    # 116 t
    :ed_insert,
    # 117 u
    :ed_insert,
    # 118 v
    :ed_insert,
    # 119 w
    :ed_insert,
    # 120 x
    :ed_insert,
    # 121 y
    :ed_insert,
    # 122 z
    :ed_insert,
    # 123 {
    :ed_insert,
    # 124 |
    :ed_insert,
    # 125 }
    :ed_insert,
    # 126 ~
    :ed_insert,
    # 127 ^?
    :em_delete_prev_char,
    # 128 M-^@
    nil,
    # 129 M-^A
    nil,
    # 130 M-^B
    nil,
    # 131 M-^C
    nil,
    # 132 M-^D
    nil,
    # 133 M-^E
    nil,
    # 134 M-^F
    nil,
    # 135 M-^G
    nil,
    # 136 M-^H
    :ed_delete_prev_word,
    # 137 M-^I
    nil,
    # 138 M-^J
    :key_newline,
    # 139 M-^K
    nil,
    # 140 M-^L
    :ed_clear_screen,
    # 141 M-^M
    :key_newline,
    # 142 M-^N
    nil,
    # 143 M-^O
    nil,
    # 144 M-^P
    nil,
    # 145 M-^Q
    nil,
    # 146 M-^R
    nil,
    # 147 M-^S
    nil,
    # 148 M-^T
    nil,
    # 149 M-^U
    nil,
    # 150 M-^V
    nil,
    # 151 M-^W
    nil,
    # 152 M-^X
    nil,
    # 153 M-^Y
    :em_yank_pop,
    # 154 M-^Z
    nil,
    # 155 M-^[
    nil,
    # 156 M-^\
    nil,
    # 157 M-^]
    nil,
    # 158 M-^^
    nil,
    # 159 M-^_
    :redo,
    # 160 M-SPACE
    :em_set_mark,
    # 161 M-!
    nil,
    # 162 M-"
    nil,
    # 163 M-#
    nil,
    # 164 M-$
    nil,
    # 165 M-%
    nil,
    # 166 M-&
    nil,
    # 167 M-'
    nil,
    # 168 M-(
    nil,
    # 169 M-)
    nil,
    # 170 M-*
    nil,
    # 171 M-+
    nil,
    # 172 M-,
    nil,
    # 173 M--
    nil,
    # 174 M-.
    nil,
    # 175 M-/
    nil,
    # 176 M-0
    :ed_argument_digit,
    # 177 M-1
    :ed_argument_digit,
    # 178 M-2
    :ed_argument_digit,
    # 179 M-3
    :ed_argument_digit,
    # 180 M-4
    :ed_argument_digit,
    # 181 M-5
    :ed_argument_digit,
    # 182 M-6
    :ed_argument_digit,
    # 183 M-7
    :ed_argument_digit,
    # 184 M-8
    :ed_argument_digit,
    # 185 M-9
    :ed_argument_digit,
    # 186 M-:
    nil,
    # 187 M-;
    nil,
    # 188 M-<
    nil,
    # 189 M-=
    nil,
    # 190 M->
    nil,
    # 191 M-?
    nil,
    # 192 M-@
    nil,
    # 193 M-A
    nil,
    # 194 M-B
    :ed_prev_word,
    # 195 M-C
    :em_capitol_case,
    # 196 M-D
    :em_delete_next_word,
    # 197 M-E
    nil,
    # 198 M-F
    :em_next_word,
    # 199 M-G
    nil,
    # 200 M-H
    nil,
    # 201 M-I
    nil,
    # 202 M-J
    nil,
    # 203 M-K
    nil,
    # 204 M-L
    :em_lower_case,
    # 205 M-M
    nil,
    # 206 M-N
    :vi_search_next,
    # 207 M-O
    nil,
    # 208 M-P
    :vi_search_prev,
    # 209 M-Q
    nil,
    # 210 M-R
    nil,
    # 211 M-S
    nil,
    # 212 M-T
    nil,
    # 213 M-U
    :em_upper_case,
    # 214 M-V
    nil,
    # 215 M-W
    nil,
    # 216 M-X
    nil,
    # 217 M-Y
    :em_yank_pop,
    # 218 M-Z
    nil,
    # 219 M-[
    nil,
    # 220 M-\
    nil,
    # 221 M-]
    nil,
    # 222 M-^
    nil,
    # 223 M-_
    nil,
    # 224 M-`
    nil,
    # 225 M-a
    nil,
    # 226 M-b
    :ed_prev_word,
    # 227 M-c
    :em_capitol_case,
    # 228 M-d
    :em_delete_next_word,
    # 229 M-e
    nil,
    # 230 M-f
    :em_next_word,
    # 231 M-g
    nil,
    # 232 M-h
    nil,
    # 233 M-i
    nil,
    # 234 M-j
    nil,
    # 235 M-k
    nil,
    # 236 M-l
    :em_lower_case,
    # 237 M-m
    nil,
    # 238 M-n
    :vi_search_next,
    # 239 M-o
    nil,
    # 240 M-p
    :vi_search_prev,
    # 241 M-q
    nil,
    # 242 M-r
    nil,
    # 243 M-s
    nil,
    # 244 M-t
    :ed_transpose_words,
    # 245 M-u
    :em_upper_case,
    # 246 M-v
    nil,
    # 247 M-w
    nil,
    # 248 M-x
    nil,
    # 249 M-y
    nil,
    # 250 M-z
    nil,
    # 251 M-{
    nil,
    # 252 M-|
    nil,
    # 253 M-}
    nil,
    # 254 M-~
    nil,
    # 255 M-^?
    :ed_delete_prev_word
    # EOF
  ]
end
PK*J[���+U+U-share/ruby/reline/unicode/east_asian_width.rbnu�[���class Reline::Unicode::EastAsianWidth
  # This is based on EastAsianWidth.txt
  # UNICODE_VERSION = '15.1.0'

  CHUNK_LAST, CHUNK_WIDTH = [
    [0x1f, 2],
    [0x7e, 1],
    [0x7f, 2],
    [0xa0, 1],
    [0xa1, -1],
    [0xa3, 1],
    [0xa4, -1],
    [0xa6, 1],
    [0xa8, -1],
    [0xa9, 1],
    [0xaa, -1],
    [0xac, 1],
    [0xae, -1],
    [0xaf, 1],
    [0xb4, -1],
    [0xb5, 1],
    [0xba, -1],
    [0xbb, 1],
    [0xbf, -1],
    [0xc5, 1],
    [0xc6, -1],
    [0xcf, 1],
    [0xd0, -1],
    [0xd6, 1],
    [0xd8, -1],
    [0xdd, 1],
    [0xe1, -1],
    [0xe5, 1],
    [0xe6, -1],
    [0xe7, 1],
    [0xea, -1],
    [0xeb, 1],
    [0xed, -1],
    [0xef, 1],
    [0xf0, -1],
    [0xf1, 1],
    [0xf3, -1],
    [0xf6, 1],
    [0xfa, -1],
    [0xfb, 1],
    [0xfc, -1],
    [0xfd, 1],
    [0xfe, -1],
    [0x100, 1],
    [0x101, -1],
    [0x110, 1],
    [0x111, -1],
    [0x112, 1],
    [0x113, -1],
    [0x11a, 1],
    [0x11b, -1],
    [0x125, 1],
    [0x127, -1],
    [0x12a, 1],
    [0x12b, -1],
    [0x130, 1],
    [0x133, -1],
    [0x137, 1],
    [0x138, -1],
    [0x13e, 1],
    [0x142, -1],
    [0x143, 1],
    [0x144, -1],
    [0x147, 1],
    [0x14b, -1],
    [0x14c, 1],
    [0x14d, -1],
    [0x151, 1],
    [0x153, -1],
    [0x165, 1],
    [0x167, -1],
    [0x16a, 1],
    [0x16b, -1],
    [0x1cd, 1],
    [0x1ce, -1],
    [0x1cf, 1],
    [0x1d0, -1],
    [0x1d1, 1],
    [0x1d2, -1],
    [0x1d3, 1],
    [0x1d4, -1],
    [0x1d5, 1],
    [0x1d6, -1],
    [0x1d7, 1],
    [0x1d8, -1],
    [0x1d9, 1],
    [0x1da, -1],
    [0x1db, 1],
    [0x1dc, -1],
    [0x250, 1],
    [0x251, -1],
    [0x260, 1],
    [0x261, -1],
    [0x2c3, 1],
    [0x2c4, -1],
    [0x2c6, 1],
    [0x2c7, -1],
    [0x2c8, 1],
    [0x2cb, -1],
    [0x2cc, 1],
    [0x2cd, -1],
    [0x2cf, 1],
    [0x2d0, -1],
    [0x2d7, 1],
    [0x2db, -1],
    [0x2dc, 1],
    [0x2dd, -1],
    [0x2de, 1],
    [0x2df, -1],
    [0x2ff, 1],
    [0x36f, 0],
    [0x390, 1],
    [0x3a1, -1],
    [0x3a2, 1],
    [0x3a9, -1],
    [0x3b0, 1],
    [0x3c1, -1],
    [0x3c2, 1],
    [0x3c9, -1],
    [0x400, 1],
    [0x401, -1],
    [0x40f, 1],
    [0x44f, -1],
    [0x450, 1],
    [0x451, -1],
    [0x482, 1],
    [0x487, 0],
    [0x590, 1],
    [0x5bd, 0],
    [0x5be, 1],
    [0x5bf, 0],
    [0x5c0, 1],
    [0x5c2, 0],
    [0x5c3, 1],
    [0x5c5, 0],
    [0x5c6, 1],
    [0x5c7, 0],
    [0x60f, 1],
    [0x61a, 0],
    [0x64a, 1],
    [0x65f, 0],
    [0x66f, 1],
    [0x670, 0],
    [0x6d5, 1],
    [0x6dc, 0],
    [0x6de, 1],
    [0x6e4, 0],
    [0x6e6, 1],
    [0x6e8, 0],
    [0x6e9, 1],
    [0x6ed, 0],
    [0x710, 1],
    [0x711, 0],
    [0x72f, 1],
    [0x74a, 0],
    [0x7a5, 1],
    [0x7b0, 0],
    [0x7ea, 1],
    [0x7f3, 0],
    [0x7fc, 1],
    [0x7fd, 0],
    [0x815, 1],
    [0x819, 0],
    [0x81a, 1],
    [0x823, 0],
    [0x824, 1],
    [0x827, 0],
    [0x828, 1],
    [0x82d, 0],
    [0x858, 1],
    [0x85b, 0],
    [0x897, 1],
    [0x89f, 0],
    [0x8c9, 1],
    [0x8e1, 0],
    [0x8e2, 1],
    [0x902, 0],
    [0x939, 1],
    [0x93a, 0],
    [0x93b, 1],
    [0x93c, 0],
    [0x940, 1],
    [0x948, 0],
    [0x94c, 1],
    [0x94d, 0],
    [0x950, 1],
    [0x957, 0],
    [0x961, 1],
    [0x963, 0],
    [0x980, 1],
    [0x981, 0],
    [0x9bb, 1],
    [0x9bc, 0],
    [0x9c0, 1],
    [0x9c4, 0],
    [0x9cc, 1],
    [0x9cd, 0],
    [0x9e1, 1],
    [0x9e3, 0],
    [0x9fd, 1],
    [0x9fe, 0],
    [0xa00, 1],
    [0xa02, 0],
    [0xa3b, 1],
    [0xa3c, 0],
    [0xa40, 1],
    [0xa42, 0],
    [0xa46, 1],
    [0xa48, 0],
    [0xa4a, 1],
    [0xa4d, 0],
    [0xa50, 1],
    [0xa51, 0],
    [0xa6f, 1],
    [0xa71, 0],
    [0xa74, 1],
    [0xa75, 0],
    [0xa80, 1],
    [0xa82, 0],
    [0xabb, 1],
    [0xabc, 0],
    [0xac0, 1],
    [0xac5, 0],
    [0xac6, 1],
    [0xac8, 0],
    [0xacc, 1],
    [0xacd, 0],
    [0xae1, 1],
    [0xae3, 0],
    [0xaf9, 1],
    [0xaff, 0],
    [0xb00, 1],
    [0xb01, 0],
    [0xb3b, 1],
    [0xb3c, 0],
    [0xb3e, 1],
    [0xb3f, 0],
    [0xb40, 1],
    [0xb44, 0],
    [0xb4c, 1],
    [0xb4d, 0],
    [0xb54, 1],
    [0xb56, 0],
    [0xb61, 1],
    [0xb63, 0],
    [0xb81, 1],
    [0xb82, 0],
    [0xbbf, 1],
    [0xbc0, 0],
    [0xbcc, 1],
    [0xbcd, 0],
    [0xbff, 1],
    [0xc00, 0],
    [0xc03, 1],
    [0xc04, 0],
    [0xc3b, 1],
    [0xc3c, 0],
    [0xc3d, 1],
    [0xc40, 0],
    [0xc45, 1],
    [0xc48, 0],
    [0xc49, 1],
    [0xc4d, 0],
    [0xc54, 1],
    [0xc56, 0],
    [0xc61, 1],
    [0xc63, 0],
    [0xc80, 1],
    [0xc81, 0],
    [0xcbb, 1],
    [0xcbc, 0],
    [0xcbe, 1],
    [0xcbf, 0],
    [0xcc5, 1],
    [0xcc6, 0],
    [0xccb, 1],
    [0xccd, 0],
    [0xce1, 1],
    [0xce3, 0],
    [0xcff, 1],
    [0xd01, 0],
    [0xd3a, 1],
    [0xd3c, 0],
    [0xd40, 1],
    [0xd44, 0],
    [0xd4c, 1],
    [0xd4d, 0],
    [0xd61, 1],
    [0xd63, 0],
    [0xd80, 1],
    [0xd81, 0],
    [0xdc9, 1],
    [0xdca, 0],
    [0xdd1, 1],
    [0xdd4, 0],
    [0xdd5, 1],
    [0xdd6, 0],
    [0xe30, 1],
    [0xe31, 0],
    [0xe33, 1],
    [0xe3a, 0],
    [0xe46, 1],
    [0xe4e, 0],
    [0xeb0, 1],
    [0xeb1, 0],
    [0xeb3, 1],
    [0xebc, 0],
    [0xec7, 1],
    [0xece, 0],
    [0xf17, 1],
    [0xf19, 0],
    [0xf34, 1],
    [0xf35, 0],
    [0xf36, 1],
    [0xf37, 0],
    [0xf38, 1],
    [0xf39, 0],
    [0xf70, 1],
    [0xf7e, 0],
    [0xf7f, 1],
    [0xf84, 0],
    [0xf85, 1],
    [0xf87, 0],
    [0xf8c, 1],
    [0xf97, 0],
    [0xf98, 1],
    [0xfbc, 0],
    [0xfc5, 1],
    [0xfc6, 0],
    [0x102c, 1],
    [0x1030, 0],
    [0x1031, 1],
    [0x1037, 0],
    [0x1038, 1],
    [0x103a, 0],
    [0x103c, 1],
    [0x103e, 0],
    [0x1057, 1],
    [0x1059, 0],
    [0x105d, 1],
    [0x1060, 0],
    [0x1070, 1],
    [0x1074, 0],
    [0x1081, 1],
    [0x1082, 0],
    [0x1084, 1],
    [0x1086, 0],
    [0x108c, 1],
    [0x108d, 0],
    [0x109c, 1],
    [0x109d, 0],
    [0x10ff, 1],
    [0x115f, 2],
    [0x135c, 1],
    [0x135f, 0],
    [0x1711, 1],
    [0x1714, 0],
    [0x1731, 1],
    [0x1733, 0],
    [0x1751, 1],
    [0x1753, 0],
    [0x1771, 1],
    [0x1773, 0],
    [0x17b3, 1],
    [0x17b5, 0],
    [0x17b6, 1],
    [0x17bd, 0],
    [0x17c5, 1],
    [0x17c6, 0],
    [0x17c8, 1],
    [0x17d3, 0],
    [0x17dc, 1],
    [0x17dd, 0],
    [0x180a, 1],
    [0x180d, 0],
    [0x180e, 1],
    [0x180f, 0],
    [0x1884, 1],
    [0x1886, 0],
    [0x18a8, 1],
    [0x18a9, 0],
    [0x191f, 1],
    [0x1922, 0],
    [0x1926, 1],
    [0x1928, 0],
    [0x1931, 1],
    [0x1932, 0],
    [0x1938, 1],
    [0x193b, 0],
    [0x1a16, 1],
    [0x1a18, 0],
    [0x1a1a, 1],
    [0x1a1b, 0],
    [0x1a55, 1],
    [0x1a56, 0],
    [0x1a57, 1],
    [0x1a5e, 0],
    [0x1a5f, 1],
    [0x1a60, 0],
    [0x1a61, 1],
    [0x1a62, 0],
    [0x1a64, 1],
    [0x1a6c, 0],
    [0x1a72, 1],
    [0x1a7c, 0],
    [0x1a7e, 1],
    [0x1a7f, 0],
    [0x1aaf, 1],
    [0x1abd, 0],
    [0x1abe, 1],
    [0x1ace, 0],
    [0x1aff, 1],
    [0x1b03, 0],
    [0x1b33, 1],
    [0x1b34, 0],
    [0x1b35, 1],
    [0x1b3a, 0],
    [0x1b3b, 1],
    [0x1b3c, 0],
    [0x1b41, 1],
    [0x1b42, 0],
    [0x1b6a, 1],
    [0x1b73, 0],
    [0x1b7f, 1],
    [0x1b81, 0],
    [0x1ba1, 1],
    [0x1ba5, 0],
    [0x1ba7, 1],
    [0x1ba9, 0],
    [0x1baa, 1],
    [0x1bad, 0],
    [0x1be5, 1],
    [0x1be6, 0],
    [0x1be7, 1],
    [0x1be9, 0],
    [0x1bec, 1],
    [0x1bed, 0],
    [0x1bee, 1],
    [0x1bf1, 0],
    [0x1c2b, 1],
    [0x1c33, 0],
    [0x1c35, 1],
    [0x1c37, 0],
    [0x1ccf, 1],
    [0x1cd2, 0],
    [0x1cd3, 1],
    [0x1ce0, 0],
    [0x1ce1, 1],
    [0x1ce8, 0],
    [0x1cec, 1],
    [0x1ced, 0],
    [0x1cf3, 1],
    [0x1cf4, 0],
    [0x1cf7, 1],
    [0x1cf9, 0],
    [0x1dbf, 1],
    [0x1dff, 0],
    [0x200f, 1],
    [0x2010, -1],
    [0x2012, 1],
    [0x2016, -1],
    [0x2017, 1],
    [0x2019, -1],
    [0x201b, 1],
    [0x201d, -1],
    [0x201f, 1],
    [0x2022, -1],
    [0x2023, 1],
    [0x2027, -1],
    [0x202f, 1],
    [0x2030, -1],
    [0x2031, 1],
    [0x2033, -1],
    [0x2034, 1],
    [0x2035, -1],
    [0x203a, 1],
    [0x203b, -1],
    [0x203d, 1],
    [0x203e, -1],
    [0x2073, 1],
    [0x2074, -1],
    [0x207e, 1],
    [0x207f, -1],
    [0x2080, 1],
    [0x2084, -1],
    [0x20ab, 1],
    [0x20ac, -1],
    [0x20cf, 1],
    [0x20dc, 0],
    [0x20e0, 1],
    [0x20e1, 0],
    [0x20e4, 1],
    [0x20f0, 0],
    [0x2102, 1],
    [0x2103, -1],
    [0x2104, 1],
    [0x2105, -1],
    [0x2108, 1],
    [0x2109, -1],
    [0x2112, 1],
    [0x2113, -1],
    [0x2115, 1],
    [0x2116, -1],
    [0x2120, 1],
    [0x2122, -1],
    [0x2125, 1],
    [0x2126, -1],
    [0x212a, 1],
    [0x212b, -1],
    [0x2152, 1],
    [0x2154, -1],
    [0x215a, 1],
    [0x215e, -1],
    [0x215f, 1],
    [0x216b, -1],
    [0x216f, 1],
    [0x2179, -1],
    [0x2188, 1],
    [0x2189, -1],
    [0x218f, 1],
    [0x2199, -1],
    [0x21b7, 1],
    [0x21b9, -1],
    [0x21d1, 1],
    [0x21d2, -1],
    [0x21d3, 1],
    [0x21d4, -1],
    [0x21e6, 1],
    [0x21e7, -1],
    [0x21ff, 1],
    [0x2200, -1],
    [0x2201, 1],
    [0x2203, -1],
    [0x2206, 1],
    [0x2208, -1],
    [0x220a, 1],
    [0x220b, -1],
    [0x220e, 1],
    [0x220f, -1],
    [0x2210, 1],
    [0x2211, -1],
    [0x2214, 1],
    [0x2215, -1],
    [0x2219, 1],
    [0x221a, -1],
    [0x221c, 1],
    [0x2220, -1],
    [0x2222, 1],
    [0x2223, -1],
    [0x2224, 1],
    [0x2225, -1],
    [0x2226, 1],
    [0x222c, -1],
    [0x222d, 1],
    [0x222e, -1],
    [0x2233, 1],
    [0x2237, -1],
    [0x223b, 1],
    [0x223d, -1],
    [0x2247, 1],
    [0x2248, -1],
    [0x224b, 1],
    [0x224c, -1],
    [0x2251, 1],
    [0x2252, -1],
    [0x225f, 1],
    [0x2261, -1],
    [0x2263, 1],
    [0x2267, -1],
    [0x2269, 1],
    [0x226b, -1],
    [0x226d, 1],
    [0x226f, -1],
    [0x2281, 1],
    [0x2283, -1],
    [0x2285, 1],
    [0x2287, -1],
    [0x2294, 1],
    [0x2295, -1],
    [0x2298, 1],
    [0x2299, -1],
    [0x22a4, 1],
    [0x22a5, -1],
    [0x22be, 1],
    [0x22bf, -1],
    [0x2311, 1],
    [0x2312, -1],
    [0x2319, 1],
    [0x231b, 2],
    [0x2328, 1],
    [0x232a, 2],
    [0x23e8, 1],
    [0x23ec, 2],
    [0x23ef, 1],
    [0x23f0, 2],
    [0x23f2, 1],
    [0x23f3, 2],
    [0x245f, 1],
    [0x24e9, -1],
    [0x24ea, 1],
    [0x254b, -1],
    [0x254f, 1],
    [0x2573, -1],
    [0x257f, 1],
    [0x258f, -1],
    [0x2591, 1],
    [0x2595, -1],
    [0x259f, 1],
    [0x25a1, -1],
    [0x25a2, 1],
    [0x25a9, -1],
    [0x25b1, 1],
    [0x25b3, -1],
    [0x25b5, 1],
    [0x25b7, -1],
    [0x25bb, 1],
    [0x25bd, -1],
    [0x25bf, 1],
    [0x25c1, -1],
    [0x25c5, 1],
    [0x25c8, -1],
    [0x25ca, 1],
    [0x25cb, -1],
    [0x25cd, 1],
    [0x25d1, -1],
    [0x25e1, 1],
    [0x25e5, -1],
    [0x25ee, 1],
    [0x25ef, -1],
    [0x25fc, 1],
    [0x25fe, 2],
    [0x2604, 1],
    [0x2606, -1],
    [0x2608, 1],
    [0x2609, -1],
    [0x260d, 1],
    [0x260f, -1],
    [0x2613, 1],
    [0x2615, 2],
    [0x261b, 1],
    [0x261c, -1],
    [0x261d, 1],
    [0x261e, -1],
    [0x263f, 1],
    [0x2640, -1],
    [0x2641, 1],
    [0x2642, -1],
    [0x2647, 1],
    [0x2653, 2],
    [0x265f, 1],
    [0x2661, -1],
    [0x2662, 1],
    [0x2665, -1],
    [0x2666, 1],
    [0x266a, -1],
    [0x266b, 1],
    [0x266d, -1],
    [0x266e, 1],
    [0x266f, -1],
    [0x267e, 1],
    [0x267f, 2],
    [0x2692, 1],
    [0x2693, 2],
    [0x269d, 1],
    [0x269f, -1],
    [0x26a0, 1],
    [0x26a1, 2],
    [0x26a9, 1],
    [0x26ab, 2],
    [0x26bc, 1],
    [0x26be, 2],
    [0x26bf, -1],
    [0x26c3, 1],
    [0x26c5, 2],
    [0x26cd, -1],
    [0x26ce, 2],
    [0x26d3, -1],
    [0x26d4, 2],
    [0x26e1, -1],
    [0x26e2, 1],
    [0x26e3, -1],
    [0x26e7, 1],
    [0x26e9, -1],
    [0x26ea, 2],
    [0x26f1, -1],
    [0x26f3, 2],
    [0x26f4, -1],
    [0x26f5, 2],
    [0x26f9, -1],
    [0x26fa, 2],
    [0x26fc, -1],
    [0x26fd, 2],
    [0x26ff, -1],
    [0x2704, 1],
    [0x2705, 2],
    [0x2709, 1],
    [0x270b, 2],
    [0x2727, 1],
    [0x2728, 2],
    [0x273c, 1],
    [0x273d, -1],
    [0x274b, 1],
    [0x274c, 2],
    [0x274d, 1],
    [0x274e, 2],
    [0x2752, 1],
    [0x2755, 2],
    [0x2756, 1],
    [0x2757, 2],
    [0x2775, 1],
    [0x277f, -1],
    [0x2794, 1],
    [0x2797, 2],
    [0x27af, 1],
    [0x27b0, 2],
    [0x27be, 1],
    [0x27bf, 2],
    [0x2b1a, 1],
    [0x2b1c, 2],
    [0x2b4f, 1],
    [0x2b50, 2],
    [0x2b54, 1],
    [0x2b55, 2],
    [0x2b59, -1],
    [0x2cee, 1],
    [0x2cf1, 0],
    [0x2d7e, 1],
    [0x2d7f, 0],
    [0x2ddf, 1],
    [0x2dff, 0],
    [0x2e7f, 1],
    [0x2e99, 2],
    [0x2e9a, 1],
    [0x2ef3, 2],
    [0x2eff, 1],
    [0x2fd5, 2],
    [0x2fef, 1],
    [0x3029, 2],
    [0x302d, 0],
    [0x303e, 2],
    [0x3040, 1],
    [0x3096, 2],
    [0x3098, 1],
    [0x309a, 0],
    [0x30ff, 2],
    [0x3104, 1],
    [0x312f, 2],
    [0x3130, 1],
    [0x318e, 2],
    [0x318f, 1],
    [0x31e3, 2],
    [0x31ee, 1],
    [0x321e, 2],
    [0x321f, 1],
    [0x3247, 2],
    [0x324f, -1],
    [0x4dbf, 2],
    [0x4dff, 1],
    [0xa48c, 2],
    [0xa48f, 1],
    [0xa4c6, 2],
    [0xa66e, 1],
    [0xa66f, 0],
    [0xa673, 1],
    [0xa67d, 0],
    [0xa69d, 1],
    [0xa69f, 0],
    [0xa6ef, 1],
    [0xa6f1, 0],
    [0xa801, 1],
    [0xa802, 0],
    [0xa805, 1],
    [0xa806, 0],
    [0xa80a, 1],
    [0xa80b, 0],
    [0xa824, 1],
    [0xa826, 0],
    [0xa82b, 1],
    [0xa82c, 0],
    [0xa8c3, 1],
    [0xa8c5, 0],
    [0xa8df, 1],
    [0xa8f1, 0],
    [0xa8fe, 1],
    [0xa8ff, 0],
    [0xa925, 1],
    [0xa92d, 0],
    [0xa946, 1],
    [0xa951, 0],
    [0xa95f, 1],
    [0xa97c, 2],
    [0xa97f, 1],
    [0xa982, 0],
    [0xa9b2, 1],
    [0xa9b3, 0],
    [0xa9b5, 1],
    [0xa9b9, 0],
    [0xa9bb, 1],
    [0xa9bd, 0],
    [0xa9e4, 1],
    [0xa9e5, 0],
    [0xaa28, 1],
    [0xaa2e, 0],
    [0xaa30, 1],
    [0xaa32, 0],
    [0xaa34, 1],
    [0xaa36, 0],
    [0xaa42, 1],
    [0xaa43, 0],
    [0xaa4b, 1],
    [0xaa4c, 0],
    [0xaa7b, 1],
    [0xaa7c, 0],
    [0xaaaf, 1],
    [0xaab0, 0],
    [0xaab1, 1],
    [0xaab4, 0],
    [0xaab6, 1],
    [0xaab8, 0],
    [0xaabd, 1],
    [0xaabf, 0],
    [0xaac0, 1],
    [0xaac1, 0],
    [0xaaeb, 1],
    [0xaaed, 0],
    [0xaaf5, 1],
    [0xaaf6, 0],
    [0xabe4, 1],
    [0xabe5, 0],
    [0xabe7, 1],
    [0xabe8, 0],
    [0xabec, 1],
    [0xabed, 0],
    [0xabff, 1],
    [0xd7a3, 2],
    [0xdfff, 1],
    [0xf8ff, -1],
    [0xfaff, 2],
    [0xfb1d, 1],
    [0xfb1e, 0],
    [0xfdff, 1],
    [0xfe0f, 0],
    [0xfe19, 2],
    [0xfe1f, 1],
    [0xfe2f, 0],
    [0xfe52, 2],
    [0xfe53, 1],
    [0xfe66, 2],
    [0xfe67, 1],
    [0xfe6b, 2],
    [0xff00, 1],
    [0xff60, 2],
    [0xffdf, 1],
    [0xffe6, 2],
    [0xfffc, 1],
    [0xfffd, -1],
    [0x101fc, 1],
    [0x101fd, 0],
    [0x102df, 1],
    [0x102e0, 0],
    [0x10375, 1],
    [0x1037a, 0],
    [0x10a00, 1],
    [0x10a03, 0],
    [0x10a04, 1],
    [0x10a06, 0],
    [0x10a0b, 1],
    [0x10a0f, 0],
    [0x10a37, 1],
    [0x10a3a, 0],
    [0x10a3e, 1],
    [0x10a3f, 0],
    [0x10ae4, 1],
    [0x10ae6, 0],
    [0x10d23, 1],
    [0x10d27, 0],
    [0x10eaa, 1],
    [0x10eac, 0],
    [0x10efc, 1],
    [0x10eff, 0],
    [0x10f45, 1],
    [0x10f50, 0],
    [0x10f81, 1],
    [0x10f85, 0],
    [0x11000, 1],
    [0x11001, 0],
    [0x11037, 1],
    [0x11046, 0],
    [0x1106f, 1],
    [0x11070, 0],
    [0x11072, 1],
    [0x11074, 0],
    [0x1107e, 1],
    [0x11081, 0],
    [0x110b2, 1],
    [0x110b6, 0],
    [0x110b8, 1],
    [0x110ba, 0],
    [0x110c1, 1],
    [0x110c2, 0],
    [0x110ff, 1],
    [0x11102, 0],
    [0x11126, 1],
    [0x1112b, 0],
    [0x1112c, 1],
    [0x11134, 0],
    [0x11172, 1],
    [0x11173, 0],
    [0x1117f, 1],
    [0x11181, 0],
    [0x111b5, 1],
    [0x111be, 0],
    [0x111c8, 1],
    [0x111cc, 0],
    [0x111ce, 1],
    [0x111cf, 0],
    [0x1122e, 1],
    [0x11231, 0],
    [0x11233, 1],
    [0x11234, 0],
    [0x11235, 1],
    [0x11237, 0],
    [0x1123d, 1],
    [0x1123e, 0],
    [0x11240, 1],
    [0x11241, 0],
    [0x112de, 1],
    [0x112df, 0],
    [0x112e2, 1],
    [0x112ea, 0],
    [0x112ff, 1],
    [0x11301, 0],
    [0x1133a, 1],
    [0x1133c, 0],
    [0x1133f, 1],
    [0x11340, 0],
    [0x11365, 1],
    [0x1136c, 0],
    [0x1136f, 1],
    [0x11374, 0],
    [0x11437, 1],
    [0x1143f, 0],
    [0x11441, 1],
    [0x11444, 0],
    [0x11445, 1],
    [0x11446, 0],
    [0x1145d, 1],
    [0x1145e, 0],
    [0x114b2, 1],
    [0x114b8, 0],
    [0x114b9, 1],
    [0x114ba, 0],
    [0x114be, 1],
    [0x114c0, 0],
    [0x114c1, 1],
    [0x114c3, 0],
    [0x115b1, 1],
    [0x115b5, 0],
    [0x115bb, 1],
    [0x115bd, 0],
    [0x115be, 1],
    [0x115c0, 0],
    [0x115db, 1],
    [0x115dd, 0],
    [0x11632, 1],
    [0x1163a, 0],
    [0x1163c, 1],
    [0x1163d, 0],
    [0x1163e, 1],
    [0x11640, 0],
    [0x116aa, 1],
    [0x116ab, 0],
    [0x116ac, 1],
    [0x116ad, 0],
    [0x116af, 1],
    [0x116b5, 0],
    [0x116b6, 1],
    [0x116b7, 0],
    [0x1171c, 1],
    [0x1171f, 0],
    [0x11721, 1],
    [0x11725, 0],
    [0x11726, 1],
    [0x1172b, 0],
    [0x1182e, 1],
    [0x11837, 0],
    [0x11838, 1],
    [0x1183a, 0],
    [0x1193a, 1],
    [0x1193c, 0],
    [0x1193d, 1],
    [0x1193e, 0],
    [0x11942, 1],
    [0x11943, 0],
    [0x119d3, 1],
    [0x119d7, 0],
    [0x119d9, 1],
    [0x119db, 0],
    [0x119df, 1],
    [0x119e0, 0],
    [0x11a00, 1],
    [0x11a0a, 0],
    [0x11a32, 1],
    [0x11a38, 0],
    [0x11a3a, 1],
    [0x11a3e, 0],
    [0x11a46, 1],
    [0x11a47, 0],
    [0x11a50, 1],
    [0x11a56, 0],
    [0x11a58, 1],
    [0x11a5b, 0],
    [0x11a89, 1],
    [0x11a96, 0],
    [0x11a97, 1],
    [0x11a99, 0],
    [0x11c2f, 1],
    [0x11c36, 0],
    [0x11c37, 1],
    [0x11c3d, 0],
    [0x11c3e, 1],
    [0x11c3f, 0],
    [0x11c91, 1],
    [0x11ca7, 0],
    [0x11ca9, 1],
    [0x11cb0, 0],
    [0x11cb1, 1],
    [0x11cb3, 0],
    [0x11cb4, 1],
    [0x11cb6, 0],
    [0x11d30, 1],
    [0x11d36, 0],
    [0x11d39, 1],
    [0x11d3a, 0],
    [0x11d3b, 1],
    [0x11d3d, 0],
    [0x11d3e, 1],
    [0x11d45, 0],
    [0x11d46, 1],
    [0x11d47, 0],
    [0x11d8f, 1],
    [0x11d91, 0],
    [0x11d94, 1],
    [0x11d95, 0],
    [0x11d96, 1],
    [0x11d97, 0],
    [0x11ef2, 1],
    [0x11ef4, 0],
    [0x11eff, 1],
    [0x11f01, 0],
    [0x11f35, 1],
    [0x11f3a, 0],
    [0x11f3f, 1],
    [0x11f40, 0],
    [0x11f41, 1],
    [0x11f42, 0],
    [0x1343f, 1],
    [0x13440, 0],
    [0x13446, 1],
    [0x13455, 0],
    [0x16aef, 1],
    [0x16af4, 0],
    [0x16b2f, 1],
    [0x16b36, 0],
    [0x16f4e, 1],
    [0x16f4f, 0],
    [0x16f8e, 1],
    [0x16f92, 0],
    [0x16fdf, 1],
    [0x16fe3, 2],
    [0x16fe4, 0],
    [0x16fef, 1],
    [0x16ff1, 2],
    [0x16fff, 1],
    [0x187f7, 2],
    [0x187ff, 1],
    [0x18cd5, 2],
    [0x18cff, 1],
    [0x18d08, 2],
    [0x1afef, 1],
    [0x1aff3, 2],
    [0x1aff4, 1],
    [0x1affb, 2],
    [0x1affc, 1],
    [0x1affe, 2],
    [0x1afff, 1],
    [0x1b122, 2],
    [0x1b131, 1],
    [0x1b132, 2],
    [0x1b14f, 1],
    [0x1b152, 2],
    [0x1b154, 1],
    [0x1b155, 2],
    [0x1b163, 1],
    [0x1b167, 2],
    [0x1b16f, 1],
    [0x1b2fb, 2],
    [0x1bc9c, 1],
    [0x1bc9e, 0],
    [0x1ceff, 1],
    [0x1cf2d, 0],
    [0x1cf2f, 1],
    [0x1cf46, 0],
    [0x1d166, 1],
    [0x1d169, 0],
    [0x1d17a, 1],
    [0x1d182, 0],
    [0x1d184, 1],
    [0x1d18b, 0],
    [0x1d1a9, 1],
    [0x1d1ad, 0],
    [0x1d241, 1],
    [0x1d244, 0],
    [0x1d9ff, 1],
    [0x1da36, 0],
    [0x1da3a, 1],
    [0x1da6c, 0],
    [0x1da74, 1],
    [0x1da75, 0],
    [0x1da83, 1],
    [0x1da84, 0],
    [0x1da9a, 1],
    [0x1da9f, 0],
    [0x1daa0, 1],
    [0x1daaf, 0],
    [0x1dfff, 1],
    [0x1e006, 0],
    [0x1e007, 1],
    [0x1e018, 0],
    [0x1e01a, 1],
    [0x1e021, 0],
    [0x1e022, 1],
    [0x1e024, 0],
    [0x1e025, 1],
    [0x1e02a, 0],
    [0x1e08e, 1],
    [0x1e08f, 0],
    [0x1e12f, 1],
    [0x1e136, 0],
    [0x1e2ad, 1],
    [0x1e2ae, 0],
    [0x1e2eb, 1],
    [0x1e2ef, 0],
    [0x1e4eb, 1],
    [0x1e4ef, 0],
    [0x1e8cf, 1],
    [0x1e8d6, 0],
    [0x1e943, 1],
    [0x1e94a, 0],
    [0x1f003, 1],
    [0x1f004, 2],
    [0x1f0ce, 1],
    [0x1f0cf, 2],
    [0x1f0ff, 1],
    [0x1f10a, -1],
    [0x1f10f, 1],
    [0x1f12d, -1],
    [0x1f12f, 1],
    [0x1f169, -1],
    [0x1f16f, 1],
    [0x1f18d, -1],
    [0x1f18e, 2],
    [0x1f190, -1],
    [0x1f19a, 2],
    [0x1f1ac, -1],
    [0x1f1ff, 1],
    [0x1f202, 2],
    [0x1f20f, 1],
    [0x1f23b, 2],
    [0x1f23f, 1],
    [0x1f248, 2],
    [0x1f24f, 1],
    [0x1f251, 2],
    [0x1f25f, 1],
    [0x1f265, 2],
    [0x1f2ff, 1],
    [0x1f320, 2],
    [0x1f32c, 1],
    [0x1f335, 2],
    [0x1f336, 1],
    [0x1f37c, 2],
    [0x1f37d, 1],
    [0x1f393, 2],
    [0x1f39f, 1],
    [0x1f3ca, 2],
    [0x1f3ce, 1],
    [0x1f3d3, 2],
    [0x1f3df, 1],
    [0x1f3f0, 2],
    [0x1f3f3, 1],
    [0x1f3f4, 2],
    [0x1f3f7, 1],
    [0x1f43e, 2],
    [0x1f43f, 1],
    [0x1f440, 2],
    [0x1f441, 1],
    [0x1f4fc, 2],
    [0x1f4fe, 1],
    [0x1f53d, 2],
    [0x1f54a, 1],
    [0x1f54e, 2],
    [0x1f54f, 1],
    [0x1f567, 2],
    [0x1f579, 1],
    [0x1f57a, 2],
    [0x1f594, 1],
    [0x1f596, 2],
    [0x1f5a3, 1],
    [0x1f5a4, 2],
    [0x1f5fa, 1],
    [0x1f64f, 2],
    [0x1f67f, 1],
    [0x1f6c5, 2],
    [0x1f6cb, 1],
    [0x1f6cc, 2],
    [0x1f6cf, 1],
    [0x1f6d2, 2],
    [0x1f6d4, 1],
    [0x1f6d7, 2],
    [0x1f6db, 1],
    [0x1f6df, 2],
    [0x1f6ea, 1],
    [0x1f6ec, 2],
    [0x1f6f3, 1],
    [0x1f6fc, 2],
    [0x1f7df, 1],
    [0x1f7eb, 2],
    [0x1f7ef, 1],
    [0x1f7f0, 2],
    [0x1f90b, 1],
    [0x1f93a, 2],
    [0x1f93b, 1],
    [0x1f945, 2],
    [0x1f946, 1],
    [0x1f9ff, 2],
    [0x1fa6f, 1],
    [0x1fa7c, 2],
    [0x1fa7f, 1],
    [0x1fa88, 2],
    [0x1fa8f, 1],
    [0x1fabd, 2],
    [0x1fabe, 1],
    [0x1fac5, 2],
    [0x1facd, 1],
    [0x1fadb, 2],
    [0x1fadf, 1],
    [0x1fae8, 2],
    [0x1faef, 1],
    [0x1faf8, 2],
    [0x1ffff, 1],
    [0x2fffd, 2],
    [0x2ffff, 1],
    [0x3fffd, 2],
    [0xe00ff, 1],
    [0xe01ef, 0],
    [0xeffff, 1],
    [0xffffd, -1],
    [0xfffff, 1],
    [0x10fffd, -1],
    [0x7fffffff, 1]
  ].transpose.map(&:freeze)
end
PK*J[E��(�(share/ruby/reline/config.rbnu�[���class Reline::Config
  attr_reader :test_mode

  KEYSEQ_PATTERN = /\\(?:C|Control)-[A-Za-z_]|\\(?:M|Meta)-[0-9A-Za-z_]|\\(?:C|Control)-\\(?:M|Meta)-[A-Za-z_]|\\(?:M|Meta)-\\(?:C|Control)-[A-Za-z_]|\\e|\\[\\\"\'abdfnrtv]|\\\d{1,3}|\\x\h{1,2}|./

  class InvalidInputrc < RuntimeError
    attr_accessor :file, :lineno
  end

  VARIABLE_NAMES = %w{
    completion-ignore-case
    convert-meta
    disable-completion
    history-size
    keyseq-timeout
    show-all-if-ambiguous
    show-mode-in-prompt
    vi-cmd-mode-string
    vi-ins-mode-string
    emacs-mode-string
    enable-bracketed-paste
    isearch-terminators
  }
  VARIABLE_NAME_SYMBOLS = VARIABLE_NAMES.map { |v| :"#{v.tr(?-, ?_)}" }
  VARIABLE_NAME_SYMBOLS.each do |v|
    attr_accessor v
  end

  attr_accessor :autocompletion

  def initialize
    reset_variables
  end

  def reset
    if editing_mode_is?(:vi_command)
      @editing_mode_label = :vi_insert
    end
    @oneshot_key_bindings.clear
  end

  def reset_variables
    @additional_key_bindings = { # from inputrc
      emacs: Reline::KeyActor::Base.new,
      vi_insert: Reline::KeyActor::Base.new,
      vi_command: Reline::KeyActor::Base.new
    }
    @oneshot_key_bindings = Reline::KeyActor::Base.new
    @editing_mode_label = :emacs
    @keymap_label = :emacs
    @keymap_prefix = []
    @default_key_bindings = {
      emacs: Reline::KeyActor::Base.new(Reline::KeyActor::EMACS_MAPPING),
      vi_insert: Reline::KeyActor::Base.new(Reline::KeyActor::VI_INSERT_MAPPING),
      vi_command: Reline::KeyActor::Base.new(Reline::KeyActor::VI_COMMAND_MAPPING)
    }
    @vi_cmd_mode_string = '(cmd)'
    @vi_ins_mode_string = '(ins)'
    @emacs_mode_string = '@'
    # https://tiswww.case.edu/php/chet/readline/readline.html#IDX25
    @history_size = -1 # unlimited
    @keyseq_timeout = 500
    @test_mode = false
    @autocompletion = false
    @convert_meta = seven_bit_encoding?(Reline::IOGate.encoding)
    @loaded = false
    @enable_bracketed_paste = true
    @show_mode_in_prompt = false
    @default_inputrc_path = nil
  end

  def editing_mode
    @default_key_bindings[@editing_mode_label]
  end

  def editing_mode=(val)
    @editing_mode_label = val
  end

  def editing_mode_is?(*val)
    val.any?(@editing_mode_label)
  end

  def keymap
    @default_key_bindings[@keymap_label]
  end

  def loaded?
    @loaded
  end

  def inputrc_path
    case ENV['INPUTRC']
    when nil, ''
    else
      return File.expand_path(ENV['INPUTRC'])
    end

    # In the XDG Specification, if ~/.config/readline/inputrc exists, then
    # ~/.inputrc should not be read, but for compatibility with GNU Readline,
    # if ~/.inputrc exists, then it is given priority.
    home_rc_path = File.expand_path('~/.inputrc')
    return home_rc_path if File.exist?(home_rc_path)

    case path = ENV['XDG_CONFIG_HOME']
    when nil, ''
    else
      path = File.join(path, 'readline/inputrc')
      return path if File.exist?(path) and path == File.expand_path(path)
    end

    path = File.expand_path('~/.config/readline/inputrc')
    return path if File.exist?(path)

    return home_rc_path
  end

  private def default_inputrc_path
    @default_inputrc_path ||= inputrc_path
  end

  def read(file = nil)
    @loaded = true
    file ||= default_inputrc_path
    begin
      if file.respond_to?(:readlines)
        lines = file.readlines
      else
        lines = File.readlines(file)
      end
    rescue Errno::ENOENT
      return nil
    end

    read_lines(lines, file)
    self
  rescue InvalidInputrc => e
    warn e.message
    nil
  end

  def key_bindings
    # The key bindings for each editing mode will be overwritten by the user-defined ones.
    Reline::KeyActor::Composite.new([@oneshot_key_bindings, @additional_key_bindings[@editing_mode_label], @default_key_bindings[@editing_mode_label]])
  end

  def add_oneshot_key_binding(keystroke, target)
    # IRB sets invalid keystroke [Reline::Key]. We should ignore it.
    return unless keystroke.all? { |c| c.is_a?(Integer) }

    @oneshot_key_bindings.add(keystroke, target)
  end

  def reset_oneshot_key_bindings
    @oneshot_key_bindings.clear
  end

  def add_default_key_binding_by_keymap(keymap, keystroke, target)
    @default_key_bindings[keymap].add(keystroke, target)
  end

  def add_default_key_binding(keystroke, target)
    add_default_key_binding_by_keymap(@keymap_label, keystroke, target)
  end

  def read_lines(lines, file = nil)
    if not lines.empty? and lines.first.encoding != Reline.encoding_system_needs
      begin
        lines = lines.map do |l|
          l.encode(Reline.encoding_system_needs)
        rescue Encoding::UndefinedConversionError
          mes = "The inputrc encoded in #{lines.first.encoding.name} can't be converted to the locale #{Reline.encoding_system_needs.name}."
          raise Reline::ConfigEncodingConversionError.new(mes)
        end
      end
    end
    if_stack = []

    lines.each_with_index do |line, no|
      next if line.match(/\A\s*#/)

      no += 1

      line = line.chomp.lstrip
      if line.start_with?('$')
        handle_directive(line[1..-1], file, no, if_stack)
        next
      end

      next if if_stack.any? { |_no, skip| skip }

      case line
      when /^set +([^ ]+) +(.+)/i
        # value ignores everything after a space, raw_value does not.
        var, value, raw_value = $1.downcase, $2.partition(' ').first, $2
        bind_variable(var, value, raw_value)
      when /^\s*(?:M|Meta)-([a-zA-Z_])\s*:\s*(.*)\s*$/o
        bind_key("\"\\M-#$1\"", $2)
      when /^\s*(?:C|Control)-([a-zA-Z_])\s*:\s*(.*)\s*$/o
        bind_key("\"\\C-#$1\"", $2)
      when /^\s*(?:(?:C|Control)-(?:M|Meta)|(?:M|Meta)-(?:C|Control))-([a-zA-Z_])\s*:\s*(.*)\s*$/o
        bind_key("\"\\M-\\C-#$1\"", $2)
      when /^\s*("#{KEYSEQ_PATTERN}+")\s*:\s*(.*)\s*$/o
        bind_key($1, $2)
      end
    end
    unless if_stack.empty?
      raise InvalidInputrc, "#{file}:#{if_stack.last[0]}: unclosed if"
    end
  end

  def handle_directive(directive, file, no, if_stack)
    directive, args = directive.split(' ')
    case directive
    when 'if'
      condition = false
      case args
      when /^mode=(vi|emacs)$/i
        mode = $1.downcase
        # NOTE: mode=vi means vi-insert mode
        mode = 'vi_insert' if mode == 'vi'
        if @editing_mode_label == mode.to_sym
          condition = true
        end
      when 'term'
      when 'version'
      else # application name
        condition = true if args == 'Ruby'
        condition = true if args == 'Reline'
      end
      if_stack << [no, !condition]
    when 'else'
      if if_stack.empty?
        raise InvalidInputrc, "#{file}:#{no}: unmatched else"
      end
      if_stack.last[1] = !if_stack.last[1]
    when 'endif'
      if if_stack.empty?
        raise InvalidInputrc, "#{file}:#{no}: unmatched endif"
      end
      if_stack.pop
    when 'include'
      read(File.expand_path(args))
    end
  end

  def bind_variable(name, value, raw_value)
    case name
    when 'history-size'
      begin
        @history_size = Integer(value)
      rescue ArgumentError
        @history_size = 500
      end
    when 'isearch-terminators'
      @isearch_terminators = retrieve_string(raw_value)
    when 'editing-mode'
      case value
      when 'emacs'
        @editing_mode_label = :emacs
        @keymap_label = :emacs
        @keymap_prefix = []
      when 'vi'
        @editing_mode_label = :vi_insert
        @keymap_label = :vi_insert
        @keymap_prefix = []
      end
    when 'keymap'
      case value
      when 'emacs', 'emacs-standard'
        @keymap_label = :emacs
        @keymap_prefix = []
      when 'emacs-ctlx'
        @keymap_label = :emacs
        @keymap_prefix = [?\C-x.ord]
      when 'emacs-meta'
        @keymap_label = :emacs
        @keymap_prefix = [?\e.ord]
      when 'vi', 'vi-move', 'vi-command'
        @keymap_label = :vi_command
        @keymap_prefix = []
      when 'vi-insert'
        @keymap_label = :vi_insert
        @keymap_prefix = []
      end
    when 'keyseq-timeout'
      @keyseq_timeout = value.to_i
    when 'show-mode-in-prompt'
      case value
      when 'off'
        @show_mode_in_prompt = false
      when 'on'
        @show_mode_in_prompt = true
      else
        @show_mode_in_prompt = false
      end
    when 'vi-cmd-mode-string'
      @vi_cmd_mode_string = retrieve_string(raw_value)
    when 'vi-ins-mode-string'
      @vi_ins_mode_string = retrieve_string(raw_value)
    when 'emacs-mode-string'
      @emacs_mode_string = retrieve_string(raw_value)
    when *VARIABLE_NAMES then
      variable_name = :"@#{name.tr(?-, ?_)}"
      instance_variable_set(variable_name, value.nil? || value == '1' || value == 'on')
    end
  end

  def retrieve_string(str)
    str = $1 if str =~ /\A"(.*)"\z/
    parse_keyseq(str).map { |c| c.chr(Reline.encoding_system_needs) }.join
  end

  def bind_key(key, value)
    keystroke, func = parse_key_binding(key, value)
    @additional_key_bindings[@keymap_label].add(@keymap_prefix + keystroke, func) if keystroke
  end

  def parse_key_binding(key, func_name)
    if key =~ /\A"(.*)"\z/
      keyseq = parse_keyseq($1)
    else
      keyseq = nil
    end
    if func_name =~ /"(.*)"/
      func = parse_keyseq($1)
    else
      func = func_name.split.first.tr(?-, ?_).to_sym # It must be macro.
    end
    [keyseq, func]
  end

  def key_notation_to_code(notation)
    case notation
    when /(?:\\(?:C|Control)-\\(?:M|Meta)|\\(?:M|Meta)-\\(?:C|Control))-([A-Za-z_])/
      [?\e.ord, $1.ord % 32]
    when /\\(?:C|Control)-([A-Za-z_])/
      ($1.upcase.ord % 32)
    when /\\(?:M|Meta)-([0-9A-Za-z_])/
      [?\e.ord, $1.ord]
    when /\\(\d{1,3})/ then $1.to_i(8) # octal
    when /\\x(\h{1,2})/ then $1.to_i(16) # hexadecimal
    when "\\e" then ?\e.ord
    when "\\\\" then ?\\.ord
    when "\\\"" then ?".ord
    when "\\'" then ?'.ord
    when "\\a" then ?\a.ord
    when "\\b" then ?\b.ord
    when "\\d" then ?\d.ord
    when "\\f" then ?\f.ord
    when "\\n" then ?\n.ord
    when "\\r" then ?\r.ord
    when "\\t" then ?\t.ord
    when "\\v" then ?\v.ord
    else notation.ord
    end
  end

  def parse_keyseq(str)
    str.scan(KEYSEQ_PATTERN).flat_map do |notation|
      key_notation_to_code(notation)
    end
  end

  def reload
    reset_variables
    read
  end

  private def seven_bit_encoding?(encoding)
    encoding == Encoding::US_ASCII
  end
end
PK*J[��8/44share/ruby/reline/unicode.rbnu�[���class Reline::Unicode
  EscapedPairs = {
    0x00 => '^@',
    0x01 => '^A', # C-a
    0x02 => '^B',
    0x03 => '^C',
    0x04 => '^D',
    0x05 => '^E',
    0x06 => '^F',
    0x07 => '^G',
    0x08 => '^H', # Backspace
    0x09 => '^I',
    0x0A => '^J',
    0x0B => '^K',
    0x0C => '^L',
    0x0D => '^M', # Enter
    0x0E => '^N',
    0x0F => '^O',
    0x10 => '^P',
    0x11 => '^Q',
    0x12 => '^R',
    0x13 => '^S',
    0x14 => '^T',
    0x15 => '^U',
    0x16 => '^V',
    0x17 => '^W',
    0x18 => '^X',
    0x19 => '^Y',
    0x1A => '^Z', # C-z
    0x1B => '^[', # C-[ C-3
    0x1D => '^]', # C-]
    0x1E => '^^', # C-~ C-6
    0x1F => '^_', # C-_ C-7
    0x7F => '^?', # C-? C-8
  }
  EscapedChars = EscapedPairs.keys.map(&:chr)

  NON_PRINTING_START = "\1"
  NON_PRINTING_END = "\2"
  CSI_REGEXP = /\e\[[\d;]*[ABCDEFGHJKSTfminsuhl]/
  OSC_REGEXP = /\e\]\d+(?:;[^;\a\e]+)*(?:\a|\e\\)/
  WIDTH_SCANNER = /\G(?:(#{NON_PRINTING_START})|(#{NON_PRINTING_END})|(#{CSI_REGEXP})|(#{OSC_REGEXP})|(\X))/o

  def self.escape_for_print(str)
    str.chars.map! { |gr|
      case gr
      when -"\n"
        gr
      when -"\t"
        -'  '
      else
        EscapedPairs[gr.ord] || gr
      end
    }.join
  end

  def self.safe_encode(str, encoding)
    # Reline only supports utf-8 convertible string.
    converted = str.encode(encoding, invalid: :replace, undef: :replace)
    return converted if str.encoding == Encoding::UTF_8 || converted.encoding == Encoding::UTF_8 || converted.ascii_only?

    # This code is essentially doing the same thing as
    # `str.encode(utf8, **replace_options).encode(encoding, **replace_options)`
    # but also avoids unneccesary irreversible encoding conversion.
    converted.gsub(/\X/) do |c|
      c.encode(Encoding::UTF_8)
      c
    rescue Encoding::UndefinedConversionError
      '?'
    end
  end

  require 'reline/unicode/east_asian_width'

  def self.get_mbchar_width(mbchar)
    ord = mbchar.ord
    if ord <= 0x1F # in EscapedPairs
      return 2
    elsif ord <= 0x7E # printable ASCII chars
      return 1
    end
    utf8_mbchar = mbchar.encode(Encoding::UTF_8)
    ord = utf8_mbchar.ord
    chunk_index = EastAsianWidth::CHUNK_LAST.bsearch_index { |o| ord <= o }
    size = EastAsianWidth::CHUNK_WIDTH[chunk_index]
    if size == -1
      Reline.ambiguous_width
    elsif size == 1 && utf8_mbchar.size >= 2
      second_char_ord = utf8_mbchar[1].ord
      # Halfwidth Dakuten Handakuten
      # Only these two character has Letter Modifier category and can be combined in a single grapheme cluster
      (second_char_ord == 0xFF9E || second_char_ord == 0xFF9F) ? 2 : 1
    else
      size
    end
  end

  def self.calculate_width(str, allow_escape_code = false)
    if allow_escape_code
      width = 0
      rest = str.encode(Encoding::UTF_8)
      in_zero_width = false
      rest.scan(WIDTH_SCANNER) do |non_printing_start, non_printing_end, csi, osc, gc|
        case
        when non_printing_start
          in_zero_width = true
        when non_printing_end
          in_zero_width = false
        when csi, osc
        when gc
          unless in_zero_width
            width += get_mbchar_width(gc)
          end
        end
      end
      width
    else
      str.encode(Encoding::UTF_8).grapheme_clusters.inject(0) { |w, gc|
        w + get_mbchar_width(gc)
      }
    end
  end

  # This method is used by IRB
  def self.split_by_width(str, max_width)
    lines = split_line_by_width(str, max_width)
    [lines, lines.size]
  end

  def self.split_line_by_width(str, max_width, encoding = str.encoding, offset: 0)
    lines = [String.new(encoding: encoding)]
    width = offset
    rest = str.encode(Encoding::UTF_8)
    in_zero_width = false
    seq = String.new(encoding: encoding)
    rest.scan(WIDTH_SCANNER) do |non_printing_start, non_printing_end, csi, osc, gc|
      case
      when non_printing_start
        in_zero_width = true
      when non_printing_end
        in_zero_width = false
      when csi
        lines.last << csi
        unless in_zero_width
          if csi == -"\e[m" || csi == -"\e[0m"
            seq.clear
          else
            seq << csi
          end
        end
      when osc
        lines.last << osc
        seq << osc unless in_zero_width
      when gc
        unless in_zero_width
          mbchar_width = get_mbchar_width(gc)
          if (width += mbchar_width) > max_width
            width = mbchar_width
            lines << seq.dup
          end
        end
        lines.last << gc
      end
    end
    # The cursor moves to next line in first
    if width == max_width
      lines << String.new(encoding: encoding)
    end
    lines
  end

  def self.strip_non_printing_start_end(prompt)
    prompt.gsub(/\x01([^\x02]*)(?:\x02|\z)/) { $1 }
  end

  # Take a chunk of a String cut by width with escape sequences.
  def self.take_range(str, start_col, max_width)
    take_mbchar_range(str, start_col, max_width).first
  end

  def self.take_mbchar_range(str, start_col, width, cover_begin: false, cover_end: false, padding: false)
    chunk = String.new(encoding: str.encoding)

    end_col = start_col + width
    total_width = 0
    rest = str.encode(Encoding::UTF_8)
    in_zero_width = false
    chunk_start_col = nil
    chunk_end_col = nil
    has_csi = false
    rest.scan(WIDTH_SCANNER) do |non_printing_start, non_printing_end, csi, osc, gc|
      case
      when non_printing_start
        in_zero_width = true
      when non_printing_end
        in_zero_width = false
      when csi
        has_csi = true
        chunk << csi
      when osc
        chunk << osc
      when gc
        if in_zero_width
          chunk << gc
          next
        end

        mbchar_width = get_mbchar_width(gc)
        prev_width = total_width
        total_width += mbchar_width

        if (cover_begin || padding ? total_width <= start_col : prev_width < start_col)
          # Current character haven't reached start_col yet
          next
        elsif padding && !cover_begin && prev_width < start_col && start_col < total_width
          # Add preceding padding. This padding might have background color.
          chunk << ' '
          chunk_start_col ||= start_col
          chunk_end_col = total_width
          next
        elsif (cover_end ? prev_width < end_col : total_width <= end_col)
          # Current character is in the range
          chunk << gc
          chunk_start_col ||= prev_width
          chunk_end_col = total_width
          break if total_width >= end_col
        else
          # Current character exceeds end_col
          if padding && end_col < total_width
            # Add succeeding padding. This padding might have background color.
            chunk << ' '
            chunk_start_col ||= prev_width
            chunk_end_col = end_col
          end
          break
        end
      end
    end
    chunk_start_col ||= start_col
    chunk_end_col ||= start_col
    if padding && chunk_end_col < end_col
      # Append padding. This padding should not include background color.
      chunk << "\e[0m" if has_csi
      chunk << ' ' * (end_col - chunk_end_col)
      chunk_end_col = end_col
    end
    [chunk, chunk_start_col, chunk_end_col - chunk_start_col]
  end

  def self.get_next_mbchar_size(line, byte_pointer)
    grapheme = line.byteslice(byte_pointer..-1).grapheme_clusters.first
    grapheme ? grapheme.bytesize : 0
  end

  def self.get_prev_mbchar_size(line, byte_pointer)
    if byte_pointer.zero?
      0
    else
      grapheme = line.byteslice(0..(byte_pointer - 1)).grapheme_clusters.last
      grapheme ? grapheme.bytesize : 0
    end
  end

  def self.em_forward_word(line, byte_pointer)
    gcs = line.byteslice(byte_pointer..).grapheme_clusters
    nonwords = gcs.take_while { |c| !word_character?(c) }
    words = gcs.drop(nonwords.size).take_while { |c| word_character?(c) }
    nonwords.sum(&:bytesize) + words.sum(&:bytesize)
  end

  def self.em_forward_word_with_capitalization(line, byte_pointer)
    gcs = line.byteslice(byte_pointer..).grapheme_clusters
    nonwords = gcs.take_while { |c| !word_character?(c) }
    words = gcs.drop(nonwords.size).take_while { |c| word_character?(c) }
    [nonwords.sum(&:bytesize) + words.sum(&:bytesize), nonwords.join + words.join.capitalize]
  end

  def self.em_backward_word(line, byte_pointer)
    gcs = line.byteslice(0, byte_pointer).grapheme_clusters.reverse
    nonwords = gcs.take_while { |c| !word_character?(c) }
    words = gcs.drop(nonwords.size).take_while { |c| word_character?(c) }
    nonwords.sum(&:bytesize) + words.sum(&:bytesize)
  end

  def self.em_big_backward_word(line, byte_pointer)
    gcs = line.byteslice(0, byte_pointer).grapheme_clusters.reverse
    spaces = gcs.take_while { |c| space_character?(c) }
    nonspaces = gcs.drop(spaces.size).take_while { |c| !space_character?(c) }
    spaces.sum(&:bytesize) + nonspaces.sum(&:bytesize)
  end

  def self.ed_transpose_words(line, byte_pointer)
    gcs = line.byteslice(0, byte_pointer).grapheme_clusters
    pos = gcs.size
    gcs += line.byteslice(byte_pointer..).grapheme_clusters
    pos += 1 while pos < gcs.size && !word_character?(gcs[pos])
    if pos == gcs.size # 'aaa  bbb [cursor] '
      pos -= 1 while pos > 0 && !word_character?(gcs[pos - 1])
      second_word_end = gcs.size
    else # 'aaa  [cursor]bbb'
      pos += 1 while pos < gcs.size && word_character?(gcs[pos])
      second_word_end = pos
    end
    pos -= 1 while pos > 0 && word_character?(gcs[pos - 1])
    second_word_start = pos
    pos -= 1 while pos > 0 && !word_character?(gcs[pos - 1])
    first_word_end = pos
    pos -= 1 while pos > 0 && word_character?(gcs[pos - 1])
    first_word_start = pos

    [first_word_start, first_word_end, second_word_start, second_word_end].map do |idx|
      gcs.take(idx).sum(&:bytesize)
    end
  end

  def self.vi_big_forward_word(line, byte_pointer)
    gcs = line.byteslice(byte_pointer..).grapheme_clusters
    nonspaces = gcs.take_while { |c| !space_character?(c) }
    spaces = gcs.drop(nonspaces.size).take_while { |c| space_character?(c) }
    nonspaces.sum(&:bytesize) + spaces.sum(&:bytesize)
  end

  def self.vi_big_forward_end_word(line, byte_pointer)
    gcs = line.byteslice(byte_pointer..).grapheme_clusters
    first = gcs.shift(1)
    spaces = gcs.take_while { |c| space_character?(c) }
    nonspaces = gcs.drop(spaces.size).take_while { |c| !space_character?(c) }
    matched = spaces + nonspaces
    matched.pop
    first.sum(&:bytesize) + matched.sum(&:bytesize)
  end

  def self.vi_big_backward_word(line, byte_pointer)
    gcs = line.byteslice(0, byte_pointer).grapheme_clusters.reverse
    spaces = gcs.take_while { |c| space_character?(c) }
    nonspaces = gcs.drop(spaces.size).take_while { |c| !space_character?(c) }
    spaces.sum(&:bytesize) + nonspaces.sum(&:bytesize)
  end

  def self.vi_forward_word(line, byte_pointer, drop_terminate_spaces = false)
    gcs = line.byteslice(byte_pointer..).grapheme_clusters
    return 0 if gcs.empty?

    c = gcs.first
    matched =
      if word_character?(c)
        gcs.take_while { |c| word_character?(c) }
      elsif space_character?(c)
        gcs.take_while { |c| space_character?(c) }
      else
        gcs.take_while { |c| !word_character?(c) && !space_character?(c) }
      end

    return matched.sum(&:bytesize) if drop_terminate_spaces

    spaces = gcs.drop(matched.size).take_while { |c| space_character?(c) }
    matched.sum(&:bytesize) + spaces.sum(&:bytesize)
  end

  def self.vi_forward_end_word(line, byte_pointer)
    gcs = line.byteslice(byte_pointer..).grapheme_clusters
    return 0 if gcs.empty?
    return gcs.first.bytesize if gcs.size == 1

    start = gcs.shift
    skips = [start]
    if space_character?(start) || space_character?(gcs.first)
      spaces = gcs.take_while { |c| space_character?(c) }
      skips += spaces
      gcs.shift(spaces.size)
    end
    start_with_word = word_character?(gcs.first)
    matched = gcs.take_while { |c| start_with_word ? word_character?(c) : !word_character?(c) && !space_character?(c) }
    matched.pop
    skips.sum(&:bytesize) + matched.sum(&:bytesize)
  end

  def self.vi_backward_word(line, byte_pointer)
    gcs = line.byteslice(0, byte_pointer).grapheme_clusters.reverse
    spaces = gcs.take_while { |c| space_character?(c) }
    gcs.shift(spaces.size)
    start_with_word = word_character?(gcs.first)
    matched = gcs.take_while { |c| start_with_word ? word_character?(c) : !word_character?(c) && !space_character?(c) }
    spaces.sum(&:bytesize) + matched.sum(&:bytesize)
  end

  def self.common_prefix(list, ignore_case: false)
    return '' if list.empty?

    common_prefix_gcs = list.first.grapheme_clusters
    list.each do |item|
      gcs = item.grapheme_clusters
      common_prefix_gcs = common_prefix_gcs.take_while.with_index do |gc, i|
        ignore_case ? gc.casecmp?(gcs[i]) : gc == gcs[i]
      end
    end
    common_prefix_gcs.join
  end

  def self.vi_first_print(line)
    gcs = line.grapheme_clusters
    spaces = gcs.take_while { |c| space_character?(c) }
    spaces.sum(&:bytesize)
  end

  def self.word_character?(s)
    s.encode(Encoding::UTF_8).match?(/\p{Word}/) if s
  rescue Encoding::UndefinedConversionError
    false
  end

  def self.space_character?(s)
    s.match?(/\s/) if s
  end
end
PK*J[lM'b�3�3 share/ruby/reline/line_editor.rbnu�[���require 'reline/kill_ring'
require 'reline/unicode'

require 'tempfile'

class Reline::LineEditor
  # TODO: Use "private alias_method" idiom after drop Ruby 2.5.
  attr_reader :byte_pointer
  attr_accessor :confirm_multiline_termination_proc
  attr_accessor :completion_proc
  attr_accessor :completion_append_character
  attr_accessor :output_modifier_proc
  attr_accessor :prompt_proc
  attr_accessor :auto_indent_proc
  attr_accessor :dig_perfect_match_proc

  VI_MOTIONS = %i{
    ed_prev_char
    ed_next_char
    vi_zero
    ed_move_to_beg
    ed_move_to_end
    vi_to_column
    vi_next_char
    vi_prev_char
    vi_next_word
    vi_prev_word
    vi_to_next_char
    vi_to_prev_char
    vi_end_word
    vi_next_big_word
    vi_prev_big_word
    vi_end_big_word
  }

  module CompletionState
    NORMAL = :normal
    MENU = :menu
    MENU_WITH_PERFECT_MATCH = :menu_with_perfect_match
    PERFECT_MATCH = :perfect_match
  end

  RenderedScreen = Struct.new(:base_y, :lines, :cursor_y, keyword_init: true)

  CompletionJourneyState = Struct.new(:line_index, :pre, :target, :post, :list, :pointer)
  NullActionState = [nil, nil].freeze

  class MenuInfo
    attr_reader :list

    def initialize(list)
      @list = list
    end

    def lines(screen_width)
      return [] if @list.empty?

      list = @list.sort
      sizes = list.map { |item| Reline::Unicode.calculate_width(item) }
      item_width = sizes.max + 2
      num_cols = [screen_width / item_width, 1].max
      num_rows = list.size.fdiv(num_cols).ceil
      list_with_padding = list.zip(sizes).map { |item, size| item + ' ' * (item_width - size) }
      aligned = (list_with_padding + [nil] * (num_rows * num_cols - list_with_padding.size)).each_slice(num_rows).to_a.transpose
      aligned.map do |row|
        row.join.rstrip
      end
    end
  end

  MINIMUM_SCROLLBAR_HEIGHT = 1

  def initialize(config)
    @config = config
    @completion_append_character = ''
    @screen_size = [0, 0] # Should be initialized with actual winsize in LineEditor#reset
    reset_variables
  end

  def io_gate
    Reline::IOGate
  end

  def encoding
    io_gate.encoding
  end

  def set_pasting_state(in_pasting)
    # While pasting, text to be inserted is stored to @continuous_insertion_buffer.
    # After pasting, this buffer should be force inserted.
    process_insert(force: true) if @in_pasting && !in_pasting
    @in_pasting = in_pasting
  end

  private def check_mode_string
    if @config.show_mode_in_prompt
      if @config.editing_mode_is?(:vi_command)
        @config.vi_cmd_mode_string
      elsif @config.editing_mode_is?(:vi_insert)
        @config.vi_ins_mode_string
      elsif @config.editing_mode_is?(:emacs)
        @config.emacs_mode_string
      else
        '?'
      end
    end
  end

  private def check_multiline_prompt(buffer, mode_string)
    if @vi_arg
      prompt = "(arg: #{@vi_arg}) "
    elsif @searching_prompt
      prompt = @searching_prompt
    else
      prompt = @prompt
    end
    if !@is_multiline
      mode_string = check_mode_string
      prompt = mode_string + prompt if mode_string
      [prompt] + [''] * (buffer.size - 1)
    elsif @prompt_proc
      prompt_list = @prompt_proc.(buffer).map { |pr| pr.gsub("\n", "\\n") }
      prompt_list.map!{ prompt } if @vi_arg or @searching_prompt
      prompt_list = [prompt] if prompt_list.empty?
      prompt_list = prompt_list.map{ |pr| mode_string + pr } if mode_string
      prompt = prompt_list[@line_index]
      prompt = prompt_list[0] if prompt.nil?
      prompt = prompt_list.last if prompt.nil?
      if buffer.size > prompt_list.size
        (buffer.size - prompt_list.size).times do
          prompt_list << prompt_list.last
        end
      end
      prompt_list
    else
      prompt = mode_string + prompt if mode_string
      [prompt] * buffer.size
    end
  end

  def reset(prompt = '')
    @screen_size = Reline::IOGate.get_screen_size
    reset_variables(prompt)
    @rendered_screen.base_y = Reline::IOGate.cursor_pos.y
    if ENV.key?('RELINE_ALT_SCROLLBAR')
      @full_block = '::'
      @upper_half_block = "''"
      @lower_half_block = '..'
      @block_elem_width = 2
    elsif Reline::IOGate.win?
      @full_block = '█'
      @upper_half_block = '▀'
      @lower_half_block = '▄'
      @block_elem_width = 1
    elsif encoding == Encoding::UTF_8
      @full_block = '█'
      @upper_half_block = '▀'
      @lower_half_block = '▄'
      @block_elem_width = Reline::Unicode.calculate_width('█')
    else
      @full_block = '::'
      @upper_half_block = "''"
      @lower_half_block = '..'
      @block_elem_width = 2
    end
  end

  def handle_signal
    handle_interrupted
    handle_resized
  end

  private def handle_resized
    return unless @resized

    @screen_size = Reline::IOGate.get_screen_size
    @resized = false
    scroll_into_view
    Reline::IOGate.move_cursor_up @rendered_screen.cursor_y
    @rendered_screen.base_y = Reline::IOGate.cursor_pos.y
    clear_rendered_screen_cache
    render
  end

  private def handle_interrupted
    return unless @interrupted

    @interrupted = false
    clear_dialogs
    render
    cursor_to_bottom_offset = @rendered_screen.lines.size - @rendered_screen.cursor_y
    Reline::IOGate.scroll_down cursor_to_bottom_offset
    Reline::IOGate.move_cursor_column 0
    clear_rendered_screen_cache
    case @old_trap
    when 'DEFAULT', 'SYSTEM_DEFAULT'
      raise Interrupt
    when 'IGNORE'
      # Do nothing
    when 'EXIT'
      exit
    else
      @old_trap.call if @old_trap.respond_to?(:call)
    end
  end

  def set_signal_handlers
    Reline::IOGate.set_winch_handler do
      @resized = true
    end
    @old_trap = Signal.trap('INT') do
      @interrupted = true
    end
  end

  def finalize
    Signal.trap('INT', @old_trap)
  end

  def eof?
    @eof
  end

  def reset_variables(prompt = '')
    @prompt = prompt.gsub("\n", "\\n")
    @mark_pointer = nil
    @is_multiline = false
    @finished = false
    @history_pointer = nil
    @kill_ring ||= Reline::KillRing.new
    @vi_clipboard = ''
    @vi_arg = nil
    @waiting_proc = nil
    @vi_waiting_operator = nil
    @vi_waiting_operator_arg = nil
    @completion_journey_state = nil
    @completion_state = CompletionState::NORMAL
    @perfect_matched = nil
    @menu_info = nil
    @searching_prompt = nil
    @just_cursor_moving = false
    @eof = false
    @continuous_insertion_buffer = String.new(encoding: encoding)
    @scroll_partial_screen = 0
    @drop_terminate_spaces = false
    @in_pasting = false
    @auto_indent_proc = nil
    @dialogs = []
    @interrupted = false
    @resized = false
    @cache = {}
    @rendered_screen = RenderedScreen.new(base_y: 0, lines: [], cursor_y: 0)
    @input_lines = [[[""], 0, 0]]
    @input_lines_position = 0
    @restoring = false
    @prev_action_state = NullActionState
    @next_action_state = NullActionState
    reset_line
  end

  def reset_line
    @byte_pointer = 0
    @buffer_of_lines = [String.new(encoding: encoding)]
    @line_index = 0
    @cache.clear
    @line_backup_in_history = nil
  end

  def multiline_on
    @is_multiline = true
  end

  def multiline_off
    @is_multiline = false
  end

  private def insert_new_line(cursor_line, next_line)
    @buffer_of_lines.insert(@line_index + 1, String.new(next_line, encoding: encoding))
    @buffer_of_lines[@line_index] = cursor_line
    @line_index += 1
    @byte_pointer = 0
    if @auto_indent_proc && !@in_pasting
      if next_line.empty?
        (
          # For compatibility, use this calculation instead of just `process_auto_indent @line_index - 1, cursor_dependent: false`
          indent1 = @auto_indent_proc.(@buffer_of_lines.take(@line_index - 1).push(''), @line_index - 1, 0, true)
          indent2 = @auto_indent_proc.(@buffer_of_lines.take(@line_index), @line_index - 1, @buffer_of_lines[@line_index - 1].bytesize, false)
          indent = indent2 || indent1
          @buffer_of_lines[@line_index - 1] = ' ' * indent + @buffer_of_lines[@line_index - 1].gsub(/\A\s*/, '')
        )
        process_auto_indent @line_index, add_newline: true
      else
        process_auto_indent @line_index - 1, cursor_dependent: false
        process_auto_indent @line_index, add_newline: true # Need for compatibility
        process_auto_indent @line_index, cursor_dependent: false
      end
    end
  end

  private def split_line_by_width(str, max_width, offset: 0)
    Reline::Unicode.split_line_by_width(str, max_width, encoding, offset: offset)
  end

  def current_byte_pointer_cursor
    calculate_width(current_line.byteslice(0, @byte_pointer))
  end

  private def calculate_nearest_cursor(cursor)
    line_to_calc = current_line
    new_cursor_max = calculate_width(line_to_calc)
    new_cursor = 0
    new_byte_pointer = 0
    height = 1
    max_width = screen_width
    if @config.editing_mode_is?(:vi_command)
      last_byte_size = Reline::Unicode.get_prev_mbchar_size(line_to_calc, line_to_calc.bytesize)
      if last_byte_size > 0
        last_mbchar = line_to_calc.byteslice(line_to_calc.bytesize - last_byte_size, last_byte_size)
        last_width = Reline::Unicode.get_mbchar_width(last_mbchar)
        end_of_line_cursor = new_cursor_max - last_width
      else
      end_of_line_cursor = new_cursor_max
      end
    else
    end_of_line_cursor = new_cursor_max
    end
    line_to_calc.grapheme_clusters.each do |gc|
      mbchar = gc.encode(Encoding::UTF_8)
      mbchar_width = Reline::Unicode.get_mbchar_width(mbchar)
      now = new_cursor + mbchar_width
      if now > end_of_line_cursor or now > cursor
        break
      end
      new_cursor += mbchar_width
      if new_cursor > max_width * height
        height += 1
      end
      new_byte_pointer += gc.bytesize
    end
    @byte_pointer = new_byte_pointer
  end

  def with_cache(key, *deps)
    cached_deps, value = @cache[key]
    if cached_deps != deps
      @cache[key] = [deps, value = yield(*deps, cached_deps, value)]
    end
    value
  end

  def modified_lines
    with_cache(__method__, whole_lines, finished?) do |whole, complete|
      modify_lines(whole, complete)
    end
  end

  def prompt_list
    with_cache(__method__, whole_lines, check_mode_string, @vi_arg, @searching_prompt) do |lines, mode_string|
      check_multiline_prompt(lines, mode_string)
    end
  end

  def screen_height
    @screen_size.first
  end

  def screen_width
    @screen_size.last
  end

  def screen_scroll_top
    @scroll_partial_screen
  end

  def wrapped_prompt_and_input_lines
    with_cache(__method__, @buffer_of_lines.size, modified_lines, prompt_list, screen_width) do |n, lines, prompts, width, prev_cache_key, cached_value|
      prev_n, prev_lines, prev_prompts, prev_width = prev_cache_key
      cached_wraps = {}
      if prev_width == width
        prev_n.times do |i|
          cached_wraps[[prev_prompts[i], prev_lines[i]]] = cached_value[i]
        end
      end

      n.times.map do |i|
        prompt = prompts[i] || ''
        line = lines[i] || ''
        if (cached = cached_wraps[[prompt, line]])
          next cached
        end
        *wrapped_prompts, code_line_prompt = split_line_by_width(prompt, width)
        wrapped_lines = split_line_by_width(line, width, offset: calculate_width(code_line_prompt, true))
        wrapped_prompts.map { |p| [p, ''] } + [[code_line_prompt, wrapped_lines.first]] + wrapped_lines.drop(1).map { |c| ['', c] }
      end
    end
  end

  def calculate_overlay_levels(overlay_levels)
    levels = []
    overlay_levels.each do |x, w, l|
      levels.fill(l, x, w)
    end
    levels
  end

  def render_line_differential(old_items, new_items)
    old_levels = calculate_overlay_levels(old_items.zip(new_items).each_with_index.map {|((x, w, c), (nx, _nw, nc)), i| [x, w, c == nc && x == nx ? i : -1] if x }.compact)
    new_levels = calculate_overlay_levels(new_items.each_with_index.map { |(x, w), i| [x, w, i] if x }.compact).take(screen_width)
    base_x = 0
    new_levels.zip(old_levels).chunk { |n, o| n == o ? :skip : n || :blank }.each do |level, chunk|
      width = chunk.size
      if level == :skip
        # do nothing
      elsif level == :blank
        Reline::IOGate.move_cursor_column base_x
        Reline::IOGate.write "#{Reline::IOGate.reset_color_sequence}#{' ' * width}"
      else
        x, w, content = new_items[level]
        cover_begin = base_x != 0 && new_levels[base_x - 1] == level
        cover_end = new_levels[base_x + width] == level
        pos = 0
        unless x == base_x && w == width
          content, pos = Reline::Unicode.take_mbchar_range(content, base_x - x, width, cover_begin: cover_begin, cover_end: cover_end, padding: true)
        end
        Reline::IOGate.move_cursor_column x + pos
        Reline::IOGate.write "#{Reline::IOGate.reset_color_sequence}#{content}#{Reline::IOGate.reset_color_sequence}"
      end
      base_x += width
    end
    if old_levels.size > new_levels.size
      Reline::IOGate.move_cursor_column new_levels.size
      Reline::IOGate.erase_after_cursor
    end
  end

  # Calculate cursor position in word wrapped content.
  def wrapped_cursor_position
    prompt_width = calculate_width(prompt_list[@line_index], true)
    line_before_cursor = Reline::Unicode.escape_for_print(whole_lines[@line_index].byteslice(0, @byte_pointer))
    wrapped_line_before_cursor = split_line_by_width(' ' * prompt_width + line_before_cursor, screen_width)
    wrapped_cursor_y = wrapped_prompt_and_input_lines[0...@line_index].sum(&:size) + wrapped_line_before_cursor.size - 1
    wrapped_cursor_x = calculate_width(wrapped_line_before_cursor.last)
    [wrapped_cursor_x, wrapped_cursor_y]
  end

  def clear_dialogs
    @dialogs.each do |dialog|
      dialog.contents = nil
      dialog.trap_key = nil
    end
  end

  def update_dialogs(key = nil)
    wrapped_cursor_x, wrapped_cursor_y = wrapped_cursor_position
    @dialogs.each do |dialog|
      dialog.trap_key = nil
      update_each_dialog(dialog, wrapped_cursor_x, wrapped_cursor_y - screen_scroll_top, key)
    end
  end

  def render_finished
    Reline::IOGate.buffered_output do
      render_differential([], 0, 0)
      lines = @buffer_of_lines.size.times.map do |i|
        line = Reline::Unicode.strip_non_printing_start_end(prompt_list[i]) + modified_lines[i]
        wrapped_lines = split_line_by_width(line, screen_width)
        wrapped_lines.last.empty? ? "#{line} " : line
      end
      Reline::IOGate.write lines.map { |l| "#{l}\r\n" }.join
    end
  end

  def print_nomultiline_prompt
    Reline::IOGate.disable_auto_linewrap(true) if Reline::IOGate.win?
    # Readline's test `TestRelineAsReadline#test_readline` requires first output to be prompt, not cursor reset escape sequence.
    Reline::IOGate.write Reline::Unicode.strip_non_printing_start_end(@prompt) if @prompt && !@is_multiline
  ensure
    Reline::IOGate.disable_auto_linewrap(false) if Reline::IOGate.win?
  end

  def render
    wrapped_cursor_x, wrapped_cursor_y = wrapped_cursor_position
    new_lines = wrapped_prompt_and_input_lines.flatten(1)[screen_scroll_top, screen_height].map do |prompt, line|
      prompt_width = Reline::Unicode.calculate_width(prompt, true)
      [[0, prompt_width, prompt], [prompt_width, Reline::Unicode.calculate_width(line, true), line]]
    end
    if @menu_info
      @menu_info.lines(screen_width).each do |item|
        new_lines << [[0, Reline::Unicode.calculate_width(item), item]]
      end
      @menu_info = nil # TODO: do not change state here
    end

    @dialogs.each_with_index do |dialog, index|
      next unless dialog.contents

      x_range, y_range = dialog_range dialog, wrapped_cursor_y - screen_scroll_top
      y_range.each do |row|
        next if row < 0 || row >= screen_height

        dialog_rows = new_lines[row] ||= []
        # index 0 is for prompt, index 1 is for line, index 2.. is for dialog
        dialog_rows[index + 2] = [x_range.begin, dialog.width, dialog.contents[row - y_range.begin]]
      end
    end

    Reline::IOGate.buffered_output do
      render_differential new_lines, wrapped_cursor_x, wrapped_cursor_y - screen_scroll_top
    end
  end

  # Reflects lines to be rendered and new cursor position to the screen
  # by calculating the difference from the previous render.

  private def render_differential(new_lines, new_cursor_x, new_cursor_y)
    Reline::IOGate.disable_auto_linewrap(true) if Reline::IOGate.win?
    rendered_lines = @rendered_screen.lines
    cursor_y = @rendered_screen.cursor_y
    if new_lines != rendered_lines
      # Hide cursor while rendering to avoid cursor flickering.
      Reline::IOGate.hide_cursor
      num_lines = [[new_lines.size, rendered_lines.size].max, screen_height].min
      if @rendered_screen.base_y + num_lines > screen_height
        Reline::IOGate.scroll_down(num_lines - cursor_y - 1)
        @rendered_screen.base_y = screen_height - num_lines
        cursor_y = num_lines - 1
      end
      num_lines.times do |i|
        rendered_line = rendered_lines[i] || []
        line_to_render = new_lines[i] || []
        next if rendered_line == line_to_render

        Reline::IOGate.move_cursor_down i - cursor_y
        cursor_y = i
        unless rendered_lines[i]
          Reline::IOGate.move_cursor_column 0
          Reline::IOGate.erase_after_cursor
        end
        render_line_differential(rendered_line, line_to_render)
      end
      @rendered_screen.lines = new_lines
      Reline::IOGate.show_cursor
    end
    Reline::IOGate.move_cursor_column new_cursor_x
    Reline::IOGate.move_cursor_down new_cursor_y - cursor_y
    @rendered_screen.cursor_y = new_cursor_y
  ensure
    Reline::IOGate.disable_auto_linewrap(false) if Reline::IOGate.win?
  end

  private def clear_rendered_screen_cache
    @rendered_screen.lines = []
    @rendered_screen.cursor_y = 0
  end

  def upper_space_height(wrapped_cursor_y)
    wrapped_cursor_y - screen_scroll_top
  end

  def rest_height(wrapped_cursor_y)
    screen_height - wrapped_cursor_y + screen_scroll_top - @rendered_screen.base_y - 1
  end

  def rerender
    render unless @in_pasting
  end

  class DialogProcScope
    CompletionJourneyData = Struct.new(:preposing, :postposing, :list, :pointer)

    def initialize(line_editor, config, proc_to_exec, context)
      @line_editor = line_editor
      @config = config
      @proc_to_exec = proc_to_exec
      @context = context
      @cursor_pos = Reline::CursorPos.new
    end

    def context
      @context
    end

    def retrieve_completion_block(_unused = false)
      preposing, target, postposing, _quote = @line_editor.retrieve_completion_block
      [preposing, target, postposing]
    end

    def call_completion_proc_with_checking_args(pre, target, post)
      @line_editor.call_completion_proc_with_checking_args(pre, target, post)
    end

    def set_dialog(dialog)
      @dialog = dialog
    end

    def dialog
      @dialog
    end

    def set_cursor_pos(col, row)
      @cursor_pos.x = col
      @cursor_pos.y = row
    end

    def set_key(key)
      @key = key
    end

    def key
      @key
    end

    def cursor_pos
      @cursor_pos
    end

    def just_cursor_moving
      @line_editor.instance_variable_get(:@just_cursor_moving)
    end

    def screen_width
      @line_editor.screen_width
    end

    def screen_height
      @line_editor.screen_height
    end

    def preferred_dialog_height
      _wrapped_cursor_x, wrapped_cursor_y = @line_editor.wrapped_cursor_position
      [@line_editor.upper_space_height(wrapped_cursor_y), @line_editor.rest_height(wrapped_cursor_y), (screen_height + 6) / 5].max
    end

    def completion_journey_data
      @line_editor.dialog_proc_scope_completion_journey_data
    end

    def config
      @config
    end

    def call
      instance_exec(&@proc_to_exec)
    end
  end

  class Dialog
    attr_reader :name, :contents, :width
    attr_accessor :scroll_top, :pointer, :column, :vertical_offset, :trap_key

    def initialize(name, config, proc_scope)
      @name = name
      @config = config
      @proc_scope = proc_scope
      @width = nil
      @scroll_top = 0
      @trap_key = nil
    end

    def set_cursor_pos(col, row)
      @proc_scope.set_cursor_pos(col, row)
    end

    def width=(v)
      @width = v
    end

    def contents=(contents)
      @contents = contents
      if contents and @width.nil?
        @width = contents.map{ |line| Reline::Unicode.calculate_width(line, true) }.max
      end
    end

    def call(key)
      @proc_scope.set_dialog(self)
      @proc_scope.set_key(key)
      dialog_render_info = @proc_scope.call
      if @trap_key
        if @trap_key.any?{ |i| i.is_a?(Array) } # multiple trap
          @trap_key.each do |t|
            @config.add_oneshot_key_binding(t, @name)
          end
        else
          @config.add_oneshot_key_binding(@trap_key, @name)
        end
      end
      dialog_render_info
    end
  end

  def add_dialog_proc(name, p, context = nil)
    dialog = Dialog.new(name, @config, DialogProcScope.new(self, @config, p, context))
    if index = @dialogs.find_index { |d| d.name == name }
      @dialogs[index] = dialog
    else
      @dialogs << dialog
    end
  end

  DIALOG_DEFAULT_HEIGHT = 20

  private def dialog_range(dialog, dialog_y)
    x_range = dialog.column...dialog.column + dialog.width
    y_range = dialog_y + dialog.vertical_offset...dialog_y + dialog.vertical_offset + dialog.contents.size
    [x_range, y_range]
  end

  private def update_each_dialog(dialog, cursor_column, cursor_row, key = nil)
    dialog.set_cursor_pos(cursor_column, cursor_row)
    dialog_render_info = dialog.call(key)
    if dialog_render_info.nil? or dialog_render_info.contents.nil? or dialog_render_info.contents.empty?
      dialog.contents = nil
      dialog.trap_key = nil
      return
    end
    contents = dialog_render_info.contents
    pointer = dialog.pointer
    if dialog_render_info.width
      dialog.width = dialog_render_info.width
    else
      dialog.width = contents.map { |l| calculate_width(l, true) }.max
    end
    height = dialog_render_info.height || DIALOG_DEFAULT_HEIGHT
    height = contents.size if contents.size < height
    if contents.size > height
      if dialog.pointer
        if dialog.pointer < 0
          dialog.scroll_top = 0
        elsif (dialog.pointer - dialog.scroll_top) >= (height - 1)
          dialog.scroll_top = dialog.pointer - (height - 1)
        elsif (dialog.pointer - dialog.scroll_top) < 0
          dialog.scroll_top = dialog.pointer
        end
        pointer = dialog.pointer - dialog.scroll_top
      else
        dialog.scroll_top = 0
      end
      contents = contents[dialog.scroll_top, height]
    end
    if dialog_render_info.scrollbar and dialog_render_info.contents.size > height
      bar_max_height = height * 2
      moving_distance = (dialog_render_info.contents.size - height) * 2
      position_ratio = dialog.scroll_top.zero? ? 0.0 : ((dialog.scroll_top * 2).to_f / moving_distance)
      bar_height = (bar_max_height * ((contents.size * 2).to_f / (dialog_render_info.contents.size * 2))).floor.to_i
      bar_height = MINIMUM_SCROLLBAR_HEIGHT if bar_height < MINIMUM_SCROLLBAR_HEIGHT
      scrollbar_pos = ((bar_max_height - bar_height) * position_ratio).floor.to_i
    else
      scrollbar_pos = nil
    end
    dialog.column = dialog_render_info.pos.x
    dialog.width += @block_elem_width if scrollbar_pos
    diff = (dialog.column + dialog.width) - screen_width
    if diff > 0
      dialog.column -= diff
    end
    if rest_height(screen_scroll_top + cursor_row) - dialog_render_info.pos.y >= height
      dialog.vertical_offset = dialog_render_info.pos.y + 1
    elsif cursor_row >= height
      dialog.vertical_offset = dialog_render_info.pos.y - height
    else
      dialog.vertical_offset = dialog_render_info.pos.y + 1
    end
    if dialog.column < 0
      dialog.column = 0
      dialog.width = screen_width
    end
    face = Reline::Face[dialog_render_info.face || :default]
    scrollbar_sgr = face[:scrollbar]
    default_sgr = face[:default]
    enhanced_sgr = face[:enhanced]
    dialog.contents = contents.map.with_index do |item, i|
      line_sgr = i == pointer ? enhanced_sgr : default_sgr
      str_width = dialog.width - (scrollbar_pos.nil? ? 0 : @block_elem_width)
      str, = Reline::Unicode.take_mbchar_range(item, 0, str_width, padding: true)
      colored_content = "#{line_sgr}#{str}"
      if scrollbar_pos
        if scrollbar_pos <= (i * 2) and (i * 2 + 1) < (scrollbar_pos + bar_height)
          colored_content + scrollbar_sgr + @full_block
        elsif scrollbar_pos <= (i * 2) and (i * 2) < (scrollbar_pos + bar_height)
          colored_content + scrollbar_sgr + @upper_half_block
        elsif scrollbar_pos <= (i * 2 + 1) and (i * 2) < (scrollbar_pos + bar_height)
          colored_content + scrollbar_sgr + @lower_half_block
        else
          colored_content + scrollbar_sgr + ' ' * @block_elem_width
        end
      else
        colored_content
      end
    end
  end

  private def modify_lines(before, complete)
    if after = @output_modifier_proc&.call("#{before.join("\n")}\n", complete: complete)
      after.lines("\n").map { |l| l.chomp('') }
    else
      before.map { |l| Reline::Unicode.escape_for_print(l) }
    end
  end

  def editing_mode
    @config.editing_mode
  end

  private def menu(list)
    @menu_info = MenuInfo.new(list)
  end

  private def filter_normalize_candidates(target, list)
    target = target.downcase if @config.completion_ignore_case
    list.select do |item|
      next unless item
      unless Encoding.compatible?(target.encoding, item.encoding)
        # Workaround for Readline test
        if defined?(::Readline) && ::Readline == ::Reline
          raise Encoding::CompatibilityError, "incompatible character encodings: #{target.encoding} and #{item.encoding}"
        end
      end

      if @config.completion_ignore_case
        item.downcase.start_with?(target)
      else
        item.start_with?(target)
      end
    end.map do |item|
      item.unicode_normalize
    rescue Encoding::CompatibilityError
      item
    end.uniq
  end

  private def perform_completion(preposing, target, postposing, quote, list)
    candidates = filter_normalize_candidates(target, list)

    case @completion_state
    when CompletionState::PERFECT_MATCH
      if @dig_perfect_match_proc
        @dig_perfect_match_proc.call(@perfect_matched)
        return
      end
    when CompletionState::MENU
      menu(candidates)
      return
    when CompletionState::MENU_WITH_PERFECT_MATCH
      menu(candidates)
      @completion_state = CompletionState::PERFECT_MATCH
      return
    end

    completed = Reline::Unicode.common_prefix(candidates, ignore_case: @config.completion_ignore_case)
    return if completed.empty?

    append_character = ''
    if candidates.include?(completed)
      if candidates.one?
        append_character = quote || completion_append_character.to_s
        @completion_state = CompletionState::PERFECT_MATCH
      elsif @config.show_all_if_ambiguous
        menu(candidates)
        @completion_state = CompletionState::PERFECT_MATCH
      else
        @completion_state = CompletionState::MENU_WITH_PERFECT_MATCH
      end
      @perfect_matched = completed
    else
      @completion_state = CompletionState::MENU
      menu(candidates) if @config.show_all_if_ambiguous
    end
    @buffer_of_lines[@line_index] = (preposing + completed + append_character + postposing).split("\n")[@line_index] || String.new(encoding: encoding)
    line_to_pointer = (preposing + completed + append_character).split("\n")[@line_index] || String.new(encoding: encoding)
    @byte_pointer = line_to_pointer.bytesize
  end

  def dialog_proc_scope_completion_journey_data
    return nil unless @completion_journey_state
    line_index = @completion_journey_state.line_index
    pre_lines = @buffer_of_lines[0...line_index].map { |line| line + "\n" }
    post_lines = @buffer_of_lines[(line_index + 1)..-1].map { |line| line + "\n" }
    DialogProcScope::CompletionJourneyData.new(
      pre_lines.join + @completion_journey_state.pre,
      @completion_journey_state.post + post_lines.join,
      @completion_journey_state.list,
      @completion_journey_state.pointer
    )
  end

  private def move_completed_list(direction)
    @completion_journey_state ||= retrieve_completion_journey_state
    return false unless @completion_journey_state

    if (delta = { up: -1, down: +1 }[direction])
      @completion_journey_state.pointer = (@completion_journey_state.pointer + delta) % @completion_journey_state.list.size
    end
    completed = @completion_journey_state.list[@completion_journey_state.pointer]
    set_current_line(@completion_journey_state.pre + completed + @completion_journey_state.post, @completion_journey_state.pre.bytesize + completed.bytesize)
    true
  end

  private def retrieve_completion_journey_state
    preposing, target, postposing, quote = retrieve_completion_block
    list = call_completion_proc(preposing, target, postposing, quote)
    return unless list.is_a?(Array)

    candidates = list.select{ |item| item.start_with?(target) }
    return if candidates.empty?

    pre = preposing.split("\n", -1).last || ''
    post = postposing.split("\n", -1).first || ''
    CompletionJourneyState.new(
      @line_index, pre, target, post, [target] + candidates, 0
    )
  end

  private def run_for_operators(key, method_symbol, &block)
    if @vi_waiting_operator
      if VI_MOTIONS.include?(method_symbol)
        old_byte_pointer = @byte_pointer
        @vi_arg = (@vi_arg || 1) * @vi_waiting_operator_arg
        block.(true)
        unless @waiting_proc
          byte_pointer_diff = @byte_pointer - old_byte_pointer
          @byte_pointer = old_byte_pointer
          method_obj = method(@vi_waiting_operator)
          wrap_method_call(@vi_waiting_operator, method_obj, byte_pointer_diff)
          cleanup_waiting
        end
      else
        # Ignores operator when not motion is given.
        block.(false)
        cleanup_waiting
      end
      @vi_arg = nil
    else
      block.(false)
    end
  end

  private def argumentable?(method_obj)
    method_obj and method_obj.parameters.any? { |param| param[0] == :key and param[1] == :arg }
  end

  private def inclusive?(method_obj)
    # If a motion method with the keyword argument "inclusive" follows the
    # operator, it must contain the character at the cursor position.
    method_obj and method_obj.parameters.any? { |param| param[0] == :key and param[1] == :inclusive }
  end

  def wrap_method_call(method_symbol, method_obj, key, with_operator = false)
    if @config.editing_mode_is?(:emacs, :vi_insert) and @vi_waiting_operator.nil?
      not_insertion = method_symbol != :ed_insert
      process_insert(force: not_insertion)
    end
    if @vi_arg and argumentable?(method_obj)
      if with_operator and inclusive?(method_obj)
        method_obj.(key, arg: @vi_arg, inclusive: true)
      else
        method_obj.(key, arg: @vi_arg)
      end
    else
      if with_operator and inclusive?(method_obj)
        method_obj.(key, inclusive: true)
      else
        method_obj.(key)
      end
    end
  end

  private def cleanup_waiting
    @waiting_proc = nil
    @vi_waiting_operator = nil
    @vi_waiting_operator_arg = nil
    @searching_prompt = nil
    @drop_terminate_spaces = false
  end

  ARGUMENT_DIGIT_METHODS = %i[ed_digit vi_zero ed_argument_digit]
  VI_WAITING_ACCEPT_METHODS = %i[vi_change_meta vi_delete_meta vi_yank ed_insert ed_argument_digit]

  private def process_key(key, method_symbol)
    if @waiting_proc
      cleanup_waiting unless key.size == 1
    end
    if @vi_waiting_operator
      cleanup_waiting unless VI_WAITING_ACCEPT_METHODS.include?(method_symbol) || VI_MOTIONS.include?(method_symbol)
    end

    if @waiting_proc
      old_byte_pointer = @byte_pointer
      @waiting_proc.call(key)
      if @vi_waiting_operator
        byte_pointer_diff = @byte_pointer - old_byte_pointer
        @byte_pointer = old_byte_pointer
        method_obj = method(@vi_waiting_operator)
        wrap_method_call(@vi_waiting_operator, method_obj, byte_pointer_diff)
        cleanup_waiting
      end
      @kill_ring.process
      return
    end

    # Reject multibyte input (converted to ed_insert) in vi_command mode
    return if method_symbol == :ed_insert && @config.editing_mode_is?(:vi_command)

    if method_symbol and respond_to?(method_symbol, true)
      method_obj = method(method_symbol)
    end
    if @vi_arg
      if ARGUMENT_DIGIT_METHODS.include?(method_symbol)
        ed_argument_digit(key)
      else
        if argumentable?(method_obj)
          run_for_operators(key, method_symbol) do |with_operator|
            wrap_method_call(method_symbol, method_obj, key, with_operator)
          end
        elsif method_obj
          wrap_method_call(method_symbol, method_obj, key)
        end
        @kill_ring.process
        @vi_arg = nil
      end
    elsif method_obj
      if method_symbol == :ed_argument_digit
        wrap_method_call(method_symbol, method_obj, key)
      else
        run_for_operators(key, method_symbol) do |with_operator|
          wrap_method_call(method_symbol, method_obj, key, with_operator)
        end
      end
      @kill_ring.process
    end
  end

  def update(key)
    modified = input_key(key)
    unless @in_pasting
      scroll_into_view
      @just_cursor_moving = !modified
      update_dialogs(key)
      @just_cursor_moving = false
    end
  end

  def input_key(key)
    save_old_buffer
    @config.reset_oneshot_key_bindings
    if key.char.nil?
      process_insert(force: true)
      @eof = buffer_empty?
      finish
      return
    end
    @dialogs.each do |dialog|
      if key.method_symbol == dialog.name
        return
      end
    end
    @completion_occurs = false

    process_key(key.char, key.method_symbol)
    if @config.editing_mode_is?(:vi_command) and @byte_pointer > 0 and @byte_pointer == current_line.bytesize
      byte_size = Reline::Unicode.get_prev_mbchar_size(@buffer_of_lines[@line_index], @byte_pointer)
      @byte_pointer -= byte_size
    end

    @prev_action_state, @next_action_state = @next_action_state, NullActionState

    unless @completion_occurs
      @completion_state = CompletionState::NORMAL
      @completion_journey_state = nil
    end

    push_input_lines unless @restoring
    @restoring = false

    if @in_pasting
      clear_dialogs
      return
    end

    modified = @old_buffer_of_lines != @buffer_of_lines
    if !@completion_occurs && modified && !@config.disable_completion && @config.autocompletion
      # Auto complete starts only when edited
      process_insert(force: true)
      @completion_journey_state = retrieve_completion_journey_state
    end
    modified
  end

  def save_old_buffer
    @old_buffer_of_lines = @buffer_of_lines.dup
  end

  def push_input_lines
    if @old_buffer_of_lines == @buffer_of_lines
      @input_lines[@input_lines_position] = [@buffer_of_lines.dup, @byte_pointer, @line_index]
    else
      @input_lines = @input_lines[0..@input_lines_position]
      @input_lines_position += 1
      @input_lines.push([@buffer_of_lines.dup, @byte_pointer, @line_index])
    end
    trim_input_lines
  end

  MAX_INPUT_LINES = 100
  def trim_input_lines
    if @input_lines.size > MAX_INPUT_LINES
      @input_lines.shift
      @input_lines_position -= 1
    end
  end

  def scroll_into_view
    _wrapped_cursor_x, wrapped_cursor_y = wrapped_cursor_position
    if wrapped_cursor_y < screen_scroll_top
      @scroll_partial_screen = wrapped_cursor_y
    end
    if wrapped_cursor_y >= screen_scroll_top + screen_height
      @scroll_partial_screen = wrapped_cursor_y - screen_height + 1
    end
  end

  def call_completion_proc(pre, target, post, quote)
    Reline.core.instance_variable_set(:@completion_quote_character, quote)
    result = call_completion_proc_with_checking_args(pre, target, post)
    Reline.core.instance_variable_set(:@completion_quote_character, nil)
    result
  end

  def call_completion_proc_with_checking_args(pre, target, post)
    if @completion_proc and target
      argnum = @completion_proc.parameters.inject(0) { |result, item|
        case item.first
        when :req, :opt
          result + 1
        when :rest
          break 3
        end
      }
      case argnum
      when 1
        result = @completion_proc.(target)
      when 2
        result = @completion_proc.(target, pre)
      when 3..Float::INFINITY
        result = @completion_proc.(target, pre, post)
      end
    end
    result
  end

  private def process_auto_indent(line_index = @line_index, cursor_dependent: true, add_newline: false)
    return if @in_pasting
    return unless @auto_indent_proc

    line = @buffer_of_lines[line_index]
    byte_pointer = cursor_dependent && @line_index == line_index ? @byte_pointer : line.bytesize
    new_indent = @auto_indent_proc.(@buffer_of_lines.take(line_index + 1).push(''), line_index, byte_pointer, add_newline)
    return unless new_indent

    new_line = ' ' * new_indent + line.lstrip
    @buffer_of_lines[line_index] = new_line
    if @line_index == line_index
      indent_diff = new_line.bytesize - line.bytesize
      @byte_pointer = [@byte_pointer + indent_diff, 0].max
    end
  end

  def line()
    @buffer_of_lines.join("\n") unless eof?
  end

  def current_line
    @buffer_of_lines[@line_index]
  end

  def set_current_line(line, byte_pointer = nil)
    cursor = current_byte_pointer_cursor
    @buffer_of_lines[@line_index] = line
    if byte_pointer
      @byte_pointer = byte_pointer
    else
      calculate_nearest_cursor(cursor)
    end
    process_auto_indent
  end

  def retrieve_completion_block
    quote_characters = Reline.completer_quote_characters
    before = current_line.byteslice(0, @byte_pointer).grapheme_clusters
    quote = nil
    # Calcualte closing quote when cursor is at the end of the line
    if current_line.bytesize == @byte_pointer && !quote_characters.empty?
      escaped = false
      before.each do |c|
        if escaped
          escaped = false
          next
        elsif c == '\\'
          escaped = true
        elsif quote
          quote = nil if c == quote
        elsif quote_characters.include?(c)
          quote = c
        end
      end
    end

    word_break_characters = quote_characters + Reline.completer_word_break_characters
    break_index = before.rindex { |c| word_break_characters.include?(c) || quote_characters.include?(c) } || -1
    preposing = before.take(break_index + 1).join
    target = before.drop(break_index + 1).join
    postposing = current_line.byteslice(@byte_pointer, current_line.bytesize - @byte_pointer)
    lines = whole_lines
    if @line_index > 0
      preposing = lines[0..(@line_index - 1)].join("\n") + "\n" + preposing
    end
    if (lines.size - 1) > @line_index
      postposing = postposing + "\n" + lines[(@line_index + 1)..-1].join("\n")
    end
    [preposing.encode(encoding), target.encode(encoding), postposing.encode(encoding), quote&.encode(encoding)]
  end

  def confirm_multiline_termination
    temp_buffer = @buffer_of_lines.dup
    @confirm_multiline_termination_proc.(temp_buffer.join("\n") + "\n")
  end

  def insert_multiline_text(text)
    pre = @buffer_of_lines[@line_index].byteslice(0, @byte_pointer)
    post = @buffer_of_lines[@line_index].byteslice(@byte_pointer..)
    lines = (pre + Reline::Unicode.safe_encode(text, encoding).gsub(/\r\n?/, "\n") + post).split("\n", -1)
    lines << '' if lines.empty?
    @buffer_of_lines[@line_index, 1] = lines
    @line_index += lines.size - 1
    @byte_pointer = @buffer_of_lines[@line_index].bytesize - post.bytesize
  end

  def insert_text(text)
    if @buffer_of_lines[@line_index].bytesize == @byte_pointer
      @buffer_of_lines[@line_index] += text
    else
      @buffer_of_lines[@line_index] = byteinsert(@buffer_of_lines[@line_index], @byte_pointer, text)
    end
    @byte_pointer += text.bytesize
    process_auto_indent
  end

  def delete_text(start = nil, length = nil)
    if start.nil? and length.nil?
      if @buffer_of_lines.size == 1
        @buffer_of_lines[@line_index] = ''
        @byte_pointer = 0
      elsif @line_index == (@buffer_of_lines.size - 1) and @line_index > 0
        @buffer_of_lines.pop
        @line_index -= 1
        @byte_pointer = 0
      elsif @line_index < (@buffer_of_lines.size - 1)
        @buffer_of_lines.delete_at(@line_index)
        @byte_pointer = 0
      end
    elsif not start.nil? and not length.nil?
      if current_line
        before = current_line.byteslice(0, start)
        after = current_line.byteslice(start + length, current_line.bytesize)
        set_current_line(before + after)
      end
    elsif start.is_a?(Range)
      range = start
      first = range.first
      last = range.last
      last = current_line.bytesize - 1 if last > current_line.bytesize
      last += current_line.bytesize if last < 0
      first += current_line.bytesize if first < 0
      range = range.exclude_end? ? first...last : first..last
      line = current_line.bytes.reject.with_index{ |c, i| range.include?(i) }.map{ |c| c.chr(Encoding::ASCII_8BIT) }.join.force_encoding(encoding)
      set_current_line(line)
    else
      set_current_line(current_line.byteslice(0, start))
    end
  end

  def byte_pointer=(val)
    @byte_pointer = val
  end

  def whole_lines
    @buffer_of_lines.dup
  end

  def whole_buffer
    whole_lines.join("\n")
  end

  private def buffer_empty?
    current_line.empty? and @buffer_of_lines.size == 1
  end

  def finished?
    @finished
  end

  def finish
    @finished = true
    @config.reset
  end

  private def byteslice!(str, byte_pointer, size)
    new_str = str.byteslice(0, byte_pointer)
    new_str << str.byteslice(byte_pointer + size, str.bytesize)
    [new_str, str.byteslice(byte_pointer, size)]
  end

  private def byteinsert(str, byte_pointer, other)
    new_str = str.byteslice(0, byte_pointer)
    new_str << other
    new_str << str.byteslice(byte_pointer, str.bytesize)
    new_str
  end

  private def calculate_width(str, allow_escape_code = false)
    Reline::Unicode.calculate_width(str, allow_escape_code)
  end

  private def key_delete(key)
    if @config.editing_mode_is?(:vi_insert)
      ed_delete_next_char(key)
    elsif @config.editing_mode_is?(:emacs)
      em_delete(key)
    end
  end

  private def key_newline(key)
    if @is_multiline
      next_line = current_line.byteslice(@byte_pointer, current_line.bytesize - @byte_pointer)
      cursor_line = current_line.byteslice(0, @byte_pointer)
      insert_new_line(cursor_line, next_line)
    end
  end

  private def complete(_key)
    return if @config.disable_completion

    process_insert(force: true)
    if @config.autocompletion
      @completion_state = CompletionState::NORMAL
      @completion_occurs = move_completed_list(:down)
    else
      @completion_journey_state = nil
      pre, target, post, quote = retrieve_completion_block
      result = call_completion_proc(pre, target, post, quote)
      if result.is_a?(Array)
        @completion_occurs = true
        perform_completion(pre, target, post, quote, result)
      end
    end
  end

  private def completion_journey_move(direction)
    return if @config.disable_completion

    process_insert(force: true)
    @completion_state = CompletionState::NORMAL
    @completion_occurs = move_completed_list(direction)
  end

  private def menu_complete(_key)
    completion_journey_move(:down)
  end

  private def menu_complete_backward(_key)
    completion_journey_move(:up)
  end

  private def completion_journey_up(_key)
    completion_journey_move(:up) if @config.autocompletion
  end

  # Editline:: +ed-unassigned+ This  editor command always results in an error.
  # GNU Readline:: There is no corresponding macro.
  private def ed_unassigned(key) end # do nothing

  private def process_insert(force: false)
    return if @continuous_insertion_buffer.empty? or (@in_pasting and not force)
    insert_text(@continuous_insertion_buffer)
    @continuous_insertion_buffer.clear
  end

  # Editline:: +ed-insert+ (vi input: almost all; emacs: printable characters)
  #            In insert mode, insert the input character left of the cursor
  #            position. In replace mode, overwrite the character at the
  #            cursor and move the cursor to the right by one character
  #            position. Accept an argument to do this repeatedly. It is an
  #            error if the input character is the NUL character (+Ctrl-@+).
  #            Failure to enlarge the edit buffer also results in an error.
  # Editline:: +ed-digit+ (emacs: 0 to 9) If in argument input mode, append
  #            the input digit to the argument being read. Otherwise, call
  #            +ed-insert+. It is an error if the input character is not a
  #            digit or if the existing argument is already greater than a
  #            million.
  # GNU Readline:: +self-insert+ (a, b, A, 1, !, …) Insert yourself.
  private def ed_insert(str)
    begin
      str.encode(Encoding::UTF_8)
    rescue Encoding::UndefinedConversionError
      return
    end
    if @in_pasting
      @continuous_insertion_buffer << str
      return
    elsif not @continuous_insertion_buffer.empty?
      process_insert
    end

    insert_text(str)
  end
  alias_method :ed_digit, :ed_insert
  alias_method :self_insert, :ed_insert

  private def insert_raw_char(str, arg: 1)
    arg.times do
      if str == "\C-j" or str == "\C-m"
        key_newline(str)
      elsif str != "\0"
        # Ignore NUL.
        ed_insert(str)
      end
    end
  end

  private def ed_next_char(key, arg: 1)
    byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
    if (@byte_pointer < current_line.bytesize)
      @byte_pointer += byte_size
    elsif @config.editing_mode_is?(:emacs) and @byte_pointer == current_line.bytesize and @line_index < @buffer_of_lines.size - 1
      @byte_pointer = 0
      @line_index += 1
    end
    arg -= 1
    ed_next_char(key, arg: arg) if arg > 0
  end
  alias_method :forward_char, :ed_next_char

  private def ed_prev_char(key, arg: 1)
    if @byte_pointer > 0
      byte_size = Reline::Unicode.get_prev_mbchar_size(current_line, @byte_pointer)
      @byte_pointer -= byte_size
    elsif @config.editing_mode_is?(:emacs) and @byte_pointer == 0 and @line_index > 0
      @line_index -= 1
      @byte_pointer = current_line.bytesize
    end
    arg -= 1
    ed_prev_char(key, arg: arg) if arg > 0
  end
  alias_method :backward_char, :ed_prev_char

  private def vi_first_print(key)
    @byte_pointer = Reline::Unicode.vi_first_print(current_line)
  end

  private def ed_move_to_beg(key)
    @byte_pointer = 0
  end
  alias_method :beginning_of_line, :ed_move_to_beg
  alias_method :vi_zero, :ed_move_to_beg

  private def ed_move_to_end(key)
    @byte_pointer = current_line.bytesize
  end
  alias_method :end_of_line, :ed_move_to_end

  private def generate_searcher(search_key)
    search_word = String.new(encoding: encoding)
    hit_pointer = nil
    lambda do |key|
      search_again = false
      case key
      when "\C-h", "\C-?"
        grapheme_clusters = search_word.grapheme_clusters
        if grapheme_clusters.size > 0
          grapheme_clusters.pop
          search_word = grapheme_clusters.join
        end
      when "\C-r", "\C-s"
        search_again = true if search_key == key
        search_key = key
      else
        search_word << key
      end
      hit = nil
      if not search_word.empty? and @line_backup_in_history&.include?(search_word)
        hit_pointer = Reline::HISTORY.size
        hit = @line_backup_in_history
      else
        if search_again
          if search_word.empty? and Reline.last_incremental_search
            search_word = Reline.last_incremental_search
          end
          if @history_pointer
            case search_key
            when "\C-r"
              history_pointer_base = 0
              history = Reline::HISTORY[0..(@history_pointer - 1)]
            when "\C-s"
              history_pointer_base = @history_pointer + 1
              history = Reline::HISTORY[(@history_pointer + 1)..-1]
            end
          else
            history_pointer_base = 0
            history = Reline::HISTORY
          end
        elsif @history_pointer
          case search_key
          when "\C-r"
            history_pointer_base = 0
            history = Reline::HISTORY[0..@history_pointer]
          when "\C-s"
            history_pointer_base = @history_pointer
            history = Reline::HISTORY[@history_pointer..-1]
          end
        else
          history_pointer_base = 0
          history = Reline::HISTORY
        end
        case search_key
        when "\C-r"
          hit_index = history.rindex { |item|
            item.include?(search_word)
          }
        when "\C-s"
          hit_index = history.index { |item|
            item.include?(search_word)
          }
        end
        if hit_index
          hit_pointer = history_pointer_base + hit_index
          hit = Reline::HISTORY[hit_pointer]
        end
      end
      case search_key
      when "\C-r"
        prompt_name = 'reverse-i-search'
      when "\C-s"
        prompt_name = 'i-search'
      end
      prompt_name = "failed #{prompt_name}" unless hit
      [search_word, prompt_name, hit_pointer]
    end
  end

  private def incremental_search_history(key)
    backup = @buffer_of_lines.dup, @line_index, @byte_pointer, @history_pointer, @line_backup_in_history
    searcher = generate_searcher(key)
    @searching_prompt = "(reverse-i-search)`': "
    termination_keys = ["\C-j"]
    termination_keys.concat(@config.isearch_terminators.chars) if @config.isearch_terminators
    @waiting_proc = ->(k) {
      if k == "\C-g"
        # cancel search and restore buffer
        @buffer_of_lines, @line_index, @byte_pointer, @history_pointer, @line_backup_in_history = backup
        @searching_prompt = nil
        @waiting_proc = nil
      elsif !termination_keys.include?(k) && (k.match?(/[[:print:]]/) || k == "\C-h" || k == "\C-?" || k == "\C-r" || k == "\C-s")
        search_word, prompt_name, hit_pointer = searcher.call(k)
        Reline.last_incremental_search = search_word
        @searching_prompt = "(%s)`%s'" % [prompt_name, search_word]
        @searching_prompt += ': ' unless @is_multiline
        move_history(hit_pointer, line: :end, cursor: :end) if hit_pointer
      else
        # terminaton_keys and other keys will terminalte
        move_history(@history_pointer, line: :end, cursor: :start)
        @searching_prompt = nil
        @waiting_proc = nil
      end
    }
  end

  private def vi_search_prev(key)
    incremental_search_history(key)
  end
  alias_method :reverse_search_history, :vi_search_prev

  private def vi_search_next(key)
    incremental_search_history(key)
  end
  alias_method :forward_search_history, :vi_search_next

  private def search_history(prefix, pointer_range)
    pointer_range.each do |pointer|
      lines = Reline::HISTORY[pointer].split("\n")
      lines.each_with_index do |line, index|
        return [pointer, index] if line.start_with?(prefix)
      end
    end
    nil
  end

  private def ed_search_prev_history(key, arg: 1)
    substr = prev_action_state_value(:search_history) == :empty ? '' : current_line.byteslice(0, @byte_pointer)
    return if @history_pointer == 0
    return if @history_pointer.nil? && substr.empty? && !current_line.empty?

    history_range = 0...(@history_pointer || Reline::HISTORY.size)
    h_pointer, line_index = search_history(substr, history_range.reverse_each)
    return unless h_pointer
    move_history(h_pointer, line: line_index || :start, cursor: substr.empty? ? :end : @byte_pointer)
    arg -= 1
    set_next_action_state(:search_history, :empty) if substr.empty?
    ed_search_prev_history(key, arg: arg) if arg > 0
  end
  alias_method :history_search_backward, :ed_search_prev_history

  private def ed_search_next_history(key, arg: 1)
    substr = prev_action_state_value(:search_history) == :empty ? '' : current_line.byteslice(0, @byte_pointer)
    return if @history_pointer.nil?

    history_range = @history_pointer + 1...Reline::HISTORY.size
    h_pointer, line_index = search_history(substr, history_range)
    return if h_pointer.nil? and not substr.empty?

    move_history(h_pointer, line: line_index || :start, cursor: substr.empty? ? :end : @byte_pointer)
    arg -= 1
    set_next_action_state(:search_history, :empty) if substr.empty?
    ed_search_next_history(key, arg: arg) if arg > 0
  end
  alias_method :history_search_forward, :ed_search_next_history

  private def move_history(history_pointer, line:, cursor:)
    history_pointer ||= Reline::HISTORY.size
    return if history_pointer < 0 || history_pointer > Reline::HISTORY.size
    old_history_pointer = @history_pointer || Reline::HISTORY.size
    if old_history_pointer == Reline::HISTORY.size
      @line_backup_in_history = whole_buffer
    else
      Reline::HISTORY[old_history_pointer] = whole_buffer
    end
    if history_pointer == Reline::HISTORY.size
      buf = @line_backup_in_history
      @history_pointer = @line_backup_in_history = nil
    else
      buf = Reline::HISTORY[history_pointer]
      @history_pointer = history_pointer
    end
    @buffer_of_lines = buf.split("\n")
    @buffer_of_lines = [String.new(encoding: encoding)] if @buffer_of_lines.empty?
    @line_index = line == :start ? 0 : line == :end ? @buffer_of_lines.size - 1 : line
    @byte_pointer = cursor == :start ? 0 : cursor == :end ? current_line.bytesize : cursor
  end

  private def ed_prev_history(key, arg: 1)
    if @line_index > 0
      cursor = current_byte_pointer_cursor
      @line_index -= 1
      calculate_nearest_cursor(cursor)
      return
    end
    move_history(
      (@history_pointer || Reline::HISTORY.size) - 1,
      line: :end,
      cursor: @config.editing_mode_is?(:vi_command) ? :start : :end,
    )
    arg -= 1
    ed_prev_history(key, arg: arg) if arg > 0
  end
  alias_method :previous_history, :ed_prev_history

  private def ed_next_history(key, arg: 1)
    if @line_index < (@buffer_of_lines.size - 1)
      cursor = current_byte_pointer_cursor
      @line_index += 1
      calculate_nearest_cursor(cursor)
      return
    end
    move_history(
      (@history_pointer || Reline::HISTORY.size) + 1,
      line: :start,
      cursor: @config.editing_mode_is?(:vi_command) ? :start : :end,
    )
    arg -= 1
    ed_next_history(key, arg: arg) if arg > 0
  end
  alias_method :next_history, :ed_next_history

  private def ed_newline(key)
    process_insert(force: true)
    if @is_multiline
      if @config.editing_mode_is?(:vi_command)
        if @line_index < (@buffer_of_lines.size - 1)
          ed_next_history(key) # means cursor down
        else
          # should check confirm_multiline_termination to finish?
          finish
        end
      else
        if @line_index == (@buffer_of_lines.size - 1)
          if confirm_multiline_termination
            finish
          else
            key_newline(key)
          end
        else
          # should check confirm_multiline_termination to finish?
          @line_index = @buffer_of_lines.size - 1
          @byte_pointer = current_line.bytesize
          finish
        end
      end
    else
      finish
    end
  end

  private def em_delete_prev_char(key, arg: 1)
    arg.times do
      if @byte_pointer == 0 and @line_index > 0
        @byte_pointer = @buffer_of_lines[@line_index - 1].bytesize
        @buffer_of_lines[@line_index - 1] += @buffer_of_lines.delete_at(@line_index)
        @line_index -= 1
      elsif @byte_pointer > 0
        byte_size = Reline::Unicode.get_prev_mbchar_size(current_line, @byte_pointer)
        line, = byteslice!(current_line, @byte_pointer - byte_size, byte_size)
        set_current_line(line, @byte_pointer - byte_size)
      end
    end
    process_auto_indent
  end
  alias_method :backward_delete_char, :em_delete_prev_char

  # Editline:: +ed-kill-line+ (vi command: +D+, +Ctrl-K+; emacs: +Ctrl-K+,
  #            +Ctrl-U+) + Kill from the cursor to the end of the line.
  # GNU Readline:: +kill-line+ (+C-k+) Kill the text from point to the end of
  #                the line. With a negative numeric argument, kill backward
  #                from the cursor to the beginning of the current line.
  private def ed_kill_line(key)
    if current_line.bytesize > @byte_pointer
      line, deleted = byteslice!(current_line, @byte_pointer, current_line.bytesize - @byte_pointer)
      set_current_line(line, line.bytesize)
      @kill_ring.append(deleted)
    elsif @byte_pointer == current_line.bytesize and @buffer_of_lines.size > @line_index + 1
      set_current_line(current_line + @buffer_of_lines.delete_at(@line_index + 1), current_line.bytesize)
    end
  end
  alias_method :kill_line, :ed_kill_line

  # Editline:: +vi_change_to_eol+ (vi command: +C+) + Kill and change from the cursor to the end of the line.
  private def vi_change_to_eol(key)
    ed_kill_line(key)

    @config.editing_mode = :vi_insert
  end

  # Editline:: +vi-kill-line-prev+ (vi: +Ctrl-U+) Delete the string from the
  #            beginning  of the edit buffer to the cursor and save it to the
  #            cut buffer.
  # GNU Readline:: +unix-line-discard+ (+C-u+) Kill backward from the cursor
  #                to the beginning of the current line.
  private def vi_kill_line_prev(key)
    if @byte_pointer > 0
      line, deleted = byteslice!(current_line, 0, @byte_pointer)
      set_current_line(line, 0)
      @kill_ring.append(deleted, true)
    end
  end
  alias_method :unix_line_discard, :vi_kill_line_prev

  # Editline:: +em-kill-line+ (not bound) Delete the entire contents of the
  #            edit buffer and save it to the cut buffer. +vi-kill-line-prev+
  # GNU Readline:: +kill-whole-line+ (not bound) Kill all characters on the
  #                current line, no matter where point is.
  private def em_kill_line(key)
    if current_line.size > 0
      @kill_ring.append(current_line.dup, true)
      set_current_line('', 0)
    end
  end
  alias_method :kill_whole_line, :em_kill_line

  private def em_delete(key)
    if buffer_empty? and key == "\C-d"
      @eof = true
      finish
    elsif @byte_pointer < current_line.bytesize
      splitted_last = current_line.byteslice(@byte_pointer, current_line.bytesize)
      mbchar = splitted_last.grapheme_clusters.first
      line, = byteslice!(current_line, @byte_pointer, mbchar.bytesize)
      set_current_line(line)
    elsif @byte_pointer == current_line.bytesize and @buffer_of_lines.size > @line_index + 1
      set_current_line(current_line + @buffer_of_lines.delete_at(@line_index + 1), current_line.bytesize)
    end
  end
  alias_method :delete_char, :em_delete

  private def em_delete_or_list(key)
    if current_line.empty? or @byte_pointer < current_line.bytesize
      em_delete(key)
    elsif !@config.autocompletion # show completed list
      pre, target, post, quote = retrieve_completion_block
      result = call_completion_proc(pre, target, post, quote)
      if result.is_a?(Array)
        candidates = filter_normalize_candidates(target, result)
        menu(candidates)
      end
    end
  end
  alias_method :delete_char_or_list, :em_delete_or_list

  private def em_yank(key)
    yanked = @kill_ring.yank
    insert_text(yanked) if yanked
  end
  alias_method :yank, :em_yank

  private def em_yank_pop(key)
    yanked, prev_yank = @kill_ring.yank_pop
    if yanked
      line, = byteslice!(current_line, @byte_pointer - prev_yank.bytesize, prev_yank.bytesize)
      set_current_line(line, @byte_pointer - prev_yank.bytesize)
      insert_text(yanked)
    end
  end
  alias_method :yank_pop, :em_yank_pop

  private def ed_clear_screen(key)
    Reline::IOGate.clear_screen
    @screen_size = Reline::IOGate.get_screen_size
    @rendered_screen.base_y = 0
    clear_rendered_screen_cache
  end
  alias_method :clear_screen, :ed_clear_screen

  private def em_next_word(key)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.em_forward_word(current_line, @byte_pointer)
      @byte_pointer += byte_size
    end
  end
  alias_method :forward_word, :em_next_word

  private def ed_prev_word(key)
    if @byte_pointer > 0
      byte_size = Reline::Unicode.em_backward_word(current_line, @byte_pointer)
      @byte_pointer -= byte_size
    end
  end
  alias_method :backward_word, :ed_prev_word

  private def em_delete_next_word(key)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.em_forward_word(current_line, @byte_pointer)
      line, word = byteslice!(current_line, @byte_pointer, byte_size)
      set_current_line(line)
      @kill_ring.append(word)
    end
  end
  alias_method :kill_word, :em_delete_next_word

  private def ed_delete_prev_word(key)
    if @byte_pointer > 0
      byte_size = Reline::Unicode.em_backward_word(current_line, @byte_pointer)
      line, word = byteslice!(current_line, @byte_pointer - byte_size, byte_size)
      set_current_line(line, @byte_pointer - byte_size)
      @kill_ring.append(word, true)
    end
  end
  alias_method :backward_kill_word, :ed_delete_prev_word

  private def ed_transpose_chars(key)
    if @byte_pointer > 0
      if @byte_pointer < current_line.bytesize
        byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
        @byte_pointer += byte_size
      end
      back1_byte_size = Reline::Unicode.get_prev_mbchar_size(current_line, @byte_pointer)
      if (@byte_pointer - back1_byte_size) > 0
        back2_byte_size = Reline::Unicode.get_prev_mbchar_size(current_line, @byte_pointer - back1_byte_size)
        back2_pointer = @byte_pointer - back1_byte_size - back2_byte_size
        line, back2_mbchar = byteslice!(current_line, back2_pointer, back2_byte_size)
        set_current_line(byteinsert(line, @byte_pointer - back2_byte_size, back2_mbchar))
      end
    end
  end
  alias_method :transpose_chars, :ed_transpose_chars

  private def ed_transpose_words(key)
    left_word_start, middle_start, right_word_start, after_start = Reline::Unicode.ed_transpose_words(current_line, @byte_pointer)
    before = current_line.byteslice(0, left_word_start)
    left_word = current_line.byteslice(left_word_start, middle_start - left_word_start)
    middle = current_line.byteslice(middle_start, right_word_start - middle_start)
    right_word = current_line.byteslice(right_word_start, after_start - right_word_start)
    after = current_line.byteslice(after_start, current_line.bytesize - after_start)
    return if left_word.empty? or right_word.empty?
    from_head_to_left_word = before + right_word + middle + left_word
    set_current_line(from_head_to_left_word + after, from_head_to_left_word.bytesize)
  end
  alias_method :transpose_words, :ed_transpose_words

  private def em_capitol_case(key)
    if current_line.bytesize > @byte_pointer
      byte_size, new_str = Reline::Unicode.em_forward_word_with_capitalization(current_line, @byte_pointer)
      before = current_line.byteslice(0, @byte_pointer)
      after = current_line.byteslice((@byte_pointer + byte_size)..-1)
      set_current_line(before + new_str + after, @byte_pointer + new_str.bytesize)
    end
  end
  alias_method :capitalize_word, :em_capitol_case

  private def em_lower_case(key)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.em_forward_word(current_line, @byte_pointer)
      part = current_line.byteslice(@byte_pointer, byte_size).grapheme_clusters.map { |mbchar|
        mbchar =~ /[A-Z]/ ? mbchar.downcase : mbchar
      }.join
      rest = current_line.byteslice((@byte_pointer + byte_size)..-1)
      line = current_line.byteslice(0, @byte_pointer) + part
      set_current_line(line + rest, line.bytesize)
    end
  end
  alias_method :downcase_word, :em_lower_case

  private def em_upper_case(key)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.em_forward_word(current_line, @byte_pointer)
      part = current_line.byteslice(@byte_pointer, byte_size).grapheme_clusters.map { |mbchar|
        mbchar =~ /[a-z]/ ? mbchar.upcase : mbchar
      }.join
      rest = current_line.byteslice((@byte_pointer + byte_size)..-1)
      line = current_line.byteslice(0, @byte_pointer) + part
      set_current_line(line + rest, line.bytesize)
    end
  end
  alias_method :upcase_word, :em_upper_case

  private def em_kill_region(key)
    if @byte_pointer > 0
      byte_size = Reline::Unicode.em_big_backward_word(current_line, @byte_pointer)
      line, deleted = byteslice!(current_line, @byte_pointer - byte_size, byte_size)
      set_current_line(line, @byte_pointer - byte_size)
      @kill_ring.append(deleted, true)
    end
  end
  alias_method :unix_word_rubout, :em_kill_region

  private def copy_for_vi(text)
    if @config.editing_mode_is?(:vi_insert) or @config.editing_mode_is?(:vi_command)
      @vi_clipboard = text
    end
  end

  private def vi_insert(key)
    @config.editing_mode = :vi_insert
  end

  private def vi_add(key)
    @config.editing_mode = :vi_insert
    ed_next_char(key)
  end

  private def vi_command_mode(key)
    ed_prev_char(key)
    @config.editing_mode = :vi_command
  end
  alias_method :vi_movement_mode, :vi_command_mode

  private def vi_next_word(key, arg: 1)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.vi_forward_word(current_line, @byte_pointer, @drop_terminate_spaces)
      @byte_pointer += byte_size
    end
    arg -= 1
    vi_next_word(key, arg: arg) if arg > 0
  end

  private def vi_prev_word(key, arg: 1)
    if @byte_pointer > 0
      byte_size = Reline::Unicode.vi_backward_word(current_line, @byte_pointer)
      @byte_pointer -= byte_size
    end
    arg -= 1
    vi_prev_word(key, arg: arg) if arg > 0
  end

  private def vi_end_word(key, arg: 1, inclusive: false)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.vi_forward_end_word(current_line, @byte_pointer)
      @byte_pointer += byte_size
    end
    arg -= 1
    if inclusive and arg.zero?
      byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
      if byte_size > 0
        @byte_pointer += byte_size
      end
    end
    vi_end_word(key, arg: arg) if arg > 0
  end

  private def vi_next_big_word(key, arg: 1)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.vi_big_forward_word(current_line, @byte_pointer)
      @byte_pointer += byte_size
    end
    arg -= 1
    vi_next_big_word(key, arg: arg) if arg > 0
  end

  private def vi_prev_big_word(key, arg: 1)
    if @byte_pointer > 0
      byte_size = Reline::Unicode.vi_big_backward_word(current_line, @byte_pointer)
      @byte_pointer -= byte_size
    end
    arg -= 1
    vi_prev_big_word(key, arg: arg) if arg > 0
  end

  private def vi_end_big_word(key, arg: 1, inclusive: false)
    if current_line.bytesize > @byte_pointer
      byte_size = Reline::Unicode.vi_big_forward_end_word(current_line, @byte_pointer)
      @byte_pointer += byte_size
    end
    arg -= 1
    if inclusive and arg.zero?
      byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
      if byte_size > 0
        @byte_pointer += byte_size
      end
    end
    vi_end_big_word(key, arg: arg) if arg > 0
  end

  private def vi_delete_prev_char(key)
    if @byte_pointer == 0 and @line_index > 0
      @byte_pointer = @buffer_of_lines[@line_index - 1].bytesize
      @buffer_of_lines[@line_index - 1] += @buffer_of_lines.delete_at(@line_index)
      @line_index -= 1
      process_auto_indent cursor_dependent: false
    elsif @byte_pointer > 0
      byte_size = Reline::Unicode.get_prev_mbchar_size(current_line, @byte_pointer)
      @byte_pointer -= byte_size
      line, _ = byteslice!(current_line, @byte_pointer, byte_size)
      set_current_line(line)
    end
  end

  private def vi_insert_at_bol(key)
    ed_move_to_beg(key)
    @config.editing_mode = :vi_insert
  end

  private def vi_add_at_eol(key)
    ed_move_to_end(key)
    @config.editing_mode = :vi_insert
  end

  private def ed_delete_prev_char(key, arg: 1)
    deleted = +''
    arg.times do
      if @byte_pointer > 0
        byte_size = Reline::Unicode.get_prev_mbchar_size(current_line, @byte_pointer)
        @byte_pointer -= byte_size
        line, mbchar = byteslice!(current_line, @byte_pointer, byte_size)
        set_current_line(line)
        deleted.prepend(mbchar)
      end
    end
    copy_for_vi(deleted)
  end

  private def vi_change_meta(key, arg: nil)
    if @vi_waiting_operator
      set_current_line('', 0) if @vi_waiting_operator == :vi_change_meta_confirm && arg.nil?
      @vi_waiting_operator = nil
      @vi_waiting_operator_arg = nil
    else
      @drop_terminate_spaces = true
      @vi_waiting_operator = :vi_change_meta_confirm
      @vi_waiting_operator_arg = arg || 1
    end
  end

  private def vi_change_meta_confirm(byte_pointer_diff)
    vi_delete_meta_confirm(byte_pointer_diff)
    @config.editing_mode = :vi_insert
    @drop_terminate_spaces = false
  end

  private def vi_delete_meta(key, arg: nil)
    if @vi_waiting_operator
      set_current_line('', 0) if @vi_waiting_operator == :vi_delete_meta_confirm && arg.nil?
      @vi_waiting_operator = nil
      @vi_waiting_operator_arg = nil
    else
      @vi_waiting_operator = :vi_delete_meta_confirm
      @vi_waiting_operator_arg = arg || 1
    end
  end

  private def vi_delete_meta_confirm(byte_pointer_diff)
    if byte_pointer_diff > 0
      line, cut = byteslice!(current_line, @byte_pointer, byte_pointer_diff)
    elsif byte_pointer_diff < 0
      line, cut = byteslice!(current_line, @byte_pointer + byte_pointer_diff, -byte_pointer_diff)
    else
      return
    end
    copy_for_vi(cut)
    set_current_line(line, @byte_pointer + (byte_pointer_diff < 0 ? byte_pointer_diff : 0))
  end

  private def vi_yank(key, arg: nil)
    if @vi_waiting_operator
      copy_for_vi(current_line) if @vi_waiting_operator == :vi_yank_confirm && arg.nil?
      @vi_waiting_operator = nil
      @vi_waiting_operator_arg = nil
    else
      @vi_waiting_operator = :vi_yank_confirm
      @vi_waiting_operator_arg = arg || 1
    end
  end

  private def vi_yank_confirm(byte_pointer_diff)
    if byte_pointer_diff > 0
      cut = current_line.byteslice(@byte_pointer, byte_pointer_diff)
    elsif byte_pointer_diff < 0
      cut = current_line.byteslice(@byte_pointer + byte_pointer_diff, -byte_pointer_diff)
    else
      return
    end
    copy_for_vi(cut)
  end

  private def vi_list_or_eof(key)
    if buffer_empty?
      @eof = true
      finish
    else
      ed_newline(key)
    end
  end
  alias_method :vi_end_of_transmission, :vi_list_or_eof
  alias_method :vi_eof_maybe, :vi_list_or_eof

  private def ed_delete_next_char(key, arg: 1)
    byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
    unless current_line.empty? || byte_size == 0
      line, mbchar = byteslice!(current_line, @byte_pointer, byte_size)
      copy_for_vi(mbchar)
      if @byte_pointer > 0 && current_line.bytesize == @byte_pointer + byte_size
        byte_size = Reline::Unicode.get_prev_mbchar_size(line, @byte_pointer)
        set_current_line(line, @byte_pointer - byte_size)
      else
        set_current_line(line, @byte_pointer)
      end
    end
    arg -= 1
    ed_delete_next_char(key, arg: arg) if arg > 0
  end

  private def vi_to_history_line(key)
    if Reline::HISTORY.empty?
      return
    end
    move_history(0, line: :start, cursor: :start)
  end

  private def vi_histedit(key)
    path = Tempfile.open { |fp|
      fp.write whole_lines.join("\n")
      fp.path
    }
    system("#{ENV['EDITOR']} #{path}")
    @buffer_of_lines = File.read(path).split("\n")
    @buffer_of_lines = [String.new(encoding: encoding)] if @buffer_of_lines.empty?
    @line_index = 0
    finish
  end

  private def vi_paste_prev(key, arg: 1)
    if @vi_clipboard.size > 0
      cursor_point = @vi_clipboard.grapheme_clusters[0..-2].join
      set_current_line(byteinsert(current_line, @byte_pointer, @vi_clipboard), @byte_pointer + cursor_point.bytesize)
    end
    arg -= 1
    vi_paste_prev(key, arg: arg) if arg > 0
  end

  private def vi_paste_next(key, arg: 1)
    if @vi_clipboard.size > 0
      byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
      line = byteinsert(current_line, @byte_pointer + byte_size, @vi_clipboard)
      set_current_line(line, @byte_pointer + @vi_clipboard.bytesize)
    end
    arg -= 1
    vi_paste_next(key, arg: arg) if arg > 0
  end

  private def ed_argument_digit(key)
    # key is expected to be `ESC digit` or `digit`
    num = key[/\d/].to_i
    @vi_arg = (@vi_arg || 0) * 10 + num
  end

  private def vi_to_column(key, arg: 0)
    # Implementing behavior of vi, not Readline's vi-mode.
    @byte_pointer, = current_line.grapheme_clusters.inject([0, 0]) { |(total_byte_size, total_width), gc|
      mbchar_width = Reline::Unicode.get_mbchar_width(gc)
      break [total_byte_size, total_width] if (total_width + mbchar_width) >= arg
      [total_byte_size + gc.bytesize, total_width + mbchar_width]
    }
  end

  private def vi_replace_char(key, arg: 1)
    @waiting_proc = ->(k) {
      if arg == 1
        byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
        before = current_line.byteslice(0, @byte_pointer)
        remaining_point = @byte_pointer + byte_size
        after = current_line.byteslice(remaining_point, current_line.bytesize - remaining_point)
        set_current_line(before + k + after)
        @waiting_proc = nil
      elsif arg > 1
        byte_size = 0
        arg.times do
          byte_size += Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer + byte_size)
        end
        before = current_line.byteslice(0, @byte_pointer)
        remaining_point = @byte_pointer + byte_size
        after = current_line.byteslice(remaining_point, current_line.bytesize - remaining_point)
        replaced = k * arg
        set_current_line(before + replaced + after, @byte_pointer + replaced.bytesize)
        @waiting_proc = nil
      end
    }
  end

  private def vi_next_char(key, arg: 1, inclusive: false)
    @waiting_proc = ->(key_for_proc) { search_next_char(key_for_proc, arg, inclusive: inclusive) }
  end

  private def vi_to_next_char(key, arg: 1, inclusive: false)
    @waiting_proc = ->(key_for_proc) { search_next_char(key_for_proc, arg, need_prev_char: true, inclusive: inclusive) }
  end

  private def search_next_char(key, arg, need_prev_char: false, inclusive: false)
    prev_total = nil
    total = nil
    found = false
    current_line.byteslice(@byte_pointer..-1).grapheme_clusters.each do |mbchar|
      # total has [byte_size, cursor]
      unless total
        # skip cursor point
        width = Reline::Unicode.get_mbchar_width(mbchar)
        total = [mbchar.bytesize, width]
      else
        if key == mbchar
          arg -= 1
          if arg.zero?
            found = true
            break
          end
        end
        width = Reline::Unicode.get_mbchar_width(mbchar)
        prev_total = total
        total = [total.first + mbchar.bytesize, total.last + width]
      end
    end
    if not need_prev_char and found and total
      byte_size, _ = total
      @byte_pointer += byte_size
    elsif need_prev_char and found and prev_total
      byte_size, _ = prev_total
      @byte_pointer += byte_size
    end
    if inclusive
      byte_size = Reline::Unicode.get_next_mbchar_size(current_line, @byte_pointer)
      if byte_size > 0
        @byte_pointer += byte_size
      end
    end
    @waiting_proc = nil
  end

  private def vi_prev_char(key, arg: 1)
    @waiting_proc = ->(key_for_proc) { search_prev_char(key_for_proc, arg) }
  end

  private def vi_to_prev_char(key, arg: 1)
    @waiting_proc = ->(key_for_proc) { search_prev_char(key_for_proc, arg, true) }
  end

  private def search_prev_char(key, arg, need_next_char = false)
    prev_total = nil
    total = nil
    found = false
    current_line.byteslice(0..@byte_pointer).grapheme_clusters.reverse_each do |mbchar|
      # total has [byte_size, cursor]
      unless total
        # skip cursor point
        width = Reline::Unicode.get_mbchar_width(mbchar)
        total = [mbchar.bytesize, width]
      else
        if key == mbchar
          arg -= 1
          if arg.zero?
            found = true
            break
          end
        end
        width = Reline::Unicode.get_mbchar_width(mbchar)
        prev_total = total
        total = [total.first + mbchar.bytesize, total.last + width]
      end
    end
    if not need_next_char and found and total
      byte_size, _ = total
      @byte_pointer -= byte_size
    elsif need_next_char and found and prev_total
      byte_size, _ = prev_total
      @byte_pointer -= byte_size
    end
    @waiting_proc = nil
  end

  private def vi_join_lines(key, arg: 1)
    if @buffer_of_lines.size > @line_index + 1
      next_line = @buffer_of_lines.delete_at(@line_index + 1).lstrip
      set_current_line(current_line + ' ' + next_line, current_line.bytesize)
    end
    arg -= 1
    vi_join_lines(key, arg: arg) if arg > 0
  end

  private def em_set_mark(key)
    @mark_pointer = [@byte_pointer, @line_index]
  end
  alias_method :set_mark, :em_set_mark

  private def em_exchange_mark(key)
    return unless @mark_pointer
    new_pointer = [@byte_pointer, @line_index]
    @byte_pointer, @line_index = @mark_pointer
    @mark_pointer = new_pointer
  end
  alias_method :exchange_point_and_mark, :em_exchange_mark

  private def emacs_editing_mode(key)
    @config.editing_mode = :emacs
  end

  private def vi_editing_mode(key)
    @config.editing_mode = :vi_insert
  end

  private def move_undo_redo(direction)
    @restoring = true
    return unless (0..@input_lines.size - 1).cover?(@input_lines_position + direction)

    @input_lines_position += direction
    buffer_of_lines, byte_pointer, line_index = @input_lines[@input_lines_position]
    @buffer_of_lines = buffer_of_lines.dup
    @line_index = line_index
    @byte_pointer = byte_pointer
  end

  private def undo(_key)
    move_undo_redo(-1)
  end

  private def redo(_key)
    move_undo_redo(+1)
  end

  private def prev_action_state_value(type)
    @prev_action_state[0] == type ? @prev_action_state[1] : nil
  end

  private def set_next_action_state(type, value)
    @next_action_state = [type, value]
  end

  private def re_read_init_file(_key)
    @config.reload
  end
end
PK*J[�|@�&&share/ruby/reline/version.rbnu�[���module Reline
  VERSION = '0.6.0'
end
PK*J[
M�$$share/ruby/reline/face.rbnu�[���# frozen_string_literal: true

class Reline::Face
  SGR_PARAMETERS = {
    foreground: {
      black: 30,
      red: 31,
      green: 32,
      yellow: 33,
      blue: 34,
      magenta: 35,
      cyan: 36,
      white: 37,
      bright_black: 90,
      gray: 90,
      bright_red: 91,
      bright_green: 92,
      bright_yellow: 93,
      bright_blue: 94,
      bright_magenta: 95,
      bright_cyan: 96,
      bright_white: 97
    },
    background: {
      black: 40,
      red: 41,
      green: 42,
      yellow: 43,
      blue: 44,
      magenta: 45,
      cyan: 46,
      white: 47,
      bright_black: 100,
      gray: 100,
      bright_red: 101,
      bright_green: 102,
      bright_yellow: 103,
      bright_blue: 104,
      bright_magenta: 105,
      bright_cyan: 106,
      bright_white: 107,
    },
    style: {
      reset: 0,
      bold: 1,
      faint: 2,
      italicized: 3,
      underlined: 4,
      slowly_blinking: 5,
      blinking: 5,
      rapidly_blinking: 6,
      negative: 7,
      concealed: 8,
      crossed_out: 9
    }
  }.freeze

  class Config
    ESSENTIAL_DEFINE_NAMES = %i(default enhanced scrollbar).freeze
    RESET_SGR = "\e[0m".freeze

    def initialize(name, &block)
      @definition = {}
      block.call(self)
      ESSENTIAL_DEFINE_NAMES.each do |name|
        @definition[name] ||= { style: :reset, escape_sequence: RESET_SGR }
      end
    end

    attr_reader :definition

    def define(name, **values)
      values[:escape_sequence] = format_to_sgr(values.to_a).freeze
      @definition[name] = values
    end

    def reconfigure
      @definition.each_value do |values|
        values.delete(:escape_sequence)
        values[:escape_sequence] = format_to_sgr(values.to_a).freeze
      end
    end

    def [](name)
      @definition.dig(name, :escape_sequence) or raise ArgumentError, "unknown face: #{name}"
    end

    private

    def sgr_rgb(key, value)
      return nil unless rgb_expression?(value)
      if Reline::Face.truecolor?
        sgr_rgb_truecolor(key, value)
      else
        sgr_rgb_256color(key, value)
      end
    end

    def sgr_rgb_truecolor(key, value)
      case key
      when :foreground
        "38;2;"
      when :background
        "48;2;"
      end + value[1, 6].scan(/../).map(&:hex).join(";")
    end

    def sgr_rgb_256color(key, value)
      # 256 colors are
      # 0..15: standard colors, high intensity colors
      # 16..232: 216 colors (R, G, B each 6 steps)
      # 233..255: grayscale colors (24 steps)
      # This methods converts rgb_expression to 216 colors
      rgb = value[1, 6].scan(/../).map(&:hex)
      # Color steps are [0, 95, 135, 175, 215, 255]
      r, g, b = rgb.map { |v| v <= 95 ? v / 48 : (v - 35) / 40 }
      color = (16 + 36 * r + 6 * g + b)
      case key
      when :foreground
        "38;5;#{color}"
      when :background
        "48;5;#{color}"
      end
    end

    def format_to_sgr(ordered_values)
      sgr = "\e[" + ordered_values.map do |key_value|
        key, value = key_value
        case key
        when :foreground, :background
          case value
          when Symbol
            SGR_PARAMETERS[key][value]
          when String
            sgr_rgb(key, value)
          end
        when :style
          [ value ].flatten.map do |style_name|
            SGR_PARAMETERS[:style][style_name]
          end.then do |sgr_parameters|
            sgr_parameters.include?(nil) ? nil : sgr_parameters
          end
        end.then do |rendition_expression|
          unless rendition_expression
            raise ArgumentError, "invalid SGR parameter: #{value.inspect}"
          end
          rendition_expression
        end
      end.join(';') + "m"
      sgr == RESET_SGR ? RESET_SGR : RESET_SGR + sgr
    end

    def rgb_expression?(color)
      color.respond_to?(:match?) and color.match?(/\A#[0-9a-fA-F]{6}\z/)
    end
  end

  private_constant :SGR_PARAMETERS, :Config

  def self.truecolor?
    @force_truecolor || %w[truecolor 24bit].include?(ENV['COLORTERM'])
  end

  def self.force_truecolor
    @force_truecolor = true
    @configs&.each_value(&:reconfigure)
  end

  def self.[](name)
    @configs[name]
  end

  def self.config(name, &block)
    @configs ||= {}
    @configs[name] = Config.new(name, &block)
  end

  def self.configs
    @configs.transform_values(&:definition)
  end

  def self.load_initial_configs
    config(:default) do |conf|
      conf.define :default, style: :reset
      conf.define :enhanced, style: :reset
      conf.define :scrollbar, style: :reset
    end
    config(:completion_dialog) do |conf|
      conf.define :default, foreground: :bright_white, background: :gray
      conf.define :enhanced, foreground: :black, background: :white
      conf.define :scrollbar, foreground: :white, background: :gray
    end
  end

  def self.reset_to_initial_configs
    @configs = {}
    load_initial_configs
  end
end
PK*J[��'g}	}	share/ruby/reline/kill_ring.rbnu�[���class Reline::KillRing
  include Enumerable

  module State
    FRESH = :fresh
    CONTINUED = :continued
    PROCESSED = :processed
    YANK = :yank
  end

  RingPoint = Struct.new(:backward, :forward, :str) do
    def initialize(str)
      super(nil, nil, str)
    end

    def ==(other)
      equal?(other)
    end
  end

  class RingBuffer
    attr_reader :size
    attr_reader :head

    def initialize(max = 1024)
      @max = max
      @size = 0
      @head = nil # reading head of ring-shaped tape
    end

    def <<(point)
      if @size.zero?
        @head = point
        @head.backward = @head
        @head.forward = @head
        @size = 1
      elsif @size >= @max
        tail = @head.forward
        new_tail = tail.forward
        @head.forward = point
        point.backward = @head
        new_tail.backward = point
        point.forward = new_tail
        @head = point
      else
        tail = @head.forward
        @head.forward = point
        point.backward = @head
        tail.backward = point
        point.forward = tail
        @head = point
        @size += 1
      end
    end

    def empty?
      @size.zero?
    end
  end

  def initialize(max = 1024)
    @ring = RingBuffer.new(max)
    @ring_pointer = nil
    @buffer = nil
    @state = State::FRESH
  end

  def append(string, before_p = false)
    case @state
    when State::FRESH, State::YANK
      @ring << RingPoint.new(+string)
      @state = State::CONTINUED
    when State::CONTINUED, State::PROCESSED
      if before_p
        @ring.head.str.prepend(string)
      else
        @ring.head.str.concat(string)
      end
      @state = State::CONTINUED
    end
  end

  def process
    case @state
    when State::FRESH
      # nothing to do
    when State::CONTINUED
      @state = State::PROCESSED
    when State::PROCESSED
      @state = State::FRESH
    when State::YANK
      # nothing to do
    end
  end

  def yank
    unless @ring.empty?
      @state = State::YANK
      @ring_pointer = @ring.head
      @ring_pointer.str
    else
      nil
    end
  end

  def yank_pop
    if @state == State::YANK
      prev_yank = @ring_pointer.str
      @ring_pointer = @ring_pointer.backward
      [@ring_pointer.str, prev_yank]
    else
      nil
    end
  end

  def each
    start = head = @ring.head
    loop do
      break if head.nil?
      yield head.str
      head = head.backward
      break if head == start
    end
  end
end
PK*J[��!���share/ruby/reline/history.rbnu�[���class Reline::History < Array
  def initialize(config)
    @config = config
  end

  def to_s
    'HISTORY'
  end

  def delete_at(index)
    index = check_index(index)
    super(index)
  end

  def [](index)
    index = check_index(index) unless index.is_a?(Range)
    super(index)
  end

  def []=(index, val)
    index = check_index(index)
    super(index, Reline::Unicode.safe_encode(val, Reline.encoding_system_needs))
  end

  def concat(*val)
    val.each do |v|
      push(*v)
    end
  end

  def push(*val)
    # If history_size is zero, all histories are dropped.
    return self if @config.history_size.zero?
    # If history_size is negative, history size is unlimited.
    if @config.history_size.positive?
      diff = size + val.size - @config.history_size
      if diff > 0
        if diff <= size
          shift(diff)
        else
          diff -= size
          clear
          val.shift(diff)
        end
      end
    end
    super(*(val.map{ |v|
      Reline::Unicode.safe_encode(v, Reline.encoding_system_needs)
    }))
  end

  def <<(val)
    # If history_size is zero, all histories are dropped.
    return self if @config.history_size.zero?
    # If history_size is negative, history size is unlimited.
    if @config.history_size.positive?
      shift if size + 1 > @config.history_size
    end
    super(Reline::Unicode.safe_encode(val, Reline.encoding_system_needs))
  end

  private def check_index(index)
    index += size if index < 0
    if index < -2147483648 or 2147483647 < index
      raise RangeError.new("integer #{index} too big to convert to 'int'")
    end
    # If history_size is negative, history size is unlimited.
    if @config.history_size.positive?
      if index < -@config.history_size or @config.history_size < index
        raise RangeError.new("index=<#{index}>")
      end
    end
    raise IndexError.new("index=<#{index}>") if index < 0 or size <= index
    index
  end
end
PK*J[B� �iishare/ruby/reline/io.rbnu�[���
module Reline
  class IO
    RESET_COLOR = "\e[0m"

    def self.decide_io_gate
      if ENV['TERM'] == 'dumb'
        Reline::Dumb.new
      else
        require 'reline/io/ansi'

        case RbConfig::CONFIG['host_os']
        when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
          require 'reline/io/windows'
          io = Reline::Windows.new
          if io.msys_tty?
            Reline::ANSI.new
          else
            io
          end
        else
          Reline::ANSI.new
        end
      end
    end

    def dumb?
      false
    end

    def win?
      false
    end

    def reset_color_sequence
      self.class::RESET_COLOR
    end

    # Read a single encoding valid character from the input.
    def read_single_char(keyseq_timeout)
      buffer = String.new(encoding: Encoding::ASCII_8BIT)
      loop do
        timeout = buffer.empty? ? Float::INFINITY : keyseq_timeout
        c = getc(timeout)
        return unless c

        buffer << c
        encoded = buffer.dup.force_encoding(encoding)
        return encoded if encoded.valid_encoding?
      end
    end
  end
end

require 'reline/io/dumb'
PK*J[n�
��share/ruby/reline/key_stroke.rbnu�[���class Reline::KeyStroke
  ESC_BYTE = 27
  CSI_PARAMETER_BYTES_RANGE = 0x30..0x3f
  CSI_INTERMEDIATE_BYTES_RANGE = (0x20..0x2f)

  attr_accessor :encoding

  def initialize(config, encoding)
    @config = config
    @encoding = encoding
  end

  # Input exactly matches to a key sequence
  MATCHING = :matching
  # Input partially matches to a key sequence
  MATCHED = :matched
  # Input matches to a key sequence and the key sequence is a prefix of another key sequence
  MATCHING_MATCHED = :matching_matched
  # Input does not match to any key sequence
  UNMATCHED = :unmatched

  def match_status(input)
    matching = key_mapping.matching?(input)
    matched = key_mapping.get(input)
    if matching && matched
      MATCHING_MATCHED
    elsif matching
      MATCHING
    elsif matched
      MATCHED
    elsif input[0] == ESC_BYTE
      match_unknown_escape_sequence(input, vi_mode: @config.editing_mode_is?(:vi_insert, :vi_command))
    else
      s = input.pack('c*').force_encoding(@encoding)
      if s.valid_encoding?
        s.size == 1 ? MATCHED : UNMATCHED
      else
        # Invalid string is MATCHING (part of valid string) or MATCHED (invalid bytes to be ignored)
        MATCHING_MATCHED
      end
    end
  end

  def expand(input)
    matched_bytes = nil
    (1..input.size).each do |i|
      bytes = input.take(i)
      status = match_status(bytes)
      matched_bytes = bytes if status == MATCHED || status == MATCHING_MATCHED
      break if status == MATCHED || status == UNMATCHED
    end
    return [[], []] unless matched_bytes

    func = key_mapping.get(matched_bytes)
    s = matched_bytes.pack('c*').force_encoding(@encoding)
    if func.is_a?(Array)
      # Perform simple macro expansion for single byte key bindings.
      # Multibyte key bindings and recursive macro expansion are not supported yet.
      marco = func.pack('c*').force_encoding(@encoding)
      keys = marco.chars.map do |c|
        f = key_mapping.get(c.bytes)
        Reline::Key.new(c, f.is_a?(Symbol) ? f : :ed_insert, false)
      end
    elsif func
      keys = [Reline::Key.new(s, func, false)]
    else
      if s.valid_encoding? && s.size == 1
        keys = [Reline::Key.new(s, :ed_insert, false)]
      else
        keys = []
      end
    end

    [keys, input.drop(matched_bytes.size)]
  end

  private

  # returns match status of CSI/SS3 sequence and matched length
  def match_unknown_escape_sequence(input, vi_mode: false)
    idx = 0
    return UNMATCHED unless input[idx] == ESC_BYTE
    idx += 1
    idx += 1 if input[idx] == ESC_BYTE

    case input[idx]
    when nil
      if idx == 1 # `ESC`
        return MATCHING_MATCHED
      else # `ESC ESC`
        return MATCHING
      end
    when 91 # == '['.ord
      # CSI sequence `ESC [ ... char`
      idx += 1
      idx += 1 while idx < input.size && CSI_PARAMETER_BYTES_RANGE.cover?(input[idx])
      idx += 1 while idx < input.size && CSI_INTERMEDIATE_BYTES_RANGE.cover?(input[idx])
    when 79 # == 'O'.ord
      # SS3 sequence `ESC O char`
      idx += 1
    else
      # `ESC char` or `ESC ESC char`
      return UNMATCHED if vi_mode
    end

    case input.size
    when idx
      MATCHING
    when idx + 1
      MATCHED
    else
      UNMATCHED
    end
  end

  def key_mapping
    @config.key_bindings
  end
end
PK*J[��=���share/ruby/reline/key_actor.rbnu�[���module Reline::KeyActor
end

require 'reline/key_actor/base'
require 'reline/key_actor/composite'
require 'reline/key_actor/emacs'
require 'reline/key_actor/vi_command'
require 'reline/key_actor/vi_insert'
PK*J[����!�!share/ruby/reline/io/ansi.rbnu�[���require 'io/console'
require 'io/wait'

class Reline::ANSI < Reline::IO
  CAPNAME_KEY_BINDINGS = {
    'khome' => :ed_move_to_beg,
    'kend'  => :ed_move_to_end,
    'kdch1' => :key_delete,
    'kpp' => :ed_search_prev_history,
    'knp' => :ed_search_next_history,
    'kcuu1' => :ed_prev_history,
    'kcud1' => :ed_next_history,
    'kcuf1' => :ed_next_char,
    'kcub1' => :ed_prev_char,
  }

  ANSI_CURSOR_KEY_BINDINGS = {
    # Up
    'A' => [:ed_prev_history, {}],
    # Down
    'B' => [:ed_next_history, {}],
    # Right
    'C' => [:ed_next_char, { ctrl: :em_next_word, meta: :em_next_word }],
    # Left
    'D' => [:ed_prev_char, { ctrl: :ed_prev_word, meta: :ed_prev_word }],
    # End
    'F' => [:ed_move_to_end, {}],
    # Home
    'H' => [:ed_move_to_beg, {}],
  }

  attr_writer :input, :output

  def initialize
    @input = STDIN
    @output = STDOUT
    @buf = []
    @output_buffer = nil
    @old_winch_handler = nil
  end

  def encoding
    @input.external_encoding || Encoding.default_external
  rescue IOError
    # STDIN.external_encoding raises IOError in Ruby <= 3.0 when STDIN is closed
    Encoding.default_external
  end

  def set_default_key_bindings(config)
    set_bracketed_paste_key_bindings(config)
    set_default_key_bindings_ansi_cursor(config)
    set_default_key_bindings_comprehensive_list(config)
    {
      [27, 91, 90] => :completion_journey_up, # S-Tab
    }.each_pair do |key, func|
      config.add_default_key_binding_by_keymap(:emacs, key, func)
      config.add_default_key_binding_by_keymap(:vi_insert, key, func)
    end
    {
      # default bindings
      [27, 32] => :em_set_mark,             # M-<space>
      [24, 24] => :em_exchange_mark,        # C-x C-x
    }.each_pair do |key, func|
      config.add_default_key_binding_by_keymap(:emacs, key, func)
    end
  end

  def set_bracketed_paste_key_bindings(config)
    [:emacs, :vi_insert, :vi_command].each do |keymap|
      config.add_default_key_binding_by_keymap(keymap, START_BRACKETED_PASTE.bytes, :bracketed_paste_start)
    end
  end

  def set_default_key_bindings_ansi_cursor(config)
    ANSI_CURSOR_KEY_BINDINGS.each do |char, (default_func, modifiers)|
      bindings = [
        ["\e[#{char}", default_func], # CSI + char
        ["\eO#{char}", default_func] # SS3 + char, application cursor key mode
      ]
      if modifiers[:ctrl]
        # CSI + ctrl_key_modifier + char
        bindings << ["\e[1;5#{char}", modifiers[:ctrl]]
      end
      if modifiers[:meta]
        # CSI + meta_key_modifier + char
        bindings << ["\e[1;3#{char}", modifiers[:meta]]
        # Meta(ESC) + CSI + char
        bindings << ["\e\e[#{char}", modifiers[:meta]]
      end
      bindings.each do |sequence, func|
        key = sequence.bytes
        config.add_default_key_binding_by_keymap(:emacs, key, func)
        config.add_default_key_binding_by_keymap(:vi_insert, key, func)
        config.add_default_key_binding_by_keymap(:vi_command, key, func)
      end
    end
  end

  def set_default_key_bindings_comprehensive_list(config)
    {
      # xterm
      [27, 91, 51, 126] => :key_delete, # kdch1
      [27, 91, 53, 126] => :ed_search_prev_history, # kpp
      [27, 91, 54, 126] => :ed_search_next_history, # knp

      # Console (80x25)
      [27, 91, 49, 126] => :ed_move_to_beg, # Home
      [27, 91, 52, 126] => :ed_move_to_end, # End

      # urxvt / exoterm
      [27, 91, 55, 126] => :ed_move_to_beg, # Home
      [27, 91, 56, 126] => :ed_move_to_end, # End
    }.each_pair do |key, func|
      config.add_default_key_binding_by_keymap(:emacs, key, func)
      config.add_default_key_binding_by_keymap(:vi_insert, key, func)
      config.add_default_key_binding_by_keymap(:vi_command, key, func)
    end
  end

  def with_raw_input
    if @input.tty?
      @input.raw(intr: true) { yield }
    else
      yield
    end
  end

  def inner_getc(timeout_second)
    unless @buf.empty?
      return @buf.shift
    end
    until @input.wait_readable(0.01)
      timeout_second -= 0.01
      return nil if timeout_second <= 0

      Reline.core.line_editor.handle_signal
    end
    c = @input.getbyte
    (c == 0x16 && @input.tty? && @input.raw(min: 0, time: 0, &:getbyte)) || c
  rescue Errno::EIO
    # Maybe the I/O has been closed.
    nil
  end

  START_BRACKETED_PASTE = String.new("\e[200~", encoding: Encoding::ASCII_8BIT)
  END_BRACKETED_PASTE = String.new("\e[201~", encoding: Encoding::ASCII_8BIT)
  def read_bracketed_paste
    buffer = String.new(encoding: Encoding::ASCII_8BIT)
    until buffer.end_with?(END_BRACKETED_PASTE)
      c = inner_getc(Float::INFINITY)
      break unless c
      buffer << c
    end
    string = buffer.delete_suffix(END_BRACKETED_PASTE).force_encoding(encoding)
    string.valid_encoding? ? string : ''
  end

  # if the usage expects to wait indefinitely, use Float::INFINITY for timeout_second
  def getc(timeout_second)
    inner_getc(timeout_second)
  end

  def in_pasting?
    not empty_buffer?
  end

  def empty_buffer?
    unless @buf.empty?
      return false
    end
    !@input.wait_readable(0)
  end

  def ungetc(c)
    @buf.unshift(c)
  end

  def retrieve_keybuffer
    begin
      return unless @input.wait_readable(0.001)
      str = @input.read_nonblock(1024)
      str.bytes.each do |c|
        @buf.push(c)
      end
    rescue EOFError
    end
  end

  def get_screen_size
    s = @input.winsize
    return s if s[0] > 0 && s[1] > 0
    s = [ENV["LINES"].to_i, ENV["COLUMNS"].to_i]
    return s if s[0] > 0 && s[1] > 0
    [24, 80]
  rescue Errno::ENOTTY, Errno::ENODEV
    [24, 80]
  end

  def set_screen_size(rows, columns)
    @input.winsize = [rows, columns]
    self
  rescue Errno::ENOTTY, Errno::ENODEV
    self
  end

  private def cursor_pos_internal(timeout:)
    match = nil
    @input.raw do |stdin|
      @output << "\e[6n"
      @output.flush
      timeout_at = Time.now + timeout
      buf = +''
      while (wait = timeout_at - Time.now) > 0 && stdin.wait_readable(wait)
        buf << stdin.readpartial(1024)
        if (match = buf.match(/\e\[(?<row>\d+);(?<column>\d+)R/))
          buf = match.pre_match + match.post_match
          break
        end
      end
      buf.chars.reverse_each do |ch|
        stdin.ungetc ch
      end
    end
    [match[:column].to_i - 1, match[:row].to_i - 1] if match
  end

  def cursor_pos
    col, row = cursor_pos_internal(timeout: 0.5) if both_tty?
    Reline::CursorPos.new(col || 0, row || 0)
  end

  def both_tty?
    @input.tty? && @output.tty?
  end

  def write(string)
    if @output_buffer
      @output_buffer << string
    else
      @output.write(string)
    end
  end

  def buffered_output
    @output_buffer = +''
    yield
    @output.write(@output_buffer)
  ensure
    @output_buffer = nil
  end

  def move_cursor_column(x)
    write "\e[#{x + 1}G"
  end

  def move_cursor_up(x)
    if x > 0
      write "\e[#{x}A"
    elsif x < 0
      move_cursor_down(-x)
    end
  end

  def move_cursor_down(x)
    if x > 0
      write "\e[#{x}B"
    elsif x < 0
      move_cursor_up(-x)
    end
  end

  def hide_cursor
    write "\e[?25l"
  end

  def show_cursor
    write "\e[?25h"
  end

  def erase_after_cursor
    write "\e[K"
  end

  # This only works when the cursor is at the bottom of the scroll range
  # For more details, see https://github.com/ruby/reline/pull/577#issuecomment-1646679623
  def scroll_down(x)
    return if x.zero?
    # We use `\n` instead of CSI + S because CSI + S would cause https://github.com/ruby/reline/issues/576
    write "\n" * x
  end

  def clear_screen
    write "\e[2J"
    write "\e[1;1H"
  end

  def set_winch_handler(&handler)
    @old_winch_handler = Signal.trap('WINCH') do |arg|
      handler.call
      @old_winch_handler.call(arg) if @old_winch_handler.respond_to?(:call)
    end
    @old_cont_handler = Signal.trap('CONT') do |arg|
      @input.raw!(intr: true) if @input.tty?
      # Rerender the screen. Note that screen size might be changed while suspended.
      handler.call
      @old_cont_handler.call(arg) if @old_cont_handler.respond_to?(:call)
    end
  rescue ArgumentError
    # Signal.trap may raise an ArgumentError if the platform doesn't support the signal.
  end

  def prep
    # Enable bracketed paste
    write "\e[?2004h" if Reline.core.config.enable_bracketed_paste && both_tty?
    retrieve_keybuffer
    nil
  end

  def deprep(otio)
    # Disable bracketed paste
    write "\e[?2004l" if Reline.core.config.enable_bracketed_paste && both_tty?
    Signal.trap('WINCH', @old_winch_handler) if @old_winch_handler
    Signal.trap('CONT', @old_cont_handler) if @old_cont_handler
  end
end
PK*J[L�r��share/ruby/reline/io/dumb.rbnu�[���require 'io/wait'

class Reline::Dumb < Reline::IO
  RESET_COLOR = '' # Do not send color reset sequence

  attr_writer :output

  def initialize(encoding: nil)
    @input = STDIN
    @output = STDOUT
    @buf = []
    @pasting = false
    @encoding = encoding
    @screen_size = [24, 80]
  end

  def dumb?
    true
  end

  def encoding
    if @encoding
      @encoding
    elsif RUBY_PLATFORM =~ /mswin|mingw/
      Encoding::UTF_8
    else
      @input.external_encoding || Encoding.default_external
    end
  rescue IOError
    # STDIN.external_encoding raises IOError in Ruby <= 3.0 when STDIN is closed
    Encoding.default_external
  end

  def set_default_key_bindings(_)
  end

  def input=(val)
    @input = val
  end

  def with_raw_input
    yield
  end

  def write(string)
    @output.write(string)
  end

  def buffered_output
    yield
  end

  def getc(_timeout_second)
    unless @buf.empty?
      return @buf.shift
    end
    c = nil
    loop do
      Reline.core.line_editor.handle_signal
      result = @input.wait_readable(0.1)
      next if result.nil?
      c = @input.read(1)
      break
    end
    c&.ord
  end

  def ungetc(c)
    @buf.unshift(c)
  end

  def get_screen_size
    @screen_size
  end

  def cursor_pos
    Reline::CursorPos.new(0, 0)
  end

  def hide_cursor
  end

  def show_cursor
  end

  def move_cursor_column(val)
  end

  def move_cursor_up(val)
  end

  def move_cursor_down(val)
  end

  def erase_after_cursor
  end

  def scroll_down(val)
  end

  def clear_screen
  end

  def set_screen_size(rows, columns)
    @screen_size = [rows, columns]
  end

  def set_winch_handler(&handler)
  end

  def in_pasting?
    @pasting
  end

  def prep
  end

  def deprep(otio)
  end
end
PK*J[1�n�B�Bshare/ruby/reline/io/windows.rbnu�[���require 'fiddle/import'

class Reline::Windows < Reline::IO

  attr_writer :output

  def initialize
    @input_buf = []
    @output_buf = []

    @output = STDOUT
    @hsg = nil
    @getwch = Win32API.new('msvcrt', '_getwch', [], 'I')
    @kbhit = Win32API.new('msvcrt', '_kbhit', [], 'I')
    @GetKeyState = Win32API.new('user32', 'GetKeyState', ['L'], 'L')
    @GetConsoleScreenBufferInfo = Win32API.new('kernel32', 'GetConsoleScreenBufferInfo', ['L', 'P'], 'L')
    @SetConsoleCursorPosition = Win32API.new('kernel32', 'SetConsoleCursorPosition', ['L', 'L'], 'L')
    @GetStdHandle = Win32API.new('kernel32', 'GetStdHandle', ['L'], 'L')
    @FillConsoleOutputCharacter = Win32API.new('kernel32', 'FillConsoleOutputCharacter', ['L', 'L', 'L', 'L', 'P'], 'L')
    @ScrollConsoleScreenBuffer = Win32API.new('kernel32', 'ScrollConsoleScreenBuffer', ['L', 'P', 'P', 'L', 'P'], 'L')
    @hConsoleHandle = @GetStdHandle.call(STD_OUTPUT_HANDLE)
    @hConsoleInputHandle = @GetStdHandle.call(STD_INPUT_HANDLE)
    @GetNumberOfConsoleInputEvents = Win32API.new('kernel32', 'GetNumberOfConsoleInputEvents', ['L', 'P'], 'L')
    @ReadConsoleInputW = Win32API.new('kernel32', 'ReadConsoleInputW', ['L', 'P', 'L', 'P'], 'L')
    @GetFileType = Win32API.new('kernel32', 'GetFileType', ['L'], 'L')
    @GetFileInformationByHandleEx = Win32API.new('kernel32', 'GetFileInformationByHandleEx', ['L', 'I', 'P', 'L'], 'I')
    @FillConsoleOutputAttribute = Win32API.new('kernel32', 'FillConsoleOutputAttribute', ['L', 'L', 'L', 'L', 'P'], 'L')
    @SetConsoleCursorInfo = Win32API.new('kernel32', 'SetConsoleCursorInfo', ['L', 'P'], 'L')

    @GetConsoleMode = Win32API.new('kernel32', 'GetConsoleMode', ['L', 'P'], 'L')
    @SetConsoleMode = Win32API.new('kernel32', 'SetConsoleMode', ['L', 'L'], 'L')
    @WaitForSingleObject = Win32API.new('kernel32', 'WaitForSingleObject', ['L', 'L'], 'L')

    @legacy_console = getconsolemode & ENABLE_VIRTUAL_TERMINAL_PROCESSING == 0
  end

  def encoding
    Encoding::UTF_8
  end

  def win?
    true
  end

  def win_legacy_console?
    @legacy_console
  end

  def set_default_key_bindings(config)
    {
      [224, 72] => :ed_prev_history, # ↑
      [224, 80] => :ed_next_history, # ↓
      [224, 77] => :ed_next_char,    # →
      [224, 75] => :ed_prev_char,    # ←
      [224, 83] => :key_delete,      # Del
      [224, 71] => :ed_move_to_beg,  # Home
      [224, 79] => :ed_move_to_end,  # End
      [  0, 72] => :ed_prev_history, # ↑
      [  0, 80] => :ed_next_history, # ↓
      [  0, 77] => :ed_next_char,    # →
      [  0, 75] => :ed_prev_char,    # ←
      [  0, 83] => :key_delete,      # Del
      [  0, 71] => :ed_move_to_beg,  # Home
      [  0, 79] => :ed_move_to_end   # End
    }.each_pair do |key, func|
      config.add_default_key_binding_by_keymap(:emacs, key, func)
      config.add_default_key_binding_by_keymap(:vi_insert, key, func)
      config.add_default_key_binding_by_keymap(:vi_command, key, func)
    end

    {
      [27, 32] => :em_set_mark,             # M-<space>
      [24, 24] => :em_exchange_mark,        # C-x C-x
    }.each_pair do |key, func|
      config.add_default_key_binding_by_keymap(:emacs, key, func)
    end

    # Emulate ANSI key sequence.
    {
      [27, 91, 90] => :completion_journey_up, # S-Tab
    }.each_pair do |key, func|
      config.add_default_key_binding_by_keymap(:emacs, key, func)
      config.add_default_key_binding_by_keymap(:vi_insert, key, func)
    end
  end

  if defined? JRUBY_VERSION
    require 'win32api'
  else
    class Win32API
      DLL = {}
      TYPEMAP = {"0" => Fiddle::TYPE_VOID, "S" => Fiddle::TYPE_VOIDP, "I" => Fiddle::TYPE_LONG}
      POINTER_TYPE = Fiddle::SIZEOF_VOIDP == Fiddle::SIZEOF_LONG_LONG ? 'q*' : 'l!*'

      WIN32_TYPES = "VPpNnLlIi"
      DL_TYPES = "0SSI"

      def initialize(dllname, func, import, export = "0", calltype = :stdcall)
        @proto = [import].join.tr(WIN32_TYPES, DL_TYPES).sub(/^(.)0*$/, '\1')
        import = @proto.chars.map {|win_type| TYPEMAP[win_type.tr(WIN32_TYPES, DL_TYPES)]}
        export = TYPEMAP[export.tr(WIN32_TYPES, DL_TYPES)]
        calltype = Fiddle::Importer.const_get(:CALL_TYPE_TO_ABI)[calltype]

        handle = DLL[dllname] ||=
                 begin
                   Fiddle.dlopen(dllname)
                 rescue Fiddle::DLError
                   raise unless File.extname(dllname).empty?
                   Fiddle.dlopen(dllname + ".dll")
                 end

        @func = Fiddle::Function.new(handle[func], import, export, calltype)
      rescue Fiddle::DLError => e
        raise LoadError, e.message, e.backtrace
      end

      def call(*args)
        import = @proto.split("")
        args.each_with_index do |x, i|
          args[i], = [x == 0 ? nil : +x].pack("p").unpack(POINTER_TYPE) if import[i] == "S"
          args[i], = [x].pack("I").unpack("i") if import[i] == "I"
        end
        ret, = @func.call(*args)
        return ret || 0
      end
    end
  end

  VK_RETURN = 0x0D
  VK_MENU = 0x12 # ALT key
  VK_LMENU = 0xA4
  VK_CONTROL = 0x11
  VK_SHIFT = 0x10
  VK_DIVIDE = 0x6F

  KEY_EVENT = 0x01
  WINDOW_BUFFER_SIZE_EVENT = 0x04

  CAPSLOCK_ON = 0x0080
  ENHANCED_KEY = 0x0100
  LEFT_ALT_PRESSED = 0x0002
  LEFT_CTRL_PRESSED = 0x0008
  NUMLOCK_ON = 0x0020
  RIGHT_ALT_PRESSED = 0x0001
  RIGHT_CTRL_PRESSED = 0x0004
  SCROLLLOCK_ON = 0x0040
  SHIFT_PRESSED = 0x0010

  VK_TAB = 0x09
  VK_END = 0x23
  VK_HOME = 0x24
  VK_LEFT = 0x25
  VK_UP = 0x26
  VK_RIGHT = 0x27
  VK_DOWN = 0x28
  VK_DELETE = 0x2E

  STD_INPUT_HANDLE = -10
  STD_OUTPUT_HANDLE = -11
  FILE_TYPE_PIPE = 0x0003
  FILE_NAME_INFO = 2
  ENABLE_WRAP_AT_EOL_OUTPUT = 2
  ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4

  # Calling Win32API with console handle is reported to fail after executing some external command.
  # We need to refresh console handle and retry the call again.
  private def call_with_console_handle(win32func, *args)
    val = win32func.call(@hConsoleHandle, *args)
    return val if val != 0

    @hConsoleHandle = @GetStdHandle.call(STD_OUTPUT_HANDLE)
    win32func.call(@hConsoleHandle, *args)
  end

  private def getconsolemode
    mode = +"\0\0\0\0"
    call_with_console_handle(@GetConsoleMode, mode)
    mode.unpack1('L')
  end

  private def setconsolemode(mode)
    call_with_console_handle(@SetConsoleMode, mode)
  end

  #if @legacy_console
  #  setconsolemode(getconsolemode() | ENABLE_VIRTUAL_TERMINAL_PROCESSING)
  #  @legacy_console = (getconsolemode() & ENABLE_VIRTUAL_TERMINAL_PROCESSING == 0)
  #end

  def msys_tty?(io = @hConsoleInputHandle)
    # check if fd is a pipe
    if @GetFileType.call(io) != FILE_TYPE_PIPE
      return false
    end

    bufsize = 1024
    p_buffer = "\0" * bufsize
    res = @GetFileInformationByHandleEx.call(io, FILE_NAME_INFO, p_buffer, bufsize - 2)
    return false if res == 0

    # get pipe name: p_buffer layout is:
    #   struct _FILE_NAME_INFO {
    #     DWORD FileNameLength;
    #     WCHAR FileName[1];
    #   } FILE_NAME_INFO
    len = p_buffer[0, 4].unpack1("L")
    name = p_buffer[4, len].encode(Encoding::UTF_8, Encoding::UTF_16LE, invalid: :replace)

    # Check if this could be a MSYS2 pty pipe ('\msys-XXXX-ptyN-XX')
    # or a cygwin pty pipe ('\cygwin-XXXX-ptyN-XX')
    name =~ /(msys-|cygwin-).*-pty/ ? true : false
  end

  KEY_MAP = [
    # It's treated as Meta+Enter on Windows.
    [ { control_keys: :CTRL,  virtual_key_code: 0x0D }, "\e\r".bytes ],
    [ { control_keys: :SHIFT, virtual_key_code: 0x0D }, "\e\r".bytes ],

    # It's treated as Meta+Space on Windows.
    [ { control_keys: :CTRL,  char_code: 0x20 }, "\e ".bytes ],

    # Emulate getwch() key sequences.
    [ { control_keys: [], virtual_key_code: VK_UP },     [0, 72] ],
    [ { control_keys: [], virtual_key_code: VK_DOWN },   [0, 80] ],
    [ { control_keys: [], virtual_key_code: VK_RIGHT },  [0, 77] ],
    [ { control_keys: [], virtual_key_code: VK_LEFT },   [0, 75] ],
    [ { control_keys: [], virtual_key_code: VK_DELETE }, [0, 83] ],
    [ { control_keys: [], virtual_key_code: VK_HOME },   [0, 71] ],
    [ { control_keys: [], virtual_key_code: VK_END },    [0, 79] ],

    # Emulate ANSI key sequence.
    [ { control_keys: :SHIFT, virtual_key_code: VK_TAB }, [27, 91, 90] ],
  ]

  def process_key_event(repeat_count, virtual_key_code, virtual_scan_code, char_code, control_key_state)

    # high-surrogate
    if 0xD800 <= char_code and char_code <= 0xDBFF
      @hsg = char_code
      return
    end
    # low-surrogate
    if 0xDC00 <= char_code and char_code <= 0xDFFF
      if @hsg
        char_code = 0x10000 + (@hsg - 0xD800) * 0x400 + char_code - 0xDC00
        @hsg = nil
      else
        # no high-surrogate. ignored.
        return
      end
    else
      # ignore high-surrogate without low-surrogate if there
      @hsg = nil
    end

    key = KeyEventRecord.new(virtual_key_code, char_code, control_key_state)

    match = KEY_MAP.find { |args,| key.match?(**args) }
    unless match.nil?
      @output_buf.concat(match.last)
      return
    end

    # no char, only control keys
    return if key.char_code == 0 and key.control_keys.any?

    @output_buf.push("\e".ord) if key.control_keys.include?(:ALT) and !key.control_keys.include?(:CTRL)

    @output_buf.concat(key.char.bytes)
  end

  def check_input_event
    num_of_events = 0.chr * 8
    while @output_buf.empty?
      Reline.core.line_editor.handle_signal
      if @WaitForSingleObject.(@hConsoleInputHandle, 100) != 0 # max 0.1 sec
        # prevent for background consolemode change
        @legacy_console = getconsolemode & ENABLE_VIRTUAL_TERMINAL_PROCESSING == 0
        next
      end
      next if @GetNumberOfConsoleInputEvents.(@hConsoleInputHandle, num_of_events) == 0 or num_of_events.unpack1('L') == 0
      input_records = 0.chr * 20 * 80
      read_event = 0.chr * 4
      if @ReadConsoleInputW.(@hConsoleInputHandle, input_records, 80, read_event) != 0
        read_events = read_event.unpack1('L')
        0.upto(read_events) do |idx|
          input_record = input_records[idx * 20, 20]
          event = input_record[0, 2].unpack1('s*')
          case event
          when WINDOW_BUFFER_SIZE_EVENT
            @winch_handler.()
          when KEY_EVENT
            key_down = input_record[4, 4].unpack1('l*')
            repeat_count = input_record[8, 2].unpack1('s*')
            virtual_key_code = input_record[10, 2].unpack1('s*')
            virtual_scan_code = input_record[12, 2].unpack1('s*')
            char_code = input_record[14, 2].unpack1('S*')
            control_key_state = input_record[16, 2].unpack1('S*')
            is_key_down = key_down.zero? ? false : true
            if is_key_down
              process_key_event(repeat_count, virtual_key_code, virtual_scan_code, char_code, control_key_state)
            end
          end
        end
      end
    end
  end

  def with_raw_input
    yield
  end

  def write(string)
    @output.write(string)
  end

  def buffered_output
    yield
  end

  def getc(_timeout_second)
    check_input_event
    @output_buf.shift
  end

  def ungetc(c)
    @output_buf.unshift(c)
  end

  def in_pasting?
    not empty_buffer?
  end

  def empty_buffer?
    if not @output_buf.empty?
      false
    elsif @kbhit.call == 0
      true
    else
      false
    end
  end

  def get_console_screen_buffer_info
    # CONSOLE_SCREEN_BUFFER_INFO
    # [ 0,2] dwSize.X
    # [ 2,2] dwSize.Y
    # [ 4,2] dwCursorPositions.X
    # [ 6,2] dwCursorPositions.Y
    # [ 8,2] wAttributes
    # [10,2] srWindow.Left
    # [12,2] srWindow.Top
    # [14,2] srWindow.Right
    # [16,2] srWindow.Bottom
    # [18,2] dwMaximumWindowSize.X
    # [20,2] dwMaximumWindowSize.Y
    csbi = 0.chr * 22
    if call_with_console_handle(@GetConsoleScreenBufferInfo, csbi) != 0
      # returns [width, height, x, y, attributes, left, top, right, bottom]
      csbi.unpack("s9")
    else
      return nil
    end
  end

  ALTERNATIVE_CSBI = [80, 24, 0, 0, 7, 0, 0, 79, 23].freeze

  def get_screen_size
    width, _, _, _, _, _, top, _, bottom = get_console_screen_buffer_info || ALTERNATIVE_CSBI
    [bottom - top + 1, width]
  end

  def cursor_pos
    _, _, x, y, _, _, top, = get_console_screen_buffer_info || ALTERNATIVE_CSBI
    Reline::CursorPos.new(x, y - top)
  end

  def move_cursor_column(val)
    _, _, _, y, = get_console_screen_buffer_info
    call_with_console_handle(@SetConsoleCursorPosition, y * 65536 + val) if y
  end

  def move_cursor_up(val)
    if val > 0
      _, _, x, y, _, _, top, = get_console_screen_buffer_info
      return unless y
      y = (y - top) - val
      y = 0 if y < 0
      call_with_console_handle(@SetConsoleCursorPosition, (y + top) * 65536 + x)
    elsif val < 0
      move_cursor_down(-val)
    end
  end

  def move_cursor_down(val)
    if val > 0
      _, _, x, y, _, _, top, _, bottom = get_console_screen_buffer_info
      return unless y
      screen_height = bottom - top
      y = (y - top) + val
      y = screen_height if y > screen_height
      call_with_console_handle(@SetConsoleCursorPosition, (y + top) * 65536 + x)
    elsif val < 0
      move_cursor_up(-val)
    end
  end

  def erase_after_cursor
    width, _, x, y, attributes, = get_console_screen_buffer_info
    return unless x
    written = 0.chr * 4
    call_with_console_handle(@FillConsoleOutputCharacter, 0x20, width - x, y * 65536 + x, written)
    call_with_console_handle(@FillConsoleOutputAttribute, attributes, width - x, y * 65536 + x, written)
  end

  # This only works when the cursor is at the bottom of the scroll range
  # For more details, see https://github.com/ruby/reline/pull/577#issuecomment-1646679623
  def scroll_down(x)
    return if x.zero?
    # We use `\n` instead of CSI + S because CSI + S would cause https://github.com/ruby/reline/issues/576
    @output.write "\n" * x
  end

  def clear_screen
    if @legacy_console
      width, _, _, _, attributes, _, top, _, bottom = get_console_screen_buffer_info
      return unless width
      fill_length = width * (bottom - top + 1)
      screen_topleft = top * 65536
      written = 0.chr * 4
      call_with_console_handle(@FillConsoleOutputCharacter, 0x20, fill_length, screen_topleft, written)
      call_with_console_handle(@FillConsoleOutputAttribute, attributes, fill_length, screen_topleft, written)
      call_with_console_handle(@SetConsoleCursorPosition, screen_topleft)
    else
      @output.write "\e[2J" "\e[H"
    end
  end

  def set_screen_size(rows, columns)
    raise NotImplementedError
  end

  def hide_cursor
    size = 100
    visible = 0 # 0 means false
    cursor_info = [size, visible].pack('Li')
    call_with_console_handle(@SetConsoleCursorInfo, cursor_info)
  end

  def show_cursor
    size = 100
    visible = 1 # 1 means true
    cursor_info = [size, visible].pack('Li')
    call_with_console_handle(@SetConsoleCursorInfo, cursor_info)
  end

  def set_winch_handler(&handler)
    @winch_handler = handler
  end

  def prep
    # do nothing
    nil
  end

  def deprep(otio)
    # do nothing
  end

  def disable_auto_linewrap(setting = true, &block)
    mode = getconsolemode
    if 0 == (mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING)
      if block
        begin
          setconsolemode(mode & ~ENABLE_WRAP_AT_EOL_OUTPUT)
          block.call
        ensure
          setconsolemode(mode | ENABLE_WRAP_AT_EOL_OUTPUT)
        end
      else
        if setting
          setconsolemode(mode & ~ENABLE_WRAP_AT_EOL_OUTPUT)
        else
          setconsolemode(mode | ENABLE_WRAP_AT_EOL_OUTPUT)
        end
      end
    else
      block.call if block
    end
  end

  class KeyEventRecord

    attr_reader :virtual_key_code, :char_code, :control_key_state, :control_keys

    def initialize(virtual_key_code, char_code, control_key_state)
      @virtual_key_code = virtual_key_code
      @char_code = char_code
      @control_key_state = control_key_state
      @enhanced = control_key_state & ENHANCED_KEY != 0

      (@control_keys = []).tap do |control_keys|
        # symbols must be sorted to make comparison is easier later on
        control_keys << :ALT   if control_key_state & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED) != 0
        control_keys << :CTRL  if control_key_state & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED) != 0
        control_keys << :SHIFT if control_key_state & SHIFT_PRESSED != 0
      end.freeze
    end

    def char
      @char_code.chr(Encoding::UTF_8)
    end

    def enhanced?
      @enhanced
    end

    # Verifies if the arguments match with this key event.
    # Nil arguments are ignored, but at least one must be passed as non-nil.
    # To verify that no control keys were pressed, pass an empty array: `control_keys: []`.
    def match?(control_keys: nil, virtual_key_code: nil, char_code: nil)
      raise ArgumentError, 'No argument was passed to match key event' if control_keys.nil? && virtual_key_code.nil? && char_code.nil?

      (control_keys.nil? || [*control_keys].sort == @control_keys) &&
      (virtual_key_code.nil? || @virtual_key_code == virtual_key_code) &&
      (char_code.nil? || char_code == @char_code)
    end

  end
end
PK*J[�U����share/ruby/open3.rbnu�[���# frozen_string_literal: true

#
# = open3.rb: Popen, but with stderr, too
#
# Author:: Yukihiro Matsumoto
# Documentation:: Konrad Meyer
#
# Open3 gives you access to stdin, stdout, and stderr when running other
# programs.
#

#
# Open3 grants you access to stdin, stdout, stderr and a thread to wait for the
# child process when running another program.
# You can specify various attributes, redirections, current directory, etc., of
# the program in the same way as for Process.spawn.
#
# - Open3.popen3 : pipes for stdin, stdout, stderr
# - Open3.popen2 : pipes for stdin, stdout
# - Open3.popen2e : pipes for stdin, merged stdout and stderr
# - Open3.capture3 : give a string for stdin; get strings for stdout, stderr
# - Open3.capture2 : give a string for stdin; get a string for stdout
# - Open3.capture2e : give a string for stdin; get a string for merged stdout and stderr
# - Open3.pipeline_rw : pipes for first stdin and last stdout of a pipeline
# - Open3.pipeline_r : pipe for last stdout of a pipeline
# - Open3.pipeline_w : pipe for first stdin of a pipeline
# - Open3.pipeline_start : run a pipeline without waiting
# - Open3.pipeline : run a pipeline and wait for its completion
#

require 'open3/version'

# \Module \Open3 supports creating child processes
# with access to their $stdin, $stdout, and $stderr streams.
#
# == What's Here
#
# Each of these methods executes a given command in a new process or subshell,
# or multiple commands in new processes and/or subshells:
#
# - Each of these methods executes a single command in a process or subshell,
#   accepts a string for input to $stdin,
#   and returns string output from $stdout, $stderr, or both:
#
#   - Open3.capture2: Executes the command;
#     returns the string from $stdout.
#   - Open3.capture2e: Executes the command;
#     returns the string from merged $stdout and $stderr.
#   - Open3.capture3: Executes the command;
#     returns strings from $stdout and $stderr.
#
# - Each of these methods executes a single command in a process or subshell,
#   and returns pipes for $stdin, $stdout, and/or $stderr:
#
#   - Open3.popen2: Executes the command;
#     returns pipes for $stdin and $stdout.
#   - Open3.popen2e: Executes the command;
#     returns pipes for $stdin and merged $stdout and $stderr.
#   - Open3.popen3: Executes the command;
#     returns pipes for $stdin, $stdout, and $stderr.
#
# - Each of these methods executes one or more commands in processes and/or subshells,
#   returns pipes for the first $stdin, the last $stdout, or both:
#
#   - Open3.pipeline_r: Returns a pipe for the last $stdout.
#   - Open3.pipeline_rw: Returns pipes for the first $stdin and the last $stdout.
#   - Open3.pipeline_w: Returns a pipe for the first $stdin.
#   - Open3.pipeline_start: Does not wait for processes to complete.
#   - Open3.pipeline: Waits for processes to complete.
#
# Each of the methods above accepts:
#
# - An optional hash of environment variable names and values;
#   see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
# - A required string argument that is a +command_line+ or +exe_path+;
#   see {Argument command_line or exe_path}[rdoc-ref:Process@Argument+command_line+or+exe_path].
# - An optional hash of execution options;
#   see {Execution Options}[rdoc-ref:Process@Execution+Options].
#
module Open3

  # :call-seq:
  #   Open3.popen3([env, ] command_line, options = {}) -> [stdin, stdout, stderr, wait_thread]
  #   Open3.popen3([env, ] exe_path, *args, options = {}) -> [stdin, stdout, stderr, wait_thread]
  #   Open3.popen3([env, ] command_line, options = {}) {|stdin, stdout, stderr, wait_thread| ... } -> object
  #   Open3.popen3([env, ] exe_path, *args, options = {}) {|stdin, stdout, stderr, wait_thread| ... } -> object
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process, by calling Process.spawn with the given arguments.
  # - Creates streams +stdin+, +stdout+, and +stderr+,
  #   which are the standard input, standard output, and standard error streams
  #   in the child process.
  # - Creates thread +wait_thread+ that waits for the child process to exit;
  #   the thread has method +pid+, which returns the process ID
  #   of the child process.
  #
  # With no block given, returns the array
  # <tt>[stdin, stdout, stderr, wait_thread]</tt>.
  # The caller should close each of the three returned streams.
  #
  #   stdin, stdout, stderr, wait_thread = Open3.popen3('echo')
  #   # => [#<IO:fd 8>, #<IO:fd 10>, #<IO:fd 12>, #<Process::Waiter:0x00007f58d5428f58 run>]
  #   stdin.close
  #   stdout.close
  #   stderr.close
  #   wait_thread.pid   # => 2210481
  #   wait_thread.value # => #<Process::Status: pid 2210481 exit 0>
  #
  # With a block given, calls the block with the four variables
  # (three streams and the wait thread)
  # and returns the block's return value.
  # The caller need not close the streams:
  #
  #   Open3.popen3('echo') do |stdin, stdout, stderr, wait_thread|
  #     p stdin
  #     p stdout
  #     p stderr
  #     p wait_thread
  #     p wait_thread.pid
  #     p wait_thread.value
  #   end
  #
  # Output:
  #
  #   #<IO:fd 6>
  #   #<IO:fd 7>
  #   #<IO:fd 9>
  #   #<Process::Waiter:0x00007f58d53606e8 sleep>
  #   2211047
  #   #<Process::Status: pid 2211047 exit 0>
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # Unlike Process.spawn, this method waits for the child process to exit
  # before returning, so the caller need not do so.
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in the call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in the call to Process.spawn;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # The single required argument is one of the following:
  #
  # - +command_line+ if it is a string,
  #   and if it begins with a shell reserved word or special built-in,
  #   or if it contains one or more metacharacters.
  # - +exe_path+ otherwise.
  #
  # <b>Argument +command_line+</b>
  #
  # \String argument +command_line+ is a command line to be passed to a shell;
  # it must begin with a shell reserved word, begin with a special built-in,
  # or contain meta characters:
  #
  #   Open3.popen3('if true; then echo "Foo"; fi') {|*args| p args } # Shell reserved word.
  #   Open3.popen3('echo') {|*args| p args }                         # Built-in.
  #   Open3.popen3('date > date.tmp') {|*args| p args }              # Contains meta character.
  #
  # Output (similar for each call above):
  #
  #   [#<IO:(closed)>, #<IO:(closed)>, #<IO:(closed)>, #<Process::Waiter:0x00007f58d52f28c8 dead>]
  #
  # The command line may also contain arguments and options for the command:
  #
  #   Open3.popen3('echo "Foo"') { |i, o, e, t| o.gets }
  #   "Foo\n"
  #
  # <b>Argument +exe_path+</b>
  #
  # Argument +exe_path+ is one of the following:
  #
  # - The string path to an executable to be called.
  # - A 2-element array containing the path to an executable
  #   and the string to be used as the name of the executing process.
  #
  # Example:
  #
  #   Open3.popen3('/usr/bin/date') { |i, o, e, t| o.gets }
  #   # => "Wed Sep 27 02:56:44 PM CDT 2023\n"
  #
  # Ruby invokes the executable directly, with no shell and no shell expansion:
  #
  #   Open3.popen3('doesnt_exist') { |i, o, e, t| o.gets } # Raises Errno::ENOENT
  #
  # If one or more +args+ is given, each is an argument or option
  # to be passed to the executable:
  #
  #   Open3.popen3('echo', 'C #') { |i, o, e, t| o.gets }
  #   # => "C #\n"
  #   Open3.popen3('echo', 'hello', 'world') { |i, o, e, t| o.gets }
  #   # => "hello world\n"
  #
  # Take care to avoid deadlocks.
  # Output streams +stdout+ and +stderr+ have fixed-size buffers,
  # so reading extensively from one but not the other can cause a deadlock
  # when the unread buffer fills.
  # To avoid that, +stdout+ and +stderr+ should be read simultaneously
  # (using threads or IO.select).
  #
  # Related:
  #
  # - Open3.popen2: Makes the standard input and standard output streams
  #   of the child process available as separate streams,
  #   with no access to the standard error stream.
  # - Open3.popen2e: Makes the standard input and the merge
  #   of the standard output and standard error streams
  #   of the child process available as separate streams.
  #
  def popen3(*cmd, &block)
    if Hash === cmd.last
      opts = cmd.pop.dup
    else
      opts = {}
    end

    in_r, in_w = IO.pipe
    opts[:in] = in_r
    in_w.sync = true

    out_r, out_w = IO.pipe
    opts[:out] = out_w

    err_r, err_w = IO.pipe
    opts[:err] = err_w

    popen_run(cmd, opts, [in_r, out_w, err_w], [in_w, out_r, err_r], &block)
  end
  module_function :popen3

  # :call-seq:
  #   Open3.popen2([env, ] command_line, options = {}) -> [stdin, stdout, wait_thread]
  #   Open3.popen2([env, ] exe_path, *args, options = {}) -> [stdin, stdout, wait_thread]
  #   Open3.popen2([env, ] command_line, options = {}) {|stdin, stdout, wait_thread| ... } -> object
  #   Open3.popen2([env, ] exe_path, *args, options = {}) {|stdin, stdout, wait_thread| ... } -> object
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process, by calling Process.spawn with the given arguments.
  # - Creates streams +stdin+ and +stdout+,
  #   which are the standard input and standard output streams
  #   in the child process.
  # - Creates thread +wait_thread+ that waits for the child process to exit;
  #   the thread has method +pid+, which returns the process ID
  #   of the child process.
  #
  # With no block given, returns the array
  # <tt>[stdin, stdout, wait_thread]</tt>.
  # The caller should close each of the two returned streams.
  #
  #   stdin, stdout, wait_thread = Open3.popen2('echo')
  #   # => [#<IO:fd 6>, #<IO:fd 7>, #<Process::Waiter:0x00007f58d52dbe98 run>]
  #   stdin.close
  #   stdout.close
  #   wait_thread.pid   # => 2263572
  #   wait_thread.value # => #<Process::Status: pid 2263572 exit 0>
  #
  # With a block given, calls the block with the three variables
  # (two streams and the wait thread)
  # and returns the block's return value.
  # The caller need not close the streams:
  #
  #   Open3.popen2('echo') do |stdin, stdout, wait_thread|
  #     p stdin
  #     p stdout
  #     p wait_thread
  #     p wait_thread.pid
  #     p wait_thread.value
  #   end
  #
  # Output:
  #
  #   #<IO:fd 6>
  #   #<IO:fd 7>
  #   #<Process::Waiter:0x00007f58d59a34b0 sleep>
  #   2263636
  #   #<Process::Status: pid 2263636 exit 0>
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # Unlike Process.spawn, this method waits for the child process to exit
  # before returning, so the caller need not do so.
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in the call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in the call to Process.spawn;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # The single required argument is one of the following:
  #
  # - +command_line+ if it is a string,
  #   and if it begins with a shell reserved word or special built-in,
  #   or if it contains one or more metacharacters.
  # - +exe_path+ otherwise.
  #
  # <b>Argument +command_line+</b>
  #
  # \String argument +command_line+ is a command line to be passed to a shell;
  # it must begin with a shell reserved word, begin with a special built-in,
  # or contain meta characters:
  #
  #   Open3.popen2('if true; then echo "Foo"; fi') {|*args| p args } # Shell reserved word.
  #   Open3.popen2('echo') {|*args| p args }                         # Built-in.
  #   Open3.popen2('date > date.tmp') {|*args| p args }              # Contains meta character.
  #
  # Output (similar for each call above):
  #
  #   # => [#<IO:(closed)>, #<IO:(closed)>, #<Process::Waiter:0x00007f7577dfe410 dead>]
  #
  # The command line may also contain arguments and options for the command:
  #
  #   Open3.popen2('echo "Foo"') { |i, o, t| o.gets }
  #   "Foo\n"
  #
  # <b>Argument +exe_path+</b>
  #
  # Argument +exe_path+ is one of the following:
  #
  # - The string path to an executable to be called.
  # - A 2-element array containing the path to an executable
  #   and the string to be used as the name of the executing process.
  #
  # Example:
  #
  #   Open3.popen2('/usr/bin/date') { |i, o, t| o.gets }
  #   # => "Thu Sep 28 09:41:06 AM CDT 2023\n"
  #
  # Ruby invokes the executable directly, with no shell and no shell expansion:
  #
  #   Open3.popen2('doesnt_exist') { |i, o, t| o.gets } # Raises Errno::ENOENT
  #
  # If one or more +args+ is given, each is an argument or option
  # to be passed to the executable:
  #
  #   Open3.popen2('echo', 'C #') { |i, o, t| o.gets }
  #   # => "C #\n"
  #   Open3.popen2('echo', 'hello', 'world') { |i, o, t| o.gets }
  #   # => "hello world\n"
  #
  #
  # Related:
  #
  # - Open3.popen2e: Makes the standard input and the merge
  #   of the standard output and standard error streams
  #   of the child process available as separate streams.
  # - Open3.popen3: Makes the standard input, standard output,
  #   and standard error streams
  #   of the child process available as separate streams.
  #
  def popen2(*cmd, &block)
    if Hash === cmd.last
      opts = cmd.pop.dup
    else
      opts = {}
    end

    in_r, in_w = IO.pipe
    opts[:in] = in_r
    in_w.sync = true

    out_r, out_w = IO.pipe
    opts[:out] = out_w

    popen_run(cmd, opts, [in_r, out_w], [in_w, out_r], &block)
  end
  module_function :popen2

  # :call-seq:
  #   Open3.popen2e([env, ] command_line, options = {}) -> [stdin, stdout_and_stderr, wait_thread]
  #   Open3.popen2e([env, ] exe_path, *args, options = {}) -> [stdin, stdout_and_stderr, wait_thread]
  #   Open3.popen2e([env, ] command_line, options = {}) {|stdin, stdout_and_stderr, wait_thread| ... } -> object
  #   Open3.popen2e([env, ] exe_path, *args, options = {}) {|stdin, stdout_and_stderr, wait_thread| ... } -> object
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process, by calling Process.spawn with the given arguments.
  # - Creates streams +stdin+, +stdout_and_stderr+,
  #   which are the standard input and the merge of the standard output
  #   and standard error streams in the child process.
  # - Creates thread +wait_thread+ that waits for the child process to exit;
  #   the thread has method +pid+, which returns the process ID
  #   of the child process.
  #
  # With no block given, returns the array
  # <tt>[stdin, stdout_and_stderr, wait_thread]</tt>.
  # The caller should close each of the two returned streams.
  #
  #   stdin, stdout_and_stderr, wait_thread = Open3.popen2e('echo')
  #   # => [#<IO:fd 6>, #<IO:fd 7>, #<Process::Waiter:0x00007f7577da4398 run>]
  #   stdin.close
  #   stdout_and_stderr.close
  #   wait_thread.pid   # => 2274600
  #   wait_thread.value # => #<Process::Status: pid 2274600 exit 0>
  #
  # With a block given, calls the block with the three variables
  # (two streams and the wait thread)
  # and returns the block's return value.
  # The caller need not close the streams:
  #
  #   Open3.popen2e('echo') do |stdin, stdout_and_stderr, wait_thread|
  #     p stdin
  #     p stdout_and_stderr
  #     p wait_thread
  #     p wait_thread.pid
  #     p wait_thread.value
  #   end
  #
  # Output:
  #
  #   #<IO:fd 6>
  #   #<IO:fd 7>
  #   #<Process::Waiter:0x00007f75777578c8 sleep>
  #   2274763
  #   #<Process::Status: pid 2274763 exit 0>
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # Unlike Process.spawn, this method waits for the child process to exit
  # before returning, so the caller need not do so.
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in the call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in the call to Process.spawn;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # The single required argument is one of the following:
  #
  # - +command_line+ if it is a string,
  #   and if it begins with a shell reserved word or special built-in,
  #   or if it contains one or more metacharacters.
  # - +exe_path+ otherwise.
  #
  # <b>Argument +command_line+</b>
  #
  # \String argument +command_line+ is a command line to be passed to a shell;
  # it must begin with a shell reserved word, begin with a special built-in,
  # or contain meta characters:
  #
  #   Open3.popen2e('if true; then echo "Foo"; fi') {|*args| p args } # Shell reserved word.
  #   Open3.popen2e('echo') {|*args| p args }                         # Built-in.
  #   Open3.popen2e('date > date.tmp') {|*args| p args }              # Contains meta character.
  #
  # Output (similar for each call above):
  #
  #   # => [#<IO:(closed)>, #<IO:(closed)>, #<Process::Waiter:0x00007f7577d8a1f0 dead>]
  #
  # The command line may also contain arguments and options for the command:
  #
  #   Open3.popen2e('echo "Foo"') { |i, o_and_e, t| o_and_e.gets }
  #   "Foo\n"
  #
  # <b>Argument +exe_path+</b>
  #
  # Argument +exe_path+ is one of the following:
  #
  # - The string path to an executable to be called.
  # - A 2-element array containing the path to an executable
  #   and the string to be used as the name of the executing process.
  #
  # Example:
  #
  #   Open3.popen2e('/usr/bin/date') { |i, o_and_e, t| o_and_e.gets }
  #   # => "Thu Sep 28 01:58:45 PM CDT 2023\n"
  #
  # Ruby invokes the executable directly, with no shell and no shell expansion:
  #
  #   Open3.popen2e('doesnt_exist') { |i, o_and_e, t| o_and_e.gets } # Raises Errno::ENOENT
  #
  # If one or more +args+ is given, each is an argument or option
  # to be passed to the executable:
  #
  #   Open3.popen2e('echo', 'C #') { |i, o_and_e, t| o_and_e.gets }
  #   # => "C #\n"
  #   Open3.popen2e('echo', 'hello', 'world') { |i, o_and_e, t| o_and_e.gets }
  #   # => "hello world\n"
  #
  # Related:
  #
  # - Open3.popen2: Makes the standard input and standard output streams
  #   of the child process available as separate streams,
  #   with no access to the standard error stream.
  # - Open3.popen3: Makes the standard input, standard output,
  #   and standard error streams
  #   of the child process available as separate streams.
  #
  def popen2e(*cmd, &block)
    if Hash === cmd.last
      opts = cmd.pop.dup
    else
      opts = {}
    end

    in_r, in_w = IO.pipe
    opts[:in] = in_r
    in_w.sync = true

    out_r, out_w = IO.pipe
    opts[[:out, :err]] = out_w

    popen_run(cmd, opts, [in_r, out_w], [in_w, out_r], &block)
  ensure
    if block
      in_r.close
      in_w.close
      out_r.close
      out_w.close
    end
  end
  module_function :popen2e

  def popen_run(cmd, opts, child_io, parent_io) # :nodoc:
    pid = spawn(*cmd, opts)
    wait_thr = Process.detach(pid)
    child_io.each(&:close)
    result = [*parent_io, wait_thr]
    if defined? yield
      begin
        return yield(*result)
      ensure
        parent_io.each(&:close)
        wait_thr.join
      end
    end
    result
  end
  module_function :popen_run
  class << self
    private :popen_run
  end

  # :call-seq:
  #   Open3.capture3([env, ] command_line, options = {}) -> [stdout_s, stderr_s, status]
  #   Open3.capture3([env, ] exe_path, *args, options = {}) -> [stdout_s, stderr_s, status]
  #
  # Basically a wrapper for Open3.popen3 that:
  #
  # - Creates a child process, by calling Open3.popen3 with the given arguments
  #   (except for certain entries in hash +options+; see below).
  # - Returns as strings +stdout_s+ and +stderr_s+ the standard output
  #   and standard error of the child process.
  # - Returns as +status+ a <tt>Process::Status</tt> object
  #   that represents the exit status of the child process.
  #
  # Returns the array <tt>[stdout_s, stderr_s, status]</tt>:
  #
  #   stdout_s, stderr_s, status = Open3.capture3('echo "Foo"')
  #   # => ["Foo\n", "", #<Process::Status: pid 2281954 exit 0>]
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # Unlike Process.spawn, this method waits for the child process to exit
  # before returning, so the caller need not do so.
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in the call to Open3.popen3;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in the call to Open3.popen3;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # The hash +options+ is given;
  # two options have local effect in method Open3.capture3:
  #
  # - If entry <tt>options[:stdin_data]</tt> exists, the entry is removed
  #   and its string value is sent to the command's standard input:
  #
  #     Open3.capture3('tee', stdin_data: 'Foo')
  #     # => ["Foo", "", #<Process::Status: pid 2319575 exit 0>]
  #
  # - If entry <tt>options[:binmode]</tt> exists, the entry is removed and
  #   the internal streams are set to binary mode.
  #
  # The single required argument is one of the following:
  #
  # - +command_line+ if it is a string,
  #   and if it begins with a shell reserved word or special built-in,
  #   or if it contains one or more metacharacters.
  # - +exe_path+ otherwise.
  #
  # <b>Argument +command_line+</b>
  #
  # \String argument +command_line+ is a command line to be passed to a shell;
  # it must begin with a shell reserved word, begin with a special built-in,
  # or contain meta characters:
  #
  #   Open3.capture3('if true; then echo "Foo"; fi') # Shell reserved word.
  #   # => ["Foo\n", "", #<Process::Status: pid 2282025 exit 0>]
  #   Open3.capture3('echo')                         # Built-in.
  #   # => ["\n", "", #<Process::Status: pid 2282092 exit 0>]
  #   Open3.capture3('date > date.tmp')              # Contains meta character.
  #   # => ["", "", #<Process::Status: pid 2282110 exit 0>]
  #
  # The command line may also contain arguments and options for the command:
  #
  #   Open3.capture3('echo "Foo"')
  #   # => ["Foo\n", "", #<Process::Status: pid 2282092 exit 0>]
  #
  # <b>Argument +exe_path+</b>
  #
  # Argument +exe_path+ is one of the following:
  #
  # - The string path to an executable to be called.
  # - A 2-element array containing the path to an executable
  #   and the string to be used as the name of the executing process.
  #
  # Example:
  #
  #   Open3.capture3('/usr/bin/date')
  #   # => ["Thu Sep 28 05:03:51 PM CDT 2023\n", "", #<Process::Status: pid 2282300 exit 0>]
  #
  # Ruby invokes the executable directly, with no shell and no shell expansion:
  #
  #   Open3.capture3('doesnt_exist') # Raises Errno::ENOENT
  #
  # If one or more +args+ is given, each is an argument or option
  # to be passed to the executable:
  #
  #   Open3.capture3('echo', 'C #')
  #   # => ["C #\n", "", #<Process::Status: pid 2282368 exit 0>]
  #   Open3.capture3('echo', 'hello', 'world')
  #   # => ["hello world\n", "", #<Process::Status: pid 2282372 exit 0>]
  #
  def capture3(*cmd)
    if Hash === cmd.last
      opts = cmd.pop.dup
    else
      opts = {}
    end

    stdin_data = opts.delete(:stdin_data) || ''
    binmode = opts.delete(:binmode)

    popen3(*cmd, opts) {|i, o, e, t|
      if binmode
        i.binmode
        o.binmode
        e.binmode
      end
      out_reader = Thread.new { o.read }
      err_reader = Thread.new { e.read }
      begin
        if stdin_data.respond_to? :readpartial
          IO.copy_stream(stdin_data, i)
        else
          i.write stdin_data
        end
      rescue Errno::EPIPE
      end
      i.close
      [out_reader.value, err_reader.value, t.value]
    }
  end
  module_function :capture3

  # :call-seq:
  #   Open3.capture2([env, ] command_line, options = {}) -> [stdout_s, status]
  #   Open3.capture2([env, ] exe_path, *args, options = {}) -> [stdout_s, status]
  #
  # Basically a wrapper for Open3.popen3 that:
  #
  # - Creates a child process, by calling Open3.popen3 with the given arguments
  #   (except for certain entries in hash +options+; see below).
  # - Returns as string +stdout_s+ the standard output of the child process.
  # - Returns as +status+ a <tt>Process::Status</tt> object
  #   that represents the exit status of the child process.
  #
  # Returns the array <tt>[stdout_s, status]</tt>:
  #
  #   stdout_s, status = Open3.capture2('echo "Foo"')
  #   # => ["Foo\n", #<Process::Status: pid 2326047 exit 0>]
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # Unlike Process.spawn, this method waits for the child process to exit
  # before returning, so the caller need not do so.
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in the call to Open3.popen3;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in the call to Open3.popen3;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # The hash +options+ is given;
  # two options have local effect in method Open3.capture2:
  #
  # - If entry <tt>options[:stdin_data]</tt> exists, the entry is removed
  #   and its string value is sent to the command's standard input:
  #
  #     Open3.capture2('tee', stdin_data: 'Foo')
  #
  #     # => ["Foo", #<Process::Status: pid 2326087 exit 0>]
  #
  # - If entry <tt>options[:binmode]</tt> exists, the entry is removed and
  #   the internal streams are set to binary mode.
  #
  # The single required argument is one of the following:
  #
  # - +command_line+ if it is a string,
  #   and if it begins with a shell reserved word or special built-in,
  #   or if it contains one or more metacharacters.
  # - +exe_path+ otherwise.
  #
  # <b>Argument +command_line+</b>
  #
  # \String argument +command_line+ is a command line to be passed to a shell;
  # it must begin with a shell reserved word, begin with a special built-in,
  # or contain meta characters:
  #
  #   Open3.capture2('if true; then echo "Foo"; fi') # Shell reserved word.
  #   # => ["Foo\n", #<Process::Status: pid 2326131 exit 0>]
  #   Open3.capture2('echo')                         # Built-in.
  #   # => ["\n", #<Process::Status: pid 2326139 exit 0>]
  #   Open3.capture2('date > date.tmp')              # Contains meta character.
  #   # => ["", #<Process::Status: pid 2326174 exit 0>]
  #
  # The command line may also contain arguments and options for the command:
  #
  #   Open3.capture2('echo "Foo"')
  #   # => ["Foo\n", #<Process::Status: pid 2326183 exit 0>]
  #
  # <b>Argument +exe_path+</b>
  #
  # Argument +exe_path+ is one of the following:
  #
  # - The string path to an executable to be called.
  # - A 2-element array containing the path to an executable
  #   and the string to be used as the name of the executing process.
  #
  # Example:
  #
  #   Open3.capture2('/usr/bin/date')
  #   # => ["Fri Sep 29 01:00:39 PM CDT 2023\n", #<Process::Status: pid 2326222 exit 0>]
  #
  # Ruby invokes the executable directly, with no shell and no shell expansion:
  #
  #   Open3.capture2('doesnt_exist') # Raises Errno::ENOENT
  #
  # If one or more +args+ is given, each is an argument or option
  # to be passed to the executable:
  #
  #   Open3.capture2('echo', 'C #')
  #   # => ["C #\n", #<Process::Status: pid 2326267 exit 0>]
  #   Open3.capture2('echo', 'hello', 'world')
  #   # => ["hello world\n", #<Process::Status: pid 2326299 exit 0>]
  #
  def capture2(*cmd)
    if Hash === cmd.last
      opts = cmd.pop.dup
    else
      opts = {}
    end

    stdin_data = opts.delete(:stdin_data)
    binmode = opts.delete(:binmode)

    popen2(*cmd, opts) {|i, o, t|
      if binmode
        i.binmode
        o.binmode
      end
      out_reader = Thread.new { o.read }
      if stdin_data
        begin
          if stdin_data.respond_to? :readpartial
            IO.copy_stream(stdin_data, i)
          else
            i.write stdin_data
          end
        rescue Errno::EPIPE
        end
      end
      i.close
      [out_reader.value, t.value]
    }
  end
  module_function :capture2

  # :call-seq:
  #   Open3.capture2e([env, ] command_line, options = {}) -> [stdout_and_stderr_s, status]
  #   Open3.capture2e([env, ] exe_path, *args, options = {}) -> [stdout_and_stderr_s, status]
  #
  # Basically a wrapper for Open3.popen3 that:
  #
  # - Creates a child process, by calling Open3.popen3 with the given arguments
  #   (except for certain entries in hash +options+; see below).
  # - Returns as string +stdout_and_stderr_s+ the merged standard output
  #   and standard error of the child process.
  # - Returns as +status+ a <tt>Process::Status</tt> object
  #   that represents the exit status of the child process.
  #
  # Returns the array <tt>[stdout_and_stderr_s, status]</tt>:
  #
  #   stdout_and_stderr_s, status = Open3.capture2e('echo "Foo"')
  #   # => ["Foo\n", #<Process::Status: pid 2371692 exit 0>]
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # Unlike Process.spawn, this method waits for the child process to exit
  # before returning, so the caller need not do so.
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in the call to Open3.popen3;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in the call to Open3.popen3;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # The hash +options+ is given;
  # two options have local effect in method Open3.capture2e:
  #
  # - If entry <tt>options[:stdin_data]</tt> exists, the entry is removed
  #   and its string value is sent to the command's standard input:
  #
  #     Open3.capture2e('tee', stdin_data: 'Foo')
  #     # => ["Foo", #<Process::Status: pid 2371732 exit 0>]
  #
  # - If entry <tt>options[:binmode]</tt> exists, the entry is removed and
  #   the internal streams are set to binary mode.
  #
  # The single required argument is one of the following:
  #
  # - +command_line+ if it is a string,
  #   and if it begins with a shell reserved word or special built-in,
  #   or if it contains one or more metacharacters.
  # - +exe_path+ otherwise.
  #
  # <b>Argument +command_line+</b>
  #
  # \String argument +command_line+ is a command line to be passed to a shell;
  # it must begin with a shell reserved word, begin with a special built-in,
  # or contain meta characters:
  #
  #   Open3.capture2e('if true; then echo "Foo"; fi') # Shell reserved word.
  #   # => ["Foo\n", #<Process::Status: pid 2371740 exit 0>]
  #   Open3.capture2e('echo')                         # Built-in.
  #   # => ["\n", #<Process::Status: pid 2371774 exit 0>]
  #   Open3.capture2e('date > date.tmp')              # Contains meta character.
  #   # => ["", #<Process::Status: pid 2371812 exit 0>]
  #
  # The command line may also contain arguments and options for the command:
  #
  #   Open3.capture2e('echo "Foo"')
  #   # => ["Foo\n", #<Process::Status: pid 2326183 exit 0>]
  #
  # <b>Argument +exe_path+</b>
  #
  # Argument +exe_path+ is one of the following:
  #
  # - The string path to an executable to be called.
  # - A 2-element array containing the path to an executable
  #   and the string to be used as the name of the executing process.
  #
  # Example:
  #
  #   Open3.capture2e('/usr/bin/date')
  #   # => ["Sat Sep 30 09:01:46 AM CDT 2023\n", #<Process::Status: pid 2371820 exit 0>]
  #
  # Ruby invokes the executable directly, with no shell and no shell expansion:
  #
  #   Open3.capture2e('doesnt_exist') # Raises Errno::ENOENT
  #
  # If one or more +args+ is given, each is an argument or option
  # to be passed to the executable:
  #
  #   Open3.capture2e('echo', 'C #')
  #   # => ["C #\n", #<Process::Status: pid 2371856 exit 0>]
  #   Open3.capture2e('echo', 'hello', 'world')
  #   # => ["hello world\n", #<Process::Status: pid 2371894 exit 0>]
  #
  def capture2e(*cmd)
    if Hash === cmd.last
      opts = cmd.pop.dup
    else
      opts = {}
    end

    stdin_data = opts.delete(:stdin_data)
    binmode = opts.delete(:binmode)

    popen2e(*cmd, opts) {|i, oe, t|
      if binmode
        i.binmode
        oe.binmode
      end
      outerr_reader = Thread.new { oe.read }
      if stdin_data
        begin
          if stdin_data.respond_to? :readpartial
            IO.copy_stream(stdin_data, i)
          else
            i.write stdin_data
          end
        rescue Errno::EPIPE
        end
      end
      i.close
      [outerr_reader.value, t.value]
    }
  end
  module_function :capture2e

  # :call-seq:
  #   Open3.pipeline_rw([env, ] *cmds, options = {}) -> [first_stdin, last_stdout, wait_threads]
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process for each of the given +cmds+
  #   by calling Process.spawn.
  # - Pipes the +stdout+ from each child to the +stdin+ of the next child,
  #   or, for the first child, from the caller's +stdin+,
  #   or, for the last child, to the caller's +stdout+.
  #
  # The method does not wait for child processes to exit,
  # so the caller must do so.
  #
  # With no block given, returns a 3-element array containing:
  #
  # - The +stdin+ stream of the first child process.
  # - The +stdout+ stream of the last child process.
  # - An array of the wait threads for all of the child processes.
  #
  # Example:
  #
  #   first_stdin, last_stdout, wait_threads = Open3.pipeline_rw('sort', 'cat -n')
  #   # => [#<IO:fd 20>, #<IO:fd 21>, [#<Process::Waiter:0x000055e8de29ab40 sleep>, #<Process::Waiter:0x000055e8de29a690 sleep>]]
  #   first_stdin.puts("foo\nbar\nbaz")
  #   first_stdin.close # Send EOF to sort.
  #   puts last_stdout.read
  #   wait_threads.each do |wait_thread|
  #     wait_thread.join
  #   end
  #
  # Output:
  #
  #   1	bar
  #   2	baz
  #   3	foo
  #
  # With a block given, calls the block with the +stdin+ stream of the first child,
  # the +stdout+ stream  of the last child,
  # and an array of the wait processes:
  #
  #   Open3.pipeline_rw('sort', 'cat -n') do |first_stdin, last_stdout, wait_threads|
  #     first_stdin.puts "foo\nbar\nbaz"
  #     first_stdin.close # send EOF to sort.
  #     puts last_stdout.read
  #     wait_threads.each do |wait_thread|
  #       wait_thread.join
  #     end
  #   end
  #
  # Output:
  #
  #   1	bar
  #   2	baz
  #   3	foo
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in each call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in each call to Process.spawn;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # Each remaining argument in +cmds+ is one of:
  #
  # - A +command_line+: a string that begins with a shell reserved word
  #   or special built-in, or contains one or more metacharacters.
  # - An +exe_path+: the string path to an executable to be called.
  # - An array containing a +command_line+ or an +exe_path+,
  #   along with zero or more string arguments for the command.
  #
  # See {Argument command_line or exe_path}[rdoc-ref:Process@Argument+command_line+or+exe_path].
  #
  def pipeline_rw(*cmds, &block)
    if Hash === cmds.last
      opts = cmds.pop.dup
    else
      opts = {}
    end

    in_r, in_w = IO.pipe
    opts[:in] = in_r
    in_w.sync = true

    out_r, out_w = IO.pipe
    opts[:out] = out_w

    pipeline_run(cmds, opts, [in_r, out_w], [in_w, out_r], &block)
  end
  module_function :pipeline_rw

  # :call-seq:
  #   Open3.pipeline_r([env, ] *cmds, options = {}) -> [last_stdout, wait_threads]
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process for each of the given +cmds+
  #   by calling Process.spawn.
  # - Pipes the +stdout+ from each child to the +stdin+ of the next child,
  #   or, for the last child, to the caller's +stdout+.
  #
  # The method does not wait for child processes to exit,
  # so the caller must do so.
  #
  # With no block given, returns a 2-element array containing:
  #
  # - The +stdout+ stream of the last child process.
  # - An array of the wait threads for all of the child processes.
  #
  # Example:
  #
  #   last_stdout, wait_threads = Open3.pipeline_r('ls', 'grep R')
  #   # => [#<IO:fd 5>, [#<Process::Waiter:0x000055e8de2f9898 dead>, #<Process::Waiter:0x000055e8de2f94b0 sleep>]]
  #   puts last_stdout.read
  #   wait_threads.each do |wait_thread|
  #     wait_thread.join
  #   end
  #
  # Output:
  #
  #   Rakefile
  #   README.md
  #
  # With a block given, calls the block with the +stdout+ stream
  # of the last child process,
  # and an array of the wait processes:
  #
  #   Open3.pipeline_r('ls', 'grep R') do |last_stdout, wait_threads|
  #     puts last_stdout.read
  #     wait_threads.each do |wait_thread|
  #       wait_thread.join
  #     end
  #   end
  #
  # Output:
  #
  #   Rakefile
  #   README.md
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in each call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in each call to Process.spawn;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # Each remaining argument in +cmds+ is one of:
  #
  # - A +command_line+: a string that begins with a shell reserved word
  #   or special built-in, or contains one or more metacharacters.
  # - An +exe_path+: the string path to an executable to be called.
  # - An array containing a +command_line+ or an +exe_path+,
  #   along with zero or more string arguments for the command.
  #
  # See {Argument command_line or exe_path}[rdoc-ref:Process@Argument+command_line+or+exe_path].
  #
  def pipeline_r(*cmds, &block)
    if Hash === cmds.last
      opts = cmds.pop.dup
    else
      opts = {}
    end

    out_r, out_w = IO.pipe
    opts[:out] = out_w

    pipeline_run(cmds, opts, [out_w], [out_r], &block)
  end
  module_function :pipeline_r


  # :call-seq:
  #   Open3.pipeline_w([env, ] *cmds, options = {}) -> [first_stdin, wait_threads]
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process for each of the given +cmds+
  #   by calling Process.spawn.
  # - Pipes the +stdout+ from each child to the +stdin+ of the next child,
  #   or, for the first child, pipes the caller's +stdout+ to the child's +stdin+.
  #
  # The method does not wait for child processes to exit,
  # so the caller must do so.
  #
  # With no block given, returns a 2-element array containing:
  #
  # - The +stdin+ stream of the first child process.
  # - An array of the wait threads for all of the child processes.
  #
  # Example:
  #
  #   first_stdin, wait_threads = Open3.pipeline_w('sort', 'cat -n')
  #   # => [#<IO:fd 7>, [#<Process::Waiter:0x000055e8de928278 run>, #<Process::Waiter:0x000055e8de923e80 run>]]
  #   first_stdin.puts("foo\nbar\nbaz")
  #   first_stdin.close # Send EOF to sort.
  #   wait_threads.each do |wait_thread|
  #     wait_thread.join
  #   end
  #
  # Output:
  #
  #   1	bar
  #   2	baz
  #   3	foo
  #
  # With a block given, calls the block with the +stdin+ stream
  # of the first child process,
  # and an array of the wait processes:
  #
  #   Open3.pipeline_w('sort', 'cat -n') do |first_stdin, wait_threads|
  #     first_stdin.puts("foo\nbar\nbaz")
  #     first_stdin.close # Send EOF to sort.
  #     wait_threads.each do |wait_thread|
  #       wait_thread.join
  #     end
  #   end
  #
  # Output:
  #
  #   1	bar
  #   2	baz
  #   3	foo
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in each call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in each call to Process.spawn;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # Each remaining argument in +cmds+ is one of:
  #
  # - A +command_line+: a string that begins with a shell reserved word
  #   or special built-in, or contains one or more metacharacters.
  # - An +exe_path+: the string path to an executable to be called.
  # - An array containing a +command_line+ or an +exe_path+,
  #   along with zero or more string arguments for the command.
  #
  # See {Argument command_line or exe_path}[rdoc-ref:Process@Argument+command_line+or+exe_path].
  #
  def pipeline_w(*cmds, &block)
    if Hash === cmds.last
      opts = cmds.pop.dup
    else
      opts = {}
    end

    in_r, in_w = IO.pipe
    opts[:in] = in_r
    in_w.sync = true

    pipeline_run(cmds, opts, [in_r], [in_w], &block)
  end
  module_function :pipeline_w

  # :call-seq:
  #   Open3.pipeline_start([env, ] *cmds, options = {}) -> [wait_threads]
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process for each of the given +cmds+
  #   by calling Process.spawn.
  # - Does not wait for child processes to exit.
  #
  # With no block given, returns an array of the wait threads
  # for all of the child processes.
  #
  # Example:
  #
  #   wait_threads = Open3.pipeline_start('ls', 'grep R')
  #   # => [#<Process::Waiter:0x000055e8de9d2bb0 run>, #<Process::Waiter:0x000055e8de9d2890 run>]
  #   wait_threads.each do |wait_thread|
  #     wait_thread.join
  #   end
  #
  # Output:
  #
  #   Rakefile
  #   README.md
  #
  # With a block given, calls the block with an array of the wait processes:
  #
  #   Open3.pipeline_start('ls', 'grep R') do |wait_threads|
  #     wait_threads.each do |wait_thread|
  #       wait_thread.join
  #     end
  #   end
  #
  # Output:
  #
  #   Rakefile
  #   README.md
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in each call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in each call to Process.spawn;
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # Each remaining argument in +cmds+ is one of:
  #
  # - A +command_line+: a string that begins with a shell reserved word
  #   or special built-in, or contains one or more metacharacters.
  # - An +exe_path+: the string path to an executable to be called.
  # - An array containing a +command_line+ or an +exe_path+,
  #   along with zero or more string arguments for the command.
  #
  # See {Argument command_line or exe_path}[rdoc-ref:Process@Argument+command_line+or+exe_path].
  #
  def pipeline_start(*cmds, &block)
    if Hash === cmds.last
      opts = cmds.pop.dup
    else
      opts = {}
    end

    if block
      pipeline_run(cmds, opts, [], [], &block)
    else
      ts, = pipeline_run(cmds, opts, [], [])
      ts
    end
  end
  module_function :pipeline_start

  # :call-seq:
  #   Open3.pipeline([env, ] *cmds, options = {}) -> array_of_statuses
  #
  # Basically a wrapper for
  # {Process.spawn}[rdoc-ref:Process.spawn]
  # that:
  #
  # - Creates a child process for each of the given +cmds+
  #   by calling Process.spawn.
  # - Pipes the +stdout+ from each child to the +stdin+ of the next child,
  #   or, for the last child, to the caller's +stdout+.
  # - Waits for the child processes to exit.
  # - Returns an array of Process::Status objects (one for each child).
  #
  # Example:
  #
  #   wait_threads = Open3.pipeline('ls', 'grep R')
  #   # => [#<Process::Status: pid 2139200 exit 0>, #<Process::Status: pid 2139202 exit 0>]
  #
  # Output:
  #
  #   Rakefile
  #   README.md
  #
  # Like Process.spawn, this method has potential security vulnerabilities
  # if called with untrusted input;
  # see {Command Injection}[rdoc-ref:command_injection.rdoc@Command+Injection].
  #
  # If the first argument is a hash, it becomes leading argument +env+
  # in each call to Process.spawn;
  # see {Execution Environment}[rdoc-ref:Process@Execution+Environment].
  #
  # If the last argument is a hash, it becomes trailing argument +options+
  # in each call to Process.spawn'
  # see {Execution Options}[rdoc-ref:Process@Execution+Options].
  #
  # Each remaining argument in +cmds+ is one of:
  #
  # - A +command_line+: a string that begins with a shell reserved word
  #   or special built-in, or contains one or more metacharacters.
  # - An +exe_path+: the string path to an executable to be called.
  # - An array containing a +command_line+ or an +exe_path+,
  #   along with zero or more string arguments for the command.
  #
  # See {Argument command_line or exe_path}[rdoc-ref:Process@Argument+command_line+or+exe_path].
  #
  def pipeline(*cmds)
    if Hash === cmds.last
      opts = cmds.pop.dup
    else
      opts = {}
    end

    pipeline_run(cmds, opts, [], []) {|ts|
      ts.map(&:value)
    }
  end
  module_function :pipeline

  def pipeline_run(cmds, pipeline_opts, child_io, parent_io) # :nodoc:
    if cmds.empty?
      raise ArgumentError, "no commands"
    end

    opts_base = pipeline_opts.dup
    opts_base.delete :in
    opts_base.delete :out

    wait_thrs = []
    r = nil
    cmds.each_with_index {|cmd, i|
      cmd_opts = opts_base.dup
      if String === cmd
        cmd = [cmd]
      else
        cmd_opts.update cmd.pop if Hash === cmd.last
      end
      if i == 0
        if !cmd_opts.include?(:in)
          if pipeline_opts.include?(:in)
            cmd_opts[:in] = pipeline_opts[:in]
          end
        end
      else
        cmd_opts[:in] = r
      end
      if i != cmds.length - 1
        r2, w2 = IO.pipe
        cmd_opts[:out] = w2
      else
        if !cmd_opts.include?(:out)
          if pipeline_opts.include?(:out)
            cmd_opts[:out] = pipeline_opts[:out]
          end
        end
      end
      pid = spawn(*cmd, cmd_opts)
      wait_thrs << Process.detach(pid)
      r&.close
      w2&.close
      r = r2
    }
    result = parent_io + [wait_thrs]
    child_io.each(&:close)
    if defined? yield
      begin
        return yield(*result)
      ensure
        parent_io.each(&:close)
        wait_thrs.each(&:join)
      end
    end
    result
  end
  module_function :pipeline_run
  class << self
    private :pipeline_run
  end

end

# JRuby uses different popen logic on Windows, require it here to reuse wrapper methods above.
require 'open3/jruby_windows' if RUBY_ENGINE == 'jruby' && JRuby::Util::ON_WINDOWS
PK*J[}h����share/ruby/optparse/kwargs.rbnu�[���# frozen_string_literal: true
require_relative '../optparse'

class OptionParser
  # :call-seq:
  #   define_by_keywords(options, method, **params)
  #
  # :include: ../../doc/optparse/creates_option.rdoc
  #
  # Defines options which set in to _options_ for keyword parameters
  # of _method_.
  #
  # Parameters for each keywords are given as elements of _params_.
  #
  def define_by_keywords(options, method, **params)
    method.parameters.each do |type, name|
      case type
      when :key, :keyreq
        op, cl = *(type == :key ? %w"[ ]" : ["", ""])
        define("--#{name}=#{op}#{name.upcase}#{cl}", *params[name]) do |o|
          options[name] = o
        end
      end
    end
    options
  end
end
PK*J[�K���share/ruby/optparse/ac.rbnu�[���# frozen_string_literal: false
require_relative '../optparse'

#
# autoconf-like options.
#
class OptionParser::AC < OptionParser
  # :stopdoc:
  private

  def _check_ac_args(name, block)
    unless /\A\w[-\w]*\z/ =~ name
      raise ArgumentError, name
    end
    unless block
      raise ArgumentError, "no block given", ParseError.filter_backtrace(caller)
    end
  end

  ARG_CONV = proc {|val| val.nil? ? true : val}
  private_constant :ARG_CONV

  def _ac_arg_enable(prefix, name, help_string, block)
    _check_ac_args(name, block)

    sdesc = []
    ldesc = ["--#{prefix}-#{name}"]
    desc = [help_string]
    q = name.downcase
    ac_block = proc {|val| block.call(ARG_CONV.call(val))}
    enable = Switch::PlacedArgument.new(nil, ARG_CONV, sdesc, ldesc, nil, desc, ac_block)
    disable = Switch::NoArgument.new(nil, proc {false}, sdesc, ldesc, nil, desc, ac_block)
    top.append(enable, [], ["enable-" + q], disable, ['disable-' + q])
    enable
  end

  # :startdoc:

  public

  # Define <tt>--enable</tt> / <tt>--disable</tt> style option
  #
  # Appears as <tt>--enable-<i>name</i></tt> in help message.
  def ac_arg_enable(name, help_string, &block)
    _ac_arg_enable("enable", name, help_string, block)
  end

  # Define <tt>--enable</tt> / <tt>--disable</tt> style option
  #
  # Appears as <tt>--disable-<i>name</i></tt> in help message.
  def ac_arg_disable(name, help_string, &block)
    _ac_arg_enable("disable", name, help_string, block)
  end

  # Define <tt>--with</tt> / <tt>--without</tt> style option
  #
  # Appears as <tt>--with-<i>name</i></tt> in help message.
  def ac_arg_with(name, help_string, &block)
    _check_ac_args(name, block)

    sdesc = []
    ldesc = ["--with-#{name}"]
    desc = [help_string]
    q = name.downcase
    with = Switch::PlacedArgument.new(*search(:atype, String), sdesc, ldesc, nil, desc, block)
    without = Switch::NoArgument.new(nil, proc {}, sdesc, ldesc, nil, desc, block)
    top.append(with, [], ["with-" + q], without, ['without-' + q])
    with
  end
end
PK*J[����ppshare/ruby/optparse/date.rbnu�[���# frozen_string_literal: false
require_relative '../optparse'
require 'date'

OptionParser.accept(DateTime) do |s,|
  begin
    DateTime.parse(s) if s
  rescue ArgumentError
    raise OptionParser::InvalidArgument, s
  end
end
OptionParser.accept(Date) do |s,|
  begin
    Date.parse(s) if s
  rescue ArgumentError
    raise OptionParser::InvalidArgument, s
  end
end
PK*J[�V����!share/ruby/optparse/shellwords.rbnu�[���# frozen_string_literal: false
# -*- ruby -*-

require 'shellwords'
require_relative '../optparse'

OptionParser.accept(Shellwords) {|s,| Shellwords.shellwords(s)}
PK*J[����share/ruby/optparse/time.rbnu�[���# frozen_string_literal: false
require_relative '../optparse'
require 'time'

OptionParser.accept(Time) do |s,|
  begin
    (Time.httpdate(s) rescue Time.parse(s)) if s
  rescue
    raise OptionParser::InvalidArgument, s
  end
end
PK*J[�)��share/ruby/optparse/version.rbnu�[���# frozen_string_literal: false
# OptionParser internal utility

class << OptionParser
  #
  # Shows version string in packages if Version is defined.
  #
  # +pkgs+:: package list
  #
  def show_version(*pkgs)
    progname = ARGV.options.program_name
    result = false
    show = proc do |klass, cname, version|
      str = "#{progname}"
      unless klass == ::Object and cname == :VERSION
        version = version.join(".") if Array === version
        str << ": #{klass}" unless klass == Object
        str << " version #{version}"
      end
      [:Release, :RELEASE].find do |rel|
        if klass.const_defined?(rel)
          str << " (#{klass.const_get(rel)})"
        end
      end
      puts str
      result = true
    end
    if pkgs.size == 1 and pkgs[0] == "all"
      self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
        unless cname[1] == ?e and klass.const_defined?(:Version)
          show.call(klass, cname.intern, version)
        end
      end
    else
      pkgs.each do |pkg|
        begin
          pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
          v = case
              when pkg.const_defined?(:Version)
                pkg.const_get(n = :Version)
              when pkg.const_defined?(:VERSION)
                pkg.const_get(n = :VERSION)
              else
                n = nil
                "unknown"
              end
          show.call(pkg, n, v)
        rescue NameError
        end
      end
    end
    result
  end

  # :stopdoc:

  def each_const(path, base = ::Object)
    path.split(/::|\//).inject(base) do |klass, name|
      raise NameError, path unless Module === klass
      klass.constants.grep(/#{name}/i) do |c|
        klass.const_defined?(c) or next
        klass.const_get(c)
      end
    end
  end

  def search_const(klass, name)
    klasses = [klass]
    while klass = klasses.shift
      klass.constants.each do |cname|
        klass.const_defined?(cname) or next
        const = klass.const_get(cname)
        yield klass, cname, const if name === cname
        klasses << const if Module === const and const != ::Object
      end
    end
  end

  # :startdoc:
end
PK*J[A��share/ruby/optparse/uri.rbnu�[���# frozen_string_literal: false
# -*- ruby -*-

require_relative '../optparse'
require 'uri'

OptionParser.accept(URI) {|s,| URI.parse(s) if s}
PK*J[�:��share/ruby/optparse.rbnu�[���# frozen_string_literal: true
#
# optparse.rb - command-line option analysis with the OptionParser class.
#
# Author:: Nobu Nakada
# Documentation:: Nobu Nakada and Gavin Sinclair.
#
# See OptionParser for documentation.
#

#--
# == Developer Documentation (not for RDoc output)
#
# === Class tree
#
# - OptionParser:: front end
# - OptionParser::Switch:: each switches
# - OptionParser::List:: options list
# - OptionParser::ParseError:: errors on parsing
#   - OptionParser::AmbiguousOption
#   - OptionParser::NeedlessArgument
#   - OptionParser::MissingArgument
#   - OptionParser::InvalidOption
#   - OptionParser::InvalidArgument
#     - OptionParser::AmbiguousArgument
#
# === Object relationship diagram
#
#   +--------------+
#   | OptionParser |<>-----+
#   +--------------+       |                      +--------+
#                          |                    ,-| Switch |
#        on_head -------->+---------------+    /  +--------+
#        accept/reject -->| List          |<|>-
#                         |               |<|>-  +----------+
#        on ------------->+---------------+    `-| argument |
#                           :           :        |  class   |
#                         +---------------+      |==========|
#        on_tail -------->|               |      |pattern   |
#                         +---------------+      |----------|
#   OptionParser.accept ->| DefaultList   |      |converter |
#                reject   |(shared between|      +----------+
#                         | all instances)|
#                         +---------------+
#
#++
#
# == OptionParser
#
# === New to +OptionParser+?
#
# See the {Tutorial}[optparse/tutorial.rdoc].
#
# === Introduction
#
# OptionParser is a class for command-line option analysis.  It is much more
# advanced, yet also easier to use, than GetoptLong, and is a more Ruby-oriented
# solution.
#
# === Features
#
# 1. The argument specification and the code to handle it are written in the
#    same place.
# 2. It can output an option summary; you don't need to maintain this string
#    separately.
# 3. Optional and mandatory arguments are specified very gracefully.
# 4. Arguments can be automatically converted to a specified class.
# 5. Arguments can be restricted to a certain set.
#
# All of these features are demonstrated in the examples below.  See
# #make_switch for full documentation.
#
# === Minimal example
#
#   require 'optparse'
#
#   options = {}
#   OptionParser.new do |parser|
#     parser.banner = "Usage: example.rb [options]"
#
#     parser.on("-v", "--[no-]verbose", "Run verbosely") do |v|
#       options[:verbose] = v
#     end
#   end.parse!
#
#   p options
#   p ARGV
#
# === Generating Help
#
# OptionParser can be used to automatically generate help for the commands you
# write:
#
#   require 'optparse'
#
#   Options = Struct.new(:name)
#
#   class Parser
#     def self.parse(options)
#       args = Options.new("world")
#
#       opt_parser = OptionParser.new do |parser|
#         parser.banner = "Usage: example.rb [options]"
#
#         parser.on("-nNAME", "--name=NAME", "Name to say hello to") do |n|
#           args.name = n
#         end
#
#         parser.on("-h", "--help", "Prints this help") do
#           puts parser
#           exit
#         end
#       end
#
#       opt_parser.parse!(options)
#       return args
#     end
#   end
#   options = Parser.parse %w[--help]
#
#   #=>
#      # Usage: example.rb [options]
#      #     -n, --name=NAME                  Name to say hello to
#      #     -h, --help                       Prints this help
#
# === Required Arguments
#
# For options that require an argument, option specification strings may include an
# option name in all caps. If an option is used without the required argument,
# an exception will be raised.
#
#   require 'optparse'
#
#   options = {}
#   OptionParser.new do |parser|
#     parser.on("-r", "--require LIBRARY",
#               "Require the LIBRARY before executing your script") do |lib|
#       puts "You required #{lib}!"
#     end
#   end.parse!
#
# Used:
#
#   $ ruby optparse-test.rb -r
#   optparse-test.rb:9:in `<main>': missing argument: -r (OptionParser::MissingArgument)
#   $ ruby optparse-test.rb -r my-library
#   You required my-library!
#
# === Type Coercion
#
# OptionParser supports the ability to coerce command line arguments
# into objects for us.
#
# OptionParser comes with a few ready-to-use kinds of type
# coercion. They are:
#
# - Date  -- Anything accepted by +Date.parse+ (need to require +optparse/date+)
# - DateTime -- Anything accepted by +DateTime.parse+ (need to require +optparse/date+)
# - Time -- Anything accepted by +Time.httpdate+ or +Time.parse+ (need to require +optparse/time+)
# - URI  -- Anything accepted by +URI.parse+ (need to require +optparse/uri+)
# - Shellwords -- Anything accepted by +Shellwords.shellwords+ (need to require +optparse/shellwords+)
# - String -- Any non-empty string
# - Integer -- Any integer. Will convert octal. (e.g. 124, -3, 040)
# - Float -- Any float. (e.g. 10, 3.14, -100E+13)
# - Numeric -- Any integer, float, or rational (1, 3.4, 1/3)
# - DecimalInteger -- Like +Integer+, but no octal format.
# - OctalInteger -- Like +Integer+, but no decimal format.
# - DecimalNumeric -- Decimal integer or float.
# - TrueClass --  Accepts '+, yes, true, -, no, false' and
#   defaults as +true+
# - FalseClass -- Same as +TrueClass+, but defaults to +false+
# - Array -- Strings separated by ',' (e.g. 1,2,3)
# - Regexp -- Regular expressions. Also includes options.
#
# We can also add our own coercions, which we will cover below.
#
# ==== Using Built-in Conversions
#
# As an example, the built-in +Time+ conversion is used. The other built-in
# conversions behave in the same way.
# OptionParser will attempt to parse the argument
# as a +Time+. If it succeeds, that time will be passed to the
# handler block. Otherwise, an exception will be raised.
#
#   require 'optparse'
#   require 'optparse/time'
#   OptionParser.new do |parser|
#     parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
#       p time
#     end
#   end.parse!
#
# Used:
#
#   $ ruby optparse-test.rb  -t nonsense
#   ... invalid argument: -t nonsense (OptionParser::InvalidArgument)
#   $ ruby optparse-test.rb  -t 10-11-12
#   2010-11-12 00:00:00 -0500
#   $ ruby optparse-test.rb  -t 9:30
#   2014-08-13 09:30:00 -0400
#
# ==== Creating Custom Conversions
#
# The +accept+ method on OptionParser may be used to create converters.
# It specifies which conversion block to call whenever a class is specified.
# The example below uses it to fetch a +User+ object before the +on+ handler receives it.
#
#   require 'optparse'
#
#   User = Struct.new(:id, :name)
#
#   def find_user id
#     not_found = ->{ raise "No User Found for id #{id}" }
#     [ User.new(1, "Sam"),
#       User.new(2, "Gandalf") ].find(not_found) do |u|
#       u.id == id
#     end
#   end
#
#   op = OptionParser.new
#   op.accept(User) do |user_id|
#     find_user user_id.to_i
#   end
#
#   op.on("--user ID", User) do |user|
#     puts user
#   end
#
#   op.parse!
#
# Used:
#
#   $ ruby optparse-test.rb --user 1
#   #<struct User id=1, name="Sam">
#   $ ruby optparse-test.rb --user 2
#   #<struct User id=2, name="Gandalf">
#   $ ruby optparse-test.rb --user 3
#   optparse-test.rb:15:in `block in find_user': No User Found for id 3 (RuntimeError)
#
# === Store options to a Hash
#
# The +into+ option of +order+, +parse+ and so on methods stores command line options into a Hash.
#
#   require 'optparse'
#
#   options = {}
#   OptionParser.new do |parser|
#     parser.on('-a')
#     parser.on('-b NUM', Integer)
#     parser.on('-v', '--verbose')
#   end.parse!(into: options)
#
#   p options
#
# Used:
#
#   $ ruby optparse-test.rb -a
#   {:a=>true}
#   $ ruby optparse-test.rb -a -v
#   {:a=>true, :verbose=>true}
#   $ ruby optparse-test.rb -a -b 100
#   {:a=>true, :b=>100}
#
# === Complete example
#
# The following example is a complete Ruby program.  You can run it and see the
# effect of specifying various options.  This is probably the best way to learn
# the features of +optparse+.
#
#   require 'optparse'
#   require 'optparse/time'
#   require 'ostruct'
#   require 'pp'
#
#   class OptparseExample
#     Version = '1.0.0'
#
#     CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary]
#     CODE_ALIASES = { "jis" => "iso-2022-jp", "sjis" => "shift_jis" }
#
#     class ScriptOptions
#       attr_accessor :library, :inplace, :encoding, :transfer_type,
#                     :verbose, :extension, :delay, :time, :record_separator,
#                     :list
#
#       def initialize
#         self.library = []
#         self.inplace = false
#         self.encoding = "utf8"
#         self.transfer_type = :auto
#         self.verbose = false
#       end
#
#       def define_options(parser)
#         parser.banner = "Usage: example.rb [options]"
#         parser.separator ""
#         parser.separator "Specific options:"
#
#         # add additional options
#         perform_inplace_option(parser)
#         delay_execution_option(parser)
#         execute_at_time_option(parser)
#         specify_record_separator_option(parser)
#         list_example_option(parser)
#         specify_encoding_option(parser)
#         optional_option_argument_with_keyword_completion_option(parser)
#         boolean_verbose_option(parser)
#
#         parser.separator ""
#         parser.separator "Common options:"
#         # No argument, shows at tail.  This will print an options summary.
#         # Try it and see!
#         parser.on_tail("-h", "--help", "Show this message") do
#           puts parser
#           exit
#         end
#         # Another typical switch to print the version.
#         parser.on_tail("--version", "Show version") do
#           puts Version
#           exit
#         end
#       end
#
#       def perform_inplace_option(parser)
#         # Specifies an optional option argument
#         parser.on("-i", "--inplace [EXTENSION]",
#                   "Edit ARGV files in place",
#                   "(make backup if EXTENSION supplied)") do |ext|
#           self.inplace = true
#           self.extension = ext || ''
#           self.extension.sub!(/\A\.?(?=.)/, ".")  # Ensure extension begins with dot.
#         end
#       end
#
#       def delay_execution_option(parser)
#         # Cast 'delay' argument to a Float.
#         parser.on("--delay N", Float, "Delay N seconds before executing") do |n|
#           self.delay = n
#         end
#       end
#
#       def execute_at_time_option(parser)
#         # Cast 'time' argument to a Time object.
#         parser.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
#           self.time = time
#         end
#       end
#
#       def specify_record_separator_option(parser)
#         # Cast to octal integer.
#         parser.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger,
#                   "Specify record separator (default \\0)") do |rs|
#           self.record_separator = rs
#         end
#       end
#
#       def list_example_option(parser)
#         # List of arguments.
#         parser.on("--list x,y,z", Array, "Example 'list' of arguments") do |list|
#           self.list = list
#         end
#       end
#
#       def specify_encoding_option(parser)
#         # Keyword completion.  We are specifying a specific set of arguments (CODES
#         # and CODE_ALIASES - notice the latter is a Hash), and the user may provide
#         # the shortest unambiguous text.
#         code_list = (CODE_ALIASES.keys + CODES).join(', ')
#         parser.on("--code CODE", CODES, CODE_ALIASES, "Select encoding",
#                   "(#{code_list})") do |encoding|
#           self.encoding = encoding
#         end
#       end
#
#       def optional_option_argument_with_keyword_completion_option(parser)
#         # Optional '--type' option argument with keyword completion.
#         parser.on("--type [TYPE]", [:text, :binary, :auto],
#                   "Select transfer type (text, binary, auto)") do |t|
#           self.transfer_type = t
#         end
#       end
#
#       def boolean_verbose_option(parser)
#         # Boolean switch.
#         parser.on("-v", "--[no-]verbose", "Run verbosely") do |v|
#           self.verbose = v
#         end
#       end
#     end
#
#     #
#     # Return a structure describing the options.
#     #
#     def parse(args)
#       # The options specified on the command line will be collected in
#       # *options*.
#
#       @options = ScriptOptions.new
#       @args = OptionParser.new do |parser|
#         @options.define_options(parser)
#         parser.parse!(args)
#       end
#       @options
#     end
#
#     attr_reader :parser, :options
#   end  # class OptparseExample
#
#   example = OptparseExample.new
#   options = example.parse(ARGV)
#   pp options # example.options
#   pp ARGV
#
# === Shell Completion
#
# For modern shells (e.g. bash, zsh, etc.), you can use shell
# completion for command line options.
#
# === Further documentation
#
# The above examples, along with the accompanying
# {Tutorial}[optparse/tutorial.rdoc],
# should be enough to learn how to use this class.
# If you have any questions, file a ticket at http://bugs.ruby-lang.org.
#
class OptionParser
  # The version string
  OptionParser::Version = "0.6.0"

  # :stopdoc:
  NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
  RequiredArgument = [REQUIRED_ARGUMENT = :REQUIRED, true].freeze
  OptionalArgument = [OPTIONAL_ARGUMENT = :OPTIONAL, false].freeze
  # :startdoc:

  #
  # Keyword completion module.  This allows partial arguments to be specified
  # and resolved against a list of acceptable values.
  #
  module Completion
    # :nodoc:

    def self.regexp(key, icase)
      Regexp.new('\A' + Regexp.quote(key).gsub(/\w+\b/, '\&\w*'), icase)
    end

    def self.candidate(key, icase = false, pat = nil, &block)
      pat ||= Completion.regexp(key, icase)
      candidates = []
      block.call do |k, *v|
        (if Regexp === k
           kn = ""
           k === key
         else
           kn = defined?(k.id2name) ? k.id2name : k
           pat === kn
         end) or next
        v << k if v.empty?
        candidates << [k, v, kn]
      end
      candidates
    end

    def candidate(key, icase = false, pat = nil, &_)
      Completion.candidate(key, icase, pat, &method(:each))
    end

    public
    def complete(key, icase = false, pat = nil)
      candidates = candidate(key, icase, pat, &method(:each)).sort_by {|k, v, kn| kn.size}
      if candidates.size == 1
        canon, sw, * = candidates[0]
      elsif candidates.size > 1
        canon, sw, cn = candidates.shift
        candidates.each do |k, v, kn|
          next if sw == v
          if String === cn and String === kn
            if cn.rindex(kn, 0)
              canon, sw, cn = k, v, kn
              next
            elsif kn.rindex(cn, 0)
              next
            end
          end
          throw :ambiguous, key
        end
      end
      if canon
        block_given? or return key, *sw
        yield(key, *sw)
      end
    end

    def convert(opt = nil, val = nil, *)
      val
    end
  end


  #
  # Map from option/keyword string to object with completion.
  #
  class OptionMap < Hash
    include Completion
  end


  #
  # Individual switch class.  Not important to the user.
  #
  # Defined within Switch are several Switch-derived classes: NoArgument,
  # RequiredArgument, etc.
  #
  class Switch
    # :nodoc:

    attr_reader :pattern, :conv, :short, :long, :arg, :desc, :block

    #
    # Guesses argument style from +arg+.  Returns corresponding
    # OptionParser::Switch class (OptionalArgument, etc.).
    #
    def self.guess(arg)
      case arg
      when ""
        t = self
      when /\A=?\[/
        t = Switch::OptionalArgument
      when /\A\s+\[/
        t = Switch::PlacedArgument
      else
        t = Switch::RequiredArgument
      end
      self >= t or incompatible_argument_styles(arg, t)
      t
    end

    def self.incompatible_argument_styles(arg, t)
      raise(ArgumentError, "#{arg}: incompatible argument styles\n  #{self}, #{t}",
            ParseError.filter_backtrace(caller(2)))
    end

    def self.pattern
      NilClass
    end

    def initialize(pattern = nil, conv = nil,
                   short = nil, long = nil, arg = nil,
                   desc = ([] if short or long), block = nil, &_block)
      raise if Array === pattern
      block ||= _block
      @pattern, @conv, @short, @long, @arg, @desc, @block =
        pattern, conv, short, long, arg, desc, block
    end

    #
    # Parses +arg+ and returns rest of +arg+ and matched portion to the
    # argument pattern. Yields when the pattern doesn't match substring.
    #
    def parse_arg(arg) # :nodoc:
      pattern or return nil, [arg]
      unless m = pattern.match(arg)
        yield(InvalidArgument, arg)
        return arg, []
      end
      if String === m
        m = [s = m]
      else
        m = m.to_a
        s = m[0]
        return nil, m unless String === s
      end
      raise InvalidArgument, arg unless arg.rindex(s, 0)
      return nil, m if s.length == arg.length
      yield(InvalidArgument, arg) # didn't match whole arg
      return arg[s.length..-1], m
    end
    private :parse_arg

    #
    # Parses argument, converts and returns +arg+, +block+ and result of
    # conversion. Yields at semi-error condition instead of raising an
    # exception.
    #
    def conv_arg(arg, val = []) # :nodoc:
      if conv
        val = conv.call(*val)
      else
        val = proc {|v| v}.call(*val)
      end
      return arg, block, val
    end
    private :conv_arg

    #
    # Produces the summary text. Each line of the summary is yielded to the
    # block (without newline).
    #
    # +sdone+::  Already summarized short style options keyed hash.
    # +ldone+::  Already summarized long style options keyed hash.
    # +width+::  Width of left side (option part). In other words, the right
    #            side (description part) starts after +width+ columns.
    # +max+::    Maximum width of left side -> the options are filled within
    #            +max+ columns.
    # +indent+:: Prefix string indents all summarized lines.
    #
    def summarize(sdone = {}, ldone = {}, width = 1, max = width - 1, indent = "")
      sopts, lopts = [], [], nil
      @short.each {|s| sdone.fetch(s) {sopts << s}; sdone[s] = true} if @short
      @long.each {|s| ldone.fetch(s) {lopts << s}; ldone[s] = true} if @long
      return if sopts.empty? and lopts.empty? # completely hidden

      left = [sopts.join(', ')]
      right = desc.dup

      while s = lopts.shift
        l = left[-1].length + s.length
        l += arg.length if left.size == 1 && arg
        l < max or sopts.empty? or left << +''
        left[-1] << (left[-1].empty? ? ' ' * 4 : ', ') << s
      end

      if arg
        left[0] << (left[1] ? arg.sub(/\A(\[?)=/, '\1') + ',' : arg)
      end
      mlen = left.collect {|ss| ss.length}.max.to_i
      while mlen > width and l = left.shift
        mlen = left.collect {|ss| ss.length}.max.to_i if l.length == mlen
        if l.length < width and (r = right[0]) and !r.empty?
          l = l.to_s.ljust(width) + ' ' + r
          right.shift
        end
        yield(indent + l)
      end

      while begin l = left.shift; r = right.shift; l or r end
        l = l.to_s.ljust(width) + ' ' + r if r and !r.empty?
        yield(indent + l)
      end

      self
    end

    def add_banner(to)  # :nodoc:
      unless @short or @long
        s = desc.join
        to << " [" + s + "]..." unless s.empty?
      end
      to
    end

    def match_nonswitch?(str)  # :nodoc:
      @pattern =~ str unless @short or @long
    end

    #
    # Main name of the switch.
    #
    def switch_name
      (long.first || short.first).sub(/\A-+(?:\[no-\])?/, '')
    end

    def compsys(sdone, ldone)   # :nodoc:
      sopts, lopts = [], []
      @short.each {|s| sdone.fetch(s) {sopts << s}; sdone[s] = true} if @short
      @long.each {|s| ldone.fetch(s) {lopts << s}; ldone[s] = true} if @long
      return if sopts.empty? and lopts.empty? # completely hidden

      (sopts+lopts).each do |opt|
        # "(-x -c -r)-l[left justify]"
        if /^--\[no-\](.+)$/ =~ opt
          o = $1
          yield("--#{o}", desc.join(""))
          yield("--no-#{o}", desc.join(""))
        else
          yield("#{opt}", desc.join(""))
        end
      end
    end

    def pretty_print_contents(q) # :nodoc:
      if @block
        q.text ":" + @block.source_location.join(":") + ":"
        first = false
      else
        first = true
      end
      [@short, @long].each do |list|
        list.each do |opt|
          if first
            q.text ":"
            first = false
          end
          q.breakable
          q.text opt
        end
      end
    end

    def pretty_print(q)         # :nodoc:
      q.object_group(self) {pretty_print_contents(q)}
    end

    def omitted_argument(val)   # :nodoc:
      val.pop if val.size == 3 and val.last.nil?
      val
    end

    #
    # Switch that takes no arguments.
    #
    class NoArgument < self

      #
      # Raises an exception if any arguments given.
      #
      def parse(arg, argv)
        yield(NeedlessArgument, arg) if arg
        conv_arg(arg)
      end

      def self.incompatible_argument_styles(*) # :nodoc:
      end

      def self.pattern          # :nodoc:
        Object
      end

      def pretty_head           # :nodoc:
        "NoArgument"
      end
    end

    #
    # Switch that takes an argument.
    #
    class RequiredArgument < self

      #
      # Raises an exception if argument is not present.
      #
      def parse(arg, argv, &_)
        unless arg
          raise MissingArgument if argv.empty?
          arg = argv.shift
        end
        conv_arg(*parse_arg(arg, &method(:raise)))
      end

      def pretty_head           # :nodoc:
        "Required"
      end
    end

    #
    # Switch that can omit argument.
    #
    class OptionalArgument < self

      #
      # Parses argument if given, or uses default value.
      #
      def parse(arg, argv, &error)
        if arg
          conv_arg(*parse_arg(arg, &error))
        else
          omitted_argument conv_arg(arg)
        end
      end

      def pretty_head           # :nodoc:
        "Optional"
      end
    end

    #
    # Switch that takes an argument, which does not begin with '-' or is '-'.
    #
    class PlacedArgument < self

      #
      # Returns nil if argument is not present or begins with '-' and is not '-'.
      #
      def parse(arg, argv, &error)
        if !(val = arg) and (argv.empty? or /\A-./ =~ (val = argv[0]))
          return nil, block
        end
        opt = (val = parse_arg(val, &error))[1]
        val = conv_arg(*val)
        if opt and !arg
          argv.shift
        else
          omitted_argument val
          val[0] = nil
        end
        val
      end

      def pretty_head           # :nodoc:
        "Placed"
      end
    end
  end

  #
  # Simple option list providing mapping from short and/or long option
  # string to OptionParser::Switch and mapping from acceptable argument to
  # matching pattern and converter pair. Also provides summary feature.
  #
  class List
    # :nodoc:

    # Map from acceptable argument types to pattern and converter pairs.
    attr_reader :atype

    # Map from short style option switches to actual switch objects.
    attr_reader :short

    # Map from long style option switches to actual switch objects.
    attr_reader :long

    # List of all switches and summary string.
    attr_reader :list

    #
    # Just initializes all instance variables.
    #
    def initialize
      @atype = {}
      @short = OptionMap.new
      @long = OptionMap.new
      @list = []
    end

    def pretty_print(q)         # :nodoc:
      q.group(1, "(", ")") do
        @list.each do |sw|
          next unless Switch === sw
          q.group(1, "(" + sw.pretty_head, ")") do
            sw.pretty_print_contents(q)
          end
        end
      end
    end

    #
    # See OptionParser.accept.
    #
    def accept(t, pat = /.*/m, &block)
      if pat
        pat.respond_to?(:match) or
          raise TypeError, "has no 'match'", ParseError.filter_backtrace(caller(2))
      else
        pat = t if t.respond_to?(:match)
      end
      unless block
        block = pat.method(:convert).to_proc if pat.respond_to?(:convert)
      end
      @atype[t] = [pat, block]
    end

    #
    # See OptionParser.reject.
    #
    def reject(t)
      @atype.delete(t)
    end

    #
    # Adds +sw+ according to +sopts+, +lopts+ and +nlopts+.
    #
    # +sw+::     OptionParser::Switch instance to be added.
    # +sopts+::  Short style option list.
    # +lopts+::  Long style option list.
    # +nlopts+:: Negated long style options list.
    #
    def update(sw, sopts, lopts, nsw = nil, nlopts = nil) # :nodoc:
      sopts.each {|o| @short[o] = sw} if sopts
      lopts.each {|o| @long[o] = sw} if lopts
      nlopts.each {|o| @long[o] = nsw} if nsw and nlopts
      used = @short.invert.update(@long.invert)
      @list.delete_if {|o| Switch === o and !used[o]}
    end
    private :update

    #
    # Inserts +switch+ at the head of the list, and associates short, long
    # and negated long options. Arguments are:
    #
    # +switch+::      OptionParser::Switch instance to be inserted.
    # +short_opts+::  List of short style options.
    # +long_opts+::   List of long style options.
    # +nolong_opts+:: List of long style options with "no-" prefix.
    #
    #   prepend(switch, short_opts, long_opts, nolong_opts)
    #
    def prepend(*args)
      update(*args)
      @list.unshift(args[0])
    end

    #
    # Appends +switch+ at the tail of the list, and associates short, long
    # and negated long options. Arguments are:
    #
    # +switch+::      OptionParser::Switch instance to be inserted.
    # +short_opts+::  List of short style options.
    # +long_opts+::   List of long style options.
    # +nolong_opts+:: List of long style options with "no-" prefix.
    #
    #   append(switch, short_opts, long_opts, nolong_opts)
    #
    def append(*args)
      update(*args)
      @list.push(args[0])
    end

    #
    # Searches +key+ in +id+ list. The result is returned or yielded if a
    # block is given. If it isn't found, nil is returned.
    #
    def search(id, key)
      if list = __send__(id)
        val = list.fetch(key) {return nil}
        block_given? ? yield(val) : val
      end
    end

    #
    # Searches list +id+ for +opt+ and the optional patterns for completion
    # +pat+. If +icase+ is true, the search is case insensitive. The result
    # is returned or yielded if a block is given. If it isn't found, nil is
    # returned.
    #
    def complete(id, opt, icase = false, *pat, &block)
      __send__(id).complete(opt, icase, *pat, &block)
    end

    def get_candidates(id)
      yield __send__(id).keys
    end

    #
    # Iterates over each option, passing the option to the +block+.
    #
    def each_option(&block)
      list.each(&block)
    end

    #
    # Creates the summary table, passing each line to the +block+ (without
    # newline). The arguments +args+ are passed along to the summarize
    # method which is called on every option.
    #
    def summarize(*args, &block)
      sum = []
      list.reverse_each do |opt|
        if opt.respond_to?(:summarize) # perhaps OptionParser::Switch
          s = []
          opt.summarize(*args) {|l| s << l}
          sum.concat(s.reverse)
        elsif !opt or opt.empty?
          sum << ""
        elsif opt.respond_to?(:each_line)
          sum.concat([*opt.each_line].reverse)
        else
          sum.concat([*opt.each].reverse)
        end
      end
      sum.reverse_each(&block)
    end

    def add_banner(to)  # :nodoc:
      list.each do |opt|
        if opt.respond_to?(:add_banner)
          opt.add_banner(to)
        end
      end
      to
    end

    def compsys(*args, &block)  # :nodoc:
      list.each do |opt|
        if opt.respond_to?(:compsys)
          opt.compsys(*args, &block)
        end
      end
    end
  end

  #
  # Hash with completion search feature. See OptionParser::Completion.
  #
  class CompletingHash < Hash
    include Completion

    #
    # Completion for hash key.
    #
    def match(key)
      *values = fetch(key) {
        raise AmbiguousArgument, catch(:ambiguous) {return complete(key)}
      }
      return key, *values
    end
  end

  # :stopdoc:

  #
  # Enumeration of acceptable argument styles. Possible values are:
  #
  # NO_ARGUMENT::       The switch takes no arguments. (:NONE)
  # REQUIRED_ARGUMENT:: The switch requires an argument. (:REQUIRED)
  # OPTIONAL_ARGUMENT:: The switch requires an optional argument. (:OPTIONAL)
  #
  # Use like --switch=argument (long style) or -Xargument (short style). For
  # short style, only portion matched to argument pattern is treated as
  # argument.
  #
  ArgumentStyle = {}
  NoArgument.each {|el| ArgumentStyle[el] = Switch::NoArgument}
  RequiredArgument.each {|el| ArgumentStyle[el] = Switch::RequiredArgument}
  OptionalArgument.each {|el| ArgumentStyle[el] = Switch::OptionalArgument}
  ArgumentStyle.freeze

  #
  # Switches common used such as '--', and also provides default
  # argument classes
  #
  DefaultList = List.new
  DefaultList.short['-'] = Switch::NoArgument.new {}
  DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}


  COMPSYS_HEADER = <<'XXX'      # :nodoc:

typeset -A opt_args
local context state line

_arguments -s -S \
XXX

  def compsys(to, name = File.basename($0)) # :nodoc:
    to << "#compdef #{name}\n"
    to << COMPSYS_HEADER
    visit(:compsys, {}, {}) {|o, d|
      to << %Q[  "#{o}[#{d.gsub(/[\\\"\[\]]/, '\\\\\&')}]" \\\n]
    }
    to << "  '*:file:_files' && return 0\n"
  end

  def help_exit
    if STDOUT.tty? && (pager = ENV.values_at(*%w[RUBY_PAGER PAGER]).find {|e| e && !e.empty?})
      less = ENV["LESS"]
      args = [{"LESS" => "#{!less || less.empty? ? '-' : less}Fe"}, pager, "w"]
      print = proc do |f|
        f.puts help
      rescue Errno::EPIPE
        # pager terminated
      end
      if Process.respond_to?(:fork) and false
        IO.popen("-") {|f| f ? Process.exec(*args, in: f) : print.call(STDOUT)}
        # unreachable
      end
      IO.popen(*args, &print)
    else
      puts help
    end
    exit
  end

  #
  # Default options for ARGV, which never appear in option summary.
  #
  Officious = {}

  #
  # --help
  # Shows option summary.
  #
  Officious['help'] = proc do |parser|
    Switch::NoArgument.new do |arg|
      parser.help_exit
    end
  end

  #
  # --*-completion-bash=WORD
  # Shows candidates for command line completion.
  #
  Officious['*-completion-bash'] = proc do |parser|
    Switch::RequiredArgument.new do |arg|
      puts parser.candidate(arg)
      exit
    end
  end

  #
  # --*-completion-zsh[=NAME:FILE]
  # Creates zsh completion file.
  #
  Officious['*-completion-zsh'] = proc do |parser|
    Switch::OptionalArgument.new do |arg|
      parser.compsys(STDOUT, arg)
      exit
    end
  end

  #
  # --version
  # Shows version string if Version is defined.
  #
  Officious['version'] = proc do |parser|
    Switch::OptionalArgument.new do |pkg|
      if pkg
        begin
          require_relative 'optparse/version'
        rescue LoadError
        else
          show_version(*pkg.split(/,/)) or
            abort("#{parser.program_name}: no version found in package #{pkg}")
          exit
        end
      end
      v = parser.ver or abort("#{parser.program_name}: version unknown")
      puts v
      exit
    end
  end

  # :startdoc:

  #
  # Class methods
  #

  #
  # Initializes a new instance and evaluates the optional block in context
  # of the instance. Arguments +args+ are passed to #new, see there for
  # description of parameters.
  #
  # This method is *deprecated*, its behavior corresponds to the older #new
  # method.
  #
  def self.with(*args, &block)
    opts = new(*args)
    opts.instance_eval(&block)
    opts
  end

  #
  # Returns an incremented value of +default+ according to +arg+.
  #
  def self.inc(arg, default = nil)
    case arg
    when Integer
      arg.nonzero?
    when nil
      default.to_i + 1
    end
  end

  #
  # See self.inc
  #
  def inc(*args)
    self.class.inc(*args)
  end

  #
  # Initializes the instance and yields itself if called with a block.
  #
  # +banner+:: Banner message.
  # +width+::  Summary width.
  # +indent+:: Summary indent.
  #
  def initialize(banner = nil, width = 32, indent = ' ' * 4)
    @stack = [DefaultList, List.new, List.new]
    @program_name = nil
    @banner = banner
    @summary_width = width
    @summary_indent = indent
    @default_argv = ARGV
    @require_exact = false
    @raise_unknown = true
    add_officious
    yield self if block_given?
  end

  def add_officious  # :nodoc:
    list = base()
    Officious.each do |opt, block|
      list.long[opt] ||= block.call(self)
    end
  end

  #
  # Terminates option parsing. Optional parameter +arg+ is a string pushed
  # back to be the first non-option argument.
  #
  def terminate(arg = nil)
    self.class.terminate(arg)
  end
  #
  # See #terminate.
  #
  def self.terminate(arg = nil)
    throw :terminate, arg
  end

  @stack = [DefaultList]
  #
  # Returns the global top option list.
  #
  # Do not use directly.
  #
  def self.top() DefaultList end

  #
  # Directs to accept specified class +t+. The argument string is passed to
  # the block in which it should be converted to the desired class.
  #
  # +t+::   Argument class specifier, any object including Class.
  # +pat+:: Pattern for argument, defaults to +t+ if it responds to match.
  #
  #   accept(t, pat, &block)
  #
  def accept(*args, &blk) top.accept(*args, &blk) end
  #
  # See #accept.
  #
  def self.accept(*args, &blk) top.accept(*args, &blk) end

  #
  # Directs to reject specified class argument.
  #
  # +type+:: Argument class specifier, any object including Class.
  #
  #   reject(type)
  #
  def reject(*args, &blk) top.reject(*args, &blk) end
  #
  # See #reject.
  #
  def self.reject(*args, &blk) top.reject(*args, &blk) end

  #
  # Instance methods
  #

  # Heading banner preceding summary.
  attr_writer :banner

  # Program name to be emitted in error message and default banner,
  # defaults to $0.
  attr_writer :program_name

  # Width for option list portion of summary. Must be Numeric.
  attr_accessor :summary_width

  # Indentation for summary. Must be String (or have + String method).
  attr_accessor :summary_indent

  # Strings to be parsed in default.
  attr_accessor :default_argv

  # Whether to require that options match exactly (disallows providing
  # abbreviated long option as short option).
  attr_accessor :require_exact

  # Whether to raise at unknown option.
  attr_accessor :raise_unknown

  #
  # Heading banner preceding summary.
  #
  def banner
    unless @banner
      @banner = +"Usage: #{program_name} [options]"
      visit(:add_banner, @banner)
    end
    @banner
  end

  #
  # Program name to be emitted in error message and default banner, defaults
  # to $0.
  #
  def program_name
    @program_name || File.basename($0, '.*')
  end

  # for experimental cascading :-)
  alias set_banner banner=
  alias set_program_name program_name=
  alias set_summary_width summary_width=
  alias set_summary_indent summary_indent=

  # Version
  attr_writer :version
  # Release code
  attr_writer :release

  #
  # Version
  #
  def version
    (defined?(@version) && @version) || (defined?(::Version) && ::Version)
  end

  #
  # Release code
  #
  def release
    (defined?(@release) && @release) || (defined?(::Release) && ::Release) || (defined?(::RELEASE) && ::RELEASE)
  end

  #
  # Returns version string from program_name, version and release.
  #
  def ver
    if v = version
      str = +"#{program_name} #{[v].join('.')}"
      str << " (#{v})" if v = release
      str
    end
  end

  #
  # Shows warning message with the program name
  #
  # +mesg+:: Message, defaulted to +$!+.
  #
  # See Kernel#warn.
  #
  def warn(mesg = $!)
    super("#{program_name}: #{mesg}")
  end

  #
  # Shows message with the program name then aborts.
  #
  # +mesg+:: Message, defaulted to +$!+.
  #
  # See Kernel#abort.
  #
  def abort(mesg = $!)
    super("#{program_name}: #{mesg}")
  end

  #
  # Subject of #on / #on_head, #accept / #reject
  #
  def top
    @stack[-1]
  end

  #
  # Subject of #on_tail.
  #
  def base
    @stack[1]
  end

  #
  # Pushes a new List.
  #
  # If a block is given, yields +self+ and returns the result of the
  # block, otherwise returns +self+.
  #
  def new
    @stack.push(List.new)
    if block_given?
      yield self
    else
      self
    end
  end

  #
  # Removes the last List.
  #
  def remove
    @stack.pop
  end

  #
  # Puts option summary into +to+ and returns +to+. Yields each line if
  # a block is given.
  #
  # +to+:: Output destination, which must have method <<. Defaults to [].
  # +width+:: Width of left side, defaults to @summary_width.
  # +max+:: Maximum length allowed for left side, defaults to +width+ - 1.
  # +indent+:: Indentation, defaults to @summary_indent.
  #
  def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
    nl = "\n"
    blk ||= proc {|l| to << (l.index(nl, -1) ? l : l + nl)}
    visit(:summarize, {}, {}, width, max, indent, &blk)
    to
  end

  #
  # Returns option summary string.
  #
  def help; summarize("#{banner}".sub(/\n?\z/, "\n")) end
  alias to_s help

  def pretty_print(q)           # :nodoc:
    q.object_group(self) do
      first = true
      if @stack.size > 2
        @stack.each_with_index do |s, i|
          next if i < 2
          next if s.list.empty?
          if first
            first = false
            q.text ":"
          end
          q.breakable
          s.pretty_print(q)
        end
      end
    end
  end

  def inspect                   # :nodoc:
    require 'pp'
    pretty_print_inspect
  end

  #
  # Returns option summary list.
  #
  def to_a; summarize("#{banner}".split(/^/)) end

  #
  # Checks if an argument is given twice, in which case an ArgumentError is
  # raised. Called from OptionParser#switch only.
  #
  # +obj+:: New argument.
  # +prv+:: Previously specified argument.
  # +msg+:: Exception message.
  #
  def notwice(obj, prv, msg) # :nodoc:
    unless !prv or prv == obj
      raise(ArgumentError, "argument #{msg} given twice: #{obj}",
            ParseError.filter_backtrace(caller(2)))
    end
    obj
  end
  private :notwice

  SPLAT_PROC = proc {|*a| a.length <= 1 ? a.first : a} # :nodoc:

  # :call-seq:
  #   make_switch(params, block = nil)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def make_switch(opts, block = nil)
    short, long, nolong, style, pattern, conv, not_pattern, not_conv, not_style = [], [], []
    ldesc, sdesc, desc, arg = [], [], []
    default_style = Switch::NoArgument
    default_pattern = nil
    klass = nil
    q, a = nil
    has_arg = false

    opts.each do |o|
      # argument class
      next if search(:atype, o) do |pat, c|
        klass = notwice(o, klass, 'type')
        if not_style and not_style != Switch::NoArgument
          not_pattern, not_conv = pat, c
        else
          default_pattern, conv = pat, c
        end
      end

      # directly specified pattern(any object possible to match)
      if (!(String === o || Symbol === o)) and o.respond_to?(:match)
        pattern = notwice(o, pattern, 'pattern')
        if pattern.respond_to?(:convert)
          conv = pattern.method(:convert).to_proc
        else
          conv = SPLAT_PROC
        end
        next
      end

      # anything others
      case o
      when Proc, Method
        block = notwice(o, block, 'block')
      when Array, Hash
        case pattern
        when CompletingHash
        when nil
          pattern = CompletingHash.new
          conv = pattern.method(:convert).to_proc if pattern.respond_to?(:convert)
        else
          raise ArgumentError, "argument pattern given twice"
        end
        o.each {|pat, *v| pattern[pat] = v.fetch(0) {pat}}
      when Module
        raise ArgumentError, "unsupported argument type: #{o}", ParseError.filter_backtrace(caller(4))
      when *ArgumentStyle.keys
        style = notwice(ArgumentStyle[o], style, 'style')
      when /^--no-([^\[\]=\s]*)(.+)?/
        q, a = $1, $2
        o = notwice(a ? Object : TrueClass, klass, 'type')
        not_pattern, not_conv = search(:atype, o) unless not_style
        not_style = (not_style || default_style).guess(arg = a) if a
        default_style = Switch::NoArgument
        default_pattern, conv = search(:atype, FalseClass) unless default_pattern
        ldesc << "--no-#{q}"
        (q = q.downcase).tr!('_', '-')
        long << "no-#{q}"
        nolong << q
      when /^--\[no-\]([^\[\]=\s]*)(.+)?/
        q, a = $1, $2
        o = notwice(a ? Object : TrueClass, klass, 'type')
        if a
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        end
        ldesc << "--[no-]#{q}"
        (o = q.downcase).tr!('_', '-')
        long << o
        not_pattern, not_conv = search(:atype, FalseClass) unless not_style
        not_style = Switch::NoArgument
        nolong << "no-#{o}"
      when /^--([^\[\]=\s]*)(.+)?/
        q, a = $1, $2
        if a
          o = notwice(NilClass, klass, 'type')
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        end
        ldesc << "--#{q}"
        (o = q.downcase).tr!('_', '-')
        long << o
      when /^-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/
        q, a = $1, $2
        o = notwice(Object, klass, 'type')
        if a
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        else
          has_arg = true
        end
        sdesc << "-#{q}"
        short << Regexp.new(q)
      when /^-(.)(.+)?/
        q, a = $1, $2
        if a
          o = notwice(NilClass, klass, 'type')
          default_style = default_style.guess(arg = a)
          default_pattern, conv = search(:atype, o) unless default_pattern
        end
        sdesc << "-#{q}"
        short << q
      when /^=/
        style = notwice(default_style.guess(arg = o), style, 'style')
        default_pattern, conv = search(:atype, Object) unless default_pattern
      else
        desc.push(o) if o && !o.empty?
      end
    end

    default_pattern, conv = search(:atype, default_style.pattern) unless default_pattern
    if !(short.empty? and long.empty?)
      if has_arg and default_style == Switch::NoArgument
        default_style = Switch::RequiredArgument
      end
      s = (style || default_style).new(pattern || default_pattern,
                                       conv, sdesc, ldesc, arg, desc, block)
    elsif !block
      if style or pattern
        raise ArgumentError, "no switch given", ParseError.filter_backtrace(caller)
      end
      s = desc
    else
      short << pattern
      s = (style || default_style).new(pattern,
                                       conv, nil, nil, arg, desc, block)
    end
    return s, short, long,
      (not_style.new(not_pattern, not_conv, sdesc, ldesc, nil, desc, block) if not_style),
      nolong
  end

  # ----
  # Option definition phase methods
  #
  # These methods are used to define options, or to construct an
  # OptionParser instance in other words.

  # :call-seq:
  #   define(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def define(*opts, &block)
    top.append(*(sw = make_switch(opts, block)))
    sw[0]
  end

  # :call-seq:
  #   on(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def on(*opts, &block)
    define(*opts, &block)
    self
  end
  alias def_option define

  # :call-seq:
  #   define_head(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def define_head(*opts, &block)
    top.prepend(*(sw = make_switch(opts, block)))
    sw[0]
  end

  # :call-seq:
  #   on_head(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  # The new option is added at the head of the summary.
  #
  def on_head(*opts, &block)
    define_head(*opts, &block)
    self
  end
  alias def_head_option define_head

  # :call-seq:
  #   define_tail(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  def define_tail(*opts, &block)
    base.append(*(sw = make_switch(opts, block)))
    sw[0]
  end

  #
  # :call-seq:
  #   on_tail(*params, &block)
  #
  # :include: ../doc/optparse/creates_option.rdoc
  #
  # The new option is added at the tail of the summary.
  #
  def on_tail(*opts, &block)
    define_tail(*opts, &block)
    self
  end
  alias def_tail_option define_tail

  #
  # Add separator in summary.
  #
  def separator(string)
    top.append(string, nil, nil)
  end

  # ----
  # Arguments parse phase methods
  #
  # These methods parse +argv+, convert, and store the results by
  # calling handlers.  As these methods do not modify +self+, +self+
  # can be frozen.

  #
  # Parses command line arguments +argv+ in order. When a block is given,
  # each non-option argument is yielded. When optional +into+ keyword
  # argument is provided, the parsed option values are stored there via
  # <code>[]=</code> method (so it can be Hash, or OpenStruct, or other
  # similar object).
  #
  # Returns the rest of +argv+ left unparsed.
  #
  def order(*argv, **keywords, &nonopt)
    argv = argv[0].dup if argv.size == 1 and Array === argv[0]
    order!(argv, **keywords, &nonopt)
  end

  #
  # Same as #order, but removes switches destructively.
  # Non-option arguments remain in +argv+.
  #
  def order!(argv = default_argv, into: nil, **keywords, &nonopt)
    setter = ->(name, val) {into[name.to_sym] = val} if into
    parse_in_order(argv, setter, **keywords, &nonopt)
  end

  def parse_in_order(argv = default_argv, setter = nil, exact: require_exact, **, &nonopt)  # :nodoc:
    opt, arg, val, rest = nil
    nonopt ||= proc {|a| throw :terminate, a}
    argv.unshift(arg) if arg = catch(:terminate) {
      while arg = argv.shift
        case arg
        # long option
        when /\A--([^=]*)(?:=(.*))?/m
          opt, rest = $1, $2
          opt.tr!('_', '-')
          begin
            if exact
              sw, = search(:long, opt)
            else
              sw, = complete(:long, opt, true)
            end
          rescue ParseError
            throw :terminate, arg unless raise_unknown
            raise $!.set_option(arg, true)
          else
            unless sw
              throw :terminate, arg unless raise_unknown
              raise InvalidOption, arg
            end
          end
          begin
            opt, cb, val = sw.parse(rest, argv) {|*exc| raise(*exc)}
            val = callback!(cb, 1, val) if cb
            callback!(setter, 2, sw.switch_name, val) if setter
          rescue ParseError
            raise $!.set_option(arg, rest)
          end

        # short option
        when /\A-(.)((=).*|.+)?/m
          eq, rest, opt = $3, $2, $1
          has_arg, val = eq, rest
          begin
            sw, = search(:short, opt)
            unless sw
              begin
                sw, = complete(:short, opt)
                # short option matched.
                val = arg.delete_prefix('-')
                has_arg = true
              rescue InvalidOption
                raise if exact
                # if no short options match, try completion with long
                # options.
                sw, = complete(:long, opt)
                eq ||= !rest
              end
            end
          rescue ParseError
            throw :terminate, arg unless raise_unknown
            raise $!.set_option(arg, true)
          end
          begin
            opt, cb, val = sw.parse(val, argv) {|*exc| raise(*exc) if eq}
          rescue ParseError
            raise $!.set_option(arg, arg.length > 2)
          else
            raise InvalidOption, arg if has_arg and !eq and arg == "-#{opt}"
          end
          begin
            argv.unshift(opt) if opt and (!rest or (opt = opt.sub(/\A-*/, '-')) != '-')
            val = callback!(cb, 1, val) if cb
            callback!(setter, 2, sw.switch_name, val) if setter
          rescue ParseError
            raise $!.set_option(arg, arg.length > 2)
          end

        # non-option argument
        else
          catch(:prune) do
            visit(:each_option) do |sw0|
              sw = sw0
              sw.block.call(arg) if Switch === sw and sw.match_nonswitch?(arg)
            end
            nonopt.call(arg)
          end
        end
      end

      nil
    }

    visit(:search, :short, nil) {|sw| sw.block.call(*argv) if !sw.pattern}

    argv
  end
  private :parse_in_order

  # Calls callback with _val_.
  def callback!(cb, max_arity, *args) # :nodoc:
    args.compact!

    if (size = args.size) < max_arity and cb.to_proc.lambda?
      (arity = cb.arity) < 0 and arity = (1-arity)
      arity = max_arity if arity > max_arity
      args[arity - 1] = nil if arity > size
    end
    cb.call(*args)
  end
  private :callback!

  #
  # Parses command line arguments +argv+ in permutation mode and returns
  # list of non-option arguments. When optional +into+ keyword
  # argument is provided, the parsed option values are stored there via
  # <code>[]=</code> method (so it can be Hash, or OpenStruct, or other
  # similar object).
  #
  def permute(*argv, **keywords)
    argv = argv[0].dup if argv.size == 1 and Array === argv[0]
    permute!(argv, **keywords)
  end

  #
  # Same as #permute, but removes switches destructively.
  # Non-option arguments remain in +argv+.
  #
  def permute!(argv = default_argv, **keywords)
    nonopts = []
    order!(argv, **keywords, &nonopts.method(:<<))
    argv[0, 0] = nonopts
    argv
  end

  #
  # Parses command line arguments +argv+ in order when environment variable
  # POSIXLY_CORRECT is set, and in permutation mode otherwise.
  # When optional +into+ keyword argument is provided, the parsed option
  # values are stored there via <code>[]=</code> method (so it can be Hash,
  # or OpenStruct, or other similar object).
  #
  def parse(*argv, **keywords)
    argv = argv[0].dup if argv.size == 1 and Array === argv[0]
    parse!(argv, **keywords)
  end

  #
  # Same as #parse, but removes switches destructively.
  # Non-option arguments remain in +argv+.
  #
  def parse!(argv = default_argv, **keywords)
    if ENV.include?('POSIXLY_CORRECT')
      order!(argv, **keywords)
    else
      permute!(argv, **keywords)
    end
  end

  #
  # Wrapper method for getopts.rb.
  #
  #   params = ARGV.getopts("ab:", "foo", "bar:", "zot:Z;zot option")
  #   # params["a"] = true   # -a
  #   # params["b"] = "1"    # -b1
  #   # params["foo"] = "1"  # --foo
  #   # params["bar"] = "x"  # --bar x
  #   # params["zot"] = "z"  # --zot Z
  #
  # Option +symbolize_names+ (boolean) specifies whether returned Hash keys should be Symbols; defaults to +false+ (use Strings).
  #
  #   params = ARGV.getopts("ab:", "foo", "bar:", "zot:Z;zot option", symbolize_names: true)
  #   # params[:a] = true   # -a
  #   # params[:b] = "1"    # -b1
  #   # params[:foo] = "1"  # --foo
  #   # params[:bar] = "x"  # --bar x
  #   # params[:zot] = "z"  # --zot Z
  #
  def getopts(*args, symbolize_names: false, **keywords)
    argv = Array === args.first ? args.shift : default_argv
    single_options, *long_options = *args

    result = {}

    single_options.scan(/(.)(:)?/) do |opt, val|
      if val
        result[opt] = nil
        define("-#{opt} VAL")
      else
        result[opt] = false
        define("-#{opt}")
      end
    end if single_options

    long_options.each do |arg|
      arg, desc = arg.split(';', 2)
      opt, val = arg.split(':', 2)
      if val
        result[opt] = val.empty? ? nil : val
        define("--#{opt}=#{result[opt] || "VAL"}", *[desc].compact)
      else
        result[opt] = false
        define("--#{opt}", *[desc].compact)
      end
    end

    parse_in_order(argv, result.method(:[]=), **keywords)
    symbolize_names ? result.transform_keys(&:to_sym) : result
  end

  #
  # See #getopts.
  #
  def self.getopts(*args, symbolize_names: false)
    new.getopts(*args, symbolize_names: symbolize_names)
  end

  #
  # Traverses @stack, sending each element method +id+ with +args+ and
  # +block+.
  #
  def visit(id, *args, &block) # :nodoc:
    @stack.reverse_each do |el|
      el.__send__(id, *args, &block)
    end
    nil
  end
  private :visit

  #
  # Searches +key+ in @stack for +id+ hash and returns or yields the result.
  #
  def search(id, key) # :nodoc:
    block_given = block_given?
    visit(:search, id, key) do |k|
      return block_given ? yield(k) : k
    end
  end
  private :search

  #
  # Completes shortened long style option switch and returns pair of
  # canonical switch and switch descriptor OptionParser::Switch.
  #
  # +typ+::   Searching table.
  # +opt+::   Searching key.
  # +icase+:: Search case insensitive if true.
  # +pat+::   Optional pattern for completion.
  #
  def complete(typ, opt, icase = false, *pat) # :nodoc:
    if pat.empty?
      search(typ, opt) {|sw| return [sw, opt]} # exact match or...
    end
    ambiguous = catch(:ambiguous) {
      visit(:complete, typ, opt, icase, *pat) {|o, *sw| return sw}
    }
    exc = ambiguous ? AmbiguousOption : InvalidOption
    raise exc.new(opt, additional: self.method(:additional_message).curry[typ])
  end
  private :complete

  #
  # Returns additional info.
  #
  def additional_message(typ, opt)
    return unless typ and opt and defined?(DidYouMean::SpellChecker)
    all_candidates = []
    visit(:get_candidates, typ) do |candidates|
      all_candidates.concat(candidates)
    end
    all_candidates.select! {|cand| cand.is_a?(String) }
    checker = DidYouMean::SpellChecker.new(dictionary: all_candidates)
    DidYouMean.formatter.message_for(all_candidates & checker.correct(opt))
  end

  #
  # Return candidates for +word+.
  #
  def candidate(word)
    list = []
    case word
    when '-'
      long = short = true
    when /\A--/
      word, arg = word.split(/=/, 2)
      argpat = Completion.regexp(arg, false) if arg and !arg.empty?
      long = true
    when /\A-/
      short = true
    end
    pat = Completion.regexp(word, long)
    visit(:each_option) do |opt|
      next unless Switch === opt
      opts = (long ? opt.long : []) + (short ? opt.short : [])
      opts = Completion.candidate(word, true, pat, &opts.method(:each)).map(&:first) if pat
      if /\A=/ =~ opt.arg
        opts.map! {|sw| sw + "="}
        if arg and CompletingHash === opt.pattern
          if opts = opt.pattern.candidate(arg, false, argpat)
            opts.map!(&:last)
          end
        end
      end
      list.concat(opts)
    end
    list
  end

  #
  # Loads options from file names as +filename+. Does nothing when the file
  # is not present. Returns whether successfully loaded.
  #
  # +filename+ defaults to basename of the program without suffix in a
  # directory ~/.options, then the basename with '.options' suffix
  # under XDG and Haiku standard places.
  #
  # The optional +into+ keyword argument works exactly like that accepted in
  # method #parse.
  #
  def load(filename = nil, **keywords)
    unless filename
      basename = File.basename($0, '.*')
      return true if load(File.expand_path(basename, '~/.options'), **keywords) rescue nil
      basename << ".options"
      return [
        # XDG
        ENV['XDG_CONFIG_HOME'],
        '~/.config',
        *ENV['XDG_CONFIG_DIRS']&.split(File::PATH_SEPARATOR),

        # Haiku
        '~/config/settings',
      ].any? {|dir|
        next if !dir or dir.empty?
        load(File.expand_path(basename, dir), **keywords) rescue nil
      }
    end
    begin
      parse(*File.readlines(filename, chomp: true), **keywords)
      true
    rescue Errno::ENOENT, Errno::ENOTDIR
      false
    end
  end

  #
  # Parses environment variable +env+ or its uppercase with splitting like a
  # shell.
  #
  # +env+ defaults to the basename of the program.
  #
  def environment(env = File.basename($0, '.*'), **keywords)
    env = ENV[env] || ENV[env.upcase] or return
    require 'shellwords'
    parse(*Shellwords.shellwords(env), **keywords)
  end

  #
  # Acceptable argument classes
  #

  #
  # Any string and no conversion. This is fall-back.
  #
  accept(Object) {|s,|s or s.nil?}

  accept(NilClass) {|s,|s}

  #
  # Any non-empty string, and no conversion.
  #
  accept(String, /.+/m) {|s,*|s}

  #
  # Ruby/C-like integer, octal for 0-7 sequence, binary for 0b, hexadecimal
  # for 0x, and decimal for others; with optional sign prefix. Converts to
  # Integer.
  #
  decimal = '\d+(?:_\d+)*'
  binary = 'b[01]+(?:_[01]+)*'
  hex = 'x[\da-f]+(?:_[\da-f]+)*'
  octal = "0(?:[0-7]+(?:_[0-7]+)*|#{binary}|#{hex})?"
  integer = "#{octal}|#{decimal}"

  accept(Integer, %r"\A[-+]?(?:#{integer})\z"io) {|s,|
    begin
      Integer(s)
    rescue ArgumentError
      raise OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Float number format, and converts to Float.
  #
  float = "(?:#{decimal}(?=(.)?)(?:\\.(?:#{decimal})?)?|\\.#{decimal})(?:E[-+]?#{decimal})?"
  floatpat = %r"\A[-+]?#{float}\z"io
  accept(Float, floatpat) {|s,| s.to_f if s}

  #
  # Generic numeric format, converts to Integer for integer format, Float
  # for float format, and Rational for rational format.
  #
  real = "[-+]?(?:#{octal}|#{float})"
  accept(Numeric, /\A(#{real})(?:\/(#{real}))?\z/io) {|s, d, f, n,|
    if n
      Rational(d, n)
    elsif f
      Float(s)
    else
      Integer(s)
    end
  }

  #
  # Decimal integer format, to be converted to Integer.
  #
  DecimalInteger = /\A[-+]?#{decimal}\z/io
  accept(DecimalInteger, DecimalInteger) {|s,|
    begin
      Integer(s, 10)
    rescue ArgumentError
      raise OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Ruby/C like octal/hexadecimal/binary integer format, to be converted to
  # Integer.
  #
  OctalInteger = /\A[-+]?(?:[0-7]+(?:_[0-7]+)*|0(?:#{binary}|#{hex}))\z/io
  accept(OctalInteger, OctalInteger) {|s,|
    begin
      Integer(s, 8)
    rescue ArgumentError
      raise OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Decimal integer/float number format, to be converted to Integer for
  # integer format, Float for float format.
  #
  DecimalNumeric = floatpat     # decimal integer is allowed as float also.
  accept(DecimalNumeric, floatpat) {|s, f|
    begin
      if f
        Float(s)
      else
        Integer(s)
      end
    rescue ArgumentError
      raise OptionParser::InvalidArgument, s
    end if s
  }

  #
  # Boolean switch, which means whether it is present or not, whether it is
  # absent or not with prefix no-, or it takes an argument
  # yes/no/true/false/+/-.
  #
  yesno = CompletingHash.new
  %w[- no false].each {|el| yesno[el] = false}
  %w[+ yes true].each {|el| yesno[el] = true}
  yesno['nil'] = false          # should be nil?
  accept(TrueClass, yesno) {|arg, val| val == nil or val}
  #
  # Similar to TrueClass, but defaults to false.
  #
  accept(FalseClass, yesno) {|arg, val| val != nil and val}

  #
  # List of strings separated by ",".
  #
  accept(Array) do |s, |
    if s
      s = s.split(',').collect {|ss| ss unless ss.empty?}
    end
    s
  end

  #
  # Regular expression with options.
  #
  accept(Regexp, %r"\A/((?:\\.|[^\\])*)/([[:alpha:]]+)?\z|.*") do |all, s, o|
    f = 0
    if o
      f |= Regexp::IGNORECASE if /i/ =~ o
      f |= Regexp::MULTILINE if /m/ =~ o
      f |= Regexp::EXTENDED if /x/ =~ o
      case o = o.delete("imx")
      when ""
      when "u"
        s = s.encode(Encoding::UTF_8)
      when "e"
        s = s.encode(Encoding::EUC_JP)
      when "s"
        s = s.encode(Encoding::SJIS)
      when "n"
        f |= Regexp::NOENCODING
      else
        raise OptionParser::InvalidArgument, "unknown regexp option - #{o}"
      end
    else
      s ||= all
    end
    Regexp.new(s, f)
  end

  #
  # Exceptions
  #

  #
  # Base class of exceptions from OptionParser.
  #
  class ParseError < RuntimeError
    # Reason which caused the error.
    Reason = 'parse error'

    # :nodoc:
    def initialize(*args, additional: nil)
      @additional = additional
      @arg0, = args
      @args = args
      @reason = nil
    end

    attr_reader :args
    attr_writer :reason
    attr_accessor :additional

    #
    # Pushes back erred argument(s) to +argv+.
    #
    def recover(argv)
      argv[0, 0] = @args
      argv
    end

    def self.filter_backtrace(array)
      unless $DEBUG
        array.delete_if(&%r"\A#{Regexp.quote(__FILE__)}:"o.method(:=~))
      end
      array
    end

    def set_backtrace(array)
      super(self.class.filter_backtrace(array))
    end

    def set_option(opt, eq)
      if eq
        @args[0] = opt
      else
        @args.unshift(opt)
      end
      self
    end

    #
    # Returns error reason. Override this for I18N.
    #
    def reason
      @reason || self.class::Reason
    end

    def inspect
      "#<#{self.class}: #{args.join(' ')}>"
    end

    #
    # Default stringizing method to emit standard error message.
    #
    def message
      "#{reason}: #{args.join(' ')}#{additional[@arg0] if additional}"
    end

    alias to_s message
  end

  #
  # Raises when ambiguously completable string is encountered.
  #
  class AmbiguousOption < ParseError
    const_set(:Reason, 'ambiguous option')
  end

  #
  # Raises when there is an argument for a switch which takes no argument.
  #
  class NeedlessArgument < ParseError
    const_set(:Reason, 'needless argument')
  end

  #
  # Raises when a switch with mandatory argument has no argument.
  #
  class MissingArgument < ParseError
    const_set(:Reason, 'missing argument')
  end

  #
  # Raises when switch is undefined.
  #
  class InvalidOption < ParseError
    const_set(:Reason, 'invalid option')
  end

  #
  # Raises when the given argument does not match required format.
  #
  class InvalidArgument < ParseError
    const_set(:Reason, 'invalid argument')
  end

  #
  # Raises when the given argument word can't be completed uniquely.
  #
  class AmbiguousArgument < InvalidArgument
    const_set(:Reason, 'ambiguous argument')
  end

  #
  # Miscellaneous
  #

  #
  # Extends command line arguments array (ARGV) to parse itself.
  #
  module Arguable

    #
    # Sets OptionParser object, when +opt+ is +false+ or +nil+, methods
    # OptionParser::Arguable#options and OptionParser::Arguable#options= are
    # undefined. Thus, there is no ways to access the OptionParser object
    # via the receiver object.
    #
    def options=(opt)
      unless @optparse = opt
        class << self
          undef_method(:options)
          undef_method(:options=)
        end
      end
    end

    #
    # Actual OptionParser object, automatically created if nonexistent.
    #
    # If called with a block, yields the OptionParser object and returns the
    # result of the block. If an OptionParser::ParseError exception occurs
    # in the block, it is rescued, a error message printed to STDERR and
    # +nil+ returned.
    #
    def options
      @optparse ||= OptionParser.new
      @optparse.default_argv = self
      block_given? or return @optparse
      begin
        yield @optparse
      rescue ParseError
        @optparse.warn $!
        nil
      end
    end

    #
    # Parses +self+ destructively in order and returns +self+ containing the
    # rest arguments left unparsed.
    #
    def order!(**keywords, &blk) options.order!(self, **keywords, &blk) end

    #
    # Parses +self+ destructively in permutation mode and returns +self+
    # containing the rest arguments left unparsed.
    #
    def permute!(**keywords) options.permute!(self, **keywords) end

    #
    # Parses +self+ destructively and returns +self+ containing the
    # rest arguments left unparsed.
    #
    def parse!(**keywords) options.parse!(self, **keywords) end

    #
    # Substitution of getopts is possible as follows. Also see
    # OptionParser#getopts.
    #
    #   def getopts(*args)
    #     ($OPT = ARGV.getopts(*args)).each do |opt, val|
    #       eval "$OPT_#{opt.gsub(/[^A-Za-z0-9_]/, '_')} = val"
    #     end
    #   rescue OptionParser::ParseError
    #   end
    #
    def getopts(*args, symbolize_names: false, **keywords)
      options.getopts(self, *args, symbolize_names: symbolize_names, **keywords)
    end

    #
    # Initializes instance variable.
    #
    def self.extend_object(obj)
      super
      obj.instance_eval {@optparse = nil}
    end

    def initialize(*args)       # :nodoc:
      super
      @optparse = nil
    end
  end

  #
  # Acceptable argument classes. Now contains DecimalInteger, OctalInteger
  # and DecimalNumeric. See Acceptable argument classes (in source code).
  #
  module Acceptables
    const_set(:DecimalInteger, OptionParser::DecimalInteger)
    const_set(:OctalInteger, OptionParser::OctalInteger)
    const_set(:DecimalNumeric, OptionParser::DecimalNumeric)
  end
end

# ARGV is arguable by OptionParser
ARGV.extend(OptionParser::Arguable)

# An alias for OptionParser.
OptParse = OptionParser  # :nodoc:
PK*J[�g3�mImIshare/ruby/pp.rbnu�[���# frozen_string_literal: true

require 'prettyprint'

##
# A pretty-printer for Ruby objects.
#
##
# == What PP Does
#
# Standard output by #p returns this:
#   #<PP:0x81fedf0 @genspace=#<Proc:0x81feda0>, @group_queue=#<PrettyPrint::GroupQueue:0x81fed3c @queue=[[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], []]>, @buffer=[], @newline="\n", @group_stack=[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#<IO:0x8114ee4>>
#
# Pretty-printed output returns this:
#   #<PP:0x81fedf0
#    @buffer=[],
#    @buffer_width=0,
#    @genspace=#<Proc:0x81feda0>,
#    @group_queue=
#     #<PrettyPrint::GroupQueue:0x81fed3c
#      @queue=
#       [[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>],
#        []]>,
#    @group_stack=
#     [#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>],
#    @indent=0,
#    @maxwidth=79,
#    @newline="\n",
#    @output=#<IO:0x8114ee4>,
#    @output_width=2>
#
##
# == Usage
#
#   pp(obj)             #=> obj
#   pp obj              #=> obj
#   pp(obj1, obj2, ...) #=> [obj1, obj2, ...]
#   pp()                #=> nil
#
# Output <tt>obj(s)</tt> to <tt>$></tt> in pretty printed format.
#
# It returns <tt>obj(s)</tt>.
#
##
# == Output Customization
#
# To define a customized pretty printing function for your classes,
# redefine method <code>#pretty_print(pp)</code> in the class.
# Note that <code>require 'pp'</code> is needed before redefining <code>#pretty_print(pp)</code>.
#
# <code>#pretty_print</code> takes the +pp+ argument, which is an instance of the PP class.
# The method uses #text, #breakable, #nest, #group and #pp to print the
# object.
#
##
# == Pretty-Print JSON
#
# To pretty-print JSON refer to JSON#pretty_generate.
#
##
# == Author
# Tanaka Akira <akr@fsij.org>

class PP < PrettyPrint

  # The version string
  VERSION = "0.6.2"

  # Returns the usable width for +out+.
  # As the width of +out+:
  # 1. If +out+ is assigned to a tty device, its width is used.
  # 2. Otherwise, or it could not get the value, the +COLUMN+
  #    environment variable is assumed to be set to the width.
  # 3. If +COLUMN+ is not set to a non-zero number, 80 is assumed.
  #
  # And finally, returns the above width value - 1.
  # * This -1 is for Windows command prompt, which moves the cursor to
  #   the next line if it reaches the last column.
  def PP.width_for(out)
    begin
      require 'io/console'
      _, width = out.winsize
    rescue LoadError, NoMethodError, SystemCallError
    end
    (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1
  end

  # Outputs +obj+ to +out+ in pretty printed format of
  # +width+ columns in width.
  #
  # If +out+ is omitted, <code>$></code> is assumed.
  # If +width+ is omitted, the width of +out+ is assumed (see
  # width_for).
  #
  # PP.pp returns +out+.
  def PP.pp(obj, out=$>, width=width_for(out))
    q = new(out, width)
    q.guard_inspect_key {q.pp obj}
    q.flush
    #$pp = q
    out << "\n"
  end

  # Outputs +obj+ to +out+ like PP.pp but with no indent and
  # newline.
  #
  # PP.singleline_pp returns +out+.
  def PP.singleline_pp(obj, out=$>)
    q = SingleLine.new(out)
    q.guard_inspect_key {q.pp obj}
    q.flush
    out
  end

  # :stopdoc:
  def PP.mcall(obj, mod, meth, *args, &block)
    mod.instance_method(meth).bind_call(obj, *args, &block)
  end
  # :startdoc:

  if defined? ::Ractor
    class << self
      # Returns the sharing detection flag as a boolean value.
      # It is false (nil) by default.
      def sharing_detection
        Ractor.current[:pp_sharing_detection]
      end
      # Sets the sharing detection flag to b.
      def sharing_detection=(b)
        Ractor.current[:pp_sharing_detection] = b
      end
    end
  else
    @sharing_detection = false
    class << self
      # Returns the sharing detection flag as a boolean value.
      # It is false by default.
      attr_accessor :sharing_detection
    end
  end

  # Module that defines helper methods for pretty_print.
  module PPMethods

    # Yields to a block
    # and preserves the previous set of objects being printed.
    def guard_inspect_key
      if Thread.current[:__recursive_key__] == nil
        Thread.current[:__recursive_key__] = {}.compare_by_identity
      end

      if Thread.current[:__recursive_key__][:inspect] == nil
        Thread.current[:__recursive_key__][:inspect] = {}.compare_by_identity
      end

      save = Thread.current[:__recursive_key__][:inspect]

      begin
        Thread.current[:__recursive_key__][:inspect] = {}.compare_by_identity
        yield
      ensure
        Thread.current[:__recursive_key__][:inspect] = save
      end
    end

    # Check whether the object_id +id+ is in the current buffer of objects
    # to be pretty printed. Used to break cycles in chains of objects to be
    # pretty printed.
    def check_inspect_key(id)
      Thread.current[:__recursive_key__] &&
      Thread.current[:__recursive_key__][:inspect] &&
      Thread.current[:__recursive_key__][:inspect].include?(id)
    end

    # Adds the object_id +id+ to the set of objects being pretty printed, so
    # as to not repeat objects.
    def push_inspect_key(id)
      Thread.current[:__recursive_key__][:inspect][id] = true
    end

    # Removes an object from the set of objects being pretty printed.
    def pop_inspect_key(id)
      Thread.current[:__recursive_key__][:inspect].delete id
    end

    # Adds +obj+ to the pretty printing buffer
    # using Object#pretty_print or Object#pretty_print_cycle.
    #
    # Object#pretty_print_cycle is used when +obj+ is already
    # printed, a.k.a the object reference chain has a cycle.
    def pp(obj)
      # If obj is a Delegator then use the object being delegated to for cycle
      # detection
      obj = obj.__getobj__ if defined?(::Delegator) and ::Delegator === obj

      if check_inspect_key(obj)
        group {obj.pretty_print_cycle self}
        return
      end

      begin
        push_inspect_key(obj)
        group do
          obj.pretty_print self
        rescue NoMethodError
          text Kernel.instance_method(:inspect).bind_call(obj)
        end
      ensure
        pop_inspect_key(obj) unless PP.sharing_detection
      end
    end

    # A convenience method which is same as follows:
    #
    #   group(1, '#<' + obj.class.name, '>') { ... }
    def object_group(obj, &block) # :yield:
      group(1, '#<' + obj.class.name, '>', &block)
    end

    # A convenience method, like object_group, but also reformats the Object's
    # object_id.
    def object_address_group(obj, &block)
      str = Kernel.instance_method(:to_s).bind_call(obj)
      str.chomp!('>')
      group(1, str, '>', &block)
    end

    # A convenience method which is same as follows:
    #
    #   text ','
    #   breakable
    def comma_breakable
      text ','
      breakable
    end

    # Adds a separated list.
    # The list is separated by comma with breakable space, by default.
    #
    # #seplist iterates the +list+ using +iter_method+.
    # It yields each object to the block given for #seplist.
    # The procedure +separator_proc+ is called between each yields.
    #
    # If the iteration is zero times, +separator_proc+ is not called at all.
    #
    # If +separator_proc+ is nil or not given,
    # +lambda { comma_breakable }+ is used.
    # If +iter_method+ is not given, :each is used.
    #
    # For example, following 3 code fragments has similar effect.
    #
    #   q.seplist([1,2,3]) {|v| xxx v }
    #
    #   q.seplist([1,2,3], lambda { q.comma_breakable }, :each) {|v| xxx v }
    #
    #   xxx 1
    #   q.comma_breakable
    #   xxx 2
    #   q.comma_breakable
    #   xxx 3
    def seplist(list, sep=nil, iter_method=:each) # :yield: element
      sep ||= lambda { comma_breakable }
      first = true
      list.__send__(iter_method) {|*v|
        if first
          first = false
        else
          sep.call
        end
        RUBY_VERSION >= "3.0" ? yield(*v, **{}) : yield(*v)
      }
    end

    # A present standard failsafe for pretty printing any given Object
    def pp_object(obj)
      object_address_group(obj) {
        seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v|
          breakable
          v = v.to_s if Symbol === v
          text v
          text '='
          group(1) {
            breakable ''
            pp(obj.instance_eval(v))
          }
        }
      }
    end

    # A pretty print for a Hash
    def pp_hash(obj)
      group(1, '{', '}') {
        seplist(obj, nil, :each_pair) {|k, v|
          group {
            pp_hash_pair k, v
          }
        }
      }
    end

    if RUBY_VERSION >= '3.4.'
      # A pretty print for a pair of Hash
      def pp_hash_pair(k, v)
        if Symbol === k
          sym_s = k.inspect
          if sym_s[1].match?(/["$@!]/) || sym_s[-1].match?(/[%&*+\-\/<=>@\]^`|~]/)
            text "#{k.to_s.inspect}:"
          else
            text "#{k}:"
          end
        else
          pp k
          text ' '
          text '=>'
        end
        group(1) {
          breakable
          pp v
        }
      end
    else
      def pp_hash_pair(k, v)
        pp k
        text '=>'
        group(1) {
          breakable ''
          pp v
        }
      end
    end
  end

  include PPMethods

  class SingleLine < PrettyPrint::SingleLine # :nodoc:
    include PPMethods
  end

  module ObjectMixin # :nodoc:
    # 1. specific pretty_print
    # 2. specific inspect
    # 3. generic pretty_print

    # A default pretty printing method for general objects.
    # It calls #pretty_print_instance_variables to list instance variables.
    #
    # If +self+ has a customized (redefined) #inspect method,
    # the result of self.inspect is used but it obviously has no
    # line break hints.
    #
    # This module provides predefined #pretty_print methods for some of
    # the most commonly used built-in classes for convenience.
    def pretty_print(q)
      umethod_method = Object.instance_method(:method)
      begin
        inspect_method = umethod_method.bind_call(self, :inspect)
      rescue NameError
      end
      if inspect_method && inspect_method.owner != Kernel
        q.text self.inspect
      elsif !inspect_method && self.respond_to?(:inspect)
        q.text self.inspect
      else
        q.pp_object(self)
      end
    end

    # A default pretty printing method for general objects that are
    # detected as part of a cycle.
    def pretty_print_cycle(q)
      q.object_address_group(self) {
        q.breakable
        q.text '...'
      }
    end

    # Returns a sorted array of instance variable names.
    #
    # This method should return an array of names of instance variables as symbols or strings as:
    # +[:@a, :@b]+.
    def pretty_print_instance_variables
      instance_variables.sort
    end

    # Is #inspect implementation using #pretty_print.
    # If you implement #pretty_print, it can be used as follows.
    #
    #   alias inspect pretty_print_inspect
    #
    # However, doing this requires that every class that #inspect is called on
    # implement #pretty_print, or a RuntimeError will be raised.
    def pretty_print_inspect
      if Object.instance_method(:method).bind_call(self, :pretty_print).owner == PP::ObjectMixin
        raise "pretty_print is not overridden for #{self.class}"
      end
      PP.singleline_pp(self, ''.dup)
    end
  end
end

class Array # :nodoc:
  def pretty_print(q) # :nodoc:
    q.group(1, '[', ']') {
      q.seplist(self) {|v|
        q.pp v
      }
    }
  end

  def pretty_print_cycle(q) # :nodoc:
    q.text(empty? ? '[]' : '[...]')
  end
end

class Hash # :nodoc:
  def pretty_print(q) # :nodoc:
    q.pp_hash self
  end

  def pretty_print_cycle(q) # :nodoc:
    q.text(empty? ? '{}' : '{...}')
  end
end

class << ENV # :nodoc:
  def pretty_print(q) # :nodoc:
    h = {}
    ENV.keys.sort.each {|k|
      h[k] = ENV[k]
    }
    q.pp_hash h
  end
end

class Struct # :nodoc:
  def pretty_print(q) # :nodoc:
    q.group(1, sprintf("#<struct %s", PP.mcall(self, Kernel, :class).name), '>') {
      q.seplist(PP.mcall(self, Struct, :members), lambda { q.text "," }) {|member|
        q.breakable
        q.text member.to_s
        q.text '='
        q.group(1) {
          q.breakable ''
          q.pp self[member]
        }
      }
    }
  end

  def pretty_print_cycle(q) # :nodoc:
    q.text sprintf("#<struct %s:...>", PP.mcall(self, Kernel, :class).name)
  end
end

class Data # :nodoc:
  def pretty_print(q) # :nodoc:
    class_name = PP.mcall(self, Kernel, :class).name
    class_name = " #{class_name}" if class_name
    q.group(1, "#<data#{class_name}", '>') {

      members = PP.mcall(self, Kernel, :class).members
      values = []
      members.select! do |member|
        begin
          values << __send__(member)
          true
        rescue NoMethodError
          false
        end
      end

      q.seplist(members.zip(values), lambda { q.text "," }) {|(member, value)|
        q.breakable
        q.text member.to_s
        q.text '='
        q.group(1) {
          q.breakable ''
          q.pp value
        }
      }
    }
  end

  def pretty_print_cycle(q) # :nodoc:
    q.text sprintf("#<data %s:...>", PP.mcall(self, Kernel, :class).name)
  end
end if defined?(Data.define)

class Range # :nodoc:
  def pretty_print(q) # :nodoc:
    begin_nil = self.begin == nil
    end_nil = self.end == nil
    q.pp self.begin if !begin_nil || end_nil
    q.breakable ''
    q.text(self.exclude_end? ? '...' : '..')
    q.breakable ''
    q.pp self.end if !end_nil || begin_nil
  end
end

class String # :nodoc:
  def pretty_print(q) # :nodoc:
    lines = self.lines
    if lines.size > 1
      q.group(0, '', '') do
        q.seplist(lines, lambda { q.text ' +'; q.breakable }) do |v|
          q.pp v
        end
      end
    else
      q.text inspect
    end
  end
end

class File < IO # :nodoc:
  class Stat # :nodoc:
    def pretty_print(q) # :nodoc:
      require 'etc'
      q.object_group(self) {
        q.breakable
        q.text sprintf("dev=0x%x", self.dev); q.comma_breakable
        q.text "ino="; q.pp self.ino; q.comma_breakable
        q.group {
          m = self.mode
          q.text sprintf("mode=0%o", m)
          q.breakable
          q.text sprintf("(%s %c%c%c%c%c%c%c%c%c)",
            self.ftype,
            (m & 0400 == 0 ? ?- : ?r),
            (m & 0200 == 0 ? ?- : ?w),
            (m & 0100 == 0 ? (m & 04000 == 0 ? ?- : ?S) :
                             (m & 04000 == 0 ? ?x : ?s)),
            (m & 0040 == 0 ? ?- : ?r),
            (m & 0020 == 0 ? ?- : ?w),
            (m & 0010 == 0 ? (m & 02000 == 0 ? ?- : ?S) :
                             (m & 02000 == 0 ? ?x : ?s)),
            (m & 0004 == 0 ? ?- : ?r),
            (m & 0002 == 0 ? ?- : ?w),
            (m & 0001 == 0 ? (m & 01000 == 0 ? ?- : ?T) :
                             (m & 01000 == 0 ? ?x : ?t)))
        }
        q.comma_breakable
        q.text "nlink="; q.pp self.nlink; q.comma_breakable
        q.group {
          q.text "uid="; q.pp self.uid
          begin
            pw = Etc.getpwuid(self.uid)
          rescue ArgumentError
          end
          if pw
            q.breakable; q.text "(#{pw.name})"
          end
        }
        q.comma_breakable
        q.group {
          q.text "gid="; q.pp self.gid
          begin
            gr = Etc.getgrgid(self.gid)
          rescue ArgumentError
          end
          if gr
            q.breakable; q.text "(#{gr.name})"
          end
        }
        q.comma_breakable
        q.group {
          q.text sprintf("rdev=0x%x", self.rdev)
          if self.rdev_major && self.rdev_minor
            q.breakable
            q.text sprintf('(%d, %d)', self.rdev_major, self.rdev_minor)
          end
        }
        q.comma_breakable
        q.text "size="; q.pp self.size; q.comma_breakable
        q.text "blksize="; q.pp self.blksize; q.comma_breakable
        q.text "blocks="; q.pp self.blocks; q.comma_breakable
        q.group {
          t = self.atime
          q.text "atime="; q.pp t
          q.breakable; q.text "(#{t.tv_sec})"
        }
        q.comma_breakable
        q.group {
          t = self.mtime
          q.text "mtime="; q.pp t
          q.breakable; q.text "(#{t.tv_sec})"
        }
        q.comma_breakable
        q.group {
          t = self.ctime
          q.text "ctime="; q.pp t
          q.breakable; q.text "(#{t.tv_sec})"
        }
      }
    end
  end
end

class MatchData # :nodoc:
  def pretty_print(q) # :nodoc:
    nc = []
    self.regexp.named_captures.each {|name, indexes|
      indexes.each {|i| nc[i] = name }
    }
    q.object_group(self) {
      q.breakable
      q.seplist(0...self.size, lambda { q.breakable }) {|i|
        if i == 0
          q.pp self[i]
        else
          if nc[i]
            q.text nc[i]
          else
            q.pp i
          end
          q.text ':'
          q.pp self[i]
        end
      }
    }
  end
end

if defined?(RubyVM::AbstractSyntaxTree)
  class RubyVM::AbstractSyntaxTree::Node # :nodoc:
    def pretty_print_children(q, names = [])
      children.zip(names) do |c, n|
        if n
          q.breakable
          q.text "#{n}:"
        end
        q.group(2) do
          q.breakable
          q.pp c
        end
      end
    end

    def pretty_print(q)
      q.group(1, "(#{type}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") {
        case type
        when :SCOPE
          pretty_print_children(q, %w"tbl args body")
        when :ARGS
          pretty_print_children(q, %w[pre_num pre_init opt first_post post_num post_init rest kw kwrest block])
        when :DEFN
          pretty_print_children(q, %w[mid body])
        when :ARYPTN
          pretty_print_children(q, %w[const pre rest post])
        when :HSHPTN
          pretty_print_children(q, %w[const kw kwrest])
        else
          pretty_print_children(q)
        end
      }
    end
  end
end

class Object < BasicObject # :nodoc:
  include PP::ObjectMixin
end

[Numeric, Symbol, FalseClass, TrueClass, NilClass, Module].each {|c|
  c.class_eval {
    def pretty_print_cycle(q)
      q.text inspect
    end
  }
}

[Numeric, FalseClass, TrueClass, Module].each {|c|
  c.class_eval {
    def pretty_print(q)
      q.text inspect
    end
  }
}

module Kernel
  # Returns a pretty printed object as a string.
  #
  # See the PP module for more information.
  def pretty_inspect
    PP.pp(self, ''.dup)
  end

  # prints arguments in pretty form.
  #
  # +#pp+ returns argument(s).
  def pp(*objs)
    objs.each {|obj|
      PP.pp(obj)
    }
    objs.size <= 1 ? objs.first : objs
  end
  module_function :pp
end
PK*J[R*�share/ruby/did_you_mean.rbnu�[���require_relative "did_you_mean/version"
require_relative "did_you_mean/core_ext/name_error"

require_relative "did_you_mean/spell_checker"
require_relative 'did_you_mean/spell_checkers/name_error_checkers'
require_relative 'did_you_mean/spell_checkers/method_name_checker'
require_relative 'did_you_mean/spell_checkers/key_error_checker'
require_relative 'did_you_mean/spell_checkers/null_checker'
require_relative 'did_you_mean/spell_checkers/require_path_checker'
require_relative 'did_you_mean/spell_checkers/pattern_key_name_checker'
require_relative 'did_you_mean/formatter'
require_relative 'did_you_mean/tree_spell_checker'

# The +DidYouMean+ gem adds functionality to suggest possible method/class
# names upon errors such as +NameError+ and +NoMethodError+. In Ruby 2.3 or
# later, it is automatically activated during startup.
#
# @example
#
#   methosd
#   # => NameError: undefined local variable or method `methosd' for main:Object
#   #   Did you mean?  methods
#   #                  method
#
#   OBject
#   # => NameError: uninitialized constant OBject
#   #    Did you mean?  Object
#
#   @full_name = "Yuki Nishijima"
#   first_name, last_name = full_name.split(" ")
#   # => NameError: undefined local variable or method `full_name' for main:Object
#   #    Did you mean?  @full_name
#
#   @@full_name = "Yuki Nishijima"
#   @@full_anme
#   # => NameError: uninitialized class variable @@full_anme in Object
#   #    Did you mean?  @@full_name
#
#   full_name = "Yuki Nishijima"
#   full_name.starts_with?("Y")
#   # => NoMethodError: undefined method `starts_with?' for "Yuki Nishijima":String
#   #    Did you mean?  start_with?
#
#   hash = {foo: 1, bar: 2, baz: 3}
#   hash.fetch(:fooo)
#   # => KeyError: key not found: :fooo
#   #    Did you mean?  :foo
#
#
# == Disabling +did_you_mean+
#
# Occasionally, you may want to disable the +did_you_mean+ gem for e.g.
# debugging issues in the error object itself. You can disable it entirely by
# specifying +--disable-did_you_mean+ option to the +ruby+ command:
#
#   $ ruby --disable-did_you_mean -e "1.zeor?"
#   -e:1:in `<main>': undefined method `zeor?' for 1:Integer (NameError)
#
# When you do not have direct access to the +ruby+ command (e.g.
# +rails console+, +irb+), you could applyoptions using the +RUBYOPT+
# environment variable:
#
#   $ RUBYOPT='--disable-did_you_mean' irb
#   irb:0> 1.zeor?
#   # => NoMethodError (undefined method `zeor?' for 1:Integer)
#
#
# == Getting the original error message
#
# Sometimes, you do not want to disable the gem entirely, but need to get the
# original error message without suggestions (e.g. testing). In this case, you
# could use the +#original_message+ method on the error object:
#
#   no_method_error = begin
#                       1.zeor?
#                     rescue NoMethodError => error
#                       error
#                     end
#
#   no_method_error.message
#   # => NoMethodError (undefined method `zeor?' for 1:Integer)
#   #    Did you mean?  zero?
#
#   no_method_error.original_message
#   # => NoMethodError (undefined method `zeor?' for 1:Integer)
#
module DidYouMean
  # Map of error types and spell checker objects.
  @spell_checkers = Hash.new(NullChecker)

  # Returns a sharable hash map of error types and spell checker objects.
  def self.spell_checkers
    @spell_checkers
  end

  # Adds +DidYouMean+ functionality to an error using a given spell checker
  def self.correct_error(error_class, spell_checker)
    if defined?(Ractor)
      new_mapping = { **@spell_checkers, error_class.to_s => spell_checker }
      new_mapping.default = NullChecker

      @spell_checkers = Ractor.make_shareable(new_mapping)
    else
      spell_checkers[error_class.to_s] = spell_checker
    end

    error_class.prepend(Correctable) if error_class.is_a?(Class) && !(error_class < Correctable)
  end

  correct_error NameError, NameErrorCheckers
  correct_error KeyError, KeyErrorChecker
  correct_error NoMethodError, MethodNameChecker
  correct_error LoadError, RequirePathChecker if RUBY_VERSION >= '2.8.0'
  correct_error NoMatchingPatternKeyError, PatternKeyNameChecker if defined?(::NoMatchingPatternKeyError)

  # Returns the currently set formatter. By default, it is set to +DidYouMean::Formatter+.
  def self.formatter
    if defined?(Ractor)
      Ractor.current[:__did_you_mean_formatter__] || Formatter
    else
      Formatter
    end
  end

  # Updates the primary formatter used to format the suggestions.
  def self.formatter=(formatter)
    if defined?(Ractor)
      Ractor.current[:__did_you_mean_formatter__] = formatter
    end
  end
end
PK*J[~�֨�q�qshare/ruby/open-uri.rbnu�[���# frozen_string_literal: true
require 'uri'
require 'stringio'
require 'time'

module URI
  # Allows the opening of various resources including URIs.
  #
  # If the first argument responds to the 'open' method, 'open' is called on
  # it with the rest of the arguments.
  #
  # If the first argument is a string that begins with <code>(protocol)://</code>, it is parsed by
  # URI.parse.  If the parsed object responds to the 'open' method,
  # 'open' is called on it with the rest of the arguments.
  #
  # Otherwise, Kernel#open is called.
  #
  # OpenURI::OpenRead#open provides URI::HTTP#open, URI::HTTPS#open and
  # URI::FTP#open, Kernel#open.
  #
  # We can accept URIs and strings that begin with http://, https:// and
  # ftp://. In these cases, the opened file object is extended by OpenURI::Meta.
  def self.open(name, *rest, &block)
    if name.respond_to?(:open)
      name.open(*rest, &block)
    elsif name.respond_to?(:to_str) &&
          %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ name &&
          (uri = URI.parse(name)).respond_to?(:open)
      uri.open(*rest, &block)
    else
      super
    end
  end
  singleton_class.send(:ruby2_keywords, :open) if respond_to?(:ruby2_keywords, true)
end

# OpenURI is an easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP.
#
# == Example
#
# It is possible to open an http, https or ftp URL as though it were a file:
#
#   URI.open("http://www.ruby-lang.org/") {|f|
#     f.each_line {|line| p line}
#   }
#
# The opened file has several getter methods for its meta-information, as
# follows, since it is extended by OpenURI::Meta.
#
#   URI.open("http://www.ruby-lang.org/en") {|f|
#     f.each_line {|line| p line}
#     p f.base_uri         # <URI::HTTP:0x40e6ef2 URL:http://www.ruby-lang.org/en/>
#     p f.content_type     # "text/html"
#     p f.charset          # "iso-8859-1"
#     p f.content_encoding # []
#     p f.last_modified    # Thu Dec 05 02:45:02 UTC 2002
#   }
#
# Additional header fields can be specified by an optional hash argument.
#
#   URI.open("http://www.ruby-lang.org/en/",
#     "User-Agent" => "Ruby/#{RUBY_VERSION}",
#     "From" => "foo@bar.invalid",
#     "Referer" => "http://www.ruby-lang.org/") {|f|
#     # ...
#   }
#
# The environment variables such as http_proxy, https_proxy and ftp_proxy
# are in effect by default. Here we disable proxy:
#
#   URI.open("http://www.ruby-lang.org/en/", :proxy => nil) {|f|
#     # ...
#   }
#
# See OpenURI::OpenRead.open and URI.open for more on available options.
#
# URI objects can be opened in a similar way.
#
#   uri = URI.parse("http://www.ruby-lang.org/en/")
#   uri.open {|f|
#     # ...
#   }
#
# URI objects can be read directly. The returned string is also extended by
# OpenURI::Meta.
#
#   str = uri.read
#   p str.base_uri
#
# Author:: Tanaka Akira <akr@m17n.org>

module OpenURI

  VERSION = "0.5.0"

  Options = {
    :proxy => true,
    :proxy_http_basic_authentication => true,
    :progress_proc => true,
    :content_length_proc => true,
    :http_basic_authentication => true,
    :read_timeout => true,
    :open_timeout => true,
    :ssl_ca_cert => nil,
    :ssl_verify_mode => nil,
    :ssl_min_version => nil,
    :ssl_max_version => nil,
    :ftp_active_mode => false,
    :redirect => true,
    :encoding => nil,
    :max_redirects => 64,
    :request_specific_fields => nil,
  }

  def OpenURI.check_options(options) # :nodoc:
    options.each {|k, v|
      next unless Symbol === k
      unless Options.include? k
        raise ArgumentError, "unrecognized option: #{k}"
      end
    }
  end

  def OpenURI.scan_open_optional_arguments(*rest) # :nodoc:
    if !rest.empty? && (String === rest.first || Integer === rest.first)
      mode = rest.shift
      if !rest.empty? && Integer === rest.first
        perm = rest.shift
      end
    end
    return mode, perm, rest
  end

  def OpenURI.open_uri(name, *rest) # :nodoc:
    uri = URI::Generic === name ? name : URI.parse(name)
    mode, _, rest = OpenURI.scan_open_optional_arguments(*rest)
    options = rest.shift if !rest.empty? && Hash === rest.first
    raise ArgumentError.new("extra arguments") if !rest.empty?
    options ||= {}
    OpenURI.check_options(options)

    if /\Arb?(?:\Z|:([^:]+))/ =~ mode
      encoding, = $1,Encoding.find($1) if $1
      mode = nil
    end
    if options.has_key? :encoding
      if !encoding.nil?
        raise ArgumentError, "encoding specified twice"
      end
      encoding = Encoding.find(options[:encoding])
    end
    if options.has_key? :request_specific_fields
      if !(options[:request_specific_fields].is_a?(Hash) || options[:request_specific_fields].is_a?(Proc))
        raise ArgumentError, "Invalid request_specific_fields option: #{options[:request_specific_fields].inspect}"
      end
    end
    unless mode == nil ||
           mode == 'r' || mode == 'rb' ||
           mode == File::RDONLY
      raise ArgumentError.new("invalid access mode #{mode} (#{uri.class} resource is read only.)")
    end

    io = open_loop(uri, options)
    io.set_encoding(encoding) if encoding
    if block_given?
      begin
        yield io
      ensure
        if io.respond_to? :close!
          io.close! # Tempfile
        else
          io.close if !io.closed?
        end
      end
    else
      io
    end
  end

  def OpenURI.open_loop(uri, options) # :nodoc:
    proxy_opts = []
    proxy_opts << :proxy_http_basic_authentication if options.include? :proxy_http_basic_authentication
    proxy_opts << :proxy if options.include? :proxy
    proxy_opts.compact!
    if 1 < proxy_opts.length
      raise ArgumentError, "multiple proxy options specified"
    end
    case proxy_opts.first
    when :proxy_http_basic_authentication
      opt_proxy, proxy_user, proxy_pass = options.fetch(:proxy_http_basic_authentication)
      proxy_user = proxy_user.to_str
      proxy_pass = proxy_pass.to_str
      if opt_proxy == true
        raise ArgumentError.new("Invalid authenticated proxy option: #{options[:proxy_http_basic_authentication].inspect}")
      end
    when :proxy
      opt_proxy = options.fetch(:proxy)
      proxy_user = nil
      proxy_pass = nil
    when nil
      opt_proxy = true
      proxy_user = nil
      proxy_pass = nil
    end
    case opt_proxy
    when true
      find_proxy = lambda {|u| pxy = u.find_proxy; pxy ? [pxy, nil, nil] : nil}
    when nil, false
      find_proxy = lambda {|u| nil}
    when String
      opt_proxy = URI.parse(opt_proxy)
      find_proxy = lambda {|u| [opt_proxy, proxy_user, proxy_pass]}
    when URI::Generic
      find_proxy = lambda {|u| [opt_proxy, proxy_user, proxy_pass]}
    else
      raise ArgumentError.new("Invalid proxy option: #{opt_proxy}")
    end

    uri_set = {}
    max_redirects = options[:max_redirects] || Options.fetch(:max_redirects)
    buf = nil
    while true
      request_specific_fields = {}
      if options.has_key? :request_specific_fields
        request_specific_fields = if options[:request_specific_fields].is_a?(Hash)
                                    options[:request_specific_fields]
                                  else options[:request_specific_fields].is_a?(Proc)
                                    options[:request_specific_fields].call(uri)
                                  end
      end
      redirect = catch(:open_uri_redirect) {
        buf = Buffer.new
        uri.buffer_open(buf, find_proxy.call(uri), options.merge(request_specific_fields))
        nil
      }
      if redirect
        if redirect.relative?
          # Although it violates RFC2616, Location: field may have relative
          # URI.  It is converted to absolute URI using uri as a base URI.
          redirect = uri + redirect
        end
        if !options.fetch(:redirect, true)
          raise HTTPRedirect.new(buf.io.status.join(' '), buf.io, redirect)
        end
        unless OpenURI.redirectable?(uri, redirect)
          raise "redirection forbidden: #{uri} -> #{redirect}"
        end
        if options.include? :http_basic_authentication
          # send authentication only for the URI directly specified.
          options = options.dup
          options.delete :http_basic_authentication
        end
        if options.include?(:request_specific_fields) && options[:request_specific_fields].is_a?(Hash)
          # Send request specific headers only for the initial request.
          options.delete :request_specific_fields
        end
        uri = redirect
        raise "HTTP redirection loop: #{uri}" if uri_set.include? uri.to_s
        uri_set[uri.to_s] = true
        raise TooManyRedirects.new("Too many redirects", buf.io) if max_redirects && uri_set.size > max_redirects
      else
        break
      end
    end
    io = buf.io
    io.base_uri = uri
    io
  end

  def OpenURI.redirectable?(uri1, uri2) # :nodoc:
    # This test is intended to forbid a redirection from http://... to
    # file:///etc/passwd, file:///dev/zero, etc.  CVE-2011-1521
    # https to http redirect is also forbidden intentionally.
    # It avoids sending secure cookie or referer by non-secure HTTP protocol.
    # (RFC 2109 4.3.1, RFC 2965 3.3, RFC 2616 15.1.3)
    # However this is ad hoc.  It should be extensible/configurable.
    uri1.scheme.downcase == uri2.scheme.downcase ||
    (/\A(?:http|ftp)\z/i =~ uri1.scheme && /\A(?:https?|ftp)\z/i =~ uri2.scheme)
  end

  def OpenURI.open_http(buf, target, proxy, options) # :nodoc:
    if proxy
      proxy_uri, proxy_user, proxy_pass = proxy
      raise "Non-HTTP proxy URI: #{proxy_uri}" if proxy_uri.class != URI::HTTP
    end

    if target.userinfo
      raise ArgumentError, "userinfo not supported.  [RFC3986]"
    end

    header = {}
    options.each {|k, v| header[k] = v if String === k }

    require 'net/http'
    klass = Net::HTTP
    if URI::HTTP === target
      # HTTP or HTTPS
      if proxy
        unless proxy_user && proxy_pass
          proxy_user, proxy_pass = proxy_uri.userinfo.split(':') if proxy_uri.userinfo
        end
        if proxy_user && proxy_pass
          klass = Net::HTTP::Proxy(proxy_uri.hostname, proxy_uri.port, proxy_user, proxy_pass)
        else
          klass = Net::HTTP::Proxy(proxy_uri.hostname, proxy_uri.port)
        end
      end
      target_host = target.hostname
      target_port = target.port
      request_uri = target.request_uri
    else
      # FTP over HTTP proxy
      target_host = proxy_uri.hostname
      target_port = proxy_uri.port
      request_uri = target.to_s
      if proxy_user && proxy_pass
        header["Proxy-Authorization"] =
                        'Basic ' + ["#{proxy_user}:#{proxy_pass}"].pack('m0')
      end
    end

    http = proxy ? klass.new(target_host, target_port) : klass.new(target_host, target_port, nil)
    if target.class == URI::HTTPS
      require 'net/https'
      http.use_ssl = true
      http.verify_mode = options[:ssl_verify_mode] || OpenSSL::SSL::VERIFY_PEER
      http.min_version = options[:ssl_min_version]
      http.max_version = options[:ssl_max_version]
      store = OpenSSL::X509::Store.new
      if options[:ssl_ca_cert]
        Array(options[:ssl_ca_cert]).each do |cert|
          if File.directory? cert
            store.add_path cert
          else
            store.add_file cert
          end
        end
      else
        store.set_default_paths
      end
      http.cert_store = store
    end
    if options.include? :read_timeout
      http.read_timeout = options[:read_timeout]
    end
    if options.include? :open_timeout
      http.open_timeout = options[:open_timeout]
    end

    resp = nil
    http.start {
      req = Net::HTTP::Get.new(request_uri, header)
      if options.include? :http_basic_authentication
        user, pass = options[:http_basic_authentication]
        req.basic_auth user, pass
      end
      http.request(req) {|response|
        resp = response
        if options[:content_length_proc] && Net::HTTPSuccess === resp
          if resp.key?('Content-Length')
            options[:content_length_proc].call(resp['Content-Length'].to_i)
          else
            options[:content_length_proc].call(nil)
          end
        end
        resp.read_body {|str|
          buf << str
          if options[:progress_proc] && Net::HTTPSuccess === resp
            options[:progress_proc].call(buf.size)
          end
          str.clear
        }
      }
    }
    io = buf.io
    io.rewind
    io.status = [resp.code, resp.message]
    resp.each_name {|name| buf.io.meta_add_field2 name, resp.get_fields(name) }
    case resp
    when Net::HTTPSuccess
    when Net::HTTPMovedPermanently, # 301
         Net::HTTPFound, # 302
         Net::HTTPSeeOther, # 303
         Net::HTTPTemporaryRedirect, # 307
         Net::HTTPPermanentRedirect # 308
      begin
        loc_uri = URI.parse(resp['location'])
      rescue URI::InvalidURIError
        raise OpenURI::HTTPError.new(io.status.join(' ') + ' (Invalid Location URI)', io)
      end
      throw :open_uri_redirect, loc_uri
    else
      raise OpenURI::HTTPError.new(io.status.join(' '), io)
    end
  end

  class HTTPError < StandardError
    def initialize(message, io)
      super(message)
      @io = io
    end
    attr_reader :io
  end

  # Raised on redirection,
  # only occurs when +redirect+ option for HTTP is +false+.
  class HTTPRedirect < HTTPError
    def initialize(message, io, uri)
      super(message, io)
      @uri = uri
    end
    attr_reader :uri
  end

  class TooManyRedirects < HTTPError
  end

  class Buffer # :nodoc: all
    def initialize
      @io = StringIO.new
      @size = 0
    end
    attr_reader :size

    StringMax = 10240
    def <<(str)
      @io << str
      @size += str.length
      if StringIO === @io && StringMax < @size
        require 'tempfile'
        io = Tempfile.new('open-uri')
        io.binmode
        Meta.init io, @io if Meta === @io
        io << @io.string
        @io = io
      end
    end

    def io
      Meta.init @io unless Meta === @io
      @io
    end
  end

  # :stopdoc:
  RE_LWS = /[\r\n\t ]+/n
  RE_TOKEN = %r{[^\x00- ()<>@,;:\\"/\[\]?={}\x7f]+}n
  RE_QUOTED_STRING = %r{"(?:[\r\n\t !#-\[\]-~\x80-\xff]|\\[\x00-\x7f])*"}n
  RE_PARAMETERS = %r{(?:;#{RE_LWS}?#{RE_TOKEN}#{RE_LWS}?=#{RE_LWS}?(?:#{RE_TOKEN}|#{RE_QUOTED_STRING})#{RE_LWS}?)*}n
  # :startdoc:

  # Mixin for holding meta-information.
  module Meta
    def Meta.init(obj, src=nil) # :nodoc:
      obj.extend Meta
      obj.instance_eval {
        @base_uri = nil
        @meta = {} # name to string.  legacy.
        @metas = {} # name to array of strings.
      }
      if src
        obj.status = src.status
        obj.base_uri = src.base_uri
        src.metas.each {|name, values|
          obj.meta_add_field2(name, values)
        }
      end
    end

    # returns an Array that consists of status code and message.
    attr_accessor :status

    # returns a URI that is the base of relative URIs in the data.
    # It may differ from the URI supplied by a user due to redirection.
    attr_accessor :base_uri

    # returns a Hash that represents header fields.
    # The Hash keys are downcased for canonicalization.
    # The Hash values are a field body.
    # If there are multiple field with same field name,
    # the field values are concatenated with a comma.
    attr_reader :meta

    # returns a Hash that represents header fields.
    # The Hash keys are downcased for canonicalization.
    # The Hash value are an array of field values.
    attr_reader :metas

    def meta_setup_encoding # :nodoc:
      charset = self.charset
      enc = nil
      if charset
        begin
          enc = Encoding.find(charset)
        rescue ArgumentError
        end
      end
      enc = Encoding::ASCII_8BIT unless enc
      if self.respond_to? :force_encoding
        self.force_encoding(enc)
      elsif self.respond_to? :string
        self.string.force_encoding(enc)
      else # Tempfile
        self.set_encoding enc
      end
    end

    def meta_add_field2(name, values) # :nodoc:
      name = name.downcase
      @metas[name] = values
      @meta[name] = values.join(', ')
      meta_setup_encoding if name == 'content-type'
    end

    def meta_add_field(name, value) # :nodoc:
      meta_add_field2(name, [value])
    end

    # returns a Time that represents the Last-Modified field.
    def last_modified
      if vs = @metas['last-modified']
        v = vs.join(', ')
        Time.httpdate(v)
      else
        nil
      end
    end

    def content_type_parse # :nodoc:
      vs = @metas['content-type']
      # The last (?:;#{RE_LWS}?)? matches extra ";" which violates RFC2045.
      if vs && %r{\A#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?/(#{RE_TOKEN})#{RE_LWS}?(#{RE_PARAMETERS})(?:;#{RE_LWS}?)?\z}no =~ vs.join(', ')
        type = $1.downcase
        subtype = $2.downcase
        parameters = []
        $3.scan(/;#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?=#{RE_LWS}?(?:(#{RE_TOKEN})|(#{RE_QUOTED_STRING}))/no) {|att, val, qval|
          if qval
            val = qval[1...-1].gsub(/[\r\n\t !#-\[\]-~\x80-\xff]+|(\\[\x00-\x7f])/n) { $1 ? $1[1,1] : $& }
          end
          parameters << [att.downcase, val]
        }
        ["#{type}/#{subtype}", *parameters]
      else
        nil
      end
    end

    # returns "type/subtype" which is MIME Content-Type.
    # It is downcased for canonicalization.
    # Content-Type parameters are stripped.
    def content_type
      type, *_ = content_type_parse
      type || 'application/octet-stream'
    end

    # returns a charset parameter in Content-Type field.
    # It is downcased for canonicalization.
    #
    # If charset parameter is not given but a block is given,
    # the block is called and its result is returned.
    # It can be used to guess charset.
    #
    # If charset parameter and block is not given,
    # nil is returned except text type.
    # In that case, "utf-8" is returned as defined by RFC6838 4.2.1
    def charset
      type, *parameters = content_type_parse
      if pair = parameters.assoc('charset')
        pair.last.downcase
      elsif block_given?
        yield
      elsif type && %r{\Atext/} =~ type
        "utf-8" # RFC6838 4.2.1
      else
        nil
      end
    end

    # Returns a list of encodings in Content-Encoding field as an array of
    # strings.
    #
    # The encodings are downcased for canonicalization.
    def content_encoding
      vs = @metas['content-encoding']
      if vs && %r{\A#{RE_LWS}?#{RE_TOKEN}#{RE_LWS}?(?:,#{RE_LWS}?#{RE_TOKEN}#{RE_LWS}?)*}o =~ (v = vs.join(', '))
        v.scan(RE_TOKEN).map {|content_coding| content_coding.downcase}
      else
        []
      end
    end
  end

  # Mixin for HTTP and FTP URIs.
  module OpenRead
    # OpenURI::OpenRead#open provides `open' for URI::HTTP and URI::FTP.
    #
    # OpenURI::OpenRead#open takes optional 3 arguments as:
    #
    #   OpenURI::OpenRead#open([mode [, perm]] [, options]) [{|io| ... }]
    #
    # OpenURI::OpenRead#open returns an IO-like object if block is not given.
    # Otherwise it yields the IO object and return the value of the block.
    # The IO object is extended with OpenURI::Meta.
    #
    # +mode+ and +perm+ are the same as Kernel#open.
    #
    # However, +mode+ must be read mode because OpenURI::OpenRead#open doesn't
    # support write mode (yet).
    # Also +perm+ is ignored because it is meaningful only for file creation.
    #
    # +options+ must be a hash.
    #
    # Each option with a string key specifies an extra header field for HTTP.
    # I.e., it is ignored for FTP without HTTP proxy.
    #
    # The hash may include other options, where keys are symbols:
    #
    # [:proxy]
    #  Synopsis:
    #    :proxy => "http://proxy.foo.com:8000/"
    #    :proxy => URI.parse("http://proxy.foo.com:8000/")
    #    :proxy => true
    #    :proxy => false
    #    :proxy => nil
    #
    #  If :proxy option is specified, the value should be String, URI,
    #  boolean or nil.
    #
    #  When String or URI is given, it is treated as proxy URI.
    #
    #  When true is given or the option itself is not specified,
    #  environment variable `scheme_proxy' is examined.
    #  `scheme' is replaced by `http', `https' or `ftp'.
    #
    #  When false or nil is given, the environment variables are ignored and
    #  connection will be made to a server directly.
    #
    # [:proxy_http_basic_authentication]
    #  Synopsis:
    #    :proxy_http_basic_authentication =>
    #      ["http://proxy.foo.com:8000/", "proxy-user", "proxy-password"]
    #    :proxy_http_basic_authentication =>
    #      [URI.parse("http://proxy.foo.com:8000/"),
    #       "proxy-user", "proxy-password"]
    #
    #  If :proxy option is specified, the value should be an Array with 3
    #  elements.  It should contain a proxy URI, a proxy user name and a proxy
    #  password.  The proxy URI should be a String, an URI or nil.  The proxy
    #  user name and password should be a String.
    #
    #  If nil is given for the proxy URI, this option is just ignored.
    #
    #  If :proxy and :proxy_http_basic_authentication is specified,
    #  ArgumentError is raised.
    #
    # [:http_basic_authentication]
    #  Synopsis:
    #    :http_basic_authentication=>[user, password]
    #
    #  If :http_basic_authentication is specified,
    #  the value should be an array which contains 2 strings:
    #  username and password.
    #  It is used for HTTP Basic authentication defined by RFC 2617.
    #
    # [:content_length_proc]
    #  Synopsis:
    #    :content_length_proc => lambda {|content_length| ... }
    #
    #  If :content_length_proc option is specified, the option value procedure
    #  is called before actual transfer is started.
    #  It takes one argument, which is expected content length in bytes.
    #
    #  If two or more transfers are performed by HTTP redirection, the
    #  procedure is called only once for the last transfer.
    #
    #  When expected content length is unknown, the procedure is called with
    #  nil.  This happens when the HTTP response has no Content-Length header.
    #
    # [:progress_proc]
    #  Synopsis:
    #    :progress_proc => lambda {|size| ...}
    #
    #  If :progress_proc option is specified, the proc is called with one
    #  argument each time when `open' gets content fragment from network.
    #  The argument +size+ is the accumulated transferred size in bytes.
    #
    #  If two or more transfer is done by HTTP redirection, the procedure
    #  is called only one for a last transfer.
    #
    #  :progress_proc and :content_length_proc are intended to be used for
    #  progress bar.
    #  For example, it can be implemented as follows using Ruby/ProgressBar.
    #
    #    pbar = nil
    #    open("http://...",
    #      :content_length_proc => lambda {|t|
    #        if t && 0 < t
    #          pbar = ProgressBar.new("...", t)
    #          pbar.file_transfer_mode
    #        end
    #      },
    #      :progress_proc => lambda {|s|
    #        pbar.set s if pbar
    #      }) {|f| ... }
    #
    # [:read_timeout]
    #  Synopsis:
    #    :read_timeout=>nil     (no timeout)
    #    :read_timeout=>10      (10 second)
    #
    #  :read_timeout option specifies a timeout of read for http connections.
    #
    # [:open_timeout]
    #  Synopsis:
    #    :open_timeout=>nil     (no timeout)
    #    :open_timeout=>10      (10 second)
    #
    #  :open_timeout option specifies a timeout of open for http connections.
    #
    # [:ssl_ca_cert]
    #  Synopsis:
    #    :ssl_ca_cert=>filename or an Array of filenames
    #
    #  :ssl_ca_cert is used to specify CA certificate for SSL.
    #  If it is given, default certificates are not used.
    #
    # [:ssl_verify_mode]
    #  Synopsis:
    #    :ssl_verify_mode=>mode
    #
    #  :ssl_verify_mode is used to specify openssl verify mode.
    #
    # [:ssl_min_version]
    #  Synopsis:
    #    :ssl_min_version=>:TLS1_2
    #
    #  :ssl_min_version option specifies the minimum allowed SSL/TLS protocol
    #  version.  See also OpenSSL::SSL::SSLContext#min_version=.
    #
    # [:ssl_max_version]
    #  Synopsis:
    #    :ssl_max_version=>:TLS1_2
    #
    #  :ssl_max_version option specifies the maximum allowed SSL/TLS protocol
    #  version.  See also OpenSSL::SSL::SSLContext#max_version=.
    #
    # [:ftp_active_mode]
    #  Synopsis:
    #    :ftp_active_mode=>bool
    #
    #  <tt>:ftp_active_mode => true</tt> is used to make ftp active mode.
    #  Ruby 1.9 uses passive mode by default.
    #  Note that the active mode is default in Ruby 1.8 or prior.
    #
    # [:redirect]
    #  Synopsis:
    #    :redirect=>bool
    #
    #  +:redirect+ is true by default.  <tt>:redirect => false</tt> is used to
    #  disable all HTTP redirects.
    #
    #  OpenURI::HTTPRedirect exception raised on redirection.
    #  Using +true+ also means that redirections between http and ftp are
    #  permitted.
    #
    # [:max_redirects]
    #  Synopsis:
    #    :max_redirects=>int
    #
    #  Number of HTTP redirects allowed before OpenURI::TooManyRedirects is raised.
    #  The default is 64.
    #
    # [:request_specific_fields]
    #  Synopsis:
    #    :request_specific_fields => {}
    #    :request_specific_fields => lambda {|url| ...}
    #
    #  :request_specific_fields option allows specifying custom header fields that
    #  are sent with the HTTP request. It can be passed as a Hash or a Proc that
    #  gets evaluated on each request and returns a Hash of header fields.
    #
    #  If a Hash is provided, it specifies the headers only for the initial
    #  request and these headers will not be sent on redirects.
    #
    #  If a Proc is provided, it will be executed for each request including
    #  redirects, allowing dynamic header customization based on the request URL.
    #  It is important that the Proc returns a Hash. And this Hash specifies the
    #  headers to be sent with the request.
    #
    #  For Example with Hash
    #    URI.open("http://...",
    #             request_specific_fields: {"Authorization" => "token dummy"}) {|f| ... }
    #
    #  For Example with Proc:
    #    URI.open("http://...",
    #             request_specific_fields: lambda { |uri|
    #               if uri.host == "example.com"
    #                 {"Authorization" => "token dummy"}
    #               else
    #                 {}
    #               end
    #             }) {|f| ... }
    #
    def open(*rest, &block)
      OpenURI.open_uri(self, *rest, &block)
    end

    # OpenURI::OpenRead#read([ options ]) reads a content referenced by self and
    # returns the content as string.
    # The string is extended with OpenURI::Meta.
    # The argument +options+ is same as OpenURI::OpenRead#open.
    def read(options={})
      self.open(options) {|f|
        str = f.read
        Meta.init str, f
        str
      }
    end
  end
end

module URI
  class HTTP
    def buffer_open(buf, proxy, options) # :nodoc:
      OpenURI.open_http(buf, self, proxy, options)
    end

    include OpenURI::OpenRead
  end

  class FTP
    def buffer_open(buf, proxy, options) # :nodoc:
      if proxy
        OpenURI.open_http(buf, self, proxy, options)
        return
      end

      begin
        require 'net/ftp'
      rescue LoadError
        abort "net/ftp is not found. You may need to `gem install net-ftp` to install net/ftp."
      end

      path = self.path
      path = path.sub(%r{\A/}, '%2F') # re-encode the beginning slash because uri library decodes it.
      directories = path.split(%r{/}, -1)
      directories.each {|d|
        d.gsub!(/%([0-9A-Fa-f][0-9A-Fa-f])/) { [$1].pack("H2") }
      }
      unless filename = directories.pop
        raise ArgumentError, "no filename: #{self.inspect}"
      end
      directories.each {|d|
        if /[\r\n]/ =~ d
          raise ArgumentError, "invalid directory: #{d.inspect}"
        end
      }
      if /[\r\n]/ =~ filename
        raise ArgumentError, "invalid filename: #{filename.inspect}"
      end
      typecode = self.typecode
      if typecode && /\A[aid]\z/ !~ typecode
        raise ArgumentError, "invalid typecode: #{typecode.inspect}"
      end

      # The access sequence is defined by RFC 1738
      ftp = Net::FTP.new
      ftp.connect(self.hostname, self.port)
      ftp.passive = !options[:ftp_active_mode]
      # todo: extract user/passwd from .netrc.
      user = 'anonymous'
      passwd = nil
      user, passwd = self.userinfo.split(/:/) if self.userinfo
      ftp.login(user, passwd)
      directories.each {|cwd|
        ftp.voidcmd("CWD #{cwd}")
      }
      if typecode
        # xxx: typecode D is not handled.
        ftp.voidcmd("TYPE #{typecode.upcase}")
      end
      if options[:content_length_proc]
        options[:content_length_proc].call(ftp.size(filename))
      end
      ftp.retrbinary("RETR #{filename}", 4096) { |str|
        buf << str
        options[:progress_proc].call(buf.size) if options[:progress_proc]
      }
      ftp.close
      buf.io.rewind
    end

    include OpenURI::OpenRead
  end
end
PK*J[�7TTshare/ruby/error_highlight.rbnu�[���require_relative "error_highlight/base"
require_relative "error_highlight/core_ext"
PK*J[�:��5
5
share/ruby/digest.rbnu�[���# frozen_string_literal: false

if defined?(Digest) &&
    /\A(?:2\.|3\.0\.[0-2]\z)/.match?(RUBY_VERSION) &&
    caller_locations.any? { |l|
      %r{/(rubygems/gem_runner|bundler/cli)\.rb}.match?(l.path)
    }
  # Before Ruby 3.0.3/3.1.0, the gem and bundle commands used to load
  # the digest library before loading additionally installed gems, so
  # you will get constant redefinition warnings and unexpected
  # implementation overwriting if we proceed here.  Avoid that.
  return
end

require 'digest/version'
require 'digest/loader'

module Digest
  # A mutex for Digest().
  REQUIRE_MUTEX = Thread::Mutex.new

  def self.const_missing(name) # :nodoc:
    case name
    when :SHA256, :SHA384, :SHA512
      lib = 'digest/sha2'
    else
      lib = File.join('digest', name.to_s.downcase)
    end

    begin
      require lib
    rescue LoadError
      raise LoadError, "library not found for class Digest::#{name} -- #{lib}", caller(1)
    end
    unless Digest.const_defined?(name)
      raise NameError, "uninitialized constant Digest::#{name}", caller(1)
    end
    Digest.const_get(name)
  end

  class ::Digest::Class
    # Creates a digest object and reads a given file, _name_.
    # Optional arguments are passed to the constructor of the digest
    # class.
    #
    #   p Digest::SHA256.file("X11R6.8.2-src.tar.bz2").hexdigest
    #   # => "f02e3c85572dc9ad7cb77c2a638e3be24cc1b5bea9fdbb0b0299c9668475c534"
    def self.file(name, *args)
      new(*args).file(name)
    end

    # Returns the base64 encoded hash value of a given _string_.  The
    # return value is properly padded with '=' and contains no line
    # feeds.
    def self.base64digest(str, *args)
      [digest(str, *args)].pack('m0')
    end
  end

  module Instance
    # Updates the digest with the contents of a given file _name_ and
    # returns self.
    def file(name)
      File.open(name, "rb") {|f|
        buf = ""
        while f.read(16384, buf)
          update buf
        end
      }
      self
    end

    # If none is given, returns the resulting hash value of the digest
    # in a base64 encoded form, keeping the digest's state.
    #
    # If a +string+ is given, returns the hash value for the given
    # +string+ in a base64 encoded form, resetting the digest to the
    # initial state before and after the process.
    #
    # In either case, the return value is properly padded with '=' and
    # contains no line feeds.
    def base64digest(str = nil)
      [str ? digest(str) : digest].pack('m0')
    end

    # Returns the resulting hash value and resets the digest to the
    # initial state.
    def base64digest!
      [digest!].pack('m0')
    end
  end
end

# call-seq:
#   Digest(name) -> digest_subclass
#
# Returns a Digest subclass by +name+ in a thread-safe manner even
# when on-demand loading is involved.
#
#   require 'digest'
#
#   Digest("MD5")
#   # => Digest::MD5
#
#   Digest(:SHA256)
#   # => Digest::SHA256
#
#   Digest(:Foo)
#   # => LoadError: library not found for class Digest::Foo -- digest/foo
def Digest(name)
  const = name.to_sym
  Digest::REQUIRE_MUTEX.synchronize {
    # Ignore autoload's because it is void when we have #const_missing
    Digest.const_missing(const)
  }
rescue LoadError
  # Constants do not necessarily rely on digest/*.
  if Digest.const_defined?(const)
    Digest.const_get(const)
  else
    raise
  end
end
PK*J[�;^��share/ruby/logger/errors.rbnu�[���# frozen_string_literal: true

class Logger
  # not used after 1.2.7. just for compat.
  class Error < RuntimeError # :nodoc:
  end
  class ShiftingError < Error # :nodoc:
  end
end
PK*J[�;�DDshare/ruby/logger/version.rbnu�[���# frozen_string_literal: true

class Logger
  VERSION = "1.6.4"
end
PK*J[b��nnnshare/ruby/logger/severity.rbnu�[���# frozen_string_literal: true

class Logger
  # Logging severity.
  module Severity
    # Low-level information, mostly for developers.
    DEBUG = 0
    # Generic (useful) information about system operation.
    INFO = 1
    # A warning.
    WARN = 2
    # A handleable error condition.
    ERROR = 3
    # An unhandleable error that results in a program crash.
    FATAL = 4
    # An unknown message that should always be logged.
    UNKNOWN = 5

    LEVELS = {
      "debug" => DEBUG,
      "info" => INFO,
      "warn" => WARN,
      "error" => ERROR,
      "fatal" => FATAL,
      "unknown" => UNKNOWN,
    }
    private_constant :LEVELS

    def self.coerce(severity)
      if severity.is_a?(Integer)
        severity
      else
        key = severity.to_s.downcase
        LEVELS[key] || raise(ArgumentError, "invalid log level: #{severity}")
      end
    end
  end
end
PK*J[����share/ruby/logger/formatter.rbnu�[���# frozen_string_literal: true

class Logger
  # Default formatter for log messages.
  class Formatter
    Format = "%.1s, [%s #%d] %5s -- %s: %s\n"
    DatetimeFormat = "%Y-%m-%dT%H:%M:%S.%6N"

    attr_accessor :datetime_format

    def initialize
      @datetime_format = nil
    end

    def call(severity, time, progname, msg)
      sprintf(Format, severity, format_datetime(time), Process.pid, severity, progname, msg2str(msg))
    end

  private

    def format_datetime(time)
      time.strftime(@datetime_format || DatetimeFormat)
    end

    def msg2str(msg)
      case msg
      when ::String
        msg
      when ::Exception
        "#{ msg.message } (#{ msg.class })\n#{ msg.backtrace.join("\n") if msg.backtrace }"
      else
        msg.inspect
      end
    end
  end
end
PK*J[=�/�88share/ruby/logger/log_device.rbnu�[���# frozen_string_literal: true

require_relative 'period'

class Logger
  # Device used for logging messages.
  class LogDevice
    include Period

    attr_reader :dev
    attr_reader :filename
    include MonitorMixin

    def initialize(log = nil, shift_age: nil, shift_size: nil, shift_period_suffix: nil, binmode: false, reraise_write_errors: [])
      @dev = @filename = @shift_age = @shift_size = @shift_period_suffix = nil
      @binmode = binmode
      @reraise_write_errors = reraise_write_errors
      mon_initialize
      set_dev(log)
      if @filename
        @shift_age = shift_age || 7
        @shift_size = shift_size || 1048576
        @shift_period_suffix = shift_period_suffix || '%Y%m%d'

        unless @shift_age.is_a?(Integer)
          base_time = @dev.respond_to?(:stat) ? @dev.stat.mtime : Time.now
          @next_rotate_time = next_rotate_time(base_time, @shift_age)
        end
      end
    end

    def write(message)
      handle_write_errors("writing") do
        synchronize do
          if @shift_age and @dev.respond_to?(:stat)
            handle_write_errors("shifting") {check_shift_log}
          end
          handle_write_errors("writing") {@dev.write(message)}
        end
      end
    end

    def close
      begin
        synchronize do
          @dev.close rescue nil
        end
      rescue Exception
        @dev.close rescue nil
      end
    end

    def reopen(log = nil)
      # reopen the same filename if no argument, do nothing for IO
      log ||= @filename if @filename
      if log
        synchronize do
          if @filename and @dev
            @dev.close rescue nil # close only file opened by Logger
            @filename = nil
          end
          set_dev(log)
        end
      end
      self
    end

  private

    # :stopdoc:

    MODE = File::WRONLY | File::APPEND
    MODE_TO_OPEN = MODE | File::SHARE_DELETE | File::BINARY
    MODE_TO_CREATE = MODE_TO_OPEN | File::CREAT | File::EXCL

    def set_dev(log)
      if log.respond_to?(:write) and log.respond_to?(:close)
        @dev = log
        if log.respond_to?(:path) and path = log.path
          if File.exist?(path)
            @filename = path
          end
        end
      else
        @dev = open_logfile(log)
        @filename = log
      end
    end

    if MODE_TO_OPEN == MODE
      def fixup_mode(dev, filename)
        dev
      end
    else
      def fixup_mode(dev, filename)
        return dev if @binmode
        dev.autoclose = false
        old_dev = dev
        dev = File.new(dev.fileno, mode: MODE, path: filename)
        old_dev.close
        PathAttr.set_path(dev, filename) if defined?(PathAttr)
        dev
      end
    end

    def open_logfile(filename)
      begin
        dev = File.open(filename, MODE_TO_OPEN)
      rescue Errno::ENOENT
        create_logfile(filename)
      else
        dev = fixup_mode(dev, filename)
        dev.sync = true
        dev.binmode if @binmode
        dev
      end
    end

    def create_logfile(filename)
      begin
        logdev = File.open(filename, MODE_TO_CREATE)
        logdev.flock(File::LOCK_EX)
        logdev = fixup_mode(logdev, filename)
        logdev.sync = true
        logdev.binmode if @binmode
        add_log_header(logdev)
        logdev.flock(File::LOCK_UN)
        logdev
      rescue Errno::EEXIST
        # file is created by another process
        open_logfile(filename)
      end
    end

    def handle_write_errors(mesg)
      yield
    rescue *@reraise_write_errors
      raise
    rescue
      warn("log #{mesg} failed. #{$!}")
    end

    def add_log_header(file)
      file.write(
        "# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName]
      ) if file.size == 0
    end

    def check_shift_log
      if @shift_age.is_a?(Integer)
        # Note: always returns false if '0'.
        if @filename && (@shift_age > 0) && (@dev.stat.size > @shift_size)
          lock_shift_log { shift_log_age }
        end
      else
        now = Time.now
        if now >= @next_rotate_time
          @next_rotate_time = next_rotate_time(now, @shift_age)
          lock_shift_log { shift_log_period(previous_period_end(now, @shift_age)) }
        end
      end
    end

    def lock_shift_log
      retry_limit = 8
      retry_sleep = 0.1
      begin
        File.open(@filename, MODE_TO_OPEN) do |lock|
          lock.flock(File::LOCK_EX) # inter-process locking. will be unlocked at closing file
          if File.identical?(@filename, lock) and File.identical?(lock, @dev)
            yield # log shifting
          else
            # log shifted by another process (i-node before locking and i-node after locking are different)
            @dev.close rescue nil
            @dev = open_logfile(@filename)
          end
        end
      rescue Errno::ENOENT
        # @filename file would not exist right after #rename and before #create_logfile
        if retry_limit <= 0
          warn("log rotation inter-process lock failed. #{$!}")
        else
          sleep retry_sleep
          retry_limit -= 1
          retry_sleep *= 2
          retry
        end
      end
    rescue
      warn("log rotation inter-process lock failed. #{$!}")
    end

    def shift_log_age
      (@shift_age-3).downto(0) do |i|
        if FileTest.exist?("#{@filename}.#{i}")
          File.rename("#{@filename}.#{i}", "#{@filename}.#{i+1}")
        end
      end
      @dev.close rescue nil
      File.rename("#{@filename}", "#{@filename}.0")
      @dev = create_logfile(@filename)
      return true
    end

    def shift_log_period(period_end)
      suffix = period_end.strftime(@shift_period_suffix)
      age_file = "#{@filename}.#{suffix}"
      if FileTest.exist?(age_file)
        # try to avoid filename crash caused by Timestamp change.
        idx = 0
        # .99 can be overridden; avoid too much file search with 'loop do'
        while idx < 100
          idx += 1
          age_file = "#{@filename}.#{suffix}.#{idx}"
          break unless FileTest.exist?(age_file)
        end
      end
      @dev.close rescue nil
      File.rename("#{@filename}", age_file)
      @dev = create_logfile(@filename)
      return true
    end
  end
end

File.open(__FILE__) do |f|
  File.new(f.fileno, autoclose: false, path: "").path
rescue IOError
  module PathAttr               # :nodoc:
    attr_reader :path

    def self.set_path(file, path)
      file.extend(self).instance_variable_set(:@path, path)
    end
  end
end
PK*J[�N�r��share/ruby/logger/period.rbnu�[���# frozen_string_literal: true

class Logger
  module Period
    module_function

    SiD = 24 * 60 * 60

    def next_rotate_time(now, shift_age)
      case shift_age
      when 'daily', :daily
        t = Time.mktime(now.year, now.month, now.mday) + SiD
      when 'weekly', :weekly
        t = Time.mktime(now.year, now.month, now.mday) + SiD * (7 - now.wday)
      when 'monthly', :monthly
        t = Time.mktime(now.year, now.month, 1) + SiD * 32
        return Time.mktime(t.year, t.month, 1)
      when 'now', 'everytime', :now, :everytime
        return now
      else
        raise ArgumentError, "invalid :shift_age #{shift_age.inspect}, should be daily, weekly, monthly, or everytime"
      end
      if t.hour.nonzero? or t.min.nonzero? or t.sec.nonzero?
        hour = t.hour
        t = Time.mktime(t.year, t.month, t.mday)
        t += SiD if hour > 12
      end
      t
    end

    def previous_period_end(now, shift_age)
      case shift_age
      when 'daily', :daily
        t = Time.mktime(now.year, now.month, now.mday) - SiD / 2
      when 'weekly', :weekly
        t = Time.mktime(now.year, now.month, now.mday) - (SiD * now.wday + SiD / 2)
      when 'monthly', :monthly
        t = Time.mktime(now.year, now.month, 1) - SiD / 2
      when 'now', 'everytime', :now, :everytime
        return now
      else
        raise ArgumentError, "invalid :shift_age #{shift_age.inspect}, should be daily, weekly, monthly, or everytime"
      end
      Time.mktime(t.year, t.month, t.mday, 23, 59, 59)
    end
  end
end
PK*J['share/gems/gems/io-console-0.8.0/lib/ionuȯ��PK*J[v��yshare/ruby/singleton.rbnu�[���# frozen_string_literal: true

# The Singleton module implements the Singleton pattern.
#
# == Usage
#
# To use Singleton, include the module in your class.
#
#    class Klass
#       include Singleton
#       # ...
#    end
#
# This ensures that only one instance of Klass can be created.
#
#      a,b = Klass.instance, Klass.instance
#
#      a == b
#      # => true
#
#      Klass.new
#      # => NoMethodError - new is private ...
#
# The instance is created at upon the first call of Klass.instance().
#
#      class OtherKlass
#        include Singleton
#        # ...
#      end
#
#      ObjectSpace.each_object(OtherKlass){}
#      # => 0
#
#      OtherKlass.instance
#      ObjectSpace.each_object(OtherKlass){}
#      # => 1
#
#
# This behavior is preserved under inheritance and cloning.
#
# == Implementation
#
# This above is achieved by:
#
# *  Making Klass.new and Klass.allocate private.
#
# *  Overriding Klass.inherited(sub_klass) and Klass.clone() to ensure that the
#    Singleton properties are kept when inherited and cloned.
#
# *  Providing the Klass.instance() method that returns the same object each
#    time it is called.
#
# *  Overriding Klass._load(str) to call Klass.instance().
#
# *  Overriding Klass#clone and Klass#dup to raise TypeErrors to prevent
#    cloning or duping.
#
# == Singleton and Marshal
#
# By default Singleton's #_dump(depth) returns the empty string. Marshalling by
# default will strip state information, e.g. instance variables from the instance.
# Classes using Singleton can provide custom _load(str) and _dump(depth) methods
# to retain some of the previous state of the instance.
#
#    require 'singleton'
#
#    class Example
#      include Singleton
#      attr_accessor :keep, :strip
#      def _dump(depth)
#        # this strips the @strip information from the instance
#        Marshal.dump(@keep, depth)
#      end
#
#      def self._load(str)
#        instance.keep = Marshal.load(str)
#        instance
#      end
#    end
#
#    a = Example.instance
#    a.keep = "keep this"
#    a.strip = "get rid of this"
#
#    stored_state = Marshal.dump(a)
#
#    a.keep = nil
#    a.strip = nil
#    b = Marshal.load(stored_state)
#    p a == b  #  => true
#    p a.keep  #  => "keep this"
#    p a.strip #  => nil
#
module Singleton
  VERSION = "0.3.0"

  module SingletonInstanceMethods
    # Raises a TypeError to prevent cloning.
    def clone
      raise TypeError, "can't clone instance of singleton #{self.class}"
    end

    # Raises a TypeError to prevent duping.
    def dup
      raise TypeError, "can't dup instance of singleton #{self.class}"
    end

    # By default, do not retain any state when marshalling.
    def _dump(depth = -1)
      ''
    end
  end
  include SingletonInstanceMethods

  module SingletonClassMethods # :nodoc:

    def clone # :nodoc:
      Singleton.__init__(super)
    end

    # By default calls instance(). Override to retain singleton state.
    def _load(str)
      instance
    end

    def instance # :nodoc:
      @singleton__instance__ || @singleton__mutex__.synchronize { @singleton__instance__ ||= new }
    end

    private

    def inherited(sub_klass)
      super
      Singleton.__init__(sub_klass)
    end

    def set_instance(val)
      @singleton__instance__ = val
    end

    def set_mutex(val)
      @singleton__mutex__ = val
    end
  end

  def self.module_with_class_methods
    SingletonClassMethods
  end

  module SingletonClassProperties

    def self.included(c)
      # extending an object with Singleton is a bad idea
      c.undef_method :extend_object
    end

    def self.extended(c)
      # extending an object with Singleton is a bad idea
      c.singleton_class.send(:undef_method, :extend_object)
    end

    def __init__(klass) # :nodoc:
      klass.instance_eval {
        set_instance(nil)
        set_mutex(Thread::Mutex.new)
      }
      klass
    end

    private

    def append_features(mod)
      #  help out people counting on transitive mixins
      unless mod.instance_of?(Class)
        raise TypeError, "Inclusion of the OO-Singleton module in module #{mod}"
      end
      super
    end

    def included(klass)
      super
      klass.private_class_method :new, :allocate
      klass.extend module_with_class_methods
      Singleton.__init__(klass)
    end
  end
  extend SingletonClassProperties

  ##
  # :singleton-method: _load
  #  By default calls instance(). Override to retain singleton state.

  ##
  # :singleton-method: instance
  #  Returns the singleton instance.
end

if defined?(Ractor)
  module RactorLocalSingleton
    include Singleton::SingletonInstanceMethods

    module RactorLocalSingletonClassMethods
      include Singleton::SingletonClassMethods
      def instance
        set_mutex(Thread::Mutex.new) if Ractor.current[mutex_key].nil?
        return Ractor.current[instance_key] if Ractor.current[instance_key]
        Ractor.current[mutex_key].synchronize {
          return Ractor.current[instance_key] if Ractor.current[instance_key]
          set_instance(new())
        }
        Ractor.current[instance_key]
      end

      private

      def instance_key
        :"__RactorLocalSingleton_instance_with_class_id_#{object_id}__"
      end

      def mutex_key
        :"__RactorLocalSingleton_mutex_with_class_id_#{object_id}__"
      end

      def set_instance(val)
        Ractor.current[instance_key] = val
      end

      def set_mutex(val)
        Ractor.current[mutex_key] = val
      end
    end

    def self.module_with_class_methods
      RactorLocalSingletonClassMethods
    end

    extend Singleton::SingletonClassProperties
  end
end
PK*J[\��	����share/ruby/cgi/html.rbnu�[���# frozen_string_literal: true
class CGI
  # Base module for HTML-generation mixins.
  #
  # Provides methods for code generation for tags following
  # the various DTD element types.
  module TagMaker # :nodoc:

    # Generate code for an element with required start and end tags.
    #
    #   - -
    def nn_element(element, attributes = {})
      s = nOE_element(element, attributes)
      if block_given?
        s << yield.to_s
      end
      s << "</#{element.upcase}>"
    end

    def nn_element_def(attributes = {}, &block)
      nn_element(__callee__, attributes, &block)
    end

    # Generate code for an empty element.
    #
    #   - O EMPTY
    def nOE_element(element, attributes = {})
      attributes={attributes=>nil} if attributes.kind_of?(String)
      s = "<#{element.upcase}".dup
      attributes.each do|name, value|
        next unless value
        s << " "
        s << CGI.escapeHTML(name.to_s)
        if value != true
          s << '="'
          s << CGI.escapeHTML(value.to_s)
          s << '"'
        end
      end
      s << ">"
    end

    def nOE_element_def(attributes = {}, &block)
      nOE_element(__callee__, attributes, &block)
    end


    # Generate code for an element for which the end (and possibly the
    # start) tag is optional.
    #
    #   O O or - O
    def nO_element(element, attributes = {})
      s = nOE_element(element, attributes)
      if block_given?
        s << yield.to_s
        s << "</#{element.upcase}>"
      end
      s
    end

    def nO_element_def(attributes = {}, &block)
      nO_element(__callee__, attributes, &block)
    end

  end # TagMaker


  # Mixin module providing HTML generation methods.
  #
  # For example,
  #   cgi.a("http://www.example.com") { "Example" }
  #     # => "<A HREF=\"http://www.example.com\">Example</A>"
  #
  # Modules Html3, Html4, etc., contain more basic HTML-generation methods
  # (+#title+, +#h1+, etc.).
  #
  # See class CGI for a detailed example.
  #
  module HtmlExtension


    # Generate an Anchor element as a string.
    #
    # +href+ can either be a string, giving the URL
    # for the HREF attribute, or it can be a hash of
    # the element's attributes.
    #
    # The body of the element is the string returned by the no-argument
    # block passed in.
    #
    #   a("http://www.example.com") { "Example" }
    #     # => "<A HREF=\"http://www.example.com\">Example</A>"
    #
    #   a("HREF" => "http://www.example.com", "TARGET" => "_top") { "Example" }
    #     # => "<A HREF=\"http://www.example.com\" TARGET=\"_top\">Example</A>"
    #
    def a(href = "") # :yield:
      attributes = if href.kind_of?(String)
                     { "HREF" => href }
                   else
                     href
                   end
      super(attributes)
    end

    # Generate a Document Base URI element as a String.
    #
    # +href+ can either by a string, giving the base URL for the HREF
    # attribute, or it can be a has of the element's attributes.
    #
    # The passed-in no-argument block is ignored.
    #
    #   base("http://www.example.com/cgi")
    #     # => "<BASE HREF=\"http://www.example.com/cgi\">"
    def base(href = "") # :yield:
      attributes = if href.kind_of?(String)
                     { "HREF" => href }
                   else
                     href
                   end
      super(attributes)
    end

    # Generate a BlockQuote element as a string.
    #
    # +cite+ can either be a string, give the URI for the source of
    # the quoted text, or a hash, giving all attributes of the element,
    # or it can be omitted, in which case the element has no attributes.
    #
    # The body is provided by the passed-in no-argument block
    #
    #   blockquote("http://www.example.com/quotes/foo.html") { "Foo!" }
    #     #=> "<BLOCKQUOTE CITE=\"http://www.example.com/quotes/foo.html\">Foo!</BLOCKQUOTE>
    def blockquote(cite = {})  # :yield:
      attributes = if cite.kind_of?(String)
                     { "CITE" => cite }
                   else
                     cite
                   end
      super(attributes)
    end


    # Generate a Table Caption element as a string.
    #
    # +align+ can be a string, giving the alignment of the caption
    # (one of top, bottom, left, or right).  It can be a hash of
    # all the attributes of the element.  Or it can be omitted.
    #
    # The body of the element is provided by the passed-in no-argument block.
    #
    #   caption("left") { "Capital Cities" }
    #     # => <CAPTION ALIGN=\"left\">Capital Cities</CAPTION>
    def caption(align = {}) # :yield:
      attributes = if align.kind_of?(String)
                     { "ALIGN" => align }
                   else
                     align
                   end
      super(attributes)
    end


    # Generate a Checkbox Input element as a string.
    #
    # The attributes of the element can be specified as three arguments,
    # +name+, +value+, and +checked+.  +checked+ is a boolean value;
    # if true, the CHECKED attribute will be included in the element.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   checkbox("name")
    #     # = checkbox("NAME" => "name")
    #
    #   checkbox("name", "value")
    #     # = checkbox("NAME" => "name", "VALUE" => "value")
    #
    #   checkbox("name", "value", true)
    #     # = checkbox("NAME" => "name", "VALUE" => "value", "CHECKED" => true)
    def checkbox(name = "", value = nil, checked = nil)
      attributes = if name.kind_of?(String)
                     { "TYPE" => "checkbox", "NAME" => name,
                       "VALUE" => value, "CHECKED" => checked }
                   else
                     name["TYPE"] = "checkbox"
                     name
                   end
      input(attributes)
    end

    # Generate a sequence of checkbox elements, as a String.
    #
    # The checkboxes will all have the same +name+ attribute.
    # Each checkbox is followed by a label.
    # There will be one checkbox for each value.  Each value
    # can be specified as a String, which will be used both
    # as the value of the VALUE attribute and as the label
    # for that checkbox.  A single-element array has the
    # same effect.
    #
    # Each value can also be specified as a three-element array.
    # The first element is the VALUE attribute; the second is the
    # label; and the third is a boolean specifying whether this
    # checkbox is CHECKED.
    #
    # Each value can also be specified as a two-element
    # array, by omitting either the value element (defaults
    # to the same as the label), or the boolean checked element
    # (defaults to false).
    #
    #   checkbox_group("name", "foo", "bar", "baz")
    #     # <INPUT TYPE="checkbox" NAME="name" VALUE="foo">foo
    #     # <INPUT TYPE="checkbox" NAME="name" VALUE="bar">bar
    #     # <INPUT TYPE="checkbox" NAME="name" VALUE="baz">baz
    #
    #   checkbox_group("name", ["foo"], ["bar", true], "baz")
    #     # <INPUT TYPE="checkbox" NAME="name" VALUE="foo">foo
    #     # <INPUT TYPE="checkbox" CHECKED NAME="name" VALUE="bar">bar
    #     # <INPUT TYPE="checkbox" NAME="name" VALUE="baz">baz
    #
    #   checkbox_group("name", ["1", "Foo"], ["2", "Bar", true], "Baz")
    #     # <INPUT TYPE="checkbox" NAME="name" VALUE="1">Foo
    #     # <INPUT TYPE="checkbox" CHECKED NAME="name" VALUE="2">Bar
    #     # <INPUT TYPE="checkbox" NAME="name" VALUE="Baz">Baz
    #
    #   checkbox_group("NAME" => "name",
    #                    "VALUES" => ["foo", "bar", "baz"])
    #
    #   checkbox_group("NAME" => "name",
    #                    "VALUES" => [["foo"], ["bar", true], "baz"])
    #
    #   checkbox_group("NAME" => "name",
    #                    "VALUES" => [["1", "Foo"], ["2", "Bar", true], "Baz"])
    def checkbox_group(name = "", *values)
      if name.kind_of?(Hash)
        values = name["VALUES"]
        name = name["NAME"]
      end
      values.collect{|value|
        if value.kind_of?(String)
          checkbox(name, value) + value
        else
          if value[-1] == true || value[-1] == false
            checkbox(name, value[0],  value[-1]) +
            value[-2]
          else
            checkbox(name, value[0]) +
            value[-1]
          end
        end
      }.join
    end


    # Generate an File Upload Input element as a string.
    #
    # The attributes of the element can be specified as three arguments,
    # +name+, +size+, and +maxlength+.  +maxlength+ is the maximum length
    # of the file's _name_, not of the file's _contents_.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    # See #multipart_form() for forms that include file uploads.
    #
    #   file_field("name")
    #     # <INPUT TYPE="file" NAME="name" SIZE="20">
    #
    #   file_field("name", 40)
    #     # <INPUT TYPE="file" NAME="name" SIZE="40">
    #
    #   file_field("name", 40, 100)
    #     # <INPUT TYPE="file" NAME="name" SIZE="40" MAXLENGTH="100">
    #
    #   file_field("NAME" => "name", "SIZE" => 40)
    #     # <INPUT TYPE="file" NAME="name" SIZE="40">
    def file_field(name = "", size = 20, maxlength = nil)
      attributes = if name.kind_of?(String)
                     { "TYPE" => "file", "NAME" => name,
                       "SIZE" => size.to_s }
                   else
                     name["TYPE"] = "file"
                     name
                   end
      attributes["MAXLENGTH"] = maxlength.to_s if maxlength
      input(attributes)
    end


    # Generate a Form element as a string.
    #
    # +method+ should be either "get" or "post", and defaults to the latter.
    # +action+ defaults to the current CGI script name.  +enctype+
    # defaults to "application/x-www-form-urlencoded".
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    # See also #multipart_form() for forms that include file uploads.
    #
    #   form{ "string" }
    #     # <FORM METHOD="post" ENCTYPE="application/x-www-form-urlencoded">string</FORM>
    #
    #   form("get") { "string" }
    #     # <FORM METHOD="get" ENCTYPE="application/x-www-form-urlencoded">string</FORM>
    #
    #   form("get", "url") { "string" }
    #     # <FORM METHOD="get" ACTION="url" ENCTYPE="application/x-www-form-urlencoded">string</FORM>
    #
    #   form("METHOD" => "post", "ENCTYPE" => "enctype") { "string" }
    #     # <FORM METHOD="post" ENCTYPE="enctype">string</FORM>
    def form(method = "post", action = script_name, enctype = "application/x-www-form-urlencoded")
      attributes = if method.kind_of?(String)
                     { "METHOD" => method, "ACTION" => action,
                       "ENCTYPE" => enctype }
                   else
                     unless method.has_key?("METHOD")
                       method["METHOD"] = "post"
                     end
                     unless method.has_key?("ENCTYPE")
                       method["ENCTYPE"] = enctype
                     end
                     method
                   end
      if block_given?
        body = yield
      else
        body = ""
      end
      if @output_hidden
        body << @output_hidden.collect{|k,v|
          "<INPUT TYPE=\"HIDDEN\" NAME=\"#{k}\" VALUE=\"#{v}\">"
        }.join
      end
      super(attributes){body}
    end

    # Generate a Hidden Input element as a string.
    #
    # The attributes of the element can be specified as two arguments,
    # +name+ and +value+.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   hidden("name")
    #     # <INPUT TYPE="hidden" NAME="name">
    #
    #   hidden("name", "value")
    #     # <INPUT TYPE="hidden" NAME="name" VALUE="value">
    #
    #   hidden("NAME" => "name", "VALUE" => "reset", "ID" => "foo")
    #     # <INPUT TYPE="hidden" NAME="name" VALUE="value" ID="foo">
    def hidden(name = "", value = nil)
      attributes = if name.kind_of?(String)
                     { "TYPE" => "hidden", "NAME" => name, "VALUE" => value }
                   else
                     name["TYPE"] = "hidden"
                     name
                   end
      input(attributes)
    end

    # Generate a top-level HTML element as a string.
    #
    # The attributes of the element are specified as a hash.  The
    # pseudo-attribute "PRETTY" can be used to specify that the generated
    # HTML string should be indented.  "PRETTY" can also be specified as
    # a string as the sole argument to this method.  The pseudo-attribute
    # "DOCTYPE", if given, is used as the leading DOCTYPE SGML tag; it
    # should include the entire text of this tag, including angle brackets.
    #
    # The body of the html element is supplied as a block.
    #
    #   html{ "string" }
    #     # <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML>string</HTML>
    #
    #   html("LANG" => "ja") { "string" }
    #     # <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML LANG="ja">string</HTML>
    #
    #   html("DOCTYPE" => false) { "string" }
    #     # <HTML>string</HTML>
    #
    #   html("DOCTYPE" => '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">') { "string" }
    #     # <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><HTML>string</HTML>
    #
    #   html("PRETTY" => "  ") { "<BODY></BODY>" }
    #     # <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
    #     # <HTML>
    #     #   <BODY>
    #     #   </BODY>
    #     # </HTML>
    #
    #   html("PRETTY" => "\t") { "<BODY></BODY>" }
    #     # <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
    #     # <HTML>
    #     #         <BODY>
    #     #         </BODY>
    #     # </HTML>
    #
    #   html("PRETTY") { "<BODY></BODY>" }
    #     # = html("PRETTY" => "  ") { "<BODY></BODY>" }
    #
    #   html(if $VERBOSE then "PRETTY" end) { "HTML string" }
    #
    def html(attributes = {}) # :yield:
      if nil == attributes
        attributes = {}
      elsif "PRETTY" == attributes
        attributes = { "PRETTY" => true }
      end
      pretty = attributes.delete("PRETTY")
      pretty = "  " if true == pretty
      buf = "".dup

      if attributes.has_key?("DOCTYPE")
        if attributes["DOCTYPE"]
          buf << attributes.delete("DOCTYPE")
        else
          attributes.delete("DOCTYPE")
        end
      else
        buf << doctype
      end

      buf << super(attributes)

      if pretty
        CGI.pretty(buf, pretty)
      else
        buf
      end

    end

    # Generate an Image Button Input element as a string.
    #
    # +src+ is the URL of the image to use for the button.  +name+
    # is the input name.  +alt+ is the alternative text for the image.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   image_button("url")
    #     # <INPUT TYPE="image" SRC="url">
    #
    #   image_button("url", "name", "string")
    #     # <INPUT TYPE="image" SRC="url" NAME="name" ALT="string">
    #
    #   image_button("SRC" => "url", "ALT" => "string")
    #     # <INPUT TYPE="image" SRC="url" ALT="string">
    def image_button(src = "", name = nil, alt = nil)
      attributes = if src.kind_of?(String)
                     { "TYPE" => "image", "SRC" => src, "NAME" => name,
                       "ALT" => alt }
                   else
                     src["TYPE"] = "image"
                     src["SRC"] ||= ""
                     src
                   end
      input(attributes)
    end


    # Generate an Image element as a string.
    #
    # +src+ is the URL of the image.  +alt+ is the alternative text for
    # the image.  +width+ is the width of the image, and +height+ is
    # its height.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   img("src", "alt", 100, 50)
    #     # <IMG SRC="src" ALT="alt" WIDTH="100" HEIGHT="50">
    #
    #   img("SRC" => "src", "ALT" => "alt", "WIDTH" => 100, "HEIGHT" => 50)
    #     # <IMG SRC="src" ALT="alt" WIDTH="100" HEIGHT="50">
    def img(src = "", alt = "", width = nil, height = nil)
      attributes = if src.kind_of?(String)
                     { "SRC" => src, "ALT" => alt }
                   else
                     src
                   end
      attributes["WIDTH"] = width.to_s if width
      attributes["HEIGHT"] = height.to_s if height
      super(attributes)
    end


    # Generate a Form element with multipart encoding as a String.
    #
    # Multipart encoding is used for forms that include file uploads.
    #
    # +action+ is the action to perform.  +enctype+ is the encoding
    # type, which defaults to "multipart/form-data".
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   multipart_form{ "string" }
    #     # <FORM METHOD="post" ENCTYPE="multipart/form-data">string</FORM>
    #
    #   multipart_form("url") { "string" }
    #     # <FORM METHOD="post" ACTION="url" ENCTYPE="multipart/form-data">string</FORM>
    def multipart_form(action = nil, enctype = "multipart/form-data")
      attributes = if action == nil
                     { "METHOD" => "post", "ENCTYPE" => enctype }
                   elsif action.kind_of?(String)
                     { "METHOD" => "post", "ACTION" => action,
                       "ENCTYPE" => enctype }
                   else
                     unless action.has_key?("METHOD")
                       action["METHOD"] = "post"
                     end
                     unless action.has_key?("ENCTYPE")
                       action["ENCTYPE"] = enctype
                     end
                     action
                   end
      if block_given?
        form(attributes){ yield }
      else
        form(attributes)
      end
    end


    # Generate a Password Input element as a string.
    #
    # +name+ is the name of the input field.  +value+ is its default
    # value.  +size+ is the size of the input field display.  +maxlength+
    # is the maximum length of the inputted password.
    #
    # Alternatively, attributes can be specified as a hash.
    #
    #   password_field("name")
    #     # <INPUT TYPE="password" NAME="name" SIZE="40">
    #
    #   password_field("name", "value")
    #     # <INPUT TYPE="password" NAME="name" VALUE="value" SIZE="40">
    #
    #   password_field("password", "value", 80, 200)
    #     # <INPUT TYPE="password" NAME="name" VALUE="value" SIZE="80" MAXLENGTH="200">
    #
    #   password_field("NAME" => "name", "VALUE" => "value")
    #     # <INPUT TYPE="password" NAME="name" VALUE="value">
    def password_field(name = "", value = nil, size = 40, maxlength = nil)
      attributes = if name.kind_of?(String)
                     { "TYPE" => "password", "NAME" => name,
                       "VALUE" => value, "SIZE" => size.to_s }
                   else
                     name["TYPE"] = "password"
                     name
                   end
      attributes["MAXLENGTH"] = maxlength.to_s if maxlength
      input(attributes)
    end

    # Generate a Select element as a string.
    #
    # +name+ is the name of the element.  The +values+ are the options that
    # can be selected from the Select menu.  Each value can be a String or
    # a one, two, or three-element Array.  If a String or a one-element
    # Array, this is both the value of that option and the text displayed for
    # it.  If a three-element Array, the elements are the option value, displayed
    # text, and a boolean value specifying whether this option starts as selected.
    # The two-element version omits either the option value (defaults to the same
    # as the display text) or the boolean selected specifier (defaults to false).
    #
    # The attributes and options can also be specified as a hash.  In this
    # case, options are specified as an array of values as described above,
    # with the hash key of "VALUES".
    #
    #   popup_menu("name", "foo", "bar", "baz")
    #     # <SELECT NAME="name">
    #     #   <OPTION VALUE="foo">foo</OPTION>
    #     #   <OPTION VALUE="bar">bar</OPTION>
    #     #   <OPTION VALUE="baz">baz</OPTION>
    #     # </SELECT>
    #
    #   popup_menu("name", ["foo"], ["bar", true], "baz")
    #     # <SELECT NAME="name">
    #     #   <OPTION VALUE="foo">foo</OPTION>
    #     #   <OPTION VALUE="bar" SELECTED>bar</OPTION>
    #     #   <OPTION VALUE="baz">baz</OPTION>
    #     # </SELECT>
    #
    #   popup_menu("name", ["1", "Foo"], ["2", "Bar", true], "Baz")
    #     # <SELECT NAME="name">
    #     #   <OPTION VALUE="1">Foo</OPTION>
    #     #   <OPTION SELECTED VALUE="2">Bar</OPTION>
    #     #   <OPTION VALUE="Baz">Baz</OPTION>
    #     # </SELECT>
    #
    #   popup_menu("NAME" => "name", "SIZE" => 2, "MULTIPLE" => true,
    #               "VALUES" => [["1", "Foo"], ["2", "Bar", true], "Baz"])
    #     # <SELECT NAME="name" MULTIPLE SIZE="2">
    #     #   <OPTION VALUE="1">Foo</OPTION>
    #     #   <OPTION SELECTED VALUE="2">Bar</OPTION>
    #     #   <OPTION VALUE="Baz">Baz</OPTION>
    #     # </SELECT>
    def popup_menu(name = "", *values)

      if name.kind_of?(Hash)
        values   = name["VALUES"]
        size     = name["SIZE"].to_s if name["SIZE"]
        multiple = name["MULTIPLE"]
        name     = name["NAME"]
      else
        size = nil
        multiple = nil
      end

      select({ "NAME" => name, "SIZE" => size,
               "MULTIPLE" => multiple }){
        values.collect{|value|
          if value.kind_of?(String)
            option({ "VALUE" => value }){ value }
          else
            if value[value.size - 1] == true
              option({ "VALUE" => value[0], "SELECTED" => true }){
                value[value.size - 2]
              }
            else
              option({ "VALUE" => value[0] }){
                value[value.size - 1]
              }
            end
          end
        }.join
      }

    end

    # Generates a radio-button Input element.
    #
    # +name+ is the name of the input field.  +value+ is the value of
    # the field if checked.  +checked+ specifies whether the field
    # starts off checked.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   radio_button("name", "value")
    #     # <INPUT TYPE="radio" NAME="name" VALUE="value">
    #
    #   radio_button("name", "value", true)
    #     # <INPUT TYPE="radio" NAME="name" VALUE="value" CHECKED>
    #
    #   radio_button("NAME" => "name", "VALUE" => "value", "ID" => "foo")
    #     # <INPUT TYPE="radio" NAME="name" VALUE="value" ID="foo">
    def radio_button(name = "", value = nil, checked = nil)
      attributes = if name.kind_of?(String)
                     { "TYPE" => "radio", "NAME" => name,
                       "VALUE" => value, "CHECKED" => checked }
                   else
                     name["TYPE"] = "radio"
                     name
                   end
      input(attributes)
    end

    # Generate a sequence of radio button Input elements, as a String.
    #
    # This works the same as #checkbox_group().  However, it is not valid
    # to have more than one radiobutton in a group checked.
    #
    #   radio_group("name", "foo", "bar", "baz")
    #     # <INPUT TYPE="radio" NAME="name" VALUE="foo">foo
    #     # <INPUT TYPE="radio" NAME="name" VALUE="bar">bar
    #     # <INPUT TYPE="radio" NAME="name" VALUE="baz">baz
    #
    #   radio_group("name", ["foo"], ["bar", true], "baz")
    #     # <INPUT TYPE="radio" NAME="name" VALUE="foo">foo
    #     # <INPUT TYPE="radio" CHECKED NAME="name" VALUE="bar">bar
    #     # <INPUT TYPE="radio" NAME="name" VALUE="baz">baz
    #
    #   radio_group("name", ["1", "Foo"], ["2", "Bar", true], "Baz")
    #     # <INPUT TYPE="radio" NAME="name" VALUE="1">Foo
    #     # <INPUT TYPE="radio" CHECKED NAME="name" VALUE="2">Bar
    #     # <INPUT TYPE="radio" NAME="name" VALUE="Baz">Baz
    #
    #   radio_group("NAME" => "name",
    #                 "VALUES" => ["foo", "bar", "baz"])
    #
    #   radio_group("NAME" => "name",
    #                 "VALUES" => [["foo"], ["bar", true], "baz"])
    #
    #   radio_group("NAME" => "name",
    #                 "VALUES" => [["1", "Foo"], ["2", "Bar", true], "Baz"])
    def radio_group(name = "", *values)
      if name.kind_of?(Hash)
        values = name["VALUES"]
        name = name["NAME"]
      end
      values.collect{|value|
        if value.kind_of?(String)
          radio_button(name, value) + value
        else
          if value[-1] == true || value[-1] == false
            radio_button(name, value[0],  value[-1]) +
            value[-2]
          else
            radio_button(name, value[0]) +
            value[-1]
          end
        end
      }.join
    end

    # Generate a reset button Input element, as a String.
    #
    # This resets the values on a form to their initial values.  +value+
    # is the text displayed on the button. +name+ is the name of this button.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   reset
    #     # <INPUT TYPE="reset">
    #
    #   reset("reset")
    #     # <INPUT TYPE="reset" VALUE="reset">
    #
    #   reset("VALUE" => "reset", "ID" => "foo")
    #     # <INPUT TYPE="reset" VALUE="reset" ID="foo">
    def reset(value = nil, name = nil)
      attributes = if (not value) or value.kind_of?(String)
                     { "TYPE" => "reset", "VALUE" => value, "NAME" => name }
                   else
                     value["TYPE"] = "reset"
                     value
                   end
      input(attributes)
    end

    alias scrolling_list popup_menu

    # Generate a submit button Input element, as a String.
    #
    # +value+ is the text to display on the button.  +name+ is the name
    # of the input.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   submit
    #     # <INPUT TYPE="submit">
    #
    #   submit("ok")
    #     # <INPUT TYPE="submit" VALUE="ok">
    #
    #   submit("ok", "button1")
    #     # <INPUT TYPE="submit" VALUE="ok" NAME="button1">
    #
    #   submit("VALUE" => "ok", "NAME" => "button1", "ID" => "foo")
    #     # <INPUT TYPE="submit" VALUE="ok" NAME="button1" ID="foo">
    def submit(value = nil, name = nil)
      attributes = if (not value) or value.kind_of?(String)
                     { "TYPE" => "submit", "VALUE" => value, "NAME" => name }
                   else
                     value["TYPE"] = "submit"
                     value
                   end
      input(attributes)
    end

    # Generate a text field Input element, as a String.
    #
    # +name+ is the name of the input field.  +value+ is its initial
    # value.  +size+ is the size of the input area.  +maxlength+
    # is the maximum length of input accepted.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    #   text_field("name")
    #     # <INPUT TYPE="text" NAME="name" SIZE="40">
    #
    #   text_field("name", "value")
    #     # <INPUT TYPE="text" NAME="name" VALUE="value" SIZE="40">
    #
    #   text_field("name", "value", 80)
    #     # <INPUT TYPE="text" NAME="name" VALUE="value" SIZE="80">
    #
    #   text_field("name", "value", 80, 200)
    #     # <INPUT TYPE="text" NAME="name" VALUE="value" SIZE="80" MAXLENGTH="200">
    #
    #   text_field("NAME" => "name", "VALUE" => "value")
    #     # <INPUT TYPE="text" NAME="name" VALUE="value">
    def text_field(name = "", value = nil, size = 40, maxlength = nil)
      attributes = if name.kind_of?(String)
                     { "TYPE" => "text", "NAME" => name, "VALUE" => value,
                       "SIZE" => size.to_s }
                   else
                     name["TYPE"] = "text"
                     name
                   end
      attributes["MAXLENGTH"] = maxlength.to_s if maxlength
      input(attributes)
    end

    # Generate a TextArea element, as a String.
    #
    # +name+ is the name of the textarea.  +cols+ is the number of
    # columns and +rows+ is the number of rows in the display.
    #
    # Alternatively, the attributes can be specified as a hash.
    #
    # The body is provided by the passed-in no-argument block
    #
    #   textarea("name")
    #      # = textarea("NAME" => "name", "COLS" => 70, "ROWS" => 10)
    #
    #   textarea("name", 40, 5)
    #      # = textarea("NAME" => "name", "COLS" => 40, "ROWS" => 5)
    def textarea(name = "", cols = 70, rows = 10)  # :yield:
      attributes = if name.kind_of?(String)
                     { "NAME" => name, "COLS" => cols.to_s,
                       "ROWS" => rows.to_s }
                   else
                     name
                   end
      super(attributes)
    end

  end # HtmlExtension


  # Mixin module for HTML version 3 generation methods.
  module Html3 # :nodoc:
    include TagMaker

    # The DOCTYPE declaration for this version of HTML
    def doctype
      %|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">|
    end

    instance_method(:nn_element_def).tap do |m|
      # - -
      for element in %w[ A TT I B U STRIKE BIG SMALL SUB SUP EM STRONG
          DFN CODE SAMP KBD VAR CITE FONT ADDRESS DIV CENTER MAP
          APPLET PRE XMP LISTING DL OL UL DIR MENU SELECT TABLE TITLE
          STYLE SCRIPT H1 H2 H3 H4 H5 H6 TEXTAREA FORM BLOCKQUOTE
          CAPTION ]
        define_method(element.downcase, m)
      end
    end

    instance_method(:nOE_element_def).tap do |m|
      # - O EMPTY
      for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT
          ISINDEX META ]
        define_method(element.downcase, m)
      end
    end

    instance_method(:nO_element_def).tap do |m|
      # O O or - O
      for element in %w[ HTML HEAD BODY P PLAINTEXT DT DD LI OPTION TR
          TH TD ]
        define_method(element.downcase, m)
      end
    end

  end # Html3


  # Mixin module for HTML version 4 generation methods.
  module Html4 # :nodoc:
    include TagMaker

    # The DOCTYPE declaration for this version of HTML
    def doctype
      %|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">|
    end

    # Initialize the HTML generation methods for this version.
    # - -
    instance_method(:nn_element_def).tap do |m|
      for element in %w[ TT I B BIG SMALL EM STRONG DFN CODE SAMP KBD
        VAR CITE ABBR ACRONYM SUB SUP SPAN BDO ADDRESS DIV MAP OBJECT
        H1 H2 H3 H4 H5 H6 PRE Q INS DEL DL OL UL LABEL SELECT OPTGROUP
        FIELDSET LEGEND BUTTON TABLE TITLE STYLE SCRIPT NOSCRIPT
        TEXTAREA FORM A BLOCKQUOTE CAPTION ]
        define_method(element.downcase, m)
      end
    end

    # - O EMPTY
    instance_method(:nOE_element_def).tap do |m|
      for element in %w[ IMG BASE BR AREA LINK PARAM HR INPUT COL META ]
        define_method(element.downcase, m)
      end
    end

    # O O or - O
    instance_method(:nO_element_def).tap do |m|
      for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY
          COLGROUP TR TH TD HEAD ]
        define_method(element.downcase, m)
      end
    end

  end # Html4


  # Mixin module for HTML version 4 transitional generation methods.
  module Html4Tr # :nodoc:
    include TagMaker

    # The DOCTYPE declaration for this version of HTML
    def doctype
      %|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">|
    end

    # Initialise the HTML generation methods for this version.
    # - -
    instance_method(:nn_element_def).tap do |m|
      for element in %w[ TT I B U S STRIKE BIG SMALL EM STRONG DFN
          CODE SAMP KBD VAR CITE ABBR ACRONYM FONT SUB SUP SPAN BDO
          ADDRESS DIV CENTER MAP OBJECT APPLET H1 H2 H3 H4 H5 H6 PRE Q
          INS DEL DL OL UL DIR MENU LABEL SELECT OPTGROUP FIELDSET
          LEGEND BUTTON TABLE IFRAME NOFRAMES TITLE STYLE SCRIPT
          NOSCRIPT TEXTAREA FORM A BLOCKQUOTE CAPTION ]
        define_method(element.downcase, m)
      end
    end

    # - O EMPTY
    instance_method(:nOE_element_def).tap do |m|
      for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT
          COL ISINDEX META ]
        define_method(element.downcase, m)
      end
    end

    # O O or - O
    instance_method(:nO_element_def).tap do |m|
      for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY
          COLGROUP TR TH TD HEAD ]
        define_method(element.downcase, m)
      end
    end

  end # Html4Tr


  # Mixin module for generating HTML version 4 with framesets.
  module Html4Fr # :nodoc:
    include TagMaker

    # The DOCTYPE declaration for this version of HTML
    def doctype
      %|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">|
    end

    # Initialise the HTML generation methods for this version.
    # - -
    instance_method(:nn_element_def).tap do |m|
      for element in %w[ FRAMESET ]
        define_method(element.downcase, m)
      end
    end

    # - O EMPTY
    instance_method(:nOE_element_def).tap do |m|
      for element in %w[ FRAME ]
        define_method(element.downcase, m)
      end
    end

  end # Html4Fr


  # Mixin module for HTML version 5 generation methods.
  module Html5 # :nodoc:
    include TagMaker

    # The DOCTYPE declaration for this version of HTML
    def doctype
      %|<!DOCTYPE HTML>|
    end

    # Initialise the HTML generation methods for this version.
    # - -
    instance_method(:nn_element_def).tap do |m|
      for element in %w[ SECTION NAV ARTICLE ASIDE HGROUP HEADER
        FOOTER FIGURE FIGCAPTION S TIME U MARK RUBY BDI IFRAME
        VIDEO AUDIO CANVAS DATALIST OUTPUT PROGRESS METER DETAILS
        SUMMARY MENU DIALOG I B SMALL EM STRONG DFN CODE SAMP KBD
        VAR CITE ABBR SUB SUP SPAN BDO ADDRESS DIV MAP OBJECT
        H1 H2 H3 H4 H5 H6 PRE Q INS DEL DL OL UL LABEL SELECT
        FIELDSET LEGEND BUTTON TABLE TITLE STYLE SCRIPT NOSCRIPT
        TEXTAREA FORM A BLOCKQUOTE CAPTION ]
        define_method(element.downcase, m)
      end
    end

    # - O EMPTY
    instance_method(:nOE_element_def).tap do |m|
      for element in %w[ IMG BASE BR AREA LINK PARAM HR INPUT COL META
        COMMAND EMBED KEYGEN SOURCE TRACK WBR ]
        define_method(element.downcase, m)
      end
    end

    # O O or - O
    instance_method(:nO_element_def).tap do |m|
      for element in %w[ HTML HEAD BODY P DT DD LI OPTION THEAD TFOOT TBODY
          OPTGROUP COLGROUP RT RP TR TH TD ]
        define_method(element.downcase, m)
      end
    end

  end # Html5

  class HTML3
    include Html3
    include HtmlExtension
  end

  class HTML4
    include Html4
    include HtmlExtension
  end

  class HTML4Tr
    include Html4Tr
    include HtmlExtension
  end

  class HTML4Fr
    include Html4Tr
    include Html4Fr
    include HtmlExtension
  end

  class HTML5
    include Html5
    include HtmlExtension
  end

end
PK*J[��8D�L�Lshare/ruby/cgi/session.rbnu�[���# frozen_string_literal: true
#
# cgi/session.rb - session support for cgi scripts
#
# Copyright (C) 2001  Yukihiro "Matz" Matsumoto
# Copyright (C) 2000  Network Applied Communication Laboratory, Inc.
# Copyright (C) 2000  Information-technology Promotion Agency, Japan
#
# Author: Yukihiro "Matz" Matsumoto
#
# Documentation: William Webber (william@williamwebber.com)

require 'cgi'
require 'tmpdir'

class CGI

  # == Overview
  #
  # This file provides the CGI::Session class, which provides session
  # support for CGI scripts.  A session is a sequence of HTTP requests
  # and responses linked together and associated with a single client.
  # Information associated with the session is stored
  # on the server between requests.  A session id is passed between client
  # and server with every request and response, transparently
  # to the user.  This adds state information to the otherwise stateless
  # HTTP request/response protocol.
  #
  # == Lifecycle
  #
  # A CGI::Session instance is created from a CGI object.  By default,
  # this CGI::Session instance will start a new session if none currently
  # exists, or continue the current session for this client if one does
  # exist.  The +new_session+ option can be used to either always or
  # never create a new session.  See #new() for more details.
  #
  # #delete() deletes a session from session storage.  It
  # does not however remove the session id from the client.  If the client
  # makes another request with the same id, the effect will be to start
  # a new session with the old session's id.
  #
  # == Setting and retrieving session data.
  #
  # The Session class associates data with a session as key-value pairs.
  # This data can be set and retrieved by indexing the Session instance
  # using '[]', much the same as hashes (although other hash methods
  # are not supported).
  #
  # When session processing has been completed for a request, the
  # session should be closed using the close() method.  This will
  # store the session's state to persistent storage.  If you want
  # to store the session's state to persistent storage without
  # finishing session processing for this request, call the update()
  # method.
  #
  # == Storing session state
  #
  # The caller can specify what form of storage to use for the session's
  # data with the +database_manager+ option to CGI::Session::new.  The
  # following storage classes are provided as part of the standard library:
  #
  # CGI::Session::FileStore:: stores data as plain text in a flat file.  Only
  #                           works with String data.  This is the default
  #                           storage type.
  # CGI::Session::MemoryStore:: stores data in an in-memory hash.  The data
  #                             only persists for as long as the current Ruby
  #                             interpreter instance does.
  # CGI::Session::PStore:: stores data in Marshalled format.  Provided by
  #                        cgi/session/pstore.rb.  Supports data of any type,
  #                        and provides file-locking and transaction support.
  #
  # Custom storage types can also be created by defining a class with
  # the following methods:
  #
  #    new(session, options)
  #    restore  # returns hash of session data.
  #    update
  #    close
  #    delete
  #
  # Changing storage type mid-session does not work.  Note in particular
  # that by default the FileStore and PStore session data files have the
  # same name.  If your application switches from one to the other without
  # making sure that filenames will be different
  # and clients still have old sessions lying around in cookies, then
  # things will break nastily!
  #
  # == Maintaining the session id.
  #
  # Most session state is maintained on the server.  However, a session
  # id must be passed backwards and forwards between client and server
  # to maintain a reference to this session state.
  #
  # The simplest way to do this is via cookies.  The CGI::Session class
  # provides transparent support for session id communication via cookies
  # if the client has cookies enabled.
  #
  # If the client has cookies disabled, the session id must be included
  # as a parameter of all requests sent by the client to the server.  The
  # CGI::Session class in conjunction with the CGI class will transparently
  # add the session id as a hidden input field to all forms generated
  # using the CGI#form() HTML generation method.  No built-in support is
  # provided for other mechanisms, such as URL re-writing.  The caller is
  # responsible for extracting the session id from the session_id
  # attribute and manually encoding it in URLs and adding it as a hidden
  # input to HTML forms created by other mechanisms.  Also, session expiry
  # is not automatically handled.
  #
  # == Examples of use
  #
  # === Setting the user's name
  #
  #   require 'cgi'
  #   require 'cgi/session'
  #   require 'cgi/session/pstore'     # provides CGI::Session::PStore
  #
  #   cgi = CGI.new("html4")
  #
  #   session = CGI::Session.new(cgi,
  #       'database_manager' => CGI::Session::PStore,  # use PStore
  #       'session_key' => '_rb_sess_id',              # custom session key
  #       'session_expires' => Time.now + 30 * 60,     # 30 minute timeout
  #       'prefix' => 'pstore_sid_')                   # PStore option
  #   if cgi.has_key?('user_name') and cgi['user_name'] != ''
  #       # coerce to String: cgi[] returns the
  #       # string-like CGI::QueryExtension::Value
  #       session['user_name'] = cgi['user_name'].to_s
  #   elsif !session['user_name']
  #       session['user_name'] = "guest"
  #   end
  #   session.close
  #
  # === Creating a new session safely
  #
  #   require 'cgi'
  #   require 'cgi/session'
  #
  #   cgi = CGI.new("html4")
  #
  #   # We make sure to delete an old session if one exists,
  #   # not just to free resources, but to prevent the session
  #   # from being maliciously hijacked later on.
  #   begin
  #       session = CGI::Session.new(cgi, 'new_session' => false)
  #       session.delete
  #   rescue ArgumentError  # if no old session
  #   end
  #   session = CGI::Session.new(cgi, 'new_session' => true)
  #   session.close
  #
  class Session

    class NoSession < RuntimeError #:nodoc:
    end

    # The id of this session.
    attr_reader :session_id, :new_session

    def Session::callback(dbman)  #:nodoc:
      Proc.new{
        dbman[0].close unless dbman.empty?
      }
    end

    # Create a new session id.
    #
    # The session id is a secure random number by SecureRandom
    # if possible, otherwise an SHA512 hash based upon the time,
    # a random number, and a constant string.  This routine is
    # used internally for automatically generated session ids.
    def create_new_id
      require 'securerandom'
      begin
        # by OpenSSL, or system provided entropy pool
        session_id = SecureRandom.hex(16)
      rescue NotImplementedError
        # never happens on modern systems
        require 'digest'
        d = Digest('SHA512').new
        now = Time::now
        d.update(now.to_s)
        d.update(String(now.usec))
        d.update(String(rand(0)))
        d.update(String($$))
        d.update('foobar')
        session_id = d.hexdigest[0, 32]
      end
      session_id
    end
    private :create_new_id


    # Create a new file to store the session data.
    #
    # This file will be created if it does not exist, or opened if it
    # does.
    #
    # This path is generated under _tmpdir_ from _prefix_, the
    # digested session id, and _suffix_.
    #
    # +option+ is a hash of options for the initializer.  The
    # following options are recognised:
    #
    # tmpdir:: the directory to use for storing the FileStore
    #          file.  Defaults to Dir::tmpdir (generally "/tmp"
    #          on Unix systems).
    # prefix:: the prefix to add to the session id when generating
    #          the filename for this session's FileStore file.
    #          Defaults to "cgi_sid_".
    # suffix:: the prefix to add to the session id when generating
    #          the filename for this session's FileStore file.
    #          Defaults to the empty string.
    def new_store_file(option={}) # :nodoc:
      dir = option['tmpdir'] || Dir::tmpdir
      prefix = option['prefix']
      suffix = option['suffix']
      require 'digest/md5'
      md5 = Digest::MD5.hexdigest(session_id)[0,16]
      path = dir+"/"
      path << prefix if prefix
      path << md5
      path << suffix if suffix
      if File::exist? path
        hash = nil
      elsif new_session
        hash = {}
      else
        raise NoSession, "uninitialized session"
      end
      return path, hash
    end

    # Create a new CGI::Session object for +request+.
    #
    # +request+ is an instance of the +CGI+ class (see cgi.rb).
    # +option+ is a hash of options for initialising this
    # CGI::Session instance.  The following options are
    # recognised:
    #
    # session_key:: the parameter name used for the session id.
    #               Defaults to '_session_id'.
    # session_id:: the session id to use.  If not provided, then
    #              it is retrieved from the +session_key+ parameter
    #              of the request, or automatically generated for
    #              a new session.
    # new_session:: if true, force creation of a new session.  If not set,
    #               a new session is only created if none currently
    #               exists.  If false, a new session is never created,
    #               and if none currently exists and the +session_id+
    #               option is not set, an ArgumentError is raised.
    # database_manager:: the name of the class providing storage facilities
    #                    for session state persistence.  Built-in support
    #                    is provided for +FileStore+ (the default),
    #                    +MemoryStore+, and +PStore+ (from
    #                    cgi/session/pstore.rb).  See the documentation for
    #                    these classes for more details.
    #
    # The following options are also recognised, but only apply if the
    # session id is stored in a cookie.
    #
    # session_expires:: the time the current session expires, as a
    #                   +Time+ object.  If not set, the session will terminate
    #                   when the user's browser is closed.
    # session_domain:: the hostname domain for which this session is valid.
    #                  If not set, defaults to the hostname of the server.
    # session_secure:: if +true+, this session will only work over HTTPS.
    # session_path:: the path for which this session applies.  Defaults
    #                to the directory of the CGI script.
    #
    # +option+ is also passed on to the session storage class initializer; see
    # the documentation for each session storage class for the options
    # they support.
    #
    # The retrieved or created session is automatically added to +request+
    # as a cookie, and also to its +output_hidden+ table, which is used
    # to add hidden input elements to forms.
    #
    # *WARNING* the +output_hidden+
    # fields are surrounded by a <fieldset> tag in HTML 4 generation, which
    # is _not_ invisible on many browsers; you may wish to disable the
    # use of fieldsets with code similar to the following
    # (see https://blade.ruby-lang.org/ruby-list/37805)
    #
    #   cgi = CGI.new("html4")
    #   class << cgi
    #       undef_method :fieldset
    #   end
    #
    def initialize(request, option={})
      @new_session = false
      session_key = option['session_key'] || '_session_id'
      session_id = option['session_id']
      unless session_id
        if option['new_session']
          session_id = create_new_id
          @new_session = true
        end
      end
      unless session_id
        if request.key?(session_key)
          session_id = request[session_key]
          session_id = session_id.read if session_id.respond_to?(:read)
        end
        unless session_id
          session_id, = request.cookies[session_key]
        end
        unless session_id
          unless option.fetch('new_session', true)
            raise ArgumentError, "session_key `%s' should be supplied"%session_key
          end
          session_id = create_new_id
          @new_session = true
        end
      end
      @session_id = session_id
      dbman = option['database_manager'] || FileStore
      begin
        @dbman = dbman::new(self, option)
      rescue NoSession
        unless option.fetch('new_session', true)
          raise ArgumentError, "invalid session_id `%s'"%session_id
        end
        session_id = @session_id = create_new_id unless session_id
        @new_session=true
        retry
      end
      request.instance_eval do
        @output_hidden = {session_key => session_id} unless option['no_hidden']
        @output_cookies =  [
          Cookie::new("name" => session_key,
          "value" => session_id,
          "expires" => option['session_expires'],
          "domain" => option['session_domain'],
          "secure" => option['session_secure'],
          "path" =>
          if option['session_path']
            option['session_path']
          elsif ENV["SCRIPT_NAME"]
            File::dirname(ENV["SCRIPT_NAME"])
          else
          ""
          end)
        ] unless option['no_cookies']
      end
      @dbprot = [@dbman]
      ObjectSpace::define_finalizer(self, Session::callback(@dbprot))
    end

    # Retrieve the session data for key +key+.
    def [](key)
      @data ||= @dbman.restore
      @data[key]
    end

    # Set the session data for key +key+.
    def []=(key, val)
      @write_lock ||= true
      @data ||= @dbman.restore
      @data[key] = val
    end

    # Store session data on the server.  For some session storage types,
    # this is a no-op.
    def update
      @dbman.update
    end

    # Store session data on the server and close the session storage.
    # For some session storage types, this is a no-op.
    def close
      @dbman.close
      @dbprot.clear
    end

    # Delete the session from storage.  Also closes the storage.
    #
    # Note that the session's data is _not_ automatically deleted
    # upon the session expiring.
    def delete
      @dbman.delete
      @dbprot.clear
    end

    # File-based session storage class.
    #
    # Implements session storage as a flat file of 'key=value' values.
    # This storage type only works directly with String values; the
    # user is responsible for converting other types to Strings when
    # storing and from Strings when retrieving.
    class FileStore
      # Create a new FileStore instance.
      #
      # This constructor is used internally by CGI::Session.  The
      # user does not generally need to call it directly.
      #
      # +session+ is the session for which this instance is being
      # created.  The session id must only contain alphanumeric
      # characters; automatically generated session ids observe
      # this requirement.
      #
      # +option+ is a hash of options for the initializer.  The
      # following options are recognised:
      #
      # tmpdir:: the directory to use for storing the FileStore
      #          file.  Defaults to Dir::tmpdir (generally "/tmp"
      #          on Unix systems).
      # prefix:: the prefix to add to the session id when generating
      #          the filename for this session's FileStore file.
      #          Defaults to "cgi_sid_".
      # suffix:: the prefix to add to the session id when generating
      #          the filename for this session's FileStore file.
      #          Defaults to the empty string.
      #
      # This session's FileStore file will be created if it does
      # not exist, or opened if it does.
      def initialize(session, option={})
        option = {'prefix' => 'cgi_sid_'}.update(option)
        @path, @hash = session.new_store_file(option)
      end

      # Restore session state from the session's FileStore file.
      #
      # Returns the session state as a hash.
      def restore
        unless @hash
          @hash = {}
          begin
            lockf = File.open(@path+".lock", "r")
            lockf.flock File::LOCK_SH
            f = File.open(@path, 'r')
            for line in f
              line.chomp!
              k, v = line.split('=',2)
              @hash[CGI.unescape(k)] = Marshal.restore(CGI.unescape(v))
            end
          ensure
            f&.close
            lockf&.close
          end
        end
        @hash
      end

      # Save session state to the session's FileStore file.
      def update
        return unless @hash
        begin
          lockf = File.open(@path+".lock", File::CREAT|File::RDWR, 0600)
          lockf.flock File::LOCK_EX
          f = File.open(@path+".new", File::CREAT|File::TRUNC|File::WRONLY, 0600)
          for k,v in @hash
            f.printf "%s=%s\n", CGI.escape(k), CGI.escape(String(Marshal.dump(v)))
          end
          f.close
          File.rename @path+".new", @path
        ensure
          f&.close
          lockf&.close
        end
      end

      # Update and close the session's FileStore file.
      def close
        update
      end

      # Close and delete the session's FileStore file.
      def delete
        File::unlink @path+".lock" rescue nil
        File::unlink @path+".new" rescue nil
        File::unlink @path rescue nil
      end
    end

    # In-memory session storage class.
    #
    # Implements session storage as a global in-memory hash.  Session
    # data will only persist for as long as the Ruby interpreter
    # instance does.
    class MemoryStore
      GLOBAL_HASH_TABLE = {} #:nodoc:

      # Create a new MemoryStore instance.
      #
      # +session+ is the session this instance is associated with.
      # +option+ is a list of initialisation options.  None are
      # currently recognized.
      def initialize(session, option=nil)
        @session_id = session.session_id
        unless GLOBAL_HASH_TABLE.key?(@session_id)
          unless session.new_session
            raise CGI::Session::NoSession, "uninitialized session"
          end
          GLOBAL_HASH_TABLE[@session_id] = {}
        end
      end

      # Restore session state.
      #
      # Returns session data as a hash.
      def restore
        GLOBAL_HASH_TABLE[@session_id]
      end

      # Update session state.
      #
      # A no-op.
      def update
        # don't need to update; hash is shared
      end

      # Close session storage.
      #
      # A no-op.
      def close
        # don't need to close
      end

      # Delete the session state.
      def delete
        GLOBAL_HASH_TABLE.delete(@session_id)
      end
    end

    # Dummy session storage class.
    #
    # Implements session storage place holder.  No actual storage
    # will be done.
    class NullStore
      # Create a new NullStore instance.
      #
      # +session+ is the session this instance is associated with.
      # +option+ is a list of initialisation options.  None are
      # currently recognised.
      def initialize(session, option=nil)
      end

      # Restore (empty) session state.
      def restore
        {}
      end

      # Update session state.
      #
      # A no-op.
      def update
      end

      # Close session storage.
      #
      # A no-op.
      def close
      end

      # Delete the session state.
      #
      # A no-op.
      def delete
      end
    end
  end
end
PK*J[@��%u%ushare/ruby/cgi/core.rbnu�[���# frozen_string_literal: true
#--
# Methods for generating HTML, parsing CGI-related parameters, and
# generating HTTP responses.
#++
class CGI
  unless const_defined?(:Util)
    module Util
      @@accept_charset = "UTF-8" # :nodoc:
    end
    include Util
    extend Util
  end

  $CGI_ENV = ENV    # for FCGI support

  # String for carriage return
  CR  = "\015"

  # String for linefeed
  LF  = "\012"

  # Standard internet newline sequence
  EOL = CR + LF

  REVISION = '$Id$' #:nodoc:

  # Whether processing will be required in binary vs text
  NEEDS_BINMODE = File::BINARY != 0

  # Path separators in different environments.
  PATH_SEPARATOR = {'UNIX'=>'/', 'WINDOWS'=>'\\', 'MACINTOSH'=>':'}

  # HTTP status codes.
  HTTP_STATUS = {
    "OK"                  => "200 OK",
    "PARTIAL_CONTENT"     => "206 Partial Content",
    "MULTIPLE_CHOICES"    => "300 Multiple Choices",
    "MOVED"               => "301 Moved Permanently",
    "REDIRECT"            => "302 Found",
    "NOT_MODIFIED"        => "304 Not Modified",
    "BAD_REQUEST"         => "400 Bad Request",
    "AUTH_REQUIRED"       => "401 Authorization Required",
    "FORBIDDEN"           => "403 Forbidden",
    "NOT_FOUND"           => "404 Not Found",
    "METHOD_NOT_ALLOWED"  => "405 Method Not Allowed",
    "NOT_ACCEPTABLE"      => "406 Not Acceptable",
    "LENGTH_REQUIRED"     => "411 Length Required",
    "PRECONDITION_FAILED" => "412 Precondition Failed",
    "SERVER_ERROR"        => "500 Internal Server Error",
    "NOT_IMPLEMENTED"     => "501 Method Not Implemented",
    "BAD_GATEWAY"         => "502 Bad Gateway",
    "VARIANT_ALSO_VARIES" => "506 Variant Also Negotiates"
  }

  # :startdoc:

  # Synonym for ENV.
  def env_table
    ENV
  end

  # Synonym for $stdin.
  def stdinput
    $stdin
  end

  # Synonym for $stdout.
  def stdoutput
    $stdout
  end

  private :env_table, :stdinput, :stdoutput

  # Create an HTTP header block as a string.
  #
  # :call-seq:
  #   http_header(content_type_string="text/html")
  #   http_header(headers_hash)
  #
  # Includes the empty line that ends the header block.
  #
  # +content_type_string+::
  #   If this form is used, this string is the <tt>Content-Type</tt>
  # +headers_hash+::
  #   A Hash of header values. The following header keys are recognized:
  #
  #   type:: The Content-Type header.  Defaults to "text/html"
  #   charset:: The charset of the body, appended to the Content-Type header.
  #   nph:: A boolean value.  If true, prepend protocol string and status
  #         code, and date; and sets default values for "server" and
  #         "connection" if not explicitly set.
  #   status::
  #     The HTTP status code as a String, returned as the Status header.  The
  #     values are:
  #
  #     OK:: 200 OK
  #     PARTIAL_CONTENT:: 206 Partial Content
  #     MULTIPLE_CHOICES:: 300 Multiple Choices
  #     MOVED:: 301 Moved Permanently
  #     REDIRECT:: 302 Found
  #     NOT_MODIFIED:: 304 Not Modified
  #     BAD_REQUEST:: 400 Bad Request
  #     AUTH_REQUIRED:: 401 Authorization Required
  #     FORBIDDEN:: 403 Forbidden
  #     NOT_FOUND:: 404 Not Found
  #     METHOD_NOT_ALLOWED:: 405 Method Not Allowed
  #     NOT_ACCEPTABLE:: 406 Not Acceptable
  #     LENGTH_REQUIRED:: 411 Length Required
  #     PRECONDITION_FAILED:: 412 Precondition Failed
  #     SERVER_ERROR:: 500 Internal Server Error
  #     NOT_IMPLEMENTED:: 501 Method Not Implemented
  #     BAD_GATEWAY:: 502 Bad Gateway
  #     VARIANT_ALSO_VARIES:: 506 Variant Also Negotiates
  #
  #   server:: The server software, returned as the Server header.
  #   connection:: The connection type, returned as the Connection header (for
  #                instance, "close".
  #   length:: The length of the content that will be sent, returned as the
  #            Content-Length header.
  #   language:: The language of the content, returned as the Content-Language
  #              header.
  #   expires:: The time on which the current content expires, as a +Time+
  #             object, returned as the Expires header.
  #   cookie::
  #     A cookie or cookies, returned as one or more Set-Cookie headers.  The
  #     value can be the literal string of the cookie; a CGI::Cookie object;
  #     an Array of literal cookie strings or Cookie objects; or a hash all of
  #     whose values are literal cookie strings or Cookie objects.
  #
  #     These cookies are in addition to the cookies held in the
  #     @output_cookies field.
  #
  #   Other headers can also be set; they are appended as key: value.
  #
  # Examples:
  #
  #   http_header
  #     # Content-Type: text/html
  #
  #   http_header("text/plain")
  #     # Content-Type: text/plain
  #
  #   http_header("nph"        => true,
  #               "status"     => "OK",  # == "200 OK"
  #                 # "status"     => "200 GOOD",
  #               "server"     => ENV['SERVER_SOFTWARE'],
  #               "connection" => "close",
  #               "type"       => "text/html",
  #               "charset"    => "iso-2022-jp",
  #                 # Content-Type: text/html; charset=iso-2022-jp
  #               "length"     => 103,
  #               "language"   => "ja",
  #               "expires"    => Time.now + 30,
  #               "cookie"     => [cookie1, cookie2],
  #               "my_header1" => "my_value",
  #               "my_header2" => "my_value")
  #
  # This method does not perform charset conversion.
  def http_header(options='text/html')
    if options.is_a?(String)
      content_type = options
      buf = _header_for_string(content_type)
    elsif options.is_a?(Hash)
      if options.size == 1 && options.has_key?('type')
        content_type = options['type']
        buf = _header_for_string(content_type)
      else
        buf = _header_for_hash(options.dup)
      end
    else
      raise ArgumentError.new("expected String or Hash but got #{options.class}")
    end
    if defined?(MOD_RUBY)
      _header_for_modruby(buf)
      return ''
    else
      buf << EOL    # empty line of separator
      return buf
    end
  end # http_header()

  # This method is an alias for #http_header, when HTML5 tag maker is inactive.
  #
  # NOTE: use #http_header to create HTTP header blocks, this alias is only
  # provided for backwards compatibility.
  #
  # Using #header with the HTML5 tag maker will create a <header> element.
  alias :header :http_header

  def _no_crlf_check(str)
    if str
      str = str.to_s
      raise "A HTTP status or header field must not include CR and LF" if str =~ /[\r\n]/
      str
    else
      nil
    end
  end
  private :_no_crlf_check

  def _header_for_string(content_type) #:nodoc:
    buf = ''.dup
    if nph?()
      buf << "#{_no_crlf_check($CGI_ENV['SERVER_PROTOCOL']) || 'HTTP/1.0'} 200 OK#{EOL}"
      buf << "Date: #{CGI.rfc1123_date(Time.now)}#{EOL}"
      buf << "Server: #{_no_crlf_check($CGI_ENV['SERVER_SOFTWARE'])}#{EOL}"
      buf << "Connection: close#{EOL}"
    end
    buf << "Content-Type: #{_no_crlf_check(content_type)}#{EOL}"
    if @output_cookies
      @output_cookies.each {|cookie| buf << "Set-Cookie: #{_no_crlf_check(cookie)}#{EOL}" }
    end
    return buf
  end # _header_for_string
  private :_header_for_string

  def _header_for_hash(options)  #:nodoc:
    buf = ''.dup
    ## add charset to option['type']
    options['type'] ||= 'text/html'
    charset = options.delete('charset')
    options['type'] += "; charset=#{charset}" if charset
    ## NPH
    options.delete('nph') if defined?(MOD_RUBY)
    if options.delete('nph') || nph?()
      protocol = _no_crlf_check($CGI_ENV['SERVER_PROTOCOL']) || 'HTTP/1.0'
      status = options.delete('status')
      status = HTTP_STATUS[status] || _no_crlf_check(status) || '200 OK'
      buf << "#{protocol} #{status}#{EOL}"
      buf << "Date: #{CGI.rfc1123_date(Time.now)}#{EOL}"
      options['server'] ||= $CGI_ENV['SERVER_SOFTWARE'] || ''
      options['connection'] ||= 'close'
    end
    ## common headers
    status = options.delete('status')
    buf << "Status: #{HTTP_STATUS[status] || _no_crlf_check(status)}#{EOL}" if status
    server = options.delete('server')
    buf << "Server: #{_no_crlf_check(server)}#{EOL}" if server
    connection = options.delete('connection')
    buf << "Connection: #{_no_crlf_check(connection)}#{EOL}" if connection
    type = options.delete('type')
    buf << "Content-Type: #{_no_crlf_check(type)}#{EOL}" #if type
    length = options.delete('length')
    buf << "Content-Length: #{_no_crlf_check(length)}#{EOL}" if length
    language = options.delete('language')
    buf << "Content-Language: #{_no_crlf_check(language)}#{EOL}" if language
    expires = options.delete('expires')
    buf << "Expires: #{CGI.rfc1123_date(expires)}#{EOL}" if expires
    ## cookie
    if cookie = options.delete('cookie')
      case cookie
      when String, Cookie
        buf << "Set-Cookie: #{_no_crlf_check(cookie)}#{EOL}"
      when Array
        arr = cookie
        arr.each {|c| buf << "Set-Cookie: #{_no_crlf_check(c)}#{EOL}" }
      when Hash
        hash = cookie
        hash.each_value {|c| buf << "Set-Cookie: #{_no_crlf_check(c)}#{EOL}" }
      end
    end
    if @output_cookies
      @output_cookies.each {|c| buf << "Set-Cookie: #{_no_crlf_check(c)}#{EOL}" }
    end
    ## other headers
    options.each do |key, value|
      buf << "#{_no_crlf_check(key)}: #{_no_crlf_check(value)}#{EOL}"
    end
    return buf
  end # _header_for_hash
  private :_header_for_hash

  def nph?  #:nodoc:
    return /IIS\/(\d+)/ =~ $CGI_ENV['SERVER_SOFTWARE'] && $1.to_i < 5
  end

  def _header_for_modruby(buf)  #:nodoc:
    request = Apache::request
    buf.scan(/([^:]+): (.+)#{EOL}/o) do |name, value|
      $stderr.printf("name:%s value:%s\n", name, value) if $DEBUG
      case name
      when 'Set-Cookie'
        request.headers_out.add(name, value)
      when /^status$/i
        request.status_line = value
        request.status = value.to_i
      when /^content-type$/i
        request.content_type = value
      when /^content-encoding$/i
        request.content_encoding = value
      when /^location$/i
        request.status = 302 if request.status == 200
        request.headers_out[name] = value
      else
        request.headers_out[name] = value
      end
    end
    request.send_http_header
    return ''
  end
  private :_header_for_modruby

  # Print an HTTP header and body to $DEFAULT_OUTPUT ($>)
  #
  # :call-seq:
  #   cgi.out(content_type_string='text/html')
  #   cgi.out(headers_hash)
  #
  # +content_type_string+::
  #   If a string is passed, it is assumed to be the content type.
  # +headers_hash+::
  #   This is a Hash of headers, similar to that used by #http_header.
  # +block+::
  #   A block is required and should evaluate to the body of the response.
  #
  # <tt>Content-Length</tt> is automatically calculated from the size of
  # the String returned by the content block.
  #
  # If <tt>ENV['REQUEST_METHOD'] == "HEAD"</tt>, then only the header
  # is output (the content block is still required, but it is ignored).
  #
  # If the charset is "iso-2022-jp" or "euc-jp" or "shift_jis" then the
  # content is converted to this charset, and the language is set to "ja".
  #
  # Example:
  #
  #   cgi = CGI.new
  #   cgi.out{ "string" }
  #     # Content-Type: text/html
  #     # Content-Length: 6
  #     #
  #     # string
  #
  #   cgi.out("text/plain") { "string" }
  #     # Content-Type: text/plain
  #     # Content-Length: 6
  #     #
  #     # string
  #
  #   cgi.out("nph"        => true,
  #           "status"     => "OK",  # == "200 OK"
  #           "server"     => ENV['SERVER_SOFTWARE'],
  #           "connection" => "close",
  #           "type"       => "text/html",
  #           "charset"    => "iso-2022-jp",
  #             # Content-Type: text/html; charset=iso-2022-jp
  #           "language"   => "ja",
  #           "expires"    => Time.now + (3600 * 24 * 30),
  #           "cookie"     => [cookie1, cookie2],
  #           "my_header1" => "my_value",
  #           "my_header2" => "my_value") { "string" }
  #      # HTTP/1.1 200 OK
  #      # Date: Sun, 15 May 2011 17:35:54 GMT
  #      # Server: Apache 2.2.0
  #      # Connection: close
  #      # Content-Type: text/html; charset=iso-2022-jp
  #      # Content-Length: 6
  #      # Content-Language: ja
  #      # Expires: Tue, 14 Jun 2011 17:35:54 GMT
  #      # Set-Cookie: foo
  #      # Set-Cookie: bar
  #      # my_header1: my_value
  #      # my_header2: my_value
  #      #
  #      # string
  def out(options = "text/html") # :yield:

    options = { "type" => options } if options.kind_of?(String)
    content = yield
    options["length"] = content.bytesize.to_s
    output = stdoutput
    output.binmode if defined? output.binmode
    output.print http_header(options)
    output.print content unless "HEAD" == env_table['REQUEST_METHOD']
  end


  # Print an argument or list of arguments to the default output stream
  #
  #   cgi = CGI.new
  #   cgi.print    # default:  cgi.print == $DEFAULT_OUTPUT.print
  def print(*options)
    stdoutput.print(*options)
  end

  # Parse an HTTP query string into a hash of key=>value pairs.
  #
  #   params = CGI.parse("query_string")
  #     # {"name1" => ["value1", "value2", ...],
  #     #  "name2" => ["value1", "value2", ...], ... }
  #
  def self.parse(query)
    params = {}
    query.split(/[&;]/).each do |pairs|
      key, value = pairs.split('=',2).collect{|v| CGI.unescape(v) }

      next unless key

      params[key] ||= []
      params[key].push(value) if value
    end

    params.default=[].freeze
    params
  end

  # Maximum content length of post data
  ##MAX_CONTENT_LENGTH  = 2 * 1024 * 1024

  # Maximum number of request parameters when multipart
  MAX_MULTIPART_COUNT = 128

  # Mixin module that provides the following:
  #
  # 1. Access to the CGI environment variables as methods.  See
  #    documentation to the CGI class for a list of these variables.  The
  #    methods are exposed by removing the leading +HTTP_+ (if it exists) and
  #    downcasing the name.  For example, +auth_type+ will return the
  #    environment variable +AUTH_TYPE+, and +accept+ will return the value
  #    for +HTTP_ACCEPT+.
  #
  # 2. Access to cookies, including the cookies attribute.
  #
  # 3. Access to parameters, including the params attribute, and overloading
  #    #[] to perform parameter value lookup by key.
  #
  # 4. The initialize_query method, for initializing the above
  #    mechanisms, handling multipart forms, and allowing the
  #    class to be used in "offline" mode.
  #
  module QueryExtension

    %w[ CONTENT_LENGTH SERVER_PORT ].each do |env|
      define_method(env.delete_prefix('HTTP_').downcase) do
        (val = env_table[env]) && Integer(val)
      end
    end

    %w[ AUTH_TYPE CONTENT_TYPE GATEWAY_INTERFACE PATH_INFO
        PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST
        REMOTE_IDENT REMOTE_USER REQUEST_METHOD SCRIPT_NAME
        SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE

        HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING
        HTTP_ACCEPT_LANGUAGE HTTP_CACHE_CONTROL HTTP_FROM HTTP_HOST
        HTTP_NEGOTIATE HTTP_PRAGMA HTTP_REFERER HTTP_USER_AGENT ].each do |env|
      define_method(env.delete_prefix('HTTP_').downcase) do
        env_table[env]
      end
    end

    # Get the raw cookies as a string.
    def raw_cookie
      env_table["HTTP_COOKIE"]
    end

    # Get the raw RFC2965 cookies as a string.
    def raw_cookie2
      env_table["HTTP_COOKIE2"]
    end

    # Get the cookies as a hash of cookie-name=>Cookie pairs.
    attr_accessor :cookies

    # Get the parameters as a hash of name=>values pairs, where
    # values is an Array.
    attr_reader :params

    # Get the uploaded files as a hash of name=>values pairs
    attr_reader :files

    # Set all the parameters.
    def params=(hash)
      @params.clear
      @params.update(hash)
    end

    ##
    # Parses multipart form elements according to
    #   http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
    #
    # Returns a hash of multipart form parameters with bodies of type StringIO or
    # Tempfile depending on whether the multipart form element exceeds 10 KB
    #
    #   params[name => body]
    #
    def read_multipart(boundary, content_length)
      ## read first boundary
      stdin = stdinput
      first_line = "--#{boundary}#{EOL}"
      content_length -= first_line.bytesize
      status = stdin.read(first_line.bytesize)
      raise EOFError.new("no content body")  unless status
      raise EOFError.new("bad content body") unless first_line == status
      ## parse and set params
      params = {}
      @files = {}
      boundary_rexp = /--#{Regexp.quote(boundary)}(#{EOL}|--)/
      boundary_size = "#{EOL}--#{boundary}#{EOL}".bytesize
      buf = ''.dup
      bufsize = 10 * 1024
      max_count = MAX_MULTIPART_COUNT
      n = 0
      tempfiles = []
      while true
        (n += 1) < max_count or raise StandardError.new("too many parameters.")
        ## create body (StringIO or Tempfile)
        body = create_body(bufsize < content_length)
        tempfiles << body if defined?(Tempfile) && body.kind_of?(Tempfile)
        class << body
          if method_defined?(:path)
            alias local_path path
          else
            def local_path
              nil
            end
          end
          attr_reader :original_filename, :content_type
        end
        ## find head and boundary
        head = nil
        separator = EOL * 2
        until head && matched = boundary_rexp.match(buf)
          if !head && pos = buf.index(separator)
            len  = pos + EOL.bytesize
            head = buf[0, len]
            buf  = buf[(pos+separator.bytesize)..-1]
          else
            if head && buf.size > boundary_size
              len = buf.size - boundary_size
              body.print(buf[0, len])
              buf[0, len] = ''
            end
            c = stdin.read(bufsize < content_length ? bufsize : content_length)
            raise EOFError.new("bad content body") if c.nil? || c.empty?
            buf << c
            content_length -= c.bytesize
          end
        end
        ## read to end of boundary
        m = matched
        len = m.begin(0)
        s = buf[0, len]
        if s =~ /(\r?\n)\z/
          s = buf[0, len - $1.bytesize]
        end
        body.print(s)
        buf = buf[m.end(0)..-1]
        boundary_end = m[1]
        content_length = -1 if boundary_end == '--'
        ## reset file cursor position
        body.rewind
        ## original filename
        /Content-Disposition:.* filename=(?:"(.*?)"|([^;\r\n]*))/i.match(head)
        filename = $1 || $2 || ''.dup
        filename = CGI.unescape(filename) if unescape_filename?()
        body.instance_variable_set(:@original_filename, filename)
        ## content type
        /Content-Type: (.*)/i.match(head)
        (content_type = $1 || ''.dup).chomp!
        body.instance_variable_set(:@content_type, content_type)
        ## query parameter name
        /Content-Disposition:.* name=(?:"(.*?)"|([^;\r\n]*))/i.match(head)
        name = $1 || $2 || ''
        if body.original_filename.empty?
          value=body.read.dup.force_encoding(@accept_charset)
          body.close! if defined?(Tempfile) && body.kind_of?(Tempfile)
          (params[name] ||= []) << value
          unless value.valid_encoding?
            if @accept_charset_error_block
              @accept_charset_error_block.call(name,value)
            else
              raise InvalidEncoding,"Accept-Charset encoding error"
            end
          end
          class << params[name].last;self;end.class_eval do
            define_method(:read){self}
            define_method(:original_filename){""}
            define_method(:content_type){""}
          end
        else
          (params[name] ||= []) << body
          @files[name]=body
        end
        ## break loop
        break if content_length == -1
      end
      raise EOFError, "bad boundary end of body part" unless boundary_end =~ /--/
      params.default = []
      params
    rescue Exception
      if tempfiles
        tempfiles.each {|t|
          if t.path
            t.close!
          end
        }
      end
      raise
    end # read_multipart
    private :read_multipart
    def create_body(is_large)  #:nodoc:
      if is_large
        require 'tempfile'
        body = Tempfile.new('CGI', encoding: Encoding::ASCII_8BIT)
      else
        begin
          require 'stringio'
          body = StringIO.new("".b)
        rescue LoadError
          require 'tempfile'
          body = Tempfile.new('CGI', encoding: Encoding::ASCII_8BIT)
        end
      end
      body.binmode if defined? body.binmode
      return body
    end
    def unescape_filename?  #:nodoc:
      user_agent = $CGI_ENV['HTTP_USER_AGENT']
      return false unless user_agent
      return /Mac/i.match(user_agent) && /Mozilla/i.match(user_agent) && !/MSIE/i.match(user_agent)
    end

    # offline mode. read name=value pairs on standard input.
    def read_from_cmdline
      require "shellwords"

      string = unless ARGV.empty?
        ARGV.join(' ')
      else
        if STDIN.tty?
          STDERR.print(
            %|(offline mode: enter name=value pairs on standard input)\n|
          )
        end
        array = readlines rescue nil
        if not array.nil?
            array.join(' ').gsub(/\n/n, '')
        else
            ""
        end
      end.gsub(/\\=/n, '%3D').gsub(/\\&/n, '%26')

      words = Shellwords.shellwords(string)

      if words.find{|x| /=/n.match(x) }
        words.join('&')
      else
        words.join('+')
      end
    end
    private :read_from_cmdline

    # A wrapper class to use a StringIO object as the body and switch
    # to a TempFile when the passed threshold is passed.
    # Initialize the data from the query.
    #
    # Handles multipart forms (in particular, forms that involve file uploads).
    # Reads query parameters in the @params field, and cookies into @cookies.
    def initialize_query()
      if ("POST" == env_table['REQUEST_METHOD']) and
        %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?| =~ env_table['CONTENT_TYPE']
        current_max_multipart_length = @max_multipart_length.respond_to?(:call) ? @max_multipart_length.call : @max_multipart_length
        raise StandardError.new("too large multipart data.") if env_table['CONTENT_LENGTH'].to_i > current_max_multipart_length
        boundary = $1.dup
        @multipart = true
        @params = read_multipart(boundary, Integer(env_table['CONTENT_LENGTH']))
      else
        @multipart = false
        @params = CGI.parse(
                    case env_table['REQUEST_METHOD']
                    when "GET", "HEAD"
                      if defined?(MOD_RUBY)
                        Apache::request.args or ""
                      else
                        env_table['QUERY_STRING'] or ""
                      end
                    when "POST"
                      stdinput.binmode if defined? stdinput.binmode
                      stdinput.read(Integer(env_table['CONTENT_LENGTH'])) or ''
                    else
                      read_from_cmdline
                    end.dup.force_encoding(@accept_charset)
                  )
        unless Encoding.find(@accept_charset) == Encoding::ASCII_8BIT
          @params.each do |key,values|
            values.each do |value|
              unless value.valid_encoding?
                if @accept_charset_error_block
                  @accept_charset_error_block.call(key,value)
                else
                  raise InvalidEncoding,"Accept-Charset encoding error"
                end
              end
            end
          end
        end
      end

      @cookies = CGI::Cookie.parse((env_table['HTTP_COOKIE'] or env_table['COOKIE']))
    end
    private :initialize_query

    # Returns whether the form contained multipart/form-data
    def multipart?
      @multipart
    end

    # Get the value for the parameter with a given key.
    #
    # If the parameter has multiple values, only the first will be
    # retrieved; use #params to get the array of values.
    def [](key)
      params = @params[key]
      return '' unless params
      value = params[0]
      if @multipart
        if value
          return value
        elsif defined? StringIO
          StringIO.new("".b)
        else
          Tempfile.new("CGI",encoding: Encoding::ASCII_8BIT)
        end
      else
        str = if value then value.dup else "" end
        str
      end
    end

    # Return all query parameter names as an array of String.
    def keys(*args)
      @params.keys(*args)
    end

    # Returns true if a given query string parameter exists.
    def has_key?(*args)
      @params.has_key?(*args)
    end
    alias key? has_key?
    alias include? has_key?

  end # QueryExtension

  # Exception raised when there is an invalid encoding detected
  class InvalidEncoding < Exception; end

  # @@accept_charset is default accept character set.
  # This default value default is "UTF-8"
  # If you want to change the default accept character set
  # when create a new CGI instance, set this:
  #
  #   CGI.accept_charset = "EUC-JP"
  #
  @@accept_charset="UTF-8" if false # needed for rdoc?

  # Return the accept character set for all new CGI instances.
  def self.accept_charset
    @@accept_charset
  end

  # Set the accept character set for all new CGI instances.
  def self.accept_charset=(accept_charset)
    @@accept_charset=accept_charset
  end

  # Return the accept character set for this CGI instance.
  attr_reader :accept_charset

  # @@max_multipart_length is the maximum length of multipart data.
  # The default value is 128 * 1024 * 1024 bytes
  #
  # The default can be set to something else in the CGI constructor,
  # via the :max_multipart_length key in the option hash.
  #
  # See CGI.new documentation.
  #
  @@max_multipart_length= 128 * 1024 * 1024

  # Create a new CGI instance.
  #
  # :call-seq:
  #   CGI.new(tag_maker) { block }
  #   CGI.new(options_hash = {}) { block }
  #
  #
  # <tt>tag_maker</tt>::
  #   This is the same as using the +options_hash+ form with the value <tt>{
  #   :tag_maker => tag_maker }</tt> Note that it is recommended to use the
  #   +options_hash+ form, since it also allows you specify the charset you
  #   will accept.
  # <tt>options_hash</tt>::
  #   A Hash that recognizes three options:
  #
  #   <tt>:accept_charset</tt>::
  #     specifies encoding of received query string.  If omitted,
  #     <tt>@@accept_charset</tt> is used.  If the encoding is not valid, a
  #     CGI::InvalidEncoding will be raised.
  #
  #     Example. Suppose <tt>@@accept_charset</tt> is "UTF-8"
  #
  #     when not specified:
  #
  #         cgi=CGI.new      # @accept_charset # => "UTF-8"
  #
  #     when specified as "EUC-JP":
  #
  #         cgi=CGI.new(:accept_charset => "EUC-JP") # => "EUC-JP"
  #
  #   <tt>:tag_maker</tt>::
  #     String that specifies which version of the HTML generation methods to
  #     use.  If not specified, no HTML generation methods will be loaded.
  #
  #     The following values are supported:
  #
  #     "html3":: HTML 3.x
  #     "html4":: HTML 4.0
  #     "html4Tr":: HTML 4.0 Transitional
  #     "html4Fr":: HTML 4.0 with Framesets
  #     "html5":: HTML 5
  #
  #   <tt>:max_multipart_length</tt>::
  #     Specifies maximum length of multipart data. Can be an Integer scalar or
  #     a lambda, that will be evaluated when the request is parsed. This
  #     allows more complex logic to be set when determining whether to accept
  #     multipart data (e.g. consult a registered users upload allowance)
  #
  #     Default is 128 * 1024 * 1024 bytes
  #
  #         cgi=CGI.new(:max_multipart_length => 268435456) # simple scalar
  #
  #         cgi=CGI.new(:max_multipart_length => -> {check_filesystem}) # lambda
  #
  # <tt>block</tt>::
  #   If provided, the block is called when an invalid encoding is
  #   encountered. For example:
  #
  #     encoding_errors={}
  #     cgi=CGI.new(:accept_charset=>"EUC-JP") do |name,value|
  #       encoding_errors[name] = value
  #     end
  #
  # Finally, if the CGI object is not created in a standard CGI call
  # environment (that is, it can't locate REQUEST_METHOD in its environment),
  # then it will run in "offline" mode.  In this mode, it reads its parameters
  # from the command line or (failing that) from standard input.  Otherwise,
  # cookies and other parameters are parsed automatically from the standard
  # CGI locations, which varies according to the REQUEST_METHOD.
  def initialize(options = {}, &block) # :yields: name, value
    @accept_charset_error_block = block_given? ? block : nil
    @options={
      :accept_charset=>@@accept_charset,
      :max_multipart_length=>@@max_multipart_length
    }
    case options
    when Hash
      @options.merge!(options)
    when String
      @options[:tag_maker]=options
    end
    @accept_charset=@options[:accept_charset]
    @max_multipart_length=@options[:max_multipart_length]
    if defined?(MOD_RUBY) && !ENV.key?("GATEWAY_INTERFACE")
      Apache.request.setup_cgi_env
    end

    extend QueryExtension
    @multipart = false

    initialize_query()  # set @params, @cookies
    @output_cookies = nil
    @output_hidden = nil

    case @options[:tag_maker]
    when "html3"
      require_relative 'html'
      extend Html3
      extend HtmlExtension
    when "html4"
      require_relative 'html'
      extend Html4
      extend HtmlExtension
    when "html4Tr"
      require_relative 'html'
      extend Html4Tr
      extend HtmlExtension
    when "html4Fr"
      require_relative 'html'
      extend Html4Tr
      extend Html4Fr
      extend HtmlExtension
    when "html5"
      require_relative 'html'
      extend Html5
      extend HtmlExtension
    end
  end

end   # class CGI
PK*J[���҄
�
 share/ruby/cgi/session/pstore.rbnu�[���# frozen_string_literal: true
#
# cgi/session/pstore.rb - persistent storage of marshalled session data
#
# Documentation: William Webber (william@williamwebber.com)
#
# == Overview
#
# This file provides the CGI::Session::PStore class, which builds
# persistent of session data on top of the pstore library.  See
# cgi/session.rb for more details on session storage managers.

require_relative '../session'
begin
  require 'pstore'
rescue LoadError
end

class CGI
  class Session
    # PStore-based session storage class.
    #
    # This builds upon the top-level PStore class provided by the
    # library file pstore.rb.  Session data is marshalled and stored
    # in a file.  File locking and transaction services are provided.
    class PStore
      # Create a new CGI::Session::PStore instance
      #
      # This constructor is used internally by CGI::Session.  The
      # user does not generally need to call it directly.
      #
      # +session+ is the session for which this instance is being
      # created.  The session id must only contain alphanumeric
      # characters; automatically generated session ids observe
      # this requirement.
      #
      # +option+ is a hash of options for the initializer.  The
      # following options are recognised:
      #
      # tmpdir:: the directory to use for storing the PStore
      #          file.  Defaults to Dir::tmpdir (generally "/tmp"
      #          on Unix systems).
      # prefix:: the prefix to add to the session id when generating
      #          the filename for this session's PStore file.
      #          Defaults to the empty string.
      #
      # This session's PStore file will be created if it does
      # not exist, or opened if it does.
      def initialize(session, option={})
        option = {'suffix'=>''}.update(option)
        path, @hash = session.new_store_file(option)
        @p = ::PStore.new(path)
        @p.transaction do |p|
          File.chmod(0600, p.path)
        end
      end

      # Restore session state from the session's PStore file.
      #
      # Returns the session state as a hash.
      def restore
        unless @hash
          @p.transaction do
            @hash = @p['hash'] || {}
          end
        end
        @hash
      end

      # Save session state to the session's PStore file.
      def update
        @p.transaction do
          @p['hash'] = @hash
        end
      end

      # Update and close the session's PStore file.
      def close
        update
      end

      # Close and delete the session's PStore file.
      def delete
        path = @p.path
        File::unlink path
      end

    end if defined?(::PStore)
  end
end
# :enddoc:
PK*J[����E E share/ruby/cgi/util.rbnu�[���# frozen_string_literal: true
class CGI
  module Util; end
  include Util
  extend Util
end
module CGI::Util
  @@accept_charset = Encoding::UTF_8 unless defined?(@@accept_charset)

  # URL-encode a string into application/x-www-form-urlencoded.
  # Space characters (+" "+) are encoded with plus signs (+"+"+)
  #   url_encoded_string = CGI.escape("'Stop!' said Fred")
  #      # => "%27Stop%21%27+said+Fred"
  def escape(string)
    encoding = string.encoding
    buffer = string.b
    buffer.gsub!(/([^ a-zA-Z0-9_.\-~]+)/) do |m|
      '%' + m.unpack('H2' * m.bytesize).join('%').upcase
    end
    buffer.tr!(' ', '+')
    buffer.force_encoding(encoding)
  end

  # URL-decode an application/x-www-form-urlencoded string with encoding(optional).
  #   string = CGI.unescape("%27Stop%21%27+said+Fred")
  #      # => "'Stop!' said Fred"
  def unescape(string, encoding = @@accept_charset)
    str = string.tr('+', ' ')
    str = str.b
    str.gsub!(/((?:%[0-9a-fA-F]{2})+)/) do |m|
      [m.delete('%')].pack('H*')
    end
    str.force_encoding(encoding)
    str.valid_encoding? ? str : str.force_encoding(string.encoding)
  end

  # URL-encode a string following RFC 3986
  # Space characters (+" "+) are encoded with (+"%20"+)
  #   url_encoded_string = CGI.escapeURIComponent("'Stop!' said Fred")
  #      # => "%27Stop%21%27%20said%20Fred"
  def escapeURIComponent(string)
    encoding = string.encoding
    buffer = string.b
    buffer.gsub!(/([^a-zA-Z0-9_.\-~]+)/) do |m|
      '%' + m.unpack('H2' * m.bytesize).join('%').upcase
    end
    buffer.force_encoding(encoding)
  end
  alias escape_uri_component escapeURIComponent

  # URL-decode a string following RFC 3986 with encoding(optional).
  #   string = CGI.unescapeURIComponent("%27Stop%21%27+said%20Fred")
  #      # => "'Stop!'+said Fred"
  def unescapeURIComponent(string, encoding = @@accept_charset)
    str = string.b
    str.gsub!(/((?:%[0-9a-fA-F]{2})+)/) do |m|
      [m.delete('%')].pack('H*')
    end
    str.force_encoding(encoding)
    str.valid_encoding? ? str : str.force_encoding(string.encoding)
  end

  alias unescape_uri_component unescapeURIComponent

  # The set of special characters and their escaped values
  TABLE_FOR_ESCAPE_HTML__ = {
    "'" => '&#39;',
    '&' => '&amp;',
    '"' => '&quot;',
    '<' => '&lt;',
    '>' => '&gt;',
  }

  # Escape special characters in HTML, namely '&\"<>
  #   CGI.escapeHTML('Usage: foo "bar" <baz>')
  #      # => "Usage: foo &quot;bar&quot; &lt;baz&gt;"
  def escapeHTML(string)
    enc = string.encoding
    unless enc.ascii_compatible?
      if enc.dummy?
        origenc = enc
        enc = Encoding::Converter.asciicompat_encoding(enc)
        string = enc ? string.encode(enc) : string.b
      end
      table = Hash[TABLE_FOR_ESCAPE_HTML__.map {|pair|pair.map {|s|s.encode(enc)}}]
      string = string.gsub(/#{"['&\"<>]".encode(enc)}/, table)
      string.encode!(origenc) if origenc
      string
    else
      string = string.b
      string.gsub!(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
      string.force_encoding(enc)
    end
  end

  # TruffleRuby runs the pure-Ruby variant faster, do not use the C extension there
  unless RUBY_ENGINE == 'truffleruby'
    begin
      require 'cgi/escape'
    rescue LoadError
    end
  end

  # Unescape a string that has been HTML-escaped
  #   CGI.unescapeHTML("Usage: foo &quot;bar&quot; &lt;baz&gt;")
  #      # => "Usage: foo \"bar\" <baz>"
  def unescapeHTML(string)
    enc = string.encoding
    unless enc.ascii_compatible?
      if enc.dummy?
        origenc = enc
        enc = Encoding::Converter.asciicompat_encoding(enc)
        string = enc ? string.encode(enc) : string.b
      end
      string = string.gsub(Regexp.new('&(apos|amp|quot|gt|lt|#[0-9]+|#x[0-9A-Fa-f]+);'.encode(enc))) do
        case $1.encode(Encoding::US_ASCII)
        when 'apos'                then "'".encode(enc)
        when 'amp'                 then '&'.encode(enc)
        when 'quot'                then '"'.encode(enc)
        when 'gt'                  then '>'.encode(enc)
        when 'lt'                  then '<'.encode(enc)
        when /\A#0*(\d+)\z/        then $1.to_i.chr(enc)
        when /\A#x([0-9a-f]+)\z/i  then $1.hex.chr(enc)
        end
      end
      string.encode!(origenc) if origenc
      return string
    end
    return string unless string.include? '&'
    charlimit = case enc
                when Encoding::UTF_8; 0x10ffff
                when Encoding::ISO_8859_1; 256
                else 128
                end
    string = string.b
    string.gsub!(/&(apos|amp|quot|gt|lt|\#[0-9]+|\#[xX][0-9A-Fa-f]+);/) do
      match = $1.dup
      case match
      when 'apos'                then "'"
      when 'amp'                 then '&'
      when 'quot'                then '"'
      when 'gt'                  then '>'
      when 'lt'                  then '<'
      when /\A#0*(\d+)\z/
        n = $1.to_i
        if n < charlimit
          n.chr(enc)
        else
          "&##{$1};"
        end
      when /\A#x([0-9a-f]+)\z/i
        n = $1.hex
        if n < charlimit
          n.chr(enc)
        else
          "&#x#{$1};"
        end
      else
        "&#{match};"
      end
    end
    string.force_encoding enc
  end

  # Synonym for CGI.escapeHTML(str)
  alias escape_html escapeHTML

  # Synonym for CGI.unescapeHTML(str)
  alias unescape_html unescapeHTML

  # Escape only the tags of certain HTML elements in +string+.
  #
  # Takes an element or elements or array of elements.  Each element
  # is specified by the name of the element, without angle brackets.
  # This matches both the start and the end tag of that element.
  # The attribute list of the open tag will also be escaped (for
  # instance, the double-quotes surrounding attribute values).
  #
  #   print CGI.escapeElement('<BR><A HREF="url"></A>', "A", "IMG")
  #     # "<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt"
  #
  #   print CGI.escapeElement('<BR><A HREF="url"></A>', ["A", "IMG"])
  #     # "<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt"
  def escapeElement(string, *elements)
    elements = elements[0] if elements[0].kind_of?(Array)
    unless elements.empty?
      string.gsub(/<\/?(?:#{elements.join("|")})\b[^<>]*+>?/im) do
        CGI.escapeHTML($&)
      end
    else
      string
    end
  end

  # Undo escaping such as that done by CGI.escapeElement()
  #
  #   print CGI.unescapeElement(
  #           CGI.escapeHTML('<BR><A HREF="url"></A>'), "A", "IMG")
  #     # "&lt;BR&gt;<A HREF="url"></A>"
  #
  #   print CGI.unescapeElement(
  #           CGI.escapeHTML('<BR><A HREF="url"></A>'), ["A", "IMG"])
  #     # "&lt;BR&gt;<A HREF="url"></A>"
  def unescapeElement(string, *elements)
    elements = elements[0] if elements[0].kind_of?(Array)
    unless elements.empty?
      string.gsub(/&lt;\/?(?:#{elements.join("|")})\b(?>[^&]+|&(?![gl]t;)\w+;)*(?:&gt;)?/im) do
        unescapeHTML($&)
      end
    else
      string
    end
  end

  # Synonym for CGI.escapeElement(str)
  alias escape_element escapeElement

  # Synonym for CGI.unescapeElement(str)
  alias unescape_element unescapeElement

  # Format a +Time+ object as a String using the format specified by RFC 1123.
  #
  #   CGI.rfc1123_date(Time.now)
  #     # Sat, 01 Jan 2000 00:00:00 GMT
  def rfc1123_date(time)
    time.getgm.strftime("%a, %d %b %Y %T GMT")
  end

  # Prettify (indent) an HTML string.
  #
  # +string+ is the HTML string to indent.  +shift+ is the indentation
  # unit to use; it defaults to two spaces.
  #
  #   print CGI.pretty("<HTML><BODY></BODY></HTML>")
  #     # <HTML>
  #     #   <BODY>
  #     #   </BODY>
  #     # </HTML>
  #
  #   print CGI.pretty("<HTML><BODY></BODY></HTML>", "\t")
  #     # <HTML>
  #     #         <BODY>
  #     #         </BODY>
  #     # </HTML>
  #
  def pretty(string, shift = "  ")
    lines = string.gsub(/(?!\A)<.*?>/m, "\n\\0").gsub(/<.*?>(?!\n)/m, "\\0\n")
    end_pos = 0
    while end_pos = lines.index(/^<\/(\w+)/, end_pos)
      element = $1.dup
      start_pos = lines.rindex(/^\s*<#{element}/i, end_pos)
      lines[start_pos ... end_pos] = "__" + lines[start_pos ... end_pos].gsub(/\n(?!\z)/, "\n" + shift) + "__"
    end
    lines.gsub(/^((?:#{Regexp::quote(shift)})*)__(?=<\/?\w)/, '\1')
  end

  alias h escapeHTML
end
PK*J[���NNshare/ruby/cgi/cookie.rbnu�[���# frozen_string_literal: true
require_relative 'util'
class CGI
  # Class representing an HTTP cookie.
  #
  # In addition to its specific fields and methods, a Cookie instance
  # is a delegator to the array of its values.
  #
  # See RFC 2965.
  #
  # == Examples of use
  #   cookie1 = CGI::Cookie.new("name", "value1", "value2", ...)
  #   cookie1 = CGI::Cookie.new("name" => "name", "value" => "value")
  #   cookie1 = CGI::Cookie.new('name'     => 'name',
  #                             'value'    => ['value1', 'value2', ...],
  #                             'path'     => 'path',   # optional
  #                             'domain'   => 'domain', # optional
  #                             'expires'  => Time.now, # optional
  #                             'secure'   => true,     # optional
  #                             'httponly' => true      # optional
  #                             )
  #
  #   cgi.out("cookie" => [cookie1, cookie2]) { "string" }
  #
  #   name     = cookie1.name
  #   values   = cookie1.value
  #   path     = cookie1.path
  #   domain   = cookie1.domain
  #   expires  = cookie1.expires
  #   secure   = cookie1.secure
  #   httponly = cookie1.httponly
  #
  #   cookie1.name     = 'name'
  #   cookie1.value    = ['value1', 'value2', ...]
  #   cookie1.path     = 'path'
  #   cookie1.domain   = 'domain'
  #   cookie1.expires  = Time.now + 30
  #   cookie1.secure   = true
  #   cookie1.httponly = true
  class Cookie < Array
    @@accept_charset="UTF-8" unless defined?(@@accept_charset)

    TOKEN_RE = %r"\A[[!-~]&&[^()<>@,;:\\\"/?=\[\]{}]]+\z"
    PATH_VALUE_RE = %r"\A[[ -~]&&[^;]]*\z"
    DOMAIN_VALUE_RE = %r"\A\.?(?<label>(?!-)[-A-Za-z0-9]+(?<!-))(?:\.\g<label>)*\z"

    # Create a new CGI::Cookie object.
    #
    # :call-seq:
    #   Cookie.new(name_string,*value)
    #   Cookie.new(options_hash)
    #
    # +name_string+::
    #   The name of the cookie; in this form, there is no #domain or
    #   #expiration.  The #path is gleaned from the +SCRIPT_NAME+ environment
    #   variable, and #secure is false.
    # <tt>*value</tt>::
    #   value or list of values of the cookie
    # +options_hash+::
    #   A Hash of options to initialize this Cookie.  Possible options are:
    #
    #   name:: the name of the cookie.  Required.
    #   value:: the cookie's value or list of values.
    #   path:: the path for which this cookie applies.  Defaults to
    #          the value of the +SCRIPT_NAME+ environment variable.
    #   domain:: the domain for which this cookie applies.
    #   expires:: the time at which this cookie expires, as a +Time+ object.
    #   secure:: whether this cookie is a secure cookie or not (default to
    #            false).  Secure cookies are only transmitted to HTTPS
    #            servers.
    #   httponly:: whether this cookie is a HttpOnly cookie or not (default to
    #            false).  HttpOnly cookies are not available to javascript.
    #
    #   These keywords correspond to attributes of the cookie object.
    def initialize(name = "", *value)
      @domain = nil
      @expires = nil
      if name.kind_of?(String)
        self.name = name
        self.path = (%r|\A(.*/)| =~ ENV["SCRIPT_NAME"] ? $1 : "")
        @secure = false
        @httponly = false
        return super(value)
      end

      options = name
      unless options.has_key?("name")
        raise ArgumentError, "`name' required"
      end

      self.name = options["name"]
      value = Array(options["value"])
      # simple support for IE
      self.path = options["path"] || (%r|\A(.*/)| =~ ENV["SCRIPT_NAME"] ? $1 : "")
      self.domain = options["domain"]
      @expires = options["expires"]
      @secure = options["secure"] == true
      @httponly = options["httponly"] == true

      super(value)
    end

    # Name of this cookie, as a +String+
    attr_reader :name
    # Set name of this cookie
    def name=(str)
      if str and !TOKEN_RE.match?(str)
        raise ArgumentError, "invalid name: #{str.dump}"
      end
      @name = str
    end

    # Path for which this cookie applies, as a +String+
    attr_reader :path
    # Set path for which this cookie applies
    def path=(str)
      if str and !PATH_VALUE_RE.match?(str)
        raise ArgumentError, "invalid path: #{str.dump}"
      end
      @path = str
    end

    # Domain for which this cookie applies, as a +String+
    attr_reader :domain
    # Set domain for which this cookie applies
    def domain=(str)
      if str and ((str = str.b).bytesize > 255 or !DOMAIN_VALUE_RE.match?(str))
        raise ArgumentError, "invalid domain: #{str.dump}"
      end
      @domain = str
    end

    # Time at which this cookie expires, as a +Time+
    attr_accessor :expires
    # True if this cookie is secure; false otherwise
    attr_reader :secure
    # True if this cookie is httponly; false otherwise
    attr_reader :httponly

    # Returns the value or list of values for this cookie.
    def value
      self
    end

    # Replaces the value of this cookie with a new value or list of values.
    def value=(val)
      replace(Array(val))
    end

    # Set whether the Cookie is a secure cookie or not.
    #
    # +val+ must be a boolean.
    def secure=(val)
      @secure = val if val == true or val == false
      @secure
    end

    # Set whether the Cookie is a httponly cookie or not.
    #
    # +val+ must be a boolean.
    def httponly=(val)
      @httponly = !!val
    end

    # Convert the Cookie to its string representation.
    def to_s
      val = collect{|v| CGI.escape(v) }.join("&")
      buf = "#{@name}=#{val}".dup
      buf << "; domain=#{@domain}" if @domain
      buf << "; path=#{@path}"     if @path
      buf << "; expires=#{CGI.rfc1123_date(@expires)}" if @expires
      buf << "; secure"            if @secure
      buf << "; HttpOnly"          if @httponly
      buf
    end

    # Parse a raw cookie string into a hash of cookie-name=>Cookie
    # pairs.
    #
    #   cookies = CGI::Cookie.parse("raw_cookie_string")
    #     # { "name1" => cookie1, "name2" => cookie2, ... }
    #
    def self.parse(raw_cookie)
      cookies = Hash.new([])
      return cookies unless raw_cookie

      raw_cookie.split(/;\s?/).each do |pairs|
        name, values = pairs.split('=',2)
        next unless name and values
        values ||= ""
        values = values.split('&').collect{|v| CGI.unescape(v,@@accept_charset) }
        if cookies.has_key?(name)
          cookies[name].concat(values)
        else
          cookies[name] = Cookie.new(name, *values)
        end
      end

      cookies
    end

    # A summary of cookie string.
    def inspect
      "#<CGI::Cookie: #{self.to_s.inspect}>"
    end

  end # class Cookie
end


PK*J[V�Sshare/licenses/alt-ruby34/BSDLnu�[���Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
PK*J[�G{�����share/licenses/alt-ruby34/LEGALnu�[���# -*- rdoc -*-

= LEGAL NOTICE INFORMATION
--------------------------

All the files in this distribution are covered under either the Ruby's
license (see the file COPYING) or public-domain except some files
mentioned below.

[addr2line.c]

  A part of this file is from FreeBSD.

  >>>
    Copyright (c) 1986, 1988, 1991, 1993::
    The Regents of the University of California.  All rights reserved.

    (c) UNIX System Laboratories, Inc.

    All or some portions of this file are derived from material licensed
    to the University of California by American Telephone and Telegraph
    Co. or Unix System Laboratories, Inc. and are reproduced herein with
    the permission of UNIX System Laboratories, Inc.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    4. Neither the name of the University nor the names of its contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

	@(#)subr_prf.c	8.3 (Berkeley) 1/21/94


[ccan/build_assert/build_assert.h]
[ccan/check_type/check_type.h]
[ccan/container_of/container_of.h]
[ccan/str/str.h]

  These files are licensed under the {CC0}[https://creativecommons.org/choose/zero/].

[ccan/list/list.h]

  This file is licensed under the {MIT License}[rdoc-ref:@MIT+License].

[coroutine]

  Unless otherwise specified, these files are licensed under the
  {MIT License}[rdoc-ref:@MIT+License].

[include/ruby/onigmo.h]
[include/ruby/oniguruma.h]
[regcomp.c]
[regenc.c]
[regenc.h]
[regerror.c]
[regexec.c]
[regint.h]
[regparse.c]
[regparse.h]
[enc/ascii.c]
[enc/big5.c]
[enc/cp949.c]
[enc/emacs_mule.c]
[enc/encdb.c]
[enc/euc_jp.c]
[enc/euc_kr.c]
[enc/euc_tw.c]
[enc/gb18030.c]
[enc/gb2312.c]
[enc/gbk.c]
[enc/iso_8859_1.c]
[enc/iso_8859_10.c]
[enc/iso_8859_11.c]
[enc/iso_8859_13.c]
[enc/iso_8859_14.c]
[enc/iso_8859_15.c]
[enc/iso_8859_16.c]
[enc/iso_8859_2.c]
[enc/iso_8859_3.c]
[enc/iso_8859_4.c]
[enc/iso_8859_5.c]
[enc/iso_8859_6.c]
[enc/iso_8859_7.c]
[enc/iso_8859_8.c]
[enc/iso_8859_9.c]
[enc/koi8_r.c]
[enc/koi8_u.c]
[enc/shift_jis.c]
[enc/unicode.c]
[enc/us_ascii.c]
[enc/utf_16be.c]
[enc/utf_16le.c]
[enc/utf_32be.c]
[enc/utf_32le.c]
[enc/utf_8.c]
[enc/windows_1251.c]
[enc/windows_31j.c]

  Onigmo (Oniguruma-mod) LICENSE

  >>>
    Copyright (c) 2002-2009::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    Copyright (c) 2011-2014::  K.Takata  <kentkt AT csc DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

  Oniguruma LICENSE

  >>>
    Copyright (c) 2002-2009::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

  * https://github.com/k-takata/Onigmo/
  * https://github.com/kkos/oniguruma
  * https://svnweb.freebsd.org/ports/head/devel/oniguruma/

    When this software is partly used or it is distributed with Ruby,
    this of Ruby follows the license of Ruby.

[enc/windows_1250.c]
[enc/windows_1252.c]

  >>>
    Copyright (c) 2006-2007::  Byte      <byte AT mail DOT kna DOT ru>
                               K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[enc/cesu_8.c]
[enc/windows_1253.c]
[enc/windows_1254.c]
[enc/windows_1257.c]

  >>>
    Copyright (c) 2002-2007::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[enc/trans/GB/GB12345%UCS.src]
[enc/trans/GB/UCS%GB12345.src]
[enc/trans/GB/GB2312%UCS.src]
[enc/trans/GB/UCS%GB2312.src]

  These files have this explanatory texts.

  >>>
    This mapping data was created from files provided by Unicode, Inc.
    (The Unicode Consortium). The files were used to create a product supporting
    Unicode, as explicitly permitted in the files' copyright notices.
    Please note that Unicode, Inc. never made any claims as to fitness of these
    files for any particular purpose, and has ceased to publish the files many
    years ago.

[enc/trans/JIS/JISX0201-KANA%UCS.src]
[enc/trans/JIS/JISX0208\@1990%UCS.src]
[enc/trans/JIS/JISX0212%UCS.src]
[enc/trans/JIS/UCS%JISX0201-KANA.src]
[enc/trans/JIS/UCS%JISX0208@1990.src]
[enc/trans/JIS/UCS%JISX0212.src]

  These files are copyrighted as the following.

  >>>
    © 2015 Unicode®, Inc.

    For terms of use, see http://www.unicode.org/terms_of_use.html

[enc/trans/JIS/JISX0213-1%UCS@BMP.src]
[enc/trans/JIS/JISX0213-1%UCS@SIP.src]
[enc/trans/JIS/JISX0213-2%UCS@BMP.src]
[enc/trans/JIS/JISX0213-2%UCS@SIP.src]

  These files are copyrighted as the following.

  >>>
    Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
    Copyright (C) 2001:: I'O, All Rights Reserved.
    Copyright (C) 2006:: Project X0213, All Rights Reserved.
    You can use, modify, distribute this table freely.

[enc/trans/JIS/UCS@BMP%JISX0213-1.src]
[enc/trans/JIS/UCS@BMP%JISX0213-2.src]
[enc/trans/JIS/UCS@SIP%JISX0213-1.src]
[enc/trans/JIS/UCS@SIP%JISX0213-2.src]

  These files are copyrighted as the following.

  >>>
    Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
    Copyright (C) 2001:: I'O, All Rights Reserved.
    You can use, modify, distribute this table freely.

[enc/trans/ucm/glibc-BIG5-2.3.3.ucm]
[enc/trans/ucm/glibc-BIG5HKSCS-2.3.3.ucm]

  >>>
    Copyright (C) 2001-2005:: International Business Machines
                              Corporation and others.  All Rights Reserved.

[enc/trans/ucm/windows-950-2000.ucm]
[enc/trans/ucm/windows-950_hkscs-2001.ucm]

  >>>
    Copyright (C) 2001-2002:: International Business Machines
                              Corporation and others.  All Rights Reserved.


[configure]

  This file is free software.

  >>>
    Copyright (C) 1992-1996, 1998-2012:: Free Software Foundation, Inc.

    This configure script is free software; the Free Software Foundation
    gives unlimited permission to copy, distribute and modify it.

[tool/config.guess]
[tool/config.sub]

  As long as you distribute these files with the file configure, they
  are covered under the Ruby's license.

  >>>
    Copyright 1992-2018:: Free Software Foundation, Inc.

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

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

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

    As a special exception to the GNU General Public License, if you
    distribute this file as part of a program that contains a
    configuration script generated by Autoconf, you may include it under
    the same distribution terms that you use for the rest of that
    program.  This Exception is an additional permission under section 7
    of the GNU General Public License, version 3 ("GPLv3").

[tool/lib/test/*]
[tool/lib/core_assertions.rb]

  Some of methods on these files are based on MiniTest 4. MiniTest 4 is
  distributed under the MIT License.

  >>>
    Copyright (c) Ryan Davis, seattle.rb

    Permission is hereby granted, free of charge, to any person obtaining
    a copy of this software and associated documentation files (the
    'Software'), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:

    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

[spec/lib/turbo_tests/*]
[spec/lib/turbo_tests.rb]
[spec/lib/utils/*]

  These files are under the MIT License.

  >>>
    Copyright (c) 2020 Ilya Zub

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.

[parse.c]
[parse.h]

  These files are licensed under the GPL, but are incorporated into Ruby and
  redistributed under the terms of the Ruby license, as permitted by the
  exception to the GPL below.

  >>>
    Copyright (C) 1984, 1989-1990, 2000-2015, 2018:: Free Software Foundation, Inc.

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

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

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

    As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
    under terms of your choice, so long as that work isn't itself a
    parser generator using the skeleton or a modified version thereof
    as a parser skeleton.  Alternatively, if you modify or redistribute
    the parser skeleton itself, you may (at your option) remove this
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.

    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.

[missing/dtoa.c]

  This file is under these licenses.

  >>>
    Copyright (c) 1991, 2000, 2001:: by Lucent Technologies.

    Permission to use, copy, modify, and distribute this software for any
    purpose without fee is hereby granted, provided that this entire notice
    is included in all copies of any software which is or includes a copy
    or modification of this software and in all copies of the supporting
    documentation for such software.

    THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
    REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.

  >>>
    Copyright (c) 2004-2008:: David Schultz <das@FreeBSD.ORG>
                              All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[win32/win32.c]
[include/ruby/win32.h]

  You can apply the Artistic License to these files. (or GPL,
  alternatively)

  >>>
    Copyright (c) 1993:: Intergraph Corporation

    You may distribute under the terms of either the GNU General Public
    License or the Artistic License, as specified in the perl README file.

[missing/mt19937.c]

  This file is under the new-style BSD license.

  >>>
    A C-program for MT19937, with initialization improved 2002/2/10.::
    Coded by Takuji Nishimura and Makoto Matsumoto.

    This is a faster version by taking Shawn Cokus's optimization,
    Matthe Bellew's simplification, Isaku Wada's real version.

    Before using, initialize the state by using init_genrand(seed)
    or init_by_array(init_key, key_length).

    Copyright (C) 1997 - 2002:: Makoto Matsumoto and Takuji Nishimura,
                                All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:

    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.

    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    3. The names of its contributors may not be used to endorse or promote
       products derived from this software without specific prior written
       permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


    Any feedback is very welcome.
    http://www.math.keio.ac.jp/matumoto/emt.html
    email: matumoto@math.keio.ac.jp

  The Wayback Machine url: http://web.archive.org/web/19990429082237/http://www.math.keio.ac.jp/matumoto/emt.html

[missing/procstat_vm.c]

  This file is under the new-style BSD license.

  >>>
    Copyright (c) 2007:: Robert N. M. Watson
                         All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

    $FreeBSD: head/usr.bin/procstat/procstat_vm.c 261780 2014-02-11 21:57:37Z jhb $

[vsnprintf.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright (c) 1990, 1993::
    The Regents of the University of California.  All rights reserved.

    This code is derived from software contributed to Berkeley by
    Chris Torek.

[st.c]
[strftime.c]
[include/ruby/st.h]
[missing/acosh.c]
[missing/alloca.c]
[missing/erf.c]
[missing/hypot.c]
[missing/lgamma_r.c]
[missing/memcmp.c]
[missing/memmove.c]
[missing/strchr.c]
[missing/strerror.c]
[missing/strstr.c]
[missing/tgamma.c]
[ext/date/date_strftime.c]
[ext/digest/sha1/sha1.c]
[ext/digest/sha1/sha1.h]

  These files are all under public domain.

[missing/crypt.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright (c) 1989, 1993::
    The Regents of the University of California.  All rights reserved.

    This code is derived from software contributed to Berkeley by
    Tom Truscott.

[missing/setproctitle.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright 2003:: Damien Miller
    Copyright (c) 1983, 1995-1997:: Eric P. Allman
    Copyright (c) 1988, 1993::
    The Regents of the University of California.  All rights reserved.

[missing/strlcat.c]
[missing/strlcpy.c]

  These files are under an ISC-style license.

  >>>
    Copyright (c) 1998, 2015:: Todd C. Miller <Todd.Miller@courtesan.com>

    Permission to use, copy, modify, and distribute this software for any
    purpose with or without fee is hereby granted, provided that the above
    copyright notice and this permission notice appear in all copies.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

[missing/langinfo.c]

  This file is from http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c.
  Ruby uses a modified version. The file contains the following
  author/copyright notice:

  >>>
    Markus.Kuhn@cl.cam.ac.uk -- 2002-03-11::
    Permission to use, copy, modify, and distribute this software
    for any purpose and without fee is hereby granted. The author
    disclaims all warranties with regard to this software.

[ext/digest/md5/md5.c]
[ext/digest/md5/md5.h]

  These files are under the following license.  Ruby uses modified
  versions of them.

  >>>
    Copyright (C) 1999, 2000:: Aladdin Enterprises.  All rights reserved.

    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
    arising from the use of this software.

    Permission is granted to anyone to use this software for any purpose,
    including commercial applications, and to alter it and redistribute it
    freely, subject to the following restrictions:

    1. The origin of this software must not be misrepresented; you must not
       claim that you wrote the original software. If you use this software
       in a product, an acknowledgment in the product documentation would be
       appreciated but is not required.
    2. Altered source versions must be plainly marked as such, and must not be
       misrepresented as being the original software.
    3. This notice may not be removed or altered from any source distribution.

    L. Peter Deutsch
    ghost@aladdin.com

[ext/digest/rmd160/rmd160.c]
[ext/digest/rmd160/rmd160.h]

  These files have the following copyright information, and by the
  author we are allowed to use it under the new-style BSD license.

  >>>
    AUTHOR::  Antoon Bosselaers, ESAT-COSIC
              (Arranged for libc by Todd C. Miller)
    DATE::    1 March 1996

    Copyright (c):: Katholieke Universiteit Leuven
    1996, All Rights Reserved

[ext/digest/sha2/sha2.c]
[ext/digest/sha2/sha2.h]

  These files are under the new-style BSD license.

  >>>
    Copyright 2000:: Aaron D. Gifford.  All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    3. Neither the name of the copyright holder nor the names of contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[ext/psych]
[test/psych]

  The files under these directories are under the following license.

  >>>
    Copyright 2009:: Aaron Patterson, et al.

    Permission is hereby granted, free of charge, to any person obtaining a copy of
    this software and associated documentation files (the 'Software'), to deal in
    the Software without restriction, including without limitation the rights to
    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    of the Software, and to permit persons to whom the Software is furnished to do
    so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.

[ext/pty/pty.c]

  >>>
    C) Copyright 1998:: by Akinori Ito.

    This software may be redistributed freely for this purpose, in full
    or in part, provided that this entire copyright notice is included
    on any copies of this software and applications and derivations thereof.

    This software is provided on an "as is" basis, without warranty of any
    kind, either expressed or implied, as to any matter including, but not
    limited to warranty of fitness of purpose, or merchantability, or
    results obtained from use of this software.

[ext/socket/addrinfo.h]
[ext/socket/getaddrinfo.c]
[ext/socket/getnameinfo.c]

  These files are under the new-style BSD license.

  >>>
    Copyright (C) 1995, 1996, 1997, 1998, and 1999:: WIDE Project.
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    3. Neither the name of the project nor the names of its contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[ext/win32ole/win32ole.c]

  You can apply the Artistic License to this file. (or GPL,
  alternatively)

  >>>
    (c) 1995:: Microsoft Corporation. All rights reserved.
    Developed by ActiveWare Internet Corp., http://www.ActiveWare.com

    Other modifications Copyright (c) 1997, 1998:: by Gurusamy Sarathy
    <gsar@umich.edu> and Jan Dubois <jan.dubois@ibm.net>

    You may distribute under the terms of either the GNU General Public
    License or the Artistic License, as specified in the README file
    of the Perl distribution.

  The Wayback Machine url: http://web.archive.org/web/19970607104352/http://www.activeware.com:80/

[lib/rdoc/generator/template/darkfish/css/fonts.css]

  This file is licensed under the {SIL Open Font License}[http://scripts.sil.org/OFL].

[spec/mspec]
[spec/ruby]

  The files under these directories are under the following license.

  >>>
    Copyright (c) 2008:: Engine Yard, Inc. All rights reserved.

    Permission is hereby granted, free of charge, to any person
    obtaining a copy of this software and associated documentation
    files (the "Software"), to deal in the Software without
    restriction, including without limitation the rights to use,
    copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following
    conditions:

    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    OTHER DEALINGS IN THE SOFTWARE.

[lib/rubygems.rb]
[lib/rubygems]
[test/rubygems]

  RubyGems is under the following license.

  >>>
    RubyGems is copyrighted free software by Chad Fowler, Rich Kilmer, Jim
    Weirich and others.  You can redistribute it and/or modify it under
    either the terms of the {MIT license}[rdoc-ref:@MIT+License], or the conditions
    below:

    1. You may make and give away verbatim copies of the source form of the
       software without restriction, provided that you duplicate all of the
       original copyright notices and associated disclaimers.

    2. You may modify your copy of the software in any way, provided that
       you do at least ONE of the following:

       a. place your modifications in the Public Domain or otherwise
          make them Freely Available, such as by posting said
          modifications to Usenet or an equivalent medium, or by allowing
          the author to include your modifications in the software.

       b. use the modified software only within your corporation or
          organization.

       c. give non-standard executables non-standard names, with
          instructions on where to get the original software distribution.

       d. make other distribution arrangements with the author.

    3. You may distribute the software in object code or executable
       form, provided that you do at least ONE of the following:

       a. distribute the executables and library files of the software,
          together with instructions (in the manual page or equivalent)
          on where to get the original distribution.

       b. accompany the distribution with the machine-readable source of
          the software.

       c. give non-standard executables non-standard names, with
          instructions on where to get the original software distribution.

       d. make other distribution arrangements with the author.

    4. You may modify and include the part of the software into any other
       software (possibly commercial).

    5. The scripts and library files supplied as input to or produced as
       output from the software do not automatically fall under the
       copyright of the software, but belong to whomever generated them,
       and may be sold commercially, and may be aggregated with this
       software.

    6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
       WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       PURPOSE.

[lib/bundler]
[lib/bundler.rb]
[spec/bundler]

  Bundler is under the following license.

  >>>
    Portions copyright (c) 2010:: Andre Arko
    Portions copyright (c) 2009:: Engine Yard

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/thor]

  Thor is under the following license.

  >>>
    Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.

    {MIT License}[rdoc-ref:@MIT+License]

[lib/rubygems/vendor/molinillo]

  molinillo is under the following license.

  >>>
    Copyright (c) 2014 Samuel E. Giddins segiddins@segiddins.me

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/pub_grub]

  pub_grub is under the following license.

  >>>
    Copyright (c) 2018 John Hawthorn

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/connection_pool]

  connection_pool is under the following license.

  >>>
    Copyright (c) 2011 Mike Perham

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/net-http-persistent]

  net-http-persistent is under the following license.

  >>>
    Copyright (c) Eric Hodel, Aaron Patterson

    {MIT License}[rdoc-ref:@MIT+License]

[lib/did_you_mean]
[lib/did_you_mean.rb]
[test/did_you_mean]

  did_you_mean is under the following license.

  >>>
    Copyright (c) 2014-2016 Yuki Nishijima

    {MIT License}[rdoc-ref:@MIT+License]

[lib/error_highlight]
[lib/error_highlight.rb]
[test/error_highlight]

  error_highlight is under the following license.

  >>>
    Copyright (c) 2021 Yusuke Endoh

    {MIT License}[rdoc-ref:@MIT+License]

[benchmark/so_ackermann.rb]
[benchmark/so_array.rb]
[benchmark/so_binary_trees.rb]
[benchmark/so_concatenate.rb]
[benchmark/so_count_words.yml]
[benchmark/so_exception.rb]
[benchmark/so_fannkuch.rb]
[benchmark/so_fasta.rb]
[benchmark/so_k_nucleotide.yml]
[benchmark/so_lists.rb]
[benchmark/so_mandelbrot.rb]
[benchmark/so_matrix.rb]
[benchmark/so_meteor_contest.rb]
[benchmark/so_nbody.rb]
[benchmark/so_nested_loop.rb]
[benchmark/so_nsieve.rb]
[benchmark/so_nsieve_bits.rb]
[benchmark/so_object.rb]
[benchmark/so_partial_sums.rb]
[benchmark/so_pidigits.rb]
[benchmark/so_random.rb]
[benchmark/so_reverse_complement.yml]
[benchmark/so_sieve.rb]
[benchmark/so_spectralnorm.rb]

  These files are very old copy of then-called "The Great Computer Language
  Shootout".  LEGAL SITUATION OF THESE FILES ARE UNCLEAR because the original
  site has been lost.  Upstream diverged to delete several benchmarks listed
  above.

== MIT License
>>>
      Permission is hereby granted, free of charge, to any person obtaining
      a copy of this software and associated documentation files (the
      "Software"), to deal in the Software without restriction, including
      without limitation the rights to use, copy, modify, merge, publish,
      distribute, sublicense, and/or sell copies of the Software, and to
      permit persons to whom the Software is furnished to do so, subject to
      the following conditions:

      The above copyright notice and this permission notice shall be
      included in all copies or substantial portions of the Software.

      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
      LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
      OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
      WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

== Old-style BSD license
>>>
      Redistribution and use in source and binary forms, with or without
      modification, are permitted provided that the following conditions
      are met:
      1. Redistributions of source code must retain the above copyright
         notice, this list of conditions and the following disclaimer.
      2. Redistributions in binary form must reproduce the above copyright
         notice, this list of conditions and the following disclaimer in the
         documentation and/or other materials provided with the distribution.
      3. Neither the name of the University nor the names of its contributors
         may be used to endorse or promote products derived from this software
         without specific prior written permission.

      THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      SUCH DAMAGE.

      IMPORTANT NOTE::

      From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
      paragraph 3 above is now null and void.
PK*J[��FN�F�Fshare/licenses/alt-ruby34/GPLnu�[���                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

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

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

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

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

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

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

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

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

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

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

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

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

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

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

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

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

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

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

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

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

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
PK*J[Q�{	{	!share/licenses/alt-ruby34/COPYINGnu�[���Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
You can redistribute it and/or modify it under either the terms of the
2-clause BSDL (see the file BSDL), or the conditions below:

1. You may make and give away verbatim copies of the source form of the
   software without restriction, provided that you duplicate all of the
   original copyright notices and associated disclaimers.

2. You may modify your copy of the software in any way, provided that
   you do at least ONE of the following:

   a. place your modifications in the Public Domain or otherwise
      make them Freely Available, such as by posting said
      modifications to Usenet or an equivalent medium, or by allowing
      the author to include your modifications in the software.

   b. use the modified software only within your corporation or
      organization.

   c. give non-standard binaries non-standard names, with
      instructions on where to get the original software distribution.

   d. make other distribution arrangements with the author.

3. You may distribute the software in object code or binary form,
   provided that you do at least ONE of the following:

   a. distribute the binaries and library files of the software,
      together with instructions (in the manual page or equivalent)
      on where to get the original distribution.

   b. accompany the distribution with the machine-readable source of
      the software.

   c. give non-standard binaries non-standard names, with
      instructions on where to get the original software distribution.

   d. make other distribution arrangements with the author.

4. You may modify and include the part of the software into any other
   software (possibly commercial).  But some files in the distribution
   are not written by the author, so that they are not under these terms.

   For the list of those files and their copying conditions, see the
   file LEGAL.

5. The scripts and library files supplied as input to or produced as
   output from the software do not automatically fall under the
   copyright of the software, but belong to whomever generated them,
   and may be sold commercially, and may be aggregated with this
   software.

6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   PURPOSE.
PK*J[z]��	�	$share/licenses/alt-ruby34/COPYING.janu�[���本プログラムはフリーソフトウェアです.2-clause BSDL
または以下に示す条件で本プログラムを再配布できます
2-clause BSDLについてはBSDLファイルを参照して下さい.

1. 複製は制限なく自由です.

2. 以下の条件のいずれかを満たす時に本プログラムのソースを
   自由に変更できます.

   a.  ネットニューズにポストしたり,作者に変更を送付する
       などの方法で,変更を公開する.

   b.  変更した本プログラムを自分の所属する組織内部だけで
       使う.

   c.  変更点を明示したうえ,ソフトウェアの名前を変更する.
       そのソフトウェアを配布する時には変更前の本プログラ
       ムも同時に配布する.または変更前の本プログラムのソー
       スの入手法を明示する.

   d.  その他の変更条件を作者と合意する.

3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
   ルしたオブジェクトコードや実行形式でも配布できます.

   a.  バイナリを受け取った人がソースを入手できるように,
       ソースの入手法を明示する.

   b.  機械可読なソースコードを添付する.

   c.  変更を行ったバイナリは名前を変更したうえ,オリジナ
       ルのソースコードの入手法を明示する.

   d.  その他の配布条件を作者と合意する.

4. 他のプログラムへの引用はいかなる目的であれ自由です.た
   だし,本プログラムに含まれる他の作者によるコードは,そ
   れぞれの作者の意向による制限が加えられる場合があります.

   それらファイルの一覧とそれぞれの配布条件などに付いては
   LEGALファイルを参照してください.

5. 本プログラムへの入力となるスクリプトおよび,本プログラ
   ムからの出力の権利は本プログラムの作者ではなく,それぞ
   れの入出力を生成した人に属します.また,本プログラムに
   組み込まれるための拡張ライブラリについても同様です.

6. 本プログラムは無保証です.作者は本プログラムをサポート
   する意志はありますが,プログラム自身のバグあるいは本プ
   ログラムの実行などから発生するいかなる損害に対しても責
   任を持ちません.
PK*J[�G{�����$share/licenses/alt-ruby34-libs/LEGALnu�[���# -*- rdoc -*-

= LEGAL NOTICE INFORMATION
--------------------------

All the files in this distribution are covered under either the Ruby's
license (see the file COPYING) or public-domain except some files
mentioned below.

[addr2line.c]

  A part of this file is from FreeBSD.

  >>>
    Copyright (c) 1986, 1988, 1991, 1993::
    The Regents of the University of California.  All rights reserved.

    (c) UNIX System Laboratories, Inc.

    All or some portions of this file are derived from material licensed
    to the University of California by American Telephone and Telegraph
    Co. or Unix System Laboratories, Inc. and are reproduced herein with
    the permission of UNIX System Laboratories, Inc.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    4. Neither the name of the University nor the names of its contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

	@(#)subr_prf.c	8.3 (Berkeley) 1/21/94


[ccan/build_assert/build_assert.h]
[ccan/check_type/check_type.h]
[ccan/container_of/container_of.h]
[ccan/str/str.h]

  These files are licensed under the {CC0}[https://creativecommons.org/choose/zero/].

[ccan/list/list.h]

  This file is licensed under the {MIT License}[rdoc-ref:@MIT+License].

[coroutine]

  Unless otherwise specified, these files are licensed under the
  {MIT License}[rdoc-ref:@MIT+License].

[include/ruby/onigmo.h]
[include/ruby/oniguruma.h]
[regcomp.c]
[regenc.c]
[regenc.h]
[regerror.c]
[regexec.c]
[regint.h]
[regparse.c]
[regparse.h]
[enc/ascii.c]
[enc/big5.c]
[enc/cp949.c]
[enc/emacs_mule.c]
[enc/encdb.c]
[enc/euc_jp.c]
[enc/euc_kr.c]
[enc/euc_tw.c]
[enc/gb18030.c]
[enc/gb2312.c]
[enc/gbk.c]
[enc/iso_8859_1.c]
[enc/iso_8859_10.c]
[enc/iso_8859_11.c]
[enc/iso_8859_13.c]
[enc/iso_8859_14.c]
[enc/iso_8859_15.c]
[enc/iso_8859_16.c]
[enc/iso_8859_2.c]
[enc/iso_8859_3.c]
[enc/iso_8859_4.c]
[enc/iso_8859_5.c]
[enc/iso_8859_6.c]
[enc/iso_8859_7.c]
[enc/iso_8859_8.c]
[enc/iso_8859_9.c]
[enc/koi8_r.c]
[enc/koi8_u.c]
[enc/shift_jis.c]
[enc/unicode.c]
[enc/us_ascii.c]
[enc/utf_16be.c]
[enc/utf_16le.c]
[enc/utf_32be.c]
[enc/utf_32le.c]
[enc/utf_8.c]
[enc/windows_1251.c]
[enc/windows_31j.c]

  Onigmo (Oniguruma-mod) LICENSE

  >>>
    Copyright (c) 2002-2009::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    Copyright (c) 2011-2014::  K.Takata  <kentkt AT csc DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

  Oniguruma LICENSE

  >>>
    Copyright (c) 2002-2009::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

  * https://github.com/k-takata/Onigmo/
  * https://github.com/kkos/oniguruma
  * https://svnweb.freebsd.org/ports/head/devel/oniguruma/

    When this software is partly used or it is distributed with Ruby,
    this of Ruby follows the license of Ruby.

[enc/windows_1250.c]
[enc/windows_1252.c]

  >>>
    Copyright (c) 2006-2007::  Byte      <byte AT mail DOT kna DOT ru>
                               K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[enc/cesu_8.c]
[enc/windows_1253.c]
[enc/windows_1254.c]
[enc/windows_1257.c]

  >>>
    Copyright (c) 2002-2007::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[enc/trans/GB/GB12345%UCS.src]
[enc/trans/GB/UCS%GB12345.src]
[enc/trans/GB/GB2312%UCS.src]
[enc/trans/GB/UCS%GB2312.src]

  These files have this explanatory texts.

  >>>
    This mapping data was created from files provided by Unicode, Inc.
    (The Unicode Consortium). The files were used to create a product supporting
    Unicode, as explicitly permitted in the files' copyright notices.
    Please note that Unicode, Inc. never made any claims as to fitness of these
    files for any particular purpose, and has ceased to publish the files many
    years ago.

[enc/trans/JIS/JISX0201-KANA%UCS.src]
[enc/trans/JIS/JISX0208\@1990%UCS.src]
[enc/trans/JIS/JISX0212%UCS.src]
[enc/trans/JIS/UCS%JISX0201-KANA.src]
[enc/trans/JIS/UCS%JISX0208@1990.src]
[enc/trans/JIS/UCS%JISX0212.src]

  These files are copyrighted as the following.

  >>>
    © 2015 Unicode®, Inc.

    For terms of use, see http://www.unicode.org/terms_of_use.html

[enc/trans/JIS/JISX0213-1%UCS@BMP.src]
[enc/trans/JIS/JISX0213-1%UCS@SIP.src]
[enc/trans/JIS/JISX0213-2%UCS@BMP.src]
[enc/trans/JIS/JISX0213-2%UCS@SIP.src]

  These files are copyrighted as the following.

  >>>
    Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
    Copyright (C) 2001:: I'O, All Rights Reserved.
    Copyright (C) 2006:: Project X0213, All Rights Reserved.
    You can use, modify, distribute this table freely.

[enc/trans/JIS/UCS@BMP%JISX0213-1.src]
[enc/trans/JIS/UCS@BMP%JISX0213-2.src]
[enc/trans/JIS/UCS@SIP%JISX0213-1.src]
[enc/trans/JIS/UCS@SIP%JISX0213-2.src]

  These files are copyrighted as the following.

  >>>
    Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
    Copyright (C) 2001:: I'O, All Rights Reserved.
    You can use, modify, distribute this table freely.

[enc/trans/ucm/glibc-BIG5-2.3.3.ucm]
[enc/trans/ucm/glibc-BIG5HKSCS-2.3.3.ucm]

  >>>
    Copyright (C) 2001-2005:: International Business Machines
                              Corporation and others.  All Rights Reserved.

[enc/trans/ucm/windows-950-2000.ucm]
[enc/trans/ucm/windows-950_hkscs-2001.ucm]

  >>>
    Copyright (C) 2001-2002:: International Business Machines
                              Corporation and others.  All Rights Reserved.


[configure]

  This file is free software.

  >>>
    Copyright (C) 1992-1996, 1998-2012:: Free Software Foundation, Inc.

    This configure script is free software; the Free Software Foundation
    gives unlimited permission to copy, distribute and modify it.

[tool/config.guess]
[tool/config.sub]

  As long as you distribute these files with the file configure, they
  are covered under the Ruby's license.

  >>>
    Copyright 1992-2018:: Free Software Foundation, Inc.

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

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

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

    As a special exception to the GNU General Public License, if you
    distribute this file as part of a program that contains a
    configuration script generated by Autoconf, you may include it under
    the same distribution terms that you use for the rest of that
    program.  This Exception is an additional permission under section 7
    of the GNU General Public License, version 3 ("GPLv3").

[tool/lib/test/*]
[tool/lib/core_assertions.rb]

  Some of methods on these files are based on MiniTest 4. MiniTest 4 is
  distributed under the MIT License.

  >>>
    Copyright (c) Ryan Davis, seattle.rb

    Permission is hereby granted, free of charge, to any person obtaining
    a copy of this software and associated documentation files (the
    'Software'), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:

    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

[spec/lib/turbo_tests/*]
[spec/lib/turbo_tests.rb]
[spec/lib/utils/*]

  These files are under the MIT License.

  >>>
    Copyright (c) 2020 Ilya Zub

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.

[parse.c]
[parse.h]

  These files are licensed under the GPL, but are incorporated into Ruby and
  redistributed under the terms of the Ruby license, as permitted by the
  exception to the GPL below.

  >>>
    Copyright (C) 1984, 1989-1990, 2000-2015, 2018:: Free Software Foundation, Inc.

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

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

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

    As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
    under terms of your choice, so long as that work isn't itself a
    parser generator using the skeleton or a modified version thereof
    as a parser skeleton.  Alternatively, if you modify or redistribute
    the parser skeleton itself, you may (at your option) remove this
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.

    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.

[missing/dtoa.c]

  This file is under these licenses.

  >>>
    Copyright (c) 1991, 2000, 2001:: by Lucent Technologies.

    Permission to use, copy, modify, and distribute this software for any
    purpose without fee is hereby granted, provided that this entire notice
    is included in all copies of any software which is or includes a copy
    or modification of this software and in all copies of the supporting
    documentation for such software.

    THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
    REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.

  >>>
    Copyright (c) 2004-2008:: David Schultz <das@FreeBSD.ORG>
                              All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[win32/win32.c]
[include/ruby/win32.h]

  You can apply the Artistic License to these files. (or GPL,
  alternatively)

  >>>
    Copyright (c) 1993:: Intergraph Corporation

    You may distribute under the terms of either the GNU General Public
    License or the Artistic License, as specified in the perl README file.

[missing/mt19937.c]

  This file is under the new-style BSD license.

  >>>
    A C-program for MT19937, with initialization improved 2002/2/10.::
    Coded by Takuji Nishimura and Makoto Matsumoto.

    This is a faster version by taking Shawn Cokus's optimization,
    Matthe Bellew's simplification, Isaku Wada's real version.

    Before using, initialize the state by using init_genrand(seed)
    or init_by_array(init_key, key_length).

    Copyright (C) 1997 - 2002:: Makoto Matsumoto and Takuji Nishimura,
                                All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:

    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.

    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    3. The names of its contributors may not be used to endorse or promote
       products derived from this software without specific prior written
       permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


    Any feedback is very welcome.
    http://www.math.keio.ac.jp/matumoto/emt.html
    email: matumoto@math.keio.ac.jp

  The Wayback Machine url: http://web.archive.org/web/19990429082237/http://www.math.keio.ac.jp/matumoto/emt.html

[missing/procstat_vm.c]

  This file is under the new-style BSD license.

  >>>
    Copyright (c) 2007:: Robert N. M. Watson
                         All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

    $FreeBSD: head/usr.bin/procstat/procstat_vm.c 261780 2014-02-11 21:57:37Z jhb $

[vsnprintf.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright (c) 1990, 1993::
    The Regents of the University of California.  All rights reserved.

    This code is derived from software contributed to Berkeley by
    Chris Torek.

[st.c]
[strftime.c]
[include/ruby/st.h]
[missing/acosh.c]
[missing/alloca.c]
[missing/erf.c]
[missing/hypot.c]
[missing/lgamma_r.c]
[missing/memcmp.c]
[missing/memmove.c]
[missing/strchr.c]
[missing/strerror.c]
[missing/strstr.c]
[missing/tgamma.c]
[ext/date/date_strftime.c]
[ext/digest/sha1/sha1.c]
[ext/digest/sha1/sha1.h]

  These files are all under public domain.

[missing/crypt.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright (c) 1989, 1993::
    The Regents of the University of California.  All rights reserved.

    This code is derived from software contributed to Berkeley by
    Tom Truscott.

[missing/setproctitle.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright 2003:: Damien Miller
    Copyright (c) 1983, 1995-1997:: Eric P. Allman
    Copyright (c) 1988, 1993::
    The Regents of the University of California.  All rights reserved.

[missing/strlcat.c]
[missing/strlcpy.c]

  These files are under an ISC-style license.

  >>>
    Copyright (c) 1998, 2015:: Todd C. Miller <Todd.Miller@courtesan.com>

    Permission to use, copy, modify, and distribute this software for any
    purpose with or without fee is hereby granted, provided that the above
    copyright notice and this permission notice appear in all copies.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

[missing/langinfo.c]

  This file is from http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c.
  Ruby uses a modified version. The file contains the following
  author/copyright notice:

  >>>
    Markus.Kuhn@cl.cam.ac.uk -- 2002-03-11::
    Permission to use, copy, modify, and distribute this software
    for any purpose and without fee is hereby granted. The author
    disclaims all warranties with regard to this software.

[ext/digest/md5/md5.c]
[ext/digest/md5/md5.h]

  These files are under the following license.  Ruby uses modified
  versions of them.

  >>>
    Copyright (C) 1999, 2000:: Aladdin Enterprises.  All rights reserved.

    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
    arising from the use of this software.

    Permission is granted to anyone to use this software for any purpose,
    including commercial applications, and to alter it and redistribute it
    freely, subject to the following restrictions:

    1. The origin of this software must not be misrepresented; you must not
       claim that you wrote the original software. If you use this software
       in a product, an acknowledgment in the product documentation would be
       appreciated but is not required.
    2. Altered source versions must be plainly marked as such, and must not be
       misrepresented as being the original software.
    3. This notice may not be removed or altered from any source distribution.

    L. Peter Deutsch
    ghost@aladdin.com

[ext/digest/rmd160/rmd160.c]
[ext/digest/rmd160/rmd160.h]

  These files have the following copyright information, and by the
  author we are allowed to use it under the new-style BSD license.

  >>>
    AUTHOR::  Antoon Bosselaers, ESAT-COSIC
              (Arranged for libc by Todd C. Miller)
    DATE::    1 March 1996

    Copyright (c):: Katholieke Universiteit Leuven
    1996, All Rights Reserved

[ext/digest/sha2/sha2.c]
[ext/digest/sha2/sha2.h]

  These files are under the new-style BSD license.

  >>>
    Copyright 2000:: Aaron D. Gifford.  All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    3. Neither the name of the copyright holder nor the names of contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[ext/psych]
[test/psych]

  The files under these directories are under the following license.

  >>>
    Copyright 2009:: Aaron Patterson, et al.

    Permission is hereby granted, free of charge, to any person obtaining a copy of
    this software and associated documentation files (the 'Software'), to deal in
    the Software without restriction, including without limitation the rights to
    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    of the Software, and to permit persons to whom the Software is furnished to do
    so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.

[ext/pty/pty.c]

  >>>
    C) Copyright 1998:: by Akinori Ito.

    This software may be redistributed freely for this purpose, in full
    or in part, provided that this entire copyright notice is included
    on any copies of this software and applications and derivations thereof.

    This software is provided on an "as is" basis, without warranty of any
    kind, either expressed or implied, as to any matter including, but not
    limited to warranty of fitness of purpose, or merchantability, or
    results obtained from use of this software.

[ext/socket/addrinfo.h]
[ext/socket/getaddrinfo.c]
[ext/socket/getnameinfo.c]

  These files are under the new-style BSD license.

  >>>
    Copyright (C) 1995, 1996, 1997, 1998, and 1999:: WIDE Project.
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    3. Neither the name of the project nor the names of its contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[ext/win32ole/win32ole.c]

  You can apply the Artistic License to this file. (or GPL,
  alternatively)

  >>>
    (c) 1995:: Microsoft Corporation. All rights reserved.
    Developed by ActiveWare Internet Corp., http://www.ActiveWare.com

    Other modifications Copyright (c) 1997, 1998:: by Gurusamy Sarathy
    <gsar@umich.edu> and Jan Dubois <jan.dubois@ibm.net>

    You may distribute under the terms of either the GNU General Public
    License or the Artistic License, as specified in the README file
    of the Perl distribution.

  The Wayback Machine url: http://web.archive.org/web/19970607104352/http://www.activeware.com:80/

[lib/rdoc/generator/template/darkfish/css/fonts.css]

  This file is licensed under the {SIL Open Font License}[http://scripts.sil.org/OFL].

[spec/mspec]
[spec/ruby]

  The files under these directories are under the following license.

  >>>
    Copyright (c) 2008:: Engine Yard, Inc. All rights reserved.

    Permission is hereby granted, free of charge, to any person
    obtaining a copy of this software and associated documentation
    files (the "Software"), to deal in the Software without
    restriction, including without limitation the rights to use,
    copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following
    conditions:

    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    OTHER DEALINGS IN THE SOFTWARE.

[lib/rubygems.rb]
[lib/rubygems]
[test/rubygems]

  RubyGems is under the following license.

  >>>
    RubyGems is copyrighted free software by Chad Fowler, Rich Kilmer, Jim
    Weirich and others.  You can redistribute it and/or modify it under
    either the terms of the {MIT license}[rdoc-ref:@MIT+License], or the conditions
    below:

    1. You may make and give away verbatim copies of the source form of the
       software without restriction, provided that you duplicate all of the
       original copyright notices and associated disclaimers.

    2. You may modify your copy of the software in any way, provided that
       you do at least ONE of the following:

       a. place your modifications in the Public Domain or otherwise
          make them Freely Available, such as by posting said
          modifications to Usenet or an equivalent medium, or by allowing
          the author to include your modifications in the software.

       b. use the modified software only within your corporation or
          organization.

       c. give non-standard executables non-standard names, with
          instructions on where to get the original software distribution.

       d. make other distribution arrangements with the author.

    3. You may distribute the software in object code or executable
       form, provided that you do at least ONE of the following:

       a. distribute the executables and library files of the software,
          together with instructions (in the manual page or equivalent)
          on where to get the original distribution.

       b. accompany the distribution with the machine-readable source of
          the software.

       c. give non-standard executables non-standard names, with
          instructions on where to get the original software distribution.

       d. make other distribution arrangements with the author.

    4. You may modify and include the part of the software into any other
       software (possibly commercial).

    5. The scripts and library files supplied as input to or produced as
       output from the software do not automatically fall under the
       copyright of the software, but belong to whomever generated them,
       and may be sold commercially, and may be aggregated with this
       software.

    6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
       WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       PURPOSE.

[lib/bundler]
[lib/bundler.rb]
[spec/bundler]

  Bundler is under the following license.

  >>>
    Portions copyright (c) 2010:: Andre Arko
    Portions copyright (c) 2009:: Engine Yard

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/thor]

  Thor is under the following license.

  >>>
    Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.

    {MIT License}[rdoc-ref:@MIT+License]

[lib/rubygems/vendor/molinillo]

  molinillo is under the following license.

  >>>
    Copyright (c) 2014 Samuel E. Giddins segiddins@segiddins.me

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/pub_grub]

  pub_grub is under the following license.

  >>>
    Copyright (c) 2018 John Hawthorn

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/connection_pool]

  connection_pool is under the following license.

  >>>
    Copyright (c) 2011 Mike Perham

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/net-http-persistent]

  net-http-persistent is under the following license.

  >>>
    Copyright (c) Eric Hodel, Aaron Patterson

    {MIT License}[rdoc-ref:@MIT+License]

[lib/did_you_mean]
[lib/did_you_mean.rb]
[test/did_you_mean]

  did_you_mean is under the following license.

  >>>
    Copyright (c) 2014-2016 Yuki Nishijima

    {MIT License}[rdoc-ref:@MIT+License]

[lib/error_highlight]
[lib/error_highlight.rb]
[test/error_highlight]

  error_highlight is under the following license.

  >>>
    Copyright (c) 2021 Yusuke Endoh

    {MIT License}[rdoc-ref:@MIT+License]

[benchmark/so_ackermann.rb]
[benchmark/so_array.rb]
[benchmark/so_binary_trees.rb]
[benchmark/so_concatenate.rb]
[benchmark/so_count_words.yml]
[benchmark/so_exception.rb]
[benchmark/so_fannkuch.rb]
[benchmark/so_fasta.rb]
[benchmark/so_k_nucleotide.yml]
[benchmark/so_lists.rb]
[benchmark/so_mandelbrot.rb]
[benchmark/so_matrix.rb]
[benchmark/so_meteor_contest.rb]
[benchmark/so_nbody.rb]
[benchmark/so_nested_loop.rb]
[benchmark/so_nsieve.rb]
[benchmark/so_nsieve_bits.rb]
[benchmark/so_object.rb]
[benchmark/so_partial_sums.rb]
[benchmark/so_pidigits.rb]
[benchmark/so_random.rb]
[benchmark/so_reverse_complement.yml]
[benchmark/so_sieve.rb]
[benchmark/so_spectralnorm.rb]

  These files are very old copy of then-called "The Great Computer Language
  Shootout".  LEGAL SITUATION OF THESE FILES ARE UNCLEAR because the original
  site has been lost.  Upstream diverged to delete several benchmarks listed
  above.

== MIT License
>>>
      Permission is hereby granted, free of charge, to any person obtaining
      a copy of this software and associated documentation files (the
      "Software"), to deal in the Software without restriction, including
      without limitation the rights to use, copy, modify, merge, publish,
      distribute, sublicense, and/or sell copies of the Software, and to
      permit persons to whom the Software is furnished to do so, subject to
      the following conditions:

      The above copyright notice and this permission notice shall be
      included in all copies or substantial portions of the Software.

      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
      LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
      OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
      WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

== Old-style BSD license
>>>
      Redistribution and use in source and binary forms, with or without
      modification, are permitted provided that the following conditions
      are met:
      1. Redistributions of source code must retain the above copyright
         notice, this list of conditions and the following disclaimer.
      2. Redistributions in binary form must reproduce the above copyright
         notice, this list of conditions and the following disclaimer in the
         documentation and/or other materials provided with the distribution.
      3. Neither the name of the University nor the names of its contributors
         may be used to endorse or promote products derived from this software
         without specific prior written permission.

      THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      SUCH DAMAGE.

      IMPORTANT NOTE::

      From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
      paragraph 3 above is now null and void.
PK*J[��FN�F�F"share/licenses/alt-ruby34-libs/GPLnu�[���                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

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

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

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

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

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

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

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

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

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

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

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

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

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

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

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

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

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

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

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

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

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
PK*J[Q�{	{	&share/licenses/alt-ruby34-libs/COPYINGnu�[���Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
You can redistribute it and/or modify it under either the terms of the
2-clause BSDL (see the file BSDL), or the conditions below:

1. You may make and give away verbatim copies of the source form of the
   software without restriction, provided that you duplicate all of the
   original copyright notices and associated disclaimers.

2. You may modify your copy of the software in any way, provided that
   you do at least ONE of the following:

   a. place your modifications in the Public Domain or otherwise
      make them Freely Available, such as by posting said
      modifications to Usenet or an equivalent medium, or by allowing
      the author to include your modifications in the software.

   b. use the modified software only within your corporation or
      organization.

   c. give non-standard binaries non-standard names, with
      instructions on where to get the original software distribution.

   d. make other distribution arrangements with the author.

3. You may distribute the software in object code or binary form,
   provided that you do at least ONE of the following:

   a. distribute the binaries and library files of the software,
      together with instructions (in the manual page or equivalent)
      on where to get the original distribution.

   b. accompany the distribution with the machine-readable source of
      the software.

   c. give non-standard binaries non-standard names, with
      instructions on where to get the original software distribution.

   d. make other distribution arrangements with the author.

4. You may modify and include the part of the software into any other
   software (possibly commercial).  But some files in the distribution
   are not written by the author, so that they are not under these terms.

   For the list of those files and their copying conditions, see the
   file LEGAL.

5. The scripts and library files supplied as input to or produced as
   output from the software do not automatically fall under the
   copyright of the software, but belong to whomever generated them,
   and may be sold commercially, and may be aggregated with this
   software.

6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   PURPOSE.
PK*J[z]��	�	)share/licenses/alt-ruby34-libs/COPYING.janu�[���本プログラムはフリーソフトウェアです.2-clause BSDL
または以下に示す条件で本プログラムを再配布できます
2-clause BSDLについてはBSDLファイルを参照して下さい.

1. 複製は制限なく自由です.

2. 以下の条件のいずれかを満たす時に本プログラムのソースを
   自由に変更できます.

   a.  ネットニューズにポストしたり,作者に変更を送付する
       などの方法で,変更を公開する.

   b.  変更した本プログラムを自分の所属する組織内部だけで
       使う.

   c.  変更点を明示したうえ,ソフトウェアの名前を変更する.
       そのソフトウェアを配布する時には変更前の本プログラ
       ムも同時に配布する.または変更前の本プログラムのソー
       スの入手法を明示する.

   d.  その他の変更条件を作者と合意する.

3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
   ルしたオブジェクトコードや実行形式でも配布できます.

   a.  バイナリを受け取った人がソースを入手できるように,
       ソースの入手法を明示する.

   b.  機械可読なソースコードを添付する.

   c.  変更を行ったバイナリは名前を変更したうえ,オリジナ
       ルのソースコードの入手法を明示する.

   d.  その他の配布条件を作者と合意する.

4. 他のプログラムへの引用はいかなる目的であれ自由です.た
   だし,本プログラムに含まれる他の作者によるコードは,そ
   れぞれの作者の意向による制限が加えられる場合があります.

   それらファイルの一覧とそれぞれの配布条件などに付いては
   LEGALファイルを参照してください.

5. 本プログラムへの入力となるスクリプトおよび,本プログラ
   ムからの出力の権利は本プログラムの作者ではなく,それぞ
   れの入出力を生成した人に属します.また,本プログラムに
   組み込まれるための拡張ライブラリについても同様です.

6. 本プログラムは無保証です.作者は本プログラムをサポート
   する意志はありますが,プログラム自身のバグあるいは本プ
   ログラムの実行などから発生するいかなる損害に対しても責
   任を持ちません.
PK*J[V�S$share/licenses/alt-ruby34-devel/BSDLnu�[���Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
PK*J[�G{�����%share/licenses/alt-ruby34-devel/LEGALnu�[���# -*- rdoc -*-

= LEGAL NOTICE INFORMATION
--------------------------

All the files in this distribution are covered under either the Ruby's
license (see the file COPYING) or public-domain except some files
mentioned below.

[addr2line.c]

  A part of this file is from FreeBSD.

  >>>
    Copyright (c) 1986, 1988, 1991, 1993::
    The Regents of the University of California.  All rights reserved.

    (c) UNIX System Laboratories, Inc.

    All or some portions of this file are derived from material licensed
    to the University of California by American Telephone and Telegraph
    Co. or Unix System Laboratories, Inc. and are reproduced herein with
    the permission of UNIX System Laboratories, Inc.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    4. Neither the name of the University nor the names of its contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

	@(#)subr_prf.c	8.3 (Berkeley) 1/21/94


[ccan/build_assert/build_assert.h]
[ccan/check_type/check_type.h]
[ccan/container_of/container_of.h]
[ccan/str/str.h]

  These files are licensed under the {CC0}[https://creativecommons.org/choose/zero/].

[ccan/list/list.h]

  This file is licensed under the {MIT License}[rdoc-ref:@MIT+License].

[coroutine]

  Unless otherwise specified, these files are licensed under the
  {MIT License}[rdoc-ref:@MIT+License].

[include/ruby/onigmo.h]
[include/ruby/oniguruma.h]
[regcomp.c]
[regenc.c]
[regenc.h]
[regerror.c]
[regexec.c]
[regint.h]
[regparse.c]
[regparse.h]
[enc/ascii.c]
[enc/big5.c]
[enc/cp949.c]
[enc/emacs_mule.c]
[enc/encdb.c]
[enc/euc_jp.c]
[enc/euc_kr.c]
[enc/euc_tw.c]
[enc/gb18030.c]
[enc/gb2312.c]
[enc/gbk.c]
[enc/iso_8859_1.c]
[enc/iso_8859_10.c]
[enc/iso_8859_11.c]
[enc/iso_8859_13.c]
[enc/iso_8859_14.c]
[enc/iso_8859_15.c]
[enc/iso_8859_16.c]
[enc/iso_8859_2.c]
[enc/iso_8859_3.c]
[enc/iso_8859_4.c]
[enc/iso_8859_5.c]
[enc/iso_8859_6.c]
[enc/iso_8859_7.c]
[enc/iso_8859_8.c]
[enc/iso_8859_9.c]
[enc/koi8_r.c]
[enc/koi8_u.c]
[enc/shift_jis.c]
[enc/unicode.c]
[enc/us_ascii.c]
[enc/utf_16be.c]
[enc/utf_16le.c]
[enc/utf_32be.c]
[enc/utf_32le.c]
[enc/utf_8.c]
[enc/windows_1251.c]
[enc/windows_31j.c]

  Onigmo (Oniguruma-mod) LICENSE

  >>>
    Copyright (c) 2002-2009::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    Copyright (c) 2011-2014::  K.Takata  <kentkt AT csc DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

  Oniguruma LICENSE

  >>>
    Copyright (c) 2002-2009::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

  * https://github.com/k-takata/Onigmo/
  * https://github.com/kkos/oniguruma
  * https://svnweb.freebsd.org/ports/head/devel/oniguruma/

    When this software is partly used or it is distributed with Ruby,
    this of Ruby follows the license of Ruby.

[enc/windows_1250.c]
[enc/windows_1252.c]

  >>>
    Copyright (c) 2006-2007::  Byte      <byte AT mail DOT kna DOT ru>
                               K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[enc/cesu_8.c]
[enc/windows_1253.c]
[enc/windows_1254.c]
[enc/windows_1257.c]

  >>>
    Copyright (c) 2002-2007::  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[enc/trans/GB/GB12345%UCS.src]
[enc/trans/GB/UCS%GB12345.src]
[enc/trans/GB/GB2312%UCS.src]
[enc/trans/GB/UCS%GB2312.src]

  These files have this explanatory texts.

  >>>
    This mapping data was created from files provided by Unicode, Inc.
    (The Unicode Consortium). The files were used to create a product supporting
    Unicode, as explicitly permitted in the files' copyright notices.
    Please note that Unicode, Inc. never made any claims as to fitness of these
    files for any particular purpose, and has ceased to publish the files many
    years ago.

[enc/trans/JIS/JISX0201-KANA%UCS.src]
[enc/trans/JIS/JISX0208\@1990%UCS.src]
[enc/trans/JIS/JISX0212%UCS.src]
[enc/trans/JIS/UCS%JISX0201-KANA.src]
[enc/trans/JIS/UCS%JISX0208@1990.src]
[enc/trans/JIS/UCS%JISX0212.src]

  These files are copyrighted as the following.

  >>>
    © 2015 Unicode®, Inc.

    For terms of use, see http://www.unicode.org/terms_of_use.html

[enc/trans/JIS/JISX0213-1%UCS@BMP.src]
[enc/trans/JIS/JISX0213-1%UCS@SIP.src]
[enc/trans/JIS/JISX0213-2%UCS@BMP.src]
[enc/trans/JIS/JISX0213-2%UCS@SIP.src]

  These files are copyrighted as the following.

  >>>
    Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
    Copyright (C) 2001:: I'O, All Rights Reserved.
    Copyright (C) 2006:: Project X0213, All Rights Reserved.
    You can use, modify, distribute this table freely.

[enc/trans/JIS/UCS@BMP%JISX0213-1.src]
[enc/trans/JIS/UCS@BMP%JISX0213-2.src]
[enc/trans/JIS/UCS@SIP%JISX0213-1.src]
[enc/trans/JIS/UCS@SIP%JISX0213-2.src]

  These files are copyrighted as the following.

  >>>
    Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
    Copyright (C) 2001:: I'O, All Rights Reserved.
    You can use, modify, distribute this table freely.

[enc/trans/ucm/glibc-BIG5-2.3.3.ucm]
[enc/trans/ucm/glibc-BIG5HKSCS-2.3.3.ucm]

  >>>
    Copyright (C) 2001-2005:: International Business Machines
                              Corporation and others.  All Rights Reserved.

[enc/trans/ucm/windows-950-2000.ucm]
[enc/trans/ucm/windows-950_hkscs-2001.ucm]

  >>>
    Copyright (C) 2001-2002:: International Business Machines
                              Corporation and others.  All Rights Reserved.


[configure]

  This file is free software.

  >>>
    Copyright (C) 1992-1996, 1998-2012:: Free Software Foundation, Inc.

    This configure script is free software; the Free Software Foundation
    gives unlimited permission to copy, distribute and modify it.

[tool/config.guess]
[tool/config.sub]

  As long as you distribute these files with the file configure, they
  are covered under the Ruby's license.

  >>>
    Copyright 1992-2018:: Free Software Foundation, Inc.

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

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

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

    As a special exception to the GNU General Public License, if you
    distribute this file as part of a program that contains a
    configuration script generated by Autoconf, you may include it under
    the same distribution terms that you use for the rest of that
    program.  This Exception is an additional permission under section 7
    of the GNU General Public License, version 3 ("GPLv3").

[tool/lib/test/*]
[tool/lib/core_assertions.rb]

  Some of methods on these files are based on MiniTest 4. MiniTest 4 is
  distributed under the MIT License.

  >>>
    Copyright (c) Ryan Davis, seattle.rb

    Permission is hereby granted, free of charge, to any person obtaining
    a copy of this software and associated documentation files (the
    'Software'), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:

    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

[spec/lib/turbo_tests/*]
[spec/lib/turbo_tests.rb]
[spec/lib/utils/*]

  These files are under the MIT License.

  >>>
    Copyright (c) 2020 Ilya Zub

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.

[parse.c]
[parse.h]

  These files are licensed under the GPL, but are incorporated into Ruby and
  redistributed under the terms of the Ruby license, as permitted by the
  exception to the GPL below.

  >>>
    Copyright (C) 1984, 1989-1990, 2000-2015, 2018:: Free Software Foundation, Inc.

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

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

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

    As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
    under terms of your choice, so long as that work isn't itself a
    parser generator using the skeleton or a modified version thereof
    as a parser skeleton.  Alternatively, if you modify or redistribute
    the parser skeleton itself, you may (at your option) remove this
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.

    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.

[missing/dtoa.c]

  This file is under these licenses.

  >>>
    Copyright (c) 1991, 2000, 2001:: by Lucent Technologies.

    Permission to use, copy, modify, and distribute this software for any
    purpose without fee is hereby granted, provided that this entire notice
    is included in all copies of any software which is or includes a copy
    or modification of this software and in all copies of the supporting
    documentation for such software.

    THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
    REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.

  >>>
    Copyright (c) 2004-2008:: David Schultz <das@FreeBSD.ORG>
                              All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[win32/win32.c]
[include/ruby/win32.h]

  You can apply the Artistic License to these files. (or GPL,
  alternatively)

  >>>
    Copyright (c) 1993:: Intergraph Corporation

    You may distribute under the terms of either the GNU General Public
    License or the Artistic License, as specified in the perl README file.

[missing/mt19937.c]

  This file is under the new-style BSD license.

  >>>
    A C-program for MT19937, with initialization improved 2002/2/10.::
    Coded by Takuji Nishimura and Makoto Matsumoto.

    This is a faster version by taking Shawn Cokus's optimization,
    Matthe Bellew's simplification, Isaku Wada's real version.

    Before using, initialize the state by using init_genrand(seed)
    or init_by_array(init_key, key_length).

    Copyright (C) 1997 - 2002:: Makoto Matsumoto and Takuji Nishimura,
                                All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:

    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.

    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    3. The names of its contributors may not be used to endorse or promote
       products derived from this software without specific prior written
       permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


    Any feedback is very welcome.
    http://www.math.keio.ac.jp/matumoto/emt.html
    email: matumoto@math.keio.ac.jp

  The Wayback Machine url: http://web.archive.org/web/19990429082237/http://www.math.keio.ac.jp/matumoto/emt.html

[missing/procstat_vm.c]

  This file is under the new-style BSD license.

  >>>
    Copyright (c) 2007:: Robert N. M. Watson
                         All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

    $FreeBSD: head/usr.bin/procstat/procstat_vm.c 261780 2014-02-11 21:57:37Z jhb $

[vsnprintf.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright (c) 1990, 1993::
    The Regents of the University of California.  All rights reserved.

    This code is derived from software contributed to Berkeley by
    Chris Torek.

[st.c]
[strftime.c]
[include/ruby/st.h]
[missing/acosh.c]
[missing/alloca.c]
[missing/erf.c]
[missing/hypot.c]
[missing/lgamma_r.c]
[missing/memcmp.c]
[missing/memmove.c]
[missing/strchr.c]
[missing/strerror.c]
[missing/strstr.c]
[missing/tgamma.c]
[ext/date/date_strftime.c]
[ext/digest/sha1/sha1.c]
[ext/digest/sha1/sha1.h]

  These files are all under public domain.

[missing/crypt.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright (c) 1989, 1993::
    The Regents of the University of California.  All rights reserved.

    This code is derived from software contributed to Berkeley by
    Tom Truscott.

[missing/setproctitle.c]

  This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].

  >>>
    Copyright 2003:: Damien Miller
    Copyright (c) 1983, 1995-1997:: Eric P. Allman
    Copyright (c) 1988, 1993::
    The Regents of the University of California.  All rights reserved.

[missing/strlcat.c]
[missing/strlcpy.c]

  These files are under an ISC-style license.

  >>>
    Copyright (c) 1998, 2015:: Todd C. Miller <Todd.Miller@courtesan.com>

    Permission to use, copy, modify, and distribute this software for any
    purpose with or without fee is hereby granted, provided that the above
    copyright notice and this permission notice appear in all copies.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

[missing/langinfo.c]

  This file is from http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c.
  Ruby uses a modified version. The file contains the following
  author/copyright notice:

  >>>
    Markus.Kuhn@cl.cam.ac.uk -- 2002-03-11::
    Permission to use, copy, modify, and distribute this software
    for any purpose and without fee is hereby granted. The author
    disclaims all warranties with regard to this software.

[ext/digest/md5/md5.c]
[ext/digest/md5/md5.h]

  These files are under the following license.  Ruby uses modified
  versions of them.

  >>>
    Copyright (C) 1999, 2000:: Aladdin Enterprises.  All rights reserved.

    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
    arising from the use of this software.

    Permission is granted to anyone to use this software for any purpose,
    including commercial applications, and to alter it and redistribute it
    freely, subject to the following restrictions:

    1. The origin of this software must not be misrepresented; you must not
       claim that you wrote the original software. If you use this software
       in a product, an acknowledgment in the product documentation would be
       appreciated but is not required.
    2. Altered source versions must be plainly marked as such, and must not be
       misrepresented as being the original software.
    3. This notice may not be removed or altered from any source distribution.

    L. Peter Deutsch
    ghost@aladdin.com

[ext/digest/rmd160/rmd160.c]
[ext/digest/rmd160/rmd160.h]

  These files have the following copyright information, and by the
  author we are allowed to use it under the new-style BSD license.

  >>>
    AUTHOR::  Antoon Bosselaers, ESAT-COSIC
              (Arranged for libc by Todd C. Miller)
    DATE::    1 March 1996

    Copyright (c):: Katholieke Universiteit Leuven
    1996, All Rights Reserved

[ext/digest/sha2/sha2.c]
[ext/digest/sha2/sha2.h]

  These files are under the new-style BSD license.

  >>>
    Copyright 2000:: Aaron D. Gifford.  All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    3. Neither the name of the copyright holder nor the names of contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[ext/psych]
[test/psych]

  The files under these directories are under the following license.

  >>>
    Copyright 2009:: Aaron Patterson, et al.

    Permission is hereby granted, free of charge, to any person obtaining a copy of
    this software and associated documentation files (the 'Software'), to deal in
    the Software without restriction, including without limitation the rights to
    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    of the Software, and to permit persons to whom the Software is furnished to do
    so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.

[ext/pty/pty.c]

  >>>
    C) Copyright 1998:: by Akinori Ito.

    This software may be redistributed freely for this purpose, in full
    or in part, provided that this entire copyright notice is included
    on any copies of this software and applications and derivations thereof.

    This software is provided on an "as is" basis, without warranty of any
    kind, either expressed or implied, as to any matter including, but not
    limited to warranty of fitness of purpose, or merchantability, or
    results obtained from use of this software.

[ext/socket/addrinfo.h]
[ext/socket/getaddrinfo.c]
[ext/socket/getnameinfo.c]

  These files are under the new-style BSD license.

  >>>
    Copyright (C) 1995, 1996, 1997, 1998, and 1999:: WIDE Project.
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
    3. Neither the name of the project nor the names of its contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

[ext/win32ole/win32ole.c]

  You can apply the Artistic License to this file. (or GPL,
  alternatively)

  >>>
    (c) 1995:: Microsoft Corporation. All rights reserved.
    Developed by ActiveWare Internet Corp., http://www.ActiveWare.com

    Other modifications Copyright (c) 1997, 1998:: by Gurusamy Sarathy
    <gsar@umich.edu> and Jan Dubois <jan.dubois@ibm.net>

    You may distribute under the terms of either the GNU General Public
    License or the Artistic License, as specified in the README file
    of the Perl distribution.

  The Wayback Machine url: http://web.archive.org/web/19970607104352/http://www.activeware.com:80/

[lib/rdoc/generator/template/darkfish/css/fonts.css]

  This file is licensed under the {SIL Open Font License}[http://scripts.sil.org/OFL].

[spec/mspec]
[spec/ruby]

  The files under these directories are under the following license.

  >>>
    Copyright (c) 2008:: Engine Yard, Inc. All rights reserved.

    Permission is hereby granted, free of charge, to any person
    obtaining a copy of this software and associated documentation
    files (the "Software"), to deal in the Software without
    restriction, including without limitation the rights to use,
    copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following
    conditions:

    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    OTHER DEALINGS IN THE SOFTWARE.

[lib/rubygems.rb]
[lib/rubygems]
[test/rubygems]

  RubyGems is under the following license.

  >>>
    RubyGems is copyrighted free software by Chad Fowler, Rich Kilmer, Jim
    Weirich and others.  You can redistribute it and/or modify it under
    either the terms of the {MIT license}[rdoc-ref:@MIT+License], or the conditions
    below:

    1. You may make and give away verbatim copies of the source form of the
       software without restriction, provided that you duplicate all of the
       original copyright notices and associated disclaimers.

    2. You may modify your copy of the software in any way, provided that
       you do at least ONE of the following:

       a. place your modifications in the Public Domain or otherwise
          make them Freely Available, such as by posting said
          modifications to Usenet or an equivalent medium, or by allowing
          the author to include your modifications in the software.

       b. use the modified software only within your corporation or
          organization.

       c. give non-standard executables non-standard names, with
          instructions on where to get the original software distribution.

       d. make other distribution arrangements with the author.

    3. You may distribute the software in object code or executable
       form, provided that you do at least ONE of the following:

       a. distribute the executables and library files of the software,
          together with instructions (in the manual page or equivalent)
          on where to get the original distribution.

       b. accompany the distribution with the machine-readable source of
          the software.

       c. give non-standard executables non-standard names, with
          instructions on where to get the original software distribution.

       d. make other distribution arrangements with the author.

    4. You may modify and include the part of the software into any other
       software (possibly commercial).

    5. The scripts and library files supplied as input to or produced as
       output from the software do not automatically fall under the
       copyright of the software, but belong to whomever generated them,
       and may be sold commercially, and may be aggregated with this
       software.

    6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
       WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       PURPOSE.

[lib/bundler]
[lib/bundler.rb]
[spec/bundler]

  Bundler is under the following license.

  >>>
    Portions copyright (c) 2010:: Andre Arko
    Portions copyright (c) 2009:: Engine Yard

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/thor]

  Thor is under the following license.

  >>>
    Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.

    {MIT License}[rdoc-ref:@MIT+License]

[lib/rubygems/vendor/molinillo]

  molinillo is under the following license.

  >>>
    Copyright (c) 2014 Samuel E. Giddins segiddins@segiddins.me

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/pub_grub]

  pub_grub is under the following license.

  >>>
    Copyright (c) 2018 John Hawthorn

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/connection_pool]

  connection_pool is under the following license.

  >>>
    Copyright (c) 2011 Mike Perham

    {MIT License}[rdoc-ref:@MIT+License]

[lib/bundler/vendor/net-http-persistent]

  net-http-persistent is under the following license.

  >>>
    Copyright (c) Eric Hodel, Aaron Patterson

    {MIT License}[rdoc-ref:@MIT+License]

[lib/did_you_mean]
[lib/did_you_mean.rb]
[test/did_you_mean]

  did_you_mean is under the following license.

  >>>
    Copyright (c) 2014-2016 Yuki Nishijima

    {MIT License}[rdoc-ref:@MIT+License]

[lib/error_highlight]
[lib/error_highlight.rb]
[test/error_highlight]

  error_highlight is under the following license.

  >>>
    Copyright (c) 2021 Yusuke Endoh

    {MIT License}[rdoc-ref:@MIT+License]

[benchmark/so_ackermann.rb]
[benchmark/so_array.rb]
[benchmark/so_binary_trees.rb]
[benchmark/so_concatenate.rb]
[benchmark/so_count_words.yml]
[benchmark/so_exception.rb]
[benchmark/so_fannkuch.rb]
[benchmark/so_fasta.rb]
[benchmark/so_k_nucleotide.yml]
[benchmark/so_lists.rb]
[benchmark/so_mandelbrot.rb]
[benchmark/so_matrix.rb]
[benchmark/so_meteor_contest.rb]
[benchmark/so_nbody.rb]
[benchmark/so_nested_loop.rb]
[benchmark/so_nsieve.rb]
[benchmark/so_nsieve_bits.rb]
[benchmark/so_object.rb]
[benchmark/so_partial_sums.rb]
[benchmark/so_pidigits.rb]
[benchmark/so_random.rb]
[benchmark/so_reverse_complement.yml]
[benchmark/so_sieve.rb]
[benchmark/so_spectralnorm.rb]

  These files are very old copy of then-called "The Great Computer Language
  Shootout".  LEGAL SITUATION OF THESE FILES ARE UNCLEAR because the original
  site has been lost.  Upstream diverged to delete several benchmarks listed
  above.

== MIT License
>>>
      Permission is hereby granted, free of charge, to any person obtaining
      a copy of this software and associated documentation files (the
      "Software"), to deal in the Software without restriction, including
      without limitation the rights to use, copy, modify, merge, publish,
      distribute, sublicense, and/or sell copies of the Software, and to
      permit persons to whom the Software is furnished to do so, subject to
      the following conditions:

      The above copyright notice and this permission notice shall be
      included in all copies or substantial portions of the Software.

      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
      LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
      OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
      WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

== Old-style BSD license
>>>
      Redistribution and use in source and binary forms, with or without
      modification, are permitted provided that the following conditions
      are met:
      1. Redistributions of source code must retain the above copyright
         notice, this list of conditions and the following disclaimer.
      2. Redistributions in binary form must reproduce the above copyright
         notice, this list of conditions and the following disclaimer in the
         documentation and/or other materials provided with the distribution.
      3. Neither the name of the University nor the names of its contributors
         may be used to endorse or promote products derived from this software
         without specific prior written permission.

      THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      SUCH DAMAGE.

      IMPORTANT NOTE::

      From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
      paragraph 3 above is now null and void.
PK*J[��FN�F�F#share/licenses/alt-ruby34-devel/GPLnu�[���                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

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

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

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

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

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

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

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

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

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

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

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

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

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

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

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

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

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

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

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

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

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
PK*J[Q�{	{	'share/licenses/alt-ruby34-devel/COPYINGnu�[���Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
You can redistribute it and/or modify it under either the terms of the
2-clause BSDL (see the file BSDL), or the conditions below:

1. You may make and give away verbatim copies of the source form of the
   software without restriction, provided that you duplicate all of the
   original copyright notices and associated disclaimers.

2. You may modify your copy of the software in any way, provided that
   you do at least ONE of the following:

   a. place your modifications in the Public Domain or otherwise
      make them Freely Available, such as by posting said
      modifications to Usenet or an equivalent medium, or by allowing
      the author to include your modifications in the software.

   b. use the modified software only within your corporation or
      organization.

   c. give non-standard binaries non-standard names, with
      instructions on where to get the original software distribution.

   d. make other distribution arrangements with the author.

3. You may distribute the software in object code or binary form,
   provided that you do at least ONE of the following:

   a. distribute the binaries and library files of the software,
      together with instructions (in the manual page or equivalent)
      on where to get the original distribution.

   b. accompany the distribution with the machine-readable source of
      the software.

   c. give non-standard binaries non-standard names, with
      instructions on where to get the original software distribution.

   d. make other distribution arrangements with the author.

4. You may modify and include the part of the software into any other
   software (possibly commercial).  But some files in the distribution
   are not written by the author, so that they are not under these terms.

   For the list of those files and their copying conditions, see the
   file LEGAL.

5. The scripts and library files supplied as input to or produced as
   output from the software do not automatically fall under the
   copyright of the software, but belong to whomever generated them,
   and may be sold commercially, and may be aggregated with this
   software.

6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   PURPOSE.
PK*J[z]��	�	*share/licenses/alt-ruby34-devel/COPYING.janu�[���本プログラムはフリーソフトウェアです.2-clause BSDL
または以下に示す条件で本プログラムを再配布できます
2-clause BSDLについてはBSDLファイルを参照して下さい.

1. 複製は制限なく自由です.

2. 以下の条件のいずれかを満たす時に本プログラムのソースを
   自由に変更できます.

   a.  ネットニューズにポストしたり,作者に変更を送付する
       などの方法で,変更を公開する.

   b.  変更した本プログラムを自分の所属する組織内部だけで
       使う.

   c.  変更点を明示したうえ,ソフトウェアの名前を変更する.
       そのソフトウェアを配布する時には変更前の本プログラ
       ムも同時に配布する.または変更前の本プログラムのソー
       スの入手法を明示する.

   d.  その他の変更条件を作者と合意する.

3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
   ルしたオブジェクトコードや実行形式でも配布できます.

   a.  バイナリを受け取った人がソースを入手できるように,
       ソースの入手法を明示する.

   b.  機械可読なソースコードを添付する.

   c.  変更を行ったバイナリは名前を変更したうえ,オリジナ
       ルのソースコードの入手法を明示する.

   d.  その他の配布条件を作者と合意する.

4. 他のプログラムへの引用はいかなる目的であれ自由です.た
   だし,本プログラムに含まれる他の作者によるコードは,そ
   れぞれの作者の意向による制限が加えられる場合があります.

   それらファイルの一覧とそれぞれの配布条件などに付いては
   LEGALファイルを参照してください.

5. 本プログラムへの入力となるスクリプトおよび,本プログラ
   ムからの出力の権利は本プログラムの作者ではなく,それぞ
   れの入出力を生成した人に属します.また,本プログラムに
   組み込まれるための拡張ライブラリについても同様です.

6. 本プログラムは無保証です.作者は本プログラムをサポート
   する意志はありますが,プログラム自身のバグあるいは本プ
   ログラムの実行などから発生するいかなる損害に対しても責
   任を持ちません.
PK*J[7)�ccinclude/ruby.hnu�[���#ifndef RUBY_H                                       /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_H 1
/**
 * @author     $Author$
 * @date       Sun 10 12:06:15 Jun JST 2007
 * @copyright  2007-2008 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#define HAVE_RUBY_ATOMIC_H      1
#define HAVE_RUBY_DEBUG_H       1
#define HAVE_RUBY_DEFINES_H     1
#define HAVE_RUBY_ENCODING_H    1
#define HAVE_RUBY_FIBER_SCHEDULER_H 1
#define HAVE_RUBY_INTERN_H      1
#define HAVE_RUBY_IO_H          1
#define HAVE_RUBY_MEMORY_VIEW_H 1
#define HAVE_RUBY_MISSING_H     1
#define HAVE_RUBY_ONIGMO_H      1
#define HAVE_RUBY_ONIGURUMA_H   1
#define HAVE_RUBY_RACTOR_H      1
#define HAVE_RUBY_RANDOM_H      1
#define HAVE_RUBY_RE_H          1
#define HAVE_RUBY_REGEX_H       1
#define HAVE_RUBY_RUBY_H        1
#define HAVE_RUBY_ST_H          1
#define HAVE_RUBY_THREAD_H      1
#define HAVE_RUBY_THREAD_NATIVE_H 1
#define HAVE_RUBY_UTIL_H        1
#define HAVE_RUBY_VERSION_H     1
#define HAVE_RUBY_VM_H          1
#ifdef _WIN32
#define HAVE_RUBY_WIN32_H       1
#endif

#include "ruby/ruby.h"

#endif /* RUBY_H */
PK*J[x�y0��include/ruby/re.hnu�[���#ifndef RUBY_RE_H                                    /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_RE_H 1
/**
 * @file
 * @author     $Author$
 * @date       Thu Sep 30 14:18:32 JST 1993
 * @copyright  Copyright (C) 1993-2007 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "ruby/internal/config.h"

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif

#include <stdio.h>

#include "ruby/onigmo.h"
#include "ruby/regex.h"
#include "ruby/internal/core/rmatch.h"
#include "ruby/internal/dllexport.h"

struct re_registers;            /* Defined in onigmo.h */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Creates a  new instance of  ::rb_cRegexp.  It can  be seen as  a specialised
 * version of rb_reg_new_str() where it does not take options.
 *
 * @param[in]  str  Source code in String.
 * @return     Allocated new instance of ::rb_cRegexp.
 */
VALUE rb_reg_regcomp(VALUE str);

/**
 * Runs  the  passed  regular  expression   over  the  passed  string.   Unlike
 * rb_reg_search()  this function  also  takes position  and  direction of  the
 * search, which make  it possible for this  function to run from  in middle of
 * the string.
 *
 * @param[in]  re               Regular expression to execute.
 * @param[in]  str              Target string to search.
 * @param[in]  pos              Offset in `str` to start searching, in bytes.
 * @param[in]  dir              `pos`' direction; 0  means left-to-right, 1 for
 *                              the opposite.
 * @exception  rb_eArgError     `re` is broken.
 * @exception  rb_eRegexpError  `re` is malformed.
 * @retval     -1               Match failed.
 * @retval     otherwise        Offset of first such byte where match happened.
 * @post       `Regexp.last_match` is updated.
 * @post       `$&`, `$~`, etc., are updated.
 *
 * @internal
 *
 * Distinction  between raising  ::rb_eArgError  and  ::rb_eRegexpError is  not
 * obvious, at least to @shyouhei.
 */
long rb_reg_search(VALUE re, VALUE str, long pos, int dir);

/**
 * Substitution.  This  is basically the implementation  of `String#sub`.  Also
 * `String#gsub` repeatedly calls this function.
 *
 * @param[in]  repl  Replacement string, e.g. `"\\1\\2"`
 * @param[in]  src   Source string, to be replaced.
 * @param[in]  regs  Matched data generated by applying `rexp` to `src`.
 * @param[in]  rexp  Regular expression.
 * @return     A substituted string.
 *
 * @internal
 *
 * This  function does  not  check for  encoding compatibility.   `String#sub!`
 * etc. employ their own checker.
 *
 * `regs` should  have been `const  struct re_registers  *` because it  is read
 * only.  Kept as-is for compatibility.
 */
VALUE rb_reg_regsub(VALUE repl, VALUE src, struct re_registers *regs, VALUE rexp);

/**
 * Tell us if this is a wrong idea,  but it seems this function has no usage at
 * all.  Just remains here for theoretical backwards compatibility.
 *
 * @param[in]  re               Regular expression to execute.
 * @param[in]  str              Target string to search.
 * @param[in]  pos              Offset in `str` to start searching, in bytes.
 * @param[in]  dir              `pos`' direction; 0  means left-to-right, 1 for
 *                              the opposite.
 * @return     Adjusted nearest  offset to  `pos` inside of  `str`, where  is a
 *             character boundary.
 *
 */
long rb_reg_adjust_startpos(VALUE re, VALUE str, long pos, int dir);

/**
 * Escapes  any  characters  that  would  have special  meaning  in  a  regular
 * expression.
 *
 * @param[in]  str  Target string to escape.
 * @return     A copy of `str` whose contents are escaped.
 */
VALUE rb_reg_quote(VALUE str);

/**
 * Exercises  various  checks  and  preprocesses  so  that  the  given  regular
 * expression can be applied to the given string.  The preprocess here includes
 * (but not limited to) for instance encoding conversion.
 *
 * @param[in]  re                  Target regular expression.
 * @param[in]  str                 What `re` is about to run on.
 * @exception  rb_eArgError        `re` does not fit for `str`.
 * @exception  rb_eEncCompatError  `re` and `str` are incompatible.
 * @exception  rb_eRegexpError     `re` is malformed.
 * @return     A preprocessesed pattern buffer ready to be applied to `str`.
 * @note       The return value is manages by our GC.  Don't free.
 *
 * @internal
 *
 * The  return  type,  `regex_t  *`, is  defined  in  `<ruby/onigmo.h>`,  _and_
 * _conflicts_ with POSIX's  `<regex.h>`.  We can no longer  save the situation
 * at this point.  Just don't mix the two.
 */
regex_t *rb_reg_prepare_re(VALUE re, VALUE str);

/**
 * Runs a regular expression match using function `match`. Performs preparation,
 * error handling, and memory cleanup.
 *
 * @param[in]  re                  Target regular expression.
 * @param[in]  str                 What `re` is about to run on.
 * @param[in]  match               The function to run to match `str` against `re`.
 * @param[in]  args                Pointer to arguments to pass into `match`.
 * @param[out] regs                Registers on a successful match.
 * @exception  rb_eArgError        `re` does not fit for `str`.
 * @exception  rb_eEncCompatError  `re` and `str` are incompatible.
 * @exception  rb_eRegexpError     `re` is malformed.
 * @return     Match position on a successful match, `ONIG_MISMATCH` otherwise.
 *
 * @internal
 *
 * The type `regex_t  *` is  defined  in  `<ruby/onigmo.h>`,  _and_
 * _conflicts_ with POSIX's  `<regex.h>`.  We can no longer  save the situation
 * at this point.  Just don't mix the two.
 */
OnigPosition rb_reg_onig_match(VALUE re, VALUE str,
                               OnigPosition (*match)(regex_t *reg, VALUE str, struct re_registers *regs, void *args),
                               void *args, struct re_registers *regs);

/**
 * Duplicates a match data.  This  is roughly the same as `onig_region_copy()`,
 * except it tries to GC when there is not enough memory.
 *
 * @param[out]  dst             Target registers to fill.
 * @param[in]   src             Source registers to duplicate.
 * @exception   rb_eNoMemError  Not enough memory.
 * @retval      0               Successful
 * @retval      ONIGERR_MEMORY  Not enough memory, even after GC (unlikely).
 * @post        `dst` has identical contents to `src`.
 *
 * @internal
 *
 * It seems this function is here for `ext/strscan` and nothing else.
 */
int rb_reg_region_copy(struct re_registers *dst, const struct re_registers *src);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_RE_H */
PK*J[������include/ruby/onigmo.hnu�[���#ifndef ONIGMO_H
#define ONIGMO_H
/**********************************************************************
  onigmo.h - Onigmo (Oniguruma-mod) (regular expression library)
**********************************************************************/
/*-
 * Copyright (c) 2002-2009  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
 * Copyright (c) 2011-2017  K.Takata  <kentkt AT csc DOT jp>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifdef __cplusplus
extern "C" {
# if 0
} /* satisfy cc-mode */
# endif
#endif

#define ONIGMO_VERSION_MAJOR   6
#define ONIGMO_VERSION_MINOR   1
#define ONIGMO_VERSION_TEENY   3

#ifndef ONIG_EXTERN
# ifdef RUBY_EXTERN
#  define ONIG_EXTERN   RUBY_EXTERN
# else
#  if defined(_WIN32) && !defined(__GNUC__)
#   if defined(EXPORT) || defined(RUBY_EXPORT)
#    define ONIG_EXTERN   extern __declspec(dllexport)
#   else
#    define ONIG_EXTERN   extern __declspec(dllimport)
#   endif
#  endif
# endif
#endif

#ifndef ONIG_EXTERN
# define ONIG_EXTERN   extern
#endif

#ifndef RUBY
# ifndef RUBY_SYMBOL_EXPORT_BEGIN
#  define RUBY_SYMBOL_EXPORT_BEGIN
#  define RUBY_SYMBOL_EXPORT_END
# endif
#endif

RUBY_SYMBOL_EXPORT_BEGIN

#include <stddef.h>		/* for size_t */

/* PART: character encoding */

#ifndef ONIG_ESCAPE_UCHAR_COLLISION
# define UChar OnigUChar
#endif

typedef unsigned char  OnigUChar;
typedef unsigned int   OnigCodePoint;
typedef unsigned int   OnigCtype;
typedef size_t         OnigDistance;
typedef ptrdiff_t      OnigPosition;

#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)

/*
 * Onig casefold/case mapping flags and related definitions
 *
 * Subfields (starting with 0 at LSB):
 *   0-2: Code point count in casefold.h
 *   3-12: Index into SpecialCaseMapping array in casefold.h
 *   13-22: Case folding/mapping flags
 */
typedef unsigned int OnigCaseFoldType; /* case fold flag */

ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag;

/* bits for actual code point count; 3 bits is more than enough, currently only 2 used */
#define OnigCodePointMaskWidth    3
#define OnigCodePointMask     ((1<<OnigCodePointMaskWidth)-1)
#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)

/* #define ONIGENC_CASE_FOLD_HIRAGANA_KATAKANA  (1<<1) */ /* no longer usable with these values! */
/* #define ONIGENC_CASE_FOLD_KATAKANA_WIDTH     (1<<2) */ /* no longer usable with these values! */

/* bits for index into table with separate titlecase mappings */
/* 10 bits provide 1024 values */
#define OnigSpecialIndexShift 3
#define OnigSpecialIndexWidth 10

#define ONIGENC_CASE_UPCASE                     (1<<13) /* has/needs uppercase mapping */
#define ONIGENC_CASE_DOWNCASE                   (1<<14) /* has/needs lowercase mapping */
#define ONIGENC_CASE_TITLECASE                  (1<<15) /* has/needs (special) titlecase mapping */
#define ONIGENC_CASE_SPECIAL_OFFSET             3       /* offset in bits from ONIGENC_CASE to ONIGENC_CASE_SPECIAL */
#define ONIGENC_CASE_UP_SPECIAL                 (1<<16) /* has special upcase mapping */
#define ONIGENC_CASE_DOWN_SPECIAL               (1<<17) /* has special downcase mapping */
#define ONIGENC_CASE_MODIFIED                   (1<<18) /* data has been modified */
#define ONIGENC_CASE_FOLD                       (1<<19) /* has/needs case folding */

#define ONIGENC_CASE_FOLD_TURKISH_AZERI         (1<<20) /* needs mapping specific to Turkic languages; better not change original value! */

#define ONIGENC_CASE_FOLD_LITHUANIAN            (1<<21) /* needs Lithuanian-specific mapping */
#define ONIGENC_CASE_ASCII_ONLY                 (1<<22) /* only modify ASCII range */
#define ONIGENC_CASE_IS_TITLECASE               (1<<23) /* character itself is already titlecase */

#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR   (1<<30) /* better not change original value! */

#define ONIGENC_CASE_FOLD_MIN      INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
#define ONIGENC_CASE_FOLD_DEFAULT  OnigDefaultCaseFoldFlag


#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN       3
#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM      13
/* 13 => Unicode:0x1ffc */

/* code range */
#define ONIGENC_CODE_RANGE_NUM(range)     ((int )range[0])
#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]

typedef struct {
  int byte_len;  /* argument(original) character(s) byte length */
  int code_len;  /* number of code */
  OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN];
} OnigCaseFoldCodeItem;

typedef struct {
  OnigCodePoint esc;
  OnigCodePoint anychar;
  OnigCodePoint anytime;
  OnigCodePoint zero_or_one_time;
  OnigCodePoint one_or_more_time;
  OnigCodePoint anychar_anytime;
} OnigMetaCharTableType;

typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);

typedef struct OnigEncodingTypeST {
  int    (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
  const char*   name;
  int           max_enc_len;
  int           min_enc_len;
  int    (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
  OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
  int    (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
  int    (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
  int    (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
  int    (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
  int    (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
  int    (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
  int    (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
  int    (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
  OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
  int    (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
  int    (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
  int ruby_encoding_index;
  unsigned int  flags;
} OnigEncodingType;

typedef const OnigEncodingType* OnigEncoding;

ONIG_EXTERN const OnigEncodingType OnigEncodingASCII;
#ifndef RUBY
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_1;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_2;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_3;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_4;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_5;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_6;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_7;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_8;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_9;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_10;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_11;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_13;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_14;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_15;
ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_16;
ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_8;
ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_16BE;
ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_16LE;
ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_32BE;
ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_32LE;
ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_JP;
ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_TW;
ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_KR;
ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_CN;
ONIG_EXTERN const OnigEncodingType OnigEncodingShift_JIS;
ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_31J;
/* ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8; */
ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8_R;
ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8_U;
ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1250;
ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1251;
ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1252;
ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1253;
ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1254;
ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1257;
ONIG_EXTERN const OnigEncodingType OnigEncodingBIG5;
ONIG_EXTERN const OnigEncodingType OnigEncodingGB18030;
#endif /* RUBY */

#define ONIG_ENCODING_ASCII        (&OnigEncodingASCII)
#ifndef RUBY
# define ONIG_ENCODING_ISO_8859_1   (&OnigEncodingISO_8859_1)
# define ONIG_ENCODING_ISO_8859_2   (&OnigEncodingISO_8859_2)
# define ONIG_ENCODING_ISO_8859_3   (&OnigEncodingISO_8859_3)
# define ONIG_ENCODING_ISO_8859_4   (&OnigEncodingISO_8859_4)
# define ONIG_ENCODING_ISO_8859_5   (&OnigEncodingISO_8859_5)
# define ONIG_ENCODING_ISO_8859_6   (&OnigEncodingISO_8859_6)
# define ONIG_ENCODING_ISO_8859_7   (&OnigEncodingISO_8859_7)
# define ONIG_ENCODING_ISO_8859_8   (&OnigEncodingISO_8859_8)
# define ONIG_ENCODING_ISO_8859_9   (&OnigEncodingISO_8859_9)
# define ONIG_ENCODING_ISO_8859_10  (&OnigEncodingISO_8859_10)
# define ONIG_ENCODING_ISO_8859_11  (&OnigEncodingISO_8859_11)
# define ONIG_ENCODING_ISO_8859_13  (&OnigEncodingISO_8859_13)
# define ONIG_ENCODING_ISO_8859_14  (&OnigEncodingISO_8859_14)
# define ONIG_ENCODING_ISO_8859_15  (&OnigEncodingISO_8859_15)
# define ONIG_ENCODING_ISO_8859_16  (&OnigEncodingISO_8859_16)
# define ONIG_ENCODING_UTF_8        (&OnigEncodingUTF_8)
# define ONIG_ENCODING_UTF_16BE     (&OnigEncodingUTF_16BE)
# define ONIG_ENCODING_UTF_16LE     (&OnigEncodingUTF_16LE)
# define ONIG_ENCODING_UTF_32BE     (&OnigEncodingUTF_32BE)
# define ONIG_ENCODING_UTF_32LE     (&OnigEncodingUTF_32LE)
# define ONIG_ENCODING_EUC_JP       (&OnigEncodingEUC_JP)
# define ONIG_ENCODING_EUC_TW       (&OnigEncodingEUC_TW)
# define ONIG_ENCODING_EUC_KR       (&OnigEncodingEUC_KR)
# define ONIG_ENCODING_EUC_CN       (&OnigEncodingEUC_CN)
# define ONIG_ENCODING_SHIFT_JIS    (&OnigEncodingShift_JIS)
# define ONIG_ENCODING_WINDOWS_31J  (&OnigEncodingWindows_31J)
/* # define ONIG_ENCODING_KOI8         (&OnigEncodingKOI8) */
# define ONIG_ENCODING_KOI8_R       (&OnigEncodingKOI8_R)
# define ONIG_ENCODING_KOI8_U       (&OnigEncodingKOI8_U)
# define ONIG_ENCODING_WINDOWS_1250 (&OnigEncodingWindows_1250)
# define ONIG_ENCODING_WINDOWS_1251 (&OnigEncodingWindows_1251)
# define ONIG_ENCODING_WINDOWS_1252 (&OnigEncodingWindows_1252)
# define ONIG_ENCODING_WINDOWS_1253 (&OnigEncodingWindows_1253)
# define ONIG_ENCODING_WINDOWS_1254 (&OnigEncodingWindows_1254)
# define ONIG_ENCODING_WINDOWS_1257 (&OnigEncodingWindows_1257)
# define ONIG_ENCODING_BIG5         (&OnigEncodingBIG5)
# define ONIG_ENCODING_GB18030      (&OnigEncodingGB18030)

/* old names */
# define ONIG_ENCODING_SJIS         ONIG_ENCODING_SHIFT_JIS
# define ONIG_ENCODING_CP932        ONIG_ENCODING_WINDOWS_31J
# define ONIG_ENCODING_CP1250       ONIG_ENCODING_WINDOWS_1250
# define ONIG_ENCODING_CP1251       ONIG_ENCODING_WINDOWS_1251
# define ONIG_ENCODING_CP1252       ONIG_ENCODING_WINDOWS_1252
# define ONIG_ENCODING_CP1253       ONIG_ENCODING_WINDOWS_1253
# define ONIG_ENCODING_CP1254       ONIG_ENCODING_WINDOWS_1254
# define ONIG_ENCODING_CP1257       ONIG_ENCODING_WINDOWS_1257
# define ONIG_ENCODING_UTF8         ONIG_ENCODING_UTF_8
# define ONIG_ENCODING_UTF16_BE     ONIG_ENCODING_UTF_16BE
# define ONIG_ENCODING_UTF16_LE     ONIG_ENCODING_UTF_16LE
# define ONIG_ENCODING_UTF32_BE     ONIG_ENCODING_UTF_32BE
# define ONIG_ENCODING_UTF32_LE     ONIG_ENCODING_UTF_32LE
#endif /* RUBY */

#define ONIG_ENCODING_UNDEF    ((OnigEncoding )0)

/* this declaration needs to be here because it is used in string.c in Ruby */
ONIG_EXTERN
int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);


/* work size */
#define ONIGENC_CODE_TO_MBC_MAXLEN       7
#define ONIGENC_MBC_CASE_FOLD_MAXLEN    18
/* 18: 6(max-byte) * 3(case-fold chars) */

/* character types */
#define ONIGENC_CTYPE_NEWLINE   0
#define ONIGENC_CTYPE_ALPHA     1
#define ONIGENC_CTYPE_BLANK     2
#define ONIGENC_CTYPE_CNTRL     3
#define ONIGENC_CTYPE_DIGIT     4
#define ONIGENC_CTYPE_GRAPH     5
#define ONIGENC_CTYPE_LOWER     6
#define ONIGENC_CTYPE_PRINT     7
#define ONIGENC_CTYPE_PUNCT     8
#define ONIGENC_CTYPE_SPACE     9
#define ONIGENC_CTYPE_UPPER    10
#define ONIGENC_CTYPE_XDIGIT   11
#define ONIGENC_CTYPE_WORD     12
#define ONIGENC_CTYPE_ALNUM    13  /* alpha || digit */
#define ONIGENC_CTYPE_ASCII    14
#define ONIGENC_MAX_STD_CTYPE  ONIGENC_CTYPE_ASCII

/* flags */
#define ONIGENC_FLAG_NONE       0U
#define ONIGENC_FLAG_UNICODE    1U

#define onig_enc_len(enc,p,e)          ONIGENC_MBC_ENC_LEN(enc, p, e)

#define ONIGENC_IS_UNDEF(enc)          ((enc) == ONIG_ENCODING_UNDEF)
#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
#define ONIGENC_IS_MBC_HEAD(enc,p,e)   (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
#define ONIGENC_IS_MBC_ASCII(p)           (*(p)   < 128)
#define ONIGENC_IS_CODE_ASCII(code)       ((code) < 128)
#define ONIGENC_IS_MBC_WORD(enc,s,end) \
   ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) \
   onigenc_ascii_is_code_ctype( \
	ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc)
#define ONIGENC_IS_UNICODE(enc)        ((enc)->flags & ONIGENC_FLAG_UNICODE)


#define ONIGENC_NAME(enc)                      ((enc)->name)

#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \
  (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \
        (enc)->is_allowed_reverse_match(s,end,enc)
#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) \
        (enc)->left_adjust_char_head(start, s, end, enc)
#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \
        (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \
       (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc)
#define ONIGENC_STEP_BACK(enc,start,s,end,n) \
        onigenc_step_back((enc),(start),(s),(end),(n))

#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n)   (n)
#define ONIGENC_MBCLEN_CHARFOUND_P(r)           (0 < (r))
#define ONIGENC_MBCLEN_CHARFOUND_LEN(r)         (r)

#define ONIGENC_CONSTRUCT_MBCLEN_INVALID()      (-1)
#define ONIGENC_MBCLEN_INVALID_P(r)             ((r) == -1)

#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n)    (-1-(n))
#define ONIGENC_MBCLEN_NEEDMORE_P(r)            ((r) < -1)
#define ONIGENC_MBCLEN_NEEDMORE_LEN(r)          (-1-(r))

#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e)   (enc)->precise_mbc_enc_len(p,e,enc)

ONIG_EXTERN
int onigenc_mbclen(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);

#define ONIGENC_MBC_ENC_LEN(enc,p,e)           onigenc_mbclen(p,e,enc)
#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
#define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)
#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
#define ONIGENC_IS_MBC_NEWLINE(enc,p,end)      (enc)->is_mbc_newline((p),(end),enc)
#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code,enc)
#define ONIGENC_CODE_TO_MBC(enc,code,buf)      (enc)->code_to_mbc(code,buf,enc)
#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \
  (enc)->property_name_to_ctype(enc,p,end)

#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)

#define ONIGENC_IS_CODE_NEWLINE(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
#define ONIGENC_IS_CODE_GRAPH(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
#define ONIGENC_IS_CODE_PRINT(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
#define ONIGENC_IS_CODE_ALNUM(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
#define ONIGENC_IS_CODE_ALPHA(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
#define ONIGENC_IS_CODE_LOWER(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
#define ONIGENC_IS_CODE_UPPER(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
#define ONIGENC_IS_CODE_CNTRL(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
#define ONIGENC_IS_CODE_PUNCT(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
#define ONIGENC_IS_CODE_SPACE(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
#define ONIGENC_IS_CODE_BLANK(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
#define ONIGENC_IS_CODE_DIGIT(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
#define ONIGENC_IS_CODE_XDIGIT(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
#define ONIGENC_IS_CODE_WORD(enc,code) \
        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)

#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \
        (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)

ONIG_EXTERN
OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);


/* encoding API */
ONIG_EXTERN
int onigenc_init(void);
ONIG_EXTERN
int onigenc_set_default_encoding(OnigEncoding enc);
ONIG_EXTERN
OnigEncoding onigenc_get_default_encoding(void);
ONIG_EXTERN
OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
ONIG_EXTERN
OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
ONIG_EXTERN
OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
ONIG_EXTERN
OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
ONIG_EXTERN
int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
ONIG_EXTERN
int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
ONIG_EXTERN
int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);



/* PART: regular expression */

/* config parameters */
#define ONIG_NREGION                          4
#define ONIG_MAX_CAPTURE_GROUP_NUM         32767
#define ONIG_MAX_BACKREF_NUM                1000
#define ONIG_MAX_REPEAT_NUM               100000
#define ONIG_MAX_MULTI_BYTE_RANGES_NUM     10000
/* constants */
#define ONIG_MAX_ERROR_MESSAGE_LEN            90

typedef unsigned int        OnigOptionType;

#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE

/* options */
#define ONIG_OPTION_NONE                 0U
#define ONIG_OPTION_IGNORECASE           1U
#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
#define ONIG_OPTION_DOTALL                ONIG_OPTION_MULTILINE
#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
/* options (search time) */
#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
/* options (ctype range) */
#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
#define ONIG_OPTION_WORD_BOUND_ALL_RANGE    (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
/* options (newline) */
#define ONIG_OPTION_NEWLINE_CRLF         (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
#define ONIG_OPTION_MAXBIT               ONIG_OPTION_NEWLINE_CRLF  /* limit */

#define ONIG_OPTION_ON(options,regopt)      ((options) |= (regopt))
#define ONIG_OPTION_OFF(options,regopt)     ((options) &= ~(regopt))
#define ONIG_IS_OPTION_ON(options,option)   ((options) & (option))

/* syntax */
typedef struct {
  unsigned int   op;
  unsigned int   op2;
  unsigned int   behavior;
  OnigOptionType options;   /* default option */
  OnigMetaCharTableType meta_char_table;
} OnigSyntaxType;

ONIG_EXTERN const OnigSyntaxType OnigSyntaxASIS;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixBasic;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixExtended;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxEmacs;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxGrep;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxGnuRegex;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxJava;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58_NG;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxRuby;
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPython;

/* predefined syntaxes (see regsyntax.c) */
#define ONIG_SYNTAX_ASIS               (&OnigSyntaxASIS)
#define ONIG_SYNTAX_POSIX_BASIC        (&OnigSyntaxPosixBasic)
#define ONIG_SYNTAX_POSIX_EXTENDED     (&OnigSyntaxPosixExtended)
#define ONIG_SYNTAX_EMACS              (&OnigSyntaxEmacs)
#define ONIG_SYNTAX_GREP               (&OnigSyntaxGrep)
#define ONIG_SYNTAX_GNU_REGEX          (&OnigSyntaxGnuRegex)
#define ONIG_SYNTAX_JAVA               (&OnigSyntaxJava)
#define ONIG_SYNTAX_PERL58             (&OnigSyntaxPerl58)
#define ONIG_SYNTAX_PERL58_NG          (&OnigSyntaxPerl58_NG)
#define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)
#define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)
#define ONIG_SYNTAX_PYTHON             (&OnigSyntaxPython)

/* default syntax */
ONIG_EXTERN const OnigSyntaxType*   OnigDefaultSyntax;
#define ONIG_SYNTAX_DEFAULT   OnigDefaultSyntax

/* syntax (operators) */
#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS    (1U<<0)
#define ONIG_SYN_OP_DOT_ANYCHAR                 (1U<<1)   /* . */
#define ONIG_SYN_OP_ASTERISK_ZERO_INF           (1U<<2)   /* * */
#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF       (1U<<3)
#define ONIG_SYN_OP_PLUS_ONE_INF                (1U<<4)   /* + */
#define ONIG_SYN_OP_ESC_PLUS_ONE_INF            (1U<<5)
#define ONIG_SYN_OP_QMARK_ZERO_ONE              (1U<<6)   /* ? */
#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE          (1U<<7)
#define ONIG_SYN_OP_BRACE_INTERVAL              (1U<<8)   /* {lower,upper} */
#define ONIG_SYN_OP_ESC_BRACE_INTERVAL          (1U<<9)   /* \{lower,upper\} */
#define ONIG_SYN_OP_VBAR_ALT                    (1U<<10)   /* | */
#define ONIG_SYN_OP_ESC_VBAR_ALT                (1U<<11)  /* \| */
#define ONIG_SYN_OP_LPAREN_SUBEXP               (1U<<12)  /* (...)   */
#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP           (1U<<13)  /* \(...\) */
#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR           (1U<<14)  /* \A, \Z, \z */
#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR  (1U<<15)  /* \G     */
#define ONIG_SYN_OP_DECIMAL_BACKREF             (1U<<16)  /* \num   */
#define ONIG_SYN_OP_BRACKET_CC                  (1U<<17)  /* [...]  */
#define ONIG_SYN_OP_ESC_W_WORD                  (1U<<18)  /* \w, \W */
#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END     (1U<<19)  /* \<. \> */
#define ONIG_SYN_OP_ESC_B_WORD_BOUND            (1U<<20)  /* \b, \B */
#define ONIG_SYN_OP_ESC_S_WHITE_SPACE           (1U<<21)  /* \s, \S */
#define ONIG_SYN_OP_ESC_D_DIGIT                 (1U<<22)  /* \d, \D */
#define ONIG_SYN_OP_LINE_ANCHOR                 (1U<<23)  /* ^, $   */
#define ONIG_SYN_OP_POSIX_BRACKET               (1U<<24)  /* [:xxxx:] */
#define ONIG_SYN_OP_QMARK_NON_GREEDY            (1U<<25)  /* ??,*?,+?,{n,m}? */
#define ONIG_SYN_OP_ESC_CONTROL_CHARS           (1U<<26)  /* \n,\r,\t,\a ... */
#define ONIG_SYN_OP_ESC_C_CONTROL               (1U<<27)  /* \cx  */
#define ONIG_SYN_OP_ESC_OCTAL3                  (1U<<28)  /* \OOO */
#define ONIG_SYN_OP_ESC_X_HEX2                  (1U<<29)  /* \xHH */
#define ONIG_SYN_OP_ESC_X_BRACE_HEX8            (1U<<30)  /* \x{7HHHHHHH} */
#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL           (1U<<31)  /* \o{OOO} */

#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE        (1U<<0)  /* \Q...\E */
#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT         (1U<<1)  /* (?...) */
#define ONIG_SYN_OP2_OPTION_PERL                (1U<<2)  /* (?imsxadlu), (?-imsx), (?^imsxalu) */
#define ONIG_SYN_OP2_OPTION_RUBY                (1U<<3)  /* (?imxadu), (?-imx)  */
#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT     (1U<<4)  /* ?+,*+,++ */
#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL   (1U<<5)  /* {n,m}+   */
#define ONIG_SYN_OP2_CCLASS_SET_OP              (1U<<6)  /* [...&&..[..]..] */
#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       (1U<<7)  /* (?<name>...) */
#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF        (1U<<8)  /* \k<name> */
#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL          (1U<<9)  /* \g<name>, \g<n> */
#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY     (1U<<10) /* (?@..),(?@<x>..) */
#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL  (1U<<11) /* \C-x */
#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META     (1U<<12) /* \M-x */
#define ONIG_SYN_OP2_ESC_V_VTAB                 (1U<<13) /* \v as VTAB */
#define ONIG_SYN_OP2_ESC_U_HEX4                 (1U<<14) /* \uHHHH */
#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR         (1U<<15) /* \`, \' */
#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  (1U<<16) /* \p{...}, \P{...} */
#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */
/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */
#define ONIG_SYN_OP2_ESC_H_XDIGIT               (1U<<19) /* \h, \H */
#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE         (1U<<20) /* \ */
#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK    (1U<<21) /* \R as (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}]) */
#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22) /* \X */
#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE   (1U<<23) /* \v, \V -- Perl */ /* NOTIMPL */
#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24) /* \h, \H -- Perl */ /* NOTIMPL */
#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP         (1U<<25) /* \K */
#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF        (1U<<26) /* \g{name}, \g{n} */
#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL          (1U<<27) /* (?&name), (?n), (?R), (?0) */
#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET    (1U<<28) /* (?|...) */         /* NOTIMPL */
#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION     (1U<<29) /* (?(cond)yes...|no...) */
#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30) /* (?P<name>...), (?P=name), (?P>name) -- Python/PCRE */
#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT         (1U<<31) /* (?~...) */
/* #define ONIG_SYN_OP2_OPTION_JAVA                (1U<<xx) */ /* (?idmsux), (?-idmsux) */ /* NOTIMPL */

/* syntax (behavior) */
#define ONIG_SYN_CONTEXT_INDEP_ANCHORS           (1U<<31) /* not implemented */
#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS        (1U<<0)  /* ?, *, +, {n,m} */
#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS      (1U<<1)  /* error or ignore */
#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP    (1U<<2)  /* ...)... */
#define ONIG_SYN_ALLOW_INVALID_INTERVAL          (1U<<3)  /* {??? */
#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV       (1U<<4)  /* {,n} => {0,n} */
#define ONIG_SYN_STRICT_CHECK_BACKREF            (1U<<5)  /* /(\1)/,/\1()/ ..*/
#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND   (1U<<6)  /* (?<=a|bc) */
#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP        (1U<<7)  /* see doc/RE */
#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)  /* (?<x>)(?<x>) */
#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY   (1U<<9)  /* a{n}?=(?:a{n})? */
#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)  /* (?<x>)(?<x>)(?&x) */
#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP       (1U<<11) /* (?<x>)(?<x>)\k<x> */

/* syntax (behavior) in char class [...] */
#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC      (1U<<20) /* [^...] */
#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC          (1U<<21) /* [..\w..] etc.. */
#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC         (1U<<22)
#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC     (1U<<23) /* [0-9-a]=[0-9\-a] */
/* syntax (behavior) warning */
#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          (1U<<24) /* [,-,] */
#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    (1U<<25) /* (?:a*)+ */
#define ONIG_SYN_WARN_CC_DUP                     (1U<<26) /* [aa] */

/* meta character specifiers (onig_set_meta_char()) */
#define ONIG_META_CHAR_ESCAPE               0
#define ONIG_META_CHAR_ANYCHAR              1
#define ONIG_META_CHAR_ANYTIME              2
#define ONIG_META_CHAR_ZERO_OR_ONE_TIME     3
#define ONIG_META_CHAR_ONE_OR_MORE_TIME     4
#define ONIG_META_CHAR_ANYCHAR_ANYTIME      5

#define ONIG_INEFFECTIVE_META_CHAR          0

/* error codes */
#define ONIG_IS_PATTERN_ERROR(ecode)   ((ecode) <= -100 && (ecode) > -1000)
/* normal return */
#define ONIG_NORMAL                                            0
#define ONIG_MISMATCH                                         -1
#define ONIG_NO_SUPPORT_CONFIG                                -2

/* internal error */
#define ONIGERR_MEMORY                                         -5
#define ONIGERR_TYPE_BUG                                       -6
#define ONIGERR_PARSER_BUG                                    -11
#define ONIGERR_STACK_BUG                                     -12
#define ONIGERR_UNDEFINED_BYTECODE                            -13
#define ONIGERR_UNEXPECTED_BYTECODE                           -14
#define ONIGERR_MATCH_STACK_LIMIT_OVER                        -15
#define ONIGERR_PARSE_DEPTH_LIMIT_OVER                        -16
#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET                   -21
#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR  -22
#define ONIGERR_TIMEOUT                                       -23
/* general error */
#define ONIGERR_INVALID_ARGUMENT                              -30
/* syntax error */
#define ONIGERR_END_PATTERN_AT_LEFT_BRACE                    -100
#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET                  -101
#define ONIGERR_EMPTY_CHAR_CLASS                             -102
#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS                  -103
#define ONIGERR_END_PATTERN_AT_ESCAPE                        -104
#define ONIGERR_END_PATTERN_AT_META                          -105
#define ONIGERR_END_PATTERN_AT_CONTROL                       -106
#define ONIGERR_META_CODE_SYNTAX                             -108
#define ONIGERR_CONTROL_CODE_SYNTAX                          -109
#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE             -110
#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE           -111
#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS      -112
#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED      -113
#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID            -114
#define ONIGERR_NESTED_REPEAT_OPERATOR                       -115
#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS                  -116
#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS       -117
#define ONIGERR_END_PATTERN_IN_GROUP                         -118
#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
#define ONIGERR_INVALID_POSIX_BRACKET_TYPE                   -121
#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122
#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN                 -123
#define ONIGERR_INVALID_CONDITION_PATTERN                    -124
/* values error (syntax error) */
#define ONIGERR_TOO_BIG_NUMBER                               -200
#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE              -201
#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE     -202
#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS                    -203
#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE          -204
#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES                   -205
#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING                  -206
#define ONIGERR_TOO_BIG_BACKREF_NUMBER                       -207
#define ONIGERR_INVALID_BACKREF                              -208
#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED         -209
#define ONIGERR_TOO_MANY_CAPTURE_GROUPS                      -210
#define ONIGERR_TOO_SHORT_DIGITS                             -211
#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212
#define ONIGERR_EMPTY_GROUP_NAME                             -214
#define ONIGERR_INVALID_GROUP_NAME                           -215
#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME                   -216
#define ONIGERR_UNDEFINED_NAME_REFERENCE                     -217
#define ONIGERR_UNDEFINED_GROUP_REFERENCE                    -218
#define ONIGERR_MULTIPLEX_DEFINED_NAME                       -219
#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL               -220
#define ONIGERR_NEVER_ENDING_RECURSION                       -221
#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY        -222
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME                   -223
#define ONIGERR_INVALID_CODE_POINT_VALUE                     -400
#define ONIGERR_INVALID_WIDE_CHAR_VALUE                      -400
#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION           -402
#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS               -403

/* errors related to thread */
/* #define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT                -1001 */


/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */
#define ONIG_MAX_CAPTURE_HISTORY_GROUP   31
#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \
  ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])

#ifdef USE_CAPTURE_HISTORY
typedef struct OnigCaptureTreeNodeStruct {
  int group;   /* group number */
  OnigPosition beg;
  OnigPosition end;
  int allocated;
  int num_childs;
  struct OnigCaptureTreeNodeStruct** childs;
} OnigCaptureTreeNode;
#endif

/* match result region type */
struct re_registers {
  int  allocated;
  int  num_regs;
  OnigPosition* beg;
  OnigPosition* end;
#ifdef USE_CAPTURE_HISTORY
  /* extended */
  OnigCaptureTreeNode* history_root;  /* capture history tree root */
#endif
};

/* capture tree traverse */
#define ONIG_TRAVERSE_CALLBACK_AT_FIRST   1
#define ONIG_TRAVERSE_CALLBACK_AT_LAST    2
#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \
  ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )


#define ONIG_REGION_NOTPOS            -1

typedef struct re_registers   OnigRegion;

typedef struct {
  OnigEncoding enc;
  OnigUChar* par;
  OnigUChar* par_end;
} OnigErrorInfo;

typedef struct {
  int lower;
  int upper;
} OnigRepeatRange;

typedef void (*OnigWarnFunc)(const char* s);
extern void onig_null_warn(const char* s);
#define ONIG_NULL_WARN       onig_null_warn

#define ONIG_CHAR_TABLE_SIZE   256

typedef struct re_pattern_buffer {
  /* common members of BBuf(bytes-buffer) */
  unsigned char* p;         /* compiled pattern */
  unsigned int used;        /* used space for p */
  unsigned int alloc;       /* allocated space for p */

  int num_mem;                   /* used memory(...) num counted from 1 */
  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
  int num_null_check;            /* OP_NULL_CHECK_START/END id counter */
  int num_comb_exp_check;        /* combination explosion check */
  int num_call;                  /* number of subexp call */
  unsigned int capture_history;  /* (?@...) flag (1-31) */
  unsigned int bt_mem_start;     /* need backtrack flag */
  unsigned int bt_mem_end;       /* need backtrack flag */
  int stack_pop_level;
  int repeat_range_alloc;

  OnigOptionType    options;

  OnigRepeatRange* repeat_range;

  OnigEncoding      enc;
  const OnigSyntaxType* syntax;
  void*             name_table;
  OnigCaseFoldType  case_fold_flag;

  /* optimization info (string search, char-map and anchors) */
  int            optimize;          /* optimize flag */
  int            threshold_len;     /* search str-length for apply optimize */
  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
  OnigDistance   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */
  OnigDistance   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */
  int            sub_anchor;        /* start-anchor for exact or map */
  unsigned char *exact;
  unsigned char *exact_end;
  unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */
  int           *int_map;                   /* BM skip for exact_len > 255 */
  int           *int_map_backward;          /* BM skip for backward search */
  OnigDistance   dmin;                      /* min-distance of exact or map */
  OnigDistance   dmax;                      /* max-distance of exact or map */

  /* rb_hrtime_t from hrtime.h */
#ifdef MY_RUBY_BUILD_MAY_TIME_TRAVEL
  int128_t timelimit;
#else
  uint64_t timelimit;
#endif

  /* regex_t link chain */
  struct re_pattern_buffer* chain;  /* escape compile-conflict */
} OnigRegexType;

typedef OnigRegexType*  OnigRegex;

#ifndef ONIG_ESCAPE_REGEX_T_COLLISION
typedef OnigRegexType  regex_t;
#endif


typedef struct {
  int             num_of_elements;
  OnigEncoding    pattern_enc;
  OnigEncoding    target_enc;
  const OnigSyntaxType* syntax;
  OnigOptionType  option;
  OnigCaseFoldType   case_fold_flag;
} OnigCompileInfo;

/* Oniguruma Native API */
ONIG_EXTERN
int onig_initialize(OnigEncoding encodings[], int n);
ONIG_EXTERN
int onig_init(void);
ONIG_EXTERN
int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
ONIG_EXTERN
void onig_set_warn_func(OnigWarnFunc f);
ONIG_EXTERN
void onig_set_verb_warn_func(OnigWarnFunc f);
ONIG_EXTERN
int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
ONIG_EXTERN
int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
ONIG_EXTERN
int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
ONIG_EXTERN
int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
ONIG_EXTERN
void onig_free(OnigRegex);
ONIG_EXTERN
void onig_free_body(OnigRegex);
ONIG_EXTERN
int onig_reg_copy(OnigRegex* reg, OnigRegex orig_reg);
ONIG_EXTERN
OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
ONIG_EXTERN
OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
ONIG_EXTERN
OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
ONIG_EXTERN
OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
ONIG_EXTERN
int onig_check_linear_time(OnigRegex reg);
ONIG_EXTERN
OnigRegion* onig_region_new(void);
ONIG_EXTERN
void onig_region_init(OnigRegion* region);
ONIG_EXTERN
void onig_region_free(OnigRegion* region, int free_self);
ONIG_EXTERN
void onig_region_copy(OnigRegion* to, const OnigRegion* from);
ONIG_EXTERN
void onig_region_clear(OnigRegion* region);
ONIG_EXTERN
int onig_region_resize(OnigRegion* region, int n);
ONIG_EXTERN
int onig_region_set(OnigRegion* region, int at, int beg, int end);
ONIG_EXTERN
int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
ONIG_EXTERN
int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
ONIG_EXTERN
int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
ONIG_EXTERN
int onig_number_of_names(const OnigRegexType *reg);
ONIG_EXTERN
int onig_number_of_captures(const OnigRegexType *reg);
ONIG_EXTERN
int onig_number_of_capture_histories(const OnigRegexType *reg);
#ifdef USE_CAPTURE_HISTORY
ONIG_EXTERN
OnigCaptureTreeNode* onig_get_capture_tree(OnigRegion* region);
#endif
ONIG_EXTERN
int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
ONIG_EXTERN
int onig_noname_group_capture_is_active(const OnigRegexType *reg);
ONIG_EXTERN
OnigEncoding onig_get_encoding(const OnigRegexType *reg);
ONIG_EXTERN
OnigOptionType onig_get_options(const OnigRegexType *reg);
ONIG_EXTERN
OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
ONIG_EXTERN
const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
ONIG_EXTERN
int onig_set_default_syntax(const OnigSyntaxType* syntax);
ONIG_EXTERN
void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
ONIG_EXTERN
unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
ONIG_EXTERN
unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
ONIG_EXTERN
unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
ONIG_EXTERN
OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
ONIG_EXTERN
void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
ONIG_EXTERN
void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
ONIG_EXTERN
void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
ONIG_EXTERN
void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
ONIG_EXTERN
int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
ONIG_EXTERN
void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
ONIG_EXTERN
OnigCaseFoldType onig_get_default_case_fold_flag(void);
ONIG_EXTERN
int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
ONIG_EXTERN
unsigned int onig_get_match_stack_limit_size(void);
ONIG_EXTERN
int onig_set_match_stack_limit_size(unsigned int size);
ONIG_EXTERN
unsigned int onig_get_parse_depth_limit(void);
ONIG_EXTERN
int onig_set_parse_depth_limit(unsigned int depth);
ONIG_EXTERN
int onig_end(void);
ONIG_EXTERN
const char* onig_version(void);
ONIG_EXTERN
const char* onig_copyright(void);

RUBY_SYMBOL_EXPORT_END

#ifdef __cplusplus
# if 0
{ /* satisfy cc-mode */
# endif
}
#endif

#endif /* ONIGMO_H */
PK*J["��^include/ruby/version.hnu�[���#ifndef RUBY_VERSION_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_VERSION_H 1
/**
 * @file
 * @author     $Author$
 * @date       Wed May 13 12:56:56 JST 2009
 * @copyright  Copyright (C) 1993-2009 Yukihiro Matsumoto
 * @copyright  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.
 * @copyright  Copyright (C) 2000  Information-technology Promotion Agency, Japan
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 *
 * This file contains only
 * - never-changeable information, and
 * - interfaces accessible from extension libraries.
 *
 * Never try to check RUBY_VERSION_CODE etc in extension libraries,
 * check the features with mkmf.rb instead.
 */

/**
 * @name The origin.
 *
 * These information never change.  Just written here to remember.
 *
 * @{
 */

/** Author of this project. */
#define RUBY_AUTHOR "Yukihiro Matsumoto"

/** Ruby's birth year. */
#define RUBY_BIRTH_YEAR 1993

/** Ruby's birth month. */
#define RUBY_BIRTH_MONTH 2

/** Ruby's birth day. */
#define RUBY_BIRTH_DAY 24

/** @} */

/**
 * @name The API version.
 *
 * API version  is different from  binary version.   These numbers are  for API
 * stability.  When you  have distinct API versions x and  y, you cannot expect
 * codes targeted to x also works for y.
 *
 * However   let   us  repeat   here   that   it's   a   BAD  idea   to   check
 * #RUBY_API_VERSION_CODE form extension libraries.  Different API versions are
 * just different.  There is no such thing like upper compatibility.
 *
 * @{
 */

/**
 * Major version.  This  digit changes sometimes for various  reasons, but that
 * doesn't mean a total rewrite.  Practically  when it comes to API versioning,
 * major and minor version changes are equally catastrophic.
 */
#define RUBY_API_VERSION_MAJOR 3

/**
 * Minor  version.   As of  writing  this  version changes  annually.   Greater
 * version doesn't mean "better"; they just mean years passed.
 */
#define RUBY_API_VERSION_MINOR 4

/**
 * Teeny version.  This digit  is kind of reserved these days.   Kept 0 for the
 * entire 2.x era.  Waiting for future uses.
 */
#define RUBY_API_VERSION_TEENY 0

/**
 * This macro is API versions encoded into a C integer.
 *
 * @note  Use mkmf.
 * @note  Don't rely on it.
 */
#define RUBY_API_VERSION_CODE (RUBY_API_VERSION_MAJOR*10000+RUBY_API_VERSION_MINOR*100+RUBY_API_VERSION_TEENY)

/** @} */

#ifdef RUBY_EXTERN
/* Internal note: this file could be included from verconf.mk _before_
 * generating config.h, on Windows.  The #ifdef above is to trick such
 * situation. */
RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * @name Interfaces from extension libraries.
 *
 * Before using these infos, think thrice whether they are really
 * necessary or not, and if the answer was yes, think twice a week
 * later again.
 *
 * @{
 */

/** API versions, in { major, minor, teeny } order.  */
RUBY_EXTERN const int ruby_api_version[3];

/**
 * Stringised version.
 *
 * @note  This is  the runtime version, not  the API version.  For  instance it
 *        was `"2.5.9"` when ::ruby_api_version was `{ 2, 5, 0 }`.
 */
RUBY_EXTERN const char ruby_version[];

/** Date of release, in a C string. */
RUBY_EXTERN const char ruby_release_date[];

/**
 * Target platform identifier, in a C string.
 *
 * @note  Seasoned  UNIX   programmers  should   beware  that   this  "platform
 *        identifier"  is  our invention;  not  always  identical to  so-called
 *        target triplets  that GNU systems  use.  For instance  on @shyouhei's
 *        machine, ::ruby_platform is `"x64_64-linux"` while its target triplet
 *        is `x86_64-pc-linux-gnu`.
 * @note  Note also that we support Windows.
 */
RUBY_EXTERN const char ruby_platform[];

/**
 * This  is a  monotonic  increasing integer  that  describes specific  "patch"
 * level.  You can know the exact changeset your binary is running by this info
 * (and ::ruby_version), unless  this is -1.  -1 means there  is no release yet
 * for the version; ruby is actively developed. 0 means the initial GA version.
 */
RUBY_EXTERN const int  ruby_patchlevel;

/**
 * This is what `ruby -v` prints to the standard error.  Something like:
 * `"ruby 2.5.9p229 (2021-04-05 revision 67829) [x86_64-linux]"`. This doesn't
 * include runtime options like a JIT being enabled.
 */
RUBY_EXTERN const char ruby_description[];

/** Copyright notice. */
RUBY_EXTERN const char ruby_copyright[];

/**
 * This  is just  `"ruby"`  for  us.  But  different  implementations can  have
 * different strings here.
 */
RUBY_EXTERN const char ruby_engine[];

/** @} */

RBIMPL_SYMBOL_EXPORT_END()
#endif

#endif
PK*J[��l
~n~ninclude/ruby/atomic.hnu�[���#ifndef RUBY_ATOMIC_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_ATOMIC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Atomic operations
 *
 * Basically, if  we could assume  either C11 or  C++11, these macros  are just
 * redundant.  Sadly we cannot.  We have to do them ourselves.
 */

#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>            /* size_t */
#endif

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>         /* ssize_t */
#endif

#if RBIMPL_COMPILER_SINCE(MSVC, 13, 0, 0)
# pragma intrinsic(_InterlockedOr)
#elif defined(__sun) && defined(HAVE_ATOMIC_H)
# include <atomic.h>
#endif

#include "ruby/assert.h"
#include "ruby/backward/2/limits.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/value.h"
#include "ruby/internal/static_assert.h"
#include "ruby/internal/stdbool.h"

/*
 * Asserts that  your environment supports  more than one atomic  types.  These
 * days systems tend to have such property  (C11 was a standard of decades ago,
 * right?) but we still support older ones.
 */
#if defined(__DOXYGEN__) || defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS)
# define RUBY_ATOMIC_GENERIC_MACRO 1
#endif

/**
 * Type  that  is eligible  for  atomic  operations.   Depending on  your  host
 * platform you might have  more than one such type, but we  choose one of them
 * anyways.
 */
#if defined(__DOXYGEN__)
using rb_atomic_t = std::atomic<unsigned>;
#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
typedef unsigned int rb_atomic_t;
#elif defined(HAVE_GCC_SYNC_BUILTINS)
typedef unsigned int rb_atomic_t;
#elif defined(_WIN32)
# include <winsock2.h>       // to prevent macro redefinitions
# include <windows.h>        // for `LONG` and `Interlocked` functions
typedef LONG rb_atomic_t;
#elif defined(__sun) && defined(HAVE_ATOMIC_H)
typedef unsigned int rb_atomic_t;
#else
# error No atomic operation found
#endif

/**
 * Atomically replaces the  value pointed by `var` with the  result of addition
 * of `val` to the old value of `var`.
 *
 * @param   var  A variable of ::rb_atomic_t.
 * @param   val  Value to add.
 * @return  What was stored in `var` before the addition.
 * @post    `var` holds `var + val`.
 */
#define RUBY_ATOMIC_FETCH_ADD(var, val) rbimpl_atomic_fetch_add(&(var), (val))

/**
 * Atomically  replaces  the  value  pointed   by  `var`  with  the  result  of
 * subtraction of `val` to the old value of `var`.
 *
 * @param   var  A variable of ::rb_atomic_t.
 * @param   val  Value to subtract.
 * @return  What was stored in `var` before the subtraction.
 * @post    `var` holds `var - val`.
 */
#define RUBY_ATOMIC_FETCH_SUB(var, val) rbimpl_atomic_fetch_sub(&(var), (val))

/**
 * Atomically  replaces  the  value  pointed   by  `var`  with  the  result  of
 * bitwise OR between `val` and the old value of `var`.
 *
 * @param   var   A variable of ::rb_atomic_t.
 * @param   val   Value to mix.
 * @return  void
 * @post    `var` holds `var | val`.
 * @note    For portability, this macro can return void.
 */
#define RUBY_ATOMIC_OR(var, val) rbimpl_atomic_or(&(var), (val))

/**
 * Atomically replaces the value pointed by  `var` with `val`.  This is just an
 * assignment, but you can additionally know the previous value.
 *
 * @param   var   A variable of ::rb_atomic_t.
 * @param   val   Value to set.
 * @return  What was stored in `var` before the assignment.
 * @post    `var` holds `val`.
 */
#define RUBY_ATOMIC_EXCHANGE(var, val) rbimpl_atomic_exchange(&(var), (val))

/**
 * Atomic compare-and-swap.   This stores  `val` to  `var` if  and only  if the
 * assignment changes  the value of `var`  from `oldval` to `newval`.   You can
 * detect whether the assignment happened or not using the return value.
 *
 * @param   var        A variable of ::rb_atomic_t.
 * @param   oldval     Expected value of `var` before the assignment.
 * @param   newval     What you want to store at `var`.
 * @retval  oldval     Successful assignment (`var` is now `newval`).
 * @retval  otherwise  Something else is at `var`; not updated.
 */
#define RUBY_ATOMIC_CAS(var, oldval, newval) \
    rbimpl_atomic_cas(&(var), (oldval), (newval))

/**
 * Atomic load. This loads `var` with an atomic intrinsic and returns
 * its value.
 *
 * @param var  A variable of ::rb_atomic_t
 * @return     What was stored in `var`j
 */
#define RUBY_ATOMIC_LOAD(var) rbimpl_atomic_load(&(var))

/**
 * Identical to #RUBY_ATOMIC_EXCHANGE, except for the return type.
 *
 * @param   var   A variable of ::rb_atomic_t.
 * @param   val   Value to set.
 * @return  void
 * @post    `var` holds `val`.
 */
#define RUBY_ATOMIC_SET(var, val) rbimpl_atomic_set(&(var), (val))

/**
 * Identical to #RUBY_ATOMIC_FETCH_ADD, except for the return type.
 *
 * @param   var  A variable of ::rb_atomic_t.
 * @param   val  Value to add.
 * @return  void
 * @post    `var` holds `var + val`.
 */
#define RUBY_ATOMIC_ADD(var, val) rbimpl_atomic_add(&(var), (val))

/**
 * Identical to #RUBY_ATOMIC_FETCH_SUB, except for the return type.
 *
 * @param   var  A variable of ::rb_atomic_t.
 * @param   val  Value to subtract.
 * @return  void
 * @post    `var` holds `var - val`.
 */
#define RUBY_ATOMIC_SUB(var, val) rbimpl_atomic_sub(&(var), (val))

/**
 * Atomically increments the value pointed by `var`.
 *
 * @param   var  A variable of ::rb_atomic_t.
 * @return  void
 * @post    `var` holds `var + 1`.
 */
#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var))

/**
 * Atomically decrements the value pointed by `var`.
 *
 * @param   var  A variable of ::rb_atomic_t.
 * @return  void
 * @post    `var` holds `var - 1`.
 */
#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var))

/**
 * Identical to #RUBY_ATOMIC_INC,  except it expects its  argument is `size_t`.
 * There are cases where ::rb_atomic_t is  32bit while `size_t` is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var  A variable of `size_t`.
 * @return  void
 * @post    `var` holds `var + 1`.
 */
#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var))

/**
 * Identical to #RUBY_ATOMIC_DEC,  except it expects its  argument is `size_t`.
 * There are cases where ::rb_atomic_t is  32bit while `size_t` is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var  A variable of `size_t`.
 * @return  void
 * @post    `var` holds `var - 1`.
 */
#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var))

/**
 * Identical  to #RUBY_ATOMIC_EXCHANGE,  except  it expects  its arguments  are
 * `size_t`.  There  are cases where  ::rb_atomic_t is 32bit while  `size_t` is
 * 64bit.  This  should be  used for  size related  operations to  support such
 * platforms.
 *
 * @param   var  A variable of `size_t`.
 * @param   val   Value to set.
 * @return  What was stored in `var` before the assignment.
 * @post    `var` holds `val`.
 */
#define RUBY_ATOMIC_SIZE_EXCHANGE(var, val) \
    rbimpl_atomic_size_exchange(&(var), (val))

/**
 * Identical to #RUBY_ATOMIC_CAS, except it expects its arguments are `size_t`.
 * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var        A variable of `size_t`.
 * @param   oldval     Expected value of `var` before the assignment.
 * @param   newval     What you want to store at `var`.
 * @retval  oldval     Successful assignment (`var` is now `newval`).
 * @retval  otherwise  Something else is at `var`; not updated.
 */
#define RUBY_ATOMIC_SIZE_CAS(var, oldval, newval) \
    rbimpl_atomic_size_cas(&(var), (oldval), (newval))

/**
 * Identical to #RUBY_ATOMIC_ADD, except it expects its arguments are `size_t`.
 * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var  A variable of `size_t`.
 * @param   val  Value to add.
 * @return  void
 * @post    `var` holds `var + val`.
 */
#define RUBY_ATOMIC_SIZE_ADD(var, val) rbimpl_atomic_size_add(&(var), (val))

/**
 * Identical to #RUBY_ATOMIC_SUB, except it expects its arguments are `size_t`.
 * There are cases where ::rb_atomic_t is 32bit while `size_t` is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var  A variable of `size_t`.
 * @param   val  Value to subtract.
 * @return  void
 * @post    `var` holds `var - val`.
 */
#define RUBY_ATOMIC_SIZE_SUB(var, val) rbimpl_atomic_size_sub(&(var), (val))

/**
 * Identical  to #RUBY_ATOMIC_EXCHANGE,  except  it expects  its arguments  are
 * `void*`.   There are  cases where  ::rb_atomic_t is  32bit while  `void*` is
 * 64bit.  This should  be used for pointer related operations  to support such
 * platforms.
 *
 * @param   var  A variable of `void *`.
 * @param   val   Value to set.
 * @return  What was stored in `var` before the assignment.
 * @post    `var` holds `val`.
 *
 * @internal
 *
 * :FIXME: this `(void*)` cast is evil!  However `void*` is incompatible with
 * some pointers, most notably function pointers.
 */
#define RUBY_ATOMIC_PTR_EXCHANGE(var, val) \
    RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val))

/**
 * Identical to #RUBY_ATOMIC_LOAD, except it expects its arguments are `void*`.
 * There are cases where ::rb_atomic_t is 32bit while `void*` is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var        A variable of `void*`
 * @return             The value of `var` (without tearing)
 */
#define RUBY_ATOMIC_PTR_LOAD(var) \
    RBIMPL_CAST(rbimpl_atomic_ptr_load((void **)&var))

/**
 * Identical to #RUBY_ATOMIC_CAS, except it expects its arguments are `void*`.
 * There are cases where ::rb_atomic_t is 32bit while `void*` is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var        A variable of `void*`.
 * @param   oldval     Expected value of `var` before the assignment.
 * @param   newval     What you want to store at `var`.
 * @retval  oldval     Successful assignment (`var` is now `newval`).
 * @retval  otherwise  Something else is at `var`; not updated.
 */
#define RUBY_ATOMIC_PTR_CAS(var, oldval, newval) \
    RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (void *)(oldval), (void *)(newval)))

/**
 * Identical  to #RUBY_ATOMIC_EXCHANGE,  except  it expects  its arguments  are
 * ::VALUE.   There are  cases where  ::rb_atomic_t is  32bit while  ::VALUE is
 * 64bit.  This should  be used for pointer related operations  to support such
 * platforms.
 *
 * @param   var  A variable of ::VALUE.
 * @param   val   Value to set.
 * @return  What was stored in `var` before the assignment.
 * @post    `var` holds `val`.
 */
#define RUBY_ATOMIC_VALUE_EXCHANGE(var, val) \
    rbimpl_atomic_value_exchange(&(var), (val))

/**
 * Identical to #RUBY_ATOMIC_CAS, except it  expects its arguments are ::VALUE.
 * There are cases  where ::rb_atomic_t is 32bit while ::VALUE  is 64bit.  This
 * should be used for size related operations to support such platforms.
 *
 * @param   var        A variable of `void*`.
 * @param   oldval     Expected value of `var` before the assignment.
 * @param   newval     What you want to store at `var`.
 * @retval  oldval     Successful assignment (`var` is now `newval`).
 * @retval  otherwise  Something else is at `var`; not updated.
 */
#define RUBY_ATOMIC_VALUE_CAS(var, oldval, newval) \
    rbimpl_atomic_value_cas(&(var), (oldval), (newval))

/** @cond INTERNAL_MACRO */
RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline rb_atomic_t
rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    return __atomic_fetch_add(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    return __sync_fetch_and_add(ptr, val);

#elif defined(_WIN32)
    return InterlockedExchangeAdd(ptr, val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    /*
     * `atomic_add_int_nv` takes its second argument as `int`!  Meanwhile our
     * `rb_atomic_t` is unsigned.  We cannot pass `val` as-is.  We have to
     * manually check integer overflow.
     */
    RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX);
    return atomic_add_int_nv(ptr, val) - val;

#else
# error Unsupported platform.
#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    /*
     * GCC on amd64 is smart enough to detect this `__atomic_add_fetch`'s
     * return value is not used, then compiles it into single `LOCK ADD`
     * instruction.
     */
    __atomic_add_fetch(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    __sync_add_and_fetch(ptr, val);

#elif defined(_WIN32)
    /*
     * `InterlockedExchangeAdd` is `LOCK XADD`.  It seems there also is
     * `_InterlockedAdd` intrinsic in ARM Windows but not for x86?  Sticking to
     * `InterlockedExchangeAdd` for better portability.
     */
    InterlockedExchangeAdd(ptr, val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    /* Ditto for `atomic_add_int_nv`. */
    RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX);
    atomic_add_int(ptr, val);

#else
# error Unsupported platform.
#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_size_add(volatile size_t *ptr, size_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    __atomic_add_fetch(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    __sync_add_and_fetch(ptr, val);

#elif defined(_WIN64)
    /* Ditto for `InterlockeExchangedAdd`. */
    InterlockedExchangeAdd64(ptr, val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx))
    /* Ditto for `atomic_add_int_nv`. */
    RBIMPL_ASSERT_OR_ASSUME(val <= LONG_MAX);
    atomic_add_long(ptr, val);

#else
    RBIMPL_STATIC_ASSERT(size_of_rb_atomic_t, sizeof *ptr == sizeof(rb_atomic_t));

    volatile rb_atomic_t *const tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr);
    rbimpl_atomic_add(tmp, val);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_inc(volatile rb_atomic_t *ptr)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS)
    rbimpl_atomic_add(ptr, 1);

#elif defined(_WIN32)
    InterlockedIncrement(ptr);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    atomic_inc_uint(ptr);

#else
    rbimpl_atomic_add(ptr, 1);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_size_inc(volatile size_t *ptr)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS)
    rbimpl_atomic_size_add(ptr, 1);

#elif defined(_WIN64)
    InterlockedIncrement64(ptr);

#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx))
    atomic_inc_ulong(ptr);

#else
    RBIMPL_STATIC_ASSERT(size_of_size_t, sizeof *ptr == sizeof(rb_atomic_t));

    rbimpl_atomic_size_add(ptr, 1);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline rb_atomic_t
rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    return __atomic_fetch_sub(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    return __sync_fetch_and_sub(ptr, val);

#elif defined(_WIN32)
    /* rb_atomic_t is signed here! Safe to do `-val`. */
    return InterlockedExchangeAdd(ptr, -val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    /* Ditto for `rbimpl_atomic_fetch_add`. */
    const signed neg = -1;
    RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX);
    return atomic_add_int_nv(ptr, neg * val) + val;

#else
# error Unsupported platform.
#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    __atomic_sub_fetch(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    __sync_sub_and_fetch(ptr, val);

#elif defined(_WIN32)
    InterlockedExchangeAdd(ptr, -val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    const signed neg = -1;
    RBIMPL_ASSERT_OR_ASSUME(val <= INT_MAX);
    atomic_add_int(ptr, neg * val);

#else
# error Unsupported platform.
#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    __atomic_sub_fetch(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    __sync_sub_and_fetch(ptr, val);

#elif defined(_WIN64)
    const ssize_t neg = -1;
    InterlockedExchangeAdd64(ptr, neg * val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx))
    const signed neg = -1;
    RBIMPL_ASSERT_OR_ASSUME(val <= LONG_MAX);
    atomic_add_long(ptr, neg * val);

#else
    RBIMPL_STATIC_ASSERT(size_of_rb_atomic_t, sizeof *ptr == sizeof(rb_atomic_t));

    volatile rb_atomic_t *const tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr);
    rbimpl_atomic_sub(tmp, val);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_dec(volatile rb_atomic_t *ptr)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS)
    rbimpl_atomic_sub(ptr, 1);

#elif defined(_WIN32)
    InterlockedDecrement(ptr);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    atomic_dec_uint(ptr);

#else
    rbimpl_atomic_sub(ptr, 1);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_size_dec(volatile size_t *ptr)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_SYNC_BUILTINS)
    rbimpl_atomic_size_sub(ptr, 1);

#elif defined(_WIN64)
    InterlockedDecrement64(ptr);

#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx))
    atomic_dec_ulong(ptr);

#else
    RBIMPL_STATIC_ASSERT(size_of_size_t, sizeof *ptr == sizeof(rb_atomic_t));

    rbimpl_atomic_size_sub(ptr, 1);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    __atomic_or_fetch(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    __sync_or_and_fetch(ptr, val);

#elif RBIMPL_COMPILER_SINCE(MSVC, 13, 0, 0)
    _InterlockedOr(ptr, val);

#elif defined(_WIN32) && defined(__GNUC__)
    /* This was for old MinGW.  Maybe not needed any longer? */
    __asm__(
        "lock\n\t"
        "orl\t%1, %0"
        : "=m"(ptr)
        : "Ir"(val));

#elif defined(_WIN32) && defined(_M_IX86)
    __asm mov eax, ptr;
    __asm mov ecx, val;
    __asm lock or [eax], ecx;

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    atomic_or_uint(ptr, val);

#else
# error Unsupported platform.
#endif
}

/* Nobody uses this but for theoretical backwards compatibility... */
#if RBIMPL_COMPILER_BEFORE(MSVC, 13, 0, 0)
static inline rb_atomic_t
rb_w32_atomic_or(volatile rb_atomic_t *var, rb_atomic_t val)
{
    return rbimpl_atomic_or(var, val);
}
#endif

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline rb_atomic_t
rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    return __atomic_exchange_n(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    return __sync_lock_test_and_set(ptr, val);

#elif defined(_WIN32)
    return InterlockedExchange(ptr, val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    return atomic_swap_uint(ptr, val);

#else
# error Unsupported platform.
#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline size_t
rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    return __atomic_exchange_n(ptr, val, __ATOMIC_SEQ_CST);

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    return __sync_lock_test_and_set(ptr, val);

#elif defined(_WIN64)
    return InterlockedExchange64(ptr, val);

#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx))
    return atomic_swap_ulong(ptr, val);

#else
    RBIMPL_STATIC_ASSERT(size_of_size_t, sizeof *ptr == sizeof(rb_atomic_t));

    volatile rb_atomic_t *const tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr);
    const rb_atomic_t ret = rbimpl_atomic_exchange(tmp, val);
    return RBIMPL_CAST((size_t)ret);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void *
rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val)
{
#if 0

#elif defined(InterlockedExchangePointer)
    /* const_cast */
    PVOID *pptr = RBIMPL_CAST((PVOID *)ptr);
    PVOID pval = RBIMPL_CAST((PVOID)val);
    return InterlockedExchangePointer(pptr, pval);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    return atomic_swap_ptr(ptr, RBIMPL_CAST((void *)val));

#else
    RBIMPL_STATIC_ASSERT(sizeof_voidp, sizeof *ptr == sizeof(size_t));

    const size_t sval = RBIMPL_CAST((size_t)val);
    volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr);
    const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
    return RBIMPL_CAST((void *)sret);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline VALUE
rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val)
{
    RBIMPL_STATIC_ASSERT(sizeof_value, sizeof *ptr == sizeof(size_t));

    const size_t sval = RBIMPL_CAST((size_t)val);
    volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr);
    const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
    return RBIMPL_CAST((VALUE)sret);
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline rb_atomic_t
rbimpl_atomic_load(volatile rb_atomic_t *ptr)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    return __atomic_load_n(ptr, __ATOMIC_SEQ_CST);
#else
    return rbimpl_atomic_fetch_add(ptr, 0);
#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void
rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    __atomic_store_n(ptr, val, __ATOMIC_SEQ_CST);

#else
    /* Maybe std::atomic<rb_atomic_t>::store can be faster? */
    rbimpl_atomic_exchange(ptr, val);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline rb_atomic_t
rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    __atomic_compare_exchange_n(
        ptr, &oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
    return oldval;

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    return __sync_val_compare_and_swap(ptr, oldval, newval);

#elif RBIMPL_COMPILER_SINCE(MSVC, 13, 0, 0)
    return InterlockedCompareExchange(ptr, newval, oldval);

#elif defined(_WIN32)
    PVOID *pptr = RBIMPL_CAST((PVOID *)ptr);
    PVOID pold = RBIMPL_CAST((PVOID)oldval);
    PVOID pnew = RBIMPL_CAST((PVOID)newval);
    PVOID pret = InterlockedCompareExchange(pptr, pnew, pold);
    return RBIMPL_CAST((rb_atomic_t)pret);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    return atomic_cas_uint(ptr, oldval, newval);

#else
# error Unsupported platform.
#endif
}

/* Nobody uses this but for theoretical backwards compatibility... */
#if RBIMPL_COMPILER_BEFORE(MSVC, 13, 0, 0)
static inline rb_atomic_t
rb_w32_atomic_cas(volatile rb_atomic_t *var, rb_atomic_t oldval, rb_atomic_t newval)
{
    return rbimpl_atomic_cas(var, oldval, newval);
}
#endif

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline size_t
rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    __atomic_compare_exchange_n(
        ptr, &oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
    return oldval;

#elif defined(HAVE_GCC_SYNC_BUILTINS)
    return __sync_val_compare_and_swap(ptr, oldval, newval);

#elif defined(_WIN64)
    return InterlockedCompareExchange64(ptr, newval, oldval);

#elif defined(__sun) && defined(HAVE_ATOMIC_H) && (defined(_LP64) || defined(_I32LPx))
    return atomic_cas_ulong(ptr, oldval, newval);

#else
    RBIMPL_STATIC_ASSERT(size_of_size_t, sizeof *ptr == sizeof(rb_atomic_t));

    volatile rb_atomic_t *tmp = RBIMPL_CAST((volatile rb_atomic_t *)ptr);
    return rbimpl_atomic_cas(tmp, oldval, newval);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void *
rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval)
{
#if 0

#elif defined(InterlockedExchangePointer)
    /* ... Can we say that InterlockedCompareExchangePtr surly exists when
     * InterlockedExchangePointer is defined?  Seems so but...?*/
    PVOID *pptr = RBIMPL_CAST((PVOID *)ptr);
    PVOID pold = RBIMPL_CAST((PVOID)oldval);
    PVOID pnew = RBIMPL_CAST((PVOID)newval);
    return InterlockedCompareExchangePointer(pptr, pnew, pold);

#elif defined(__sun) && defined(HAVE_ATOMIC_H)
    void *pold = RBIMPL_CAST((void *)oldval);
    void *pnew = RBIMPL_CAST((void *)newval);
    return atomic_cas_ptr(ptr, pold, pnew);


#else
    RBIMPL_STATIC_ASSERT(sizeof_voidp, sizeof *ptr == sizeof(size_t));

    const size_t snew = RBIMPL_CAST((size_t)newval);
    const size_t sold = RBIMPL_CAST((size_t)oldval);
    volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr);
    const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
    return RBIMPL_CAST((void *)sret);

#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline void *
rbimpl_atomic_ptr_load(void **ptr)
{
#if 0

#elif defined(HAVE_GCC_ATOMIC_BUILTINS)
    return __atomic_load_n(ptr, __ATOMIC_SEQ_CST);
#else
    void *val = *ptr;
    return rbimpl_atomic_ptr_cas(ptr, val, val);
#endif
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
static inline VALUE
rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval)
{
    RBIMPL_STATIC_ASSERT(sizeof_value, sizeof *ptr == sizeof(size_t));

    const size_t snew = RBIMPL_CAST((size_t)newval);
    const size_t sold = RBIMPL_CAST((size_t)oldval);
    volatile size_t *const sptr = RBIMPL_CAST((volatile size_t *)ptr);
    const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
    return RBIMPL_CAST((VALUE)sret);
}
/** @endcond */
#endif /* RUBY_ATOMIC_H */
PK*J[G�o��include/ruby/st.hnu�[���/* This is a public domain general purpose hash table package
   originally written by Peter Moore @ UCB.

   The hash table data structures were redesigned and the package was
   rewritten by Vladimir Makarov <vmakarov@redhat.com>.  */

#ifndef RUBY_ST_H
#define RUBY_ST_H 1

#if defined(__cplusplus)
extern "C" {
#if 0
} /* satisfy cc-mode */
#endif
#endif

#include "ruby/defines.h"

RUBY_SYMBOL_EXPORT_BEGIN

#if SIZEOF_LONG == SIZEOF_VOIDP
typedef unsigned long st_data_t;
#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
typedef unsigned LONG_LONG st_data_t;
#else
# error ---->> st.c requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<----
#endif
#define ST_DATA_T_DEFINED

#ifndef CHAR_BIT
# ifdef HAVE_LIMITS_H
#  include <limits.h>
# else
#  define CHAR_BIT 8
# endif
#endif
#ifndef _
# define _(args) args
#endif
#ifndef ANYARGS
# ifdef __cplusplus
#   define ANYARGS ...
# else
#   define ANYARGS
# endif
#endif

typedef struct st_table st_table;

typedef st_data_t st_index_t;

/* Maximal value of unsigned integer type st_index_t.  */
#define MAX_ST_INDEX_VAL (~(st_index_t) 0)

typedef int st_compare_func(st_data_t, st_data_t);
typedef st_index_t st_hash_func(st_data_t);

typedef char st_check_for_sizeof_st_index_t[SIZEOF_VOIDP == (int)sizeof(st_index_t) ? 1 : -1];
#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP

struct st_hash_type {
    int (*compare)(st_data_t, st_data_t); /* st_compare_func* */
    st_index_t (*hash)(st_data_t);        /* st_hash_func* */
};

#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)

#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR) && defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P)
# define ST_DATA_COMPATIBLE_P(type) \
   __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
#else
# define ST_DATA_COMPATIBLE_P(type) 0
#endif

typedef struct st_table_entry st_table_entry;

struct st_table_entry; /* defined in st.c */

struct st_table {
    /* Cached features of the table -- see st.c for more details.  */
    unsigned char entry_power, bin_power, size_ind;
    /* How many times the table was rebuilt.  */
    unsigned int rebuilds_num;
    const struct st_hash_type *type;
    /* Number of entries currently in the table.  */
    st_index_t num_entries;
    /* Array of bins used for access by keys.  */
    st_index_t *bins;
    /* Start and bound index of entries in array entries.
       entries_starts and entries_bound are in interval
       [0,allocated_entries].  */
    st_index_t entries_start, entries_bound;
    /* Array of size 2^entry_power.  */
    st_table_entry *entries;
};

#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)

enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE};

size_t rb_st_table_size(const struct st_table *tbl);
#define st_table_size rb_st_table_size
st_table *rb_st_init_table(const struct st_hash_type *);
#define st_init_table rb_st_init_table
st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t);
#define st_init_table_with_size rb_st_init_table_with_size
st_table *rb_st_init_numtable(void);
#define st_init_numtable rb_st_init_numtable
st_table *rb_st_init_numtable_with_size(st_index_t);
#define st_init_numtable_with_size rb_st_init_numtable_with_size
st_table *rb_st_init_strtable(void);
#define st_init_strtable rb_st_init_strtable
st_table *rb_st_init_strtable_with_size(st_index_t);
#define st_init_strtable_with_size rb_st_init_strtable_with_size
st_table *rb_st_init_strcasetable(void);
#define st_init_strcasetable rb_st_init_strcasetable
st_table *rb_st_init_strcasetable_with_size(st_index_t);
#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size
int rb_st_delete(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */
#define st_delete rb_st_delete
int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
#define st_delete_safe rb_st_delete_safe
int rb_st_shift(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */
#define st_shift rb_st_shift
int rb_st_insert(st_table *, st_data_t, st_data_t);
#define st_insert rb_st_insert
int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
#define st_insert2 rb_st_insert2
int rb_st_lookup(st_table *, st_data_t, st_data_t *);
#define st_lookup rb_st_lookup
int rb_st_get_key(st_table *, st_data_t, st_data_t *);
#define st_get_key rb_st_get_key
typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
/* *key may be altered, but must equal to the old key, i.e., the
 * results of hash() are same and compare() returns 0, otherwise the
 * behavior is undefined */
int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
#define st_update rb_st_update
typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t);
typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int);
int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
#define st_foreach_with_replace rb_st_foreach_with_replace
int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t);
#define st_foreach rb_st_foreach
int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t);
#define st_foreach_check rb_st_foreach_check
st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size);
#define st_keys rb_st_keys
st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
#define st_keys_check rb_st_keys_check
st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size);
#define st_values rb_st_values
st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
#define st_values_check rb_st_values_check
void rb_st_add_direct(st_table *, st_data_t, st_data_t);
#define st_add_direct rb_st_add_direct
void rb_st_free_table(st_table *);
#define st_free_table rb_st_free_table
void rb_st_cleanup_safe(st_table *, st_data_t);
#define st_cleanup_safe rb_st_cleanup_safe
void rb_st_clear(st_table *);
#define st_clear rb_st_clear
st_table *rb_st_copy(st_table *);
#define st_copy rb_st_copy
CONSTFUNC(int rb_st_numcmp(st_data_t, st_data_t));
#define st_numcmp rb_st_numcmp
CONSTFUNC(st_index_t rb_st_numhash(st_data_t));
#define st_numhash rb_st_numhash
PUREFUNC(int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2));
#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp
PUREFUNC(int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n));
#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp
#define st_strcasecmp rb_st_locale_insensitive_strcasecmp
#define st_strncasecmp rb_st_locale_insensitive_strncasecmp
PUREFUNC(size_t rb_st_memsize(const st_table *));
#define st_memsize rb_st_memsize
PUREFUNC(st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h));
#define st_hash rb_st_hash
CONSTFUNC(st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i));
#define st_hash_uint32 rb_st_hash_uint32
CONSTFUNC(st_index_t rb_st_hash_uint(st_index_t h, st_index_t i));
#define st_hash_uint rb_st_hash_uint
CONSTFUNC(st_index_t rb_st_hash_end(st_index_t h));
#define st_hash_end rb_st_hash_end
CONSTFUNC(st_index_t rb_st_hash_start(st_index_t h));
#define st_hash_start(h) ((st_index_t)(h))

void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE);

RUBY_SYMBOL_EXPORT_END

#if defined(__cplusplus)
#if 0
{ /* satisfy cc-mode */
#endif
}  /* extern "C" { */
#endif

#endif /* RUBY_ST_H */
PK*J[QS=��include/ruby/missing.hnu�[���#ifndef RUBY_MISSING_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_MISSING_H 1
/**
 * @author     $Author$
 * @date       Sat May 11 23:46:03 JST 2002
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @brief      Prototype for *.c in ./missing, and for missing timeval struct.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#if defined(__cplusplus)
# include <cmath>
#else
# include <math.h> /* for INFINITY and NAN */
#endif

#ifdef RUBY_ALTERNATIVE_MALLOC_HEADER
# include RUBY_ALTERNATIVE_MALLOC_HEADER
#endif

#if defined(HAVE_TIME_H)
# include <time.h>
#endif

#if defined(HAVE_SYS_TIME_H)
# include <sys/time.h>
#endif

#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif

#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif

#ifdef HAVE_STDIO_H
# include <stdio.h>
#endif

#ifdef HAVE_IEEEFP_H
# include <ieeefp.h>
#endif

#include "ruby/internal/dllexport.h"
#include "ruby/internal/attr/format.h"

#ifndef M_PI
# define M_PI 3.14159265358979323846
#endif
#ifndef M_PI_2
# define M_PI_2 (M_PI/2)
#endif

#if !defined(HAVE_STRUCT_TIMEVAL)
struct timeval {
    time_t tv_sec;	/* seconds */
    long tv_usec;	/* microseconds */
};
#endif /* HAVE_STRUCT_TIMEVAL */

#if !defined(HAVE_STRUCT_TIMESPEC)
/* :BEWARE: @shyouhei warns that  IT IS A WRONG IDEA to  define our own version
 * of struct timespec here.  `clock_gettime` is  a system call, and your kernel
 * could expect  something other  than just `long`  (results stack  smashing if
 * that happens).  See also https://ewontfix.com/19/ */
struct timespec {
    time_t tv_sec;	/* seconds */
    long tv_nsec;	/* nanoseconds */
};
#endif

#if !defined(HAVE_STRUCT_TIMEZONE)
struct timezone {
    int tz_minuteswest;
    int tz_dsttime;
};
#endif

RBIMPL_SYMBOL_EXPORT_BEGIN()

#ifndef HAVE_ACOSH
RUBY_EXTERN double acosh(double);
RUBY_EXTERN double asinh(double);
RUBY_EXTERN double atanh(double);
#endif

#ifndef HAVE_CRYPT
RUBY_EXTERN char *crypt(const char *, const char *);
#endif

#ifndef HAVE_EACCESS
RUBY_EXTERN int eaccess(const char*, int);
#endif

#ifndef HAVE_ROUND
RUBY_EXTERN double round(double);	/* numeric.c */
#endif

#ifndef HAVE_FLOCK
RUBY_EXTERN int flock(int, int);
#endif

/*
#ifndef HAVE_FREXP
RUBY_EXTERN double frexp(double, int *);
#endif
*/

#ifndef HAVE_HYPOT
RUBY_EXTERN double hypot(double, double);
#endif

#ifndef HAVE_ERF
RUBY_EXTERN double erf(double);
RUBY_EXTERN double erfc(double);
#endif

#ifndef HAVE_TGAMMA
RUBY_EXTERN double tgamma(double);
#endif

#ifndef HAVE_LGAMMA_R
RUBY_EXTERN double lgamma_r(double, int *);
#endif

#ifndef HAVE_CBRT
RUBY_EXTERN double cbrt(double);
#endif

#if !defined(INFINITY) || !defined(NAN)
union bytesequence4_or_float {
  unsigned char bytesequence[4];
  float float_value;
};
#endif

#ifndef INFINITY
/** @internal */
RUBY_EXTERN const union bytesequence4_or_float rb_infinity;
# define INFINITY (rb_infinity.float_value)
# define USE_RB_INFINITY 1
#endif

#ifndef NAN
/** @internal */
RUBY_EXTERN const union bytesequence4_or_float rb_nan;
# define NAN (rb_nan.float_value)
# define USE_RB_NAN 1
#endif

#ifndef HUGE_VAL
# define HUGE_VAL ((double)INFINITY)
#endif

#ifndef HAVE_FINITE
# define HAVE_FINITE 1
# define finite(x) isfinite(x)
#endif

#ifndef HAVE_NAN
RUBY_EXTERN double nan(const char *);
#endif

#ifndef HAVE_NEXTAFTER
RUBY_EXTERN double nextafter(double x, double y);
#endif

/*
#ifndef HAVE_MEMCMP
RUBY_EXTERN int memcmp(const void *, const void *, size_t);
#endif
*/

#ifndef HAVE_MEMMOVE
RUBY_EXTERN void *memmove(void *, const void *, size_t);
#endif

/*
#ifndef HAVE_MODF
RUBY_EXTERN double modf(double, double *);
#endif
*/

#ifndef HAVE_STRCHR
RUBY_EXTERN char *strchr(const char *, int);
RUBY_EXTERN char *strrchr(const char *, int);
#endif

#ifndef HAVE_STRERROR
RUBY_EXTERN char *strerror(int);
#endif

#ifndef HAVE_STRSTR
RUBY_EXTERN char *strstr(const char *, const char *);
#endif

#ifndef HAVE_STRLCPY
RUBY_EXTERN size_t strlcpy(char *, const char*, size_t);
#endif

#ifndef HAVE_STRLCAT
RUBY_EXTERN size_t strlcat(char *, const char*, size_t);
#endif

#ifndef HAVE_FFS
RUBY_EXTERN int ffs(int);
#endif

#ifdef BROKEN_CLOSE
# include <sys/types.h>
# include <sys/socket.h>
RUBY_EXTERN int ruby_getpeername(int, struct sockaddr *, socklen_t *);
RUBY_EXTERN int ruby_getsockname(int, struct sockaddr *, socklen_t *);
RUBY_EXTERN int ruby_shutdown(int, int);
RUBY_EXTERN int ruby_close(int);
#endif

#ifndef HAVE_SETPROCTITLE
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
RUBY_EXTERN void setproctitle(const char *fmt, ...);
#endif

#ifdef HAVE_EXPLICIT_BZERO
# /* Take that. */
#elif defined(SecureZeroMemory)
# define explicit_bzero(b, len) SecureZeroMemory(b, len)
#else
RUBY_EXTERN void explicit_bzero(void *b, size_t len);
#endif

#ifndef HAVE_TZSET
RUBY_EXTERN void tzset(void);
#endif

#ifndef HAVE_POSIX_MADVISE
RUBY_EXTERN int posix_madvise(void *, size_t, int);
#endif

#ifndef HAVE_GETEUID
RUBY_EXTERN rb_uid_t geteuid(void);
#endif

#ifndef HAVE_GETUID
RUBY_EXTERN rb_uid_t getuid(void);
#endif

#ifndef HAVE_GETEGID
RUBY_EXTERN rb_gid_t getegid(void);
#endif

#ifndef HAVE_GETGID
RUBY_EXTERN rb_gid_t getgid(void);
#endif

#ifndef HAVE_GETLOGIN
RUBY_EXTERN char *getlogin(void);
#endif

#ifndef HAVE_GETPPID
RUBY_EXTERN rb_pid_t getppid(void);
#endif

#ifndef HAVE_UMASK
RUBY_EXTERN rb_mode_t umask(rb_mode_t);
#endif

#ifndef HAVE_CHMOD
RUBY_EXTERN int chmod(const char *, rb_mode_t);
#endif

#ifndef HAVE_CHOWN
RUBY_EXTERN int chown(const char *, rb_uid_t, rb_gid_t);
#endif

#ifndef HAVE_PCLOSE
RUBY_EXTERN int pclose(FILE *);
#endif

#ifndef HAVE_POPEN
RUBY_EXTERN FILE *popen(const char *, const char *);
#endif

#ifndef HAVE_PIPE
RUBY_EXTERN int pipe(int [2]);
#endif

#ifndef HAVE_DUP
RUBY_EXTERN int dup(int);
#endif

#ifndef HAVE_DUP2
RUBY_EXTERN int dup2(int, int);
#endif

#ifndef HAVE_KILL
RUBY_EXTERN int kill(rb_pid_t, int);
#endif

#ifndef HAVE_EXECL
RUBY_EXTERN int execl(const char *, const char *, ...);
#endif

#ifndef HAVE_EXECLE
RUBY_EXTERN int execle(const char *, const char *, ...);
#endif

#ifndef HAVE_EXECV
RUBY_EXTERN int execv(const char *, char *const []);
#endif

#ifndef HAVE_EXECVE
RUBY_EXTERN int execve(const char *, char *const [], char *const []);
#endif

#ifndef HAVE_SHUTDOWN
RUBY_EXTERN int shutdown(int, int);
#endif

#ifndef HAVE_SYSTEM
RUBY_EXTERN int system(const char *);
#endif

#ifndef WNOHANG
# define WNOHANG 0
#endif

#ifndef HAVE_WAITPID
# define HAVE_WAITPID 1
RUBY_EXTERN rb_pid_t waitpid(rb_pid_t, int *, int);
#endif

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_MISSING_H */
PK*J[�1�:�:include/ruby/ruby.hnu�[���#ifndef RUBY_RUBY_H                                  /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_RUBY_H 1
/**
 * @file
 * @author     $Author$
 * @date       Thu Jun 10 14:26:32 JST 1993
 * @copyright  Copyright (C) 1993-2008 Yukihiro Matsumoto
 * @copyright  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.
 * @copyright  Copyright (C) 2000  Information-technology Promotion Agency, Japan
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "ruby/internal/config.h"

/* @shyouhei  doesn't  understand  why  we need  <intrinsics.h>  at  this  very
 * beginning of the entire <ruby.h> circus. */
#ifdef HAVE_INTRINSICS_H
# include <intrinsics.h>
#endif

#include <stdarg.h>

#include "defines.h"
#include "ruby/internal/abi.h"
#include "ruby/internal/anyargs.h"
#include "ruby/internal/arithmetic.h"
#include "ruby/internal/core.h"
#include "ruby/internal/ctype.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/error.h"
#include "ruby/internal/eval.h"
#include "ruby/internal/event.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/gc.h"
#include "ruby/internal/glob.h"
#include "ruby/internal/globals.h"
#include "ruby/internal/has/warning.h"
#include "ruby/internal/interpreter.h"
#include "ruby/internal/iterator.h"
#include "ruby/internal/memory.h"
#include "ruby/internal/method.h"
#include "ruby/internal/module.h"
#include "ruby/internal/newobj.h"
#include "ruby/internal/scan_args.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/symbol.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/internal/variable.h"
#include "ruby/assert.h"
#include "ruby/backward/2/assume.h"
#include "ruby/backward/2/inttypes.h"
#include "ruby/backward/2/limits.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* Module#methods, #singleton_methods and so on return Symbols */
/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define USE_SYMBOL_AS_METHOD_NAME 1

/**
 * Converts an object to a path.  It first tries `#to_path` method if any, then
 * falls back to `#to_str` method.
 *
 * @param[in]  obj                 Arbitrary ruby object.
 * @exception  rb_eArgError        `obj` contains a NUL byte.
 * @exception  rb_eTypeError       `obj` is not path-ish.
 * @exception  rb_eEncCompatError  No encoding conversion from `obj` to path.
 * @return     Converted path object.
 */
VALUE rb_get_path(VALUE obj);

/**
 * Ensures that the parameter object is a path.
 *
 * @param[in,out]  v                   Arbitrary ruby object.
 * @exception      rb_eArgError        `v` contains a NUL byte.
 * @exception      rb_eTypeError       `v` is not path-ish.
 * @exception      rb_eEncCompatError  `v` is not path-compatible.
 * @post           `v` is a path.
 */
#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))

/**
 * @deprecated  This function is an alias  of rb_get_path() now.  The part that
 *              did "no_checksafe" was deleted.  It  remains here because of no
 *              harm.
 */
VALUE rb_get_path_no_checksafe(VALUE);

/**
 * This macro actually does the same  thing as #FilePathValue now.  The "String"
 * part indicates  that this is  for when a string  is treated like  a pathname,
 * rather  than  the  actual  pathname  on  the  file  systems.   For  examples:
 * `Dir.fnmatch?`, `File.join`, `File.basename`, etc.
 */
#define FilePathStringValue(v) ((v) = rb_get_path(v))

/** @cond INTERNAL_MACRO */
#if defined(HAVE_BUILTIN___BUILTIN_CONSTANT_P) && defined(HAVE_STMT_AND_DECL_IN_EXPR)
# define rb_varargs_argc_check_runtime(argc, vargc) \
    (((argc) <= (vargc)) ? (argc) : \
     (rb_fatal("argc(%d) exceeds actual arguments(%d)", \
               argc, vargc), 0))
# define rb_varargs_argc_valid_p(argc, vargc) \
    ((argc) == 0 ? (vargc) <= 1 : /* [ruby-core:85266] [Bug #14425] */ \
     (argc) == (vargc))
# if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
#   ifdef HAVE_ATTRIBUTE_ERRORFUNC
ERRORFUNC((" argument length doesn't match"), int rb_varargs_bad_length(int,int));
#   else
#     define rb_varargs_bad_length(argc, vargc) \
        ((argc)/rb_varargs_argc_valid_p(argc, vargc))
#   endif
#   define rb_varargs_argc_check(argc, vargc) \
    __builtin_choose_expr(__builtin_constant_p(argc), \
        (rb_varargs_argc_valid_p(argc, vargc) ? (argc) : \
         rb_varargs_bad_length(argc, vargc)), \
        rb_varargs_argc_check_runtime(argc, vargc))
# else
#   define rb_varargs_argc_check(argc, vargc) \
        rb_varargs_argc_check_runtime(argc, vargc)
# endif
#endif
/** @endcond */

/**
 * Queries the name of the passed class.
 *
 * @param[in]  klass  An instance of a class.
 * @return     The name of `klass`.
 * @note       Return value is managed by our GC.  Don't free.
 */
const char *rb_class2name(VALUE klass);

/**
 * Queries the name of the class of the passed object.
 *
 * @param[in]  obj  Arbitrary ruby object.
 * @return     The name of the class of `obj`.
 * @note       Return value is managed by our GC.  Don't free.
 */
const char *rb_obj_classname(VALUE obj);

/**
 * Inspects an object.   It first calls the argument's  `#inspect` method, then
 * feeds its result string into ::rb_stdout.
 *
 * This is identical to Ruby level `Kernel#p`, except it takes only one object.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
void rb_p(VALUE obj);

/**
 * This function is an optimised version  of calling `#==`.  It checks equality
 * between two  objects by first  doing a fast  identity check using  using C's
 * `==` (same  as `BasicObject#equal?`).  If  that check fails, it  calls `#==`
 * dynamically.   This optimisation  actually affects  semantics, because  when
 * `#==`  returns false  for the  same object  obj, `rb_equal(obj,  obj)` would
 * still  return true.   This happens  for `Float::NAN`,  where `Float::NAN  ==
 * Float::NAN` is `false`, but `rb_equal(Float::NAN, Float::NAN)` is `true`.
 *
 * @param[in]  lhs          Comparison LHS.
 * @param[in]  rhs          Comparison RHS.
 * @retval     RUBY_Qtrue   They are the same.
 * @retval     RUBY_Qfalse  They are different.
 */
VALUE rb_equal(VALUE lhs, VALUE rhs);

/**
 * Identical  to rb_require_string(),  except it  takes C's  string instead  of
 * Ruby's.
 *
 * @param[in]  feature           Name of a feature, e.g. `"json"`.
 * @exception  rb_eLoadError     No such feature.
 * @exception  rb_eRuntimeError  `$"` is frozen; unable to push.
 * @retval     RUBY_Qtrue        The feature is loaded for the first time.
 * @retval     RUBY_Qfalse       The feature has already been loaded.
 * @post       `$"` is updated.
 */
VALUE rb_require(const char *feature);

#include "ruby/intern.h"

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RUBY_VM 1 /* YARV */

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define HAVE_NATIVETHREAD

/**
 * Queries  if  the thread  which  calls  this  function  is a  ruby's  thread.
 * "Ruby's" in  this context  is a thread  created using one  of our  APIs like
 * rb_thread_create().   There  are  distinctions   between  ruby's  and  other
 * threads.  For instance calling ruby methods  are allowed only from inside of
 * a ruby's thread.
 *
 * @retval  1  The current thread is a Ruby's thread.
 * @retval  0  The current thread is a random thread from outside of Ruby.
 */
int ruby_native_thread_p(void);

/**
 * @private
 *
 * This macro is for internal use.  Must be a mistake to place here.
 */
#define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();}

RBIMPL_ATTR_NONNULL((3))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4)
/**
 * Our own locale-insensitive version of `snprintf(3)`.  It can also be seen as
 * a routine  identical to rb_sprintf(),  except it  writes back to  the passed
 * buffer instead of allocating a new Ruby object.
 *
 * @param[out]  str  Return buffer
 * @param[in]   n    Number of bytes of `str`.
 * @param[in]   fmt  A `printf`-like format specifier.
 * @param[in]   ...  Variadic number of contents to format.
 * @return      Number of bytes  that would have been written to  `str`, if `n`
 *              was large enough.  Comparing this  to `n` can give you insights
 *              that the buffer is too small  or too big.  Especially passing 0
 *              to `n`  gives you the exact  number of bytes necessary  to hold
 *              the result string without writing anything to anywhere.
 * @post        `str` holds  up to `n-1`  bytes of formatted contents  (and the
 *              terminating NUL character.)
 */
int ruby_snprintf(char *str, size_t n, char const *fmt, ...);

RBIMPL_ATTR_NONNULL((3))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 0)
/**
 * Identical to ruby_snprintf(),  except it takes a `va_list`.  It  can also be
 * seen as a  routine identical to rb_vsprintf(), except it  writes back to the
 * passed buffer instead of allocating a new Ruby object.
 *
 * @param[out]  str  Return buffer
 * @param[in]   n    Number of bytes of `str`.
 * @param[in]   fmt  A `printf`-like format specifier.
 * @param[in]   ap   Contents  to format.
 * @return      Number of bytes  that would have been written to  `str`, if `n`
 *              was large enough.  Comparing this  to `n` can give you insights
 *              that the buffer is too small  or too big.  Especially passing 0
 *              to `n`  gives you the exact  number of bytes necessary  to hold
 *              the result string without writing anything to anywhere.
 * @post        `str` holds  up to `n-1`  bytes of formatted contents  (and the
 *              terminating NUL character.)
 */
int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);

#include <errno.h>

/**
 * @name  Errno handling routines for userland threads
 * @note  POSIX chapter 2 section 3 states  that for each thread  of a process,
 *        the  value of  `errno` shall  not be  affected by  function calls  or
 *        assignments to `errno` by other threads.
 *
 * Soooo this `#define  errno` below seems like a noob  mistake at first sight.
 * If you look at its actual  implementation, the functions are just adding one
 * level of indirection.  It doesn't make any sense sorry?  But yes!  @ko1 told
 * @shyouhei that this is inevitable.
 *
 * The  ultimate  reason is  because  Ruby  now  has N:M  threads  implemented.
 * Threads of that sort  change their context in user land.   A function can be
 * "transferred" between  threads in  middle of their  executions.  Let  us for
 * instance consider:
 *
 * ```cxx
 * void foo()
 * {
 *     auto i = errno;
 *     close(0);
 *     errno = i;
 * }
 * ```
 *
 * This function (if  ran under our Ractor) could change  its running thread at
 * the `close` function.  But the  two `errno` invocations are different!  Look
 * how the source code above is compiled by clang 17 with `-O3` flag @ Linux:
 *
 * ```
 * foo(int):                                # @foo(int)
 *         push    rbp
 *         push    r14
 *         push    rbx
 *         mov     ebx, edi
 *         call    __errno_location@PLT
 *         mov     r14, rax
 *         mov     ebp, dword ptr [rax]
 *         mov     edi, ebx
 *         call    close@PLT
 *         mov     dword ptr [r14], ebp
 *         pop     rbx
 *         pop     r14
 *         pop     rbp
 *         ret
 * ```
 *
 * Notice  how `__errno_location@PLT`  is  `call`-ed only  once.  The  compiler
 * assumes that the location of `errno` does not change during a function call.
 * Sadly this is  no longer true for us.  The  `close@PLT` now changes threads,
 * which should also change where `errno` is stored.
 *
 * With the `#define errno` below the compilation result changes to this:
 *
 * ```
 * foo(int):                                # @foo(int)
 *         push    rbp
 *         push    rbx
 *         push    rax
 *         mov     ebx, edi
 *         call    rb_errno_ptr()@PLT
 *         mov     ebp, dword ptr [rax]
 *         mov     edi, ebx
 *         call    close@PLT
 *         call    rb_errno_ptr()@PLT
 *         mov     dword ptr [rax], ebp
 *         add     rsp, 8
 *         pop     rbx
 *         pop     rbp
 *         ret
 * ```
 *
 * Which fixes the problem.
 */

/**
 * Identical to system `errno`.
 *
 * @return The last set `errno` number.
 */
int rb_errno(void);

/**
 * Set the errno.
 *
 * @param  err  New `errno`.
 * @post   `errno` is now set to `err`.
 */
void rb_errno_set(int err);

/**
 * The location of `errno`
 *
 * @return The (thread-specific) location of `errno`.
 */
int *rb_errno_ptr(void);

/**
 * Not sure if  it is necessary for  extension libraries but this  is where the
 * "bare" errno is located.
 *
 * @return The location of `errno`.
 */
static inline int *
rb_orig_errno_ptr(void)
{
    return &errno;
}

#define rb_orig_errno errno /**< System-provided original `errno`. */
#undef errno
#define errno (*rb_errno_ptr()) /**< Ractor-aware version of `errno`. */

/** @} */


/** @cond INTERNAL_MACRO */
#if RBIMPL_HAS_WARNING("-Wgnu-zero-variadic-macro-arguments")
# /* Skip it; clang -pedantic doesn't like the following */
#elif defined(__GNUC__) && defined(HAVE_VA_ARGS_MACRO) && defined(__OPTIMIZE__)
# define rb_yield_values(argc, ...) \
__extension__({ \
        const int rb_yield_values_argc = (argc); \
        const VALUE rb_yield_values_args[] = {__VA_ARGS__}; \
        const int rb_yield_values_nargs = \
            (int)(sizeof(rb_yield_values_args) / sizeof(VALUE)); \
        rb_yield_values2( \
            rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), \
            rb_yield_values_nargs ? rb_yield_values_args : NULL); \
    })

# define rb_funcall(recv, mid, argc, ...) \
__extension__({ \
        const int rb_funcall_argc = (argc); \
        const VALUE rb_funcall_args[] = {__VA_ARGS__}; \
        const int rb_funcall_nargs = \
            (int)(sizeof(rb_funcall_args) / sizeof(VALUE)); \
        rb_funcallv(recv, mid, \
            rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), \
            rb_funcall_nargs ? rb_funcall_args : NULL); \
    })
#endif
/** @endcond */

#ifndef RUBY_DONT_SUBST
#include "ruby/subst.h"
#endif

#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY
# include "ruby/backward.h"
#endif

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_RUBY_H */
PK*J[�}��A�Ainclude/ruby/fiber/scheduler.hnu�[���#ifndef RUBY_FIBER_SCHEDULER_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_FIBER_SCHEDULER_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @brief      Scheduler APIs.
 */
#include "ruby/internal/config.h"

#include <errno.h>

#ifdef STDC_HEADERS
#include <stddef.h> /* size_t */
#endif

#include "ruby/ruby.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/arithmetic.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

#define RUBY_FIBER_SCHEDULER_VERSION 2

struct timeval;

/**
 * Wrap a `ssize_t` and `int errno` into a single `VALUE`. This interface should
 * be used to safely capture results from system calls  like `read` and `write`.
 *
 * You should use `rb_fiber_scheduler_io_result_apply` to unpack the result of
 * this value and update `int errno`.
 *
 * You should not directly try to interpret the result value as it is considered
 * an opaque representation. However, the general representation is an integer
 * in the range of `[-int errno, size_t size]`. Linux generally restricts the
 * result of system calls like `read` and `write` to `<= 2^31` which means this
 * will typically fit within a single FIXNUM.
 *
 * @param[in]  result   The result of the system call.
 * @param[in]  error    The value of `errno`.
 * @return              A `VALUE` which contains the result and/or errno.
 */
static inline VALUE
rb_fiber_scheduler_io_result(ssize_t result, int error)
{
    if (result == -1) {
        return RB_INT2NUM(-error);
    }
    else {
        return RB_SIZE2NUM(result);
    }
}

/**
 * Apply an io result to the local thread, returning the value of the original
 * system call that created it and updating `int errno`.
 *
 * You should not directly try to interpret the result value as it is considered
 * an opaque representation.
 *
 * @param[in]  result   The `VALUE` which contains an errno and/or result size.
 * @post                Updates `int errno` with the value if negative.
 * @return              The original result of the system call.
 */
static inline ssize_t
rb_fiber_scheduler_io_result_apply(VALUE result)
{
    if (RB_FIXNUM_P(result) && RB_NUM2INT(result) < 0) {
        errno = -RB_NUM2INT(result);
        return -1;
    }
    else {
        return RB_NUM2SIZE(result);
    }
}

/**
 * Queries the  current scheduler of  the current  thread that is  calling this
 * function.
 *
 * @retval  RUBY_Qnil  No scheduler has  been set so far to  this thread (which
 *                     is the default).
 * @retval  otherwise  The scheduler that  was last set for  the current thread
 *                     with rb_fiber_scheduler_set().
 */
VALUE rb_fiber_scheduler_get(void);

/**
 * Destructively assigns  the passed  scheduler to that  of the  current thread
 * that is calling this function.  If the scheduler is set, non-blocking fibers
 * (created by `Fiber.new` with `blocking: false`, or by `Fiber.schedule`) call
 * that scheduler's  hook methods on  potentially blocking operations,  and the
 * current  thread  will  call  scheduler's  `#close`  method  on  finalisation
 * (allowing  the  scheduler  to  properly  manage  all  non-finished  fibers).
 * `scheduler`   can   be   an   object   of   any   class   corresponding   to
 * `Fiber::Scheduler` interface. Its implementation is up to the user.
 *
 * @param[in]  scheduler     The scheduler to set.
 * @exception  rb_eArgError  `scheduler` does not conform the interface.
 * @post       Current thread's scheduler is `scheduler`.
 */
VALUE rb_fiber_scheduler_set(VALUE scheduler);

/**
 * Identical to rb_fiber_scheduler_get(), except it also returns ::RUBY_Qnil in
 * case of a blocking fiber.  As blocking fibers do not participate schedulers'
 * scheduling this function can be handy.
 *
 * @retval  RUBY_Qnil  No scheduler is in effect.
 * @retval  otherwise  The scheduler that is in effect, if any.
 */
VALUE rb_fiber_scheduler_current(void);

/**
 * Identical to rb_fiber_scheduler_current(), except it queries for that of the
 * passed thread instead of the implicit current one.
 *
 * @param[in]  thread         Target thread.
 * @exception  rb_eTypeError  `thread` is not a thread.
 * @retval     RUBY_Qnil      No scheduler is in effect in `thread`.
 * @retval     otherwise      The scheduler that is in effect in `thread`.
 */
VALUE rb_fiber_scheduler_current_for_thread(VALUE thread);

/**
 * Converts the passed timeout to an expression that rb_fiber_scheduler_block()
 * etc. expects.
 *
 * @param[in]  timeout    A duration (can be `NULL`).
 * @retval     RUBY_Qnil  No timeout (blocks indefinitely).
 * @retval     otherwise  A timeout object.
 */
VALUE rb_fiber_scheduler_make_timeout(struct timeval *timeout);

/**
 * Closes the passed scheduler object.  This expects the scheduler to wait for
 * all fibers.  Thus the scheduler's main loop tends to start here.
 *
 * @param[in]  scheduler  Target scheduler.
 * @return     What `scheduler.close` returns.
 */
VALUE rb_fiber_scheduler_close(VALUE scheduler);

/**
 * Non-blocking  `sleep`.  Depending  on  scheduler  implementation,  this  for
 * instance switches to another fiber etc.
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  duration   Passed as-is to `scheduler.kernel_sleep`.
 * @return     What `scheduler.kernel_sleep` returns.
 */
VALUE rb_fiber_scheduler_kernel_sleep(VALUE scheduler, VALUE duration);

/**
 * Identical to rb_fiber_scheduler_kernel_sleep(), except  it can pass multiple
 * arguments.
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  argc       Number of objects of `argv`.
 * @param[in]  argv       Passed as-is to `scheduler.kernel_sleep`
 * @return     What `scheduler.kernel_sleep` returns.
 */
VALUE rb_fiber_scheduler_kernel_sleepv(VALUE scheduler, int argc, VALUE * argv);

/* Description TBW */
#if 0
VALUE rb_fiber_scheduler_timeout_after(VALUE scheduler, VALUE timeout, VALUE exception, VALUE message);
VALUE rb_fiber_scheduler_timeout_afterv(VALUE scheduler, int argc, VALUE * argv);
int rb_fiber_scheduler_supports_process_wait(VALUE scheduler);
#endif

/**
 * Non-blocking `waitpid`.  Depending  on  scheduler  implementation, this  for
 * instance switches to another fiber etc.
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  pid        Process ID to wait.
 * @param[in]  flags      Wait flags, e.g. `WUNTRACED`.
 * @return     What `scheduler.process_wait` returns.
 */
VALUE rb_fiber_scheduler_process_wait(VALUE scheduler, rb_pid_t pid, int flags);

/**
 * Non-blocking  wait  for  the  passed   "blocker",  which  is   for  instance
 * `Thread.join` or `Mutex.lock`.  Depending  on scheduler implementation, this
 * for instance switches to another fiber etc.
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  blocker    What blocks the current fiber.
 * @param[in]  timeout    Numeric timeout.
 * @return     What `scheduler.block` returns.
 */
VALUE rb_fiber_scheduler_block(VALUE scheduler, VALUE blocker, VALUE timeout);

/**
 * Wakes up a fiber previously blocked using rb_fiber_scheduler_block().
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  blocker    What was awaited for.
 * @param[in]  fiber      What to unblock.
 * @return     What `scheduler.unblock` returns.
 */
VALUE rb_fiber_scheduler_unblock(VALUE scheduler, VALUE blocker, VALUE fiber);

/**
 * Non-blocking version of rb_io_wait().  Depending on scheduler
 * implementation, this for instance switches to another fiber etc.
 *
 * The  "events" here  is a  Ruby level  integer, which  is an  OR-ed value  of
 * `IO::READABLE`, `IO::WRITABLE`, and `IO::PRIORITY`.
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  io         An io object to wait.
 * @param[in]  events     An integer set of interests.
 * @param[in]  timeout    Numeric timeout.
 * @return     What `scheduler.io_wait` returns.
 */
VALUE rb_fiber_scheduler_io_wait(VALUE scheduler, VALUE io, VALUE events, VALUE timeout);

/**
 * Non-blocking  wait until the passed  IO  is ready  for reading.   This is  a
 * special  case   of  rb_fiber_scheduler_io_wait(),  where  the   interest  is
 * `IO::READABLE` and timeout is never.
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  io         An io object to wait.
 * @return     What `scheduler.io_wait` returns.
 */
VALUE rb_fiber_scheduler_io_wait_readable(VALUE scheduler, VALUE io);

/**
 * Non-blocking  wait until  the passed  IO  is ready  for writing.   This is a
 * special  case   of  rb_fiber_scheduler_io_wait(),  where  the   interest  is
 * `IO::WRITABLE` and timeout is never.
 *
 * @param[in]  scheduler  Target scheduler.
 * @param[in]  io         An io object to wait.
 * @return     What `scheduler.io_wait` returns.
 */
VALUE rb_fiber_scheduler_io_wait_writable(VALUE scheduler, VALUE io);

/**
 * Non-blocking version of `IO.select`.
 *
 * It's possible that this will be emulated using a thread, so you should not
 * rely on it for high performance.
 *
 * @param[in]  scheduler    Target scheduler.
 * @param[in]  readables    An array of readable objects.
 * @param[in]  writables    An array of writable objects.
 * @param[in]  exceptables  An array of objects that might encounter exceptional conditions.
 * @param[in]  timeout      Numeric timeout or nil.
 * @return     What `scheduler.io_select` returns, normally a 3-tuple of arrays of ready objects.
 */
VALUE rb_fiber_scheduler_io_select(VALUE scheduler, VALUE readables, VALUE writables, VALUE exceptables, VALUE timeout);

/**
 * Non-blocking version of `IO.select`, `argv` variant.
 */
VALUE rb_fiber_scheduler_io_selectv(VALUE scheduler, int argc, VALUE *argv);

/**
 * Non-blocking read from the passed IO.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to read from.
 * @param[in]   buffer       The buffer to read to.
 * @param[in]   length       The minimum number of bytes to read.
 * @param[in]   offset       The offset in the buffer to read from.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_read`.
 * @return      otherwise    What `scheduler.io_read` returns `[-errno, size]`.
 */
VALUE rb_fiber_scheduler_io_read(VALUE scheduler, VALUE io, VALUE buffer, size_t length, size_t offset);

/**
 * Non-blocking write to the passed IO.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to write to.
 * @param[in]   buffer       The buffer to write from.
 * @param[in]   length       The minimum number of bytes to write.
 * @param[in]   offset       The offset in the buffer to write from.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_write`.
 * @return      otherwise    What `scheduler.io_write` returns `[-errno, size]`.
 */
VALUE rb_fiber_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t length, size_t offset);

/**
 * Non-blocking read from the passed IO at the specified offset.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to read from.
 * @param[in]   from         The offset to read from.
 * @param[in]   buffer       The buffer to read to.
 * @param[in]   length       The minimum number of bytes to read.
 * @param[in]   offset       The offset in the buffer to read to.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_read`.
 * @return      otherwise    What `scheduler.io_read` returns.
 */
VALUE rb_fiber_scheduler_io_pread(VALUE scheduler, VALUE io, rb_off_t from, VALUE buffer, size_t length, size_t offset);

/**
 * Non-blocking write to the passed IO at the specified offset.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to write to.
 * @param[in]   from         The offset to write to.
 * @param[in]   buffer       The buffer to write from.
 * @param[in]   length       The minimum number of bytes to write.
 * @param[in]   offset       The offset in the buffer to write from.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_write`.
 * @return      otherwise    What `scheduler.io_write` returns.
 */
VALUE rb_fiber_scheduler_io_pwrite(VALUE scheduler, VALUE io, rb_off_t from, VALUE buffer, size_t length, size_t offset);

/**
 * Non-blocking read from the passed IO using a native buffer.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to read from.
 * @param[in]   base         The memory to read to.
 * @param[in]   size         Size of the memory.
 * @param[in]   length       The minimum number of bytes to read.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_read`.
 * @return      otherwise    What `scheduler.io_read` returns.
 */
VALUE rb_fiber_scheduler_io_read_memory(VALUE scheduler, VALUE io, void *base, size_t size, size_t length);

/**
 * Non-blocking write to the passed IO using a native buffer.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to write to.
 * @param[in]   base         The memory to write from.
 * @param[in]   size         Size of the memory.
 * @param[in]   length       The minimum number of bytes to write.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_write`.
 * @return      otherwise    What `scheduler.io_write` returns.
 */
VALUE rb_fiber_scheduler_io_write_memory(VALUE scheduler, VALUE io, const void *base, size_t size, size_t length);

/**
 * Non-blocking pread from the passed IO using a native buffer.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to read from.
 * @param[in]   from         The offset to read from.
 * @param[in]   base         The memory to read to.
 * @param[in]   size         Size of the memory.
 * @param[in]   length       The minimum number of bytes to read.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_read`.
 * @return      otherwise    What `scheduler.io_read` returns.
 */
VALUE rb_fiber_scheduler_io_pread_memory(VALUE scheduler, VALUE io, rb_off_t from, void *base, size_t size, size_t length);

/**
 * Non-blocking pwrite to the passed IO using a native buffer.
 *
 * @param[in]   scheduler    Target scheduler.
 * @param[in]   io           An io object to write to.
 * @param[in]   from         The offset to write from.
 * @param[in]   base         The memory to write from.
 * @param[in]   size         Size of the memory.
 * @param[in]   length       The minimum number of bytes to write.
 * @retval      RUBY_Qundef  `scheduler` doesn't have `#io_write`.
 * @return      otherwise    What `scheduler.io_write` returns.
 */
VALUE rb_fiber_scheduler_io_pwrite_memory(VALUE scheduler, VALUE io, rb_off_t from, const void *base, size_t size, size_t length);

/**
 * Non-blocking close the given IO.
 *
 * @param[in]  scheduler    Target scheduler.
 * @param[in]  io           An io object to close.
 * @retval     RUBY_Qundef  `scheduler` doesn't have `#io_close`.
 * @return     otherwise    What `scheduler.io_close` returns.
 */
VALUE rb_fiber_scheduler_io_close(VALUE scheduler, VALUE io);

/**
 * Non-blocking DNS lookup.
 *
 * @param[in]  scheduler    Target scheduler.
 * @param[in]  hostname     A host name to query.
 * @retval     RUBY_Qundef  `scheduler` doesn't have `#address_resolve`.
 * @return     otherwise    What `scheduler.address_resolve` returns.
 */
VALUE rb_fiber_scheduler_address_resolve(VALUE scheduler, VALUE hostname);

struct rb_fiber_scheduler_blocking_operation_state {
    void *result;
    int saved_errno;
};

/**
 * Defer the execution of the passed function to the scheduler.
 *
 * @param[in]  scheduler         Target scheduler.
 * @param[in]  function          The function to run.
 * @param[in]  data              The data to pass to the function.
 * @param[in]  unblock_function  The unblock function to use to interrupt the operation.
 * @param[in]  data2             The data to pass to the unblock function.
 * @param[in]  flags             Flags passed to `rb_nogvl`.
 * @param[out] state             The result and errno of the operation.
 * @retval     RUBY_Qundef       `scheduler` doesn't have `#blocking_operation_wait`.
 * @return     otherwise         What `scheduler.blocking_operation_wait` returns.
 */
VALUE rb_fiber_scheduler_blocking_operation_wait(VALUE scheduler, void* (*function)(void *), void *data, rb_unblock_function_t *unblock_function, void *data2, int flags, struct rb_fiber_scheduler_blocking_operation_state *state);

/**
 * Create and schedule a non-blocking fiber.
 *
 */
VALUE rb_fiber_scheduler_fiber(VALUE scheduler, int argc, VALUE *argv, int kw_splat);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_FIBER_SCHEDULER_H */
PK*J[)��Svvinclude/ruby/backward.hnu�[���#ifndef RUBY_RUBY_BACKWARD_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_RUBY_BACKWARD_H 1
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "ruby/internal/value.h"
#include "ruby/internal/interpreter.h"
#include "ruby/backward/2/attributes.h"

#define RBIMPL_ATTR_DEPRECATED_SINCE(ver) RBIMPL_ATTR_DEPRECATED(("since " #ver))
#define RBIMPL_ATTR_DEPRECATED_INTERNAL(ver) RBIMPL_ATTR_DEPRECATED(("since "#ver", also internal"))
#define RBIMPL_ATTR_DEPRECATED_INTERNAL_ONLY() RBIMPL_ATTR_DEPRECATED(("only for internal use"))

RBIMPL_ATTR_DEPRECATED_INTERNAL_ONLY() void rb_clear_constant_cache(void);

/* from version.c */
#if defined(RUBY_SHOW_COPYRIGHT_TO_DIE) && !!(RUBY_SHOW_COPYRIGHT_TO_DIE+0)
# error RUBY_SHOW_COPYRIGHT_TO_DIE is deprecated
#endif

#endif /* RUBY_RUBY_BACKWARD_H */
PK*J[w���&&include/ruby/subst.hnu�[���#ifndef RUBY_SUBST_H                                 /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_SUBST_H 1
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */

#undef snprintf
#undef vsnprintf
#define snprintf ruby_snprintf
#define vsnprintf ruby_vsnprintf

#ifdef BROKEN_CLOSE
#undef getpeername
#define getpeername ruby_getpeername
#undef getsockname
#define getsockname ruby_getsockname
#undef shutdown
#define shutdown ruby_shutdown
#undef close
#define close ruby_close
#endif
#endif
PK*J[1+%1%1include/ruby/thread.hnu�[���#ifndef RUBY_THREAD_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_THREAD_H 1
/**
 * @file
 * @author     $Author: matz $
 * @date       Tue Jul 10 17:35:43 JST 2012
 * @copyright  Copyright (C) 2007 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/intern/thread.h" /* rb_unblock_function_t */
#include "ruby/internal/dllexport.h"

/**
 * @name Flags for rb_nogvl()
 *
 * @{
 */

/**
 * Passing  this  flag to  rb_nogvl()  prevents  it from  checking  interrupts.
 * Interrupts  can  impact  your  program negatively.   For  instance  consider
 * following callback function:
 *
 * ```CXX
 * static inline int fd; // set elsewhere.
 * static inline auto callback(auto buf) {
 *   auto tmp = ruby_xmalloc(BUFSIZ);
 *   auto ret = ruby_xmalloc(sizeof(ssize_t));  // (a)
 *   auto n = read(fd, tmp, BUFSIZ);            // (b)
 *   memcpy(buf, tmp, n);                       // (c)
 *   memcpy(ret, n, sizeof(n));
 *   ruby_xfree(tmp);
 *   return ret;
 * }
 * ```
 *
 * Here, if it gets interrupted at (a)  or (b), `read(2)` is cancelled and this
 * function leaks memory (which is not a good thing of course, but...).  But if
 * it gets interrupted at (c), where `read(2)` is already done, interruption is
 * way more catastrophic because what was read gets lost.  To reroute this kind
 * of problem you should set this flag.  And check interrupts elsewhere at your
 * own risk.
 */
#define RB_NOGVL_INTR_FAIL       (0x1)

/**
 * Passing  this  flag   to  rb_nogvl()  indicates  that  the   passed  UBF  is
 * async-signal-safe.   An UBF  could  be  async safe,  and  that makes  things
 * simpler.   However async  unsafe UBFs  are just  okay.  If  unsure, you  can
 * safely leave it unspecified.
 *
 * @internal
 *
 * This makes sense only in case of POSIX threads.
 */
#define RB_NOGVL_UBF_ASYNC_SAFE  (0x2)

/**
 * Passing  this  flag   to  rb_nogvl()  indicates  that  the   passed function
 * is safe to offload to a background thread or work pool. In other words, the
 * function is safe to run using a fiber scheduler's `blocking_operation_wait`.
 * hook.
 *
 * If your function depends on thread-local storage, or thread-specific data
 * operations/data structures, you should not set this flag, as
 * these operations may behave differently (or fail) when run in a different
 * thread/context (e.g. unlocking a mutex).
 */
#define RB_NOGVL_OFFLOAD_SAFE  (0x4)

/** @} */

RBIMPL_SYMBOL_EXPORT_BEGIN()

RBIMPL_ATTR_NONNULL((1))
/**
 * (Re-)acquires the GVL.   This manoeuvre makes it possible  for an out-of-GVL
 * routine to one-shot call a ruby method.
 *
 * What this function does:
 *
 *  1. Blocks until it acquires the GVL.
 *  2. Calls the passed function.
 *  3. Releases the GVL.
 *  4. Returns what was returned form the passed function.
 *
 * @param[in]      func   What to call with GVL.
 * @param[in,out]  data1  Passed as-is to `func`.
 * @return         What was returned from `func`.
 * @warning        `func` must not return a Ruby object.  If it did such return
 *                 value would escape from GC's scope; would not be marked.
 * @warning        Global escapes from this  function just yield whatever fatal
 *                 undefined behaviours.   You must make sure  that `func` does
 *                 not   raise,   by   properly   rescuing   everything   using
 *                 e.g. rb_protect().
 * @warning        You  cannot convert  a non-Ruby  thread into  a Ruby  thread
 *                 using this API.  This function  makes sense only from inside
 *                 of a rb_thread_call_without_gvl()'s callback.
 */
void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);

RBIMPL_ATTR_NONNULL((1))
/**
 * Allows the passed function to run in parallel with other Ruby threads.
 *
 * What this function does:
 *
 *  1. Checks (and handles) pending interrupts.
 *  2. Releases the GVL. (Others can run here in parallel...)
 *  3. Calls the passed function.
 *  4. Blocks until it re-acquires the GVL.
 *  5. Checks interrupts that happened between 2 to 4.
 *
 * In case  other threads  interfaced with  this thread  using rb_thread_kill()
 * etc., the  passed UBF  is additionally called.   See ::rb_unblock_function_t
 * for details.
 *
 * Unlike rb_thread_call_without_gvl2()  this function  also reacts  to signals
 * etc.
 *
 * @param[in]      func   A function to call without GVL.
 * @param[in,out]  data1  Passed as-is to `func`.
 * @param[in]      ubf    An UBF to cancel `func`.
 * @param[in,out]  data2  Passed as-is to `ubf`.
 * @return         What `func` returned, or 0 in case `ubf` cancelled `func`.
 * @warning        You cannot use  most of Ruby C APIs like  calling methods or
 *                 raising exceptions from  any of the functions  passed to it.
 *                 If that  is dead necessary use  rb_thread_call_with_gvl() to
 *                 re-acquire the GVL.
 * @warning        In short, this API is difficult.  @ko1 recommends you to use
 *                 other ways if any.  We lack experiences to use this API.  If
 *                 you  find any  corner cases  etc., please  report it  to the
 *                 devs.
 * @warning        Releasing and re-acquiring the GVL are expensive operations.
 *                 For a short-running `func`, it  might be faster to just call
 *                 `func` with blocking everything  else.  Be sure to benchmark
 *                 your code to see if it is actually worth releasing the GVL.
 */
void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
                                 rb_unblock_function_t *ubf, void *data2);

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical to rb_thread_call_without_gvl(), except it does not interface with
 * signals etc.  As described in  #RB_NOGVL_INTR_FAIL, interrupts can hurt you.
 * In case this function detects an interrupt, it returns immediately.  You can
 * record progress  of your  callback and  check it  after returning  from this
 * function.
 *
 * What this function does:
 *
 *  1. Checks for pending interrupts and if any, just returns.
 *  2. Releases the GVL. (Others can run here in parallel...)
 *  3. Calls the passed function.
 *  4. Blocks until it re-acquires the GVL.
 *
 * @param[in]      func   A function to call without GVL.
 * @param[in,out]  data1  Passed as-is to `func`.
 * @param[in]      ubf    An UBF to cancel `func`.
 * @param[in,out]  data2  Passed as-is to `ubf`.
 * @return         What `func` returned, or 0 in case `func` did not return.
 */
void *rb_thread_call_without_gvl2(void *(*func)(void *), void *data1,
                                  rb_unblock_function_t *ubf, void *data2);

/*
 * XXX: unstable/unapproved - out-of-tree code should NOT not depend
 * on this until it hits Ruby 2.6.1
 */

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical  to  rb_thread_call_without_gvl(),  except it  additionally  takes
 * "flags" that change the behaviour.
 *
 * @param[in]      func   A function to call without GVL.
 * @param[in,out]  data1  Passed as-is to `func`.
 * @param[in]      ubf    An UBF to cancel `func`.
 * @param[in,out]  data2  Passed as-is to `ubf`.
 * @param[in]      flags  Flags.
 * @return         What `func` returned, or 0 in case `func` did not return.
 */
void *rb_nogvl(void *(*func)(void *), void *data1,
               rb_unblock_function_t *ubf, void *data2,
               int flags);

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_AFTER 0x01

/**
 * @private
 * @deprecated  It seems even in the old days it made no sense...?
 */
#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_

/**
 * Declare the current Ruby thread should acquire a dedicated
 * native thread on M:N thread scheduler.
 *
 * If a C extension (or a library which the extension relies on) should
 * keep to run on a native thread (e.g. using thread-local-storage),
 * this function allocates a dedicated native thread for the thread.
 *
 * @return `false` if the thread already running on a dedicated native
 *         thread. Otherwise `true`.
 */
bool rb_thread_lock_native_thread(void);

/**
 * Triggered when a new thread is started.
 *
 * @note       The callback will be called *without* the GVL held.
 */
#define RUBY_INTERNAL_THREAD_EVENT_STARTED    1 << 0

/**
* Triggered when a thread attempt to acquire the GVL.
*
* @note       The callback will be called *without* the GVL held.
*/
#define RUBY_INTERNAL_THREAD_EVENT_READY      1 << 1 /** acquiring GVL */

/**
 * Triggered when a thread successfully acquired the GVL.
 *
 * @note       The callback will be called *with* the GVL held.
 */
#define RUBY_INTERNAL_THREAD_EVENT_RESUMED    1 << 2 /** acquired GVL */

/**
 * Triggered when a thread released the GVL.
 *
 * @note       The callback will be called *without* the GVL held.
 */
#define RUBY_INTERNAL_THREAD_EVENT_SUSPENDED  1 << 3 /** released GVL */

/**
 * Triggered when a thread exits.
 *
 * @note       The callback will be called *without* the GVL held.
 */
#define RUBY_INTERNAL_THREAD_EVENT_EXITED     1 << 4 /** thread terminated */

#define RUBY_INTERNAL_THREAD_EVENT_MASK       0xff /** All Thread events */

typedef struct rb_internal_thread_event_data {
   VALUE thread;
} rb_internal_thread_event_data_t;

typedef void (*rb_internal_thread_event_callback)(rb_event_flag_t event,
              const rb_internal_thread_event_data_t *event_data,
              void *user_data);
typedef struct rb_internal_thread_event_hook rb_internal_thread_event_hook_t;

/**
 * Registers a thread event hook function.
 *
 * @param[in]  func    A callback.
 * @param[in]  events  A set of events that `func` should run.
 * @param[in]  data    Passed as-is to `func`.
 * @return     An opaque pointer to the hook, to unregister it later.
 * @note       This functionality is a noop on Windows and WebAssembly.
 * @note       The callback will be called without the GVL held, except for the
 *             RESUMED event.
 * @note       Callbacks are not guaranteed to be executed on the native threads
 *             that corresponds to the Ruby thread. To identify which Ruby thread
 *             the event refers to, you must use `event_data->thread`.
 * @warning    This function MUST not be called from a thread event callback.
 */
rb_internal_thread_event_hook_t *rb_internal_thread_add_event_hook(
        rb_internal_thread_event_callback func, rb_event_flag_t events,
        void *data);


/**
 * Unregister the passed hook.
 *
 * @param[in]  hook.  The hook to unregister.
 * @return     Whether the hook was found and unregistered.
 * @note       This functionality is a noop on Windows and WebAssembly.
 * @warning    This function MUST not be called from a thread event callback.
*/
bool rb_internal_thread_remove_event_hook(
        rb_internal_thread_event_hook_t * hook);


typedef int rb_internal_thread_specific_key_t;
#define RB_INTERNAL_THREAD_SPECIFIC_KEY_MAX 8
/**
 * Create a key to store thread specific data.
 *
 * These APIs are designed for tools using
 * rb_internal_thread_event_hook APIs.
 *
 * Note that only `RB_INTERNAL_THREAD_SPECIFIC_KEY_MAX` keys
 * can be created. raises `ThreadError` if exceeded.
 *
 * Usage:
 *   // at initialize time:
 *   int tool_key; // gvar
 *   Init_tool() {
 *     tool_key = rb_internal_thread_specific_key_create();
 *   }
 *
 *   // at any timing:
 *   rb_internal_thread_specific_set(thread, tool_key, per_thread_data);
 *   ...
 *   per_thread_data = rb_internal_thread_specific_get(thread, tool_key);
 */
rb_internal_thread_specific_key_t rb_internal_thread_specific_key_create(void);

/**
 * Get thread and tool specific data.
 *
 * This function is async signal safe and thread safe.
 */
void *rb_internal_thread_specific_get(VALUE thread_val, rb_internal_thread_specific_key_t key);

/**
 * Set thread and tool specific data.
 *
 * This function is async signal safe and thread safe.
 */
void rb_internal_thread_specific_set(VALUE thread_val, rb_internal_thread_specific_key_t key, void *data);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_THREAD_H */
PK*J[�KCgginclude/ruby/digest.hnu�[���/************************************************

  digest.h - header file for ruby digest modules

  $Author$
  created at: Fri May 25 08:54:56 JST 2001


  Copyright (C) 2001-2006 Akinori MUSHA

  $RoughId: digest.h,v 1.3 2001/07/13 15:38:27 knu Exp $
  $Id$

************************************************/

#include "ruby.h"

#define RUBY_DIGEST_API_VERSION	3

typedef int (*rb_digest_hash_init_func_t)(void *);
typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t);
typedef int (*rb_digest_hash_finish_func_t)(void *, unsigned char *);

typedef struct {
    int api_version;
    size_t digest_len;
    size_t block_len;
    size_t ctx_size;
    rb_digest_hash_init_func_t init_func;
    rb_digest_hash_update_func_t update_func;
    rb_digest_hash_finish_func_t finish_func;
} rb_digest_metadata_t;

#define DEFINE_UPDATE_FUNC_FOR_UINT(name) \
void \
rb_digest_##name##_update(void *ctx, unsigned char *ptr, size_t size) \
{ \
    const unsigned int stride = 16384; \
 \
    for (; size > stride; size -= stride, ptr += stride) { \
        name##_Update(ctx, ptr, stride); \
    } \
    /* Since size <= stride, size should fit into an unsigned int */ \
    if (size > 0) name##_Update(ctx, ptr, (unsigned int)size); \
}

#define DEFINE_FINISH_FUNC_FROM_FINAL(name) \
int \
rb_digest_##name##_finish(void *ctx, unsigned char *ptr) \
{ \
    return name##_Final(ptr, ctx); \
}

static inline VALUE
rb_digest_namespace(void)
{
    rb_require("digest");
    return rb_path2class("Digest");
}

static inline ID
rb_id_metadata(void)
{
    return rb_intern_const("metadata");
}

#if !defined(HAVE_RB_EXT_RESOLVE_SYMBOL)
#elif !defined(RUBY_UNTYPED_DATA_WARNING)
# error RUBY_UNTYPED_DATA_WARNING is not defined
#elif RUBY_UNTYPED_DATA_WARNING
/* rb_ext_resolve_symbol() has been defined since Ruby 3.3, but digest
 * bundled with 3.3 didn't use it. */
# define DIGEST_USE_RB_EXT_RESOLVE_SYMBOL 1
#endif

static inline VALUE
rb_digest_make_metadata(const rb_digest_metadata_t *meta)
{
#if defined(EXTSTATIC) && EXTSTATIC
    /* The extension is built as a static library, so safe to refer to
     * rb_digest_wrap_metadata directly. */
    extern VALUE rb_digest_wrap_metadata(const rb_digest_metadata_t *meta);
    return rb_digest_wrap_metadata(meta);
#else
    /* The extension is built as a shared library, so we can't refer
     * to rb_digest_wrap_metadata directly. */
# ifdef DIGEST_USE_RB_EXT_RESOLVE_SYMBOL
    /* If rb_ext_resolve_symbol() is available, use it to get the address of
     * rb_digest_wrap_metadata. */
    typedef VALUE (*wrapper_func_type)(const rb_digest_metadata_t *meta);
    static wrapper_func_type wrapper;
    if (!wrapper) {
        wrapper = (wrapper_func_type)(uintptr_t)
            rb_ext_resolve_symbol("digest.so", "rb_digest_wrap_metadata");
        if (!wrapper) rb_raise(rb_eLoadError, "rb_digest_wrap_metadata not found");
    }
    return wrapper(meta);
# else
    /* If rb_ext_resolve_symbol() is not available, keep using untyped
     * data. */
# undef RUBY_UNTYPED_DATA_WARNING
# define RUBY_UNTYPED_DATA_WARNING 0
    return rb_obj_freeze(Data_Wrap_Struct(0, 0, 0, (void *)meta));
# endif
#endif
}
PK*J[2�-���include/ruby/regex.hnu�[���#ifndef ONIGURUMA_REGEX_H                            /*-*-C++-*-vi:se ft=cpp:*/
#define ONIGURUMA_REGEX_H 1
/**
 * @author     $Author$
 * @copyright  Copyright (C) 1993-2007 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#if defined(__cplusplus)
extern "C" {
#if 0
} /* satisfy cc-mode */
#endif
#endif

#ifdef RUBY
#include "ruby/oniguruma.h"
#else
#include "oniguruma.h"
#endif

RUBY_SYMBOL_EXPORT_BEGIN

#ifndef ONIG_RUBY_M17N

ONIG_EXTERN OnigEncoding    OnigEncDefaultCharEncoding;

#define mbclen(p,e,enc)  rb_enc_mbclen((p),(e),(enc))

#endif /* ifndef ONIG_RUBY_M17N */

RUBY_SYMBOL_EXPORT_END

#if defined(__cplusplus)
#if 0
{ /* satisfy cc-mode */
#endif
}  /* extern "C" { */
#endif

#endif /* ONIGURUMA_REGEX_H */
PK*J[:T�++include/ruby/memory_view.hnu�[���#ifndef RUBY_MEMORY_VIEW_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_MEMORY_VIEW_H 1
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @brief      Memory View.
 */

#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>                       /* size_t */
#endif

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>                    /* ssize_t */
#endif

#include "ruby/internal/attr/pure.h"       /* RBIMPL_ATTR_PURE */
#include "ruby/internal/core/rtypeddata.h" /* rb_data_type_t */
#include "ruby/internal/dllexport.h"       /* RUBY_EXTERN */
#include "ruby/internal/stdbool.h"         /* bool */
#include "ruby/internal/value.h"           /* VALUE */

/**
 * Flags passed to rb_memory_view_get(), then to ::rb_memory_view_get_func_t.
 */
enum ruby_memory_view_flags {
    RUBY_MEMORY_VIEW_SIMPLE            = 0,
    RUBY_MEMORY_VIEW_WRITABLE          = (1<<0),
    RUBY_MEMORY_VIEW_FORMAT            = (1<<1),
    RUBY_MEMORY_VIEW_MULTI_DIMENSIONAL = (1<<2),
    RUBY_MEMORY_VIEW_STRIDES           = (1<<3) | RUBY_MEMORY_VIEW_MULTI_DIMENSIONAL,
    RUBY_MEMORY_VIEW_ROW_MAJOR         = (1<<4) | RUBY_MEMORY_VIEW_STRIDES,
    RUBY_MEMORY_VIEW_COLUMN_MAJOR      = (1<<5) | RUBY_MEMORY_VIEW_STRIDES,
    RUBY_MEMORY_VIEW_ANY_CONTIGUOUS    = RUBY_MEMORY_VIEW_ROW_MAJOR | RUBY_MEMORY_VIEW_COLUMN_MAJOR,
    RUBY_MEMORY_VIEW_INDIRECT          = (1<<6) | RUBY_MEMORY_VIEW_STRIDES,
};

/** Memory view component metadata. */
typedef struct {
    /** @see ::rb_memory_view_t::format */
    char format;

    /** :FIXME: what is a "native" size is unclear. */
    bool native_size_p;

    /** Endian of the component */
    bool little_endian_p;

    /** The component's offset. */
    size_t offset;

    /** The component's size. */
    size_t size;

    /**
     * How many numbers of components are there. For instance "CCC"'s repeat is
     * 3.
     */
    size_t repeat;
} rb_memory_view_item_component_t;

/**
 * A MemoryView  structure, `rb_memory_view_t`, is used  for exporting objects'
 * MemoryView.
 *
 * This structure contains  the reference of the object, which  is the owner of
 * the MemoryView, the pointer to the head of exported memory, and the metadata
 * that  describes the  structure of  the  memory.  The  metadata can  describe
 * multidimensional arrays with strides.
 */
typedef struct {
    /**
     * The original object that has the memory exported via this memory view.
     */
    VALUE obj;

    /** The pointer to the exported memory. */
    void *data;

    /** The number of bytes in data. */
    ssize_t byte_size;

    /** true for readonly memory, false for writable memory. */
    bool readonly;

    /**
     * A string to describe the format of an element, or NULL for unsigned bytes.
     * The format string is a sequence of the following pack-template specifiers:
     *
     *   c, C, s, s!, S, S!, n, v, i, i!, I, I!, l, l!, L, L!,
     *   N, V, f, e, g, q, q!, Q, Q!, d, E, G, j, J, x
     *
     * For example, "dd" for an element that consists of two double values,
     * and "CCC" for an element that consists of three bytes, such as
     * an RGB color triplet.
     *
     * Also, the value endianness can be explicitly specified by '<' or '>'
     * following a value type specifier.
     *
     * The items are packed contiguously.  When you emulate the alignment of
     * structure members, put '|' at the beginning of the format string,
     * like "|iqc".  On x86_64 Linux ABI, the size of the item by this format
     * is 24 bytes instead of 13 bytes.
     */
    const char *format;

    /**
     * The number of bytes in each element.
     * item_size should equal to rb_memory_view_item_size_from_format(format). */
    ssize_t item_size;

    /** Description of each components. */
    struct {
        /**
         * The array of rb_memory_view_item_component_t that describes the
         * item structure.  rb_memory_view_prepare_item_desc and
         * rb_memory_view_get_item allocate this memory if needed,
         * and rb_memory_view_release frees it. */
        const rb_memory_view_item_component_t *components;

        /** The number of components in an item. */
        size_t length;
    } item_desc;

    /** The number of dimension. */
    ssize_t ndim;

    /**
     * ndim size array indicating the number of elements in each dimension.
     * This can be NULL when ndim == 1. */
    const ssize_t *shape;

    /**
     * ndim size array indicating the number of bytes to skip to go to the
     * next element in each dimension. */
    const ssize_t *strides;

    /**
     * The offset in each dimension when this memory view exposes a nested array.
     * Or, NULL when this memory view exposes a flat array. */
    const ssize_t *sub_offsets;

    /** The private data for managing this exported memory */
    void *private_data;

    /** DO NOT TOUCH THIS: The memory view entry for the internal use */
    const struct rb_memory_view_entry *_memory_view_entry;
} rb_memory_view_t;

/** Type of function of ::rb_memory_view_entry_t::get_func. */
typedef bool (* rb_memory_view_get_func_t)(VALUE obj, rb_memory_view_t *view, int flags);

/** Type of function of ::rb_memory_view_entry_t::release_func. */
typedef bool (* rb_memory_view_release_func_t)(VALUE obj, rb_memory_view_t *view);

/** Type of function of ::rb_memory_view_entry_t::available_p_func. */
typedef bool (* rb_memory_view_available_p_func_t)(VALUE obj);

/** Operations applied to a specific kind of a memory view. */
typedef struct rb_memory_view_entry {
    /**
     * Exports a memory view from a Ruby object.
     */
    rb_memory_view_get_func_t get_func;

    /**
     * Releases   a   memory  view   that   was   previously  generated   using
     * ::rb_memory_view_entry_t::get_func.
     */
    rb_memory_view_release_func_t release_func;

    /**
     * Queries if an object understands memory view protocol.
     */
    rb_memory_view_available_p_func_t available_p_func;
} rb_memory_view_entry_t;

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* memory_view.c */

/**
 * Associates the passed class with the  passed memory view entry.  This has to
 * be called before actually creating a memory view from an instance.
 */
bool rb_memory_view_register(VALUE klass, const rb_memory_view_entry_t *entry);

RBIMPL_ATTR_PURE()
/**
 * Return `true` if the data in the MemoryView `view` is row-major contiguous.
 *
 * Return `false` otherwise.
 */
bool rb_memory_view_is_row_major_contiguous(const rb_memory_view_t *view);

RBIMPL_ATTR_PURE()
/**
 * Return  `true`  if  the  data  in  the  MemoryView  `view`  is  column-major
 * contiguous.
 *
 * Return `false` otherwise.
 */
bool rb_memory_view_is_column_major_contiguous(const rb_memory_view_t *view);

RBIMPL_ATTR_NOALIAS()
/**
 * Fill the  `strides` array  with byte-Strides  of a  contiguous array  of the
 * given shape with the given element size.
 */
void rb_memory_view_fill_contiguous_strides(const ssize_t ndim, const ssize_t item_size, const ssize_t *const shape, const bool row_major_p, ssize_t *const strides);

RBIMPL_ATTR_NOALIAS()
/**
 * Fill the members of `view` as an 1-dimensional byte array.
 */
bool rb_memory_view_init_as_byte_array(rb_memory_view_t *view, VALUE obj, void *data, const ssize_t len, const bool readonly);

/**
 * Deconstructs    the     passed    format    string,    as     describe    in
 * ::rb_memory_view_t::format.
 */
ssize_t rb_memory_view_parse_item_format(const char *format,
                                         rb_memory_view_item_component_t **members,
                                         size_t *n_members, const char **err);

/**
 * Calculate the number of bytes occupied by an element.
 *
 * When the calculation  fails, the failed location in `format`  is stored into
 * `err`, and returns `-1`.
 */
ssize_t rb_memory_view_item_size_from_format(const char *format, const char **err);

/**
 * Calculate the location of the item indicated by the given `indices`.
 *
 * The length of `indices` must equal to `view->ndim`.
 *
 * This function initializes `view->item_desc` if needed.
 */
void *rb_memory_view_get_item_pointer(rb_memory_view_t *view, const ssize_t *indices);

/**
 * Return a value that consists of item members.
 *
 * When an item is a single member, the return value is a single value.
 *
 * When an item consists of multiple members, an array will be returned.
 */
VALUE rb_memory_view_extract_item_members(const void *ptr, const rb_memory_view_item_component_t *members, const size_t n_members);

/** Fill the `item_desc` member of `view`. */
void rb_memory_view_prepare_item_desc(rb_memory_view_t *view);

/** * Return a value that consists of item members in the given memory view. */
VALUE rb_memory_view_get_item(rb_memory_view_t *view, const ssize_t *indices);

/**
 * Return  `true` if  `obj` supports  to export  a MemoryView.   Return `false`
 * otherwise.
 *
 * If   this  function   returns   `true`,  it   doesn't   mean  the   function
 * `rb_memory_view_get` will succeed.
 */
bool rb_memory_view_available_p(VALUE obj);

/**
 * If the given  `obj` supports to export a MemoryView  that conforms the given
 * `flags`, this function fills `view` by the information of the MemoryView and
 * returns `true`.  In this case, the reference count of `obj` is increased.
 *
 * If the  given combination of `obj`  and `flags` cannot export  a MemoryView,
 * this function returns `false`. The content  of `view` is not touched in this
 * case.
 *
 * The exported  MemoryView must  be released by  `rb_memory_view_release` when
 * the MemoryView is no longer needed.
 */
bool rb_memory_view_get(VALUE obj, rb_memory_view_t* memory_view, int flags);

/**
 * Release the  given MemoryView  `view` and decrement  the reference  count of
 * `memory_view->obj`.
 *
 * Consumers must call  this function when the MemoryView is  no longer needed.
 * Missing to call this function leads memory leak.
 */
bool rb_memory_view_release(rb_memory_view_t* memory_view);

/* for testing */
/** @cond INTERNAL_MACRO */
RUBY_EXTERN VALUE rb_memory_view_exported_object_registry;
RUBY_EXTERN const rb_data_type_t rb_memory_view_exported_object_registry_data_type;
/** @endcond */

RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE()
/**
 * Return  `true`  if  the  data  in the  MemoryView  `view`  is  row-major  or
 * column-major contiguous.
 *
 * Return `false` otherwise.
 */
static inline bool
rb_memory_view_is_contiguous(const rb_memory_view_t *view)
{
    if (rb_memory_view_is_row_major_contiguous(view)) {
        return true;
    }
    else if (rb_memory_view_is_column_major_contiguous(view)) {
        return true;
    }
    else {
        return false;
    }
}

#endif /* RUBY_BUFFER_H */
PK*J[�j�{include/ruby/defines.hnu�[���#ifndef RUBY_DEFINES_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_DEFINES_H 1
/**
 * @file
 * @author     $Author$
 * @date       Wed May 18 00:21:44 JST 1994
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */

#include "ruby/internal/config.h"

/* AC_INCLUDES_DEFAULT */
#include <stdio.h>

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif

#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif

#ifdef STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# ifdef HAVE_STDLIB_H
#  include <stdlib.h>
# endif
#endif

#ifdef HAVE_STRING_H
# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
#  include <memory.h>
# endif
# include <string.h>
#endif

#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif

#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif

#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif

#ifdef HAVE_STDALIGN_H
# include <stdalign.h>
#endif

#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif

#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif

#ifdef RUBY_USE_SETJMPEX
# include <setjmpex.h>
#endif

#include "ruby/internal/dllexport.h"
#include "ruby/internal/xmalloc.h"
#include "ruby/backward/2/assume.h"
#include "ruby/backward/2/attributes.h"
#include "ruby/backward/2/bool.h"
#include "ruby/backward/2/long_long.h"
#include "ruby/backward/2/stdalign.h"
#include "ruby/backward/2/stdarg.h"
#include "ruby/internal/dosish.h"
#include "ruby/missing.h"

/**
 * Asserts that the compilation unit includes  Ruby's CAPI.  This has been here
 * since the very beginning (at least since version 0.49).
 */
#define RUBY

#ifdef __GNUC__
# /** This is expanded to nothing for non-GCC compilers. */
# define RB_GNUC_EXTENSION __extension__
# /** This is expanded to the passed token for non-GCC compilers. */
# define RB_GNUC_EXTENSION_BLOCK(x) __extension__ ({ x; })
#else
# define RB_GNUC_EXTENSION
# define RB_GNUC_EXTENSION_BLOCK(x) (x)
#endif

/** @cond INTERNAL_MACRO */

/* :FIXME:  Can someone  tell us  why is  this macro  defined here?   @shyouhei
 * thinks this  is a  truly internal  macro but cannot  move around  because he
 * doesn't understand the reason of this arrangement. */
#ifndef RUBY_MBCHAR_MAXSIZE
# define RUBY_MBCHAR_MAXSIZE INT_MAX
# /* MB_CUR_MAX will not work well in C locale */
#endif

#if defined(__sparc)
RBIMPL_SYMBOL_EXPORT_BEGIN()
void rb_sparc_flush_register_windows(void);
RBIMPL_SYMBOL_EXPORT_END()
# define FLUSH_REGISTER_WINDOWS rb_sparc_flush_register_windows()
#else
# define FLUSH_REGISTER_WINDOWS ((void)0)
#endif
/** @endcond */
#endif /* RUBY_DEFINES_H */
PK*J[�넟�"�"include/ruby/ractor.hnu�[���#ifndef RUBY_RACTOR_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_RACTOR_H 1

/**
 * @file
 * @author Koichi Sasada
 * @date Tue Nov 17 16:39:15 2020
 * @copyright Copyright (C) 2020 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "internal/dllexport.h"      /* RUBY_EXTERN is here */
#include "internal/fl_type.h"        /* FL_TEST_RAW is here */
#include "internal/special_consts.h" /* RB_SPECIAL_CONSTS_P is here */
#include "internal/stdbool.h"        /* bool is here */
#include "internal/value.h"          /* VALUE is here */

/** Type that defines a ractor-local storage. */
struct rb_ractor_local_storage_type {

    /**
     * A function to mark a ractor-local storage.
     *
     * @param[out]  ptr  A ractor-local storage.
     * @post        Ruby objects inside of `ptr` are marked.
     */
    void (*mark)(void *ptr);

    /**
     * A function to destruct a ractor-local storage.
     *
     * @param[out]  ptr  A ractor-local storage.
     * @post        `ptr` is not a valid pointer.
     */
    void (*free)(void *ptr);
    // TODO: update
};

/** (Opaque) struct that holds a ractor-local storage key. */
typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t;

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * `Ractor` class.
 *
 * @ingroup object
 */
RUBY_EXTERN VALUE rb_cRactor;

/**
 * Queries  the standard  input  of the  current Ractor  that  is calling  this
 * function.
 *
 * @return  An IO.
 * @note    This can be different from the process-global one.
 */
VALUE rb_ractor_stdin(void);

/**
 * Queries  the standard  output of  the current  Ractor that  is calling  this
 * function.
 *
 * @return  An IO.
 * @note    This can be different from the process-global one.
 */
VALUE rb_ractor_stdout(void);

/**
 * Queries  the standard  error  of the  current Ractor  that  is calling  this
 * function.
 *
 * @return  An IO.
 * @note    This can be different from the process-global one.
 */
VALUE rb_ractor_stderr(void);

/**
 * Assigns an  IO to  the standard  input of  the Ractor  that is  calling this
 * function.
 *
 * @param[in]  io  An IO.
 * @post       `io` is the standard input of the current ractor.
 * @post       In case the  calling Ractor is the main Ractor,  it also updates
 *             the process global ::rb_stdin.
 */
void rb_ractor_stdin_set(VALUE io);

/**
 * Assigns an  IO to  the standard output  of the Ractor  that is  calling this
 * function.
 *
 * @param[in]  io  An IO.
 * @post       `io` is the standard input of the current ractor.
 * @post       In case the  calling Ractor is the main Ractor,  it also updates
 *             the process global ::rb_stdout.
 */
void rb_ractor_stdout_set(VALUE io);

/**
 * Assigns an  IO to  the standard  error of  the Ractor  that is  calling this
 * function.
 *
 * @param[in]  io  An IO.
 * @post       `io` is the standard input of the current ractor.
 * @post       In case the  calling Ractor is the main Ractor,  it also updates
 *             the process global ::rb_stderr.
 */
void rb_ractor_stderr_set(VALUE io);

/**
 * Issues a new key.
 *
 * @return  A newly  issued ractor-local storage  key.  Keys issued  using this
 *          key can be associated to a Ruby object per Ractor.
 */
rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);

/**
 * Queries the key.
 *
 * @param[in]  key        A ractor-local storage key to lookup.
 * @retval     RUBY_Qnil  No such key.
 * @retval     otherwise  A value corresponds to `key` in the current Ractor.
 * @note       This  cannot distinguish  between a  nonexistent key  and a  key
 *             exists and corresponds to ::RUBY_Qnil.
 */
VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);

/**
 * Queries the key.
 *
 * @param[in]   key    A ractor-local storage key to lookup.
 * @param[out]  val    Return value buffer.
 * @retval      false  `key` not found.
 * @retval      true   `key` found.
 * @post        `val` is updated so that it  has the value corresponds to `key`
 *              in the current Ractor.
 */
bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);

/**
 * Associates the passed value to the passed key.
 *
 * @param[in]  key  A ractor-local storage key.
 * @param[in]  val  Arbitrary ruby object.
 * @post       `val` corresponds to `key` in the current Ractor.
 */
void  rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);

/**
 * A type of ractor-local storage that destructs itself using ::ruby_xfree.
 *
 * @internal
 *
 * Why  it is  visible from  3rd party  extension libraries  is not  obvious to
 * @shyouhei.
 */
RUBY_EXTERN const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;

/** @alias{rb_ractor_local_storage_type_free} */
#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free)

/**
 * Extended version of rb_ractor_local_storage_value_newkey().  It additionally
 * takes the type of the issuing key.
 *
 * @param[in]  type  How  the  value associated  with  the  issuing key  should
 *                   behave.
 * @return     A newly issued ractor-local storage key, of type `type`.
 */
rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type);

/**
 * Identical to rb_ractor_local_storage_value() except the return type.
 *
 * @param[in]  key        A ractor-local storage key to lookup.
 * @retval     NULL       No such key.
 * @retval     otherwise  A value corresponds to `key` in the current Ractor.
 */
void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);

/**
 * Identical to rb_ractor_local_storage_value_set() except the parameter type.
 *
 * @param[in]  key  A ractor-local storage key.
 * @param[in]  ptr  A pointer that conforms `key`'s type.
 * @post       `ptr` corresponds to `key` in the current Ractor.
 */
void  rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);

/**
 * Destructively  transforms the  passed object  so that  multiple Ractors  can
 * share it.  What is a shareable object  and what is not is a nuanced concept,
 * and @ko1  says the definition  can still change.  However  extension library
 * authors might interest to learn how to use #RUBY_TYPED_FROZEN_SHAREABLE.
 *
 * @param[out]  obj              Arbitrary ruby object to modify.
 * @exception   rb_eRactorError  Ractors cannot share `obj` by nature.
 * @return      Passed `obj`.
 * @post        Multiple Ractors can share `obj`.
 *
 * @internal
 *
 * In case an exception is raised, `obj` remains in an intermediate state where
 * some of its part is frozen and others  are not.  @shyouhei is not sure if it
 * is  either  an intended  behaviour,  current  implementation limitation,  or
 * simply a bug.  Note also that there is no way to "melt" a frozen object.
 */
VALUE rb_ractor_make_shareable(VALUE obj);

/**
 * Identical to rb_ractor_make_shareable(), except it  returns a (deep) copy of
 * the passed one instead of modifying it in-place.
 *
 * @param[in]   obj              Arbitrary ruby object to duplicate.
 * @exception   rb_eRactorError  Ractors cannot share `obj` by nature.
 * @return      A deep copy of `obj` which is sharable among Ractors.
 */
VALUE rb_ractor_make_shareable_copy(VALUE obj);

RBIMPL_SYMBOL_EXPORT_END()

/**
 * Queries if the passed object has  previously classified as shareable or not.
 * This  doesn't mean  anything in  practice...  Objects  can be  shared later.
 * Always use rb_ractor_shareable_p() instead.
 *
 * @param[in]  obj                Object in question.
 * @retval     RUBY_FL_SHAREABLE  It once was shareable before.
 * @retval     0                  Otherwise.
 */
#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)

/**
 * Queries if multiple Ractors can share the passed object or not.  Ractors run
 * without protecting  each other.  Sharing  an object among them  is basically
 * dangerous,  disabled  by  default.   However  there  are  objects  that  are
 * extremely  carefully implemented  to be  Ractor-safe; for  instance integers
 * have such property.  This function can classify that.
 *
 * @param[in]   obj    Arbitrary ruby object.
 * @retval      true   `obj` is capable of shared across ractors.
 * @retval      false  `obj` cannot travel across ractor boundaries.
 */
static inline bool
rb_ractor_shareable_p(VALUE obj)
{
    bool rb_ractor_shareable_p_continue(VALUE obj);

    if (RB_SPECIAL_CONST_P(obj)) {
        return true;
    }
    else if (RB_OBJ_SHAREABLE_P(obj)) {
        return true;
    }
    else {
        return rb_ractor_shareable_p_continue(obj);
    }
}

#endif /* RUBY_RACTOR_H */
PK*J[��s1  include/ruby/encoding.hnu�[���#ifndef RUBY_ENCODING_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_ENCODING_H 1
/**
 * @file
 * @author     $Author: matz $
 * @date       Thu May 24 11:49:41 JST 2007
 * @copyright  Copyright (C) 2007 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @brief      Encoding relates APIs.
 *
 * These APIs are mainly for  implementing encodings themselves.  Encodings are
 * built on  top of  Ruby's core  CAPIs.  Though not  prohibited, there  can be
 * relatively less rooms for things in  this header file be useful when writing
 * an extension library.
 */
#include "ruby/ruby.h"

#include "ruby/internal/encoding/coderange.h"
#include "ruby/internal/encoding/ctype.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/encoding/pathname.h"
#include "ruby/internal/encoding/re.h"
#include "ruby/internal/encoding/sprintf.h"
#include "ruby/internal/encoding/string.h"
#include "ruby/internal/encoding/symbol.h"
#include "ruby/internal/encoding/transcode.h"

#endif /* RUBY_ENCODING_H */
PK*J[�$r��(include/ruby/internal/attr/forceinline.hnu�[���#ifndef RBIMPL_ATTR_FORCEINLINE_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_FORCEINLINE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_FORCEINLINE.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/attribute.h"

/**
 * Wraps (or  simulates) `__forceinline`.  MSVC complains  on declarations like
 * `static inline __forceinline void foo()`.   It  seems  MSVC's  `inline`  and
 * `__forceinline` are mutually exclusive.  We have to mimic that behaviour for
 * non-MSVC compilers.
 */
#if RBIMPL_COMPILER_SINCE(MSVC, 12, 0, 0)
# define RBIMPL_ATTR_FORCEINLINE() __forceinline
#elif RBIMPL_HAS_ATTRIBUTE(always_inline)
# define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline
#else
# define RBIMPL_ATTR_FORCEINLINE() inline
#endif

#endif /* RBIMPL_ATTR_FORCEINLINE_H */
PK*J[�wq?��(include/ruby/internal/attr/diagnose_if.hnu�[���#ifndef RBIMPL_ATTR_DIAGNOSE_IF_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_DIAGNOSE_IF_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_DIAGNOSE_IF.
 */
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/warning_push.h"

/** Wraps (or simulates) `__attribute__((diagnose_if))` */
#if RBIMPL_COMPILER_BEFORE(Clang, 5, 0, 0)
# /* https://bugs.llvm.org/show_bug.cgi?id=34319 */
# define RBIMPL_ATTR_DIAGNOSE_IF(_, __, ___) /* void */

#elif RBIMPL_HAS_ATTRIBUTE(diagnose_if)
# define RBIMPL_ATTR_DIAGNOSE_IF(_, __, ___) \
    RBIMPL_WARNING_PUSH() \
    RBIMPL_WARNING_IGNORED(-Wgcc-compat) \
    __attribute__((__diagnose_if__(_, __, ___))) \
    RBIMPL_WARNING_POP()

#else
# define RBIMPL_ATTR_DIAGNOSE_IF(_, __, ___) /* void */
#endif

#endif /* RBIMPL_ATTR_DIAGNOSE_IF_H */
PK*J[9�u ��!include/ruby/internal/attr/pure.hnu�[���#ifndef RBIMPL_ATTR_PURE_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_PURE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_PURE.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/attribute.h"
#include "ruby/assert.h"

/** Wraps (or simulates) `__attribute__((pure))` */
#if RBIMPL_HAS_ATTRIBUTE(pure)
# define RBIMPL_ATTR_PURE() __attribute__((__pure__))
#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0)
# define RBIMPL_ATTR_PURE() _Pragma("does_not_write_global_data")
#else
# define RBIMPL_ATTR_PURE() /* void */
#endif

/** Enables #RBIMPL_ATTR_PURE if and only if. ! #RUBY_DEBUG. */
#if !RUBY_DEBUG
# define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE()
#else
# define RBIMPL_ATTR_PURE_UNLESS_DEBUG() /* void */
#endif

#endif /* RBIMPL_ATTR_PURE_H */
PK*J[�m.LLL%include/ruby/internal/attr/restrict.hnu�[���#ifndef RBIMPL_ATTR_RESTRICT_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_RESTRICT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_RESTRICT.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/attribute.h"

/* :FIXME:  config.h  includes conflicting  `#define  restrict`.   MSVC can  be
 * detected  using `RBIMPL_COMPILER_SINCE()`,  but  Clang &  family cannot  use
 * `__has_declspec_attribute()` which involves macro substitution. */

/** Wraps (or simulates) `__declspec(restrict)` */
#if RBIMPL_COMPILER_SINCE(MSVC, 14, 0, 0)
# define RBIMPL_ATTR_RESTRICT() __declspec(re ## strict)

#elif RBIMPL_HAS_ATTRIBUTE(malloc)
# define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__))

#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0)
# define RBIMPL_ATTR_RESTRICT() _Pragma("returns_new_memory")

#else
# define RBIMPL_ATTR_RESTRICT() /* void */
#endif

#endif /* RBIMPL_ATTR_RESTRICT_H */
PK*J[]ڲU��&include/ruby/internal/attr/flag_enum.hnu�[���#ifndef RBIMPL_ATTR_FLAG_ENUM_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_FLAG_ENUM_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_FLAG_ENUM.
 * @see        https://clang.llvm.org/docs/AttributeReference.html#flag_enum
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((flag_enum)` */
#if RBIMPL_HAS_ATTRIBUTE(flag_enum)
# define RBIMPL_ATTR_FLAG_ENUM() __attribute__((__flag_enum__))
#else
# define RBIMPL_ATTR_FLAG_ENUM() /* void */
#endif

#endif /* RBIMPLATTR_FLAG_ENUM_H */
PK*J[�܄ґ�)include/ruby/internal/attr/maybe_unused.hnu�[���#ifndef RBIMPL_ATTR_MAYBE_UNUSED_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_MAYBE_UNUSED_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_MAYBE_UNUSED.
 */
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/c_attribute.h"
#include "ruby/internal/has/cpp_attribute.h"

/** Wraps  (or simulates)  `[[maybe_unused]]` */
#if RBIMPL_HAS_CPP_ATTRIBUTE(maybe_unused)
# define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
#elif RBIMPL_HAS_C_ATTRIBUTE(maybe_unused)
# define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
#elif RBIMPL_HAS_ATTRIBUTE(unused)
# define RBIMPL_ATTR_MAYBE_UNUSED() __attribute__((__unused__))
#else
# define RBIMPL_ATTR_MAYBE_UNUSED() /* void */
#endif

#endif /* RBIMPL_ATTR_MAYBE_UNUSED */
PK*J[��\��/include/ruby/internal/attr/enum_extensibility.hnu�[���#ifndef RBIMPL_ATTR_ENUM_EXTENSIBILITY_H             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      #RBIMPL_ATTR_ENUM_EXTENSIBILITY.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((enum_extensibility))` */
#if RBIMPL_HAS_ATTRIBUTE(enum_extensibility)
# define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_) __attribute__((__enum_extensibility__(_)))
#else
# define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_) /* void */
#endif

#endif /* RBIMPL_ATTR_ENUM_EXTENSIBILITY_H */
PK*J[�>U�YY%include/ruby/internal/attr/noreturn.hnu�[���#ifndef RBIMPL_ATTR_NORETURN_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_NORETURN_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_NORETURN.
 */
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/cpp_attribute.h"
#include "ruby/internal/has/declspec_attribute.h"

/** Wraps (or simulates) `[[noreturn]]` */
#if RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noreturn)
# define RBIMPL_ATTR_NORETURN() __declspec(noreturn)

#elif RBIMPL_HAS_ATTRIBUTE(noreturn)
# define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__))

#elif RBIMPL_HAS_CPP_ATTRIBUTE(noreturn)
# define RBIMPL_ATTR_NORETURN() [[noreturn]]

#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112)
# define RBIMPL_ATTR_NORETURN() _Noreturn

#elif defined(_Noreturn)
# /* glibc <sys/cdefs.h> has this macro. */
# define RBIMPL_ATTR_NORETURN() _Noreturn

#else
# define RBIMPL_ATTR_NORETURN() /* void */
#endif

#endif /* RBIMPL_ATTR_NORETURN_H */
PK*J[��EGG*include/ruby/internal/attr/packed_struct.hnu�[���#ifndef RBIMPL_ATTR_PACKED_STRUCT_H                 /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_PACKED_STRUCT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_PACKED_STRUCT_BEGIN,
 *             #RBIMPL_ATTR_PACKED_STRUCT_END,
 *             #RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_BEGIN, and
 *             #RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_END.
 */
#include "ruby/internal/config.h"

#ifndef RBIMPL_ATTR_PACKED_STRUCT_BEGIN
# define RBIMPL_ATTR_PACKED_STRUCT_BEGIN() /* void */
#endif
#ifndef RBIMPL_ATTR_PACKED_STRUCT_END
# define RBIMPL_ATTR_PACKED_STRUCT_END() /* void */
#endif

#if UNALIGNED_WORD_ACCESS
# define RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_BEGIN() RBIMPL_ATTR_PACKED_STRUCT_BEGIN()
# define RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_END() RBIMPL_ATTR_PACKED_STRUCT_END()
#else
# define RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_BEGIN() /* void */
# define RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_END() /* void */
#endif

#endif
PK*J[��rr$include/ruby/internal/attr/warning.hnu�[���#ifndef RBIMPL_ATTR_WARNING_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_WARNING_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_WARNING.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((warning))` */
#if RBIMPL_HAS_ATTRIBUTE(warning)
# define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg))
#else
# define RBIMPL_ATTR_WARNING(msg) /* void */
#endif

#endif /* RBIMPL_ATTR_WARNING_H */
PK*J[��-,include/ruby/internal/attr/returns_nonnull.hnu�[���#ifndef RBIMPL_ATTR_RETURNS_NONNULL_H                /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_RETURNS_NONNULL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_RETURNS_NONNULL.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((returns_nonnull))` */
#if defined(_Ret_nonnull_)
# /* Take SAL definition. */
# define RBIMPL_ATTR_RETURNS_NONNULL() _Ret_nonnull_

#elif RBIMPL_HAS_ATTRIBUTE(returns_nonnull)
# define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__))

#else
# define RBIMPL_ATTR_RETURNS_NONNULL() /* void */
#endif

#endif /* RBIMPL_ATTR_RETURNS_NONNULL_H */
PK*J[Ϟ]bb"include/ruby/internal/attr/error.hnu�[���#ifndef RBIMPL_ATTR_ERROR_H                          /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_ERROR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_ERROR.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((error))` */
#if RBIMPL_HAS_ATTRIBUTE(error)
# define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg))
#else
# define RBIMPL_ATTR_ERROR(msg) /* void */
#endif

#endif /* RBIMPL_ATTR_ERROR_H */
PK*J[�Xa�%include/ruby/internal/attr/noinline.hnu�[���#ifndef RBIMPL_ATTR_NOINLINE_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_NOINLINE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_NOINLINE.
 */
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/declspec_attribute.h"

/** Wraps (or simulates) `__declspec(noinline)` */
#if RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noinline)
# define RBIMPL_ATTR_NOINLINE() __declspec(noinline)
#elif RBIMPL_HAS_ATTRIBUTE(noinline)
# define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__))
#else
# define RBIMPL_ATTR_NOINLINE() /* void */
#endif

#endif /* RBIMPL_ATTR_NOINLINE_H */
PK*J[Þs�DD!include/ruby/internal/attr/cold.hnu�[���#ifndef RBIMPL_ATTR_COLD_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_COLD_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_COLD.
 */
#include "ruby/internal/compiler_is.h"
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((cold))` */
#if RBIMPL_COMPILER_IS(SunPro)
# /* Recent SunPro has __has_attribute, and is broken. */
# /* It reports it has attribute cold, reality isn't (warnings issued). */
# define RBIMPL_ATTR_COLD() /* void */
#elif RBIMPL_HAS_ATTRIBUTE(cold)
# define RBIMPL_ATTR_COLD() __attribute__((__cold__))
#else
# define RBIMPL_ATTR_COLD() /* void */
#endif

#endif /* RBIMPL_ATTR_COLD_H */
PK*J[���
�
$include/ruby/internal/attr/noalias.hnu�[���#ifndef RBIMPL_ATTR_NOALIAS_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_NOALIAS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_NOALIAS.
 *
 * ### Q&A ###
 *
 * - Q: There  are  seemingly   similar  attributes  named  #RBIMPL_ATTR_CONST,
 *      #RBIMPL_ATTR_PURE, and #RBIMPL_ATTR_NOALIAS.  What are the difference?
 *
 * - A: Allowed operations are different.
 *
 *     - #RBIMPL_ATTR_CONST ... Functions attributed by this are not allowed to
 *       read/write  _any_ pointers  at all  (there are  exceptional situations
 *       when  reading a  pointer is  possible but  forget that;  they are  too
 *       exceptional  to be  useful).  Just  remember that  everything pointer-
 *       related are NG.
 *
 *     - #RBIMPL_ATTR_PURE  ...   Functions attributed  by  this  can read  any
 *       nonvolatile pointers, but  no writes are allowed at  all.  The ability
 *       to read _any_ nonvolatile pointers  makes it possible to mark ::VALUE-
 *       taking functions as being pure, as long as they are read-only.
 *
 *     - #RBIMPL_ATTR_NOALIAS  ...  Can  both   read/write,  but  only  through
 *       pointers  passed to  the function  as parameters.   This is  a typical
 *       situation when you create a  C++ non-static member function which only
 *       concerns `this`.  No  global variables are allowed  to read/write.  So
 *       this is not a super-set of being pure.  If you want to read something,
 *       that has to  be passed to the function as  a pointer.  ::VALUE -taking
 *       functions thus cannot be attributed as such.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/declspec_attribute.h"

/** Wraps (or simulates) `__declspec((noalias))` */
#if RBIMPL_COMPILER_BEFORE(Clang, 12, 0, 0)
# /*
#  * `::llvm::Attribute::ArgMemOnly`  was buggy  before.  Maybe  because nobody
#  * actually seriously used it.  It seems they somehow mitigated the situation
#  * in  LLVM  12.  Still  not  found  the  exact  changeset which  fiexed  the
#  * attribute, though.
#  *
#  * :FIXME: others (armclang, xlclang, ...) can also be affected?
#  */
# define RBIMPL_ATTR_NOALIAS() /* void */
#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noalias)
# define RBIMPL_ATTR_NOALIAS() __declspec(noalias)
#else
# define RBIMPL_ATTR_NOALIAS() /* void */
#endif

#endif /* RBIMPL_ATTR_NOALIAS_H */
PK*J[���	�	'include/ruby/internal/attr/artificial.hnu�[���#ifndef RBIMPL_ATTR_ARTIFICIAL_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_ARTIFICIAL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_ARTIFICIAL.
 *
 * ### Q&A ###
 *
 * - Q: What is this attribute?  I don't get what GCC manual is talking about.
 *
 * - A: In  short  it  is  an  attribute to  manipulate  GDB  backtraces.   The
 *      attribute    makes    the   best    sense    when    it   comes    with
 *      __attribute__((always_inline)).   When a  function annotated  with this
 *      attribute gets inlined, and when you  somehow look at a backtrace which
 *      includes such  inlined call site,  then the backtrace shows  the caller
 *      and  not the  callee.  This  is handy  for instance  when an  identical
 *      function is inlined  more than once in a single  big function.  On such
 *      case it gets  vital to know where the inlining  happened in the callee.
 *      See also https://stackoverflow.com/a/21936099
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((artificial))` */
#if RBIMPL_HAS_ATTRIBUTE(artificial)
# define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__))
#else
# define RBIMPL_ATTR_ARTIFICIAL() /* void */
#endif

#endif /* RBIMPL_ATTR_ARTIFICIAL_H */
PK*J[z+�uu$include/ruby/internal/attr/weakref.hnu�[���#ifndef RBIMPL_ATTR_WEAKREF_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_WEAKREF_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_WEAKREF.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((weakref))` */
#if RBIMPL_HAS_ATTRIBUTE(weakref)
# define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(# sym)))
#else
# define RBIMPL_ATTR_WEAKREF(sym) /* void */
#endif

#endif /* RBIMPL_ATTR_WEAKREF_H */
PK*J[��C��%include/ruby/internal/attr/noexcept.hnu�[���#ifndef RBIMPL_ATTR_NOEXCEPT_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_NOEXCEPT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_NOEXCEPT.
 *
 * This isn't actually an attribute in C++ but who cares...
 *
 * Mainly due  to aesthetic reasons,  this one is  rarely used in  the project.
 * But can  be handy on  occasions, especially when a  function's noexcept-ness
 * depends on its calling functions.
 *
 * ### Q&A ###
 *
 * - Q: Can a function that raises Ruby exceptions be attributed `noexcept`?
 *
 * - A: Yes.   `noexcept` is  about  C++ exceptions,  not  Ruby's.  They  don't
 *      interface each other.  You can  safely attribute a function that raises
 *      Ruby exceptions as `noexcept`.
 *
 * - Q: How, then, can I assert that  a function I wrote doesn't raise any Ruby
 *      exceptions?
 *
 * - A: `__attribute__((__leaf__))` is for that purpose.  A function attributed
 *      as leaf can still throw C++  exceptions, but not Ruby's.  Note however,
 *      that it's extremely difficult -- if  not impossible -- to assert that a
 *      function  doesn't  raise any  Ruby  exceptions  at  all.  Use  of  that
 *      attribute is not  recommended; mere mortals can't properly  use that by
 *      hand.
 *
 * - Q: Does it make sense to attribute an inline function `noexcept`?
 *
 * - A: I thought so before.  But no, I don't think they are useful any longer.
 *
 *     - When an  inline function attributed `noexcept`  actually doesn't throw
 *       any  exceptions at  all:  these days  I don't  see  any difference  in
 *       generated assembly  by adding/removing this attribute.   C++ compilers
 *       get smarter and  smarter.  Today they can infer if  it actually throws
 *       or not without any annotations by humans (correct me if I'm wrong).
 *
 *     - When an inline function attributed `noexcept` actually _does_ throw an
 *       exception:  they  have to  call  `std::terminate`  then (C++  standard
 *       mandates  so).  This  means exception  handling routines  are actually
 *       enforced, not  omitted.  This doesn't impact  runtime performance (The
 *       Itanium C++ ABI has zero-cost  exception handling), but does impact on
 *       generated binary size.  This is bad.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/feature.h"

/** Wraps (or simulates) C++11 `noexcept` */
#if ! defined(__cplusplus)
# /* Doesn't make sense. */
# define RBIMPL_ATTR_NOEXCEPT(_) /* void */

#elif RBIMPL_HAS_FEATURE(cxx_noexcept)
# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_))

#elif defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__
# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_))

#elif defined(__INTEL_CXX11_MODE__)
# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_))

#elif RBIMPL_COMPILER_SINCE(MSVC, 19, 0, 0)
# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_))

#elif __cplusplus >= 201103L
# define RBIMPL_ATTR_NOEXCEPT(_) noexcept(noexcept(_))

#else
# define RBIMPL_ATTR_NOEXCEPT(_) /* void */
#endif

#endif /* RBIMPL_ATTR_NOEXCEPT_H */
PK*J[��$��$include/ruby/internal/attr/nonnull.hnu�[���#ifndef RBIMPL_ATTR_NONNULL_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_NONNULL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_NONNULL.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((nonnull))` */
#if RBIMPL_HAS_ATTRIBUTE(nonnull)
# define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list))
# define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING
#else
# define RBIMPL_ATTR_NONNULL(list) /* void */
# define RBIMPL_NONNULL_ARG(arg) RUBY_ASSERT(arg)
#endif

#endif /* RBIMPL_ATTR_NONNULL_H */
PK*J[�2=���"include/ruby/internal/attr/const.hnu�[���#ifndef RBIMPL_ATTR_CONST_H                          /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_CONST_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_CONST.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/declspec_attribute.h"

/** Wraps (or simulates) `__attribute__((const))` */
#if RBIMPL_HAS_ATTRIBUTE(const)
# define RBIMPL_ATTR_CONST() __attribute__((__const__))
#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(noalias)
# /* If a function can be a const, that is also a noalias. */
# define RBIMPL_ATTR_CONST() __declspec(noalias)
#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0)
# define RBIMPL_ATTR_CONST() _Pragma("no_side_effect")
#else
# define RBIMPL_ATTR_CONST() /* void */
#endif

/** Enables #RBIMPL_ATTR_CONST if and only if. ! #RUBY_DEBUG. */
#if !defined(RUBY_DEBUG) || !RUBY_DEBUG
# define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST()
#else
# define RBIMPL_ATTR_CONST_UNLESS_DEBUG() /* void */
#endif

#endif /* RBIMPL_ATTR_CONST_H */
PK*J[5�@[��&include/ruby/internal/attr/nodiscard.hnu�[���#ifndef RBIMPL_ATTR_NODISCARD_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_NODISCARD_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_NODISCARD.
 */
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/c_attribute.h"
#include "ruby/internal/has/cpp_attribute.h"

/**
 * Wraps  (or simulates)  `[[nodiscard]]`.  In  C++  (at least  since C++20)  a
 * nodiscard attribute can  have a message why the result shall not be ignored.
 * However GCC attribute and SAL annotation cannot take them.
 */
#if RBIMPL_HAS_CPP_ATTRIBUTE(nodiscard)
# define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
#elif RBIMPL_HAS_C_ATTRIBUTE(nodiscard)
# define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
#elif RBIMPL_HAS_ATTRIBUTE(warn_unused_result)
# define RBIMPL_ATTR_NODISCARD() __attribute__((__warn_unused_result__))
#elif defined(_Check_return_)
# /* Take SAL definition. */
# define RBIMPL_ATTR_NODISCARD() _Check_return_
#else
# define RBIMPL_ATTR_NODISCARD() /* void */
#endif

#endif /* RBIMPL_ATTR_NODISCARD_H */
PK*J[B�-#include/ruby/internal/attr/format.hnu�[���#ifndef RBIMPL_ATTR_FORMAT_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_FORMAT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_FORMAT.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((format))` */
#if RBIMPL_HAS_ATTRIBUTE(format)
# define RBIMPL_ATTR_FORMAT(x, y, z) __attribute__((__format__(x, y, z)))
#else
# define RBIMPL_ATTR_FORMAT(x, y, z) /* void */
#endif

#if defined(__MINGW_PRINTF_FORMAT)
# define RBIMPL_PRINTF_FORMAT __MINGW_PRINTF_FORMAT
#else
# define RBIMPL_PRINTF_FORMAT __printf__
#endif

#endif /* RBIMPL_ATTR_FORMAT_H */
PK*J[����<
<
'include/ruby/internal/attr/deprecated.hnu�[���#ifndef RBIMPL_ATTR_DEPRECATED_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_DEPRECATED_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_DEPRECATED.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/c_attribute.h"
#include "ruby/internal/has/cpp_attribute.h"
#include "ruby/internal/has/declspec_attribute.h"
#include "ruby/internal/has/extension.h"

/** Wraps (or simulates) `[[deprecated]]` */
#if defined(__COVERITY__)
/* Coverity Scan emulates gcc but seems not to support this attribute correctly */
# define RBIMPL_ATTR_DEPRECATED(msg)

#elif RBIMPL_HAS_EXTENSION(attribute_deprecated_with_message)
# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))

#elif defined(__cplusplus) && RBIMPL_COMPILER_SINCE(GCC, 10, 1, 0) && RBIMPL_COMPILER_BEFORE(GCC, 10, 3, 0)
# /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95302 */
# define RBIMPL_ATTR_DEPRECATED(msg) /* disable until they fix this bug */

#elif RBIMPL_COMPILER_SINCE(GCC, 4, 5, 0)
# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))

#elif RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0)
# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))

#elif RBIMPL_HAS_ATTRIBUTE(deprecated) /* but not with message. */
# define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__))

#elif RBIMPL_COMPILER_SINCE(MSVC, 14, 0, 0)
# define RBIMPL_ATTR_DEPRECATED(msg) __declspec(deprecated msg)

#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(deprecated)
# define RBIMPL_ATTR_DEPRECATED(msg) __declspec(deprecated)

#elif RBIMPL_HAS_CPP_ATTRIBUTE(deprecated)
# define RBIMPL_ATTR_DEPRECATED(msg) [[deprecated msg]]

#elif RBIMPL_HAS_C_ATTRIBUTE(deprecated)
# define RBIMPL_ATTR_DEPRECATED(msg) [[deprecated msg]]

#else
# define RBIMPL_ATTR_DEPRECATED(msg) /* void */
#endif

/** This is when a function is used internally (for backwards compatibility
 * etc.), but extension libraries must consider it deprecated. */
#if defined(RUBY_EXPORT)
# define RBIMPL_ATTR_DEPRECATED_EXT(msg) /* void */
#else
# define RBIMPL_ATTR_DEPRECATED_EXT(msg) RBIMPL_ATTR_DEPRECATED(msg)
#endif

#endif /* RBIMPL_ATTR_DEPRECATED_H */
PK*J[�Z���'include/ruby/internal/attr/alloc_size.hnu�[���#ifndef RBIMPL_ATTR_ALLOC_SIZE_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_ALLOC_SIZE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ATTR_ALLOC_SIZE.
 */
#include "ruby/internal/has/attribute.h"

/** Wraps (or simulates) `__attribute__((alloc_size))` */
#if RBIMPL_HAS_ATTRIBUTE(alloc_size)
# define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple))
#else
# define RBIMPL_ATTR_ALLOC_SIZE(tuple) /* void */
#endif

#endif /* RBIMPL_ATTR_ALLOC_SIZE_H */
PK*J[.3\�
�
&include/ruby/internal/attr/constexpr.hnu�[���#ifndef RBIMPL_ATTR_CONSTEXPR_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ATTR_CONSTEXPR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      #RBIMPL_ATTR_CONSTEXPR.
 */
#include "ruby/internal/has/feature.h"
#include "ruby/internal/compiler_is.h"

/** @cond INTERNAL_MACRO */
#if ! defined(__cplusplus)
# /* Makes no sense. */
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0

#elif defined(__cpp_constexpr)
# /* https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations */
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 (__cpp_constexpr >= 200704L)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 (__cpp_constexpr >= 201304L)

#elif RBIMPL_COMPILER_SINCE(MSVC, 19, 0, 0)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 00)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 00)

#elif RBIMPL_COMPILER_SINCE(SunPro, 5, 13, 0)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 (__cplusplus >= 201103L)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 (__cplusplus >= 201402L)

#elif RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 (__cplusplus >= 201103L)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 (__cplusplus >= 201402L)

#elif RBIMPL_HAS_FEATURE(cxx_relaxed_constexpr)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 1
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 1

#elif RBIMPL_HAS_FEATURE(cxx_constexpr)
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 1
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0

#else
# /* :FIXME: icpc must have constexpr but don't know how to detect. */
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
# define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0
#endif
/** @endcond */

/** Wraps (or simulates) C++11 `constexpr`.  */
#if RBIMPL_HAS_ATTR_CONSTEXPR_CXX14
# define RBIMPL_ATTR_CONSTEXPR(_) constexpr

#elif RBIMPL_HAS_ATTR_CONSTEXPR_CXX11
# define RBIMPL_ATTR_CONSTEXPR(_) RBIMPL_ATTR_CONSTEXPR_ ## _
# define RBIMPL_ATTR_CONSTEXPR_CXX11 constexpr
# define RBIMPL_ATTR_CONSTEXPR_CXX14 /* void */

#else
# define RBIMPL_ATTR_CONSTEXPR(_) /* void */
#endif

/** Enables #RBIMPL_ATTR_CONSTEXPR if and only if. ! #RUBY_DEBUG. */
#if !RUBY_DEBUG
# define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_)
#else
# define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) /* void */
#endif

#endif /* RBIMPL_ATTR_CONSTEXPR_H */
PK*J[0;�e-e-'include/ruby/internal/arithmetic/long.hnu�[���#ifndef RBIMPL_ARITHMETIC_LONG_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_LONG_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `long` and Ruby's.
 *
 * ### Q&A ###
 *
 * - Q: Why are INT2FIX etc. here, not in `int.h`?
 *
 * - A: Because they  are in fact  handling `long`.   It seems someone  did not
 *      understand the difference of `int`  and `long` when they designed those
 *      macros.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/fixnum.h"   /* FIXABLE */
#include "ruby/internal/arithmetic/intptr_t.h" /* rb_int2big etc.*/
#include "ruby/internal/assume.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/special_consts.h"      /* FIXNUM_FLAG */
#include "ruby/internal/value.h"
#include "ruby/assert.h"

#define FIX2LONG     RB_FIX2LONG          /**< @old{RB_FIX2LONG} */
#define FIX2ULONG    RB_FIX2ULONG         /**< @old{RB_FIX2ULONG} */
#define INT2FIX      RB_INT2FIX           /**< @old{RB_INT2FIX} */
#define LONG2FIX     RB_INT2FIX           /**< @old{RB_INT2FIX} */
#define LONG2NUM     RB_LONG2NUM          /**< @old{RB_LONG2NUM} */
#define NUM2LONG     RB_NUM2LONG          /**< @old{RB_NUM2LONG} */
#define NUM2ULONG    RB_NUM2ULONG         /**< @old{RB_NUM2ULONG} */
#define RB_FIX2LONG  rb_fix2long          /**< @alias{rb_fix2long} */
#define RB_FIX2ULONG rb_fix2ulong         /**< @alias{rb_fix2ulong} */
#define RB_LONG2FIX  RB_INT2FIX           /**< @alias{RB_INT2FIX} */
#define RB_LONG2NUM  rb_long2num_inline   /**< @alias{rb_long2num_inline} */
#define RB_NUM2LONG  rb_num2long_inline   /**< @alias{rb_num2long_inline} */
#define RB_NUM2ULONG rb_num2ulong_inline  /**< @alias{rb_num2ulong_inline} */
#define RB_ULONG2NUM rb_ulong2num_inline  /**< @alias{rb_ulong2num_inline} */
#define ULONG2NUM    RB_ULONG2NUM         /**< @old{RB_ULONG2NUM} */
#define rb_fix_new   RB_INT2FIX           /**< @alias{RB_INT2FIX} */
#define rb_long2int  rb_long2int_inline   /**< @alias{rb_long2int_inline} */

/** @cond INTERNAL_MACRO */
#define RB_INT2FIX RB_INT2FIX
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_COLD()
/**
 * This is an utility function to raise an ::rb_eRangeError.
 *
 * @param[in]  num             A signed value about to overflow.
 * @exception  rb_eRangeError  `num` is out of range of `int`.
 */
void rb_out_of_int(SIGNED_VALUE num);

/**
 * Converts an instance of ::rb_cNumeric into C's `long`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `long`.
 * @return     The passed value converted into C's `long`.
 */
long rb_num2long(VALUE num);

/**
 * Converts an instance of ::rb_cNumeric into C's `unsigned long`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `unsigned long`.
 * @return     The passed value converted into C's `unsigned long`.
 */
unsigned long rb_num2ulong(VALUE num);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_CONST_UNLESS_DEBUG()
RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Converts a C's `long` into an instance of ::rb_cInteger.
 *
 * @param[in]  i  Arbitrary `long` value.
 * @return     An instance of ::rb_cInteger.
 */
static inline VALUE
RB_INT2FIX(long i)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(i));

    /* :NOTE: VALUE can be wider than long.  As j being unsigned, 2j+1 is fully
     * defined. Also it can be compiled into a single LEA instruction. */
    const unsigned long j = RBIMPL_CAST((unsigned long)i);
    const unsigned long k = (j << 1) + RUBY_FIXNUM_FLAG;
    const long          l = RBIMPL_CAST((long)k);
    const SIGNED_VALUE  m = l; /* Sign extend */
    const VALUE         n = RBIMPL_CAST((VALUE)m);

    RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(n));
    return n;
}

/**
 * Checks if `int` can hold the given integer.
 *
 * @param[in]  n               Arbitrary `long` value.
 * @exception  rb_eRangeError  `n` is out of range of `int`.
 * @return     Identical value of type `int`
 */
static inline int
rb_long2int_inline(long n)
{
    int i = RBIMPL_CAST((int)n);

    if /* constexpr */ (sizeof(long) <= sizeof(int)) {
        RBIMPL_ASSUME(i == n);
    }

    if (i != n)
        rb_out_of_int(n);

    return i;
}

RBIMPL_ATTR_CONST_UNLESS_DEBUG()
RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14)
/**
 * @private
 *
 * This  is an  implementation detail  of rb_fix2long().   People don't  use it
 * directly.
 *
 * @param[in]  x  A Fixnum.
 * @return     Identical value of type `long`
 * @pre        Must not pass anything other than a Fixnum.
 */
static inline long
rbimpl_fix2long_by_idiv(VALUE x)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x));

    /* :NOTE: VALUE  can be wider  than long.  (x-1)/2 never  overflows because
     * RB_FIXNUM_P(x)  holds.   Also it  has  no  portability issue  like  y>>1
     * below. */
    const SIGNED_VALUE y = RBIMPL_CAST((SIGNED_VALUE)(x - RUBY_FIXNUM_FLAG));
    const SIGNED_VALUE z = y / 2;
    const long         w = RBIMPL_CAST((long)z);

    RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(w));
    return w;
}

RBIMPL_ATTR_CONST_UNLESS_DEBUG()
RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14)
/**
 * @private
 *
 * This  is an  implementation detail  of rb_fix2long().   People don't  use it
 * directly.
 *
 * @param[in]  x  A Fixnum.
 * @return     Identical value of type `long`
 * @pre        Must not pass anything other than a Fixnum.
 */
static inline long
rbimpl_fix2long_by_shift(VALUE x)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x));

    /* :NOTE: VALUE can be wider than long.  If right shift is arithmetic, this
     * is noticeably faster than above. */
    const SIGNED_VALUE y = RBIMPL_CAST((SIGNED_VALUE)x);
    const SIGNED_VALUE z = y >> 1;
    const long         w = RBIMPL_CAST((long)z);

    RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(w));
    return w;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
/**
 * @private
 *
 * This  is an  implementation detail  of rb_fix2long().   People don't  use it
 * directly.
 *
 * @retval  true   This C compiler's right shift operator is arithmetic.
 * @retval  false  This C compiler's right shift operator is logical.
 */
static inline bool
rbimpl_right_shift_is_arithmetic_p(void)
{
    return (-1 >> 1) == -1;
}

RBIMPL_ATTR_CONST_UNLESS_DEBUG()
RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14)
/**
 * Converts a Fixnum into C's `long`.
 *
 * @param[in]  x  Some Fixnum.
 * @pre        Must not pass anything other than a Fixnum.
 * @return     The passed value converted into C's `long`.
 */
static inline long
rb_fix2long(VALUE x)
{
    if /* constexpr */ (rbimpl_right_shift_is_arithmetic_p()) {
        return rbimpl_fix2long_by_shift(x);
    }
    else {
        return rbimpl_fix2long_by_idiv(x);
    }
}

RBIMPL_ATTR_CONST_UNLESS_DEBUG()
RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14)
/**
 * Converts a Fixnum into C's `unsigned long`.
 *
 * @param[in]  x  Some Fixnum.
 * @pre        Must not pass anything other than a Fixnum.
 * @return     The passed value converted into C's `unsigned long`.
 * @note       Negative fixnums will be converted into large unsigned longs.
 */
static inline unsigned long
rb_fix2ulong(VALUE x)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x));
    return RBIMPL_CAST((unsigned long)rb_fix2long(x));
}

/**
 * Converts an instance of ::rb_cNumeric into C's `long`.
 *
 * @param[in]  x               Something numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `long`.
 * @return     The passed value converted into C's `long`.
 */
static inline long
rb_num2long_inline(VALUE x)
{
    if (RB_FIXNUM_P(x))
        return RB_FIX2LONG(x);
    else
        return rb_num2long(x);
}

/**
 * Converts an instance of ::rb_cNumeric into C's `unsigned long`.
 *
 * @param[in]  x               Something numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `unsigned long`.
 * @return     The passed value converted into C's `unsigned long`.
 *
 * @internal
 *
 * This  (negative fixnum  would become  a large  unsigned long  while negative
 * bignum  is an  exception)  has been  THE behaviour  of  NUM2ULONG since  the
 * beginning.  It is strange, but we can  no longer change how it works at this
 * moment.  We have to get by with it.
 *
 * @see https://bugs.ruby-lang.org/issues/9089
 */
static inline unsigned long
rb_num2ulong_inline(VALUE x)
{
    if (RB_FIXNUM_P(x))
        return RB_FIX2ULONG(x);
    else
        return rb_num2ulong(x);
}

/**
 * Converts a C's `long` into an instance of ::rb_cInteger.
 *
 * @param[in]  v  Arbitrary `long` value.
 * @return     An instance of ::rb_cInteger.
 */
static inline VALUE
rb_long2num_inline(long v)
{
    if (RB_FIXABLE(v))
        return RB_LONG2FIX(v);
    else
        return rb_int2big(v);
}

/**
 * Converts a C's `unsigned long` into an instance of ::rb_cInteger.
 *
 * @param[in]  v  Arbitrary `unsigned long` value.
 * @return     An instance of ::rb_cInteger.
 */
static inline VALUE
rb_ulong2num_inline(unsigned long v)
{
    if (RB_POSFIXABLE(v))
        return RB_LONG2FIX(RBIMPL_CAST((long)v));
    else
        return rb_uint2big(v);
}

/**
 * @cond INTERNAL_MACRO
 *
 * Following overload is necessary because sometimes  INT2FIX is used as a enum
 * value (e.g. `enum {  FOO = INT2FIX(0) };`).  THIS IS NG  in theory because a
 * VALUE does not fit into an enum (which must be a signed int).  But we cannot
 * break existing codes.
 */
#if RBIMPL_HAS_ATTR_CONSTEXPR_CXX14
# /* C++ can write constexpr as enum values. */

#elif ! defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
# undef INT2FIX
# define INT2FIX(i) (RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG)

#else
# undef INT2FIX
# define INT2FIX(i)                                     \
    __builtin_choose_expr(                              \
        __builtin_constant_p(i),                        \
        RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, \
        RB_INT2FIX(i))
#endif
/** @endcond */

#endif /* RBIMPL_ARITHMETIC_LONG_H */
PK*J[8�QTT,include/ruby/internal/arithmetic/long_long.hnu�[���#ifndef RBIMPL_ARITHMETIC_LONG_LONG_H                /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_LONG_LONG_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `long long` and Ruby's.
 */
#include "ruby/internal/value.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/special_consts.h"
#include "ruby/backward/2/long_long.h"

#define RB_LL2NUM  rb_ll2num_inline   /**< @alias{rb_ll2num_inline} */
#define RB_ULL2NUM rb_ull2num_inline  /**< @alias{rb_ull2num_inline} */
#define LL2NUM     RB_LL2NUM          /**< @old{RB_LL2NUM} */
#define ULL2NUM    RB_ULL2NUM         /**< @old{RB_ULL2NUM} */
#define RB_NUM2LL  rb_num2ll_inline   /**< @alias{rb_num2ll_inline} */
#define RB_NUM2ULL rb_num2ull_inline  /**< @alias{rb_num2ull_inline} */
#define NUM2LL     RB_NUM2LL          /**< @old{RB_NUM2LL} */
#define NUM2ULL    RB_NUM2ULL         /**< @old{RB_NUM2ULL} */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * Converts a C's `long long` into an instance of ::rb_cInteger.
 *
 * @param[in]  num  Arbitrary `long long` value.
 * @return     An instance of ::rb_cInteger.
 */
VALUE rb_ll2inum(LONG_LONG num);

/**
 * Converts a C's `unsigned long long` into an instance of ::rb_cInteger.
 *
 * @param[in]  num  Arbitrary `unsigned long long` value.
 * @return     An instance of ::rb_cInteger.
 */
VALUE rb_ull2inum(unsigned LONG_LONG num);

/**
 * Converts an instance of ::rb_cNumeric into C's `long long`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `long long`.
 * @return     The passed value converted into C's `long long`.
 */
LONG_LONG rb_num2ll(VALUE num);

/**
 * Converts an instance of ::rb_cNumeric into C's `unsigned long long`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `unsigned long long`.
 * @return     The passed value converted into C's `unsigned long long`.
 */
unsigned LONG_LONG rb_num2ull(VALUE num);
RBIMPL_SYMBOL_EXPORT_END()

/**
 * Converts a C's `long long` into an instance of ::rb_cInteger.
 *
 * @param[in]  n  Arbitrary `long long` value.
 * @return     An instance of ::rb_cInteger
 */
static inline VALUE
rb_ll2num_inline(LONG_LONG n)
{
    if (FIXABLE(n)) return LONG2FIX((long)n);
    return rb_ll2inum(n);
}

/**
 * Converts a C's `unsigned long long` into an instance of ::rb_cInteger.
 *
 * @param[in]  n  Arbitrary `unsigned long long` value.
 * @return     An instance of ::rb_cInteger
 */
static inline VALUE
rb_ull2num_inline(unsigned LONG_LONG n)
{
    if (POSFIXABLE(n)) return LONG2FIX((long)n);
    return rb_ull2inum(n);
}

/**
 * Converts an instance of ::rb_cNumeric into C's `long long`.
 *
 * @param[in]  x               Something numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `long long`.
 * @return     The passed value converted into C's `long long`.
 */
static inline LONG_LONG
rb_num2ll_inline(VALUE x)
{
    if (RB_FIXNUM_P(x))
        return RB_FIX2LONG(x);
    else
        return rb_num2ll(x);
}

/**
 * Converts an instance of ::rb_cNumeric into C's `unsigned long long`.
 *
 * @param[in]  x               Something numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `unsigned long long`.
 * @return     The passed value converted into C's `unsigned long long`.
 */
static inline unsigned LONG_LONG
rb_num2ull_inline(VALUE x)
{
    if (RB_FIXNUM_P(x))
        return RBIMPL_CAST((unsigned LONG_LONG)RB_FIX2LONG(x));
    else
        return rb_num2ull(x);
}

#endif /* RBIMPL_ARITHMETIC_LONG_LONG_H */
PK*J[�{rff)include/ruby/internal/arithmetic/mode_t.hnu�[���#ifndef RBIMPL_ARITHMETIC_MODE_T_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_MODE_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `mode_t` and Ruby's.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/int.h"

/** Converts a C's `mode_t` into an instance of ::rb_cInteger. */
#ifndef NUM2MODET
# define NUM2MODET RB_NUM2INT
#endif

/** Converts an instance of ::rb_cNumeric into C's `mode_t`. */
#ifndef MODET2NUM
# define MODET2NUM RB_INT2NUM
#endif

/** A rb_sprintf() format prefix to be used for a `mode_t` parameter. */
#ifndef PRI_MODET_PREFIX
# define PRI_MODET_PREFIX PRI_INT_PREFIX
#endif

#endif /* RBIMPL_ARITHMETIC_MODE_T_H */
PK*J[)���+include/ruby/internal/arithmetic/intptr_t.hnu�[���#ifndef RBIMPL_ARITHMETIC_INTPTR_T_H                 /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_INTPTR_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `intptr_t` and Ruby's.
 */
#include "ruby/internal/config.h"

#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif

#include "ruby/internal/value.h"
#include "ruby/internal/dllexport.h"

#define rb_int_new  rb_int2inum  /**< @alias{rb_int2inum} */
#define rb_uint_new rb_uint2inum /**< @alias{rb_uint2inum} */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Converts a C's `intptr_t` into an instance of ::rb_cInteger.
 *
 * @param[in]  i  Arbitrary `intptr_t` value.
 * @return     An instance of ::rb_cInteger.
 * @note       This function always allocates Bignums, even if the given number
 *             is small enough to fit into a Fixnum.
 */
VALUE rb_int2big(intptr_t i);

/**
 * Converts a C's `intptr_t` into an instance of ::rb_cInteger.
 *
 * @param[in]  i  Arbitrary `intptr_t` value.
 * @return     An instance of ::rb_cInteger.
 */
VALUE rb_int2inum(intptr_t i);

/**
 * Converts a C's `intptr_t` into an instance of ::rb_cInteger.
 *
 * @param[in]  i  Arbitrary `intptr_t` value.
 * @return     An instance of ::rb_cInteger.
 * @note       This function always allocates Bignums, even if the given number
 *             is small enough to fit into a Fixnum.
 */
VALUE rb_uint2big(uintptr_t i);

/**
 * Converts a C's `uintptr_t` into an instance of ::rb_cInteger.
 *
 * @param[in]  i  Arbitrary `uintptr_t` value.
 * @return     An instance of ::rb_cInteger.
 */
VALUE rb_uint2inum(uintptr_t i);
RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_ARITHMETIC_INTPTR_T_H */
PK*J[-S)���,include/ruby/internal/arithmetic/st_data_t.hnu�[���#ifndef RBIMPL_ARITHMERIC_ST_DATA_T_H                /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMERIC_ST_DATA_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `st_data_t` and Ruby's.
 */
#include "ruby/internal/arithmetic/fixnum.h"
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/value.h"
#include "ruby/assert.h"
#include "ruby/st.h"

#define ST2FIX    RB_ST2FIX     /**< @old{RB_ST2FIX} */
/** @cond INTERNAL_MACRO */
#define RB_ST2FIX RB_ST2FIX
/** @endcond */

RBIMPL_ATTR_CONST_UNLESS_DEBUG()
RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Converts a C's `st_data_t` into an instance of ::rb_cInteger.
 *
 * @param[in]  i  The data in question.
 * @return     A converted result
 * @warning    THIS CONVERSION LOSES DATA!  Be warned.
 * @see        https://bugs.ruby-lang.org/issues/13877
 * @see        https://bugs.ruby-lang.org/issues/14218
 *
 * @internal
 *
 * This  is   needed  because  of   hash  functions.   Hash   functions  return
 * `st_data_t`,  which could  theoretically  be bigger  than Fixnums.   However
 * allocating Bignums for them every time  we calculate hash values is just too
 * heavy.  To avoid  penalty we need to  ignore some upper bit(s)  and stick to
 * Fixnums.  This function is used for that purpose.
 */
static inline VALUE
RB_ST2FIX(st_data_t i)
{
    SIGNED_VALUE x = RBIMPL_CAST((SIGNED_VALUE)i);

    if (x >= 0) {
        x &= RUBY_FIXNUM_MAX;
    }
    else {
        x |= RUBY_FIXNUM_MIN;
    }

    RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(x));
    unsigned long y = RBIMPL_CAST((unsigned long)x);
    return RB_LONG2FIX(RBIMPL_CAST((long)y));
}

#endif /* RBIMPL_ARITHMETIC_ST_DATA_T_H */
PK*J[NP�4TT)include/ruby/internal/arithmetic/size_t.hnu�[���#ifndef RBIMPL_ARITHMETIC_SIZE_T_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_SIZE_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `size_t` and Ruby's.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/int.h"
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/arithmetic/long_long.h"
#include "ruby/backward/2/long_long.h"

#if defined(__DOXYGEN__)
# /** Converts a C's `size_t` into an instance of ::rb_cInteger. */
# define RB_SIZE2NUM RB_ULONG2NUM
# /** Converts a C's `ssize_t` into an instance of ::rb_cInteger. */
# define RB_SSIZE2NUM RB_LONG2NUM
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
# define RB_SIZE2NUM RB_ULL2NUM
# define RB_SSIZE2NUM RB_LL2NUM
#elif SIZEOF_SIZE_T == SIZEOF_LONG
# define RB_SIZE2NUM RB_ULONG2NUM
# define RB_SSIZE2NUM RB_LONG2NUM
#else
# define RB_SIZE2NUM RB_UINT2NUM
# define RB_SSIZE2NUM RB_INT2NUM
#endif

#if defined(__DOXYGEN__)
# /** Converts an instance of ::rb_cInteger into C's `size_t`. */
# define RB_NUM2SIZE RB_NUM2ULONG
# /** Converts an instance of ::rb_cInteger into C's `ssize_t`. */
# define RB_NUM2SSIZE RB_NUM2LONG
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
# define RB_NUM2SIZE RB_NUM2ULL
# define RB_NUM2SSIZE RB_NUM2LL
#elif SIZEOF_SIZE_T == SIZEOF_LONG
# define RB_NUM2SIZE RB_NUM2ULONG
# define RB_NUM2SSIZE RB_NUM2LONG
#else
# define RB_NUM2SIZE RB_NUM2UINT
# define RB_NUM2SSIZE RB_NUM2INT
#endif

#define NUM2SIZET RB_NUM2SIZE   /**< @old{RB_NUM2SIZE} */
#define SIZET2NUM RB_SIZE2NUM   /**< @old{RB_SIZE2NUM} */
#define NUM2SSIZET RB_NUM2SSIZE /**< @old{RB_NUM2SSIZE} */
#define SSIZET2NUM RB_SSIZE2NUM /**< @old{RB_SSIZE2NUM} */

#endif /* RBIMPL_ARITHMETIC_SIZE_T_H */
PK*J[��(�^^(include/ruby/internal/arithmetic/uid_t.hnu�[���#ifndef RBIMPL_ARITHMETIC_UID_T_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_UID_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `uid_t` and Ruby's.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/long.h"

/** Converts a C's `uid_t` into an instance of ::rb_cInteger. */
#ifndef UIDT2NUM
# define UIDT2NUM RB_LONG2NUM
#endif

/** Converts an instance of ::rb_cNumeric into C's `uid_t`. */
#ifndef NUM2UIDT
# define NUM2UIDT RB_NUM2LONG
#endif

/** A rb_sprintf() format prefix to be used for a `uid_t` parameter. */
#ifndef PRI_UIDT_PREFIX
# define PRI_UIDT_PREFIX PRI_LONG_PREFIX
#endif

#endif /* RBIMPL_ARITHMETIC_UID_T_H */
PK*J[�D�v�
�
)include/ruby/internal/arithmetic/double.hnu�[���#ifndef RBIMPL_ARITHMETIC_DOUBLE_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_DOUBLE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `double` and Ruby's.
 */
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

#define NUM2DBL      rb_num2dbl       /**< @old{rb_num2dbl} */
#define RFLOAT_VALUE rb_float_value   /**< @old{rb_float_value} */
#define DBL2NUM      rb_float_new     /**< @old{rb_float_new} */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * Converts an instance of ::rb_cNumeric into C's `double`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @return     The passed value converted into C's `double`.
 */
double rb_num2dbl(VALUE num);

RBIMPL_ATTR_PURE()
/**
 * Extracts its double value from an instance of ::rb_cFloat.
 *
 * @param[in]  num  An instance of ::rb_cFloat.
 * @pre        Must not pass anything other than a Fixnum.
 * @return     The passed value converted into C's `double`.
 */
double rb_float_value(VALUE num);

/**
 * Converts a C's `double` into an instance of ::rb_cFloat.
 *
 * @param[in]  d  Arbitrary `double` value.
 * @return     An instance of ::rb_cFloat.
 */
VALUE rb_float_new(double d);

/**
 * Identical to rb_float_new(), except it does not generate Flonums.
 *
 * @param[in]  d  Arbitrary `double` value.
 * @return     An instance of ::rb_cFloat.
 *
 * @internal
 *
 * @shyouhei has no idea why it is here.
 */
VALUE rb_float_new_in_heap(double d);
RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_ARITHMETIC_DOUBLE_H */
PK*J[n-o
^^(include/ruby/internal/arithmetic/gid_t.hnu�[���#ifndef RBIMPL_ARITHMETIC_GID_T_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_GID_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `gid_t` and Ruby's.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/long.h"

/** Converts a C's `gid_t` into an instance of ::rb_cInteger. */
#ifndef GIDT2NUM
# define GIDT2NUM RB_LONG2NUM
#endif

/** Converts an instance of ::rb_cNumeric into C's `gid_t`. */
#ifndef NUM2GIDT
# define NUM2GIDT RB_NUM2LONG
#endif

/** A rb_sprintf() format prefix to be used for a `gid_t` parameter. */
#ifndef PRI_GIDT_PREFIX
# define PRI_GIDT_PREFIX PRI_LONG_PREFIX
#endif

#endif /* RBIMPL_ARITHMETIC_GID_T_H */
PK*J[҃�W+
+
'include/ruby/internal/arithmetic/char.hnu�[���#ifndef RBIMPL_ARITHMETIC_CHAR_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_CHAR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `char` and Ruby's.
 */
#include "ruby/internal/arithmetic/int.h"  /* NUM2INT is here, but */
#include "ruby/internal/arithmetic/long.h" /* INT2FIX is here.*/
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rstring.h"
#include "ruby/internal/value_type.h"

#define RB_NUM2CHR rb_num2char_inline /**< @alias{rb_num2char_inline} */
#define NUM2CHR    RB_NUM2CHR         /**< @old{RB_NUM2CHR} */
#define CHR2FIX    RB_CHR2FIX         /**< @old{RB_CHR2FIX} */

/** @cond INTERNAL_MACRO */
#define RB_CHR2FIX RB_CHR2FIX
/** @endcond */

RBIMPL_ATTR_CONST_UNLESS_DEBUG()
RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(CXX14)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Converts a C's `unsigned char` into an instance of ::rb_cInteger.
 *
 * @param[in]  c  Arbitrary `unsigned char` value.
 * @return     An instance of ::rb_cInteger.
 *
 * @internal
 *
 * Nobody explicitly states this but in  Ruby, a char means an unsigned integer
 * value of  range 0..255.   This is  a general principle.   AFAIK there  is no
 * single line of code where char is signed.
 */
static inline VALUE
RB_CHR2FIX(unsigned char c)
{
    return RB_INT2FIX(c);
}

/**
 * Converts an instance of ::rb_cNumeric into  C's `char`.  At the same time it
 * accepts a String of more than one character, and returns its first byte.  In
 * the  early days  there  was a  Ruby level  "character"  literal `?c`,  which
 * roughly worked this way.
 *
 * @param[in]  x               Either a string or a numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `unsigned int`.
 * @return     The passed value converted into C's `char`.
 */
static inline char
rb_num2char_inline(VALUE x)
{
    if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
        return RSTRING_PTR(x)[0];
    else
        return RBIMPL_CAST((char)RB_NUM2INT(x));
}

#endif /* RBIMPL_ARITHMETIC_CHAR_H */
PK*J[("ڟ^^(include/ruby/internal/arithmetic/pid_t.hnu�[���#ifndef RBIMPL_ARITHMETIC_PID_T_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_PID_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `pid_t` and Ruby's.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/long.h"

/** Converts a C's `pid_t` into an instance of ::rb_cInteger. */
#ifndef PIDT2NUM
# define PIDT2NUM RB_LONG2NUM
#endif

/** Converts an instance of ::rb_cNumeric into C's `pid_t`. */
#ifndef NUM2PIDT
# define NUM2PIDT RB_NUM2LONG
#endif

/** A rb_sprintf() format prefix to be used for a `pid_t` parameter. */
#ifndef PRI_PIDT_PREFIX
# define PRI_PIDT_PREFIX PRI_LONG_PREFIX
#endif

#endif /* RBIMPL_ARITHMETIC_PID_T_H */
PK*J[=nVt{{)include/ruby/internal/arithmetic/fixnum.hnu�[���#ifndef RBIMPL_ARITHMETIC_FIXNUM_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_FIXNUM_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Handling of integers formerly known as Fixnums.
 */
#include "ruby/backward/2/limits.h"

#define FIXABLE    RB_FIXABLE      /**< @old{RB_FIXABLE} */
#define FIXNUM_MAX RUBY_FIXNUM_MAX /**< @old{RUBY_FIXNUM_MAX} */
#define FIXNUM_MIN RUBY_FIXNUM_MIN /**< @old{RUBY_FIXNUM_MIN} */
#define NEGFIXABLE RB_NEGFIXABLE   /**< @old{RB_NEGFIXABLE} */
#define POSFIXABLE RB_POSFIXABLE   /**< @old{RB_POSFIXABLE} */

/**
 * Checks if the passed value is in  range of fixnum, assuming it is a positive
 * number.  Can sometimes be useful for C's unsigned integer types.
 *
 * @internal
 *
 * FIXABLE can be applied to anything, from double to intmax_t.  The problem is
 * double.   On a  64bit system  RUBY_FIXNUM_MAX is  4,611,686,018,427,387,903,
 * which is not representable by a double.  The nearest value that a double can
 * represent  is   4,611,686,018,427,387,904,  which   is  not   fixable.   The
 * seemingly-strange "< FIXNUM_MAX + 1" expression below is due to this.
 */
#define RB_POSFIXABLE(_) ((_) <  RUBY_FIXNUM_MAX + 1)

/**
 * Checks if the passed value is in  range of fixnum, assuming it is a negative
 * number.  This is an implementation of #RB_FIXABLE.  Rarely used stand alone.
 */
#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN)

/** Checks if the passed value is in  range of fixnum */
#define RB_FIXABLE(_)    (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_))

/** Maximum possible value that a fixnum can represent. */
#define RUBY_FIXNUM_MAX  (LONG_MAX / 2)

/** Minimum possible value that a fixnum can represent. */
#define RUBY_FIXNUM_MIN  (LONG_MIN / 2)

#endif /* RBIMPL_ARITHMETIC_FIXNUM_H */
PK*J[���	�	(include/ruby/internal/arithmetic/off_t.hnu�[���#ifndef RBIMPL_ARITHMETIC_OFF_T_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_OFF_T_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `off_t` and Ruby's.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/int.h"
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/arithmetic/long_long.h"
#include "ruby/backward/2/long_long.h"

/** Converts a C's `off_t` into an instance of ::rb_cInteger. */
#ifdef OFFT2NUM
# /* take that. */
#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG
# define OFFT2NUM RB_LL2NUM
#elif SIZEOF_OFF_T == SIZEOF_LONG
# define OFFT2NUM RB_LONG2NUM
#else
# define OFFT2NUM RB_INT2NUM
#endif

/** Converts an instance of ::rb_cNumeric into C's `off_t`. */
#ifdef NUM2OFFT
# /* take that. */
#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG
# define NUM2OFFT RB_NUM2LL
#elif SIZEOF_OFF_T == SIZEOF_LONG
# define NUM2OFFT RB_NUM2LONG
#else
# define NUM2OFFT RB_NUM2INT
#endif

/** A rb_sprintf() format prefix to be used for an `off_t` parameter. */
#ifdef PRI_OFFT_PREFIX
# /* take that. */
#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG
# define PRI_OFFT_PREFIX PRI_LL_PREFIX
#elif SIZEOF_OFF_T == SIZEOF_LONG
# define PRI_OFFT_PREFIX PRI_LONG_PREFIX
#else
# define PRI_OFFT_PREFIX PRI_INT_PREFIX
#endif

#endif /* RBIMPL_ARITHMETIC_OFF_T_H */
PK*J[���E E &include/ruby/internal/arithmetic/int.hnu�[���#ifndef RBIMPL_ARITHMETIC_INT_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_INT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `int` and Ruby's.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/fixnum.h"
#include "ruby/internal/arithmetic/intptr_t.h"
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/compiler_is.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/value.h"
#include "ruby/internal/warning_push.h"
#include "ruby/assert.h"

#define RB_INT2NUM  rb_int2num_inline  /**< @alias{rb_int2num_inline} */
#define RB_NUM2INT  rb_num2int_inline  /**< @alias{rb_num2int_inline} */
#define RB_UINT2NUM rb_uint2num_inline /**< @alias{rb_uint2num_inline} */

#define FIX2INT    RB_FIX2INT          /**< @old{RB_FIX2INT} */
#define FIX2UINT   RB_FIX2UINT         /**< @old{RB_FIX2UINT} */
#define INT2NUM    RB_INT2NUM          /**< @old{RB_INT2NUM} */
#define NUM2INT    RB_NUM2INT          /**< @old{RB_NUM2INT} */
#define NUM2UINT   RB_NUM2UINT         /**< @old{RB_NUM2UINT} */
#define UINT2NUM   RB_UINT2NUM         /**< @old{RB_UINT2NUM} */

/** @cond INTERNAL_MACRO */
#define RB_FIX2INT  RB_FIX2INT
#define RB_NUM2UINT RB_NUM2UINT
#define RB_FIX2UINT RB_FIX2UINT
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Converts an instance of ::rb_cNumeric into C's `long`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `int`.
 * @return     The passed value converted into C's `long`.
 *
 * @internal
 *
 * Yes, the  API is  really strange.   It returns `long`,  but raises  when the
 * value is out of `int`.  This seems to  be due to the fact that Matz favoured
 * K&R before, and his machine at that moment was an ILP32 architecture.
 */
long rb_num2int(VALUE num);

/**
 * Identical to rb_num2int().
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `int`.
 * @return     The passed value converted into C's `long`.
 *
 * @internal
 *
 * This function seems to be a complete  waste of disk space.  @shyouhei has no
 * idea why this is a different thing from rb_num2short().
 */
long rb_fix2int(VALUE num);

/**
 * Converts an instance of ::rb_cNumeric into C's `unsigned long`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `unsigned int`.
 * @return     The passed value converted into C's `unsigned long`.
 *
 * @internal
 *
 * Yes, the API is really strange.  It returns `unsigned long`, but raises when
 * the value is out  of `unsigned int`.  This seems to be due  to the fact that
 * Matz  favoured K&R  before, and  his  machine at  that moment  was an  ILP32
 * architecture.
 */
unsigned long rb_num2uint(VALUE num);

/**
 * Identical to rb_num2uint().
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `unsigned int`.
 * @return     The passed value converted into C's `unsigned long`.
 *
 * @internal
 *
 * This function seems to be a complete  waste of disk space.  @shyouhei has no
 * idea why this is a different thing from rb_num2short().
 */
unsigned long rb_fix2uint(VALUE num);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Converts a Fixnum into C's `int`.
 *
 * @param[in]  x  Some Fixnum.
 * @pre        Must not pass anything other than a Fixnum.
 * @return     The passed value converted into C's `int`.
 */
static inline int
RB_FIX2INT(VALUE x)
{
    /* "FIX2INT raises a  TypeError if passed nil", says rubyspec.  Not sure if
     * that is a desired behaviour but just preserve backwards compatilibily.
     */
#if 0
    RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x));
#endif
    long ret;

    if /* constexpr */ (sizeof(int) < sizeof(long)) {
        ret = rb_fix2int(x);
    }
    else {
        ret = RB_FIX2LONG(x);
    }

    return RBIMPL_CAST((int)ret);
}

/**
 * Converts an instance of ::rb_cNumeric into C's `int`.
 *
 * @param[in]  x               Something numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `int`.
 * @return     The passed value converted into C's `int`.
 */
static inline int
rb_num2int_inline(VALUE x)
{
    long ret;

    if /* constexpr */ (sizeof(int) == sizeof(long)) {
        ret = RB_NUM2LONG(x);
    }
    else if (RB_FIXNUM_P(x)) {
        ret = rb_fix2int(x);
    }
    else {
        ret = rb_num2int(x);
    }

    return RBIMPL_CAST((int)ret);
}

/**
 * Converts an instance of ::rb_cNumeric into C's `unsigned int`.
 *
 * @param[in]  x               Something numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `unsigned int`.
 * @return     The passed value converted into C's `unsigned int`.
 */
RBIMPL_ATTR_ARTIFICIAL()
static inline unsigned int
RB_NUM2UINT(VALUE x)
{
    unsigned long ret;

    if /* constexpr */ (sizeof(int) < sizeof(long)) {
        ret = rb_num2uint(x);
    }
    else {
        ret = RB_NUM2ULONG(x);
    }

    return RBIMPL_CAST((unsigned int)ret);
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Converts a Fixnum into C's `int`.
 *
 * @param[in]  x  Some Fixnum.
 * @pre        Must not pass anything other than a Fixnum.
 * @return     The passed value converted into C's `int`.
 */
static inline unsigned int
RB_FIX2UINT(VALUE x)
{
#if 0 /* Ditto for RB_FIX2INT. */
    RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x));
#endif
    unsigned long ret;

    if /* constexpr */ (sizeof(int) < sizeof(long)) {
        ret = rb_fix2uint(x);
    }
    else {
        ret = RB_FIX2ULONG(x);
    }

    return RBIMPL_CAST((unsigned int)ret);
}

RBIMPL_WARNING_PUSH()
#if RBIMPL_COMPILER_IS(GCC)
RBIMPL_WARNING_IGNORED(-Wtype-limits) /* We can ignore them here. */
#elif RBIMPL_HAS_WARNING("-Wtautological-constant-out-of-range-compare")
RBIMPL_WARNING_IGNORED(-Wtautological-constant-out-of-range-compare)
#endif

/**
 * Converts a C's `int` into an instance of ::rb_cInteger.
 *
 * @param[in]  v  Arbitrary `int` value.
 * @return     An instance of ::rb_cInteger.
 */
static inline VALUE
rb_int2num_inline(int v)
{
    if (RB_FIXABLE(v))
        return RB_INT2FIX(v);
    else
        return rb_int2big(v);
}

/**
 * Converts a C's `unsigned int` into an instance of ::rb_cInteger.
 *
 * @param[in]  v  Arbitrary `unsigned int` value.
 * @return     An instance of ::rb_cInteger.
 */
static inline VALUE
rb_uint2num_inline(unsigned int v)
{
    if (RB_POSFIXABLE(v))
        return RB_LONG2FIX(RBIMPL_CAST((long)v));
    else
        return rb_uint2big(v);
}

RBIMPL_WARNING_POP()

#endif /* RBIMPL_ARITHMETIC_INT_H */
PK*J[.���SS(include/ruby/internal/arithmetic/short.hnu�[���#ifndef RBIMPL_ARITHMETIC_SHORT_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_SHORT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Arithmetic conversion between C's `short` and Ruby's.
 *
 * Shyouhei  wonders:  why  there  is   no  SHORT2NUM,  given  there  are  both
 * #USHORT2NUM and #CHR2FIX?
 */
#include "ruby/internal/value.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/special_consts.h"

#define RB_NUM2SHORT  rb_num2short_inline /**< @alias{rb_num2short_inline} */
#define RB_NUM2USHORT rb_num2ushort       /**< @alias{rb_num2ushort} */
#define NUM2SHORT     RB_NUM2SHORT        /**< @old{RB_NUM2SHORT} */
#define NUM2USHORT    RB_NUM2USHORT       /**< @old{RB_NUM2USHORT} */
#define USHORT2NUM    RB_INT2FIX          /**< @old{RB_INT2FIX} */
#define RB_FIX2SHORT  rb_fix2short        /**< @alias{rb_fix2ushort} */
#define FIX2SHORT     RB_FIX2SHORT        /**< @old{RB_FIX2SHORT} */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Converts an instance of ::rb_cNumeric into C's `short`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `short`.
 * @return     The passed value converted into C's `short`.
 */
short rb_num2short(VALUE num);

/**
 * Converts an instance of ::rb_cNumeric into C's `unsigned short`.
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `unsigned short`.
 * @return     The passed value converted into C's `unsigned short`.
 */
unsigned short rb_num2ushort(VALUE num);

/**
 * Identical to rb_num2short().
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `short`.
 * @return     The passed value converted into C's `short`.
 *
 * @internal
 *
 * This function seems to be a complete  waste of disk space.  @shyouhei has no
 * idea why this is a different thing from rb_num2short().
 */
short rb_fix2short(VALUE num);

/**
 * Identical to rb_num2ushort().
 *
 * @param[in]  num             Something numeric.
 * @exception  rb_eTypeError   `num` is not a numeric.
 * @exception  rb_eRangeError  `num` is out of range of `unsigned short`.
 * @return     The passed value converted into C's `unsigned short`.
 *
 * @internal
 *
 * This function seems to be a complete  waste of disk space.  @shyouhei has no
 * idea why this is a different thing from rb_num2ushort().
 */
unsigned short rb_fix2ushort(VALUE num);
RBIMPL_SYMBOL_EXPORT_END()

/**
 * Identical to rb_num2short().
 *
 * @param[in]  x               Something numeric.
 * @exception  rb_eTypeError   `x` is not a numeric.
 * @exception  rb_eRangeError  `x` is out of range of `short`.
 * @return     The passed value converted into C's `short`.
 *
 * @internal
 *
 * This function seems to  be a complete waste of time.   @shyouhei has no idea
 * why this is a different thing from rb_num2short().
 */
static inline short
rb_num2short_inline(VALUE x)
{
    if (RB_FIXNUM_P(x))
        return rb_fix2short(x);
    else
        return rb_num2short(x);
}

#endif /* RBIMPL_ARITHMETIC_SHORT_H */
PK*J[<&xXRRinclude/ruby/internal/core.hnu�[���#ifndef RBIMPL_CORE_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_CORE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Core data structures, definitions and manipulations.
 */
#include "ruby/internal/core/rarray.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/core/rbignum.h"
#include "ruby/internal/core/rclass.h"
#include "ruby/internal/core/rdata.h"
#include "ruby/internal/core/rfile.h"
#include "ruby/internal/core/rhash.h"
#include "ruby/internal/core/robject.h"
#include "ruby/internal/core/rregexp.h"
#include "ruby/internal/core/rstring.h"
#include "ruby/internal/core/rstruct.h"
#include "ruby/internal/core/rtypeddata.h"
#endif /* RBIMPL_CORE_H */
PK*J[�E��ܗܗinclude/ruby/internal/anyargs.hnu�[���#ifndef RBIMPL_ANYARGS_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ANYARGS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Function overloads to issue warnings around #ANYARGS.
 *
 * For instance ::rb_define_method  takes a pointer to  #ANYARGS -ed functions,
 * which in  fact varies 18  different prototypes.   We still need  to preserve
 * #ANYARGS for storages but why not check the consistencies if possible.  With
 * those complex macro overlays defined in  this header file, use of a function
 * pointer gets checked against the corresponding arity argument.
 *
 * ### Q&A ###
 *
 * - Q: Where did the magic number "18" came from in the description above?
 *
 * - A: Count the case branch of `vm_method.c:call_cfunc_invoker_func()`.  Note
 *      also that the 18  branches has lasted for at least  25 years.  See also
 *      commit 200e0ee2fd3c1c006c528874a88f684447215524.
 *
 * - Q: What is this `__weakref__` thing?
 *
 * - A: That is a kind of function overloading mechanism that GCC provides.  In
 *      this   case  for   instance  `rb_define_method_00`   is  an   alias  of
 *      ::rb_define_method, with a strong type.
 *
 * - Q: What is this `__transparent_union__` thing?
 *
 *   A: That  is  another  kind  of function  overloading  mechanism  that  GCC
 *      provides.   In this  case  the attributed  function  pointer is  either
 *      `VALUE(*)(int,VALUE*,VALUE)` or `VALUE(*)(int,const VALUE*,VALUE)`.
 *
 *      This is better than `void*` or #ANYARGS because we can reject all other
 *      possibilities than the two.
 *
 * - Q: What does this #rb_define_method macro mean?
 *
 * - A: It  selects  appropriate  alias  of  the  ::rb_define_method  function,
 *      depending on the last (arity) argument.
 *
 * - Q: Why the special case for ::rb_f_notimplement ?
 *
 * - A: Function   pointer  to   ::rb_f_notimplement   is   special  cased   in
 *      `vm_method.c:rb_add_method_cfunc()`.   That should  be  handled by  the
 *      `__builtin_choose_expr`   chain  inside   of  #rb_define_method   macro
 *      expansion.      In    order     to    do     so,    comparison     like
 *      `(func == rb_f_notimplement)`        is        inappropriate        for
 *      `__builtin_choose_expr`'s  expression  (which  must be  a  compile-time
 *      integer constant  but the address  of ::rb_f_notimplement is  not fixed
 *      until      the      linker).        Instead      we      are      using
 *      `__builtin_types_compatible_p`, and in doing  so we need to distinguish
 *      ::rb_f_notimplement from others, by type.
 */
#include "ruby/internal/attr/maybe_unused.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/weakref.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/config.h"
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/intern/class.h"
#include "ruby/internal/intern/vm.h"
#include "ruby/internal/method.h"
#include "ruby/internal/value.h"
#include "ruby/backward/2/stdarg.h"

#if defined(__cplusplus)
# include "ruby/backward/cxxanyargs.hpp"

#elif defined(_WIN32) || defined(__CYGWIN__)
# /* Skip due to [Bug #16134] */
# define RBIMPL_CAST_FN_PTR 1

#elif ! RBIMPL_HAS_ATTRIBUTE(transparent_union)
# /* :TODO: improve here, please find a way to support. */
# define RBIMPL_CAST_FN_PTR 1

#elif ! defined(HAVE_VA_ARGS_MACRO)
# /* :TODO: improve here, please find a way to support. */
# define RBIMPL_CAST_FN_PTR 1

#else
# /** @cond INTERNAL_MACRO */
# if ! defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P)
#  define RBIMPL_CFUNC_IS_rb_f_notimplement(f) 0
# else
#  define RBIMPL_CFUNC_IS_rb_f_notimplement(f) \
    __builtin_types_compatible_p(             \
        __typeof__(f),                        \
        __typeof__(rb_f_notimplement))
# endif

# if ! defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
#  define RBIMPL_ANYARGS_DISPATCH(expr, truthy, falsy) (falsy)
# else
#  define RBIMPL_ANYARGS_DISPATCH(expr, truthy, falsy) \
    __builtin_choose_expr(                            \
        __builtin_choose_expr(                        \
            __builtin_constant_p(expr),               \
            (expr), 0),                               \
        (truthy), (falsy))
# endif

# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_singleton_method_m2, rb_define_singleton_method_m3)
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_singleton_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m2(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) ==  0, rb_define_singleton_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_m1(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) ==  1, rb_define_singleton_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_00(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) ==  2, rb_define_singleton_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_01(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) ==  3, rb_define_singleton_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_02(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) ==  4, rb_define_singleton_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_03(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) ==  5, rb_define_singleton_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_04(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) ==  6, rb_define_singleton_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_05(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) ==  7, rb_define_singleton_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_06(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) ==  8, rb_define_singleton_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_07(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) ==  9, rb_define_singleton_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_08(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_singleton_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_09(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_singleton_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_10(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_singleton_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_11(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_singleton_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_12(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_singleton_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_13(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_singleton_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_14(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m2(n) RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_protected_method_m2, rb_define_protected_method_m3)
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m1(n) RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_protected_method_m1, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m2(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_00(n) RBIMPL_ANYARGS_DISPATCH((n) ==  0, rb_define_protected_method_00, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_m1(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_01(n) RBIMPL_ANYARGS_DISPATCH((n) ==  1, rb_define_protected_method_01, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_00(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_02(n) RBIMPL_ANYARGS_DISPATCH((n) ==  2, rb_define_protected_method_02, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_01(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_03(n) RBIMPL_ANYARGS_DISPATCH((n) ==  3, rb_define_protected_method_03, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_02(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_04(n) RBIMPL_ANYARGS_DISPATCH((n) ==  4, rb_define_protected_method_04, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_03(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_05(n) RBIMPL_ANYARGS_DISPATCH((n) ==  5, rb_define_protected_method_05, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_04(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_06(n) RBIMPL_ANYARGS_DISPATCH((n) ==  6, rb_define_protected_method_06, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_05(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_07(n) RBIMPL_ANYARGS_DISPATCH((n) ==  7, rb_define_protected_method_07, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_06(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_08(n) RBIMPL_ANYARGS_DISPATCH((n) ==  8, rb_define_protected_method_08, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_07(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_09(n) RBIMPL_ANYARGS_DISPATCH((n) ==  9, rb_define_protected_method_09, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_08(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_10(n) RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_protected_method_10, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_09(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_11(n) RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_protected_method_11, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_10(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_12(n) RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_protected_method_12, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_11(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_13(n) RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_protected_method_13, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_12(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_14(n) RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_protected_method_14, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_13(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_15(n) RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_protected_method_15, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_14(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m2(n)   RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_private_method_m2,   rb_define_private_method_m3)
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m1(n)   RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_private_method_m1,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m2(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_00(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  0, rb_define_private_method_00,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_m1(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_01(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  1, rb_define_private_method_01,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_00(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_02(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  2, rb_define_private_method_02,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_01(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_03(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  3, rb_define_private_method_03,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_02(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_04(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  4, rb_define_private_method_04,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_03(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_05(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  5, rb_define_private_method_05,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_04(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_06(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  6, rb_define_private_method_06,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_05(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_07(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  7, rb_define_private_method_07,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_06(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_08(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  8, rb_define_private_method_08,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_07(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_09(n)   RBIMPL_ANYARGS_DISPATCH((n) ==  9, rb_define_private_method_09,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_08(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_10(n)   RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_private_method_10,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_09(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_11(n)   RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_private_method_11,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_10(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_12(n)   RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_private_method_12,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_11(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_13(n)   RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_private_method_13,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_12(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_14(n)   RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_private_method_14,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_13(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_15(n)   RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_private_method_15,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_14(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m2(n)  RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_module_function_m2,  rb_define_module_function_m3)
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m1(n)  RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_module_function_m1,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m2(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_00(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  0, rb_define_module_function_00,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_m1(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_01(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  1, rb_define_module_function_01,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_00(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_02(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  2, rb_define_module_function_02,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_01(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_03(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  3, rb_define_module_function_03,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_02(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_04(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  4, rb_define_module_function_04,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_03(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_05(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  5, rb_define_module_function_05,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_04(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_06(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  6, rb_define_module_function_06,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_05(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_07(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  7, rb_define_module_function_07,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_06(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_08(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  8, rb_define_module_function_08,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_07(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_09(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  9, rb_define_module_function_09,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_08(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_10(n)  RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_module_function_10,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_09(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_11(n)  RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_module_function_11,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_10(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_12(n)  RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_module_function_12,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_11(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_13(n)  RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_module_function_13,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_12(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_14(n)  RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_module_function_14,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_13(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_15(n)  RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_module_function_15,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_14(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m2(n)  RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_global_function_m2,  rb_define_global_function_m3)
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m1(n)  RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_global_function_m1,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m2(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_00(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  0, rb_define_global_function_00,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_m1(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_01(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  1, rb_define_global_function_01,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_00(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_02(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  2, rb_define_global_function_02,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_01(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_03(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  3, rb_define_global_function_03,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_02(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_04(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  4, rb_define_global_function_04,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_03(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_05(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  5, rb_define_global_function_05,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_04(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_06(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  6, rb_define_global_function_06,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_05(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_07(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  7, rb_define_global_function_07,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_06(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_08(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  8, rb_define_global_function_08,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_07(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_09(n)  RBIMPL_ANYARGS_DISPATCH((n) ==  9, rb_define_global_function_09,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_08(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_10(n)  RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_global_function_10,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_09(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_11(n)  RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_global_function_11,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_10(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_12(n)  RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_global_function_12,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_11(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_13(n)  RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_global_function_13,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_12(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_14(n)  RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_global_function_14,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_13(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_15(n)  RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_global_function_15,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_14(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m2(n)        RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_method_id_m2,        rb_define_method_id_m3)
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m1(n)        RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_method_id_m1,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m2(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_00(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  0, rb_define_method_id_00,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_m1(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_01(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  1, rb_define_method_id_01,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_00(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_02(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  2, rb_define_method_id_02,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_01(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_03(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  3, rb_define_method_id_03,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_02(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_04(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  4, rb_define_method_id_04,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_03(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_05(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  5, rb_define_method_id_05,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_04(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_06(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  6, rb_define_method_id_06,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_05(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_07(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  7, rb_define_method_id_07,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_06(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_08(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  8, rb_define_method_id_08,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_07(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_09(n)        RBIMPL_ANYARGS_DISPATCH((n) ==  9, rb_define_method_id_09,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_08(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_10(n)        RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_method_id_10,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_09(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_11(n)        RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_method_id_11,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_10(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_12(n)        RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_method_id_12,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_11(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_13(n)        RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_method_id_13,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_12(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_14(n)        RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_method_id_14,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_13(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_15(n)        RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_method_id_15,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_14(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_m2(n)           RBIMPL_ANYARGS_DISPATCH((n) == -2, rb_define_method_m2,           rb_define_method_m3)
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_m1(n)           RBIMPL_ANYARGS_DISPATCH((n) == -1, rb_define_method_m1,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_m2(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_00(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  0, rb_define_method_00,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_m1(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_01(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  1, rb_define_method_01,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_00(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_02(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  2, rb_define_method_02,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_01(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_03(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  3, rb_define_method_03,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_02(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_04(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  4, rb_define_method_04,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_03(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_05(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  5, rb_define_method_05,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_04(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_06(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  6, rb_define_method_06,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_05(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_07(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  7, rb_define_method_07,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_06(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_08(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  8, rb_define_method_08,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_07(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_09(n)           RBIMPL_ANYARGS_DISPATCH((n) ==  9, rb_define_method_09,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_08(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_10(n)           RBIMPL_ANYARGS_DISPATCH((n) == 10, rb_define_method_10,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_09(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_11(n)           RBIMPL_ANYARGS_DISPATCH((n) == 11, rb_define_method_11,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_10(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_12(n)           RBIMPL_ANYARGS_DISPATCH((n) == 12, rb_define_method_12,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_11(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_13(n)           RBIMPL_ANYARGS_DISPATCH((n) == 13, rb_define_method_13,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_12(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_14(n)           RBIMPL_ANYARGS_DISPATCH((n) == 14, rb_define_method_14,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_13(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_15(n)           RBIMPL_ANYARGS_DISPATCH((n) == 15, rb_define_method_15,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_14(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_singleton_method_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method_15(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method(n, f) RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_protected_method_notimpl, RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method_15(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_private_method(n, f)   RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_private_method_notimpl,   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method_15(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_module_function(n, f)  RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_module_function_notimpl,  RBIMPL_ANYARGS_DISPATCH_rb_define_module_function_15(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_global_function(n, f)  RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_global_function_notimpl,  RBIMPL_ANYARGS_DISPATCH_rb_define_global_function_15(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method_id(n, f)        RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_method_id_notimpl,        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id_15(n))
# define RBIMPL_ANYARGS_DISPATCH_rb_define_method(n, f)           RBIMPL_ANYARGS_DISPATCH(RBIMPL_CFUNC_IS_rb_f_notimplement(f), rb_define_method_notimpl,           RBIMPL_ANYARGS_DISPATCH_rb_define_method_15(n))
# define RBIMPL_ANYARGS_ATTRSET(sym) RBIMPL_ATTR_MAYBE_UNUSED() RBIMPL_ATTR_NONNULL(()) RBIMPL_ATTR_WEAKREF(sym)
# define RBIMPL_ANYARGS_DECL(sym, ...) \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _notimpl(__VA_ARGS__, VALUE(*)(int, const VALUE *, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m3(__VA_ARGS__, VALUE(*)(ANYARGS), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m2(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _m1(__VA_ARGS__, VALUE(*)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _00(__VA_ARGS__, VALUE(*)(VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _01(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _02(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _03(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _04(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _05(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _06(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _07(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _08(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _09(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _10(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _11(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _12(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _13(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _14(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int); \
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _15(__VA_ARGS__, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE), int);
RBIMPL_ANYARGS_DECL(rb_define_singleton_method, VALUE, const char *)
RBIMPL_ANYARGS_DECL(rb_define_protected_method, VALUE, const char *)
RBIMPL_ANYARGS_DECL(rb_define_private_method, VALUE, const char *)
RBIMPL_ANYARGS_DECL(rb_define_module_function, VALUE, const char *)
RBIMPL_ANYARGS_DECL(rb_define_global_function, const char *)
RBIMPL_ANYARGS_DECL(rb_define_method_id, VALUE, ID)
RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *)
/** @endcond */

/**
 * @brief  Defines klass\#mid.
 * @see    ::rb_define_method
 * @param  klass  Where the method lives.
 * @param  mid    Name of the defining method.
 * @param  func   Implementation of klass\#mid.
 * @param  arity  Arity of klass\#mid.
 */
#define rb_define_method(klass, mid, func, arity)           RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid), (func), (arity))

/**
 * @brief  Defines klass\#mid.
 * @see    ::rb_define_method_id
 * @param  klass  Where the method lives.
 * @param  mid    Name of the defining method.
 * @param  func   Implementation of klass\#mid.
 * @param  arity  Arity of klass\#mid.
 */
#define rb_define_method_id(klass, mid, func, arity)        RBIMPL_ANYARGS_DISPATCH_rb_define_method_id((arity), (func))((klass), (mid), (func), (arity))

/**
 * @brief  Defines obj.mid.
 * @see    ::rb_define_singleton_method
 * @param  obj    Where the method lives.
 * @param  mid    Name of the defining method.
 * @param  func   Implementation of obj.mid.
 * @param  arity  Arity of obj.mid.
 */
#define rb_define_singleton_method(obj, mid, func, arity)   RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method((arity), (func))((obj), (mid), (func), (arity))

/**
 * @brief  Defines klass\#mid and make it protected.
 * @see    ::rb_define_protected_method
 * @param  klass  Where the method lives.
 * @param  mid    Name of the defining method.
 * @param  func   Implementation of klass\#mid.
 * @param  arity  Arity of klass\#mid.
 */
#define rb_define_protected_method(klass, mid, func, arity) RBIMPL_ANYARGS_DISPATCH_rb_define_protected_method((arity), (func))((klass), (mid), (func), (arity))

/**
 * @brief  Defines klass\#mid and make it private.
 * @see    ::rb_define_private_method
 * @param  klass  Where the method lives.
 * @param  mid    Name of the defining method.
 * @param  func   Implementation of klass\#mid.
 * @param  arity  Arity of klass\#mid.
 */
#define rb_define_private_method(klass, mid, func, arity)   RBIMPL_ANYARGS_DISPATCH_rb_define_private_method((arity), (func))((klass), (mid), (func), (arity))

/**
 * @brief  Defines mod\#mid and make it a module function.
 * @see    ::rb_define_module_function
 * @param  mod    Where the method lives.
 * @param  mid    Name of the defining method.
 * @param  func   Implementation of mod\#mid.
 * @param  arity  Arity of mod\#mid.
 */
#define rb_define_module_function(mod, mid, func, arity)    RBIMPL_ANYARGS_DISPATCH_rb_define_module_function((arity), (func))((mod), (mid), (func), (arity))

/**
 * @brief  Defines ::rb_mKerbel \#mid.
 * @see    ::rb_define_global_function
 * @param  mid    Name of the defining method.
 * @param  func   Implementation of ::rb_mKernel \#mid.
 * @param  arity  Arity of ::rb_mKernel \#mid.
 */
#define rb_define_global_function(mid, func, arity)         RBIMPL_ANYARGS_DISPATCH_rb_define_global_function((arity), (func))((mid), (func), (arity))

#endif /* __cplusplus */

#if defined(RBIMPL_CAST_FN_PTR) && !defined(__cplusplus)
/* In C23, K&R style prototypes are gone and so `void foo(ANYARGS)` became
 * equivalent to `void foo(void)` unlike in earlier versions. This is a problem
 * for rb_define_* functions since that makes all valid functions one can pass
 * trip -Wincompatible-pointer-types, which we treat as errors. This is mostly
 * not a problem for the __builtin_choose_expr path, but outside of that we
 * need to add a cast for compatibility.
 */
#define rb_define_method(klass, mid, func, arity)           rb_define_method((klass), (mid), (VALUE (*)(ANYARGS))(func), (arity))
#define rb_define_method_id(klass, mid, func, arity)        rb_define_method_id((klass), (mid), (VALUE (*)(ANYARGS))(func), (arity))
#define rb_define_singleton_method(obj, mid, func, arity)   rb_define_singleton_method((obj), (mid), (VALUE (*)(ANYARGS))(func), (arity))
#define rb_define_protected_method(klass, mid, func, arity) rb_define_protected_method((klass), (mid), (VALUE (*)(ANYARGS))(func), (arity))
#define rb_define_private_method(klass, mid, func, arity)   rb_define_private_method((klass), (mid), (VALUE (*)(ANYARGS))(func), (arity))
#define rb_define_module_function(mod, mid, func, arity)    rb_define_module_function((mod), (mid), (VALUE (*)(ANYARGS))(func), (arity))
#define rb_define_global_function(mid, func, arity)         rb_define_global_function((mid), (VALUE (*)(ANYARGS))(func), (arity))

#undef RBIMPL_CAST_FN_PTR
#endif /* defined(RBIMPL_CAST_FN_PTR) && !defined(__cplusplus) */

/**
 * This  macro is  to properly  cast  a function  parameter of  *_define_method
 * family.  It  has been  around since  1.x era so  you can  maximise backwards
 * compatibility by using it.
 *
 * ```CXX
 * rb_define_method(klass, "method", RUBY_METHOD_FUNC(func), arity);
 * ```
 *
 * @param  func  A pointer to a function that implements a method.
 */
#if ! defined(RUBY_DEVEL)
# define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))

#elif ! RUBY_DEVEL
# define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))

#elif ! defined(rb_define_method)
# define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))

#else
# define RUBY_METHOD_FUNC(func) (func)

#endif

#endif /* RBIMPL_ANYARGS_H */
PK*J[��sD;/;/ include/ruby/internal/variable.hnu�[���#ifndef RBIMPL_VARIABLE_H                            /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_VARIABLE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Declares rb_define_variable().
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Type that represents a global variable getter function.
 *
 * @param[in]      id    The variable name.
 * @param[in,out]  data  Where the value is stored.
 * @return         The value that shall be visible from Ruby.
 */
typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);

/**
 * Type that represents a global variable setter function.
 *
 * @param[in]      val   The value to set.
 * @param[in]      id    The variable name.
 * @param[in,out]  data  Where the value is to be stored.
 */
typedef void  rb_gvar_setter_t(VALUE val, ID id, VALUE *data);

/**
 * Type that represents a global variable marker function.
 *
 * @param[in]  var  Where the value is to be stored.
 */
typedef void  rb_gvar_marker_t(VALUE *var);

/**
 * @deprecated
 *
 * This function has no actual usage (than in ruby itself).  Please ignore.  It
 * was a bad idea to expose this function  to 3rd parties, but we can no longer
 * delete it.
 */
rb_gvar_getter_t rb_gvar_undef_getter;

/**
 * @deprecated
 *
 * This function has no actual usage (than in ruby itself).  Please ignore.  It
 * was a bad idea to expose this function  to 3rd parties, but we can no longer
 * delete it.
 */
rb_gvar_setter_t rb_gvar_undef_setter;

/**
 * @deprecated
 *
 * This function has no actual usage (than in ruby itself).  Please ignore.  It
 * was a bad idea to expose this function  to 3rd parties, but we can no longer
 * delete it.
 */
rb_gvar_marker_t rb_gvar_undef_marker;

/**
 * This is the getter function that  backs global variables defined from a ruby
 * script.  Extension  libraries can use this  if its global variable  needs no
 * custom logic.
 */
rb_gvar_getter_t rb_gvar_val_getter;

/**
 * This is the setter function that  backs global variables defined from a ruby
 * script.  Extension  libraries can use this  if its global variable  needs no
 * custom logic.
 */
rb_gvar_setter_t rb_gvar_val_setter;

/**
 * This is the setter function that  backs global variables defined from a ruby
 * script.  Extension  libraries can use this  if its global variable  needs no
 * custom logic.
 */
rb_gvar_marker_t rb_gvar_val_marker;

/**
 * @deprecated
 *
 * This function has no actual usage (than in ruby itself).  Please ignore.  It
 * was a bad idea to expose this function  to 3rd parties, but we can no longer
 * delete it.
 */
rb_gvar_getter_t rb_gvar_var_getter;

/**
 * @deprecated
 *
 * This function has no actual usage (than in ruby itself).  Please ignore.  It
 * was a bad idea to expose this function  to 3rd parties, but we can no longer
 * delete it.
 */
rb_gvar_setter_t rb_gvar_var_setter;

/**
 * @deprecated
 *
 * This function has no actual usage (than in ruby itself).  Please ignore.  It
 * was a bad idea to expose this function  to 3rd parties, but we can no longer
 * delete it.
 */
rb_gvar_marker_t rb_gvar_var_marker;

RBIMPL_ATTR_NORETURN()
/**
 * This function just raises ::rb_eNameError.   Handy when you want to prohibit
 * a global variable from being squashed by someone.
 */
rb_gvar_setter_t rb_gvar_readonly_setter;

RBIMPL_ATTR_NONNULL(())
/**
 * "Shares" a global variable between Ruby and C.  Normally a Ruby-level global
 * variable  is stored  somewhere deep  inside of  the interpreter's  execution
 * context, but this way you can explicitly specify its storage.
 *
 * ```CXX
 * static VALUE foo;
 *
 * extern "C" void
 * init_Foo(void)
 * {
 *     foo = rb_eval_string("...");
 *     rb_define_variable("$foo", &foo);
 * }
 * ```
 *
 * In the above  example a Ruby global  variable named `$foo` is stored  in a C
 * global variable named `foo`.
 *
 * @param[in]  name  Variable (Ruby side).
 * @param[in]  var   Variable (C side).
 * @post       Ruby level  global variable named  `name` is defined  if absent,
 *             and its storage is set to `var`.
 */
void rb_define_variable(const char *name, VALUE *var);

RBIMPL_ATTR_NONNULL((1))
/**
 * Defines a global variable that  is purely function-backended.  By using this
 * API a programmer can define a  global variable that dynamically changes from
 * time to time.
 *
 * @param[in]  name   Variable name, in C's string.
 * @param[in]  getter A getter function.
 * @param[in]  setter A setter function.
 * @post       Ruby level global variable named `name` is defined if absent.
 *
 * @internal
 *
 * @shyouhei doesn't know if this is an  Easter egg or an official feature, but
 * you can pass  0 to the third argument (setter).   That effectively nullifies
 * any efforts to write to the defining global variable.
 */
void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical to  rb_define_virtual_variable(), but can also  specify a storage.
 * A programmer can use the storage for e.g.  memoisation, storing intermediate
 * computation result, etc.
 *
 * Also you can pass 0 to this function, unlike other variants:
 *
 *   - When getter is 0 ::rb_gvar_var_getter is used instead.
 *   - When setter is 0 ::rb_gvar_var_setter is used instead.
 *   - When data is 0, you must  specify a non-zero setter function.  Otherwise
 *     ::rb_gvar_var_setter tries to write to `*NULL`, and just causes SEGV.
 *
 * @param[in]  name   Variable name, in C's string.
 * @param[in]  var    Variable storage.
 * @param[in]  getter A getter function.
 * @param[in]  setter A setter function.
 * @post       Ruby level global variable named `name` is defined if absent.
 */
void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_define_variable(), except it does not allow Ruby programs to
 * assign values  to such  global variable.   C codes can  still set  values at
 * will.   This  could be  handy  for  you  when implementing  an  `errno`-like
 * experience, where  a method updates a  read-only global variable as  a side-
 * effect.
 *
 * @param[in]  name  Variable (Ruby side).
 * @param[in]  var   Variable (C side).
 * @post       Ruby level  global variable named  `name` is defined  if absent,
 *             and its storage is set to `var`.
 */
void rb_define_readonly_variable(const char *name, const VALUE *var);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a Ruby level constant under a namespace.
 *
 * @param[out]  klass            Namespace for the constant to reside.
 * @param[in]   name             Name of the constant.
 * @param[in]   val              Value of the constant.
 * @exception   rb_eTypeError    `klass` is not a kind of ::rb_cModule.
 * @exception   rb_eFrozenError  `klass` is frozen.
 * @post        Ruby level constant `klass::name` is defined to be `val`.
 * @note        This API  does not stop  you from  defining a constant  that is
 *              unable  to   reach  from   ruby  (like  for   instance  passing
 *              non-capital letter to `name`).
 * @note        This API  does not  stop you from  overwriting a  constant that
 *              already exist.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
void rb_define_const(VALUE klass, const char *name, VALUE val);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical  to  rb_define_const(),  except   it  defines  that  of  "global",
 * i.e. toplevel constant.
 *
 * @param[in]   name             Name of the constant.
 * @param[in]   val              Value of the constant.
 * @exception   rb_eFrozenError  ::rb_cObject is frozen.
 * @post        Ruby level constant \::name is defined to be `val`.
 * @note        This API  does not stop  you from  defining a constant  that is
 *              unable  to   reach  from   ruby  (like  for   instance  passing
 *              non-capital letter to `name`).
 * @note        This API  does not  stop you from  overwriting a  constant that
 *              already exist.
 */
void rb_define_global_const(const char *name, VALUE val);

RBIMPL_ATTR_NONNULL(())
/**
 * Asserts  that the  given  constant  is deprecated.   Attempt  to refer  such
 * constant will produce a warning.
 *
 * @param[in]  mod              Namespace of the target constant.
 * @param[in]  name             Name of the constant.
 * @exception  rb_eNameError    No such constant.
 * @exception  rb_eFrozenError  `mod` is frozen.
 * @post       `name` under `mod` is deprecated.
 */
void rb_deprecate_constant(VALUE mod, const char *name);

RBIMPL_ATTR_NONNULL(())
/**
 * Assigns to a global variable.
 *
 * @param[in]  name  Target global variable.
 * @param[in]  val   Value to assign.
 * @return     Passed value.
 * @post       Ruby level  global variable named  `name` is defined  if absent,
 *             whose value is set to `val`.
 *
 * @internal
 *
 * Above  description  is  in  fact   inaccurate.   This  API  interfaces  with
 * `set_trace_func`.
 */
VALUE rb_gv_set(const char *name, VALUE val);

RBIMPL_ATTR_NONNULL(())
/**
 * Obtains a global variable.
 *
 * @param[in]  name       Global variable to query.
 * @retval     RUBY_Qnil  The global variable does not exist.
 * @retval     otherwise  The value assigned to the global variable.
 *
 * @internal
 *
 * Unlike rb_gv_set(), there is no way to trace this function.
 */
VALUE rb_gv_get(const char *name);

RBIMPL_ATTR_NONNULL(())
/**
 * Obtains an instance variable.
 *
 * @param[in]  obj                Target object.
 * @param[in]  name               Target instance variable to query.
 * @exception  rb_eEncodingError  `name` is corrupt (contains Hanzi etc.).
 * @retval     RUBY_nil           No such instance variable.
 * @retval     otherwise          The value assigned to the instance variable.
 */
VALUE rb_iv_get(VALUE obj, const char *name);

RBIMPL_ATTR_NONNULL(())
/**
 * Assigns to an instance variable.
 *
 * @param[out]  obj                Target object.
 * @param[in]   name               Target instance variable.
 * @param[in]   val                Value to assign.
 * @exception   rb_eFrozenError    Can't modify `obj`.
 * @exception   rb_eArgError       `obj` has too many instance variables.
 * @return      Passed value.
 * @post        An  instance variable  named  `name` is  defined  if absent  on
 *              `obj`, whose value is set to `val`.
 *
 * @internal
 *
 * This function does not stop you form creating an ASCII-incompatible instance
 * variable, but there is no way to get one because rb_iv_get raises exceptions
 * for such things.  This design seems broken...  But no idea why.
 */
VALUE rb_iv_set(VALUE obj, const char *name, VALUE val);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_VARIABLE_H */
PK*J[�*UU include/ruby/internal/stdalign.hnu�[���#ifndef RBIMPL_STDALIGN_H                            /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_STDALIGN_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ALIGNAS / #RBIMPL_ALIGNOF
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#include "ruby/internal/compiler_is.h"
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/has/declspec_attribute.h"
#include "ruby/internal/has/feature.h"

/**
 * Wraps (or simulates) `alignas`. This is C++11's `alignas` and is _different_
 * from C11 `_Alignas`.  For instance,
 *
 * ```CXX
 * typedef struct alignas(128) foo { int foo } foo;
 * ```
 *
 * is a valid C++ while
 *
 * ```C
 * typedef struct _Alignas(128) foo { int foo } foo;
 * ```
 *
 * is an invalid C because:
 *
 * - You cannot `struct _Alignas`.
 * - A `typedef` cannot have alignments.
 */
#if defined(__cplusplus) && RBIMPL_HAS_FEATURE(cxx_alignas)
# define RBIMPL_ALIGNAS alignas

#elif defined(__cplusplus) && (__cplusplus >= 201103L)
# define RBIMPL_ALIGNAS alignas

#elif defined(__INTEL_CXX11_MODE__)
# define RBIMPL_ALIGNAS alignas

#elif defined(__GXX_EXPERIMENTAL_CXX0X__)
# define RBIMPL_ALIGNAS alignas

#elif RBIMPL_HAS_DECLSPEC_ATTRIBUTE(align)
# define RBIMPL_ALIGNAS(_) __declspec(align(_))

#elif RBIMPL_HAS_ATTRIBUTE(aligned)
# define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))

#else
# define RBIMPL_ALIGNAS(_) /* void */
#endif

/**
 * Wraps (or simulates) `alignof`.
 *
 * We want C11's `_Alignof`.  However in spite of its clear language, compilers
 * (including GCC  and clang) tend to  have buggy implementations.  We  have to
 * avoid such things to resort to our own version.
 *
 * @see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023
 * @see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69560
 * @see https://bugs.llvm.org/show_bug.cgi?id=26547
 */
#if defined(__DOXYGEN__)
# define RBIMPL_ALIGNOF alignof
#elif defined(__cplusplus)
# /* C++11 `alignof()` can be buggy. */
# /* see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69560 */
# /* But don't worry, we can use templates. */
# define RBIMPL_ALIGNOF(T) (static_cast<size_t>(ruby::rbimpl_alignof<T>::value))

namespace ruby {
template<typename T>
struct rbimpl_alignof {
    typedef struct {
        char _;
        T t;
    } type;

    enum {
        value = offsetof(type, t)
    };
};
}

#elif RBIMPL_COMPILER_IS(MSVC)
# /* Windows have no alignment glitch.*/
# define RBIMPL_ALIGNOF __alignof

#elif defined(HAVE__ALIGNOF)
# /* Autoconf detected availability of a sane `_Alignof()`. */
# define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T))

#else
# /* :BEWARE:  This is  the last  resort.   If your  compiler somehow  supports
#  * querying the alignment of a type,  you definitely should use that instead.
#  * There are 2 known pitfalls for this fallback implementation:
#  *
#  * First, it is either an undefined  behaviour (C) or an explicit error (C++)
#  * to define a  struct inside of `offsetof`.  C compilers  tend to accept such
#  * things, but AFAIK C++ has no room to allow.
#  *
#  * Second, there exist T  such that `struct { char _; T t;  }` is invalid.  A
#  * known example is  when T is a  struct with a flexible  array member.  Such
#  * struct cannot be enclosed into another one.
#  */
# /* see: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2083.htm */
# /* see: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm */
# define RBIMPL_ALIGNOF(T) offsetof(struct { char _; T t; }, t)

#endif

#endif /* RBIMPL_STDALIGN_H */
PK*J[f���gg"include/ruby/internal/constant_p.hnu�[���#ifndef RBIMPL_CONSTANT_P_H                          /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_CONSTANT_P_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_CONSTANT_P.
 *
 * Note that __builtin_constant_p can be applicable inside of inline functions,
 * according to GCC manual.  Clang lacks that feature, though.
 *
 * @see https://bugs.llvm.org/show_bug.cgi?id=4898
 * @see https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
 */
#include "ruby/internal/has/builtin.h"

/** Wraps (or simulates) `__builtin_constant_p` */
#if RBIMPL_HAS_BUILTIN(__builtin_constant_p)
# define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr)
#else
# define RBIMPL_CONSTANT_P(expr) 0
#endif

#endif /* RBIMPL_CONSTANT_P_H */
PK*J[���%include/ruby/internal/static_assert.hnu�[���#ifndef RBIMPL_STATIC_ASSERT_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_STATIC_ASSERT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_STATIC_ASSERT.
 */
#include <assert.h>
#include "ruby/internal/has/extension.h"
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/attr/maybe_unused.h"

/** @cond INTERNAL_MACRO */
#if defined(__cplusplus) && defined(__cpp_static_assert)
# /* https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations */
# define RBIMPL_STATIC_ASSERT0 static_assert

#elif defined(__cplusplus) && RBIMPL_COMPILER_SINCE(MSVC, 16, 0, 0)
# define RBIMPL_STATIC_ASSERT0 static_assert

#elif defined(__INTEL_CXX11_MODE__)
# define RBIMPL_STATIC_ASSERT0 static_assert

#elif defined(__cplusplus) && __cplusplus >= 201103L
# define RBIMPL_STATIC_ASSERT0 static_assert

#elif defined(__cplusplus) && RBIMPL_HAS_EXTENSION(cxx_static_assert)
# define RBIMPL_STATIC_ASSERT0 __extension__ static_assert

#elif defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__
# define RBIMPL_STATIC_ASSERT0 __extension__ static_assert

#elif defined(__STDC_VERSION__) && RBIMPL_HAS_EXTENSION(c_static_assert)
# define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert

#elif defined(__STDC_VERSION__) && RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0)
# define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert

#elif defined(static_assert)
# /* Take <assert.h> definition */
# define RBIMPL_STATIC_ASSERT0 static_assert
#endif
/** @endcond */

/**
 * @brief  Wraps (or simulates) `static_assert`
 * @param  name  Valid C/C++ identifier, describing the assertion.
 * @param  expr  Expression to assert.
 * @note   `name` shall not be a string literal.
 */
#if defined(__DOXYGEN__)
# define RBIMPL_STATIC_ASSERT static_assert

#elif defined(RBIMPL_STATIC_ASSERT0)
# define RBIMPL_STATIC_ASSERT(name, expr) \
    RBIMPL_STATIC_ASSERT0(expr, # name ": " # expr)

#else
# define RBIMPL_STATIC_ASSERT(name, expr) \
    RBIMPL_ATTR_MAYBE_UNUSED() typedef int static_assert_ ## name ## _check[1 - 2 * !(expr)]
#endif

#endif /* RBIMPL_STATIC_ASSERT_H */
PK*J[��l]l]include/ruby/internal/memory.hnu�[���#ifndef RBIMPL_MEMORY_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_MEMORY_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Memory management stuff.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#ifdef HAVE_STRING_H
# include <string.h>
#endif

#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif

#ifdef HAVE_ALLOCA_H
# include <alloca.h>
#endif

#if defined(_MSC_VER) && defined(_WIN64)
# include <intrin.h>
# if defined(_M_AMD64)
# pragma intrinsic(_umul128)
# endif
# if defined(_M_ARM64)
# pragma intrinsic(__umulh)
# endif
#endif

#include "ruby/internal/attr/alloc_size.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/attr/restrict.h"
#include "ruby/internal/attr/returns_nonnull.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/has/builtin.h"
#include "ruby/internal/stdalign.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/stdckdint.h"
#include "ruby/internal/xmalloc.h"
#include "ruby/backward/2/limits.h"
#include "ruby/backward/2/long_long.h"
#include "ruby/backward/2/assume.h"
#include "ruby/defines.h"

/** @cond INTERNAL_MACRO  */

/* Make alloca work the best possible way.  */
#if defined(alloca)
# /* Take that. */
#elif RBIMPL_HAS_BUILTIN(__builtin_alloca)
# define alloca __builtin_alloca
#elif defined(_AIX)
# pragma alloca
#elif defined(__cplusplus)
extern "C" void *alloca(size_t);
#else
extern void *alloca();
#endif

/** @endcond  */

#if defined(__DOXYGEN__)
/**
 * @private
 *
 * Type that is as twice wider as  size_t.  This is an implementation detail of
 * rb_mul_size_overflow().  People should not use it.   This is not a good name
 * either.
 */
typedef uint128_t DSIZE_T;
#elif defined(HAVE_INT128_T) && SIZEOF_SIZE_T <= 8
# define DSIZE_T uint128_t
#elif SIZEOF_SIZE_T * 2 <= SIZEOF_LONG_LONG
# define DSIZE_T unsigned LONG_LONG
#endif

/**
 * @private
 *
 * Maximum  possible  number  of  bytes  that  #RB_ALLOCV  can  allocate  using
 * `alloca`.  Anything  beyond this  is allocated  using rb_alloc_tmp_buffer().
 * This selection is transparent to users.  People don't have to bother.
 */
#ifdef C_ALLOCA
# define RUBY_ALLOCV_LIMIT 0
#else
# define RUBY_ALLOCV_LIMIT 1024
#endif

/**
 * Prevents premature  destruction of local objects.   Ruby's garbage collector
 * is conservative; it  scans the C level machine stack  as well.  Possible in-
 * use Ruby  objects must  remain visible  on stack, to  be properly  marked as
 * such.  However  contemporary C  compilers do not  interface well  with this.
 * Consider the following example:
 *
 * ```CXX
 * auto s = rb_str_new_cstr(" world");
 * auto sptr = RSTRING_PTR(s);
 * auto t = rb_str_new_cstr("hello,"); // Possible GC invocation
 * auto u = rb_str_cat_cstr(t, sptr);
 *
 * RB_GC_GUARD(s); // ensure `s` (and thus `sptr`) do not get GC-ed
 * ```
 *
 * Here, without the #RB_GC_GUARD, the last use of `s` is _before_ the last use
 * of `sptr`.  Compilers  could thus think `s` and `t`  are allowed to overlap.
 * That would eliminate `s`  from the stack, while `sptr` is  still in use.  If
 * our GC  ran at  that very moment,  `s` gets swept  out, which  also destroys
 * `sptr`.  Boom!  You got a SEGV.
 *
 * In order  to prevent this scenario  #RB_GC_GUARD must be placed  _after_ the
 * last use of `sptr`.  Placing  #RB_GC_GUARD before dereferencing `sptr` would
 * be of no use.
 *
 * #RB_GC_GUARD would  not be  necessary at  all in the  above example  if non-
 * inlined  function  calls are  made  on  the  `s`  variable after  `sptr`  is
 * dereferenced.  Thus, in  the above example, calling  any un-inlined function
 * on `s`  such as `rb_str_modify(s);`  will ensure `s`  stays on the  stack or
 * register to prevent a GC invocation from prematurely freeing it.
 *
 * Using the #RB_GC_GUARD  macro is preferable to using  the `volatile` keyword
 * in C.  #RB_GC_GUARD has the following advantages:
 *
 *  - the intent of the macro use is clear.
 *
 *  - #RB_GC_GUARD only affects its call  site.  OTOH `volatile` generates some
 *    extra code every time the variable is used, hurting optimisation.
 *
 *  - `volatile` implementations  may be  buggy/inconsistent in  some compilers
 *    and   architectures.     #RB_GC_GUARD   is   customisable    for   broken
 *    systems/compilers without negatively affecting other systems.
 *
 *  - C++  since C++20  deprecates  `volatile`.  If  you  write your  extension
 *    library in that language there is no escape but to use this macro.
 *
 * @param  v  A variable of ::VALUE type.
 * @post   `v` is still alive.
 */
#ifdef __GNUC__
#define RB_GC_GUARD(v) \
    (*__extension__ ({ \
        volatile VALUE *rb_gc_guarded_ptr = &(v); \
        __asm__("" : : "m"(rb_gc_guarded_ptr)); \
        rb_gc_guarded_ptr; \
    }))
#elif defined _MSC_VER
#define RB_GC_GUARD(v) (*rb_gc_guarded_ptr(&(v)))
#else
#define HAVE_RB_GC_GUARDED_PTR_VAL 1
#define RB_GC_GUARD(v) (*rb_gc_guarded_ptr_val(&(v),(v)))
#endif

/* Casts needed because void* is NOT compatible with others in C++. */

/**
 * Convenient macro that allocates an array of n elements.
 *
 * @param      type            Type of array elements.
 * @param      n               Length of the array.
 * @exception  rb_eNoMemError  No space left for allocation.
 * @exception  rb_eArgError    Integer overflow trying  to calculate the length
 *                             of continuous  memory region of `n`  elements of
 *                             `type`.
 * @return     Storage  instance  that  is  capable of  storing  at  least  `n`
 *             elements of type `type`.
 * @note       It doesn't return NULL, even when `n` is zero.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
#define RB_ALLOC_N(type,n)  RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type)))

/**
 * Shorthand of #RB_ALLOC_N with `n=1`.
 *
 * @param      type            Type of allocation.
 * @exception  rb_eNoMemError  No space left for allocation.
 * @return     Storage instance that can hold an `type` object.
 * @note       It doesn't return NULL.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
#define RB_ALLOC(type)      RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type)))

/**
 * Identical to  #RB_ALLOC_N() but also  nullifies the allocated  region before
 * returning.
 *
 * @param      type            Type of array elements.
 * @param      n               Length of the array.
 * @exception  rb_eNoMemError  No space left for allocation.
 * @exception  rb_eArgError    Integer overflow trying  to calculate the length
 *                             of continuous  memory region of `n`  elements of
 *                             `type`.
 * @return     Storage  instance  that  is  capable of  storing  at  least  `n`
 *             elements of type `type`.
 * @post       Returned array is filled with zeros.
 * @note       It doesn't return NULL, even when `n` is zero.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type)))

/**
 * Shorthand of #RB_ZALLOC_N with `n=1`.
 *
 * @param      type            Type of allocation.
 * @exception  rb_eNoMemError  No space left for allocation.
 * @return     Storage instance that can hold an `type` object.
 * @post       Returned object is filled with zeros.
 * @note       It doesn't return NULL.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
#define RB_ZALLOC(type)     (RB_ZALLOC_N(type, 1))

/**
 * Convenient macro that reallocates an array with a new size.
 *
 * @param      var             A variable of `type`,  which points to a storage
 *                             instance  that  was   previously  returned  from
 *                             either
 *                               - ruby_xmalloc(),
 *                               - ruby_xmalloc2(),
 *                               - ruby_xcalloc(),
 *                               - ruby_xrealloc(), or
 *                               - ruby_xrealloc2().
 * @param      type            Type of allocation.
 * @param      n               Requested new size of each element.
 * @exception  rb_eNoMemError  No space left for  allocation.
 * @exception  rb_eArgError    Integer overflow trying  to calculate the length
 *                             of continuous  memory region of `n`  elements of
 *                             `type`.
 * @return     Storage  instance  that  is  capable of  storing  at  least  `n`
 *             elements of type `type`.
 * @pre        The passed variable must point to a valid live storage instance.
 *             It is a  failure to pass a variable that  holds an already-freed
 *             pointer.
 * @note       It doesn't return NULL, even when `n` is zero.
 * @warning    Do not  assume anything  on the alignment  of the  return value.
 *             There is  no guarantee  that it  inherits the  passed argument's
 *             one.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
#define RB_REALLOC_N(var,type,n) \
    ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type))))

/**
 * @deprecated  This  macro is  dangerous (does  not bother  stack overflow  at
 *              all).  #RB_ALLOCV is the modern way to do the same thing.
 * @param       type  Type of array elements.
 * @param       n     Length of the array.
 * @return      A pointer on stack.
 */
#define ALLOCA_N(type,n) \
    RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))

/**
 * Identical to #RB_ALLOCV_N(), except that it allocates a number of bytes and
 * returns a void* .
 *
 * @param   v  A variable to hold the just-in-case opaque Ruby object.
 * @param   n  Size of allocation, in bytes.
 * @return  A void pointer to `n` bytes storage.
 * @note    `n` may be evaluated twice.
 */
#define RB_ALLOCV(v, n)        \
    ((n) < RUBY_ALLOCV_LIMIT ? \
     ((v) = 0, alloca(n)) :    \
     rb_alloc_tmp_buffer(&(v), (n)))

/**
 * Allocates a  memory region, possibly  on stack.   If the given  size exceeds
 * #RUBY_ALLOCV_LIMIT, it allocates a dedicated  opaque ruby object instead and
 * let our GC sweep that region after use.  Either way you can fire-and-forget.
 *
 * ```CXX
 * #include <sys/types.h>
 *
 * VALUE
 * foo(int n)
 * {
 *     VALUE v;
 *     auto ptr = RB_ALLOCV(struct tms, v, n);
 *     ...
 *     // no need to free `ptr`.
 * }
 * ```
 *
 * If you want to  be super-duper polite you can also  explicitly state the end
 * of use of such memory region by calling #RB_ALLOCV_END().
 *
 * @param   type  The type of array elements.
 * @param   v     A variable to hold the just-in-case opaque Ruby object.
 * @param   n     Number of elements requested to allocate.
 * @return  An array of `n` elements of `type`.
 * @note    `n` may be evaluated twice.
 */
#define RB_ALLOCV_N(type, v, n)                             \
    RBIMPL_CAST((type *)                                     \
        (((size_t)(n) < RUBY_ALLOCV_LIMIT / sizeof(type)) ? \
         ((v) = 0, alloca((n) * sizeof(type))) :            \
         rb_alloc_tmp_buffer2(&(v), (n), sizeof(type))))

/**
 * Polite way to declare that the given  array is not used any longer.  Calling
 * this not mandatory.  Our GC can baby-sit  you.  However it is not a very bad
 * idea to use it when possible.  Doing so could reduce memory footprint.
 *
 * @param  v  A variable previously passed to either #RB_ALLOCV/#RB_ALLOCV_N.
 */
#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))

/**
 * Handy macro to erase a region of memory.
 *
 * @param   p     Target pointer.
 * @param   type  Type of `p[0]`
 * @param   n     Length of `p`.
 * @return  `p`.
 * @post    First `n` elements of `p` are squashed.
 */
#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n)))

/**
 * Handy macro to call memcpy.
 *
 * @param   p1    Destination pointer.
 * @param   p2    Source pointer.
 * @param   type  Type of `p2[0]`
 * @param   n     Length of `p2`.
 * @return  `p1`.
 * @post    First `n` elements of `p2` are copied into `p1`.
 */
#define MEMCPY(p1,p2,type,n) ruby_nonempty_memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))

/**
 * Handy macro to call memmove.
 *
 * @param  p1    Destination pointer.
 * @param  p2    Source pointer.
 * @param  type  Type of `p2[0]`
 * @param  n     Length of `p2`.
 * @return `p1`.
 * @post   First `n` elements of `p2` are copied into `p1`.
 */
#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))

/**
 * Handy macro to call memcmp
 *
 * @param   p1    Target LHS.
 * @param   p2    Target RHS.
 * @param   type  Type of `p1[0]`
 * @param   n     Length of `p1`.
 * @retval  <0    `p1` is "less" than `p2`.
 * @retval  0     `p1` is equal to `p2`.
 * @retval  >0    `p1` is "greater" than `p2`.
 */
#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))

#define ALLOC_N    RB_ALLOC_N    /**< @old{RB_ALLOC_N} */
#define ALLOC      RB_ALLOC      /**< @old{RB_ALLOC} */
#define ZALLOC_N   RB_ZALLOC_N   /**< @old{RB_ZALLOC_N} */
#define ZALLOC     RB_ZALLOC     /**< @old{RB_ZALLOC} */
#define REALLOC_N  RB_REALLOC_N  /**< @old{RB_REALLOC_N} */
#define ALLOCV     RB_ALLOCV     /**< @old{RB_ALLOCV} */
#define ALLOCV_N   RB_ALLOCV_N   /**< @old{RB_ALLOCV_N} */
#define ALLOCV_END RB_ALLOCV_END /**< @old{RB_ALLOCV_END} */

/**
 * @private
 *
 * This is an implementation detail of rbimpl_size_mul_overflow().
 *
 * @internal
 *
 * Expecting  this struct  to be  eliminated  by function  inlinings.  This  is
 * nothing more than std::variant<std::size_t> if  we could use recent C++, but
 * reality is we cannot.
 */
struct rbimpl_size_mul_overflow_tag {
    bool left;                  /**< Whether overflow happened or not. */
    size_t right;               /**< Multiplication result. */
};

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_RESTRICT()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_ALLOC_SIZE((2))
RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is  an implementation  detail of #RB_ALLOCV().   People don't  use this
 * directly.
 *
 * @param[out]  store  Pointer to a variable.
 * @param[in]   len    Requested number of bytes to allocate.
 * @return      Allocated `len` bytes array.
 * @post        `store` holds the corresponding tmp buffer object.
 */
void *rb_alloc_tmp_buffer(volatile VALUE *store, long len);

RBIMPL_ATTR_RESTRICT()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_ALLOC_SIZE((2,3))
RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an  implementation detail of #RB_ALLOCV_N().  People  don't use this
 * directly.
 *
 * @param[out]  store  Pointer to a variable.
 * @param[in]   len    Requested number of bytes to allocate.
 * @param[in]   count  Number of elements in an array.
 * @return      Allocated `len` bytes array.
 * @post        `store` holds the corresponding tmp buffer object.
 *
 * @internal
 *
 * Although  the  meaning  of  `count` variable  is  clear,  @shyouhei  doesn't
 * understand its needs.
 */
void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count);

/**
 * @private
 *
 * This is an implementation detail of #RB_ALLOCV_END().  People don't use this
 * directly.
 *
 * @param[out]  store  Pointer to a variable.
 * @pre         `store` is a NULL, or a pointer to a tmp buffer object.
 * @post        `*store` is ::RUBY_Qfalse.
 * @post        The object formerly stored in `store` is destroyed.
 */
void rb_free_tmp_buffer(volatile VALUE *store);

RBIMPL_ATTR_NORETURN()
/**
 * @private
 *
 * This is an  implementation detail of #RB_ALLOCV_N().  People  don't use this
 * directly.
 *
 * @param[in]  x             Arbitrary value.
 * @param[in]  y             Arbitrary value.
 * @exception  rb_eArgError  `x` * `y` would integer overflow.
 */
void ruby_malloc_size_overflow(size_t x, size_t y);

#ifdef HAVE_RB_GC_GUARDED_PTR_VAL
volatile VALUE *rb_gc_guarded_ptr_val(volatile VALUE *ptr, VALUE val);
#endif
RBIMPL_SYMBOL_EXPORT_END()

#ifdef _MSC_VER
# pragma optimize("", off)

/**
 * @private
 *
 * This is an  implementation detail of #RB_GC_GUARD().  People  don't use this
 * directly.
 *
 * @param[in]  ptr  A pointer to an on-stack C variable.
 * @return     `ptr` as-is.
 */
static inline volatile VALUE *
rb_gc_guarded_ptr(volatile VALUE *ptr)
{
    return ptr;
}

# pragma optimize("", on)
#endif

/**
 * @deprecated  This   function   was   an   implementation   detail   of   old
 *              #RB_ALLOCV_N().  We no longer  use it.  @shyouhei suspects that
 *              there are  no actual usage now.   However it was not  marked as
 *              private before.  We cannot delete it any longer.
 * @param[in]   a    Arbitrary value.
 * @param[in]   b    Arbitrary value.
 * @param[in]   max  Possible maximum value.
 * @param[out]  c    A pointer to return the computation result.
 * @retval      1    `c` is insane.
 * @retval      0    `c` is sane.
 * @post        `c` holds `a` * `b`, but could be overflowed.
 */
static inline int
rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
{
#ifdef DSIZE_T
    RB_GNUC_EXTENSION DSIZE_T da, db, c2;
    da = a;
    db = b;
    c2 = da * db;
    if (c2 > max) return 1;
    *c = RBIMPL_CAST((size_t)c2);
#else
    if (b != 0 && a > max / b) return 1;
    *c = a * b;
#endif
    return 0;
}

#if defined(__DOXYGEN__)
RBIMPL_ATTR_CONSTEXPR(CXX14)
#elif RBIMPL_COMPILER_SINCE(GCC, 7, 0, 0)
RBIMPL_ATTR_CONSTEXPR(CXX14) /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70507 */
#elif RBIMPL_COMPILER_SINCE(Clang, 7, 0, 0)
RBIMPL_ATTR_CONSTEXPR(CXX14) /* https://bugs.llvm.org/show_bug.cgi?id=37633 */
#endif
RBIMPL_ATTR_CONST()
/**
 * @private
 *
 * This is an  implementation detail of #RB_ALLOCV_N().  People  don't use this
 * directly.
 *
 * @param[in]  x  Arbitrary value.
 * @param[in]  y  Arbitrary value.
 * @return     `{ left, right }`,  where `left` is whether there  is an integer
 *             overflow or not,  and `right` is a  (possibly overflowed) result
 *             of `x` * `y`.
 *
 * @internal
 *
 * This is in fact also an implementation detail of ruby_xmalloc2() etc.
 */
static inline struct rbimpl_size_mul_overflow_tag
rbimpl_size_mul_overflow(size_t x, size_t y)
{
    struct rbimpl_size_mul_overflow_tag ret = { false,  0, };

#if defined(ckd_mul)
    ret.left = ckd_mul(&ret.right, x, y);

#elif RBIMPL_HAS_BUILTIN(__builtin_mul_overflow)
    ret.left = __builtin_mul_overflow(x, y, &ret.right);

#elif defined(DSIZE_T)
    RB_GNUC_EXTENSION DSIZE_T dx = x;
    RB_GNUC_EXTENSION DSIZE_T dy = y;
    RB_GNUC_EXTENSION DSIZE_T dz = dx * dy;
    ret.left  = dz > SIZE_MAX;
    ret.right = RBIMPL_CAST((size_t)dz);

#elif defined(_MSC_VER) && defined(_M_AMD64)
    unsigned __int64 dp = 0;
    unsigned __int64 dz = _umul128(x, y, &dp);
    ret.left  = RBIMPL_CAST((bool)dp);
    ret.right = RBIMPL_CAST((size_t)dz);

#elif defined(_MSC_VER) && defined(_M_ARM64)
    ret.left  = __umulh(x, y) != 0;
    ret.right = x * y;

#else
    /* https://wiki.sei.cmu.edu/confluence/display/c/INT30-C.+Ensure+that+unsigned+integer+operations+do+not+wrap */
    ret.left  = (y != 0) && (x > SIZE_MAX / y);
    ret.right = x * y;
#endif

    return ret;
}

/**
 * @private
 *
 * This is an  implementation detail of #RB_ALLOCV_N().  People  don't use this
 * directly.
 *
 * @param[in]  x             Arbitrary value.
 * @param[in]  y             Arbitrary value.
 * @exception  rb_eArgError  Multiplication could integer overflow.
 * @return     `x` * `y`.
 *
 * @internal
 *
 * This is in fact also an implementation detail of ruby_xmalloc2() etc.
 */
static inline size_t
rbimpl_size_mul_or_raise(size_t x, size_t y)
{
    struct rbimpl_size_mul_overflow_tag size =
        rbimpl_size_mul_overflow(x, y);

    if (RB_LIKELY(! size.left)) {
        return size.right;
    }
    else {
        ruby_malloc_size_overflow(x, y);
        RBIMPL_UNREACHABLE_RETURN(0);
    }
}

/**
 * This is an  implementation detail of #RB_ALLOCV_N().  People  don't use this
 * directly.
 *
 * @param[out]  store   Pointer to a variable.
 * @param[in]   count   Number of elements in an array.
 * @param[in]   elsize  Size of each elements.
 * @return      Region of `count` * `elsize` bytes.
 * @post        `store` holds the corresponding tmp buffer object.
 *
 * @internal
 *
 * We might want to deprecate this function and make a `rbimpl_` counterpart.
 */
static inline void *
rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
{
    const size_t total_size = rbimpl_size_mul_or_raise(RBIMPL_CAST((size_t)count), elsize);
    const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
    return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
}

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_RETURNS_NONNULL()
/* At least since 2004, glibc's <string.h> annotates memcpy to be
 * __attribute__((__nonnull__(1, 2))).  However it is safe to pass NULL to the
 * source pointer, if n is 0.  Let's wrap memcpy. */
static inline void *
ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
{
    if (n) {
        return memcpy(dest, src, n);
    }
    else {
        return dest;
    }
}
RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_MEMORY_H */
PK*J[Q(bEE"include/ruby/internal/arithmetic.hnu�[���#ifndef RBIMPL_ARITHMETIC_H                          /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ARITHMETIC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Conversion  between  C's arithmetic  types  and  Ruby's  numeric
 *             types.
 */
#include "ruby/internal/arithmetic/char.h"
#include "ruby/internal/arithmetic/double.h"
#include "ruby/internal/arithmetic/fixnum.h"
#include "ruby/internal/arithmetic/gid_t.h"
#include "ruby/internal/arithmetic/int.h"
#include "ruby/internal/arithmetic/intptr_t.h"
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/arithmetic/long_long.h"
#include "ruby/internal/arithmetic/mode_t.h"
#include "ruby/internal/arithmetic/off_t.h"
#include "ruby/internal/arithmetic/pid_t.h"
#include "ruby/internal/arithmetic/short.h"
#include "ruby/internal/arithmetic/size_t.h"
#include "ruby/internal/arithmetic/st_data_t.h"
#include "ruby/internal/arithmetic/uid_t.h"
#endif /* RBIMPL_ARITHMETIC_H */
PK*J[��H""!include/ruby/internal/intern/re.hnu�[���#ifndef RBIMPL_INTERN_RE_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_RE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cRegexp.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* re.c */

/**
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 *
 * @internal
 *
 * This was a  function that switched between memcmp  and rb_memcicmp depending
 * on then-called `ruby_ignorecase`, or the `$=` global variable.  That feature
 * was abandoned in sometime around version 1.9.0.
 */
#define rb_memcmp memcmp

/**
 * Identical to  st_locale_insensitive_strcasecmp(), except  it is  timing safe
 * and returns something different.
 *
 * @param[in]  s1  Comparison LHS.
 * @param[in]  s2  Comparison RHS.
 * @param[in]  n   Comparison shall stop after first `n` bytes are scanned.
 * @retval     <0  `s1` is "less" than `s2`.
 * @retval      0  Both sides converted into lowercase would be identical.
 * @retval     >0  `s1` is "greater" than `s2`.
 * @note       The "case" here means that of the POSIX Locale.
 *
 * @internal
 *
 * Can accept NULLs as long as n is also 0, and returns 0.
 */
int rb_memcicmp(const void *s1,const void *s2, long n);

/**
 * Asserts  that  the given  MatchData  is  "occupied".  MatchData  shares  its
 * backend storages  with its  Regexp object.   But programs  can destructively
 * tamper its  contents.  Calling this  function beforehand shall  prevent such
 * modifications to spill over into other objects.
 *
 * @param[out]  md  Target instance of ::rb_cMatch.
 * @post        The object is "busy".
 *
 * @internal
 *
 * There is rb_match_unbusy internally, but extension libraries are left unable
 * to do so.
 */
void rb_match_busy(VALUE md);

/**
 * Identical to rb_reg_nth_match(), except it just returns Boolean.  This could
 * skip allocating a  returning string, resulting in  reduced memory footprints
 * if applicable.
 *
 * @param[in]  n              Match index.
 * @param[in]  md             An instance of ::rb_cMatch.
 * @exception  rb_eTypeError  `md` is not initialised.
 * @retval     RUBY_Qnil      There is no `n`-th capture.
 * @retval     RUBY_Qfalse    There is a `n`-th capture and is empty.
 * @retval     RUBY_Qtrue     There is a `n`-th capture that has something.
 *
 */
VALUE rb_reg_nth_defined(int n, VALUE md);

/**
 * Queries the nth captured substring.
 *
 * @param[in]  n              Match index.
 * @param[in]  md             An instance of ::rb_cMatch.
 * @exception  rb_eTypeError  `md` is not initialised.
 * @retval     RUBY_Qnil      There is no `n`-th capture.
 * @retval     otherwise      An allocated instance of  ::rb_cString containing
 *                            the contents captured.
 */
VALUE rb_reg_nth_match(int n, VALUE md);

/**
 * Queries the index of the given named capture.  Captures could be named.  But
 * that doesn't mean named ones are  not indexed.  A regular expression can mix
 * named  and non-named  captures, and  they  are all  indexed.  This  function
 * converts from a name to its index.
 *
 * @param[in]  match           An instance of ::rb_cMatch.
 * @param[in]  backref         Capture name, in String, Symbol, or Numeric.
 * @exception  rb_eIndexError  No such named capture.
 * @return     The index of the given name.
 */
int rb_reg_backref_number(VALUE match, VALUE backref);

/**
 * This just returns the argument, stringified.  What a poor name.
 *
 * @param[in]  md  An instance of ::rb_cMatch.
 * @return     Its 0th capture (i.e. entire matched string).
 */
VALUE rb_reg_last_match(VALUE md);

/**
 * The portion of the original string before the given match.
 *
 * @param[in]  md  An instance of ::rb_cMatch.
 * @return     Its "prematch".  This is perl's ``$```.
 */
VALUE rb_reg_match_pre(VALUE md);

/**
 * The portion of the original string after the given match.
 *
 * @param[in]  md  An instance of ::rb_cMatch.
 * @return     Its "postmatch".  This is perl's `$'`.
 */
VALUE rb_reg_match_post(VALUE md);

/**
 * The portion of the original string that captured at the very last.
 *
 * @param[in]  md  An instance of ::rb_cMatch.
 * @return     Its "lastmatch".  This is perl's `$+`.
 */
VALUE rb_reg_match_last(VALUE md);

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define HAVE_RB_REG_NEW_STR 1

/**
 * Identical to rb_reg_new(),  except it takes the expression  in Ruby's string
 * instead of C's.
 *
 * @param[in]  src              Source code in String.
 * @param[in]  opts             Options e.g. ONIG_OPTION_MULTILINE.
 * @exception  rb_eRegexpError  `src` and `opts` do not interface.
 * @return     Allocated new instance of ::rb_cRegexp.
 */
VALUE rb_reg_new_str(VALUE src, int opts);

RBIMPL_ATTR_NONNULL(())
/**
 * Creates a new Regular expression.
 *
 * @param[in]  src              Source code.
 * @param[in]  len              `strlen(src)`.
 * @param[in]  opts             Options e.g. ONIG_OPTION_MULTILINE.
 * @return     Allocated new instance of ::rb_cRegexp.
 */
VALUE rb_reg_new(const char *src, long len, int opts);

/**
 * Allocates an instance of ::rb_cRegexp.
 *
 * @private
 *
 * Nobody  should  call  this  function.   Regular  expressions  that  are  not
 * initialised must not exist in the wild.
 */
VALUE rb_reg_alloc(void);

/**
 * Initialises an instance of ::rb_cRegexp.
 *
 * @private
 *
 * This just raises  for ordinal regexp objects.  Extension  libraries must not
 * use.
 */
VALUE rb_reg_init_str(VALUE re, VALUE s, int options);

/**
 * This is the match operator.
 *
 * @param[in]  re               An instance of ::rb_cRegexp.
 * @param[in]  str              An instance of ::rb_cString.
 * @exception  rb_eTypeError    `str` is not a string.
 * @exception  rb_eRegexpError  Error inside of Onigmo (unlikely).
 * @retval     RUBY_Qnil        Match failed.
 * @retval     otherwise        Matched  position  (character index  inside  of
 *                              `str`).
 * @post       `Regexp.last_match` is updated.
 * @post       `$&`, `$~`, etc., are updated.
 * @note       If you  do this in  ruby, named  captures are assigned  to local
 *             variable of the local scope.  But that doesn't happen here.  The
 *             assignment is done by the interpreter.
 */
VALUE rb_reg_match(VALUE re, VALUE str);

/**
 * Identical  to rb_reg_match(),  except it  matches against  rb_lastline_get()
 * (or, the `$_`).
 *
 * @param[in]  re               An instance of ::rb_cRegexp.
 * @exception  rb_eRegexpError  Error inside of Onigmo (unlikely).
 * @retval     RUBY_Qnil        Match failed or `$_` is absent.
 * @retval     otherwise        Matched  position  (character index  inside  of
 *                              `$_`).
 * @post       `Regexp.last_match` is updated.
 * @post       `$&`, `$~`, etc., are updated.
 */
VALUE rb_reg_match2(VALUE re);

/**
 * Queries the options of the passed regular expression.
 *
 * @param[in]  re  An instance of ::rb_cRegexp.
 * @return     Its options.
 * @note       Possible return values are defined in Onigmo.h.
 */
int rb_reg_options(VALUE re);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_RE_H */
PK*J[d���%include/ruby/internal/intern/signal.hnu�[���#ifndef RBIMPL_INTERN_SIGNAL_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_SIGNAL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Signal handling APIs.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* signal.c */

RBIMPL_ATTR_NONNULL(())
/**
 * Sends a signal ("kills") to processes.
 *
 * The first argument is the signal, either in:
 *
 *   - Numerical representation (e.g. `9`), or
 *   - Textual  representation   of  canonical   (e.g.   `:SIGKILL`)   name  or
 *     abbreviated (e.g. `:KILL`) name, either in ::rb_cSymbol or ::rb_cString.
 *
 * All the  remaining arguments are  numerical representations of  process IDs.
 * This function iterates over them to send the specified signal.
 *
 * You can specify both negative PIDs and negative signo to this function:
 *
 *   ```
 *    sig \ pid | >= 1 | == 0 | == -1 | <= -2
 *   ===========+======+======+=======+=======
 *        > 0   |  #1  |  #2  |  #3   |  #4
 *       == 0   |  #5  |  #6  |  #7   |  #8
 *        < 0   |  #9  |  #10 |      #11
 *   ```
 *
 *   - Case #1: When  signo and PID are both positive,  this function sends the
 *     specified signal to the specified process (intuitive).
 *
 *   - Case #2: When  signo is  positive and PID  is zero, this  function sends
 *     that signal to the current process group.
 *
 *   - Case #3: When signo is positive and  PID is -1, this function sends that
 *     signal to everything that the current process is allowed to kill.
 *
 *   - Case #4: When signo  is positive and PID is negative  (but not -1), this
 *     function sends that signal to every  processes in a process group, whose
 *     process group ID is the absolute value of the passed PID.
 *
 *   - Case #5: When  signo  is zero  and PID is  positive, this  function just
 *     checks  for the  existence of  the  specified process  and doesn't  send
 *     anything to  anyone.  In  case the process  is absent  `Errno::ESRCH` is
 *     raised.
 *
 *   - Case #6: When signo and PID are  both zero, this function checks for the
 *     existence of the current process group.   And it must do.  This function
 *     is effectively a no-op then.
 *
 *   - Case #7: When signo is zero and PID is -1, this function checks if there
 *     is any other  process that the current process can  kill.  At least init
 *     (PID 1) must exist, so this must not fail.
 *
 *   - Case #8: When  signo is  zero and  PID is  negative (but  not -1),  this
 *     function checks  if there is a  process group whose process  group ID is
 *     the absolute  value of  the passed  PID.  In case  the process  group is
 *     absent `Errno::ESRCH` is raised.
 *
 *   - Case #9: When signo is negative and PID is positive, this function sends
 *     the absolute value of the passed signo to the process group specified as
 *     the PID.
 *
 *   - Case #10: When signo is negative and  PID is zero, it is highly expected
 *     that this function  sends the absolute value of the  passed signo to the
 *     current  process   group.   Strictly  speaking,  IEEE   Std  1003.1-2017
 *     specifies that  this (`killpg(3posix)` with  an argument of zero)  is an
 *     undefined behaviour.  But no operating system  is known so far that does
 *     things differently.
 *
 *   - Case #11: When  signo and PID  are both negative, the  behaviour of this
 *     function  depends on  how `killpg(3)`  works.  On  Linux, it  seems such
 *     attempt is  strictly prohibited and  `Errno::EINVAL` is raised.   But on
 *     macOS, it seems it  tries to send the signal  actually to the process
 *     group.
 *
 * @note       Above description is in fact different from how `kill(2)` works.
 *             We interpret the passed arguments before passing them through to
 *             system calls.
 * @param[in]  argc                 Number of objects in `argv`.
 * @param[in]  argv                 Signal, followed by target PIDs.
 * @exception  rb_eArgError         Unknown signal name.
 * @exception  rb_eSystemCallError  Various errors sending signal to processes.
 * @return     Something numeric.  The meaning of this return value is unclear.
 *             It seems in case of #1 above, this could be the body count.  But
 *             other cases remain mysterious.
 */
VALUE rb_f_kill(int argc, const VALUE *argv);

RBIMPL_ATTR_PURE()
/**
 * Queries  the name  of  the signal.   It returns  for  instance `"KILL"`  for
 * SIGKILL.
 *
 * @param[in]  signo      Signal number to query.
 * @retval     0          No such signal.
 * @retval     otherwise  A pointer  to a static C  string that is the  name of
 *                        the signal.
 * @warning    Don't free the return value.
 */
const char *ruby_signal_name(int signo);

/**
 * Pretends as if  there was no custom signal handler.   This function sets the
 * signal action to SIG_DFL, then kills itself.
 *
 * @param[in]  sig  The signal.
 * @post       Previous signal handler is lost.
 * @post       Passed signal is sent to the current process.
 *
 * @internal
 *
 * @shyouhei doesn't understand  the needs of this function  being visible from
 * extension libraries.
 */
void ruby_default_signal(int sig);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_SIGNAL_H */
PK*J[²<1~%~%#include/ruby/internal/intern/file.hnu�[���#ifndef RBIMPL_INTERN_FILE_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_FILE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cFile.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* file.c */

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_file_expand_path(), except how arguments are passed.
 *
 * @param[in]  argc                Number of objects of `argv`.
 * @param[in]  argv                Filename, and base directory, in that order.
 * @exception  rb_eArgError        Wrong `argc`.
 * @exception  rb_eTypeError       Non-string passed.
 * @exception  rb_eEncCompatError  No conversion from arguments to a path.
 * @return     Expanded path.
 *
 * @internal
 *
 * It seems nobody actually uses this function right now.  Maybe delete it?
 */
VALUE rb_file_s_expand_path(int argc, const VALUE *argv);

/**
 * Identical  to rb_file_absolute_path(),  except  it additionally  understands
 * `~`.  If a given pathname starts  with `~someone/`, that part expands to the
 * user's home directory (or that of current process' owner's in case of `~/`).
 *
 * @param[in]  fname               Relative file name.
 * @param[in]  dname               Lookup  base  directory  name,  or  in  case
 *                                 ::RUBY_Qnil is  passed the  process' current
 *                                 working directory is assumed.
 * @exception  rb_eArgError        Home directory is not absolute.
 * @exception  rb_eTypeError       Non-string passed.
 * @exception  rb_eEncCompatError  No conversion from arguments to a path.
 * @return     Expanded path.
 */
VALUE rb_file_expand_path(VALUE fname, VALUE dname);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_file_absolute_path(), except how arguments are passed.
 *
 * @param[in]  argc                Number of objects of `argv`.
 * @param[in]  argv                Filename, and base directory, in that order.
 * @exception  rb_eArgError        Wrong `argc`.
 * @exception  rb_eTypeError       Non-string passed.
 * @exception  rb_eEncCompatError  No conversion from arguments to a path.
 * @return     Expanded path.
 *
 * @internal
 *
 * It seems nobody actually uses this function right now.  Maybe delete it?
 */
VALUE rb_file_s_absolute_path(int argc, const VALUE *argv);

/**
 * Maps a  relative path  to its absolute  representation.  Relative  paths are
 * referenced  from the  passed directory  name, or  from the  process' current
 * working directory in case ::RUBY_Qnil is passed.
 *
 * @param[in]  fname               Relative file name.
 * @param[in]  dname               Lookup  base  directory  name,  or  in  case
 *                                 ::RUBY_Qnil is  passed the  process' current
 *                                 working directory is assumed.
 * @exception  rb_eArgError        Strings contain NUL bytes.
 * @exception  rb_eTypeError       Non-string passed.
 * @exception  rb_eEncCompatError  No conversion from arguments to a path.
 * @return     Expanded path.
 */
VALUE rb_file_absolute_path(VALUE fname, VALUE dname);

/**
 * Strips a file path's last component  (and trailing separators if any).  This
 * function is relatively  simple on POSIX environments; just  splits the input
 * with  `/`, strips  the  last one,  if something  remains  joins them  again,
 * otherwise the return value is `"."`.   However when it comes to Windows this
 * function is  quite very  much complicated.   We have to  take UNC  etc. into
 * account.  So for instance `"C:foo"`'s dirname is `"C:."`.
 *
 * @param[in]  fname               File name to strip.
 * @exception  rb_eTypeError       `fname` is not a String.
 * @exception  rb_eArgError        `fname` contains NUL bytes.
 * @exception  rb_eEncCompatError  `fname`'s encoding is not path-compat.
 * @return     A dirname of `fname`.
 * @note       This is a "pure" operation;  it computes the return value solely
 *             from the passed object and never does any file IO.
 */
VALUE rb_file_dirname(VALUE fname);

RBIMPL_ATTR_NONNULL(())
/**
 * Resolves a  feature's path.  This  function takes for instance  `"json"` and
 * `[".so", ".rb"]`,  and iterates  over the  `$LOAD_PATH` to  see if  there is
 * either `json.so` or `json.rb` in the directory.
 *
 * This is not what everything `require`  does, but at least `require` is built
 * on top of it.
 *
 * @param[in,out]  feature             File to search, and return buffer.
 * @param[in]      exts                List of file extensions.
 * @exception      rb_eTypeError       `feature` is not a String.
 * @exception      rb_eArgError        `feature` contains NUL bytes.
 * @exception      rb_eEncCompatError  `feature`'s encoding is not path-compat.
 * @retval         0                   Not found
 * @retval         otherwise           Found index in `ext`, plus one.
 * @post           `*feature` is a resolved path.
 */
int rb_find_file_ext(VALUE *feature, const char *const *exts);

/**
 * Identical  to rb_find_file_ext(),  except it  takes  a feature  name and  is
 * extension  at once,  e.g. `"json.rb"`.   This  difference is  much like  how
 * `require` and `load` are different.
 *
 * @param[in]  path                A path relative to `$LOAD_PATH`.
 * @exception  rb_eTypeError       `path` is not a String.
 * @exception  rb_eArgError        `path` contains NUL bytes.
 * @exception  rb_eEncCompatError  `path`'s encoding is not path-compat.
 * @return     Expanded path.
 */
VALUE rb_find_file(VALUE path);

/**
 * Queries  if  the  given path  is  either  a  directory,  or a  symlink  that
 * (potentially recursively) points to such thing.
 *
 * @param[in]  _                   Ignored (why...?)
 * @param[in]  path                String,  or IO.   In  case of  IO it  issues
 *                                 `fstat(2)` instead of `stat(2)`.
 * @exception  rb_eFrozenError     `path` is a frozen IO (why...?)
 * @exception  rb_eTypeError       `path` is neither String nor IO.
 * @exception  rb_eArgError        `path` contains NUL bytes.
 * @exception  rb_eEncCompatError  `path`'s encoding is not path-compat.
 * @retval     RUBY_Qtrue          `path` is a directory.
 * @retval     RUBY_Qfalse         Otherwise.
 */
VALUE rb_file_directory_p(VALUE _, VALUE path);

/**
 * Converts a  string into an  "OS Path" encoding,  if any.  In  most operating
 * systems there are  no such things like per-OS default  encoding of filename.
 * For them this  function is no-op.  However most notably  on MacOS, pathnames
 * are UTF-8 encoded.  It converts the given string into such encoding.
 *
 * @param[in]  path                An instance of ::rb_cString.
 * @exception  rb_eEncCompatError  `path`'s encoding is not path-compat.
 * @return     `path`'s contents converted to the OS' path encoding.
 */
VALUE rb_str_encode_ospath(VALUE path);

RBIMPL_ATTR_NONNULL(())
RBIMPL_ATTR_PURE()
/**
 * Queries if the given path is an  absolute path.  On POSIX environments it is
 * as easy  as `path[0]  == '/'`.   However on Windows,  drive letters  and UNC
 * paths are also taken into account.
 *
 * @param[in]  path  A possibly relative path string.
 * @retval     1     `path` is absolute.
 * @retval     0     `path` is relative.
 */
int rb_is_absolute_path(const char *path);

/**
 * Queries  the file  size  of the  given file.   Because  this function  calls
 * `fstat(2)`  internally, it  is  a failure  to  pass a  closed  file to  this
 * function.
 *
 * This function flushes the passed file's buffer if any.  Can take time.
 *
 * @param[in]   file                 A file object.
 * @exception   rb_eFrozenError      `file` is frozen.
 * @exception   rb_eIOError          `file` is closed.
 * @exception   rb_eSystemCallError  Permission denied etc.
 * @exception   rb_eNoMethodError    The given non-file object doesn't respond
 *                                   to `#size`.
 * @return      The size of the passed file.
 * @note        Passing a non-regular file such as a UNIX domain socket to this
 *              function  is   not  a  failure.    But  the  return   value  is
 *              unpredictable.  POSIX's `<sys/stat.h>` states  that "the use of
 *              this field is unspecified" then.
 */
rb_off_t rb_file_size(VALUE file);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_FILE_H */
PK*J[*;wZieie$include/ruby/internal/intern/array.hnu�[���#ifndef RBIMPL_INTERN_ARRAY_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_ARRAY_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cArray.
 */
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/noexcept.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* array.c */

RBIMPL_ATTR_NONNULL(())
RBIMPL_ATTR_NOALIAS()
/**
 * Fills the memory region with a series of ::RUBY_Qnil.
 *
 * @param[out]  buf  Buffer to squash.
 * @param[in]   len  Number of objects of `buf`.
 * @post        `buf` is filled with ::RUBY_Qnil.
 */
void rb_mem_clear(VALUE *buf, long len)
    RBIMPL_ATTR_NOEXCEPT(true)
    ;

/**
 * Identical  to  rb_ary_new_from_values(),  except   it  expects  exactly  two
 * parameters.
 *
 * @param[in]  car  Arbitrary ruby object.
 * @param[in]  cdr  Arbitrary ruby object.
 * @return     An  allocated new  array, of  length 2,  whose contents  are the
 *             passed objects.
 */
VALUE rb_assoc_new(VALUE car, VALUE cdr);

/**
 * Try  converting an  object to  its array  representation using  its `to_ary`
 * method, if any.  If there is no such thing, returns ::RUBY_Qnil.
 *
 * @param[in]  obj            Arbitrary ruby object to convert.
 * @exception  rb_eTypeError  `obj.to_ary` returned something non-Array.
 * @retval     RUBY_Qnil      No conversion from `obj` to array defined.
 * @retval     otherwise      Converted array representation of `obj`.
 * @see        rb_io_check_io
 * @see        rb_check_string_type
 * @see        rb_check_hash_type
 */
VALUE rb_check_array_type(VALUE obj);

/**
 * Allocates a new, empty array.
 *
 * @return  An allocated new array, whose length is 0.
 */
VALUE rb_ary_new(void);

/**
 * Identical to rb_ary_new(),  except it additionally specifies  how many rooms
 * of  objects it  should allocate.   This way  you can  create an  array whose
 * capacity is  bigger than the  length of  it.  If you  can say that  an array
 * grows to a  specific amount, this could be effective  than resizing an array
 * over and over again and again.
 *
 * @param[in]  capa  Designed capacity of the generating array.
 * @return     An empty array, whose capacity is `capa`.
 */
VALUE rb_ary_new_capa(long capa);

/**
 * Constructs an array from the passed objects.
 *
 * @param[in]  n    Number of passed objects.
 * @param[in]  ...  Arbitrary ruby objects, filled into the returning array.
 * @return     An array of size `n`, whose contents are the passed objects.
 */
VALUE rb_ary_new_from_args(long n, ...);

/**
 * Identical to rb_ary_new_from_args(), except how objects are passed.
 *
 * @param[in]  n     Number of objects of `elts`.
 * @param[in]  elts  Arbitrary ruby objects, filled into the returning array.
 * @return     An array of size `n`, whose contents are the passed objects.
 */
VALUE rb_ary_new_from_values(long n, const VALUE *elts);

/**
 * Allocates a hidden (no class) empty array.
 *
 * @param[in]  capa  Designed capacity of the array.
 * @return     A hidden, empty array.
 * @see        rb_obj_hide()
 */
VALUE rb_ary_hidden_new(long capa);
#define rb_ary_tmp_new rb_ary_hidden_new

/**
 * Destroys the given array for no reason.
 *
 * @warning  DO NOT USE IT.
 * @warning  Leave this task to our GC.
 * @warning  It was a wrong indea at the first place to let you know about it.
 *
 * @param[out]  ary  The array to be executed.
 * @post        The given array no longer exists.
 * @note        Maybe `Array#clear` could be what you want.
 *
 * @internal
 *
 * Should have moved this to `internal/array.h`.
 */
void rb_ary_free(VALUE ary);

/**
 * Declares that the array is about to  be modified.  This for instance let the
 * array have a dedicated backend storage.
 *
 * @param[out]  ary               Array about to be modified.
 * @exception   rb_eFrozenError   `ary` is frozen.
 * @post        Upon  successful return  the  passed array  is  eligible to  be
 *              modified.
 */
void rb_ary_modify(VALUE ary);

/**
 * Freeze an array, preventing further modifications. The underlying  buffer may
 * be shrunk before freezing to conserve memory.
 *
 * @param[out]  obj  Object assumed to be an array to freeze.
 * @see         RB_OBJ_FREEZE()
 */
VALUE rb_ary_freeze(VALUE obj);

RBIMPL_ATTR_PURE()
/**
 * Queries if the passed two arrays share the same backend storage.  A use-case
 * for  knowing  such  property is  to  take  a  snapshot  of an  array  (using
 * e.g. rb_ary_replace()), then  check later if that snapshot  still shares the
 * storage with  the original.  Taking  a snapshot is ultra-cheap.   If nothing
 * happens the impact shall be minimal.   But if someone modifies the original,
 * that entity shall pay the cost  of copy-on-write.  You can detect that using
 * this API.
 *
 * @param[in]  lhs          Comparison LHS.
 * @param[in]  rhs          Comparison RHS.
 * @retval     RUBY_Qtrue   They share the same backend storage.
 * @retval     RUBY_Qfalse  They are distinct.
 * @pre        Both arguments must be of ::RUBY_T_ARRAY.
 */
VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs);

/**
 * Queries element(s) of  an array.  This is  complicated!  Refer `Array#slice`
 * document for the complete description of how it behaves.
 *
 * @param[in]  argc            Number of objects of `argv`.
 * @param[in]  argv            Up to 2 objects.
 * @param[in]  ary             Target array.
 * @exception  rb_eTypeError   `argv` (or its part) includes non-Integer.
 * @exception  rb_eRangeError  rb_cArithSeq is passed, and is OOB.
 * @return     An  element  (if  requested),  or   an  array  of  elements  (if
 *             requested), or ::RUBY_Qnil (if index OOB).
 *
 * @internal
 *
 * ```rbs
 * # "int" is ::Integer or `#to_int`, defined in builtin.rbs
 *
 * class ::Array[unchecked out T]
 *   def slice
 *     : (int i)                 -> T?
 *     | (int beg, int len)      -> ::Array[T]?
 *     | (Range[int] r)          -> ::Array[T]?
 *     | (ArithmeticSequence as) -> ::Array[T]? # This also raises RangeError.
 * end
 * ```
 */
VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary);

/**
 * Obtains a part of the passed array.
 *
 * @param[in]  ary        Target array.
 * @param[in]  beg        Subpart index.
 * @param[in]  len        Requested length of returning array.
 * @retval     RUBY_Qnil  Requested range out of bounds of `ary`.
 * @retval     otherwise  An  allocated new  array whose  contents are  `ary`'s
 *                        `beg` to `len`.
 * @note       Return  array  can  be  shorter than  `len`  when  for  instance
 *             `[0, 1, 2, 3]`'s 4th to 1,000,000,000th is requested.
 */
VALUE rb_ary_subseq(VALUE ary, long beg, long len);

/**
 * Destructively stores  the passed value  to the passed array's  passed index.
 * It also resizes  the array's backend storage so that  the requested index is
 * not out of bounds.
 *
 * @param[out]  ary              Target array to modify.
 * @param[in]   key              Where to store `val`.
 * @param[in]   val              What to store at `key`.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @exception   rb_eIndexError   `key` is negative.
 * @post        `ary`'s `key`th position is occupied with `val`.
 * @post        Depending on `key` and previous  length of `ary` this operation
 *              can  also create  a series  of "hole"  positions inside  of the
 *              backend storage.  They are filled with ::RUBY_Qnil.
 */
void rb_ary_store(VALUE ary, long key, VALUE val);

/**
 * Duplicates an array.
 *
 * @param[in]  ary  Target to duplicate.
 * @return     An allocated new array whose contents are identical to `ary`.
 *
 * @internal
 *
 * Not sure why this has to be something different from `ary_make_shared_copy`,
 * which seems much efficient.
 */
VALUE rb_ary_dup(VALUE ary);

/**
 * I guess there  is no use case  of this function in  extension libraries, but
 * this is a routine identical to rb_ary_dup().  This makes the most sense when
 * the passed array is formerly hidden by rb_obj_hide().
 *
 * @param[in]  ary  An array, possibly hidden.
 * @return     A duplicated new instance of ::rb_cArray.
 */
VALUE rb_ary_resurrect(VALUE ary);

/**
 * Force converts an object to an  array.  It first tries its `#to_ary` method.
 * Takes the result  if any.  Otherwise creates  an array of size  1 whose sole
 * element is the passed object.
 *
 * @param[in]  obj  Arbitrary ruby object.
 * @return     An array representation of `obj`.
 * @note       Unlike    rb_str_to_str()     which    is    a     variant    of
 *             rb_check_string_type(),  rb_ary_to_ary()  is  not a  variant  of
 *             rb_check_array_type().
 */
VALUE rb_ary_to_ary(VALUE obj);

/**
 * Converts an array into a  human-readable string.  Historically its behaviour
 * changed over time.   Currently it is identical to  calling `inspect` method.
 * This behaviour is from that of python (!!) circa 2006.
 *
 * @param[in]  ary  Array to inspect.
 * @return     Recursively inspected representation of `ary`.
 * @see        `[ruby-dev:29520]`
 */
VALUE rb_ary_to_s(VALUE ary);

/**
 * Destructively appends multiple elements at the end of the array.
 *
 * @param[out]  ary              Where to push `train`.
 * @param[in]   train            Arbitrary ruby objects to push to `ary`.
 * @param[in]   len              Number of objects of `train`.
 * @exception   rb_eIndexError   `len` too large.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      The passed `ary`.
 * @post        `ary` has contents from `train` appended at its end.
 */
VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len);

/**
 * Special case of rb_ary_cat() that it adds only one element.
 *
 * @param[out]  ary              Where to push `elem`.
 * @param[in]   elem             Arbitrary ruby object to push.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      The passed `ary`.
 * @post        `ary` has `elem` appended at its end.
 */
VALUE rb_ary_push(VALUE ary, VALUE elem);

/**
 * Destructively  deletes an  element  from the  end of  the  passed array  and
 * returns what was deleted.
 *
 * @param[out]  ary              Target array to modify.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      What  was at  the  end of  `ary`, or  ::RUBY_Qnil  if there  is
 *              nothing to remove.
 * @post        `ary`'s last element, if any, is removed.
 * @note        There is no  way to distinguish whether `ary`  was an 1-element
 *              array whose content was ::RUBY_Qnil, or was empty.
 */
VALUE rb_ary_pop(VALUE ary);

/**
 * Destructively deletes an element from the  beginning of the passed array and
 * returns what  was deleted.  It  can also be seen  as a routine  identical to
 * rb_ary_pop(), except which side of the array to scrub.
 *
 * @param[out]  ary              Target array to modify.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      What was at the beginning of  `ary`, or ::RUBY_Qnil if there is
 *              nothing to remove.
 * @post        `ary`'s first element, if any, is removed.  As the name implies
 *              everything else  remaining in `ary` gets  moved towards `ary`'s
 *              beginning.
 * @note        There is no  way to distinguish whether `ary`  was an 1-element
 *              array whose content was ::RUBY_Qnil, or was empty.
 */
VALUE rb_ary_shift(VALUE ary);

/**
 * Destructively prepends the passed item at the beginning of the passed array.
 * It can  also be seen as  a routine identical to  rb_ary_push(), except which
 * side of the array to modify.
 *
 * @param[out]  ary              Target array to modify.
 * @param[in]   elem             Arbitrary ruby object to unshift.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      The passed `ary`.
 * @post        `ary` has `elem` prepended at this beginning.
 */
VALUE rb_ary_unshift(VALUE ary, VALUE elem);

RBIMPL_ATTR_PURE()
/**
 * Queries an  element of an array.   When passed offset is  negative it counts
 * backwards.
 *
 * @param[in]  ary  An array to look into.
 * @param[in]  off  Offset (can be negative).
 * @return     ::RUBY_Qnil when  `off` is  out of  bounds of  `ary`.  Otherwise
 *             what is stored at `off`-th position of `ary`.
 * @note       `ary`'s `off`-th element can happen to be ::RUBY_Qnil.
 */
VALUE rb_ary_entry(VALUE ary, long off);

/**
 * Iteratively yields each element of the passed array to the implicitly passed
 * block if any.  In case there is  no block given, an enumerator that does the
 * thing is generated instead.
 *
 * @param[in]  ary  Array to iterate over.
 * @retval     ary  Passed block was evaluated.
 * @retval     otherwise  An instance of ::rb_cEnumerator for `Array#each`.
 */
VALUE rb_ary_each(VALUE ary);

/**
 * Recursively  stringises the  elements  of the  passed  array, flattens  that
 * result, then joins the sequence using the passed separator.
 *
 * @param[in]  ary                 Target array to convert.
 * @param[in]  sep                 Separator.  Either a  string, or ::RUBY_Qnil
 *                                 if you want no separator.
 * @exception  rb_eArgError        Infinite recursion in `ary`.
 * @exception  rb_eTypeError      `sep` is not a string.
 * @exception  rb_eEncCompatError  Strings do not agree with their encodings.
 * @return     An  instance  of   ::rb_cString  which  concatenates  stringised
 *             contents of `ary`, using `sep` as separator.
 */
VALUE rb_ary_join(VALUE ary, VALUE sep);

/**
 * _Destructively_ reverses the passed array in-place.
 *
 * @warning     This is `Array#reverse!`, not `Array#reverse`.
 * @param[out]  ary              Target array to modify.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      Passed `ary`.
 * @post        `ary` is reversed.
 */
VALUE rb_ary_reverse(VALUE ary);

/**
 * _Destructively_ rotates the  passed array in-place to towards  its end.  The
 * amount can be negative.  Would rotate to the opposite direction then.
 *
 * @warning     This is `Array#rotate!`, not `Array#rotate`.
 * @param[out]  ary              Target array to modify.
 * @param[in]   rot              Amount of rotation.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @retval      RUBY_Qnil        Not rotated.
 * @retval      ary              Rotated.
 * @post        `ary` is rotated.
 */
VALUE rb_ary_rotate(VALUE ary, long rot);

/**
 * Creates a copy  of the passed array, whose elements  are sorted according to
 * their `<=>` result.
 *
 * @param[in]  ary               Array to sort.
 * @exception  rb_eArgError      Comparison not defined among elements.
 * @exception  rb_eRuntimeError  Infinite recursion in `<=>`.
 * @return     A copy of `ary`, sorted.
 * @note       As of writing  this function uses `qsort`  as backend algorithm,
 *             which means the result is unstable (in terms of sort stability).
 */
VALUE rb_ary_sort(VALUE ary);

/**
 * Destructively sorts the  passed array in-place, according  to each elements'
 * `<=>` result.
 *
 * @param[in]  ary               Target array to modify.
 * @exception  rb_eArgError      Comparison not defined among elements.
 * @exception  rb_eRuntimeError  Infinite recursion in `<=>`.
 * @return     Passed `ary`.
 * @post       `ary` is sorted.
 * @note       As of writing  this function uses `qsort`  as backend algorithm,
 *             which means the result is unstable (in terms of sort stability).
 */
VALUE rb_ary_sort_bang(VALUE ary);

/**
 * Destructively removes elements from the passed array, so that there would be
 * no elements  inside that satisfy  `==` relationship with the  passed object.
 * Returns the last deleted  element if any.  But in case  there was nothing to
 * delete it gets complicated.  It checks  for the implicitly passed block.  If
 * there is  a block  the return value  would be what  the block  evaluates to.
 * Otherwise it resorts to ::RUBY_Qnil.
 *
 * @param[out]  ary              Target array to modify.
 * @param[in]   elem             Template object to match against each element.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      What  was  deleted,   or  what  was  the   block  returned,  or
 *              ::RUBY_Qnil (see above).
 * @post        All elements that have `==` relationship with `elem` are purged
 *              from `ary`.  Elements shift their  positions so that `ary` gets
 *              compact.
 *
 * @internal
 *
 * Internally there also is `rb_ary_delete_same`, which compares by identity.
 */
VALUE rb_ary_delete(VALUE ary, VALUE elem);

/**
 * Destructively removes an element which resides  at the specific index of the
 * passed array.  Unlike  rb_ary_stre() the index can be  negative, which means
 * the index counts backwards from the array's tail.
 *
 * @param[out]  ary  Target array to modify.
 * @param[in]   pos  Position (can be negative).
 * @exception   rb_eFrozenError `ary` is frozen.
 * @return      What was deleted, or ::RUBY_Qnil in case of OOB.
 * @post        `ary`'s `pos`-th element is deleted if any.
 * @note        There is no  way to distinguish whether `pos` is  out of bound,
 *              or `pos` did exist but stored ::RUBY_Qnil as an ordinal value.
 */
VALUE rb_ary_delete_at(VALUE ary, long pos);

/**
 * Destructively removes everything form an array.
 *
 * @param[out]  ary              Target array to modify.
 * @exception   rb_eFrozenError  `ary` is frozen.
 * @return      The passed `ary`.
 * @post        `ary` is an empty array.
 */
VALUE rb_ary_clear(VALUE ary);

/**
 * Creates a new array, concatenating the former to the latter.
 *
 * @param[in]  lhs             Source array #1.
 * @param[in]  rhs             Source array #2.
 * @exception  rb_eIndexError  Result array too big.
 * @return     A new array containing `rhs` concatenated to `lhs`.
 * @note       This  operation  doesn't commute.   Don't  get  confused by  the
 *             "plus"  terminology.   For  historical reasons  there  are  some
 *             noncommutative `+`s in Ruby.  This is one of such things.  There
 *             has been a long discussion around `+`s in programming languages.
 *
 * @internal
 *
 * rb_ary_concat() is not  a destructive version of  rb_ary_plus().  They raise
 * different exceptions.  Don't know why though.
 */
VALUE rb_ary_plus(VALUE lhs, VALUE rhs);

/**
 * Destructively appends the contents of latter into the end of former.
 *
 * @param[out]  lhs              Destination array.
 * @param[in]   rhs              Source array.
 * @exception   rb_eFrozenError  `lhs` is frozen.
 * @exception   rb_eIndexError   Result array too big.
 * @exception   rb_eTypeError    `rhs` doesn't respond to `#to_ary`.
 * @return      The passed `lhs`.
 * @post        `lhs` has contents of `rhs` appended to its end.
 */
VALUE rb_ary_concat(VALUE lhs, VALUE rhs);

/**
 * Looks up the passed key, assuming the  passed array is an alist.  An "alist"
 * here  is a  list of  "association"s,  much like  that of  Emacs.  Emacs  has
 * `assoc` function that behaves exactly the same as this one.
 *
 * ```ruby
 * # This is an example of aliist.
 * auto_mode_alist = [
 *   [ /\.[ch]\z/, :"c-mode" ],
 *   [ /\.[ch]pp\z/, :"c++-mode" ],
 *   [ /\.awk\z/, :"awk-mode" ],
 *   [ /\.cs\z/, :"csharp-mode" ],
 *   [ /\.go\z/, :"go-mode" ],
 *   [ /\.java\z/, :"java-mode" ],
 *   [ /\.pas\z/, :"pascal-mode" ],
 *   [ /\.rs\z/, :"rust-mode" ],
 *   [ /\.txt\z/, :"text-mode" ],
 * ]
 * ```
 *
 * This function scans the passed array looking for an element, which itself is
 * an array,  whose first  element is the  passed key.  If  no such  element is
 * found, returns ::RUBY_Qnil.
 *
 * Although this  function expects the passed  array be an array  of arrays, it
 * can happily accept non-array elements; it just ignores such things.
 *
 * @param[in]  alist      An array of arrays.
 * @param[in]  key        Needle.
 * @retval     RUBY_Qnil  Nothing was found.
 * @retval     otherwise  An element in `alist` whose  first element is in `==`
 *                        relationship with `key`.
 */
VALUE rb_ary_assoc(VALUE alist, VALUE key);

/**
 * Identical  to rb_ary_assoc(),  except it  scans  the passed  array from  the
 * opposite direction.
 *
 * @param[in]  alist      An array of arrays.
 * @param[in]  key        Needle.
 * @retval     RUBY_Qnil  Nothing was found.
 * @retval     otherwise  An element in `alist` whose  first element is in `==`
 *                        relationship with `key`.
 */
VALUE rb_ary_rassoc(VALUE alist, VALUE key);

/**
 * Queries if the passed array has the passed entry.
 *
 * @param[in]  ary          Target array to scan.
 * @param[in]  elem         Target array to find.
 * @retval     RUBY_Qfalse  No element  in `ary`  is in `==`  relationship with
 *                          `elem`.
 * @retval     RUBY_Qtrue   There is at least one  element in `ary` which is in
 *                          `==` relationship with `elem`.
 *
 * @internal
 *
 * This is  the only function  in the  entire C API  that is named  using third
 * person singular  form of  a verb  (except #ISASCII etc.,  which are  not our
 * naming).  The counterpart Ruby API of this function is `Array#include?`.
 */
VALUE rb_ary_includes(VALUE ary, VALUE elem);

/**
 * Recursively compares each elements of the two arrays one-by-one using `<=>`.
 *
 * @param[in]  lhs        Comparison LHS.
 * @param[in]  rhs        Comparison RHS.
 * @retval     RUBY_Qnil  `lhs` and `rhs` are not comparable.
 * @retval     -1         `lhs` is less than `rhs`.
 * @retval      0         They are equal.
 * @retval      1         `rhs` is less then `lhs`.
 */
VALUE rb_ary_cmp(VALUE lhs, VALUE rhs);

/**
 * Replaces the contents of the former object with the contents of the latter.
 *
 * @param[out]  copy               Destination object.
 * @param[in]   orig               Source object.
 * @exception   rb_eTypeError     `orig` has no implicit conversion to Array.
 * @exception   rb_eFrozenError   `copy` is frozen.
 * @return      The passed `copy`.
 * @post        `copy`'s  former  components are  abandoned.   It  now has  the
 *              identical length and contents to `orig`.
 */
VALUE rb_ary_replace(VALUE copy, VALUE orig);

/**
 * This _was_  a generalisation  of `Array#values_at`,  `Struct#values_at`, and
 * `MatchData#values_at`.  It begun its life  as a refactoring effort.  However
 * as Ruby  evolves over  time, as  of writing  none of  aforementioned methods
 * share their implementations at all.   This function is not deprecated; still
 * works as it has been.  But it is now kind of like a rudimentum.
 *
 * This  function  takes an  object,  which  is a  receiver,  and  a series  of
 * "indices",  which are  either integers,  or ranges  of integers.   Calls the
 * passed callback  for each of those  indices, along with the  receiver.  This
 * callback is  expected to do something  like rb_ary_aref(), rb_struct_aref(),
 * etc.   In  case of  a  range  index  rb_range_beg_len() expands  the  range.
 * Finally  return values  of  the  callback are  gathered  as  an array,  then
 * returned.
 *
 * @param[in]  obj   Arbitrary ruby object.
 * @param[in]  olen  "Length" of `obj`.
 * @param[in]  argc  Number of objects of `argv`.
 * @param[in]  argv  List of "indices", described above.
 * @param[in]  func  Callback function.
 * @return     A new instance of ::rb_cArray gathering `func`outputs.
 *
 * @internal
 *
 * `Array#values_at` no  longer uses this  function.  There is no  reason apart
 * from historical ones to list this function here.
 */
VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx));

/**
 * Expands or shrinks the passed array to the passed length.
 *
 * @param[out]  ary              An array to modify.
 * @param[in]   len              Desired length of `ary`.
 * @exception   rb_eFrozenError  `ary`  is frozen.
 * @exception   rb_eIndexError   `len` too long.
 * @return      The passed `ary`.
 * @post        `ary`'s length is `len`.
 * @post        Depending on `len` and previous  length of `ary` this operation
 *              can  also create  a series  of "hole"  positions inside  of the
 *              backend storage.  They are filled with ::RUBY_Qnil.
 *
 * @internal
 *
 * `len` is signed.  Intentional or...?
 */
VALUE rb_ary_resize(VALUE ary, long len);

#define rb_ary_new2 rb_ary_new_capa         /**< @old{rb_ary_new_capa} */
#define rb_ary_new3 rb_ary_new_from_args    /**< @old{rb_ary_new_from_args} */
#define rb_ary_new4 rb_ary_new_from_values  /**< @old{rb_ary_new_from_values} */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_ARRAY_H */
PK*J[�Y� ��&include/ruby/internal/intern/marshal.hnu�[���#ifndef RBIMPL_INTERN_MARSHAL_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_MARSHAL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to rb_mMarshal.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* marshal.c */

/**
 * Serialises the  given object and  all its  referring objects, to  write them
 * down to the passed port.
 *
 * @param[in]   obj               Target object to dump.
 * @param[out]  port              IO-like destination buffer.
 * @exception   rb_eTypeError     `obj` cannot be dumped for some reason.
 * @exception   rb_eRuntimeError  `obj` was tampered during dumping.
 * @exception   rb_eArgError      Traversal too deep.
 * @return      The passed `port` as-is.
 * @post        Serialised representation of `obj` is written to `port`.
 * @note        `port` is basically an IO but StringIO is also possible.
 */
VALUE rb_marshal_dump(VALUE obj, VALUE port);

/**
 * Deserialises  a  previous output  of  rb_marshal_dump()  into a  network  of
 * objects.
 *
 * @param[in,out]  port           Either IO or String.
 * @exception      rb_eTypeError  `port` is in unexpected type.
 * @exception      rb_eArgError   Contents of `port` is broken.
 * @return         Object(s) rebuilt using the info from `port`.
 *
 * SECURITY  CONSIDERATIONS
 * ========================
 *
 * @warning        By  design,  rb_marshal_load()  can deserialise  almost  any
 *                 class loaded into the Ruby  process.  In many cases this can
 *                 lead to remote code execution  if the Marshal data is loaded
 *                 from an untrusted source.
 * @warning        As a result, rb_marshal_load() is  not suitable as a general
 *                 purpose serialisation format and  you should never unmarshal
 *                 user supplied input or other untrusted data.
 * @warning        If  you need  to  deserialise untrusted  data,  use JSON  or
 *                 another  serialisation  format that  is  only  able to  load
 *                 simple, 'primitive' types such  as String, Array, Hash, etc.
 *                 Never  allow  user  input  to  specify  arbitrary  types  to
 *                 deserialise into.
 */
VALUE rb_marshal_load(VALUE port);

/**
 * Marshal  format compatibility  layer.  Over  time, classes  evolve, so  that
 * their internal data structure change  drastically.  For instance an instance
 * of ::rb_cRange  was made  of ::RUBY_T_OBJECT  in 1.x.,  but in  3.x it  is a
 * ::RUBY_T_STRUCT now.  In  order to keep binary compatibility,  we "fake" the
 * marshalled representation to stick to old  types.  This is the API to enable
 * that manoeuvre.  Here is how:
 *
 * First, because  you are going to  keep backwards compatibility, you  need to
 * retain the old implementation of your  class.  Rename it, and keep the class
 * somewhere  (for  instance  rb_register_global_address() could  help).   Next
 * create your new class.  Do whatever you want.
 *
 * Then, this is the key point.  Create two new "bridge" functions that convert
 * the structs back and forth:
 *
 *   - the  "dumper" function  that takes  an instance  of the  new class,  and
 *     returns   an  instance   of  the   old   one.   This   is  called   from
 *     rb_marshal_dump(), to keep it possible for old programs to read your new
 *     data.
 *
 *   - the "loader" function that takes two  arguments, new one and old one, in
 *     that  order.  rb_marshal_load()  calls  this function  when  it finds  a
 *     representation of  the retained old class.   The old one passed  to this
 *     function   is   the   reconstructed   instance   of   the   old   class.
 *     Reverse-engineer  that to  modify the  new  one, to  have the  identical
 *     contents.
 *
 * Finally, connect all of them using this function.
 *
 * @param[in]  newclass       The class that needs conversion.
 * @param[in]  oldclass       Old implementation of `newclass`.
 * @param[in]  dumper         Function that converts `newclass` to `oldclass`.
 * @param[in]  loader         Function that converts `oldclass` to `newclass`.
 * @exception  rb_eTypeError  `newclass` has no allocator.
 */
void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_MARSHAL_H */
PK*J[�z�$6$6#include/ruby/internal/intern/proc.hnu�[���#ifndef RBIMPL_INTERN_PROC_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_PROC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cProc.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/iterator.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* proc.c */

/**
 * Constructs a  Proc object  from implicitly passed  components.  When  a ruby
 * method is  called with a block,  that block is not  explicitly passed around
 * using C level function parameters.   This function gathers all the necessary
 * info to turn them into a Ruby level instance of ::rb_cProc.
 *
 * @exception  rb_eArgError  There is no passed block.
 * @return     An instance of ::rb_cProc.
 */
VALUE rb_block_proc(void);

/**
 * Identical to rb_proc_new(), except it returns a lambda.
 *
 * @exception  rb_eArgError  There is no passed block.
 * @return     An instance of ::rb_cProc.
 */
VALUE rb_block_lambda(void);

/**
 * This is an rb_iterate() + rb_block_proc() combo.
 *
 * ```CXX
 * VALUE
 * my_own_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(y, c))
 * {
 *     const auto plus = rb_intern("+");
 *     return rb_funcall(c, plus, 1, y);
 * }
 *
 * VALUE
 * my_own_method(VALUE self)
 * {
 *     return rb_proc_new(my_own_iterator, self);
 * }
 * ```
 *
 * @param[in]  func          A backend function of a proc.
 * @param[in]  callback_arg  Passed to `func`'s callback_arg.
 * @return     A C-backended proc object.
 *
 */
VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg);

/**
 * Queries if the given object is a proc.
 *
 * @note       This is about the object's data structure, not its class etc.
 * @param[in]  recv         Object in question.
 * @retval     RUBY_Qtrue   It is a proc.
 * @retval     RUBY_Qfalse  Otherwise.
 */
VALUE rb_obj_is_proc(VALUE recv);

/**
 * Evaluates the passed proc with the passed arguments.
 *
 * @param[in]  recv           The proc to call.
 * @param[in]  args           An instance of ::RArray which is the arguments.
 * @exception  rb_eException  Any exceptions happen inside.
 * @return     What the proc evaluates to.
 */
VALUE rb_proc_call(VALUE recv, VALUE args);

/**
 * Identical to rb_proc_call(),  except you can specify how to  handle the last
 * element of the given array.
 *
 * @param[in]  recv             The proc to call.
 * @param[in]  args             An instance of ::RArray which is the arguments.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `args`' last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `args`' last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eException    Any exceptions happen inside.
 * @return     What the proc evaluates to.
 */
VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat);

/**
 * Identical to rb_proc_call(),  except you can additionally  pass another proc
 * object, as a block.  Nowadays procs can take blocks:
 *
 * ```ruby
 * l = -> (positional, optional=nil, *rest, kwarg:, **kwrest, &block) {
 *   #                   ... how can we pass this `&block`?   ^^^^^^
 * }
 * ```
 *
 * And this function is to pass one to such procs.
 *
 * @param[in]  recv           The proc to call.
 * @param[in]  argc           Number of arguments.
 * @param[in]  argv           Arbitrary number of proc arguments.
 * @param[in]  proc           Proc as a passed block.
 * @exception  rb_eException  Any exceptions happen inside.
 * @return     What the proc evaluates to.
 */
VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc);

/**
 * Identical to rb_proc_call_with_block(), except you can specify how to handle
 * the last  element of  the given  array.  It can  also be  seen as  a routine
 * identical  to rb_proc_call_kw(),  except you  can additionally  pass another
 * proc object as a block.
 *
 * @param[in]  recv             The proc to call.
 * @param[in]  argc             Number of arguments.
 * @param[in]  argv             Arbitrary number of proc arguments.
 * @param[in]  proc             Proc as a passed block.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `args`' last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `args`' last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eException    Any exceptions happen inside.
 * @return     What the proc evaluates to.
 */
VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat);

/**
 * Queries the number  of mandatory arguments of the given  Proc.  If its block
 * is declared  to take no  arguments, returns `0`.  If  the block is  known to
 * take  exactly  `n`  arguments,  returns  `n`.  If  the  block  has  optional
 * arguments, returns `-n-1`,  where `n` is the number  of mandatory arguments,
 * with the exception  for blocks that are  not lambdas and have  only a finite
 * number of  optional arguments;  in this latter  case, returns  `n`.  Keyword
 * arguments will be considered as  a single additional argument, that argument
 * being mandatory if any keyword argument is mandatory.
 *
 * @param[in]  recv  Target Proc object.
 * @retval     0     It takes no arguments.
 * @retval     >0    It takes exactly this number of arguments.
 * @retval     <0    It takes optional arguments.
 */
int rb_proc_arity(VALUE recv);

/**
 * Queries if the given object is a lambda.  Instances of ::rb_cProc are either
 * lambda  or  proc.   They  differ  in  several  points.   This  function  can
 * distinguish them without actually evaluating their contents.
 *
 * @param[in]  recv         Target proc object.
 * @retval     RUBY_Qtrue   It is a lambda.
 * @retval     RUBY_Qfalse  Otherwise.
 */
VALUE rb_proc_lambda_p(VALUE recv);

/**
 * Snapshots the  current execution  context and  turn it  into an  instance of
 * ::rb_cBinding.
 *
 * @return  An instance of ::rb_cBinding.
 */
VALUE rb_binding_new(void);

/**
 * Creates a method object.  A method object is a proc-like object that you can
 * "call".  Note  that a  method object  snapshots the method  at the  time the
 * object is created:
 *
 * ```ruby
 * class Foo
 *   def foo
 *     return 1
 *   end
 * end
 *
 * obj = Foo.new.method(:foo)
 *
 * class Foo
 *   def foo
 *     return 2
 *   end
 * end
 *
 * obj.call # => 1, not 2.
 * ```
 *
 * @param[in]  recv               Receiver of the method.
 * @param[in]  mid                Method name, in either String or Symbol.
 * @exception  rb_eNoMethodError  No such method.
 * @return     An instance of ::rb_cMethod.
 */
VALUE rb_obj_method(VALUE recv, VALUE mid);

/**
 * Queries if the given object is a method.
 *
 * @note       This is about the object's data structure, not its class etc.
 * @param[in]  recv         Object in question.
 * @retval     RUBY_Qtrue   It is a method.
 * @retval     RUBY_Qfalse  Otherwise.
 */
VALUE rb_obj_is_method(VALUE recv);

/**
 * Evaluates the passed method with the passed arguments.
 *
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Arbitrary number of method arguments.
 * @param[in]  recv           The method object to call.
 * @exception  rb_eTypeError  `recv` is not a method.
 * @exception  rb_eException  Any exceptions happen inside.
 * @return     What the method returns.
 */
VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv);

/**
 * Identical to rb_method_call(), except you can specify how to handle the last
 * element of the given array.
 *
 * @param[in]  argc             Number of objects of `argv`.
 * @param[in]  argv             Arbitrary number of method arguments.
 * @param[in]  recv             The method object to call.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `args`' last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `args`' last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eTypeError    `recv` is not a method.
 * @exception  rb_eException    Any exceptions happen inside.
 * @return     What the method returns.
 */
VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat);

/**
 * Identical to  rb_proc_call(), except you can  additionally pass a proc  as a
 * block.
 *
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Arbitrary number of method arguments.
 * @param[in]  recv           The method object to call.
 * @param[in]  proc           Proc as a passed block.
 * @exception  rb_eTypeError  `recv` is not a method.
 * @exception  rb_eException  Any exceptions happen inside.
 * @return     What the method returns.
 */
VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc);

/**
 * Identical  to rb_method_call_with_block(),  except  you can  specify how  to
 * handle  the last  element of  the given  array.  It  can also  be seen  as a
 * routine identical  to rb_method_call_kw(), except you  can additionally pass
 * another proc object as a block.
 *
 * @param[in]  argc             Number of objects of `argv`.
 * @param[in]  argv             Arbitrary number of method arguments.
 * @param[in]  recv             The method object to call.
 * @param[in]  proc             Proc as a passed block.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `args`' last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `args`' last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eTypeError    `recv` is not a method.
 * @exception  rb_eException    Any exceptions happen inside.
 * @return     What the method returns.
 */
VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat);

/**
 * Queries the number of mandatory arguments of the method defined in the given
 * module.  If it is  declared to take no arguments, returns  `0`.  If it takes
 * exactly `n` arguments,  returns `n`.  If it has  optional arguments, returns
 * `-n-1`, where `n`  is the number of mandatory  arguments.  Keyword arguments
 * will  be considered  as a  single additional  argument, that  argument being
 * mandatory if any keyword argument is mandatory.
 *
 * @param[in]  mod   Namespace to search a method for.
 * @param[in]  mid   Method id.
 * @retval     0     It takes no arguments.
 * @retval     >0    It takes exactly this number of arguments.
 * @retval     <0    It takes optional arguments.
 */
int rb_mod_method_arity(VALUE mod, ID mid);

/**
 * Identical to rb_mod_method_arity(), except it searches for singleton methods
 * rather than instance methods.
 *
 * @param[in]  obj   Object to search for a singleton method.
 * @param[in]  mid   Method id.
 * @retval     0     It takes no arguments.
 * @retval     >0    It takes exactly this number of arguments.
 * @retval     <0    It takes optional arguments.
 */
int rb_obj_method_arity(VALUE obj, ID mid);

/* eval.c */

RBIMPL_ATTR_NONNULL((1))
/**
 * Protects a  function call from  potential global escapes from  the function.
 * Such global escapes include exceptions, `throw`, `break`, for example.
 *
 * It first calls the function func with  `args` as the argument.  If no global
 * escape occurred during  the function, it returns the result  and `*state` is
 * zero.  Otherwise, it  returns ::RUBY_Qnil and sets `*state`  to nonzero.  If
 * `state` is `NULL`, it is not set in both cases.
 *
 * @param[in]   func   A function that potentially escapes globally.
 * @param[in]   args   Passed as-is to `func`.
 * @param[out]  state  State of execution.
 * @return      What  `func` returns,  or an  undefined value  when it  did not
 *              return.
 * @post        `*state` is set to zero if succeeded.  Nonzero otherwise.
 * @warning     You have to clear the error info with `rb_set_errinfo(Qnil)` if
 *              you decide to ignore the caught exception.
 * @see         rb_eval_string_protect()
 * @see         rb_load_protect()
 *
 * @internal
 *
 * The "undefined value"  described above is in fact ::RUBY_Qnil  for now.  But
 * @shyouhei doesn't think that we would never change that.
 *
 * Though   not  a   part  of   our  public   API,  `state`   is  in   fact  an
 * enum ruby_tag_type.  You can  see the potential "nonzero"  values by looking
 * at vm_core.h.
 */
VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_PROC_H */
PK*J[�K��<S<S'include/ruby/internal/intern/variable.hnu�[���#ifndef RBIMPL_INTERN_VARIABLE_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_VARIABLE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to names inside of a Ruby program.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/st.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* variable.c */

/**
 * Queries the name of a module.
 *
 * @param[in]  mod        An instance of ::rb_cModule.
 * @retval     RUBY_Qnil  `mod` is anonymous.
 * @retval     otherwise  `mod` is onymous.
 */
VALUE rb_mod_name(VALUE mod);

/**
 * Identical  to  rb_mod_name(),  except   it  returns  `#<Class:  ...>`  style
 * inspection for anonymous modules.
 *
 * @param[in]  mod        An instance of ::rb_cModule.
 * @return     An instance of ::rb_cString representing `mod`'s path.
 */
VALUE rb_class_path(VALUE mod);

/**
 * @alias{rb_mod_name}
 *
 * @internal
 *
 * Am I missing something?  Why we have the same thing in different names?
 */
VALUE rb_class_path_cached(VALUE mod);

RBIMPL_ATTR_NONNULL(())
/**
 * Names a class.
 *
 * @param[out]  klass  Target module to name.
 * @param[out]  space  Namespace that `klass` shall reside.
 * @param[in]   name   Name of `klass`.
 * @post        `klass` has `space::klass` name.
 */
void rb_set_class_path(VALUE klass, VALUE space, const char *name);

/**
 * Identical  to rb_set_class_path(),  except  it accepts  the  name as  Ruby's
 * string instead of C's.
 *
 * @param[out]  klass  Target module to name.
 * @param[out]  space  Namespace that `klass` shall reside.
 * @param[in]   name   Name of `klass`.
 * @post        `klass` has `space::klass` name.
 */
void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);

/**
 * Identical to  rb_path2class(), except it  accepts the path as  Ruby's string
 * instead of C's.
 *
 * @param[in]  path           Path to query.
 * @exception  rb_eArgError   No such constant.
 * @exception  rb_eTypeError  The path resolved to a non-module.
 * @return     Resolved class.
 */
VALUE rb_path_to_class(VALUE path);

RBIMPL_ATTR_NONNULL(())
/**
 * Resolves a `Q::W::E::R`-style path string to the actual class it points.
 *
 * @param[in]  path           Path to query.
 * @exception  rb_eArgError   No such constant.
 * @exception  rb_eTypeError  The path resolved to a non-module.
 * @return     Resolved class.
 */
VALUE rb_path2class(const char *path);

/**
 * Queries the name of the given object's class.
 *
 * @param[in]  obj  Arbitrary object.
 * @return     An instance of ::rb_cString representing `obj`'s class' path.
 */
VALUE rb_class_name(VALUE obj);

/**
 * Kicks the autoload procedure as if it was "touched".
 *
 * @param[out]  space        Namespace where autoload is defined.
 * @param[in]   name         Name of the autoloaded constant.
 * @retval      RUBY_Qfalse  No such autoload.
 * @retval      RUBY_Qtrue   Autoload successfully initiated.
 * @note        As an  autoloaded library is expected  to define `space::name`,
 *              it is  a nature  of this function  to have  process-global side
 *              effects.
 * @note        Multiple threads  can simultaneously call this  API.  It blocks
 *              then.  That must not last indefinitely but can take longer than
 *              you expect.
 *
 * @internal
 *
 * @shyouhei has no idea why extension libraries should use this API.
 */
VALUE rb_autoload_load(VALUE space, ID name);

/**
 * Queries if an autoload is defined at a point.
 *
 * @param[in]  space      Namespace where autoload is defined.
 * @param[in]  name       Name of the autoloaded constant.
 * @retval     RUBY_Qnil  No such autoload.
 * @retval     otherwise  The feature (path) registered at `space::name`.
 */
VALUE rb_autoload_p(VALUE space, ID name);

/**
 * Traces a global variable.
 *
 * @param[in]  argc        Either 1 or 2.
 * @param[in]  argv        Variable name, optionally a Proc.
 * @retval     RUBY_Qnil   No previous tracers.
 * @retval     otherwise   Previous tracers.
 *
 * @internal
 *
 * @shyouhei has no idea why extension libraries should use this API.
 */
VALUE rb_f_trace_var(int argc, const VALUE *argv);

/**
 * Deletes the  passed tracer from the  passed global variable, or  if omitted,
 * deletes everything.
 *
 * @param[in]  argc        Either 1 or 2.
 * @param[in]  argv        Variable name, optionally a Proc.
 * @retval     RUBY_Qnil   No previous tracers.
 * @retval     otherwise   Deleted tracers.
 *
 * @internal
 *
 * @shyouhei has no idea why extension libraries should use this API.
 */
VALUE rb_f_untrace_var(int argc, const VALUE *argv);

/**
 * Queries the list of global variables.
 *
 * @return  The list of the name of the global variables.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
VALUE rb_f_global_variables(void);

/**
 * Aliases  a global  variable.   Did you  know  that you  can  alias a  global
 * variable?  It is like aliasing methods:
 *
 * ```ruby
 * alias $dst $src
 * ```
 *
 * This C function does the same thing.
 *
 * @param[in]  dst  Destination name.
 * @param[in]  src  Source name.
 * @post       A global  variable named `dst`  is defined to  be an alias  of a
 *             global variable named `src`.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
void rb_alias_variable(ID dst, ID src);

/**
 * Frees the list of instance variables.   3rd parties need not know, but there
 * are several ways  to store an object's instance variables,  depending on its
 * internal structure.   This function makes  sense when the passed  objects is
 * using so-called "generic" backend storage.  People need not be aware of this
 * working behind-the-scenes.
 *
 * @param[out]  obj  The object in question.
 *
 * @internal
 *
 * This just  destroys the given object.   @shyouhei has no idea  why extension
 * libraries should use this API.
 */
void rb_free_generic_ivar(VALUE obj);

/**
 * Identical to rb_iv_get(), except it accepts the name as an ::ID instead of a
 * C string.
 *
 * @param[in]  obj        Target object.
 * @param[in]  name       Target instance variable to query.
 * @retval     RUBY_nil   No such instance variable.
 * @retval     otherwise  The value assigned to the instance variable.
 */
VALUE rb_ivar_get(VALUE obj, ID name);

/**
 * Identical to rb_iv_set(), except it accepts the name as an ::ID instead of a
 * C string.
 *
 * @param[out]  obj              Target object.
 * @param[in]   name             Target instance variable.
 * @param[in]   val              Value to assign.
 * @exception   rb_eFrozenError  Can't modify `obj`.
 * @exception   rb_eArgError     `obj` has too many instance variables.
 * @return      Passed value.
 * @post        An  instance variable  named  `name` is  defined  if absent  on
 *              `obj`, whose value is set to `val`.
 */
VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);

/**
 * Queries if  the instance variable  is defined  at the object.   This roughly
 * resembles `defined?(@name)` in `obj`'s context.
 *
 * @param[in]  obj          Target object.
 * @param[in]  name         Target instance variable to query.
 * @retval     RUBY_Qtrue   There is an instance variable.
 * @retval     RUBY_Qfalse  No such instance variable.
 */
VALUE rb_ivar_defined(VALUE obj, ID name);

/**
 * Iterates over an object's instance variables.
 *
 * @param[in]  obj   Target object.
 * @param[in]  func  Callback function.
 * @param[in]  arg   Passed as-is to the last argument of `func`.
 */
void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);

/**
 * Number of instance variables defined on an object.
 *
 * @param[in]  obj   Target object.
 * @return     Number of instance variables defined on `obj`.
 */
st_index_t rb_ivar_count(VALUE obj);

/**
 * Identical to rb_ivar_get()
 *
 * @param[in]  obj        Target object.
 * @param[in]  name       Target instance variable to query.
 * @retval     RUBY_nil   No such instance variable.
 * @retval     otherwise  The value assigned to the instance variable.
 *
 * @internal
 *
 * Am I missing something?  Why we have the same thing in different names?
 */
VALUE rb_attr_get(VALUE obj, ID name);

/**
 * Resembles `Object#instance_variables`.
 *
 * @param[in]  obj  Target object to query.
 * @return     An array of instance variable names for the receiver.
 * @note       Simply defining  an accessor  does not create  the corresponding
 *             instance variable.
 */
VALUE rb_obj_instance_variables(VALUE obj);

/**
 * Resembles `Object#remove_instance_variable`.
 *
 * @param[out]  obj   Target object.
 * @param[in]   name  Variable name to remove, either in Symbol or String.
 * @return      What was removed.
 * @pre         Instance variable named `name` is deleted from `obj`.
 */
VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name);

/**
 * This API is  mysterious.  It has been there since  the initial revision.  No
 * single bits of  documents has ever been written.  The  function name doesn't
 * describe anything.  What should be passed to the argument, or what should be
 * the  return value,  are not  obvious.  Yet  it has  evolved over  time.  The
 * source code is written in counter-intuitive way (as of 3.0).
 *
 * Simply put, don't try to understand this API.
 */
void *rb_mod_const_at(VALUE, void*);

/**
 * This is a variant of rb_mod_const_at().  As a result, it is also mysterious.
 * It _seems_ it iterates over the ancestry  tree of the module.  But what that
 * means is beyond a human brain.
 */
void *rb_mod_const_of(VALUE, void*);

/**
 * This is  another mysterious  API that  comes with no  documents at  all.  It
 * seems it expects  some specific data structure for the  passed pointer.  But
 * the details has  never been made explicit.  It seems  nobody should use this
 * API.
 */
VALUE rb_const_list(void*);

/**
 * Resembles  `Module#constants`.   List  up   the  constants  defined  at  the
 * receiver.  This  includes the  names of constants  in any  included modules,
 * unless `argv[0]` is ::RUBY_Qfalse.
 *
 * The  implementation  makes  no  guarantees  about the  order  in  which  the
 * constants are yielded.
 *
 * @param[in]  argc  Either 0 or 1.
 * @param[in]  argv  Pointer to ::RUBY_Qfalse, if `argc == 1`.
 * @param[in]  recv  Target namespace.
 * @return     An array of symbols, which are constant names under `recv`.
 */
VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv);

/**
 * Resembles `Module#remove_const`.
 *
 * @param[out]  space  Target namespace.
 * @param[in]   name   Variable name to remove, either in Symbol or String.
 * @return      What was removed.
 * @pre         Constant named `space::name` is deleted.
 * @note        In case what was removed was in  fact a module or a class, this
 *              operation does  not affect its  name.  Which means  when people
 *              for instance  look at  it using `p`  etc., it  still introduces
 *              itself using the deleted name.  Can confuse people.
 */
VALUE rb_mod_remove_const(VALUE space, VALUE name);

/**
 * Queries if the constant is defined at the namespace.
 *
 * @param[in]  space        Target namespace.
 * @param[in]  name         Target name to query.
 * @retval     RUBY_Qtrue   There is a constant.
 * @retval     RUBY_Qfalse  No such constant.
 *
 * @internal
 *
 * The return values are not typo!  This function returns ruby values casted to
 * `int`.  Completely brain-damaged design.
 */
int rb_const_defined(VALUE space, ID name);

/**
 * Identical to rb_const_defined(), except it  doesn't look for parent classes.
 * For  instance  `Array`  is  a  toplevel  constant,  which  is  visible  from
 * everywhere.  But this  function does not take such things  into account.  It
 * concerns only what is directly defined inside of the given namespace.
 *
 * @param[in]  space        Target namespace.
 * @param[in]  name         Target name to query.
 * @retval     RUBY_Qtrue   There is a constant.
 * @retval     RUBY_Qfalse  No such constant.
 *
 * @internal
 *
 * The return values are not typo!  This function returns ruby values casted to
 * `int`.  Completely brain-damaged design.
 */
int rb_const_defined_at(VALUE space, ID name);

/**
 * Identical  to  rb_const_defined(),  except  it  returns  false  for  private
 * constants.
 *
 * @param[in]  space        Target namespace.
 * @param[in]  name         Target name to query.
 * @retval     RUBY_Qtrue   There is a constant.
 * @retval     RUBY_Qfalse  No such constant.
 *
 * @internal
 *
 * What does "from" mean?  The name sounds quite cryptic.
 *
 * The return values are not typo!  This function returns ruby values casted to
 * `int`.  Completely brain-damaged design.
 */
int rb_const_defined_from(VALUE space, ID name);

/**
 * Identical to rb_const_defined(), except it returns the actual defined value.
 *
 * @param[in]  space          Target namespace.
 * @param[in]  name           Target name to query.
 * @exception  rb_eNameError  No such constant.
 * @return     The defined constant.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
VALUE rb_const_get(VALUE space, ID name);

/**
 * Identical  to rb_const_defined_at(),  except it  returns the  actual defined
 * value.  It can also be seen as a routine identical to rb_const_get(), except
 * it doesn't look for parent classes.
 *
 * @param[in]  space          Target namespace.
 * @param[in]  name           Target name to query.
 * @exception  rb_eNameError  No such constant.
 * @return     The defined constant.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
VALUE rb_const_get_at(VALUE space, ID name);

/**
 * Identical  to rb_const_defined_at(),  except it  returns the  actual defined
 * value.  It can also be seen as a routine identical to rb_const_get(), except
 * it doesn't return a private constant.
 *
 * @param[in]  space          Target namespace.
 * @param[in]  name           Target name to query.
 * @exception  rb_eNameError  No such constant.
 * @return     The defined constant.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
VALUE rb_const_get_from(VALUE space, ID name);

/**
 * Names a constant.
 *
 * @param[out]  space          Target namespace.
 * @param[in]   name           Target name to query.
 * @param[in]   val            Value to define.
 * @exception   rb_eTypeError  `space` is not a module.
 * @post        `name` is a constant under `space`, whose value is `val`.
 * @note        You can reassign.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
void rb_const_set(VALUE space, ID name, VALUE val);

/**
 * Identical to rb_mod_remove_const(), except it takes the name as ::ID instead
 * of ::VALUE.
 *
 * @param[out]  space  Target namespace.
 * @param[in]   name   Variable name to remove, either in Symbol or String.
 * @return      What was removed.
 * @pre         Constant named `space::name` is deleted.
 * @note        In case what was removed was in  fact a module or a class, this
 *              operation does  not affect its  name.  Which means  when people
 *              for instance  look at  it using `p`  etc., it  still introduces
 *              itself using the deleted name.  Can confuse people.
 */
VALUE rb_const_remove(VALUE space, ID name);

#if 0 /* EXPERIMENTAL: remove if no problem */
RBIMPL_ATTR_NORETURN()
/**
 * This is the default implementation of `Module#const_missing`.
 *
 * @param[in]  space          Target namespace.
 * @param[in]  name           Target name that is nonexistent.
 * @exception  rb_eNameError  Always.
 */
VALUE rb_mod_const_missing(VALUE space, VALUE name);
#endif

/**
 * Queries if the given class has the given class variable.
 *
 * @param[in]  klass        Target class.
 * @param[in]  name         Name to query.
 * @return     RUBY_Qtrue   Yes there is.
 * @return     RUBY_Qfalse  No there isn't.
 * @pre        `klass` must be an instance of rb_cModule.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
VALUE rb_cvar_defined(VALUE klass, ID name);

/**
 * Assigns a value to a class variable.
 *
 * @param[out]  klass  Target class.
 * @param[in]   name   Variable name.
 * @param[in]   val    Value to be assigned.
 * @post        `klass` has a class variable named `name` whose value is `val`.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
void rb_cvar_set(VALUE klass, ID name, VALUE val);

/**
 * Obtains a value from a class variable.
 *
 * @param[in]  klass             Target class.
 * @param[in]  name              Variable name.
 * @exception  rb_eNameError     Uninitialised class variable.
 * @exception  rb_eRuntimeError  `[Bug#14541]` situation.
 * @return     Class variable named `name` under `klass`.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
VALUE rb_cvar_get(VALUE klass, ID name);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical  to rb_cvar_get(),  except  it takes  additional "front"  pointer.
 * This  extra parameter  is a  buffer,  which will  have the  class where  the
 * queried class variable actually resides.
 *
 * @param[in]   klass             Target class.
 * @param[in]   name              Variable name.
 * @param[out]  front             Return buffer.
 * @exception   rb_eNameError     Uninitialised class variable.
 * @exception   rb_eRuntimeError  `[Bug#14541]` situation.
 * @return      Class variable named `name` under `klass`.
 * @post        `front` has the class object,  which is an ancestor of `klass`,
 *              where the queried class variable actually resides.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_cvar_set(), except it accepts C's string instead of ::ID.
 *
 * @param[out]  klass  Target class.
 * @param[in]   name   Variable name.
 * @param[in]   val    Value to be assigned.
 * @post        `klass` has a class variable named `name` whose value is `val`.
 */
void rb_cv_set(VALUE klass, const char *name, VALUE val);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_cvar_get(), except it accepts C's string instead of ::ID.
 *
 * @param[in]  klass             Target class.
 * @param[in]  name              Variable name.
 * @exception  rb_eNameError     Uninitialised class variable.
 * @exception  rb_eRuntimeError  `[Bug#14541]` situation.
 * @return     Class variable named `name` under `klass`.
 */
VALUE rb_cv_get(VALUE klass, const char *name);

RBIMPL_ATTR_NONNULL(())
/**
 * @alias{rb_cv_set}
 *
 * @internal
 *
 * Am I missing something?  Why we have the same thing in different names?
 */
void rb_define_class_variable(VALUE, const char*, VALUE);

/**
 * Resembles `Module#class_variables`.   List up  the variables defined  at the
 * receiver.  This  includes the  names of constants  in any  included modules,
 * unless `argv[0]` is ::RUBY_Qfalse.
 *
 * The  implementation  makes  no  guarantees  about the  order  in  which  the
 * constants are yielded.
 *
 * @param[in]  argc  Either 0 or 1.
 * @param[in]  argv  Pointer to ::RUBY_Qfalse, if `argc == 1`.
 * @param[in]  recv  Target class.
 * @return     An  array  of symbols,  which  are  class variable  names  under
 *             `recv`.
 */
VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv);

/**
 * Resembles `Module#remove_class_variable`.
 *
 * @param[out]  mod   Target class.
 * @param[in]   name  Variable name to remove, either in Symbol or String.
 * @return      What was removed.
 * @pre         Instance variable named `name` is deleted from `obj`.
 */
VALUE rb_mod_remove_cvar(VALUE mod, VALUE name);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_VARIABLE_H */
PK*J[>LG��&include/ruby/internal/intern/numeric.hnu�[���#ifndef RBIMPL_INTERN_NUMERIC_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_NUMERIC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cNumeric.
 */
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RB_NUM_COERCE_FUNCS_NEED_OPID 1

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* numeric.c */

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_COLD()
/**
 * Just always raises an exception.
 *
 * @exception  rb_eZeroDivError  Division by zero error.
 */
void rb_num_zerodiv(void);

/**
 * @name Coercion operators.
 *
 * What  is a  coercion?   Well Ruby  is  basically  an OOPL  but  it also  has
 * arithmetic operators.   They are  implemented in  OO manners.   For instance
 * `a+b` is  a binary operation  `+`, whose receiver  is `a`, and  whose (sole)
 * argument is `b`.
 *
 * The problem is, you  often want `a+b == b+a` to hold.  That  is easy if both
 * `a` and `b` belongs to the same class...  Ensuring  `1 + 2 == 2 + 1` is kind
 * of intuitive.  But  if you want `1.0 +  2 == 2 + 1.0`,  things start getting
 * complicated.  `1.0+2` is `Float#+`, while  `2+1.0` is `Integer#+`.  In order
 * to achieve the equality Float's and  Integer's methods must agree with their
 * behaviours.
 *
 * Now.  Floats  versus Integers situation  is still controllable  because they
 * are both  built-in.  But in  Ruby you can  define your own  numeric classes.
 * BigDecimal, which is a rubygems  gem distributed along with the interpreter,
 * is one  of such  examples.  Rational  was another  such example  before.  In
 * short you cannot create list of all possible combination of the classes that
 * could  be  the  operand  of  `+`  operator.  Then  how  do  we  achieve  the
 * commutativity?
 *
 * Here  comes  the concept  of  coercion.   If  a  definition of  an  operator
 * encounters an object  which is unknown to the author,  just assumes that the
 * unknown object  knows how  to handle  the situation.   So for  instance when
 * `1+x` has unknown `x`, it lets the `x` handle this.
 *
 * ```ruby
 * class Foo
 *   def +(x)
 *     if we_know_what_is_x? then
 *       ... # handle here
 *     else
 *       y, z = x.coerce self
 *       return y + z
 *     end
 *   end
 * end
 * ```
 *
 * The `x.coerce` method returns a  2-element array which are "casted" versions
 * of `x` and `self`.
 *
 * @{
 */

/**
 * Coerced binary operation.  This function first coerces the two objects, then
 * applies the operation.
 *
 * @param[in]  lhs            LHS operand.
 * @param[in]  rhs            RHS operand.
 * @param[in]  op             Operator method name.
 * @exception  rb_eTypeError  Coercion failed for some reason.
 * @return     `lhs op rhs`, in a coerced way.
 */
VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op);

/**
 * Identical to  rb_num_coerce_bin(), except for return  values.  This function
 * best suits for comparison operators e.g. `<=>`.
 *
 * @param[in]  lhs        LHS operand.
 * @param[in]  rhs        RHS operand.
 * @param[in]  op         Operator method name.
 * @retval     RUBY_Qnil  Coercion failed for some reason.
 * @retval     otherwise  `lhs op rhs`, in a coerced way.
 */
VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op);

/**
 * Identical to  rb_num_coerce_cmp(), except for return  values.  This function
 * best suits for relationship operators e.g. `<=`.
 *
 * @param[in]  lhs           LHS operand.
 * @param[in]  rhs           RHS operand.
 * @param[in]  op            Operator method name.
 * @exception  rb_eArgError  Coercion failed for some reason.
 * @return     `lhs op rhs`, in a coerced way.
 */
VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op);

/**
 * This one  is optimised for bitwise  operations, but the API  is identical to
 * rb_num_coerce_bin().
 *
 * @param[in]  lhs           LHS operand.
 * @param[in]  rhs           RHS operand.
 * @param[in]  op            Operator method name.
 * @exception  rb_eArgError  Coercion failed for some reason.
 * @return     `lhs op rhs`, in a coerced way.
 */
VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op);

/** @} */

/**
 * Converts  a  numeric  value  into  a  Fixnum.   This  is  not  a  preserving
 * conversion; for instance 1.5 would be converted into 1.
 *
 * @param[in]  val             A numeric object.
 * @exception  rb_eTypeError   No conversion from `val` to Integer.
 * @exception  rb_eRangeError  `val` out of range.
 * @return     A fixnum converted from `val`.
 *
 * @internal
 *
 * This seems used from nowhere?
 */
VALUE rb_num2fix(VALUE val);

/**
 * Generates  a place-value  representation  of the  given  Fixnum, with  given
 * radix.
 *
 * @param[in]  val           A fixnum to stringify.
 * @param[in]  base          `2` to `36` inclusive for each radix.
 * @exception  rb_eArgError  `base` is out of range.
 * @return     An instance of ::rb_cString representing `val`.
 * @pre        `val` must be a Fixnum (no checks performed).
 */
VALUE rb_fix2str(VALUE val, int base);

RBIMPL_ATTR_CONST()
/**
 * Compares two `double`s.  Handy when implementing a spaceship operator.
 *
 * @param[in]  lhs             A value.
 * @param[in]  rhs             Another value.
 * @retval     RB_INT2FIX(-1)  `lhs` is "bigger than" `rhs`.
 * @retval     RB_INT2FIX(1)   `rhs` is "bigger than" `lhs`.
 * @retval     RB_INT2FIX(0)   They are equal.
 * @retval     RUBY_Qnil       Not comparable, e.g. NaN.
 */
VALUE rb_dbl_cmp(double lhs, double rhs);

/**
 * Raises the passed `x` to the power of `y`.
 *
 * @note       The return value can be really big.
 * @note       Also the  return value  can be  really small, in  case `x`  is a
 *             negative number.
 * @param[in]  x          A number.
 * @param[in]  y          Another number.
 * @retval     Inf        Cannot express the result.
 * @retval     1          Either `y` is 0 or `x` is 1.
 * @retval     otherwise  An instance of ::rb_cInteger whose value is `x ** y`.
 *
 * @internal
 *
 * This function  returns Infinity  when `y` is  big enough not  to fit  into a
 * Fixnum.  Warning is issued then.
 */
RUBY_EXTERN VALUE rb_int_positive_pow(long x, unsigned long y);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_NUMERIC_H */
PK*J[�S�е-�-#include/ruby/internal/intern/cont.hnu�[���#ifndef  RBIMPL_INTERN_CONT_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define  RBIMPL_INTERN_CONT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to rb_cFiber.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/iterator.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* cont.c */

/**
 * Creates a Fiber instance from a C-backended block.
 *
 * @param[in]  func          A function, to become the fiber's body.
 * @param[in]  callback_obj  Passed as-is to `func`.
 * @return     An allocated  new instance  of rb_cFiber, which  is ready  to be
 *             "resume"d.
 */
VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj);

/**
 * Creates a Fiber instance from a C-backended block with the specified
 * storage.
 *
 * If the given storage is Qundef or Qtrue, this function is equivalent to
 * rb_fiber_new() which inherits storage from the current fiber.
 *
 * Specifying Qtrue is experimental and may be changed in the future.
 *
 * If the given storage is Qnil, this function will lazy initialize the
 * internal storage which starts of empty (without any inheritance).
 *
 * Otherwise, the given storage is used as the internal storage.
 *
 * @param[in]  func          A function, to become the fiber's body.
 * @param[in]  callback_obj  Passed as-is to `func`.
 * @param[in]  storage       The way to set up the storage for the fiber.
 * @return     An allocated  new instance  of rb_cFiber, which  is ready  to be
 *             "resume"d.
 */
VALUE rb_fiber_new_storage(rb_block_call_func_t func, VALUE callback_obj, VALUE storage);

/**
 * Queries  the fiber  which  is  calling this  function.   Any ruby  execution
 * context has its fiber, either explicitly or implicitly.
 *
 * @return  The current fiber.
 */
VALUE rb_fiber_current(void);

/**
 * Queries the  liveness of the  passed fiber.   "Alive" in this  context means
 * that  the fiber  can  still be  resumed.   Once  it reaches  is  its end  of
 * execution, this function returns ::RUBY_Qfalse.
 *
 * @param[in]  fiber        A target fiber.
 * @retval     RUBY_Qtrue   It is.
 * @retval     RUBY_Qfalse  It isn't.
 */
VALUE rb_fiber_alive_p(VALUE fiber);

/**
 * Queries if an object is a fiber.
 *
 * @param[in]  obj          Arbitrary ruby object.
 * @retval     RUBY_Qtrue   It is.
 * @retval     RUBY_Qfalse  It isn't.
 */
VALUE rb_obj_is_fiber(VALUE obj);

/**
 * Resumes the  execution of the passed  fiber, either from the  point at which
 * the last  rb_fiber_yield() was  called if  any, or at  the beginning  of the
 * fiber body if it is the first call to this function.
 *
 * Other arguments are passed into the fiber's body, either as return values of
 * rb_fiber_yield() in case it switches to  there, or as the block parameter of
 * the fiber body if it switches to the beginning of the fiber.
 *
 * The return  value of this  function is either  the value passed  to previous
 * rb_fiber_yield() call, or  the ultimate evaluated value of  the entire fiber
 * body if the execution reaches the end of it.
 *
 * When an exception happens inside of a fiber it propagates to this function.
 *
 * ```ruby
 * f = Fiber.new do |i|
 *   puts "<x> =>> #{i}"
 *   puts "<y> <-- #{i + 1}"
 *   j = Fiber.yield(i + 1)
 *   puts "<z> =>> #{j}"
 *   puts "<w> <-- #{j + 1}"
 *   next j + 1
 * end
 *
 * puts "[a] <-- 1"
 * p = f.resume(1)
 * puts "[b] =>> #{p}"
 * puts "[c] <-- #{p + 1}"
 * q = f.resume(p + 1)
 * puts "[d] =>> #{q}"
 * ```
 *
 * Above program executes in `[a] <x> <y> [b] [c] <z> <w> [d]`.
 *
 * @param[out]  fiber          The fiber to resume.
 * @param[in]   argc            Number of objects of `argv`.
 * @param[in]   argv            Passed (somehow) to `fiber`.
 * @exception   rb_eFiberError  `fib` is terminated etc.
 * @exception   rb_eException   Any exceptions happen in `fiber`.
 * @return      (See above)
 * @note        This function _does_ return.
 *
 * @internal
 *
 * @shyouhei  expected  this function  to  raise  ::rb_eFrozenError for  frozen
 * fibers but it doesn't in practice.  Intentional or ...?
 */
VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv);

/**
 * Identical to  rb_fiber_resume(), except  you can specify  how to  handle the
 * last element of the given array.
 *
 * @param[out]  fiber           The fiber to resume.
 * @param[in]   argc            Number of objects of `argv`.
 * @param[in]   argv            Passed (somehow) to `fiber`.
 * @param[in]   kw_splat        Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception   rb_eFiberError  `fiber` is terminated etc.
 * @exception   rb_eException   Any exceptions happen in `fiber`.
 * @return      Either what was yielded or the last value of the fiber body.
 */
VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);

/**
 * Yields the  control back to the  point where the current  fiber was resumed.
 * The passed  objects would  be the return  value of  rb_fiber_resume().  This
 * fiber then suspends its execution until next time it is resumed.
 *
 * This function can  also raise arbitrary exceptions injected  from outside of
 * the fiber using rb_fiber_raise().
 *
 * ```ruby
 * exc = Class.new Exception
 *
 * f = Fiber.new do
 *   Fiber.yield
 * rescue exc => e
 *   puts e.message
 * end
 *
 * f.resume
 * f.raise exc, "Hi!"
 * ```
 *
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Passed to rb_fiber_resume().
 * @exception  rb_eException  (See above)
 * @return     (See rb_fiber_resume() for details)
 */
VALUE rb_fiber_yield(int argc, const VALUE *argv);

/**
 * Identical to rb_fiber_yield(), except you can specify how to handle the last
 * element of the given array.
 *
 * @param[in]  argc            Number of objects of `argv`.
 * @param[in]  argv            Passed to rb_fiber_resume().
 * @param[in]  kw_splat        Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eException   What was raised using `Fiber#raise`.
 * @return     (See rb_fiber_resume() for details)
 */
VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat);

/**
 * Transfers control to  another fiber, resuming it from where  it last stopped
 * or starting  it if  it was not  resumed before.  The  calling fiber  will be
 * suspended much like in a call to rb_fiber_yield().
 *
 * The fiber  which receives  the transfer  call treats it  much like  a resume
 * call.  Arguments passed to transfer are treated like those passed to resume.
 *
 * The two style of control passing to and from fiber (one is rb_fiber_resume()
 * and  rb_fiber_yield(), another  is  rb_fiber_transfer() to  and from  fiber)
 * can't be freely mixed.
 *
 *   - If the  Fiber's lifecycle had  started with  transfer, it will  never be
 *     able to  yield or be  resumed control  passing, only finish  or transfer
 *     back.   (It  still can  resume  other  fibers  that  are allowed  to  be
 *     resumed.)
 *
 *   - If  the Fiber's  lifecycle  had started  with resume,  it  can yield  or
 *     transfer to  another Fiber, but  can receive  control back only  the way
 *     compatible with  the way it  was given away:  if it had  transferred, it
 *     only can  be transferred  back, and if  it had yielded,  it only  can be
 *     resumed back.  After that, it again can transfer or yield.
 *
 * If those rules are broken, rb_eFiberError is raised.
 *
 * For an  individual Fiber design,  yield/resume is  easier to use  (the Fiber
 * just gives away control,  it doesn't need to think about  who the control is
 * given to),  while transfer is more  flexible for complex cases,  allowing to
 * build arbitrary graphs of Fibers dependent on each other.
 *
 * @param[out]  fiber           Explicit control destination.
 * @param[in]   argc            Number of objects of `argv`.
 * @param[in]   argv            Passed to rb_fiber_resume().
 * @exception   rb_eFiberError  (See above)
 * @exception   rb_eException   What was raised using `Fiber#raise`.
 * @return      (See rb_fiber_resume() for details)
 */
VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv);

/**
 * Identical to rb_fiber_transfer(),  except you can specify how  to handle the
 * last element of the given array.
 *
 * @param[out]  fiber           Explicit control destination.
 * @param[in]   argc            Number of objects of `argv`.
 * @param[in]   argv            Passed to rb_fiber_resume().
 * @param[in]   kw_splat        Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception   rb_eFiberError  (See above)
 * @exception   rb_eException   What was raised using `Fiber#raise`.
 * @return      (See rb_fiber_resume() for details)
 */
VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);

/**
 * Identical to rb_fiber_resume()  but instead of resuming  normal execution of
 * the passed fiber, it  raises the given exception in it.   From inside of the
 * fiber this would be seen as if rb_fiber_yield() raised.
 *
 * This function  does return in case  the passed fiber gracefully  handled the
 * passed exception.  But  if it does not, the raised  exception propagates out
 * of the passed fiber; this function then does not return.
 *
 * Parameters are passed to rb_make_exception()  to create an exception object.
 * See its document for what are allowed here.
 *
 * It is  a failure to  call this function against  a fiber which  is resuming,
 * have never run yet, or has already finished running.
 *
 * @param[out]  fiber           Where exception is raised.
 * @param[in]   argc            Passed as-is to rb_make_exception().
 * @param[in]   argv            Passed as-is to rb_make_exception().
 * @exception   rb_eFiberError  `fiber` is terminated etc.
 * @return      (See rb_fiber_resume() for details)
 */
VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_CONT_H */
PK*J[(��  #include/ruby/internal/intern/ruby.hnu�[���#ifndef RBIMPL_INTERN_RUBY_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_RUBY_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Process-global APIs.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* ruby.c */
/** @alias{rb_get_argv} */
#define rb_argv rb_get_argv()

/**
 * The value of `$0` at process bootup.
 *
 * @note  This is just a snapshot of `$0`, not the backend storage of it.  `$0`
 *        could  become something  different because  it is  a writable  global
 *        variable.  Modifying  it for instance affects  `ps(1)` output.  Don't
 *        assume they are synced.
 */
RUBY_EXTERN VALUE rb_argv0;

/* io.c */

/**
 * Queries the arguments passed to the current process that you can access from
 * Ruby as `ARGV`.
 *
 * @return  An array of strings containing arguments passed to the process.
 */
VALUE rb_get_argv(void);

/* ruby.c */

RBIMPL_ATTR_NONNULL(())
/**
 * Loads the given  file.  This function opens the given  pathname for reading,
 * parses the contents as a Ruby  script, and returns an opaque "node" pointer.
 * You can then pass it to ruby_run_node() for evaluation.
 *
 * @param[in]  file  File name, or "-" to read from stdin.
 * @return     Opaque "node" pointer.
 */
void *rb_load_file(const char *file);

/**
 * Identical to rb_load_file(), except it takes the argument as a Ruby's string
 * instead of C's.
 *
 * @param[in]  file  File name, or "-" to read from stdin.
 * @return     Opaque "node" pointer.
 */
void *rb_load_file_str(VALUE file);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_RUBY_H */
PK*J[ƀ_KK#include/ruby/internal/intern/enum.hnu�[���#ifndef RBIMPL_INTERN_ENUM_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_ENUM_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_mEnumerable.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* enum.c */

/**
 * Basically identical to rb_ary_new_form_values(), except it returns something
 * different when `argc` < 2.
 *
 * @param[in]  argc       Number of objects of `argv`.
 * @param[in]  argv       Arbitrary objects.
 * @retval     RUBY_Qnil  `argc` is zero.
 * @retval     argv[0]    `argc` is one.
 * @retval     otherwise  Otherwise.
 *
 * @internal
 *
 * What  is this  business?   Well,  this function  is  about `yield`'s  taking
 * multiple values.  Consider following user-defined class:
 *
 * ```ruby
 * class Foo
 *   include Enumerable
 *
 *   def each
 *     yield :q, :w, :e, :r
 *   end
 * end
 *
 * Foo.new.each_with_object([]) do |i, j|
 *   j << i                      # ^^^ <- What to expect for `i`?
 * end
 * ```
 *
 * Here, `Foo#each_with_object` is in fact `Enumerable#each_with_object`, which
 * doesn't know what would be yielded.  Yet, it has to take a block of arity 2.
 * This function  is used here, to  "pack" arbitrary number of  yielded objects
 * into one.
 *
 * If people want to implement their own `Enumerable#each_with_object` this API
 * can be handy.  Though @shyouhei suspects it is relatively rare for 3rd party
 * extension libraries  to have  such things.  Also  `Enumerable#each_entry` is
 * basically this function exposed as a Ruby method.
 */
VALUE rb_enum_values_pack(int argc, const VALUE *argv);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_ENUM_H */
PK*J[|Y�M��$include/ruby/internal/intern/range.hnu�[���#ifndef RBIMPL_INTERN_RANGE_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_RANGE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cRange.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* range.c */

/**
 * Creates a new Range.
 *
 * @param[in]  beg           "Left" or "lowest" endpoint of the range.
 * @param[in]  end           "Right" or "highest" endpoint of the range.
 * @param[in]  excl          Whether the range is open-ended.
 * @exception  rb_eArgError  `beg` and `end` are not comparable.
 * @note       These days both  endpoints can be ::RUBY_Qnil,  which means that
 *             endpoint is unbound.
 */
VALUE rb_range_new(VALUE beg, VALUE end, int excl);

RBIMPL_ATTR_NONNULL(())
/**
 * Deconstructs  a numerical  range.  As  the  arguments are  `long` based,  it
 * expects everything are in the `long` domain.
 *
 * @param[in]   range           A range of numerical endpoints.
 * @param[out]  begp            Return value buffer.
 * @param[out]  lenp            Return value buffer.
 * @param[in]   len             Updated length.
 * @param[in]   err             In case `len` is out of range...
 *                                - `0`: returns ::RUBY_Qnil.
 *                                - `1`: raises  ::rb_eRangeError.
 *                                - `2`: `beg` and `len` expanded accordingly.
 * @exception   rb_eTypeError   `range` is not a numerical range.
 * @exception   rb_eRangeError  `range` cannot fit into `long`.
 * @retval      RUBY_Qfalse     `range` is not an ::rb_cRange.
 * @retval      RUBY_Qnil       `len` is out of `range` but `err` is zero.
 * @retval      RUBY_Qtrue      Otherwise.
 * @post        `beg` is the (possibly updated) left endpoint.
 * @post        `len` is the (possibly updated) length of the range.
 *
 * @internal
 *
 * The complex  error handling  switch reflects the  fact that  `Array#[]=` and
 * `String#[]=` behave differently when they take ranges.
 */
VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err);

RBIMPL_ATTR_NONNULL(())
/**
 * Deconstructs a range into its components.
 *
 * @param[in]   range        Range or range-ish object.
 * @param[out]  begp         Return value buffer.
 * @param[out]  endp         Return value buffer.
 * @param[out]  exclp        Return value buffer.
 * @retval      RUBY_Qfalse  `range` is not an instance of ::rb_cRange.
 * @retval      RUBY_Qtrue   Argument pointers are updated.
 * @post        `*begp` is the left endpoint of the range.
 * @post        `*endp` is the right endpoint of the range.
 * @post        `*exclp` is whether the range is open-ended or not.
 */
int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_RANGE_H */
PK*J[��)')'$include/ruby/internal/intern/error.hnu�[���#ifndef RBIMPL_INTERN_ERROR_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_ERROR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_eException.
 */
#include "ruby/internal/attr/format.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/fl_type.h"
#include "ruby/backward/2/assume.h"

/**
 * This macro is used in conjunction  with rb_check_arity().  If you pass it to
 * the function's last  (max) argument, that means the function  does not check
 * upper limit.
 */
#define UNLIMITED_ARGUMENTS     (-1)

#define rb_exc_new2             rb_exc_new_cstr  /**< @old{rb_exc_new_cstr} */
#define rb_exc_new3             rb_exc_new_str  /**< @old{rb_exc_new_str} */

/** @cond INTERNAL_MACRO */
#define rb_check_arity          rb_check_arity
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* error.c */

/**
 * Creates an instance of the passed exception class.
 *
 * @param[in]  etype           A subclass of ::rb_eException.
 * @param[in]  ptr             Buffer contains error message.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eTypeError  `etype` is not a class.
 * @exception  rb_eArgError   `len` is negative.
 * @return     An instance of `etype`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `ptr`.
 *
 * @internal
 *
 * This function works for non-exception classes  as well, as long as they take
 * one string argument.
 */
VALUE rb_exc_new(VALUE etype, const char *ptr, long len);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_exc_new(), except it assumes the passed pointer is a pointer
 * to a C string.
 *
 * @param[in]  etype           A subclass of ::rb_eException.
 * @param[in]  str             A C string (becomes an error message).
 * @exception  rb_eTypeError  `etype` is not a class.
 * @return     An instance of `etype`.
 */
VALUE rb_exc_new_cstr(VALUE etype, const char *str);

/**
 * Identical to rb_exc_new_cstr(),  except it takes a Ruby's  string instead of
 * C's.
 *
 * @param[in]  etype           A subclass of ::rb_eException.
 * @param[in]  str             An instance of ::rb_cString.
 * @exception  rb_eTypeError  `etype` is not a class.
 * @return     An instance of `etype`.
 */
VALUE rb_exc_new_str(VALUE etype, VALUE str);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
/**
 * Raises an instance of ::rb_eLoadError.
 *
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 * @exception  rb_eLoadError  Always raises this.
 * @note       It never returns.
 *
 * @internal
 *
 * Who needs this?  Except ruby itself?
 */
void rb_loaderror(const char *fmt, ...);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Identical  to rb_loaderror(),  except it  additionally takes  which file  is
 * unable to  load.  The path can  be obtained later using  `LoadError#path` of
 * the raising exception.
 *
 * @param[in]  path  What failed.
 * @param[in]  fmt   Format specifier string compatible with rb_sprintf().
 * @exception  rb_eLoadError  Always raises this.
 * @note       It never returns.
 */
void rb_loaderror_with_path(VALUE path, const char *fmt, ...);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Raises an instance of ::rb_eNameError.  The name can be obtained later using
 * `NameError#name` of the raising exception.
 *
 * @param[in]  name  What failed.
 * @param[in]  fmt   Format specifier string compatible with rb_sprintf().
 * @exception  rb_eNameError  Always raises this.
 * @note       It never returns.
 */
void rb_name_error(ID name, const char *fmt, ...);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Identical to rb_name_error(), except it takes a ::VALUE instead of ::ID.
 *
 * @param[in]  name  What failed.
 * @param[in]  fmt   Format specifier string compatible with rb_sprintf().
 * @exception  rb_eNameError  Always raises this.
 * @note       It never returns.
 */
void rb_name_error_str(VALUE name, const char *fmt, ...);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Raises an instance  of ::rb_eFrozenError.  The object can  be obtained later
 * using `FrozenError#receiver` of the raising exception.
 *
 * @param[in]  recv  What is frozen.
 * @param[in]  fmt   Format specifier string compatible with rb_sprintf().
 * @exception  rb_eFrozenError  Always raises this.
 * @note       It never returns.
 *
 * @internal
 *
 * Note however,  that it  is often  not possible to  inspect a  frozen object,
 * because the inspection itself could be forbidden by the frozen-ness.
 */
void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL(())
/**
 * Honestly  I  don't  understand  the  name, but  it  raises  an  instance  of
 * ::rb_eArgError.
 *
 * @param[in]  str           A message.
 * @param[in]  type          Another message.
 * @exception  rb_eArgError  Always raises this.
 * @note       It never returns.
 */
void rb_invalid_str(const char *str, const char *type);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL(())
/**
 * Identical  to rb_frozen_error_raise(),  except its  raising exception  has a
 * message like "can't modify frozen /what/".
 *
 * @param[in]  what             What was frozen.
 * @exception  rb_eFrozenError  Always raises this.
 * @note       It never returns.
 */
void rb_error_frozen(const char *what);

RBIMPL_ATTR_NORETURN()
/**
 * Identical  to  rb_error_frozen(),  except  it takes  arbitrary  Ruby  object
 * instead of C's string.
 *
 * @param[in]  what             What was frozen.
 * @exception  rb_eFrozenError  Always raises this.
 * @note       It never returns.
 */
void rb_error_frozen_object(VALUE what);

/**
 * Queries  if the  passed  object is  frozen.
 *
 * @param[in]  obj  Target object to test frozen-ness.
 * @exception  rb_eFrozenError  It is frozen.
 * @post       Upon successful return it is guaranteed _not_ frozen.
 */
void rb_check_frozen(VALUE obj);

/**
 * Ensures that the passed object  can be `initialize_copy` relationship.  When
 * you implement your own one you would better call this at the right beginning
 * of your implementation.
 *
 * @param[in]  obj              Destination object.
 * @param[in]  orig             Source object.
 * @exception  rb_eFrozenError  `obj` is frozen.
 * @post       Upon successful return obj is guaranteed safe to copy orig.
 */
void rb_check_copyable(VALUE obj, VALUE orig);

RBIMPL_ATTR_NORETURN()
/**
 * @private
 *
 * This  is an  implementation detail  of  rb_scan_args().  You  don't have  to
 * bother.
 *
 * @pre        `argc` is out of range of `min`..`max`, both inclusive.
 * @param[in]  argc          Arbitrary integer.
 * @param[in]  min           Minimum allowed `argc`.
 * @param[in]  max           Maximum allowed `argc`.
 * @exception  rb_eArgError  Always.
 */
void rb_error_arity(int argc, int min, int max);

void rb_str_modify(VALUE str);

RBIMPL_SYMBOL_EXPORT_END()

/**
 * @deprecated
 *
 * Does anyone use this?  Remain not deleted for compatibility.
 */
#define rb_check_frozen_internal rb_check_frozen

/** @alias{rb_check_frozen} */
static inline void
rb_check_frozen_inline(VALUE obj)
{
    if (RB_UNLIKELY(RB_OBJ_FROZEN(obj))) {
        rb_error_frozen_object(obj);
    }

    /* ref: internal CHILLED_STRING_P()
       This is an implementation detail subject to change. */
    if (RB_UNLIKELY(RB_TYPE_P(obj, T_STRING) && FL_TEST_RAW(obj, RUBY_FL_USER2 | RUBY_FL_USER3))) { // STR_CHILLED
        rb_str_modify(obj);
    }
}

/* rb_check_frozen() is available as a symbol, but have
 * the inline version take priority for native consumers. */
#define rb_check_frozen rb_check_frozen_inline

/**
 * Ensures that the  passed integer is in  the passed range.  When  you can use
 * rb_scan_args() that is preferred over this one (powerful, descriptive).  But
 * it can have its own application area.
 *
 * @param[in]  argc          Arbitrary integer.
 * @param[in]  min           Minimum allowed `argv`.
 * @param[in]  max           Maximum allowed `argv`, or `UNLIMITED_ARGUMENTS`.
 * @exception  rb_eArgError  `argc` out of range.
 * @return     The passed `argc`.
 * @post       Upon successful return `argc` is  in range of `min`..`max`, both
 *             inclusive.
 */
static inline int
rb_check_arity(int argc, int min, int max)
{
    if ((argc < min) || (max != UNLIMITED_ARGUMENTS && argc > max))
        rb_error_arity(argc, min, max);
    return argc;
}

#endif /* RBIMPL_INTERN_ERROR_H */
PK*J[���HH%include/ruby/internal/intern/thread.hnu�[���#ifndef RBIMPL_INTERN_THREAD_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_THREAD_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cThread.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/config.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

struct timeval;

/* thread.c */

/**
 * Tries to switch  to another thread.  This function blocks  until the current
 * thread re-acquires the GVL.
 *
 * @exception  rb_eInterrupt  Operation interrupted.
 */
void rb_thread_schedule(void);

/**
 * Blocks the  current thread until  the given file  descriptor is ready  to be
 * read.
 *
 * @param[in]  fd                    A file descriptor.
 * @exception  rb_eIOError           Closed stream.
 * @exception  rb_eSystemCallError   Situations like EBADF.
 */
int rb_thread_wait_fd(int fd);

/**
 * Identical to rb_thread_wait_fd(), except it  blocks the current thread until
 * the given file descriptor is ready to be written.
 *
 * @param[in]  fd                    A file descriptor.
 * @exception  rb_eIOError           Closed stream.
 * @exception  rb_eSystemCallError   Situations like EBADF.
 */
int rb_thread_fd_writable(int fd);

/**
 * Notifies a closing of a file  descriptor to other threads.  Multiple threads
 * can wait for the given file descriptor  at once.  If such file descriptor is
 * closed, threads need to start propagating their exceptions.  This is the API
 * to kick that process.
 *
 * @param[in]  fd  A file descriptor.
 * @note       This function blocks  until all the threads waiting  for such fd
 *             have woken up.
 */
void rb_thread_fd_close(int fd);

/**
 * Checks if  the thread this  function is running is  the only thread  that is
 * currently alive.
 *
 * @retval  1  Yes it is.
 * @retval  0  No it isn't.
 *
 * @internal
 *
 * Above description is in fact inaccurate.  There are Ractors these days.
 */
int rb_thread_alone(void);

/**
 * Blocks for the given period of time.
 *
 * @warning    This function can be interrupted by signals.
 * @param[in]  sec            Duration in seconds.
 * @exception  rb_eInterrupt  Interrupted.
 */
void rb_thread_sleep(int sec);

/**
 * Blocks indefinitely.
 *
 * @exception  rb_eInterrupt  Interrupted.
 */
void rb_thread_sleep_forever(void);

/**
 * Identical  to  rb_thread_sleep_forever(),  except the  thread  calling  this
 * function is considered "dead" when our deadlock checker is triggered.
 *
 * @exception  rb_eInterrupt  Interrupted.
 */
void rb_thread_sleep_deadly(void);

/**
 * Stops the current thread.  This is not the end of the thread's lifecycle.  A
 * stopped thread can later be woken up.
 *
 * @exception  rb_eThreadError  Stopping this thread would deadlock.
 * @retval     ::RUBY_Qnil      Always.
 *
 * @internal
 *
 * The return value makes no sense at all.
 */
VALUE rb_thread_stop(void);

/**
 * Marks a given thread as eligible for scheduling.
 *
 * @note  It may still remain blocked on I/O.
 * @note  This does not invoke the scheduler itself.
 *
 * @param[out]  thread           Thread in question to wake up.
 * @exception   rb_eThreadError  Stop flogging a dead horse.
 * @return      The passed thread.
 * @post        The passed thread is made runnable.
 */
VALUE rb_thread_wakeup(VALUE thread);

/**
 * Identical  to rb_thread_wakeup(),  except  it doesn't  raise  on an  already
 * killed thread.
 *
 * @param[out]  thread     A thread to wake up.
 * @retval      RUBY_Qnil  `thread` is already killed.
 * @retval      otherwise  `thread` is alive.
 * @post        The passed thread is made runnable, unless killed.
 */
VALUE rb_thread_wakeup_alive(VALUE thread);

/**
 * This is a rb_thread_wakeup() + rb_thread_schedule() combo.
 *
 * @note        There is no  guarantee that this function yields  to the passed
 *              thread.  It may still remain blocked on I/O.
 * @param[out]  thread           Thread in question to wake up.
 * @exception   rb_eThreadError  Stop flogging a dead horse.
 * @return      The passed thread.
 */
VALUE rb_thread_run(VALUE thread);

/**
 * Terminates the given thread.  Unlike a stopped thread, a killed thread could
 * never be revived.   This function does return, when passed  e.g.  an already
 * killed thread.   But if  the passed  thread is  the only  one, or  a special
 * thread called "main", then it also terminates the entire process.
 *
 * @param[out]  thread          The thread to terminate.
 * @exception   rb_eFatal       The passed thread is the running thread.
 * @exception   rb_eSystemExit  The passed thread is the last thread.
 * @return      The passed thread.
 * @post        Either the passed thread, or the process entirely, is killed.
 *
 * @internal
 *
 * It seems killing the main thread also kills the entire process even if there
 * are multiple running ractors.  No idea why.
 */
VALUE rb_thread_kill(VALUE thread);

RBIMPL_ATTR_NONNULL((1))
/**
 * Creates a Ruby thread that is backended by a C function.
 *
 * @param[in]      f                    The function to run on a thread.
 * @param[in,out]  g                    Passed through to `f`.
 * @exception      rb_eThreadError      Could not create a ruby thread.
 * @exception      rb_eSystemCallError  Situations like `EPERM`.
 * @return         Allocated instance of ::rb_cThread.
 * @note           This doesn't wait for anything.
 */
VALUE rb_thread_create(VALUE (*f)(void *g), void *g);

/**
 * Identical to rb_thread_sleep(), except it takes struct `timeval` instead.
 *
 * @warning    This function can be interrupted by signals.
 * @param[in]  time           Duration.
 * @exception  rb_eInterrupt  Interrupted.
 */
void rb_thread_wait_for(struct timeval time);

/**
 * Obtains the "current" thread.
 *
 * @return  The current thread  of the current ractor of  the current execution
 *          context.
 * @pre     This function must be called from a thread controlled by ruby.
 */
VALUE rb_thread_current(void);

/**
 * Obtains the "main" thread.  There are threads called main.  Historically the
 * (only) main thread was the one which  runs when the process boots.  Now that
 * we have Ractor, there are more than one main threads.
 *
 * @return  The  main thread  of the  current ractor  of the  current execution
 *          context.
 * @pre     This function must be called from a thread controlled by ruby.
 */
VALUE rb_thread_main(void);

/**
 * This  badly named  function reads  from a  Fiber local  storage.  When  this
 * function was  born there  was no  such thing  like a  Fiber.  The  world was
 * innocent.  But now...  This is a Fiber local storage.  Sorry.
 *
 * @param[in]  thread     Thread that the target Fiber is running.
 * @param[in]  key        The name of the Fiber local storage to read.
 * @retval     RUBY_Qnil  No such storage.
 * @retval     otherwise  The value stored at `key`.
 * @note       There in fact are "true"  thread local storage, but Ruby doesn't
 *             provide any interface of them to you, C programmers.
 */
VALUE rb_thread_local_aref(VALUE thread, ID key);

/**
 * This  badly named  function  writes to  a Fiber  local  storage.  When  this
 * function was  born there  was no  such thing  like a  Fiber.  The  world was
 * innocent.  But now...  This is a Fiber local storage.  Sorry.
 *
 * @param[in]  thread           Thread that the target Fiber is running.
 * @param[in]  key              The name of the Fiber local storage to write.
 * @param[in]  val              The new value of the storage.
 * @exception  rb_eFrozenError  `thread` is frozen.
 * @return     The passed `val` as-is.
 * @post       Fiber local storage `key` has value of `val`.
 * @note       There in fact are "true"  thread local storage, but Ruby doesn't
 *             provide any interface of them to you, C programmers.
 */
VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val);

/**
 * A `pthread_atfork(3posix)`-like  API.  Ruby  expects its child  processes to
 * call this function at the very beginning of their processes.  If you plan to
 * fork a process don't forget to call it.
 */
void rb_thread_atfork(void);

/**
 * :FIXME: situation  of this function  is unclear.   It seems nobody  uses it.
 * Maybe a good idea to KonMari.
 */
void rb_thread_atfork_before_exec(void);

/**
 * "Recursion" API entry  point.  This basically calls the  given function with
 * the given arguments, but additionally with  recursion flag.  The flag is set
 * to 1  if the  execution have  already experienced  the passed  `g` parameter
 * before.
 *
 * @param[in]      f  The function that possibly recurs.
 * @param[in,out]  g  Passed as-is to `f`.
 * @param[in,out]  h  Passed as-is to `f`.
 * @return         The return value of f.
 */
VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);

/**
 * Identical to rb_exec_recursive(), except it  checks for the recursion on the
 * ordered pair of `{ g, p }` instead of just `g`.
 *
 * @param[in]      f  The function that possibly recurs.
 * @param[in,out]  g  Passed as-is to `f`.
 * @param[in]      p  Paired object for recursion detection.
 * @param[in,out]  h  Passed as-is to `f`.
 */
VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);

/**
 * Identical  to  rb_exec_recursive(),  except   it  calls  `f`  for  outermost
 * recursion only.  Inner recursions yield calls to rb_throw_obj().
 *
 * @param[in]      f  The function that possibly recurs.
 * @param[in,out]  g  Passed as-is to `f`.
 * @param[in,out]  h  Passed as-is to `f`.
 * @return         The return value of f.
 *
 * @internal
 *
 * It seems  nobody uses the "it  calls rb_throw_obj()" part of  this function.
 * @shyouhei doesn't understand the needs.
 */
VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);

/**
 * Identical to  rb_exec_recursive_outer(), except it checks  for the recursion
 * on the ordered pair of `{ g, p }`  instead of just `g`.  It can also be seen
 * as a  routine identical to  rb_exec_recursive_paired(), except it  calls `f`
 * for   outermost   recursion  only.    Inner   recursions   yield  calls   to
 * rb_throw_obj().
 *
 * @param[in]      f  The function that possibly recurs.
 * @param[in,out]  g  Passed as-is to `f`.
 * @param[in]      p  Paired object for recursion detection.
 * @param[in,out]  h  Passed as-is to `f`.
 *
 * @internal
 *
 * It seems  nobody uses the "it  calls rb_throw_obj()" part of  this function.
 * @shyouhei doesn't understand the needs.
 */
VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);

/**
 * This is  the type of UBFs.   An UBF is  a function that unblocks  a blocking
 * region.  For instance when a thread is blocking due to `pselect(3posix)`, it
 * is highly expected that `pthread_kill(3posix)` can interrupt the system call
 * and  the  thread  could  revive.   Or  when a  thread  is  blocking  due  to
 * `waitpid(3posix)`, it  is highly  expected that  killing the  waited process
 * should suffice.  An UBF is a function that does such things.  Designing your
 * own UBF  needs deep understanding  of why  your blocking region  blocks, how
 * threads work in ruby, and a matter of luck.  It often is the case you simply
 * cannot cancel something that had already begun.
 *
 * @see rb_thread_call_without_gvl()
 */
typedef void rb_unblock_function_t(void *);

/**
 * @private
 *
 * This is an implementation detail.  Must be a mistake to be here.
 *
 * @internal
 *
 * Why is  this function type different  from what rb_thread_call_without_gvl()
 * takes?
 */
typedef VALUE rb_blocking_function_t(void *);

/**
 * Checks for  interrupts.  In ruby,  signals are  masked by default.   You can
 * call this function at  will to check if there are  pending signals.  In case
 * there are, they would be handled in this function.
 *
 * If your  extension library has a  function that takes a  long time, consider
 * calling it periodically.
 *
 * @note  It might switch to another thread.
 */
void rb_thread_check_ints(void);

/**
 * Checks if the  thread's execution was recently interrupted.   If called from
 * that thread, this function can be used to detect spurious wake-ups.
 *
 * @param[in]  thval      Thread in question.
 * @retval     0          The thread was not interrupted.
 * @retval     otherwise  The thread was interrupted recently.
 *
 * @internal
 *
 * Above description is not a lie.  But  actually the return value is an opaque
 * trap vector.  If you know which bit means which, you can know what happened.
 */
int rb_thread_interrupted(VALUE thval);

/**
 * A special  UBF for blocking IO  operations.  You need deep  understanding of
 * what this  actually do before using.   Basically you should not  use it from
 * extension libraries.  It is too easy to mess up.
 */
#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1)

/**
 * A special UBF for blocking  process operations.  You need deep understanding
 * of what this actually do before using.  Basically you should not use it from
 * extension libraries.  It is too easy to mess up.
 */
#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1)

/* thread_sync.c */

/**
 * Creates a mutex.
 *
 * @return An allocated instance of rb_cMutex.
 */
VALUE rb_mutex_new(void);

/**
 * Queries if there are any threads that holds the lock.
 *
 * @param[in]  mutex  The mutex in question.
 * @retval     RUBY_Qtrue  The mutex is locked by someone.
 * @retval     RUBY_Qfalse The mutex is not locked by anyone.
 */
VALUE rb_mutex_locked_p(VALUE mutex);

/**
 * Attempts to lock the mutex, without  waiting for other threads to unlock it.
 * Failure in locking the mutex can be detected by the return value.
 *
 * @param[out]  mutex        The mutex to lock.
 * @retval      RUBY_Qtrue   Successfully locked by the current thread.
 * @retval      RUBY_Qfalse  Otherwise.
 * @note        This  function also  returns  ::RUBY_Qfalse when  the mutex  is
 *              already owned by the calling thread itself.
 */
VALUE rb_mutex_trylock(VALUE mutex);

/**
 * Attempts to lock the mutex.  It waits until the mutex gets available.
 *
 * @param[out]  mutex            The mutex to lock.
 * @exception   rb_eThreadError  Recursive deadlock situation.
 * @return      The passed mutex.
 * @post        The mutex is owned by the current thread.
 */
VALUE rb_mutex_lock(VALUE mutex);

/**
 * Releases the mutex.
 *
 * @param[out]  mutex            The mutex to unlock.
 * @exception   rb_eThreadError  The mutex is not owned by the current thread.
 * @return      The passed mutex.
 * @post        Upon successful return  the passed mutex is no  longer owned by
 *              the current thread.
 */
VALUE rb_mutex_unlock(VALUE mutex);

/**
 * Releases  the lock  held in  the mutex  and waits  for the  period of  time;
 * reacquires the lock on wakeup.
 *
 * @pre         The lock has to be owned by the current thread beforehand.
 * @param[out]  self             The target mutex.
 * @param[in]   timeout          Duration, in seconds, in ::rb_cNumeric.
 * @exception   rb_eArgError     `timeout` is negative.
 * @exception   rb_eRangeError   `timeout` is out of range of `time_t`.
 * @exception   rb_eThreadError  The mutex is not owned by the current thread.
 * @return      Number of seconds it actually slept.
 * @warning     It is a  failure not to check the return  value.  This function
 *              can return spuriously for various reasons.  Maybe other threads
 *              can  rb_thread_wakeup().   Maybe  an  end user  can  press  the
 *              Control and C  key from the interactive console.   On the other
 *              hand it  can also  take longer than  the specified.   The mutex
 *              could be locked by someone else.  It waits then.
 * @post        Upon successful return the passed mutex is owned by the current
 *              thread.
 *
 * @internal
 *
 * This  function is  called from  `ConditionVariable#wait`.   So it  is not  a
 * deprecated feature.   However @shyouhei  have never  seen any  similar mutex
 * primitive available in any other languages than Ruby.
 *
 * EDIT: In 2021,  @shyouhei asked @ko1 in person about  this API.  He answered
 * that it is his invention.  The  motivation behind its design is to eliminate
 * needs of condition variables as  primitives.  Unlike other languages, Ruby's
 * `ConditionVariable` class was written in pure-Ruby initially.  We don't have
 * to implement  machine-native condition  variables in  assembly each  time we
 * port Ruby to a new architecture.  This function made it possible.  "I felt I
 * was a genius when this idea came to me", said @ko1.
 *
 * `rb_cConditionVariable` is now written in C for speed, though.
 */
VALUE rb_mutex_sleep(VALUE self, VALUE timeout);

/**
 * Obtains the  lock, runs the passed  function, and releases the  lock when it
 * completes.
 *
 * @param[out]     mutex  The mutex to lock.
 * @param[in]      func   What to do during the mutex is locked.
 * @param[in,out]  arg    Passed as-is to `func`.
 */
VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_THREAD_H */
PK*J[��x.x.#include/ruby/internal/intern/hash.hnu�[���#ifndef RBIMPL_INTERN_HASH_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_HASH_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cHash.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/st.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* hash.c */

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_st_foreach(), except it  raises exceptions when the callback
 * function tampers the table during iterating over it.
 *
 * @param[in]  st                Table to iterate over.
 * @param[in]  func              Callback function to apply.
 * @param[in]  arg               Passed as-is to `func`.
 * @exception  rb_eRuntimeError  `st` was tampered during iterating.
 *
 * @internal
 *
 * This is declared here because exceptions are Ruby level concept.
 *
 * This is in fact a very thin wrapper of rb_st_foreach_check().
 */
void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg);

/** @alias{rb_st_foreach_safe} */
#define st_foreach_safe rb_st_foreach_safe

/**
 * Try  converting an  object to  its hash  representation using  its `to_hash`
 * method, if any.  If there is no such thing, returns ::RUBY_Qnil.
 *
 * @param[in]  obj            Arbitrary ruby object to convert.
 * @exception  rb_eTypeError  `obj.to_hash` returned something non-Hash.
 * @retval     RUBY_Qnil      No conversion from `obj` to hash defined.
 * @retval     otherwise      Converted hash representation of `obj`.
 * @see        rb_io_check_io
 * @see        rb_check_array_type
 * @see        rb_check_string_type
 *
 * @internal
 *
 * There   is  no   rb_hash_to_hash()   that   analogous  to   rb_str_to_str().
 * Intentional or ...?
 */
VALUE rb_check_hash_type(VALUE obj);

RBIMPL_ATTR_NONNULL(())
/**
 * Iterates   over  a   hash.   This   basically   does  the   same  thing   as
 * rb_st_foreach().  But because the passed hash is a Ruby object, its keys and
 * values are both Ruby objects.
 *
 * @param[in]  hash              An instance of ::rb_cHash to iterate over.
 * @param[in]  func              Callback function to yield.
 * @param[in]  arg               Passed as-is to `func`.
 * @exception  rb_eRuntimeError  `hash` was tampered during iterating.
 */
void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg);

/**
 * Calculates a message  authentication code of the passed  object.  The return
 * value is  a very small  integer used as  an index of a  key of a  table.  In
 * order  to calculate  the value  this function  calls `#hash`  method of  the
 * passed  object.  Ruby  provides you  a default  implementation.  But  if you
 * implement  your class  in C,  that  default implementation  cannot know  the
 * underlying data structure.  You must implement your own `#hash` method then,
 * which  must return  an integer  of  uniform distribution  in a  sufficiently
 * instant manner.
 *
 * @param[in]  obj            Arbitrary Ruby object.
 * @exception  rb_eTypeError  `obj.hash` returned something non-Integer.
 * @return     A small integer.
 * @note       `#hash` can return very big integers, but they get truncated.
 */
VALUE rb_hash(VALUE obj);

/**
 * Creates a new, empty hash object.
 *
 * @return  An allocated new instance of ::rb_cHash.
 */
VALUE rb_hash_new(void);

/**
 * Identical to rb_hash_new(), except it additionally specifies how many keys
 * it is expected to contain. This way you can create a hash that is large enough
 * for your need. For large hashes it means it won't need to be reallocated and
 * rehashed as much, improving performance.
 *
 * @param[in]  capa  Designed capacity of the hash.
 * @return     An empty Hash, whose capacity is `capa`.
 */
VALUE rb_hash_new_capa(long capa);

/**
 * Duplicates a hash.
 *
 * @param[in]  hash  An instance of ::rb_cHash.
 * @return     An  allocated new  instance  of ::rb_cHash,  whose contents  are
 *             a verbatim copy of from `hash`.
 */
VALUE rb_hash_dup(VALUE hash);

/** @alias{rb_obj_freeze} */
VALUE rb_hash_freeze(VALUE obj);

/**
 * Queries the given key  in the given hash table.  If there is  the key in the
 * hash, returns the  value associated with the key.  Otherwise  it returns the
 * "default" value (defined per hash table).
 *
 * @param[in]  hash  Hash table to look into.
 * @param[in]  key   Hash key to look for.
 * @return     Either the value associated with the  key, or the default one if
 *             absent.
 */
VALUE rb_hash_aref(VALUE hash, VALUE key);

/**
 * Identical  to  rb_hash_aref(),  except  it always  returns  ::RUBY_Qnil  for
 * misshits.
 *
 * @param[in]  hash  Hash table to look into.
 * @param[in]  key   Hash key to look for.
 * @return     Either  the value  associated with  the key,  or ::RUBY_Qnil  if
 *             absent.
 * @note       A hash can  store ::RUBY_Qnil as an ordinary  value.  You cannot
 *             distinguish whether the  key is missing, or  just its associated
 *             value happens to be ::RUBY_Qnil, as far as you use this API.
 */
VALUE rb_hash_lookup(VALUE hash, VALUE key);

/**
 * Identical  to rb_hash_lookup(),  except you  can specify  what to  return on
 * misshits.  This is much like 2-arguments version of `Hash#fetch`.
 *
 * ```CXX
 * VALUE hash;
 * VALUE key;
 * VALUE tmp = rb_obj_alloc(rb_cObject);
 * VALUE val = rb_hash_lookup2(hash, key, tmp);
 * if (val == tmp) {
 *     printf("misshit");
 * }
 * else {
 *     printf("hit");
 * }
 * ```
 *
 * @param[in]  hash       Hash table to look into.
 * @param[in]  key        Hash key to look for.
 * @param[in]  def        Default value.
 * @retval     def        `hash` does not have `key`.
 * @retval     otherwise  The value associated with `key`.
 */
VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def);

/**
 * Identical  to rb_hash_lookup(),  except  it yields  the (implicitly)  passed
 * block instead of returning ::RUBY_Qnil.
 *
 * @param[in]  hash          Hash table to look into.
 * @param[in]  key           Hash key to look for.
 * @exception  rb_eKeyError  No block given.
 * @return     Either  the value  associated with  the key,  or what  the block
 *             evaluates to if absent.
 */
VALUE rb_hash_fetch(VALUE hash, VALUE key);

/**
 * Inserts or replaces ("upsert"s) the objects into the given hash table.  This
 * basically associates the  given value with the given key.   On duplicate key
 * this function updates its associated value with the given one.  Otherwise it
 * inserts the association at the end of the table.
 *
 * @param[out]  hash             Target hash table to modify.
 * @param[in]   key              Arbitrary Ruby object.
 * @param[in]   val              A value to be associated with `key`.
 * @exception   rb_eFrozenError  `hash` is frozen.
 * @return      The passed `val`
 * @post        `val` is associated with `key` in `hash`.
 */
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val);

/**
 * Swipes everything out of the passed hash table.
 *
 * @param[out]  hash             Target to clear.
 * @exception   rb_eFrozenError  `hash`is frozen.
 * @return      The passed `hash`
 * @post        `hash` has no contents.
 */
VALUE rb_hash_clear(VALUE hash);

/**
 * Deletes each entry for which the block  returns a truthy value.  If there is
 * no block given, it returns an enumerator that does the thing.
 *
 * @param[out]  hash             Target hash to modify.
 * @exception   rb_eFrozenError  `hash` is frozen.
 * @retval      hash             The hash is modified.
 * @retval      otherwise        An instance of ::rb_cEnumerator that does it.
 */
VALUE rb_hash_delete_if(VALUE hash);

/**
 * Deletes the passed key from the passed hash table, if any.
 *
 * @param[out]  hash       Target hash to modify.
 * @param[in]   key        Key to delete.
 * @retval      RUBY_Qnil  `hash` has no such key as `key`.
 * @retval      otherwise  What was associated with `key`.
 * @post        `hash` has no such key as `key`.
 */
VALUE rb_hash_delete(VALUE hash, VALUE key);

/**
 * Inserts  a list  of  key-value pairs  into  a  hash table  at  once.  It  is
 * semantically  identical to  repeatedly  calling rb_hash_aset(),  but can  be
 * faster than that.
 *
 * @param[in]   argc  Length of `argv`, must be even.
 * @param[in]   argv  A list of key, value, key, value, ...
 * @param[out]  hash  Target hash table to modify.
 * @post        `hash` has contents from `argv`.
 * @note        `argv` is allowed to be NULL as long as `argc` is zero.
 *
 * @internal
 *
 * What happens for  duplicated keys?  Well it silently discards  older ones to
 * accept the newest (rightmost) one.  This behaviour also mimics repeated call
 * of rb_hash_aset().
 */
void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash);

/**
 * Type of callback functions to pass to rb_hash_update_by().
 *
 * @param[in]  newkey  A key of the table.
 * @param[in]  oldkey  Value associated with `key` in hash1.
 * @param[in]  value   Value associated with `key` in hash2.
 * @return     Either one of the passed values to take.
 */
typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value);

/**
 * Destructively merges two hash tables into one.  It resolves key conflicts by
 * calling the passed function and take its return value.
 *
 * @param[out]  hash1             Target hash to be modified.
 * @param[in]   hash2             A hash to merge into `hash1`.
 * @param[in]   func              Conflict reconciler.
 * @exception   rb_eFrozenError   `hash1` is frozen.
 * @exception   rb_eRuntimeError  `hash2` is updated instead.
 * @return      The passed `hash1`.
 * @post        Contents of `hash2` is merged into `hash1`.
 * @note        You can  pass zero to  `func`.  This means values  from `hash2`
 *              are always taken.
 */
VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func);

/* file.c */

/**
 * This function is mysterious.  What it does is not immediately obvious.  Also
 * what it does seems platform dependent.
 *
 * @param[in]  path       A local path.
 * @retval     0          The "check" succeeded.
 * @retval     otherwise  The "check" failed.
 */
int rb_path_check(const char *path);

/* hash.c */

/**
 * Destructively removes every environment variables of the running process.
 *
 * @return  The `ENV` object.
 * @post    The process has no environment variables.
 */
VALUE rb_env_clear(void);

/**
 * Identical to  #RHASH_SIZE(), except  it returns the  size in  Ruby's integer
 * instead of C's.
 *
 * @param[in]  hash  A hash object.
 * @return     The size of the hash.
 */
VALUE rb_hash_size(VALUE hash);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_HASH_H */
PK*J[�:61-1-&include/ruby/internal/intern/process.hnu�[���#ifndef RBIMPL_INTERN_PROCESS_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_PROCESS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_mProcess.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/config.h"      /* rb_pid_t is defined here. */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* process.c */

/**
 * Wait for the specified process to terminate, reap it, and return its status.
 *
 * @param[in] pid The process ID to wait for.
 * @param[in] flags The flags to pass to waitpid(2).
 * @return VALUE An instance of Process::Status.
 */
VALUE rb_process_status_wait(rb_pid_t pid, int flags);

/**
 * Sets the "last status", or the `$?`.
 *
 * @param[in]  status  The termination status, as defined in `waitpid(3posix)`.
 * @param[in]  pid     The last child of the current process.
 * @post       `$?` is updated.
 */
void rb_last_status_set(int status, rb_pid_t pid);

/**
 * Queries the "last status", or the `$?`.
 *
 * @retval  RUBY_Qnil  The current thread has no dead children.
 * @retval  otherwise  An instance of Process::Status  describing the status of
 *                     the child that was most recently `wait`-ed.
 */
VALUE rb_last_status_get(void);

RBIMPL_ATTR_NONNULL(())
/**
 * Executes a shell command.
 *
 * @warning    THIS FUNCTION RETURNS on error!
 * @param[in]  cmd  Passed to the shell.
 * @retval     -1   Something prevented the command execution.
 * @post       Upon successful execution this function doesn't return.
 * @post       In case it returns the `errno` is set properly.
 */
int rb_proc_exec(const char *cmd);

RBIMPL_ATTR_NORETURN()
/**
 * Replaces the current process by running the given external command.  This is
 * the implementation of `Kernel#exec`.
 *
 * @param[in]  argc                 Number of objects in `argv`.
 * @param[in]  argv                 Command and its options to execute.
 * @exception  rb_eTypeError        Invalid options e.g. non-String argv.
 * @exception  rb_eArgError         Invalid options e.g. redirection cycle.
 * @exception  rb_eNotImpError      Not implemented e.g. no `setuid(2)`.
 * @exception  rb_eRuntimeError     `Process::UID.switch` in operation.
 * @exception  rb_eSystemCallError  `execve(2)` failed.
 * @warning    This function doesn't return.
 * @warning    On failure it raises.  On success the process is replaced.
 *
 * @internal
 *
 * @shyouhei have to say that the  rdoc for `Kernel#exec` is fairly incomplete.
 * AFAIK this function ultimately takes the following signature:
 *
 * ```rbs
 * type boolx  = bool | nil                # !=  `boolish`
 *
 * type rlim_t = Integer                   # rlim_cur
 *             | [ Integer, Integer ]      # rlim_cur, rlim_max
 *
 * type uid_t  = String                    # e.g. "root"
 *             | Integer                   # e.g. 0
 *
 * type gid_t  = String                    # e.g. "wheel"
 *             | Integer                   # e.g. 0
 *
 * type fmode  = String                    # e.g. "rb"
 *             | Integer                   # e.g. O_RDONLY | O_BINARY
 *
 * type mode_t = Integer                   # e.g. 0644
 *
 * type pgrp   = true                      # Creates a dedicated pgroup
 *             | 0                         # ditto
 *             | nil                       # Uses the current one
 *             | Integer                   # Uses this specific pgroup
 *
 * type fd     = :in                       # STDIN
 *             | :out                      # STDOUT
 *             | :err                      # STDERR
 *             | IO                        # This specific IO
 *             | Integer                   # A file descriptor of this #
 *
 * type src    = fd | [ fd ]
 * type dst    = :close                    # Intuitive
 *             | fd                        # Intuitive
 *             | String                    # Open a file at this path
 *             | [ String ]                # ... using O_RDONLY
 *             | [ String, fmode ]         # ... using this mode
 *             | [ String, fmode, mode_t ] # ... with a permission
 *             | [ :child, fd ]            # fd of child side
 *
 * type redir  = Hash[ src, dst ]
 *
 * # ----
 *
 * # Key-value pair of environment variables
 * type envp  = Hash[ String, String ]
 *
 * # Actual name (and the name passed to the subprocess if any)
 * type arg0  = String | [ String, String ]
 *
 * # Arbitrary string parameters
 * type argv  = String
 *
 * # Exec options:
 * type argh  = redir | {
 *   chdir:             String, # Working directory
 *   close_others:      boolx,  # O_CLOEXEC like behaviour
 *   gid:               gid_t,  # setegid(2)
 *   pgrooup:           pgrp,   # setpgrp(2)
 *   rlimit_as:         rlim_t, # setrlimit(2)
 *   rlimit_core:       rlim_t, # ditto
 *   rlimit_cpu:        rlim_t, # ditto
 *   rlimit_data:       rlim_t, # ditto
 *   rlimit_fsize:      rlim_t, # ditto
 *   rlimit_memlock:    rlim_t, # ditto
 *   rlimit_msgqueue:   rlim_t, # ditto
 *   rlimit_nice:       rlim_t, # ditto
 *   rlimit_nofile:     rlim_t, # ditto
 *   rlimit_nproc:      rlim_t, # ditto
 *   rlimit_rss:        rlim_t, # ditto
 *   rlimit_rtprio:     rlim_t, # ditto
 *   rlimit_rttime:     rlim_t, # ditto
 *   rlimit_sbsize:     rlim_t, # ditto
 *   rlimit_sigpending: rlim_t, # ditto
 *   rlimit_stack:      rlim_t, # ditto
 *   uid:               uid_t,  # seteuid(2)
 *   umask:             mode_t, # umask(2)
 *   unsetenv_others:   boolx   # Unset everything except the passed envp
 * }
 *
 * # ====
 *
 * class Kernel
 *   def self?.exec
 *     : (          arg0 cmd, *argv args           ) -> void
 *     | (          arg0 cmd, *argv args, argh opts) -> void
 *     | (envp env, arg0 cmd, *argv args           ) -> void
 *     | (envp env, arg0 cmd, *argv args, argh opts) -> void
 * end
 * ```
 */
VALUE rb_f_exec(int argc, const VALUE *argv);

/**
 * Waits for a process, with releasing GVL.
 *
 * @param[in]   pid        Process ID.
 * @param[out]  status     The wait status is filled back.
 * @param[in]   flags      Wait options.
 * @retval      -1         System call failed, errno set.
 * @retval      0          WNOHANG but no waitable children.
 * @retval      otherwise  A process ID that was `wait()`-ed.
 * @post        Upon successful return `status` is updated to have the process'
 *              status.
 * @note        `status` can be NULL.
 * @note        The arguments are passed  through to underlying system call(s).
 *              Can have special meanings.  For instance passing `(rb_pid_t)-1`
 *              to   `pid`   means   it   waits  for   any   processes,   under
 *              POSIX-compliant situations.
 */
rb_pid_t rb_waitpid(rb_pid_t pid, int *status, int flags);

/**
 * This is  a shorthand of  rb_waitpid without status  and flags.  It  has been
 * like this  since the very beginning.   The initial revision already  did the
 * same thing.  Not sure why, then, it has been named `syswait`.  AFAIK this is
 * different from how `wait(3posix)` works.
 *
 * @param[in]  pid  Passed to rb_waitpid().
 */
void rb_syswait(rb_pid_t pid);

/**
 * Identical  to rb_f_exec(),  except  it  spawns a  child  process instead  of
 * replacing the current one.
 *
 * @param[in]  argc              Number of objects in `argv`.
 * @param[in]  argv              Command and its options to execute.
 * @exception  rb_eTypeError     Invalid options e.g. non-String argv.
 * @exception  rb_eArgError      Invalid options e.g. redirection cycle.
 * @exception  rb_eNotImpError   Not implemented e.g. no `setuid(2)`.
 * @exception  rb_eRuntimeError  `Process::UID.switch` in operation.
 * @retval     -1                Child process died for some reason.
 * @retval     otherwise         The ID of the born child.
 *
 * @internal
 *
 * This  is _really_  identical  to rb_f_exec()  until  ultimately calling  the
 * system  call.    Almost  everything   are  shared   among  these   two  (and
 * rb_f_system()).
 */
rb_pid_t rb_spawn(int argc, const VALUE *argv);

/**
 * Identical  to rb_spawn(),  except  you can  additionally  know the  detailed
 * situation in case of abnormal parturitions.
 *
 * @param[in]   argc              Number of objects in `argv`.
 * @param[in]   argv              Command and its options to execute.
 * @param[out]  errbuf            Error description write-back buffer.
 * @param[in]   buflen            Number of bytes of `errbuf`, including NUL.
 * @exception   rb_eTypeError     Invalid options e.g. non-String argv.
 * @exception   rb_eArgError      Invalid options e.g. redirection cycle.
 * @exception   rb_eNotImpError   Not implemented e.g. no `setuid(2)`.
 * @exception   rb_eRuntimeError  `Process::UID.switch` in operation.
 * @retval      -1                Child process died for some reason.
 * @retval      otherwise         The ID of the born child.
 * @post        In case  of `-1`, at most  `buflen` bytes of the  reason why is
 *              written back to `errbuf`.
 */
rb_pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen);

/**
 * Gathers info about resources consumed by the current process.
 *
 * @param[in]  _  Not used.  Pass anything.
 * @return     An instance of `Process::Tms`.
 *
 * @internal
 *
 * This function  might or might  not exist depending on  `./configure` result.
 * It must be a portability hell.  Better not use.
 */
VALUE rb_proc_times(VALUE _);

/**
 * "Detaches"  a subprocess.   In POSIX  systems every  child processes  that a
 * process creates must be `wait(2)`-ed.  A child process that died yet has not
 * been  waited so  far  is called  a  "zombie", which  more  or less  consumes
 * resources.   This function  automates reclamation  of such  processes.  Once
 * after this function successfully returns  you can basically forget about the
 * child process.
 *
 * @param[in]  pid  Process to wait.
 * @return     An instance of ::rb_cThread which is `waitpid(2)`-ing `pid`.
 * @post       You can just forget about the return value.  GC reclaims it.
 * @post       You  can  know the  exit  status  by  querying `#value`  of  the
 *             return value (which is a blocking operation).
 */
VALUE rb_detach_process(rb_pid_t pid);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_PROCESS_H */
PK*J[�
Z���"include/ruby/internal/intern/dir.hnu�[���#ifndef RBIMPL_INTERN_DIR_H                          /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_DIR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cDir.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* dir.c */

/**
 * Queries the path of the current working directory of the current process.
 *
 * @return  An instance of ::rb_cString that holds the working directory.
 * @note    The returned string  is in "filesystem" encoding.   Most notably on
 *          Linux this is an alias  of default external encoding.  Most notably
 *          on Windows it can be an alias of OS codepage.
 */
VALUE rb_dir_getwd(void);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_DIR_H */
PK*J[�n�{VV#include/ruby/internal/intern/time.hnu�[���#ifndef RBIMPL_INTERN_TIME_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_TIME_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cTime.
 */
#include "ruby/internal/config.h"

#ifdef HAVE_TIME_H
# include <time.h>              /* for time_t */
#endif

#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

struct timespec;
struct timeval;

/* time.c */

RBIMPL_ATTR_NONNULL(())
/**
 * Fills the current time into the given struct.
 *
 * @param[out]  ts                   Return buffer.
 * @exception   rb_eSystemCallError  Access denied for hardware clock.
 * @post        Current time is stored in `*ts`.
 */
void rb_timespec_now(struct timespec *ts);

/**
 * Creates  an  instance of  ::rb_cTime  with  the  given  time and  the  local
 * timezone.
 *
 * @param[in]  sec             Seconds since the UNIX epoch.
 * @param[in]  usec            Subsecond part, in microseconds resolution.
 * @exception  rb_eRangeError  Cannot express the time.
 * @return     An allocated instance of ::rb_cTime.
 */
VALUE rb_time_new(time_t sec, long usec);

/**
 * Identical  to  rb_time_new(), except  it  accepts  the time  in  nanoseconds
 * resolution.
 *
 * @param[in]  sec             Seconds since the UNIX epoch.
 * @param[in]  nsec            Subsecond part, in nanoseconds resolution.
 * @exception  rb_eRangeError  Cannot express the time.
 * @return     An allocated instance of ::rb_cTime.
 */
VALUE rb_time_nano_new(time_t sec, long nsec);

RBIMPL_ATTR_NONNULL(())
/**
 * Creates an instance of ::rb_cTime, with given time and offset.
 *
 * @param[in]  ts            Time specifier.
 * @param[in]  offset        Offset specifier, can take following values:
 *                           - `INT_MAX`: `ts` is in local time.
 *                           - `INT_MAX - 1`: `ts` is in UTC.
 *                           - `-86400` to `86400`: fixed timezone.
 * @exception  rb_eArgError  Malformed `offset`.
 * @return     An allocated instance of ::rb_cTime.
 */
VALUE rb_time_timespec_new(const struct timespec *ts, int offset);

/**
 * Identical to rb_time_timespec_new(), except it  takes Ruby values instead of
 * C structs.
 *
 * @param[in]  timev         Something numeric.  Currently Integers, Rationals,
 *                           and Floats are accepted.
 * @param[in]  off           Offset  specifier.  As  of  2.7  this argument  is
 *                           heavily  extended  to   take  following  kinds  of
 *                           objects:
 *                             - ::RUBY_Qundef ... means UTC.
 *                             - ::rb_cString ... "+12:34" etc.
 *                             - A mysterious  "zone" object.  This  is largely
 *                               undocumented.  However the  initial intent was
 *                               that       we       want       to       accept
 *                               `ActiveSupport::TimeZone`  here.   Other  gems
 *                               could also be possible...   But how to make an
 *                               acceptable class is beyond this document.
 * @exception  rb_eArgError  Malformed `off`.
 * @return     An allocated instance of ::rb_cTime.
 */
VALUE rb_time_num_new(VALUE timev, VALUE off);

/**
 * Creates  a  "time  interval".   This   basically  converts  an  instance  of
 * ::rb_cNumeric  into  a struct  `timeval`,  but  for instance  negative  time
 * interval must not exist.
 *
 * @param[in]  num             An instance of ::rb_cNumeric.
 * @exception  rb_eArgError    `num` is negative.
 * @exception  rb_eRangeError  `num` is out of range of `timeval::tv_sec`.
 * @return     A struct that represents the identical time to `num`.
 */
struct timeval rb_time_interval(VALUE num);

/**
 * Converts an  instance of rb_cTime  to a  struct timeval that  represents the
 * identical point of time.  It can also take something numeric; would consider
 * it as a UNIX time then.
 *
 * @param[in]  time            Instance of either ::rb_cTime or ::rb_cNumeric.
 * @exception  rb_eRangeError  `time` is out of range of `timeval::tv_sec`.
 * @return     A struct that represents the identical time to `num`.
 */
struct timeval rb_time_timeval(VALUE time);

/**
 * Identical to rb_time_timeval(), except for return type.
 *
 * @param[in]  time            Instance of either ::rb_cTime or ::rb_cNumeric.
 * @exception  rb_eRangeError  `time` is out of range of `timeval::tv_sec`.
 * @return     A struct that represents the identical time to `num`.
 */
struct timespec rb_time_timespec(VALUE time);

/**
 * Identical to rb_time_interval(), except for return type.
 *
 * @param[in]  num             An instance of ::rb_cNumeric.
 * @exception  rb_eArgError    `num` is negative.
 * @exception  rb_eRangeError  `num` is out of range of `timespec::tv_sec`.
 * @return     A struct that represents the identical time to `num`.
 */
struct timespec rb_time_timespec_interval(VALUE num);

/**
 * Queries the  offset, in seconds  between the time zone  of the time  and the
 * UTC.
 *
 * @param[in]  time  An instance of ::rb_cTime.
 * @return     Numeric offset.
 */
VALUE rb_time_utc_offset(VALUE time);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_TIME_H */
PK*J[]�� � &include/ruby/internal/intern/complex.hnu�[���#ifndef RBIMPL_INTERN_COMPLEX_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_COMPLEX_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cComplex.
 */
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/arithmetic/long.h" /* INT2FIX is here. */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* complex.c */

/**
 * Identical  to rb_complex_new(),  except it  assumes both  arguments are  not
 * instances of ::rb_cComplex.  It is thus dangerous for extension libraries.
 *
 * @param[in]  real  Real part, in any numeric except Complex.
 * @param[in]  imag  Imaginary part, in any numeric except Complex.
 * @return     An instance of ::rb_cComplex whose value is `real + (imag)i`.
 */
VALUE rb_complex_raw(VALUE real, VALUE imag);

/**
 * Shorthand of  `x+0i`.  It  practically converts  `x` into  a Complex  of the
 * identical value.
 *
 * @param[in]  x  Any numeric except Complex.
 * @return     An instance of ::rb_cComplex, whose value is `x + 0i`.
 */
#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0))

/** @alias{rb_complex_raw} */
#define rb_complex_raw2(x,y) rb_complex_raw((x), (y))

/**
 * Constructs a Complex, by first multiplying the imaginary part with `1i` then
 * adds it  to the real part.   This definition doesn't need  both arguments be
 * real numbers.  It  can happily combine two instances  of ::rb_cComplex (with
 * rotating the latter one).
 *
 * @param[in]  real  An instance of ::rb_cNumeric.
 * @param[in]  imag  Another instance of ::rb_cNumeric.
 * @return     An instance of ::rb_cComplex whose value is `imag * 1i + real`.
 */
VALUE rb_complex_new(VALUE real, VALUE imag);

/**
 * Shorthand of  `x+0i`.  It  practically converts  `x` into  a Complex  of the
 * identical value.
 *
 * @param[in]  x  Any numeric value.
 * @return     An instance of ::rb_cComplex, whose value is `x + 0i`.
 */
#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0))

/** @alias{rb_complex_new} */
#define rb_complex_new2(x,y) rb_complex_new((x), (y))

/**
 * Constructs a  Complex using polar representations.   Unlike rb_complex_new()
 * it makes no sense to pass non-real instances to this function.
 *
 * @param[in]  abs  Magnitude, in any numeric except Complex.
 * @param[in]  arg  Angle, in radians, in any numeric except Complex.
 * @return     An  instance  of ::rb_cComplex  which  denotes  the given  polar
 *             coordinates.
 */
VALUE rb_complex_new_polar(VALUE abs, VALUE arg);

RBIMPL_ATTR_DEPRECATED(("by: rb_complex_new_polar"))
/** @old{rb_complex_new_polar} */
VALUE rb_complex_polar(VALUE abs, VALUE arg);

RBIMPL_ATTR_PURE()
/**
 * Queries the real part of the passed Complex.
 *
 * @param[in]  z  An instance of ::rb_cComplex.
 * @return     Its real part, which is an instance of ::rb_cNumeric.
 */
VALUE rb_complex_real(VALUE z);

RBIMPL_ATTR_PURE()
/**
 * Queries the imaginary part of the passed Complex.
 *
 * @param[in]  z  An instance of ::rb_cComplex.
 * @return     Its imaginary part, which is an instance of ::rb_cNumeric.
 */
VALUE rb_complex_imag(VALUE z);

/**
 * Performs addition of the passed two objects.
 *
 * @param[in]  x  An instance of ::rb_cComplex.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x + y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_complex_plus(VALUE x, VALUE y);

/**
 * Performs subtraction of the passed two objects.
 *
 * @param[in]  x  An instance of ::rb_cComplex.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x - y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_complex_minus(VALUE x, VALUE y);

/**
 * Performs multiplication of the passed two objects.
 *
 * @param[in]  x  An instance of ::rb_cComplex.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x * y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_complex_mul(VALUE x, VALUE y);

/**
 * Performs division of the passed two objects.
 *
 * @param[in]  x  An instance of ::rb_cComplex.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x / y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_complex_div(VALUE x, VALUE y);

/**
 * Performs negation of the passed object.
 *
 * @param[in]  z  An instance of ::rb_cComplex.
 * @return     What `-z` evaluates to.
 */
VALUE rb_complex_uminus(VALUE z);

/**
 * Performs complex conjugation of the passed object.
 *
 * @param[in]  z  An instance of ::rb_cComplex.
 * @return     Its complex conjugate, in ::rb_cComplex.
 */
VALUE rb_complex_conjugate(VALUE z);

/**
 * Queries the absolute (or the magnitude) of the passed object.
 *
 * @param[in]  z  An instance of ::rb_cComplex.
 * @return     Its magnitude, in ::rb_cFloat.
 */
VALUE rb_complex_abs(VALUE z);

/**
 * Queries the argument (or the angle) of the passed object.
 *
 * @param[in]  z  An instance of ::rb_cComplex.
 * @return     Its magnitude, in ::rb_cFloat.
 */
VALUE rb_complex_arg(VALUE z);

/**
 * Performs exponentiation of the passed two objects.
 *
 * @param[in]  base  An instance of ::rb_cComplex.
 * @param[in]  exp   Arbitrary ruby object.
 * @return     What `base ** exp` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_complex_pow(VALUE base, VALUE exp);

/**
 * Identical to rb_complex_new(),  except it takes the arguments  as C's double
 * instead of Ruby's object.
 *
 * @param[in]  real  Real part.
 * @param[in]  imag  Imaginary part.
 * @return     An instance of ::rb_cComplex whose value is `real + (imag)i`.
 */
VALUE rb_dbl_complex_new(double real, double imag);

/** @alias{rb_complex_plus} */
#define rb_complex_add rb_complex_plus

/** @alias{rb_complex_minus} */
#define rb_complex_sub rb_complex_minus

/** @alias{rb_complex_uminus} */
#define rb_complex_nagate rb_complex_uminus

/**
 * Converts various values into a Complex.  This function accepts:
 *
 * - Instances of ::rb_cComplex (taken as-is),
 * - Instances of ::rb_cNumeric (adds `0i`),
 * - Instances of ::rb_cString  (parses),
 * - Other objects that respond to `#to_c`.
 *
 * It (possibly recursively) applies `#to_c`  until both sides become a Complex
 * value, then computes `imag * 1i + real`.
 *
 * As a  special case, passing ::RUBY_Qundef  to `imag` is the  same as passing
 * `RB_INT2NUM(0)`.
 *
 * @param[in]  real           Real part (see above).
 * @param[in]  imag           Imaginary part (see above).
 * @exception  rb_eTypeError  Passed something not described above.
 * @return     An instance of ::rb_cComplex whose value is `1i * imag + real`.
 *
 * @internal
 *
 * This was the implementation of `Kernel#Complex` before, but they diverged.
 */
VALUE rb_Complex(VALUE real, VALUE imag);

/**
 * Shorthand of  `x+0i`.  It  practically converts  `x` into  a Complex  of the
 * identical value.
 *
 * @param[in]  x  ::rb_cNumeric,  ::rb_cString, or  something that  responds to
 *                `#to_c`.
 * @return     An instance of ::rb_cComplex, whose value is `x + 0i`.
 */
#define rb_Complex1(x) rb_Complex((x), INT2FIX(0))

/** @alias{rb_Complex} */
#define rb_Complex2(x,y) rb_Complex((x), (y))

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_COMPLEX_H */
PK*J[��:�

%include/ruby/internal/intern/compar.hnu�[���#ifndef  RBIMPL_INTERN_COMPAR_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define  RBIMPL_INTERN_COMPAR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_mComparable.
 */
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* bignum.c */

/**
 * Canonicalises the passed `val`, which is the return value of `a <=> b`, into
 * C's `{-1, 0, 1}`.  This can be  handy when you implement a callback function
 * to pass to `qsort(3)` etc.
 *
 * @param[in]  val           Return value of a space ship operator.
 * @param[in]  a             Comparison LHS.
 * @param[in]  b             Comparison RHS.
 * @exception  rb_eArgError  `a` and `b` are not comparable each other.
 * @retval     -1            `val` is less than zero.
 * @retval     0             `val` is equal to zero.
 * @retval     1             `val` is greater than zero.
 */
int rb_cmpint(VALUE val, VALUE a, VALUE b);

/* compar.c */

RBIMPL_ATTR_COLD()
RBIMPL_ATTR_NORETURN()
/**
 * Raises "comparison failed" error.
 *
 * @param[in]  a             Comparison LHS.
 * @param[in]  b             Comparison RHS.
 * @exception  rb_eArgError  `a` and `b` are not comparable each other.
 */
void rb_cmperr(VALUE a, VALUE b);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_COMPAR_H */
PK*J[���RLRL%include/ruby/internal/intern/object.hnu�[���#ifndef RBIMPL_INTERN_OBJECT_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_OBJECT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cObject.
 */
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * This macro is (used but) mysterious.  Why on earth do we need this?
 *
 * - `obj != orig` check is done anyways inside of rb_obj_init_copy().
 * - rb_obj_init_copy() returns something.  No need are there to add `, 1`.
 */
#define RB_OBJ_INIT_COPY(obj, orig) \
    ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
/** @old{RB_OBJ_INIT_COPY} */
#define OBJ_INIT_COPY(obj, orig) RB_OBJ_INIT_COPY(obj, orig)

/* object.c */

/**
 * Identical to  rb_class_new_instance(), except it passes  the passed keywords
 * if any to the `#initialize` method.
 *
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Arbitrary number of method arguments.
 * @param[in]  klass          An instance of ::rb_cClass.
 * @exception  rb_eTypeError  `klass`'s allocator is undefined.
 * @exception  rb_eException  Any exceptions can happen inside.
 * @return     An allocated new instance of `klass`.
 * @note       This is _the_ implementation of `Object.new`.
 */
VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);

/**
 * Allocates, then initialises an instance of  the given class.  It first calls
 * the passed  class' allocator to  obtain an uninitialised object,  then calls
 * its initialiser with the remaining arguments.
 *
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Arguments passed to `#initialize`.
 * @param[in]  klass          An instance of ::rb_cClass.
 * @exception  rb_eTypeError  `klass`'s allocator is undefined.
 * @exception  rb_eException  Any exceptions can happen inside.
 * @return     An allocated new instance of `klass`.
 */
VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);

/**
 * Identical to rb_class_new_instance(),  except you can specify  how to handle
 * the last element of the given array.
 *
 * @param[in]  argc             Number of objects of `argv`.
 * @param[in]  argv             Arbitrary number of method arguments.
 * @param[in]  klass            An instance of ::rb_cClass.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eTypeError    `klass`'s allocator is undefined.
 * @exception  rb_eException    Any exceptions can happen inside.
 * @return     An allocated new instance of `klass`.
 */
VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);

/**
 * Checks for equality of the passed objects, in terms of `Object#eql?`.
 *
 * @param[in]  lhs          Comparison left hand side.
 * @param[in]  rhs          Comparison right hand side.
 * @retval     non-zero     They are equal.
 * @retval     0            Otherwise.
 * @note       This  function  actually  calls `lhs.eql?(rhs)`  so  you  cannot
 *             implement your class' `#eql?` method using it.
 */
int rb_eql(VALUE lhs, VALUE rhs);

/**
 * Generates a textual representation of the given object.
 *
 * @param[in]  obj  Arbitrary ruby object.
 * @return     An instance of ::rb_cString that represents `obj`.
 * @note       This is  the default  implementation of `Object#to_s`  that each
 *             subclasses want to override.
 */
VALUE rb_any_to_s(VALUE obj);

/**
 * Generates a human-readable textual representation of the given object.  This
 * is  largely similar  to Ruby  level `Object#inspect`  but not  the same;  it
 * additionally escapes the inspection result  so that the string be compatible
 * with that of default internal (or default external, if absent).
 *
 * @param[in]  obj  Arbitrary ruby object.
 * @return     An instance of ::rb_cString that represents `obj`.
 */
VALUE rb_inspect(VALUE obj);

/**
 * Queries if the given object is a direct instance of the given class.
 *
 * @param[in]  obj            Arbitrary ruby object.
 * @param[in]  klass          An instance of ::rb_cModule.
 * @exception  rb_eTypeError  `klass` is neither module nor class.
 * @retval     RUBY_Qtrue     `obj` is an instance of `klass`.
 * @retval     RUBY_Qfalse    Otherwise.
 */
VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);

/**
 * Queries if the given object is  an instance (of possibly descendants) of the
 * given class.
 *
 * @param[in]  obj            Arbitrary ruby object.
 * @param[in]  klass          An instance of ::rb_cModule.
 * @exception  rb_eTypeError  `klass` is neither module nor class.
 * @retval     RUBY_Qtrue     `obj` is a `klass`.
 * @retval     RUBY_Qfalse    Otherwise.
 */
VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);

/**
 * Allocates an instance of the given class.
 *
 * @param[in]  klass          A class to instantiate.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @return     An allocated, not yet initialised instance of `klass`.
 * @note       It calls  the allocator defined by  rb_define_alloc_func().  You
 *             cannot  use   this  function   to  define  an   allocator.   Use
 *             TypedData_Make_Struct or others, instead.
 * @note       Usually  prefer  rb_class_new_instance() to  rb_obj_alloc()  and
 *             rb_obj_call_init().
 * @see        rb_class_new_instance()
 * @see        rb_obj_call_init()
 * @see        rb_define_alloc_func()
 * @see        #TypedData_Make_Struct
 */
VALUE rb_obj_alloc(VALUE klass);

/**
 * Produces a shallow copy of the given object.  Its list of instance variables
 * are copied, but  not the objects they reference.  It  also copies the frozen
 * value state.
 *
 * @param[in]  obj            Arbitrary ruby object.
 * @exception  rb_eException  `#initialize_copy` can raise anything.
 * @return     A "clone" of `obj`.
 *
 * @internal
 *
 * Unlike ruby-level `Object#clone`, there is no way to control the frozen-ness
 * of the return value.
 */
VALUE rb_obj_clone(VALUE obj);

/**
 * Duplicates  the  given   object.   This  does  almost  the   same  thing  as
 * rb_obj_clone() do.  However  it does not copy the singleton  class (if any).
 * It also doesn't copy frozen-ness.
 *
 * @param[in]  obj            Arbitrary ruby object.
 * @exception  rb_eException  `#initialize_copy` can raise anything.
 * @return     A shallow copy of `obj`.
 */
VALUE rb_obj_dup(VALUE obj);

/**
 * Default   implementation   of  `#initialize_copy`,   `#initialize_dup`   and
 * `#initialize_clone`.  It  does almost  nothing.  Just raises  exceptions for
 * checks.
 *
 * @param[in]  dst              The destination object.
 * @param[in]  src              The source object.
 * @exception  rb_eFrozenError  `dst` is frozen.
 * @exception  rb_eTypeError    `dst` and `src` have different classes.
 * @return     Always returns `dst`.
 */
VALUE rb_obj_init_copy(VALUE src, VALUE dst);

/**
 * Just  calls  rb_obj_freeze_inline() inside.   Does  this  make any  sens  to
 * extension libraries?
 *
 * @param[out]  obj  Object to freeze.
 * @return      Verbatim `obj`.
 */
VALUE rb_obj_freeze(VALUE obj);

RBIMPL_ATTR_PURE()
/**
 * Just calls  RB_OBJ_FROZEN() inside.   Does this make  any sens  to extension
 * libraries?
 *
 * @param[in]  obj          Object in question.
 * @retval     RUBY_Qtrue   Yes it is.
 * @retval     RUBY_Qfalse  No it isn't.
 */
VALUE rb_obj_frozen_p(VALUE obj);

/* gc.c */

/**
 * Finds or  creates an integer  primary key of the  given object.  In  the old
 * days  this  function  was  a  purely  arithmetic  operation  that  maps  the
 * underlying memory  address where the  object resides into a  Ruby's integer.
 * Some time around  2.x this changed.  It no longer  relates its return values
 * to C level pointers.  This function  assigns some random number to the given
 * object  if absent.   The  same number  will be  returned  on all  subsequent
 * requests.  No two active objects share a number.
 *
 * @param[in]  obj  Arbitrary ruby object.
 * @return     An instance of ::rb_cInteger which is an "identifier" of `obj`.
 *
 * @internal
 *
 * The "some  random number" is  in fact a  monotonic-increasing process-global
 * unique integer, much like an  `INTEGER AUTO_INCREMENT PRIMARY KEY` column in
 * a MySQL table.
 */
VALUE rb_obj_id(VALUE obj);

RBIMPL_ATTR_CONST()
/**
 * Identical to rb_obj_id(), except it hesitates from allocating a new instance
 * of ::rb_cInteger.  rb_obj_id() could allocate ::RUBY_T_BIGNUM objects.  That
 * allocation  might  perhaps  impact  negatively.  On  such  situations,  this
 * function  instead returns  one-shot temporary  small integers  that need  no
 * allocations at all.  The values are  guaranteed unique at the moment, but no
 * future promise  is made; could  be reused.  Use of  this API should  be very
 * instant.  It is a failure to store the returned integer to somewhere else.
 *
 * In short it is difficult to use.
 *
 * @param[in]  obj  Arbitrary ruby object.
 * @return     An instance of ::rb_cInteger unique at the moment.
 *
 * @internal
 *
 * This is roughly the old behaviour of rb_obj_id().
 */
VALUE rb_memory_id(VALUE obj);

/* object.c */

RBIMPL_ATTR_PURE()
/**
 * Finds a "real" class.  As the name  implies there are class objects that are
 * surreal.   This function  takes a  class, traverses  its ancestry  tree, and
 * returns  its nearest  ancestor which  is neither  a module  nor a  singleton
 * class.
 *
 * @param[in]  klass        An instance of ::rb_cClass.
 * @retval     RUBY_Qfalse  No real class in `klass`' ancestry tree.
 * @retval     klass        `klass` itself is a real class.
 * @retval     otherwise    Nearest ancestor of `klass` who is real.
 */
VALUE rb_class_real(VALUE klass);

RBIMPL_ATTR_PURE()
/**
 * Determines if the given two modules are relatives.
 *
 * @param[in]  scion          Possible subclass.
 * @param[in]  ascendant      Possible superclass.
 * @exception  rb_eTypeError  `ascendant` is not a module.
 * @retval     RUBY_Qtrue     `scion` inherits, or is equal to `ascendant`.
 * @retval     RUBY_Qfalse    `ascendant` inherits `scion`.
 * @retval     RUBY_Qnil      They are not relatives.
 */
VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant);

RBIMPL_ATTR_PURE()
/**
 * Queries the parent of the given class.
 *
 * @param[in]  klass          A child class.
 * @exception  rb_eTypeError  `klass` is a `Class.allocate`.
 * @retval     RUBY_Qfalse    `klass` has no superclass.
 * @retval     otherwise      `klass`' superclass.
 *
 * @internal
 *
 * Is there any class except ::rb_cBasicObject, that has no superclass?
 */
VALUE rb_class_superclass(VALUE klass);

RBIMPL_ATTR_NONNULL(())
/**
 * Converts an object into another type.  Calls the specified conversion method
 * if necessary.
 *
 * @param[in]  val            An object to convert.
 * @param[in]  type           A value of enum ::ruby_value_type.
 * @param[in]  name           Name to display on error (e.g. "Array").
 * @param[in]  mid            Conversion method (e.g. "to_ary").
 * @exception  rb_eTypeError  Failed to convert.
 * @return     An object of the specified type.
 */
VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical  to rb_convert_type(),  except it  returns ::RUBY_Qnil  instead of
 * raising  exceptions,  in  case  of  conversion  failure.   It  still  raises
 * exceptions  for various  reasons,  like when  the  conversion method  itself
 * raises, though.
 *
 * @param[in]  val            An object to convert.
 * @param[in]  type           A value of enum ::ruby_value_type.
 * @param[in]  name           Name to display on error (e.g. "Array").
 * @param[in]  mid            Conversion method (e.g. "to_ary").
 * @exception  rb_eTypeError  The `mid` does not generate `type`.
 * @retval     RUBY_Qnil      No conversion defined.
 * @retval     otherwise      An object of the specified type.
 */
VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_check_convert_type(), except the  return value type is fixed
 * to ::rb_cInteger.
 *
 * @param[in]  val            An object to convert.
 * @param[in]  mid            Conversion method (e.g. "to_ary").
 * @exception  rb_eTypeError  The `mid` does not generate an integer.
 * @retval     RUBY_Qnil      No conversion defined.
 * @retval     otherwise      An instance of ::rb_cInteger.
 */
VALUE rb_check_to_integer(VALUE val, const char *mid);

/**
 * This is complicated.
 *
 *   - When  the passed  object is  already  an instance  of ::rb_cFloat,  just
 *     returns it as-is.
 *
 *   - When  the passed  object is  something  numeric, the  function tries  to
 *     convert it using `#to_f` method.
 *
 *       - If that conversion fails (this happens for instance when the numeric
 *         is a complex) it returns ::RUBY_Qnil.
 *
 *       - Otherwise returns the conversion result.
 *
 *   - Otherwise it also returns ::RUBY_Qnil.
 *
 * @param[in]  val        An object to convert.
 * @retval     RUBY_Qnil  Conversion from `val` to float is undefined.
 * @retval     otherwise  Converted result.
 */
VALUE rb_check_to_float(VALUE val);

/**
 * Identical  to rb_check_to_int(),  except  it raises  in  case of  conversion
 * mismatch.
 *
 * @param[in]  val            An object to convert.
 * @exception  rb_eTypeError  `#to_int` does not generate an integer.
 * @return     An instance of ::rb_cInteger.
 */
VALUE rb_to_int(VALUE val);

/**
 * Identical to rb_check_to_integer(), except it uses `#to_int` for conversion.
 *
 * @param[in]  val            An object to convert.
 * @exception  rb_eTypeError  `#to_int` does not return an integer.
 * @retval     RUBY_Qnil      No conversion defined.
 * @retval     otherwise      An instance of ::rb_cInteger.
 */
VALUE rb_check_to_int(VALUE val);

/**
 * This  is the  logic behind  `Kernel#Integer`.  Numeric  types are  converted
 * directly,  with  floating  point   numbers  being  truncated.   Strings  are
 * interpreted  strictly; only  leading/trailing whitespaces,  plus/minus sign,
 * radix  indicators  such  as  `0x`,  digits,  and  underscores  are  allowed.
 * Anything else are converted by first trying `#to_int`, then `#to_i`.
 *
 * This is slightly stricter than `String#to_i`.
 *
 * @param[in]  val            An object to convert.
 * @exception  rb_eArgError   Malformed `val` passed.
 * @exception  rb_eTypeError  No conversion defined.
 * @return     An instance of ::rb_cInteger.
 */
VALUE rb_Integer(VALUE val);

/**
 * Identical to rb_check_to_float(), except it raises on error.
 *
 * @param[in]  val            An object to convert.
 * @exception  rb_eTypeError  No conversion defined.
 * @return     An instance of ::rb_cFloat.
 */
VALUE rb_to_float(VALUE val);

/**
 * This  is  the logic  behind  `Kernel#Float`.   Numeric types  are  converted
 * directly  to the  nearest value  that a  Float can  represent.  Strings  are
 * interpreted strictly;  only leading/trailing whitespaces are  allowed except
 * what `strtod` understands.  Anything else are converted using `#to_f`.
 *
 * This is slightly stricter than `String#to_f`.
 *
 * @param[in]  val            An object to convert.
 * @exception  rb_eArgError   Malformed `val` passed.
 * @exception  rb_eTypeError  No conversion defined.
 * @return     An instance of ::rb_cFloat.
 */
VALUE rb_Float(VALUE val);

/**
 * This is the logic behind  `Kernel#String`.  Arguments are converted by first
 * trying `#to_str`, then `#to_s`.
 *
 * @param[in]  val            An object to convert.
 * @exception  rb_eTypeError  No conversion defined.
 * @return     An instance of ::rb_cString.
 */
VALUE rb_String(VALUE val);

/**
 * This is the  logic behind `Kernel#Array`.  Arguments are  converted by first
 * trying `#to_ary`,  then `#to_a`,  and if  both failed,  returns an  array of
 * length 1 that contains the passed argument as the sole contents.
 *
 * @param[in]  val  An object to convert.
 * @return     An instance of ::rb_cArray.
 */
VALUE rb_Array(VALUE val);

/**
 * This is  the logic behind  `Kernel#Hash`.  Arguments are converted  by first
 * trying `#to_hash`.  if it failed, and  the argument is either ::RUBY_Qnil or
 * an empty array, returns an empty hash.  Otherwise an exception is raised.
 *
 * @param[in]  val            An object to convert.
 * @exception  rb_eTypeError  No conversion defined.
 * @return     An instance of ::rb_cHash.
 */
VALUE rb_Hash(VALUE val);

RBIMPL_ATTR_NONNULL(())
/**
 * Converts a textual representation of a  real number into a numeric, which is
 * the nearest value that the return type  can represent, of the value that the
 * argument represents.  This is in fact  a 2-in-1 function whose behaviour can
 * be controlled using  the second (mode) argument.  If the  mode is zero, this
 * function is in "historical"  mode which only understands "floating-constant"
 * defined at ISO/IEC 9899:1990 section 6.1.3.1.  If the mode is nonzero, it is
 * in  "extended"  mode,  which  also  accepts  "hexadecimal-floating-constant"
 * defined at ISO/IEC 9899:2018 section 6.4.4.2.
 *
 * @param[in]  str           A textual representation of a real number.
 * @param[in]  mode          Conversion mode, as described above.
 * @exception  rb_eArgError  Malformed `str` passed.
 * @see        https://bugs.ruby-lang.org/issues/2969
 * @note       Null pointers are allowed, and it returns 0.0 then.
 */
double rb_cstr_to_dbl(const char *str, int mode);

/**
 * Identical to rb_cstr_to_dbl(), except it  accepts a Ruby's string instead of
 * C's.
 *
 * @param[in]  str           A textual representation of a real number.
 * @param[in]  mode          Conversion mode, as described in rb_cstr_to_dbl().
 * @exception  rb_eArgError  Malformed `str` passed.
 * @see        https://bugs.ruby-lang.org/issues/2969
 */
double rb_str_to_dbl(VALUE str, int mode);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_OBJECT_H */
PK*J[T�A�$�$%include/ruby/internal/intern/struct.hnu�[���#ifndef RBIMPL_INTERN_STRUCT_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_STRUCT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cStruct.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/intern/vm.h" /* rb_alloc_func_t */
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* struct.c */

/**
 * Creates an instance of the given struct.
 *
 * @param[in]  klass  The class of the instance to allocate.
 * @param[in]  ...    The fields.
 * @return     Allocated instance of `klass`.
 * @pre        `klass` must be a subclass of ::rb_cStruct.
 * @note       Number of variadic arguments must much that of the passed klass'
 *             fields.
 */
VALUE rb_struct_new(VALUE klass, ...);

/**
 * Defines a struct class.
 *
 * @param[in]  name           Name of the class.
 * @param[in]  ...            Arbitrary number of  `const char*`, terminated by
 *                            NULL.  Each of which are the name of fields.
 * @exception  rb_eNameError  `name` is not a constant name.
 * @exception  rb_eTypeError  `name` is already taken.
 * @exception  rb_eArgError   Duplicated field name.
 * @return     The defined class.
 * @post       Global toplevel constant `name` is defined.
 * @note       `name` is allowed  to be a null pointer.   This function creates
 *             an anonymous struct class then.
 * @note       The GC does not collect nor move classes returned by this
 *             function. They are immortal.
 *
 * @internal
 *
 * Not  seriously  checked but  it  seems  this  function  does not  share  its
 * implementation with how `Struct.new` is implemented...?
 */
VALUE rb_struct_define(const char *name, ...);

RBIMPL_ATTR_NONNULL((2))
/**
 * Identical  to rb_struct_define(),  except  it defines  the  class under  the
 * specified namespace instead of global toplevel.
 *
 * @param[out]  space          Namespace that the defining class shall reside.
 * @param[in]   name           Name of the class.
 * @param[in]   ...            Arbitrary number of `const char*`, terminated by
 *                             NULL.  Each of which are the name of fields.
 * @exception   rb_eNameError  `name` is not a constant name.
 * @exception   rb_eTypeError  `name` is already taken.
 * @exception   rb_eArgError   Duplicated field name.
 * @return      The defined class.
 * @post        `name` is a constant under `space`.
 * @note        In contrast to rb_struct_define(), it doesn't make any sense to
 *              pass  a null pointer to this function.
 * @note        The GC does not collect nor move classes returned by this
 *              function. They are immortal.
 */
VALUE rb_struct_define_under(VALUE space, const char *name, ...);

/**
 * Identical to  rb_struct_new(), except it  takes the  field values as  a Ruby
 * array.
 *
 * @param[in]  klass   The class of the instance to allocate.
 * @param[in]  values  Field values.
 * @return     Allocated instance of `klass`.
 * @pre        `klass` must be a subclass of ::rb_cStruct.
 * @pre        `values` must be an instance of struct ::RArray.
 */
VALUE rb_struct_alloc(VALUE klass, VALUE values);

/**
 * Mass-assigns a struct's fields.
 *
 * @param[out]  self    An instance of a struct class to squash.
 * @param[in]   values  New values.
 * @return      ::RUBY_Qnil.
 */
VALUE rb_struct_initialize(VALUE self, VALUE values);

/**
 * Identical to rb_struct_aref(), except it takes ::ID instead of ::VALUE.
 *
 * @param[in]  self           An instance of a struct class.
 * @param[in]  key            Key to query.
 * @exception  rb_eTypeError  `self` is not a struct.
 * @exception  rb_eNameError  No such field.
 * @return     The value stored at `key` in `self`.
 */
VALUE rb_struct_getmember(VALUE self, ID key);

/**
 * Queries the list of the names of the fields of the given struct class.
 *
 * @param[in]  klass  A subclass of ::rb_cStruct.
 * @return     The list of the names of the fields of `klass`.
 */
VALUE rb_struct_s_members(VALUE klass);

/**
 * Queries the list of the names of the fields of the class of the given struct
 * object.  This is  almost the same as calling  rb_struct_s_members() over the
 * class of the receiver.
 *
 * @internal
 *
 * "Almost"?  What exactly is the difference?
 *
 * @endinternal
 *
 * @param[in]  self  An instance of a subclass of ::rb_cStruct.
 * @return     The list of the names of the fields.
 */
VALUE rb_struct_members(VALUE self);

/**
 * Allocates an  instance of the  given class.   This consequential name  is of
 * course because rb_struct_alloc() not only  allocates but also initialises an
 * instance.  The API design is broken.
 *
 * @param[in]  klass  A subclass of ::rb_cStruct.
 * @return     An allocated instance of `klass`, not initialised.
 */
VALUE rb_struct_alloc_noinit(VALUE klass);

/**
 * Identical to rb_struct_define(), except it does not define accessor methods.
 * You  have to  define them  yourself.   Forget about  the allocator  function
 * parameter; it is  for internal use only.  Extension libraries  are unable to
 * properly allocate a ruby struct, because `RStruct` is opaque.
 *
 * @internal
 *
 * Several flags must be set up properly for ::RUBY_T_STRUCT objects, which are
 * also missing for extension libraries.
 *
 * @endinternal
 *
 * @param[in]  name           Name of the class.
 * @param[in]  super          Superclass of the defining class.
 * @param[in]  func           Must be 0 for extension libraries.
 * @param[in]  ...            Arbitrary number of  `const char*`, terminated by
 *                            NULL.  Each of which are the name of fields.
 * @exception  rb_eNameError  `name` is not a constant name.
 * @exception  rb_eTypeError  `name` is already taken.
 * @exception  rb_eArgError   Duplicated field name.
 * @return     The defined class.
 * @post       Global toplevel constant `name` is defined.
 * @note       `name` is allowed  to be a null pointer.   This function creates
 *             an anonymous struct class then.
 */
VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...);

RBIMPL_ATTR_NONNULL((2))
/**
 * Identical  to  rb_struct_define_without_accessor(),  except it  defines  the
 * class under the specified namespace instead of global toplevel.  It can also
 * be seen as  a routine identical to rb_struct_define_under(),  except it does
 * not define accessor methods.
 *
 * @param[out]  outer          Namespace that the defining class shall reside.
 * @param[in]   class_name     Name of the class.
 * @param[in]   super          Superclass of the defining class.
 * @param[in]   alloc          Must be 0 for extension libraries.
 * @param[in]   ...            Arbitrary number of `const char*`, terminated by
 *                             NULL.  Each of which are the name of fields.
 * @exception   rb_eNameError  `class_name` is not a constant name.
 * @exception   rb_eTypeError  `class_name` is already taken.
 * @exception   rb_eArgError   Duplicated field name.
 * @return      The defined class.
 * @post        `class_name` is a constant under `outer`.
 * @note        In contrast to  rb_struct_define_without_accessor(), it doesn't
 *              make any sense to pass a null name.
 * @note        The GC does not collect nor move classes returned by this
 *              function. They are immortal.
 */
VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...);

/**
 * Defines an anonymous data class.
 *
 * @endinternal
 *
 * @param[in]  super           Superclass  of the  defining  class.   Must be  a
 *                             descendant of ::rb_cData, or 0 as ::rb_cData.
 * @param[in]  ...             Arbitrary number of  `const char*`, terminated by
 *                             NULL.  Each of which are the name of fields.
 * @exception  rb_eArgError    Duplicated field name.
 * @return     The defined class.
 * @note       The GC does not collect nor move classes returned by this
 *             function. They are immortal.
 */
VALUE rb_data_define(VALUE super, ...);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_STRUCT_H */
PK*J[@n�4jj%include/ruby/internal/intern/select.hnu�[���#ifndef RBIMPL_INTERN_SELECT_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_SELECT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs to provide ::rb_fd_select().
 * @note       Functions  and  structs defined  in  this  header file  are  not
 *             necessarily ruby-specific.  They don't need ::VALUE etc.
 */
#include "ruby/internal/config.h"

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>         /* for NFDBITS (BSD Net/2) */
#endif

#include "ruby/internal/dllexport.h"

/* thread.c */
#if defined(NFDBITS) && defined(HAVE_RB_FD_INIT)
# include "ruby/internal/intern/select/largesize.h"
#elif defined(_WIN32)
# include "ruby/internal/intern/select/win32.h"
# /** Does nothing (defined for compatibility). */
# define rb_fd_resize(n, f) ((void)(f))
#else
# include "ruby/internal/intern/select/posix.h"
# /** Does nothing (defined for compatibility). */
# define rb_fd_resize(n, f) ((void)(f))
#endif

RBIMPL_SYMBOL_EXPORT_BEGIN()

struct timeval;

/**
 * Waits for multiple file descriptors at once.  This is basically a wrapper of
 * system-provided select() with releasing GVL, to allow other Ruby threads run
 * in parallel.
 *
 * @param[in]      nfds       Max FD in everything passed, plus one.
 * @param[in,out]  rfds       Set of FDs to wait for reads.
 * @param[in,out]  wfds       Set of FDs to wait for writes.
 * @param[in,out]  efds       Set of FDs to wait for OOBs.
 * @param[in,out]  timeout    Max blocking duration.
 * @retval         -1         Failed, errno set.
 * @retval          0         Timeout exceeded.
 * @retval         otherwise  Total number of file descriptors returned.
 * @post           `rfds` contains readable FDs.
 * @post           `wfds` contains writable FDs.
 * @post           `efds` contains exceptional FDs.
 * @post           `timeout` is the time left.
 * @note           All pointers are allowed to be null pointers.
 *
 * Although backend  threads can run in  parallel of this function,  touching a
 * file descriptor  from multiple threads  could be problematic.   For instance
 * what happens  when a  thread closes  a file descriptor  that is  selected by
 * someone else, vastly varies among operating systems.  You would better avoid
 * touching an fd from more than one threads.
 *
 * @internal
 *
 * Although  any file  descriptors are  possible here,  it makes  completely no
 * sense to pass  a descriptor that is  not `O_NONBLOCK`.  If you  want to know
 * the reason for  this limitation in detail, you might  find this thread super
 * interesting: https://lkml.org/lkml/2004/10/6/117
 */
int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_SELECT_H */
PK*J[G6e��
�
%include/ruby/internal/intern/string.hnu�[���#ifndef RBIMPL_INTERN_STRING_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_STRING_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cString.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#ifdef HAVE_STRING_H
# include <string.h>
#endif

#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif

#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/constant_p.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/variable.h" /* rb_gvar_setter_t */
#include "ruby/st.h"         /* st_index_t */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* string.c */

/**
 * Allocates an instance of ::rb_cString.
 *
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An  instance   of  ::rb_cString,  of  `len`   bytes  length,  of
 *             "binary" encoding, whose contents are verbatim copy of `ptr`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `ptr`.
 */
VALUE rb_str_new(const char *ptr, long len);

/**
 * Identical to rb_str_new(), except it assumes the passed pointer is a pointer
 * to a C string.
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @exception  rb_eArgError    `ptr` is a null pointer.
 * @return     An  instance  of  ::rb_cString,   of  "binary"  encoding,  whose
 *             contents are verbatim copy of `ptr`.
 * @pre        `ptr` must not be a null pointer.
 */
VALUE rb_str_new_cstr(const char *ptr);

/**
 * Identical to rb_str_new_cstr(),  except it takes a Ruby's  string instead of
 * C's.  Implementation wise it creates a string that shares the backend memory
 * region with the receiver.   So the name.  But there is  no way for extension
 * libraries to know if a string is of such variant.
 *
 * @param[in]  str  An object of ::RString.
 * @return     An  allocated   instance  of  ::rb_cString,  which   shares  the
 *             encoding, length, and contents with the passed string.
 * @pre        `str` must not be any arbitrary object except ::RString.
 * @note       Use #StringValue to enforce the precondition.
 */
VALUE rb_str_new_shared(VALUE str);

/**
 * Creates  a frozen  copy of  the string,  if necessary.   This function  does
 * nothing when the passed string is already frozen.  Otherwise, it allocates a
 * copy of it, which is frozen.  The passed string is untouched either ways.
 *
 * @param[in]  str  An object of ::RString.
 * @return     Something frozen.
 * @pre        `str` must not be any arbitrary object except ::RString.
 * @note       Use #StringValue to enforce the precondition.
 */
VALUE rb_str_new_frozen(VALUE str);

/**
 * Identical  to rb_str_new(),  except it  takes  the class  of the  allocating
 * object.
 *
 * @param[in]  obj             A string-ish object.
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An instance  of the class  of `obj`,  of `len` bytes  length, of
 *             "binary" encoding, whose contents are verbatim copy of `ptr`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `ptr`.
 *
 * @internal
 *
 * Why it doesn't take an instance of ::rb_cClass?
 */
VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);

/**
 * Identical  to  rb_str_new(),  except  it  generates  a  string  of  "default
 * external" encoding.
 *
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default internal"  to "default external" is  fully defined over
 *             the  given  contents, then  the  return  value  is a  string  of
 *             "default external"  encoding, whose  contents are  the converted
 *             ones.  Otherwise the string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 */
VALUE rb_external_str_new(const char *ptr, long len);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_external_str_new(), except it  assumes the passed pointer is
 * a pointer  to a C  string.  It can  also be seen  as a routine  identical to
 * rb_str_new_cstr(),  except  it  generates  a string  of  "default  external"
 * encoding.
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default internal"  to "default external" is  fully defined over
 *             the  given  contents, then  the  return  value  is a  string  of
 *             "default external"  encoding, whose  contents are  the converted
 *             ones.  Otherwise the string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 * @pre        `ptr` must not be a null pointer.
 */
VALUE rb_external_str_new_cstr(const char *ptr);

/**
 * Identical  to  rb_str_new(),  except  it  generates  a  string  of  "locale"
 * encoding.    It   can   also   be   seen   as   a   routine   identical   to
 * rb_external_str_new(),  except it  generates a  string of  "locale" encoding
 * instead of "default external" encoding.
 *
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default internal" to  "locale" is fully defined  over the given
 *             contents,  then  the  return  value  is  a  string  of  "locale"
 *             encoding, whose contents are  the converted ones.  Otherwise the
 *             string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 */
VALUE rb_locale_str_new(const char *ptr, long len);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_locale_str_new(), except it  assumes the passed pointer is a
 * pointer  to a  C string.   It can  also be  seen as  a routine  identical to
 * rb_external_str_new_cstr(),  except  it  generates   a  string  of  "locale"
 * encoding instead of "default external".
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default internal" to  "locale" is fully defined  over the given
 *             contents,  then  the  return  value  is  a  string  of  "locale"
 *             encoding, whose contents are  the converted ones.  Otherwise the
 *             string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 * @pre        `ptr` must not be a null pointer.
 */
VALUE rb_locale_str_new_cstr(const char *ptr);

/**
 * Identical  to rb_str_new(),  except it  generates a  string of  "filesystem"
 * encoding.    It   can   also   be   seen   as   a   routine   identical   to
 * rb_external_str_new(), except it generates a string of "filesystem" encoding
 * instead of "default external" encoding.
 *
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default  internal" to  "filesystem" is  fully defined  over the
 *             given  contents,   then  the  return   value  is  a   string  of
 *             "filesystem" encoding,  whose contents  are the  converted ones.
 *             Otherwise the string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 */
VALUE rb_filesystem_str_new(const char *ptr, long len);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to  rb_filesystem_str_new(), except it assumes  the passed pointer
 * is a pointer to  a C string.  It can also be seen  as a routine identical to
 * rb_external_str_new_cstr(),  except it  generates a  string of  "filesystem"
 * encoding instead of "default external".
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default  internal" to  "filesystem" is  fully defined  over the
 *             given  contents,   then  the  return   value  is  a   string  of
 *             "filesystem" encoding,  whose contents  are the  converted ones.
 *             Otherwise the string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 * @pre        `ptr` must not be a null pointer.
 */
VALUE rb_filesystem_str_new_cstr(const char *ptr);

/**
 * Allocates  a "string  buffer".   A  string buffer  here  is  an instance  of
 * ::rb_cString, whose  capacity is bigger than  the length of it.   If you can
 * say  that a  string grows  to  a specific  amount  of bytes,  this could  be
 * effective than resizing a string over and over again and again.
 *
 * @param[in]  capa  Designed capacity of the generating string.
 * @return     An empty string, of "binary" encoding, whose capacity is `capa`.
 */
VALUE rb_str_buf_new(long capa);

RBIMPL_ATTR_NONNULL(())
/**
 * This is a rb_str_buf_new() + rb_str_buf_cat() combo.
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An  instance  of  ::rb_cString,   of  "binary"  encoding,  whose
 *             contents are verbatim copy of `ptr`.
 * @pre        `ptr` must not be a null pointer.
 *
 * @internal
 *
 * This must be identical to rb_str_new_cstr(), except done in inefficient way?
 * @shyouhei doesn't understand why this is not a simple alias.
 */
VALUE rb_str_buf_new_cstr(const char *ptr);

/**
 * Allocates a  "temporary" string.  This is  a hidden empty string.   Handy on
 * occasions.
 *
 * @param[in]  len  Designed length of the string.
 * @return     A hidden, empty string.
 * @see        rb_obj_hide()
 */
VALUE rb_str_tmp_new(long len);

/**
 * Identical  to rb_str_new(),  except  it  generates a  string  of "US  ASCII"
 * encoding.  This  is different from  rb_external_str_new(), not only  for the
 * output encoding, but also it doesn't convert the contents.
 *
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An  instance   of  ::rb_cString,  of  `len`   bytes  length,  of
 *             "US ASCII" encoding, whose contents are verbatim copy of `ptr`.
 */
VALUE rb_usascii_str_new(const char *ptr, long len);

/**
 * Identical to rb_str_new_cstr(),  except it generates a string  of "US ASCII"
 * encoding.   It   can   also   be    seen   as   a   routine   Identical   to
 * rb_usascii_str_new(), except it assumes the passed pointer is a pointer to a
 * C string.
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @exception  rb_eArgError    `ptr` is a null pointer.
 * @return     An  instance  of ::rb_cString,  of  "US  ASCII" encoding,  whose
 *             contents are verbatim copy of `ptr`.
 * @pre        `ptr` must not be a null pointer.
 */
VALUE rb_usascii_str_new_cstr(const char *ptr);

/**
 * Identical to rb_str_new(), except it generates a string of "UTF-8" encoding.
 *
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An  instance   of  ::rb_cString,  of  `len`   bytes  length,  of
 *             "UTF-8" encoding, whose contents are verbatim copy of `ptr`.
 */
VALUE rb_utf8_str_new(const char *ptr, long len);

/**
 * Identical  to rb_str_new_cstr(),  except it  generates a  string of  "UTF-8"
 * encoding.    It   can   also   be   seen   as   a   routine   Identical   to
 * rb_usascii_str_new(), except it assumes the passed pointer is a pointer to a
 * C string.
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @exception  rb_eArgError    `ptr` is a null pointer.
 * @return     An instance of ::rb_cString, of "UTF-8" encoding, whose contents
 *             are verbatim copy of `ptr`.
 * @pre        `ptr` must not be a null pointer.
 */
VALUE rb_utf8_str_new_cstr(const char *ptr);

/**
 * @name Special strings that are backended by C string literals.
 *
 *  *_str_new_static functions are intended for C string literals.
 *  They require memory in the range [ptr, ptr+len] to always be readable.
 *  Note that this range covers a total of len + 1 bytes.
 *
 * @{
 */

/**
 * Identical to rb_str_new(), except it takes a C string literal.
 *
 * @param[in]  ptr           A C string literal.
 * @param[in]  len           `strlen(ptr)`.
 * @exception  rb_eArgError  `len` out of range of `size_t`.
 * @pre        `ptr` must be a C string constant.
 * @return     An instance of ::rb_cString, of "binary" encoding, whose backend
 *             storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 *
 * @internal
 *
 * Surprisingly it can take NULL, and generates an empty string.
 */
VALUE rb_str_new_static(const char *ptr, long len);

/**
 * Identical to rb_str_new_static(), except it generates a string of "US ASCII"
 * encoding instead of "binary".  It can also be seen as a routine identical to
 * rb_usascii_str_new(), except it takes a C string literal.
 *
 * @param[in]  ptr           A C string literal.
 * @param[in]  len           `strlen(ptr)`.
 * @exception  rb_eArgError  `len` out of range of `size_t`.
 * @pre        `ptr` must be a C string constant.
 * @return     An  instance  of ::rb_cString,  of  "US  ASCII" encoding,  whose
 *             backend storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 */
VALUE rb_usascii_str_new_static(const char *ptr, long len);

/**
 * Identical to  rb_str_new_static(), except it  generates a string  of "UTF-8"
 * encoding instead of "binary".  It can also be seen as a routine identical to
 * rb_utf8_str_new(), except it takes a C string literal.
 *
 * @param[in]  ptr           A C string literal.
 * @param[in]  len           `strlen(ptr)`.
 * @exception  rb_eArgError  `len` out of range of `size_t`.
 * @pre        `ptr` must be a C string constant.
 * @return     An instance of ::rb_cString,  of "UTF-8" encoding, whose backend
 *             storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 */
VALUE rb_utf8_str_new_static(const char *ptr, long len);

/** @} */

/**
 * Identical to rb_interned_str(),  except it takes a Ruby's  string instead of
 * C's.  It can also be seen  as a routine identical to rb_str_new_shared(),
 * except it returns an infamous "f"string.
 *
 * @param[in]  str  An object of ::RString.
 * @return     An instance  of ::rb_cString, either cached  or allocated, which
 *             has the identical encoding, length, and contents with the passed
 *             string.
 * @pre        `str` must not be any arbitrary object except ::RString.
 * @note       Use #StringValue to enforce the precondition.
 *
 * @internal
 *
 * It  actually  finds  or  creates  a fstring  of  the  needed  property,  and
 * destructively modifies  the receiver behind-the-scene  so that it  becomes a
 * shared string whose parent is the returning fstring.
 */
VALUE rb_str_to_interned_str(VALUE str);

/**
 * Identical to rb_str_new(), except it returns an infamous "f"string.  What is
 * a  fstring?  Well  it is  a special  subkind of  strings that  is immutable,
 * deduped globally, and managed by our GC.   It is much like a Symbol (in fact
 * Symbols  are dynamic  these days  and are  backended using  fstrings).  This
 * concept has been  silently introduced at some point in  2.x era.  Since then
 * it  gained  wider acceptance  in  the  core.   Starting from  3.x  extension
 * libraries can also generate ones.
 *
 * @param[in]  ptr           A memory region of `len` bytes length.
 * @param[in]  len           Length  of  `ptr`,  in bytes,  not  including  the
 *                           terminating NUL character.
 * @exception  rb_eArgError  `len` is negative.
 * @return     A  found or  created instance  of ::rb_cString,  of `len`  bytes
 *             length, of  "binary" encoding,  whose contents are  identical to
 *             that of `ptr`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `ptr`.
 */
VALUE rb_interned_str(const char *ptr, long len);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to  rb_interned_str(), except it  assumes the passed pointer  is a
 * pointer to a C's  string.  It can also be seen as a  routine identical to
 * rb_str_to_interned_str(), except  it takes a  C's string instead  of Ruby's.
 * Or it can  also be seen as a routine  identical to rb_str_new_cstr(), except
 * it returns an infamous "f"string.
 *
 * @param[in]  ptr             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An  instance  of  ::rb_cString,   of  "binary"  encoding,  whose
 *             contents are verbatim copy of `ptr`.
 * @pre        `ptr` must not be a null pointer.
 */
VALUE rb_interned_str_cstr(const char *ptr);

/**
 * Destroys the given string for no reason.
 *
 * @warning  DO NOT USE IT.
 * @warning  Leave this task to our GC.
 * @warning  It was a bad idea at the first place to let you know about it.
 *
 * @param[out]  str  The string to be executed.
 * @post        The given string no longer exists.
 * @note        Maybe `String#clear` could be what you want.
 *
 * @internal
 *
 * Should have moved this to `internal/string.h`.
 */
void rb_str_free(VALUE str);

/**
 * Replaces the contents of the former with the latter.
 *
 * @param[out]  dst  Destination object.
 * @param[in]   src  Source object.
 * @pre         Both  objects   must  not  be  any   arbitrary  objects  except
 *              ::RString.
 * @post        `dst`'s  former  components  are  abandoned.  It  now  has  the
 *              identical encoding, length, and contents to `src`.
 * @see         rb_str_replace()
 *
 * @internal
 *
 * @shyouhei  doesn't understand  why this  is useful  to extension  libraries.
 * Just use rb_str_replace().  What's wrong with that?
 */
void rb_str_shared_replace(VALUE dst, VALUE src);

/**
 * Identical to  rb_str_cat_cstr(), except  it takes  Ruby's string  instead of
 * C's.  It can also be seen as a routine identical to rb_str_shared_replace(),
 * except it appends instead of replaces.
 *
 * @param[out]  dst                 Destination object.
 * @param[in]   src                 Source object.
 * @exception   rb_eEncCompatError  Can't mix the encodings.
 * @exception   rb_eArgError        Result string too big.
 * @return      The passed `dst`.
 * @pre         Both  objects   must  not  be  any   arbitrary  objects  except
 *              ::RString.
 * @post        `dst`  has  the  contents  of  `src`  appended,  with  encoding
 *              converted into `dst`'s one, into the end of `dst`.
 */
VALUE rb_str_buf_append(VALUE dst, VALUE src);

/** @alias{rb_str_cat} */
VALUE rb_str_buf_cat(VALUE, const char*, long);

/** @alias{rb_str_cat_cstr} */
VALUE rb_str_buf_cat2(VALUE, const char*);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to  rb_str_cat_cstr(), except  it additionally assumes  the source
 * string be a NUL terminated ASCII string.
 *
 * @param[out]  dst           Destination object.
 * @param[in]   src           Source string.
 * @exception   rb_eArgError  Result string too big.
 * @return      The passed `dst`.
 * @pre         `dst` must not be any arbitrary object except ::RString.
 * @pre         `src` must be a NUL terminated ASCII string.
 * @post        `dst`  has  the  contents  of  `src`  appended,  with  encoding
 *              converted into `dst`'s one, into the end of `dst`.
 */
VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src);

/**
 * Try converting an  object to its stringised representation  using its `to_s`
 * method, if  any.  If  there is  no such thing,  it resorts  to rb_any_to_s()
 * output.
 *
 * @param[in]  obj  Arbitrary ruby object to stringise.
 * @return     An instance of ::rb_cString.
 */
VALUE rb_obj_as_string(VALUE obj);

/**
 * Try converting an object to its stringised representation using its `to_str`
 * method, if any.  If there is no such thing, returns ::RUBY_Qnil.
 *
 * @param[in]  obj            Arbitrary ruby object to stringise.
 * @exception  rb_eTypeError  `obj.to_str` returned something non-String.
 * @retval     RUBY_Qnil      No conversion from obj to String defined.
 * @return     otherwise      Stringised representation of `obj`.
 * @see        rb_io_check_io
 * @see        rb_check_array_type
 * @see        rb_check_hash_type
 */
VALUE rb_check_string_type(VALUE obj);

/**
 * Asserts that  the given  string's encoding is  (Ruby's definition  of) ASCII
 * compatible.
 *
 * @param[in]  obj                 An instance of ::rb_cString.
 * @exception  rb_eEncCompatError  `obj` is ASCII incompatible.
 *
 * @internal
 *
 * @shyouhei doesn't know if this is an  Easter egg or an official feature, but
 * this function  can in fact take  non-strings such as Symbols,  Regexps, IOs,
 * etc.  However if something unsupported is  passed, it causes SEGV.  It seems
 * the feature is kind of untested.
 */
void rb_must_asciicompat(VALUE obj);

/**
 * Duplicates a string.
 *
 * @param[in]  str  String in question to duplicate.
 * @return     A duplicated new instance.
 * @pre        `str` must be of ::RString.
 */
VALUE rb_str_dup(VALUE str);

/**
 * I guess there  is no use case  of this function in  extension libraries, but
 * this is  a routine identical  to rb_str_dup(),  except it always  creates an
 * instance of ::rb_cString regardless of the given object's class.  This makes
 * the most sense when the passed string is formerly hidden by rb_obj_hide().
 *
 * @param[in]  str  A string, possibly hidden.
 * @return     A duplicated new instance of ::rb_cString.
 */
VALUE rb_str_resurrect(VALUE str);

/**
 * Obtains a "temporary  lock" of the string.  This  advisory locking mechanism
 * prevents other  cooperating threads from  tampering the receiver.   The same
 * thing could be done via freeze mechanism,  but this one can also be unlocked
 * using rb_str_unlocktmp().
 *
 * @param[out]  str               String to lock.
 * @exception   rb_eRuntimeError  `str` already locked.
 * @return      The given string.
 * @post        The string is locked.
 */
VALUE rb_str_locktmp(VALUE str);

/**
 * Releases a lock formerly obtained by rb_str_locktmp().
 *
 * @param[out]  str               String to unlock.
 * @exception   rb_eRuntimeError  `str` already unlocked.
 * @return      The given string.
 * @post        The string is locked.
 */
VALUE rb_str_unlocktmp(VALUE str);

/** @alias{rb_str_new_frozen} */
VALUE rb_str_dup_frozen(VALUE);

/** @alias{rb_str_new_frozen} */
#define rb_str_dup_frozen rb_str_new_frozen

/**
 * Generates a new string, concatenating the former to the latter.  It can also
 * be seen as a routine identical  to rb_str_append(), except it doesn't tamper
 * the passed strings to create a new one instead.
 *
 * @param[in]  lhs                 Source string #1.
 * @param[in]  rhs                 Source string #2.
 * @exception  rb_eEncCompatError  Can't mix the encodings.
 * @exception  rb_eArgError        Result string too big.
 * @return     A new string containing `rhs` concatenated to `lhs`.
 * @pre        Both objects must not be any arbitrary objects except ::RString.
 * @note       This  operation  doesn't commute.   Don't  get  confused by  the
 *             "plus"  terminology.   For  historical reasons  there  are  some
 *             noncommutative `+`s in Ruby.  This is one of such things.  There
 *             has been a long discussion around `+`s in programming languages.
 */
VALUE rb_str_plus(VALUE lhs, VALUE rhs);

/**
 * Repetition of a string.
 *
 * @param[in]  str           String to repeat.
 * @param[in]  num           Count, something numeric.
 * @exception  rb_eArgError  `num` is negative.
 * @return     A new string repeating `num` times of `str`.
 */
VALUE rb_str_times(VALUE str, VALUE num);

/**
 * Byte  offset to  character offset  conversion.   This makes  sense when  the
 * receiver is in  a multibyte encoding.  The string's i-th  character does not
 * always sit at its  i-th byte.  This function scans the  contents to find the
 * character index that matches the byte  index.  Generally speaking this is an
 * `O(n)` operation.  Could be slow.
 *
 * @param[in]  str  The string to scan.
 * @param[in]  pos  Offset, in bytes.
 * @return     Offset, in characters.
 */
long rb_str_sublen(VALUE str, long pos);

/**
 * This is the implementation of two-argumented `String#slice`.
 *
 * - Returns the substring of the given `len` found in `str` at offset `beg`:
 *
 *   ```ruby
 *   'foo'[0, 2] # => "fo"
 *   'foo'[0, 0] # => ""
 *   ```
 *
 * - Counts backward from the end of `str` if `beg` is negative:
 *
 *   ```ruby
 *   'foo'[-2, 2] # => "oo"
 *   ```
 *
 * - Special case: returns a  new empty string if `beg` is  equal to the length
 *   of `str`:
 *
 *   ```ruby
 *   'foo'[3, 2] # => ""
 *   ```
 *
 * - Returns a null pointer if `beg` is out of range:
 *
 *   ```ruby
 *   'foo'[4, 2] # => nil
 *   'foo'[-4, 2] # => nil
 *   ```
 *
 * - Returns the trailing substring of `str` if `len` is large:
 *
 *   ```ruby
 *   'foo'[1, 50] # => "oo"
 *   ```
 *
 * - Returns a null pointer if `len` is negative:
 *
 *   ```ruby
 *   'foo'[0, -1] # => nil
 *   ```
 *
 * @param[in]  str        The string to slice.
 * @param[in]  beg        Requested offset of the substring.
 * @param[in]  len        Requested length of the substring.
 * @retval     RUBY_Qnil  Parameters out of range.
 * @retval     otherwise  A  new   string  whose  contents  is   the  specified
 *                        substring of `str`.
 * @pre        `str` must not be any arbitrary objects except ::RString.
 */
VALUE rb_str_substr(VALUE str, long beg, long len);

/**
 * Identical to  rb_str_substr(), except  the numbers  are interpreted  as byte
 * offsets instead of character offsets.
 *
 * @param[in]  str  The string to slice.
 * @param[in]  beg  Requested offset of the substring.
 * @param[in]  len  Requested length of the substring.
 * @return     A new string whose contents is the specified substring of `str`.
 * @pre        `str` must not be any arbitrary objects except ::RString.
 * @pre        `beg` and `len` must not point to OOB contents.
 */
VALUE rb_str_subseq(VALUE str, long beg, long len);

/**
 * Identical  to rb_str_substr(),  except it  returns a  C's string  instead of
 * Ruby's.
 *
 * @param[in]      str        The string to slice.
 * @param[in]      beg        Requested offset of the substring.
 * @param[in,out]  len        Requested length of the substring.
 * @retval         NULL       Parameters out of range.
 * @retval         otherwise  A pointer inside of `str`'s backend storage where
 *                            the specified substring exist.
 * @pre            `str` must not be any arbitrary objects except ::RString.
 * @post           `len` is updated to have the length of the return value.
 */
char *rb_str_subpos(VALUE str, long beg, long *len);

/**
 * Declares that the string is about to be modified.  This for instance let the
 * string have a dedicated backend storage.
 *
 * @param[out]  str               String about to be modified.
 * @exception   rb_eRuntimeError  `str` is `locktmp`-ed.
 * @exception   rb_eFrozenError   `str` is frozen.
 * @pre         `str` must not be any arbitrary objects except ::RString.
 * @post        Upon  successful return  the passed  string is  eligible to  be
 *              modified.
 */
void rb_str_modify(VALUE str);

/**
 * Identical to rb_str_modify(), except it additionally expands the capacity of
 * the receiver.
 *
 * @param[out]  str               Target string to modify.
 * @param[in]   capa              Additional capacity to add.
 * @exception   rb_eArgError      `capa` is negative.
 * @exception   rb_eRuntimeError  `str` is `locktmp`-ed.
 * @exception   rb_eFrozenError   `str` is frozen.
 * @pre         `str` must not be any arbitrary objects except ::RString.
 * @post        Upon successful  return the passed  string is modified  so that
 *              its capacity is increased for `capa` bytes.
 */
void rb_str_modify_expand(VALUE str, long capa);

/**
 * This is the implementation of `String#freeze`.
 *
 * @param[out]  str  Target string to freeze.
 * @return      The passed string.
 * @post        Upon successful return the passed string is frozen.
 */
VALUE rb_str_freeze(VALUE str);

/**
 * Overwrites the  length of the  string.  Typically this  is used to  shrink a
 * string that was formerly expanded.
 *
 * ```CXX
 * extern int fd;
 * auto str = rb_eval_string("'...'");
 * rb_str_modify_expand(str, BUFSIZ);
 * if (auto len = recv(fd, RSTRING_PTR(str), BUFSIZ, 0); len >= 0) {
 *     rb_str_set_len(str, len);
 * }
 * else {
 *     rb_sys_fail("recv(2)");
 * }
 * ```
 *
 * @param[out]  str               String to shrink.
 * @param[in]   len               New length of the string.
 * @exception   rb_eRuntimeError  `str` is `locktmp`-ed.
 * @exception   rb_eFrozenError   `str` is frozen.
 * @pre         `str` must not be any arbitrary objects except ::RString.
 * @post        Upon successful return `str`'s length is set to `len`.
 */
void rb_str_set_len(VALUE str, long len);

/**
 * Overwrites the length of the  string.  In contrast to rb_str_set_len(), this
 * function can also expand a string.
 *
 * @param[out]  str               String to shrink.
 * @param[in]   len               New length of the string.
 * @exception   rb_eArgError      `len` is negative.
 * @exception   rb_eRuntimeError  `str` is `locktmp`-ed.
 * @exception   rb_eFrozenError   `str` is frozen.
 * @return      The passed `str`.
 * @pre         `str` must not be any arbitrary objects except ::RString.
 * @post        Upon successful return `str` is  either expanded or shrunken to
 *              have its length be `len`.
 */
VALUE rb_str_resize(VALUE str, long len);

/**
 * Destructively appends the passed contents to the string.
 *
 * @param[out]  dst           Destination object.
 * @param[in]   src           Contents to append.
 * @param[in]   srclen        Length of `src`.
 * @exception   rb_eArgError  `srclen` is negative.
 * @return      The passed `dst`.
 * @pre         `dst` must not be any arbitrary objects except ::RString.
 * @post        `dst` has the contents of `ptr` appended.
 */
VALUE rb_str_cat(VALUE dst, const char *src, long srclen);

/**
 * Identical to rb_str_cat(), except it assumes the passed pointer is a pointer
 * to a C string.
 *
 * @param[out]  dst           Destination object.
 * @param[in]   src           Contents to append.
 * @exception   rb_eArgError  Result string too big.
 * @exception   rb_eArgError  `src` is a null pointer.
 * @return      The passed `dst`.
 * @pre         `dst` must not be any arbitrary objects except ::RString.
 * @pre         `src` must not be a null pointer.
 * @post        `dst` has the contents of `src` appended.
 */
VALUE rb_str_cat_cstr(VALUE dst, const char *src);

/** @alias{rb_str_cat_cstr} */
VALUE rb_str_cat2(VALUE, const char*);

/**
 * Identical to  rb_str_buf_append(), except  it converts  the right  hand side
 * before concatenating.
 *
 * @param[out]  dst                 Destination object.
 * @param[in]   src                 Source object.
 * @exception   rb_eEncCompatError  Can't mix the encodings.
 * @exception   rb_eArgError        Result string too big.
 * @return      The passed `dst`.
 * @pre         `dst` must not be any arbitrary objects except ::RString.
 * @post        `dst`  has  the  contents  of  `src`  appended,  with  encoding
 *              converted into `dst`'s one, into the end of `dst`.
 */
VALUE rb_str_append(VALUE dst, VALUE src);

/**
 * Identical  to  rb_str_append(), except  it  also  accepts  an integer  as  a
 * codepoint.  This resembles `String#<<`.
 *
 * @param[out]  dst                 Destination object.
 * @param[in]   src                 Source object, String or Numeric.
 * @exception   rb_eRangeError      Source numeric is out of range.
 * @exception   rb_eEncCompatError  Source string too long.
 * @exception   rb_eArgError        Result string too big.
 * @return      The passed `dst`.
 * @pre         `dst` must not be any arbitrary objects except ::RString.
 * @post        `dst`  has  the  contents  of  `src`  appended,  with  encoding
 *              converted into `dst`'s one, into the end of `dst`.
 */
VALUE rb_str_concat(VALUE dst, VALUE src);

/* random.c */

/**
 * This is a universal hash function.
 *
 * @warning    This function changes its value per process.
 * @param[in]  ptr  Target message.
 * @param[in]  len  Length of `ptr` in bytes.
 * @return     A pseudorandom number suitable for Hash's hash value.
 * @see        Aumasson,  JP., Bernstein,  D.J., "SipHash:  A Fast  Short-Input
 *             PRF",  In  proceedings  of   13th  International  Conference  on
 *             Cryptology in  India (INDOCRYPT 2012), LNCS  7668, pp.  489-508,
 *             2012.  http://doi.org/10.1007/978-3-642-34931-7_28
*/
st_index_t rb_memhash(const void *ptr, long len);

/**
 * Starts a series of hashing.  Suppose you have a struct:
 *
 * ```CXX
 * struct foo_tag {
 *     unsigned char bar;
 *     uint32_t baz;
 * };
 * ```
 *
 * It is not a  wise idea to call rb_memhash() over it,  because there could be
 * padding bits.  Instead you should explicitly iterate over each fields:
 *
 * ```CXX
 * foo_tag foo = { 0, 0, };
 * st_index_t hash = 0;
 *
 * hash = rb_hash_start(0);
 * hash = rb_hash_uint(hash, foo.bar);
 * hash = rb_hash_uint32(hash, foo.baz);
 * hash = rb_hash_end(hash);
 * ```
 *
 * @param[in]  i  Initial value.
 * @return     A hash value.
 */
st_index_t rb_hash_start(st_index_t i);

/** @alias{st_hash_uint32} */
#define rb_hash_uint32(h, i) st_hash_uint32((h), (i))

/** @alias{st_hash_uint} */
#define rb_hash_uint(h, i) st_hash_uint((h), (i))

/** @alias{st_hash_end} */
#define rb_hash_end(h) st_hash_end(h)

/* string.c */

/**
 * Calculates a hash value of a string.   This is one of the two functions that
 * constructs struct ::st_hash_type.
 *
 * @param[in]  str  An object of ::RString.
 * @return     A hash value.
 * @pre        `str` must not be any arbitrary object except ::RString.
 *
 * @internal
 *
 * Although safe to call, there must be no particular use case of this function
 * for extension libraries.  Only ruby internals must know about it.
 *
 * This is not a simple alias  of rb_memhash(), because it considers the passed
 * string's encoding as well as its contents.
 */
st_index_t rb_str_hash(VALUE str);

/**
 * Compares two  strings.  This  is one  of the  two functions  that constructs
 * struct ::st_hash_type.
 *
 * @param[in]  str1  A string.
 * @param[in]  str2  Another string.
 * @retval     1     They have identical contents, length, and encodings.
 * @retval     0     Otherwise.
 * @pre        Both   objects   must  not  be  any   arbitrary  objects  except
 *             ::RString.
 *
 * @internal
 *
 * In contrast to  rb_str_hash(), this could be handy for  comparison that only
 * concerns equality.  rb_str_cmp() returns 1, 0, -1.
 */
int rb_str_hash_cmp(VALUE str1, VALUE str2);

/**
 * Checks  if  two   strings  are  comparable  each  other   or  not.   Because
 * rb_str_cmp()  must  return  "lesser  than" or  "greater  than"  information,
 * comparing two strings needs a stricter restriction.  Both sides must be in a
 * same set of strings which have total order.  This is to check that property.
 * Intuitive it  sounds?  But they  can have different encodings.   A character
 * and another might or might not appear in the same order in their codepoints.
 * It is complicated than you think.
 *
 * @param[in]  str1  A string.
 * @param[in]  str2  Another string.
 * @retval     1     They agree on a total order.
 * @retval     0     Otherwise.
 * @pre        Both   objects   must  not  be  any   arbitrary  objects  except
 *             ::RString.
 */
int rb_str_comparable(VALUE str1, VALUE str2);

/**
 * Compares two strings, as in `strcmp(3)`.  This does not consider the current
 * locale, but considers the encodings of both sides instead.
 *
 * @param[in]  lhs  A string.
 * @param[in]  rhs  Another string.
 * @retval     -1   `lhs` is "bigger than" `rhs`.
 * @retval      1   `rhs` is "bigger than" `lhs`.
 * @retval      0    Otherwise, e.g. not comparable.
 * @pre        Both   objects   must  not  be  any   arbitrary  objects  except
 *             ::RString.
 */
int rb_str_cmp(VALUE lhs, VALUE rhs);

/**
 * Equality of two strings.
 *
 * If `str2` is not a String, it  resorts to `str2 == str1`.  Otherwise if they
 * are not comparable, returns ::RUBY_Qfalse.   Otherwise if they have the same
 * contents  and   the  length,   returns  ::RUBY_Qtrue.    Otherwise,  returns
 * ::RUBY_Qfalse.
 *
 * @param[in]  str1         A string.
 * @param[in]  str2         Another string.
 * @retval     RUBY_Qtrue   They are equal.
 * @retval     RUBY_Qfalse  They are either different, or not comparable.
 */
VALUE rb_str_equal(VALUE str1, VALUE str2);

/**
 * Shrinks the given string for the given number of bytes.
 *
 * @param[out]  str               String to squash.
 * @param[in]   len               Number of bytes to reduce.
 * @exception   rb_eRuntimeError  `str` is `locktmp`-ed.
 * @exception   rb_eFrozenError   `str` is frozen.
 * @return      The passed `str`.
 * @pre         `str` must not be any arbitrary objects except ::RString.
 * @post        `str` is shrunken.
 * @warning     Can break a multibyte character in middle.
 *
 * @internal
 *
 * What if `len` is negative?
 */
VALUE rb_str_drop_bytes(VALUE str, long len);

/**
 * Replaces some  (or all) of  the contents of the  given string.  This  is the
 * implementation of three-argumented `String#[]=`.
 *
 * @param[out]  dst               Target string to update.
 * @param[in]   beg               Offset of the affected portion.
 * @param[in]   len               Length of the affected portion.
 * @param[in]   src               Object to be assigned.
 * @exception   rb_eTypeError     `src` has no implicit conversion to String.
 * @exception   rb_eIndexError    `len` is negative, or `beg` is OOB.
 * @exception   rb_eRuntimeError  `dst` is `locktmp`-ed.
 * @exception   rb_eFrozenError   `dst` is frozen.
 * @note        Unlike rb_str_substr(), this function raises.
 * @post        A  portion of  `dst`  from  `beg` to  `len`  is the  stringised
 *              representation of `src`.  If that replacement string is not the
 *              same  length as  the portion  it  is replacing,  `dst` will  be
 *              resized accordingly.
 */
void rb_str_update(VALUE dst, long beg, long len, VALUE src);

/**
 * Replaces the contents  of the former object with the  stringised contents of
 * the latter.
 *
 * @param[out]  dst               Destination object.
 * @param[in]   src               Source object.
 * @exception   rb_eTypeError     `src` has no implicit conversion to String.
 * @exception   rb_eRuntimeError  `dst` is `locktmp`-ed.
 * @exception   rb_eFrozenError   `dst` is frozen.
 * @return      The passed `dst`.
 * @pre        `dst` must not be any arbitrary object except ::RString.
 * @post        `dst`'s  former  components  are  abandoned.  It  now  has  the
 *              identical encoding, length, and contents to `src`.
 */
VALUE rb_str_replace(VALUE dst, VALUE src);

/**
 * Generates a "readable" version of the receiver.
 *
 * @warning    The output is _insecure_.  Never feed one to `eval`.
 * @warning    The output is not always in the same encoding as the given one.
 * @warning    A  character might  or might  not be  escaped, depending  on the
 *             result encoding.
 * @param[in]  str  String to inspect.
 * @return     Its inspection, either  in default internal encoding  if any, or
 *             in default external encoding otherwise.
 * @see        rb_str_dump()
 *
 * @internal
 *
 * This is a  (silent) fix of an actual vulnerability  feeding `inspect` output
 * strings to `eval`:
 * https://github.com/hiki/hiki/commit/8771a6e25198e264a2bf9dc1c102fea2cc8ff975
 *
 * ... and its advisory:
 * http://hikiwiki.org/en/advisory20040712.html
 */
VALUE rb_str_inspect(VALUE str);

/**
 * "Inverse" of rb_eval_string().  Returns a quoted version of the string.  All
 * non-printing characters are replaced by  `\uNNNN` or `\xHH` notation and all
 * special characters are escaped.  The result string is guaranteed to render a
 * string of the same contents when passed to `eval` and friends.
 *
 * @param[in]  str               String to dump.
 * @exception  rb_eRuntimeError  Too  many  escape   sequences  causes  integer
 *                               overflow on the length of the string.
 * @return     An  US-ASCII string  that  includes all  the  necessary info  to
 *             reconstruct the original string.
 */
VALUE rb_str_dump(VALUE str);

/**
 * Divides  the  given string  based  on  the  given  delimiter.  This  is  the
 * 1-argument 0-block version of `String#split`.
 *
 * @param[in]  str            Object in question to split.
 * @param[in]  delim          Delimiter, in C string.
 * @exception  rb_eTypeError  `str` has no implicit conversion to String.
 * @exception  rb_eArgError   `delim` is a null pointer.
 * @return     An array of  strings, which are substrings of  the passed `str`.
 *             If `delim` is an empty C string (i.e. `""`), `str` is split into
 *             each characters.  If `delim` is a C string whose sole content is
 *             a whitespace (i.e.  `" "`), `str` is split  on whitespaces, with
 *             leading  and   trailing  whitespace   and  runs   of  contiguous
 *             whitespace  characters  ignored.    Otherwise,  `str`  is  split
 *             according to `delim`.
 */
VALUE rb_str_split(VALUE str, const char *delim);

/**
 * This is a ::rb_gvar_setter_t that refutes non-string assignments.
 *
 * @exception  rb_eTypeError  Passed something non-string.
 */
rb_gvar_setter_t rb_str_setter;

/* symbol.c */

/**
 * Identical  to  rb_to_symbol(),  except  it assumes  the  receiver  being  an
 * instance of ::RString.
 *
 * @param[in]  str               The name of the id.
 * @exception  rb_eRuntimeError  Too many symbols.
 * @return     A (possibly new) id whose value is the given `str`.
 * @pre        `str` must not be any arbitrary object except ::RString.
 * @note       These   days  Ruby   internally   has  two   kinds  of   symbols
 *             (static/dynamic).   Symbols created  using  this function  would
 *             become dynamic ones; i.e. would  be garbage collected.  It could
 *             be safer for you to use it than alternatives, when applicable.
 */
VALUE rb_str_intern(VALUE str);

/* string.c */

/**
 * This is an rb_sym2str() + rb_str_dup() combo.
 *
 * @param[in]  sym  A symbol to query.
 * @return     A string duplicating the symbol's backend storage.
 *
 * @internal
 *
 * This function  causes SEGV  when the  passed value is  a static  symbol that
 * doesn't exist.
 */
VALUE rb_sym_to_s(VALUE sym);

/**
 * Counts the  number of characters (not  bytes) that are stored  inside of the
 * given string.  This  of course depends on its encoding.   Also this function
 * generally runs  in O(n), because  for instance you  have to scan  the entire
 * string to know how many characters are there in a UTF-8 string.
 *
 * @param[in]  str  Target string to query.
 * @return     Its number of characters.
 */
long rb_str_strlen(VALUE str);

/**
 * Identical to rb_str_strlen(), except it returns the value in ::rb_cInteger.
 *
 * @param[in]  str  Target string to query.
 * @return     Its number of characters.
 */
VALUE rb_str_length(VALUE);

/**
 * "Inverse" of rb_str_sublen().  This function  scans the contents to find the
 * byte index that matches the character  index.  Generally speaking this is an
 * `O(n)` operation.  Could be slow.
 *
 * @param[in]  str  The string to scan.
 * @param[in]  pos  Offset, in characters.
 * @return     Offset, in bytes.
 */
long rb_str_offset(VALUE str, long pos);

RBIMPL_ATTR_PURE()
/**
 * Queries the capacity of the given string.
 *
 * @see        ::RString::capa
 * @param[in]  str  String in question.
 * @return     Its capacity.
 */
size_t rb_str_capacity(VALUE str);

/**
 * Shortens `str` and adds three dots, an  ellipsis, if it is longer than `len`
 * characters.  The length of the returned string in characters is less than or
 * equal to `len`.  If the length of `str` is less than or equal `len`, returns
 * `str` itself.   The encoding of returned  string is equal to  that of passed
 * one.  The class of returned string is equal to that of passed one.
 *
 * @param[in]  str             The string to shorten.
 * @param[in]  len             The maximum string length.
 * @exception  rb_eIndexError  `len` is negative.
 * @retval     str             No need to add ellipsis.
 * @retval     otherwise       A new, shortened string.
 * @note       The length is counted in characters.
 */
VALUE rb_str_ellipsize(VALUE str, long len);

/**
 * "Cleanses" the string.   A string has its encoding and  its contents.  They,
 * in practice,  do not  always fit.  There  are strings in  the wild  that are
 * "broken"; include bit  patterns that are not allowed by  its encoding.  That
 * can  happen  when  a  user  copy&pasted something  bad,  network  input  got
 * clobbered by a middleman, cosmic rays hit the physical memory, and many more
 * occasions.  This function takes such strings, and fills the "broken" portion
 * with the passed replacement bit pattern.
 *
 * This function also takes a ruby block.  That is a neat way to do things, but
 * can be  annoying when the  caller function want to  use a block  for another
 * purpose.
 *
 * @param[in]  str                 Target string to scrub.
 * @param[in]  repl                Replacement  string.  When  it is  a string,
 *                                 this function  takes that as  a replacement.
 *                                 When it is  ::RUBY_Qnil, this function tries
 *                                 to  yield a  block  (if any)  and takes  its
 *                                 evaluated value  as a replacement.   In case
 *                                 of   ::RUBY_Qnil  without   a  block,   this
 *                                 function takes  an encoding-specific default
 *                                 character (`U+FFFD`, for instance) as a last
 *                                 resort.
 * @exception  rb_eTypeError       `repl` is neither string nor nil.
 * @exception  rb_eArgError        `repl` itself is broken.
 * @exception  rb_eEncCompatError  `repl` and `str` are incompatible.
 * @retval     RUBY_Qnil           `str` is already clean.
 * @retval     otherwise           A new, clean string.
 */
VALUE rb_str_scrub(VALUE str, VALUE repl);

/**
 * Searches for  the "successor"  of a string.   This function  is complicated!
 * This is  the only function in  the entire ruby  API (either C or  Ruby) that
 * generates a string out of thin air.  First, the successor to an empty string
 * is a new empty string:
 *
 * ```ruby
 * ''.succ # => ""
 * ```
 *
 * Otherwise  the successor  is  calculated by  "incrementing" characters.  The
 * first character to  be incremented is the rightmost alphanumeric:  or, if no
 * alphanumerics, the rightmost character:
 *
 * ```ruby
 * 'THX1138'.succ # => "THX1139"
 * '<<koala>>'.succ # => "<<koalb>>"
 * '***'.succ # => '**+'
 * ```
 *
 * The  successor to  a digit  is another  digit, "carrying"  to the  next-left
 * character for  a "rollover"  from 9  to 0, and  prepending another  digit if
 * necessary:
 *
 * ```ruby
 * '00'.succ # => "01"
 * '09'.succ # => "10"
 * '99'.succ # => "100"
 * '-9'.succ # => "-10"
 * ```
 *
 * The successor to  a letter is another  letter of the same  case, carrying to
 * the next-left  character for  a rollover,  and prepending  another same-case
 * letter if necessary:
 *
 * ```ruby
 * 'aa'.succ # => "ab"
 * 'az'.succ # => "ba"
 * 'zz'.succ # => "aaa"
 * 'AA'.succ # => "AB"
 * 'AZ'.succ # => "BA"
 * 'ZZ'.succ # => "AAA"
 * ```
 *
 * The successor to  a non-alphanumeric character is the next  character in the
 * underlying  character set's  collating sequence,  carrying to  the next-left
 * character for a rollover, and prepending another character if necessary:
 *
 * ```ruby
 * s = "\u03A1"
 * s.succ # => "\u03A3"  # There is no such thing like \u03A2.
 * s = 255.chr * 3
 * s # => "\xFF\xFF\xFF"
 * s.succ # => "\x01\x00\x00\x00"
 * ```
 *
 * Carrying can occur between and among mixtures of alphanumeric characters:
 *
 * ```ruby
 * s = 'zz99zz99'
 * s.succ # => "aaa00aa00"
 * s = '99zz99zz'
 * s.succ # => "100aa00aa"
 * s = '1.9.9'
 * s.succ # => "2.0.0"
 * ```
 *
 * @param[in]  orig  Predecessor string.
 * @return     Successor string.
 */
VALUE rb_str_succ(VALUE orig);

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  str  A C string.
 * @return     `strlen`, casted to `long`.
 */
static inline long
rbimpl_strlen(const char *str)
{
    return RBIMPL_CAST((long)strlen(str));
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  str  A C string literal.
 * @return     Corresponding Ruby string.
 */
static inline VALUE
rbimpl_str_new_cstr(const char *str)
{
    long len = rbimpl_strlen(str);
    return rb_str_new_static(str, len);
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  str  A C string literal.
 * @return     Corresponding Ruby string.
 */
static inline VALUE
rbimpl_usascii_str_new_cstr(const char *str)
{
    long len = rbimpl_strlen(str);
    return rb_usascii_str_new_static(str, len);
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  str  A C string literal.
 * @return     Corresponding Ruby string.
 */
static inline VALUE
rbimpl_utf8_str_new_cstr(const char *str)
{
    long len = rbimpl_strlen(str);
    return rb_utf8_str_new_static(str, len);
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  str  A C string literal.
 * @return     Corresponding Ruby string.
 */
static inline VALUE
rbimpl_external_str_new_cstr(const char *str)
{
    long len = rbimpl_strlen(str);
    return rb_external_str_new(str, len);
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  str  A C string literal.
 * @return     Corresponding Ruby string.
 */
static inline VALUE
rbimpl_locale_str_new_cstr(const char *str)
{
    long len = rbimpl_strlen(str);
    return rb_locale_str_new(str, len);
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  str  A C string literal.
 * @return     Corresponding Ruby string.
 */
static inline VALUE
rbimpl_str_buf_new_cstr(const char *str)
{
    long len = rbimpl_strlen(str);
    VALUE buf = rb_str_buf_new(len);
    return rb_str_buf_cat(buf, str, len);
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[out]  buf  A string buffer.
 * @param[in]   str  A C string literal.
 * @return      `buf` itself.
 */
static inline VALUE
rbimpl_str_cat_cstr(VALUE buf, const char *str)
{
    long len = rbimpl_strlen(str);
    return rb_str_cat(buf, str, len);
}

RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail.  Don't bother.
 *
 * @param[in]  exc  An exception class.
 * @param[in]  str  A C string literal.
 * @return     An instance of `exc`.
 */
static inline VALUE
rbimpl_exc_new_cstr(VALUE exc, const char *str)
{
    long len = rbimpl_strlen(str);
    return rb_exc_new(exc, str, len);
}

/**
 * Allocates an instance of ::rb_cString.
 *
 * @param[in]  str             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An  instance   of  ::rb_cString,  of  `len`   bytes  length,  of
 *             "binary" encoding, whose contents are verbatim copy of `str`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `str`.
 */
#define rb_str_new(str, len)                    \
    ((RBIMPL_CONSTANT_P(str) &&                 \
      RBIMPL_CONSTANT_P(len) ?                  \
      rb_str_new_static      :                  \
      rb_str_new) ((str), (len)))

/**
 * Identical to #rb_str_new, except it assumes  the passed pointer is a pointer
 * to a C string.
 *
 * @param[in]  str             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An  instance  of  ::rb_cString,   of  "binary"  encoding,  whose
 *             contents are verbatim copy of `str`.
 * @pre        `str` must not be a null pointer.
 */
#define rb_str_new_cstr(str)                    \
    ((RBIMPL_CONSTANT_P(str) ?                  \
      rbimpl_str_new_cstr    :                  \
      rb_str_new_cstr) (str))

/**
 * Identical  to  #rb_str_new, except  it  generates  a  string of  "US  ASCII"
 * encoding.  This  is different from  rb_external_str_new(), not only  for the
 * output encoding, but also it doesn't convert the contents.
 *
 * @param[in]  str             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `str`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An  instance   of  ::rb_cString,  of  `len`   bytes  length,  of
 *             "US ASCII" encoding, whose contents are verbatim copy of `str`.
 */
#define rb_usascii_str_new(str, len)            \
    ((RBIMPL_CONSTANT_P(str)    &&              \
      RBIMPL_CONSTANT_P(len)    ?               \
      rb_usascii_str_new_static :               \
      rb_usascii_str_new) ((str), (len)))

/**
 * Identical to #rb_str_new, except it generates a string of "UTF-8" encoding.
 *
 * @param[in]  str             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `str`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An  instance   of  ::rb_cString,  of  `len`   bytes  length,  of
 *             "UTF-8" encoding, whose contents are verbatim copy of `str`.
 */
#define rb_utf8_str_new(str, len)               \
    ((RBIMPL_CONSTANT_P(str) &&                 \
      RBIMPL_CONSTANT_P(len) ?                  \
      rb_utf8_str_new_static :                  \
      rb_utf8_str_new) ((str), (len)))

/**
 * Identical to  #rb_str_new_cstr, except it  generates a string of  "US ASCII"
 * encoding.    It   can   also   be   seen   as   a   routine   Identical   to
 * #rb_usascii_str_new, except it assumes the passed  pointer is a pointer to a
 * C string.
 *
 * @param[in]  str             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An  instance  of ::rb_cString,  of  "US  ASCII" encoding,  whose
 *             contents are verbatim copy of `str`.
 * @pre        `str` must not be a null pointer.
 */
#define rb_usascii_str_new_cstr(str)            \
    ((RBIMPL_CONSTANT_P(str)      ?             \
      rbimpl_usascii_str_new_cstr :             \
      rb_usascii_str_new_cstr) (str))

/**
 * Identical  to #rb_str_new_cstr,  except  it generates  a  string of  "UTF-8"
 * encoding.  It can  also be seen as a routine  Identical to #rb_utf8_str_new,
 * except it assumes the passed pointer is a pointer to a C string.
 *
 * @param[in]  str             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An instance of ::rb_cString, of "UTF-8" encoding, whose contents
 *             are verbatim copy of `str`.
 * @pre        `str` must not be a null pointer.
 */
#define rb_utf8_str_new_cstr(str)               \
    ((RBIMPL_CONSTANT_P(str)   ?                \
      rbimpl_utf8_str_new_cstr :                \
      rb_utf8_str_new_cstr) (str))

/**
 * Identical  to #rb_str_new_cstr,  except it  generates a  string of  "default
 * external" encoding.
 *
 * @param[in]  str             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default internal"  to "default external" is  fully defined over
 *             the  given  contents, then  the  return  value  is a  string  of
 *             "default external"  encoding, whose  contents are  the converted
 *             ones.  Otherwise the string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 * @pre        `str` must not be a null pointer.
 */
#define rb_external_str_new_cstr(str)           \
    ((RBIMPL_CONSTANT_P(str)       ?            \
      rbimpl_external_str_new_cstr :            \
      rb_external_str_new_cstr) (str))

/**
 * Identical  to #rb_external_str_new_cstr,  except  it generates  a string  of
 * "locale" encoding instead of "default external".
 *
 * @param[in]  str             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default internal" to  "locale" is fully defined  over the given
 *             contents,  then  the  return  value  is  a  string  of  "locale"
 *             encoding, whose contents are  the converted ones.  Otherwise the
 *             string is a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 * @pre        `str` must not be a null pointer.
 */
#define rb_locale_str_new_cstr(str)             \
    ((RBIMPL_CONSTANT_P(str)     ?              \
      rbimpl_locale_str_new_cstr :              \
      rb_locale_str_new_cstr) (str))

/**
 * Identical to #rb_str_new_cstr, except done differently.
 *
 * @param[in]  str             A C string.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An  instance  of  ::rb_cString,   of  "binary"  encoding,  whose
 *             contents are verbatim copy of `str`.
 * @pre        `str` must not be a null pointer.
 */
#define rb_str_buf_new_cstr(str)                \
    ((RBIMPL_CONSTANT_P(str)  ?                 \
      rbimpl_str_buf_new_cstr :                 \
      rb_str_buf_new_cstr) (str))

/**
 * Identical to rb_str_cat(), except it assumes the passed pointer is a pointer
 * to a C string.
 *
 * @param[out]  buf                 Destination object.
 * @param[in]   str                 Contents to append.
 * @exception   rb_eArgError        Result string too big.
 * @return      The passed `buf`.
 * @pre         `buf` must not be any arbitrary objects except ::RString.
 * @pre         `str` must not be a null pointer.
 * @post        `buf` has the contents of `str` appended.
 */
#define rb_str_cat_cstr(buf, str)               \
    ((RBIMPL_CONSTANT_P(str) ?                  \
      rbimpl_str_cat_cstr    :                  \
      rb_str_cat_cstr) ((buf), (str)))

/**
 * Identical to rb_exc_new(), except it assumes the passed pointer is a pointer
 * to a C string.
 *
 * @param[out]  exc  A subclass of ::rb_eException.
 * @param[in]   str  Message to raise.
 * @return      An instance of `exc` whose message is `str`.
 * @pre         `str` must not be a null pointer.
 */
#define rb_exc_new_cstr(exc, str)               \
    ((RBIMPL_CONSTANT_P(str) ?                  \
      rbimpl_exc_new_cstr    :                  \
      rb_exc_new_cstr) ((exc), (str)))

#define rb_str_new2 rb_str_new_cstr                  /**< @old{rb_str_new_cstr} */
#define rb_str_new3 rb_str_new_shared                /**< @old{rb_str_new_shared} */
#define rb_str_new4 rb_str_new_frozen                /**< @old{rb_str_new_frozen} */
#define rb_str_new5 rb_str_new_with_class            /**< @old{rb_str_new_with_class} */
#define rb_str_buf_new2 rb_str_buf_new_cstr          /**< @old{rb_str_buf_new_cstr} */
#define rb_usascii_str_new2 rb_usascii_str_new_cstr  /**< @old{rb_usascii_str_new_cstr} */
#define rb_str_buf_cat rb_str_cat                    /**< @alias{rb_str_cat} */
#define rb_str_buf_cat2 rb_str_cat_cstr              /**< @old{rb_usascii_str_new_cstr} */
#define rb_str_cat2 rb_str_cat_cstr                  /**< @old{rb_str_cat_cstr} */

/**
 * Length of a string literal.
 *
 * @param[in]  str  A C String literal.
 * @return     An  integer constant  expression that  represents the  number of
 *             `str`'s elements, not including the terminating NUL character.
 */
#define rb_strlen_lit(str) ((sizeof(str "") / sizeof(str ""[0])) - 1)

/**
 * Identical to rb_str_new_static(), except it cannot take string variables.
 *
 * @param[in]  str  A C string literal.
 * @pre        `str` must not be a variable.
 * @return     An instance of ::rb_cString, of "binary" encoding, whose backend
 *             storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 */
#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str))

/**
 * Identical  to  rb_usascii_str_new_static(),  except it  cannot  take  string
 * variables.
 *
 * @param[in]  str           A C string literal.
 * @pre        `str` must not be a variable.
 * @return     An  instance  of ::rb_cString,  of  "US  ASCII" encoding,  whose
 *             backend storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 */
#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str))

/**
 * Identical  to   rb_utf8_str_new_static(),  except  it  cannot   take  string
 * variables.
 *
 * @param[in]  str           A C string literal.
 * @pre        `str` must not be a variable.
 * @return     An instance of ::rb_cString,  of "UTF-8" encoding, whose backend
 *             storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 */
#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str))

/**
 * Identical  to   rb_enc_str_new_static(),  except   it  cannot   take  string
 * variables.
 *
 * @param[in]  str           A C string literal.
 * @param[in]  enc           A pointer to an encoding.
 * @pre        `str` must not be a variable.
 * @return     An  instance  of ::rb_cString,  of  the  passed encoding,  whose
 *             backend storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 */
#define rb_enc_str_new_lit(str, enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc))

#define rb_str_new_literal(str) rb_str_new_lit(str)                    /**< @alias{rb_str_new_lit} */
#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str)    /**< @alias{rb_usascii_str_new_lit} */
#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str)          /**< @alias{rb_utf8_str_new_lit} */
#define rb_enc_str_new_literal(str, enc) rb_enc_str_new_lit(str, enc)  /**< @alias{rb_enc_str_new_lit} */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_STRING_H */
PK*J[ �i�!�!#include/ruby/internal/intern/eval.hnu�[���#ifndef  RBIMPL_INTERN_EVAL_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define  RBIMPL_INTERN_EVAL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Pre-1.9 era evaluator APIs (now considered miscellaneous).
 */
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* eval.c */
RBIMPL_ATTR_NORETURN()
/**
 * Identical to rb_raise(), except it  raises the passed exception instance as-
 * is instead of creating new one.
 *
 * @param[in]  exc            An instance of a subclass of ::rb_eException.
 * @exception  exc            What is passed.
 * @exception  rb_eTypeError  `exc` is not an exception.
 * @note       It never returns.
 *
 * @internal
 *
 * Wellll  actually, it  can  take more  than what  is  described above.   This
 * function tries  to call `exception`  method of  the passed object.   If that
 * function returns an exception object that is used instead.
 */
void rb_exc_raise(VALUE exc);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to rb_fatal(), except it  raises the passed exception instance as-
 * is instead of creating new one.
 *
 * @param[in]  exc  An instance of a subclass of ::rb_eException.
 * @exception  exc  What is passed.
 * @note       It never returns.
 *
 * @internal
 *
 * You know  what...?  Using this API  you can make arbitrary  exceptions, like
 * `RuntimeError`, that doesn't  interface with `rescue` clause.   This is very
 * confusing.
 */
void rb_exc_fatal(VALUE exc);

/* process.c */

RBIMPL_ATTR_NORETURN()
/**
 * Identical to rb_exit(), except how arguments are passed.
 *
 * @param[in]  argc            Number of objects of `argv`.
 * @param[in]  argv            Contains at most one of the following:
 *                               - ::RUBY_Qtrue - means `EXIT_SUCCESS`.
 *                               - ::RUBY_Qfalse - means `EXIT_FAILURE`.
 *                               - Numerical value - takes that value.
 * @exception  rb_eArgError    Wrong `argc`.
 * @exception  rb_eSystemExit  Exception representing the exit status.
 * @note       It never returns.
 */
VALUE rb_f_exit(int argc, const VALUE *argv);

RBIMPL_ATTR_NORETURN()
/**
 * This is  similar to rb_f_exit().   In fact  on some situation  it internally
 * calls rb_exit().  But can be very esoteric on occasions.
 *
 * It takes up to one argument.  If  an argument is passed, it tries to display
 * that.   Otherwise if  there is  `$!`, displays  that exception  instead.  It
 * finally raise ::rb_eSystemExit in both cases.
 *
 * @param[in]  argc            Number of objects of `argv`.
 * @param[in]  argv            Contains at most one string-ish object.
 * @exception  rb_eArgError    Wrong `argc`.
 * @exception  rb_eTypeError   No conversion from `argv[0]` to String.
 * @exception  rb_eSystemExit  Exception representing `EXIT_FAILURE`.
 * @note       It never returns.
 */
VALUE rb_f_abort(int argc, const VALUE *argv);

/* eval.c*/

RBIMPL_ATTR_NORETURN()
/**
 * Raises an instance of ::rb_eInterrupt.
 *
 * @exception  rb_eInterrupt  Always raises this exception.
 * @note       It never returns.
 */
void rb_interrupt(void);

/**
 * Queries the  name of the  Ruby level method  that is calling  this function.
 * The "name" in this context is the one assigned to the function for the first
 * time (note that methods can have multiple names via aliases).
 *
 * @retval  0          There is no method (e.g. toplevel context).
 * @retval  otherwise  The name of the current method.
 */
ID rb_frame_this_func(void);

RBIMPL_ATTR_NORETURN()
/**
 * This function  is to re-throw  global escapes.  Such global  escapes include
 * exceptions, `throw`, `break`, for example.
 *
 * It makes  sense only  when used  in conjunction  with "protect"  series APIs
 * e.g.  rb_protect(),  rb_load_protect(), rb_eval_string_protect(),  etc.   In
 * case  these functions  experience  global escapes,  they  fill their  opaque
 * `state` return  buffer.  You  can ignore  such escapes.   But if  you decide
 * otherwise, you have to somehow escape globally again.  This function is used
 * for that purpose.
 *
 * @param[in]  state  Opaque state of execution.
 * @note       It never returns.
 *
 * @internal
 *
 * Though  not  a  part  of  our  public  API,  `state`  is  in  fact  an  enum
 * ruby_tag_type.  You can see the potential values by looking at vm_core.h.
 */
void rb_jump_tag(int state);

/**
 * Calls `initialize`  method of the  passed object with the  passed arguments.
 * It also forwards the implicitly passed block to the method.
 *
 * @param[in]  obj            Receiver object.
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Passed as-is to `obj.initialize`.
 * @exception  rb_eException  Any exceptions happen inside.
 */
void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv);

/**
 * Identical to  rb_obj_call_init(), except you  can specify how to  handle the
 * last element of the given array.
 *
 * @param[in]  obj                Receiver object.
 * @param[in]  argc               Number of objects of `argv`.
 * @param[in]  argv               Passed as-is to `obj.initialize`.
 * @param[in]  kw_splat           Handling of keyword parameters:
 *   - RB_NO_KEYWORDS             `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS           `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS    it depends if there is a passed block.
 * @exception  rb_eNoMethodError  No such method.
 * @exception  rb_eException      Any exceptions happen inside.
 */
void rb_obj_call_init_kw(VALUE, int, const VALUE*, int);

/**
 * Identical to rb_frame_this_func(), except it  returns the named used to call
 * the method.
 *
 * @retval  0          There is no method (e.g. toplevel context).
 * @retval  otherwise  The name of the current method.
 */
ID rb_frame_callee(void);

/**
 * Constructs  an exception  object from  the list  of arguments,  in a  manner
 * similar to Ruby's `raise`.  This function can take:
 *
 *   - No arguments  at all,  i.e. `argc  == 0`.   This is  not a  failure.  It
 *     returns ::RUBY_Qnil then.
 *
 *   - An  object, which  is  an instance  of ::rb_cString.   In  this case  an
 *     instance of  ::rb_eRuntimeError whose  message is  the passed  string is
 *     created then returned.
 *
 *   - An  object, which  responds to  `exception` method,  and optionally  its
 *     argument,  and  optionally  its  backtrace.  For  example  instances  of
 *     subclasses of ::rb_eException  have this method.  What  is returned from
 *     the method is returned.
 *
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           0 up to 3 objects.
 * @exception  rb_eArgError   Wrong `argc`.
 * @exception  rb_eTypeError  `argv[0].exception` returned non-exception.
 * @return     An instance of a subclass of ::rb_eException.
 *
 * @internal
 *
 * Historically  this was  _the_  way  `raise` converted  its  arguments to  an
 * exception.  However they diverged.
 */
VALUE rb_make_exception(int argc, const VALUE *argv);

/* eval_jump.c */

/**
 * Registers a function  that shall run on process  exit.  Registered functions
 * run in  reverse-chronological order,  mixed with  syntactic `END`  block and
 * `Kernel#at_exit`.
 *
 * @param[in]  func  Function to run at process exit.
 * @param[in]  arg   Passed as-is to `func`.
 */
void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_EVAL_H */
PK*J[���dDD&include/ruby/internal/intern/sprintf.hnu�[���#ifndef RBIMPL_INTERN_SPRINTF_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_SPRINTF_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Our own private `printf(3)`.
 */
#include "ruby/internal/attr/format.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* sprintf.c */

/**
 * Identical to rb_str_format(), except how the arguments are arranged.
 *
 * @param[in]  argc  Number of objects of `argv`.
 * @param[in]  argv  A format string, followed by its arguments.
 * @return     A rendered new instance of ::rb_cString.
 *
 * @internal
 *
 * You can safely pass NULL to `argv`.  Doesn't make any sense though.
 */
VALUE rb_f_sprintf(int argc, const VALUE *argv);

RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
/**
 * Ruby's extended `sprintf(3)`.   We ended up reinventing  the entire `printf`
 * business because we  don't want to depend on  locales.  OS-provided `printf`
 * routines  might or  might  not,  which caused  instabilities  of the  result
 * strings.
 *
 * The format  sequence is a  mixture of  format specifiers and  other verbatim
 * contents.  Each  format specifier starts with  a `%`, and has  the following
 * structure:
 *
 * ```
 * %[flags][width][.precision][length]conversion
 * ```
 *
 * This  function  supports  flags  of   ` `, `#`,  `+`,  `-`,  `0`,  width  of
 * non-negative  decimal integer  and  `*`, precision  of non-negative  decimal
 * integers and `*`, length of `L`,  `h`, `t`, `z`, `l`, `ll`, `q`, conversions
 * of `A`,  `D`, `E`, `G`, `O`,  `U`, `X`, `a`,  `c`, `d`, `e`, `f`,  `g`, `i`,
 * `n`, `o`, `p`, `s`, `u`, `x`, and `%`.  In case of `_WIN32` it also supports
 * `I`.   And additionally,  it  supports magical  `PRIsVALUE`  macro that  can
 * stringise arbitrary Ruby objects:
 *
 * ```CXX
 * rb_sprintf("|%"PRIsVALUE"|", RUBY_Qtrue); // => "|true|"
 * rb_sprintf("%+"PRIsVALUE, rb_stdin);      // => "#<IO:<STDIN>>"
 * ```
 *
 * @param[in]  fmt  A `printf`-like format specifier.
 * @param[in]  ...  Variadic number of contents to format.
 * @return     A rendered new instance of ::rb_cString.
 *
 * @internal
 *
 * :FIXME:  We can improve this document.
 */
VALUE rb_sprintf(const char *fmt, ...);

RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 0)
/**
 * Identical to rb_sprintf(), except it takes a `va_list`.
 *
 * @param[in]  fmt  A `printf`-like format specifier.
 * @param[in]  ap   Contents to format.
 * @return     A rendered new instance of ::rb_cString.
 */
VALUE rb_vsprintf(const char *fmt, va_list ap);

RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Identical to  rb_sprintf(), except  it renders the  output to  the specified
 * object rather than creating a new one.
 *
 * @param[out]  dst            String to modify.
 * @param[in]   fmt            A `printf`-like format specifier.
 * @param[in]   ...            Variadic number of contents to format.
 * @exception   rb_eTypeError  `dst` is not a String.
 * @return      Passed `dst`.
 * @post        `dst` has the rendered output appended to its end.
 */
VALUE rb_str_catf(VALUE dst, const char *fmt, ...);

RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0)
/**
 * Identical to  rb_str_catf(), except it  takes a  `va_list`.  It can  also be
 * seen as a  routine identical to rb_vsprintf(), except it  renders the output
 * to the specified object rather than creating a new one.
 *
 * @param[out]  dst            String to modify.
 * @param[in]   fmt            A `printf`-like format specifier.
 * @param[in]   ap             Contents to format.
 * @exception   rb_eTypeError  `dst` is not a String.
 * @return      Passed `dst`.
 * @post        `dst` has the rendered output appended to its end.
 */
VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap);

/**
 * Formats a string.
 *
 * Returns  the string  resulting from  applying `fmt`  to `argv`.   The format
 * sequence  is a  mixture of  format specifiers  and other  verbatim contents.
 * Each format specifier starts with a `%`, and has the following structure:
 *
 * ```
 * %[flags][width][.precision]type
 * ```
 *
 * ...  which is  different from  that of  rb_sprintf().  Because  ruby has  no
 * `short` or `long`, there is no way to specify a "length" of an argument.
 *
 * This function  supports flags  of ` `,  `#`, `+`, `-`,  `<>`, `{}`,  with of
 * non-negative decimal integer and `$`, `*`, precision of non-negative decimal
 * integer and `$`, `*`,  type of `A`, `B`, `E`, `G`, `X`,  `a`, `b`, `c`, `d`,
 * `e`,  `f`, `g`,  `i`, `o`,  `p`,  `s`, `u`,  `x`,  `%`.  This  list is  also
 * (largely the same but) not identical to that of rb_sprintf().
 *
 * @param[in]  argc           Number of objects in `argv`.
 * @param[in]  argv           Format arguments.
 * @param[in]  fmt            A printf-like format specifier.
 * @exception  rb_eTypeError  `fmt` is not a string.
 * @exception  rb_eArgError   Failed to parse `fmt`.
 * @return     A rendered new instance of ::rb_cString.
 * @note       Everything it takes must be Ruby objects.
 *
 */
VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_SPRINTF_H */
PK*J[����/include/ruby/internal/intern/select/largesize.hnu�[���#ifndef RBIMPL_INTERN_SELECT_LARGESIZE_H             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_SELECT_LARGESIZE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs to provide ::rb_fd_select().
 *
 * Several Unix  platforms support file  descriptors bigger than  FD_SETSIZE in
 * `select(2)` system call.
 *
 * - Linux 2.2.12 (?)
 *
 * - NetBSD 1.2 (src/sys/kern/sys_generic.c:1.25)
 *   `select(2)` documents how to allocate fd_set dynamically.
 *   http://netbsd.gw.com/cgi-bin/man-cgi?select++NetBSD-4.0
 *
 * - FreeBSD 2.2 (src/sys/kern/sys_generic.c:1.19)
 *
 * - OpenBSD 2.0 (src/sys/kern/sys_generic.c:1.4)
 *   `select(2)` documents how to allocate fd_set dynamically.
 *   http://www.openbsd.org/cgi-bin/man.cgi?query=select&manpath=OpenBSD+4.4
 *
 * - Solaris 8 has `select_large_fdset`
 *
 * - Mac OS X 10.7 (Lion)
 *   `select(2)` returns `EINVAL`  if `nfds` is greater  than `FD_SET_SIZE` and
 *   `_DARWIN_UNLIMITED_SELECT` (or `_DARWIN_C_SOURCE`) isn't defined.
 *   http://developer.apple.com/library/mac/#releasenotes/Darwin/SymbolVariantsRelNotes/_index.html
 *
 * When `fd_set` is not  big enough to hold big file  descriptors, it should be
 * allocated dynamically.   Note that  this assumes  `fd_set` is  structured as
 * bitmap.
 *
 * `rb_fd_init` allocates the memory.
 * `rb_fd_term` frees the memory.
 * `rb_fd_set` may re-allocate bitmap.
 *
 * So `rb_fd_set` doesn't reject file descriptors bigger than `FD_SETSIZE`.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"

/**@cond INTERNAL_MACRO */
#define rb_fd_ptr rb_fd_ptr
#define rb_fd_max rb_fd_max
/** @endcond */

struct timeval;

/**
 * The data  structure which wraps the  fd_set bitmap used by  select(2).  This
 * allows Ruby to use FD sets  larger than that allowed by historic limitations
 * on modern platforms.
 */
typedef struct {
    int maxfd;                  /**< Maximum allowed number of FDs. */
    fd_set *fdset;              /**< File descriptors buffer */
} rb_fdset_t;

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_NONNULL(())
/**
 * (Re-)initialises a  fdset.  One must  be initialised before  other `rb_fd_*`
 * operations.  Analogous to calling `malloc(3)` to allocate an `fd_set`.
 *
 * @param[out]  f  An fdset to squash.
 * @post        `f` holds no file descriptors.
 */
void rb_fd_init(rb_fdset_t *f);

RBIMPL_ATTR_NONNULL(())
/**
 * Destroys the ::rb_fdset_t,  releasing any memory and resources  it used.  It
 * must be  reinitialised using rb_fd_init()  before future use.   Analogous to
 * calling `free(3)` to release memory for an `fd_set`.
 *
 * @param[out]  f  An fdset to squash.
 * @post        `f` holds no file descriptors.
 */
void rb_fd_term(rb_fdset_t *f);

RBIMPL_ATTR_NONNULL(())
/**
 * Wipes out the current set of FDs.
 *
 * @param[out]  f  The fdset to clear.
 * @post        `f` has no FDs.
 */
void rb_fd_zero(rb_fdset_t *f);

RBIMPL_ATTR_NONNULL(())
/**
 * Sets an fd to a fdset.
 *
 * @param[in]   fd  A file descriptor.
 * @param[out]  f   Target fdset.
 * @post        `f` holds `fd`.
 */
void rb_fd_set(int fd, rb_fdset_t *f);

RBIMPL_ATTR_NONNULL(())
/**
 * Releases a specific FD from the given fdset.
 *
 * @param[in]   fd  Target FD.
 * @param[out]  f   The fdset that holds `fd`.
 * @post        `f` doesn't hold n.
 */
void rb_fd_clr(int fd, rb_fdset_t *f);

RBIMPL_ATTR_NONNULL(())
RBIMPL_ATTR_PURE()
/**
 * Queries if the given FD is in the given set.
 *
 * @param[in]  fd  Target FD.
 * @param[in]  f   The fdset to scan.
 * @retval     1   Yes there is.
 * @retval     0   No there isn't.
 * @see        http://www.freebsd.org/cgi/query-pr.cgi?pr=91421
 */
int rb_fd_isset(int fd, const rb_fdset_t *f);

/**
 * Destructively overwrites an fdset with another.
 *
 * @param[out]  dst   Target fdset.
 * @param[in]   src   Source fdset.
 * @param[in]   max   Maximum number of file descriptors to copy.
 * @post        `dst` is a copy of `src`.
 */
void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max);

/**
 * Identical  to  rb_fd_copy(),  except  it copies  unlimited  number  of  file
 * descriptors.
 *
 * @param[out]  dst   Target fdset.
 * @param[in]   src   Source fdset.
 * @post        `dst` is a copy of `src`.
 */
void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);

/**
 * Waits for multiple file descriptors at once.
 *
 * @param[in]      nfds       Max FD in everything passed, plus one.
 * @param[in,out]  rfds       Set of FDs to wait for reads.
 * @param[in,out]  wfds       Set of FDs to wait for writes.
 * @param[in,out]  efds       Set of FDs to wait for OOBs.
 * @param[in,out]  timeout    Max blocking duration.
 * @retval         -1         Failed, errno set.
 * @retval          0         Timeout exceeded.
 * @retval         otherwise  Total number of file descriptors returned.
 * @post           `rfds` contains readable FDs.
 * @post           `wfds` contains writable FDs.
 * @post           `efds` contains exceptional FDs.
 * @post           `timeout` is the time left.
 * @note           All pointers are allowed to be null pointers.
 */
int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_NONNULL(())
RBIMPL_ATTR_PURE()
/**
 * Raw pointer to `fd_set`.
 *
 * @param[in]  f         Target fdset.
 * @retval     NULL      `f` is already terminated by rb_fd_term().
 * @retval     otherwise  Underlying fd_set.
 *
 * @internal
 *
 * Extension library  must not touch  raw pointers.  It was  a bad idea  to let
 * them use it.
 */
static inline fd_set *
rb_fd_ptr(const rb_fdset_t *f)
{
    return f->fdset;
}

RBIMPL_ATTR_NONNULL(())
RBIMPL_ATTR_PURE()
/**
 * It seems this function has no use.  Maybe just remove?
 *
 * @param[in]  f  A set.
 * @return     Number of file descriptors stored.
 */
static inline int
rb_fd_max(const rb_fdset_t *f)
{
    return f->maxfd;
}

#endif /* RBIMPL_INTERN_SELECT_LARGESIZE_H */
PK*J[�7���+include/ruby/internal/intern/select/posix.hnu�[���#ifndef RBIMPL_INTERN_SELECT_POSIX_H                 /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_SELECT_POSIX_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs to provide ::rb_fd_select().
 */
#include "ruby/internal/config.h"

#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>        /* for select(2) (modern POSIX) */
#endif

#ifdef HAVE_UNISTD_H
# include <unistd.h>            /* for select(2) (archaic UNIX) */
#endif

#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"

/**
 * The data structure which wraps the  fd_set bitmap used by `select(2)`.  This
 * allows Ruby to use FD sets larger than what has been historically allowed on
 * modern platforms.
 *
 * @internal
 *
 * ... but because  this header file is  included only when the  system is with
 * that "historic restrictions", this is nothing more than an alias of fd_set.
 */
typedef fd_set rb_fdset_t;

/** Clears the given ::rb_fdset_t. */
#define rb_fd_zero   FD_ZERO

/** Sets the given fd to the ::rb_fdset_t. */
#define rb_fd_set    FD_SET

/** Unsets the given fd from the ::rb_fdset_t. */
#define rb_fd_clr    FD_CLR

/** Queries if the given fd is in the ::rb_fdset_t. */
#define rb_fd_isset  FD_ISSET

/** Initialises the :given :rb_fdset_t. */
#define rb_fd_init   FD_ZERO

/** Waits for multiple file descriptors at once. */
#define rb_fd_select select

/**@cond INTERNAL_MACRO */
#define rb_fd_copy  rb_fd_copy
#define rb_fd_dup   rb_fd_dup
#define rb_fd_ptr   rb_fd_ptr
#define rb_fd_max   rb_fd_max
/** @endcond */

RBIMPL_ATTR_NONNULL(())
RBIMPL_ATTR_NOALIAS()
/**
 * Destructively overwrites an fdset with another.
 *
 * @param[out]  dst   Target fdset.
 * @param[in]   src   Source fdset.
 * @param[in]   n     Unused parameter.
 * @post        `dst` is a copy of `src`.
 */
static inline void
rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int n)
{
    *dst = *src;
}

RBIMPL_ATTR_NONNULL(())
RBIMPL_ATTR_NOALIAS()
/**
 * Destructively overwrites an fdset with another.
 *
 * @param[out]  dst   Target fdset.
 * @param[in]   src   Source fdset.
 * @post        `dst` is a copy of `src`.
 */
static inline void
rb_fd_dup(rb_fdset_t *dst, const fd_set *src)
{
    *dst = *src;
}

RBIMPL_ATTR_PURE()
/* :TODO: can this function be __attribute__((returns_nonnull)) or not? */
/**
 * Raw pointer to `fd_set`.
 *
 * @param[in]  f  Target fdset.
 * @return     Underlying fd_set.
 *
 * @internal
 *
 * Extension library  must not touch  raw pointers.  It was  a bad idea  to let
 * them use it.
 */
static inline fd_set *
rb_fd_ptr(rb_fdset_t *f)
{
    return f;
}

RBIMPL_ATTR_CONST()
/**
 * It seems this function has no use.  Maybe just remove?
 *
 * @param[in]  f  A set.
 * @return     Number of file descriptors stored.
 */
static inline int
rb_fd_max(const rb_fdset_t *f)
{
    return FD_SETSIZE;
}

/** @cond INTERNAL_MACRO */
/* :FIXME: What are these?  They don't exist for sibling implementations. */
#define rb_fd_init_copy(d, s) (*(d) = *(s))
#define rb_fd_term(f)   ((void)(f))
/** @endcond */

#endif /* RBIMPL_INTERN_SELECT_POSIX_H */
PK*J[����[['include/ruby/internal/intern/rational.hnu�[���#ifndef RBIMPL_INTERN_RATIONAL_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_RATIONAL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cRational.
 */
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/arithmetic/long.h" /* INT2FIX is here. */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* rational.c */

/**
 * Identical to rb_rational_new(), except it skips argument validations.  It is
 * thus  dangerous  for extension  libraries.   For  instance `1/0r`  could  be
 * constructed using this.
 *
 * @param[in]  num            Numerator, an instance of ::rb_cInteger.
 * @param[in]  den            Denominator, an instance of ::rb_cInteger.
 * @exception  rb_eTypeError  Either argument is not an Integer.
 * @return     An instance of ::rb_cRational whose value is `(num/den)r`.
 */
VALUE rb_rational_raw(VALUE num, VALUE den);

/**
 * Shorthand  of  `(x/1)r`.  As  `x`  is  already  an Integer,  it  practically
 * converts it into a Rational of the identical value.
 *
 * @param[in]  x  An instance of ::rb_cInteger.
 * @return     An instance of ::rb_cRational, whose value is `(x/1)r`.
 */
#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1))

/** @alias{rb_rational_raw} */
#define rb_rational_raw2(x,y) rb_rational_raw((x), (y))

/**
 * Constructs a Rational,  with reduction.  This returns  for instance `(2/3)r`
 * for `rb_rational_new(INT2NUM(-384), INT2NUM(-576))`.
 *
 * @param[in]  num               Numerator, an instance of ::rb_cInteger.
 * @param[in]  den               Denominator, an instance of ::rb_cInteger.
 * @exception  rb_eZeroDivError  `den` is zero.
 * @return     An instance of ::rb_cRational whose value is `(num/den)r`.
 */
VALUE rb_rational_new(VALUE num, VALUE den);

/**
 * Shorthand  of  `(x/1)r`.  As  `x`  is  already  an Integer,  it  practically
 * converts it into a Rational of the identical value.
 *
 * @param[in]  x  An instance of ::rb_cInteger.
 * @return     An instance of ::rb_cRational, whose value is `(x/1)r`.
 */
#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1))

/** @alias{rb_rational_new} */
#define rb_rational_new2(x,y) rb_rational_new((x), (y))

/**
 * Converts various values into a Rational.  This function accepts:
 *
 * - Instances of ::rb_cInteger (taken as-is),
 * - Instances of ::rb_cRational (taken as-is),
 * - Instances of ::rb_cFloat (applies `#to_r`),
 * - Instances of ::rb_cComplex (applies `#to_r`),
 * - Instances of ::rb_cString (applies `#to_r`),
 * - Other objects that respond to `#to_r`.
 *
 * It (possibly  recursively) applies  `#to_r` until  both sides  become either
 * Integer or Rational, then divides them.
 *
 * As a  special case, passing  ::RUBY_Qundef to `den`  is the same  as passing
 * `RB_INT2NUM(1)`.
 *
 * @param[in]  num                   Numerator (see above).
 * @param[in]  den                   Denominator (see above).
 * @exception  rb_eTypeError         Passed something not described above.
 * @exception  rb_eFloatDomainError  `#to_r` produced Nan/Inf.
 * @exception  rb_eZeroDivError      `#to_r` produced zero for `den`.
 * @return     An instance of ::rb_cRational whose value is `(num/den)r`.
 *
 * @internal
 *
 * This was the implementation of `Kernel#Rational` before, but they diverged.
 */
VALUE rb_Rational(VALUE num, VALUE den);

/**
 * Shorthand of  `(x/1)r`.  It practically converts  it into a Rational  of the
 * identical value.
 *
 * @param[in]  x  ::rb_cInteger, ::rb_cRational, or  something that responds to
 *                `#to_r`.
 * @return     An instance of ::rb_cRational, whose value is `(x/1)r`.
 */
#define rb_Rational1(x) rb_Rational((x), INT2FIX(1))

/** @alias{rb_Rational} */
#define rb_Rational2(x,y) rb_Rational((x), (y))

RBIMPL_ATTR_PURE()
/**
 * Queries the numerator of the passed Rational.
 *
 * @param[in]  rat  An instance of ::rb_cRational.
 * @return     Its numerator part, which is an instance of ::rb_cInteger.
 */
VALUE rb_rational_num(VALUE rat);

RBIMPL_ATTR_PURE()
/**
 * Queries the denominator of the passed Rational.
 *
 * @param[in]  rat  An instance of ::rb_cRational.
 * @return     Its  denominator part,  which  is an  instance of  ::rb_cInteger
 *             greater than or equal to one..
 */
VALUE rb_rational_den(VALUE rat);

/**
 * Simplified  approximation of  a float.   It returns  a rational  `rat` which
 * satisfies:
 *
 * ```
 * flt - |prec| <= rat <= flt + |prec|
 * ```
 *
 * ```ruby
 * 3.141592.rationalize(0.001) # => (201/64)r
 * 3.141592.rationalize(0.01)' # => (22/7)r
 * 3.141592.rationalize(0.1)'  # => (16/5)r
 * 3.141592.rationalize(1)'    # => (3/1)r
 * ```
 *
 * @param[in]  flt   An instance of ::rb_cFloat to rationalise.
 * @param[in]  prec  Another ::rb_cFloat, which is the "precision".
 * @return     Approximation of `flt`, in ::rb_cRational.
 */
VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec);

/**
 * Identical   to   rb_flt_rationalize_with_prec(),  except   it   auto-detects
 * appropriate precision depending on the passed value.
 *
 * @param[in]  flt   An instance of ::rb_cFloat to rationalise.
 * @return     Approximation of `flt`, in ::rb_cRational.
 */
VALUE rb_flt_rationalize(VALUE flt);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_RATIONAL_H */
PK*J[V3CL,x,x%include/ruby/internal/intern/bignum.hnu�[���#ifndef RBIMPL_INTERN_BIGNUM_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_BIGNUM_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to so-called rb_cBignum.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/backward/2/long_long.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* bignum.c */

/**
 * Allocates a bignum object.
 *
 * @param[in]  len   Length of the bignum's backend storage, in words.
 * @param[in]  sign  Sign of the bignum.
 * @return     An allocated new bignum instance.
 * @note       This only allocates an object, doesn't fill its value in.
 *
 * @internal
 *
 * @shyouhei  finds it  hard to  use from  extension libraries.   `len` is  per
 * `BDIGIT` but its definition is hidden.
 */
VALUE rb_big_new(size_t len, int sign);

/**
 * Queries if  the passed bignum  instance is a  "bigzero".  What is a bigzero?
 * Well, bignums  are for very big  integers, but can also  represent tiny ones
 * like -1,  0, 1.   Bigzero are  instances of bignums  whose values  are zero.
 * Knowing if a bignum is bigzero can  be handy on occasions, like for instance
 * detecting division by zero situation.
 *
 * @param[in]  x  A bignum.
 * @retval     1  It is a bigzero.
 * @retval     0  Otherwise.
 */
int rb_bigzero_p(VALUE x);

/**
 * Duplicates the given bignum.
 *
 * @param[in]  num  A bignum.
 * @return     An allocated bignum, who is equivalent to `num`.
 */
VALUE rb_big_clone(VALUE num);

/**
 * Destructively modify the passed bignum into 2's complement representation.
 *
 * @note  By default bignums are in signed magnitude system.
 *
 * @param[out]  num  A bignum to modify.
 */
void rb_big_2comp(VALUE num);

/**
 * Normalises the passed bignum.  It for  instance returns a fixnum of the same
 * value if fixnum can represent that number.
 *
 * @param[out]  x  Target bignum (can be destructively modified).
 * @return      An integer of the identical value (can be `x` itself).
 */
VALUE rb_big_norm(VALUE x);

/**
 * Destructively resizes the backend storage of the passed bignum.
 *
 * @param[out]  big  A bignum.
 * @param[in]   len  New length of `big`'s backend, in words.
 */
void rb_big_resize(VALUE big, size_t len);

RBIMPL_ATTR_NONNULL(())
/**
 * Parses C's string to convert into a Ruby's integer.  It understands prefixes
 * (e.g. `0x`) and underscores.
 *
 * @param[in]  str           Stringised representation of the return value.
 * @param[in]  base          Base of conversion.   Must be `-36..36` inclusive,
 *                           except `1`.  `2..36` means  the conversion is done
 *                           according to it,  with unmatched prefix understood
 *                           as  a part  of  the result.   `-36..-2` means  the
 *                           conversion  honours prefix  when  present, or  use
 *                           `-base` when  absent. `0` is equivalent  to `-10`.
 *                           `-1` mandates a prefix. `1` is an error.
 * @param[in]  badcheck      Whether  to raise  ::rb_eArgError on  failure.  If
 *                           `0`  is  passed  here  this  function  can  return
 *                           `INT2FIX(0)` for parse errors.
 * @exception  rb_eArgError  Failed to parse (and `badcheck` is truthy).
 * @return     An instance of ::rb_cInteger,  which is a numeric interpretation
 *             of what is written in `str`.
 *
 * @internal
 *
 * Not sure if it intentionally accepts `base  == -1` or is just buggy.  Nobody
 * practically uses negative bases these days.
 */
VALUE rb_cstr_to_inum(const char *str, int base, int badcheck);

/**
 * Identical to rb_cstr2inum(), except it takes Ruby's strings instead of C's.
 *
 * @param[in]  str                 Stringised  representation   of  the  return
 *                                 value.
 * @param[in]  base                Base  of  conversion.    Must  be  `-36..36`
 *                                 inclusive,  except `1`.   `2..36` means  the
 *                                 conversion  is done  according  to it,  with
 *                                 unmatched prefix understood as a part of the
 *                                 result.   `-36..-2`   means  the  conversion
 *                                 honours prefix when  present, or use `-base`
 *                                 when  absent. `0`  is  equivalent to  `-10`.
 *                                 `-1` mandates a prefix. `1` is an error.
 * @param[in]  badcheck            Whether to raise  ::rb_eArgError on failure.
 *                                 If  `0` is  passed  here  this function  can
 *                                 return `INT2FIX(0)` for parse errors.
 * @exception  rb_eArgError        Failed to parse (and `badcheck` is truthy).
 * @exception  rb_eTypeError       `str` is not a string.
 * @exception  rb_eEncCompatError  `str` is not ASCII compatible.
 * @return     An instance of ::rb_cInteger,  which is a numeric interpretation
 *             of what is written in `str`.
 */
VALUE rb_str_to_inum(VALUE str, int base, int badcheck);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_cstr_to_inum(), except the second argument controls the base
 * and badcheck at  once.  It basically doesn't raise for  parse errors, unless
 * the base is zero.
 *
 * This is an older API.  New codes might prefer rb_cstr_to_inum().
 *
 * @param[in]  str           Stringised representation of the return value.
 * @param[in]  base          Base of conversion.   Must be `-36..36` inclusive,
 *                           except `1`.  `2..36` means  the conversion is done
 *                           according to it,  with unmatched prefix understood
 *                           as  a part  of  the result.   `-36..-2` means  the
 *                           conversion  honours prefix  when  present, or  use
 *                           `-base` when  absent. `0` is equivalent  to `-10`.
 *                           `-1` mandates a prefix. `1` is an error.
 * @exception  rb_eArgError  Failed to parse (and `base` is zero).
 * @return     An instance of ::rb_cInteger,  which is a numeric interpretation
 *             of what is written in `str`.
 */
VALUE rb_cstr2inum(const char *str, int base);

/**
 * Identical to rb_str_to_inum(), except the  second argument controls the base
 * and  badcheck at  once.  It  can  also be  seen  as a  routine identical  to
 * rb_cstr2inum(), except it takes Ruby's strings instead of C's.
 *
 * This is an older API.  New codes might prefer rb_cstr_to_inum().
 *
 * @param[in]  str                 Stringised  representation   of  the  return
 *                                 value.
 * @param[in]  base                Base  of  conversion.    Must  be  `-36..36`
 *                                 inclusive,  except `1`.   `2..36` means  the
 *                                 conversion  is done  according  to it,  with
 *                                 unmatched prefix understood as a part of the
 *                                 result.   `-36..-2`   means  the  conversion
 *                                 honours prefix when  present, or use `-base`
 *                                 when  absent. `0`  is  equivalent to  `-10`.
 *                                 `-1` mandates a prefix. `1` is an error.
 * @exception  rb_eArgError        Failed to parse (and `base` is zero).
 * @exception  rb_eTypeError       `str` is not a string.
 * @exception  rb_eEncCompatError  `str` is not ASCII compatible.
 * @return     An instance of ::rb_cInteger,  which is a numeric interpretation
 *             of what is written in `str`.
 */
VALUE rb_str2inum(VALUE str, int base);

/**
 * Generates a place-value representation of the passed integer.
 *
 * @param[in]  x               An integer to stringify.
 * @param[in]  base            `2` to `36` inclusive for each radix.
 * @exception  rb_eArgError    `base` is out of range.
 * @exception  rb_eRangeError  `x` is too big, cannot represent in string.
 * @return     An instance of ::rb_cString which represents `x`.
 */
VALUE rb_big2str(VALUE x, int base);

/**
 * Converts a bignum into C's `long`.
 *
 * @param[in]  x               A bignum.
 * @exception  rb_eRangeError  `x` is out of range of `long`.
 * @return     The passed value converted into C's `long`.
 */
long rb_big2long(VALUE x);

/** @alias{rb_big2long} */
#define rb_big2int(x) rb_big2long(x)

/**
 * Converts a bignum into C's `unsigned long`.
 *
 * @param[in]  x               A bignum.
 * @exception  rb_eRangeError  `x` is out of range of `unsigned long`.
 * @return     The passed value converted into C's `unsigned long`.
 *
 * @internal
 *
 * This function  can generate  a very  large positive  integer for  a negative
 * input.   For instance  applying  Ruby's  -4,611,686,018,427,387,905 to  this
 * function yields C's  13,835,058,055,282,163,711 on my machine.   This is how
 * it has been.  Cannot change any longer.
 */
unsigned long rb_big2ulong(VALUE x);

/** @alias{rb_big2long} */
#define rb_big2uint(x) rb_big2ulong(x)

#if HAVE_LONG_LONG
/**
 * Converts a bignum into C's `long long`.
 *
 * @param[in]  x               A bignum.
 * @exception  rb_eRangeError  `x` is out of range of `long long`.
 * @return     The passed value converted into C's `long long`.
 */
LONG_LONG rb_big2ll(VALUE);

/**
 * Converts a bignum into C's `unsigned long long`.
 *
 * @param[in]  x               A bignum.
 * @exception  rb_eRangeError  `x` is out of range of `unsigned long long`.
 * @return     The passed value converted into C's `unsigned long long`.
 *
 * @internal
 *
 * This function  can generate  a very  large positive  integer for  a negative
 * input.   For instance  applying  Ruby's  -4,611,686,018,427,387,905 to  this
 * function yields C's  13,835,058,055,282,163,711 on my machine.   This is how
 * it has been.  Cannot change any longer.
 */
unsigned LONG_LONG rb_big2ull(VALUE);

#endif  /* HAVE_LONG_LONG */

RBIMPL_ATTR_NONNULL(())
/**
 * Converts a bignum into a series of its parts.
 *
 * @param[in]   val            An integer.
 * @param[out]  buf            Return buffer.
 * @param[in]   num_longs      Number of words of `buf`.
 * @exception   rb_eTypeError  `val` doesn't respond to `#to_int`.
 * @post        `buf` is filled with  `val`'s 2's complement representation, in
 *              the host CPU's  native byte order, from  least significant word
 *              towards the most significant one, for `num_longs` words.
 * @note        The "pack" terminology comes from `Array#pack`.
 */
void rb_big_pack(VALUE val, unsigned long *buf, long num_longs);

RBIMPL_ATTR_NONNULL(())
/**
 * Constructs a (possibly very big) bignum from a series of integers.  `buf[0]`
 * would be the return value's least significant word; `buf[num_longs-1]` would
 * be that of most significant.
 *
 * @param[in]  buf           A series of integers.
 * @param[in]  num_longs     Number of words of `buf`.
 * @exception  rb_eArgError  Result would be too big.
 * @return     An instance  of ::rb_cInteger which  is an "unpack"-ed  value of
 *             the parameters.
 * @note       The "unpack" terminology comes from `String#pack`.
 */
VALUE rb_big_unpack(unsigned long *buf, long num_longs);

/* pack.c */

RBIMPL_ATTR_NONNULL(())
/**
 * Encodes a Unicode codepoint into its UTF-8 representation.
 *
 * @param[out]  buf             Return buffer, must at least be 6 bytes width.
 * @param[in]   uv              An Unicode codepoint.
 * @exception   rb_eRangeError  `uv` is out of Unicode.
 * @return      Number of bytes written to `buf`
 * @post        `buf` holds a UTF-8 representation of `uv`.
 */
int rb_uv_to_utf8(char buf[6], unsigned long uv);

/* bignum.c */

/**
 * Converts a C's `double` into a bignum.
 *
 * @param[in]  d                     A value to convert.
 * @exception  rb_eFloatDomainError  `d` is Inf/NaN.
 * @return     An instance of ::rb_cInteger whose value is approximately `d`.
 *
 * @internal
 *
 * @shyouhei is not sure if the result  is guaranteed to be the nearest integer
 * of `d`.
 */
VALUE rb_dbl2big(double d);

/**
 * Converts a bignum into C's `double`.
 *
 * @param[in]  x  A bignum.
 * @return     The passed value converted into C's `double`.
 *
 * @internal
 *
 * @shyouhei is not sure if the result  is guaranteed to be `x`'s nearest value
 * that a `double` can represent.
 */
double rb_big2dbl(VALUE x);

/**
 * Compares the passed two bignums.
 *
 * @param[in]  lhs  Comparison LHS.
 * @param[in]  rhs  Comparison RHS.
 * @retval     -1   `rhs` is bigger than `lhs`.
 * @retval     0    They are identical.
 * @retval     1    `lhs` is bigger than `rhs`.
 * @see        rb_num_coerce_cmp()
 */
VALUE rb_big_cmp(VALUE lhs, VALUE rhs);

/**
 * Equality, in terms of `==`.  This checks if the _value_ is the same, not the
 * identity.  For instance `1 == 1.0` must hold.
 *
 * @param[in]  lhs          Comparison LHS.
 * @param[in]  rhs          Comparison RHS.
 * @retval     RUBY_Qtrue   They are the same.
 * @retval     RUBY_Qfalse  They are different.
 */
VALUE rb_big_eq(VALUE lhs, VALUE rhs);

/**
 * Equality,  in terms  of  `eql?`.   Unlike rb_big_eq()  it  does not  convert
 * ::rb_cFloat etc.   This function  returns ::RUBY_Qtrue if  and only  if both
 * parameters are bignums, which represent the identical numerical value.
 *
 * @param[in]  lhs          Comparison LHS.
 * @param[in]  rhs          Comparison RHS.
 * @retval     RUBY_Qtrue   They are identical.
 * @retval     RUBY_Qfalse  They are distinct.
 */
VALUE rb_big_eql(VALUE lhs, VALUE rhs);

/**
 * Performs addition of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x + y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_big_plus(VALUE x, VALUE y);

/**
 * Performs subtraction of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x - y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_big_minus(VALUE x, VALUE y);

/**
 * Performs multiplication of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x * y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_big_mul(VALUE x, VALUE y);

/**
 * Performs division of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x / y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_big_div(VALUE x, VALUE y);

/**
 * Performs "integer division".  This is different from rb_big_div().
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x.div y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_big_idiv(VALUE x, VALUE y);

/**
 * Performs modulo of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x % y` evaluates to.
 * @see        rb_num_coerce_bin()
 *
 * @internal
 *
 * There also is `rb_big_remainder()` internally,  which is different from this
 * one.
 */
VALUE rb_big_modulo(VALUE x, VALUE y);

/**
 * Performs "divmod" operation.   The operation in bignum's context  is that it
 * calculates rb_big_idiv() and rb_big_modulo() at once.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x.divmod y` evaluates to.
 * @see        rb_num_coerce_bin()
 */
VALUE rb_big_divmod(VALUE x, VALUE y);

/**
 * Raises `x` to the powerof `y`.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x ** y` evaluates to.
 * @see        rb_num_coerce_bin()
 * @note       This can return  an instance of ::rb_cFloat, even  when both `x`
 *             and `y` are bignums.  Or an instance of ::rb_cRational, when for
 *             instance `y` is negative.
 */
VALUE rb_big_pow(VALUE x, VALUE y);

/**
 * Performs bitwise and of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x & y` evaluates to.
 * @see        rb_num_coerce_bit()
 */
VALUE rb_big_and(VALUE x, VALUE y);

/**
 * Performs bitwise or of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x | y` evaluates to.
 * @see        rb_num_coerce_bit()
 */
VALUE rb_big_or(VALUE x, VALUE y);

/**
 * Performs exclusive or of the passed two objects.
 *
 * @param[in]  x  A bignum.
 * @param[in]  y  Arbitrary ruby object.
 * @return     What `x ^ y` evaluates to.
 * @see        rb_num_coerce_bit()
 */
VALUE rb_big_xor(VALUE x, VALUE y);

/**
 * Performs shift left.
 *
 * @param[in]  x              A bignum.
 * @param[in]  y              Shift amount.
 * @exception  rb_eTypeError  `y` is not an integer.
 * @exception  rb_eArgError   `y` is too big.
 * @return     `x` shifted left to `y` bits.
 * @note       `y` can be negative.  Shifts right then.
 */
VALUE rb_big_lshift(VALUE x, VALUE y);

/**
 * Performs shift right.
 *
 * @param[in]  x              A bignum.
 * @param[in]  y              Shift amount.
 * @exception  rb_eTypeError  `y` is not an integer.
 * @return     `x` shifted right to `y` bits.
 * @note       This is arithmetic.  Because bignums  are not bitfields there is
 *             no shift right logical operator.
 */
VALUE rb_big_rshift(VALUE x, VALUE y);

/**
 * @name Flags for rb_integer_pack()/rb_integer_unpack()
 * @{
 */

/** Stores/interprets the most significant word as the first word. */
#define INTEGER_PACK_MSWORD_FIRST       0x01

/** Stores/interprets the least significant word as the first word. */
#define INTEGER_PACK_LSWORD_FIRST       0x02

/**
 * Stores/interprets the most  significant byte in a word as  the first byte in
 * the word.
 */
#define INTEGER_PACK_MSBYTE_FIRST       0x10

/**
 * Stores/interprets the least significant byte in  a word as the first byte in
 * the word.
 */
#define INTEGER_PACK_LSBYTE_FIRST       0x20

/**
 * Means   either  #INTEGER_PACK_MSBYTE_FIRST   or  #INTEGER_PACK_LSBYTE_FIRST,
 * depending on the host processor's endian.
 */
#define INTEGER_PACK_NATIVE_BYTE_ORDER  0x40

/** Uses 2's complement representation. */
#define INTEGER_PACK_2COMP              0x80

/** Uses "generic" implementation (handy on test). */
#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION     0x400

/**
 * Always generates  a bignum object even  if the integer can  be representable
 * using fixnum scheme (unpack only)
 */
#define INTEGER_PACK_FORCE_BIGNUM       0x100

/**
 * Interprets the  input as  a signed  negative number  (unpack only).   If not
 * specified returns a positive number.
 */
#define INTEGER_PACK_NEGATIVE           0x200

/** Little endian combination. */
#define INTEGER_PACK_LITTLE_ENDIAN \
    (INTEGER_PACK_LSWORD_FIRST | \
     INTEGER_PACK_LSBYTE_FIRST)

/** Big endian combination */
#define INTEGER_PACK_BIG_ENDIAN \
    (INTEGER_PACK_MSWORD_FIRST | \
     INTEGER_PACK_MSBYTE_FIRST)

/** @} */

RBIMPL_ATTR_NONNULL(())
/**
 * Exports an integer into a buffer.   This function fills the buffer specified
 * by `words`  and `numwords` as `val`  in the format specified  by `wordsize`,
 * `nails` and `flags`.
 *
 * @param[in]   val            Integer   or  integer-like   object  which   has
 *                             `#to_int` method.
 * @param[out]  words          Return buffer.
 * @param[in]   numwords       Number of words of `words`.
 * @param[in]   wordsize       Number of bytes per word.
 * @param[in]   nails          Number  of   padding  bits  in  a   word.   Most
 *                             significant nails  bits of each word  are filled
 *                             by zero.
 * @param[in]   flags          Bitwise  or  of   constants  whose  name  starts
 *                             "INTEGER_PACK_".
 * @exception   rb_eTypeError  `val` doesn't respond to `#to_int`.
 *
 * Possible flags are:
 *
 *   - #INTEGER_PACK_MSWORD_FIRST:
 *       Stores the most significant word as the first word.
 *
 *   - #INTEGER_PACK_LSWORD_FIRST:
 *       Stores the least significant word as the first word.
 *
 *   - #INTEGER_PACK_MSBYTE_FIRST:
 *       Stores the most  significant byte in a  word as the first  byte in the
 *       word.
 *
 *   - #INTEGER_PACK_LSBYTE_FIRST:
 *       Stores the least significant  byte in a word as the  first byte in the
 *       word.
 *
 *   - #INTEGER_PACK_NATIVE_BYTE_ORDER:
 *       Either   #INTEGER_PACK_MSBYTE_FIRST    or   #INTEGER_PACK_LSBYTE_FIRST
 *       corresponding to the host's endian.
 *
 *   - #INTEGER_PACK_2COMP:
 *       Uses 2's complement representation.
 *
 *   - #INTEGER_PACK_LITTLE_ENDIAN: Shorthand of
 *       `INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_LSBYTE_FIRST`.
 *
 *   - #INTEGER_PACK_BIG_ENDIAN: Shorthand of
 *       `INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_MSBYTE_FIRST`.
 *
 *   - #INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION:
 *       Uses generic implementation (for test and debug).
 *
 * This  function  fills  the  buffer  specified  by  `words`  as  `val`'s  2's
 * complement representation  if #INTEGER_PACK_2COMP  is specified  in `flags`.
 * Otherwise it fills `words` as `abs(val)`  and signedness is returned via the
 * return value.
 *
 * @return  The  signedness and  overflow  condition.   The overflow  condition
 *          depends on #INTEGER_PACK_2COMP.
 *
 * When #INTEGER_PACK_2COMP is not specified:
 *
 *   - `-2` :
 *       Negative overflow.  `val <= -2**(numwords*(wordsize*CHAR_BIT-nails))`
 *
 *   - `-1` :
 *       Negative without overflow.
 *       `-2**(numwords*(wordsize*CHAR_BIT-nails)) < val < 0`
 *
 *   - `0` : zero.  `val == 0`
 *
 *   - `1` :
 *       Positive without overflow.
 *       `0 < val < 2**(numwords*(wordsize*CHAR_BIT-nails))`
 *
 *   - `2` :
 *       Positive overflow.  `2**(numwords*(wordsize*CHAR_BIT-nails)) <= val`
 *
 * When #INTEGER_PACK_2COMP is specified:
 *
 *   - `-2` :
 *       Negative overflow.  `val < -2**(numwords*(wordsize*CHAR_BIT-nails))`
 *
 *   - `-1` :
 *       Negative without overflow.
 *       `-2**(numwords*(wordsize*CHAR_BIT-nails)) <= val < 0`
 *
 *   - `0` : zero.  `val == 0`
 *
 *   - `1` :
 *       Positive without overflow.
 *       `0 < val < 2**(numwords*(wordsize*CHAR_BIT-nails))`
 *
 *   - `2` :
 *       Positive overflow.  `2**(numwords*(wordsize*CHAR_BIT-nails)) <= val`
 *
 * The value,  `-2**(numwords*(wordsize*CHAR_BIT-nails))`, is  representable in
 * 2's complement representation  but not representable in  absolute value.  So
 * `-1`  is returned  for the  value  if #INTEGER_PACK_2COMP  is specified  but
 * returns `-2` if #INTEGER_PACK_2COMP is not specified.
 *
 * The least significant words are filled in the buffer when overflow occur.
 */
int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);

RBIMPL_ATTR_NONNULL(())
/**
 * Import an integer from a buffer.
 *
 * @param[in]  words         Buffer to import.
 * @param[in]  numwords      Number of words of `words`.
 * @param[in]  wordsize      Number of bytes per word.
 * @param[in]  nails         Number   of  padding   bits  in   a  word.    Most
 *                           significant nails bits of each word are ignored.
 * @param[in]  flags         Bitwise   or  of   constants  whose   name  starts
 *                           "INTEGER_PACK_".
 * @exception  rb_eArgError  `numwords * wordsize` too big.
 *
 * Possible flags are:
 *
 *   - #INTEGER_PACK_MSWORD_FIRST:
 *       Interpret the first word as the most significant word.
 *
 *   - #INTEGER_PACK_LSWORD_FIRST:
 *       Interpret the first word as the least significant word.
 *
 *   - #INTEGER_PACK_MSBYTE_FIRST:
 *       Interpret the first byte in a word as the most significant byte in the
 *       word.
 *
 *   - #INTEGER_PACK_LSBYTE_FIRST:
 *       Interpret the  first byte in a  word as the least  significant byte in
 *       the word.
 *
 *   - #INTEGER_PACK_NATIVE_BYTE_ORDER:
 *       Either   #INTEGER_PACK_MSBYTE_FIRST    or   #INTEGER_PACK_LSBYTE_FIRST
 *       corresponding to the host's endian.
 *
 *   - #INTEGER_PACK_2COMP:
 *       Uses 2's complement representation.
 *
 *   - #INTEGER_PACK_LITTLE_ENDIAN: Shorthand of
 *       `INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_LSBYTE_FIRST`
 *
 *   - #INTEGER_PACK_BIG_ENDIAN: Shorthand of
 *       `INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_MSBYTE_FIRST`
 *
 *   - #INTEGER_PACK_FORCE_BIGNUM:
 *       Returns a bignum even if its value is representable as a fixnum.
 *
 *   - #INTEGER_PACK_NEGATIVE:
 *       Returns a  non-positive value.  (Returns a  non-negative value  if not
 *       specified.)
 *
 *   - #INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION:
 *       Uses generic implementation (for test and debug).
 *
 * @return  An  instance  of  ::rb_cInteger  whose  value  is  the  interpreted
 *          `words`.    The   range   of    the   result   value   depends   on
 *          #INTEGER_PACK_2COMP and #INTEGER_PACK_NEGATIVE.
 *
 * When #INTEGER_PACK_2COMP is not set:
 *
 *   - `0 <= val < 2**(numwords*(wordsize*CHAR_BIT-nails))` if
 *     `!INTEGER_PACK_NEGATIVE`
 *
 *   - `-2**(numwords*(wordsize*CHAR_BIT-nails)) < val <= 0` if
 *     `INTEGER_PACK_NEGATIVE`
 *
 * When #INTEGER_PACK_2COMP is set:
 *
 *   - `-2**(numwords*(wordsize*CHAR_BIT-nails)-1)` `<= val <=`
 *     `2**(numwords*(wordsize*CHAR_BIT-nails)-1)-1` if
 *     `!INTEGER_PACK_NEGATIVE`
 *
 *   - `-2**(numwords*(wordsize*CHAR_BIT-nails)) <= val <= -1` if
 *     `INTEGER_PACK_NEGATIVE`
 *
 * Passing  #INTEGER_PACK_2COMP   without  #INTEGER_PACK_NEGATIVE   means  sign
 * extension.  #INTEGER_PACK_2COMP  with #INTEGER_PACK_NEGATIVE  means assuming
 * the higher bits are `1`.
 *
 * Note   that  this   function  returns   0  when   `numwords`  is   zero  and
 * #INTEGER_PACK_2COMP is set but #INTEGER_PACK_NEGATIVE is not set.
 */
VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);

/**
 * Calculates the number of bytes needed to represent the absolute value of the
 * passed integer.
 *
 * @param[in]   val            Integer   or  integer-like   object  which   has
 *                             `#to_int` method.
 * @param[out]  nlz_bits_ret   Number  of   leading  zero  bits  in   the  most
 *                             significant byte is returned if not `NULL`.
 * @exception   rb_eTypeError  `val` doesn't respond to `#to_int`.
 * @return      `((val_numbits * CHAR_BIT + CHAR_BIT - 1) / CHAR_BIT)`,   where
 *              val_numbits is the number of bits of `abs(val)`.
 * @post        If `nlz_bits_ret` is not `NULL`,
 *              `(return_value * CHAR_BIT - val_numbits)`    is    stored    in
 *              `*nlz_bits_ret`.  In this case,
 *              `0 <= *nlz_bits_ret < CHAR_BIT`.
 *
 * This function should not overflow.
 */
size_t rb_absint_size(VALUE val, int *nlz_bits_ret);

/**
 * Calculates the  number of words needed  represent the absolute value  of the
 * passed  integer.  Unlike  rb_absint_size() this  function can  overflow.  It
 * returns `(size_t)-1` then.
 *
 * @param[in]   val            Integer   or  integer-like   object  which   has
 *                             `#to_int` method.
 * @param[in]   word_numbits   Number of bits per word.
 * @param[out]  nlz_bits_ret   Number  of   leading  zero  bits  in   the  most
 *                             significant word is returned if not `NULL`.
 * @exception   rb_eTypeError  `val` doesn't respond to `#to_int`.
 * @retval      (size_t)-1     Overflowed.
 * @retval      otherwise
 *              `((val_numbits * CHAR_BIT + word_numbits - 1) / word_numbits)`,
 *              where val_numbits is the number of bits of `abs(val)`.
 * @post        If  `nlz_bits_ret` is  not  `NULL` and  there  is no  overflow,
 *              `(return_value * word_numbits - val_numbits)`   is  stored   in
 *              `*nlz_bits_ret`.  In this case,
 *              `0 <= *nlz_bits_ret < word_numbits.`
 *
 */
size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret);

/**
 * Tests `abs(val)` consists only of a bit or not.
 *
 * @param[in]   val            Integer   or  integer-like   object  which   has
 *                             `#to_int` method.
 * @exception   rb_eTypeError  `val` doesn't respond to `#to_int`.
 * @retval      1              `abs(val) == 1 << n` for some `n >= 0`.
 * @retval      0              Otherwise.
 *
 * rb_absint_singlebit_p() can  be used to  determine required buffer  size for
 * rb_integer_pack() used with #INTEGER_PACK_2COMP (two's complement).
 *
 * Following example  calculates number  of bits required  to represent  val in
 * two's complement number, without sign bit.
 *
 * ```CXX
 *   size_t size;
 *   int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val);
 *   size = rb_absint_numwords(val, 1, NULL)
 *   if (size == (size_t)-1) ...overflow...
 *   if (neg && rb_absint_singlebit_p(val))
 *     size--;
 * ```
 *
 * Following example  calculates number of  bytes required to represent  val in
 * two's complement number, with sign bit.
 *
 * ```CXX
 *   size_t size;
 *   int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val);
 *   int nlz_bits;
 *   size = rb_absint_size(val, &nlz_bits);
 *   if (nlz_bits == 0 && !(neg && rb_absint_singlebit_p(val)))
 *     size++;
 * ```
 */
int rb_absint_singlebit_p(VALUE val);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_BIGNUM_H */
PK*J[��`���$include/ruby/internal/intern/parse.hnu�[���#ifndef RBIMPL_INTERN_PARSE_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_PARSE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cSymbol.
 */
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* symbol.c */

/**
 * Calculates an ID of attribute writer.   For instance it returns `:foo=` when
 * passed `:foo`.
 *
 * @param[in]  id             An id.
 * @exception  rb_eNameError  `id` is not for attributes (e.g. operator).
 * @return     Calculated name of attribute writer.
 */
ID rb_id_attrset(ID id);

RBIMPL_ATTR_CONST()
/**
 * Classifies the given ID, then sees if it is a constant.  In case an ID is in
 * Unicode (likely), its  "constant"-ness is determined if  its first character
 * is  either upper  case or  title case.   Otherwise it  is detected  if case-
 * folding the first character changes its case or not.
 *
 * @param[in]  id  An id to classify.
 * @retval     1   It is a constant.
 * @retval     0   It isn't.
 */
int rb_is_const_id(ID id);

RBIMPL_ATTR_CONST()
/**
 * Classifies the  given ID, then  sees if it is  a global variable.   A global
 * variable must start with `$`.
 *
 * @param[in]  id  An id to classify.
 * @retval     1   It is a global variable.
 * @retval     0   It isn't.
 */
int rb_is_global_id(ID id);

RBIMPL_ATTR_CONST()
/**
 * Classifies  the given  ID, then  sees  if it  is an  instance variable.   An
 * instance variable must start with `@`, but not `@@`.
 *
 * @param[in]  id  An id to classify.
 * @retval     1   It is an instance variable.
 * @retval     0   It isn't.
 */
int rb_is_instance_id(ID id);

RBIMPL_ATTR_CONST()
/**
 * Classifies  the given  ID,  then sees  if  it is  an  attribute writer.   An
 * attribute writer is otherwise a local variable, except it ends with `=`.
 *
 * @param[in]  id  An id to classify.
 * @retval     1   It is an attribute writer.
 * @retval     0   It isn't.
 */
int rb_is_attrset_id(ID id);

RBIMPL_ATTR_CONST()
/**
 * Classifies the  given ID,  then sees  if it  is a  class variable.   A class
 * variable is must start with `@@`.
 *
 * @param[in]  id  An id to classify.
 * @retval     1   It is a class variable.
 * @retval     0   It isn't.
 */
int rb_is_class_id(ID id);

RBIMPL_ATTR_CONST()
/**
 * Classifies the  given ID,  then sees  if it  is a  local variable.   A local
 * variable starts  with a lowercase  character, followed by  some alphanumeric
 * characters or `_`, then ends with anything other than `!`, `?`, or `=`.
 *
 * @param[in]  id  An id to classify.
 * @retval     1   It is a local variable.
 * @retval     0   It isn't.
 */
int rb_is_local_id(ID id);

RBIMPL_ATTR_CONST()
/**
 * Classifies the  given ID,  then sees  if it  is a  junk ID.   An ID  with no
 * special syntactic structure is considered  junk.  This category includes for
 * instance punctuation.
 *
 * @param[in]  id  An id to classify.
 * @retval     1   It is a junk.
 * @retval     0   It isn't.
 */
int rb_is_junk_id(ID);

RBIMPL_ATTR_NONNULL(())
/**
 * Sees if  the passed C string  constructs a valid syntactic  symbol.  Invalid
 * ones for instance includes whitespaces.
 *
 * @param[in]  str  A C string to check.
 * @retval     1    It is a valid symbol name.
 * @retval     0    It is invalid as a symbol name.
 */
int rb_symname_p(const char *str);

/* vm.c */

/**
 * Queries the last match, or `Regexp.last_match`, or the `$~`.  You don't have
 * to use it, because in reality you can get `$~` using rb_gv_get() as usual.
 *
 * @retval  RUBY_Qnil  The method has not ran a regular expression.
 * @retval  otherwise  An instance of ::rb_cMatch.
 */
VALUE rb_backref_get(void);

/**
 * Updates `$~`.  You don't have to use it, because in reality you can set `$~`
 * using rb_gv_set() as usual.
 *
 * @param[in]  md  Arbitrary Ruby object.
 * @post       The passed object is assigned to `$~`.
 *
 * @internal
 *
 * Yes, this  function bypasses  the Check_Type()  that would  normally prevent
 * evil souls from assigning  evil objects to `$~`.  Use of  this function is a
 * really bad smell.
 */
void rb_backref_set(VALUE md);

/**
 * Queries the last  line, or the `$_`.   You don't have to use  it, because in
 * reality you can get `$_` using rb_gv_get() as usual.
 *
 * @retval  RUBY_Qnil  There has never been a "line" yet.
 * @retval  otherwise  The last set `$_` value.
 */
VALUE rb_lastline_get(void);

/**
 * Updates `$_`.  You don't have to use it, because in reality you can set `$_`
 * using rb_gv_set() as usual.
 *
 * @param[in]  str  Arbitrary Ruby object.
 * @post       The passed object is assigned to `$_`.
 *
 * @internal
 *
 * Unlike `$~`, you can assign non-strings to `$_`, even from ruby scripts.
 */
void rb_lastline_set(VALUE str);

/* symbol.c */

/**
 * Collects every single bits of symbols  that have ever interned in the entire
 * history of the current process.
 *
 * @return  An array that contains all symbols that have ever existed.
 */
VALUE rb_sym_all_symbols(void);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_PARSE_H */
PK*J[>xu�)�)#include/ruby/internal/intern/load.hnu�[���#ifndef  RBIMPL_INTERN_LOAD_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define  RBIMPL_INTERN_LOAD_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_f_require().
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* load.c */

/**
 * Loads and executes the Ruby program in the given file.
 *
 * If the path is  an absolute path (e.g. starts with `'/'`),  the file will be
 * loaded  directly using  the  absolute  path.  If  the  path  is an  explicit
 * relative path (e.g. starts with `'./'`  or `'../'`), the file will be loaded
 * using the  relative path  from the current  directory.  Otherwise,  the file
 * will be searched for in the  library directories listed in the `$LOAD_PATH`.
 * If the file is found in a  directory, this function will attempt to load the
 * file relative  to that directory.  If  the file is  not found in any  of the
 * directories in the `$LOAD_PATH`, the file  will be loaded using the relative
 * path from the current directory.
 *
 * If the file doesn't  exist when there is an attempt to  load it, a LoadError
 * will be raised.
 *
 * If the `wrap` parameter is true, the loaded script will be executed under an
 * anonymous module, protecting the calling  program's global namespace.  In no
 * circumstance will  any local variables in  the loaded file be  propagated to
 * the loading environment.
 *
 * @param[in]  path                Pathname of a file to load.
 * @param[in]  wrap                Either to load under an anonymous module.
 * @exception  rb_eTypeError       `path` is not a string.
 * @exception  rb_eArgError        `path` is broken as a pathname.
 * @exception  rb_eEncCompatError  `path` is incompatible with pathnames.
 * @exception  rb_eLoadError       `path` not found.
 * @exception  rb_eException       Any exceptions while loading the contents.
 *
 * @internal
 *
 * It seems this function is under the rule of bootsnap's regime?
 */
void rb_load(VALUE path, int wrap);

/**
 * Identical to  rb_load(), except  it avoids  potential global  escapes.  Such
 * global escapes include exceptions, `throw`, `break`, for example.
 *
 * It first  evaluates the given file  as rb_load() does.  If  no global escape
 * occurred  during the  evaluation,  it `*state`  is set  to  zero on  return.
 * Otherwise, it sets `*state`  to nonzero.  If state is `NULL`,  it is not set
 * in both cases.
 *
 * @param[in]   path   Pathname of a file to load.
 * @param[in]   wrap   Either to load under an anonymous module.
 * @param[out]  state  State of execution.
 * @post        `*state` is set to zero if succeeded.  Nonzero otherwise.
 * @warning     You have to clear the error info with `rb_set_errinfo(Qnil)` if
 *              you decide to ignore the caught exception.
 * @see         rb_load
 * @see         rb_protect
 *
 * @internal
 *
 * Though   not  a   part  of   our  public   API,  `state`   is  in   fact  an
 * enum ruby_tag_type.  You can  see the potential "nonzero"  values by looking
 * at vm_core.h.
 */
void rb_load_protect(VALUE path, int wrap, int *state);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries if  the given  feature has  already been  loaded into  the execution
 * context.  The "feature" head are things like `"json"` or `"socket"`.
 *
 * @param[in]  feature  Name of a library you want to know about.
 * @retval     1        Yes there is.
 * @retval     0        Not yet.
 */
int rb_provided(const char *feature);

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical to  rb_provided(), except it additionally  returns the "canonical"
 * name of the loaded feature.  This can be handy when for instance you want to
 * know the actually loaded library is either `foo.rb` or `foo.so`.
 *
 * @param[in]   feature  Name of a library you want to know about.
 * @param[out]  loading  Return buffer.
 * @retval      1        Yes there is.
 * @retval      0        Not yet.
 */
int rb_feature_provided(const char *feature, const char **loading);

RBIMPL_ATTR_NONNULL(())
/**
 * Declares that the  given feature is already provided by  someone else.  This
 * API can  be handy  when you  have an extension  called `foo.so`  which, when
 * required, also provides functionality of `bar.so`.
 *
 * @param[in]  feature  Name of a library which had already been provided.
 * @post       No further `require` would search `feature`.
 */
void rb_provide(const char *feature);

/**
 * Identical to rb_require_string(),  except it ignores the  first argument for
 * no reason.  There seems to be no reason for 3rd party extension libraries to
 * use it.
 *
 * @param[in]  self              Ignored.  Can be anything.
 * @param[in]  feature           Name of a feature, e.g. `"json"`.
 * @exception  rb_eLoadError     No such feature.
 * @exception  rb_eRuntimeError  `$"` is frozen; unable to push.
 * @retval     RUBY_Qtrue        The feature is loaded for the first time.
 * @retval     RUBY_Qfalse       The feature has already been loaded.
 * @post       `$"` is updated.
 */
VALUE rb_f_require(VALUE self, VALUE feature);

/**
 * Finds and loads the given feature, if absent.
 *
 * If the  feature is an  absolute path (e.g.  starts with `'/'`),  the feature
 * will  be loaded  directly using  the absolute  path.  If  the feature  is an
 * explicit relative  path (e.g.  starts with `'./'`  or `'../'`),  the feature
 * will  be  loaded  using  the  relative  path  from  the  current  directory.
 * Otherwise,  the feature  will be  searched  for in  the library  directories
 * listed in the `$LOAD_PATH`.
 *
 * If the feature has the extension `".rb"`,  it is loaded as a source file; if
 * the extension is `".so"`, `".o"`, or `".dll"`, or the default shared library
 * extension on the  current platform, Ruby loads the shared  library as a Ruby
 * extension.  Otherwise, Ruby tries adding `".rb"`,  `".so"`, and so on to the
 * name until found.   If the file named  cannot be found, a  LoadError will be
 * raised.
 *
 * For  extension  libraries the  given  feature  may  use any  shared  library
 * extension.  For example, on Linux you can require `"socket.dll"` to actually
 * load `socket.so`.
 *
 * The absolute path of the loaded file is added to `$LOADED_FEATURES`.  A file
 * will not be loaded again if its path already appears in there.
 *
 * Any constants or globals within the  loaded source file will be available in
 * the calling program's  global namespace.  However, local  variables will not
 * be propagated to the loading environment.
 *
 * @param[in]  feature           Name of a feature, e.g. `"json"`.
 * @exception  rb_eLoadError     No such feature.
 * @exception  rb_eRuntimeError  `$"` is frozen; unable to push.
 * @retval     RUBY_Qtrue        The feature is loaded for the first time.
 * @retval     RUBY_Qfalse       The feature has already been loaded.
 * @post       `$"` is updated.
 */
VALUE rb_require_string(VALUE feature);

/**
 * Resolves  and  returns  a symbol  of  a  function  in  the  native extension
 * specified by the feature and symbol names. Extensions will use this function
 * to access the symbols provided by other native extensions.
 *
 * @param[in]  feature           Name of a feature, e.g. `"json"`.
 * @param[in]  symbol            Name of a symbol defined by the feature.
 * @return     The resolved symbol of  a function, defined and externed  by the
 *             specified feature.  It may be NULL if the feature is not loaded,
 *             the feature is not extension, or the symbol is not found.
 */
void *rb_ext_resolve_symbol(const char *feature, const char *symbol);

/**
 * This macro  is  to provide  backwards compatibility.  It provides  a  way to
 * define function prototypes and resolving function symbols in a safe way.
 *
 * ```CXX
 * // prototypes
 * #ifdef HAVE_RB_EXT_RESOLVE_SYMBOL
 * VALUE *(*other_extension_func)(VALUE,VALUE);
 * #else
 * VALUE other_extension_func(VALUE);
 * #endif
 *
 * // in Init_xxx()
 * #ifdef HAVE_RB_EXT_RESOLVE_SYMBOL
 * other_extension_func = \
 *     (VALUE(*)(VALUE,VALUE))rb_ext_resolve_symbol(fname, sym_name);
 * if (other_extension_func == NULL) {
 *   // raise your own error
 * }
 * #endif
 * ```
 */
#define HAVE_RB_EXT_RESOLVE_SYMBOL 1

/**
 * @name extension configuration
 * @{
 */

/**
 * Asserts that  the extension  library that  calls this  function is  aware of
 * Ractor.  Multiple Ractors  run without protecting each  other.  This doesn't
 * interface  well   with  C  programs,   unless  designed  with   an  in-depth
 * understanding of  how Ractors work.   Extension libraries are shut  out from
 * Ractors by default.  This API is  to bypass that restriction.  Once after it
 * was called,  successive calls to rb_define_method()  etc. become definitions
 * of methods  that are  aware of  Ractors.  The amendment  would be  in effect
 * until the end of rb_require_string() etc.
 *
 * @param[in]  flag  Either the library is aware of Ractors or not.
 * @post       Methods would be callable form Ractors, if `flag` is true.
 */
void rb_ext_ractor_safe(bool flag);

/** @alias{rb_ext_ractor_safe} */
#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f)

/**
 * This macro  is to provide  backwards compatibility.  It  must be safe  to do
 * something like:
 *
 * ```CXX
 * #ifdef HAVE_RB_EXT_RACTOR_SAFE
 * rb_ext_ractor_safe(true);
 * #endif
 * ```
 */
#define HAVE_RB_EXT_RACTOR_SAFE 1

/** @} */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_LOAD_H */
PK*J[?��
�>�>$include/ruby/internal/intern/class.hnu�[���#ifndef RBIMPL_INTERN_CLASS_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_CLASS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cClass/::rb_cModule.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/backward/2/stdarg.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* class.c */

/**
 * Creates a new, anonymous class.
 *
 * @param[in]  super          What would become a parent class.
 * @exception  rb_eTypeError  `super` is not something inheritable.
 * @return     An anonymous class that inherits `super`.
 */
VALUE rb_class_new(VALUE super);

/**
 * The comment  that comes with  this function  says `:nodoc:`.  Not  sure what
 * that means though.
 *
 * @param[out]  clone          Destination object.
 * @param[in]   orig           Source object.
 * @exception   rb_eTypeError  Cannot copy `orig`.
 * @return      The passed `clone`.
 */
VALUE rb_mod_init_copy(VALUE clone, VALUE orig);

/**
 * Asserts that  the given class  can derive a child  class.  A class  might or
 * might not be able to do so; for instance a singleton class cannot.
 *
 * @param[in]  super          Possible super class.
 * @exception  rb_eTypeError  No it cannot.
 * @post       Upon successful return `super` can derive.
 */
void rb_check_inheritable(VALUE super);

/**
 * This is a very badly designed API that creates an anonymous class.
 *
 * @param[in]  id             Discarded for no reason (why...).
 * @param[in]  super          What  would  become  a  parent  class.   0  means
 *                            ::rb_cObject.
 * @exception  rb_eTypeError  `super` is not something inheritable.
 * @return     An anonymous class that inherits `super`.
 * @warning    You must explicitly name the return value.
 */
VALUE rb_define_class_id(ID id, VALUE super);

/**
 * Identical  to rb_define_class_under(),  except  it takes  the  name in  ::ID
 * instead of C's string.
 *
 * @param[out]  outer          A class which contains the new class.
 * @param[in]   id             Name of the new class
 * @param[in]   super          A class from which the new class will derive.
 *                             0 means ::rb_cObject.
 * @exception   rb_eTypeError  The constant name `id`  is already taken but the
 *                             constant is not a class.
 * @exception   rb_eTypeError  The class  is already defined but  the class can
 *                             not be  reopened because  its superclass  is not
 *                             `super`.
 * @exception   rb_eArgError   `super` is NULL.
 * @return      The created class.
 * @post        `outer::id` refers the returned class.
 * @note        If a class named `id` is  already defined and its superclass is
 *              `super`, the function just returns the defined class.
 * @note        The GC does not collect nor move classes returned by this
 *              function. They are immortal.
 */
VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super);

/**
 * Creates a new, anonymous module.
 *
 * @return An anonymous module.
 */
VALUE rb_module_new(void);


/**
 * Creates a new, anonymous refinement.
 *
 * @return An anonymous refinement.
 */
VALUE rb_refinement_new(void);

/**
 * This is a very badly designed API that creates an anonymous module.
 *
 * @param[in]  id  Discarded for no reason (why...).
 * @return     An anonymous module.
 * @warning    You must explicitly name the return value.
 */
VALUE rb_define_module_id(ID id);

/**
 * Identical  to rb_define_module_under(),  except it  takes the  name in  ::ID
 * instead of C's string.
 *
 * @param[out]  outer          A class which contains the new module.
 * @param[in]   id             Name of the new module
 * @exception   rb_eTypeError  The constant name `id`  is already taken but the
 *                             constant is not a module.
 * @return      The created module.
 * @post        `outer::id` refers the returned module.
 * @note        The GC does not collect nor move classes returned by this
 *              function. They are immortal.
 */
VALUE rb_define_module_id_under(VALUE outer, ID id);

/**
 * Queries the list of  included modules.  It can also be seen  as a routine to
 * first  call rb_mod_ancestors(),  then  rejects non-modules  from the  return
 * value.
 *
 * @param[in]  mod  Class or Module.
 * @return     An array of modules that are either included or prepended in any
 *             of `mod`'s ancestry tree (including itself).
 */
VALUE rb_mod_included_modules(VALUE mod);

/**
 * Queries if the passed module is included by the module.  It can also be seen
 * as a routine to first call rb_mod_included_modules(), then see if the return
 * value contains the passed module.
 *
 * @param[in]  child          A Module.
 * @param[in]  parent         Another Module.
 * @exception  rb_eTypeError  `child` is not an instance of ::rb_cModule.
 * @retval     RUBY_Qtrue     `parent` is  either included or prepended  in any
 *                            of `child`'s ancestry tree (including itself).
 * @return     RUBY_Qfalse    Otherwise.
 */
VALUE rb_mod_include_p(VALUE child, VALUE parent);

/**
 * Queries the  module's ancestors.  This routine gathers classes  and modules
 * that  the  passed  module  either  inherits,  includes,  or  prepends,  then
 * recursively applies  that routine again  and again to the  collected entries
 * until the list doesn't grow up.
 *
 * @param[in]  mod  A module or a class.
 * @return     An array of  classes or modules that  `mod` possibly recursively
 *             inherits, includes, or prepends.
 *
 * @internal
 *
 * Above description  is written  in a  recursive language  but in  practice it
 * computes the return value iteratively.
 */
VALUE rb_mod_ancestors(VALUE mod);

/**
 * Queries the class's descendants. This  routine gathers classes that are
 * subclasses of the given class (or subclasses of those subclasses, etc.),
 * returning an array of classes that have the given class as an ancestor.
 * The returned array does not include the given class or singleton classes.
 *
 * @param[in]  klass A class.
 * @return     An array of classes where `klass` is an ancestor.
 *
 * @internal
 */
VALUE rb_class_descendants(VALUE klass);

/**
 * Queries the class's direct descendants. This  routine gathers classes that are
 * direct subclasses of the given class,
 * returning an array of classes that have the given class as a superclass.
 * The returned array does not include singleton classes.
 *
 * @param[in]  klass A class.
 * @return     An array of classes where `klass` is the `superclass`.
 *
 * @internal
 */
VALUE rb_class_subclasses(VALUE klass);


/**
 *  Returns the attached object for a singleton class.
 *  If the given class is not a singleton class, raises a TypeError.
 *
 * @param[in]  klass A class.
 * @return     The object which has the singleton class `klass`.
 *
 * @internal
 */
VALUE rb_class_attached_object(VALUE klass);

/**
 * Generates an array of symbols, which are the list of method names defined in
 * the passed class.
 *
 * @param[in]  argc          Number of objects of `argv`.
 * @param[in]  argv          Array of  at most  one object, which  controls (if
 *                           any) whether  the return array includes  the names
 *                           of methods defined in ancestors or not.
 * @param[in]  mod           A module or a class.
 * @exception  rb_eArgError  `argc` out of range.
 * @return     An array  of symbols collecting  names of instance  methods that
 *             are not private, defined at `mod`.
 */
VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod);

/**
 * Identical to rb_class_instance_methods(), except it returns names of methods
 * that are public only.
 *
 * @param[in]  argc          Number of objects of `argv`.
 * @param[in]  argv          Array of  at most  one object, which  controls (if
 *                           any) whether  the return array includes  the names
 *                           of methods defined in ancestors or not.
 * @param[in]  mod           A module or a class.
 * @exception  rb_eArgError  `argc` out of range.
 * @return     An array  of symbols collecting  names of instance  methods that
 *             are public, defined at `mod`.
 */
VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod);

/**
 * Identical to rb_class_instance_methods(), except it returns names of methods
 * that are protected only.
 *
 * @param[in]  argc          Number of objects of `argv`.
 * @param[in]  argv          Array of  at most  one object, which  controls (if
 *                           any) whether  the return array includes  the names
 *                           of methods defined in ancestors or not.
 * @param[in]  mod           A module or a class.
 * @exception  rb_eArgError  `argc` out of range.
 * @return     An array  of symbols collecting  names of instance  methods that
 *             are protected, defined at `mod`.
 */
VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod);

/**
 * Identical to rb_class_instance_methods(), except it returns names of methods
 * that are private only.
 *
 * @param[in]  argc          Number of objects of `argv`.
 * @param[in]  argv          Array of  at most  one object, which  controls (if
 *                           any) whether  the return array includes  the names
 *                           of methods defined in ancestors or not.
 * @param[in]  mod           A module or a class.
 * @exception  rb_eArgError  `argc` out of range.
 * @return     An array  of symbols collecting  names of instance  methods that
 *             are protected, defined at `mod`.
 */
VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod);

/**
 * Identical  to  rb_class_instance_methods(),  except   it  returns  names  of
 * singleton methods instead of instance methods.
 *
 * @param[in]  argc          Number of objects of `argv`.
 * @param[in]  argv          Array of  at most  one object, which  controls (if
 *                           any) whether  the return array includes  the names
 *                           of methods defined in ancestors or not.
 * @param[in]  obj           Arbitrary ruby object.
 * @exception  rb_eArgError  `argc` out of range.
 * @return     An array  of symbols collecting  names of instance  methods that
 *             are not private, defined at the singleton class of `obj`.
 */
VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj);

/**
 * Identical to rb_define_method(),  except it takes the name of  the method in
 * ::ID instead of C's string.
 *
 * @param[out]  klass  A module or a class.
 * @param[in]   mid    Name of the function.
 * @param[in]   func   The method body.
 * @param[in]   arity  The number of parameters.  See @ref defmethod.
 * @note        There are in fact 18 different prototypes for func.
 * @see         ::ruby::backward::cxxanyargs::define_method::rb_define_method_id
 */
void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int arity);

/* vm_method.c */

/**
 * Inserts a  method entry that hides  previous method definition of  the given
 * name.  This is not a deletion of  a method.  Method of the same name defined
 * in a parent class is kept invisible in this way.
 *
 * @param[out]  mod              The module to insert an undef.
 * @param[in]   mid              Name of the undef.
 * @exception   rb_eTypeError    `klass` is a non-module.
 * @exception   rb_eFrozenError  `klass` is frozen.
 * @exception   rb_eNameError    No such method named `klass#name`.
 * @post        `klass#name` is undefined.
 * @see         rb_undef_method
 *
 * @internal
 *
 * @shyouhei doesn't  understand why this  is not  the ::ID -taking  variant of
 * rb_undef_method(), given rb_remove_method() has its ::ID -taking counterpart
 * named rb_remove_method_id().
 */
void rb_undef(VALUE mod, ID mid);

/* class.c */

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_define_method(), except it defines a protected method.
 *
 * @param[out]  klass  A module or a class.
 * @param[in]   mid    Name of the function.
 * @param[in]   func   The method body.
 * @param[in]   arity  The number of parameters.  See @ref defmethod.
 * @note        There are in fact 18 different prototypes for func.
 * @see         ::ruby::backward::cxxanyargs::define_method::rb_define_protected_method
 */
void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_define_method(), except it defines a private method.
 *
 * @param[out]  klass  A module or a class.
 * @param[in]   mid    Name of the function.
 * @param[in]   func   The method body.
 * @param[in]   arity  The number of parameters.  See @ref defmethod.
 * @note        There are in fact 18 different prototypes for func.
 * @see         ::ruby::backward::cxxanyargs::define_method::rb_define_protected_method
 */
void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_define_method(), except it defines a singleton method.
 *
 * @param[out]  obj    Arbitrary ruby object.
 * @param[in]   mid    Name of the function.
 * @param[in]   func   The method body.
 * @param[in]   arity  The number of parameters.  See @ref defmethod.
 * @note        There are in fact 18 different prototypes for func.
 * @see         ::ruby::backward::cxxanyargs::define_method::rb_define_singleton_method
 */
void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(ANYARGS), int arity);

/**
 * Finds or creates the singleton class of the passed object.
 *
 * @param[out]  obj            Arbitrary ruby object.
 * @exception   rb_eTypeError  `obj` cannot have its singleton class.
 * @return      A (possibly newly allocated) instance of ::rb_cClass.
 * @post        `obj` has its singleton class, which is the return value.
 * @post        In case `obj` is a class, the returned singleton class also has
 *              its own  singleton class  in order to  keep consistency  of the
 *              inheritance structure of metaclasses.
 * @note        A new  singleton class will  be created  if `obj` did  not have
 *              one.
 * @note        The  singleton  classes   for  ::RUBY_Qnil,  ::RUBY_Qtrue,  and
 *              ::RUBY_Qfalse   are    ::rb_cNilClass,   ::rb_cTrueClass,   and
 *              ::rb_cFalseClass respectively.
 *
 * @internal
 *
 * You can _create_ a singleton class of a frozen object.  Intentional or ...?
 *
 * Nowadays there are wider range of  objects who cannot have singleton classes
 * than before.  For instance some string instances cannot for some reason.
 */
VALUE rb_singleton_class(VALUE obj);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_CLASS_H */
PK*J[o*}00%include/ruby/internal/intern/random.hnu�[���#ifndef RBIMPL_INTERN_RANDOM_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_RANDOM_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      MT19937 backended pseudo random number generator.
 * @see        Matsumoto,  M.,   Nishimura,  T.,  "Mersenne  Twister:   A  623-
 *             dimensionally   equidistributed   uniform  pseudorandom   number
 *             generator", ACM  Trans. on  Modeling and Computer  Simulation, 8
 *             (1): pp 3-30, 1998.  https://doi.org/10.1145/272991.272995
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* random.c */

/**
 * Generates a 32 bit random number.
 *
 * @return  A random number.
 * @note    Now  that  we  have  ractors,  the  RNG  behind  this  function  is
 *          per-ractor.
 */
unsigned int rb_genrand_int32(void);

/**
 * Generates a `double` random number.
 *
 * @return  A random number.
 * @note    This function shares the RNG with rb_genrand_int32().
 */
double rb_genrand_real(void);

/**
 * Resets the RNG behind rb_genrand_int32()/rb_genrand_real().
 *
 * @post  The (now per-ractor) default RNG's internal state is cleared.
 */
void rb_reset_random_seed(void);

/**
 * Generates a String of random bytes.
 *
 * @param[in,out]  rnd  An instance of ::rb_cRandom.
 * @param[in]      n    Requested number of bytes.
 * @return         An instance of ::rb_cString, of binary, of `n` bytes length,
 *                 whose contents are random bits.
 *
 * @internal
 *
 * @shyouhei doesn't know if this is an  Easter egg or an official feature, but
 * this function can  take a wider range of objects,  such as `Socket::Ifaddr`.
 * The arguments are just silently ignored and the default RNG is used instead,
 * if they are non-RNG.
 */
VALUE rb_random_bytes(VALUE rnd, long n);

/**
 * Identical to rb_genrand_int32(), except it generates using the passed RNG.
 *
 * @param[in,out]  rnd  An instance of ::rb_cRandom.
 * @return         A random number.
 */
unsigned int rb_random_int32(VALUE rnd);

/**
 * Identical to rb_genrand_real(), except it generates using the passed RNG.
 *
 * @param[in,out]  rnd  An instance of ::rb_cRandom.
 * @return         A random number.
 */
double rb_random_real(VALUE rnd);

/**
 * Identical  to  rb_genrand_ulong_limited(),  except it  generates  using  the
 * passed RNG.
 *
 * @param[in,out]  rnd    An instance of ::rb_cRandom.
 * @param[in]      limit  Max possible return value.
 * @return         A random number, distributed in `[0, limit]` interval.
 * @note           Note it can return `limit`.
 * @note           Whether  the  return  value  distributes  uniformly  in  the
 *                 interval or not depends on  how the argument RNG behaves; at
 *                 least in case of MT19937 it does.
 */
unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit);

/**
 * Generates a random number whose upper limit is `i`.
 *
 * @param[in]  i  Max possible return value.
 * @return     A random number, uniformly distributed in `[0, limit]` interval.
 * @note       Note it can return `i`.
 */
unsigned long rb_genrand_ulong_limited(unsigned long i);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_RANDOM_H */
PK*J[���A�A!include/ruby/internal/intern/vm.hnu�[���#ifndef RBIMPL_INTERN_VM_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_VM_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to rb_cRubyVM.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* vm.c */

/**
 * Resembles `__LINE__`.
 *
 * @retval  0          Current execution context not in a ruby method.
 * @retval  otherwise  The current  line number  of the  current thread  of the
 *                     current ractor of the current execution context.
 */
int rb_sourceline(void);

/**
 * Resembles `__FILE__`.
 *
 * @retval  0          Current execution context not in a ruby method.
 * @retval  otherwise  The current  source path  of the  current thread  of the
 *                     current ractor of the current execution context.
 * @note    This may or may not be an absolute path.
 */
const char *rb_sourcefile(void);

/**
 * Resembles `__method__`.
 *
 * @param[out]  idp     Return buffer for method id.
 * @param[out]  klassp  Return buffer for class.
 * @retval      0       Current execution context not in a method.
 * @retval      1       Successful return.
 * @post        Upon successful return `*idp` and `*klassp` are updated to have
 *              the current method name and its defined class respectively.
 * @note        Both parameters can be `NULL`.
 */
int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);

/* vm_eval.c */

/**
 * Identical  to  rb_funcallv(), except  it  returns  ::RUBY_Qundef instead  of
 * raising ::rb_eNoMethodError.
 *
 * @param[in,out]  recv         Receiver of the method.
 * @param[in]      mid          Name of the method to call.
 * @param[in]      argc         Number of arguments.
 * @param[in]      argv         Arbitrary number of method arguments.
 * @retval         RUBY_Qundef  `recv` doesn't respond to `mid`.
 * @retval         otherwise    What the method evaluates to.
 */
VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv);

/**
 * Identical to  rb_check_funcall(), except you  can specify how to  handle the
 * last element of the given array.  It can also be seen as a routine identical
 * to  rb_funcallv_kw(), except  it  returns ::RUBY_Qundef  instead of  raising
 * ::rb_eNoMethodError.
 *
 * @param[in,out]  recv         Receiver of the method.
 * @param[in]      mid          Name of the method to call.
 * @param[in]      argc         Number of arguments.
 * @param[in]      argv         Arbitrary number of method arguments.
 * @param[in]      kw_splat     Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @retval         RUBY_Qundef  `recv` doesn't respond to `mid`.
 * @retval         otherwise    What the method evaluates to.
 */
VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);

/**
 * This API  is practically a  variant of rb_proc_call_kw()  now.  Historically
 * when there  still was a  concept called `$SAFE`, this  was an API  for that.
 * But we  no longer have  that.  This function  basically ended its  role.  It
 * just remains here because of no harm.
 *
 * @param[in]  cmd       A string, or something callable.
 * @param[in]  arg       Argument passed to the call.
 * @param[in]  kw_splat  Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `arg`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `arg`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @return     What the command evaluates to.
 */
VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat);

/**
 * Identical to rb_funcallv(), except it takes Ruby's array instead of C's.
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      args               An instance of ::RArray.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 * @pre            `args` must  be an ::RArray.  Call  `to_ary` beforehand when
 *                 necessary.
 */
VALUE rb_apply(VALUE recv, ID mid, VALUE args);

/**
 * Evaluates a string  containing Ruby source code, or the  given block, within
 * the  context of  the receiver.  In order  to set  the context,  the variable
 * `self` is set to `recv` while the  code is executing, giving the code access
 * to `recv`'s instance variables and private methods.
 *
 * When given a block, `recv` is also passed in as the block's only argument.
 *
 * When  given a  string, the  optional second  and third  parameters supply  a
 * filename and starting  line number that are used  when reporting compilation
 * errors.
 *
 * @param[in]  argc  Number of objects in `argv`
 * @param[in]  argv  C array of 0 up to 3 elements.
 * @param[in]  recv  The object in question.
 * @return     What was evaluated.
 */
VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv);

/**
 * Executes the  given block within the  context of the receiver.   In order to
 * set the  context, the  variable `self` is  set to `recv`  while the  code is
 * executing, giving the code access to `recv`'s instance variables.  Arguments
 * are passed as block parameters.
 *
 * @param[in]  argc  Number of objects in `argv`
 * @param[in]  argv  Arbitrary parameters to be passed to the block.
 * @param[in]  recv  The object in question.
 * @return     What was evaluated.
 * @note       Don't  confuse   this  with  rb_obj_instance_eval().    The  key
 *             difference is whether  you can pass arbitrary  parameters to the
 *             block, like this:
 *
 * ```ruby
 * class Foo
 *   def initialize
 *     @foo = 5
 *   end
 * end
 * Foo.new.instance_exec(7) {|i| @foo + i } # => 12
 * ```
 */
VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv);

/**
 * Identical to rb_obj_instance_eval(), except  it evaluates within the context
 * of module.
 *
 * @param[in]  argc  Number of objects in `argv`
 * @param[in]  argv  C array of 0 up to 3 elements.
 * @param[in]  mod   The module in question.
 * @pre        `mod` must be a Module.
 * @return     What was evaluated.
 */
VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod);

/**
 * Identical to rb_obj_instance_exec(), except  it evaluates within the context
 * of module.
 *
 * @param[in]  argc  Number of objects in `argv`
 * @param[in]  argv  Arbitrary parameters to be passed to the block.
 * @param[in]  mod   The module in question.
 * @pre        `mod` must be a Module.
 * @return     What was evaluated.
 */
VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod);

/* vm_method.c */

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define HAVE_RB_DEFINE_ALLOC_FUNC 1

/**
 * This is  the type of  functions that ruby calls  when trying to  allocate an
 * object.  It is  sometimes necessary to allocate extra memory  regions for an
 * object.  When you define a class that uses ::RTypedData, it is typically the
 * case.  On  such situations  define a function  of this type  and pass  it to
 * rb_define_alloc_func().
 *
 * @param[in]  klass  The class that this function is registered.
 * @return     A newly allocated instance of `klass`.
 */
typedef VALUE (*rb_alloc_func_t)(VALUE klass);

/**
 * Sets the allocator function of a class.
 *
 * @param[out]  klass  The class to modify.
 * @param[in]   func   An allocator function for the class.
 * @pre         `klass` must be an instance of Class.
 */
void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func);

/**
 * Deletes the  allocator function of  a class.   It is sometimes  desirable to
 * restrict creation  of an instance of  a class.  For example  it rarely makes
 * sense for  a DB adaptor class  to allow programmers creating  DB row objects
 * without querying  the DB  itself.  You  can kill  sporadic creation  of such
 * objects then,  by nullifying  the allocator function  using this  API.
 *
 * @param[out]  klass  The class to modify.
 * @pre         `klass` must be an instance of Class.
 */
void rb_undef_alloc_func(VALUE klass);

/**
 * Queries the allocator function of a class.
 *
 * @param[in]  klass      The class in question.
 * @pre        `klass` must be an instance of Class.
 * @retval     0          No allocator function is registered.
 * @retval     otherwise  The allocator function.
 *
 * @internal
 *
 * Who cares?  @shyouhei finds no practical usage of the return value.  Maybe we
 * need KonMari.
 */
rb_alloc_func_t rb_get_alloc_func(VALUE klass);

/**
 * Clears the inline constant caches associated with a particular ID. Extension
 * libraries should not bother with such things. Just forget about this API (or
 * even, the presence of constant caches).
 */
void rb_clear_constant_cache_for_id(ID id);

/**
 * Resembles `alias`.
 *
 * @param[out]  klass            Where to define an alias.
 * @param[in]   dst              New name.
 * @param[in]   src              Existing name.
 * @exception   rb_eTypeError    `klass` is not a class.
 * @exception   rb_eFrozenError  `klass` is frozen.
 * @exception   rb_eNameError    No such method named `src`.
 * @post        `klass` has a method named `dst`, which is the identical to its
 *              method named `src`.
 */
void rb_alias(VALUE klass, ID dst, ID src);

/**
 * This function resembles now-deprecated `Module#attr`.
 *
 * @param[out]  klass              Where to define an attribute.
 * @param[in]   name               Name of an instance variable.
 * @param[in]   need_reader        Whether attr_reader is needed.
 * @param[in]   need_writer        Whether attr_writer is needed.
 * @param[in]   honour_visibility  Whether to use the current visibility.
 * @exception   rb_eTypeError      `klass` is not a class.
 * @exception   rb_eFrozenError    `klass` is frozen.
 * @post        If `need_reader` is set `klass` has a method named `name`.
 * @post        If `need_writer` is set `klass` has a method named `name=`.
 *
 * @internal
 *
 * The three `int` arguments should have been bool, but there was no such thing
 * like a bool when K&R was used in this project.
 */
void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility);

RBIMPL_ATTR_NONNULL(())
/**
 * Removes a  method.  Don't confuse  this to rb_undef_method(),  which doesn't
 * remove a method.  This one resembles `Module#remove_method`.
 *
 * @param[out]  klass            The class to remove a method.
 * @param[in]   name             Name of a method to be removed.
 * @exception   rb_eTypeError    `klass` is a non-module.
 * @exception   rb_eFrozenError  `klass` is frozen.
 * @exception   rb_eNameError    No such method.
 * @see         rb_undef_method
 */
void rb_remove_method(VALUE klass, const char *name);

/**
 * Identical to rb_remove_method(), except it accepts the method name as ::ID.
 *
 * @param[out]  klass            The class to remove a method.
 * @param[in]   mid              Name of a method to be removed.
 * @exception   rb_eTypeError    `klass` is a non-module.
 * @exception   rb_eFrozenError  `klass` is frozen.
 * @exception   rb_eNameError    No such method.
 * @see         rb_undef
 */
void rb_remove_method_id(VALUE klass, ID mid);

/**
 * Queries if the  klass has this method.   This function has only  one line of
 * document in the implementation that states "// deprecated".  Don't know what
 * that means though.
 *
 * @param[in]  klass  The class in question.
 * @param[in]  id     The method name to query.
 * @param[in]  ex     Undocumented magic value.
 * @retval     false  Method not found.
 * @retval     true   There is a method.
 * @pre        `klass` must be a module.
 *
 * @internal
 *
 * @shyouhei has no  motivation to describe what should be  passed to `ex`.  It
 * seems this function should just be trashed.
 */
int rb_method_boundp(VALUE klass, ID id, int ex);

/**
 * Well...  Let us hesitate from describing what a "basic definition" is.  This
 * nuanced concept  should have been  kept private.  Just please.   Don't touch
 * it.  This function is a badly distributed random number generator.  Right?
 *
 * @param[in]  klass  The class in question.
 * @param[in]  mid    The method name in question.
 * @retval     1      It is.
 * @retval     0      It isn't.
 */
int rb_method_basic_definition_p(VALUE klass, ID mid);

/**
 * Identical to  rb_respond_to(), except  it additionally takes  the visibility
 * parameter.   This   does  not   make  difference   unless  the   object  has
 * `respond_to?` undefined,  but has `respond_to_missing?` defined.   That case
 * the passed argument becomes the second argument of `respond_to_missing?`.
 *
 * @param[in]  obj        The object in question.
 * @param[in]  mid        The method name in question.
 * @param[in]  private_p  This    is   the    second   argument    of   `obj`'s
 *                        `respond_to_missing?`.
 * @retval     1          Yes it does.
 * @retval     0          No it doesn't.
 */
int rb_obj_respond_to(VALUE obj, ID mid, int private_p);

/**
 * Queries if  the object responds  to the  method.  This involves  calling the
 * object's `respond_to?` method.
 *
 * @param[in]  obj        The object in question.
 * @param[in]  mid        The method name in question.
 * @retval     1          Yes it does.
 * @retval     0          No it doesn't.
 */
int rb_respond_to(VALUE obj, ID mid);

RBIMPL_ATTR_NORETURN()
/**
 * Raises  ::rb_eNotImpError.   This  function  is   used  as  an  argument  to
 * rb_define_method() etc.
 *
 * ```CXX
 * rb_define_method(rb_cFoo, "foo", rb_f_notimplement, -1);
 * ```
 *
 * @param     argc             Unused parameter.
 * @param     argv             Unused parameter.
 * @param     obj              Unused parameter.
 * @param     marker           Unused parameter.
 * @exception rb_eNotImpError  Always.
 * @return    Never returns.
 *
 * @internal
 *
 * See also the Q&A section of include/ruby/internal/anyargs.h.
 */
VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker);
#if !defined(RUBY_EXPORT) && defined(_WIN32)
RUBY_EXTERN VALUE (*const rb_f_notimplement_)(int, const VALUE *, VALUE, VALUE marker);
#define rb_f_notimplement (*rb_f_notimplement_)
#endif

/* vm_backtrace.c */

/**
 * Prints the backtrace  out to the standard error.  This  just confuses people
 * for no reason.  Evil souls must only use it.
 *
 * @internal
 *
 * Actually it is very useful when called from an interactive GDB session.
 */
void rb_backtrace(void);

/**
 * Creates the good old fashioned array-of-strings style backtrace info.
 *
 * @return  An   array  which   contains   strings,  which   are  the   textual
 *          representations of the backtrace locations of the current thread of
 *          the current ractor of the current execution context.
 * @note    Ruby      scripts      can      access      more      sophisticated
 *          `Thread::Backtrace::Location`.  But it seems there  is no way for C
 *          extensions to use that API.
 */
VALUE rb_make_backtrace(void);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_VM_H */
PK*J[��Jii!include/ruby/internal/intern/io.hnu�[���#ifndef RBIMPL_INTERN_IO_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_IO_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cIO.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* io.c */

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define rb_defout rb_stdout

/* string.c */ /* ...why? moved in commit de7161526014b781468cea5d84411e23be */

/**
 * The field  separator character for  inputs, or  the `$;`.  This  affects how
 * `String#split` works.   You can set this  via the `-F` command  line option.
 * You can  also assign arbitrary  ruby objects programmatically, but  it makes
 * best sense for you to assign a regular expression here.
 *
 * @internal
 *
 * Tidbit: "fs" comes from AWK's `FS` variable.
 */
RUBY_EXTERN VALUE rb_fs;

/* io.c */ /* ...why? given rb_fs is in string.c? */

/**
 * The field  separator character for outputs,  or the `$,`.  This  affects how
 * `Array#join` works.
 *
 * @deprecated Assigning  anything other than  ::RUBY_Qnil to this  variable is
 *             deprecated.
 */
RUBY_EXTERN VALUE rb_output_fs;

/**
 * The record  separator character for inputs,  or the `$/`.  This  affects how
 * `IO#gets` works.  You can set this via the `-0` command line option.
 *
 * @deprecated Assigning  anything other than  ::RUBY_Qnil to this  variable is
 *             deprecated.
 *
 * @internal
 *
 * Tidbit: "rs" comes from AWK's `RS` variable.
 */
RUBY_EXTERN VALUE rb_rs;

/**
 * This is the default  value of ::rb_rs, i.e. `"\n"`.  It  seems it has always
 * been just a newline string since the beginning.  Not sure why C codes has to
 * use this, given there is no way for ruby programs to interface.
 *
 * Also it has not been deprecated for unknown reasons.
 */
RUBY_EXTERN VALUE rb_default_rs;

/**
 * The record separator  character for outputs, or the `$\`.   This affects how
 * `IO#print` works.
 *
 * @deprecated Assigning  anything other than  ::RUBY_Qnil to this  variable is
 *             deprecated.
 */
RUBY_EXTERN VALUE rb_output_rs;

/**
 * Writes the given string to the given IO.
 *
 * @param[out]  io                   An IO, opened for writing.
 * @param[in]   str                  A String-like object to write to `io`.
 * @exception   rb_eIOError          `io` isn't opened for writing.
 * @exception   rb_eFrozenError      `io` is frozen.
 * @exception   rb_eTypeError        No conversion from `str` to String.
 * @exception   rb_eSystemCallError  `write(2)` failed for some reason.
 * @return      The number of bytes written to the `io`.
 * @post        `str` (up to the length of return value) is written to `io`.
 * @note        This function blocks.
 * @note        Partial write is a thing.  It must be at least questionable not
 *              to check the return value.
 *
 * @internal
 *
 * Above description is  in fact inaccurate.  This function  can take arbitrary
 * objects, and  calls their  `write` method.   What is  written above  in fact
 * describes how `IO#write` works.  You can  pass StringIO etc. here, and would
 * work completely differently.
 */
VALUE rb_io_write(VALUE io, VALUE str);

/**
 * Reads a "line" from  the given IO.  A line here means  a chunk of characters
 * which is terminated by either `"\n"` or an EOF.
 *
 * @param[in,out]  io               An IO, opened for reading.
 * @exception      rb_eIOError      `io` isn't opened for reading.
 * @exception      rb_eFrozenError  `io` is frozen.
 * @retval         RUBY_Qnil        `io` is at EOF.
 * @retval         otherwise        An instance of ::rb_cString.
 * @post           `io` is read.
 * @note           Unlike `IO#gets` it doesn't set `$_`.
 * @note           Unlike `IO#gets` it doesn't consider `$/`.
 */
VALUE rb_io_gets(VALUE io);

/**
 * Reads a byte from the given IO.
 *
 * @note           In Ruby a "byte" always means  an 8 bit integer ranging from
 *                 0 to 255 inclusive.
 * @param[in,out]  io               An IO, opened for reading.
 * @exception      rb_eIOError      `io` is not opened for reading.
 * @exception      rb_eFrozenError  `io` is frozen.
 * @retval         RUBY_Qnil        `io` is at EOF.
 * @retval         otherwise        An instance of ::rb_cInteger.
 * @post           `io` is read.
 *
 * @internal
 *
 * Of course  there was a  function called  `rb_io_getc()`.  It was  removed in
 * commit a25fbe3b3e531bbe479f344af24eaf9d2eeae6ea.
 */
VALUE rb_io_getbyte(VALUE io);

/**
 * "Unget"s a  string.  This function  pushes back  the passed string  onto the
 * passed IO,  such that  a subsequent  buffered read will  return it.   If the
 * passed content  is in  fact an  integer, a single  character string  of that
 * codepoint of the encoding of the IO will be pushed back instead.
 *
 * It  might be  counter-intuitive but  this  function can  push back  multiple
 * characters at  once.  Also this function  can be called multiple  times on a
 * same IO.   Also a  "character" can be  wider than a  byte, depending  on the
 * encoding of the IO.
 *
 * @param[out]  io               An IO, opened for reading.
 * @param[in]   c                Either a String, or an Integer.
 * @exception   rb_eIOError      `io` is not opened for reading.
 * @exception   rb_eFrozenError  `io` is frozen.
 * @exception   rb_eTypeError    No conversion from `c` to ::rb_cString.
 * @return      Always returns ::RUBY_Qnil.
 *
 * @internal
 *
 * Why there is ungetc, given there is no getc?
 */
VALUE rb_io_ungetc(VALUE io, VALUE c);

/**
 * Identical  to rb_io_ungetc(),  except it  doesn't take  the encoding  of the
 * passed IO into account.  When an integer is passed, it just casts that value
 * to C's `unsigned char`, and pushes that back.
 *
 * @param[out]  io               An IO, opened for reading.
 * @param[in]   b                Either a String, or an Integer.
 * @exception   rb_eIOError      `io` is not opened for reading.
 * @exception   rb_eFrozenError  `io` is frozen.
 * @exception   rb_eTypeError    No conversion from `b` to ::rb_cString.
 * @return      Always returns ::RUBY_Qnil.
 */
VALUE rb_io_ungetbyte(VALUE io, VALUE b);

/**
 * Closes the IO.   Any buffered contents are flushed to  the operating system.
 * Any future operations against the IO would raise ::rb_eIOError.  In case the
 * io was created using `IO.popen`, it also sets the `$?`.
 *
 * @param[out]  io  Target IO to close.
 * @return      Always returns ::RUBY_Qnil.
 * @post        `$?` is set in case IO is a pipe.
 * @post        No operations are possible against `io` any further.
 * @note        This can block to flush the contents.
 * @note        This  can  wake other  threads  up,  especially those  who  are
 *              `select()`-ing the passed IO.
 * @note        Multiple invocations  of this function  over the same  IO again
 *              and again is not an error, since Ruby 2.3.
 *
 * @internal
 *
 * You can close a frozen IO... Is this intentional?
 */
VALUE rb_io_close(VALUE io);

/**
 * Flushes any buffered  data within the passed IO to  the underlying operating
 * system.
 *
 * @param[out]  io                   Target IO to flush.
 * @exception   rb_eIOError          `io` is closed.
 * @exception   rb_eFrozenError      `io` is frozen.
 * @exception   rb_eSystemCallError  `write(2)` failed for some reason.
 * @return      The passed `io`.
 * @post        `io`'s buffers are empty.
 * @note        This operation also discards the read buffer.  Should basically
 *              be harmless, but in an esoteric situation like when user pushed
 *              something  different from  what was  read using  `ungetc`, this
 *              operation in fact changes the behaviour of the `io`.
 * @note        Buffering is  difficult.  This operation flushes  the data from
 *              our userspace to  the kernel, but that doesn't  always mean you
 *              can expect them stored persistently onto your hard drive.
 */
VALUE rb_io_flush(VALUE io);

/**
 * Queries if the passed IO is at the end of file.  "The end of file" here mans
 * that there are  no more data to  read.  This function blocks  until the read
 * buffer is filled in, and if that operation reached the end of file, it still
 * returns  ::RUBY_Qfalse (because  there are  data  yet in  that buffer).   It
 * returns ::RUBY_Qtrue once after the buffer is cleared.
 *
 * @param[in,out]  io              Target io to query.
 * @exception      rb_eIOError     `io` is not opened for reading.
 * @exception      rb_eFrozenError  `io` is frozen.
 * @retval         RUBY_Qfalse     There are things yet to be read.
 * @retval         RUBY_Qtrue      "The end of file" situation.
 */
VALUE rb_io_eof(VALUE io);

/**
 * Sets the binmode.  This operation  nullifies the effect of textmode (newline
 * conversion from  `"\r\n"` to `"\n"`  or vice  versa).  Note that  it doesn't
 * stop character encodings conversions.  For instance an IO created using:
 *
 * ```ruby
 * File.open(
 *   "/dev/urandom",
 *   textmode: true,
 *   external_encoding: Encoding::GB18030,
 *   internal_encoding: Encoding::Windows_31J)
 * ```
 *
 * has both  newline and character  conversions.  If you  pass such IO  to this
 * function, only  the `textmode:true` part  is cancelled.  Texts  read through
 * the IO would still  be encoded in Windows-31J; texts written  to the IO will
 * be encoded in GB18030.
 *
 * @param[out]  io               Target IO to modify.
 * @exception   rb_eFrozenError  `io` is frozen.
 * @return      The passed `io`.
 * @post        `io` is in binmode.
 * @note        There is no equivalent operation in Ruby.  You can do this only
 *              in C.
 */
VALUE rb_io_binmode(VALUE io);

/**
 * Forces no conversions be applied  to the passed IO.  Unlike rb_io_binmode(),
 * this cancels any  newline conversions as well as  encoding conversions.  Any
 * texts read/written through the IO will be the verbatim binary contents.
 *
 * @param[out]  io               Target IO to modify.
 * @exception   rb_eFrozenError  `io` is frozen.
 * @return      The passed `io`.
 * @post        `io` is in binmode.  Both external/internal encoding are set to
 *              rb_ascii8bit_encoding().
 * @note        This is the implementation of `IO#binmode`.
 */
VALUE rb_io_ascii8bit_binmode(VALUE io);

/**
 * Identical to rb_io_write(), except it always returns the passed IO.
 *
 * @param[out]  io                   An IO, opened for writing.
 * @param[in]   str                  A String-like object to write to `io`.
 * @exception   rb_eIOError          `io` isn't opened for writing.
 * @exception   rb_eFrozenError      `io` is frozen.
 * @exception   rb_eTypeError        No conversion from `str` to String.
 * @exception   rb_eSystemCallError  `write(2)` failed.
 * @return      The passed `io`.
 * @post        `str` is written to `io`.
 * @note        This function blocks.
 *
 * @internal
 *
 * As rb_io_write(), above description is a fake.
 */
VALUE rb_io_addstr(VALUE io, VALUE str);

/**
 * This is a rb_f_sprintf() + rb_io_write() combo.
 *
 * @param[in]   argc                 Number of objects of `argv`.
 * @param[in]   argv                 A format string followed by its arguments.
 * @param[out]  io                   An IO, opened for writing.
 * @exception   rb_eIOError          `io` isn't opened for writing.
 * @exception   rb_eFrozenError      `io` is frozen.
 * @exception   rb_eTypeError        No conversion from `str` to String.
 * @exception   rb_eSystemCallError  `write(2)` failed.
 * @return      Always returns ::RUBY_Qnil.
 * @post        `argv` is formatted, then written to `io`.
 * @note        This function blocks.
 *
 * @internal
 *
 * As rb_io_write(), above descriptions include fakes.
 */
VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io);

/**
 * Iterates  over the  passed array  to apply  rb_io_write() individually.   If
 * there  is  `$,`,  this  function  inserts  the  string  in  middle  of  each
 * iterations.  If there is `$\`, this  function appends the string at the end.
 * If the array is empty, this function outputs `$_`.
 *
 * @param[in]   argc                 Number of objects of `argv`.
 * @param[in]   argv                 An array of strings to display.
 * @param[out]  io                   An IO, opened for writing.
 * @exception   rb_eIOError          `io` isn't opened for writing.
 * @exception   rb_eFrozenError      `io` is frozen.
 * @exception   rb_eTypeError        No conversion from `str` to String.
 * @exception   rb_eSystemCallError  `write(2)` failed.
 * @return      Always returns ::RUBY_Qnil.
 * @post        `argv` is written to `io`.
 * @note        This function blocks.
 * @note        This function calls rb_io_write() multiple times.  Which means,
 *              it is not  an atomic operation.  Outputs  from multiple threads
 *              can interleave.
 *
 * @internal
 *
 * As rb_io_write(), above descriptions include fakes.
 */
VALUE rb_io_print(int argc, const VALUE *argv, VALUE io);

/**
 * Iterates over the passed array  to apply rb_io_write() individually.  Unlike
 * rb_io_print(), this  function prints  a newline per  each element.   It also
 * flattens   the   passed   array   (OTOH  rb_io_print()   just   resorts   to
 * rb_ary_to_s()).
 *
 * @param[in]   argc                 Number of objects of `argv`.
 * @param[in]   argv                 An array of strings to display.
 * @param[out]  io                   An IO, opened for writing.
 * @exception   rb_eIOError          `io` isn't opened for writing.
 * @exception   rb_eFrozenError      `io` is frozen.
 * @exception   rb_eTypeError        No conversion from `str` to String.
 * @exception   rb_eSystemCallError  `write(2)` failed.
 * @return      Always returns ::RUBY_Qnil.
 * @post        `argv` is written to `io`.
 * @note        This function blocks.
 * @note        This function calls rb_io_write() multiple times.  Which means,
 *              it is not  an atomic operation.  Outputs  from multiple threads
 *              can interleave.
 *
 * @internal
 *
 * As rb_io_write(), above descriptions include fakes.
 */
VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io);

/**
 * Creates  an IO  instance  whose backend  is the  given  file descriptor.   C
 * extension libraries sometimes have file descriptors created elsewhere (maybe
 * deep inside  of another shared  library), which  they want ruby  programs to
 * handle.  This function is handy for such situations.
 *
 * @param[in]  fd     Target file descriptor.
 * @param[in]  flags  Flags, e.g. `O_CREAT|O_EXCL`
 * @param[in]  path   The path of the file that backs `fd`, for diagnostics.
 * @return     An allocated instance of ::rb_cIO with the autoclose flag set.
 * @note       Leave `path` NULL if you don't know.
 */
VALUE rb_io_fdopen(int fd, int flags, const char *path);

RBIMPL_ATTR_NONNULL(())
/**
 * Opens a file located at the given path.
 *
 * `fmode` is a C string that represents the open mode.  It can be one of:
 *
 *   - `r` (means `O_RDONLY`),
 *   - `w` (means `O_WRONLY | O_TRUNC | O_CREAT`),
 *   - `a` (means `O_WRONLY | O_APPEND | O_CREAT`),
 *
 *  Followed by zero or more combinations of:
 *
 *   - `b` (means `_O_BINARY`),
 *   - `t` (means `_O_TEXT`),
 *   - `+` (means `O_RDWR`),
 *   - `x` (means `O_TRUNC`), or
 *   - `:[BOM|]enc[:enc]` (see below).
 *
 * This  last  one   specifies  external  (and  internal   if  any)  encodings,
 * respectively.  If  optional `BOM|` is  specified and the  specified external
 * encoding is capable of expressing  BOMs, opening file's contents' byte order
 * is auto-detected using the mechanism.
 *
 * So for instance, fmode of `"rt|BOM:utf-16le:utf-8"` specifies that...
 *
 *   - the physical representation of the contents of the file is in UTF-16;
 *   - honours its BOM but assumes little endian if absent;
 *   - opens the file for reading;
 *   - what is read is converted into UTF-8;
 *   - with newlines cannibalised to `\n`.
 *
 * @param[in]  fname                Path to open.
 * @param[in]  fmode                Mode specifier much like `fopen(3)`.
 * @exception  rb_eArgError         `fmode` contradicted (e.g. `"bt"`).
 * @exception  rb_eSystemCallError  `open(2)` failed for some reason.
 * @return     An instance of ::rb_cIO.
 */
VALUE rb_file_open(const char *fname, const char *fmode);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_file_open(), except it takes the pathname as a Ruby's string
 * instead of C's.  In case the passed  Ruby object is a non-String it tries to
 * call `#to_path`.
 *
 * @param[in]  fname                Path to open.
 * @param[in]  fmode                Mode specifier much like `fopen(3)`.
 * @exception  rb_eTypeError        `fname` is not a String.
 * @exception  rb_eEncCompatError   `fname` is not ASCII-compatible.
 * @exception  rb_eArgError         `fmode` contradicted (e.g. `"bt"`).
 * @exception  rb_eSystemCallError  `open(2)` failed for some reason.
 * @return     An instance of ::rb_cIO.
 */
VALUE rb_file_open_str(VALUE fname, const char *fmode);

/**
 * Much like rb_io_gets(), but it reads  from the mysterious ARGF object.  ARGF
 * in this context can  be seen as a virtual IO  which concatenates contents of
 * the files passed to the process via the  ARGV, or just STDIN if there are no
 * such files.
 *
 * Unlike rb_io_gets() this function sets `$_`.
 *
 * @exception      rb_eFrozenError  ARGF resorts to STDIN but it is frozen.
 * @retval         RUBY_Qnil        ARGF is at EOF.
 * @retval         otherwise        An instance of ::rb_cString.
 * @post           ARGF is read.
 * @post           `$_` is set.
 *
 * @internal
 *
 * In reality, this function can call `ARGF.gets`.  Its redefinition can affect
 * the behaviour.
 *
 * Also, you can tamper ARGV on-the-fly in middle of ARGF usages:
 *
 * ```
 * gets                        # Reads the first file.
 * ARGV << '/proc/self/limits' # Adds a file.
 * gets                        # Can read from /proc/self/limits.
 * ```
 */
VALUE rb_gets(void);

RBIMPL_ATTR_NONNULL(())
/**
 * Writes the given error message to  somewhere applicable.  On Windows it goes
 * to the console.  On POSIX environments it goes to the standard error.
 *
 * @warning  IT IS  A BAD  IDEA to  use this function  form your  C extensions.
 *           It  is often  annoying when  GUI applications  write to  consoles;
 *           users  don't want  to look  at  there.  Programmers  also want  to
 *           control  the cause  of the  message  itself, like  by rescuing  an
 *           exception.  Just let ruby handle errors.  That must be better than
 *           going your own way.
 *
 * @param[in]  str  Error message to display.
 * @post       `str` is written to somewhere.
 *
 * @internal
 *
 * AFAIK this function  is listed here without marked  deprecated because there
 * are usages of this function in the wild.
 */
void rb_write_error(const char *str);

/**
 * Identical to  rb_write_error(), except  it additionally takes  the message's
 * length.  Necessary when you want to handle wide characters.
 *
 * @param[in]  str  Error message to display.
 * @param[in]  len  Length of `str`, in bytes.
 * @post       `str` is written to somewhere.
 */
void rb_write_error2(const char *str, long len);

/**
 * Closes everything.  In case of  POSIX environments, a child process inherits
 * its parent's opened  file descriptors.  Which is nowadays  considered as one
 * of the UNIX mistakes.  This function closes such inherited file descriptors.
 * When your C  extension needs to have  a child process, don't  forget to call
 * this from your child process right before exec.
 *
 * @param[in]  lowfd        Lower bound of FDs (you want STDIN to remain, no?).
 * @param[in]  maxhint      Hint of max FDs.
 * @param[in]  noclose_fds  A hash, whose keys are an allowlist.
 *
 * @internal
 *
 * As of writing, in  spite of the name, this function  does not actually close
 * anything.  It just  sets `FD_CLOEXEC` for everything and  let `execve(2)` to
 * atomically close them at once.  This is  because as far as we know there are
 * no such platform that has `fork(2)` but lacks `FD_CLOEXEC`.
 *
 * Because this function is expected to run  on a forked process it is entirely
 * async-signal-safe.
 */
void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);

RBIMPL_ATTR_NONNULL(())
/**
 * This is an rb_cloexec_pipe() + rb_update_max_fd() combo.
 *
 * @param[out]  pipes  Return buffer.  Must at least hold 2 elements.
 * @retval      0      Successful creation of a pipe.
 * @retval      -1     Failure in underlying system call(s).
 * @post        `pipes` is filled with file descriptors.
 * @post        `errno` is set on failure.
 */
int rb_pipe(int *pipes);

/**
 * Queries if the  given FD is reserved or not.   Occasionally Ruby interpreter
 * opens files  for its own  purposes.  Use  this function to  prevent touching
 * such behind-the-scene descriptors.
 *
 * @param[in]  fd  Target file descriptor.
 * @retval     1   `fd` is reserved.
 * @retval     0   Otherwise.
 */
int rb_reserved_fd_p(int fd);

/** @alias{rb_reserved_fd_p} */
#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)

/**
 * Opens a file  that closes on exec.   In case of POSIX  environments, a child
 * process inherits  its parent's opened  file descriptors.  Which  is nowadays
 * considered  as  one of  the  UNIX  mistakes.   This  function opens  a  file
 * descriptor  as  `open(2)` does,  but  additionally  instructs the  operating
 * system that we don't want it be seen from child processes.
 *
 * @param[in]  pathname   File path to open.
 * @param[in]  flags      Open mode, as in `open(2)`.
 * @param[in]  mode       File mode, in case of `O_CREAT`.
 * @retval     -1         `open(2)` failed for some reason.
 * @retval     otherwise  An allocated new file descriptor.
 * @note       This function does not raise.
 *
 * @internal
 *
 * Whether this function can take NULL or not depends on the underlying open(2)
 * system call implementation but @shyouhei doesn't think it's worth trying.
 */
int rb_cloexec_open(const char *pathname, int flags, mode_t mode);

/**
 * Identical to rb_cloexec_fcntl_dupfd(), except it implies minfd is 3.
 *
 * @param[in]  oldfd     File descriptor to duplicate.
 * @retval     -1        `dup2(2)` failed for some reason.
 * @retval     otherwise  An allocated new file descriptor.
 * @note       This function does not raise.
 */
int rb_cloexec_dup(int oldfd);

/**
 * Identical to rb_cloexec_dup(),  except you can specify  the destination file
 * descriptor.   If  the  destination  is  already  squatted  by  another  file
 * descriptor that gets silently closed without  any warnings.  (This is a spec
 * requested by POSIX.)
 *
 * @param[in]  oldfd  File descriptor to duplicate.
 * @param[in]  newfd  Return value destination.
 * @retval     -1     `dup2(2)` failed for some reason.
 * @retval     newfd  An allocated new file descriptor.
 * @post       Whatever sat at `newfd` gets closed with no notifications.
 * @post       In case return value is -1 `newfd` is untouched.
 * @note       This function does not raise.
 */
int rb_cloexec_dup2(int oldfd, int newfd);

RBIMPL_ATTR_NONNULL(())
/**
 * Opens a pipe with  closing on exec.  In case of  POSIX environments, a child
 * process inherits  its parent's opened  file descriptors.  Which  is nowadays
 * considered  as one  of the  UNIX mistakes.   This function  opens a  pipe as
 * `pipe(2)`  does, but  additionally instructs  the operating  system that  we
 * don't want the duplicated FDs be seen from child processes.
 *
 * @param[out]  fildes  Return buffer.  Must at least hold 2 elements.
 * @retval      0       Successful creation of a pipe.
 * @retval      -1      Failure in underlying system call(s).
 * @post        `pipes` is filled with file descriptors.
 * @post        `errno` is set on failure.
 */
int rb_cloexec_pipe(int fildes[2]);

/**
 * Duplicates  a file  descriptor  with  closing on  exec.   In  case of  POSIX
 * environments, a child process inherits its parent's opened file descriptors.
 * Which is  nowadays considered as  one of  the UNIX mistakes.   This function
 * duplicates a  file descriptor as  `dup(2)` does, but  additionally instructs
 * the operating system that we don't want the duplicated FD be seen from child
 * processes.
 *
 * @param[in]  fd         File descriptor to duplicate.
 * @param[in]  minfd      Minimum allowed FD to return.
 * @retval     -1         `dup(2)` failed for some reason.
 * @retval     otherwise  An allocated new file descriptor.
 * @note       This function does not raise.
 *
 * `minfd` is handy  when for instance STDERR  is closed but you  don't want to
 * use fd 2.
 */
int rb_cloexec_fcntl_dupfd(int fd, int minfd);

/**
 * Informs the interpreter that the passed fd can be the max.  This information
 * is used from rb_close_before_exec().
 *
 * @param[in]  fd  An open FD, which can be large.
 */
void rb_update_max_fd(int fd);

/**
 * Sets or clears  the close-on-exec flag of the passed  file descriptor to the
 * desired state.  STDIN,  STDOUT, STDERR are the  exceptional file descriptors
 * that shall  remain open.  All  others are  to be closed  on exec.  When  a C
 * extension  library  opens  a  file  descriptor  using  anything  other  than
 * rb_cloexec_open() etc., that file descriptor shall experience this function.
 *
 * @param[in]  fd  An open file descriptor.
 */
void rb_fd_fix_cloexec(int fd);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERN_IO_H */
PK*J[{C	��0�0)include/ruby/internal/intern/enumerator.hnu�[���#ifndef RBIMPL_INTERN_ENUMERATOR_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERN_ENUMERATOR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Public APIs related to ::rb_cEnumerator.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/intern/eval.h" /* rb_frame_this_func */
#include "ruby/internal/iterator.h"    /* rb_block_given_p */
#include "ruby/internal/symbol.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * This is the type of functions that rb_enumeratorize_with_size() expects.  In
 * theory an enumerator can have indefinite number of elements, but in practice
 * it often is  the case we can  compute the size of  an enumerator beforehand.
 * If your enumerator has such property, supply a function that calculates such
 * values.
 *
 * @param[in]  recv  The original receiver of the enumerator.
 * @param[in]  argv  Arguments passed to `Object#enum_for` etc.
 * @param[in]  eobj  The enumerator object.
 * @return     The size of `eobj`, in ::rb_cNumeric, or ::RUBY_Qnil if the size
 *             is not known until we actually iterate.
 */
typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj);

/**
 * Decomposed   `Enumerator::ArithmeicSequence`.   This   is   a  subclass   of
 * ::rb_cEnumerator,  which  represents  a  sequence  of  numbers  with  common
 * difference.  Internal  data structure of the  class is opaque to  users, but
 * you can obtain a decomposed one using rb_arithmetic_sequence_extract().
 */
typedef struct {
    VALUE begin;          /**< "Left" or "lowest" endpoint of the sequence. */
    VALUE end;            /**< "Right" or "highest" endpoint of the sequence.*/
    VALUE step;           /**< Step between a sequence. */
    int exclude_end;      /**< Whether the endpoint is open or closed.  */
} rb_arithmetic_sequence_components_t;

/* enumerator.c */

/**
 * Constructs an enumerator.  This roughly resembles `Object#enum_for`.
 *
 * @param[in]  recv           A receiver of `meth`.
 * @param[in]  meth           Method ID in a symbol object.
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Arguments passed to `meth`.
 * @exception  rb_eTypeError  `meth` is not an instance of ::rb_cSymbol.
 * @return     A  new   instance  of  ::rb_cEnumerator  which,   when  yielded,
 *             enumerates by calling `meth` on `recv` with `argv`.
 */
VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv);

/**
 * Identical  to rb_enumeratorize(),  except you  can additionally  specify the
 * size function of return value.
 *
 * @param[in]  recv           A receiver of `meth`.
 * @param[in]  meth           Method ID in a symbol object.
 * @param[in]  argc           Number of objects of `argv`.
 * @param[in]  argv           Arguments passed to `meth`.
 * @param[in]  func           Size calculator.
 * @exception  rb_eTypeError  `meth` is not an instance of ::rb_cSymbol.
 * @return     A  new   instance  of  ::rb_cEnumerator  which,   when  yielded,
 *             enumerates by calling `meth` on `recv` with `argv`.
 * @note       `func` can be zero, which means the size is unknown.
 */
VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func);

/**
 * Identical  to rb_enumeratorize_with_func(),  except you  can specify  how to
 * handle the last element of the given array.
 *
 * @param[in]  recv             A receiver of `meth`.
 * @param[in]  meth             Method ID in a symbol object.
 * @param[in]  argc             Number of objects of `argv`.
 * @param[in]  argv             Arguments passed to `meth`.
 * @param[in]  func             Size calculator.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eTypeError    `meth` is not an instance of ::rb_cSymbol.
 * @return     A  new   instance  of  ::rb_cEnumerator  which,   when  yielded,
 *             enumerates by calling `meth` on `recv` with `argv`.
 * @note       `func` can be zero, which means the size is unknown.
 */
VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat);

RBIMPL_ATTR_NONNULL(())
/**
 * Extracts components of the passed arithmetic  sequence.  This can be seen as
 * an extended version of rb_range_values().
 *
 * @param[in]   as   Target instance of `Enumerator::ArithmericSequence`.
 * @param[out]  buf  Decomposed results buffer.
 * @return      0    `as` is not `Enumerator::ArithmericSequence`.
 * @return      1    Success.
 * @post        `buf` is filled.
 */
int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical   to  rb_range_beg_len(),   except   it  takes   an  instance   of
 * `Enumerator::ArithmericSequence`.
 *
 * @param[in]   as              An `Enumerator::ArithmericSequence` instance.
 * @param[out]  begp            Return value buffer.
 * @param[out]  lenp            Return value buffer.
 * @param[out]  stepp           Return value buffer.
 * @param[in]   len             Updated length.
 * @param[in]   err             In case `len` is out of range...
 *                                - `0`: returns ::RUBY_Qnil.
 *                                - `1`: raises  ::rb_eRangeError.
 *                                - `2`: `beg` and `len` expanded accordingly.
 * @exception   rb_eRangeError  `as` cannot fit into `long`.
 * @retval      RUBY_Qfalse     `as` is not `Enumerator::ArithmericSequence`.
 * @retval      RUBY_Qnil       `len` is out of `as` but `err` is zero.
 * @retval      RUBY_Qtrue      Otherwise.
 * @post        `beg` is the (possibly updated) left endpoint.
 * @post        `len` is the (possibly updated) length of the range.
 *
 * @internal
 *
 * Currently no 3rd party applications of this function is found.  But that can
 * be because this function is relatively new.
 */
VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err);

RBIMPL_SYMBOL_EXPORT_END()

/** @cond INTERNAL_MACRO */
#ifndef RUBY_EXPORT
# define rb_enumeratorize_with_size(obj, id, argc, argv, size_fn) \
    rb_enumeratorize_with_size(obj, id, argc, argv, (rb_enumerator_size_func *)(size_fn))
# define rb_enumeratorize_with_size_kw(obj, id, argc, argv, size_fn, kw_splat) \
    rb_enumeratorize_with_size_kw(obj, id, argc, argv, (rb_enumerator_size_func *)(size_fn), kw_splat)
#endif
/** @endcond */

/**
 * This is  an implementation detail of  #RETURN_SIZED_ENUMERATOR().  You could
 * use it directly, but can hardly be handy.
 *
 * @param[in]  obj      A receiver.
 * @param[in]  argc     Number of objects of `argv`.
 * @param[in]  argv     Arguments passed to the current method.
 * @param[in]  size_fn  Size calculator.
 * @return     A  new   instance  of  ::rb_cEnumerator  which,   when  yielded,
 *             enumerates by calling the current method on `recv` with `argv`.
 */
#define SIZED_ENUMERATOR(obj, argc, argv, size_fn)                  \
    rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), \
                               (argc), (argv), (size_fn))

/**
 * This  is an  implementation  detail  of #RETURN_SIZED_ENUMERATOR_KW().   You
 * could use it directly, but can hardly be handy.
 *
 * @param[in]  obj              A receiver.
 * @param[in]  argc             Number of objects of `argv`.
 * @param[in]  argv             Arguments passed to the current method.
 * @param[in]  size_fn          Size calculator.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @return     A  new   instance  of  ::rb_cEnumerator  which,   when  yielded,
 *             enumerates by calling the current method on `recv` with `argv`.
 */
#define SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat)        \
    rb_enumeratorize_with_size_kw((obj), ID2SYM(rb_frame_this_func()), \
                                  (argc), (argv), (size_fn), (kw_splat))

/**
 * This roughly resembles `return enum_for(__callee__) unless block_given?`.
 *
 * @param[in]  obj      A receiver.
 * @param[in]  argc     Number of objects of `argv`.
 * @param[in]  argv     Arguments passed to the current method.
 * @param[in]  size_fn  Size calculator.
 * @note       This macro may return inside.
 */
#define RETURN_SIZED_ENUMERATOR(obj, argc, argv, size_fn) do {          \
        if (!rb_block_given_p())                                        \
            return SIZED_ENUMERATOR(obj, argc, argv, size_fn);          \
    } while (0)


/**
 * Identical  to  #RETURN_SIZED_ENUMERATOR(), except  you  can  specify how  to
 * handle the last element of the given array.
 *
 * @param[in]  obj              A receiver.
 * @param[in]  argc             Number of objects of `argv`.
 * @param[in]  argv             Arguments passed to the current method.
 * @param[in]  size_fn          Size calculator.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @note       This macro may return inside.
 */
#define RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat) do { \
        if (!rb_block_given_p())                                            \
            return SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat);              \
    } while (0)

/**
 * Identical to #RETURN_SIZED_ENUMERATOR(), except its size is unknown.
 *
 * @param[in]  obj   A receiver.
 * @param[in]  argc  Number of objects of `argv`.
 * @param[in]  argv  Arguments passed to the current method.
 * @note       This macro may return inside.
 */
#define RETURN_ENUMERATOR(obj, argc, argv) \
    RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)

/**
 * Identical to #RETURN_SIZED_ENUMERATOR_KW(), except  its size is unknown.  It
 * can also be seen as a  routine identical to #RETURN_ENUMERATOR(), except you
 * can specify how to handle the last element of the given array.
 *
 * @param[in]  obj              A receiver.
 * @param[in]  argc             Number of objects of `argv`.
 * @param[in]  argv             Arguments passed to the current method.
 * @param[in]  kw_splat         Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @note       This macro may return inside.
 */
#define RETURN_ENUMERATOR_KW(obj, argc, argv, kw_splat) \
    RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat)

#endif /* RBIMPL_INTERN_ENUMERATOR_H */
PK*J[�Ze��%�%#include/ruby/internal/interpreter.hnu�[���#ifndef RBIMPL_INTERPRETER_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_INTERPRETER_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Interpreter embedding APIs.
 */
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * @defgroup embed CRuby Embedding APIs
 *
 * CRuby interpreter APIs. These are APIs to embed MRI interpreter into your
 * program.
 * These functions are not a part of Ruby extension library API.
 * Extension libraries of Ruby should not depend on these functions.
 *
 * @{
 */

/**
 * @defgroup ruby1 ruby(1) implementation
 *
 * A part of the implementation of ruby(1) command.
 * Other programs that embed Ruby interpreter do not always need to use these
 * functions.
 *
 * @{
 */

RBIMPL_ATTR_NONNULL(())
/**
 * Initializes the process for libruby.
 *
 * This function assumes this process is `ruby(1)` and it has just started.
 * Usually programs that embed CRuby interpreter may not call this function,
 * and may do their own initialization.
 *
 * @param[in]  argc  Pointer to process main's `argc`.
 * @param[in]  argv  Pointer to process main's `argv`.
 * @warning    `argc` and `argv` cannot be `NULL`.
 *
 * @internal
 *
 * AFAIK Ruby does write to argv, especially `argv[0][0]`, via setproctitle(3).
 * It is intentional that the argument is not const-qualified.
 */
void ruby_sysinit(int *argc, char ***argv);

/**
 * Calls ruby_setup() and check error.
 *
 * Prints errors and calls exit(3) if an error occurred.
 */
void ruby_init(void);

/**
 * Processes command line arguments and compiles the Ruby source to execute.
 *
 * This function does:
 *   - Processes the given command line flags and arguments for `ruby(1)`
 *   - Compiles the source code from the given argument, `-e` or `stdin`, and
 *   - Returns the compiled source as an opaque pointer to an internal data
 *     structure
 *
 * @param[in]  argc  Process main's `argc`.
 * @param[in]  argv  Process main's `argv`.
 * @return     An opaque pointer to the compiled source or an internal special
 *             value.  Pass it to ruby_executable_node() to detect which.
 * @see        ruby_executable_node
 */
void* ruby_options(int argc, char** argv);

/**
 * Checks the return value of ruby_options().
 *
 * ruby_options() sometimes returns a special value to indicate this process
 * should immediately exit. This function checks if the case. Also stores the
 * exit status that the caller have to pass to exit(3) into `*status`.
 *
 * @param[in]   n          A return value of ruby_options().
 * @param[out]  status     Pointer to the exit status of this process.
 * @retval      0          The given value is such a special value.
 * @retval      otherwise  The given opaque pointer is actually a compiled
 *                         source.
 */
int ruby_executable_node(void *n, int *status);

/**
 * Runs the given compiled source and exits this process.
 *
 * @param[in]  n             Opaque "node" pointer.
 * @retval     EXIT_SUCCESS  Successfully run the source.
 * @retval     EXIT_FAILURE  An error occurred.
 */
int ruby_run_node(void *n);

/* version.c */
/** Prints the version information of the CRuby interpreter to stdout. */
void ruby_show_version(void);

#ifndef ruby_show_copyright
/** Prints the copyright notice of the CRuby interpreter to stdout. */
void ruby_show_copyright(void);
#endif

/**
 * A convenience macro to call ruby_init_stack().
 * Must be placed just after variable declarations.
 */
#define RUBY_INIT_STACK \
    VALUE variable_in_this_stack_frame; \
    ruby_init_stack(&variable_in_this_stack_frame);
/** @} */

/**
 * Set stack bottom of Ruby implementation.
 *
 * You  must   call  this   function  before  any   heap  allocation   by  Ruby
 * implementation.  Or GC will break living objects.
 *
 * @param[in]  addr  A pointer somewhere on the stack, near its bottom.
 */
void ruby_init_stack(void *addr);

/**
 * Initializes the VM and builtin libraries.
 *
 * @retval  0          Initialization succeeded.
 * @retval  otherwise  An error occurred.
 *
 * @internal
 *
 * Though not  a part of our  public API, the return  value is in fact  an enum
 * ruby_tag_type.  You can  see the potential "otherwise" values  by looking at
 * vm_core.h.
 */
int ruby_setup(void);

/**
 * Destructs the VM.
 *
 * Runs the VM finalization processes as well as ruby_finalize(), and frees
 * resources used by the VM.
 *
 * @param[in]  ex  Default value to the return value.
 * @retval     EXIT_FAILURE  An error occurred.
 * @retval     ex            Successful cleanup.
 * @note       This function does not raise any exception.
 */
int ruby_cleanup(int ex);

/**
 * Runs the VM finalization processes.
 *
 * `END{}` and procs registered by `Kernel.#at_exit` are executed here. See the
 * Ruby language spec for more details.
 *
 * @note This function is allowed to raise an exception if an error occurred.
 */
void ruby_finalize(void);

RBIMPL_ATTR_NORETURN()
/** Calls ruby_cleanup() and exits the process. */
void ruby_stop(int);

/**
 * Checks for stack overflow.
 *
 * @retval  true   NG machine stack is about to overflow.
 * @retval  false  OK there still is a room in the stack.
 *
 * @internal
 *
 * Does anybody use it?  So far @shyouhei have never seen any actual use-case.
 */
int ruby_stack_check(void);

/**
 * Queries what Ruby thinks is the machine stack.  Ruby manages a region of
 * memory.  It calls that area the "machine stack".  By calling this function,
 * in spite of its name, you can obtain both one end of the stack and its
 * length at once.  Which means you can know the entire region.
 *
 * @param[out]  topnotch  On return the pointer points to the upmost address of
 *                        the macihne stack that Ruby knows.
 * @return      Length of the machine stack that Ruby knows.
 *
 * @internal
 *
 * Does anybody use it?  @shyouhei is quite skeptical if this is useful outside
 * of the VM.  Maybe it was a wrong idea to expose this API to 3rd parties.
 */
size_t ruby_stack_length(VALUE **topnotch);

/**
 * Identical to ruby_run_node(), except it returns an opaque execution status.
 * You can pass it to rb_cleanup().
 *
 * @param[in]  n          Opaque "node" pointer.
 * @retval     0          Successful end-of-execution.
 * @retval     otherwise  An error occurred.
 *
 * @internal
 *
 * Though not  a part of our  public API, the return  value is in fact  an enum
 * ruby_tag_type.  You can  see the potential "otherwise" values  by looking at
 * vm_core.h.
 */
int ruby_exec_node(void *n);

/**
 * Sets the current script name to this value.
 *
 * This is similar to `$0 = name` in Ruby level but also affects
 * `Method#location` and others.
 *
 * @param[in]  name  File name to set.
 */
void ruby_script(const char* name);

/**
 * Identical to ruby_script(), except it takes the name as a Ruby String
 * instance.
 *
 * @param[in]  name  File name to set.
 */
void ruby_set_script_name(VALUE name);

/** Defines built-in variables */
void ruby_prog_init(void);

/**
 * Sets argv that ruby understands.  Your program might have its own command
 * line parameters etc.  Handle them as you wish, and pass remaining parts of
 * argv here.
 *
 * @param[in]  argc  Number of elements of `argv`.
 * @param[in]  argv  Command line arguments.
 */
void ruby_set_argv(int argc, char **argv);

/**
 * Identical to ruby_options(), except it raises ruby-level exceptions on
 * failure.
 *
 * @param[in]  argc  Process main's `argc`.
 * @param[in]  argv  Process main's `argv`.
 * @return     An opaque "node" pointer.
 */
void *ruby_process_options(int argc, char **argv);

/**
 * Sets up `$LOAD_PATH`.
 *
 * @internal
 *
 * @shyouhei guesses this has to be called  at very later stage, at least after
 * the birth of object system.  But is not exactly sure when.
 */
void ruby_init_loadpath(void);

/**
 * Appends the given path to the end of the load path.
 *
 * @pre        ruby_init_loadpath() must be done beforehand.
 * @param[in]  path  The path you want to push to the load path.
 */
void ruby_incpush(const char *path);

/**
 * Clear signal handlers.
 *
 * Ruby installs its own signal handler (apart from those which user scripts
 * set).  This is to clear that.  Must be called when the ruby part terminates,
 * before switching to your program's own logic.
 */
void ruby_sig_finalize(void);

/** @} */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_INTERPRETER_H */
PK*J[^�
[�S�Sinclude/ruby/internal/error.hnu�[���#ifndef RBIMPL_ERROR_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ERROR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Declares ::rb_raise().
 */
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/format.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

/**
 * @defgroup exception Exception handlings
 * @{
 */

/**
 * Warning  categories.  A  warning issued  using this  API can  be selectively
 * requested   /   suppressed   by   the  end-users.   For   instance   passing
 * `-W:no-deprecated`  to the  ruby process  would suppress  those warnings  in
 * deprecated category.
 *
 * @warning    There is no way to declare a new category (for now).
 */
typedef enum {
    /** Category unspecified. */
    RB_WARN_CATEGORY_NONE,

    /** Warning is for deprecated features. */
    RB_WARN_CATEGORY_DEPRECATED,

    /** Warning is for experimental features. */
    RB_WARN_CATEGORY_EXPERIMENTAL,

    /** Warning is for performance issues (not enabled by -w). */
    RB_WARN_CATEGORY_PERFORMANCE,

    /** Warning is for checking unused block strictly */
    RB_WARN_CATEGORY_STRICT_UNUSED_BLOCK,

    RB_WARN_CATEGORY_DEFAULT_BITS = (
        (1U << RB_WARN_CATEGORY_DEPRECATED) |
        (1U << RB_WARN_CATEGORY_EXPERIMENTAL) |
        0),

    RB_WARN_CATEGORY_ALL_BITS = (
        (1U << RB_WARN_CATEGORY_DEPRECATED) |
        (1U << RB_WARN_CATEGORY_EXPERIMENTAL) |
        (1U << RB_WARN_CATEGORY_PERFORMANCE) |
        (1U << RB_WARN_CATEGORY_STRICT_UNUSED_BLOCK) |
        0)
} rb_warning_category_t;

/** for rb_readwrite_sys_fail first argument */
enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
/** @cond INTERNAL_MACRO */
#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * This is the same as `$!` in Ruby.
 *
 * @retval   RUBY_Qnil  Not handling exceptions at the moment.
 * @retval   otherwise  The current exception in the current thread.
 * @ingroup  exception
 */
VALUE rb_errinfo(void);

/**
 * Sets the current exception (`$!`) to the given value.
 *
 * @param[in]  err            An instance of ::rb_eException, or ::RUBY_Qnil.
 * @exception  rb_eTypeError  What  is given  was  neither ::rb_eException  nor
 *                            ::RUBY_Qnil.
 * @note       Use  rb_raise()  instead to  raise  `err`.   This function  just
 *             assigns the given object to the global variable.
 * @ingroup    exception
 */
void rb_set_errinfo(VALUE err);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Exception  entry point.   By calling  this  function the  execution of  your
 * program gets interrupted to "raise" an  exception up to the callee entities.
 * Programs could "rescue" that exception, or could "ensure" some part of them.
 * If nobody cares  about such things, the raised exception  reaches at the top
 * of execution.  This yields abnormal end of the process.
 *
 * @param[in]  exc  A subclass of ::rb_eException.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 * @exception  exc  The specified exception.
 * @note       It never returns.
 */
void rb_raise(VALUE exc, const char *fmt, ...);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
/**
 * Raises the unsung "fatal" exception.  This is considered severe.  Nobody can
 * rescue  the  exception.  Once  raised,  process  termination is  inevitable.
 * However ensure clauses still run, so that resources are properly cleaned up.
 *
 * @param[in]  fmt        Format specifier string compatible with rb_sprintf().
 * @exception  rb_eFatal  An exception that you cannot rescue.
 * @note       It never returns.
 */
void rb_fatal(const char *fmt, ...);

RBIMPL_ATTR_COLD()
RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
/**
 * Interpreter  panic  switch.   Immediate   process  termination  without  any
 * synchronisations shall  occur.  LOTS of  internal states, stack  traces, and
 * even  machine registers  are displayed  if possible  for debugging  purposes
 * then.
 *
 * @warning    Do not use this API.
 * @warning    You are not expected to use this API.
 * @warning    Why not just fix your code instead of calling this API?
 * @warning    It was a  bad idea to expose this API  to extension libraries at
 *             the first  place.  We just  cannot delete  it at this  point for
 *             backwards  compatibility.    That  doesn't  mean   everyone  are
 *             welcomed to call this function at will.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 * @note       It never returns.
 */
void rb_bug(const char *fmt, ...);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL(())
/**
 * This is  a wrapper  of rb_bug()  which automatically  constructs appropriate
 * message from the passed errno.
 *
 * @param[in]  msg  Additional message to display.
 * @exception  err  C level errno.
 * @note       It never returns.
 */
void rb_bug_errno(const char *msg, int err);

RBIMPL_ATTR_NORETURN()
/**
 * Converts a C errno into a Ruby exception, then raises it.  For instance:
 *
 * ```CXX
 * static VALUE
 * foo(VALUE argv)
 * {
 *    const auto cmd = StringValueCStr(argv);
 *    const auto waitr = system(cmd);
 *    if (waitr == -1) {
 *        rb_sys_fail("system(3posix)"); // <-------------- this
 *    }
 *    else {
 *        return INT2FIX(fd);
 *    }
 * }
 * ```
 *
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing errno.
 * @note       It never returns.
 */
void rb_sys_fail(const char *msg);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to  rb_sys_fail(), except  it takes the  message in  Ruby's String
 * instead of C's.
 *
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing errno.
 * @note       It never returns.
 */
void rb_sys_fail_str(VALUE msg);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((2))
/**
 * Identical to rb_sys_fail(), except it  takes additional module to extend the
 * exception object before raising.
 *
 * @param[in]  mod                  A ::rb_cModule instance.
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing errno.
 * @note       It never returns.
 *
 * @internal
 *
 * Does anybody use it?
 */
void rb_mod_sys_fail(VALUE mod, const char *msg);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to rb_mod_sys_fail(), except it takes the message in Ruby's String
 * instead of C's.
 *
 * @param[in]  mod                  A ::rb_cModule instance.
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing errno.
 * @note       It never returns.
 */
void rb_mod_sys_fail_str(VALUE mod, VALUE msg);

RBIMPL_ATTR_NORETURN()
/**
 * Raises appropriate exception using the parameters.
 *
 * In Ruby level there are  rb_eEAGAINWaitReadable etc.  This function maps the
 * given parameter to an appropriate exception class, then raises it.
 *
 * @param[in]  waiting  Reason for the IO to wait.
 * @param[in]  msg      Additional message to raise.
 * @exception  rb_eEAGAINWaitWritable
 * @exception  rb_eEWOULDBLOCKWaitWritable
 * @exception  rb_eEINPROGRESSWaitWritable
 * @exception  rb_eEAGAINWaitReadable
 * @exception  rb_eEWOULDBLOCKWaitReadable
 * @exception  rb_eEINPROGRESSWaitReadable
 * @exception  rb_eSystemCallError
 * @note       It never returns.
 */
void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg);

RBIMPL_ATTR_NORETURN()
/**
 * Breaks from a block.  Because you are  using a CAPI this is not as intuitive
 * as  it  sounds.   In order  for  this  function  to  properly work,  make  a
 * ::rb_block_call_func_t  function that  calls  it internally,  and pass  that
 * function to rb_block_call().
 *
 * @exception  rb_eLocalJumpError  Called from outside of a block.
 * @note       It never returns.
 */
void rb_iter_break(void);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to  rb_iter_break(), except it  additionally takes the  "value" of
 * this breakage.  It  will be the evaluation result of  the iterator.  This is
 * kind  of  complicated; you  cannot  see  this as  a  "return  from a  block"
 * behaviour.  Take a look at this example:
 *
 * ```ruby
 * def foo(q)
 *   puts(w = yield(q))
 *   puts(e = yield(w))
 *   puts(r = yield(e))
 *   puts(t = yield(r))
 *   puts(y = yield(t))
 *   return "howdy!"
 * end
 *
 * x = foo(0) {|i|
 *   if i > 2
 *     break "hello!"
 *   else
 *     next i + 1
 *   end
 * }
 *
 * puts x
 * ```
 *
 * This script outputs 1, 2, 3, and hello.  Note that the value passed to break
 * becomes the  return value of  foo method, not the  value of yield.   This is
 * confusing, but  can be  handy on occasions  e.g.  when you  want to  bring a
 * local variable out of a block.
 *
 * @param[in]  val                 The value of the iterator.
 * @exception  rb_eLocalJumpError  Called from outside of a block.
 * @note       It never returns.
 */
void rb_iter_break_value(VALUE val);

RBIMPL_ATTR_NORETURN()
/**
 * Terminates the current execution context.  This  API is the entry point of a
 * "well-mannered"  termination  sequence.   When   called  from  an  extension
 * library, it  raises ::rb_eSystemExit exception.  Programs  could rescue that
 * exception.  Can cancel process exit then.  Otherwise, that exception results
 * in a process termination with the status passed to this function.
 *
 * @param[in]  status          Exit status, see also exit(3).
 * @exception  rb_eSystemExit  Exception representing the exit status.
 * @note       It never returns.
 *
 * @internal
 *
 * "When called from  an extension library"?  You might wonder.   In fact there
 * are chances for this function to be  called from outside of it, for instance
 * when dlopen(3)  failed.  In  case it  is not possible  for this  function to
 * raise an exception,  it does not (silently enters to  process cleanup).  But
 * that  is a  kind of  implementation detail  which extension  library authors
 * should not bother.
 */
void rb_exit(int status);

RBIMPL_ATTR_NORETURN()
/**
 * @exception  rb_eNotImpError
 * @note       It never returns.
 */
void rb_notimplement(void);

/**
 * Creates an exception object that represents the given C errno.
 *
 * @param[in]  err                  C level errno.
 * @param[in]  msg                  Additional message.
 * @retval     rb_eSystemCallError  An exception for the errno.
 */
VALUE rb_syserr_new(int err, const char * msg);

/**
 * Identical to rb_syserr_new(),  except it takes the message  in Ruby's String
 * instead of C's.
 *
 * @param[in]  n                    C level errno.
 * @param[in]  arg                  Additional message.
 * @retval     rb_eSystemCallError  An exception for the errno.
 */
VALUE rb_syserr_new_str(int n, VALUE arg);

RBIMPL_ATTR_NORETURN()
/**
 * Raises appropriate exception that represents a C errno.
 *
 * @param[in]  err                  C level errno.
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing `err`.
 * @note       It never returns.
 */
void rb_syserr_fail(int err, const char *msg);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to rb_syserr_fail(), except it  takes the message in Ruby's String
 * instead of C's.
 *
 * @param[in]  err                  C level errno.
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing `err`.
 * @note       It never returns.
 */
void rb_syserr_fail_str(int err, VALUE msg);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL(())
/**
 * Identical  to rb_mod_sys_fail(),  except  it  does not  depend  on C  global
 * variable errno.  Pass it explicitly.
 *
 * @param[in]  mod                  A ::rb_cModule instance.
 * @param[in]  err                  C level errno.
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing `err`.
 * @note       It never returns.
 */
void rb_mod_syserr_fail(VALUE mod, int err, const char *msg);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to  rb_mod_syserr_fail(), except  it takes  the message  in Ruby's
 * String instead of C's.
 *
 * @param[in]  mod                  A ::rb_cModule instance.
 * @param[in]  err                  C level errno.
 * @param[in]  msg                  Additional message to raise.
 * @exception  rb_eSystemCallError  An exception representing `err`.
 * @note       It never returns.
 */
void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to rb_readwrite_sys_fail(), except it  does not depend on C global
 * variable errno.  Pass it explicitly.
 *
 * @param[in]  waiting  Reason for the IO to wait.
 * @param[in]  err      C level errno.
 * @param[in]  msg      Additional message to raise.
 * @exception  rb_eEAGAINWaitWritable
 * @exception  rb_eEWOULDBLOCKWaitWritable
 * @exception  rb_eEINPROGRESSWaitWritable
 * @exception  rb_eEAGAINWaitReadable
 * @exception  rb_eEWOULDBLOCKWaitReadable
 * @exception  rb_eEINPROGRESSWaitReadable
 * @exception  rb_eSystemCallError
 * @note       It never returns.
 */
void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg);

RBIMPL_ATTR_COLD()
RBIMPL_ATTR_NORETURN()
/**
 * Fails with the given object's type incompatibility to the type.
 *
 * It  seems this  function is  visible from  extension libraries  only because
 * RTYPEDDATA_TYPE() uses  it on RUBY_DEBUG.   So you can basically  ignore it;
 * use some other fine-grained method instead.
 *
 * @param[in]  self           The object in question.
 * @param[in]  t              Expected type of the object.
 * @exception  rb_eTypeError  `self` not in type `t`.
 * @note       It never returns.
 * @note       The second  argument must  have been an  enum ::ruby_value_type,
 *             but for  historical reasons it  remains to  be an int  (in other
 *             words we see no benefits fixing this bug).
 */
void rb_unexpected_type(VALUE self, int t);

/**
 * @private
 *
 * This  is an  implementation detail  of #ruby_verbose.   Please don't  use it
 * directly.
 *
 * @retval  Qnil       Interpreter is quiet.
 * @retval  Qfalse     Interpreter is kind of chatty.
 * @retval  otherwise  Interpreter is very verbose.
 */
VALUE *rb_ruby_verbose_ptr(void);

/**
 * @private
 *
 * This  is an  implementation  detail  of #ruby_debug.   Please  don't use  it
 * directly.
 *
 * @retval  Qnil       Interpreter not in debug mode.
 * @retval  Qfalse     Interpreter not in debug mode.
 * @retval  otherwise  Interpreter is in debug mode.
 */
VALUE *rb_ruby_debug_ptr(void);

/**
 * This variable  controls whether the  interpreter is in debug  mode.  Setting
 * this  to  some truthy  value  is  equivalent to  passing  `-W`  flag to  the
 * interpreter.  Setting this  to ::Qfalse is equivalent to  passing `-W1` flag
 * to the interpreter.   Setting this to ::Qnil is equivalent  to passing `-W0`
 * flag to the interpreter.
 *
 * @retval  Qnil       Interpreter is quiet.
 * @retval  Qfalse     Interpreter is kind of chatty.
 * @retval  otherwise  Interpreter is very verbose.
 */
#define ruby_verbose (*rb_ruby_verbose_ptr())

/**
 * This variable  controls whether the  interpreter is in debug  mode.  Setting
 * this  to  some truthy  value  is  equivalent to  passing  `-d`  flag to  the
 * interpreter.
 *
 * @retval  Qnil       Interpreter not in debug mode.
 * @retval  Qfalse     Interpreter not in debug mode.
 * @retval  otherwise  Interpreter is in debug mode.
 */
#define ruby_debug   (*rb_ruby_debug_ptr())

/* reports if $VERBOSE is true */
RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
/**
 * Issues a warning.
 *
 * In  ruby, warnings  these  days  are tightly  coupled  with the  rb_mWarning
 * constant and its `warn` singleton method.   This CAPI is just a thin wrapper
 * of it;  everything passed  are formatted like  what rb_sprintf()  does, then
 * passed  through   to  the  method.    Programs  can  have  their   own  `def
 * Warning.warn` at will  to do whatever they want, from  ignoring the warnings
 * at all to sinking them to some  BigQuery data set via a Fluentd cluster.  By
 * default,  the method  just emits  its passed  contents to  ::rb_stderr using
 * rb_io_write().
 *
 * @note       This function is affected by the value of $VERBOSE, it does
 *             nothing unless $VERBOSE is true.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 *
 * @internal
 *
 * Above description is in fact inaccurate.  This API interfaces with Ractors.
 */
void rb_warning(const char *fmt, ...);

RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Identical to rb_warning(), except it takes additional "category" parameter.
 *
 * @param[in]  cat  Name of a known category.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 */
void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...);

RBIMPL_ATTR_NONNULL((1, 3))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4)
/**
 * Issues a compile-time warning  that happens at `__file__:__line__`.  Purpose
 * of this function being exposed to CAPI is unclear.
 *
 * @note       This function is affected by the value of $VERBOSE.
 * @param[in]  file  The path corresponding to Ruby level `__FILE__`.
 * @param[in]  line  The number corresponding to Ruby level `__LINE__`.
 * @param[in]  fmt   Format specifier string compatible with rb_sprintf().
 */
void rb_compile_warning(const char *file, int line, const char *fmt, ...);

RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
/**
 * Identical to rb_sys_fail(), except it does  not raise an exception to render
 * a warning instead.
 *
 * @note       This function is affected by the value of $VERBOSE.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 */
void rb_sys_warning(const char *fmt, ...);

/* reports if $VERBOSE is not nil (so if it is true or false) */
RBIMPL_ATTR_COLD()
RBIMPL_ATTR_NONNULL((1))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
/**
 * Identical to rb_warning(), except it reports unless $VERBOSE is nil.
 *
 * @note       This function is affected by the value of $VERBOSE, it does
 *             nothing if $VERBOSE is nil.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 */
void rb_warn(const char *fmt, ...);

RBIMPL_ATTR_COLD()
RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Identical to rb_category_warning(), except it reports unless $VERBOSE is nil.
 *
 * @param[in]  cat  Category e.g. deprecated.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 */
void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...);

RBIMPL_ATTR_NONNULL((1, 3))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4)
/**
 * Identical to rb_compile_warning(), except  it reports unless $VERBOSE is nil.
 *
 * @param[in]  file  The path corresponding to Ruby level `__FILE__`.
 * @param[in]  line  The number corresponding to Ruby level `__LINE__`.
 * @param[in]  fmt   Format specifier string compatible with rb_sprintf().
 */
void rb_compile_warn(const char *file, int line, const char *fmt, ...);

RBIMPL_ATTR_NONNULL((2, 4))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 4, 5)
/**
 * Identical to  rb_compile_warn(), except  it also accepts category.
 *
 * @param[in]  cat   Category e.g. deprecated.
 * @param[in]  file  The path corresponding to Ruby level `__FILE__`.
 * @param[in]  line  The number corresponding to Ruby level `__LINE__`.
 * @param[in]  fmt   Format specifier string compatible with rb_sprintf().
 */
void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...);

/** @} */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_ERROR_H */
PK*J[���z��include/ruby/internal/stdbool.hnu�[���#ifndef RBIMPL_STDBOOL_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_STDBOOL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      C99 shim for <stdbool.h>
 */
#include "ruby/internal/config.h"

#if defined(__bool_true_false_are_defined)
# /* Take that. */

#elif defined(__cplusplus)
# /* bool is a keyword in C++. */
# ifndef __bool_true_false_are_defined
#  define __bool_true_false_are_defined
# endif

#elif defined(HAVE_STDBOOL_H)
# /* Take stdbool.h definition. */
# include <stdbool.h>

#elif !defined(HAVE__BOOL)
typedef unsigned char _Bool;
# /* See also http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2229.htm */
# define bool  _Bool
# define true  ((_Bool)+1)
# define false ((_Bool)+0)
# define __bool_true_false_are_defined
#endif

#endif /* RBIMPL_STDBOOL_H */
PK*J[(]hF��)include/ruby/internal/compiler_is/apple.hnu�[���#ifndef RBIMPL_COMPILER_IS_APPLE_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_IS_APPLE_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines RBIMPL_COMPILER_IS_Apple.
 *
 * Apple  ships clang.   Problem is,  its  `__clang_major__` etc.  are not  the
 * upstream LLVM  version, but XCode's.  We  have to think Apple's  is distinct
 * from LLVM's,  when it comes  to compiler  detection business in  this header
 * file.
 */
#if ! defined(__clang__)
# define RBIMPL_COMPILER_IS_Apple 0

#elif ! defined(__apple_build_version__)
# define RBIMPL_COMPILER_IS_Apple 0

#else
# define RBIMPL_COMPILER_IS_Apple 1
# define RBIMPL_COMPILER_VERSION_MAJOR __clang_major__
# define RBIMPL_COMPILER_VERSION_MINOR __clang_minor__
# define RBIMPL_COMPILER_VERSION_PATCH __clang_patchlevel__
#endif

#endif /* RBIMPL_COMPILER_IS_APPLE_H */
PK*J[����
�
*include/ruby/internal/compiler_is/sunpro.hnu�[���#ifndef RBIMPL_COMPILER_IS_SUNPRO_H                  /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_IS_SUNPRO_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines RBIMPL_COMPILER_IS_SunPro.
 */
#if ! (defined(__SUNPRO_C) || defined(__SUNPRO_CC))
# define RBIMPL_COMPILER_IS_SunPro 0

#elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x5100
# define RBIMPL_COMPILER_IS_SunPro 1
# /* __SUNPRO_C = 0xXYYZ */
# define RBIMPL_COMPILER_VERSION_MAJOR  (__SUNPRO_C >> 12)
# define RBIMPL_COMPILER_VERSION_MINOR ((__SUNPRO_C >> 8 & 0xF) * 10 + (__SUNPRO_C >> 4 & 0xF))
# define RBIMPL_COMPILER_VERSION_PATCH  (__SUNPRO_C      & 0xF)

#elif defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5100
# define RBIMPL_COMPILER_IS_SunPro 1
# /* __SUNPRO_CC = 0xXYYZ */
# define RBIMPL_COMPILER_VERSION_MAJOR  (__SUNPRO_CC >> 12)
# define RBIMPL_COMPILER_VERSION_MINOR ((__SUNPRO_CC >> 8 & 0xF) * 10 + (__SUNPRO_CC >> 4 & 0xF))
# define RBIMPL_COMPILER_VERSION_PATCH  (__SUNPRO_CC      & 0xF)

#elif defined(__SUNPRO_C)
# define RBIMPL_COMPILER_IS_SunPro 1
# /* __SUNPRO_C = 0xXYZ */
# define RBIMPL_COMPILER_VERSION_MAJOR (__SUNPRO_C >> 8)
# define RBIMPL_COMPILER_VERSION_MINOR (__SUNPRO_C >> 4 & 0xF)
# define RBIMPL_COMPILER_VERSION_PATCH (__SUNPRO_C      & 0xF)

#else
# define RBIMPL_COMPILER_IS_SunPro 1
# /* __SUNPRO_CC = 0xXYZ */
# define RBIMPL_COMPILER_VERSION_MAJOR (__SUNPRO_CC >> 8)
# define RBIMPL_COMPILER_VERSION_MINOR (__SUNPRO_CC >> 4 & 0xF)
# define RBIMPL_COMPILER_VERSION_PATCH (__SUNPRO_CC      & 0xF)
#endif

#endif /* RBIMPL_COMPILER_IS_SUNPRO_H */
PK*J[�
���	�	(include/ruby/internal/compiler_is/msvc.hnu�[���#ifndef RBIMPL_COMPILER_IS_MSVC_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_IS_MSVC_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines RBIMPL_COMPILER_IS_MSVC.
 */
#include "ruby/internal/compiler_is/clang.h"
#include "ruby/internal/compiler_is/intel.h"

#if ! defined(_MSC_VER)
# define RBIMPL_COMPILER_IS_MSVC 0

#elif RBIMPL_COMPILER_IS(Clang)
# define RBIMPL_COMPILER_IS_MSVC 0

#elif RBIMPL_COMPILER_IS(Intel)
# define RBIMPL_COMPILER_IS_MSVC 0

#elif _MSC_VER >= 1400
# define RBIMPL_COMPILER_IS_MSVC 1
# /* _MSC_FULL_VER = XXYYZZZZZ */
# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_FULL_VER / 10000000)
# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_FULL_VER % 10000000 / 100000)
# define RBIMPL_COMPILER_VERSION_PATCH (_MSC_FULL_VER            % 100000)

#elif defined(_MSC_FULL_VER)
# define RBIMPL_COMPILER_IS_MSVC 1
# /* _MSC_FULL_VER = XXYYZZZZ */
# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_FULL_VER / 1000000)
# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_FULL_VER % 1000000 / 10000)
# define RBIMPL_COMPILER_VERSION_PATCH (_MSC_FULL_VER           % 10000)

#else
# define RBIMPL_COMPILER_IS_MSVC 1
# /* _MSC_VER = XXYY */
# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_VER / 100)
# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_VER % 100)
# define RBIMPL_COMPILER_VERSION_PATCH 0
#endif

#endif /* RBIMPL_COMPILER_IS_MSVC_H */
PK*J[�H		)include/ruby/internal/compiler_is/intel.hnu�[���#ifndef RBIMPL_COMPILER_IS_INTEL_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_IS_INTEL_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines RBIMPL_COMPILER_IS_Intel.
 */
#if ! defined(__INTEL_COMPILER)
# define RBIMPL_COMPILER_IS_Intel 0

#elif ! defined(__INTEL_COMPILER_UPDATE)
# define RBIMPL_COMPILER_IS_Intel 1
# /* __INTEL_COMPILER = XXYZ */
# define RBIMPL_COMPILER_VERSION_MAJOR (__INTEL_COMPILER / 100)
# define RBIMPL_COMPILER_VERSION_MINOR (__INTEL_COMPILER % 100 / 10)
# define RBIMPL_COMPILER_VERSION_PATCH (__INTEL_COMPILER       % 10)

#else
# define RBIMPL_COMPILER_IS_Intel 1
# /* __INTEL_COMPILER = XXYZ */
# define RBIMPL_COMPILER_VERSION_MAJOR (__INTEL_COMPILER / 100)
# define RBIMPL_COMPILER_VERSION_MINOR (__INTEL_COMPILER % 100 / 10)
# define RBIMPL_COMPILER_VERSION_PATCH __INTEL_COMPILER_UPDATE
#endif

#endif /* RBIMPL_COMPILER_IS_INTEL_H */
PK*J[�pq=)include/ruby/internal/compiler_is/clang.hnu�[���#ifndef RBIMPL_COMPILER_IS_CLANG_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_IS_CLANG_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines RBIMPL_COMPILER_IS_Clang.
 */
#include "ruby/internal/compiler_is/apple.h"

#if ! defined(__clang__)
# define RBIMPL_COMPILER_IS_Clang 0

#elif RBIMPL_COMPILER_IS(Apple)
# define RBIMPL_COMPILER_IS_Clang 0

#else
# define RBIMPL_COMPILER_IS_Clang 1
# define RBIMPL_COMPILER_VERSION_MAJOR __clang_major__
# define RBIMPL_COMPILER_VERSION_MINOR __clang_minor__
# define RBIMPL_COMPILER_VERSION_PATCH __clang_patchlevel__
#endif

#endif /* RBIMPL_COMPILER_IS_CLANG_H */
PK*J[��,��'include/ruby/internal/compiler_is/gcc.hnu�[���#ifndef RBIMPL_COMPILER_IS_GCC_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_IS_GCC_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines RBIMPL_COMPILER_IS_GCC.
 */
#include "ruby/internal/compiler_is/apple.h"
#include "ruby/internal/compiler_is/clang.h"
#include "ruby/internal/compiler_is/intel.h"

#if ! defined(__GNUC__)
# define RBIMPL_COMPILER_IS_GCC 0

#elif RBIMPL_COMPILER_IS(Apple)
# define RBIMPL_COMPILER_IS_GCC 0

#elif RBIMPL_COMPILER_IS(Clang)
# define RBIMPL_COMPILER_IS_GCC 0

#elif RBIMPL_COMPILER_IS(Intel)
# define RBIMPL_COMPILER_IS_GCC 0

#else
# define RBIMPL_COMPILER_IS_GCC 1
# define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__
# define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__
# define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__
#endif

#endif /* RBIMPL_COMPILER_IS_GCC_H */
PK*J[��%�
�
!include/ruby/internal/stdckdint.hnu�[���#ifndef RBIMPL_STDCKDINT_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_STDCKDINT_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      C23 shim for <stdckdint.h>
 */
#include "ruby/internal/config.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/has/builtin.h"
#include "ruby/internal/stdbool.h"

#ifdef __has_include
# if __has_include(<stdckdint.h>)
#  /* Conforming C23 situation; e.g. recent clang */
#  define RBIMPL_HAVE_STDCKDINT_H
# endif
#endif

#ifdef HAVE_STDCKDINT_H
# /* Some OSes (most notably FreeBSD) have this file. */
# define RBIMPL_HAVE_STDCKDINT_H
#endif

#ifdef __cplusplus
# /* It seems OS/Compiler provided stdckdint.h tend not support C++ yet.
#  * Situations could improve someday but in a meantime let us work around.
#  */
# undef RBIMPL_HAVE_STDCKDINT_H
#endif

#ifdef RBIMPL_HAVE_STDCKDINT_H
# /* Take that. */
# include <stdckdint.h>

#elif RBIMPL_HAS_BUILTIN(__builtin_add_overflow)
# define ckd_add(x, y, z) RBIMPL_CAST((bool)__builtin_add_overflow((y), (z), (x)))
# define ckd_sub(x, y, z) RBIMPL_CAST((bool)__builtin_sub_overflow((y), (z), (x)))
# define ckd_mul(x, y, z) RBIMPL_CAST((bool)__builtin_mul_overflow((y), (z), (x)))
# define __STDC_VERSION_STDCKDINT_H__ 202311L

#/* elif defined(__cplusplus) */
#/* :TODO: if we assume C++11 we can use `<type_traits>` to implement them. */

#else
# /* intentionally leave them undefined */
# /* to make `#ifdef ckd_add` etc. work as intended. */
# undef ckd_add
# undef ckd_sub
# undef ckd_mul
# undef __STDC_VERSION_STDCKDINT_H__
#endif

#endif /* RBIMPL_STDCKDINT_H */
PK*J[èE�include/ruby/internal/value.hnu�[���#ifndef RBIMPL_VALUE_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_VALUE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines ::VALUE and ::ID.
 */
#include "ruby/internal/static_assert.h"
#include "ruby/backward/2/long_long.h"
#include "ruby/backward/2/limits.h"

#if defined(__DOXYGEN__)

/**
 * Type that represents a Ruby object.  It is an unsigned integer of some kind,
 * depending on platforms.
 *
 * ```CXX
 * VALUE value = rb_eval_string("ARGF.readlines.map.with_index");
 * ```
 *
 * @warning  ::VALUE is not a pointer.
 * @warning  ::VALUE can be wider than `long`.
 */
typedef uintptr_t VALUE;

/**
 * Type that represents a Ruby identifier such as a variable name.
 *
 * ```CXX
 * ID method = rb_intern("method");
 * VALUE result = rb_funcall(obj, method, 0);
 * ```
 *
 * @note  ::rb_cSymbol is a Ruby-level data type for the same thing.
 */
typedef uintptr_t ID;

/**
 * A signed integer type that has the same width with ::VALUE.
 *
 * @internal
 *
 * @shyouhei wonders: is it guaranteed  that `uintptr_t` and `intptr_t` are the
 * same width?  As far as I read ISO/IEC 9899:2018 section 7.20.1.4 paragraph 1
 * no such description is given... or defined elsewhere?
 */
typedef intptr_t SIGNED_VALUE;

/**
 * Identical to  `sizeof(VALUE)`, except it  is a macro  that can also  be used
 * inside of preprocessor directives such as `#if`.  Handy on occasions.
 */
#define SIZEOF_VALUE SIZEOF_UINTPTR_T

/**
 * @private
 *
 * A compile-time constant of type ::VALUE whose value is 0.
 */
#define RBIMPL_VALUE_NULL UINTPTR_C(0)

/**
 * @private
 *
 * A compile-time constant of type ::VALUE whose value is 1.
 */
#define RBIMPL_VALUE_ONE  UINTPTR_C(1)

/**
 * @private
 *
 * Maximum possible value that a ::VALUE can take.
 */
#define RBIMPL_VALUE_FULL UINTPTR_MAX

#elif defined HAVE_UINTPTR_T && 0
typedef uintptr_t VALUE;
typedef uintptr_t ID;
# define SIGNED_VALUE intptr_t
# define SIZEOF_VALUE SIZEOF_UINTPTR_T
# undef PRI_VALUE_PREFIX
# define RBIMPL_VALUE_NULL UINTPTR_C(0)
# define RBIMPL_VALUE_ONE  UINTPTR_C(1)
# define RBIMPL_VALUE_FULL UINTPTR_MAX

#elif SIZEOF_LONG == SIZEOF_VOIDP
typedef unsigned long VALUE;
typedef unsigned long ID;
# define SIGNED_VALUE long
# define SIZEOF_VALUE SIZEOF_LONG
# define PRI_VALUE_PREFIX "l"
# define RBIMPL_VALUE_NULL 0UL
# define RBIMPL_VALUE_ONE  1UL
# define RBIMPL_VALUE_FULL ULONG_MAX

#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
typedef unsigned LONG_LONG VALUE;
typedef unsigned LONG_LONG ID;
# define SIGNED_VALUE LONG_LONG
# define LONG_LONG_VALUE 1
# define SIZEOF_VALUE SIZEOF_LONG_LONG
# define PRI_VALUE_PREFIX PRI_LL_PREFIX
# define RBIMPL_VALUE_NULL 0ULL
# define RBIMPL_VALUE_ONE  1ULL
# define RBIMPL_VALUE_FULL ULLONG_MAX

#else
# error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<----
#endif

/** @cond INTERNAL_MACRO */
RBIMPL_STATIC_ASSERT(sizeof_int, SIZEOF_INT == sizeof(int));
RBIMPL_STATIC_ASSERT(sizeof_long, SIZEOF_LONG == sizeof(long));
RBIMPL_STATIC_ASSERT(sizeof_long_long, SIZEOF_LONG_LONG == sizeof(LONG_LONG));
RBIMPL_STATIC_ASSERT(sizeof_voidp, SIZEOF_VOIDP == sizeof(void *));
/** @endcond */
#endif /* RBIMPL_VALUE_H */
PK*J[Qk۲		include/ruby/internal/cast.hnu�[���#ifndef RBIMPL_CAST_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_CAST_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines RBIMPL_CAST.
 *
 * This casting macro makes sense only inside  of other macros that are part of
 * public headers.  They could be used  from C++, and C-style casts could issue
 * warnings.  Ruby internals are pure C so they should not bother.
 */
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/warning.h"
#include "ruby/internal/warning_push.h"

#if ! defined(__cplusplus)
# define RBIMPL_CAST(expr) (expr)

#elif RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0)
# /* g++ has -Wold-style-cast since 1997 or so, but its _Pragma is broken. */
# /* See https://gcc.godbolt.org/z/XWhU6J */
# define RBIMPL_CAST(expr) (expr)
# pragma GCC diagnostic ignored "-Wold-style-cast"

#elif RBIMPL_HAS_WARNING("-Wold-style-cast")
# define RBIMPL_CAST(expr)                   \
    RBIMPL_WARNING_PUSH()                    \
    RBIMPL_WARNING_IGNORED(-Wold-style-cast) \
    (expr)                                  \
    RBIMPL_WARNING_POP()

#else
# define RBIMPL_CAST(expr) (expr)
#endif

#endif /* RBIMPL_CAST_H */
PK*J[�`@<55include/ruby/internal/symbol.hnu�[���#ifndef RBIMPL_SYMBOL_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_SYMBOL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #rb_intern
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#ifdef HAVE_STRING_H
# include <string.h>
#endif

#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/constant_p.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/has/builtin.h"
#include "ruby/internal/value.h"

#define RB_ID2SYM      rb_id2sym           /**< @alias{rb_id2sym} */
#define RB_SYM2ID      rb_sym2id           /**< @alias{rb_sym2id} */
#define ID2SYM         RB_ID2SYM           /**< @old{RB_ID2SYM} */
#define SYM2ID         RB_SYM2ID           /**< @old{RB_SYM2ID} */
#define CONST_ID_CACHE RUBY_CONST_ID_CACHE /**< @old{RUBY_CONST_ID_CACHE} */
#define CONST_ID       RUBY_CONST_ID       /**< @old{RUBY_CONST_ID} */

/** @cond INTERNAL_MACRO */
#define rb_intern_const rb_intern_const
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Converts an instance of ::rb_cSymbol into an ::ID.
 *
 * @param[in]  obj            An instance of ::rb_cSymbol.
 * @exception  rb_eTypeError  `obj` is not an instance of ::rb_cSymbol.
 * @return     An ::ID of the identical symbol.
 */
ID rb_sym2id(VALUE obj);

/**
 * Allocates an instance of ::rb_cSymbol that has the given id.
 *
 * @param[in]  id           An id.
 * @retval     RUBY_Qfalse  No such id ever existed in the history.
 * @retval     Otherwise    An allocated ::rb_cSymbol instance.
 */
VALUE rb_id2sym(ID id);

RBIMPL_ATTR_NONNULL(())
/**
 * Finds or creates a symbol of the given name.
 *
 * @param[in]  name              The name of the id.
 * @exception  rb_eRuntimeError  Too many symbols.
 * @return     A (possibly new) id whose value is the given name.
 * @note       These days  Ruby internally has  two kinds of symbols  (static /
 *             dynamic).  Symbols  created using  this function would  become a
 *             static one; i.e. would never be  garbage collected.  It is up to
 *             you to avoid memory leaks.  Think twice before using it.
 */
ID rb_intern(const char *name);

/**
 * Identical to  rb_intern(), except  it additionally takes  the length  of the
 * string.  This way you can have a symbol that contains NUL characters.
 *
 * @param[in]  name              The name of the id.
 * @param[in]  len               Length of `name`.
 * @exception  rb_eRuntimeError  Too many symbols.
 * @return     A (possibly new) id whose value is the given name.
 * @note       These   days  Ruby   internally   has  two   kinds  of   symbols
 *             (static/dynamic).   Symbols created  using  this function  would
 *             become static ones;  i.e. would never be  garbage collected.  It
 *             is up  to you to avoid  memory leaks.  Think twice  before using
 *             it.
 */
ID rb_intern2(const char *name, long len);

/**
 * Identical to  rb_intern(), except  it takes an instance of ::rb_cString.
 *
 * @param[in]  str               The name of the id.
 * @pre        `str` must either be an instance of ::rb_cSymbol, or an instance
 *             of ::rb_cString, or responds to `#to_str` method.
 * @exception  rb_eTypeError     Can't convert `str` into ::rb_cString.
 * @exception  rb_eRuntimeError  Too many symbols.
 * @return     A (possibly new) id whose value is the given str.
 * @note       These   days  Ruby   internally   has  two   kinds  of   symbols
 *             (static/dynamic).   Symbols created  using  this function  would
 *             become static ones;  i.e. would never be  garbage collected.  It
 *             is up  to you to avoid  memory leaks.  Think twice  before using
 *             it.
 */
ID rb_intern_str(VALUE str);

/**
 * Retrieves the name mapped to the given id.
 *
 * @param[in]  id         An id to query.
 * @retval     NULL       Unknown id.
 * @retval     otherwise  A name that the id represents.
 * @note       The return value  is managed by the interpreter.   Don't pass it
 *             to free().
 * @note       The underlying name can contain internal NUL bytes, so the return
 *             value might be a truncated representation due to the nature of C
 *             strings.
 * @note       This C string is backed by an underlying Ruby string. The Ruby
 *             string may move during GC compaction which would make this
 *             C string point to invalid memory. Do not use the return value
 *             of this function after a potential GC entry point.
 */
const char *rb_id2name(ID id);

RBIMPL_ATTR_NONNULL(())
/**
 * Detects if  the given name  is already interned or  not.  It first  tries to
 * convert the  argument to  an instance  of ::rb_cString if  it is  neither an
 * instance of ::rb_cString nor ::rb_cSymbol.  The conversion result is written
 * back  to the  variable.   Then queries  if that  name  was already  interned
 * before.  If found it returns such id, otherwise zero.
 *
 * We  eventually introduced  this API  to avoid  inadvertent symbol  pin-down.
 * Before,  there was  no way  to know  if an  ID was  already interned  or not
 * without actually  creating one (== leaking  memory).  By using this  API you
 * can avoid such situations:
 *
 * ```CXX
 * bool does_interning_this_leak_memory(VALUE obj)
 * {
 *     auto tmp = obj;
 *     if (auto id = rb_check_id(&tmp); id) {
 *         return false;
 *     }
 *     else {
 *         return true; // Let GC sweep tmp if necessary.
 *     }
 * }
 * ```
 *
 * @param[in,out]  namep              A pointer to a name to query.
 * @pre            The object referred  by `*namep` must either  be an instance
 *                 of ::rb_cSymbol, or an instance of ::rb_cString, or responds
 *                 to `#to_str` method.
 * @exception      rb_eTypeError      Can't convert `*namep` into ::rb_cString.
 * @exception      rb_eEncodingError  Given string is non-ASCII.
 * @retval         0                  No such id ever existed in the history.
 * @retval         otherwise          The id that represents the given name.
 * @post           The object  that `*namep`  points to  is a  converted result
 *                 object, which  is always an instance  of either ::rb_cSymbol
 *                 or ::rb_cString.
 * @see            https://bugs.ruby-lang.org/issues/5072
 *
 * @internal
 *
 * @shyouhei doesn't know why this has to raise rb_eEncodingError.
 */
ID rb_check_id(volatile VALUE *namep);

/**
 * @copydoc rb_intern_str()
 *
 * @internal
 *
 * :FIXME:  Can anyone  tell us  what is  the difference  between this  one and
 * rb_intern_str()?  As far as @shyouhei reads the implementation it seems what
 * rb_to_id() does is  is just waste some CPU time,  then call rb_intern_str().
 * He hopes he is wrong.
 */
ID rb_to_id(VALUE str);

/**
 * Identical to rb_id2name(), except it returns a frozen Ruby String instead of
 * a C String.
 *
 * @param[in]  id           An id to query.
 * @retval     RUBY_Qfalse  No such id ever existed in the history.
 * @retval     otherwise    An instance of ::rb_cString with the name of id.
 *
 * @internal
 *
 * In reality "rb_id2str() is identical  to rb_id2name() except it returns Ruby
 * string" is just describing things upside down; truth is `rb_id2name(foo)` is
 * a shorthand of `RSTRING_PTR(rb_id2str(foo))`.
 */
VALUE rb_id2str(ID id);

/**
 * Obtain a frozen string representation of a symbol (not including the leading
 * colon). Done without any object allocations.
 *
 * @param[in]  symbol  A ::rb_cSymbol instance to query.
 * @return     A frozen instance of ::rb_cString with the name of `symbol`.
 * @note       This does not create a permanent ::ID using the symbol.
 */
VALUE rb_sym2str(VALUE symbol);

/**
 * Identical  to  rb_intern_str(), except  it  generates  a dynamic  symbol  if
 * necessary.
 *
 * @param[in]  name              The name of the id.
 * @pre        `name`  must  either  be  an instance  of  ::rb_cSymbol,  or  an
 *             instance of ::rb_cString, or responds to `#to_str` method.
 * @exception  rb_eTypeError     Can't convert `name` into ::rb_cString.
 * @exception  rb_eRuntimeError  Too many symbols.
 * @return     A (possibly new) id whose value is the given name.
 * @note       These   days  Ruby   internally   has  two   kinds  of   symbols
 *             (static/dynamic).   Symbols created  using  this function  would
 *             become dynamic ones; i.e. would  be garbage collected.  It could
 *             be safer for you to use it than alternatives, when applicable.
 */
VALUE rb_to_symbol(VALUE name);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to  rb_check_id(), except it  returns an instance  of ::rb_cSymbol
 * instead.
 *
 * @param[in,out]  namep              A pointer to a name to query.
 * @pre            The object referred  by `*namep` must either  be an instance
 *                 of ::rb_cSymbol, or an instance of ::rb_cString, or responds
 *                 to `#to_str` method.
 * @exception      rb_eTypeError      Can't convert `*namep` into ::rb_cString.
 * @exception      rb_eEncodingError  Given string is non-ASCII.
 * @retval         RUBY_Qnil          No such id ever existed in the history.
 * @retval         otherwise          The id that represents the given name.
 * @post           The object  that `*namep`  points to  is a  converted result
 *                 object, which  is always an instance  of either ::rb_cSymbol
 *                 or ::rb_cString.
 * @see            https://bugs.ruby-lang.org/issues/5072
 *
 * @internal
 *
 * @shyouhei doesn't know why this has to raise rb_eEncodingError.
 */
VALUE rb_check_symbol(volatile VALUE *namep);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE()
RBIMPL_ATTR_NONNULL(())
/**
 * This  is a  "tiny  optimisation" over  rb_intern().  If  you  pass a  string
 * _literal_, and if your C compiler can special-case strlen of such literal to
 * strength-reduce  into  an  integer  constant expression,  then  this  inline
 * function can precalc a part of conversion.
 *
 * @note       This function also works  happily for non-constant strings.  Why
 *             bother then?  Just apply liberally to everything.
 * @note       But  #rb_intern() could  be faster  on compilers  with statement
 *             expressions, because they can cache the created ::ID.
 * @param[in]  str               The name of the id.
 * @exception  rb_eRuntimeError  Too many symbols.
 * @return     A (possibly new) id whose value is the given str.
 * @note       These days  Ruby internally has  two kinds of symbols  (static /
 *             dynamic).  Symbols  created using  this function would  become a
 *             static one; i.e. would never be  garbage collected.  It is up to
 *             you to avoid memory leaks.  Think twice before using it.
 */
static inline ID
rb_intern_const(const char *str)
{
    size_t len = strlen(str);
    return rb_intern2(str, RBIMPL_CAST((long)len));
}

RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL(())
/**
 * @private
 *
 * This is an implementation detail of #rb_intern().  Just don't use it.
 */
static inline ID
rbimpl_intern_const(ID *ptr, const char *str)
{
    while (! *ptr) {
        *ptr = rb_intern_const(str);
    }

    return *ptr;
}

/**
 * Old implementation detail of rb_intern().
 * @deprecated Does anyone use it?  Preserved for backward compat.
 */
#define RUBY_CONST_ID_CACHE(result, str)                \
    {                                                   \
        static ID rb_intern_id_cache;                   \
        rbimpl_intern_const(&rb_intern_id_cache, (str)); \
        result rb_intern_id_cache;                      \
    }

/**
 * Old implementation detail of rb_intern().
 * @deprecated Does anyone use it?  Preserved for backward compat.
 */
#define RUBY_CONST_ID(var, str) \
    do { \
        static ID rbimpl_id; \
        (var) = rbimpl_intern_const(&rbimpl_id, (str)); \
    } while (0)

#if defined(HAVE_STMT_AND_DECL_IN_EXPR)
/* __builtin_constant_p and statement expression is available
 * since gcc-2.7.2.3 at least. */
#define rb_intern(str) \
    (RBIMPL_CONSTANT_P(str) ? \
     __extension__ ({ \
         static ID rbimpl_id; \
         rbimpl_intern_const(&rbimpl_id, (str)); \
     }) : \
     (rb_intern)(str))
#endif

#endif /* RBIMPL_SYMBOL_H */
PK*J[�L���#include/ruby/internal/encoding/re.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_RE_H                  /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_RE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate encodings of symbols.
 */

#include "ruby/internal/dllexport.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Identical to rb_reg_new(), except it additionally takes an encoding.
 *
 * @param[in]  ptr              A memory region of `len` bytes length.
 * @param[in]  len              Length of  `ptr`, in  bytes, not  including the
 *                              terminating NUL character.
 * @param[in]  enc              Encoding of `ptr`.
 * @param[in]  opts             Options e.g. ONIG_OPTION_MULTILINE.
 * @exception  rb_eRegexpError  Failed to compile `ptr`.
 * @return     An allocated  new instance  of ::rb_cRegexp, of  `enc` encoding,
 *             whose expression is compiled according to `ptr`.
 */
VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_INTERNAL_ENCODING_RE_H */
PK*J[4�"��*include/ruby/internal/encoding/coderange.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_CODERANGE_H           /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_CODERANGE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines for code ranges.
 */

#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/** What rb_enc_str_coderange() returns. */
enum ruby_coderange_type {

    /** The object's coderange is unclear yet. */
    RUBY_ENC_CODERANGE_UNKNOWN  = 0,

    /** The object holds 0 to 127 inclusive and nothing else. */
    RUBY_ENC_CODERANGE_7BIT     = ((int)RUBY_FL_USER8),

    /** The object's encoding and contents are consistent each other */
    RUBY_ENC_CODERANGE_VALID    = ((int)RUBY_FL_USER9),

    /** The object holds invalid/malformed/broken character(s). */
    RUBY_ENC_CODERANGE_BROKEN   = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)),

    /** Where the coderange resides. */
    RUBY_ENC_CODERANGE_MASK     = (RUBY_ENC_CODERANGE_7BIT|
                                   RUBY_ENC_CODERANGE_VALID|
                                   RUBY_ENC_CODERANGE_BROKEN)
};

RBIMPL_ATTR_CONST()
/**
 * @private
 *
 * This is an implementation detail of #RB_ENC_CODERANGE_CLEAN_P.  People don't
 * use it directly.
 *
 * @param[in]  cr  An enum ::ruby_coderange_type.
 * @retval     1   It is.
 * @retval     0   It isn't.
 */
static inline int
rb_enc_coderange_clean_p(int cr)
{
    return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT;
}

RBIMPL_ATTR_CONST()
/**
 * Queries if  a code range  is "clean".  "Clean" in  this context means  it is
 * known and valid.
 *
 * @param[in]  cr  An enum ::ruby_coderange_type.
 * @retval     1   It is.
 * @retval     0   It isn't.
 */
static inline bool
RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr)
{
    return rb_enc_coderange_clean_p(cr);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
/**
 * Queries the  (inline) code range of  the passed object.  The  object must be
 * capable  of   having  inline   encoding.   Using   this  macro   needs  deep
 * understanding of bit level object binary layout.
 *
 * @param[in]  obj  Target object.
 * @return     An enum ::ruby_coderange_type.
 */
static inline enum ruby_coderange_type
RB_ENC_CODERANGE(VALUE obj)
{
    VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK);

    return RBIMPL_CAST((enum ruby_coderange_type)ret);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
/**
 * Queries   the    (inline)   code   range    of   the   passed    object   is
 * ::RUBY_ENC_CODERANGE_7BIT.   The object  must  be capable  of having  inline
 * encoding.  Using  this macro  needs deep understanding  of bit  level object
 * binary layout.
 *
 * @param[in]  obj  Target object.
 * @retval     1    It is ascii only.
 * @retval     0    Otherwise (including cases when the range is not known).
 */
static inline bool
RB_ENC_CODERANGE_ASCIIONLY(VALUE obj)
{
    return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT;
}

/**
 * Destructively modifies the passed object so  that its (inline) code range is
 * the  passed one.   The object  must be  capable of  having inline  encoding.
 * Using this macro needs deep understanding of bit level object binary layout.
 *
 * @param[out]  obj  Target object.
 * @param[out]  cr   An enum ::ruby_coderange_type.
 * @post        `obj`'s code range is `cr`.
 */
static inline void
RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr)
{
    RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
    RB_FL_SET_RAW(obj, cr);
}

/**
 * Destructively clears  the passed object's  (inline) code range.   The object
 * must be  capable of  having inline  encoding.  Using  this macro  needs deep
 * understanding of bit level object binary layout.
 *
 * @param[out]  obj  Target object.
 * @post        `obj`'s code range is ::RUBY_ENC_CODERANGE_UNKNOWN.
 */
static inline void
RB_ENC_CODERANGE_CLEAR(VALUE obj)
{
    RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
}

RBIMPL_ATTR_CONST()
/* assumed ASCII compatibility */
/**
 * "Mix"  two code  ranges  into one.   This  is handy  for  instance when  you
 * concatenate two  strings into one.   Consider one of  then is valid  but the
 * other isn't.  The result must be  invalid.  This macro computes that kind of
 * mixture.
 *
 * @param[in]  a  An enum ::ruby_coderange_type.
 * @param[in]  b  Another enum ::ruby_coderange_type.
 * @return     The `a` "and" `b`.
 */
static inline enum ruby_coderange_type
RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b)
{
    if (a == RUBY_ENC_CODERANGE_7BIT) {
        return b;
    }
    else if (a != RUBY_ENC_CODERANGE_VALID) {
        return RUBY_ENC_CODERANGE_UNKNOWN;
    }
    else if (b == RUBY_ENC_CODERANGE_7BIT) {
        return RUBY_ENC_CODERANGE_VALID;
    }
    else {
        return b;
    }
}

#define ENC_CODERANGE_MASK                        RUBY_ENC_CODERANGE_MASK                      /**< @old{RUBY_ENC_CODERANGE_MASK} */
#define ENC_CODERANGE_UNKNOWN                     RUBY_ENC_CODERANGE_UNKNOWN                   /**< @old{RUBY_ENC_CODERANGE_UNKNOWN} */
#define ENC_CODERANGE_7BIT                        RUBY_ENC_CODERANGE_7BIT                      /**< @old{RUBY_ENC_CODERANGE_7BIT} */
#define ENC_CODERANGE_VALID                       RUBY_ENC_CODERANGE_VALID                     /**< @old{RUBY_ENC_CODERANGE_VALID} */
#define ENC_CODERANGE_BROKEN                      RUBY_ENC_CODERANGE_BROKEN                    /**< @old{RUBY_ENC_CODERANGE_BROKEN} */
#define ENC_CODERANGE_CLEAN_P(cr)                 RB_ENC_CODERANGE_CLEAN_P(cr)                 /**< @old{RB_ENC_CODERANGE_CLEAN_P} */
#define ENC_CODERANGE(obj)                        RB_ENC_CODERANGE(obj)                        /**< @old{RB_ENC_CODERANGE} */
#define ENC_CODERANGE_ASCIIONLY(obj)              RB_ENC_CODERANGE_ASCIIONLY(obj)              /**< @old{RB_ENC_CODERANGE_ASCIIONLY} */
#define ENC_CODERANGE_SET(obj,cr)                 RB_ENC_CODERANGE_SET(obj,cr)                 /**< @old{RB_ENC_CODERANGE_SET} */
#define ENC_CODERANGE_CLEAR(obj)                  RB_ENC_CODERANGE_CLEAR(obj)                  /**< @old{RB_ENC_CODERANGE_CLEAR} */
#define ENC_CODERANGE_AND(a, b)                   RB_ENC_CODERANGE_AND(a, b)                   /**< @old{RB_ENC_CODERANGE_AND} */
#define ENCODING_CODERANGE_SET(obj, encindex, cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr) /**< @old{RB_ENCODING_CODERANGE_SET} */

/** @cond INTERNAL_MACRO */
#define RB_ENC_CODERANGE           RB_ENC_CODERANGE
#define RB_ENC_CODERANGE_AND       RB_ENC_CODERANGE_AND
#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY
#define RB_ENC_CODERANGE_CLEAN_P   RB_ENC_CODERANGE_CLEAN_P
#define RB_ENC_CODERANGE_CLEAR     RB_ENC_CODERANGE_CLEAR
#define RB_ENC_CODERANGE_SET       RB_ENC_CODERANGE_SET
/** @endcond */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_INTERNAL_ENCODING_CODERANGE_H */
PK*J[��YR��'include/ruby/internal/encoding/symbol.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_SYMBOL_H              /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_SYMBOL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate encodings of symbols.
 */

#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Identical to rb_intern2(), except it additionally takes an encoding.
 *
 * @param[in]  name              The name of the id.
 * @param[in]  len               Length of `name`.
 * @param[in]  enc               `name`'s encoding.
 * @exception  rb_eRuntimeError  Too many symbols.
 * @return     A (possibly new) id whose value is the given name.
 * @note       These   days  Ruby   internally   has  two   kinds  of   symbols
 *             (static/dynamic).   Symbols created  using  this function  would
 *             become static ones;  i.e. would never be  garbage collected.  It
 *             is up  to you to avoid  memory leaks.  Think twice  before using
 *             it.
 */
ID rb_intern3(const char *name, long len, rb_encoding *enc);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_symname_p(), except it additionally takes an encoding.
 *
 * @param[in]  str  A C string to check.
 * @param[in]  enc  `str`'s encoding.
 * @retval     1    It is a valid symbol name.
 * @retval     0    It is invalid as a symbol name.
 */
int rb_enc_symname_p(const char *str, rb_encoding *enc);

/**
 * Identical  to rb_enc_symname_p(),  except it  additionally takes  the passed
 * string's length.  This  is needed for strings containing NUL  bytes, like in
 * case of UTF-32.
 *
 * @param[in]  name  A C string to check.
 * @param[in]  len   Number of bytes of `str`.
 * @param[in]  enc   `str`'s encoding.
 * @retval     1     It is a valid symbol name.
 * @retval     0     It is invalid as a symbol name.
 */
int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc);

/**
 * Identical to  rb_check_id(), except it  takes a  pointer to a  memory region
 * instead of Ruby's string.
 *
 * @param[in]  ptr                A pointer to a memory region.
 * @param[in]  len                Number of bytes of `ptr`.
 * @param[in]  enc                Encoding of `ptr`.
 * @exception  rb_eEncodingError  `ptr` contains non-ASCII according to `enc`.
 * @retval     0                  No such id ever existed in the history.
 * @retval     otherwise          The id that represents the given name.
 */
ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc);

/**
 * Identical to rb_check_id_cstr(), except for the return type.  It can also be
 * seen as a routine identical to  rb_check_symbol(), except it takes a pointer
 * to a memory region instead of Ruby's string.
 *
 * @param[in]  ptr                A pointer to a memory region.
 * @param[in]  len                Number of bytes of `ptr`.
 * @param[in]  enc                Encoding of `ptr`.
 * @exception  rb_eEncodingError  `ptr` contains non-ASCII according to `enc`.
 * @retval     RUBY_Qnil          No such id ever existed in the history.
 * @retval     otherwise          The id that represents the given name.
 */
VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_INTERNAL_ENCODING_SYMBOL_H */
PK*J[�1l�����)include/ruby/internal/encoding/encoding.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_ENCODING_H            /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_ENCODING_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines ::rb_encoding
 */

#include "ruby/oniguruma.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/attr/returns_nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/encoding/coderange.h"
#include "ruby/internal/value.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/fl_type.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * `Encoding` class.
 *
 * @ingroup object
 */
RUBY_EXTERN VALUE rb_cEncoding;

/**
 * @private
 *
 * Bit constants used when embedding encodings into ::RBasic::flags.  Extension
 * libraries must not bother such things.
 */
enum ruby_encoding_consts {

    /** Max possible number of embeddable encodings. */
    RUBY_ENCODING_INLINE_MAX = 127,

    /** Where inline encodings reside. */
    RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10),

    /** Bits we use to store inline encodings. */
    RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<<RUBY_ENCODING_SHIFT
                          /* RUBY_FL_USER10..RUBY_FL_USER16 */),

    /** Max possible length of an encoding name. */
    RUBY_ENCODING_MAXNAMELEN = 42
};

#define ENCODING_INLINE_MAX RUBY_ENCODING_INLINE_MAX /**< @old{RUBY_ENCODING_INLINE_MAX} */
#define ENCODING_SHIFT RUBY_ENCODING_SHIFT           /**< @old{RUBY_ENCODING_SHIFT} */
#define ENCODING_MASK RUBY_ENCODING_MASK             /**< @old{RUBY_ENCODING_MASK} */

/**
 * Destructively assigns the passed encoding  to the passed object.  The object
 * must be  capable of  having inline  encoding.  Using  this macro  needs deep
 * understanding of bit level object binary layout.
 *
 * @param[out]  obj      Target object to modify.
 * @param[in]   ecindex  Encoding in encindex format.
 * @post        `obj`'s encoding is `encindex`.
 */
static inline void
RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
{
    VALUE f = /* upcast */ RBIMPL_CAST((VALUE)encindex);

    f <<= RUBY_ENCODING_SHIFT;
    RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
    RB_FL_SET_RAW(obj, f);
}

/**
 * Queries the  encoding of the  passed object.   The encoding must  be smaller
 * than ::RUBY_ENCODING_INLINE_MAX, which means you have some assumption on the
 * return value.  This means the API is for internal use only.
 *
 * @param[in]  obj  Target object.
 * @return     `obj`'s encoding index.
 */
static inline int
RB_ENCODING_GET_INLINED(VALUE obj)
{
    VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT;

    return RBIMPL_CAST((int)ret);
}

#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i) /**< @old{RB_ENCODING_SET_INLINED} */
#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i)                 /**< @old{RB_ENCODING_SET} */
#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj)     /**< @old{RB_ENCODING_GET_INLINED} */
#define ENCODING_GET(obj) RB_ENCODING_GET(obj)                     /**< @old{RB_ENCODING_GET} */
#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj)   /**< @old{RB_ENCODING_IS_ASCII8BIT} */
#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN               /**< @old{RUBY_ENCODING_MAXNAMELEN} */

/**
 * The  type  of encoding.   Our  design  here  is we  take  Oniguruma/Onigmo's
 * multilingualisation schema as our base data structure.
 */
typedef const OnigEncodingType rb_encoding;

RBIMPL_ATTR_NOALIAS()
/**
 * Converts  a character  option  to its  encoding.  It  only  supports a  very
 * limited set  of Japanese encodings due  to its Japanese origin.   Ruby still
 * has this in-core for backwards compatibility.  But new codes must not bother
 * such  concept like  one-character encoding  option.  Consider  deprecated in
 * practice.
 *
 * @param[in]   c       One of `['n', 'e', 's', 'u', 'i', 'x', 'm']`.
 * @param[out]  option  Return buffer.
 * @param[out]  kcode   Return buffer.
 * @retval      1       `c` understood properly.
 * @retval      0       `c` is not understood.
 * @post        `option` is a ::OnigOptionType.
 * @post        `kcode` is an enum `ruby_preserved_encindex`.
 *
 * @internal
 *
 * `kcode`  is opaque  because  `ruby_preserved_encindex` is  not visible  from
 * extension libraries.  But who cares?
 */
int rb_char_to_option_kcode(int c, int *option, int *kcode);

/**
 * Creates a new "dummy" encoding.  Roughly speaking, an encoding is dummy when
 * it is  stateful.  Notable  example of  dummy encoding  are those  defined in
 * ISO/IEC 2022
 *
 * @param[in]  name  Name of the creating encoding.
 * @exception  rb_eArgError  Duplicated or malformed `name`.
 * @return     New dummy encoding's index.
 * @post       Encoding  named `name`  is created,  whose index  is the  return
 *             value.
 */
int rb_define_dummy_encoding(const char *name);

RBIMPL_ATTR_PURE()
/**
 * Queries if the passed encoding is dummy.
 *
 * @param[in]  enc  Encoding in question.
 * @retval     1    It is.
 * @retval     0    It isn't.
 */
int rb_enc_dummy_p(rb_encoding *enc);

RBIMPL_ATTR_PURE()
/**
 * Queries the  index of  the encoding.   An encoding's  index is  a Ruby-local
 * concept.  It is a (sequential) number assigned to each encoding.
 *
 * @param[in]  enc  Encoding in question.
 * @return     Its index.
 * @note       You can pass  null pointers to this function.   It is equivalent
 *             to rb_usascii_encindex() then.
 */
int rb_enc_to_index(rb_encoding *enc);

/**
 * Queries the index of the encoding of the passed object, if any.
 *
 * @param[in]  obj        Object in question.
 * @retval     -1         `obj` is incapable of having an encoding.
 * @retval     otherwise  `obj`'s encoding's index.
 */
int rb_enc_get_index(VALUE obj);

/**
 * @alias{rb_enc_get_index}
 *
 * @internal
 *
 * Implementation wise this is not a verbatim alias of rb_enc_get_index().  But
 * the API is consistent.  Don't bother.
 */
static inline int
RB_ENCODING_GET(VALUE obj)
{
    int encindex = RB_ENCODING_GET_INLINED(obj);

    if (encindex == RUBY_ENCODING_INLINE_MAX) {
        return rb_enc_get_index(obj);
    }
    else {
        return encindex;
    }
}

/**
 * Destructively assigns an encoding (via its index) to an object.
 *
 * @param[out]  obj                Object in question.
 * @param[in]   encindex           An encoding index.
 * @exception   rb_eFrozenError    `obj` is frozen.
 * @exception   rb_eArgError       `obj` is incapable of having an encoding.
 * @exception   rb_eEncodingError  `encindex` is out of bounds.
 * @exception   rb_eLoadError      Failed to load the encoding.
 */
void rb_enc_set_index(VALUE obj, int encindex);

/** @alias{rb_enc_set_index} */
static inline void
RB_ENCODING_SET(VALUE obj, int encindex)
{
    rb_enc_set_index(obj, encindex);
}

/**
 * This is #RB_ENCODING_SET  + RB_ENC_CODERANGE_SET combo.  The  object must be
 * capable  of   having  inline   encoding.   Using   this  macro   needs  deep
 * understanding of bit level object binary layout.
 *
 * @param[out]  obj       Target object.
 * @param[in]   encindex  Encoding in encindex format.
 * @param[in]   cr        An enum ::ruby_coderange_type.
 * @post        `obj`'s encoding is `encindex`.
 * @post        `obj`'s code range is `cr`.
 */
static inline void
RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr)
{
    RB_ENCODING_SET(obj, encindex);
    RB_ENC_CODERANGE_SET(obj, cr);
}

RBIMPL_ATTR_PURE()
/**
 * Queries if the passed object can have its encoding.
 *
 * @param[in]  obj  Object in question.
 * @retval     1    It can.
 * @retval     0    It cannot.
 */
int rb_enc_capable(VALUE obj);

/**
 * Queries the index of the encoding.
 *
 * @param[in]  name          Name of the encoding to find.
 * @exception  rb_eArgError  No such encoding named `name`.
 * @retval     -1            `name` exists, but unable to load.
 * @retval     otherwise     Index of encoding named `name`.
 */
int rb_enc_find_index(const char *name);

/**
 * Registers an  "alias" name.  In  the wild, an  encoding can be  called using
 * multiple names.  For instance an encoding  known as `"CP932"` is also called
 * `"SJIS"` on occasions.  This API registers such relationships.
 *
 * @param[in]  alias         New name.
 * @param[in]  orig          Old name.
 * @exception  rb_eArgError  `alias` is duplicated or malformed.
 * @retval     -1            Failed to load `orig`.
 * @retval     otherwise     The index of `orig` and `alias`.
 * @post       `alias` is  a synonym  of `orig`.  They  refer to  the identical
 *             encoding.
 */
int rb_enc_alias(const char *alias, const char *orig);

/**
 * Obtains   a  encoding   index  from   a   wider  range   of  objects   (than
 * rb_enc_find_index()).
 *
 * @param[in]  obj        An ::rb_cEncoding, or its name in ::rb_cString.
 * @retval     -1         `obj` is unexpected type/contents.
 * @retval     otherwise  Index corresponding to `obj`.
 */
int rb_to_encoding_index(VALUE obj);

/**
 * Identical to  rb_find_encoding(), except it  raises an exception  instead of
 * returning NULL.
 *
 * @param[in]  obj            An ::rb_cEncoding, or its name in ::rb_cString.
 * @exception  rb_eTypeError  `obj` is neither ::rb_cEncoding nor ::rb_cString.
 * @exception  rb_eArgError   `obj` is an unknown encoding name.
 * @return     Encoding of `obj`.
 */
rb_encoding *rb_to_encoding(VALUE obj);

/**
 * Identical to rb_to_encoding_index(), except the return type.
 *
 * @param[in]  obj            An ::rb_cEncoding, or its name in ::rb_cString.
 * @exception  rb_eTypeError  `obj` is neither ::rb_cEncoding nor ::rb_cString.
 * @retval     NULL           No such encoding.
 * @return     otherwise      Encoding of `obj`.
 */
rb_encoding *rb_find_encoding(VALUE obj);

/**
 * Identical to rb_enc_get_index(), except the return type.
 *
 * @param[in]  obj        Object in question.
 * @retval     NULL       Obj is incapable of having an encoding.
 * @retval     otherwise  `obj`'s encoding.
 */
rb_encoding *rb_enc_get(VALUE obj);

/**
 * Look for the "common" encoding between the two.  One character can or cannot
 * be expressed depending on an encoding.  This function finds the super-set of
 * encodings that  satisfy contents of  both arguments.  If that  is impossible
 * returns NULL.
 *
 * @param[in]  str1       An object.
 * @param[in]  str2       Another object.
 * @retval     NULL       No encoding can satisfy both at once.
 * @retval     otherwise  Common encoding between the two.
 * @note       Arguments can be non-string, e.g. Regexp.
 */
rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2);

/**
 * Identical to rb_enc_compatible(),  except it raises an  exception instead of
 * returning NULL.
 *
 * @param[in]  str1                An object.
 * @param[in]  str2                Another object.
 * @exception  rb_eEncCompatError  No encoding can satisfy both.
 * @return     Common encoding between the two.
 * @note       Arguments can be non-string, e.g. Regexp.
 */
rb_encoding *rb_enc_check(VALUE str1,VALUE str2);

/**
 * Identical to rb_enc_set_index(), except it additionally does contents fix-up
 * depending on the passed object.  It  for instance changes the byte length of
 * terminating `U+0000` according to the passed encoding.
 *
 * @param[out]  obj                Object in question.
 * @param[in]   encindex           An encoding index.
 * @exception   rb_eFrozenError    `obj` is frozen.
 * @exception   rb_eArgError       `obj` is incapable of having an encoding.
 * @exception   rb_eEncodingError  `encindex` is out of bounds.
 * @exception   rb_eLoadError      Failed to load the encoding.
 * @return      The passed `obj`.
 * @post        `obj`'s contents might be fixed according to `encindex`.
 */
VALUE rb_enc_associate_index(VALUE obj, int encindex);

/**
 * Identical to  rb_enc_associate_index(), except  it takes an  encoding itself
 * instead of its index.
 *
 * @param[out]  obj                Object in question.
 * @param[in]   enc                An encoding.
 * @exception   rb_eFrozenError    `obj` is frozen.
 * @exception   rb_eArgError       `obj` is incapable of having an encoding.
 * @return      The passed `obj`.
 * @post        `obj`'s contents might be fixed according to `enc`.
 */
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc);

/**
 * Destructively copies  the encoding of  the latter  object to that  of former
 * one.     It   can    also   be    seen   as    a   routine    identical   to
 * rb_enc_associate_index(), except it takes an object's encoding instead of an
 * encoding's index.
 *
 * @param[out]  dst                Object to modify.
 * @param[in]   src                Object to reference.
 * @exception   rb_eFrozenError    `dst` is frozen.
 * @exception   rb_eArgError       `dst` is incapable of having an encoding.
 * @exception   rb_eEncodingError  `src` is incapable of having an encoding.
 * @post        `dst`'s encoding is that of `src`'s.
 */
void rb_enc_copy(VALUE dst, VALUE src);


/**
 * Identical to rb_find_encoding(),  except it takes an  encoding index instead
 * of a Ruby object.
 *
 * @param[in]  idx        An encoding index.
 * @retval     NULL       No such encoding.
 * @retval     otherwise  An encoding whose index is `idx`.
 */
rb_encoding *rb_enc_from_index(int idx);

/**
 * Identical to  rb_find_encoding(), except  it takes a  C's string  instead of
 * Ruby's.
 *
 * @param[in]  name       Name of the encoding to query.
 * @retval     NULL       No such encoding.
 * @retval     otherwise  An encoding whose index is `idx`.
 */
rb_encoding *rb_enc_find(const char *name);

/**
 * Queries the (canonical) name of the passed encoding.
 *
 * @param[in]  enc  An encoding.
 * @return     Its name.
 */
static inline const char *
rb_enc_name(rb_encoding *enc)
{
    return enc->name;
}

/**
 * Queries  the minimum  number  of bytes  that the  passed  encoding needs  to
 * represent a character.  For ASCII and compatible encodings this is typically
 * 1.   There  are  however  encodings  whose   minimum  is  not  1;  they  are
 * historically called wide characters.
 *
 * @param[in]  enc  An encoding.
 * @return     Its least possible number of bytes except 0.
 */
static inline int
rb_enc_mbminlen(rb_encoding *enc)
{
    return enc->min_enc_len;
}

/**
 * Queries  the maximum  number  of bytes  that the  passed  encoding needs  to
 * represent a character.   Fixed-width encodings have the same  value for this
 * one  and  #rb_enc_mbminlen.   However there  are  variable-width  encodings.
 * UTF-8, for instance, takes from 1 up to 6 bytes.
 *
 * @param[in]  enc  An encoding.
 * @return     Its maximum possible number of bytes of a character.
 */
static inline int
rb_enc_mbmaxlen(rb_encoding *enc)
{
    return enc->max_enc_len;
}

/**
 * Queries the number of bytes of the character at the passed pointer.
 *
 * @param[in]  p    Pointer to a character's first byte.
 * @param[in]  e    End of the string that has `p`.
 * @param[in]  enc  Encoding of the string.
 * @return     If the character at `p` does  not end until `e`, number of bytes
 *             between `p`  and `e`.   Otherwise the number  of bytes  that the
 *             character at `p` is encoded.
 *
 * @internal
 *
 * Strictly speaking there  are chances when `p`  points to a middle  byte of a
 * wide character.   This function  returns "the  number of  bytes from  `p` to
 * nearest of either `e` or the next character boundary", if you go strict.
 */
int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);

/**
 * Identical to rb_enc_mbclen() unless the character at `p` overruns `e`.  That
 * can happen  for instance when  you read from a  socket and its  partial read
 * cuts  a  wide  character  in-between.  In  those  situations  this  function
 * "estimates" theoretical length  of the character in  question.  Typically it
 * tends  to be  possible  to know  how  many bytes  a  character needs  before
 * actually reaching its  end; for instance UTF-8 encodes  a character's length
 * in the first byte of it.  This function returns that info.
 *
 * @note  This implies that the string is not broken.
 *
 * @param[in]  p    Pointer to the character's first byte.
 * @param[in]  e    End of the string that has `p`.
 * @param[in]  enc  Encoding of the string.
 * @return     Number of bytes of character at `p`, measured or estimated.
 */
int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc);

/**
 * Queries the  number of bytes of  the character at the  passed pointer.  This
 * function returns 3 different types of information:
 *
 * ```CXX
 * auto n = rb_enc_precise_mbclen(p, q, r);
 *
 * if (ONIGENC_MBCLEN_CHARFOUND_P(n)) {
 *     // Character found.  Normal return.
 *     auto found_length = ONIGENC_MBCLEN_CHARFOUND_LEN(n);
 * }
 * else if (ONIGENC_MBCLEN_NEEDMORE_P(n)) {
 *     // Character overruns past `q`; needs more.
 *     auto requested_length = ONIGENC_MBCLEN_NEEDMORE_LEN(n);
 * }
 * else {
 *     // `p` is broken.
 *     assert(ONIGENC_MBCLEN_INVALID_P(n));
 * }
 * ```
 *
 * @param[in]  p    Pointer to the character's first byte.
 * @param[in]  e    End of the string that has `p`.
 * @param[in]  enc  Encoding of the string.
 * @return     Encoded read/needed number of bytes (see above).
 */
int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);

#define MBCLEN_CHARFOUND_P(ret)   ONIGENC_MBCLEN_CHARFOUND_P(ret)   /**< @old{ONIGENC_MBCLEN_CHARFOUND_P} */
#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret) /**< @old{ONIGENC_MBCLEN_CHARFOUND_LEN} */
#define MBCLEN_INVALID_P(ret)     ONIGENC_MBCLEN_INVALID_P(ret)     /**< @old{ONIGENC_MBCLEN_INVALID_P} */
#define MBCLEN_NEEDMORE_P(ret)    ONIGENC_MBCLEN_NEEDMORE_P(ret)    /**< @old{ONIGENC_MBCLEN_NEEDMORE_P} */
#define MBCLEN_NEEDMORE_LEN(ret)  ONIGENC_MBCLEN_NEEDMORE_LEN(ret)  /**< @old{ONIGENC_MBCLEN_NEEDMORE_LEN} */

/**
 * Queries the code point of character  pointed by the passed pointer.  If that
 * code point is included in ASCII  that code point is returned.  Otherwise -1.
 * This can be different from just looking  at the first byte.  For instance it
 * reads 2 bytes in case of UTF-16BE.
 *
 * @param[in]  p          Pointer to the character's first byte.
 * @param[in]  e          End of the string that has `p`.
 * @param[in]  len        Return buffer.
 * @param[in]  enc        Encoding of the string.
 * @retval     -1         The character at `p` is not i ASCII.
 * @retval     otherwise  A code point of the character at `p`.
 * @post       `len` (if set) is the number of bytes of `p`.
 */
int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);

/**
 * Queries  the  code  point  of  character  pointed  by  the  passed  pointer.
 * Exceptions happen in case of broken input.
 *
 * @param[in]  p             Pointer to the character's first byte.
 * @param[in]  e             End of the string that has `p`.
 * @param[in]  len           Return buffer.
 * @param[in]  enc           Encoding of the string.
 * @exception  rb_eArgError  `p` is broken.
 * @return     Code point of the character pointed by `p`.
 * @post       `len` (if set) is the number of bytes of `p`.
 */
unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc);

/**
 * Queries  the  code  point  of  character  pointed  by  the  passed  pointer.
 * Exceptions happen in case of broken input.
 *
 * @deprecated  Use rb_enc_codepoint_len() instead.
 * @param[in]   p             Pointer to the character's first byte.
 * @param[in]   e             End of the string that has `p`.
 * @param[in]   enc           Encoding of the string.
 * @exception   rb_eArgError  `p` is broken.
 * @return      Code point of the character pointed by `p`.
 *
 * @internal
 *
 * @matz says in commit  91e5ba1cb865a2385d3e1cbfacd824496898e098 that the line
 * below  is a  "prototype for  obsolete function".   However even  today there
 * still are some use  cases of it throughout our repository.   It seems it has
 * its own niche.
 */
static inline unsigned int
rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc)
{
    return rb_enc_codepoint_len(p, e, 0, enc);
    /*                               ^^^
     * This can be `NULL` in C, `nullptr` in C++, and `0` for both.
     * We choose the most portable one here.
     */
}


/**
 * Identical to rb_enc_codepoint(),  except it assumes the  passed character is
 * not broken.
 *
 * @param[in]   p    Pointer to the character's first byte.
 * @param[in]   e    End of the string that has `p`.
 * @param[in]   enc  Encoding of the string.
 * @return      Code point of the character pointed by `p`.
 */
static inline OnigCodePoint
rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc)
{
    const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p);
    const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e);

    return ONIGENC_MBC_TO_CODE(enc, up, ue);
}

/**
 * Queries the  number of bytes  requested to  represent the passed  code point
 * using the passed encoding.
 *
 * @param[in]  code          Code point in question.
 * @param[in]  enc           Encoding to convert the code into a byte sequence.
 * @exception  rb_eArgError  `enc` does not glean `code`.
 * @return     Number of bytes requested to represent `code` using `enc`.
 */
int rb_enc_codelen(int code, rb_encoding *enc);

/**
 * Identical to rb_enc_codelen(), except it returns 0 for invalid code points.
 *
 * @param[in]  c          Code point in question.
 * @param[in]  enc        Encoding to convert `c` into a byte sequence.
 * @retval     0          `c` is invalid.
 * @return     otherwise  Number of bytes needed for `enc` to encode `c`.
 */
static inline int
rb_enc_code_to_mbclen(int c, rb_encoding *enc)
{
    OnigCodePoint uc = RBIMPL_CAST((OnigCodePoint)c);

    return ONIGENC_CODE_TO_MBCLEN(enc, uc);
}

/**
 * Identical to rb_enc_uint_chr(),  except it writes back to  the passed buffer
 * instead of allocating one.
 *
 * @param[in]  c          Code point.
 * @param[out] buf        Return buffer.
 * @param[in]  enc        Target encoding scheme.
 * @retval     <= 0       `c` is invalid in `enc`.
 * @return     otherwise  Number of bytes written to `buf`.
 * @post       `c` is encoded according to `enc`, then written to `buf`.
 *
 * @internal
 *
 * The second argument  must be typed.  But its current  usages prevent us from
 * being any stricter than this. :FIXME:
 */
static inline int
rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc)
{
    OnigCodePoint uc = RBIMPL_CAST((OnigCodePoint)c);
    OnigUChar *ubuf = RBIMPL_CAST((OnigUChar *)buf);

    return ONIGENC_CODE_TO_MBC(enc, uc, ubuf);
}

/**
 * Queries the previous (left) character.
 *
 * @param[in]  s          Start of the string.
 * @param[in]  p          Pointer to a character.
 * @param[in]  e          End of the string.
 * @param[in]  enc        Encoding.
 * @retval     NULL       No previous character.
 * @retval     otherwise  Pointer to the head of the previous character.
 */
static inline char *
rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc)
{
    const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s);
    const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p);
    const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e);
    OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue);

    return RBIMPL_CAST((char *)ur);
}

/**
 * Queries the  left boundary of  a character.   This function takes  a pointer
 * that is not necessarily a head of a character, and searches for its head.
 *
 * @param[in]  s          Start of the string.
 * @param[in]  p          Pointer to a possibly-middle of a character.
 * @param[in]  e          End of the string.
 * @param[in]  enc        Encoding.
 * @return     Pointer to the head of the character that contains `p`.
 */
static inline char *
rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
{
    const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s);
    const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p);
    const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e);
    OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue);

    return RBIMPL_CAST((char *)ur);
}

/**
 * Queries the  right boundary of a  character.  This function takes  a pointer
 * that is not necessarily a head of a character, and searches for its tail.
 *
 * @param[in]  s    Start of the string.
 * @param[in]  p    Pointer to a possibly-middle of a character.
 * @param[in]  e    End of the string.
 * @param[in]  enc  Encoding.
 * @return     Pointer to the end of the character that contains `p`.
 */
static inline char *
rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
{
    const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s);
    const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p);
    const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e);
    OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue);

    return RBIMPL_CAST((char *)ur);
}

/**
 * Scans the string backwards for n characters.
 *
 * @param[in]  s          Start of the string.
 * @param[in]  p          Pointer to a character.
 * @param[in]  e          End of the string.
 * @param[in]  n          Steps.
 * @param[in]  enc        Encoding.
 * @retval     NULL       There are no `n` characters left.
 * @retval     otherwise  Pointer to `n` character before `p`.
 */
static inline char *
rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc)
{
    const OnigUChar *us = RBIMPL_CAST((const OnigUChar *)s);
    const OnigUChar *up = RBIMPL_CAST((const OnigUChar *)p);
    const OnigUChar *ue = RBIMPL_CAST((const OnigUChar *)e);
    const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n);

    return RBIMPL_CAST((char *)ur);
}

/**
 * @private
 *
 * This is an implementation detail  of rb_enc_asciicompat().  People don't use
 * it directly.  Just always use rb_enc_asciicompat().
 *
 * @param[in]  enc  Encoding in question.
 * @retval     1    It is ASCII compatible.
 * @retval     0    It isn't.
 */
static inline int
rb_enc_asciicompat_inline(rb_encoding *enc)
{
    return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc);
}

/**
 * Queries if  the passed encoding  is _in  some sense_ compatible  with ASCII.
 * The  concept  of  ASCII  compatibility   is  nuanced,  and  private  to  our
 * implementation.  For instance SJIS is  ASCII compatible to us, despite their
 * having different  characters at code  point `0x5C`.   This is based  on some
 * practical  consideration that  Japanese people  confuses SJIS  to be  "upper
 * compatible" with ASCII (which is in fact  a wrong idea, but we just don't go
 * strict here).  An example of  ASCII incompatible encoding is UTF-16.  UTF-16
 * shares code points  with ASCII, but employs a  completely different encoding
 * scheme.
 *
 * @param[in]  enc  Encoding in question.
 * @retval     0    It is incompatible.
 * @retval     1    It is compatible.
 */
static inline bool
rb_enc_asciicompat(rb_encoding *enc)
{
    if (rb_enc_mbminlen(enc) != 1) {
        return false;
    }
    else if (rb_enc_dummy_p(enc)) {
        return false;
    }
    else {
        return true;
    }
}

/**
 * Queries if the passed string is in an ASCII-compatible encoding.
 *
 * @param[in]  str  A Ruby's string to query.
 * @retval     0    `str` is not a String, or an ASCII-incompatible string.
 * @retval     1    Otherwise.
 */
static inline bool
rb_enc_str_asciicompat_p(VALUE str)
{
    rb_encoding *enc = rb_enc_get(str);

    return rb_enc_asciicompat(enc);
}

/**
 * Queries  the   Ruby-level  counterpart   instance  of   ::rb_cEncoding  that
 * corresponds to the passed encoding.
 *
 * @param[in]  enc  An encoding
 * @retval     RUBY_Qnil  `enc` is a null pointer.
 * @retval     otherwise  An instance of ::rb_cEncoding.
 */
VALUE rb_enc_from_encoding(rb_encoding *enc);

RBIMPL_ATTR_PURE()
/**
 * Queries if the passed encoding is either one of UTF-8/16/32.
 *
 * @note  It does not take UTF-7, which we actually support, into account.
 *
 * @param[in]  enc        Encoding in question.
 * @retval     0          It is not a Unicode variant.
 * @retval     otherwise  It is.
 *
 * @internal
 *
 * In   reality   it   returns   1/0,   but  the   value   is   abstracted   as
 * `ONIGENC_FLAG_UNICODE`.
 */
int rb_enc_unicode_p(rb_encoding *enc);

RBIMPL_ATTR_RETURNS_NONNULL()
/**
 * Queries the encoding that represents ASCII-8BIT a.k.a. binary.
 *
 * @return  The encoding that represents ASCII-8BIT.
 *
 * @internal
 *
 * This can not return NULL once the process properly boots up.
 */
rb_encoding *rb_ascii8bit_encoding(void);

RBIMPL_ATTR_RETURNS_NONNULL()
/**
 * Queries the encoding that represents UTF-8.
 *
 * @return  The encoding that represents UTF-8.
 *
 * @internal
 *
 * This can not return NULL once the process properly boots up.
 */
rb_encoding *rb_utf8_encoding(void);

RBIMPL_ATTR_RETURNS_NONNULL()
/**
 * Queries the encoding that represents US-ASCII.
 *
 * @return  The encoding that represents US-ASCII.
 *
 * @internal
 *
 * This can not return NULL once the process properly boots up.
 */
rb_encoding *rb_usascii_encoding(void);

/**
 * Queries the encoding that represents the current locale.
 *
 * @return  The encoding that represents the process' locale.
 *
 * @internal
 *
 * This  is dynamic.   If  you  change the  process'  locale  by e.g.   calling
 * `setlocale(3)`, that should also change the return value of this function.
 *
 * There is no official way for Ruby scripts to manipulate locales, though.
 */
rb_encoding *rb_locale_encoding(void);

/**
 * Queries the "filesystem"  encoding.  This is the encoding  that ruby expects
 * info from  the OS'  file system  are in.  This  affects for  instance return
 * value of rb_dir_getwd().  Most  notably on Windows it can be  an alias of OS
 * codepage.  Most  notably on Linux  users can  set this via  default external
 * encoding.
 *
 * @return  The "filesystem" encoding.
 */
rb_encoding *rb_filesystem_encoding(void);

/**
 * Queries  the "default  external" encoding.   This is  used to  interact with
 * outer-process things such as File.  Though not recommended, you can set this
 * using rb_enc_set_default_external().
 *
 * @return  The "default external"  encoding.
 */
rb_encoding *rb_default_external_encoding(void);

/**
 * Queries  the "default  internal" encoding.   This could  be a  null pointer.
 * Otherwise, outer-process info are  transcoded from default external encoding
 * to this one during reading from an IO.
 *
 * @return  The "default internal"  encoding (if any).
 */
rb_encoding *rb_default_internal_encoding(void);

#ifndef rb_ascii8bit_encindex
RBIMPL_ATTR_CONST()
/**
 * Identical to rb_ascii8bit_encoding(), except it returns the encoding's index
 * instead of the encoding itself.
 *
 * @return  The index of encoding of ASCII-8BIT.
 *
 * @internal
 *
 * This happens to be 0.
 */
int rb_ascii8bit_encindex(void);
#endif

/**
 * Queries if  the passed  object is  in ascii 8bit  (== binary)  encoding. The
 * object must  be capable of having  inline encoding.  Using this  macro needs
 * deep understanding of bit level object binary layout.
 *
 * @param[in]  obj  An object to check.
 * @retval     1    It is.
 * @retval     0    It isn't.
 */
static inline bool
RB_ENCODING_IS_ASCII8BIT(VALUE obj)
{
    return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex();
}

#ifndef rb_utf8_encindex
RBIMPL_ATTR_CONST()
/**
 * Identical  to rb_utf8_encoding(),  except  it returns  the encoding's  index
 * instead of the encoding itself.
 *
 * @return  The index of encoding of UTF-8.
 */
int rb_utf8_encindex(void);
#endif

#ifndef rb_usascii_encindex
RBIMPL_ATTR_CONST()
/**
 * Identical to  rb_usascii_encoding(), except it returns  the encoding's index
 * instead of the encoding itself.
 *
 * @return  The index of encoding of UTF-8.
 */
int rb_usascii_encindex(void);
#endif

/**
 * Identical to  rb_locale_encoding(), except  it returns the  encoding's index
 * instead of the encoding itself.
 *
 * @return  The index of the locale encoding.
 */
int rb_locale_encindex(void);

/**
 * Identical  to rb_filesystem_encoding(),  except  it  returns the  encoding's
 * index instead of the encoding itself.
 *
 * @return  The index of the filesystem encoding.
 */
int rb_filesystem_encindex(void);

/**
 * Identical   to  rb_default_external_encoding(),   except   it  returns   the
 * Ruby-level counterpart  instance of  ::rb_cEncoding that corresponds  to the
 * default external encoding.
 *
 * @return  An instance of ::rb_cEncoding of default external.
 */
VALUE rb_enc_default_external(void);

/**
 * Identical   to  rb_default_internal_encoding(),   except   it  returns   the
 * Ruby-level counterpart  instance of  ::rb_cEncoding that corresponds  to the
 * default internal encoding.
 *
 * @return  An instance of ::rb_cEncoding of default internal.
 */
VALUE rb_enc_default_internal(void);

/**
 * Destructively assigns the passed encoding  as the default external encoding.
 * You should not  use this API.  It has process-global  side effects.  Also it
 * doesn't change encodings of strings that have already been read.
 *
 * @param[in]  encoding      Ruby level encoding.
 * @exception  rb_eArgError  `encoding` is ::RUBY_Qnil.
 * @post       The default external encoding is `encoding`.
 */
void rb_enc_set_default_external(VALUE encoding);

/**
 * Destructively assigns the passed encoding  as the default internal encoding.
 * You should not  use this API.  It has process-global  side effects.  Also it
 * doesn't change encodings of strings that have already been read.
 *
 * @param[in]  encoding      Ruby level encoding.
 * @post       The default internal encoding is `encoding`.
 * @note       Unlike rb_enc_set_default_external() you can pass ::RUBY_Qnil.
 */
void rb_enc_set_default_internal(VALUE encoding);

/**
 * Returns  a   platform-depended  "charmap"  of  the   current  locale.   This
 * information  is  called   a  "Codeset  name"  in  IEEE   1003.1  section  13
 * (`<langinfo.h>`).  This is a very low-level  API.  The return value can have
 * no corresponding encoding when passed to rb_find_encoding().
 *
 * @param[in]  klass  Ignored for no reason (why...)
 * @return     The low-level locale charmap, in Ruby's String.
 */
VALUE rb_locale_charmap(VALUE klass);

RBIMPL_SYMBOL_EXPORT_END()

/** @cond INTERNAL_MACRO */
#define RB_ENCODING_GET          RB_ENCODING_GET
#define RB_ENCODING_GET_INLINED  RB_ENCODING_GET_INLINED
#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT
#define RB_ENCODING_SET          RB_ENCODING_SET
#define RB_ENCODING_SET_INLINED  RB_ENCODING_SET_INLINED
#define rb_enc_asciicompat       rb_enc_asciicompat
#define rb_enc_code_to_mbclen    rb_enc_code_to_mbclen
#define rb_enc_codepoint         rb_enc_codepoint
#define rb_enc_left_char_head    rb_enc_left_char_head
#define rb_enc_mbc_to_codepoint  rb_enc_mbc_to_codepoint
#define rb_enc_mbcput            rb_enc_mbcput
#define rb_enc_mbmaxlen          rb_enc_mbmaxlen
#define rb_enc_mbminlen          rb_enc_mbminlen
#define rb_enc_name              rb_enc_name
#define rb_enc_prev_char         rb_enc_prev_char
#define rb_enc_right_char_head   rb_enc_right_char_head
#define rb_enc_step_back         rb_enc_step_back
#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p
/** @endcond */

#endif /* RUBY_INTERNAL_ENCODING_ENCODING_H */
PK*J[��*�<�<'include/ruby/internal/encoding/string.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_STRING_H              /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_STRING_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate encodings of strings.
 */

#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/intern/string.h" /* rbimpl_strlen */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Identical to rb_str_new(), except it additionally takes an encoding.
 *
 * @param[in]  ptr             A memory region of `len` bytes length.
 * @param[in]  len             Length  of `ptr`,  in bytes,  not including  the
 *                             terminating NUL character.
 * @param[in]  enc             Encoding of `ptr`.
 * @exception  rb_eNoMemError  Failed to allocate `len+1` bytes.
 * @exception  rb_eArgError    `len` is negative.
 * @return     An instance  of ::rb_cString,  of `len`  bytes length,  of `enc`
 *             encoding, whose contents are verbatim copy of `ptr`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `ptr`.
 * @note       `enc` can be a  null pointer.  It can also be  seen as a routine
 *             identical to rb_usascii_str_new() then.
 */
VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc);

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical to  rb_enc_str_new(), except  it assumes the  passed pointer  is a
 * pointer  to a  C string.  It can  also  be seen  as a  routine identical  to
 * rb_str_new_cstr(), except it additionally takes an encoding.
 *
 * @param[in]  ptr             A C string.
 * @param[in]  enc             Encoding of `ptr`.
 * @exception  rb_eNoMemError  Failed to allocate memory.
 * @return     An instance  of ::rb_cString, of `enc`  encoding, whose contents
 *             are verbatim copy of `ptr`.
 * @pre        `ptr` must not be a null pointer.
 * @pre        Because `ptr` is  a C string it  makes no sense for  `enc` to be
 *             something like UTF-32.
 * @note       `enc` can be a  null pointer.  It can also be  seen as a routine
 *             identical to rb_usascii_str_new_cstr() then.
 */
VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc);

/**
 * Identical to rb_enc_str_new(),  except it takes a C string  literal.  It can
 * also  be seen  as  a  routine identical  to  rb_str_new_static(), except  it
 * additionally takes an encoding.
 *
 * @param[in]  ptr           A C string literal.
 * @param[in]  len           `strlen(ptr)`.
 * @param[in]  enc           Encoding of `ptr`.
 * @exception  rb_eArgError  `len` out of range of `size_t`.
 * @pre        `ptr` must be a C string constant.
 * @return     An instance  of ::rb_cString,  of `enc` encoding,  whose backend
 *             storage is the passed C string literal.
 * @warning    It is  a very  bad idea to  write to a  C string  literal (often
 *             immediate  SEGV shall  occur).  Consider  return values  of this
 *             function be read-only.
 * @note       `enc` can be a  null pointer.  It can also be  seen as a routine
 *             identical to rb_usascii_str_new_static() then.
 */
VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc);

/**
 * Identical to rb_enc_str_new(),  except it returns a "f"string.   It can also
 * be seen as a routine  identical to rb_interned_str(), except it additionally
 * takes an encoding.
 *
 * @param[in]  ptr           A memory region of `len` bytes length.
 * @param[in]  len           Length  of  `ptr`,  in bytes,  not  including  the
 *                           terminating NUL character.
 * @param[in]  enc           Encoding of `ptr`.
 * @exception  rb_eArgError  `len` is negative.
 * @return     A  found or  created instance  of ::rb_cString,  of `len`  bytes
 *             length, of `enc` encoding, whose  contents are identical to that
 *             of `ptr`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `ptr`.
 * @note       `enc` can be a null  pointer.
 */
VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc);

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical to rb_enc_str_new_cstr(),  except it returns a  "f"string.  It can
 * also be  seen as  a routine identical  to rb_interned_str_cstr(),  except it
 * additionally takes an encoding.
 *
 * @param[in]  ptr           A memory region of `len` bytes length.
 * @param[in]  enc           Encoding of `ptr`.
 * @return     A found  or created instance  of ::rb_cString of `enc` encoding,
 *             whose contents are identical to that of `ptr`.
 * @pre        At  least  `len` bytes  of  continuous  memory region  shall  be
 *             accessible via `ptr`.
 * @note       `enc` can be a null  pointer.
 */
VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc);

/**
 * Counts  the number  of characters  of the  passed string,  according to  the
 * passed encoding.   This has to be  complicated.  The passed string  could be
 * invalid and/or broken.   This routine would scan from the  beginning til the
 * end, byte by byte, to seek out character boundaries.  Could be super slow.
 *
 * @param[in]  head  Leftmost pointer to the string.
 * @param[in]  tail  Rightmost pointer to the string.
 * @param[in]  enc   Encoding of the string.
 * @return     Number of characters exist in  `head` .. `tail`.  The definition
 *             of "character" depends on the passed `enc`.
 */
long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc);

/**
 * Queries the n-th character.  Like  rb_enc_strlen() this function can be fast
 * or slow depending on the contents.   Don't expect characters to be uniformly
 * distributed across the entire string.
 *
 * @param[in]  head  Leftmost pointer to the string.
 * @param[in]  tail  Rightmost pointer to the string.
 * @param[in]  nth   Requested index of characters.
 * @param[in]  enc   Encoding of the string.
 * @return     Pointer  to  the first  byte  of  the  character that  is  `nth`
 *             character  ahead  of `head`,  or  `tail`  if  there is  no  such
 *             character (OOB  etc).  The definition of  "character" depends on
 *             the passed `enc`.
 */
char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc);

/**
 * Identical to rb_enc_get_index(), except the return type.
 *
 * @param[in]  obj            Object in question.
 * @exception  rb_eTypeError  `obj` is incapable of having an encoding.
 * @return     `obj`'s encoding.
 */
VALUE rb_obj_encoding(VALUE obj);

/**
 * Identical to rb_str_cat(), except it additionally takes an encoding.
 *
 * @param[out]  str                 Destination object.
 * @param[in]   ptr                 Contents to append.
 * @param[in]   len                 Length of `src`, in bytes.
 * @param[in]   enc                 Encoding of `ptr`.
 * @exception   rb_eArgError        `len` is negative.
 * @exception   rb_eEncCompatError  `enc` is not compatible with `str`.
 * @return      The passed `dst`.
 * @post        The  contents  of  `ptr`  is copied,  transcoded  into  `dst`'s
 *              encoding, then pasted into `dst`'s end.
 */
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);

/**
 * Encodes the passed code point into a series of bytes.
 *
 * @param[in]  code             Code point.
 * @param[in]  enc              Target encoding scheme.
 * @exception  rb_eRangeError  `enc` does not glean `code`.
 * @return     An  instance  of ::rb_cString,  of  `enc`  encoding, whose  sole
 *             contents is `code` represented in `enc`.
 * @note       No way to encode code points bigger than UINT_MAX.
 *
 * @internal
 *
 * In  other languages,  APIs like  this  one could  be seen  as the  primitive
 * routines where encodings' "encode" feature are implemented.  However in case
 * of  Ruby this  is not  the primitive  one.  We  directly manipulate  encoded
 * strings.  Encoding conversion routines  transcode an encoded string directly
 * to another one; not via a code point array.
 */
VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc);

/**
 * Identical  to   rb_external_str_new(),  except  it  additionally   takes  an
 * encoding.  However the  whole point of rb_external_str_new() is  to encode a
 * string  into default  external encoding.   Being able  to specify  arbitrary
 * encoding just ruins the designed purpose the function meseems.
 *
 * @param[in]  ptr           A memory region of `len` bytes length.
 * @param[in]  len           Length  of  `ptr`,  in bytes,  not  including  the
 *                           terminating NUL character.
 * @param[in]  enc           Target encoding scheme.
 * @exception  rb_eArgError  `len` is negative.
 * @return     An instance  of ::rb_cString.  In case  encoding conversion from
 *             "default  internal" to  `enc` is  fully defined  over the  given
 *             contents, then the  return value is a string  of `enc` encoding,
 *             whose contents are the converted  ones.  Otherwise the string is
 *             a junk.
 * @warning    It doesn't raise on a conversion failure and silently ends up in
 *             a  corrupted  output.  You  can  know  the failure  by  querying
 *             `valid_encoding?` of the result object.
 *
 * @internal
 *
 * @shyouhei has  no idea why  this one does  not follow the  naming convention
 * that  others obey.   It  seems to  him  that this  should  have been  called
 * `rb_enc_external_str_new`.
 */
VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc);

/**
 * Identical to rb_str_export(), except it additionally takes an encoding.
 *
 * @param[in]  obj            Target object.
 * @param[in]  enc            Target encoding.
 * @exception  rb_eTypeError  No implicit conversion to String.
 * @return     Converted ruby string of `enc` encoding.
 */
VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc);

/**
 * Encoding conversion main routine.
 *
 * @param[in]  str   String to convert.
 * @param[in]  from  Source encoding.
 * @param[in]  to    Destination encoding.
 * @return     A copy of `str`, with conversion from `from` to `to` applied.
 * @note       `from` can be a null pointer.  `str`'s encoding is taken then.
 * @note       `to` can be a null pointer.  No-op then.
 */
VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);

/**
 * Identical  to rb_str_conv_enc(),  except  it additionally  takes IO  encoder
 * options.  The extra arguments  can be constructed using io_extract_modeenc()
 * etc.
 *
 * @param[in]  str      String to convert.
 * @param[in]  from     Source encoding.
 * @param[in]  to       Destination encoding.
 * @param[in]  ecflags  A set of enum ::ruby_econv_flag_type.
 * @param[in]  ecopts   Optional hash.
 * @return     A copy of `str`, with conversion from `from` to `to` applied.
 * @note       `from` can be a null pointer.  `str`'s encoding is taken then.
 * @note       `to` can be a null pointer.  No-op then.
 * @note       `ecopts` can be  ::RUBY_Qnil, which is equivalent  to passing an
 *             empty hash.
 */
VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);

/**
 * Scans the passed string to collect  its code range.  Because a Ruby's string
 * is mutable, its contents  change from time to time; so  does its code range.
 * A  long-lived string  tends  to fall  back to  ::RUBY_ENC_CODERANGE_UNKNOWN.
 * This API scans it and re-assigns a fine-grained code range constant.
 *
 * @param[out]  str  A string.
 * @return      An enum ::ruby_coderange_type.
 */
int rb_enc_str_coderange(VALUE str);

/**
 * Scans the passed string until it finds something odd.  Returns the number of
 * bytes scanned.  As the name implies this is suitable for repeated call.  One
 * of its application is `IO#readlines`.   The method reads from its receiver's
 * read buffer, maybe more than once,  looking for newlines.  But "newline" can
 * be different among encodings.  This API is used to detect broken contents to
 * properly mark them as such.
 *
 * @param[in]   str  String to scan.
 * @param[in]   end  End of `str`.
 * @param[in]   enc  `str`'s encoding.
 * @param[out]  cr   Return buffer.
 * @return      Distance between `str` and first such byte where broken.
 * @post        `cr` has the code range type.
 */
long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr);

/**
 * Queries if  the passed string  is "ASCII only".  An  ASCII only string  is a
 * string  who doesn't  have any  non-ASCII  characters at  all.  This  doesn't
 * necessarily mean the string is in  ASCII encoding.  For instance a String of
 * CP932 encoding can quite much be ASCII only, depending on its contents.
 *
 * @param[in]  str  String in question.
 * @retval     1    It doesn't have non-ASCII characters.
 * @retval     0    It has characters that are out of ASCII.
 */
int rb_enc_str_asciionly_p(VALUE str);

RBIMPL_ATTR_NONNULL(())
/**
 * Looks for the passed string in the passed buffer.
 *
 * @param[in]  x          Query string.
 * @param[in]  m          Number of bytes of `x`.
 * @param[in]  y          Buffer that potentially includes `x`.
 * @param[in]  n          Number of bytes of `y`.
 * @param[in]  enc        Encoding of both `x` and `y`.
 * @retval     -1         Not found.
 * @retval     otherwise  Found index in `y`.
 * @note       This API can match at a non-character-boundary.
 */
long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc);

/** @cond INTERNAL_MACRO */
RBIMPL_ATTR_NONNULL(())
static inline VALUE
rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc)
{
    long len = rbimpl_strlen(str);

    return rb_enc_str_new_static(str, len, enc);
}

#define rb_enc_str_new(str, len, enc)           \
    ((RBIMPL_CONSTANT_P(str) &&                 \
      RBIMPL_CONSTANT_P(len) ?                  \
      rb_enc_str_new_static:                    \
      rb_enc_str_new) ((str), (len), (enc)))

#define rb_enc_str_new_cstr(str, enc)           \
    ((RBIMPL_CONSTANT_P(str)  ?                 \
      rbimpl_enc_str_new_cstr :                 \
      rb_enc_str_new_cstr) ((str), (enc)))

/** @endcond */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_INTERNAL_ENCODING_STRING_H */
PK*J[�j}��
�
(include/ruby/internal/encoding/sprintf.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_SPRINTF_H             /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_SPRINTF_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate encodings of symbols.
 */
#include "ruby/internal/config.h"
#include <stdarg.h>
#include "ruby/internal/attr/format.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
/**
 * Identical to  rb_sprintf(), except it  additionally takes an  encoding.  The
 * passed encoding rules  both the incoming format specifier  and the resulting
 * string.
 *
 * @param[in]  enc  Encoding of `fmt`.
 * @param[in]  fmt  A `printf`-like format specifier.
 * @param[in]  ...  Variadic number of contents to format.
 * @return     A rendered new instance of ::rb_cString, of `enc` encoding.
 */
VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...);

RBIMPL_ATTR_NONNULL((2))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0)
/**
 * Identical  to  rb_enc_sprintf(), except  it  takes  a `va_list`  instead  of
 * variadic  arguments.   It  can  also  be seen  as  a  routine  identical  to
 * rb_vsprintf(), except it additionally takes an encoding.
 *
 * @param[in]  enc  Encoding of `fmt`.
 * @param[in]  fmt  A `printf`-like format specifier.
 * @param[in]  ap   Contents to format.
 * @return     A rendered new instance of ::rb_cString, of `enc` encoding.
 */
VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_NONNULL((3))
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4)
/**
 * Identical to rb_raise(), except it additionally takes an encoding.
 *
 * @param[in]  enc  Encoding of the generating exception.
 * @param[in]  exc  A subclass of ::rb_eException.
 * @param[in]  fmt  Format specifier string compatible with rb_sprintf().
 * @param[in]  ...  Contents of the message.
 * @exception  exc  The specified exception.
 * @note       It never returns.
 */
void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_INTERNAL_ENCODING_SPRINTF_H */
PK*J[5x��WW&include/ruby/internal/encoding/ctype.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_CTYPE_H               /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_CTYPE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to query chacater types.
 */

#include "ruby/onigmo.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Queries if  the passed  pointer points  to a newline  character.  What  is a
 * newline and what is not depends on the passed encoding.
 *
 * @param[in]  p          Pointer to a possibly-middle of a character.
 * @param[in]  end        End of the string.
 * @param[in]  enc        Encoding.
 * @retval     false      It isn't.
 * @retval     true       It is.
 */
static inline bool
rb_enc_is_newline(const char *p,  const char *e, rb_encoding *enc)
{
    OnigUChar *up = RBIMPL_CAST((OnigUChar *)p);
    OnigUChar *ue = RBIMPL_CAST((OnigUChar *)e);

    return ONIGENC_IS_MBC_NEWLINE(enc, up, ue);
}

/**
 * Queries if the passed  code point is of passed character  type in the passed
 * encoding.  The "character type" here is a set of macros defined in onigmo.h,
 * like `ONIGENC_CTYPE_PUNCT`.
 *
 * @param[in]  c          An `OnigCodePoint` value.
 * @param[in]  t          An `OnigCtype` value.
 * @param[in]  enc        A `rb_encoding*` value.
 * @retval     true       `c` is of `t` in `enc`.
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_CTYPE(enc, c, t);
}

/**
 * Identical to rb_isascii(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     false      `c` is out of range of ASCII character set in `enc`.
 * @retval     true       Otherwise.
 *
 * @internal
 *
 * `enc` is  ignored.  This  is at least  an intentional  implementation detail
 * (not a bug).  But there could be rooms for future extensions.
 */
static inline bool
rb_enc_isascii(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_ASCII(c);
}

/**
 * Identical to rb_isalpha(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "ALPHA".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_ALPHA(enc, c);
}

/**
 * Identical to rb_islower(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "LOWER".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_islower(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_LOWER(enc, c);
}

/**
 * Identical to rb_isupper(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "UPPER".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_isupper(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_UPPER(enc, c);
}

/**
 * Identical to rb_iscntrl(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "CNTRL".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_iscntrl(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_CNTRL(enc, c);
}

/**
 * Identical to rb_ispunct(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "PUNCT".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_PUNCT(enc, c);
}

/**
 * Identical to rb_isalnum(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "ANUM".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_ALNUM(enc, c);
}

/**
 * Identical to rb_isprint(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "PRINT".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_isprint(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_PRINT(enc, c);
}

/**
 * Identical to rb_isspace(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "PRINT".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_isspace(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_SPACE(enc, c);
}

/**
 * Identical to rb_isdigit(), except it additionally takes an encoding.
 *
 * @param[in]  c          A code point.
 * @param[in]  enc        An encoding.
 * @retval     true       `enc` classifies `c` as "DIGIT".
 * @retval     false      Otherwise.
 */
static inline bool
rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc)
{
    return ONIGENC_IS_CODE_DIGIT(enc, c);
}

RBIMPL_ATTR_CONST()
/**
 * Identical to rb_toupper(), except it additionally takes an encoding.
 *
 * @param[in]  c    A code point.
 * @param[in]  enc  An encoding.
 * @return     `c`'s (Ruby's definition of) upper case counterpart.
 *
 * @internal
 *
 * As `RBIMPL_ATTR_CONST` implies this function ignores `enc`.
 */
int rb_enc_toupper(int c, rb_encoding *enc);

RBIMPL_ATTR_CONST()
/**
 * Identical to rb_tolower(), except it additionally takes an encoding.
 *
 * @param[in]  c    A code point.
 * @param[in]  enc  An encoding.
 * @return     `c`'s (Ruby's definition of) lower case counterpart.
 *
 * @internal
 *
 * As `RBIMPL_ATTR_CONST` implies this function ignores `enc`.
 */
int rb_enc_tolower(int c, rb_encoding *enc);

RBIMPL_SYMBOL_EXPORT_END()

/** @cond INTERNAL_MACRO */
#define rb_enc_is_newline rb_enc_is_newline
#define rb_enc_isalnum    rb_enc_isalnum
#define rb_enc_isalpha    rb_enc_isalpha
#define rb_enc_isascii    rb_enc_isascii
#define rb_enc_isctype    rb_enc_isctype
#define rb_enc_isdigit    rb_enc_isdigit
#define rb_enc_islower    rb_enc_islower
#define rb_enc_isprint    rb_enc_isprint
#define rb_enc_iscntrl    rb_enc_iscntrl
#define rb_enc_ispunct    rb_enc_ispunct
#define rb_enc_isspace    rb_enc_isspace
#define rb_enc_isupper    rb_enc_isupper
/** @endcond */

#endif /* RUBY_INTERNAL_ENCODING_CTYPE_H */
PK*J[�WF}d}d*include/ruby/internal/encoding/transcode.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_TRANSCODE_H           /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_TRANSCODE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      econv stuff
 */

#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/** return value of rb_econv_convert() */
typedef enum {

    /**
     * The conversion stopped when it found an invalid sequence.
     */
    econv_invalid_byte_sequence,

    /**
     * The conversion  stopped when  it found  a character  in the  input which
     * cannot be representable in the output.
     */
    econv_undefined_conversion,

    /**
     * The conversion stopped because there is no destination.
     */
    econv_destination_buffer_full,

    /**
     * The conversion stopped because there is no input.
     */
    econv_source_buffer_empty,

    /**
     * The conversion  stopped after  converting everything.  This  is arguably
     * the expected normal end of conversion.
     */
    econv_finished,

    /**
     * The  conversion stopped  after  writing something  to somewhere,  before
     * reading everything.
     */
    econv_after_output,

    /**
     * The conversion stopped in middle of reading a character, possibly due to
     * a partial read of a socket etc.
     */
    econv_incomplete_input
} rb_econv_result_t;

/** An opaque struct that represents a lowest level of encoding conversion. */
typedef struct rb_econv_t rb_econv_t;

/**
 * Converts the contents  of the passed string from its  encoding to the passed
 * one.
 *
 * @param[in]  str                           Target string.
 * @param[in]  to                            Destination encoding.
 * @param[in]  ecflags                       A        set        of        enum
 *                                           ::ruby_econv_flag_type.
 * @param[in]  ecopts                        A      keyword     hash,      like
 *                                           ::rb_io_t::rb_io_enc_t::ecopts.
 * @exception  rb_eArgError                  Not fully converted.
 * @exception  rb_eInvalidByteSequenceError  `str` is malformed.
 * @exception  rb_eUndefinedConversionError  `str`   has    a   character   not
 *                                           representable using `to`.
 * @exception  rb_eConversionNotFoundError   There is no  known conversion from
 *                                           `str`'s encoding to `to`.
 * @return     A string whose encoding is `to`, and whose contents is converted
 *             contents of `str`.
 * @note       Use rb_econv_prepare_options() to generate `ecopts`.
 */
VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);

/**
 * Queries if  there is  more than one  way to convert  between the  passed two
 * encodings.  Encoding  conversion are  has_and_belongs_to_many relationships.
 * There could be no direct conversion defined for the passed pair.  Ruby tries
 * to find  an indirect  way to  do so  then.  For  instance ISO-8859-1  has no
 * direct  conversion  to  ISO-2022-JP.   But  there  is  ISO-8859-1  to  UTF-8
 * conversion; then there is UTF-8 to  EUC-JP conversion; finally there also is
 * EUC-JP to ISO-2022-JP  conversion.  So in short ISO-8859-1  can be converted
 * to ISO-2022-JP using that path.   This function returns true.  Obviously not
 * everything that can be represented using UTF-8 can also be represented using
 * EUC-JP.  Conversions in practice can fail depending on the actual input, and
 * that renders exceptions in case of rb_str_encode().
 *
 * @param[in] from_encoding  One encoding.
 * @param[in] to_encoding    Another encoding.
 * @retval    0              No way to convert the two.
 * @retval    1              At least one way to convert the two.
 *
 * @internal
 *
 * Practically @shyouhei knows no way for  this function to return 0.  It seems
 * everything  can  eventually  be  converted  to/from  UTF-8,  which  connects
 * everything.
 */
int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);

/**
 * Identical  to  rb_econv_prepare_opts(),  except it  additionally  takes  the
 * initial  value of  flags.  The  extra bits  are bitwise-ORed  to the  return
 * value.
 *
 * @param[in]   opthash       Keyword arguments.
 * @param[out]  ecopts        Return buffer.
 * @param[in]   ecflags       Default set of enum ::ruby_econv_flag_type.
 * @exception   rb_eArgError  Unknown/Broken values passed.
 * @return      Calculated set of enum ::ruby_econv_flag_type.
 * @post        `ecopts`     holds    a     hash     object    suitable     for
 *              ::rb_io_t::rb_io_enc_t::ecopts.
 */
int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags);

/**
 * Splits a  keyword arguments  hash (that  for instance  `String#encode` took)
 * into a  set of  enum ::ruby_econv_flag_type and  a hash  storing replacement
 * characters etc.
 *
 * @param[in]   opthash       Keyword arguments.
 * @param[out]  ecopts        Return buffer.
 * @exception   rb_eArgError  Unknown/Broken values passed.
 * @return      Calculated set of enum ::ruby_econv_flag_type.
 * @post        `ecopts`     holds    a     hash     object    suitable     for
 *              ::rb_io_t::rb_io_enc_t::ecopts.
 */
int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);

/**
 * Creates a new instance of struct ::rb_econv_t.
 *
 * @param[in]  source_encoding       Name of an encoding.
 * @param[in]  destination_encoding  Name of another encoding.
 * @param[in]  ecflags               A set of enum ::ruby_econv_flag_type.
 * @exception  rb_eArgError          No such encoding.
 * @retval     NULL                  Failed to create a struct ::rb_econv_t.
 * @retval     otherwise             Allocated struct ::rb_econv_t.
 * @warning    Return value must be passed to rb_econv_close() exactly once.
 */
rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);

/**
 * Identical  to  rb_econv_open(),  except  it additionally  takes  a  hash  of
 * optional strings.
 *
 *
 * @param[in]  source_encoding       Name of an encoding.
 * @param[in]  destination_encoding  Name of another encoding.
 * @param[in]  ecflags               A set of enum ::ruby_econv_flag_type.
 * @param[in]  ecopts                Optional set of strings.
 * @exception  rb_eArgError          No such encoding.
 * @retval     NULL                  Failed to create a struct ::rb_econv_t.
 * @retval     otherwise             Allocated struct ::rb_econv_t.
 * @warning    Return value must be passed to rb_econv_close() exactly once.
 */
rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);

/**
 * Converts a string from an encoding to another.
 *
 * Possible  flags  are  either ::RUBY_ECONV_PARTIAL_INPUT  (means  the  source
 * buffer is a  part of much larger  one), ::RUBY_ECONV_AFTER_OUTPUT (instructs
 * the converter to stop after output before input), or both of them.
 *
 * @param[in,out]  ec                      Conversion specification/state etc.
 * @param[in]      source_buffer_ptr       Target string.
 * @param[in]      source_buffer_end       End of target string.
 * @param[out]     destination_buffer_ptr  Return buffer.
 * @param[out]     destination_buffer_end  End of return buffer.
 * @param[in]      flags                   Flags (see above).
 * @return         The status of the conversion.
 * @post           `destination_buffer_ptr` holds conversion results.
 */
rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
    const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
    unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
    int flags);

/**
 * Destructs a converter.  Note that a converter  can have a buffer, and can be
 * non-empty.  Calling this would lose your data then.
 *
 * @param[out]  ec The converter to destroy.
 * @post        `ec` is no longer a valid pointer.
 */
void rb_econv_close(rb_econv_t *ec);

/**
 * Assigns  the replacement  string.  The  string passed  here would  appear in
 * converted string when it cannot  represent its source counterpart.  This can
 * happen for instance you convert an emoji to ISO-8859-1.
 *
 * @param[out]  ec       Target converter.
 * @param[in]   str      Replacement string.
 * @param[in]   len      Number of bytes of `str`.
 * @param[in]   encname  Name of encoding of `str`.
 * @retval      0        Success.
 * @retval      -1       Failure (ENOMEM etc.).
 * @post        `ec`'s replacement string is set to `str`.
 */
int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);

/**
 * "Decorate"s  a  converter.   There  are  special  kind  of  converters  that
 * transforms the  contents, like  replacing CR  into CRLF.   You can  add such
 * decorators  to  a converter  using  this  API.   By  using this  function  a
 * decorator is prepended at the beginning of a conversion sequence: in case of
 * CRLF conversion, newlines are converted before encodings are converted.
 *
 * @param[out]  ec              Target converter to decorate.
 * @param[in]   decorator_name  Name of decorator to prepend.
 * @retval      0               Success.
 * @retval      -1              Failure (no such decorator etc.).
 * @post        Decorator works before encoding conversion happens.
 *
 * @internal
 *
 * What is the possible value of  the `decorator_name` is not public.  You have
 * to read through `transcode.c` carefully.
 */
int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);

/**
 * Identical to  rb_econv_decorate_at_first(), except  it adds to  the opposite
 * direction.  For  instance CRLF  conversion would  run _after_  encodings are
 * converted.
 *
 * @param[out]  ec              Target converter to decorate.
 * @param[in]   decorator_name  Name of decorator to prepend.
 * @retval      0               Success.
 * @retval      -1              Failure (no such decorator etc.).
 * @post        Decorator works after encoding conversion happens.
 */
int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);

/**
 * Creates  a  `rb_eConverterNotFoundError`  exception  object  (but  does  not
 * raise).
 *
 * @param[in]  senc     Name of source encoding.
 * @param[in]  denc     Name of destination encoding.
 * @param[in]  ecflags  A set of enum ::ruby_econv_flag_type.
 * @return     An instance of `rb_eConverterNotFoundError`.
 */
VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);

/**
 * Appends the passed string to the passed converter's output buffer.  This can
 * be  handy  when an  encoding  needs  bytes out  of  thin  air; for  instance
 * ISO-2022-JP  has  "shift   function"  which  does  not   correspond  to  any
 * characters.
 *
 * @param[out]  ec            Target converter.
 * @param[in]   str           String to insert.
 * @param[in]   len           Number of bytes of `str`.
 * @param[in]   str_encoding  Encoding of `str`.
 * @retval      0             Success.
 * @retval      -1            Failure (conversion error etc.).
 * @note        `str_encoding` can  be anything, and `str`  itself is converted
 *              when necessary.
 */
int rb_econv_insert_output(rb_econv_t *ec,
    const unsigned char *str, size_t len, const char *str_encoding);

/**
 * Queries  an encoding  name which  best suits  for rb_econv_insert_output()'s
 * last parameter.  Strings in this  encoding need no conversion when inserted;
 * can be both time/space efficient.
 *
 * @param[in]  ec  Target converter.
 * @return     Its encoding for insertion.
 */
const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);

/**
 * This is a rb_econv_make_exception() + rb_exc_raise() combo.
 *
 * @param[in]  ec                            (Possibly failed) conversion.
 * @exception  rb_eInvalidByteSequenceError  Invalid byte sequence.
 * @exception  rb_eUndefinedConversionError  Conversion undefined.
 * @note       This function can return when no error.
 */
void rb_econv_check_error(rb_econv_t *ec);

/**
 * This function makes sense right after rb_econv_convert() returns.  As listed
 * in ::rb_econv_result_t, rb_econv_convert() can bail out for various reasons.
 * This function checks the passed converter's internal state and convert it to
 * an appropriate exception object.
 *
 * @param[in]  ec         Target converter.
 * @retval     RUBY_Qnil  The converter has no error.
 * @retval     otherwise  Conversion error turned into an exception.
 */
VALUE rb_econv_make_exception(rb_econv_t *ec);

/**
 * Queries  if rb_econv_putback()  makes  sense, i.e.  there  are invalid  byte
 * sequences remain in the buffer.
 *
 * @param[in]  ec  Target converter.
 * @return     Number of bytes that can be pushed back.
 */
int rb_econv_putbackable(rb_econv_t *ec);

/**
 * Puts  back the  bytes.  In  case of  ::econv_invalid_byte_sequence, some  of
 * those  invalid  bytes are  discarded  and  the  others  are buffered  to  be
 * converted later.  The latter bytes can be put back using this API.
 *
 * @param[out]  ec  Target converter (invalid byte sequence).
 * @param[out]  p   Return buffer.
 * @param[in]   n   Max number of bytes to put back.
 * @post        At most `n` bytes of what was put back is written to `p`.
 */
void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);

/**
 * Queries the passed encoding's corresponding ASCII compatible encoding.  "The
 * corresponding  ASCII  compatible  encoding"  in this  context  is  an  ASCII
 * compatible encoding which  can represent exactly the same  character sets as
 * the given  ASCII incompatible  encoding.  For instance  that of  UTF-16LE is
 * UTF-8.
 *
 * @param[in]  encname    Name of an ASCII incompatible encoding.
 * @retval     NULL       `encname` is already ASCII compatible.
 * @retval     otherwise  The corresponding ASCII compatible encoding.
 */
const char *rb_econv_asciicompat_encoding(const char *encname);

/**
 * Identical to  rb_econv_convert(), except it  takes Ruby's string  instead of
 * C's pointer.
 *
 * @param[in,out]  ec                            Target converter.
 * @param[in]      src                           Source string.
 * @param[in]      flags                         Flags (see rb_econv_convert).
 * @exception      rb_eArgError                  Converted string is too long.
 * @exception      rb_eInvalidByteSequenceError  Invalid byte sequence.
 * @exception      rb_eUndefinedConversionError  Conversion undefined.
 * @return         The conversion result.
 */
VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);

/**
 * Identical to rb_econv_str_convert(),  except it converts only a  part of the
 * passed string.  Can be handy when  you for instance want to do line-buffered
 * conversion.
 *
 * @param[in,out]  ec                            Target converter.
 * @param[in]      src                           Source string.
 * @param[in]      byteoff                       Number of bytes to seek.
 * @param[in]      bytesize                      Number of bytes to read.
 * @param[in]      flags                         Flags (see rb_econv_convert).
 * @exception      rb_eArgError                  Converted string is too long.
 * @exception      rb_eInvalidByteSequenceError  Invalid byte sequence.
 * @exception      rb_eUndefinedConversionError  Conversion undefined.
 * @return         The conversion result.
 */
VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);

/**
 * Identical to rb_econv_str_convert(), except it appends the conversion result
 * to the additionally passed string instead  of creating a new string.  It can
 * also be seen as a routine  identical to rb_econv_append(), except it takes a
 * Ruby's string instead of C's pointer.
 *
 * @param[in,out]  ec                            Target converter.
 * @param[in]      src                           Source string.
 * @param[in]      dst                           Return buffer.
 * @param[in]      flags                         Flags (see rb_econv_convert).
 * @exception      rb_eArgError                  Converted string is too long.
 * @exception      rb_eInvalidByteSequenceError  Invalid byte sequence.
 * @exception      rb_eUndefinedConversionError  Conversion undefined.
 * @return         The conversion result.
 */
VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);

/**
 * Identical to  rb_econv_str_append(), except  it appends only  a part  of the
 * passed string with  conversion.  It can also be seen  as a routine identical
 * to rb_econv_substr_convert(), except it appends the conversion result to the
 * additionally passed string instead of creating a new string.
 *
 * @param[in,out]  ec                            Target converter.
 * @param[in]      src                           Source string.
 * @param[in]      byteoff                       Number of bytes to seek.
 * @param[in]      bytesize                      Number of bytes to read.
 * @param[in]      dst                           Return buffer.
 * @param[in]      flags                         Flags (see rb_econv_convert).
 * @exception      rb_eArgError                  Converted string is too long.
 * @exception      rb_eInvalidByteSequenceError  Invalid byte sequence.
 * @exception      rb_eUndefinedConversionError  Conversion undefined.
 * @return         The conversion result.
 */
VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);

/**
 * Converts  the passed  C's pointer  according to  the passed  converter, then
 * append the conversion  result to the passed Ruby's string.   This way buffer
 * overflow is properly avoided to resize the destination properly.
 *
 * @param[in,out]  ec                            Target converter.
 * @param[in]      bytesrc                       Target string.
 * @param[in]      bytesize                      Number of bytes of `bytesrc`.
 * @param[in]      dst                           Return buffer.
 * @param[in]      flags                         Flags (see rb_econv_convert).
 * @exception      rb_eArgError                  Converted string is too long.
 * @exception      rb_eInvalidByteSequenceError  Invalid byte sequence.
 * @exception      rb_eUndefinedConversionError  Conversion undefined.
 * @return         The conversion result.
 */
VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags);

/**
 * This badly named  function does not set the destination  encoding to binary,
 * but  instead just  nullifies newline  conversion decorators  if any.   Other
 * ordinal character conversions still  happen after this; something non-binary
 * would still be generated.
 *
 * @param[out]  ec  Target converter to modify.
 * @post        Any newline conversions, if any, would be killed.
 */
void rb_econv_binmode(rb_econv_t *ec);

/**
 * This enum is kind of omnibus.  Gathers various constants.
 */
enum ruby_econv_flag_type {

    /**
     * @name Flags for rb_econv_open()
     *
     * @{
     */

    /** Mask for error handling related bits. */
    RUBY_ECONV_ERROR_HANDLER_MASK               = 0x000000ff,

    /** Special handling of invalid sequences are there. */
    RUBY_ECONV_INVALID_MASK                     = 0x0000000f,

    /** Invalid sequences shall be replaced. */
    RUBY_ECONV_INVALID_REPLACE                  = 0x00000002,

    /** Special handling of undefined conversion are there. */
    RUBY_ECONV_UNDEF_MASK                       = 0x000000f0,

    /** Undefined characters shall be replaced. */
    RUBY_ECONV_UNDEF_REPLACE                    = 0x00000020,

    /** Undefined characters shall be escaped. */
    RUBY_ECONV_UNDEF_HEX_CHARREF                = 0x00000030,

    /** Decorators are there. */
    RUBY_ECONV_DECORATOR_MASK                   = 0x0001ff00,

    /** Newline converters are there. */
    RUBY_ECONV_NEWLINE_DECORATOR_MASK           = 0x00007f00,

    /** (Unclear; seems unused). */
    RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK      = 0x00000f00,

    /** (Unclear; seems unused). */
    RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK     = 0x00007000,

    /** Universal newline mode. */
    RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR      = 0x00000100,

    /** CR to CRLF conversion shall happen. */
    RUBY_ECONV_CRLF_NEWLINE_DECORATOR           = 0x00001000,

    /** CRLF to CR conversion shall happen. */
    RUBY_ECONV_CR_NEWLINE_DECORATOR             = 0x00002000,

    /** CRLF to LF conversion shall happen. */
    RUBY_ECONV_LF_NEWLINE_DECORATOR             = 0x00004000,

    /** Texts shall be XML-escaped. */
    RUBY_ECONV_XML_TEXT_DECORATOR               = 0x00008000,

    /** Texts shall be AttrValue escaped */
    RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR       = 0x00010000,

    /** (Unclear; seems unused). */
    RUBY_ECONV_STATEFUL_DECORATOR_MASK          = 0x00f00000,

    /** Texts shall be AttrValue escaped. */
    RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR         = 0x00100000,

    /** Newline decorator's default. */
    RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR        =
#if defined(RUBY_TEST_CRLF_ENVIRONMENT) || defined(_WIN32)
        RUBY_ECONV_CRLF_NEWLINE_DECORATOR,
#else
        0,
#endif

#define ECONV_ERROR_HANDLER_MASK                RUBY_ECONV_ERROR_HANDLER_MASK           /**< @old{RUBY_ECONV_ERROR_HANDLER_MASK} */
#define ECONV_INVALID_MASK                      RUBY_ECONV_INVALID_MASK                 /**< @old{RUBY_ECONV_INVALID_MASK} */
#define ECONV_INVALID_REPLACE                   RUBY_ECONV_INVALID_REPLACE              /**< @old{RUBY_ECONV_INVALID_REPLACE} */
#define ECONV_UNDEF_MASK                        RUBY_ECONV_UNDEF_MASK                   /**< @old{RUBY_ECONV_UNDEF_MASK} */
#define ECONV_UNDEF_REPLACE                     RUBY_ECONV_UNDEF_REPLACE                /**< @old{RUBY_ECONV_UNDEF_REPLACE} */
#define ECONV_UNDEF_HEX_CHARREF                 RUBY_ECONV_UNDEF_HEX_CHARREF            /**< @old{RUBY_ECONV_UNDEF_HEX_CHARREF} */
#define ECONV_DECORATOR_MASK                    RUBY_ECONV_DECORATOR_MASK               /**< @old{RUBY_ECONV_DECORATOR_MASK} */
#define ECONV_NEWLINE_DECORATOR_MASK            RUBY_ECONV_NEWLINE_DECORATOR_MASK       /**< @old{RUBY_ECONV_NEWLINE_DECORATOR_MASK} */
#define ECONV_NEWLINE_DECORATOR_READ_MASK       RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK  /**< @old{RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK} */
#define ECONV_NEWLINE_DECORATOR_WRITE_MASK      RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK /**< @old{RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK} */
#define ECONV_UNIVERSAL_NEWLINE_DECORATOR       RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR  /**< @old{RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR} */
#define ECONV_CRLF_NEWLINE_DECORATOR            RUBY_ECONV_CRLF_NEWLINE_DECORATOR       /**< @old{RUBY_ECONV_CRLF_NEWLINE_DECORATOR} */
#define ECONV_CR_NEWLINE_DECORATOR              RUBY_ECONV_CR_NEWLINE_DECORATOR         /**< @old{RUBY_ECONV_CR_NEWLINE_DECORATOR} */
#define ECONV_LF_NEWLINE_DECORATOR              RUBY_ECONV_LF_NEWLINE_DECORATOR         /**< @old{RUBY_ECONV_LF_NEWLINE_DECORATOR} */
#define ECONV_XML_TEXT_DECORATOR                RUBY_ECONV_XML_TEXT_DECORATOR           /**< @old{RUBY_ECONV_XML_TEXT_DECORATOR} */
#define ECONV_XML_ATTR_CONTENT_DECORATOR        RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR   /**< @old{RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR} */
#define ECONV_STATEFUL_DECORATOR_MASK           RUBY_ECONV_STATEFUL_DECORATOR_MASK      /**< @old{RUBY_ECONV_STATEFUL_DECORATOR_MASK} */
#define ECONV_XML_ATTR_QUOTE_DECORATOR          RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR     /**< @old{RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR} */
#define ECONV_DEFAULT_NEWLINE_DECORATOR         RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR    /**< @old{RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR} */
    /** @} */

    /**
     * @name Flags for rb_econv_convert()
     *
     * @{
     */

    /** Indicates the input is a part of much larger one. */
    RUBY_ECONV_PARTIAL_INPUT                    = 0x00020000,

    /** Instructs the converter to stop after output. */
    RUBY_ECONV_AFTER_OUTPUT                     = 0x00040000,
#define ECONV_PARTIAL_INPUT                     RUBY_ECONV_PARTIAL_INPUT /**< @old{RUBY_ECONV_PARTIAL_INPUT} */
#define ECONV_AFTER_OUTPUT                      RUBY_ECONV_AFTER_OUTPUT  /**< @old{RUBY_ECONV_AFTER_OUTPUT} */

    RUBY_ECONV_FLAGS_PLACEHOLDER /**< Placeholder (not used) */
};

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_INTERNAL_ENCODING_TRANSCODE_H */
PK*J[���)include/ruby/internal/encoding/pathname.hnu�[���#ifndef RUBY_INTERNAL_ENCODING_PATHNAME_H            /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERNAL_ENCODING_PATHNAME_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate encodings of pathnames.
 */

#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_NONNULL(())
/**
 * Returns a path component directly adjacent to the passed pointer.
 *
 * ```
 * "/multi/byte/encoded/pathname.txt"
 *         ^    ^                   ^
 *         |    |                   +--- end
 *         |    +--- @return
 *         +--- path
 * ```
 *
 * @param[in]  path  Where to start scanning.
 * @param[in]  end   End of the path string.
 * @param[in]  enc   Encoding of the string.
 * @return     A pointer  in the  passed string where  the next  path component
 *             resides, or `end` if there is no next path component.
 */
char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc);

RBIMPL_ATTR_NONNULL(())
/**
 * Seeks for non-prefix  part of a pathname.   This can be a no-op  when the OS
 * has no  such concept  like a  path prefix.   But there  are OSes  where path
 * prefixes do exist.
 *
 * ```
 * "C:\multi\byte\encoded\pathname.txt"
 *  ^ ^                               ^
 *  | |                               +--- end
 *  | +--- @return
 *  +--- path
 * ```
 *
 * @param[in]  path  Where to start scanning.
 * @param[in]  end   End of the path string.
 * @param[in]  enc   Encoding of the string.
 * @return     A pointer in the passed  string where non-prefix part starts, or
 *             `path` if the OS does not have path prefix.
 */
char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc);

RBIMPL_ATTR_NONNULL(())
/**
 * Returns the last path component.
 *
 * ```
 * "/multi/byte/encoded/pathname.txt"
 *        ^             ^           ^
 *        |             |           +--- end
 *        |             +--- @return
 *        +--- path
 * ```
 *
 * @param[in]  path  Where to start scanning.
 * @param[in]  end   End of the path string.
 * @param[in]  enc   Encoding of the string.
 * @return     A pointer  in the  passed string where  the last  path component
 *             resides, or `end` if there is no more path component.
 */
char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc);

RBIMPL_ATTR_NONNULL(())
/**
 * This just returns the passed end basically.  It makes difference in case the
 * passed string ends with tons of path separators like the following:
 *
 * ```
 * "/path/that/ends/with/lots/of/slashes//////////////"
 *  ^                                   ^             ^
 *  |                                   |             +--- end
 *  |                                   +--- @return
 *  +--- path
 * ```
 *
 * @param[in]  path  Where to start scanning.
 * @param[in]  end   End of the path string.
 * @param[in]  enc   Encoding of the string.
 * @return     A  pointer  in  the  passed   string  where  the  trailing  path
 *             separators  start,  or  `end`  if  there  is  no  trailing  path
 *             separators.
 *
 * @internal
 *
 * It  seems this  function  was  introduced to  mimic  what  POSIX says  about
 * `basename(3)`.
 */
char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc);

RBIMPL_ATTR_NONNULL((1, 4))
/**
 * Our own  encoding-aware version  of `basename(3)`.  Normally,  this function
 * returns the  last path  component of  the given name.   However in  case the
 * passed  name  ends  with a  path  separator,  it  returns  the name  of  the
 * directory, not  the last (empty)  component.  Also if  the passed name  is a
 * root directory, it  returns that root directory.  Note  however that Windows
 * filesystem have drive letters, which this function does not return.
 *
 * @param[in]      name     Target path.
 * @param[out]     baselen  Return buffer.
 * @param[in,out]  alllen   Number of bytes of `name`.
 * @param[enc]     enc      Encoding of `name`.
 * @return         The rightmost component of `name`.
 * @post           `baselen`, if passed,  is updated to be the  number of bytes
 *                 of the returned basename.
 * @post           `alllen`, if passed, is updated to be the number of bytes of
 *                 strings not considered as the basename.
 */
const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc);

RBIMPL_ATTR_NONNULL((1, 3))
/**
 * Our own  encoding-aware version of  `extname`.  This function  first applies
 * rb_enc_path_last_separator() to the passed name and only concerns its return
 * value (ignores  any parent directories).  This  function returns complicated
 * results:
 *
 * ```CXX
 * auto path = "...";
 * auto len = strlen(path);
 * auto ret = ruby_enc_find_extname(path, &len, rb_ascii8bit_encoding());
 *
 * switch(len) {
 * case 0:
 *     if (ret == 0) {
 *         // `path` is a file without extensions.
 *     }
 *     else {
 *         // `path` is a dotfile.
 *         // `ret` is the file's name.
 *     }
 *     break;
 *
 * case 1:
 *     // `path` _ends_ with a dot.
 *     // `ret` is that dot.
 *     break;
 *
 * default:
 *     // `path` has an extension.
 *     // `ret` is that extension.
 * }
 * ```
 *
 * @param[in]      name  Target path.
 * @param[in,out]  len   Number of bytes of `name`.
 * @param[in]      enc   Encoding of `name`.
 * @return         See above.
 * @post           `len`, if passed, is updated (see above).
 */
const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_INTERNAL_ENCODING_PATHNAME_H */
PK*J[��Q���include/ruby/internal/glob.hnu�[���#ifndef RBIMPL_GLOB_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_GLOB_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Declares ::rb_glob().
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Type of a glob callback function.  Called every time glob scans a path.
 *
 * @param[in]  path       The path in question.
 * @param[in]  arg        The argument passed to rb_glob().
 * @param[in]  enc        Encoding of the path.
 * @retval     -1         Not enough memory to do the operation.
 * @retval     0          Operation successful.
 * @retval     otherwise  Opaque exception state.
 * @note       You can use rb_protect() to generate the return value.
 *
 * @internal
 *
 * This  is a  wrong design.   Type of  `enc` should  have been  `rb_encoding*`
 * instead of just `void*`.  But we cannot change the API any longer.
 *
 * Though not a part of our public API, the "opaque exception state" is in fact
 * an  enum ruby_tag_type.   You can  see the  potential "otherwise"  values by
 * looking at vm_core.h.
 */
typedef int ruby_glob_func(const char *path, VALUE arg, void *enc);

RBIMPL_ATTR_NONNULL(())
/**
 * The "glob"  operator.  Expands  the given pattern  against the  actual local
 * filesystem,  then  iterates  over  the expanded  filenames  by  calling  the
 * callback function.
 *
 * @param[in]  pattern        A glob pattern.
 * @param[in]  func           Identical to ruby_glob_func,  except it can raise
 *                            exceptions instead of returning opaque state.
 * @param[in]  arg            Extra argument passed to func.
 * @exception  rb_eException  Can propagate what `func` raises.
 * @note       The  language  accepted   as  the  pattern  is   not  a  regular
 *             expression.  It resembles shell's glob.
 */
void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to rb_glob(), except it returns opaque exception states instead of
 * raising exceptions.
 *
 * @param[in]  pattern  A glob pattern.
 * @param[in]  flags    No, you are not allowed to use this.  Just pass 0.
 * @param[in]  func     A callback function.
 * @param[in]  arg      Extra argument passed to func.
 * @return     Return value of `func`.
 *
 * @internal
 *
 * This function is  completely broken by design...  Not only  is there no sane
 * way to pass flags, but there also is no sane way to know what a return value
 * is meant to be.
 *
 * Though not a part of our public API, and @shyouhei thinks it's a failure not
 * to be  a public  API, the  flags can  be `FNM_EXTGLOB`,  `FNM_DOTMATCH` etc.
 * Look at dir.c for the list.
 *
 * Though  not a  part  of our  public  API, the  return value  is  in fact  an
 * enum ruby_tag_type.   You  can  see  the  potential  values  by  looking  at
 * vm_core.h.
 */
int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to  ruby_glob(), @shyouhei  currently suspects.   Historically you
 * had to  call this function  instead of  ruby_glob() if the  pattern included
 * "{x,y,...}" syntax.  However since commit 0f63d961169989a7f6dcf7c0487fe29da,
 * ruby_glob() also  supports that syntax.   It seems  as of writing  these two
 * functions  provide   basically  the   same  functionality  in   a  different
 * implementation.  Is this analysis right?  Correct me! :FIXME:
 *
 * @param[in]  pattern  A glob pattern.
 * @param[in]  flags    No, you are not allowed to use this.  Just pass 0.
 * @param[in]  func     A callback function.
 * @param[in]  arg      Extra argument passed to func.
 * @return     Return value of `func`.
 */
int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_GLOB_H */
PK*J[�/X��8�8"include/ruby/internal/value_type.hnu�[���#ifndef RBIMPL_VALUE_TYPE_H                          /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_VALUE_TYPE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines enum ::ruby_value_type.
 */
#include "ruby/internal/assume.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/enum_extensibility.h"
#include "ruby/internal/attr/forceinline.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/constant_p.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/error.h"
#include "ruby/internal/has/builtin.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value.h"
#include "ruby/assert.h"

#if defined(T_DATA)
/*
 * :!BEWARE!: (Recent?)   Solaris' <nfs/nfs.h>  have conflicting  definition of
 * T_DATA.  Let us stop here.  Please have a workaround like this:
 *
 * ```C
 * #include <ruby/ruby.h> // <- Include this one first.
 * #undef T_DATA          // <- ... and stick to RUBY_T_DATA forever.
 * #include <nfs/nfs.h>   // <- OS-provided T_DATA introduced.
 * ```
 *
 * See also [ruby-core:4261]
 */
# error Bail out due to conflicting definition of T_DATA.
#endif

#define T_ARRAY    RUBY_T_ARRAY    /**< @old{RUBY_T_ARRAY} */
#define T_BIGNUM   RUBY_T_BIGNUM   /**< @old{RUBY_T_BIGNUM} */
#define T_CLASS    RUBY_T_CLASS    /**< @old{RUBY_T_CLASS} */
#define T_COMPLEX  RUBY_T_COMPLEX  /**< @old{RUBY_T_COMPLEX} */
#define T_DATA     RUBY_T_DATA     /**< @old{RUBY_T_DATA} */
#define T_FALSE    RUBY_T_FALSE    /**< @old{RUBY_T_FALSE} */
#define T_FILE     RUBY_T_FILE     /**< @old{RUBY_T_FILE} */
#define T_FIXNUM   RUBY_T_FIXNUM   /**< @old{RUBY_T_FIXNUM} */
#define T_FLOAT    RUBY_T_FLOAT    /**< @old{RUBY_T_FLOAT} */
#define T_HASH     RUBY_T_HASH     /**< @old{RUBY_T_HASH} */
#define T_ICLASS   RUBY_T_ICLASS   /**< @old{RUBY_T_ICLASS} */
#define T_IMEMO    RUBY_T_IMEMO    /**< @old{RUBY_T_IMEMO} */
#define T_MASK     RUBY_T_MASK     /**< @old{RUBY_T_MASK} */
#define T_MATCH    RUBY_T_MATCH    /**< @old{RUBY_T_MATCH} */
#define T_MODULE   RUBY_T_MODULE   /**< @old{RUBY_T_MODULE} */
#define T_MOVED    RUBY_T_MOVED    /**< @old{RUBY_T_MOVED} */
#define T_NIL      RUBY_T_NIL      /**< @old{RUBY_T_NIL} */
#define T_NODE     RUBY_T_NODE     /**< @old{RUBY_T_NODE} */
#define T_NONE     RUBY_T_NONE     /**< @old{RUBY_T_NONE} */
#define T_OBJECT   RUBY_T_OBJECT   /**< @old{RUBY_T_OBJECT} */
#define T_RATIONAL RUBY_T_RATIONAL /**< @old{RUBY_T_RATIONAL} */
#define T_REGEXP   RUBY_T_REGEXP   /**< @old{RUBY_T_REGEXP} */
#define T_STRING   RUBY_T_STRING   /**< @old{RUBY_T_STRING} */
#define T_STRUCT   RUBY_T_STRUCT   /**< @old{RUBY_T_STRUCT} */
#define T_SYMBOL   RUBY_T_SYMBOL   /**< @old{RUBY_T_SYMBOL} */
#define T_TRUE     RUBY_T_TRUE     /**< @old{RUBY_T_TRUE} */
#define T_UNDEF    RUBY_T_UNDEF    /**< @old{RUBY_T_UNDEF} */
#define T_ZOMBIE   RUBY_T_ZOMBIE   /**< @old{RUBY_T_ZOMBIE} */

#define BUILTIN_TYPE      RB_BUILTIN_TYPE   /**< @old{RB_BUILTIN_TYPE} */
#define DYNAMIC_SYM_P     RB_DYNAMIC_SYM_P  /**< @old{RB_DYNAMIC_SYM_P} */
#define RB_INTEGER_TYPE_P rb_integer_type_p /**< @old{rb_integer_type_p} */
#define SYMBOL_P          RB_SYMBOL_P       /**< @old{RB_SYMBOL_P} */
#define rb_type_p         RB_TYPE_P         /**< @alias{RB_TYPE_P} */

/** @cond INTERNAL_MACRO */
#define RB_BUILTIN_TYPE   RB_BUILTIN_TYPE
#define RB_DYNAMIC_SYM_P  RB_DYNAMIC_SYM_P
#define RB_FLOAT_TYPE_P   RB_FLOAT_TYPE_P
#define RB_SYMBOL_P       RB_SYMBOL_P
#define RB_TYPE_P         RB_TYPE_P
#define Check_Type        Check_Type

#ifdef RBIMPL_VA_OPT_ARGS
# define RBIMPL_ASSERT_TYPE(v, t) \
    RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P(v, t), "actual type: %d", rb_type(v))
#else
# define RBIMPL_ASSERT_TYPE(v, t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P(v, t))
#endif
/** @endcond */

/** @old{rb_type} */
#define TYPE(_)           RBIMPL_CAST((int)rb_type(_))

/** C-level type of an object. */
enum
RBIMPL_ATTR_ENUM_EXTENSIBILITY(closed)
ruby_value_type {
    RUBY_T_NONE     = 0x00, /**< Non-object (swept etc.) */

    RUBY_T_OBJECT   = 0x01, /**< @see struct ::RObject */
    RUBY_T_CLASS    = 0x02, /**< @see struct ::RClass and ::rb_cClass */
    RUBY_T_MODULE   = 0x03, /**< @see struct ::RClass and ::rb_cModule */
    RUBY_T_FLOAT    = 0x04, /**< @see struct ::RFloat */
    RUBY_T_STRING   = 0x05, /**< @see struct ::RString */
    RUBY_T_REGEXP   = 0x06, /**< @see struct ::RRegexp */
    RUBY_T_ARRAY    = 0x07, /**< @see struct ::RArray */
    RUBY_T_HASH     = 0x08, /**< @see struct ::RHash */
    RUBY_T_STRUCT   = 0x09, /**< @see struct ::RStruct */
    RUBY_T_BIGNUM   = 0x0a, /**< @see struct ::RBignum */
    RUBY_T_FILE     = 0x0b, /**< @see struct ::RFile */
    RUBY_T_DATA     = 0x0c, /**< @see struct ::RTypedData */
    RUBY_T_MATCH    = 0x0d, /**< @see struct ::RMatch */
    RUBY_T_COMPLEX  = 0x0e, /**< @see struct ::RComplex */
    RUBY_T_RATIONAL = 0x0f, /**< @see struct ::RRational */

    RUBY_T_NIL      = 0x11, /**< @see ::RUBY_Qnil */
    RUBY_T_TRUE     = 0x12, /**< @see ::RUBY_Qfalse */
    RUBY_T_FALSE    = 0x13, /**< @see ::RUBY_Qtrue */
    RUBY_T_SYMBOL   = 0x14, /**< @see struct ::RSymbol */
    RUBY_T_FIXNUM   = 0x15, /**< Integers formerly known as Fixnums. */
    RUBY_T_UNDEF    = 0x16, /**< @see ::RUBY_Qundef */

    RUBY_T_IMEMO    = 0x1a, /**< @see struct ::RIMemo */
    RUBY_T_NODE     = 0x1b, /**< @see struct ::RNode */
    RUBY_T_ICLASS   = 0x1c, /**< Hidden classes known as IClasses. */
    RUBY_T_ZOMBIE   = 0x1d, /**< @see struct ::RZombie */
    RUBY_T_MOVED    = 0x1e, /**< @see struct ::RMoved */

    RUBY_T_MASK     = 0x1f  /**< Bitmask of ::ruby_value_type. */
};

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_COLD()
/**
 * @private
 *
 * This was  the old implementation  of Check_Type(), but they  diverged.  This
 * one remains  for theoretical backwards compatibility.   People normally need
 * not use it.
 *
 * @param[in]  obj            An object.
 * @param[in]  t              A type.
 * @exception  rb_eTypeError  `obj` is not of type `t`.
 * @exception  rb_eFatal      `obj` is corrupt.
 * @post       Upon successful return `obj` is guaranteed to have type `t`.
 *
 * @internal
 *
 * The second argument shall have been enum ::ruby_value_type.  But at the time
 * matz designed this  function he still used  K&R C.  There was  no such thing
 * like a function prototype.  We can no longer change this API.
 */
void rb_check_type(VALUE obj, int t);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the type of the object.
 *
 * @param[in]  obj  Object in question.
 * @pre        `obj` must not be a special constant.
 * @return     The type of `obj`.
 */
static inline enum ruby_value_type
RB_BUILTIN_TYPE(VALUE obj)
{
    RBIMPL_ASSERT_OR_ASSUME(! RB_SPECIAL_CONST_P(obj));

#if 0 && defined __GNUC__ && !defined __clang__
    /* Don't move the access to `flags` before the preceding
     * RB_SPECIAL_CONST_P check. */
    __asm volatile("": : :"memory");
#endif
    VALUE ret = RBASIC(obj)->flags & RUBY_T_MASK;
    return RBIMPL_CAST((enum ruby_value_type)ret);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
/**
 * Queries if the object is an instance of ::rb_cInteger.
 *
 * @param[in]  obj    Object in question.
 * @retval     true   It is.
 * @retval     false  It isn't.
 */
static inline bool
rb_integer_type_p(VALUE obj)
{
    if (RB_FIXNUM_P(obj)) {
        return true;
    }
    else if (RB_SPECIAL_CONST_P(obj)) {
        return false;
    }
    else {
        return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM;
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
/**
 * Identical to RB_BUILTIN_TYPE(), except it can also accept special constants.
 *
 * @param[in]  obj  Object in question.
 * @return     The type of `obj`.
 */
static inline enum ruby_value_type
rb_type(VALUE obj)
{
    if (! RB_SPECIAL_CONST_P(obj)) {
        return RB_BUILTIN_TYPE(obj);
    }
    else if (obj == RUBY_Qfalse) {
        return RUBY_T_FALSE;
    }
    else if (obj == RUBY_Qnil) {
        return RUBY_T_NIL;
    }
    else if (obj == RUBY_Qtrue) {
        return RUBY_T_TRUE;
    }
    else if (obj == RUBY_Qundef) {
        return RUBY_T_UNDEF;
    }
    else if (RB_FIXNUM_P(obj)) {
        return RUBY_T_FIXNUM;
    }
    else if (RB_STATIC_SYM_P(obj)) {
        return RUBY_T_SYMBOL;
    }
    else {
        RBIMPL_ASSUME(RB_FLONUM_P(obj));
        return RUBY_T_FLOAT;
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries if the object is an instance of ::rb_cFloat.
 *
 * @param[in]  obj    Object in question.
 * @retval     true   It is.
 * @retval     false  It isn't.
 */
static inline bool
RB_FLOAT_TYPE_P(VALUE obj)
{
    if (RB_FLONUM_P(obj)) {
        return true;
    }
    else if (RB_SPECIAL_CONST_P(obj)) {
        return false;
    }
    else {
        return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT;
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries if the object is a dynamic symbol.
 *
 * @param[in]  obj    Object in question.
 * @retval     true   It is.
 * @retval     false  It isn't.
 */
static inline bool
RB_DYNAMIC_SYM_P(VALUE obj)
{
    if (RB_SPECIAL_CONST_P(obj)) {
        return false;
    }
    else {
        return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL;
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries if the object is an instance of ::rb_cSymbol.
 *
 * @param[in]  obj    Object in question.
 * @retval     true   It is.
 * @retval     false  It isn't.
 */
static inline bool
RB_SYMBOL_P(VALUE obj)
{
    return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_FORCEINLINE()
/**
 * @private
 *
 * This is an implementation detail of RB_TYPE_P().  Just don't use it.
 *
 * @param[in]  obj    An object.
 * @param[in]  t      A type.
 * @retval     true   `obj` is of type `t`.
 * @retval     false  Otherwise.
 */
static bool
rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t)
{
    if (t == RUBY_T_TRUE) {
        return obj == RUBY_Qtrue;
    }
    else if (t == RUBY_T_FALSE) {
        return obj == RUBY_Qfalse;
    }
    else if (t == RUBY_T_NIL) {
        return obj == RUBY_Qnil;
    }
    else if (t == RUBY_T_UNDEF) {
        return obj == RUBY_Qundef;
    }
    else if (t == RUBY_T_FIXNUM) {
        return RB_FIXNUM_P(obj);
    }
    else if (t == RUBY_T_SYMBOL) {
        return RB_SYMBOL_P(obj);
    }
    else if (t == RUBY_T_FLOAT) {
        return RB_FLOAT_TYPE_P(obj);
    }
    else if (RB_SPECIAL_CONST_P(obj)) {
        return false;
    }
    else if (t == RB_BUILTIN_TYPE(obj)) {
        return true;
    }
    else {
        return false;
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries if the given object is of given type.
 *
 * @param[in]  obj    An object.
 * @param[in]  t      A type.
 * @retval     true   `obj` is of type `t`.
 * @retval     false  Otherwise.
 *
 * @internal
 *
 * This  function is  a super-duper  hot  path.  Optimised  targeting modern  C
 * compilers and x86_64 architecture.
 */
static inline bool
RB_TYPE_P(VALUE obj, enum ruby_value_type t)
{
    if (RBIMPL_CONSTANT_P(t)) {
        return rbimpl_RB_TYPE_P_fastpath(obj, t);
    }
    else {
        return t == rb_type(obj);
    }
}

/** @cond INTERNAL_MACRO */
/* Clang, unlike GCC, cannot propagate __builtin_constant_p beyond function
 * boundary. */
#if defined(__clang__)
# undef RB_TYPE_P
# define RB_TYPE_P(obj, t)                  \
    (RBIMPL_CONSTANT_P(t)                  ? \
     rbimpl_RB_TYPE_P_fastpath((obj), (t)) : \
     (RB_TYPE_P)((obj), (t)))
#endif

/* clang 3.x (4.2 compatible) can't eliminate CSE of RB_BUILTIN_TYPE
 * in inline function and caller function
 * See also 8998c06461ea0bef11b3aeb30b6d2ab71c8762ba
 */
#if RBIMPL_COMPILER_BEFORE(Clang, 4, 0, 0)
# undef rb_integer_type_p
# define rb_integer_type_p(obj)                                 \
    __extension__ ({                                            \
        const VALUE integer_type_obj = (obj);                   \
        (RB_FIXNUM_P(integer_type_obj) ||                       \
         (!RB_SPECIAL_CONST_P(integer_type_obj) &&              \
          RB_BUILTIN_TYPE(integer_type_obj) == RUBY_T_BIGNUM)); \
    })
#endif
/** @endcond */

RBIMPL_ATTR_PURE()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * @private
 * Defined in ruby/internal/core/rtypeddata.h
 */
static inline bool rbimpl_rtypeddata_p(VALUE obj);

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Identical  to  RB_TYPE_P(),  except  it  raises  exceptions  on  predication
 * failure.
 *
 * @param[in]  v              An object.
 * @param[in]  t              A type.
 * @exception  rb_eTypeError  `obj` is not of type `t`.
 * @exception  rb_eFatal      `obj` is corrupt.
 * @post       Upon successful return `obj` is guaranteed to have type `t`.
 */
static inline void
Check_Type(VALUE v, enum ruby_value_type t)
{
    if (RB_UNLIKELY(! RB_TYPE_P(v, t))) {
        goto unexpected_type;
    }
    else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) {
        /* Typed data is not simple `T_DATA`, see `rb_check_type` */
        goto unexpected_type;
    }
    else {
        return;
    }

  unexpected_type:
    rb_unexpected_type(v, RBIMPL_CAST((int)t));
}

#endif /* RBIMPL_VALUE_TYPE_H */
PK*J[M�"����include/ruby/internal/fl_type.hnu�[���#ifndef RBIMPL_FL_TYPE_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_FL_TYPE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines enum ::ruby_fl_type.
 */
#include "ruby/internal/config.h"      /* for ENUM_OVER_INT */
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/flag_enum.h"
#include "ruby/internal/attr/forceinline.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/has/extension.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/assert.h"
#include "ruby/defines.h"

/** @cond INTERNAL_MACRO */
#if RBIMPL_HAS_EXTENSION(enumerator_attributes)
# define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
#elif RBIMPL_COMPILER_SINCE(GCC, 6, 0, 0)
# define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
#endif

#ifdef ENUM_OVER_INT
# define RBIMPL_WIDER_ENUM 1
#elif SIZEOF_INT * CHAR_BIT > 12+19+1
# define RBIMPL_WIDER_ENUM 1
#else
# define RBIMPL_WIDER_ENUM 0
#endif
/** @endcond */

#define FL_SINGLETON    RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)            /**< @old{RUBY_FL_SINGLETON} */
#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)         /**< @old{RUBY_FL_WB_PROTECTED} */
#define FL_PROMOTED     RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED)             /**< @old{RUBY_FL_PROMOTED} */
#define FL_FINALIZE     RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)             /**< @old{RUBY_FL_FINALIZE} */
#define FL_TAINT        RBIMPL_CAST((VALUE)RUBY_FL_TAINT)                /**< @old{RUBY_FL_TAINT} */
#define FL_SHAREABLE    RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)            /**< @old{RUBY_FL_SHAREABLE} */
#define FL_UNTRUSTED    RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)            /**< @old{RUBY_FL_UNTRUSTED} */
#define FL_SEEN_OBJ_ID  RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)          /**< @old{RUBY_FL_SEEN_OBJ_ID} */
#define FL_EXIVAR       RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)               /**< @old{RUBY_FL_EXIVAR} */
#define FL_FREEZE       RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)               /**< @old{RUBY_FL_FREEZE} */

#define FL_USHIFT       RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)               /**< @old{RUBY_FL_USHIFT} */

#define FL_USER0        RBIMPL_CAST((VALUE)RUBY_FL_USER0)                /**< @old{RUBY_FL_USER0} */
#define FL_USER1        RBIMPL_CAST((VALUE)RUBY_FL_USER1)                /**< @old{RUBY_FL_USER1} */
#define FL_USER2        RBIMPL_CAST((VALUE)RUBY_FL_USER2)                /**< @old{RUBY_FL_USER2} */
#define FL_USER3        RBIMPL_CAST((VALUE)RUBY_FL_USER3)                /**< @old{RUBY_FL_USER3} */
#define FL_USER4        RBIMPL_CAST((VALUE)RUBY_FL_USER4)                /**< @old{RUBY_FL_USER4} */
#define FL_USER5        RBIMPL_CAST((VALUE)RUBY_FL_USER5)                /**< @old{RUBY_FL_USER5} */
#define FL_USER6        RBIMPL_CAST((VALUE)RUBY_FL_USER6)                /**< @old{RUBY_FL_USER6} */
#define FL_USER7        RBIMPL_CAST((VALUE)RUBY_FL_USER7)                /**< @old{RUBY_FL_USER7} */
#define FL_USER8        RBIMPL_CAST((VALUE)RUBY_FL_USER8)                /**< @old{RUBY_FL_USER8} */
#define FL_USER9        RBIMPL_CAST((VALUE)RUBY_FL_USER9)                /**< @old{RUBY_FL_USER9} */
#define FL_USER10       RBIMPL_CAST((VALUE)RUBY_FL_USER10)               /**< @old{RUBY_FL_USER10} */
#define FL_USER11       RBIMPL_CAST((VALUE)RUBY_FL_USER11)               /**< @old{RUBY_FL_USER11} */
#define FL_USER12       RBIMPL_CAST((VALUE)RUBY_FL_USER12)               /**< @old{RUBY_FL_USER12} */
#define FL_USER13       RBIMPL_CAST((VALUE)RUBY_FL_USER13)               /**< @old{RUBY_FL_USER13} */
#define FL_USER14       RBIMPL_CAST((VALUE)RUBY_FL_USER14)               /**< @old{RUBY_FL_USER14} */
#define FL_USER15       RBIMPL_CAST((VALUE)RUBY_FL_USER15)               /**< @old{RUBY_FL_USER15} */
#define FL_USER16       RBIMPL_CAST((VALUE)RUBY_FL_USER16)               /**< @old{RUBY_FL_USER16} */
#define FL_USER17       RBIMPL_CAST((VALUE)RUBY_FL_USER17)               /**< @old{RUBY_FL_USER17} */
#define FL_USER18       RBIMPL_CAST((VALUE)RUBY_FL_USER18)               /**< @old{RUBY_FL_USER18} */
#define FL_USER19       RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19) /**< @old{RUBY_FL_USER19} */

#define ELTS_SHARED          RUBY_ELTS_SHARED     /**< @old{RUBY_ELTS_SHARED} */
#define RB_OBJ_FREEZE        rb_obj_freeze_inline /**< @alias{rb_obj_freeze_inline} */

/** @cond INTERNAL_MACRO */
#define RUBY_ELTS_SHARED     RUBY_ELTS_SHARED
#define RB_FL_ABLE           RB_FL_ABLE
#define RB_FL_ALL            RB_FL_ALL
#define RB_FL_ALL_RAW        RB_FL_ALL_RAW
#define RB_FL_ANY            RB_FL_ANY
#define RB_FL_ANY_RAW        RB_FL_ANY_RAW
#define RB_FL_REVERSE        RB_FL_REVERSE
#define RB_FL_REVERSE_RAW    RB_FL_REVERSE_RAW
#define RB_FL_SET            RB_FL_SET
#define RB_FL_SET_RAW        RB_FL_SET_RAW
#define RB_FL_TEST           RB_FL_TEST
#define RB_FL_TEST_RAW       RB_FL_TEST_RAW
#define RB_FL_UNSET          RB_FL_UNSET
#define RB_FL_UNSET_RAW      RB_FL_UNSET_RAW
#define RB_OBJ_FREEZE_RAW    RB_OBJ_FREEZE_RAW
#define RB_OBJ_FROZEN        RB_OBJ_FROZEN
#define RB_OBJ_FROZEN_RAW    RB_OBJ_FROZEN_RAW
#define RB_OBJ_UNTRUST       RB_OBJ_TAINT
#define RB_OBJ_UNTRUSTED     RB_OBJ_TAINTED
/** @endcond */

/**
 * @defgroup deprecated_macros Deprecated macro APIs
 * @{
 * These macros are deprecated.  Prefer their `RB_`-prefixed versions.
 */
#define FL_ABLE         RB_FL_ABLE         /**< @old{RB_FL_ABLE} */
#define FL_ALL          RB_FL_ALL          /**< @old{RB_FL_ALL} */
#define FL_ALL_RAW      RB_FL_ALL_RAW      /**< @old{RB_FL_ALL_RAW} */
#define FL_ANY          RB_FL_ANY          /**< @old{RB_FL_ANY} */
#define FL_ANY_RAW      RB_FL_ANY_RAW      /**< @old{RB_FL_ANY_RAW} */
#define FL_REVERSE      RB_FL_REVERSE      /**< @old{RB_FL_REVERSE} */
#define FL_REVERSE_RAW  RB_FL_REVERSE_RAW  /**< @old{RB_FL_REVERSE_RAW} */
#define FL_SET          RB_FL_SET          /**< @old{RB_FL_SET} */
#define FL_SET_RAW      RB_FL_SET_RAW      /**< @old{RB_FL_SET_RAW} */
#define FL_TEST         RB_FL_TEST         /**< @old{RB_FL_TEST} */
#define FL_TEST_RAW     RB_FL_TEST_RAW     /**< @old{RB_FL_TEST_RAW} */
#define FL_UNSET        RB_FL_UNSET        /**< @old{RB_FL_UNSET} */
#define FL_UNSET_RAW    RB_FL_UNSET_RAW    /**< @old{RB_FL_UNSET_RAW} */
#define OBJ_FREEZE      RB_OBJ_FREEZE      /**< @old{RB_OBJ_FREEZE} */
#define OBJ_FREEZE_RAW  RB_OBJ_FREEZE_RAW  /**< @old{RB_OBJ_FREEZE_RAW} */
#define OBJ_FROZEN      RB_OBJ_FROZEN      /**< @old{RB_OBJ_FROZEN} */
#define OBJ_FROZEN_RAW  RB_OBJ_FROZEN_RAW  /**< @old{RB_OBJ_FROZEN_RAW} */
#define OBJ_INFECT      RB_OBJ_INFECT      /**< @old{RB_OBJ_INFECT} */
#define OBJ_INFECT_RAW  RB_OBJ_INFECT_RAW  /**< @old{RB_OBJ_INFECT_RAW} */
#define OBJ_TAINT       RB_OBJ_TAINT       /**< @old{RB_OBJ_TAINT} */
#define OBJ_TAINTABLE   RB_OBJ_TAINTABLE   /**< @old{RB_OBJ_TAINT_RAW} */
#define OBJ_TAINTED     RB_OBJ_TAINTED     /**< @old{RB_OBJ_TAINTED} */
#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW /**< @old{RB_OBJ_TAINTED_RAW} */
#define OBJ_TAINT_RAW   RB_OBJ_TAINT_RAW   /**< @old{RB_OBJ_TAINT_RAW} */
#define OBJ_UNTRUST     RB_OBJ_UNTRUST     /**< @old{RB_OBJ_TAINT} */
#define OBJ_UNTRUSTED   RB_OBJ_UNTRUSTED   /**< @old{RB_OBJ_TAINTED} */
/** @} */

/**
 * This is an enum because GDB wants it (rather than a macro).  People need not
 * bother.
 */
enum ruby_fl_ushift {
    /**
     * Number of bits in ::ruby_fl_type that  are _not_ open to users.  This is
     * an implementation detail.  Please ignore.
     */
    RUBY_FL_USHIFT = 12
};

/* > The expression that defines the value  of an enumeration constant shall be
 * > an integer constant expression that has a value representable as an `int`.
 *
 * -- ISO/IEC 9899:2018 section 6.7.2.2
 *
 * So ENUM_OVER_INT  situation is an  extension to the standard.   Note however
 * that we do not support 16 bit `int` environment. */
RB_GNUC_EXTENSION
/**
 * The  flags.  Each  ruby objects  have their  own characteristics  apart from
 * their  classes.  For  instance whether  an object  is frozen  or not  is not
 * controlled by its class.  This is the type that represents such properties.
 *
 * @note  About the `FL_USER` terminology: the "user" here does not necessarily
 *        mean only  you.  For  instance struct  ::RString instances  use these
 *        bits to cache their encodings  etc.  Devs discussed about this topic,
 *        reached their  consensus that  ::RUBY_T_DATA is  the only  valid data
 *        structure that  can use these  bits; other data  structures including
 *        ::RUBY_T_OBJECT  use these  bits  for their  own  purpose.  See  also
 *        https://bugs.ruby-lang.org/issues/18059
 */
enum
RBIMPL_ATTR_FLAG_ENUM()
ruby_fl_type {

    /**
     * @deprecated  This flag once was a thing  back in the old days, but makes
     *              no  sense  any longer  today.   Exists  here for  backwards
     *              compatibility only.  You can safely forget about it.
     *
     * @internal
     *
     * The reality is our GC no  longer remembers write barriers inside of each
     * objects, to use  dedicated bitmap instead.  But this flag  is still used
     * internally.   The  current  usages  of this  flag  should  be  something
     * different, which is unclear to @shyouhei.
     */
    RUBY_FL_WB_PROTECTED = (1<<5),

    /**
     * Ruby objects are "generational".  There are young objects & old objects.
     * Young objects are prone to die & monitored relatively extensively by the
     * garbage collector.  Old objects tend to live longer & are monitored less
     * frequently.  When an object survives a GC, its age is incremented.  When
     * age is equal to RVALUE_OLD_AGE, the object becomes Old. This flag is set
     * when an object becomes old, and is used by the write barrier to check if
     * an old object should be considered for marking more frequently  - as old
     * objects that have references added between major GCs need to be remarked
     * to prevent the referred object being mistakenly swept.
     *
     * @internal
     *
     * But honestly, @shyouhei  doesn't think this flag should  be visible from
     * 3rd parties.  It must be an implementation detail that they should never
     * know.  Might better be hidden.
     */
    RUBY_FL_PROMOTED    = (1<<5),

    /**
     * This flag is no longer in use
     *
     * @internal
     */
    RUBY_FL_UNUSED6    = (1<<6),

    /**
     * This flag has  something to do with finalisers.  A  ruby object can have
     * its finaliser,  which is another  object that evaluates when  the target
     * object is about  to die.  This flag  is used to denote that  there is an
     * attached finaliser.
     *
     * @internal
     *
     * But honestly, @shyouhei  doesn't think this flag should  be visible from
     * 3rd parties.  It must be an implementation detail that they should never
     * know.  Might better be hidden.
     */
    RUBY_FL_FINALIZE     = (1<<7),

    /**
     * @deprecated  This flag once was a thing  back in the old days, but makes
     *              no  sense  any longer  today.   Exists  here for  backwards
     *              compatibility only.  You can safely forget about it.
     */
    RUBY_FL_TAINT

#if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE)
    RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
#elif defined(_MSC_VER)
# pragma deprecated(RUBY_FL_TAINT)
#endif

                         = 0,

    /**
     * This flag has something to do with Ractor.  Multiple Ractors run without
     * protecting each  other.  Sharing an  object among Ractors  are basically
     * dangerous,  disabled by  default.   This  flag is  used  to bypass  that
     * restriction.  Of  course, you have  to manually prevent  race conditions
     * then.
     *
     * This flag  needs deep  understanding of multithreaded  programming.  You
     * would better not use it.
     */
    RUBY_FL_SHAREABLE    = (1<<8),

    /**
     * @deprecated  This flag once was a thing  back in the old days, but makes
     *              no  sense  any longer  today.   Exists  here for  backwards
     *              compatibility only.  You can safely forget about it.
     */
    RUBY_FL_UNTRUSTED

#if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE)
    RBIMPL_ATTR_DEPRECATED(("trustedness turned out to be a wrong idea."))
#elif defined(_MSC_VER)
# pragma deprecated(RUBY_FL_UNTRUSTED)
#endif

                         = 0,

    /**
     * This flag has something to do with  object IDs.  Unlike in the old days,
     * an object's object  ID (that a user can  query using `Object#object_id`)
     * is no longer its physical address represented using Ruby level integers.
     * It is  now a  monotonic-increasing integer  unrelated to  the underlying
     * memory arrangement.  Object IDs are assigned when necessary; objects are
     * born without one,  and will eventually have such  property when queried.
     * The interpreter has to manage which one is which.  This is the flag that
     * helps the  management.  Objects  with this  flag set  are the  ones with
     * object IDs assigned.
     *
     * @internal
     *
     * But honestly, @shyouhei  doesn't think this flag should  be visible from
     * 3rd parties.  It must be an implementation detail that they should never
     * know.  Might better be hidden.
     */
    RUBY_FL_SEEN_OBJ_ID  = (1<<9),

    /**
     * This flag has something to do with instance variables.  3rd parties need
     * not  know, but  there are  several ways  to store  an object's  instance
     * variables.   Objects  with this  flag  use  so-called "generic"  backend
     * storage.  This  distinction is purely an  implementation detail.  People
     * need not be aware of this working behind-the-scene.
     *
     * @internal
     *
     * As of writing everything except ::RObject and RModule use this scheme.
     */
    RUBY_FL_EXIVAR       = (1<<10),

    /**
     * This flag has something to do with data immutability.  When this flag is
     * set an object  is considered "frozen".  No modification  are expected to
     * happen beyond  that point  for the  particular object.   Immutability is
     * basically considered to be a  good property these days.  Library authors
     * are expected to obey.  Test this bit before you touch a data structure.
     *
     * @see rb_check_frozen()
     */
    RUBY_FL_FREEZE       = (1<<11),

/** (@shyouhei doesn't know how to excude this macro from doxygen). */
#define RBIMPL_FL_USER_N(n) RUBY_FL_USER##n = (1<<(RUBY_FL_USHIFT+n))
    RBIMPL_FL_USER_N(0),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(1),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(2),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(3),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(4),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(5),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(6),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(7),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(8),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(9),  /**< User-defined flag. */
    RBIMPL_FL_USER_N(10), /**< User-defined flag. */
    RBIMPL_FL_USER_N(11), /**< User-defined flag. */
    RBIMPL_FL_USER_N(12), /**< User-defined flag. */
    RBIMPL_FL_USER_N(13), /**< User-defined flag. */
    RBIMPL_FL_USER_N(14), /**< User-defined flag. */
    RBIMPL_FL_USER_N(15), /**< User-defined flag. */
    RBIMPL_FL_USER_N(16), /**< User-defined flag. */
    RBIMPL_FL_USER_N(17), /**< User-defined flag. */
    RBIMPL_FL_USER_N(18), /**< User-defined flag. */
#ifdef ENUM_OVER_INT
    RBIMPL_FL_USER_N(19), /**< User-defined flag. */
#else
# define RUBY_FL_USER19 (RBIMPL_VALUE_ONE<<(RUBY_FL_USHIFT+19))
#endif
#undef RBIMPL_FL_USER_N
#undef RBIMPL_WIDER_ENUM

    /**
     * This flag  has something to  do with  data structures.  Over  time, ruby
     * evolved to reduce  memory footprints.  One of such  attempt is so-called
     * copy-on-write, which  delays duplication  of resources  until ultimately
     * necessary.   Some  data  structures  share  this  scheme.   For  example
     * multiple  instances  of struct  ::RArray  could  point identical  memory
     * region  in common,  as  long as  they don't  differ.   As people  favour
     * immutable style  of programming than  before, this situation  is getting
     * more and more common.  Because such "shared" memory regions have nuanced
     * ownership by nature,  each structures need special care  for them.  This
     * flag is used to distinguish such shared constructs.
     *
     * @internal
     *
     * But honestly, @shyouhei  doesn't think this flag should  be visible from
     * 3rd parties.  It must be an implementation detail that they should never
     * know.  Might better be hidden.
     */
    RUBY_ELTS_SHARED  = RUBY_FL_USER0,

    /**
     * This flag has something to do with an object's class.  There are kind of
     * classes  called  "singleton  class",  each of  which  have  exactly  one
     * instance.  What is interesting about  singleton classes is that they are
     * created _after_ their instance were instantiated, like this:
     *
     * ```ruby
     * foo = Object.new          # foo is an instance of Object...
     * bar = foo.singleton_class # foo is now an instance of bar.
     * ```
     *
     * Here as you see  `bar` is a singleton class of  `foo`, which is injected
     * into  `foo`'s inheritance  tree in  a different  statement (==  distinct
     * sequence point).   In order to  achieve this property  singleton classes
     * are  special-cased in  the  interpreter.   There is  one  bit flag  that
     * distinguishes if a class is a singleton class or not, and this is it.
     *
     * @internal
     *
     * But honestly, @shyouhei  doesn't think this flag should  be visible from
     * 3rd parties.  It must be an implementation detail that they should never
     * know.  Might better be hidden.
     */
    RUBY_FL_SINGLETON = RUBY_FL_USER1,
};

enum {
    /**
     * @deprecated  This flag once was a thing  back in the old days, but makes
     *              no  sense  any longer  today.   Exists  here for  backwards
     *              compatibility only.  You can safely forget about it.
     */
    RUBY_FL_DUPPED

#if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE)
    RBIMPL_ATTR_DEPRECATED(("It seems there is no actual usage of this enum."))
#elif defined(_MSC_VER)
# pragma deprecated(RUBY_FL_DUPPED)
#endif

    = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR
};

#undef RBIMPL_HAVE_ENUM_ATTRIBUTE

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * This is an  implementation detail of #RB_OBJ_FREEZE().  People  don't use it
 * directly.
 *
 * @param[out]  klass  A singleton class.
 * @post        `klass` gets frozen.
 */
void rb_freeze_singleton_class(VALUE klass);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_FORCEINLINE()
/**
 * Checks  if the  object is  flaggable.  There  are some  special cases  (most
 * notably ::RUBY_Qfalse) where appending a flag  to an object is not possible.
 * This function can detect that.
 *
 * @param[in]  obj    Object in question
 * @retval     true   It is flaggable.
 * @retval     false  No it isn't.
 */
static bool
RB_FL_ABLE(VALUE obj)
{
    if (RB_SPECIAL_CONST_P(obj)) {
        return false;
    }
    else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
        return false;
    }
    else {
        return true;
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an implementation detail of  RB_FL_TEST().  3rd parties need not use
 * this.  Just always use RB_FL_TEST().
 *
 * @param[in]  obj    Object in question.
 * @param[in]  flags  A set of enum ::ruby_fl_type.
 * @pre        The object must not be an enum ::ruby_special_consts.
 * @return     `obj`'s flags, masked by `flags`.
 */
static inline VALUE
RB_FL_TEST_RAW(VALUE obj, VALUE flags)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
    return RBASIC(obj)->flags & flags;
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Tests if the given  flag(s) are set or not.  You can  pass multiple flags at
 * once:
 *
 * ```CXX
 * auto obj = rb_eval_string("...");
 * if (RB_FL_TEST(obj, RUBY_FL_FREEZE | RUBY_FL_SHAREABLE)) {
 *     printf("Ractor ready!\n");
 * }
 * ```
 *
 * @param[in]  obj    Object in question.
 * @param[in]  flags  A set of enum ::ruby_fl_type.
 * @return     `obj`'s flags, masked by `flags`.
 * @note       It  is intentional  for this  function to  return ::VALUE.   The
 *             return value could be passed to RB_FL_STE() etc.
 */
static inline VALUE
RB_FL_TEST(VALUE obj, VALUE flags)
{
    if (RB_FL_ABLE(obj)) {
        return RB_FL_TEST_RAW(obj, flags);
    }
    else {
        return RBIMPL_VALUE_NULL;
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an  implementation detail of RB_FL_ANY().  3rd parties  need not use
 * this.  Just always use RB_FL_ANY().
 *
 * @param[in]  obj    Object in question.
 * @param[in]  flags  A set of enum ::ruby_fl_type.
 * @retval     true   The object has any of the flags set.
 * @retval     false  No it doesn't at all.
 * @pre        The object must not be an enum ::ruby_special_consts.
 */
static inline bool
RB_FL_ANY_RAW(VALUE obj, VALUE flags)
{
    return RB_FL_TEST_RAW(obj, flags);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Identical to RB_FL_TEST(), except it returns bool.
 *
 * @param[in]  obj    Object in question.
 * @param[in]  flags  A set of enum ::ruby_fl_type.
 * @retval     true   The object has any of the flags set.
 * @retval     false  No it doesn't at all.
 */
static inline bool
RB_FL_ANY(VALUE obj, VALUE flags)
{
    return RB_FL_TEST(obj, flags);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an  implementation detail of RB_FL_ALL().  3rd parties  need not use
 * this.  Just always use RB_FL_ALL().
 *
 * @param[in]  obj    Object in question.
 * @param[in]  flags  A set of enum ::ruby_fl_type.
 * @retval     true   The object has all of the flags set.
 * @retval     false  The object lacks any of the flags.
 * @pre        The object must not be an enum ::ruby_special_consts.
 */
static inline bool
RB_FL_ALL_RAW(VALUE obj, VALUE flags)
{
    return RB_FL_TEST_RAW(obj, flags) == flags;
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Identical to RB_FL_ANY(), except it mandates all passed flags be set.
 *
 * @param[in]  obj    Object in question.
 * @param[in]  flags  A set of enum ::ruby_fl_type.
 * @retval     true   The object has all of the flags set.
 * @retval     false  The object lacks any of the flags.
 */
static inline bool
RB_FL_ALL(VALUE obj, VALUE flags)
{
    return RB_FL_TEST(obj, flags) == flags;
}

RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * @private
 *
 * This is an  implementation detail of RB_FL_SET().  3rd parties  need not use
 * this.  Just always use RB_FL_SET().
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` set.
 *
 * @internal
 *
 * This  is  function  is  here  to  annotate  a  part  of  RB_FL_SET_RAW()  as
 * `__declspec(noalias)`.
 */
static inline void
rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
{
    obj->flags |= flags;
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an  implementation detail of RB_FL_SET().  3rd parties  need not use
 * this.  Just always use RB_FL_SET().
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` set.
 */
static inline void
RB_FL_SET_RAW(VALUE obj, VALUE flags)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
    rbimpl_fl_set_raw_raw(RBASIC(obj), flags);
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Sets the given flag(s).
 *
 * ```CXX
 * auto v = rb_eval_string("...");
 * RB_FL_SET(v, RUBY_FL_FREEZE);
 * ```
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` set.
 */
static inline void
RB_FL_SET(VALUE obj, VALUE flags)
{
    if (RB_FL_ABLE(obj)) {
        RB_FL_SET_RAW(obj, flags);
    }
}

RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * @private
 *
 * This is an implementation detail of RB_FL_UNSET().  3rd parties need not use
 * this.  Just always use RB_FL_UNSET().
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` cleared.
 *
 * @internal
 *
 * This  is  function is  here  to  annotate  a  part of  RB_FL_UNSET_RAW()  as
 * `__declspec(noalias)`.
 */
static inline void
rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
{
    obj->flags &= ~flags;
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an implementation detail of RB_FL_UNSET().  3rd parties need not use
 * this.  Just always use RB_FL_UNSET().
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` cleared.
 */
static inline void
RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
    rbimpl_fl_unset_raw_raw(RBASIC(obj), flags);
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Clears the given flag(s).
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` cleard.
 */
static inline void
RB_FL_UNSET(VALUE obj, VALUE flags)
{
    if (RB_FL_ABLE(obj)) {
        RB_FL_UNSET_RAW(obj, flags);
    }
}

RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * @private
 *
 * This is an  implementation detail of RB_FL_REVERSE().  3rd  parties need not
 * use this.  Just always use RB_FL_REVERSE().
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` reversed.
 *
 * @internal
 *
 * This  is function  is  here to  annotate a  part  of RB_FL_REVERSE_RAW()  as
 * `__declspec(noalias)`.
 */
static inline void
rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
{
    obj->flags ^= flags;
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an  implementation detail of RB_FL_REVERSE().  3rd  parties need not
 * use this.  Just always use RB_FL_REVERSE().
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` cleared.
 */
static inline void
RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
    rbimpl_fl_reverse_raw_raw(RBASIC(obj), flags);
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Reverses the flags.  This function is here mainly for symmetry on set/unset.
 * Rarely used in practice.
 *
 * @param[out]  obj    Object in question.
 * @param[in]   flags  A set of enum ::ruby_fl_type.
 * @post        `obj` has `flags` reversed.
 */
static inline void
RB_FL_REVERSE(VALUE obj, VALUE flags)
{
    if (RB_FL_ABLE(obj)) {
        RB_FL_REVERSE_RAW(obj, flags);
    }
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   obj  Object in question.
 * @return      false always.
 */
static inline bool
RB_OBJ_TAINTABLE(VALUE obj)
{
    (void)obj;
    return false;
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   obj  Object in question.
 * @return      false always.
 */
static inline VALUE
RB_OBJ_TAINTED_RAW(VALUE obj)
{
    (void)obj;
    return false;
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   obj  Object in question.
 * @return      false always.
 */
static inline bool
RB_OBJ_TAINTED(VALUE obj)
{
    (void)obj;
    return false;
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   obj  Object in question.
 */
static inline void
RB_OBJ_TAINT_RAW(VALUE obj)
{
    (void)obj;
    return;
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   obj  Object in question.
 */
static inline void
RB_OBJ_TAINT(VALUE obj)
{
    (void)obj;
    return;
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   dst  Victim object.
 * @param[in]   src  Infectant object.
 */
static inline void
RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
{
    (void)dst;
    (void)src;
    return;
}

RBIMPL_ATTR_ARTIFICIAL()
RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea."))
/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   dst  Victim object.
 * @param[in]   src  Infectant object.
 */
static inline void
RB_OBJ_INFECT(VALUE dst, VALUE src)
{
    (void)dst;
    (void)src;
    return;
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an  implementation detail of RB_OBJ_FROZEN().  3rd  parties need not
 * use this.  Just always use RB_OBJ_FROZEN().
 *
 * @param[in]  obj             Object in question.
 * @retval     RUBY_FL_FREEZE  Yes it is.
 * @retval     0               No it isn't.
 *
 * @internal
 *
 * It is intentional  not to return bool  here.  There is a place  in ruby core
 * (namely `class.c:singleton_class_of()`) where return  value of this function
 * is passed to RB_FL_SET_RAW().
 */
static inline VALUE
RB_OBJ_FROZEN_RAW(VALUE obj)
{
    return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if an object is frozen.
 *
 * @param[in]  obj    Object in question.
 * @retval     true   Yes it is.
 * @retval     false  No it isn't.
 */
static inline bool
RB_OBJ_FROZEN(VALUE obj)
{
    if (! RB_FL_ABLE(obj)) {
        return true;
    }
    else {
        return RB_OBJ_FROZEN_RAW(obj);
    }
}

RUBY_SYMBOL_EXPORT_BEGIN
/**
 * Prevents further modifications to the given object.  ::rb_eFrozenError shall
 * be raised if modification is attempted.
 *
 * @param[out]  x               Object in question.
 * @exception   rb_eNoMemError  Failed   to   allocate memory  for  the  frozen
 *                              representation of the object.
 */
void rb_obj_freeze_inline(VALUE obj);
RUBY_SYMBOL_EXPORT_END

RBIMPL_ATTR_ARTIFICIAL()
/**
 * This is an  implementation detail of RB_OBJ_FREEZE().  3rd  parties need not
 * use this.  Just always use RB_OBJ_FREEZE().
 *
 * @param[out]  obj  Object in question.
 */
static inline void
RB_OBJ_FREEZE_RAW(VALUE obj)
{
    rb_obj_freeze_inline(obj);
}

#endif /* RBIMPL_FL_TYPE_H */
PK*J[�J�22include/ruby/internal/abi.hnu�[���#ifndef RUBY_ABI_H
#define RUBY_ABI_H

#ifdef RUBY_ABI_VERSION /* should match the definition in config.h */

/* This number represents Ruby's ABI version.
 *
 * In development Ruby, it should be bumped every time an ABI incompatible
 * change is introduced. This will force other developers to rebuild extension
 * gems.
 *
 * The following cases are considered as ABI incompatible changes:
 * - Changing any data structures.
 * - Changing macros or inline functions causing a change in behavior.
 * - Deprecating or removing function declarations.
 *
 * The following cases are NOT considered as ABI incompatible changes:
 * - Any changes that does not involve the header files in the `include`
 *   directory.
 * - Adding macros, inline functions, or function declarations.
 * - Backwards compatible refactors.
 * - Editing comments.
 *
 * In released versions of Ruby, this number is not defined since teeny
 * versions of Ruby should guarantee ABI compatibility.
 */
#define RUBY_ABI_VERSION 1

/* Windows does not support weak symbols so ruby_abi_version will not exist
 * in the shared library. */
#if defined(HAVE_FUNC_WEAK) && !defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
# define RUBY_DLN_CHECK_ABI
#endif
#endif  /* RUBY_ABI_VERSION */

#if defined(RUBY_DLN_CHECK_ABI) && !defined(RUBY_EXPORT)

# ifdef __cplusplus
extern "C" {
# endif

RUBY_FUNC_EXPORTED unsigned long long __attribute__((weak))
ruby_abi_version(void)
{
# ifdef RUBY_ABI_VERSION
    return RUBY_ABI_VERSION;
# else
    return 0;
# endif
}

# ifdef __cplusplus
}
# endif

#endif

#endif
PK*J[��CZZinclude/ruby/internal/newobj.hnu�[���#ifndef RBIMPL_NEWOBJ_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_NEWOBJ_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #NEWOBJ.
 */
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/value.h"
#include "ruby/assert.h"

#define OBJSETUP   rb_obj_setup   /**< @old{rb_obj_setup} */
#define CLONESETUP rb_clone_setup /**< @old{rb_clone_setup} */
#define DUPSETUP   rb_dup_setup   /**< @old{rb_dup_setup} */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * Fills common fields in the object.
 *
 * @param[in,out]  obj    A Ruby object to be set up.
 * @param[in]      klass  `obj` will belong to this class.
 * @param[in]      type   One of ::ruby_value_type.
 * @return         The passed object.
 *
 * @internal
 *
 * Historically, authors of  Ruby has described the `type` argument  as "one of
 * ::ruby_value_type".   In   reality  it  accepts   either  ::ruby_value_type,
 * ::ruby_fl_type,   or   any   combinations   of  the   two.    For   instance
 * `RUBY_T_STRING | RUBY_FL_FREEZE` is a valid  value that this function takes,
 * and means this is a frozen string.
 *
 * 3rd  party extension  libraries rarely  need to  allocate Strings  this way.
 * They normally only concern ::RUBY_T_DATA.   This argument is mainly used for
 * specifying flags, @shyouhei suspects.
 */
VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);

/**
 * Queries  the  class  of  an  object.    This  is  not  always  identical  to
 * `RBASIC_CLASS(obj)`.   It   searches  for  the  nearest   ancestor  skipping
 * singleton classes or included modules.
 *
 * @param[in]  obj  Object in question.
 * @return     The object's class, in a normal sense.
 */
VALUE rb_obj_class(VALUE obj);

/**
 * Clones a singleton class.  An object  can have its own singleton class.  OK.
 * Then what  happens when a program  clones such object?  The  singleton class
 * that is  attached to  the source  object must also  be cloned.   Otherwise a
 * singleton object gets shared with two objects, which breaks "singleton"-ness
 * of such class.
 *
 * This  is basically  an  implementation detail  of rb_clone_setup().   People
 * need not be aware of this working behind-the-scene.
 *
 * @param[in]  obj  The object that has its own singleton class.
 * @return     Cloned singleton class.
 */
VALUE rb_singleton_class_clone(VALUE obj);

/**
 * Attaches a singleton class to its corresponding object.
 *
 * This  is basically  an  implementation detail  of rb_clone_setup().   People
 * need not be aware of this working behind-the-scene.
 *
 * @param[in]   klass  The singleton class.
 * @param[out]  obj    The object to attach a class.
 * @pre         The passed two objects must  agree with each other that `klass`
 *              becomes a singleton class of `obj`.
 * @post        `klass` becomes the singleton class of `obj`.
 */
void rb_singleton_class_attached(VALUE klass, VALUE obj);

/**
 * Copies the list of instance variables.  3rd parties need not know, but there
 * are several ways  to store an object's instance variables,  depending on its
 * internal structure.   This function  makes sense when  either of  the passed
 * objects are using so-called "generic"  backend storage.  This distinction is
 * purely an  implementation detail  of rb_clone_setup().   People need  not be
 * aware of this working behind-the-scenes.
 *
 * @param[out]  clone  The destination object.
 * @param[in]   obj    The source object.
 */
void rb_copy_generic_ivar(VALUE clone, VALUE obj);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_DEPRECATED(("This is no longer how Object#clone works."))
/**
 * @deprecated  Not sure exactly  when but at some time,  the implementation of
 *              `Object#clone`  stopped  using   this  function.   It  remained
 *              untouched for  a while, and  then @shyouhei realised  that they
 *              are no longer doing the  same thing.  It seems nobody seriously
 *              uses this function any longer.  Let's just abandon it.
 *
 * @param[out]  clone  The destination object.
 * @param[in]   obj    The source object.
 */
static inline void
rb_clone_setup(VALUE clone, VALUE obj)
{
    (void)clone;
    (void)obj;
    return;
}

RBIMPL_ATTR_DEPRECATED(("This is no longer how Object#dup works."))
/**
 * @deprecated  Not sure exactly  when but at some time,  the implementation of
 *              `Object#dup`   stopped  using   this  function.    It  remained
 *              untouched for  a while, and  then @shyouhei realised  that they
 *              are no longer  the same thing.  It seems  nobody seriously uses
 *              this function any longer.  Let's just abandon it.
 *
 * @param[out]  dup  The destination object.
 * @param[in]   obj  The source object.
 */
static inline void
rb_dup_setup(VALUE dup, VALUE obj)
{
    (void)dup;
    (void)obj;
    return;
}

#endif /* RBIMPL_NEWOBJ_H */
PK*J[���
�
&include/ruby/internal/compiler_since.hnu�[���#ifndef RBIMPL_COMPILER_SINCE_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_SINCE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_COMPILER_SINCE.
 */
#include "ruby/internal/compiler_is.h"

/**
 * @brief   Checks if the compiler is of given brand and is newer than or equal
 *          to the passed version.
 * @param   cc     Compiler brand, like `MSVC`.
 * @param   x      Major version.
 * @param   y      Minor version.
 * @param   z      Patchlevel.
 * @retval  true   cc >= x.y.z.
 * @retval  false  otherwise.
 */
#define RBIMPL_COMPILER_SINCE(cc, x, y, z)     \
     (RBIMPL_COMPILER_IS(cc)                && \
    ((RBIMPL_COMPILER_VERSION_MAJOR >  (x)) || \
    ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && \
    ((RBIMPL_COMPILER_VERSION_MINOR >  (y)) || \
    ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && \
     (RBIMPL_COMPILER_VERSION_PATCH >= (z)))))))

/**
 * @brief   Checks if  the compiler  is of  given brand and  is older  than the
 *          passed version.
 * @param   cc     Compiler brand, like `MSVC`.
 * @param   x      Major version.
 * @param   y      Minor version.
 * @param   z      Patchlevel.
 * @retval  true   cc < x.y.z.
 * @retval  false  otherwise.
 */
#define RBIMPL_COMPILER_BEFORE(cc, x, y, z)    \
     (RBIMPL_COMPILER_IS(cc)                && \
    ((RBIMPL_COMPILER_VERSION_MAJOR <  (x)) || \
    ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && \
    ((RBIMPL_COMPILER_VERSION_MINOR <  (y)) || \
    ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && \
     (RBIMPL_COMPILER_VERSION_PATCH <  (z)))))))

#endif /* RBIMPL_COMPILER_SINCE_H */
PK*J[\�и�"include/ruby/internal/core/rhash.hnu�[���#ifndef RBIMPL_RHASH_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RHASH_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate struct RHash.
 * @note       The struct RHash itself is opaque.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY
# include "ruby/backward.h"
#endif

/**
 * Retrieves the internal table.
 *
 * @param[in]  h  An instance of RHash.
 * @pre        `h` must be of ::RUBY_T_HASH.
 * @return     A struct st_table which has the contents of this hash.
 * @note       Nowadays as Ruby  evolved over ages, RHash  has multiple backend
 *             storage  engines.   `h`'s backend  is  not  guaranteed to  be  a
 *             st_table.  This function creates one when necessary.
 */
#define RHASH_TBL(h)                rb_hash_tbl(h, __FILE__, __LINE__)

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 *
 * @internal
 *
 * Declaration of rb_hash_ifnone() is at include/ruby/backward.h.
 */
#define RHASH_IFNONE(h)             rb_hash_ifnone(h)

/**
 * Queries the size of  the hash.  Size here means the number  of keys that the
 * hash stores.
 *
 * @param[in]  h  An instance of RHash.
 * @pre        `h` must be of ::RUBY_T_HASH.
 * @return     The size of the hash.
 */
#define RHASH_SIZE(h)               rb_hash_size_num(h)

/**
 * Checks if the hash is empty.
 *
 * @param[in]  h      An instance of RHash.
 * @pre        `h` must be of ::RUBY_T_HASH.
 * @retval     true   It is.
 * @retval     false  It isn't.
 */
#define RHASH_EMPTY_P(h)            (RHASH_SIZE(h) == 0)

/**
 * Destructively updates the default value of the hash.
 *
 * @param[out]  h       An instance of RHash.
 * @param[in]   ifnone  Arbitrary default value.
 * @pre        `h` must be of ::RUBY_T_HASH.
 *
 * @internal
 *
 * But why you can set this, given rb_hash_ifnone() doesn't exist?
 */
#define RHASH_SET_IFNONE(h, ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)

struct st_table;  /* in ruby/st.h */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * This is  the implementation detail  of #RHASH_SIZE.  People don't  call this
 * directly.
 *
 * @param[in]  hash  An instance of RHash.
 * @pre        `hash` must be of ::RUBY_T_HASH.
 * @return     The size of the hash.
 */
size_t rb_hash_size_num(VALUE hash);

/**
 * This is  the implementation  detail of #RHASH_TBL.   People don't  call this
 * directly.
 *
 * @param[in]  hash  An instance of RHash.
 * @param[in]  file  The `__FILE__`.
 * @param[in]  line  The `__LINE__`.
 * @pre        `hash` must be of ::RUBY_T_HASH.
 * @return     Table that has the contents of the hash.
 */
struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line);

/**
 * This is the  implementation detail of #RHASH_SET_IFNONE.   People don't call
 * this directly.
 *
 * @param[out]  hash    An instance of RHash.
 * @param[in]   ifnone  Arbitrary default value.
 * @pre        `hash` must be of ::RUBY_T_HASH.
 */
VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone);
RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_RHASH_H */
PK*J[��kk$include/ruby/internal/core/rstruct.hnu�[���#ifndef RBIMPL_RSTRUCT_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RSTRUCT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate struct RStruct.
 * @note       The struct RStruct itself is opaque.
 */
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/arithmetic/int.h"
#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY
# include "ruby/backward.h"
#endif

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 *
 * @internal
 *
 * Declaration of rb_struct_ptr() is at include/ruby/backward.h.
 */
#define RSTRUCT_PTR(st) rb_struct_ptr(st)
/** @cond INTERNAL_MACRO */
#define RSTRUCT_LEN RSTRUCT_LEN
#define RSTRUCT_SET RSTRUCT_SET
#define RSTRUCT_GET RSTRUCT_GET
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * Returns the number of struct members.
 *
 * @param[in]  st  An instance of RStruct.
 * @return     The number of members of `st`.
 * @pre        `st` must be of ::RUBY_T_STRUCT.
 */
VALUE rb_struct_size(VALUE st);

/**
 * Resembles `Struct#[]`.
 *
 * @param[in]  st              An instance of RStruct.
 * @param[in]  k               Index a.k.a. key of the struct.
 * @exception  rb_eTypeError   `k` is neither Numeric, Symbol, nor String.
 * @exception  rb_eIndexError  Numerical index out of range.
 * @exception  rb_eNameError   No such key.
 * @return     The member stored at `k` in `st`.
 * @pre        `st` must be of ::RUBY_T_STRUCT.
 */
VALUE rb_struct_aref(VALUE st, VALUE k);

/**
 * Resembles `Struct#[]=`.
 *
 * @param[out]  st              An instance of RStruct.
 * @param[in]   k               Index a.k.a. key of the struct.
 * @param[in]   v               Value to store.
 * @exception  rb_eTypeError    `k` is neither Numeric, Symbol, nor String.
 * @exception  rb_eIndexError   Numerical index out of range.
 * @exception  rb_eNameError    No such key.
 * @return     Passed `v`.
 * @pre        `st` must be of ::RUBY_T_STRUCT.
 * @post       `v` is stored at `k` in `st`.
 */
VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_ARTIFICIAL()
/** @copydoc rb_struct_size()  */
static inline long
RSTRUCT_LEN(VALUE st)
{
    RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT);

    return RB_NUM2LONG(rb_struct_size(st));
}

RBIMPL_ATTR_ARTIFICIAL()
/** @copydoc rb_struct_aset()  */
static inline VALUE
RSTRUCT_SET(VALUE st, int k, VALUE v)
{
    RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT);

    return rb_struct_aset(st, INT2NUM(k), (v));
}

RBIMPL_ATTR_ARTIFICIAL()
/** @copydoc rb_struct_aref()  */
static inline VALUE
RSTRUCT_GET(VALUE st, int k)
{
    RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT);

    return rb_struct_aref(st, INT2NUM(k));
}

#endif /* RBIMPL_RSTRUCT_H */
PK*J[�A��BB$include/ruby/internal/core/rstring.hnu�[���#ifndef RBIMPL_RSTRING_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RSTRING_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RString.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/value_type.h"
#include "ruby/internal/warning_push.h"
#include "ruby/assert.h"

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RString.
 * @return  The passed object casted to ::RString.
 */
#define RSTRING(obj)            RBIMPL_CAST((struct RString *)(obj))

/** @cond INTERNAL_MACRO */
#define RSTRING_NOEMBED         RSTRING_NOEMBED
#define RSTRING_FSTR            RSTRING_FSTR
#define RSTRING_LEN       RSTRING_LEN
#define RSTRING_LENINT    RSTRING_LENINT
#define RSTRING_PTR       RSTRING_PTR
#define RSTRING_END       RSTRING_END
/** @endcond */

/**
 * @name Conversion of Ruby strings into C's
 *
 * @{
 */

/**
 * Ensures that the parameter object is a  String.  This is done by calling its
 * `to_str` method.
 *
 * @param[in,out]  v              Arbitrary Ruby object.
 * @exception      rb_eTypeError  No implicit conversion defined.
 * @post           `v` is a String.
 */
#define StringValue(v)     rb_string_value(&(v))

/**
 * Identical to #StringValue, except it returns a `char*`.
 *
 * @param[in,out]  v              Arbitrary Ruby object.
 * @exception      rb_eTypeError  No implicit conversion defined.
 * @return         Converted Ruby string's backend C string.
 * @post           `v` is a String.
 */
#define StringValuePtr(v)  rb_string_value_ptr(&(v))

/**
 * Identical to #StringValuePtr, except it additionally checks for the contents
 * for viability  as a C  string.  Ruby can accept  wider range of  contents as
 * strings, compared to C.  This function is to check that.
 *
 * @param[in,out]  v              Arbitrary Ruby object.
 * @exception      rb_eTypeError  No implicit conversion defined.
 * @exception      rb_eArgError   String is not C-compatible.
 * @return         Converted Ruby string's backend C string.
 * @post           `v` is a String.
 */
#define StringValueCStr(v) rb_string_value_cstr(&(v))

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define SafeStringValue(v) StringValue(v)

/**
 * Identical  to #StringValue,  except  it additionally  converts the  string's
 * encoding to default external encoding.  Ruby has a concept called encodings.
 * A string can have different  encoding than the environment expects.  Someone
 * has to make  sure its contents be converted to  something suitable.  This is
 * that routine.  Call it when necessary.
 *
 * @param[in,out]  v              Arbitrary Ruby object.
 * @exception      rb_eTypeError  No implicit conversion defined.
 * @return         Converted Ruby string's backend C string.
 * @post           `v` is a String.
 *
 * @internal
 *
 * Not   sure  but   it  seems   this  macro   does  not   raise  on   encoding
 * incompatibilities?  Doesn't sound right to @shyouhei.
 */
#define ExportStringValue(v) do { \
    StringValue(v);               \
    (v) = rb_str_export(v);       \
} while (0)

/** @} */

/**
 * @private
 *
 * Bits that you can set to ::RBasic::flags.
 *
 * @warning  These enums are not the only bits we use for strings.
 *
 * @internal
 *
 * Actually all bits  through FL_USER1 to FL_USER19 are used  for strings.  Why
 * only this  tiny part of  them are made public  here?  @shyouhei can  find no
 * reason.
 */
enum ruby_rstring_flags {

    /**
     * This flag has  something to do with memory footprint.   If the string is
     * short enough, ruby tries to be  creative to abuse padding bits of struct
     * ::RString for  storing contents.  If this  flag is set that  string does
     * _not_  do that,  to resort  to  good old  fashioned external  allocation
     * strategy instead.
     *
     * @warning  This  bit has  to be  considered read-only.   Setting/clearing
     *           this  bit without  corresponding fix  up must  cause immediate
     *           SEGV.    Also,  internal   structures  of   a  string   change
     *           dynamically  and  transparently  throughout of  its  lifetime.
     *           Don't assume it being persistent.
     *
     * @internal
     *
     * 3rd parties must  not be aware that  there even is more than  one way to
     * store a string.  Might better be hidden.
     */
    RSTRING_NOEMBED         = RUBY_FL_USER1,

    /* Actually,  string  encodings are  also  encoded  into the  flags,  using
     * remaining bits.*/

    /**
     * This  flag has  something  to do  with infamous  "f"string.   What is  a
     * fstring?  Well  it is a  special subkind  of strings that  is immutable,
     * deduped globally, and managed  by our GC.  It is much  like a Symbol (in
     * fact Symbols are  dynamic these days and are  backended using fstrings).
     * This concept  has been  silently introduced  at some  point in  2.x era.
     * Since  then it  gained  wider  acceptance in  the  core.  But  extension
     * libraries could not know that until very recently.  Strings of this flag
     * live in  a special Limbo deep  inside of the interpreter.   Never try to
     * manipulate it by hand.
     *
     * @internal
     *
     * Fstrings  are not  the only  variant  strings that  we implement  today.
     * Other things are behind-the-scene.  This is the only one that is visible
     * from extension  library.  There  is no  clear reason why  it has  to be.
     * Given there are more "polite" ways to create fstrings, it seems this bit
     * need not be exposed to extension libraries.  Might better be hidden.
     */
    RSTRING_FSTR            = RUBY_FL_USER17
};

/**
 * Ruby's String.  A string in ruby conceptually has these information:
 *
 * - Encoding of the string.
 * - Length of the string.
 * - Contents of the string.
 *
 * It is worth  noting that a string  is _not_ an array of  characters in ruby.
 * It has never been.   In 1.x a string was an array of  integers.  Since 2.x a
 * string is no longer an array of anything.  A string is a string -- just like
 * a Time is not an integer.
 */
struct RString {

    /** Basic part, including flags and class. */
    struct RBasic basic;

    /**
     * Length of the string, not including terminating NUL character.
     *
     * @note  This is in bytes.
     */
    long len;

    /** String's specific fields. */
    union {

        /**
         * Strings  that use  separated  memory region  for  contents use  this
         * pattern.
         */
        struct {
            /**
             * Pointer to  the contents of  the string.   In the old  days each
             * string had  dedicated memory  regions.  That  is no  longer true
             * today,  but there  still are  strings of  such properties.  This
             * field could be used to point such things.
             */
            char *ptr;

            /** Auxiliary info. */
            union {

                /**
                 * Capacity of `*ptr`.  A continuous  memory region of at least
                 * `capa` bytes  is expected to  exist at `*ptr`.  This  can be
                 * bigger than `len`.
                 */
                long capa;

                /**
                 * Parent  of the  string.   Nowadays strings  can share  their
                 * contents each other, constructing  gigantic nest of objects.
                 * This situation is called "shared",  and this is the field to
                 * control such properties.
                 */
                VALUE shared;
            } aux;
        } heap;

        /** Embedded contents. */
        struct {
            /* This is a length 1 array because:
             *   1. GCC has a bug that does not optimize C flexible array members
             *      (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102452)
             *   2. Zero length arrays are not supported by all compilers
             */
            char ary[1];
        } embed;
    } as;
};

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * Identical to rb_check_string_type(), except it  raises exceptions in case of
 * conversion failures.
 *
 * @param[in]  obj            Target object.
 * @exception  rb_eTypeError  No implicit conversion to String.
 * @return     Return value of `obj.to_str`.
 * @see        rb_io_get_io
 * @see        rb_ary_to_ary
 */
VALUE rb_str_to_str(VALUE obj);

/**
 * Identical to  rb_str_to_str(), except it  fills the passed pointer  with the
 * converted object.
 *
 * @param[in,out]  ptr            Pointer to a variable of target object.
 * @exception      rb_eTypeError  No implicit conversion to String.
 * @return         Return value of `obj.to_str`.
 * @post           `*ptr` is the return value.
 */
VALUE rb_string_value(volatile VALUE *ptr);

/**
 * Identical  to  rb_str_to_str(), except  it  returns  the converted  string's
 * backend memory region.
 *
 * @param[in,out]  ptr            Pointer to a variable of target object.
 * @exception      rb_eTypeError  No implicit conversion to String.
 * @post           `*ptr` is the return value of `obj.to_str`.
 * @return         Pointer to the contents of the return value.
 */
char *rb_string_value_ptr(volatile VALUE *ptr);

/**
 * Identical to  rb_string_value_ptr(), except  it additionally checks  for the
 * contents  for viability  as a  C  string.  Ruby  can accept  wider range  of
 * contents as strings, compared to C.  This function is to check that.
 *
 * @param[in,out]  ptr            Pointer to a variable of target object.
 * @exception      rb_eTypeError  No implicit conversion to String.
 * @exception      rb_eArgError   String is not C-compatible.
 * @post           `*ptr` is the return value of `obj.to_str`.
 * @return         Pointer to the contents of the return value.
 */
char *rb_string_value_cstr(volatile VALUE *ptr);

/**
 * Identical  to rb_str_to_str(),  except it  additionally converts  the string
 * into default  external encoding.   Ruby has a  concept called  encodings.  A
 * string can  have different encoding  than the environment  expects.  Someone
 * has to make  sure its contents be converted to  something suitable.  This is
 * that routine.  Call it when necessary.
 *
 * @param[in]  obj            Target object.
 * @exception  rb_eTypeError  No implicit conversion to String.
 * @return     Converted ruby string of default external encoding.
 */
VALUE rb_str_export(VALUE obj);

/**
 * Identical to  rb_str_export(), except it  converts into the  locale encoding
 * instead.
 *
 * @param[in]  obj            Target object.
 * @exception  rb_eTypeError  No implicit conversion to String.
 * @return     Converted ruby string of locale encoding.
 */
VALUE rb_str_export_locale(VALUE obj);

RBIMPL_ATTR_ERROR(("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead"))
/**
 * @private
 *
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 */
void rb_check_safe_str(VALUE);

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v)))

/**
 * @private
 *
 * Prints diagnostic message to stderr when RSTRING_PTR or RSTRING_END
 * is NULL.
 *
 * @param[in]  func           The function name where encountered NULL pointer.
 */
void rb_debug_rstring_null_ptr(const char *func);
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the length of the string.
 *
 * @param[in]  str  String in question.
 * @return     Its length, in bytes.
 * @pre        `str` must be an instance of ::RString.
 */
static inline long
RSTRING_LEN(VALUE str)
{
    return RSTRING(str)->len;
}

RBIMPL_WARNING_PUSH()
#if RBIMPL_COMPILER_IS(Intel)
RBIMPL_WARNING_IGNORED(413)
#endif

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * @private
 *
 * "Expands" an embedded  string into an ordinal one.  This  is a function that
 * returns aggregated type.   The returned struct always  has its `as.heap.len`
 * an `as.heap.ptr` fields set appropriately.
 *
 * This is an implementation detail that 3rd parties should never bother.
 */
static inline struct RString
rbimpl_rstring_getmem(VALUE str)
{
    RBIMPL_ASSERT_TYPE(str, RUBY_T_STRING);

    if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) {
        return *RSTRING(str);
    }
    else {
        /* Expecting compilers to optimize this on-stack struct away. */
        struct RString retval;
        retval.len = RSTRING_LEN(str);
        retval.as.heap.ptr = RSTRING(str)->as.embed.ary;
        return retval;
    }
}

RBIMPL_WARNING_POP()

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the contents pointer of the string.
 *
 * @param[in]  str  String in question.
 * @return     Pointer to its contents.
 * @pre        `str` must be an instance of ::RString.
 */
static inline char *
RSTRING_PTR(VALUE str)
{
    char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr;

    if (RUBY_DEBUG && RB_UNLIKELY(! ptr)) {
        /* :BEWARE: @shyouhei thinks  that currently, there are  rooms for this
         * function to return  NULL.  Better check here for maximum safety.
         *
         * Also,  this is  not rb_warn()  because RSTRING_PTR()  can be  called
         * during GC (see  what obj_info() does).  rb_warn()  needs to allocate
         * Ruby objects.  That is not possible at this moment. */
        rb_debug_rstring_null_ptr("RSTRING_PTR");
    }

    return ptr;
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the end of the contents pointer of the string.
 *
 * @param[in]  str  String in question.
 * @return     Pointer to its end of contents.
 * @pre        `str` must be an instance of ::RString.
 */
static inline char *
RSTRING_END(VALUE str)
{
    struct RString buf = rbimpl_rstring_getmem(str);

    if (RUBY_DEBUG && RB_UNLIKELY(! buf.as.heap.ptr)) {
        /* Ditto. */
        rb_debug_rstring_null_ptr("RSTRING_END");
    }

    return &buf.as.heap.ptr[buf.len];
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Identical to RSTRING_LEN(), except it differs for the return type.
 *
 * @param[in]  str             String in question.
 * @exception  rb_eRangeError  Too long.
 * @return     Its length, in bytes.
 * @pre        `str` must be an instance of ::RString.
 *
 * @internal
 *
 * This API seems redundant but has actual usages.
 */
static inline int
RSTRING_LENINT(VALUE str)
{
    return rb_long2int(RSTRING_LEN(str));
}

/**
 * Convenient macro to obtain the contents and length at once.
 *
 * @param  str     String in question.
 * @param  ptrvar  Variable where its contents is stored.
 * @param  lenvar  Variable where its length is stored.
 */
#ifdef HAVE_STMT_AND_DECL_IN_EXPR
# define RSTRING_GETMEM(str, ptrvar, lenvar) \
    __extension__ ({ \
        struct RString rbimpl_str = rbimpl_rstring_getmem(str); \
        (ptrvar) = rbimpl_str.as.heap.ptr; \
        (lenvar) = rbimpl_str.len; \
    })
#else
# define RSTRING_GETMEM(str, ptrvar, lenvar) \
    ((ptrvar) = RSTRING_PTR(str),           \
     (lenvar) = RSTRING_LEN(str))
#endif /* HAVE_STMT_AND_DECL_IN_EXPR */
#endif /* RBIMPL_RSTRING_H */
PK*J[Z2�$#include/ruby/internal/core/rbasic.hnu�[���#ifndef RBIMPL_RBASIC_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RBASIC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RBasic.
 */
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/attr/forceinline.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/value.h"
#include "ruby/assert.h"

/**
 * Convenient casting macro.
 *
 * @param   obj  Arbitrary Ruby object.
 * @return  The passed object casted to ::RBasic.
 */
#define RBASIC(obj)                 RBIMPL_CAST((struct RBasic *)(obj))
/** @cond INTERNAL_MACRO */
#define RBASIC_CLASS                RBASIC_CLASS
#define RBIMPL_RVALUE_EMBED_LEN_MAX 3
#define RVALUE_EMBED_LEN_MAX        RVALUE_EMBED_LEN_MAX
#define RBIMPL_EMBED_LEN_MAX_OF(T) \
    RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
/** @endcond */

/**
 * This is an enum because GDB wants it (rather than a macro).  People need not
 * bother.
 */
enum ruby_rvalue_flags {
    /** Max possible number of objects that can be embedded. */
    RVALUE_EMBED_LEN_MAX = RBIMPL_RVALUE_EMBED_LEN_MAX
};

/**
 * Ruby object's base components. All Ruby objects have them in common.
 */
struct
RUBY_ALIGNAS(SIZEOF_VALUE)
RBasic {

    /**
     * Per-object flags.   Each Ruby object  has its own  characteristics apart
     * from its class.  For instance, whether an object is frozen or not is not
     * controlled by its class.  This is where such properties are stored.
     *
     * @see enum ::ruby_fl_type
     *
     * @note  This is ::VALUE rather than  an enum for alignment purposes.  Back
     *        in the 1990s there were no such thing like `_Alignas` in C.
     */
    VALUE flags;

    /**
     * Class of an object.  Every object has its class.  Also, everything is an
     * object  in Ruby.   This means  classes are  also objects.   Classes have
     * their own classes,  classes  of classes have their classes too,  and  it
     * recursively continues forever.
     *
     * Also note the `const` qualifier.  In Ruby, an object cannot "change" its
     * class.
     */
    const VALUE klass;

#ifdef __cplusplus
  public:
    RBIMPL_ATTR_CONSTEXPR(CXX11)
    RBIMPL_ATTR_ARTIFICIAL()
    RBIMPL_ATTR_FORCEINLINE()
    RBIMPL_ATTR_NOALIAS()
    /**
     * We need to define this explicit constructor because the field `klass` is
     * const-qualified above,  which effectively  defines the  implicit default
     * constructor as "deleted"  (as of C++11) --  No way but to  define one by
     * ourselves.
     */
    RBasic() :
        flags(RBIMPL_VALUE_NULL),
        klass(RBIMPL_VALUE_NULL)
    {
    }
#endif
};

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * Make the object invisible from Ruby code.
 *
 * It is  useful to let  Ruby's GC manage your  internal data structure  -- The
 * object keeps being managed by GC, but `ObjectSpace.each_object` never yields
 * the object.
 *
 * Note that the object also lose a way to call a method on it.
 *
 * @param[out]  obj  A Ruby object.
 * @return      The passed object.
 * @post        The object is destructively modified to be invisible.
 * @see         rb_obj_reveal
 */
VALUE rb_obj_hide(VALUE obj);

/**
 * Make a hidden object visible again.
 *
 * It is  the caller's  responsibility to  pass the  right `klass`  which `obj`
 * originally used to belong to.
 *
 * @param[out]  obj    A Ruby object.
 * @param[in]   klass  Class of `obj`.
 * @return      Passed `obj`.
 * @pre         `obj` was previously hidden.
 * @post        `obj`'s class is `klass`.
 * @see         rb_obj_hide
 */
VALUE rb_obj_reveal(VALUE obj, VALUE klass); /* do not use this API to change klass information */
RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the class of an object.
 *
 * @param[in]  obj  An object.
 * @return     Its class.
 */
static inline VALUE
RBASIC_CLASS(VALUE obj)
{
    RBIMPL_ASSERT_OR_ASSUME(! RB_SPECIAL_CONST_P(obj));
    return RBASIC(obj)->klass;
}

#endif /* RBIMPL_RBASIC_H */
PK*J[�w�)[)['include/ruby/internal/core/rtypeddata.hnu�[���#ifndef RBIMPL_RTYPEDDATA_H                          /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RTYPEDDATA_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RTypedData.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#include "ruby/internal/assume.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/flag_enum.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/core/rdata.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/error.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value_type.h"

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define HAVE_TYPE_RB_DATA_TYPE_T     1

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define HAVE_RB_DATA_TYPE_T_FUNCTION 1

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define HAVE_RB_DATA_TYPE_T_PARENT   1

/**
 * This is a  value you can set to  ::rb_data_type_struct::dfree.  Setting this
 * means the data was allocated using ::ruby_xmalloc() (or variants), and shall
 * be freed using ::ruby_xfree().
 *
 * @warning  Do not  use this  if you  want to use  system malloc,  because the
 *           system  and  Ruby  might  or  might  not  share  the  same  malloc
 *           implementation.
 */
#define RUBY_TYPED_DEFAULT_FREE      RUBY_DEFAULT_FREE

/**
 * This is a  value you can set to  ::rb_data_type_struct::dfree.  Setting this
 * means the data  is managed by someone else, like,  statically allocated.  Of
 * course you are on your own then.
 */
#define RUBY_TYPED_NEVER_FREE        RUBY_NEVER_FREE

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RTypedData.
 * @return  The passed object casted to ::RTypedData.
 */
#define RTYPEDDATA(obj)              RBIMPL_CAST((struct RTypedData *)(obj))

/**
 * Convenient getter macro.
 *
 * @param   v  An object, which is in fact an ::RTypedData.
 * @return  The passed object's ::RTypedData::data field.
 */
#define RTYPEDDATA_DATA(v)           (RTYPEDDATA(v)->data)

/** @old{rb_check_typeddata} */
#define Check_TypedStruct(v, t)      \
    rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))

/** @cond INTERNAL_MACRO */
#define RTYPEDDATA_P                 RTYPEDDATA_P
#define RTYPEDDATA_TYPE              RTYPEDDATA_TYPE
#define RUBY_TYPED_FREE_IMMEDIATELY  RUBY_TYPED_FREE_IMMEDIATELY
#define RUBY_TYPED_FROZEN_SHAREABLE  RUBY_TYPED_FROZEN_SHAREABLE
#define RUBY_TYPED_WB_PROTECTED      RUBY_TYPED_WB_PROTECTED
#define RUBY_TYPED_PROMOTED1         RUBY_TYPED_PROMOTED1
/** @endcond */

#define TYPED_DATA_EMBEDDED 2

/**
 * @private
 *
 * Bits for rb_data_type_struct::flags.
 */
enum
RBIMPL_ATTR_FLAG_ENUM()
rbimpl_typeddata_flags {
    /**
     * This flag has something to do  with Ruby's global interpreter lock.  For
     * maximum  safety, Ruby  locks  the  entire VM  during  GC.  However  your
     * callback functions  could unintentionally  unlock it, for  instance when
     * they try to flush an IO  buffer.  Such operations are dangerous (threads
     * then  run alongside  of GC).   By  default, to  prevent those  scenario,
     * callbacks are deferred until the GC engine is 100% sure threads can run.
     * This flag skips  that; structs with it are deallocated  during the sweep
     * phase.
     *
     * Using this  flag needs deep understanding  of both GC and  threads.  You
     * would better leave it unspecified.
     */
    RUBY_TYPED_FREE_IMMEDIATELY = 1,

    RUBY_TYPED_EMBEDDABLE = 2,

    /**
     * This flag has something to do with Ractor.  Multiple Ractors run without
     * protecting each  other.  Sharing  an object  among Ractors  is basically
     * dangerous,  disabled by  default.   This  flag is  used  to bypass  that
     * restriction.  but  setting it is not  enough.  In addition to  do so, an
     * object    also    has    to    be   frozen,    and    be    passed    to
     * rb_ractor_make_shareable() before being  actually shareable.  Of course,
     * you have to manually prevent race conditions then.
     *
     * Using this  flag needs deep understanding  of multithreaded programming.
     * You would better leave it unspecified.
     */
    RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE,

    /**
     * This flag  has something to do  with our garbage collector.   These days
     * ruby  objects are  "generational".  There  are those  who are  young and
     * those who are old.  Young objects are prone to die; monitored relatively
     * extensively by  the garbage  collector.  OTOH old  objects tend  to live
     * longer.  They  are relatively rarely considered.   This basically works.
     * But there is one  tweak that has to be exercised.   When an elder object
     * has reference(s)  to younger  one(s), that  referenced objects  must not
     * die.  In order  to detect additions of such  references, old generations
     * are  protected by  write  barriers.   It is  a  very  difficult hack  to
     * appropriately  insert  write  barriers everywhere.   This  mechanism  is
     * disabled by default for 3rd party  extensions (they never get aged).  By
     * specifying this  flag you  can enable the  generational feature  to your
     * data structure.  Of  course, you have to manually  insert write barriers
     * then.
     *
     * Using this  flag needs deep understanding  of GC internals, often at the
     * level of source code.  You would better leave it unspecified.
     */
    RUBY_TYPED_WB_PROTECTED     = RUBY_FL_WB_PROTECTED, /* THIS FLAG DEPENDS ON Ruby version */

    /**
     * This flag no longer in use
     */
    RUBY_TYPED_UNUSED           = RUBY_FL_UNUSED6,

    /**
     * This flag determines whether marking and compaction should be carried out
     * using the dmark/dcompact callback functions or whether we should mark
     * declaratively using a list of references defined inside the data struct we're wrapping
     */
    RUBY_TYPED_DECL_MARKING     = RUBY_FL_USER2
};

/**
 * This  is the  struct that  holds necessary  info for  a struct.   It roughly
 * resembles a Ruby level class;  multiple objects can share a ::rb_data_type_t
 * instance.
 */
typedef struct rb_data_type_struct rb_data_type_t;

/** @copydoc rb_data_type_t */
struct rb_data_type_struct {

    /**
     * Name of  structs of this  kind.  This  is used for  diagnostic purposes.
     * This has  to be unique  in the  process, but doesn't  has to be  a valid
     * C/Ruby identifier.
     */
    const char *wrap_struct_name;

    /** Function pointers.  Resembles C++ `vtbl`.*/
    struct {

        /**
         * This function  is called when  the object is experiencing  GC marks.
         * If it  contains references to other  Ruby objects, you need  to mark
         * them also.  Otherwise GC will smash your data.
         *
         * @see      rb_gc_mark()
         * @warning  This  is called  during GC  runs.  Object  allocations are
         *           impossible at that moment (that is why GC runs).
         */
        RUBY_DATA_FUNC dmark;

        /**
         * This function is called when the object is no longer used.  You need
         * to do whatever necessary to avoid memory leaks.
         *
         * @warning  This  is called  during GC  runs.  Object  allocations are
         *           impossible at that moment (that is why GC runs).
         */
        RUBY_DATA_FUNC dfree;

        /**
         * This function is to query the size of the underlying memory regions.
         *
         * @internal
         *
         * This  function  has  only  one   usage,  which  is  form  inside  of
         * `ext/objspace`.
         */
        size_t (*dsize)(const void *);

        /**
         * This  function  is  called  when  the  object  is  relocated.   Like
         * ::rb_data_type_struct::dmark, you need to  update references to Ruby
         * objects inside of your structs.
         *
         * @see      rb_gc_location()
         * @warning  This  is called  during GC  runs.  Object  allocations are
         *           impossible at that moment (that is why GC runs).
         */
        RUBY_DATA_FUNC dcompact;

        /**
         * This field  is reserved for future  extension.  For now, it  must be
         * filled with zeros.
         */
        void *reserved[1]; /* For future extension.
                              This array *must* be filled with ZERO. */
    } function;

    /**
     * Parent  of  this  class.   Sometimes  C  structs  have  inheritance-like
     * relationships.  An example is `struct sockaddr`  and its family.  If you
     * design such things,  make ::rb_data_type_t for each of  them and connect
     * using this field.   Ruby can then transparently cast your  data back and
     * forth when you call #TypedData_Get_Struct().
     *
     * ```CXX
     * struct parent { };
     * static inline const rb_data_type_t parent_type = {
     *     .wrap_struct_name = "parent",
     * };
     *
     * struct child: public parent { };
     * static inline const rb_data_type_t child_type = {
     *     .wrap_struct_name = "child",
     *     .parent = &parent_type,
     * };
     *
     * // This function can take both parent_class and child_class.
     * static inline struct parent *
     * get_parent(VALUE v)
     * {
     *     struct parent *p;
     *     TypedData_Get_Struct(v, parent_type, struct parent, p);
     *     return p;
     * }
     * ```
     */
    const rb_data_type_t *parent;

    /**
     * Type-specific static data.   This area can be used for  any purpose by a
     * programmer who define the type.  Ruby does not manage this at all.
     */
    void *data;        /* This area can be used for any purpose
                          by a programmer who define the type. */

    /**
     * Type-specific behavioural  characteristics.  This is a  bitfield.  It is
     * an EXTREMELY  WISE IDEA to  leave this field  blank.  It is  designed so
     * that setting  zero is the safest  thing to do.   If you risk to  set any
     * bits on, you have to know exactly what you are doing.
     *
     * @internal
     *
     * Why it has to be a ::VALUE?  @shyouhei doesn't understand the design.
     */
    VALUE flags;       /* RUBY_FL_WB_PROTECTED */
};

/**
 * "Typed" user data.   By using this, extension libraries can  wrap a C struct
 * to make it visible from Ruby.  For  instance if you have a `struct timeval`,
 * and you want users to use it,
 *
 * ```CXX
 * static inline const rb_data_type_t timeval_type = {
 *     // Note that unspecified fields are 0-filled by default.
 *     .wrap_struct_name = "timeval",
 *     .function = {
 *         .dmark = nullptr,                 // no need to mark
 *         .dfree = RUBY_TYPED_DEFAULT_FREE, // use ruby_xfree()
 *         .dsize = [](auto) {
 *             return sizeof(struct timeval);
 *         },
 *     },
 * };
 *
 * extern "C" void
 * Init_timeval(void)
 * {
 *     auto klass = rb_define_class("YourName", rb_cObject);
 *
 *     rb_define_alloc_func(klass, [](auto klass) {
 *         struct timeval *t;
 *         auto ret = TypedData_Make_Struct(
 *            klass, struct timeval, &timeval_type, t);
 *
 *         if (auto i = gettimeofday(t, nullptr); i == -1) {
 *             rb_sys_fail("gettimeofday(3)");
 *         }
 *         else {
 *             return ret;
 *         }
 *     });
 * }
 * ```
 */
struct RTypedData {

    /** The part that all ruby objects have in common. */
    struct RBasic basic;

    /**
     * This field  stores various  information about how  Ruby should  handle a
     * data.   This roughly  resembles a  Ruby level  class (apart  from method
     * definition etc.)
     */
    const rb_data_type_t *const type;

    /**
     * This has to be always 1.
     *
     * @internal
     */
    const VALUE typed_flag;

    /** Pointer to the actual C level struct that you want to wrap. */
    void *data;
};

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_NONNULL((3))
/**
 * This is the primitive way to wrap an existing C struct into ::RTypedData.
 *
 * @param[in]  klass          Ruby level class of the returning object.
 * @param[in]  datap          Pointer to the target C struct.
 * @param[in]  type           The characteristics of the passed data.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     An allocated object that wraps `datap`.
 */
VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type);

/**
 * Identical  to rb_data_typed_object_wrap(),  except it  allocates a  new data
 * region internally instead of taking an existing one.  The allocation is done
 * using ruby_calloc().  Hence it makes  no sense for `type->function.dfree` to
 * be anything other than ::RUBY_TYPED_DEFAULT_FREE.
 *
 * @param[in]  klass          Ruby level class of the returning object.
 * @param[in]  size           Requested size of memory to allocate.
 * @param[in]  type           The characteristics of the passed data.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     An allocated object that wraps a new `size` byte region.
 */
VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);

/**
 * Checks for the domestic relationship between the two.
 *
 * @param[in]  child   A data type supposed to be a child of `parent`.
 * @param[in]  parent  A data type supposed to be a parent of `child`.
 * @retval     true    `child` is a descendent of `parent`.
 * @retval     false   Otherwise.
 *
 * @internal
 *
 * You can path NULL to both arguments, don't know what that means though.
 */
int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);

/**
 * Checks if the given object is of given kind.
 *
 * @param[in]  obj        An instance of ::RTypedData.
 * @param[in]  data_type  Expected data type of `obj`.
 * @retval     true       `obj` is of `data_type`.
 * @retval     false      Otherwise.
 */
int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);

/**
 * Identical to rb_typeddata_is_kind_of(), except  it raises exceptions instead
 * of returning false.
 *
 * @param[in]  obj            An instance of ::RTypedData.
 * @param[in]  data_type      Expected data type of `obj`.
 * @exception  rb_eTypeError  obj is not of `data_type`.
 * @return     Unwrapped C struct that `obj` holds.
 * @post       Upon successful return `obj`'s type is guaranteed `data_type`.
 */
void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
RBIMPL_SYMBOL_EXPORT_END()

/**
 * Converts sval, a pointer to your struct, into a Ruby object.
 *
 * @param      klass          A ruby level class.
 * @param      data_type      The type of `sval`.
 * @param      sval           A pointer to your struct.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     A created Ruby object.
 */
#define TypedData_Wrap_Struct(klass,data_type,sval)\
  rb_data_typed_object_wrap((klass),(sval),(data_type))

/**
 * @private
 *
 * This is  an implementation  detail of #TypedData_Make_Struct.   People don't
 * use it directly.
 *
 * @param  result     Variable name of created Ruby object.
 * @param  klass      Ruby level class of the object.
 * @param  type       Type name of the C struct.
 * @param  size       Size of the C struct.
 * @param  data_type  The data type describing `type`.
 * @param  sval       Variable name of created C struct.
 */
#define TypedData_Make_Struct0(result, klass, type, size, data_type, sval) \
    VALUE result = rb_data_typed_object_zalloc(klass, size, data_type);    \
    (sval) = (type *)RTYPEDDATA_GET_DATA(result); \
    RBIMPL_CAST(/*suppress unused variable warnings*/(void)(sval))

/**
 * Identical to #TypedData_Wrap_Struct,  except it allocates a  new data region
 * internally instead of taking an existing  one.  The allocation is done using
 * ruby_calloc().  Hence  it makes no sense  for `data_type->function.dfree` to
 * be anything other than ::RUBY_TYPED_DEFAULT_FREE.
 *
 * @param      klass          Ruby level class of the object.
 * @param      type           Type name of the C struct.
 * @param      data_type      The data type describing `type`.
 * @param      sval           Variable name of created C struct.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     A created Ruby object.
 */
#ifdef HAVE_STMT_AND_DECL_IN_EXPR
#define TypedData_Make_Struct(klass, type, data_type, sval) \
    RB_GNUC_EXTENSION({         \
        TypedData_Make_Struct0( \
            data_struct_obj,    \
            klass,              \
            type,               \
            sizeof(type),       \
            data_type,          \
            sval);              \
        data_struct_obj;        \
    })
#else
#define TypedData_Make_Struct(klass, type, data_type, sval) \
    rb_data_typed_object_make(        \
        (klass),                      \
        (data_type),                  \
        RBIMPL_CAST((void **)&(sval)), \
        sizeof(type))
#endif

/**
 * Obtains a C struct from inside of a wrapper Ruby object.
 *
 * @param      obj            An instance of ::RTypedData.
 * @param      type           Type name of the C struct.
 * @param      data_type      The data type describing `type`.
 * @param      sval           Variable name of obtained C struct.
 * @exception  rb_eTypeError  `obj` is not a kind of `data_type`.
 * @return     Unwrapped C struct that `obj` holds.
 */
#define TypedData_Get_Struct(obj,type,data_type,sval) \
    ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))

static inline bool
RTYPEDDATA_EMBEDDED_P(VALUE obj)
{
#if RUBY_DEBUG
    if (RB_UNLIKELY(!RB_TYPE_P(obj, RUBY_T_DATA))) {
        Check_Type(obj, RUBY_T_DATA);
        RBIMPL_UNREACHABLE_RETURN(false);
    }
#endif

    return RTYPEDDATA(obj)->typed_flag & TYPED_DATA_EMBEDDED;
}

static inline void *
RTYPEDDATA_GET_DATA(VALUE obj)
{
#if RUBY_DEBUG
    if (RB_UNLIKELY(!RB_TYPE_P(obj, RUBY_T_DATA))) {
        Check_Type(obj, RUBY_T_DATA);
        RBIMPL_UNREACHABLE_RETURN(false);
    }
#endif

    /* We reuse the data pointer in embedded TypedData. We can't use offsetof
     * since RTypedData a non-POD type in C++. */
    const size_t embedded_typed_data_size = sizeof(struct RTypedData) - sizeof(void *);

    return RTYPEDDATA_EMBEDDED_P(obj) ? (char *)obj + embedded_typed_data_size : RTYPEDDATA(obj)->data;
}

RBIMPL_ATTR_PURE()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * @private
 *
 * This  is an  implementation detail  of  Check_Type().  People  don't use  it
 * directly.
 *
 * @param[in]  obj    Object in question
 * @retval     true   `obj` is an instance of ::RTypedData.
 * @retval     false  `obj` is an instance of ::RData.
 * @pre        `obj` must be a Ruby object of ::RUBY_T_DATA.
 */
static inline bool
rbimpl_rtypeddata_p(VALUE obj)
{
    VALUE typed_flag = RTYPEDDATA(obj)->typed_flag;
    return typed_flag != 0 && typed_flag <= 3;
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks whether the passed object is ::RTypedData or ::RData.
 *
 * @param[in]  obj    Object in question
 * @retval     true   `obj` is an instance of ::RTypedData.
 * @retval     false  `obj` is an instance of ::RData.
 * @pre        `obj` must be a Ruby object of ::RUBY_T_DATA.
 */
static inline bool
RTYPEDDATA_P(VALUE obj)
{
#if RUBY_DEBUG
    if (RB_UNLIKELY(! RB_TYPE_P(obj, RUBY_T_DATA))) {
        Check_Type(obj, RUBY_T_DATA);
        RBIMPL_UNREACHABLE_RETURN(false);
    }
#endif

    return rbimpl_rtypeddata_p(obj);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/* :TODO: can this function be __attribute__((returns_nonnull)) or not? */
/**
 * Queries for the type of given object.
 *
 * @param[in]  obj    Object in question
 * @return     Data type struct that corresponds to `obj`.
 * @pre        `obj` must be an instance of ::RTypedData.
 */
static inline const struct rb_data_type_struct *
RTYPEDDATA_TYPE(VALUE obj)
{
#if RUBY_DEBUG
    if (RB_UNLIKELY(! RTYPEDDATA_P(obj))) {
        rb_unexpected_type(obj, RUBY_T_DATA);
        RBIMPL_UNREACHABLE_RETURN(NULL);
    }
#endif

    return RTYPEDDATA(obj)->type;
}

/**
 * While  we don't  stop  you from  using  this  function, it  seems  to be  an
 * implementation  detail of  #TypedData_Make_Struct, which  is preferred  over
 * this one.
 *
 * @param[in]  klass      Ruby level class of the returning object.
 * @param[in]  type       The data type
 * @param[out] datap      Return pointer.
 * @param[in]  size       Size of the C struct.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     A created Ruby object.
 * @post       `*datap` points to the C struct wrapped by the returned object.
 */
static inline VALUE
rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
{
    TypedData_Make_Struct0(result, klass, void, size, type, *datap);
    return result;
}

RBIMPL_ATTR_DEPRECATED(("by: rb_data_typed_object_wrap"))
/** @deprecated  This function was renamed to rb_data_typed_object_wrap(). */
static inline VALUE
rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
{
    return rb_data_typed_object_wrap(klass, datap, type);
}

#endif /* RBIMPL_RTYPEDDATA_H */
PK*J[SmC�$include/ruby/internal/core/rregexp.hnu�[���#ifndef RBIMPL_RREGEXP_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RREGEXP_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RRegexp.
 */
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/core/rstring.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RRegexp.
 * @return  The passed object casted to ::RRegexp.
 */
#define RREGEXP(obj)     RBIMPL_CAST((struct RRegexp *)(obj))

/**
 * Convenient accessor macro.
 *
 * @param   obj  An object, which is in fact an ::RRegexp.
 * @return  The passed object's pattern buffer.
 */
#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
/** @cond INTERNAL_MACRO */
#define RREGEXP_SRC      RREGEXP_SRC
#define RREGEXP_SRC_PTR  RREGEXP_SRC_PTR
#define RREGEXP_SRC_LEN  RREGEXP_SRC_LEN
#define RREGEXP_SRC_END  RREGEXP_SRC_END
/** @endcond */

struct re_patter_buffer;  /* a.k.a. OnigRegexType, defined in onigmo.h */

/**
 * Ruby's regular expression.   A regexp is compiled into  its own intermediate
 * representation.  This  one holds that  info.  Regexp "match"  operation then
 * executes that IR.
 */
struct RRegexp {

    /** Basic part, including flags and class. */
    struct RBasic basic;

    /**
     * The pattern buffer.   This is a quasi-opaque struct  that holds compiled
     * intermediate representation of the regular expression.
     *
     * @note  Compilation of a regexp could be delayed until actual match.
     */
    struct re_pattern_buffer *ptr;

    /** Source code of this expression. */
    const VALUE src;

    /**
     * Reference count.  A  regexp match can take extraordinarily  long time to
     * run.  Ruby's  regular expression is  heavily extended and not  a regular
     * language any  longer; runs in NP-time  in practice.  Now, Ruby  also has
     * threads and GVL.  In order to prevent long GVL lockup, our regexp engine
     * can release it on occasions.  This means that multiple threads can touch
     * a regular expressions at once.  That  itself is okay.  But their cleanup
     * phase shall wait for all  the concurrent runs, to prevent use-after-free
     * situation.  This field is used to  count such threads that are executing
     * this particular pattern buffer.
     *
     * @warning  Of course, touching this field from extension libraries causes
     *           catastrophic effects.  Just leave it.
     */
    unsigned long usecnt;
};

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Convenient getter function.
 *
 * @param[in]  rexp  The regular expression in question.
 * @return     The source code of the regular expression.
 * @pre        `rexp` must be of ::RRegexp.
 */
static inline VALUE
RREGEXP_SRC(VALUE rexp)
{
    RBIMPL_ASSERT_TYPE(rexp, RUBY_T_REGEXP);
    VALUE ret = RREGEXP(rexp)->src;
    RBIMPL_ASSERT_TYPE(ret, RUBY_T_STRING);
    return ret;
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Convenient getter function.
 *
 * @param[in]  rexp  The regular expression in question.
 * @return     The source code of the regular expression, in C's string.
 * @pre        `rexp` must be of ::RRegexp.
 *
 * @internal
 *
 * It seems nobody uses this function in the wild.  Subject to hide?
 */
static inline char *
RREGEXP_SRC_PTR(VALUE rexp)
{
    return RSTRING_PTR(RREGEXP_SRC(rexp));
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Convenient getter function.
 *
 * @param[in]  rexp  The regular expression in question.
 * @return     The length of the source code of the regular expression.
 * @pre        `rexp` must be of ::RRegexp.
 *
 * @internal
 *
 * It seems nobody uses this function in the wild.  Subject to hide?
 */
static inline long
RREGEXP_SRC_LEN(VALUE rexp)
{
    return RSTRING_LEN(RREGEXP_SRC(rexp));
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Convenient getter function.
 *
 * @param[in]  rexp  The regular expression in question.
 * @return     The end of the source code of the regular expression.
 * @pre        `rexp` must be of ::RRegexp.
 *
 * @internal
 *
 * It seems nobody uses this function in the wild.  Subject to hide?
 */
static inline char *
RREGEXP_SRC_END(VALUE rexp)
{
    return RSTRING_END(RREGEXP_SRC(rexp));
}

#endif /* RBIMPL_RREGEXP_H */
PK*J[]]VV"include/ruby/internal/core/rfile.hnu�[���#ifndef RBIMPL_RFILE_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RFILE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RFile.
 */
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/cast.h"

/* rb_io_t is in ruby/io.h.  The header file has historically not been included
 * into ruby/ruby.h.  We follow that tradition. */
struct rb_io;

/**
 * Ruby's File  and IO.  Ruby's  IO are not  just file descriptors.   They have
 * buffers.   They also  have  encodings.  Various  information are  controlled
 * using this struct.
 */
struct RFile {

    /** Basic part, including flags and class. */
    struct RBasic basic;

    /** IO's specific fields. */
    struct rb_io *fptr;
};

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RFile.
 * @return  The passed object casted to ::RFile.
 */
#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj))
#endif /* RBIMPL_RFILE_H */
PK*J[8R�BB#include/ruby/internal/core/rmatch.hnu�[���#ifndef RBIMPL_RMATCH_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RMATCH_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RMatch.
 */
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/assert.h"

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RMatch.
 * @return  The passed object casted to ::RMatch.
 */
#define RMATCH(obj) RBIMPL_CAST((struct RMatch *)(obj))
/** @cond INTERNAL_MACRO */
#define RMATCH_REGS RMATCH_REGS
/** @endcond */

struct re_patter_buffer; /* a.k.a. OnigRegexType, defined in onigmo.h */
struct re_registers;     /* Also in onigmo.h */

/**
 * @old{re_pattern_buffer}
 *
 * @internal
 *
 * @shyouhei wonders: is anyone actively using this typedef ...?
 */
typedef struct re_pattern_buffer Regexp;

/**
 * Represents the  region of a  capture group.   This is basically  for caching
 * purpose.  re_registers have similar concepts  (`beg` and `end`) but they are
 * in `ptrdiff_t*`.  In order for  us to implement `MatchData#offset` that info
 * has to  be converted to  offset integers.  This is  the struct to  hold such
 * things.
 *
 * @internal
 *
 * But why on earth it has to be visible from extension libraries?
 */
struct rmatch_offset {
    long beg; /**< Beginning of a group. */
    long end; /**< End of a group. */
};

/** Represents a match. */
struct rb_matchext_struct {
    /**
     * "Registers"  of a  match.   This  is a  quasi-opaque  struct that  holds
     * execution result of a match.  Roughly resembles `&~`.
     */
    struct re_registers regs;

    /** Capture group offsets, in C array. */
    struct rmatch_offset *char_offset;

    /** Number of ::rmatch_offset that ::rmatch::char_offset holds. */
    int char_offset_num_allocated;
};

typedef struct rb_matchext_struct rb_matchext_t;

/**
 * Regular expression  execution context.  When a  regular expression "matches"
 * to a string, it generates capture  groups etc.  This struct holds that info.
 * Visible from Ruby as an instance of `MatchData`.
 *
 * @note  There is  no way  for extension libraries  to manually  generate this
 *        struct except by actually exercising the match operation of a regular
 *        expression.
 */
struct RMatch {

    /** Basic part, including flags and class. */
    struct RBasic basic;

    /**
     * The target string that the match was made against.
     */
    VALUE str;

    /**
     * The expression of this match.
     */
    VALUE regexp;  /* RRegexp */
};

#define RMATCH_EXT(m) ((rb_matchext_t *)((char *)(m) + sizeof(struct RMatch)))

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the raw ::re_registers.
 *
 * @param[in]  match  A match object
 * @pre        `match` must be of ::RMatch.
 * @return     Its execution result.
 * @note       Good.  So you  are aware of the fact that  it could return NULL.
 *             Yes.  It  actually does.  This  is a really bizarre  thing.  The
 *             situation  is about  `String#gsub`  and its  family.  They  take
 *             strings as  arguments, like `"foo".sub("bar", "baz")`.   On such
 *             situations,  in  order  to optimise  memory  allocations,  these
 *             methods do  not involve regular  expressions at all.   They just
 *             sequentially scan  the receiver.  Okay.  The  story begins here.
 *             Even when  they do  not kick  our regexp  engine, there  must be
 *             backref objects e.g. `$&`.  But how?  You know what?  Ruby fakes
 *             them.  It  allocates an empty  ::RMatch and behaves as  if there
 *             were  execution   contexts.   In  reality  there   weren't.   No
 *             ::re_registers are  allocated then.   There is  no way  for this
 *             function but  to return NULL  for those fake ::RMatch.   This is
 *             the reason for the nullability of this function.
 */
static inline struct re_registers *
RMATCH_REGS(VALUE match)
{
    RBIMPL_ASSERT_TYPE(match, RUBY_T_MATCH);
    return &RMATCH_EXT(match)->regs;
}

#endif /* RBIMPL_RMATCH_H */
PK*J[�Y��
�
#include/ruby/internal/core/rclass.hnu�[���#ifndef RBIMPL_RCLASS_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RCLASS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate struct RClass.
 * @note       The struct RClass itself is opaque.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/cast.h"

/** @cond INTERNAL_MACRO */
#define RMODULE_IS_REFINEMENT            RMODULE_IS_REFINEMENT
/** @endcond */

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an RClass.
 * @return  The passed object casted to RClass.
 */
#define RCLASS(obj)  RBIMPL_CAST((struct RClass *)(obj))

/** @alias{RCLASS} */
#define RMODULE      RCLASS

/** @alias{rb_class_get_superclass} */
#define RCLASS_SUPER rb_class_get_superclass

/**
 * @private
 *
 * Bits that you can set to ::RBasic::flags.
 *
 * @internal
 *
 * Why is it here, given RClass itself is not?
 */
enum ruby_rmodule_flags {
    /**
     * This flag has something to do  with refinements.  A module created using
     * rb_mod_refine()  has this  flag set.   This  is the  bit which  controls
     * difference between normal inclusion versus refinements.
     */
    RMODULE_IS_REFINEMENT            = RUBY_FL_USER3
};

struct RClass; /* Opaque, declared here for RCLASS() macro. */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * Returns the superclass of a class.
 * @param[in]  klass        An object of RClass.
 * @retval     RUBY_Qfalse  `klass` has no super class.
 * @retval     otherwise    Raw superclass of `klass`
 * @see        rb_class_superclass
 *
 * ### Q&A ###
 *
 * - Q: How can a class have no super class?
 *
 * - A: `klass` could be a module.  Or it could be ::rb_cBasicObject.
 *
 * - Q: What do you mean by "raw" superclass?
 *
 * - A: This  is a  really good  question.  The  answer is  that this  function
 *      returns something  different from what  you would normally  expect.  On
 *      occasions  ruby  inserts  hidden  classes   in  a  hierarchy  of  class
 *      inheritance behind-the-scene.   Such classes are called  "iclass"es and
 *      distinguished  using  ::RUBY_T_ICLASS  in  C  level.   They  are  truly
 *      transparent from Ruby  level but can be accessed from  C, by using this
 *      API.
 */
VALUE rb_class_get_superclass(VALUE klass);
RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_RCLASS_H */
PK*J[H���$$$include/ruby/internal/core/robject.hnu�[���#ifndef RBIMPL_ROBJECT_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ROBJECT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RObject.
 */
#include "ruby/internal/config.h"

#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif

#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RObject.
 * @return  The passed object casted to ::RObject.
 */
#define ROBJECT(obj)          RBIMPL_CAST((struct RObject *)(obj))
/** @cond INTERNAL_MACRO */
#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
#define ROBJECT_EMBED         ROBJECT_EMBED
#define ROBJECT_IV_CAPACITY   ROBJECT_IV_CAPACITY
#define ROBJECT_IVPTR         ROBJECT_IVPTR
/** @endcond */

/**
 * @private
 *
 * Bits that you can set to ::RBasic::flags.
 */
enum ruby_robject_flags {
    /**
     * This flag has  something to do with memory footprint.   If the object is
     * "small"  enough, ruby  tries to  be creative  to abuse  padding bits  of
     * struct ::RObject for storing instance variables.  This flag denotes that
     * situation.
     *
     * @warning  This  bit has  to be  considered read-only.   Setting/clearing
     *           this  bit without  corresponding fix  up must  cause immediate
     *           SEGV.   Also,   internal  structures   of  an   object  change
     *           dynamically  and  transparently  throughout of  its  lifetime.
     *           Don't assume it being persistent.
     *
     * @internal
     *
     * 3rd parties must  not be aware that  there even is more than  one way to
     * store instance variables.  Might better be hidden.
     */
    ROBJECT_EMBED = RUBY_FL_USER1
};

struct st_table;

/**
 * Ruby's ordinal objects.  Unless otherwise  special cased, all predefined and
 * user-defined classes share this struct to hold their instances.
 */
struct RObject {

    /** Basic part, including flags and class. */
    struct RBasic basic;

    /** Object's specific fields. */
    union {

        /**
         * Object that use  separated memory region for  instance variables use
         * this pattern.
         */
        struct {
            /** Pointer to a C array that holds instance variables. */
            VALUE *ivptr;

            /**
             * This  is a  table that  holds  instance variable  name to  index
             * mapping.  Used when accessing instance variables using names.
             *
             * @internal
             *
             * This is a shortcut for `RCLASS_IV_INDEX_TBL(rb_obj_class(obj))`.
             */
            struct rb_id_table *iv_index_tbl;
        } heap;

        /* Embedded instance variables. When an object is small enough, it
         * uses this area to store the instance variables.
         *
         * This is a length 1 array because:
         *   1. GCC has a bug that does not optimize C flexible array members
         *      (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102452)
         *   2. Zero length arrays are not supported by all compilers
         */
        VALUE ary[1];
    } as;
};

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the instance variables.
 *
 * @param[in]  obj  Object in question.
 * @return     Its instance variables, in C array.
 * @pre        `obj` must be an instance of ::RObject.
 *
 * @internal
 *
 * @shyouhei finds no reason for this to be visible from extension libraries.
 */
static inline VALUE *
ROBJECT_IVPTR(VALUE obj)
{
    RBIMPL_ASSERT_TYPE(obj, RUBY_T_OBJECT);

    struct RObject *const ptr = ROBJECT(obj);

    if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
        return ptr->as.ary;
    }
    else {
        return ptr->as.heap.ivptr;
    }
}

#endif /* RBIMPL_ROBJECT_H */
PK*J[+��4�4#include/ruby/internal/core/rarray.hnu�[���#ifndef RBIMPL_RARRAY_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RARRAY_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RArray.
 */
#include "ruby/internal/arithmetic/long.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/attr/maybe_unused.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/gc.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/assert.h"

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RArray.
 * @return  The passed object casted to ::RArray.
 */
#define RARRAY(obj)            RBIMPL_CAST((struct RArray *)(obj))
/** @cond INTERNAL_MACRO */
#define RARRAY_EMBED_FLAG      RARRAY_EMBED_FLAG
#define RARRAY_EMBED_LEN_MASK  RARRAY_EMBED_LEN_MASK
#define RARRAY_EMBED_LEN_MAX   RARRAY_EMBED_LEN_MAX
#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
/** @endcond */
#define RARRAY_LEN                 rb_array_len                 /**< @alias{rb_array_len} */
#define RARRAY_CONST_PTR           rb_array_const_ptr           /**< @alias{rb_array_const_ptr} */

/** @cond INTERNAL_MACRO */
#if defined(__fcc__) || defined(__fcc_version) || \
    defined(__FCC__) || defined(__FCC_VERSION)
/* workaround for old version of Fujitsu C Compiler (fcc) */
# define FIX_CONST_VALUE_PTR(x) ((const VALUE *)(x))
#else
# define FIX_CONST_VALUE_PTR(x) (x)
#endif

#define RARRAY_EMBED_LEN   RARRAY_EMBED_LEN
#define RARRAY_LENINT      RARRAY_LENINT
#define RARRAY_ASET        RARRAY_ASET
#define RARRAY_PTR         RARRAY_PTR
/** @endcond */

/**
 * @private
 *
 * Bits that you can set to ::RBasic::flags.
 *
 * @warning  These enums are not the only bits we use for arrays.
 *
 * @internal
 *
 * Unlike  strings, flag  usages for  arrays  are scattered  across the  entire
 * source codes.  @shyouhei doesn't know the complete list.  But what is listed
 * here is at least incomplete.
 */
enum ruby_rarray_flags {
    /* RUBY_FL_USER0 is for ELTS_SHARED */

    /**
     * This flag  has something to do  with memory footprint.  If  the array is
     * "small"  enough, ruby  tries to  be creative  to abuse  padding bits  of
     * struct  ::RArray  for storing  its  contents.   This flag  denotes  that
     * situation.
     *
     * @warning  This  bit has  to be  considered read-only.   Setting/clearing
     *           this  bit without  corresponding fix  up must  cause immediate
     *           SEGV.    Also,  internal   structures  of   an  array   change
     *           dynamically  and  transparently  throughout of  its  lifetime.
     *           Don't assume it being persistent.
     *
     * @internal
     *
     * 3rd parties must  not be aware that  there even is more than  one way to
     * store array elements.  It was a bad idea to expose this to them.
     */
    RARRAY_EMBED_FLAG      = RUBY_FL_USER1,

    /**
     * When an array employs embedded strategy (see ::RARRAY_EMBED_FLAG), these
     * bits  are used  to store  the number  of elements  actually filled  into
     * ::RArray::ary.
     *
     * @internal
     *
     * 3rd parties must  not be aware that  there even is more than  one way to
     * store array elements.  It was a bad idea to expose this to them.
     */
    RARRAY_EMBED_LEN_MASK  = RUBY_FL_USER9 | RUBY_FL_USER8 | RUBY_FL_USER7 | RUBY_FL_USER6 |
                                 RUBY_FL_USER5 | RUBY_FL_USER4 | RUBY_FL_USER3
};

/**
 * This is an enum because GDB wants it (rather than a macro).  People need not
 * bother.
 */
enum ruby_rarray_consts {
    /** Where ::RARRAY_EMBED_LEN_MASK resides. */
    RARRAY_EMBED_LEN_SHIFT = RUBY_FL_USHIFT + 3
};

/** Ruby's array. */
struct RArray {

    /** Basic part, including flags and class. */
    struct RBasic basic;

    /** Array's specific fields. */
    union {

        /**
         * Arrays  that  use separated  memory  region  for elements  use  this
         * pattern.
         */
        struct {

            /** Number of elements of the array. */
            long len;

            /** Auxiliary info. */
            union {

                /**
                 * Capacity of `*ptr`.  A continuous  memory region of at least
                 * `capa` elements is expected to exist at `*ptr`.  This can be
                 * bigger than `len`.
                 */
                long capa;

                /**
                 * Parent  of  the  array.   Nowadays arrays  can  share  their
                 * backend  memory regions  each  other, constructing  gigantic
                 * nest  of objects.   This situation  is called  "shared", and
                 * this is the field to control such properties.
                 */
#if defined(__clang__)      /* <- clang++ is sane */ || \
    !defined(__cplusplus)   /* <- C99 is sane */     || \
    (__cplusplus > 199711L) /* <- C++11 is sane */
                const
#endif
                VALUE shared_root;
            } aux;

            /**
             * Pointer to the C array that holds the elements of the array.  In
             * the old days  each array had dedicated memory  regions.  That is
             * no  longer  true today,  but  there  still  are arrays  of  such
             * properties.  This field could be used to point such things.
             */
            const VALUE *ptr;
        } heap;

        /**
         * Embedded elements.  When an array is short enough, it uses this area
         * to store its elements.  In this  case the length is encoded into the
         * flags.
         */
        /* This is a length 1 array because:
         *   1. GCC has a bug that does not optimize C flexible array members
         *      (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102452)
         *   2. Zero length arrays are not supported by all compilers
         */
        const VALUE ary[1];
    } as;
};

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * @private
 *
 * Declares  a  section of  code  where  raw pointers  are  used.   This is  an
 * implementation detail of #RARRAY_PTR_USE.  People don't use it directly.
 *
 * @param[in]  ary  An object of ::RArray.
 * @return     `ary`'s backend C array.
 */
VALUE *rb_ary_ptr_use_start(VALUE ary);

/**
 * @private
 *
 * Declares an  end of  a section  formerly started  by rb_ary_ptr_use_start().
 * This is  an implementation detail  of #RARRAY_PTR_USE.  People don't  use it
 * directly.
 *
 * @param[in]  a  An object of ::RArray.
 */
void rb_ary_ptr_use_end(VALUE a);

RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Queries the length of the array.
 *
 * @param[in]  ary  Array in question.
 * @return     Its number of elements.
 * @pre        `ary`  must  be  an  instance  of ::RArray,  and  must  has  its
 *             ::RARRAY_EMBED_FLAG flag set.
 *
 * @internal
 *
 * This was a macro  before.  It was inevitable to be  public, since macros are
 * global constructs.   But should it be  forever?  Now that it  is a function,
 * @shyouhei thinks  it could  just be  eliminated, hidden  into implementation
 * details.
 */
static inline long
RARRAY_EMBED_LEN(VALUE ary)
{
    RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY);
    RBIMPL_ASSERT_OR_ASSUME(RB_FL_ANY_RAW(ary, RARRAY_EMBED_FLAG));

    VALUE f = RBASIC(ary)->flags;
    f &= RARRAY_EMBED_LEN_MASK;
    f >>= RARRAY_EMBED_LEN_SHIFT;
    return RBIMPL_CAST((long)f);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
/**
 * Queries the length of the array.
 *
 * @param[in]  a  Array in question.
 * @return     Its number of elements.
 * @pre        `a` must be an instance of ::RArray.
 */
static inline long
rb_array_len(VALUE a)
{
    RBIMPL_ASSERT_TYPE(a, RUBY_T_ARRAY);

    if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
        return RARRAY_EMBED_LEN(a);
    }
    else {
        return RARRAY(a)->as.heap.len;
    }
}

RBIMPL_ATTR_ARTIFICIAL()
/**
 * Identical to rb_array_len(), except it differs for the return type.
 *
 * @param[in]  ary             Array in question.
 * @exception  rb_eRangeError  Too long.
 * @return     Its number of elements.
 * @pre        `ary` must be an instance of ::RArray.
 *
 * @internal
 *
 * This API seems redundant but has actual usages.
 */
static inline int
RARRAY_LENINT(VALUE ary)
{
    return rb_long2int(RARRAY_LEN(ary));
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
/**
 * @private
 *
 * This is  an implementation  detail of  RARRAY_PTR().  People  do not  use it
 * directly.
 *
 * @param[in]  a  An object of ::RArray.
 * @return     Its backend storage.
 */
static inline const VALUE *
rb_array_const_ptr(VALUE a)
{
    RBIMPL_ASSERT_TYPE(a, RUBY_T_ARRAY);

    if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
        return FIX_CONST_VALUE_PTR(RARRAY(a)->as.ary);
    }
    else {
        return FIX_CONST_VALUE_PTR(RARRAY(a)->as.heap.ptr);
    }
}

/**
 * @private
 *
 * This is an  implementation detail of #RARRAY_PTR_USE.  People do  not use it
 * directly.
 */
#define RBIMPL_RARRAY_STMT(ary, var, expr) do {        \
    RBIMPL_ASSERT_TYPE((ary), RUBY_T_ARRAY);                 \
    const VALUE rbimpl_ary = (ary);                          \
    VALUE *var = rb_ary_ptr_use_start(rbimpl_ary); \
    expr;                                                   \
    rb_ary_ptr_use_end(rbimpl_ary);                \
} while (0)

/**
 * Declares a section of code where raw pointers are used.  In case you need to
 * touch the raw C array instead of  polite CAPIs, then that operation shall be
 * wrapped using this macro.
 *
 * ```CXX
 * const auto ary = rb_eval_string("[...]");
 * const auto len = RARRAY_LENINT(ary);
 * const auto symwrite = rb_intern("write");
 *
 * RARRAY_PTR_USE(ary, ptr, {
 *     rb_funcallv(rb_stdout, symwrite, len, ptr);
 * });
 * ```
 *
 * @param  ary       An object of ::RArray.
 * @param  ptr_name  A variable name which points the C array in `expr`.
 * @param  expr      The expression that touches `ptr_name`.
 *
 * @internal
 *
 * For  historical reasons  use  of  this macro  is  not  enforced.  There  are
 * extension libraries in the wild which call RARRAY_PTR() without it.  We want
 * them use it...  Maybe some transition path can be implemented later.
 */
#define RARRAY_PTR_USE(ary, ptr_name, expr)     \
    RBIMPL_RARRAY_STMT(ary, ptr_name, expr)

/**
 * Wild  use of  a  C  pointer.  This  function  accesses  the backend  storage
 * directly.   This is  slower  than  #RARRAY_PTR_USE.  It  exercises
 * extra manoeuvres  to protect our generational  GC.  Use of this  function is
 * considered archaic.  Use a modern way instead.
 *
 * @param[in]  ary  An object of ::RArray.
 * @return     The backend C array.
 *
 * @internal
 *
 * That said...  there are  extension libraries  in the wild  who uses  it.  We
 * cannot but continue supporting.
 */
static inline VALUE *
RARRAY_PTR(VALUE ary)
{
    RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY);

    VALUE tmp = RB_OBJ_WB_UNPROTECT_FOR(ARRAY, ary);
    return RBIMPL_CAST((VALUE *)RARRAY_CONST_PTR(tmp));
}

/**
 * Assigns an object in an array.
 *
 * @param[out]  ary  Destination array object.
 * @param[in]   i    Index of `ary`.
 * @param[in]   v    Arbitrary ruby object.
 * @pre         `ary` must be an instance of ::RArray.
 * @pre         `ary`'s length must be longer than or equal to `i`.
 * @pre         `i` must be greater than or equal to zero.
 * @post        `ary`'s `i`th element is set to `v`.
 */
static inline void
RARRAY_ASET(VALUE ary, long i, VALUE v)
{
    RARRAY_PTR_USE(ary, ptr,
        RB_OBJ_WRITE(ary, &ptr[i], v));
}

/**
 * @deprecated
 *
 * :FIXME: we want to convert RARRAY_AREF into an inline function (to add rooms
 * for more sanity checks).  However there were situations where the address of
 * this macro is taken i.e. &RARRAY_AREF(...).  They cannot be possible if this
 * is not a  macro.  Such usages are abuse, and  we eliminated them internally.
 * However we are afraid  of similar things to remain in  the wild.  This macro
 * remains as  it is due to  that.  If we could  warn such usages we  can set a
 * transition path, but currently no way is found to do so.
 */
#define RARRAY_AREF(a, i) RARRAY_CONST_PTR(a)[i]

#endif /* RBIMPL_RARRAY_H */
PK*J[�5�}��$include/ruby/internal/core/rbignum.hnu�[���#ifndef RBIMPL_RBIGNUM_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RBIGNUM_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Routines to manipulate struct RBignum.
 * @note       The struct RBignum itself is opaque.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/internal/stdbool.h"

#define RBIGNUM_SIGN rb_big_sign /**< @alias{rb_big_sign} */

/** @cond INTERNAL_MACRO */
#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P
#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * The "sign" of a bignum.
 *
 * @param[in]  num  An object of RBignum.
 * @retval     1    It is greater than or equal to zero.
 * @retval     0    It is less than zero.
 *
 * @internal
 *
 * Implementation wise, unlike fixnums (which  are 2's complement), bignums are
 * signed  magnitude  system.   Theoretically  it could  be  possible  to  have
 * negative zero  instances.  But  in reality  there is no  way to  create such
 * thing.  Nobody ever needed that kind of insanity.
 */
int rb_big_sign(VALUE num);
RBIMPL_SYMBOL_EXPORT_END()

/**
 * Checks if the bignum is positive.
 * @param[in]  b      An object of RBignum.
 * @retval     false  `b` is less than zero.
 * @retval     true   Otherwise.
 */
static inline bool
RBIGNUM_POSITIVE_P(VALUE b)
{
    RBIMPL_ASSERT_TYPE(b, RUBY_T_BIGNUM);
    return RBIGNUM_SIGN(b);
}

/**
 * Checks if the bignum is negative.
 * @param[in]  b      An object of RBignum.
 * @retval     true   `b` is less than zero.
 * @retval     false  Otherwise.
 */
static inline bool
RBIGNUM_NEGATIVE_P(VALUE b)
{
    RBIMPL_ASSERT_TYPE(b, RUBY_T_BIGNUM);
    return ! RBIGNUM_POSITIVE_P(b);
}

#endif /* RBIMPL_RBIGNUM_H */
PK*J[�v��^5^5"include/ruby/internal/core/rdata.hnu�[���#ifndef RBIMPL_RDATA_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_RDATA_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines struct ::RData.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/warning.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/core/rbasic.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"
#include "ruby/defines.h"

/** @cond INTERNAL_MACRO */
#ifndef RUBY_UNTYPED_DATA_WARNING
#define RUBY_UNTYPED_DATA_WARNING 1
#endif

#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() \
    RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) \
    RBIMPL_ATTR_DEPRECATED(("by TypedData"))

#define RBIMPL_MACRO_SELECT(x, y) x ## y
#define RUBY_MACRO_SELECT(x, y)   RBIMPL_MACRO_SELECT(x, y)
/** @endcond */

/**
 * Convenient casting macro.
 *
 * @param   obj  An object, which is in fact an ::RData.
 * @return  The passed object casted to ::RData.
 */
#define RDATA(obj)                RBIMPL_CAST((struct RData *)(obj))

/**
 * Convenient getter macro.
 *
 * @param   obj  An object, which is in fact an ::RData.
 * @return  The passed object's ::RData::data field.
 */
#define DATA_PTR(obj)             RDATA(obj)->data

/**
 * This is a value you can set  to ::RData::dfree.  Setting this means the data
 * was allocated using ::ruby_xmalloc() (or variants), and shall be freed using
 * ::ruby_xfree().
 *
 * @warning  Do not  use this  if you  want to use  system malloc,  because the
 *           system  and  Ruby  might  or  might  not  share  the  same  malloc
 *           implementation.
 */
#define RUBY_DEFAULT_FREE         RBIMPL_DATA_FUNC(-1)

/**
 * This is a value you can set  to ::RData::dfree.  Setting this means the data
 * is managed by  someone else, like, statically allocated.  Of  course you are
 * on your own then.
 */
#define RUBY_NEVER_FREE           RBIMPL_DATA_FUNC(0)

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()

/*
#define RUBY_DATA_FUNC(func) ((void (*)(void*))(func))
*/

/**
 * This is  the type of callbacks  registered to ::RData.  The  argument is the
 * `data` field.
 */
typedef void (*RUBY_DATA_FUNC)(void*);

/**
 * @deprecated
 *
 * Old  "untyped"  user  data.   It  has  roughly  the  same  usage  as  struct
 * ::RTypedData, but lacked several features such as support for compaction GC.
 * Use of this struct is not recommended  any longer.  If it is dead necessary,
 * please inform the core devs about your usage.
 *
 * @internal
 *
 * @shyouhei tried to add RBIMPL_ATTR_DEPRECATED for this type but that yielded
 * too many warnings  in the core.  Maybe  we want to retry  later...  Just add
 * deprecated document for now.
 */
struct RData {

    /** Basic part, including flags and class. */
    struct RBasic basic;

    /**
     * This function is called when the object is experiencing GC marks.  If it
     * contains references to  other Ruby objects, you need to  mark them also.
     * Otherwise GC will smash your data.
     *
     * @see      rb_gc_mark()
     * @warning  This  is  called  during  GC  runs.   Object  allocations  are
     *           impossible at that moment (that is why GC runs).
     */
    RUBY_DATA_FUNC dmark;

    /**
     * This function is called when the object  is no longer used.  You need to
     * do whatever necessary to avoid memory leaks.
     *
     * @warning  This  is  called  during  GC  runs.   Object  allocations  are
     *           impossible at that moment (that is why GC runs).
     */
    RUBY_DATA_FUNC dfree;

    /** Pointer to the actual C level struct that you want to wrap. */
    void *data;
};

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * This is the primitive way to wrap an existing C struct into ::RData.
 *
 * @param[in]  klass          Ruby level class of the returning object.
 * @param[in]  datap          Pointer to the target C struct.
 * @param[in]  dmark          Mark function.
 * @param[in]  dfree          Free function.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     An allocated object that wraps `datap`.
 */
VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);

/**
 * Identical to  rb_data_object_wrap(), except it  allocates a new  data region
 * internally instead of taking an existing  one.  The allocation is done using
 * ruby_calloc().   Hence  it  makes  no  sense to  pass  anything  other  than
 * ::RUBY_DEFAULT_FREE to the last argument.
 *
 * @param[in]  klass          Ruby level class of the returning object.
 * @param[in]  size           Requested size of memory to allocate.
 * @param[in]  dmark          Mark function.
 * @param[in]  dfree          Free function.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     An allocated object that wraps a new `size` byte region.
 */
VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);

/**
 * @private
 * Documented in include/ruby/internal/globals.h
 */
RUBY_EXTERN VALUE rb_cObject;
RBIMPL_SYMBOL_EXPORT_END()

/**
 * Converts sval, a pointer to your struct, into a Ruby object.
 *
 * @param      klass          A ruby level class.
 * @param      mark           Mark function.
 * @param      free           Free function.
 * @param      sval           A pointer to your struct.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     A created Ruby object.
 */
#define Data_Wrap_Struct(klass, mark, free, sval) \
    rb_data_object_wrap(                          \
        (klass),                                  \
        (sval),                                   \
        RBIMPL_DATA_FUNC(mark),                    \
        RBIMPL_DATA_FUNC(free))

/**
 * @private
 *
 * This is an implementation detail  of #Data_Make_Struct.  People don't use it
 * directly.
 *
 * @param  result     Variable name of created Ruby object.
 * @param  klass      Ruby level class of the object.
 * @param  type       Type name of the C struct.
 * @param  size       Size of the C struct.
 * @param  mark       Mark function.
 * @param  free       Free function.
 * @param  sval       Variable name of created C struct.
 */
#define Data_Make_Struct0(result, klass, type, size, mark, free, sval)  \
    VALUE result = rb_data_object_zalloc(          \
        (klass),                                   \
        (size),                                    \
        RBIMPL_DATA_FUNC(mark),                     \
        RBIMPL_DATA_FUNC(free));                    \
    (sval) = RBIMPL_CAST((type *)DATA_PTR(result)); \
    RBIMPL_CAST(/*suppress unused variable warnings*/(void)(sval))

/**
 * Identical  to  #Data_Wrap_Struct, except  it  allocates  a new  data  region
 * internally instead of taking an existing  one.  The allocation is done using
 * ruby_calloc().   Hence  it  makes  no  sense to  pass  anything  other  than
 * ::RUBY_DEFAULT_FREE to the `free` argument.
 *
 * @param      klass          Ruby level class of the returning object.
 * @param      type           Type name of the C struct.
 * @param      mark           Mark function.
 * @param      free           Free function.
 * @param      sval           Variable name of created C struct.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     A created Ruby object.
 */
#ifdef HAVE_STMT_AND_DECL_IN_EXPR
#define Data_Make_Struct(klass, type, mark, free, sval) \
    RB_GNUC_EXTENSION({      \
        Data_Make_Struct0(   \
            data_struct_obj, \
            klass,           \
            type,            \
            sizeof(type),    \
            mark,            \
            free,            \
            sval);           \
        data_struct_obj;     \
    })
#else
#define Data_Make_Struct(klass, type, mark, free, sval) \
    rb_data_object_make(              \
        (klass),                      \
        RBIMPL_DATA_FUNC(mark),        \
        RBIMPL_DATA_FUNC(free),        \
        RBIMPL_CAST((void **)&(sval)), \
        sizeof(type))
#endif

/**
 * Obtains a C struct from inside of a wrapper Ruby object.
 *
 * @param      obj            An instance of ::RData.
 * @param      type           Type name of the C struct.
 * @param      sval           Variable name of obtained C struct.
 * @return     Unwrapped C struct that `obj` holds.
 */
#define Data_Get_Struct(obj, type, sval) \
    ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))

RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
/**
 * @private
 *
 * This is an implementation detail of rb_data_object_wrap().  People don't use
 * it directly.
 *
 * @param[in]  klass          Ruby level class of the returning object.
 * @param[in]  ptr            Pointer to the target C struct.
 * @param[in]  mark           Mark function.
 * @param[in]  free           Free function.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     An allocated object that wraps `datap`.
 */
static inline VALUE
rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free)
{
    return rb_data_object_wrap(klass, ptr, mark, free);
}

/**
 * @private
 *
 * This is an  implementation detail of #Data_Get_Struct.  People  don't use it
 * directly.
 *
 * @param[in]  obj  An instance of ::RData.
 * @return     Unwrapped C struct that `obj` holds.
 */
static inline void *
rb_data_object_get(VALUE obj)
{
    Check_Type(obj, RUBY_T_DATA);
    return DATA_PTR(obj);
}

RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
/**
 * @private
 *
 * This is an  implementation detail of #Data_Get_Struct.  People  don't use it
 * directly.
 *
 * @param[in]  obj  An instance of ::RData.
 * @return     Unwrapped C struct that `obj` holds.
 */
static inline void *
rb_data_object_get_warning(VALUE obj)
{
    return rb_data_object_get(obj);
}

/**
 * This is an implementation detail  of #Data_Make_Struct.  People don't use it
 * directly.
 *
 * @param[in]  klass           Ruby level class of the returning object.
 * @param[in]  mark_func       Mark function.
 * @param[in]  free_func       Free function.
 * @param[in]  datap           Variable of created C struct.
 * @param[in]  size            Requested size of allocation.
 * @exception  rb_eTypeError  `klass` is not a class.
 * @exception  rb_eNoMemError  Out of memory.
 * @return     A created Ruby object.
 * @post       `*datap` holds the created C struct.
 */
static inline VALUE
rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
{
    Data_Make_Struct0(result, klass, void, size, mark_func, free_func, *datap);
    return result;
}

RBIMPL_ATTR_DEPRECATED(("by: rb_data_object_wrap"))
/** @deprecated  This function was renamed to rb_data_object_wrap(). */
static inline VALUE
rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
{
    return rb_data_object_wrap(klass, data, dmark, dfree);
}

/** @cond INTERNAL_MACRO */
#define rb_data_object_wrap_0 rb_data_object_wrap
#define rb_data_object_wrap_1 rb_data_object_wrap_warning
#define rb_data_object_wrap_2 rb_data_object_wrap_ /* Used here vvvv */
#define rb_data_object_wrap   RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING)
#define rb_data_object_get_0  rb_data_object_get
#define rb_data_object_get_1  rb_data_object_get_warning
#define rb_data_object_get_2  rb_data_object_get_ /* Used here vvvv */
#define rb_data_object_get    RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING)
#define rb_data_object_make_0 rb_data_object_make
#define rb_data_object_make_1 rb_data_object_make_warning
#define rb_data_object_make_2 rb_data_object_make_ /* Used here vvvv */
#define rb_data_object_make   RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING)
/** @endcond */
#endif /* RBIMPL_RDATA_H */
PK*J[K�EpEpinclude/ruby/internal/gc.hnu�[���#ifndef RBIMPL_GC_H                                  /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_GC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Registering values to the GC.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>                       /* size_t */
#endif

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>                    /* ssize_t */
#endif

#include "ruby/assert.h"
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/maybe_unused.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

#define RUBY_REF_EDGE(s, p) offsetof(s, p)
#define RUBY_REFS_LIST_PTR(l) (RUBY_DATA_FUNC)(uintptr_t)(l)
#define RUBY_REF_END SIZE_MAX
#define RUBY_REFERENCES(t) static const size_t t[]
#define RUBY_REFERENCES_START(t) RUBY_REFERENCES(t) = {
#define RUBY_REFERENCES_END RUBY_REF_END, };

/* gc.c */

RBIMPL_ATTR_COLD()
RBIMPL_ATTR_NORETURN()
/**
 * Triggers out-of-memory error.  If  possible it raises ::rb_eNoMemError.  But
 * because  we are  running out  of  memory that  is not  always doable.   This
 * function tries hard to show something, but ultimately can die silently.
 *
 * @exception  rb_eNoMemError  Raises it if possible.
 */
void rb_memerror(void);

RBIMPL_ATTR_PURE()
/**
 * Queries if the GC is busy.
 *
 * @retval  0  It isn't.
 * @retval  1  It is.
 */
int rb_during_gc(void);

RBIMPL_ATTR_NONNULL((1))
/**
 * Marks  objects between  the two  pointers.  This  is one  of the  GC utility
 * functions    that   you    can    call   when    you    design   your    own
 * ::rb_data_type_struct::dmark.
 *
 * @pre         Continuous memory region  from `start` to `end`  shall be fully
 *              addressable.
 * @param[out]  start  Pointer to an array of objects.
 * @param[out]  end    Pointer that terminates the array of objects.
 * @post        Objects from `start` (included) to `end` (excluded) are marked.
 *
 * @internal
 *
 * `end` can be NULL...  But that just results in no-op.
 */
void rb_gc_mark_locations(const VALUE *start, const VALUE *end);

/**
 * Identical to  rb_mark_hash(), except it marks  only values of the  table and
 * leave  their  associated keys  unmarked.  This  is  one  of the  GC  utility
 * functions    that   you    can    call   when    you    design   your    own
 * ::rb_data_type_struct::dmark.
 *
 * @warning    Of course it can break GC.  Leave it unused if unsure.
 * @param[in]  tbl  A table to mark.
 * @post       Values stored in `tbl` are marked.
 */
void rb_mark_tbl(struct st_table *tbl);

/**
 * Identical    to   rb_mark_tbl(),    except    it    marks   objects    using
 * rb_gc_mark_movable().  This is one of the  GC utility functions that you can
 * call when you design your own ::rb_data_type_struct::dmark.
 *
 * @warning    Of course it can break GC.  Leave it unused if unsure.
 * @param[in]  tbl  A table to mark.
 * @post       Values stored in `tbl` are marked.
 */
void rb_mark_tbl_no_pin(struct st_table *tbl);

/**
 * Identical to  rb_mark_hash(), except  it marks  only keys  of the  table and
 * leave  their associated  values unmarked.   This is  one of  the GC  utility
 * functions    that   you    can    call   when    you    design   your    own
 * ::rb_data_type_struct::dmark.
 *
 * @warning    Of course it can break GC.  Leave it unused if unsure.
 * @param[in]  tbl  A table to mark.
 * @post       Keys stored in `tbl` are marked.
 */
void rb_mark_set(struct st_table *tbl);

/**
 * Marks keys and values  associated inside of the given table.  This is one of
 * the  GC  utility functions  that  you  can call  when  you  design your  own
 * ::rb_data_type_struct::dmark.
 *
 * @param[in]  tbl  A table to mark.
 * @post       Objects stored in `tbl` are marked.
 */
void rb_mark_hash(struct st_table *tbl);

/**
 * Updates  references  inside  of  tables.   After  you  marked  values  using
 * rb_mark_tbl_no_pin(), the  objects inside  of the table  could of  course be
 * moved.  This function is to fixup  those references.  You can call this from
 * your ::rb_data_type_struct::dcompact.
 *
 * @param[out]  ptr  A table that potentially includes moved references.
 * @post        Moved references, if any, are corrected.
 */
void rb_gc_update_tbl_refs(st_table *ptr);

/**
 * Identical  to  rb_gc_mark(),  except  it   allows  the  passed  value  be  a
 * non-object.  For instance  pointers to different type of  memory regions are
 * allowed here.   Such values  are silently  ignored.  This is  one of  the GC
 * utility   functions  that   you  can   call   when  you   design  your   own
 * ::rb_data_type_struct::dmark.
 *
 * @param[out]  obj  A possible object.
 * @post        `obj` is marked, if possible.
 */
void rb_gc_mark_maybe(VALUE obj);

/**
 * Marks an object.  This is one of  the GC utility functions that you can call
 * when you design your own ::rb_data_type_struct::dmark.
 *
 * @param[out]  obj  Arbitrary Ruby object.
 * @post        `obj` is marked.
 */
void rb_gc_mark(VALUE obj);

/**
 * Maybe this  is the only  function provided for  C extensions to  control the
 * pinning of objects, so  let us describe it in detail.   These days Ruby's GC
 * is copying.  As far as an object's physical address is guaranteed unused, it
 * can move  around the object space.   Our GC engine rearranges  these objects
 * after it  reclaims unreachable objects  from our  object space, so  that the
 * space  is   compact  (improves  memory   locality).   This  is   called  the
 * "compaction" phase, and works  well most of the time... as  far as there are
 * no C  extensions.  C  extensions complicate the  scenario because  Ruby core
 * cannot detect  any use  of the  physical address  of an  object inside  of C
 * functions.  In order to prevent  memory corruptions, objects observable from
 * C extensions are "pinned"; they stick to where they are born until they die,
 * just in  case any C  extensions touch their  raw pointers.  This  variant of
 * scheme  is   called  "Mostly-Copying"  garbage  collector.    Authors  of  C
 * extensions,  however,   can  extremely   carefully  write  them   to  become
 * compaction-aware.  To do so avoid referring  to a Ruby object from inside of
 * your struct  in the  first place.   But if  that is  not possible,  use this
 * function  from your  ::rb_data_type_struct::dmark  then.   This way  objects
 * marked using it are  considered movable.  If you chose this  way you have to
 * manually fix up locations of such moved pointers using rb_gc_location().
 *
 * @see  Bartlett,  Joel  F.,  "Compacting Garbage  Collection  with  Ambiguous
 *       Roots",  ACM  SIGPLAN  Lisp  Pointers  Volume  1  Issue  6  pp.  3-12,
 *       April-May-June, 1988. https://doi.org/10.1145/1317224.1317225
 *
 * @param[in]  obj  Object that is movable.
 * @post       Values stored in `tbl` are marked.
 */
void rb_gc_mark_movable(VALUE obj);

/**
 * Finds a new "location" of an object.   An object can be moved on compaction.
 * This function projects  its new abode, or just returns  the passed object if
 * not moved.  This is  one of the GC utility functions that  you can call when
 * you design your own ::rb_data_type_struct::dcompact.
 *
 * @param[in]  obj  An object, possibly already moved to somewhere else.
 * @return     An object, which holds the current contents of former `obj`.
 */
VALUE rb_gc_location(VALUE obj);

/**
 * Triggers a GC process.  This was the only  GC entry point that we had at the
 * beginning.  Over time our GC evolved.  Now what this function does is just a
 * very  simplified  variation  of  the  entire GC  algorithms.   A  series  of
 * procedures kicked by this API is called a "full" GC.
 *
 *   - It immediately scans the entire object space to sort the dead.
 *   - It immediately reclaims any single dead bodies to reuse later.
 *
 * It is worth  noting that the procedures above do  not include evaluations of
 * finalisers.  They run later.
 *
 * @internal
 *
 * Finalisers   are   deferred   until   we   can   handle   interrupts.    See
 * `rb_postponed_job_flush` in vm_trace.c.
 *
 * Of course there are  GC that are not "full".  For instance  this one and the
 * GC  which  runs when  we  are  running out  of  memory  are different.   See
 * `gc_profile_record_flag` defined in gc.c for the kinds of GC.
 *
 * In spite of the name this is not  what everything that a GC can trigger.  As
 * of writing  it seems this  function does  not trigger compaction.   But this
 * might change in future.
 */
void rb_gc(void);

/**
 * Copy&paste an object's finaliser to another.   This is one of the GC utility
 * functions  that you  can call  when you  design your  own `initialize_copy`,
 * `initialize_dup`, `initialize_clone`.
 *
 * @param[out]  dst  Destination object.
 * @param[in]   src  Source object.
 * @post        `dst` and `src` share the same finaliser.
 *
 * @internal
 *
 * But isn't it  easier for you to call super,  and let `Object#initialize_copy`
 * call this function instead?
 */
void rb_gc_copy_finalizer(VALUE dst, VALUE src);

/**
 * (Re-) enables GC.  This makes sense only after you called rb_gc_disable().
 *
 * @retval  RUBY_Qtrue   GC was disabled before.
 * @retval  RUBY_Qfalse  GC was enabled before.
 * @post    GC is enabled.
 *
 * @internal
 *
 * This is  one of  such exceptional  functions that does  not raise  both Ruby
 * exceptions and C++ exceptions.
 */
VALUE rb_gc_enable(void);

/**
 * Disables GC.   This prevents automatic GC  runs when the process  is running
 * out of memory.  Such situations shall result in rb_memerror().  However this
 * does not  prevent users from  manually invoking rb_gc().  That  should work.
 * People  abused this  by disabling  GC  at the  beginning of  an event  loop,
 * process events without GC overheads,  then manually force reclaiming garbage
 * at the bottom of the loop.  However  because our GC is now much smarter than
 * just calling rb_gc(), this technique is proven to be sub-optimal these days.
 * It  is  believed that  there  is  currently  practically  no needs  of  this
 * function.
 *
 * @retval  RUBY_Qtrue   GC was disabled before.
 * @retval  RUBY_Qfalse  GC was enabled before.
 * @post    GC is disabled.
 */
VALUE rb_gc_disable(void);

/**
 * Identical to rb_gc(), except the return value.
 *
 * @return  Always returns ::RUBY_Qnil.
 */
VALUE rb_gc_start(void);

/**
 * Assigns a finaliser for an object.  Each objects can have objects (typically
 * blocks)  that run  immediately  after  that object  dies.   They are  called
 * finalisers of an object.  This function associates a finaliser object with a
 * target object.
 *
 * @note  Note that finalisers run _after_  the object they finalise dies.  You
 *        cannot for instance call its methods.
 * @note  If  your finaliser  references the  object it  finalises that  object
 *        loses any chance to become  a garbage; effectively leaks memory until
 *        the end of the process.
 *
 * @param[in]  obj               Target to finalise.
 * @param[in]  block             Something `call`able.
 * @exception  rb_eRuntimeError  Somehow `obj` cannot have finalisers.
 * @exception  rb_eFrozenError   `obj` is frozen.
 * @exception  rb_eArgError      `block` doesn't respond to `call`.
 * @return     The passed `block`.
 * @post       `block` runs after `obj` dies.
 */
VALUE rb_define_finalizer(VALUE obj, VALUE block);

/**
 * Modifies the object so  that it has no finalisers at  all.  This function is
 * mainly provided for symmetry.  No practical usages can be thought of.
 *
 * @param[out]  obj               Object to clear its finalisers.
 * @exception   rb_eFrozenError  `obj` is frozen.
 * @return      The passed `obj`.
 * @post        `obj` has no finalisers.
 * @note        There is no way to undefine  a specific part of many finalisers
 *              that `obj` could have.  All you can do is to clear them all.
 */
VALUE rb_undefine_finalizer(VALUE obj);

/**
 * Identical to rb_gc_stat(), with "count" parameter.
 *
 * @return  Lifetime total number of runs of GC.
 */
size_t rb_gc_count(void);

/**
 * Obtains various GC  related profiles.  The parameter can be  either a Symbol
 * or a  Hash.  If  a Hash is  passed, it is  filled with  everything currently
 * available.  If a Symbol is passed just that portion is returned.
 *
 * Possible  variations of  keys  you  can pass  here  change  from version  to
 * version.  You can  get the list of  known keys by passing an  empty hash and
 * let it be filled.
 *
 * @param[in,out]  key_or_buf       A Symbol, or a Hash.
 * @exception      rb_eTypeError    Neither Symbol nor Hash.
 * @exception      rb_eFrozenError  Frozen hash is passed.
 * @return         In  case a  Hash  is  passed it  returns  0.  Otherwise  the
 *                 profile value associated with the given key is returned.
 * @post           In case a Hash is passed it is filled with values.
 */
size_t rb_gc_stat(VALUE key_or_buf);

/**
 * Obtains various  info regarding the most  recent GC run.  This  includes for
 * instance the reason  of the GC.  The  parameter can be either a  Symbol or a
 * Hash.   If  a  Hash  is  passed, it  is  filled  with  everything  currently
 * available.  If a Symbol is passed just that portion is returned.
 *
 * Possible  variations of  keys  you  can pass  here  change  from version  to
 * version.  You can  get the list of  known keys by passing an  empty hash and
 * let it be filled.
 *
 * @param[in,out]  key_or_buf       A Symbol, or a Hash.
 * @exception      rb_eTypeError    Neither Symbol nor Hash.
 * @exception      rb_eFrozenError  Frozen hash is passed.
 * @return         In case  a Hash is  passed it returns that  hash.  Otherwise
 *                 the profile value associated with the given key is returned.
 * @post           In case a Hash is passed it is filled with values.
 */
VALUE rb_gc_latest_gc_info(VALUE key_or_buf);

/**
 * Informs that  there are  external memory  usages.  Our GC  runs when  we are
 * running out of memory.  The amount of memory, however, can increase/decrease
 * behind-the-scene.  For  instance DLLs can allocate  memories using `mmap(2)`
 * etc, which  are opaque to  us.  Registering such external  allocations using
 * this function enables  proper detection of how much memories  an object used
 * as a whole.  That will trigger GCs  more often than it would otherwise.  You
 * can  also  pass  negative  numbers  here, to  indicate  that  such  external
 * allocations are gone.
 *
 * @param[in]  diff  Amount of memory increased(+)/decreased(-).
 */
void rb_gc_adjust_memory_usage(ssize_t diff);

/**
 * Inform the garbage  collector that the global or static  variable pointed by
 * `valptr` stores  a live  Ruby object  that should not  be moved.   Note that
 * extensions  should use  this API  on  global constants  instead of  assuming
 * constants defined  in Ruby are  always alive.   Ruby code can  remove global
 * constants.
 *
 * Because this  registration itself has  a possibility  to trigger a  GC, this
 * function  must be  called  before any  GC-able objects  is  assigned to  the
 * address pointed by `valptr`.
 */
void rb_gc_register_address(VALUE *valptr);

/**
 * An alias for `rb_gc_register_address()`.
 */
void rb_global_variable(VALUE *);

/**
 * Inform the garbage collector that a pointer previously passed to
 * `rb_gc_register_address()` no longer points to a live Ruby object.
 */
void rb_gc_unregister_address(VALUE *valptr);

/**
 * Inform the garbage collector that `object` is a live Ruby object that should
 * not be moved.
 *
 * See also: rb_gc_register_address()
 */
void rb_gc_register_mark_object(VALUE object);

RBIMPL_SYMBOL_EXPORT_END()

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#undef USE_RGENGC
#define USE_RGENGC 1

/**
 * @deprecated  This macro seems  broken.  Setting this to  anything other than
 *              zero just doesn't compile.  We need to KonMari.
 */
#ifndef USE_RGENGC_LOGGING_WB_UNPROTECT
# define USE_RGENGC_LOGGING_WB_UNPROTECT 0
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RArray.  It has to be set  at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_ARRAY
# define RGENGC_WB_PROTECTED_ARRAY 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RHash.  It has  to be set at the time  ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_HASH
# define RGENGC_WB_PROTECTED_HASH 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RStruct.  It has to be set at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_STRUCT
# define RGENGC_WB_PROTECTED_STRUCT 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RString.  It has to be set at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_STRING
# define RGENGC_WB_PROTECTED_STRING 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RObject.  It has to be set at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_OBJECT
# define RGENGC_WB_PROTECTED_OBJECT 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RRegexp.  It has to be set at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_REGEXP
# define RGENGC_WB_PROTECTED_REGEXP 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RMatch.  It has to be set at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_MATCH
# define RGENGC_WB_PROTECTED_MATCH 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RClass.  It has to be set  at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_CLASS
# define RGENGC_WB_PROTECTED_CLASS 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RFloat.  It has to be set  at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_FLOAT
# define RGENGC_WB_PROTECTED_FLOAT 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RComplex.   It has  to be  set at  the time  ruby itself  compiles.
 * Makes no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_COMPLEX
# define RGENGC_WB_PROTECTED_COMPLEX 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RRational.  It  has to  be set  at the  time ruby  itself compiles.
 * Makes no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_RATIONAL
# define RGENGC_WB_PROTECTED_RATIONAL 1
#endif

/**
 * @private
 *
 * This  is   a  compile-time   flag  to   enable/disable  write   barrier  for
 * struct ::RBignum.  It has to be set at the time ruby itself compiles.  Makes
 * no sense for 3rd parties.
 */
#ifndef RGENGC_WB_PROTECTED_BIGNUM
# define RGENGC_WB_PROTECTED_BIGNUM 1
#endif

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 *
 * @internal
 *
 * @shyouhei doesn't think anybody uses this right now.
 */
#ifndef RGENGC_WB_PROTECTED_NODE_CREF
# define RGENGC_WB_PROTECTED_NODE_CREF 1
#endif

/**
 * @defgroup rgengc Write barrier (WB) interfaces:
 *
 * @note The following  core interfaces can  be changed in the  future.  Please
 *       catch up if you want to insert WB into C-extensions correctly.
 *
 * @{
 */

/**
 * Declaration of a "back" pointer.  This  is a write barrier for new reference
 * from  "old"  generation  to  "young" generation.   It  writes  `young`  into
 * `*slot`, which is a pointer inside of `old`.
 *
 * @param[in]   old    An old object.
 * @param[in]   slot   A pointer inside of `old`.
 * @param[out]  young  A young object.
 */
#define RB_OBJ_WRITE(old, slot, young) \
    RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))

/**
 * Identical to #RB_OBJ_WRITE(), except it doesn't write any values, but only a
 * WB declaration.   `oldv` is  replaced value  with `b`  (not used  in current
 * Ruby).
 *
 * @param[in]   old    An old object.
 * @param[in]   oldv   An object previously stored inside of `old`.
 * @param[out]  young  A young object.
 */
#define RB_OBJ_WRITTEN(old, oldv, young) \
    RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
/** @} */

#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW /**< @old{RB_OBJ_PROMOTED_RAW} */
#define OBJ_PROMOTED     RB_OBJ_PROMOTED     /**< @old{RB_OBJ_PROMOTED} */
#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT /**< @old{RB_OBJ_WB_UNPROTECT} */

/**
 * Asserts that the passed object is  not fenced by write barriers.  Objects of
 * such  property do  not contribute  to  generational GCs.   They are  scanned
 * always.
 *
 * @param[out]  x  An object that would not be protected by the barrier.
 */
#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)

/**
 * Identical  to #RB_OBJ_WB_UNPROTECT(),  except it  can also  assert that  the
 * given object is of given type.
 *
 * @param[in]   type  One of `ARRAY`, `STRING`, etc.
 * @param[out]  obj   An object of `type` that would not be protected.
 *
 * @internal
 *
 * @shyouhei doesn't understand why this has to be visible from extensions.
 */
#define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \
    (RGENGC_WB_PROTECTED_##type ? OBJ_WB_UNPROTECT(obj) : obj)

/**
 * @private
 *
 * This is an implementation detail of rb_obj_wb_unprotect().  People don't use
 * it directly.
 */
#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging

/** @cond INTERNAL_MACRO */
#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
#define RB_OBJ_PROMOTED     RB_OBJ_PROMOTED
/** @endcond */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
 * This  is  the  implementation  of  #RB_OBJ_WRITE().   People  don't  use  it
 * directly.
 *
 * @param[in]   old    An object that points to `young`.
 * @param[out]  young  An object that is referenced from `old`.
 */
void rb_gc_writebarrier(VALUE old, VALUE young);

/**
 * This is the  implementation of #RB_OBJ_WB_UNPROTECT().  People  don't use it
 * directly.
 *
 * @param[out] obj  An object that does not participate in WB.
 */
void rb_gc_writebarrier_unprotect(VALUE obj);

#if USE_RGENGC_LOGGING_WB_UNPROTECT
/**
 * @private
 *
 * This  is  the   implementation  of  #RGENGC_LOGGING_WB_UNPROTECT().   People
 * don't use it directly.
 *
 * @param[in]  objptr    Don't  know why  this  is  a pointer  to  void but  in
 *                       reality this is  a pointer to an object  that is about
 *                       to be un-protected.
 * @param[in]  filename  Pass C's `__FILE__` here.
 * @param[in]  line      Pass C's `__LINE__` here.
 */
void rb_gc_unprotect_logging(void *objptr, const char *filename, int line);
#endif

RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * This  is the  implementation  of #RB_OBJ_PROMOTED().   People  don't use  it
 * directly.
 *
 * @param[in]  obj    An object to query.
 * @retval     true   The object is "promoted".
 * @retval     false  The object is young.  Have not experienced GC at all.
 */
static inline bool
RB_OBJ_PROMOTED_RAW(VALUE obj)
{
    RBIMPL_ASSERT_OR_ASSUME(RB_FL_ABLE(obj));
    return RB_FL_ANY_RAW(obj,  RUBY_FL_PROMOTED);
}

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Tests if the object is "promoted" -- that is, whether the object experienced
 * one or more GC marks.
 *
 * @param[in]  obj    An object to query.
 * @retval     true   The object is "promoted".
 * @retval     false  The object is young.  Have not experienced GC at all.
 * @note       Hello, is anyone actively calling this function?  @shyouhei have
 *             never seen  any actual usages  outside of the  GC implementation
 *             itself.
 */
static inline bool
RB_OBJ_PROMOTED(VALUE obj)
{
    if (! RB_FL_ABLE(obj)) {
        return false;
    }
    else {
        return RB_OBJ_PROMOTED_RAW(obj);
    }
}

/**
 * This is the  implementation of #RB_OBJ_WB_UNPROTECT().  People  don't use it
 * directly.
 *
 * @param[out]  x         An object that does not participate in WB.
 * @param[in]   filename  C's `__FILE__` of the caller function.
 * @param[in]   line      C's `__LINE__` of the caller function.
 * @return      x
 */
static inline VALUE
rb_obj_wb_unprotect(
    VALUE x,
    RBIMPL_ATTR_MAYBE_UNUSED()
    const char *filename,
    RBIMPL_ATTR_MAYBE_UNUSED()
    int line)
{
#if USE_RGENGC_LOGGING_WB_UNPROTECT
    RGENGC_LOGGING_WB_UNPROTECT(RBIMPL_CAST((void *)x), filename, line);
#endif
    rb_gc_writebarrier_unprotect(x);
    return x;
}

/**
 * @private
 *
 * This  is  the implementation  of  #RB_OBJ_WRITTEN().   People don't  use  it
 * directly.
 *
 * @param[in]   a         An old object.
 * @param[in]   oldv      An object previously stored inside of `old`.
 * @param[out]  b         A young object.
 * @param[in]   filename  C's `__FILE__` of the caller function.
 * @param[in]   line      C's `__LINE__` of the caller function.
 * @return      a
 */
static inline VALUE
rb_obj_written(
    VALUE a,
    RBIMPL_ATTR_MAYBE_UNUSED()
    VALUE oldv,
    VALUE b,
    RBIMPL_ATTR_MAYBE_UNUSED()
    const char *filename,
    RBIMPL_ATTR_MAYBE_UNUSED()
    int line)
{
#if USE_RGENGC_LOGGING_WB_UNPROTECT
    RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line);
#endif

    if (!RB_SPECIAL_CONST_P(b)) {
        rb_gc_writebarrier(a, b);
    }

    return a;
}

/**
 * @private
 *
 * This  is  the  implementation  of  #RB_OBJ_WRITE().   People  don't  use  it
 * directly.
 *
 * @param[in]   a         An old object.
 * @param[in]   slot      A pointer inside of `old`.
 * @param[out]  b         A young object.
 * @param[in]   filename  C's `__FILE__` of the caller function.
 * @param[in]   line      C's `__LINE__` of the caller function.
 * @return      a
 */
static inline VALUE
rb_obj_write(
    VALUE a, VALUE *slot, VALUE b,
    RBIMPL_ATTR_MAYBE_UNUSED()
    const char *filename,
    RBIMPL_ATTR_MAYBE_UNUSED()
    int line)
{
#ifdef RGENGC_LOGGING_WRITE
    RGENGC_LOGGING_WRITE(a, slot, b, filename, line);
#endif

    *slot = b;

    rb_obj_written(a, RUBY_Qundef /* ignore `oldv' now */, b, filename, line);
    return a;
}

RBIMPL_ATTR_DEPRECATED(("Will be removed soon"))
static inline void rb_gc_force_recycle(VALUE obj){}

#endif /* RBIMPL_GC_H */
PK*J[���I�I!include/ruby/internal/scan_args.hnu�[���#ifndef RBIMPL_SCAN_ARGS_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_SCAN_ARGS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Compile-time static implementation of ::rb_scan_args().
 *
 * This  is a  beast.  It  statically analyses  the argument  spec string,  and
 * expands the assignment of variables into dedicated codes.
 */
#include "ruby/assert.h"
#include "ruby/internal/attr/diagnose_if.h"
#include "ruby/internal/attr/error.h"
#include "ruby/internal/attr/forceinline.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/config.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/has/attribute.h"
#include "ruby/internal/intern/array.h" /* rb_ary_new_from_values */
#include "ruby/internal/intern/error.h" /* rb_error_arity */
#include "ruby/internal/intern/hash.h"  /* rb_hash_dup */
#include "ruby/internal/intern/proc.h"  /* rb_block_proc */
#include "ruby/internal/iterator.h"     /* rb_block_given_p / rb_keyword_given_p */
#include "ruby/internal/static_assert.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value.h"

/**
 * @name Possible values that you should pass to rb_scan_args_kw().
 * @{
 */

/** Same behaviour as rb_scan_args(). */
#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0

/** The final argument should be a hash treated as keywords.*/
#define RB_SCAN_ARGS_KEYWORDS 1

/**
 * Treat a  final argument as  keywords if  it is a  hash, and not  as keywords
 * otherwise.
 */
#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3

/** @} */

/**
 * @name Possible values that you should pass to rb_funcallv_kw().
 * @{
 */

/** Do not pass keywords. */
#define RB_NO_KEYWORDS 0

/** Pass keywords, final argument should be a hash of keywords. */
#define RB_PASS_KEYWORDS 1

/**
 * Pass keywords if current method is called with keywords, useful for argument
 * delegation
 */
#define RB_PASS_CALLED_KEYWORDS !!rb_keyword_given_p()

/** @} */

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_NONNULL((2, 3))
/**
 * Retrieves argument from argc and  argv to given ::VALUE references according
 * to the format string.  The format can be described in ABNF as follows:
 *
 * ```
 * scan-arg-spec  := param-arg-spec [keyword-arg-spec] [block-arg-spec]
 *
 * param-arg-spec        := pre-arg-spec [post-arg-spec] / post-arg-spec /
 *                          pre-opt-post-arg-spec
 * pre-arg-spec          := num-of-leading-mandatory-args
 *                          [num-of-optional-args]
 * post-arg-spec         := sym-for-variable-length-args
 *                          [num-of-trailing-mandatory-args]
 * pre-opt-post-arg-spec := num-of-leading-mandatory-args num-of-optional-args
 *                          num-of-trailing-mandatory-args
 * keyword-arg-spec      := sym-for-keyword-arg
 * block-arg-spec        := sym-for-block-arg
 *
 * num-of-leading-mandatory-args  := DIGIT ; The number of leading mandatory
 *                                         ; arguments
 * num-of-optional-args           := DIGIT ; The number of optional arguments
 * sym-for-variable-length-args   := "*"   ; Indicates that variable length
 *                                         ;  arguments are captured as a ruby
 *                                         ; array
 * num-of-trailing-mandatory-args := DIGIT ; The number of trailing mandatory
 *                                         ; arguments
 * sym-for-keyword-arg            := ":"   ; Indicates that keyword argument
 *                                         ; captured as a hash.
 *                                         ; If keyword arguments are not
 *                                         ; provided, returns nil.
 * sym-for-block-arg              := "&"   ; Indicates that an iterator block
 *                                         ; should be captured if given
 * ```
 *
 * For example, "12" means that the  method requires at least one argument, and
 * at  most receives  three (1+2)  arguments.  So,  the format  string must  be
 * followed by three variable references, which  are to be assigned to captured
 * arguments.  For omitted arguments, variables are set to ::RUBY_Qnil.  `NULL`
 * can be put  in place of a variable reference,  which means the corresponding
 * captured argument(s) should be just dropped.
 *
 * The number of  given arguments, excluding an option hash  or iterator block,
 * is returned.
 *
 * @param[in]   argc          Length of `argv`.
 * @param[in]   argv          Pointer to the arguments to parse.
 * @param[in]   fmt           Format, in the language described above.
 * @param[out]  ...           Variables to fill in.
 * @exception   rb_eFatal     Malformed `fmt`.
 * @exception   rb_eArgError  Arity mismatch.
 * @return      Actually parsed number of given arguments.
 * @post        Each  values  passed to  `argv`  is  filled into  the  variadic
 *              arguments, according to the format.
 */
int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...);

RBIMPL_ATTR_NONNULL((3, 4))
/**
 * Identical to rb_scan_args(), except it also accepts `kw_splat`.
 *
 * @param[in]   kw_splat      How to understand the keyword arguments.
 *   - RB_SCAN_ARGS_PASS_CALLED_KEYWORDS: Same behaviour as rb_scan_args().
 *   - RB_SCAN_ARGS_KEYWORDS:             The final argument is a kwarg.
 *   - RB_SCAN_ARGS_LAST_HASH_KEYWORDS:   The final argument is a kwarg, iff it
 *                                        is a hash.
 * @param[in]   argc          Length of `argv`.
 * @param[in]   argv          Pointer to the arguments to parse.
 * @param[in]   fmt           Format, in the language described above.
 * @param[out]  ...           Variables to fill in.
 * @exception   rb_eFatal     Malformed `fmt`.
 * @exception   rb_eArgError  Arity mismatch.
 * @return      Actually parsed number of given arguments.
 * @post        Each  values  passed to  `argv`  is  filled into  the  variadic
 *              arguments, according to the format.
 */
int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...);

RBIMPL_ATTR_ERROR(("bad scan arg format"))
/**
 * @private
 *
 * This is  an implementation  detail of rb_scan_args().   People don't  use it
 * directly.
 */
void rb_scan_args_bad_format(const char*);

RBIMPL_ATTR_ERROR(("variable argument length doesn't match"))
/**
 * @private
 *
 * This is  an implementation  detail of rb_scan_args().   People don't  use it
 * directly.
 */
void rb_scan_args_length_mismatch(const char*,int);

RBIMPL_SYMBOL_EXPORT_END()

/** @cond INTERNAL_MACRO */

/* If we could use constexpr the following macros could be inline functions
 * ... but sadly we cannot. */

#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10)

#define rb_scan_args_count_end(fmt, ofs, vari) \
    ((fmt)[ofs] ? -1 : (vari))

#define rb_scan_args_count_block(fmt, ofs, vari) \
    ((fmt)[ofs]!='&' ? \
     rb_scan_args_count_end(fmt, ofs, vari) : \
     rb_scan_args_count_end(fmt, (ofs)+1, (vari)+1))

#define rb_scan_args_count_hash(fmt, ofs, vari) \
    ((fmt)[ofs]!=':' ? \
     rb_scan_args_count_block(fmt, ofs, vari) : \
     rb_scan_args_count_block(fmt, (ofs)+1, (vari)+1))

#define rb_scan_args_count_trail(fmt, ofs, vari) \
    (!rb_scan_args_isdigit((fmt)[ofs]) ? \
     rb_scan_args_count_hash(fmt, ofs, vari) : \
     rb_scan_args_count_hash(fmt, (ofs)+1, (vari)+((fmt)[ofs]-'0')))

#define rb_scan_args_count_var(fmt, ofs, vari) \
    ((fmt)[ofs]!='*' ? \
     rb_scan_args_count_trail(fmt, ofs, vari) : \
     rb_scan_args_count_trail(fmt, (ofs)+1, (vari)+1))

#define rb_scan_args_count_opt(fmt, ofs, vari) \
    (!rb_scan_args_isdigit((fmt)[ofs]) ? \
     rb_scan_args_count_var(fmt, ofs, vari) : \
     rb_scan_args_count_var(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0'))

#define rb_scan_args_count_lead(fmt, ofs, vari) \
    (!rb_scan_args_isdigit((fmt)[ofs]) ? \
     rb_scan_args_count_var(fmt, ofs, vari) : \
     rb_scan_args_count_opt(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0'))

#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)

#if RBIMPL_HAS_ATTRIBUTE(diagnose_if)
# /* Assertions done in the attribute. */
# define rb_scan_args_verify(fmt, varc) RBIMPL_ASSERT_NOTHING
#else
# /* At  one sight  it _seems_  the expressions  below could  be written  using
#  * static  assertions.  The  reality is  no, they  don't.  Because  fmt is  a
#  * string literal,  any operations  against fmt  cannot produce  the "integer
#  * constant  expression"s,  as  defined  in  ISO/IEC  9899:2018  section  6.6
#  * paragraph #6.  Static assertions need such integer constant expressions as
#  * defined in ISO/IEC 9899:2018 section 6.7.10 paragraph #3.
#  *
#  * GCC nonetheless constant-folds this into a no-op, though. */
# define rb_scan_args_verify(fmt, varc) \
    (sizeof(char[1-2*(rb_scan_args_count(fmt)<0)])!=1 ? \
     rb_scan_args_bad_format(fmt) : \
     sizeof(char[1-2*(rb_scan_args_count(fmt)!=(varc))])!=1 ? \
     rb_scan_args_length_mismatch(fmt, varc) : \
     RBIMPL_ASSERT_NOTHING)
#endif

static inline bool
rb_scan_args_keyword_p(int kw_flag, VALUE last)
{
    switch (kw_flag) {
      case RB_SCAN_ARGS_PASS_CALLED_KEYWORDS:
        return !! rb_keyword_given_p();
      case RB_SCAN_ARGS_KEYWORDS:
        return true;
      case RB_SCAN_ARGS_LAST_HASH_KEYWORDS:
        return RB_TYPE_P(last, T_HASH);
      default:
        return false;
    }
}

RBIMPL_ATTR_FORCEINLINE()
static bool
rb_scan_args_lead_p(const char *fmt)
{
    return rb_scan_args_isdigit(fmt[0]);
}

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_n_lead(const char *fmt)
{
    return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0);
}

RBIMPL_ATTR_FORCEINLINE()
static bool
rb_scan_args_opt_p(const char *fmt)
{
    return (rb_scan_args_lead_p(fmt) && rb_scan_args_isdigit(fmt[1]));
}

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_n_opt(const char *fmt)
{
    return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0);
}

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_var_idx(const char *fmt)
{
    return (!rb_scan_args_lead_p(fmt) ? 0 : !rb_scan_args_isdigit(fmt[1]) ? 1 : 2);
}

RBIMPL_ATTR_FORCEINLINE()
static bool
rb_scan_args_f_var(const char *fmt)
{
    return (fmt[rb_scan_args_var_idx(fmt)]=='*');
}

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_trail_idx(const char *fmt)
{
    const int idx = rb_scan_args_var_idx(fmt);
    return idx+(fmt[idx]=='*');
}

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_n_trail(const char *fmt)
{
    const int idx = rb_scan_args_trail_idx(fmt);
    return (rb_scan_args_isdigit(fmt[idx]) ? fmt[idx]-'0' : 0);
}

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_hash_idx(const char *fmt)
{
    const int idx = rb_scan_args_trail_idx(fmt);
    return idx+rb_scan_args_isdigit(fmt[idx]);
}

RBIMPL_ATTR_FORCEINLINE()
static bool
rb_scan_args_f_hash(const char *fmt)
{
    return (fmt[rb_scan_args_hash_idx(fmt)]==':');
}

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_block_idx(const char *fmt)
{
    const int idx = rb_scan_args_hash_idx(fmt);
    return idx+(fmt[idx]==':');
}

RBIMPL_ATTR_FORCEINLINE()
static bool
rb_scan_args_f_block(const char *fmt)
{
    return (fmt[rb_scan_args_block_idx(fmt)]=='&');
}

# if 0
RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_end_idx(const char *fmt)
{
    const int idx = rb_scan_args_block_idx(fmt);
    return idx+(fmt[idx]=='&');
}
# endif

/* NOTE: Use `char *fmt` instead of `const char *fmt` because of clang's bug*/
/* https://bugs.llvm.org/show_bug.cgi?id=38095 */
# define rb_scan_args0(argc, argv, fmt, varc, vars) \
    rb_scan_args_set(RB_SCAN_ARGS_PASS_CALLED_KEYWORDS, argc, argv, \
                     rb_scan_args_n_lead(fmt), \
                     rb_scan_args_n_opt(fmt), \
                     rb_scan_args_n_trail(fmt), \
                     rb_scan_args_f_var(fmt), \
                     rb_scan_args_f_hash(fmt), \
                     rb_scan_args_f_block(fmt), \
                     (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
# define rb_scan_args_kw0(kw_flag, argc, argv, fmt, varc, vars) \
    rb_scan_args_set(kw_flag, argc, argv, \
                     rb_scan_args_n_lead(fmt), \
                     rb_scan_args_n_opt(fmt), \
                     rb_scan_args_n_trail(fmt), \
                     rb_scan_args_f_var(fmt), \
                     rb_scan_args_f_hash(fmt), \
                     rb_scan_args_f_block(fmt), \
                     (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)

RBIMPL_ATTR_FORCEINLINE()
static int
rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
                 int n_lead, int n_opt, int n_trail,
                 bool f_var, bool f_hash, bool f_block,
                 VALUE *vars[], RB_UNUSED_VAR(const char *fmt), RB_UNUSED_VAR(int varc))
    RBIMPL_ATTR_DIAGNOSE_IF(rb_scan_args_count(fmt) <  0,    "bad scan arg format",                    "error")
    RBIMPL_ATTR_DIAGNOSE_IF(rb_scan_args_count(fmt) != varc, "variable argument length doesn't match", "error")
{
    int i, argi = 0, vari = 0;
    VALUE *var, hash = Qnil;
#define rb_scan_args_next_param() vars[vari++]
    const int n_mand = n_lead + n_trail;

    /* capture an option hash - phase 1: pop from the argv */
    if (f_hash && argc > 0) {
        VALUE last = argv[argc - 1];
        if (rb_scan_args_keyword_p(kw_flag, last)) {
            hash = rb_hash_dup(last);
            argc--;
        }
    }

    if (argc < n_mand) {
        goto argc_error;
    }

    /* capture leading mandatory arguments */
    for (i = 0; i < n_lead; i++) {
        var = rb_scan_args_next_param();
        if (var) *var = argv[argi];
        argi++;
    }

    /* capture optional arguments */
    for (i = 0; i < n_opt; i++) {
        var = rb_scan_args_next_param();
        if (argi < argc - n_trail) {
            if (var) *var = argv[argi];
            argi++;
        }
        else {
            if (var) *var = Qnil;
        }
    }

    /* capture variable length arguments */
    if (f_var) {
        int n_var = argc - argi - n_trail;

        var = rb_scan_args_next_param();
        if (0 < n_var) {
            if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
            argi += n_var;
        }
        else {
            if (var) *var = rb_ary_new();
        }
    }

    /* capture trailing mandatory arguments */
    for (i = 0; i < n_trail; i++) {
        var = rb_scan_args_next_param();
        if (var) *var = argv[argi];
        argi++;
    }

    /* capture an option hash - phase 2: assignment */
    if (f_hash) {
        var = rb_scan_args_next_param();
        if (var) *var = hash;
    }

    /* capture iterator block */
    if (f_block) {
        var = rb_scan_args_next_param();
        if (rb_block_given_p()) {
            *var = rb_block_proc();
        }
        else {
            *var = Qnil;
        }
    }

    if (argi == argc) {
        return argc;
    }

  argc_error:
    rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
    UNREACHABLE_RETURN(-1);
#undef rb_scan_args_next_param
}

/** @endcond */

#if defined(__DOXYGEN__)
# /* don't bother */

#elif ! defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
# /* skip */

#elif ! defined(HAVE_VA_ARGS_MACRO)
# /* skip */

#elif ! defined(__OPTIMIZE__)
# /* skip */

#elif defined(HAVE___VA_OPT__)
# define rb_scan_args(argc, argvp, fmt, ...)                  \
    __builtin_choose_expr(                                    \
        __builtin_constant_p(fmt),                            \
        rb_scan_args0(                                        \
            argc, argvp, fmt,                                 \
            (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \
            ((VALUE*[]){__VA_ARGS__})),                       \
        (rb_scan_args)(argc, argvp, fmt __VA_OPT__(, __VA_ARGS__)))
# define rb_scan_args_kw(kw_flag, argc, argvp, fmt, ...)      \
    __builtin_choose_expr(                                    \
        __builtin_constant_p(fmt),                            \
        rb_scan_args_kw0(                                     \
            kw_flag, argc, argvp, fmt,                        \
            (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \
            ((VALUE*[]){__VA_ARGS__})),                       \
        (rb_scan_args_kw)(kw_flag, argc, argvp, fmt __VA_OPT__(, __VA_ARGS__)))

#elif defined(__STRICT_ANSI__)
# /* skip */

#elif defined(__GNUC__)
# define rb_scan_args(argc, argvp, fmt, ...)                  \
    __builtin_choose_expr(                                    \
        __builtin_constant_p(fmt),                            \
        rb_scan_args0(                                        \
            argc, argvp, fmt,                                 \
            (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \
            ((VALUE*[]){__VA_ARGS__})),                       \
        (rb_scan_args)(argc, argvp, fmt, __VA_ARGS__))
# define rb_scan_args_kw(kw_flag, argc, argvp, fmt, ...)      \
    __builtin_choose_expr(                                    \
        __builtin_constant_p(fmt),                            \
        rb_scan_args_kw0(                                     \
            kw_flag, argc, argvp, fmt,                        \
            (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \
            ((VALUE*[]){__VA_ARGS__})),                       \
        (rb_scan_args_kw)(kw_flag, argc, argvp, fmt, __VA_ARGS__ /**/))
#endif

#endif /* RBIMPL_SCAN_ARGS_H */
PK*J[q�c��H�H include/ruby/internal/iterator.hnu�[���#ifndef RBIMPL_ITERATOR_H                            /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ITERATOR_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Block related APIs.
 */
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RB_BLOCK_CALL_FUNC_STRICT 1

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1

/**
 * Shim for block function parameters.  Historically ::rb_block_call_func_t had
 * only two parameters.  Over time it evolved  to have much more than that.  By
 * using this macro you can absorb such API differences.
 *
 * ```CXX
 * // This works since 2.1.0
 * VALUE my_own_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(y, c));
 * ```
 */
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg) \
    VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg

/**
 * This is the  type of a function that the  interpreter expect for C-backended
 * blocks.  Blocks are  often written in Ruby.  But C  extensions might want to
 * have their own blocks.  In order to  do so authors have to create a separate
 * C function of this type, and pass its pointer to rb_block_call().
 *
 * ```CXX
 * VALUE
 * my_own_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(y, c))
 * {
 *     const auto plus = rb_intern("+");
 *     return rb_funcall(c, plus, 1, y);
 * }
 *
 * VALUE
 * my_own_method(VALUE self)
 * {
 *     const auto each = rb_intern("each");
 *     return rb_block_call(self, each, 0, 0, my_own_iterator, self);
 * }
 * ```
 */
typedef VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg));

/**
 * Shorthand type that represents an iterator-written-in-C function pointer.
 */
typedef rb_block_call_func *rb_block_call_func_t;

/**
 * This is a shorthand of calling `obj.each`.
 *
 * @param[in]  obj  The receiver.
 * @return     What `obj.each` returns.
 *
 * @internal
 *
 * Does anyone still need it?  This API  was to use with rb_iterate(), which is
 * marked deprecated (see below).  Old idiom to call an iterator was:
 *
 * ```CXX
 * VALUE recv;
 * VALUE iter_func(ANYARGS);
 * VALUE iter_data;
 * rb_iterate(rb_each, recv, iter_func, iter_data);
 * ```
 */
VALUE rb_each(VALUE obj);

/**
 * Yields the block.  In Ruby there is  a concept called a block.  You can pass
 * one to a  method.  In a method, when  called with a block, you  can yield it
 * using this function.
 *
 * ```CXX
 * VALUE
 * iterate(VALUE self)
 * {
 *     extern int get_n(VALUE);
 *     extern VALUE get_v(VALUE, VALUE);
 *     const auto n = get_n(self);
 *
 *     for (int i=0; i<n; i++) {
 *         auto v = get_v(self, i);
 *
 *         rb_yield(v);
 *     }
 *     return self;
 * }
 * ```
 *
 * @param[in]  val                 Passed to the block.
 * @exception  rb_eLocalJumpError  There is no block given.
 * @return     Evaluated value of the given block.
 */
VALUE rb_yield(VALUE val);

/**
 * Identical to rb_yield(),  except it takes variadic number  of parameters and
 * pass them to the block.
 *
 * @param[in]  n                   Number of parameters.
 * @param[in]  ...                 List of arguments passed to the block.
 * @exception  rb_eLocalJumpError  There is no block given.
 * @return     Evaluated value of the given block.
 */
VALUE rb_yield_values(int n, ...);

/**
 * Identical to rb_yield_values(),  except it takes the parameters as a C array
 * instead of variadic arguments.
 *
 * @param[in]  n                   Number of parameters.
 * @param[in]  argv                List of arguments passed to the block.
 * @exception  rb_eLocalJumpError  There is no block given.
 * @return     Evaluated value of the given block.
 */
VALUE rb_yield_values2(int n, const VALUE *argv);

/**
 * Identical to  rb_yield_values2(), except you  can specify how to  handle the
 * last element of the given array.
 *
 * @param[in]  n                   Number of parameters.
 * @param[in]  argv                List of arguments passed to the block.
 * @param[in]  kw_splat            Handling of keyword parameters:
 *   - RB_NO_KEYWORDS              `ary`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS            `ary`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS     makes no sense here.
 * @exception  rb_eLocalJumpError  There is no block given.
 * @return     Evaluated value of the given block.
 */
VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat);

/**
 * Identical to  rb_yield_values(), except it  splats an array to  generate the
 * list of parameters.
 *
 * @param[in]  ary                 Array to splat.
 * @exception  rb_eLocalJumpError  There is no block given.
 * @return     Evaluated value of the given block.
 */
VALUE rb_yield_splat(VALUE ary);

/**
 * Identical to rb_yield_splat(), except you can specify how to handle the last
 * element of the given array.
 *
 * @param[in]  ary                 Array to splat.
 * @param[in]  kw_splat            Handling of keyword parameters:
 *   - RB_NO_KEYWORDS              `ary`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS            `ary`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS     makes no sense here.
 * @exception  rb_eLocalJumpError  There is no block given.
 * @return     Evaluated value of the given block.
 */
VALUE rb_yield_splat_kw(VALUE ary, int kw_splat);

/**
 * Pass a passed block.
 *
 * Sometimes you  want to "pass" a  block form one method  to another.  Suppose
 * you have this Ruby method `foo`:
 *
 * ```ruby
 * def foo(x, y)
 *   x.open(y) do |*z|
 *     yield(*z)
 *   end
 * end
 * ```
 *
 * And  suppose you  want  to  translate this  into  C.  Then  rb_yield_block()
 * function is usable in this situation.
 *
 * ```CXX
 * VALUE
 * foo_translated_into_C(VALUE self, VALUE x, VALUE y)
 * {
 *     const auto open = rb_intern("open");
 *
 *     return rb_block_call(x, open, 1, &y, rb_yield_block, Qfalse);
 *     //                                   ^^^^^^^^^^^^^^  Here.
 * }
 * ```
 *
 * @see rb_funcall_passing_block
 *
 * @internal
 *
 * @shyouhei  honestly  doesn't understand  why  this  is needed,  given  there
 * already was rb_funcall_passing_block()  at the time it  was implemented.  If
 * somebody knows its raison d'etre, please improve the document :FIXME:
 */
VALUE rb_yield_block(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)); /* rb_block_call_func */

/**
 * Determines if the current method is given a keyword argument.
 *
 * @retval  false  No keyword argument is given.
 * @retval  true   Keyword argument(s) are given.
 * @ingroup defmethod
 */
int rb_keyword_given_p(void);

/**
 * Determines if the current method is given a block.
 *
 * @retval  false  No block is given.
 * @retval  true   A block is given.
 * @ingroup defmethod
 *
 * @internal
 *
 * This function should have returned a bool.   But at the time it was designed
 * the project was entirely written in K&R C.
 */
int rb_block_given_p(void);

/**
 * Declares that the current method needs a block.
 *
 * @exception  rb_eLocalJumpError  No block given.
 * @ingroup    defmethod
 */
void rb_need_block(void);

#ifndef __cplusplus
RBIMPL_ATTR_DEPRECATED(("by: rb_block_call since 1.9"))
#endif
/**
 * Old way to iterate a block.
 *
 * @deprecated     This is an old API.  Use rb_block_call() instead.
 * @warning        The passed  function must at  least once call a  ruby method
 *                 (to handle interrupts etc.)
 * @param[in]      func1  A function that could yield a value.
 * @param[in,out]  data1  Passed to `func1`
 * @param[in]      proc   A function acts as a block.
 * @param[in,out]  data2  Passed to `proc` as the data2 parameter.
 * @return         What `func1` returns.
 */
VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);

#ifdef __cplusplus
namespace ruby {
namespace backward {
/**
 * Old way to iterate a block.
 *
 * @deprecated     This is an old API.  Use rb_block_call() instead.
 * @warning        The passed  function must at  least once call a  ruby method
 *                 (to handle interrupts etc.)
 * @param[in]      iter   A function that could yield a value.
 * @param[in,out]  data1  Passed to `func1`
 * @param[in]      bl     A function acts as a block.
 * @param[in,out]  data2  Passed to `proc` as the data2 parameter.
 * @return         What `func1` returns.
 */
static inline VALUE
rb_iterate_deprecated(VALUE (*iter)(VALUE), VALUE data1, rb_block_call_func_t bl, VALUE data2)
{
    return ::rb_iterate(iter, data1, bl, data2);
}}}

RBIMPL_ATTR_DEPRECATED(("by: rb_block_call since 1.9"))
VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);
#endif

/**
 * Identical to  rb_funcallv(), except it  additionally passes a function  as a
 * block.  When the  method yields, `proc` is called with  the yielded value as
 * its first  argument, and  `data2` as  the second.   Yielded values  would be
 * packed into an array if multiple values are yielded at once.
 *
 * @param[in,out]  obj    Receiver.
 * @param[in]      mid    Method signature.
 * @param[in]      argc   Number of arguments.
 * @param[in]      argv   Arguments passed to `obj.mid`.
 * @param[in]      proc   A function acts as a block.
 * @param[in,out]  data2  Passed to `proc` as the data2 parameter.
 * @return         What `obj.mid` returns.
 */
VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2);

/**
 * Identical to rb_funcallv_kw(), except it additionally passes a function as a
 * block.   It can  also be  seen as  a routine  identical to  rb_block_call(),
 * except it handles keyword-ness of `argv[argc-1]`.
 *
 * @param[in,out]  obj       Receiver.
 * @param[in]      mid       Method signature.
 * @param[in]      argc      Number of arguments including the keywords.
 * @param[in]      argv      Arguments passed to `obj.mid`.
 * @param[in]      proc      A function acts as a block.
 * @param[in,out]  data2     Passed to `proc` as the data2 parameter.
 * @param[in]      kw_splat  Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @return         What `obj.mid` returns.
 */
VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat);

/**
 * Identical  to rb_rescue2(),  except it  does not  take a  list of  exception
 * classes.  This is a shorthand of:
 *
 * ```CXX
 * rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError, (VALUE)0);
 * ```
 *
 * @param[in]      b_proc  A function which potentially raises an exception.
 * @param[in,out]  data1   Passed to `b_proc`.
 * @param[in]      r_proc  A function which rescues an exception in `b_proc`.
 * @param[in,out]  data2   The first argument of `r_proc`.
 * @return         The return value of `b_proc`  if no exception occurs, or the
 *                 return value of `r_proc` otherwise.
 * @see            rb_rescue
 * @see            rb_ensure
 * @see            rb_protect
 * @ingroup        exception
 */
VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);

/**
 * An equivalent of `rescue` clause.
 *
 * First  it calls  the function  `b_proc` with  `data1` as  the argument.   If
 * nothing is thrown the function happily returns the return value of `b_proc`.
 * When `b_proc` raises an exception, and the exception is a kind of one of the
 * given  exception classes,  it  then  calls `r_proc`  with  `data2` and  that
 * exception.  If the exception does not match any of them, it propagates.
 *
 * @param[in]      b_proc  A function which potentially raises an exception.
 * @param[in,out]  data1   Passed to `b_proc`.
 * @param[in]      r_proc  A function which rescues an exception in `b_proc`.
 * @param[in,out]  data2   The first argument of `r_proc`.
 * @param[in]      ...     1 or  more exception classes.  Must be terminated by
 *                         `(VALUE)0`
 * @return         The return value of `b_proc`  if no exception occurs, or the
 *                 return value of `r_proc` otherwise.
 * @see            rb_rescue
 * @see            rb_ensure
 * @see            rb_protect
 * @ingroup        exception
 */
VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...);

/**
 * Identical to  rb_rescue2(), except  it takes  `va_list` instead  of variadic
 * number  of  arguments.   This  is  exposed to  3rd  parties  because  inline
 * functions use it.  Basically you don't have to bother.
 *
 * @param[in]      b_proc  A function which potentially raises an exception.
 * @param[in,out]  data1   Passed to `b_proc`.
 * @param[in]      r_proc  A function which rescues an exception in `b_proc`.
 * @param[in,out]  data2   The first argument of `r_proc`.
 * @param[in]      ap      1 or  more exception classes.  Must be terminated by
 *                         `(VALUE)0`
 * @return         The return value of `b_proc`  if no exception occurs, or the
 *                 return value of `r_proc` otherwise.
 * @see            rb_rescue
 * @see            rb_ensure
 * @see            rb_protect
 * @ingroup        exception
 */
VALUE rb_vrescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, va_list ap);

/**
 * An equivalent to `ensure` clause.   Calls the function `b_proc` with `data1`
 * as the argument, then calls `e_proc` with `data2` when execution terminated.
 *
 * @param[in]      b_proc     A function representing begin clause.
 * @param[in,out]  data1      Passed to `b_proc`.
 * @param[in]      e_proc     A function representing ensure clause.
 * @param[in,out]  data2      Passed to `e_proc`.
 * @retval         RUBY_Qnil  exception occurred inside of `b_proc`.
 * @retval         otherwise  The return value of `b_proc`.
 * @see            rb_rescue
 * @see            rb_rescue2
 * @see            rb_protect
 * @ingroup        exception
 */
VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);

/**
 * Executes the passed block and catches values thrown from inside of it.
 *
 * In case  the block does  not contain any  throw`, this function  returns the
 * value of the last expression evaluated.
 *
 * ```CXX
 * VALUE
 * iter(RB_BLOCK_CALL_FUNC_ARGLIST(yielded, callback))
 * {
 *     return INT2FIX(123);
 * }
 *
 * VALUE
 * method(VALUE self)
 * {
 *     return rb_catch("tag", iter, Qnil); // returns 123
 * }
 * ```
 *
 * In case there do exist `throw`, Ruby searches up its execution context for a
 * `catch` block.   When a matching catch  is found, the block  stops executing
 * and returns that thrown value instead.
 *
 * ```CXX
 * VALUE
 * iter(RB_BLOCK_CALL_FUNC_ARGLIST(yielded, callback))
 * {
 *     rb_throw("tag", 456);
 *     return INT2FIX(123);
 * }
 *
 * VALUE
 * method(VALUE self)
 * {
 *     return rb_catch("tag", iter, Qnil); // returns 456
 * }
 * ```
 *
 * @param[in]      tag   Arbitrary tag string.
 * @param[in]      func  Function pointer that acts as a block.
 * @param[in,out]  data  Extra parameter passed to `func`.
 * @return         Either caught value for `tag`, or the return value of `func`
 *                 if nothing is thrown.
 */
VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data);

/**
 * Identical to rb_catch(), except it catches arbitrary Ruby objects.
 *
 * @param[in]      tag   Arbitrary tag object.
 * @param[in]      func  Function pointer that acts as a block.
 * @param[in,out]  data  Extra parameter passed to `func`.
 * @return         Either caught value for `tag`, or the return value of `func`
 *                 if nothing is thrown.
 */
VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data);

RBIMPL_ATTR_NORETURN()
/**
 * Transfers control to the end of  the active `catch` block waiting for `tag`.
 * Raises  rb_eUncughtThrow if  there is  no `catch`  block for  the tag.   The
 * second  parameter supplies  a  return  value for  the  `catch` block,  which
 * otherwise defaults to ::RUBY_Qnil.  For examples, see rb_catch().
 *
 * @param[in]  tag               Tag string.
 * @param[in]  val               Value to throw.
 * @exception  rb_eUncughtThrow  There is no corresponding `catch` clause.
 * @note       It never returns.
 */
void rb_throw(const char *tag, VALUE val);

RBIMPL_ATTR_NORETURN()
/**
 * Identical to rb_throw(), except it allows  arbitrary Ruby object to become a
 * tag.
 *
 * @param[in]  tag               Arbitrary object.
 * @param[in]  val               Value to throw.
 * @exception  rb_eUncughtThrow  There is no corresponding `catch` clause.
 * @note       It never returns.
 */
void rb_throw_obj(VALUE tag, VALUE val);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_ITERATOR_H */
PK*J[�D��H�Hinclude/ruby/internal/eval.hnu�[���#ifndef RBIMPL_EVAL_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_EVAL_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Declares ::rb_eval_string().
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

RBIMPL_ATTR_NONNULL(())
/**
 * Evaluates the given string.
 *
 * In case  it is called  from within a  C-backended method, the  evaluation is
 * done under  the current binding.  However  there can be no  method.  On such
 * situation this  function evaluates  in an  isolated binding,  like `require`
 * runs in a separate one.
 *
 * `__FILE__`  will  be  `"(eval)"`,  and  `__LINE__`  starts  from  1  in  the
 * evaluation.
 *
 * @param[in]  str            Ruby code to evaluate.
 * @exception  rb_eException  Raises an exception on error.
 * @return     The evaluated result.
 *
 * @internal
 *
 * @shyouhei's old tale about the birth and growth of this function:
 *
 * At  the beginning,  there  was no  rb_eval_string().   @shyouhei heard  that
 * @shugo, author of  Apache httpd's mod_ruby module, requested  @matz for this
 * API.  He wanted a way so that mod_ruby can evaluate ruby scripts one by one,
 * separately, in each different contexts.  So  this function was made.  It was
 * designed to be a global interpreter entry point like ruby_run_node().
 *
 * The  way it  is implemented  however  allows extension  libraries (not  just
 * programs like  Apache httpd) to call  this function.  Because its  name says
 * nothing  about the  initial design,  people  started to  think of  it as  an
 * orthodox  way  to  call  ruby  level  `eval`  method  from  their  extension
 * libraries.  Even our `extension.rdoc` has had a description of this function
 * basically according to this understanding.
 *
 * The old  (mod_ruby like) usage still  works.  But over time,  usages of this
 * function from extension libraries got  popular, while mod_ruby faded out; is
 * no  longer maintained  now.  Devs  decided to  actively support  both.  This
 * function  now auto-detects  how  it is  called, and  switches  how it  works
 * depending on it.
 *
 * @see https://bugs.ruby-lang.org/issues/18780
 */
VALUE rb_eval_string(const char *str);

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical to  rb_eval_string(), except  it avoids potential  global escapes.
 * Such global escapes include exceptions, `throw`, `break`, for example.
 *
 * It first evaluates the given string  as rb_eval_string() does.  If no global
 * escape occurred during the evaluation, it returns the result and `*state` is
 * zero.   Otherwise, it  returns some  undefined  value and  sets `*state`  to
 * nonzero.  If state is `NULL`, it is not set in both cases.
 *
 * @param[in]   str    Ruby code to evaluate.
 * @param[out]  state  State of execution.
 * @return      The  evaluated  result  if  succeeded, an  undefined  value  if
 *              otherwise.
 * @post        `*state` is set to zero if succeeded.  Nonzero otherwise.
 * @warning     You have to clear the error info with `rb_set_errinfo(Qnil)` if
 *              you decide to ignore the caught exception.
 * @see         rb_eval_string
 * @see         rb_protect
 *
 * @internal
 *
 * The "undefined value"  described above is in fact ::RUBY_Qnil  for now.  But
 * @shyouhei doesn't think that we would never change that.
 *
 * Though   not  a   part  of   our  public   API,  `state`   is  in   fact  an
 * enum ruby_tag_type.  You can  see the potential "nonzero"  values by looking
 * at vm_core.h.
 */
VALUE rb_eval_string_protect(const char *str, int *state);

RBIMPL_ATTR_NONNULL((1))
/**
 * Identical to rb_eval_string_protect(), except  it evaluates the given string
 * under  a module  binding in  an isolated  binding.  This  is the  same as  a
 * binding for loaded libraries on `rb_load(something, true)`.
 *
 * @param[in]   str    Ruby code to evaluate.
 * @param[out]  state  State of execution.
 * @return      The  evaluated  result  if  succeeded, an  undefined  value  if
 *              otherwise.
 * @post        `*state` is set to zero if succeeded.  Nonzero otherwise.
 * @warning     You have to clear the error info with `rb_set_errinfo(Qnil)` if
 *              you decide to ignore the caught exception.
 * @see         rb_eval_string
 */
VALUE rb_eval_string_wrap(const char *str, int *state);

/**
 * Calls a method.  Can call both public and private methods.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      n                  Number of arguments that follow.
 * @param[in]      ...                Arbitrary number of method arguments.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcall(VALUE recv, ID mid, int n, ...);

/**
 * Identical  to rb_funcall(),  except it  takes the  method arguments  as a  C
 * array.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv);

/**
 * Identical to  rb_funcallv(), except you can  specify how to handle  the last
 * element of the given array.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @param[in]      kw_splat           Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);

/**
 * Identical  to  rb_funcallv(),  except  it only  takes  public  methods  into
 * account.  This is roughly Ruby's `Object#public_send`.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eNoMethodError  The method is private or protected.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv);

/**
 * Identical to rb_funcallv_public(), except you  can specify how to handle the
 * last element of the given array.  It can also be seen as a routine identical
 * to rb_funcallv_kw(), except it only takes public methods into account.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @param[in]      kw_splat           Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eNoMethodError  The method is private or protected.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);

/**
 * @deprecated   This  is an  old  name of  rb_funcallv().   Provided here  for
 *               backwards compatibility  to 2.x programs (introduced  in 2.1).
 *               It is not a good name.  Please don't use it any longer.
 */
#define rb_funcall2 rb_funcallv

/**
 * @deprecated   This is  an old  name of rb_funcallv_public().   Provided here
 *               for  backwards compatibility  to 2.x  programs (introduced  in
 *               2.1).  It is not a good name.  Please don't use it any longer.
 */
#define rb_funcall3 rb_funcallv_public

/**
 * Identical to rb_funcallv_public(), except you can pass the passed block.
 *
 * Sometimes you want  to "pass" a block parameter form  one method to another.
 * Suppose you have this Ruby method `foo`:
 *
 * ```ruby
 * def foo(x, y, &z)
 *   x.open(y, &z)
 * end
 * ```
 *
 * And    suppose   you    want    to   translate    this    into   C.     Then
 * rb_funcall_passing_block() function is usable in this situation.
 *
 * ```CXX
 * VALUE
 * foo_translated_into_C(VALUE self, VALUE x, VALUE y)
 * {
 *     const auto open = rb_intern("open");
 *
 *     return rb_funcall_passing_block(x, open, 1, &y);
 * }
 * ```
 *
 * @see            rb_yield_block
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eNoMethodError  The method is private or protected.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv);

/**
 * Identical  to rb_funcallv_passing_block(),  except  you can  specify how  to
 * handle  the last  element of  the given  array.  It  can also  be seen  as a
 * routine identical to rb_funcallv_public_kw(), except you can pass the passed
 * block.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @param[in]      kw_splat           Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eNoMethodError  The method is private or protected.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);

/**
 * Identical to  rb_funcallv_public(), except  you can pass  a block.   A block
 * here  basically is  an  instance of  ::rb_cProc.  If  you  want to  exercise
 * `to_proc` conversion, do so before passing it here.  However nil and symbols
 * are special-case allowed.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @param[in]      procval            An instance of Proc, Symbol, or NilClass.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eNoMethodError  The method is private or protected.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 *
 * @internal
 *
 * Implementation-wise, `procval`  is in  fact a  "block handler"  object.  You
 * could also pass an IFUNC (block_handler_ifunc) here to say precise.  --- But
 * AFAIK there is no  3rd party way to even know that  there are objects called
 * IFUNC behind-the-scene.
 */
VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval);

/**
 * Identical to rb_funcallv_with_block(), except you  can specify how to handle
 * the last  element of  the given  array.  It can  also be  seen as  a routine
 * identical to rb_funcallv_public_kw(), except you can pass a block.
 *
 * @param[in,out]  recv               Receiver of the method.
 * @param[in]      mid                Name of the method to call.
 * @param[in]      argc               Number of arguments.
 * @param[in]      argv               Arbitrary number of method arguments.
 * @param[in]      procval            An instance of Proc, Symbol, or NilClass.
 * @param[in]      kw_splat           Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception      rb_eNoMethodError  No such method.
 * @exception      rb_eNoMethodError  The method is private or protected.
 * @exception      rb_eException      Any exceptions happen inside.
 * @return         What the method evaluates to.
 */
VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat);

/**
 * This resembles ruby's `super`.
 *
 * @param[in]  argc               Number of arguments.
 * @param[in]  argv               Arbitrary number of method arguments.
 * @exception  rb_eNoMethodError  No super method are there.
 * @exception  rb_eException      Any exceptions happen inside.
 * @return     What the super method evaluates to.
 */
VALUE rb_call_super(int argc, const VALUE *argv);

/**
 * Identical to rb_call_super(), except you can  specify how to handle the last
 * element of the given array.
 *
 * @param[in]  argc               Number of arguments.
 * @param[in]  argv               Arbitrary number of method arguments.
 * @param[in]  kw_splat           Handling of keyword parameters:
 *   - RB_NO_KEYWORDS           `argv`'s last is not a keyword argument.
 *   - RB_PASS_KEYWORDS         `argv`'s last is a keyword argument.
 *   - RB_PASS_CALLED_KEYWORDS  it depends if there is a passed block.
 * @exception  rb_eNoMethodError  No super method are there.
 * @exception  rb_eException      Any exceptions happen inside.
 * @return     What the super method evaluates to.
 */
VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat);

/**
 * This resembles ruby's `self`.
 *
 * @exception  rb_eRuntimeError  Called from outside of method context.
 * @return     Current receiver.
 */
VALUE rb_current_receiver(void);

RBIMPL_ATTR_NONNULL((2))
/**
 * Keyword argument deconstructor.
 *
 * Retrieves argument values bound to  keywords, which directed by `table` into
 * `values`,  deleting retrieved  entries  from `keyword_hash`  along the  way.
 * First  `required` number  of  IDs  referred by  `table`  are mandatory,  and
 * succeeding `optional`  (`-optional-1` if  `optional` is negative)  number of
 * IDs are  optional.  If a mandatory  key is not contained  in `keyword_hash`,
 * raises ::rb_eArgError.  If an optional key is not present in `keyword_hash`,
 * the  corresponding  element  in  `values`   is  set  to  ::RUBY_Qundef.   If
 * `optional` is negative, rest of `keyword_hash` are ignored, otherwise raises
 * ::rb_eArgError.
 *
 * @warning     Handling keyword arguments in the  C API is less efficient than
 *              handling them  in Ruby.  Consider  using a Ruby  wrapper method
 *              around a non-keyword C function.
 * @see         https://bugs.ruby-lang.org/issues/11339
 * @param[out]  keyword_hash  Target hash to deconstruct.
 * @param[in]   table         List of keywords that you are interested in.
 * @param[in]   required      Number of mandatory keywords.
 * @param[in]   optional      Number of optional keywords (can be negative).
 * @param[out]  values        Buffer to be filled.
 * @exception   rb_eArgError  Absence of a mandatory keyword.
 * @exception   rb_eArgError  Found an unknown keyword.
 * @return      Number of found values that are stored into `values`.
 */
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values);

RBIMPL_ATTR_NONNULL(())
/**
 * Splits a hash into two.
 *
 * Takes  a hash  of various  keys, and  split it  into symbol-keyed  parts and
 * others.   Symbol-keyed part  becomes  the return  value.   What remains  are
 * returned as a new hash object stored at the argument pointer.
 *
 * @param[in,out]  orighash  Pointer to a target hash to split.
 * @return         An extracted keyword hash.
 * @post           Upon  successful return  `orighash` points  to another  hash
 *                 object, whose contents are the remainder of the operation.
 * @note           The argument hash object is not modified.
 */
VALUE rb_extract_keywords(VALUE *orighash);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_EVAL_H */
PK*J[�����include/ruby/internal/event.hnu�[���#ifndef RBIMPL_EVENT_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_EVENT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Debugging and tracing APIs.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif

/* These macros are not enums because they are wider than int.*/

/**
 * @name Traditional set_trace_func events
 *
 * @{
 */
#define RUBY_EVENT_NONE      0x0000 /**< No events. */
#define RUBY_EVENT_LINE      0x0001 /**< Encountered a new line. */
#define RUBY_EVENT_CLASS     0x0002 /**< Encountered a new class. */
#define RUBY_EVENT_END       0x0004 /**< Encountered an end of a class clause. */
#define RUBY_EVENT_CALL      0x0008 /**< A method, written in Ruby, is called. */
#define RUBY_EVENT_RETURN    0x0010 /**< Encountered a `return` statement. */
#define RUBY_EVENT_C_CALL    0x0020 /**< A method, written in C, is called. */
#define RUBY_EVENT_C_RETURN  0x0040 /**< Return from a method, written in C. */
#define RUBY_EVENT_RAISE     0x0080 /**< Encountered a `raise` statement. */
#define RUBY_EVENT_ALL       0x00ff /**< Bitmask of traditional events. */

/** @} */

/**
 * @name TracePoint extended events
 *
 * @{
 */
#define RUBY_EVENT_B_CALL            0x0100 /**< Encountered an `yield` statement. */
#define RUBY_EVENT_B_RETURN          0x0200 /**< Encountered a `next` statement. */
#define RUBY_EVENT_THREAD_BEGIN      0x0400 /**< Encountered a new thread. */
#define RUBY_EVENT_THREAD_END        0x0800 /**< Encountered an end of a thread. */
#define RUBY_EVENT_FIBER_SWITCH      0x1000 /**< Encountered a `Fiber#yield`. */
#define RUBY_EVENT_SCRIPT_COMPILED   0x2000 /**< Encountered an `eval`. */
#define RUBY_EVENT_RESCUE            0x4000 /**< Encountered a `rescue` statement. */
#define RUBY_EVENT_TRACEPOINT_ALL    0xffff /**< Bitmask of extended events. */

/** @} */

/**
 * @name Special events
 *
 * @internal
 *
 * These bits are actually used internally.  See vm_core.h if you are curious.
 *
 * @endinternal
 *
 * @{
 */
#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000 /**< Opaque bits. */

/** @} */

/**
 * @name Internal events
 *
 * @shyouhei's understanding  is that some  of them are visible  from extension
 * libraries because  of `ext/objspace`.   But it  seems that  doesn't describe
 * everything?  The ultimate reason why they are here remains unclear.
 *
 * @{
 */
#define RUBY_INTERNAL_EVENT_SWITCH          0x040000 /**< Thread switched. */
#define RUBY_EVENT_SWITCH                   0x040000 /**< @old{RUBY_INTERNAL_EVENT_SWITCH} */
                                         /* 0x080000 */
#define RUBY_INTERNAL_EVENT_NEWOBJ          0x100000 /**< Object allocated. */
#define RUBY_INTERNAL_EVENT_FREEOBJ         0x200000 /**< Object swept. */
#define RUBY_INTERNAL_EVENT_GC_START        0x400000 /**< GC started. */
#define RUBY_INTERNAL_EVENT_GC_END_MARK     0x800000 /**< GC ended mark phase. */
#define RUBY_INTERNAL_EVENT_GC_END_SWEEP   0x1000000 /**< GC ended sweep phase. */
#define RUBY_INTERNAL_EVENT_GC_ENTER       0x2000000 /**< `gc_enter()` is called. */
#define RUBY_INTERNAL_EVENT_GC_EXIT        0x4000000 /**< `gc_exit()` is called. */
#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK  0x7f00000 /**< Bitmask of GC events. */
#define RUBY_INTERNAL_EVENT_MASK          0xffff0000 /**< Bitmask of internal events. */

/** @} */

/**
 * Represents event(s).  As the name implies events are bit flags.
 */
typedef uint32_t rb_event_flag_t;

/**
 * Type of event hooks.  When an  event happens registered functions are kicked
 * with appropriate parameters.
 *
 * @param[in]  evflag  The kind of event that happened.
 * @param[in]  data    The `data` passed to rb_add_event_hook().
 * @param[in]  self    Current receiver.
 * @param[in]  mid     Name of the current method.
 * @param[in]  klass   Current class.
 */
typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Registers an event hook function.
 *
 * @param[in]  func    A callback.
 * @param[in]  events  A set of events that `func` should run.
 * @param[in]  data    Passed as-is to `func`.
 */
void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);

/**
 * Removes the passed function from the list of event hooks.
 *
 * @param[in]  func  A callback.
 * @return     Number of deleted event hooks.
 * @note       As  multiple  events can  share  the  same  `func` it  is  quite
 *             possible for the return value to become more than one.
 *
 * @internal
 *
 * @shyouhei doesn't know if this is an  Easter egg or an official feature, but
 * you can pass 0 to the argument.  That effectively swipes everything out from
 * the hook list.
 */
int rb_remove_event_hook(rb_event_hook_func_t func);
RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_EVENT_H */
PK*J[{mىinclude/ruby/internal/config.hnu�[���#ifndef RBIMPL_CONFIG_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_CONFIG_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Thin wrapper to ruby/config.h
 */
#include "ruby/config.h"

#ifdef RUBY_EXTCONF_H
# include RUBY_EXTCONF_H
#endif

#include "ruby/internal/compiler_since.h"

#undef  HAVE_PROTOTYPES
#define HAVE_PROTOTYPES 1

#undef  HAVE_STDARG_PROTOTYPES
#define HAVE_STDARG_PROTOTYPES 1

#undef  TOKEN_PASTE
#define TOKEN_PASTE(x,y) x##y

#if defined(__cplusplus)
#/* __builtin_choose_expr and __builtin_types_compatible aren't available
# * on C++.  See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */
# undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
# undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P

/* HAVE_VA_ARGS_MACRO is for C.  C++ situations might be different. */
# undef HAVE_VA_ARGS_MACRO
# if __cplusplus >= 201103L
#  define HAVE_VA_ARGS_MACRO
# elif defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__
#  define HAVE_VA_ARGS_MACRO
# elif defined(__INTEL_CXX11_MODE__)
#  define HAVE_VA_ARGS_MACRO
# elif RBIMPL_COMPILER_SINCE(MSVC, 16, 0, 0)
#  define HAVE_VA_ARGS_MACRO
# else
#  /* NG, not known. */
# endif
#endif

#if RBIMPL_COMPILER_BEFORE(GCC, 4, 9, 0)
# /* See https://bugs.ruby-lang.org/issues/14221 */
# undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
#endif

#if RBIMPL_COMPILER_BEFORE(GCC, 5, 0, 0)
# /* GCC 4.9.2 reportedly has this feature  and is broken.  The function is not
#  * officially documented below.  Seems we should not use it.
#  * https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Other-Builtins.html */
# undef HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN
#endif

#if defined(__SUNPRO_CC)
# /* Oracle  Developer Studio  12.5: GCC compatibility guide  says it  supports
#  * statement expressions.   But to our  knowledge they support  the extension
#  * only for C and not for C++.  Prove  me wrong.  Am happy to support them if
#  * there is a way. */
# undef HAVE_STMT_AND_DECL_IN_EXPR
#endif

#ifndef STRINGIZE0
# define STRINGIZE(expr) STRINGIZE0(expr)
# define STRINGIZE0(expr) #expr
#endif

#ifdef AC_APPLE_UNIVERSAL_BUILD
# undef WORDS_BIGENDIAN
# ifdef __BIG_ENDIAN__
#  define WORDS_BIGENDIAN
# endif
#endif

#ifndef DLEXT_MAXLEN
# define DLEXT_MAXLEN 4
#endif

#ifndef RUBY_PLATFORM
# define RUBY_PLATFORM "unknown-unknown"
#endif

#ifdef UNALIGNED_WORD_ACCESS
# /* Take that. */
#elif defined(__i386)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__i386__)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(_M_IX86)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__x86_64)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__x86_64__)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(_M_AMD64)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__powerpc64__)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__POWERPC__) // __POWERPC__ is defined for ppc and ppc64 on Darwin
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__aarch64__)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__mc68020__)
# define UNALIGNED_WORD_ACCESS 1
#else
# define UNALIGNED_WORD_ACCESS 0
#endif

/* Detection of __VA_OPT__ */
#if ! defined(HAVE_VA_ARGS_MACRO)
# undef HAVE___VA_OPT__

#elif defined(__cplusplus)
# if __cplusplus > 201703L
#  define HAVE___VA_OPT__
# else
#  undef HAVE___VA_OPT__
# endif
#else
# /* Idea taken from: https://stackoverflow.com/a/48045656 */
# define RBIMPL_TEST3(q, w, e, ...) e
# define RBIMPL_TEST2(...)          RBIMPL_TEST3(__VA_OPT__(,),1,0,0)
# define RBIMPL_TEST1()             RBIMPL_TEST2("ruby")
# if RBIMPL_TEST1()
#  define HAVE___VA_OPT__
# else
#  undef HAVE___VA_OPT__
# endif
# undef RBIMPL_TEST1
# undef RBIMPL_TEST2
# undef RBIMPL_TEST3
#endif /* HAVE_VA_ARGS_MACRO */

#endif /* RBIMPL_CONFIG_H */
PK*J[�{��uuinclude/ruby/internal/module.hnu�[���#ifndef RBIMPL_MODULE_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_MODULE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Creation and modification of Ruby modules.
 */
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

/**
 * @defgroup  class  Classes and their hierarchy.
 *
 * @par Terminology
 *   - class: same as in Ruby.
 *   - singleton class: class for a particular object.
 *   - eigenclass: = singleton class
 *   - metaclass: class of a class.  Metaclass is a kind of singleton class.
 *   - metametaclass: class of a metaclass.
 *   - meta^(n)-class: class of a meta^(n-1)-class.
 *   - attached object: A singleton class knows its unique instance.
 *     The instance is called the attached object for the singleton class.
 * @{
 */

RBIMPL_SYMBOL_EXPORT_BEGIN()

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a top-level class.
 *
 * @param[in]  name           Name of the class.
 * @param[in]  super          A class from which the new class will derive.
 * @exception  rb_eTypeError  The constant name `name` is already taken but the
 *                            constant is not a class.
 * @exception  rb_eTypeError  The class  is already  defined but the  class can
 *                            not  be reopened  because its  superclass is  not
 *                            `super`.
 * @exception  rb_eArgError   `super` is NULL.
 * @return     The created class.
 * @post       Top-level constant named `name` refers the returned class.
 * @note       If a class named `name` is already defined and its superclass is
 *             `super`, the function just returns the defined class.
 * @note       The GC does not collect nor move classes returned by this
 *             function. They are immortal.
 *
 * @internal
 *
 * There are classes without names, but you  can't pass NULL here.  You have to
 * use other ways to create one.
 */
VALUE rb_define_class(const char *name, VALUE super);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a top-level module.
 *
 * @param[in]  name           Name of the module.
 * @exception  rb_eTypeError  The constant name `name` is already taken but the
 *                            constant is not a module.
 * @return     The created module.
 * @post       Top-level constant named `name` refers the returned module.
 * @note       The GC does not collect nor move modules returned by this
 *             function. They are immortal.
 *
 * @internal
 *
 * There are modules without names, but you  can't pass NULL here.  You have to
 * use other ways to create one.
 */
VALUE rb_define_module(const char *name);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a class under the namespace of `outer`.
 *
 * @param[out]  outer          A class which contains the new class.
 * @param[in]   name           Name of the new class
 * @param[in]   super          A class from which the new class will derive.
 *                             0 means ::rb_cObject.
 * @exception   rb_eTypeError  The constant  name `name`  is already  taken but
 *                             the constant is not a class.
 * @exception   rb_eTypeError  The class  is already defined but  the class can
 *                             not be  reopened because  its superclass  is not
 *                             `super`.
 * @exception   rb_eArgError   `super` is NULL.
 * @return      The created class.
 * @post        `outer::name` refers the returned class.
 * @note        If a class  named `name` is already defined  and its superclass
 *              is `super`, the function just returns the defined class.
 * @note        The GC does not collect nor move classes returned by this
 *              function. They are immortal.
 */
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a module under the namespace of `outer`.
 *
 * @param[out]  outer          A class which contains the new module.
 * @param[in]   name           Name of the new module
 * @exception   rb_eTypeError  The constant  name `name`  is already  taken but
 *                             the constant is not a class.
 * @return      The created module.
 * @post        `outer::name` refers the returned module.
 * @note        The GC does not collect nor move modules returned by this
 *              function. They are immortal.
 */
VALUE rb_define_module_under(VALUE outer, const char *name);

/**
 * Includes a module to a class.
 *
 * @param[out]  klass         Inclusion destination.
 * @param[in]   module        Inclusion source.
 * @exception   rb_eArgError  Cyclic inclusion.
 *
 * @internal
 *
 * :FIXME: @shyouhei suspects this function  lacks assertion that the arguments
 * being modules...  Could silently SEGV if non-module was passed?
 */
void rb_include_module(VALUE klass, VALUE module);

/**
 * Extend the object with the module.
 *
 * @warning     This    is   the    same    as   `Module#extend_object`,    not
 *              `Object#extend`!  These  two methods are very  similar, but not
 *              identical.  The difference is the hook.  `Module#extend_object`
 *              does not invoke `Module#extended`, while `Object#extend` does.
 * @param[out]  obj  Object to extend.
 * @param[in]   mod  Module of extension.
 */
void rb_extend_object(VALUE obj, VALUE mod);

/**
 * Identical to rb_include_module(), except it  "prepends" the passed module to
 * the klass,  instead of  includes.  This affects  how `super`  resolves.  For
 * instance:
 *
 * ```ruby
 * class  Q;                def foo;      "<q/>"       end end
 * module W;                def foo; "<w>#{super}</w>" end end
 * class  E < Q; include W; def foo; "<e>#{super}</e>" end end
 * class  R < Q; prepend W; def foo; "<r>#{super}</r>" end end
 *
 * E.new.foo # => "<e><w><q/></w></e>"
 * r.new.foo # => "<W><r><q/></r></w>"
 * ```
 *
 * @param[out]  klass         Target class to modify.
 * @param[in]   module        Module to prepend.
 * @exception   rb_eArgError  Cyclic inclusion.
 */
void rb_prepend_module(VALUE klass, VALUE module);

/** @} */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_MODULE_H */
PK*J[�PYB��#include/ruby/internal/has/builtin.hnu�[���#ifndef RBIMPL_HAS_BUILTIN_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_BUILTIN_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_BUILTIN.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/compiler_since.h"

#if defined(__has_builtin)
# if RBIMPL_COMPILER_IS(Intel)
#  /* :TODO: Intel  C Compiler  has __has_builtin (since  19.1 maybe?),  and is
#   * reportedly  broken.  We  have to  skip them.   However the  situation can
#   * change.  They might improve someday.  We need to revisit here later. */
# elif RBIMPL_COMPILER_IS(GCC) && ! __has_builtin(__builtin_alloca)
#  /* FreeBSD's   <sys/cdefs.h>   defines   its   own   *broken*   version   of
#   * __has_builtin.   Cygwin  copied  that  content  to be  a  victim  of  the
#   * broken-ness.  We don't take them into account. */
# else
#  define RBIMPL_HAVE___HAS_BUILTIN 1
# endif
#endif

/** Wraps (or simulates) `__has_builtin`. */
#if defined(RBIMPL_HAVE___HAS_BUILTIN)
# define RBIMPL_HAS_BUILTIN(_) __has_builtin(_)

#elif RBIMPL_COMPILER_IS(GCC)
# /* :FIXME: Historically  GCC has had  tons of builtins, but  it implemented
#  * __has_builtin  only  since  GCC  10.   This section  can  be  made  more
#  * granular. */
# /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66970 */
# define RBIMPL_HAS_BUILTIN(_) (RBIMPL_HAS_BUILTIN_ ## _)
# define RBIMPL_HAS_BUILTIN___builtin_add_overflow      RBIMPL_COMPILER_SINCE(GCC, 5, 1, 0)
# define RBIMPL_HAS_BUILTIN___builtin_add_overflow_p    RBIMPL_COMPILER_SINCE(GCC, 7, 0, 0)
# define RBIMPL_HAS_BUILTIN___builtin_alloca            RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_BUILTIN___builtin_alloca_with_align RBIMPL_COMPILER_SINCE(GCC, 6, 1, 0)
# define RBIMPL_HAS_BUILTIN___builtin_assume            0
# /* See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624 for bswap16. */
# define RBIMPL_HAS_BUILTIN___builtin_bswap16           RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0)
#ifndef __OpenBSD__
# define RBIMPL_HAS_BUILTIN___builtin_bswap32           RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_bswap64           RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
#endif
# define RBIMPL_HAS_BUILTIN___builtin_clz               RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_clzl              RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_clzll             RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_constant_p        RBIMPL_COMPILER_SINCE(GCC, 2,95, 3)
# define RBIMPL_HAS_BUILTIN___builtin_ctz               RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_ctzl              RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_ctzll             RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_expect            RBIMPL_COMPILER_SINCE(GCC, 3, 0, 0)
# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow      RBIMPL_COMPILER_SINCE(GCC, 5, 1, 0)
# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow_p    RBIMPL_COMPILER_SINCE(GCC, 7, 0, 0)
# define RBIMPL_HAS_BUILTIN___builtin_popcount          RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_popcountl         RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_popcountll        RBIMPL_COMPILER_SINCE(GCC, 3, 6, 0)
# define RBIMPL_HAS_BUILTIN___builtin_rotateleft32      0
# define RBIMPL_HAS_BUILTIN___builtin_rotateleft64      0
# define RBIMPL_HAS_BUILTIN___builtin_rotateright32     0
# define RBIMPL_HAS_BUILTIN___builtin_rotateright64     0
# define RBIMPL_HAS_BUILTIN___builtin_sub_overflow      RBIMPL_COMPILER_SINCE(GCC, 5, 1, 0)
# define RBIMPL_HAS_BUILTIN___builtin_sub_overflow_p    RBIMPL_COMPILER_SINCE(GCC, 7, 0, 0)
# define RBIMPL_HAS_BUILTIN___builtin_unreachable       RBIMPL_COMPILER_SINCE(GCC, 4, 5, 0)
# /* Note that "0, 0, 0" might be inaccurate. */

#else
# /* Take config.h definition when available */
# define RBIMPL_HAS_BUILTIN(_) ((RBIMPL_HAS_BUILTIN_ ## _)+0)
# define RBIMPL_HAS_BUILTIN___builtin_add_overflow      HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW
# define RBIMPL_HAS_BUILTIN___builtin_add_overflow_p    HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW_P
# define RBIMPL_HAS_BUILTIN___builtin_alloca            0
# define RBIMPL_HAS_BUILTIN___builtin_alloca_with_align HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN
# define RBIMPL_HAS_BUILTIN___builtin_assume            0
# define RBIMPL_HAS_BUILTIN___builtin_assume_aligned    HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED
# define RBIMPL_HAS_BUILTIN___builtin_bswap16           HAVE_BUILTIN___BUILTIN_BSWAP16
# define RBIMPL_HAS_BUILTIN___builtin_bswap32           HAVE_BUILTIN___BUILTIN_BSWAP32
# define RBIMPL_HAS_BUILTIN___builtin_bswap64           HAVE_BUILTIN___BUILTIN_BSWAP64
# define RBIMPL_HAS_BUILTIN___builtin_clz               HAVE_BUILTIN___BUILTIN_CLZ
# define RBIMPL_HAS_BUILTIN___builtin_clzl              HAVE_BUILTIN___BUILTIN_CLZL
# define RBIMPL_HAS_BUILTIN___builtin_clzll             HAVE_BUILTIN___BUILTIN_CLZLL
# define RBIMPL_HAS_BUILTIN___builtin_constant_p        HAVE_BUILTIN___BUILTIN_CONSTANT_P
# define RBIMPL_HAS_BUILTIN___builtin_ctz               HAVE_BUILTIN___BUILTIN_CTZ
# define RBIMPL_HAS_BUILTIN___builtin_ctzl              0
# define RBIMPL_HAS_BUILTIN___builtin_ctzll             HAVE_BUILTIN___BUILTIN_CTZLL
# define RBIMPL_HAS_BUILTIN___builtin_expect            HAVE_BUILTIN___BUILTIN_EXPECT
# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow      HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW
# define RBIMPL_HAS_BUILTIN___builtin_mul_overflow_p    HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P
# define RBIMPL_HAS_BUILTIN___builtin_popcount          HAVE_BUILTIN___BUILTIN_POPCOUNT
# define RBIMPL_HAS_BUILTIN___builtin_popcountl         0
# define RBIMPL_HAS_BUILTIN___builtin_rotateleft32      0
# define RBIMPL_HAS_BUILTIN___builtin_rotateleft64      0
# define RBIMPL_HAS_BUILTIN___builtin_rotateright32     0
# define RBIMPL_HAS_BUILTIN___builtin_rotateright64     0
# define RBIMPL_HAS_BUILTIN___builtin_popcountll        HAVE_BUILTIN___BUILTIN_POPCOUNTLL
# define RBIMPL_HAS_BUILTIN___builtin_sub_overflow      HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW
# define RBIMPL_HAS_BUILTIN___builtin_sub_overflow_p    HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW_P
# if defined(HAVE___BUILTIN_UNREACHABLE)
#  define RBIMPL_HAS_BUILTIN___builtin_unreachable 1
# else
#  define RBIMPL_HAS_BUILTIN___builtin_unreachable 0
# endif
#endif

#endif /* RBIMPL_HAS_BUILTIN_H */
PK*J[c��H!H!%include/ruby/internal/has/attribute.hnu�[���#ifndef RBIMPL_HAS_ATTRIBUTE_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_ATTRIBUTE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_ATTRIBUTE.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/compiler_since.h"

#if defined(__has_attribute)
# if __has_attribute(pure) || RBIMPL_COMPILER_IS(GCC)
#  /* FreeBSD's   <sys/cdefs.h>   defines   its   own   *broken*   version   of
#   * __has_attribute.   Cygwin copied  that  content  to be  a  victim of  the
#   * broken-ness.  We don't take them into account. */
#  define RBIMPL_HAVE___HAS_ATTRIBUTE 1
# endif
#endif

/** Wraps (or simulates) `__has_attribute`. */
#if defined(RBIMPL_HAVE___HAS_ATTRIBUTE)
# define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_)

#elif RBIMPL_COMPILER_IS(GCC)
# /* GCC  <= 4  lack __has_attribute  predefined macro,  while have  attributes
#  * themselves.  We can simulate the macro like the following: */
# define RBIMPL_HAS_ATTRIBUTE(_) (RBIMPL_HAS_ATTRIBUTE_ ## _)
# define RBIMPL_HAS_ATTRIBUTE_aligned                    RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_alloc_size                 RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_artificial                 RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_always_inline              RBIMPL_COMPILER_SINCE(GCC, 3, 1, 0)
# define RBIMPL_HAS_ATTRIBUTE_cdecl                      RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_cold                       RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_const                      RBIMPL_COMPILER_SINCE(GCC, 2, 6, 0)
# define RBIMPL_HAS_ATTRIBUTE_deprecated                 RBIMPL_COMPILER_SINCE(GCC, 3, 1, 0)
# define RBIMPL_HAS_ATTRIBUTE_dllexport                  RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_dllimport                  RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_error                      RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_format                     RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_hot                        RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_leaf                       RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0)
# define RBIMPL_HAS_ATTRIBUTE_malloc                     RBIMPL_COMPILER_SINCE(GCC, 3, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_no_address_safety_analysis RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0)
# define RBIMPL_HAS_ATTRIBUTE_no_sanitize_address        RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0)
# define RBIMPL_HAS_ATTRIBUTE_no_sanitize_undefined      RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0)
# define RBIMPL_HAS_ATTRIBUTE_noinline                   RBIMPL_COMPILER_SINCE(GCC, 3, 1, 0)
# define RBIMPL_HAS_ATTRIBUTE_nonnull                    RBIMPL_COMPILER_SINCE(GCC, 3, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_noreturn                   RBIMPL_COMPILER_SINCE(GCC, 2, 5, 0)
# define RBIMPL_HAS_ATTRIBUTE_nothrow                    RBIMPL_COMPILER_SINCE(GCC, 3, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_pure                       RBIMPL_COMPILER_SINCE(GCC, 2,96, 0)
# define RBIMPL_HAS_ATTRIBUTE_returns_nonnull            RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0)
# define RBIMPL_HAS_ATTRIBUTE_returns_twice              RBIMPL_COMPILER_SINCE(GCC, 4, 1, 0)
# define RBIMPL_HAS_ATTRIBUTE_stdcall                    RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_unused                     RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# define RBIMPL_HAS_ATTRIBUTE_visibility                 RBIMPL_COMPILER_SINCE(GCC, 3, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_warn_unused_result         RBIMPL_COMPILER_SINCE(GCC, 3, 4, 0)
# define RBIMPL_HAS_ATTRIBUTE_warning                    RBIMPL_COMPILER_SINCE(GCC, 4, 3, 0)
# define RBIMPL_HAS_ATTRIBUTE_weak                       RBIMPL_COMPILER_SINCE(GCC, 0, 0, 0)
# /* Note that "0, 0, 0" might be inaccurate. */

#elif RBIMPL_COMPILER_IS(SunPro)
# /* Oracle Solaris Studio 12.4 (cc version 5.11) introduced __has_attribute.
#  * Before that, following attributes were available. */
# /* See https://docs.oracle.com/cd/F24633_01/index.html */
# define RBIMPL_HAS_ATTRIBUTE(_) (RBIMPL_HAS_ATTRIBUTE_ ## _)
# define RBIMPL_HAS_ATTRIBUTE_alias                      RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_aligned                    RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_always_inline              RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0)
# define RBIMPL_HAS_ATTRIBUTE_const                      RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_constructor                RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_destructor                 RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_malloc                     RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_noinline                   RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_noreturn                   RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_packed                     RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_pure                       RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_returns_twice              RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0)
# define RBIMPL_HAS_ATTRIBUTE_vector_size                RBIMPL_COMPILER_SINCE(SunPro, 5, 10, 0)
# define RBIMPL_HAS_ATTRIBUTE_visibility                 RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)
# define RBIMPL_HAS_ATTRIBUTE_weak                       RBIMPL_COMPILER_SINCE(SunPro, 5,  9, 0)

#elif defined (_MSC_VER)
# define RBIMPL_HAS_ATTRIBUTE(_) 0
# /* Fallback below doesn't work: see win32/Makefile.sub */

#else
# /* Take config.h definition when available. */
# define RBIMPL_HAS_ATTRIBUTE(_) ((RBIMPL_HAS_ATTRIBUTE_ ## _)+0)
# ifdef ALWAYS_INLINE
#  define RBIMPL_HAS_ATTRIBUTE_always_inline 1
# endif
# ifdef FUNC_CDECL
#  define RBIMPL_HAS_ATTRIBUTE_cdecl 1
# endif
# ifdef CONSTFUNC
#  define RBIMPL_HAS_ATTRIBUTE_const 1
# endif
# ifdef DEPRECATED
#  define RBIMPL_HAS_ATTRIBUTE_deprecated 1
# endif
# ifdef ERRORFUNC
#  define RBIMPL_HAS_ATTRIBUTE_error 1
# endif
# ifdef FUNC_FASTCALL
#  define RBIMPL_HAS_ATTRIBUTE_fastcall 1
# endif
# ifdef PUREFUNC
#  define RBIMPL_HAS_ATTRIBUTE_pure 1
# endif
# ifdef NO_ADDRESS_SAFETY_ANALYSIS
#  define RBIMPL_HAS_ATTRIBUTE_no_address_safety_analysis 1
# endif
# ifdef NO_SANITIZE
#  define RBIMPL_HAS_ATTRIBUTE_no_sanitize 1
# endif
# ifdef NO_SANITIZE_ADDRESS
#  define RBIMPL_HAS_ATTRIBUTE_no_sanitize_address 1
# endif
# ifdef NOINLINE
#  define RBIMPL_HAS_ATTRIBUTE_noinline 1
# endif
# ifdef RBIMPL_FUNC_NONNULL
#  define RBIMPL_HAS_ATTRIBUTE_nonnull 1
# endif
# ifdef NORETURN
#  define RBIMPL_HAS_ATTRIBUTE_noreturn 1
# endif
# ifdef FUNC_OPTIMIZED
#  define RBIMPL_HAS_ATTRIBUTE_optimize 1
# endif
# ifdef FUNC_STDCALL
#  define RBIMPL_HAS_ATTRIBUTE_stdcall 1
# endif
# ifdef MAYBE_UNUSED
#  define RBIMPL_HAS_ATTRIBUTE_unused 1
# endif
# ifdef WARN_UNUSED_RESULT
#  define RBIMPL_HAS_ATTRIBUTE_warn_unused_result 1
# endif
# ifdef WARNINGFUNC
#  define RBIMPL_HAS_ATTRIBUTE_warning 1
# endif
# ifdef WEAK
#  define RBIMPL_HAS_ATTRIBUTE_weak 1
# endif
#endif

#endif /* RBIMPL_HAS_ATTRIBUTE_H */
PK*J[��#include/ruby/internal/has/warning.hnu�[���#ifndef RBIMPL_HAS_WARNING_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_WARNING_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_WARNING.
 */

/** Wraps (or simulates) `__has_warning`. */
#if defined(__has_warning)
# define RBIMPL_HAS_WARNING(_) __has_warning(_)
#else
# define RBIMPL_HAS_WARNING(_) 0
#endif

#endif /* RBIMPL_HAS_WARNING_H */
PK*J[m:��)include/ruby/internal/has/cpp_attribute.hnu�[���#ifndef RBIMPL_HAS_CPP_ATTRIBUTE_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_CPP_ATTRIBUTE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_CPP_ATTRIBUTE.
 */
#include "ruby/internal/compiler_is.h"
#include "ruby/internal/compiler_since.h"

/** @cond INTERNAL_MACRO */
#if RBIMPL_COMPILER_IS(SunPro)
# /* Oracle Developer Studio 12.5's C++  preprocessor is reportedly broken.  We
#  * could simulate  __has_cpp_attribute like below,  but don't know  the exact
#  * list of which version supported which attribute.  Just kill everything for
#  * now.  If you can please :FIXME: */
# /* https://unicode-org.atlassian.net/browse/ICU-12893 */
# /* https://github.com/boostorg/config/pull/95 */
# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) 0

#elif defined(__has_cpp_attribute)
# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)

#elif RBIMPL_COMPILER_IS(MSVC)
# /* MSVC has  never updated  its __cplusplus  since forever  (unless specified
#  * explicitly by a compiler flag).   They also lack __has_cpp_attribute until
#  * 2019.  However, they do have attributes since 2015 or so. */
# /* https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance */
# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) (RBIMPL_HAS_CPP_ATTRIBUTE_ ## _)
# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn           200809 * RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 0)
# define RBIMPL_HAS_CPP_ATTRIBUTE_carries_dependency 200809 * RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 0)
# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated         201309 * RBIMPL_COMPILER_SINCE(MSVC, 19, 10, 0)
# define RBIMPL_HAS_CPP_ATTRIBUTE_fallthrough        201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 10, 0)
# define RBIMPL_HAS_CPP_ATTRIBUTE_maybe_unused       201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 0)
# define RBIMPL_HAS_CPP_ATTRIBUTE_nodiscard          201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 0)

#elif RBIMPL_COMPILER_BEFORE(Clang, 3, 6, 0)
# /* Clang  3.6.0  introduced  __has_cpp_attribute.  Prior  to  that  following
#  * attributes were already there. */
# /* https://clang.llvm.org/cxx_status.html */
# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) (RBIMPL_HAS_CPP_ATTRIBUTE_ ## _)
# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn           200809 * RBIMPL_COMPILER_SINCE(Clang, 3, 3, 0)
# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated         201309 * RBIMPL_COMPILER_SINCE(Clang, 3, 4, 0)

#elif RBIMPL_COMPILER_BEFORE(GCC, 5, 0, 0)
# /* GCC 5+ have __has_cpp_attribute, while 4.x had following attributes. */
# /* https://gcc.gnu.org/projects/cxx-status.html */
# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) (RBIMPL_HAS_CPP_ATTRIBUTE_ ## _)
# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn           200809 * RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0)
# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated         201309 * RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0)

#else
# /* :FIXME:
#  * Candidate compilers to list here:
#  * - icpc: They have __INTEL_CXX11_MODE__.
#  */
# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) 0
#endif
/** @endcond */

/** Wraps (or simulates) `__has_cpp_attribute`. */
#if ! defined(__cplusplus)
# /* Makes no sense. */
# define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
#else
# /* GCC needs workarounds.  See https://gcc.godbolt.org/z/jdz3pa */
# define RBIMPL_HAS_CPP_ATTRIBUTE(_) \
    ((RBIMPL_HAS_CPP_ATTRIBUTE0(_) <= __cplusplus) ? RBIMPL_HAS_CPP_ATTRIBUTE0(_) : 0)
#endif

#endif /* RBIMPL_HAS_CPP_ATTRIBUTE_H */
PK*J[&AH"��'include/ruby/internal/has/c_attribute.hnu�[���#ifndef RBIMPL_HAS_C_ATTRIBUTE_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_C_ATTRIBUTE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_C_ATTRIBUTE.
 */

#include "ruby/internal/has/extension.h"
#include "ruby/internal/has/warning.h"

/** Wraps (or simulates) `__has_c_attribute`. */
#if defined(__cplusplus)
# /* Makes no sense. */
# define RBIMPL_HAS_C_ATTRIBUTE(_) 0

#elif RBIMPL_HAS_EXTENSION(c_attributes)
# /* Hmm.  It  seems Clang 17 has  this macro defined even  when -std=c99 mode,
#  * _and_ fails  to compile complaining  that attributes are C2X  feature.  We
#  * need to work around this nonsense. */
# define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)

#elif RBIMPL_HAS_WARNING("-Wc2x-extensions")
# define RBIMPL_HAS_C_ATTRIBUTE(_) 0

#elif defined(__has_c_attribute)
# define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)

#else
# /* As  of writing  everything  that lacks  __has_c_attribute also  completely
#  * lacks C2x attributes as well.  Might change in future? */
# define RBIMPL_HAS_C_ATTRIBUTE(_) 0
#endif

#endif /* RBIMPL_HAS_C_ATTRIBUTE_H */
PK*J[(6�
�
.include/ruby/internal/has/declspec_attribute.hnu�[���#ifndef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_DECLSPEC_ATTRIBUTE.
 */
#include "ruby/internal/compiler_since.h"

/** Wraps (or simulates) `__has_declspec_attribute`. */
#if defined(__has_declspec_attribute)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) __has_declspec_attribute(_)
#else
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align       RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated  RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport   RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport   RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias     RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline    RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn    RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow     RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
# define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict    RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0)
# /* Note that "8, 0, 0" might be inaccurate. */
# if ! defined(__cplusplus)
#  /* Clang has this in both C/C++, but MSVC has this in C++ only.*/
#  undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow
# endif
#endif

#endif /* RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H */
PK*J[gG�R#include/ruby/internal/has/feature.hnu�[���#ifndef RBIMPL_HAS_FEATURE_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_FEATURE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_FEATURE.
 */

/** Wraps (or simulates) `__has_feature`. */
#if defined(__has_feature)
# define RBIMPL_HAS_FEATURE(_) __has_feature(_)
#else
# define RBIMPL_HAS_FEATURE(_) 0
#endif

#endif /* RBIMPL_HAS_FEATURE_H */
PK*J[��i��%include/ruby/internal/has/extension.hnu�[���#ifndef RBIMPL_HAS_EXTENSION_H                       /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_HAS_EXTENSION_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_HAS_EXTENSION.
 */
#include "ruby/internal/has/feature.h"

/** Wraps (or simulates) `__has_extension`. */
#if defined(__has_extension)
# define RBIMPL_HAS_EXTENSION(_) __has_extension(_)
#else
# /* Pre-3.0 clang had __has_feature but not __has_extension. */
# define RBIMPL_HAS_EXTENSION(_) RBIMPL_HAS_FEATURE(_)
#endif

#endif /* RBIMPL_HAS_EXTENSION_H */
PK*J[�J8^�/�/&include/ruby/internal/special_consts.hnu�[���#ifndef RBIMPL_SPECIAL_CONSTS_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_SPECIAL_CONSTS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines enum ::ruby_special_consts.
 * @see        Sasada,  K.,  "A  Lightweight Representation  of  Floating-Point
 *             Numbers  on  Ruby Interpreter",  in  proceedings  of 10th  JSSST
 *             SIGPPL  Workshop   on  Programming  and   Programming  Languages
 *             (PPL2008), pp. 9-16, 2008.
 */
#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/attr/enum_extensibility.h"
#include "ruby/internal/stdbool.h"
#include "ruby/internal/value.h"

/**
 * @private
 * @warning  Do not touch this macro.
 * @warning  It is an implementation detail.
 * @warning  The  value of  this  macro  must match  for  ruby  itself and  all
 *           extension  libraries, otherwise  serious  memory corruption  shall
 *           occur.
 */
#if defined(USE_FLONUM)
# /* Take that. */
#elif SIZEOF_VALUE >= SIZEOF_DOUBLE
# define USE_FLONUM 1
#else
# define USE_FLONUM 0
#endif

/** This is an old name of #RB_TEST.  Not sure which name is preferred. */
#define RTEST           RB_TEST

#define FIXNUM_P        RB_FIXNUM_P            /**< @old{RB_FIXNUM_P} */
#define IMMEDIATE_P     RB_IMMEDIATE_P         /**< @old{RB_IMMEDIATE_P} */
#define NIL_P           RB_NIL_P               /**< @old{RB_NIL_P} */
#define SPECIAL_CONST_P RB_SPECIAL_CONST_P     /**< @old{RB_SPECIAL_CONST_P} */
#define STATIC_SYM_P    RB_STATIC_SYM_P        /**< @old{RB_STATIC_SYM_P} */

#define Qfalse          RUBY_Qfalse            /**< @old{RUBY_Qfalse} */
#define Qnil            RUBY_Qnil              /**< @old{RUBY_Qnil} */
#define Qtrue           RUBY_Qtrue             /**< @old{RUBY_Qtrue} */
#define Qundef          RUBY_Qundef            /**< @old{RUBY_Qundef} */

#define FIXNUM_FLAG        RUBY_FIXNUM_FLAG    /**< @old{RUBY_FIXNUM_FLAG} */
#define FLONUM_FLAG        RUBY_FLONUM_FLAG    /**< @old{RUBY_FLONUM_FLAG} */
#define FLONUM_MASK        RUBY_FLONUM_MASK    /**< @old{RUBY_FLONUM_MASK} */
#define FLONUM_P           RB_FLONUM_P         /**< @old{RB_FLONUM_P} */
#define IMMEDIATE_MASK     RUBY_IMMEDIATE_MASK /**< @old{RUBY_IMMEDIATE_MASK} */
#define SYMBOL_FLAG        RUBY_SYMBOL_FLAG    /**< @old{RUBY_SYMBOL_FLAG} */

/** @cond INTERNAL_MACRO */
#define RB_FIXNUM_P        RB_FIXNUM_P
#define RB_FLONUM_P        RB_FLONUM_P
#define RB_IMMEDIATE_P     RB_IMMEDIATE_P
#define RB_NIL_P           RB_NIL_P
#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P
#define RB_STATIC_SYM_P    RB_STATIC_SYM_P
#define RB_TEST            RB_TEST
#define RB_UNDEF_P         RB_UNDEF_P
#define RB_NIL_OR_UNDEF_P  RB_NIL_OR_UNDEF_P
/** @endcond */

/** special constants - i.e. non-zero and non-fixnum constants */
enum
RBIMPL_ATTR_ENUM_EXTENSIBILITY(closed)
ruby_special_consts {
#if defined(__DOXYGEN__)
    RUBY_Qfalse,                /**< @see ::rb_cFalseClass */
    RUBY_Qtrue,                 /**< @see ::rb_cTrueClass */
    RUBY_Qnil,                  /**< @see ::rb_cNilClass */
    RUBY_Qundef,                /**< Represents so-called undef. */
    RUBY_IMMEDIATE_MASK,        /**< Bit mask detecting special consts. */
    RUBY_FIXNUM_FLAG,           /**< Flag to denote a fixnum. */
    RUBY_FLONUM_MASK,           /**< Bit mask detecting a flonum. */
    RUBY_FLONUM_FLAG,           /**< Flag to denote a flonum. */
    RUBY_SYMBOL_FLAG,           /**< Flag to denote a static symbol. */
#elif USE_FLONUM
    RUBY_Qfalse         = 0x00, /* ...0000 0000 */
    RUBY_Qnil           = 0x04, /* ...0000 0100 */
    RUBY_Qtrue          = 0x14, /* ...0001 0100 */
    RUBY_Qundef         = 0x24, /* ...0010 0100 */
    RUBY_IMMEDIATE_MASK = 0x07, /* ...0000 0111 */
    RUBY_FIXNUM_FLAG    = 0x01, /* ...xxxx xxx1 */
    RUBY_FLONUM_MASK    = 0x03, /* ...0000 0011 */
    RUBY_FLONUM_FLAG    = 0x02, /* ...xxxx xx10 */
    RUBY_SYMBOL_FLAG    = 0x0c, /* ...xxxx 1100 */
#else
    RUBY_Qfalse         = 0x00, /* ...0000 0000 */
    RUBY_Qnil           = 0x02, /* ...0000 0010 */
    RUBY_Qtrue          = 0x06, /* ...0000 0110 */
    RUBY_Qundef         = 0x0a, /* ...0000 1010 */
    RUBY_IMMEDIATE_MASK = 0x03, /* ...0000 0011 */
    RUBY_FIXNUM_FLAG    = 0x01, /* ...xxxx xxx1 */
    RUBY_FLONUM_MASK    = 0x00, /* any values ANDed with FLONUM_MASK cannot be FLONUM_FLAG */
    RUBY_FLONUM_FLAG    = 0x02, /* ...0000 0010 */
    RUBY_SYMBOL_FLAG    = 0x0e, /* ...xxxx 1110 */
#endif

    RUBY_SPECIAL_SHIFT  = 8 /**< Least significant 8 bits are reserved. */
};

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Emulates Ruby's "if" statement.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     false  `obj` is either ::RUBY_Qfalse or ::RUBY_Qnil.
 * @retval     true   Anything else.
 *
 * @internal
 *
 * It HAS to be `__attribute__((const))` in  order for clang to properly deduce
 * `__builtin_assume()`.
 */
static inline bool
RB_TEST(VALUE obj)
{
    /*
     * if USE_FLONUM
     *  Qfalse:  ....0000 0000
     *  Qnil:    ....0000 0100
     * ~Qnil:    ....1111 1011
     *  v        ....xxxx xxxx
     * ----------------------------
     *  RTEST(v) ....xxxx x0xx
     *
     * if ! USE_FLONUM
     *  Qfalse:  ....0000 0000
     *  Qnil:    ....0000 0010
     * ~Qnil:    ....1111 1101
     *  v        ....xxxx xxxx
     * ----------------------------
     *  RTEST(v) ....xxxx xx0x
     *
     *  RTEST(v) can be 0 if and only if (v == Qfalse || v == Qnil).
     */
    return obj & RBIMPL_CAST((VALUE)~RUBY_Qnil);
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if the given object is nil.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is ::RUBY_Qnil.
 * @retval     false  Anything else.
 */
static inline bool
RB_NIL_P(VALUE obj)
{
    return obj == RUBY_Qnil;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if the given object is undef.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is ::RUBY_Qundef.
 * @retval     false  Anything else.
 */
static inline bool
RB_UNDEF_P(VALUE obj)
{
    return obj == RUBY_Qundef;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX14)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if the given object is nil or undef.  Can be used to see if
 * a keyword argument is not given or given `nil`.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is ::RUBY_Qnil or ::RUBY_Qundef.
 * @retval     false  Anything else.
 */
static inline bool
RB_NIL_OR_UNDEF_P(VALUE obj)
{
    /*
     * if USE_FLONUM
     *  Qundef:       ....0010 0100
     *  Qnil:         ....0000 0100
     *  mask:         ....1101 1111
     *  common_bits:  ....0000 0100
     * ---------------------------------
     *  Qnil & mask   ....0000 0100
     *  Qundef & mask ....0000 0100
     *
     * if ! USE_FLONUM
     *  Qundef:       ....0000 1010
     *  Qnil:         ....0000 0010
     *  mask:         ....1111 0111
     *  common_bits:  ....0000 0010
     * ----------------------------
     *  Qnil & mask   ....0000 0010
     *  Qundef & mask ....0000 0010
     *
     *  NIL_OR_UNDEF_P(v) can be true only when v is Qundef or Qnil.
     */
    const VALUE mask = RBIMPL_CAST((VALUE)~(RUBY_Qundef ^ RUBY_Qnil));
    const VALUE common_bits = RUBY_Qundef & RUBY_Qnil;
    return (obj & mask) == common_bits;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if the given object is a so-called Fixnum.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is a Fixnum.
 * @retval     false  Anything else.
 * @note       Fixnum was  a thing  in the  20th century, but  it is  rather an
 *             implementation detail today.
 */
static inline bool
RB_FIXNUM_P(VALUE obj)
{
    return obj & RUBY_FIXNUM_FLAG;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX14)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if the given object is a static symbol.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is a static symbol
 * @retval     false  Anything else.
 * @see        RB_DYNAMIC_SYM_P()
 * @see        RB_SYMBOL_P()
 * @note       These days  there are static  and dynamic symbols, just  like we
 *             once had Fixnum/Bignum back in the old days.
 */
static inline bool
RB_STATIC_SYM_P(VALUE obj)
{
    RBIMPL_ATTR_CONSTEXPR(CXX14)
    const VALUE mask = ~(RBIMPL_VALUE_FULL << RUBY_SPECIAL_SHIFT);
    return (obj & mask) == RUBY_SYMBOL_FLAG;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if the given object is a so-called Flonum.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is a Flonum.
 * @retval     false  Anything else.
 * @see        RB_FLOAT_TYPE_P()
 * @note       These days there are Flonums and non-Flonum floats, just like we
 *             once had Fixnum/Bignum back in the old days.
 */
static inline bool
RB_FLONUM_P(VALUE obj)
{
#if USE_FLONUM
    return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG;
#else
    return false;
#endif
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if  the given  object is  an immediate  i.e. an  object which  has no
 * corresponding storage inside of the object space.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is a Flonum.
 * @retval     false  Anything else.
 * @see        RB_FLOAT_TYPE_P()
 * @note       The concept of "immediate" is purely C specific.
 */
static inline bool
RB_IMMEDIATE_P(VALUE obj)
{
    return obj & RUBY_IMMEDIATE_MASK;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Checks if the given object is of enum ::ruby_special_consts.
 *
 * @param[in]  obj    An arbitrary ruby object.
 * @retval     true   `obj` is a special constant.
 * @retval     false  Anything else.
 */
static inline bool
RB_SPECIAL_CONST_P(VALUE obj)
{
    return (obj == RUBY_Qfalse) || RB_IMMEDIATE_P(obj);
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
/**
 * Identical to RB_SPECIAL_CONST_P, except it returns a ::VALUE.
 *
 * @param[in]  obj          An arbitrary ruby object.
 * @retval     RUBY_Qtrue   `obj` is a special constant.
 * @retval     RUBY_Qfalse  Anything else.
 *
 * @internal
 *
 * This  function is  to mimic  old  rb_special_const_p macro  but have  anyone
 * actually used its return value?  Wasn't it just something no one needed?
 */
static inline VALUE
rb_special_const_p(VALUE obj)
{
    return (unsigned int)RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue;
}

/**
 * @cond INTERNAL_MACRO
 * See [ruby-dev:27513] for the following macros.
 */
#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse)
#define RUBY_Qtrue  RBIMPL_CAST((VALUE)RUBY_Qtrue)
#define RUBY_Qnil   RBIMPL_CAST((VALUE)RUBY_Qnil)
#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef)
/** @endcond */

#endif /* RBIMPL_SPECIAL_CONSTS_H */
PK*J[(=G�8�8include/ruby/internal/xmalloc.hnu�[���#ifndef RBIMPL_XMALLOC_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_XMALLOC_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Declares ::ruby_xmalloc().
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>
#endif

#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif

#include "ruby/internal/attr/alloc_size.h"
#include "ruby/internal/attr/nodiscard.h"
#include "ruby/internal/attr/noexcept.h"
#include "ruby/internal/attr/restrict.h"
#include "ruby/internal/attr/returns_nonnull.h"
#include "ruby/internal/dllexport.h"

/**
 * @private
 * @warning  Do not touch this macro.
 * @warning  It is an implementation detail.
 * @warning  It was a failure at the first place to let you know about it.
 * @warning  The  value of  this  macro  must match  for  ruby  itself and  all
 *           extension  libraries, otherwise  serious  memory corruption  shall
 *           occur.
 */
#ifndef USE_GC_MALLOC_OBJ_INFO_DETAILS
# define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
#endif

#define xmalloc   ruby_xmalloc   /**< @old{ruby_xmalloc} */
#define xmalloc2  ruby_xmalloc2  /**< @old{ruby_xmalloc2} */
#define xcalloc   ruby_xcalloc   /**< @old{ruby_xcalloc} */
#define xrealloc  ruby_xrealloc  /**< @old{ruby_xrealloc} */
#define xrealloc2 ruby_xrealloc2 /**< @old{ruby_xrealloc2} */
#define xfree     ruby_xfree     /**< @old{ruby_xfree} */

RBIMPL_SYMBOL_EXPORT_BEGIN()

RBIMPL_ATTR_NODISCARD()
RBIMPL_ATTR_RESTRICT()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_ALLOC_SIZE((1))
/**
 * Allocates a  storage instance.  It is  largely the same as  system malloc(),
 * except:
 *
 *   - It raises Ruby exceptions instead of returning NULL, and
 *   - In case of `ENOMEM` it tries to GC to make some room.
 *
 * @param[in]  size            Requested amount of memory.
 * @exception  rb_eNoMemError  No space left for `size` bytes allocation.
 * @return     A valid pointer  to an allocated storage instance;  which has at
 *             least `size` bytes width, with appropriate alignment detected by
 *             the underlying malloc() routine.
 * @note       It doesn't return NULL.
 * @note       Unlike some malloc() implementations, it allocates something and
 *             returns a meaningful value even when `size` is equal to zero.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
void *ruby_xmalloc(size_t size)
RBIMPL_ATTR_NOEXCEPT(malloc(size))
;

RBIMPL_ATTR_NODISCARD()
RBIMPL_ATTR_RESTRICT()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_ALLOC_SIZE((1,2))
/**
 * Identical to ruby_xmalloc(), except it allocates `nelems` * `elemsiz` bytes.
 * This is needed  because the multiplication could integer  overflow.  On such
 * situations  Ruby does  not try  to  allocate at  all but  raises Ruby  level
 * exceptions  instead.  If  there  is  no integer  overflow  the behaviour  is
 * exactly the same as `ruby_xmalloc(nelems*elemsiz)`.
 *
 * @param[in]  nelems          Number of elements.
 * @param[in]  elemsiz         Size of an element.
 * @exception  rb_eNoMemError  No space left for allocation.
 * @exception  rb_eArgError    `nelems` * `elemsiz` would overflow.
 * @return     A valid pointer  to an allocated storage instance;  which has at
 *             least  `nelems`  *  `elemsiz`   bytes  width,  with  appropriate
 *             alignment detected by the underlying malloc() routine.
 * @note       It doesn't return NULL.
 * @note       Unlike some malloc() implementations, it allocates something and
 *             returns a  meaningful value even  when `nelems` or  `elemsiz` or
 *             both are zero.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
RBIMPL_ATTR_NOEXCEPT(malloc(nelems * elemsiz))
;

RBIMPL_ATTR_NODISCARD()
RBIMPL_ATTR_RESTRICT()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_ALLOC_SIZE((1,2))
/**
 * Identical  to  ruby_xmalloc2(),  except  it returns  a  zero-filled  storage
 * instance.  It  can also be  seen as  a routine identical  to ruby_xmalloc(),
 * except it calls calloc() instead of malloc().
 *
 * @param[in]  nelems          Number of elements.
 * @param[in]  elemsiz         Size of an element.
 * @exception  rb_eNoMemError  No space left for allocation.
 * @exception  rb_eArgError    `nelems` * `elemsiz` would overflow.
 * @return     A valid pointer  to an allocated storage instance;  which has at
 *             least  `nelems`  *  `elemsiz`   bytes  width,  with  appropriate
 *             alignment detected by the underlying calloc() routine.
 * @post       The returned storage instance is filled with zeros.
 * @note       It doesn't return NULL.
 * @note       Unlike some calloc() implementations, it allocates something and
 *             returns a  meaningful value even  when `nelems` or  `elemsiz` or
 *             both are zero.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
void *ruby_xcalloc(size_t nelems, size_t elemsiz)
RBIMPL_ATTR_NOEXCEPT(calloc(nelems, elemsiz))
;

RBIMPL_ATTR_NODISCARD()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_ALLOC_SIZE((2))
/**
 * Resize the storage instance.
 *
 * @param[in]  ptr             A valid  pointer to a storage  instance that was
 *                             previously returned from either:
 *                               - ruby_xmalloc(),
 *                               - ruby_xmalloc2(),
 *                               - ruby_xcalloc(),
 *                               - ruby_xrealloc(), or
 *                               - ruby_xrealloc2().
 * @param[in]  newsiz          Requested new amount of memory.
 * @exception  rb_eNoMemError  No space left for `newsiz` bytes allocation.
 * @return     A  valid  pointer  to   a  (possibly  newly  allocated)  storage
 *             instance;  which  has  at   least  `newsiz`  bytes  width,  with
 *             appropriate  alignment  detected  by  the  underlying  realloc()
 *             routine.
 * @pre        The passed pointer must point  to a valid live storage instance.
 *             It is a failure to pass an already freed pointer.
 * @post       In  case the  function  returns the  passed  pointer as-is,  the
 *             storage  instance that  the  pointer holds  is  either grown  or
 *             shrunken  to have  at least  `newsiz` bytes.  Otherwise a  valid
 *             pointer to a  newly allocated storage instance  is returned.  In
 *             this  case  `ptr`  is  invalidated   as  if  it  was  passed  to
 *             ruby_xfree().
 * @note       It doesn't return NULL.
 * @warning    Unlike some realloc() implementations,  passing zero to `newsiz`
 *             is not the  same as calling ruby_xfree(),  because this function
 *             never returns NULL.  Something meaningful still returns then.
 * @warning    It is  a failure not to  check the return value.   Do not assume
 *             anything on  it.  It could  be either identical to,  or distinct
 *             form the passed argument.
 * @warning    Do not  assume anything  on the alignment  of the  return value.
 *             There is  no guarantee  that it  inherits the  passed argument's
 *             one.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
void *ruby_xrealloc(void *ptr, size_t newsiz)
RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newsiz))
;

RBIMPL_ATTR_NODISCARD()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_ALLOC_SIZE((2,3))
/**
 * Identical to ruby_xrealloc(),  except it resizes the  given storage instance
 * to `newelems` *  `newsiz` bytes.  This is needed  because the multiplication
 * could integer overflow.   On such situations Ruby does not  try to touch the
 * contents  of  argument pointer  at  all  but  raises Ruby  level  exceptions
 * instead.  If there is no integer  overflow the behaviour is exactly the same
 * as `ruby_xrealloc(ptr,nelems*elemsiz)`.
 *
 * This  is   roughly  the  same   as  reallocarray()  function   that  OpenBSD
 * etc. provides, but also interacts with our GC.
 *
 * @param[in]  ptr             A valid  pointer to a storage  instance that was
 *                             previously returned from either:
 *                               - ruby_xmalloc(),
 *                               - ruby_xmalloc2(),
 *                               - ruby_xcalloc(),
 *                               - ruby_xrealloc(), or
 *                               - ruby_xrealloc2().
 * @param[in]  newelems        Requested new number of elements.
 * @param[in]  newsiz          Requested new size of each element.
 * @exception  rb_eNoMemError  No space left for  allocation.
 * @exception  rb_eArgError    `newelems` * `newsiz` would overflow.
 * @return     A  valid  pointer  to   a  (possibly  newly  allocated)  storage
 *             instance; which has at least  `newelems` * `newsiz` bytes width,
 *             with appropriate alignment detected  by the underlying realloc()
 *             routine.
 * @pre        The passed pointer must point  to a valid live storage instance.
 *             It is a failure to pass an already freed pointer.
 * @post       In  case the  function  returns the  passed  pointer as-is,  the
 *             storage  instance that  the  pointer holds  is  either grown  or
 *             shrunken  to   have  at  least  `newelems`   *  `newsiz`  bytes.
 *             Otherwise a valid pointer to  a newly allocated storage instance
 *             is returned.   In this case  `ptr` is  invalidated as if  it was
 *             passed to ruby_xfree().
 * @note       It doesn't return NULL.
 * @warning    Unlike some  realloc() implementations,  passing zero  to either
 *             `newelems`   or  `elemsiz`   are   not  the   same  as   calling
 *             ruby_xfree(),   because  this   function  never   returns  NULL.
 *             Something meaningful still returns then.
 * @warning    It is  a failure not to  check the return value.   Do not assume
 *             anything on  it.  It could  be either identical to,  or distinct
 *             form the passed argument.
 * @warning    Do not  assume anything  on the alignment  of the  return value.
 *             There is  no guarantee  that it  inherits the  passed argument's
 *             one.
 * @warning    The return  value shall  be invalidated  exactly once  by either
 *             ruby_xfree(),  ruby_xrealloc(), or  ruby_xrealloc2().   It is  a
 *             failure to pass it to system free(), because the system and Ruby
 *             might or might not share the same malloc() implementation.
 */
void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newelems * newsiz))
;

/**
 * Deallocates a storage instance.
 *
 * @param[out]  ptr  Either
 *                     - NULL, or
 *                     - a valid pointer previously returned from one of:
 *                       - ruby_xmalloc(),
 *                       - ruby_xmalloc2(),
 *                       - ruby_xcalloc(),
 *                       - ruby_xrealloc(), or
 *                       - ruby_xrealloc2().
 * @pre         The passed pointer must point to a valid live storage instance.
 *              It is a failure to pass an already freed pointer.
 * @post        The  storage  instance  pointed  by  the  passed  pointer  gets
 *              invalidated; it is no longer addressable.
 * @warning     Every single storage instance  that was previously allocated by
 *              either    ruby_xmalloc(),   ruby_xmalloc2(),    ruby_xcalloc(),
 *              ruby_xrealloc(),  or  ruby_xrealloc2()   shall  be  invalidated
 *              exactly once by  either passing it to  ruby_xfree(), or passing
 *              it to  either ruby_xrealloc(), ruby_xrealloc2() then  check the
 *              return value for invalidation.
 * @warning     Do not pass anything other  than pointers described above.  For
 *              instance pointers returned from malloc() or mmap() shall not be
 *              passed  to   this  function,  because  the   underlying  memory
 *              management mechanism could differ.
 * @warning     Do  not pass  any invalid  pointers  to this  function e.g.  by
 *              calling it twice with a same argument.
 */
void ruby_xfree(void *ptr)
RBIMPL_ATTR_NOEXCEPT(free(ptr))
;

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_XMALLOC_H */
PK*J[#�(''include/ruby/internal/globals.hnu�[���#ifndef RBIMPL_GLOBALS_H                             /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_GLOBALS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Ruby-level global variables / constants, visible from C.
 */
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/fl_type.h"
#include "ruby/internal/special_consts.h"
#include "ruby/internal/value.h"
#include "ruby/internal/value_type.h"

/**
 * @defgroup object Core objects and their operations
 *
 * @internal
 *
 * There are several  questionable constants listed in this  header file.  They
 * are intentionally left untouched for purely academic backwards compatibility
 * concerns.  But for instance do any one of 3rd party extension libraries even
 * need to know that there is NameError::Message?
 *
 * @endinternal
 *
 * @{
 */

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 */
#define RUBY_INTEGER_UNIFICATION 1

RUBY_EXTERN VALUE rb_mKernel;                 /**< `Kernel` module. */
RUBY_EXTERN VALUE rb_mComparable;             /**< `Comparable` module. */
RUBY_EXTERN VALUE rb_mEnumerable;             /**< `Enumerable` module. */
RUBY_EXTERN VALUE rb_mErrno;                  /**< `Errno` module. */
RUBY_EXTERN VALUE rb_mFileTest;               /**< `FileTest` module. */
RUBY_EXTERN VALUE rb_mGC;                     /**< `GC` module. */
RUBY_EXTERN VALUE rb_mMath;                   /**< `Math` module. */
RUBY_EXTERN VALUE rb_mProcess;                /**< `Process` module. */
RUBY_EXTERN VALUE rb_mWaitReadable;           /**< `IO::WaitReadable` module. */
RUBY_EXTERN VALUE rb_mWaitWritable;           /**< `IO::WaitReadable` module. */

RUBY_EXTERN VALUE rb_cBasicObject;            /**< `BasicObject` class. */
RUBY_EXTERN VALUE rb_cObject;                 /**< `Object` class. */
RUBY_EXTERN VALUE rb_cArray;                  /**< `Array` class. */
RUBY_EXTERN VALUE rb_cBinding;                /**< `Binding` class. */
RUBY_EXTERN VALUE rb_cClass;                  /**< `Class` class. */
RUBY_EXTERN VALUE rb_cDir;                    /**< `Dir` class. */
RUBY_EXTERN VALUE rb_cEncoding;               /**< `Encoding` class. */
RUBY_EXTERN VALUE rb_cEnumerator;             /**< `Enumerator` class. */
RUBY_EXTERN VALUE rb_cFalseClass;             /**< `FalseClass` class. */
RUBY_EXTERN VALUE rb_cFile;                   /**< `File` class. */
RUBY_EXTERN VALUE rb_cComplex;                /**< `Complex` class. */
RUBY_EXTERN VALUE rb_cFloat;                  /**< `Float` class. */
RUBY_EXTERN VALUE rb_cHash;                   /**< `Hash` class. */
RUBY_EXTERN VALUE rb_cIO;                     /**< `IO` class. */
RUBY_EXTERN VALUE rb_cInteger;                /**< `Module` class. */
RUBY_EXTERN VALUE rb_cMatch;                  /**< `MatchData` class. */
RUBY_EXTERN VALUE rb_cMethod;                 /**< `Method` class. */
RUBY_EXTERN VALUE rb_cModule;                 /**< `Module` class. */
RUBY_EXTERN VALUE rb_cRefinement;             /**< `Refinement` class. */
RUBY_EXTERN VALUE rb_cNameErrorMesg;          /**< `NameError::Message` class. */
RUBY_EXTERN VALUE rb_cNilClass;               /**< `NilClass` class. */
RUBY_EXTERN VALUE rb_cNumeric;                /**< `Numeric` class. */
RUBY_EXTERN VALUE rb_cProc;                   /**< `Proc` class. */
RUBY_EXTERN VALUE rb_cRandom;                 /**< `Random` class. */
RUBY_EXTERN VALUE rb_cRange;                  /**< `Range` class. */
RUBY_EXTERN VALUE rb_cRational;               /**< `Rational` class. */
RUBY_EXTERN VALUE rb_cRegexp;                 /**< `Regexp` class. */
RUBY_EXTERN VALUE rb_cStat;                   /**< `File::Stat` class. */
RUBY_EXTERN VALUE rb_cString;                 /**< `String` class. */
RUBY_EXTERN VALUE rb_cStruct;                 /**< `Struct` class. */
RUBY_EXTERN VALUE rb_cSymbol;                 /**< `Symbol` class. */
RUBY_EXTERN VALUE rb_cThread;                 /**< `Thread` class. */
RUBY_EXTERN VALUE rb_cTime;                   /**< `Time` class. */
RUBY_EXTERN VALUE rb_cTrueClass;              /**< `TrueClass` class. */
RUBY_EXTERN VALUE rb_cUnboundMethod;          /**< `UnboundMethod` class. */

/**
 * @}
 * @addtogroup exception
 * @{
 */

RUBY_EXTERN VALUE rb_eException;                 /**< Mother of all exceptions. */
RUBY_EXTERN VALUE rb_eStandardError;             /**< `StandardError` exception. */
RUBY_EXTERN VALUE rb_eSystemExit;                /**< `SystemExit` exception. */
RUBY_EXTERN VALUE rb_eInterrupt;                 /**< `Interrupt` exception. */
RUBY_EXTERN VALUE rb_eSignal;                    /**< `SignalException` exception. */
RUBY_EXTERN VALUE rb_eFatal;                     /**< `fatal` exception. */
RUBY_EXTERN VALUE rb_eArgError;                  /**< `ArgumentError` exception. */
RUBY_EXTERN VALUE rb_eEOFError;                  /**< `EOFError` exception. */
RUBY_EXTERN VALUE rb_eIndexError;                /**< `IndexError` exception. */
RUBY_EXTERN VALUE rb_eStopIteration;             /**< `StopIteration` exception. */
RUBY_EXTERN VALUE rb_eKeyError;                  /**< `KeyError` exception. */
RUBY_EXTERN VALUE rb_eRangeError;                /**< `RangeError` exception. */
RUBY_EXTERN VALUE rb_eIOError;                   /**< `IOError` exception. */
RUBY_EXTERN VALUE rb_eRuntimeError;              /**< `RuntimeError` exception. */
RUBY_EXTERN VALUE rb_eFrozenError;               /**< `FrozenError` exception. */
RUBY_EXTERN VALUE rb_eSecurityError;             /**< `SecurityError` exception. */
RUBY_EXTERN VALUE rb_eSystemCallError;           /**< `SystemCallError` exception. */
RUBY_EXTERN VALUE rb_eThreadError;               /**< `ThreadError` exception. */
RUBY_EXTERN VALUE rb_eTypeError;                 /**< `TypeError` exception. */
RUBY_EXTERN VALUE rb_eZeroDivError;              /**< `ZeroDivisionError` exception. */
RUBY_EXTERN VALUE rb_eNotImpError;               /**< `NotImplementedError` exception. */
RUBY_EXTERN VALUE rb_eNoMemError;                /**< `NoMemoryError` exception. */
RUBY_EXTERN VALUE rb_eNoMethodError;             /**< `NoMethodError` exception. */
RUBY_EXTERN VALUE rb_eFloatDomainError;          /**< `FloatDomainError` exception. */
RUBY_EXTERN VALUE rb_eLocalJumpError;            /**< `LocalJumpError` exception. */
RUBY_EXTERN VALUE rb_eSysStackError;             /**< `SystemStackError` exception. */
RUBY_EXTERN VALUE rb_eRegexpError;               /**< `RegexpError` exception. */
RUBY_EXTERN VALUE rb_eEncodingError;             /**< `EncodingError` exception. */
RUBY_EXTERN VALUE rb_eEncCompatError;            /**< `Encoding::CompatibilityError` exception. */
RUBY_EXTERN VALUE rb_eNoMatchingPatternError;    /**< `NoMatchingPatternError` exception. */
RUBY_EXTERN VALUE rb_eNoMatchingPatternKeyError; /**< `NoMatchingPatternKeyError` exception. */

RUBY_EXTERN VALUE rb_eScriptError;               /**< `ScriptError` exception. */
RUBY_EXTERN VALUE rb_eNameError;                 /**< `NameError` exception. */
RUBY_EXTERN VALUE rb_eSyntaxError;               /**< `SyntaxError` exception. */
RUBY_EXTERN VALUE rb_eLoadError;                 /**< `LoadError` exception. */

RUBY_EXTERN VALUE rb_eMathDomainError;           /**< `Math::DomainError` exception. */

/**
 * @}
 * @addtogroup object
 * @{
 */

RUBY_EXTERN VALUE rb_stdin;                      /**< `STDIN` constant. */
RUBY_EXTERN VALUE rb_stdout;                     /**< `STDOUT` constant. */
RUBY_EXTERN VALUE rb_stderr;                     /**< `STDERR` constant. */

RBIMPL_ATTR_PURE()
/**
 * Object  to class  mapping  function.   Every object  have  its class.   This
 * function obtains that.
 *
 * @param[in]  obj  Target object to query.
 * @return     The class of the given object.
 *
 * @internal
 *
 * This  function is  a super-duper  hot  path.  Optimised  targeting modern  C
 * compilers and x86_64 architecture.
 */
static inline VALUE
rb_class_of(VALUE obj)
{
    if (! RB_SPECIAL_CONST_P(obj)) {
        return RBASIC_CLASS(obj);
    }
    else if (obj == RUBY_Qfalse) {
        return rb_cFalseClass;
    }
    else if (obj == RUBY_Qnil) {
        return rb_cNilClass;
    }
    else if (obj == RUBY_Qtrue) {
        return rb_cTrueClass;
    }
    else if (RB_FIXNUM_P(obj)) {
        return rb_cInteger;
    }
    else if (RB_STATIC_SYM_P(obj)) {
        return rb_cSymbol;
    }
    else if (RB_FLONUM_P(obj)) {
        return rb_cFloat;
    }

#if !RUBY_DEBUG
    RBIMPL_UNREACHABLE_RETURN(Qfalse);
#else
    RUBY_ASSERT_FAIL("unexpected type");
#endif
}

#define CLASS_OF rb_class_of /**< @old{rb_class_of} */

RBIMPL_SYMBOL_EXPORT_END()

/** @} */

#endif /* RBIMPL_GLOBALS_H */
PK*J[*��9Z9Zinclude/ruby/internal/ctype.hnu�[���#ifndef RBIMPL_CTYPE_H                               /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_CTYPE_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Our own, locale independent, character handling routines.
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <ctype.h>
#endif

#include "ruby/internal/attr/artificial.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/constexpr.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"

/**
 * @name Old character classification macros
 *
 * What  is this  #ISPRINT  business?   Well, according  to  our  VCS and  some
 * internet surfing, it appears that the initial intent of these macros were to
 * mimic codes appear  in common in several GNU projects.   As far as @shyouhei
 * detects they  seem to originate GNU  regex (that standalone one  rather than
 * Gnulib or Glibc), and at least date back to 1995.
 *
 * Let me lawfully quote from a GNU coreutils commit
 * https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=49803907f5dbd7646184a8912c9db9b09dcd0f22
 *
 *   > Jim Meyering writes:
 *   >
 *   > "... Some ctype macros are valid only for character codes that
 *   > isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
 *   > using /bin/cc or gcc but without giving an ansi option).  So, all
 *   > ctype uses should be through macros like ISPRINT...  If
 *   > STDC_HEADERS is defined, then autoconf has verified that the ctype
 *   > macros don't need to be guarded with references to isascii. ...
 *   > Defining isascii to 1 should let any compiler worth its salt
 *   > eliminate the && through constant folding."
 *   >
 *   > Bruno Haible adds:
 *   >
 *   > "... Furthermore, isupper(c) etc. have an undefined result if c is
 *   > outside the range -1 <= c <= 255. One is tempted to write isupper(c)
 *   > with c being of type `char', but this is wrong if c is an 8-bit
 *   > character >= 128 which gets sign-extended to a negative value.
 *   > The macro ISUPPER protects against this as well."
 *
 * So the intent  was to reroute old problematic systems  that no longer exist.
 * At the same time the problems described  above no longer hurt us, because we
 * decided to completely  avoid using system-provided isupper  etc. to reinvent
 * the wheel.  These macros are entirely legacy; please ignore them.
 *
 * But let me also  put stress that GNU people are wise;  they use those macros
 * only inside of  their own implementations and never let  them be public.  On
 * the other hand ruby has thoughtlessly publicised them to 3rd party libraries
 * since its beginning, which is a very bad idea.  These macros are too easy to
 * get conflicted with definitions elsewhere.
 *
 * New programs should stick to the `rb_` prefixed names.
 *
 * @note  It seems we just mimic the API.  We do not share their implementation
 *        with GPL-ed programs.
 *
 * @{
 */
#ifndef ISPRINT
# define ISASCII  rb_isascii    /**< @old{rb_isascii}*/
# define ISPRINT  rb_isprint    /**< @old{rb_isprint}*/
# define ISGRAPH  rb_isgraph    /**< @old{rb_isgraph}*/
# define ISSPACE  rb_isspace    /**< @old{rb_isspace}*/
# define ISUPPER  rb_isupper    /**< @old{rb_isupper}*/
# define ISLOWER  rb_islower    /**< @old{rb_islower}*/
# define ISALNUM  rb_isalnum    /**< @old{rb_isalnum}*/
# define ISALPHA  rb_isalpha    /**< @old{rb_isalpha}*/
# define ISDIGIT  rb_isdigit    /**< @old{rb_isdigit}*/
# define ISXDIGIT rb_isxdigit   /**< @old{rb_isxdigit}*/
# define ISBLANK  rb_isblank    /**< @old{rb_isblank}*/
# define ISCNTRL  rb_iscntrl    /**< @old{rb_iscntrl}*/
# define ISPUNCT  rb_ispunct    /**< @old{rb_ispunct}*/
#endif

#define TOUPPER     rb_toupper    /**< @old{rb_toupper}*/
#define TOLOWER     rb_tolower    /**< @old{rb_tolower}*/
#define STRCASECMP  st_locale_insensitive_strcasecmp  /**< @old{st_locale_insensitive_strcasecmp}*/
#define STRNCASECMP st_locale_insensitive_strncasecmp /**< @old{st_locale_insensitive_strncasecmp}*/
#define STRTOUL     ruby_strtoul  /**< @old{ruby_strtoul}*/

/** @} */

RBIMPL_SYMBOL_EXPORT_BEGIN()
/** @name locale insensitive functions
 *  @{
 */

/* In descriptions below, `the POSIX Locale` and `the "C" locale` are tactfully
 * used as to whether the described function mimics POSIX or C99. */

RBIMPL_ATTR_NONNULL(())
/**
 * Our  own locale-insensitive  version  of `strcasecmp(3)`.   The "case"  here
 * always means that of the POSIX  Locale.  It doesn't depend on runtime locale
 * settings.
 *
 * @param[in]  s1  Comparison LHS.
 * @param[in]  s2  Comparison RHS.
 * @retval     -1  `s1` is "less" than `s2`.
 * @retval      0  Both strings converted into lowercase would be identical.
 * @retval      1  `s1` is "greater" than `s2`.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 */
int st_locale_insensitive_strcasecmp(const char *s1, const char *s2);

RBIMPL_ATTR_NONNULL(())
/**
 * Our  own locale-insensitive  version of  `strcnasecmp(3)`.  The  "case" here
 * always means that of the POSIX  Locale.  It doesn't depend on runtime locale
 * settings.
 *
 * @param[in]  s1  Comparison LHS.
 * @param[in]  s2  Comparison RHS.
 * @param[in]  n   Comparison shall stop after first `n` bytes are scanned.
 * @retval     -1  `s1` is "less" than `s2`.
 * @retval      0  Both strings converted into lowercase would be identical.
 * @retval      1  `s1` is "greater" than `s2`.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    This function is _not_ timing safe.
 */
int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);

RBIMPL_ATTR_NONNULL((1))
/**
 * Our own locale-insensitive version of  `strtoul(3)`.  The conversion is done
 * as if the current locale is set  to the "C" locale, no matter actual runtime
 * locale settings.
 *
 * @note        This is needed because  `strtoul("i", 0, 36)` would return zero
 *              if it is locale sensitive and the current locale is `tr_TR`.
 * @param[in]   str     String of digits,  optionally preceded with whitespaces
 *                      (ignored) and optionally `+` or `-` sign.
 * @param[out]  endptr  NULL, or an arbitrary pointer (overwritten on return).
 * @param[in]   base    `2` to  `36` inclusive for  each base, or  special case
 *                      `0` to detect the base from the contents of the string.
 * @return      Converted integer, casted to unsigned long.
 * @post        If `endptr` is not NULL, it  is updated to point the first such
 *              byte where conversion failed.
 * @note        This function sets `errno` on failure.
 *                - `EINVAL`: Passed `base` is out of range.
 *                - `ERANGE`: Converted integer is out of range of `long`.
 * @warning     As far as @shyouhei reads ISO/IEC 9899:2018 section 7.22.1.4, a
 *              conforming  `strtoul`  implementation   shall  render  `ERANGE`
 *              whenever  it  finds  the  input string  represents  a  negative
 *              integer.  Such thing can never be representable using `unsigned
 *              long`.   However  this  implementation  does  not  honour  that
 *              language.   It just  casts such  negative value  to the  return
 *              type, resulting a very big  return value.  This behaviour is at
 *              least questionable.  But  we can no longer change  that at this
 *              point.
 * @note        Not only  does this  function works under  the "C"  locale, but
 *              also assumes its execution character  set be what ruby calls an
 *              ASCII-compatible  character set;  which  does  not include  for
 *              instance EBCDIC or UTF-16LE.
 */
unsigned long ruby_strtoul(const char *str, char **endptr, int base);
RBIMPL_SYMBOL_EXPORT_END()

/*
 * We are making  the functions below to return `int`  instead of `bool`.  They
 * have been as such since their birth at 5f237d79033b2109afb768bc889611fa9630.
 */

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isascii(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     false  `c` is out of range of ASCII character set.
 * @retval     true   Yes it is.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isascii(int c)
{
    return '\0' <= c && c <= '\x7f';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isupper(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "upper".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isupper(int c)
{
    return 'A' <= c && c <= 'Z';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `islower(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "lower".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_islower(int c)
{
    return 'a' <= c && c <= 'z';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isalpha(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed in  either  IEEE  1003.1 section  7.3.1.1
 *                    "upper" or "lower".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isalpha(int c)
{
    return rb_isupper(c) || rb_islower(c);
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isdigit(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "digit".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isdigit(int c)
{
    return '0' <= c && c <= '9';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isalnum(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed in  either  IEEE  1003.1 section  7.3.1.1
 *                    "upper", "lower", or "digit".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isalnum(int c)
{
    return rb_isalpha(c) || rb_isdigit(c);
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isxdigit(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "xdigit".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isxdigit(int c)
{
    return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isblank(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "blank".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isblank(int c)
{
    return c == ' ' || c == '\t';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isspace(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "space".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isspace(int c)
{
    return c == ' ' || ('\t' <= c && c <= '\r');
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `iscntrl(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "cntrl".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_iscntrl(int c)
{
    return ('\0' <= c && c < ' ') || c == '\x7f';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Identical to rb_isgraph(), except it also returns true for `' '`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed in  either  IEEE  1003.1 section  7.3.1.1
 *                    "upper", "lower", "digit", "punct", or a `' '`.
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isprint(int c)
{
    return ' ' <= c && c <= '\x7e';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `ispunct(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed  in IEEE 1003.1 section 7.3.1.1 "punct".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_ispunct(int c)
{
    return !rb_isalnum(c);
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `isgraph(3)`.
 *
 * @param[in]  c      Byte in question to query.
 * @retval     true   `c`  is  listed in  either  IEEE  1003.1 section  7.3.1.1
 *                    "upper", "lower", "digit", or "punct".
 * @retval     false  Anything else.
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_isgraph(int c)
{
    return '!' <= c && c <= '\x7e';
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `tolower(3)`.
 *
 * @param[in]  c          Byte in question to convert.
 * @retval     c          The  byte is  not listed  in in  IEEE 1003.1  section
 *                        7.3.1.1 "upper".
 * @retval     otherwise  Byte converted  using the map defined  in IEEE 1003.1
 *                        section 7.3.1 "tolower".
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_tolower(int c)
{
    return rb_isupper(c) ? (c|0x20) : c;
}

RBIMPL_ATTR_CONST()
RBIMPL_ATTR_CONSTEXPR(CXX11)
RBIMPL_ATTR_ARTIFICIAL()
/**
 * Our own locale-insensitive version of `toupper(3)`.
 *
 * @param[in]  c          Byte in question to convert.
 * @retval     c          The  byte is  not listed  in in  IEEE 1003.1  section
 *                        7.3.1.1 "lower".
 * @retval     otherwise  Byte converted  using the map defined  in IEEE 1003.1
 *                        section 7.3.1 "toupper".
 * @note       Not only  does this function  works under the POSIX  Locale, but
 *             also assumes its  execution character set be what  ruby calls an
 *             ASCII-compatible  character  set;  which does  not  include  for
 *             instance EBCDIC or UTF-16LE.
 * @warning    `c` is  an int.  This  means that when  you pass a  `char` value
 *             here, it  experiences "integer promotion" as  defined in ISO/IEC
 *             9899:2018 section 6.3.1.1 paragraph 1.
 */
static inline int
rb_toupper(int c)
{
    return rb_islower(c) ? (c&0x5f) : c;
}

/** @} */
#endif /* RBIMPL_CTYPE_H */
PK*J[ؼVn��include/ruby/internal/dosish.hnu�[���#ifndef RBIMPL_DOSISH_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_DOSISH_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Support for so-called dosish systems.
 */
#ifdef __CYGWIN__
#undef _WIN32
#endif

#if defined(_WIN32)
/*
  DOSISH mean MS-Windows style filesystem.
  But you should use more precise macros like DOSISH_DRIVE_LETTER, PATH_SEP,
  ENV_IGNORECASE or CASEFOLD_FILESYSTEM.
 */
#define DOSISH 1
# define DOSISH_DRIVE_LETTER
#endif

#ifdef _WIN32
#include "ruby/win32.h"
#endif

/** The delimiter of `PATH` environment variable. */
#if defined(DOSISH)
#define PATH_SEP ";"
#else
#define PATH_SEP ":"
#endif

/** Identical to #PATH_SEP, except it is of type `char`. */
#define PATH_SEP_CHAR PATH_SEP[0]

/**
 * @private
 *
 * @deprecated  This macro once was a thing in the old days, but makes no sense
 *              any  longer today.   Exists  here  for backwards  compatibility
 *              only.  You can safely forget about it.
 *
 * @internal
 *
 * For  historical interests:  there was  an operating  system called  Human68k
 * which used an environment variable called `"path"` for this purpose.
 */
#define PATH_ENV "PATH"

#if defined(DOSISH)
#define ENV_IGNORECASE
#endif

/**
 * Stone age  assumption was that  an operating  system supports only  one file
 * system at a  moment.  This macro was  to detect if such (one  and only) file
 * system  has case  sensitivity.   This  assumption is  largely  not true  any
 * longer; most operating systems can mount  many kinds of file systems side by
 * side.  Also there are file systems that  do or do not ignore cases depending
 * on configuration (e.g.  EXT4's `casefold` feature).
 *
 * This  macro is  still  used  internally (for  instance  Ruby level  constant
 * `File::FNM_SYSCASE` depends on it), but it is basically a wrong idea for you
 * to use it today.  Please just find another way.
 */
#ifndef CASEFOLD_FILESYSTEM
# if defined DOSISH
#   define CASEFOLD_FILESYSTEM 1
# else
#   define CASEFOLD_FILESYSTEM 0
# endif
#endif

#endif /* RBIMPL_DOSISH_H */
PK*J[M�&$99#include/ruby/internal/compiler_is.hnu�[���#ifndef RBIMPL_COMPILER_IS_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_COMPILER_IS_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_COMPILER_IS.
 */

/**
 * @brief   Checks if the compiler is of given brand.
 * @param   cc     Compiler brand, like `MSVC`.
 * @retval  true   It is.
 * @retval  false  It isn't.
 */
#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc

#include "ruby/internal/compiler_is/apple.h"
#include "ruby/internal/compiler_is/clang.h"
#include "ruby/internal/compiler_is/gcc.h"
#include "ruby/internal/compiler_is/intel.h"
#include "ruby/internal/compiler_is/msvc.h"
#include "ruby/internal/compiler_is/sunpro.h"
/* :TODO: Other possible compilers to support:
 *
 * - IBM  XL: recent  XL are  clang-backended  so some  tweaks like  we do  for
 *   Apple's might be needed.
 *
 * - ARM's armclang: ditto, it can be clang-backended.  */

#endif /* RBIMPL_COMPILER_IS_H */
PK*J[pC)..!include/ruby/internal/dllexport.hnu�[���#ifndef RBIMPL_DLLEXPORT_H                           /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_DLLEXPORT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Tweaking visibility of C variables/functions.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/compiler_is.h"

/**
 * Declaration of externally visible global variables.  Here "externally" means
 * they should  be visible  from extension  libraries.  Depending  on operating
 * systems (dynamic linkers,  to be precise), global variables inside  of a DLL
 * may  or may  not be  visible  form outside  of  that DLL  by default.   This
 * declaration manually tweaks  that default and ensures  the declared variable
 * be truly globally visible.
 *
 * ```CXX
 * extern VALUE foo;      // hidden on some OS
 * RUBY_EXTERN VALUE foo; // ensure visible
 * ```
 */
#undef RUBY_EXTERN
#if defined(RUBY_EXPORT)
# define RUBY_EXTERN extern
#elif defined(_WIN32)
# define RUBY_EXTERN extern __declspec(dllimport)
#else
# define RUBY_EXTERN extern
#endif

#ifndef RUBY_SYMBOL_EXPORT_BEGIN
# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */
#endif

#ifndef RUBY_SYMBOL_EXPORT_END
# define RUBY_SYMBOL_EXPORT_END   /* end */
#endif

#ifndef RUBY_FUNC_EXPORTED
# define RUBY_FUNC_EXPORTED /* void */
#endif

/** @endcond */

/** Shortcut macro equivalent to `RUBY_SYMBOL_EXPORT_BEGIN extern "C" {`.
 * \@shyouhei finds it handy. */
#if defined(__DOXYGEN__)
# define RBIMPL_SYMBOL_EXPORT_BEGIN() /* void */
#elif defined(__cplusplus)
# define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN extern "C" {
#else
# define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
#endif

/** Counterpart of #RBIMPL_SYMBOL_EXPORT_BEGIN */
#if defined(__DOXYGEN__)
# define RBIMPL_SYMBOL_EXPORT_END() /* void */
#elif defined(__cplusplus)
# define RBIMPL_SYMBOL_EXPORT_END() } RUBY_SYMBOL_EXPORT_END
#else
# define RBIMPL_SYMBOL_EXPORT_END()   RUBY_SYMBOL_EXPORT_END
#endif
#endif /* RBIMPL_DLLEXPORT_H */
PK*J[�1�QQinclude/ruby/internal/method.hnu�[���#ifndef RBIMPL_METHOD_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_METHOD_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Creation and modification of Ruby methods.
 */
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"
#include "ruby/backward/2/stdarg.h"

/**
 * @defgroup  defmethod  Defining methods
 *
 * There are some APIs to define a method from C.
 * These API takes a C function as a method body.
 *
 * ### Method body functions
 *
 * Method body functions must return a VALUE and
 * can be one of the following form:
 *
 * #### Fixed number of parameters
 *
 * This form is a normal C function, excepting it takes
 * a receiver object as the first argument.
 *
 * ```CXX
 * static VALUE my_method(VALUE self, VALUE x, VALUE y);
 * ```
 *
 * #### argc and argv style
 *
 * This form takes three parameters: argc, argv and self.
 * self is the receiver. argc is the number of arguments.
 * argv is a pointer to an array of the arguments.
 *
 * ```CXX
 * static VALUE my_method(int argc, VALUE *argv, VALUE self);
 * ```
 *
 * #### Ruby array style
 *
 * This form takes two parameters: self and args.
 * self is the receiver. args is an Array object which
 * contains the arguments.
 *
 * ```CXX
 * static VALUE my_method(VALUE self, VALUE args);
 * ```
 *
 * ### Number of parameters
 *
 * Method defining APIs takes the number of parameters which the
 * method will takes. This number is called argc.
 * argc can be:
 *
 *   - Zero or positive number.
 *     This means the method body function takes a fixed number of parameters.
 *
 *   - `-1`.
 *     This means the method body function is "argc and argv" style.
 *
 *   - `-2`.
 *     This means the method body function is "self and args" style.
 *
 * @{
 */

RBIMPL_SYMBOL_EXPORT_BEGIN()

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a method.
 *
 * @param[out]  klass  A module or a class.
 * @param[in]   mid    Name of the function.
 * @param[in]   func   The method body.
 * @param[in]   arity  The number of parameters.  See @ref defmethod.
 * @note        There are in fact 18 different prototypes for func.
 * @see         ::ruby::backward::cxxanyargs::define_method::rb_define_method
 */
void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a module function for a module.
 *
 * @param[out]  klass  A module or a class.
 * @param[in]   mid    Name of the function.
 * @param[in]   func   The method body.
 * @param[in]   arity  The number of parameters.  See @ref defmethod.
 * @note        There are in fact 18 different prototypes for func.
 * @see         ::ruby::backward::cxxanyargs::define_method::rb_define_module_function
 */
void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(ANYARGS), int arity);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines a global function.
 *
 * @param[in]  mid    Name of the function.
 * @param[in]  func   The method body.
 * @param[in]  arity  The number of parameters.  See @ref defmethod.
 * @note       There are in fact 18 different prototypes for func.
 * @see        ::ruby::backward::cxxanyargs::define_method::rb_define_global_function
 */
void rb_define_global_function(const char *mid, VALUE (*func)(ANYARGS), int arity);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines an undef of a method.  -- What?
 *
 * In ruby, there are two separate concepts called "undef" and "remove_method".
 * The thing you imagine when you  "un-define" a method is remove_method.  This
 * one on the  other hand is masking of a  previous method definition.  Suppose
 * for instance:
 *
 * ```ruby
 * class Foo
 *   def foo
 *   end
 * end
 *
 * class Bar < Foo
 *   def bar
 *     foo
 *   end
 * end
 *
 * class Baz < Foo
 *   undef foo            # <--- (*1)
 * end
 * ```
 *
 * This `undef foo` at `(*1)` must not eliminate `Foo#foo`, because that method
 * is also used from `Bar#bar`.  So  instead of physically executing the target
 * method, `undef` inserts  a special filtering entry to the  class (`Baz` this
 * case).  That entry,  when called, acts as  if there were no  methods at all.
 * But the original can still be accessible, via ways like `Bar#bar` above.
 *
 * @param[out]  klass            The class to insert an undef.
 * @param[in]   name             Name of the undef.
 * @exception   rb_eTypeError    `klass` is a non-module.
 * @exception   rb_eFrozenError  `klass` is frozen.
 * @see         rb_remove_method
 */
void rb_undef_method(VALUE klass, const char *name);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines an alias of a method.
 *
 * @param[in,out]  klass            The class which the original method belongs
 *                                  to; this is also  where the new method will
 *                                  belong to.
 * @param[in]      dst              A new name for the method.
 * @param[in]      src              The original name of the method.
 * @exception      rb_eTypeError    `klass` is a non-module.
 * @exception      rb_eFrozenError  `klass` is frozen.
 * @exception      rb_eNameError    There is  no such method named  as `src` in
 *                                  `klass`.
 *
 * @internal
 *
 * Above  description  is   in  fact  a  bit  inaccurate   because  it  ignores
 * Refinements.
 */
void rb_define_alias(VALUE klass, const char *dst, const char *src);

RBIMPL_ATTR_NONNULL(())
/**
 * Defines public accessor method(s) for an attribute.
 *
 * @param[out]  klass            The class which the attribute will belong to.
 * @param[in]   name             Name of the attribute.
 * @param[in]   read             Whether to define a getter method.
 * @param[in]   write            Whether to define a setter method.
 * @exception   rb_eTypeError    `klass` is a non-module.
 * @exception   rb_eFrozenError  `klass` is frozen.
 * @exception   rb_eNameError    `name` invalid as an attr e.g. an operator.
 */
void rb_define_attr(VALUE klass, const char *name, int read, int write);

/** @} */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RBIMPL_METHOD_H */
PK*J[�mo��$include/ruby/internal/warning_push.hnu�[���#ifndef RBIMPL_WARNING_PUSH_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_WARNING_PUSH_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_WARNING_PUSH.
 *
 * ### Q&A ###
 *
 * Q: Why all the macros defined in this file are function-like macros?
 *
 * A: Sigh.   This  is  because of  Doxygen.  Its  `SKIP_FUNCTION_MACROS = YES`
 *    configuration setting  requests us  that if  we want  it to  ignore these
 *    macros,  then we  have to  do  two things:  (1)  let them  be defined  as
 *    function-like macros,  and (2) place  them separately in their  own line,
 *    like below:
 *
 *    ```CXX
 *    // NG -- foo's type  considered something like `unsigned int`.
 *    RBIMPL_WARNING_PUSH
 *    int foo(void);
 *    RBIMPL_WARNING_POP
 *
 *    // OK -- the macros are ignored by Doxygen.
 *    RBIMPL_WARNING_PUSH()
 *    int foo(void);
 *    RBIMPL_WARNING_POP()
 *    ```
 */
#include "ruby/internal/compiler_is.h"
#include "ruby/internal/compiler_since.h"

#if defined(__DOXYGEN__)

/**
 * @private
 *
 * Pushes compiler warning state.
 */
#define RBIMPL_WARNING_PUSH()        __pragma(warning(push))

/**
 * @private
 *
 * Pops compiler warning state.
 */
#define RBIMPL_WARNING_POP()         __pragma(warning(pop))

/**
 * @private
 *
 * Turns a warning into a fatal error.
 *
 * @param  flag  A flag that represents the kind of warnings.
 */
#define RBIMPL_WARNING_ERROR(flag)   __pragma(warning(error: flag))

/**
 * @private
 *
 * Suppresses a warning.
 *
 * @param  flag  A flag that represents the kind of warnings.
 */
#define RBIMPL_WARNING_IGNORED(flag) __pragma(warning(disable: flag))

#elif RBIMPL_COMPILER_SINCE(MSVC, 12, 0, 0)
# /* Not sure exactly when but it seems VC++ 6.0 is a version with it.*/
# define RBIMPL_WARNING_PUSH()        __pragma(warning(push))
# define RBIMPL_WARNING_POP()         __pragma(warning(pop))
# define RBIMPL_WARNING_ERROR(flag)   __pragma(warning(error: flag))
# define RBIMPL_WARNING_IGNORED(flag) __pragma(warning(disable: flag))

#elif RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0)
# define RBIMPL_WARNING_PUSH()        __pragma(warning(push))
# define RBIMPL_WARNING_POP()         __pragma(warning(pop))
# define RBIMPL_WARNING_ERROR(flag)   __pragma(warning(error: flag))
# define RBIMPL_WARNING_IGNORED(flag) __pragma(warning(disable: flag))

#elif RBIMPL_COMPILER_IS(Clang) || RBIMPL_COMPILER_IS(Apple)
# /* Not sure exactly when but it seems LLVM 2.6.0 is a version with it. */
# define RBIMPL_WARNING_PRAGMA0(x)    _Pragma(# x)
# define RBIMPL_WARNING_PRAGMA1(x)    RBIMPL_WARNING_PRAGMA0(clang diagnostic x)
# define RBIMPL_WARNING_PRAGMA2(x, y) RBIMPL_WARNING_PRAGMA1(x # y)
# define RBIMPL_WARNING_PUSH()        RBIMPL_WARNING_PRAGMA1(push)
# define RBIMPL_WARNING_POP()         RBIMPL_WARNING_PRAGMA1(pop)
# define RBIMPL_WARNING_ERROR(flag)   RBIMPL_WARNING_PRAGMA2(error, flag)
# define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)

#elif RBIMPL_COMPILER_SINCE(GCC, 4, 6, 0)
# /* https://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Diagnostic-Pragmas.html */
# define RBIMPL_WARNING_PRAGMA0(x)    _Pragma(# x)
# define RBIMPL_WARNING_PRAGMA1(x)    RBIMPL_WARNING_PRAGMA0(GCC diagnostic x)
# define RBIMPL_WARNING_PRAGMA2(x, y) RBIMPL_WARNING_PRAGMA1(x # y)
# define RBIMPL_WARNING_PUSH()        RBIMPL_WARNING_PRAGMA1(push)
# define RBIMPL_WARNING_POP()         RBIMPL_WARNING_PRAGMA1(pop)
# define RBIMPL_WARNING_ERROR(flag)   RBIMPL_WARNING_PRAGMA2(error, flag)
# define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)

#else
# /* :FIXME: improve here */
# define RBIMPL_WARNING_PUSH()        /* void */
# define RBIMPL_WARNING_POP()         /* void */
# define RBIMPL_WARNING_ERROR(flag)   /* void */
# define RBIMPL_WARNING_IGNORED(flag) /* void */
#endif /* _MSC_VER */
/** @endcond */

#endif /* RBIMPL_WARNING_PUSH_H */
PK*J[��b���include/ruby/internal/assume.hnu�[���#ifndef RBIMPL_ASSUME_H                              /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_ASSUME_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RBIMPL_ASSUME / #RBIMPL_UNREACHABLE.
 *
 * These macros must be defined at once because:
 *
 * - #RBIMPL_ASSUME could fallback to #RBIMPL_UNREACHABLE.
 * - #RBIMPL_UNREACHABLE could fallback to #RBIMPL_ASSUME.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/compiler_since.h"
#include "ruby/internal/has/builtin.h"
#include "ruby/internal/warning_push.h"

/** @cond INTERNAL_MACRO */
#if defined(HAVE___ASSUME)
# define RBIMPL_HAVE___ASSUME
#endif
/** @endcond */

/** Wraps (or simulates) `__builtin_unreachable`. */
#if RBIMPL_HAS_BUILTIN(__builtin_unreachable)
# define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()

#elif defined(RBIMPL_HAVE___ASSUME)
# define RBIMPL_UNREACHABLE_RETURN(_) return (__assume(0), (_))

#else
# define RBIMPL_UNREACHABLE_RETURN(_) return (_)
#endif

/** Wraps (or simulates) `__builtin_unreachable`. */
#if RBIMPL_HAS_BUILTIN(__builtin_unreachable)
# define RBIMPL_UNREACHABLE __builtin_unreachable

#elif defined(RBIMPL_HAVE___ASSUME)
# define RBIMPL_UNREACHABLE() __assume(0)
#endif

/** Wraps (or simulates) `__assume`. */
#if RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0)
# /* icc warnings are false positives.  Ignore them. */
# /* "warning #2261: __assume expression with side effects discarded" */
# define RBIMPL_ASSUME(expr)     \
    RBIMPL_WARNING_PUSH()        \
    RBIMPL_WARNING_IGNORED(2261) \
    __assume(expr)              \
    RBIMPL_WARNING_POP()

#elif defined(RBIMPL_HAVE___ASSUME)
# define RBIMPL_ASSUME __assume

#elif RBIMPL_HAS_BUILTIN(__builtin_assume)
# define RBIMPL_ASSUME __builtin_assume

#elif ! defined(RBIMPL_UNREACHABLE)
# define RBIMPL_ASSUME(_) RBIMPL_CAST((void)(_))

#else
# define RBIMPL_ASSUME(_) \
    (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
#endif

#if ! defined(RBIMPL_UNREACHABLE)
# define RBIMPL_UNREACHABLE() RBIMPL_ASSUME(0)
#endif

#endif /* RBIMPL_ASSUME_H */
PK*J[��HI"I"include/ruby/util.hnu�[���#ifndef RUBY_UTIL_H                                  /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_UTIL_H 1
/**
 * @file
 * @author     $Author$
 * @date       Thu Mar  9 11:55:53 JST 1995
 * @copyright  Copyright (C) 1993-2007 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    DO NOT ADD RANDOM GARBAGES IN  THIS FILE!  Contents of this file
 *             reside here for historical reasons.  Find a right place for your
 *             API!
 */
#include "ruby/internal/config.h"

#ifdef STDC_HEADERS
# include <stddef.h>                       /* size_t */
#endif

#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>                    /* ssize_t */
#endif

#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/attr/nodiscard.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/restrict.h"
#include "ruby/internal/attr/returns_nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/defines.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/** an approximation of ceil(n * log10(2)), up to 1,048,576 (1<<20)
 * without overflow within 32-bit calculation
 */
#define DECIMAL_SIZE_OF_BITS(n) (((n) * 3010 + 9998) / 9999)

/** an approximation of decimal representation size for n-bytes */
#define DECIMAL_SIZE_OF_BYTES(n) DECIMAL_SIZE_OF_BITS((n) * CHAR_BIT)

/**
 * An approximation of decimal representation size. `expr` may be a
 * type name
 */
#define DECIMAL_SIZE_OF(expr) DECIMAL_SIZE_OF_BYTES(sizeof(expr))

/**
 * Character to  number mapping  like `'a'`  -> `10`, `'b'`  -> `11`  etc.  For
 * punctuation etc.,  the value is  -1.  "36"  terminology comes from  the fact
 * that this is the table behind `str.to_i(36)`.
 */
RUBY_EXTERN const signed char ruby_digit36_to_number_table[];

/**
 * Characters that Ruby accepts as hexadecimal digits.  This is `/\h/` expanded
 * into an array.
 */
RUBY_EXTERN const char ruby_hexdigits[];

/**
 * Scans the passed string, assuming the  string is a textual representation of
 * an  integer.  Stops  when encountering  something non-digit  for the  passed
 * base.
 *
 * @note        This does not understand minus sign.
 * @note        This does not understand e.g. `0x` prefix.
 * @note        It is a failure to pass `0` to `base`, unlike ruby_strtoul().
 * @param[in]   str       Target string of digits to interpret.
 * @param[in]   len       Number of bytes of `str`, or -1 to detect `NUL`.
 * @param[in]   base      Base, `2` to `36` inclusive.
 * @param[out]  retlen    Return value buffer.
 * @param[out]  overflow  Return value buffer.
 * @return      Interpreted numeric representation of `str`.
 * @post        `retlen` is the number of bytes scanned so far.
 * @post       `overflow` is  set to  true if  the string  represents something
 *              bigger than  `ULONG_MAX`.  Something meaningful  still returns;
 *              which is the designed belabour of C's unsigned arithmetic.
 */
unsigned long ruby_scan_digits(const char *str, ssize_t len, int base, size_t *retlen, int *overflow);

/** @old{ruby_scan_oct} */
#define scan_oct(s,l,e) ((int)ruby_scan_oct((s),(l),(e)))

RBIMPL_ATTR_NOALIAS()
RBIMPL_ATTR_NONNULL(())
/**
 * Interprets  the passed  string as  an  octal unsigned  integer.  Stops  when
 * encounters something not understood.
 *
 * @param[in]   str       C string to scan.
 * @param[in]   len       Length of `str`.
 * @param[out]  consumed  Return value buffer.
 * @return      Parsed integer.
 * @post        `ret` is the number of characters read.
 *
 * @internal
 *
 * No consideration  is made  for integer  overflows.  As  the return  value is
 * unsigned this function  has fully defined behaviour, but you  cannot know if
 * there was an integer wrap-around or not.
 */
unsigned long ruby_scan_oct(const char *str, size_t len, size_t *consumed);

/** @old{ruby_scan_hex} */
#define scan_hex(s,l,e) ((int)ruby_scan_hex((s),(l),(e)))

RBIMPL_ATTR_NONNULL(())
/**
 * Interprets the  passed string  a hexadecimal  unsigned integer.   Stops when
 * encounters something not understood.
 *
 * @param[in]   str  C string to scan.
 * @param[in]   len  Length of `str`.
 * @param[out]  ret  Return value buffer.
 * @return      Parsed integer.
 * @post        `ret` is the number of characters read.
 *
 * @internal
 *
 * No consideration  is made  for integer  overflows.  As  the return  value is
 * unsigned this function  has fully defined behaviour, but you  cannot know if
 * there was an integer wrap-around or not.
 */
unsigned long ruby_scan_hex(const char *str, size_t len, size_t *ret);

/**
 * Reentrant implementation of  quick sort.  If your  system provides something
 * (like  C11 qsort_s),  this is  a thin  wrapper of  that routine.   Otherwise
 * resorts to our own version.
 */
#ifdef HAVE_GNU_QSORT_R
# define ruby_qsort qsort_r
#else
void ruby_qsort(void *, const size_t, const size_t,
                int (*)(const void *, const void *, void *), void *);
#endif

RBIMPL_ATTR_NONNULL((1))
/**
 * Sets  an environment  variable.   In case  of  POSIX this  is  a wrapper  of
 * `setenv(3)`.  But there are systems which lack one.  We try hard emulating.
 *
 * @param[in]  key                  An environment variable.
 * @param[in]  val                  A value to be associated with `key`, or 0.
 * @exception  rb_eSystemCallError  `setenv(3)` failed for some reason.
 * @post       Environment variable  `key` is created if  necessary.  Its value
 *             is updated to be `val`.
 */
void ruby_setenv(const char *key, const char *val);

RBIMPL_ATTR_NONNULL(())
/**
 * Deletes the passed environment variable, if any.
 *
 * @param[in]  key                  An environment variable.
 * @exception  rb_eSystemCallError  `unsetenv(3)` failed for some reason.
 * @post       Environment variable `key` does not exist.
 */
void ruby_unsetenv(const char *key);

RBIMPL_ATTR_NODISCARD()
RBIMPL_ATTR_RESTRICT()
RBIMPL_ATTR_RETURNS_NONNULL()
RBIMPL_ATTR_NONNULL(())
/**
 * This is our  own version of `strdup(3)` that uses  ruby_xmalloc() instead of
 * system malloc (benefits our GC).
 *
 * @param[in]  str  Target C string to duplicate.
 * @return     An allocated C string holding the identical contents.
 * @note       Return value must be discarded using ruby_xfree().
 */
char *ruby_strdup(const char *str);

#undef strdup
/**
 * @alias{ruby_strdup}
 *
 * @internal
 *
 * @shyouhei doesn't  think it  is a wise  idea.  ruby_strdup()'s  return value
 * must be passed to ruby_xfree(), but this macro makes it almost impossible.
 */
#define strdup(s) ruby_strdup(s)

RBIMPL_ATTR_NODISCARD()
RBIMPL_ATTR_RESTRICT()
RBIMPL_ATTR_RETURNS_NONNULL()
/**
 * This is our  own version of `getcwd(3)` that uses  ruby_xmalloc() instead of
 * system malloc (benefits our GC).
 *
 * @return     An allocated C string holding the process working directory.
 * @note       Return value must be discarded using ruby_xfree().
 */
char *ruby_getcwd(void);

RBIMPL_ATTR_NONNULL((1))
/**
 * Our own locale-insensitive  version of `strtod(3)`.  The  conversion is done
 * as if the current locale is set  to the "C" locale, no matter actual runtime
 * locale settings.
 *
 * @param[in]   str     Decimal  or hexadecimal  representation  of a  floating
 *                      point number.
 * @param[out]  endptr  NULL, or an arbitrary pointer (overwritten on return).
 * @return      Converted number.
 * @post        If `endptr` is not NULL, it  is updated to point the first such
 *              byte where conversion failed.
 * @note        This function sets `errno` on failure.
 *                - `ERANGE`: Converted integer is out of range of `double`.
 * @see         William  D.   Clinger,  "How  to Read  Floating  Point  Numbers
 *              Accurately" in Proc.  ACM SIGPLAN '90, pp.  92-101.
 *              https://doi.org/10.1145/93542.93557
 */
double ruby_strtod(const char *str, char **endptr);

#undef strtod
/** @alias{ruby_strtod} */
#define strtod(s,e) ruby_strtod((s),(e))

RBIMPL_ATTR_NONNULL((2))
/**
 * Scans the  passed string, with calling  the callback function every  time it
 * encounters a  "word".  A word  here is a  series of characters  separated by
 * either a space (of IEEE 1003.1 section 7.3.1.1), or a `','`.
 *
 * @param[in]      str   Target string to split into each words.
 * @param[in]      func  Callback function.
 * @param[in,out]  argv  Passed as-is to `func`.
 */
void ruby_each_words(const char *str, void (*func)(const char *word, int len, void *argv), void *argv);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_UTIL_H */
PK*J[v���99include/ruby/config.hnu�[���#ifndef INCLUDE_RUBY_CONFIG_H
#define INCLUDE_RUBY_CONFIG_H 1
/* confdefs.h */
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define __EXTENSIONS__ 1
#define _ALL_SOURCE 1
#define _GNU_SOURCE 1
#define _POSIX_PTHREAD_SEMANTICS 1
#define _TANDEM_SOURCE 1
#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)")
#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop")
#define HAVE_STMT_AND_DECL_IN_EXPR 1
#define HAVE_PTHREAD_H 1
#define _REENTRANT 1
#define _THREAD_SAFE 1
#define HAVE_LIBPTHREAD 1
#define THREAD_IMPL_H "thread_pthread.h"
#define THREAD_IMPL_SRC "thread_pthread.c"
#define HAVE_LIBCRYPT 1
#define HAVE_LIBDL 1
#define HAVE_DIRENT_H 1
#define HAVE__BOOL 1
#define HAVE_STDBOOL_H 1
#define HAVE_SYS_WAIT_H 1
#define HAVE_GRP_H 1
#define HAVE_FCNTL_H 1
#define HAVE_FLOAT_H 1
#define HAVE_LANGINFO_H 1
#define HAVE_LIMITS_H 1
#define HAVE_LOCALE_H 1
#define HAVE_MALLOC_H 1
#define HAVE_PWD_H 1
#define HAVE_SANITIZER_ASAN_INTERFACE_H 1
#define HAVE_STDALIGN_H 1
#define HAVE_STDIO_H 1
#define HAVE_SYS_EVENTFD_H 1
#define HAVE_SYS_FCNTL_H 1
#define HAVE_SYS_FILE_H 1
#define HAVE_SYS_IOCTL_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_PRCTL_H 1
#define HAVE_SYS_RANDOM_H 1
#define HAVE_SYS_RESOURCE_H 1
#define HAVE_SYS_SELECT_H 1
#define HAVE_SYS_SENDFILE_H 1
#define HAVE_SYS_SOCKET_H 1
#define HAVE_SYS_SYSCALL_H 1
#define HAVE_SYS_SYSMACROS_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TIMES_H 1
#define HAVE_SYS_UIO_H 1
#define HAVE_SYSCALL_H 1
#define HAVE_TIME_H 1
#define HAVE_UCONTEXT_H 1
#define HAVE_UTIME_H 1
#define HAVE_SYS_EPOLL_H 1
#define HAVE_STDATOMIC_H 1
#define HAVE_X86INTRIN_H 1
#if defined(__x86_64__)
#define HAVE_X86INTRIN_H 1
#endif
#define HAVE_GMP_H 1
#define HAVE_LIBGMP 1
#define HAVE_TYPEOF 1
#define restrict __restrict
#define HAVE_LONG_LONG 1
#define HAVE_OFF_T 1
#define SIZEOF_INT 4
#define SIZEOF_SHORT 2
#define SIZEOF_LONG 8
#define SIZEOF_LONG_LONG 8
#define SIZEOF___INT64 0
#define SIZEOF___INT128 16
#define SIZEOF_OFF_T 8
#define SIZEOF_VOIDP 8
#define SIZEOF_FLOAT 4
#define SIZEOF_DOUBLE 8
#define SIZEOF_TIME_T 8
#define SIZEOF_CLOCK_T 8
#define RBIMPL_ATTR_PACKED_STRUCT_BEGIN()
#define RBIMPL_ATTR_PACKED_STRUCT_END() __attribute__((packed))
#define USE_UNALIGNED_MEMBER_ACCESS 1
#define PRI_LL_PREFIX "ll"
#define HAVE_PID_T 1
#define rb_pid_t pid_t
#define SIGNEDNESS_OF_PID_T -1
#define PIDT2NUM(v) INT2NUM(v)
#define NUM2PIDT(v) NUM2INT(v)
#define PRI_PIDT_PREFIX PRI_INT_PREFIX
#define HAVE_UID_T 1
#define rb_uid_t uid_t
#define SIGNEDNESS_OF_UID_T +1
#define UIDT2NUM(v) UINT2NUM(v)
#define NUM2UIDT(v) NUM2UINT(v)
#define PRI_UIDT_PREFIX PRI_INT_PREFIX
#define HAVE_GID_T 1
#define rb_gid_t gid_t
#define SIGNEDNESS_OF_GID_T +1
#define GIDT2NUM(v) UINT2NUM(v)
#define NUM2GIDT(v) NUM2UINT(v)
#define PRI_GIDT_PREFIX PRI_INT_PREFIX
#define HAVE_TIME_T 1
#define rb_time_t time_t
#define SIGNEDNESS_OF_TIME_T -1
#define TIMET2NUM(v) LONG2NUM(v)
#define NUM2TIMET(v) NUM2LONG(v)
#define PRI_TIMET_PREFIX PRI_LONG_PREFIX
#define HAVE_DEV_T 1
#define rb_dev_t dev_t
#define SIGNEDNESS_OF_DEV_T +1
#define DEVT2NUM(v) ULONG2NUM(v)
#define NUM2DEVT(v) NUM2ULONG(v)
#define PRI_DEVT_PREFIX PRI_LONG_PREFIX
#define HAVE_MODE_T 1
#define rb_mode_t mode_t
#define SIGNEDNESS_OF_MODE_T +1
#define MODET2NUM(v) UINT2NUM(v)
#define NUM2MODET(v) NUM2UINT(v)
#define PRI_MODET_PREFIX PRI_INT_PREFIX
#define HAVE_RLIM_T 1
#define rb_rlim_t rlim_t
#define SIGNEDNESS_OF_RLIM_T +1
#define RLIM2NUM(v) ULONG2NUM(v)
#define NUM2RLIM(v) NUM2ULONG(v)
#define PRI_RLIM_PREFIX PRI_LONG_PREFIX
#define HAVE_OFF_T 1
#define rb_off_t off_t
#define SIGNEDNESS_OF_OFF_T -1
#define OFFT2NUM(v) LONG2NUM(v)
#define NUM2OFFT(v) NUM2LONG(v)
#define PRI_OFFT_PREFIX PRI_LONG_PREFIX
#define HAVE_CLOCKID_T 1
#define rb_clockid_t clockid_t
#define SIGNEDNESS_OF_CLOCKID_T -1
#define CLOCKID2NUM(v) INT2NUM(v)
#define NUM2CLOCKID(v) NUM2INT(v)
#define PRI_CLOCKID_PREFIX PRI_INT_PREFIX
#define HAVE_VA_ARGS_MACRO 1
#define HAVE__ALIGNOF 1
#define CONSTFUNC(x) __attribute__ ((__const__)) x
#define PUREFUNC(x) __attribute__ ((__pure__)) x
#define NORETURN(x) __attribute__ ((__noreturn__)) x
#define DEPRECATED(x) __attribute__ ((__deprecated__)) x
#define DEPRECATED_BY(n,x) __attribute__ ((__deprecated__("by "#n))) x
#define NOINLINE(x) __attribute__ ((__noinline__)) x
#define ALWAYS_INLINE(x) __attribute__ ((__always_inline__)) x
#define NO_SANITIZE(san, x) __attribute__ ((__no_sanitize__(san))) x
#define NO_SANITIZE_ADDRESS(x) __attribute__ ((__no_sanitize_address__)) x
#define NO_ADDRESS_SAFETY_ANALYSIS(x) __attribute__ ((__no_address_safety_analysis__)) x
#define WARN_UNUSED_RESULT(x) __attribute__ ((__warn_unused_result__)) x
#define MAYBE_UNUSED(x) __attribute__ ((__unused__)) x
#define ERRORFUNC(mesg,x) __attribute__ ((__error__ mesg)) x
#define WARNINGFUNC(mesg,x) __attribute__ ((__warning__ mesg)) x
#define WEAK(x) __attribute__ ((__weak__)) x
#define HAVE_FUNC_WEAK 1
#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
#define HAVE_NULLPTR 1
#define FUNC_UNOPTIMIZED(x) __attribute__ ((__optimize__("O0"))) x
#define FUNC_MINIMIZED(x) __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1
#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) type prot __attribute__((alias(#name)));
#define RUBY_ALIAS_FUNCTION_VOID(prot, name, args) RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)
#define HAVE_GCC_ATOMIC_BUILTINS 1
#define HAVE_GCC_SYNC_BUILTINS 1
#define HAVE___BUILTIN_UNREACHABLE 1
#define RUBY_FUNC_EXPORTED __attribute__ ((__visibility__("default"))) extern
#define RUBY_FUNC_NONNULL(n,x) __attribute__ ((__nonnull__(n))) x
#define RUBY_FUNCTION_NAME_STRING __func__
#define ENUM_OVER_INT 1
#define HAVE_DECL_SYS_NERR 1
#define HAVE_DECL_GETENV 1
#define SIZEOF_SIZE_T 8
#define SIZEOF_PTRDIFF_T 8
#define SIZEOF_DEV_T 8
#define PRI_SIZE_PREFIX "z"
#define PRI_PTRDIFF_PREFIX "t"
#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
#define HAVE_STRUCT_STAT_ST_BLOCKS 1
#define HAVE_STRUCT_STAT_ST_RDEV 1
#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T
#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T
#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG
#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T
#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T
#define HAVE_STRUCT_STAT_ST_ATIM 1
#define HAVE_STRUCT_STAT_ST_MTIM 1
#define HAVE_STRUCT_STAT_ST_CTIM 1
#define HAVE_STRUCT_STATX_STX_BTIME 1
#define HAVE_STRUCT_TIMEVAL 1
#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T
#define HAVE_STRUCT_TIMESPEC 1
#define HAVE_STRUCT_TIMEZONE 1
#define HAVE_RB_FD_INIT 1
#define HAVE_INT8_T 1
#define SIZEOF_INT8_T 1
#define HAVE_UINT8_T 1
#define SIZEOF_UINT8_T 1
#define HAVE_INT16_T 1
#define SIZEOF_INT16_T 2
#define HAVE_UINT16_T 1
#define SIZEOF_UINT16_T 2
#define HAVE_INT32_T 1
#define SIZEOF_INT32_T 4
#define HAVE_UINT32_T 1
#define SIZEOF_UINT32_T 4
#define HAVE_INT64_T 1
#define SIZEOF_INT64_T 8
#define HAVE_UINT64_T 1
#define SIZEOF_UINT64_T 8
#define HAVE_INT128_T 1
#define int128_t __int128
#define SIZEOF_INT128_T SIZEOF___INT128
#define HAVE_UINT128_T 1
#define uint128_t unsigned __int128
#define SIZEOF_UINT128_T SIZEOF___INT128
#define HAVE_INTPTR_T 1
#define SIZEOF_INTPTR_T 8
#define HAVE_UINTPTR_T 1
#define SIZEOF_UINTPTR_T 8
#define HAVE_SSIZE_T 1
#define SIZEOF_SSIZE_T 8
#define STACK_END_ADDRESS __libc_stack_end
#define GETGROUPS_T gid_t
#define HAVE_ALLOCA_H 1
#define HAVE_ALLOCA 1
#define HAVE_DUP 1
#define HAVE_DUP2 1
#define HAVE_ACOSH 1
#define HAVE_CBRT 1
#define HAVE_CRYPT 1
#define HAVE_ERF 1
#define HAVE_EXPLICIT_BZERO 1
#define HAVE_FFS 1
#define HAVE_FLOCK 1
#define HAVE_HYPOT 1
#define HAVE_LGAMMA_R 1
#define HAVE_MEMMOVE 1
#define HAVE_NAN 1
#define HAVE_NEXTAFTER 1
#define HAVE_STRCHR 1
#define HAVE_STRERROR 1
#define HAVE_STRSTR 1
#define HAVE_TGAMMA 1
#define HAVE_ISFINITE 1
#define SPT_TYPE SPT_REUSEARGV
#define HAVE_SIGNBIT 1
#define HAVE_FORK 1
#define HAVE_VFORK 1
#define HAVE_WORKING_VFORK 1
#define HAVE_WORKING_FORK 1
#define HAVE__LONGJMP 1
#define HAVE_ATAN2L 1
#define HAVE_ATAN2F 1
#define HAVE_DECL_ATOMIC_SIGNAL_FENCE 1
#define HAVE_CHMOD 1
#define HAVE_CHOWN 1
#define HAVE_CHROOT 1
#define HAVE_CLOCK_GETTIME 1
#define HAVE_COPY_FILE_RANGE 1
#define HAVE_COSH 1
#define HAVE_CRYPT_R 1
#define HAVE_DIRFD 1
#define HAVE_DL_ITERATE_PHDR 1
#define HAVE_DLOPEN 1
#define HAVE_DLADDR 1
#define HAVE_DUP3 1
#define HAVE_EACCESS 1
#define HAVE_ENDGRENT 1
#define HAVE_EVENTFD 1
#define HAVE_EXECL 1
#define HAVE_EXECLE 1
#define HAVE_EXECV 1
#define HAVE_EXECVE 1
#define HAVE_FCHDIR 1
#define HAVE_FCHMOD 1
#define HAVE_FCHOWN 1
#define HAVE_FCNTL 1
#define HAVE_FDATASYNC 1
#define HAVE_FDOPENDIR 1
#define HAVE_FMOD 1
#define HAVE_FSTATAT 1
#define HAVE_FSYNC 1
#define HAVE_FTRUNCATE 1
#define HAVE_FTRUNCATE64 1
#define HAVE_GETCWD 1
#define HAVE_GETEGID 1
#define HAVE_GETENTROPY 1
#define HAVE_GETEUID 1
#define HAVE_GETGID 1
#define HAVE_GETGRNAM 1
#define HAVE_GETGRNAM_R 1
#define HAVE_GETGROUPS 1
#define HAVE_GETLOGIN 1
#define HAVE_GETLOGIN_R 1
#define HAVE_GETPGID 1
#define HAVE_GETPGRP 1
#define HAVE_GETPPID 1
#define HAVE_GETPRIORITY 1
#define HAVE_GETPWNAM 1
#define HAVE_GETPWNAM_R 1
#define HAVE_GETPWUID 1
#define HAVE_GETPWUID_R 1
#define HAVE_GETRANDOM 1
#define HAVE_GETRESGID 1
#define HAVE_GETRESUID 1
#define HAVE_GETRLIMIT 1
#define HAVE_GETSID 1
#define HAVE_GETTIMEOFDAY 1
#define HAVE_GETUID 1
#define HAVE_GMTIME_R 1
#define HAVE_INITGROUPS 1
#define HAVE_IOCTL 1
#define HAVE_KILL 1
#define HAVE_KILLPG 1
#define HAVE_LCHOWN 1
#define HAVE_LINK 1
#define HAVE_LLABS 1
#define HAVE_LOCKF 1
#define HAVE_LOG2 1
#define HAVE_LSTAT 1
#define HAVE_LUTIMES 1
#define HAVE_MALLOC_USABLE_SIZE 1
#define HAVE_MALLOC_TRIM 1
#define HAVE_MBLEN 1
#define HAVE_MEMALIGN 1
#define HAVE_WRITEV 1
#define HAVE_MEMRCHR 1
#define HAVE_MEMMEM 1
#define HAVE_MKFIFO 1
#define HAVE_MKNOD 1
#define HAVE_MKTIME 1
#define HAVE_MMAP 1
#define HAVE_MREMAP 1
#define HAVE_OPENAT 1
#define HAVE_PCLOSE 1
#define HAVE_PIPE 1
#define HAVE_PIPE2 1
#define HAVE_POLL 1
#define HAVE_POPEN 1
#define HAVE_POSIX_FADVISE 1
#define HAVE_POSIX_MADVISE 1
#define HAVE_POSIX_MEMALIGN 1
#define HAVE_PPOLL 1
#define HAVE_PREAD 1
#define HAVE_PWRITE 1
#define HAVE_QSORT_R 1
#define HAVE_READLINK 1
#define HAVE_REALPATH 1
#define HAVE_ROUND 1
#define HAVE_SCHED_GETAFFINITY 1
#define HAVE_SEEKDIR 1
#define HAVE_SENDFILE 1
#define HAVE_SETEGID 1
#define HAVE_SETENV 1
#define HAVE_SETEUID 1
#define HAVE_SETGID 1
#define HAVE_SETGROUPS 1
#define HAVE_SETPGID 1
#define HAVE_SETPGRP 1
#define HAVE_SETREGID 1
#define HAVE_SETRESGID 1
#define HAVE_SETRESUID 1
#define HAVE_SETREUID 1
#define HAVE_SETRLIMIT 1
#define HAVE_SETSID 1
#define HAVE_SETUID 1
#define HAVE_SHUTDOWN 1
#define HAVE_SIGACTION 1
#define HAVE_SIGALTSTACK 1
#define HAVE_SIGPROCMASK 1
#define HAVE_SINH 1
#define HAVE_SNPRINTF 1
#define HAVE_SYMLINK 1
#define HAVE_SYSCALL 1
#define HAVE_SYSCONF 1
#define HAVE_SYSTEM 1
#define HAVE_TANH 1
#define HAVE_TELLDIR 1
#define HAVE_TIMEGM 1
#define HAVE_TIMES 1
#define HAVE_TRUNCATE 1
#define HAVE_TRUNCATE64 1
#define HAVE_TZSET 1
#define HAVE_UMASK 1
#define HAVE_UNSETENV 1
#define HAVE_UTIMENSAT 1
#define HAVE_UTIMES 1
#define HAVE_WAIT4 1
#define HAVE_WAITPID 1
#define HAVE_STATX 1
#define HAVE_CRYPT_H 1
#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1
#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1
#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1
#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
#define HAVE_BUILTIN___BUILTIN_BSWAP32 1
#define HAVE_BUILTIN___BUILTIN_BSWAP64 1
#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1
#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1
#define HAVE_BUILTIN___BUILTIN_CLZ 1
#define HAVE_BUILTIN___BUILTIN_CLZL 1
#define HAVE_BUILTIN___BUILTIN_CLZLL 1
#define HAVE_BUILTIN___BUILTIN_CTZ 1
#define HAVE_BUILTIN___BUILTIN_CTZLL 1
#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1
#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1
#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1
#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1
#define HAVE_BUILTIN___BUILTIN_TRAP 1
#define HAVE_BUILTIN___BUILTIN_EXPECT 1
#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1
#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW_P 1
#define USE___BUILTIN_ADD_OVERFLOW_LONG_LONG 1
#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1
#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW_P 1
#define USE___BUILTIN_SUB_OVERFLOW_LONG_LONG 1
#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1
#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1
#define USE___BUILTIN_MUL_OVERFLOW_LONG_LONG 1
#define HAVE_GNU_QSORT_R 1
#define ATAN2_INF_C99 1
#define HAVE_CLOCK_GETRES 1
#define HAVE_LIBRT 1
#define HAVE_LIBRT 1
#define HAVE_TIMER_CREATE 1
#define HAVE_TIMER_SETTIME 1
#define HAVE_STRUCT_TM_TM_ZONE 1
#define HAVE_TM_ZONE 1
#define HAVE_STRUCT_TM_TM_GMTOFF 1
#define HAVE_DAYLIGHT 1
#define NEGATIVE_TIME_T 1
#define POSIX_SIGNAL 1
#define HAVE_SIG_T 1
#define RSHIFT(x,y) ((x)>>(int)(y))
#define USE_COPY_FILE_RANGE 1
#define HAVE__SC_CLK_TCK 1
#define STACK_GROW_DIRECTION -1
#define COROUTINE_H "coroutine/amd64/Context.h"
#define HAVE_SCHED_YIELD 1
#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1
#define HAVE_PTHREAD_ATTR_GETSTACK 1
#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
#define HAVE_PTHREAD_SETNAME_NP 1
#define HAVE_PTHREAD_SIGMASK 1
#define HAVE_PTHREAD_GETATTR_NP 1
#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name)
#define SET_ANOTHER_THREAD_NAME(thid,name) pthread_setname_np(thid, name)
#define RB_THREAD_LOCAL_SPECIFIER _Thread_local
#define DEFINE_MCONTEXT_PTR(mc, uc) mcontext_t *mc = &(uc)->uc_mcontext
#define HAVE_GETCONTEXT 1
#define HAVE_SETCONTEXT 1
#define HAVE_SYS_USER_H 1
#define HAVE_CONST_PAGE_SIZE 0
#define IOCTL_REQ_TYPE unsigned long
#define NUM2IOCTLREQ(num) NUM2ULONG(num)
#define USE_ELF 1
#define HAVE_ELF_H 1
#define HAVE_LIBZ 1
#define HAVE_BACKTRACE 1
#define DLEXT_MAXLEN 3
#define DLEXT ".so"
#define SOEXT ".so"
#define ENABLE_MULTIARCH 1
#define LIBDIR_BASENAME "lib64"
#define HAVE__SETJMP 1
#define RUBY_SETJMP(env) _setjmp((env))
#define RUBY_LONGJMP(env,val) _longjmp((env),val)
#define RUBY_JMP_BUF jmp_buf
#define USE_MODULAR_GC 0
#define USE_YJIT 0
#define USE_RJIT 1
#define RUBY_LIB_VERSION_BLANK 1
#define RUBY_PLATFORM "x86_64-linux"
#define RB_DEFAULT_PARSER RB_DEFAULT_PARSER_PRISM
#endif /* INCLUDE_RUBY_CONFIG_H */
PK*J[7�5	5	include/ruby/intern.hnu�[���#ifndef RUBY_INTERN_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_INTERN_H 1
/**
 * @file
 * @author     $Author$
 * @date       Thu Jun 10 14:22:17 JST 1993
 * @copyright  Copyright (C) 1993-2007 Yukihiro Matsumoto
 * @copyright  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.
 * @copyright  Copyright (C) 2000  Information-technology Promotion Agency, Japan
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "ruby/internal/config.h"
#include "ruby/defines.h"

#include <stdarg.h>

#include "ruby/st.h"

/*
 * Functions and variables that are used by more than one source file of
 * the kernel.
 */

#include "ruby/internal/intern/array.h"
#include "ruby/internal/intern/bignum.h"
#include "ruby/internal/intern/class.h"
#include "ruby/internal/intern/compar.h"
#include "ruby/internal/intern/complex.h"
#include "ruby/internal/intern/cont.h"
#include "ruby/internal/intern/dir.h"
#include "ruby/internal/intern/enum.h"
#include "ruby/internal/intern/enumerator.h"
#include "ruby/internal/intern/error.h"
#include "ruby/internal/intern/eval.h"
#include "ruby/internal/intern/file.h"
#include "ruby/internal/intern/hash.h"
#include "ruby/internal/intern/io.h"
#include "ruby/internal/intern/load.h"
#include "ruby/internal/intern/marshal.h"
#include "ruby/internal/intern/numeric.h"
#include "ruby/internal/intern/object.h"
#include "ruby/internal/intern/parse.h"
#include "ruby/internal/intern/proc.h"
#include "ruby/internal/intern/process.h"
#include "ruby/internal/intern/random.h"
#include "ruby/internal/intern/range.h"
#include "ruby/internal/intern/rational.h"
#include "ruby/internal/intern/re.h"
#include "ruby/internal/intern/ruby.h"
#include "ruby/internal/intern/select.h"
#include "ruby/internal/intern/signal.h"
#include "ruby/internal/intern/sprintf.h"
#include "ruby/internal/intern/string.h"
#include "ruby/internal/intern/struct.h"
#include "ruby/internal/intern/thread.h"
#include "ruby/internal/intern/time.h"
#include "ruby/internal/intern/variable.h"
#include "ruby/internal/intern/vm.h"

#endif /* RUBY_INTERN_H */
PK*J[�8�'#u#uinclude/ruby/debug.hnu�[���#ifndef RB_DEBUG_H                                   /*-*-C++-*-vi:se ft=cpp:*/
#define RB_DEBUG_H 1
/**
 * @file
 * @author     $Author: ko1 $
 * @date       Tue Nov 20 20:35:08 2012
 * @copyright  Copyright (C) 2012 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/returns_nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/event.h"
#include "ruby/internal/value.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/* Note: This file contains experimental APIs. */
/* APIs can be replaced at Ruby 2.0.1 or later */

/**
 * @name Frame-profiling APIs
 *
 * @{
 */

RBIMPL_ATTR_NONNULL((3))
/**
 * Queries mysterious "frame"s of the given range.
 *
 * The returned values are opaque backtrace  pointers, which you are allowed to
 * issue a very  limited set of operations listed below.   Don't call arbitrary
 * ruby methods.
 *
 * @param[in]   start  Start position (0 means the topmost).
 * @param[in]   limit  Number objects of `buff`.
 * @param[out]  buff   Return buffer.
 * @param[out]  lines  Return buffer.
 * @return      Number of objects filled into `buff`.
 * @post        `buff` is filled with backtrace pointers.
 * @post        `lines` is filled with `__LINE__` of each backtraces.
 *
 * @internal
 *
 * @shyouhei  doesn't  like  this  abuse  of  ::VALUE.   It  should  have  been
 * `const struct rb_callable_method_entry_struct *`.
 */
int rb_profile_frames(int start, int limit, VALUE *buff, int *lines);

/**
 * Queries mysterious "frame"s of the given range.
 *
 * A per-thread version of rb_profile_frames().
 * Arguments and return values are the same with rb_profile_frames() with the
 * exception of the first argument _thread_, which accepts the Thread to be
 * profiled/queried.
 *
 * @param[in]   thread The Ruby Thread to be profiled.
 * @param[in]   start  Start position (0 means the topmost).
 * @param[in]   limit  Number objects of `buff`.
 * @param[out]  buff   Return buffer.
 * @param[out]  lines  Return buffer.
 * @return      Number of objects filled into `buff`.
 * @post        `buff` is filled with backtrace pointers.
 * @post        `lines` is filled with `__LINE__` of each backtraces.
 */
int rb_profile_thread_frames(VALUE thread, int start, int limit, VALUE *buff, int *lines);

/**
 * Queries the path of the passed backtrace.
 *
 * @param[in]  frame      What rb_profile_frames() returned.
 * @retval     RUBY_Qnil  The frame is implemented in C etc.
 * @retval     otherwise  Where `frame` is running.
 */
VALUE rb_profile_frame_path(VALUE frame);

/**
 * Identical  to  rb_profile_frame_path(),  except   it  tries  to  expand  the
 * returning  path.   In case  the  path  is  `require`-d from  something  else
 * rb_profile_frame_path() can return relative paths.   This one tries to avoid
 * that.
 *
 * @param[in]  frame      What rb_profile_frames() returned.
 * @retval     "<cfunc>"  The frame is in C.
 * @retval     RUBY_Qnil  Can't infer real path (inside of `eval` etc.).
 * @retval     otherwise  Where `frame` is running.
 */
VALUE rb_profile_frame_absolute_path(VALUE frame);

/**
 * Queries human-readable "label" string.  This is `"<main>"` for the toplevel,
 * `"<compiled>"` for evaluated  ones, method name for methods,  class name for
 * classes.
 *
 * @param[in]  frame         What rb_profile_frames() returned.
 * @retval     RUBY_Qnil     Can't infer the label (C etc.).
 * @retval     "<main>"      The frame is global toplevel.
 * @retval     "<compiled>"  The frame is dynamic.
 * @retval     otherwise     Label of the frame.
 */
VALUE rb_profile_frame_label(VALUE frame);

/**
 * Identical  to rb_profile_frame_label(),  except  it does  not "qualify"  the
 * result.  Consider the following backtrace:
 *
 * ```ruby
 * def bar
 *   caller_locations
 * end
 *
 * def foo
 *   [1].map { bar }.first
 * end
 *
 * obj = foo.first
 * obj.label      # => "block in foo"
 * obj.base_label # => "foo"
 * ```
 *
 * @param[in]  frame         What rb_profile_frames() returned.
 * @retval     RUBY_Qnil     Can't infer the label (C etc.).
 * @retval     "<main>"      The frame is global toplevel.
 * @retval     "<compiled>"  The frame is dynamic.
 * @retval     otherwise     Base label of the frame.
 */
VALUE rb_profile_frame_base_label(VALUE frame);

/**
 * Identical to rb_profile_frame_label(), except it returns a qualified result.
 *
 * @param[in]  frame         What rb_profile_frames() returned.
 * @retval     RUBY_Qnil     Can't infer the label (C etc.).
 * @retval     "<main>"      The frame is global toplevel.
 * @retval     "<compiled>"  The frame is dynamic.
 * @retval     otherwise     Qualified label of the frame.
 *
 * @internal
 *
 * As  of writing  there is  no way  to obtain  this return  value from  a Ruby
 * script.  This may change  in future (it took 8 years  and still no progress,
 * though).
 */
VALUE rb_profile_frame_full_label(VALUE frame);

/**
 * Queries the first  line of the method  of the passed frame  pointer.  Can be
 * handy when for instance a debugger want to display the frame in question.
 *
 * @param[in]  frame      What rb_profile_frames() returned.
 * @retval     RUBY_Qnil  Can't infer the line (C etc.).
 * @retval     otherwise  Line number of the method in question.
 */
VALUE rb_profile_frame_first_lineno(VALUE frame);

/**
 * Queries the class path of the method that the passed frame represents.
 *
 * @param[in]  frame      What rb_profile_frames() returned.
 * @retval     RUBY_Qnil  Can't infer the class (global toplevel etc.).
 * @retval     otherwise  Class path as in rb_class_path().
 */
VALUE rb_profile_frame_classpath(VALUE frame);

/**
 * Queries if the method of the passed frame is a singleton class.
 *
 * @param[in]  frame        What rb_profile_frames() returned.
 * @retval     RUBY_Qtrue   It is a singleton method.
 * @retval     RUBY_Qfalse  Otherwise (normal method/non-method).
 */
VALUE rb_profile_frame_singleton_method_p(VALUE frame);

/**
 * Queries the name of the method of the passed frame.
 *
 * @param[in]  frame      What rb_profile_frames() returned.
 * @retval     RUBY_Qnil  The frame in question is not a method.
 * @retval     otherwise  Name of the method of the frame.
 */
VALUE rb_profile_frame_method_name(VALUE frame);

/**
 * Identical  to  rb_profile_frame_method_name(),  except  it  "qualifies"  the
 * return value with its defining class.
 *
 * @param[in]  frame      What rb_profile_frames() returned.
 * @retval     RUBY_Qnil  The frame in question is not a method.
 * @retval     otherwise  Qualified name of the method of the frame.
 */
VALUE rb_profile_frame_qualified_method_name(VALUE frame);

/** @} */

/**
 * @name Debug inspector APIs
 *
 * @{
 */

/** Opaque struct representing a debug inspector. */
typedef struct rb_debug_inspector_struct rb_debug_inspector_t;

/**
 * Type  of   the  callback   function  passed   to  rb_debug_inspector_open().
 * Inspection  shall happen  only inside  of  them.  The  passed pointers  gets
 * invalidated once after the callback returns.
 *
 * @param[in]      dc    A debug context.
 * @param[in,out]  data  What was passed to rb_debug_inspector_open().
 * @return         What would be the return value of rb_debug_inspector_open().
 */
typedef VALUE (*rb_debug_inspector_func_t)(const rb_debug_inspector_t *dc, void *data);

/**
 * Prepares, executes, then cleans up a debug session.
 *
 * @param[in]      func  A callback to run inside of a debug session.
 * @param[in,out]  data  Passed as-is to `func`.
 * @return         What was returned from `func`.
 */
VALUE rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data);

/**
 * Queries  the backtrace  object  of the  context.   This is  as  if you  call
 * `caller_locations` at the point of debugger.
 *
 * @param[in]  dc  A debug context.
 * @return     An array  of `Thread::Backtrace::Location` which  represents the
 *             current point of execution at `dc`.

 */
VALUE rb_debug_inspector_backtrace_locations(const rb_debug_inspector_t *dc);

/**
 * Queries the current receiver of the passed context's upper frame.
 *
 * @param[in]  dc           A debug context.
 * @param[in]  index        Index of the frame from top to bottom.
 * @exception  rb_eArgError `index` out of range.
 * @return     The current receiver at `index`-th frame.
 */
VALUE rb_debug_inspector_frame_self_get(const rb_debug_inspector_t *dc, long index);

/**
 * Queries the current class of the passed context's upper frame.
 *
 * @param[in]  dc           A debug context.
 * @param[in]  index        Index of the frame from top to bottom.
 * @exception  rb_eArgError `index` out of range.
 * @return     The current class at `index`-th frame.
 */
VALUE rb_debug_inspector_frame_class_get(const rb_debug_inspector_t *dc, long index);

/**
 * Queries the binding of the passed context's upper frame.
 *
 * @param[in]  dc           A debug context.
 * @param[in]  index        Index of the frame from top to bottom.
 * @exception  rb_eArgError `index` out of range.
 * @return     The binding at `index`-th frame.
 */
VALUE rb_debug_inspector_frame_binding_get(const rb_debug_inspector_t *dc, long index);

/**
 * Queries the instruction sequence of the passed context's upper frame.
 *
 * @param[in]  dc           A debug context.
 * @param[in]  index        Index of the frame from top to bottom.
 * @exception  rb_eArgError `index` out of range.
 * @retval     RUBY_Qnil    `index`-th frame is not in Ruby (C etc.).
 * @retval     otherwise    An instance  of `RubyVM::InstructionSequence` which
 *                          represents the  instruction sequence  at `index`-th
 *                          frame.
 */
VALUE rb_debug_inspector_frame_iseq_get(const rb_debug_inspector_t *dc, long index);

/**
 * Queries the depth of the passed context's upper frame.
 *
 * Note that the depth is not same as the frame index because debug_inspector
 * skips some special frames but the depth counts all frames.
 *
 * @param[in]  dc           A debug context.
 * @param[in]  index        Index of the frame from top to bottom.
 * @exception  rb_eArgError `index` out of range.
 * @retval     The depth at `index`-th frame in Integer.
 */
VALUE rb_debug_inspector_frame_depth(const rb_debug_inspector_t *dc, long index);

// A macro to recognize `rb_debug_inspector_frame_depth()` is available or not
#define RB_DEBUG_INSPECTOR_FRAME_DEPTH(dc, index) rb_debug_inspector_frame_depth(dc, index)

/**
 * Return current frmae depth.
 *
 * @retval     The depth of the current frame in Integer.
 */
VALUE rb_debug_inspector_current_depth(void);

/** @} */

/**
 * @name Old style set_trace_func APIs
 *
 * @{
 */

/* duplicated def of include/ruby/ruby.h */
#include "ruby/internal/event.h"

/**
 * Identical to  rb_remove_event_hook(), except it additionally  takes the data
 * argument.  This extra  argument is the same as  that of rb_add_event_hook(),
 * and this function removes the hook which matches both arguments at once.
 *
 * @param[in]  func  A callback.
 * @param[in]  data  What to be passed to `func`.
 * @return     Number of deleted event hooks.
 * @note       As  multiple  events can  share  the  same  `func` it  is  quite
 *             possible for the return value to become more than one.
 */
int rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data);

/**
 * Identical to rb_add_event_hook(), except its effect is limited to the passed
 * thread.  Other threads are not affected by this.
 *
 * @param[in]  thval          An instance of ::rb_cThread.
 * @param[in]  func           A callback.
 * @param[in]  events         A set of events that `func` should run.
 * @param[in]  data           Passed as-is to `func`.
 * @exception  rb_eTypeError  `thval` is not a thread.
 */
void rb_thread_add_event_hook(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);

/**
 * Identical to  rb_remove_event_hook(), except it additionally  takes a thread
 * argument.     This   extra    argument   is    the   same    as   that    of
 * rb_thread_add_event_hook(), and this function removes the hook which matches
 * both arguments at once.
 *
 * @param[in]  thval          An instance of ::rb_cThread.
 * @param[in]  func           A callback.
 * @exception  rb_eTypeError  `thval` is not a thread.
 * @return     Number of deleted event hooks.
 * @note       As  multiple  events can  share  the  same  `func` it  is  quite
 *             possible for the return value to become more than one.
 */
int rb_thread_remove_event_hook(VALUE thval, rb_event_hook_func_t func);

/**
 * Identical to rb_thread_remove_event_hook(), except it additionally takes the
 * data  argument.    It  can  also   be  seen   as  a  routine   identical  to
 * rb_remove_event_hook_with_data(), except  it additionally takes  the thread.
 * This function deletes hooks that satisfy all three criteria.
 *
 * @param[in]  thval          An instance of ::rb_cThread.
 * @param[in]  func           A callback.
 * @param[in]  data           What to be passed to `func`.
 * @exception  rb_eTypeError  `thval` is not a thread.
 * @return     Number of deleted event hooks.
 * @note       As  multiple  events can  share  the  same  `func` it  is  quite
 *             possible for the return value to become more than one.
 */
int rb_thread_remove_event_hook_with_data(VALUE thval, rb_event_hook_func_t func, VALUE data);

/** @} */

/**
 * @name TracePoint APIs
 *
 * @{
 */

/**
 * Creates a  tracepoint by  registering a  callback function  for one  or more
 * tracepoint   events.  Once   the  tracepoint   is  created,   you  can   use
 * rb_tracepoint_enable to enable the tracepoint.
 *
 * @param[in]      target_thread_not_supported_yet  Meant   for   picking   the
 *                         thread  in which  the tracepoint  is to  be created.
 *                         However,   current    implementation   ignore   this
 *                         parameter,  tracepoint is  created for  all threads.
 *                         Simply specify Qnil.
 * @param[in]      events  Event(s) to listen to.
 * @param[in]      func    A callback function.
 * @param[in,out]  data    Void  pointer that  will be  passed to  the callback
 *                         function.
 *
 * When the callback function is called, it will be passed 2 parameters:
 *   1. `VALUE  tpval` -  the TracePoint  object from which  trace args  can be
 *      extracted.
 *   1. `void  *data` -  A void  pointer which  helps to  share scope  with the
 *      callback function.
 *
 * It is important to note that you cannot register callbacks for normal events
 * and internal events simultaneously because  they are different purpose.  You
 * can use  any Ruby APIs  (calling methods and so  on) on normal  event hooks.
 * However, in  internal events,  you can  not use any  Ruby APIs  (even object
 * creations).   This is  why we  can't specify  internal events  by TracePoint
 * directly.  Limitations are MRI version specific.
 *
 * Example:
 *
 * ```CXX
 * rb_tracepoint_new(
 *     Qnil,
 *     RUBY_INTERNAL_EVENT_NEWOBJ | RUBY_INTERNAL_EVENT_FREEOBJ,
 *     obj_event_i,
 *     data);
 * ```
 *
 * In this  example, a callback  function `obj_event_i` will be  registered for
 * internal           events          #RUBY_INTERNAL_EVENT_NEWOBJ           and
 * #RUBY_INTERNAL_EVENT_FREEOBJ.
 */
VALUE rb_tracepoint_new(VALUE target_thread_not_supported_yet, rb_event_flag_t events, void (*func)(VALUE, void *), void *data);

/**
 * Starts (enables) trace(s) defined by the passed object.  A TracePoint object
 * does not immediately  take effect on creation.  You have  to explicitly call
 * this API.
 *
 * @param[in]  tpval         An instance of TracePoint.
 * @exception  rb_eArgError  A trace is already running.
 * @return     Undefined value.  Forget this.  It should have returned `void`.
 * @post       Trace(s) defined by `tpval` start.
 */
VALUE rb_tracepoint_enable(VALUE tpval);

/**
 * Stops (disables) an already running instance of TracePoint.
 *
 * @param[in]  tpval  An instance of TracePoint.
 * @return     Undefined value.  Forget this.  It should have returned `void`.
 * @post       Trace(s) defined by `tpval` stop.
 */
VALUE rb_tracepoint_disable(VALUE tpval);

/**
 * Queries if the passed TracePoint is up and running.
 *
 * @param[in]  tpval        An instance of TracePoint.
 * @retval     RUBY_Qtrue   It is.
 * @retval     RUBY_Qfalse  It isn't.
 */
VALUE rb_tracepoint_enabled_p(VALUE tpval);

/**
 * Type  that  represents  a  specific  trace  event.   Roughly  resembles  the
 * tracepoint object that is passed to the block of `TracePoint.new`:
 *
 * ```ruby
 * TracePoint.new(*events) do |obj|
 *   ...                    # ^^^^^  Resembles this object.
 * end
 * ```
 */
typedef struct rb_trace_arg_struct rb_trace_arg_t;

RBIMPL_ATTR_RETURNS_NONNULL()
/**
 * Queries the current event of the passed tracepoint.
 *
 * @param[in]  tpval             An instance of TracePoint.
 * @exception  rb_eRuntimeError  `tpval` is disabled.
 * @return     The current event.
 *
 * @internal
 *
 * `tpval` is  a fake.  There is  only one instance of  ::rb_trace_arg_t at one
 * time.  This function just returns that global variable.
 */
rb_trace_arg_t *rb_tracearg_from_tracepoint(VALUE tpval);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the event of the passed trace.
 *
 * @param[in]  trace_arg  A trace instance.
 * @return     Its event.
 */
rb_event_flag_t rb_tracearg_event_flag(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical to  rb_tracearg_event_flag(), except  it returns  the name  of the
 * event in Ruby's symbol.
 *
 * @param[in]  trace_arg  A trace instance.
 * @return     Its event, in Ruby level Symbol object.
 */
VALUE rb_tracearg_event(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the line of the point where the trace is at.
 *
 * @param[in]  trace_arg  A trace instance.
 * @retval     0          The trace is not at Ruby frame.
 * @return     otherwise  Its line number.
 */
VALUE rb_tracearg_lineno(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the file name of the point where the trace is at.
 *
 * @param[in]  trace_arg  A trace instance.
 * @retval     RUBY_Qnil  The trace is not at Ruby frame.
 * @retval     otherwise  Its path.
 */
VALUE rb_tracearg_path(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the method name of the point where the trace is at.
 *
 * @param[in]  trace_arg  A trace instance.
 * @retval     RUBY_Qnil  There is no method.
 * @retval     otherwise  Its method name, in Ruby level Symbol.
 */
VALUE rb_tracearg_method_id(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Identical  to  rb_tracearg_method_id(), except  it  returns  callee id  like
 * rb_frame_callee().
 *
 * @param[in]  trace_arg  A trace instance.
 * @retval     RUBY_Qnil  There is no method.
 * @retval     otherwise  Its method name, in Ruby level Symbol.
 */
VALUE rb_tracearg_callee_id(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the class that defines the method that the passed trace is at.  This
 * can be different from the class of rb_tracearg_self()'s return value because
 * of inheritance(s).
 *
 * @param[in]  trace_arg  A trace instance.
 * @retval     RUBY_Qnil  There is no method.
 * @retval     otherwise  Its method's class.
 */
VALUE rb_tracearg_defined_class(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Creates a binding object of the point where the trace is at.
 *
 * @param[in]  trace_arg  A trace instance.
 * @retval     RUBY_Qnil  The point has no binding.
 * @retval     otherwise  Its binding.
 *
 * @internal
 *
 * @shyouhei  has  no  idea  on  which situation  shall  this  function  return
 * ::RUBY_Qnil.
 */
VALUE rb_tracearg_binding(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the receiver of the point trace is at.
 *
 * @param[in]  trace_arg  A trace instance.
 * @return     Its receiver.
 */
VALUE rb_tracearg_self(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the return value that the trace represents.
 *
 * @param[in]  trace_arg         A trace instance.
 * @exception  rb_eRuntimeError  The tracing event is not return-related.
 * @return     The return value.
 */
VALUE rb_tracearg_return_value(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the raised exception that the trace represents.
 *
 * @param[in]  trace_arg         A trace instance.
 * @exception  rb_eRuntimeError  The tracing event is not exception-related.
 * @return     The raised exception.
 */
VALUE rb_tracearg_raised_exception(rb_trace_arg_t *trace_arg);

RBIMPL_ATTR_NONNULL(())
/**
 * Queries the allocated/deallocated object that the trace represents.
 *
 * @param[in]  trace_arg         A trace instance.
 * @exception  rb_eRuntimeError  The tracing event is not GC-related.
 * @return     The allocated/deallocated object.
 */
VALUE rb_tracearg_object(rb_trace_arg_t *trace_arg);


/** @} */

/**
 * @name Postponed Job API
 *
 * @{
 */

/*
 * Postponed Job API
 *
 * This API is designed to be called from contexts where it is not safe to run Ruby
 * code (e.g. because they do not hold the GVL or because GC is in progress), and
 * defer a callback to run in a context where it _is_ safe. The primary intended
 * users of this API is for sampling profilers like the "stackprof" gem; these work
 * by scheduling the periodic delivery of a SIGPROF signal, and inside the C-level
 * signal handler, deferring a job to collect a Ruby backtrace when it is next safe
 * to do so.
 *
 * Ruby maintains a small, fixed-size postponed job table. An extension using this
 * API should first call `rb_postponed_job_preregister` to register a callback
 * function in this table and obtain a handle of type `rb_postponed_job_handle_t`
 * to it. Subsequently, the callback can be triggered  by calling
 * `rb_postponed_job_trigger` with that handle, or the `data` associated with the
 * callback function can be changed by calling `rb_postponed_job_preregister` again.
 *
 * Because the postponed job table is quite small (it only has 32 entries on most
 * common systems), extensions should generally only preregister one or two `func`
 * values.
 *
 * Historically, this API provided two functions `rb_postponed_job_register` and
 * `rb_postponed_job_register_one`, which claimed to be fully async-signal-safe and
 * would call back the provided `func` and `data` at an appropriate time. However,
 * these functions were subject to race conditions which could cause crashes when
 * racing with Ruby's internal use of them. These two functions are still present,
 * but are marked as deprecated and have slightly changed semantics:
 *
 * * rb_postponed_job_register now works like rb_postponed_job_register_one i.e.
 *   `func` will only be executed at most one time each time Ruby checks for
 *   interrupts, no matter how many times it is registered
 * * They are also called with the last `data` to be registered, not the first
 *   (which is how rb_postponed_job_register_one previously worked)
 */


/**
 * Type of postponed jobs.
 *
 * @param[in,out]  arg What was passed to `rb_postponed_job_preregister`
 */
typedef void (*rb_postponed_job_func_t)(void *arg);

/**
 * The type of a handle returned from `rb_postponed_job_preregister` and
 * passed to `rb_postponed_job_trigger`
 */
typedef unsigned int rb_postponed_job_handle_t;
#define POSTPONED_JOB_HANDLE_INVALID ((rb_postponed_job_handle_t)UINT_MAX)

/**
 * Pre-registers a func in Ruby's postponed job preregistration table,
 * returning an opaque handle which can be used to trigger the job later. Generally,
 * this function will be called during the initialization routine of an extension.
 *
 * The returned handle can be used later to call `rb_postponed_job_trigger`. This will
 * cause Ruby to call back into the registered `func` with `data` at a later time, in
 * a context where the GVL is held and it is safe to perform Ruby allocations.
 *
 * If the given `func` was already pre-registered, this function will overwrite the
 * stored data with the newly passed data, and return the same handle instance as
 * was previously returned.
 *
 * If this function is called concurrently with the same `func`, then the stored data
 * could be the value from either call (but will definitely be one of them).
 *
 * If this function is called to update the data concurrently with a call to
 * `rb_postponed_job_trigger` on the same handle, it's undefined whether `func` will
 * be called with the old data or the new data.
 *
 * Although the current implementation of this function is in fact async-signal-safe and
 * has defined semantics when called concurrently on the same `func`, a future Ruby
 * version might require that this method be called under the GVL; thus, programs which
 * aim to be forward-compatible should call this method whilst holding the GVL.
 *
 * @param[in]   flags       Unused and ignored
 * @param[in]   func        The function to be pre-registered
 * @param[in]   data        The data to be pre-registered
 * @retval      POSTPONED_JOB_HANDLE_INVALID    The job table is full; this registration
 *                          did not succeed and no further registration will do so for
 *                          the lifetime of the program.
 * @retval      otherwise   A handle which can be passed to `rb_postponed_job_trigger`
 */
rb_postponed_job_handle_t rb_postponed_job_preregister(unsigned int flags, rb_postponed_job_func_t func, void *data);

/**
 * Triggers a pre-registered job registered with rb_postponed_job_preregister,
 * scheduling it for execution the next time the Ruby VM checks for interrupts.
 * The context in which the job is called in holds the GVL and is safe to perform
 * Ruby allocations within (i.e. it is not during GC).
 *
 * This method is async-signal-safe and can be called from any thread, at any
 * time, including in signal handlers.
 *
 * If this method is called multiple times, Ruby will coalesce this into only
 * one call to the job the next time it checks for interrupts.
 *
 * @params[in]  h   A handle returned from rb_postponed_job_preregister
 */
void rb_postponed_job_trigger(rb_postponed_job_handle_t h);

/**
 * Schedules the given `func` to be called with `data` when Ruby next checks for
 * interrupts. If this function is called multiple times in between Ruby checking
 * for interrupts, then `func` will be called only once with the `data` value from
 * the first call to this function.
 *
 * Like `rb_postponed_job_trigger`, the context in which the job is called
 * holds the GVL and can allocate Ruby objects.
 *
 * This method essentially has the same semantics as:
 *
 * ```
 *   rb_postponed_job_trigger(rb_postponed_job_preregister(func, data));
 * ```
 *
 * @note    Previous versions of Ruby promised that the (`func`, `data`) pairs would
 *          be executed as many times as they were registered with this function; in
 *          reality this was always subject to race conditions and this function no
 *          longer provides this guarantee. Instead, multiple calls to this function
 *          can be coalesced into a single execution of the passed `func`, with the
 *          most recent `data` registered at that time passed in.
 *
 * @deprecated  This interface implies that arbitrarily many `func`'s can be enqueued
 *              over the lifetime of the program, whilst in reality the registration
 *              slots for postponed jobs are a finite resource. This is made clearer
 *              by the `rb_postponed_job_preregister` and `rb_postponed_job_trigger`
 *              functions, and a future version of Ruby might delete this function.
 *
 * @param[in]      flags      Unused and ignored.
 * @param[in]      func       Job body.
 * @param[in,out]  data       Passed as-is to `func`.
 * @retval         0          Postponed job registration table is full. Failed.
 * @retval         1          Registration succeeded.
 * @post           The passed job will run on the next interrupt check.
 */
 RBIMPL_ATTR_DEPRECATED(("use rb_postponed_job_preregister and rb_postponed_job_trigger"))
int rb_postponed_job_register(unsigned int flags, rb_postponed_job_func_t func, void *data);

/**
 * Identical to `rb_postponed_job_register`
 *
 * @deprecated  This is deprecated for the same reason as `rb_postponed_job_register`
 *
 * @param[in]      flags      Unused and ignored.
 * @param[in]      func       Job body.
 * @param[in,out]  data       Passed as-is to `func`.
 * @retval         0          Postponed job registration table is full. Failed.
 * @retval         1          Registration succeeded.
 * @post           The passed job will run on the next interrupt check.
 */
 RBIMPL_ATTR_DEPRECATED(("use rb_postponed_job_preregister and rb_postponed_job_trigger"))
int rb_postponed_job_register_one(unsigned int flags, rb_postponed_job_func_t func, void *data);

/** @} */

/**
 * @cond INTERNAL_MACRO
 *
 * Anything  after this  are  intentionally left  undocumented,  to honour  the
 * comment below.
 */

/* undocumented advanced tracing APIs */

typedef enum {
    RUBY_EVENT_HOOK_FLAG_SAFE    = 0x01,
    RUBY_EVENT_HOOK_FLAG_DELETED = 0x02,
    RUBY_EVENT_HOOK_FLAG_RAW_ARG = 0x04
} rb_event_hook_flag_t;

void rb_add_event_hook2(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag);
void rb_thread_add_event_hook2(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag);

/** @endcond */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_DEBUG_H */
PK*J[�L�-x-x$include/ruby/backward/cxxanyargs.hppnu�[���#ifndef RUBY_BACKWARD_CXXANYARGS_HPP                       //-*-C++-*-vi:ft=cpp
#define RUBY_BACKWARD_CXXANYARGS_HPP
/// @file
/// @author     @shyouhei
/// @copyright  This  file  is  a  part   of  the  programming  language  Ruby.
///             Permission  is hereby  granted, to  either redistribute  and/or
///             modify this file, provided that the conditions mentioned in the
///             file COPYING are met.  Consult the file for details.
/// @note       DO NOT  MODERNISE THIS FILE!   As the  file name implies  it is
///             meant to  be a backwards  compatibility shim.  Please  stick to
///             C++ 98 and never use newer features, like `constexpr`.
/// @brief      Provides old prototypes for C++ programs.
#include "ruby/internal/config.h"
#include "ruby/internal/intern/class.h"
#include "ruby/internal/intern/cont.h"
#include "ruby/internal/intern/hash.h"
#include "ruby/internal/intern/proc.h"
#include "ruby/internal/intern/thread.h"
#include "ruby/internal/intern/variable.h"
#include "ruby/internal/intern/vm.h"
#include "ruby/internal/iterator.h"
#include "ruby/internal/method.h"
#include "ruby/internal/value.h"
#include "ruby/internal/variable.h"
#include "ruby/backward/2/stdarg.h"
#include "ruby/st.h"

extern "C++" {

#ifdef HAVE_NULLPTR
#include <cstddef>
#endif

/// @brief  The main namespace.
/// @note   The name  "ruby" might  already be  taken, but that  must not  be a
///         problem because namespaces are allowed to reopen.
namespace ruby {

/// Backwards compatibility layer.
namespace backward {

/// Provides ANYARGS  deprecation warnings.   In C, ANYARGS  means there  is no
/// function prototype.  Literally  anything, even including nothing,  can be a
/// valid ANYARGS.   So passing a  correctly prototyped function pointer  to an
/// ANYARGS-ed  function  parameter is  valid,  at  the  same time  passing  an
/// ANYARGS-ed function pointer to a  granular typed function parameter is also
/// valid.  However on the other hand in C++, ANYARGS doesn't actually mean any
/// number of arguments.   C++'s ANYARGS means _variadic_  number of arguments.
/// This is incompatible with ordinal, correct function prototypes.
///
/// Luckily, function  prototypes being distinct  each other means they  can be
/// overloaded.  We can provide a compatibility layer for older Ruby APIs which
/// used to have ANYARGS.  This namespace includes such attempts.
namespace cxxanyargs {

typedef VALUE type(ANYARGS);      ///< ANYARGS-ed function type.
typedef void void_type(ANYARGS);  ///< ANYARGS-ed function type, void variant.
typedef int int_type(ANYARGS);    ///< ANYARGS-ed function type, int variant.
typedef VALUE onearg_type(VALUE); ///< Single-argumented function type.

/// @name Hooking global variables
/// @{

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Define a function-backended global variable.
/// @param[in]   q  Name of the variable.
/// @param[in]   w  Getter function.
/// @param[in]   e  Setter function.
/// @note        Both functions can be nullptr.
/// @see         rb_define_hooked_variable()
/// @deprecated  Use granular typed overload instead.
inline void
rb_define_virtual_variable(const char *q, type *w, void_type *e)
{
    rb_gvar_getter_t *r = reinterpret_cast<rb_gvar_getter_t*>(w);
    rb_gvar_setter_t *t = reinterpret_cast<rb_gvar_setter_t*>(e);
    ::rb_define_virtual_variable(q, r, t);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_virtual_variable(const char *q, rb_gvar_getter_t *w, void_type *e)
{
    rb_gvar_setter_t *t = reinterpret_cast<rb_gvar_setter_t*>(e);
    ::rb_define_virtual_variable(q, w, t);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_virtual_variable(const char *q, type *w, rb_gvar_setter_t *e)
{
    rb_gvar_getter_t *r = reinterpret_cast<rb_gvar_getter_t*>(w);
    ::rb_define_virtual_variable(q, r, e);
}

#ifdef HAVE_NULLPTR
inline void
rb_define_virtual_variable(const char *q, rb_gvar_getter_t *w, std::nullptr_t e)
{
    ::rb_define_virtual_variable(q, w, e);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_virtual_variable(const char *q, type *w, std::nullptr_t e)
{
    rb_gvar_getter_t *r = reinterpret_cast<rb_gvar_getter_t *>(w);
    ::rb_define_virtual_variable(q, r, e);
}

inline void
rb_define_virtual_variable(const char *q, std::nullptr_t w, rb_gvar_setter_t *e)
{
    ::rb_define_virtual_variable(q, w, e);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_virtual_variable(const char *q, std::nullptr_t w, void_type *e)
{
    rb_gvar_setter_t *r = reinterpret_cast<rb_gvar_setter_t *>(e);
    ::rb_define_virtual_variable(q, w, r);
}
#endif

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Define a function-backended global variable.
/// @param[in]   q  Name of the variable.
/// @param[in]   w  Variable storage.
/// @param[in]   e  Getter function.
/// @param[in]   r  Setter function.
/// @note        Both functions can be nullptr.
/// @see         rb_define_virtual_variable()
/// @deprecated  Use granular typed overload instead.
inline void
rb_define_hooked_variable(const char *q, VALUE *w, type *e, void_type *r)
{
    rb_gvar_getter_t *t = reinterpret_cast<rb_gvar_getter_t*>(e);
    rb_gvar_setter_t *y = reinterpret_cast<rb_gvar_setter_t*>(r);
    ::rb_define_hooked_variable(q, w, t, y);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_hooked_variable(const char *q, VALUE *w, rb_gvar_getter_t *e, void_type *r)
{
    rb_gvar_setter_t *y = reinterpret_cast<rb_gvar_setter_t*>(r);
    ::rb_define_hooked_variable(q, w, e, y);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_hooked_variable(const char *q, VALUE *w, type *e, rb_gvar_setter_t *r)
{
    rb_gvar_getter_t *t = reinterpret_cast<rb_gvar_getter_t*>(e);
    ::rb_define_hooked_variable(q, w, t, r);
}

#ifdef HAVE_NULLPTR
inline void
rb_define_hooked_variable(const char *q, VALUE *w, rb_gvar_getter_t *e, std::nullptr_t r)
{
    ::rb_define_hooked_variable(q, w, e, r);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_hooked_variable(const char *q, VALUE *w, type *e, std::nullptr_t r)
{
    rb_gvar_getter_t *y = reinterpret_cast<rb_gvar_getter_t *>(e);
    ::rb_define_hooked_variable(q, w, y, r);
}

inline void
rb_define_hooked_variable(const char *q, VALUE *w, std::nullptr_t e, rb_gvar_setter_t *r)
{
    ::rb_define_hooked_variable(q, w, e, r);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
inline void
rb_define_hooked_variable(const char *q, VALUE *w, std::nullptr_t e, void_type *r)
{
    rb_gvar_setter_t *y = reinterpret_cast<rb_gvar_setter_t *>(r);
    ::rb_define_hooked_variable(q, w, e, y);
}
#endif

/// @}
/// @name Exceptions and tag jumps
/// @{

// RUBY_CXX_DEPRECATED("by rb_block_call since 1.9")
RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Old way to implement iterators.
/// @param[in]   q  A function that can yield.
/// @param[in]   w  Passed to `q`.
/// @param[in]   e  What is to be yielded.
/// @param[in]   r  Passed to `e`.
/// @return      The return value of `q`.
/// @note        `e` can be nullptr.
/// @deprecated  This function is obsoleted since  long before 2.x era.  Do not
///              use it any longer.  rb_block_call() is provided instead.
inline VALUE
rb_iterate(onearg_type *q, VALUE w, type *e, VALUE r)
{
    rb_block_call_func_t t = reinterpret_cast<rb_block_call_func_t>(e);
    return backward::rb_iterate_deprecated(q, w, t, r);
}

#ifdef HAVE_NULLPTR
RUBY_CXX_DEPRECATED("by rb_block_call since 1.9")
inline VALUE
rb_iterate(onearg_type *q, VALUE w, std::nullptr_t e, VALUE r)
{
    return backward::rb_iterate_deprecated(q, w, e, r);
}
#endif

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Call a method with a block.
/// @param[in]   q  The self.
/// @param[in]   w  The method.
/// @param[in]   e  The # of elems of `r`
/// @param[in]   r  The arguments.
/// @param[in]   t  What is to be yielded.
/// @param[in]   y  Passed to `t`
/// @return      Return value of `q#w(*r,&t)`
/// @note        't' can be nullptr.
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_block_call(VALUE q, ID w, int e, const VALUE *r, type *t, VALUE y)
{
    rb_block_call_func_t u = reinterpret_cast<rb_block_call_func_t>(t);
    return ::rb_block_call(q, w, e, r, u, y);
}

#ifdef HAVE_NULLPTR
inline VALUE
rb_block_call(VALUE q, ID w, int e, const VALUE *r, std::nullptr_t t, VALUE y)
{
    return ::rb_block_call(q, w, e, r, t, y);
}
#endif

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       An equivalent of `rescue` clause.
/// @param[in]   q  A function that can raise.
/// @param[in]   w  Passed to `q`.
/// @param[in]   e  A function that cleans-up.
/// @param[in]   r  Passed to `e`.
/// @return      The return value of `q` if  no exception occurs, or the return
///              value of `e` if otherwise.
/// @note        `e` can be nullptr.
/// @see         rb_ensure()
/// @see         rb_rescue2()
/// @see         rb_protect()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_rescue(type *q, VALUE w, type *e, VALUE r)
{
    typedef VALUE func1_t(VALUE);
    typedef VALUE func2_t(VALUE, VALUE);
    func1_t *t = reinterpret_cast<func1_t*>(q);
    func2_t *y = reinterpret_cast<func2_t*>(e);
    return ::rb_rescue(t, w, y, r);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       An equivalent of `rescue` clause.
/// @param[in]   q    A function that can raise.
/// @param[in]   w    Passed to `q`.
/// @param[in]   e    A function that cleans-up.
/// @param[in]   r    Passed to `e`.
/// @param[in]   ...  0-terminated list of subclass of @ref rb_eException.
/// @return      The return value of `q` if  no exception occurs, or the return
///              value of `e` if otherwise.
/// @note        `e` can be nullptr.
/// @see         rb_ensure()
/// @see         rb_rescue()
/// @see         rb_protect()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_rescue2(type *q, VALUE w, type *e, VALUE r, ...)
{
    typedef VALUE func1_t(VALUE);
    typedef VALUE func2_t(VALUE, VALUE);
    func1_t *t = reinterpret_cast<func1_t*>(q);
    func2_t *y = reinterpret_cast<func2_t*>(e);
    va_list ap;
    va_start(ap, r);
    VALUE ret = ::rb_vrescue2(t, w, y, r, ap);
    va_end(ap);
    return ret;
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       An equivalent of `ensure` clause.
/// @param[in]   q  A function that can raise.
/// @param[in]   w  Passed to `q`.
/// @param[in]   e  A function that ensures.
/// @param[in]   r  Passed to `e`.
/// @return      The return value of `q`.
/// @note        It makes no sense to pass nullptr to `e`.
/// @see         rb_rescue()
/// @see         rb_rescue2()
/// @see         rb_protect()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_ensure(type *q, VALUE w, type *e, VALUE r)
{
    typedef VALUE func1_t(VALUE);
    func1_t *t = reinterpret_cast<func1_t*>(q);
    func1_t *y = reinterpret_cast<func1_t*>(e);
    return ::rb_ensure(t, w, y, r);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       An equivalent of `Kernel#catch`.
/// @param[in]   q  The "tag" string.
/// @param[in]   w  A function that can throw.
/// @param[in]   e  Passed to `w`.
/// @return      What was thrown.
/// @note        `q` can be a nullptr but makes no sense to pass nullptr to`w`.
/// @see         rb_block_call()
/// @see         rb_protect()
/// @see         rb_rb_catch_obj()
/// @see         rb_rescue()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_catch(const char *q, type *w, VALUE e)
{
    rb_block_call_func_t r = reinterpret_cast<rb_block_call_func_t>(w);
    return ::rb_catch(q, r, e);
}

#ifdef HAVE_NULLPTR
inline VALUE
rb_catch(const char *q, std::nullptr_t w, VALUE e)
{
    return ::rb_catch(q, w, e);
}
#endif

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       An equivalent of `Kernel#catch`.
/// @param[in]   q  The "tag" object.
/// @param[in]   w  A function that can throw.
/// @param[in]   e  Passed to `w`.
/// @return      What was thrown.
/// @note        It makes no sense to pass nullptr to`w`.
/// @see         rb_block_call()
/// @see         rb_protect()
/// @see         rb_rb_catch_obj()
/// @see         rb_rescue()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_catch_obj(VALUE q, type *w, VALUE e)
{
    rb_block_call_func_t r = reinterpret_cast<rb_block_call_func_t>(w);
    return ::rb_catch_obj(q, r, e);
}

/// @}
/// @name Procs, Fibers and Threads
/// @{

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Creates a rb_cFiber instance.
/// @param[in]   q  The fiber body.
/// @param[in]   w  Passed to `q`.
/// @return      What was allocated.
/// @note        It makes no sense to pass nullptr to`q`.
/// @see         rb_proc_new()
/// @see         rb_thread_create()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_fiber_new(type *q, VALUE w)
{
    rb_block_call_func_t e = reinterpret_cast<rb_block_call_func_t>(q);
    return ::rb_fiber_new(e, w);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Creates a @ref rb_cProc instance.
/// @param[in]   q  The proc body.
/// @param[in]   w  Passed to `q`.
/// @return      What was allocated.
/// @note        It makes no sense to pass nullptr to`q`.
/// @see         rb_fiber_new()
/// @see         rb_thread_create()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_proc_new(type *q, VALUE w)
{
    rb_block_call_func_t e = reinterpret_cast<rb_block_call_func_t>(q);
    return ::rb_proc_new(e, w);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Creates a @ref rb_cThread instance.
/// @param[in]   q  The thread body.
/// @param[in]   w  Passed to `q`.
/// @return      What was allocated.
/// @note        It makes no sense to pass nullptr to`q`.
/// @see         rb_proc_new()
/// @see         rb_fiber_new()
/// @deprecated  Use granular typed overload instead.
inline VALUE
rb_thread_create(type *q, void *w)
{
    typedef VALUE ptr_t(void*);
    ptr_t *e = reinterpret_cast<ptr_t*>(q);
    return ::rb_thread_create(e, w);
}

/// @}
/// @name Hash and st_table
/// @{

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Iteration over the given table.
/// @param[in]   q  A table to scan.
/// @param[in]   w  A function to iterate.
/// @param[in]   e  Passed to `w`.
/// @retval      0  Always returns 0.
/// @note        It makes no sense to pass nullptr to`w`.
/// @see         st_foreach_check()
/// @see         rb_hash_foreach()
/// @deprecated  Use granular typed overload instead.
inline int
st_foreach(st_table *q, int_type *w, st_data_t e)
{
    st_foreach_callback_func *r =
        reinterpret_cast<st_foreach_callback_func*>(w);
    return ::st_foreach(q, r, e);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Iteration over the given table.
/// @param[in]   q  A table to scan.
/// @param[in]   w  A function to iterate.
/// @param[in]   e  Passed to `w`.
/// @retval      0  Successful end of iteration.
/// @retval      1  Element removed during traversing.
/// @note        It makes no sense to pass nullptr to`w`.
/// @see         st_foreach()
/// @deprecated  Use granular typed overload instead.
inline int
st_foreach_check(st_table *q, int_type *w, st_data_t e, st_data_t)
{
    st_foreach_check_callback_func *t =
        reinterpret_cast<st_foreach_check_callback_func*>(w);
    return ::st_foreach_check(q, t, e, 0);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Iteration over the given table.
/// @param[in]   q  A table to scan.
/// @param[in]   w  A function to iterate.
/// @param[in]   e  Passed to `w`.
/// @note        It makes no sense to pass nullptr to`w`.
/// @see         st_foreach_check()
/// @deprecated  Use granular typed overload instead.
inline void
st_foreach_safe(st_table *q, int_type *w, st_data_t e)
{
    st_foreach_callback_func *r =
        reinterpret_cast<st_foreach_callback_func*>(w);
    ::st_foreach_safe(q, r, e);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Iteration over the given hash.
/// @param[in]   q  A hash to scan.
/// @param[in]   w  A function to iterate.
/// @param[in]   e  Passed to `w`.
/// @note        It makes no sense to pass nullptr to`w`.
/// @see         st_foreach()
/// @deprecated  Use granular typed overload instead.
inline void
rb_hash_foreach(VALUE q, int_type *w, VALUE e)
{
    st_foreach_callback_func *r =
        reinterpret_cast<st_foreach_callback_func*>(w);
    ::rb_hash_foreach(q, r, e);
}

RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
/// @brief       Iteration over each instance variable of the object.
/// @param[in]   q  An object.
/// @param[in]   w  A function to iterate.
/// @param[in]   e  Passed to `w`.
/// @note        It makes no sense to pass nullptr to`w`.
/// @see         st_foreach()
/// @deprecated  Use granular typed overload instead.
inline void
rb_ivar_foreach(VALUE q, int_type *w, VALUE e)
{
    st_foreach_callback_func *r =
        reinterpret_cast<st_foreach_callback_func*>(w);
    ::rb_ivar_foreach(q, r, e);
}

/// @}

/// Driver for *_define_method.  ::rb_define_method function for instance takes
/// a  pointer to  ANYARGS-ed  functions,  which in  fact  varies 18  different
/// prototypes.  We  still need to  preserve ANYARGS  for storages but  why not
/// check  the consistencies  if  possible.   In C++  a  function  has its  own
/// prototype, which  is a compile-time  constant (static type) by  nature.  We
/// can list  up all the  possible input types  and provide warnings  for other
/// cases.  This is such attempt.
namespace define_method {

/// Type of ::rb_f_notimplement().
typedef VALUE notimpl_type(int, const VALUE *, VALUE, VALUE);

/// @brief   Template metaprogramming to generate function prototypes.
/// @tparam  T  Type of method id (`ID` or `const char*` in practice).
/// @tparam  F  Definition driver e.g. ::rb_define_method.
template<typename T, void (*F)(VALUE klass, T mid, type *func, int arity)>
struct driver {

    /// @brief      Defines a method
    /// @tparam     N  Arity of the function.
    /// @tparam     U  The function in question
    template<int N, typename U>
    struct engine {

        /* :TODO: Following deprecation attribute renders tons of warnings (one
         * per  every  method  definitions),  which  is  annoying.   Of  course
         * annoyance is the  core feature of deprecation  warnings...  But that
         * could be  too much,  especially when the  warnings happen  inside of
         * machine-generated programs.   And SWIG  is known  to do  such thing.
         * The new  (granular) API was  introduced in  API version 2.7.   As of
         * this writing the  version is 2.8.  Let's warn this  later, some time
         * during 3.x.   Hopefully codes in  old (ANYARGS-ed) format  should be
         * less than now. */
#if (RUBY_API_VERSION_MAJOR * 100 + RUBY_API_VERSION_MINOR) >= 301
        RUBY_CXX_DEPRECATED("use of ANYARGS is deprecated")
#endif
        /// @copydoc define(VALUE klass, T mid, U func)
        /// @deprecated  Pass correctly typed function instead.
        static inline void
        define(VALUE klass, T mid, type func)
        {
            F(klass, mid, func, N);
        }

        /// @brief      Defines klass#mid as func, whose arity is N.
        /// @param[in]  klass  Where the method lives.
        /// @param[in]  mid    Name of the method to define.
        /// @param[in]  func   Function that implements klass#mid.
        static inline void
        define(VALUE klass, T mid, U func)
        {
            F(klass, mid, reinterpret_cast<type *>(func), N);
        }

        /// @copydoc define(VALUE klass, T mid, U func)
        static inline void
        define(VALUE klass, T mid, notimpl_type func)
        {
            F(klass, mid, reinterpret_cast<type *>(func), N);
        }
    };

    /// @cond INTERNAL_MACRO
    template<int N, bool = false> struct specific : public engine<N, type *> {};
    template<bool b> struct specific<15, b> : public engine<15, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<14, b> : public engine<14, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<13, b> : public engine<13, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<12, b> : public engine<12, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<11, b> : public engine<11, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<10, b> : public engine<10, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 9, b> : public engine< 9, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 8, b> : public engine< 8, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 7, b> : public engine< 7, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 6, b> : public engine< 6, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 5, b> : public engine< 5, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 4, b> : public engine< 4, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 3, b> : public engine< 3, VALUE(*)(VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 2, b> : public engine< 2, VALUE(*)(VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 1, b> : public engine< 1, VALUE(*)(VALUE, VALUE)> {};
    template<bool b> struct specific< 0, b> : public engine< 0, VALUE(*)(VALUE)> {};
    template<bool b> struct specific<-1, b> : public engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)> {
        using engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)>::define;
        static inline void define(VALUE c, T m, VALUE(*f)(int argc, const VALUE *argv, VALUE self)) { F(c, m, reinterpret_cast<type *>(f), -1); }
    };
    template<bool b> struct specific<-2, b> : public engine<-2, VALUE(*)(VALUE, VALUE)> {};
    /// @endcond
};

/* We could perhaps merge this struct into the one above using variadic
 * template parameters if we could assume C++11, but sadly we cannot. */
/// @copydoc ruby::backward::cxxanyargs::define_method::driver
template<typename T, void (*F)(T mid, type func, int arity)>
struct driver0 {

    /// @brief      Defines a method
    /// @tparam     N  Arity of the function.
    /// @tparam     U  The function in question
    template<int N, typename U>
    struct engine {
        RUBY_CXX_DEPRECATED("use of ANYARGS is deprecated")
        /// @copydoc define(T mid, U func)
        /// @deprecated  Pass correctly typed function instead.
        static inline void
        define(T mid, type func)
        {
            F(mid, func, N);
        }

        /// @brief      Defines Kernel#mid as func, whose arity is N.
        /// @param[in]  mid    Name of the method to define.
        /// @param[in]  func   Function that implements klass#mid.
        static inline void
        define(T mid, U func)
        {
            F(mid, reinterpret_cast<type *>(func), N);
        }

        /// @copydoc define(T mid, U func)
        /// @deprecated  Pass correctly typed function instead.
        static inline void
        define(T mid, notimpl_type func)
        {
            F(mid, reinterpret_cast<type *>(func), N);
        }
    };

    /// @cond INTERNAL_MACRO
    template<int N, bool = false> struct specific : public engine<N, type *> {};
    template<bool b> struct specific<15, b> : public engine<15, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<14, b> : public engine<14, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<13, b> : public engine<13, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<12, b> : public engine<12, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<11, b> : public engine<11, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific<10, b> : public engine<10, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 9, b> : public engine< 9, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 8, b> : public engine< 8, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 7, b> : public engine< 7, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 6, b> : public engine< 6, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 5, b> : public engine< 5, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 4, b> : public engine< 4, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 3, b> : public engine< 3, VALUE(*)(VALUE, VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 2, b> : public engine< 2, VALUE(*)(VALUE, VALUE, VALUE)> {};
    template<bool b> struct specific< 1, b> : public engine< 1, VALUE(*)(VALUE, VALUE)> {};
    template<bool b> struct specific< 0, b> : public engine< 0, VALUE(*)(VALUE)> {};
    template<bool b> struct specific<-1, b> : public engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)> {
        using engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)>::define;
        static inline void define(T m, VALUE(*f)(int argc, const VALUE *argv, VALUE self)) { F(m, reinterpret_cast<type *>(f), -1); }
    };
    template<bool b> struct specific<-2, b> : public engine<-2, VALUE(*)(VALUE, VALUE)> {};
    /// @endcond
};

struct rb_define_method           : public driver <const char *, ::rb_define_method> {};           ///< Dispatches appropriate driver for ::rb_define_method.
struct rb_define_method_id        : public driver <ID,           ::rb_define_method_id> {};        ///< Dispatches appropriate driver for ::rb_define_method_id.
struct rb_define_private_method   : public driver <const char *, ::rb_define_private_method> {};   ///< Dispatches appropriate driver for ::rb_define_private_method.
struct rb_define_protected_method : public driver <const char *, ::rb_define_protected_method> {}; ///< Dispatches appropriate driver for ::rb_define_protected_method.
struct rb_define_singleton_method : public driver <const char *, ::rb_define_singleton_method> {}; ///< Dispatches appropriate driver for ::rb_define_singleton_method.
struct rb_define_module_function  : public driver <const char *, ::rb_define_module_function> {};  ///< Dispatches appropriate driver for ::rb_define_module_function.
struct rb_define_global_function  : public driver0<const char *, ::rb_define_global_function> {};  ///< Dispatches appropriate driver for ::rb_define_global_function.

/// @brief        Defines klass\#mid.
/// @param        klass  Where the method lives.
/// @copydetails  #rb_define_global_function(mid, func, arity)
#define rb_define_method(klass, mid, func, arity)           ::ruby::backward::cxxanyargs::define_method::rb_define_method::specific<arity>::define(klass, mid, func)

/// @copydoc #rb_define_method(klass, mid, func, arity)
#define rb_define_method_id(klass, mid, func, arity)        ::ruby::backward::cxxanyargs::define_method::rb_define_method_id::specific<arity>::define(klass, mid, func)

/// @brief        Defines klass\#mid and makes it private.
/// @copydetails  #rb_define_method(klass, mid, func, arity)
#define rb_define_private_method(klass, mid, func, arity)   ::ruby::backward::cxxanyargs::define_method::rb_define_private_method::specific<arity>::define(klass, mid, func)

/// @brief        Defines klass\#mid and makes it protected.
/// @copydetails  #rb_define_method
#define rb_define_protected_method(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_protected_method::specific<arity>::define(klass, mid, func)

/// @brief        Defines klass.mid.(klass, mid, func, arity)
/// @copydetails  #rb_define_method
#define rb_define_singleton_method(klass, mid, func, arity) ::ruby::backward::cxxanyargs::define_method::rb_define_singleton_method::specific<arity>::define(klass, mid, func)

/// @brief        Defines klass\#mid and makes it a module function.
/// @copydetails  #rb_define_method(klass, mid, func, arity)
#define rb_define_module_function(klass, mid, func, arity)  ::ruby::backward::cxxanyargs::define_method::rb_define_module_function::specific<arity>::define(klass, mid, func)

/// @brief Defines ::rb_mKernel \#mid.
/// @param mid    Name of the defining method.
/// @param func   Implementation of \#mid.
/// @param arity  Arity of \#mid.
#define rb_define_global_function(mid, func, arity)         ::ruby::backward::cxxanyargs::define_method::rb_define_global_function::specific<arity>::define(mid, func)

}}}}}

using namespace ruby::backward::cxxanyargs;
#endif // RUBY_BACKWARD_CXXANYARGS_HPP
PK*J[�*�?��#include/ruby/backward/2/long_long.hnu�[���#ifndef RUBY_BACKWARD2_LONG_LONG_H                   /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_LONG_LONG_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines old #LONG_LONG
 *
 * No  known  compiler   that  can  compile  today's  ruby   lacks  long  long.
 * Historically MSVC was  one of such compiler, but it  implemented long long a
 * while  ago  (some  time  back  in  2013).   The  macros  are  for  backwards
 * compatibility only.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/has/warning.h"
#include "ruby/internal/warning_push.h"

#if defined(__DOXYGEN__)
# /** @cond INTERNAL_MACRO */
# define HAVE_LONG_LONG 1
# define HAVE_TRUE_LONG_LONG 1
# /** @endcond */
# /** @deprecated  Just use `long long` directly. */
# define LONG_LONG long long.

#elif RBIMPL_HAS_WARNING("-Wc++11-long-long")
# define HAVE_TRUE_LONG_LONG 1
# define LONG_LONG                           \
    RBIMPL_WARNING_PUSH()                     \
    RBIMPL_WARNING_IGNORED(-Wc++11-long-long) \
    long long                                \
    RBIMPL_WARNING_POP()

#elif RBIMPL_HAS_WARNING("-Wlong-long")
# define HAVE_TRUE_LONG_LONG 1
# define LONG_LONG                     \
    RBIMPL_WARNING_PUSH()               \
    RBIMPL_WARNING_IGNORED(-Wlong-long) \
    long long                          \
    RBIMPL_WARNING_POP()

#elif defined(HAVE_LONG_LONG)
# define HAVE_TRUE_LONG_LONG 1
# define LONG_LONG long long

#elif SIZEOF___INT64 > 0
# define HAVE_LONG_LONG 1
# define LONG_LONG __int64
# undef SIZEOF_LONG_LONG
# define SIZEOF_LONG_LONG SIZEOF___INT64

#else
# error Hello!  Ruby developers believe this message must not happen.
# error If you encounter this message, can you file a bug report?
# error Remember to attach a detailed description of your environment.
# error Thank you!
#endif

#endif /* RBIMPL_BACKWARD2_LONG_LONG_H */
PK*J[�z}��$include/ruby/backward/2/attributes.hnu�[���#ifndef RUBY_BACKWARD2_ATTRIBUTES_H                  /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_ATTRIBUTES_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Various attribute-related macros.
 *
 * ### Q&A ###
 *
 * - Q: Why  are the  macros defined  in this  header file  so inconsistent  in
 *      style?
 *
 * - A: Don't know.   Don't blame me.  Backward compatibility is  the key here.
 *      I'm just preserving what they have been.
 */
#include "ruby/internal/config.h"
#include "ruby/internal/attr/alloc_size.h"
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/deprecated.h"
#include "ruby/internal/attr/error.h"
#include "ruby/internal/attr/forceinline.h"
#include "ruby/internal/attr/format.h"
#include "ruby/internal/attr/maybe_unused.h"
#include "ruby/internal/attr/noinline.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/attr/packed_struct.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/attr/restrict.h"
#include "ruby/internal/attr/returns_nonnull.h"
#include "ruby/internal/attr/warning.h"
#include "ruby/internal/has/attribute.h"

/* function attributes */
#undef CONSTFUNC
#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x

#undef PUREFUNC
#define PUREFUNC(x) RBIMPL_ATTR_PURE() x

#undef DEPRECATED
#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x

#undef DEPRECATED_BY
#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " # n)) x

#undef DEPRECATED_TYPE
#if defined(__GNUC__)
# define DEPRECATED_TYPE(mesg, decl)                      \
    _Pragma("message \"DEPRECATED_TYPE is deprecated\""); \
    decl RBIMPL_ATTR_DEPRECATED(mseg)
#elif defined(_MSC_VER)
# pragma deprecated(DEPRECATED_TYPE)
# define DEPRECATED_TYPE(mesg, decl)                              \
    __pragma(message(__FILE__"("STRINGIZE(__LINE__)"): warning: " \
                     "DEPRECATED_TYPE is deprecated"))            \
    decl RBIMPL_ATTR_DEPRECATED(mseg)
#else
# define DEPRECATED_TYPE(mesg, decl)                    \
    <-<-"DEPRECATED_TYPE is deprecated"->->
#endif

#undef RUBY_CXX_DEPRECATED
#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))

#undef NOINLINE
#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x

#undef ALWAYS_INLINE
#define ALWAYS_INLINE(x) RBIMPL_ATTR_FORCEINLINE() x

#undef ERRORFUNC
#define ERRORFUNC(mesg, x) RBIMPL_ATTR_ERROR(mesg) x
#if RBIMPL_HAS_ATTRIBUTE(error)
# define HAVE_ATTRIBUTE_ERRORFUNC 1
#endif

#undef WARNINGFUNC
#define WARNINGFUNC(mesg, x) RBIMPL_ATTR_WARNING(mesg) x
#if RBIMPL_HAS_ATTRIBUTE(warning)
# define HAVE_ATTRIBUTE_WARNINGFUNC 1
#endif

/*
  cold attribute for code layout improvements
  RUBY_FUNC_ATTRIBUTE not used because MSVC does not like nested func macros
 */
#undef COLDFUNC
#define COLDFUNC RBIMPL_ATTR_COLD()

#define PRINTF_ARGS(decl, string_index, first_to_check) \
    RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) \
    decl

#undef RUBY_ATTR_ALLOC_SIZE
#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE

#undef RUBY_ATTR_MALLOC
#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()

#undef RUBY_ATTR_RETURNS_NONNULL
#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()

#ifndef FUNC_MINIMIZED
#define FUNC_MINIMIZED(x) x
#endif

#ifndef FUNC_UNOPTIMIZED
#define FUNC_UNOPTIMIZED(x) x
#endif

#ifndef RUBY_ALIAS_FUNCTION_TYPE
#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \
    FUNC_MINIMIZED(type prot) {return (type)name args;}
#endif

#ifndef RUBY_ALIAS_FUNCTION_VOID
#define RUBY_ALIAS_FUNCTION_VOID(prot, name, args) \
    FUNC_MINIMIZED(void prot) {name args;}
#endif

#ifndef RUBY_ALIAS_FUNCTION
#define RUBY_ALIAS_FUNCTION(prot, name, args) \
    RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
#endif

#undef RUBY_FUNC_NONNULL
#define RUBY_FUNC_NONNULL(n, x) RBIMPL_ATTR_NONNULL(n) x

#undef  NORETURN
#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
#define NORETURN_STYLE_NEW

#undef PACKED_STRUCT
#define PACKED_STRUCT(x) \
    RBIMPL_ATTR_PACKED_STRUCT_BEGIN() x RBIMPL_ATTR_PACKED_STRUCT_END()

#undef PACKED_STRUCT_UNALIGNED
#define PACKED_STRUCT_UNALIGNED(x) \
    RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_BEGIN() x \
    RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_END()

#undef RB_UNUSED_VAR
#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()

#endif /* RUBY_BACKWARD2_ATTRIBUTES_H */
PK*J[�x�WW"include/ruby/backward/2/stdalign.hnu�[���#ifndef RUBY_BACKWARD2_STDALIGN_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_STDALIGN_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #RUBY_ALIGNAS / #RUBY_ALIGNOF
 */
#include "ruby/internal/stdalign.h"

#undef RUBY_ALIGNAS
#undef RUBY_ALIGNOF
#define RUBY_ALIGNAS RBIMPL_ALIGNAS /**< @copydoc RBIMPL_ALIGNAS */
#define RUBY_ALIGNOF RBIMPL_ALIGNOF /**< @copydoc RBIMPL_ALIGNOF */

#endif /* RUBY_BACKWARD2_STDALIGN_H */
PK*J[�_�mm+include/ruby/backward/2/gcc_version_since.hnu�[���#ifndef RUBY_BACKWARD2_GCC_VERSION_SINCE_H           /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines old GCC_VERSION_SINCE
 */
#include "ruby/internal/compiler_since.h"

#ifndef GCC_VERSION_SINCE
#define GCC_VERSION_SINCE(x, y, z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
#endif

#ifndef GCC_VERSION_BEFORE
#define GCC_VERSION_BEFORE(x, y, z) \
     (RBIMPL_COMPILER_BEFORE(GCC, (x), (y), (z)) || \
     (RBIMPL_COMPILER_IS(GCC)                    && \
    ((RBIMPL_COMPILER_VERSION_MAJOR == (x))      && \
    ((RBIMPL_COMPILER_VERSION_MINOR == (y))      && \
     (RBIMPL_COMPILER_VERSION_PATCH == (z))))))
#endif

#endif /* RUBY_BACKWARD2_GCC_VERSION_SINCE_H */
PK*J[���!include/ruby/backward/2/rmodule.hnu�[���#ifndef RUBY_BACKWARD2_RMODULE_H                     /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_RMODULE_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Orphan macros.
 *
 * These macros  seems broken since at  least 2011. Nobody (except  ruby itself
 * who is implementing the internals) could have used those macros for a while.
 * Kept public as-is here to keep some theoretical backwards compatibility.
 */
#define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m)
#define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m)
#define RMODULE_M_TBL(m) RCLASS_M_TBL(m)
#define RMODULE_SUPER(m) RCLASS_SUPER(m)

#if defined(__GNUC__)
# warning RMODULE_* macros are deprecated
#elif defined(_MSC_VER)
# pragma message("warning: RMODULE_* macros are deprecated")
#endif
#endif /* RUBY_BACKWARD2_RMODULE_H */
PK*J[|ؗ�	�	 include/ruby/backward/2/stdarg.hnu�[���#ifndef RUBY_BACKWARD2_STDARG_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_STDARG_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines old #_
 *
 * Nobody should  ever use these  macros any  longer.  No known  compilers lack
 * prototypes today.  It's 21st century.  Just forget them.
 */

#undef _
/**
 * @deprecated  Nobody practically needs this macro any longer.
 * @brief       This was a transition path from K&R to ANSI.
 */
#ifdef HAVE_PROTOTYPES
# define _(args) args
#else
# define _(args) ()
#endif

#undef __
/**
 * @deprecated  Nobody practically needs this macro any longer.
 * @brief       This was a transition path from K&R to ANSI.
 */
#ifdef HAVE_STDARG_PROTOTYPES
# define __(args) args
#else
# define __(args) ()
#endif

/**
 * Functions  declared using  this  macro take  arbitrary arguments,  including
 * void.
 *
 * ```CXX
 * void func(ANYARGS);
 * ```
 *
 * This  was a  necessary  evil when  there  was no  such  thing like  function
 * overloading.  But it  is the 21st century today.  People  generally need not
 * use this.  Just use a granular typed function.
 *
 * @see ruby::backward::cxxanyargs
 */
#ifdef __cplusplus
#define ANYARGS ...
#else
#define ANYARGS
#endif

#endif /* RUBY_BACKWARD2_STDARG_H */
PK*J[��'�))include/ruby/backward/2/bool.hnu�[���#ifndef RUBY_BACKWARD2_BOOL_H                        /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_BOOL_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines old TRUE / FALSE
 */
#include "ruby/internal/stdbool.h"

#ifndef FALSE
# define FALSE false
#elif FALSE
# error FALSE must be false
#endif

#ifndef TRUE
# define TRUE true
#elif ! TRUE
# error TRUE must be true
#endif

#endif /* RUBY_BACKWARD2_BOOL_H */
PK*J[� �&&"include/ruby/backward/2/inttypes.hnu�[���#ifndef RUBY_BACKWARD2_INTTYPES_H                    /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_INTTYPES_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      C99 shim for `<inttypes.h>`
 */
#include "ruby/internal/config.h"      /* PRI_LL_PREFIX etc. are here */

#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif

#include "ruby/internal/value.h"       /* PRI_VALUE_PREFIX is here. */

#ifndef PRI_INT_PREFIX
# define PRI_INT_PREFIX ""
#endif

#ifndef PRI_LONG_PREFIX
# define PRI_LONG_PREFIX "l"
#endif

#ifndef PRI_SHORT_PREFIX
# define PRI_SHORT_PREFIX "h"
#endif

#ifdef PRI_64_PREFIX
# /* Take that. */
#elif SIZEOF_LONG == 8
# define PRI_64_PREFIX PRI_LONG_PREFIX
#elif SIZEOF_LONG_LONG == 8
# define PRI_64_PREFIX PRI_LL_PREFIX
#endif

#ifndef PRIdPTR
# define PRIdPTR PRI_PTR_PREFIX"d"
# define PRIiPTR PRI_PTR_PREFIX"i"
# define PRIoPTR PRI_PTR_PREFIX"o"
# define PRIuPTR PRI_PTR_PREFIX"u"
# define PRIxPTR PRI_PTR_PREFIX"x"
# define PRIXPTR PRI_PTR_PREFIX"X"
#endif

#ifndef RUBY_PRI_VALUE_MARK
# define RUBY_PRI_VALUE_MARK "\v"
#endif

#if defined PRIdPTR && !defined PRI_VALUE_PREFIX
# define PRIdVALUE PRIdPTR
# define PRIoVALUE PRIoPTR
# define PRIuVALUE PRIuPTR
# define PRIxVALUE PRIxPTR
# define PRIXVALUE PRIXPTR
# define PRIsVALUE PRIiPTR"" RUBY_PRI_VALUE_MARK
#else
# define PRIdVALUE PRI_VALUE_PREFIX"d"
# define PRIoVALUE PRI_VALUE_PREFIX"o"
# define PRIuVALUE PRI_VALUE_PREFIX"u"
# define PRIxVALUE PRI_VALUE_PREFIX"x"
# define PRIXVALUE PRI_VALUE_PREFIX"X"
# define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
#endif

#ifndef PRI_VALUE_PREFIX
# define PRI_VALUE_PREFIX ""
#endif

#ifdef PRI_TIMET_PREFIX
# /* Take that. */
#elif SIZEOF_TIME_T == SIZEOF_INT
# define PRI_TIMET_PREFIX
#elif SIZEOF_TIME_T == SIZEOF_LONG
# define PRI_TIMET_PREFIX "l"
#elif SIZEOF_TIME_T == SIZEOF_LONG_LONG
# define PRI_TIMET_PREFIX PRI_LL_PREFIX
#endif

#ifdef PRI_PTRDIFF_PREFIX
# /* Take that. */
#elif SIZEOF_PTRDIFF_T == SIZEOF_INT
# define PRI_PTRDIFF_PREFIX ""
#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG
# define PRI_PTRDIFF_PREFIX "l"
#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG
# define PRI_PTRDIFF_PREFIX PRI_LL_PREFIX
#endif

#ifndef PRIdPTRDIFF
# define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
# define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
# define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
# define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
# define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
# define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
#endif

#ifdef PRI_SIZE_PREFIX
# /* Take that. */
#elif SIZEOF_SIZE_T == SIZEOF_INT
# define PRI_SIZE_PREFIX ""
#elif SIZEOF_SIZE_T == SIZEOF_LONG
# define PRI_SIZE_PREFIX "l"
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
# define PRI_SIZE_PREFIX PRI_LL_PREFIX
#endif

#ifndef PRIdSIZE
# define PRIdSIZE PRI_SIZE_PREFIX"d"
# define PRIiSIZE PRI_SIZE_PREFIX"i"
# define PRIoSIZE PRI_SIZE_PREFIX"o"
# define PRIuSIZE PRI_SIZE_PREFIX"u"
# define PRIxSIZE PRI_SIZE_PREFIX"x"
# define PRIXSIZE PRI_SIZE_PREFIX"X"
#endif

#endif /* RUBY_BACKWARD2_INTTYPES_H */
PK*J[������ include/ruby/backward/2/limits.hnu�[���#ifndef RUBY_BACKWARD2_LIMITS_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_LIMITS_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Historical shim for `<limits.h>`.
 *
 * The macros in this header file are obsolescent.  Does anyone really need our
 * own definition of `CHAR_BIT` today?
 */
#include "ruby/internal/config.h"

#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif

#include "ruby/backward/2/long_long.h"

#ifndef LONG_MAX
# /* assuming 32bit(2's complement) long */
# define LONG_MAX 2147483647L
#endif

#ifndef LONG_MIN
# define LONG_MIN (-LONG_MAX-1)
#endif

#ifndef CHAR_BIT
# define CHAR_BIT 8
#endif

#ifdef LLONG_MAX
# /* Take that. */
#elif defined(LONG_LONG_MAX)
# define LLONG_MAX  LONG_LONG_MAX
#elif defined(_I64_MAX)
# define LLONG_MAX _I64_MAX
#else
# /* assuming 64bit(2's complement) long long */
# define LLONG_MAX 9223372036854775807LL
#endif

#ifdef LLONG_MIN
# /* Take that. */
#elif defined(LONG_LONG_MIN)
# define LLONG_MIN  LONG_LONG_MIN
#elif defined(_I64_MAX)
# define LLONG_MIN _I64_MIN
#else
# define LLONG_MIN (-LLONG_MAX-1)
#endif

#ifdef SIZE_MAX
# /* Take that. */
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
# define SIZE_MAX ULLONG_MAX
# define SIZE_MIN ULLONG_MIN
#elif SIZEOF_SIZE_T == SIZEOF_LONG
# define SIZE_MAX ULONG_MAX
# define SIZE_MIN ULONG_MIN
#elif SIZEOF_SIZE_T == SIZEOF_INT
# define SIZE_MAX UINT_MAX
# define SIZE_MIN UINT_MIN
#else
# define SIZE_MAX USHRT_MAX
# define SIZE_MIN USHRT_MIN
#endif

#ifdef SSIZE_MAX
# /* Take that. */
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
# define SSIZE_MAX LLONG_MAX
# define SSIZE_MIN LLONG_MIN
#elif SIZEOF_SIZE_T == SIZEOF_LONG
# define SSIZE_MAX LONG_MAX
# define SSIZE_MIN LONG_MIN
#elif SIZEOF_SIZE_T == SIZEOF_INT
# define SSIZE_MAX INT_MAX
# define SSIZE_MIN INT_MIN
#else
# define SSIZE_MAX SHRT_MAX
# define SSIZE_MIN SHRT_MIN
#endif

#endif /* RUBY_BACKWARD2_LIMITS_H */
PK*J[B�xx include/ruby/backward/2/r_cast.hnu�[���#ifndef RUBY_BACKWARD2_R_CAST_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_R_CAST_H
/**
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines old R_CAST
 *
 * Nobody is actively using this macro.
 */
#define R_CAST(st)   (struct st*)
#define RMOVED(obj)  (R_CAST(RMoved)(obj))

#if defined(__GNUC__)
# warning R_CAST and RMOVED are deprecated
#elif defined(_MSC_VER)
# pragma message("warning: R_CAST and RMOVED are deprecated")
#endif
#endif /* RUBY_BACKWARD2_R_CAST_H */
PK*J[�+�r

 include/ruby/backward/2/assume.hnu�[���#ifndef RUBY_BACKWARD2_ASSUME_H                      /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_BACKWARD2_ASSUME_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 * @brief      Defines #ASSUME / #RB_LIKELY / #UNREACHABLE
 */
#include "ruby/internal/config.h"
#include "ruby/internal/assume.h"
#include "ruby/internal/has/builtin.h"

#define ASSUME             RBIMPL_ASSUME             /**< @old{RBIMPL_ASSUME} */
#define UNREACHABLE        RBIMPL_UNREACHABLE()      /**< @old{RBIMPL_UNREACHABLE} */
#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN /**< @old{RBIMPL_UNREACHABLE_RETURN} */

/* likely */
#if RBIMPL_HAS_BUILTIN(__builtin_expect)
/**
 * Asserts that the given Boolean expression likely holds.
 *
 * @param  x  An expression that likely holds.
 *
 * @note  Consider this macro carefully.  It has been here since when CPUs were
 *        like  babies,  but  contemporary  processors are  beasts.   They  are
 *        smarter than  mare mortals like  us today.  Their  branch predictions
 *        highly expectedly outperform your use of this macro.
 */
# define RB_LIKELY(x)   (__builtin_expect(!!(x), 1))

/**
 * Asserts that the given Boolean expression likely doesn't hold.
 *
 * @param  x  An expression that likely doesn't hold.
 */
# define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
#else
# define RB_LIKELY(x)   (x)
# define RB_UNLIKELY(x) (x)
#endif

#endif /* RUBY_BACKWARD2_ASSUME_H */
PK*J[K..include/ruby/random.hnu�[���#ifndef RUBY_RANDOM_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_RANDOM_H 1
/**
 * @file
 * @date       Sat May  7 11:51:14 JST 2016
 * @copyright  2007-2020 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 *
 * This  is a  set of  APIs  to roll  your  own subclass  of ::rb_cRandom.   An
 * illustrative    example     of    such     PRNG    can    be     found    at
 * `ext/-test-/random/loop.c`.
 */

#include "ruby/ruby.h"

/*
 * version
 * 0: before versioning; deprecated
 * 1: added version, flags and init_32bit function
 */
#define RUBY_RANDOM_INTERFACE_VERSION_MAJOR 1
#define RUBY_RANDOM_INTERFACE_VERSION_MINOR 0

#define RUBY_RANDOM_PASTE_VERSION_SUFFIX(x, y, z) x##_##y##_##z
#define RUBY_RANDOM_WITH_VERSION_SUFFIX(name, major, minor) \
    RUBY_RANDOM_PASTE_VERSION_SUFFIX(name, major, minor)
#define rb_random_data_type \
    RUBY_RANDOM_WITH_VERSION_SUFFIX(rb_random_data_type, \
                                    RUBY_RANDOM_INTERFACE_VERSION_MAJOR, \
                                    RUBY_RANDOM_INTERFACE_VERSION_MINOR)
#define RUBY_RANDOM_INTERFACE_VERSION_INITIALIZER \
    {RUBY_RANDOM_INTERFACE_VERSION_MAJOR, RUBY_RANDOM_INTERFACE_VERSION_MINOR}
#define RUBY_RANDOM_INTERFACE_VERSION_MAJOR_MAX 0xff
#define RUBY_RANDOM_INTERFACE_VERSION_MINOR_MAX 0xff

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Base components of the random interface.
 *
 * @internal
 *
 * Ideally this  could be an  empty class if  we could assume  C++, but in  C a
 * struct must have at least one field.
 */
struct rb_random_struct {
    /** Seed, passed through e.g. `Random.new` */
    VALUE seed;
};
typedef struct rb_random_struct rb_random_t; /**< @see ::rb_random_struct */

RBIMPL_ATTR_NONNULL(())
/**
 * This is the type of functions called when your random object is initialised.
 * Passed buffer  is the seed  object basically.  But in  Ruby a number  can be
 * really big.  This type of functions accept  such big integers as a series of
 * machine words.
 *
 * @param[out]  rng  Your random struct to fill in.
 * @param[in]   buf  Seed, maybe converted from a bignum.
 * @param[in]   len  Number of words of `buf`.
 * @post        `rng` is initialised using the passed seeds.
 */
typedef void rb_random_init_func(rb_random_t *rng, const uint32_t *buf, size_t len);

RBIMPL_ATTR_NONNULL(())
/**
 * This is the type of functions called when your random object is initialised.
 * Passed data is the seed integer.
 *
 * @param[out]  rng  Your random struct to fill in.
 * @param[in]   data Seed, single word.
 * @post        `rng` is initialised using the passed seeds.
 */
typedef void rb_random_init_int32_func(rb_random_t *rng, uint32_t data);

RBIMPL_ATTR_NONNULL(())
/**
 * This is the type of functions  called from your object's `#rand` method.
 *
 * @param[out]  rng  Your random struct to extract an integer from.
 * @return      A random number.
 * @post        `rng` is consumed somehow.
 */
typedef unsigned int rb_random_get_int32_func(rb_random_t *rng);

RBIMPL_ATTR_NONNULL(())
/**
 * This is the type of functions called from your object's `#bytes` method.
 *
 * @param[out]  rng  Your random struct to extract an integer from.
 * @param[out]  buf  Return buffer of at least `len` bytes length.
 * @param[in]   len  Number of bytes of `buf`.
 * @post        `rng` is consumed somehow.
 * @post        `buf` is filled with random bytes.
 */
typedef void rb_random_get_bytes_func(rb_random_t *rng, void *buf, size_t len);

RBIMPL_ATTR_NONNULL(())
/**
 * This is the type of functions called from your object's `#rand` method.
 *
 * @param[out]  rng   Your random struct to extract an integer from.
 * @param[in]   excl  Pass nonzero value here to indicate you don't want 1.0.
 * @return      A random number of range 0.0 to 1.0.
 * @post        `rng` is consumed somehow.
 */
typedef double rb_random_get_real_func(rb_random_t *rng, int excl);

/** PRNG algorithmic interface, analogous to Ruby level classes. */
typedef struct {
    /** Number of bits of seed numbers. */
    size_t default_seed_bits;

    /**
     * Major/minor versions of this interface
     */
    struct {
        uint8_t major, minor;
    } version;

    /**
     * Reserved flags
     */
    uint16_t flags;

    /** Function to initialize from uint32_t array. */
    rb_random_init_func *init;

    /** Function to initialize from single uint32_t. */
    rb_random_init_int32_func *init_int32;

    /** Function to obtain a random integer. */
    rb_random_get_int32_func *get_int32;

    /**
     * Function to obtain a series of random bytes.  If your PRNG have a native
     * method to  yield arbitrary number of  bytes use that to  implement this.
     * But  in   case  you  lack   such  things,  you   can  do  so   by  using
     * rb_rand_bytes_int32()
     *
     * ```CXX
     * extern rb_random_get_int32_func your_get_int32_func;
     *
     * void
     * your_get_byes_func(rb_random_t *rng, void *buf, size_t len)
     * {
     *     rb_rand_bytes_int32(your_get_int32_func, rng, buf, len);
     * }
     * ```
     */
    rb_random_get_bytes_func *get_bytes;

    /**
     * Function to obtain  a random double.  If your PRNG  have a native method
     * to yield a floating point random number use that to implement this.  But
     * in   case   you  lack   such   things,   you   can   do  so   by   using
     * rb_int_pair_to_real().
     *
     * ```CXX
     * extern rb_random_get_int32_func your_get_int32_func;
     *
     * void
     * your_get_real_func(rb_random_t *rng, int excl)
     * {
     *     auto a = your_get_int32_func(rng);
     *     auto b = your_get_int32_func(rng);
     *     return rb_int_pair_to_real(a, b, excl);
     * }
     * ```
     */
    rb_random_get_real_func *get_real;
} rb_random_interface_t;

/**
 * This utility macro defines 4 functions named prefix_init, prefix_init_int32,
 * prefix_get_int32, prefix_get_bytes.
 */
#define RB_RANDOM_INTERFACE_DECLARE(prefix) \
    static void prefix##_init(rb_random_t *, const uint32_t *, size_t); \
    static void prefix##_init_int32(rb_random_t *, uint32_t); \
    static unsigned int prefix##_get_int32(rb_random_t *); \
    static void prefix##_get_bytes(rb_random_t *, void *, size_t)

/**
 * Identical   to   #RB_RANDOM_INTERFACE_DECLARE   except  it   also   declares
 * prefix_get_real.
 */
#define RB_RANDOM_INTERFACE_DECLARE_WITH_REAL(prefix) \
    RB_RANDOM_INTERFACE_DECLARE(prefix); \
    static double prefix##_get_real(rb_random_t *, int)

/**
 * This    utility    macro   expands    to    the    names   declared    using
 * #RB_RANDOM_INTERFACE_DECLARE.    Expected   to   be   used   inside   of   a
 * ::rb_random_interface_t initialiser:
 *
 * ```CXX
 * RB_RANDOM_INTERFACE_DECLARE(foo);
 *
 * static inline constexpr rb_random_interface_t foo_interface = {
 *     32768, // bits
 *     RB_RANDOM_INTERFACE_DEFINE(foo),
 * };
 * ```
 */
#define RB_RANDOM_INTERFACE_DEFINE(prefix) \
    RUBY_RANDOM_INTERFACE_VERSION_INITIALIZER, 0, \
    prefix##_init, \
    prefix##_init_int32, \
    prefix##_get_int32, \
    prefix##_get_bytes

/**
 * Identical   to   #RB_RANDOM_INTERFACE_DEFINE    except   it   also   defines
 * prefix_get_real.
 */
#define RB_RANDOM_INTERFACE_DEFINE_WITH_REAL(prefix) \
    RB_RANDOM_INTERFACE_DEFINE(prefix), \
    prefix##_get_real

#define RB_RANDOM_DEFINE_INIT_INT32_FUNC(prefix) \
    static void prefix##_init_int32(rb_random_t *rnd, uint32_t data) \
    { \
        prefix##_init(rnd, &data, 1); \
    }

#if defined _WIN32 && !defined __CYGWIN__
typedef rb_data_type_t rb_random_data_type_t;
# define RB_RANDOM_PARENT 0
#else

/** This is the type of ::rb_random_data_type. */
typedef const rb_data_type_t rb_random_data_type_t;

/**
 * This utility macro can be used when you define your own PRNG type:
 *
 * ```CXX
 * static inline constexpr rb_random_interface_t your_if = {
 *     0, RB_RANDOM_INTERFACE_DEFINE(your),
 * };
 *
 * static inline constexpr rb_random_data_type_t your_prng_type = {
 *     "your PRNG",
 *     { rb_random_mark, },
 *     RB_RANDOM_PARENT,                 // <<-- HERE
 *     &your_if,
 *     0,
 * }
 * ```
 */
# define RB_RANDOM_PARENT &rb_random_data_type
#endif

/**
 * This macro  is expected  to be  called exactly  once at  the beginning  of a
 * program, possibly from  inside of your `Init_Foo()`  function.  Depending on
 * platforms #RB_RANDOM_PARENT  can require  a fixup.   This routine  does that
 * when necessary.
 */
#define RB_RANDOM_DATA_INIT_PARENT(random_data) \
    rbimpl_random_data_init_parent(&random_data)

/**
 * This   is    the   implementation   of    ::rb_data_type_struct::dmark   for
 * ::rb_random_data_type.  In case  your PRNG does not involve  Ruby objects at
 * all (which is quite likely), you can simply reuse it.
 *
 * @param[out]  ptr  Target to mark, which is a ::rb_random_t this case.
 */
void rb_random_mark(void *ptr);

/**
 * Initialises  an allocated  ::rb_random_t instance.   Call it  from your  own
 * initialiser appropriately.
 *
 * @param[out]  rnd  Your PRNG's base part.
 * @post        `rnd` is filled with an initial state.
 */
void rb_random_base_init(rb_random_t *rnd);

/**
 * Generates a 64 bit floating point number by concatenating two 32bit unsigned
 * integers.
 *
 * @param[in]  a     Most significant 32 bits of the result.
 * @param[in]  b     Least significant 32 bits of the result.
 * @param[in]  excl  Whether the result should exclude 1.0 or not.
 * @return     A double, whose range is either `[0, 1)` or `[0, 1]`.
 * @see        ::rb_random_interface_t::get_real()
 *
 * @internal
 *
 * This in fact has nothing to do with PRNGs.
 */
double rb_int_pair_to_real(uint32_t a, uint32_t b, int excl);

/**
 * Repeatedly calls  the passed function over  and over again until  the passed
 * buffer is filled with random bytes.
 *
 * @param[in]   func  Generator function.
 * @param[out]  prng  Passed as-is to `func`.
 * @param[out]  buff  Return buffer.
 * @param[in]   size  Number of words of `buff`.
 * @post        `buff` is filled with random bytes.
 * @post        `prng` is updated by `func`.
 * @see        ::rb_random_interface_t::get_bytes()
 */
void rb_rand_bytes_int32(rb_random_get_int32_func *func, rb_random_t *prng, void *buff, size_t size);

/**
 * The data that  holds the backend type of ::rb_cRandom.   Used as your PRNG's
 * ::rb_data_type_struct::parent.
 */
RUBY_EXTERN const rb_data_type_t rb_random_data_type;

RBIMPL_SYMBOL_EXPORT_END()

RBIMPL_ATTR_PURE_UNLESS_DEBUG()
/* :TODO: can this function be __attribute__((returns_nonnull)) or not? */
/**
 * Queries the interface of the passed random object.
 *
 * @param[in]  obj  An instance (of a subclass) of ::rb_cRandom.
 * @return     Its corresponding ::rb_random_interface_t interface.
 */
static inline const rb_random_interface_t *
rb_rand_if(VALUE obj)
{
    RBIMPL_ASSERT_OR_ASSUME(RTYPEDDATA_P(obj));
    const struct rb_data_type_struct *t = RTYPEDDATA_TYPE(obj);
    const void *ret = t->data;
    return RBIMPL_CAST((const rb_random_interface_t *)ret);
}

RBIMPL_ATTR_NOALIAS()
/**
 * @private
 *
 * This  is an  implementation detail  of #RB_RANDOM_DATA_INIT_PARENT.   People
 * don't use it directly.
 *
 * @param[out]  random_data  Region to fill.
 * @post        ::rb_random_data_type is filled appropriately.
 */
static inline void
rbimpl_random_data_init_parent(rb_random_data_type_t *random_data)
{
#if defined _WIN32 && !defined __CYGWIN__
    random_data->parent = &rb_random_data_type;
#endif
}

#endif /* RUBY_RANDOM_H */
PK*J[�D�		include/ruby/vm.hnu�[���#ifndef RUBY_VM_H                                    /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_VM_H 1
/**
 * @file
 * @author     $Author$
 * @date       Sat May 31 15:17:36 2008
 * @copyright  Copyright (C) 2008 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 *
 * We  planned to  have multiple  VMs  run side-by-side.   The API  here was  a
 * preparation of that feature.  The topic branch was eventually abandoned, and
 * we now have Ractor.  This file is kind of obsolescent.
 */
#include "ruby/internal/dllexport.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * The opaque struct to hold VM internals.  Its fields are intentionally hidden
 * from extension libraries because it changes drastically time to time.
 */
typedef struct rb_vm_struct ruby_vm_t;

/**
 * Destructs the  passed VM.   You don't  have to call  this API  directly now,
 * because there is  no way to create one.   There is only one VM  at one time.
 * ruby_stop() should just suffice.
 */
int ruby_vm_destruct(ruby_vm_t *vm);

/**
 * ruby_vm_at_exit registers a function _func_ to be invoked when a VM
 * passed away.  Functions registered this way runs in reverse order
 * of registration, just like END {} block does.  The difference is
 * its timing to be triggered. ruby_vm_at_exit functions runs when a
 * VM _passed_ _away_, while END {} blocks runs just _before_ a VM
 * _is_ _passing_ _away_.
 *
 * You cannot register a function to another VM than where you are in.
 * So where to register is intuitive, omitted.  OTOH the argument
 * _func_ cannot know which VM it is in because at the time of
 * invocation, the VM has already died and there is no execution
 * context.  The VM itself is passed as the first argument to it.
 *
 * @param[in] func the function to register.
 */
void ruby_vm_at_exit(void(*func)(ruby_vm_t *));

/**
 * Returns whether the Ruby VM will free all memory at shutdown.
 *
 * @return true if free-at-exit is enabled, false otherwise.
 */
bool ruby_free_at_exit_p(void);

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_VM_H */
PK*J[��<�Q�Q�include/ruby/io.hnu�[���#ifndef RUBY_IO_H                                    /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_IO_H 1
/**
 * @file
 * @author     $Author$
 * @date       Fri Nov 12 16:47:09 JST 1993
 * @copyright  Copyright (C) 1993-2007 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */
#include "ruby/internal/config.h"

#include <stdio.h>
#include "ruby/encoding.h"

#if defined(HAVE_STDIO_EXT_H)
#include <stdio_ext.h>
#endif

#include <errno.h>

/** @cond INTERNAL_MACRO */
#if defined(HAVE_POLL)
#  ifdef _AIX
#    define reqevents events
#    define rtnevents revents
#  endif
#  include <poll.h>
#  ifdef _AIX
#    undef reqevents
#    undef rtnevents
#    undef events
#    undef revents
#  endif
#  define RB_WAITFD_IN  POLLIN
#  if defined(POLLPRI)
#    define RB_WAITFD_PRI POLLPRI
#  else
#    define RB_WAITFD_PRI 0
#  endif
#  define RB_WAITFD_OUT POLLOUT
#else
#  define RB_WAITFD_IN  0x001
#  define RB_WAITFD_PRI 0x002
#  define RB_WAITFD_OUT 0x004
#endif
/** @endcond */

#include "ruby/internal/attr/const.h"
#include "ruby/internal/attr/packed_struct.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/value.h"

// IO#wait, IO#wait_readable, IO#wait_writable, IO#wait_priority are defined by this implementation.
#define RUBY_IO_WAIT_METHODS

// Used as the default timeout argument to `rb_io_wait` to use the `IO#timeout` value.
#define RUBY_IO_TIMEOUT_DEFAULT Qnil

RBIMPL_SYMBOL_EXPORT_BEGIN()

struct stat;
struct timeval;

/**
 * Indicates that a timeout has occurred while performing an IO operation.
 */
RUBY_EXTERN VALUE rb_eIOTimeoutError;

/**
 * Type of events that an IO can wait.
 *
 * @internal
 *
 * This is visible from extension libraries because `io/wait` wants it.
 */
enum rb_io_event {
    RUBY_IO_READABLE = RB_WAITFD_IN,  /**< `IO::READABLE` */
    RUBY_IO_WRITABLE = RB_WAITFD_OUT, /**< `IO::WRITABLE` */
    RUBY_IO_PRIORITY = RB_WAITFD_PRI, /**< `IO::PRIORITY` */
};

typedef enum rb_io_event rb_io_event_t;

/**
 * IO  buffers.   This  is  an implementation  detail  of  ::rb_io_t::wbuf  and
 * ::rb_io_t::rbuf.  People don't manipulate it directly.
 */
RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_BEGIN()
struct rb_io_internal_buffer {

    /** Pointer to the underlying memory region, of at least `capa` bytes. */
    char *ptr;                  /* off + len <= capa */

    /** Offset inside of `ptr`. */
    int off;

    /** Length of the buffer. */
    int len;

    /** Designed capacity of the buffer. */
    int capa;
} RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_END();

/** @alias{rb_io_buffer_t} */
typedef struct rb_io_internal_buffer rb_io_buffer_t;

/** Decomposed encoding flags (e.g. `"enc:enc2""`). */
/*
 * enc  enc2 read action                      write action
 * NULL NULL force_encoding(default_external) write the byte sequence of str
 * e1   NULL force_encoding(e1)               convert str.encoding to e1
 * e1   e2   convert from e2 to e1            convert str.encoding to e2
 */
struct rb_io_encoding {
    /** Internal encoding. */
    rb_encoding *enc;
    /** External encoding. */
    rb_encoding *enc2;
    /**
     * Flags.
     *
     * @see enum ::ruby_econv_flag_type
     */
    int ecflags;
    /**
     * Flags as Ruby hash.
     *
     * @internal
     *
     * This is set.  But used from nowhere maybe?
     */
    VALUE ecopts;
};

#ifndef HAVE_RB_IO_T
#define HAVE_RB_IO_T 1
/** Ruby's IO, metadata and buffers. */
struct rb_io {
    /** The IO's Ruby level counterpart. */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    VALUE self;

    /** stdio ptr for read/write, if available. */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    FILE *stdio_file;

    /** file descriptor. */
    RBIMPL_ATTR_DEPRECATED(("rb_io_descriptor"))
    int fd;

    /** mode flags: FMODE_XXXs */
    RBIMPL_ATTR_DEPRECATED(("rb_io_mode"))
    int mode;

    /** child's pid (for pipes) */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    rb_pid_t pid;

    /** number of lines read */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    int lineno;

    /** pathname for file */
    RBIMPL_ATTR_DEPRECATED(("rb_io_path"))
    VALUE pathv;

    /** finalize proc */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    void (*finalize)(struct rb_io*,int);

    /** Write buffer. */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    rb_io_buffer_t wbuf;

    /**
     * (Byte)  read   buffer.   Note  also   that  there  is  a   field  called
     * ::rb_io_t::cbuf, which also concerns read IO.
     */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    rb_io_buffer_t rbuf;

    /**
     * Duplex IO object, if set.
     *
     * @see rb_io_set_write_io()
     */
    RBIMPL_ATTR_DEPRECATED(("rb_io_get_write_io"))
    VALUE tied_io_for_writing;

    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    struct rb_io_encoding encs; /**< Decomposed encoding flags. */

    /** Encoding converter used when reading from this IO. */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    rb_econv_t *readconv;

    /**
     * rb_io_ungetc()  destination.   This  buffer   is  read  before  checking
     * ::rb_io_t::rbuf
     */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    rb_io_buffer_t cbuf;

    /** Encoding converter used when writing to this IO. */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    rb_econv_t *writeconv;

    /**
     * This is, when set, an instance  of ::rb_cString which holds the "common"
     * encoding.   Write  conversion  can  convert strings  twice...   In  case
     * conversion from encoding  X to encoding Y does not  exist, Ruby finds an
     * encoding Z that bridges the two, so that X to Z to Y conversion happens.
     */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    VALUE writeconv_asciicompat;

    /** Whether ::rb_io_t::writeconv is already set up. */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    int writeconv_initialized;

    /**
     * Value   of    ::rb_io_t::rb_io_enc_t::ecflags   stored    right   before
     * initialising ::rb_io_t::writeconv.
     */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    int writeconv_pre_ecflags;

    /**
     * Value of ::rb_io_t::rb_io_enc_t::ecopts stored right before initialising
     * ::rb_io_t::writeconv.
     */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    VALUE writeconv_pre_ecopts;

    /**
     * This is a Ruby  level mutex.  It avoids multiple threads  to write to an
     * IO at  once; helps  for instance rb_io_puts()  to ensure  newlines right
     * next to its arguments.
     *
     * This of course doesn't help inter-process IO interleaves, though.
     */
    RBIMPL_ATTR_DEPRECATED(("with no replacement"))
    VALUE write_lock;

    /**
     * The timeout associated with this IO when performing blocking operations.
     */
    RBIMPL_ATTR_DEPRECATED(("rb_io_timeout/rb_io_set_timeout"))
    VALUE timeout;
};
#endif

typedef struct rb_io rb_io_t;

/** @alias{rb_io_enc_t} */
typedef struct rb_io_encoding rb_io_enc_t;

/**
 * @name Possible flags for ::rb_io_t::mode
 *
 * @{
 */

/** The IO is opened for reading. */
#define FMODE_READABLE              0x00000001

/** The IO is opened for writing. */
#define FMODE_WRITABLE              0x00000002

/** The IO is opened for both read/write. */
#define FMODE_READWRITE             (FMODE_READABLE|FMODE_WRITABLE)

/**
 * The IO  is in "binary  mode".  This  is not what  everything rb_io_binmode()
 * concerns.  This low-level flag is to stop CR <-> CRLF conversions that would
 * happen in the underlying operating system.
 *
 * Setting this  one and #FMODE_TEXTMODE at  the same time is  a contradiction.
 * Setting this one and #ECONV_NEWLINE_DECORATOR_MASK  at the same time is also
 * a contradiction.
 */
#define FMODE_BINMODE               0x00000004

/**
 * The  IO  is in  "sync  mode".   All output  is  immediately  flushed to  the
 * underlying operating system then.  Can  be set via rb_io_synchronized(), but
 * there is no way except calling `IO#sync=` to reset.
 */
#define FMODE_SYNC                  0x00000008

/**
 * The IO  is a TTY.  What  is a TTY and  what isn't depends on  the underlying
 * operating system's `isatty(3)` output.  You cannot change this.
 */
#define FMODE_TTY                   0x00000010

/**
 * Ruby eventually  detects that the IO  is bidirectional.  For instance  a TTY
 * has such  property.  There are  several other  things known to  be duplexed.
 * Additionally you  (extension library  authors) can  also implement  your own
 * bidirectional IO subclasses.  One of such example is `Socket`.
 */
#define FMODE_DUPLEX                0x00000020

/**
 * The IO is opened  for appending.  This mode always writes at  the end of the
 * IO.  Ruby manages  this flag for record but basically  the logic behind this
 * mode is at the underlying operating system.  We almost do nothing.
 */
#define FMODE_APPEND                0x00000040

/**
 * The IO is  opened for creating.  This makes sense  only when the destination
 * file does  not exist at  the time  the IO object  was created.  This  is the
 * default mode  for writing,  but you  can pass `"r+"`  to `IO.open`  etc., to
 * reroute this creation.
 */
#define FMODE_CREATE                0x00000080
/* #define FMODE_NOREVLOOKUP        0x00000100 */

/**
 * This flag amends the effect of #FMODE_CREATE,  so that if there already is a
 * file at the given path the operation fails.  Using this you can be sure that
 * the file you get is a fresh new one.
 */
#define FMODE_EXCL                  0x00000400

/**
 * This flag amends the effect of #FMODE_CREATE,  so that if there already is a
 * file at the given path it gets truncated.
 */
#define FMODE_TRUNC                 0x00000800

/**
 * The IO is in "text mode".  On  systems where such mode make sense, this flag
 * changes  the way  the  IO handles  the  contents.  On  POSIX  systems it  is
 * basically  a no-op,  but with  this  flag set  you can  optionally let  Ruby
 * manually convert newlines, unlike when in binary mode:
 *
 * ```ruby
 * IO.open("/p/a/t/h", "wt", crlf_newline: true) # "wb" is NG.
 * ```
 *
 * Setting this one and #FMODE_BINMODE at the same time is a contradiction.
 */
#define FMODE_TEXTMODE              0x00001000
/**
 * This flag means that an IO object is wrapping an "external" file descriptor,
 * which is owned by something outside the Ruby interpreter (usually a C extension).
 * Ruby will not close this file when the IO object is garbage collected.
 * If this flag is set, then IO#autoclose? is false, and vice-versa.
 *
 * This flag was previously called FMODE_PREP internally.
 */
#define FMODE_EXTERNAL              0x00010000

/* #define FMODE_SIGNAL_ON_EPIPE    0x00020000 */

/**
 * This flag amends the  encoding of the IO so that the BOM  of the contents of
 * the IO takes effect.
 */
#define FMODE_SETENC_BY_BOM         0x00100000
/* #define FMODE_UNIX                  0x00200000 */
/* #define FMODE_INET                  0x00400000 */
/* #define FMODE_INET6                 0x00800000 */

/** @} */

/**
 * Allocate a new IO object, with the given file descriptor.
 */
VALUE rb_io_open_descriptor(VALUE klass, int descriptor, int mode, VALUE path, VALUE timeout, struct rb_io_encoding *encoding);

/**
 * Returns whether or not the underlying IO is closed.
 *
 * @return Whether the underlying IO is closed.
 */
VALUE rb_io_closed_p(VALUE io);

/**
 * Queries the underlying IO pointer.
 *
 * @param[in]   obj              An IO object.
 * @param[out]  fp               A variable of type ::rb_io_t.
 * @exception   rb_eFrozenError  `obj` is frozen.
 * @exception   rb_eIOError      `obj` is closed.
 * @post        `fp` holds `obj`'s underlying IO.
 */
#define RB_IO_POINTER(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)

/**
 * This is  an old name  of #RB_IO_POINTER.  Not sure  if we want  to deprecate
 * this macro.  There still are tons of usages out there in the wild.
 */
#define GetOpenFile RB_IO_POINTER

/**
 * Fills an IO object.  This makes the best sense when called from inside of an
 * `#initialize`  method  of  a  3rd  party  extension  library  that  inherits
 * ::rb_cIO.
 *
 * If the passed  IO is already opened  for something it first  closes that and
 * opens a new one instead.
 *
 * @param[out]  obj              An IO object to fill in.
 * @param[out]  fp               A variable of type ::rb_io_t.
 * @exception   rb_eTypeError    `obj` is not ::RUBY_T_FILE.
 * @post        `fp` holds `obj`'s underlying IO.
 */
#define RB_IO_OPEN(obj, fp) do {\
    (fp) = rb_io_make_open_file(obj);\
} while (0)

/**
 * This is an old  name of #RB_IO_OPEN.  Not sure if we  want to deprecate this
 * macro.  There still are usages out there in the wild.
 */
#define MakeOpenFile RB_IO_OPEN

/**
 * @private
 *
 * This  is an  implementation  detail  of #RB_IO_OPEN.   People  don't use  it
 * directly.
 *
 * @param[out]  obj              An IO object to fill in.
 * @exception   rb_eTypeError    `obj` is not ::RUBY_T_FILE.
 * @return      `obj`'s backend IO.
 * @post        `obj` is initialised.
 */
rb_io_t *rb_io_make_open_file(VALUE obj);

/**
 * Finds or creates  a stdio's file structure  from a Ruby's one.   This can be
 * handy if you want to call an external API that accepts `FILE *`.
 *
 * @note  Note however, that `FILE`s can  have their own buffer.  Mixing Ruby's
 *        and stdio's file are basically dangerous.  Use with care.
 *
 * @param[in,out]  fptr  Target IO.
 * @return         A stdio's file, created if absent.
 * @post           `fptr` has its corresponding stdio's file.
 *
 * @internal
 *
 * We had rich support  for `FILE` before!  In the days  of 1.8.x ::rb_io_t was
 * like this:
 *
 * ```CXX
 * typedef struct rb_io {
 *     FILE *f;                    // stdio ptr for read/write
 *     FILE *f2;                   // additional ptr for rw pipes
 *     int mode;                   // mode flags
 *     int pid;                    // child's pid (for pipes)
 *     int lineno;                 // number of lines read
 *     char *path;                 // pathname for file
 *     void (*finalize) _((struct rb_io*,int)); // finalize proc
 * } rb_io_t;
 *```
 *
 * But we  eventually abandoned this layout.   It was too difficult.   We could
 * not have fine-grained control over the `f` field.
 *
 * - `FILE` tends  to be  an opaque  struct.  It does  not interface  well with
 *   `select(2)` etc.   This makes  IO multiplexing  quite hard.   Using stdio,
 *   there is arguably no portable way to know if `fwrite(3)` blocks.
 *
 * - Nonblocking  mode,  which   is  another  core  concept   that  enables  IO
 *   multiplexing, does not interface with stdio routines at all.
 *
 * - Detection of duplexed IO is also hard for the same reason.
 *
 * - `feof(3)` is not portable.
 *   https://mail.python.org/pipermail/python-dev/2001-January/011390.html
 *
 * - Solaris was a thing  back then.  They could not have  more than 256 `FILE`
 *   structures  at  a  time.   Their   file  descriptors  ware  stored  in  an
 *   `unsigned char`.
 *
 * - It is next to impossible to avoid  SEGV, especially when a thread tries to
 *   `ungetc(3)`-ing from a `FILE` which is `fread(3)`-ed by another one.
 *
 * In short, it is a bad idea to let someone else manage IO buffers, especially
 * someone  you cannot  control.   This still  applies  to extension  libraries
 * methinks.  Ruby doesn't prevent you from  shooting yourself in the foot, but
 * consider yourself warned here.
 */
FILE *rb_io_stdio_file(rb_io_t *fptr);

/**
 * Identical to rb_io_stdio_file(), except it takes file descriptors instead of
 * Ruby's  IO.   It  can  also  be  seen  as  a  compatibility  layer  to  wrap
 * `fdopen(3)`.   Nowadays  all  supporting systems,  including  Windows,  have
 * `fdopen`.  Why not use them.
 *
 * @param[in]  fd                   A file descriptor.
 * @param[in]  modestr              C string, something like `"r+"`.
 * @exception  rb_eSystemCallError  `fdopen` failed for some reason.
 * @return     A stdio's file associated with `fd`.
 * @note       Interpretation of `modestr` depends  on the underlying operating
 *             system.  On  glibc you might  be able  to pass e.g.  `"rm"`, but
 *             that's an extension to POSIX.
 */
FILE *rb_fdopen(int fd, const char *modestr);

/**
 * Maps  a file  mode  string (that  rb_file_open() takes)  into  a mixture  of
 * `FMODE_`        flags.         This       for        instance        returns
 * `FMODE_WRITABLE | FMODE_TRUNC | FMODE_CREATE | FMODE_EXCL` for `"wx"`.
 *
 * @note  You cannot pass this return value to OS provided `open(2)` etc.
 *
 * @param[in]  modestr       File mode, in C's string.
 * @exception  rb_eArgError  `modestr` is broken.
 * @return     A set of flags.
 *
 * @internal
 *
 * rb_io_modestr_fmode() is not a pure function because it raises.
 */
int rb_io_modestr_fmode(const char *modestr);

/**
 * Identical  to rb_io_modestr_fmode(),  except it  returns a  mixture of  `O_`
 * flags.  This for instance returns `O_WRONLY | O_TRUNC | O_CREAT | O_EXCL` for
 * `"wx"`.
 *
 * @param[in]  modestr       File mode, in C's string.
 * @exception  rb_eArgError  `modestr` is broken.
 * @return     A set of flags.
 *
 * @internal
 *
 * rb_io_modestr_oflags() is not a pure function because it raises.
 */
int rb_io_modestr_oflags(const char *modestr);

RBIMPL_ATTR_CONST()
/**
 * Converts an  oflags (that rb_io_modestr_oflags()  returns) to a  fmode (that
 * rb_io_mode_flags() returns).  This is a purely functional operation.
 *
 * @param[in]  oflags  A set of `O_` flags.
 * @return     Corresponding set of `FMODE_` flags.
 */
int rb_io_oflags_fmode(int oflags);

/**
 * Asserts that an IO is opened for writing.
 *
 * @param[in]  fptr         An IO you want to write to.
 * @exception  rb_eIOError  `fptr` is not for writing.
 * @post       Upon successful return `fptr` is ready for writing.
 *
 * @internal
 *
 * The parameter must have been `const rb_io_t *`.
 */
void rb_io_check_writable(rb_io_t *fptr);

/** @alias{rb_io_check_byte_readable} */
void rb_io_check_readable(rb_io_t *fptr);

/**
 * Asserts that an  IO is opened for character-based reading.   A character can
 * be  wider than  a  byte.  Because  of  this  we have  to  buffer reads  from
 * descriptors.  This fiction checks if that is possible.
 *
 * @param[in]  fptr         An IO you want to read characters from.
 * @exception  rb_eIOError  `fptr` is not for reading.
 * @post       Upon successful return `fptr` is ready for reading characters.
 *
 * @internal
 *
 * Unlike  rb_io_check_writable() the  parameter cannot  be `const  rb_io_t *`.
 * Behind the scene this operation flushes  its write buffers.  This is because
 * of OpenSSL.  They mandate this way.
 *
 * @see  "Can I use OpenSSL's SSL library with non-blocking I/O?"
 *        https://www.openssl.org/docs/faq.html
 */
void rb_io_check_char_readable(rb_io_t *fptr);

/**
 * Asserts  that  an IO  is  opened  for  byte-based reading.   Byte-based  and
 * character-based reading operations cannot be mixed at a time.
 *
 * @param[in]  fptr         An IO you want to read characters from.
 * @exception  rb_eIOError  `fptr` is not for reading.
 * @post       Upon successful return `fptr` is ready for reading bytes.
 */
void rb_io_check_byte_readable(rb_io_t *fptr);

/**
 * Destroys the given IO.  Any pending operations are flushed.
 *
 * @note  It makes no sense to call this function from anywhere outside of your
 *        class' ::rb_data_type_struct::dfree.
 *
 * @param[out]  fptr  IO to close.
 * @post        `fptr` is no longer a valid pointer.
 */
int rb_io_fptr_finalize(rb_io_t *fptr);

/**
 * Sets #FMODE_SYNC.
 *
 * @note  There is no way for C extensions to undo this operation.
 *
 * @param[out]  fptr         IO to set the flag.
 * @exception   rb_eIOError  `fptr` is not opened.
 * @post        `fptr` is in sync mode.
 */
void rb_io_synchronized(rb_io_t *fptr);

/**
 * Asserts that the passed IO is initialised.
 *
 * @param[in]  fptr         IO that you expect be initialised.
 * @exception  rb_eIOError  `fptr` is not initialised.
 * @post       `fptr` is initialised.
 */
void rb_io_check_initialized(rb_io_t *fptr);

/**
 * This badly named function asserts that the passed IO is _open_.
 *
 * @param[in]  fptr         An IO
 * @exception  rb_eIOError  `fptr` is closed.
 * @post       `fptr` is open.
 */
void rb_io_check_closed(rb_io_t *fptr);

/**
 * Identical  to rb_io_check_io(),  except it  raises exceptions  on conversion
 * failures.
 *
 * @param[in]  io             Target object.
 * @exception  rb_eTypeError  No implicit conversion to IO.
 * @return     Return value of `obj.to_io`.
 * @see        rb_str_to_str
 * @see        rb_ary_to_ary
 */
VALUE rb_io_get_io(VALUE io);

/**
 * Try converting an object to its  IO representation using its `to_io` method,
 * if any.  If there is no such thing, returns ::RUBY_Qnil.
 *
 * @param[in]  io             Arbitrary ruby object to convert.
 * @exception  rb_eTypeError  `obj.to_io` returned something non-IO.
 * @retval     RUBY_Qnil      No conversion from `obj` to IO defined.
 * @retval     otherwise      Converted IO representation of `obj`.
 * @see        rb_check_array_type
 * @see        rb_check_string_type
 * @see        rb_check_hash_type
 */
VALUE rb_io_check_io(VALUE io);

/**
 * Queries the tied IO  for writing.  An IO can be  duplexed.  Fine.  The thing
 * is,  that characteristics  could  sometimes be  achieved  by the  underlying
 * operating  system (for  instance  a  socket's duplexity  is  by nature)  but
 * sometimes  by us.   Notable example  is a  bidirectional pipe.   Suppose you
 * have:
 *
 * ```ruby
 * fp = IO.popen("-", "r+")
 * ```
 *
 * This pipe  is duplexed (the  `"r+"`).  You can  both read from/write  to it.
 * However your operating system may  or may not implement bidirectional pipes.
 * FreeBSD is one  of such operating systems  known to have one;  OTOH Linux is
 * known  to lack  such  things.   So to  achieve  maximum portability,  Ruby's
 * bidirectional pipes are done  purely in user land.  A pipe  in ruby can have
 * multiple file descriptors; one for reading  and the other for writing.  This
 * API  is to  obtain the  IO port  which corresponds  to the  passed one,  for
 * writing.
 *
 * @param[in]  io  An IO.
 * @return     Its tied IO for writing, if any, or `io` itself otherwise.
 */
VALUE rb_io_get_write_io(VALUE io);

/**
 * Assigns the tied IO for writing.   See rb_io_get_write_io() for what a "tied
 * IO for writing" is.
 *
 * @param[out]  io         An IO.
 * @param[in]   w          Another IO.
 * @retval      RUBY_Qnil  There was no tied IO for writing for `io`.
 * @retval      otherwise  The IO formerly tied to `io`.
 * @post        `io` ties `w` for writing.
 *
 * @internal
 *
 * @shyouhei doesn't  think there is any  needs of this function  for 3rd party
 * extension libraries.
 */
VALUE rb_io_set_write_io(VALUE io, VALUE w);

/**
 * Instructs the OS to put its internal file structure into "nonblocking mode".
 * This is  an in-Kernel concept.   Reading from/writing  to that file  using C
 * function calls would return  -1 with errno set.  However when  it comes to a
 * ruby program,  we hide that error  behind our `IO#read` method.   Ruby level
 * `IO#read` blocks  regardless of this flag.   If you want to  avoid blocking,
 * you should consider using methods like `IO#readpartial`.
 *
 * ```ruby
 * require 'io/nonblock'
 * STDIN.nonblock = true
 * STDIN.gets # blocks.
 * ```
 *
 * As of  writing there is  a room  of this API  in Fiber schedulers.   A Fiber
 * scheduler could be written in a  way its behaviour depends on this property.
 * You  need an  in-depth  understanding  of how  schedulers  work to  properly
 * leverage this, though.
 *
 * @note  Note   however  that   nonblocking-ness  propagates   across  process
 *        boundaries.  You must  really carefully watch your  step when turning
 *        for  instance `stderr`  into nonblock  mode  (it tends  to be  shared
 *        across many  processes).  Also  it is  a complete  disaster to  mix a
 *        nonblocking file and stdio, and `stderr` tends to be under control of
 *        stdio in other processes.
 *
 * @param[out]  fptr  An IO that is to ne nonblocking.
 * @post        Descriptor that `fptr` describes is under nonblocking mode.
 *
 * @internal
 *
 * There  is  `O_NONBLOCK` but  not  `FMODE_NONBLOCK`.   You cannot  atomically
 * create a nonblocking file descriptor using our API.
 */
void rb_io_set_nonblock(rb_io_t *fptr);

/**
 * Returns the path for the given IO.
 *
 */
VALUE rb_io_path(VALUE io);

/**
 * Returns an integer representing the numeric file descriptor for
 * <em>io</em>.
 *
 * @param[in]   io         An IO.
 * @retval      int        A file descriptor.
 */
int rb_io_descriptor(VALUE io);

/**
 * Get the mode of the IO.
 *
 */
int rb_io_mode(VALUE io);

/**
 * This function  breaks down the  option hash that `IO#initialize`  takes into
 * components.   This is  an implementation  detail of  rb_io_extract_modeenc()
 * today.  People prefer that API instead.
 *
 * @param[in]   opt            The hash to decompose.
 * @param[out]  enc_p          Return value buffer.
 * @param[out]  enc2_p         Return value buffer.
 * @param[out]  fmode_p        Return value buffer.
 * @exception   rb_eTypeError  `opt` is broken.
 * @exception   rb_eArgError   Specified encoding does not exist.
 * @retval      1              Components got extracted.
 * @retval      0              Otherwise.
 * @post        `enc_p` is the specified internal encoding.
 * @post        `enc2_p` is the specified external encoding.
 * @post        `fmode_p` is the specified set of `FMODE_` modes.
 */
int rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p);

/**
 * This    function    can   be    seen    as    an   extended    version    of
 * rb_io_extract_encoding_option() that  not only concerns the  option hash but
 * also mode string and so on.  This should be mixed with rb_scan_args() like:
 *
 * ```CXX
 * // This method mimics File.new
 * static VALUE
 * your_method(int argc, const VALUE *argv, VALUE self)
 * {
 *     VALUE       f; // file name
 *     VALUE       m; // open mode
 *     VALUE       p; // permission (O_CREAT)
 *     VALUE       k; // keywords
 *     rb_io_enc_t c; // converter
 *     int         oflags;
 *     int         fmode;
 *
 *     int n = rb_scan_args(argc, argv, "12:", &f, &m, &p, &k);
 *     rb_io_extract_modeenc(&m, &p, k, &oflags, &fmode, &c);
 *
 *     // Every local variables declared so far has been properly filled here.
 *    ...
 * }
 * ```
 *
 * @param[in,out]  vmode_p        Pointer to a mode object.
 * @param[in,out]  vperm_p        Pointer to a permission object.
 * @param[in]      opthash        Keyword arguments
 * @param[out]     oflags_p       `O_` flags return buffer.
 * @param[out]     fmode_p        `FMODE_` flags return buffer.
 * @param[out]     convconfig_p   Encoding config return buffer.
 * @exception      rb_eTypeError  Unexpected object (e.g. Time) passed.
 * @exception      rb_eArgError   Contradiction inside of params.
 * @post           `*vmode_p` is a mode object (filled if any).
 * @post           `*vperm_p` is a permission object (filled if any).
 * @post           `*oflags_p` is filled with `O_` flags.
 * @post           `*fmode_p` is filled with `FMODE_` flags.
 * @post           `*convconfig_p` is filled with conversion instructions.
 *
 * @internal
 *
 * ```rbs
 * class File
 *   def initialize: (
 *     (String | int)      path,
 *     ?(String | int)      fmode,
 *     ?(String | int)      perm,
 *     ?mode:              (String | int),
 *     ?flags:             int,
 *     ?external_encoding: (Encoding | String),
 *     ?internal_encoding: (Encoding | String),
 *     ?encoding:          String,
 *     ?textmode:          bool,
 *     ?binmode:           bool,
 *     ?autoclose:         bool,
 *     ?invalid:           :replace,
 *     ?undef:             :replace,
 *     ?replace:           String,
 *     ?fallback:          (Hash | Proc | Method),
 *     ?xml:               (:text | :attr),
 *     ?crlf_newline:      bool,
 *     ?cr_newline:        bool,
 *     ?universal_newline: bool
 *   ) -> void
 * ```
 */
void rb_io_extract_modeenc(VALUE *vmode_p, VALUE *vperm_p, VALUE opthash, int *oflags_p, int *fmode_p, rb_io_enc_t *convconfig_p);

/* :TODO: can this function be __attribute__((warn_unused_result)) or not? */
/**
 * Buffered write to the passed IO.
 *
 * @param[out]  io                   Destination IO.
 * @param[in]   buf                  Contents to go to `io`.
 * @param[in]   size                 Number of bytes of `buf`.
 * @exception   rb_eFrozenError      `io` is frozen.
 * @exception   rb_eIOError          `io` is not open for writing.
 * @exception   rb_eSystemCallError  `writev(2)` failed for some reason.
 * @retval      -1                   Write failed.
 * @retval      otherwise            Number of bytes actually written.
 * @post        `buf` is written to `io`.
 * @note        Partial write  is a thing.   It is a  failure not to  check the
 *              return value.
 */
ssize_t rb_io_bufwrite(VALUE io, const void *buf, size_t size);

//RBIMPL_ATTR_DEPRECATED(("use rb_io_maybe_wait_readable"))
/**
 * Blocks until the passed file descriptor gets readable.
 *
 * @deprecated  We now prefer rb_io_maybe_wait_readable() over this one.
 * @param[in]   fd           The file descriptor to wait.
 * @exception   rb_eIOError  Bad file descriptor.
 * @return      0 or 1 (meaning unclear).
 * @post        `fd` is ready for reading.
 */
int rb_io_wait_readable(int fd);

//RBIMPL_ATTR_DEPRECATED(("use rb_io_maybe_wait_writable"))
/**
 * Blocks until the passed file descriptor gets writable.
 *
 * @deprecated  We now prefer rb_io_maybe_wait_writable() over this one.
 * @param[in]   fd           The file descriptor to wait.
 * @exception   rb_eIOError  Bad file descriptor.
 * @return      0 or 1 (meaning unclear).
 */
int rb_io_wait_writable(int fd);

//RBIMPL_ATTR_DEPRECATED(("use rb_io_wait"))
/**
 * Blocks until the passed file descriptor is ready for the passed events.
 *
 * @deprecated     We now prefer rb_io_maybe_wait() over this one.
 * @param[in]      fd           The file descriptor to wait.
 * @param[in]      events       A set of enum ::rb_io_event_t.
 * @param[in,out]  tv           Timeout.
 * @retval         0            Operation timed out.
 * @retval         -1           `select(2)` failed for some reason.
 * @retval         otherwise    A set of enum ::rb_io_event_t.
 * @note           Depending on your  operating system `tv` might  or might not
 *                 be  updated (POSIX  permits both).   Portable programs  must
 *                 have no assumptions.
 */
int rb_wait_for_single_fd(int fd, int events, struct timeval *tv);

/**
 * Get the timeout associated with the specified io object.
 *
 * @param[in]  io                   An IO object.
 * @retval     RUBY_Qnil            There is no associated timeout.
 * @retval     Otherwise            The timeout value.
 */
VALUE rb_io_timeout(VALUE io);

/**
 * Set the timeout associated with the specified io object. This timeout is
 * used as a best effort timeout to prevent operations from blocking forever.
 *
 * @param[in]  io                   An IO object.
 * @param[in]  timeout              A timeout value. Must respond to #to_f.
 * @
 */
VALUE rb_io_set_timeout(VALUE io, VALUE timeout);

/**
 * Blocks until  the passed IO  is ready for  the passed events.   The "events"
 * here is  a Ruby level  integer, which is  an OR-ed value  of `IO::READABLE`,
 * `IO::WRITable`, and `IO::PRIORITY`.
 *
 * If timeout is `Qnil`, it will use the default timeout as given by
 * `rb_io_timeout(io)`.
 *
 * @param[in]  io                   An IO object to wait.
 * @param[in]  events               See above.
 * @param[in]  timeout              Time, or numeric seconds since UNIX epoch.
 *                                  If Qnil, use the default timeout. If Qfalse
 *                                  or Qundef, wait forever.
 * @exception  rb_eIOError          `io` is not open.
 * @exception  rb_eRangeError       `timeout` is out of range.
 * @exception  rb_eSystemCallError  `select(2)` failed for some reason.
 * @retval     RUBY_Qfalse          Operation timed out.
 * @retval     Otherwise            Actual events reached.
 */
VALUE rb_io_wait(VALUE io, VALUE events, VALUE timeout);

/**
 * Identical to rb_io_wait()  except it additionally takes  previous errno.  If
 * the  passed errno  indicates  for instance  `EINTR`,  this function  returns
 * immediately.  This is expected to be called in a loop.
 *
 * ```CXX
 * while (true) {
 *
 *     ... // Your interesting operation here
 *         // `errno` could be updated
 *
 *     rb_io_maybe_wait(errno, io, ev, Qnil);
 * }
 * ```
 *
 * On timeout, ::RUBY_Qfalse is returned. Unless you are specifically handling
 * the timeouts, you should typically raise ::rb_eIOTimeoutError in this case.
 *
 * @param[in]  error                System errno.
 * @param[in]  io                   An IO object to wait.
 * @param[in]  events               An integer set of interests.
 * @param[in]  timeout              Time, or numeric seconds since UNIX epoch.
 * @exception  rb_eIOError          `io` is not open.
 * @exception  rb_eRangeError       `timeout` is out of range.
 * @exception  rb_eSystemCallError  `select(2)` failed for some reason.
 * @retval     RUBY_Qfalse          Operation timed out.
 * @retval     RUBY_Qnil            Operation failed for some other reason (errno).
 * @retval     Otherwise            Actual events reached.
 *
 */
VALUE rb_io_maybe_wait(int error, VALUE io, VALUE events, VALUE timeout);

/**
 * Blocks until the passed IO is ready for reading, if that makes sense for the
 * passed  errno.  This  is  a  special case  of  rb_io_maybe_wait() that is
 * only concerned with reading and handles the timeout.
 *
 * If you do not want the default timeout handling, consider using
 * ::rb_io_maybe_wait directly.
 *
 * @param[in]  error                System errno.
 * @param[in]  io                   An IO object to wait.
 * @param[in]  timeout              Time, or numeric seconds since UNIX epoch.
 * @exception  rb_eIOError          `io` is not open.
 * @exception  rb_eRangeError       `timeout` is out of range.
 * @exception  rb_eSystemCallError  `select(2)` failed for some reason.
 * @exception  rb_eIOTimeoutError   The wait operation timed out.
 * @retval     Otherwise            Always returns ::RUBY_IO_READABLE.
 */
int rb_io_maybe_wait_readable(int error, VALUE io, VALUE timeout);

/**
 * Blocks until the passed IO is ready for writing, if that makes sense for the
 * passed  errno.  This  is  a  special case  of  rb_io_maybe_wait() that is
 * only concerned with writing, and handles the timeout.
 *
 * If you do not want the default timeout handling, consider using
 * ::rb_io_maybe_wait directly.
 *
 * @param[in]  error                System errno.
 * @param[in]  io                   An IO object to wait.
 * @param[in]  timeout              Time, or numeric seconds since UNIX epoch.
 * @exception  rb_eIOError          `io` is not open.
 * @exception  rb_eRangeError       `timeout` is out of range.
 * @exception  rb_eSystemCallError  `select(2)` failed for some reason.
 * @exception  rb_eIOTimeoutError   The wait operation timed out.
 * @retval     Otherwise            Always returns ::RUBY_IO_WRITABLE.
 */
int rb_io_maybe_wait_writable(int error, VALUE io, VALUE timeout);

/** @cond INTERNAL_MACRO */
/* compatibility for ruby 1.8 and older */
#define rb_io_mode_flags(modestr) [<"rb_io_mode_flags() is obsolete; use rb_io_modestr_fmode()">]
#define rb_io_modenum_flags(oflags) [<"rb_io_modenum_flags() is obsolete; use rb_io_oflags_fmode()">]
/** @endcond */

/**
 * @deprecated  This function  once was a thing  in the old days,  but makes no
 *              sense   any   longer   today.   Exists   here   for   backwards
 *              compatibility only.  You can safely forget about it.
 *
 * @param[in]   obj              Object in question.
 * @exception   rb_eFrozenError  obj is frozen.
 * @return      The passed `obj`
 */
VALUE rb_io_taint_check(VALUE obj);

RBIMPL_ATTR_NORETURN()
/**
 * Utility function to raise ::rb_eEOFError.
 *
 * @exception  rb_eEOFError  End of file situation.
 * @note       It never returns.
 */
void rb_eof_error(void);

/**
 * Blocks until there is a pending read  in the passed IO.  If there already is
 * it just returns.
 *
 * @param[out]  fptr  An IO to wait for reading.
 * @post        The are bytes to be read.
 */
void rb_io_read_check(rb_io_t *fptr);

RBIMPL_ATTR_PURE()
/**
 * Queries if the  passed IO has any pending  reads.  Unlike rb_io_read_check()
 * this doesn't block; has no side effects.
 *
 * @param[in]  fptr  An IO which can have pending reads.
 * @retval     0     The IO is empty.
 * @retval     1     There is something buffered.
 */
int rb_io_read_pending(rb_io_t *fptr);

/**
 * Constructs an instance of ::rb_cStat from the passed information.
 *
 * @param[in]  st  A stat.
 * @return     Allocated new instance of ::rb_cStat.
 */
VALUE rb_stat_new(const struct stat *st);

/* gc.c */

RBIMPL_SYMBOL_EXPORT_END()

#endif /* RUBY_IO_H */
PK*J[n��^��include/ruby/io/buffer.hnu�[���#ifndef RUBY_IO_BUFFER_H
#define RUBY_IO_BUFFER_H
/**
 * @file
 * @author     Samuel Williams
 * @date       Fri  2 Jul 2021 16:29:01 NZST
 * @copyright  Copyright (C) 2021 Samuel Williams
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */

#pragma once

#include "ruby/ruby.h"
#include "ruby/internal/config.h"

RBIMPL_SYMBOL_EXPORT_BEGIN()

// WARNING: This entire interface is experimental and may change in the future!
#define RB_IO_BUFFER_EXPERIMENTAL 1

#define RUBY_IO_BUFFER_VERSION 2

// The `IO::Buffer` class.
RUBY_EXTERN VALUE rb_cIOBuffer;

// The operating system page size.
RUBY_EXTERN size_t RUBY_IO_BUFFER_PAGE_SIZE;

// The default buffer size, usually a (small) multiple of the page size.
// Can be overridden by the RUBY_IO_BUFFER_DEFAULT_SIZE environment variable.
RUBY_EXTERN size_t RUBY_IO_BUFFER_DEFAULT_SIZE;

// Represents the internal state of the buffer.
// More than one flag can be set at a time.
enum rb_io_buffer_flags {
    // The memory in the buffer is owned by someone else.
    // More specifically, it means that someone else owns the buffer and we shouldn't try to resize it.
    RB_IO_BUFFER_EXTERNAL = 1,
    // The memory in the buffer is allocated internally.
    RB_IO_BUFFER_INTERNAL = 2,
    // The memory in the buffer is mapped.
    // A non-private mapping is marked as external.
    RB_IO_BUFFER_MAPPED = 4,

    // A mapped buffer that is also shared.
    RB_IO_BUFFER_SHARED = 8,

    // The buffer is locked and cannot be resized.
    // More specifically, it means we can't change the base address or size.
    // A buffer is typically locked before a system call that uses the data.
    RB_IO_BUFFER_LOCKED = 32,

    // The buffer mapping is private and will not impact other processes or the underlying file.
    RB_IO_BUFFER_PRIVATE = 64,

    // The buffer is read-only and cannot be modified.
    RB_IO_BUFFER_READONLY = 128,

    // The buffer is backed by a file.
    RB_IO_BUFFER_FILE = 256,
};

// Represents the endian of the data types.
enum rb_io_buffer_endian {
    // The least significant units are put first.
    RB_IO_BUFFER_LITTLE_ENDIAN = 4,
    RB_IO_BUFFER_BIG_ENDIAN = 8,

#if defined(WORDS_BIGENDIAN)
    RB_IO_BUFFER_HOST_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN,
#else
    RB_IO_BUFFER_HOST_ENDIAN = RB_IO_BUFFER_LITTLE_ENDIAN,
#endif

    RB_IO_BUFFER_NETWORK_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN
};

VALUE rb_io_buffer_new(void *base, size_t size, enum rb_io_buffer_flags flags);
VALUE rb_io_buffer_map(VALUE io, size_t size, rb_off_t offset, enum rb_io_buffer_flags flags);

VALUE rb_io_buffer_lock(VALUE self);
VALUE rb_io_buffer_unlock(VALUE self);
int rb_io_buffer_try_unlock(VALUE self);

VALUE rb_io_buffer_free(VALUE self);
VALUE rb_io_buffer_free_locked(VALUE self);

// Access the internal buffer and flags. Validates the pointers.
// The points may not remain valid if the source buffer is manipulated.
// Consider using rb_io_buffer_lock if needed.
enum rb_io_buffer_flags rb_io_buffer_get_bytes(VALUE self, void **base, size_t *size);
void rb_io_buffer_get_bytes_for_reading(VALUE self, const void **base, size_t *size);
void rb_io_buffer_get_bytes_for_writing(VALUE self, void **base, size_t *size);

VALUE rb_io_buffer_transfer(VALUE self);
void rb_io_buffer_resize(VALUE self, size_t size);
void rb_io_buffer_clear(VALUE self, uint8_t value, size_t offset, size_t length);

// The length is the minimum required length.
VALUE rb_io_buffer_read(VALUE self, VALUE io, size_t length, size_t offset);
VALUE rb_io_buffer_pread(VALUE self, VALUE io, rb_off_t from, size_t length, size_t offset);
VALUE rb_io_buffer_write(VALUE self, VALUE io, size_t length, size_t offset);
VALUE rb_io_buffer_pwrite(VALUE self, VALUE io, rb_off_t from, size_t length, size_t offset);

RBIMPL_SYMBOL_EXPORT_END()

#endif  /* RUBY_IO_BUFFER_H */
PK*J[͔���include/ruby/thread_native.hnu�[���#ifndef RUBY_THREAD_NATIVE_H                         /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_THREAD_NATIVE_H 1
/**
 * @file
 * @author     $Author: ko1 $
 * @date       Wed May 14 19:37:31 2014
 * @copyright  Copyright (C) 2014 Yukihiro Matsumoto
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 *
 * This file contains wrapper APIs for native thread primitives
 * which Ruby interpreter uses.
 *
 * Now, we only support pthread and Windows threads.
 *
 * If you want to use Ruby's Mutex and so on to synchronize Ruby Threads,
 * please use Mutex directly.
 */

#if defined(_WIN32)
#include <windows.h>
typedef HANDLE rb_nativethread_id_t;

typedef union rb_thread_lock_union {
    HANDLE mutex;
    CRITICAL_SECTION crit;
} rb_nativethread_lock_t;

struct rb_thread_cond_struct {
    struct cond_event_entry *next;
    struct cond_event_entry *prev;
};

typedef struct rb_thread_cond_struct rb_nativethread_cond_t;

#elif defined(HAVE_PTHREAD_H)

#include <pthread.h>
typedef pthread_t rb_nativethread_id_t;
typedef pthread_mutex_t rb_nativethread_lock_t;
typedef pthread_cond_t rb_nativethread_cond_t;

#elif defined(__wasi__) // no-thread platforms

typedef struct rb_nativethread_id_t *rb_nativethread_id_t;
typedef struct rb_nativethread_lock_t *rb_nativethread_lock_t;
typedef struct rb_nativethread_cond_t *rb_nativethread_cond_t;

#elif defined(__DOXYGEN__)

/** Opaque type that holds an ID of a native thread. */
struct rb_nativethread_id_t;

/** Opaque type that holds a lock. */
struct rb_nativethread_lock_t;

/** Opaque type that holds a condition variable. */
struct rb_nativethread_cond_t;

#else
#error "unsupported thread type"

#endif

RBIMPL_SYMBOL_EXPORT_BEGIN()

/**
 * Queries the ID of the native thread that is calling this function.
 *
 * @return The caller thread's native ID.
 */
rb_nativethread_id_t rb_nativethread_self(void);

/**
 * Fills the passed lock with an initial value.
 *
 * @param[out]  lock  A mutex to initialise.
 * @post        `lock` is updated to its initial state.
 *
 * @internal
 *
 * There is no data structure that  analogous to pthread_once_t in ruby.  It is
 * pretty  much tricky  (if  not  impossible) to  properly  initialise a  mutex
 * exactly once.
 */
void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);

/**
 * Destroys the passed mutex.
 *
 * @param[out]  lock  A mutex to kill.
 * @post        `lock` is no longer eligible for other functions.
 *
 * @internal
 *
 * It  is  an  undefined  behaviour  (see  `pthread_mutex_destroy(3posix)`)  to
 * destroy a locked  mutex.  So it has  to be unlocked.  But  an unlocked mutex
 * can of course  be locked by another thread.  That's  the ultimate reason why
 * we do mutex.   There is an inevitable race condition  here.  2017 edition of
 * IEEE 1003.1 issue 7 says in its  rationale that "care must be taken".  Care?
 * How?
 *
 * @shyouhei thinks that POSIX is broken by design.
 */
void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);

/**
 * Blocks until the current thread obtains a lock.
 *
 * @param[out]  lock  A mutex to lock.
 * @post        `lock` is owned by the current native thread.
 */
void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);

/**
 * Releases a lock.
 *
 * @param[out]  lock  A mutex to unlock.
 * @pre         `lock` is owned by the current native thread.
 * @post        `lock` is not owned by the current native thread.
 */
void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);

/** @alias{rb_nativethread_lock_lock} */
void rb_native_mutex_lock(rb_nativethread_lock_t *lock);

/**
 * Identical  to  rb_native_mutex_lock(),  except  it  doesn't  block  in  case
 * rb_native_mutex_lock() would.
 *
 * @param[out]  lock   A mutex to lock.
 * @retval      0      `lock` is successfully owned by the current thread.
 * @retval      EBUSY  `lock` is owned by someone else.
 */
int  rb_native_mutex_trylock(rb_nativethread_lock_t *lock);

/** @alias{rb_nativethread_lock_unlock} */
void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);

/** @alias{rb_nativethread_lock_initialize} */
void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);

/** @alias{rb_nativethread_lock_destroy} */
void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);

/**
 * Signals a condition variable.
 *
 * @param[out]  cond  A condition variable to ping.
 * @post        More than one threads waiting for `cond` gets signalled.
 * @note        This  function   can  spuriously  wake  multiple   threads  up.
 *              `pthread_cond_signal(3posix)` says  it can even  be "impossible
 *              to avoid  the unblocking of more  than one thread blocked  on a
 *              condition variable".  Just brace spurious wakeups.
 */
void rb_native_cond_signal(rb_nativethread_cond_t *cond);

/**
 * Signals a condition variable.
 *
 * @param[out]  cond  A condition variable to ping.
 * @post        All threads waiting for `cond` gets signalled.
 */
void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);

/**
 * Waits for the passed condition variable to be signalled.
 *
 * @param[out]  cond   A condition variable to wait.
 * @param[out]  mutex  A mutex.
 * @pre         `mutex` is owned by the current thread.
 * @post        `mutex` is owned by the current thread.
 * @note        This can wake up spuriously.
 */
void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);

/**
 * Identical to rb_native_cond_wait(), except  it additionally takes timeout in
 * msec resolution.  Timeouts can be detected by catching exceptions.
 *
 * @param[out]  cond                 A condition variable to wait.
 * @param[out]  mutex                A mutex.
 * @param[in]   msec                 Timeout.
 * @exception   rb_eSystemCallError  `Errno::ETIMEDOUT` for timeout.
 * @pre         `mutex` is owned by the current thread.
 * @post        `mutex` is owned by the current thread.
 * @note        This can wake up spuriously.
 */
void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);

/**
 * Fills the passed condition variable with an initial value.
 *
 * @param[out]  cond  A condition variable to initialise.
 * @post        `cond` is updated to its initial state.
 */
void rb_native_cond_initialize(rb_nativethread_cond_t *cond);

/**
 * Destroys the passed condition variable.
 *
 * @param[out]  cond  A condition variable to kill.
 * @post        `cond` is no longer eligible for other functions.
 */
void rb_native_cond_destroy(rb_nativethread_cond_t *cond);

RBIMPL_SYMBOL_EXPORT_END()
#endif
PK*J[���(�(include/ruby/assert.hnu�[���#ifndef RUBY_ASSERT_H                                /*-*-C++-*-vi:se ft=cpp:*/
#define RUBY_ASSERT_H
/**
 * @file
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 * @date       Wed May 18 00:21:44 JST 1994
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 * @warning    Symbols   prefixed  with   either  `RBIMPL`   or  `rbimpl`   are
 *             implementation details.   Don't take  them as canon.  They could
 *             rapidly appear then vanish.  The name (path) of this header file
 *             is also an  implementation detail.  Do not expect  it to persist
 *             at the place it is now.  Developers are free to move it anywhere
 *             anytime at will.
 * @note       To  ruby-core:  remember  that   this  header  can  be  possibly
 *             recursively included  from extension  libraries written  in C++.
 *             Do not  expect for  instance `__VA_ARGS__` is  always available.
 *             We assume C99  for ruby itself but we don't  assume languages of
 *             extension libraries.  They could be written in C++98.
 */
#include "ruby/internal/assume.h"
#include "ruby/internal/attr/cold.h"
#include "ruby/internal/attr/format.h"
#include "ruby/internal/attr/noreturn.h"
#include "ruby/internal/cast.h"
#include "ruby/internal/dllexport.h"
#include "ruby/backward/2/assume.h"

/* RUBY_NDEBUG  is very  simple:  after everything  described  below are  done,
 * define it with either NDEBUG is undefined (=0) or defined (=1).  It is truly
 * subordinate.
 *
 * RUBY_DEBUG versus NDEBUG is complicated.  Assertions shall be:
 *
 *                      | -UNDEBUG | -DNDEBUG
 *       ---------------+----------+---------
 *       -URUBY_DEBUG   | (*1)     | disabled
 *       -DRUBY_DEBUG=0 | disabled | disabled
 *       -DRUBY_DEBUG=1 | enabled  | (*2)
 *       -DRUBY_DEBUG   | enabled  | (*2)
 *
 * where:
 *
 *   - (*1): Assertions shall  be silently disabled, no warnings,  in favour of
 *     commit 21991e6ca59274e41a472b5256bd3245f6596c90.
 *
 *   - (*2): Compile-time warnings shall be issued.
 */

/** @cond INTERNAL_MACRO */

/*
 * Pro tip: `!!RUBY_DEBUG-1` expands to...
 *
 * - `!!(-1)`  (== `!0`  ==  `1`) when RUBY_DEBUG is defined to be empty,
 * - `(!!0)-1` (== `0-1` == `-1`) when RUBY_DEBUG is defined as 0, and
 * - `(!!n)-1` (== `1-1` ==  `0`) when RUBY_DEBUG is defined as something else.
 */
#if ! defined(RUBY_DEBUG)
# define RBIMPL_RUBY_DEBUG 0
#elif !!RUBY_DEBUG-1 < 0
# define RBIMPL_RUBY_DEBUG 0
#else
# define RBIMPL_RUBY_DEBUG 1
#endif

/*
 * ISO/IEC 9899 (all past versions) says that  "If NDEBUG is defined as a macro
 * name at  the point  in the  source file where  <assert.h> is  included, ..."
 * which means we must not take its defined value into account.
 */
#if defined(NDEBUG)
# define RBIMPL_NDEBUG 1
#else
# define RBIMPL_NDEBUG 0
#endif

/** @endcond */

/* Here we go... */
#undef RUBY_DEBUG
#undef RUBY_NDEBUG
#undef NDEBUG
#if defined(__DOXYGEN__)
# /** Define this macro when you want assertions. */
# define RUBY_DEBUG 0
# /** Define this macro when you don't want assertions. */
# define NDEBUG
# /** This macro is basically the same as #NDEBUG */
# define RUBY_NDEBUG 1

#elif (RBIMPL_NDEBUG == 1) && (RBIMPL_RUBY_DEBUG == 0)
# /* Assertions disabled as per request, no conflicts. */
# define RUBY_DEBUG 0
# define RUBY_NDEBUG 1
# define NDEBUG

#elif (RBIMPL_NDEBUG == 0) && (RBIMPL_RUBY_DEBUG == 1)
# /* Assertions enabled as per request, no conflicts. */
# define RUBY_DEBUG 1
# define RUBY_NDEBUG 0
# /* keep NDEBUG undefined */

#elif (RBIMPL_NDEBUG == 0) && (RBIMPL_RUBY_DEBUG == 0)
# /* The (*1) situation in above diagram. */
# define RUBY_DEBUG 0
# define RUBY_NDEBUG 1
# define NDEBUG

#elif (RBIMPL_NDEBUG == 1) && (RBIMPL_RUBY_DEBUG == 1)
# /* The (*2) situation in above diagram. */
# define RUBY_DEBUG 1
# define RUBY_NDEBUG 0
# /* keep NDEBUG undefined */

# if defined(_MSC_VER)
#  pragma message("NDEBUG is ignored because RUBY_DEBUG>0.")
# elif defined(__GNUC__)
#  pragma GCC warning "NDEBUG is ignored because RUBY_DEBUG>0."
# else
#  error NDEBUG is ignored because RUBY_DEBUG>0.
# endif
#endif
#undef RBIMPL_NDEBUG
#undef RBIMPL_RUBY_DEBUG

/** @cond INTERNAL_MACRO */
#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)

RBIMPL_SYMBOL_EXPORT_BEGIN()
RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_COLD()
void rb_assert_failure(const char *file, int line, const char *name, const char *expr);

RBIMPL_ATTR_NORETURN()
RBIMPL_ATTR_COLD()
RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 5, 6)
void rb_assert_failure_detail(const char *file, int line, const char *name, const char *expr, const char *fmt, ...);
RBIMPL_SYMBOL_EXPORT_END()

#ifdef RUBY_FUNCTION_NAME_STRING
# define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
#else
# define RBIMPL_ASSERT_FUNC RBIMPL_CAST((const char *)0)
#endif

/** @endcond */

/**
 * Prints the given message, and terminates the entire process abnormally.
 *
 * @param  mesg  The message to display.
 */
#if defined(HAVE___VA_OPT__)
# if RBIMPL_HAS_WARNING("-Wgnu-zero-variadic-macro-arguments")
/* __VA_OPT__ is to be used for the zero variadic macro arguments
 * cases. */
RBIMPL_WARNING_IGNORED(-Wgnu-zero-variadic-macro-arguments)
# endif
# define RBIMPL_VA_OPT_ARGS(...) __VA_OPT__(,) __VA_ARGS__

# define RUBY_ASSERT_FAIL(mesg, ...) \
    rb_assert_failure##__VA_OPT__(_detail)( \
        __FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg RBIMPL_VA_OPT_ARGS(__VA_ARGS__))
#elif !defined(__cplusplus)
# define RBIMPL_VA_OPT_ARGS(...)

# define RUBY_ASSERT_FAIL(mesg, ...) \
    rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
#else
# undef RBIMPL_VA_OPT_ARGS

# define RUBY_ASSERT_FAIL(mesg) \
    rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
#endif

/**
 * Asserts that the expression is truthy.  If not aborts with the message.
 *
 * @param  expr  What supposedly evaluates to true.
 * @param  mesg  The message to display on failure.
 */
#if defined(RBIMPL_VA_OPT_ARGS)
# define RUBY_ASSERT_MESG(expr, ...) \
    (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(__VA_ARGS__))
#else
# define RUBY_ASSERT_MESG(expr, mesg) \
    (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
#endif

/**
 * A variant of #RUBY_ASSERT that does not interface with #RUBY_DEBUG.
 *
 * @copydetails #RUBY_ASSERT
 */
#if defined(RBIMPL_VA_OPT_ARGS)
# define RUBY_ASSERT_ALWAYS(expr, ...) \
    RUBY_ASSERT_MESG(expr, #expr RBIMPL_VA_OPT_ARGS(__VA_ARGS__))
#else
# define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
#endif

/**
 * Asserts that the given expression is truthy if and only if #RUBY_DEBUG is truthy.
 *
 * @param  expr  What supposedly evaluates to true.
 */
#if RUBY_DEBUG
# if defined(RBIMPL_VA_OPT_ARGS)
#   define RUBY_ASSERT(expr, ...) \
    RUBY_ASSERT_MESG((expr), #expr RBIMPL_VA_OPT_ARGS(__VA_ARGS__))
# else
#   define RUBY_ASSERT(expr) RUBY_ASSERT_MESG((expr), #expr)
# endif
#else
# if defined(RBIMPL_VA_OPT_ARGS)
#   define RUBY_ASSERT(/* expr, */...) RBIMPL_ASSERT_NOTHING
# else
#   define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
# endif
#endif

/**
 * A  variant  of   #RUBY_ASSERT  that  interfaces  with   #NDEBUG  instead  of
 * #RUBY_DEBUG.  This almost resembles `assert`  C standard macro, except minor
 * implementation details.
 *
 * @copydetails #RUBY_ASSERT
 */
/* Currently  `RUBY_DEBUG == ! defined(NDEBUG)` is  always true.   There is  no
 * difference any longer between this one and `RUBY_ASSERT`. */
#if defined(NDEBUG)
# if defined(RBIMPL_VA_OPT_ARGS)
#   define RUBY_ASSERT_NDEBUG(/* expr, */...) RBIMPL_ASSERT_NOTHING
# else
#   define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
# endif
#else
# if defined(RBIMPL_VA_OPT_ARGS)
#   define RUBY_ASSERT_NDEBUG(expr, ...) \
    RUBY_ASSERT_MESG((expr), #expr RBIMPL_VA_OPT_ARGS(__VA_ARGS__))
# else
#   define RUBY_ASSERT_NDEBUG(expr) RUBY_ASSERT_MESG((expr), #expr)
# endif
#endif

/**
 * @copydoc #RUBY_ASSERT_WHEN
 * @param  mesg  The message to display on failure.
 */
#if RUBY_DEBUG
# if defined(RBIMPL_VA_OPT_ARGS)
#   define RUBY_ASSERT_MESG_WHEN(cond, /* expr, */...)  \
    RUBY_ASSERT_MESG(__VA_ARGS__)
# else
#   define RUBY_ASSERT_MESG_WHEN(cond, expr, mesg) RUBY_ASSERT_MESG((expr), (mesg))
# endif
#else
# if defined(RBIMPL_VA_OPT_ARGS)
#   define RUBY_ASSERT_MESG_WHEN(cond, expr, ...) \
    ((cond) ? RUBY_ASSERT_MESG((expr), __VA_ARGS__) : RBIMPL_ASSERT_NOTHING)
# else
#   define RUBY_ASSERT_MESG_WHEN(cond, expr, mesg) \
    ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
# endif
#endif

/**
 * A variant  of #RUBY_ASSERT  that asserts when  either #RUBY_DEBUG  or `cond`
 * parameter is truthy.
 *
 * @param  cond  Extra condition that shall hold for assertion to take effect.
 * @param  expr  What supposedly evaluates to true.
 */
#if defined(RBIMPL_VA_OPT_ARGS)
# define RUBY_ASSERT_WHEN(cond, expr, ...) \
    RUBY_ASSERT_MESG_WHEN(cond, expr, #expr RBIMPL_VA_OPT_ARGS(__VA_ARGS__))
#else
# define RUBY_ASSERT_WHEN(cond, expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
#endif

/**
 * A variant of #RUBY_ASSERT that  asserts when either #RUBY_DEBUG or built-in
 * type of `obj` is `type`.
 *
 * @param  obj  Object to check its built-in typue.
 * @param  type  Built-in type constant, T_ARRAY, T_STRING, etc.
 */
#define RUBY_ASSERT_BUILTIN_TYPE(obj, type) \
    RUBY_ASSERT(RB_TYPE_P(obj, type), \
                "Actual type is %s", rb_builtin_type_name(BUILTIN_TYPE(obj)))

/**
 * This is either #RUBY_ASSERT or #RBIMPL_ASSUME, depending on #RUBY_DEBUG.
 *
 * @copydetails #RUBY_ASSERT
 */
#if RUBY_DEBUG
# define RBIMPL_ASSERT_OR_ASSUME RUBY_ASSERT_ALWAYS
#elif ! defined(RBIMPL_VA_OPT_ARGS)
# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSUME(expr)
#elif RBIMPL_COMPILER_BEFORE(Clang, 7, 0, 0)
# /* See commit 67d259c5dccd31fe49d417fec169977712ffdf10 */
# define RBIMPL_ASSERT_OR_ASSUME(...) RBIMPL_ASSERT_NOTHING
#elif defined(RUBY_ASSERT_NOASSUME)
# /* See commit d300a734414ef6de7e8eb563b7cc4389c455ed08 */
# define RBIMPL_ASSERT_OR_ASSUME(...) RBIMPL_ASSERT_NOTHING
#elif ! defined(RBIMPL_HAVE___ASSUME)
# define RBIMPL_ASSERT_OR_ASSUME(...) RBIMPL_ASSERT_NOTHING
#else
# define RBIMPL_ASSERT_OR_ASSUME(expr, ...) RBIMPL_ASSUME(expr)
#endif

#endif /* RUBY_ASSERT_H */
PK*J[���include/ruby/oniguruma.hnu�[���#ifndef ONIGURUMA_H
#define ONIGURUMA_H
#include "onigmo.h"
#define ONIGURUMA
#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR
#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR
#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY
#endif /* ONIGURUMA_H */
PK*J[����wwetc/locked_extensions.ininu�[���[ruby3.3]
rake = 13.2.1
rdoc = 6.10.0
json = 2.9.1
io-console = 0.8.0
bundler = 2.6.7
bigdecimal = 3.1.8
psych = 5.2.2
PK*J[���(��K��Klib64/libruby.so.3.4.4nuȯ��ELF>`�@@�K@8
@! �^I�^I �cI�ci�ci��P H3JH3jH3jppppp$$�^I�^I�^I  �cI�ci�ciS�td�^I�^I�^I  P�td��A��A��Ad+d+Q�tdR�td�cI�ci�ciGNU��:[ڛJ�������+s�6���$X�	�"@@"J $�D8E ��A�
L ���J'��<@ @�0�%@
��B �B}��� XDɲZ�!�Y�(�$`Jچ�h�`d'� ��W&�H0 AI��@N�$	A$xB<�B�	���
	�  'PX ��4 ��D $ �!*@؉��X"$�J(�!@�I�@�6 �\@  ��"`D@!0B0"��`a`��@T�R0� ��	T@ @@0��! @$���҂H�@��$��$��m	AI�" ����&(��"8
�U@@ E�XD�
���XD Dq!�B�4�F�	C �(�0@% 1	���)��H��T�2 8��B�L@���48�"��8GJ�L #�R 0,`��
1u
R��� @ 0d ��#��01@ /XB ���Ic3	"��<�@&�!0��$
[�0@���� �M��@� �`#MB�H4�b��@�E�NB@@�$\J"d*DN�"� �XpR��@�
$��$r"`�T�@"
D@�� N>P@�IhE0�0
  `	0
$$��0Ep@C�@ 
�@��@(ŠA$l� �@
@P@$đD��@�`�) �@���$0@
����� �C�A� ` C�@1ID&0 H @�"$"	J�( �$@B�$��0`=G (  � �BBb0M�B0Fh�"@($ֈR 0��U����
���`��0��" X ` 
D  �B�F0B H-,�H
�@F�$`�PX(@�0$��!HD�@����B��{D �(�H c0, -�	 @R@@*D1�U�`A"DX� B��&�ʁ@HA�D��
 R �@QB@P B#�,

0�Ԃ �d�X3D*�0� " @�
a���&*AH�à	H��
�@N� 0	 �N0��!@� *�Xq���0*`B!�X		@@�Q�� D�P@@H�<��a!P(��1(0
��B� �J�A�2�@D@�h�X �,��@@�@Q�9�B  !~�	���	� @!D ����@�h�$H�(�.�`Hch�)CjP1�$F�@�P���@
 ��
�E �G`@$�C� A@ *���
 ( �QD@a@@ B�*� �L"$BB2@�Ȅǒq�!�� HdB�2H
&ƁD8��<X
	E��
Q�`��68:;=>@BGKLNQTWZ\_bgiklnopsvw{|���������������������������������������������������������	!"$%'(*,/146789;=>@ACGIKLNQTUWX[\_`abeghklmorvw}~������������������������������������������������������ !#&(*+,./26;>CDFGHIJLNPSTWXY\_`befgjkmnoqtuvwz|}~����������������������������������������������������������������������

#%&'(+-./012456;<?@BCDFIKMNPTUWXY[\_egkortvy{}���������������������������������������������������������

 #')-/03469:=BCDHKNQSUYZ\^`bfhjmnqstuy{|~�����������������������������������������������������������	 #'(*+.123579:;<=?DHLOSVXZ\^_`dfijmnsuwz}������������������������������������������������������������	

"#%&+-/148:<>BDEHIKNTXZ[_`degmoqstuv|~����������������������������������������������������������"%'(.024569;=?@ACEGH�&@�i�FV�!I�OK��|���KSoI⎞JL5����T����9�򁾕��0K���~L�	�
��R>��
z� ����e��o���!
�n�W��z���J^���~�j;�Gxpn��6E+ՂZ�ַ��d�q\��|v�M�&�$�L�C�/4L�\���%@��gB�ު�����wR�=m��Z�d�I���405�(����XX-�e�1�)��0��~� o�b{H��F���;ԉ;`�^�S#$f�I@�|�Qw�$������1`R,p�	��}.��B-��^\�,�ɶ6�4{�Ư+͡"�o*�X�+5�j0���1
�(7��BMV�m6TKMEV�6k?�?}� �Xo%ݔ-��P[!W#���7�<�[��	^c�(�lr
��*�fY>}�d��%1���ъ?���pL<�ٕ�,p��0�Be�]I��O�W�{R�U�F�6R�2釾�m��l�t���C�#_��X�~��sQ{��t��O�
�'qc�G滬`��f�6�œ���JO�BH�Q�B��N�6s����\jg�PR��.=����g��!��>R����?LHl;�d�βO�9B�#a�.Q�1�}a`�Ս�Λ��m$O�:o�B�S�4f��˛�2�t�ξ�n2���ʱ=�6؆y)�Y|������������U%��'>0�1�7 9��Tp &n�zB�_�q2r�����U�+��ȟʢ�[n>u"��b��#��R�?��ݹ��Kv'�t%*d5����v��?���O���;�o�
�G`+o�ɨRMKZ�uV�%�ZL?rX �Ұ�B�S�Rm�lU�q�2ц��CE��������g�j�' ȈN����!�7�QŲJ�֘������LN��<�2�y��mO��8�g�~\^G��`x.��">+I���`Pˀ��J-G]�,�����FH�r%d?<��|���d�%�C:�&�_١���>�jtg��fph�,�ÙĨ��<܌�%�( 4{��h{�Qy�.��V�x�3p�^$�s%�qK{5�������o-�oKc{qn��)(����{�R~�A"{I�K����F�������YZI$�F���S����tC�Q��]Dc����4K��aS�{���y�+��10�:�
p�w�٧�1I����tX�6�ot��d��Kzl]��rjh���*����{����i!�#\���<8�N�mu�,�Di��ki���|�K��wlT�kP����
�{���]���`�w���u{LhX�n:95G�H�
"�E<�x/k��u�տ����h�q݅pHE��$��˜
D�Z�k�	�A�>�
���1��j>p�a1�P�����7�f����,��\�6h�MŽ�fV��Q�ļ����y�s/R�o;.0��7vg���!Di��Z�vݲ4����Z�����HE!�r�S��hY���/��lf>���E՚&b�+]�!��m�	-6����"
g��B�^K4��a�xBF�2U�;� T����69X�D�jWp�t����w����+��y_ZM�
I`}l�@B���N��}��'�xbŲk:��$H�sj��$U�k��@>?l�����A�@ǿ�>�w�z5nɯjho�W�D�֓�H�s�v���n����M���Ϟ��]>��Ð@VM��YĭA�ff����*�"=�W�}eͤ�j���m��|>�������Af�\}.��Mh��p�<�+-JN����)�z��F�3�����F���G���N�N#2���+R���u�M14��3"W�Z�Ud�1�=M��Q�y��<&�&�S5�ي���e)HY��ƣ��<�/F�����^�q���Н�u�#N�8N� ������=��G�40��͹a�H>�06
/������Ł��ZX��[%Q�Qʰw�m%���%RVEG
�|���5ߗ��H��V��a�7�]3��[���g|�6W)2�2Rh�-q���|v'���I8š���x�@�"�ރ�R�Ζ��R�6�`�g��#�ck�p�1�9��]����q|�7���6F���s�߁e'Y7K�[�
߫�<�A�(s���{�|���陆�O@DŲH���Z���'��n�[#�[:����7�D(�u�]w�i!��E�B4�Ρ������lX�h�YL!��#B��#��']���SR�x���Z��/��9�)H�j���W�,�A��,?�yC?􃔬F���ќ��9Z�s���}��~5��xo���h�P�Q!v�-U�Wٴ:y�hPV�R�JH�zR�?��~����\H{��p�A���
�\��:�I+6��m��3�A��Jw�o�JSz��Vã��bb�1��qX��c=ɰ-.�󜔞�|�;�3%�Ъ�
�J�nXȫ;���ݳqf�$I/�J���4푺:���Ey�`y�]
��}�ٚ�U�g���`Z�
I�S���՗O(y��(}�FpEo�!�5Q�+#�#���寐��,?m���Dȉ󾁧�p�}��`��3/[�q2��y)��l
�3����C*b��b��U�l���ғ�V��@}R���d���
�r�|U����=U��I��@�6�Jh�MۍK�#S’MJF���?%�C�����n;|�s1���c��\�{/��8c��!薝u�>Mخ�7�r~�67��G^�H*�?��n�����&��Rv�.n1p�:J��K۲�#o������4�uupm
n������eN��R�"����2���}���a���aC蘱 �|����4[���-E�T�|��…���0���5N��+`��+y���|���-�poUU�����	q��E�3�o�\��#4a�{�j+��"��n�J���f�A�z��e>e\�� s8WL��[e�����ۚ�=*HtE${"�I�?80`���)5�Q0���=0��V5�g���FZ������ȶ��
���n�ɇ��Y��R@�l^�{�DקOW���L�:2�{u
��?ī�T�cyC,�&�~��?�S��<fU$�h�#��f��~ذ��	�T
�9c0�
�ƌ�3�t�ǃLg�n�T
�ev��'�����'	�m|��
��7��/i��3���O܁s��t��Lj�6���x��
�4�B"7�$�a�1�Pĺ4�ņ���I܊]��k�J9�����T�ll��� D,�ư�`]3F{���1z���:��s��R�����0�vS��q��W�mJ����l?)鮢�F��CZXx��������ߒJ�X��
4��~p���BgnU&�r�X�E�ɱ[$R3����0�?��c�4�k���ֿ�-){+�d���m�m\���26^��|rޱ
T�V�yj���v��i�)-J�@��J�s���O��\�m�r �����8���\����F~�ة��_}��J#����N+n�p�p��,�)+�,�c-N���1)��/R�%�gw����h�����~�eu�kwy��L��hv܋���ܧ���=-�	�)� ������o�fT��g��iEp��K����d�¿�2�A��rF2�����4$y�T)G)�$�ǀ
���XD��0��k�?W�ܻ�Z�i>���W)x�a�X\�_�r-�вȪ��?�P���0%�۪�/ĖG�}��*	�te���%f���,1�������N��q2�Q�+��
i�g՞[`d�e�%ǜ�e�8P��%v�ٺ�IPn
K(�����3c�lY��+�(�H�ķ4
�[Ų詼�3�1RJ����B�FA��J�mĊqB}�Z���Zi�j���Oiȕe�F�*GW@	I��Q!�J�-p
�At�����g�!{�l��yߌ��
�ͷ7����-M�C�%kR7���I��OŲZ5Y.>��Yq27�IE`���,:��S��"O{R��Nj���;C;��(
��ִ���׀��k��a�c�
�G]�J�5��Y�o�¯U���""�R%��gt_�’�t���e���U��(�x2#�ް-���:W���ze��@�̪���	z���־(��m���`t��P�-Jw���6���d���j�	���br���n�
b�p3i�zI�ͧ��Dѕ���Ia��jmb�iY��ȞY�ƈ�#՗s���IG\!�8�]cU����˝x��T�����3N>���lW���dU�0/�Npn-�b��[�zN5���Q|�w[���<̧=�@e�<�J}a3Mـ5U\�q��vf��T>J����Bۻ~�^H�3����
�%��=��-m�D��=�'�ކ^�0�@$�_���:wV�g��s�UO*p
�|��mR��D�[^5-\1Or�o�ܑ��&Vo�+����f2G�c������x�<ٞ{<X����qi����*6�+��R�pE3EЗ�*���҂�J�>K#;0���4�W#��m��.;x���=���y�+��#K���aX���ȋ�I�[��/��
z�A��q�.z�c�A��3�P���,�9��4c^�~ �U
CX��i��tx���gâb
(�Re:�XŐ-@��'MC
�.f=o���W���/{�}�L����/�����c�ׁ�	`R;�j�]@��~8p�k���:���(�"������f�zI	����^	a�?��/��nV��@e�qME��t��%9���
m��P�hҁp,p5Uq��A3y�ꈹ6&E���'Ų>�}ٟ��[��bڑ<<��OگIt[�~���m��PГ��6���Z(51��աT
�8�:�C�f]�Y����,��o�g�٩�_��H�J�P2��
R�ϰ��,ގ+P�̴�j>Iw!o�K8���|x������ )XE۵D�������A�	�x�s�����u@��c��84|�q��G��C�W������jj�uv�{-G�?�	!r�.��l���/�p�'�+@��及0p�� ��-;ُQ��3�����o������Ƕ��9d�h.�y��؀���y=��>/%E�:J�(�j(�&�C{A+���Ʇ=l���߲�(���l�7)�����^�N3N6@��#ƿ�X��c�i���Im0d�y�ⳕ0��MI��1��n�H�R��R�����oI���1�j�o��R;�+�7�XI���&����ّ������sң�,�T�-��:���������)�0d2��qA3�IU���֗��+�?�=I�aH����`'QОw,e3�d�MD���\�Ɠ��KQ)3I�i�x�n�f�Rؘb�� �#Ӎ%�2?Y��B��Hl�x���C�r��&SI'.�lf��)5�e�O�E�-�����~vR.�Cy����t`���[6N��nJ�(���\��p�
�H��H��Š9Ԙ�a*�)uפ� ր�TO�R�IŲH�Ǐ�(�̠�tZ�y�Nx�=�SKC��\;�E�6���q7ߌ(��d��w�`�[�E���wL��AY��8i8`��B!#{3�<p=�]ga s�T*��|a�/�*q���/�<><�k/��\,SK�ֿ�k�S �,Jz��;���cD����7o���<�fI�ՂBy9dFz�g�'�c4@����pT�j]�M�˿�A��DcF��5�(�|ŝ��l�Q�0��[1�F��G�LN���|ɋ����
�����jh�juʓL.�������FRͦ.\ʓ,Bp�gE�B��
Gz���ܜE�l�0�
�3F���֏����P��p�!O����
�d�c��:�W=p��c�
��f,����M\�\ere|��v4R��&8Fd��rj��W��b��F8��Y�Q,��_?o4
g�͓�X�1�~�g�c��_����x�+]T_�b�º������6}bv����G<��WI|b�,�B�P���l�s}}�%�x6�P2�%a`��¶��*q�w�6���tL��82¾�����u��-�mp�蹚��HIL"}�bo�w�KӬ��Ut$��D{�X���[U����lS�+:��\$���RCAn�hp��&��-�:��*[�����
f^*Y:��j�_mA�8Ɉ��d���FW4��K IK��fg��*_���ќ��n�L��T&�'��2���F���'��LNf8U�Ym�*��ѐ��x��LSW��z`�_�5�P��BA�v���!6���6dl�TS�
dc<òD����A�A�|�@3�J�5=
�n�6�����ɨ]��T�o�{D����!}����2�*�,��?5�E��sv�=xI��Y:�x�n�'Ws�!j����!ՁI���q~�p�F��-V�'_s"*j܈;���>-�)�X���1Y|0ޡPs�B���C{H0F2��0�a��R|�"��`��?2�o�ć$����VJ2�o���$�=�o5�t��^��w��
w�L�3���
h�!��>l�zjp��1�g��23ޱ���Ͼ(�R@"-���H�+4�9�*�q�M4�{}������N��ݪ�8v�>J=�k�<i��~E[-w$��i
6ހP��ᦌ�`�R
]3�u���@���8|�1B-0d��
:!ȱ}��pl���8�A�uxG~C�̝5�ˡx�OVZeѱ��45�~8e�",4a-@�6�
�P�ldٻ�Tj�H�:b��Ƨd�0g���_y��>Cb�R�C��g/c�j�9�:DQ�n��[1ϻm�B�;���!�k��fi+8�`QZ����VV���(�8���d�=5���ؠ����>��\K�����\L���9�V�����r
w�5�cf,Oƙ'Y����J��/�׉/��(�cdj���t�ȅ�TJ����:<ٮ���6����M��S3R>@N����u�W���_X,W*_n��K� ��g�B+#:z��S���w�K�}�
�)K^��f�L�/�"�]��H�?$��2�q�=�>��9����M��o"�����Ui�=WI�⮪���8��<�y]2IX
vѵyAeq�������d2�4S��Sp5�!��E��d�&�J�E�� T�O3D,T'T+	�4TFd=I���?�J�"p�Chf�d2	P^fT[7��7$i7�F�4 b0q"ǁ4�Tf�"�Ȁ�2e�J��%��'hcTPO�s�.d'Fq��dj��&�4)d`& j���Sf5v�^h8T�d��e�#d�-`��4̏�����n��G �4�d_X�O�dnT�j�:, b�t%;(���4-T
iW$�F"|y�&+Cu[�5d2T�X�J�C�CـiK�c5C~O��'�d_d��u;���J�5��{4 ���G0�=f=�&T��hUd�dZ|C�-}F�#�5^j'��Se#f�4Md<d�x�4����4ԁTES�5Iq��'�L��C(�GF�nc�3fc!o(p�|=} �Ccg{b\�9�'7T3d��&����4�4g%���~k���f�!uc%}w��D�-��Jق��d���r4U�A�%�4�L�x�4YXD(Ԃp=��c�co�!�7NI���Q?�c�ST;W�X)�s��dx8 4�T�En{l�%���4tBod�4�E�6�3T<T�4x7k8��S�&_m�cid�@Tr%F�`2!'M�'��
/����(:g0����,cy��6!0��K�,���
 �زkU��(��`_*��t '6~8�kq���&� �V�p*�D`&lq���$R65p_#�a�CcK9�! H�DRW#�e
N�N�{,�N`|,���k�P�k�rp�W ^**+
0�kB�`(�1P�&��>`�qE/H�k0?@�M/@`^7zP
!Oi;�!/�Lh�kS�!.d@P�!cupY�nM@�&�E�
��+@M$�Ap�!Q!�'v� ���*P�.�y+����`�#�|��!cj�m�B "�'0�)aX�py�aF1�2�� }�3`�&@�h 0jG�+F� �=y�P0�"�2�{#3�+�~(a3��%
�!  ���1��!�Q"��o0�.&4Pa$�~
/�|0r"���%-G�5"'��k�jhqj� ;'�M0@�?��E�!Y�( +67A�`0pQ"J-�"�@mpx��I�`�Mбk9Q0�Q�(��>�*RGA �$�^�	�U ���o��9�u�	*� #'\�u`�||0j"CP@}%xX�R4�p�6Nk�!(C��zBW`a*��b��)z�}�s#1�<`�&	� �!?�@\('`3�� N�[�;6i�0jH�3�(�f�;G�HpP1����&(�@L$3
n� ��`�)2����$	�� �(���!~ZRPp&Y�K$#@k����1��Ps��u �W1p���`�+(�'��&�	�"p�6��c+Z�Hf�=����e-�
W/��k�O�L$#��G��a@�4`$%�,��#?�`��P��(0yK(��
�����62‡�b&�`�(�2w�� �s��3�k�Pts�p�$	B" �n��}|U ����3����=C�@a*���*fہp�$1~��W2K��2�����= o�S� ]*@{s yf\��9 �3 �,�; #	T�wu ��/`�`D;�PY�$'B�9�!|%سkt0�I\*@	��6%G��%%8�6 �5�Y��!D[��!1$(�kG8��L߅`K%Vb'o2j�E�{*;��@���L�/p}��A���I+��D@�&��@<P*	�_�!UOЃ_�"�yP��@�&�"�#>X��)�^pV�b@F2��H$���yj@�G��
�~�$��<��*Y�:�S4 �#����9'9�
K���`o� gA��n� 2�P�Q�5PqE�:���q��	p��6���$9_w�� =�V4BG@�"}���xp�v_��"*���;p���+�%@>�#s
��`�$�[����e`j�]�#p'@,9j�R�e13`��~�$���y‚��$E�?�	��)�
oQ ����pPr��kn2�'��jHqj�r"'7�kD� �&C�q"6�x0� !�;�#+�7 �,�A���Lк$=�|~"b�Ip��]@��F�&%L���k�v�! ���"'\�3�V�N(8�V@m7d/ �k�t��\�Zp�47���*��T��IyC�%>�R�!cf�C��Y�'3hk��2(�k�I��-���;�u0�EX !J�PlnKe@�&i��L�9�&!�(p�!kp� 8P�	!o���+ 2F�OD$T�0��$?�``-	EP�X`�6=t �1�nK��	�.��ho���% �Bq��P�6Ej���P�%b�c��$�� `*I5
�k�b���E�&�EF�#���]*A!0#
C`�T��k!�]J���x �k�/��k�i@�k��
��U��n�P���}t#)`B$7��%'N�dZ�C��!��Z�%'��ZR�uHq�T)�p�)B0�)_�,0*Q/ �(0P�F%hx�N6(�IR#z�pf1��%8�H?�XP�-v��(:�n 2z�!J�m`��	`�!(jA �!��?`�Q�X��P�d�$v�
�3"Rn�&`�"��`�&�n)��
��$�
�Z��Hh�	�;�$���k"&�r"4ZP<� ��0*'y
�0�&
�Pa2gKp;��(��U`q"�*@
*6J�=vAp�@\��+C�`O%�n 40B$)5nP ����!:�g�'2�3���
h�k͆0�%Lu�l�A��!���
�|��!c�L�+s�P��W`p<"{�'!#�)p�k��;oS��&\b��kmY�:'�X�O�TP��0�Y;���-аk�0�kZ`�>�c�!�!��$$�f�$��j� �M���*.�`</�`C&0҈��&�.P�k�	��$|��!1AP0�	�)��
g�]���$%�H`="Q/3�a9
	nb�''J4P�oy � b�H�P	
Zp@?�i��Ԅp$%T�@�{#�&��K�GT�a�BcWr 0�0��K�!1a
��a�DP%/�k�`�*B*f<���PJ%/a"�k
01*OT~�'*�R�r�48p�<�&,B}0`#B�a��@�*6�{0P$l$p � ��e��$�" 
!+�f�H$ن�%����	3`�$A
h�k�pzV�F��k�D�G&�@T0��l`co�I47PY'��,.�`(%�
��6Z�rm� 9�	�i"2)��~&��x � 	��JcV�k~B$ �#0y
:�*@
,�)6�6�X
P�@'�N"d�C�!1��#30�W�p�*;�:�!$�
�PH$.w�G%5���J%��I�9pP�hP�	u��F7`D%'�5`�x�pY���k�m��0F�HQ������6P
`%Q�
G|�J$�(�Ii����< ���"�ۇ�i&N�konpa�
Pr"�BO(5��`Y*��|��"B�H�Q84 �  ��:���p(h�S��kD� �$2Ef��k @_��_�!���*+ U>�
 '�tQ� &��!MP�k�>P�&��~�	$]9%��
��p�%T�*`��8�$�;@$�x`M6(�B�zcpPqj���%��r"5}e�!_�V�$<<pa#5Uи(�-`'�� �"
	-�y��M��kj���*&z<�1	ul0#)N0��I&�����&W�p��F5�D	�w�_5��%9���6'Q8�r`B!@/&a 0�]�1�`�}W0_**XU��v�VȳkA p�Nn�p'*�b��kip��,�)�Bv� �* %.��!]ydp<!;�r��L&X�k{ ��{6��`���yj:O�!��FP'%>}y F''�$�
��`4k�$`�&��!���eo�z@!JQ,)~p���
@���!)�A�2	����@�k5���E<�.+o�`p-	U>p�9�
��J���gp�-�T��a8�k���J%#�a@Cc0�%��QeP �%�O�Yt� ��1 o�)�<V���G�T&wh��H&LS�`�$	{S@
$n�I�����^**�~$��P3����6;,~ �#)��v�7S�o'�V0%Lm��(g��k� ?�i ���G��kN_p!�\����/�?P4�K����/��#��UP��r�N |4�K�!1�Bp\(#7
x�k�m� W`�;�	%����k� �) W�`U2(G�"$=�!�^�Yf@CMy"�Q2��!�I0�)#xb��k8Kо���$�1@(�kt`�8kz !R�] .`�6.��(Jy�� AIx N6(�5�n�~!@#�@qo�F .�0��-�P!
a��k9	p<�/
wi��v7��!N&pD�w� ���~(vp�Y>YL$#փ`�$Z�k��gi����P���x�*zt>`�$�N�{<�h��t
 l%�`�o� '@�G�&	���!2q]"a\ȴk�Ȱki�#&bj���S0�-L��_VH$po�2q	P
 H$)P}P`#[�V(v(��k\MP'3da�9��d�43/P~�:P}#��RP4'#z{^#bqk0S��_�!щi�6\4��P�4_ FI�H?��y�=�������$p�
2�k�O !�s7�&8N)��
�PO�j�"��902�j� @#@`
v0����!#f&�q�q�!M��0g
�@
X�pe} s#)�k�UE�I����H$KUB�z�:PU#m�u�n� 3����&����2`�p>0�&z#@l
:�@>,_ !L.��	�$��
2���$)W@�l Y-
Ja&<�Qļ3}$��
�
��f$�
��3`"WP`�
���'�8��/�!
7`��FS $�*pK$�'%8K@���v  F�-�k80��!D@b&iC`@#+Y��)0k)�7��	rJ�:zh��J3[��|�n 	d(�k�
��+Sy`;'3E�%l�2��j�P��.�z,�k�W&�i�$	Xx`N6(	>���}'p�ke	��Yp�k�pr"�{��!�@��Hp+Po� 9�Fp#0��0 ���g�����!+JJ �Q
M��k�0ML�\��!.`�k�X#��s��C^����FP^WP^*w��P:�]P	Z���&E�M`*<��c�R���P�z�!JI3�Q�=�sAq��7�N�e0UA��W/2 '��_�!pLP,Ku@CWLlp#�;)��
��m� >=@\)��7'�J��w� v1��(?�>����G�>j.^`	&��`*V�e�%ya`>k_)��
�
gp�$0��3�'9�1*���
��%�&Y?��P0��Vpa#5�x�kY`!=�A#'�	p�
/0*;�!��k�W	u�d`�k��!=�)�!	9g��@��&�4r
�YP7'jD��zY��(
�,@n�0k�k�`�)@R0t#1XT��c~@�#2����\*&'p�$(�(��#v1��"��?D�z�p�m�o �iP�L$#�S@�:P�/��$����
&�' i�I$)���	 {Y�HpT#R���*	i��*bQ�1�{�!	'x�M6(�<P�� `H2�lP`�$��
`^��&y��k�%�{)�
hG�*M�$�*�!����j-��k����&�����Q� �+:p=�W p<
-� �:-`�(O�t`�=t`���ky}�s#)�l�_��\���|�r"4�|�j"0wrPOL�� @�9
��5�N�{0�	 ���1��&Ba�-��a#4��`I&�=��	�	H�k�M0�&$+9:lP[�8��P"'Gg~8�k�0J$7�
p�%�`�)ww�� �x��&8F��k�lPb^
�����#`�t8@P�#�r~PN$|�YB�M��K���b P���y j2O6x�M6(O�#WP4	9D@�k��u�p7%J��3�H�7%3�FP>F��JDb�F�@H]F��
�&Q���{��q"G�5�k�p�0``��$�
DT��k�%��@(	܏�1,�*)��
%�V�l�t��(��
G�0)A}��">�Q0�!+7{�'!9�f 1'�-`!6|`�!�@�"$�p\*)U@��T�x O6(ZS�$��H`WWD�d&kF�B	1���!Fup�
M#�}��KF����q ��kUP��@�a���!���\,��T���T*�2>��� �k6R n&u`�!*�;�0�
3�@N%S=�&y7]�	P0**��R��&$pV@	��RrY�pR�p�+f_�!�Љ#<Z�'1n p�vp`#]�;'�/��k� �3�� ' 8e�<Wc��l�<��2Ip�B�0*2E?��\��p"3�@�u�\Y�O$`N0��!^-�/�k!�"
R�2@�n4#��"hl`^<�[��qu*`
��7@�]/0�)����(AN"Pn2��0��)�#�������P0�"z�`$+fu��6~2�**�d��i �$]N@]�6�4c��:;����%�.b�F? ,`r&dm�����pN&�}�&	�fЊ$�q@ q"3��I&Y�Z�Fk�u@�	�x�N6(f��&W@c��9h��4fJ%P�"��5�%����$���@�) �B��)`4&�H+jP����� �K��@ rm�x@� !�o �	� q����kg?`��;H�NjM�p*��i��aAl��?mR�qU�vp mt8�kV"3PfB=?�	U#�Cc �~HPF&a%I�$�oP 	nC`%%,�r )6-`!�n� 3�}0{#I�.��F�n` jA�0('& ~P�#+*�F`�H�~p$J/B !T�k��q�0 �~jH�O~�,`( �7�`-L!-,0�,����a Dc4��\*)`��D%}�!`!9,Mp �]��@J
�-}`#)�+��(_-p�!cK4��%q�P09�K���'p�
�}`�"�uP��@0�!P�0�%v[�U*--10����J(�fJ��0�0{#I�+�*$�J��R�x�\�L���:�@�*;� �~��%W6P�
~n� ($AP�x5k��J%O�
@�,E$ �
� p�'�Y�	Qf�B{1���)E�km��)�l@o��U��hh8`�k��R$	�P����"�
`(��@�*�\��+�Wp]*]@�)�֍�*E�2P��g�.'	�0�b�P�$XBL`�J�,��(�1@�Jjg��kyf�H0D o&�s
�
(d�"p^
%�p�9�t�)G���&�$#*�r`
0*	1"7
=���>'�0q�s�~�y�l2d@�!��z�)�BM��&�ONК":E !W�wЕ w�� �PcN��k�b�z�p~)�����`�-v�!
�s�U�7��Q�@�&�S3�Ip��x M6(�[�`�H���O(y�^ pa+��	`�	�s�����*n��\*L�}0{#Ib| N"$'N�I����$	�lPqc>�=�[`�#�8Pzz@r	B0#�j(��&3,V0qj����*.Z(`�
B.�l#�$&�+P�!bI���
�#.�"$JB@�&^L�Vd:��!	�Q3"4,ȯk�o��hh�dN� ��2���>0�W����X �k�%p�$g���BaP4N#@!�`�3�7!0n#�c�%-�|��"�fP�$+oG�0"@�K$#���hO0!�Ni��,�E0�^�#� )�j��-
�!�q9
gE��C&,�{ �!i.�<!$�Y�	�0`��y�!�Y8[�A�%g�K$#�q�
W^PG��c�<!��9�!$����f�(�-p�!��B�,dʋ@\*)2Y�*'��)�	�U2&�&p
S|��k�k.a00� [��b0o�-���$�w�L6(_, ��7��wd�fP�~�$6Es�$�O��`s�-�!��6�5�<<�N
H�k����|�0�*a�3 !�C&K�}�#	�J
w�B��z, `���ps B�D&����!A6p�̅�*)	��K%,E��	�����p�&��'�� [�#8���4���5p�"�� ��2=@W��y�!B��'%o���*�#�l
��Y��&yJR�nZ�;0#f`��dX��)	�+دk�/0���k U�50PN"r�l�nQ���	Pn ( 
 %��
Y%�B�X��#W:`8E`�8��A��&	$�(%[+F "�z�!��(`�!@��\Gp.�1��&�)
p�-�0EA8N�Ko� u��T2NAo��Hbe
%�?�		� �&@#gp�$1�(�/0�k�0�>Й"lzop��#�i�$��+�j�N(8�@��S��\�v � 4]]�;$D�?�2iv �-`3U���2I`g�nfpD>	��.+l@�a���U�ziH��)�e1��)�UH��$/@1P���=~���TD@�$A�8`$�@�1�Z`�6!X�Xr�7 ��(��k�'@�
z�`�\���&a[���44L0�#lh#pf
��*P
�;�&,�!p!#h�	��&�C&%!a�D��EP3������rB
��#��%F@��v� B���:�Z�&'��^�� el`�%(����*B#`
@ƃ�%(�`T@�KZl��"<`�}�K[`�!]��-'`y`� s 
�. �&�2m�M#������@�$$�-P�&b�q�
�R@�#	��4Z0I�H{p#*J�x�~0��2�5�oF�{��!gqx�e0�$wr��X����*nL��FP-%;~-Ы)4����$		) �
�މ0�6Qg��k�V�bb�n� 	E~p�#*�=Pr�\0`�!���*;�p�r��ж*rv��u0�$��G$)Pz�
!{�'��
��~�$0G$���\29ˌ_**h�4\вk=`E$��p7' �	�X��7 ���&8�0`$�	Ȳkc��O%Ċ��(uj��h���#�y
DFw�� 
60�">�>y�� 1�J��0�#�s��VZ'�̎�*.�v@L6(0	?: <� �6
\
(�k}0�"�'��
��@ph*�S�
'J�/н� 7X�k;�&NK@!>���X2>"Y�$'�+s �BR`n�s�CS��*',�S��kLP�62`8(O@�P��J	���p�*)�@�!kl����c`%$m,�p�A��}�#"�]N"S��A@@o_<P0r.`#:x��uF,��J��*����s�g��TV�Uk�p�d�b��k1�@U2�&�p#(u303%5p�#�t�`]*	���	�
Ш4	N�F`"P
!�]��o`�D�!��$$����*)@1G�>�!�t (6���%/	%��
)��
�-<`*	y���%e+�*�
�j ���:�&�K��4���C!�.@4Q{6�p��;9�	��pP(_
`!
P2� 'M
 ���W0o�\P�+�Ix�k93�7/��!�	p�"5Fp��w� �|�r"H F&%�L@{���$$�bpl(r/�k)'i"w%yPs#1]E�!W�L���GP>s� �$�L�(� �"@W�#G�(;|I����6p��&`&�w�L6(Q���	W`p$+�}��#gV	�k8U`����P�*�k6�i"T���+�" �$$2.�j�%��
	K�����6%0?* ,6�BPO(5UIp�7 �	m�s��/P�!�{�!M�
EW{�(�y� &S0"\(X0t�@�k�D�!Y� �$�Ԋ0})��#�l
:�[P!&r8@�(��!}.�v[4XPtZ�@w���&U.�t9`�!�Qp!�R �
�I���}+�1j�?2`!'��)�9]v� &�P�!&H�& �:�A�\p���{P#;C�#V�p)�lp`t�?p(y�XpoD�^�
�p�	jh�I�5��"
�p��oI�!3�%�.+N-0!�Vp�k�- 
|�3PA!@H@&*Mm�Mw@fVw`� �0.'���,����� �
��#�vZ�<'`�O�!��p&%L�m�& CRru:@��!���
B��!
�/X�k�0��:`'��R@�!yPP�2��0�*1�y�� �j0r	�Sp�]�yPF''0��&��g��5�q�R
��kk>	IC�3u_�xO��l,+�7`�� 3c���,�bC`����m�t+�0�(__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizedlsymdlerror__stack_chk_failmemcpyrb_loaderrordlopenruby_xmallocdladdrdlclosedln_symboldln_loadrb_locale_charmapnl_langinforb_usascii_str_new_cstrrb_enc_find_indexrb_default_external_encodingrb_enc_to_indexruby_xfreerb_gc_obj_slot_sizememmoveruby_malloc_size_overflow__tls_get_addrrb_wb_protected_newobj_ofruby_xmalloc2rb_eArgErrorrb_raiserb_frame_this_funcrb_id2symrb_enumeratorize_with_sizerb_block_given_prb_yieldrb_num2longrb_error_arityrb_int2bigrb_str_buf_appendrb_enc_copyrb_funcallvrb_cmpintrb_ary_includesrb_equalrb_hash_startrb_st_hash_uintrb_hashrb_st_hash_endrb_exec_recursive_pairedrb_eqlrb_warnrb_eIndexErrorrb_int_positive_powrb_float_new_in_heaprb_gc_writebarrierrb_respond_torb_sym2idrb_method_basic_definition_prb_eRuntimeErrorrb_ary_eachrb_exec_recursiverb_usascii_str_new_staticrb_obj_frozen_prb_eFrozenErrorrb_yield_values2rb_cArrayrb_keyword_given_prb_obj_call_init_kwrb_class_new_instance_pass_kwrb_str_buf_newrb_str_buf_catrb_inspectrb_str_catrb_num2dblrb_big_plusrb_big2dblrb_ary_freezerb_obj_freezeruby_xrealloc2rb_error_frozen_objectrb_ensurerb_str_modifyrb_ary_clearrb_hash_foreachrb_cStringrb_cFalseClassrb_str_cmprb_ary_ptr_use_startrb_ary_ptr_use_endrb_mem_clearrb_assert_failurerb_ary_replacerb_ary_modifyrb_ary_pushrb_range_beg_lenrb_random_ulong_limitedrb_intern2rb_block_callrb_ary_shared_with_prb_ary_new_caparb_ary_sort_bangqsort_rrb_obj_classrb_ary_plusrb_ary_newrb_free_tmp_bufferrb_alloc_tmp_buffer_with_countrb_ary_new_from_argsrb_ary_new_from_valuesrb_iter_breakrb_ary_hidden_newrb_ary_freerb_assoc_newrb_call_superrb_check_array_typerb_check_string_typerb_obj_as_stringrb_ary_assocrb_ary_rassocrb_ary_cmprb_hash_asetrb_eTypeErrorrb_ary_storerb_ary_deleterb_warningrb_ary_catrb_ary_poprb_hash_arefrb_hash_deleterb_hash_clearrb_ident_hash_newrb_obj_hiderb_fix2intrb_num2intrb_ary_shiftrb_ary_unshiftrb_ary_entryrb_cNumericrb_obj_is_kind_ofrb_ary_subseqrb_arithmetic_sequence_beg_len_steprb_ary_arefrb_ary_to_aryrb_bugrb_ary_resizerb_ary_duprb_ary_sortrb_data_typed_object_wraprb_st_init_numtable_with_sizerb_st_free_tablerb_st_lookuprb_st_insertrb_cRandomrb_ary_resurrectmemsetmemchrrb_gc_writebarrier_unprotectrb_eRangeErrorrb_ary_joinrb_usascii_encodingrb_enc_associaterb_string_valuerb_str_newrb_str_set_lenrb_output_fsrb_category_warnrb_ary_to_srb_ary_reverserb_ary_rotaterb_get_values_atrb_ary_delete_atrb_ary_concatrb_cObjectrb_define_classrb_mEnumerablerb_include_modulerb_define_alloc_funcrb_define_aliasrb_define_methodrb_define_singleton_methodrb_check_typeddatarb_class_pathrb_str_new_staticrb_str_appendrb_str_catfrb_ast_memsizerb_gc_markruby_node_namerb_data_typed_object_zallocrb_internrb_parser_newrb_parser_set_contextrb_ast_disposerb_exc_raiserb_parser_compile_string_pathrb_id2strrb_utf8_encodingrb_file_open_strrb_enc_from_encodingrb_io_closerb_node_regx_string_valrb_node_line_lineno_valrb_node_imaginary_literal_valrb_node_rational_literal_valrb_node_str_string_valrb_node_sym_string_valrb_node_file_path_valrb_node_integer_literal_valrb_node_dstr_string_valrb_node_float_literal_valruby_snprintfrb_node_encoding_valrb_cFloatrb_cIntegerrb_cNilClassrb_cTrueClassrb_cSymbolrb_iseq_pathrb_obj_is_procrb_iseq_from_eval_prb_method_iseqrb_cRubyVMrb_define_module_underrb_define_class_underrb_undef_alloc_funcrb_obj_freeze_inlineruby_digit36_to_number_tablerb_eFloatDomainError__gmpz_init__gmpz_import__gmpz_mul__gmpz_export__gmpz_clear__gmpz_fdiv_q__gmpz_fdiv_qr__gmpz_fdiv_r__gmpz_sizeinbaserb_usascii_str_new__gmpz_get_strrb_nogvlrb_thread_check_intsrb_Float__gmpz_set_strrb_big_mul_normalrb_big_sq_fastrb_big_mul_balancerb_big_mul_karatsubarb_big_mul_toom3rb_big_mul_gmprb_bigzero_prb_cmperrrb_big_resizeldexprb_big_divrem_normalrb_num_zerodivrb_big_divrem_gmprb_str_resizerb_big_newrb_big_clonerb_big_2comprb_big_normrb_uint2bigrb_uint2inumrb_int2inumrb_absint_sizerb_to_intrb_absint_numwords__memcpy_chkrb_absint_singlebit_prb_integer_packrb_big_packrb_integer_unpackrb_big_unpackrb_int_parse_cstrruby_scan_digitsrb_cstr_to_inumrb_invalid_strrb_must_asciicompatrb_str_to_inumrb_str2big_poweroftworb_string_value_cstrrb_str2big_normalrb_string_value_ptrrb_str2big_karatsubarb_str2big_gmprb_ull2inumrb_ll2inumrb_cstr2inumrb_str2inumrb_big2str_poweroftworb_big2str_genericrb_big2str_gmprb_big2strrb_fix2strrb_big2ulongrb_big2longrb_big2ullrb_big2llrb_dbl2bigrb_num_coerce_binrb_big_cmprb_num_coerce_cmpmodfrb_num_coerce_reloprb_big_eqmemcmprb_big_eqlrb_big_minusrb_big_mulrb_big_divrb_big_idivrb_big_modulorb_big_divmodfrexprb_big_powrb_rational_rawrb_big_andrb_num_coerce_bitrb_big_orrb_big_xorrb_big_lshiftrb_big_rshiftrb_memhashrb_big_sign__gmpz_powm__gmp_versionrb_sprintfrb_define_construby_xcallocrb_clear_constant_cache_for_idrb_objspace_garbage_object_prb_st_init_numtablerb_st_foreachrb_st_add_directrb_hash_newrb_fatalrb_hash_duprb_block_procrb_unexpected_typerb_id_table_sizerb_iv_tbl_copyrb_cBasicObjectrb_cClassrb_const_setrb_check_inheritablerb_class_newrb_singleton_class_attachedrb_singleton_class_clonerb_mod_init_copyrb_obj_init_copyrb_set_class_path_stringrb_cModulerb_cRefinementrb_class_realrb_define_class_idrb_const_definedrb_const_getrb_const_defined_atrb_const_get_atrb_define_class_id_underrb_module_newrb_refinement_newrb_define_module_idrb_define_modulerb_define_module_id_underrb_prepend_modulerb_mod_included_modulesrb_mod_include_prb_mod_ancestorsrb_class_subclassesrb_gc_countrb_class_attached_objectrb_class_instance_methodsrb_class_protected_instance_methodsrb_class_private_instance_methodsrb_class_public_instance_methodsrb_define_method_idrb_define_protected_methodrb_define_private_methodrb_undef_methodrb_freeze_singleton_classrb_singleton_classrb_obj_singleton_methodsrb_define_module_functionrb_define_global_functionrb_mKernelrb_aliasrb_define_attrrb_attrrb_exc_new_strrb_extract_keywordsrb_cHashrb_get_kwargsrb_scan_argsrb_scan_args_kwrb_range_valuesrb_exec_recursive_paired_outerrb_mComparablerb_memerrorrb_size_mul_or_raiserb_vm_insn_len_inforb_vm_insn_op_offsetrb_vm_insn_op_baserb_str_new_cstrrb_set_errinfostrcmprb_sym2strrb_iseq_realpathrb_iseq_new_with_optrb_iseq_new_with_callbackrb_mark_setruby_api_versionrb_st_memsizerb_eNotImpErrorrb_jump_tagrb_to_encodingrb_intern_strrb_node_initrb_iseq_base_labelrb_alloc_tmp_bufferrb_str_hash_cmprb_cRangerb_class_namerb_reg_optionsrb_enc_get_indexrb_enc_from_indexrb_id2namerb_eStandardErrorrb_eNoMatchingPatternErrorrb_eNoMatchingPatternKeyErrorrb_obj_info_dumprb_prb_enc_findrb_intern3rb_rational_newrb_complex_newrb_range_newrb_enc_str_newrb_num2ulongrb_out_of_intrb_ascii8bit_encodingrb_enc_interned_strrb_num2uintrb_errinforb_attr_getrb_iseq_first_linenorb_str_hashrb_str_concatrb_complex_rawrb_ruby_debug_ptrrb_hash_bulk_insertrb_enc_str_coderangerb_hash_new_caparb_ractor_make_shareablerb_obj_revealrb_hash_freeze__printf_chkfflushrb_vm_insn_name_offsetrb_vm_insn_name_baserb_str_cat_cstrrb_eSyntaxErrorrb_fix2uintrb_iseq_insns_info_encode_positionsrb_iseq_compile_callbackrb_iseq_original_iseqrb_hash_lookuprb_imemo_newrb_is_const_idrb_str_freezerb_node_dregx_string_valrb_iseq_compile_noderb_str_tmp_newrb_id_attrsetrb_iseq_defined_stringrb_is_attrset_idrb_iseq_mark_and_pin_insn_storagerb_iseq_build_from_aryrb_iseq_loadrb_iseqw_to_iseqrb_cISeqrb_iseq_constant_body_allocrb_locale_encodingrb_enc_str_new_cstrrb_eLoadErrorrb_ivar_setrb_exc_newgetenvrb_enc_str_new_staticrb_st_update__fxstatmmaprb_errno_ptrrb_syserr_newstrerrorrb_str_buf_new_cstrrb_io_fdopenrb_io_waitrb_enc_getrb_enc_dummy_prb_stdinrb_complex_realrb_complex_imagrb_complex_arg__ctype_b_locrb_convert_typerb_ivar_getrb_copy_generic_ivarrb_cRationalstrchrstrpbrkrb_cstr_to_dblrb_str_to_dblrb_mMathrb_complex_uminusrb_complex_conjugaterb_complex_plusrb_complex_minusrb_complex_mulrb_cComplexsincosrb_complex_absrb_complex_powrb_Stringrb_complex_divrb_complex_new_polarrb_protectrb_opts_exception_prb_complex_polarrb_Complexrb_dbl_complex_newrb_marshal_define_compatrb_providerb_gc_locationrb_obj_memsize_ofmadviserb_gc_mark_movablerb_gc_mark_locationsrb_native_mutex_lockrb_native_mutex_unlockmprotectmunmaprb_fiber_scheduler_fiberrb_fiber_scheduler_currentrb_fiber_scheduler_setrb_fiber_scheduler_getrb_fiber_alive_prb_any_to_sstrlcatrb_obj_duprb_eThreadError_setjmpcoroutine_transferrb_syserr_failrb_to_symbol__longjmp_chk__assert_failrb_obj_is_fiberrb_typeddata_is_kind_ofrb_native_mutex_destroyrb_native_mutex_initializerb_fiber_new_storagerb_proc_newrb_fiber_newruby_stoprb_fiber_currentrb_fiber_transferrb_fiber_resume_kwrb_fiber_resumerb_fiber_yield_kwrb_fiber_yieldrb_fiber_transfer_kwrb_fiber_raiserb_make_exceptionsysconfstrtolruby_Init_Continuation_bodyruby_debug_print_indent__fprintf_chkruby_debug_printf__vfprintf_chkruby_debug_print_valueruby_debug_print_vruby_debug_print_idruby_debug_print_noderuby_debug_print_nruby_debug_breakpointruby_set_debug_optionruby_each_wordsruby_debug_counter_getruby_debug_counter_resetruby_debug_counter_show_at_exitrb_enc_mbclen__fxstatatfdopendirrb_cThreadrb_thread_call_with_gvlrb_gc_for_fdopenatrb_errno_setclosedirrb_enc_precise_mbclenrb_enc_codepoint_lenrb_enc_toupperrb_syserr_fail_strrb_get_pathrb_str_new_frozenrb_str_encode_ospathrb_syserr_fail_path_inrmdirrb_enc_path_skip_prefixrb_enc_path_endrb_str_subseqmkdirchrootfchdirrb_external_str_new_with_encrb_str_dupreaddirrb_errnorb_filesystem_encodingrb_thread_currentrb_cDirrb_funcallv_kwrb_enc_str_asciionly_prb_str_coderange_scan_restartablestrlcpydirfdrb_enc_checkrb_eIOErrorrb_enc_compatibleseekdirtelldirrewinddirruby_getcwdrb_dir_getwdrb_enc_associate_indexruby_globrb_globruby_brace_globrb_gc_register_addressrb_file_directory_prb_cFile__xstateaccessdln_find_exe_rdln_find_file_rruby_strduprb_cEncodingrb_interned_str_cstrrb_st_locale_insensitive_strcasecmprb_eEncodingErrorOnigEncAsciiToUpperCaseTablerb_st_insert2rb_enc_registerrb_encdb_declarerb_enc_set_baserb_enc_set_dummyrb_encdb_replicaterb_enc_unicode_prb_encdb_aliasrb_enc_aliasrb_enc_capablerb_enc_set_indexrb_to_encoding_indexrb_st_deleterb_find_encodingrb_eEncCompatErrorrb_obj_encodingrb_enc_fast_mbclenonigenc_mbclenrb_enc_ascgetrb_enc_codelenrb_enc_tolowerOnigEncAsciiToLowerCaseTablerb_define_dummy_encodingrb_encdb_dummyrb_ascii8bit_encindexrb_utf8_encindexrb_enc_sprintfrb_usascii_encindexrb_locale_encindexrb_filesystem_encindexrb_enc_default_externalrb_enc_set_default_externalrb_default_internal_encodingrb_enc_default_internalrb_enc_set_default_internalOnigEncodingASCIIrb_st_init_strcasetable_with_sizerb_cEnumeratorrb_obj_allocrb_check_funcallrb_block_call_kwrb_check_idrb_funcallv_publicrb_obj_respond_torb_enum_values_packrb_eStopIterationrb_rescue2rb_need_blockrb_obj_methodrb_proc_call_with_blockrb_yield_values_kwrb_proc_call_kwrb_check_funcall_kwrb_to_idrb_enumeratorize_with_size_kwrb_enumeratorizerb_funcall_with_blockrb_arith_seq_newrb_arithmetic_sequence_extractrb_ruby_verbose_ptrrb_extend_objectrb_st_keysrb_eSystemCallErrorrb_call_super_kwrb_check_to_intrb_mErrnorb_obj_clonerb_ivar_foreachfcloseruby_vsnprintffputsrb_argv0getpidruby_scan_octfopenrb_iseqw_newrb_cNameErrorMesgrb_str_vcatfrb_compile_warnrb_compile_warningrb_bug_reporter_addruby_default_signalrb_bug_errnorb_assert_failure_detailrb_obj_classnamerb_typeddata_inherited_prb_class_new_instancerb_exc_new_cstrrb_eFatalrb_check_typerb_name_errorrb_vsprintfrb_eNameErrorrb_name_error_strrb_eNoMethodErrorrb_eKeyErrorrb_eExceptionrb_eSystemExitrb_eSignalrb_eInterruptrb_eScriptErrorrb_eSecurityErrorrb_eNoMemErrorrb_enc_raiserb_enc_vsprintfrb_write_error_strrb_str_equalrb_category_compile_warnrb_category_warningrb_setup_fake_strstrstrrb_str_formatrb_io_putsrb_loaderror_with_pathrb_notimplementruby_thread_has_gvl_prb_exc_fatalrb_syserr_new_strrb_sys_failrb_sys_fail_strrb_syserr_new_path_inrb_sys_fail_path_inrb_mod_sys_failrb_mod_sys_fail_strrb_mod_syserr_failrb_mod_syserr_fail_strrb_sys_warningrb_error_frozenrb_frozen_error_raiserb_check_frozenrb_check_copyablerb_proc_callrb_f_untrace_varrb_f_trace_varrb_file_dirnamerb_f_global_variableslog10rb_eSysStackErrorrb_obj_is_instance_ofrb_mod_const_atrb_mod_constantsrb_mod_const_ofrb_const_listrb_ivar_definedrb_iseq_eval_mainrb_enc_str_buf_catrb_write_error2rb_write_errorrb_set_end_procruby_setupprctlruby_prog_initruby_executable_noderuby_exec_noderb_interruptrb_vrescue2rb_rescuerb_frame_calleeruby_initruby_optionsruby_process_optionsruby_finalizeruby_sig_finalizeruby_vm_destructruby_cleanupruby_run_noderb_obj_call_initrb_define_virtual_variable__errno_locationrb_eLocalJumpErrorrb_str_inspectstatxrb_io_taint_checkrb_io_check_closedrb_time_nano_newrb_io_blocking_region__lxstatflockftruncatefchownrb_thread_io_blocking_regionfchmodmkfiforenameunlinkutimensatlutimeslchowngetuidgeteuidumaskgetgidgetegidgetgroupsrb_thread_wait_forrb_str_ellipsizerb_str_conv_encrb_get_path_no_checksaferb_time_timespecsymlinkrb_stat_newrb_cStatrb_file_sizerb_readlinkrb_str_modify_expandrb_enc_path_nextrb_enc_path_last_separatorrb_str_replaceruby_enc_find_basenamerb_str_new_sharedonigenc_get_left_adjust_char_headruby_enc_find_extnamerb_is_absolute_pathrb_str_capacityrb_file_expand_pathrb_file_s_expand_pathrb_file_absolute_pathrb_file_s_absolute_pathrb_path_checkrb_cloexec_openrb_update_max_fdrb_find_file_extrb_find_filerb_cIOrb_mFileTestrb_f_notimplementruby_native_thread_pclock_gettimegetrusageruby_strtodrb_st_foreach_with_replacestrtollrb_gc_vm_lockrb_gc_vm_unlockrb_gc_cr_lockrb_gc_cr_unlockrb_gc_vm_lock_no_barrierrb_gc_vm_unlock_no_barrierrb_gc_vm_barrierrb_gc_event_hookrb_gc_get_objspacerb_obj_idrb_hash_stlike_foreachrb_stdoutrb_io_writerb_gc_ractor_newobj_cache_foreachrb_gc_run_obj_finalizerrb_gc_set_pending_interruptrb_gc_unset_pending_interruptrb_gc_multi_ractor_prb_gc_shutdown_call_finalizer_pruby_free_at_exit_prb_gc_get_shaperb_shape_get_shape_idrb_gc_set_shaperb_gc_rebuild_shaperb_shape_obj_too_complexrb_shape_get_shape_by_idrb_shape_idrb_objspace_data_type_namerb_gc_obj_free_vm_weak_referencesrb_free_generic_ivarrb_undefine_finalizerrb_define_finalizerrb_gc_pointer_to_heap_prb_memory_idrb_st_table_sizeonig_memsizeonig_region_memsizemalloc_usable_sizeruby_stack_lengthruby_stack_checkrb_mark_hashrb_gc_save_machine_contextrb_mark_tblrb_mark_tbl_no_pinrb_gc_obj_optimal_sizerb_gc_modular_gc_loaded_prb_gc_active_gc_namerb_obj_gc_flagsrb_gc_register_mark_objectrb_gc_update_tbl_refsrb_gc_prepare_heap_process_objectrb_during_gcrb_gc_latest_gc_inforb_gc_statrb_num2ullrb_gc_enablerb_gc_disable_no_restrb_asan_poison_objectrb_asan_unpoison_objectrb_asan_poisoned_object_prb_gc_update_vm_referencesrb_objspace_internal_object_prb_ractor_shareable_p_continuerb_gc_update_valuesrb_class_path_cachedrb_imemo_namerb_postponed_job_preregisterrb_st_init_tablerb_memerror_reenteredrb_obj_inforb_gc_copy_finalizerrb_mv_generic_ivarsigactionsigemptysetsigaddsetsigprocmaskrb_gc_mark_mayberb_gc_mark_vm_stack_valuesrb_gc_mark_valuesrb_gc_mark_rootsrb_objspace_reachable_objects_from_rootrb_gc_mark_childrenrb_mark_generic_ivarrb_objspace_reachable_objects_fromrb_gc_disableruby_sized_xfreerb_gc_obj_freerb_str_freeonig_freeonig_region_freerb_postponed_job_triggerrb_gc_unregister_addressrb_gc_update_object_referencesrb_ref_update_generic_ivarrb_gc_adjust_memory_usageruby_sized_xrealloc2ruby_sized_xreallocruby_xreallocrb_ractor_finish_markingposix_memalignrb_gcrb_gc_startrb_global_variablerb_data_object_wraprb_get_alloc_funcrb_wb_unprotected_newobj_ofrb_data_object_zallocmalloc_trimrb_objspace_each_objectsrb_mGCrb_interned_strrb_hash_sizerb_float_valuerb_st_valuesrb_utf8_str_newrb_str_buf_cat_asciirb_st_foreach_checkrb_hash_set_ifnonerb_proc_lambda_prb_proc_arityrb_st_hashrb_st_foreach_saferb_hash_delete_ifrb_st_clearrb_hash_tblrb_check_hash_typerb_hash_lookup2rb_hash_fetchrb_hash_delete_entryrb_st_shiftrb_hash_size_numrb_hash_update_byrb_hash_bulk_insert_into_st_tableruby_setenvruby_reset_timezoneruby_unsetenvrb_env_clearrb_define_global_constrb_st_numcmpfcntlrb_econv_closerb_fiber_scheduler_io_waitrb_io_pathrb_ractor_stdoutrb_exec_async_signal_saferb_execarg_parent_startrb_lastline_getrb_ractor_stderrrb_lastline_setrb_funcallv_public_kwrb_iter_break_valuerb_ractor_stdin_setrb_ractor_stdinioctlposix_fadvisefdatasyncfsyncrb_str_setterrb_class_new_instance_kwrb_io_flushrb_fd_initrb_time_intervalrb_fiber_scheduler_io_selectvrb_fd_termsyscallstrrchrrb_st_locale_insensitive_strncasecmprb_fiber_scheduler_current_for_threadrb_econv_open_optsrb_econv_open_excexecvrb_rsrb_ractor_stderr_setrb_thread_interruptedrb_ractor_stdout_setrb_econv_prepare_optionsrb_econv_asciicompat_encodingrb_str_encoderb_econv_str_convertwritevrb_fiber_scheduler_io_pwrite_memoryrb_io_blocking_region_waitrb_thread_io_blocking_callrb_fiber_scheduler_io_write_memoryrb_fiber_scheduler_io_read_memoryrb_fiber_scheduler_io_pread_memoryrb_maygvl_fd_fix_cloexecrb_fd_fix_cloexecruby_strtoulrb_cloexec_dup2dup3rb_cloexec_pipepipe2rb_cloexec_fcntl_dupfdrb_cloexec_duprb_eof_errorrb_eEOFErrorrb_io_check_initializedrb_io_timeoutrb_io_set_timeoutlseekrb_default_rsisattyrb_io_get_iorb_io_check_iorb_io_get_write_iorb_io_closed_prb_thread_fd_selectrb_fd_issetrb_fd_setrb_io_set_write_iorb_io_check_writablerb_str_tmp_frozen_acquirerb_str_tmp_frozen_releaserb_io_read_pendingrb_io_read_checkcopy_file_rangesendfilerb_io_maybe_waitrb_io_maybe_wait_readablerb_eIOTimeoutErrorrb_econv_make_exceptionrb_econv_convertrb_econv_putbackablerb_econv_putbackrb_econv_check_errorrb_io_maybe_wait_writablerb_mutex_synchronizerb_io_check_char_readablerb_io_check_byte_readablerb_io_check_readablerb_io_ungetbyterb_str_locktmprb_str_unlocktmprb_io_eofonigenc_get_prev_char_headrb_io_ungetcrb_enc_uint_chrrb_mutex_newrb_waitpidshutdownrb_io_bufwriterb_io_addstrrb_io_printfrb_f_sprintfrb_io_printrb_output_rsrb_obj_method_arityrb_str_substrrb_io_getbyterb_io_descriptorrb_io_moderb_io_set_nonblockrb_io_getsrb_io_binmoderb_econv_binmoderb_io_ascii8bit_binmoderb_io_modestr_fmoderb_io_oflags_fmoderb_io_modestr_oflagsrb_check_to_integerrb_io_extract_encoding_optionrb_io_extract_modeencfreopenfilenorb_thread_fd_closesetvbufrb_fdopenrb_io_synchronizedrb_piperb_close_before_execrb_fork_async_signal_saferb_io_open_descriptorrb_fiber_scheduler_make_timeoutrb_wait_for_single_fdrb_thread_wait_fdrb_thread_fd_writablerb_io_wait_readablerb_fiber_scheduler_io_wait_readablerb_io_wait_writablerb_fiber_scheduler_io_wait_writablerb_io_stdio_filerb_io_make_open_filerb_file_openrb_execarg_getrb_execarg_addoptrb_execarg_parent_endrb_execarg_newrb_execarg_extract_optionsrb_execarg_setenvrb_reserved_fd_prb_getsrb_stderrrb_get_argvrb_readwrite_syserr_failrb_mWaitReadablerb_mWaitWritablerb_readwrite_sys_failrb_define_hooked_variablerb_set_class_pathrb_define_readonly_variablerb_gvar_readonly_setterrb_io_buffer_freerb_num2llRUBY_IO_BUFFER_DEFAULT_SIZERUBY_IO_BUFFER_PAGE_SIZErb_io_buffer_transferrb_io_buffer_newrb_cIOBufferrb_io_buffer_maprb_io_buffer_get_bytesrb_str_to_strrb_io_buffer_get_bytes_for_writingrb_io_buffer_get_bytes_for_readingrb_io_buffer_lockrb_io_buffer_unlockrb_io_buffer_try_unlockrb_io_buffer_free_lockedrb_io_buffer_resizemremaprb_io_buffer_clearrb_io_buffer_readrb_fiber_scheduler_io_readrb_io_buffer_preadrb_fiber_scheduler_io_preadrb_io_buffer_writerb_fiber_scheduler_io_writerb_io_buffer_pwriterb_fiber_scheduler_io_pwriterb_is_local_idrb_str_internrb_iseq_evalrb_str_resurrectrb_obj_is_methodrb_get_coveragesrb_iseq_absolute_pathrb_iseq_labelrb_iseq_method_namerb_iseq_code_locationrb_iseq_typerb_iseq_coveragerb_iseq_remove_coverage_allrb_iseq_line_norb_iseq_node_idrb_estimate_iv_countrb_class_superclassrb_iseq_parametersrb_iseq_disasm_insnrb_iseq_disasmrb_free_encoded_insn_datarb_iseq_trace_setrb_iseq_newrb_iseq_new_toprb_iseq_new_mainrb_iseq_new_evalrb_iseq_trace_set_allrb_iseq_local_variablesrb_vm_max_insn_name_sizerb_st_get_keyrb_filesystem_str_new_cstrrb_feature_providedrb_providedrb_loadrb_load_protectrb_ext_ractor_saferb_require_stringrb_f_requirerb_requirerb_st_init_strtablerb_ext_resolve_symbolrb_alias_variablerb_path_to_classrb_st_init_strcasetablerb_str_to_interned_strrb_shape_depthrb_class_inherited_prb_reg_new_strrb_struct_s_membersrb_struct_initializerb_mod_namerb_struct_membersrb_cRegexprb_ivar_countrb_marshal_dumprb_marshal_loadrb_float_newhypotlgamma_rrb_eMathDomainErrortgammaerfcerfcbrtsqrtasinhatanlog2atan2atanhacoshasinacoslogrb_memory_view_registerrb_memory_view_is_row_major_contiguousrb_memory_view_is_column_major_contiguousrb_memory_view_fill_contiguous_stridesrb_memory_view_init_as_byte_arrayrb_memory_view_parse_item_formatrb_memory_view_item_size_from_formatrb_memory_view_get_item_pointerrb_memory_view_extract_item_membersrb_memory_view_prepare_item_descrb_memory_view_get_itemrb_memory_view_available_prb_memory_view_getrb_memory_view_releaserb_memory_view_exported_object_registry_data_typerb_memory_view_exported_object_registryrb_rjit_call_prb_rjit_optsrb_rjit_compilerb_reg_nth_matchrb_reg_match_prerb_reg_match_postrb_reg_match_lastrb_reg_last_matchrb_backref_getrb_mRubyVMFrozenCorerb_block_param_proxyrb_str_comparablerb_class_get_superclassperrorrb_profile_frame_full_labelrb_profile_frame_absolute_pathrb_profile_frame_first_linenorb_profile_frame_pathrb_profile_framesrb_ast_newnoderb_ast_new_local_tablerb_ast_resize_latest_local_tablerb_ast_delete_noderb_ast_newrb_ast_freerb_node_set_typerb_parser_dump_treeroundfmodrb_remove_method_idrb_memcicmp__memmove_chkrb_eZeroDivErrornextafterrb_dbl_cmprb_num2shortrb_fix2shortrb_num2ushortrb_fix2ushortrb_num2fixrb_gcdrb_mod_module_execrb_is_class_idrb_cvar_definedrb_cvar_setrb_is_instance_idrb_cvar_getrb_check_id_cstrrb_const_defined_fromrb_const_get_fromrb_rational_numrb_rational_denrb_const_missingrb_obj_setuprb_class2namerb_st_copyrb_check_convert_typerb_Integerrb_to_floatrb_check_to_floatrb_Arrayrb_Hashrb_obj_instance_variablesrb_obj_remove_instance_variablerb_mod_remove_constrb_mod_class_variablesrb_mod_remove_cvarruby_hexdigitsrb_uv_to_utf8ruby_global_name_punct_bitsrb_parser_st_locale_insensitive_strcasecmprb_st_init_table_with_sizerb_str_to_parser_stringrb_parser_string_freeruby_show_error_linerb_make_backtracerb_str_new_parser_stringrb_parser_trace_lex_staterb_parser_lex_state_namerb_parser_show_bitstackrb_parser_set_location_from_strterm_heredocrb_parser_set_location_of_delayed_tokenrb_parser_set_location_of_heredoc_endrb_parser_set_location_of_dummy_endrb_parser_set_location_of_nonerb_parser_set_locationrb_parser_fatalrb_parser_local_definedrb_parser_dvar_defined_refrb_reg_fragment_setencrb_parser_reg_fragment_checkrb_reg_named_capture_assign_iter_implrb_enc_symname_typerb_parser_reg_compilerb_parser_internal_idrb_reserved_wordrb_ruby_parser_encodingrb_ruby_parser_end_seen_prb_ruby_parser_set_yydebugrb_parser_printfruby_scan_hexrb_ruby_parser_freerb_parser_assignablerb_yytnamerrstpcpyrb_parser_st_locale_insensitive_strncasecmponig_foreach_namerb_parser_st_numcmprb_parser_st_numhashrb_parser_st_table_sizerb_parser_st_clearrb_parser_st_free_tablerb_parser_st_init_existing_table_with_sizerb_parser_st_init_table_with_sizerb_parser_st_init_tablerb_parser_st_init_numtablerb_parser_st_init_strtablerb_parser_st_init_strcasetablerb_parser_st_init_numtable_with_sizerb_parser_st_init_strtable_with_sizerb_parser_st_init_strcasetable_with_sizerb_parser_st_memsizerb_parser_st_lookuprb_parser_st_get_keyrb_parser_st_insertrb_parser_st_add_directrb_parser_st_insert2rb_parser_st_replacerb_parser_st_copyrb_parser_st_deleterb_parser_st_delete_saferb_parser_st_shiftrb_parser_st_cleanup_saferb_parser_st_updaterb_parser_st_foreach_with_replacerb_parser_st_foreachrb_parser_st_foreach_checkrb_parser_st_keysrb_parser_st_keys_checkrb_parser_st_valuesrb_parser_st_values_checkrb_parser_st_hashrb_parser_st_hash_uint32rb_parser_st_hash_uintrb_parser_st_hash_endrb_parser_st_hash_startrb_cUnboundMethodrb_iv_getrb_cBindingrb_cMethodrb_binding_newrb_cProcrb_proc_call_with_block_kwrb_funcall_with_block_kwrb_block_lambdarb_method_call_with_block_kwrb_method_call_kwrb_method_call_with_blockrb_method_callrb_mod_method_arityrb_proc_get_iseqexeclexeclegetpwnam_rgetgrnam_rpthread_sigmaskrb_thread_sleepgetpwuid_rgetppidrb_thread_local_arefrb_f_killrb_thread_sleep_foreverrb_fiber_scheduler_kernel_sleepvsetpgidsigfillsetsetresuidsetreuidsetresgidsetsidgetpgidgetresuidgetresgidvforksetgroupsruby_signal_namesetuidseteuidsetgidsetegidinitgroupssetregidsetprioritygetpriorityrb_proc_timesrb_struct_newgetrlimitsetrlimitgetsidclock_getresgettimeofdayrb_last_status_getrb_last_status_setrb_process_status_waitrb_thread_call_without_gvlrb_fiber_scheduler_process_waitrb_detach_processrb_thread_createrb_thread_local_asetrb_proc_execrb_thread_call_without_gvl2rb_execarg_run_optionsgetpgrpqsortexecverb_f_execrb_thread_atforkrb_mProcessrb_exitrb_f_exitrb_f_abortrb_syswaitrb_spawn_errrb_spawngetlogin_rrb_struct_define_underrb_native_cond_initializerb_autoload_loadrb_mutex_unlockrb_proc_ractor_make_shareablerb_mutex_lockrb_cRactorrb_native_cond_signalrb_init_ractor_selectorrb_eRactorIsolationErrorrb_eRactorUnsafeErrorrb_ractor_make_shareable_copyrb_ractor_local_storage_ptr_newkeyrb_ractor_local_storage_value_newkeyrb_ractor_local_storage_delkeyrb_ractor_local_storage_valuerb_ractor_local_storage_value_lookuprb_ractor_local_storage_value_setrb_ractor_local_storage_ptrrb_ractor_local_storage_ptr_setrb_ractor_local_storage_type_freerb_random_mark__explicit_bzero_chkrb_random_base_initgetrandomgetentropyrb_genrand_int32rb_genrand_realrb_random_data_type_1_0rb_genrand_ulong_limitedrb_random_int32rb_int_pair_to_realrb_random_realrb_rand_bytes_int32rb_random_bytesrb_reset_random_seedrb_struct_alloc_noinitrb_cTimerb_struct_define_without_accessorrb_gcd_gmp__gmpz_gcdrb_gcd_normalrb_Rationalrb_flt_rationalize_with_precrb_flt_rationalizeonig_searchonig_name_to_backref_numberrb_enc_strlenonig_number_of_namesrb_backref_setOnigDefaultSyntaxOnigDefaultCaseFoldFlagonig_reg_initonig_error_code_to_stronig_compile_rubyrb_eRegexpErroronig_reg_copyonig_error_code_to_formatonig_newrb_memsearchmemmemrb_char_to_option_kcoderb_reg_region_copyonig_region_copyrb_reg_backref_numberrb_match_busyonig_region_resizerb_cMatchrb_reg_prepare_reonig_new_without_alloconig_free_bodyrb_reg_onig_matchrb_str_offsetrb_str_lengthrb_reg_matchrb_str_sublenrb_reg_adjust_startposonigenc_get_right_adjust_char_headrb_reg_searchrb_reg_match2rb_reg_nth_definedrb_reg_allocrb_reg_init_strrb_enc_reg_newrb_reg_newrb_reg_regcomprb_str_subposrb_reg_quoteonig_check_linear_timerb_reg_regsubonig_noname_group_capture_is_activerb_reg_timeout_ponigenc_set_default_encodingonig_set_warn_funconig_set_verb_warn_funconig_reduce_nested_quantifieronig_node_freeonig_renumber_name_tableonig_name_to_group_numbersonig_scan_env_set_error_stringonigenc_strlenonig_node_str_setonig_node_new_stronig_node_str_catonig_node_list_addonig_node_new_altonig_node_new_listonig_node_new_anchoronig_get_default_case_fold_flagonig_set_default_case_fold_flagonig_bbuf_initonig_names_freeonig_names_copyonig_initonigenc_initonig_initializeonig_add_end_callonig_endonig_is_in_code_rangeonig_is_code_in_cc_lenonig_is_code_in_cconig_node_new_encloseonigenc_ascii_is_code_ctypeonig_parse_make_treeonig_compileonigenc_get_default_encodingOnigEncDefaultCharEncodingonigenc_get_right_adjust_char_head_with_prevonigenc_step_backonigenc_steponigenc_strlen_nullonigenc_str_bytelen_nullonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_apply_all_case_fold_with_maponigenc_get_case_fold_codes_by_str_with_maponigenc_not_support_get_ctype_code_rangeonigenc_is_mbc_newline_0x0aonigenc_ascii_mbc_case_foldonigenc_single_byte_mbc_enc_lenonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchonigenc_always_false_is_allowed_reverse_matchOnigEncAsciiCtypeTableonigenc_mbn_mbc_to_codeonigenc_mbn_mbc_case_foldonigenc_mb2_code_to_mbclenonigenc_mb4_code_to_mbclenonigenc_mb2_code_to_mbconigenc_mb4_code_to_mbconigenc_mb2_is_code_ctypeonigenc_mb4_is_code_ctypeonigenc_with_ascii_strncmponigenc_with_ascii_strnicmponigenc_minimum_property_name_to_ctypeonigenc_ascii_only_case_maponigenc_single_byte_ascii_only_case_mapOnigEncISO_8859_1_ToUpperCaseTableOnigEncISO_8859_1_ToLowerCaseTableonig_vsnprintf_with_patternonig_region_clearonig_region_setonig_region_initonig_region_newonig_get_match_stack_limit_sizeonig_set_match_stack_limit_sizeonig_search_gposonig_scanonig_get_encodingonig_get_optionsonig_get_case_fold_flagonig_get_syntaxonig_number_of_capturesonig_number_of_capture_historiesonig_copy_encodingonig_null_warnonig_get_parse_depth_limitonig_set_parse_depth_limitonig_strcpyonig_st_init_strend_table_with_sizeonig_st_lookup_strendonig_st_insert_strendonig_node_str_clearonig_scan_unsigned_numberOnigSyntaxRubyonig_set_default_syntaxonig_copy_syntaxonig_set_syntax_oponig_set_syntax_op2onig_set_syntax_behavioronig_set_syntax_optionsonig_get_syntax_oponig_get_syntax_op2onig_get_syntax_behavioronig_get_syntax_optionsonig_set_meta_charOnigSyntaxPythonOnigSyntaxPerlOnigSyntaxPerl58_NGOnigSyntaxPerl58OnigSyntaxJavaOnigSyntaxGnuRegexOnigSyntaxGrepOnigSyntaxEmacsOnigSyntaxPosixExtendedOnigSyntaxPosixBasicOnigSyntaxASISstrcspnmblenrb_gv_setrb_funcall_passing_blockrb_fsruby_incpushruby_init_loadpathrb_load_file_strrb_load_fileruby_scriptrb_external_str_new_cstrruby_set_script_namerb_const_removeruby_engineruby_set_argvruby_show_versionruby_show_copyrightruby_init_setproctitleruby_sysinitrb_parser_lex_get_strrb_str_new_mutable_parser_stringrb_fiber_scheduler_closerb_fiber_scheduler_kernel_sleeprb_fiber_scheduler_blockrb_fiber_scheduler_unblockrb_fiber_scheduler_io_selectrb_fiber_scheduler_io_closerb_fiber_scheduler_address_resolverb_fiber_scheduler_blocking_operation_waitrb_funcall_passing_block_kwrb_shape_each_shaperb_shape_edges_countrb_shape_memsizerb_eval_cmd_kwrb_proc_isolatekillpgsigaltstackrb_str_conv_enc_optsrb_enc_nthrb_check_symbol_cstrrb_st_numhashrb_st_init_strtable_with_sizerb_st_delete_saferb_st_cleanup_saferb_st_keys_checkrb_st_values_checkrb_st_hash_uint32rb_st_hash_startrb_sym_all_symbolsmemrchrrb_debug_rstring_null_ptrrb_str_succrb_str_dumprb_utf8_str_new_cstrrb_utf8_str_new_staticrb_str_dup_frozenrb_str_timesrb_str_new_with_classrb_str_strlenrb_str_shared_replacerb_str_pluscrypt_rrb_str_export_to_encrb_str_exportrb_str_export_localerb_external_str_newrb_locale_str_newrb_locale_str_new_cstrrb_filesystem_str_newrb_str_cat2rb_str_buf_cat2rb_str_drop_bytesrb_str_updaterb_str_splitrb_str_scrubrb_enc_symname2_prb_sym_to_srb_enc_interned_str_cstrrb_struct_sizerb_mod_module_evalrb_cStructrb_check_symbolrb_struct_arefrb_struct_asetrb_struct_getmemberrb_struct_define_without_accessor_underrb_struct_definerb_struct_allocrb_data_definerb_enc_symname_prb_symname_prb_sym_immortal_countrb_is_global_idrb_is_junk_idpthread_cond_timedwaitpthread_selfpthread_getattr_nppthread_attr_getstackpthread_attr_getguardsizepthread_attr_destroyrb_mutex_locked_prb_mutex_trylockpthread_attr_initpthread_attr_setstacksizepthread_attr_setinheritschedpthread_attr_setdetachstatepthread_createpthread_setname_nprb_sourcelinepthread_rwlock_rdlockpthread_rwlock_unlockepoll_ctl__libc_stack_endgetpagesize_longjmppthread_mutex_lockpthread_mutex_unlockrb_thread_killpthread_killrb_native_mutex_trylockpthread_mutex_trylockpthread_mutex_initpthread_mutex_destroypthread_cond_initrb_native_cond_destroypthread_cond_destroypthread_cond_signalrb_native_cond_broadcastpthread_cond_broadcastrb_native_cond_waitpthread_cond_waitrb_proc_isolate_bangpthread_condattr_initpthread_condattr_setclocksigismemberrb_nativethread_selfpthread_rwlock_destroypthread_rwlock_initrb_thread_prevent_forkpthread_rwlock_wrlockrb_internal_thread_add_event_hookrb_internal_thread_remove_event_hookrb_thread_lock_native_threadrb_nativethread_lock_initializerb_nativethread_lock_destroyrb_nativethread_lock_lockrb_nativethread_lock_unlockrb_timespec_nowrb_native_cond_timedwaitepoll_create1eventfdepoll_waitrb_thread_check_trap_pendingrb_thread_wakeup_aliverb_thread_wakeuprb_throw_objrb_thread_mainrb_thread_alonerb_postponed_job_flushppollrb_time_timevalrb_mutex_sleeprb_thread_sleep_deadlyrb_thread_schedulerb_thread_runrb_thread_stoprb_fd_zerorb_fd_clrrb_fd_copyrb_fd_duprb_fd_selectpthread_joinrb_exec_recursive_outerrb_resolve_me_locationrb_clear_coveragesrb_thread_atfork_before_execrb_set_coveragesrb_resume_coveragesrb_add_event_hook2rb_suspend_coveragesrb_remove_event_hookrb_reset_coveragesrb_internal_thread_specific_key_createrb_internal_thread_specific_getrb_internal_thread_specific_setlocaltime_rtzsetgmtime_rrb_time_utc_offsetruby_reset_leap_second_inforb_time_newrb_time_timespec_newrb_time_num_newrb_time_timespec_intervalrb_register_transcoderrb_declare_transcoderrb_econv_encoding_to_insert_outputrb_econv_decorate_at_firstrb_econv_decorate_at_lastrb_econv_openrb_econv_insert_outputrb_econv_set_replacementrb_econv_prepare_optsrb_econv_has_convpath_prb_econv_appendrb_econv_substr_appendrb_econv_str_appendrb_econv_substr_convertrb_gvar_undef_markerrb_gvar_val_getterrb_gvar_var_getterrb_gvar_var_setterrb_gvar_val_markerrb_gvar_undef_getterrb_gvar_var_markerrb_gvar_undef_setterrb_gvar_val_setterrb_define_variablerb_gv_getrb_cvar_findrb_cv_getrb_class_ivar_setrb_iv_setrb_cv_setrb_define_class_variablerb_path2classrb_sourcefilerb_autoload_prb_deprecate_constantruby_descriptionruby_versionruby_release_dateruby_platformruby_copyrightruby_patchlevelrb_method_boundprb_current_receiverrb_eval_string_protectrb_eval_string_wraprb_throwruby_vm_at_exitrb_iteraterb_catch_objrb_catchrb_frame_method_id_and_classruby_init_stackrb_yield_blockrb_yield_splat_kwrb_yield_splatrb_yield_valuesrb_obj_instance_execrb_eachrb_remove_methodrb_funcallrb_undefrb_applyrb_eval_stringrb_obj_instance_evalrb_backtracerb_debug_inspector_openrb_debug_inspector_frame_self_getrb_debug_inspector_frame_class_getrb_debug_inspector_frame_binding_getrb_debug_inspector_frame_iseq_getrb_debug_inspector_frame_depthrb_debug_inspector_current_depthrb_debug_inspector_backtrace_locationsrb_profile_thread_framesrb_profile_frame_labelrb_profile_frame_base_labelrb_profile_frame_classpathrb_profile_frame_singleton_method_prb_profile_frame_method_namerb_profile_frame_qualified_method_namesystemfreadfeofrb_thread_add_event_hookrb_thread_add_event_hook2rb_add_event_hookrb_tracepoint_enablerb_thread_remove_event_hookrb_thread_remove_event_hook_with_datarb_remove_event_hook_with_datarb_tracepoint_disablerb_tracearg_from_tracepointrb_tracearg_event_flagrb_tracearg_eventrb_tracearg_linenorb_tracearg_pathrb_tracearg_method_idrb_tracearg_callee_idrb_tracearg_defined_classrb_tracearg_bindingrb_tracearg_selfrb_tracearg_return_valuerb_tracearg_raised_exceptionrb_tracearg_objectrb_tracepoint_enabled_prb_tracepoint_newrb_postponed_job_registerrb_postponed_job_register_one__vsnprintf_chkInit_prismlocaleconvonigenc_unicode_is_code_ctypeonigenc_unicode_ctype_code_rangeonigenc_utf16_32_get_ctype_code_rangeonigenc_unicode_property_name_to_ctypeonigenc_unicode_mbc_case_foldonigenc_unicode_apply_all_case_foldonigenc_unicode_get_case_fold_codes_by_stronigenc_unicode_case_mapuncompresslibz.so.1librt.so.1libgmp.so.10libdl.so.2libcrypt.so.1libm.so.6libpthread.so.0libc.so.6__environld-linux-x86-64.so.2_edata__bss_startlibruby.so.3.4XCRYPT_2.0GLIBC_2.2.5GLIBC_2.3GLIBC_2.3.3GLIBC_2.12GLIBC_2.3.2GLIBC_2.14GLIBC_2.28GLIBC_2.8GLIBC_2.6GLIBC_2.25GLIBC_2.27GLIBC_2.7GLIBC_2.4GLIBC_2.3.4GLIBC_2.17GLIBC_2.11GLIBC_2.9		
	
			<� `�]��1� ui	��x�0ii
Ƒui	
��T�Psi	Б���ܑri	�ui	��J� ui	��d����������ii
	�ii
�ri	�ii
Ƒ�������(�ii

3�ii
=�ti		G����S����^�ii
i�ui	���ci ��ci��didi di Y0diS�28di��Hdig�2Pdi`�`div�2hdi �xdi��2�di���di��2�di��di��2�diP;�di��2�di ��di��2�dip��di��2�di;ei��2ei  ei��2(ei�8eiո2@ei��Peiܸ2Xei@�hei�2pei0e�ei�2�ei���ei��2�eiP��ei�2�ei���ei�2fi`�fiN�2fiP�(fiZ�20fi@�@fik�2Hfi0�Xfi�2`fi��pfit�2xfi��fi��2�fi���fi��2�fi���fi��2�fip��fiü2�fi���fiؼ2�fi��gi�2gi��gi��2 gi@�0gi�28gi`�Hgi �2Pgi��`gi6�2hgi�xgiI�2�gi���gic�2�gi���gi}�2�gi���gi��2�gi0��gi��2hiĽ2hi`�hip�`hiѽ2hhi��xhi���hi]
3�hi��hi���hi� iih
3(ii�0ii0�8ii`��ii���ii���iiP�ii���ii�6�ii�$�iip7�ii�#�ii�"�ii�!�iip�ii���ii�ii���ii� �ii� ji��ji��ji��ji�� ji (ji��0ji��8ji��@ji��Hji��Pji��Xji��`ji��hji��pji��xji���ji���ji���ji��ji���ji�4�jiP�ji��ji��ji��jiP�ji��ji���ji��ji���ji��ji�ki��ki��ki��ki�� ki�(ki��0ki��8ki��@ki��Hki��Pki��Xki��`ki��hki��pki��xki���kiq
3�kip��ki
�ki�5�ki�3�ki@^
�ki�=
�ki�/
li�]
@lif!3Hli�0
Pli�<
Xli/
`lip/
�liP�
�li�#3�li�
�li�#3�liО
�li�#3�li@�
�li�#3mip�
mi�#30miP�
8mi�
@miD"3Hmi�%3Pmi��
�miT
3ni�.3ni�ni� ni�`ni�.3hni�xni���ni ��niN/3�ni��ni��ni@�oi`�oi��0oi��Poi��poi��oi���oi���oi���oi���oi@��oi�pi�� pi�(pi��8pi��@pi��Ppi��ppi��pi ��pi���piи�pi��qi�0qi��Pqi��Xqi���qil.3�qi@��qi���qiX.3�qi0�rip�@ri�13Hri`�`ri���ri�.3�ri�33si@=si�=3si��(si�=30si`J@si�=3`si�=3hsiP?�si ?�si�P3�si�6�si�P3�si�6�siǍ3�si@4�si#3�siP6ti�5ti 4ti�5ti4 ti�P3(ti60tiz+38tiP5@tiQ3Hti�5PtiQ3Xti�5`ti}O3htip3pti�6xtiP3�ti�6�ti03�tiD_3ui��ui�^3ui�&(ui_30ui��@ui_3Hui��Xui#_3`ui`�pui1_3xui$�ui*X3�ui���uiA_3�ui���uiI_3�ui��uiV_3�ui���uid_3�ui��vik_3vi�viy_3 vi�$0vi�_38vi`�Hvi�_3Pvi0�`vi�_3hvi�xvi�_3�vi���vi���vi�l�viG�3wih~3Pwi�'Xwi�W`wi�	pwiB�3xwi`�wiS�3�wi@f�wie�3�wi �3�wi���wi`� xi%�3(xi@%0xi�%8xi%�xih�3�xi��xi0��xi���xiU�6�xiU�6�xi��Ayi�yi!3@yi��3Hyi}Pyi`xXyi0x`yi�|�yi�3�yiPy�yi y�yi`wzi�3zi�{zi�}zi�w`zi��3�zi��3�zi���zi�� {i�0{i4�38{i�H{i9�3P{i��`{i>�3h{i�x{iS�3�{i���{ic�3�{i��3�{i�3�{ih�3�{i��3|i��3|i(�3@|i0P|i��3X|i Fh|i��3p|iPD�|i�3�|i�D�|i�3�|i�0�|i"�3�|ip0�|i(�3�|i@D�|i.�3�|i@0�|i:�3}i�^}i@�3}i�C(}iF�30}i�4@}iL�3H}i�CX}iR�3`}iP:p}iX�3x}i0C�}i^�3�}i�9�}id�3�}i�9�}ij�3�}i0>�}ip�3�}i�B�}iv�3�}i�B~i|�3~i B~i��3 ~i090~i��38~i�]H~i��3P~i�A`~i��3h~i�3x~i��3�~i�8�~i��3�~i�A�~i��3�~i�<�~i��3�~i�3�~i��2�~i�=�~i��3�~i�Ai��3i0A i��3(iA8i��3@i�@Pi��3XiP@hi��3pi�?�i��3�i�?�i��3�i`?�i��3�i@?�i�3�i�>�i�3�ip8�i�3�i`=�i�3�i8(�i �30�i =@�i'�3H�i�7X�i.�3`�i07p�i5�3x�i�6��i<�3��iP6��iC�3��i0��iJ�3��i�<ЀiQ�3؀i6�iX�3�i�5�i_�3�iP�i�2 �i�`0�if�38�i@<H�im�3P�i <`�it�3h�i�;x�i{�3��i�;��i��3��iP;��i��3��i�:��i��3ȁi�:؁i��3�ip5�i��3��i`�i��3�i� �i��3(�i�^8�i��3@�i�4P�i��3X�i�h�i�_3p�i���i��3��i@I��i��3��i���i��3��i�Ȃi��3Ђi�i��3�i��i��3�i �i��3�i0(�i��30�i@@�i��3H�iPX�i�3`�iPIp�i�3x�i`��i�_3��ip��i�3��i���i�3��i�Ѓi�3؃i��i#�3�i`I�i*�3�i��i1�3 �ipI0�i8�38�i�H�i?�3P�i�`�iF�3h�i�x�iM�3��i�I��iT�3��i�I��i�_3��i�I��i[�3Ȅi�I؄ib�3�i�I�ii�3��i�I�ip�3�i�I �iw�3(�i�I8�i~�3@�i�P�i��3X�ih�i��3p�i��i��3��iJ��i�_3��i ��i��3��iJȅi��3Ѕi0�i��3�i@��i��3�i J�i��3�iP(�i��30�i`@�i��3H�i0JX�i��3`�i@Jp�i��3x�iPJ��i��3��ip��i��3��i`J��i��3��ipJІi��3؆i��i��3�i�J�i��3�i�J�i�3 �i�J0�i
�38�i�JH�i�3P�i�`�i�3h�i�Jx�i�3��i�J��i&�3��i�J��i-�3��i���i4�3ȇi�J؇i;�3�iK�iB�3��iK�iI�3�i K �iP�3(�i0K8�iW�3@�i@KP�i^�3X�iPKh�ie�3p�i`K��il�3��ipK��is�3��i�K��iz�3��i�KȈi��3Јi�K�i��3�ipH��i��3�i�K�i��3�i�K(�i��30�i�K@�i��3H�i�KX�i��3`�i�p�i��3x�i���i��3��i�K��i��3��i���i��3��iLЉi��3؉iL�i��3�i L�i��3�i0L�i��3 �i@L0�i��38�iPLH�i��3P�i`L`�i��3h�i�x�i��3��ipL��i�3��i���i
�3��i��i�3Ȋi؊i�3�i�H�i"�3��i�H�i)�3�i�L �i0�3(�i�L8�i7�3@�i�LP�i>�3X�i�Hh�iE�3p�i�L��iL�3��i�L��iS�3��i ��iZ�3��i0ȋia�3Ћi�L�ih�3�iI��io�3�i�L�iv�3�i�L(�i}�30�i@@�i��3H�iMX�i��3`�i�Hp�i��3x�i�/��i��3��i�/��i��3��i�/��i��3��iP/Ќi��3،i /�i��3�i�.�i��3�i�.�i��3 �i�.0�i��38�i`.H�i��3P�i0.`�i��3h�iPx�i��3��i.��i��3��i�-��i��3��i�-��i��3ȍip-؍i��3�i@-�i�3��i-�i	�3�i�, �i�3(�i�,8�i�3@�i�,P�i�3X�iP,h�i%�3p�i ,��i,�3��i�+��i3�3��i�+��i:�3��i�+ȎiA�3Ўi`+�iH�3�i0+��iO�3�i+�iV�3�i�*(�i]�30�i�*@�id�3H�ip*X�ik�3`�i@*p�ir�3x�i*��iy�3��i�)��i��3��i�)��i��3��i�)Џi��3؏iP)�i��3�i )�i��3�i�(�i��3 �i�(0�i��38�i�(H�i��3P�i`(`�i��3h�i0(x�i��3��i(��i��3��i�'��i��3��i�'��i��3Ȑip'ؐi��3�i@'�i��3��i'�i��3�i�& �i��3(�i�&8�i��3@�i�&P�i��3X�iP&h�i�3p�i &��i�3��i�%��i�3��i�%��i�3��i�%ȑi!�3Бi`%�i(�3�i0%��i/�3�i%�i6�3�i�$(�i=�30�i�$@�iD�3H�ip$X�iK�3`�i@$p�iR�3x�i$��iY�3��i�#��i`�3��i�#��ig�3��i�#Вin�3ؒiP#�iu�3�i #�i|�3�i�"�i��3 �i�"0�i��38�i�"H�i��3P�i`"`�i��3h�i0"x�i��3��i"��i��3��i�!��i��3��i�!��i��3ȓip!ؓi��3�i@!�i��3��i!�i��3�ip �i��3(�iM8�i��3@�i�P�i��3X�i Mh�i��3p�i0M��i��3��i@M��i��3��iPM��i��3��i`MȔi�3ДipM�i�3�i�M��i�3�i�M�i�3�i�M(�i�30�i�M@�i$�3H�i�MX�i+�3`�i�Mp�i2�3x�i�M��i9�3��i�M��i@�3��iN��iG�3��iNЕiN�3ؕi N�iU�3�i0N�i\�3�i@N�ic�3 �iPN0�ij�38�i`NH�iq�3P�ipN`�ix�3h�i�Nx�i�3��i�N��i��3��i�H��i��3��i�N��i��3Ȗi�ؖi��3�i�N�i��3��i�N�i��3�i�N �i��3(�i�N8�i��3@�i�NP�i��3X�iOh�i��3p�iO��i��3��i O��i��3��i0O��i��3��i@Oȗi��3ЗiPO�i��3�i`O��i��3�ipO�i��3�i�O(�i��30�i�O@�i�3H�i�OX�i�3`�i�Op�i�3x�i�O��i�3��i�O��i �3��i�O��i'�3��i�OИi.�3ؘiP�i5�3�iP�i<�3�i P�iC�3 �i0P0�iJ�38�i@PH�iQ�3P�iPP`�iX�3h�i`Px�i_�3��ipP��if�3��i�P��im�3��i���it�3și�Pؙi{�3�i�P�i��3��i�P�i��3�i�P �i��3(�i�P8�i��3@�i�PP�i��3X�i�Ph�i��3p�iQ��i��3��iQ��i��3��i Q��i��3��i0QȚi��3Кi@Q�i��3�iPQ��i��3�i`Q�i��3�ipQ(�i��30�i�Q@�i��3H�i�QX�i��3`�i�Qp�i��3x�i�Q��i��3��i�Q��i�3��i�Q��i�3��i�QЛi�3؛i�Q�i�3�iR�i�3�iR�i#�3 �i R0�i*�38�i0RH�i1�3P�i@R`�i8�3h�iPRx�i?�3��i`R��iF�3��ipR��iM�3��i�R��iT�3Ȝi�R؜i[�3�i�R�ib�3��i�R�ii�3�i�R �ip�3(�i�R8�ix�3@�i�RP�i��3X�i�Rh�i��3p�iS��i��3��i���i��3��iS��i��3��i Sȝi��3Нi0S�i��3�i@S��i��3�iPS�i��3�i�(�i��30�i�@�i��3H�i`SX�i��3`�ipSp�i��3x�i�S��i��3��i�S��i��3��i�S��i��3��i�SОi�3؞i��i�3�i�S�i�3�i�S�i�3 �i�S0�i �38�i�SH�i(�3P�iT`�i0�3h�i�x�i8�3��iT��i@�3��i T��iH�3��i��iP�3ȟi0T؟iX�3�i�i`�3��i �ih�3�i0 �ip�3(�i@8�ix�3@�iPP�i��3X�i`h�i��3p�ip��i��3��i@T��i��3��i���i��3��i�Ƞi��3РiPT�i��3�i`T��i��3�ipT�i��3�i�(�i��30�i�T@�i��3H�i�TX�i��3`�i�Tp�i��3x�i�T��i��3��i���i��3��i�T��i��3��i�TСi�3ءi�T�i�3�i�T�i�3�iU�i�3 �iU0�i �38�i�H�i(�3P�i U`�i0�3h�i0Ux�i8�3��i@U��i@�3��iPU��iH�3��i`U��iP�3ȢipUآiX�3�i�U�i`�3��i�U�ih�3�i� �ip�3(�i�8�ix�3@�i�P�i��3X�ih�i��3p�i��i��3��i�U��i��3��i�U��i��3��i�Uȣi��3Уi�U�i��3�i�U��i��3�i�U�i��3�i (�i��30�i0@�i��3H�i@X�i��3`�iPp�i��3x�i`��i��3��ip��i��3��i���i��3��iVФi�3ؤi��i�3�i��i�3�iV�i�3 �i�0�i �38�i�H�i(�3P�i�`�i0�3h�i�x�i8�3��i���i@�3��i��iH�3��i V��iP�3ȥi0VإiX�3�i@V�i`�3��iPV�ih�3�i`V �ip�3(�ipV8�ix�3@�i�VP�i��3X�i�Vh�i��3p�i�V��i��3��i�V��i��3��i�V��i��3��i�VȦi��3Цi�V�i��3�i�V��i��3�iW�i��3�iW(�i��30�i W@�i��3H�i0WX�i��3`�i@Wp�i��3x�iPW��i��3��i`W��i��3��ipW��i��3��i�WЧi�3اi�W�i�3�i�W�i�3�i�W�i�3 �i�W0�i �38�i�WH�i(�3P�i�W`�i0�3h�i�Wx�i8�3��iX��i@�3��iX��iH�3��i X��iP�3Ȩi0XبiX�3�i@X�i`�3��iPX�ih�3�i`X �ip�3(�iPG8�ix�3@�ipXP�i��3X�i�Xh�i��3p�i�X��i��3��i�X��i��3��i�X��i��3��i�Xȩi��3Щi�X�i��3�i�X��i��3�i�X�i��3�iY(�i��30�iY@�i��3H�i YX�i��3`�i0Yp�i��3x�i@Y��i��3��iPY��i��3��i`Y��i��3��ipYЪi�3تi�Y�i�3�i�Y�i�3�i�Y�i�3 �i`H0�i �38�i�YH�i(�3P�i�G`�i0�3h�ix�i8�3��i ��i@�3��i0��iH�3��i�Y��iP�3ȫi@ثiX�3�iP�i`�3��i�Y�ih�3�i�Y �ip�3(�i�Y8�ix�3@�iZP�i��3X�iZh�i��3p�i Z��i��3��i0Z��i��3��i@Z��i��3��iHȬi��3ЬiPZ�i��3�i`Z��i��3�ipZ�i��3�i�Z(�i��30�i�Z@�i��3H�i�GX�i��3`�i�Zp�i��3x�i0H��i��3��i�Z��i��3��i`G��i��3��i�ZЭi�3حi�Z�i�3�i�Z�i�3�i�Z�i�3 �i[0�i �38�i[H�i(�3P�i``�i0�3h�ipx�i8�3��i���i@�3��i���iH�3��i [��iP�3Ȯi0[خiX�3�i@[�i`�3��iP[�ih�3�i`[ �ip�3(�ip[8�ix�3@�i�[P�i��3X�i�[h�i��3p�i�[��i��3��i�[��i��3��i�[��i��3��i�ȯi��3Яi��i��3�i���i��3�i��i��3�i�(�i��30�i�@�i��3H�iX�i��3`�ip�i��3x�i ��i��3��i0��i��3��i@��i��3��iPаi�3ذi`�i�3�ip�i�3�i��i�3 �i�0�i �38�i�H�i(�3P�i�`�i0�3h�i�x�i8�3��i���i@�3��i���iH�3��i���iP�3ȱiرiX�3�i�i`�3��i �ih�3�i0 �ip�3(�i@8�ix�3@�iPP�i��3X�i`h�i��3p�ip��i��3��i���i��3��i���i��3��i�Ȳi��3вi��i��3�i���i��3�i��i��3�i�(�i��30�i�@�i��3H�iX�i��3`�ip�i��3x�i ��i��3��i0��i��3��i@��i��3��iPгi�3سi`�i�3�ip�i�3�i��i�3 �i�0�i �38�i�H�i(�3P�i�`�i0�3h�i�x�i8�3��i���i@�3��i���iH�3��i���iP�3ȴiشiX�3�i�i`�3��i �ih�3�i0 �ip�3(�i@8�ix�3@�iPP�i��3X�i`h�i��3p�ip��i��3��i���i��3��i���i��3��i�ȵi��3еi��i��3�i���i��3�i��i��3�i�(�i��30�i�@�i��3H�i X�i��3`�i p�i��3x�i  ��i��3��i0 ��i��3��i@ ��i��3��iP жi�3ضi` �i�3�ip �i�3�i� �i�3 �i� 0�i �38�i� H�i(�3P�i� `�i0�3h�i� x�i8�3��i�G��i@�3��i�[��iH�3��i�[��iP�3ȷi�[طiX�3�i\�i`�3��i\�ih�3�i�  �ip�3(�ipG8�ix�3@�i \P�i��3X�i� h�i��3p�i0\��i��3��i@\��i��3��i�G��i��3��iHȸi��3иi�G�i��3�i�G��i��3�i�G�i��3�iP\(�i��30�i� @�i��3H�i`\X�i��3`�ip\p�i��3x�i�\��i��3��i@G��i��3��i!��i��3��i�\йi�3عi0G�i�3�i@H�i�3�i G�i�3 �iG0�i �38�iGH�i(�3P�i�F`�i0�3h�i�\x�i8�3��i�\��i@�3��i�\��iH�3��i�\��iP�3Ⱥi�\غiX�3�i�\�i`�3��i�G�ih�3�i] �ip�3(�i]8�ix�3@�i HP�i��3X�i�Hh�i��3p�i�H��i��3��iPH��i��3��i ]��i��3��i0]Ȼi��3лi@]�i��3�iP]��i��3�i`]�i��3�ip](�i��30�i�]@�i��3H�i�]X�i��3`�i�]p�i��3x�iI��i��3��i I��i��3��i�H��i��3��i0Iмi�3�i���i].4�i��(�id.40�ip�@�ik.4H�i �X�ir.4`�i�(p�i�3x�ip(��iy.4��i����i�.4��ip/��i�.4��iP<нi�.4ؽiP0�i��2�i/�i�.4�i���i*�3 �i��0�iw�38�i@@H�i��3P�i@�`�i��3h�i�x�i-�3��i�#��i�:4��ip2Ⱦi�:4оi�0�i;4�i���i	;4�i��i;4�iP@(�i;40�i@@�i#;4H�i0#X�i.;4`�iP#p�i<;4��iЁ��i_?4��i�ȿii?4пip�iu?4�ip��i�� �i�)3(�i �0�i�8�iT
3@�i �H�i�P�i3X�i�h�i��5p�i@���i��5��i���i��5��i�33��i��5��i��5��i��5�i��5�i��5�i�5�i�5�i�5�i'�5��i/�5�i6�5�iA�5�iJ�5�iT�5 �i]�5(�if�50�io�58�iy�5@�i��5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i��5��i��5��i��5��i��5��i�5��i�5��i�5��i�5��i'�5��i0�5�i:�5�iB�5�iI�5�iQ�5�ia�5�iu�5��i��5�i��5�i��5�i��5�i��5 �i��5(�i��50�i��58�i��5@�i�5H�i�5P�i'�5X�i9�5`�iM�5h�iX�5p�ii�5x�iq�5��i��5��i��5��i��5��i��5��i��5��i��5��i��5��iA�5��i�5��i
�5��i�5��i�5��i-�5��iF�5��iZ�5��it�5�i��5�i��5�i��5�i��5 �i��5(�i��50�i��58�i��5@�i��5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i��5��i��5��i��5��i��5��i��5��i��5��i�5��i�5��i
�5��i�5��i4�5��i�5��i9�5��i�5��i��5��i��5��iA�5�iI�5�iM�5�iU�5�iY�5 �i^�5(�io�50�i��58�i��5@�i��5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i��5��i��5��i��5��i��5��i
�5��i�5��i�5��i'�5��i3�5��i@�5��iM�5��iV�5��i�5��i�5��i�5��i�=4��i�5�i�5�i�5�i�5�i �5 �i$�5(�i(�50�i,�58�i0�5@�i^�5H�i4�5P�i8�5X�ij�5`�i<�5h�i@�5p�iD�5x�i�J8��iH�5��iL�5��iP�5��iT�5��iX�5��i\�5��iq�5��i`�5��ih�5��il�5��it�5��i��5��i��5��i��5��i��5��i��5�i��5�i��5�i��5�i��5 �i��5(�i��50�i��58�i��5@�i��5H�i��5P�i��5X�i��5`�i��5h�i�5p�i�5x�i�5��i1�5��i*�5��i.�5��i2�5��i;�5��iE�5��iI�5��iS�5��i^�5��ic�5��ih�5��iv�5��i��5��i��5��i��5��i��5�i��5�i��5�i��5�i��5 �i��5(�i��50�i��58�iy�5@�i��5H�i��5P�i��5X�i��5`�i�5h�i
�5p�i��5x�i�5��i��5��i�5��i'�5��i-�5��i6�5��i?�5��iM�5��i��5��iZ�5��id�5��i��5��i��5��il�5��ip�5��iz�5��i�5�i��5�i��5�i��5�i��5 �i��5(�i��50�i��58�i��5@�i��5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i��5��i�5��i��5��i��5��i��5��i�,3��i��5��i�5��i
�5��i�5��i�5��i!�5��i'�5��i,�5��i7�5��i@�5��iI�5�iP�5�iW�5�i_�5�ie�5 �in�5(�i��50�iQ�58�iv�5@�i~�5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i��5��i��5��i��5��i(�5��i��5��i��5��i�5��i�5��i<�5��i8�5��iH�5��iX�5��id�5��im�5��ir�5��iv�5��i�5�i��5�i��5�i��5�i��5 �i��5(�i��50�il�58�i��5@�i��5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i�5��i�5��i��5��i��5��i��5��i�5��i
�5��i�5��i!�5��i,�5��i%�5��i<�5��iA�5��iG�5��iP�5��i[�5��ih�5�im�5�it�5�i��5�i��5 �i��5(�i��50�i�38�i��5@�i��5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i��5��i��5��i�5��i�5��i�5��i$�5��i/�5��i8�5��i@�5��i��5��iK�5��i�6��iS�5��i[�5��i�6��ic�5��iu�5�i��5�i��5�in3�iH�5 �i-�6(�i��50�i��58�i��5@�i��5H�i��5P�i��5X�i��5`�i��5h�i��5p�i��5x�i,7��i�5��i�5��i�5��i�5��i�5��i$�5��i�3��i0�5��i΅6��i5�5��i�,4��i:�5��iI�5��iV�5��id�5��i	�5�iu�5�i}�5�i��5�i�
7 �i��5(�i��50�i��58�i��5@�i��5H�i.�5P�i��5X�i��5`�i��5h�i]�5p�i��5x�i�5��i�5��i �5��i+�5��i6�5��i<�5��i��5��i��5��iD�5��iP�5��i[�5��id�5��iq�5��i|�5��i��5��i��5��i��2�i��5�i��5�i��5�i��2 �i��5(�i��50�i��58�i��5@�i��5H�i��5P�i�7X�i�7`�i��5h�i��5p�ix7x�i{�5��i�T3��i@G��i���ip��i�E��i�6��iPH��iPH �i�6(�i�Q0�i�H8�i H@�i�Q��i�[3��i�Q��i�G��i�Q��i��5��i����i��@�i��5��i`b��i�6��i�q��i�6��i�b��i�6��i�b��i6�i`��i6�i�(�i��30�i �@�i�3H�i0�X�i#6`�i�p�i��3x�i@���i�3��i@���i56��i�b��i<6��i�b��iC6��i�b��iJ6��i�u�i��3�i��iQ6 �i`|0�iX68�i�}H�i��3P�iЧ`�i_6h�i�x�if6��i����im6��iu��it6��i�s��i�6��i�r��i86��ic��i�6��i c�i�6�i� �i�6@�i@d`�i�6h�i zp�i`cx�i�q��i�6��iPd��i�y��i@a0�i��8�ip�@�i��H�i��`�i4Vh�i1Pp�i�{x�i{��i�z��irz��i%z��iy��i�x��i{x��i.x��i�w��i!w��i�v��iY{��iEy��i�v��iPw��i�g��ikg�iCg�ig�i�T�iH} �i�{(�i�}0�i�e8�ie@�i�dH�i�cP�i�bX�i�a`�i�mh�i�lp�iGdx�iKc��i&b��iyn��iKm��il��i�k��i�k��iWk��ik��ij��i�i��iQs��i+s��i;r��io��i�p��iـ�ie��i�h�ii�i!h �iXt(�i�i0�ids8�i
h@�i�UH�iB�P�i�oX�ita`�i�Vh�i�^p�i�\x�i�[��i�S��i�Y��i{^��i�Z��i'v��ilu��i����i���i_Y��i�_��i*_��i-`��ie[��i a��i^��i!U�i�`�i�X�i2X�i�W �iGW(�i�V0�i�U8�i�V@�i�VH�i�VP�i�VX�i�V`�i�Vh�i�V��i����iP���i��6��i��6��i�3��if?6��io?6��ii?6��ir?6��iy?6��i�3��iG6��io?6�if?6�i{?6 �ipY60�i�Y6@�i�Y6P�i�Y6`�i Z6p�iXZ6��i�Z6��i�Z6��i�Z6��i8[6��i�[6��i�S6��i�[6�i�[6�i\6 �iP\60�i�\6@�i�\6P�i]6`�i@]6p�i�]6��i�]6��i�]6��i ^6��i`^6��i�^6��i�^6��i_6��iX_6�ix_6 �i�_60�i(`6@�i``6P�i�`6`�i�`6p�i�`6��i8a6��i�a6��i�a6��i b6��ixb6��i�S6��i�b6��i�b6�ic6�i`c6 �i�c60�i�S6@�i�c6P�i0d6`�ipd6p�i�d6��i�d6��i�=3��i�� �i�Q6�ip� �iP� �i@� P�i��!X�i@�!`�i�!h�i��!��i5�6��i�"��i�"��iP�#��i�&$��i��3��i J$�i%�6@�i`�$P�iY�6X�i��$h�if�6p�i�$��iu�6��i��6��i^$�i��6`�i��6x�i�X$��i��6��i�]$��iPX$ �i��6(�i�]$8�i@X$��i��6��i`�$��iX$��i�%��iа6��i��%�i۰6�i�% �i�6(�i �%8�i�6@�i@�%P�i��6X�i@�%h�i�6��i�T3��i�S%�i��6�i@E&�i0&`�i��6h�i@�&p�i��&x�i��&��i��&��i��6��i �&��i0�&��i��&��i��& �i��6(�i��&0�ip�&8�i`�&@�iP�&��iPK'��i`K'��ipK'��i�K'��i�K'��i�K'��i�K'��i L'��iPL'��i�L'��i�L'��i�L'��i0M'��ipM'��i�M'��i�M'�i��(�i�(�i��(�i��( �i��((�i;�(0�i�(8�i��(@�iG�(H�i+�(P�i�(X�i�(`�i��(h�i�(p�i��(x�ip�(��i+�(��i��(��i��(��ie�(��i��(��iU�(��i�(��i��(��iR�(��i��(��i�(��i�(��i��(��iW�(��i��(��i��(�iX�(�i�(�i��(�i]�( �i	�((�i��(0�i;�(8�i�(@�i��(H�ie�(P�i"�(X�i��(`�iM�(h�i��(p�i��(x�i��(��i�(��ij�(��i��(��i"�(��iS�(��i�(��i��(��i��(��i��(��i �(��iA�(��i��(��i��(��i-�(��i�)��i��(�ia�(�i�(�i�(�i��( �i��((�i��(0�i�(8�ih�(@�i�(H�i��(P�i\�(X�i��(`�iq�(h�i�)p�i�)x�i�)��iG)��i�)��i	)��i�)��in	)��i�	)��i�)��i�
)��i()��iF
)��i�)��i)��i�)��i��(��ij�(��i
)�i)�i�)�iH)�i��( �i_
)(�i��(0�i��(8�i�(@�i��(H�ir�(P�i�(X�i��(`�i|�(h�i:�(p�iy�(x�i�(��i��(��i��(��i��(��i,�(��i�(��i��(��i8�(��i�(��ip�(��i�(��i��(��i�(��i��(��ia�(��i�(��i��(�i��(�iV�(�i��(�iF�( �i��((�i��(0�iC�(8�i��(@�ip�(H�i�(P�i��(X�iH�(`�i��(h�i��(p�iI�(x�i��(��i��(��iN�(��i��(��i��(��i,�(��i��(��i��(��iV�(��i�(��i��(��i>�(��i��(��i��(��i��(��i��(��i[�(�i��(�i�(�iD�(�i��( �i��((�iv�(0�i��(8�i�
)@�i2�(H�i��(P�iz�(X�i�(`�i
)h�i��(p�iR�(x�i�(��i��(��it�(��i��(��i��(��i�(��iY�(��i��(��i��(��iM�(��i��(��ib�(��i!)��i5)��iI)��i])��iq)�iN)�ib)�i�)�i�) �i�)(�i�)0�i�)8�i�)@�i�)H�i�)P�i�)X�i��(`�i[�(h�i�)p�i)x�i)��i3)��i�(��i!�(��i��(��i��(��i�(��i��(��ic�(��i
�(��i��(��im�(��i+�(��i0�'��i��'��iP�'��i�'�ip�'�i�'�i��'�i �' �i��'(�i@�'0�iЛ'8�i`�'@�i�'H�i��'P�i�'X�i��'`�i0�'h�i��'p�iP�'x�i�'��ip�'��i�'��i��'��i �'��iy�6��i�e'��ia'��iPO'��i�d'�i��6�i�e'�ie'�i�e' �i�(`�i�6x�i�g'��iPN'��i�j'��ie)�ipc)@�iM93H�i02*`�ip=*��i��6��i 2*��i2*�i��*�iw�6�i�*(�i��60�i��*@�i��6H�i�*X�i��6`�i��*p�i��6x�iP�*��i��6��i �*��i��6��iв*��i�6��i`�*��i�6��i�*��i-�6��ip�*�iD�6�i`�*�iY�6 �iЦ*0�it�68�i@�*H�i��6P�i��*`�i��6h�iP�*x�i�6��i��*��i�6��i�*��i�6��i��*��i0�6��iP�*��i�6��i0�*��iX�6 �i,�6(�i�*��i��*��i��*��i�6��i�*��i��*��i��*��i��*��iP�*��i��*�i�6�i0�*�i�*�iм* �i`�*`�i�*7p�i�*7��iH+7��ix+7��i�+7��i]"7��i�+7��i,7��iX,7�i�,7�i�,7 �i8-70�ix-7@�i�-7P�i.7`�i8.7p�ih.7��i�.7��i�.7��i/7��iP/7��i�/7��i�/7��i07��i(07�iX07�i�07 �i�070�i17@�iH17P�i{"7`�i�17p�i��5��i�17��i�17��i27��iP27��i�"7��i�"7��i�27��i�27�i�27�i37 �i@370�ip37@�i�37P�i�37`�i47p�iH47��ip�5��ip47��i�47��i�47��i57��i@57��ip57��i�57�i�57�i067 �i`670�i�67@�i�67P�i77`�i877p�ip77��i�77��i�77��i87��i �5��i@87��i�"7��i�"7��ip87�i��5�i�87 �i#70�i��5@�i�87P�i97`�i897p�i"#7��i�97��i�97��i0:7��i+�5��iP:7�ix:7�i�:7�i�:7�i�:7�i;7 �i@;70�ih;7@�i�;7`�i�;7p�i<7��i8<7��i`<7��i�<7��i�<7��i(=7�iX=7�i=#7�iU#7�i�=7�i�=7 �i�=70�i@>7@�ix>7P�i�>7`�i�>7p�i��5��i]�5��is�5��i��5��i4�5��i?7�i�5�iH�5�i8?7�i`?7�i�?7 �im#70�i�?7@�i��5P�i@7`�i@@7p�i�@7��i�@7��i�@7��i��5��iA7��i�#7�i`A7�i�A7�i�A7�i�A7�i(�5 �i�#70�i �5@�i�#7P�i0B7`�i��5p�i�#7��ihB7��i�B7��i��5��i�B7��i�B7�iC7�i@C7�ix�5�ixC7�i�C7 �i�C70�i�#7@�i��5P�i��5`�i�#7p�i��5��i��5��i|�5��i�5��i��5��iD7�i�3�iHD7�i�D7�i�D7�iE7 �iHE70�i�E7@�i�E7P�i�E7`�iF7p�iXF7��i�F7��i�F7��i�F7��i@]3��i��5�i(G7�iXG7�i�G7�i�G7�iH7 �iV�50�i$7@�iPH7P�i�H7`�i�H7p�i�H7��iI7��iHI7��i�I7��i�I7��iJ7�i0J7�i`J7�i�J7�i�J7�iW�5 �i�J70�i��5@�iK7P�i@K7`�ixK7p�i$7��i�K7��i8$7��i�K7��i�K7��iQ$7�i8L7�i��5�ixL7�i�L7�i�L7 �iM70�i@M7@�ipM7P�i�M7`�i�M7p�i N7��iXN7��i�N7��i�N7��iO7��iC�5�i�5�i@O7�i��5�ipO7�i�O7 �in$70�i�O7@�iP7P�i8P7`�ihP7p�iP�5��i�P7��i�$7��i�P7��i��5��iQ7�i�$7�iXQ7�i�$7j�Q7j�Q7 j�Q70j��5@jeR6Pj0R7`j`R7pj�R7�j�R7�jS7�j8S7�j`S7�j8�5�j�S7�j�5�j�S7j8T7j�T7 j�T70jU7@jHU7Pj�U7`j�U7pj��5�j V7�j�V7�j�$7�j�V7�jPW7�j(�5�j�W7�j�$7j�W7jX7 j8X70j��5@j%7Pj%7`jpX7pj�X7�jY7�jhY7�j�Y7�j�Y7�j8Z7�jxZ7�j�Z7�j��5j �5j�Z7 ja�50j [7@jX[7Pjq64`j�[7pj�[7�j$�5�j\7�j7%7�j@\7�jx\7�jT%7�jT%7�j�\7j0T6j`�5 j]�50j�\7@j]7`j0�+hj��+pj �+xj��+�j�P6�j��+�j��+�jP�+�j0�+�j��6�j��+�j��+�jP�+�j0�+�j�P6�j��+�j��+j��+j �+j�*3 j��+(j0�+0j�+8j��+@j�*3Pj`�+Xj��+`j��+hj��+pj�b7�j`�+�j��+�j��+�j��+�j�b7�j`�+�j��+�j��+�j��+�j�b7�j�+�j�+�j��+�j0�+jc7j��+j��+ j��+(j �+0jc7@j��+HjP�+Pjp�+Xj��+`jf7pj��+xj��+�jp�+�j��+�jf7�j��+�j��+�jP�+�j�+�jf7�j��+�j��+�j��+�j��+�j�e7j`�+j��+j��+j��+ j�e70j`�+8j��+@j��+Hj��+Pj�e7`j�+hj��+pj��+xj��+�jnc7�j��+�j��+�j��+�j �+�j-c7�j��+�j��+�j��+�j �+�j@c7�j��+�j��+j��+j��+jMc7 j0�+(j��+0j��+8j��+@jac7Pj��+Xj��+`j��+hj��+pj}c7�j��+�j��+�j��+�j��+�j@f7�j��+�j��+�j��+�j��+�j�c7�j��+�j��+�j��+�j��+	j9f7	j��+	j��+ 	j��+(	j��+0	jyc7@	j��+H	j�+P	j0�+X	jP�+`	j�c7p	j��+x	j0�+�	j��+�	j��+�	j�f7�	j��+�	jP�+�	jp�+�	j��+�	j�f7�	j��+�	jp�+�	jP�+�	jp�+�	j�f7
j��+
j��+
j��+
j��+ 
j�f70
j��+8
j��+@
j�+H
j0�+P
j�f7`
j��+h
j��+p
j��+x
j�+�
j�f7�
j��+�
j��+�
j��+�
j��+�
jyf7�
j��+�
j�+�
j0�+�
jP�+�
jrf7�
j��+�
j0�+j��+j��+jkf7 j��+(jP�+0jp�+8j��+@jdf7Pj��+Xjp�+`jP�+hjp�+pj]f7�j��+�j��+�j��+�j��+�jVf7�j��+�j��+�j�+�j0�+�jOf7�j��+�j��+�j��+�j�+jHf7j��+j��+ j��+(j��+0j�c7@j��+Hj�+Pj0�+XjP�+`j�c7pj��+xjp�+�j��+�j��+�j�c7�j��+�j��+�j��+�j�+�j�g7�j��+�j0�+�jP�+�jp�+�j�c7
j��+
j��+
j��+
j��+ 
j�c70
j��+8
j��+@
j�+H
j0�+P
j�g7`
j��+h
jP�+p
jp�+x
j��+�
j�c7�
j��+�
j��+�
j�+�
j�+�
jd7�
j��+�
j��+�
j��+�
j��+�
jd7�
j��+�
j�+j0�+jP�+j3d7 j��+(jp�+0j��+8j��+@j?d7Pj��+Xj��+`j��+hj�+pjpg7�j��+�j0�+�jP�+�jp�+�jad7�j��+�j��+�j��+�j��+�jmd7�j��+�j��+�j�+�j0�+j�d7j��+jP�+ jp�+(j��+0j�f7@j��+Hj�+Pj0�+XjP�+`j�d7pj��+xj0�+�j��+�j��+�j�f7�j��+�jP�+�jp�+�j��+�j�f7�j��+�jp�+�jP�+�jp�+�j�d7j��+j��+j��+j��+ j�d70j��+8j0�+@j�+Hj��+Pj�g7`j��+hj��+pj�+xj0�+�j�f7�j��+�j��+�j��+�j�+�j�d7�j��+�j��+�j��+�j��+�j�d7�j��+�j�+j0�+jP�+j�g7 j��+(j0�+0j��+8j��+@j�f7Pj��+Xj0�+`j�+hj��+pj�d7�j��+�j0�+�j�+�j��+�j�d7�j��+�j0�+�j�+�j��+�j�d7�j��+�j0�+�j�+�j��+j�d7j�+j��+ j��+(j��+0j�d7@j�+Hj��+Pj��+Xj��+`je7pj��+xjP�+�jp�+�j��+�j/e7�j0�+�j��+�j �+�j��+�j�*3�j0�+�j��+�j �+�j��+�jAe7j0�+j��+j �+j��+ jMe70j0�+8j��+@j �+Hj��+PjWe7`j��+hj��+pj��+xj��+�jee7�j��+�j�+�j0�+�jP�+�j?g7�j��+�jp�+�j��+�j��+�j2g7�j��+�j��+j��+j�+j%g7 j��+(j0�+0jP�+8jp�+@jg7Pj��+Xjp�+`jP�+hjp�+pjg7�j��+�j��+�j��+�j��+�j�f7�j��+�j��+�j�+�j0�+�j�f7�j��+�j��+�j��+�j��+j�f7j��+jp�+ j�+(j0�+0jLg7@j�6Hj"�6Pj�7Xj%�6`j(�6hj+�6pj.�6xjI	7�j1�6�j�x>�j�a>�j`a>�j0a>�j _>�j�H>�j�3>�j�>�j�>�j@>�j�>�j�>j��=j`�=j@�=j@�= j �=(j�=0j��=8j0a>@j�=Hj��=Pj��=Xj��=`j�s=hj`o=pj�Z=xj�X=�j�H=�j H=�j�3=�j *=�j`$=�j $=�j@=�j�=�j _>�j`=�j=�j@�=�j�=�j =�j�=�j@=j�
=j=j�=j �< j`�<(j`�<0j@�<8j`�<@j�<Hj��<Pj��<Xj��<`j@�<hj�a>pj�3>xj�>�j@�<�j��<�j`�<�j��<�j �<�j��<�j��<�j�u<�j�]<�j�H<�j�0<�j0<�j�$<�j@	<�j`<�j�<j�<j`�;j�;j��; j`�;(j��;0j@�;8j0�;@j�;Hj��;Pj�;Xj`�;`j�;hj@�;pj��;xj@�;�j�;�j��;�j`�;�j�;�j��;�j��;�j@�;�j��;�j��;�j`�;�j@�;�j(�;�j�;�j��;�j��;�j`�;j��;j��;j�;j��; j��;(j��;0j��;8j��;@jp�;Hj`�;PjP�;Xj0�;`j�;hj��;pj��;xjp�;�jX�;�j@�;�j�;�j��;�j��;�j��;�j��;�j@�;�j �;�j�;�j��;�j��;�jp�;�j@�;�j �;�j�;j��;j��;j��;j��; j��;(jp�;0jP�;8j0�;@j�;Hj�;Pj��;Xj��;`j��;hj`�;pj@�;xj(�;�j�;�j��;�j��;�j��;�j��;�jp�;�jX�;�j@�;�j �;�j�;�j��;�j��;�j��;�j��;�jp�;�jP�;j@�;j �;j�;j��; j��;(j��;0j��;8j`�;@j@�;Hj��;Pj��;XjP�;`j0�;hj�;pj�;xj��;�j��;�j��;�j��;�jp�;�j`�;�jP�;�j@�;�j �;�j�;�j��;�j��;�j��;�j��;�jp�;�jP�;�j �;j��;j��;j��;j��; jP�;(j0�;0j�;8j��;@j��;Hjp�;PjX�;XjH�;`j8�;hj�;pj��;xj��;�j��;�j��;�j��;�j��;�jp�;�j@�;�j �;�j�;�j��;�j��;�j��;�jh�;�jX�;�j@�;�j(�;�j��;j��;j��;j@>j��; j`�;(j��;0j@�;8j��;@j@�;Hj�;Pj��;Xj�>`j �;hj`�;pj@�;xj �;�j �;�j��;�j@�;�j`�;�j@�;�j0�;�j�;�j��;�j �;�j��;�j��;�j`�;�j �;�j�;�j@�;�j�;j��;j��;j��;j`�; j��;(j�;0j�;8j��;@j@�;Hj��;Pj��;Xj��;`j��;hj�};pj r;xj�e;�jY;�jL;�j�>;�j�0;�j`";�j�;�j�;�j��:�j`�:�j �:�j�:�j��:�j �:�j�:�j�j:�j@U:j@:j�*:j`:j�9 j��9(j`�90j�x>8j��9@j@�9Hj`�;Pj�9Xj��9`j��9hj��9pj �9xj��9�j��9�j@�=�j��9�jp�9�j`�9�jP�9�j@�9�j0�9�j �9�j�9�j�9�j��9�j��9�j��9�j��9�j��9 j��9 j��9 j��9 jp�9  j`�9( jP�90 j@�98 j0�9@ j �9H j�9P j�9X j��9` j��9h j��9p j��9x j��9� j��9� j��9� j��9� jp�9� j`�9� jP�9� j@�9� j0�9� j �9� j�9� j�9� j��9� j��9� j��9� j��9� j��9!j��9!j��9!j��9!jp�9 !j`�9(!jP�90!j@�98!j0�9@!j �9H!j�9P!j�9X!j��9`!j��9h!j��9p!j��9x!j��;�!j��9�!j��9�!j��9�!j��9�!jp�9�!j`�9�!jP�9�!j@�9�!j0�9�!j �9�!j�9�!j�9�!j��9�!j��9�!j��9�!j��9"j��9"j��9"j��9"j��9 "jp�9("j`�90"jP�98"j@�9@"j0�9H"j �9P"j�9X"j�9`"j��;h"j��9p"j��9x"j��9�"j��9�"j��9�"j��9�"j��9�"j��9�"jp�9�"j`�9�"jP�9�"j@�9�"j0�9�"j �9�"j�9�"j�9�"j��9�"j��9�"j��9#j��9#j��9#j��9#j��9 #j��9(#jp�90#j`�98#jP�9@#j@�9H#j0�9P#j �9X#j�9`#j�9h#j��9p#j��9x#j��9�#j��9�#j��9�#j��9�#j��9�#j��9�#jp�9�#j`�9�#jP�9�#j@�9�#j0�9�#j �9�#j�9�#j�9�#j��9�#j��9�#j��9$j��9$j��9$j��9$j��9 $j��9($jp�90$j`�98$jP�9@$j@�9H$j0�9P$j �9X$j�9`$j�9h$j��9p$j��9x$j��9�$j��9�$j��9�$j��9�$j��9�$j��9�$jp�9�$j`�9�$jP�9�$j@�9�$j0�9�$j �9�$j�9�$j�9�$j��9�$j��9�$j��9%j��9%j��9%j��9%j��; %jX�;(%j��90%j��98%jp�9@%j`�9H%jP�9P%j@�9X%j0�9`%j �9h%j�9p%j`�;x%j�9�%j��9�%j��9�%j��9�%j@�;�%j��9�%j��9�%jX�;�%j��;�%j��9�%j��9�%j��9�%jp�9�%j`�9�%jP�9�%j@�9�%j0�9&j �9&j�9&j�9&j��9 &j��9(&j��90&j��98&j��9@&j��9H&j��9P&j��9X&jp�9`&j`�9h&j�;p&jP�9x&j@�9�&j0�9�&j �9�&j�9�&j�9�&j��9�&j��9�&j��9�&j��9�&j��9�&j��9�&j��9�&j��9�&jp�9�&j`�9�&jP�9�&j@�9'j0�9'j �9'j�9'j�9 'j��9('j��90'j��98'j��9@'j��9H'j��9P'j��9X'j��9`'jp�9h'j`�9p'jP�9x'j@�9�'j0�9�'j �9�'j�9�'j�9�'j��9�'j��9�'j��9�'j��9�'j��9�'j��9�'j��9�'j��9�'jp�9�'j`�9�'jP�9�'j@�9(j0�9(j �9(j�9(j�9 (j�9((j�90(j�98(j��9@(j��9H(j��9P(j��9X(j��9`(jp�9h(j`�9p(jP�9x(j@�9�(j0�9�(j �9�(j�9�(j�9�(j�9�(j�9�(j�9�(j��9�(j��9�(j��9�(j��9�(j��9�(jp�9�(j`�9�(jP�9�(j@�9)j0�9)j �9)j�9)j�9 )j�9()j�90)jп98)j��9@)j��9H)j��9P)j��9X)j��9`)jp�9h)j`�9p)jP�9x)j@�9�)j0�9�)j �9�)j�9�)j�9�)j�9�)j�9�)jо9�)j��9�)j �9�)j��6�)j�6�)j`x?*j x?0*j0i28*j0i2X*j@i2`*j�i2�*j��6�*j�6�*j`x?�*j x? +j��6(+j߹68+j`x?H+j x?�+j��6�+j��6�+j`x?�+j x?,j0i2,j0i28,j@i2@,j�i2`,j�:4h,j@�Ax,j�!3�,j��A�,j�6�,j �A�,j�,4�,j�A�,j��3�,j@�A�,jD"3�,j A�,ji�6�,j�hA-jB�6-j@YA -jd?4(-j�TA8-j�=3@-j�QAP-jN3X-j`AAh-j�3p-j�>A�-j�3�-j�;A�-jʰ6�-j�3A�-j0�6�-j�,A�-j�:4�-j`*A�-j�3�-j 'A�-j��3.j��?.j/�3.j@�?(.j�}?0.j`�?@.j�}?H.j �?X.j��6`.j@~?�.j�2/j}
3X/j )`/jS�3�/ja�3@0j(
6X0j`�x0j �i�0j	6�0jP��0j�� 1j�6�1j�P6 2j0R2(2j��6�2j�e2�2j�P6�2j�f2�2j�f2�2j�g2�2j h2�2j�g23j`g2 3j@g2(3j�h2�kj`j�mjp�oj��2�qj�qj�qj�qj�qj0ik�qj�lk�.j6/j6p/j6�/j6/j�/jP/j/1j/h/j�0j0j (0j��0j�H0j�0jp0j�jj�1jz1j1jj01jl�1j3�1j82j�1j�@2j��1j�H2j��1j�P2j��1j8X2j8�1j�`2j��1j�h2j��1j�p2j��1jbx2jb�1j��2j��1j�2j�1j$�2j$03j$�1j��2j�3j|3j�3j�83j�xfj�jjHoj�fj��fj��fj��fj��fj�fj=�fj��fj`�fj��fj��fj��fj�fjm�fj6�fjPqjgj�gj_gjgjw gjq(gj(0gj�8gj @gjLHgjPgj`Xgj�`gjohqjohgjYpgj#xgj'�gj��gj3�gj��gj��gj��gj/�gj��gj��gj��gj��gjE�gjz�gj��gj��gj�gj�hj�hjNhj=hj7 hj�(hjP0hj�8hj#@hjHhjKPhjXhj�`hjhhj�phj;xhja�hjS�hjO`qjO�hj��hj��hjD�hj��hj��hjD�hjT�hj��hj��hj0�hjX�hjn�hj<�hj�ijFijijij ijL(ij0ijQ8ij7@ijQHij�Pij�Xij�`ijghijZpij�xije�ijN�ijf�ij��ij;�ijk�ij�ij��qj��ij9�ij��ij��ijg�ijN�ijV�ij�ij��ij�jjajj8jjh jjp(jj00jj�8jj]@jj�HjjyPjj�Xjj�`jj`hjjzpjjxjj�jj{�jj
�jjp�jj��jj^�jj��jj��jj��jj"�jj
�jj��jj��jjE�jj�kjkj�kjXkj� kj�(kj0kj�8kj@kj�HkjpPkj�XkjP`kj0hkj�pkjMxkj4�kj*�kj"�kjs�kj��kj]�kj��kj��kjP�kjI�kj��kj��kj=�kj��kj��kj�lj�lj�ljlj� lj�(lj�0lj/8ljp@ljHlj�PljkXlj`lj;hljFplj�xljD�ljT�lj��ljG�lj��lj_�lj��ljU�lj��lj��lj��ljv�lj�lj,�lj�lj��ljmjmjmjrmj� mj�(mj�0mj�8mjs@mj�Hmj�Pmj(Xmj�`mj�hmj�pmj�xmj|�mj?�mjr�mjl�mj��mj��mj��mj�mj��mjM�mj��mj��mjY�mj��mj��mj�nj)njnj�nj& nj�(njL0nj\8nj�@nj�Hnj�Pnj?Xnjm`nj�hnj�pnj�xnj:�njH�nj��njP�nj�nj��nj��nj��nj,�nj��njA�njH�nj5�nj��nj��nj��njCoj�oj�oj ojx(oj�0oj8oj�@oj�XojS`oj{hojEpojxoj=�oj�oj��oj��oj&�oj��oj,�oj��oj��oj*�oj+�oj��oj�oj��oj8�5j��5j��5j�5j�5j��5j6j�6j�6j�6j% 6j�(6jy06j�86jm@6jH6j�P6jFX6j`6j�h6jop6j1x6j��6j=�6j?�6j:�6j�6j�6j��6j��6j�6j�6j��6j=�6j��6j�6j��6jK�6j
7ji7j7j:7j	 7j
(7j�07j87j@7jmH7jP7j5X7j�`7j
h7jp7j&x7j��7j��7j��7j�7jO�7j�7j��7jC�7jw�7j$�7j��7j6�7j��7j��7j��7j~�7j;8j�8j�8j�8j 8j(8j08j488j@8jH8jP8j�X8j�`8j�h8jgp8j�x8j�8j��8j�8j��8jU�8je�8j��8j_�8j��8j�8jz�8j��8j�8j:�8j�8j��8j�9j9j�9j�9j� 9j(9j?09j�89ja@9jH9jGP9j%X9j�`9jh9jp9jx9j�9jB�9j�9j(�9j2�9j#�9jt�9j��9jI�9j��9j�9j��9j2�9j��9jX�9jK�9jX:j:jj:j�:j :j�(:j(0:j-8:j@:j�H:j�P:j�X:jL`:j�h:j[p:j�x:j��:j��:j)�:j��:jn�:jA�:j��:j1�:j>�:j!�:j��:j"�:j��:j#�:j,�:jv�:j{;j$;j%;j#;j ;jI(;j�0;j#8;j�@;j_H;j;P;j_X;j�`;j&h;j�p;j'x;j��;j(�;jb�;j��;j)�;j��;j��;j��;j*�;j��;j~�;j+�;j,�;j-�;j.�;j��;jw<j�<jp<j&<j <j�(<j�0<j�8<j�@<jPH<j0P<j6X<j>`<j�h<jEp<j1x<j��<j��<jr�<j2�<j��<j��<j��<j.�<j��<jv�<j��<j�<jG�<jU�<j6�<j��<j3=j=j�=j�=j4 =j+(=j�0=j�8=j�@=j�H=jDP=j5X=j�`=j6h=j�p=jwx=j}�=jZ�=j��=j��=jx�=j��=j��=j��=j-�=j��=j��=j��=j��=j8�=j9�=j��=j:>j�>j�>j;>j� >j�(>jK0>j<8>j@>j�H>j�P>jX>j�`>j|h>j�p>j�x>j��>j��>j��>j��>j�>j��>j��>j��>j4�>j��>j��>j��>j�>j\�>jq�>j=�>jE?jK?j>?j�?j ?j�(?j0?j�8?j�@?j?H?jxP?jX?j�`?j�h?j�p?j4x?jb�?j��?j*�?j`�?j��?jx�?j/�?j@�?j��?j��?jA�?jB�?j@�?jC�?jD�?j��?j�@j2@j@je@jE @jF(@jG0@jH8@j�@@j�H@j�P@jIX@jB`@jmh@jNp@j�x@j��@jy�@j��@jJ�@j&�@j��@j3�@j��@j��@j��@j��@jK�@jA�@jJ�@ja�@j��@j�Aj�AjLAj�Ajq Aj7(AjM0AjN8Aj�@Aj�HAj�PAj�XAj�`Aj�hAj�pAj�xAjO�Aj��Aj��AjP�AjQ�Aj/�AjR�AjS�AjT�Ajs�Aj2�Aj~�Aj��Ajs�Aj��Aj��Aj�BjdBj�BjBj� Bj�(Bj�0Bj�8BjT@Bj�HBjPBjXBjU`Bj�hBj�pBj�xBj��Bj��BjV�Bja�Bj��Bj�Bj�Bj�Bj��Bj�Bjn�Bj��BjL�Bj��Bj��BjW�Bj�CjXCj�CjYCj� Cj�(CjZ0Cj�8Cj�@Cj[HCjWPCj�XCj�`Cj
hCj�pCjxCjr�Cj7�Cj��Cj\�Cj~�Cj��Cj��Cj�CjT�CjQ�Cj/�Cj]�Cj�Cj��Cjb�Cj�Cj^Dj�Dj�DjbDj� Dj`(DjZ0Dj_8Dj�@DjHDj�PDj�XDj(`Dj`hDj�pDj�xDj�Dj��Dja�Dj��Dj
�Dj�Djt�DjZ�Dj��Dj��Dj��Dj6�Djb�Dj��DjC�DjP�Dj	Ej�Ej�Ej�Ejb Ej�(Ejd0Ejf8Ej�@Ej�HEjPEj�XEj�`Ej�hEj�pEjfxEjf�Ej,�Ejg�Ej��Ejh�Ej�Eji�Ejy�Ej��Ej[�Ej��EjC�Ej3�Ej��Ej�Ejx�Ej�Fj�Fj�Fj'Fj� FjB(Fj�0Fjk8Fj�@Fj[HFj�PFj�XFj�`Fj0hFj9pFj�xFj��Fjj�Fj��Fj��Fj��Fjg�Fj��Fj��Fj �Fjl�FjX�Fj��Fjk�Fj��FjG�Fj��Fj�GjIGjGj�GjN Gj�(Gj�0Gj�8Gj@GjlHGjYPGjcXGj`Gj�hGj�pGj�xGj��Gja�Gj��Gj)�Gj8�GjU�Gjt�Gjm�Gj��Gjn�Gj%�Gj��Gj�GjG�Gj��Gj��GjHj�HjeHjoHjh Hj(Hj00Hj/8Hj)@HjmHHj�PHjXHj7`Hj�hHj)pHjxHj��Hj��Hj��Hjn�Hjq�Hj�HjF�Hj��Hj+�Hjr�Hjs�Hj;�Hj��Hji�Hj��Hj5�HjtIjIjuIjIjv Ij7(Ij40Ij�8Ij�@Ij�HIjBPIj�XIjw`Ij�hIj�pIjxxIj��Ij�Ij�Ij��Ij��Ij;�Ijg�Ijy�Ij��Ij��Ij�Ijz�Ij��Ij5�IjQ�Ij{�Ij|Jj�JjJjJj Jj�(Jj�0Jj(8Jj�@Jj�HJjPJj�XJj�`JjAhJj�pJj�xJj�Jj �Jj}�JjH�Jj~�Jj@�Jj~�Jj�Jj��Jj��Jj�Jj�Jj�Jj��Jjo�Jj��Jj.Kj?Kj�Kj�Kj* Kj�(Kj�0Kj38Kjd@Kj�HKj�PKjLXKj�`KjEhKj�pKj�xKj��KjL�Kj�Kj��Kj�KjH�Kj��Kj��Kj��Kj��Kj7�Kj��Kj��Kj@�Kj��Kj}�Kj�Lj�Lj�Lj�Lj� Lj�(LjO0Lj�8Lj]@Lj�HLj�PLj�XLj�`Lj�hLj�pLjxLj�Lj-�Lj��LjO�Lj��Lj��Lj��Lj��Lj��Lj��Lj��Lj'�Lj|�Lj��Lj6�Lj��Lj�Mj�Mj�Mj�MjM Mj�(MjI0Mj�8Mj�@Mj�HMj8PMj�XMj-`Mj�hMjppMj�xMjQ�Mj��Mj��MjN�Mj��MjD�Mj��Mjq�MjM�Mj�Mj"�Mj��Mj��Mj��Mj,�Mj��Mj�Nj�Nj�Nj�Njy Nj�(Nj10Nj�8Nj�@Nj�HNj�PNj�XNj�`Nj�hNjYpNj�xNji�Nj1�Nj��Nj��Nj?�Nj��Njz�Nj��Nj��Nj��Nj��Nj$�Nj��Nj+�Nj�Nj��Nj�Oj�Oj�Oj\Oj� Oj�(Oj�0OjY8Oj�@OjrHOj�POj�XOj9`Oj�hOj�pOjvxOj��Oj�Oj��Oj��Oj��OjI�Oj&�Oj�Oj��Oj��Oj��OjP�Oj�Oj��Oj��Oj��Oj�PjPj�PjPj� Pj�(Pj�0PjI8Pj.@Pj�HPjuPPj�XPj�`Pj>hPj�pPj	xPj��Pj��Pjk�Pj>�Pj��Pj��Pj��Pj��Pj��Pj��Pj��Pjh�Pj��Pj��Pj8�Pj=�PjjQj>QjQjrQj� QjR(Qj]0Qjt8Qj�@QjdHQj�PQj�XQjC`QjohQjpQj�xQjp�Qj��Qj��QjB�Qj2�QjD�Qj��Qj��Qj��QjC�Qj��Qj:�Qj�Qj��Qj��Qj��Qj�RjQRj�Rj�Rj Rj�(Rj40Rj�8Rj�@Rj*HRjoPRj�XRj`Rj�hRj�pRj�xRj��Rj/�Rj��Rj��Rj��Rj��Rjp�Rj.�Rj��Rj��Rj��Rj��RjR�Rj�Rj �Rj��Rj�SjSj�SjOSj� SjG(Sj�0Sj8Sj�@SjCHSjhPSj�XSjk`SjihSjVpSj�xSj��Sj��Sj��Sj��Sju�Sj��Sj��Sj��Sj�Sji�Sjf�SjF�Sj��Sj��SjF�Sj��Sj�TjTjZTj�Tj� TjV(Tj90Tj�8Tj�@Tj�HTj5PTj^XTj�`Tj�hTj�pTj�xTj��Tj��TjB�TjG�Tj��Tj@�Tj�Tje�TjK�Tj��Tj��Tj�Tj}�Tj$�Tjx�Tj�Tj�Uj_Uj�UjtUj� Uj�(Uj�0Uj�8Uj@Uj�HUj�PUj�XUj�`Uj�hUjzpUjvxUj��Uj6�Uj��Uj��Uj�Uj��Uj9�Uj��Uj��Uj��Uj��Uj�Uj��Uj��Uj��Uj��Uj�Vj�Vj�Vj�Vj� Vj�(Vj?0Vj�8Vj@Vj�HVj�PVj�XVj�`Vj2hVj�pVj�xVjW�Vj��Vj��Vj��Vj�Vj#�Vj��VjZ�Vj��Vj��Vj��Vj��Vj��Vj:�Vj��Vj��VjSWjWj
Wj�Wj� Wj�(Wjc0Wj�8Wjl@Wj|HWj�PWj�XWj�`Wj�hWj�pWjRxWj��Wj��Wj9�Wj��Wj!�Wj��Wj�WjF�Wj��WjJ�Wj��Wj�Wj��Wj[�Wj��Wj�Wj�Xj(Xj�XjXj$ Xj"(Xj�0Xj�8Xj�@Xj�HXj�PXjzXXj�`Xj�hXj�pXjxXjG�Xj��Xj��Xj'�Xj}�Xj��XjM�Xj��Xj��Xj@�Xj��Xj��Xj �Xj�Xj{�Xj#�Xj�YjYj{Yj=Yj� Yj|(Yj�0Yj@8Yj�@Yj�HYjPYj�XYjn`Yj�hYj�pYj!xYj��Yj��Yj�Yjs�Yj��Yjh�Yj8�Yj��Yj��Yj��Yj��Yj�Yj�Yj��Yj��Yj��Yj�Zj�Zj
Zj�Zj� Zj(Zj�0Zj�8Zj�@ZjmHZj�PZj�XZj�`ZjehZjpZj�xZj��Zj��Zj�Zj��Zj��Zj��Zj��Zj��Zjl�Zj��Zj��Zj<�Zjt�Zjk�Zj��Zj�Zj�[jM[j�[j�[ja [j([j0[jU8[j
@[j�H[jP[j�X[j�`[j9h[jwp[j�x[jJ�[j��[j��[j��[jW�[j��[j��[j��[jE�[j��[j5�[j��[j��[j��[j��[jY�[j�\j�\j0\jX\j� \j�(\j�0\j�8\j@\j�H\j�P\j�X\j`\j�h\j�p\j�x\j@�\jH�\j��\jV�\jh�\j��\jj�\j��\j[�\j��\j%�\j��\j��\j��\j��\j��\j�]j&]j�]j�]j� ]j�(]j�0]jL8]j�@]j�H]j-P]j�X]j`]j�h]jkp]j�x]j+�]j��]j��]j+�]j��]j%�]j�]j��]j��]j�]jv�]j��]j1�]j\�]jp�]j)�]j�^jA^j!^j�^j� ^j�(^jz0^jg8^j�@^j�H^jdP^j�X^j@`^jYh^j$p^j�x^j��^jm�^ji�^j��^ja�^j	�^j��^j��^j��^jw�^jc�^jn�^j.�^jx�^j��^j��^j�_j�_j�_j�_jc _j(_j�0_jT8_jl@_jH_jcP_jMX_j�`_jAh_j�p_jfx_j�_j:�_j�_j��_j �_j�_j-�_j�_j�_j��_jd�_j�_j�_j�_j�_j&�_j`jj`jE`jA`j `j�(`j0`j8`jj@`j�H`j�P`jX`j�``j�h`j�p`jix`j��`j�`j��`j	�`j��`j�`j
�`j,�`j��`j��`j�`jA�`j�`j��`j5�`j��`j�aj�ajKajaj� aj(aj�0aj
8aj�@ajHajPaj�Xaj�`aj�haj�paj
xaj2�aj�aj^�ajS�aj��ajz�aj�ajC�aj��ajV�aj��aj��ajn�ajS�aj��aj�ajJbj�bjdbj{bj� bj�(bjv0bj8bj]@bjHbjPbj�Xbj�`bj�hbj%pbj�xbj�bj�bju�bj��bj�bj�bj�bj��bj��bj!�bjR�bj��bj^�bj �bj��bj��bj�cj�cj�cj�cj cj�(cj�0cj*8cj�@cjHcjPcj�Xcj`cj�hcj�pcjxcj��cj�cj��cjW�cj�cj<�cj�cjj�cj7�cj�cj�cj �cju�cj
�cj!�cj��cj_dj"dj�dj�dj� dj<(djU0djJ8dj!@dj	Hdj{Pdj�Xdj�`dj#hdj$pdj=xdj��dj�dj%�dj�dj&�dj��dj��dj��dj=�dj'�dj�dj(�dj��dj��dj��djV�dj�ej�ej�ej)ejW ej�(ejT0ej�8ej^@ej�Hej,Pej�Xejq`ej5hejpej-xej�ej.�ej�ej/�ej}�ej��ej��ejT�ej��ej0�ej1�ej[�ej��ejH�ej�ejI�ej�fj�fjBfj-fj2 fj�(fj
0fj38fj�@fj4Hfj�Pfj5Xfj}`fj^hfjpfj*��H��H�qfH��t��H����5
?f�%?f��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h��������h�������h�������h������h������h������h������h������h��q����h��a����h	��Q����h
��A����h��1����h��!����h
������h������h�������h�������h�������h������h������h������h������h������h��q����h��a����h��Q����h��A����h��1����h��!����h������h������h�������h �������h!�������h"������h#������h$������h%������h&������h'��q����h(��a����h)��Q����h*��A����h+��1����h,��!����h-������h.������h/�������h0�������h1�������h2������h3������h4������h5������h6������h7��q����h8��a����h9��Q����h:��A����h;��1����h<��!����h=������h>������h?�������h@�������hA�������hB������hC������hD������hE������hF������hG��q����hH��a����hI��Q����hJ��A����hK��1����hL��!����hM������hN������hO�������hP�������hQ�������hR������hS������hT������hU������hV������hW��q����hX��a����hY��Q����hZ��A����h[��1����h\��!����h]������h^������h_�������h`�������ha�������hb������hc������hd������he������hf������hg��q����hh��a����hi��Q����hj��A����hk��1����hl��!����hm������hn������ho�������hp�������hq�������hr������hs������ht������hu������hv������hw��q����hx��a����hy��Q����hz��A����h{��1����h|��!����h}������h~������h�������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h��ѿ�����h�������h�鱿�����h�顿�����h�鑿�����h�避�����h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��Ѿ�����h�������h�鱾�����h�顾�����h�鑾�����h�遾�����h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��ѽ�����h"�������h#�鱽�����h$�顽�����h%�鑽�����h&�遽�����h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��Ѽ�����h2�������h3�鱼�����h4�顼�����h5�鑼�����h6�遼�����h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��ѻ�����hB�������hC�鱻�����hD�须�����hE�鑻�����hF�遻�����hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��Ѻ�����hR�������hS�鱺�����hT�顺�����hU�鑺�����hV�遺�����hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��ѹ�����hb�������hc�鱹�����hd�项�����he�鑹�����hf�遹�����hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��Ѹ�����hr�������hs�鱸�����ht�顸�����hu�鑸�����hv�選�����hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���ѷ�����h��������h��鱷�����h��顷�����h��鑷�����h��遷�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѷ�����h��������h��鱶�����h��顶�����h��鑶�����h��遶�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���ѵ�����h��������h��鱵�����h��页�����h��鑵�����h��遵�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѵ�����h��������h��鱴�����h��顴�����h��鑴�����h��遴�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���ѳ�����h��������h��鱳�����h��顳�����h��鑳�����h��遳�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѳ�����h��������h��鱲�����h��顲�����h��鑲�����h��遲�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���ѱ�����h��������h��鱱�����h��顱�����h��鑱�����h��遱�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѱ�����h��������h��鱰�����h��顰�����h��鑰�����h��遰�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h��ѯ�����h�������h�鱯�����h�顯�����h�鑯�����h�遯�����h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��Ѯ�����h�������h�鱮�����h�顮�����h�鑮�����h�遮�����h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��ѭ�����h"�������h#�鱭�����h$�顭�����h%�鑭�����h&�遭�����h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��Ѭ�����h2�������h3�鱬�����h4�顬�����h5�鑬�����h6�遬�����h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��ѫ�����hB�������hC�鱫�����hD�顫�����hE�鑫�����hF�遫�����hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��Ѫ�����hR�������hS�鱪�����hT�顪�����hU�鑪�����hV�遪�����hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��ѩ�����hb�������hc�鱩�����hd�顩�����he�鑩�����hf�適�����hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��Ѩ�����hr�������hs�鱨�����ht�顨�����hu�鑨�����hv�遨�����hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���ѧ�����h��������h��鱧�����h��顧�����h��鑧�����h��遧�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѧ�����h��������h��鱦�����h��顦�����h��鑦�����h��遦�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���ѥ�����h��������h��鱥�����h��顥�����h��鑥�����h��遥�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѥ�����h��������h��鱤�����h��顤�����h��鑤�����h��遤�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���ѣ�����h��������h��鱣�����h��顣�����h��鑣�����h��遣�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѣ�����h��������h��鱢�����h��顢�����h��鑢�����h��遢�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���ѡ�����h��������h��鱡�����h��顡�����h��鑡�����h��遡�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���Ѡ�����h��������h��鱠�����h��顠�����h��鑠�����h��遠�����h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h��џ�����h�������h�鱟�����h�顟�����h�鑟�����h�遟�����h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��ў�����h�������h�鱞�����h�類������%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%�eD���%�eD���%�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%�eD���%�eD���%�eD���%�eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݿeD���%տeD���%ͿeD���%ſeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݾeD���%վeD���%;eD���%žeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݽeD���%սeD���%ͽeD���%ŽeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݼeD���%ռeD���%ͼeD���%żeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݻeD���%ջeD���%ͻeD���%ŻeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݺeD���%պeD���%ͺeD���%źeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݹeD���%չeD���%͹eD���%ŹeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݸeD���%ոeD���%͸eD���%ŸeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݷeD���%շeD���%ͷeD���%ŷeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݶeD���%նeD���%ͶeD���%ŶeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݵeD���%յeD���%͵eD���%ŵeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݴeD���%մeD���%ʹeD���%ŴeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݳeD���%ճeD���%ͳeD���%ųeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݲeD���%ղeD���%ͲeD���%ŲeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݱeD���%ձeD���%ͱeD���%űeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݰeD���%հeD���%ͰeD���%ŰeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݯeD���%կeD���%ͯeD���%ůeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݮeD���%ծeD���%ͮeD���%ŮeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eD���%
�eD���%�eD���%��eD���%��eD���%�eD���%�eD���%ݭeD���%խeD���%ͭeD���%ŭeD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%��eD���%}�eD���%u�eD���%m�eD���%e�eD���%]�eD���%U�eD���%M�eD���%E�eD���%=�eD���%5�eD���%-�eD���%%�eD���%�eD���%�eDH�=�-1��r��"CH�=�-1��_���DH�=�-1��L��FH�=��-1��9��#HH�=��-1��&��IH�=��-1����KH�=z�-1����LH�=\�-1�A������MH�
��-H�D.�NH�=��-��H�=$�-1������H��H�=�.1��o��H�5�-�1�H�T$���H�T$�H�=�.1��?��H�uL��H�=�	.1��*��H��H��菢����1���H�=B
.�
���u�AH�=.
.1������1�H�=
.�����T$8��1�H�=
.����D�‰�H�=�	.1������H�=�	.1������H�=�	.1������1�H�=�	.�����H�=�	.1������l����AH�=�	.1��g�����H�=�.1��T��H�=�.1��F��H�=�.1��8����UH��H��SPH��t@��uH���H��u
���H����u���H��H���j���H��H�5�.H��H�f�eH�81����W����%dH�%H�%H�%�%`1�H�t%H�GH��H��C.�p`1��.�]H�%�%`H�=D.1��X��H�%��%lH�%x�%l�%�%dH�%(��H�=6D.1����H�=O.1����H�%xH�%�D��H�=JO.1�����H����H�%x�%`�%l�%`�%`H�%xH�%x�%�%H�%�%pH�%H�%H�%�%t�%��%p�%��%`H�%xH�%H�D$H�%(H�%H�=KR.1�L�D$���L�D$�yH�%xH�%�L�%(H�%(H�% H�%0H�%0H�%�%\H�%H�%��%`�%X�%X�%H�%��%Y�%Y�%`H�%H�%�H�%�%`��������I�FH�%0H�%0H�$H�%0H�%xH�%H�%H�%H�%��H�=S.1��\��H�%xH�%(H�=�S.1��:��L��H�=�S.1��)��H�%(H�%H�%H�%H�%x�%�%�%H�%H�%H�D$0H�%H�%�%\H�%H�%H�%H�% H�% H�%H�%H�%�%YH�%(L������L����H�|$x���H�%���H�%H�%H�=`H.1�����H����H�=�21�����H��H�=�H.H�p 1����H�%(H�%L�4%(H�%H�%H�D$ H�%(H�%H�%H�%�%�%�%H�%0H�%H�%H�%H�%H�%H�%H�%H�% H�% H�%H�D$@H�%H�%�%X�%`H�%(H�%�H�%(�%`H�%H�%xH�%xH�D$H�%(H�=�S.1��!��H�=�S.1����H�=DS.1����H�%L�$%(H�%H�%H�% �%`H�%H�%H�%xH�%xH�%xH�%xH�%H�=�L.1�����wH�%H�%H�%�H�%�H�%�H�%�H�%(H�%�H�%xH�%xH�%H�%�%`H�%H�%H�D$(H�%(H�%H�%xH�%H�%H�%xH�%�H�%H�%(H�%(H�%(H�%xH�%0H�%xH�% H�,%(L�$%(�%`H�%H�%xH�%�H�D$(H�%(H�%H�%��%`�%`H�%�H�% �%`H�% H�% H�%�H�%�H�%�H�%�H�% H�%�H�%H�%H�%H�%�H�%H�%H�%H�%�H�%(H�% H�%(H�% H�,%(H�%0H�%xH�%H�%(H�%0H�%H�%H�%H�%H�%�%X�%XH�%H�%H�%H�%H�%I�GH�%0H�%0H�D$H�%0�%`�%`L��H�=ML.1�����H�%xH�=L.1����H�=�P.1����H�=YP.1����H�=P.1����H�=�O.1��~���H�%�H�%�H�%�H�%H�%�%`�%`H�=�Q.1��T���蚩��H�5�T.�1�����D|�%I�E0H�%I�E0H�%�%�%I�E0H�%�@I�E0H�%�%I�E0H�%�%I�E0H�%�%H�=VV.1�����
Cf�7�H�=�V.1��r���$�H�5��eH��t���eH�=c[.1��L����H�= [.1��9����������z����u���H�=�Y.1�����b����]����X�����H�=o].1��Ⱦ��H�%H��H�=d^.1�1������0	H�=B�-1�L�%��	����QY	H�=(�-1�����,Z	H�=�-1�����][	H�=�-1�����\	H�=��-1��u����]	H�=��-1�H�-��	�[���on	��H�������H��������H�=��-1��)���,
H�t$L���W���H�t$L���J���H�t$H���=���H�t$H���0�����SH��H���H�t$8H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��e���H�8tXH��$�H�T$H��1�H�D$H�D$0�D$�D$0H�D$ �i�
H�L$�H�5�kfH�=�kfH�D$���H�D$(dH3%(t�r��H���[���PXH���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ H�D$�D$0��
腖��D���
����x���H��1�H�=m.������AUI��ATI��UL��SH���L�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H�T$�D$�����x�
H��H����H����H�=�l.�#�M��tL��H��l.H��1��襗��H��L���ڿ��H��t[�}tUH��$H�ٺ�H�D$H�=�!1H�D$0�D$(�D$0H�D$ ��H�L$H��H�߾�z���H���eH�rk.�H��H�1�����H��1��0�%�t$H���$�
�����PXE1�P1��ޤ����S�փ�vH���eH��P�wF��H�=	s.�DHc�H��q.Hk�
HӀ;t���
H��H�=�r.H��1����H�a�eH����H�=s.1����H��H������H��色����RH��$uH�=s.1���H���(�
9�u��uH�WH�z�H��w��H�ω��7���X���PXPH��$uH�=�r.1�訹����
���������UH��S��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1��D���H�8tS���e��rHH��$�H��H��1�H�D$H�D$ �$�D$0H�D$�@�
��H�����
H��H��苆
H�D$dH3%(t�V��H���[]Ë%�%�u��H�>�e�"�H�=�r.H��5��H�;轢%�Ȓ��H��tH��H�=�l.1��R���H�-{2��H�5r2H�=kr.1��4���H�5]2H��t�H�sH� t�H�s��H�=2H��t4H��H��H�=Sr.1���H�2H��t�H�BH� t�H�B��H�=��1�����'
H�WsH�WH�5�r.�1��&���@��1�H�=}t.葷���%D��H�=et.1��w���H�=��.1��i���H�%H�=��.1��Q����%H�=�.1��:���H��1�H�=|�.�Y��H�D$8H�|$8H�pp�B�8H��H��H�=��.1����H�=.�.1�����DH��H�=��.1��ٶ��H��H��H�=��.1��Ŷ����1�H�=�.赶��H��H��H�=0�.1�衶��L��H�ھ1�H�=��.舶����USP茮����uH�
>�.H�r�.��H�=C�.蹎��H�
�fH�H��H��tEfH�=[�effH�S���H�����u(H�S0H��tpH�r 1�H�RH9VXu�N`H�S9��t H���eH�=�.H�0舺����Δ����H���
�"H�{�H�CpLJ�H��蝎��H�%X����H�H��t'�BH�
��.f��uAH�3H��H�=�.1����o���H�
c�.�����H�=��.1��S���H�=��.1��E���H�z(H9�r����H��H�H�H9�s�1��ÿ(H��1�Hk�(H��H���.H��HD��z����{����v�����PXP�j���H�=��.1��ܴ���W����R���H�=S�.1��Ĵ��L��H�=�.1�賴��H�=�.1�襴��H��H�=��.1�蔴��H�=-�.1�膴��H��H�=�.1��u���H��H�=�.1��d���H�H��uH�
P�.H�3H��H�=�.1����>����BH�
.�.f��t�H�z(H9�r����H��H�H�H9�s�1��ÿ(H��1�Hk�(H��H�߇.H��HD��H�=�.1��޳���T$H�
�1L��1�H�=�.�³����L��H�=Μ.1�诳��H�=��.1�衳��M�M�1�L�H�H�=ĝ.至��H�=p�.1��y���H�=*�.1��k���H�=2�.1��]���L��H�ھ1�H�=Y�.�D���L��H��H�=�.1��0���H�=�.1��"���H�=�.1�����H�=��.1�����H�=w�.1������H�=��.1����H�=��11��ڲ���CH�5��.H�=��.��׃��C1�踲���3���H�=z�.1�襲��L��H�=۞.1�蔲��H�=��.1�膲��H�=W�.1��x�����H�=:�.1��e���H�=ƞ.1��W����EH�5Q.H�="�.��׃��E1��5���谛��諛��H�=�.1�����H�=֞.1�����芛��H�=�.1�����w���H�=�.1����L��L��H�=��.1��ձ��H�
ن.H��.�9H�=��.����H�%H�%H�%H�%H�='�.1������:
�����H�=
�-1�����1�
H�=�11��P���H�=	�11��B���H�=F�.1��4���H�=8�.1��&���H�=�11�����H�=�.1��
���H�=�11����H��H�=��.1�������H�=%�.1��ְ��H�=\�.1�����DH�=��.1�������VH�5)�-�1������E1�H�S.1�L��H�=��.���I��$�b�E1�I�������H�s H�=�.1������H�=�.1��l����H�=��.1��Y��H�=�gf�m��L�k A�UP��H������H�50�.�1�Z�s��H�uH�=(�.1����I�uH�=�.1��ϯ����H�=��.1�迯��H�%8H�%H���H�=��.1�蘯���%I9�|1�H�=�0.1��z�������H�3H�=��.1��d�����1�H�=��.�T�����H�=+.1��D����%H�=��.1��-���H��H�=S�.1�����H��H�=r�.1�����H�3H�=A�.1����I�7H�=0�.1����H�%H��H�=��.1�����?d���H��舓���%�@�@�%�%�%H�=K�.1�����%�%�%�%�%�%H�=+�.1��<���H�=�.1��^���f|f�;H�=��.1��D���8�%H�
��.H��/��H�=��.�G���H�
8/H��/��H�=��.�(���H�
��.H��/��H�=j�.�	����%H�=��.1�蒭��H�=�/1�脭��H�=�-1��v���H�4$H���ڂ��H�t$H���͂��H���ł��H�4$H��蹂��H�4$H��譂��H�t$(H��蠂��H�t$(H��蓂��H�t$(H��膂��H�t$(H���y�����PXH�5�Q/PH��eH�81����蕻��H�4$H���I���H��H���>���H��H���3����n����i����d�����PXH�
�P/H�5XU/PH��H��1H��HI�H�/�eH�81����H���U��H���M��H���E��H��H���ʁ��H�t$H��轁��H�4$H��豁��H�=Ub/1��3���H�=�c/1��%������H�%��H�=��-1�����H��H�=�01����L��H�=�-1����H�=��01��֫��H�=W�-1��ȫ��D��H�=��01�跫��������H�=.�-1�蟫���z��H�%H�=11�����RwH�=v11�����?wH�=�11�����,w��鞀H�%H�%H�%H�%H�= 11�����H�=11�����H�=��-1��-����e�H�}�����H�=
11������QH�%���H�=��11�迪��H�%�H�|$H�%�H�=_�11�蘪��H�=Q�11�芪��H�% H�%��Q��H�=*�11��c���H�% H�=�11��K���H�=�11��=���H�=��11��/���H�=��11��!���H�=��11�����H�=��11�����H�% H�=��11�����%Q�%QH�=��11��˩���������l����g����b����]�����H��1�H�=��0�ȿ��H�%��H�5�11�1������PH�5�111���߼��1�Z��֒���ђ��H�=�511��s����X�H��H�=�01��]����H�����H�=�u11��B���H���H�=~v11��/���YH���1[�H�=<q11�]�����%H�=z11�E1�����lH�\�fH�5=z1��1��&����oH�=Š11�蓨��H�=T�11�腨��H�=T�11��w���H�=��11��i���H�=8�11��[���H�=*�11��M����ȑ��H�A�1H�<$H��H��H�t$H��H�D$1�H�D$
�H�T$ ��H�D$8	H��H��H��H�D$(H�ޏ1H�D$0�����?����Z���H�=#�11��̧��H�=Ր11�辧��H�=��11�谧�����H�5ܗ1H�=��01��ƽ����H�=J�11�胧���^��PXH�
P�1H��1�EH�=k3P�����������H�56�1�1�迺���FH��H��H�=M�-1��&������������H��H��H�=*�11��3���L���k��H��H����~����H�==�11��ݦ��H�=/�11��Ϧ�����������L�����PXPH�W�'
sH�WH�=P�11�虦��H�wH�=ȵ11�臦��H�w��H��H�����H��H�����H��H�����H��L�����H�=��11��G���H�%H�%�H�=�11��%���H�=�11�����H�=x�11��	����%����H�=/�11����H�=�11��ߥ��H�%��%H�=��11�辥��H�T$H�=��11�諥��H�=��11�蝥��H�D$H�@(H���j��H�=C�11��|����@�@H�4$H�=��11��`���H�%�������H���$��H�=��11��6���H�=7�11��(���H�=)�11������������H�=��11�����L��H�=h�11��!�����/"L��H�=r�11������?"��H�=��11��Ƥ��H�=��11�踤��H��H�=��11�觤��H��H�=u�11�薤��H�=��11�舤��H�=��11��z���H�=&�11��l���H�% H�% �3��H�% �%H������%H�=�11��!���H�%(H�=��11��	���H�=��11����H�=��11����H�=��11��ߣ��H�=��11��ѣ��H�=}�11��ã��H�%H�%H�=@�11�衣��H�=b�11�蓣����H�H��H���Y��L���Q��H�%�B��H�=�11��T���H�% H�=��11��<���H�=��11��.���H�=�11�� ����%����H������H���������������%�%�%�%�%�%�%�%H�%�%�%H�=�21�D�M�D�E�L�]�L�U�覸��L�U�L�]�D�E�D�M����#H� t>H��H�JH�H�=v21�D�M�D�E�L�]�L�U��_���L�U�L�]�D�E�D�M��}�#H�R �#L��1�L�L$H�5�2�t���L�L$I�����#I� ��I��M�)I�yI�����#@�����T�����I�E ��I�u1�H�
��1��=x����.�#A��t/�#A���_���I�UH�Ѓ�H���K����� ME��?���I�UH�Ѓ�H��u��� t��.��M�I �U����d����k���I�u�v���H�=��11�����H�=I21����H�=c21�H�T$H�4$����H�4$H�T$�$H�=��11��Ǡ��I�EH�=l�1H)�H)�1�H��H��觠��H�=`�11�虠��H��H�=o21�舠��H�=�11�誶���$�P��H�%�%H�=�21��O���H�=��11��A���H�����H�=��11��+�������%�%H�=m21������%��������H�=E�11����H�%�%�����H�=21�輟��H�=%21�讟����H�H����H�H��H���b����H�H��H�%H�=�11��X���H�%H���&��H�
��1H���1�H�=��1�w��H�=�21�����H�����%H�%H�=�	21����%H�=�	21��ٞ��H�%H�%�%H�=-21�讞��H�=G21�蠞��H�=921�蒞��H�=+21�脞��H�=M21��v���H�=�21��h�����x���x���x���x��H�=��:1��F���fDH�=I�eH�B�eH9�tH��eH��t	�����H�=�eH�5�eH)�H��H��H��?H�H�tH�U�eH��t��fD�����=�eu+UH�=r�eH��tH�=�yd�	����d�����e]������w����UH��SH��H��dH�%(H�E�1��P���H��tH�U�dH3%(uTH�]����q���H��H��H��1�H���H��H��H��H�JH��H���H)�H���H��H9�tH��H��$���蓯��%�t	H)�H�L�H�|$H����%��H��H�=��-H��1��њ���U�H��AVAUATI��SH��0dH�%(H�E�1����H���H�5��-H��H���j���H��t=H;��et4H�u�H��������uLH���$���H�5��-L��H�=s�-1��L���@H�U�dH3%(H����H�e�[A\A]A^]�DL�m�M��t�L���?���H��H�PH��H��H%�H)�H���H��H9�tH��H��$���f.���u8L�t$L��I���L������H���l���L��L��1�H�=��-蘙���H)�H�L��蠕��H������������SH��H��tH��[�:���f.��薸��H��[H������f.���UH��AUATSH��H��dH�%(H�E�1��8���I�������H��1�1���H��u�H��H�˄�tH�K<.t�</�H��HD�HDׄ�u�H��H��HD�H)�H�BH��H%�H)�H���H��H9�tH��H��$�H9�u��udH�\$L�jH����Init�C_H��u8A�B�+H��L�������L��H�u�dH34%(usH�e�[A\A]]�H�{�_����DH)�H�L��DH��H9�tH��H��$�H9�u�H��H�L$A�H�\$H����Init�C_�i����N���f.�@��H����~u��H��H����t��f���H����^u��H��H���B���f���H����H��H���NJ�����H��� tH����H��H����f�H�GH��H���Ð��H���������uH�1�H��f.���H��� t$H����?t	H��D��f.�H�~t�H�v H�Ð���f.���H��� t$H����tH��H��H���fD��f�H�FH��t�H�v H��H���f.����f.�SH��H� uH�{ [驻��f�蛔��H�{ [鑻���UH��H��SH)�Hc�H��H��H9�}6M)�L��I)�L��H��I)�H��=J��u+I�J��H��H��肣��H��H��H�EH)�H�u H��[]�L�ο�l���ff.����UH��SH��H���edH�%(H�D$1�f�;uFfH�=nzeffH�f����� H��H�8�l��H�L$dH3%(u,H��[]�f.�H�|$�`#H�/�1H��HD�萩��ATUSH��dH�%(H�D$1�H���
H��������H��H9���H�-ЈeI��f�}��H�,�H���2��uhfH�=�yeffH蠐���(�L��H�8��k���H��H�XH�����H�EH�E H�L$dH3%(H��uVH��[]A\��fH�=@yeffH�8���H�� L��H�8�k��H���H�|$�_#H��1H��HD�>����}���H�V}eH�5_�-H�81����H�>}eH�5'�-H�81��ݱ��ff.�f���SH������H�����H��L��[1�1�H���d���@����f.����f.���AVAUATUS�����H��I���n�����������H�����I�I�����I�n�� ��H��H����H��~rH�����L�`�H��t_1��,f.�H��H����H9�}QH��H�<�H���a��I��� u�I;^}3I�F ��H�EH���q����tgH�H���h���[�]A\A]A^ÐL��� �d���I�N�e���M���r���軣��H��賴��H���L��[L��]H��A\A]A^����H������뒺1�辑��ff.���������H��� tH��H�ǃ�H�D?�@H�@H�H�y��x�������f.�H�ATI��UH��SH����tcH�H�;H��% tCH��1�H����H9�~)H��H�yI�$H�@H�x6H�D?H�E�[]A\�H9K~�H�[ ��@H������H����Ӫ���Ȑ��H�WH��H��H�r H�V�H��(�Q��������f.���H�WH��H��H�r H�V�H�� �!����ATI��UH��SH���ޯ�����u[]A\�L��H��赩���[]A\�f.�AWAVAUATUS1�H��H��~MH�GH� ��I��H�0H��H��I��I��L�}1��]���L��H�E uH�E H��H��t��tH��H��[]A\A]A^A_�@H���H��u�H��~I��tL��L��H�T$����H�T$H��L��H�����I9�u��fDH�G �]����AVI��AUATUH��SH��H��dH�%(H�D$1�I���MfDH����H9�}TI�FL�,غH��L�ᾇL�,$�s���L��H��H���r����~H�,$H��I��� u�I;^}I�F �DH�L$dH3%(H��u
H��[]A\A]A^�蛣��ff.�AVI��AUATUH��SH��H��dH�%(H�D$1�I���MfDH����H9�}TI�FL�,غH��L�ᾇL�,$賛��L��H��H����q����yH�,$H��I��� u�I;^}I�F �DH�L$dH3%(H��u
H��[]A\A]A^��ۢ��ff.���AUI��ATL�gUH��S1�H���(@H����H9�}DL��H�<�H���z��H��u H��I�UH��% u�I;]}
I�E ��f��H��[]A\A]�H��1�[]A\A]������TAUH�WATUSH��H�I��A�� uH�W H�NH� uH�N M����H�GI��I��H�n1�H��y���I�UH����H�с� ��H����H9���H9���I�T$H��uI�T$ H�4�H�H����H��H�H��H��H��H9�~{H�:H�1H9�t���x��H��t:I�$H�Ɓ� �k���I�UI�D$H�с� �m���I�UH9��p���1�H��[]A\A]ÐH��������@I�M �x����H���[]A\A]ø�f.���ATI��USH���=���H�5��H�����H��M��~>N�$��H�H��H��H���ޒ��H��L9�tH�;讱���u�H���ҟ��H����DH���0���H��xH��������?[]H!�A\H�D�@H��[]H	�A\H�D�f���H��� tH��H�wH�ǃ��1����H�w H��#�����H9���H��tH���uH�H�у�H��t�fD1��DH�I��A�� tyH����I��A�� tVH����H9�u�H�GM��uH�G H�VM��tTH9�tH��H��H��H�= 骋��f.���f.�H�V�f.�H�O�f.�H�V �f.�AUI��ATL�gUH��S1�H���+�H����H9�}TL��H��H�4��a����u,H��I�UH��% u�I;]}I�E H��H�4��ya����tԸH��[]A\A]�DH��1�[]A\A]�AUI��ATL�fUH��S1�H���*�H����H9�}4L��H�4�H��H��H����
I�E�� u�I;]}I�E ��f�H��H��[]A\A]�f���AVAUI��ATUH��SH��L�"dH�%(H�D$1�A�� �*I��A������M���������c������˼��1�E1�I���M�H����I9���I�EJ��H�}L����H�$���H�����tH���}�I��I�E�� u�M;u}gI�E ���������M��~FI�M1�1�I�u�� �f��H��L9�t$H��H��uI�U H�����t�H��t��1�H�L$dH3%(H����H��[]A\A]A^�f.�L�b�����1�E1�I�m�3DH����I9�}�H��J�<�蘹��H�����t
H��u��I��I�E�� u�M;e�q���I�E �Ⱥ1��]����H������AUATUH��SH��H��L�"dH�%(H�D$1�A�� ��I��A�����KM��t~����艂��������E1�I���Gf�H����I9�}LH�CJ��H�}L����H�$�"���H�������I��H��� u�L;k}H�C �fD�H�L$dH3%(��H��[]A\A]�@L�b�C�����ہ����u?M��~�H�1�H�s�� �
�H��L9�t�H��H��uH�S H�����t�1��D1�L�c�(H����H9��h���L��H�<����H�����u�H��H��� u�H;k�>���H�C �Ӻ1�贅��蟚��ff.�@��AUATUH��SH��H��L�"dH�%(H�D$1�A�� ��I��A�����KM��t~�����ـ�����g���E1�I���Gf�H����I9�}LH�CJ��H�}L����H�$�r���H�������I��H��� u�L;k}H�C �fD�H�L$dH3%(��H��[]A\A]�@L�b�C�����+�����u?M��~�H�1�H�s�� �
�H��L9�t�H��H��uH�S H�����u�1��D1�L�c�(H����H9��h���L��H�<��4���H�����t�H��H��� u�H;k�>���H�C �Ӻ1��������ff.�@��AUATUH��SH��H��L�"dH�%(H�D$1�A�� ��I��A�����[M��t~�����)�����ʷ��E1�I���Gf�H����I9�}LH�CJ��H�}L����H�$���H�������I��H��� u�L;k}H�C �fD1�H�L$dH3%(��H��[]A\A]��L�b�C�����{~����uGM��~�H�1�H�s�� �
�H��L9�t�H��H��uH�S H�����t�����1�L�c�0�H����H9��X���L��H�<��t���H�����u�H��H��� u�H;k�.���H�C �Ӻ1��D����/���ff.�@��AVAUATUS���8I�Յ�tdH�.�}�����P���E1�1�M�e�4f�H����H9���L��H�<�H���1n��H��I��H��I�E�� u�I;]}^I�E ���;}��E1�1�I�]��u.�|@H����H9�}4H��H�<�耳��H��H��I��H��I�E�� u�I;m}	I�E ��H�@L�x[K�D6]A\A]A^�L��[]A\A]A^�8����I�E�� tH��H�ǃ�[H�D?]A\A]A^��H�@I�}H�x��ֺ1��׀�����AVAUI��ATUSH��� ��H������������H�.�%|�������M�e��H��L���I9�IL�s�H��t@L��I�E uI�E J�<�H���l��H����I�E�� u�I�EL��I9�~�D�[]A\A]A^�f.�H�Z���^����{������H�k�H��t�I�EM�e�;@L��H�<��Ա��H�����ulI�E�� t+H��H����H9�HN�H�k�H��t��� u�I�E �fDI�]��f�H��������?H�x[K�D6]A\A]A^�L��[]A\A]A^�s���H��������?H�x8H�D-�$�������H����[L��]E1�A\1�A]1�H��A^�Y���H��뤺1�������AUI��ATUSH���������'H�.�fz�����@���1�M�e�*fDH����H9�}4L��H�<�H���k��H��u0H��I�E�� u�I;]}
I�E ���H���[]A\A]�H�@H�xiH��H�D[]A\A]Ð��y����tg1�I�m�+�H����H9�}�H��H�<�� ���H�����u�H��I�E�� u�I;]�����I�E ��H��H��[]A\A]���fD蛏��H��蓠��H��L��E1�[1�]1�A\H��A]����1��}��ff.���AVAUATUS����~gI��H�.��uS�y��A���A��@����H��H�I�$H�с� H��x@H��uSI9D$~[M�d$ �f.����������}��fDH��tKH��H����H�x@H��H����H9�IE��u4��tm[L��]A\A]A^�H�������a���ID$�j���E��t�[H��]A\A]A^頮��I��M�,�[]A\L��A]A^�L�n�x����A���������H��t:H����I��L���H�5d�-H��H��IH�H)�H��H�%eeH�81�賚��M�D$��ff.����USH��H��� ��H����H��H��t+H��� tcH����?tH�>@����H��H��~kH�DH��t$H�l�H)�H�\H��H��H����vH9�u�H��[]�DH�~~�H�v H�>@��u��:f.�H�_�d�������H����[]H�B�f.��{���H���c���H��H)�H9�HN��H��xY�tRH�D6H��tGH�T6�H)�ATL�d6UH�jSH�ZfDH��H���
vH��H)�H��H���˧L9�u�[]A\Ð�ff.�@��SH��� t[H����H��H� t H��H�>@��t H�H��t%H�t�[�@���H�v H�>@��u�螎��H��H��u۸[��H�_�f���SH��� tSH����H��H� t H��H�>@��t H��H�[�����H�v H�>@��u��.���H��[H�����f�H�_�f.���SH��� t[H����H��H� tUH��H�>@��tUH�H��xZH��~H��H��[�*]��f.�1�H���[��H�B�DH�_H� u�H�v H�>@��u�艍��H��H��y��[�f.���US�H��H��tH��� ��H�����?tH��H��� ��H����H��txH����H������H�H��~ZH���"�L�D�I��������H�I�H��I��H��H��1�H�@H�H�I9�H�rbI��H��[]H�D	�f�H���[]�@H�~�U���H�v H��I���f�H�W�J����H���h���H���Q���H��H��[]�b�f���-H��[]�J��ff.�f�AVI��AUATL�fUH��S1��?f.�H����H9�}\L��L�,�H��H��L��L���h�
��uM��uH��I��� u�I;^}%I�F ���A��u�L��H���Oy����D[]A\A]A^�ff.�@��H9���H��t@��uH�H�ƒ�H��tAUH��SH��H��H���p�����uH��1�[]�H��H��H��[]�Oc���H�I��A�� tyH����H���� tWH����H9�u3H�GM��uH�G H�VH��tUH9�t H��H��H��H�=0��w��1��D��f.�H�F�f.�H�W�f.�H�V �f.���SH��H���@X��H��H����Z��[��H�H�Ѓ���PXH�5�-H��H�<ZeH�81��r���f�SH��觇��H��蟘��H��L�u�[1�1�H���������ATUH��S�@q����tL1�L�e� @H����H9�},L��H�<�H��脧��H�E�� u�H;]}
H�E ���H��[]A\�[H��]A\�d���@��ATI��US��p������I�$�� uI�D$H�X�I�l$H��u&�Xf.�H��H����H9�HO�H�X�H��t4�� H��uI�D$ H�<����I�$�� u�I�D$H9�HO�H�X�H��u�L��[]A\�f.�H��H�����w����[L��]A\���@��ATUH��S�p����tdI�@1��(fDH����H9�}(H��L�x,H�|�J���H��H�E�� u�H�EH9�|�H��[]A\�@H���0���H����[H��]A\����ff.��PXH�5�-H��H��]eH�81��b���f���H��� t$H����H��t!H��1�H�=���]���H�GH��u߾H�=Ǣ-�F��fDSH��H����H��u	H�{u[�H�YeH�5��-H�81��ޑ���I���f���ATUSH�� dH�%(H�D$1�H�H�xuVH�/L�&�H��H��H�,$L�d$�k��H��L��H���V��H�sH�;���_�����H�L$dH3%(uH�� []A\����躇��f.���H��XeH9uXAT1�US��~H��tH�H���HH�H����H��H������I���h���1�H��ޅ�L�����T���L��[]A\�@鳛��SH������H�����H��E1�1�1�H��[�l���ff.����H����������AVAUATUH���SL�m1��)����H�5	�0H���U���I���CH����H9�}dL��H�<��z��I��H��~@�H�5�.L���<x��L��L��H���
���H�E�� u�H;]}H�E ��H��L���Պ����L��H�5��.��w��[L��]A\A]A^þH�=|�-�D��ff.�@��AWAVAUATA��USH��(dH�%(H�D$1����yI��A���tL�6�ml����I�EH���� u|I�UH��tCA��u}M��tA��uI���H��
tfH��t`E1�H����H����I9��4@H�|$dH3<%(L����H��([]A\A]A^A_�f.�H��H�����y����1�E1�H�$$�� tGH����I9���I�EJ����uA��tVH�@H�H�H��\I�EI���� u�M;}�]I�E J����t�H��H�T$�ġ��H�T$H���u�H��t��uH���H��
�%H���cH��uH�<$$u.M��t8L���襮I���&L��H�|蓮H�<$$I��tH�<$L���I��H�؃�H��t"H���-���$H���H���L���4x���~-,�-f��%�-f(�H�؃�H�����CM�ef.�zLf.���f(�f(�fT�fT�f.���f.�w"f/�f(��X��I�\��X��X�f(�I�EI���� ��H����I9���L��J������H�؃�H���U���H����H�0fH~�H9�t|fH~�H��<�������I��H��uUDH�L$L����+H�\$I���X{��I��I�EH���� �6���M;}�F���I�E �qDf(��_@��I���f.�M;}��I�E J�����%���H���|$�$�s����|$�$H���%u�-�~-u�-�����t�������H�f��H*��N����H���H���$�����u�H��
�YH�������H���|$�$�v���$�|$�~-�-�%�-��@f.���fP�fP�f(ȃ���9������
��-�����H��蠆��L��H���%]��1�I�����L��H��H�T$�]��H�T$I���g����\��X�f(��X����f(�����H�<$H��$t^H��H�T$�ɎH�T$H�$����H��f�H9��
���H��H��H��?H)�H	�H��H�$�~$���fDH�$�����H���|$�$襂���$�|$�~-��-�%��-���DH��uKH�<$$u_E�����L���莪I������fDI�EJ�����8���H���8���H���(���L��H�|�S�H�<$$I�������H�<$L��蹍I������H��I��I��I��M�����f�H�0�X�fH~�H9�t'fH~�H��<������t$I��H���!���f(��H=��I������H��I��I��I��M������1��mj���X��������4AUI��ATI��U1�SH�_H���f�H����H9���I�$H�ց� ��H����H����H����H9���H����I�t$H��H�4�H��tH��H��uI�E H�<�bA����t~H��I�EH���� �g���I�EH9��j���H���[]A\A]�f.�I�T$H���e�����H��t�H��x�H���z����I�t$ �Y���fDH��1�[]A\A]���f.�AUI��ATI��US1�H���J@H����H9�}R�H��tH��xI�EH��uI�E H�,�H��H�����H��L��H���B�
I�EH�� u�I�EH9�|�H��L��[]A\A]�ff.����AVAUATUSH��dH�%(H�D$1�����H�I��I���� �I�H�O�� �H��H����H9�HO�H����E1�H����H�����H��tI9�}I�UH��uI�U J�<�H���� ��H�����H��tL9�~I�FH��uI�F J��H�$H�����
u��H��u4I��I9�t&I�I�UH�с� �h���I�U�f�����$H�t$dH34%(uDH��[]A\A]A^�fDH��I�H����H��� ��I�^��fDI�F�<����{��f.���AV��H�>�-AUATUSH��H����HH�;I��I��H���� ��H��H����H����I�M��I��A�� ��I�VH����H��
H����H9�~I��L��H��L��M��H����I�x�$l
H��M�e1�H�@H�����H���/fDH����H9�}4L��H�4�1�H���sx
����H��I�E�� u�I;]}I�E ��f�[1�]A\A]A^�DH�C�!����H��H�����.����H�����[���@1�L�c�/�H����H9�}�L��H�4�L���U��H��u H�;H���� u�H;k�w���H�C �А[�]A\A]A^�f���H��uH���@��u�H�H�ƒ�H��t��u�USH��H���0tH��H��[]��N���H�oH;o}�H� �H���O��H�kH�C ��ff.�H�GH��t�t+H��u�D@��u�H���H��t6H�'���fDH�H�у�H��tƀ�u�H�hH��t����ff.�@H�SH����0tT��u?H��t��tH%���H�[�f.�H��H�ƒ��� H��HE�H%���H�[Ð�;���H��fD���H��fDH��t#H���tSH��u~H�4%H��u=�e��@H��tS@��uxH�H�ƒ�H��ti��H�wH�H��tH���H��t��H�H�у�H��t���u�H�F�DH�%�@��uH�H�ƒ�H��u�H�w�H�G�ff.��ATUH��SH���b��H��H��H9���H��� u(H�{ �H����M��H�C H�k[]A\�f.�H���H���I��詉��L��H����H��t'��u"H�H�у�H��tH��_��H�f�H�C L�c�fDH� u�H�CL�c H9�HO�H��H��H��=��H��u~L���&���H��u!H�%H�� H��u"H�k�3���f�H�H���u`��H��tT�� H%���H��H	�H�+����@H�s��sG���#����S�����@H�{L���d����q����H�� �z���f.�H�KH���H�|�H�|�H�xH��H��H)�H)����H����H���Z��f�UH��SH��H��H��� ut�uUH�wH��H��?H�H�H���H��������HL�H)�H9�
H��H��?H�H�H��H�4(H��[]����fDH�wH��H��?H�H��D�_��H��H���f�SH��H�� dH�%(H�D$1�H��uH����r��@��u�H�H�Ѓ�H��t��u�H��tHH��H�N2H�=�YH�$H�D$H��H�D$�Y5��H�L$dH3%(uH�� [���t�H���X����u��ff.����SH���[��H�߅�t�7���H��[�f�[��f.���SH��H��uH���r��@��u�H�H�ƒ�H��t��u�H������u_�� t:H%���H��H��i^��H��H=����t
� H���;���H��[�fDH�C�u�H�{ �����H���h���H�H��H�ƒ��� H��HE�H%���H�H��[����c���H���_W��H��S������ATSH��H��H��t@��tH���q���H�H�ƒ�H��t��u�H���z�� ��H����H�����Z��H�;������ �dH�����8d
H��H�@H���E���I��I�4$�����H�H����H��% ��H��H����H9�tyH�у�H���4������+���H���HH����H����H�����H�����H��L��H�5G�rT��H��H��[A\��H�CH������H���[A\�D�� ��H�����Hc
H��H�@H������I��I�4$�������H�I�t$(H��% ����H�K�������}���H���U��H��m����H�{����H�{�z����H�C���H��H�t$����H�H�t$H�ƒ�H�������� H������������H��H�t$�T��H�H�t$H��% ���D��AWAVAUATUSH��(dH�%(H�D$1����I�ԅ�t
H�6H����I�$�� ��I�l$�W������I�$1�$I���Tf�H��H����H9��I�T$L�,�H��$tOL���L�,$H�\$��T��H��L��H���Z?����I�$x#H���� u�I;l$��I�T$ L�,�H��$u�L����f.�H����H���W�����W���H���I�$I�T$H���� ��H�H��to����H�5_�f�F<��H���\I�L$H��~GH�B��t@H9�HO�H��H9�t&H��u�H��L�����H����H��$tzH�L$dH3%(H����H��([]A\A]A^A_�@I�T$ �N���fDA�1�1�L���.s	H���f�H��u+H�ھL�����H���fD��|���fDH�ރ���H�ڃ�H��tH��t�H��u�H���H��u�H�;�f�B<u�H���KI��I��A��I������A�M�t$�� t^L��J�,�H���H��t$H����@����H�E��H����H��H���uv��HO�I��M9������I�$�� u�I�D$ �H���H���.���H�=�CeH�H����H�5�CeH9����H�h�f�B<����H����I��I��A��I���F���A�I�l$�� ttH��N�4�M��tA��uI���H��t}f�H��L��L�����H������f.�H����H�����M�|$���H9St&H�ڃ�H���s����z���I�D$ �M�|$�a���H���f�B<�<����1���H��BeI�NH9�q���H��L���&u����IO�I��M9��i���I�$�%����1��.X���m��f���ATUSH��dH�%(H�D$1�H�H�x��H�6H�I��H�4$��udH����H����H���6e��H�$H��H���G;��I�t$I�<$����H�L$dH3%(���EH��[]A\��@��t*H���f�@<u1�H9�@���H9�O��DH�ڃ�uH���H��tTH�؃�H��t"H���L���H���C���H���H���3���H�'�f�@<�"���H����s���G���fDH�	AeH����H�H��ucH�=TAeH9��������@������H���H���e���H9F�[���H���f�@<�J���H���Ns���������H9Cu��tH�؃�H���8����C����<��7k��@�������ff.���AWAVAUATUSH��(dH�%(H�D$1����I�ԅ�t
H�6H����I�$�� ��I�l$�jQ������I�$1�$I���Zf�H��H����H9��
I�T$L�,�H��$t/L���L�,$H�\$�xN��H��L��H���
9����I�$I��H��L��� u�I;l$��I�T$ 멐H����H����P�����g���H���I�$I�T$H���� ��H�H��to����H�5�f�F<��H���\I�L$H��~GH�B��t@H9�HL�H��H9�t&H��u�H��L���
��H����H��$tzH�L$dH3%(H����H��([]A\A]A^A_�@I�T$ �N���fDA��1�L����l	H���fDH��u+H�ھL�����H���fD��|���fDH�ރ���H�ڃ�H��tH��t�H��u�H���H��u�H���f�B<u�H���KI��I��A��I������A�M�t$�� t^L��J�,�H���H��t$H����@����H�E��H����H��H���5p��HH�I��M9������I�$�� u�I�D$ �H���H���.���H�=S=eH�H����H�5�=eH9����H�(�f�B<����H����I��I��A��I���F���A�I�l$�� ttH��N�4�M��tA��uI���H��t}f�H��L��L�����H������f.�H����H�����M�|$���H9St&H�ڃ�H���s����z���I�D$ �M�|$�a���H�d�f�B<�<����1���H�V<eI�NH9�q���H��L����n����IH�I��M9��i���I�$�%����1���Q����f��f���H�1�H��uÐH�у�H��t����H	����@��H��� tH����H���@H������¸(��tH�FH�����H� tH�G�fDH�G ����ff.�AWI��AVI��AUATM��UH��SH��H��H��~EL���%H���m4��L��J��H��=��H��usH��H��[]A\A]A^A_��%��D�34��M��~�1�E1�1��I�4�H�H�4�H��t@��uL��H�D$�}R��H�D$A��Ic�H��I9����H�<�L������|���L����I��f���ATI��UHc�H��SH��H��裻����~M��u
H��[]A\ÐI��H��H��L��1�H�D$����H�D$H��� tH����H��H	�H�(H��[]A\ÐH�hH��[]A\�AUI��ATI��UH��SH��H���%3��J��H��t1�f.�H��H��H9�u�H��t��tH��L��[]A\A]�$���H��L���UQ������H��t1�DH��H��H9�u��ff.�ATI��UH��SH���2��H��J�<��6��H��[]A\�$��fDAWAVAUATUSH��H��H�����H��uH��H��[]A\A]A^A_�@H�ƒ�H��t�H��H�ƒ���H	�u�� ��H�oL�kfH�=4effH�K���(1�E1��H�8�P&��I��H��tI�ƨ��H� ��H�C I�F I��� upI�nH��L��L��L)����H��L��L���=��:����H�_�)������L��L�+H�h�H��A�� �H���I��A���?���fDH��H%���H��H	�I��|����H�H�ƒ�H���@���H
I�$�1���fD�H���kt��H�KI��I�F H� uH�K L��M��1�L���#���H�H�ƒ�H��t	H%�_��H�L�kL�{ ���ff.�AUI��ATI��UH��SH��H��fH�=�2effH�zI��H�޹(�H�8��$��H��H����K��H��H��H9�w}H��uHI�E tbI��K�L�I��H��H��1�H���q���H�H%���H	�H��H�+H��[]A\A]�@��u�H�H�ƒ�H��t��� H�I�E u�M�m �fDL���H���H����H�%H�΁� I�U�� ��I��H��L�k ��H����H����H��H	�H�H��H��I���	�H�Lc �� t}H%���H��H	�H��H�+H��[]A\A]��H���u8H�ʃ�H��t,H��_��H�I�U�� taI��H��L�k ��H�S�@H�΁� �<���f.�H�kH��H��[]A\A]�fDI�U H�S I�UH���*���믐I�U H�S I�U�f�H��� t@H����H9�,H��x5H)�ҺH��HE�H��0eH�0�����H����H�G�PH��4eH�5!z-H�81��Ii��f�USH����wH�M��H�6H�Ӊ�@��tH����H��H�[]�^���fDH���^��H����H��H��[]�=����1��aJ�����SH�GH��H�@ H�p�@��tH��H��[����DH���h^��H�ߺ[H��������SH�GH��H�@ H�p�@��tH��H�1�[����H���^��H��1�[H�����f.���ATUSH��H��uH����[���@��u�H�H�Ѓ�H��t��u�H��H���1H�ﹱ�H���-��H��H9���H�����H�E�� ��H����I��H���
H��H�UH��H��L9�|T�� �;H��H�M��I��1�H�����H�E�� �H����H�H��H����H	�H�H��[]A\��� ��H�����H��I���o��H�H�у�H����H��_��H�C H�L�cL�cH�MH�E uH�M I��L��1�H�������L�e�����������H���@�����f�H������H�H�у�H��tyH��_��H�H�U H�MH�S H�KH��H���������H�E����H�M H�U����H�C �� �4���L��H����H��H	�H�����f�H�M H�K H�M�� t�H����H��H	�H��z���f�USH��H��H��uH���Y��f.�@��u�H�H�ƒ�H��t��u�H��H���!������ uH�{�8H���h*��H�3�� �H����H)�H��H��H��=�H�4�H����T��H������H��� ��H��H����H����H)�H��H	�H�H��[]�DH�SH��t7��u2H�
H�΃�H��t#��uH�zuH��1�H������H��H��HS �� t'H��H%���H����H)�H��H	�H�H��[]�H)kH��[]�D������H���W>��H������H�s����H��1�H�����H�����H��k������>�����H��� uDSH�_ H�wH��u>H��H%���H��H	�H��H�H��H��=uHH��u5H��[�Dk��@��@��u�H��H�ƒ��� H��HE��@H��H����s��뽿�P>����H�7����AUATUSH���� ��L�gL��H��L�o��C��H��H��L9���H�s H����H��H��H��=�ZH���0M��t A��uI�EH�ƒ�H��t
��uI�mH�I��H%���I	�L�#�mfDH����H��I���f���fD��M�����H���k��H��I��H��H��=��H����H���9��L�cL�k H��H��[]A\A]��������H�H�ƒ�H��t���H�H�ƒ�H������ H�����A���_���I�EH�ƒ�H���K������B���I�}�7���H���� �H����H��H�L9�����H�H�s�� uH�s I�}H��uI�} H)�H��I��H��t,��u$H�у�H��t���H�I�E ��I�} H��H�K H��H�C�J&��H��H��H��=��J�4 H����P��H�����I�EH�ƒ�H�������H�€� I�U�������I�m���H�s L���$q���n����H�{�q������f.�I�E���H���z;��H���m;��H���`;��I�}�*������SH��H��uH���KT��@��u�H�H�Ѓ�H��t��u�H��tH��[������t�H���+:����f�USH��H��H�H�� ��H��H����H��������H�,H)�H9��0��tdH���T@��H��H��H9�~
H�CH���"H���2X��H�H�� H�������H�CH9���H��H��[]�H��tCH����H��t7H��H�ƃ���H	�u#H��u���t�H���@9��H�H�� �f�H���S���H�O�����H���W��H��� �6��"H�CH��H��H)�H9��U���f.�H��H������;���H�C�)����H���(?��H��H���
��������H�H�у�H�������������H�x�����H�K �� �|H�pH��H)��H��H�H9��.���H�������������H�H�ʃ�H����������H����������{���H��H�D$��7��H�D$�d���fDH+H H�PH��H��H�C����H���>>��H��H������H�2(eH��H�5�n-H�81��]��fD��AVAUI��ATUSH�/H���� tsH����I��H���<���H��I���Q"��L�,�M��tA��t2H��I������H��� t>I��H%���L	�H�H��[]A\A]A^�f�L��L���@���L�gL����L�cH��[]A\A]A^���H��H���`n��1�H���f�AUATI��UH��S1�H���P@H����H9�}XA�H��tH��xH�EH��uH�E L�,�L��L�����H��uL��L����m��H��H�EH�� u�H�EH9�|�H��[]A\A]�f�AVA��AUATUSH�/H���� ��H����H��Mc��T��H�M�d-�� ���uiH�CH��H��H)�L9�~iI��@~H��� ��H��� ��H��H��H��=��J�<�H���[K��H���3��H��[]A\A]A^��H�CH��H��H)�L9��L��H������H�o�K����H����;��H��H���V����uAL�cH����H�sH� uH�s I��M��D��H��H��[]A\A]A^����L�c�H���5��ff.�f���AU��I��ATUSH��H��8H�H�ǁ� ������I��Lc�I��A��K�,!���H�SH�2I��A�� ��I��I��A��H����I��A��I����I�Ӂ�A��I	���H�z��L9���H�sH��uH�s M���YH�R H���DH�ǃ�H���4I��I��A��A��M	��H���(H��谥��I���XH����H�ƒ�H����H��H������H	���H��uF��tAH���t3���7f���H���6���I��L��L��1�H����H��� t{H%���H��H	�H�+H��8H��[]A\A]�D���h���L�JLc�H��������L)�K�,!I9��q���H��#eH��H�5j-H�81��Y��@L�B�t����H�kH��8H��[]A\A]�fDH���L��H������������H�߉L$,H�T$ H�t$L�D$L�L$�w2���L$,H�T$ H�t$L�D$L�L$���f.�UH��SH��H���P��H��� twH��H����H9�}XH��H%���H�H��H	�H��� tZH���8��H��H��H9�}(H��� tPH���h8��H��H=����Hf�H��[]�f�H;k}�H�kH�u4H�CH9�~�H��t)H�{����t�H��H��H��[]����@H�C��f�H�{����fDAWI��AVAUATUSH��H�$H����H�H��I��M��H��% �H�_M���I9�	K�<H9�~I��M)�H���H�EH�$H�����H�|$H9�rH��H��H)�H��H��H9�HC�H�D$H��������L)�I9���I9��vL��H��O�4,L)��w���L��H��H��H)�I�����M��~<H�|$�tH�EH�E uH�E H�L$H��H�$H�$M��L��L��H����H�E�� �}H%���I��I	�L�uH��[]A\A]A^A_�DH����M�����L��H���I������@H�E ����H��M�tL)�M)�H9���H���9N��H�E�� �,��H�EL9��M9�t^L)�H�����L)�H��H��H��=��K�L%M�H�<�J�4��E��H������H�E�� ��H%���I��I	�L�uM������H�|$���H�EH�E uH�E H�t$H��H�$H�����L��J��H��=��H�4$J�<��D��H��H��[]A\A]A^A_�]��DL�uH��[]A\A]A^A_�DH�EL9������L��H���������H���4��H��H������L�u�.����H����N���H��eH�5ce-H�81��ST��L��H��eH�56e-H�81��8T��L����H��eH��L��H�5�i-H��H�81��T��L���.��H�޿�.���SH��H��H�� L�H�t$dH�%(H�D$1�A�� tdI��H��A��tH�3�� u;H�s1�H������H�D$H�D$H�D$H��H�T$dH3%(u5H�� [�DH������L�FM��~�H�N H�3�� t����I�����U��SH�����H��H��t��tH����F���H�H�Ѓ�H��t��u�H��tvH�>H��H�@��t7��t#H���tDH��xwD�E�H�N1�H��Mc�H���?���H��H��[]�DH�t$�fH��H�t$��H��� tPH��������t�H��H�t$�N,��H�t$�n���@H��� t(H����H��H9�,H���i���H�C�`����H�K�ك���3��H��H�{eH�5�g-H�81��R��f���SH���SJ��H��� t{H��H�C��H��H9�sxH��@H�H��H��tH�H��H9�w�H��� u'H+s H�SH���H9�tH���!���H��[�@H�CH��H)ƃ�H����@H�C H�SH��H9�r�1��ff.���AVAUATI��UH��S��H�� dH�%(H�D$1�H�D$H�D$�!.����t=���usA�$DH�D$H�E�� �JH�EH�D$��@��~!M�,$��t�M�t$����M�d$��tU�����2��f.�M�4$����M�d$�9��r��A�$�������^���I���tA����I�L�t$M��y"H�E�� ��H����I�L�t$�;I���DA����I�L�d$H���OH��L�d$M����H��������H�\$H9���H��H)�I9���H�EI�� �YH����I9��	I��$��I9���I�@�If.�H����H9�~dH���<��L�4�M��tA��uL��H���2��H��H�����I9�t1H��L���H�|�b��I��H�E�� u�H�EH9��fDH�L$dH3%(H����H�� []A\A]A^�A�fDH�M�� u?H�MH�T$H�t$A�L���!��H��������G���DH�������@H������L���0D��I���)����H����I��H���0���H�uI9���������L;e��L��H��H)��`�H�E�� twL��H%���H�\$H��H	�H�EI��$�e���H�T$L��H��H���������@H�D$I�������L�eA�� ��I��A��L+d$���f�L�eH�\$���f�H����-��H��H��I9�}#H�EH��H������ �6���H�u�-���L��H�������L���C��I���<����H�E�����L�e�k���H�`eH�5%^-H�81��L���1����q.���\C���A��c���ff.����SH����)��H�߅�t�E��H��[�n��fD[�2���f���AUATUSH��H�/H�]�� t6H����L�gH��L�oI9�IN�I9�|(H��H��[]A\A]�f.�H�]��f.�H���D��I9�|CH�E�� t"H%���I��I	�H��L�mH��[]A\A]�L�mH��H��[]A\A]�fDL)�H������H��H��H��=uJ�<�J�4�I��d;��H���<���H�޿�]&��ff.�f���SH��H�� dH�%(H�D$1��(����tSH����C��H��H����H�=�&H��H�$H�D$H�D$����H�T$dH3%(u1H�� [�fD�c>��H���[O��L�4���1�1�H��H����M����nA��ff.���SH����'��H�߅�t�7���H��[�f�[�Z���f.���AWH��I��AVAUATI��USH���C��I�/�� ��H����L���b��I��H��tZH��M�o�,�H����H9�umL��I9�ueI��I��H�I��H�H��t%H��L��H���3��I��� u�I;ou1I�W �f�L�����H��L��[]A\A]A^A_�fDI�o�m���H��eH�5[-H�81���I��ff.�@��USH��H����&��H�߅�tg�B��H��eH��u'H�-�Z-��H���-��H��eH��t�H��E1�L�B���1�1�H������H��H���[��H��H��[]ÐH��[]�մ��D��H�1��� u*H��%t H�1��� uH��%t1�H�OH9Nt��H�N�H9OHD��ff.���H�MeH��H�8骕��f.���AWAVAUATUSH��H��(dH�%(H�D$1��@��H��� t>H��H�ƒ�I�Ԩ~u:H�t$dH34%(H���LH��([]A\A]A^A_��L�cI��~�L��H�<������VL�����H�KH��H� ��L��I��1�H���B��H�EI��I��H%���I	�L�eL�#A�� �JL�sM��I�EH��H�,$H�\$���I����$��L��I����H�
ε��H����L��HD��+=��H������H����?��I�uH��� ��H�����H�� H����H��H�����%H�CH��H9��%I�MI��H��1�H���Q��H��� �eI�UH%������?H	�H�H�`eH�I�E�_���@H��E1��=��H��H������I�Ũ����H�H�ƒ�H��������������H�E���I��A��M�����H�K �e����H��� ��H����I�U L�sH�S I�UH�SH��tZ��uUH��H�ƒ���H��HE�H��H�ƒ��� H��HE�H�ƒ�H����I�UH��������I�U���fDH%���I�E���f�I�M H9K �BH�߀����a��I�E�M����I�EH����H�C���@H���0��H�������6H�H�ƒ�H���/�� H�I�mH����f.�H���%��I�MH��H��H��H����H�����f.�H�CH������@H��H���E��I�mH�������D�{���I�E�w���f����l���H�у�H���\���H��_��H�I�E�I���@H�%I�uH�� �3���fDH���(���������H�у�H���������H�I�E�� �����H��H������@I�uH�����H��I�u�� �����:��DAWAVI��AUATI��H��USH��H��H�t$����I�L$H��H�$H��~YL�,�1ېI�H�$I�$ uI�D$ L�<�H�����L�<M��tA��uL��H����&��H��H������I9�u�H�E�� t9L�|$H%���I��L	�H�EH����V��1�I�|$��H��[]A\A]A^A_ÐH�D$H�E��D��AVAUATUH��S�, ������H�}�� u`H�}����1�L�eI���4@H����H9���L��H�<�L�4��LV��H�����u,H��H�E�� u�H;]}qH�E ��H������H�EH�� t9H�����H��tH��xCH9�}>L��H��uH�E J�40L����S���@H�E��f.�[L��]A\A]A^�@���f��[5��H���SF��[H��L�(���]1�A\1�A]H��A^�D��D��AUI��ATUSH����������I�}�� uVI�}���1�M�eH���)f�H����H9�}DL��H�<�H���U��H��H���R��I�E�� u�I;]}I�E ��@H������H��H��[]A\A]�f��4��H���E��H��L��1�[L�R���]1�A\H��A]��C����AVAUATUS���XI��A���tL�&A���!I�I�]�� ��I�]H�����H��H��~QM����L��H�H��I��M�uI�E uM�u L)�K��I��1�H��H������I��L��L��H��H�����I�EH�UH���� �� t>H��tYH����H����H��H	�H�EH��[]A\A]A^�@H�����O���@H��t#H����H�EH��[]A\A]A^�@I�E�f�I�E��f.�L��H�{�H��H�H��H)�I������fDL���5��I�]I��� �����{����1��'!�����UH��SH��H��� ��H����H���X���H��~4H�UH�E uH�U H�pH� tlH��H�
H��H��H��u�H�UH�H�ց� �� uH��tUH����H�PH��[]�H��tKH����H����H��H	�H�H��[]�@H�p �f�H�_�W����H�U�f.�H�U�f.���H�>�� tH�����u���DH�~�g������USH��H��H���R��H��eH9t"H�;�� u$H�{�+���H��H��H���=��H��H��[]�H���������AW��I��H�۟-AVH���AUATUSH�����I�/I��� ��M�eH����A�� ��I��A��M�4,L�����I�OH��I� uI�O I��H��1�H������I�MI�E uI�M I��L��H��H�����H��� t%H%���I��I	�L�3H��H��[]A\A]A^A_�L�s��f.�M�eI�oA�� �S���M�e�R���f���1����D��AVAUATUSH�������tx��2��E1�L�cH���.�H����I9�}DL��N�4�L���5P��H�����tI��H��� u�L;k}H�C ��DL��H���M����[H��]A\A]A^�@H��[]A\A]A^����AT��H��-USH��H����,�H�;H��� ��H����H�E�� tJH����H�H��~G�U#
H��H�@H���ғ��H��H��H���t���H��[]A\���H�EH�H����1��H��I��H������H��L������L��[]A\�DH�{�l���ff.�@��AW��H�>�-AVAUATUSH��H���H��dH�%(H�D$1��2�I���1��H��H��� ��H��H����H����I�<$�� ��I�|$H��t~H��
H�����9"
L��E1�I��H�@H��谒��I���0H����I9�}<H�CN�<�1�L��L��L�<$�s1
��u_I��H��� u�L;s}
H�C ���H�L$dH3%(H����H��[]A\A]A^A_�f.�H�����A���@L��H���K���H�S�����E1�L�k�L�H����I9�}�L��N�<�L��L���B���H��tL��H���2���H��uL��H���BK��H�I���� u�L;s�<���H�C ��!0�����UH��AWAVAUI��ATSH��H��X�}�dH�%(H�M�1�Hc��H�AH��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����H�D$H���I��H�E�H�E�H�M���.��H�M�H�E�H��� �4I��I��A��L��U�����I�D�H�]�I��L��L�}�I��L�m��#fDH����H��wLI���H��M9�thI�}���H�^�-�y�I��I�EI��~�H�8�� u�H�xH��~��I��H���
L��H�@H���$���I�E�M9�u�H�]�L�}�L�m�H�H�KH��H�E�H�M��M����M��� ��@H����H9E���H�E�H��t H�}�xH���H�E�H�M�H��H�E��E�����H�E�D�e�E1�H��H�E��-f�H�E�H�M�1�H�4�m+
��uGA�VI�FM9���I��C�<7K�|�tH� u�H�C �f.�H�u�藎��H��t�H�E�H�H�� �+���H�CH9E��.���H�}���;��H�E�H�]�dH3%(u|H�e�[A\A]A^A_]�1�9U�u�H�u�H�}��NH��H�E�H��@H�C ���H�SH������H�QH�}�H��H�M�H��H�}����H�M�I���{���H)�H�L��Y�����,����AWAVI��AUATUSH���|$H�:H�t$H��% �H���T$H��������D$L�|$L�-��-��L��M�d��fDH��I����H�M9�t0I�?L�깱����I�H��� u�H�PI��H�M9�u�H����I�>H��% H��ukI�~�
L��H�@H������H�ŋD$��~(�D$H�\$��L�d�H�3H��H������I9�u�H��H��[]A\A]A^A_�&�fDH������H�Z�T$�������H���f����+��L��H��H���3��H��H��[]A\A]A^A_Ð��*��L��H��H���
��DH�uH��H�����L9�u�뾐��AUI��ATUSH��XH�t$(H�T$0H�L$8L�D$@L�L$HdH�%(H�D$1��q��$I��H��$�H�D$H�D$ H�D$M��~k1��J��ƒ�HT$�$H�*L���(���H�,�H��t@��uH��L�����L��H����I9�t�$��/v�H�T$H�BH�D$�DI�$�� t7H%���I��L	�I�$H�L$dH3%(L��uH��X[]A\A]��M�l$���$*��@��UH��SH��H���{���H��~H��uH��[]�f.�I��H��H��H��1�H�D$���H�D$H��� tH����H��H	�H�H��[]�H�XH��[]�D��H���dH��H��H�8�g����AUATI��UH��SH��H��H�H���� tH����H��x|H��H��H9�qH��x[H9�gH�4+H��H)�H9�HO�H��txI�D$H��t^H�4�H����+��H��H��L��E1�1�I�����H��L��[]A\A]�fDH��H�GH��y�H��A�[L��]A\A]�I�D$ �f�H��1�[]A\A]��ff.�@��SH��~Hc�H���X+��H��H��H�;�jC��H�kt�[�������AVAUATUSH��dH�%(H�D$1�H�1�dL�0H����H��������H��H9��]L�%~eH��I��fA�<$�&L�$�L���.�����H����H��(�L�����H��H�XH���9��H�EH�E H��~3M��t.I��L��H��1�H���K���H�E�� tbH%���H��H	�H�]�H�L$dH3%(H����H��[]A\A]A^�@H��tSH��L�� L����H������H�]�f.�fH�=x�dffH�p��H�(�����fH�=X�dffH�P��H�(�H�|$���"H�G]1H��HD���H���dH�5�@-H�81��"0���&��H�f�dH�5OE-H�81��0��D��H��1���|��f���UH��SH����H��1�H��H���i���H��� t!H%���H��H	�H��H�+H��[]��H�kH��H��[]�f���H�0t�f��{��ff.���H�
�eH��H�GH�w H�H�WH�W�f.���H�1���0u�� u-��tH�GH���@��H�GH����H���W��H��H��H���f.���H��(dH�%(H�D$1�H�<$�H�t$H���(��H�T$dH3%(uH��(��%�����USH��H�������u2H��1�1�边��H��1�1�H���_���H��H��[H��]�^��fDH��1�1�[]�y&��f�����H��-���fD����H�Џ-��v�fDAWI��AVAUI��ATI��UL��SH��H��HdH�%(H�D$81�H�D$H�D$�r�H����I9�}vM��~I��tL��L���.��H��� H�CH��uH�C N�4�M��tA��taL���a���H����H��H��L���Y~��I��H�H�� u�H�CI9�|�H�D$8dH3%(��H��H[]A\A]A^A_�I���H��tLH��u�I9����EL�t$H�T$L��L�l$H�=}L�d$ H�l$(�^����p���f�H��L��L���}���T���DL���	��H��tH9�t"�EH�D$��L���"�������ޙ����"��f���H��H��H�>H�vH�HL�@��u1��;����H���蜙��ff.����AVAUE1�ATI��UH�oSH���YDH����I9���H��J�<�����I��H��t+H��� tCI�V��?tH�:L�����H��uC�I��H��� u�L;k}>H�C ��I�~~�I�V L��H�:�J���H��t�[L��]A\A]A^�f�A�[]L��A\A]A^�ff.���AVAUE1�ATI��UH�oSH���@DH����I9���H��J�<�����I��H��t�uH�H�ƒ�H��tI��H��� u�L;k}GH�C �Đ�� t+H��I�V�~t�H�zL�����H��t�[L��]A\A]A^�f�I�~~�I�V ��A�[]L��A\A]A^�ff.���UH��H��SH���;��H����H��H9�tiH��H��H�=,���H������H��$tH��[]��H�E�� uGH�H�E�� tJH����H)�H��t��H����[]H��������H���[]�@H�H������ u�H�S�H���[]�ff.����AVAUATUH��SH�?�� �H�����
1�I���l��A���@H����H9���A�H��tH��xH�EH��uH�E L�4�E����L�����H����H��� t\H����H����H�PH�HH�1L��H���4�H�EH�� �q���H�EH9��t���[L��]A\A]A^��H�HH��uUH�H H�Q�@L��� $I���b����H�}���L���<��H��H�5E>-H��H�K�dH�81��A(��H���dH��H�5P>-H�81��&(��fD��H�����@���
H�Љ-��v�fD���
H���-��ƹfD��AUI��ATUH��SH��H��L�'A�� ��I��A��H����H��������H9��'H������H��� ���uJH�CH9�}JL9�UthH���2�L�,�M��tA��uL��H���
��H��H��[]A\A]���fDH�CH9�|�H��H���,���L9�~�H��L��H��L)�H�P�2���H�H�U�� t^H%���H��H	�H��w����L�gH���+���H��L�x<H��H�����H��� �3���H�����H��H���)����H�S�%���H���dL��H��H�5+<-H��H�81��^&��H���dH��H�5A7-H�81��C&����AWH�GI��AVE1�AUI��ATUH��S1�H��H�D$�EDH����I9�}\H�D$N�$�H��L�����H��u;I9�tL��H��L�����H��I��I��� u�I�GI9�}I�G �f�M����H9�t#H��L���(��H��L��[]A\A]A^A_�fD���A���t�H��H��[]A\A]A^A_��8��ff.���AWAVAUE1�ATUH��S1�H��L�7M�f�KDH����H9�}TL��L�<�L���8��H�����uL9�tL��L��L���2��I��L�mH��H�]I��� u�I;^}I�F �fDL9�LD�H��[]L��A\A]A^A_�f.���AWAVAUE1�ATUH��S1�H��L�7M�f�KDH����H9�}TL��L�<�L����7��H�����tL9�tL��L��L�����I��L�mH��H�]I��� u�I;^}I�F �fDL9�LD�H��[]L��A\A]A^A_�f.���ATUH��S����H��ti�4��1�L�e�.@H����H9�}<L��H�<��07��H��H��H��H������H�E�� u�H;]}H�E ��f�H��[]A\��[]A\������AUI��ATUH��S��H��H��������J��M�e����M�m���|A����I�M����H��������I9��aH���I��L��H���.�������������9��M��tR1�� �H��H%���H��H	�H�EL9�t.H�|�6��H��H��H��H������H�E�� u�H�]L9�u�H��H��[]A\A]�A�A���@���L���8���I��H����L������I������L��L��1�H��踳��H�E�� tOI��H%���L	�H�EH��H��[]A\A]�H�����������j���H�=G2-1������W����L�eH��H��[]A\A]�H��H�����-����1������H���dH�5�1-H�81��x!��H���dH�582-H�81��`!����AUI��ATUH��SH��H��L�'A�� tmI��A��H��H�����H��L��L��I��H��L��S���H��� t#H%���H��H	�H��H�+H��[]A\A]�DH�kH��H��[]A\A]�fDL�g�f.���H��Hc�H���4��ff.���AUATUSH��H��H��u
H���B��f�@��u�H�H�Ѓ�H��t��u�H����H�с� ��H��H�����H��t5L�e���0ukL�lmH������t*L;k��L�cH�[ J��H��[]A\A]�f�L;k}�H�{����t�H�t-H���!���H�H�с� H��t�L��H����H��H	�H��� t�H��뙐H�k�T�������+���H���_���H������H������H��H��I9�}�H��� tH�����H��H=��j����X�����A���H�{���9���ff.�AWE1�AVAUATE1�UH�oSH��H��(�t$�,�H����I9�}OH��J�<����I��H��u'I��H�3�� u�H�sI9�}"H�C ��f�H�3�� ��H�sI9���1��]k��H�KH�D$H� uH�K L�t$L��1�M��L��蒮��I��� �KH�D$L�`1���k��H��H��H���/��I�|$H�@I���H�t?H��E1��k/���T$���>�1�I��� �EH����H9���L�sI�GH�4؋D$��x/H�E�� �qH����H��H��?H�HcT$H�H9��_H��H�t$�j���H�t$I��H�D$H�x��I���0M��t%L��L����H�����L��L����L��H���.��H�@H�� K�t6H��M���p.������L��H%���H��H	�I����H�E�� tWH����H��tTM����H���:�����H�H��H���$��I��I��� �����I;_}�L�sI�G ���f�H�EH��u�M����H���dH�0H�D$H�pH��t@��tpH�D$H��([]A\A]A^A_�@H�E����H�|$L���-���0���fDH������H���T���L��L���e���.���L���x��H������H�|$�6����H�\$�z���H�����1���L���V%���C������H����H�޺I��H������L��L�����������H���i���I�����u8H��dH�5�,-H�81��N��L����$��H���dH�5�1-H�81��.��L����$���@��USH������H�ӽ��tH�.H��t��tH�����@H�H�Ѓ�H��t��u�H����H��tLH���tL�'��ƅ�tQH�����H��H9�tAH� tHH��H�����H�e���H��H��[]��������{���f�H���[]�@H���X���H��H���=��H��H��[]����]���H�����P����1����ff.�������U��SH��H��H��uH���
��@��u�H�H�Ѓ�H��t��u�H�����H�ډ��f���H��� tNH��H�0H������ taH����H)�H����H��H	�H�H��[]��H�������H�H�K�� t$H����H)�H�KH��[]��H�p�f�H�P��f.����R���H��H�t$���H�t$�;�����H�S�� t#H�G���?t'�H��ڲ��H��[�DH�t	H�G ��H��u�f��fDH�Ѓ�H��t�H��H�у���H	�uջH��u���t��K��f�����txU��SH��H��H��uH�������u�H�H�Ѓ�H��t��u�H��ta��1�H���ծ��H�0H��� t7H����H��~H������H��H��[]�f�H������H�p��f.���t�H��H�t$��H�t$����SH��H��~螱��H��[�f���H��H���H�t$H�t$�q���H���ff.����H��� t4H��H�����H��tH��x
H9�}H���H�y��f.�H�WH� ��fD��SH��@��tH��H�[���fDH�����H��[H�����ff.����US��H����~7H��H�6H���������uH��[]�@H��H�u�H��[]�i�������ff.����AWAVAUI��ATUSH��(H�/dH�%(H�D$1��� �LH�����0���IH�D$�D$E1�E1�H�D$H��)�rfDH���>I��?M��E��tFH��I9�}JH��L��L)�H��H��?H�H�L�H�����H���))��I�ƨu�H��t,H�����u<L�{E1�I9�|��D$����K�D?��f�H���D$A��DH�!�dL��H�0�f��H����H�L$���L��H�D$�
���L��H�������ta���l����������H��A�����f�H�o����������
��H�����E1�1�1�H��L���p���fDH�DH�L$dH3%(uH��([]A\A]A^A_ø����
��L���(��H�5�*-H��H�_�dH�81��U��D��SH������u[�DH�H��[H�����f���AWAVI��AUATUSH��HL�"H�T$dH�%(H�D$81�A�� �nI��A��Hc�H��M�,����H��H�D$0H�D$H�D$(H�D$H��6��fDH�H�\$(H��L���e��H��H���$��I��M9���I�L�|$��u�H�T$H�t$L��H��A��U�H����H�T$0H��~�M�WI� uM�W H�D$(H�ML�<�� ��H�]I9�~L��I�4�H��H)�M9�HL��&��M9��f���H�D$0�H��I��H�t����M9��O���@H�D$H�D$0H�D$H��H�T$8dH3%(uMH��H[]A\A]A^A_��H���H��H��H�D$(����L�b����H����H���B�������@��AWAVAUI��ATUH��SH��H��H��� ��H����H9���H����H����H9���H)�H��H�i�dH�8H����H���eH���H����H9�����^��I��I�E �%M�m I�t�I�vH��t@��uL�����I�H%����̀I���H�LH9��d���H���dH�8H���j���H��1�[]A\A]A^A_�^��f.�H���OH��H�J�H��?H��H1�H)�H�H�H��H�T
H��HN�H��I����]��I��H��� ��I�E �FI��M��~?M�l�H��I�nO�|�I�uH�uH��t@��uL����H��I�I9�u�I�H%���I��L	�I��@H�GH9��R���A�H��L��[]A\A]A^A_�I�E ��I��L�����M��~8M�l�H��N�<�H�ŐI�uH�uH��t@��uL���e�H��I�L9�u�L���q��I��� �W���M�f�w���@H��H��H9�HL����fDH��H��H��H��[L��]A\A]A^A_���M�m �Y����M�m ����I������H���dH�5� -H�81��_��ff.�@�����f���SH��@��tJH�H��xOH��� uH�SH���v�H��t[�fDH��H�߃��Y�H��u�[����DH�����H���H�$�dH�5F -H�81�������ATUH��S����td1�L�e�(@H����H9�}4L��H�<��"��H�����t H��H�E�� u�H;]}
H�E ���H�tH��[]A\�����[H��]A\�l}��ff.����SH��@��tH��H�H��xH��1�[�l�@H�����H����H�D�dH�5�-H�81���
����ATUH��S�����td1�L�e�(@H����H9�}4L��H�<��(!��H�����t H��H�E�� u�H;]}
H�E ���H�tH��[]A\�?����[H��]A\�|��ff.����UH��AWAVAUATSH���}�L�2H�u�H�U�dH�%(H�]�1�A�� ��I��A��L��h����u������E�H�]�L�m�L��h���L�m���I��L�d���L��1�H���#�I��M�/I��M9�ttI�H����I��M��t�H��u�L���s��L�M�1�1ҾH��I��H�E�L�U��L�u���"H��$u�H��� ��H�5#-H��H�M�dH�81��C���K��E����(�������]�H�}��E��C�L�l��CHc]�H�H��p���H�E�H��� ��@H����H9���H��p������I��H�E�H�8H��H��x����� uH�E�H�@ H�4�L��L�4�����U�L�}���Q�H�����H��t#H����H9���H���dH��J�42L��I�����M9���I�H�H�ǁ� u�H�B�H�E�H�@H��h����
���@H��h���H������H��`���H���@�]�1ҍCH�H��X����C�H�]�L�l�H�E�1�H��H��P���H��X���H��p������H��p���I��H�E�H��� H��x����TH��P���H�4�L��L�4������E�L�}���G�f�H�����H��tH��xZH9�~UH��t0H��J�42L��I�����M9�tGI�H�H���� u�H�B�H�R ��f.�H�R ������f�H��`���L���1���E�HcU�H��H;�h�����H�]�dH3%(H��`����-H�e�[A\A]A^A_]þ�*���fDL������H�E��E�Hc]�H��� �h���H�E�H�@H9��g���HDž`����f�H�E�H�@ ����E�D�hIc�A��w\H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�\$H����(H��H�4�H��=�EH��H�}�H�����H��H�E��M�E1�D�m�Mc�L�m�L�xD�q�L�}�I��I��� ���H����I9���H�E�J���M�M��E��N��1�I��?H���;�xH�����H��tE��uJI9�}EH��t8H��J�<H�|�H�BL9�tBH��I�L�H�H�Ɓ� u�H�A�fDH�I ��f��H�BH�|�L9�u�D�}�H��A���	�I�Mc�� �2���M;G}	I�G �7���H�}��1���H�}��'���#������������UH��SH��H��(dH�%(H�D$1���u{L�A�� u_L�GE1�H�L$H�T$H��H�����H��t^H��tH�L$H�T$H��H�4$��f�H�T$dH3%(uEH��([]�f�I��A���fDH�H���u�����H���X���H��H���]�������fD���G�ATUS����H��H���tH��H��[]A\����f�L�f��t'H�A��tFL��H�H��x#H��H��[]A\��@H������H����H�E�� uH�EH���fDL�����H���H�����ܺ��P�����uHH��� u H�BH��tGH�R H��H���f.�H����t'H��H��H���f.���6���fD��f.���SH��H��dH�%(H�D$1��/�H��tH�T$dH3%(uH��[�H��H�$�_������x����AUI��ATI��UH��H��SH��H��(dH�%(H�D$1�����L�H�D$A�� tQI��H�HA��L��L��H���'���H�D$H�D$H�D$H��H�T$dH3%(uH��([]A\A]�f.�L�@H�H ��������ATA��USH�� dH�%(H�D$1��G�����H��H��t��tH�����H�H�Ѓ�H��t��u�H��H����H�}H����A����H����H��� tjH����H�T$H�t$A����H����H�u@����H�H�mH��H���չ��H�L$dH3%(H���H�� []A\�DH�K�f.����X���H���/���K���f.�H����H�H��H�UH�t$��tsH�H�MH��H�T$����H���r����H�����H���L���H�mH�H��H��H�������A���fDH�MH�T$H��H�t$���H������f�H���h���H�t$H���{����S���H���Z�������������SH��H��H��uH�������@��u�H�H�ƒ�H��t��u�H���|������ u.�tH�CH9�H�sH��[�@H�CH9�~��B��f�H��H�t$�C�H�t$H��H��H9�\H��� t�H%���H��H	�H�3H��[����{���H��H�t$�z��H�H�t$�a���H�F�dH�54-H�81��u�������AUATUH��SH��H�����H�H�� ��I��I��A��L9�tNH��������H9���L9�~MH���$�uuH�CH9�|uH��L��H��L)��3���H��� u H�kH��H��[]A\A]�f�H��tSH%���H��H	�H��H�+H��[]A\A]�DL�c�e����H�CH9�}�H��H��褀���{����H�����H��H��H9���L�#L�k A�� ��H����H��H��H��=��H����H�H��H%���H	�H�+A������L���\�������H���H�H��H������H�EL9����H�{ �H���
��H�kH�C ����D���]���L���H���M���L��� H��?����H������L�#�%���H�{L������;���H���dH��H�5B-H�81��D���H���������ATUH��SH��� tmH����H�����H�MI��H�E uH�M M��H��1�L���)���I�$�� t H%���H��H	�L��I�$[]A\��I�\$L��[]A\�H�_�f.���S��H��H������H��[�fD��S��H��H���k���H��[�fD��H��� ��H����H���}SH���F��H�;��t/�� uoH�{�n�H��H�@H���{v��[H���҉f��� uPH�{�?�H��H�@H���U��[H��飉H�GH����������DH������H�����ff.�@��AWAVAUATUSH��H��� �I��I��A��M���H�|$�A�I�������H�� �9f�H�����H��tL9�~H�D$H���4H��J�<蹱H��^-��ގH��M���H��� ��I��I��A��M9���M����E1��u@H�����H��tL9�~H�EH��uH�E J��H�H���� tSH�����H��tL9�~H�CH��uH�C J�<�L��I��舲��M9�~#H�EH���� u�H�E�fDH�C�f�I��M9���H�D$M��H�H�� ����H�D$H�@����L�e�����H�@ �����L� A�� tLI��A��L��茶��H��M��~�E1��L���x���L��H��I��H���Ʊ��M9�u�H�E����L�`�H��H��[]A\A]A^A_�L�M�����H��[]A\A]A^A_�X�H���dL��L��H�5<-H�81�����f.���U��H��SH��H�����~!�U�H�l�DH�3H��H���Y���H9�u�H��[]�ff.�f���AWH��AVAUATI��USH��HH�H�t$(I��dH�%(H��$81�A�� ��H��H����M��������H�H����H9�HN�H�A�I��H�D$H��	w-1�L�u�L��$�L��L��H)���I�D�H��L9�|�H�|$(H�H�ށ� ��H����H9�~<H�|$	w4H9�$��|1�H��$���H9��_H��L9�|�L9�LN�L��I���9�3I����I����H��$�H��$�H��$�H9���H��I��I��I9�L�@H��M9�IO�H����H�wH��H��$�H�OH� uH�O H��H��$�H� �mH��H��H��$��H��$��+�I���H�nM���\���1�H����M����H�WA�H��tRH���vH9��mM����H��L�<��-f.�H���(�H������M����1��0���I��H��$8dH3%(L����H��H[]A\A]A^A_ÐH�_�)����H�����Z���@L��H�u��t�H�|$(H�I��A�� M���+������H� �G����H���	��H�����H��H��H��
��H��$�H�T$@H��$�H���XH�D$@A�L��$�H�D$L��$�fDK�\�E1�H��H��I�4��@H��I��I�D$H9�|H��I9�u�I�D$M��L��K�4�I�<�L)�H����H�D$J����J��I��L9��qH��$���H��$�H��$�1�H9���H�H�OH��uH�O H��H��$�H� ��H� H��H��$��H��$���I������DH��$�H��uCH� H��H��$��H��$���I������f�A�����DH���f.�H���l����H��H�CHI�H���=���@I��I���y���DH��H��?H�H�H9���H�k�d1�1�E1����H��H��H�D$0螵��H��H��H�D$H�D$0H�H �U���H��I���J���1�I��DH��L��H�T$L)�����H�T$L�H9�K�D�HL�I��L9�u�H�D$(H�D$ H��� ��H����H9���H�|$ 1��޹��H�|$ �t���L���l���H�D$0H�|$H�@ ����H�D$0H�D$8H�D$0I��� t>H��H%���H��H	�I��Y���fDH�w �d����H� ����I�o�*����H���H���H��I���=���1��f�H��H�4�H�4�H��H9�~3H�L$H�t$(H�<�H� u�H�v ��H�����H��I�����L��耪���5���H��H��H��H��H���'HN��>�����H�@I��H�D$(H�D$8L��H�D$(E1�H��菸��I��@H��L��L)����K�t�L�I�D�H�H�0K�T�I��L9�u�L����H��dH�I�G���H�D$ H�@�=���H�|$ H9�HO�E1�����I��H�D$8H�D$�H�T$H�|$L��K�\��A��M��tL�\$8H�T$H�|$H��L�\$���I��L�\$��tL�T$8H�|$L��H��L�T$踵��L�T$K��K�D�I��I9�u������H��dH�5j-H�81���ff.�@��H���dE1�1�H�������ATI��UH��H��S�j�L��H��H��H���y���H��[]A\Ð��H��� tH����H���d1�H�0�\���@H�O��f���UH��AWAVAUATI��SH��H��XH�u�dH�%(H�E�1���tmI�������tuH��� uIL�KM��x��I����M��u{H��H�M�dH3%(�kH�e�[A\A]A^A_]�I��I��A���L����I���`����u���H������H�M��H��L��W��H������f�I����J��H��H�E�H��H%�H)�H���H��H9���H��H��$���D1�詫��H���A��H���$���f�E1�L�e��?�H����I9������H�CJ��L��I��H�E����H������H��� u�L;k�����H�C ����t	H)�H�L�L�T$I���M��H��L�M�E1�E1���L�M�H�@H�E�I�D$�I�H�E�I��L;m���K��H�E�M9�~6fDH�E�H�}�L��L��L�M�L�8趫��L�M�����I��M9�uѐI��K��L�xO�<�M9��M��u�H�}��M�H���dH�U�H�H�B����fDO�<��f����L��L�M�J�4�H��=u9H��H�}�H���;���L�M�I�����H��dH�5i-H�81������L�����D��UH��AWAVAUATSH��H��XH�u�L�'dH�%(H�E�1�A�� ��I��A����������L�u�A����I�M���M��I����I��`J��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�T$I���M���)�L��J�4�H��=��H��H�}�H�����I��H��E1����H�@H�E�I�F�I�EH�E�I��L9}���K�D�E1�H�E�M��~2f�H�E�H�}�L��L��L�M�L�膩��L�M����GI��M9�uѐI��K�D�H��K�D�I9��M��u�H�}���H�̴dH�M�H�H�AH��H�M�dH3%(�H�e�[A\A]A^A_]�@L�g�'�����_����J�H���B�H�M��H��L��T��H�����DL����I���1���K�D���f�1�虧��H���1��H���c���f�E1�L�e��<�H����I9��7���H�CJ��L��I��H�E���H������H��� u�L;k����H�C ��H���dH�5�,H�81��+����L������f���UH��AWAVI��AUATSH��H��HH�u�dH�%(H�E�1����QI��������YH��� ��L�{M���M9���M���^E1�L�e�I����H���U���I�~H�E�H���KH��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�D$I���M��H�E�N�,�H�@L��H��=�I�D$L��1�M�H��H�E�I�����I�$����1�H�HI9�~I�̐H�0H��H�VH�L9�u�L��H�U�H�}�L��H�M�膦��H�M�����H��tLH�A�I��H�9H�WH�I�L�H9�t)�DH��I�t�I�H�NI�L�L�H9��p���H��u�H�}����H���dH�U�H�H�BH���lf�H����I9�}TH�CJ��L��I��H�E��7�H���_���H��� u�L;k}!H�C ��I��I��A��M������@H��H�}�dH3<%(��H�e�[A\A]A^A_]�L���@��I���������������H����H�M��H��L��P��H�����fD1�����H������|���@H��H�4�H��=uBH��H�}�H������I������j��H���dH�5�,H�81����L��������{��ff.���UH��AWAVA��AUI��ATI��SH��XH�dH�%(H�E�1��� �H����������A���TE���0H�]�1�H�}�������H�}���H�}��1H�{H��H}�H����H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�L$I���M���f�H�}��g�H��dH�]�H�H�CL��H�u�dH34%(�yH�e�[A\A]A^A_]�H�Z�w����������H����L��D��L��L��L��H������I�}H������@����H�H9�H�}������fDE1�H�]��=�H����I9��K���I�D$J��H�޿I��H�E���H���:���I�$�� u�M;l$����I�D$ ����S��H9�H�E����*���@1��Y���H����L������f�H��H�4�H��=�JH��H�}�H���;���I��H�E�L��E1�M�<���L��H��1�H�@H�E�����H�E�1�H��H�E�fDH��1�H)�L��x���H��t3H��J��M�L)�I�
�I�EH;E�}1I�DI��1�빐M�������I��K��H�xA��@M�\1�H��~C@A�<u/H�u�H�}�I�L��L�U�H�M�L�]��J���L�]�H�M���L�U�tH��H9�u�I�:A�?H��I�:�5���H��dH�5�,H�81����1�D������q���觿�����AW��H��F-AVAUATUSH��H���H���vH��H��� �#H����H��� �~��I��H��� ��H�SH����H�}�� ��H��E1��H���D��H��L�s1�H�@H���<��I����H����H9��L��H�4�1�L��L�<������uMH�H�� �!H�����H��t"H���/H9��&L��H��uH�C J�48L���&���H��H��� �v���H;k��H�C �v���H�EH�����H��H��[]A\A]A^A_�=�DH����I9�}WA�H��tM��xH�CH��uH�C N�4�L��H���:��H��uL��L����H�I��H�� u�H�CI9�|�H��L��[]A\A]A^A_�H��H����H���[���E1���H�C�����H�}E1�H��~��Q���fD����ff.���S��w]H�Ӆ�t?H�>�����H��uH���Y��H9�t[�f�@��u*�e���ƅ�u�H��[��fD�������f�蛳���Ժ1����ff.�f���UH��AWAVD�wAUI��ATSH��X�}�H�U�dH�%(H�]�1�Ic�H��賤��H�E�H�E�$L�}�L���k���I� �&I��A����&H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����L�d$I���H�E�H�@H�E�H��� H�E���H� ���H�E�H��H��H	H�E�I�H����I�GI��f.�H�H��H9�u�A�f.�K�|�����H��B-�rK��I��L9�u�1�fDA��H��H9��蚽��E1����H���a1��+DH��H�Ѓ�H��t,H����H��H9��2I��H��� u�H�@H��u�1�����H�E�H�}����H�E�H�]�H��HE�H�]�H�]�dH3%(H�E���H�e�[A\A]A^A_]��H����H��t+��K��I��L9���K�<�H��� u�H�GH��u�H�}��X�H�E�H�E��fDM� A�������H��H�4�H��>�H�VH�}�H���Q���I������f�H�XH�E�I�H���)������0�����u�����H�E��
DH�E�HcE�H��I��H�E��A�H�I��H�E�H��E1�豙��I��H��~*f�Kc4�K�<�I�����L��H����L9�u�H�}�u`H�E�H��t�uH�H�у�H��tH��H�f�L�����H�E�H��t���H��dH�5u�,H�81��?���H�}�L����H�M�H�u���E�����M��0DH����H9��$�����������H�����FHc�H�M��I�<�I��� u�I�Q�f.�H)�H�L��a���H�H�ƒ�H���H�����=���H�E�H���[�����S���H�H�у�H���@���H����H��1���H�ΠdH�5h�,H�81��E���H�����A�$������fD��AVAUI��ATUSH�� H�t$dH�%(H�D$1�H��� �dH��H����H���^H�|$A���1�I�m�=�H����H9��HH��L�$�L��虧��H��t+L9�u&LpI�EH���� u�I;]�I�E ��DI�E�� ��I�EH9�HO�H)�H��I�<F��H�����H��H���}���H�t$H��H��L���j-��1�H�t$H��H��L�D$L���‰T$H������H�L$dH3%(H����H�� []A\A]A^�f�H�|$����H�D$H�pI�E�� ��I�UL�r�L��I������H�����5���@H�WH�������1�1��R���H���t���f.�L��1��֬��1�H��H������I�U�� u0I�UH�t$H��L���|,���1����H��H�����e����H�������r��f���AVAUI��H��ATUSH�����H��������H�H������H��������M�eH�H��A�� �iI��A��L9��aH��dL��H�8L���Z'��H��H��� �#L��H%���H��H	�H�EI�]�� tfH��I�M��H��c[H��]A\A]A^�f�H������H��H���U���H���d[1�]A\H�8A]A^��&��[L��]H��A\A]A^�M��DI�]I�M H��~�M��I��H��1�I��?H���j��M�I�L9�3L�uDL��H�E uH�M H��H��I��H����i��H�L9�~�I9��?���H�MH�E uH�M L��I��H��H��H)��i��[H��]A\A]A^�L�e����M�e���H�x�dH�5=�,H�81����H�`�dH�5G�,H�81����ff.�@��SH����wK��u.H���dH�H���+�H��H��H��[���f.�H�H��t�H��H��H��[����1�����ff.����F�����UH��SH��H��� t+H��H���H�����H��%H��H��[]�f�H�_H�����H��~�H�����H�T�H9�s@H�H�2H��H��H�p�H�JH9�r�H���e���H��H��[]�ff.���闥�����AVAUI��ATUH��S�	���H��t6I�]�� u6I�]�H��~H����H��H�H��H�ոH��[]A\A]A^�H�������L��L�s��$���I��H����L9���J��}+H�<�H9�s"I��@H�I�H��I��H�W�I�@L9�r�H��H��~LI��I9�sCL���H�2H�8H��H��H�z�H�pH9�r��I�$H�I��H��I�T$�H�AI9�r�L������[L��]A\A]A^��H��H�s�H��H�H��H)�H�����fDH�J��H�pH������K���H�\�H��H�xH������I�$�f���S��w>H�Ӹ��t
H��tH�H��H������H��[�H�����H��H�����H��[ú1��L���ff.����AWLc�AVAUI��L��ATM��USH��N�4�H��HH�t$dH�%(H�D$81��a���H��H�D$0H�D$H�D$(H�D$M��%�sH�H��L��A��H��H����H��L9�tPH�;@��u�H�L$H�T$A�H�t$����H��uXH�3@��tH��f.�H�����H���H�L$8dH3%(H����H��H[]A\A]A^A_�f.�H�T$(H�t$0H�D$H�H9�HN�H�$H9�}2I��L��L��I��A��H��H�����L9<$u�H�$H�t$0Ht$(H9�����H�E�� uH�EH)�H��H�������H���������f���AVI��AUI��ATL�gU1�S1�H��8�H��H����H9�}AL��H��I9�tH9�tH��L���%���I�MH��H���� u�I�EH9�}I�E ��DH9�t��L��]A\A]A^�8{���[]A\A]A^����AVAUI��ATUH��SH��� ��H����H9���H��y	H���L�����I�EI�E tfH��L��L�$�L�4�����H)�H��H��H��=��J�t0J�<0���L���x���I�E�� uI�mL��[]A\A]A^�fDI�E �f�H��H%���[]���?H���H	�I�EL��A\A]A^��A�[]L��A\A]A^�fDH�_����H�޿�"���f���ATUSH��H��0dH�%(H�D$(1�H��uH�����@��u�H�H�Ѓ�H��t��u�A��H����A�D$����;H�.H���A����H��t4H��H�H���V��H�L$(dH3%(�H��0[]A\�f�H��� ��H����E1�H�T$ H�t$H��蘤��H��t�H��u|H�T$ H�t$H���j��������M���H��H�t$�:���H�t$�6���H��tcH�H�VH�l$��t:H�H��H��H�T$ �����<���f�H�K�j����H������H������H�����H�l$H���fDH��H�t$���H�t$H��뉺�D���?����*��f.���SH��@��tH��H�[���fDH���H��H��[H������ff.����S��H��H�,2-H����?bH��[H���S|����AUATUH��SH��H��u
H������f���u�H�H�Ѓ�H��t��u�A��H��tvA����H�t$H��H��[]A\A]��Ic�谒��H�t$I��A�E�H��L�l�@H�3L��H���I���L9�u�L��H���{��H��H��[]A\A]���t�H��H�t$�V���H�t$�n���@H�6H�����H��H��[]A\A]�ff.�@��ATf�USH��0dH�%(H�D$(1�H��D$D$H�$����H�$H�=�0-H�$�dH���dH�0赠��H��dH�O�dH��H�2H�蹕��H�;H�5�����H�;�����H�k=��H�5n-诤��H�;�����H��_��H�55�,蔤��H�;�H�U���H�5��,�y���H�;�����H�����H�5N-�ޞ��L�%O�dH�;�H�5��,L�����H�;1�H��;��H�5D�,訞��H�;H�5�,H�5��,�2��H�;1�H�v���H�5{�,�z���H�;1�H�N���H�5h�,�b���H�;1�H����H�5U�,�J���H�;�H��7��H�5O[-�/���H�;�H�$��H�5&�,����H�;1�H��#��H�5CI-���H�--�dH�;�����H�5�,H���ޝ��H�;�����H����H�5��,�Ý��H�;�H�$���H�5��,訝��H�;�����H��0��H�5��,荝��H�;�����H�����H�5Y-�r���H�;�����H�S���H�5x�,�W���H�;�����H����H�5c�,�<���H�;�����H����H�5S�,�!���H�;�H�G��H�5E�,����H��dH�;�H�55�,���H�;�����H�����H�5��0�М��H�;H���0H�5�,�Z���H�;�����H����H�5��0蟜��H�;�����H�����H�5��,脜��H�;�����H��p��H�5��,�i���H�;H���,H�5��,��H�;�����H�tx��H�5��,�8���H�a�dH�;1�H�5��,� ���H�;1�H�t8��H�5s�,����H�;1�H��7��H�5f�,��H�;1�H�4��H�5Xi2�؛��H�;1�H���H�5�R-���H�;1�H����H�5+�,訛��H�;�����H��-��H�5�,荛��H�;�����H�n-��H�5v3�r���H�;�����H��+��H�5˫0�W���H�;�����H���H�5X�,�<���H�;1�H����H�5��,�$���H�;1�H���H�5��,����H�;�����H�M���H�5��,��H�;�����H�2�H�5��,�֚��H�ߐdH�;1�H�5��,辚��H���dH�;1�H�5[�,覚��H�;1�H�:���H�5I�,莚��H�;1�H����H�5�U-�v���H�;1�H���H�5"�,�^���H�;1�H�҇��H�5�U-�F���H�;1�H�����H�5��,�.���H�;1�H�b���H�5�U-����H�;1�H��}��H�5��,���H�;1�H�2���H�5�U-���H�;1�H��}��H�5��,�Ι��H�;1�H�B~��H�5��,趙��H�;�����H�����H�5��,蛙��H�$�dH�;�H�5t�,耙��H�;�H�1���H�5`�,�e���H�;1�H�9J��H�5R�,�M���H�;1�H�����H�5)U-�5���H�;1�H��{��H�5,�,����H�;�����H�.���H�5-U-����H�;1�H����H�5�,���H�;�L��H�5��,�Ә��H���dH�;1�H�5��,軘��H�;�����H��v��H�5��,蠘��H��dH�;�H�5��,腘��H���dH�;�H�5��,�j���H�;�����H��H�52P-�S���H�;�����H�D���H�5y�,�8���H���dH�;�H�5f�,����H���dH�;�H�5J�,����H�#�dH�;�H�5�70���H�;�H�H�H�5M�-�̗��H�;�H�=�H�5�u0豗��H�;�H�����H�50薗��H�;�H�����H�5��,�{���H�;�����H�,R��H�5�0�`���H�;�����H��K��H�5��,�E���H�;1�H����H�5��,�-���H�;1�H�1��H�5�S-����H�;1�H�	I��H�5Y�,���H�;1�H����H�5��-���H�;1�H�It��H�5/�,�͖��H�;�����H���H�5�,貖��H�;�����H��H�5
�,藖��H�;�����H�H%��H�5>z-�|���H�;�����H�]��H�5��,�a���H�;�����H���H�5��,�F���H�;�H����H�5��,�+���H�;�H����H�5��,����H�;�H�q��H�5��,���H�;�����H�F�H�5P-�ڕ��H�;�H����H�5�Q-迕��H�;1�H�C���H�5�Q-觕��H�;�H�ȵ��H�5�Q-茕��H�;1�H�0���H�5�Q-�t���H�;1�H�����H�5�,�\���H�;1�H�`���H�5��,�D���H�;�����H�5"��H�5��,�)���H�;�����H�j ��H�5�Z-����H�;�����H����H�5��,��H�;�����H����H�5��,�ؔ��H�;�����H�y���H�5��,轔��H�;�����H�~4��H�5s�,袔��H��dH�;1�H�5_�,芔��H�;1�H�N3��H�5N�,�r���轹��H�����H��H�{�e�v�"H�D$(dH3%(u	H��0[]A\��������H�5ՃcH�=�m-���,f����ff.�����fD��H��H��H�5n�c�{��Hc@H��H�D�ff.���H��H��H�5>�c��{��Hc@H��H�D�ff.���H��H��H�5�c�{��Hc@H��H�D�ff.���H��H��H�5ކc�i{��HcH��H�D�ff.����H��H��H�5�c�9{��H�@Hc@H��H�D����H��H��H�5ކc�	{��H�@Hc@H��H�D����H��H��H�5��c��z��H�@Hc@H��H�D����H��H��H�5~�c�z��H�@Hc@H��H�D����H��H��H�5N�c�yz��H�@Hc@H��H�D����ATUH��H�5��cSH���Fz��H��H������H���c����H�='�,I��迋��L��H��H���Q����KD�KH��D�C�H�5��,1�裵��H��[]A\�ff.���H��H�?�%H���X���H��H���ff.�@��H�?�t���@��AVAUATUSH��H�5Z�cH���y��H��H�����H��蟥���H�=c�,I�����L��H��H��荒��H�EH�8D�pD�hD�`H���h���{��H��E��E��AVH�P��H��H�5!�,1�踴��XH��Z[]A\A]A^�f.����u��tDSH��H�=��d�H�=�c�h���H�P �@uH�P ��
�K�J�K�J�K�J[�f��G��u����u��ff.�f�ATI��H�=4�dH�=�cUH���S���H�5'�cH��H���Lx��L� H�hH��[]A\�ff.�f���H��H��H�5�c�x��H�8�A#H�xH���T@AUI��H��ATUH��SH��XH�T$0H�L$8L�D$@L�L$HdH�%(H�D$1���y���$I��H��$�H�D$H�D$ H�D$H��t^1��>f.��ƒ�HT$�$H�2�H��tL�����H��L���� ��9�t�$��/v�H�T$H�BH�D$�@H�L$dH3%(L��uH��X[]A\A]��ݴ��ff.�f���AWH��H�5ЂcAVAUATUSH��HdH�%(H�D$81���v��H�8�"H�L�`M���I�|$��x��I�|$H�D$��1�L�l$DI�D$H��H��H�CH�pH�x�R���L��I��HcCH�DH�D$HcCH�DH�D$HcC H�DH�D$ HcC$H�DH�D$(�ڶ��H�{I��HcH�DH�D$�Q���H�����L��L�t$ H�D$L�|$(蝶��H�|$H�����I9l$�E���H�|$�;���H�T$8dH3%(H�D$u!H��H[]A\A]A^A_��H�D$���`�����H��H��H�5^�c�u��H�@H�8H��������H��H�x��if��W��w1���u
H�G�D��H�H�x ���H���׎��1�1�H��H���w����SH���7 H�pH��t	H��[�u���H�����fH�=%�dffH����H�H�xp�q����AUI��ATI��UH��SH��H�|$H�|$�N����y���H��I�����u=I�����uEH�����uMH�T$H�߹��t���H���\���H��[]A\A]ÐH���I�����t�H���H�����t�H���&�@��H��H��L��L���K���ff.�SH��H��0H�?dH�%(H�D$(1�H�����G���m��H�K�,Hc�H�>��H�{����H�{0H�$����H��H�D$�H���H�L$(dH3%(��H��0[�fDH�{���H�{(H�$�DH�{�w���H�{8H�$�j���H�{HH�D$�\���H��H�D$�ڳ����H�{�7���H�{0H�$�*���H�{@H�D$��H�{����H�{8H�$����H�{HH�D$��H�{XH�D$���H��H�D$�d��������H�{���H�{DH�$���H�{TH�D$���H�{dH�D$�f�H�{���H�{4H�$���f.�H�{�g���H�{@H�$�Z���H�{PH�D$�L���H�{`H�D$�>���H�{pH�D$�0���H��H�D$ 讲���a���f�H�{����H��H�$膲���9����,���H�=%�,H��1����膯��fD��H��H��H�5~}c�q��H�xH�����ff.��SH���'���H��tH��[�	���f��[�f���SH��H���@]$��t#H����d$���tH�[H�D�fD�[�H�r{dH�5��,H�81��a����H���dH��u4SH��,@�H��軛��H�t�dH��t�H��[�f���fDH���X����H���tH��t�0�����f.��ff.�AVI��AUI��ATI��USH��H�� dH�%(H�D$1���|��H�5�d0H��H���A���H��H���f����H�=.f0H�$�с��H�D$H���dH��u)H�-V�,f��H���Ӛ��H���dH��t�H��H��H���$������H��I�����u[I�����ucI�����ukH�ڹ�H���\H��H����H�����H�T$dH3%(u=H�� []A\A]A^�@H��� I�����t�H���/I�����t�H���>��������H��H��L��L�����ff.�AWAVAUATUSH��xH�dH�%(H�D$h1�H������o��
H�
�,��I��H��Hc�H�>��fDH�N(H�V �L��1����I��fDH�L$hdH3%(L����H��x[]A\A]A^A_�f.�H�V �L��1��m���I����1�1��W���I���f�H�~ �׹��H��H�$�֮��I��끐H�v �H��t���H�$H�}(蠹��H�u0H�D$�H��tL���u���H��H�D$胮��I���+���H�N(H�V L�F0�L��1����I������DH�~ �H��t�
���H�u(H�$�H��tL������H��H�D$����I�����f�H�V(�����H�~ �׸���DH�~ �H������������@H��訑������H�v0�J���H�u H�øH��tL���q�H�u(H�$�H��tL���W�H�u8H�D$�H�\$H��tL���7�H��H�D$�E���I�����H�~(�H�~ ����H��t���H�$H��dH��u(H���,��H���#���H��dH��t�H���Ϸ�����H�v �H��t��H�$H�}(誷�����L�v M����Ic>I���-n��I��E��~;A�G�I�^M�t��H�;�H��t�>���H��L��H�����I9�u�H�u0L�,$�H���tL�����g�¨��H�u I�ŸH��tL����H��L���.��H�]0H��u3�YH�s �H��tL�����H��L�����H�[0H���+H�H������+t�H��L����H���H���H������H���;�����H���N������H�v0H������H��t�L�H��H�u �H��tL���3�H�u(H�$�H��tL����H�D$H��H�\$�"���I������H��肉���&���H��襗������H�~(�H�~ ������H��t���H�$H��dH�����H�q�,��H�����H���dH��t����L�F0H�V(I����H�N ����H���O������H�v �H��t�G�H�}(H�$�J���H�u0H�D$�H��tL����H�u8H�D$�H����������L�F0H�V H�N(M����������H�~ H������H�v0�H��tL�����H�u0H�$H�~(�Ŵ��DH�u(H�D$�H����������H���l������H�^0H���eH�s A�H��t�f�I��H�s0�H��tL���M�H��H���bv��L�l$H�$� ���H�~ �;���H�$H�}(�.�������H�n �u���\��败��1�H�}I��~7�H�EH�4ظH��tL�����H��L��H������H;]|�H��L�,$�Ш��I���x���H�N0H�V L�F(�K���HcF0H�v H�DH�$�H��t�w�H�u`H�D$�H��tL���\�H�}8H�D$�H��t�4���H�D$HcE4H�u(H�DH�D$ �H��tL����H�}@H�D$(H��� �H��t���H�D$0�Eh��H�uPH����L�����H�D$8�Eh�dH�uX�H��tL����H�}HH�D$@�H��t���H��
H�D$H覧��I���N���H���V������H�N H�\$PH�}�/1��H���Bh��H�����H���R����v���H�F H�|$P�D$P$�D$R�D$Q�ѱ��H���)����M���H�N H�V(���H�~0H�N(H�H�V 1��H���h���H��H������I�����H�V H�����H�N(�s���H�v(�r���H�u8L��I���c���H�u H�øH��tL����H�u0H�$�L�l$H��tL���k�H��H�D$H�\$�t���I���������I��@H�u �H��tL���*�H��L���_���H�m0H�����H�EH������t�H��L����H���pH�N(H�V 1�L�N8L�F0��V�I������y���I���@H�EH����9�u�H�u �H��tL����H��L���н��H�m(H��uǾL��躽���E���H��������H�v �H��t�U�H�}0H�$�X������H�v �H��t�0���H�$�2����m���H�v �H��t�
���H�$�����G���H�v �H��t����}@H�}0H�$H�H�Ѓ�H�D$�կ��H�}8H�D$�ǯ��H�u(H�D$�H��tL����H��H�D$ 誤��I���R������K���H�=��,H��1��
���H�D$81�����H��tH���H�H�u H�$�H��tL���.�H�D$�����������A����1��e��I�����H�D$8�"���H��dH��u%H���,D�H������H�܀dH��t�H��迮�����H���dH��u'H���,��H���Ӎ��H���dH��t�H������H������袠��1����ff.���H��H��H�5�nc�b��H�pH�8H����f�AUATU��H�5bncSH��H���b��H��H�p9n��H�81��K�I��H�L�h�=�H��H����H9���L��H�<�H��u1H��udH�H9�dt1H���� u�I;\$}fI�D$ H�<�H��t�@��u*H�GH9�duω��N���H��H�����u8I�$�DH��tRH��t\@��u.@��t`H��qdH��@�H��H��[]A\A]�DH�ldH��Z���f�H��qdH��B����H��mdH��2����H�YpdH��"������AWH��AVM��AUM��ATI��UH��SH���M$H�����U$H��H���T$�D$H���H�C����H��H���肞��H�xI���|H���:H������I����H��I�������I�������I��������L���H����H���c�H�Njt$H��[]A\A]A^A_���f��۔��H���BH�U �B��wF���BH�ZH���5���,H�%�H=p�H�C�p\�t$���@����H�H�P �B��v�����H�H�P �B��v�����H�H�P �B���n������}H�H�P �B���R������aH�H�@ �P�����u|H�X�5����H�@I� tI�Gf�8-e�h���H���h���H���p��L��L��L��H���eH�8�B�H�����f.�H���h���H��H�����H���[]A\A]A^A_��H���x�I���������H���I���������H����	���f�H����o����tH�qdH�5��,H�81�輥��@L��L��L��L�����H��������u,H�H�x ���H������H�?kdH�5�,H�81��n���ff.���H�5ugcH�=מ0陰,f���H�UhdSH�5�,H�8襛��H��pdH�5a1H��H��{dH��g��H�H�=s{dH�5Y�,H�]{d�xg��H�=Q{dH�B{d��a��H�=6{d[��a���H��u�)f�H��tD�D��E��t�H��u!��D1�H��u1��fDH��t�D����t���H9�wҸH9�r�H��t�H��H��D�L�D�D
�E9�u.H�H�1�1��f�D�L�H��D�D�E9�u
H��H9�u��f�E9������H��t-�H�GE1���t�Z@I��H�@�H���uI��I�PH9�u���I����A�	L9�vJ��H��f.��H��H9�u�1��I��A����A�ҸA��UA��SA����pD)�H����tlL�V�I)�L��H��I��1�H��A��uH��I��1�A�1�tJA�H�D$I�H�H�D$ L�H�D$(H�8H�D$0H�(H�D$8D�[]�f�H��H)�H��1��H�n�A������@I9�I��UMF�SHcD$H��M��t&E1�@B��C�,�H)�H�B��I��H�� M9�u�I9�v\M9�v�G��L)�B��I��H�� M9�u�H��t{I9�sJ��H��fD�����H��H9�u�[]�f�L9�v�H��t+fDB��I��H��A��H�� F��I��L9�t�H��u�H9�u&H9�u!1�[]�@H9�uH9�t�I9�sf�B��B��I��L9�w�L9�v�J��H��f��H��H9�u�1��ff.�f�SL9�vH��L��I��H��L��I��D�T$1�E����E1�H��t"F��C��I�L�B��I��H�� L9�u�M9�w+�Ef.�C��H��H����H�� B��I��M9�tH��u�I9�u?I9�u:1�[�fDM��L9�v�H��tB��I��L9�v�I9�uI9�u1���@C��B��I��M9�w�L9�v�J��H��f.��H��H9�u�1��ff.�f���H�G �ATA��UH��SH��fH�=KgdffH�C~��H��(�
H�8�Y��H��H�E��t3�� H�EH��w3H%���H��H��H	À�@H�]���H��[]A\�f����H�EH��v�H�߾�F���H�]H��H�E�ƕ��H��[]A\�ff.�H��ATH��U��H��SH��Ic�H��I��H�ʉ�H�pH��H��H�4H��bdH�8����H�@tUH�xH9�vCL�Uid1�1���S�I���xH��D�H	փ�~
�7�� H�� H��H��H9�rυ�t�7[]A\�@H�xH9�w���DAUI��ATMc�UH�Չ�SH��H��H��H�&bdH�8�v���L�PH�@uL�PM��t1�fDA��H��I9�u�H9�sbA�L��hd�H��H9�tG�1�I���x�I9�wH��t�I��I9�v�fDI�<�H���7I��H�H�� ���H��[]A\A]�DH�qadSH����H�8���H��H�H�� ��@t41���H�X@��H��H��H��H���HD�H����H	�H�[�H�PH�1҅���H�ɹHE�H�P[�AWAVAUI��ATI��USH��H���@��H�_I�m��@��I�mH9�H��`dI�޺LM�H�8L�����I�T$I��I�$@uI�T$M�EI�E@uM�EM�gI�@uM�gH��H��I��L��jL���F���ZY��u8H��L��[]A\A]A^A_�fDH�����d���@H�����@���@����I�'����f.�ATI��USL�H�7L��H��
H���9�A��H��
��A8�t$9�t[L��]A\����@[H��]L��A\������@��H����A��@��M�L$I�AI9�H�VH��HC�H�j_dH�8H��A�����M�$H��A��@��M�L$M�D$H���@umH�KH�SH�u��@uIH�uH�}H��j�F���XH��Z[]A\�@H�wA��@�g���I��A���_���f.�H��H�}���H��H�S���I��M�D$A���i���ff.�A�ɉ�A��H��A����pA����E��tOA���������H���t	��@��H��t{��H��H��H9�sQH��H��p+H����H��v�H�3fdH�5��,H�81��Қ��H�fdH��H��H�5��,H�81�贚��H��edH�5�,H�81�蜚��H��ed1�H�5��,H�81�肚��H��edH��H�5��,H�81��g���H��edH�5�,H�81��O���H��edH�5$�,H�81��7���H��edH�5��,H�81�����H�hedH�5
�,H�81������PXH�5H�,H��H�<ed��H�81����PXH�5?�,H��H�edH��H�81�这��ff.�@Uf��f(�SH��f/�fT6�,��f. �,�
f(�f.����,1���,f/�s���H���Y�H�kf/�s�H��1�H�k\df/��L$H�8������L$H�@H�ptC���,H��t+fD�Y�f��H,ɉʉ�H���H*��\�H���u�H��[]�@H�p�f�f.P�,f(�fW
�,�(���H�5�,H��`dH�81�莘��fDH�����1�1��<���H�5Է,��H�5Է,��fDAWI��AVI��AUI��ATUSH��xH�t$H�\$0L�d$@L�D$H��H�l$PL�L$dH�%(H�D$h1�����L�����H����H��E1�E1�AV������L��H���R���AYAZH�D$L�T$I9���M9���H��H��H����L��H�t$(H��E1�E1�U������L���Ҁ��H�D$8Z^H�T$I�L�H)�t1�f.���H��H9�u�H��蘦��L��萦��H��舦��H�D$hdH3%(uNH��x[]A\A]A^A_�f�H��E1�L��L��PE1ɹ������p���_L��AXH��H���/L���6����U���DAWAVI��AUI��ATUSH��H�t$ H�\$@H�l$PH��$�H�L$(H��L�D$L�L$H�D$dH�%(H��$�1��s���H���k���M����L�|$`L���U���M����ASH��E1�E1��t$H�t$ ���諅��A\�t$ �E1�E1���H��H��$�臅��XH��ZL��H���r��H��H�\$8�:���H���2�����H��L��QE1ɹE1�AW���H�D$H^_H�T$ I��H)���L�������L�d$pL��蓎��H��H��E1�t$H�t$ E1����������^�t$ E1�E1�������H��H��$��Ʉ��_H��AXH��L��L���e|��H��H�\$8�x���H���p���H��E1�E1�AW������H��L���O~��H�D$HAYAZH�T$ I��H)��D1�f���H��H9�u�L��L�d$p����M����H��$�dH3%(��H�Ę[]A\A]A^A_ÐM����L�d$pL���z���H��H��E1�t$H�t$ E1��������Ճ��AZ�t$ E1�E1�������H��H��$�诃��A[H��A^H��L����X��H��H�\$8�`���H���X���H��E1�E1��AT�����H��L���7}��H�T$HAX1�AYH�t$(I�L�H)�H��tf.���H��H9�u�L��������L������fDH��E1�E1�H��t$H�t$ ���������X�t$ E1�E1�H�������H��$��Ƃ��ZYH��H�|$`H����o��H���|���H���t����e���蚉��f.�AUATA��USH��HH�7H�|$dH�%(H�D$81���@��H��L�oH���H�l$ H���ċ��H��E1�E1�AU������H��H���#���XD��ZH���f��H�T$H��� ��H�p1��\$$�6���H��H�{H� tH�{H��D���'|��H��蟡��H�CH� tH�CH�s�|0�t[H�D$H�D$H�D$H��H�L$8dH3%(uGH��H[]A\A]�fDH��1�趞��H���{���fDL�oH�_�
���H��H���l�����E���DH������uH��u��f.�1��ff.�f�H�7��@uH�wH�H��t�fDH��H����H��u��f.���1�E1�M��tT@F��L��L�tF��L�B��H�� I��M9�u�I9�s)fDH��tB��H�B��I��H�� I9�u��f�1��H�������AVI��AUM��ATM��USH��t1����H��I9�u�H��t>L��H��N�4�H)�fD���tL��M��L��L��H��I�<��*���I��H��L9�u�[]A\A]A^�@��1�E1�E1�fDF��L��M�E��L)�F��I�tB��H�� I��I�� I9�rЋ�H�L)��fD��AWAVAUATUSH��L�?L�gL�oH�_H�<$J��I�|�H�|$L��H)�H��H��H�D$�DH��E�t�I9���H�$H�@ H����H�t$A�D���9���A�T��H�� H�1�H��A�ƅ�t�H�D$L��L��D��H�,�H�����H��t�f�jH��M��M��L��L��H��A����Z��u�H��E�t�I9��m���H��1�[]A\A]A^A_�f.�A��������DH�$H�X��fDAVAUATI��USI����I��L�,�1��
I��I9���D��H��M��t�L�ًD�I��M�L��H�� HȉD�H�� H9�v9E��I��F��C��M��M��L�H�C��H�� I�H��IE�I��I9�u�H��t�A�L��H�A�D��H�� �l���AD�I��I9��g���f.�J�4��H��tH��J�4�HȉH�� tL��[]A\A]A^ÐM�M���AVD�AUATUS��utI��H��E1�1��@�L�5�WdE��G�E��xfA9�}aI��I��1�M��~
I����D�H��E��H�CE��t2A��_u�@�����_��@1�A��_u�[]A\A]A^��E1Ʌ���@��t1���u�M��t=��t9E��t4E��A�� t
A��	A��wH��M��~I��tD���fDM��uOI)�[L�!�]A\M�(A]A^�@H��I��@��t�1�@���Y����1���t��L���1��E���ff.�f�A�@�A��D��uT#�����E��tE���A��D)�I�� H��t6H�������D�M	�I�� I��D�H��M��H���u��H��u����E��H������D�I�� J�
1�I��H��I��H���u���ff.�f�USH��8D�dH�%(H�D$(1�E����L�JE1��DI��L��M�IE�A�I�BL��E��t�I��I�L9���H)�H)�L�\$H�$H�T$H�D$ H�t$H��'w	H��'v]H��H�-��A�H��H��H��H�D$ H�=����<���H�D$ H��t�H�D$(dH3%(uQH��8[]�f.�H��������fD�D��H)�H�<�H��L�މ��8���A��I��A�1��&�������ff.�H��u:I��u4�A�H��H�1�H��t�D�H��H9�u��fD��H���g���H���N���ff.�I��I��L��L��M9�wI��v1I��I��L��L�����I��w�M��M���_����M9�u3M9�u.H��t1����H��H9�u�M��t#L��L������I��I��L��L���������ATUSH�� H�H�|$dH�%(H�D$1���@��H�_Hk���H��LdH�,�H��H�8���H�t$I��H�@u}H�vI�|$I�$@uI�|$H��H��t1����H��H9�u�H��tH������H�D$H�D$H�D$L��H�L$dH3%(uGH�� []A\��H���f.�H�����;���@I��H��I��H��H���L�����~��H��SdH�5�,H�81��m���ff.�f�AUATUSH��(H�|$H�4$dH�%(H�D$1�H9��$H���@��H��H�H������@��L�fH��L��H��
H��
H�����8�H� Kd��H�8���j�H�T$I��H�@��L�$H��I�@��I��I�}I�E@uI�}M��H��H���L���H�D$H�D$H�D$H��H�D$H�$H�L$dH3%(L��uXH��([]A\A]�H�H�_��@�.���I��I��A���"���L�$H�RI�@�k���M�@�f���f��k���I����q}��H�JRdH�5s�,H�81����f���USH��H����u?H��u)�v��H��H���v��H��H��[H��]�w�����u�H���H��
u�H��H��H��[]�w��ff.�ATUSH��H��PL�O dH�%(H�D$H1�H��tsH���11�M��t?HcKL�o�,�Hc{H��1�H��H��H��A�A�	u�LccH�{ L�H�{ H�D$HdH3%(��H��P[]A\�fDH�6M��u�H��t�LcKH�|$?A�@L���,�H��H��1�H��I��I��H��A��WI9�v�H���������@L)�H�I��H9�wl1�H�q����H�CH�xH� tH�x�H�{ ��tH�GH�C �-H�{ M���,���L��H���C���H�{ ����f.��6�4����t{��H�MPdH�5��,H�81����ff.��UH��AWI��AVE��AUA��ATM��SH��H�qH��HdH�%(H�E�1�H����@H��H��H�E�H��H���H)�H���H9�tH��H��$�H9�u�%��+H�t$H���H��L9�s$L�3Nd�;A�<8x@�9H��H��I9�u��H�]�H��H�u��}��H�u�D��H��贀��H�5GdD��L��H�8��I��L�pH�@uL�pH��H�u��E1�S�����E1�L���l��H�E�Y^I��I)�t1�f���H��L9�u�H���Ȓ��H�}�uAH�u�dH34%(L��uMH�e�[A\A]A^A_]�H�QH�}�H���OG��H������H�}�����DH)�H�L������y��ff.�f�AVAUI��ATI��USH�H�
��@��H�ZH�jH��~)�D����t�,@�t����u H��u�I�][]A\A]A^øt�fD1��� u�H��uwH��NdH�81�H��� �H��I��H��H��>��I�@tuI�~H��uuH���^��M�4$�����I�][]A\A]A^��H��H�jH�����B�����t%H��tbH��tM��uf��tpH��JdH�8�i���H�z�`���I�~H��t�H���	���I�~I�@�r���I�~�i���H��FdH�8�&���H��JdH�8����H��DdH�8����H�KIdH�8���H�޿�6\��fDAVAUATUSH�L�/L�6L�M�I�H��u�v@H����A�l����t�H��1��fDI��H��H��tE�#E��t�H��u�1H��t(E�d��E��t��fDI��H��H��tE�"E��t�H��tE1�f�C�D�I��I9�u�O�l�M)�H9�sH��H��H��L��M��I��H��v)L�/1�L�6L�H�)M�I�[]A\A]A^�@1��_����H����A���tB�B�!���H��u
A�:�)I��M�йL��L��L���K�[�]A\A]A^�H��1�H��H��>@���H����I�D�I)�t����H��I9�u��1�H������1�M��t��A�D�H��L9�u��~����������t
�ҹ��)�H�<�M�D=H��t%1�1�DA�4�H��H	�A�D�H��H�� H9�u�I��A�I�T=I)�����1�D��H��L9�u�����L��L���P����"���A�UI�����1�A�D�H��L9�u�����H�޿�Y��@UH��AWI��AVAUATI��SH��xH�EH�u�H�U�H�E�H�E L�E�L�M�H�E�dH�%(H�E�1�H�E�H��tG1�A��H��I9�u�L9es+H�E�1�L��I��H�E�J�`H)�H9�HB�H�H;E���H�}�J��E1�H�E�H�H�}�H��x�����L�}��DL9e�����L��H��>�VH�}��H�EI��H�U�L��L��L)�PH�E���x���L�L��H�E���L�E�M���$L��L��L��L���#��I�XZL9m��TH�]�H�E�J��L)�L�<H�E�L9�IG�L)�M�4K�6H9��N���O�,H�}�H�u��uI�H�U��u�I��H��L�L�U�L��H��L��h���L��H��p���A��H�E�L��h���1�H��^_J��H��p���t@��H��H9�u�H��M��I��j�#����H�U�H�}�L��H��p������H��p������DI�����J��H��H��H%�H)�H���H��H9�tH��H��$�H9�u����H�D$H�MH���H�E�����L�}�H�U�Le�1�K��L)�tf���H��H9�u�H�}�uMH�E�dH3%(udH�e�[A\A]A^A_]�L��J�4�H��>uIH�VH�}�H����?��L�eH�E��v���H�}�胀���H)�H�L��L���L���VV���r���L���DV��@UH��AWAVAUATSH��H�}�L�uH�u�H�U�H��h���L�E�L��p���dH�4%(H�u�1�L9�H�E�A��L9���A!�A��t=I��L��p���L9���Džx���H��H��h���Dž4�����Džx���Dž4���H��p���H��H��H��H�E�H;]viH=���H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�E�L�t$I���H�EH�E�H�}�H��H��L�<�jH�U�H��L�H��`���J�?N�:N�,8H�E�K�D=L��H���H��X���H��h���H)�I��H��P����"��Y^Dž|�������E���H��H�U�I��H��jL��`���H��L������A[A\���H�EH�U�I��M��H�u�H�}�H��H)�PK�>P� D��|���AXAYE��tH�u�H�}��c����������|���I��L��I��>��M���WH�EO�>L�E�I��H�U�H�u�H��L��(���H)�H�}�PASH��8����L�E�H��I��H��L��L���$�Q��L�E�I��H��L��L��$�9��H�}�I��M��H���$H����D������L��(�����@���XZ��8���L�U�I��L��L+U�ASL��`���H��P���L��L�U�H��H����H�}�I��H��H��M���$H�����H�u�ZI��YL�U�I9�r
H�[H)�I��H��H��L��H��PL��X���L��L�U��u��L�U�M��I��L���$A��L��L���S����@���A[L�U�A^��t"M��tA�Et
�C�D�u	I��M9�uD���+�|���A���t4H��H�u�H�[L�E�jH��X���A�H)�D�}�H��H������_AX��x�������H��p���H�M���H�<���tH�u�L��h���H�M�H}�H)���H��h���H�M���H�<���tH�u�H�M�H}�H)�H��p���L�@��H�}���H�E�dH3%(�OH�e�[A\A]A^A_]��uH�U�I��H��H�u�AVH�}�I���9XZ�"���f�Džx���Dž4���������4������z���H��p���H�M���H�<����\���H�u�L��h���H�M�H}�H)����H�}��A���fDH�}���z���-���f.�H�}�H������Dž|�������DH�u�L��L��L�� ������H�EO�>I��L�E�H�U�H��L��(���H)�H�u�H�}�PASH��8����3L�E�H��I��H��L��L���$����L�E�I��H��L��L��$����H�}�I��M��H���$H����D������L�� ���L��L����@���L���?���^L��(���_�y����H��H�u�H�[E1�jH��X���E1�H)�H��H�����AYAZ�z���fDL�}�L��J�4�H��>uMH��H�}�H���8��L�}I���O���������|�������H�޿�+O����j��H�}���O���I��AVL��AUATUL��SH��L�d$0L�l$8I��E��L��O�I���������H��D��L��I��H������twE���fL�	I��I���������L��I��I��F�t�H���D�����E����I�L��I��H���T�����I��H��[M��]A\A]A^���M�L��I��H������tE���u���H9���I9���1�H��t���H��H9�u�M����H��L��[]A\A]A^�<�@I�H��I��H��D�D�E���W���E���N���M9�v&L�l$8I��I��H��L�d$0L��[]A\A]A^�K���H��I��I��L��H�dH��PAUAT���H�� []A\A]A^�f.�K�H��I��H������������
���f�I��I��H��L��[]A\A]A^������H��8H�|$(H�|$(H�t$ H�t$ H�T$H�T$H�L$H�L$L�D$L�D$L�$I�����u-�t$H�t$HL�L$L�D$H�L$ H�T$(H�t$0H�|$8���XZH��8�@UH��AWAVAUATI���������SH��H�]H�����H�U�L��0���H����H�]�dH�%(H�]�1�L9�H�E���L9���!ˆ�(���I�QH��I��H��L�<L�rI��K�vM�oL��H�I��I�wK�DmH��X���L�L;]vtK�[H��H��H�uH=���H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�D$H���H�E�@H�}�I�@L)�H��J�4�H��p���H�H�u�L�H��x���I�<H���H�H����H�H�H�����H��H��8���H�FH�H��P���H�H��H���H�H�H�����H��`���H�H��H�E�J��H�4H�u�H�H�H�u�H�E�H�EL)�H�E�H�E�L�H��@���L���(���H��h����HH��0���M)�L�����L�I�H�����L������H��H�U�H�}�L��jL��p���L��L��h���L�� ������H�U�M��L��H��x���L��@����$���^L�� �����_��H��H�}�L��L��@���jH��L�� ������L�� ���L��H��x���L��p���L��h����$L��L������h��L�����XDž@���Dž ���Z1�1��DH��A��H�H	�H�QA��H�� I9�u�D�� ���E����H��L�E�M��L��jL��L��L��L���������L�����AXAY��(���L��(�����u�L��0���M��L��H�U��u�L��H��8�����
_H�U�M��AXH��X����u�L��H��P����u�I���
AYAZ�u�H��x����u�M��L��H��X���H��H���I���
A[M��XL��(����u�L��L������u�H��X���M��L��L���`
XZ�u�L������u�L��L������H��p���H��h���H��`����-
H�}�L��L��L��P���M��L���$���Y^���HH�}�A�1�L��A�H������@����E���(���H��H�}�M��L��jL��H���L��H��P����*��_AX�E�����H�u�H�U�1�H��f�H�ʋ
H	�H��H��H�J�H�� H9�u㋵@���9�(�����H��H�}�M��L��jL��8���L��H��H�������AYAZD9u���H��H�}�H�U�L��jL��M��I������E�Y^�E�H�u�L�]�1�I�L���@H�ʋ
H	�H��H��H�J�H�� H9�u�}���H��`���H�}�L������A�H�� tH�}�L�������E��}�9}���H��H�}�L�E�M��jL��L��H������A[A^���.	�}���H��H�}�M��L��jL��`���L��H������_AX�u�9u��H��H�}�L�E�M��jL��L��H�����XZL��E1�J��H��>A���F
H���-L�U�LU�M��t"1�fDA��H��I9�u�H���6L��L��I��H��H��M)�H��L�L)��L�<��E�L�U�����H��L�E�L��L��jM��L��L��L�]����AZL�U�A[L�]��}�M)��TH��L�E�L��L��jM��L��L��L�]�����L�]�Y^H�}�L��L)�L�D�}�E����H��L�E�M��H��jH�����A[A\H�E�D�T��H�E�E��t�G��|�����4H��u�H�����t%H����H�����fDB��I��I9�u�H�}��,H�E�dH3%(�	H�e�[A\A]A^A_]�f�H��h���H������H��p���H�����H��@���H���������H��x���L���Q��H��H�}�M��jL��@���L��H�����L�� ���M��H��p���H��h���L��x����$L��L������-��ZL�����Dž �������@���Y����L������L�����Dž@���Dž �������@H��L�E�L��L��jL��M��L��L��������^L�������_����L��L���o��L�������(���Dž ���L��(������f.�H��L�����L������L��jH��0���L��H������H���L��M��L�����H�����$���L��(���Z��YL������H��H���L�����L��jH���%��L�����L��L������H����H������$���L�����YDž(���Dž���^1�1�H������H�ы�H�H	�H�Q��H�� I9�u�D�����L�����E���%H��L��L��M��H�����L��0���jH���8��YL�������^�$�u�L��0���M��L��H�U��u�L��H��8���L������zY^�u�L����u�M��L��H�U�H��X���H��P����N_AX�u�L�����u�M��L��H��x���H��X���H��H����AYAZ�u�L������u�1�M��(���L��9�@���L�����L��H��X���H��������E���A[A^�u�H��h����u�L��L�����L������H��p���H��`����X�����Z9� ����OH��H�}�M��L��jL��P���L��E1�H������$��AYAZH�}�A�1�L��H���	����(���9�@����g���H��H�}�L��L��jL��H���M��H��P�������Y^�E��k���H��L�E�M��H��jH���h��AXAY�����H��L�E�L��L��jL��M��L��L�]��6��XL�]�Z���H��L�E�M��L��jL��L��L��L�]����AXL�U�AYL�]��;���DH��H��H��>�H����H)����L�$H��tH�u�H�����t��L��������H��H�}�H�U�L��jM��L��I������u�_AX�u��������H�}�L���4����E����E����fDH��H�}�M��L��jH��H���L��L��8����*���A[Z���x���H�}�����E��c���f.�H��H�}�L�E�M��jL��L��H���!���}�XZ����H��H�}�M��L��jL��`���L��H�����AYAZ������H�}��n����E��u�9u������H��H�}�L�E�L��jL��M��H���i���Y^�����H�}�L���#����u�����f.�H�}�M���L��H��`����������H��8���H�}�H��H��x����r��L�U�LU�M��H��x��������fDH�E�H��`���H��L��x���I�<�r��L��x������fDH�}��?g������f.�H�}��g����u����fDH�uL�M�H�M�L�E�H��L�]�H����H�VH�}�H���&&��L�]�L�E�H�M�L�M�H�E��U�DH��M��L��L��H�����L��0���jH���S���_L�����AX����@H�����Ľ��H��M��L��H���L�����jH������L����M��H�����H������H������$觾��AZL�����Dž�������(���A[���H������H���L�����Dž(���Dž�������H�}������E��#���@����E���(���H�}�L��E1�����1����L����;��H�����L���ļ��L�����Dž������H�}��P;��H�޿�C;���V��ASH�����M��L��L��P���H�}�jL��蚽��A^A�Z��������_���@��H��8H�|$(H�|$(H�t$ H�t$ H�T$H�T$H�L$H�L$L�D$L�D$L�$I�������tH��8ÐH�L$L�$L�D$L�T$H�t$ H�|$(H���vbI���������I�QH��I��H��H9�v�t$HL��t$H���XZH��8�fDH��H�E���L��P�t$X�t$X��H�� H��8��t$HL��t$H��Y^�[����UH��AWM��AVAUI��ATSH��XH�]L�MH�}�H�u�H�M�L��G�d�dH�%(H�E�1�I�GH�E�H�E�E���PE��A���HH�E�H����I��H�M�H9M���L��J��H��>��H���6H�u�H��L��L��C��L�U����M��L�U�tAH��H��H��>�\H���H�U�M�H)�t1�A�D�H��H9�u�H�}�t`L�}�E1�L��H)�H��L�,�H��>A����K�4L�u�L��L���M��M��H]�M�L)�t�C��I��L9�u�H�}���H�E�dH3%(��H�e�[A\A]A^A_]�f.�A� H�}�H�}�I�O��H9���	�M��������H�<H�����H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u���-H�T$H����fDH�}���a���.���f.�I�GH=���H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u����L�t$I�������fDM�������|I�GH=���H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�t$L��I����DI�GL�M�H�4�H��>L�E�L�U���H�VH�}�H������L�U�L�E�I��L�M�����H��L�M�H�4�H��>L�E�L�U��yH�VH�}�H�����L�U�L�E�L�M�H��N�4O��M���l1�1�D���A�<�H��H	�A�4�H��H�� I9�w�A��A�3H���1�1�D���A�<�H��H	���H��H�� H9�u�H�u�A��L��H��L�U��(��M��L�U������I�R�1�D��f�A�4H	�H��A�DH��H��H�� H���u��Z���H����>I�BH��H��H%�H)�H���H��H9���H��H��$���fDL��L��L�M�L�U��j��L�M�L�U����L��L��L�U��qj��L�U���������4��H�u�1�L��L�U��D��M��L�U����������1����L��L�u��t���H)�H�L�����H)�H�L��7�����t	H)�H�L�H�T$H����I�GL�M�H�4�H��>L�E�L�U�u}H�VH�}�H�����L��L�U�L�E�I��N��L�M����H��L�M�H�4�H��>L�E�L�U�u\H�VH�}�H���O��L�U�L�E�H��L�M��3����O�����3��H�}����3��H�޿�3��L����3���H���3���AWI��I��M��AVL�4�L��AUN�,7ATI��UH��SH��hdH�%(H�D$X1���$�����M��uH��uyI�����؃�p��@�#���I���	I���A���yA�ȉځ���������1҅���؃����H����M��uv��%��u2����H�\$XdH3%(����H��h[]A\A]A^A_Ë�$��������������M��t�L��H��������u��L�T$H��L��L��H�D$4��PH�D$PPH�D$hPH�D$XPH�D$pPL�D$`L�L$X�޳��L�T$8H��1�L�\$xH��$�1�L�|$pH�T$hM�L�L�T$`H��0O�;L�t$I��L�l$I��M���m�E1ɉ��"��H�WH�� ��Hct$,I��I�M9�t"H��A�H��H	ЍQ��͉�H����fD�|$(�΅�uM9�tkM�H��O�;M��u�H���|$(��t�A�A��D�Ƀ�A"D�����I��L	���~��� ������H�L��H���B�H�� H9�u��)�M9�u�L�t$L�l$H��t"�H��L9������H���B�L9�r����M������B�D5��������L��H�������������J�T5��+�$��2�����	������ �����+�$���	�M��u�����������A�������ƺ��	��
�����������I����I���_�؃�����A������L��A�؉�H��A����PI��H��H��H��>����H���'H���.E���Q������tGM��tBI��I��E1�N�L�L��L��M9�sf��0�:H��H���x��rH9�r�I��M�M�M9�u̓��s��%���{�������A�M����o����p���A�����؃����6����؃�p������M��M����A��L��J�|=L)�A�����UE���C�|:���1��������A���W�ك���t�A�؉ٺA����PL��H��L�\$�L$D�D$��c��L�\$�L$D�D$���J�D5�H9�sH��2�8H��H���z��pH9�r��������҃����E�b���A����A��ف���tωƺ��	�t�
����������L9������H��H��ʉP�I9�w��l������
��L��H��������������������|-��A�f�����r���1�����E���������L��L��H��L�T$�b��L�T$�X���A��-�����҃���������������������������_��L��H���D���������D����H��DUA��H���@S1�H����H��訶��jH��H��j@E1�A������H��[]�ff.�@AWAVM��A��AUI��ATI��UL��SH��L��H���|$��$�L��H��$�dH�%(H�D$x1�����L9�w�)�H��L9���C���t�D��$�A��E�����D$���hH��$��yI���oH���u��$���p��@����$����|$��H���
H���4A���[
��$������V�L��$�H���|$L�I9���I9�s	I9����D$�t$��urH�\$xdH3%(�V
H�Ĉ[]A\A]A^A_�@D��$�A��I9����L��H��E���`H���W��$�%��D$1�������M��t����z����D$H��H��L��H�T$TRH�T$pRH��$�RH�T$xRH��$�R��$�H��$�L�L$xL��$������L$xA�L��$��M�L�$�H��0A��D$A���H�|$`L�H�|$Pt-E1�D�7I����@��ш��HcL$L��H�L9T$PwۋL$H��t���D!�ʉ�D!Ɉ�L$H�M9������LD$X�@�|$�uD�L$E���K�D$��V���L��H��f�1�L������1��=����H��H��L��H�D$TPH�D$pPH��$�PH�D$xPH��$�P��$�H��$�L�L$xL��$��٪��M��1�1�L��$�L��$�H��0A�@L�d$M�M�DH�T$`H�D$PL�H���D1����?@D��)΃�~<E�I��I��I	�D�Hct$LL��H��H��H�H9D$P��L9�w�����I����f.�H��$�����$������,@������M��L��A��������$�I��L)�I��I��I�ۃ�M��I���D$��$���P�D$M9���L��1�J��H��>����H���bL��M�L)�tf�A��H��H9�u�|$����|$��D�\$E����M��tVH��L��M�T-�f.�L��H��I9�vD��2H��H���p��JH9�r�I��H�I�M9�w�D�T$E��t*K�D��I9�s fDA�U�I��H��A�M��PI9�r�E�����D$����1��|$��H����H���p���A���<���A�$�����|$L)�A�UH���?N��o����I���8�����D�\$HE��tIL9�vwD��)�~E� ��I���� I��L	�D��I�����D)�H��I��I��I!�H��D�"HcL$LH�H9�vfD�HcL$LH��H�H9�u�M9�tLT$X�%���DAD��f�L�d$I9�s�@)��K���A���I��H��H	�H���2���I9��)����D$H���|����������D�D$E�������	I��I9�sA�<$��t�L)����H���@���A�$�B�!Ѓ�����*���@�|$t��$����A�$L)�A�EH���9��������.����D$����$���p�������L��L)��A�|�H�k��H��H��u�L��L��1��+���|$�u���$��t�L��K�.M��t9�H��H9�u�A�E�����I���A�EI����A�E��������I9�u�E���Q���H��L9��r���C�<4�g���������(���f.�L)����H��u
1�A�<$������r���A�������A�$������L)�fA�E�D$H���������������������$��te1�H����H���i���A���5���A�$H�؅҉�ɉ�D�L)�A�UH����H�������H	�H����!���������I���H��������!���@L��J��H��>��A�H�������L��L��L�T$0A�L�D$ L�L$L�l$(�X��L�T$0H�L$(L�D$ L�L$�W������$�����������I9���M�����|$�������$�������H��A������$�������L��L��H�L$(L�D$ L�L$L�T$0�ã��L�L$L�D$ ��H�L$(����E�������L�T$0A�I��M9������E1�C�<�A�����f.�A�������A�$H�؉�f���҉�D�L)�fA�UH���{���H
��H����k������M��tK�T��H��ȉA�H9�u�D$�������M���3������A�$L)�H��A�EH�������H��������'���A�������A�$��f���_���L��L��L�T$8L�D$(L�L$ L�\$L�l$0�V��L�T$8H�L$0L�D$(L�L$ L�\$�\���A�$��j���L��L��L���wV���;���H��L��L��H���aV��L��I�|H)�����L�ֿ�� ��A�|$�S���A�<$�H����d����s<��L�ο� ��fD��AUATUSH��(H�|$H�4$dH�%(H�D$1�H���@��H�$H�oH���@��L�aH��
H��
I�,����H��8�H��d��H�8���	���L�$I��I�@��I��H�T$H�@tcH��I�}I�E@uI�}M��H��H���?���H�D$H�D$H�D$H��H�D$H�$L��H�t$dH34%(uZH��([]A\A]�fDH�R�f.�H�$H��H��H�����@����I��I��A������fDM�@�F����;��f���ATUSH�� H�/H�|$dH�%(H�D$1���@��H�oH��dH�\-�H��H�8���H�t$I��H�@toH��I�|$I�$@uI�|$H��t1���H��H9�u�H��tH������H�D$H�D$H�D$L��H�L$dH3%(u-H�� []A\��H�v�f.�H�����H����:��ff.�@��AUATUSH��(H�|$H�4$dH�%(H�D$1�H���@��H�$H�oH���@��L�aH��
H��
I�,����H��8�H�od��H�8��蹢��L�$I��I�@��I��H�T$H�@t{H��I�}I�E@uI�}H��M��H��H��H���Pjj����H�D$(H�D$0H�D$(H�D$ H�D$0H�D$ H�� L��H�t$dH34%(uSH��([]A\A]��H�R�f�H�$H��H��H�����@�
���I��I��A������fDM�@�6����8��f���AUATUSH��(H�|$H�4$dH�%(H�D$1�H���@�=H�$L�gH���@�DH�YH��
H��
J�,#����H��8�H�d��H�8���Y���I��L9���H����L�$I�@��H�T$M�@H�@��H��I�}I�E@uI�}jI��L��H��j����H�D$H�D$ H�D$H�D$H�D$ H�D$XL��ZH�t$dH34%(��H��([]A\A]�f�H�T$I��H�@�~���H�R�y����H��H��L9��>���H�:dH�5�a,H�81���@��f�H�$I��I��H�A����@�����H��H��������7�����AUATUSH��(H�|$H�4$dH�%(H�D$1�H���@�-H�$L�gH���@�4H�YH��
H��
J�,#����H��8�H�od��H�8��蹟��I��L9��H����H���������H�SH��H��H��L9���L�$I�@��H�T$M�@H�@��H��I�}I�E@uI�}jI��L��H��j����H�D$H�D$ H�D$H�D$H�D$ H�D$XL��ZH�t$dH34%(urH��([]A\A]�DH�T$I��H�@����H�R�z����H�$I��I��H�A����@����H��H�������H�_
dH�5�_,H�81��>���i5��f���AUATUSH��(H�|$H�4$dH�%(H�D$1�H���@��H�$H�oH���@��L�aH��
H��
I�,����H��8�H��d��H�8���	���L�$I��I�@��I��H�T$H�@tcH��I�}I�E@uI�}M��H��H���ϥ��H�D$H�D$H�D$H��H�D$H�$L��H�t$dH34%(uZH��([]A\A]�fDH�R�f.�H�$H��H��H�����@����I��I��A������fDM�@�F����4��f���H���@u4H�W�H��t$H�O�	1���u�H��t
�ʫ��������ÐH��H�OH�¸��u��f.���USH��H��dH�%(H�D$1�H����S��@��t3H�H��^�����H�L$dH3%(����H��[]�fDH��t@��t5H���>H��H��H�$�+��H�����t=��fDH�H�ȃ�H��
u���@uLH�C1�H���z���H�S�M��H��<H��H�$�C+��1�H���������>����H��1�H�����+���H�S���u1�H������H���p����������� �����������H����`2����UH��SH��H��H�7��@t%H����H��H����H	�H�3H��[]�H��wZH��H����H�H��H	�H��@H�3H��t�H��H������B��H�3H��%@H��u�H�kH��[]�f�H�uQ�H���C��H�3H�CH��%@���H���{C���oCH�S H�CH�PH�#�����fDH�H���7��H�3H�CH��%@�j���H�K��rWH�I��H�S��H�t�H�t�H�sH��H)��I)Ƀ��������1҉у�M�	L�9�r�����f.��u�������C�����S�‹D��D�����DSH�7H����@uIH�wH��H���Q��H���@tH��H�S���D��[�@H�SH�C�D��[�fDH�����ff.�@H��H�7I����@uH�wH�豕����u!H����H��H���萕����t�L��H���@���H���u	�� H��f����H���AVAUATUSH��H��0H�|$dH�%(H�D$(1����H����H�D$H���@��H�pH��������H�t$Hމ$H9��uH�)�cH��
H����H�8�n����$H�@H�puH�p1�H��t��H��H9�u�H�T$L�JH�@uL�JL�D$L��L�L��M���Q1�1�DA�<�H��H	�A��H��H�� I9�u�A�H�l$H�l$ H�T$H�L$(dH3%(��H��0[]A\A]A^�f.�H�|$H�7H��xs��@��H��H����H9�sXH�l$H�t$�$H���Ӵ���$A��H�D$H�@L�`uL�`H�|$H9���E��u=@��[���fD�� u��@tPH��H����H��t�諥����u�H������ ���H��H�����C���f�H�G�J����H�wH��fD1�����f�H�Q�cH)�1҉$H��I��H�8蓖���$H�@L�PuL�P1�E��J�<�M��@��L��I��I���I��M�1��ډ�H�� fDE�D9�L	�H��A�T:�L��H��H�� I9�u�H��H�$����H�$�.���H��cH�5V,H�81��k6����,��fDH��x#u	H���D��H��1���H������DH�މ�H����H�����ff.�@H��H�?H����H��
t�D��@��H��H�PH����H��u�@H�����L����t�H��wRD�F�Mc�E��I��I��J�
N�L
�1�M)��D�H�� H��L�L9�u�� t=H��������?H9�v@H��H��H�D$���H�D$H���H�pH�P�]���H�@H9�w�H��H�Dø�f.�SL�H��L����@��H�GL�OH��tAH����E��E��uH��H��H��u�H9��]H���4L�KH�Cf�H���A�L��H�¾ H����t	�Ƀ�Hc�H)���K,H��5��H��6�g1�1�H��H9��n��Z,I��I�4�f�f.���Y�f��H���H*��X�H9�u�H��A��H��tH����s@A�����A��D���!�@��@������t�D!����u�XPZ,��Y‰�f���H*��X�H��t����L�DA�� ufW�Y,[�DL��L�Kf�H����H��t�����@H���
��L�L����@H��u����f�L��L�OH�����?���f�H��t�����fDH��1�E��E���'���H�������H�J�H��H������f��lY,���ff.�@��AWAVAUATUSH��8H�t$H��H�|$dH�%(H�D$(1�H�I��A��@��H�_L�d$I�$H�ׁ�@��I�l$L�~M��uL�~H����I��H��u�Xf�H���EE�l��E��t�H��t�E�\��E��ufH��u��#��H�|$(dH3<%(��H��8[]A\A]A^A_�H��H�����d����H��H�����7����M�d$�c���fDH9�r���A�L��A9L��r�H�{H�<$H��
H��
L�-��cH�4$����8�I�}�������I��H�@�'H�@H�D$H�D$I�}H��H�H��
��賐��I��H�PH�@uH�PUI��H��M��ATH�t$H�|$���I�AYAZ��@��I�NI�VH��H��u�%f�D��E��uH��H��H��u�H9���I�M��@utI�MI�UH��H��u�f��<���uH��H��H��u�H9�rsH�D$H�D$ H�D$H�D$H�D$ L��L��H�D$�Z!���O���DH��I�V���T���H��I�U�����H�@H�D$����f�L���8
���V���L���(
�����H�KH�$�e����Q&���\"��ff.����AWAVAUATUSH��8H�t$H��H�|$dH�%(H�D$(1�H�I��A��@��H�_L�d$I�$H�ׁ�@��I�l$L�~M��uL�~H����I��H��u�Kf�H���8E�l��E��t�H��t�E�\��E��ufH��u�� ��H�|$(dH3<%(��H��8[]A\A]A^A_�H��H�����d����H��H�����7����M�d$�c���fDH9�r�uA�|��A9|��r�H��
H��
L�5��cH�ك���H)�8�I�>H�q��H�4$�����I��H�@�*H�@H�D$H�D$I�>H��H�H��
���Ǎ��I��H�PH�@uH�PUI��H��M��ATH�t$H�|$�(���I�MAYAZ��@��I�MI�UH��H��u�(DD��E��uH��H��H��u�H9���I���@uuI�NI�VH��H��u� �<���uH��H��H��u�H9�rsH�D$H�D$ H�D$H�D$H�D$ L��L��H�D$�j���O���DH��I�U���Q���H��I�V�����H�@H�D$����f�L���H���V���L���8������n#���y��f�AWAVAUATUSH��(dH�%(H�D$1���@�zC���_�Lc�L�5|JdI��Hc�H��H��H�L�I�,�H��tPM��tH��H��H�H�*dI�J��I�EH�L$dH3%(H���BH��([]A\A]A^A_�f�����H��P,��L�<�H��Q,���D$H�V�cH�8見��H��H�@H�E@��L�8Lc|$L�|$H���\���H��H�L$H��H��H�vdH�L�I�,�H���s)"����fDH�T$�����H������H�H���@tHH��H�H��H��H��u� �<���uH��H��H��u�H9�r3H�d$�e���f�H�PH�H�fDH�E�6����H���X�����!���UE��H��AWAVI��AUI��ATSH��H����h���K�<L�E�dH�4%(H�u�1�H�E�H����YJ��H��H��H%�H)�H���H��H9�tH��H��$�H9�u���H�D$H���H�E�H�E�H�u�L�%.HdH��H�H��P����EH�u���Hc�H��H��X���H��H�M�<�M����H��N,��D�]�H��H��O,��H�M��E�H�<�cH�8茉��H�M�D�]�I��H�@I�@uI�GH�L��D�]��A���H��X���HcM�H�_dH��H��H�L��H��M�<H��Q'"D�]�Mc�D��M9�AF�L9���L�}�1��1�L�c�cLcUL�}��f�I��H��I9�tS�C�I���x�H��I��Hƒ�u�A��H��H�� H��A�TM9��H��D��1�I9�u��L�}�H�}���H��X���H���cDžl���A�H��H��H�H��I�4H�H��`���H�E�H��p���H��H���H�E�O�d-H�]�E1�J��H�E�I�GH��x����}H�E�I�N��M���@��I�OI�WH�E�M��L��L�]�L�H��H�E����H�E�L�]�L��H��L��M��jN�H�E�H��H��腆��Y^M�L)�L9u���I9��z���L9��)H�E�I�I��N��M)�N���@�GI�OI�WH�E�H��L�]�M�L�H��H�E��j���H�E�L�]�H��H��H��M��L)�jN�H�E�H��H�����XZL9u��n�����l���D�pA��A� >��H��p���L�xM���L�(M������l������H��X���H�5�K,�L�<�H�5�L,Hc�H�>�c�H�8艆��I��H�@I�E@uI�EL�8L���I���H��p���L��L�(H��`���H��m$"H��`���L��H�����H�I���@�aH�HH�PH��H��u�+f.��<���uH��H��H��u�H9��GL��H�����H��p���L��L�xH��`���H�X��#"H��p���M��H��`���L;e���H�E�H�}�D��l���H�}�H�E��X���DD�پ1����f�H��H��x������q���DH��H��H��>��H�������H�E�J�4�H�<0Hu��5���y���@H��H��x��������H�E�D�M�H�4�H��H��>�eH��H�}�H���H�D�]�H�E����H��H�P�����H��p���L�h�M������l����
H��p���L�h�M������l����bH��X���H�=[I,�H�5oJ,L�<�Hc��H���cH�8�C���I��H�@I�E@uI�EL�8L������H��p���L��L�h�H��`���H�X��%""H��`���L��H�X��š��I��H���@��I�UI�MH��H��u�$�D��E��uH��H��H��u�H9���H��iL���@������H)�H�L��s���H��X���H�=oH,�H�5�I,L�<�Hc��H��cH�8�W���I��H�@I�E@uI�EL�8L������H��p���L��L�h�H��`���H�X��9!"H��`���L��H�X��֙��I��H���@�*I�MI�UH��H��u�(DD��E��uH��H��H��u�H9��]H��D���H�U�H��P����t�����H�E����L����ulH��u�H�#�c��h���1�H�8�k���1�H��H�{H�@uH�{H���H�}���H�}�dH3<%(H����H�e�[A\A]A^A_]�H�E�H���cL�}���h���H�8L�����J��H��L��H��>����H���u���H�u�����H��I�U��H������H�E�H�}�H�E��%���H��P���H�U��D0�����H�1�cL�}���h���H�8L���t���L��H��H�����DL��������H�}��z&������H�u���1�����H��I�M��H���I���L������j���H��p���L�h�M������l�����H��X���H�=�E,�H�5�F,L�<�Hc��H�p�cH�8���I��H�@I�E@uI�EL�8H�]�L���|�H��p���H��`���L�h�H�E�H�G�L���"H��`���L��H�X��7���I��H���@��I�EI�UH��H��u�)fDD��E��uH��H��H��u�H9���H������l���H��H����}���}�H���Ŗ��I��H���@��I�EI�UH��H��u�+@D��E��uH��H��H��u�H9�sL���I���H�e����H��I�U���@���H�޿��������T��@L�������F���H��I�U���u���AWAVAUATUSH��H�|$H�t$ H�L$@L�L$0dH�%(H�D$x1�H����H��H��H��褍������E���SH�L$A�@��D$8�y��@�36��D�w�Hcl$8H�
�<dMc�H�L$L��H��L�H�(L�,�M���gH���cH�D$L��H��I�H�D$L�H��I�mH�D$H��@� 	I�mM�mD�|$8H�D$pL�d$HH�D$XE��E�� ���I�mM�mE���-E��H9�r!�aH�|$ H��L��H���y�����FH�D$E�r�Ic�x�O�Lc�H�L$L��H��L�H�(L�,�M����E���(H��B,��N�$�H��C,B���D$(H�E�cH�8�}��H��I��H�@H�@uH�BL� Lcd$(H��H�T$(�I�L��H�L$H�T$(H��L�H��H�H��H�L$L�$��]"L��H��J�8H�D$H�L�$�I�m��@����H��I����E������H9�w-A��4H�|$ H��L��H���x�����fDL�t$I�~ H��t"H�l$H�0H�L)�H���*��In fDH�L$0H�t$ H��H�|$艖��H�D$xdH3%(�tH�Ĉ[]A\A]A^A_�H�D$H�x H��tɋHA��@��3��D�y�Ic�H�5g:dMc�H�t$L��H��L�H�H�<���E���%H��@,��N�,�H�B,Jc,�H���cH�8��{��I��H�@I�$@��	L�(H���cH�D$L����L��H�L$L��H��L�H�L�$�H�L$H�,��"H�D$H�x �H���cH�D$L���0H��I�H�D$L�H��H������H�D$HX ���D�d$8E����H�@,��N�$�H�&A,B���D$H���cH�8�z��I��I��H�@I�@��	L� H���cLcd$H�D$L����L��H�t$L��H��H�T$L�H�L�<�L�$���"����A�r�H�L$Lc�J� L�,�M�������H�d?,��N��H�o@,B��L�L$P�D$(H���cH�8�Cz��L�L$PI��H�@I�E@uI�EL�HcD$(H�D$(L�����L��H�L$L��H��H�t$(L�L�L�,�H�L$H�4��"L��L��H��L�I�H�D$N�$�蚐��H�8H��I���@uIH�xL�HH��H��u�*�E��E��uH��H��H��u�H9���M����DH��L�H���A�r�Hc�H�H�L$(H�L$L�,�M�������FA�r�Hc�H�H�L$PH�L$L�,�M�������!
H��=,��N��H�?,B��L�L$h�D$`H���cH�8��x��L�L$hI��H�@I�E@uI�EL�HcD$`H�D$`L����L��H�T$L��H��H�t$L�HD$PL�,�H�T$`H���"L��H�t$L��H��L�HD$PH��H�D$P�"���L�I��A��@�/L�HH�xL��M��u�&D����uH��H��H��u�L9���
H�D$PH�H�D$P�g�H��<,��N��H��=,B��L�L$`�D$PH�h�cH�8�w��L�L$`I��H�@I�E@uI�EL�HcD$PH�D$PL���i�L��H�t$L��H��H�L$H�T$PL�HD$(L�,�H���{"L��H�L$L��H��L�HD$(H��H�D$(����L�I��A��@�L�HH�xL��M��u�$�D��E��uH��H��H��u�L9���H�D$(H�H�D$(���H��H�T$(�k�H�T$(�D����E��D9|$8t/H�D$H�x H��t!L�t$H�0M)�M�L�����H�D$Lp H�t$@H��L�KH�|$ A�L�H��M��Ld$0H�L�L�I)�H�t$H)�L�d$(H�t$����D��A����A�H��L��L��H�D$@L�T$8藊��M��L�T$8H�D$@u��I����G�D��E��t�H�L$L�L$(E��L��H�|$L��H�D$8L)��g���H��H�D$8t/H�\$ �|����,H�����t������H��u�L�L$0H�L$E��H��H�t$ H�|$��������f.�H��I��������A� H�L$ E1�1�H�TD��H��t"C�|�H��H	�B�4�I��H�� I9�u�A��L�l$ E1�1�D��@C�|�H��H	�C�t�I��H�� L9�u�H�\$ A�3A��L��H��L�T$PH��H�D$HL�L$8�;���H�D$H1�H��D��L�D$ L�L$8H�t�L�T$Pu��H���>H	�H��H��H�~�H�� I9�u�M����C�T�����]���H�L$@L�L$(E��L��H�|$L��H�D$8H�����H�D$8�p���DE1��4���I��H�xA������H)l$�p���fDA�P���@��+��Hc�H�|$H�4(L�,�M����H���cH�D$L��L��H��L�H�H�D$H�,��h���H�I���@�QH�HH�PH��H��u�*�D�,�E��uH��H��H��u�H9��HH����DA�P���@��*��Lc�H�t$L�L�<�M��������H��7,��N�$�H�9,B���D$H���cH�8��r��I��H�@I�@uI�GL� H���cLcd$H�D$L����L��H�T$L��H��H�t$L�L�L�<�L�$��"L��L��H��L�I�H�D$N�$��;���H�I��I���@�9H�HH�PH��H��u�*�D��E��uH��H��H��u�H9��%M��A���DI�D$�=���fD����H��6,��N�4�H��7,Nc$�H�y�cH�8��q��I��H�@I�E@uI�EL�0H���cH�D$L���}�L��H�T$L��H��H�t$L�H�L�,�L�$��"����H�y�cH�D$�����I�G�g����L������N���H��H�P������H��H�P�����I��H�xA������A�P���@�r(��Lc�H�t$L�L�4�M����H���cH�D$L��L��H��L�I�H�D$N�$�耇��H�I���@�]H�HH�PH��H��u�*�D�4�E��uH��H��H��u�H9���M����A�P���@��'��L��Lc�H�L$H��L�L�H��H�@�cH�D$H�������H�5,��N��H�6,Nc$�H���cL�D$H�8��o��L�D$H��H�@H�@uH�AL�L�d$pH��H�L$��L��H�L$H�t$H��H�T$pL�H��H�L$(L�H��H�5��cH�t$H���
"H�L$(L��H��H��L�I�H�D$N�$��(���H�I���@��H�HH�PH��H��u�*�D��E��uH��H��H��u�H9��wM��M���L�������L��������A�r�H�L$Lc�L�H��H�������>H��3,��N��H��4,B��L�L$h�D$`H�?�cH�8�n��L�L$hH��H�@H�@uH�BL�HcD$`H�D$pH��H�T$`�<�L��H�T$`H�t$H��H�L$L�H��L�H��H�t$pH�4��K"H�T$`L��H��H��L�I�H�D$J��H�D$`�ӄ��I��H���@�hM�MI�}L��M��u�#f�����uH��H��H��u�L9���H�D$`H�H�D$`����M���hC�L���������H�L$@L�L$(E��L��H�|$L��H���&����H�D$H�D$���L�����M�������L�d$H�B�H��H�P���������H�2,��J��H� 3,Nc,�H���cH�L$H�8�l��H�L$I��H�@I�@uI�FH�H���cH�D$L�����L��H�T$L��H��L�L�L�4�H�T$L�,��
"����H��H�P���K���H��I�}��I�����L�L$(H�L$E��1�H�|$L��H�D$8��H�D$8���A�P���@��#��L��Lc�H�t$H��L�L�L�4�H�1�cH�D$M�������+H��0,��J��H��1,B��H�L$ �D$H���cH�8��k��H�L$ I��H�@I�@uI�FH�HcD$H�D$pL�����L��H�T$L��H��H�
��cL�H�L$L�L�4�H�T$pH���	"L��L��H��L�I�H�D$N�,��$���I��H���@�/I�VI�NH��H��u�$�<���uH��H��H��u�H9���M��7���H�T$pA�p��y��H�����H��H���@��H�QH�yH��H��u�#D��E��uH��H��H��u�H9��CH�d$p����L���;��1���L���.��|���H�T$XA�r����H���C���H��H���@uxH�zL�JH��H��u�)fDE��E��uH��H��H��u�H9���H�d$p���L�����W���H��I�N��H������H��H�y��H������H��L�J��H��뀉�H�T$pA�p��P��H��蘀��I��H���@��I�FI�NH��H��u�&�D��E��uH��H��H��u�H9�rvH�d$p����L�����[���H��H�L$��H�L$���H��H�T$`���H�T$`����L�L$(H�L$E��1�H�|$L�������H��I�N���Z���L���������ff.��UH��AWAVAUATSH��H�}�L���l���dH�%(H�E�1�H��A��@��H��I��H��p���A��M��M���H��p�����I����F�l��E��t싅l����P���"��	H��������I9���	Hc�H�m&dH�5F�cH��H��x���H��H�L�<�M����H��x���M�nL��`���E1�I��H��L�m�H��H�H��L�,H�H�E�M��H��P���I�H�ǁ�@�?fDI�wH9u��?E�l$A��A�c��M�~M����M�>M��uxE���H��x���H�g,,�H�
{-,L�$‹����X���H���cH�8�Jg��I��H�@I�@��L� Lc�X���L�����M�>L��L�#�6"L��L�#��}��H�I���@�lH�PH�xH��H��u�+f.�����uH��H��H��u�H9��'L��M����M�~L��L�c��"I�I��H��E��H�ǁ�@����H��H����H9u������H��x���H�
U+,L��`���L��H�
c,,D��H�M�H�	H��
H����L9��4��l����M�D�M��U�L�E�H�E�H�E�E���/H��p���H�}�1�L������H�]�H�]�H�E�H�E��H�}�H�u�H�GH� tH�GH)��n��H�]�H�E�H�E�H�]�dH3%(�H�e�[A\A]A^A_]�H��H�x�����M�~�M��u{A����H��x�����H�
E*,L�$�H�
Z+,����X���H���cH�8�2e��I��H�@I�@uI�GL� Lc�X���L������M�~�L��L�c��"L��L�c��{��H�8I���@��H�xH�PH��H��u�'@D��E��uH��H��H��u�H9��%M��q���DL���0������H�q),��L�,�H�|*,Lc$�H�	�cH�8�Yd��I��H�@I�@uI�GL�(L�����H��x���H�5<�cL��H�u�H��H��H�H��L�$L�<�*"H�u������M���l���A��D�M��M�L�E�H�E�H�E�H�E�Ic�H����I_J�<3H����:H�4�H��H��H��H���H)�H���H9�tH��H��$�H9�u�%�t	H)�H�L�L�\$I����xf.�I�G�����H��H�P���Z���H�_L�wH��p������@H����H�J�3H�4�H=��O���H�VH�}�H���U��I��H��p���L��J���[��E1�H�}�E��H��L��H���c�H�}������H�}��������f.��H�=��,�Ϸ������f.�M�~�M����A���M�~�M��u}A����H��x���H�(',�L��H�8(,Lc$�H���c�L��X���H�8�	b��L��X���I��H�@I�@uI�GL�L������M�~�L��L�c���!L��L�c��x��I��H���@�\I�I�WH��H��u�)fDD��E��uH��H��H��u�H9�� M��H��H�4�H��>����H���a�����m��H��x���H�/&,�L�$�H�?',�����X���H���cH�8�a��I��H�@I�@uI�GL� Lc�X���L������M�~�L��L�c��!L��L�c��w��H�8I���@uOH�xH�PH��H��u�D��E��uH��H��H��u�H9�r+M��u���f�L���������H��H�P���L�������H��I�W��H�����M�~�M����A����H��x���H�%,�L��H�$&,Lc$�H���c�L��X���H�8�_��L��X���I��H�@I�@uI�GL�L�e�L�����H�E�M�~�L��H�C���!L��L�c��{v��I��H���@uPI�WI�H��H��u�)fDD��E��uH��H��H��u�H9���M��r���L���������H��I���H���H��P�����l���A�t$����H����u��I��H���@uKI�GI�WH��H��u�#@D�$�E��uH��H��H��u�H9�r#H�e�����L���p���f���H��I�W���L���V���Ӌ�l����e��H���cH�5S ,H�81������l���ff.����H��c1҅�H����H�8�c^����ATUSH�H����@��H��
H�o��H����H���cH�8H���#^��H��I��H��H��>��H�sH�@tI�|$I�$@t"H��u'L��[]A\�f�H�sI�|$I�$@u�I�|$H��t��N��L��[]A\�fDH��H��
H������H���a�����uH�{�]����H��t:H��tD��u��tJH�s�cH�8�0���H���cH�8����f�H���cH�8�����H���cH�8����H�9�cH�8���H���$��@��������H��uH���@��u��5��D��H�m�cSH����H�8�\��H��H�H�� ��@t0H��H�XH�H����H�����H��H	�H�[��H�PH�1�H����H��H�P[����H��x��f�H��H�����H� ���H����AUATUSH��H��(H�H�|$dH�%(H�D$1���@��H��L�gH����H���|H��H�x�cA�LM�H��
H�8��L���[��H�xH�@�#H���A�$�H����E1�1���J��C��H���KM����M�AH�� H)�H�H��B��H�� L9�u�M9�)�~fD��H�� H)�B�4�I��H�� M9��ZH��u�J��I�XH��H���Y�����H��I9�~H�������H��I9��H��H�$�s���H�$H�0 H�T$H�T$H�T$H��ts�uoH������efDA��H����H��H9�����H�x�����H�oL�gH�������H�@H��H��H9���H�D?H�|$dH3<%(��H��([]A\A]�f�H������I�Y��H���I��H�� H9�~0H�KA��I��H���L����փ�L��H���T��H�� L9�u�M9������f�H�����������H��H���L9������������E���H��t1�E1��?���L��I�I����H�����<�ff.��AUATUSH��H��(H�H�|$dH�%(H�D$1���@�bH��L�oH����H���\H��A�H���cLM�H��
H�8��I��L����X��L�@H�@��H���A�U�H����1�E1��DH�<�A�T�H���H�Ήى�H�� H�J�	H�NA��H�� I��H9�u�I9�~9H��u�DH���7H�щ�H�� J�A��H�� I��H�QI9��H�T$H�T$H�T$H���6H�|$dH3<%(�H��([]A\A]��A�T�H��A��H��H9����fDL�@����H�oL�oH�������H�@H���H�D�|���f�M����A��H�^��I��A�8H��I�� H9�~9f�H�KA�T�H��M���d���A�у�H��I��A�T��I�� H9�u�I9������I��H�^�
DI��H�YM��t�I9�����I��H���L9�������������H���0������H�������M�������H��t E1�1��W���I��H�^�H��H�N���L�»��^�ff.�AWI��AVI��AUI��ATUSH��(H�H�ׁ�@�oI�AH�H���@�DH�^L�FH��� f�H���A�t����t�M�aH���@H��~A�D����t�E�|��E��uH��u�H9��7�!H���pH���]H���SI�$I�(M��tVH��
H��
�H�;�c����L�L$8�H�8�����xU��L�L$H�@H��H�p��H��1�H��H�I�M����I�H��c�H��
H�8���*U��H��H�pH�@uH�pH��1�H��H�I�M��������H��L�FH�������DH��H�������f�M�a����A�D��A9D������M��t1�L�L$��L�L$I�M��tM�MH��(�[]A\A]A^A_�f.�M����H��
H��
H��cL�U����L��L�L$8�H�8L�D$��L�T$���T��L�T$L�D$H�@I��L�XL�L$uL�XM���5I�H���cH��L�D$L�\$H��
H�8L�T$����S��L�T$L�\$H�@L�D$�FH�PH��H�D$H����SL��L��I��APM��菔��AZA[H�D$M��tGI�?��@��I�I�OH��H��u�#D��E��uH��H��H��u�H9���M�>M�������H�8��@��H�xH�HH��H��u�#D��E��uH��H��H��u�H9��&I�E�V���@E1�E1�A�M�������1�1�H�D$H������SI��L��L��APM���\��[]H�D$�
���H��I�O������H��H�H���Y���H�PH�����H��
H��
H��L�L$����H��cA�8���H�8���'R��L�L$H�@I��H�xuH�x1�A��H��L��L�L$��e��M��t#����L�L$I�EI�EI��� tOH� M���J���M�>�B���H�p�X���H��H�D$�J��H�D$����L��H�D$�3��H�D$�\���H� ����AUI��ATI��UH��SH��dH�%(H�D$1�H�I��A��@�:H�WH�H��tAH����D��E��uH��H��H��u�H9���M����H�}H�U�D��H�Ѻ H����t	����Hc�H��H)�H�X�H�� gH��~i1�H��1�L��H���H���L)�H�������f�H���|H�<$�������H�D$dH3%(��H��[]A\A]�@H��`���H��t�H��H���a���H���@H��H�}H�ƒ��9���DH������H�EI��A��@M��u�����H��H�H���������������,�X�����ff.�UH��SH��H��H�I��A��@��H�NH�~H��t8H����D��E��uH��H��H��u�H9�rYM��uDH�{H�K�D��H�ʹ H����t	����Hc�H��@H)�ufH��H��H��[]���DH��H�{H�����H�����H�I��A��@M��u��@H��H�~H�����H����{����H��H��H�T$���H�T$H���}���AUI��ATI��UH��SH��H��dH�%(H�D$1�H���"���I�$I�EH��
H��
����8�tH�<$H���@u<H�GH����H��tH�$H�H�D$dH3%(��H��[]A\A]�@H��H�W��tċ��uH��t���\����u�H��t���H�}1�H���Q��H�EH��t�H�<$�L���Q��H��|����H�W���u�������H��������?H9�w
H�D?���K�ff.���H�@H�x
H�D?���[�ff.���SH��H��dH�%(H�D$1��o���t{H��H��?H�H1�H)�H��H�$H��H�� H��H�A�@H��H9�sg�P���t�����A��A��Mc�H��t���;H)�L)�H�t$dH34%(uoH��[�f.�H���@u8H�HH�PH��H9�w��H9�t+�P�� A���t���H��H�H����1�H��t����,�ff.��H���@��H�GH����H�WATI��UH��SH���D���tq��H�߃���H�H)�H������unH�MH�E@uH�MH�T�1��f�H��2H�� H�H�r�H9�u�[]A\�fDH��H�W���|����fD1���H�������H�`�cL��H�5N
,H�81����@ATUSH���@��H�GH�oH��tPH��I��D���tH��H�ރ���H�H)�H������uTH�T�1��H�ʋ
H�� H�H�J�H9�u�[]A\�fD1����H������H��H�o���x���H���cL��H�5�,H�81���D��AWAVAUATUSH��dH�%(H�D$x1�H����H��H�t$H���r�H��������H9�wcHcT$H��H)�1�H��I��H��t
H)�H��I��H����^H��tL�eH�L$xdH3%(�rH�Ĉ[]A\A]A^A_��D�d$H�\$H�\$<H�t$H��L�l$TH�D$�D$8D�d$4����H��L��A�L�y,��k_��E����L�d$DH�t$L������D$H��u�D$D�����W����L$\A�����L�t$LH�\$`jM��AT�L��H���8���A_XD�L��E1��W�����H�L$(j@A�H��j��A�聗��_AX��H�D$(�������fDH��������@H��L��A�L��j��L�D$D�2F��XZ����t$\A���u�D$X����A�H�\$`N�$��L��L��H�����J�#H�SH���@�H9�u�D�D$D1�L��L��H��L�t$L�[���D$P�D$L���DH��A�H��H��j��L�D$H�F��AYAZA�H�L$ j@A��jL����O���H�D$(H+D$0I��A[A]����T$X������D$T��u0H�D$`H�\$`L�t$LH�D$hH�D$L�6���fDH��u2�D$LL�t$L�D$PH�D$`H�\$`H�D$h���DA�J���D�@9DPs L�t$L�L��L��蛴��I��u��H���n���I��u.H�D$T1�H�\$`H�D$hL�t$LH�t$DH�D$`H�T$L���A��I����r��A���p���������H��dH�%(H�D$1�������H��H��?H�H1�H)�H��H�$H��H�� H��H�B��t	�A�p���u:H��H9�w�H9�t	H��H9�tb1�H�t$dH34%(umH���H��H9�sϋ
��t�H��H9�u��.fDH���@u0H�PH�HH��H9�v��H��f.���P�������두H��H�P�����^��ff.���AVE��AUM��ATI��UH��SH��H��0H�|$dH�%(H�D$(1�H�D$H�D$�m��H�D$�tdH��xJH�D$ �H�t$ AVH��M��I��AU虓��ZYH�L$(dH3%(ulH��0[]A\A]A^�f.�H�ؿ�����fDL�L�ҁ� H�����A��@tH�pL��H����H����H�pH�P�p����V��fD��A��E1�����f�AV��I��AUATA�����UDE�1�SIc�讛��H��I� ��H��������H9���H�u1�� �I��H�PH� tH�PI�H�Z% H�������+�A�H��H��L��E)�A��Mc��=���H��t#H�+H�M
,D�H���
�K�H9�u�[L��]A\A]A^�f�H��x'H��1���I��H�XH� �{���H�X�r���H���cH�5>,H�81���ff.��UI�҉�SH��H��(dH�%(H�D$1�H���@��H�GH����H�W���uH����H���Q�����}E1�H��A�BL�׹��7�����y���؅�t:����H�D$H����H�$H��;��H�߉�H����H	��t����f���~KH�H������� t	@�H�L$dH3%(u4H��([]�@H��H�W���2�����DH�D$H�����������H�ۥcH�5,H�81��R�f���AWI��AVI��AUI��L��ATE��L��A��UD��SH��(H�<$L��dH�%(H�D$1�H�D$�F��1�H��������I��I9���J��L)�I��H�XH�����)�H��wzA��uqH�l$QM��M��ATH�T$L��H��H��計��A��XZA����y�T$�D$H��H�� H��QE���8H��������?H9��%H�l�H�y�c1�H�މL$H�8�@���L$H�@H��L�PuL�PQM��M��L��ATH�T$L��H��L�T$����AXAY���A��L�$tgH���U���H�MA���5E����� H�ME���5H���8H�|$dH3<%(H���H��([]A\A]A^A_�DH����H����A���T$�D$H��H�� H��-H��A�������xH��H��H9�����H�Z�cD��H���H�8���?��H��H��H��H��>��H�MH�}��@uH�}H������H�t$�����fDH�M��@��H�uH�}H�������M��������DE���������H�ME������H�M��@��H�MH�UH��H��u���D�<���uH��H��H��u�H9������H���_�������f.�L��L��L��L��H��I�Ճ���H��H��L��H��I��H��H�H)�H�Ӄ�H��H��H��H9��H)Љ�H����H)�H��������H9����H���cH�57,H�81����DH���H���A�������H�e���@�������H���Q���H�����f�HH��H)Љ�H����H)��r���f�E�����������f���k���fDI��H��������1�H��H�}H�����:���DH��H�U���n����H��c1ҾH�8�J=��H��H�PH�@uH�PH�D$H�H�EH�E@uH�E�@A�������������H�޿������A��1ɺ���f.���AWAVAUI��ATI��USH��HH�t$dH�%(H�D$81�H�D$0H���QD��H��H����A����L�T7�H��H�1��I��I)؉ƒ� �6��	���*@��tL�D$��+�A���-��H�D$H���AH��H��E1�H�D$�]@H��A�E����A���TD�u�A��"�H�D$H����H���H)�H��@�ǀ�0H�L$0@��@ ��.H��H�<E�ʸHH�H��A��E1�H�L$0E1�A���5�E������_��A����A�H9��MH���CH�S��0u�H��A��E1���f�L9��gH������f������H�D$A��
H������fD�M��tI�]M���	H�T$0I�$�H��A�����H�D$H�������D�u�A��"��H���H)�H�D$0H�ͤc����19��)M��t	H�D$0I�$L�T$0H�t$H�߉�L��L�D$,L�T$D�L$����L�T$H�NjD$,���QH�L$0H�H��t�:_D�L$�%M����I�UM��tI$H��������?H9��E��uH��H�D?�H�t$8dH34%(��H��H[]A\A]A^A_�D���'������
�e��������;0�qA�����A�����A)���`���1��a���f�H�|$0�L����M���H����9�����;0����H�D$H��������s�V���6��H�
��+��Hc�H�>��@A������fD1�M��L�D$L���‰�H���&K��������H�t$H�M��tI�uH�L$0M��tI$D�E�A��A���H�w�+Mc�1�Nc�I�D�I��H�H����H��A��I��H����S���H���1��h���H�D$H���9���H��H��A�H�D$�R���f�M��tI$�H���!���H�L$H�H9���H��y�:����������� ����	���������fDE��tH�L$0��uZ�H������H)�H�|$���f��;0tcE1����E��tA��A� ��A)�H��H����7������� t���	��v�H���fD�;0��A��+���@�S��߀�Bu�H���
���H��H��E1�H�D$����H�����H��H��A��H�D$����H������H��H��A��H�D$���H�������H��H��A��
H�D$���H���v���H��H��E1��H�D$�l���A���S���@H���F������P���H���`����C���E��tH�L$0��uj��l���f��;0��A����@���E��tIH� ���f�@��tL�D$L������fDH��A��H��H����6���R���f��� �T����H� ����9���E���E���H�L$0�;����S��߀�O�o���H���d���H��H��A�H�D$�\����S��߀�D�
���H���2���H��H��A�H�D$�*����S��߀�X����H������H��H��A�H�D$���������$;��@��SA��H��H��dH�%(H�D$1���u=H��1�A�H�����視���H��HD�H�L$dH3%(u4H��[�1�1�A�H������j���H��u�H�5X�+H���e��������ATA��U��S��H�� H�|$H�|$dH�%(H�D$1�讹��H�|$�ԝ��H�|$H� H�wtJH�E��uJH�T$1�A�A������H��HD�H�L$dH3%(u>H�� []A\�fDH��E��t�1�1�A�A��蝕��H��u���t�H�|$��9���4��@����"���f���AWAVAUATU��SH��8H�|$dH�%(H�D$(1��F���"���^�A��A!���H�|$L�l$�T$A��Ӝ��L��諯���T$I��H�D$H�@H�D$A�<$-uH��I��E1�H�D$H�L$L�D$��L���E����ttH�T$L��t��A� ��A)�H�L$E��L��D���3��L�l$ H�T$H��u"H�t$(dH34%(u1H��8[]A\A]A^A_��u�H��茜���Љ��8��H�|$�8������@��AWAVAUATU��S�^�H��8H�|$dH�%(H�D$(1���"��H�|$L�d$A��A�賛��L���˭��I��H�D$H�@H�D$H��~A�}-��H�L$L�D$D����L���D������Hc�H���+1�A��Hc4�H�D$D��H�D�H��H�T$L��L�H��2��L�d$ H�T$H��u%H�\$(dH3%(uKH��8[]A\A]A^A_�fD�u�H���d�����f�H��I��E1�H�D$�Q���H�|$�q7�����J7�����D��AWAVAUATU��S�^�H��8H�|$dH�%(H�D$(1���"�
H�|$L�d$A��A��s���L��苬��I��H�D$H�@H�D$H��~A�}-��H�L$L�D$D����L����B������Hc�H�A�+1�H��Hc4�H�L$D��H�D�I��H��H�T$ UL�L��L��O���L�d$0H�T$ZYH��u&H�\$(dH3%(uTH��8[]A\A]A^A_���u�H��������f.�H��I��E1�H�D$�A���H�|$�!6�����5���e��D��AWAVAUA��ATUS�^�H��8H�|$dH�%(H�D$(1���"��H�|$L�d$A��A��"���L���:���H��H�D$H�@H�D$H��~
�}-��H�L$L�D$D��D��H���rA������Hc�H���+1�E��Hc4�H�L$D��H�D�H��H�T$H��H�L��CJ��L�d$ H�T$H��u$H�\$(dH3%(uJH��8[]A\A]A^A_�D�u�H���Ԙ����f�H��H��E1�H�D$�Q���H�|$��4�����4���%��D��H��������?H9�w
H�D?���K0��ff.���H�@H�x
H�D?��H��x�0��fDH��H���0��H� ���H������AVI��AUI��S1�H��yI�ݻI��I��H�<�c��H�8�-��H�0H�HH����@tPM��L��D�)M�� D�qH�� D�I�Q�D�D��E��uH��u�1�H��u'H�P��tH� ���[A]A^�f�H�H�f.�H����H��H	�H���ff.�f���1҅���������1҅���������w������������9�����@���USH��H�I��A��@��I��L�OI��A����L����E��E��uH��H��H��u���H��L9���M����H�SH�CH��u�i�H��t[�L����t�U���"��H��������H9����U���H�߅���H��w}H��[]����f�L�GL�OM���K���H���H�=��,[]�������H��H�S���Y����H������H�I��A��@�&���fDH��[]�8��DH��[]������1��H��cH�5��+H�81����fD��SH�59�+H�����H��� uH��H9�wH��[�H���cH�5��+H�81��8�����SH�5��+H���l��H��� tH��x[�DH��H9�wH��[�H�e�cH�5��+H�81�����ff.����SH�5��+H������H��� uH��H9�wH��[�H��cH�5��+H�81�������SH�5P�+H�����H��� tH��x[�DH��H9�wH��[�H���cH�5n�+H�81��,��ff.����H���c0��H��uH���f��u�H��H�������H���Ӕ��f(�fT
w�+f.
g�+w
H����1�H�=��+�D$�̶���D$f��f/�w��+H����� �+H���ff.�SH��H�� dH�%(H�D$1�@���H��u)H���ѣ��H�L$dH3%(�H�� [��@��tzH���H��u�H��/�4H��H�t$�w���H�t$H�0fH~�H9���fH~�H��<�������wH��H�����z��d���DH���H��
trH���H���v���H���1���H��/�l����Ff��f.��&�/H�����H�ƒ�H�����@�v������H��H����H��H�T$1�H������H�D$H������������H��������H�t$�|��H�t$H���*���f�H��H9�uI�<���@H��f�H9��f���H��H��H��?H)�H	�H��H�D$�~D$�A���@H��H��?H)�H��H��H	�H��H�D$�~D$���H��H��H��H����������k���藽�����UH��SH��H����u[H��uH��H��H�ﺇ[]������H�H�ȃ�H��
�DH�ڃ�H��tH��u�H��H��H��[]��L�A��@��L��H�GH����H��u���H�����L����t�H��wZ�N�Hc���H��H��H�8H�|8�1�H)�f.��
H�� H��H�H9�u�A�� ��H��������?H9���H���6���@��uML�UA�� I��H�H��H��[]�H�؃�H�������	���H�wH�G�)����H�����H9�����H����[]H�BÐH�uH��H��
I���A�� ��8��x�����@uhH�KH�S��@uHH�uH�}� ����H���M��Hc�HD�H�D�G����H�@H9�����H��H�l�
���H��H�}���H��H�S�����SH��H�� dH�%(H�D$1�H���H�����Ff.��=f(�fT
I�+f.
9�+��f/�+viH�����H�L$dH3%(�H�� [��D$�D$蟫��H��H������L$f�f.���Eф�u�H��u�f/�v��뗐H��H9�uqf�H�|$�3��H��f(ȃ�������D$���+f/�w�f/��+�@����H,�H�H9��/���|�f�f/�w�f/�� �������DH��H��H��?H)�H	�H��H�D$�~D$��������ٹ��f�S��@��u-H��uH���+H��[���@��ujH���H��
��赌��H��t'H��臔����tb��t-���t��	�1�H��[Ð��x���f.�������DH���H���n��������f����y��DH���H��t�H��t��7���f���1�����D�������f������f�������f���SH���uKH��uH��H��[����f�����H�H�ƒ�H��
tHH�؃�H��tH��u�H��[�DH����@��u�ċ��H��H9�ut�[�DH�7H��H��
H���H��
��8�uMH���@tjH������@unH9su0H��H��H��>����H��utH�sH��teH�������t�1�[�@H�؃�H���J���H��H��[����@H�w�f.�H����H9�u�H��H�s�fDH�뙿蠛����SH��H�� dH�%(H�D$1�H���H��tH�Ff(��O�+fT
O�+f.�f��s<1�H�L$dH3%(��H�� [�f�H��H9�uif��f�H�|$�L$����L$f.�z�u��D$��t`�
��+f/�w�f/��+s��H,�H��H9��m����j���DH��H��H��?H)�H	�H��H�D$�~D$� �������H�L$dH3%(uH�� H��H��[����&���fD��SH��tH���t1�H��[��H�H�ƒ�H��
u�H�I��I��
H��A��H��
��A8�u�I��A��@uPH�O��@uWH9Nu�H��H��H��>����H��ueH�vM��tVH���M������HD��q���DH��H�у��@H����H9��L���H��H���f.�H��H�ο�m���ff.�f���H��胏��H�0 H��uH���f��u�H��H���p�����H���S���L�A��@��L��H�HH����H����A�� t[�u21��f.���uH��H9�u�H��H�D$�ԃ��H�D$L�I����L�H��ti�ueH��H���݇��DL��I�x�H�9�	fDH��H�r�H9�u�uEH�QI��@�2H�����r���u(I9�u�H�����H����H�HH�x�&���H�9�f�H��H�r�H9�u�I�� L��Q�����@��t6H��H��H��?H�H��H1�H)�H�H����H��
��8������H��u�+鑗���SH��H��H��@��tH���H����H���+[�`���H���H��
��H���H����H��u�H���"����KH�0�X�fH~�H9�t=fH~�H��<��������H��H��uH��[�����H��[�np��fD�H��H���h��H��tŨu�H��H��[����f�H��舴��f��H��H9��T���H�ڸH��H��?H)�H	�H��H�\$�~L$�*����fH~�H��H��H���L���f.���@��t6H��H��H��?H�H��H1�H)�H�H����H��
��8������H��u�-����SH��H��H��@��tH���H����H���-[鰕��H���H��
t|H���H����H��u�H���v����\CH�0fH~�H9�t5fH~�H��<��������H��H��uH��[�����H��[��n��fD1�H��H������H��tШu�H��H��[�e���DH�����H��H9��d���H�ڸH��H��?H)�H	�H��H�\$�\D$�:���fH~�H��H��H���\���f���SH��H��@����H��uH��H�ߺ*[�s���@���H���H��
��H���H��uRH��H�t$�-���H�t$f��H��H9�tNH��H��H��?H)�H	�H��H�t$�~L$�'fDH���i���H��H�t$�ѱ��H�t$�N�Y�H�0fH~�H9�t_fH~�H��<������tsH��H��u<H��[�fDH��H�腴��H��H���0��H��t٨u�H��H��[�Ă��@H��[�l��fDH���H���������fH~�H��H��H���D���/��f�����
��f���SH��H��dH�%(H�D$1�@��unH��u)�%H���̒��H�T$dH3%(u\H��[�fD@��u�H���H��
u�H��1�H������H�$H��t��u�H���܁���f.�H��H��e���H�����;���ff.���ATUH��SH��H��dH�%(H�D$1�����H��u`H�	�cH��u%L�%~�+D�	L�����H��cH��t�H��H��H�����H�T$dH3%(uaH��[]A\����u�H���H��
u�H��1�H��H���/���H�$H��t��u�H�������H��H��u���H����K���ff.���SH��H�� dH�%(H�D$1�@����H��u-�H���(���H�L$dH3%(��H�� [�fD@��u�H���H��
u�H��H�L$H�T$�$��H�\$H��t
��t%DH�|$H��t@��t H���8����fDH������H�������H��H�������c���H��H��}���H����S�����UH��SH��H��(dH�%(H�D$1�諀��f(����H�f(�fT?�+f./�+f��H*���H�0fH~�H9�t'fH~�H��<�������H��H��t�L$�ri���L$H��H�0fH~�H9�tUfH~�H��<��������H��H��u.H���ƛH�L$dH3%(uKH��(H��[]�x����f(��h��H����f�H��u+�H��H���;���H�L$dH3%(t�����fD����H���H��
�7H�ڃ�H����H��u��Cf.��]f(�fT��+f.��+�����H�|$�.m���5�$t���o��H�L$dH3%(�p����L$H��(H��H��[]�Q�Hc����H�؃�H���%���H��H9���H�ڸH��H��?H)�H	�H��H�D$�~D$�G���H���(���H�L$dH3%(���H��(H��H��[]�3��H��H��H��H���^���@H��H��H��H������@H�D$dH3%(�����H��(H��H��[]����f(�fT��+f.��+f���������H�D$dH3%(�F���H��([]�f.���H�����H�0fH~�H9�tOfH~�H��<������tH��H��u,H����fH~�H��H��H��H���f.�H���f�����H���nAVAUATI��USH��H���H���H����H���p@��uH���H���sH��
� I��A���CH�H����H�@H��H��H9��H�t?L���a����usH��t�t^H���<����
�+H�0�^�fH~�H9�t!fH~�H��<��������H���Sf(�H��[]A\A]A^�ve��H���H��
u�H��H�ƿ[]A\A]A^�Q����1ҾL���!h��H�H9���H����H9���H�@1�I��I�H����H���)'��H!�L��taH����H��L���M(��H�8��@��H�xH�HL��H��H��u�)f�D��E��uH��H��H��u�L��L��H9�rpH���w���H��t5�u3H��H��[]A\A]A^�*z��f.�H��H!�H�H��uH��u�1�H��[]A\A]A^�fDL���H��H�H���Z���H��H�D$����H�D$�y���f�H���y��H�ƨ����H���|������H��L�纆[]A\A]A^����I�$�VH���T$�� H��u��@ulI�D$H����L���ȧ���L$�ݓ��H�0fH~�H9�����fH~�H��<������tH�������H������H��I�T$��t�D�
E��uH��t�L���5����u�L���I����L$fW+�+�V����L$H��[]A\A]A^��*���H������H��H��H���f����H��I�$H�� H9�u4f���\$H�����L���ɦ��H�������I�T$�E���H���H��H��?H)�H	�H��H�t$���L�����H�MycH�5�+H�81����H�5ycH�5��+H�81��ԭ����ff.���AWAVAUATUSH��HH�|$H�t$dH�%(H�D$81�@��uXH��uAH�|$�&�Z���f.�H�|$8dH3<%(��H��H[]A\A]A^A_�D@��u�H���H��
u�H�l$H�t$ H���*��H�\$A��H�؃���L�d$H�t$(L����)��H�\$ L�|$(A��L9��(H��L�l$L�D$L�|$ H�\$(L��I��D��L�D$E��A��L�l$I�@�I��I�E@�I��E��H��ocL�D$LD�1�D�$H�8L�����D�$L�D$H�@H�puH�pH���~1�@A��A#L���H��H9�u�I9�~fDA�T�D!��H��I9�u�E��H��H�$��1�E��@��!��wr��H�l$0H�T$L�d$0H�$H�T$H���f�����^���H���u���Q����L�D$L�l$I�@�����M�@I�E@�����M�m���fDL�d$H�H�l$ L�d$(����H���OH��H��?I��I�$@�oI��E��A��H���J�A�E���6H�Wnc1�D�$H�8�
��D�$H�@H�HuH�HH���]H�SH���w�fDH�sH���
A�4�!�H�� �4�H��H9�u�H��L9�}Y@H�sH����D��!�H�� �<�H��I9�u�H9�~-A�4�D!��4�H��H9��I9�~E!�DD�4�H��I9��D��H��H�$��D!��p��H�T$(H�T$0H�$H�T$(H���M���1����@E��t�H�@H�xbH�D���f.�H��I�����DM�d$���fD1����f�L9��2����H9��'����:���H���*����%���1��������f���AWAVAUATUSH��HH�|$H�t$dH�%(H�D$81�@��uXH��uAH�|$�|����f.�H�|$8dH3<%(��H��H[]A\A]A^A_�D@��u�H���H��
u�H�l$H�t$ H����%��H�\$A�����L�d$H�t$(L���%��H�\$ L�t$(A��L9��+H��L�l$L�D$L�t$ H�\$(L��I��D��L�D$E��A��L�l$I�@�I��I�E@�I��E��H��kcL�D$LE�1�D�$H�8L������D�$L�D$H�@H�puH�pH����1��A��AL���H��H9�u�I9�~fDA�T�D	���H��I9�u�1�E	�H��H�$@���?n��H�l$0H�T$L�d$0H�$H�T$H���n�����f���H���~q���Y���f�L�D$L�l$I�@�����M�@I�E@�����M�m���fDH�T$H�L�d$ H�����H�T$(H9������M����H��H�*H��?I���@�LH��L�j��H���HL�H�jc1�H�8H���h��H�HH�@uH�HM���]H�SH���w�Vf.�H�sH����A�t�	�H�� �4�H��I9�u�E����L��I9�|rf.�1�E	�H��H�$@����l��H�T$(H�T$0H�$H�T$(H����������f.�H�TE��HD��������H��H�� H9�}�H�sH��w�E��uiI9�DH9��{���H��H���H��H9�u��\���@L�jH�j���E��uA�t��4�H��I9��E��t�H9��!����������H��H9�|�����1��n���1�E���^�����E��u��踛�����AWAVAUATUSH��HH�|$H�t$dH�%(H�D$81�@��u0H��uH�|$�^�ڲ���nD@��u�H���H��
u�L�d$H�t$ L���!��H�\$A�����L�l$H�t$(L���!��H�\$ L�|$(A��L9��3H��H�l$L�D$L�|$ H�\$(L��I��D��L�D$E��A��H�l$I�@�
I��H�E@�
H��H�qgc1�L��D�$L�D$H�8���D�$L�D$H�@H�puH�pH��� 1�fDA��3L���H��H9�u�I9�~��T�D1��H��L9�u�1�E9�H��H�$@���0j��L�d$0H�T$L�l$0H�$H�T$H��t�uH���wm��H�|$8dH3<%(��H��H[]A\A]A^A_�@L�D$H�l$I�@��M�@H�E@��H�m���fDH�D$H�H�l$ H��H�D$(L� H��?I��A��@�L�xL�`I���LL�H�fc1�H�8L���c��H�HH�@uH�H1�H��~+A�4�1�H�� �4�H��H9�u�L9�}hH��f.�D��1�H�� �4�H��I9��H9�~AfDA�4�D1�4�H��H9�u�I9�~#D��H��J��D1�f.��2H��H9�u�1�E9�H��H�$@���h��H�T$(H�T$0H�$H�T$(H���}����l����I��L�xA�����1�����D���@��H��SH���u!H��t�uH���H��
t<H���t~���t�H��xN��H��H�߃�H���"h��H��u"1�[�f�H�¾H���н��H��tިu�H��[�>k��fDH��1�뫐��H��SH���u!H��t�uH���H��
t4H����}���t�1�H�xI��H��H�߃�H���g��H��u1�[�@1�H��H���K���H��t�u�H��[�j��f�H�ؾ�fD��UH��SH��H��H����H���O���H����H�}H��H����@��H��H��H����H9��x���L������ЋT���!�� u>�����_H��t.�uH�ELŅ�t�G�H���P����1H9�u����H���[]�H;u��H�m�u���D@��t���"���H��H�����fDH�H�ƒ�H��
u�� t�I��A��@��H�{H�KH����H���fDD��E��uH��H��H��u�H9���M����H������H�SH���T������҃���Hc�H)�H������tUH�E�� ����@�H��[]�@�� ������D��������fDH��H����u4H�5s�+H����������H�CH��t�H�S�S���fDH�K����H���x��H�I��A��@�	���fD1�H���ަ��H�����-���f���SH�7H����@u=H�GH�H�4��8U��H�H��
��H1�x)H��������?[H!�H�D�DH��
H�����H��[H	�H�D�ff.����H��H� t��H���on��H� H�����H�H��
��Ð��H���@u4H�GH��t#H�WH���T���t+�҃���Hc�H)����H��H�W��u��f�1�鹥��f���H�����H��������?H9�wH�DH���f.�H��H���z��@��USH��H��8dH�%(H�D$(1�H�t$�I���H��H�D$�H��tGH� ���D$H��������H9�wGH�H��H)�H��������?H9���H�D?fDH�L$(dH3%(��H��8[]�DH�l$H�\$�D$H�t$H����I��H��H�߹A�L�]�+��S��H��H��H��jA���L�D$ ���XA�BZ1ɺ������_����H����t����t,�D$H�|$��t.���D$���f��x���&���fDH�|$����fDH���D$1�H�|$����賑����H���@u,H�GH��tH��H��?H��?���f���H����t�H����f���H���@u$H�t5H������H����f.��H�����u��fD��f���AVAUATI��USH���@tIH��H�W��H��wF��1�H���v��H�H�����H!�H��H��[]A\A]A^�H�GH�WH��v�L���Z���H�H�XHI�H��������?H��H�<H9���H�4�L���+���H�H���1�H�lI��������?H�{H��L9���H�t?L����*H��H���)�I��L9���H�tH��蠕L��H���oH��H��H���'vH���8f�H��H���o�H���HfH��H���=fH�߾H���-fH��L��H���ORH��u�H��[]A\A]A^�fD�Cv��L��H���*�����H���X���H�������:���f��v��L��H����)H��H���E�I��H����u��H������f�H�:�B������AWAVAUATUSH��dH�%(H��$�1��G�����H�H��H�D$����H�D$L�~I��A��u@H��u!H�:[cH�5��+H�81��)���f��u�H�D$H�H�D$��H��
u�H�|$�K���MA��uvM��uH��ZcH�5ۺ+H�81��ї���A��u�I���H��
u�L���vK��uRL��躥���D$���A���DL��H���h��DL���0KA�ƅ�t"f�L����I�Ǩ�
A�M��I������I��t���L��H��I9����loH�M��A�H��uRH�l$fDH���(�H�����tL��H��H�I��I��H��H��H��H�I��H����U��H�Ũt�H�D$H�l$H�t0�@��tL��H��H�I��I��H��H��H�I��H�H��u�M��tL��L)�A��LE�K�D-H��$�dH3%(��H�ĸ[]A\A]A^A_�fD�nI��?H�M��A�H��udfDH�|$�>�H�����tL��L��H��H��H��L���O�+I��H��L��H��H��H��L���5�+H�|$�H����T��H�D$�t�H�D$H�H�D$�(�����D$tL��L��H��H��H��L����+I��H��L��H��H��H��L���Ȣ+H�|$H��u�����f�L���8_�����H���H�����������D$M�������L��H���dmH�L$L�|$PH�D$@H�L$H��M����H�D$@H���@�fH�@H�D$H�L$H���@�4H�AH�D$ H�T$PH���@�zH�BH�D$H��WcH�t$�H�8��H��H�D$PH�@�3H��H�D$(H�D$HH�@�H��H�D$0L�|$@I�@��I�GH�D$8L�{H�@uL�{L�t$pH��$�L��L��$�L�l$`��H�����L�����L���ٌ��H��E1�E1��t$@H�t$(�L��������4���X�t$8E1�H�t$0E1��H���������Z�t$0E1�H�t$E1��L�������YH��^L��L��L���͕��H�t$XE1�E1�H��������L��AU�|��H�T$h_1�AXH�t$I��H)�H�����H��H9�u�L���P���H���H���L���@���L���8���H�H��
���D$�H�D$@H�D$XH�D$@H�D$HH�D$XH�D$HH�D$PH�D$XH��H�D$P�Q���C���f.�H��H���5t�)���H����H�D$ �����H����H�\$����I�GH�D$8����f�H�@H�D$0��f�H�@H�D$(����f�H����H�D$�~����H�|$H�蛍��H�D$H�D$H�
���@H�H���}���H�D$@H�D$HI��H�D$A������f�H�t$PH���#J��H���������,s������H�UcH�5I�+H�81�菑����f.���SH��TcH��
���H�5��+H�;��a��H�:]cH�=s�+H�01�葖��H�;H�5f�+[H������f.�@ATI��UH���S�WS��H��L� H�EXH��t(H�PH�CH�SH��tH�ZH�XH��[]A\�����S��H�EX��ff.���ATI��USH��H��H�*dH�%(H�D$1�H�F�uRH�rH�xH��H���� L�H�CL��H�$H��I��H�PA����"1�H�t$dH34%(u%H��[]A\�f�H�H��H��H��H�����(�"��聆�����AWAVAUE1�ATUSH��H�N���<uBL�qH��H��I��L�zM��tGH�AH���'� L��H��L��H���V� L��H���{� H��D��[]A\A]A^A_�f�H��H��L��H���� A������H�N���<t1��H�yt�H��H�vH���A� 1�H���f.���H��H��H���� 1�H���fD��AUI��� ATI��UH��SH����x��H�}L��H��H�EH��H�CI�D$H�CI�D$H�C�3>H�sH��t@��tH��1�[]A\A]��H�}�q��H��1�[]A\A]�f.���H���3���1�H���ff.����H��H��H���M�"1�H���fDUH��SH��H��H�H�ƒ�H��t5H�CXH��t H�XH��tH�;H�[H�����H��u�H��[]�DH��t@��tUH�}H�EtH9EOH���}H�Eu�H�CXH��t�H�XH��t�@H�;H�[H���a���H��u��f.��� �b����H���l����tH�E�H�}H���מ����DAVAUATUSH�� dH�%(H�D$1�����H�Ӊ�M�ƅ�t?H�H��A��I���]��E��H�$D�d$���WM���>H���fD�]���D$H�$���A��H����H���H�H�ƒ���tH��t1�E��t��MH��u�� t�H�{H��tH��H�5�M>H�[H��u�E��u^1�1�H�[p1�H9�@��E1�H��tE��I���DH�{H��tL��H�5��>H���H��u@��uE��t	H�[H��u�H�$H�x��F��H�<$L��H��H����e��H�<$�M��H��H�L$dH3%(uFH�� []A\A]A^�f�A��Z���DH������M���/���돺1��m�����ff.���AUATI��UH��SH��H��H�F���<t#I�<$1�H���}f����t9H��1�[]A\A]�@�L�n �
� H��H��t�A�D$��u�L9k u�붐H�C1�H��t���<t
H�H����I�<$H���Ee��H��1�[]A\A]����H��H��E1�H��1ɺ�î"1�H���ff.����ATI��UH��SH��@��t	H��u$H��H�}H��t7L��H����T��[1�]A\�D@��u�H���H��u�H�}H��u�D�b��H��H�E�f�f�:B��ȃ�0��	wi�J�N�ȃ�0��	wh�J�FH�~<*uH���B�AH�y�ȃ�0��	wI�J�GH�O<:u�BH���<&u�B�A��u$�@H��<*u���H�N<*u��H���PH�=Q�+1��Rn��f�AWAVAUA��ATI��USH��H��8�oD�G�O�wF�LD�wD�E��~	E���.�E9��������E�L��M�T��*A����LK�I�H��tL�L�H��I9������/v�L�KI�AH�C��@��E��t!���/������HK�H�H��tH�E��t-���/���ƒ�HS�H��e������H�A9�tD���H��8��[]A\A]A^A_�1�fD��~rE��E1�E)��7f��ǃ�H{�H�D9�}6H��t
Hc�I�<�H�8��A��D9�t0���/v�H�{H�GH�CH�D9�|�H��t�A��H�D9�u�@��uUB�|��E��1���@�ƃ�Hs�H�H��t
Hc�I�4�H�0��9��������/v�H�sH�FH�C��E��E)�D��)�/�����HK�H�	���H��H�L$t5Hc�Hc�D�L$ I�4�D�D$H�T$脀��H�L$D�L$ D�D$H�T$H�D���8���D�E�U�Ic�I�<ԃ�t^�����������H�|$(@�t$'D�L$ D�D$�L$D�T$�6���D�T$�L$��D�D$D�L$ �t$'H�|$(�c����@�t$'D�L$ D�D$�L$D�T$�M��D�T$�t$'H��D�L$ D�D$E�ՋL$�'���H�KH�AH�CH�	�����H��H�L$�^���D�D$H�T$�|��H�L$H�T$D�D$H��8���DH�KH�AH�C�D����H�SH�BH�C�R����H�������@�������H���H������������e��H��%�������t��u1��SH���lj��H��H�����1�[��SH��觉��H��[H���˖��ff.�����t1��@H��H������1�H���ff.�f�����t1��@H��H�����1�H���ff.�f�����t1��@H��H���d���1�H���ff.�f�����t1��DH��H���4���1�H���ff.�f���AUI���ATI��USH��H���on���oH�sH��I�<$H�CH�EH��t@��t:H�sH��t@��t#I�|$H��L���3H��1�[]A\A]�fD�sg���֐�kg��I�<$�DSH����H��u�H���L��D��u�H�H�ƒ�H��uڀ��H��H�辭H��u[�H��NcH�5�+H�81�螃��ff.�AUATUH��SH��H��(H�(dH�%(H�D$1�H��t
�r�H�C(L�e@M��t2L������H���11H��L��H�$I��H�5�H�D$��4L�k@H�{�1H�CH��t	����H��H����x��H���cH��u"L�%©+f��L���Sf��H���cH��t�H��H����H���cH��u)L�%��+f��
L���f��H�l�cH��t�H��H���|�H�}(t'1��^0H��H�5���H�$H�C(H�}(H�D$�4H�D$dH3%(u H��([]A\A]�H���H��� �����x��f�U��H��SH��H��fH�=�HcffH��_����H��H��H�8�.;��H�x(H�@ H��Hǀ�H��)����1����H�H�[pH��t��t"H�CxH��Hǃ�H��[]�DH��H����d������H��tH��$u�SH���7�H�C`[Ð��H�GXH��t#H�PH��tH�BH�GXH��邈��f��ff.�@��SH��H�`H��tH�WH�GH��tH�BH��tH�P�@���H�C`[�fD��SH��H�hH��tH�WH�GH��tH�BH��tH�P����H�Ch[�fD��H�GXH��t3ATI��UH��SH�XH��tH�;H�[L���H��u�[]A\�f.��ff.�@��H�GXH��t+SH�XH��tf�H�;H�[����H��u�[�D����H�GXH��t+SH�XH��tf�H�;H�[����H��u�[�D����H��t@��t�AUATUSH��H�H�o��H��uH��$uH��[]A\A]�DH�Pu�H��t�@��uH�EH�ƒ�H��tH�mH��u���H�CcH��L�mHH9*tM��tXI�U��@toH�MPH�KPH�SH두I�U��@u�L�$�L��I���i��H��M��uKJ�,!H�UHH�MPH�M@H��붐H������L�mHM���;���H�E�DH�<��h��H��M��I��t�H�uPH��L��踎��H�����UH���SH��H��CcH�0�_���H��H��u'H�@H�����1��@,H�CH��H��[]�f�H���(���H��$uH�C$���H��H����H�kH�C`@��u�H��H���\a���f.�UH��H��SH���O���H��H��贁��H��IcH��H�:H��H��HD��6��H���`{!H��H��[]�fDH;pt
1���ATH��USH����l���L�cH��H�CH�EM��upH�EH�����H����H�CH������H�Cp1�� +H��H�5��H�CH�}��.H�}H��H�5����.[�]A\�@H�����I��$u
H�E$�H��L����L�eH�E`A���c���L��H���`���S���H��I�����A��H��$uH�C$H������H�kp�K���f�H��H���U�H�kH�C`M��u�H��H���_��H�����H�kpH��H���_��H9�����H�EH�ƒ�H������H�E���ff.�f���H��H��t@��t%�8���H�5��+H��H��>cH�81���{��DH�H�ƒ�H��u�� tH��>cH�5��+H�81��{��@H�AcH;8tH���H��>cH�5��+H�81��{��ff.�@��SH��H��u�H���C��fD@��u�H���H��u�H���?��H�����H��FcH9tH��>cH9t������[����1��e���D��H�'����@��H��� t�PH��=cH�5�+H�81��z��f.���H��t@��t�H�H�ƒ�H��u�� tH���H��t�@��u���]��D�ff.�@��AVAUATUSH�� H�_dH�%(H�D$1�H���c��t.fDH�L$dH3%(H���H�� []A\A]A^�@H��H�;H����H��u�� t�H9��u�I��1�����I��H�E��H���H���M��H9CA��I�D$H����H�kH���<I�D$L��H�����H��L���Eo��H�{(t(1��W'H��H�5��I�D$(H�{(H�D$L�$$�+I��$tL��L���W��1��'H��H�5t�I�D$H�{H�\$L�$$��*E����M��t/L��A������H�H�ƒ�H��������� H����@1����f������H��L���
\�������M�d$A�M�����A�����L��L����[������f�I�|$L���3V���Z���fDL���@���H��$uI�D$$���@L��H���
�I�l$I�D$`@�������H��L���n[���~����tn��@���$���f���AWAVAUATI��USH��H��XH�dH�%(H�D$H1�H�Ѓ������������L9���L��H���e�����A��$�H����H�xCcH�H�������H�H�ƒ�H������ ���M���H������I��$��H��L�����L�sH�C`A��uL��H���YZ��H���1���H�L$HdH3%(H���/H��X[]A\A]A^A_�����H�CH���N���L���
J��H�CH����H��H���bT��M��t
A����I��$�H���L��H�����I�|$t+1�L�d$(H�\$ �=$H�T$ H�5��H�CI�|$�(I�D$pM�t$H�$L9�������8��H��I���g���H�CpH�D$L94$�:M���1I�>H����H���F���H�D$0H��H�D$�bf�H�t$�L��L�|$0H�D$8褉��I�~L���x�M�vI�GhM���L94$�
I�>L��H����H����I�v�N�I��I�FI�GM����H�EH���z���I�F(I�G(A��uI�H�ƒ�H����I���I���H��t&��u!H���H��uI���H��L���CX��I�FpL9�����I�E�� �vH��H�ƃ��~����I�EL9t�����H�n�H��L�xpM���H��L����n��M�vM�����L94$���M���uL�<$L�t$L��L����I��E���1�L�d$(H�\$ �"H�T$ H�5q�I�FI���%H���L������H���^H���c���<���H�s<cH�����I�$H�ƒ�H���4����� �+���1��,���@H����I��$uH�E$�C���DH��L���U�L�}H�E`A���!���L��H���V������I�uH�������I�E L9t���������fD�� ����1������H��6cH�I9��WH�{�dH9��[M���<���A���2���I�$H�ƒ�H�������� ����H��5cH�5�+H�81��r����� ��H��5cH�5��+H�81��r���A������H��L��H�D$�U��H�D$I9�I�tH�ƒ�H��t��I�H�ƒ�H��������̀I����@H�CH���P�������c���H��H���UU��H�C�O���@H�|$usI�GL����H�$H�hH��uvH�D$H�@H�|$����J���H��4cH�����H��:cH�����H�j6cH����H�C$�t���L���U�L�t$I��$u2I�G$�u���L�|$L���0�H��$uBH�D$H�@$�r���L��L�����M�wI�G`L���2���H�t$L���]T��� ���L��H������I�oI�G`@���%���H�|$H���.T������H�r8cH����L94$�S����'����g��H��3cH�5З+H�81��p��H��3cH�5җ+H�81��vp���߇���AUATUH���$SH�����H��H����I�Ĩt&H��H���N��L�mL9��VH�]�DH�H�ƒ�H��t�� H�H��H����M��L�mH��H�]H��L9����DS��I�EH���?�L���X���I�D$H��t<�u8�SDH��1��vM��L�mL9���H�EE1�H�%H�}H��uJH��4cH�(H���'I�D$H����I�|$��H��H��[]A\A]�DH�H��t�@��uH���H��t�H�oH����@����H�EH�ƒ�H������ ��H9����H�����H��$��H��H�����I�l$I�D$`�H�EE1�I�EH������������H�H�у�H��������� �����L9�������I�D$H��H���Q������f�����H��H������H���'�H��$uI�D$$����H��H�����I�l$I�D$`@�������H��H���VQ������LQ��H�[H��H���=Q���V���H�]H�[�I���ff.���H���1�H��t��t	��H���H��u�H�GH9�������f���AW1�H�=��+AVAUATUSH��H�p�L�%)1cH�=ޔ+H��I�$�V�H�-�8cH��H�E��j!�H�=��+�bH�}H��H���Cg��H�uH�=��+��L�5<8cH�=�+H��I���H�C2cI�6H�=s�+H����L�-�4cM�<$�H�=A�+I�E�1P��H�}L��H���r%��H�;H�H���@����H����O��H�3I�>H�wH����@�����O��H�3H�}H�wH����@����H�3M�uI�v@����H�3I�<$H�w@����M�uI�FH�������H�H�΃�H������ ��L9����H��H[]A\A]A^A_�DI�H�xH�3H�}H�w@���d����N��H�3M�uI�vH���@���V���L����N��H�3I�<$H�wH���O���@���E����N��M�uI�FH���@���D�$��H��H����I�Ĩ��H�H����H��t�� H�EL��H����H��M�nM9���I�nH��L���BN��M�}M���A����I�H�ƃ�H������ ��M9����M�|$L��H����M���bI�H�@H�EH�@M�uI�FI�$H�@�J���@L��1��H��M�nM9�u]I�FE1�H�%M�nM����L�3M����I�D$H���D�I�|$H��H[]A\A]A^A_�,�@I�FM�}E1�M��������$�6�I��H����L��1��G��I�UI�EL9��KH�%H�$��f�I�E��H��uM�mM���E���A��t�M�uM���C�$��I��H���UL��1��G��M�}M9��)I�EH�%H�$M�}M����L�+M����H�$H�@L����H�$H�x�����H�$��L��H���F��I�UL9���M�}A��uL��L��H�T$��K��H�T$L�JM��t'A��u!I�H�ƃ�H��t�� t
I9���E�$H�T$��H�T$H��I���U	H��1�H�T$H�D$��E��H�T$L�L$L�ZH�BI9��xH�%H�D$L�ZM���}L�M���XH�D$H�@L��L�L$��H�D$H�x���H�$L�L$L�HM���cfDM�mM����L�M����H�$H�@L����H�$H�x��M�|$M������A���������L��H���D��M�nM9��!I�n�6����A�������I�H����H��������� �����M9�������H�����I��$��H��L�����M�t$I�D$`L��H���J�����fDH�H�ƃ�H��t�� I�L��L���PD��I�UL9�����M�}L��L����I��M�L��L���I�����H�$���I���H��uM�M���-���A��t�M�oM���w�$�}�I��H����L��1���C��M�GM9��
I�GI�HH��t&��u!H�H�ƃ�H��t�� t
L9���" �$L�D$��L�D$H��H���r���$L��H��L�D$H�D$�FC��L�D$H�L$M�HM9��u&I�HI�AH��t(�u$H�0H����H��t�� t
L9���+%L��L�D$H�L$��H�L$L�D$H��H�A��%I�xH���+ L�M���%H�AH��H�L$��H�L$H�y��H�L$I�MH���l#I�H���2H�H���I�EL�����I�}�����I���H��uM�[M�������A��t�M�SM���@�$L�\$L�L$��L�L$L�\$H��I���fL��1�H�D$ L�L$L�\$��A��L�\$L�L$L�T$ I�CI�CL9���#H�%I�{H����H�H����I�BL��L�L$L�T$���L�T$I�z���L�L$L�T$���H���H��uH�H������@��t�H�_H���4���H�����H���H��uH�H���k���@��t�H�WH����L�T$L�L$��L�T$L�L$H���:����I�nH�m����I�nH��L���DF��H�mH��H���5F�����A���~M�EM���)�$��I��H�D$H���@1�L���d@��M�UL�D$I�EM9��{H�%H�D$I�UH��uSL�+M����H�D$H�@L��L�D$�v�H�D$H�x�h�L�D$���H���H��uH�RH��t���t�L�jM�����$H�T$L�D$�S�L�D$H�T$H��I����H��1�L�D$H�T$�?��H�T$L�D$L�RH�BI9��H�%H�zH����L�M���5#I�EL��L�D$��I�}��L�D$��DI�E��H���q������f�H����I��$uI�D$$����@H��L������M�t$I�D$`A���;������@H�$��$H�H����H��t�� I�L��L���>��M�}M9���	M�uL��L���D��I�OH��t&��u!H�H�ƃ�H��t�� t
L9����
�$���H��H�D$H����1�L���>��M�WH�L$I�GM9��%H�%H�D$I�WH��uxL�;M����H�D$H�@H��H�L$�.�H�D$H�x� �H�$H�L$H�HH��������������H��L���C�����H���H��uH�RH��t���t�L�zM�����$H�T$H�L$���H�L$H�T$H��I���=H��1�H�L$H�T$�=��H�T$H�L$L�RH�BI9���H�%H�zH���PL�M����I�GL��H�L$�3��I��*��H�L$����H�D$���H�H�ƃ�H��t�� I�H��L��H�T$L�L$�y<��H�T$L�L$L�ZI9���
L�JA��u)L��H��L�\$ L�L$H�T$��A��H�T$L�L$L�\$ M�SM��t'A��u!I�H�ƃ�H��t�� t
M9����
�$L�\$ H�T$L�L$���L�L$H�T$H��I��L�\$ �L��1�H�T$(H�D$ L�L$L�\$�;��L�\$L�L$L�T$ H�T$(I�CI�CL9��kH�%I�{H����L�M����I�BL��H�T$ L�L$L�T$���L�T$I�z���L�T$H�D$L�L$H�T$ M��L�P�T���A���J���L��L��H�T$L�L$�@��L�L$H�T$�&���H���H��uH�H���_���@��t�L�_M���+H�T$ L�T$L�L$�c�H�T$ L�T$I��L�L$�$���@L��H���}:��M�}M9���M�u����A������I�H�ƃ�H��������� �����M9�������L��L�D$�@��L�D$I��$��L��L��L�D$���H�$L�D$H�A`L�AL��L���u?����H�$L�HL��L���]?���h�M�}M��[�H��H��H�T$H�D$�9��H�T$L�L$L�ZI9��-���L�JM�I���L��L�D$���L�D$I��$uH�$H�@$��L��L���^��H�$L�D$H�A`L�AA���C��������H�H�ƃ�H��t�� I�L��L��L�D$�9��M�UL�D$M9��9M�EA��uL��L��L�T$L�D$�`>��L�D$L�T$M�JM��t'A��u!I�H�ƃ�H��t�� t
M9�����$L�T$L�D$�"��L�D$L�T$H��I���	L��1�L�D$L�T$H�D$ �S8��L�T$L�D$L�L$ M�ZI�BM9��g	H�%I�zH����L�M����I�AL��L�D$L�L$�`��L�L$I�y�R��L�L$H�D$L�D$M��L�H�����A�������L��L��L�D$�<=��L�D$�m���H���H��uH�H���s���@��t�L�WM����L�L$L�D$�'�L�L$L�D$I���B���D��,H�H�ƃ�H��t�� H�H��L��H�L$�#7��M�WH�L$M9��SI�O��uH��L��L�T$H�L$�<��H�L$L�T$M�JM��t'A��u!I�H�ƃ�H��t�� t
M9���x�$L�T$H�L$�E��H�L$L�T$H��I���aL��1�H�L$L�T$H�D$ �v6��L�T$H�L$L�L$ M�ZI�BM9���H�%I�zH����L�M���$I�AL��H�L$L�L$���L�L$I�y�u��L�L$H�D$H�L$M��L�H�����A����H��L��H�L$�_;��H�L$����H���H��uH�H���s���@��t�L�WM����L�L$H�L$�J�L�L$H�L$I���B����A����I�EH����H���k�� �b�M9���U�L���T��I��$��L��L���/��H�$H�A`L�iL��L���:���N�A���������@M�uL��L���q:��M�vL��L���b:�����I�EH�$�H���H�D$���H�H�ƃ�H��t�� I�L��L��H�T$0L�L$(L�\$ L�T$�w4��L�\$ L�T$L�L$(H�T$0I�CI9��
M�SA��u=L��L��H�D$8H�T$0L�L$(L�T$ L�\$�9��L�\$L�T$ L�L$(H�T$0H�D$8H�pH��t*@��u$H�>H����H��t�� t
H9����H��L�\$0H�T$(L�T$ L�L$��L�L$L�T$ H��H�D$H�T$(H��L�\$0H�p����@������L��L�\$(H�T$ L�L$L�T$�9��L�T$L�L$H�T$ L�\$(���H�$H�H���L��H��H�D$�;3��M�UL�D$M9��:���M�EM�@���L��H��H�D$�3��M�WH�L$M9����I�OH�I����M�uM�v��A�����I�H�ƃ�H������ ���M9�����L��L�T$L�L$���L�T$L�L$I��$�]L��L��L�L$L�T$���H�L$L�T$L�L$H�A`L�QL��L��L�L$��7��L�L$��L���Y��I��$uH�$H�@$�m�L��L���'��H�$H�A`L�iA������G���H�H����H���	�� L��L��I�E��1��M�GM9���M�oL��L��L�D$�>7��L�D$���L�JH��L��H�T$L�L$�7��L�L$M�IL��L���7��L�L$H�T$��H�D$L�P�S���H�D$����L��L�T$L�L$�Z��L�T$L�L$I��$uH�D$H�@$��L��L��L�L$L�T$���L�T$H�L$L�L$A��H�A`L�Q������F�L��H��H�T$0L�L$(L�\$ H�D$�0��L�\$ L�T$L�L$(H�T$0I�CL9��G���M�SM�R����H�D$���H�H�ƃ�H��t�� I�L��L��L�L$(L�\$ L�T$�T0��L�\$ L�T$L�L$(I�CI9���M�SA��u3L��L��H�D$0L�L$(L�T$ L�\$�5��L�\$L�T$ L�L$(H�D$0H�pH��t*@��u$H�>H����H��t�� t
H;����H��L�T$(L�\$ L�L$�q�L�L$L�\$ H��H�D$L�T$(H��H�p���@�����L��L�\$ L�L$L�T$�4��L�T$L�L$L�\$ �����H�H�ƃ�H��t�� I�L��L��L�D$ L�T$L�L$�!/��L�T$L�L$L�D$ M�ZM9���M�JA��u3L��L��L�\$(L�D$ L�L$L�T$�l4��L�T$L�L$L�D$ L�\$(I�CH��t(�u$H�0H����H��t�� t
L9����L��L�T$ L�L$L�D$�@�L�L$L�D$H��L�T$ I�A�A�����9���L��H��L�T$ L�D$L�L$��3��L�L$L�D$L�T$ �������H�H�ƃ�H��t�� I�L��L��H�L$ L�T$L�L$�-��L�T$L�L$H�L$ M�ZM9���M�JA��u3L��L��H�L$(L�\$ L�L$L�T$�B3��L�T$L�L$L�\$ H�L$(I�CH��t(�u$H�0H����H��t�� t
L9���3L��L�T$ L�L$H�L$���L�L$H�L$H��L�T$ I�A������L��H��L�T$ H�L$L�L$�2��L�L$H�L$L�T$ ���A���3�I�EH�ƃ�H������ ��I9���	�L��L�D$����I��$L�D$��L��L��L�D$贽��H�L$L�D$H�A`L�iL��L��L�D$�2��L�D$�e�A����I�H�ƃ�H������ ���I9�����H��H�L$�X��I��$H�L$�H��L��H�L$�)���H�L$H�A`L�yH�L$H��L��H�L$�1��H�L$�"�L��H����+��M�GM9���M�oA���M�m�;�I�OH��L��H�L$�:1��H�L$H�IH��H���&1��H�L$��A�����I�H�ƃ�H������ ���I9�����L��H�T$(L�\$ L�L$L�T$�]��L�\$ L�T$L�L$H�T$(I��$��L��L��H�T$(L�L$ L�T$L�\$����L�T$L�\$L�L$ H�T$(I�B`M�ZL��L��H�T$ L�L$L�T$�Z0��L�T$L�L$H�T$ �_�M�EL��L��L�D$�20��L�D$M�@L��L���0��L�D$�O�L��H��L�L$(L�\$ H�D$�j*��L�\$ L�T$L�L$(I�CI9�����M�SM�R��H�D$L�H�T�L��L�D$�F��I��$L�D$uH�D$H�@$��L��L������H�L$A��L�D$H�A`L�i�P������H�D$���H�D$��H�D$L�H��L��H��L�D$ L�T$H�D$�)��L�T$L�L$L�D$ M�ZM9��x���M�JM�I�M�L��H��H�L$ L�T$H�D$�V)��L�T$L�L$H�L$ M�ZM9��_���M�JM�I���H��H�L$�@��I��$H�L$uH�D$H�@$�8�H��L������H�L$A��H�A`L�yH�L$���������H�H�ƃ�H��t�� I�EH��L��L�D$H�T$�(��H�T$L�D$L�RI9��=L�jA��u)H��L��L�T$ L�D$H�T$�-��H�T$L�D$L�T$ I�BH��t(�u$H�0H����H��t�� t
L9���L��H�T$L�D$����L�D$H�T$H��I�E�������H��L��H�T$L�D$�s-��L�D$H�T$�v�L��H�T$(L�\$ L�L$L�T$����L�\$ L�T$L�L$H�T$(I��$u
I�B$�:�L��L��L�L$ L�T$L�\$臸��L�\$L�T$L�L$ H�T$(A��I�B`M�Z�m�����M�o��M�SL��L��H�T$(L�L$ L�\$L�T$�,��L�T$M�RL��L���,��L�T$L�\$L�L$ H�T$(�{���QH�H�ƃ�H��t�� I�H��L��H�L$H�T$�&��H�T$H�L$L�RI9��2	L�zA��u)H��L��L�T$ H�L$H�T$�,��H�T$H�L$L�T$ I�BH��t(�u$H�0H����H��t�� t
L;����	L��H�T$H�L$����H�L$H�T$H��I�G�,���$�H��L��H�T$H�L$�+��H�L$H�T$��L��1�L�D$H�D$��%��L�D$H�L$M�HM9��I�@H�%���I�GH�%��@��tGL�OM��t'A��u!I�H�ƃ�H��t�� t
I;���
H�L$���H�L$I���f�H���H��u�H��E����1�H�H�ƃ�H������ ��H9����L��H�T$ L�L$L�T$�	��H�T$ L�T$L�L$H��$��L��H��L�L$ L�T$H�T$�Ƶ��L�T$H�T$L�L$ I�B`I�RL��H��L�L$L�T$�*��L�T$L�L$���@��tGL�OM��t'A��u!I�H�ƃ�H��t�� t
I;����	L�D$���L�D$I�����H���H��u�H���H�D$��H�D$H�p�p�����H�H����H������� ���H;�����L������H��$t~L��H���´��I�]I�E`H��L���/)���8�H��H��H�L$H�T$�#��H�T$H�L$L�RI9�����L�zM��p�I�MH��L����(�����L���e��H��$u
I�E$���L��H���7���I�]I�E`���l�����L��H�T$ L�L$L�T$���H�T$ L�T$L�L$H��$u
I�B$�L�L��H��L�L$ L�T$H�T$��H�T$L�T$L�L$ ��I�B`I�R������
�@��tGL�GM��t'A��u!I�H�ƃ�H��t�� t
I;���WH�L$���H�L$I�����H���H��u�H��j��H��H��L�D$H�T$�""��H�T$L�D$L�RI9��~���L�jM�m��A���[�I�H�ƃ�H���H��� �?�I9���2�L��L�T$ H�L$L�L$����L�T$ L�L$H�L$I��$��L��L��H�L$ L�L$L�T$葲��L�L$L�T$H�L$ I�A`M�QL��L��H�L$L�L$��&��L�L$H�L$�!�L��L�T$ L�D$L�L$�O��L�T$ L�L$L�D$I��$�yI�A$��L��L�T$ H�L$L�L$���L�T$ L�L$H�L$I��$u
I�A$��L��L��H�L$ L�L$L�T$�Ʊ��L�T$L�L$H�L$ A��I�A`M�Q�+����k�A����I�H�ƃ�H������� ���I9�����L��L�T$ L�D$L�L$�f���L�T$ L�L$L�D$I��$����L��L��L�D$ L�L$L�T$�#���L�L$L�T$L�D$ I�A`M�QL��L��L�D$L�L$�w%��L�L$L�D$���L��L������M�GM9����M�oL��L���A%��M�mL��L���2%�����L��L��L�D$ L�L$L�T$蓰��L�T$L�L$L�D$ A��I�A`M�Q�f����[�M�SL��L��L�L$ L�\$L�T$��$��L�T$M�RL��L���$��L�T$L�\$L�L$ �j�����������M�JL��L��L�D$ L�T$L�L$�{$��L�L$M�IL��L���g$��L�L$L�T$L�D$ ��I�A�^�H�H�ƃ�H��t�� H�L��H��L�D$H�L$���L�D$H�L$M�HM9���I�HH��L��L�L$H�L$L�D$��#��L�D$H�L$L�L$���I�@���I�A��H�D$�(�M�JL��L��H�L$ L�T$L�L$�#��L�L$M�IL��L���#��L�L$L�T$H�L$ ��H�D$H�p�L�H�AH��H��L�D$H�L$�F#��H�L$L�D$����H��L�D$H�L$赾��L�D$H�L$I��$uQH�A$����L�zH��L��H�L$H�T$��"��M�L��L����"��H�T$H�L$�P���h���i���H��L��H�L$L�D$�/���H�L$L�D$H�A`L�AA���S��H��L��H�L$�"��H�L$�9��L��L�L$H�L$���L�L$H�L$I��$u,I�G$����I�H����H�I����I�G���L��L��H�L$L�L$薭��L�L$H�L$I�G`A��M�O����L��L��H�L$��!��H�L$���L�jH��L��L�D$H�T$��!��M�mL��L���!��H�T$L�D$���I�E��L��L�L$L�D$����L�L$L�D$I��$uEI�E$���L��H��L�D$H�L$�\!��H�L$H�IH��H���H!��H�L$L�D$����L��L��L�D$L�L$褬��L�L$L�D$I�E`A��M�M�;��L��L��L�D$� ��L�D$�!��L��L�L$H�L$�l���L�L$H�L$I��$�q���L��L��H�L$L�L$�3���L�L$H�L$I�G`M�O���H��L�D$H�L$����L�D$H�L$I��$�a���H��L��H�L$L�D$���H�L$L�D$H�A`L�A���L��L�L$L�D$�Ȼ��L�L$L�D$I��$�����L��L��L�D$L�L$菫��L�L$L�D$I�E`M�M�����AWAVAUATUH��SH��HH���H����L�gL���Ͻ��H��H��uGH�EE1�H��H�����L�����H�pI�uH��t
@���H��HH��[]A\A]A^A_�I�Ũ��H�H�ƒ�H��t�� H�H�]H��H���A�����$�>���H��H��uvH��1����L�uL9��oH�EE1�H�%H�mH����H��cL�(M���PI�D$H��觻��I�|$蝻���6����I�Ĩ�H��H���
��L�uL9���H�]��@H�E�����H���h�����@��uH�E��H���Q���L�mM���4�$�B���I��H����H��1����L�}L9���H�EH�%H�D$L�}M���H��bH�(H���wH�D$H�@L��蝺��H�D$H�x菺������f.�H�EE1�M�nM��t4A��u.I�EH�ƃ�H��t�� tM9��uM�l$�fD�$�^���I��H����H�D$���H�H�ƃ�H��t�� I�EL��L�����M�~M9��M�nA��uL��L������M�GM��t'A��u!I�H�ƃ�H��t�� t
M9����$�Ⱥ��I��H�D$H���G1�L���
��M�_L�D$I�GM9���H�%H�D$M�OM���6H�Z�bL�8M����H�D$H�@L��L�D$����H�D$H�x����H�D$L�D$L�@M���}�M�~M���wH��bL�0M���o
H�D$H�@L��賸��H�D$H�x襸��M�l$M�������A�������DL��H���������H�H�ƒ�H��t�� H�H��H������L�uL9���H�]H��H���T������L��1����M�~I�FM9��Z	H�%H�D$�����A������I�EH�ƒ�H��������� �����I9�������H���\���I��$�HH��L���7���M�l$I�D$`L��H���������I���H��uM�M�������A��t�M�wM����$�w���I��H���)	L��1����M�OI�GM9��NH�%M�M���"H��bH�H����I�FL�����I�~�׶������I���H��uM�M����A��t�I�oH�����$�̷��H��H����L��1����I�WI9��,I�GL�rM��t'A��u!I�H�ƃ�H��t�� t
I;�����$H�T$�b���H�T$H��I���~H��1�H�T$���H�T$L�BL9��� H�BI�@H��t(�u$H�0H����H��t�� t
L9���\"L��H�T$�
��H�T$H��I�F�"H�zH����H���bH�H���3I�FL���x���I�~�o���L�uM����I�H���'H�n�bL�8M����H�EH���2���H�}�)����i���I���H��uM�IM������A��t�M�yM�����$L�L$ L�D$����L�D$L�L$ H��I���L��1�L�D$ L�L$�J��L�L$L�D$ M�QI�AM9��WH�%I�yH����H���bL�M����I�GL��L�D$�Z���I��Q���L�D$����H���H��uH�H������@��t�L�M�����f��I������H���H��uH�H���s���@��t�L�OM����L�D$�(��L�D$I���S���H�]H�[���H�]H��H������H�[H��H���������L��H�����M�~M9������M�nM�m���H������I��$uI�D$$���H��L�����M�l$I�D$`A��������y����H�D$���H�H�ƒ�H��t�� I�EH��L�����L�}L9���L�mL��H�����M�wM��t'A��u!I�H�ƃ�H��t�� t
M9����	�$�̳��I��H���L��1����M�OI�GM9���H�%I�OH��umH�u�bL�8M����I�FL���9���I�~�0���H�D$L�pM���L���A���B���L��L���)���2���H���H��uH�IH��t���t�L�yM���D�$H�L$���H�L$H��I����H��1�H�L$�>��H�L$L�AH�AI9���H�%H�yH���(H���bH�H���UI�GL���X���I��O������f.����H�H�ƃ�H��t�� I�L��L��L�D$���M�_L�D$M9��Z
M�GA��uL��L��L�\$ L�D$���L�D$L�\$ M�SM��t'A��u!I�H�ƃ�H��t�� t
M;���3
�$L�\$ L�D$�ı��L�D$L�\$ H��I���WL��1�H�D$(L�D$ L�\$�
��L�\$L�D$ L�T$(I�CI�CI9���H�%I�{H����H�A�bH�H����I�BL��L�D$ L�T$���L�T$I�z���L�T$H�D$L�D$ M��L�P�����A���y���L��L��L�D$����L�D$�_���H���H��uH�H���l���@��t�H�WH����
L�T$ L�D$�¾��L�T$ L�D$H���B���H��H������L�}L9���L�m�i���A�����I�H�ƃ�H�������� ����M9�������L��购��I��$��L��L��菝��H�L$H�A`L�qL��L���������M�nL��L������M�mL��L����������H�D$���H�D$L�@L��L��������L��H��H�D$���M�_L�D$M9��e���M�GM�@����L������I��$uH�D$H�@$�~���L��L���Μ��H�L$H�A`L�qA���5����W���H�D$���H�H�ƃ�H��t�� I�L��L���u��M�OM9��&
M�wA��uL��L��L�L$����L�L$M�AM��t'A��u!I�H�ƃ�H��t�� t
M;�����$L�L$誮��L�L$H��I����L��1�L�L$H�D$ ��
��L�L$L�D$ M�QI�AM9���H�%I�yH��u|H�:�bL�M����I�@L��L�D$���L�D$I�x���H�D$L�D$L�@M������A�������L��L���������H���H��uH�H��t�@��t�L�OM���bL�D$�ػ��L�D$I���d���H�D$���H�H�ƃ�H��t�� I�L��L����	��M�OM9���
M�wA��uL��L��L�L$�D��L�L$M�AM��t'A��u!I�H�ƃ�H��t�� t
M9���\
�$L�L$����L�L$H��I���L��1�L�L$H�D$ �K	��L�L$L�D$ M�QI�AM9��\H�%I�yH��u|H���bL�M���&I�@L��L�D$�_���L�D$I�x�Q���H�D$L�D$L�@M������A������L��L���E�����H���H��uH�H��t�@��t�L�OM����L�D$�>���L�D$I���d����@���0�H�EH�ƒ�H����� ��L9����L���T���H��$�mL��H���/���H�L$H�A`H�iH��L���
�����A���������L�mL��H���q
��M�mL��L���b
���k�H�EH�D$�Q���H�D$��H�H�ƃ�H��t�� I�L��L��L�D$0L�\$(L�T$ �{��L�\$(L�T$ L�D$0I�CI9���M�SA��u3L��L��H�D$8L�D$0L�T$(L�\$ ����L�\$ L�T$(L�D$0H�D$8H�pH��t*@��u$H�>H����H��t�� t
H9����H��L�\$0L�T$(L�D$ 蘸��L�D$ L�T$(H��H�D$L�\$0H��H�p���@�����L��L�\$(L�D$ L�T$�#��L�T$L�D$ L�\$(���H�D$L�p����A����I�WH�����$��H��H���^
1�L��H�D$�5��M�GH�T$I�GM9���
H�%I�H����H���bL�8M���'H�BH��H�T$�J���H�T$H�z�<���H�T$�9�I���H���K����
�A����I�H�ƃ�H����� ���M9�����L��L�D$荦��I��$L�D$��L��L��L�D$�^���H�L$L�D$H�A`L�yL��L��L�D$�
��L�D$�q�L�mM�m��L��H���
��M�OM9��/���M�wM�v��L��H������M�OM9��p���M�wM�v�+�L�����H��$uH�D$H�@$�v�L��H��谕��H�L$H�A`H�i@���w����O���2H�H�ƒ�H��t�� H�EL��H���[��I�WL9���I�o@���2
H�m�E�M�GL��L��L�D$�	��L�D$M�@L��L���	��L�D$�'�H�D$L�P���H�D$���L��L�D$���I��$L�D$uH�D$H�@$��L��L���Ĕ��H�L$A��L�D$H�A`L�y�\������L��H��L�D$0L�\$(H�D$ �y��L�\$(L�T$ L�D$0I�CI9������M�SM�R�����7H�H�ƃ�H��t�� I�L��L��L�D$ L�L$���L�L$L�D$ M�QM9���M�yA��u)L��L��L�T$(L�D$ L�L$�s��L�L$L�D$ L�T$(I�BH��t(�u$H�0H����H��t�� t
L9����L��L�L$ L�D$�Q���L�D$L�L$ H��I�G�[��S�H��L��L�L$ L�D$����L�D$L�L$ �/��nH�H�ƃ�H��t�� I�L��L��L�L$ L�D$���L�L$ L�D$M�QM9���M�AA��u)L��L��L�T$(L�D$ L�L$�q��L�L$L�D$ L�T$(I�BH��t(�u$H�0H����H��t�� t
L9���]L��L�L$ L�D$�O���L�D$L�L$ H��I�@�����������L��H��L�L$ L�D$����L�D$L�L$ �����H�H�ƃ�H��t�� I�L��L��L�L$ L�D$���L�L$ L�D$M�QM9��G
M�AA��u)L��L��L�T$(L�D$ L�L$�o��L�L$L�D$ L�T$(I�BH��t(�u$H�0H����H��t�� t
L;����L��L�D$ L�L$�M���L�D$ L�L$H��I�@�V�����N���L��H��L�L$ L�D$����L�D$L�L$ �*���L��H���?��I�WL9����I�o�(�A�����I�H�ƃ�H������ ���I9�����L������I��$��L��L�����M�~I�F`L��L���V��������^���H�H�ƃ�H���K����� �B���L9���5���L��H�T$袠��H�T$H��$�
H��L��H�T$�s���H�T$I�F`I�VH��L���������M�wL��L������M�vL��L������.�H�D$L�@�U��������H�H�ƃ�H������ ���H9�����L��H�T$(L�D$ L�T$���H�T$(L�T$L�D$ H��$��L��H��L�D$(L�T$ H�T$詏��L�T$ H�T$L�D$(I�B`I�RL��H��L�D$ L�T$���L�T$L�D$ ��H�D$��H�D$��M�wL��L������M�vL��L�������H�D$L�@��L��H��L�D$ L�L$���L�L$L�D$ M�QM9�����M�yM���L��H��L�L$ H�D$����L�L$ L�D$M�QM9������M�AM�@���I�oH��L��H�T$���H�T$��L��H�T$蔞��H�T$H��$u
I�F$���H��L���a���H�T$I�F`I�V�������L��H��L�L$ H�D$�!���L�L$ L�D$M�QM9�����M�AM�@���L������I��$u
I�F$��L��L�����M�~I�F`A����������H�H�ƃ�H��t�� I�H��L��H�L$���H�L$L�AI9��
L�yA��uH��L��L�D$H�L$����H�L$L�D$I�@H��t(�u$H�0H����H��t�� t
L9����
L��H�L$�ڭ��H�L$H��I�G�������H��L��H�L$���H�L$�����?H�H�ƃ�H��t�� H�H��L��H�T$���M�GH�T$M9��lI�W��uH��L��L�D$H�T$���H�T$L�D$I�@H��t(�u$H�0H����H��t�� t
L9����
L��H�T$����H�T$H�BH��� ��������H��H��H�T$���H�T$��L��H�T$(L�D$ L�T$����H�T$(L�T$L�D$ H��$u
I�B$�7�L��H��L�D$(L�T$ H�T$�ʋ��H�T$L�T$ L�D$(��I�B`I�R������M�SL��L��L�D$(L�\$ L�T$���L�T$M�RL��L����L�T$L�\$ L�D$(��H�D$��H�D$H�p���aH�H�ƃ�H��t�� I�H��L��H�T$����H�T$L�BL9��L�rA����M�v��I�GH�%���A����I�H�ƒ�H������� ���I9�����H��詚��I��$tRH��L��舊��L�}H�E`L��H�������L��L�L$ L�D$�n���L�L$ L�D$I��$uI�G$�:�H�E$�Z�L��L��L�D$ L�L$����L�L$L�D$ I�G`A��M�O���L��L��L�D$�s���L�D$���A���]�I�H�ƃ�H���J��� �A�I9���4�L��L�L$ L�D$贙��L�L$ L�D$I��$�B���L��L��L�D$ L�L$�{���L�L$L�D$ I�G`M�O�a���@��t<H�OH��t&��u!H�H�ƃ�H��t�� t
H;���-�ک��H�����H���H��u�H����L��L�L$ L�D$����L�L$ L�D$I��$�KI�@$�4�H��H��H�T$���H�T$L�BL9������L�r��L��H��H�D$���M�GH�T$M9�����I�WH�R�a�@��tGL�M��t'A��u!I�H�ƃ�H��t�� t
I;���H�T$��H�T$I���+�H���H��u�H���H��L�����H�mH��H�������H��H��H�L$����H�L$L�AI9��L���L�yM���A�����I�H�ƃ�H������� �x�I9���k�L��L�L$ L�D$蛗��L�L$ L�D$I��$�����L��L��L�D$ L�L$�b���L�D$ L�L$I�@`M�HL��L��L�D$���L�D$��L�uL��H������ �H���*���I��$����H��L������L�}H�E`A���s�����L��L�L$ L�D$���L�L$ L�D$I��$��I�@$��A����I�H�ƃ�H������ ���I9�����L��L�L$ L�D$膖��L�L$ L�D$I��$t�L��L��L�D$ L�L$�Q���L�D$ L�L$I�@`M�HL��L��L�D$���L�D$��L��L��L�D$ L�L$����L�D$ L�L$I�@`M�HA��t����@��t<H�OH��t&��u!H�H�ƃ�H��t�� t
H;����i���H����H���H��u�H��x�L��L��L�D$ L�L$臅��L�D$ L�L$I�@`M�HA��������M�yL��L��L�D$ L�L$����M�L��L�����L�L$L�D$ ��I�G�����H��L��H�T$���H�T$��A���������L��H�L$���H�L$H��$��I�F$��M�AL��L��L�L$ L�D$�3���L�D$M�@L��L������L�D$L�L$ �`�M�AL��L��L�L$ L�D$���L�D$M�@L��L�����L�D$L�L$ ��I�@���I�WH��L��H�T$���H�T$H�RH��H�����H�T$��H�BH�%���L�rH��L��L�D$H�T$�g���H�T$L�D$�@��H��H�T$�ۓ��I��$H�T$ucH�B$��L��H�L$趓��H�L$H��$��I�G$��L�yH��L��H�L$���M�L��L�����H�L$�5�H��L���R���H�T$H�B`L�zA���D�H��L��H�T$���H�T$�*�I�@��H��L���
���H�L$I�F`I�N������H��L���l�������H��L���܂��H�L$I�G`I�O�����H��L���;�����L��H�L$蹒��H�L$H��$����H��L��H�L$节��H�L$I�G`I�O�I�G�b���H��L��H�T$���M�vL��L������H�T$���H��H�T$�L���I��$H�T$�m���H��L��H�T$����H�T$H�B`L�z����I�F���L��H�L$����H�L$H��$�
���H��L��H�L$�ց��H�L$I�F`I�N����H�B���ff.�USH��H��H��uH���bH�H��ud�D@��ubH�H��H�у�H���|H�EH��t�uH�H�ʃ�H����H��H������H�H�U��H	�H�H��[]��H��H���H��tCH��$��H�"�bH�5�9+H�81������H��0uب u-��f���f�H����H��uHH���bH������H��tR�� �2����@�� �C���H9���6����?���DH������H��H�=A9+1��N���fDH��%�t���?H�H=@tH=�u?H���U=�����H��� !����$���fDH�9�bH��a���H�=r:+1����ff.���USH��H��H��u
H���bH�H���L��H�sH��H���=��H��H��[]���ATUH��SH��H��dH�%(H�D$1�H��u
H�R�bH�H�`ucH��u$L�%M8+@�	L�����H�<ucH��t�H��H��H��H�,$�8���H�T$dH3%(u	H��[]A\����f.���AVI��AUATI��US����L�-��bH��H��I�}�����uOM����L��H������H��H���
!I�}H��H�����H��L�����H��[]A\A]A^�f.�I�}H������H��H��t,�u(H���H��uH�{�3�L9�uOH���
!�@H���#��L��H�5)7+H��H�D�bH�81��:��H���bL��H�57+H�81����H��bL��H�5�8+H�81����@��AVAUI��ATI��UH��S�f����uRM����L��H������H��H�����L��H��H������H��L��H���w��H��L������H��[]A\A]A^�H��L���%��H��H��tM�uIH���H��u=L�sL���!�L9�t�H�����M��M��L��H��H�A�bH�58+H�81��0��H���h"��H��H���m��I��L��H�5�7+H��H��bH�81��
��H���D��L��H�����H��H�58+H��H�%�bH�81���
��ff.���S���H��H���[!H��[�fD��UH��SH��H��H���h��H��H��H��H��[]���@��SH����N���1�H���D�H�CH��t��tH��[ÐH�H�ƒ�H��t�� H�H��[�fD��H�U�bS�H�0���1�H����H�CH��[�@��H��bS�H�0�NJ��1�H��轺H�CH��[�@��������AUI��ATUSH���z��H�-S�bH��I��H�}�D����tpH�}L������H��H��u,H��� ��L��H�5f4+H��H�P�bH�81��F��fD�u�H���H��u�H����	!H��H��[]A\A]�f.��k��H��H���	!H�}H��L�����H��H��[]A\A]���ATI��UH��S�M����tiL��H���^��H��H��u6H������L��H������I��H��H�5�5+H��H���bH�81����f��u�H���H��u�H���	!H��[]A\����L��H��H��H�����L�����H��H��H���d��H����!H��[]A\�@��SH��H������H��[H�����@��H�U�bATI��UH���SH�0�Έ��H��H�EH�[pH�CH��t��teH�E��H��uH�mH�E(H����H�U@H�C(H�S@M��uFH�CH���Ɗ��H�kH��t@��uH��H�����H��[]A\�@H��H�����H���8���I��$uH�C$��H��L���y��L�cH�C`A��u�L��H���l��y����1���H�E(�I���AWI��AVI��AUATUH��SH��XL�gp�L$(dH�%(H�D$H1�E��tlI�T$H��tbM���lI�OL���D$����H9�tDH�@H��tDH;Pu��D$����H�L$HdH3%(�D$��H��X[]A\A]A^A_�f�M���
I�O�D$(M��M���D$H�$M��ƃ�����@�t$H����D$/H�t$H�t$0H�t$M9��B@�|$�3H���bI�_H�H��t1H��H�L$ ���H��t�D$(H�L$ �����D$H�����H��L�����H��H����I�GL��蹈��H���H��tH�|$uH��H����I�EpL9��-H�<$��H�t$H�<$�H�\$0H�D$8�%��I�E��H��uM�mH��L����v��H�ChH�EH�ƒ�H��u	H����M�n(M��tL�����H����M�nM���L���I��I�MM��M9�����H�]H�������H���A��I9�u�|$/�����1�L9��D�D$/��E1��2@A��DD�H�[H���v���H���I9�@��A��D���]���L9�D�H��u�H9Ku�A��A��ID��N���H�$H�����H��� �/H��H�ƒ��~����H�$H��L9l������L�z�J��H�XpH����H�<$L��������@L��蠅��H��$uI�G$����DL��H���mu��I�_I�G`�������H��L��������@��>��H�$I�Ep�����H�|$�X����Ā�O���H���30I�~H�5�w��H�����/���1�H�5�w��L���׷�0���f�H��u{H��H�5�v��H��蹷�D$�<���@H�$H�PH�������H�$H�@ L9l����������fD��tMH��H�5iv��H���a��D$(�D$���@H�|$�y���H�E�D$��H���`������H��t$(���t$H��u�����D$������Z���H��H��H�D$ �w�H�D$ H9�H�tH����H��t��H�H����H�������̀H������H������AUATI��USH��H��跀��H�spL��H��A���������H��������H���H����H�CXH����H�hH����E1��
@H�mH��tpH�]H�������u�H��t7�D��uH���H��uL9cAD��H�[H��uׅ�t�H�}A��L��H�wp��H�mH��u�H��[]A\A]�H��bH�5�++H�81����@��AWAVAUATUH��SH��H��(���H�CpH�PH��t)H��t$H��H;Uu�]H;P�PH�@H��u�H��赅��E1�1�H��H��H��A���O�������H��ts��unH���H��ubH�CXH��tYL�xL�kpH�CI�]H�D$M��t?fDI�?����u$M�7E��tI9^t>A�1�H��L��L������M�M��u�H��([]A\A]A^A_�H���Ȼ �l���L��H�5fs��H���^�H�D$I�vL��I�F�y���H�D$H����I�FL��蛂��I���H�4%�H��� H�T$@���H�D$H��H�T$�~�H�T$I�VpH���.������%���H��L��H�T$�S�H�D$H�T$H�I9�tH�ƒ�H��tH�L$��H�H�ƒ�H������H�L$�̀H�����L��蒀��H�T$H��$u@I�F$L��H�T$���I���H�T$H���H��t
@���5���I�Vp�K���H��L���,p��H�T$I�F`I�V��u�H��L��H�T$��H�T$�I�Fp�8���H�_�bH�5F)+H�81����ff.���ATUSH�����H�kpI��f�H�[H��tCH9�t�H9[pu�H���H��u�H�sH��t�@��u�H���H��u�L�����H�[H��u�L��[]A\�ff.����H��uPH������f�@��u�H���H��u�H�GH��u�8H�@H��t+H�H�у�H��u�u��u��H9puҸ���f.���AUATU�SH��H�����H��I��H�A��H�ƒ�H��uE��tgH9�tRE��t$�KH��L���
��H�[H����H9����u)H;[pu�H���H��u�H�sL��������f�H��L��[]A\A]�f���u��Āt�H���>)H���f���AUATI��USH��8dH�%(H�D$(1�H�GXH�$1�H�D$H��H�D$�����D$H��t+H�XH��t"f�H�;H�[H���p��H��u�H�|$蒹��H�$H�D$H�D$H�D$�V���I��I�D$XH��tH�XH��tH�;H�[H���1p��H��u��'���I9�u$H�T$(dH3%(H�$uH��8[]A\A]�������f���H��uPH��bH��H�5�(+H�81�����@��u�H�H�ƒ�H��u�� t�H����fD��L�5x��1��np��ff.���L�ex��1��Np��ff.���L�ux��1��.p��ff.���L��x��1��p��ff.���H��H��1ɿdH�%(H�D$1�H��L�tx��H�$��o��H�L$dH3%(uH����}�ff.�f���H��uH���bH�L��w����|o��@��uH�R��DH��t2H��t<��u��tBH�K�bH��fDH�ѿbH��@H���bH��@H�a�bH��@H��bH��t������H��uH�X�bH�L�&w�����n��@��uH�R��DH��t2H��t<��u��tBH���bH��fDH�1�bH��@H��bH��@H���bH��@H�y�bH��t������H��uH���bH�L��v����<n��@��uH�R��DH��t2H��t<��u��tBH��bH��fDH���bH��@H�a�bH��@H�!�bH��@H���bH��t������A��"���ATA��UH��SH��H������D��H��H��A�[H��]A\�L"ff.����ATA��UH��SH��H�����D��H��H��A�[H��]A\�"ff.����ATA��UH��SH��H���W���D��H��H��A�[H��]A\��"ff.����SH��H��� ���H��E1�1ɺH��[�:"f.���H�FH��tH��H�59o��H���ѫ��ff.�@��H��tH��t0H��t��DH���bH��DH���bH��DH���bH��D��H��t@��t1�H�H��t?@��u5H�H�ƒ�H��t2%(H= u�P�H�H�ƒ�H��u��� t�����ff.�@��H��uH�(�bH��@@��tH��tTH��t>��H�GH��t�u�H�H�у�H��uހ� t�H9���HE��fDH���bH��DH��bH��ff.�f���AWAVAUATUSH��H��8��H��H��t��tH��8H��[]A\A]A^A_��H���H��u�H�EH��uK�$�y��H��H��uiH��1����L�uL9���H�EE1�H�%�.fD�u�H�H�у�H��t��� t�H;��u��a���f.�I�Ĩ�5H��H�����L�uL9���	H�]M�nM��t(A��u"I�EH�ƃ�H��t�� t
M9���>	�$��x��I��H����L��1��(��M�~I�FM9��,H�%H�D$M�~M���jH�z�bL�0M���AH�D$H�@L���9w��H�D$H�x�+w��M�l$M���c	DL�}M����H�$�bL�(M����I�D$H����v��I�|$��v�������H�H�ƒ�H��t�� H�H��H���@��L�uL9��H�]H��H��������H�EE1�����I���H��uM�M���T���A��t�M�oM���D�$�rw��I��H���CH�D$��W
L��H�����M�wM9���M�oI�FH�$H��t-�u)H�$H�H�ƃ�H��t�� tH�$L9���!
�$�v��H�$H����
��
H�<$L���8��M�NM9��|H�$I�FM�AM��t'A��u!I�H�ƃ�H��t�� t
M9����$L�L$�v��L�L$H��I���DL��1�L�L$H�D$���L�L$L�D$M�QI�AM9���H�%I�yH����H��bL�M����I�@L��L�D$��t��L�D$I�x�t��H�$L�D$L�@M���]M�FM���<H���bL�0M���H�$H�@L�4$L���st��I�~�jt��H�D$L�pM���JM�wM����H�d�bL�8M���:
H�D$H�@L���#t��H�D$H�x�t������I���H��uM�M�������A��t�M�wM�����$�
u��I��H���8	L��1��T��M�GI�GM9��k	H�%I�OH����H���bL�8M����I�FL���ss��I�~�js������I���H��uM�vM������A��t�M�~M����	�$�_t��I��H���^
��oL��H�����I�VL9���M�~H�BH��t(�u$H�0H����H��t�� t
H;���H������I�GH����I�~H����H�ŷbL�0M���ZI�GL���r��I��r���:���I���H��uM�@M������A��t�M�pM���L�$L�D$�ps��L�D$H��I����L��1�L�D$���L�D$M�HM9��
I�@H�%I�xH���LH��bL�M����I�FL����q��I�~�q���(���H���H��uH�IH���
�����t�L�yM�����$H�$�r��H�$H��I���iH��1�H�$���H�$L�AH�AI9���H�%H�yH���(H�L�bH�H����I�GL���q��I��q���v���f�H�D$���H�H�ƃ�H��t�� I�EL��L���b��M�~M9��KM�nA��uL��L������I�GH�$H��t-�u)H�$H�H�ƃ�H��t�� tH�$L9���-�$�q��H�$H����L��1�����M�WI�GM9���
H�%M�GM��uvH�D�bL�8M����
H�$H�@L�<$L���p��I��o��H�D$L�xM���w����$�m���H�4$L�������\���I���H��uM�@M��t�A��t�M�xM���5�$L�D$��p��L�D$H��I���P
L��1�L�D$���L�D$M�HI�@M9���
H�%I�xH���H�Y�bL�M���gI�GL���o��I��o������A�������I�EH�ƃ�H��������� �����M9�������H���|m��I��$��H��L���W]��M�l$I�D$`L��H���������H�]H��H�����H�[H��H������b���M�l$L��H������M���H�]H�[�@���L��H������M�~M9��{���M�nM�m����H����l��I��$uI�D$$�(���H��L���\��M�l$I�D$`A���K�������L��1��y��M�wM9��LI�GH�%H�D$�b���A��������6���H�D$��dH�$H�H�ƃ�H��t
H�$�� H�H�<$L�����M�WM9��H�$I�G�uH�4$L��L�T$�h��L�T$M�JM��t'A��u!I�H�ƃ�H��t�� t
M9�����$L�T$�4n��L�T$H��I���_L��1�L�T$H�D$ �o��L�T$L�L$ M�ZI�BM9���H�%I�zH����H���bL�M���cI�AL��L�L$�l��L�L$I�y�ql��H�D$L�L$L�HM���&���A������H�<$L���d������A���Q���I�H����H���>����� �5���M9���(���L���j��I��$��L��L���Z��H�T$H�B`L�rL��L�������H�H�ƃ�H��t�� I�EL��L���A��M�wM9���M�oL��L��������I�GH�D$�m���M�nL��L�����M�mL��L���|�����H�D$���H�D$H�$H�P�\���H�<$L�����M�WM9������H�$I�GH�@����L���i��I��$uH�D$H�@$��L��L���Y��H�T$H�B`L�rA�������L��1��L��M�NM9���I�FH�%������H�H����H��t�� I�L��L�����M�GM9��5
M�wA��uL��L��L�$�h��L�$I�HH��t&��u!H�H�ƃ�H��t�� t
L9���F�$L�$�7k��L�$H��H���RL��1�L�$H�D$�t��L�$H�L$M�HI�@M9���H�%I�xH���JH�ƮbL�M����H�AH��H�$�i��H�$H�y�yi��H�$I�NH�������������H��L���t�����M�oM�m���A�������I�H�ƒ�H������� ���M9������L���g��I��$�
L��L���W��H�T$H�B`L�zL��L�������M�oL��L������M�mL��L�������Z�H�D$H�$H�PH�4$L������<��4H�H�ƃ�H��t�� I�L��L��L�T$ L�L$����L�T$ L�L$M�ZM9���M�JA��u)L��L��L�\$(L�L$ L�T$�G��L�T$L�L$ L�\$(I�CH��t(�u$H�0H����H��t�� t
L9���3L��L�T$ L�L$�%w��L�L$L�T$ H��I�A�
��������L��H��L�T$ L�L$���L�L$L�T$ ����L��H�����M�GM9�����M�wM�v���A�������I�H�ƃ�H��������� �����M9�������H�<$��e��I��$��H�4$L���U��H�$H�B`L�zH�<$L���#����L���e��I��$uH�D$H�@$��L��L���sU��H�T$H�B`L�zA��������I�F��H�$H�H�ƃ�H��t
H�$�� H�H�<$L�����M�NM9���H�$L��L�L$I�FH���|��L�L$��H�$L��I�GH���_��H�$H�@H��H���L����@��tGL�WM��t'A��u!I�H�ƃ�H��t�� t
I;���F	L�L$�7u��L�L$I���=���H���H��u�H�����L��1��K��I�VI9��zI�FH�%���H�D$�D���H�D$L�H�)���H�<$� d��I��$uH�$H�@$�M���H�4$L����S��H�$H�B`L�zA���(����&������H�H�ƃ�H��t�� I�L��L��L�D$���L�D$M�HM9���M�xA��uL��L��L�L$L�D$����L�D$L�L$I�AH��t(�u$H�0H����H��t�� t
L9����L��L�D$��s��L�D$H��I�G�-�����%���H��L��L�D$���L�D$����L��H��L�T$ H�D$����L�T$ L�L$M�ZM9����M�JM�I�k���H�$I�FH�@�c��$����Z������	H�H�ƃ�H��t�� I�L��L��L�L$L�D$�]���L�L$L�D$M�QM9���M�AA��u)L��L��L�T$ L�D$L�L$���L�L$L�D$L�T$ I�BH��t(�u$H�0H����H��t�� t
L9����L��L�D$L�L$�r��L�D$L�L$H��I�@�%����L��H��L�L$L�D$�,��L�D$L�L$��@��t=L�wM��t'A��u!I�H�ƒ�H��t�� t
I;���M
�r��I����H���H��u�H������H�H�ƃ�H��t�� H�L��H��L�D$H�$����L�D$H�$M�HM9��
I�H��u'H��L��L�L$H�L$L�$�\��L�$H�L$L�L$I�AH��t(�u$H�0H����H��t�� t
L;���6
L��L�D$H�$�<q��H�$L�D$H��H�A���������H��H��L�D$H�$����H�$L�D$��H�H�ƒ�H��t�� I�L��L������I�VL9��7M�~L��L��H�$���H�$�d�@��tEL�GM��t'A��u!I�H�ƃ�H��t�� t
I;���eH�$�tp��H�$I���u���H���H��u�H��M���A�����I�H�ƃ�H������� ���M9�����H�<$�w_��I��$�?H�4$L���QO��H�$H�B`L�rH�<$L�������A�����I�H�ƃ�H������� ���I9�����L���	_��I��$�8L��L����N��M�~I�F`L��L���Q����M�wL��L���=��M�vL��L���.���f�@��tGL�OM��t'A��u!I�H�ƃ�H��t�� t
I;����L�D$�o��L�D$I�����H���H��u�H���L��H��L�D$�'���L�D$M�HM9������M�xM��+�H�$L��I�FH�����H�$H�@H��H���r����H�$L�@H�<$L���Y����I�F�(�@��t=L�GM��t'A��u!I�H�ƃ�H��t�� t
I;�����<n��I����H���H��u�H���I�N�g���L��L�D$�i]��L�D$I��$ueI�G$�|�@��t=L�GM��t'A��u!I�H�ƃ�H��t�� t
I;�����m��I���{�H���H��u�H��S�L��L����L��L�D$I�G`M�GA����L��L���<������I�F$�����H�H�ƃ�H��t�� I�H��L��H�$�n���H�$L�AL9���L�yA��uH��L��L�D$H�$����H�$L�D$I�@H��t(�u$H�0H����H��t�� t
L;���\L��H�$�l��H�$H��I�G�����H��L��H�$�a���H�$��H��H��H�$蹺��H�$L�AL9��K���L�yM����@��t<H�OH��t&��u!H�H�ƃ�H��t�� t
H;���[�!l��H����H���H��u�H��x�I�A��L��L�T$ L�L$�I[��L�T$ L�L$I��$tzL��L��L�L$ L�T$�K��L�L$ L�T$I�A`M�QL��L��L�L$�r���L�L$��M�~A���PM��x�L��L�T$ L�L$��Z��L�T$ L�L$I��$u
I�A$�v�L��L��L�L$ L�T$�J��L�L$ L�T$I�A`M�QA���o����@�I�GH��L���ݾ����L���`Z��I��$�����L��L���;J��M�~I�F`A���M����	����H�H�ƃ�H��t�� I�L��L��L�D$���L�D$M�HM9��,M�pL��L��L�L$L�D$�L���L�D$L�L$I�AH��t(�u$H�0H����H��t�� t
L;���L��L�D$�4j��L�D$H��I�F�������H��L��L�D$�ڽ��L�D$��L��H��L�D$�0���L�D$M�HM9��wM�p�c���L��H��L�D$H�$����L�D$H�$M�HM9������I�HH�I��A��������L����X��I��$��I�G$��L��H��L�L$H�D$蛷��L�L$L�D$M�QM9��>���M�AM�@���H��L�D$H�$�X��L�D$H�$I��$uZH�A$�(�M�JL��L��L�T$ L�L$���L�L$M�IL��L��譼��L�L$L�T$ ���H�$H�@$���H��L��H�L$L�$�G��H�L$L�$H�A`L�AA�����H��L��H�$�O���H�$����e��Q���L��L�L$L�D$�W��L�L$L�D$I��$u,I�@$��L��H�����M�L��L������L��L��L�D$L�L$�VG��L�D$L�L$I�@`M�HA�����L��L��L�D$誻��L�D$��H�<$�'W��I��$���H�4$L���G��H�$H�B`L�rA����������L��L����F��M�wI�G`A�����L��L���>�����M�pL��L��L�D$�%���M�vL��L������L�D$���I�F����M�AL��L��L�L$L�D$���L�D$M�@L��L���ֺ��L�D$L�L$��I�@�}�L��H�$�BV��H�$H��$uNI�G$�c�L��H�$�V��H�$H��$t�H��L��H�$�E��H�$I�G`I�OH��L���_����"�H��L����E��H�$I�G`I�O��t���I�G���L�yH��L��H�$����M�L��L������H�$��L��L�L$L�D$�U��L�L$L�D$I��$����L��L��L�D$L�L$�JE��L�D$L�L$I�@`M�H���L��L�D$�6U��L�D$I��$tEL��L��L�D$�E��L�D$I�F`M�FL��L���s����|�L��L�D$��T��L�D$I��$u
I�F$�W�L��L���D��L�D$I�F`M�FA��t��4�L��L�D$�T��L�D$I��$�<���L��L��L�D$�zD��L�D$I�G`M�G���H��L�D$H�$�gT��L�D$H�$I��$����H��L��H�L$L�$�0D��H�L$L�$H�A`L�A�<���L���"T��I��$�;���L��L���C��M�wI�G`�'���I�HL��H��L�D$H�$�X���H�$H�IH��H���E���H�$L�D$�]�M�pM�v��I�G��I�@����M�xL��L��L�D$����M�L��L����L�D$�z�H�A���ff.���ATUSH�� dH�%(H�D$1�����H�ӽ��t
1�H�����@��H����H�*�bH�L�cp趤���l$H�$H��tm��uH�H�у�H���1��tQH���uEH�H�Ѓ�H����H��u,I9�tH�{H��tH��H�54H����H�[H��u�fDH�$H�x�s���H�<$H�5�M��H��H���}���H�<$褔��H��H�L$dH3%(�H�� []A\�@��t;H����H������ub����H�›bH����f.�H�H�ƒ�H��t!H�[������� �����B���f��� t�H������АH��bH������� ����I�|$H��tH��H�5#G���n��������H�[H��������@H���bH��R����H�Q�bH��B����H�	�bH��2����1��ų�����������u	H�����tpH��tK��uH�RL�sL����D��f�H��tRH��t\��u'��tjH���bH���fDH�ٝbH��@H���bH��@����fDH���bH��@H�y�bH��o���f�H�)�bH��W���P�1����@��ATA��UH��SH���z���D��H��H��H��[]A\�š��D��AUA��ATI��UH��SH��H���1��H��D��L��H��H��[]A\A]����fD��H�5�b��H��H��H�8�E��D��ATI��USH��H�����L��H�����H��H��[H��]A\�ݎ��ff.�f���ATA��U��SH��H���X��D���H��E1�[H��]A\�A�����AVAUI��ATUSH�.�� tNH����1�H��H�
V�.H����H�={�*1��n��I��H��&H�_�b[L��]A\H�8A]A^�̢��@H�n�f��H��M�u1�H�5�.����@�H�5}Z+L���ܷ��L��I�E uI�E H�<�H������L��H��胡��H9�u��s���f���UH��SH��(H�dH�%(H�D$1�H�$H�D$H��ƀu7H����H��u4H�EH�L$dH3%(H��ufH��([]�f�H�S(H��t�H��H��H�5ZD���%���H�|$H�}H��tH��bH�sH90uH�$랐H�wH��t�@��u��������%��D��AWAVI��AUA��ATI��USL��H��H�L$dH�%(H�D$81�H���D$LD��y���D$�L$E���CA�E�E1��H��H�$H�D$(H�D$� �L��H�����I��L9<$��K�<>�F��I��M��t1H�D$(H��tLH�t$J�;L��H�D$��
��u�J�;$L�D$H��u��L�D$蘐��L�D$H���fD1�H��L��H�D$�v�
L�D$��t�I��L9<$�p����H���oD�,$�T$�L$M��������������H�D$(1�H�D$�f.�I�$��9l$~FB�D-H�I�<�L�<��H��H�D$(H��t~I�H�t$L��L����
��t��$��9l$��|$t,I�$�Ā��H�����$H�۹HE�H9���H�L$8dH3%(�$��H��H[]A\A]A^A_Ð1�H��L���S�
���B����$�D��t��u�H��t�M��u�Dl$E��~�A�E�H�D�H�$H��H9�u��|���I�D$(�W���fD�$����o��H�=�..H�����H���8���Dl$E��~1A�E�H�\$0I�l�I�>I�����1�H��L��H�D$0��
L9�u�L���UV
H�=�*H���6���H���ާ��ff.���ATI��H��U��SH���H�L$XL�D$`L�L$h��t=)D$p)�$�)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$81�H��1�H����@��H�L$ L���H��$H���D$ H�D$(H�D$@�D$$0H�D$0�CA����xH�\$8dH3%(u.H���[]A\Ët$��t$���|$�L$��u�1�������ff.����ATI��U��SH���L�D$`L�L$h��t=)D$p)�$�)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$81�H��H��H����?��H�L$ L���H��$H���D$  H�D$(H�D$@�D$$0H�D$0�:@����xH�\$8dH3%(u.H���[]A\Ët$��t$���|$�L$��u�1������U�H��SH��H��dH�%(H�D$1�H��H�4$���.���H��H��H���@���H�T$dH3%(uH��[]�脿��@��H���������HO�H���ff.���H���c���H��H�H��?���D��H���C���H��H�H��?H�Ѓ��f���H���#�������HN�H���ff.���USH��(dH�%(H�D$1��D$���H�H��H�\$��tfH�vH�t$����H��t$H����H��H�������t��H�t$H����H��H�L$dH3%(��H��([]�f�H�L$H�T$H��H�D$H�t$�P������H�t$H��tW�D$��u|H�\$H��t*H��������}H�\$H���p����V���f.�H��������`���H�D$�Y���H�\$H���#����B���H�D$�;�����虨��H�b�bH�5�*H�81����H�J�bH�5�*H�81������T���H���,�H�5��*H��H�ˉbH�81�������H9�tWUH��H��H��SH��H��H�=�H�����H��tH��H��H��蒋����tH��1�[]�DH���[]�@��f.���H��dH�%(H�D$1����uI��H�<$H����L������H�t$dH34%(uH����i���f���UH��SH��H���k�����yH��1�[]�fDH��H���M����¸���H��[]�ff.���H��dH�%(H�D$1����uH�4$H�����Y���H�L$dH3%(uH���迻��ff.�@��UH��H��H��SH��H�=���H��辐��H��H���H��tH��H��H��������H�H�TH��H��[]���SH�=h�*�o���H� �b�H����H��H�5mR+H��J���H�;�H����H�5�/�/���H�;�H����H�5KZ0����H�;�H�����H�5�*���H�;�H�J���H�5�[0�ޔ��H�;�H�O���H�5��*�Ô��H�;[�����H�����H�5��*駔���H�GH��t_�8�W���w���Q���vH�@H��u��@H�@H��t"�8�W���w�#�0�V���vH�@H��u���1��DUSH��H��H��trH�H������7��}n����wVH�{(H��tMH�[0H��tD�����t=H�H������~Ƀ�?|'���@~1���n��H��[]�fDH��u�1�H��[]��H�k(H�[ H��t�H���[�����t�H���]���ff.�@���P�fDAUATUSH��L�'H���������A�D$I��A�|$H��H�0H��H��H��H9�w-�L�A�l$H��[]A\A]�fD�����?�`���<H��H9�r�H������1�I�$I��I�EH��@�X��ff.�U1���SH��H��H�tH�GH�x@�(�(����H�@H�X�h H��t�C(�K,H��[]�ff.�@AT1�I��UH��SH��H�tH�GH�x@������@H��H�sH��u�H�SH�@L� H�PH�kH�C[]A\�@��H��H��t@��t�DH��H��靤��ff.�f�UH��H��H��SH��H�چbH��"���1�H��H�EtH�}H��H��@�#���H��1�H���z��H��[]�ff.�@UH��ATSH��dH�%(H�E�1�H�����H�GH��I��HcpdH���H��H��H��>�:H�BH��H��H%�H)�H���H��H9�tH��H��$�H9�u����L�L$1�I���L���:z��I��I��H�؋��t3f.����W���nI��H�@H�������u׋P��E��H�
L�b�<��t�H�
e�b�4QH�
��bH��H΀<O�X��H��9�~�H�J�|�Ou�H��H�H(H�H���{���HcRI��A���m����H�CH�SH�BH��tH�PL9���H�[H�����;uЋCH���bM�L$�<��t�H���b�B1�H
݆b�?��Ou+H�S(H�4ƒn(uH�VH�vH�VH��tH�r�H��9��d������Cu�A�����@,uHcPA�<�9x(�����H9��[���1�H�}�dH3<%(uFH�e�[A\]�fD���f�H)�H�L�����1����I����������褴��@������AWAVI��AUATUSH��L�/A�� ��I��A��L��H�}�1��D��I�NI��H�L$1�H��)�?�H�T$H�<�M�<ă��C���I�Hc�H9�}I� u�I�V ��f�K��H��L��[]A\A]A^A_�fDH�oI���p���@��H��H��H�ыR�FQH��H�9)�H�H�T蔇��1�H���ff.�f�S��H�+H���H��<�u<H���*�G�Hc�H�>��f�H�^���H�H���H���H�\�H��H��[ÐH����H��1�H���� ��H��%��H����Hc�H��[�H�~@��uH�t$�4���H�t$�H�>@���;H��H)�H���H���-H�H��H���e����H�>1�@���O����Ա���E����H����H��H���� ��H����%���H�H�X�	���H��+BHc���DH�����H�����@H�^����H�H�>@�����H)�H�����H�>�@��������@���f�H������z���@H�^��tLH�H�~�~���f��۰��H�����H���Ȱ������1�H�@ �@ ���P���H��H�t$螰��H�t$H���H��茰�����H��H�t$�z���H�t$H������H��H��[�`����[�������H��H�t$�I���H�t$H�����1�H�@ �@ ��������PXH�5;+H��H���bH�81��>���ff.�H�GH���H��tPH����H9�u�=DH����8�����H�BH9�u�H�pP��tH��H�=�+��1��!����H�pPH�=�+1�����ff.���UH��SH��H�H�HH�@H��H�
H�{�؈��H�kH�CH��1�[]��H��t3@��u-H�u&H��H�H�Ѓ���t,��tH��鮣��fD飣���K���H����fDH�G�� tH�GH���[���H���fDAUATUSH���H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H�����H�G��I��H��L�(�Ů���D$H��H��$�D$0H�D$H�D$0H�D$ I����H�������M��E1�H�D$��L��P��Y^I��uBH����H�SH�H��t�uH��H��H�D$�M���H�D$H���p���#fDM��uH�����H�CH�H�D$(dH3%(u5H���[]A\A]�DH����M��E1�H�D$�����1�P�j�XZ�����H�GSH���H�@�����t'H���H;2tTH��1��f�H��H;r�t6��9�u����H��E��H�G��H�,+�p`1�������[�f��Å�xЉ�[�1��f�USH��H�����H��1�@L�PE���E��t*M���I;0tRI��1��@I��I;p�t&��D9�u�I�����H��u����f.���xމA����H��[]�1���fDATI��UH��SH��H��dH�%(H�D$1�H�L$H���B����4$��t��f�H�KH�����u�H�S1�H9��t!H�|$dH3<%(��u8H��[]A\�fD�B@tً|$)lj����+z,9�u�A�$��u��"���f�ATI��UH��SH���(號��H�H�{L� H�QH�hH�PH�SH�@ H�Pt H�SH�H�B H�CH�[]A\�f�H�H�CH�CH�[]A\�ff.�f�H�H������t��uH�G(�R������H�=O+H��1��Θ��ff.�H�H������t~��t��u
H�G Ã�t�R���ù��H�=+H��1�肘��f�H�H�����P�Hw!H�
s�*Hc�H�>��DH�G �1��R���u���H�=�+H��1��4���@H�H������&tI~��(t|8��guH�G0�fD��$t�%t�R���&���H�=f+H��1����D1��DH�G(�H�H������&tA~��(t|8��guH�G(�fD��$t�%t�R���Ƹ��H�=+H��1�腗��DH�G �ff.�H�H������Xt��YuH�G ��H�G(�R���s���H�=�+H��1��2���f�H�H������etAUH����SH��H���>���H�3H��H��+H��1�H���#���H���[]��H������H�H�����PŃ�2wDH�
��*Hc�H�>��D�Ç���ۭ���ӱ���˨�������R��袷��H�=�+H��1��a����UH��H��H��SH��H���9y���uH��u&H��1�[]�fDH���ȃ���EH���[]�H��H�?ubH��H�5�+H�81��+���ff.�AWI��AVI��AUATUSH���GLc/LcgHco�H�L$�D$��t��H�L$L��H��H��H���5|��L��譵��H������H��H���*��K�t-H�����K�t$H�����H�t-H�����HcD$H��H�t����H��H��[]A\A]A^A_�ff.�@AUATUS�$H��H�GH���H��tTH� u`H�@ �:H�@��~`H��t[H� ulH�@ L�(I��H��H��L����w��H��tnH� tUH��H�X(H��H��[]A\A]���:H��H�@���H���$H��[]A\A]��H���f.�H�@ �f.�H��L��L��H���_���H���7���H��H���܂��H��H�������o���ff.��AVAUATUSH������H���(A��I�Չ�M���wx��H��tR�SL�0L�h�J�H�;�h�H�SD�` H�@t H�SH�BH�C�[]A\A]A^�fDH���[1�]A\A]A^�DH�H������?t��nu�Ǹ����[���R��蓴��H�=�+H��1��R���f�H�����AUATUSH��H�GL���A�}�tGI��L��1��D��Hc�H�@I�\��{�t#H�{L���'�����u�H��H��[]A\A]�DH��1�H��[]A\A]���H�~t1��f�UH��SH��H����r���sH��H�X+H��1�����H��1�[]�ff.�@AWE��AVI��AUE��ATI��USH��H��H��(�H�$H�����H�CH�SH�ߋhlH���H�Px��H�t$H�T$���̪��H��H�D$菤��H�t$M��E��VH�T$L��RH��AWUL�T$ H�L$(L���ҙ��H��H[]A\A]A^A_�H��~��AWE��AVI��AUI��ATE��USH��H��H�GH�4$H�hx�E���H��H�D$����UM��E��AWH�L$L��H��H�|$�ju��H��([]A\A]A^A_�ff.���������H�?~FUH��S1�H���f�H��H9]~H�|�H��t�跨��H��H9]�H��[]�fD�ff.�@��SH��H�@����H�{�v���H�{ [�l���ff.����SH��H��O���H�{�6���H�;[�-���ff.�f���SH��H�H��t
��m��H�CH�;H��t�m��H�[�ff.��SH�4�H�taH��1�規��H�P �@uH�P H�[�AUI��ATI��UH��SH��H���BH�w0H�W�G�B H��G,�B�G(�z���H�CH��t����{(�|���H�C H��t���H�CH�C8H�CH�EL9��%�H�=d+H���������H�ztb�U�MD�D�HD9�uXD9�uS�E$<l���E%<uo�U��uO�S,��uzH��[]A\A]�@H��L��襎���e���H��L��蕎���<���H��pbH�5+H�81�����H�avbH�5+H�81�������H��pbH�5�+H�81����H�.vbH�5+H�81��ͪ����H��pbH�5�+H�81�貪��H�kpbH�5Z+H�81�蚪��H�SpbH�5(+H�81�肪��f���UH��S1�H��H�?H��t�Tf��H��H�}H��t�Cf��H�H��H��[]�fD��H�vH�����ff.�@��SH��H��dH�%(H��$1�H��H���~H	H��tbH��H�55+H�81��ө��AWAVAUATUSH��8dH�%(H�D$(1�H��:��H�GH��D�D$E��H�t$I��I�ՋhlL�`x�������H��H�D$輟��H�t$$M��VH��L��ATD�D$,APE��UH�|$(H�L$0�Q��|$DH�� ��uH�\$(dH3%(uH��8[]A\A]A^A_��q����|���ff.��SH���W���t+��uH�߾[�@8%���t#��H�=J+1�蛌��H��1�[�8%D[�fDAW��AVAUATUSH��H�9pbL�-jpbD�4xC�D5��tRH�L$H��I��1�1�A�fD�H���wL��H��!	tI�$H�t$H�<��Ճ�Hc�I�>B�(��u�H��[]A\A]A^A_�f�AWA��AVM��AUE��ATA��UH��1�SH��H�EtH�}H��P�@�T$���T$H��D��D�`H�p(H��D�x0�P4H�^�L�p(D�h�H�@�@8�@ ���H��H��[]A\A]A^A_�H�H�@H��t,1ɋ��r
��v��uHH�@H��u��@��u	H8��H�H�H9�t5�h(�B(H��P(��uH�PH�@H�PH��tH�B���1��ff.�f�H�G(H�H��tH��t-�G.��H�WH�O�H�QH��t�H�J�DH�WH�O1�H�QH��t�H�J������������@��@E‰�f��E‰�f��E‰ƒ�@��E‰ƒ�@��E‰ƒ���E��f�H�G�8u�D��Q���vH�@H��u�D�P�JɃ�v;��B��v3H�@H����������Q���v�H�@H��u�P�JɃ�w�H�PH�FH�VH�pH�VH��tH�rH;Gt�H�w�f�SH��1�H�tH�{H��@�0���H�@H������H�K�Qd�r�qd�P�����H�PH�P$�`,�[ÐATUH��SH��H��H��dH�%(H�D$1��ZRH��H��H��I���)�����t%H�$�C(H��H�L$dH3%(u%H��[]A\ÐH���8���L��H��H��H���g����� ����G�~t8�@t�G,���G�f.�� u,�t8H�G8�@���G�f.��G�G�f�H�G8�@���G�f��u�t �G ���G�fD�G(G$�G�fD�GG�G�ff.�H�H�1�H�H��t��t�f.�H���H�������ff.�@AWAVAUATUSH��(H�H�T$H�L$;����I��A��E1��fDA��C�/9�rqH�D$H�XE��t~�;u^�{uXC�D=D���D$H�C(H�8��t��I��H�C(H�x�t����u,I�$����AD)�9�u�H�[��9l$t&�;u�{t�H��(1�[]A\A]A^A_�f.�H�D$D�8H��(�[]A\A]A^A_�@USH��H��H�>H��u�sDH�o ����H��t`H��H�GHH+GH�tH�H�P(H�2H�vι�H�@H���3��������w�H�P(H��H�2H;Or�H�o 迩��H��u�H��[]�H���������H�;�P���H���H��H���fDAWAVI��AUI��ATI��USH��H��H�t(1�L�yxH�C(H�<�f�?uk�G��H��H9kw�H�C0H��tf�8���H�{8t)1�M�|$xH�CHH�<�f�?u?�G��H��H9k8w�H��D��[]A\A]A^A_ÐL��L��L���R���A���DL��L��L���:���A���D�OL��I�|$PD�D$�ʉL$���HcT$�t$L��I�D��d��D�D$A���0�����OL��I�|$PD�D$�ʉL$���HcT$�t$L��I�D���c��D�D$A���4����H�@(H�������@������hI�t$xI�|$PD�D$���P���HcT$��L��I�D��|c��D�D$A�����ff.�����t1��DAUATUH��SH��H��H�L�jD�bH�H�pxH�xP���Ic�I�D�1�H�U�CH��[]A\A]��PXH�5�*H��H��ebH�81���f�SH�GH�8�����H�_H9�	�����[����ff.��AVI��A�S�H��(dH�%(H�D$1�H�t$H��D��M��D�HA��)�A)�I��M��tND�BD��I��H��A��uѺ	E1�D��O�DI��F�D�T���H�D$dH3%(uH��([A^�@D��A��H)�H��	�脕��@��ATI��UH��SH��ǀu"H��L���H���(���H��[]A\�fDH�^(L��H���	���H��~�[L��H�59
H��]A\��v��ff.�PXH�5W+H��H��hbH��H�81�����ff.�@��U��S��H��H��H�WH�JH9�sqHH��A�BH�0H��	H��A�BH�x1ɺ����H�����x-�@uH��H��[]��H���Hi��H��H��[]�fDH���Pp�����H���3���AUA�����ATI��USH��H�GH�8H�OL9�����1�H��H��H��trH)�H�H��L9�wtH��L�-j�*H��w�5f.�I�D$H�8�L��H���w���H��w�I�D$H��H�8H��H��H�5�*[]A\A]�L���@H��[]A\A]�����������ATUH��SH��H�dH�%(H�D$1�H�ځ� ��@uhH�^L�fH��H��H��HE�H�$�H�����H��H�����H��L��H�����H�D$dH3%(u-H��[]A\�fDH��L�f��H��H��H��HE�H�$��Œ��D��ATUH��H��SH��H�� dH�%(H�D$1�����tiH��躜��L�`L���t���H��H�$H�XH�\$� ���H��H����H��L��H�����H�D$dH3%(uH�� []A\�H��H��������f��G�t��U��SH��H���GH�nc�H�(�Mb��t	H��[]�f�H�{P藇��H��PH���[H��]�-^��ff.�f�Uf�H��AWAVI��AUATI��GSH��P���H��HH������dH�%(H�E�1�H�GH��)����)����D�x)� ���)�0���)�@����]s��M�^D�����fo����fo����HDž����Ic{A�Cfo� ���fo�0���)U�A��A��fo�@���)�p���A)�E��)]�A)�Ic�)e�H�4�)m�I��H�����H��H��H��H���H)�H���H9�tH��H��$�H9�u�%���L�|$I���E�/����M����w�1��H��I��H�BI�L�H9�u�A9�~-I���A�8I�L�E�Hc��H��H�4�H�q�A9�u�L������1�L���r��L����I��lI�FH���H�H����������L;b ����H�B(L��H���H�����I��I��I�FL��H���I�FL�xxH������H������H��f���L��H������H���#���L��H������褟��E1�A��M�nH������H������L��H������VH��AWjj�S���H�� H������I�� �<����H�]�dH3%(ufH�e�[A\A]A^A_]�f�H������D�������]n��M�^D������I��Ic{E�/���?���1��^���f�H)�H�L��
����m����а���հ��AVI��AUATUH��SL�mPH��H��x貍��A�H��L��I���q���H���	g��L��H������H�H��u0���S H��L���B���H����f��L��H���p��H�[H��tV�f��%t�f��*tg�H�=0�-�a��L��H���Kp���H�=g�*�a��[L��]H��A\A]A^釖������ff��L��H���p���f��SH��L����H���:f��L��H����o���ff.�f���H9���USH��H��H��u�H��[]�f�@��u�H���H��t_@��uYH���9�uO��tŃ���H����
��������t?��t:H����CH����H����[]����H�������[]�@1��DH�sH�}�;������N���H�sH�}�&����������9���f�H��H��H��[]�����H��H���M_��H�����DH��H��H��[]��ff.�@ATUH��SH��H��dH�%(H�D$1�H���p����t.H�$A�ą�x#H�L$dH3%(D��u'H��[]A\��H�SH��H��A��Hc��X����茋��ff.����UH��SH��H��(H�vdH�%(H�D$1�H�GH�x�O���H�uH�H�$H�CH�x�8����H��H�H�D$���H��H����H�D$dH3%(uH��([]�������ATH��UH��H��SH��H�RH�z����H��A��H�CH�x���Ic�H�߉���Hc�H���t�[1�]A\�ff.�f���AVI��AUATUH��SH�6�� tcH����I��H��1�M�n�+�M��~;fDL��I� uI�F H�4�H�EH��H�x�+���H��Hc����L9�u�[]A\A]A^�f�M�fL������ATUH��SH��H��H��@dH�%(H�D$81�H�d]bH�0�|���H����f�H�L$0H��H��H�T$)D$L�d$)D$ H�D$0H�D$蹣��H�CH�4$H�x�x���H�t$H�H�D$ H�CH�x�_����H��H�H�D$(�����(L��H�����H�D$8dH3%(u8H��@[]A\�H��u/H��^bH�8�nR��H�5��*H��H�}]bH�81�胒�����@��uH�}��H��tH��t<@��u*@��tH��ZbH�8�H�_[bH�8�H��YbH�8�H�gUbH�8�H�WbH�8�x���ff.���ATUSH��H��H��H�ndH�%(H�D$1��U��H��A��H�CH�x�B���H�t$�H�߉�D�d$���Hc�H�����H�D$dH3%(u	H��[]A\�������AUI��ATM�eUSH��H��H���Z��I�mHc�I�E tM�eH��H��2H����H��H����H��H��L��H��[]A\A]�7������c��H�x�`z��H�SH��H�z�p���Hc�H�r����SH��H����T��H��[H���D���@UH��AWAVAUATI��SH��(L���dH�%(H�E�1�M���=A�EH��H��H��H��H��H��H���H)�H��H9�tH��H��$�H9�u�%��L�t$I������1���H��M�<�H��I�tH����I�<$���A�A�E��9�r�I�T$H�L�z�����I9���D�}���t[E1��D��L��A��Ic4�H��L���sL�����sL������sL������sL������s L�����E;}r�H�M�dH3%(�E�uaH�e�[A\A]A^A_]��I�D$H�L�x�����I9�9D�}��@H)�H�L�L�t$I���������@���������聅����ff.��H��u1���UH��H��SH��H���[��H��t'H������H�UH��H�z�/���H��H�[]�fDH��1�[]��UH��AWAVAUATSH��XL�~8dH�%(H�E�1�M���b�AoH��)E��AoOIc)M�A��E+g���cH��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�t$Ic�I���H��L�u�L�u�H�E�E���gH�E�E1�f�I�wIc�H�M�H��A��H�4�L�,����I�EE;7|�E��~+E1�I�GJ�4�H�CH�x���H�U�H�J��I��E9�ؾH����IcH�u�H��H���h��H�߉�H�E��u�H�U�H�u�H���E��H�߉�H�E��R�H�u�� H���!�H�M�dH3%(�H�e�[A\A]A^A_]��Ic�H��H�E�E����H�E�H��H��H��H%�H)�H���H��H9�tH��H��$������uuL�l$H�E�I���L�m�����H�E�H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$I���L�m��F���H)�H�L��H�E�H�E�����f���fDAVAUA��ATUSH��H��dH�%(H�D$1���~r�����H�[9�u�E��I���DH�[��H�������H���L��L���f����t�H�� �Cp+$H	�H�L$dH3%(uH��[]A\A]A^�1��迁��ff.�@UH��AWAVAUATSH��(Hc��dH�%(H�E�1�H��H�U�H��H��=� A��H��I��H��H��H%�H��E��H)�H���H��H9�tH��H��$�H9�u����L�l$I����~u�A�L�4��*�H�t?H�KH�y���H�K�D=I��M9�t>I��$�H��J�48�Z���H��u�I��$�J�<8H��������?H9�v����H��륾H���S�H�U�L��H��H��� �H�M�dH3%(u/H�e�[A\A]A^A_]�f�H)�H�L4��0���f�H�u���d���=���ff.�f�UH��AWAVAUATSH��(L��dH�%(H�E�1�H�GH�H�@H��H�E������H9��oI��M���}L���5���L��I��H����M��tiH��Tb�L��H��v;	H=���H��H��H�E�H��H%�H)�H���H��H9�tCH��H��$���1��)�H�U�dH3%(�E���H�e�[A\A]A^A_]�@����H�\$H���H�H��L��E1�H�5���H���[:E1��L��H�
9��H���~���H�3L��L�{I��H���Y���L��H����L��L����M9�u��P���f�H�}�H���D^��H���q���@H)�H�L��V������p~����H��SbH90t`H�aObH90tDH�%QbH90tXH�QPbH90tlH��JbH90tPH�!PbH90u^����f.�����fD1����f����fD���f����SH��H���*r��H������H�=f�*1��k��@L���I��A��u<��u`E�P	A9�w8�	1��A�<H����A�<9H	�9�r�D��DE�PA9�v?PH��LbH�5�*H�81�辆��fD����Ƀ�E�H��A9�w˃�u��H��D�Ð��H��H�HH�t$�T$�F������|H�2�*��Hc�H�>��f.�H�IIbH�H��ÐH��NbH�H��ÐH��QbH�H��ÐH��MbH�H��ÐH�QObH�H��ÐH�yNbH�H��É�H�8QbH�5Q�*H�81��ׅ�������H����H��H�WH�JH9�sHH�x���u�Lo��H��H���`���H�����H��PbH�5b�*H�81��p���PXH�5�*H��H��ObH��H�81��O���ff.�@ATI��UH��H�5�LaSH����=��H9(~'H�\�H��t��uH��L��[]A\�dh��@[]A\�H�����ATI��USH��H�5LaH��dH�%(H�D$1�H�GHH�x�n=��H;��H�l�H��t#H�T$dH3%(H���H��[]A\�I�|$HH��G�wH���9�sg�P����$��9�vl� u0��H��IaH��L���H��I�D$HH��H��H�x����@H�t$�T$���H�����z��H�����H��IbH�5M�*H�81���H�QNbH�5��*H�81��؃�����AVAUATUH��SH��H�HdH�%(H�D$1�L�d$�T$L���h���H�}HL��H��A���V���D�d$I��H�EHL ��BD���*V��L��L��H���L���H��蔇��H�L$dH3%(u=H��[]A\A]A^���s�H��Hc��2���H�xH� tH�x輀��A����ry��f���AU��AT��UH�,�SH��H�GH�PH9���H(H��I��A�H�uH��t����I��H�U�H��tH��L�����H���L�����t*���H�����x*�@u5H��H��[]A\A]�f��`��H�����y�H���T����@t�H���M��H��H��[]A\A]�H����@��AU��AT��USH��H��H�GH�PH9���HH��I��A�H�sH��t���I��H�s�H��tL�������S H��L����>��H���E��x5�@uH��H��[]A\A]�H����L��H��H��[]A\A]�f.�H����S���E�H����f.���AWAVAUATU1�SH��H��(H�HL�d$H�t$L��T$���H��I��H�D$�_h
H�$M��~nfDH�{HL��A����H�{HL��I�����I��M��tL��H������I�ǺM��tL��H������H��H�<$L�����K��Hc�H;D$|�H�<$��P
H�D$���x+�@uH�$H��([]A\A]A^A_�@H�<$�K����DH�<$�R��H�D$���D��AWI��AVAUATUH��SH��H�HdH�%(H�D$1�L�t$�T$L������A�?I��H��xw��:��I��M��~A1��H�}HL������H��tH��H������H��L����!���Hc�L9�|�A�@u3H�L$dH3%(L��u*H��[]A\A]A^A_Ð�[B��I���fDL���x^������u�����AWAVI��AUATI��USH��H�HdH�%(H�D$1�H�l$�T$H����I�~HH��H��A������l$I��I�FHH(����A�$D����<@tc�Q��L��H��H����{��H��A�$�����@u,H�L$dH3%(H����H��[]A\A]A^A_�fDH���P5H�����CQ��L��H��H���%�H��묍s�L��Hc��r���H�xH� tH�x�{��A���J���@H���P��A�$�@�g�����t��@H���'����u3H��uH��H���A��f��u�H���H��
u�H��H���4f��@H�H����UH��SH��H��H�|$H�T$�c��H�D$H�HHc�H9��������'~?H�PH� tH�PH��H���?��H�t$H�s@H��t@��uH����`��H��[]�H�CbH�5��*H�81��D}��@ATI��USH��H�?���H��X��!'H�;I�4$H�ŋ��H��X��!'[H��H��]A\�f.�f�ǀu)f��u*@��@u,f��t
����1��D������A���
��fDATI��USH�_H����%'H��t(M�$$H��M��t4H����%'[L��H��H��]A\�Q��f�[�
H�=��*]A\�+�A��I����ff.�AUI�պATI��UH��XSH��H���� 'I�u�H��Hc��� 'I��$pI��$0H�H�L�H�H��I;�$`tQH,�H9�r�6fDH�H9�v(H��H��H)��#H��u�H��1�[]A\A]��H���[]A\A]�I��$8�fDUH��AWAVAUI��ATSH��HH�u�H�U�dH�%(H�E�1�H�H�x�>��I�}H�U�H�5��I��L�m�H�E��U��I�EH�XH��H��>�H��A��H��H��E��H��H%�H)�H���H��H9�tH��H��$�H9�u����L�d$I�GI���H�E�H��u!�5DH�E�J�<��X��C��I��L9�tI� u�I�G ����L�����H��L��L���X��H�M��H�E��H�E�dH3%(u:H�e�[A\A]A^A_]�fDH)�H�L4��U���f.�H�޿�T���^p��ff.�S��H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$��$H�D$H�D$ �D$0H�D$�o��H��E1������H�T$�L�
�,H��R���cZYH���oU��ff.�@AWI��AVI��AUATUH��SH��H���M��I�?I�vI�ċ��H��X�%'I�?A��H��(�#"'A�~H���&��D��H��H����IH��tH��H����C��H��H��[]A\A]A^A_��L����
H���QJ��L��H�����H��D��H��H��,1��o���ff.�@AWAVI��AUI��ATI��UH��SL��H��M��tNH���f!'H��I���k!'H��L��H���t��H��H����AH��uFH��H��[]A\A]A^A_�f.��B�uL�èt��<��H�����|��H���H����m��I�t$H��I����H��X��'H��H���+L���1����ff.�AVA��AUA��ATA��UH��SD��H��PL�L$HE1�dH�%(H�D$1�E��u8A��D��D��D��H������H�\$dH3%(��H��P[]A\A]A^�H��$��Ic��$(H�D$H�D$ H�D$H��<bH���?��1�H�EtH�}H��@H���ϳ��L�T$�<$E1�I��1�H�D$�%���A���L�H�I��H��9�~��/v�H��H��H�I��H��9��E�������<$�����l��f���U�H�������SE1�1�1�H��H�����H�UH�
��*H�PH�BH�EH�Cǀ�H���H��[]��H�GH���H���H� ��H�@ H�x�������AWMc�AVO�|I��AUA��ATM��UH��SH��L��H��H�|$@�$<��H����H� ��H�@ L�`(I�1�I�tI�~H��@�(�U����uL��E1�H�@H�S1�L�` H�P��@H�BD��H�C1����H�SH�PH�BH�CH��[]A\A]A^A_��H��H�x�����H���^����H�T$@L��L��H���m��I�VH���H� uQH�R H�RH� tXH��L�zI��� t8H����I��H�tH��豅���L��褅������H���f�M�gL�����H�R �f.�AWM��AVM��AUI��ATUH��SH��H��H�T$�I��L��I��I�EH�$�FO��I�UH��H�
'�*H���P��H�L$A�H��H�D$E1�H�I�6�(1�H���'���H�UI�6M��H��A��JH�PH��H�BA�H�E1����H�UH��H��L�T$A�MH��E1�H�PL�
��-H�BH�EA�D$(ARH�T$�F���H��(L��[]A\A]A^A_�@AWI��AVI��AUI��ATM��UH��SH��L�L$�I��L�L$L��A�H�ùGI�1I��H�D$P�H��1��K���H�UH��H��A�L$L��L�
^�-A�H�PH�BI�T$�C(I�FL�pL�uAW���H�EH�CH�XH�]H��([]A\A]A^A_��AVAUI��H��ATA��UL��SH��I��XH��A���dH�%(H�D$1��R'H������A��H�CH�@x���E1��D��D��H��1��i���H�UD��H��A�A��H�PH�BD��H�E1��8���H�UM��A��
H�PH�BH�ED��1�D��H���
���H�UH�PH�BH�EH�D$dH3%(u>H��[]A\A]A^�DH�CH��L�,$����lj��A��I����wg�����t��fDH���UH��SH��H��H�G�p`��u�O��H���/B���ƺ����H��E1��1��F���H�UH�PH�BH�EH���[]�f.�AUI��H��ATA��H��UH��SH��H��H���x��H��H��uH��H��[]A\A]�DI�ED��H��H��H0�K���H��H��[]H��A\A]�f.�AVAUATUSH��tC�.E1�H��t�Bht�J0��uH�z`�����uDH�����[]A\A]A^�DH��tc�Bht]�B0��uVH�z`uOA������@A��H��I���L����w��J��J�t�H�����H��I�$H����DH�1��u���fD��A��Z���f.���SH��H�� dH�%(H�D$1�H���H��tH�F�H���D$� ��H�t$�H������H�D$dH3%(uCH�� [��H��f�H9�t�H��H��H��?H)�H	�H��H�t$�~D$��d��fDSH���
!H�SD�JL�RE��t*L��2b1�D��I�4�HcL��A��L�D9�r��uH�H�ƒ�H��t	H
H��[����H��uH���@��u�H��H������������H���*Hc�H�>�����twH�H��H��H���f�H���w��H�������[��H�H����H���wv���H����H��t$�GH���&9
fDH��H���c��@H��f�H9�t�H��H��H��?H)�H	�H��H�|$�~D$�ff.����B�H�WH��H���rH��H9�scH���H�0fH~�H9�tBfH~�H��<������tH��H��u�fDfH~�H��H��H���fD� ��PH������f���ATI��USH��H�H�T$��;W��H��JH��H�t$�L$����H��tL��H���.�H����1�1��=H���E��x,�@uH��H��[]A\�@H���87��H��H��[]A\�@H���@>���E��H��1bH�5�*H�81��k��f�SH��H��H����t`��E1�H�� 1����A��M��I�����M	�tv詩H��uH��[�fDH��@��u�H��H�D$�N��H�D$H��[��H�GH�OI�����H�I����I!�A����M	�u���I���|���@H�� H��K�4	H	�H	�H��H���ff.�f�SH��H����H��M��t�� A����c ��D	�D�H�C���H�����H��u����u��I��I�����M	�tAL��詨H��uH��[�fDH��@��u�H��H�D$�M��H�D$H��[��H�� H��H�H��H	�H	�H��H���SH��H��H���tQH��H���H�� %�	�H�� H��H�H	�H	�H��H��D@��uH��H�D$�-M��H�D$H��[�f�H�xVH�����H�NL�F ��H��tD���ȧH��t�H��뮉����u�M��D��A�����I	�u��p���ff.�f���AWAVAUATI��USH��H��(L�*dH�%(H�D$1��D$H��uh�D$�L������D$�<��I�EH�H�h�����H9���A��H�t$L��D�t$����H��L�������fDI��A����H��T$�L������	�Lc�H�L$�T$���I�EH�L$H�H�h�����H9��H�{�����	��L$����	ʈT$M��uH�H�у�H��tH������	�H�t$L���D$�%��H��.aH��L��B��H�t-I�|$H�����H!�H�u�Ty��1�H�L$dH3%(�nH��([]A\A]A^A_��H����H����H��$����uu�����A��D$�L����	ЈD$���I�EH�H�h�����H9�~	�<��@H��D��1҃�H������A����=���f.��D$�L������D$�4��I�EH�H�h�����H9��A���u�D�����@�A��G�����A��/����A������D$�L������D$���I�EH�H�h�����H9�����A��|�����\��ff.���AT��UHc�H��SH��H��dH�%(H�D$1�H�D6H�5�bH�$H��u'L�%�0@�L���{I��H��H���bH��t�H��H����T��H��tVH�pH� u)H�hH��u-�+H��H�T$dH3%(u-H��[]A\�H�hH�pH��t�H��H���u����fD1�����[���AWAVAUATUSH��HH�>H�|$L�D$D�L$D�L$�DH�BPI��I��I��H�D$ 1�A�I�FH�,��Ef��Ut0f=���f��0�|A�H��HL��[]A\A]A^A_�@H�u(L�D$H�|$E1�L��L���\���H��I��t3L���Kj��I��H��I9w��|$t�H��HL��[]A\A]A^A_�Rf�I����H�u(H���fDH�MHM�����|$���E��4���I�T$XH��H�T$8H�L$0�
'H�L$0H�D$(H���
'H�t$(H�T$8H���a��H��H�D$(�.H�t$(H���,���H���Z��H�uH��I�D$P���H��X�'H�|$H��H�A�+��1�����H�t$ L�L$M��H��H�|$�V�H������fDH�L$(�(��H�L$(H���*�����E�ux���I�T$XH��H�T$0H�L$(�'H�L$(H��H���'H�T$0H��H���)`��H���X����H�L$(�vg��H�L$(H������f�A��F���DH�L$(�Fg��H�L$(H���~���H�L$(�(��H�L$(H���g���f�AWM��AVAUI��ATUL��SH���H��H�t$�L��$��T$dH�%(H�D$81�H�5(bH��}+��1�H��H�tH�{H��@H��H�T$�z���H�T$1�H��I���H��H��$��3��L��H�D$�3��E1�H�L$H��A��M���L��H������I�l$H�D$(I�$H��t@��tvH�D$(�����M��A��� ���T$�t$�8H��菹��H�t$(H��t@��tOH�T$(H�T$0H�T$(H�\$8dH3%(ubH��H[]A\A]A^A_ÐH��H����D��H�D$(������@�z���H��H�D$�D��H�D$�@�T$�t$�7H�������o����W��f�AWI��AVAUM��ATI��UH��SH��H��L�D$�Y���I�7A�$E1�I��H��(1�H���i�H�SI�7M��H��A��HH�PH��H�BA�$H�C1��6�H�SI�7H��A�A��H�PH��H�BH�C1�A�F(A�$��H�SI�7H��L�L$A��H�PH��H�BA�$H�C1����H�SI�7H��A�A��,H�PH��H�BA�$H�C1���H�SI�7E1�H��(H�PH��H�BA�$H�C1��c�H�SI�7E1�H��A���H�PH��H�BA�$jH�Cj����H�SI�7M��H��A��H�PH��H�BH�CX1�ZA�$��H�SI�7E1�H��A�	��H�PH��H�BA�$jH�Cj�d���H�SH��A�H�PH�BY�-^I�7H�C�D$PA�$��H��H�L�L1���H�SI�7H��E1�A��H�PH��H�BA�$H�C1��Q�H�SI�7H��A��-H�PH��H�BA�$H�C�D$PD�h1�Mc�O�L-��H�SI�7H��E1��'H�PH��H�BA�$H�C1����H�SI�7H��E1��'H�PH��H�BA�$H�C1���H�SH�PH�BI�FL�p�L�sH��[]A\A]A^A_�ff.�AWAVE��AUI��ATI��UH��SH��H��L�D$�)���I�uA�$E1�I��H��(1�H���8�H�SI�uM��H��A��HH�PH��H�BA�$H�C1���H�SI�uH��A�A��H�PH��H�BH�C1�A�G(A�$���H�SI�uH��L�L$A��H�PH��H�BA�$H�C1���H�SI�uH��A�A��,H�PH��H�BA�$H�C1��[�H�SI�uE1�H��A���H�PH��H�BA�$jH�Cj����H�SI�uH��A��-H�PH��H�BH�CXA�FA��ZH�A�$Mc�L�L1����H�SI�uE1�H��A��H�PH��H�BA�$H�C1���H�SI�uH��O�L6A��-H�PH��H�BA�$H�C1��v�H�SI�uH��E1��'H�PH��H�BA�$H�C1��H�H�SI�uH��E1��'H�PH��H�BA�$H�C1���H�SH�PH�BI�GL�x�L�{H��[]A\A]A^A_�ff.�AWE��AVAUI��ATI��UH��SH��H��莵��I�uA�$E1�I��H��(1�H����H�SI�uM��H��A��HH�PH��H�BA�$H�C1��i�H�SI�uH��A�A��H�PH��H�BH�C1�A�F(A�$�-�H�S�H�=]�*H�PH�BH�C�	I�uA�$H��I��A��1�H�����H�SI�uH��A�A��,H�PH��H�BA�$H�C1���H�SI�uH��A�A��,H�PH��H�BA�$H�C1��z�H�SI�uE1�H��A���H�PH��H�BA�$jH�Cj���H�SI�uH��A��-H�PH��H�BH�CXA�GZH�A�$L�L1���H�SI�uH��E1�A��H�PH��H�BA�$H�C1����H�SI�uH��A��A��-H�PMc�H��H�BA�$O�L?H�C1���H�SI�uH��E1��'H�PH��H�BA�$H�C1��g�H�SI�uH��E1��'H�PH��H�BA�$H�C1��9�H�SI�uH��A�A��-H�PH��H�BA�$I�FL�p1�L�s��H�SI�uH��E1��'H�PH��H�BA�$H�C1����H�SI�uH��E1��'H�PH��H�BA�$H�C1���H�SH�PH�BH�CH���[]A\A]A^A_�f.���AUATI��UH��SH��H��H�GL�*H���I���r���H���ZE��H��H��A�H��H���Ш��H�u�UH��I��A�A�1�H������I�T$M��H��H�uA���H�PH�B�UH��jI�D$j	�`�I�T$H�PH�BI�D$XZM��tA��t!H��H�{1�1�[]A\A]���f.�L��H���5:����AWM��AVAUI��ATUH��H��XSL��H�����H����&E�mH��A������E1�D��D��I��H��(1����H�SM��D��H��A��HH�PH�BD��H�C1�����H�SD��H��A�A��H�PH�BD��H�C1�A�F(���H�SM��D��H��A��H�PH�BD��H�C1����H�SD��H��A�A��,H�PH�BD��H�C1��T��H�SE1�D��H��(H�PH�BD��H�C1��,��H�SE1�D��H��A���H�PH�BD��jH�Cj��H�SD��H��A��H�PH�BH�CX1�ZL�L$@D������H�SE1�D��H��A�	��H�PH�BD��jH�Cj�:�H�SH��A�H�PH�BYD��-^H�CD��D$H��L�L1��a��H�SE1�D��H��A��H�PH�BD��H�C1��3��H�SD��H��A��-H�PH�BD��H�C�D$H��L�L1����H�SD��H��E1��'H�PH�BD��H�C1�����H�SD��H��E1��'H�PH�BD��H�C1����H�SH�PH�BI�FL�p�L�sH��[]A\A]A^A_�AWM��AVAUI��ATUH��H��XSL��H�����H����&E�mH��A������E1�D��D��I��H��(1��'��H�SM��D��H��A��HH�PH�BD��H�C1����H�SD��H��A�A��H�PH�BD��H�C1�A�F(����H�SM��D��H��A��H�PH�BD��H�C1����H�SD��H��A�A��,H�PH�BD��H�C1��d��H�SE1�D��H��A���H�PH�BD��jH�Cj���H�SD��H��A��-H�PH�BH�CXZ�D$@D��L�L1����H�SE1�D��H��A��H�PH�BD��H�C1�����H�SD��H��A��-H�PH�BD��H�C�D$@��L�L1����H�SE1�D��H��'H�PH�BD��H�C1��n��H�SE1�D��H��'H�PH�BD��H�C1��F��H�SH�PH�BI�FL�p�L�sH��[]A\A]A^A_�f.�AWE��AVAUI��ATUH��H��XSL��H�����H���&E�mH��A��被��E1�D��D��I��H��(1����H�SM��D��H��A��HH�PH�BD��H�C1����H�SD��H��A�A��H�PH�BD��H�C1�A�F(�S��H�S�H�=��*H�PH�BH�C��D��D��H��I��A��1����H�SD��H��A�A��,H�PH�BD��H�C1�����H�SD��H��A�A��,H�PH�BD��H�C1����H�SE1�D��H��A���H�PH�BD��jH�Cj�"�H�SD��H��A��-H�PH�BH�CXA�GZL�LD��1��L��H�SE1�D��H��A��H�PH�BD��H�C1����H�SD��H��A��-H�PH�BD��H�CA�GL�L1�����H�SE1�D��H��'H�PH�BD��H�C1�����H�SD��H��E1��'H�PH�BD��H�C1����H�SD��H��A�A��-H�PH�BD��I�FL�p1�L�s�a��H�SD��H��E1��'H�PH�BD��H�C1��9��H�SD��H��E1��'H�PH�BD��H�C1����H�SH�PH�BH�CH���[]A\A]A^A_�ff.�f�AWAVAUATUH��SH��H�����H�t$��D$XH��XH�;H�T$H�L$,D�D$_H�D$0�C��L�sH�D$8����D$ M����H�l$@L���D�d$ H�\$0H�uD��H����&H�uD��H��I��I�ƉD$I�� D�|$�]�&I��H�D$L� M���pH�L$81�D�D$H�9H�ˋL$u�\H�;�H��;K��D;C��H�PH��H��L9�u�H��L��I9�v'L��H�L$8H)�H�@H����H�vH��H�<��<��E9���H�D$@H��pD��+D$ �PH�Hc�L�,�D+,�A��A�GE9�H�+H�mDD�D�sD�{D�kH������H�l$@H�L$8K�d�A�L��…�������9ʋ|$,Lу�	�;��c�u
����	HOѹH�T$x�HO�H�
S�*H�T$hH���*HO�H�
M�*H�T$pH���*HO�H�
C�*H�T$`H���*HO�H�T$@���L��D�y�M���[L�t$8L�d$HL�l$H�D$�D$0D)����.����H�|$t	���;	�H�5�-L���6�&A�FH��pH��`H��0�P���+��H��H�L�,�H�<�I�H9���H��8H�t$@L��1��>�&H��L��L��L)��ͷ&H;�8���H�5��-L��謷&A�FH��pH��`H��0�P���+��H��H�L�,�H�<�I�H9���H��8H�t$@L��1�贵&H��L��L��L)��C�&H;�8��H�D$H�HH�L$ H����E9~��I�NH��8H�L$PD+|$XH��pMc�N�,�L�0I9����H�5��-L��1��̶&H�T$hH�t$`L��躶&�|$0L����A�VA�H9�s@D� L��諷&H�D$I�|H��8H)��H��ID�H�A�FH9�w�I�D�|$,��u�H�5M�*L��H�D$H�7�&H�D$H�^L��H�D$HA��:�&H�D$HH��8H��H)�H�D$��H��HD�H�A�FH9�s?f��~L����&H�D$I�|H��8H)��H��ID�H�A�FH9�wʋD$,��~�H�5y�*L��莵&�|$_�S�
L��薶&H�D$E�~H�H�P�H;T$��E�n D��D)����pH�L$PH�T$ I��H9����AH�T$���DI�� ����H�L$8H�@H�pH��H�������H���	�������HOѹH�T$x�HO�H�
��*H�T$hH�d�*HO�H�
�*H�T$pH�ȥ*HO�H�
�*H�T$`H�?�*HO�H�T$@�������څ��2������|$,��9�Lу�	�+����a���f��|$,�}�'�	H�5
�*L����&A�FE�nA�V�D$0H�D$H�8H;|$ �EM�FL�D$PA9V u)H�L$ 1��H��A9T uA�tA9�LB�H��H9�u�H��p��+��H�H��`H��0L�<�H�<�H��I�H9���H��8H�t$@1�L���ϱ&E��tZK�/H��H)�H��~JI���|$0�SL��L��L���=�&�H�5'�*L���)�&E�~H��8����f��|$0��H��L��L��L)���&H��8H9��LE�~�����H�5��-E�wL���&H��pD��+��H�H��`H��0H��H�<�H��H�H9���H��8H�t$@D��L��1�H�L$�ư&H�L$H��L��H)�H���P�&H;�8��E)�A����H�5��-L��A����&H��pD��+��H�H��`H��0L�,�H�4�H��I�H9��JH��8H�t$@D��L��1��)�&H��L��L��L)�踱&H;�8��H�D$H��V���fD�H�5��*L��H�D$H��&H�D$H�C���DH��`D���H��pA�H�T�H�0H9�8����A)������ L���C�&I�H�X H���d��H��L��H����&�~�����H�5�*L����&�\$0I�D�2���fDH\>�k���fDH\>�@���fD�H�5��*L��褰&����H\1���fDH\>����fD�{�
�8����H�5я.L���Z�&����D�
L���c�&�\���fDH�|$8H�Ĉ[]A\A]A^A_�J��DH\>�!���fD�H�5�p.L����&������{�
�3����H�5A�.L���ʯ&����D�{�
�s����H�5�.L��袯&�Z���D�x�
������H�5�.L���z�&E�~H��8�e���f.�L��H�5B�*�L�&�t$0H��L��L�H)��7�&�>����{�
�h����H�5��.L����&�O���H�T$xH�t$pL���&���L��H�5ڠ*��&�D$0L��L��H)�I�4�ή&���H�\$8�����1����I�FH�D$P������~~��'������HOѹH�T$x�HO�H�
_�*H�T$hH�@�*HO�H�

�*H�T$pH�n�*HO�H�
�*H�T$`H��*HO�H�T$@�r�������
HOѹ
H�T$x�HO�H�
��*H�T$hH���*HO�H�
�*H�T$pH���*HO�H�
v�*H�T$`H���*HO�H�T$@����H�D$L� �I����HOѹH�T$x�HO�H�
n�*H�T$hH�O�*HO�H�
j�*H�T$pH�|�*HO�H�
c�*H�T$`H�n�*HO�H�T$@��H�D$E��H�����ff.�AVA�E��1�AUI��A�ATI��UH��SH��H�1�Q�H�����H�SH�PH�BH�CI�UH��tH�PH�BI�EH�CE��uyH�
�bL�-��*H��ufD�L���C#��H��bH��t�jH�uL��E1�j!�UA�H��H������H�SH�PH�BH�CX�Z[]A\A]A^�@H���bH��u�L�-+�*D�L����"��H�t�bH��t��ff.�f�ATUH��SH��dH�%(H�D$1�H��7H�1�H�4��x��H��H�PH� ��H�EE1�L��H��tF@H�EL��1�F��D������x0��	�PW��Oƒ�H����� u�I��I��L9Mw�H���bH�$!L�%i�*H��u�L����!��H�|�bH��t�H��H��H���4-��I�Ā}u%H�\$dH3%(L��u_H��[]A\�H�P�2���H�'�bH��u#H���*�H���s!��H��bH��t�L��1�1�H����,��I��똋GL�d��44��@USH��H�H���~���H�{0H���r���H��H��[H��]�<���H���f��Rt3f��{��f��6tC����#H�=d�*H��1��*!��f.�H������H�ƿH������fDH�0�GfH~�H9�t#fH~�H��<������tCH��H��t���H��H���n��fD�����H��H���R��f�H��H��H��H���h���ff.��AWAVAUATUSH��(�L$dH�%(H�D$1�H���U��H��H�WI��A��A�͋Bl��tj9�fH���bH���SH�Q�*��H�����H�d�bH��t�H9��6I��3U��I�W�r`L��H�(�*1����E����A��L�l$M�1�I��A���"�|$tH�|$����L���A9�tHI�WH��H��t^L��H������I�Gu�H��L��H������I�GL���A9�u�H�D$dH3%(��H��([]A\A]A^A_��H�T$�!�H�T$H��I�GH���w���DH���H���l�I�G�6���H9����f.�H�����I���S��I�WH��L��1��r`H�
�*谁������1��fDAUI��I��ATE��UH��SD��H��E��tD���H�wH�����u�Hc�I�2L�GL�\A�D$�H�H��L�LI9����H��A��ASH��1����I�UH�PH�BI�EXZ����H��1�H�R��H���9�u�H�R��H�����H���D)�H��H��[]A\A]����DA�@@�s���A���A+@,A9��_���H��A��AS�Z���H��[]A\A]�DAUI��I��ATE��UH��SD��H��E��tD���H�wH�����u�Hc�I�2L�GL�\A�D$�H�H��L�LI9��t~H��A��ASH��1����I�UH�PH�BI�EXZ����H��1�@H�R��H���9�u�H�R��H��1ɋ��H���D)�H��H��[]A\A]��A�@@�w���A���A+@,A9��c���H��A��AS�^���H��[]A\A]�ff.�f�AUI��ATI��H��USH��H��H�GH���H�@���蠀��E1�A��A)�H�CH;��t"f.�H���A��H�AH;��u�H��I�ML��L��H��[]A\A]�L���ff.��AUI���։�ATE��UH��SD��H��E���D��H���H�IH�����u�A�D$H�yH�L�LHc�H�DH;��tH��A��PH��1��տ��I�UH�PH�BI�EXZ����H��1�fDH�R��H���9�u�H�R��H��1ɋ��H���D)�H��H��[]A\A]�0����G@�w������+O,A9��e���H��A��P�`����H��[]A\A]�DH������AUI���։�ATE��UH��SD��H��E���
D��H���H�IH�����u�A�D$H�yH�L�LHc�H�DH;����H��A��PH��1�衾��I�UH�PH�BI�EXZ����H��1�f�H�R��H���9�u�H�R��H�����H���D)�H��H��[]A\A]���D�G@�s������+O,A9��a���H��A��P�\����H��[]A\A]�DH�������AWAVI��AUATI��UH��SH��H��(H�yPH�v���H��X�\�&I�V01��D$�D$A�F�D$H��tf�:��zM�n8H��I�VL��A�M��L�L��E1�	ȹ��H�DP�T$$1��t$(�@���H�UI�~H�PH�BAXH�EAYt.I�F(N��fA�8��H��H��L��L���!���I��M9~wҋ|$����M����I�F0H�{PL�h(���H��XI�u�p�&A�uH��1�E�}A������H��(D��H��I��[D��]L��I�� A\A��A]A^A_�b���f�H�{PI�pL�D$���H��X��&L�D$1�H�߉D$A�HA�p�L$貧���L$�T$H��I��A��L��I�� ��������M��u3H��([]A\A]A^A_�@H�z(Ƀ�H�z(����D$�i���H��I�F8�L��j�T$$A��t$(L�L1�輻��H�UH�PH�BH�EXZE1�I�~8t�I�FHN�<�fA�?t.H��H��L��L�����I��M9n8�W���I�FHN�<�fA�?u�H�{PI�w���H��X��&A�OA�w1�H�߉D$�L$蟦���L$�T$H��I��A��L��I�� ���H��I�F8L��j�T$$A��t$(L�L1����H�UH�{PH�PH��XH�B�W@H�EI�F0Y^L�x(I�w�c�&A�OA�w1�H��A�ʼnL$�
����L$D��H��I��A��L��I�� �^�������f�AWM��AVI��AUATUH��SH��H��(H�~P�L$p�D$xH�t$���I�vH��XL�$�L$�D$���&�|$E�nA�����$�D��D��H��A��,L�T1�M��L�T$���H�SM��D��A��JH��H�PH�BD��H�C1�费��H�SD��H��L�T$A��,H�PH�BM��D��H�C1�A�G(�|���H�SL�$D��A��IH��H�PH�BD��H�C1��M���H�SE1�D��'H��H�PH�BD��H�CH�$�@(1�����H�SD��H��A��,H�PH�BD��H�C��$���L�L1����H�SD��H��L�L$`�GA�H�PH�BD��H�C1�賸��H�SH�L$`H�PH�B�A(I�GD��E1��(L�xD��H��1�L�{�z���H�SH�PH�BH�CH��bH��u'L�=D*��L���#��H�̔bH��t�H����3���D��D��I��A�H��1�����H�SE1�H��A���D��H�PH�BD��jH�Cj���H�SH�PH�B_AX�|$H�C���|$tI�#H�=��*�K�H��I�NI��I��H�D$I�VH��H�pP��$���P���Y^���KL�<$D��A�D��IH��1�M��L�5C*�J���H�SH�PH�BH�CH���bA�G(H��u"f��L������H���bH��t�jE1�D��A�jH��D��H�����H�SH�PH�BH�CXZ�|$�<E1��(D��D��H��1�贶��H�SD��H��A�A��3H�PH�BD��H�C1�胶��H�SD��H��L�L$h�IA�H�PH�BD��H�C1��S���H�SH�L$hH�PH�B�A(H�L$`H�AH�H�H�KH��([]A\A]A^A_�f�D���M��A��GH��1���H�SH�PH�BA�G(�?���D��$�D��D��H��A��-��L�L1�讵��H�SH�PH�BH�C����f���$�D��D��H��A��-L�L1��i���H�SH�PH�BH�C���@AWAVAUI��ATUH��SH��H��(H�~PI�uL�D$���H��XD�L$���&H��E�mA���ֆ��H��I���ˆ�����I���$�	H�D$H�H��bH��u!@�H�=�*���H�ȑbH��t�H���C0��H�L$H�AH���bH��u#fD�H�=E+�W��H���bH��t�H���0��H�L$D��D��A�A�H��H�A�1��9���H�SD��H��A�	A��,H�PH�BD��H�C1�����H�SM��D��A��HH��H�PH�BD��H�C1��ڳ��H�SD��H��A��H�PH�BD��H�CH���aA�F(L�1�蠳��H�SD��H��A�A��H�PH�BD��H�C1��o���H�S�H�=��*H�PH�BH�C����D��D��I��A�H��1��0���H�SD��H��A�	A��,H�PH�BD��H�C1����H�SD��H��A�A��,H�PH�BD��H�C1��β��H�SE1�D��A���H��H�PH�BD��jH�Cj�>��H�SE1�D�湨H�PH�B_D��H��AXH�CA�jj���H�SD��H��A��GH�PH�BD��AYM��H�CAZ1��9���H�SD��H��A��H�PH�BD��A�G(I�FL�pH���aL�sL�1����H�SD��H��A�A��H�PH�BD��H�C1��Ʊ��H�S�H�=�*H�PH�BH�C�E��D��D��I��A�H��1�臱��H�SD��H��A�	A��,H�PH�BD��H�C1��V���H�SD��H��A�A��,H�PH�BD��H�C1��%���H�SE1�D��A���H��H�PH�BD��jH�Cj���H�SD��H��A�A��,H�PH�BD��A[H�CA^1����H�SD��H��A�A��,H�PH�BD��H�C1�菰��H�SH�PH�BH�CH���bH���(L�53�*��L���3��H�T�bH��t�t$E1�A�H��jAD��D��H������H�SE1�D��A���H��H�PH�BH�CXZjD��j���H�SA�H��A�H�PH�BD��I�GL�x1�Y�.L�{^D��躯��H�S�|$H�PH�BH�C��L�t$D��D��H��A��G1�M���|���H�SD��H��A�A��)H�PH�BD��H�C1�A�F(�F���H�SD��H��E1��H�PH�BD��H�C1�����H�SH�PH�BH�CH��([]A\A]A^A_��D��D��H��E1��1����H�SD��H��L�t$A��GH�PH�BM��D��H�C1�譮��H�SD��H��A�A��)H�PH�BD��H�C1�A�F(�w���H�SH�PH�BH�CH��([]A\A]A^A_��AWI��AVI��AUM��ATM��UH��SH��H��I�6�R�D$XH���D$�D$h�$���HcD$`A��,L�\1�M��L�\$���H�SI�6M��A��JH��H�PH��H�BA�VH�C1�踭��H�SI�6H��L�\$A��,H�PH��H�BA�VM��H�C1�A�G(�{���H�SI�6M��A��IH��H�PH��H�BA�VH�C1��H���H�SI�6E1��'H��H�PH��H�BA�VH�C1�A�E(����H�SI�6H��A��,H�PH��H�BA�VH�C�D$`��H�L�L1��ج��H�SI�6M��A��GH��H�PH��H�BA�VH�C1�襬��H�SH�PH�BA�D$(I�GI�6E1��(L�xA�VH��1�L�{H���j���H�SH�PH�BH�CH��bH���#L�=
8*�L�����H��bH��t�H���'��I�6A�VH��I��A��1�H�����H�SI�6E1ɹ�A�H��H�PH��H�BA�VjH�Cj�g���H�SH�PH�BY^�<$H�C���|$t6�#H�=��*�3�I�NL��H��I���D$`H��D�H������UI�6A�VM��A��IH��1�H���K���H�SH�PH�BH�CH��bA�E(L�-�6*H��u�L������H���bH��t�jI�6E1�A�jA�VH��H��H��脿��H�SH�PH�BH�CXZ�<$�@I�6A�VE1��(H��1�H��諪��H�SI�6H��A�A��3H�PH��H�BA�VH�C1��u���H�SI�6H��L�L$P�IA�H�PH��H�BA�VH�C1��@���H�SH�L$PH�PH�B�A(I�D$L�`�L�cH��[]A\A]A^A_�f.�I��A��G1����H�SH�PH�BA�G(�B���D�D$`I�6A�H��A�V�-��H��H�L�L1�袩��H�SH�PH�BH�C���DHcD$`I�6�-H��A�VA�L�LH��1��^���H�SH�PH�BH�C���f�AWAVAUATUSH��8�dH�%(H�D$(1��A�f=���H����H��O*I��Hc�H��H�>��D�~L�vH�S���I��H����L����&L��I����&L��L��H�����H�uPH��H��L����I��H�L$(dH3%(L����H��8[]A\A]A^A_��~L�n(�ۢ��I��H��H���\E1�H��L��L���;����f�H�v(E1�E1�1�H������H�}PH�sI�ŋ��H��X��&��I�$��8��I�D$H�@x�@���g���H�������L�����I���)���f.�H�v(A�E1�1�H��虹��H���A��H���9#��I�����H�0�FfH~�H9�t+fH~�H��<�������oI��H�����������I������H�F(H�<�k�H�{(I��H��t\H�D$E1�H�D$H�C8H��L��N�<�I��I�w���I�w H��L��H�D$���H�t$L���H�D$�,2��H�{(L9�w��n
I�>H��� �LI�v I�~H���|���H���d�I��L���������@H�~�G�I�������H�~���I������H������I������F�����d��iL�eXH��HH�����&H��H�����&L��H��H���K��H���!��I���J���H�}X���I���6����H�uhH��脠��I������@H�}PH�v���H��X�N�&H�L�l��f��FL�nH��@���L�}XL����&L��I���!�&L��L��H���cKH��I���"��I�$��5��I�D$H�@x�@u���H������x���H�}PH�s���H��X�&��L�����L���H���8�I���?���H�~���H�{I���8���E1�H�C(H��L��J�4�I���o���L��H���t-��L9sw�����f�A����DE1������A�����DH��I�v��������I���#������I��������;�#H�=4�*H��1��J���f.�L�mX�0����H�MX����H��I��I��I���;���@�s�I���W������I�������,��I������y��f�AWAVAUATUSH�����f=���H����H�)L*H��Hc�I��H�>��DH�~(����H�{(H�D$�H�C8L�(fA�}uhE1�I�uH��L�����I��H��$tMI�u H��L���n���H��$t8H�|$H��L��I����L9s(��H�C8N�,�fA�}t�f.�A�$H��L��[]A\A]A^A_���FL�nH��P��hL�}XL���<�&L��I���A�&L��L��H���HH��I�����I�$��2��I�D$H�@x�@u����H������o���H�}PH�s���H��X�Ͻ&L�������H����L��[H��]A\A]A^A_�J�f.�H�~�'��H�{I��t5E1�H�C(H��L��J�4��'���H��$���H��L��I���~*��L9kw�L��H��[]A\A]A^A_�B��f�H��H��[]A\A]A^A_�:���f.�H��H�uhH��[]A\A]A^A_����fD���I�����H�|$�f�����I�����AWAVAUATA��UH��SH��H��HD�ndH�%(H�D$81�H�D$(H�D$H�D$0D��H�D$A���#���#A����H�CH��u�X1���H�@H���������w�H��G��E1���(�q��3��H�PH��u�f.�H�RH�����
����w�J��H��
��Iux�x0D�p4H�@(�<$H;0��
H�B(L�(M����
�4$D��M��A��GH��1���H�SH�XH�PH�CH�PH��tH�BA�E(M����D�kD��A��G�MA��&�XA��EuH�sH���*V��D�kD��A���A���L�kA�}����G��ƒ���
H�C�8��
����D�kA���i	H�C�8�mDE��tTA�EɃ�'wKH��H���P
H�CH���C
�8�
�P��E�D��G������	D�kA��(�=A����A��f�aH�C�8��@�H�t$8dH34%(�pH��H[]A\A]A^A_��L�kA�}��A�E�� ����A�}7����I�E(L�0H�@A����A�������A��������H�������L��H�� H=�
�����H�C(L�8H���aH�0L���r����H�;H�CH���aH��+��H��1�H�EtH�EH��H�x@H�$�(R��H�$1�H�����I�UH�C(L�8L�pI�EH�BH��tH�PD�kD������fDA�}7����I�E(L�0H�@A����A�������A��������H�������L��H�� H=�
�����H�C(L�8H���aH�0L���y����H�<H�CH���aH��2��H��1�H�EtH�EH��H�x@H�$�/Q��H�$1�H�����I�UH�C(L�8L�pI�EH�BH��tH�PD�kD��f.�A����H�C(H�8����L�kA�}����A�}7�����I�E(L�0H�@A���A�������A��������H�������L��H�� H=�
�s���H�;��H�CH���aH��,��I��1�H�EtH�EH�x@L���-P��L��1�H�����I�UH�C(H��H��cL�qH�H�I�EH�BH��tH�PD�kD��A��%�H�C(H�8��	L�kA�}�u	A�}7�j	I�E(L�0H�@A���3A���H	A����;	H���2	L��H�� H=�
�	H�<��H�CH���aH��(��I��1�H�EtH�EH�x@L���)O��L��1�H�����I�UH�C(H��H�*cL�qH�H�I�EH�BH��tH�PD�kD���A�E����ZH�{(�j��H��H�EH���H����H�PH� uH�P H�:�t	���L�KE1�M��tmA�9��E1�A�y(A���UDD�kD��E��t[�y(��H�IH����D9i��H�q(H�{(�i������H�y(�mi��H�����u��yGt�D�kD��E��u�M���A�A����A��H��1�A��I��I�A(1�H�8���A�E��c�����Z���f�H�PH��u�B���f�H�RH���3����
����w�I�NjJH���Z���H�@(H��H�@H���s)�������w�H�$���H�C(�'H�H��������4H����H���cH��$���+������<�	�)HD����L�sM��u���fDM�vM�����A�����w�A�F�P����������H�t$I�~(�Qk������D�kD���A���DM����I�A�8LD�A�A���l����ƒ������������1�A��H��A��H�SH�BH�RH�BH��tH�P����E��� �CGH�{(�@g��H�sI��H���=�I�����w��A�����v	M�@M��u�M9��
A�yL9�t
A�9�
��E��
L�kA�}��H���M��D�kD���+������@1�A��H��A�����(���E������L���!g�����.A��H�/���D�kD��H�C(H��h(uH�PH�@H�PH��tH�BH�CH�SH�BH��t|H�P�v���P����A�Q4A�q0E1�E1ɹH���ue��H�SH�XH�PH�CH�PH�������H�B����E1��x����Q8����DD�kD��A��'�o���L�sA�>�A�E��pH�CH��������8������x�|���H�S(H�H�z�j���H�H(H�1H�V�H�H���SH�SH�BH�P�A���f�H�0H���>H����x0D�p4H�@(�<$H90����L�jM��tA�}����H��H�T$��f��H�T$I��H�BI�UI�EL�jI�EH�����L�h����H�@H���������fDI�A(1�H�8������A��#����H�C(L�0M�������L�cM�����A�<$���A�|$����M�l$M������A�M�������A�E��7�G
�ƒ��t	�������M�mM�������A�}�����A�}7�z���1ɸCI�U(H�H�ރ�H�4$��A��A��D��!�9��H���A���?���A�D$I�D$(H�8��	M�d$(H���L��D������H�<$I�$�'H��A��H�� H��H�߁�A�����G1��
IH��tI��A��uL��H���!�I�E(L�0���A�������H�CH�����8���@��H������C�u�DH�CH��H���`�8�G�8�N�x�D�H�s(H�H(H�H9�0�H�YH9^�"�H�HH�@H�HH��tH�AH�BH�RH�BH�����H�P����H�CH�����8���x���H�PH�����:���J���N��(���H�JH�����9���y�}�H�p(H�A(H�H9�i�H�@H9F�[�H�BH�HH�QH�AH�PH���>�H�B�5�D�C�@���ƒ� �H�C�8�\�x#�D�kA���H�x�Z�A��C�&�x#�������x��H�P(H�z���H�{(H�pH�@H�H�H�pH��tH�FH9���I��H���C+I�H�H�I)�H9��&M���V�S4�s0E1��H��1��ِ��H�SH�XH�PH�CH�PH��tH�BI��u�D�kA���d�H�C�8�s��
�����#�E�H�C�8�8�����A�Q4A�q0E1�E1ɹ'H���_��H�SH�XH�PH�CH�PH�������H�B���A�E��H���2���I�}(�`��L9��%I9���H�s������G���I�A(H�{(H�H9���E�Q8E������H����_��H�s������H���PF��D�kD�����@�x(�����H�HH�����H��H������#���I�F(H�H�D$0M�nM��u�q���f.�M�mM���Z���A�E����w�A�E�P������5���H�t$I�}(�pb��������H�C(H�8����H�t$0H�|$(�����I�UI�MH�QH��tH�JI�VI�NH�QH��tH�JH�S(�CH�H���2��*H��H���g����f�H�C(D�kH�0A��7trA��Btl��H��輛��H�S(H�H���������H��H������A����H�C(H�H������
�H���H������Y���H�x�C��H�x(��]���&����4$D��E1��'H��1����H�SH�XH�PH�CH�PH����D�kH�BD����A�F��(����H�*n H��rP����� �N�������I�F(H�8�H�CI�FH��tL�pA�F.�{���fDI�FI�VH�BH��tH�PH�CH�SH�BH���U���H�P�L���H�@H���p��8�g��xE�]�H�C(�CgH��@���D�H�U����2������$�@�x���H�P(H�:���H�PH�@H�PH���k�H�B�b�H�HH�@H�HH��tH�A�������H�C�8������H�C(H��h(uH�PH�@H�PH��tH�BH�CEI�A0H�C0A�A8�C8�w��%�T�E1����A�F���A�v �����H���{�I�F���A�F����A�N ������H������I�F���f�I�FI�VH�BH��tH�PD�k�j��-������I�E(H�H�D$(�U���A�F���E�N E�����H�����I�F�<�A�F���E�F E�����H�����I�F��H�C(H��h(uH�PH�@H�PH��tH�BH�sH�CH�pH���B�H�F��9�M���0����S4�s0E1��'H��1�賊��H�SH�XH�PH�CH�PH��tH�BI��u�����H����A�+�C+�G��S4�s0�'E1�E1�H���Y��I�UH�PI�MH�HH��tH�BI�UH���!���H�B����H�PH�@H�PH��tH�BH�CH�SH�BH�������H�J(H�p(H�9H9>�D�H�yH9~�6�H�@H�PH�BH�CH�SH�BH��������A���~�L�sA�>�p�A�VE1�G�������H�C(H�8�C��I��I�F(H�8�4��H�S(B�D8�H�H�DH�M�������I�E(H��h(��H�HH�p�H�NH��tH�q�P(I�VL�pH�PI�FH�PH��tH�BI�uH��u
�f�H�vH��t
�����w�D��H�������/����*�I�~(�X���8����M���PI������H���mZ��I�U(�p(H��V�n���L����X��������H�CH�S�{H�BH�����H�P���I�FI�VH�BH�������o�A�V4A�v0E1ɹ#A�H��1�� ���I�VL�pH�PI�FH�PH��tH�BA�F'�{��I�E1Ƀ8u�H(1�A�}HH�s(��I�}(��HA�E��W����������H�CH�SH�BH����H�P���H�C*A�*�U�H�C H�{I�����H�K��L�����A��I��A�����M��I	�fE1�M	�����H��H�H�� H	�L��H��H	�H��I�������D�{��A������f.�AWAVAUATUSH��hH�dH�%(H�D$X1����{H�4$H�wH��H�����t'H�|$XdH3<%(��H��h[]A\A]A^A_�@H�FxD�H�GE�ދA��A������D������D$8E��H�$A��A��A��A��H�X����E1�H����D�T$8H�l$E1�D��E���DH�C��tGH��H��to���u�E����@���>H�CE����E��t�E1�{GA�ă�u�f��S,���������u�A��H��DDl$8H��u��H�l$H�UE��tH�$H�@H�@�8�
��H�����H�uH�^H�\$HH���vH��� ��CH�[ ���L��A�����L�l��-@H��H�f��
t����	��H��L9��H�H� u�H�@ ��D��D$8H����f����T���A��E1����@�S�Ѓ�����q��7�^	H�S(L�A����L��H���Ȩt%L��H��%������������lH�CH�z�\����� �P���H���a�C9�R9���S�3���@H�|$D��H��D�\$���D�\$����H�D$HH�D$PH�D$H�������SH�K(������u+H�H���fH�������H�Cm�����������H�QH���YH�������H�iH�{�s���@H�%fDH��H�������H�CH���:����8�1����P���%����H������H�HH���	����9�����y7������HD�����H��H������H�qH����>���~7��H��H�Q(H�H�׃�u��B������r ���H�����H�HH�@H�HH������H�A�����L�`I���&���A�$��t	������H�P H��I9�t%L��H�@H����������t	�����H9�u�D��E1�E1�1�1�H���	Q��I�T$L�`H�PI�D$H�PH�������H�B����D���A��E��H���]������f�H�KH��H��������9������q��7���~��1�������d����lH���U���L�AM����A����5�C�s���DH�QH����H������H�kH�{����DI�� H�CI��������H���a�C\�K8`�R\���S����f�I�� H�CI�������I����I�����I�������H�/�a�C_�K8`�R_���S�d���DH�Cl�R���H�jH�s�<���DH�hH�{�$���I��!�I��������H���a�C>�K8`�R>���S���DL��H�� H��%H��l�g���H�5�**Hc�H�>��H�k�a�C[�K8`�@[���CH�C���H�F�a�Cd�K8`�@d���CH�C�w����K8`��H�SH�CH�M�aD�\$ H�L�T$苿��H�L$L�T$H��D�\$ H�H�D$1�H�D$tH�AH��H�x@D�\$ L�T$H�T$�d3��H�T$1�H���5���H�|$E1�E1�H�C(�1ɾ��%���H�S(L�T$D�\$ H�H�CL�R���H�W�a�CR�K8`�@R���CH�C���H�2�a�CW�K8`�@W���CH�C�c���H�
�a�CU�K8`�@U���CH�C�>���H��a�CX�K8`�@X���CH�C����H�ùa�CZ�K8`�@Z���CH�C��H���a�CV�K8`�@V���CH�C����H�y�a�CT�K8`�@T���CH�C���H�T�a�CP�K8`�@P���CH�C���H�/�a�CN�K8`�@N���CH�C�`���H�
�a�CM�K8`�@M���CH�C�;���H��a�CO�K8`�@O���CH�C����H���a�CY�K8`�@Y���CH�C��H���a�CQ�K8`�@Q���CH�C����DI�B����N���I�B �����������0���M�R���H�A(H������(����H�� H=�
��A�H=�
�H�C(�D�\$?H�L$0H��CAL�D$(H�D$H�˷a�@A��Hc��D$H���aH��F���H�|$L�D$(H��H�L$0D�\$?H�H�D$ 1�H�D$ tH�GH��H�x@D�\$?H�L$0L�D$(H�T$ �0��H�T$ 1�H�����H�L$0L�D$(H�C(I��H�D$H�QD�\$?M�AI��D$�CH�AH��H�B�Q���H�PH�C�H���H�KH���<���H�yH��t�?��I��H��tދ������wκlH�������A�x7�����H�I�I�������H��H������WH�QH���J�:�A�z7�7H��H�A(H�H�ƃ�u��@�X����P 뷋S������H�y(H�|$L�H�yI��M������A��t6A������I���H�����������A�H=�
������M�
A��I��u�H���E�?u��7��H�W(H����m������H��H������j���H�� H��a�Y���H�C(H�|$�D�\$(H�L$ H��CAH�D$H�I�aD�@AA��Ic�D�D$�/��H�L$D�D$H�C(D�\$(H�QH�@	H�L$ H�H�CH�SD�CH��H�BtH�PH�QH�BH�RH�BH��tH�PH�AH�KH�CH�YH�CH����H�X��H���a�Cc�K8`�Rc���S���H���a�Ca�K8`�Ra���S��H�g�a�Cb�K8`�Rb���S��H�F�a�C`�K8`�R`���S�{��Q���H�WH���D����:�;����z7�1���H�R(H����!���H�za�����z H�z����H��������?��H�G�qD�\$ H�L$H�D$�o�H9D$H�L$D�\$ ���A��������lH���p������f�M�R���I�B�����7�h�������@�?����x �5���H�@����H����H��H���������H�� H=�����H�C(H�|$�D�\$ H�L$H��AAH�D$H�βa�@A���AHc��-��H�L$D�\$ H�A(H�L$H�@
H�QH�H�CH�SH��H�B�u������A��t���H���H��H��������H�� H������H�C(D�\$(H�L$L�H�&�aH�0L��L�D$ ���H�L$H�|$�H��a�A@�@@���AHc��?,��H�L$L�D$ ��H�D$H�A(L�H�L$��H�T$H�L$D�\$(H�BH�A(H�SH�@H�CH��H�B�~�������{�A���<���I���H���k��������x �k�H�@�G����z ���H�R���B��z �
�H�R���H�D$I��L�M���������H�C(H�|$�D�\$(H�L$ H��CAH�D$H�ذaD�@AA��Ic�D�D$�+��H�L$D�D$H�C(D�\$(H�QH�L$ H�@H�H�AD�CH�PH�BH�RH��H�BtH�PH�CH�SH�BH��tH�PH�AH�PH�CH�SH�XH�CH���������fDAWAVL�5� *AUATUSH��H�=�J*H��hH�t$dH�%(H�D$X1�觬���D$H��u7�DH�C�����H��t�PH�5K*�1�蜮��H�[H��t]H9\$H�C�*�H�5��-HD�1��p��������vs��t������SH�5�J*�1��?���H�[H��u�H�=�I*���H���aH�8���H�D$XdH3%(�uH��h[]A\A]A^A_�����=H���SD�K(�D�C,H�{.�K$H�5QT*P1�A��A��豭��XZ����f.�H���a�SH�=sI*�4P1�H5��a�}�H�{(H�����SH���aE1�E1�D�,PH�D$0L-ֱaL�,$A�UH�D$��tN�B�<�o��Ic�L�>��@H�C(J�<��S0��H��H���H�A��H�$Mc�N�,8A�}�>H�|$(H�l$(�k0����D�|$�H�5�H*H��A��1�D��軬���CH�٭a�A�D�|$�������/��H��H������f��H�5�H*H���<���_�����H�5�H*H������?����H�C(H�t$N�<�L���K�����H�t$@H����H���m��������H�C(�
H�5H*H��N�<����A����L��H�� t�̷��H�5�p+H��H��1�����L��H���H�5�G*H��1�������fDH�C(H�5YH*H��J���P1�����g����H�C(J�<�H����H��aH�H���,����H�56G*H������#���H�C(J�<��;���H�50G*H���1�������H�C(J�<�����H�5�F*H���1���������H�C(J�<����H�5�F*H���1���������H�5
r*H���l��A�U�R���f�L��H�5�F*H��1�����o����@��u
H�G�����H��tjH��tt@��uN@��twH���aH����f�I�H��t�"���H�5Lo+H��H��1����A�W �Y���DH��aH�����H���aH�����H�q�aH����H�*�aH��u���H��aH�5F*H�81��Z�H��aH�5'F*H�81��B����ff.�f�AWAVAUATUSH���dH�%(H��$�1�H��k���H�GH�t$H�<$H�H��H�D$ht41�H��$�dH34%(��H���[]A\A]A^A_�f�H�$L�xH�D$H�@H����fD�8u�H,H�@H��u�H�D$L�hM���\�D$8E1�L��D�����(����������H�[H��u�E1�L�|$1�H�D$E���0���uA�EA	Ʃt
I�E H�D$@M�mM��tWA�E���
����u�A�} �t�I�EH�����p$��)��~�A�wA�W��M�mE��A��M��u��Ic�Hc�L�|$H�D$@���u�C$����A���'����A��H��L������H�<$D��H�fD*1��3+���J���fDLcsH�k(D��H���&��A��A�D$8H�y�a�{0D9�ALĉD$8H���aB�pF�42H��A��D9s�:L�
��aH�1�1�A���u"�~���fD��Hc�H�B����a���<Ou�L�t�A�F,tIA�~$�u�E�f$��@H�CE1�H��tD�p$�{ �t	E9���E�������D�c$�����H��L���u���A�N�s01�H�<$H�6C*�*���3����H�D$@1��D$8DH�|$@��I��H��I���9�H�߾H�D$0�'�A���A��H�D$PA��A����ILJ�A�����Ԥ��I���H�$H�H�\$������H�@H��$�HDŽ$�H�\$X�@pH�D$@H��H��?vH�D$@�H�x?H���k���H�D$XH�D$L�hM���H��$��D$pE1��D$�D$H��$�� f.����WM�mM����A�E������u�I�E1�H��t�h$A�u ����K�\$)���7�L$����HcD$H�|$0H�@H��H�����2�����H�rH�t$P�L$D�$����<A�D$Ic�Hc�A��H�I��.�l$I���M���@A�EI�](��H�މʼnD$t��#��Hc�H�
f�aH�D$xIc�I��H�{�a�4PH��H�t$ �4H�
��a�t$<�H�L$(��tfL�l$HE1ҽM���B�<��H�
*��Hc�H�>��J��A�,H�I��f�H�D$ Lc�H�t$(��L��0��u�M��L�l$H�D$A�M0A�u4A�}8��t)��H�\$0H�H�@H��9u9p��f.�HcD$L�L$0H�@H��I�����
H�L$P�r�zD�$��\$�\$xDd$<\$�
����J�<ӈT$`蓪���T$`����K����T�JA���E1�A���A�A���A�A���A��M��I��M��M��9���A�,H�M�<����fDJ�Ӌt$<A�,Hcҋ@B�&)�H�I�����DJ�<�菰��A�,Hc�H�I�����DA�,J�<�H�M�<�腢��I��}���DN�<�H��$�H�5u!��D��$��D$<L��L��$���$����L����	L�����A�,H�t$XI�GHc��M�<�H��H��H	�M��tA��uH�<$L�������D$p���f�H�$H�H�L$`������H�@E���E��E���Ht�Q�Pt��I�I��M��M��A;����	J�<�����I�GA�,H�M�<��j���f.�J�4�A�,Hc�I�4�H���H���@���>���H�<$�L$pH�D$`����L$pH�D$`�H��H�L$XH��H	�����f�H�$H�H�L$`�������H�HI���J�4ӋAp�xH��L�<�ypI�7�k!I�G�����N�<�I�?�����H��I���|$t	��H�BH�����H�I�?诧��A���A���E1���A����4���L���T$L�l$H��H�|$0��H�D$L��H�x����L$A�u01�H�<$H�<*�y#��1����f�A�E$�D$�����Jt;H�=�<*1�����D���l$�r���f�E���D������A���A���E1��t���f.�����D���I����S����H�<$H�uF*1���"��A�u �R���D�D$8Hc\$M�wE�gA��D��H��H��H��?�$H�D$XH�I��H�D$0L�t$P�H��I�GpH��M�wx賧���H��L��I�Gp蟧��A���I�GxH�$H�PH�Hǂ�H�D$���H�$H�@L�pL��$�I���'I��� �H��������I����E1�xHc�����I�lj�fDH��L���H�sH��I�,�EH�CH��@�EH�CH��@H�u�EH��t@��u	H�<$�ӽ��H�C H���.H��L��pH��I�T�r�@$�B�U�у��	t��uI����C�D' A��E;/��E��K��H� �K���H�[ �F���f��E�H�T$`H�H�<��}���H�T$`H�B����H�D$H�t$H�L$`H�x��H�D$H�L$`H�D*H�<$E����p0E��1�E��E��� ������f�9x������b���f��|$p��H�D$XI�����������H��t�XL����H�|$0��H�|$P��L�t$@I��?I����A�u D�D$1�A��H�<$��H��C*���1��������E�}A�m$���f.�E�eI�u(��D�����Eu8�H�$E�u8H�pH���H��t@H��H� �oH�xt
A����H�GH�xt
A����E�eH�МaD��E1�H�D$�8A��M�DI��C�D'���fDH�$H�PH�L���H�\$���s�H�@H�@H��$�H��$�H��$��Bt1�J�A��~'H�R0H�BH�4��H��H�
HcIH�
H��H9�u�H�<$�i�������H�$1�L�`A�T$I��$���u �0�H��aH���A;l$��I�T$��H�<���L��Fu�H�$H�H������H�PH�@H���Ƃ�H��tH���t
H�xu�fD��H��H���&�H����C�ƒ��	t��
u0H�D$h@H��H9���H��H���T�׃��	tރ�
t�H���'�H�$H�@ƀ��H�$���H�Su H���H��t���H�SHǂ�H�����Z�H�<$�D$�O����D$�D�fDH�@ H�8�����A��uiH�G �����1��E��I�v����M�v �������H�=�@*1�蒺��f�H���e�H�$H�@�*���f.��;|�H�$H�pH���H�utE�E0% A��xjMc�L�OH��uL�O M�!M�$A�� ��I��A��M9�L�D$ }4L������L�D$ L��J��裋��H�$H�pH���H�% H����������Icĉl$A��I��'��fDMc�L�$$�"�H����L9�$��*�I�t$H���H��� u�H�G��I���x���H�|$H�t?L��J�4���������DH�$H��t���@H�D$H�t$HL��$��L$`H�x��H�D$H�L$`H��>*H�<$E����p0E��1�E��E�����L��$�����f��D$8M�w1�1�A�GA��ILJH�|$X�0���F���H��L�����s0H�<$1�D��H��3*���1���M�T$�M���H��L������K�s0E��H�<$H��=*1��q����H��L�����s H�<$E��D��H��=*1��F���]�H��A���H�|$X��������������H��h�����H��w
H��-*���f���UH��f�SH��H��8H�VdH�%(H�L$(1�H��)$H�D$H��H�l$�PH��h�H�CE1��EH�ߺ�����p`1��2[��H�T$H��H��H�PH�BH�D$�%��1҅�uH�L$(dH3%(H��uH��8[]�DH��H����Hc������ff.���AVAUATUSH�_L���M��t[L��]A\A]A^��I���{��P��H���I�\$I�ƋSH��H��uM��t�L�-B�a1����I�,�H�}�aFH�H�EA�D�I�D$9Xw�[L��]A\A]A^�DH�sL�����C����AWAVAUI��ATUSH��xH�H�oH�T$(H�CH�u@H�x�;��H�uH�D$ H�CH�x�;��H�uP�D$$H�CH�x�;��M�}L��D$@A�G�D$茴��H�D$H�CH�H�@H��H�D$�����H9���	�T$���Z	H�D$H�0H�[�a�pH��aH�����L�l$8A�H�l$0H��H��E����0���E��t~�D)�L$�H�L$Ic�L�,эP���w<H�
9*��Hc�H�>���M����H�;L���:��Lc�f�L��H���U0���D$D�A��H��D��u�D9d$��H�D$E�t$Mc�J�4�H�|�a�pH��aH��H����1���H�z�aH�50*H�81����f�<J���<K��A���A��A��H��I��I)�I���;���IcuH���/��I�}�S���H��H��I���u/��I�uL��H���6/�������L��H���@��I�����DM�u����I�>I��H��t @�+��I��L��H���L�I�>H��u�H�CL��H�x�49��Lc����@<T��1��)���f�<A�r1��#����1�����f�I������T���@H�CH�l$0L�l$8H�H�p�����H9��"��+D$�t$�D$XI�uD�fE���~H���?���D$H�CH�H�@H��H�D$0�����H9���I�}���L�gp��tFE1�@D��H��A��H�@M�<�Ic7�.��IcwH���.��A�wH���-��I�}D;��r����H�SI�Nj��H�H�J�����H�L$HH9��R��t+��M��M�d�1�@A�6H��I��)��-��A�F�M9�u�L�����I�uH���A���D$8H���H���F��D$\I�uH���D<���D$DI�EH���H����H�;�d7���D$`I�EH���H����H�;�D7���D$dI�EH�� H����H�;�$7���D$hI�EH�K���L���H�	H�IH��H�L$P�����H9��S�����B�H��I�DH�D$�^A����L��H��H�� �G=��H��H���|,��D��H����n,��L��H��H����Z,��1�H���P,��I��L9d$t%M�4$M��u�H�����H��I���),��L9d$u�f�I�EH��H���B��A��H�CH�L�h�����I9����EH��A�ĉ�A���A������E�A	ԉƒ�A	ԉ������A	ԉ������A	ԉ������A	ԉ������������A	�A	��E�‰ƃ�@���A	ԃ���	A	��@������
A	��@������A	���@������A	�ƃ���
A	�u�'+���uH���+��H��D��+t$�
+���t$XH���+��Ic�H���*���uH����*��HcuH����*��HcuH����*��Hcu H����*��Hcu$H���*��Hcu(H���*��Hcu,H���*��H��D��+t$�*���t$H���*��Hct$ H���{*��Hct$$H���n*��Hct$@H���a*��HcuXH���U*��Hcu\H���I*��Hcu`H���=*��HcudH���1*��HcuhH���%*��HculH���*��H��D��+t$0�
*��H��D��+t$H�)�����H����)��H��D��+t$8��)���t$\H����)��H��D��+t$D��)��Hct$`H���)��Hct$dH���)��Hct$hH���)��H��D��+t$P�)��D��H��D)��)��H���H���p)�����H���b)�����H���T)�����H���F)�����H���8)�����H���*)�����H���)����H���)����H���)����H����(��H�D$(K�t-I�����I!�H�xI�u���H��x1�[]A\A]A^A_�@I�vH���l9��H��H���(��A�vH���(��A�v H���(��M�vM���"���Ic6H�߉t$l�m(���D$l��������M�~M�t�DH�CI�7I��H�x�l2��H��Hc��1(��M9�u�������D$\���H���aH�5&(*H�81������H����)��I�EA�T$H��Hc�H�p0H���'��I�u�D$�L���f.��D$�D$X�D$�����D$d���������D$`�����O����D$h���������'��H�=a'*1�������H��(dH�%(H�D$1�H�H������;��3�:H��)Hc�H�>��H�D$dH3%(��H��(飛��H�D$dH3%(��H��(���H�D$dH3%(��H��(����{��H�ƒ�H���f���@�\$H�|$H�$�n��f.D$H�$��fDH�t$dH34%(�'H��(��H�D$dH3%(�H��(髝���빐��f�1��@H�D$dH3%(��H��(雫���$�v���fD�j����D$�
4�)f/�vf/�)r�H,�H�D�=���DH�D$dH3%(ucH��(釬���H��H9�t1H��f��H��?�l$H)�H��H��H	�H��H�$�~$����f��f��d$����X����AWAVAUATUSH��D�D$L�L$H����I��H��H��I���fDH�|$H��諲��H����I�H������?���n��1�L��H��L����
���mH�3�SA�L��A��,1�H����L��H�UH�3E1�A���L��H�PH��H�B�SH�Ejj	�Da��H�UI�6M��A��HL��H�PH��H�BH�EX1�ZA�V�oL��H�UH�[0H�PH�BH�EA�E(H����L�s L�����I��H��$���I��D$H������?�����L�����I�6A�VL��I��I��A�1�H�����K��H�UH�PH�BH�EM������A������L��L���}�������L��H�|$L��H���\����f�����D$�����D$H��[]A\A]A^A_�DAVM��AUI��ATI��UH��SH�2H��H��H������L�C~a��M����Nu{�RH��E1��(1��K��H�U1�H��L��H�PH�BH�S H�E�����41�[]A\A]A^�f���+u#M��H��E1��M���[]��A\A]��A^���SH��E1��(L��1��J��H�U1�H��L��H�PH�BH��H�E�_��t��fDH�R H�������h���H�3�SE1��(L��1�H���@J��H�U1�H��L��H�PH�BH�S(H�E����#���H�3�SA�H���f�H�R H������������H�S(M��L��H��L���g�������������f.�H�3�SE1�A��#L��1�H���I��H�UH�3A�
H�PH��H�B�SH�EL��A��11��iI��H�UH�3M��L��A��HH�PH��H�B�SH�E1��7I��H�UH�PH�B[H�E]�A\A�E(A]A^�@AWf�AVAUATI��USH��H����$L�|$PH�l$pH�t$L��$�dH�%(H��$�1�)D$P)D$p)�$�H�D$`L�|$hHDŽ$�H��$�HDŽ$�L��$�蛘����H�5�%*L�|$hH��H�D$H�D$XH��$�H�D$xL��$�HDŽ$�蟪	I�T$ L��H��H�
m�`H�H1������21�H��$�dH3%(��H���[]A\A]A^A_��I�D$L��I��H�D$8裚��H��H�
�,L��H���
��M�|$(H�D$I�?H������t-����I�7H�.**H��H��1�H������1��f���fDH���0��H��H�D$0�#��H�D$@H�D$XH��tH�L$H�QH�BH�PH�D$hH�A�D$$1�L�t$0L�l$(L�d$HI���H������I�7A�WE1�I��H��$��'H��H��I�EL�h1�L��$���F��L��H��A��H��$�L�
�,H�PH�BI�W(H��$�H��ID�H���J�t$ H���H��A[I�W(L��X�$H���P���^���I�7A�WM��A��GH��1�H���EF��H��$�H�PH�BI�W H��$�A�F(H���KH�:H������+����G�����L�D$H�t$(L��H���q����������D$$M�0��M���I�7H��H�����������H�L$@A�WH��E1�H��$�H��L�l$(L�d$HH�AH�H1�H��$��'�jE��H��A�OL��H��$�H��L�
z�,A��H�PH�BI�WH��$��t$ �F��^_L���$L��H���������A�WI�7L�t$0H���G1�A�H��M����D��H��$�D�T$$H�PH�BH��$�A�F(E��tH�����H�CH�@x���H�D$H�@H��$�H��tH�PH�\$H�BH��$�H�CH�T$xH��tH�PH�BH��$�H�\$0H�CH�XH�D$H�X��4���@H�$���H�$H��H��1�H�2H��*H���p��1�����f�L�L$D�D$$L��H��H�t$(�f����D$$���	�������DI�7H��&*H��1�H��������H�L$@L�d$HE1�H��H��$�L�l$(I�4$A�T$H�AH�HH��1�H��$��'�mC��H��A��L��H��$�A�L$L�
|�,H��H�PH�BH��$��t$ H�T$H�D��XZ�$����A�T$I�4$����I�4$A�T$E1�H�߹(1�H����B��H��I�4$H��L�t$A��LH��I�VH�PH�BA�T$I�F1��t$HL�|$M���B��I�VH�PH�BI�FAXAYM��tA��uH�t$H���A���H�D$H�@H�\$@�C(����I�4$A�T$E1�H�߹1�H���KB��H��$�H�PH�BH��$��
������f�AWAVI��AUATA��UH��SH���dH�%(H��$�1�H����H�H��I��I��A��H�����L�GH�I��I��D;o`������D�o`�E��~.I���H��t"H� �H�@ H�8��D�H��@�(�T$L�D$����T$L�D$H�@�PI�V�H�@ H�PH�BI�FA��o�DAH���)D��Hc�H�>������YG��H��$�dH34%(��\H���[]A\A]A^A_�H�H�S0H��������IH��D��H�S L��AD�H��������AH�[0H��u��f.�H�����H�x �4#@H��I��H��E��jD��L��H����A[[�������B���H�S(1�L��H���
�������@E���rPH�E����H�EL�k L���M���TSH�T$`L��L���3f��u(H�UL��L�狂��H���H�TH�T$`�fH�{ L�d$`�I���H���SH�3ATI��A��H��H��1��?��I�VH�PH�BI�F�AYAZ�j���H�{ ��A�S8L�C(H��L��H���c�����?H��SH����E����XA��H��1�A��?��I�VH�{ H�PH�BI�F蒺��H�3�S�I��A�H��1�H����>��I�VH�PH�BI�F����H�S(1�L��H��������
?E���5QH�EH�{ D���A�T$�������H���SH�3I��K�D$�	H��PH��A�1��I>��I�VH�PH�BI�F�A[[�3���H�S(1�L��H���������>E����NH�{ 衹��H�3�S�I��A�H��1�H����=��I�VH�PH�BI�F�����H�S(1�L��H��L�k ����������E���)NH�L$`H�T$@L��H���������QD�D$`D�L$@H��L��H�KH��A)��#z����`���H�E�a��H�ED��H��L��H��D�hY�@Y��H�E�+��H�ED�hY�����H������H�S 1�L��H��I���������Y=H��SH����E���DOM��A��IA��t�HH��1��<��I�VH�PH�BI�FA�E(E���MH�S(D��L��H���a�������<I�FI�EL�h�M�n�f���I���H�s H��H�@D����1���H�S(1�L��H��A���
�������<E���OH�EE1�H;��t@H���A��H�BH;��u�E��H�KH��L��E)�H���x�������H�C(f�L��$��
H�=�*L�\$H�L��$�)�$�HDŽ$�H��I��H�EL�hP�*}��H��L���_���H���iH�s(E��H��H��A�H�����H��H�D$�
��H��H�D$�
��H��I�����L�\$H�S(H��I��HDŽ$�L��L��$���������<H��$�E1�H��t�8uE1��xEA��H�|$H�C(L�|$HH�D$PH�|$@H�D$`H�E�=��H�ED��L��D�D$D	�H�P0H�T$hH�T$@H�T$pH�T$`H�P0I�FH�S H�GH�xI�~H���6������U<I�FD�D$I�GL�xH��$�M�~H��tI�GH��$�L�xH��$�I�FE����HE����HH�3�SE1��H��1�H����9��I�VH�PH�BI�EL�hM�nH�3�SE1��'H��1�H���9��I�VH�PH�BI�FH�E�-��H�EH�|$H�P0H�ZL;��QM��H��$�L�t$I��H�|$H����QH�H�t$�HDŽ$�H��H��$�H�CL��$�H��L��$�H��$�趩��I��H�H��t�@(�H,H�C�@(A�E(H�E���H�EH�x��;L������I�GH�E����H�EL��H�x�k���H�[H���>���H�T$hH�E�"��H�EH�P0��p���D��H��L��H���H��������R���L�H��I��L�L$�
��H��I���	��H��I����	���
H�=K*H�D$H�EH�@PH�D$�y��H�t$H�����H���	fH�s(H��H��L�L$A�H���|��H�D$A�G,���A�G,A�E,���A�E,I�FI�GL�xM�~H�E�z��H�EH�S 1�L���xX�@X@�|$H���I�������7H�E�8��H�E�|$�S@�xXI�FI�EL�hH�M�nH��H�{0��tEE1��'H��1��7��I�V1�L��H��H�PH�BH�S0I�F�����X7H�3�SH��H��E1�1�1���6��I�VH�|$H�PH�BH�GH�xI�~E����KL��L�d$M���H��I��H��$�HDŽ$�H�D$H��I��H��$�H�D$L��$�H�\$H��$�L��$���A�G(H��H�D$A�O,A�E(�@(H�E�]��H�EH�x��PH���R���H�CH�E�0��H�EH��H�x謾��H�D$H�t$�HDŽ$�H��$�L��$�HDŽ$�L��$��H���A�E(H��H�D$A�M,�@(A�G(H�E����H�EH�x��OH��訢��H�CH�E����H�EH��H�x������/�H�S D��L��H�����������H�3H�EH���8��9�SE1��H��1���4��I�VH�3H��A�	A��FH�PH��H�B�SI�F1��4��I�VH�PH�BI�FE���7J���E��D��H��L��H���4C�������n�D��H��L��H���F��������P�f�L��$�H��L�k()�$�HDŽ$�L�|$L��$���H�SH�
S�,H��H�����H��L��$�H�D$ HDŽ$����H�D$(M���QPI�EH�������-P�D$H�\$0D�d$H���m��H��L�
��,H��H��$�H�CH�XI�E(H��$�H��ID�H���H�t$(H�PL�|$D�D$ L����4��XZL��I�U(�L$H������*OL�|$(I�u�G1�A�UA�H��M��H���3��H��$�H�PH�BH��$�A�G(M�} M����NI�7H��H������+�r4�E4�G����94A�WH��E1��H��1��2��I�V1�L��H��H�PH�BL��I�F�Z���mNI�7A�WA�H��A��11�H���L2��I�VI�7I��A��HH��H�PH��H�BA�WI�F1��2��I�VH�PH�BI�F�C(M�m0�D$M����NI�EH�������:���H�\$0D�d$L��HASH�PL���t$(D�D$ H��L�
��,�>3��A_D��XL��L��H���z�����M�SH�3A�H��H�\$(�G1�H��I���k1��I�VH�PH�BH��$�I�F�C(H��tH�PH��$�H�BH��$�I�FI�FH�\$(H�CH�X�I�^���H��L��H�������������H�C0H�D$A���p:H�C(H�D$H��$�f�H��HDŽ$�H��$�H�t$)�$��l��H��I���a��H�S H�t$I��H�H������uH�R M��L��H��L�\$�:���^�H��$�L�\$H��tI�VH�BH�PH��$�I�FA�}(A�C(���;���2AA��H�!�,H��L�\$(H�
�,HE�H�L$�͂��H�L$H�SH��H������A�u(L�\$(H�D$ ����@A�C(����EH��$�E1�H�D$I�FD��L�d$f�H�t$H��L�T$I�CL��L�XM�^)�$�HDŽ$�H��$��:����Y�E�M(L�T$E��tGM��L�T$H��H�X�,IE�A��L�
P�,A�LEȋKVH�SL���t$(�0��_AXL�T$H��$�H��tI�VH�BH�PH��$�I�FM����DI�FI�BL�P�M�V��H�E�0���H�H��H��H�D$H�EH�@(H�D$�V��H��I���K��I��I�FI�EL�hH�M�nH�������E7H���}�H���e\H�s H��H��D�L$A�H������I��H�E�����H�EH�S(1�L��H��L�T$L�P(���L�T$���\.I�F�8u
���8�W���vH�@H��u�D�P�JɃ��@.��B���4.H�@H��������8�W���v�fDH�@H��t���Q���w��H�u�������H�MH�y �;�yXt)H�Q0H��H��tf.�H�8��AH�@H��u�H�����H�S(1�L��I��I�FH��I�EL�hM�n������i-1�H��L����H�E�q���H�EH�H��H�p H����I�VH�PH�BI�FH�E�Խ��H�EH�3A�H��S�GL�HH��1��,��I�VH�PH�BI�FH�E�����H�E�����L��H��H�@�@(��I�VH�PH�BI�FE�������H�3�SE1��H��1�H���,��I�VH�PH�BI�F���f�H�U���s���H�EH�x ��5�xXtH�@0H��tf�H�8��5H�@H��u�H���u���I��I�FI�EL�hM�nH�E����H�EH�H��H�p H����I�VH�PH�BI�FH�E�
���H�EH�S(L��H��H\������+1�H��L���T�H�E�Ǽ��H�EH�3A�H��S�GL�HH��1���*��I�VH�PH�BI�FH�E�����H�E�����L��H��H�@�@(���I�VH�PH�BI�FE���
���H�3�SE1��H��1�H���*��I�VH�PH�BI�F��m�fDH�U�����H�MH�y ��0�yXtH�A0H��tf�H�8�n0H�@H��u�H�����I��I�FI�EL�hM�nH�E�����H�EH�H��H�p H�����I�VH��L��H�PH�B1�I�F��H�E�E���H�EH�3A�H��S�GL�H H��1��)��I�VH�PH�BI�FH�E����H�E�����L��H��H�@ �@(���I�VH�PH�BI�FE�����H�3�SE1��H��1�H���)��I�VH�PH�BI�F��	�L�c H������H��I�����1�L��L��H��I�������@)H�3�SE1��(H��1�H���(��I�VH�3E1�A���H��H�PH��H�B�SI�Fjj	� =��I�VH�3H��A�A��H�PH��H�BI�FX1�Z�S�I(��I�VH�3E1�A���H��H�PH��H�B�SI�Fjj	�<��I�VM��H��A�H�PH�B�SI�FY1��I^H�3H����'��I�VH�3E1��(H��H�PH��H�B�SI�F1�A�E(�'��I�VH�3H��A�A��H�PH��H�B�SI�F1��{'��I�VH�3E1�A���H��H�PH��H�B�SI�Fjj	��;��I�VH�3�H�PH��H�B�SI�FH��ea_H��AXA�L�1��'��I�VH�3E1��*H��H�PH��H�B�SI�F1���&��I�VH�PH�BI�FH�pbH���(L�%��)��L��胁��H�DbH��t�SH�3jE1�j	A�H��H��H���;��I�VH�3E1��(H��H�PH��H�B�SI�FA\X1��F&��I�VH�3M��A��IH��H�PH��H�B�SI�F1��&��I�VH�3E1��*H��H�PH��H�B�SI�F1�A�G(��%��I�VH�3E1��'H��H�PH��H�B�SI�GL�x1�M�~�%��I�VH�PH�BI�EL�h�M�n��L�{(L���1l��H���SH�s01�E��H��H��A���H�S 1�L��H��I���+�����%L���۠��H���SH�3AUI��A��6H��H��1��%��I�VH�PH�BI�FXZM��tA��uL��H�����E���C:f�����H��$�f�HDŽ$�H�D$H��$�H�E)�$�H����D$@H�D$`H�@���w�H�ਉ�M:L�k M���--H�t$H��H�L$@L��L�D$`��H��1�H���C�H��$�L�l$`D�|$@H��tI�VH�BH�PH��$�I�F��l��E1�1�M��D����H���s0��H�3�SH��I��A�1��DH����#��I�VH�PH�BI�FH�EH���H�x�m���E����3H�EH���H9�t1��H�@H�����H9�u���V0��r�L�{ L���j��H���wQH�s(E��1�A�H��H�����L��I���Ҟ��H���SH�3AUI���5A�H��H��1��
#��I�VH�PH�BI�FY^M��tA��uL��H���}��E�������L���q���H�3�S�I��A�H��1�H���"��I�VH�PH�BI�F���H�S 1�L��H��E����%�[�����"H�3�SE1�A��#H��1�H���Q"��I�VH�3E1��'H��H�PH��H�B�SI�F1��%"��I�VD��L��H��H�PH�BH�S(I�F������������H�S 1�L��H��E����&������4"H�3�SE1�A��#H��1�H���!��I�VH�3E1��'H��H�PH��H�B�SI�F1��!��I�V1�L��H��H�PH�BH�S(I�F�E������!H�3�SE1�A��#H��1�H���;!��I�VH�3E1��'H��H�PH��H�B�SI�F1��!��I�VH�PH�BI�F����H�����H���OH�s E��H��A�H��H���z�H�3�S�I��A�H��1�H��A�� ��I�VH�3M��A��!H��H�PH��H�B�SI�Fjj	�5��I�VH�PH�BI�FXZM��tA��uL��H���{��E���]���H�3�SE1��'H��1�H���! ��I�VH�PH�BI�F����H�3�SA�H��A��1�H������I�VH�{ H�PH�BI�F�i���H�3�S�I��A�H��1�H�����I�VH�{(H�PH�BI�F�.���H�3�S�I��A�H��1�H���l��I�VH�3E1�A���H��H�PH��H�B�SI�Fjj��3��I�VH�PH�BI�FA[A]E���;���H�3�SE1��'H��1�H�����I�VH�PH�BI�F�����H�3�SA�H��A��1�H�����I�VH�3H��A�A�H�PH��H�B�SI�F1����I�V1�L��H��H�PH�BH�S I�F�J������H�S(1�L��H���1�������SH�3jE1�jA���H��H����2��I�VH�PH�BI�FA_XE���)���H�3�SE1��'H��1�H������I�VH�PH�BI�F�����E��D��H��L��H���,����������H���W�H��t6H���J�H�H������?�"%H���/�H�H������n�%H�����H=�����H����H��tH�H������^����H���0�H������H����H�H������+����H����H�x(����H������H�@ H�H������?tH������H�@ H�H������n�W��H�E��:H�EH�x(�:��H�@x��ƒ��@�%������H���}��H�x ��H��I�����1�L��H��H���9��������E1�E1�1ɺ��H���(���SH�3AWPM��A��^H��H��1����I�VH�PH�BI�FXZM��tA��uL��H���v��E������H�3�SE1��'H��1�H������I�VH�PH�BI�F����D��H��L��H��藺���������H���R�H��H�D$A��"��H�S H�H������3��H��$�E1�E1�L��H��$�H��HDŽ$��	L��$�M���47H�3�SM��A��IH��1�H�����I�VH�PH�BI�FA�E(H�S 1�L��H��������;H��SH����E����-A��!L�|$A��IM��t�HH��1����I�VH�PH�BI�FA�G(E���B-I�FI�EH�S(D��L��L�hH��M�n�.������I�FH�\$H�CH�X�I�^�.��D��H��L��H�������������D��H��L��H���h�����������Mc��H�S 1��A�GH�T$A����N��H�T$H��H��H�B9��H�VH�FH�t$����H���GH�t$E��H��A�H��H�����H���SH�3I��K�D?�KH��PM��H��A�1��M��I�VH�PH�BI�FAYAZM��tA��uL��H����s��E���:�H�3�SE1��'H��1�H�����I�VH�PH�BI�F�����E�����E1��H��L��H�������������E�����H�E�8u�P3�H�@�8��'H���A��H��u�H�3�SE1��H��1�H���g��I�VH�PH�BI�F��T��E���d�H�3�SE1�A��H��1�H���"��I�VH�PH�BI�F����E����H�3�SA�H��A��1�H������I�VH�PH�BI�F�����E�����H�3�SE1��H��1�H�����I�VH�PH�BI�F����E�����H�3�SE1��H��1�H���\��I�VH�PH�BI�F��I��H���
�H��I����H��I�����1�A��\M����I��H��L��H��H�D$����ZI�FH�3A�H��SA��I�EH��L�h1�M�n����I�VH�3M��A��GH��H�PH��H�B�SI�F1����I�VH�3E1�L�T$A��H��H�PH��H�B�SA�D$(I�BL�P1�M�V�N��I�VH�PH�BI�D$L�`�M�f�2��A�D��H��L��H������������E1�D��H��L��H��������������H�E�C���H�EH�@x��,H�E������R���H�{ H��$��A���H��$��H��$��7���H�3�S�I��I��A�H��H��1��b��I�VH�PH�BI�FM��tA��uL��H���o��E���S�H�3�SE1��'H��1�H�����I�VH�PH�BI�F����H�{(��a�����iH�E�I���H�EH�@x�t0����I��I��I�H������X��-��Y��-��4�
-f�H��$�H��H��H��$�)�$�HDŽ$�H��$�)�$�HDŽ$�H��$�����I��H��$�H��t,�������#H���f��8�W�����#H�@H��u�H�3�SE1��H��1�H������I�VH�PH�BH��$�I�FH��tH�PH��$�H�BH��$�I�FE�����H�3�SE1��'H��1�H�����I�VH�PH�BI�F��|���H�=@�)�:H���|AH�s(1�H��H��E��A�����H�S 1�L��H��I���������H�3�SE1��H��1�H���
��I�VH�PH�BI�FH���aH��u'L�-��)��L���m��H���aH��t�H���_����SH�3jAWI��A��4H��H��1����I�VH�PH�BI�FXZM��tA��uL��H���1m��E�����H�3�SE1��'H��1�H���L��I�VH�PH�BI�F��9��H�{ ����H����X��H�=��)H��1����H���Hw��H��� @H�s(E��H��A�H��H�����H�S H��L��I���sH�3�SE1��A��H��1�H��A�����I�VH�{ H�PH�BI�F�W��H���/���Ic͋SH�3I��H�D	A�H��PH���41�AW�b��I�VH�PH�BI�FY^M��tA��uL��H���k��E���Q�H�3�SE1��'H��1�H�����I�VH�PH�BI�F����H�{ E1����H���W��H�=��)H��1�膍��H���v��H����>H�s(E��H��A�H��H���[��H�S H��L��H�{0H�D$A���.H�S01�L��H��A��A���V������H�{ E	��"��H�����Ic͋SH�3I��H�D	A�H��PL�|$H���41�AW�(��I�VH�PH�BI�F_AXM��tA��u
H�t$H���j��E����H�3�SE1��'H��1�H������I�VH�PH�BI�F�����L�{ E1�I��I��I9���H�3�SA�H��A��1�H���v��I�VH�3H��A�A�H�PH��H�B�SI�F1��A��I�V1�L��H��H�PH�BI�FI�GJ��������t�SH�3jE1�jA���H��H���#��I�VH�PH�BI�FI�GAYAZH�P�L9��#���H�3�SE1��'H��1�H�����I�VH�PH�BI�FI�G���H��L�m�Z�H�{ I�����H�����(H�H������;��2�qH�;H��I�M8�SA�A���+AV��H��Hc	��H�H�H�H��L�H1�Q�2���I�VH�3M��HH�PH��H�B�SI�F1�_H��AXA���
��I�VL��H��H�PH�BH�S I�FA�D$(������I�FI�D$L�`�M�f���DMc��H��A�GA������H���;H�s E��H��A�H��H�����H���SH�3I��K�D?A�H��PH��M��K1��$
��I�VH�PH�BI�F_AXM��tA��uL��H���g��E����H�3�SE1��'H��1�H������I�VH�PH�BI�F�����H�{0L�k(��H�L$`H��L��H������tSH���SH�3Ic�HcL$hL�LA�H��H��1�H�L	Q��`��I�VH�PH�BI�FAYAZE���{$��@��E���P�H����`��H�3�S�I��I��A�H��H��1����I�VH�PH�BI�FM���
�A����L��H���f�������H�S 1�L��H��������H�3�SA�H��A��#1�H�����I�VH�PH�BI�FE�����H�3�SE1��'H��1�H���X��I�VH�PH�BI�F��E��E���U�H�C H���S�H�3A�A�H��H��PH��1��
��I�VH�PH�BI�FX�Z����E�����H�3H�C �SH��H����E1��H���
��I�VH�PH�BI�F����E�����H�E�����H�EL�c L���M����$H�T$`L��L���0��u(H�UL��L���H���H�TH�T$`�0H�{ L�d$`���H���SH�3ATI��A�H��H���
1��	��I�VH�PH�BI�F�_AX����H�E�8���H�EH�@x���
A���H�{ �K���H��$��H��$��Az��H�3�S�I��I��A�H��H��1��l	��I�VH�PH�BI�FM��tA��uL��H���d��E���]�H�3�SE1��'H��1�H���!	��I�VH�PH�BI�F����E����H�EH�{ D���A�T$�������H���SH�3I��K�D$�H��PH��A�1����I�VH�PH�BI�F�AYAZ���H�{ �,���H�3�S�I��A�H��1�H���j��I�VH�PH�BI�FE���q�H�3�SE1��'H��1�H���5��I�VH�PH�BI�F��"��E���M����E����H�K H��L��H���
G�������E�����H�3�SA�H��A��1�H�����I�VH�PH�BI�F����A�D��H��L��H���4������E��1�H��L��H��藬����d��H�3�SE1��H��1�H���A��I�VH��H�PH�BI�F�IV��H�3�S�I��I��A�H��H��1����I�VH�PH�BI�FM��tA��uL��H���a���SH�3jE1�j	A��`H��H���Z��I�VH�PH�BI�FA_XE�����H�3�SE1��'H��1�H�����I�VH�PH�BI�F��o��H��L��H����E���q�H�3�SE1��'H��1�H���5��I�VH�PH�BI�F��"��E���2�H�����I��H�E�d���H�EL�xxA�G��A����� �������rH�3�SM��A��H��H��1����I�VH�PH�BI�FM�����A�����L��H���9`����v��H��跎��I��E���{�H�3�SI��A��H��1�H���9��I�VH�PH�BI�FM���@�A���6�L��H����_������H���ir��I��E���
�H�3�SI��A��H��1�H������I�VH�PH�BI�FM������A������L��H���]_������H���z��I��E������H�3�SI��A��H��1�H���]��I�VH�PH�BI�FM���d��A���Z��L��H����^����,��H���v��I��E���1��H�3�SI��A��H��1�H������I�VH�PH�BI�FM������A������L��H���^������E��D��H��L��H���s����������E������H���\��H�3�S�I��A�H��1�H���c��I�VH�PH�BI�F��P��E���`��H���O��H�3�S�I��A�H��1�H�����I�VH�PH�BI�F����H�[ D��L��H��H���������?E������H��莶��������H�3�SE1��(H��H�����I�VE1�E1���!
H��H�PH�B1�I�F���H�3�S�:I��A�H��1�H���`��I�VH�3E1��H��H�PH��H�B�SI�F1��4��I�VH�PH�BI�F��!���f.�H�3�SE1��H��1�H������I�VL��H��H�PH�BH��I�F�f��SH�3jj	E1�A��`H��H���R��I�VH�PH�BI�FA[A]E������H�3�SE1��'H��1�H���y��I�VH�PH�BI�F��f���H��L��H����H�3�SE1�H��E����H��1��,��I�VH�PH�BI�F�����E���)��H���Q^��H�3�S�I��A�H��1�H������I�VH�PH�BI�F��̿��D��H��L��H���d������鮿��H�EL�C D�8A�W���v�fDI�E��Q�����L���M��u�1�L��L��H���:�������H�3�SA�H��A��F1�H���-��I�VH�PH�BI�FE���4��H�3�SE1��'H��1�H�����I�VH�PH�BI�F����fDH�;H�����)|��H�3H���)H��H��1�H������1�鮾���1�頾��f�1�鐾��H���Q��I����H�PI�GI�WL�xI�WH��tL�zI;F��E���uH�E�p���H�EH�\$�H��$�H�X(L��H��L��$�H��$�L��HDŽ$�	H��H��$�H��$��o��A�E(A�M,H��A�G(H�E����H�EH�x�DH���k��H�CH�E�ُ��H�EH��H�x�U����邽����z��I�7H�i�)H��H��1�H��軼��1��[���L�l$8�M�o H�����H��L��H��I��L��I�������I�FM�0I�D$L�`M�fM��u�L�l$8����1����E���	��H�3�SE1��'H��1�H������I�VH�PH�BI�F�麼��H�S0H��L���D�S8L�C(H��L��H��诔�������H�3�SE1��*H��1�H���k���I�VH�PH�BI�FE����H�{0�	���H����x��H�3�S�I��A�H��1�H������I�VH�PH�BI�F�������;7��H�E�����H�MH�AH���������H��H���W�����蟺��������L�c(I�<$H��������-�L���OŃ�4wOH�p�H��H���IH�H��t%H�E�ō��H�EH�Px����@��1�L��L��H�������������H�3�SA�H��A��"1�H������I�VH�PH�BI�F���H�3�SE1��H��1�H������I�VH�3H��A�A��H�PH��H�B�SI�F1����I�VH�{ H�PH�BI�F�"w��H�3�S�
I��A�H��1�H���`���I�VH�PH�BI�F��1�H�j�)H��蚹��1��:����'H��1��$���I�VH�PH�BI�F�����������]���H�S(H�H������+�J1�L��H��蹸�����1���H�3�SE1��!H��1�H�����I�VH�PH�BI�F�颹��H�3�SA�H��H��=a�H��L�1��r���I�VH�3H��A�A��H�PH��H�B�SI�F1��=���I�VH�{ H�PH�BI�F��u��H�3�S�
I��A�H��1�H������I�VH�PH�BI�F��H�pH�3H��H�‰��y�1�H���-H������1�鿸��H�E�8��H�y���yXtH�A0H��tH�8��H�@H��u�H���F��1�H��L��I��I�FI�EL�hM�n�nH�E�s���H�EH�H��H�pH���q���I�VH�PH�BI�FH�E�>���H�EH�3A�H��S�GL�HH��1����I�VH�PH�BI�FH�E�����H�E��L��H��H�@�@(��I�VH�PH�BI�FE���	��H�3�SE1��H��1�H������I�VH�PH�BI�F��l���H��轻��H=�
tH��譻��H=�����H���9���H������H�E�����H�EH�x(����H�@x�����H��论��H��薿��H��I���K���E1�E1�1�1�H=��ZH���
�H��H�3�SM��WA��=PH��H��1����I�VH�PH�BI�FY^M��tA��uL��H���<R��E������H�3�SE1��'H��1�H���W���I�VH�PH�BI�F��D���DE1�����D��L��H���������������H�S(1�L��H���ߴ�����g���H������H���%H�s H��H��D�L$A�H���z���I��H�E�8���H�E�SM��A�H�3�H��L�P(jH��jL�T$�(��I�VH�PH�BI�FAYAZL�T$�~��H�D$H�C(H�D$���<��5H�3�SM��A��H����H���tCH�PH��t:H�z ��H�P���������H���H��tH���u�H�31�H���)H��H���,���1��̴��H�s H�L$`H�T$@H����������D�D$`D�L$@H��L��H�KH��A)��x3���q�H�3�SE1��H��1�H���g���I�V1�L��H��H�PH�BH�S I�F�&�����������SH�3E1�A�H�K(jH��j	H���	��I�VH�PH�BI�FA[A]�N�H�D$ �5����t	���}�M���,���L9�t
A���e�H��L�D$���L�+1�L�D$I��I�FI��H�EI�GL�xM�~tH�}H��@�(L�D$����L�D$1�L��H�@I�VH���H�PH�@D�h H�BL��I�F�!��������H�E����H�E�xXtH�@0H��tH�8���H�@H��u�H��L���%i1�H�EtH�EH�x@�(�g���H�3E1��EH�@I�VH���H��H�P�@H�@ H�B�SI�F1���I�VL��H��H�PH�B�����I�F讨��I�VH�PH�BI�FE���u��H�3�SE1��H��1�H���9�I�VH�PH�BI�F��&���H���aH��u$L�%~�)@�L����M��H�\�aH��t�H�¹��H���-����ڱ��E�����H���O��1�1�D��H���;H�3�S�I��I��A�H��H��1���I�VH�PH�BI�FM���2�A���(�L��H��� M����H�y��yX�
H�����I��I�FI�EL�hM�nH�E�H���H�EH�H��H�pH���F���I�V1�L��H��H�PH�BH�S(I�F�ů�����M�1�H��L���gH�E�s���H�EH�3A�H��S�GL�HH��1���I�VH�PH�BI�FH�E�.���H�E��L��H��H�@�@(裦��I�VH�PH�BI�FE�������H�3�SE1��H��1�H���.�I�VH�PH�BI�F�����I�FI�EL�hM�nE���]����,���fDH�KE��A�H��L��H����.����ү��H���tCH�PH��t:H�z �8H�@����)���<
H���H��tH���u�H�31�H�R�)H��H���Ů��1��e���I�FH�HH�AH��$�H��$�I�VH������H�BH�PH��$�I�F�h��H���H��A�H��A�P1����I�VH�PH�BI�F�Y^�߮��H�3�SE1��'H��1�H����I�VH�PH�BI�F���H�3�SE1��(H��1�H����I�VH�PH�BI�F�]���H�3�SE1��(H��1�H���Z�I�VH�PH�BI�F馱��H�3�SE1��(H��1�H���)�I�VH�PH�BI�F�
���H�3�SE1��'H��1�H����I�VH�PH�BI�F�P���H�D$ I�FH�T$f�D��H��$�H��L�\$(I�EL�hM�n)�$�HDŽ$�H�t$H��$��h����������L�\$(E1�A�K(����H�D$L�
��,L��H��HD�A��H��H�u�,LEȋOPE1��t$(H�WH����XH��Z��H�3�S�GI��H�D$A�1�H��H����L�T$L�\$(H��$�H�PH�BH��$�A�B(E����	H��$�H��tI�VH�BH�PH��$�I�FA�C(���þ�����fDE1��(H��1��~�I�VH�3H�PH��H�B�SI�F鋰��H�3�SE1��(H��1�H���C�I�VH�PH�BI�F隮��H�3�SE1��'H��1�H����I�VH�PH�B���H�3�SE1��(H��1�H�����I�VH�PH�BI�F鴰��E1��(H��1���I�VH�3H�PH��H�B�SI�F�������I��H�E�V~��H�EL���镬��H�3�SE1��H��1�H���X�I�VH�3H��A�A��FH�PH��H�B�SI�F1��#�I�VH�PH�BI�FE���*��H�3�SE1��'H��1�H�����I�VH�PH�BI�F��۪��H�3�SE1��'H��1�L�T$H����I�VL�T$H�PH�BI�F�P�M�~�>�L���82��H�3H���)H��H��1�H���ͩ��1��m���H�yH��u�f.�H�@H�������H�8t�H���tCH�PH��t:H�z �"H�@��������H���H��tH�0��u�H�31�H���)H��H���7���1��ש��H�3�SE1��'H��1�H����I�VH�PH�BI�F���L���7f��H�3�S�I��A�H��1�H���u�I�VH�PH�BI�F��b���H�3�SE1��'H��1�H���?�I�VH�PH�BI�F��,���H�31�H���)H��H���m���1��
��������H�S(1�L��H���˧�����C�H�3�SA�H��A��F1�H����I�VH�PH�BI�FE������H�3�SE1��'H��1�H����I�VH�PH�BI�F��v�����#��H�E�{��H�UH�BH���������H��H����C���{�H�S�)Hc�H�>��L���5B��I�4$A�T$I��H��A��1�H�����I�VH�3H��A�A��"H�PH��H�B�SI�F1���I�VH�PH�BI�F�騧��L����4���L����E���u���1��n�����d�����Z���L���=���M���H�E��y��H�EH�@x�@u�=��H�������L���̯��M�,$H��I����U��I��L��D��H���[��L���Nq�����L���aU������L���T^������L���GZ�����H�T$h�Q���H�3�SE1��'H��1�H����I�VH�PH�BI�F�T��I� �.c��L��H����7��M������H�EH�3M��A��S�H��H��1��M�I�VH�PH�BI�FA�����L��H����A���o��H�3�SM��A��H���U�H�31�H�"�)H��H���N���1����I� �~b��L��H���37�����ib��L��H���7���6���I�(�Pb��L��H���7��M� ����E1�1�L��H���<����鉥��E1��(H��1��p�I�VH�3H�PH��H�B�SI�F�+���A�D$(���1�L��L��H�����������H�3�SE1��H��1�H����I�VH�PH�BI�F�����r;��H���������A���H�31�H���-H��H���$���1��Ĥ�������H�E�iw��H�UH�BH���4�����,���H��H���A@���������
I��H�E�cw��H�EL������H�KE1�A�H��L��H���&#����3�����b��H�E��v��H�UH�BH����������H��H���?�����H���R��L��D��H���%I�����H�{ �t+��H�3H�2�)H��H��1�H���	���1�驣��H�3�SA�H��A��,1�H���}�I�VH�3E1��*H��H�PH��H�B�SI�F1��Q�I�VH�PH�BI�F���H�A0H���������Q��I�u1�H��)H��H���l���1�����1�����E��t
A����I����H��诵��I�����H�3�SE1��'H��1�L�T$(H��L�\$��L�T$(L�\$H��$�H�PH�BH��$����L���D$騱��H���D$阱��H�\$0D�d$H��醱��H�31�H���)H��H��蠡��1��@���H�31�H�}�)H��H��聡��1��!���E1�H�S(1�L��H��������n�H�3M�SA�M��FH��1�H��I�����I�VH�PH�BI�FE���*���H�3�SE1��'H��1�H����I�VH�PH�BI�F�鍡��A���d�����H�����H�3�SM��AP�?A�H��P��H�5G�)Hc�H�>��L���թ�������^��H�=˵)H��1��J=��H�=��)1��<=���s�����AWf�AVAUATUSH��H���dH�%(H��$�1�L��$�)�$�HDŽ$�L��$�H���$H��H�6��t&H�����/
H�T�)Hc�H�>��fDH�U0H�u H���L�}0M���bI�?H������G��
H�KA�WhH�L$�A����	ЈAA�0H��I�w@M�w`�|$���xI�HH�t$ H�|$(����
�HH���&
�D$DM����
�L$�H�D$ H���WH�|$�q�D$0�t$�O �OH��*u�OI�8t4H�L$�|$A�W4�A�y$׉Q(���|$�A�t
�A �D$���A$M�wPM���
L�k�L�l$8���1�H�D$ ��g��A�M� �H�D$P����H�D$I�E8E1�M�v(A��M��u�D$M�wPD�H�D$l�L$HH�L$�AM���)1�1�H�l$`H�l$ L�|$XM��A��D�l$hI��H�\$��@I� �ס��H����MH�H������;��4�H�
x�)Hc�H�>��fD�A��H��E�u�(h��M�(M��u�H�D$D�l$hA��L�|$XH�l$`�@H�\$�D$D)�I�WX�t$HH�|$Hc�H�z D�/�L$t;H�SH���H�ʋL$l�w���L$H�L$8�I H���u�I�H�t$8H�L$H�H���D�QH��H�AH�D$ H�8�� �=H����H���=H�|$(���L$0���eH�D$A��H0H�{�
���H�D$I�W D�hH��t�L��H������I�W(H��t�L��H������H�D$�8u(H���@�>u�yu�T$D��u�Ȁ�Af�H�C�������������H�U(1�L��H��螛������H�C�������H��$�H��t7���uH�@���u%�xuH�@�H������	���t	@H��so��H�C�����E1�H�߹E�p`1��5��H��$�H�PH�BH��$�L��H���"V�����/L��H���/n��H���H�E(H��o��H�{�(H���H��@�V���1�L��H��H��$��H�@H�P�@H�@ H�BH�U(H��$��`�������H�E(H���n��H�{�(H���H��@�ސ��H��$��H�@�@H�PH�@ H�BH��$�H�EH��H��On��H�S�B`�B����1�H�tH�{H��@�(�c���1�L��H��H��$��H�@H�P�@H�@ H�BH�U(H��$��m�������1�H�tH�{H��@�(���H��$��H�@�@H�PH�@ H�BH��$�H��qm��H�EH�SH���B`�\���f�H���
L�sH���Ǭ��I��I�FH���
L�sH��觬��1�I��I�FA�E,���A�E,A�G,���A�G,H�tH�{H��@�(�%���1�E1�H��H��$��H�@H�P�@H�@ H�B�����H��$�H�C�pX1��E��1�L��H��H��$�H�PH�BH�U(I�EL�hL��$������1H��$�1�I�GL�xL��$�H�tH�{H��@�(�g���H��$��H�@�@H�PH�@ H�BH��$�H���k��H�SH�CL��M��H��I����Rh�P`H��$�H��H��$�HDŽ$�L��$�HDŽ$�H��$�H�D$��I��A�E(A�M,H��A�G(A�E(H��Lk��H�CH�x��H��H�T$�?F��H�T$H�BH��k��H�CH��H�x�a��H�t$�H��$�HDŽ$�
L��$�HDŽ$�L��$��6I��A�E(A�M,H��A�G(H���j��H�CH�x��H���E��H�EH��|j��H�CH��H�x�`���p���fDH�Y�)LJ�H���1�H���5���fDH�
��)�H��H�
�)H��1��;���1�H��$�dH3%(�hH���[]A\A]A^A_�H�
�*��H�٪)�LJ�H����x���fDH�
k�)�|���@H�
V�)�l���@1�H��H�Q�)H��裕��1��c���@H�
�)�<���@H�
 �)�,���@H�T$pE1�L��H��H�JA�H�D$pH�D$xHDŽ$�DŽ$���������H�t$pH��1���$�A�A��FH�����H��$�H�PH�BH��$��m���f.�1�L������H�{1�1�������@�R��I�7H�A�)H��H��1�H��蠔���K���H�|$ �D$D��A�Gh�;����|$���/���M�����E1��7��L�|$0E��M��H�l$8H��H�D$�DA��H��蝧��H��H��I��H���^��I�U L��H��H��$��I�FL�pL��$��o���M�m(A�OM��u�H��E��H�l$8L�|$0�L$8A���5���H�|$H��I��H���!^��H��$�McžL��L�D$0I�FL�pL��$���T��L�D$0I��L��J��H��=��H�D$H�H�pH�L$0�� �L$8u	H�D$H�p H���KE��~��L��I�T�@H� �H��H9�u�H�|$�L$0��B��H�D$�L$0�H�HL$L�p0������fDH����1��H������1�����f�H���x-��H�����H��� ��H�����H����(��H�����H���x]��H����H���A��H����H���xJ��H����H���hF��H����Q��Et	��G����H�@H��$�H�@���fDM�����D$D�D$0��f�H�H��(���D�D$DH�D$ �V���f.�H�|$L��L���;���H�t$P���������I�Xt�t$0��t1A�Gh���H�D$�H���D�l$��fDH�CHcT$� �H���I��E�nH��H�D$���H�t$D�pH�F8H�Ͱa�N H���	H9D$u	H�D$�HH�|$(�.�D�l$�H�L$�D$H�{�I@D�h�A,�+���D�l$���H�D$ H�x��f��E1��R��H�l$8I��H�D$ L�d$HL�|$ L�d$PM��E��H�HH��I���-DH����H9�}TL��H�4�I��I9�t$H�0H��u,A��H�EIc�� u�H;U}&H�E ��H�$���@��u�H���r,����H�D$M��H�l$8L�|$ L�d$HL�h��L���L$0�Y���L$0����D$0H�D$(�D$�����H��oc��H�SH�BH�����������H��H����+�������H�T$�N��H��*c��H�KH��H�T$H�A�������H��H��H�T$�+��H�T$����H�D$ �D$D����D$E1��~�H���aH��u$L�5��)@�L���c+��H���aH��t�H���a����L$�D$0���%>��L�ƿ�X"��H������H�%H�����H�%@H�z ��xAW1�I��AVE��AUE��E1�ATI�̹(UH��SH��H��H�3�RH������H�U1�H��L��H�PH�BH�S H�E薍�����H�3�SA�A�H��E��us�1L��1����H�UH�PH�BH�EH�3�SM��L��A��I1�H���R��H�UH�PH�BH�E�A�D$(H��[]A\A]A^A_���)L��1����H�UH�3L��A��1A�H�PH��H�B�SH�E1�����H�UH�KH��E�FL��H�PH�BH��H�E������:���H��1�[]A\A]A^A_�D��AWI��AVAUATUH��SH���H�:��$ H�L$L�D$H��D��$0�D$��dH�%(H��$�1���o��H�
��)��H��E��Hc�H�>��DM�w0M���[I�~(Hclj|$@H9��T`��H��迟��H��H�D$(貟��H��H�D$H襟��H��H�D$0蘟��A��L��H��D��$(H�L$(�|$ A��H��H�D$8�}������uD1��Ff�1�L��H���S�����t�I�7A�WA�A�H��E�����1H��1��@��H�SH�PH�BH�CL�t$I�7A�1�A�W�HH��H��M�����H�SH�PH�BH�CA�F(I�7A�WL�t$H���l�M�g H��$�H��$�H��L���1����|$A���CE����I�OL��H��H��D��$�D��$�E)��E	��I�7A�WL�t$H��M��A��G1�H���]��H�SH�PH�BH�C�A�F(H��$�dH3%(��0H���[]A\A]A^A_�f.�H���؝��M�w I��I�H������+uI�~(�WI�71�H�O�)H��H���/���1��I�G(H�D$XH����H�x(Hclj|$(H9��^��I�G8H����H�x(Hclj|$@H9���]���D$(��D$0I�G0H������
H�����H���$���H��I������H��H�D$P����H��H�D$8���I�7A�WH��H�D$HA�A�1�H������H�SI�7E1��*H��H�PH��H�BA�WH�C1�����H�SH�PH�BH�C��$(��t��$(�D$`A��L��L��H��D��$(A��H��D$ �h�������E��M��L��H��AS��$0H��P�D$0P�t$hL�D$hH�L$X���H�� �������I�7A�WE1��(H��1�H���%��H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj���H�SI�7H��A��H�PH��H�BA�WH�CHcD$@L�L1�L�L$xAZA[���H�SI�71�I�0A�H��H�P��H��E1�H�BA�WH���H�Cjj���H�SH�PH�BH�CA]XE��tQ��$(I�0D�`��'�+H�=��)���I��H��H��H��L��ATL�L$xI�O�]��^_���s���I�7A�WA�M��IH��1�H������H�SD�D$(H�PH�BH�CA�F(E����!��$(L�t$0A�D�h�D$E��L�l$X�D$8�D$(��H�DH�D$H�M�m0I��L9d$H�Y!I�7A�WE1��(H��1�H���P��H�SI�7M��A��H��H�PH��H�BA�WH�C1����H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj���H�SH��H��H�PH�BI�U H�CA[XjAVD�L$HD�D$0H�L$@�,ZY���)���1��_���f�H��E���e���H��H�D$8�X���H�D$ H�D$hI�G(H��tI�0��A��H�L$8L��H��D��$(A��H��D$0� ����������I�7A�WE1��(H��1�H�����H�SH�PH�BH�CH��aH��u(L�-.�)��L����!��H���aH��t�H���oB��I�7A�WH��I��A��1�H�����H�SI�7E1ɹ�A�H��H�PH��H�BA�WH�Cjj���H�SH�PH�BH�CY^E��t9�(H�=4�)���I�OL��H��I����$(H��D�H����������L�l$8I�71�A�A�W�IH��H��M�����H�SH�PH�BH�CA�E(H�|$ �>L�l$ I�7H��1�A�WA��H��M�����H�SL��H�PH�BH�C�n��H��t�uH��H���J ��H�[�aL�-��)H��u ��L���C ��H�4�aH��t�A�WI�7jE1�jA�H��H��H������H�SI�7E1��(H��H�PH��H�BH�CX1�ZA�W���H�SI�7H��A�A��3H�PH��H�BA�WH�C1�����H�SI�7H��L�l$hA��IH�PH��H�BA�WM��H�C1����H�SH�PH�BH�CA�E(I�0�gH�@�aH��u$L�-'*@�L���3��H��aH��t�A�WI�7jE1�jA�H��H��H������H�SH�PH�BH�CA[A]I�G(H���� L�h M���qI�}(f�H��$�HDŽ$�H�D$@H��$�Hc�)�$�H9��V���������D$`�����$(�D$ D�t$X��D��$�L�d$8H�H�DH�D$x��$(��H�H�DH��$���$(��H�H�DH��$���$(��	H�H�DH��$���$(���D$P�D$�D$H�I�E0I�u H��H�@ H�D$(���I�7A�WE1�I�ƹ(H��1�H������H�SI�7M��A��H��H�PH��H�BA�WH�C1����H�SH�PH�BH�CH�U�aH��u%��H�=�*�O��H�0�aH��t�A�WI�7jE1�jA�H��H��H������H�SH�PH�BH�CAYAZ�|$X�!I�7A�WM��A��IH��1�H�����H�SI�7E1��(H��H�PH��H�BA�WH�C1�A�D$(����I�7M��H��$�A�H��H��H�PH�BA�WH��$�1����H��$�I�0H�PH�BH��$����-H�!�aH��u!@�H�=+L)�'��H��aH��t�A�WI�7jE1�jA�H��H��H�����H��$�H��H�PH�BH��$�YL��^j�D$XPD�L$XD�D$@H�T$8H�t$P�8%_AX�����I�E0�D$ L�h0�D$ 9D$`�����H��$�D��$�H��tH�SH�BH�PH��$�H�CI�I�O0A�WH����H��toE1�H����(��H��1��S���H�SH��H��H�PH�BI�W0H�Cj��$0��PD�L$ D�D$@H�L$H�w$AZA[���{�I�7A�WH��E1��'H��1����H�SI�7H��L�t$A��GH�PH��H�BA�WM��H�C1�趿��H�SI�7E1��H��H�PH��H�BA�WH�C1�A�F(脿��H�L$hI�7H��H�SA�A�H��H�PH�BA�WH�AH�H1�H�K��A���H�SI�7H��A��H�PH��H�BA�WH�CH�q�`L�1�����H�S�!H�=�)H�PH�BH�C��I�7A�WH��I��A��1�H���þ��H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj�.��H�SI�7H��'H�PH��H�BA�WH�C1�AXE1�AY�]���H�SI�7E1�H�L$8H��H�PH��H�BA�WH�AH�H1�H�K�'�#���H�SI�7L�t$H�PH��H�BA�WH�C��fDH��E��E��踏��H��H�D$諏��I�7A�WE1�I�ƹ(H��1�H��軽��H�SH��E��M��H��H�PH�BI�W H�CAU��$8�GH��PjH�L$0���H�� �����H�L$H�CE1�H��I�7A�WH�AH�HH��1�H�K�'�@���H�SI�7H��L�L$A��GH�PH��H�BA�WH�C1�����H�SI�7E1��H��H�PH��H�BA�WH�CH�D$�@(1��ռ��H�SH��E��H��H�PH�BI�W(I�FL�pL�sAU��$8WH��jL�D$8H�L$(��H�� �������=�E��I�W(H��E��AU��$0PD�L$ H�L$(� ^_�����I�W 1�H��H���z�������E����I�L�t$�IA�A�WH��H��M���H����t�HH��1����H�SH�PH�BH�CA�F(�P�DH�EM�o H��H���L��H�@D����{��A)Ā|$�}H�EE1�H;��tDH���A��H�BH;��u�I�OE��L��H��H���������fD�7��I�7H�Ŕ)H��H��1�H���y��1����f�E��L��AS��$0V�|$0H��WH��t$`L�L$HL�D$XH�L$P���H�� ���P�I�7A�WE1��(H��1�H���ú��H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj�.��H�SI�7H��H�PH��H�BA�WH�CHcD$PL�L1�L�L$`AXA�AZ�K���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj���H�SH�PH�BH�CA[A]E��tF�+H�=I�)��H��I�OL��I����$0H��H��PL�L$`���AXAY���'�L�l$(I�7A�1�A�W�IH��M��H��菹��H�SH��H�PH�BH�CA�E(�B���H��H�D$pI���2���H��H�D$0�%���H��H�D$`����I�7A�WE1�H�D$X�(H��1�H���&���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj���H�SI�7E1��(H��H�PH��H�BA�WH�C1�AZA[���H�SI�7H��L�L$PA��H�PH��H�BA�WH�C1�苸��H�SI�7E1�A��-H��H�PH��H�BA�WH�Cjj���H�SI�7H��A�A��H�PH��H�BH�CX1�ZA�W����H�SI�7E1��(H��H�PH��H�BA�WI�EL�h1�L�k���H�SI�7H��A�A��,H�PH��H�BA�WH�C1�賷��H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj���H�SH��A�H�PH�BA�WH�CY1��I^I�7L�l$XH��M���D���H�S�|$@H�PH�BH�CA�E(����	�L$��$(D�d$hE1�L$8�L$@��A�ă�H�L$@��M�v0I�EL9l$@�[	I��I�7A�WA�H��A��,1�H��贶��H�SI�7H��A�A��,H�PH��H�BA�WH�C1��~���H�SH�PH�BH�CM��tlI�7A�WO�L-H��A��1�H���D���H�SI�7H��E1�A��+H�PH��H�BA�WH�Cjj���H�SH�PH�BH�C^_A�WI�7jE1�jA���H��H���x��H�SH��H��H�PH�BI�V H�CA[XjATD�L$HD�D$0H�L$@�ZY�������1��O�f�I�7A�WE1��(H��1�L�T$ E��H���j���H�SE��E���L$H��H��H�PH�BI�V A��A��H�CAS��$0��PL�T$0L��L�T$ �ZY�����I�F0H��E��H��H��H�P j��$8PAUL�T$0H�L$(M���R�H�� ���F�I�7A�WE1��H��1�H��蹴��H�SL�T$H�PH�BI�BL�PL�SI�7A�WE1��'H��1�H������H�SH�PH�BH�C�w�f.��)H��1��Q���H�SI�7H��A��1A�H�PH��H�BA�WH�C1�����H�SI�OH��H��H�PH�BL��H�C��$(D�@��������1����I�G0�D$@H��H����D$(�D$0�Z�H���~���H��I���s���H��H�D$P�f���H��H�D$8�Y����D$`H�D$H����L�h M���JI�E(H��H��?H�H���H�\$(L��H�D$ I��DH�s H���,w��L��H����;��H�C0H�X0H��u�H�\$(��f.�H���Ȅ��I�7A�WE1�H�D$p�(H��1�H���ֲ��H�SI�7H��L�\$pA��HH�PH��H�BA�WM��H�C1�螲��L�\$pH�SL��H�=ҋ)H�PH�BH�C1�A�C(�#/��H�����I�7A�WH��I��A��1�H���H���H�SI�7H��L�L$xA��-H�PH��H�BA�WH�C1�����H�SI�7H��A�A��H�PH��H�BA�WH�C1��ݱ��H�SI�7H��L��$�A��-H�PH��H�BA�WH�C1�襱��H�SI�7H��A�A��,H�PH��H�BA�WH�C1��o���H�SI�7H��L��$�A��-H�PH��H�BA�WH�C1��7���H�SI�7M��A��H��H�PH��H�BA�WH�C1�����H�SI�7H��L��$�A��-H�PH��H�BA�WH�C1��̰��H�SI�7H��A�	A��.H�PH��H�BA�WH�C1�薰��H�SL�\$pH�PH�BI�CL�XL�[�S�@L�����H�����������<_���L����I�7H�r�)H��H��1�H���n��1����f�L����H���r��<_�g�L���\����D$(�A�L�����I�7H��)H��H��1�H���n��1��s�fD�D$@��I�7A�WE1��H��1�H��胯��H�SH�PH�BH�C���fDH���0���I�7A�WE1�I�Ĺ(H��1�H���@���H�SI�7M��A��HH�PH�BA�WH�CH��H��H������t�IH��1����H�S�!H�=Q�)H�PH�BH�CA�D$(�r�I�7A�WH��I��A��1�H��诮��H�SI�7H��A��-H�PH��H�BA�WH�C��$(��H�L�L1��n���H�SI�7E1�A��H��H�PH��H�BA�WH�C1��;���H�SI�7H��A��-H�PH��H�BA�WH�C��$(��H�L�L1����H�SI�7E1��'H��H�PH��H�BA�WH�C1��ͭ��H�SI�7E1��'H��H�PH��H�BA�WH�C1�蠭��H�SH�PH�BI�D$L�`L�c�W�D�d$hI�A�WH��I�(����A��,H��1�A��J���H�SI�7H��A�A��H�PH��H�BA�WH�C1�����H�SI�7H��A�A��,H�PH��H�BA�WH�C1��ެ��H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj�I���H�SH��H�PH�BI�W(H�C_H��AXj��$0��PD�L$ D�D$0H�L$h��AYAZ������I�7A�WH��I�8��|A��,H��1�A��-���H�SI�7H��A�A��,H�PH��H�BA�WH�C1����H�SI�7H��L�L$PA��H�PH��H�BA�WH�C1��«��H�SI�7E1�A��+H��H�PH��H�BA�WH�Cjj�-���H�SI�7H��A�A��,H�PH��H�BA�WH�CA^X1��T���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj迿��H�SH��H��H�PH�BH�CXZI�W8j��$0��PD�L$ D�D$0H�L$h�AY^���G��I�7A�WH��L�t$`A�H��1��GM��诪��H�SI�7H��H�L$0A�A�H�PH��H�BA�WA�F(H�AH�H1�H�K��g���H�SI�7E1�A��+H��H�PH��H�BA�WH�Cjj�Ҿ��H�SI�7H��A��GH�PH��H�BA�WH�CA[1�A]L�t$pM�����H�SI�7H��H�L$XA�A�H�PH��H�BA�WA�F(H�AH�H1�H�K�.让��H�SH�PH�BH�CE����L�t$(I�7A�1�A�W�GH��H��M���m���H�SI�7H��A�A��)H�PH��H�BA�WH�C1�A�F(�2���H�L$`I�7H��H�SA�A�H��H�PH�BA�WH�AH�H1�H�K�.���H�SI�7E1��'H��H�PH��H�BA�WH�C1��¨��H�SI�7H��L�d$A��GH�PH��H�BA�WM��H�C1�芨��H�SI�7E1��H��H�PH��H�BA�WH�C1�A�D$(�W���H�L$HI�7H��H�SA�A�H��H�PH�BA�WH�AH�H1�H�K�����H�SI�7H��A��H�PH��H�BA�WH�CH�D�`L�1��ڧ��H�S�H�=�)H�PH�BH�C�Y�I�7A�WH��I��A��1�H��薧��H�SI�7H��A���H�PH��E1�H�BA�WH�Cjj����H�SI�7�'H�PH��H�BA�WH�C1�_H��AXE1��1���H�SH�PH�BI�FL�pL�s�x�L�t$0I�7I�G0A�WI��I��D��H����H�����D��E1��(H��1��Ҧ��H�SI�7H��A��H�PH��H�BA�WH�CHcD$(L�L1�蘦��H�SI�7H��A�A��,H�PH��H�BA�WH�C1��b���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj�ͺ��H�SI�7H��A��H�PH��H�BH�CX1�ZA�WL�L$h���H�SI�7E1�A��-H��H�PH��H�BA�WH�Cjj�a���H�SA�	H��A�H�PH�BA�WH�CY1��-^I�7H��艥��H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj��H�SL��H��H�PH�BI�W0H�C_H��AXj��$0��PD�L$ D�D$0�w	AYAZ���{��I�7A�WH��H��D�D$@M�o8E���o��$(E1��D$0�D$�D$L��M��I��� fDM�m0A��A�VI�6D;d$@�H��E1��(H��1�萤��H�SI�6H��A��H�PH��H�BA�VH�C�D$(D�H�L�L1��R���H�SI�6H��A�A��,H�PH��H�BA�VH�C1�����H�SI�6E1�A��+H��H�PH��H�BA�VH�Cjj臸��H�SI�6H�﹑H�PH��H�BA�VH�CAXA�AYjE1�j�N���H�SL��H��H��H�PH�BI�U H�CAZA[j�D$8PD�L$ D�D$0��ZY�������1��#��I�7A�WE1��(H��1�H���I���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj贷��H�SH�PH�BH�CXZE��t9�H�=U|)��I�OL��H��I����$(H��D�H�L������4��L�t$8I�7A�1�A�W�IH��H��M��蜢��H�SH�PH�BH�CA�F(��H��1��x���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj���H�SH�PH�BH�CA]A^E��t9�H�=z{)��I�OL��H��I����$(H��D�H�y������a��L�t$8I�7A�1�A�W�IH��H��M���ɡ��H�SI�7H�PH��H�BA�WH�CA�F(���*H�= �)�3�I���a��L��H��M����I�lj�E1�H��'1��h���H�S�|$`H�PH�BH�C���oL�d$I�7A�1�A�W�GH��H��M���$���H�SI�7E1��H��H�PH��H�BA�WH�C1�A�D$(��H�S�t$`H�PH�BH�C����I�7A�WA�H��H�L$PA�H��H�AH�H1�H�K�螠��H�SI�7H��A��H�PH��H�BA�WH�CH���`L�1��d���H�S�H�=ly)H�PH�BH�C���I�7A�WH��I��A��1�H��� ���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj苴��H�SI�7E1��'H��H�PH��H�BH�CX1�ZA�W輟��H�SI�7E1��'H��H�PH��H�BA�WI�FL�p1�L�s臟��H�S�L$`H�PH�BH�C���x�����D�l$@E������D��E1��(H��1��C���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj讳��H�SI�7H��A��H�PH��H�BA�WH�CAY1�AZL�L$h�՞��H�SI�7E1�A��-H��H�PH��H�BA�WH�Cjj�@���H�SI�7H��A�A��-H�PH��H�BA�WH�C1�A[A\�f���H�SI�7E1��'H��H�PH��H�BA�WH�C1��9���H�SM�o8I�7H�PH�BA�WH�C�.���1��R��H�D$ ���I�7A�WA�H��A��1�H�����H�S�!H�=��)H�PH�BH�C�a�I�7A�WH��I��A��1�H��螝��H�SI�7H��A�A��,H�PH��H�BA�WH�C1��h���H�SI�7E1�A���H��H�PH��H�BA�WH�Cjj�ӱ��H�SI�7H��A��-H�PH��H�BA�WH�CAYAZ��$(��H�L�L1����H�SI�7E1�A��H��H�PH��H�BA�WH�C1�軜��H�SI�7H��A��-H�PH��H�BA�WH�C��$(��H�L�L1��z���H�SI�7E1��'H��H�PH��H�BA�WH�C1��M���H�SI�7E1��'H��H�PH��H�BA�WH�C1�� ���H�SH�PH�BH�C�v�I�7A�WE1��H��1�H�����H�SH�PH�B����I�7A�WE1��'H��1�H�����H�SH�PH�BH�C�_����v	��fDAWI��AVI��AUI��ATUSD����H���l$XH�T$D�D$�@m��@��H��L��UI�ċD$`L��L��PSD�D$$H�T$(E��M�����H�� ��tI�EI�D$L�`�M�eH��[]A\A]A^A_�f�AWf�AVL�rAUATUH��H��SH��H���H�t$@L�d$`H�T$8�L$(dH�%(H��$�1�H��$�)D$`H�D$H��$�H��$�)�$�)�$�H�D$pL�d$xHDŽ$�HDŽ$�H�D$H��$�L�t$H�9�H��H�
�?,L��H���D`��H�[(H�D$H�;H�������P���H�3H��)H��H��1�H���hX��1�H��$�dH3%(�H���[]A\A]A^A_�DH�C0H��I��H�D$P�k��H��I���k��H�D$XL��M����H�3�SE1��H��1�H��茙��H�T$x1�L��H��H�PH�BH�D$xH�D$8H�P �DW������H�D$hH��tH�L$@H�QH�BH�PH�D$xH�AH�D$PH����H��H���H�DH��H�D$ �‰D$,fDH�\$0E1�H����j��H�3L�L$ H��I��H��$��SA�H���.I�D$L�`1�L��$�踘��H��$�H��E��L�
��)H�PH�BH�S(H��$�A�GH�҉$HD�H���J�t$H��L�t$ L�����AZH�S(L��A[�L$(H���.V�����vH�3�SM��A��GH��1�H���$���H��$�L�s H�PH�BH��$�A�E(M���
H����i��I�6A�VE1�I�ǹ(H��1�H���җ��H��M��L��H��$�H��H�PH�BL��H��$�jjjD�L$LH�t$8���H�� ����H��$�H�[0I�GL�xL��$�A�G(A�O,H���
H�3H��H�������LD�$$E���/����SH��E1��H��1�����D�<$H�\$0H��$�H�PH�BH��$�����H�3H�Zp)H��1�H���8U���1�����f�H�3�SE1��H��H��視��H�T$xH�3E1��H��H�PH��H�B�SH�D$x1��x���H�T$xH�3E1�A��H��H�PH��H�B�SH�D$x1��D���H�T$xH�3E1��H��H�PH��H�B�SH�D$x1�����H�T$xH�PH�BH�D$x�W����H�D$X�SH��E1��'H��L�xI�GH��$�1��ʕ��H�3E1��'H��$�H��H��H�PH�B�SH��$�1�薕��H���KH��H��$�L�
�C,H�PH�BH�SH��$��t$L�t$(D�D$L�����Y^H�ڋL$(L��H���S�����g���H�3�SM��A��GH��1�H������H�3E1��H��$�H��H��H�PH�B�SA�E(H��$�1��ܔ��H��$�D�L$(H�PH�BH��$�E���H�L$@H��$�H�AH��tH�PH�BH��$�H�AH��$�H��tH�PH�BH��$�I�EL�hH�D$@L�h��N���@H�D$XH�\$8H��H��L�
eB,L�x�KI�GH��$��t$D�D$H�t$(H�T$X蝕��XH�A�Z�SA��H��H�$H��1�H���ߓ��H��$�H�|$PH�PH�BH��$��XH�\$8A��H��H��SH�$H��H�t�`H��L�1�膓��H��$�A�H��A��,H�PH�B�SH��$�H�H��H�$1�H���B���E1ɹ�H��H��$�A�H�PH�B�SH��$�H�H�$H��jH��j蟧��H��$�H�PH�BH��$�AYA�AZH�D$8A��.H��PH�H��H�$1�H��貒��H��$�D�D$(H�PH�BH��$�E����H�\$8M��GH��A�H��SH��H�$1�H���^���H�3H��)H��$�A�H�PH�B�SA�E(H�|$PH��$�H�H����L�H1�����H��$��|$(H�PH�BH��$����8���H�D$0�PH�0H��E1��H��1��͑��H��$�H�PH�BH��$�����SH�3��H�D$8E1��H��PH�H��H�$1�H��耑��H��$�H�PH�BH��$�����H���+c��H��I��� c�����I���yeI��H�H� oaH��u$H�ug)@�H�����H��naH��t�H�����I�GH��naH��u H���)�H����H��naH��t�H���_��H�\$8A�	H��I�GA��,H��SH��H�$1�H��芐��M��HH��H��$�A�H�PH�B�SH��$�H�H��H�$1�H���I���H��$��H��A�H�PH�B�SH��$�H�A�D$(H�$H��H���`H��L�1����H��$�A�H��A��H�PH�B�SH��$�H�H��H�$1�H��跏��H��$��H�=f)H�PH�BH��$��.��S�H��I��H�A�H��H�$1�H���e���H��$�A�	H��A��,H�PH�B�SH��$�H�H��H�$1�H���!���H��$�A�H��A��,H�PH�B�SH��$�H�H��H�$1�H���ݎ��E1ɹ�H��H��$�A�H�PH�B�SH��$�H�H�$H��jH��j�:���E1ɹ�H��H��$�A�H�PH�BH��$�XH�Z�SH�$H��jH��j���H��$�M��H��A�H�PH�B�SH��$�H�Y^�GH��H�$1�H������H��$��H��A�H�PH�B�SA�F(I�D$L�`H�L��$�H�$H��H���`H��L�1�輍��H��$�A�H��A��H�PH�B�SH��$�H�H��H�$1�H���x���H��$��H�=�c)H�PH�BH��$����S�H��I��H�A�H��H�$1�H���&���H��$�A�	H��A��,H�PH�B�SH��$�H�H��H�$1�H�����H��$�A�H��A��,H�PH�B�SH��$�H�H��H�$1�H��螌��E1ɹ�H��H��$�A�H�PH�B�SH��$�H�H�$H��jH��j���A��,H��$�H�PH�B�SH��$�H�_AXH��A�H��H�$1�H������H��$�A�H��A��,H�PH�B�SH��$�H�H��H�$1�H���Ћ��H��$�H�PH�BH��$�H��iaH���!H�l�)��H���s�H�tiaH��t�H�\$8E1�A�H��H��SH�$H��H��AWH��jA���E1ɹ�H��H��$�A�H�PH�B�SH��$�H�A[A\H�$H��jH��j貟��H��$�A�H�PH�BI�FL�pL��$�A^A_�������ff.�AWAVAUATUSH��hdH�%(H�D$X1�H����H�Ff�A��H��H�|$L�d$0H�H0H�D$)D$H�D$ H�$I��H�D$(H�����@f�H��L�d$H)D$0H�D$@�	\��H��H���[��I�vH��H��H��I��L�d$HH�D$8�?��H��j��I�VH�C�L��H��H�P0H�D$HH�EH�hH�l$HI��G��H�D$HI�GL�xH�D$8L�|$HH��tH�T$(H�BH�D$8H�PH�D$HH�D$(M�vM��tI�~�)���E��u�H�tYH�SH�$H�D$H�J0H��tH�L$H�QH�BH�D$H�PH�D$(H�AH�D$XdH3%(uH��h[]A\A]A^A_�������DH���2AWH�BAVI��AUI��ATUH��SH��H��H�$H���Z��H��H�D$�Z��M�~ I��M���@I�?H������+�����G�����H�$E1�L��H��H��A��p��1�L��H��H���PF������I�uA�UA�H��A��1H��1��A���H�SI�uM��A��HH��H�PH��H�BA�UH�C1��
���H�SH�PH�BH�CA�D$(L�|$I�uH��1�A�UA��GH��M���·��H�S1�H�PH�BA�G(I�D$L�`L�cH�EtH�}H��@�(�"<��H�@H�S�H�P�@@H�@ H�BI�V(H�CH��t�H��H���,E������I�V0H�2H��H������uH�z �1�H��H���D�����PH�E����H�MI�EA�UH�IxH����t+E1�1�H��1��ֆ��H�SI�uH�PH��H�BA�UH�C�EE1�H��1�訆��H�SH�L$M�v8H�PH�BH�AH�HH�KM���������@I�uA�UA�1�A��1H��H���I���H�SI�uM��A��HH��H�PH��H�BA�UH�C1�����H�SM�0H�PH�BH�CA�D$(M�������H�$E1�L��H��H��A�����I�W 1�H��H���C�����N���1�H��[]A\A]A^A_�D���I�7H�Qk)H��H��1�H����C����fDH�$E1�A�L��H��H���U��I�uA�UH��H���`A��H��L�1��:���H�SI�uA�H�PH��H�BA�UH�C���I�~(��������H��E1�H��1����H�SH�PH�BH�C������ff.�@AWAVAUATI��USH��XI�y(I�Y H�L$I�I0H�t$H��$�H�A�H�T$(H���L�D$�D$'D�|$'L�L$0H�|$HH�L$@H�D$8H��t{H��E1�DH�@0A��H��u�E1��fDH�[0A��H��tS�EH��L�C L��I��D�D�D)�PH�L$(H�T$H�t$ �^_��u�H��X1�[]A\A]A^A_�DE1�DH�|$8����}�H�D$0D��$��PH�H�D$H����E����H���Mc�A��D$/O�L�H�GL��P1��k���H�|$8H�WH�PH�BH�GAX�AYH��X[]A\A]A^A_�fDH�T$@H�2H��H������K��L�z(L�Z H���RI�_(Hc�A��L�LI����fL�\$8H���1�jA�L���Ղ��H�t$I��L��L�\$HH�L$(H�VM��H�PH�BH��H�F�EH�t$ �D�$�FY^�������D�t$8M��L�|$1�D�EH��M�F L��I��L��D�)�PH�T$H�t$ �ZY���O���M�v0��M��u�D�t$8�c�����EH��I��L��PL�D$PH�L$(H�T$H�t$ �A[[���'������fDE1��(L��1��ց��H�t$(H�VH�PH�BH�FH�D$0H�0�PH������DH�T$HH�t$(1�L���t?������H��A�L��1�j��t���H�t$H�VH�PH�BH�FXZ�����AWAVI��AUI��ATI��UH��SL��H��xdH�%(H�D$h1�I�H�������H��g�����f�H�t$@H��H��)D$@H�D$PH�t$X�>����tCH�T$HH�BH�RH�BH��tH�PH�D$HH��tI�UH�BH�D$HH�PH�D$XI�E�H�|$hdH3<%(�yH��x[]A\A]A^A_��A�AH�T$ f�E�yH�L$@)D$ �D$��$�H�D$0��H�T$8)D$@H�D$PH�L$XA�AA�AjAQL�L$ M��M���8���ZY���c���L�T$�D$A�BH�D$(E�zH��tI�UH�BH�D$(H�PH�D$8I�EH�D$HH������I�UH�BH�PH�D$XI�E������L��L�L$�V=��L�T$����I�NH�Q�I�׃���v@M�A�����w�H�AH�BH��tH�PA�7I�G��H��u�����H�@H���
�8�W���w�H�PH�AH�QH�HH�QH��tH�JI���D$H�@�pI�x ������L��L�L$�<�����3M�FI�@H���.���8L�T$�W���v#H�@H������Q���w�f�H�@H�������8�W���w�H�PH�@H�PH��tH�BI�@H�������8�W���vDH�@H�����Q���w�H�PH�@H�PH��tH�BI�@I�PH�BH��tH�PI�@�H��L�׋�$�I�FI�EI�@L�@M�E�D����t4H�3�SE1��'H��1�H���}��I�T$H�PH�BI�D$����1�����f��D$I�FH�@I�G(H�0@���I��I��A��A��H��L�T$D���͈��L�T$I��I�G(M��L�t
A����H�3�SL�T$L�\$H��A����Ic�A��,H��L�L1���|��L�T$L�\$I��I�EI�@L�@M�E��$�D��H��L��L�\$�C��������I�EL�\$I�GL�xI�WM�}H��u
�DH��H�BH��u�I�UA���A����L��H�����L��H���χ�������L��������I�W(H�H���sL�D�[I��D��A��"1�A�D��H����{��I�WL�xH�PI�GH�PH��tH�B�|$��E1�E������H�3�SE1��'H��1�A��H���p{��I�T$H�PH�BI�D$E9������@E1��*H��1��>{��L�\$L�T$I��I�EI�@L�@M�E�u���@L��H��L�T$L�\$����L�\$L�T$���@H�3�SE1��'H��1�H����z��I�UH�3E1��'H��H�PH��H�B�SI�E1�A�������z��I�UH�PH�BI�E���f�L��H���5��L�D�[I���}���D�H��H��H�L$苇��I�W(H�L$H�H���L�D�[I��D��E1�D��1��*H��D�\$D�T$�	z��I�WD�T$L�xD�\$H�PI�GH�PH��tH�BD��D��1�A�A��#H��D�\$D�T$�y��I�WD�T$L�xD�\$H�PI�GH�PH��tH�BD��E1�D��1��*H��D�\$D�T$�ny��I�WD�T$L�xD�\$H�PI�GH�PH���_���H�B�V���D�v ����A�C�����A�S ��L��H������L�D�[I�������P���������������f.��H��tVATI��UH��SH��H�R0�����u[]A\��H��L�C H��H��jE1�H��L���B���ZY��[]��A\����ff.�@AWAVAUATA��UH��SH��H���H�T$L��$�dH�%(H��$�1���tH�D$H�x0��1�E��H�t$`�D$XH��$�f���H�t$xH��$��D$PM��H��L��$��D$TH�D$@H�D$H)D$`H�D$p)�$�HDŽ$�H��$�)�$�HDŽ$�H��$�)�$�HDŽ$�ATH�D$HPL�L$��L�l$P�D$Y^M����A�E D$TE1�A+EH�L�tA�E��~[f.�I�E�,M��H��A�H�0�P1�H���v��I�UH�JH�PH�HH�BH�PH��tH�BA��E9}�M�uL���3��M��M���o����$����H�D$hH��tH�UH�BH�PH�D$xH�EH��$�H��tH�UH�BH�PH��$�H�EH��$�H��tH�UH�BH�PH��$�H�EE��u	HcD$T��XH��$�H��tH�UH�BH�PH��$�H�E�$H��$�dH3%(�$�RH���[]A\A]A^A_�H�|$L�LA�1��-H�7�WH��H���u��H�UH�PH�BH�EH��$�H���k����H��H�@(H�D$(H���Z���H�H�$H������+�C���H� H�|$0H����H�G H�$H�H��H�D$H�����������H��V�����I�EH�|$ H�D$�D$H�<$�D$�i7��H�|$H�G�H�D$ H�@0H�D$ H���|H�D$ H�@ H�$H�H��H�D$8H������������H��V�|����|$@�q���M��H�<$M�7��6��I9��Y���I��L;|$u�H�D$�^����D$E1��'�H��H���(2��H�D$(A��H�@0H�D$(H��tH�D$(H�P D9d$~�1�H��H����1����D;d$}R�D$D)�A�ą�~DE1�H�D$0E1��H��A���PH�H��H�$1�H����s��H�UH�PH�BH�EE9�u�H�T$0H��H�������$����h��AWf�I��AVAUATI��UH��SL��H��I�0�T$L�\$pL��$�L��$�dH�%(H��$�1�H��)D$pH��L��$�HDŽ$�����+��D�H��')Hc�H�>��L�����I�E@1�H��L��H���0������A��H��$�dH3%(��	H�Ĩ[]A\A]A^A_�L�\$(I��L�L$H�L$ ����L�L$H�|$hL�T$ L�\$(H�|$I�IL�d$0M��H�L$H�L$`H�\$ H��L�l$8M��M��L�t$@I���M�E M���+AVL��L��H��t$ L�L$ �T$�~���ZY���8���D�\$`H��H��E����H����fDM�m0M��u�H��L�d$0H�\$ M��L�l$8L�t$@H���,H����H�3H��H������+����-�,E1�H��L��L��H��臨�����_I�E$�A����fD1�L��L���#/�����+�|$uŋSH�3jH��j!E1�A���H��谅��I�T$H�PH�BI�D$^_�f.�I�E��I�E���L���8�I�E�����L��� ��I�E����L�����I�E����L��蠿��I��H�3�SM��A��H��1�H���[p��I�T$H�PH�BI�D$M��t
A���M�}�Y����I�x(tLI�@ H��u��H�@0H�@0H����H�x u�|$�%1�H��L��H����-������I�E$�A����@L���(�I�E��������H��I����������I�E���L������I�E�����L��谻��I�E�g����L�����I������L������I�E�?����L��H�����������1��=���f�H��H��H������H�t$hH��H��$�������@I�:H������$����X����Y���H�='C)L�T$�E���L�T$I��I�z �4���L��H���ɷ��L��葜H�3I�NjSH���H��1�A�A��In��I�T$1�L��H��H�PH�BH��I�D$�,��������H�3�SM��A��H��1�H���m��I�T$H�PH�BI�D$M��tA��uL��H�����H�fKaL�=fG)H��uf��L�����H�DKaH��t�SH�3jE1�j!A�H��H��H���%���I�T$H�PH�BI�D$I�E$A�X�Z����H��1��v���a�����k����Q����L�\$L�L$L�T$0�<���L�{ L�\$H��M���J���L�L$L�T$0L�d$8H�\$0H��I�IL�l$@M��M��H�L$H�L$`H�L$ H�L$\H�L$H�L$hH�L$(L�t$HM��I�E0M�E L��L��H�D$`H��H�D$hL�x �t$�t$(L�L$ �T$���AYAZ���]���D�D$\E��u
H������F�t$L��H��M���t$0L��L�L$ �T$���^_�������L$\H��H���u;H���I�E0L�h0M���K���H��M��L�d$8H�\$0L�l$@L�t$H�%���f�H��t�H�t$`H��H��$tH�T$hH��$t
�}�������뚃�����H�=>?)H��1����DH�3H��H������+����-�0H�T$xI�E$�A�H���{���I�L$H�QH�T$xH�JH��$�I�T$�W������I�����H��1�������H��1�������I�z H����M�R0L�T$���L�T$I��M���L���H�\$L��DH�H������Xu|H�{(�P���L��H���e�H�[ H��u�H�\$�H�=�,,�&���L��H���;�H�=�>)�
���L��H�D$�}���H�t$H����I�����A�����I��H�\$��4���Yu�I�z 辰��L��H�����1�1�誫��L��H�����H�C(�SH���A�L�LH��1���i��H��$�H�PH�BH��$��B���H�C(�SL�\$H��A��L�LH��1��i��H��$�L�\$H�PH�BH��$�����H�C �SL�\$H��A��%Hc@(L�L�H�C �SH���%A�Hc@(L�L�C������I�����I�z 误��L��H�����������f.�AVf�I��AUM��ATI��USH��@dH�%(H�D$81�H�l$�D$)D$H�D$ H�l$(�����Ӆ�u81�L���^&��������H�t$8dH34%(��H��@[]A\A]A^�D����H�D$E1�H��PH�D$P��ZY��tT�D$��tZH�D$H��tI�VH�BH�PH�D$(I�F��@H�D$H��E1ɺPH�D$P�L�^_��u�1��Y����E1���L��H��A��L��L��轞���������*����k���Z���fDAVAUATUSH��tsH��I��H��I��E1��f�1�L��H��A���?%��H�[0H��t1H�{0H�S u�H�H������-u�B(u�I�UH�[0A��H��u�[D��]A\A]A^�f�E1�[]D��A\A]A^ÐAWI��AVA��AUATUH��SH��H��8H�B8H�D$H�B0H��H�D$ �̓��H��H�D$(�8��H��H�D$�8��L��I���W)��H��tH�H������^��I�W 1�H��H���^$��H�D$���&E1�A�@�/I�7A�WE1��(H��1�H���Bf��H�SI�7E1�A�H��H�PH��H�BA�WjH�C�t$H�L$0�z��H�SH�PH�BH�CH�D$AYAZH-�H����I�A�WH����E����M��A��HH�|$�t�IH��1��e��H�SH�PH�BH�CA�D$(E����I�W(1�H��H���T#�����%jI�7E1�A��t$A�WH��H�L$8H����y��H�SI�7�GH�PH��H�BA�WH�C_1�H��AXL�L$A��
e��H�SH�L$H�PH�B�A(I�D$L�`L�cE���2H�D$L�`I�D$H�CI�7M��A�WA��H��E����E����H�CH��E1��'I�EL�h1�L�k�d��H�SH�PH�BH�CH��8�[]A\A]A^A_�fDI�W(1�H��H���/"������1�H��8[]A\A]A^A_�fDH���5��I�7A�WE1�I�Ź(H��1�H���d��H�SI�7M��A��JH��H�PH��H�BA�WH�C1���c��H�SH�PH�BH�CA�E(�\���E1��'H��1��c��H�SH�PH�BH�CE���}E���tI�EL�h�L�kH��8[]A\A]A^A_�@jI�7E1�A�jA�WH��H�L$H����w��H�SH�PH�BYH�C^E����jI�7E1�A��t$A�WH��H�L$8H���w��H�SH�PH�BH�CXZ����f�I�7A�WE1��'H��1�H����b��H�S1�H��H��H�PH�BI�W(H�C� �����S���I�7A�WE1��*H��1�H���}b��H�SI�7H��A�A��,H�PH��H�BA�WH�C1��Gb��H�SH�PH�BH�C����f�E1��(H��1��b��H�SI�7H�PH��H�BA�WH�C�2���fDH�x �^���I�7A�WE1��H��1�H����a��H�SH�D$	H�PH�BH�C�E���f�I�7A�WE1��*H��1�H���a��I��H�CI�D$L�`���fDI�7A�WE1��*H��1�H���[a��H�SI�7H��A�A��,H�PH��H�BA�WH�C1��%a��H�SH�PH�BH�C������fDAWI��AVAUATA��UH��SH��H��H�B H�8H������X����Y��I�7�RA�H��H�У`�H��L�1��`��H�SH�PH�BH�CI� E1��A$��I�0�I���8I�7A�WE1��(H��1�H���S`��H�SI�7H��A�A��H�PH��H�BA�WH�C1��`��H�SL��H�PH�BH�C���I�7A�WH��I��A��
1�H����_��H�SH�PH�BH�CI�G0H-�H��v2I�O A�W8H��H��M�G(��������H��1�[]A\A]A^A_�f�H���X1��H�D$E���2I�7A�W�HA�L�L$H��I�0�t�IH��1��F_��H�SH�PH�BH�CH�D$�@(E����M��tH�CI�EL�hL�kI�O A�W8H��H��M�G(�������M���I�7A�WH��E����A��,H��1�A��^��H�SL��H�PH�BH�C�I��I�7A�WH��I���A�1�H���^��H�SH�L$H�PH�BH�AH�HH�KI�7A�WE1��'H��1�H���L^�����H�P 1�H���������������D�{��I�7H�D)H��H��1�H���`���X���jI�7E1�A�I�O0A�Wj	H��H���tr��H�SI�7E1��*H��H�PH��H�BH�CX1�ZA�W�]��H�SH�PH�BH�CE���TL���$��I�7A�WH��I��A��1�H���a]��H�SH�PH�BH�CH���[]A\A]A^A_�DH���/��I�7A�WE1�I�Ź(H��1�H���]��H�SL��H�PH�BH�C���jI�7A�#PA�WA��/H��H��1���\��H�SM��H��A�H�PH�BY�I^I�7H�C1�A�WH���\��H�SH�PH�BH�CA�E(����I�7A�WE1��'H��1�H���c\��H�SH�PH�BH�C�*���fDI�7A�WE1��(H��1�H���+\��H�SH�PH�BH�C���fDA��)H��1�A��[��H�SI�7E1��*H��H�PH��H�BA�WH�C1���[��H�SL��H�PH�BH�C�P��I�7A�WH��I��A��1�H���[��H�SI�7E1�H�L$H��H�PH��H�BA�WH�AH�H1�H�K�*�S[��H�SH�PH�BH�C����fDI�7A�WA�H��A��,1�H���[��H�SI�7E1��*H��H�PH��H�BA�WH�C1���Z��H�SH�PH�BH�C�D���AWI��AVAUATUH��SD��H��L�b H�|$�L$ dH�%(H�D$x1�M����I�<$H������,����+��E���E	H�D$PE1�A�H�D$`H�$f�E��I�T$ H�D$hMc�I��H�l$)D$PfDH��tsH�H������;��4waH�pH��sQI�D$0H�H H�	H������;��4w6H�p�H��H��H����H�H����D��D$ ���D$�]DH�4$1�H��D�T$�e��I�D$0H�4$1�H��H�P �N��A�FD�T$=��JI�T$0Lc�L�b0����I�T$ H��u�E����E��A��I�T$0L�R H�J0I�H����H����D!�-����_�����q�|$�fL��1�L��H�����I�D$0E1�E1�L�`0���y���fDM���OI�T$ �}���D���I�4$H�|$H��>)H��1�A�����H������H�\$xdH3%(D����
H�Ĉ[]A\A]A^A_�fDI�z �D�����t�|$�H���E����I��E1�E1������I�uA�UH��E����H�L$XH��tI�H�OH�yH�L$hI�OH�A��%H��L�L1��W��I�WH�PH�BI�GH�$E1�E1�H�D$XH�D$hI�D$0L�`0�<���f.�I�uA�UH��E���+H�D$XH��tI�OH�AH�HH�D$hI�GO�L6A�H��1��%�2W��I�WH�PH�BI�GH�D$XH�$E1�H�D$h�����A��H��1�A���V��I�WI�uE1��*H��H�PH��H�BA�UI�G1��V��I�WH�PH�BH�T$XI�GH��tH�PH�T$XH�BH�D$hI�GA�UI�uA��jjMc�E1ɹ�H��O�D6H���j��I�WH�PH�BI�GAYAZ���f�A��H��1�A��%V��I�WI�uE1��*H��H�PH��H�BA�UI�G1��U��I�WH�PH�BH�T$XI�GH��tH�PH�T$XH�BH�D$hI�GA�UI�uA��jjMc�H��E1�O�D6H�����;j��I�WH�PH�BI�G_AX�a���I�uA�U1�A�A��H��L�T$H���TU��I�WE��L�T$H�PH�BI�G��I�uA�UA�1�A��%H��H���U��I�WL�T$1�L��H��E1�H�PH�BL��I�G����A�UI�ujj��E1�A�H��H���ai��I�WE1�H�PH�BI�GI�D$0Y^L�`0�P���fDI�uA�UA�1�A��%H��E1�H���nT��I�WE1�H�PH�BI�GI�D$0L�`0���DI�uA�UE1��*H��1�L�T$H���%T������H�E���H�M�H�Ix�	���@�K���fDH�@0H����H�H H���&���H�	�H������;��4����I�p�H�I������H�@0H�H H�	H������;��4v&fD����k���4�������I��I��L��I�pL��u(H��t�H�E���H�MH�Ix�	���@u�f�H�@0��H��tlH�H H��t�H�	H������;��4�u���I��I��L��I�pL���9����T���@E1����>���H�u�UA�H����E������A������Hc�D�T$踌����D�T$H�D$�c��L��E��E��E���H�u�UH��E��tSH�D$XH��tI�OH�AH�HH�D$hI�GMc�O�LH�|$A��%1��R��I�WH�PH�BI�G�t���H�\$A�A�1��H����Q��I�WH�uE1��*H��H�PH��H�B�UI�G1��Q��I�WH�PH�BH�T$XI�GH��tH�PH�T$XH�BH�D$hI�G�UH�uA�EjjH�H�|$(E1�H��L�D����e��I�WH�PH�BI�GXZA����H�l$I�T$ ��L��H������M�d$0M��u�A����Hc�D�T$�,���D�T$H�D$D�T$$H�D$@L�l$0L�l$D�t$I��L�|$(M��fDM�g I�<$H�����GŃ�4��H�56)Hc�H�>��L��褩��@H�D$@I�G0L�` I�<$H�����GŃ�4�vH�5�)Hc�H�>��L���c����L��L��H�D$H���I�G0L�x0���b���M��D�t$D�T$$L�|$(L�l$0H�D$H��� ��H����H��D�T$H��?H�H�脮D�T$H��H�D$H��� ��H��H��H��H�ƃ�H��D�T$�}���H���e���H��H���ڼ��E��A�UD�T$�'I�uH��E���vH�D$XH��tI�OH�AH�HH�D$hI�GMc�A��%1�O�LH���+O��I�WH�PH�BI�GH�$I�uH�D$XA�UH�D$hH��A��H��1�A���N��I�WI�uE1��*H��H�PH��H�BA�UI�G1��N��I�WI�uI��A��H��H�PH��H�BA�UI�G1��N��I�WI�uE1�A���H��H�PH��H�BA�UI�Gjj��b��I�WH�PH�BI�GA[A^H��������H��H��E1��֨��E1��V���L���V������L���I����t���1��m�����c�����Y���L���q����L���H�E���H�EH�@x�@u�+���H�������L���6��I�$H��H�D$8H��I���.���H�|$8D��H��辁���L���������L���ĺ������L���������L��調���������L���á������H�E����H�EH�@x�@u�}���H�������L�����I�$H��H�D$8H��I��耺��H�|$8D��H�����{���L������n���L�������a���L���	���T���L������G���L���Ϙ�����1��3�����)���L��豩������E1�E1���I�EH����E���A���I��A��1�H���&L��I�WH�PH�BI�G����H�D$H�p H�x�U���H�D$H�@����A��H��1�A���K��I�WI�uE1��*H��H�PH��H�BA�UI�G1��K��I�WH�PH�BH�T$XI�GH��tH�PH�T$XH�BH�D$hI�GA�UI�uA�FjjH�E1ɹ�H��L�DH����_��I�WH�PH�BI�GXZ����E���}�A���s�D�T$��O���D�T$H�D$����L��������L������f����A��H�=�)H��1�����蛸��ff.�AV1�M��A�AUI��ATI�̹UH��SH��H�2A�	A�$A�H���J��H�SI�uH��A�A��%H�PH��H�BA�$H�C1��HJ��H�SH��H��E1��H�PH�BL��H�C�R�jI�uH��jA�$E1�A�H�����^��H�SH�PH�BH�CXZ[]A\A]A^ÐAWAVAUATUSH��HdH�%(H�D$81�H���1H��H�:H��I��H�D$0I��M��H������L�>����M���N��H�R 1�H���H��E�$I�uH��A�UA��#1�I��?H��I��?A���7I��H�SH�PH�BH�CA�$���A�M��tA�@H�\$8dH3%(D���BH��H[]A\A]A^A_�f���+�WH�L$0H��L�$�6�H�T$0A��H��t�L�B M��tI�L�$H������+��I�x ��E1��H��H�����n���fDM��tA�I�U E1�E1�L��H��H���o���I�U(A��H�H������+����-�|1�H��H�����I�uA�UA�1�A��"H��H���G��H�SH�PH�BH�T$0H�CH������A�����@A�H�J H�y �(
@A�E1��H��H�����A�����@��A�$�q���@E1��x�������I�uH��H�!)H��1�A�H������L���@M��tA�I�U E1�E1�L��H��H���O���I�U(A��H�H������+ti1�H��H������I�E H�H������+��I�uA�UE1��!H��1�H����F��H�SH�PH�BH�CH�T$0H�������A�@���H�L$0H��H�����I�uA�UH��H�|$0A��"��H��H�L�L1��oF��H�SH�PH�BH�CI�E H�H������+u�E�$I�uA�1�A�U�#H��I��?H��I��?A���F��H�SH�PH�BH�CA�$�t��A�$A���,���L��1�H�A ��H����H�H������e��H�A0H�H0H��u�L�L$E1�L�D$�ƕ��H�D$�ܲ��L�D$L�L$�D$,H�$M���_��D$,Mc�H�|$L��L�L$ K�TL�D$A��L�\$����L�\$H�<$�L����r��I�F0L�D$L�L$ L�p0M����I�v H��L�L$L�D$�	��H�|$H��I������L�D$L�L$H���h���H��L�L$L�D$覍��H�<$1�Hc��hr��L�L$L�D$�>���f��B(�z���H�T$0����@H�I0H�y0����A�$����I��I�MM��L��H��H���������H�L$0H��H�����I�uA�UH��H�|$0A����H��H�L�L1��D��H�SH�PH�BH�C���f.�M���^���A��ǃ�@A�>��� 
@A��=���fDI�@0H�x0�3���A�$�(���I��I�MM��L��H��H���������Hc|$,��E1�L�L$L�D$I���L�L$L�D$�D$H�H�@H�L$D�0I��,L��H��H��L�D$���L�D$A��I�@0L�@0M��tSI�@0H�<$Ic�L�D$L�h �6����L�D$H��t�H�L$HcD$H��I�p L�4������D$1�L�D$I��A�����H�I0H�y0���������z���f.�AWAVAUI��ATI��UH��SH��H��XdH�%(H�D$H1��D$H���L�
I��A��A��O��A��M��A��N��A�A��L�tA��O�M��H�L$I��H��L��L���)���H�H�D�UD9t$t��t���UH�\$HdH3%(�7H��X[]A\A]A^A_�f.�L�Z M����H�C(H�H������0��8wgH����#�H��H����H��(�I�r �4f.�H��H��H����L��tH�@ H�H������0��8v��D$A�A��O�����f�L�|$ H�D$0)D$ L�|$8�C0��I�T$H���H�A�@ ��D���H�C H�x �H�7H������L���M E1�I9�t �H���A��H�QH;��u�H��H�KE��L��L��H�D$�^~��D9t$�UH�D$�c����i���fDA��#���D�MH�S(1�L��L��L�D$����L���n�L�D$��tH�D$(�8��H�S M��H�L$I��L��L���
���H�T$(H�H�DH������I�MH�QH�JH�T$8I�U���fDI��I�C H�H������+�����D$L9�����D�t$�[����I���D$��I��I�S H�H������Nt��Lu�H�B H�H������+u�I�S(H�H������-u�H�z(u�L�R ��D$H����#H�M���`���f.�I�B H����M�R0I�B H�H������0��8wBI��I��L��I��t/�fDH�@ H�H������0��8wI��I��L��I��u|H��u��D$���f.��x�_����@�S���f.�I��I��I���^���I��t�H�@ H�H������0��8v��D$����f�M�R0M�������d���I�H������M�~�����N�e�����L�?�������H�W H�L$M��L��I��L�����I�T$H�H�DH�������m���ff.�f�AWf�AVAUATUSH��dH�%(H��$�1�L�l$`H�G)D$`H�D$pL�l$x�D$TH�D$XH����H��H�W�L$HI��D�D$LH�J(H�t$ H�B(H�L$A��)��H���1�L�wH�|$I�N8H�L$@I9�tH�����H�BH;��u�A�F�D$����H�CE1�H�$H��L��I��DD���A��L��L��H�$L��E)�A���ez��D9{�L��I��H��A�F ��A�V���tyA�N���[H�C�,$H�D$1���H��L��I��f.�B�T=D�$L��L��D���H�L$��A)�L����y��9k�L��I�މ�,$A�VD�H���D$����=���\��o� ��H�|$���D$T��
���|$L*D‰D$TH�3�S�E1�L��1�H���o;��H�L$ H�QH�PH�BH�T$hH�AH��tH�PH�T$hH�BH�D$xH�AE1�L�D$X�L$TL��H�|$�T$A��1��G��I������H�3�SH���� uqH���BL��1��t$A����:��H�|$0H�WH�PH�BH�GZY�D$H��uqH��$�dH3%(���H�Ę[]A\A]A^A_�DH���CL��1��t$A���f:��H�L$0H�QH�PH�BH�A^_�D$H��t�H�3�S�'E1�L��1�H���+:��H�L$ H�QH�PH�BH�A�Y����H�S H�L$TL�D$X1�L���X���H���6���H��趂���D$�D$T��B��B�����H�|$��f�I�D$H���H�x�[�����fDH�CA��H��L��H��E���L��E+F H�$�Yw��E�NH�3L��SA��#1�I��<H��I��?A���99��H�T$x�L$TH�PH�BA�VH�D$xA�F ���D$����C���A�F(�D$4A�F$�����|$4���?A�Ǎ�D$(H��L��I��D���A��L��L��H�$L��E)�A���v��D;|$(u�L��I��H��HcD$4L�LH�3�SA�L��"1�H���t8��H�T$x�L$TH�PH�BH�D$xA�F������H�3�SA�L��A���D$A���H���$1��8��H�T$xH�PH�BH�D$xA�F �TH�3�SA�L��A��%1�H����7��H�T$xH�PH�BH�D$xH�CE1�A�H�D$(H�D$@D�E����L�l$8L�l$@�l$4D���I�EHc�H�|$��L�<�L���e���D�4$L��A)�����H�3�S�I��A�L��1�H���D7��H�T$xE��L��D�L$4H�L$(H�PH�t$8H�BH��H�D$x�u��A9m�{����D-H�L�D�SH�3jE1�j��L��H���K��H��$��L$d@H�PH�BH��$�AXAY����f�E���H�|$���L$T D�$�~���D�$H�KA��H��L��L��A)��bt������DA�F(�D$4A�F$A�NjD$4H�KH�L$B�8�$��~IH��L��I���D���A��L��L��H�L$L��E)�A���s��D9<$u�L��I��A�VH�Ë$�D$���&���f.�H�D$@H�KA��H��E���L��L��D+@�s���D$�L$T@���@H�D$@H�KA��H��E���L��L��D+@�ss��H��aH��u L�53�)�L���C���H��aH��t�SH�3jE1�jA�H��L��H����I��H��$�H�PH�BH��$�A[A^�O���@
�D$T�w���f��@���E1����D�|$����H�3�SE1��$L��1�H����4��H�T$xH�PH�BH�D$x�D$T����A��	����g����AWI��AVA��AUATUH��SH��H��8H�2dH�%(H�D$(1�H�B(�D$$H�D$���BL����H��tH�H������^�BI�W 1�H��H��E1������I�W0H�H������,�H�L$$E1�H��H���D�I��H����L���|��I�7A�WH��H�D$��A��)H�H��L�L1��3��Dd$$I�7E1�H�SD�d$$M��H��A���H����H�PH�BA�WH�CK�D$jP�G��H�SH�PH�BH�CH�D$AYAZH-�H���(I�W81�H��H�������jI�7E1�A�jA�WH��H�L$H���G��H�SH�PH�BYH�C^E����I��L$$A�WH������m��@�����CA��"H��1�A��2��H�SH�PH�BH�Cj�D$,E1�M��I�7A�W��H�DPH��H���F��H�SI�7E1��'H��H�PH��H�BH�CX1�ZA�W�'2��H�SH�PH�BH�C���DH������H��I������I�7A�WE1�H�D$�(1�H��H����1��I�7H�SM��A��HH��H�PH�|$�H�BA�WH�Ct�IH��1��1��H�SI�7E1��'H��H�PH��H�BA�WH�C1�A�D$(�]1��H�S1�H��H��H�PH�BI�W8H�C����up�1�H�|$(dH3<%(��H��8[]A\A]A^A_��RH��E1��1���0��H�SH�PH�BH�C���DA����D�L$I�A�W��H��Hcɉ�H�|	H�|$E���V�D$$��2����A��"H��1�A��n0��H�SI�7E1�M��H�PH��H�BA�WjH�C�D$,H�DP��H����D��H�SI�7�'H�PH��H�BA�WH�C_1�H��AXE1��0��H�SI�7H��L�l$A��GH�PH��H�BA�WM��H�C1���/��H�SH�PH�BA�E(I�D$L�`L�cE���I�7A�W�.H��L�L$A�1�H���/��H�SH�L$H�PH�BH�AH�H�H�K�+���f�H�L	jE1�M�EQ��������D$I�7A�H��A�W�-��H��H�L�L1��/��H�SH�PH�BH�C����DH�x �����I�7A�WE1��H��1�A�H���.��H�SH�PH�BH�C���DI�7A�WA�H��L�L$�-1�H���{.��H�SH�PH�BH�C���fDH�DjE1�M�EP����@I��A��-1�H���0.��H�SI�7H�PH��H�BA�WH�C�r���A��,H��1�A��-��H�SH�PH�BH�C�D$%�I�7A�WE1��*H��1�H���-��H�SI�7H��A�A��"H�PH��H�BA�WH�C1��-��H�SI�7H��A�A��-H�PH��H�BA�WH�C1��Q-��H�SI�7E1��'H��H�PH��H�BA�WH�C1��$-��H�SH�PH�BH�C����E1��*H��1��,��H�SI�7H��A�A��#H�PH��H�BA�WH�C1��,��H�SI�7E1��*H��H�PH��H�BA�WH�C1��,��H�SI�7�L$$H�PH��H�BA�WH�C���E1��*H��1��V,��H�SI�7H��A�A��#H�PH��H�BA�WH�C1�� ,��H�SI�7E1��*H��H�PH��H�BA�WH�C1���+��H�SI�7�L$$H�PH��H�BA�WH�C� ���I�7A�WA�H��A��#1�H���+��H�S�L$$H�PH�BH�C����P���AWf�AVI��AUM��ATA��UH��H��SH��H�����$D�L$$L��$��$�L$dH�%(H��$�1�H�D$p)D$pHDŽ$�H�D$H��$�)�$�HDŽ$�L��$��G��D$LH�D$H�D$XH�E�ʽ��H�EH�t$H�D$`H�D$x�L$H�x(H���H�@(H��$�H�|$(L��$�HDŽ$������aH�D$A�A��'t0L���D�H�L$LL��H��L�D$XH����E1�I��H����H�D$xH��tH�SH�BH�PH��$�H�CH��$�H��tH�SH�BH�PH��$�H�C�D$LA��&t	A��'u
�����D$LI�}��A�U��BH������B��H�D�t$XH��M��PL�L$8H�L$�>��H�SH�PH�BH�C^_H�T$H��t!H��I�EM��M��PH�L$pH��H���-��ZY�D$$A�����H��$�dH3%(D���t
H���[]A\A]A^A_�f�A��(A�D$��$�4$����@����H�D$A�D$ڃ��n���I�uA�UE1��H��1�H���(��H��$�H�PH�BH��$��3���I�uA�UE1��'H��1�D�$H���f(��H�SD�$H�PH�BH�C�����������DH�|$�
��L�����H��tH�H������^�1L����H�t$1�H��H�����A���������H�D$�<$�����H�t$H�T$`M��L��M�MH���+��H�D$�[���L���X�H�H������0�d���L���=�H�L$hH�T$TH��H�p �w����>���HcD$hL��H�L�D$TH�L$8��H�L�LL�L$0��L���P�T$���H��A�H��H�L$@H�01�Q�T$ H���L�L$@�'��H��$�H�PH�BH��$�AXAY���fDE1��$H��1�L�$��&��H�SI�uL�$H�PH��H�BA�UH�C�D$L�����L���L$0�D�H�|$H�D$�k��A��$�L$0I��������A�D$ڃ������L�ֺ
H�=��(�L$L�$��e��L�$�L$������I��
M��L�T$�����L����1�H�|$(�L�T$H�$L��$�L�l$A��L�|$L��I���~�H�5��(H�������t>�H�5��(H�������t$�H�5��(H��������A�I�H�")L��1��L��E1�H����V��H��H���:�H���q���I��D��I��M��H�$L�l$L�|$�����1�A�I�uA�U�I��A�H��1�H���%��H�SH�PH�BH�CA����fDH�x ����I�6A�VE1��H��1�H���$��H��$��L$LH�PH�BH��$����fDH�D$H���5���H�H�D$0H������'����4�����H�D$H�@ H�D$H��aH��u5L�T$0�L$8fD�	H�=�(���H��aH��t�L�T$0�L$8H9D$�����������H�D$����I�uH�=
)H��1�H���7�E1����H�D$H�@ H�D$H�:aH��u�L�T$0�L$8@�	H�=i�(�w~��H�aH��t��k���I�ڹM��H�$H�5g�(L��L�l$������h����H�5K�(L���A��A��E��E���{�H�5��(L���A��A��E��E�����H�5��(L����������D�|$$E���ɵ��H�CH��u��H�@H�����0�V���w�H�=
)1���}��L��H�L$PL�D$hL��H��L�$L�T$�D$PH�D$h����H��I���;k��L�$A9Ct;L���)k��L�$I�6H��L�T$A��H�	)1�E�CH��L����E1����L��L�$��j��L�$����H�U;��w#H�L$TH�}L����L�$�{���L�$����H��$�H��tH�SH�BH�PH��$�H�CI�uA�UM�ٹeA�H��1�H���!��H�SH�PH�BH�CD�T$$E�������I�uA�UE1��'H��1�H���Z!���T����D$TH��A�UI�uM�ًD$\A��fH��H��H�DP1��!��H�SH�PH�BH�CA[A\�|���I�uA�UE1ɹA�H��1�H���� ��H�SL��H��H�PH�BL��H�C��A�����L��M���D�L$L�%��(L�-��(L�5��(L�=��(H�H������+��H�C0H�[ H�$H����H�H������e��H���}��H��<tGH��t�uH���H��t2D�L$D�$��lH�3H�)H��H��1�H���c��D�$�����E[��H� t<H�P�H��L�������u(H�E��H�$H���/�������DH�P�¹
H��L�������u
H�E���
H��L����������H��L��������eH�E���|���M����I�H��H������+u.I�0�I�G I��H��tgH�H�$H������e��I�$D�L$H��H�$H�����>���I�4$H�O�(H��H��1�H���"��D�L$���H�}�o������H�%�k���H�H��H�$H�������H�3H���(H��H��1�H������D�L$�2���L��D�$�{��H��<��H��D�$uD�$��jI�4$H�\)H��H��1�H���{��D�$���H��H�k�(H��D�$��1��W��D�$��H�3D�L$H��H��H��(1�H��D�$�*��D�$���y���H���H���i����|$$������X��L��H��H��H���\�����AWAVAUM��ATI��UH��SH��H��H�H��H��A��H��A��A�G�O�H���(I��Hc�H�>��M����*a��H�3�SI��H��L��A��1����H�UH�PH�BH�EH��[]A\A]A^A_�f���f���f��
�f�A�G�E�ʃ��0D�L$H��A��g�
�y��E1�D�T$H����	I�~��	I�~��	H��D�T$�E��D�T$H��t_H���3��E1�E1�L��H��H��L�����H�3�S�IM�NA�L��1�H�����H�UD�T$H�PH�BH�EI�F�@(D�T$E���~H���v��E1�L��H��A�H��L���,���H���T��D�T$H�H������$����'~	��g��H�3M�NA�L��S�I1�D�T$H���V��H�UH��H�PH�BH�EI�F�@(����H��L�0����H��H��E1�jI��I��H��A��L��D����Y^D�T$E����A�M����H���?��H���w���H�3AVA��SPH���o��SE1��1����H�UH�PH�BH�E�M���`H�3�SPA�jH��� H�S I��A��-�H��tlE1�E1�L��H��L��L�T$���M�NL�T$M���WH�3�SA�L��I1�L�T$H�����H�UL�T$H�PH�BH�EI�F�@(M�R0M����I�R H���z�����f�����fD�SE1��1�A����H�UH�PH�BH�EM���H�{ �&���H�3AVA�	�SPH���fD�SE1��1��V��H�UH�PH�BH�E�M���pPH�3L��A�j�SA��/H��1����H�UH�PH�BH�EI�D$H���H�xH��([]A\A]A^A_��DA�M����I�D$H�{ D���A�U����J���H�3AVA�I��K�D-�S�0H��P�@DH�S E1�E1�H�����M�NM����H�3�SA�L��I1�H���B��H�UH�PH�BH�EI�F�@(�M�������H�3�SA�H�������SE1��1�A�����H�UH�PH�BH�EM����H�{ �f���H�3AVA��SPH���a�H��Z`�S�A�A�L�1����H�UH�PH�BH�EM����H�{ �	���H�3AVA�#P�SH��fDA��/L��1��;��H�UH�PH�BH�EXZH��[]A\A]A^A_�f.��SE1��1�A����H�UH�PH�BH�EM���?H�{ �v���H�3AVA�
�SPH���n���fDH�y�7H�S L��E1�E1�H��L��A�����H�3M�NL��SA��I1�H���l��H�U1�H��L��H�PH�BH�S H�EI�F�@(�#��L�s(L���c������M���)L��辑��H�3AWA�#�SPH�����fD�SE1��1�����H�UH�PH�BH�E�M��� PH�31�A�H�C �SH��H�A��7��H	�H�DP�Q�����
�n���fDM���1L������H�3AWA��SPH�������H��D�T$A��M��D�T$����H���
���I��H�R �����	�.Y�����f���Y��I���o���fD��X��I������fD���X��I������fD���X�����f���X���������X��I�����fD��X��I�������A�I�F���L���0�I��I�F��@H�3�SE1��L��1�H���4��H�UD�T$H�PH�BH�EE���AA�M��� H���_��H��藏��H�3AVA�!�SPH������L����L�T$I��I�F����H�3M�NA�L��S�I1�D�T$H�����H�UH��H�PH�BH�EI�F�@(� ��1�H��L��H���@��D�T$�W�����\W��L�s(I�������FW��I���G���H�3�SE1��(L��1�H�����H�UH�PH�BH�E������W��L�s(I��������V��I������H�3�SE1��(L��1�H�����H�UH�PH�BH�E���E1��J���L��D�T$�_�D�T$I�F�$���L��D�T$�D�D�T$I�F�������D�T$H����H�H������^���H�x ����H�����ff.�f�AWE��E1�AVAUI��ATI��USH��H��XL�vdH�%(H�D$H1��j�I�}��H����H��H����1��H�D$�F���H�=Y�(I��H����I�CH�CI�CH�@PL�\$H�D$�2S��H�t$H���e���L�\$E1�H��H��A�H��L������U,L�T$����U,A�R,���A�R,I�VL�uH�UH�jI�nI�T$I9�HD�I�RL�RM�T$E��t#H�D$HdH3%(��H��X[]A\A]A^A_�H��H�D$8I�EH�t$ H���L�T$H�T$(L��H��H��H�D$@H�D$ H�T$0�I���L�T$�E(I��I�E�M,A�B(�@(H������H�CH�xt4L���}��I�D$H��a���H�CL��H�x�����.������fJ��H��>���H�SH�BH��t��u�H��H���j�����}��fDAWAVAUATI��UH��SH��H��(dH�%(H�D$1�H�z �>I��E��L�n��H�S H��E��M��H��L��H�$H�D$H�D$�`���H�|$��H�3�SE1��L��1�H���X��I�UL�hH�PI�EH�PH��tH�BH�3�SE1��*L��1�H�����H�UH�PH�BH�T$H�EH��tH�BH�PH�UH�3�SE1��'L��1�H������H�UH�PH�BH�T$H�BH�PH�$H�PH�BH�EH�|$dH3<%(�u]H��([]A\A]A^A_�H�U��f.���R��H�3�S�I��A�L��1�H���T��H�UH�PH�BH�E��
|��ff.�f�AWf�AVI��AUATI��USH��H���L$H�t$ H�l$@dH�%(H��$�1�)D$ H�D$0H�t$8)D$@H�D$PH�l$XA��9�QA��:�'A��8�uH�D$HH��tH�SH�BH�PH�D$XH�CjI�6L��E1�jA�VA���H���	"��H�SH�PH�B^H�CI�_H������9t@�D$�����H��$�dH3<%(���GH�Ę[]A\A]A^A_�@I�n0H��t�L������L��I��H�D$����GH�D$�x���H�u�UL��I��A��1�H�����H�SH�uE1��(L��H�PH��H�B�UH�C1����H�SH�uM��A��IL��H�PH��H�B�UH�C1��U��H�SH�PH�BH�CA�G(I��I�0��f�H�u�UE1��(L��1�H�����I��H�CI�EL�hL�kI�W �H��L������M�]�UE1�H�u��A�L��L�$jH��j�_ ��L�\$I��I�CH�PI�EI�UL�hI�EZYH��tL�hI�G0H���WI��I�0�I���L�k�p���I�6A�VE1��'L��1�H���S��H�SH�PH�BH�C����fDH����_��I�6A�VL��I��A��1�H���
��H�T$8I�6L��H��A�A��H�PH��H�BA�VH�D$@1�j��
��H�T$hH�PH�BH�D$hH�D$8AXAYH�������H�SH�BH�PH�D$8H�C����H�R(1��e����uA1��C���f.�H�R 1��E����t�I�V(1�H��L���0����t�H�D$(�DI�V ��f.�L9���L�|$H�u�G1��UA�L��H��M���	��H�SH�uE1�H�L$L��H�PH��H�B�UA�G(H�AH�H1�H�K�'�	��I��H�CI�EL�hL�k�L�kH�U �H��L���p��I�EH�@H�m0H��u�H�CH�|$H�GH�xH�{�����L�|$H�uf�L��H�D$`�U�GA�H�D$xH��M��1�)D$`H�D$p�	��H�T$xH�L$H�PH�BA�G(H�AH�HI�OL�yI�EI�GL�xH�D$hI�EL�h����v��f�AWAVAUATI��H��UH��SH��H��(L�z0H�L$�XF��I��H���;H��u6��TH�3H�>�(L��H��1�H������1�H��([]A\A]A^A_èt4H����H��$����u�<��D��fDH�8��H��u�L���46H�3�S�I��I��A�L��H��1�����H�UH�PH�BH�EM��t
A���:I�}�%H�E�H�D$M����fDH�L$H��tI��uH�AH�QH�BH��tH�P��H�D$�H��(�[]A\A]A^A_�D1�H�D$M��u-��fD1�H��L�����������M�0��M���{���I�W H�H������?u�H��H�T$A��V��H�T$�L��I��A��BH�2M���H��1�����H�UH�PH�BH�EM��t�A��u�L��L���ka���s���fD��8���L��L���Ka�������������f�AUATI��UH��SH��H��(dH�%(H�D$1�H�z0tvH�L$�l�����u(H�|$dH3<%(��H��([]A\A]�f�HcD$H�3�L��SA�L�LH��1�����H�UH�PH�BH�E��H���xC��H�3�S�I��I��A�L��H��1����H�UH�PH�BH�E�M���M���A���C���L��L��D$�,`���D$�+����.s��ff.�AWAVAUI��ATI��UH��S��H��(H�2D�D$H��H������,����+��H�R ����E1�H�:E��I��H��H������;��4��H�p�H��H����I�G0H����H�H H�	H������;��4��H�ƻA�DI�pM��I��M���7I�M����@��?�����T�����f.�H�U ��L��L�����H�m0H��u�A�H��(D��[]A\A]A^A_�fDI�G0��f.�1�L��L��A�����A���~MH�uMc��UA�O�L6H���|$��L��1�E1����I�T$�D$H�PH�BI�D$M�0���I�G0I�W H���{���H�H������-�h����B(�^���L��E��I��E��u�|$��E��tJH�uMcNjU�O�LA�H���|$u�"L��1����I�T$H�PH�BI�V I�D$1�L��L�����H�u�UE1��L��1�H�����I�T$H�PH�BI�D$����D�"L��1�E1����I�T$M�0H�PH�BI�D$�����M���I�W H�:�X����~��H�uL��H���(H��1�A�����H���������@E1���������RH��A�L��A��1�����I�T$H�PH�BI�D$���@H�H�������I�E���I�MI�G0�H�Ix�	���@�#�������f�H�u�U�A�A�H���i����I�E�����I�MH�Ix�	���@���H�v0��H��t4H�N H�	H������;��4��������D����fDE��������|$�����Hc��$;��H�$���JH�l$D�t$L�4$f.�I�o H�}H�����GŃ�4�%H�5&�(Hc�H�>��H���Y��H��f�L���H���M�0��u�D�t$H�<$H�l$�m��E���6H�uMcƋU�O�LA�H���|$u�"L��1����I�T$H�PH�BI�D$H�u�UA�L��L�$�1�H�����I�T$E1�L��H�u�!H�PH�B�UH��I�D$1����I�T$H�PH�BI�D$H�$H���/��'H�4$L��E1��DZ���D$����H����K��H�����H���\��H������1��������������H����S��H�����I�E�T���I�EH�@x�@u�T��H������cH�����H�UL��H�D$H��H���l��H�|$��H���"3H���J���H������H���:���H���"l��H���*���H���u��H������H���q��H���
���Hc���8��D�t$H�$I��H�l$���E1��D$���E���0���H�uMcƋU�O�LA�H���|$u�"L��1��"����a����|$����H�u�UA�L��L�$�1�H�����I�T$H�PH�BI�D$�/���E��������|$���������7��D�t$H�$I��H�l$����H���6��H������H�<$��j���n�����y��H�=�(H��1��X��f.�SH��H��H�2H��H������Yt_��Xu	H�B H��u9�RH��A�1�A������H�SH�PH�BH�C1�[�fDH��1�H���Ӻ���[�@H�@`�RH��A��L�1�����H�SH�PH�BH�C�[�ff.�ATI��UH��SH��H��H�H��H������Xt.��Y����4tp1�H���F���������[]A\�f�H�s H�������t�H�3�SL��E1�A��1�H������H�UH�{(H�PH�BH�E�A�H���SH��L��A��1�A�����H�UH�{ H�PH�BH�E�bw��H�3�SL��I��A��
1�H�����H�UH�PH�B[H�E�]A\�fD�SH��E1�1�H�ι'�g���H�UH�3L��A��H�PH��H�B�SH�EH�X>`L�1��.���H�UH�3H�PH��H�B�SH�E����ff.�@AWAVI��AUMc�ATI��UH��S��H��H�R M�~(H����H�H������;��2��H�H����M����I�H������;��2���H��H��t}����H���;��L��H���¾��H��D��H����.��I�6A�VL��I��H��A�1�H����.���H�UH�PH�BH�EH��tY��uTH��L����T���G���H��L���ӷ����uH��1�[]A\A]A^A_�fD��L��H��L��訷����tՅ�tH���[]A\A]A^A_�@I�6A�VO�L-L��A��&1�H�����H�UH�PH�BH�EH���[]A\A]A^A_�ff.�@AWI��AVAUM��ATUH��SH��H���L$L�$���H��I�7H��I��H�EA�H��H���H�PH���H�HL�t1�H���A�WM��j����H�SH��M��A�H�PH�BY�H^I�7H�C1�A�WH�����H�S1�H��H��H�PH�BI�W H�CA�D$(�[������H��1�[]A\A]A^A_�f�I�7A�WA�H��L�$�I1�H���<���H�SI�7H��A�A��H�PH��H�BA�WH�CH�$�@(1����H�SI�7M��A��H��H�PH��H�BA�WH�C1�����H�SH�PH�B�T$H�C���I�D$I�W(1�H��L�`H��L�c�q���������I�7A�WM��H��A��I1�H���f���H�SI�7H��E1�A��H�PH��H�BA�WH�C1�A�E(�.���H�SI�7M��H��A��H�PH��H�BA�WH�C1����H�SI�7M��H��A��GH�PH��H�BA�WH�C1�����H�SH�PH�BH�C�A�E(H��[]A\A]A^A_��I�7A�WM��A��GH��1�H���u���H�SH�PH�BA�E(���ff.�@AWf�M��AVI��AUI��ATL�%��(UH��SH��H��hdH�%(H�D$X1�L�L$)D$H�D$ L�L$(H�3H��H��������Y�?Ic�L�>��DE1�L9�H��H��A��L��1�������H�3�SH��M��A��I1�L�����H�UH�PH�BH�EA�G(�SH�3H��M��A��GL��1��]���H�UH�PH�BH�E�A�E(H�|$XdH3<%(�~H��h[]A\A]A^A_�H�S 1�M��H��L��L�L$�gL�L$���EH�[(�����L��L�L$(L�L$H�D$���L�L$I��L������f��S�?����M��M��H��H��L���G����������G���f.�M��M��1���fD�SH��M��A��GL��1��Q�H�UH�PH�BH�E�A�G(���f�H�S E1�L��H��L��L�L$�v��t]��H�[(L�L$����L��L�L$(H�D$���L�L$I��L������f.��H��H��L��蝱�����6���1��k���fDL�d$0f�1�H��L��L��)D$0H�D$@L�d$H�\������1���L��輦��H�L$8��tkH������������H��vDH�@H�����8�W���w�H�;�SH���x��u:H�@(H�����tLM��A��G�����DH�3�SH��H���9���H�EH�HH�L$8H�AH�D$HH�E����M��A��G���V����|`������AWf�I��AVI��AUATI��USL��H��HH�T$L�l$dH�%(H�D$81�)D$H�D$ L�l$(� ��M��H�T$H����H��HD�I��L��L��L��������u#H�t$8dH34%(��H��H[]A\A]A^A_�L���H�����t5H�D$H���5����0�V���v@H�@H��t��Q���w�xGt_�U(���t�H�D$(H�EH�hH�D$H�l$(H��tI�T$H�BH�D$H�PH�D$(I�D$��N����I���0����H�@(H;(u���� _��隄��ff.�AWAVAUATUSH��dH�%(H��$�1�H��q���L�gD�$I��H���L$HH��I�D$H�D$0I�D$H�D$8I�D$ H�D$@A�D$\�D$L���I��I�D$H��PL�{H���}��I��I�G H��L�{H���]��H��I�GH�D$ �L��H��H�D$(�?��H��H�D$�2��H�D$H��Ճ��H�CI�~0H�D$PH�D$`H�P0�@\H�T$XH�T$PH�P0�H������I�6A�VH��I��I��A�1�H���G���H�UH�PH�BA�G(H�L$I�6E1�H��A�VH�AH��H�H1�H�M���H�UE1�H��H�t$�'H�PH�BA�VH�FH�p1�H�uI�6H���o�H�UI�6M��A��GH��H�PH��H�BA�VH�E1��<�H�UH�PH�BH�EA�E(M���nI�GL�xM�|$�<$	L��H�k�+M�gH�
n�+M�~L�eHD�H�L$��A��H�L$L��H��H���ϴ��I�V(H���L�zH���JE1�L��PH��H��L�
ʧ+�.�ZI�V(H��YH�߹�h������@H�E�<$	I�V I�EL�hL�m�RH�L$(M��H��H��������H�|$(H�E�����H�t$H�GH�xH�}H���`���H�UI�~0$H�PH�BH�E��I�6A�VH��E1��1�H�����H�UH�|$ H�PH�BH�GH�x�D$HH�}���oL�t$ M��L�l$p�H�D$p	I��L��L��L�|$xHDŽ$�H��H��$�H��$�� ^��A�D$(A�L$,H��A�F(H��)���H�CH�x��H��H�$�Z��H�$H�BH������H�CH��H�x��u��L�t$L��H�D$p
L��L�|$xH��H��$�HDŽ$�H��$��x]��A�D$(H��H�D$ A�L$,�@(A�F(H�����H�CH�x��H��H�$��Y��H�$H�BH�����H�CH��H�x�*u��L�|$xH�D$pH��$�HDŽ$�H�����H�CL��H�@ H��H��$��\��A�D$(H��H�D$ A�L$,�@(H�����H�CH�P �B(H�x��H���Y��H�EH�����H�CH��H�x�qt��H����H�CH�\$0H�XH�\$8H�P0H�XH�\$@H�RH�X �\$LH�P0�X\��I�6H�#�(H��1�H��蠩��1�H��$�dH3%(��H�Ĩ[]A\A]A^A_�DL�D$(L�����I�6A�VM��A��GH��1�E1�H�����H�UH�PH�BA�E(���@L������I�������H�$��$��H��3~��H�KH��H�$H�A�0�����(���H��H��H�$�E��H�$����I�6A�VE1��'H��1�H���3�H�UH�PH�BH�E�_���fD��N$��H���}��H�SH�BH���"��������H��H���D���
�����H�$�$��H��G}��H�KH��H�$H�A������	���H��H��H�$�ID��H�$���KW��H���C���H�%H���1���H�% �AWf�AVAUATUSH��L�j(dH�%(H�D$x1�L�d$0L�t$P)D$0H�D$@L�d$H)D$PH�D$`L�t$h�D$$H�D$(H���|��H�G�L$I��H��H���xYt
I�����I�W0L��H�L$$E1�H��L�t$hL�d$HH�D$8H�D$X���I��H���}L������H��tH�H������^��I�W 1�L��H���$������D�D$1�L��	D$$�VY��I�H�D$H�|$���I�D�T$A�WH����E���iH�D$8H��tH�MH�AH�HH�D$HH�EH�D$XH��tH�MH�AH�HH�D$hH�Ej�D$,L��E1�M��H��H�DP�6���H�UH�PH�BH�EY^H�D$H��t#H��H��M��M���t$H�L$8H��H����XZI�7A�WE1��'H��1�H���:�H�UH�PH�BH�E�H�\$xdH3%(��H�Ĉ[]A\A]A^A_��1���@H��蘩��I�W0H��tH�H������^�lH������H�H������+�����H�z(��H�z H�H������nt	��?����H��tz��H�CH�x(�����H�@x������@��������������I�W 1�H��H��I���������7���I�G01�H��H��H�@0H�P ����������|$��E1�E1�1ɺ��H���i�A�WI�7M��ASA��]H��PH��1����H�UH�PH�BH�EA]A^M���O���A���E���L��H���Q@���5���@E1��H��1��v�H�UH�PH�BH�T$8H�EH��tH�PH�T$8H�BH�D$HH�EH�D$XH��tH�UH�BH�PH�D$hH�EI�7A�WH���D$$��E1��(H��1���H�UI�7H��I�����A��H�PH��H�BA�WH�E1����H�UI�7E1ɿA���H�PH��H�BA�WH�EjHcD$$H�GH��P�&���H�UI�7H�߹-H�PH��H�BA�WH�E1�AXA�AYM�N�N�H�UI�7E1��'H��H�PH��H�BA�WH�E1��!�H�UI�7H�PH��H�BA�WH�E�N����L�����H�T$(M��L��M�OL��H��I���;�H�D$�����H�x �p���I�7A�WE1��H��1�H����H�T$H�D$H�PH�BH�D$H��R���@M�NA�H��1��-�g��A���f�H�x ���������Q��I�7A�WE1��*H��1�H���.�H�UI�7H��A�A��,H�PH��H�BA�WH�E1���H�UH�PH�BH�E�����H��`�8���H��#`Hc��xHo#`�fD��AU��ATUSH������H��#`L�%B#`H��L����;H��L��	H��H���6k��L9�u�H��H��[]A\A]�8��ff.�@��H��tATL�%���U1�S�OH��@��H�B@H9�r=�sH9�r5H�DH�x(t�x1�H�p(L��蠰���K��@��H�B@H9�s��H�H��t1�K�f�[]A\�����AWAVI��AUATUH��SH��H��8L�D$L�L$HH�t$dH�%(H��$(1��k)��H���_1�H��H�D$h�5g���H�=�,H�D$`�<��H����\��H��H���L���H�=�(H�D$ �;��H���\��H��H���#���	H�=�(H�D$(��;��H���\��H�;f�HDŽ$�I��H��$�)�$�H�D$pH��$��� ��H����Hc�A��H9���t��I�F�������Hǀ�DŽ$���H�=Q�(�/;��H����[��I�NH��H��H�y������tI�F�H�H�="�(�:��H���[��I�NH��H��H�y(�̤����tI�F�H�
H�=�(�:��H���w[��I�NH��H��H�y$蔤����tI�F�H�
H�=ƺ(�:��H���?[��I�NH��H��H�y �\�����tI�F�H�H�=��(�O:��H���[��I�NH��H��H�y,�$�����tI�F�H@�H�=m�(H��$��:��H����Z��H�t$H��H������D$T��t��$��D$T�
H�=.�(��9��H���Z��H�t$H��H��解���D$X��t��$��D$X�	H�=��(�9��H���GZ��H�t$H��H���g����D$\����H��`H��u$H�ù(@�H���C9��H���`H��t�H����Y��H�|$H���b��H�D$@H����I��A��u{H�D$@H�H�D$��H��ueH�|$ ���D$ uH�D$ H�H�ƒ�H���}
H�|$ �YH�D$(H��� H�)`H�T$(H�5��(H�81��U��H�	`H�5��(H�81��T�������D]��H�sH�l$I��I�FH��DŽ$�L���1��*@��tjH�Hc�$�H��I�<ǍB��$�D9�}9H��H� uH�S H�H�<�I9�u���$�I���B��$�D9�|�H�l$���fD�H������H���fD��$��D$\�9���H�{�����H�Ã�uH�D$(H�H�ƒ�H���
H�|$(������H�=�(�S7��H���X��H��H�����H��uI�F�H��	H�=\�(�!7��H����W��H��H���N��H��uI�F�H�H�=�+��6��H���W��H��$�H��H���Ġ��I�~��tH�G8H���?��$��P�O �|���H�D$L�|$x�D$ L�|$hH��H�D$8H��$H�D$(H��$�H�D$0f�H�D$HcT$ H��� �zH����H9���H�D$8H�<��$��H��$�H��� �hH����H���AH��H�H���`H���bH9��)H;`�`��H;K�`��H;6�`��H;!�`��H;�`�e�D$H�D$
H��$�H��� �H�zH�����L���F6��H���~]��H��$�H��H� ��H�R H�RL��L��蓬��H��H��$�H� ��H��H�PL��L���h���I��H��$�H� �XH��H�P L��L���=���I��H��$�H� �H��H�x(�/���|$H�t$(���A�E$H�D$H��$H��$H��H��H��$L��H��H��$L��H��H��$ �;J��H��H��t�E(�M,A�D$(A�E(I���m��I�FH�x��H���F��H�CI��um��I�FH��H�x�a��H�D$0H��$�H��$��D$ �x����H�D$H;P�H�D$H�@ �~���H�x��H�@ H�H��`H��������H�=Ć+�3��H���ET���H�=߆+H��`�m3��H���%T���H�=��(H�µ`�M3��H���T���H�=�,H���`�-3��H����S���H�=�,H�r�`�
3��H����S���H�=i,H�J�`��2��H���S��H�.�`H�O�`H9������D$H�D$����H�@ �����H�@ ����H�@ �h����1�H���+���DH�R H�zH��������������I���k��I�VH�BH������������H��L���2������D$H�D$�e���DH�D$�D$�M���D�D$H�D$	�5���D�D$H�D$����DH�D$`L�|$xH��$�H�D$HH��� ��H����H�D$H�D$`H�=̳`H�@ H�D$�0H�|$��H��$�E1�E1��D$ H�D$(D�|$M��M��L�t$HI�FI� uI�F J����t4H��t���`���sDH��`H�5b�(H�81��pM��H�=��(���0��H���Q��H9��	H�=��(��0��H���uQ��H9��H�=u�(��0��H���SQ��H9��H�=b�(��y0��H���1Q��H9���H�=P�(��W0��H���Q��H9��3H�=@�(��50��H����P��H9��nH�=0�(��0��H����P��H9��`H�="�(���/��H���P��H9��HH�t$H��L��� ���H��$�H�PH�BH��$��(L�+L���H�����������H������D$I��L;|$�A���M��H��$�H�@ H��$�H��$�L�|$L��H�5Ȝ��H��$�L���%��L��������t
H�t$pL���oe��I�F�L$T�H�L$X����L$\��H��$(dH3%(��H��8[]A\A]A^A_��H�������A�� �yL�kIc�D�l$0I9���g��H�|$@Hct$ A�m���C��H�Ǩ���q���D$H���xH�CH� uH�C H�H�T$(H�=��`H��H�L$8�%��H�L$8����
H��$�H�#`�;D$0�z
�����T$H�t$E1�A��L���_���H��$�H�PH�BH��$��D$ �O���DH�D$HH�@H�D$�4����1�I�$tI�D$H�x@�(�Q���H��$��H�@�XH�PH�@ H�BH��$�����I�NH��$��� �2H�D$(H�@H�D$xH�D$x�D$H��H�H9��hf��� �����L�l$x�H�=��(I��H��$�I�F�HE�,$�,��H���M��I�|$H��H���͖��I�VA�D$A+$H���H�H��H�D$E���'H�D$(H�l$0H��A��L�t$ ��M��A��H�pH��H�t$8H� ��fDH�D$8H�<�@���eH��t@��uH���H���J�D$L�t$ H�l$0)Ѕ��\
Hc���T$ �Q���T$ H�D$09T$�G�t$xHc�H�l$8L�,�L�t$ ����)�H�TH�L$0H��L�$�H��H�D$(L�|$(L�|$H�HH��H�L$�[�H�D$N�4(L������I��� �#H����H����I�VH�:���K�/J�+$I��M9���H�E u�H�E �� �H�D$ H�xHclj�H9��Wd���G�I�N�D$�����A��	ЈA��H���O��H�L$ DŽ$�I��1�H����~fH�l$0L�d$hH�l$ L�|$I���L��H�E uH�U H�L��L��H�����Hc�$�I�D��A��$�9�|�L�|$H�l$0I�F�L$L�h0�H��H��	`H�T$ H�5�(H�81���F���I��A���~���H����H�����H����H�D$x������I���f��
��H�L$A�T$H��H�EA�FI9������H��A���H� �N���H�C �J���DH����	I�~I�FL�p�	��K�/N�4+M���"���A������H�|$ L���U)������I�FH��uI�V ����DH���C	I�F H�8럿�����L�%d`H�-`H��f.�G�,|I�L�����L��H���)��H���I��L��H��I��H���[��I���u�H�#�`�a���L�|$(L�t$ H�l$8H��$�H�L$H�HH�L$0H�HH��$�H��$�H�H8�0����������� �A��I�~H�G8��H��
`Hc��H���
��H��1�I�$tI�D$H��H�x@H�T$0�؁��H�T$01�H��H�D$0����T$H�t$A�苌$�L�L$0L���U���A�M�E1�H��$�H�L$hH��$�H�l$0H�PH�L$`H�BL�|$xH��$�L��$�M�uH��L����<��H�
�`I��H��$�H��$��L9���H��`�BH��`L���B�<�jH�
5�(��Hc�H�>��H�D$`H��L��L�l$0H��$�H��$�N�|�M��tA��uL��L����&��L9l$h�IM���D���N�|�L����!��I�T$9��w�H��$�@�������I�T$������I���LM����H�#`H�H��
`H9��L���N��J�D�H���i�����a���H��L���?&���Q���I����H�=��(�?&��H���F��L��H���l	���H�=��(H�D$0�&��H����F��L��H���C	���	H�={�(H�D$H��%��H���F��L��H���	���H�=\�(H��$��%��H���yF��L��H������H�T$0H�D$8I��H��t
H�����H�D$8H�D$H�D$0H��tH���_ ���D$0H��$��D$HH��tH���=���D$HE1�I���!I��� �~H����I��Ic�I9��I^��H�S`L�Ϻ�L��$�H���H���n+��L��$�I���@D�E����A�A�1�L��$�I��H��L��$�I��H��H��$�I�GL��$�M��H��$��+H��$�H�,H�����I�lH��H9�$���I� u�I�G ��N�|�L���1��I�T$9���'���H��$�@���	�	��I�T$��������L�����J�D����I��� �*H����H��H��?H�H�H���'��.H�5�(H��I���E+H�
_H��$�H�H����1�L�l$0I��H��$�H�݉��VH����H9��0���H���SL��Hc�H�t$L��L�D$8H�Ѓ�蝚��L�D$8L��H��H��L���
��H��$�H�Hc�� u�H;p����H�@ �SL���A����L��H�J�D����L��A��������H��$�J�D�����H�t$L��L������J�D�����5��H��$�I������1�L�d$0I��H��$�H�݉��3H����H9���H��H�<���6�L��H���KP��H��$�H�Hc�� u�H;p��H�@ ��N�|�L�����I�T$9������H��$�@��������I�T$��������1�H�`H�5u�(H�81��V>��H��$�H�L$H�H�����������7'���!����@���D$x1��I���H�D$`H��L��L�d$0H��$�H��$�N�|�M��tA��uL��L���(!��I�D$����.���H�D$8E1��D$0�D$H�L$0�T$HL��H�t$8A��A��A��A�����I��H��t�uH��L��� ��N�|�����H���_H�5q�(H�81��>=��I�G����L�|$xL��$���D�|$H��(1�1�L��M��D�������	�D�|$L��M��1�H���(D��������J�D��H���H�z�_H��H�5��(H�81��<��L���n2���-����%���?����%���P����%����H���_L��H�5�(H�81��p<��H��_H�5L�(H�81��X<��L��L��M��L��$�L��$�L��$����M�O���A��t!I��tfA��uQA��t$H��`H����I���H��tI�G����H��`H�����L���L��� ��I�����H���_H����H��`H�����2���$������f���1�H��trH�N��r���v��u`�����t/H���H;8tDH����H����H��H9x�t&H9�u�H���H�H��P���v���t�1��@��Ð��1�H��tRH�VH���H�R�����t9H���H;8t(H���Q�H���
H��H9x�tH9�u�1��fD��f���AWf�AVAUATUSH��hdH�%(H�D$X1�H�G)D$0)D$@H���H�D$P��I��H9����H���H����I��H�z�^� 1��~��I��H�X �@uH�X L�d$1�1�H�CH��P��H�CH�����
��1ҾI��H������L�cL�d$0�n
���(L��H��H�H�CH�C�Ù��H�;L������H��`I�T$H��I�t$�D$0YARBL�d$ H�H�D$4�lf�D$T����H�CL�pI�~�?���L��L��H�\$ H�5���I��H�D$(�@���H���c���H�C�����H�H�BH9���M�v�D$PM���qH�D$H�$I�GH�D$�1DH�D$H�<�H���N��H�4$�H�߉D$�٘��I9�tI� u�I�G ��DH�C�����H�H�BD�t$HH9���D$<I��������D$@H�JH� u|H��'�JU��foL$0H�T$	foT$@QH�D$PH�A H�CH�T$ H�T$H�L$XdH3%(��H��h[]A\A]A^A_è����H��L���]�������H�J�{����L��L�l$ �s��H�T$ H�RHc�H9���T���T$@H�Ɖ�H��轗��H�CH�H�B�$���D�D$H���H�D�_H�5��(H�81��s7���^�����-��H�"�_H�5k�(H�81��Q7�����AWAVI��AUATUSH��H�|$H��$ldH�%(H��$�1�H�GH�X H�C8H�H�KH��$@HcG �RH��D�<H�{8D�|$ ���H�{HH��D��$lI�FH�D$蓯��H�{HH��H�$胯��H�{HH��H�D$P�r���H�{HH��H��$��^���H�{HH���R���H�{HH��H�D$8�A���H�{HH��H�D$�0���H�{HH��H�D$X����H�{HH��H�D$0����H�{HH��H�D$`���H�{HH��H�D$x���H�{HH��H��$��خ��H�{HH��H��$��Į��H�{HH��H��$H谮��H�{HH��H��$蜮��H�{HH��I��荮��H�{HH��H�D$h�|���H�{HH��H�D$p�k���H�{HH��H��$��W���H�{HH��H��$��C���H�{HH��H��$��/���H�{HH��H��$�����H�{HH��H��$�����H�{HH��H��$���H�{HH��H��$�߭��H�{HH��H��$�˭��H�{HH��H�D$@躭��H�{HH��H��$8覭��H�{HH��H�D$(蕭��H�{HH��H��$0聭��H�{HH��H��$�m���H�{HH��H��$ �Y���H�{HH��H��$(�E���H�{HH��H��$��1���H�{HH��H��$�����H�{HH��H��$��	���H�{HH��H�D$H���H�{HH��H��$����H�{HH��I���լ��H�{HH��H��$����H�{HH��I��責��H�{HH��I��裬��H�{HH��H��$�菬��H�{HH��H��$��{���M��t3L��H��H��訮��H��H��t�uH�H����H��t%H����H�,�_H�5�(H�81��[3��H����I��H��H�|$L��L��$P�I
fH�=�_ffH���L��$PL��H�8H��$X�JLL�l$�$H��$pH�T$8A�}A�M��$�E���@�<$��H��A�����������	ȉ�	����������������	ȉ�	���������������	�	Љ�������	�H��A�E��A�}��@�<$����H���	�����	ȉ���
	Љ�����������	ȉ�����	Љ�����
����σ�	��	�A�E�L$A�M�L$XA�M�L$0A�M�L$`A�M �L$xA�M$��$�A�M(��$�A�M,�L$HA����L$@A���H�D$H�@H���Hǀ�Hǀ���8��H��$�H��H��$�A��I�����$���D�A���A�EX��$�IDž�A�E\��$�E���A�E`��$�E���A�Ed��$�A�Eh��$�A�El��$�A��H��$�A����D���H�D$Hǀ��D$ D��+�$���$x��H�L$H���E����H��A�D$�L��$xH��M��H��H�H�D$X�@E1�H��tI�����H��H���+���I��I!�H�{HL���	���H�{HL��H�$���H�{HL��H�D$���I�Dž��MH�$H�T$1�%�������H	�L	����T$�4$L���nH�EH��tH�{8�uH���#��莽H��H�E�H9l$Xt4H�{HL���s���I��H����.���H�EH��H�E�H9l$Xu�M��H�{H�D$ L��E1�+�$���$x�'���I��H���H��1��1�L�$$I���>�H�{HL����I��H�����I��L��L��L��H���t�H9,$��H�{HL��辧��H��t�H��H��辰��H�{HL��I��蟧��I��M��u��DHc���莋H��D�8L�hH�L$`�@A�G�L�|��H�{HL���L����H��tH��H���w���H��I�UI��M9�u�H�L$`�b���DH�D$L��H�D$0�����ž��Hc�H���z6��H��H��H��H��=�DH���H�D$1�H�H0H��$��t7L�sH�� ��L��E1��G���H��D� D+`�gH�EL�m�L$ H�t$��+�$H�n8�$�D$8H�l$@���������F���	ЈF��+�$���$x��H��H�D$�5��I��H�����D�`�L��I��K�dM�,�DH�{HL��H�����H�{HL���E��٥��H�{HL���E��ʥ���E�I9�u�H�D$H�|$�L�pp�$E1���$x�-5��H��I��N�$�H�{HL��I��耥��A�E�u�M9�u�H�D$L�t$HE1�H�hxE��~O�t$ Ic�H�{H�+�$8��I��I��A�F�I�l�I�EH��tH��H���,���I�EI��L9�u�H�D$L����D$(����|$(����IH�l$(E1�����Hc����I�ƋD$ +�$0��$xH�CH�D$8H�C0A�.H�D$@�H�{HL��D��A��H��艤��H�{HL��L�H�$�v���H�{HL���E�g���H�{HL���E�X���H�{HL���E�I���H�{HL���E�:���Hc$H�t$@�E H�|$8�H�EE;.�w���H�l$L�l$@L�d$8Hc�$L���L��L���~Hc�$ L��L��H����dHc�$(L��L��H����JH�U8H�� H��tH����B+H�H��H�B�l$P�D$ �+�$�H�$x�3��H��$�HDŽ$�I��H�D$H�L$ H�@H��$�H���H�D$HH�E�H��?�BH�D$P�D$x���Y	�D$(E1��D$PL�<$L��$�DH�{HH�4$D��A��I�,����H�
��_H�E�AH�D$0H�L$`H��H�
��_�,@�����E��D$M��<��f.�H�
um(��Hc�H�>��@H�{HH�4$�k���D��I�,�H����H��H��萤��H�EH�����D$H�
=�_A���PHc�HD$`�,@�����E��T$<�z���H�{HH�4$D��I�,������H�{HH�4$���H�t$@H�|$8H���a	D��I��H���������y���H�|$H���<��D��D��H��H�L$ ��H	��D$(�H����H�,$H�{HH���p���H�{HH��H�D$X�_���H�SH��$x�LH*H���`��$xH�H��0H���HcL$XH��H�IL�$�Hc�I�|$H��$��g����D��M�$����H�{HH�4$����H��tH��H������H�NjD$PA���A��A��D�$�hI��M���i���l$PI�D$D��M�$��F���fDH�{HH�4$�s���D��I�,�H��tH��H���l���H�E����H�{HH�4$�C���H�ŸH��tH��H���k���H���S��2H�5�(H��I���LH�
%�^L��H�H�i�L�����H�CHL��H��I�D$H�x�š��D��D��H��M�$�H�L$ D����D$(H	�M���f���A���\���H�|$L���
���J���f.�H�L$HD��I��H�AH�D$H�&���fDH�{HH�4$�S���@��J��~w@��K��A���fDA����A��H�D��H��I��I��@��A�����1�H�|$0	uA�U�I��H�����H�PH����f�@��A�E��D��H��I��I���A�����D��H�H��I��I���M���D@��T��1��G�����D$M��H��_H�L$0�
9��yD9l$x�K���H��$�D��H��L�aD�iH��?�H�D$ H�H��L�|$L���V�L��讶��H�|$h��H�t$hH���%���H����H�����H��H�D$H�pHH���4H�|$p�bH�t$pH�����H���KH����H��H�D$H�pPH����H��$pH��$xH��$XH��$p�y=H�L$H�H�AH��H����H���uH�ƒ�H��tH�T$H%����H�H�|$�C�
H��$@H�C8H��$�dH3%(�3H�Ę[]A\A]A^A_�fDH�E�����X���fD�� �OH����H����H�BH�8H��$P�z�H��$PI��H� �H��H�RH���F�H�������H���[H��$�[���������D����|$(�XH��$�H�T$ H������@H�}?�H���V�H�D$ ���@H�CH�t$ H��+�$HH0�2��H�����fDH���_H�5&�(H�81��"���H�
��H���(H���_H�5ʓ(H�81��"���H�D$H�@P���fDH�D$H�@H�h���fD�pIc̺L��轱��I��E���z�I��A�D$�M�d�@I�6�H��tH������I�I��M9�u��C�f.��Ǿ�4�H�T$H�����@������H�|$�������@������H�|$�������H�R ����H�z��H�B ���@1��x������fDH�$H�t$H�����H�����H�{8H��H�H!�H!�H	�L��H�� H	�H��H�E�I��H�CE1�H�D$8H�C0H�D$@���fDH��$�L�`�@H��$�H�|$ Hǀ� (���x���L��$x�3�H�D$H�|$�L�pp�$��$x��(��H�����fDH��L��$P�(�L��$PH����H���_H�5��(H�81��@ ��H���_L��$�H��H�5��(�T$XH�81�� ����o�����e���H���_H�5˄(H�81������X��H���_H�5F�(H�81������t$(H�=�(1����H���a���H�=�(1��s�������AVAULc�ATI��H�5$�^UH��SH��H��H�?� ��L;(��J�D�H��t
H��[]A\A]A^�1�����I��H��t�uH�H�у�H��t
H��I�I�$A�n L��H�D$I�VH�;L�����L����H�D$H��[]A\A]A^�fD1��L���e���D��UH���^H���PS1�H��(dH�%(H�D$1�����H�X �@uH�X H��H��H��H�D$诠��1�H�s0H�{����H�T$H�T$H�T$H�L$dH3%(uH��([]����D��ATH��^I��PUH��1�SH�� dH�%(H�D$1��[��H�X �@uH�X L��H��H��H��H�D$�q��1�H�s0H�{�8���H�T$H�T$H�T$H�L$dH3%(u	H�� []A\����ff.���UH�t�^H���PS1�H��(dH�%(H�D$1����H�X �@uH�X H��H��H��H�D$����H��p�xH{��H�T$H�T$H�T$H�L$dH3%(uH��([]����f���I��H�~
��H��H��H�FHdž�)����1����H���f�I�@H�FI�@H�VH�FL�F H��t4H�BPH�FPH�BXH�FXH�BhH�FhH�BxH�Fx������H�B`H�F`A���f��~�l9��H�{`(��Hc�H�>��f.�L�F0H����I�PhI�@`�AoXH�V0I�P(H�F(^8H�VHH���eH�@H�F�I�@H�Ao`H�F0f8I�@(H�FH�@I�@H�F0�fDI�@0�AohH�F0n8I�@(H�FH�m���f�I�@0H�F0�W���I�@XH�F0�G���I�@X�AopH�F0v8I�@(H�FH�%����I�@8�Ao@H�F0I�@(F8H�FHI�@0H�F(���f�I�@`�AoHH�F0N8I�@(H�FH�����I�@8�AoPHH�F(I�@@V8H�F0I�@XH�FH���f�I�@(L�F0H�������H�PH�@H�VH�F�~���f.�I�@(H�F0�g���I�@8H�F�W���AWAVAUATI��1�USH��H��H��HH��hL������dH�%(H�D$X1��N���H��L���H�x ���H���H���C7�����M��t3H��`���I�$H��`1�H����f.�L���L��(L��XL��L�5�C+�<�$H���I��H��u�O���H�mH��t>���H�uL���$�})L�E L���H���L���u���H�mH��u�H���H���lH�����P������PH�����tLE1���H���D��A��H��L�,�H���H��H�HH�qH�9���I�ED9�Pw���H���H��H�����ƃ��H�L$XdH3%(H���H��h[]A\A]A^A_�fDJ�tH)�H������I�<$H����)��H��`H��H9��m���H��pH��H�hH��0L��H��H�H9�u�H��8H)���H���H���H��4�H�����H9��w��-���Df�L���H�D$0)D$ �2	A�…���M����L��A��E)<����tU<uq�<���H�} H����H��H�v�_H�8�^��H�=K}(H������H��H��������DE��tH�uH�UH��D�$����D�$A��H�mH���n���H�,D,���I�vH�-?A,H���D�T$L�l$ HF�H��XH��H�D$�A�$L��D$�E�$L��H�$�)�$D�D$I��L��H�$��H�5��(1��ځ$E��D�T$�
L��f�L�M H�u���H�|$L�L$�Ӻ$L��A���ؿ$L��H�$輿$L�L$E��L��H�$��H�5|(1��m�$H�mH����I9�t��
L����$�@���H�uD�T$H��XL�l$ �X�$L�M L��A��L�$�U�$L��I���:�$L�$E��L���H�5�{(1�L����$H�uH�UH��荙��D�T$��u8L���,�$L��H����$H��H��H���_H�8���L��H���1�$���L��
D�$�K�$D�$E1�L��H�t$@H��H�l$HD��H�l$PH�D$@����@H�=�z(�|��A�H���F���E1Ҁ8A��A���3���H���D�$H��X���H�4%��.�$L��L�l$ A���.�$L��H����$L�
�>,��E��H��L��H�5j�(1���$D�$H���D��L��H��A��D��L��L����~$L��H����~$H��L��H���\��H��H��_H�8��H���H��H��tPL��能$L��I��舽$H��L��H������H�=�y(H�����H��H��H�����L��蠍$�����&��H����,�$L��L�l$ A���,�$L��H����$L�
�@,���� 
��AWAVM��AUATI��UH��SH��H��HH�v8H��$��L$L�L$H�D$dH�%(H��$81�H���I�~PE1틗�H��X蔷$H�߉D$XA�D$�D$\�m��H��I���m��H��H�D$(�m��f�H�D$�D$\)D$`�D$8A�D$��H�CL���M���H�D$`�T$8H�D$ �t$XE1��(H��1��]���H�U�t$XM��A��JH��H�PH�B�T$\H�E1��-���H�UH��H��L�
A@+E1�H��H�PH�BH�EA�G(AU�L$HH�T$0脜��Y^H�D$XH�L$PI��I��H�T$LI�t$pI�|$X�D$LH�D$PPAV�*sLc�XZH��-/��H�CI�|$pH�@(H�D$ H��t
f�?�WA�L$�D$L��������D$L�E1��� t���D$L�|$�T$\�t$X�"���������E1��(H��1�D�T$0�
���H�U�t$XH��I�����A��H�PH�B�T$\H�E1��ٙ��H�UE1�H��A���H�PH�BjH�Ej�T$l�t$h�G���H�UH�PH�BAXAYD�T$0H�EA�BH��T$\�t$XA�L�L�-H��1��f���H�U�t$XE1��'H��H�PH�B�T$\H�E1��<���H�U�t$XLcT$0H�PH�B�T$\H�E�D$L����B��B�:H��t$PH��M��H�DO�DPH�L$艭��H�UH�PH�B^H�E_M����I�FH�����L�\$H��L����i��H�D$H��$�I��L��$(H��L��$ HDŽ$	H��$L��$0�	��I��H�D$H��t�@(�H,H�D$�@(H���,��H�CH�x��L���o��I�FH���,��H�CL��H�x�� ��A�D$��|��D�|$�9H���,��H�CH�\$ H�X(H��$8dH3%(�<H��H[]A\A]A^A_�fD��E1��D$L�%����I�E ��M�m M�mM�����I�D$XM�l$hI�T$@H���YH�@M���<H���CL9�IB�H��t
H9�HC�I��I�~PI�t$���H��X�2�$I�~PL��H�D$ ���H��X��$H�L$ L��H�D$hH�L$`��H�L$`H��H��H�L$ H��H�
�k(�\���T$\I���/���f��T$\�t$XE1��'H��1�膖��H�UH�PH�BH�E����L�t$(�T$\�G1��t$XA�H��M���K���H�UH��H��L�
gD+A�H�PH�BH�T$`H��A�F(I�GL�xAU�L$HL�}藗��H�EI�FL�pA�D$ZYL�u���f.�I�t$����fDE1��$H��1�D�T$0蹕��H�U�t$XLcT$0H�PH�B�T$\H�E�D$L���I�������1�A��,H��A�D�T$0�`���H�U�D$LD�T$0H�PH�BH�E�`A�BD�T$0���f�L�\$pL��D�T$<L��L�\$0�f�I�~PI�D$p���H�pH��X觰$H��A���R��H����L�\$0E��H��A�H��H��L���Ub��H��$�LcT$<I��H��tD�T$0�6��LcT$0H��-)��H�CA�L$L�p(�D$L�!���DA�B�-H��D�T$0H�A�L�L1��S�������fD��~��H���(��H�SH�BH����������H��H���������H�������H��LE�����@�T$\�t$XA�1�I������H��輓��H�UE1�H��A���H�PH�BjH�Ej�T$l�t$h�*���H�UH�PH�BAZH�EA[D�T$0�,����7��E1�����ff.�@AWAVAUI��ATUSH��H��H�D�r��$�L�L$L��$�D��$��D$��D$f�����H��I��H�5gP(��Hc�E��H�>���H�E(H��f��A�HD�H�}��I�z�uA��L�d$(E1�M�ԉD$ H�EH��H��L��J�4�jI��ATjL�L$8D�D$@H�T$H�"���H�� M�L$1��t$D��A�L��I�M���H�SH�PH�BH�CI�D$�@(L9}w�fD��|$A��R�t$D��L��A��1����H�SH�PH�BH�CH��H[]A\A]A^A_��A��H�uL��$���$��D$��$�L�L$E��H��L��H��HL��[]A\A]A^A_�8����H�}���D$L�d$8E1�M�ԉD$0A���D$ A�ÉD$(H�E(H��H��L��J�4��D$0PAT�D$HPL�L$8D�D$@H�T$X����M�L$H�� M����	�t$D��A�L��I1�I�����H�SH�PH�BH�CI�D$�@(L9}�y�������������I����������fDH�uH���k���DŽ$�L��$�DŽ$�����H��H�uE��H��jE��L��ARL�T$(jL�L$8���H�� L�T$1��t$A�D��L��M�J�I����H�SH�u E��L�T$L�L$H�PH�BH�CI�B�@(DŽ$�L��$�DŽ$��-����H�}������I�z�B	A��L�d$(E1�M�ԉD$ H�E(H��H��L��J�4�jI��ATjL�L$8D�D$@H�T$H�"���H�� M�L$1��t$D��A�L��I�M���H�SH�PH�BH�CI�D$�@(L9}w�����f��
��fD����fDH�D$�UA�H�pxH�xP�c���|$I����I�EL������U����\
��ATA��0I��H�D-P�t$D��L��1�蕎��H�SH�PH�BH�CXZH��H[]A\A]A^A_�@H�EH�������f�8��0���H�x�%���A��H�@(��$��T$L�L$E��H��L��$���$�L��H�0�u���H�EPH��tf�8������t$E1�D��1��L���ߍ��H�S�|$H�PH�BH�C���PA�jfDA��/���H�}0�m���H�}@�b���H�}8�W���H�E(H������H�x�?���H�@(DŽ$�����H�upH��t
f�>����H�}��I�z�	I�z��H�uXH����D�\$(H��E��H��jL��L��ARL�T$8jL�L$8���H�� L�T$ 1��t$D��A�L��M�J�I軌��H�SL�T$ H�upD�\$(H�PH�BH�CI�B�@(H��t
f�>��H�D$H�uH�xPH��xH�|$ H�D$(H����f�>�PH�FpH��t
f�8�=D�\$8H��E��L��jE��H��L��ARL�T$HjL�L$8����H�� L�T$01��t$A�D��L��M�J�I���H�SL�T$0L�eH�t$(H�PH�|$ H�BA�T$0H�CI�B�@(��`��H��D��L��jL�D$(I��H��L���J�Y^D�\$8�U0H�t$(D�\$H�|$ �`��D�\$I��E���-�|$��L������UA�P���fD�
����fDH�}�H����H�,�H���t$E1�D��1��L�����H�S�|$H�PH�BH�C���PA�U����@H�GH���H�x�tf���t$E1�D��1��L��蛊��H�S�|$H�PH�BH�C���PA�j���DH�}��5����[���H�D$�UA�H�pxH�xP�E_���t$E1�D��H�Ź1�L������H�S�|$H�PH�BH�C�NH�����ATA�	P�8����H�D$�UA�H�pxH�xP��^���t$E1�D��H�Ź1�L��詉��H�S�|$H�PH�BH�C��H���&��ATA�P�����H�D$�UA�H�pxH�xP�e^���t$E1�D��H�Ź1�L���9���H�S�|$H�PH�BH�C�>H�����ATA�
P�X�����E�H�l����������fDH�D$�U L�T$(H�pxH�xP��]��H�uH�D$ H����L�T$(I�z��H��E��H��L��jE��L��ARL�T$@jL�L$8�+���H�� L�T$(1��t$A�D��L��M�J�I�R���H�SH�uD��L�T$(L�D$L��H�PH�BH��H�CI�B�@(�n�|$��vH�|$ ���UA�#P�G����H�u(�H�������H��E��H��L��jAR�D$(L�T$8PL�L$8�g�L�T$@H�� M�JM���2�t$D��A�L��I1�L�T$耇��H�SL�T$H�PH�B�H�CI�B�@(�6���f�1��&������Q�!H�=zp(H��1��`���6���H����L����X��I��I�D$���D�\$8H��E��H��jE��L��L��ARL�T$HjL�L$8��H�� L�T$01��t$A�D��L��M�J�I豆��H�SH�uD��L�T$0L�D$L��H�PH�BH��H�CI�B�@(��D�\$8���L�T$(�T$ �5X��L�T$(H�}�T$ I�B������%��L�T$(�T$ �X��L�T$(H�}�T$ I�B�e����D����I���'���fD����I���X���fD�����I�����fD������>���f�����I�����fD����H���x���H�up���H�}X�@���H�����f�>�����(���f.���V��H������t$D��E1��(L��1��%���H�SH�PH�BH�C����	����B����t$D��A�L��H�
�_�L�1��ۄ��H�SH�PH�BH�C���L���V��L�T$(H�uI�B�����U0H�t$(D�\$H�|$ �Y���t$D��E1�H�ŹL��1��y���H�SD�\$H�PH�BH�CE����|$A���H�����ATA�!P���L��D�\$(L�T$ ��U��L�T$ D�\$(I�B��L��D�\$(L�T$ ��U��L�T$ D�\$(I�B����D�\$(H��E��H��jL��L��ARL�T$8jL�L$8�o�H�� L�T$ 1��t$D��A�L��M�J�I薃��H�SL�T$ D�\$(H�PH�BH�CI�B�@(���L��L�T$�2U��L�T$I��I�B�����W��I������t$D��E1��(L��1��&���H�SH�PH�BH�C����AWE��AVAUATI��UH��SH��H��xL�iL�L$D��$�H�t$dH�%(H�D$h1��T��E��L�L$H�D$(H�D$ H�D$0t:H�SH�PH�BH�CH�D$hdH3%(�H��x[]A\A]A^A_��H�CH��E��E1�H��L��H��H�D$jH�D$0PAVH�t$0���H�� H�|$(�OH���S��H��I����S��1��I���ݶ���H�=�\(I��H�'���I�BH�EI�BH�@PL�T$H�D$���H�t$H�����L�T$E1�H��A�H��H��L���K��A�V,H�L$H�t$@����A�V,A�W,���A�W,H�QI�NI�VL�rL�qH�SH9�ID�I�WL�zL��H��H�D$XH�D$(L�{H�T$HL��H��H��H�D$`H�T$PH�D$@���A�F(H��H�D$(A�N,A�G(�@(H�E����H�EH�x�H��H�T$�"�H�T$H�BH�E����H�EH��H�x�w	��H�|$(�%A�T$A�4$E1�H��1�耀��I�UL�hH�PI�EH�PH��tH�BA�T$A�4$E1�H��*1��H���H�SH�PH�BH�T$0H�CH��tH�BH�PH�SA�T$A�4$E1�H��'1�����H�SH�PH�BH�T$(H�BH�PH�D$ �>���@H�D$ �,���fD�H�T$����H�E����H�MH��H�T$H�A�����������H��H��H�T$�E��H�T$����F�H�D$ H�S�����AWI��AVE��AUM��ATI��UH��SH��H��XI�wL��$�D�L$I�{PdH�%(H�D$H1�L�$���H��X赚$A�L�$�D$A�G�Q��D$H��>(f������Hc�H�>���H�T$H��I�w(H��jM��E��H������T$,�t$(XYM��A��I1�H���~��H�SH�PH�BH�CA�E(�T$�t$M��GA�H��1��P~��H�SH�PH�BH�CA�D$(H�D$HdH3%(��H��X[]A\A]A^A_��H��I�WE1�L��ASD�L$L�\$H��H���M� AXH��=(AYL�$A��Q�f������DL�t$ f�1�M��L��L��H��)D$ H�D$0L�t$8��L����0��H�L$(����H���_�������H��vfDH�@H����0�V���w�x�T$�t$��H�@(H�������M��A��G���H��L��L��E��ASI��H��L�����^_����T$�t$M��GA�H��1���|��H�SH�PH�BH�CA�E(�t���fDH��I�WM��1�ASD�L$L�\$���f��T$�t$H������H�CH�HH�L$(H�AH�D$8H�C���M��A��G�k������(��AWAVI��AUATE��UH��SH��H��XI�vL��$�H�L$L�|$ L�D$I�yPdH�%(H�D$H1����H��XL�$聗$f�H��H�D$0�D$A�F)D$ �D$L�|$8�vM��H�L$L�$I��L�D$H���M��LD�H��L��L��AQH��E���
���L���.��ZY��t@H�D$(H���O����Q���v�H�@H�����0�V���w�xG��A�E(��tWH�D$8I�EL�hL�l$8H�D$(H��tH�UH�BH�PH�D$8H�EH�D$HdH3%(umH��X[]A\A]A^A_��E��t��T$�t$E1��H��1��z��H�UH�PH�BH�E��H�����H�@(L;(t�A�E(���T�����4��]��ff.�@AWAVAUATUSH���H��$ H��$(H�D$`��$0�D$$H��$8H�D$0dH�%(H��$�1�H����H�o��L$ I���NL�L$8L�UL�]L�D$h�T$XL�T$@L�U �D$�$L�\$HL�T$P�}K��I��H�EI���M�fL���]K��H��I�D$ I���M�~L���<K��L��I�GI���-K��L��H�D$(� K��L��H�D$�K��HDŽ$�H�D$I��,��HDŽ$�I�FH�P0H��$�H��$�H�P0�D$X�b�$�t$M��A��GL��1�E1���x��H�SH�PH�BA�E(H�L$�$E1�L���t$H�AH�H1�H�K��x��H�SE1�L��H�t$�'H�PH�B�$H�FH�p1�H�s�t$�_x��H�S�t$M��A��GL��H�PH�B�$H�C1��0x��H�SH�PH�BH�CA�E(M����I�GL�xI�FL�}I�oH���H�kH��tH� ��H��H�x��f�H�D$8H��tL�D$0�H��H��L���H�C�|$ �I�EL�hL�k�`�|$ ��rH�D$(H�t$�����L��L�hI�EH�C�,��H�S�t$E1��L��H�PH�B�$H�C1��6w��H�S�|$$H�PH�BI�D$L�`L�c��I��L��HDŽ$�	L��$�H��I��HDŽ$�L��L��$�H��$�H��$��o��E(�M,H��A�D$(I�����I�FH�x�2H��H�$���H�$H�BI�����I�FH��H�x�-���H�D$L��HDŽ$�
H��L��$�H��$�HDŽ$�H��$�����E(H��H�D$�M,A�D$(�@(I��;��I�FH�x�1H��H�$�%�H�$H�BI����I�FH��H�x�|���L��$�HDŽ$�H��$�HDŽ$�I���
��I�FL��H�@ H��H��$����E(�M,H��A�D$(I���
��I�FH�P �B(H�x�)H���i�H�CI��w
��I�FH��H�x����I��d
��I�FH�L$@H�P0H�HH�L$HH�RH�HH�L$PH�P0H�H H��$�dH3%(��H���[]A\A]A^A_�L���XF���$�t$L��I��I��A�1��G�ft��H�SH�PH�BA�G(����$�t$E1��'L��1��7t��H�SH�PH�BH�C����f�I�������H�@ H�x�1���H�D$0L�=]+L�@PH�D$hL��L�D$XH�pH�P�m���|$ �H�|$hH�
9+LE�H�T$xH�D$p���L��H�T$pL��H���9��I��H�D$8H����L�D$XH�pH�PL���m��H��$�H��$�H��L�
�,+E1�L��H��$�H��AW��$���t��Y^�f���fDH��H��t$8D�L$4L�D$8H�T$pH��L����XL�kZ�}������.���I��m��I�VH�BH�������������H��L���}�������H�$���I�����I�NH��H�$H�A�����������H��L��H�$�)��H�$�����H�$蒬��I�����I�NH��H�$H�A�����������H��L��H�$����H�$�~���H��I��t$8D�L$4H�L$8����DfoD$p)�$��v������L���C��H�%L���C��H�% @AWI��AVI��AUI��ATUSH��M�`PH�v�L$L�D$I��$XA��$��L$H��dH�%(H��$�1���$fA�>�ʼn�$�A�F��$�t+A�Fu:A�f=��"nH�5'3(��Hc�H�>��f�I�~(��A�F��'I�����I�9o`t��o`���~2I�GH���H��t"H� ��H�@ H�8��D�H��@�(�T$ �$%���T$ H�@�PI�U�H�@ H�PH�BI�E�.���f�I�F0H���N���A��$�H�pH���o�$������H���p���D�D$L��L��L��H��$��{H��$�dH3%(�(�H��[]A\A]A^A_�I�GH���H�@���w�H�ਉ���DŽ$�I�~8HDŽ$H���I�H��$�1�M��M��H��$H��$�P�t$��GH��$ ��$��X^E1�I��1�L����{����$�A�L����$�I���D1��"o��I�UH�PH�BI�EI�GH���H�x�J���|$�!�I�GH���I9�����1��H�@H�����H9�u�������H�K`H��u*H�-G(f.��H���s��H��J`H��t�H�‰�L���5����h���A�FI�^H��������H�D$L�`XH���$H��H���$L��H��H���=H��H���b�I��3��I�GH�@x�@u���H�����t9H�D$I�vH�@P���H��X芉$L�������H�߉�H����H�Ë�$�E1�L��1���$���m��I�UI��L����$�A��H�PH�B��$�I�E1��jm��I�UE1�L��A��`H�PH�BI�Ejj)��$���$��ҁ��I�UH�PH�BI�E_AX�|$������$�E1�L��1���$��'��l��I�UH�PH�BI�E����A�VM�NPM��L��H��$��t$D�d$��ATAUA�vH�\�H�� ���A�VM�NPM��L��H��$��t$D�d$��ATAUA�vH� �H�� �_���M�FHM��tM�@(M�N@L��L��H��$��t$D�d$ATAUA�v(�\3H�� �����|$����A��L��1���$���$�A���k��I�UH�PH�BI�E�����|$����H�T$L��L�������$�A�L����$�I���1��k��I�UH�PH�BI�E�|���f�L��H��$�HDŽ$�)�$�H��$��$=��L��H���=��H��I��4��I�G��$�E1�L����$�H�H(H�@(I�EH�L$�H�CH�X1�I�]��j��I�UI�vPM��H��$�I�~8M��H�PH�BH��$�I�EH��$�DŽ$�HDŽ$�P�t$�
CZE1�YA��I�F8H��t�@f��A��A����$�I�~PE1�E1Ɂ���$�H���Ϥf�?�3���%B��B�g�H��$�H��tI�UH�BH�PH��$�I�EL��$�E��tI�GH���H�@�@ ���D��1�L���dv��H��A��BATI����$���$�L��1��i��I�UH��L��H�PH�BI�EA[A^��:���|$�*�I��s���I�GH�L$�H��$�H�H(H��H��L��$�H��$�H��HDŽ$�	H��H��$�H��$������C(�K,I�ăE(I�����I�GH�x�L�L���E��I�D$I����I�GL��H�x�������|$�����A�FI�^H��E���;�H�D$H�hXH���E�$H��I���J�$H��L��H���H��H����I�����I�GH�@x�@u�ѽ��H�����t9H�D$I�vH�@P���H��X�ك$L��������H�߉�H���b�H��A�F��$�I��A���$����� �֬�L��1���g��I�UH�PH�BI�E����|$�����H�T$L��L���d�����$�A�L����$�I���1��~g��I�UH�PH�BI�E�a����|$�V���H�t$L��H��h�
b��I��A�F������$���$�A�� �\��L��1��g��I�UH�PH�BI�E���A�F� �:y��i��|$����H�T$L��L��荽����$�A�L����$�I���1��f��I�UH�PH�BI�E���A�F����|$�x��7����$�A�L����$�I���1��Lf��I�UE1�L��A���H�PH�BI�Ejj��$���$��z��I�UH�PH�BI�EXZ�|$�����$�E1�L��1���$��'��e��I�UH�PH�BI�E����D$H��8(L���D$I�Gǀ�H����e7��L��H���Z7��I�~(I���d{H�D$D�d$1ۋ�$�E1�L��L����$�A����I�F8D��L��L�D$L��H�4���I�F8�1��$���$�A�L��H��f�8���H����L��1���d��I�UI��L����$�A��HH�PH�B��$�I�E1��d��I�UH�PH�BI�E�E(I;^(�-���L�d$��$�M��L��1���$�A��G�rd��I�UH�PH�BA�D$(H�EH�h1�I�mI�tI�G�(H�x@����I�vPH�@I�U��@@H�@ H�PH�BI�EH����f�L��H��$�HDŽ$�L��$�H��L��)�$�L��$�H��$�)�$�HDŽ$�jL�L$�;[AYAZE1ɋ�$���$�L��L��A��%���H��$�H��tI�UH�BH�PH��$�I�EH��$�H��tI�UH�BH�PH��$�I�EI�vXH����I��t���I�GL�D$L��L���L$H�XH�@�=�I������I�GH�X��$�E1�L��1���$��E�b��I�UI�v`H�PH�BI�D$L�`M�eH�����L�D$�L$L��L������q�H��$H�T$L��H��豼��I�F0A��$�H��H�p�}$�
H�=s:(A��I�GH�XP�ݣ��H��H�����H���:�L��E��L��A�H��H���/��H��$�H�D$H��t�y���L���3��L��I���3��L��H���3��I�vL�D$1�H��A�D$,L��L�����A�D$,�E,����E,I�EI�D$L�`M�e���I�EE1�1ɋ�$���$�L��H�EH�h1�I�m�Va��I�U�|$H�PH�BH�CH�XI�]��L��I��HDŽ$�H��I��H�D$H��$�H�D$L��$�H��$�H��H��H�D$H��$�H��$�H��H�D$P�y��A�D$(A�L$,I�ƃE(�C(I��H���I�GH�x�%�L������I�FI��u���I�GL��H�x�9�H�D$H�t$P�L��$�H��$�H�D$HDŽ$�HDŽ$�H��$������E(�M,I�ŃC(A�D$(I������I�GH�x���L���7��I�EI��p���I�GL��H�x����H�\$A�VH�sxH�{P�4��H���?��I�VL�KPM�苌$�H��L���d���|$�o���$�E1�L��1���$��'�W_��I�UH�PH�BI�E�:�H��$�M��1�L��H��L���t$D�L$ ��A[[��H��$�M��1�L��H��L���t$D�L$ �N#AYAZ���I������I�GH�@x���g���L��H��H�D$L�`x�Ef��%���f��*�ogH�D$�UH�pxH�xP�3��H�����H��H���Ӯ��H���=gI�GI��A�L����$���$�����1��8^��I�UH�PH�BI�E�|$����$�E1�L��1���$��'�]��I�UH�PH�BI�E���H��$�M��1�L��H��L���t$D�L$ �]A\��H��$�1�M��L��H��L���t$D�L$ �XZ��H��$�L��M��1�H��L���t$D�L$ �A_X�W�I�FH���#{H��t3H�l$1�I�F(L��I��L��H�4�H���v�I�FH�P�H9�w�I�V(�L$L��L�D$H�t�L���K����I�v(H��t�L$L�D$L��L���(��|$���A��#L��1���$���$�A��\��I�UH�PH�BI�E��H�D$A�VH�pxH�xP�1��H�������$�A�L����$�I���1��K\��I�U�|$H�PH�BI�E�(���$�E1�L��1���$��'�\��I�UH�PH�BI�E���L����-��L��H���-��E1��L����$���$�H��1���[��I�UH�PH�BA�VI�EH�D$H�pxH�xP�0��H���7��jA�	L��P��$�I�Ĺ/��$�A�1��h[��I�UI��L��A��IH�PH�BI�EX1�Z��$���$��0[��I�UM��L����$�A��H�PH�B��$�I�E1��C(�Z��I�U�|$H�PH�BI�E��|��$�L��I��1���$�A��H�Z��I�UI�v@1�L�D$L��H�PH�BL��E(H�CH�XI�]�����$�M��L��1���$�A���]Z��I�UH�PH�BH�EH�hI�m�8�H�D$A�VH�hPL�`xL��H���4/��H�������$�A�L����$�I���H��1���Y��I�UL�D$1�I�v@L��H�PH�BL��I�E��A�VHL��H����.��jE1�A�j!��$�H��L����$��8n��I�UH�PH�BI�EY^�|$�|��$�I��L��1���$�A���UY��I�UH�PH�BI�E�8�L���+��A�VH��H�D$H�pxH�xP�/.��H�������$�A�L����$�I��H�Ź1���X��I�U�|$H�PH�BI�E�w��$�L��I��1���$�A��I�X��I�UI�v@1�L�D$L��H�PH�BL��I�E�C(�����$�I��L��1���$�A���]X��I�UH�PH�BH�CH�XI�]�8�I�FH�D$(H���^�I��a�I�GL��H�X(H�@(H�\$(��)��L��H��H�D$X��)��H�D$PI�EH�CH�XI�]��$�L��E1�1���$���W��I�UI�~H�PH�BI�EH����fH�T$H��$H���ݱ��L����$����H��薅H��A��L��A�H��L����$��H��I��x�I�GH��$�H�X(H��t���H�\$@H��t��uH��L���ر��1�H�����D$HH��$�f�HDŽ$�H�D$8H��$�I�G)�$�H���I9�H�\$L�c�t�H�����H�BH;��u�A�D$ �*�A�T$�D$���teA�L$�L$��~XL�l$ M��L�d$81�@E���A��L��L����$���$�A)�����A�U9�|�M��T$L�l$ A�T$���t~A�D$��~o1�L�t$ L�l$0A��M��l$L�d$8f.�E���A��L��L��A�.��$�A����$�A)��r���A�EA9�|�M��L�t$ L�l$0A�T$D$���D$0��������A�D$(A�L$$�D$ �L$p�����L�t$`M��L�d$8L�l$h��A��E���A��L��L����$���$�E)�A���֔��A9�u�M��L�l$hL�t$`HcL$ A�T$�Ш�`��L$ L$p�L$I�l$8��Ӄ� ���H��$�H��tI�UH�BH�PH��$�I�ED�L$H�L$0E1�1��T$L���a��H��A�L��H�\$HI���B1�S��$���$��oT��I�UI�~H�PH�BI�E_AX��L�T$PL��L���q%��L�t$XH��$��H��$�HDŽ$�	L��H��H��$�L��H��H��$�H��$����H��M��t
A�F(A�N,H�D$P�@(I��\�I�GH�x���H������H�CI����I�GH��H�x�\��I����I�GH�\$(H�X(�|$�_���$�E1�L��1���$��'�GS��I�UH�PH�BI�E�*�D�d$f�L��L��H��$�L��$�)�$H��D��H��$�L����L��$���)�$�HDŽ$�)�$�HDŽ$�)�$(H��$ H��$SH�l$I���TI���X1�ZI��L��L�����E����sH��$�H��tI�UH�BH�PH��$�I�EH��$tH�sH���&��H��$�H���&�I�UH�BH�PH��$�I�E�	��D$f�L��HDŽ$�)�$��D$pH��$�H�D$8H��$�H��$�)�$�HDŽ$�H�D$PH��$��z#��L��H�D$(�m#��f�H��$�I�G)�$�H���H�D$xH��t'H�H�\$ �� ���H��H�@H�D$xH���ލI�~8��$��D$`��$��YuE1��L��1��Q��I�UH�\$1�I�vL��H�PI��H�BL��I�E�A��I�~ �ĕ�|$`L�t$0H�1�L��$�I��H���D$XI��H�D
H�D$hH��$H��$��fDH�s H����Q�L$pH�T$8M��L������L�L$(�t$ �G1�A�D��L��I���RP��H��$�L��H�PH�BH��$�H�D$(�@(�!���T$H�t$@E1�I�Ĺ(L��1��P��M��I��L��H��$�L��H�PH�BH�SH��$�jjj�D$xPH�L$p��H��$I�D$L�`L��$H�� H�D$0A�D$(A�L$,L;p �OUH�D$0I�}PH�@0���H��XJ��H�s� k$I�}PD�c�D$ H�C���H��XH�p�j$D�D$X�D$@H�C�@�D$HE����QL��� ��L�L$hD��L��H�ŋt$ A�H��$��.H�EH�h1�H��$���N��H��$�H�PH�BH��$�I�GH���H���%���H� �RH��H�xH�s �	���H��I�}PHD�H�VH�v�H��D�D$XH��L��H��$L�
V~(A�@H��$ �D$`��$�H�t$H��$$H��$���O��YH�s _���H��I�NXI�V1��t$D�d$ L��ATAUH��$�PA�Ff����PE�N@E�FD�}�H��0����I�vH���[�L$L�D$L��L��������D�d$I�vL��L��H�\$D��I������I�v I��D��L��L�������{��A�F�a_L�L$I�vL��L��D�D$H��$��f��I��I�F�L$H����^A�F��L�L$A��I�vL��H��$�L���$����H��I�NXI�VL���t$D�d$ �ATAUH��$�PA�Ff����PE�N@E�FD�Z�H��0���I������I�GH�x ��i�xXt H�@0H��t@H�8��iH�@H��u�L���E��H��I�EH�CH�XI�]I����I�G��$�L��H�p �~��I�UI�vH�PH�BI�EH����L�D$1�L��L���_��H�L$1�L��L���͟I����I�G��$��GA���$�L��L�H1���K��I�UH�PH�BI�EI��|�I�G�����H��L��H�@�@(����I�U�|$H�PH�BI�E�i����$�E1�L��1���$���QK��I�UH�PH�BI�E�4��L��D�d$���I�vL�D$1�L��L��A��H���b��E���6j��$�I��L��1���$�A��I��J��I�UH�PH�BI�E�C(I�v L�D$��L��L���	��I�EH�CH�XI�]���A��L��1���$���$�A��{J��I�UH�\$H�PH�BH�SXI�EI�FH�xH�pH)����H��������$�A�L����$�I���1�� J��I�UH�PH�BH�SXI�EI�F H�xH�pH)��H���H�������$�A�L����$�I���1���I��I�UE1�L��A���H�PH�BI�Ejj��$���$��2^��I�UH�PH�BI�EXZ�|$�m����$�E1�L��1���$��'�UI��I�UH�PH�BI�E�8��I�F@H����VL�H(M����zH�D$I�qL�L$H�@P���H��X�d$L���D$(����L��I�����L��H�����L�L$L��L�D$f�H��$��H��L��)�$�HDŽ$�H��$�����H��$�H������D$�D$ I�F@L��$�H��$�HDŽ$�H��$�I���I�GD�D$D
D$I�~0H�P0H��$�H��$�H��$H��$�H�P0I�UI�T$L�bM�e��yL�L$E��L��L��H��$�L��薖I�EH�EH�hH��$�I�mH��tH�EH��$�H�hH��$�I�E�|$��X�|$��X��$�E1�L��1���$���gG��I�UH�PH�BH�CH�XI�]��$�E1�L��1���$��'�/G��I�UH�PH�BI�EH�T$L��$I�~@L���V���I�G�
H�=7(L�pP蝈��H��L������H���tD�L$(L��L��A�L��H���N��H��$�I��H��t�9��I��&�I�GH�P0L�rI;l$�`�H��H��$�H��H�L$PM���C��I�H�t$P�HDŽ$�H��H��$�I�FL��$�H��H��$�H��$��ƶ��I��I�H��t�@(�H,I�F�@(�C(I��a��I�GH�x�PL���#���I�D$I�����I�GL��H�x�}��M�vM���@���H��$�I�����I�GH�P0�v��A�FI�vL��L��L�D$�� f��H�1�1����H��H��	A�F��^��$�E1�L��1���$��(�$E��I�UH�L$H�PL�axH�BA�V@L��I�EH�APH��H�D$���jE1�A�S��$�H��L����$��nY��I�UI�v`1�L��H�PH�BL��I�EAYAZL�D$����H�|$A�VHL�����jE1�A�j��$�H��L����$��
Y��I�UH�PH�BI�EA[X�|$�PH�|$A�VDL���N��jE1�A�S��$�H��L����$��X��I�UH�PH�BI�EY^H��tH�EH�hI�m��$�E1�L��1���$��'��C��I�UH�PH�BI�E���H�D$A�V0H�xPH��xH��H�|$ H�D$(���I�v8H��H���iH�D$H�@P���H��X�#_$��$A�F��$I������D$�D$I�GH����<�L�����I��I�FpH��tI�UI�T$L�bM�eA�VH����{�GH�����xH���
�RM���IMI�nH���t�f�}��h���t�|$�?�H��L�D$1�L��L������H��L��I��L��ATL�D$L���L$(�+���XZ�l��A��L��1���$���$�A��KB��I�U���$�A�A�L��H�PH�B��$�I�E1��B��I�UH�\$1�I�vL��H�PI��H�BL��I�E�9��I�v 1�I��L��L���%��jE1�A�j��$���L����$��MV��I�UH�PH�BI�EA\A^�|$������$�E1�L��1���$��'�nA��I�UH�PH�BI�E�Q��I�vH���_l�L$L�D$L��L������*���|$���I�~�H�����H��A�L��H��A��H��P��$�1���$���@��I�UH�PH�BI�E[]���H��$�L��M��1�H��L���t$D�L$ �^�Y^���I�v0L�D$1�L��L�������|$��WH�D$A�VH�pxH�xP�p��H��I�����I�GH���H���{lH��$H��H���yf��u+I�WH��H�ߋ���H���H�TH��$��fH��$H��芻��H���L��S��$�I��A���$�1��?��I�UH�PH�BI�EA]A^����|$����H�D$A�VH�pxH�xP���H��I��,��I�GH���H����H��$H��H���e��u+I�WH��H�ߋ���H���H�TH��$��eH��$H��诺��H��L��A�S��$�I���
��$�1���>��I�UH�PH�BI�EA_X����L�����L��H�����A�VH��H�D$H�pxH�xP���H��I���5���E1��L����$���$�H�D$1��p>��I�UA�L��A��/H�PH�BI�E1�j�t$ ��$���$��1>��I�UI�ٹIH�PH�BI�E_1�L��AX��$�A���$��=��I�UH�PH�BI�E�C(I�����I�GL���M����iL��H��$L��L�D$ �cL�D$ ��u+I�WL��L�Nj���H���H�TH��$�GdH��$H���
L��A�P��$�1�L�L$(��$��B=��I�UH�PH�BI�EY^�|$��T��$�L��I��1���$�A��H�<��I�UI�v@1�L�D$L��H�PH�BL��E(H�CH�XI�]���I��X��I�GH���H���iiH��$L��H����b��u+I�WL��H�ߋ���H���H�TH��$�:cH��$H���L��A�P��$�1�L�L$(��$��5<��I�UH�PH�BH�EH�hI�mXZ���H�D$A�VL�`PH��xH��L��H�D$���H��H��芷��H��I�����I�GL���M����fL��H��$H��L�D$ �aL�D$ ��u+I�WH��L�Nj���H���H�TH��$�JbH��I��A�L��H��$�
P��$�1���$��G;��I�UI�v@1�L��H�PH�BL��I�EA[XL�D$�n��H�t$A�VHL�����jE1�A�j!��$�H��L����$��O��I�UH�PH�BI�EXZ�|$�$SI��_��I�GL���M���gH��$H��L����`��u+I�WH��L�狂��H���H�TH��$�7aH��I��A�L��H��$�P��$�1���$��4:��I�UH�PH�BI�EAYAZ���L������A�VH��H�D$H�pxH�xP�
��H��H��菵��I��I�����I�GL���M����dL��H��$H��L�D$�`L�D$��u+I�WH��L�Nj���H���H�TH��$�O`H��A�L��M��H��$�
P��$�1���$��L9��I�UH�PH�BI�E_AX�|$��Q��$�L��I��1���$�A��I�9��I�UI�v@1�L�D$L��H�PH�BL��I�E�C(�.��I�����I�GL���M���PeH��$H��L���^��u+I�WH��L������H���H�TH��$�K_H���M��L��H��$A�P��$�1���$��H8��I�UH�PH�BH�CH�XI�]Y^�!��H�l$A�VxH��$H�uxH�}P�
��H��I���~��H�=�(H��1�蟴��H���'���H��H��L��H�D$�$���H�D$��$�H����eA��L��L��A�H��H���6��H��$�H��H��t�!p��I�v@L�D$1�L��I�~XH��$�L������rI�vX��	�H���ccL�D$1�L��L�����L��Hc��ܲ��A��4L��I��H�DP1�U��$���$��7��I�UH�PH�BI�EAYAZH��t@��uH��L��襑���|$������$�E1�L��1���$��'�6��I�UH�PH�BI�E����D$f�L��HDŽ$�)�$���$�H�D$)�$�HDŽ$�H�@PH�D$0��$���$���$���$�H��$�H�D$8H��$�H��$�H�D$PH��$�����I�~f�H��$�I�G)�$��~[H���H��$�H��t*H�H�\$ �� ��qH��H�@H��$�H���txL���x��H��$�I��"��H�D$ $I�GH�@x�t)蘅����H�5�(H��t^H��H�D$ �ȗH�XI�~ ��|H�D$0L��$�DŽ$�HXL��$�H�D$HH�D$hDH��$�H�\$hH�|$HH�@0L�,�H�D$0I�u����P$L���D$pA�E�D$x���I�}(H�D$@��3E1�L�l$(���L�D$H�T$81�L��L������A�A���޹,L��1��z4��E1�A���H��$���L��H�PH�B��H��$�jj)��H��H��$�H�PH�BH��$�AYAZL�t$@��A��޹HL��1�I��M���4��H��$�H�PH�BH��$�H�D$(A�F(L;`(��2H�D$(H�|$HH�@8N�,�H�D$0I�u����aO$H�|$ $A�m��A�E��f=���0f=���1f��6��0H�T$L��L���,���I�ƃ�H����6f���AF�T$XH��$�ϲ��f.D$Xz7u5��$�4�'f/��z6f/�'�l6�H,�L�tf�H�|$ L���c���H����4A�E@f=��F1f=�����A�EM�uH��4��K5H�D$H�PXL��H�T$`�MS$L��H�D$X�PS$H�T$`H�t$XH����H��I��賯��I��u��I�GH�@x�@u�Ӈ��H�����t;H�D$I�uH�xP���H��X��M$L��A���П��L��D��H���bfI�Ɖ�M��A����L��1���1��H��$�H�PH�BH��$��=���H��$�M��L��1�H��L���t$D�L$ ��_AX���I�N@I�V�t$L��D�d$L��M�NpM�FXATAUH��$�P�FH�� �e���L�L$L��L��L��D�D$H��$��L�?���I�N@I�V�t$L��D�d$L��M�NpM�FXATAUH��$�P��H�� �����L$I�vL��L��L�D$�C�������|$����I�~�j����$�A�L����$�I���1��0��I�UH�PH�BI�E���M�F@L��CL��H��$��t$D�d$ATAUA�v(M�NH�H�� �\���A�F�=�|$�F���I�~(�grA��%L��1���$���$�A��0��I�UH�PH�BI�E���I�v0L�D$1�L��L���?����|$�HDH�D$A�VH�pxH�xP����H���f�����$�A�L����$�I���1��/��I�UH�PH�BI�E郿���|$�x���H�D$A�VH�pxH�xP�z��I�WH�Nj���K������H���L��I��H�DA�P��$�1���$��/��I�UH�PH�BI�EAYAZ����|$����$�E1�L��1���$�A����.��I�UH�PH�BI�E鸾��I�v(H��������L$L�D$L��L�����鑾���L$I�v(L��L��L�D$�м���s���I�v(H���Z=�L$L�D$L��L��詼���|$�F�����$�E1�L��1���$��'�..��I�UH�PH�BI�E����I�v(H����<�L$L�D$L��L���G������L�d$A�VH��$I�t$xI�|$P����L��H��L��H������H��D��$��at��H����[H��L��E��A�1�H��� ���H��$�H��H��t�f��I�v0H����RL�D$1�L��L��謻��H����H��A��6SI����$���$�L��1��)-��I�UH�PH�BI�EA[A\H��t��uH��L������|$���H��荨����$�A�L����$�I���1���,��I�UH�PH�BI�E骼��H��$�H��I�v(L��jL�L$L��D�D$ �z���AYAZ�y���H��$�M��L��1�H��L���t$D�L$ ���A]A^�J����|$�?���H�0�AFfH~�H9���hfH~�H��<��������tI��H����hA��L��1���$���$���+��I�UH�PH�BI�E龻��L�����L��H�����L��I���x���H��M��L���t$D�L$ H��L��L��H���c�I�EA��I�D$L�`1�M�e_L��AX��$�A���$��F+��I�UI��L����$�A��GH�PH�B��$�I�E1��+��I�UE1�L����$�A��H�PH�B��$��C(H�EH�h1�I�m��*��I�UH�PH�BH�CH�XI�]驺��L��L��$�q���L��H���f���L�D$I�v 1�H��I�EL��L��H�CH�XI�]轸��H�T$L��L��譄��L��D��$��}�H���eXE��L��L��A�H��L�����H��$�I��H��t�b��I�����I�G�M��L��A�L�`(L�p(jj��$���$��u>��I�UH��L��H�PH�BI�E���Y^�|$t0��$�E1�L��1���$��'�)��I�UH�PH�BI�EI������I�GH��$��L�`(H��H��L��$�H��$�H��HDŽ$�	H��H��$�H��$��Й���C(�K,I�ăE(I��/���I�GH�x��\L���=���I�D$I��!���I�GL��H�x藱��麸���|$�����I�~��`����$�A�L����$�I���1��(��I�UH�PH�BI�E�k���I�v0L�D$1�L��L��譶���|$� =H�D$A�VH�pxH�xP�L���I�WH�Nj���K������H��A�L��I��H�D�	P��$�1���$���'��I�UH�PH�BI�E_AX�ѷ��H�D$A�VH�hPL�`xL��H������H���U���I�WH��L��H��A����I�ٍHH�D����P��$�1���$��o'��I�UL��H�PH�BL��I�EY1�^I�v@L�D$藵��A�VHL��H���H���jE1�A�j!��$�L��H����$��;��I�UH�PH�BI�E_AX�|$��;I�WH��I��L��A�����HH�D����	P��$�1���$��&��I�UH�PH�BI�EXZ钶��L���b���A�VH��H�D$H�pxH�xP���H������I�WH��L��H��A����I��HH�D����P��$�1���$��+&��I�UH�PH�BI�EA\X�|$�;��$�L��I��1���$�A��H��%��I�UI�v@1�L�D$L��H�PH�BL��I�E�C(�
���I�WH��I��L��A�����HH�D����	P��$�1���$��z%��I�UH�PH�BH�CH�XI�]A[[�R���L���"���A�VH��H�D$H�pxH�xP�I���H���Ѡ��I�WH��L��H��A����I��HH�D����P��$�1���$���$��I�UH�PH�BI�EA[A\�|$�K8��$�L��I��1���$�A��I�$��I�UI�v@1�L�D$L��H�PH�BL��I�E�C(�̲��I�WH��I��L��A�����HH�D����	P��$�1���$��9$��I�UH�PH�BH�CH�XI�]AYAZ����I�vA�F�>���W�f����rH�
a�'��Hc�H�>��I������H�T$I�GL��$L��L��H�X(�~��L�����H����QA��L��L��A�H��L���!�H��$�H��H��t�\��I��ü��I�GI�WH��I��A�L��H�h(Hc���HH�D����KP��$�1���$��##��I�UH�PH�BI�EA[A\H��t@��uH��L���}���|$��<I��a���I�GH�X(�̲��I�������I�OH�y �2�yXt#H�A0H��t�H�8��1H�@H��u�L���U�H��I�EH�CH�XI�]I���I�G��$�L��H�p ���I�UL��L��H�L$H�PH�B1�I�E�uI������I�G��$��GA���$�L��L�H 1���!��I�UH�PH�BI�EI������I�G�����H��L��H�@ �@(���I�U�|$H�PH�BI�E�������$�E1�L��1���$���!��I�UH�PH�BI�E�c����|$�X���L���Z����$�A�L����$�I���1��2!��I�UH�PH�BI�E����A�vH�|$1��}����$�L��L��I����$�A��I�� ��a���ݰ���|$�Ұ��H�T$L��L���w����$�A�L����$�I���1�� ��I�UH�PH�BI�E釰��A�VI�nf���Ӄ�H���I*�Ef��R�;*f��l�1*D�d$H��L��L��L�D$D��萮��I�v H���bL�D$D��L��L���p����|$�
����Ë�$��&��$�H�A�L��L�H1�����I�UH�PH�BI�E�˯��H�L$H��$�M�ff�H��$�H���H���H��$�)�$�HDŽ$�)�$�HDŽ$�H�D$PH��$�M��t;I�|$t3L�l$L�t$P1�I�D$(M��L��L��H�4�H��肭��I9l$wـ|$�<H��$�H��tH�SH�BH�PH��$�H�CH��$�H��tH�SH�BH�PH��$�H�CH�D$H���齮���|$�����H�T$L��L���ju����$�A�L����$�I���1����I�UH�PH�BI�E�g���L���7�L��H���,��$����$�A�A�L��H��1��0��I�UI��L����$�A��IH�PH�B��$�I�E1����I�UA�v@H�|$H�PH�BA�VDI�E�C(�D	����$�L��L��I�ċ�$�H�� A��E��H�D$�Y]���|$��9��$�L��I��1���$�A��H�x��I�UI�v81�L�D$L��H�PH�BL��E(H�CH�XI�]薫��D�L$E��L��L����$���$��^��I�EH�EH�hI�m����L�d$A�VHA�v@L���k����$�L��L��H�ŋ�$�A��H��H�� A���\��I�v81�M��L��L������A�VDI�t$xI�|$P��jE1�A�j!��$�H��L����$��%1��I�UH�PH�BI�EA^X�|$�X7��$�A��A��L�$�L���(]���;���L����A�VDA�v@H�|$H�������$�L��L��I�ċ�$�A��H��I�� E���[���|$�7��$�L��I��1���$�A��I����I�UI�v81�L�D$L��H�PH�BL��I�E�C(����$�E��A��L�$�L���c\��I�EH�CH�XI�]�f���H��$H�T$L��H���u��A��$�I�v@H����6$L�����h��H���PIA��L��L��A�H��H����H��$�H��H��t�S��A��L��1���$���$�A�����I�UI��L��A��!H�PH�BI�Ejj	��$���$��@/��I�UH�PH�BI�EXZH��t��uH��L���9u���|$�f�����$�E1�L��1���$��'�N��I�UH�PH�BI�E�1����|$�&���H�D$E1�L��L����$���$�D�@p�Y�������$�E1�L��1���$������I�UL��I�v(E1�L��H�PH�BH��$�H��I�EjL�D$�o_AX��~:H�A��L����$���$�L�L1��}��I�UH�PH�BI�EjE1ɹ`A�j)��$�L����$���-��I�UH�PH�BI�EY^�|$� �����$�E1�L��1���$��'���I�UH�PH�BI�E���E1�I�v(L��L��H��$�H��jL�D$�AYAZ��~:H�A��L����$���$�L�L1����I�UH�PH�BI�EE1��|$��$���$��u%�L��1��`��I�UH�PH�BI�E�C���A�F�v8�|$�-���H�T$L��L����n��A�I��A�F��r`��8`��$���$�L��1������I�UH�PH�BI�E�ͧ��D��$�E1�L��1���$�����I�UL�D$1�I�vL��H�PH�BL��I�E�ڥ��E1��(L����$���$�1��j��I�UL��H�PH�BI�E�"�L��H����L��I����I�V jM��jI��L��L��jH��jH�t$(��I�EH�� E1���$���$��'L��I�D$L�`1�M�e����I�UE1�L����$��'H�PH�B��$�I�E1����I�U�|$H�PH�BI�E��-��$�I��L��1���$�A��G�q��I�UE1�L����$��H�PH�B��$�I�E1��E(�=��I�U�.��$�A�A�L��H�PH�B��$�H�CH�X1�I�]���I�U�|$H�PH�BI�E��,��$�I��L��1���$�A��G���I�UH�PH�B�E(H�EH�hI�m钥��I�v0L�D$1�L��L���ԣ���|$�3A�VA�vH�|$������$�L��L��I����$�A��I�� �$V���7����|$�,���A�VA�vH�|$�����$�L��L��I����$�A��I�� �T����I�GM�f(�(�U���v�^H�C��J�����"H���H��u�M���:L�D$1�L��L��L��������I��(���I�G�xXtH�@0H��tH�8��H�@H��u�H�L$�L��L��� h1�I�tI�GH�x@�(����E1��EL��H�@I�U���$�H�P�@H�@ H�B��$�I�E1�����I�UH��L��H�PH�B�����I�E���I�U�|$H�PH�BI�E�������$�E1�L��1���$�����I�UH�PH�BI�E�n���I�G��$��8�� ��$�E1�L��1���I��I�U�F��$�A�	A�L��H�PH�B��$�I�E1����I�U�|$H�PH�BI�E�����$�E1�L��1���$��'����I�UH�PH�BI�E鸢���|$�������$�E1�L��1���$�����I�UH�PH�BI�E�x����|$�m���A�F��$���$����ED�H��A�L��H�DA��P1��4��I�UH�PH�BI�EA]A^����I�G�H�����|$�������$�E1�L��1���$������I�UH�PH�BI�E�ơ��I�7�������I�OH�y ��4�yXt%H�Q0H��H��tfDH�8��LH�@H��u�L���M�I�vH��I�EH�CH�XI�]H����LL�D$1�L��L��蛟��H�L$1�L��L���	eI�����I�G��$�L��H�p �U��I�UH�PH�BI�EI��A���I�G��$��GA���$�L��L�H1�����I�UH�PH�BI�EI����I�G�����H��L��H�@�@(����I�U�|$H�PH�BI�E�q�����$�E1�L��1���$���Y��I�UH�PH�BI�E�<���L����I�vL�D$1�L��L��H���s����|$�j*��$�I��L��1���$�A��H����I�UH�PH�BI�E�C(�L$I�v L��L��L�D$����I�EH�CH�XI�]騟��H�\$I�v@1�L��L��I�����A�v1�H�������$�L��L��I����$�A��I�� �FP���Y���I�vH�����L$L�D$L��L��菝���2���L����L��H��H�D$H���I�vL�D$1�L��L��H�D$@�W����G蝊����$�A�L����$�I���1�����I�UE1�L����$��(H�PH�B��$�I�E1����I�UI��L����$�A��IH�PH�B��$�I�E1��q��I�UH�PH�BI�EI�F �C(H�D$H���RH��$�f�H�|$HDŽ$�)�$�H�D$PH��$���H�D$E1�L�t$8H�XPH��xH�D$(H�D$H�\$0H��H�D$ ��H�t$(H�|$0I��A�V���H���Y�����$�A�L����$�I���1��
��I�UE1�L��A���H�PH�BI�Ejj��$���$��!��I�UA��L��H�PH�BI�E_L��AX��$�A�؋�$��	N��E1��L����$���$�1��	
��H�t$PA��A��H��$���$�L��H�PH�B��$�H��$��M��L9d$��H�D$8H�|$H�@0N�4�A�VA�v����H��H��H�� L9d$ �������$�E1�L��1���$��(�q��I�UH�PH�BI�E���H�T$H��$L��H���f���H�=�'��$���2H���D:H��L��A��A�1�H�����H��$�H��H��t�D��I�vPL�D$1�L��L���0���E1��L����$���$�1����I�UH�PH�BI�EH���_H��u%H�-b�'D�H���kf��H���_H��t�H������jL��A�S��$�I���4��$�1��N��I�UH�PH�BI�E^_�|$��*H��� ���������H��L����e������H�T$L��L���a����$�A�L����$�I���1���
��I�UH��L��A�A��H�PH�BI�E1�j��$���$��
��I�UE1�L��A���H�PH�BI�EA[[jj��$���$����I�UH�PH�BI�E]A\�|$�9�����$�E1�L��1���$��'�!
��I�UH�PH�BI�E����L�d$A�V`H��$I�t$xI�|$P���H��H���P��H�=��'H��1�耆��H���o��L��H��L��H�D$�d��H�D$D��$�H���7H��L��E��A�L��H�����H��$�H��H��t�B��L�D$I�v@L��L��H��$��DE1��L����$���$�A��1��2	��I�UH��H�PH�BI�E躄��D��4L����I��A�Hc�H�DP1�S��$���$�����I�UH�PH�BI�EY^H��t��uH��L���}c���|$�������$�E1�L��1���$��'���I�UH�PH�BI�E�u���L���E��L��H���:��L��I���/��E1��L����$���$�H��1��<��I�UE1�L����$��H�PH�B��$�I�E1����I�UE1�L����$�A��H�PH�B��$�I�E1�����I�UE1�L����$��H�PH�B��$�I�E1����I�UE1�L����$��H�PH�B��$�I�E1��v��I�UL�D$1�I�vL��H�PH�BL��I�E蠕��E1��(L����$���$�1��0��I�UM��I��L��L��H�PH�BI�V I�EjjjjH�t$(��I�EH�� I��H�t$L��L��L��I�D$L�`M�eD�d$E���zQ��I�E�.��$���$�A�
A�L��H�EH�h1�I�m���I�UH�PH�BI�EE���y&��$�I��L��1���$�A��G�R��I�UH�PH�B�C(H�CH�XI�]�)���1�I�~H�l$��A��L��1���$���$�A����I�U���$�A�A�L��H�PH�B��$�I�E1����I�UI��1�L��H�PH�BL��I�EI�F(H�4����jE1�A�j��$���L����$��
��I�UH�PH�BI�EI�FAYAZH�P�H9��*	H��H9������|$�(�����$�E1�L��1���$��'���I�UH�PH�BI�E��I�FH��tBI�V(�\$1�L�d$H�2H��t*M���L��L������I�FH��H9�v
I�V(H�4�H��uր|$�������$���$��%L��A�L��1��z��I�UH�PH�BI�E�]���H��$�H��M����t$D�L$ L���!�A\A]�0���H��$�H����M��t$D�L$ L�����AZA[����H��$�H��M����t$D�L$ L���G�AXAY�֓��H��$�H����M��t$D�L$ L��芿[]髓��H��$�H��M��L���t$D�L$ ���_AX����H��$�H����M��t$D�L$ L���s�XZ�T���H��$�H��L����t$D�L$ M���X�A^A_�'���H��$�H����M��t$D�L$ L���˵Y^������!H�54�'H��H�;E_H�81��Az����:f��R�f��l�H�D$ $�����f=���A�EM�uH����H�D$H�PXL��H�T$`�'#$L��H�D$X�*#$H�T$`H�t$XH���h�H��I�����I��Y���I�GH�@x�@u�W��H������ ��H�D$I�uH�xP���H��X�$L���D$X�o���T$XL��H���66I������fD������q���f�������H�T$L��L���rX��I�����f.�f��3������@E1��(���L��1��z��L�D$1�L��H��$�L��H�PH�BH�T$8H��$�蛏����A�
��A��1L��1��,��H��$�H�PH�BH��$������I��H�\$@�T$xE1�L��H��$��t$p�'H�CH�X1�H��$�����H��$�H�PH�BH��$�I�GH���H����I�uPH���uL�D$��$�L��H�T$P�̎���T$x�t$pA�1�H��$��GL��I���T��H��$�H�D$hH�PH�BH��$�H�D$h�C(H��$�H;C ���L��$�I��I�vL�D$1�L��L���J���H�|$ $�ZI�EH��$�H��tH�PH�BH��$�H��$�I�N8H�CH�XI�]H����BH�A(H�\$0H�����H��XHD�H�p�6$I�V8�'L����H�B(��H��HD�E1��h1����\���I�UH�PH�BI�EI�GH���H���,I�v8L�D$��$�L��L���m�����A���L��$��GL��1�M�����I�UH�PH�BI�EA�F(H��$�H��tH�PH�BH��$�H��$�H�CH�XI�]馎��fD�cz��H�������|$����I��ݔ��I�G�p`��uL���T��H���5G���ƺ����E1��L��1��L���H��$�H�PH�BH��$�鸭���H�T$@H�|$ L��H����?���$��DH� �{H��H�xI�uP�J���H��H�D$ID�H�xPH�VH�v���D��$�L��L�
�*H��$H��$H��H��$A�X��$�H�t$`��$$����_AXI�uP��$�����fD�:��H������t$ D��E1��L��1��?���H��$�H�PH�BH��$����f��|$�����I��Ӓ��I�G�p`��uL���S��H���E���ƺ����E1��L��1�����H��$�H�PH�BH��$��;����H�@ �����;[��I������Kx��H�����H�@ �����9��H������H��I9���L��f��H��?H)�L��H��H	�H��H�D$X�~D$X�d$X������$�E1�L��1���$��'���I�UH�PH�BI�EI�F���H����H���?I�nH���j<f�}������IFX���I��#���I�GH�@x��θ���EH�]H��aH��LHH�D$L�pXH���$H��I���$L��L��H���\�H��H���x��I������I�GH�@x�@u�P��H�����t9H�D$H�uH�@P���H��X�$L�����h��H�߉�H���2/H��1�E1�E1�1ɾ�L���H���?I��L��RA�P��$$1���$ ���I�UH�PH�BI�EY^�|$�{�����$E1�L��1���$�'�c���I�UH�PH�BI�E�F���fDL��$�I��H��$�I�^8L�`I�D$H��$�H����%��$�E1�L��1���$��'���E1��'L��H��$���$�H�PH�B��$�H��$�1����H��$�H�PH�BH��$�I�GH���H��t~H� ��4H��H�xtfH�C(H��HD�H�pH�PH�D$H�xP�~�L�
��*L��H��$H��$H��H��$��$�D�D$h��$$H�t$`���XZL�D$�L$pH��L��H�T$P�P���H�\$(L��1���$�A��G��$�I������E1��L��H��$���$�H�PH�B��$�H��$�1��C(���H��$��|$H�PH�BH��$���%H��$�I�EH��tH�PH�BH��$�I�EH��$�H��tH�PH�BH��$�H�\$(H�CH�XI�]����H�\$@A�L��1���$���$��GI����I�UE1�L����$��'H�PH�B��$��C(H�\$HH�CH�X1�I�]���I�UH�PH�BH��$�I�EH��tH�PH��$�H�BH��$�H�\$@�|$H�CH�XI�]�Y�����$�E1�L��1���$��'�A���I�UH�PH�BI�E�$���L�L$f�L��L��D�D$H��$�H��$�)�$�H��$�HDŽ$�H��$�)�$�HDŽ$��PH��$�H��t4������lH���f.���S����OH�@H��u鋔$�E1�L��1���$���i���I�UH�PH�BI�EH��$�H��� ���I�UH�BH�PH��$�I�E����I�v H����)�f��R��#f��l��#H�������|$�=L�D$�L��L���.����х����0��I��4���I�OH�AH���֯����ί��H��L���^P��龯��f���t�|$�8I�vH���+6H���
�����f�>`������V�nH�|$ H�t$(�W��H��$�H��$�L��H���,������>?��$�QL��A�Hc�$����H�H�H��H�R��$ L�H��1����I�UH�PH�BI�E^_�0���H�D$Xf��j���1�A��FL����$���$�A���I�U�|$H�PH�BI�E�j�����$�E1�L��1���$��'�R�I�UH�PH�BI�E�5�����$�E1�L��1���$��*��I�U�,��$�A�A�L��H�PH�B��$�I�E1����I�UH�|$L��H�PH�BA�VDI�E����jE1�A�S��$�H��L����$��>��I�U�'H�PH�BI�E_1�L��AX��$�E1���$��k�I�UH�PH�BI�EH���J���H�EH�hI�m�9����|$��/I�~(�#���H�l$1�I�F8I��L��L��H�4�H���U���I9^(w����'L��1����I�UH�PH�BI�E�΂��H���'L��1��%���鸂���|$�����H�|$1Ҿ�������$�L��L��I����$�A��I�� �12���t���I�~0��%L�L$L��L��L��D�D$H��$��A�C�����t	���9M�����I9�t	���9L��������$�1�H��I�EH�CH�XI�]I�tI�H��@�(�x���H�@I�U�h ��H�@H�PH�BI�E�����|$�������$�E1�L��1���$����I�UH�PH�BI�E�m����|$�b���I������I�G�p`��uL���jG��H���:���ƺ����E1��L��1��)�I�UH�PH�BI�E����I��>���I�G�p`��uL���G��H���9���ƺ����E1��L��1����I�UH�PH�BI�E�e��H�D$@�D$H霙��I�G�8��!H�y��!�yXtH�A0H��tH�8�m!H�@H��u�L���6��H�L$1�L��H��I�EL��H�CH�XI�]�DI��a���I�G��$�L��H�p�]���I�UH�PH�BI�EI��#���I�G��$��GA���$�L��L�H1����I�UH�PH�BI�EI��w���I�G�����H��L��H�@�@(�ܤ��I�U�|$H�PH�BI�E�y����$�E1�L��1���$���a�I�UH�PH�BI�E�D��1�1�����I�EH�HH�AH��$�I�E����E���G����p`����;��E1��L��1���I�UH�PH�BH�EH�hH��$�I�mH������I�ED�\$ H�CH�XI�]E��������b����I�F(L�D$L��L��H�0��|���~��D��$�E1�L��1���$��(D����n�H��I�U��H��$��LA�L��H�PH�BD��I�E1�SL�L$0�2�I�UH�PH�BI�E�C(ZY�-��|$�~��I�~��5H�T$L��L���D����$�A�L����$�I���1����I�UH�PH�BI�E�}��I��V���I�GL��$L��L��H�h(I�GHc���S���H�T$��G��L��D��$�蕪��H���}L��L��E��A�L��H���Ӻ��H��$�I��H��t�%��I�����I�GH��M��KA�L��L�`(H�DP��$�1���$����I�UH�PH�BI�EA^XI������I�G�|$H�h(��|����$�E1�L��1���$��'��I�UH�PH�BI�E�y|����$�E1�L��1���$��(�a�I�UI��L����$�A��IH�PH�B��$�I�E1��+�I�UE1�L����$��'H�PH�B��$�I�E1��C(��I�UI�v@1�L�D$L��H�PH�BL��I�E�!z��E1��(L����$���$�1���I�UH�PH�BI�E� ����$�E1�L��1���$��(�|�I�UH�PH�BI�E郻����$�E1�L��1���$��(�G�I�UH�PH�BI�E�>����$�E1�L��1���$��(��I�UH�PH�BI�E�����$�E1�L��1���$��(���I�UI��L����$�A��HH�PH�B��$�I�E1���I�UE1�L����$��'H�PH�B��$�I�E1��C(�s�I�UI�v@1�L�D$L��H�PH�BL��I�E�x��E1��(L����$���$�1��-�I�UH�PH�BI�E�[����$�E1�L��L����$�A��)��H��*_���$���$�A�L��L�1����I�U�1��$�A�A�L��H�PH�B��$�I�E1���I�UI��L����$�A��HH�PH�B��$�I�E1��Z�I�UH�PH�BI�E�E(驄��A��L��1���$���$�A���I�UH�PH�BI�E�"����$�E1�L��1���$�A�����I�UH�PH�BI�E�1����$�E1�L��1���$��(��I�UH�PH�BI�E������$�E1�L��1���$��(�s�I�UI��L����$�A��HH�PH�B��$�I�E1��=�I�UE1�L����$��'H�PH�B��$�I�E1��E(�	�I�UI�v@1�L�D$L��H�PH�BL��H�CH�XI�]�+v��E1��(L����$���$�1���I�UH�PH�BI�E�٪����$�E1�L��1���$��(��I�UH�PH�BI�E駬����$�E1�L��1���$��(�Q�I�UI��L����$�A��IH�PH�B��$�I�E1���I�UE1�L����$��'H�PH�B��$�I�E1��C(���I�UI�v@1�L�D$L��H�PH�BL��I�E�u��E1��(L����$���$�1���I�UH�PH�BI�E鮭��L���T���E1��(L����$���$�H��1��a�I�UI��L����$�A��JH�PH�B��$�I�E1��+�I�UH�PH�BI�E�E(�Π����$�E1�L��1���$��'���I�UH�PH�BI�E����L��I�V(M��L��H��$�H���t$D�L$ ��Y^�2����$�E1�L��1���$��(��I�UI��L����$�A��HH�PH�B��$�I�E1��X�I�UE1�L����$��'H�PH�B��$�I�E1��C(�$�I�UH�PH�BI�E�1����$�E1�L��1���$��(���I�UH�PH�BI�E�s����$�E1�L��1���$��(��I�UI��L����$�A��IH�PH�B��$�I�E1���I�UE1�L����$��'H�PH�B��$�I�E1��C(�P�I�UI�v81�L�D$L��H�PH�BL��I�E�zr��E1��(L����$���$�1��
�I�UH�PH�BI�E�S����$�E1�L��1���$��(���I�UI��L����$�A��HH�PH�B��$�I�E1���I�UE1�L����$��'H�PH�B��$�I�E1��E(�k�I�UI�v81�L�D$L��H�PH�BL��H�CH�XI�]�q��E1��(L����$���$�1���I�UH�PH�BI�E������$�E1�L��1���$�����H��$�H�PH�BH��$����L����t?H�PH��t6H�z �T0H�P�����/��tH���H��tH���u���$�H���'L��1��ɠ���\r����$�E1�L��1���$��'�D�I�UH�PH�BI�E�x����$�E1�L��1���$����I�UH�PH�BI�E��q����$�E1�L��1���$��(���I�UH�PH�BI�E�L���]��I���js����$�E1�L��1���$��(��I�UI��L����$�A��IH�PH�B��$�I�E1��b�I�UE1�L����$��'H�PH�B��$�I�E1��C(�.�I�UI�v@1�L�D$L��H�PH�BL��I�E�Xo��E1��(L����$���$�1����I�UH�PH�BI�E�P�����$�E1�L��1���$��(��I�UI��L����$�A��IH�PH�B��$�I�E1��}�I�UE1�L����$��'H�PH�B��$�I�E1��C(�I�I�UH�PH�BI�E�e�����$�E1�L��1���$��'��I�UH�PH�BI�E������$�E1�L��1���$������I�UH�PH�BI�E�R��I�v(E1�L��L��H��$�H��jL�D$�e�A[[��~:H�A��L����$���$�L�L1��s��I�UH�PH�BI�E�|$�Po����$�E1�L��1���$��'�8��I�UH�PH�BI�E�o����$�E1�L��1���$��'���I�UH�PH�BI�E�}����$�E1�L��1���$��(����I�UH�PH�BH��$�I�EH��tH�PH�BH��$�I�EH��$H���M�����$���$�L�L1�A��-L���d��I�UH�PH�BI�E�����$�E1�L��1���$��(�/��I�UI��L����$�A��HH�PH�B��$�I�E1����I�UE1�L����$��'H�PH�B��$�I�E1��E(����I�UI�v@1�L�D$L��H�PH�BL��H�CH�XI�]��k��E1��(L����$���$�1��w��I�UH�PH�BI�E�߂����$�E1�L��1���$��(�B��I�UH�PH�BI�E鲃��H�y���yX��%L�����H��I�EH�CH�XI�]I���s��I�G��$�L��H�p����I�UI�vH�PH�BI�EH����$L�D$1�L��L���j��H�L$1�L��L���h0I���r��I�G��$��GA���$�L��L�H1��`��I�UH�PH�BI�EI���r��I�G�����H��L��H�@�@(�g���I�UH�PH�BI�E�c,��|$�l����$�E1�L��1���$������I�UH�PH�BI�E��k��I�~ �����E1��L��1����I�UE1�L����$��H�PH�B��$�I�E1����I�UE1�L����$�A��H�PH�B��$�I�E1��P��I�UE1�L����$��H�PH�B��$�I�E1�� ��I�U��$��D$`H�PH�B��$�I�E�ɉ����$�E1�L��L����$�A������j��H���fV��H��A��5I��S�m�����$�E1�L��1���$�����I�UH�PH�BI�E����I�v���H���H�\$`H���&H�H�L$ �� �#H��H��H�ZH�\$`H����#I�~ ��(H�D$0�D$XH�D$@HXL�t$HH�D$ H��$H�D$hL�l$pfDH�D$HH�\$@H�|$ H�@0L�,�H�D$0I�u����m�#L��腫��H��H��$�H�EH�hI�GH��$�H���H���FI�uPH����L�D$��$�L��H�T$P�g��H��$�1�L��E1���$�A��G��$�I���/��H��$�H�PH�BH��$��C(I�}(�`L��M��I���`D��#L��軪��H��E1�H��t$H�t$HI��H��L��I���gY��H��$�I�D$L�`L��$�A\XI��M;n(��I�F8H�|$ J��H�D$0f�;�H�s���u��%�#E1��L��A�ċCD��‰D$(1��T��L�D$H��1�H��$�L��H�PH�BH�T$8H��$��uf���\$(�11�A�A�D��L�������I��HD��H��$�A�L��H�PH�B��H��$�1�����H��$�H�PH�BH��$��E(����H�\$HH�D$@H�D$@H;C �����L�l$pI��I�GH���H����H� �. H��H�xtpI�F8H����#H�\$H�H(H�{PH����%H�qH�Q�J��H��$H��$H��$ASL�
6�*L���t$hD�D$h��$$H�t$H�|��[]I�v8H����L�D$��$�L��H�T$8�e��A��GL��1�H��$���$���$�I�����H��$�H�PH�BH��$�H��$��C(H���>I�UH�BH��$�H�PH��$�I�E�`��@H� ��H��H�xI�uP�����H��H�D$ID�H�xPH�VH�v�#��D�D$XH��L��H��$L�
C{*H��$ A�X�t$hH�t$`��$$H�T$x�R��XZI�uP�\$X�1����|$�H���I��n��I�G�p`��uL���+��H���P���ƺ����E1��L��1��g��H��$�H�PH�BH��$����H�@ ������I��I���m��I�GL����r�����]�I��I���m��I�GL����C���H�|$1Ҿ&��L���H���L���PH�� A�H�DHc�PL�L��$�1���$����I�UH�PH�BI�EAYAZ�d��H��$�H��L�
��*L����$�H�\$`D�D$h��$H������]A\�D$`���BD�L$pL�D$(H��L��H�t$L�����������f�I��I���j��I�GL����T�����$�E1�L��1���$������I�UH�PH�BI�E�z������H��I���j��I�GH����r������I��I��Zj��I�GL����ۘ����I��I��Dj��I�GL���靚����H��I���k��I�GH���鄖��H� ��H��H�xI�v8����H�F(H��HD�H�pH�PH�D$H�xP���L��L�
��*L��H��$H��$H��H��$��$�D��$���$$�$��I�v8A\A^�S����$�E1�L��1���$���g��H��$�H�PH�BH��$������|$�7b����f��R�UA��H��tf�}R�K��L�������$�A�L����$�I���1�����I�UH�PH�BI�E��a����$�E1�L��1���$��'���I�UH�PH�BI�E�b����$�H�t$8A��L����$�E��$�E+D$ �"��E1�A�1���$���$��#L���L��H��$��D$0H�PH�BA�T$H��$�A�D$ ���D$���{����$���$�L��A�A���D$A��$��D$ 1�����H��$�H�PH�BH��$�A�D$ ����$�H�t$8A��L����$�E��$�D+E�;��H�|�_H��u L�%;$(�L���K+��H�\�_H��t�jE1�A�H��j��$�L����$����H��$�H�PH�BH��$�A\XD�]E1�E����L�t$`L�l$h@H�EIc�H�|$A��L�4�L���ԏ��D�l$ L��A)��tK����$�A�L����$�I���1����H�t$8A��E��H��$���$�L��H�PH�B��$�H��$��%��D;e�k���L�t$`L�l$hjC�D$E1ɹ�jH���$�L����$�L�D���H��$��L$@@H�PH�BH��$�AYAZ�,z��L����t?H�PH��t6H�z ��H�@�������tH���H��tH���u���$�H���'L��1������^��H�D$xH�@ �6}����$�L���D$(�R���L��I���G���L��H���<���f�HDŽ$�H��H��$�)�$�H��$�鲅��I�v(H���	��A��L�D$L��L���k\���@���E1��L��1����I�UH�PH�BI�E��]��H�D$�U L��H�xP���H���sI��H��H���(��H�mH���o�����QI��H��H������.o����;
��I���E_���|$��]��H���cH�T$L��L���/$����$�A�L����$�I���1��I��I�UH�PH�BI�E�,]���� D��1�L����$����H��A��CI��AT�4c��H�T$L��L���#����$�A�L����$�I���1�����I�UH�PH�BI�E�=f��I�v(H���P�L$L�D$L��L����Z���\���|$�\�����M���I�V(M��L��L��H��$�H���t$�\$ D����]A\���B\����$�E1�L��1���$��'�*��I�UH�PH�BI�E�
\����K��I��e��I�WH�BH����������H��L���&�������$�E1�L��1���$��$D�L$(D�T$ D�\$���D�L$(D�T$ H��$���$�D�\$H�PH�BH��$��7a��H�|$1Ҿ���Ҷ����$�L��L����$�I��A��I�� ��
��D�L$HE1�1�1��#L�����H���CL���t$H��$�I��A���$�1����I�UH�PH�BI�EXZ�|$��I�~��Z��I��b��I�GH�\$(H�X(�Z�������I���c��I�WH�BH����a�����a��H��L���6%���ta������I��d��I�OH�AH����i�����i��H��L���$���i����g��I��*b��I�WH�BH���j����j��H��L���$���j�����X��I�NXH���K��f�9�A��H�y�6��H�I(H�)f�}��#��H������E����I��)`��I�OH�Ix�����H�]H��q��\H�D$H�PXH��H�T$��#H��I����#H�T$L��H���KoH��H���pF��I���_��I�GH�@x�@u���H�����t9H�D$H�uH�@P���H��X��#L�����6��H�߉�H���!�H��H�l$I�v1�L��L��I���W��I�FX1�I��L��L��H�@(H�p��V���|$��E1�E1�1ɺ��L������I�ٹ]L��APA�P��$$1���$ �K��I�UE1�L���'H�PH�BI�EAY1�AZ��$��$���I�UH�PH�BI�E�W�����i��I�NXH���\��f�9�R��H�y�G��H�I(H�)f�}��4��H���+���E����I���]��I�OH�Ix����H�]H��N��9H�D$H�PXH��H�T$��#H��I����#H�T$L��H���\mH��H���D��I��]��I�GH�@x�@u���H�����t9H�D$H�uH�@P���H��X��#L�����4��H�߉�H���2�H��L�D$I�v1�L��L���U��E1�E1�1ɺ��L���/��I�ٹ^L��ASA�P��$$1���$ ���I�UH�PH�BI�E[]�|$�aV����$E1�L��1���$�'�I��I�UH�PH�BI�E�,V��@��$�E1�L��1���$�����I�U�F��$�A�A�L��H�PH�B��$�I�E1�����I�U�|$H�PH�BI�E��U����$�E1�L��1���$��'���I�UH�PH�BI�E�U��I�GD�L$(D�T$ H���D�\$H�x�$���D�L$(D�T$ ��$�D�\$�Z����$�H�t$8A��L����$�E��$�D+E�����D$�L$0@�2p����$�E1�L��1���$������I�UH�PH�BI�E��x����$�E1�L��1���$�����I�UH�PH�BI�E�[���H�@ ���H�yH��u��H�@H���k�H�8t�L����t?H�PH��t6H�z ��H�@�������tH���H��tH�0��u���$�H���'L��1��{����T��H��$�H�@ �@�����$�E1�L��1���$������I�UH�PH�BI�E�`��I�GH���H�x�|���H�D$PH�D$X��k���t$I�V(L��E1�AUA�$1�L���*A]A^�tS����I���q���H�D$I�vI�VH�xP�y���L��H��$�H��$��!��H��$�H�
�h*L��H���'���H�D$x��q����$�H�y�'L��1��e����R��A��L��1���$���$�A�����H��$�A�L����$��H�PH�B��$�H��$�H�|_L�1����H��$��,��$�A�A�L��H�PH�B��$�H��$�1��Q��E1ɹ�L��H��$�A�H�PH�BH��$�jj��$���$����H��$�A�L��A��.H�PH�BH��$�A[1�[��$���$�����H��$��|$H�PH�BH��$��H�\$(L��A�1���$���$��GI������H��$��)��$�A�A�L��H�PH�B��$�H��$�1��C(�:������I�~ ���;�H��$��{���|$�I�I���V��I�G�p`��uL���
��H���	���ƃ�E1��L��1�����H��$�H�PH�BH��$����I�vH����	L�D$1�L��L����N��1�A��FL����$���$�A��i���I�U�|$H�PH�BI�E�FP����$�E1�L��1���$��'�.���I�UH�PH�BI�E�P��H�T$L��$D�T$(L��D�\$ �J��D��$�L��D�L$�}��H����D�L$L��L��A�H��L���Q���I��I��^U��H��$�I�GD�\$ D�T$(H��L�`(tD�T$ D�\$����D�T$ D�\$E1�M��A��I�~P������$��U����t�|$����$E1�L��1���$��(���I�UH�PH�BI�E�x|��H�@ ���8�wv���xE�mv���D$�D$ �hv��A��%L��1���$���$�A�輾��H��$�H�PH�BH��$���L�L	A�L��1���$���$���w���E1�� L��H��$���$�H�PH�B��$�H��$�1��?���H��$�H�PH�BH��$�A�D$�)i���|$�	N����$�E1�L��1���$����I�UH�PH�BI�E�ǝ��H�T$L��L�������$�A�L����$�I��H�ù1�製��I�UH�PH�BI�EH����M�����yM��H��L���6���iM����$E1�L��1���$��Q���I�UH�PH�BI�E���H�D$I�vI�VH�xP�F���L��H��$�H��$�����H��$�H�
Mb*L��H����H��$��7�����$�E1�L��1���$��'�Ǽ��I�UH�PH�BI�EI�GH���H��tH� �9H��H�x���|$��A��GL��1�H��$���$���$�I���R���I�UH�PH�BI�E�C(�U���I�F0L�t$H�(L���U�u菧���UI�vxI�~PH������H���7����$�A�L����$�I���1��޻��I�UE1�L��A���H�PH�BI�Ejj��$���$��F��I�UA��L��H�L$XL��H�PH�BH�AH�HI�MAYI��AZ��$�I�� ��$��B����|$�OK����$�E1�L��1���$��'�7���I�UH�PH�BI�E�K��L��$��D$X�����L��1����I�UH�PH�BI�E��J���L��1��ں��I�UH�PH�BI�E�J���L��1�趺��I�UH�PH�BI�E�J��A��L��1���$���$��~���I�UH�PH�BI�E�aJ���$6��H���Q���|$�IJ��I���R��I�G�p`��uL���Q��H������ƃ�E1��L��1�����I�UH�PH�BI�E�I��M�fH���q���H��M���*A�$f���9f��*��v��A�T$H�t$(H�|$ �Ȏ���	H�=��'I�����I9��bv��H���Yv��I��FO��I�GUL��L��L��p(D�L$(H�T$L��$ ��_AX�MI�����H��I���P��I�GH�����y��I�E�>���1��Y�����Q�I���P��I�WH�BH���:e����2e��H��L������"e����$�E1�L��1���$��軸��I�UI�v H�PH�BI�EH�������L�D$1�L��L����F���r���DŽ$��g���A��L��1���$���$�A��N���I�UH�PH�BI�E�1H����$�E1�L��1���$��'����I�UH�PH�BI�E�)���$�E1�L��1���$�����I�UH�PH�BI�E�%����$���$�L��1��買��I�UH�PH�BI�E�G����$���$�L��1��耷��I�UH�PH�BI�E�cG����H���N��fH~�H��H��H��I���G���H�\$`H�S ����H�@ ����H�A0H���	����A��L��1���$���$�A���I�UH�PH�BI�E��F����t	������L������$����$�E1�L��1���$��褶��I�UH�PH�BI�E�����$�E1�L��1���$���o���H��$�H�PH�BH��$���H�D$I�vI�VH�xP�\���L��H��$�H��$��	��H��$�H�
c[*L��H���
|��I�~ H�D$`�����D$X�g��1���`��I�v�0s��H�~��I����H�}���H�����
H��H�=�'H��
�3������br�������$�E1�L��1���$���v���I�UH�PH�BI�E���H�@ ����IFX��r��I��M��I�GH�@x��pr���EH�]H�����H�D$L�pXH����#H��I����#L��L��H���ZH��H���#2��I��CL��I�GH�@x�@u�C
��H�����t9H�D$H�uH�@P���H��X�K�#L�����A"��H�߉�H�����H��E1�E1�1�1Ҿ�
L�����ATI��A�P��$$1��=��$ L���A���I�UH�PH�BI�EA^X�|$�D����$E1�L��1���$�'����I�UH�PH�BI�E��C��H��$�AQL��L����$�D��$�L�
�a*��$�L���AZA[�(���fo�$�)�$���A�D$�Xp��A�T$0H�t$(H�|$ 荈���	H�=>�'I���I��I9��'p�����L���s	��H���������2�����H�������.��H�������I��鰷����.��I��飷����H�����.��H����1�I�vH����L�D$1�L��L���%A��Hۋ�$�1�L��H��A��F��$�I��訲��I�U�|$H�PH�BI�E��B����$�E1�L��1���$��'�m���I�UH�PH�BI�E�PB�����Z�����$�E1�L��1���$���.���I�UH�PH�BI�E�D�����I�������-��I������$E1�L��1���$�*�߱��I�U�,��$A�A�L��H�PH�B��$I�E1�覱��I�UH�PH�BI�E��H����D$X���H�pH�P萫��H��$H��$�A���f� H�=W�'H��1��u��DAWAVI��AUI��ATI��USH��I�IPD�$H�T$dH�%(H��$1�L�L$H�L$�ǂ��L��H��輂��L��H��豂��L�\$@I�}0H�T$L��L�\$0I�����H�D$���H��XI�E0H�|$8H�p�O�#�
H�=Ɉ'�D$,I�FH�@PH�D$ �-�H�t$ H���`-��H����L�\$0L��L��D�L$,A�H��L����}��H��$�H�D$ H��t���C,����C,�E,����E,I�D$H�CH�XI�\$I���I��I�FI�u(�HX�@X�L$,H���zL�D$1�L��L���>��I���I��I�F�L$,I�u8�HXI�D$H�EH�hI�l$H��t�<$���$L�D$L��L����=��H�D$E1�1�L���P�01��]���I�T$�<$H�PH�BI�GL�xM�|$�)H�D$ I��I��I��I��HDŽ$�H��$�L��H��L��$�H�D$H��$H��$�H��L��$�H�D$����C(�K,H�ƒE(A�G(I���H��I�FH�x��H��H�$����H�$H�BI��?H��I�FH��H�x�?7��H�D$H�t$�L��$HDŽ$�L��$�H��$�HDŽ$������E(�M,I��A�G(�C(I��
H��I�FH�x�{L���C��I�D$I���G��I�FL��H�x�6��H��$dH3%(�vH��[]A\A]A^A_�@H�D$E1��'L���P�01�脭��I�T$I�u8H�PH�BI�D$����f�H�D$H�|$8���I�E0H�p���#I�U0E1�L���ƹ1��R�(���I�T$H�PH�BI�D$�I����H�D$E1��'L���P�01���I�T$H�PH�BI�D$���D�H�$�
�I���F��I�NH��H�$H�A����������H��L��H�$�Q��H�$�������I��sF��I�VH�BH���]�����U���H��L������E������ff.�AWAVAUATUSH��xdH�%(H�D$h1�H��+F��H�FH�L$f�A��H��H�|$L�d$@H�H0H�D$ )D$ H�D$0H�L$I��H�D$8H�����fDf�H��L�d$X)D$@H�D$P�a}��H��H���V}��I�wH��H��H��I���a��H��|E��I�OH�SH��L�D$H�J0H�T$X�H�UH�jL��H�l$XI�7�~9��H�T$XI�VL�rH�D$HL�t$XH��tH�T$8H�BH�D$HH�PH�D$XH�D$8M�M��tI��2���E��u�H�tZH�SH�t$H�D$(H�r0H��tH�|$H�WH�BH�D$(H�PH�D$8H�GH�D$hdH3%(uH��x[]A\A]A^A_��J���D��DAWI��AVAUATUH��SH��HH��$�H�L$0��$�D��$�D�D$8H��$�D�`�t$,�L$(�D�T$<�L$D�L$��{��H��I����{��D�L$I��1�fA�?���D��H��H�D$H��$�H�xPH�pxH�|$H�t$ ��~��L��1�H��L��$�H��H�D$E1��7��D�T$<E����t$E1��(D��H��1��~���H�SE1�H��A�H�PH�BD��H�Cj�t$H�L$ �t$���H�SH�PH�BH�CY^�|$(�v�|$,M��A��Iu�H�t$D��1�H������H�SH�PH�BH�CA�F(�|$(��L��$�1�H��H��H�t$0�7���T$8H�t$ H�|$��}��jE1�A��t$�t$H��D��H���5���H�SM��H��A��GH�PH�BH�CX1�Z�t$D���d���H�SH�PH�BA�E(�|$(I�FL�pL�s�\M�uM�nL�kM��tM�oM�}L�{�t$D��E1��'H��1�����H�SH�PH�BH�CH��H[]A\A]A^A_��D�t$E1��*D��H��1�D���ç��H�SE1�D���'H��H�PH�BD��I�EL�h1�L�k蓧��H�SH�PH�BH�CM��t�I�GL�xL�{H��H[]A\A]A^A_��t$E1��'D��H��1��G���H�SH�t$01�L��$�H��H�PH�BH��H�C�m5���t$E1�D��*H��1�����H�S�t$H��A�A��,H�PH�BD��H�C1��Ҧ��H�SH�PH�BH�C��D�t$D��E1��(H��1�蟦��H�SH�PH�BH�C�\���f.�H���Hx���t$E1�D��I�ǹ(H��1��\���H�S�t$M��A��JH��H�PH�BD��H�C1��-���H�SH�PH�BH�CA�G(�|���AWI��AVE��AUATUH��SH��H��I�yPH�vH�T$���H��XL�$�#E�oL�$A��A�f��%��f��*��A�WI�yPI�qx�z��H���7!��A�I��D��D��H��A��1��s���H�SM��D��H��A��
H�PH�BD��H�C1��E���H�SH�PH�BH�CH��[]A\A]A^A_�fDA�W I�qxI�yPL�$�z��H��� ��I�wE1�L�$I��H��tHH�T$H��H������E1��J����H�T$H��A��L��[H��M��]A\A]A^A_�2���'D��D��H��1�蓤��H�SD��H��A��H�PH�BD��H�CH���^L�1��^���H�SA�H�PH�BH�C���f�>Rt
���2��f�AVAUATI��U��1�SH�GH��D�hX�a2��H�
�_H��u&L�5Z�'fD�L������H��_H��t�H���w���D��L��I��A������1�跣��H�SE1�D��A���L��H�PH�B�����H�Cjj�%���H�SH�PH�BH�CXZ@��u[]A\A]A^�D�����D��L��E1��'1��F���H�SH�PH�BH�C[]A\A]A^�ff.�f�AWM��AVI��H��AUATI��USH��H��(H�AH�t$D�L$�hX�t��H��A�H��I��A�F���f�D$&H�CH���H�PH���H�HH�DH�D$I��1�H���������j荢��I�W��M��A��HH��H�PH�BI�GX1�Z������\���I�WI�vH�PH�BI�GA�E(H���
�L$L�D$`L��H�����L�L$A���H�߹I�����1�����I�W���A�A�H��H�PH�B�����I�GH�D$�@(1��ɡ��I�WL�L$��A��H��H�PH�B�����I�G1�蘡��I�Wf�|$H�PH�BI�G�I�v I�EL�hM�oH���c�L$L�D$`L��H������M���H��A��I�����1��/���I�W��H��E1�A��H�PH�B�����I�G1�A�D$(���I�WL�L$��H��A��H�PH�B�����I�G1��ɠ��I�WM���H��A��GH�PH�B�����I�G1�蚠��I�WH�PH�BI�GA�D$(H��([]A\A]A^A_�D�����M��A���GH��1��Q���I�WH�PH�BA�D$(���f.������E1����H��1�����I�WH�PH�BI�G����f������E1����H��1����I�WH�PH�BI�G���f�AWI��AVA��L��AUI��ATM��UH��SL��H��X��$��D$dH�%(H�D$H1����I�|$PI�wH��$H�D$���tcH��X��#A�WL�L$A����H��1��G���H�SH�PH�BH�CH�D$HdH3%(�!H��X[]A\A]A^A_�@H��X贺#�D$A�G�D$A�f����f��A��f�H�T$ 1�M��L��H��)D$ H�D$0H�T$8�-��fA�?U��A����A����|$��H�D$(H���E���H�SH�BH�PH�D$8H�C�+���f��|$�eI��*A��D�t$�D$1�I��L��M��I��I�T$(H��M��I��L��H��J�4�jI���T$ �7���I�T$A[XL9�w�L�L�t$�T$1�A��H��D�t$�ӝ��H�S�|$H�PH�BH�C�����A���~H��z_H��u*L�%�s'�L���k���H�tz_H��t��jE1�A�j!�LfD�|$E��M�W(u!ATL��E1�M��SD��L��H���GXZ����T$�t$A�1�A��H��L�T$D�\$����H�SE1�M��L��H��H�PH�BATH�CSD�\$L�T$ D��L����A��AYAZ�QH��y_H���9���L�%�r'f.��L���s���H�ly_H��t��
���f�A���?����|$����T$�t$A�1�A��H���H���H�SH�PH�BH�T$(H�CH��tH�PH�BH�D$8H�CH��x_H�������L�%Hr'fD�L������H��x_H��t��j���f��T$�t$A�1�A��H��轛��H�SH�PH�BH�T$(H�CH��tH�PH�T$(H�BH�D$8H�C�T$�t$M��A�H��1��m���H�SH�PH�BH�CH�&x_H��u*L�%�t'f.��L������H��w_H��t�jE1�A�j!�T$�t$(H��H��觯��H�SH�PH�BYH�C^����T$�t$1�A�A��H���͚��H�SI�H�PH�BH�C�h����T$�t$A�1�A��H��菚��H�SH�PH�BH�C����f.�H�Aw_L�%�p'H�����f��L���#���H�w_H��t����f�H�w_L�%dp'H�������f��L�����H��v_H��t��z���f�jA�H��E1�j!�T$���t$(�n���H�T$HH�PH�BH�D$H_AX����@�T$�t$A�1�A��H��荙��H�SH�PH�BH�T$(H�CH��tH�PH�BH�D$8H�CH�#v_H������L�%yo'�L����H��u_H��t����f.�A�A��T$�t$��������ff.�f�AWI��AVAUATUSH��H��H�vH��$�H�|$L�D$0L��$�H�D$ f�L$PD�L$RdH�<%(H��$�1�H�xP���H��X�3�#f�HDŽ$��D$�C)D$p�D$H�D$pH�D$(H��$�I�H����H�|$`�D$1�E1�H�|$@A�I�WH�KH�<�I��H�,��uf����f��	�E���HE����H�D$xH��tI�T$H�BH�D$xH�PH��$�I�D$�T$�t$O�L-1�H�|$A��%蚗��I�T$H�PH�BI�D$H�D$(H�UH�D$xH��$�H�����
E1�I�f��A��f��l��H��H9����D$R�uE���lf�|$P���T$PH��M��H��jL�L$0H�L$@H�|$�*���_AXE1�E1��D$I�f�L��I9������E��thE����H�D$xH��tI�T$H�BH�D$xH�PH��$�I�D$�T$�t$O�L-1�H�|$A��%�y���I�T$H�PH�BI�D$H��$�dH3%(�SH�Ĩ[]A\A]A^A_�fDf�|$P���Et*E��A��E!Ӏ|$uH��H9��E�����D$H�T$(L�D$ 1�H��H�|$D�T$8�)$��A�UD�T$8�����I�Lc�L��I9����������@H�UH���S����
f��A�<���H�z(�;���H�P�H9���"T$RD ҈T$�8E���OD�T$E1�L��I9��#����r���fD�\$PH��H�uM��D�T$@jL�L$0��H�L$@H�|$�C���L�L$0H�u ��H�L$@H�|$M���$����XZA�U�D$D�T$8�������E����H�D$xH��tI�L$H�AH�HH��$�I�D$Hcҋt$H�|$1�L�L�T$A��%�~���I�T$H�PH�BI�D$H�D$(E1�E1�L��H�D$xH��$�I�I9������h���@L�D$ H�|$1�L��H��E1�L���k"��I��D$E1�I9������.���f��T$�t$A�1�H�|$A���ۓ��I�T$�t$E1�H�|$�*H�PH�B�T$I�D$1�譓��I�T$H�PH�BH�T$xI�D$H��tH�PH�T$xH�BH��$�I�D$jA��E1ɹ�jMc�T$$�t$,H�|$O�D-���I�T$H�PH�BI�D$A[A]���f��T$�t$E1��H�|$1�E1�L������I�T$�D$E1�H�PH�BI�D$I�I9�����������l$H�\$�1��T$A�A���H��趒��I�T$E1���*H��H�PH�B�T$I�D$1�茒��I�T$H�PH�BH�T$xI�D$H��tH�PH�T$xH�BH��$�I�D$jA��E1ɹ�jMc�T$$�t$,H�|$O�D-�̦��I�T$H�PH�BI�D$XZ����T$�t$A�1�H�|$�%E1�L��A����I�T$E1�H�PH�BI�D$I�I9����������T$�t$A�1�H�|$A��D�T$蕑��I�T$D�T$H�PH�BI�D$E�����T$�t$1�A�H�|$A��%�O���I�T$f�|$PH�PH�BI�D$��L�D$ H�|$1�L��H���j��jE1�A���j�T$$�t$,H�|$薥��I�T$H�PH�BI�D$�����T$�t$A�1�H�|$A��賐��I�T$H�PH�BI�D$�T$�t$E1�1�H�|$�*腐��I�T$f�|$PH�PH�BI�D$�6����T$PH��M��H��jL�L$0H�L$@H�|$�r�AYAZ����f�D�|$D�t$1�A�H�\$A��D��D��H������I�T$E1�D���*H��H�PH�BD��I�D$1��֏��I�T$H�PH�BH�T$xI�D$H��tH�PH�T$xH�BH��$�I�D$jA����E1�jMc�T$$�t$,H�|$O�D-����I�T$H�PH�BI�D$Y^���DH9��HH�t:�FtnH�s��f�L��L�NA�@tL��H��H9�w�H�����A	�E��u5�D$����f�H9�vH�t:�Fu�H�ο��H�οI��D�T$8H�L$H���I9�D�T$8H����H�L$HD�l$TM��H�D$8H�l$ H��D�T$SH�\$I��L�d$X�@I��I�UH��L�$�H��I�t$��I�t$ H��H��H�D$`��H�t$@H�|$8�H�D$h���L��M9�u�M��D�T$SH�l$8Lcl$TL�d$XH�E�� ��H�EH��D�T$8H��?H�H���H�UD�T$8H��� ��H��H�uH�׃�H��D�T$8���H���}��H��H����E��D�T$8�bE����H�D$xH��tI�T$H�BH�PH��$�I�D$�T$�t$O�L-1�H�|$A��%�B���I�T$H�PH�BI�D$H�D$xH�D$(H��$�D�l$�T$�1�H�l$A�A�D��H�����I�T$D��E1��*H��H�PH�B�T$I�D$1��Ì��I�T$I��D��\$A��H��H�PH�B��I�D$1�萌��I�T$D��E1ɹ�A�H��E1�H�PH�B��I�D$jj���I�T$E1�H�PH�BI�D$I�Y^�]���H�����4���E�������T$�t$I�ٹH�|$A�1�����I�T$E1�H�PH�BI�D$I��	���H�u H�}����H�l$�T$�1��t$A�A�H��贋��I�T$E1�H��t$�*H�PH�B�T$I�D$1�舋��I�T$H�PH�BH�T$xI�D$H��tH�PH�T$xH�BH��$�I�D$jA�EE1ɹ�jH��T$$�t$,H�|$L�D�ɟ��I�T$H�PH�BI�D$_AX����I�������2��������AWAVI��AUATUH��SH��H��HH�>D�D$L�L$H���E1�I���$1��D$E����f.�f��Z�fA�Bt)f��A��f��A��D!�f��zA��D!ك�$�vL�D$1�H��L��L��A������$A���~PMc��U�uA��|$O�L?���L��1�����H�SE1�H�PH�BH�C�D$f.�I�<$L��L9���I�t$L�BL��M��L��A�f=�����E��tKMc��|$�UL�$O�L?�uA��J�L��1�胉��H�S�D$L�$H�PH�BH�CI�r(H����L�D$1�H��L������|$�U�u��L��A��#1�A�E1�����H�SI�<$�$�D$H�PH�BL��H�CL9�����Mc�E��t<O�L�U�u��|$A�u�"L��1�輈��H�SH�PH�BH�C�|$��H��H[]A\A]A^A_�f�E1��!L��1��~���H�S�$E1�H�PH�BH�C�r���f��"L��1�E1��N���H�SH�PH�BH�C�D$�$�A����E�����D$��E�����t$I�R1�L��SE1�A�$L��L�T$(��L�T$(XZI�JH��t2I�r(H�f�8	��1��fDH��f�:	��H��H9�u�U�uE1��L��1�虇��H�SE1�H�PH�BH�C����H�|$1Ҿ*���r���M�UH��I��A��L��I�� ���������"L��1��9���H�SL�$H�PH�BH�C���Mc��|$�UL�T$O�L?�uA�����nf�H�B@H9��}���I9�slJ�D�@ta�f��AA��f����A��tJf��ztDL���)�H��At'�	f��A��f��AA��E��tf��zt	H��H9�r�H)�H��?�CL�D$1�H��L��L��A������$A����X���Mc��UA�O�L?D�|$E����u�L��1�����H�SD�<$E1��D$H�PH�BH�C����DA����D�U�uL��E1��'1��ȅ��H�SH�PH�BH�CH��H[]A\A]A^A_�f��U�uL�T$�A�A�L��1��z���H�SL�T$H�PH�BH�C�D$�D����"L��1��I���H�SL�T$H�PH�BH�C����H��H�T$(L�D$8H�D$ �X���H�L$ H�T$(D�|$ L�D$8H�l$(H��H�\$0L�,
H�\$H�D$M���@I��I�D$L��H�4�H�����H��H���
��L��M9�u�Lc|$ H�|$H�l$(H�\$0���E����O�L?�U�u��|$A�u�"L��1��g���H�S�uH�PH�B�UH�CL�L$L��A�1���7���H�S�uE1��!L��H�PH�B�UH�C1���������u�"L��1�����Z����|$�U�ut�L�L$A�L��1���̃��H�S�D$H�PH�BH�C����f�AWAVI��AUATI��UH��SH��H��H�~PH�uD�L$���H��XL�D$�"�#D�mE1�L��ƹ(A��1�D���T���H�SM��1�H��L��H�PH�BH��H�C���D�L$A�E��A��wD��1D��L��1�����H�SH�PH�BH�CL�t$D��D��L��A��I1�M���ς��H�SH�PH�BH�C�A�F(H��[]A\A]A^A_�fD�)D��D��L��1�苂��H�SD��L��A�A��1H�PH�BD��H�C1��Z���H�SH�MI��I�vPL��H�PH�BH�UH�C�D$PD�H�������1���H��[]A\A]A^A_�@AWAVAUI��ATUH��SH��H���H�~P��$ ��$(H�4$L�D$I�uH��X�L$ �W@L�L$D��$0�D$�D$(dH�%(H��$�1��L�#A�ME�uA�ǍA�f=���H�F'��Hc�H�>���M�mL�$1�H��L��H������|$A�A��1D��1D��H��1��$���H�SH�PH�BH�CL�d$D��A�1��HD��H��M����H�SH�PH�BH�CA�D$(L�d$D��M��A�D���GH��1�踀��H�SH�PH�BH�C�A�D$(H��$�dH3%(�!1H���[]A\A]A^A_�@I�E H�D$8I�E@H�D$@I�E8H���!f�8���H���R��H��H�D$(�R��H��H�D$X��Q��H��H�D$H��Q��H�|$@H�D$P�6�D$`�D$h�D$I�U�D$0H��t0H��H��H�$@PD�L$@L�D$8H�t$����ZY����H��E��H��L�ꋄ$@H��PAT�D$HP�t$x�t$xL�L$XL�D$xH�t$0���H��0����E1��(D��D��H��1��Z��H�SE1�D��A���H��H�PH�BD��H�Cjj�ʓ��H�SD��H��A��H�PH�BD��H�CH�D$HHD$PH�DH��$�AYI��1�AZ��~��H�S1�I�}8��A�E1�D��H�PH���H��H�BD��H�Cjj�E���H�SH�PH�BH�CA[A\�|$tTI�}8�C+�+H�=�b'��I��H�$I�MI��I�UH�pP��$8�xWH��t$x�ў��_AX���VL�d$(D��1�A��ID��H��M���~��H�SH�PH�BH�C��$8A�D$(E1�H�|$8�D$P�D$ �D$H�:%L��M��I���@I��L9l$8�%I�D$0E1��(D��D��H��J��H�D$1��}��H�SD��H��O�L-A��H�PH�BD��H�C1��c}��H�SE1�D��A���H��H�PH�BD��H�Cjj�ӑ��H�S�L$`H��H�PH�BH�C�$j�L$`QD�L$PH��L�D$HH�T$(H�t$ �-H�� ���"���f.�1��<���f�H��E���N��E1��(D��H�D$(D��H��1��|��H��H�SH��D�T$D�\$(��$@H�PH�BI�UE��H�C�AH��PATASL�d$HH�t$ M��D�\$@D�T$(�,H�� ���c�����$8M��H��H��I�U PjD�\$0ASD�T$ ARL�D$0H�t$ ���H�� ���#���D��E1��D��H��1���{��H�SH�PH�BI�D$L�`L�cD��E1��'D��H��1��{��H�SL�d$H�PH�BH�C����I�E(H��H�D$0�_M��H��H�D$P�RM��H��H�D$X�EM��H��H�D$8�8M��I�UI���D$�D$(H��t;L�T$@H��H��H�$@PD�L$8L�D$`H�t$�x���A[Z��L�T$@�8���H��E��H��L�ꋄ$@H��PAT�D$@P�t$xARL��$�L�D$hH�t$0�k���H��0�����E1��(D��D��H��1��z��H�SE1�D��A���H��H�PH�BD��H�Cjj�'���H�S�D��H�PH�BD��H�CH�D$@H�DH�D$pI��_1�AXH��A��Gz��H�SE1�D��A���H��H�PH�BD��H�Cjj跎��H�SH�PH�BH�CAYAZ�|$tJ�+H�=H^'苠I�MI�UI��I��H�$H��H�pP��$8��P�t$h�N���AYAZ������L�d$PA�D��1��ID��H��M���y��H�SH��H�PH�BH�CA�D$(�AK��H��H�D$xI���1K��H��H�D$8�$K��H��H�D$p�K��E1��(D��H�D$hD��H��1��*y��H�SE1�D��A���H��H�PH�BD��H�Cjj蚍��H�SE1�D���(H��H�PH�BD��H�CA[X1���x��H�SD��H��L�L$`A��H�PH�BD��H�C1��x��H�SE1�D��A��-H��H�PH�BD��H�Cjj����H�SD��H��A�A��H�PH�BH�CX1�ZD���<x��H�SE1�D���(H��H�PH�BD��I�D$L�`1�L�c�x��H�SD��H��A�A��,H�PH�BD��H�C1���w��H�SE1�D��A���H��H�PH�BD��H�Cjj�J���H�SA�H��H�PH�BD��H�CY1��I^L�d$hD��M���uw��H�SH�PH�BH�CA�D$(H�|$0�KA��,D��1�A�D��H��E1��/w��H�SD��H��A�A��,H�PH�BD��H�C1��v��H�SH�PH�BH�C�D$ �D$H��$8���D$@��f�I��L9d$0��A��,D��1�A�D��H���v��H�SD��H��A�A��,H�PH�BD��H�C1��ov��H�SD��H��O�L$A��H�PH�BD��H�C1��?v��H�SH��E1�A��+D��H�PH�BD��H�Cjj诊��H�SH�PH�BH�C_AXjE1�A���jD��D��H���|���H�SH��H��H�PH�BH�CI�E8J��D$P�$j�D$`PD�L$HL�D$XH�t$ �L&H�� �������1����f�E��I�UH��H�$8PATD�t$0AVD�|$ AWL�L$8L�D$0H�t$ �4�H�� ��I�E(H��E��H��H�D$0��$@I�E@H�@(QH��AT�T$8RL�d$ D�L$(L�D$8H�L���%H�� ������H�t$(1�M��H��H������|$�L�d$fA�}CA��IM��t�HD��D��H��1��t��H�SH�PH�BH�CA�D$(�_�L�$$A�UA�uL����_���|$ I���A�UI�t$xI�|$PH�$�GI��H��I��謸��L�$H����
�����
<_��
L��贺��H�5Y'D��H��H��1��M2��1��I�fDI�E8H���Sf�8	�IH���E��H��H��$��E���D$8H��$��D$XH�D$0I�UH��t6H��H��H�$@PD�L$L��$�H�t$��AXAY���q���D��E1��(D��H��1�L�%mL'�2s��H�SH�PH�BH�CH��O_H��ufD�L������H��O_H��t�H�����D��D��I��A�H��1���r��H�SE1�D��H��A���H�PH�BD��H�Cjj�A���H�SH�PH�BH�C^_�|$tI�(H�=\W'��H��I�MI��I��H�D$I�UH��H�pP��$@��P�ɕ��ZY���_���L��$�D��1�D��A��IH��M���r��H�SH�PH�BH�CA�D$(H�|$0�L�d$0D��H��1�A��D��M����q��H�SL��H�PH�BH�C茻��H��t�uH��H���h��H�QN_L�%�J'H��uD�L���c��H�,N_H��t�jE1�A�H��jD��D��H�����H�SE1�D���(H��H�PH�BD��H�CA\X1��.q��H�SD��H��A�A��3H�PH�BD��H�C1��p��H�SD��H��L��$�A��IH�PH�BM��D��H�C1���p��H�SH�PH�BH�C�D$XA�D$(���eD�L$8E���gH��$�f�I�} HDŽ$�)�$�H�D$`H��$��R��$8L�l$8H�D$0L��$���H�DH��$���$8��H�DH��$���$8��H�DH��$���$8��	H�DH��$���$8���D$x�D$ �D$p�D$�D$hDH�D$8H�L$0H�@0H��L�hH�D$@A�E��	������H�$H�PXI��HH�T$PL���'�#L��H�D$H�*�#H�T$PH�t$HH����H�����E1��(D��I��D��H��1��5o��H�SM��D��A��H��H�PH�BD��H�C1��o��H�SH�PH�BH�CH��K_H���$��H�=�'���H�hK_H��t�jE1�A�D��jH��H��D���E���H�SH�PH�BH�C_AX�|$(�?M��A��I1�D��D��H���in��H�SE1�D���(H��H�PH�BD��H�C1�A�D$(�;n��D��M��H��$�A�H��H�PH�BD��H��$�1��n��H��$��t$XH�PH�BH��$������\jE1�H��D��jA�D��H���^���H��$�H�PH�BH��$�H�D$PH�P XYf�:EuH�RH��M��H�$�Pj��$�PD��$�H��$�H�t$ �H�� �����H�L$8H�D$0H�D$0H9A �m���H��$�I��H��tH�SH�BH�PH��$�H�CD�L$XE��tyM�e8A�$f��	�
E1��(D��D��H��1���l��H�SH��H��H��H�PH�BI�T$H�C��$@��Pj�D$8PD�L$(L��$�H�t$ �>H�� E1��'D��D��H��1��rl��H�SD��H��L�d$A��GH�PH�BM��D��H�C1��?l��H�SE1�D���H��H�PH�BD��H�C1�A�D$(�l��H�SD��H��H��$�A�A�H�PH�BD��H�AH�H1�H�K���k��H�SD��H��A��H�PH�BD��H�CH��^L�1��k��H�S�!H�=�P'H�PH�BH�C���D��D��I��A�H��1��\k��H�SE1�D��A���H��H�PH�BD��H�Cjj����H�SE1�D���'H��H�PH�BH�CX1�ZD���k��H�SH��$�H�PH�BH�AH�HH�K��D��$8I�UPjD�t$0AVD�|$ AWL�L$8L�D$0H��H��H�t$ ��H�� ����������H��E���L<��H��H�D$ �?<��E1��(D��H�D$(D��H��1��Rj��H�S�|$H�ً�$8H�PH�BI�UH�C�FPATj�|$ WL�L$HH��L�D$@H�t$ ��H�� ����H�L$ H�CE1�D��D��H��H�AH�H1�H�K�'��i��H�SD��H��L�L$A��GH�PH�BD��H�C1��i��H�SH��E1��D��H�PH�BD��H�CH�D$�@(1��qi��H�SH�L$(H�PH�BI�U H�AH�HH�K��$8QATj�|$ W���f.�M��D��D��H��I�� H�����L�d$�8�fDD��D��H��)1���h��H�SD��H��A�A��1H�PH�BD��H�C1���h��H�SI�MI��H��H�PH�BI�UH�CH�$H�pP��$8D�H�|����s��H�x���H��E1��::��H��H��$��*:��I�} H��$�艚��I�} H�D$0��H�l$HL��H�\$PH�\$0D�t$8D�|$@�a��0��HH�$L�pXI��HH��L��蠈#L��I��襈#L��L��H���'��H���o�H��H����I9m �
I�E0H��L�xA�G�t��@���I���H�x(�G�H���U9��H��H�D$(�H9��H��H�D$X�;9��H��H�D$H�.9���D$hH�D$PA��D��1�A�D��H���3g��H�SE1�D���*H��H�PH�BD��H�C1��g��H�S�D$`��$8H�PH�BH�C���f�D��E1��D��H��1���f��H�SH�PH�BH�C������軀 H�=�P'H��1�����f.��+���H�����H�C_H��������H�=C�&�?���H��B_H��t��r���fDH���8��E1��(D��H�D$HD��H��1��#f��H�SD��H��L�T$HA��HH�PH�BM��D��H�C1���e��L�T$HH�SL��H�=$?'H�PH�BH�C1�A�B(�u�H������D��D��I��A�H��1��e��H�SD��H��L��$�A��-H�PH�BD��H�C1��le��H�SD��H��A�A��H�PH�BD��H�C1��;e��H�SD��H��L��$�A��-H�PH�BD��H�C1��e��H�SD��H��A�A��,H�PH�BD��H�C1���d��H�SD��H��L��$�A��-H�PH�BD��H�C1��d��H�SM��D��A��H��H�PH�BD��H�C1��vd��H�SD��H��L��$�A��-H�PH�BD��H�C1��Cd��H�SD��H��A�	A��.H�PH�BD��H�C1��d��H�SL�T$HH�PH�BI�BL�PL�S�i������H���[����I���������H���;����I�����D�t$8D�|$@H�l$HH�\$P�D$8�D$X���I�} ����H���=5��H��H��$��-5���D$8H��$��D$XH�D$0���H���4��H��H�D$(��4��H��H�D$X��4��H��H�D$H��4���D$`H�D$P�D$h���Df��m�~E1��(D��D��H��1���b��H�SE1�H��A���D��H�PH�BD��H�Cjj�6w��H�SH�PH�BH�C_AX�|$�UL��$�D��D��1�A��IH��M���Rb��H�SH�PH�BH�CA�D$(����E1��(D��D��H��1��b��H�SE1�D��A���H��H�PH�BD��H�Cjj�v��H�SH�PH�BH�CA\X�|$tK�H�=&;'�]�H��I�MI��I��H�D$I�UH��H�pP��$@��P����AZA[�����L��$�D��D��1�A��IH��M���]a��H�SH�PH�BH�CA�D$(�5�f�H��=_H��u%L�%�'D�L�����H��=_H��t�jD��E1�A�jH��D��H���u��H�SH�PH�BH�CAZA[�3���D$h�r���fDH���2��E1��(D��I��D��1�H���`��H�SM��fA�}CA��HH�PH�BH�Ct�ID��D��H��1��b`��H�S�!H�=�E'H�PH�BH�CA�D$(�ۆ�D��D��I��A�H��1��`��H�SD��H��A��-H�PH�BD��H�C��$8��L�L1���_��H�SE1�D��A��H��H�PH�BD��H�C1��_��H�SD��H��A��-H�PH�BD��H�C��$8��L�L1��{_��H�SE1�D���'H��H�PH�BD��H�C1��S_��H�SE1�D���'H��H�PH�BD��H�C1��+_��H�SH�PH�BI�D$L�`L�c�K�DM�e I�|$(�A��,D��1�A�D��H����^��H�SD��H��A�A��H�PH�BD��H�C1��^��H�SD��H��A�A��,H�PH�BD��H�C1��u^��H�SE1�D��A���H��H�PH�BD��H�Cjj��r��H�SH��H��H�PH�BI�T$(H�C��$H���$j�D$8PD�L$HL��$�H�t$ �H�� ����M�e@I�|$(�`A��,D��1�A�D��H���]��H�SD��H��A�A��,H�PH�BD��H�C1��]��H�SD��H��L�L$`A��H�PH�BD��H�C1��`]��H�SE1�D��A��+H��H�PH�BD��H�Cjj��q��H�SA�H��A�H�PH�BD��H�C1�Y�,^D���\��H�SE1�D��A���H��H�PH�BD��H�Cjj�mq��H�SH��H��H�PH�BI�T$(H�C��$H���$j�D$8PD�L$HL��$�H�t$ �6
H�� L�d$pA�D��1��GD��H��M���_\��H�SD��H��H�L$8A�A�H�PH�BD��A�D$(H�AH�H1�H�K��\��H�SE1�D��A��+H��H�PH�BD��H�Cjj�p��H�SD��H��A��GH�PH�BH�CX1�ZL�l$xD��M���[��H�SD��H��H�L$hA�A�H�PH�BD��A�E(H�AH�H1�H�K�.�s[��H�S�|$H�PH�BH�C�{L�l$PA�D��1��GD��H��M���5[��H�SD��H��A�A��)H�PH�BD��H�C1�A�E(�Z��H�L$pD��H��H�SA�A�H�PH�BD��H�AH�H1�H�K�.�Z��H�SE1�D���'H��H�PH�BD��H�C1��Z��H�SD��H��L�d$A��GH�PH�BM��D��H�C1��fZ��H�SE1�D���H��H�PH�BD��H�C1�A�D$(�8Z��H�L$XD��H��H�SA�A�H�PH�BD��H�AH�H1�H�K��Y��H�SD��H��A��H�PH�BD��H�CH�/�^L�1���Y��H�S�H�=�2'H�PH�BH�C�D��D��D��I��A�H��1��Y��H�SE1�D��A���H��H�PH�BD��H�Cjj�m��H�SE1�D���'H��H�PH�BD��H�C1�AZA[�*Y��H�SH�PH�BI�EL�hL�kD��E1��'D��H��1��X��H�SH�PH�BH�CL�l$D��A�1��GD��H��M����X��H�SH�PH�BH�C�A�E(����M��I�}8���|$h��H�|$@��E1�D��1��'D��H���cX��H�S�|$`H�PH�BH�C�7L�d$D��A�1��GD��H��M���%X��H�SH�PH�BH�CA�D$(E1��D��D��H��1��W��H�L$XD��H��H�SA�A�H�PH�BD��H�AH�H1�H�K��W��H�SD��H��A��H�PH�BD��H�CH��^L�1��W��H�S�H�=�0'H�PH�BH�C�~�D��D��I��A�H��1��EW��H�SE1�D��A���H��H�PH�BD��H�Cjj�k��H�SE1�H��H�PH�BD��H�C1�Y�'^D����V��H�SE1�D��H�L$(H��H�PH�BD��H�AH�H1�H�K�'�V��H�S�|$`H�PH�BH�C��������E1��(D��D��H��1��~V��H�SD��H��A��H�PH�BD��H�CH�D$8L�L1��IV��H�SD��H��A�A��,H�PH�BD��H�C1��V��H�SE1�D��A���H��H�PH�BD��H�Cjj�j��H�SD��H��A��H�PH�BH�CX1�ZL�L$pD���U��H�SE1�D��A��-H��H�PH�BD��H�Cjj�&j��H�SA�	H��A�H�PH�BD��H�C1�Y�-^D���SU��H�SE1�D��A���H��H�PH�BD��H�Cjj��i��H�SH��H��H�PH�BH�CI�E8H�P(��$H���$j�D$8PD�L$PL�D$HH�t$ �H�� ������H�|$@�I�����$8E1�M��M���D$P�D$ �D$HH�D$8H�DI���DI��I��L9l$@L�\$ �����I�CPE1��(D��D��H��L�\$ J��H�D$1��NT��H�SM��D��A��H��H�PH�BD��H�C1�� T��H�SD��H��A�A��,H�PH�BD��H�C1���S��H�SE1�D��A��+H��H�PH�BD��H�Cjj�_h��H�SE1�D����H�PH�BD��H�C_H��AXjA�j�,h��H�S�L$`H��H�PH�BH�C�$j�L$`QD�L$PH��L�D$HH�T$(H�t$ �H�� �������1�����*H�=�7'��yI������H�=s,'�yH��I�MI��I��H�D$I�UH��H�pP��$@��P�dv��Y^�e�A��D��1�A�D��H���R��H�S�!H�=d7'H�PH�BH�C�;y�D��D��I��A�H��1��}R��H�SD��H��A�A��,H�PH�BD��H�C1��LR��H�SE1�D��A���H��H�PH�BD��H�Cjj�f��H�SD��H��A��-H�PH�BD��H�CA\A]��$8��L�L1���Q��H�SE1�D��A��H��H�PH�BD��H�C1��Q��H�SD��H��A��-H�PH�BD��H�C��$8��L�L1��vQ��H�SE1�D���'H��H�PH�BD��H�C1��NQ��H�SE1�D���'H��H�PH�BD��H�C1��&Q��H�SH�PH�BH�C���E1��'D��D��H��1��P��H�SD��H��L�d$A��GH�PH�BM��D��H�C1���P��H�SE1�D���H��H�PH�BD��H�C1�A�D$(�P��H�SH�PH�BH�C�t���E1��(D��D��H��1��kP��H�SE1�D��A���H��H�PH�BD��H�Cjj��d��H�SD��H��A��H�PH�BD��H�CAY1�AZL�L$p�P��H�SE1�D��A��-H��H�PH�BD��H�Cjj�wd��H�SD��H��A�A��-H�PH�BD��H�C1�A[A\�O��H�SE1�D���'H��H�PH�BD��H�C1��zO��H�SH�PH�BH�C����0���H�=I�*1�肪��f�AWI��I��AVI��AUI��ATUSH��(H�~PI�r�\$`�l$hL�D$���H��XD�L$L�T$@�����j#L���� ��L��L��L��I�ċD$pPUSD�L$,E��AQL�D$8L�T$(M��M��L�����H�� ��tI�EI�D$L�`�M�eH��([]A\A]A^A_�AWI��AVAUATA��UH��SL��H���VD�)H�D$PD�qD�L$H�pxH�xP�e#��H�$fE����H�����H��I�w0I��jL�L$`A��H��H���N���XZ�|$��D��A��1�A�D��H����M��H�SH�<$H�PH�BH�C�w��D��D��H��I��A��1��M��H�SH�PH�BH�CH��[]A\A]A^A_�f.�I�w0L�D$P1�H��H�������|$�^���D��E1��(D��H��1��WM��H�SH�PH�BH�C�1���f�AWI��AVAUATUH��SL��H��D�iD�1H�D$P�T$�VD�L$H�pxH�xP�"��H�����H��H�$���H�L$PI��H��I�W H�4$I��L�IPD����Q���|$�;D��M��A�D���IH��1��L��H�SH�PH�BH�CA�D$(�D$I�w@f����H����I��H��jL�L$`H�L$萬��XZ�|$��D��D��H��A�A��1��2L��H�SL�$D��H��A��H�PH�BD��H�C1��L��H�SH�PH�BI�D$L�`L�cH��[]A\A]A^A_�L�D$P1�H��H������|$�h���D��E1��(D��H��1��K��H�SH�PH�BH�C�;���fDE1��(D��D��H��1��pK��H�SM��D��A��IH��H�PH�BD��H�C1��BK��H�SE1�D���'H��H�PH�BD��H�C1�A�D$(�K��H�SH�PH�BH�C�p���ff.�@AWAVAUATUH��SL��H��(D�aD�)H�D$`�T$�VH�t$H�xPH�pxD�L$����H���J��H��H�D$�m��H��I���b��E1��D��D��H��I��1��wJ��H�SD��H��A�
A��/H�PH�BD��jH�C1��t$�@J��H�SM��H��A�H�PH�BD��Y�IH�C^1�D���J��H�SI��D��L�T$H�t$H��H�PH�BI�R H�CH�D$`A�G(L�HP�N���|$L�T$�ND��M��A�D��HH��1�L�T$�I��H�SL�T$H�PH�BA�F(I�GI�r@L�x�D$L�{f����H����I��H��jL�L$pH�L$肩��XZ�|$��D��D��H��A�A��1��$I��H�SD��H��L�L$A��H�PH�BD��H�C1���H��H�SH�PH�BI�FL�pL�sH��([]A\A]A^A_�DL�D$`1�H��H������|$�f���D��E1��(D��H��1��H��H�SH�PH�BH�C�9���fDE1��(D��D��H��1��`H��H�SM��D��A��HH��H�PH�BD��H�C1��2H��H�SE1�D��'H��H�PH�BD��H�C1�A�F(�H��H�SL�T$H�PH�B�b���ff.�@AWAVAUI��ATUH��SL��H��(D�aD�1H�D$`�T$�VD�L$H�HPL�@xL��H��L�D$H�L$���H���,��L�D$H�L$A�UHI��L��H�����I�U I��D��H�D$H�D$`L��H��L�HP�mL��D�\$fE����H��I�u@L��A��jL�L$pI��H���M���Y^jE1�D��A�j!H�L$D��H���[��H�SH�PH�BH�CXZ�|$��D��D��H��A�A��1��F��H�SM��D��H��A��H�PH�BD��H�C1��F��H�SH�PH�BH�CH��([]A\A]A^A_�I�u@L�D$`1�H��H������:���DD��E1��(D��H��1��8F��H�SH�PH�BH�C�E���AWI��AVAUATUH��SL��H��(D�)D�qH�NL�d$`�T$D�L$�Q I�t$xI�|$PH�L$����H���q���H�L$H�D$H�qH���JM��1�H��H�����f�|$��I�L��H�w H���$���T$M��I��H��I�w0H��H��j蚥��XZ�|$��D��D��H��E1��*1��EE��H�SD��H��L�L$A��H�PH�BD��H�C1��E��H�SH�PH�BH�CH��([]A\A]A^A_�fDI�w01�M��H��H���,���|$�t���E1��*D��D��H��1��D��H�SD��H��A�A��,H�PH�BD��H�C1��D��H�SH�PH�BH�C����H���^D��D��H��A��L�1��KD��H�SH�PH�BH�C���fDAWI��AVAUATUH��SL��H��(D�!D�iH�NH�D$`�T$D�L$�Q H�pxH�xPH�L$���H��胿��H��H�D$���H�L$I��H�qH���AL�D$`1�H��H�����E1��(D��D��H��1��C��H�SD��H��A�A��H�PH�BD��H�C1��fC��H�SD��H��L�L$A��
H�PH�BD��H�C1��6C��H�S�|$H�PH�BH�C�D��M��A�D��IH��1��B��H�SH�PH�BH�CA�F(f�|$��I�w0L�D$`1�H��H������|$��A��,D��1�A�D��H���B��H�SD��H��L�L$A��H�PH�BD��H�C1��jB��H�SH�PH�BI�FL�pL�sD��D��H��E1��'1��:B��H�SH�PH�BH�CH��([]A\A]A^A_�I�H�T$`H�w H���r!���T$I��H��H��I�w0H��jL�L$p����XZ�|$����A��)D��1�A�D��H���A��H�SE1�D��*H��H�PH�BD��H�C1��A��H�SD��H��L�L$A��H�PH�BD��H�C1��ZA��H�SE1�D��*H��H�PH�BD��I�FL�p1�L�s�*A��H�SH�PH�BH�C����DE1��(D��D��H��1��@��H�SM��D��A��IH��H�PH�BD��H�C1���@��H�SE1�D��'H��H�PH�BD��H�C1�A�F(�@��H�SH�PH�BH�C����H���^D��D��H��A��L�1��[@��H�SH�PH�BH�C���fDAWAVAUATUH��SL��H��(D�!D�iH�NH�D$`�T$H�t$�Q H�pxH�xPH�L$D�L$�	��H��葻��H��H�$���H��I�����H�L$I��H�qH����L�D$`1�H��H�����E1��(D��D��H��1��?��H�SD��H��A�#A��/H�PH�BD��jH�C1��t$�d?��H�SM��H��A�H�PH�BD��Y�IH�C^1�D���4?��H�SE1�D��(H��H�PH�BD��H�C1�A�G(�?��H�SD��H��A�A��H�PH�BD��H�C1���>��H�SL�$D��A��
H��H�PH�BD��H�C1��>��H�S�|$H�PH�BH�C�D��M��A�D��HH��1��n>��H�SH�PH�BA�F(I�GL�xH�D$L�{D�|$fE����H�p0L�D$`1�H��H���w���|$��A��,D��1�A�D��H���=��H�SL�$D��A��H��H�PH�BD��H�C1���=��H�SH�PH�BI�FL�pL�sD��D��H��E1��'1��=��H�SH�PH�BH�CH��([]A\A]A^A_�DH�xH�T$`H�w H������H�L$I��H��H��A��H�q0jH��L�L$p�l���XZ�|$����A��)D��1�A�D��H���=��H�SE1�D��*H��H�PH�BD��H�C1���<��H�SL�$D��A��H��H�PH�BD��H�C1��<��H�SE1�D��*H��H�PH�BD��I�FL�p1�L�s�<��H�SH�PH�BH�C���f�E1��(D��D��H��1��X<��H�SM��D��A��HH��H�PH�BD��H�C1��*<��H�SE1�D��'H��H�PH�BD��H�C1�A�F(�;��H�SH�PH�B���@H�^D��D��H��A��L�1���;��H�SH�PH�BH�C���ff.�AWAVI��AUATUH��SL��H��(D�!D�iH�D$`H�N�T$�V8D�L$L�xPL�@xH�L$L��L��L�D$�`��H�L$L�D$L��H�$�Q L���D��H���̶��H�L$I��H�qH���L�D$`1�H��H���U��E1��(D��D��H��1���:��H�SD��H��A�A��H�PH�BD��H�C1��:��H�SM��D��A��
H��H�PH�BD��H�C1��:��H�Sf�|$H�PH�BH�C��I�~H�T$`H�w H�������T$I��H��H��I�v0H��jL�L$p�j���Y^jE1�A�D��j	H�L$D��H���N��H�SE1�D��*H��H�PH�BH�CX1�ZD����9��H�S�|$H�PH�BH�CtgD��M��D��H��A��1��9��H�SH�PH�BH�CH��([]A\A]A^A_�f.�I�v0L�D$`1�H��H�������=���DA��,D��1�A�D��H���O9��H�SE1�D��*H��H�PH�BD��H�C1��'9��H�SH�PH�BH�C�;���f�H�)|^D��D��H��A��L�1���8��H�SH�PH�BH�C����fDAWI��AVAUM��ATUSH��H����$H��$L�L$H��$��T$4H�|$H��L��$�H�D$�L$(dH�%(H��$�1ɋ�v�L$0�t$,�(
��H��H���
��H�t$`E1�H��f�H�t$xH��I��)D$hH��I��H�D$x�t$H�T$ 谸��H�D$xAZA[H��tI�VH�BH�PH�D$xI�FD�M(f�A�D$()D$@E�������"H�D$ I�Ff�L��$�H�EH�hI�n)�$�HDŽ$�L��$�M�����L$(L�D$L��L��H�����A�T$(���{H�CH���H��txH� ��H��H�xt`M����H�D$I�uI�UH�xP�41��f�|$4CL�
-�)H�D$P�L$TH�T$XtL�
�)H�T$PH��L��H��t$(E1��e8��^_H������T$,�t$0H��I��I��A�1��G�6��H��$�H�PH�BH��$�A�E(�|$(��H��$�A�T$(H����I�NH�AH�HH��$�I�F��u*�^f�H�D$ ���YE1�L��$�I�FH�t$f�I�D$L�`M�f)�$�HDŽ$�L��$�H�����L$(L�D$L��H��� ���M(����H�CH���H����H� �H��H�x��H�|$�9H�|$H�T$H��Pf�:/�1H�B(H��HD�H�pH�P�y/��H�D$PH�T$Xf�|$4CH�T$PL��H��H�]�)L�
]�)A�LE�H���t$(�L$d�6��XZH��$�H��tI�VH�BH�PH��$�I�FM��tI�FI�EL�hM�nH��$�dH3%(��H�ĸ[]A\A]A^A_�DH�CH���H�D$ H������H�8H��H�|$8�� u	H�D$ H�@ H�@H�D$ H�������H�D$I�wI�WH�xP�j.��f�|$4CH�
T�)L��H�D$@H�:�)HD�H�T$HH�L$ ���H�L$ H�T$@H��H������D�E(H�D$ E���3���A�D$(���f.�H��$�E1�H���b�������|$(�M���H�����H�C�p`��uH��赉��H���]|���ƺ����E1��H��1��t3��H��$�H�PH�BH��$������|$(�u���H�����H�C�p`��uH���E���H����{���ƺ����E1��H��1��3��H��$�H�PH�BH��$�������T$,�t$0E1��'H��1���2��H��$�H�PH�BH��$��)���f����t������H�@ ����H�@ �=����f�|$4Ct2foL$@)L$P�L$T�]���@foT$@)T$P��H�D$����H�D$H�|$H�@PH�w���H��X�BN#L�
1�)H��H�D$PH�� H�D$XH������轟��ff.�f�AWAVAUATUSH��hL��$�L��$��T$/H����Gf����H��D$.��	H�G(L�(M����	A�L�D$0M��E1�H�L$@1�D$A�CH�t$H�<$�D$�D$(�D$�A�EI�\$f��Z��f=��2f��8��L��$�1�L��L��L���D$(�[���@���2H�$H�@H�P�L9��H�$H�Q(H���f��Z�4f����)f�H9�sH�$I��H�@(L�,�M���S���@���\$��|$.�\$��D$H��h[]A\A]A^A_�DI�GH���H�x�$��I�GH���H�@�@ ��H�D$H��$�1Ҿ��� ����L$�T$L��I��A��L��I�� �o��H�$H�@�B���f�H�D$I�u(�H����L��$�1�L��L���&���@����L�,$I9]@��@
l$/��L�d$0�T$�#1��t$A�L��E�$I��?I��?A���/��I�VH�PH�BI�FA�$�����L$(��H�L$0���D$(�H�$H�@���f�@l$.��H�L$M�e��ƒ�@I�}��pH�L$
@���$�1�L��L��AVA�A�$L�����H�D$Y^H�@������D$���fDH�D$H��$�1Ҿ*��D$�C���D�l$L��L��D�d$I��A��I�� D��D���'n��A�D��1�A��#D��L���V.��I�V���H��$�H�PH�B1�I�F���D��D��L��I��A��L��I�� ��m��H��$�1Ҿ&��s��H��D��L���PH�� A��H�DHc�PL�L1�D����-��I�VE1�D��$L��H�PH�BI�FX1�ZD���-��I�VH�PH�BI�F���A�E�]H�L$I�}�D$�H�|$ �ƒ�@�H����
@L��$�H�\$81�L��fDH�C(M��1�L��L��L�,�H��I�u�p���I�u M��1�L��L���\���H9l$ w�H�\$8H�D$ �T$�%1�t$A�L��L��1���,��I�VH�PH�BI�FH�$H�@����I�E����HcD$(D�l$�A�D�d$L��L�LD��1�D���q,��I�VE1�D�� L��H�PH�BD��I�F1��I,��I�VH�PH�BI�FH�$H�@�l���@�C|��I�}H���W^��I�MH�D$ H�L$8H���eL��$�E1�I��H�D$8H�\$H�Wf���(H�H��1�L���hY��H��������?I9�wwK�T$H��H���im��L��L���9Y��I��M;e�I�E(H��$�L��J��H�p�/���H��H��H���i��H���w���H��������?H�D$8I9�v�L�����H���D�T$�t$E1��!L��1��+��I�V�D$(H�PH�BI�FH�$H�@�1����H��$�1Ҿ*��L���L$�T$L��I��A��L��I�� �oj�����f.�H���ȗ��H��������Ã��\$��������D$����DH�\$HL��$��l$8H�|$8���H�L$@H�D$8�(1�H�H�L$�@�	 H�HI�}H�L$P����H�\$XH��$��!@I�t$ I��L��L��H���A���I;ms[I�E(H�|$ H��L�$������H��u�H�D$8H�|$PH��I�t$H�HH�L$8H��L��H�L$H�_���H�L$HH�1��H�$H�\$X1�H�@���@H�|$ �l���I�E(1�L��L��L��$�H�(H�u蜷��H�u 1�L��L��$�L��胷���.���fD�T$�t$E1ɹ#A�L��1���)��I�V�D$(H�PH�BI�FH�$H�@����fD�T$�t$�"L��HcD$(A�L�L1��(���c���@I�U(H�f�:	����H�L$0��}���
@�T$�t$L��H�L$A�A���1��Z(��I�V�t$L��A�A��%H�PH�B�T$I�F1��'(��I�V1�L��A�A�$L��H�PH�BL��I�F��$�AV����_AXjj�T$,E1�A��t$(��L���m<��I�VH�PH�BI�FH�D$AYAZH�@����D$����1��-���@AWI��AVAUM��ATM��UH��SH��H��hdH�%(H�D$X1�L��$�L��$��D$,H��tH�WH��v�G��`f�� �sA�H��tf�>tbH��L��1�H��AQH��M��AWATL�D$L����H�� �U��t
D9t$,t���UH�|$XdH3<%(�IH��h[]A\A]A^A_�@H�VH��t5H�
��&���
f=�w��Hc�H�>����D$,A�H�D$0f�1�M��H��L��L�L$L�T$)D$0H�D$HH�D$H�D$@菴���MH�D$H���~���L�T$L�L$��tH�D$8�8��H��L��H��H��AQM��AWATL�D$L�
�H�T$XH�� H�����I�L$H�QH�JH�T$HI�T$�����H�G(H�D�f�8Z�z���H�x�D$,H����L�X(L�5��&1�I���f����f��	uYH�IH��tP���
f���wcL�T�&��Ic�L�>���H�R����1҃x�����@����H��H9�u�E1������H�I�f��D$,���L�AA���
f���w���Ic�L�>��M�@��f.�H�I ���
f���w�L���&��Ic�L�>��H�I���M���ff.�f�AWAVAUATM��UH��SH��xH�t$L��$�H�T$ H�L$(D�L$dH�%(H��$h1�H��$��#L�iX�D$L�=�&H��$Z�t��L��L�������t=�H�5�&L�������t#�H�5��&L����������D$A�$H�F�&H��1��I��E1��
U��L��H���b�H���y����|$�>�1��A�T$A�4$�I��A�H��1��D#��H�\$H�SH�PH�BH�CA�H��$hdH3%(D����H��x[]A\A]A^A_�DA�0H�F	'1�E1��D��f��H�5�&L�������t��H�5��&L���A��A��E��E���Z�H�5�&L���A��A��E��E���w�H�5�&L������������D�D$E�������H�D$��������H�@H��u�A�T$A�4$E1�1�A��H���"��H�\$H�SH�PH�BH�CH�D$ H�P f�:-��H�r8H���i���H�B@H���N���f�8��C���H�x�8���H�@(L�fA�8C�&���H�D$(I;@(�	���1�H�|$@��H�H��$pH��$��o�oV)L$@H�NT$XH�L$PH�N(H�L$h��H�H��$p�o)�$pH�BH��$��B��$�H�B0H��$�H�D$@H��$�I�@@H��$�H�FH��H��$�H�BPH��$�H�BXH�T$ H��$��{��H�E����H�EH��E�4$L�xx联��H��I���F���H��I���˞��H�T$<H��E1�H�mRE��L��AWL��H��jj�Է�|$\H�� H�� ���2H��$PH���
�����X������f�H�D$H�D$(I��L��H��$0f�HDŽ$@H��$p)�$0H�ppH�T$@I��H��$H�D$@HDŽ$pAT�t$(�5���L�\$^_E�CA9���E���MH�ED;����H�}H��D��L�\$H��$���L�\$��tq��$�H�DH��A�T$A�4$M��P�fA�H��1��@��H�\$ H�SH�PH�BH�CZY�A�4$A��L��H��H��'1�E1��f������H��$8H��tH�\$H�SH�BH�PH��$HH�CA�T$A�4$M��H��A��e1����H�\$H�SH�PH�BH�C�D$���f���A�T$A�4$E1�H��'1��z��H�\$D�|$H�SH�PH�BH�C�2���DŽ$�����M����I�}����I�E(H�0H�����f=��L�d$E1�I��H��&H�l$ �<@I�D$��I��M;u�����I�E(J�4�H��������f=���H��L���ut��H���X��H�PH� tH�P�H��H�������t��
H��H�=��&�����uI�D$���o����
H��H�=b�&�����t/�H��H�=R�&�������I�D$���&���I�|$��������M���tI�}�I�E(H��f=��D�L$E��������C��z�����wH�D$ L�hXH��HH���L=#H��I���Q=#L��L��H���Ӓ��H�UH��H��H���H�R����S��)�H�EA��H;��t�L$H�����H�BH;��u�L$A�L$D�L$H��A�A�$H�t$�[�����L��L�d$���6 A�4$H��'H��H��1��D�����A�4$H�8�&H��1��*���������5 A�4$H��'H��H��1�����w���A�4$H��&H��1������]���A�4$H��&H��1������C���L��L�d$H��1�H���&H��A�4$���������W��I������E���I��������I���x�������֧��H�=_'1��8v��駵��AWI��I��AVM��AUATUH��SH��H��XD�"D�jD�D$ dH�%(H�D$H1�E���FI�w1�M��H��H��L�\$���I�wXI�@I��L�\$H�L$@H�T$<I��H��H�t$A��A��D�T$�D$I�Gf�8�H�D$@�������D$<ASAV��D$AZA[���7D�T$E���(�D$�|$�D$D�\8H�D$@H��t	��D$A�Ic�A�D��D��L�L�)H��1�D�\$$����H�SE1�D�湑H��H�PH�BD��H�CHcD$L�DL�D$(�t$@�D$D���H�H�DP�0.��H�S1�M��H�PH�B^H��I�wx_H�CH��躧��A�W`I�vxI�~P�i�jE1�A�jD��H��D��H����-��H�SH�PH�BAXAY�|$ H�CD�\$$�_HcT$<�у�@�������H�|$��A��)D��1�A�D��H������H�SE1�D��*H��H�PH�BD��H�C1����H�SE1�D��'H��H�PH�BD��H�C1����H�SH�PH�B�T$<H�C���JD��1�A��"A�D��H���A��H�SH�|$H�PH�BH�C��A��-D��1�D��H��A����H�SE1�D��'H��H�PH�BD��H�C1�����H�SE1��'D��H��H�PH�BD��H�C1����H�SH�PH�BH�C�t$@HcD$DE1�H�DPL�D$8��D��D��H���,��H�SE1�D��'H��H�PH�BH�CX1�ZD���P��H�SH�PH�BH�CH�D$HdH3%(��H��X[]A\A]A^A_�D�D$��H�L�t����H�|$��A��,D��1�A�D��H������H�SE1�D��*H��H�PH�BD��H�C1����H�SD��H��A�A��-H�PH�BD��H�C1��|��H�SE1�D��'H��H�PH�BD��H�C1��T��H�SH�PH�BH�CE1��*D��D��H��1��,��H�SH�PH�BH�C�t$@HcD$DH�DPE1�M���u���f��D$<@����E1�H�|$�$��D��D��H��1�����H�SH�PH�BH�C���@A��D��A�D��Mc۹-H��1�O�L���H�SH�PH�BH�C�e���@H�T$E1�D��D���`��H�SL�\$H�PH�BH�C���fD�L$��uHH�|$t-D��E1��*D��H��1����H�SH�PH�BHcT$<H�C�t$@H�D���DE1��(D��D��H��1�����H�SD��H��D�|$D|$A��+H�PH�BD��H�CA�GA��H�Mc�L�L1����H�SD��H��A��+O�L?H�PH�BD��H�C1��a��H�SE1��'H�PH�BH�C����@�(D��D��H��1��+��H�SE1�D��$H��H�PH�BD��H�C1����H�SE1��'H�PH�BH�C����fD�D$D��A�D��,H��H�L�t1�M�����H�SH�PH�BH�C�D$=�E1�D��D��H��*1����H�SD��H��A�A��"H�PH�BD��H�C1��P��H�SM��D��A��-H��H�PH�BD��H�C1��"���A���DE1��*D��D��H��1����H�SD��H��A�A��#H�PH�BD��H�C1�����H�SE1�D��*H��H�PH�BD��H�C1����H�S�L$<H�PH�BH�C�(���f.�D��A��#1�A�D��H���_��H�S�L$<H�PH�BH�C����
���ff.�f�AWAVI��AUATUH��SH��hH��$���$�H�t$(H�$L��$�L�D$H��$�E�'E�oL�L$0�D$H�|$dH�<%(H�|$X1����*L�D$1�H��L��H�����H�t$I��I��H�D$PH�L$PH�T$LH��A��A��D�T$$�D$ 1�fA�>������D$LAW�t$H�|$����D$(AXAY���1D�T$$E���"�D$ �|$�D$$D�|8H�D$PH��t	��D$$A�Ic�A�D��D��L�L�)H��1�����H�SE1�D�湑H��H�PH�BD��H�CHcD$L�DL�D$8�t$P�D$T���H�H�DP�G%��H�SH�PH�BH�C^_H���]�H��H�$�Q�E1��(D��I��D��1�H���f��H�SL�$A��IH�PH�BH�CH�D$(f�8Ht�HD��D��H��1��'��H�SE1�D��'H��A��H�PMc�H�BD��O�|?H�CH�$�@(1�����H�SL�D$1�H�t$0H��H�PH�BH��H�C�����|$��HcT$L�у�@���n����H�|$��A��)D��1�A�D��H���q��H�SE1�D��*H��H�PH�BD��H�C1��I��H�SE1�D��'H��H�PH�BD��H�C1��!��H�SH�PH�B�T$LH�C����D��1�A��"A�D��H������H�SH�|$H�PH�BH�C��A��-D��1�D��H��A����H�SE1�D��'H��H�PH�BD��H�C1��~��H�SE1��'D��H��H�PH�BD��H�C1��V��H�SH�PH�BH�C�t$PHcD$TE1�H�DPL�D$H��D��D��H���"��H�SE1�D��'H��H�PH�BH�CX1�ZD����
��H�SD��M��A��GH��H�PH�BD��H�C1���
��H�SH�4$H�PH�BA�F(�|$H�FH�pH�s�0D��1�M��A��.D��H���z
��H�SH�PH�BI�FL�pL�sH�D$XdH3%(��H��h[]A\A]A^A_���D$��H�H�DH�D$����H�|$��A��,D��1�A�D��H������H�SE1�D��*H��H�PH�BD��H�C1�����H�SD��H��A�A��-H�PH�BD��H�C1����H�SE1�D��'H��H�PH�BD��H�C1��o��H�SH�PH�BH�CE1��*D��D��H��1��G��H�SH�PH�BH�C�t$PHcD$TH�DPE1�L�D$����D$L@����E1�H�|$�$��D��D��H��1�����H�SH�PH�BH�C���@D��M��A�D��-H��1����H�SH�PH�BH�C���DD��E1��D��H�����H�SH�PH�BH�C���DD��M��A�D��-H��1��J��H�SH�PH�BH�C���D�L$$��uHH�|$t-D��E1��*D��H��1����H�SH�PH�BHcT$LH�C�t$PH�D���DD�T$$DT$ D��D��A�BH��A��+H�D�T$L�L1��
��H�SD��H��LcT$A��+H�PH�BO�LD��H�C1��v
���*�����(D��D��H��1��[
��H�SE1�D��$H��H�PH�BD��H�C1��3
��H�SE1��'H�PH�BH�C����fD�D$ D��A�D��,H��H�H�DH�D$I��1���	��H�SH�PH�BH�C�D$M�E1�D��D��H��*1��	��H�SD��H��A�A��"H�PH�BD��H�C1��{	��H�SD��H��L�L$A��-H�PH�BD��H�C1��K	������fDE1��*D��D��H��1��(	��H�SD��H��A�A��#H�PH�BD��H�C1����H�SE1�D��*H��H�PH�BD��H�C1�����H�S�L$LH�PH�BH�C���f�D��A��#1�A�D��H�����H�S�L$LH�PH�BH�C����=v��ff.�f�AWI��AVM��AUATM��UH��SH��H��HI�yPH�vH�T$L��$����H��XdH�%(H�D$81��##A��D$0A�G�D$4�A�f��S��H�D�&��Hc�H�>��M���w	M�UH��M��H��M��H��L��L�T$I�B�I�EAUH�T$�	L�T$ M�U_AXH�D$8dH3%(�w	H��H[]A\A]A^A_�DA�W0I�vxI�~P�g��I�wH�T$1�M��H��H�D$E1�艕��E1�A�G���T$4�t$0L�T$M���A��,H��1�A����H�SL��H��H�PH�B�H�C����T$4�t$0E1�1��*H�����H�SA�G L�T$H�PH�BH�C� jj!H�L$ �T$DE1�H��t$@A����H�SE1�H��'H�PH�BH�CX1�Z�T$4�t$0�R��H�SE��L�T$H�PH�BH�C��I�BL�PL�S�vA�WI�vxI�~P���H��I��褁��I��H�E�����H�EL���M����H�T$(L��L���,��u(H�UL��L������H���H�TH�T$(�s,H�D$(H��M��A��P�T$D�t$@H��1��y��H�SH�PH�BH�CY^����f�A�WI�vxI�~P�_��H�����A��I���T$4�t$0H��1��'��H�SH�PH�BH�C���f�H�T$I�wM��1�H���J���H�D$0H�L$(�D$$H�T$$I�wHI�0I��H�D$(PAVL�L$�2��A[A^A��D�pM����Mc֋T$4�t$0H��K�DA��,L�T$H�D$I��1��|��H�SL�T$L��H��H�PH�BL��H�C�	��E��� A�~M��T$4L�L$�,1��t$0A�H��D�T$���D�T$H�SA��H�PH�BH�CE9�u��T$4L�L$�,1��t$0A�H������H�SH�PH�BH�CHcD$$�T$4Ic΋t$0���H�D�t$(E1�H��PL�D	���2��H�SE1�H��'H�PH�BH�CAY1�AZ�T$4�t$0�d��H�SH�PH�BH�CM��������T$4�t$0E����1��fD�T$4�t$0E1��'H��1����I�T$��H�PH�BI�D$D9�|��g����A�WI�vxI�~P����H���w~��H�MH��A�I������B���H�D�	P�����A�WA�wL�����L$4�T$0H��I��A��H��I�� �SC������fDA�W I�vxI�~P�g��I�wH�D$H����H�T$M��1�H��胐���T$4�t$0M���BA��,H��1�A����H�SL��H��H�PH�B�H�C���H�|$�}}���T$4�t$0H��I��A��1����H�SH�PH�BH�C�T$4�t$0E1��'H��1����I�T$H�PH�BI�D$���@A�WI�vxI�~P�w��H���|���T$4�t$0H��I��A�A�1���9��H�SM��A��H�PH�BH�C����fDA�GjA�H��� f��H�E1�H��H��)PH�L$ ���H�SH�PH�BH�CA_ZE��tL�T$I�BL�PL�S�T$4�t$0E1��'H��1����H�SH�PH�BH�C����L�T$jj)����f�E1��'H��1��^��H�SH�PH�BH�CE��������T$4�t$0�����T$4�t$0E1��*H��1�A����H�SH�PH�BH�C�2������ H�=p�&H��1��[��f�A��H��1�A�����H�S�t$0E1�� H��H�PH�B�T$4H�C1����H�S�t$0Ic�H�PH�B�T$4H�CHcD$$����fDH���8���T$4�t$0E1�H�D$�(H��1��I���L�t$L�T$A��t$0�JH��I�VM��L�T$H�PH�B�T$4I�F1��
���I�VL�T$H�PH�BI�FA�A�B(���DE1��*H��1�����H�SH�|$H�PH�BH�C�Tz��A��I���h�����T$4�t$0�H��H��A^A�L�1��y���H�L$H�QH�PH�BH�A�,����H��H��L��M��jH�T$M��H���9Y^���f���v#I��H�E�ј��H�EL����:�����k��AWAVM��AUATI��UH��SH��H�vH�|$I�yPH�T$H��$�L�D$���H��XdH�%(H�D$x1��U#�D$8�E�D$4�Ef��it
f��j�H�E0L�}H��8�D$3�D$<H�D$(H�D$(H��tf�8��CH�EA��H��H�D$@I�A��D
l$3H��E��L�L1�K�T-R�T$D�t$HH�|$�	���I�T$f�H�PH�B)D$`)D$p^_I�D$H����H�CH�D$ I�Ll$ L��E1�H��tfH�l$HH��L��I��L��I��fDH�UH��M��H�4�L��H)�H��H�L��I�WAWL�D$(H�T$ H�|$��H�MXZH9�w�H�l$HL���L$<��ttH�D$(H�|$ H�|$@L�h(H�EH�TH�S�]H��M��L��L��SL�D$(H�T$ H�|$��XZH�D$xdH3%(��H�Ĉ[]A\A]A^A_�H�|$@tπ|$3tLH�|$(tDH��H�EA��j�T$D�t$HH�|$L�L1����I�T$H�PH�BAXI�D$AYH�EH���o���E1�H��L�|$ H��H��L��I�ŐH�SH��M��H�4�L��H)�H��H�L��I�UAUL�D$(H�T$ H�|$���H�^_H9�w������H�x(���H�x(�@�|$3���D$<���fDH�D$ H�\$P����DH��L�LA�1�jL�|$��T$D�t$HL�����I�T$M��L��L�D$(L��L��H�PH�BH�T$ I�D$H�$��AZA[������q H�=��&H��1��U���h��ff.�AWAVAUI��ATUSH��H��XH��JH�t$�2L�L$ H�D$�L$4�t$0H���A�M���D$(E1��D$M���?f��0�FI�������L����'�T$4�t$0L��I��A��1����H�S�D$H�PH�BH�CM��1�H��H��L���ɇ��I�~PH�u���H��X�#�mE1��(A�lj�L��1����C���H�SE1�E1���!
L��H�PH�B1�H�C���D��A���I���:L��1����H�SD��E1��L��A�H�PH�B��H�C1�����H�S�D$1��D$(H�PH�BH�CI��L9d$��H�D$H�@J�,��Ef=������H�|$ H�MH��L�D$ I�vPH��L��L��$��}���I������HH��I��H��M��t�I�~PH�uH�L$8I�����H��X��#H�L$8�D$0�E�D$4L9d$�_���M��H���t�D$H��X[]A\A]A^A_ÐH�|$ �DH��$�H����H�|$�+���1�1��t��I��H�������������f.�H�E(H�������H�x�����H�@(H�f�:������H�|$ H�JH� L�D$ L��$�I�vPL���]���I��I�������L��L���t���D$(H��I��H���[���fDL��H����s��H��I��H���;���fD�E��$��DI�VXH��H�T$HH�L$@�n#H�L$@H�D$8H���l#H�T$HH�t$8H���j���8���DI�VX�����L���$A�I���D$�����|$(����T$4�t$0L��1��A���H�SH�PH�BH�C�D$�3����H���]I�NPH�T$ H��0H9��<����q��H���/���f��T$4�t$0E1��1�����H�S�D$H�PH�BH�C����@H�L$8�nq��H�L$8H���������C���fDH�L$8�&2��H�L$8H�����I�FPH�uL�D$(���H��X�
#L�D$(�D$(�D$0�EL��M�ljD$4H������E�uF�uVI�VXH��H�T$@H�L$8��#H�L$8H�D$(H����#H�T$@H�t$(H���Pi��I�����H�L$(�p��H�L$(H���H�L$(�j1��H�L$(H���AWI��AVAUI��ATI��UH��SL��H���~L�t$@��I��H��tuH��M��H��H��PL��L���4���A�}Hc��7���UL��A���H�D6�uH�$L�L	1���;�H�SH�PH�BH�CH��[]A\A]A^A_�@M�NX�f�UH��AWAVAUI��ATSH��H������H������D��X���D��_���dH�%(H�E�1�H�H�����H�GH������H�F �f����f��h��I�E(H������H���*�f��Y�E��f��n��f��s�Z.H������H�X0L�xH��p���H�XhH��PH��x���I�]8H�������.;��������H������I�E f�87��ƅH���HDž@���H������I�H�xh�������������H��tKI�GH�4��#fDf��u�Q��f����H��H9�tH��f��iu�H����H9�u艽����I�E(H��tf�8Y���������H��p���H��t@H�H��t8H�@������H��f.�H��R��f����H��H9�u扵����H������H��tTH�@HH��tf�8FtD�XE����������H������H���H��tf�89��D�PE����������H������H��tEH�H��t=H������������H�@H���H�f�:it�Bt��H��H9�u創����H��x���H��tCH�H��t;H��x���������H�@H��fDH��R��f����H��H9�u扵����H������t.H������H���H��t�@�iD�HE���\@Hc�����HDž����H�4�H����YH��H��H��H���H)�H���H9�tH��H��$�H9�u�%���H�D$H���H������H�������������M���I�?��I�ExE1�L��h���H��`����Mc�L���MJ�D�I�I��L9�vWI�GJ���f��it�f����*D�qH��h���H��`���H�xPD��A�^���Mc�I��J�D�I�L9�w�H������E��L��h����A�I�S�f����*H������H�XH�� H��@���H���H�CHƅH���H��tf�8F��H���H�C0M�e8L�{H��p���H�ChH��x���H�CPH�������>7��D������H������I�E f�87��!H����������fDH������H�8H������1�H������tH�xH��@�(�n���H������H�@H�Q��@H�@ H�PH�BH�A����D���������@���Ic�H������D��H�D���(���7����E1�I�E(H��t
f�8Y�bH��p���H����H�H����H������L��8���L������L��P����CI�Ex�K1�H��h���I�EPI��H��H��`�������Ic�I��A��I�D�L9+vLH�CH��h���H��`���J��D�xD���@u����Ic�D��I��I�D�H������A����'��L9+w�L��P���L��8���H������H��tUH�@HH��tLH������f�8FD�q t;�X�I����I�uxI�}P��@�#�>��H������Ic�H�D�A��H������H����H�H����H������E1�L��8���H������M��L��h���I�̉G(I�ExD�w$�OH��`���� f�Mc�L����
J�D�I��A��M9<$vZI�D$J���f��it�f���K'D�RH��h����BH�xPD����H��`���I���j���Ic�A��H�D�M9<$w�L��8���L��h���H��x���HDž`���H��t
H�8��H�������8�	H��������H������H���H��t"�f��[��f��m��H�������HH������H���tkH�������H@D�p,H������H�x�V��H����X����I�uxI�}P��@�0�{���H������Ic�H������H�D����%��A��M��tQI�H��tI1�E���fDH��I9v0I�WH�<�f�?iu�H������H������L��H���?���A��I9w�E��L������M��tWI�<$tP1�E���f.�H��I9$v2I�T$H�<�f�?iu�H������H������L��H���ݿ��A��I9$w�E��I�E f�87��I�E(H��t
f�8n�H��@���H����H�8��I�MxI�}PL��P���1�H��h���L������H������L��H���I��H��H�CH��h���H������J��I��D�xD���
���Ic�D��A��I�D�H�������/$��L9+w�L��P���L��H���I�}8txH�����D��E1�M��I��H�������f�I��M9f8vFI�FHB�4���t�H����������L��H�c���L�����I��H������b������M9f8w�M��I���H��t��!��H������H������I���H�{�λ��H�C�@ t�@H������L������1�I�~H���D�H��`���A�EpH��tI�V�A+H���H�H��H�AH��p���H��tH�8H����H��x����8L��x���I�>�'L��p���1�L������L������L������HDž�����|L�R0A�Bt"A�f��@��f��A��@�u
f��z�7�rL��L��x������������������H������1�I���t���H�������H������A�L��H������H�@8+H�������H������H�H�T	L�L�21�R�������I�T$�����M��HH�PH�B�����I�D$1�_L��AXA��p�I�T$L��L��x�����_���L������H�PL��H�BL��I�D$A�E(�u��L������L��L������������M��E��I�� ��'��I�D$I�EL�hM�l$H������H��I9�oI�FH���f��p�r���f��~t����� H�=��&H��1���A��H��`���D��P���譻��Ic֋�P���H������H�D��� ������fDL��p���L������M��tuI�?toM��1�L�������
�H��I9vWI�VL�$�fA�<$iu�D�����������E1�L�������H������A)�H���%��L��L��L��H�������(��I9w��H��������L������I�?��1�L�������fDH��I9vgI�GL�$�fA�<$iu�H������D������E1�L������������D+@$H������A)�H��� %��L��L��L��H�������{'��I9w�fDH�������8���H��&Hc�H�>��Df��9�~���&�H�=��&H��1��5@��DA�����M�����I�H��u
��H����AH����������A��|���fDH�@f�8aH�������;�HD�p Ic�A��H���H������H�D����H��������1��H����������@��8�������I�]xD�L��(���E��H��h���I�]PH�������1��P���H�E�H��H�����H������D)�D��0���M��E��A��f�C�,H��H�����E�_�E�I�FPH��@�	�"H��h���H��������A�����Ic�D��A��H�D�H����������D;�P���u�L��(���M��D��0���D�8���H��������8����H�p���@� ����H��x����H��H��`���H���i��1�H��h�����j��H�;H��(���H����I�}PL�� ���I��1�L��H��0���E��I���DI�H��H9�vzI�GL��fA�8~u�H��`���E�`M�^xL��8���H��0���L��L��P����@D��袷��L��8���L��P���A�@��H������Ic�H�D�I�H��A��H9�w�L��L�� ���E��I��H����1�H�APH��8���I��H��0���H��x�����I��L9;��H�CN�,�fA�}pu�I�u0E�e�Ft!�f��@��f��A��@��t
f��z��H��(���H��h����j��H��8���H��0���D��H�HxH��H��P���譶��A�EH��P����{H������Ic�H�D�A��I��L9;�X���L�� ���L��8���H��h���H�8�� �'H��h���H�xH����L��`���Ic�H��E�t$A���(�H������H�D�H������L�`8�H����H���E1��`��H��H��p���H�8t~L������L������L������L��p���M��L������f�L���h���I�V1�L��J��L������H�PH�BL��I�FI�GJ�4�I���n��M9/w�L������L������H����������H��p���H������H�H��H�VH�PH�BH�FH������H�X0�`���H��0���D��H������H������Ic�H������H�D�D���0���_���H������H�������P���V�������F��������	ЈFH������HDž@����@I�]8�'��H������I�E ������f�87�II�E(H����
E1�HDž����HDžp���HDžx���HDž����ƅH�������C��������f�H��I�u D��X���H�����L������H������AUH�V(� �Y^I�M �f���}f��h�sf��2tTH������H�8H����������y��H�@�Q�p`E1��EH������1����H������H�WH�PH�BH�GH�E�dH3%(�fH�e�[A\A]A^A_]��I�M0H���[I�EPH�q���H��X��"H������I�u0H�
G�&��H������M��H�GD�fH����ǀ��(l��L������E1�D���L������A�L��L���a��D��A���A��FL��1����I�VH�PH�BI�F����@H������I�u H���&D��X���H�@f�>�ǀ�H�����H������H������M��D���uk�������������F1�H������A�A����H������H�QH�PH�BH�A�u���fDL������I�H����������L��I�_����I�I��H�CH����������I�_L���V���I�U I��H�CH������D�b�@X������A�F,���A�F,A�G,���f�:7A�G,�/H������1�H�H��������tH�xH��@�(袐��������E1�1�H������H�@�H������H�S�@H�@ H�PH�BD��H�C1�����H�SI�u0H������H�PH�BI�FL�pL�sH���$I�] �f��T��
f��w�+�������D��1�H������A�A��S��H������L�����L��L������H�WH�PH�BL��H�GH�{�o5��H�����������H����6���H���	H������A��L������A�H��H��L���i���H��P���H��H��t�U��j������D��I��j	A���H�������>�H������H�VH�PH�B^_I�GL�xH������L�xH������H�8H������1�H������tH�xH��@�(�Ԏ��H������H�@H�W��@H�@ H�PH�BH�GH������H�H����������t��H�@H�}�L��M��H������H��H������I���VhH����P`H�E�H�]�L�e�H�E�H�]��PJ��A�F(H��H������A�N,A�G(H�A�F(H���������<t��H�@H�x�WH��H�������F��H������H������H�BH�H����������s��H�@H��H�x��a��H�������H�]�H�E�
L�e�H�E�L�e��I��A�F(H��H������A�N,A�G(H�8H����������s��H�@H�x�MH����E��H������H�CH�8H���������Js��H�@H��H�x�:a��I�M �f�������f�I�}PH�q���H��X���"1���H������H�H��������tH�xH��@�(藌��H������H�@H�Q��@H�@ H�PH�BH�AH������H�8H����������r��I�M H�@f�92�X`�����3���@H������I�E0H�3H���������=r��H�{�(H���H��@���H������H�@H�V��@H�PH�@ H�BH��H�FI�u0H���	��X���M��H���Xe��H������I�E0H�H����������q��H�{�(H���H��@�^���H������H�@H�V��@H�@ H�PH�BH�FH�H��������mq��H�CH�������Sh�P`�����@�]��Q�f��@�v��j���K���H������Ic�H�D�����H�������@����H������Ic�H������H�D����>�����f�H������H��8����,��H��h���H���^����f�H)�H�L���f�I�u0H������X���H������M��H��������c�����H��@���H������H������H�@H������H��@������fDH�������@�H��{����I�?ujH��p���H�8u]H��x���H�8uPH������������H�@�H0H���������H������H�H���
�H��x���H�H���K�������������@H������E�fIc�H�@�@ ��H������H���������E��H�D�������H�������@�=H��`���D�cD�pH�������H E����I�uxI�}PD��C������H������Ic�H�D�A���,�f�Ic�A��H�����H������H�D��~�H��0���D��L�����H������Ic�D��H������H�D���
���1�H������Ic־&�H������H�D�&��
���!���@����H������Ic־*��HH������H������H�D�*�y
����@�CƅH���E1�������HDž����HDž����HDžp���HDžx����G�@H������H�5
�&�����D�����H�@ǀ�H��������VR��H��h���L��P���H��1�D��h���L��(���I��L��8���L�g��I���'H����H9�}dL��H�4�I��I9�t.H�2H��u4��I�UHc��� u�I;}}7I�U H�4�I��I9�u�H�$��D@��u�H�������,���@H��`���L��D��h���L��P���L��8���H�X��HDž����E1�HDžx���HDžp���HDž����ƅH�����H������H���N���H��H������I���<���L������E1ɋ���������H������A�H��L�����������H��^A������H�������L�1����I�W�1�����H������A�A�H�PH�B�����I�G1�����I�WM��H�����H������A�H�PH�B�����I�G1����I�WI�ٹG�����H������A�H�PH�B�����I�G1�A�F(�_��I�WH������H�PH�B�C(I�FL�pH�M�wH������1�H������tH�FH�x@�(衄��I�u0M��D��L������H�@L�������I�V�@@H�@ L��H�PH�BL��I�F�^�������E1�1������L���E���I�VE1�L�������A�L��H�PH�B�����H�CH�XI�^����A��q���H������Ic�H������H�D�D���	���C���H������Ic־���HH������H������H�D���_	������� ����H������H��`���H�F8���H������H�������*�H������f�KD�s H�D�*�	���{� ���f%�f
 f�C�A��Ic�H���������H�C8D�`L������H������A�^I�D��H��`������H������Hc�H�������&��H@�X,A�FI�D�&E�f��h����j��Hc�h�����������E1��1������H����������H������H�VH�PH�BH�F���������E1��1�H��������������H������H�WH�PH�BH�G��H��L������D��X���H�����AUH������H�S(H��M�����ZI�D$Y���@H��������X���M��H������H���[��H�C��A�D$H���������������H�ZI�EPH�s���H��X��"��������C�������A�f��S��H���&��Hc�H�>��H��H��f�M��jH������L�E�H��p���H������)�p���H��)E�H�M�L�E�H�E�H�E����AZH��A[�/���H��H������H����������H������E1ɋ�����������H������A�H������H������������E1�1�������H�������(���H�SE1ɹ�������H������A�H�PH�B������H�Cjj	�[�H�S�������H������A�A�H�PH�BH�CX1�Z�������~��H�SE1ɹ�������H������A�H�PH�B������H�Cjj	����H�SL������A�H������H�PH�B������H�CY1��I^���������H�SE1��(������H������H�PH�B������H�CH�������@(1�����H�S�������H������A�A�H�PH�B������H�C1����H�SE1ɹ�������H������A�H�PH�B������H�Cjj	����H�S�������H�PH�B������H�CH�	^_H������L�AX1�A����H�SE1��*������H������H�PH�B������H�C1�����H�SH�PH�BH�CH�9�^H���)H��S&f��H���$��H��^H��t�j������E1�H��j	������A�H����������������(H������H������H�SH�PH�B������H�C1�AXE1�AY�2��H�SL������A�������H�������IH�PH�B������H�C1����H�SE1�H������������H������H�PH�B������H�C1��A(�*���H�SE1�H������H������������H�PH�B������H�AH�H1�H�K�'�x��H�SH������H�PH�BH�GH�xH��x���H�{H��tH�GH��x���H�xH�E�H�CH�E�H�����H������H�QH�BH�PH�E�H�A���������������E1�A�H������H���������H��M��H��H������H������jI��H���\���XZ�v�H��f�L�E�H������L�����H������H��M��ARH��p���)����)�p���)E�)���H�M�L�E�L������H�E�H�E�HDž����ݾ��H������AYA�������������E1�H������AZH�����H��1��j������A�A�������H����������H�SH��L������H�PH�BH��x���H�CA[H��[tH�PH��x���H�BH�E�H�FH�E�H��tH������H�VH�BH�PH�E�H�FH������,�I�rL���ߚ��������H������H�1H���������
a��H�QH�BH���{���s�H������H���� ���_��H�������5��H������H�7H����������`��H�OH��H������H�A�c���[�H������H��H�������b ��H�������9�H�������H�H����������A��5���������D��1�H������E1��S��H������H�QH�PH�B�����C�H�=ܰ&H��1��R �����*�H�=��&H��1��9 ������H�=R�&H��1��  ���2�������H�=�&H��1�� ��H������薖��H�%H������耖��H�%fDSf�>%H��H��ucH�vH��tH��1���R���[�f�H�
�^�RA��01�L�	��O��H�SH�PH�BH�C�[���R�0A��A�1����H�SH�PH�BH�C1�[�ff.�@��H���H��t�k�������Uf�SH��H��xdH�%(H�D$h1�H�GH��)$H�D$�H�l$��w�H��uSI��1�H��H����Q��H��H���x<��1҅�tH��H���T��Hc�H�|$hdH3<%(H����H��x[]�fDH�D$ H�T$@I��1�H���H�D$8)D$ H�D$0)D$@H�D$PH�T$X�?Q��H�D$(H��tH�T$H�BH�PH�D$8H�D$H�D$HH���M���H�T$H�BH�PH�D$XH�D$�1����o0��ff.�@��SH��hH��H��t�����u&H����%H��0�*�"H���[�=� DH����@��H���H��t�����f���AVAUL�nATA��UH��SH��H�t$dH�%(H��$�1�H� tL�n�L��1��J���Ã����H�T$ �޿�*������z�D$8%�=@�v-���FL�l$PM���1�E1�A�ع�L���^J����I��H���t3�>���L��0L��8Dž@H����腏���D���������8E��u\H�D$H�pH� tH�p��6��H��H�D$H�D$H�D$H��$�dH3%(H����H��[]A\A]A^�D����H����=���H�5H�&H��H��� ��H�t$H����	��H���]H��H�8�
��H�l$�H�=��&H���4��H��H��H������b����L�����a�����H��I���,��H�u�^H��u)H�[�*f��H������H�L�^H��t�1�1�H��L���(&��H��H�������������L�(L���H�������L�sM�������L���L���H�sH��A�� tH�sM��utH��0L��8Dž@�0���fD���I�H��$�HDž8H��0Dž@�����������@���	����H��L���F��H���y�����,�����AWAVAUI��ATUSH��H��H��8H�t$dH�%(H�D$(1��5��H���H�D$H�pH� tH�pH���H����� H�D$H�D$ L��0H�D$L���!�"L��I���&�"H��L��H��H�����%H���M�%L��H��H�����L�%��^H��M��u,L�-ߛ&f��L������I��H�a�^H��t�L�-^L��I�}��D����u-H�L$(dH3%(H���#H��8[]A\A]A^A_��I�}L�����I��H��t�I��A��u�H���H��u�H��`H��pL��0H��8H�L��H�T$L�H��H�L$H9�����H)���H��`I��tQ�H��pJ�4�H���J�<�H�t0I��H)�L��r1��L��H����E��H��`H��I9�r�H�D$H�L$H9�t H)�H���H��H���31��L��H���E��H�t$L��L���x��������~*��ff.���ATI��1�UH��SH���h���H��t
[]A\�DL��H��H��[]A\�v���fD��AVAUI��ATI��H��USH��H�� H�T$dH�%(H�D$1��2���xuH��H���	����tEH���]�H�5Ǚ&H�8���H�L$dH3%(��H�� []A\A]A^�f�M��$�L��� ���H�SH� ��H�sI��$0H�����"H�uL��� H�|$��1��I��$�H�D$H�pH� tH�pL��� H�D$H�D$H��H�D$��"H��H����"H��L��L��H����%L���$�%L��L��H�����������H�s�\�����(��f���AUATL���USH��L��H��(dH�%(H�D$1�H���-���M��H��H��H�}�]H�
���H���%H��I��胜"H��I���h�"L��H��0H����"1���1�L��H���2��H�L$dH3%(uH��([]A\A]��"(��f���H�G����H�G����1��f���H����H�0fH~�H9�tDfH~�H��<������tH��H��u!��fH~�H��H��H���fD�C�ATI��UH��SH��fH�=�]ffH����H�޹ �H�8�.�H��H�hH��t@��tDL�cM��tA��tH���&��H��[]A\�DL��H�����H���&��H��[]A\�DH��H�������ff.���H�wH��of	ff.�@AVI��AUA��ATI��USH�/�]�#��H�0���V��u[1�]A\A]A^�f���,f���_uC��uWH��H�iI�.�Q�VH�Ӏ�t؀�_t�I�$1��H�0I�$I���fD��u[�]A\A]A^�fDE���s���H��I�.H���}_t��͐��H�
��&H���&��t��@����b ��f���H�wH��O ��ff.�@��UH��SH��H��H��H�5��^�.��H�CH��t�tDH�5Օ^H���.��H�CH��t�tH����$��H��H��[]�fDH��H���%����H��H��������USH��H��H�wH����H��H��H���?��H��H��[]�ff.�H��uH�l�]H��@��u
H�G�DH��t2H��t<@��u@��t@H��]H��DH�Y�]H��DH�)�]H��DH���]H��DH���]H��ff.�f�SH��H��@��tb@����H����H��t@��uWH���H��uK�E��H���D$�7���L$1��f.���E�H��[�f.�H����H��t�H��u�H�؃�H��t�H��t��tH���!���H��[�H���H��t�H��������f�1�H9���H��[�f�H����H��tDH��u��f�@��u�H���H��tH��uپ��9+��f�H���DATA��UH��SH�H���8.ukH�EH��D��H���.H�H�E�-�����t9H���T�H�EH��D��H���/H�H�E��������f.�H�m[]A\�fD������t�H��<.t��ƒ�߀�EuKH�U�H�H�EH�PH�UH���JՁ�u�PH�H�EH��D��H�������t�H��</�P���[�]A\�fD��USH��H��H��u�H���1�@��u�H�H�Ѓ�H��u�H���� tSH����H��u\H�CH�H�58�^H���p�H� t7H��H�SH�5�^H���P�H��H��[]�fDH�SH��uH�C �H�[ ��H�S�]H�5d�&H�81���*��f���H����@��u:H��u���
@��u:H�H�Ѓ�H��
�H��H��
H���ǃ�@���f�H��?@����H����H��u�H��1�H9�t3H���f�H��H��?H)�H	�1�H��H�|$�f/D$����@��H����H��t�H��t&H���G���H�G�u$H�H��
H�������f�f�1�f/G��ÐH��?��f.���SH��H�@��uHH����H��t<H��u%H�5~�^1�1����H�����t�[�fD@��u�H���H��
uFH�{@��u/H����H��t#H��t@��tUH�5&�^1�1��E��H�����u��[�fDH��t�H���s����GfT�@&f.�@&v��o���@H���H��
t�H��t�H��u��GfT�@&f.{@&�8����ff.���U�SH��H��H�H��t@��t?H����H��tOH�S�H��t��tMH�Ѓ�H��tYH��H��[]�S�H���H��ttH����H������H���f.�H�
��H��t,H�Ѓ�H��uHH����H��H��[H��]���H�zH��H��[]��fDH�o�G����H��t�H��H��[]�@H�������e���f�H��H�t$@��u3H��uH�L$��!�x��H���@��u"H���H��
u6H�t$�$TH����H����H��u�H�t$�b�
H���DH����H��t�H��t�H��u��ff.���SH��H�@��uPH����H��tDH��u-H�5��^1�1�����H�����������u1�[�f�@��u�H���H��
uNH�{@��u7H����H��t+H��t@��teH�5V�^1�1��m��H�����������t��[�fDH��t�H���c����G�
�=&1�fT�=&f.����\���DH���H��
t�H��t�H��u��G�
�=&1�fT�=&f.����|���ff.�f�H��H����H����H��u���H����H���f�@��uZH���H��t.@��tH����H���@H��
t�H��u�H����f�f�f.G���E�H����@�������@H���H9��q���H��H��f��H��?H)�H	׺H��H�|$�~D$f.���E��9���@��ubH��u%H��H�5‹^1�1����H����H���fD@��tH�����H��u���H����H��
u�fD��f�H����H��t4H��t&H��tH���y���H��u���D�����ff.�@SH����u'H��u*H���]H��H�0�0����tiH��������t]H��[���tH�؃�H��u���DH���H��
t�H�ڃ�H��t�H��t�H��t�H��u�H�{������t�H�C[�H���]H�5��&H�81��#��ff.���SH��H��H�H����H����H��us�v�������H�{�Q
H�e�&�贸H��t&H�ƒ�H��tH��t�tyH���1�����uPDH�y�]H��H�5��&H�81���"��D@��u�H���H���w���f�f.G�y����s���H�{H��1�1ҾQ
[���fDH���H��t�H�������u��{���H��H9�t�H��H��?H)�H��H��H	�H��H�D$�L$f.
�H&������x���ff.�UH��SH��H��dH�%(H�D$1���uXH��u:H���+H��H�,$����H�T$dH3%(��H��[]�fD����H���H��
��H���]�+H�8������H��H��t�H��tlH��H���
�H��]�+H�8����u���T���fDH���H���>���H���]�+H�8�T����"���H����f�H���'����H�؃�H�������H���]�+H�8����t�H��t�H��H����
���f�H�؃�H��t�H���H���\���H�M�]�+H�8����u��?����H��H���$���H�؃�H����H���]�����t��S����������SH��fH�=0�]ffH�(���H�޹ �H�8�s��H�@H��H��H�@���H��[�S�/H�����H��umH�5�&H���N�H��tI1�H�����H�0fH~�H9�tcfH~�H��<������t7H��H��u@[�fDH��1Ҿ
[�@��H��1�[�ՆDfH~�[H��H��H���D[���f�UH��SH��H��dH�%(H�D$1���u|H��ubH����*H���5���t
H����H���*H��H�,$��
��fDH�T$dH3%(��H��[]�D��u[H���H��
��H���]�*H�8�����G�H��t�H��H����H��t�H��uSH���fDH�؃�H���.���H���]�*H�8�d����0H��t�H��H����
�>���fDH��H����
�(���H�؃�H��t�H���H��uH���]�*H�8����u�H���H�������H�9�]�*H�8����������H���7���H��H���L���f.��������H���^���@�������H�U���H��
�v������f�H�؃�H��tH���������.�������DH���]�*H�8�4������������������i��f���t[��tWH����H����H��t;@��u5H���H��u)�Gf.�zH���fP��H���HD��B���f���t��t�H���H��tKH��t�@��u�H���H��u��Ff.�z�H���fP��H���HD����fDH��H9�taH��H��?H)�H��H��H	�H��H�D$��~D$��@H��H9�t9H��H��?H)�H��H��H	�H��H�D$��~D$������H��������H����
������H��@��uZH��u%��
���H��h!��IHD�H���fD@��u2H�H�Ѓ�H��
u{H��H��
H���ǃ�@���DH��?��f�H����H��u�H���H9�t�H���f�H��H��?H)�H	�1�H��H�|$f/D$���U���DH����H��t�H��t.H���/���H�G�u4H�H��
H����������fD1�f�f/G�����DH��?��f.���SH��H�H����H����H��u��%�H�����0D@����H���H����@����H������tqH�{H��t@��t1�1ҾA
[����H���H��u�1�����H�0fH~�H9�tIfH~�H��<������tmH��H��u&[�@H�	�]H��H�5��&H�81��}��D[���f�H��
�R���H���
���H����B���@���1�����fH~�[H��H��H���ff.�f���SH��H�H����H����H��u����H�����(D@����H���H��tR@��tlH������tAH�{H��t@��t1�1Ҿ1
[���H���H��u�1Ҿ
[��%���H���]H��H�5?�&H�81��e��DH��
t�H���Q���H����~���@���m����5���@��H��H����H�����Gf.���H��u$��
��t3H���]H�5�~^H�8H���A���@��t"@��t�H��?@�Dž�u͸H���fDH�H�ƒ�H��tY@��u�H��
umH��
H��H�����DH��H9�t�H��H��?H)�H��H��H	�H��H�D$�~D$f.�zfP���I����w����H��H���H��t"H������fH~��t'H��?������f��1�f/������fDH�H��
H��������S��H������H�zH����H��tlH��H��u$�H�T$H�$��H�T$H�$H�����@��utH���H��t.@��tHH������tH�zH�5"}^H����[�F��fDH���]H�5�&H�81��8���H��
t�H���l���H����@��u��W����1�����ff.�@��ATUH��SH��H����@����H���]H��H�0����������u9���H�؃�H��t$H�5y|^1�1�H���u��H��������H���>H�o�]L� fH�=L�]ffH�D�L�� �H�8���I��H�XH��t	����I�D$L���	��[H��L��]A\���f.�H���H���!���H��H��[]A\�����H���]1�H�0�������/���H���(��H��H����(��H��H�5��&H��H���]H�81����fDH���H��
�	���H�ڃ�H�������H�����H�����H�������H�{�i�����@H��H���������@��t*H��tDH��tN@��u(@��tRH���]L� ���L�e����H�!�]L� �}����H���]L� �m����H���]L� �]����H�i�]L� �M����@��uzH��uH�5�z^1�1����D@��tH����H��u��I���f�H�H�ƒ�H��
uAH��
H��H����@��u���H��h!��I�DH��?��f.�H����H��t�H��t�H��tH���Y������f�H������tH��h!��IH���@�H���fD��AUATUH��SH��H�dH�%(H�D$1��H�}I���zH��H���~H��]H�(H��uwM����fH�=N�]ffH�F�H�� �H�8���H�@H��H�EfDH�����H��H�L$dH3%(�eH��[]A\A]�fD��tSM���
A���LfH�=��]ffH��H�� �H�8���H�XH�����L�e�f�H�H�ڃ�H���MH���M����H���
@H�{L���4�H�[I��fH�=E�]ffH�=�H�� �H�8���H��H�XH���L�eM����A�����L��H���f������@��uH�mH���~������H����H����@����@����H�Q�]H�(H���6������L�����I�$��H����fH�=k�]ffH�c�H�� �H�8���H��H�XH����������f�H�zL��H�[��I��H���������������#���fD������H��H���\������H�!�]H�(�m����fH�=��]ffH��H�� I�ܺH�8���H��H�XA��t��p���fDA��tH��� ������I�$��H��u�M�l$H����H�{L���0�M�d$H�[I��I����H��H���-L�$$�!���H��fH�=�]ffH��H�� �H�8�Y��H��H�XH��u-L�mM������A�������L��H���;����fD��u�H��H��� ��fDM�l$H���]�+H�8�������M�d$I���>���H�����-H��������=�������fDH����H�X�]�-H�8�c������fH�=#�]ffH��H�� �H�8�f��H��H�@�	���fDH��]H�(�}����H���]H�(�m����H���+�L�,$���I���&���D��tsH����H������������H�&�]H�8�-������'���fH�=Y�]ffH�Q�H�� �H�8���H��H�X�C���H�{�-�R�������fH�=�]ffH�
�H�� �H�8�U��H��H�X�.���f�H���]H�(�m����H��]H�8�N���H���]H�8�?���H���]H�8�0���H�\�]H�8�!������fH�=��]ffH��H�� �H�8����H��H�@���fH�=R�]ffH�J�H�� �H�8���H��H�X�������H��H����H�E���ff.�f�@��u,H��u1�1Ҿ�����@��uH���H��
u&�if�H����H��u���
�H����H��t�H��t�H��tH��u����D�{�ff.���AUATUH��SH��H�dH�%(H�D$1��F���H�]I��H����H�G�]H�(H��uwM����fH�=�]ffH��H�� �H�8�Y��H�@H��H�EfDH������H��H�L$dH3%(�mH��[]A\A]�fD��t[M���A���T�fH�=��]ffH��H�� �H�8����H�XH�����L�e�f�H�H�ڃ�H���MH���M����H���
@H�{L�����H�[I��fH�=�]ffH��H�� �H�8�H��H��H�XH���L�eM�����A�����L��H���&������@��uH�mH���v�������H����H����@����@����H��]H�(H���.������L�����I�$��H����fH�=+�]ffH�#�H�� �H�8�n��H��H�XH����������f�H�zL��H�[��I��H������������������fD������H��H���������H���]H�(�e����fH�=��]ffH��H�� I�ܺH�8����H��H�XA��t��h���fDA��tH��� ������I�$��H��u�M�l$H����H�{L�����M�d$H�[I��I����H��H���-L�$$���H��fH�=��]ffH���H�� �H�8����H��H�XH��u-L�mM�������A�������L��H�������fD��u�H��H������fDM�l$H���]�+H�8�������M�d$I���>���H�������-H���S�����=�������fDH����H��]�-H�8�#������fH�=��]ffH���H�� �H�8�&���H��H�@�	���fDH���]H�(�u����H���]H�(�e����H���+�L�,$�u���I���&���D��tsH����H������������H���]H�8�-�Y�����'���fH�=�]ffH��H�� �H�8�\���H��H�X�C���H�{�-��������fH�=��]ffH���H�� �H�8����H��H�X�.���f�H�Y�]H�(�e����H���]H�8�N���H���]H�8�?���H�c�]H�8�0���H��]H�8�!�������fH�=G�]ffH�?�H�� �H�8芾��H��H�@���fH�=�]ffH�
�H�� �H�8�U���H��H�X�������H��H���J�H�E���ff.�f�AWAVAUI��ATI��UH��SH��H��HL�D$L�L$ dH�%(H�D$81�H����H���|H�����H���V��H�������$L���H����M���i�L���$��H�������D$H���H���}H���v�H��E1�����H��A��L���H����M�����L��E1����H��A�NjT$D��L��L������$D��H��H��H�D$��H�|$I����H�D$L��H�L$0��-H�D$0�o�I��H�D$�T$H��D��L��L��r��$H��D��L��H���^�H�èu!H���~���H���H��
�fH�W�]�+H�8�2�����H����H��tH��H����
H��H�D$ H�H�D$8dH3%(�H��H[]A\A]A^A_Ð@����H���H���@��tp1�H�����$L���H���*���H���D$I9��2���L��f��H��?H)�L��H��H	�H��H�D$�~D$f.���f�H��
t�H�������1�H�{���$���fDA���I�$��H����A��tE1�I��A�������H��
t�H������E1�I�|$A������fD@����H�E��H���E@��twE1�L��H��A�ƃ�H���u���H��A�I9��|���L��f��E1�H��?H)�L��H��H	�H��H�D$�~D$�f.�A��DE��<���H��
t�H�����E1�H�}A������A����I�E��H���]A��tw1�I�����D$H���H�������H��A�H9������H��f��E1�H��?H)�H��H��H	�H��H�D$�~D$�f.�A��DE��J����H��
����H�����1�I�}���D$��f�H���W���H�x�-L�D$(���L�D$(���s����J���H���]�+H�8������G���EDH��H�L$0��+H�l$0��H�����@f�f.C�¸��D‰$����f�f�fA.E�¸��D‰D$�����E1�f�f.EA��DE��#���f.�E1�f�fA.D$A��DE��)���A��������*����@�������Z����A���������@���C����!����H���]H�8������H�����H�<�]�+H�8����������H�������H��H����
H���~���f.�H���FI���LA���"A���H���]H�8����f�H���,����H���$H9������H��f��H��?H)�H��H��H	�H��H�$�~$f.��9����H�؃�H���
���H���H��u$H�=�]�+H�8����������H���H�������H���]�+H�8�|���������H���^���H��H���oH���K����H���]H�8�����H�Q�]H�8�����H�!�]H�8����H��]H�8����H�؃�H�������H�������������	����4�@��UH��SH��H��H��(dH�%(H�D$1�H�f�]H�0������H�}H����H����H��uU��C��H������tzH����H�51c^1�1�H���-�H����H�}������H�������\@@��t@��t�� f.�H���H��tT@����H������u������H��H�����H�L$dH3%(�gH��([]�Df�f.G���E��*������t;��uH�؃�H������fDH�}H�L$���H�\$�3�끐H���H��tl��u�H��
t�H�ڃ�H��t�H��t�H��t�H�������H�{�������f�H��
�����H���o���H����r����H�{����������H�CH�}H�L$���H�D$�������H��H9��$���H��H��f��H��?H)кH	�H��H�|$�~D$f.���E������AUATI��UH��SH��dH�%(H�D$1�H���7H��@��t^M����DA���+fH�=�]ffH����H�� �H�8�!���H�XH�����L�e��H�H���H���H���M����A����H��u�H�{L���B��H�[I��fH�=S�]ffH�K��H�� �H�8薲��H��H�XH��t��uH��H�����L�eM��tA��uL��H���p��H����H��H�L$dH3%(�=H��[]A\A]�fDM����L����I�$��H����fH�=��]ffH���H�� �H�8���H��H�XH����������H�zL��H�[�@��I��H��t�������M���V����D@fH�=8�]ffH�0��H�� �H�8�{���H�@H��H�E����fH�=��]ffH����H�� I�ܺH�8�8���H��H�XA��������DI�$��H���;���M�l$H����H�{L���t��M�d$H�[I��I����H��H���-L�$$�e�H��fH�=Z�]ffH�R��H�� �H�8蝰��H��H�XH��u1L�mM���$���A������L��H������
���f.���u�H��H���`���fDM�l$H�$�]�+H�8�������M�d$I���:���H���P���-H���Ӽ�����9�������fDH���H���]�-H�8裼�������fH�=c�]ffH�[��H�� �H�8覯��H��H�@����fDH���+�L�,$��I���F���D����H���$H���)������&H���]H�8�-������?���fH�=��]ffH���H�� �H�8���H��H�X�[���H������fH�=z�]ffH�r��H�� �H�8轮��H��H�X���=���H��H�����H�E�5���DH�{�-�R����������fH�=�]ffH�
��H�� �H�8�U���H��H�X���f�H�!�]H�8����H��]H�8��H���]H�8���H�l�]H�8������fH�=��]ffH���H�� �H�8�ڭ��H��H�@���f.���ATUH��SH��H��t@��t7H� �]H��H�0�e���tH���I����uuH��H��[�+]A\����H���H��u�H�sH�}����H�sH�}I������H��t"@��u\H�}[L��]H��A\���f�H�ѿ]H�:��@H�}H��L�e���H��H���5��[L��]H��A\�V���fDH��t:H��tD@��u@��tGH��]H�:�@H���]H�:�q���f�H�a�]H�:�Y����H�!�]H�:�I���H�ں]H�:�:���f���AUATUH��SH��H��dH�%(H�D$1�H��t@��tQH���]H��H�0�������-H��H���W��H�L$dH3%(�H��[]A\A]��H���H��u�L�kL�eI����L��H���-L�,$�Y�I��L�kH�]I���H��H���-L�,$�+�H��H����H�0�]H�8H��L�������N���DH��������)���L�mL�eH����L��H���-H�$���I��H���Z��L��L��H���|������L���8���-H��軷�����-�������fD@��uH�}�T���f�H����H����@��uF@����H��]H�8����DH������-H���C������������fDH�A�]H�8�����L������-H��������������fDH��]H�8���f�H���]H�8���H�Z�]H�8�}����
�ff.�f���ATUH��SH��H�� dH�%(H�D$1�H��t@��tCH�,�]H��H�0�q���u}�*H��H������H�L$dH3%(�H�� []A\�H���H��u�H�SH�uL�L$L�D$H�KH�}�%�H�T$H�t$H��tV@��u`H�}����DH���������s���H�}H���d��H�}H��I���U��H��H���*���L��H���f�H���]H�8�@H��t:H��tD@��u@��tGH��]H�8�@H���]H�8�m���f�H�Q�]H�8�U����H��]H�8�E���H�ʶ]H�8�6����}�ff.�f�AWAVAUI��ATA��I��UH��SH��H��HdH�%(H�D$81�I����H��us�H��薼��H�������HH���H���hH�����H���b���H���H����1���$	H��H�����I����fD@���~H���H���N@��tPH��u�fH�=�]ffH�
��� �L��H�8�U���H�@H�����H��H���F����H��
t�H���
���H�{����fH�=��]ffH���� �L��H�8��H��H�X��@����H�E��H����f�f.E����fH�=H�]ffH�@��� �L��H�8苦��H��H�XH���1���H��H��H�E��H�L$8dH3%(H����	H��H[]A\A]A^A_��f�f.C���E������@����������f�@����H���<���@����H���
#	H��H���/��I��@����f�H���"	H��H���
��H��H����M���XfH�=0�]ffH�(��� �L��H�8�s���H�@H��H�@H�������@���g����K����H�}�w"	H�}I���"	L��H�����H�}I���"	H�}I���8"	L��H���]��L��H��H���]H�8�X�H��H���=��I��H�E��H���	���H�}�"	H�}I����!	H���L��L��H�����H�}I���!	H�}I���i!	L��H������L��H��H�!�]H�8������@H��
�`���H���m���H�}�����H�E��H���H�����H���N!	H��H���s��I��H���G����6���f��tlM���KfH�=��]ffH���� �L��H�8���H�XH�����L�mM���Q���A���G���L��H������7����H���M����H���X�H�{L������H�[I��fH�=��]ffH����� �L��H�8�8���H��H�XH���j����\����Mf.
ca&��f.
]a&����fH�=��]ffH���� �L��H�8�Ԣ��H��H��H�EH�]H���V������M���H��H������=���DH��H9���H��L��f��H��H��?H��H)�H��H	кH��H�D$�~D$f.���E��D���@A����I�E��H����I�u����I�mI��H���H��H�L$0��-H�l$0���H��fH�=�]ffH�w��� �L��H�8�¡��H��H�XH��t��uH��H�����L�uM���9���A���/���L��H�����������e���H��H�����I��fH�=��]ffH����� �L��H�8�8���H��L�hM���H�]�i���fH�=��]ffH���� �L��H�8���H�XH��H��H������"���fH�=x�]ffH�p��� �L��H�8軠��H��H�X�e����A����I�E��H��������c����H��H9������H��H��H��?H)�H	�H��H�D$�~L$f.
u
&�$������������@I�uH������H�{���I�mH�[I��H�������H���<����-H��迬������������f�A��tH���`�������I�U��H��t�H���A���fH�=I�]ffH�A��� �L��H�8茟��H��H�X�������L�m����f.
�]&zuH�����H���[���@I����H���E���<H���H���,�k�l$f(��L$�Z����T$�L$�Y�f(��T$�[����T$�L$H�0�Y�fH~�H9���fH~�H��<��������I��H���qH�0fH~�H9�t+fH~�H��<��������H��H�������f(��0���H��fH�=�]ffH����� �L��H�8�(���H��L�hM���U���A���K���L��H������;���fDf(�H�|$(H�t$ �E���D$(�d$ H�0fH~��d$H9���fH~�H��<��������H��H��ucH������H�T$H��H�0H9�t4H��H��<������tkH��H��uH��H�����I�����D$����H��������H���f(��L$����L$I���r���A��������H��H��H��H���H��H��H��H���?���H��I��I��I���'���H��H��H��H���N���H��f��t$H9��u���H��H��H��?I)�L��H	�H��H�D$�S������fH�=��]ffH���� �L��H�8�B���H��H�@L�h�}���fH�=Ʃ]ffH���� �L��H�8�	���H��H�@�;���f�ATI��UH��SH���u6H����H�N�]H��H�0������TH���s������D@��u/H��u=H��]H��H�0�[�����H���;������H��H��L��[]A\��@����H���H��u������tH�؃�H���V����f�H���H��
�h���H�ڃ�H���X���H���N���H���D���H���
���H�{詻���������H�[� ����H�E��H��
�<���H���H���,���H���"���H������H�����H�}�H���������H�m��H��]H�5%V&H�81���ff.�@��AUATUS��H����~eI��H�.��uQH��A�����H��uZH���]H��H�0������tH��謻����uKH���]H�5�U&H�81��������������fD@��u:H�E��H��
u?���uL������H��H��H��L��[]A\A]�#�H���H���V����H���H��t�H��t�H��t�H���2���H�}�������!���H�m�L�n@�������D��SH��H��H�H����H����H��u[��q���H����H�{��uvH����H���H������@���H����H�{���H�sH��[�	@����H���H���6@����H��H�{����t���H�SH�у�H��t"H��������H���H����H�SH�у�H����H��t
����@H��t��SH��1�1ҾA
H��[�}��DH��
�b���H������H��������H��H9���H�{f��H�SH�у�H��t0H��t	����H�SH�у�H���Y���H��t	����H��[�Df�f.G���E��L����@��t@���V����fDH���H��t,@����H�����<���fD@������e����f�f.G��D�����@H���H���]����6���H���H�������1�H���&��H��[鼫��@H���H�������c���H���H���P�������H��
�L���H���z���H����}����H��H9�tAH��H��f��H��?H)кH	�H��H�|$�~D$f.���E����f�H�{�j����H��H��f��H��?H)�H	�H��H�|$�~D$f.���D����ff.�f�@��u,H��uH�5C^1�1����D@��uH���H��
u&�)f�H����H��u���
�H����H��t�H��t�H��tH��u�����D�˟ff.���AWI��AVAUATI��UL��SH��HdH�%(H�D$81�H�>�]H�0������NL���H���VM���A����L���S�������A���zI���WM��A����I��!������	I�o1�H��$��H���������9���L��H����
I��Hc�L��H�|�b�
�H���
H���
���H��Q&Hc؋څ��HL��t1����D�������t�����E1�L�����L��H��H���2���H��$�H�T$8dH3%(��H��H[]A\A]A^A_�DM������E1�H�ͤ]L��H�0�������L��������M��tA��uI�$��H��
�RL�����L��H�����L��H���P���H�L$0�H�ニH��L�d$0�q��L��H������H��H�������.���fDM���S���M��A���F���I�$��H��
�/���I�$��H���HM������L��H�����M�oI�_L��H�\$ L�l$(��������H�|$ L���
H�T$(H�D$ H��L���Y���H��豧�����@I�$��H���l���I�$��H����M�������A���b���I�$��H���Q���I�|$H����H���<���H��t
@���v�i������ ���M�d$�����A�������I�$��H������0I�|$�n���M�d$�d���f.�I���������I�o�������L����
H��H�l$0I���^�
L�D$0��*L��H��L�D$���L��H���
L��I����
L�D$H�������L��L����*H�l$0�A��I�����f�1��Y������*����L��踨����H�������������L��L��萱������A���a����B���f�L�����L��H�����I�|$H��H���m����H�\$(I��H�D$(H��H�D$�
	I�|$H���A���I��I���wL��H�L$0��-L�l$0�X��I��L���	H�t$�H�\$(I���6
	I�|$H�����I�t$H��H���ٶ��H��H�����L��H��裧��L��H���h�����I�wI��������I�o����DH���H��������u���L���H���I�WI�wH��蘤���k���H������H�����DL���p��I��� ����L���X���I������L���H��H��L&H������f�L���(���H��L&H�����f�H���8������oH�D$(H�D$H�D$ H�D$H�D$0H�D$H��H���aDH��H��H��?H��?H�HŃ�H�H9�����H�L$L���-L�t$0���I��H�—]�*H�8蝚�����H��tH���UH�޿��
H��L��H��L�����H��I��H��?H��H��?H�T
H��H�H9��oH��L��L�����H��H��I��賴��I��I���F���H����H��]H�8�-������@�������I����I�H���ץ��������I�o����H�|$(L���
H��H�D$(@������H�t$ �����H��H�T$ H��H�t$(H�����@H���]�*H�8�d�����tH��t*H�L$��*�H�\$0���H�����@����fD�uH�x����H����I����A��ufA����H�e�]H�8����DH��DL�L$L�D$L��H��H�t$(H�|$ ���H��H�������H�T$(H�t$ ���DH���]H�8�~����H�q�]H�8�n����H�1�]H�8�^����H��]H�8�N����L���H���p���L��I����
I������H��u!H�	�]H�8�-������������c����uH�x��H��t?I��tEA��u'A��tEH�^�]H�8�H�����H��H�D$(�"���H�Ք]H�8�H���]H�8�H�m�]H�8�H�)�]H�8�s��������������USH��H������H��u%H���
���H��H��肽��H��H��[H��]�1�������H���H��
��H���/�
H��H�H�ƒ�H��
u=H��
H��H������H��h!��I���HD�H��H��[]����f�H�؃�H����H��tjH����H��訄
�fDH��H��?�
H����H�؃�H������H��耻
H��H������H��H��[H��]�D���@1�f�f/C���A���DH�ڃ�H��t�H��t�H�������H����H��H���	�������@H�C�tH��?����@H�H��
H�������H���H9�����H��H��f�H��?H)�H	�1�H��H�\$f/D$�����f.���USH��H������H��uH�5.6^1�1�H���"���H���PD��t#H�؃�H��u�H���߶��H���-f.�H�H�ƒ�H��
uaH��
H������u2�H����H��H��[H��]�Կ��@H���أ����t�@H��h!��I��@H��H��?��H�؃�H���i���H���_���H��t�H���!���H�����H���y���fDAUI��ATI��USH��H��H�GH�ƒ�H���1H����H���8�
��I�}A��H��H�������H�5�|)H�[>)HD�H��蘘��I�}��H��A��H��H���^��H�CH� tH�CH�S�D���0��	�H�ߺH�5��&贵��H��H��[]A\A]�fD�t��T���H��?���R����H�(H���H��t!�u�H��
��H��H��
H�������@I�}f.�zAfP��t9A��H��H�����H�5�{)�����H��H�H9����A��H��H���b��H�52=)����fDH��tJH�������H�h@��tvH��?@�����f��H�5��&H��蜴�������1�f�f/@@���F���@H��H��H��?H)�H	�H��H�D$�~D$����H�mH��
H�����z���ff.����S1�H��H�=��)�ڀ��H�C�]H��[H��������U�H��H�=7�)SH��袀��H���]H��H��H���]���H�ߺH�5O)蹳��H��H��[]�ff.�@��H��t@��t	1��fDH���H��u�H�GH��t{���H�PH�FH��uvH�?�]H�H9�u�H�GH������
H�PH�FH����H�
�]H�H9�u�H�������¸��u1�H����H�ٖ]H��@�uDH�@�fDH���H���$�up<�7H�1�]H��B���f�H����H�����u(<�H���]H������H�Q�]H��+����H�q�]H�����H�a�]H�������uDH�@����H����H������<�H���]H�����DH����H�����u}<��H�Q�]H����f�H���]H��J����H���]H��M����H�a�]H��*����H�Q�]H��-���H�
�]H�����H���]H�����H�t�]H��5���H�e�]H�����H�6�]H�����H�'�]H���H��]H����H�ٍ]H�����H���]H�����H���]H����ff.���ATUS����H��H���������L�f��uIH��t����H�؃�H�����H�9�]H��H�0�~�������H���^�������A��uJM��tA����L���H�����H��]L��H�0�.������HL���������8fH�=ގ]ffH�֥��H�� �H�8�!���H��H�XH���C���/�5H���x���H��fH�=��]ffH腥��H�� �H�8�Ѐ��H��H�XH����H�EH���P���H��[]A\��I�$��H��
�(fH�='�]ffH����H�� �H�8�j���H��H�XH��t	���|L�eA��u�L��H���P���H���ؼ��H��[]A\�H���H��
usA�������fH�=��]ffH誤��H�� �H�8���H��H�X�@A�������H��H���ީ��L�eM���p���H���Y���H��[]A\�H�ڃ�H��t�H���w���H���m���H���H�������H�{�H����������H�[����L���H������H�������H�������H������I�|$����������M�d$�������>���H���]H�5�:&H�81����fD��UH��SH��H��dH�%(H�D$1���umH��uNH�w�]H�8�*肋��H���*H��H�$�9���H�T$dH3%(�$H��[]�fD@����H���H��
��H�?�]�*H�8���������H��t�H��tAH��H��膡
�@H�9�]�*H�8�܊������H���f.���M���fDH����H����H���H���H�������:H��]H�8�H����H��tLH���H��uhH�Ɍ]�*H�8�<������H���j���H��H���ϓ
���f.�H���]�*H�8�����u���O����H���H�����H�{�*�ʉ�����@���H���6�����H��H�����7���H���]H�8�@H���]H�8����H�A�]H�8����H�؃�H������H��������������f�H�Ɋ]H�8����|���H��������&���ff.���AUATUSH��H��dH�%(H�D$1����H�{H��I��H��tC@���H����H���!I��fD@���NH����H���dfDL��� ���H�{I��H��t4@����H����H����@����H����H����H���آ��H��H������H�[H���@����M����A����f�fH�=Ȉ]ffH���H�޹ �H�8�{��H�hH��@���L�c���H���H���H����H�����;��H��H���/H�$�J���H�{I��H������@�������H���H���PH����H��t
H��������EH�����DH�	�]H�H�����DM���wfH�=χ]ffH�Ǟ��H�޹ �H�8�z��H�@H��H�C�H��萶��H��H�t$dH34%(��H��[]A\A]�fDH�G������H��H�H�����H�{I�����H�EH���H���lH�E��M����H����f�H�}L�����H�mI��fH�=��]ffH���H�޹ �H�8�8y��H��H�hH���8L�cM���#���A������L��H�������	����H���H����H����H����K�uwH��H���/H�$�^���H��H�{H���.���@������H���H���4H����H��ux�cH��H���؟��H��H����������H��H�H���y����fDH����H�������[���H�k�]H����H��t�H���b���H��H�����������H������I�����fDH���4������f�L�����I�$��H���fH�=;�]ffH�3���H�޹ �H�8�~w��H��H�hH���j����o���f�H�H��贞��H��H��������H�G�\����H��_����H�zL��H�m萛��I��H������@���n������D@�������H��H��������fDH���]H��b����fH�=X�]ffH�P���H�޹ I��H�8�v��H��H�hA��t�����fDA��tH�������;���I�$��H��u�M�l$H����H�}L�����M�d$H�mI��I����H��H���-L�$$豫��H��fH�=��]ffH螚��H�޹ �H�8��u��H��H�hH��t@��uH��H���ܟ��L�kM������A�������L��H��躟�����DM�l$H�|]�+H�8�W�����tSM�d$I���J���H��謍���-H���/������I����(���f�H��]H�����H�р]H������H���+�L�,$赪��I���H�i�]H��������fH�=��]ffH茙��H�޹ �H�8��t��H��H�@����fH�=_�]ffH�W���H�޹ �H�8�t��H��H�h@�������H��H��薞��H�C���f���AUATUSH��H��H�odH�%(H�D$1�I��A����H����H��]H�8�*��H��H���*H�,$訩��H��H�[I��A���H���CH���]H�8�*觀��H��H���*H�$�^���H�����H����H��H���+H�,$�0���H��DH�T$dH3%(H���H��[]A\A]�fD@���&H�E��H��
�eH�&}]�*H�8�������YH������H����H��H���j�
H�[H��I��A������fDL�%�|]�*I�<$������3H���yH���/H��H����
H����@��tKH�؃�H���H���yH����M���V����H���]H�8�fDH���H��
�X���H�؃�H����H���H����H�q�]�*H�8��~������H����H��H���w�
H���4��������H���H��
��H��{]�+H�8�~�����fH��tsH������H��H���h�
H������H���]�*H�8�L~������H���f.���Q���fDI�<$�+�~���������H�����f�H���H��� H���H���,M����@����H�B�]H�8�7f.�H���H����H�E��H����H��]�*H�8�{}������H���9���H��H����
H�����fDH��]�*H�8�<}�����X���������H���H����H�{�*�
}�����[���H���Q���H�	z]�+H�8��|��������U���f�H�I]�*H�8�|�����A����	H�������@��������H�E��H���'���H�}�*�y|��H���~������v����2���f�I�<$�+�R|�����n��������H���]�*H�8�,|��������H���"���H��H�����H���|���H�؃�H���~����H�i~]�+H�8��{����t_�H���n���H��H���ۇ
H���[���H�ڃ�H��t�@H��u0H�~]�+H�8�{����u�H�������������H���H�����H��]�+H�8�L{��������H�����H��H���?�H�������H��H����H���8���DH�x]H�8�v���f�H�x]H�8�����H��}]H�8� ����H��}]H�8�����H��y]H�8�����H�qy]H�8����H���H������H�������@����������H�؃�H���h���H����������F������f�H��{]H�8���H��{]H�8�'����m���H�؃�H���s���H��������������H����P���H��������'���f���AWAVAUI��ATUSH��H��(dH�%(H�D$1�H���W@���EH�N~]L��H�0蓦�����LA����H�{H�l$��H��L�l$�1���H���YH�{H���L�l$I������H���3I��H���H�]H�M���DA����M����
A���'	I�E��H���
fH�=�y]ffH覐��� �H��H�8��k��L�`M��t
A����
L�hf.�A��uH��L��H�D$�ʕ��H�D$DH��H�D$�C���H�D$�:f�H���H�������H�CI�}A�H�ƒ�H����H��t���H�CA�H�ƒ�H��t_H��t���I�EA�H�ƒ�H��t<H����H��A���H��t!E1�H��t@��uH�E1��H��A��f��[��I�}H���O��I�ƨ�$H����H�l$H�l$�L��H��>�<���1�H��������@H�|]1�H�0�G��������L��H��蟋��H�L$dH3%(��	H��([]A\A]A^A_�@����H���uH�������r����H�Ry]H����f.�A����L���H���%���fDH�5a^1�1�L���]���H�������@������f.�@����1�H9�H�l$��I�}I�E���yH���H�D$����H��H��I��贐���H���Ǎ��I�}H��蛐��H�{L��I��茐��H�{H��蠍���H��H��L�|$覞��H�{L��I���W���L�sH��H����H�T$L��H���-�l���I��H���L��L�|$�O���H��E����H���jH�K{]H�8H��L������!���H���H�����������H���H���x����!���I�E��H��
�����L���H���~���H���t���H���j���H���A���I�}�؈���L���H�|$H��H�Ǿ膝��H��H��I���8����+I��H��q]H�8�t������I���ZI�}����H�{L�kL��I�����L��H������H���H��L�|$�	���H�{L��I��H�CH�D$豎��H�|$I����H�D$H�D$�R�����uH�{���f�H���fH���\��������H�Cv]H�8�[����uTH���H��
��H��L��H�l$�f
1�H��������+���@L���xH��I���mH����D��H������H��L��H�l$��d
1�H�����������H�[�
����L�����
H����������H���H���@�������H��o]H�8�y���f�L���H���m���H���c���H���!���H��L���ArH��L��H�l$H���~q��1҅����)���f�H�qu]H��T����I�$L���H����I�$��M���lH����f�I�|$L�����I�l$I��fH�=�r]ffH���� �H��H�8�6e��H�hH��t@��uH��H��H�D$�'���H�D$L�hM���5����P���M����fH�=�r]ffH臉��� �H��H�8��d��H�@H�@�
���D�+H���L�|$�<���H�����@H����H�8w]H�8�-�Cq����������$���fDM����H�w]H�8�-H�T$�q��H�T$���h����F���@M��A����fH�=�q]ffH諈��� �H��H�8�c��H�@����f�H�zL��M�d$�O���I��M������A�������(���@H�qs]H�8������uH�x����A��u@I�~�4���H���sI����A���PA����H��r]H�8����I���ZI���_A���7A���iH�kr]H�8����A��t:H�������fH�=�p]ffH萇��� �H��H�8��b��L�`���f�I�U��H��u�I�uH����I�|$�+���M�mM�d$I��I����L��H���-L�l$����I��fH�=p]ffH����� �H��H�8�Sb��L�`M��tA��uH��L��H�D$�D���H�D$L�pM���r���A���h���H��L��H�D$����H�D$�N���fDI�u��j���M�mI��I���D���L���z���-H���n�����D����"����H�Am]H�8�����H��k]H��D����fH�=(o]ffH� ���� H��M��H�8�ha��L�`A�������H��L��H�D$�Z���H�D$�.���H��l]H����H��o]H�8���H�{o]H����H��j]H�8���H��p]H�8�x���H��j]H�8���H��p]H�8���H�hl]H�8�{���H�Yl]H�8�<���H�o]H�8�]���H�o]H�8����趝��fH�=.n]ffH�&���� �H��H�8�q`��L�`A�������H��L��H�D$�c���H�D$H�@����AWAVAUATI��USH��H��(dH�%(H�D$1�H���'@���H�~q]L��H�0�Ù�����A����H�{L����~��H���H�{L��H���~��H���I��H���H�[r]H�H���'@���}M����	A���JI�$��H���A	fH�=m]ffH���� �H��H�8�D_��H�hH��t
@����L�`DA��uH��L��H�D$�"���H�D$DH��H�D$蛛��H�D$�2�H���H������H�CI�|$�H�ƒ�H����H��t���H�C�H�ƒ�H��t`H��t���I�D$�H�ƒ�H��t=H����H�����H��t#1�H��t@��uH�1��H��@��fD���I�|$I�����I�Ũ�#H�����H�L$�>L��L�t$螓��1�H��������fDH�ao]1�H�0觗�������!L��H���~��H�L$dH3%(��H��([]A\A]A^A_�@����H���eH�����������/H��l]H����f.�A���nL���H���U���fDH�5�
^1�1�L��轒��H�������@����)���f.�A����1�L9���I�D$I�|$���tH��H����{��H��H��I���#����H���6���I�|$H���	���H�{L��I�����H�{H������L��H���{��H�{L��I���ԃ��L�kI��H����L��H�L$��-L�|$���I��L��L���9{��I�Ņ���H����H��n]H�8L��L��耨���L���H���H��������>���H���H��������H���I�$��H��
���L���H������H������H������H���i���I�|$�_|���s���f.�����H�{�S���fDH���`z��H��H��I��貂���+I��H�+e]H�8�h������I���dI�|$�z���H�{L�cL��I���g���L��H���|��L��H����y��H�{L��L�{I���>���I��I���n���M����A����I�}�-�g�����d����@���H���FH�����������H��i]H�8�P����udH���H��
��L��L���Z
1�H��������K���f�L���L��I����I�����DH��l]H�8�G������H������L��L���hX
1�H�����������H�[�'����L����v
H�������,���H���H���P�������H�ic]H�8�^���f�L���H���m���H���c���H���2���L��L���eL��L��H����d��1҅����9����H��h]H��q����H�EH���H���|H�E��M����H����f�H�}L���T}��H�mI��fH�=ef]ffH�]}��� �H��H�8�X��H�hH��t@��uH��H��H�D$虂��H�D$L�`M���O����j���f�M����fH�=�e]ffH�|��� �H��H�8�BX��H�@H�@�%���D�+H�L$��L�t$認��H������f�I����I����A���{A����H�!g]H�8����f�L����:���fH�=Le]ffH�D|��� �H��H�8�W��H�@�Q���f�H�zL��H�m��{��I��H����@�������Y���DH�g]H�8�&����A��t:H���P���fH�=�d]ffH�{��� �H��H�8�W��H�h����f�I�$��H��u�I�t$H����H�}�[{��M�d$H�mI��I����H��H�L$��-L�d$�I���H��fH�=>d]ffH�6{��� �H��H�8�V��H�hH��t@��uH��H��H�D$�r���H�D$L�hM���H���A���>���H��L��H�D$�F���H�D$�$���@I�t$��z��M�d$I��I���B���H���?n���-H����b�����D���� ���DH�qa]H�8����H��_]H��!����fH�=Xc]ffH�Pz��� H��I��H�8�U��H�hA�����K���H�a]H�����H��c]H�8�L���H�H_]H�8���H�e]H�8���H��`]H�8���H��c]H����H��c]H�8�b����7���fH�=�b]ffH�y��� �H��H�8��T��H�h@�������H��H��H�D$��~��H�D$H�@���f���ATUH��SH��H��H����@��tH�f]H��H�0�]���������t
@���H�؃�H���.���DH���H���H���?H��H����h������H��1�[]A\ÐH���H���q���H�}L�c@���6H����H���VH���3L���H���=M���|L���Th����t�H�sH�}�l���z���fDH�!e]1�H�0�g������7���1��Hu�����(���H�}H���Dl�����@���H�}�3t�����/���H���[]A\�DH���H�����H��耄��H���D$�r����L$1��f.���E�����fD@�������H�E��H��������H���t�����K����K���A����H����H��t@������H���H����������L���D$�Ճ���L$1��f.���E����f�1�H9�������A���z���I�$��H���i����1�I9����_�����SH��H�� H�dH�%(H�D$1��;����tGH�H�{H�$�'����tCH�H��H�D$�O��H�T$dH3%(u(H�� [��H�������fDH�������豎�����H���c���H��xH��������?H��H!�H�D��H��H��H	�H�D�f���ATI��UH��SfH�=�^]ffH��u��� �H�5�]]H�6H�8�Q��H��H�hH��t@��tDL�cM��tA��tH���}���H��[]A\�DL��H����z��H���]���H��[]A\�DH��H���z�����AVAUATI��UH��SH��dH�%(H�D$1�H�#]]H�H���/@��taH���hA��uI�$��H���IfH�=�]]ffH��t��H�޹ �H�8�P��H��H�hH������H���H����A���0H���-H�}L���Qt��H�mI��fH�=b]]ffH�Zt��H�޹ �H�8�O��H��H�hH��t@��uH��H���y��L�cM��tA��uL��H���~y��fDH������H��H�T$dH3%(��H��[]A\A]A^�@H������fH�=�\]ffH�s��H�޹ �H�8�
O��H��H�@H�@�DfH�=�\]ffH�s��H�޹ �H�8��N��H��H�hH�@�O���I�$��H�������M�l$H����H�}L���s��M�d$H�mI��I���UH��H���-L�$$���H��fH�=�[]ffH��r��H�޹ �H�8�4N��H��H�hH����L�kM�������A�������L��H���x�����DM�l$L�5�W]�+I�>�Z�����M�d$I���S���H����@���UH����H����@���5@���H��\]H�8�-�IZ���������fH�=	[]ffH�r��H�޹ �H�8�LM��H��H�h����@������H��H���;w������fDH���H��_]�-H�8��Y���������fH�=�Z]ffH�q��H�޹ �H�8��L��H��H�@���fDH���+�L�,$�E���I������D@��t2H����H����@������H�UV]H�8���DH�}�-�"Y��������fH�=�Y]ffH��p��H�޹ �H�8�%L��H��H�h���H���2���fH�=�Y]ffH�p��H�޹ �H�8��K��H��H�h�K���fDH��[]H�8�F���f�H�QW]H�8�.����fH�=HY]ffH�@p��H�޹ �H�8�K��H�hH��@�����L�c��H��Y]H�8����I�>�����u���D��USH��8H�l$ �$f(�dH�%(H�D$(1�H���L$���f.z	&�f(��i	&��E�f.c	&��E„������L$�wf��f.������YD$ H��蕙��f��f.�����H�0H�$H9��:H��H��<��������H��H���H�L$(dH3%(��H��8[]�fD�Y
�&H�|$H�t$f(�腆���$�L$H�0�Y��Y\$fH~�f(�H9���fH~�H��<�������<H��H����H�0fH~�H9���fH~�H��<��������H��H���vH�D$(dH3%(��H��8H��[]�Dn��@�YD$ H���T$�,����T$�f.���E�8�t�<$fW=F�%�<$H�0H�$H9���H��H��<�������H��H��u}H�D$(dH3%(�H��H��8[]�m��@�4$fW5˵%�4$�����H��H��H��H��H�����f�H��H��H��H������@�$�>C��H���q���fDH�D$(dH3%(ut�$H��8[]�C���$�C���$H���P���f�f(���B��H���y����H��H��H��H���^���@H��H��H��H�������������l��f������}l��ff.�f���H�5T]H��H��H�8釫���UH��AWA��AVAUI��ATSH��H��XH�}�dH�%(H�E�1��e��H�pH����mH��H�E���e��H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u���UH�E�H�L$H�E�H���I��L�u��`i��H��I��L��	DH�}��7H��H��H��A�Dp u�vՁ���I�vA�H�}�H�u��r��߃�I@����H�E�H�U�D��H��H�U�H�E��J`���Å���H�E�L�����l��I��H�E��0���߃�I����@��@��Fը���L�E�A�0H�E�H�E�H�PL�E�H�U��@��߃�I<��H�U�H�}�D����_��L�E������aH�E�L����Vl��H�U�H�����߃�I<���L��1��_j��I�E�if�H��1�<-H�U�@��H�4�������.j��I�EH�E�I�$�0H��Dq tH��H�E��0H��Dq u����A!�A��A��H�}��w�����H�M�dH3%(��H�e�[A\A]A^A_]����<IuAH���H�U��o����H�PH�E�H��H��H�E��XO��H�]�I������@<Jt��*����H)�H�L����f.�H��L��H�E�����H�E�L����k���H���$i��I�E�+����L���i��I�E����f�@��-@��@��H�4�����H��L��H�U���h��I�E���H�PL�E�H�U��@�PՁ�u
A�H�E�H�E�H�U�H�}�D��L�E��]��L�E���H�E��A�8����L��L�E��Qb��L�E�A�T�I�$�DP���L��� j��L��H����S��I�E���I����
����L���'h��I�E�.����Y���f�S��H�� H�|$dH�%(H�D$1��?S����t;H�|$�f��H�T$�H��������tGH�D$H�L$dH3%(uOH�� [�H�|$�H��tH�T$�H���?�����u���H��T]H�T$H�5Q&H�81��7������f�AVAUI��ATA��UH��SH��H��0dH�%(H�D$(1�H���?@����H���@���1H��tMH�؃�H��uH���H����H����@��uH�E��H���H��t
����@L�5YS]I�6H��$ufH���{�����0H���xc����� H���K�H���H����H���K���H���Q���fDL�5�R]1�1�I�6H���2{�����bH�\$E��u0@��u*�H����@���H���H����f�H�l$���H��t�@������H�E��H���H�������H�E1ۃ�H����H�}H����H������H��t
@���y�|a���������H�m���H��D���]���H��H������fDH�{H����H���J���H��t
@�����a�����.���H�[H���*���H�������f.�H�݃���L�5�Q]H��1�I�6��y���������I�6H���y���������H���a����tH���a�����o���H�rL]��H�8�PU��H��H���g��H��H���d���;�I�6H���Uy������H�\$�H�D$H�t$L���M���H�L$(dH3%(��H��0[]A\A]A^�@H���H���H���H��H��$t�H���H��t H��t
@���$H����_����H�؄�u�L�5lP]I�6�z���@H��D�����H��H���H���H�������H���>������������f�E����1�H��H�=�U���N���H�D$跑��H�D$����DH���H���x����4���H���H���.������H���H���6����r���H�U��H��
���H���H������H������H�����������fDH�E��H����������f.�H�
x�%H�v�%�H���ei���C����z��ff.���AUA��ATUSH������D���e��f�D�g�H��Ic�H���m�������H�]A���_�$H����f����/H���QH���b���/���_H�:L]H�H��I]H�8H9���H����H����H��D��H��H��[]A\A]�(����H���HJ��E���H�]A����H�mA����A�H��t�H���J���A��H���.���H��N]H�H��H]H�8H9��]���H��$t!H�8H���T���fDE�����H��H��[]A\A]�@�$�{���fDH�S����E���J���H��E]H�����H�eH]H�vK]H�H9
u��p���H�2G]H����H��I]H����E������E1����H�E]H�5M�%H�81�����ff.���H����~]I��H���tIH�V��uIH����H��t��u�H��L��H�����H��D]H�5�%H�81�蠁��1ɺ$뾺��c�����SH��H��dH�%(H�D$1���J���H���B�1�H��H���%�H�$H�L$dH3%(uH��[��w��fD����J�����H��(dH�%(H�D$1�H��F]H�<$�H�t$H��H�����H�L$dH3%(uH��(��.w��ff.���SfH~�f(�H�0H��H9���fH~�H��<������tWH��H��u`H�0fH~�H9�tlfH~�H��<������txH��H��uIH��H��[�J��@H��H��H��H��H���@f(��T$�)4���T$H���fDf(��4��H��H��H��[�_J���H��H��H��H��[H��H���<J��ff.����AV�H�=��%AUATUS�c���H�=/�(H�h�]��b���H�=�(H�H�]��b���	H�=��(��b���H�=*&�b���H�=��%H��]�b���H�=��%H���]�b���H�=t�%H���]�ib���	H�=Z�%H���]�Qb���H�=L�%H���]�9b���H�=@�%H�f�]�!b��H�-jI]H�=��%H�D�]H�u�SP��H�|D]H�5%^��H��H��:}��H�H����H�_J]L�-hG]L�%�F]H�8H�5��%�*���H�H���n���H�xH�5�&����H�;�����H�G���H�5��%�T��H�;�����H�,���H�5S�(��S��H�;�����H���H�5u�%��S�������H�5y���H�=��%�6��H��H]H�;H�H�pp�w���H�;H�5�O)�x���H�;H�5p�%�i���H�;H�5 �%�Z���H�;H�5�%�K���H�;H�5�%�<���H�;H�5�%�-���H�;H�54�%����H�;H�5��%����H�;H�5��%����H�;H�5��%��H�;H�5g&���H�CB]H�;1�H�5�%�jM��L�5A]H�;1�H�5��%L���OM��H�;1�L��H�5��%�;M��H�$H]H�;1�H�5��%�#M��H��C]H�;�H�5��(�M��H��?]H�;�H�5+)��L��H��C]H�;�H�5Sf&��L��L�5G]H�;�H�5��(L���L��H�;L��H�5��%�L��H�;�H�>��H�5��%�L��H��B]H�;�H�5�%�gL��H�;�H�X�H�5l	&�LL��H�;�H��~��H�5n�%�1L��H�;�H��e��H�5��%�L��L�5_C]H�;1�H�5��%L���K��H�;1�L��H�5R�%��K��H�;1�H�+���H�5D�%��K��L�5PC]H�;1�H�5��(L���K��H�;1�L��H�5�%�K��H�;1�L��H�5�%�K��H�;1�H��K��H�5��%�tK��H�;1�H��K��H�5?�(�\K��H�;1�H�`���H�5d�%�DK��L�5=E]H�;1�H�5��%L���)K��H�;1�L��H�5��%�K��H�;1�H��H��H�5N%&�J��H�;1�H�q���H�5�(��J��H�;1�H�yQ��H�5��(��J��H�;1�H���H�5��%�J��H�;�H�����H�5��%�J��H�;1�H���H�5~�%�J��H�;1�H����H�5�%�jJ��H�;H�5��%軆��H�;H�5��%謆��H�;1�H��R��H�5(�%�4J��H�;1�H��O��H�5�%�J��H�;1�H��J��H�5��%�{��H�-E]H�;H�5S�(H���;���H��M��H�5��%H��I���]{��H�;H�
J��L��H��G���W��H�;1�H��_��H�5�%�I��H�;1�H��^��H�5G�%�I��H�;1�H�hU��H�54�%�lI��H�;�����H��a��H�5M�%�QI��H�;1�H��M��H�5��%�9I��I�}1�H�<�H�5��%� I��H�}1�H��H�5��%�I��H�D]1�H���H�5o�%H�8��H��H�H����H�MD]H�8�����H�6���H�5x'�Jz��H�}1�H�}���H�5�%�H��H�}1�H�d\��H�5��(�H��H�}1�H�K\��H�5��%�oH��H�}1�H�2\��H�5��%�VH��H�}1�H�YH��H�5Q�%�=H��H�}1�H�@H��H�5�(�$H��H�}1�H�'���H�5+�%�H��I�<$1�H�>_��H�5�(��G��I�<$1�H�%_��H�5S�%��G��I�<$1�H�_��H�5@�%�G��fH�=>]ffH�U��H�3� �H�8�[0��H�@H��H��H�@��l��H�;H��H�5)�&�·��[H�=.�%]A\A]A^��+��f.�H��B]H�8�����u\H�xL�-�?]L�%:?]�O���D�u|H�x�A���H����H������<�\I�<$�1���H����H�����uh<�L�%�>]L�-:?]I�<$����f�H����H�����u<�I�<$����H�9]H�8����H�9]L�-�>]L�%[>]H�8�m���H��8]H�8�����I�}�u����L�-�>]L�%">]I�}�3���f�I�}�%����H�A:]H�8�����H�1:]H�8�����H�!:]L�-J>]L�%�=]H�8����H��<]L�-*>]L�%�=]H�8���H��<]H�8�����H��<]H�8������H� ��tH�G0HG(H�ŐH�8tH�WHH�����H��fH�=�;]ffH�R��H�H�@0Hc��1���tH�DH���f.���SH��H�H��uH�{�v4��H�{PH�C[�8j��[4��H�C��D��U��SH��H��H���H��t,H���H9��t��"H���H���>q��H���H�{ ��tH�S0HS(H�ՐH�{8tH�KHH��H��H�[]ÐH�GH�
e�]�oH�W H)�H�oOHH�p�oW H)�P H��H0H�pH�HH�JH�H0H�BH�j0H�W �R(��u�H�pH�xH�@ H)��P(��D��Og��ff.�@��SH��H�H��u_H�{�.��H�{P�]jH���H�x�mn��H�{ H��tH�C0HC(H�4��c}��H�{8H��t���t[�f�H�CH[H�4��B}��f��+.���f���H��:\1�����ff.�U�H���SH����q��H������H�(H�=U�]H���=��H���]H�CH��t)H�CH�XH�=*�]H���]�~@��H��H��[]�@H�C��fDSH��H��H�v0H�P�.�H�H���H�{PHǃ�Hǃ�Hǃ�Hǃ��-���H���[�@��t$��t���tHc���j��f.�H��@��f�AWAVAUATUSH��H��8H�oH��]H�|$H�H�D$H����A������DH��H���{�>��E1�1�E���H�D$�"�H��H��H�D$(萂��H���t�H�t$(H���%H��H�$�2�H�$H���L�|$�0H�$E1�M�o�Z��H�$H�|$L�x E1�H�xH��H�D$H�H�hH�XH�=�]H)�H�$H�|$ ��H�T$I��H�
N�$1H�4$1�L���&����xiH�4$H�T$ I�,I��H�|$Lt$H�hI�4H�@H�H�PH�x L�h0L9�u�H�|$H�t$H�H�GH��H�7H�V(H_H��8[]A\A]A^A_�H�D$H�t$(H�8�o���G=���8�U��H�=a�]H�5<�%H��1��o���#=���8�lU��H�==�]H��H��I��H�5m�%1��~o��ff.���ATUH��S���΃��A��fH�=C6]ffH�;M��H�H�@0H���H��tD��H���[]A\�k��H��4]H�5��%H�81��o��ff.����A�����H���du��@���f���UH��H��6\SH��1�H��H�=d�]�/}��H�UH�R(H�H�P H�BH��Hǂ�H��[]��PXH�5��%1�H��H�=�]�en��DH��tZH��H��u!H�J1]H�5�%H�81��9n��f�@��u�H�H�ƒ�H��u��u�$H�5�H���1F����H� 5]H�5��%H�81���m���AUATI��UH�nPSH��H��H�o0L�oH�����H�C I���H9X(tH��[]A\A]��	��~��A�L$p��ff.�PXH�5i�%1�H��H�=�]�em��D��H��H�5Q5\�%��H��t���H��H��<H��?������ff.���H��H�55\�%��H��t)H�������H�T$H�D$����H����Y���f���H��H�5�4\�l%��H��t������<�HD�H���������SH�5�4\H��H���(%��H��t,H������H��H�T$H�D$���H��[��������f���ATH�534\I��USH��0dH�%(H�D$(1���$��H���}H�������H�����<�A����<tu<�PH�
��%H��H���%� 1�H����%��H�����X��H��t\H���H��L��H�p �CH��H�T$(dH3%(H����H��0[]A\�H�
w�%��H�
W�%�~���@L���\��� H��H�5.�)H���j��H�CH��H�p��Z��H��H���5���~���f�<td��t@<t,<ukH�
	�%H��H�
�%� 1�H����$������H�
��%���H�
��%���H�
��%����@H�
��%��
����`��D��UH��H�5q2\S��H��H���#��H��tH��H��H�PP��[]�����@��UH��H�512\S��H��H����"��H��tH��H��H�PP��[]�9���@AWH�A�AVAUI��ATI��U��SH��H�����fH�=�0]ffH�G��H�H�xP�>!��I��fH�=�0]ffH�G��I�|$ H�L�x0��I�G0H�x���������+����L��H��L�`����H�߃��	�@����I���H�[xH�{P�cH���]Hǃ�H���L��I�\$ L���L���Hǃ�H��[]A\A]A^A_�H��H�����H���] ��I������H��+]H�5�%H�81��h��H�v.]H�5��%H�81��h��D��AUATI��UH��S��H��(dH�%(H�D$1���|������f�H�$$D$��x���I��1�E1�H�5i�]�$��H�$H��$t
E1�H�����A��H�\$�cH��H��D��H��H������H�L$dH3%(uH��([]A\A]��D�k�Ic�I�<ԃ�tP��t#����q����@E1�$�fDH��t@��t
1�1����I��f�H���H��u�@�{.��D��H�����]��ff.���@��t"H��t@��tP���/��H���H��u�1���USH��H�������H�P�pn��H�{8H��t
�bn��H�C8H�{ H��t
�Ln��H�C H���H��t>H�=��]�2��H;-e�]t;H�UH�EH�BH��tH�PH�=��]�5��H���=��H��H��[]��m��@H�EH��]H��t�H�@�fDH���H�oPHLJ�tH�����Hǃ�H���`�1���ff.���SH��H���H��t�wH��[����ff.�AUATUSH��8H�|$fH�=�,]ffH�C��I��H�H�h0H�]0H�{��H����	I�$H�=]�]L�h0I�E0H�x��H��-\����H��L�` �@��H�D$(H�D$(L��L��I�D$�Y�L�d$H�D$H�SH�H�@H�D$ H�BH�t$H)�H��H�F(H�CH�t$H��H)�H��H�F0H�D$�H�T$L�d$H�z0Hx(�Rm��I�D$ H�D$H�p(H��H��H��=��H�D$H�3H�x H����H�D$H�p0H��H��H��=��H�D$H�sH�H H�D$H�@(H���uH�|$1�1�H��P�K]H�\$H�E0H��H���H�U0H���H���H9���H)�H�{8H�C@H��H��H�kHH�����H���a0��H�C8H��H��H��=��H����H�|$H���N%��������H�D$H�T$�z�H�@��H�T$H�BH�T$�H��8[]A\A]��L�` �����H)�H�{8H�S@H��H��H�CHH���C����H���k��H�C8�>���H�D$�H�D$ H��8[]A\A]�D�Cs���d���fDH���=��H�<��s���}���f.�H�{8H�s@�s�����H���&?��H��%]H�5�%H�81��b��ff.���H��(dH�%(H�D$1�H�|$���H�D$�D$��t!H�D$H�T$dH3%(uH��(��H�|$��u�����X��ff.�@AUATI��USH��H��fH�=)]ffH�@��H�H�h0�����H�M0<��H��H���H���H���H�C8H)�H��H���H�SH��������HD�H���I��$�H����To��H��t_L�cPL�mL�e0L����H�E M���H;h(t*H��[]A\A]��H���H���1��fD���~��Kp���.��H�5��%�8���ff.�f���UH��SH���I��H��fH�=�']ffH��>��H�H�C(H�xtH���H��t5H��H��[]�'��f�H�{0H���H��0���H�C(H���H��u�H���[]�ff.�@UH�5�(\SH���.��H��tKH��fH�=^']ffH�V>��H�(H�E(H�xtH9�u*H��[]�@H�}0H���H��0�d�H�E(����H�r+]H�5k�%H�81��`�����UH���SH��H����&�������H���V���H���~�H��H�5�'\���H��H��tH���?��H���H��H��[]��)�f���SH������H�5�'\H���4��H��tH���H��t
[����@�[����ff.����AVH��AUATUH��S��G��H��A��I��fH�=&]ffH�=��L� I�\$(H�{t_H���H��uE��uH��tgH��u&[L��]A\A]A^�QC����7��H��H���H��t;[H��L��]A\A]A^�)���I�|$0H���H��0���I�\$(�@[�]A\A]A^�f�AWAVA��AUE��ATA��UL��SH��H��H�T$dH�%(H�D$x1�fH�=3%]ffH�+<��H�L�x0I�����I�G0H9X(��H���H�@I9G�4�����<��fH�=�$]ffH��;��H�H�Q(H�z��H��tAH���H�T$fH�=�$]ffH�;��H�T$H�H�A(H�x�#����H���E��t������tA���D�cH�t$D��D�s��H�CI�G0L�`(M��������dA��$��ƒ��������L��H�߃��������H��t�����<��fH�=�#]ffH��:��H�H�C(H�x�D���unI�G0�P$�҅P �{H�P0H���m���H�r�F��H�P(H�B������z�tvH�L$xdH3%(��H�Ĉ[]A\A]A^A_�A���눃��A��$�����H�=��]�H�5��%���I�W0H�r(��������H���H8��H�y0H�L$H���H��0��H�L$H�Q(����L���L�sPI�EH����H�P0H�HI�E0I�UH�H�x H�HH�4
H�pH�@(H���H��H���I�E8H���H)�H)�H)�H���H�H���I�U8H�����H�����H��H��H���H�H�H���H�@�H���H�H�H���H�
�H�H�H����L�H�1�L��L����H���L��H�C H���H���H���H����SH�ChHǃ�Hǃ�Hǃ��N���H�{0H���H��0��H�C(���H�=�]H�X"\1���h��I�W0L�b(M���L�` I�D$IDŽ$����H���H�kPtH����^�Hǃ�H���KT�
���I�WH�D$(H��H�|$ H�@�D$ H�T$81�H�D$0H�D$@H�D$HH�D$PH�D$XH�D$h$�D$`��PI�G0���I���I�0���N���H�y0H�T$H�L$H���H��0��H�L$H�T$H�A(���H�t$D�������H�x01���I�G0�q���I�u�L��H��HG�I9u ICu ��I�EH���2����|��I����G����H�G���H�=p�]H�5<�%1��X���%O��H����H�@0H�@pH�@ǀ�H�x�F��H�
�%�;H�5�%H�=D�%����AWAVAUATUSH��hdH�%(H�D$X1�H����DH������A��I��A��fH�=]ffH�5��H�H�h0H����NH�E0H;X(�XH���H�MH9H�������<�afH�=�]ffH�5��L�8I�G(H�x�����t���D�cD��L��D�s���H�CH�E0L�`(M��������:A��$��ƒ��������H��L����������fH�=
]ffH�5��H�H�C(H�x�k���urH�E0�P$H�x0�҅P �dH����z��H�w�F��H�P(H�B������z���H�L$XdH3%(��H��h[]A\A]A^A_���������A��$��"���DH�=�]�H�5��%����H�U0H�r(���������H���u2��DL���L�sPI�EH����H�P0H�HI�E0I�UH�H�x H�HH�4
H�pH�@(H���H��H���I�E8H���H)�H)�H)�H���H�H���I�U8H�����H�����H��f�H��L��H���H�H�H���H�@�H���H�H�H���H�
�H�H�H���H�H�H���@�@�@�H���H���H���H���H�C H�����MH�ChHǃ�Hǃ�Hǃ��t���fDI�0H���H��0���I�G(�����������fDH�{0H���H��0��H�C(����y������fDH�=�]H�Z\1���b��H�U0L�b(L���L�` I�D$IDŽ$�����������DH�UH�D$H��H��H�@�$H�T$1�H�D$H�D$ H�D$(H�D$0H�D$8H�D$H$�D$@��JH�E0���fDH���H�}0������L��D���������1��i�H�E0H�x0���@I�u�L��H��HG�I9u ICu ���I�EH���.����w��H����G����H�G���H�=��]H�5��%1��S��H�=��]H�5�%1���R��H�=��]H�5��%��R���HI��H����H�@0H�@pH�@ǀ�H�x�i��H�
B�%�;H�5?�%H�=g�%���f.�AWAVA��AUI��ATA��USH��H��xdH�%(H�D$h1�fH�=>]ffH�60��H�(H�E(H�x�L����у�A�������<H9��H�����H�������u����fH�=�]ffH��/��H�H�h0H�����H�E0H;X(�PH���H�uH9p�n�����<��fH�=q]ffH�i/��L�8I�W(H�z��I�G(H���H�x��H����������t���D�cD��L��D�s���H�CH�E0L�`(M���k�����A��$��ƒ���u���A��$����L��H�߃������������<�]fH�=�]ffH�.��H�H�C(H�x�����t���H�E0�P$H�x0�҅P �MH���Zt��H�w�F�NH�P(H�B����z�z���H�L$hdH3%(�WH��x[]A\A]A^A_�@�����H�=��]H�5:�%1���O��H�}0H���H��0��H�E(���H�=i�]�H�5L�%�0	��H�U0H�r(��������QH����+��DI�0H�D$H���H��0��H�L$I�W(L�9���fDL���L�sPI�EH����H�P0H�HI�E0I�UH�H�x H�HH�4
H�pH�@(H���H��H���I�E8H���H)�H)�H)�H���H�H���I�U8H����AH����4H��f�H��L��H���H�H�H���H�@�H���H�H�H���H�
H�H�H���H�H�H���@�@�@�H���H���H���H���H�C H����$GH�ChHǃ�Hǃ�Hǃ�����fDH�{0H���H��0���H�C(�X���H���H�}0����
���I�0H�T$H���H��0����I�G(H�T$�P����H�=I�]H��\1��\��H�U0L�b(L���L�` I�D$IDŽ$��W���f�L��D������!���H���L�cPtH������Hǃ�L���sG�q���fD1���H�E0H�x0���@H�UH�D$H��H�|$H�@�D$H�T$(1�H�D$ H�D$0H�D$8H�D$@H�D$HH�D$X$�D$P��CH�E0�E���I�u�L��H��HG�I9u ICu ���I�EH�������`p��H�=��]H�5k�%1��DL��H����G����H�G���H�=γ]H�5��%1��L��H�=��]H�5�%1��L��H�=��]H�5��%1���K��H�=��]H�5x�%1���K��H�=z�]H�5;�%1���K���/B��H����H�@0H�@pH�@ǀ�H�x�P��H�
)�%�;H�5&�%H�=N�%����USH��H��H�t$fH�=J]ffH�B)��H�(H�E(H�xtlH9���H���H��u?H�T$1ɾ����H�������<t���H��[]�fD��H��[]�@H�t$�v���H��[]��H�}0H���H��0����H�E(�w���H�|$�'�����ATH�5�\USH���I��H����H������u2�ƒ������u�����H��[]A\Ð��uH��[]A\�[1�]A\�f�fH�=(]ffH� (��L� I�D$(H�xtqH9�t,H�5\H�����H��tw�H������f����t�H����H�@0H�@pH�@ǀ�H�x�x���I�|$0H���H��0����I�D$(�p������ff.��USH��H��fH�=_]ffH�W'��H�H�h0�����H�sxH����H�FPH9E0tH���W��H�E0H���H9Hh�&H�s(H��H��H��=�H����H�s0�H����H����H�S`H�E0H�P������H�ShH�PH���H�PXH���H�P`H���H�PpH�{@H��tH�sHH��H��H��=uH��u3H�����/��H���H�������#���H��H���o���H�s8�dX����H�8H�s �VX���1���H�M0H�QH�	H)�H�<�H�S H�K(H�4�H���+X���!�����"��H��
]H�5��%H�81���G��@UH��H��dH�%(H�E�1�H�G@H��tpH�u�H9�sgH)ƸH��H��p[H��H��H��H%�H)�H���H��H9�tH��H��$����t	H)�H�L�H�D$H���H�H���������!�����ATI��H�5�\U��H��S����H��fH�=	]ffH�%��H���H�JH�H�@0H9HuDH�SxH��t"H�@0H;P(tH��]H�5H�%H�81���F���k��L���!��H��H�C����H�n]H�5�%H�81��F��ff.�f���H�=�]H��t S�H�_(��M��H��H��u�[�D�ff.�@��H����@��H�GH��tSH��H���G��H�C[ÐH��P�<���SH��H������H���H���H��t���H��[�k��ff.���H�GH��tH���;��H��P�=ff.�@��SH��H������H���H��t���H��[�R��f���H��H�5a
\�,����H�H��H�Ѓ��ff.���AUATUSH��L�-ˬ]M��tsI��H��I�UH�H��tXH�JH�ZH��H9�sGH�;t*H�{H��t!H�H������uH��A��I�U�H�JH�H��8H��H9�r�M�mM��u�H��[]A\A]����H�=5�]H��t0S�H�_���H��H��u�H�=p�][�%��f.�H�=Y�]�%��@��H�GP����H�G������������ff.���H�=�]�9����SH�PH���o���H���[�fD��UH��SH������H�=w�]H��\1�H���6R��H��H��H��1�[H��]�������R<��f���AUATUSH��xdH�%(H��$h1�H���H�D$���tH�D$���H�D$HDŽ$�$H�p0DŽ$`H�FH�t$H��$XH�F0H����H�H 1�H�YXH9X��H�<$H��$���$d�Q��������H�T$H��$�H�\$H�BH�$H�HH����hH�L$L�g ��~H�YH� �MH�$H�@H�D$H�@0H�@pH�D$L�h0�]I�EXH�D$H�@0H�@`H�D$H�@0H�@0H���Nf��H�p�F�L�,$H�D$��H��E1�L��1۽H�x0E�E��H�T$I�EH��$XH�BH�\$ H�$���H�CH�C8H�CHH�D$(fH�=�]ffH���H�H�C(H�x�XH�C(H���H����Hǀ�HLJ�����H�D$ ����t[H�T$ E1�E1�1Ƀ����1��,���Q`�H���H�Y ���H�L$H�A������ǀ�H�A0H��uSH�@XH�T$(E1�E1�1ɾ�s��fH�=�]ffH����H�H�@0H����H��H���H��u��E���H�H 1�H�YXH9X�9�utH��$XH�L$H�AH�D$H�@0H�Xp������uH��u	1�1��}�������H�މ��H���]���H�{0H���H��0�f�����H�|$���H�D$H��H�|$0�D$0H�PH�D$H�@0H�D$8H�@H�T$H1�H�D$@H�D$PH�D$XH�D$`H�D$hH�D$x$�D$p��6���H�|$H�޽�r����Q`����Op��������ff.���SH�^H���H���x��H�������U��H���SH���t�H��tBH���H�CxH�{PH������H�}0����	����{��H���H��[]��h���8�$��H�=�h(H��1��"����H���tÐUSH��H��fH�=�]ffH���H�H�C0H��tH9�tH�x(�m��H�C0H��[]�fDH�k1��}�HDž�H�C0��ff.����H�0H�G(����8���SfH�=]ffH���H�H�C(H�@H��t[�f�H�{0H���H��0���H�C([H�@�f���S� ��H�5�\H��H���t���H��t1���tH��[�-Q��DH��H��[H�z��H�=�����	��f����7 �����AVAUI��ATA��H�5Y\USH��`dH�%(H�D$X1����H��� H��fH�=]ffH���H�H�h0H����MH�E0H;X(�WH���H�MH9H�������<�`fH�=�]ffH���L�0I�F(H�x�����t���D�cD��L���C����H�CH�E0L�`(M��������6A��$��ƒ��������H��L����������fH�=!]ffH���H�H�C(H�x�g���unH�E0�P$H�x0�҅P �hH���`��H�w�F��H�P(H�B������z��}H�L$XdH3%(��H��`[]A\A]A^Ð��������A��$��&���DH�=�]�H�5��%���H�U0H�r(��������H�����DL���L�sPI�EH����H�P0H�HI�E0I�UH�H�x H�HH�4
H�pH�@(H���H��H���I�E8H���H)�H)�H)�H���H�H���I�U8H�����H�����H��f�H��L��H���H�H�H���H�@�H���H�H�H���H�
����H�H�H���H�H�H���@�@�@�H���H���H���H���H�C H����3H�ChHǃ�Hǃ�Hǃ��x���fDI�~0H���H��0���I�F(��������	���fDH�{0H���H��0����H�C(����}������fDH�=)�]H�r\1���G��H�U0L�b(L���L�` I�D$IDŽ$�����������DH�UH�D$H��H��H�@�$H�T$1�H�D$H�D$ H�D$(H�D$0H�D$8H�D$H$�D$@�/H�E0���fDH���H�}0�������L��D����������1��yH�E0H�x0���@I�u�L��H��HG�I9u ICu ����I�EH���&����\\��H����G����H�G����H�=˟]H�5��%1��8������{.��H�
��%�;H�5��%H�=ɰ%����H����H�@0H�@pH�@ǀ�H�x�}�ff.�f�������@��ATA��UH��S��H�5��[�4�H��tD��H���H��[]A\�������fD��ATI��U��SH���K��L���H�߉�[]A\��8�����UH��S��H�5�[H�����H��tH��H���1�[H��]�{��v��fD��AWAVA��AUI��ATA��USH��hdH�%(H�D$X1�fH�=��\ffH���H�H�C(H�x��H���H����Hǀ�Hǃ�fH�=e�\ffH�]��H�H�h0H�����H�E0H9X(��H���H�MH9H�������<��fH�=�\ffH���L�8I�W(H�z�Y����������QD�cD��L��D�s�6��H�CH�E0L�`(M���9�����A��$��ƒ���u���A��$����H��L��������5��fH�=]�\ffH�U��H�H�C(H�x�������H�E0�P$H�x0�҅P �H���iY��H�w�F�H�P(H�B������z���H�L$XdH3%(��H��h[]A\A]A^A_���K��H�{0H���H��0����H�C(��������V���@������@H���H�}0�������L��D�������f���H�=�]�H�5�%���H�U0H�r(���������H���u��DL���L�sPI�EH���`H�P0H�HI�E0I�UH�H�x H�HH�4
H�pH�@(H���H��H���I�E8H���H)�H)�H)�H���H�H���I�U8H����BH����5H��f�H��L��H���H�H�H���H�@�H���H�H�H���H�
��H�H�H���H�H�H���@�@�@�H���H���H���H���H�C H�����+H�ChHǃ�Hǃ�Hǃ�����fDH�{0H���H��0����H�C(�X���I�0H���H��0����I�W(���H�=1�]H�z�[1���@��H�U0L�b(L���L�` I�D$IDŽ$����H����G����H�G����1��yH�E0H�x0���@H�UH�D$H��H��H�@�$H�T$1�H�D$H�D$ H�D$(H�D$0H�D$8H�D$H$�D$@��(H�E0���fDI�u�L��H��HG�I9u ICu ����I�EH���n����U��H�=�]H�5ޭ%1��\1����'��H�
�%�;H�5�%H�=�%�h�H����H�@0H�@pH�@ǀ�H�x���f���UH��S��H���\E��H��H��߉�[]�z��f.���AVAUI��ATA��USH��`dH�%(H�D$X1�fH�=��\ffH���H�H�C(H�x��H���H����Hǀ�Hǃ�fH�=J�\ffH�B��H�H�h0H�����H�E0H9X(��H���H�MH9H�������<��fH�=�\ffH��
��L�0I�V(H�z�^����������ND�cD��L���C����H�CH�E0L�`(M���;�����A��$��ƒ���u���A��$����H��L����������fH�=?�\ffH�7
��H�H�C(H�x�������H�E0�P$H�x0�҅P �H���cS��H�w�F�H�P(H�B������z���H�L$XdH3%(��H��`[]A\A]A^��3���H�{0H���H��0�̿��H�C(��������\���@������@H���H�}0萿������L��D��譼���l����H�=�]�H�5Ī%��H�U0H�r(���������H���U
��DL���L�sPI�EH���`H�P0H�HI�E0I�UH�H�x H�HH�4
H�pH�@(H���H��H���I�E8H���H)�H)�H)�H���H�H���I�U8H����BH����5H��f�H��L��H���H�H�H���H�@�H���H�H�H���H�
��H�H�H���H�H�H���@�@�@�H���H���H���H���H�C H�����%H�ChHǃ�Hǃ�Hǃ�����fDH�{0H���H��0�Ľ��H�C(�V���I�~0H���H��0褽��I�V(���H�=�]H�Z�[1���:��H�U0L�b(L���L�` I�D$IDŽ$����H����G����H�G����1��rH�E0H�x0���@H�UH�D$H��H��H�@�$H�T$1�H�D$H�D$ H�D$(H�D$0H�D$8H�D$H$�D$@��"H�E0���fDI�u�L��H��HG�I9u ICu ��I�EH���n����O��H�=�]H�5��%1��<+���!��H�
Ш%�;H�5ͧ%H�=��%�H�H����H�@0H�@pH�@ǀ�H�x��f���H���H��tH�W0H;B(tH���H�B8�f.���ATA��UH��S��H�5��[�D�H��tD��H���H��[]A\������fD��ATI��U��SH����>��L���H�߉�[]A\�7�����USH����H��H���y��H�5"�[H��H�����H��tH��H��H��[]����|���ff.������H��H�����ff.�f���H���H��t#H�W0H�HPH9�tH�B(H���Hǀ��ff.����ATUSfH�=p�\ffH�h���H�L�`0I�D$ H��p%H��x%�4���H��H�
�]H�I�D$0H��H���1�H�ؾ H��H���]H�}�]H���]H��] �}�]H�z�]H�-{�]H�=<�]H��H��H�=�]�X����H�=[$)�7���H�=��%H�ԏ]���H�=}�%�H�ď]���H�=�%H���]����H��t&�
1�H��� ����]����L������L��H��\H�=(�%H�0����H�5����H��H�ҏ]��&��H�^�\H�=�%H�0����H�=��]�����H��H�5��%H���]��H�=��]1�H�Q�H�5Ȥ%����H�=n�]1�H���H�5M#)���H�=R�]�H�v��H�5;8%���H�=3�]�H�'��H�5:%�{���H�=�]�����H�����H�5�%����H�=��]1�H�ܹ��H�5;�%���H�=َ]1�H����H�5��%���H�=��]�H����H�5
�%���H�=��]�����H���H�5�%�f���H�=�]�����H����H�5�)�G���H�=`�]1�H����H�5��%�+���H�=D�]�����H�H���H�5�%����H�=%�]�����H���H�5��%���H�=�]1�H�
���H�5�8%����H�=�]H��8%H�5S?%�W��H�=Ѝ]�����H�����H�5�%���H�9�\1�H�=��]H�5*�%�|���H�=��]1�H�,���H�5ۢ%���H�=y�]1�H���H�5��%����H�=]�]�H�����H�5ڢ%���H�=>�]1�H�����H�5̢%���H�="�]�����H�����H�5��%�j���[H�=��%]A\�J��f.���H��H���\H�=��%H�0��H��H�Ќ]��H�Č]H��uwH��\H�8H�5a�%��1��H�=��]�����H����H�5��(�b���H�=��]�����H���H�5d5%�C���1�H�5����H�="�%H���
��f.��uH�x�fDH��t:H��tD�u<tLH��\H�8�`���DH���\H�8�L���f�H�Q�\H�8�4����H��\H�8�$����H���\H�8�������1�9�|�DSH�x�\�ѾL��P)H��Y(H�;��H�;��7���[�ff.����H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��H��H�D$H�D$ �H�D$H���\�$H�8�D$0���H�D$dH3%(uH�����d��@��AUATUSH��H��dH�%(H��$1�9�|%H��$dH3%(H��uTH��[]A\A]ÐI��H�վH��L����M��H��L�%��\H�&�%1�I�<$��I�<$�}6�������fD��H��H�BO)�1��6�fD��ATUSH��9�|H��[]A\�f�H��H���%�L�%~�\H��H���%I���1�I�<$��I�<$�5��H��[]A\���AWAVAUATUSH��H��9�|H��H��[]A\A]A^A_�DH�+�II��D�KD�kH��L$D�{H��H��D�L$D�s���k&��H���H�3�%�L$I��H���\QH�8L��1�AUAWAVUD�L$8�c�H��0�s���f.���H��H�N)�1�����fD���ff.���U��H��SH��(dH�%(H�T$1҃�	����tS���j�H�=z�%H�����1ۄ��jf.�H�T$dH3%(����H��([]��H�=�)H�����1ۄ�u�H���]��밹	H�=��%H��A�	���������H�=ޝ%H����À��ۅ��������}=�V���D�Ã���H��H�L$�
Hc�L�D$H���<���L$H�T$��uH����H�
�,^���H�)����}:uH����������H���\I��H�x�%H�81��������A���)���@1����f�H�1/^�����f����1��l���@H�1,^���Q������J����E����;���ff.���UH��S��H�������tH��[]ÐH��\I���H�Ŝ%�H�8H��1�[]������1�H�5������f.�@���ff.���1��f����ff.����f.����H��H��H�W(H�w H���H���ff.�f�H��t;USH��H��f�H�;H�kH��t���H��H�����H��u�H��[]���ff.�@��AVE1�AUI��ATI��U��SH���(D<{t8<}t@<]t<L��L��H�����Hc�H�H���H�s��t/<\t�</t8<[u�A���@E1�����ù{u.H��H��[]A\A]A^��E��u�H��[]A\A]A^��H�s�f���H9���AWAVL�wAUI��ATUSH�������I����E1�1ۀ�[tE~#��\����{u�H��[]A\A]A^A_Ð��*t��?t�A���wv��
�A�I�~�L��L������H�I�|�I9�v�L�w��u�E��D�H��[]A\A]A^A_�f.���u�H��M9�v�I���fD��a���F���1��D1��A������H��H�OH�WD�G�7��@��H��H��f����0���H��H�
�\�|$H�8tH�t$H�=/�:��H���D�|$�G����E�H������H���?�!���H�H��H�Ѓ����AT1��	USH��H�w�?������x�lj��0��H��t1[]A\�@�c�D� D���H�����uLD���)��[1�]A\�D�;�D� D��� �����t���/��H��u���D� ���!����H�s�;�	1��f���Ņ�y����D� �fD��H�H�pH�H�x�I��f���SH����H�ދ8���f���H�?H��t��������H��8H�5�
dH�%(H�D$(1���
H��
�L$ HD�H�|$H�t$H�T$H�T$H���#��D$H�L$(dH3%(uH��8����D��H��dH�%(H�D$1�H�~H�T$H�=X�������D$H�L$dH3%(uH������D��H��H��H�OH�H�H�5�B(1��$�H���f�AW��I��AV��A��AUA��ATI��A��USH��hH��D$P��H�|$0��H��H�t$8�D$���M�$$H�,L�����H�D$(H�D$L�H�$�A��uA�<$.�>A��L�|$ D��I�ރ��L$<?�y<[��<*���|$t<\��<I��A�$���i�L$P����</��A�</t~��tzH�T$ H��L���B�����~fLc�H�$L)�I9��K�D$��tKL�|$ 1�H��L��L���~��L�����d�H�4$1�L��L�����a��L�����G�9����H�|$tH�|$(�tH�D$0L�0H�D$8L� �H��h[]A\A]A^A_�I��A�FI�V<*t�H�T$<\u�|$�,H�L$�„��MD�T$PE���'��/�6A�$�����/�L�t$L�d$(<?�����fDA�$���W���</uD�L$PE���E���H�T$ H�4$L��I�^�d��H�I�A�FI���9���f�A�$������</uD�D$PE�������M�~I9�����A�^��!��D$T��^��1�L�t$HL�l$ A�Ɖ�L�d$L��A���@E��u{H�$H�t$H)�H9�H��H��A��I����tU�t$E1���tJH�4$H�|$1�L�����L����}�1�L��H��L��A���z��L����`�E�<$A9�A��E��L��A��]�CA��\u�|$�bE���qL��H��H���+��Hc�L�$L9��SE�<$A��-�,���A�D$<]����M�|$<\u�|$��H�L$@���L��H��L������Lc�O�$E����L�$H�t$H�L$@I)�L9�'H��H��L�T$XL�\$@�$��L�\$@L�T$X���M9�|H�t$L��L���������H�|$H�4$L��1��R���|$����L����,�L��1�H��H�߉D$@�(��L�����D�T$@A9���E�<$���fDA�>�4���H�|$��������DD�{H��E�������fDH�|$L�t$HL�d$�r����y���DA�<$���H�D$0H�L$H�H�D$8L� H��h�[]A\A]A^A_�@E�<$A�����L��1�H��H�߉D$@�L��D�T$@A9���L��1�H��L��D�T$@�)��D�T$@E1�D9�E�<$A�����M�~A�^�D$T���f.���E��u	<\u�S���.�O���H�D$(H�D$���L�d$(H�T$ H�4$L�����L�t$H�I�L�d$(A��y���f�E�<$E1��#���L��1�H��L��D�T$@�k��L����Q��D�T$@�3����L��L��L�������������M�M�A�����M�|$A�D$�.�����T$TD��L�d$I��L�t$H9������H�������H�T$ H�4$L��I������H�I�A�G����I�NA�V����H�T$ H�4$L��M����H�I�A��w���H�D$0H�H�D$8L� 1��Z���H�D$0L�0H�D$8L� A���t1�T$P������</�����)���H�D$0L�0H�D$8L� A���u�1��
���f�AWAVAUA��ATI��UH��SH��H��HdH�%(H�D$81�H�|$(H��H�T$0�T�H�D����D$A����H�D$0H�$E1�H�D$H�D$(H�D$A�<$*��H�t$H�|$H��D������A�ą��H�<$��M�����T$A���u*<.u&�f.�L��H��H���B��H�I�A���t</u�t}H�$I��L�|$0I��H�D$(A�<$*�j���A�|$*�^���A�|$/�R���I����A�|$*uI��A�|$�/uL�d$(A�<$*L�$$t�L�|$0����f.�A�H�L$8dH3%(D����H��H[]A\A]A^A_�@L�t$0A���u#�%�L��H��H���b��H�I�L�t$0A���t</u�H�T$(�:u����������������L�bI�NL�d$(H�L$0�c����H�t$0H�|$(H��D���K���A���I������ff.���H��H�ЋNH�H���������H�����f.���H��H��H�w�H�H��8(1��}�H�����SH��H�wH�?����{H���1�����SH�� H�t$dH�%(H�D$1�H�D$H�D$H������H��H�D$���H�|$H���F���H��H�D$���H�D$H�pH� tH�p1�A�H�����H�=M�X���uH�L$dH3%(uH�� [�H�H��H�=a�%���*���u��D�������SH��dH�%(H�D$1�����u\H�H�$H��t!H��H����H�<$�+��H�����8u>1�1�����H���
�H�L$dH3%(u@H��[��H�$��fD1�1����H�<$H���k�뼺1���������H�����H��H��ff.��AVAUATUSH�� dH�%(H�D$1�L�d$H�|$L�d$�0��H��H�D$����H�\$I��H� H�ktVH�[L�,+L��H��L���8��L��L��H�����H)�H9�2H�|$�X���H�L$dH3%(u6H�� []A\A]A^�H���f�H�|$H��1��!��L��H�D$������ff.�f���SH������H��H�pH� tH�p1�A�H�����H�=����
����x�[��d��H��H�=�%�0������SH�����H��H�pH� tH�p1�A�H�����H�=)�	�����t�[����H��H�=��%�0���f���H���wH�?����H��H��fD��SH�� dH�%(H�D$1�����H���ug�D$�H������H��H�@H� u_1�H��A�H�$H�����H�=z����	����xSH�L$dH3%(�u9H�� [�fD��uH�~�"��D$�@H�C뛺�������	��H��H�=��%�0������H���c��H��H��ff.����H�����H��H��ff.����H�����@��H���?���H��H��f.���ATI��UH��SH����H��L��H�����[H��]H��A\�=��ff.�f���H��H�5�[�\��H�xH��tH���	��f��H���fD��H���[H�����H�P �@uH�P H�H�BH�BH���ff.�f�H��(H�|$dH�%(H�D$1�H��H���H��tJH�5c�[������tH�D$H�T$dH3%(u,H��(�H�D$H�D$H�|$���H�xH�D$u˸���$���@��SH��1����H���9�H��H��t	H��[�@�S����t�H�5؆%H�=1��<����f.�H��1�A�H������|$H�t$H�=����X����xH������H�5��%�8���ff.��PXH�����H�5m�%�8�w�����ATUH��S���H��H��tHH��� ���H�����x.u
�P��t�.t1�H���Z
����xmH��H��[]A\��xu�����Lc D�������uA��t�K�\$H��[]A\�f�H���h�H��tH���s�������Lc ����$���@��@ATUH��SuTH�H��t>L�eM��t1�H�<�H�����H�}L9�u����H�EH�EH�E[]A\��H�?�x����y����ff.�@H�H��t SH��H���L��H���x
[������H�5�%�8����@AUM��A�ATA��1�UH��SH��HdH�%(H�D$81��<$H�=k�H�t$H��H�T$H������D$�:��H�Å�x#H�L$8dH3%(��uXH��H[]A\A]�fD�k������ƒ����u�E��y�H�5�%H�t$ 1�H�l$(H�=z�H�D$ L�l$0��������@SH�wH��H� tH�w1�A�H�����H�=%��������x[�����H��H�=S�%�0�t	��@H���\H�8t#H��A�1�H�����H�=*����E��D�+��ff.���AWAVAUATI��USH��(H�T$dH�%(H�D$1�H����H���t��I��L�l$L�l$H�|$�
��H��H�D$� �H�|$H���s�H��H�D$��H�5��[L��H�D$�2���H��H������H�D$L�sH�CL�pH� tL�pL�����H�H��t]H�kH��u,H�T$dH3%(L����H��([]A\A]A^A_�fD@��u�H��L���_��D��I�������c��D�8D��������u$H�H��u�L�l$H�=��%H��D��H�D$����L���X���H�������ff.���AUI��ATI��H���[UH��H���SH����L��L��H��H��H���A���H��H��[]A\A]�H���j�\��t"��H�=G�\�U�\t/H���f.�H�=9�\��H�%�\�+�\��D�;�H��\H���ff.�@��SH����`����C�t���1�1�[���f.���SH��H�����C�C����{t
H�{[����1�1�[����fDS�j���Ë��\����[�f.���H9T�\u����&����[�H���\H�5��%H�81����ff.�SH���7���H���/��H��E1�1�1�H��[���ff.��AUATE1�UH��S��H���)����H�xi]A��H��u L�-�t)�L����H�Ti]H��t�H��H�%�\E��H���H�8���H�5��[H��H������H��H��[]A\A]�ff.�f���H���c���H��H�=�,H��H��H��馷��fD��H���3���H��H�=-H��H��H���v���fD��ATI��UH��S��������t7H������H�VH�=?-H��H���4���[�]A\�f.����H������H���L��[E1�]H��A\�,��ff.����SH��H��uH����@��u�H�H�Ѓ�H��t��u�H��t(H�5��[H���ɸ��H�8tH���[����[�@��t�H�������ɐ��H������AWI��AVI��AUATUSH��H��L�fdH�%(H�D$1�L�����H9�td�k��t,�H�L$dH3%(����H��[]A\A]A^A_�f�H��I������u�A�}u�L�������u�L��������t2f�A�NI�T$I�$ tI�T$H��L��1�����@���y���L���D$���H�L$H��L��I�4H���Y��H9��D����|$t��5����<���ff.����ATH�5�[USH���Y���H�x���H�=B%I������H��H��uZH���\H�8�C���H��H���X���H��H�5�H(�t�I�t$H���7��H��H�55N)�S�H��[]A\���t;H��tEH��tg��uR��tmH���\H�8뉐H��1�[1�]�!
A\���H�{�g����H���\H�8�Q���f�H��\H�8�9����H���\H�8�)����H�I�\H�8��������G��tEH���-��\u H���\H���\���\H�?����H���fD��f.���ATI��UH��S���+����t7H����=���H�����H�=�(H��H��脳��[�]A\�f.���H�����H���L��[E1�]H��A\�|���ff.��AW1�AVAUI��J�|ATUSH������H��V!��H��A��I��L������I��H��tH��u,I�E��t�/I�LH��u6�)H��L��[]A\A]A^A_�H��L��H���R��I�E��t����H��H��L���2��H���ff.�f�AWAVAUATUS��H��HH�t$dH�%(H�T$81�H9���D�7I��E����H�D$0�D$,H��H�D$ �����I��H���I�GH9D$v
A��*��H�t$H���L������H���L��H��I���}��A�ƃ�w�D$,��uA�<$�L��L)�H��H��� ��H�L$�u��H�L$H��I���DH����A�
A���$A���DF�E�uM�UA�<$��M�|$�H�D$ L�(I�EH�D$ L;|$s
E�7E��������T$����H���~�T$�����H�\$ �HH�H�H�@H�D$0H�\$8dH3%(��H��H[]A\A]A^A_�L�T$A�:���M��M�\$H�t$H���L��L�\$���L�\$H���H��H�D$L�������v����fDM��1�����fDA�����DA�*�;���A�/�0���f�A�GI�WI��</uI��A�</t�<*uA�*uA�/t�A�E�I�E�D$,���H��L��H��H�L$�m	��H�L$I���5�������H�t$0H�t$ H��uEH�D$0H�D$ DH�D$ H�H�|$0�"��1������A���H��t�H�\$0H�\$ ��S����L��������1����ATH��[UH���S����H��L�` �@uL�` H���tC���Hc�A�1�H�����H�=������I�$H��tI�D$H��[]A\�fD�S�����H�5�v%�8讵��ff.�AUATUSH��H��taL�oH��H��L�����I��H��tH�L�k�E�CH��H��[]A\A]�H�x����H��H��tL� H�HM��uB�!H�K�1���@H��L��L�����H����D��SH��H��H��0dH�%(H�D$(1���t\�����D$���u\1�H�t$A�H�����H�=��Z��������H�T$(dH3%(�}H��0[����D$���t�H���v��H�=�\%H�D$� �H�t$1��H����D$H�t$H�L$H��H�=���D$�D$�1����o��������H�5�t%�8����@AWI��AVA��AUM��ATUSH��hH�|$�t$$H�T$H�L$L�L$HdH�%(H�D$X1��L��M�$A�����1�1�A���B<}tLA��t<\uA�I�G��I��L��L��L��蒮��H�I�A�����<{u����}����H��t˃�u�H�|$����H��H��H�D$(���I�Ƹ����M���H��H+D$H�D$8��I�GH�D$@�D$$�ЉD$I9���L�t$0I��I�nL9���1�I���*�<{���H��L��L���ϭ��H�H�L9�s�E<,uՅ�u�H��L��H��I��H�D$8H)�H�tH�|$0H��H����H�l$0H�T$(H�t$@H)�H�|��L�L$HM��H��H�L$H�T$�t$$�5�������L�t$0L���D$����D$�H�T$HH�T$PH�T$HH�L$XdH3%(��H��h[]A\A]A^A_�fDL����K���1�H��u�L��H�t$H�|$H�D$���<}u�������D$����<\����H��L9����������M9������L�t$01��:���H�t$H��L�������F���L�t$0H�D$8H�T$(H�t$@I�<H)��Ͱ��L�L$HM��L��H�L$H�T$�t$$����������1��������ff.�AWAVAUATUSH���H��$8H��$ �|$<H�t$L��$(H�D$@H��$HH�T$H�L$0D��$�D�L$(H�\$HH�D$dH�%(H��$�1��(`L9��u
E1�H��E1�E1�1�E1�H�ws%D��H�
�s%DH�}�G���8��w#Hc�H�>��f��A�DH��I9�w�E��A������H�D$�8�k�|$(���H�D$D��HD$0H�D$(D	���E���dL�t$HL��1�L)�H��H��H��H��������H��H��H9�H��H�����H�t$p�D���H��H�D$xH����L��1�M9���DH��xHC�H��H��H�A�I9�w�I�G�H�L$xH+D$HH��L�|�H��L9�����$0H�h��$����L$`�fDH��L9|$ ��	H�]�H�l$ H��t�L�#L���X��I��H�@H��H�D$H脹��I��H���uH�T$HL��H���8���t$`���H�|$p�R���H�D$PH���_H�t$PH�CL�fH�L9�sRH�l$XD��$0f�H�]H��t,H�t$H�;D��L���4����uH�CH�EI��I�D$�H��L9�r�H�l$XH�|$L�D$HL��$�H�t$(��L��H���t��H����
H�D$(H�<�]��H�L$0�t$H���$HA�����A��t$PH���$HPATL�t$xAVH�T$H�|$l���H��0H��A���	��L�����E���x���D��H�|$x�����fD�A��0����A�� ����A�������u<�����f�A����DH��wf�GHc�H�>��f�H�?�/D�L$ ����D�L$ H��o%H���H�
�o%E����fD�A������v���fDD���|$(���@ ��E�����D$(�������
���|$(����A�@����H�l$H�D$H�H��H��t�}/uH�D$H�t$H�|0H�D$@D�L$ H�T$H��$@�D�L$ �������|$(��E�����H�D$0H�|$H��t
�}/����$�H��E1�H�
)�f�H��H���H��H�D$@H�T$H��$@�H��������������	�1�H��$�dH34%(���
H���[]A\A]A^A_�H�D$HE1�E1�H�-�)L�0M��uc�f�M�.M��tDL�����H��M��tYJ�t#L���{���H��H��tM�|$B� /H���0N�$;I��B�!M�vM��tKA�F������u�1�I��M��u�H�{I���S���I��H��t�H���jA�M�vI��M��u��M�����D$<L�D$L��E1ɋ�$0H��$H���$H�D$H��$H�D$H��$H�D$0H��$��$���$ �D$(��$$��$0��$(H�D$@H��$0H��$@H��$8���L�����A���V���@�L�-�M%����J�<8H��L��H�D$ ����H�L$ ������������L�D$��$0�D$ H��$@H�t$�|$<D�L$P�M���������$XD�T$ D�L$P��D�Ճ��D$(E�����������H��L��H��������H�D$@�|$<�H�XH�D$�dH�|$�XHD$���/����H�3Q%�t$<HD‰�$H��$H���\H�8H��$H�D$P��A�1�H�����H��H�=�����H��H������$0f�)�$��@)�$�D$X�D�l$ E1�1�L�|$01�A�H��H�����H�=����H���D1�H���O�I��H����H��$L9�rMI��E1�H��������L��L��H��L��H9�H�����H���:�H����H��$H��L�|�H��$�S���A�K�4.���AL�t$XL�d$M��L��$�H�\$HL��H�l$PH��fD<\u.M��M)�L9�tL��L��H���;��L�A�}M�u��M��L��L��H������H�I�A�E��u�H��M��H�l$PH�\$HL�t$XL��$�I�MH��L)�H�D$HI9��)���L)�L��H�����������D$(�������@���^������H������H�����������D$<1�H��$�A�H�����H�=���DŽ$���$�H�D$H��$�H��$@H��$�����xO�������$X�����D$(���E1�E1�E1������PH��� ���H�p�H�L$H�D$H�l�����µ������ƒ�����V���D��$0E���E���H��i%1�H��$H��$H�D$H�=���H��$H�D$H��$�L����������$�����H�l$Hl$�|$(�f����?���f.�H��$��$0D��$0L��D��$�H�t$HL��$�%�A�̀��$���$0D��$�������$��H)�1҃�H����$�H�	H��H��H��$�H��$�I�G�H)�H��$�H��H�D�H��H��$�H��$�H�D$xD�L$XE����H��$H9��1H�BH��$H��$H��H���H�KL�3�9.��I��� I��u
�y.��DŽ$��D$0������$�H�t$(M��H�|$��H�D$`H�����C�����$���t�|$0�u��$�9�$��H��$�H��$�H��������H9�H���
��H��$��%���H��H��$�H���7D��$�1�H�t$`H�L$HE����HD$(H�H��$��D$0H�t$ ��D$pH��$�H9��	L��$�L��$�I��I���'fD��tU������I��M9���I��C��u�D�T$pE��u��$�9�$�}H�]H��H�[�C��u�H�D$ L�D$E1�D��H�L$xH�;H����L��$�H��$�D��$��B���+�u���f�H�T$ H�t$D��H�;������O���H�CH��H�E��>���H��$���L��$�H�T$H��$��t$A���$H�t$PH)�ATL�UL��$�AWL��$�D�L$`�|$lL����H��0L�����!���L��������t���$�H�|$P��������L�D$H�t$`D��H��$@�|$<�a���D$0�������������$X�����D$0���DŽ$��D$0�����-���1��H��M��H�l$PH�\$HL�t$XL��$�I�M� �����$���tD��$�E������D��$�E�������DŽ$��D$0���蟰������<������3���H����H�T$H��$@H�|$�Ӊ�����A�1�H�����H�=!�����H�t$PH��H����H��������������H�|$P�����誹����L�������蘹����H�|$P1��G��H��������H�D$@H�@H�����H�T$H�|$H��$@�Љ��_�H��I��D�l$ L�|$0������ZH��$L9�s=H��������H��1�H��H��H9�I�����H����H���H��$H��$E1��H��H�
T���O��H��$�
���H�D$H���������H�|$`�����苸���q�����$0�����H��b%1�H�=��1�H��$�H�D$H��$�H��$�H�D$H��$�薪���K��$0���:�H��b%H�t$P1�1�H��$H�D$H�=���H��$H�D$H��$�D�����H�|$P1�����W�������$��@��ATI��UH��SH��H��dH�%(H�D$1�薸���S(L��H��H�t�s�H�$H��t]�C(D�K$D�C H�KH�SH�sAT�s8�s0PH�D$ H�|$(W�;P���H��0H�<$���H��H�L$dH3%(��uH��[]A\û�������q���AWM��AVAUATU��SH��H��X�t$L��$�H��L�$dH�%(H�D$H1��<{��</��H���+H��H�t$讷��H�xI�����H�t$H��I����J�(E1��D$M����H��L�\$�i���L���H��H�4�H�L�\$H��H�D$ �PATL��A�����L��AWL)�t$UH�D$@H�T$HRL��PD�D$D�|$@��H��0H�|$ ������L�����H�T$HdH3%(����H��X[]A\A]A^A_�L�o�����I��H����H��H�HL��E1��D$A��<f���Ʀ��I��H����H���D$E1�E1����@M��L��L��L�\$H�L$�X�L�\$H�L$���f��D$H�T$(��H�N�L$0H�L$ L�D$8M��L�L$@E1ɉD$ �l������L��������������>��ff.���H��H�FL�N L�F�NR�6H�����H���f���H��L�N�NI��R�����1��q���H���ff.��AWI��H��AVA��AUATI��USH��H��HdH�%(H�D$81��.��H��H���s������ZH���A���L�|$ H�$H�l$(H�D$I���M��M����M�l$ A�D$��I�}H���L�L���ƃ���M�mI�UI�E ��H�T$I��H�{H� u>H��D��L�ȥ[U�r���ZYH�L$8dH3%(��H��H[]A\A]A^A_�DH�{�f�M�l$ �h���fDA���G���I�$��H���6���L��H���*�������H������I�UI�E �O���f.�I�U�<����1Ҿ�����.���@�k���H��H���������������H������������L������H�=W\%H�‰����H�^�\H�5�Y%H�81��]��ff.�f�AVE1�AUI��ATA��USH��0H�|$H�l$dH�%(H�D$(1����H���H�H����I9�}TH��J�<�H�l$ H�|$�=�D��L��H��H��H�D$�w�����uSI��H�D$H��� u�L;p}H�@ �fDH�D$H�D$ H�D$H��H�L$(dH3%(uH��0[]A\A]A^Ð����`������������ff.�ATA��UH��SH�� H�|$dH�%(H�D$1�H��t@��tJH�D$H�D$�s�H�D$���H�t$D��H��H��H�������tO���������O��H���H��u���IH��tC�}�H�����H�|$H�������fDH�L$dH3%(H��u	H�� []A\����H�ؤ\H�5�Y%H�81��w�����AWH��M��AVM��AUI��ATUSH��H���:���H�߃�I��tg說��H�źH�5��$L�����r
��@L����D�������H�Ɖ�I��t;L�����H��������u;H��H��[]A\A]A^A_�D���H���fDL���`���H���ȵ����t�H�߻藙���D��ATL��H�5S�$I��U1�SH�Ӻ�r
L��@���>��H����� t#H����H��t6��H��H��[]A\���DH�{u�H�[ H�;��[H��]A\����@H����f.���AUATUSH��HdH�%(H�D$81����eH�H�^H�D$����H�l$E1�H���$���H����H��H�|$H������H���H�SH� tH�SH�L$H�yH� tH�yD��H�������¸��tH�l$H�D$1�H�L$8dH3%(��H��H[]A\A]�����H�~@�����,���I��H�l$E��H���i���H���Q�H��A���;���H�\$H�D$ D�l$(H������H�T$H�L$I��H�zH� tH�zI��H����D���-����?�����A�������I���r���1��*������������SH��H��uH������@��u�H�H�Ѓ�H��t��u�H��tH�5��[H���َ��H�8t[Ð��t�H������H���\H�5�T%H�81����f���UH��SH��@��t-H��H�H���_���H��H�8�d���H��H��[]�f.�H���h��H������SH�����H��[�ff.���H������H�8苷��H��xH��H���ڰ���բ��H�5�S%�8�ǒ�����SH������H�8�{��H��[�fDAWAVI��AUATA��UH�-Z��SH��H�|$H�$���H�8H���<���#f.�H�SH��L����H�<$H��A��H�3A�1�H��H���������I��H��t5M�oL��詬��E��t�A�.u�H��t�H��u�A�.u���H�D$H��[]A\A]A^A_�ff.����UH��SH�����H�5ϟ\H��H��H������H��H��[]�f.�����H�5�������fD��UH��SH�����H�5o�\H��1�H��H�����H��H��[]�ff.�f���SH��賰����tH�߹�[H�5Z���e���DH��[�w�����SH���s�����tH��1ɺ[H�5���(����H��[�7�����USH�����1�H����H�u1�A�H�����H�=M�����H��t#H�XH�����H�UH��H��H��[]��f��K����8��uH���[]�1��2���f���H���3���H�8�+������tH�H��H�D�����H�5/Q%�8������S�GH����t$�-��\t0H�;���H�ǨtP责��������H�;�����[�fDH�=�\H�;H�7�\�5�\�P���H�Ǩu������f���H���3���H��H���\H�8H���=��ff.�f���S1��H��dH�%(H�D$1�����H�$����H�$H��H�B�Һ��H��H���7��H�L$dH3%(u	H��H��[�����f���S���H��莦�����w������D�H�lj�[�1������7������SH�� dH�%(H�D$1������H�=�O%�,��H����H������H���c����u{H�sH� uB1�A�H�����H�=L����������H�L$dH3%(��H�� [�H�s�f.�H�>���H��� ���H��������t��_���H������H��H�\$H����H��H�=~��H�$�D$�D$蘆���y���H�=�N%�D���H������H�4�\H�5�N%H�81������1��G����2���=���H��H�=�P%�0����ff.����ATI��UH��S����H�� dH�%(H�D$1�H�$H�D$����H��1҉�P�����M��H��L�D$�F�ZYH�t$dH34%(u	H�� []A\����fD��SH��H��@dH�%(H�D$81�H�4$H�T$ �V��H����1�H�D$0L�/�[�����H��PL�L$���ZY��t���������fDH�D$8dH3%(uH��@[����D��H��8���E1�dH�%(H�D$(1�H�$H���H�L$H��H�D$�t$����H�T$(dH3%(uH��8������AUI��ATI��UH��S����H��8dH�%(H�D$(1��\��E1ɉ�H��H�]�I��H��L�,$H�D$L�d$�\$�L��H�T$(dH3%(uH��8[]A\A]����ff.����SH�=��\��H�=��\�s�H�<�\H�=LL%H�0�=���H���\H��\H��H�2H��A���H�;H�5������H�;�H�s��H�5L%�7���H�;�����H�8��H�5ձ%����H�;�����H����H�5�K%����H�;�����H����H�5�K%���H�;�����H����H�5��$�ˢ��H�;1�H�����H�5�K%�3���H�;1�H����H�5Z2%����H�;1�H����H�5tK%����H�;1�H����H�5��$���H�;1�H����H�5:=)�Ӝ��H�;1�H����H�59�$軜��H�;1�H�o���H�5K%補��H�;1�H�����H�5�$苜��H�;1�H�����H�5�%�s���H�;1�H�W���H�5��%�[���H�;�H����H�5б%�@���H�;1�H�$���H�5�J%�(���H�;�H���H�5�J%�
���H�;1�H���H�5͒(���H�;1�H�i���H�5}x(�ݛ��H�;�H����H�5�I%�B���H�;�����H����H�5Gx(�'���H�;1�H���H�5J%����H�;1�H����H�5�I%���H�;�H����H�5�I%�ܠ��H�;�����H�m���H�5�I%���H�;�H�r���H�5�I%覠��H�;�H�W���H�5��$苠��H�;�H�<���H�5�I%�p���H�;�����H�a���H�5u%�U���H�;H�S�\�H�5`I%�:���H�;�H�[���H�5"�$����H��\�����H���H�5-I%H�;���H�;�����H���H�5I%����H�=I%���H�=I%���	H�=I%���H�=I%�ޱ�!H�=�H%�ͱ�H�=�H%輱�H�=�H%[骱f.���H�5�[H�=�G%��$f�AWAVAUATUSH���D�D$dH�%(H��$�1�H���fH��H��I��I�����I��L9����U��.��H��/��t$���,H�D$0I��H�D$�:H���Q���I��H����M��M��L��I)��L�;~��M9��L)�dI��dIF�H�=Z�(I��eI��H�!(HB�H��d�H�
(�dH��L��I��PH�=@J%1��9���XZA�?tyI�_�Z����H��dH�
�(H���(H��dHF�H�=�I%IF�1���1�fDH��$�dH3%(�$H���[]A\A]A^A_��1���@�/H���3���H��H��H��u����M)�L��H��H��L�D$ L�L$�u��L�L$L�D$ H��L�A��/t�/H��M9������I�T$H��H���>��H�T$L���,���������D$H%�=������L$��t�L���[����������L������H���О��L�<�"����I�����{/�"���H�=LE%L�L$�۷��L�L$H���4H��L�L$ H�D$�{���H�t$L�L$ I9�H����I��d�d�IF�I��H�(wH�0�(1�fD��H�
�(���f.��U��.�/����U�&���f.�H�=�D%�4���H��uM��L�����@H��H�D$�ӝ��H�t$I9�H���]���M��H��L��I)�L�D$���I�LL�D$�H������M��H��L��L�L$(I)�H�L$H��L�D$ ���H�L$L�L$(L�D$ L�I������H��I��M��L�����fD��UH��S1�H��(H��t,H��A�����H��H������H��(H��[]�f�H�==t(H�L$H�T$�*���H�T$H�L$H�5�F%H��H��t�H��H�L$H�T$H�t$���H�t$H�L$H��H��H�T$HE��p���ff.����H��H�o*%HD�E1��6���fD��H������H������H���f�S�������Hc�H�=gD]���H����[�fD������H��\SH��H���[H�8�V��H��H������H��H�[�ff.�@��H��C]SH�x�{~��H�=�C]H�5�H��H��肝��H��[�ff.�f���H��(dH�%(H�D$1�����H�$�*���H�=�C]H��H�5�H�D$�/���H�$H�L$dH3%(uH��(�聹�����H�G H�x��rff.�@��SH�����H��H���H��1�[�@��92t1��DSH��跢��H�{H�����1�[����S1��t}��H�5�B]H��H��肅��H��[�ff.�f�PXH�����H�5�D%H��H�T�\H�81��J��f.���PXH����N
�H��dH�%(H�D$1�H�$H��t/H�?H��t'H���/�����t�$H�L$dH3%(uH�����������D���@����w
H�B H�x�qP�1��-���ff.�f�SH��H��H�=�A]�]�����y0H��tH��茙��H��?w[�H���\H��H�5F%H�81��Y���H���\H��H�5D%H�81��>���ff.�AWAVAUATUSH��H����A��H��I��H������H��?��Mc�L�=4)]L��K�dI��H�3H����舎�����XK�dI�\�H����H����oE�oMK�oU S �o]0[0�oe@c@�omPkP�ou`s`�o}p{pH���H���L�kK�dL��L��D���H�=�@]I�\��*���H�-�@]H��tL��H����H��tH��D��[]A\A]A^A_�H������L��H��H���2v�������H�I��K�dI�\�H���������Ʃ��H��H������f.�H�{H��H��H�Hǃ�H��H)�������H�����@A������P���ff.�f�H���=�?]�G=H��H�Ή�?]����PH�l�\�H�5�C%H�81�����ff.�AUH��ATUSH��H�=�C%H��(dH�%(H�D$1��4��H�����L�(H�E �H�UH�MH�BL�D
�I9�w�:�� �H��I9�t)��r��у�v�J���v��0��	v��_H��I9�u�H���1uI��艜��H��m���L��H����A���j���H��L�(����H�-��]H�}�������A��w8H��H�=`>]�������Hc�H�RH�=&]H�T��R��tmH�}t:H�\$dH3%(u]H��([]A\A]��H�UH�EH�M����H�|$�D$貘�D$�@H�|$��A���b�������������USH��H��H�P%]H��u$H�-�#%@�H���à��H�,%]H��t�H��H������H��1�H��uH��[]�f.�@��t�u���H��[]�fD����H��[]�ff.��ATUSH��uH� �\H�5�?%H�81�迼���H��@��t/@��u�H�Hc�H%��?�~hH��H	�H�[]A\�f�H�H����H��w��H���`u���t�H�{H�W�H���s���H��[H9S�b�����H
�L�dH�H�$]H��u'H�-�"%��H���{���H��#]H��t�L��H��H��[]A\�s��ff.�f���USH�$]H��H���H�;H�����H9�u�H�=�;]1�H�5?���芕��H�=�;]H��[]�|�����H�GH�P�1�H��wH��[H9G�����f.���H��t���������fD��f.�UH��AWAVAUI��H��ATSH��(dH�%(H�E�1�赻��I��A�E�HЃ�	ve�ƒ�A���L��E1�@H��������H��p�����������0��	v΀�_t�I��M)�I��?���H�E�dH3%(��H�e�[A\A]A^A_]�fD���PL��1�E1����fDD��΃���	��?�p���DF��A��F�H�����u�I��H�߉M����M)�I�I�WI��?�e���I��H��M�L��I���L)�H���H9�tH��H��$�H9�u�%�t	H)�H�L�H�\$H���H������r��Ѓ�wH�z�\Hc���H�ڄ�t0f.��p���v�p���v��0��	v�_H�����uڅ��\E��������H�ڄ�t)��H���wH�
	�\H���H�����u�H�ׁ\L��H��H�8����\���@��DF�H������	���I��M)�I��?�2���H���\L��L��H�8�}��E������I��?�
���D�e�H���~���L�H��?��H�PH��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�\$�A�H����bf�A��=���DH��\L��L��H�8�����f����A�����H���\L��H��H�8�����������E�L��H�߉M�����E��M����b�������A��t
��7����E����USH��H��tmH�����[���H��?w]H�=�7]Hc�H�
4�H���k����u-��x4��%���9W7]~%H�H�@H�H]H�t�H�����H����[]�f�1���@���������1�H��t���%����f��������Ð����x(���9=�6]~Hc�H��]H�H�D��fD1��ff.�f�AWA�Љ�AVA����AUATUSD��H��È\$uM9��{A��H���׉�I����D��I�����I��M��u>1�E1�A�OH��u`D�D$�T$����E1�H��L��[]A\A]A^A_�f�A��u�I�E��H��u�I�}���A��D��u�H���H��u����8H�{�T$�x�����u�L���������x���L��������ME��e���L��������R���A�~�G���L���͜�����7����T$D�D$��uA��uM������f��D$<tW��������uJE����L���ɺ����������������H����[]A\A]A^A_�s���H��D�D$胺��D�D$��E��t�L���o���9�t�������M��=�s����q�����u��>����D$�E���D��AWLc�AVAUI��ATUH��L��SH��L�bL�2L����H��H��t*L������H��L��H���d~��H��1�[]A\A]A^A_���詆��H��t�H�XL��H��腁����t�H���cL��L��H��H���i���fDATI��UH��S��xb��H��L���e�Å�xXHc�H�@H��]H��H�PH�h���t
���������L��H���@�����[]A\�f������H��~\H�58%H�81�����ff.�@��AVAUI��ATUH��SH��L�%s�]dH�%(H�D$1�I�<$��H��H�=3]��Å���%���9�2]����H�H��H�@H��]L�t�I�v�@�����uLA�F��tA�����L��H����9�I�<$tZH�L$dH3%(��ugH��[]A\A]A^�L��H�������ȐL��H�����lj��܄��H��H��������H�|$���@H�|$�N������T���H�-}\H��H�5�4%H�81��ɱ��f���USH��H��H�-,�]dH�%(H�D$1�H�}tUH��H�=�1]�V���x2���;���H��H���`���H�}t9H�D$dH3%(u5H��[]�f�1�H�������@H�|$薊�@H�|$�6��菧��ff.�@��ATI��USH��H��H�-w�]dH�%(H�D$1�H�}txH��H�=1]��L��H�=1]�������y���Hc�H�RH��]H��H�JH�B���t
���H�}t5H�D$dH3%(u1H��[]A\�@H�|$辉�y���f�H�|$�V��详��ff.�@��Hc�H�RH��H�[]H�T�����ff.���AVAUI��ATI��USH�� H�-c�]dH�%(H�D$1�H�}t|L��H�=
0]��L��H�=�/]���|�A�ƅ�x=���^���D��L��H�����H�}tIH�L$dH3%(uMH�� []A\A]A^�@1�L�������f.�H�|$覈�u����H�|$�D$�B��D$�藥�����������f���ATI��UH��SH�� H�w�]dH�%(H�D$1�H�;tqH��H�=/]����x.��L���d���H�;t8H�T$dH3%(uJH�� []A\�D1�H���6�L����,���H�;u�H�|$�D$舉�D$�f�H�|$�Ƈ��Ϥ��ff.�@��AVAUATUH��SH��L�-��]dH�%(H�D$1�I�}�D���D��%���H�@H�A]H�\�H�����-.]���%H;&]t\��H�2]H�RH����H��H;X�t6H9�u�I�}A�����tiH�L$dH3%(D����H��[]A\A]A^ËC��uH���!�������D���E��H�uH��A���D����I�}D���u�H�|$�A��I�}��H�}��A���o���L�t$L���c�D���D��%���H�@H�)]H�\�H��t��-]�����I�}u
L���҇f�A���������I�}u�L�t$������L��誇�q���DUSH��H��t@��t�����H����[]ÐH���H��u�H�GH��H��w�H�v[H9Gu�H�o H��荁���lj���~��H9�u��E��u�H��H��[]����f.���SH���s�����xH�{ 1��t[Ð�{���[��H����H���h����SH���3�����xH�C [���H��'H��?���H���0�U��SH���S~��H��trD���H��D��1���u7�C��tH��H��[]��H���������u�H�sH�=D0%1��!���H�rv\H�KA�����H�5v.%H�81�����H�Mv\��H�5<.%H�81�����f����W������UH��H��H�=&+]SH������x �lj��}��H��t"�P��tCH����[]�f�H��H��[]��f������t�H��u\H��H�5�/%H�81��}���DH��� ������z��H����[]�ff.�@��ATI��UH��SH�� H���]dH�%(H�D$1�H�;tAH���y�L�������xU��H����H�;t-H�T$dH3%(u<H�� []A\�@H�|$�6��@H�|$�D$�҄�D$�@����������ff.����SH��PdH�%(H�D$H1�H��?QH��I��H��u&L�������H�T$HdH3%(u1H��P[�@H��@H��L���}v��I�����������蔟��@��H���æ�����I�H���{����1�H��t@��t1�@�����DH���H��w��H���`u�1���t�H�wH�V�H��w�H�cr[H9G��������H�u]H��u0SH��%��H�����H�L]H��t�[�D�ff.�@��H���SUSH��H��@����H�H�Ѓ�������H�
�.%Hc�H�>��f.�H��]H�--%H��uD�H���K���H��]H��t�1�1�H��H��蠖��H��uBH��]H��u'H�-�,%��H������H�\]H��t�1�1�H��H���X���H����������H��[]�@@��u�H���*k��H������f�H�CH��H��w�H��p[H9Cu�H��H��[]�w����H������H��u�H��H��[]�s�������f.���p���H���H���`���H�pH�V�H���N���H�_p[H9P�=���H��H��[]������H�H%��?�H��t~������Hcʃ�~H��H	�H���H
�ATL�d	USH��H�H�]H��u H�-�%�H��蓉��H��
]H��t�L��H��H��[]A\�^��D1�H	�H�����USH��H��H��uH��膙��fD@��u�H�H�Ѓ�H��t��u؉�H��t�����H����H��[]�����t�H���S���Ӑ��AVAUATUSH��H��uH������@@��u�H�H�Ѓ�H��t��uډ�H����H���Bn��A��9�tD���t���L�#D�pL���0H��tSI���L�#D���w���pD9�u��H����H��[]A\A]A^�H���H��u�D��H������A��u�H���*�����t��@���]���H���_~���P���f.���SH��H���y��H��[���e���D��H���cm��H�����v�����SH�������x[�DH���o��H��H��t7H������xu)H��聋����uH���H��tH��[釡��������[�f���H��(dH�%(H�D$1��Y��1�H�H�$�v^��H�=�#]H��H�5��H�D$�{}��H�D$H�L$dH3%(uH��(��̙��ff.��USH��(H�|$H�\$H��dH�%(H�D$1��x���H��H�������xuGH��蟊����u;H���H��tFH��覠��H�\$H�T$H�L$dH3%(u<H��([]�DH�n\H�5z&%H�81�踢��H�n\H�5�&%H�81�蠢������ff.���SH������xH�C [�f�H��������x��[�u��H��m\H��H�5�'%H�81��A����AUI��ATE1�USH��H��8H�-��]dH�%(H�D$(1��?�A��H�}�$H��tvH��薢��H���>w��H�CH�='"]L��Hc�H�
����[V��H��	]H9���H�}��H�L$(dH3%(D����H��8[]A\A]�fD�����L��H�C蒯��H�=�!]1�H�t$ I��H�D$ �[����ucH�=�!]����L���/d��H�8	]H9��t�����H�=k!]H�
��H�5�&%Hc��U��H�}�R���f�H�|$�|�A����H�|$ �F����@H�|$H�t$�1zH�t$�����2���f���H��t@��t!�SH��H���T�����xG=���t9��[�a���H���H��u�H�FH��H��w�H�/j[H9Fu�H���D�[�H��k\H��H�5�%%H�81��>���ff.����g������SH�����xH�C [�f�H�������x��[�r��@1�[�@UH��H��SH�T%%H���Ȟ��H;�]tH�XH��賞��H;�]H�(%%tH�PH��g\H��H�5�#%H�81�脟��@��H9=�]H��$%tH�G����UH��SH��H��H�H������H��t.H�uH������H��t+H��H����H��t/H��[]�@�������H��T$���T$���H��H���������ATUH��SH����g��H��A����g��D��H��H�߉�[]A\�>�ff.���UH��SH��H���˗��H��tH��[]�H��H�����@��H��u�ÐH��@��tw@��u�H��t����H�
��H��wиH��`u(��t�H�BH��H��w�H��g[H9Bu��H��H���4���H��tgH��H��鳞��H���H���i����H��`�l������M���H�GH��H���;���H�[g[H9G�*����;���@�H���fD���o�������f.���SH��H���pf��H��[���U���D��H���Sf����x%���H��������H�`\H�5�"%H�81���������'c�����ATI��UH��SH��L)�~Hc�H9�[]A\�f�HcUH9�H��O�[]A\�ff.���H9�v/UH��SH��H)�H���H��Hc�H9�}��)Ɖ�H��[]�D������f���H9����yAVAUI��ATI��UH��SH��t9H��L��H���[~��A�ƅ�~TH��L��H��S ��wCM��tE�4$[]A\A]A^ÐH��舃����u��E��xM��t�A�$[]A\A]A^�fD�����뿃��D��AUATUSH��H9�v;I��H��H��H��I����}����~;M��tA�EI�D$ H��L��H��H��[]A\A]��H��f\H�5!%H�81��Z���H��f\I�T$H�5� %H�81��=���ff.�f���U��SH��H���V(��tH��[]�H�\f\H�K��H�5� %H�81����D��Hcǃ�H��d\�����Hcǃ�H��a\�����H��]�@��AWAVAUI��ATUSH��L�5�]dH�%(H�D$1�I�>���Ş��L��I�����L��L�������Å���Hc�L�={]H�DmI��H�PL�`A��$�uO����l��L��H�����H�DmI�D����I�>tCH�L$dH3%(��u=H��[]A\A]A^A_�f�����@H�|$�s�G����H�|$�t�����H��d\L��H�50%H�81�脙��@��ATUH��SH�� H��]dH�%(H�D$1�H�;tdH��H�=�]���A��蝝��D��H��H����Hc�H�RH�a]H�T����H�;t,H�L$dH3%(u0H�� []A\�H�|$�Fr�@H�|$�D$��s�D$��7������1��f���H��]�@����fD��H��]�@��AVAUATUH��SH�GH��H����H�b[H9G��H�_ H����H���m������j��H9�uz�CL�#�(L�-
%L�%%L�5�%��ME��MD�H;]tL�sH���(���H��萩��M��M��L��H��H��[1�]H�5�%A\A]A^��s��H���C��H��Z\H�5�%H�81�蛗��ff.�����fD��USH��dH�%(H�D$1���H�5|%H�=�]���øH������xH�L$dH3%(��uXH��[]�DH�-��]H�}t2H�=S]Hc�H�
��H�5%�K��H�}u�H�|$��q�f�H�|$�6p���?���ff.�@��H���SV��H�����hi�����H��H�5	%H�=�]�U�����H�H���fD��H��胫��H�����i�����H�M�\H��t���=2�\��xH����h��H�&�\H���f��w��ff.���H���cb��H��H��鷖������gN�����H��tH��H�%H�=��\�p�PH��`\H�5�%H�81�藕�����S1�H��H�=�%蚂��H������H��[�ff.�f���H��a\H��t���=�a\��x�H���g��H�va\H���f���H���3p��H��H���ו������g������H��H��'H�=a\��fD��S1�H��H�=?%�ځ��H���€��H��[�ff.�f���AUH�=�%ATUSH��H�D`\H�0�Lf��L�%m]\H�5.��H��I�$�2���I�$H���mH�V`\H�8H�5�3%�/���I�<$1�H�"��H�5��$�d��I�<$1�H�����H�59�$�d��I�<$1�H����H�5�+*�d��I�<$1�H�'�H�5�(�kd��I�<$1�H���H�5�%�Rd��I�<$1�H���H�5�%�9d��I�<$1�H����H�5(�i��I�<$1�H����H�5�%�i��I�<$1�H����H�5�%�ni��I�<$�H���H�5��'�Ri��I�<$�H���H�5a%�6i��I�<$�����H�F��H�5��$�c��I�<$�H����H�5;	%�h��I�<$1�H����H�5.%��h��I�<$�H�5���H�5#%��h��I�<$1�H�����H�5%�h��I�<$�H�����H�5%�h��H��[\I�<$1�H�5
%�{h����AM��H�@H��I��H��]���]��~0H�-~�\1�@H�}��H���0��L��H��腣��9O]�I�<$H��1Ҿ[H�
��]A\A]�lp��@�t$H��t>H��tG�u$<tNH�iZ\H�8�v����H�x�l����H��T\H�8�V����H��Z\H�8�F���H�rV\H�8�7���H�+Y\H�8�(�����H��H�=�]�*H�kT\1�H�r���H�! \�H�r���H�l\�H�r����H�_�\1�H�5�%�H�"�\H�[�\H��\H�e�\H���\���1ҿH�5�%���1ҿH�5{%���1ҿH�5q%�x��1ҿH�5g%�e��1ҿH�5[%�R��1ҿ	H�5O%�?��1ҿ
H�5E%�,��1ҿH�59%����]H���f.���L��H�g]���f.���H��H��H�=G]�i��f.���H�$�$�ff.�@��SH�5�]H��1�H�1��~��H�[�ff.�@��S��H��H���i��H��H�����[�ff.����S��H��H����i��H�����u�[��H��H��譠���[�fDH�wH��t@��t��{r��ff.���UH��SH���ބ��H��1�1�I��L�}^�H���PW��H��H��[]�fD��AVI��AUA��ATI��USH���k��L�x���ID��]g��L��D��L��H��I��I�����V��[H��]A\A]A^�D��ATI��UH�-O^S�ik��L�^��ID��g��H���`��I��1�1�H��I���L���V��H����H��H��貗��H��[]A\�f.���ATI��US�@n��H��H��W\H�8�V��H�5O]L��H��H����E��H�5*]H��H����E��H�5 ]H�ߺ��E��I��H��1�L��1Ҿa�U��H��[]A\���ATI��US�m��H��H�^W\H�8�V��H�5�
]L��H��H���iE��H�5�
]H��H���WE��H�5�
]H��1��FE��I��H��1�L�1Ҿa�{U��H��[]A\���AUI��ATUH��S��H���i����t!�����$m���I���!f.�����H�m��uwA�H��V\H�8�JU��H�5;
]L��H��H���D��H�5
]H��H���D��H�5
]L��H���D��I��H��1�L�b1Ҿa�T��H��H��[]A\A]ú����m��H�pW\H�5Q%H�81�����ff.�@��ATI��UH��S���h����t7����H��U\H�8�T��H���l��H�5A]H��H����C���1@��u]H��U\M�$$H�8�HT��H�5]L��H��H���C��H�5]H��H���C��I��H��1�L�b1Ҿa��S��H��[]A\ú����l��1�1����l��f���AUI���ATUH��SH��dH�%(H�D$1��[��H��H��H�$�P��H� ��H��H�5�]H���s���H�5�]H��I���a���L�kL�$1�H�1�L��L�(_H�C�H�C�R��H�$H���2P��H� tYH��H�sH��t#H�{�r{��H�{H����H�$�8y��H�T$dH3%(�u,H��[]A\A]��H�[ �f.�H�[ �%����r���f���AVI���AUATI��US��Y���H��H���d���H��H�k�xO��H� uH�k H�5,
]L���L���H�5
]L��I���z[��H�E$L��H�5�	]H�EH�EL�u�S[��L��I�پH�����L��Y��1�1����E �Q��H����N��H� t8H��H�{tH�{H�K����x��[�]A\A]A^��H�[ ��f.���AVI���AUATI��US��X��H��H���yN��H�kH� uH�k H�5Y	]L���I���H�5B	]L��I���7���H�5(	]L��H�E�dZ��L�u1�1�H�EL��I�پH�EL�>Z��P��H���N��H� t8H��H�{tH�{H�K����w��[�]A\A]A^��H�[ ��f.���AVI���AUATI��US��W��H��H���M��H�kH� uH�k H�5Q]L���Y���H�52]L��I���Y���H�EH��txH�U1�1�L��H�EI��L��Z�L�u��O��H���M��H� t4H��H�{tH�{H�K����*v��[�]A\A]A^�@H�[ ��f�H�5�]L��豆��H���q���f���SH��H��H�t$�c����t.L�L$H��1�1�L�c��9O��H�D$H��[�fD��y��H�����H�L$H��L��H���O���H��[�f���A�1�1Ҿ��h���UH��SH��dH�%(H�D$1�H�$H��tFH��� t.H����?t3H�H�$H��t&����H���H�~��D1�1�1�A���H����
H��t0H��t*H�<$ttH��~?H�TH��*H��H�$��t��H�T$dH3%(uaH��[]�f.����f�H�v H�H�$H���E����f���fD�М$�s9��렐H���z��H���B����{��ff.���ATI��1�UH���S�vB��H��1�1�L�`H��I���H�@L��cH�@ �DM��H�C[]A\�ff.���S��H��H���_��H�����u�[�H�C�L��f���S��H��H����^��H�����u�[�H�C�rL��f���S��H��H���^��H�����t�[�H�C�BL��f���AUATUH��SH��H��H�t$����H�H�����
a�������R
1�1Ҿ�H��A���H���tH�H��H��H9�rRH���>��1��I���#A��A���H����A��L�hI��D	�H�X L�+`1���H�P1���K��H��H��[]A\A]�D�v��H��蛇��H�L$H��L��E�H�����H��[]A\A]�@H����x��H������H�iN\H�5�
%H�81��������AVAUATUH��SH��H��H�t$���H�H�����_������1�1Ҿ�H����F���t
H�H9�HG�H���|=��I���$Q
1��A���?��A��H��L��_I��L�p��A��D	�I�\$ M��1���1ҾI�D$�J��I�|$H��� u#H�GH��~譕��H��H��[]A\A]A^�DH��������Cu��H���;���H�L$H��L��!�H��蟄��H��H��[H��]A\A]A^�@H���w��H������H�M\H�5I	%H�81�蠁����AUATUH��SH����tk����L�.�^���������L�%�v1����>��M��H��1�L�hH��I��1�H�@�H�@ �I��H�CH��[]A\A]�f��+^��A�L�%���u��Et��H���=���H��H��E1�[1�]1�A\H��A]顃�����Rb��f���AUATU��SH�����I�Յ�txL�&�1��>��H�@H��L�`H�@ �]����������]������E1�L��oH��I��L��1�AT1Ҿ�[H�CH��[]A\A]�D1��E1��=��H�@H��H�@H�@ �]����u%�]��L�9�����H��oLD��f.��M
��M�I��A����@�sM
���K���A�L��n���@���럺1��a�����AUATU��SH�����#I�Յ���L�&�1���<��H�@$H��L�`H�@ �Q\����������D\������E1�L�oH��1�I��1�ATL���ZH�C�H��$HD�H��[]A\A]�@1��E1��I<��H�@$H��H�@H�@ ��[����u%�[��L����H��nLD��u�����;L
��M�I��A����@�#L
���?���A�L�>n���4���럺1���_�����AUATU��SH�����I�Յ�txL�&�1��;��H�@H��L�`H�@ �[�����W����Z������E1�L�FnH��I��L��1�AT1Ҿ�lYH�CH��[]A\A]�D1��E1��	;��H�@H��H�@H�@ �Z����u%�Z��L������H�0nLD��f.��J
��M�I��A����@��J
���K���A�L��m���@���럺1��^�����AUATU��SH�����I�Յ�txL�&�1��A:��H�@H��L�`H�@ ��Y�����*����Y������E1�L��mH��I��L��1�AT1Ҿ�,XH�CH��[]A\A]�D1��E1���9��H�@H��H�@H�@ �IY����u%�@Y��L������H��mLD��f.��I
��M�I��A����@�I
���K���A�L��l���@���럺1��H]�����AUATUS��H�����I��I�Խ�����X������1����8��H�@$H��H�@H�@ �I
����H��I��L��pj1�1ɾL����VH�{ XZ�}H��t{H��H��1�1�[��
]A\A]��i��@H�.�X�����i����+n��H���#��H��L���L��[E1�]H��A\A]�}��fDH��I��L��pj�h���H�kH��H��[]A\A]ú1��
\��f.���U��H��H��SH����T��H��H���NW��H��tH��H����S��H���[]ÐH��H��襋��H���[]�f���S��H��H���~T��H��[H���|f���AUI��ATA��UH��SH����o��H���L���H��I��L��D��H����L��s��P�r=��H��H��[]A\A]�@��H��H��1�1����H��H���;����AWHc�AVAUATUH��SH��H�T$�r��I��H���?��I�_I� uI�_ ���
�E�I��L�l��DI�$I��M9���I�<$�U��H��H��u�L�%^�\L�5�%M��uf��L���c\��I��H�9�\H��t�L�5]%DH�;��{�����*H�;L��L��H���g��H�C�L9�u��U�������an��1��H����5��L�{QH�hI��L�xH�@ H�|$1�1Ҿ�@��H��H��[]A\A]A^A_��;U����t71����5��L��RI��H�@L�xH�@ �fD��m��1��H���L5��L��RI��H�hL�xH�@ �e���D1���5��L��PI��H�@L�xH�@ �1���H�;���H�52�$H��H�p:\H�81��fw��fDPXH�W�(H�
�'%H�5�$H���G0�HDʨH�B�'H��$HD�H��<\H�81��w��fD��ATI��USH�� H�H�.�dH�%(H�D$1�H��H�$H�l$�EQ��I�T$H�zu'H��H��H����;��H�L$dH3%(uH�� []A\�L���:����m��DAWAVI��AUI��ATI��UH��SH��(H�dH�%(H�D$1�H��$u-I�<$I�6H�D$dH3%(uxH��([]A\A]A^A_��I��H�<$�L��H�\$�P��H��L��H���;����yM�,$I�L���H�,$H�\$�XP��H��H��H����:����~�I�.�x����9l��f�H�H�� t:H����H��7t1�1��
P��f.�H��u+H� H�?����H�GH��~��	Nf�H��H�?�Ԉ��@��AVAUATUS�����DI��H���>R����������M�,$I����A���I�M������j��H��1�1�H�@I��I��L�)L��?=��I�.�� ��H����M�fH��thI���tBf.�I��M��~OH��~�1�L��I� uI�F H�<�H�����H9�|�I���u�H���H�����@I������R���@[�]A\A]A^�I�n�x����lg��H���dx��L���H��[L���]H��A\A]A^��v��L���i��I�����1��iU��f�SH���g��H���x��H��L�E�[1�1�H���xv�����UH��SH���P����tjH��=\H�8�;<��H�54�\H��H��H���+���S��H�5"�\H��H���+��I��H��1�L� �1Ҿa�;��H��H��[]�f.�H��H��[]�B���f�SH���Wf��H���Ow��H��E1�1�1�H��[�u��ff.����USH��H����O����t2�h��H��1�1�I��L�DK�H���';��H��H��[]�DH��H��[]�z���f.���ATI��U��SH���O����t'L���H��E1�L��P���:��H��[]A\��e��H���v��L���H��L���[H��]A\��t�����USH��H���O����t2��J��H��1�1�I��L��c�H���W:��H��H��[]�DH��H��[]���f.���USH��H���N����t2�g��H��1�1�I��L�����H���9��H��H��[]�DH��H��[]���f.���USH��H���^N����t2�%g��H��1�1�I��L��e�H���9��H��H��[]�DH��H��[]�*���f.���USH��H���M����t2��f��H��1�1�I��L�d��H���79��H��H��[]�DH��H��[]����f.���USH��H���M����t2�ef��H��1�1�I��L�4e�H����8��H��H��[]�DH��H��[]�j���f.���USH��H���>M����tR�f��1��H���-��H��1�1�H�hI��L��G�H�@H�@ �W8��H��H��[]�DH��H��[]���f.���ATI��US@��tWH��H�H��xY�e��1��H���-��L��1�1�H�hI��L��G�H�X H�@��7��H��[]A\�DH���e��H���H��:\H�5��$H�81��3o����ATI��US@��toH��H�H��xqtRH����)��1��H���k,��L��1�1�H�hI��L��G�H�X H�@�@7��H��[]A\��[1�]A\�)��DH���hd��H���H��9\H�5,�$H�81��n��ff.���USH����wfH��uH�6H��H��[]�+���1���+��H��1�1�H�@H��I��L��_H�@�H�@ �6��H�CH��[]ú1��O��ff.�@��AUATUH��SH����J����tf�c��I���c��1��I���*+��H��1�L�hH��I��1�L�`L�9`H�@ �5��H�sH�{H��[]A\A]�^��DH��H��[]A\A]�~���ff.�H�GH��$tH��t��H�G�PH�G�15�����S��H��H���~G��H�����tH������[����UH��SH��dH�%(H�D$1���I����tR�b��H�|$H���<
S1�L���A���D$1ɾH��P��HXZH�T$dH3%(H��u2H��[]��_��H���p��L���1�1�H��H���o��H����b��ff.�H��������?H9�w	H�D?��sa����AUATI��USH����������L�.�I�����~���H�-b1���K)��1�I��1�L�hH��I���H�@L��H�@ �4��H�H�C ��tH��[]A\A]�H��H��[]A\A]�>���fD�H��H�-\L�5A���ID��m�������L��DSH��H�� H� dH�%(H�D$1�H�ukH��H�{ tH�D$dH3%(upH�� [�H��H�$H�D$�JY��H�C H��t�uH��H���"N��H��f���H�C H��t��u�H��H����M����`��ff.����S��H��H����D��H�����uH�������[�H�{ H��H�u����H��H������B2��f���H��H������H���fD��S��H��H���nD��H�����u�[��H������[�f���AUATI��UH��S��H����F������L��H�����H�I��� uuH�@H�X�I�mH��u�Nf�H��H����H9�HO�H�X�H��t2�� H��uI�E H�<���|��I�U�� u�I�EH9�HO�H�X�H��u�H��L��[]A\A]�fDH��H���������K\��H���Cm��H��H���L��[L�o�]H��A\A]�k��f���ATI��UH��SH����tzH�>@����H��������H�_H9�v_@����H���H��
���H�T$�:��H�T$H��H��t)�u%H��H��H�T$�K��H�T$�f��H�]I�4$H��uH��1�[]A\�@��u�H���K��H��1�[]A\��H���]����
�0��ff.�f���t1�1��PB��H���x@�H���H{�����ATI��U��SH���D����t'L���H��A�L��E��/��H��[]A\��Z��H���k��L���H��L���[H��]A\�j���AWAVAUATUSH��dH�%(H��$�1�H�H�D$hH9G)H��$�dH3%(�H�Ĩ[]A\A]A^A_�H�_H��H���,��H� ��H�CH�D$H�D$`�E0��<H�H��<H�EH�H�\$H��H��H�D$H��H��H��H�D$PH�؉�A��H����t$|H��$�H�D$X���H�t$@�|$x�D$<fDH�t$`H�T$�|$xH)�H��H��?H�1�H�H�H�D$H�t$H�Ɖу�H�4H�49�r�|$<H�H…�t��H�T$H�T$H�pH�|$H��H�<�H�|$(H�H�J�T/�J�T(�H)�H)�D$@���r��1҉у�L�L�9�r�H�t$(H�H��H�J�D+�J�D.�H��H�vH��H)�H)�D$@���r��1҉у�L�L�9�r�H�D$ H�D$`H�D$0I��L�d$L+d$ M9�|LH�D$H�|$H��H�t$(I��L�<�L���U(���E0E…���(L�d$I��L+d$ M9�}�H�D$H�t$0H9��kI9��bH�D$0H�D$L�d$HN�+H�|$H�t$(H�l$pL�D$L�d$@H�NjD$|�l$xA�ƒ�A��A��1��ƒ�H�<H�<9�r�D�t$<H�<1�H�E��t	���E��tD�4fD�4H��E��t��H�H�yI��H��H�J�D.�J�D)�H��H)�I)�D���r!H�L$(��1�A�փ�K�7J�79�r�H�L$(H�L�vI��I��H�I�C�J�D.�H��L)�I)�D���r H�L$(��1҉׃�I�?I�>9�r�H�L$(H�D$I��HL$PHt$XL)�HD$0I9�~L9D$H���H�l$pH�t$0H9t$h�7H�D$ HD$0H�D$`H9D$h���H�}H�D$0H�D$H�WH� uH�W H��H�uH�E H�uH��$�dH3%(��H�t$H�Ĩ[]A\A]A^A_�]��f.��t$x1��ƒ�I�H�9�r�L$<H�L���t��H�D$0H�D$H�t$H��I�wH�H��H��I�J�T(�K�T/�I)�L)�D|$@A��A��rA��1҉у�L�L�D9�r�H�H�pI��H��H�J�T+�J�T(�H)�I)�D$@���r��1҉у�I�<H�<9�r�H�D$0����@�t$x�ƒ�I�H�9�r�t$<H�L���t��H�L$H�D$I�wH��I��H��H�H��I�J�T(�K�T/�I)�L)�D|$@A��A��rA��1҉у�L�L�D9�r�H�H�pI��H��H�J�T+�J�T(�H)�I)�D$@���r��1҉у�I�<H�<9�r�H�D$ ����H�D$0H��H�D$���H�C H�D$�/����jW��f.�SH��H��dH�%(H�D$1�H�@H�xiH�t6H�4$��u4H��uH���+H���O��� ���u�H���H��
u�H���6	H�T$dH3%(uH��[�f�H����[��H����V��ff.���AUATUH��SH��dH�%(H�D$1�H� �"H��H����"H�L�%P�\M��u'L�-i�$@�	L���[C��I��H�)�\H��t�H���CH��A�1�1Ҿ���H��H������H����H����H�s�H�����H�tH��H�@H���H�4$@��u5H��t@��tH��H����
�(N��H���H�E��H��
u�H���m	H��H�T$dH3%(H����H��[]A\A]�fDH�v H�������H���T��H������@���=���H�E��H���,���1�1�L��H���M��H�����������H���Z��H������H��)\H�5�$H�81��h^����T����USH����w~H�Յ�tH�>�OH��H��u:H����Q��f���6��H��I��H��L��O1�1Ҿ�}&��H��H��[]��u�H�H�Ѓ�H��t���u�H��u���t�H���7��뫺1��G?���SH��H�GH�3H�|�[~	H�{H�CH�@��uH�����uH���aH�H�C$[�fDUH��SH��H��(dH�%(H�D$1�H����H�0�EfH~�H9��6fH~�H��<��������H��H���H�}H�L$��+�E,H�\$��K��H�EH�D$dH3%(��H��([]�D@����H�����
������ H���(G���Mf.�z��~t$f(��t$fT�f.��fT�f.��u���f/�f(��] �X��&�\��X�f(��X��m�M �?����H��H���H�������H��$�����@����@��������FH��f(�H9��Ef.����f�f���~Ks$�;s$�C���fD���D����MH�؃�f(�H��t��C���������H��f��MH��H*�����fDf.�v"fT�f.�vfP�fP�����9�uVfDH�]�E�:���f��\��X��X�������#��H�����H���`S���M�S���fDH�0fH~�H9���fH~�H��<��������H��uc�#r$H���d���@H�ڸH��?H)�H��H��H	�H��H�D$�~D$����H��H��H��H���9���@f(��_����q$H�����H����q$H��H��H������nP��ff.�ATUH��SH��H���V(dH�%(H�D$1����G�C,���,L�#M��u<H���+L��H�,$�H��H�H�D$dH3%(��H��[]A\�A��tjL��H���H��t�I��$t�A��uA��t�H����@��ulH�E����
�D������H�{H��$�?H�k�v���fDI�$��H���C����H��� �0���H��tw�DH��H���H��tcH��$t]@����@��tMH�����H�;�EC��H�C �C,�C�H��H����������k��H�������t�H�����H�;H���+H�,$�7G��H�������u�H�{H�H�@H�H�H�{�z����S��L��H���"*��H�CH��Z���f�L��H���*��H��E���DH���\H�C�/����2N��f���SH����H��H��H�����1�[�@AWH��AVH)�I��AUATUSH��HH�t$H�T$H=��H���WH��I�H��I�,H�]����H��H���U	��H�T$H�]H�J������H��H���gU	I�>��H�����H�]I��A��H�D$L��L�x��DH���0U	����tOL�mH�}L��I��@��t�H9���M��u�H��H���T	�������H��H����T	����t)I��I�?M��t�H9���@��u�H���T	������u�L9��lH�D$I�H)�H����L��L)�H����H�l$H=�[H�|$L�l$�����H��H��H�D$8H��H�D$H�D�H�j�H�D$(H�L$(H�l$H�D$I��M�d�H��H��H�T$0H��H�L�H9���L��H�Ӄ�H�t$�?f�H��L����S	��H��L�tc�AoK�D-H�HL��H9���H��I��H��M�<I�?H9��`H�|$t�I9���@��u�L���S	����H��L�u�H�D$0H�l$(H�|$L�#H�C����H��I�I�V1�H��L�d$8A�L��o0I��A6H�H�PI�FM�.H�D$1��<DH��L���S	��H��L�t_�oUK�?H�HH��L9�wGL��I��L��H��L�H�}M9��A��t�I9���@��u�L���R	����H��L�u�H�D$L�+H�CL��I�H��I�VL��o(A.H�H�PI�FM�.H�D$I����E1�1���h����H�MH�EL�mI���AoGEI�OI�GM9����d�������H��H���Q	�����b�����������H��H����Q	I�����H�ׄ���H�]I��A���g���H�D$H�t$H�P����L��L)�H���	���H��H[]A\A]A^A_�H�D$H�H�H9�}^����H��H���^Q	I�>����H���������H�D$H�x�@����H���0Q	I���H�ׄ�ttI��H��A����������H��H���Q	I���H�ׄ��-���H�D$H�@��t@I��A����H��H����P	I�>��I����A��H�����d���H�D$H�X��O���H���P	I�>��I��A����I�H��H9��)���H��H9������?���H��H���^P	I������'���I�H9����v���L�hM��I��M�I�@��u.H��L�L$ H�L$�P	L�L$ H�L$����u;I�?I���[������H��H��L�L$ H�L$��O	H�L$L�L$ ������t�I�9M��� ���H�HI��I��M�I�@��u,H��L�D$H�L$�O	L�D$H�L$����u5H�}����u6H��H��L�D$H�L$�dO	H�L$L�D$������t�I�8L��I�����H9����H9����&���L�����H�������L�l$I�nI9��}���L��H��H�D$H�EH�]I�>H�D$H�؃�H�D$��H��H����N	����tOL9���H��f�H���oXI9�r�H�D$H�TH��H���L�|H�D$H��I�I�GI9�w���I���+f.�H��H���eN	����t��Ao$$M��Ad$H�|$M�g�I��t�H9���@��u�H���+N	������H9���@���B���H���N	�����0���I���a���H9����5���ff.�@��AVAUATUSH���,�����4H�����FE��I��I�E� �1����H��H���|��1�����I��H�@H�@ L�hM���I�l$H����H��^]A�D$ M��L��F�H���P<�Љ�f��у�����H�	ȃ���1����	�1�A�D$!���A�D$ I�l$���)H�E�� ��H�EH����A�|$!H���_�J��I��H�E�� ��H����H��I�����M�$H��tH��A�?H��?H�I)�I�^I9�w,�JDH���`L	��������H��I9��#H�{�H�@��tѨ�!H��H���&L	���ƐH����H���A���H�}�V�L�e�[f�H����H9���L��H��L�,��a��H��H��?H�H�L�,�M��tA��uL��H���0��H��H������H�u�� u�H�uH9���H�E ��@������H��L���s0������fDA�����L��H���S0��I�l$H���������l���H�H�ƒ�H���Y����� �H����H�<���I���@���H��H��H��?H�H���F��H��\H�H�EH��[]A\A]A^ÐI�\$H�4��H���F��H��H����%�����f��{?��H���sP��H��L����[1�]1�A\H��A]A^��N��D����H�U�� �~H����H��I��H�
H��H��?HֺH��sA��H���K������fDH9������DH��������?H�CH9��.������@H�E�4����H�U����K�T-L��L�����H�\H�5�$H�81��FK��fDAVI��AUI��ATUH��S�
A��1��I�����H�hH��L�`L�p �(��L�pB��uH��u'L�PAI��L��1�1Ҿ�L��[L��]A\A]A^�@��u�H�E��H��u�H�}������L��A��u��f���1��U���D����B���f���AUATUSH��xdH�%(H�D$h1�����H�Ӹ���IH�D$0�O'��H�D$@�D$XH�D$0H�D$8$H�ƒ�H���H����D$\H�D$HH�D$PH�L$H�T$(H��H�t$ �zZ��H�H�����t8H�|$Xu0H�l$ @���L�d$(A����M��t
A���;L�L$0H��t��uH���H���)L��1�1ҾH�������L$\����H�D$@H�\$0H���zH�|$8H��$tH���_MH��H�L$hdH3%(H���pH��x[]A\A]�f.�H����������H�1Ƀ������L$\�����@�D$HH�D$P�����H�0�D$H�XD$PfH~�H9�t+fH~�H��<�������H��H���9������H���,����H�{�L�L$�]��L�L$�������L��H�5f�H���N �����f�H���D$\f�H9��&���H��H��H��?H)�H	�H��H�D$�~D$����@H��H�|�kh	H��H�D$0�l���fDH������@�������H�E��H��
��������H��H��H��H���8���@I�$��H��
������D$H�\$0��tL�����I��f�H��L���5	H����H��L���	�H���$	H��L��I���	L��H���#	�H���^U	H��H����	H������T$H�\$0��t�I�O�d$�끺1��%(���=����AWAVAUATI��UH��S��H��(dH�%(H�D$1��#������������H�EH�$���@H�m�H�l$9�������������sL�4$L�-�91���s��M��1�1�L�pH��I���H�@L��H�h �I��H�[H��$�{H�L$dH3%(H���,H��([]A\A]A^A_�D��~H�EH�$��tH�EH�D$��ta������&��H�D$�r"��H�l$���;���H���}��H�,$H��tH���|I��H��H�l$H�$$�/f.��+"������H�|$�9��H����H�l$@��tH��t0@��u*H�E��H��uM��tA��uI�$��H�����L�4$L�-�7���H�D$H�$$H�l$A�$L�-]8�y����H���H��H��H�D$�p���H�=�T$1��z1���B���D��{���fDI�|$��Q
����uH�l$L�4$L�-
7�	���I�$H�$H�� ��H����H������H��$��H���>I�T$H�A�H�������H�|$�L��H��H��+tmI�$L�l$�<H����I9�����I�D$J��H��L��H��I��H�D$��L��H��I�$�� u�M;t$�����I�D$ ��I�D$�Q���E1���uH��t���u�H���H��
�t���H�X\�+H�8�3	�����X���1Ҿ+H���<�����A���I�$E1�I�@�� ��H��H����I9���I�T$J�<�@��t5H�I�L��L���I���I�T$ ����1����$����8��H��t@��uH���H��
t1M�������M�H��I��c	H�����M;t$}I�T$ �y���H���S��H��I�$�M���V���M�H��I���b	H���?��������L��E1��=��H��H�����H��I�$�3���f���ATI��USH��H�.H�dH�%(H�D$1�H�,$��tJ@��tIH�5Q]�@<u<1�H9�����H9�O�H�L$dH3%(�mH��[]A\�DH��t3H�ڃ�uH���H����H�؃�H��tuH��t
H��t_D�H�ᾇH���/��I�T$H�z�H��H��H������n����H9Cu����H�؃�H��tH���H��u�H���H��tH��t�@��u�H�E��H���r���H�+P]�@<�a���H��H����>	����H�\H����H�H���w���H�5X\H9�'���������@������H�M��H�����H9E����H��O]�@<����H��H���N>�������d6��L�����@����������USH��dH�%(H�D$1�H�z��H�.H�H�,$��uLH��uw���H��H���.��H��H��H�����H�L$dH3%(��H��[]�f�@��t*H��N]�@<u1�H9�����H9�O��fDH�ڃ�uH���H����H�؃�H��t"H���\���H���S���H���H���C���H���H��t$H���.���@���$���H�E��H������H�SN]�@<����H��H����<	����f�H�1
\H����H�H��ucH�5|
\H9�����������@�������H�M��H���0���H9E�&���H��M]�@<����H��H���r<�����DH9Cu��t2H�؃�H����������H��\H�5��$H�81���=���L4��@��������t���ff.�f���USH��H��dH�%(H�D$1�H�$H� �nH��H�.@���nH�H���7H��A�1�1Ҿ��Z�H��H��tQ�H��H)��Q��H�,$H�èuVH��uqH����H���,��H��H��H������������tH�$H�T$dH3%(H����H��[]�f�@��tH�sL]�@<u
H9����DH�ڃ�uH���H����H�؃�H��t"H���b���H���Y���H���H���I���H���H��t$H���4���@���*���H�E��H������H��K]�@<����H��H���~:	���������H�v H�.@�������H����1��H������H��\H�H��uiH�
�\H9�����H��tt@���"���H�M��H������H;E����H�HK]�@<�����H��H����9�����������H9Ct�H�؃�H��������DH�؃�H������H�������H�������1��H��\H�5��$H�81��";��f�AUATUSH��L�"I��$�I��H��H��@��ubH�������H��L����)��L��H��H��������xJI�m��tN@���/H�PJ]�@<�H9����]A��tjH�+J]�@<u]I9�~�I�mI�m��u�H�������I�MH���D)��H��H��H���V������UI�]H��[]A\A]��H���uH�E��H���7H���H��t#H���	���H������H�E��H�����L���H��t$M������A������I�$��H�������H�II]�@<�����L��H����7	����H�ڃ�uH���H����H�؃�H��t"H����H�����H���H������H���H��t$H������@�������H�E��H�������H��H]�@<�����H��H���F7	����H�:H�rH��[]A\A]�fDH�y\M����H�H����H�5�\H9������������A��������H�1\H�H����H�
~\H9����H����@�����H�M��H������H9E����H��G]�@<�����H��H���s6������fDH9EuR��uNA�������@I�$��H�����I;D$����H�}G]�@<����L��H���6�����H���H�����������H9C�1���H�؃�H���<����G���f�H�؃�H������H���������f���ATI���US�[��H��H����H�]H�E uH�] H�$H�C$�*��I��tkL��L��1�1Ҿ�k���H�{H��$uH�;H��$t(H�s[]A\��'��H��H�KH���9���H�;H��$u�[�]�A\�'��DL��L��1�1Ҿ����H�{H��$t�H��H���[����f�AWAVAUATUSH��M�8I��$��M��I��I��H��H��@��upH����L����H���%��L��H��H���$�������t	I�,$M�l$I�l$����@����H��E]�@<��H9����A��tH�cE]�@<u
I9����DH���uH�E��H����H���H��t#H���K���H���B���H�E��H���1���L����H��t#M������A������I���H������H��D]�@<��L��H���m3	������DH�ڃ�uH���H���(H�؃�H��tH����H����H���H��uwH���H��tH��tf@��u`H�E��H��uSH�CD]�@<uFH��H����2	�����^I�8I�pI�PI�HH��[]A\A]A^A_�f.�H���G���I�L$���H���0#��H��H��H���B���������t�I�\$M�t$H��[]A\A]A^A_�H���[M����H�H����H�5��[H9������������A�������H�q�[H�H����H�
��[H9�V���H����@�������H�M��H�������H9E�����H�C]�@<�v���H��H���1�������,���f�H9EuZ��uVA�������@I���H�������I;G�����H��B]�@<�v���L��H���R1�������f.�H���H���g����s���H9C�!���H�؃�H��������f�H�؃�H���I���H��������;���f���ATI���US���H��H��� ���H�kH� uH�k �j������H�E$L��I��1�H�E$1�L�a�H�EH�EH�E $H�E($�w���H�} H��$u=H�����H� uH�[ H�sH�{[]A\��"���H����f.�H�U(I��H��H���>����@��$��H����5��[L��]L����1�1�H��A\�A4�������t��tHc��*��H��@��f.���AT��A��USH��H��H��dH�%(H�D$1��T1��H��C0u{H�{ $H�$t1H��H�s H��S(�S0�����E���y0��H�{t
H�4$�OB��H�{H���CB��H�CH��H�CH;CtAH�T$dH3%(�u6H��[]A\�H��D�����H�{ $H�$�v����S0�H���(�����&�����S��H��H���0��H��tH��H���A���[�fD��S��H��H���^0��H��H��H���05�[�f���AU��ATI��H��UH��S��H��� 0��H���I���S
��L��L��H����4H���[]A\A]�D��S��H��H����/��H��H������[�ff.����AUH��I��ATU��SH��L�cH��8dH�%(H�D$(1�����H� uL�c ��L���w/��H��I�D$H��$��H�D$H�L$���
H�l$I�<$L�c���H��H��I����H� uL�c A�D$ ��uzM������tzI�|$I�L$���L�c���H���k�H� �~H�t$�H�l$��'��I�D$I�l$H�T$(dH3%(�uTH��8[]A\A]�M������u�I�|$H����?�����I�l$H�t$�H�l$�'��I�D$�L�c �y����$��f���AUI��ATA��USH��H�kH��(H�|$H��dH�%(H�D$1���H� uH�k D��L���.��H�}H�D$H����H���%?��H�}H�L$���
H��u	H�}���~��1�H��H�����@���*�H�CH� t-��u1H�T$dH3%(�uzH��([]A\A]�f�H�C ��t�H�xH�H������H�����H� u0H�[ H�C�f�H�t$�H�D$�<&��H�E�.���H�����E#��D��ATI��U��SH��H�� H�|$H��dH�%(H�D$1��O�H� ��H����L���,��H�{H�L$�H�D$H�������M��H�{H�����tiH��uCH�D$H�t$�H�D$�%��H�CH�T$dH3%(���H�� []A\�@H�{H�K���������H�t$H��t5�H=���fDH�[ �9����H�;��
����Q���fDH�t$�H�t$��$��H�C�]����!��fD��AVI��AUA��ATUSH��H��0H�|$H��dH�%(H�D$(1���H� �%H��H�=��\�m/��H�=�\H���^/��L��D��I���@+��H�;H�L$���
H�D$����H�D$H9���L9��}H��tw<�oH��t
��Rf�H�{H����H�����H���qH�{H�t$�<��H�T$(dH3%(���H��0[]A\A]A^�f.�H�{H��t�H�s�]��H�{H�L$���H�D$� ��H�CH�C�fDH�[ �����H�{H��uNH�D$H�t$ �H�D$ �5#��H�|$H������H�{H�L$���H�D$����&���fDH�s���H�{H�L$���H�D$�z��H�CH�C�w���DH���H�������H���H�H�D$H� urH���8_ttH�D$�w����H�sH�{�3��H�{H�L$���H�D$���H�D$H�CH�D$H�t$ �H�D$ �4"��H�C�K���H�@��=��H���[H�5�$H�81��(��D��AU��I��H��ATI��US��H���(��H��H�ƃ�~%L����9��H������H���[]A\A]�L��Hc��!��H������AT��U��SH��H���i(��H�{ I��tH�{L���9��[�]A\�f�H�Ɖ�����H�����uH�C ��@H�{ u�[�]A\�ff.�@��H�F H��tH��H�F ��DS��H��H����'��H�{H���9���[�ff.�@��AT��I��H��UH��S������H�����tH����'��L��H���8��[�]A\��J�f.���S��H��H���N'��H�{H���8��H�k t�[���ff.�@��AWAVAUATUH��S��H��8L�ndH�%(H�D$(1�H�FH�8H�$�� �FH����H���~�H���H�l$I��1��&��1�L��H������iH����H9���L�4�J�D2H��tnH�D$H��E1�H��H� �[H�I���H�=b���L�1���6��H�t$H��$t=L����7��H�$Hc�H��� u�H;J}MH�B L�4�H��H��u����L�<$L����L��J�0�D���H�D$�@I��tRL��L���7��H��H�D$H�$�H�\$(dH3%(u0H��8[]A\A]A^A_��H�x����L��萯������f���AVI��AUATA��USH�� H�^ L�ndH�%(H�D$1�H�FH�SH�8H�D$H�V �� �
H����H������L��D��E1�H��L�$��$��1�H��H������Ff.�H����H9�}tH��H��H��� tFH��H����H9�}DJ�4 H����5��A��H�D$Ic�H��� u�H;H}.H�@ H��H��� u�H;X}H�@ �f��H���5��빐I��tRH��L���5��H�D$H�D$H�D$�H�\$dH3%(u-H�� []A\A]A^�fDH�x���H��������9��f���S��H��H��H�� dH�%(H�D$1���#���H��H�\$H�$��H�|$dH3<%(uH�� [�����f���AT��UH��SH��H�^L�f H���o#��H��H��� tdH����I9�taH���4��H��� t H����I9�tH���[]A\�fDH�CI9�u�H�}u8H��H��[]A\�X6���H�CI9�u�H��H�t$��H�t$�H������H��H��H��[]A\�6��D��AU��ATUH��SH��H�^L�f H���"��H��H����3��H��� t*H��A���I9�t'H��L��[]A\A]�f.�H�CA�I9�u�H���5��H�}I��t'L������H�EH��t��u�H��H���O���DH�����H��L��[]A\A]�f���SH�Ή׉���!����H���Ź���[�ff.���AUATI��U��SH��H��(dH�%(H�D$1��H��I��誯L���I�E�!��H��H�\$H�$���H�T$dH3%(uH��([]A\A]����fD��U��SH��H��H�nH���5!��H��H�����H��uH���[]�H�C���ff.����AVH��AUATI��U��SH��H��dH�%(H�D$1��P�H� �sH��L���� ����H��I��舸��H�k I��H�$H��$��L�s(H�C $@��uyH�������H��H���#��L��H��H���5����
L�$$x[I��L��L��H��L����H�T$dH3%(���H��[]A\A]A^�D�t4H�m/]�@<u'L9����H��H�,$L��I��L��M��I���@@���*H�E��H����H���H��uyL���H��t$M������A������I�$��H������H��.]�@<��L��H���}	�����H�[ ����H�,$I��M������H�E��H���v������f.�H�C L�k(����H�q�[H�H9E�7���M���.���A���$���I�$��H������I;D$����H�&.]�@<�����L��H������G���H���H��������������f���AU��ATI��H��US��H���c����H��I���6���I�l$H��H��$�4�uPH����I�L$���H������H��H��H�������������H���[]A\A]�D@��t:H�S-]�@<u-H9�}�I�\$����H��L�������f.�H�ڃ�uH���H����H�؃�H��t"H���L���H���C���H���H���3���H���H��t$H������@������H�E��H������H��,]�@<��H��H���>	��������@I�\$H���/���M�l$M�����A�����L��L�����H���[]A\A]��H�9�[H����H�H��ucH�5��[H9�l������d���@���Z���H�M��H�����H;E����H��+]�@<����H��H���z�������C���H9Cu��tH�؃�H�����������@��������D��AU��ATI��H��US��H�������H��I���ֳ��I�l$H��H��$�$�uHH��u{I�L$���H���
��H��H��H����������H���[]A\A]�@��t2H��*]�@<u%H9�~�I�\$����H��L������f�H�ڃ�uH���H����H�؃�H��t"H���X���H���O���H���H���?���H���H��t$H���*���@��� ���H�E��H������H�S*]�@<�����H��H����	������fDI�\$H���7���M�l$M�������A�����L��L�����H���[]A\A]��H���[H����H�H��ucH�54�[H9�x������p���@���f���H�M��H�����H;E����H��)]�@<����H��H���*�����O���f�H9Cu��tH�؃�H�����������@��������D��AUI��ATI��U��SH��H�|$H���-��I�$ �?I����L�����I�\$H��H�D$H��$�RI�D$$��u\H�������H��H�L$���H��H��H���������H�l$x;L��H��H������H���[]A\A]Ð�t,H�u(]�@<uH9����H��H�\$H��H���@���*H���H����H�؃�H��u{H���H��t$H���C���@���9���H�E��H���(���H��']�@<����H��H���	�,���f.�M�d$ ���fDH�\$H������H���H���u�������I�D$H���[]A\A]�H���[H�H9C�5���H���,���@���"���H�U��H������H;E����H�7']�@<�����H��H�������o���H�؃�H���:����������ATH��I��U��SH��H�� dH�%(H�D$1�����H� ��H��L����I��H�kI��H��$��H�C$H��H�,$H�D$�Z�L��H��H��������u8I��H�KH��H��L���3���H�T$dH3%(�u4H�� []A\�Dy�L��I��H���H�[ �d����H�C�����D��AUH��I��ATA��UH��SH�����H�E �+H��D��L���d��L�eH��I��$t5�uKH��ufH����H�����L��H��H�����������tH�]H���[]A\A]�fDA��tH�k%]�@<u
I9�����DH�ڃ�uH���H����H�؃�H��t"H���m���H���d���H���H���T���L���H��t$M���?���A���5���I�$��H���$���H��$]�@<����L��H���v	�����&���@H�m �����H���[M����H�H��u#H�5��[H9�����������A��t���H9CuZ��uVA������@I�$��H������I9D$�����H�5$]�@<���L��H�������������fDH�؃�H���������ff.���ATH��I��U��SH��H�� dH�%(H�D$1�����H� t;H����L���=��H�;$H��u4H�+H�L$dH3%(�uIH�� []A\�H�[ ��f.�H�$H�H��H�D$�'�H�H��H����������
��ff.���AUH��I��ATA��UH��SH���!��H�E �#H��D��L�����L�eH��I��$t3�uCH��u^H����H�����L��H��H���+������tH�]H���[]A\A]�A��tH��"]�@<u
I9�����DH�ڃ�uH���H����H�؃�H��t"H���u���H���l���H���H���\���L���H��t$M���G���A���=���I�$��H���,���H�"]�@<����L��H���	���.���fDH�m �����H���[M����H�H��u+H�5�[H9����������A��t%����H9CuZ��uVA������@I�$��H�������I;D$��H�U!]�@<���L��H������������H�؃�H���������ff.���ATH��I��U��SH��H�� dH�%(H�D$1�����H� t;H����L���]��H�;$H��u4H�+H�L$dH3%(�uIH�� []A\�H�[ ��f.�H�$H�H��H�D$�G�H�H��H��������y���.��ff.���SH��H��H��H�|$������H�{H�L$���H�D$�h���H�����uH���[�H�C�h�����S��H��H���n��H�����u�[�H�C�2��f���SH��H��H��H�|$���5��H�{H�L$���H�D$����H�����tH��舢��H���[�ff.�f���S��H��H������H�����tH���N����[����SH��H��H��H�|$�����H�{H�L$���H�D$�H���H�����uH���[�H�C�H�����S��H��H���N��H�����u�[�H�C���f���SH��H��H��H�|$�����H�{H�L$���H�D$���H�����tH���[�H�C������S��H��H�����H�����t�[�H�C���f���S��H��H�����H��H���#���^��ff.���S��H��H���^��H��H��H�A���H���Y��[�f���AT��I��H��US��H��dH�%(H�D$1������H��H�����L��H��H�����H��t�tAH��H�,$���H��L��H�����H�L$dH3%(�u&H��[]A\�@H���H��u�H��H������������f���AT��A��UH��H��S�x
��D��H��H���J���H�}H��H�����HE}���[�]A\�f���SH��H��H��0H�|$��dH�%(H�D$(1��
��H�SH�D$H��$t(H�{ @��t^H��uGH�|$H�t$�H�D$�)H�CH��t�tQH�t$(dH34%(�uIH��0[�fD@��u�H���H��u����H�{H�L$�H�����룐H��H��������ff.���S��H��H��H�� dH�%(H�D$1��:��H�SH��$tH��H�$H�D$�Z�H�CH��u!H�|$dH3<%(�uH�� [�fD�u�H��H���������f.���AT��I��H��US�������H��H��茣��H�����t[�]A\�f.�H��L������[�]A\�ff.���AT��I��H��US���Y����H��H���,���H�����u[�]A\�f.�H��L���e��[�]A\�ff.���S��H��H���
��H�sH�����H��uH���u����[�H�{ H��H�u�Y���H��H���^{�����f���AT��I��H��US���
����H��H���l���H�����u
[�]A\�H��L���{��I�D$ �A�����AT��I��H��UH��S����H�����u
[�]A\�H����*
��L��H���z��I�D$ �������S��H��H���	��H�sH�����H��u
�[�fDH���h����[��SH��H��H��H�|$���	��H�{�H�L$��H�D$�X���H�C ������H�������8�tH���[�DH�{H�t$���H���[����U��H��H��SH���9	��H��<tBH��u%H�����1�H��u-H9U t>H���[]��u�H���H��u�1�H��t�H�}1�H���b�H��H9U u�H�}H���
��H���[]��U��SH��H��H��H�|$�����H�{�H�L$��H�D$�E���H�C ������H�������8�t
H���[]ÐH�t$���4���H�{H�����H���[]�ff.����AW��AVAUATU��SH��H��L�vH�������H��I���ޟ��I�~�lL�{I��I��� uDI�GH�� �O�K!��t[L��L�����t0H��t4A���A1���+�H������H������	�	�!ȈC!�k L������Hc�L�$�M��tA��uL��L���x�L��落���C L�c�lL������Hc�L�,�M��tA��uL��L���?�L���W����C ���C <tH���[]A\A]A^A_�DH�sL���D��C ��fDM��t3A��u-I�$1���H��@���I�$1҃��������f�1�1�����H��[H�5�$H�81��?�������S��H��H���N��H��[H����f���S��H��H���.��H��H���c���[�ff.����AWAVI��AUA��ATA��USD��H��XdH�%(H�D$H1�@����H�H�4$H���6��E����H��������H9���H�<�H�D$H�|$�;��H�D$ $H�D$�X�H�q����H�(���HD�H�D$(�D$0D��D��������	�	ЈD$0����E1�H��H�l$@�>@H����I9���I�FJ��A�$H��H�޺L��I��H�D$@�n��I��� u�M;~}~I�F ��f.�H��������H9��H��H�<�H�D$H�T$�J��H�D$ $H�D$H��������H��L����1�1�I�پL�����H���ڜ��H�l$H��E��������H�uH�L$(I��� �dH�uH��I�غL��H��?H�H��{�����"@H����H9�}$I��H��H��H��I��H�U�� u�H�UH9�|�H������H�u�� �H����H��H��H��?H�H����E��tJH���/���@D�3��H�uH�L$(�� ��H�uH��I�غ����H��袹��E��u�H���[H�0H�uH��t:@��u4H���\��*f.�H�����H���;���1�蹽��H��fDH�\$HdH3%(H��uVH��X[]A\A]A^A_�fDH�����b���@H�������@H�u���H���[H�5`�$H�81��g������H���[H��H�5,�$H�81��G�����ATUS������I��H���2����t^��tI�4$H���|1���p���H��1�1�H�@$H��I��L���H�@�H�@ �:��H�C[]A\Ð��H������L���H��[L�#{��]H��A\�X���[H��E1�]��A\����1����ff.���ATUS������I��H���R����t^��tI�4$H���|1��萾��H��1�1�H�@$H��I��L��H�@�H�@ �Z��H�C[]A\Ð��H�����L���H��[L�Cz��]H��A\�x���[H��E1�]1ɺA\����1���ff.���AVI��AUI��ATU���S�r��H��H�����L�cH� uL�c ��w{��t	I�6H��uTI�$$�7��I��L�����uL���1�1�L���q��I�$�[]A\H��$A]A^HD���[L��]E1�A\�A]1�A^����1����8����AVI��AUI��ATU���S���H��H���7��L�cH� uL�c ��wx��t	I�6H��uTI�$$�g��I��L�����uL���1�1�L�����I�$�[]A\H��$A]A^HD���[L��]E1�A\1�A]1�A^�����1����k�ff.���SH�=І$�_��H���[�����H�����H��H�5>$H��:��H�;�����H�����H�5v}$���H�;�����H��o��H�5
$���H�;1�H�Ȅ��H�5$$����H�;1�H�����H�5�$����H�;�H�����H�5��$���H�;�H�z���H�5��$���H�;�����H�ߑ��H�5E�$���H�;�����H�$���H�5�@'�h��H�;�����H�	���H�5Ʌ$�M��H�;�����H�|��H�5�$�2��H�;1�H�����H�5ω$���H�;1�H�ތ��H�5��$���H�;1�H�ƌ��H�5��$����H�;1�H�N���H�5��$����H�;1�H�֋��H�5��$���H�;1�H�.���H�5�$���H�;1�H����H�5؈$���H�;1�H�.���H�5�$�r��H�;1�H����H�5�$�Z��H�;�����H����H�5„$�?��H�;�����H����H�5��$�$��H�;1�H�����H�5G�'���H�;1�H�P���H�5��$����H�;�����H�����H�5s�$����H�;�����H�����H�5^�$���H�;�����H���H�5j�$���H�;�����H��}��H�5J$���H�;�����H�Y|��H�55$�m��H�;�����H��z��H�5$�R��H�;�����H����H�5�$�7��H�;�����H����H�5�M'���H�;1�H� ��H�5Y$���H�;�����H����H�5��$����H�;�����H�
���H�5~�$����H�;1�H����H�5c�$���H�;�H��u��H�5R�$���H�;�H��u��H�5�$���H�;�����H�!���H�5$�$�e��H�;�����H�����H�5�
$�J��H�;�����H����H�5��$�/��H�;�H��w��H�5�$���H�;�H�Ev��H�5ނ$���H�;�H�Zs��H�5͂$����H�;�����H�����H�5�$����H�;�H��H�5�$���H�;1�H����H�5܆$���H�;�H�1���H�5؆$�u��H�;1�H�����H�5ц$�]��H�;�����H�n���H�5�
$�B��H�;1�H�����H�5*�$�*��H�;�����H��m��H�5�$���H�;�����H�pl��H�5�$����H�;1�H��k��H�5��$����H�;1�H�@k��H�5�$����H�;�����H�����H�5z
$���H�;1�H��j��H�5�$���H�;1�H��i��H�5*�$�y���H�=��$�X���
H�=Va(H��y\�@���H�=|�$H�my\�(���H�=u�$H�My\����H�=t((H�-y\����H�=V�$H�5y\�����H�=N�$H��x\�����H�=E�$H��x\����H�==�$H��x\����H�=<�$H��x\����H�=8�$H�ux\�h���H�=5�$H�Ux\�P���H�=,�$H�5x\�8���H�='�$H�x\� ��[H�x\����1�@��t&H��u���@��u�H���H��u��ff.�f���H��������fD��H��H�~�HD��f.���H��������fD����fD����fD��H���ZH���`���H�P �@uH�P H�$H���ff.�f���H���ZH�������H�P �@uH�P H�$H���ff.�f���H��ZH������H�P �@uH�P H�$H�B����H���D��H��ZH����G��H�P �@uH�P H�$H�B$H���D��H���ZH������H�P �@uH�P H�$H���ff.�f���H�%�ZH�������H�P �@uH�P H�$H���ff.�f���H��H�5��Z���H�x��H�����ff.����H�5Mv\����H�55v\����H�5v\����H�5v\����SH��H�5)v\�l�H� tCH��H�8@��tCH�H��tH��tH��H�H9�MH�@H�x6H�D?[��H�@ H�8@��u��.�H��H��u��[�fD[���f�H��[�ff.���SH��H��H�5�u\dH�%(H�D$1���H� t_H��H�8@��t_H�H��td��ulH�@H�xuH�D?H���-H��H�$��H�T$dH3%(uNH��[ÐH�@ H�8@��u��^�H��H��u����fDH��H)�HH�H�D�f�������@��H�5�t\1�1��<�ff.����SH��H�5��ZH��dH�%(H�D$1��ȫ��H�SH�ᾍH�xH�$����H������HE�H�T$dH3%(u	H��H��[��=�ff.�f���SH��H�5�ZH��dH�%(H�D$1��H���H�SH�ᾍH�xH�$��j�H������HD�H�T$dH3%(u	H��H��[���ff.�f�����	$�_���ff.�@��H��1�1ɾ��:����H��$HD�H��������f.���ATH�5��ZUSH��dH�%(H�D$1��h���H��tSH�hH��$tIH�H��$u6�I���H��L����
H�$�g�H��H��������H��������H���[H�5�z$H�81��H����USH��H��H�5Lr\���1�H�����@����H�5Gr\H��H����H��������H�H��H�����H�5r\H��H���t�H���\������H�H��H���f��H�5�q\H��H���D�H���,����tXH�H��H���:��H�����H��xH��������?H��H!�[]H�D�@H��H��H	�[]H�D��H����H���H�����H���b���H�����H���"�����H��H�5jq\����ff.�f���H�5Mq\�����SH��H�?��H�[�ff.���SH��H�?�Я��H�[�ff.���SH��H�?谯��H�{H�褯��H�C[�ff.���SH��H�?耯��H�[�ff.���SH��H�?�`���H�{H��T���H�C[�ff.���SH��H�?�0���H�{H��$���H�C[�ff.���H�?�d���@��H�?�T���@��SH��H�?�@���H�{[�6���fD��H�?�$���@��SH��H�?����H�{[����fD��SH��H�?��H�{[���fD��ATI��USH��H�� dH�%(H�D$1�H�FH� uH�F H�hH�}�� ��H�������H�5Vo\L��H������H��L�$$H�l$�5�I��H� tAH��H�;1�1�L����-����H�L$dH3%(u!H�� []A\��H�[ �f�H�}�u������f���H��I��H��H����L��"��ʵ���H�����H��1�H�=P�۸��ff.���H��1�H�=�黸��ff.���H��1�H�=@8雸��ff.���ATA��USH�����H��H�5�ZH���{���H��H��tSH�H��$tJE��u%���H��H�=yv$[H��]1�A\�����k��[H�=Iv$]H��A\1����fD�K��[H�=v$]H��A\1���fD��ATA��USH���}��H��H�5��ZH���ۤ��H��H��tSH�H��$tJE��u%����H��H�=�u$[H��]1�A\�H������[H�=�u$]H��A\1��&�fD���[H�=ru$]H��A\1���fD��SH��蓫��H��H�y�[[E1�1�H�|���L�H�=����1��+���ff.���H��H�5ql\�,�1�1Ҿ�H��H���7���SH��H�5��Z���H�S�[H�8����f���SH������H������HE�H��[�ff.�@��SH�����H������HD�H��[�ff.�@��UH��S��H������1�H��߅���H��[]���D��AVAUI��ATI��UH��H�5ŸZSH�� dH�%(H�D$1����L��L��I���
�H��H��uI�^H�EI�>H�\$H�$H��tkH������H�e ���tsH�H�@H�{H�xqH�T?L��L������H��H�L$dH3%(upH�� []A\A]A^�f�H�����H�EH��t�t.H�M ��u�H���D��H������H���fDH��H�����H�M ��������AUATI��UH��SH��H�5��ZH���ݡ��L��H��I�����H��uI�E�tH�H��H��H��[]A\A]�H�����H��~�H��������?H�x�H�x(H�T?L��H��1�����H��H��[]A\A]���;�H����fD��AUATI��UH��SH��H�5�ZH���-���L��H��I���?�H��uI�E�tQH�H��H��u%H�K H�T?L��H��耞��H��H��[]A\A]�f�H��������?H�y���H�����H�������fDAWI��AVAUL�jATI��UH��SL��H��H�t$�@H����H9�}LL��L�4�H�5�ZL���f���H��L��H��H�@L���H��t7H��I��� u�I;_}
I�G ��H�|$H�M����X���E uH�EH��[]A\A]A^A_��Z���f.���AWH�FAVAUA��ATUH��SH��H� uH�F L� L�pH�L$1�H�5Rh\L���ڸ��H�L$A��D����I��H��H��
�1��I���>���L��L��L��H�hE1�H��L�hH�X H��[]A\A]A^A_���ATI��UH��SH��H��H��H���T��H��tH��L��1�H��[]A\�y�f�����H���ø��H��H��H��H�D$耜��H�D$�f���SH��H��H��H�{�y������HE�H��[�f���ATI��UH��SH�����L��H��H���<������HE�H��[]A\�f�ATUSH��L�f8dH�%(H�D$1�M����H��H���P��H�{H�$H��t��H��t	H�{�4�+��H�C H��uzH�=�H���S���H��H�CH��uGH�C($H��貭��H�{8H����H�L$dH3%(��H��[]A\���u�H��H���Q��H�{��u�H��H���9���r���H�55f\L��襶����
L��H��蕶��H��tH������H��H�}�[H�8�e���L��H��H���\H��H�0蝜��H�5�e\H��H��苜��H���������H�CH�C H�C($H�C0$���f���AVI��AUI��ATUH��S��H�� L�fdH�%(H�D$1�L���9rH�EH��t�tL��~WHc�L���,��H��L�d$H�$�6���H�T$dH3%(u>H�� []A\A]A^�f�H��H��������H��L�4$L�d$��������H��H�5��Z����H��tH�8$tH���H���[H�5$m$H�81��8����AUATI��US1�H�����L�(I�m�.�H����H9�}<H�5}d\H��H�<�1�1�H������I�E�� u�I;]}H�5Sd\I�E ��DH��L��[]A\A]�f�UH��SH��H��dH�%(H�D$1�����HcS Hc{9�}SH�H� u?H�@ H�<�H�5�c\I��1�L�\1��Ū��H�L$dH3%(H��u7H��[]�H���f�H�s�w��H�{H����
H�$�����v��fD��SHcF H��H�V�H�N H�<�H�>�.����k [��H��H�5E�Z�p���H��tH�8$tH���H���[H�5�k$H�81������AVAUI��ATUS���L�0H�XH��M�fH��y:�W�H����H9�~DH�5�b\L��H�<�1�1�H���i���H�]H���tI��� u�I9^~H�5�b\I�F ��@[L��]A\A]A^�@H��H�5��Z蠙��H��tH�8$tH���H�)�[H�5�j$H�81�������SH��H��H�t$���H�T$��H�8�3��H��H��[�f.���UH��SH���n���H�����1�H�;H����H��[]��ff.�H��H�5խZ���H��tH�8$tH���H�i�[H�54j$H�81����H��H�5��Z蠘��H��tH�8$tH���H�)�[H�5j$H�81��������AVAUATUSH�����H�xHH��ubH�@PH�uH��tH��H�}[]A\A]A^��@H����1�1�H�}@D�EX��
���I��H��$uL�u@[L��]A\A]A^��H�81�L�%��Z���1�1Ҿ�H�x�M���I���C�H����H9�}�H��L�,�L��L��街��H�@H�@H��tTL��L��H����I��H�EHH��� u�H;X�k���H�@ �f�H��� t0H��H�N���%����A�[]L��A\A]A^�fD�VH�N ���ff.����������ATH��I��US��H��dH�%(H�D$1��'���Hc�L��H���i��H��H�$���H�E0H��$t&H�E0$H�T$dH3%(uH��[]A\�D����<��ff.����ATH��USH��H��dH�%(H�D$1����I��1�1�L�;����H��H��H�$����H�5�g$I��H�=�[H�8�Ֆ��H�E8H��t�t8H�5�^\L��H���V���H���	���H�L$dH3%(uH��[]A\�H��H���e���H�E8��j��f.�UH��SH��H��(dH�%(H�D$1�����1�1�L�PH�pL�T$M��uA�xXH��I��I��WH�8�c���H�T$H�T$ H�T$ZYH�\$dH3%(uBH��([]�M�A�� uI�zHcω�H9����I�J �@I��I�JD�ڃ�����ff.���AVAUI��ATLc�H��USH������E����H��肓��H��H�����H�xH��H���H��� ��H�GL�Hc�H9��w������L��L��H��I����L�uM��tA��uL��H�����H�E@H�EP蓸����uH��[]A\A]A^�H���x�����t�H�mHH�����t]H�E�� ��H�EL�m�=L��H�E uH�E N�4�H�5��ZL���̓��H�@H�@H��t	L���Ѕ�t^L��L�`�H���H��H��1�[]A\A]A^���DH�������@L��L�����I������DH�����f���@�����ff.�UH��SH��H�5��ZH���(���H��t"H�H��t��uH��H��軽��H��H��[]�H���[H�5�d$H�81��9��f���SH�������n���H��[H���D��AVAUATI��US��H������{Hc�H���ɔ��1�H�=0�I�����H�=�Z\I����L��H���.���L��H���#���~Hc�L��L������1�H�}[��]L��A\��A]A^�A�����USH��H��H9�t3H������H������H�5��ZH��H�����H��t/H�uH�0H��uH��H��[]Ð@��u�H��肼��H��H��[]�H�a�[H�5�c$H�81������ATUH��SH��H�5��\H�����H�����u1�[]A\�@H�5Z\H���a��H�5�Y\H��I���O��L��H��脦��H��t�H�5�Y\H���0��H�5�Y\H��I�����L��H���S���H��t�H�5�Y\H�����H�5�Y\H��I������L��H���"���H���^���H�5RY\H������H�5CY\H��H�����H�������H��������8�����������H��H��@��t1H��uH���[H�5bb$H�81�����f�@��u�H���H��u�H��H��H�5Ob$H��1����1�H�����USH��H��H9�t.H�����H����H�5��ZH��H������H��tH�UH�H��H��[]�H���[H�5�a$H�81��.��ff.���USH��H��H9�t6H�����H���.���H�5w�ZH��H��蜏��H��tH�UH�H�UH�PH��H��[]�H��[H�5�a$H�81����fDATI��USH���!��H�����H�x��H�5G�ZL��H���,���H��H��t}H�uH�0H��t@��uL��躹��H�EH�uH�CH�sH��t@��uL��藹��H�u@H�CH�C($H�C0$H�s@H��t@��uL���d���H�EPH�CP[]A\�H�@�[H�5�`$H�81�����H�ؘ[H�5�`$H�81��������SH��H9�t���H��[�f�AWAVM��AUI��ATI��UH��SH��H�t$L�L$dH�%(H�D$81��h���H���Z�H�D$H��[H�8蘸��H��L�x �@uL�x �B������ZH�D$M�gI�GM�����O��H���G��H�5HV\H��H������I����H�5<V\L��H�����H�D$H�xHH������k���I��H����I�$�� �~H����I��H��~H�8�O�L�xH�=�U\����H�t$ �L�|$ I��L�d$(���L���1�1�I���aL��踜��L����L�xM��tA��uL��L��膷��H��L����H�=�U\�?��H��H9�tH��H���L���H�k �CuH�k L�uM��tA��uL��H���4���L�eHM��tA��uL��H�������D$����H�E1�L������H�EH��t�uH��H�����H�L$8dH3%(H����H��H[]A\A]A^A_�fD�s��I�����A���*���L��H��蓶������fDI�T$����fDI�}M�eM������H�E�V���f.�H�5AT\1�H���������f.�����I�H�������������H��H�������}������f���SH��dH�%(H�D$1���x_H��uNH�$H�����H�$1�1�I��L�
��ZH�����H�L$dH3%(u'H��[�f�H�H�$��t�1�蘳�����H��u��ff.���L�
E�Z�1�1�A��A������SH�����L�
\�ZH��[��H�/�ZA��LD�1�1��������ATI��UH��SH��ZH��dH�%(H�D$1�肮��L�
۝ZH��H�,$���ID����1�1�H��I��I��L�����H�T$dH3%(u	H��[]A\�������ATI��UH��SH�۝ZH��dH�%(H�D$1�����L�
��ZH��H�,$���ID��$��1�1�H��I��I��L������H�T$dH3%(u	H��[]A\�������SH��裭����tH��L�
5�Z1�1�A�1�[����H���[H�5-^$H�81��[��ff.���UH��SH��H��8dH�%(H�D$(1���tkH��H�H�6Q\H�\$H�T$H��x^H�t$�H�\$�K��H��H�T$H��I��L�
��Z��<���H�L$(dH3%(uH��8[]�DH���x����!��H���[H�5�#H�81����f���SH��蓬����tH��L�
e�Z�[A�1�1����H���[H�5J]$H�81��H�����UH��SH��dH�%(H�D$1�@��tMH�xyH�\6H��H�$�R��1�1�L�
�ZI��H��H���I���H�T$dH3%(u5H��[]�f�H�����H��H��x!H�@H�y�H���9��H������H��[H�5(�#H�81�������SH��胫����tH��L�
U�Z�[A�1�1����H���[H�5j\$H�81��8�����SH���3�����tH��L�
%�Z�[A�1�1��`���H�I�[H�5J\$H�81��������SH�������tH��L�
��Z�[A�1�1�����H���[H�5*\$H�81�������SH��蓪����tH��L�
ŚZ�[A�1�1����H���[H�5
\$H�81��H�����SH���C�����tH��L�
��Z�[A�1�1��p���H�Y�[H�5�[$H�81�����H��t@��tH��ÐH�H�ƒ�H��u�� tH����t;H��u%H��H�?��@H�GH��tH��u	H� ����t������뜐��AVI��AUI��ATLc�US�v�������L���6���H��M����1��fDH��H��H�����I9���I�|�����H��u�I9�~*I�l�fDH�}�������tgH��H��I9�u�L��L���.��L�
�ZH��[I��H��L��]1�A\1�A]A^����f.�[L��]D��A\A]A^����DL�
�Z�H�}����H�57�#H��H�u�[H�81��k��ff.���SH��H�� dH�%(H�D$1���~?Hc�H�����H��H�\$H�$莥��H�\$dH3%(u&H�� [��H�<$�H�t$H���Z������S�����UI��H��AWAVAUATSH��HdH�%(H�E�1���� Lc�D�b��I�~Ic�H9��N�A��waH��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$L�}�I����<�H��H�u�H�4�H��=H�M���H��L�}�H��L������L�E�H�M�I��M�E��~I�}J��H�����D��L���>���L��H�����H��$tMH�M�dH3%(�u4H�e�[A\A]A^A_]�f.�H�u�H�u�H�}�����H�������{�����������H��������fD��AWAVAUATU��SH��H����%�?���H��H��t��t=H���ż��DD��I��Mc�N�,��]������Hc�L���*��H���DH�H�Ѓ�H��t���u�H��t>H�5ϒZH���W���I��H����H��裧��I�$H��H��[]A\A]A^A_�D��t�H���K����f�L���X���I��E��u`�+���H���I������I�E�Āu5H����H������L����RH�=s�#H�����H���N���fDI�E(��f�L��L���5���H��렃�1��V���H��[H�5�R$H�81����ff.�UH��ATI��SH��H��0dH�%(H�E�1���H�H��� ��H��H�]�L�eȃ��E�H��H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u����H�D$H��H�u��E�H���H�E��V�H�}�dH3<%(ueH�e�[A\]�fDH�rHc�H9����H��1�H�]�H��=L�e�H���‰u�H���J�����V���fDH)�H�L��l������ff.�f���AVAUATI��US�������b��7����b������
A�H���H�E�ĀuAH����H���,H�=�F\���L���H������I����[]A\A]A^�DH�E(�f.�D�w�Mc�J�,��@����u,Hc�L�������̢���������I���f.�H��蘌��H��E���0���L��L���Ѿ��茢����u8H��tRA��-����L��H�����[�]A\A]A^��若��I��H��������f�H�=�E\���L���[H��]A\A]A^�����1��u���H���OH�=K�#H���~�H���&���fDSH��H�5%�Z�p}���C uH�8H�S�[��C���H�SH�2�� u)H�zHcω�H9��C�H�R H�8�[�
���DH��H�8H�����[���ff.�@��SH���c���H�����tH��[�fDH�K 1�H��[�@��AVAUI��ATI��UH��SH��H�5Q�Z�|��L��L��I��讼��H��uI�FH�����tH��[]A\A]A^�H��H�����H�����uL��L����y��H��[]A\A]A^Ð1��ff.��AWAVAUATUH��SH��H�?dH�%(H�D$1��� � H�����$���1�L�mI���Lf�H����H9�}dL��H�<�1�1Ҿ��?���I��H��$t6H����L��L��H���]��H�E�� u�H;]}H�E ��A����E1�A�I�\$H��I�$�� t^H����I9�}(H��N�,�I��tL���H����M��uhA�H�T$dH3%(L����H��[]A\A]A^A_�@M;|$}�I�D$ �f.�H�}�����1�L���V����@A��tjA��t�@L��H���*L�,$I���Ӱ��I���,���L���p���fTh�#f.X�#wCA��u�M���7���A���-����I�E��H��t�A��u�I�E��H��
t�����M�������޷��ff.���H������H�8H���������H������H�8H������AWL�AVAUI��ATA�U1�SH��dH�%(H�D$1�I�EI��� ��H����H9���L��H�<�1�1Ҿ����H��H���H����H�؃�H��taH����������tzf.�L��L���+H�$H���S���I��I�E�� �p���I;m}CI�E �t���@H���ت��fT��#f.��#wm��u�H��t��tL�A�H�T$dH3%(L��uCH��[]A\A]A^A_��H���H��t����K���H���H��
�;����I�������ff.�@��H������H�8H���g������H�����H�8H���G������SH�����H�CH��t�tH��H�c �[�@H��H��荢��H��H�c �[���SH���C���H��1�H�����tH�s@��tH�c �H��[ÐH���H���H�c �H����ff.�AWAVI��AUA��ATI��USH��H�GH� ��H��L�8H�5�?\H�L$H�hL���i���H�L$D��H��H��覾��I�FH��t�tAI�F M��H��L��L��H��H��H��A��HM�H��I�F H��[]A\A]A^A_�,��@H��L���}����H�@ �k���ff.�@��H��H�vH�8����ff.�f���USH��H�50�ZH��dH�%(H�D$1��gv���H�ᾍH��H�CH�}H�$膬��1�H�����u(H�}H�S������H�CH��u,H�c �H��H�L$dH3%(H��u"H��[]�f.��u�H��H��葠����蚳��f.���USH��H�5p�ZH��dH�%(H�D$1��u���H�ᾍH��H�CH�}H�$�ƫ��1�H�����t(H�}H�S���U���H�CH��u,H�c �H��H�L$dH3%(H��u"H��[]�f.��u�H��H���џ�����ڲ��f.���AWI��AVAUI��H�5��ZATUSH��H��(H�$H�L$��t��H��L��L�p��H������H�H��H�@H�D$H�@H�H�D$I�>�� ��H����H��E1�M�f�v��I�uH��H���)���1�H����I9�}DL��J�<�H��I���a���H��H�����I��� u�M;~}I�F ��f�H���(����W���I�mH��t@��uH��L��覞��H�|$x^H�D$H�TH�t$H�<$�fq��H��(L��[]A\A]A^A_�@I�~�/����H�@1�H�D$H�D$���H�|$�f���H��띐��AWAVAUI��H�5�ZATI��UH��SH���Ys��L��H��I���k���H��H����H�;�� ��H����H��E1�L�c�Hu��I�uH��H�������M�H����I9�}\H�}[L�L��J�4�E1�1�H����H�=���1�I������H��H���z��H��� u�L;s}H��|[L�H�C �@I�mH��t@��tH��L��[]A\A]A^A_��H��L��������H�{�/����M�vI�>�� uqI�~�ht��E1�H��I�FH�D$�;�H����I9�}TH�5�:\H�D$J�<�1�1�I���7���H��H�����I��� u�M;~}H�5�:\I�F �ɐH������H��L��H���Bo���o���ff.�f���AWAVAUATUH��SH��H��H��(dH�%(H�D$1����H�K I��A��A��H��t���H�5�9\L���u������
L���u���H����H�K H�I��H��I��H�K 1��4f�H����I9�}DI�GJ�D�L��H��H��H�$�d���I�L��H��L�q% u�I�WI9�}I�G �E��tH�K H9���H��upM� M�$�L�cM��tA��uL��H���6���H�c �H��H�t$dH34%(��H��([]A\A]A^A_�H�I��H�Ѓ�H���������DI���f��L���S���������H�c �1�1�I��L�X����L��H�$H�l$���E��t
H�K �1��[���蔭��@AVAUI��ATI��UH��SH��H��H�5I8\dH�%(H�D$1��̈��H��tQH��t!<������H���d��@L������I��H�5'H�����L��H��薷��H�5�7\H���g���H��ID�H��t"L�(A�� t>I��H�XA��M��:DH�L$dH3%(H���wH��[]A\A]A^�@L�hH�X M��~�H��H�5�'�/���J�|�M�e�H��t
@����A�L�-�@$f.�H��H�{�I���?���H��H��贇���L��H���ԝ��I���u�I��tH��H�5���L���ƍ��H�EH��H�p������H�5+'H��蒝������DH�H�ƒ�H���^����Ā�|H����A�H���E���H�T$H�5�����D$�M����D$��� ���N�4�I��M���R���M�������H���H������H����x��I������H�G(��5���D��AVH�5s�ZAUATI��U��S�Sm��L��H������I��H����H�;H��$�����wH�{H��H�5�5\L���=���H��H��uH�+L���)���H��H�=b?$H��1�腹��H�SH�KL��H��H������H�5(H���+���[H��]A\A]A^��L���И��[H�=�=$]H��A\1�A]A^�'�������H�hH�����I9���L��莘��H��H�=w=$H��1����H��E1�L�5�>$�cH����I9��m���H��L��L��1�踸��H�KH�SH��H�CHH� t@H��J�<�H��I�������H�5-(H���H���H�SHH��� u�H�B�fDH�@ �f.�H���ؗ��[H�=�<$]H��A\1�A]A^�/����H���@���H���1������AVH�5s�ZAUATUSH��H��dH�%(H�D$1��Ak��H�5�3\H��I���_���H��H��uI�$H�k|[H��H�0耥��H�
�&H�5��'H�����u
H�
C�'H��H��H�=g=$1�����I�|$H���r���H��H������H�5h3\H�����H��uI�D$H����L�(A�� ��L�hH�X M����H��H�5/�'�ߙ��J�|�M�e�H����A�L�-Y<$H��H�{�I�����H��H���t����L��H��蔙��I���u�I��tH��H�5n��L��膉��H�EH��H�p��֠���H�5�&H���R����H�5�&H���>���H��H�L$dH3%(��H��[]A\A]A^�f.�I��H�XA�������@���!���H���H������H�T$H�5"����D$�Ո���D$�����N�4�I��M������M���������ff.���SH��H���_��H��u
H������f���u�H�H�ʃ�H��t��u�H��t1H�P(H��$tH�@($H��H��[�fDH��H��H��[�@����t�H��H�D$�Ή��H�D$����H���c���1�H��H�����D��ATUSH��H��uH���h����@��u�H�H�Ѓ�H��t��u�I��H��t=H�5�yZH���h��H��H��t5L���n���H�E����H�EH��[]A\�f.���t�H�������H�zz[H�5�9$H�81�����f���UH��SH�����H��u	H��豢���@��u�H�UH��H�Ѓ�H��t��u�H��tLH�;H�5J0\1�1���r��H�CH��H�C H�C($H�C0$H�C8H��[]����t�H���S���륐USH��H��H��uH������f.�@��u�H�H�Ѓ�H��t��u�H��H��t=H�5�{ZH����f��H��t8H�(H��t@��uH��H���`���H��H��[]�fD��t�H���Ç���H�*y[H�5S8$H�81��ɭ��f���UH��SH����t7��uAH�H���ߚ��H��t@襊�����V��H��H��H��[]����@�cm��辍��H���ܺ��ڎ��H�����H�5[<$H��H�Ap[H�81��7������UH��SH��H�����H��uH���Π��fD��u�H�H�ʃ�H��t��u�H��t1H�x0$uCH�h0H��t@��uH��H���(���H���[]�@��t�H��H�D$膆��H�D$�H��o[H�5�7$H�81�臬���USH��H���r��H��u
H���%���D��u�H�H��H�Ѓ�H��t��u�H��tH�E(H��$t$H��[]�D��t�H�������f�H��H���E��H�E(H��tȨu�H��H���M���H�E(����H���S����H��H������f���H���3���H��H���ǡ�����AWAVAUATU��SH��8dH�%(H�D$(1����wI��H�5�,\H��I�����H�5�,\L��H�����H�5m,\L��I���ڪ��I�Dž���I�.@����H�H���+�0H�5),\L��衪��H��I����!I����A��t
A����H�؃�H���'��uH���H��t6L���H��t*M���AA���L����H���3�L������H���$�����D$I����f��f/$�T$���%�#�d$1��L$M���$�D$@���	�f(�f��H*�f/�v�H,��$fT��#f.��#��f/L$����d��H�T$H��H�0H9���H��H��<��������H��H���lH����@H�L$(dH3%(H���yH��8[]A\A]A^A_�f.�H��tVI��tĺ��H���z���L��H���2n����nt�H�L$ ��<H��L�l$ ��H������t�����j���f.�1��c��H���Q����H�؃�H���@���H���������f�H�L$ ��>H��L�l$ 脗��H����������fDI�E��H���������f.�H������H���1����<$f.|$�_�YH�0H�D$H9��H��H��<�������SI��H����H���$1���b���$f/L$H���U���DL��H���$H���,���f��$�H*�f/�w��#���L���8���H���$�+����D$L������f��D$�|$�0����L����H��t�M��tA��uI���H�������L����l���H�����@A���.H�؃�H���?���L��螑��H���$葑���D$���fDH���a��H��H���L���I�0E1�I���]f/D$����t�D$fH~�L9���fH~�H��<��������L��H����H��I���Ϸ��L9�����f��$f/\$�I*��Y��XD$s��|$f/������D$�EZ��H�����D�D$�$�(Z���$I����H��H�M��I�@�`��I��I�H���DL��L���K�t$H��M�����H��u�����f��Y��H������H��H��H��H������@�5�#�t$����DH�I�I�I����H���I��L��H)�HH�H9�HO��_��H��M9�$���fDH��I��H���x���L9��o���K�t6H���R���K�7L9�}��T���@H��H��H��H���0���@H��I��I��I�����@H��H�غI��L)�HH�H9�HO�H���Z_��H��M9�|#���DH��I��H������L9�����K�t6H��貵��K�7L9�~����L��輟��I��f�L��H��腵��L��L���*v��I��H��u��|����1��p����[���H�4o[H�5t�#H�81��ӣ��AWAVAUATUH��SH��H��u
H���r���f�@��u�A��H�H�ȃ�H��t��u�I��M��M��H����H�59rZH��H�T$�\��H�T$H��H����L� M��tA��uL��H��H�T$蝆��H�T$H���@���H�CE��ugH�D$PH�CH�C H�C($H�C0$H�C8H�C@H��t�uH��H���B����D$XL�sP�CXH��H��[]A\A]A^A_�DIc�L������H�CH��t��u�H��H������q����������H��H�T$�Z|��H�T$��H��m[H�5a-$H�81��X������USH��H��H�4l[H�-M#\H�8�]���jH��H��jL�
,���E1�1�H���?���H��[]����AVAUI��ATI��U��SH��"\��~
H���I��H�=�"\H���h��H�����HE��)���H�=B#\A���ڪ��AVH��E1�jM���L��H�����H��XZ�~����uH��[]A\A]A^�fD軁��H��H���`���H�h@H��t�@��u�H��H��覄����@���G�AVAUATU��S����I��H���+~������M�eA���uM�uH�=�!\�d���M��1�1�L�f����aH��H���Fi��jH��!\1�AVH��H��E1�E1����H�5"\XH��ZL����X��H��[]A\A]A^ú��	���H��k[H�5�/$H�81��q������AVAUI��ATI��U��SH��裀��H�=L!\H��贪��H��H��������I�ƻ��t<I�]H��t2��
H�������u!H�؃�H��tmH��t��t;H���|��H��jH�� \L��L��SE1�E1�1����H�� []A\A]A^�fDH���H��u��Cf.'�#z�t��f�H��H9�t�H��H��?H)�H��H��H	�H��H�D$�~D$뵺1����΀��ff.���ATUSH��蠳��H�=� \H�-: \A���J���ATH��H��jL�
��E1�1�H���,���H�5= \H��XZ1�H���W��H��[]A\�ff.���H������H��H���w����AUE1�ATUSH��H�kH��H�=}\�@���H��H�����I���+H����I9�}DH�5�\H��J�<�聑��H�����u9I��H��� u�L;k}H�5�\H�C ��f.�H��L��[]A\A]�f�H��L��[]A\A]����ff.���H��(dH�%(H�D$1�H�<$�H�t$H���"���H������H�T$dH3%(uH��(�� �����ATI��US���H��H�t$H�T$�ۖ��Hc�L��H��H���z���H������H��[]A\�f���AVAUATUSH��H�� H�5~\dH�%(H�D$1��ќ��H�5Z\H��H��远��H�5@\H��I��譜��H�5&\H��I��蛜��H��H��H��A�ƃ�E��H��tSH��u;L���H��tBM���vA���LL���H��t#M���l�qf�@��u�H�E��H��u�I����L������f(�L���L$�	���H���$����L$�$D���9�f(�fT
ݳ#f.
ͳ#�g�
��#f/����H,�L�tH�L$dH3%(L���xH�� []A\A]A^��A����M����A����I�$��H��
��H��^[�<H�8��a�����~I�$H��
H�����f.�軂��I���`���I�E��H�������I�������h���L���H�������M��tA����I����H��e[L��H�0�5���H�����L����h��H����H��L����gL��H���`�I�ƨ�H����H�L$��<L��H�D$��^��H��$�����H������������NL��L���3wH��H���pH��tL��H���Hh��H���L���L����rpI���7���f.�H�q][�<H�8�L`������@H�L$��<L��H�D$�0^��H��$�ҿ��H����������
��#���c����
Z�#�V���DH�0fH~�H9�t4fH~�H��<��������I��H���v���f��M��I���`���I�$��H�������)���f.��а#��fDA��"���DL���u��I��������L���H���H��
�<���H�9\[�<H�8�_����� ���I�H��
H�����C���f�H��I��I��I�����@H��[[�<H�8��^��������L��H��?���L��H��?������ff.�@��AWAVI��AUATUSH��(dH�%(H�D$1��Vu����u&H�L$dH3%(L����H��([]A\A]A^A_�H�5M\L��譗��H�56\L��H��蛗��H�5\L��I��艗��H�5\L��H���w���H����H�D$��H��t@��u
H�E��H��tA�H��L��H��較���R���I��ufDH������H��H���mH����H���Ce��H��tfDH���Ъ���H�\$A����M����H�L$��-L������H�l$��BH���	H�L$���
H�����I��A��u]M��tA���?L���H���H��\L�=t$H��u�L���*z��H�{\H��t�L��1�1�H������I��I��L�d$A���~H���OH�L$��*H���J���H�D$����H���H�L$��+H������I��H�|$�jM���?H��t@��uH�E��H��
��H�L$��<H��H�D$�Z��H��$�Ļ��H���������L�l$������L��H���Ul��H������W���H������H�l$����H����H��L���+�U���H����ˋ��H���H��
��H�ڃ�H����H����H��uAH��H���M�H�ú�H��L���k��H����������H���v���H�l$��u2H��u=H��L���+�ƒ��H���H��H����jH������H��H����jH�����I���H�؃�H��u�H��H����fH���h������-H�؃�H�����H��H���fH�����A����L���H������H��L���qa�
������fH�ڃ�H������H��H���HfI���������H�ƒ�H������H��H���ZI�����H�W[�<H�8��Y���������H��H��?���L��1��ӛI������I�$��H��
�����L���H��t�H��t�H�������L��1����I������H��L���A`�-���H���H��
�o���H�ڃ�H������H�������H�������H��H���=�H���P���H�6V[�<H�8�Y������H�EH��
H��������DH��H���E�I������H���H��
uH��H����hI���u���H�ك�H���{���H���q���H���7���H��H��蟖I���>���I�E��H��
�����L���H���
���H������H�������H��L���g�����@��t0H���H�������L��H����a���L��H���n���H�E��H��
t�H���H��t�H��t�H���R���L��H����Y���L��L���_��H�������H�l$A����M��ujL��H�L$��-�d���I���O���@H���H��
�����H����H���`���H���V���H���+���H��H��詯I���2���A��t2L���H��u�L��H���D^I������L��H����]I������I�$��H��
t�L���H��t�H��t�H���5���L��H���I�����ff.�f���AWA��H��AVAUI��ATUSH��(H�t$H�5�\dH�%(H�D$1�����H���.H�5�\L��I�����H�5i\L��I���֏��L�t$H��A���?M���H�L$��-L����~��H�l$��*�H��H���e�H����9H����H��\H��u!@�H�=l$�/s��H��\H��t�H��1�1�H���~��H�����H���OH�L$��<H��H�D$�S��H��$�X���H�������������A�E��t
1��J��I��H�L$dH3%(L����H��([]A\A]A^A_�fDA����I�$��H��
�L��L����[H�l$�����H����H�L$���
H���}��H��������H��Q[�<H�8�T��������H��H��?���4���DH�\$@���H���HH�L$��*H���1}��H�D$A����M���	L��H�L$��+�}��I��H�5(\L��蠍��H������E�������H�߾M���cH��A����H�D$L�(A����M��t
A����L���uj��H��H��I���FH�����ID����I��I�M���sL���MH��H��H��I���jL��H���DZH��M�������H��H���UcL��H��H��藞��I��u���@�tTH�ƒ�H���@���H��H���TH���������tkH�؃�H������H��1���H���8���f�H���H��
�����H����H��t�H��t�H������H��H���	�H������H���H��
�0H���H��
���H��O[�<H�8�lR��������H�H��
H��������L���H������L��L���UY�6���@����H���H�������H��H���[���fDL���H��t�H��t�H�������L��L�������@I�E��H��
��H��L���DH����������L��H���=���I�����DH�E��H��
�H��H���hH�D$A������L��H���ZaI���#���f�����������f�A����L���H������L��H���;]I�����L��L����X��H�����H�l$A���%M���/H�L$��-L���y��I��E������M���m���f�I���H��
�;���L���H���j���H���`���H���3���L��H��聎I���:���f�H�ڃ�H���U���H���K���H���L���H��1��r�H���y���f.�H��L���CH������\���L���]����H���H������H������H���d���H��H��豸�k���@H��L���VI�����A��t#L���H�������H��L���VI������I���H��
t�L���H��t�H��t�H�������H��L���y�I��������H��L[H�5�$H�81�������D���j��H�KT[H�5™#H�81����f.���AWE��AVM��AUI��ATA��USH��H��H��R[H�4$H�5=
\H�(��{��H�����t=H�-&
\H��辑��AWM��M��jH�T$D��H��H����H��([]A\A]A^A_�f�H�5A	\H���q{��H�����t�H�:R[H�S	\H�8H�T$�^���jH��E1�jH�T$E1�1�H���B�H��XZ�r������AUATUH��S��H���d����������u>�!h��H�=�\H��貑��H�5�RZH��I���`@��H��H����H�$�B��u{L�m��g��H�=s\H���k���H�5TRZH��I���@��H��H��tWL�(M��uH�kH��t@��uH��L���j��H�5P\H��L��1�[E1�]1�A\L�ߔ��A]�xH���1����h��H�SR[H�5^$H�81���H�;R[H�57$H�81��چ��A���w���L��L���%j���g�����AVM��AUI��ATA��UH��SH������M��L��D��H��H��A��[]A\A]A^��G�����E1��4���@��SH���sc����t�f��H��[H��鞾��fD�y��H���{���H��L����[1�1�H�����@��AWI��AVAUATUH��S��H��H�T$�c����uH��L�o��L�%����MN��y��H������H��M��H���L��[H��]A\A]A^A_�v���fDH�|$E1��ӣ��L�8I����e��I��I�GH�$�2H����I9�}<M�t$H�$J�<�M��H��ھI���Yl��I��� u�M;w}M�t$I�G ��H�D$H��[]A\A]A^A_�ff.����AUATUS��H������I��H���b����tXA���t
I�}H��ut1���HB��H��H�5����L�`H��H�@H�@ H��[]A\A]鸧�����w��H���ӈ��H��L���H��[L����]H��A\A]�2���f��;a��I�������1���e�����H��1�1�� �����SH��H��H�t$�:a����t&H�T$H��H�5�����"���H�D$H��[���;w��H���3���H�L$H��L������H��藆��H��[Ð��UH��H��SH��H�5�\��~
H�1��H��E1���H���^���H���`����uH��H��[]����c��H��H���p���H�h@H��t�@��u�H��H���f����@��AWM��AVI��AUA��ATI��UL��SH��H�|$蕗��H�=�\���G���SM��M��jH�t$D��L��H���+��H�5,\H��XZH��H���;��H�T$PH�5\H����:��H�T$XH�5�\H����:���|$`H�5�\H��H�H�҃��:��H��H��[]A\A]A^A_�ff.�f���UH��SH��H��H�5Y�\�u��H��u7H�KH�SH��H�������uH��[]ÐH�CH���[]�@H�5Y\H��蹁��H�5B\H��H�见��H�5(\H��H�C蔁��H�5
\H��H�C聁��H����������CH���[]�fD��AWI��AVE��AUI��ATI��UH��SL��H��HdH�%(H�D$81�H�t$��������H�L$ H�������H��T$(H�t$I�H����H�|$E��u}H��H��vsH��I��M��L��j��#^_H���I9$�I9]��H�\$8dH3%(��H��H[]A\A]A^A_���T$(I�H�t$H�|$H��L��I��M��AV�O#ZY�1��@��t1H��t+@��tPH�H�@H�~H�xZH�t?�D$(1�H�D$H��H�t$H�D$H�������H���v��H�����H��H�L$��u��H�L$H���f�H�L$�{��H�L$H����wv��H�xC[H��H�5m$H�81�����ff.����AU�H�=X$ATUSH��dH�%(H�D$1��1c��H��E[�����H����H�5I$H��H�;�P��H�;�����H�����H�5$�P��L�-*K[H�=�
$I�u�*Q��L�%�C[H�DI[H��I�4$H��-F��H�;H�5c����}��H�;�����H����H�5�#�O��H�;�H�D���H�5t�#�O��H�;�����H�����H�5�#�mO��H�;1�H�����H�5$�UO��H�;�H�v���H�5)$�:O��H�;�����H�{���H�5�$�O��H�;�H�@���H�5�$�O��H�;1�H����H�5
$��N��H�;1�H����H�5�	$��N��H�;1�H�X��H�5!�'�N��H�;1�H�@��H�5�	$�N��H�;�H����H�5E�)�N��H�;1�H����H�5�c$�qN��H�;1�H���H�5��#�YN��H�;1�H�����H�5P$�AN��H�;�H����H�5�&�&N��I�<$�����H����H�5[$�
N��H�;H�53	$H���?��I�<$1�H���H�5	$H��[I����M��H�=�[H�	$H�5�$�[r��H�=��[H�	$H�5�$�Ar��H�=��[H�	$H�5�$�'r��H�=��[H��$H�5�$�
r��H�=f�[H��$H�5�$��q��H�=L�[H��$H�5�$��q��H�=2�[H��$H�5�$�q��H�=�[H��$H�5�$�q��H�=��[H��$H�5�$�q��H�=�[H��$H�5�$�qq��H�=�[H��$H�5�$�Wq��H�=��[H��$H�5�$�=q��H�=��[H��$H�5�$�#q��H�=|�[H��$H�5�$�	q��H�=b�[H��$H�5�$��p��H�=H�[H��$H�5�$��p��H�=.�[H��$H�5�$�p��H�=�[�����H�X���H�5�$�}���H�=-$��^��H�����L��H��H�=�[H�$�(j���H�=	$�^��H���_��L��H��H�=��[H�$��i���H�=�$�s^��H���+��L��H��H�=i�[H�$�i���H�=�$�?^��H���~��L��H��H�=5�[H�$�i���H�=�$�^��H����~��L��H��H�=�[H�$�Xi���H�=�$��]��H���~��L��H��H�=�[H�$�$i���H�=q$�]��H���[~��L��H��H�=��[H�$��h���H�=P$�o]��H���'~��L��H��H�=e�[H�$�h���H�=3$�;]��H����}��L��H��H�=1�[H�$�h���H�=$�]��H���}��L��H��H�=��[H�$�Th���H�=�$��\��H���}��L��H��H�=�[H�$� h���H�=�$�\��H���W}��L��H��H�=��[H�$��g���H�=�$�k\��H���#}��L��H��H�=a�[H�$�g���H�=�$�7\��H����|��L��H��H�=-�[H�$�g���H�=j$�\��H���|��L��H��H�=��[H�$�Pg���H�=G$��[��H���|��L��H��H�=�[H�$�g���H�=*$�[��H���S|��H��L��H�=��[H�$��f��H�=��[�����H����H�5��#�iH��H�=b�[�����H����H�5q�#�JH��H�=C�[�����H����H�52$�+H��H�=$�[1�H�;��H�5�$�H��H�=�[1�H�/���H�5A$��G��H�=�[1�H����H�55$��G��H�=�[1�H�����H�5-$�G��H�=��[1�H�����H�5&$�G��H�=��[1�H����H�5%$�G��H�=|�[1�H����H�5$�gG��H�=`�[1�H���H�5$�KG��H�=D�[1�H�{���H�5$�/G��H�=(�[1�H����H�5$�G��H�=�[�H�P���H�5�$��F��H�=�[�H�����H�5�$��F��H�=�[�����H�����H�5�$�F��H�=��[�H�Ӧ��H�5�$�F��H�=��[1�H�g���H�5�$�{F��H�=t�[�H�����H�5�$�\F��H�=U�[1�H����H�5�$�@F��H�=9�[1�H��~��H�5a$�$F��H�=�[�����H����H�5�#�F��H�=��[�����H����H�5�#��E��H�=�[�����H�s��H�5�#��E��H�=��[�����H�T��H�5�#�E��H�=��[�����H�5��H�5��#�E��H�=��[1�H�	���H�5�$�mE��H�=f�[1�H�͢��H�5/$�QE��H�=J�[�����H����H�5�$�2E�����[�H�=Y$H���[�X��H���x���H�=E$H����W��H���x��H�=]�[H��H���>���H�=$�W��H���qx���H�=$H���W��H���Ux��H�=�[H��H���c>���H�=�#�rW��H���*x���H�=�#H���VW��H���x��H�=��[H��H���>���H�=��#�+W��H����w���H�=��#H���W��H����w��H�=��[H��H����=���H�=��#��V��H���w���H�=}�#H����V��H���w��H�=A�[H��H���=���H�=V�#�V��H���Uw���H�=I�#H���V��H���9w��H�=��[H��H���G=���H�=$�#�VV��H���w���H�=�#H���:V��H����v��H�=��[H��H���=���H�=�#�V��H����v���
H�=�#H����U��H���v��H�=l�[H��H���<���H�=��#��U��H���v���H�=��#H���U��H���dv��H�=%�[H��H���r<���H�=��#�U��H���9v���H�=�#H���eU��H���v��H�=��[H��H���+<���H�=V�#�:U��H����u���H�=I�#H���U��H����u��H�=��[H��H����;���H�="�#��T��H���u���H�=�#H����T��H���u��H�=P�[H��H���;���H�=�#�T��H���du���H�=�#H���T��H���Hu��H�=	�[H��H���V;���H�=��#�eT��H���u���
H�=��#H���IT��H���u��H�=��[H��H���;���H�=��#�T��H����t���H�=x�#H���T��H���t��H�={�[H��H����:���H�=O�#��S��H���t���
H�=B�#H���S��H���st��H�=4�[H��H���:���H�=�#�S��H���Ht���H�=�#H���tS��H���,t��H�=��[H��H���::���H�=�#�IS��H���t���
H�=�#H���-S��H����s��H�=��[H��H����9��H�=��[��:��H�=��[�+mH�=�[H���#H�5��#�d��H��9[H�=��#H�0�A��H�$2[1�H�5e�'H��H�H�>���?��I�UH�;H�5g�#�1��H�?3[H��H��[H�2��5��H�=��[H�5_y���m��H�=��[�����H����H�5��#�[?��H�=��[�H�8���H�5(�#�<?��H�=��[�����H�����H�5��#�?��I�UH�;H�5�#�
1��H�5�x��H��H�a�[�4m��H�=U�[1�H�$���H�5�#��>��H�=9�[�����H�����H�5@�#�>��H�=�[�H�V���H�5�#�>��H�=��[1�H�����H�5Q�#�~>��I�UH�;H�5F�#�k0��H�5�w��H��H���[�l��H�=��[1�H����H�5��#�9>��H�;�����H���H�5�#�C��H�;H�5��#H���0��H�5%w��H��H�S�[�6l��H�=G�[�����H�����H�5
�#��=��H�=(�[�H����H�5�#�=��H�=	�[�����H���H�5�#�=��H�=��[1�H�Y���H�5��#�}=��H�=��[1�H�M���H�5�R$�a=��H�=��[1�H����H�5�#�E=��H�=��[H�5�)�y��H�=��[H�5��'�y��H�=p�[H�5'�#�ly��H�=]�[H�5,�#�Yy��H�=J�[H�5
�#�Fy��H�;H�5�#H����.��H�5�u��H��H��[�j��H�=�[�����H�ۢ��H�5��#�<��H�=��[�H�l���H�5l~#�<��H�=��[1�H�p�H�5�~#�d<��H�=��[1�H�d���H�5W�#�H<��H�=��[1�H�x���H�5�Q$�,<��H�=u�[1�H�<~��H�5��#�<��H�=Y�[H�5��)�]x��H�=F�[H�5O�'�Jx��H�=3�[H�5�#�7x��H�= �[H�5��#�$x��H�=
�[H�5�#�x��H�;�����H�����H�5�#�A��H�;H�5��#H���-��H��H��v\��'��H��v\H����H��6[H�8H�5/
$�w��H�=�v\1�H��u��H�5�'�3;��H�=�v\1�H��u��H�5)�;��H�=pv\1�H��u��H�5�#�:��H�=Tv\1�H�[u��H�5$�#��:��H�=8v\�����H�����H�5`�#�:��H�=v\�����H�}��H�5��#�:��H�=�u\1�H�A���H�5!�#�:��H�=�u\�H���H�5��#�f:��H�=�u\�H���H�5f�#�G:��H�=�u\�H�����H�5:|#�(:��H�=�u\1�H�Hx��H�5S�#�:��H�=eu\1�H����H�5n|#��9��H�=Iu\1�H����H�5��#��9��H�=�#�8��H�D$dH3%(��H��[]A\A]�f��uH�x�8���H��t:H��tD�u<tLH��1[H�8����DH�	,[H�8���f�H��1[H�8����H��-[H�8�����H�I0[H�8�����^��ff.����H���H�=sN$��K���H�=�$H���[��K���H�=3�'�K���H�=\�'H���[�K���H�=t�'H�{�[�K���	H�=�$H�[�[�vK���H�=$}#H�;�[�^K���H�=�'H��[�FK���H�=��#H���[�.K���H�=T�#H���[�K���
H�=��#H��[�J���H�=�'H���[��J���H�=�)H���[��J���H�=�#H�k�[�J���H�=��(H�K�[�J���H�2�[�Mk���H�={#H��[�uJ��H���-k���H�=��#�\J��H���k��H���[H�����@��H������H������H�GH�@ H�x���������H��H��H��H��H�����1�H�����H�5]�[�08����H�5�[� 8����H�5M�[�8�����1�8��f���H�%s\H�0��7��ff.�f���H�5�r\��7��H����2��1�H�8t
�)2[��҃���H���ff.���1�1Ҿ!
�T��ff.�U��SH��H��dH�%(H�D$1�H�GH�p��U�����AK��H�5%K$H��H��1��Y��H�5��[H��H�=�[�H�$�.T��H�D$dH3%(uH��[]��[��f���1�1Ҿ�
�>)��ff.���S�a
��6��H��H�����u
H��[�DH��[��ff.�@��SH��H�?��$��H�{H���$��H�{H�C�$��H�C[Ð��SH��H�?� ��H�{���H�{[����ff.�f�AVI��AUI��H��3ZATI��US�G��H��H�h �@uH�h L�eM��tA��t^L�mM��tA��t?L�uM��tA��tH��[]A\A]A^�@L��H���EG��H��[]A\A]A^�f�L��H���%G���L��H���G���������8����SH���<��H����?��ff.�@��ATUH��S��~&�G�H��L�d�fDH��H�s�H���05��L9�u�H��[]A\���UH��AVAUATSH��H�=v�[dH�%(H�E�1�H�WH��H��=��H��H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��urH�\$H���H���8��H��I���v��N�,�I��M��t&f.�H�;H���f��L��H����s��L9�u�L���lA��H�U�dH3%(u%H�e�[A\A]A^]�H)�H�L��H�ֿ��<���X����ATI��UH��SH��+[H��H�3� U��H��t[L9#tFH�5��[H����3��H��H��tnH�5��[L���/����tBH9�����u[1�]A\�f�[�]A\�fDH�5��[H���qd����u���H��H���]/��H�����DH�5q�[1�1�H���MP��H���w���D��ATUSH��H��@dH�%(H�D$81���-uS�fY��H�L$8dH3%(H����H��@[]A\�fD�o��|$Hc�H�4$L�$��Yu��H�4$�|$��u��t����1����HB���L���'��H�4$I��1�����9�uЉ���X��I���o���1�H�t$L�D$ L��H���[�H�D$H���[H�D$�D��H�T$ H��$t
H�t$H���l��H�T$(H��$����H�t$H���P�������V��fD��H��dH�%(H�D$1���t$�?X��H�T$dH3%(u.H���f.��
H�=��#�H��H�$��,V��ff.����ATUSH��H��@dH�%(H�D$81���-uS��W��H�L$8dH3%(H����H��@[]A\�fD�o��|$Hc�H�4$L�$��s��H�4$�|$��u��t����1����@���L���&��H�4$I��1�����9�uЉ��?W��I���o���1�H�t$L�D$ L��H���[�H�D$H���[H�D$���H�T$ H��$t
H�t$H������H�T$(H��$����H�t$H����������T��fD��AWAVAUI��ATI��U��SH����:�#��r��1�L����������H�5R�[L���R��1���_�Hc�L�4�M�>�r�������������k�1�Hc�I�D������ÍU�Hc�M�t�M�>H����I��:r��1�L������I��H�5��[L��L������H��H��?H��?��H�5j�[L�����H��L��[]A\A]A^A_��L���h$�����a���tdH��tW1�A��x���f.����j�������1��>������I�]�q��1�L���������H�����������1�����ff.�f���ATUSH��dH�%(H�D$1��H9�t^H��H����p��H��I����p��I9�tH��H�T$H�=p����%��H�ËD$��uHH��$tBH���p��H��I���p��I9���1�H�L$dH3%(��H��[]A\����h��1���f.�H�߾�
��-��H��I������H�þ�
H����-��L��H����)��H��t�H�����H��H���)���t���H�5	�[1�1�H������I��H��$�R���H�5��[H��1�1�����H��H��$u�1��1����Q�����ATUH��S��H����~:H�>H��tcH��t%H�t$�I��H�t$H��I��tH�����@H����A����dS��H�-h\L��H��H�0�/��H��H��[]A\�H����A��Ɛ��H���q
�,��H��u�H���fDH��H���\ff.����H���Cu��H�H��H�Ѓ��f������USHc�H��H�0$[H�H��%[H�8����H�Ń�tF��suH��f\H�TH��H�5Y�#�&k��H�=��[H��H���4��H��H��[]�f.�H�af\H��f\�UH��Hc�S��H��H�=��[dH�%(H�D$1�H���5����u/��H���E���H��H�L$dH3%(H��u*H��[]��H��$[H�$H��H�8H���wj������O����H�GH�@ H�x��ff.�H�}�#����H�s�#��
����b����c����D����a��������r����4����	����M����J����5�o��8����9����;��������}����
����,����F����g����o����h����#����Y����!����I����z���������}������p�{��q������~��+�m��T�|��s���������q���`��j�/�����x�
����������������3����-����.����/����O���P�n��S�]��R�L��Q�;��0�*��(���|�����������Z����H����$����w����d����f����e�o���^��7�M��i�<��2�+��=����	����������~����%����C����{��������*����@�p��A�_��\�N���=��?�,��<���&�
������k��������'����v���������X����_����n��L�]���L��K�;����'�����`��� ����G����]����[����"����N����B����y�}��U�l����X���G��l�6��^�%��������E����t����V����>����n����m��������u�{��1�j��W�Y��t��6�H�^�#HE��H�Y�#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H���#�H�i�#�H�[�#�H�F�#�H�1�#�H��#�H��#�H���#�H���#�H���#�H���#�H�''�H���#�H���#�H���#�H�q�#�H�o�#�H�q�#�H�R�#�H���#�H�)�#�H�(�#�H�&�#�H��#�H��#�H��#�H��#�H��#�H�#�#�H�%�#�H�#�#�H�$�#�H�#�#�H�"�#�H� �#�H��#�H�'�#�H�)�#�H�'�#�H�'�#�H�(�#�H�*�#�H�*�#�H�*�#�H�)�#�H�,�#�H�4�#�H�3�#�H�1�#�H�6�#�H�4�#�H�7�#�H�9�#�H�7�#�H�8�#�H�7�#�H�7�#�H�8�#�H�@�#�H�@�#�H�B�#�H�B�#�H�C�#�H�C�#�H�B�#�H�A�#�H�?�#�H�>�#�H�B�#�H�A�#�H�@�#�H�?�#�H�>�#�H�@�#�H�@�#�H�?�#�H�>�#�H�>�#�H�=�#�H�<�#�H�<�#�H�;�#�H�;�#�H�:�#�H�9�#�H�=�#�H�?�#�H�@�#�H�@�#�H�E�#�H�G�#�H�H�#�H�G�#�H�F�#�H�J�#�H�H�#�H�G�#�H�G�#�H�G�#�H�H�#�H�H�#�H�H�#�H�G�#�H�F�#�H�G�#�H�F�#�H�J�#�H�O�#�H�S�#�H�R�#�H�Q�#�ff.�SL�
M��t7L�J�H9�s	I��H��I)�M��u
H��[��L��L���u`��H��[�M�PM�HI� u?O�M9�vVA�x�/tOL���f.��x�/t*H��L9�u�J�L�
L��DM�H�f.�I)�I��M��J��ԐH��M��E1���D��AVAUATI��UH��S��H�� dH�%(H�D$1���t���H�t$L�D$�H�{�[H�T$1��W��L����G��H�T$H��$tH�5K�[H���s��H�L$dH3%(H��uIH�� []A\A]A^�D�o�Ic�L�4��c�����z���L��D���
��H���l�������1��w0���bE��f��H��t<@��t0H��t:H��tDH��$tN�@��u@����D�ÐH����f���f.���f.���f.�ATI��USH��H��0H�=�[H�-��[dH�%(H�D$(1��=��H��H��褶H��toH���4��tbH�\$��&��H�5��[L��H��H�D$�a��H�L$�H�5��[H�=��[A��I��H�T$(dH3%(u2H��0[]A\�DH�L$�H�\$H�5R�[H�=[�[�<����D���H��tH��tDH��t'�a��f.��H�=ȁ&���H�=ف&���H�=��&�o�ff.�@��USH����w5H�Ӆ�t$H��H9tH������H�U��
H��H�����H��H��[]ú1��P.����UH��SH��H�5��[���H��H��tH��H��[]�@H�5��[H���q��H��u+�fB��H��H�5\�[H��H�����H��H��[]��H����H��H��u���ff.�f�S��H��u'��u1�[����f�¸��u�1���@H�5y�[�:��H��w���H���tH��t�[úH�5�&H���`���USH��H��H��H��t��tFH��H�5,���Q��H��菙�a
H���r���q
H��H���b��H9�t-H��H��[]�H���H��u�H��H��H��[]��H�ߺ�q
�^��H��H��[]�@UHc�SH��H��(H�=��[dH�%(H�D$1�H���5&��H�$��tH�L$dH3%(H��u4H��([]�H�l$H�=�#�پ
H������H����;�H����!A���AUA��ATI��USH�����[��~&H���[1�DH�sL����H��9-��[�H�I[L; tH��[L; tL���pK��E��H��[]A\A]�H��D��1�1�[]A\A]�
:��f.�AUH��I�պATI��UH��H�=m�#SH��dH�%(H��$1�H���kS��L��L��H���H��H��H���-2��H��[�H��H��#H�1����H��H���2��H��$dH3%(uH��[]A\A]���?��ff.��AUI��H�rATUH��SH��H� tH�rL�bI��I�L9�sY�L9�sM���tF<.tXH��</u
�_���tH��H��I9�vI9�v�</u�H9�sH��H)�uNH��L9�r�H��H��[]A\A]���~/tH���D�E!H��H����;/u�H��I9�w��H��H)��X���AWAVAUATUH�,
SL�u�H��HdH�%(H�D$81�H�I9���H�������I��H�t$0A�E��M�yH�t$I�qH�t$L��L���#I��I��D��I��H�xE��tF�ʃ� t��	��w6M��I�}H�C�H�t$8dH34%(��H��H[]A\A]A^A_�D@��t#��%t6H��I9�v�H�����u�M��H��릐H������{�����1��@�PH�pH�t$�B�</�p��Ic�L�>��H��
[L�L$(L�T$ H�L��H������H��L�T$ L�L$(L���#H�D$��������o����H��\L�L$(L�T$ H�H����H�I
[L��H��L��I�IL�T$(L�L�L$ �*���L�L$ L�T$(L���#H���@H�!\L��L��H��H�L$L�L$(H�L�T$ L�������<���DA�I ���}L��H�1�$H��1�H)�L�L$(L�T$ �[��H���C��H����I�I(H����L��H�$�#H��1�H)�L�L$(L�T$ ������B�<v.H�|$�1���L�L$(L�T$ ���L�L$(L�T$ ��A�A �_���H�T$�L�L$(L�T$ ����H�t$H�L$0L�q�#����L�L$(L�T$ H�t�@��H�t$�1�L�L$(L�T$ ��X��L�L$(L�T$ H��I�A(�1����;���AWAVAUATA��UH��SH��H�T$ dH�%(H��$�1�H�Z�[H���9H�D$8f�)D$@)D$P)D$`���|�]H��$�����H���JE1�E����E��H��H�9�#H�߾1���Hc�M��t L��H��H���N��H9�tSL���E��L�%�[H��H��I�$��M��H9���L�%)[H��H��E1�I�$��M��H9���H��$�dH34%(L����H��[]A\A]A^A_�DH��H�4�&H��1�����>���f.�H�t$@H�|$8E1�H�ڹ�6���H�5d�&H�����I��H������1����@M�,$�^����H�PH�D$@E1�H��$�H�D$H�D$8M��H�D$H��L�l$pH�T$8H�D$H�\$(�MD��	��vSH�L$H�t$A�H��H�|$H)����H����K�\�I��I��tpH�T$8H���E��H����t��� u�H�T$8H���B���fDH�==�#H��$��4��f�H�D$8)D$@)D$P)D$`H����������fDH�\$(H�������1����H�t$ Ic�L��H�\$(H�D�p��V����8���ATI��UH��SH��dH�%(H�D$1��$fH�=	[ffH���1�H�8H��tH���y��4$H��H�T$�D$�������H��H��t$H��L��H�����H��1���t$H������H�D$dH3%(u	H��[]A\��8���AUI��ATI��USH��H��fH�=e[ffH�]��H�8H�GH�p8�ݸL��1H��H���j��I��$tH�5-�[L��H���R��H��tH�E H�%�H=�yuH��H��[]A\A]�H�}�o��H�5��[H��H���
��H��H��[]A\A]�ff.�@H��[ATI��UH��SH��H�8�T��H�߾�
H�����H�ߺ�a
��L��H��H��[]A\����AVAUATI��UH��S��H�� dH�%(H�D$1���t��H�?�[H�t$L�D$1ҹ�H�D$���A�L����W8��H�t$L��H���w���H��H�L$dH3%(��H�� []A\A]A^�D�o�Ic�L�4��@T�����u?H�t$L�D$�H���[H�T$1����u�����Hc�M�,��l���DL��D���}��H�������1��� ����5��D��H��t@��uH���H��tH��t�$�f�UH�-��(SH��H��H��[���H���"��H���[H��t�H��H��1�1�[H��]���f���H��H��K\H�0���H��t2H�Ǩu��'���ԃ�	�t1�H���fD����ԃ�	�u�H����UH����SH��dH�%(H�D$1��=��H��tg1�H��H���7��H�$H��tPH�߾�7��H�Ǩu,�7'���EH���l#��H�T$dH3%(u#H��[]�D�k����f�����T4��@��S��w3H�Ӻ��tH�H�߾�
���H�ߺ�a
���H��[ú1�������SH���tH�ߺH�5I�&�%��H��[���'��H��H���H��H��[�ATI��UH��SH�GH��H�p���,���H�5rg'H���B%��M��tL��H�5;�#H��1��i1��H��tH��H�5��#H��1��P1��H�5�'H�ߺ�$��H�=m�[�A��H��[]H��A\�Q��AVAUM��ATM��UH��SH��H��t$A��H���L��E��uG�H�53�&H���$��H��tH��H���#��L��L��H���u=��H��[]A\A]A^�f�D��H�5��&H��1��0���f.�AVM��AUI��ATA��H��1�UH��1�S�A��H��M��M��H��D��H�50�#H���2���H��[]�A\H�5�'A]A^�#��fDATI��UH��SH��H��dH�%(H�D$1�H�|$�%��T$H��M��H��H���`���H�L$dH3%(u	H��[]A\���1��f���ATUSH����H�`[L� �1��H�xH������E���H�5�R#H���$9��L��H�����H��H���<���H�=1�'�M��H��H���btH�����uBH�5��&H�ߺ�"��H��H����;��H�ߺH�5��'��"��H��[]A\��H��H�5E�#H��1���.����f�@��u*L�g�0��H�xH���1���[L��]A\�7���H��t2H��t<@��u@��t@H��[���@H�i�Z����@H�9[����@H���Z���@H��[���ff.����S��
H�����H��tH��[����H��t3��uH�{[��@H��t:H��tD��u��tCH�3[��H��[H�8[�P��H���Z���H��[���H�A�Z��H�[��ff.�����[1��!�1Ɖ5x[�����f[����Ѓ��ff.����ATI��U��SH��H���H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��w��H�8t]H��$L���H��H�D$1�H�D$0L�D$�D$�D$0H�D$ ����H�L$�H�5��[H�=��[H�D$�'��H�D$(dH3%(uH���[]A\��s.����AUI��ATA��UH��SH��H���L�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��v��H�8t_L��D��H��H��H��$L�D$�D$ H�D$H�D$0�D$0H�D$ ����H�L$�H�5��[H�=��[H�D$�&��H�D$(dH3%(uH���[]A\A]��n-��ff.���ATI��U��SH��H���H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��g��H�����uH�D$(dH3%(umH���[]A\�f�H��$L���H��H�D$1�H�D$0L�D$�D$�D$0H�D$ ���H�L$�H�5��[H�=��[H�D$��$����\,��ff.����AUI��ATA��UH��SH��H���L�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��V��H�����u%H�D$(dH3%(uyH���[]A\A]��L��D��H��H��H��$L�D$�D$ H�D$H�D$0�D$0H�D$ ����H�L$�H�5��[H�=��[H�D$��#���w����?+��ff.�@��UH��SH��H���H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��6��H�8tYH��$H�T$H��H��H�D$H�D$0�D$�D$0H�D$ �9���H�L$�H�5��[H�=��[H�D$��"��H�D$(dH3%(u
H���[]��8*�����SH��H���H�t$8H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��5��H�����uH�D$(dH3%(ufH���[�H��$�H�T$H��1�H�D$H�D$0�D$�D$0H�D$ ����H�L$�H�5��[H�=��[H�D$�!����1)�����H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H��H��H�D$1�H�D$ �$�D$0H�D$�N���H�L$dH3%(uH�����q(�����UH��SH��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1������t@H��$�H��H��1�H�D$H�D$ �$�D$0H�D$���H��1�H����H�D$dH3%(u
H���[]��'��fD��ATI��UH��SH��H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1������tAH��$�H��L��1�H�D$H�D$ �$�D$0H�D$��H��H��H����H�D$dH3%(uH���[]A\��&����UH��SH��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�������tqH��$�H��H��1�H�D$H�D$ �$�D$0H�D$���H��H�@H��H�p����H��H��1�H�5�#��#��H�=��[�3��H��H�����H�D$dH3%(u
H���[]��%��D��Hc}�[1����#�BH���f�[H�g�[H¸H�:H�r����H�=5�[�@��H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ H�D$�D$0��H�D$dH3%(uH�����$��fD��AVI��AUI��ATA��UH��SH���L�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��D$fH�=��ZffH���H�8H��t
H�|$��H�Njt$H�T$�D$�����&�H��H��tNH��$H�T$L��H��H�D$H�D$0H�D$ �D$ �D$0��H��L���l��t$H���`�H����T��D����T��ff.�f���ATI��US����T�������t��H��H��t���H��L��H�=��#H��1�����{����L��H�=��#H��1��e��D��U���H�5��#SH���H����9��H����H���j��H�޿H����9��H�����H�5dx'��9��H�����H�5,�#��t&�����H��H��H���#HD�H�����H��H�¿�b9��H��x=�H�5�w'��G9��H��x"H���ZH�H�����H�޿H��� 9������ff.���ATH��I��H��UH��SH��dH�%(H�L$1��D$����H� tH�xH�T$��H��H��t$H��L��H����H��1��x��t$H���l�H�D$dH3%(u	H��[]A\��n!��ff.�����w'Hc�H���#H��H�P��8HD���1��ff.�f���H��t6@��u @��t^H��t5@��tGH�_&H��u2ÐH��$��H��^&��H��^&���;��H���H��u�H��
$�@��H��tH9�tf�H�0H��tH9�u��@1��D��1�H��t@��t�fDH���H��t�H�OH�Q�H��w�H��H��}+������H�������1�H��t@��t�fDH���H��u�H�OH�Q�H��w�1�H9w���@��SH��H��H��H��dH�%(H�D$1����H��H�ڿH�$���H�L$dH3%(uH��[����f.���UH��H��SH��H�����H��H��H��[H��]�d��@��UH��SH��H�\$H�t$H�����H��H�޿���H��[]�f.�UH��SH��H�p�ZH�8�X��H�5��[H��H��H�����H�����ff.���H��H�5��[1�1��x��H��$t"H��t�uH���H��tH��H���!��H���fD��AUATU��SH��H����y���1�1����H��H�����@���s���H��t��u)H�{H����H��[]A\A]�ao�H���ZH�:��@H��tjH��tt��uO��tzH�#�Z�ؐD�g�Ic�L�,���;����u1�1��������L���X��H��E���^���D�����H�q�Z��H�A�Z�{���@H��Z�k���@H���Z�[���@��H��H��H�t$H�5!�[H��tKH�L$A���^8��H��$t?H��uH�����H���fD�u�H���H��u�H���1�1����H��$u��H���ff.�@��SH��H��H���H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��$�H�t$�D$H�D$H�D$0�D$0H�D$ ���H��H�$�)���H��H�D$H���ZH����H������ff.���SH��H��H���H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��$�H�t$�D$H�D$H�D$0�D$0H�D$ ����H��H�\$H�$H���ZH��+��H�������H���ZATI��UH��SH��H�8�P��L��H��H��H��[]A\��ff.���AWI��AVI��AUI��ATI��UD��SH��H���ZH�8���L��L��L��H��H���l�H�5M�[L��H���J��H�5��[H��H�H�҃��/��H��H��[]A\A]A^A_�ff.�f���AUI��ATI��UH��SH��H���ZH�8�z��L�꾑
H��H������H�ߺ�a
����H�5ƥ[L��H�����H�5��[H��H�����H��H��[]A\A]���H��H�=��[���H�=��[���H�=	�[H���p����AVH�=Ǹ#AUL�-��ZATUSI�u����H���ZH�5��H��H���!��H�;H�
*��H�C���H���k��H�;H���Z�����H�5e�#���H�;1�H���H�5�#���H�;�����H����H�52�#�-��H�;�����H���H�5E�#���H�;�H����H�5�#���H�;1�H�k�H�5�4#����H�;1�H�����H�5��#����H�;�����H����H�5l�#���H�;�����H��!H�5b�#���H�;1�H���H�5;#�y��H�;1�H�ݼ��H�5C�#�a��H�;1�H����H�5�#�I��H�;�H��H�5�#�.��H�;1�H�����H�5�#���H�3H�=��#�G��H�-@�Z�����H����H��H�5�#H�E����H�}1�H�$���H�5b$����H�}1�H�K�H�5�C(���H�3H�=��#����H�Y�ZH�3H�=��#H�����H���ZH�=��#H��H����H�W�ZH�3H�=u�#H����H�-�ZH�=m�#H��H�E�{��H���ZH�uH�=Y�#H��a��H���ZH�uH�=M�#H��G��H���ZH�=>�#H��H��.��L�%�Z�����H�����H��H�5��#I�$����I�<$1�H��$H�5~�'���I�<$1�H�%H�5t�#���H�uH�=Ե#����H�g�ZH�3H�=ɵ#H����L�%��ZH�=��#H��I�$���L�5l�Z�����H�����H��H�5d�#I��.��I�>E1�1ɺ�Q�g��I�4$H�=x�#�G��E1�1ɾQH�F�ZH��H���6��I�4$H�=Q�#���H�/�ZH�uH�=N�#H����L�%
�Z�����H����H��H�5͞#I�$���I�<$1�H�ɸ��H�5��(�}��I�<$1�H�PH�53�'�d��I�<$1�H����H�5�#�K��I�UI�<$H�5�#�7��L�-h�ZH�5��H��I�E�]��I�}�H�H�5�0#���I�}�H�QH�5�#����I�}1�H�H�5u�#����I�}�H�H�5��#���I�}�H�P���H�5Q�#���I�4$H�=4�#����L�%�Z�����H�a���H��H�5��#I�$�^��I�<$1�H�����H�5�R&�E��I�<$1�H�X���H�5�#�,��H�uH�=�#�\��H�E�ZH�=�#H��H��C��L�%��Z�����H����H��H�5�#I�$����I�<$1�H��H�5��'����H�3H�=��#���H�.�ZH�3H�=��#H�����H�e�ZH�uH�=��#H�����H�#�ZH�5~�#H�H��H���ZH�8�_��H���ZH�uH�=j�#H����H�.�ZH�=k�#H��H��l��H���Z�����H�9���H��H�5=�#H����H�;1�H��H�5]{#����H�;1�H�CH�5��#��������H�uH�=�#H��[���H���Z�����H��H��H�5̛#H����H�;1�H�����H�5��#�~��H�;�H�5��#H���������H�=�#�W��H��ZH�=�=(H��A��H�5
H�5J,#H��H�L�[���H�=@�[�H��	H�5.#���H�=!�[1�H�0���H�5G�#�d��H�=�[�����H�qH�53�#����H�=�[H�����H���ZH�=Э[H�5n�&H�������H�����H�5�#H��H���[�w��H�=R�#�V��H�=�#H��'\�>��H�=��#H��[�&��	H�=�#H�˜[���H�=�#H���[��H�=cy#H���[���H�=>O&H�k�[���H�=��'H�K�[��
H�=k�#H��[��H�=.�#H�ۛ[�~��H�=�#H�˛[�f��H�=ݮ#H��[�N��H�=�#H�Û[�6��H�=��#H���[���H�=��#H�3�[���
H�=�C'H��[���H�=i�#H��[���H�=^�#H�ӫ[��H�=R�#H���[��H�=�'H���[��H�=6�#H�˚[�v��H���[�z�H�˚[�n�H�=w�[H���[����	H�=��&H�0�[�3��H������H��[�H�50�[�H��H��[����H�5
�[�H�=Ѫ[����H�5�[�H�=��[���H�5ͪ[�H�=��[����71�1�H��H���[���H���[�H�=y�[�l��H���[�H�=a�[�T��H�u�[�H�=I�[�<��H�U�[[�H�=0�[]A\A]A^���ff.����SH��H��H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$�V��H��H������H���S����SH��H��H����H��H�����H���*��f.���SH��H��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$���H��H�����H���n��ff.���AWAVM��AUA��ATE1�UH��SH��H��(dH�%(H�D$1�L�|$`H��t
L�fH� uwH��u{L��1�1��V��M��M��D��H��L��1�H�������H�5�a'H����H������E1�H�L$dH3%(L����H��([]A\A]A^A_��L�fH��t�H����H�56�[H�����H9��5H��H��H�D$���H�T$H����H��H�T$H�-�A'����H�T$H��t)��u$H�
H�΃�H��t�� H�
�#HE�@H��H�T$L�`���H��I��I��H�HH���ZATH�5ɱ#H�T$H�81����f�H���ZI��H��H�5t�#H�81��b��f�L��1�1�����H�t$�H�D$H���ZH����H�5/�[H��H��H�D$�?��H�|$L�T$M��M��D��L��1�L�T$�=��L�T$�u���H�ム
����I��H��H�D$H�@H��~�H�WH� tH�W�|�
I��t��H�5�_'H�l$���z����
��@��H��(H�|$dH�%(H�D$1�@��t-H��t@��t�����H���H��u�@H�|$�f��H��t1H�=��[H�T$H���M��tH�L$dH3%(�D$u"H��(�H�I�ZH�T$H�5.�#H�81������N	��ff.���AUATU��SH��dH�%(H�D$1�H�$���������D�g�H��Ic�L�,���&����u!H���u�H��uM�H������L���P��A����H�H��t�1�I��H��H�5ɤ[���H��t���u�H���H��u�H�����H�<$H��t�g����
A�Z��rH���T��H�T$dH3%(�uH��[]A\A]�D�������'�����SH��H���������Z������	���!�H�����D����ZH��[�@��H��H���������Z����Ѓ���H�H�����S��H��H��H�=��[dH�%(H�D$1�H���G��t)H�<$�H��t�@��H�L$dH3%(u H��[�H�3�Z��H�52�#H�81������;��ff.���AUI��ATA��UH��S��H���L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1��:��H�8tNH��$H��I��1�H�D$L��D��H�D$ �$ �D$0H�D$������H�����H��H�����H�D$dH3%(uH���[]A\A]��C����UH��S��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1��J��H�����t���Z��sH�D$dH3%(uXH���[]�@H��$�H��H��1�H�D$H�D$ �$�D$0H�D$�%����H�����H��H���p�����I��f���UH��SH��H��H��t@��t-H������H��H���ZH�MH�5�#H�81����fDH���H��u�H�CH��H��w�H�{H���"����tH�C �CuH�C H��[]�H�CH�8���ff.���AWH�5��YAVAUATUSH���dH�%(H��$�1����H�H���SH���D$���1�H�5�:'I��H�D$@L��H��H�$����L�uI��I����I���TM���kH�{H� �H�5�7'E1����H��tSH�L$H�=
��L��H��H�L$����|$H�L$����H��H���H����H���0��I��H����A����A����A����H���ZL��fDH��$�L��H�5=A&����I��I��H�}���H��H�t$ �H�D$ L�l$(L�|$0L�d$8�_��H��H��$�dH3%(H���ZH���[]A\A]A^A_�H�{�����I����������8��M�NM��tA��uI�H�ƒ�H����H�<$L��H�5��#L�L$���L�L$I��L�����I��H�L$L��H�=���H��H�$�G��L$��H�$��H��H���H����H�����I��H������L�����I�������H�=��ZL��H������t$���:����H�D$����H�D$�!���f�H��$�L��H�5�?&�[���@H��$�L��H�5�?&�;���@L��H�5n�#H�<$���I�����H�=��ZH��L���N��T$�������H�$�T��H�$����L��H�5�#��L�����I���m����� �e���H�<$1�L��H�5w7'���I���ZI9������H�|$pL��H�5�$�X�����H�q�Z�6���H���Z�*��������������H9���UH��H��SH��H���/��H���ZH9tH��1�[]�f.�H��H�5F�Y�q��H��H�57�YH���_��H�}H�0H�����H��t�H�sH�}�n��H��t�H�sH�}�\��H��t�H���[]���f���ATUSH��H9�tTH�����H�5��YH�����H�5��YH��I�����H�0H��I�4$H��uhH�uI�t$H��u:H�uI�t$H��uH��[]A\�@@��u�H���B��H��[]A\�f.�@��u�H���"��H�uI�t$H��t���f�@��u�H�����H�uI�t$H��t���f�SH��H��dH�%(H�D$1�H��tJH��ue1��6���u:H�[�ZH�5�#H�81��J��f.�H��H�$���H��@H�L$dH3%(H����H��[�@��u�H���H��t����u�H�H�ƒ�H���x���H��H�{% H��H��1҃�H��u=H;S}�H�K H��H���D������;���H�	��H���+���H�����H9��O���H������ff.�f���AUATUSH��H��xH�-x�[dH�%(H�D$h1�H����H�0�ZH�8H���=����H���ZL�(fH�=��ZffH����L� I�D$0H���2��H�p�F ��H���ԡ��I�T$0H����1��H�r�F@�H��tWH������H�L$hdH3%(��H��x[]A\A]�H���ZH��H�8���uf�1�1�H��H���Q��H��u���@@��u:H�H���^��t�H���ZL�(fH�=�ZffH���L� H������붐H���~���H��t@��u+���H���ZH��H�8��������c���H��Z���@H���Z���@I�T$H��H�|$H�D$HH�D$H�T$ 1��D$@L�d$H�\$(H�l$0H�l$8L�l$@H�D$X$�D$P�H�D$���I�D$H��H�|$1��D$ L�d$H�D$ H�\$(H�l$0H�l$8L�l$@H�D$H$H�D$X$�D$P�+�����fDH���Z����O��ff.�@��ATI��H��USH��躲H�����u"H������[L��]H�¾a
A\鶼�fDH��L��H�¾a
蝼�H��L��q
荼�H��[]A\�D���f.���SH�����H��H�5ś#H��H��ZH�81��%��D��AWAVAUI��ATI��U��H��SH��(dH�%(H�D$1��.��H���ZH9�6�����H�D$A�H�5ʅ[H�����H��H�-P�#H��tH����������Z��H�����H��L�t$H���R��H�|$H��t9L�����I��I��tL��H�5�#H��1���L��H�5;:&H��1���L���H�l$�\��H�5�[H��L���*��L��H�L$dH3%(��H��([]A\A]A^A_�@I�UH�T$����M�m�9�������1����/���H�D$���rI�]H�\$����I�]���8M�m���FH�������H��H�H�=�[H�T$�u�������M��tA��t,H�+�ZH�5ڙ#H�81����f.�����u���I�$��H��u�H�t$I�t$H���7���@���-���L���4��� ������uS�N��H�=_�#L�t$H�����H�\$H��H���j���L�������I���A���H���8��H������H�D$A�H����������H�-�#���A������A��d������d���f.���H��H�5)�[�$�^H��$tH���H�5�ZH�5��#H�81�����@��H��H�5�[�$�^H��$tH���H���ZH�5��#H�81����@��SH�5t�[�$H���w^H��$t	[��H�߾�
�;��H�5��YH��H�����tH��H�5��Y���[H�@�H�y�ZH�5"�#H�81�������AWAVAUATUH��S��H��dH�%(H�D$1���������茳��I�����E1�H��H�5'�[L��H�����1�H�=�,'����H��I���3���H��H��I�����H��L��L��AVH��M��I��H���XiXZL��H�L$dH3%(��H��[]A\A]A^A_�D�g�Ic�L�,������u1�1������L�����H��E�����H��迲��H�$I��H���!���H�5��[H��tVH��E1�����H�$H������H������H;~�[tTH;}�[���H���ZH�$H�5�#H�81����H�=Y#���H�����H��H��[�A�������D���������AWI��AVI��AUI��ATM��USH��H�dH�%(H�D$1��� ��H��H�j������H�8������I����A����I�M���^I�w��L��训H����1�H���j��I��H����H�.[L�5Ic#�D�L������H�[H��t�1�1�H��L���@��H�$H���BH��~[L�5�N'�f��L�����H��~[H��t�1�1�H��L�������H�H��I�����L��H�=�#H��1��.��H�5��[I��H�pH��t@��uH�����H��L����@��H�Q�ZH�0I�vH��t@��uL������I��tL���ѩH��I�����L9-'�[��L��L�����H�L$dH3%(���H��[]A\A]A^A_�fDH�zHclj�H9��T'��H�j ����DL������I���3����	H�=*�#�?������f.���t+1��$�����L���@��L���(���U���L�uM��t�A��u�I���H��u��
L���(�����fDH���0���n�������H���ZL��H�5n�#H�81��K��ff.���H��H�5)}[�$�'YH��$tH���H�e�ZH�5�#H�81����@��H��H�5}[�$��XH��$tH���H�%�ZH�5��#H�81����@��SH��H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$��$H�D$H�D$ �D$0H�D$���H��H��H���T��H���g�����UH��SH��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$��$H�D$H�D$ �D$0H�D$����H��H��H�����H��H�����f.���PXH���q��H���y��H�5–#H��H��ZH�81����ff.���SH��H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1��h����#��H��$�H��H���$H�D$H�D$ �D$0H�D$���H��H���ZH�8�
��H���5��D��H��H�t$���H�t$�H���l��H������S���H��tH���7���H��[�̭�ff.��UH��SH���B���;������#��H��H���[]���ff.�f�USH��H�����(����H��u����"���H��H�މ�[]�C���u���"��f.���PXH����H���y��f���PXH�����H���Y��f���PXH���!���H���9��f���PXH���A���H�����f���S��H�� dH�%(H�D$1�H��uP���T"���H�$�����H�D$�N���H��H���ά�H�L$dH3%(uH�� [����u��#"�����f���PXH������H���y��f���ATI��USH�����(���L��H����������SH��H������H��H���E���D��SH��H���0���H��H���%���D��SH����H�����H��H��������SH����H���n��H��H�������USH��H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1����H�����uH�D$dH3%(u[H���[]�@�K��H��H��1��(H��$��$H�D$H�D$ �D$0H�D$�Ƹ����H��������(�����ff.���ATUH��SH��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1����H�����uH�D$dH3%(u_H���[]A\�f��K��H��H��H��D� H��$��$H�D$H�D$ �D$0H�D$�ķ��D��H��������D� �����f.���ATI��UH��S��H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1����H�����u!H�D$dH3%(uQH���[]A\�DL��H��H���$H��$��D$0H�D$H�D$ H�D$�̶����H��������ff.���UH��H��SH���;��H�5�X#H��H���t��H��H���9��H��H�����ff.���PXH�5��#H��H�@�ZH��H�81����ff.���UH��H��SH���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$�0��H��H�~�ZH�8���H�57s[H��H��H���Y��H�������ATUSH��H��dH�%(H�D$1�H����H�	�ZH�0H�=k�#1��@��H��H��H��ZH�8���H�5�r[H��H��I�����H��H�=,���H���T��H�t$H���'���H��t�L$H��H�5"�#H��1�����L������@��u	H�w�t���H��t(H��t.��u��t0H���Z�O���H���Z�C���H�U�Z�7���H��Z�+���H�շZ������ATUSH��H��dH�%(H�D$1����H�8t	�?�ZtH�D$dH3%(�,H��[]A\�L�d$L��賜H����H���!��T$H�Ņ����H�5>:&H�����4H�5ڍ#H�����H�%0H=0uH�[ L��H���۰���?H�5ߍ#H��H��t3�H�5i;'H���R��H��H�����T$��u_�$H�5�#H���+�����H��H��膠�������1�1��7��H���Q����H��H�5:9&1��'��� ���f�H�5%9&H��1�����������H��uH���N��fD@��u�H�H�Ѓ�H��t��u�H��t����t��6��fD��H��t@��uH���H��t����ff.�@��S1�H�5��#荓��H�5*~#�H�Bp[���H�5~#�
���H�5~#�b�ӓ��H�5~#�c�“��H�5~#�D豓��H�5�}#�a蠓��H�5�}#�菓��H�5�}#�r�~���H�ϸZH��o[H�5�#H�;�Q��H��o[H�;H�5�#�;��H�5�}#�4�:���H�{o[H�;H�5�#���H�5�}#�	����H�5�}#�M����H�Co[H�;H�5��#���H�5d}#�J�ے��H�5[}#�5�ʒ��H�o[H�;H�5��#��H�5:}#�8裒��H�51}#�9蒒��H�5(}#�;聒��H�5}#��p���H�5}#�}�_���H��n[H�;H�5$�#�9��H�5�|#�
�8���H�5��#�,�'���H�5|�#�F����H�5^�#�g����H�5@�#�o��H�5$�#�h���H�5�#�#�ґ��H�5��#�#���H�5�#�Y谑��H��m[H�;H�5��#��H�5�#�!艑��H��m[H�;H�5i�#�c��H�5�#�I�b���H�5i#�z�Q���H�5Q#��@���H�5��&��/���H�5)#�����H�_m[H�;H�5�#��H�5�~#�p���H�5�~#�q���H�5�~#���Ր��H�5�~#�+�Đ��H�5�~#�T賐��H�5s~#�s袐��H�5\~#�葐��H�5D~#�耐��H�5�{#��o���H��l[H�;H�5^�#�I��H�5~#�j�H���H�5�}#��7���H�5�}#�x�&���H�5�}#�����H�5�}#������H�5|}#����H�5d}#�3���H�5J}#�-�я��H�52}#�.���H�5}#�/诏��H�5}#�O螏��H�5�|#�P荏��H�5�|#�S�|���H�5�|#�R�k���H�5�|#�Q�Z���H�5�|#�0�I���H�5m|#�(�8���H�5P|#�|�'���H�58|#�����H�5 |#�����H�5|#�Z��H�5�{#�H���H�5�{#�$�Ҏ��H�5�{#�w���H�k[H�;H�5��#��H�5�{#�d蚎��H�5i{#�f艎��H�5L{#�e�x���H�54{#��g���H�5{#�7�V���H��j[H�;H�5V�#�0��H�5�z#�i�/���H�5�z#�2����H�5�z#�=�
���H�5�z#����H�5�z#����H�5sz#��ڍ��H�5[z#�~�ɍ��H�5Cz#�%踍��H�5*z#�C觍��H�5z#�{薍��H�5�y#�腍��H�5�y#�*�t���H�5�y#�@�c���H�5�y#�A�R���H��i[H�;H�5Z�#�,��H�5|y#�\�+���H�5dy#�����H�5My#�?�	���H�55y#�<���H�5y#�&���H�5y#��֌��H�i[H�;H�5�#��H�5�x#�k诌��H�5�x#�螌��H�5�x#�'荌��H�5�x#�v�|���H�5fx#���k���H�5Lx#�X�Z���H�53x#�_�I���H�5x#��8���H�5x#�L�'���H�5�w#�����H�5>#�_����H�5�w#�K��H�5�w#�����H�5�w#��ҋ��H�5mw#�`���H�5Vw#� 谋��H�;H��g[H�5�~#��H�;H��g[H�5�~#�t��H�;H��g[H�5�~#�^��H��g[H�;H�5�~#�H��H�5�v#�G�G���H�5�v#�]�6���H�5�v#�[�%���H�;H�cg[H�5~#��H�Pg[H�;H�5q~#���H�5ev#�"���H�5Lv#�N�׊��H�53v#�B�Ɗ��H�5v#�y赊��H�5�u#�U褊��H�5�u#��蓊��H�5�u#�肊��H�;H��f[H�5�}#�\��H��f[H�;H�5�}#�F��H�5�u#�l�E���H�5fu#�^�4���H�5Nu#��#���H�57u#�����H�5u#�E����H�5u#�t��H�5�t#�V�߉��H�5�t#�>�Ή��H�5�t#�n轉��H�5�t#�m謉��H�5�t#�蛉��H�5kt#�u芉��H�5Rt#�1�y���H�5:t#�W�h���H�5�|#��W���H�5t#��F���H�5�s#�6�5���H�;[H�5�|#H�ke[���ff.���H�5%�YH�=�|#�I�"f�ATUH��SH�H��t1H��H���6��H��u�H��H�����1�[��]A\�I�����H�����H��I�$��H�WH�O0S������ǂ�H��t,L�A 1�I�@XH9At9�t����[��A�P`��f�H�%XfD��SH�����H��[H���G���ATUSH��H�� H�?L�&H��t>H���H�GH��oH�G)$H�D$�3��H�$H�|$��H�;L�eH��u�H�� []A\�H��fH�=��ZffH茿�H�H�HH�PH�H�y8H��H9�t!H��t�GH��tH�@H�@ H���D1�H���f���H�����H��u�H���@H��H���d��@��H��fH�=�ZffH��H�H�HH�PH�H�y8H��H9�t%H��t �H��tH�xH��t
H�����@�H���ff.����ױ����������ATUS�C�H���[��H��H��t)L�%\@H�{H��tH��L��胸�H�[H��u�H��[]A\�f�H��t@��tH��ÐH���H��u�H��ZH�pH�0������H����UH��t
H��H���1��H���fD���7���AWI��AVAUI��ATU��SH��H��8H��� ��H��I��A���~�XI�F�f�L�D$�H*����L�D$�,����D$$H�2�ZH9u
I���+H�D$I�����M��xI�@L9�}M�`L��L)�H�D$I���I�G�H�D$L��M��I���4H�T$L��M��tA��uI���H����H��L9���L9���L��H)؅�HD�I� u�I�V �L�v�D$$�I���)���I�F�L�D$I��ʚ;�zH��	f�H�SZ��/�DH��H���H*����L�D$�,���	���D$$����f�H�t$H�=e}#1�I�����s��L��H�����H\$L9��<���H��8[]A\A]A^A_��H�=�
'L�T$�2���L�T$I��u^L��H�5}#L��1�I��t1���L��H���A������@����H������~���fD����H��������fDL���T$$H��H�D$H)�H�5�|#1�L�T$(���L�T$(L�\$�n���@�D$$�����I�F�H�D$M��x
I�@L9�����A�	���f��H*��|��I��ʚ;L�D$�,��������	���ff.�H��t@��t%H�����H�5#H��H���ZH�81����H���H��H��w��ff.�@PXH�����H����&��fDH�OH�H�WH�4�H9�r�_f.�H��8H9�sLH�B ��u�H�JH�I�	��t��u�H�H�H��t
��t��u�H���f�H�9��H��u�H��8H9�r�1�����H��fH�=��ZffH踹�L�L���]���H��tH�H���I�@pH������H��fH�=��ZffH�x��L�L������H��t(H�8H��tH�����fD�H���fDI�xp��f.�1�H����AVAUATI��UH��SH��H��uFH��ZH��H�0�,��H��t_H�5�[H�����H�Ǩ�����¸�"�@��u�H���H��u��S �M��tA�$[]A\A]A^�L�-I�ZH��I�u���H��tpH�5��[H���!��H��I�����A�ĸI��tI�uH���<��H��������H��t�D�e[]A\A]A^�fD��蛫��>���fDH�٣ZH��H�0�.��H��u���=���f.�H�5�[H����t�H���E��A�ĸ�x������AUI��ATI��USH��H�F�u^H�xH�����H��I�$H�pH�uH��t@��uH���ռ�H�CL�H��L��I�|$H�PI��A���H��1�[]A\A]�萨�I�|$H�����H��H�5�{#H��H�o�ZH�81����D��AVAUATUSH�� dH�%(H�D$1������G�I��H��H��L�l�L�5�{#H�}H��u��]��D@��u�H���H��u�H�uhH��L9�u�聆L�d$H��H�$DH�H�xH�D$H��tH��H�5�����0�H��L9�u�H�L$dH3%(L��u.H�� []A\A]A^����L��H��1��%��넃��薹������AUATI��UH��SH��H���$���M��u�L��肠�f�A��u�I�$��H��u�H�}H����H�E��H�����H��H����H��t�uH��H���H�����;���L��H���p��I��H�XxH��t��uH��H��贺�I�D$H�}L��H��I�E蜡�H��1�[]A\A]�����H�@H�EH��t���f.�H���x�������H��H�EH��t�uH��H���0��H�}H�e���������L;g�r���H�BH���!��������H�H�ƒ�H������L;`u��?���H��H���͹�H�����DSH��u
����@��u�H���H��u�H����H��u#H��[H�����H�'H�=7y#HE�1����ff.����USH��H��H�i[H��u H�-Ou#�H���S��H��h[H��t�H��H��H��[]閧�fD��SH��H��H��u��6��fD@��u�H�����uH��藾�H��[�f�H��u������SH��H��H��u����fD@��u�H�����uH�����H��[�f�H��u������USH��H��H��g[H��u H�-qt#�H���c��H��g[H��t�H��H��謦�H��tH��H��[]�`�H��[]���D��ATUS�S�H���k��H��H��t)L�%@H�{H��tH��L��蓬�H�[H��u�H�cg[H��u'H�]a#��H��賷�H�<g[H��t�[H��1�]1�H��A\���@��UH��SH��H��H��u3H���ZH�0H�H�ƒ�H��uH��t@��tGH��1�[]�fD��uH�s��DH��tRH��t\��u7��tbH�;�ZH�0�fD�Āt�H������H�[�z���f.�H���ZH�0�p����H�q�ZH�0�`����H�1�ZH�0�P����H��ZH�0�@����ATUH��SH��H�vH��uuH�����t	��ulH�[H�f[H��u&L�%wr#fD�L���c��H��e[H��t�H��H��謤�H��t[H��H�5����]H��A\���[]A\��s����H����H�5�u#H��H���ZH�81��~��ff.���AUATI��USH��H��H�-]e[H��u0L�-�q#f��L��賵�H��H�1e[H��t�@H��u;H��ZH�8H�H�ƒ�H��uH��t@��tOH��1�[]A\A]�f.���uH�{��DH��tZH��td��u?��tjH�S�ZH�8�fD�Āt�H���{��L��H�����H�[�g����H���ZH�8�`����H���ZH�8�P����H�A�ZH�8�@����H���ZH�8�0������AWA��AVAUI��ATI��USH��H�-Fd[dH�%(H�D$1�H��u%H��p#f��
H���s��H��H�d[H��t�H��c[H��u$L�5�8(��L���C��H��H��c[H��t�E����A��L��I��H��I�t=�H�H��u�H�������u�H�
I��A��I��uۀ���H��H9�u�Mc�I��O�t=O�|=�I��I)�f.�I�>L��H��L�$$I�����I�~L��H�޺L�$$���M9�u�H�L$dH3%(L��u7H��[]A\A]A^A_�H�ϒZH�5@s#H�81������D���.�����f���AWA��AVAUI��ATI��USH��H�-Fb[dH�%(H�D$1�H��u%H�o#f��H���Ӳ�H��H�b[H��t�H��a[H��u$L�5�n#��L��裲�H��H��a[H��t�I�$H�ƒ�H��u	M����E���A��L��I��H��I�t=�H�H��u�H���c����u�H�
I��A��I��uۀ���H��H9�u�Mc�I��O�t=O�|=�I��I)�f�I�>L��H��L�$$I���U��I�~L��H�޺L�$$�=��M9�u�H�L$dH3%(L��ueH��[]A\A]A^A_�A���!����Ā����H��ZH�5�q#H�81����H��ZH�5�m#H�81�������D���P���;��ff.���ATI��U��SfH�=��ZffH蓫�H�H�@0H���H��u H�I�ZH�H��L��[��]A\����DH�5Jm#H�=*q#1��{����f���USH���!��H���zH����H���1H�)�ZH�2fD�uH��tH���s��H�[H��tRH�{tKH�H�s�t�H��t�@��u
H�v�@H��tJH��tT@��u&@��tXH�Q�ZH�2�@H��H��[]�fDH�ɏZH�2�q���f�H���ZH�2�Y����H�Q�ZH�2�I����H�	�ZH�2�9������AWAVA��AUI��ATI��USH��dH�%(H�D$1�H�H�ƒ�H��u	M���MH��^[H�-�k#H��u&f.��H���c��H��H��^[H��t�H�-�^[H��u$L�=�k#��	L���3��H��H�y^[H��t�E���A�~�L��I��H��I�t=�H�H��u�H�������u�H�
I��A��I��uۀ���H��H9�u�Mc�J��M�|�M�tI��I)�fDI�>L��H��L�$$I����I�~L��H��L�$$�ݹ�M9�u�H�L$dH3%(L��uhH��[]A\A]A^A_�fDA��������Ā�����H���ZH�5�n#H�81����H���ZH�5�j#H�81��}����D�����������AUI��ATI��U��SH���x����H��H�s�ZL9 u~1�E1�H��uL�'�H���H�
�Z��H�)uH��H��tH��茜�M��LD�H�[H����H�H�{��u���u�H��t�H����fDH��L��L���[]A\A]�	��f�@��uZH�o��u�H��t�@����H����H����@����@����H�ߑZH�:�C����H��tjH��tt@��uN@��txH�
��ZH�)�@M��tH��L������H��H��[]A\A]���fDH�����H�
�ZH�)�;����H�
ёZH�)�+����H�
��ZH�)�����H�
I�ZH�)�����H���ZH�:����H���ZH�:�}����H�Q�ZH�:�m���H�
�ZH�:�^���f���AWAVI��AUATUSH��H��fH�= �ZffH���H�H�@0H�@0H�x�4�H������H��t"H�K�ZH�5$l#H�81�����f.�H��L�%Wg#��H�-�Z[H��u!D�L���3��H��H��Z[H��t�H��L���y��I��H����H�-uZ[H��u,L�-�g#f��L�����H��H�IZ[H��t�H��L���)��I��H���LH��L���A��H��H��tHL��H���ݧH��H��[]A\A]A^A_��c��H��L��H�@H��I���
��Y���DH����I���|�H��M����H�@H����F��H��t@��uH�EH�ƒ�H��t�̀H�EH�sY[H��u'L�=�e#��L�����H�LY[H��t�H��H��H���q~�H�*Y[H��u&L�=�e#fD�L��諩�H�Y[H��t�L��H��H���1~�H��L��H���c��H��L�����H����H��t�uH�H����H����H����H��H��迺��H�D$H�XxH��t	���L�eL9��#H��L�|$��H�$M��uP�
f�I�GL���E��I�^xH��tH�<$uH��L��赨�M�d$M��M��@��L9���@����I�wL���+���I��H��t�L���D��L��L���C��M�wA��u�L��L���[���f��K��H��L��H�@H��I����|����DH���C��H��L���EC��L�}A�����L��H���������H�|$H���������fDH�T$H��L���Ȏ��;���H������H;h����H�QH���g������^���H�2H�у�H���K���H;ju����H�[�ZH�5WO#H�81����f.�ATUH��SH��H�W[H�t$H��u(L�%6Y#D�
L���;��H��H��V[H��t�H�|$�rp��t*H��uIH���ZH�8H��觉�usH�|$�ypH�D$H�L$H��H��菇�H��[]A\�fD@��t*H��tTH��tn@��uX@��trH�ˋZH�8�fDH�}H���4��t�H�t$H��裾��H��[]A\�f.�H��ZH�8�R����H��ZH�8�B����H���ZH�8�2����H�i�ZH�8�"����AT1�A����UH��H�N��SH�}��
輆�H��$tZH��H��ZH��H�0葵�H��t(A��tH��[]A\�fDH�uH���\���H��[]A\�H�=�ZH�5nb#H�81��,��H�%�ZH�5~f#H�81����@AVUSH��H�<$H�|$<�t$H�T$(H�L$dH�%(H��$x1��VoH�D$H�D$HH���[H�D$(H���LH�$�D$@DŽ$�HDŽ$�$H�CH��$xH�C0H���H�H 1�H�qXH9p��H��$���$��������H�$H��$�H�BH�<$�K��D$@����H��$xH�$H�AH�D$HH�D$�D$@����H�D$(H��t
H�D$(H�4$H�Fp��H�����u|H�<$������N�|$t0H���Zf�8��H�$H�@0H������H�p�F���H��$xdH3%(�/H�Ā[]A^�H�|$$������^���H�,$H�]pH���r���H��ZH��H�0�S��H���W���H�EH�\$(DŽ$pH��$hH�E0HDŽ$�$H����H�H 1�H�qXH9p��H��$���$t�=��������H�$H��$�H�BL�4$H�|$(I�Fp�˵�H�|$H��H�D$(I�Fp���l$<H�|$(���H���H�T$H�=	d#H��H��1����H��輓�H��$hH�$H�A�d���H�|$(�ͷ��H��H��uH�|$$u%H�D$(H����H�|$(�v�H�D$(H�|$$t+H�|$t�D$tcH�D$H�|$(H��tI��H9��NH��u+H�<$�kH�|$(�q
H��H����v�H�|$(H�����H�<$����n����Q`�!���H�D$H�H�D$ ��H��u��H�@X��Q���H�H�ƒ�H���>������D����0���H�<$�����������	���H�|$D�kH��H����H���ZH�$H�xp����N���H�$H�T$(H��H�|$P�D$P�H�CH�\$XH�HH��$�1�H�D$`H�L$hH�D$pH�D$xHDŽ$�HDŽ$�$DŽ$�賴��H�-o�[H��H�u�u�H�uL��迒�H�������H�uH�|$��cu��r���H�7�&� ����Q`�I����e��H�T$I�؉�H��H�=�a#1��Z��H�����H�|$(�8��H�=C]#H��H��1��4��H�����H�<$�C���Å�����H��$hH�$H�A��uH�5�[H�$H�H��H9AptL�4$L�����I�~����H�D$(H�Ap���H���[H�$H�H��H��H�Cp��H�{�����谲�AWAVAUI��ATI��U��SH��H�T$H�\$H����H��$��I��tVH���ZL��H�0���H���"I9�t6L��L�5��[�f.�H9��+I�6H��蜍�H��u�fDH�\$H�T$��L��L�����I�|$��AƄ$����E1�L�5r�[H��I�6�ϐ�H����L�����H����L�(E��u�I��t�I��$t��Q���H�_p����H��tH��$����A��d���H�̀Z1�1�A�H�8�{t�H��I��$�m���I���4���H�}�ZL��H�0���H������H��}ZH�5�Z#H�81�豺�A�$���M�l$p�J���H��ZH�5�Z#H�81�脺�H�����fDUH��S��H��H�|$H��tH�t$����H�D$fH�=.�ZffH�&��H�T$H���H�8���@��SH��fH�=�ZffH��L�L�����H��tH�8H��tH��[���fDI�xp��H�#�ZH�5GZ#H�81��¹�f�SH��H��H�<$H�t$dH�4%(H��$1�H����DŽ$H�GH�D$ $H��$�H�G0H����H�H 1�H�qXH9ptsH�|$0��$�z�����uzH�$H�D$ H�|$�D$H�B苐�H��$�H�$H�A�D$H��$dH3%(��H��[���Q`�1���@H�@Xf.�H�$H�B������ǀ�H�B0H��t�H�H 1�H�yXH9xt!9�u
�\$�a���@H�<$�/���D�Q`���ή�ff.���AWAVAUATA��USH��H�=5�&H��(H�t$1�dH�%(H�D$1��l�H�|$H��H��uWH��}ZH;u{E����H����H��H�5k`#艂�H��H�5PX#���H�5B`#H���f���\@諶�xI��u�H���*��H�S}ZH�:����H9�t�H���Hw�I��E��uPH����L��H�����H�D$H�D$H�D$H��H�L$dH3%(�H��([]A\A]A^A_�H���gH��H�5�_#跁�L��H��茼�H�5y_#H��蝁��H�D$L�pH� tL�pH�@H�$H9��nH��������v�I��E��tH���H�5"_#H���B��I�GI� tI�GH�$�8#�
L���LD���t�H��H���PH��L)�H���hL��L��H��H���6n�M���}�H�5��&H���9��E����H�5�^#H��豀�L��H��膻�H�5s^#H��藀�H�5h^#H��舀�H�5�&H�����H�5A^#H���e��DH���O���H�$I�H9��>���E���-H)�I��H����H��H�5�'艝�L��L��H��H���Xm����H���u�H�<$I������������H�����H�5�U#H���2�����DH�t$H����H��聺�M����������H��L��H���o�M�������H�=&�&�o�E����H�=4]#�2��L���
��H�=]#���H�=]#���H�='�%�ao�H�=�\#�����H��L�<$L)�I)�H���@�H�5l'H���U��DM������L���
H���r�I��H���;H9��2L��H)�L��I)�K�<��;
u	H��H9�r�I��M)�H���RL��L��L��H���k�M)��L���$���W���H�=5\#�3��L�����H�=\#����2���H�=\#������L��H����H�5�%H���z�����H�=�[#���H�=�S#�(n�H�=�[#������L��菇�H�=�%�m��Y����H�=,�&��m������H�=�&��m�L��H����m��z���f�H��tZH�5K[#H���k}�L��H��H��H)�M��L��ID��j�H�5[#H���A}�M��������+���L��L���em����H�=�Z#��~�L��H��H)�M��ID��?m�H�=�Z#��~�밾H�=�R#� m�����H��蓆�M���R������耨���USH��H��dH�%(H�D$1�H�$H���H��H��������u2H�¾[H��H�0蟃�H��H��u�H�D$dH3%(uH��[]�H��|ZH�5�Q#H�81�臱����f���ATI���UH��S�h��H��fH�=MxZffH�E��H�H�@0H���t$H��D[H�~D[H�L�#H�kH�S[]A\�H�iD[H�bD[����SH�TD[H��t�H�{�o��H�[H��u�H�'D[H��tf.�H�{�G��H�[H��u�[�ff.����1�H�5�H�=0�%�i����SH��H��[dH�%(H��$�1�H�:t$H��$�dH34%(�JH��[�@E1�1�1Ҿ�)�zt��u���#�{�fH�=wZffH��DŽ$�H�D$$H�H�CH�$H��$�H�C0H��t{H�H 1�H�yXH9xtcH�|$ ��$��*q�����ub�D$H�$H�T$H�P�|�臓�H��[�D$H����H��$�H�$H�Q�	���D�Q`�H�@Xf.�H�$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xt9�t	H�<$�̋��놋Q`���n��ff.���H��t?H��t!H���H�t$@��u-H����1�1�H��t��@��������H�t$��1�H��t��H���fD��SH��fH�=`uZffH�X��H��[H�8��ff.����SH��H��u�H����v�fD@��u�H�H�Ѓ�H��u�&3��H�H�Ѓ�H��t��u;[Ã�t+��t&H�&#��u�H��H�5zN#H��1��֘�fDH���"��H��u��� H��
#t�H���H��e#H��t���u�H�����t��t��H���"HD��H�	�"�@��H��I��H��$tOL9�tBH��uH�F�[L��H�0H���_e����u�H���H���HD���fDH���I�����H��tH��fDI�Qp�f���PX�$�H���g����AT��UH��SH��H��t@��tB������u`�+H�=BR#��[I��f�H���Ȱ�L��H��H��躇��H���ˆ�H���H��u���tG��t,�#H�=Q#�[I��붾"H�=*Q#�u[I��렾,H�=�Q#�_[I��늾*H�=&Q#�I[I���q����)H�==Q#�0[I���X������UH��SH��H��H��t@��t'H�=�Q#�(��ZH��H��H�����H�����H���H��u�H�=cQ#�)�ZH����ff.����AT��UH��SH��H��t@��tB������u`�2H�=R#�uZI��f�H���h��L��H��H���Z���H���b��H���H��u���tG��t,�)H�=�P#�+ZI��붾(H�=�P#�ZI��렾3H�=lQ#�YI��늾1H�=�P#��YI���q����0H�=Q#��YI���X������PX��H�������PX1�1�H��H��qZH�8��c�H��苆�ff.���S��H����t0��u_H���[����HH����[�G��H�>H��t�H�t$��t�H�t$H��t�H��H��oZH�8H��[�|�1����-��ff.�f����G�S��������fH�=upZffH�m���H�H�x����ff.�@��H��fH�=@pZffH�8��H�H�x�\�H����H�����ff.���S�&��t�]��H�=���H��H���+^�H��[�H�?tZH�5�I#H�81��ި�ff.���ATI��USH���}VH�hfH�=�oZffH虆�H�H�HH�H�y8H�HH�@0H��H9׺HD�H���tiH�}ugH��t
�8�H��uX�n��uj�EVH��t��uH���H��t�H����p�f�H��H�������L��[]A\��H��t�H��mZH�5O#H�81����H�5�H#H������ff.�@��AUI��ATUSH��H��fH�=�nZffH蜅�H�L�`H�PH�I�l$8H��H9�������H����H��tM9l$P���y��uU�PUH��t��uH���H��t�H����o�DH��H�������H��L��[]A\A]�f.�H�5�G#H��������C��H��t�H��lZH�5(N#H�81��֦�H��lZH�5@N#H�81�辦�ff.���H��fH�=�mZffH舄�H�H�xH��鈕���AWAVAUATI��U��SH��dH�%(H��$�1����I�_�Hc�L�4�M�.詺���H�D$x$A�$��L����f|�H��fH�=�lZffH���H�L�sL�����H��M�~I��H�@ M�t$H�D$�׾H�S0H���	��H�r�F@�ZL��H��H���i�L���l�I��H����H��Ā��H����H��t|H��8[H��u)L�=�:#f��L���ӈ�H��8[H��t�L�D$x�����1�L��H��$�H��$��a�I�E�ĀtwI�E(H��twM�.��L�l$x�����H�D$x$A�$������fH�=�kZffH�ɂ�L�L���n��H��taH�H�D$H��tLL�d$����I�E(�"���H�����L�l$x���m���I��$t�H��oZH�5L#H�81��o��1��H���I�@p�I�D$H�SH��H�|$ �D$ @H�@ H�T$01�H�\$(H�D$@H�D$L�|$8L�t$HH�D$PH�D$XH�D$h$�D$`�0��?���ff.���PXH���a������H�����tH���1ҾH�=/#�T���SH��pH�|$H�t$H�T$ H�L$(L�D$dH�%(H��$h1�fH�=`jZffH�X��HDŽ$�$H�H�D$HH�D$HH�@H�D$PH�D$XH�D$HH�@pDŽ$`H�D$`H�\$HH�CH�$H��$XH�C0H����H�H 1�H�qXH9ptrH��$���$d�Nd�����ufH�4$H��$�H�FH�|$H�D$��H�$H�D$XH��$XH�AH�D$XH��$hdH3%(��H��p[ËQ`�H�@Xf�H�$H�B������ǀ�H�B0H��t�H�H 1�H�yXH9xta9�t	H�<$��~H�D$XH��tR��t%H��$XH�4$H�FH�D$H��H�x�}��DH�D$HH�D$XH�@p����D�Q`�H�t$PH�|$H�Qy��u�H�D$XH�D$�oD$hH�@)D$0H�D$x�.D�ƒ�HT$x�D$hH�2H��tqH�D$HH�xp茔�H��u�D$h��/v�H�T$pH�BH�D$p��H�|$ tH�D$HH�|$(H�ppH�D$ ��H�D$XH�D$HH�T$`H�<$H�PpH��$XH�G�d���H��$XH�$H�A����_��ff.�@��H���L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�I���$ H�D$H�D$ �D$0H�D$蒃�H�T$dH3%(uH����襖�D��H�miZE1�L�1��Ȱ����SH��0H�|$H�t$H�T$dH�%(H��$(1�H�D$(fH�=�fZffH�}�H�D$@$H�H�D$0H�D$0H�@DŽ$ H�D$8H�\$0H�CH�$H��$H�C0H����H�H 1�H�yXH9x��H�|$P��$$��`�������H�$H�D$@H�|$�D$$H�BH�D$��H�D$(H��$H�$H�t$H�AH��t�D$$�H�D$(H��$(dH3%(��H��0[Ð�Q`�o����H�@Xf.�H�$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xt)9�t	H�<$�<{�\$$H�t$8H�|$0�u�>���@�Q`���Ɣ�fD��USH��8H�t$(H�|$ H�T$H�L$dH�%(H��$(1�H�D$0fH�=�dZffH��{�DŽ$ H�D$@$H�H�D$8H�t$8H�FH�t$H��$H�F0H����H�H 1�H�YXH9X��H�|$P��$$�_�������H�T$H�D$@H�|$(1�H�BH�D$ ��H�D$0H��$H�L$H�AH�D$8H�XpH��tH��uUH�D$8H�@pH�|$H�D$��H�D$8H�Xp����H�D$0H��$(dH3%(��H��8[]�D��u�H���H��u��D�Q`�(����H�@Xf.�H�T$H�B������ǀ�H�B0H��t�H�H 1�H�yXH9xt9�����H�|$�6y�����Q`���֒�H�D$8��H�x�ֿ��fD��H��fH�=0cZffH�(z�H�H�x�1�H��tH�@H�P H��H���D��H��fH�=�bZffH��y�H�H�x輻1�H��tH�PH��H���f�UH��SH��dH�%(H�D$1�H�|$�HH��tAH�ËD$��t|�7_�H��uJ�T$H��H�=�<#1��͠�H��tH��tiH��H����H�D$dH3%(uXH��[]��H���j�T$H��H�=(<#H��1��x���fDH��H�=�3#1��_���DH���po���i��f�AVAUE��ATI��UH��SH��H����H��� ����?��H��H�6H����H����H���(��H�54�%H��褂�H�=`ZH�H��uw@I9��7E���>H����H��H�5�B#�d�H�ߺH�5�:#�Q��H�5�B#H����d��NH�~��H���=���H��_ZH�H��t�L�uI9�uDM��t�L���Y�H����H��H���b��H�ߺH�5��&[]A\A]A^�ց�fDL���xY�I��M��u�E��tKH����H��H�5B#�2d�L��H�����H�5�A#H���d��fDH�v ����H����L��H���˞��d���fDL���X�I���H�����H�5�9#H���"���+���DH���`m�[�H�=�&]A\A]A^��S��H���8m�H�=d�%�S����f�L���m��fDH�=&A#�$e�L���l�H�=	A#�e��fD�H�=�8#�WS��r���f�H�=�@#��d�H�=�8#�3S�H�=�@#��d��B���f�AWI��AVI��M��AUATI��USH��H��HH�T$L��$�H�L$L�L$H��[H��H�0��i�H��H����H�r]ZH��H�0���H����L��H���ô������H��uvH��cZH�H��H�D$8�/���H�t$H��H���p��E1�M��A��M����H�|$8E��L��H��H���f���H�|$8H���O���L�D$1�L��H���e����8�����t#H��tU��u(��t[H��_ZH��p���@H�C�c����H�)ZZH��M���f�H��H[]A\A]A^A_ÐH��[ZH��%����H�i^ZH������D�T$,H��H��M��H�D$(L��AUL�|$ H�L$(H�T$M���P���H��H�|$HXZH�D$ D�T$,t'M���L��H��D�T$H�D$�|���D�T$H�D$H�|$8H��HL��H��[E��]H��A\A]A^A_�.���ff.���AWAVAUATUSH��hH�4$dH�%(H�D$X1�H�D$H����H��H��$�I��H��M��M��HD�H��uH��aZH��f.�@����H�WH��aZ1�H�T$L� L��H����H��$��L$���#H�=�=#H���OH���5H��H���Z}�H��L��H��L��H�D$ M��L��PL��$����H�|$ Y^H��tM��H��H���$���H�|$D�D$H��H��H�$���H�D$XdH3%(�FH��h[]A\A]A^A_��H���@���|@���H�+]ZH���H�|$D�D$H��H��H�$�w���H�|$H��tM��1�H��H���|���H��L��M��E1�H�D$ L��H��L��P���XZ�I���@H�QWZH������H���N�����H�|$ fo�<#H�TracebacA��:
H�D$$H�ll last)�*�Gk�D$ fD�D$-�Gm)D$0H�w fD�O(�Q���H��XZH�����H�9[ZH�������ff.��AWI��AVUSH��H��HH�T$(H�|$H�t$dH�%(H��$81�����D$>H�D$@$�D$?H�D$H$��k�H��H�D$觭�	H�=�>&��M�I��A��L�t$ �dv�H�����L��H��H���.]�I����H�Cƃ�DŽ$0H��$(H�C0H�D$P$H���H�H 1�H�qXH9p��H�|$`��$4��S�������H�T$H�D$PH�|$H�B���H�D$@H�D$HH��$���D$?��tJH�L$H��$(H�AH�D$H�Ap�D$>��H��$8dH3%(��H��H[]A^A_��D$?H��H�T$HH�t$PjL�L$0L�D$(H�L$8H�|$���XZ�fD�Q`�$���H�t$H�|$H�D$H�j��H�D$H�K���fDH�@Xf�H�T$H�Bǀ����H�B0H��t�H�H 1�H�yXH9xt9���H�|$��m�����Q`��膇�fD��H���3��uH����o�H�����u
��S�fH�=�WZffH��n�H�8H�wp�Q�����ff.�@��H�|$�H�t$�H�t$�H�|$�����ff.�ATA��UH��SH��H��dH�%(H�D$1��D$�r���u&D���������H�X8#Hc�H�>��fD�H�L$dH3%(�H��[]A\�fD1�H�t$H��豴���t�H��H���m���DH��� ��D$�f.��D$��fD����H�=�0#�J�����H�=�0#�eJ�����H�=�0#�EJ��x�����v�H�=7#�%J��X�����V�H�=d0#�J��8�����6�H�=U0#��I������[��ff.���AVSH��(�|$H�t$dH�%(H��$1�fH�=�UZffH�l�H�D$(DŽ$H�D$0$H�H�CH�\$H��$H�C0H����H�H 1�H�qXH9ptxH�|$@��$�O�����uH�T$H�D$0H�t$�|$H�B�w�H�D$(H��$H�L$H�AH�D$(H��$dH3%(��H��([A^�fD�Q`����H�@Xf.�H�T$H�B������ǀ�H�B0H��t�H�H 1�H�yXH9xtH9�t
H�|$�:jL�t$L���]�I�vp��L������I�FpH�H�DH�D$(�(���fD�Q`�覃�fDSH��dH�%(H��$�1�H�GDŽ$�H�D$$H��$�H�G0H����H�H 1�H�YXH9XthH�|$H�|$ ��$��2N�����uZH�\$H�D$�H�C�"��H��$�H�t$H�FH��$�dH3%(�H��[Ð�Q`�H�@Xf�H�L$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xt(9�t
H�|$��hH�|$��H�wp����c���D�Q`���f��fDAVSH��H�GpH�<$dH�%(H��$1�H�D$H�D$ �D$H�D$�D$���ZH�$H�@�nH�D$��$H�x�L�������L�4$H�D$H�=�[I�FI�^pH���O���H��H�=�[�@����D$H��$��T$I�F����H��$�H�$DŽ$H�D$ $H�@0H��t!H�H 1�H�qXH9p�U����Q`�M���DH�@Xf�H�$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9x��9�t	H�<$�XgH�$H��$���H�AH�qpH��H�����H�CpH�������H�D$�D$��������H�D$H�$H�CpH��$dH3%(uH��[A^�D�Q`�s���胀�SH��H��H�|$dH�%(H��$�1����H�CDŽ$�H�D$$H��$�H�C0H����H�H 1�H�qXH9pt{H�|$ ��$��
K������~H�T$H�D$H�z0H�BH��tH� �.&H��$�H�\$H�CH���e���H���]�H��$�dH3%(uH��[Ð�Q`�}����H�@Xf.�H�L$H�Aǀ����H�A0H��t�H�H 1�H�YXH9Xt9��h���H�|$�e�Y�����Q`���&�fD��SfH�=�OZffH�f�H�H������?�H�Cp[�-�ff.�f�USH��H��HH�|$�t$dH�%(H��$81�H�G0H�D$8$�D$$H��H���D$(H�D$H�D$@�D$,H�D$H�ŢH���H�CDŽ$0H�D$P$H��$(H�C0H����H�H 1�H�qXH9p�LH�|$`��$4�I������H�L$H�D$PH�A�A$�D$�ЅA ���D$,���D$,H�D$H�@pH�D$8H����H�|$�C����D$,���D$,H�D$�D$0H�xp�D$4H�D$8H9�tH��tH�T$(H�t$$�Ы���D$0�H�\$8H��t:H���S�D$0H�t$$H�T$(H�ߨ�HE�蒫���D$4�D$4��b�D$,���D$,H�D$�����D$,���D$,H�|$HH��u@H�t$8H��H���H��u�D$��t+�D$0�T$4	Шu�T$H�|$�����D$$�	@�Z��f=�H�\$H�Cp��H�|$�H�D$@H��$(H�CH�D$@H���H�{ �i��^A���D$(��uv�D$$H��$8dH3%(�PH��H[]Ð��k���H���H���[���H�D$H�@p�I���fD�������H���H����������f��|$(�7c��|���f��Q`����1�1��O�H�|$H��H��H�����H�l$H�x���f.�H�@Xf.�H�T$H�Bǀ����H�B0H��t�H�H 1�H�yXH9xt^9�t
H�|$�aH�D$@H�D$�D$,���v���~��������������e������)����X���H�y01��������Q`��z�fD��S��fH�=aKZffH�Yb��[H�8���ff.���PXH���>���F�f.���UH��SH��dH�%(H�D$1�fH�=�JZffH��a�H�t$H��H��S9�u7H�{p�H��D��j����D$H�T$dH3%(u%H��[]��H��H������H�߉��3������z�ff.����USH��fH�=nJZffH�fa�H�(H�]�H���0�H��t
H�@H�@ H��uH�UH�EH��8H��H9�r�1�H��[]���AVA��AUI��ATA��UH��SfH�=JZffH�`�H�H�{�rE��L��D��H�CxH�CH��aH�@ H�[]A\A]A^�~�ff.���1��%~�D��SH���sq�H��[H���I����SH��H��H���Z�H��[����UH��SH��fH�=KIZffH�C`�H�H�@0H���H��uH��MZH�H��H��[]�@H��1�H�=�%#�7o�H��H��[]�ff.�f���I��蔥��H��tH��I�@p���H��fH�=�HZffH�_�H�H�@pH���ff.����SH��H��u"fH�=�HZffH�_�H�H�Xp[�f�H�GZH�0�t�H��u�H�eDZH�5�"#H�81��T��@��ATH�#��H�5����UH�=�"#S�>h�1�H�5E���H�=�"#�)h�H�=�"#�-�H�=�"#�!������H�5��H�= u&�Y9����H�5���H�=d"#�A9�1�H�5��H�=T"#�,9�1�H�5c���H�=P"#�9�1�H�5~���H�=F"#�9�1�H�5y���H�=<"#��8�H��KZ�����H�ʰ��H�5D #H�;��P�H�;�����H�����H�5,�"��P�H�;�H�Ѫ��H�5�#�E��H�;�H�����H�5�#�*��H�;�H�K���H�5�#���H�;�H�����H�5�!#���H�;�H����H�5�!#�ف�H�;1�H�����H�5�!#�1P�H�;1�H�����H�5]!#�U�H�;1�H���H�5R!#�U�L�%�DZH�5%!#I�<$�J��H�-sGZ�����H�7���H�5-!#H�}�W��H�}1�H�*���H�5s'�O�H�}H�5�#��H�}H�5�#���H�}H�5�#�ދ�I�<$H�5� #�΋������H�;1�H�x���H�5� #��T�H�;�����H�M���H�5� #�T�茍H���dm����H�Ȱ��H�5b#H��虀��d�H���<m�H����H�5" #H���q��H��DZ�����H�����H�5U #H�8�N����H�5����H�=C #�6����H�5[���H�=) #�o6�H�=$ #��2�H�7EZ1�H��H�3���)H�=�%#�2�H�3�H���ɋ�H�=�#�(a�H�=�`#H���[�a�[]H���[A\�@��H����p�H���ff.����S����p�[�����p��UH��SH���2|�xH��uH���d�t-H���UT�H�SH�5�%#H��H�EZH�81��|�fDH��H��[]�fD��H��MY���`�ff.���H���wH���m�H��H�Ð��H��H�wH���V�H��H����H��H���O�WH�wL��� ��H��H��f���H��H���O�WH�wL�����H��H��f���SH��dH�%(H��$�1�謆�H�XH����\�sH����l��t+H�t$pH�|$h�V�H��$�dH3%(u H�Ġ[��+I�H�S H�=+#�0���r�@��SH��dH�%(H��$�1����H�XH���@\�sH���@l��t+H�t$`H�|$X�,V�H��$�dH3%(u H�Ġ[��H�H�S H�=h*#�0�)��tq�@��SH��dH�%(H��$�1�茅�H�XH���[�sH���k��t+H�t$PH�|$H�U�H��$�dH3%(u H�Ġ[��H�H�S H�=�)#�0�~���p�@��UH��SH��(dH�%(H�D$1�@��tmH�H��H�t$���H�XH���[�Ctt1�H���p�CH��H��H�5�$�9`�x7H�L$dH3%(�uH��([]�f�H���o�H����>p��IG�H�S H�=~)#�0��}�H��BZH�5*##H�81��y�ff.�@��H�WH�wH�?�Lb�ff.��ATI��UH��SH��H9�r�J@H��L��H����1�H�H�H9�s.�;/u�H�CH9�v �{/t�/f.��8/uH��H9�u�H��[]A\�f.�H���H���fD��H��H�wH���G|�H��H����H���wH�?荀�H��H��fDUH��SH��H��H���A����tU��H���l�H�sH���u�H��跌�H�CH��t�tH���Rn�H��H��[]��H��H���[����[���f���H���w�?�]�H��H�����H��H�w�?�~�H��H��fD��AUI��ATI��U�����SH��(dH�%(H�D$1�H��t
H���)V�����I��t
L���V��L���J��L�`L���nX�A�D$1�H��A�H������l$H�=\�D$�$�\$�xu��t H�L$dH3%(�u#H��([]A\A]��D�I�T$ H�=�&#�0�;{��m�fD��H���W�w�?苇�H��H��@��USH��H��H��dH�%(H�D$1��;U�H��H���p��H�XH���W�SH��l$H�=S�$�Ky��tH�L$dH3%(�uH��[]��C�H�S H�=&#�0�z���l�ff.���H���w�?��a�H��H�����H���wH�?�
|�H��H��fD��H��H�wH�?�|F�H��H��D��H��H�wH�?���H��H��D���?����AUATI��UH��SH��8�NH�dH�%(H�D$(1������=�AZ����H���H�H�sH��S㥛� H�$H��H��?H��H�CH�D$H��H)�H�sH��Hc�H��H�T$H��?H��EH��H��H)�Hc�H�L$����H��L���g5�A��H�|$(dH3<%(D����H��8[]A\A]�f��H��L�濜�����a�A�Ņ�y��?B�8&u��AZ�U���%�����@Z�f��5�@Z��u�H�������f����H��L���c�A���Y�����j�����V�6��N�f����V�6�p�f����6�5)�D��H���wH�?�e�H��H��fD���G���~BS1�H��������;C}#H�H�sH��H��H�<�S��y��6A��C1�[�1��f.�ATI��UH��S�v�H��H����H�tH��[]A\�f�H���<�t[��]A\�F��L���h<���fDH��H�5�CY��+��tH���H�6ZH�5�#H�81��
s�f.���H������@H��H��6H��?�����H������@H��H��5H��?�����H���s����@H��H��4H��?�����H���S�����@%�= �HD�H�����H���#�����@%�=`�HD�H�����H������@%�=��HD�H�����H��������@%�=��HD�H�����H�������@%�=�HD�H�����H���c���H�x0H�H�������H���C�����@%�=��HD�H���S�����X��m�9ø[HD����H�����P���t��H�DH���fD��H�������P���t��H�DH���fD��H�������@%�=@�HD�H�����H���c���H�ppH�xhH���K�f���H���C���H�p`H�xXH���bK�f���H���#���H�pPH�xHH���BK�f���H������H�@(H����H��0�	�H�D�f.���H������H�@(H��H��H�� H��%��	�H�D�ff.�f���H������@ H��H�D�fD��H���s����@H��H�D�fD��H���S����@H��H�D�fD��H���3���H�H����H��0�	�H�D�ff.���H������H�H��H��H�� H��%��	�H�D�ff.���S�����X�~B�9ø[HD��ff.����H�����H�x0H��tH�@H�xH�D?H��Ð�H���fDH���'j����H���C���H�x0H�@H�xH�D?H���fDH����i����H������H�x@H��������?H9�wH�D?H���fDH���gc����H������H�x8H��������?H9�wH�D?H���fDH���'c����H�����H�x(H��������?H9�wH�D?H���fDH����b����H���C���H�xH��������?H9�wH�D?H���fDH���b����H������H�xH��������?H9�wH�D?H���fDH���gb����H������H�8H��������?H9�wH�D?H����H���'b����H�=�#%�=�t]H�=S�"=@tOH�=W#= tAH�=Z#=`t3H�=b#=t%H�=@#=�t=�H�=8#H�ǔ"HE��y+�f���H�������xH���g������ATUH��SH���]��H��H���2_�H��u[H��]A\�H�����H��H�hXL�``���H;hXt��[]��A\H������H���@�L;``u��ff.���UH��SH��H9���H���Y�H��H�5H<Y�3$�H�5<<YH��H���!$��o�oKH�oS P �o[0X0�oc@`@�okPhP�os`p`�o{pxp�o����H���H���H��H��[]�@��S��t'��u9H�>�ZI����z��H�D[�f.�1���z�É���z�H�D[ú1��-L�ff.�f��t�wXH�P�|E�PH�t5ZH�S#H�5V#H�81��lj�ff.����USH��8dH�%(H��$(1�H�l$ ��t�H�XH���
K�CH��H��H�5��H�,$�D$H��&H�D$H�H�D$�"P��t%H���E���H��$(dH3%(u!H��8[]��C7�H�S H�=8#�0��m��`�ff.��ATI��USH��H���A�H��H��H���f�H�{H� tH�{H��u�~�H�߉��k]�H��[]A\�H��L���ey���UH��AUATS��H��(dH�%(H�E�1�H�E��U#�9����(N�9�t|1�1���4�A��=���H�H��H�E�H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$I����W��H�M�dH3%(��H�e�[A\A]]�DHc�H��H�4�H��>uhH�VH�}�H���;,�I��L��D���
4��Hc�I�T��H��9Zt'����y�1�H�}�t�H�}ЉE��l�E��p�������T^��B�f.���H����x �{�����H�H��H�Ѓ��f.���USH��H���N�H���;�u�EItH���[]�H���X���H��t�E@u�1�H��[]�@H���x���H��u�Eu�1���f��Eu�1���fD��USH��H�����H���:�tH�����H��t�E�t"H���[]�H������H��u�Eu�1�H��[]�@�Eu�1���fD��USH��H���^�H���:�tH���z���H��t�Et"H���[]�H�����H��u�Eu�1�H��[]�@�E u�1���fD��USH��H�����H���b�u�EItH���[]�H����H��t�E@u�1�H��[]�@H����x �����u�Eu�1���f��Eu�1���fD��USH��H���n�H���b�tH���:�H��t�E�t)H���[]�H���8�x �0�����u�Eu�1�H��[]�D�Eu�1���ff.���USH��H�����H���a�tH����H��t�Et)H���[]�H����x �����u�Eu�1�H��[]�D�E u�1���ff.���AUATUH��H��SH��dH�%(H�D$1������5�H��A�ʼnD$�/o�H�XH���SE�C�$�C��I��H�-)�f�L��H��H���rJ����1�0��t~D��
u'A��tQ1�H�L$dH3%(uyH��[]A\A]�@��Ut�H�S H�=�#�h���t�����L��H���fD1������e�H���D��g����1�H���Y�>������w����Z���AVH�5C4YAUI��ATUS�%�����H�-<3Y1��n�H�5�z"L�5�#H���:a�L��I���Q�L��H����-�H�5�&L���0K��YfDH�uL���-�L��L���K�L��U���H�H��1�H�5�#L���'W�H����H��H��H��t��H�5]�"L���J�H�uL���@-�L��L���J�L��UH��u$��|H�H��H�5T#L��1��V��H���`���H���L�L��H���#4�H���l���L��H�5�&�5J�[L��]A\A]A^�f�H���HJ�H������H���8J�H���z���L����O�[H�=�#]H��A\1�A]A^�g�ff.�@AVAUATI��US����I��I��H�=�x&�����+�L��H���e�H��H���X3�H�5�"H���tI�L����d�H��H���,3�H�5�%H���HI�H�ډ�L���;e�H���d�H�=�#H���e�f.���USH��H��dH�%(H�D$1�H��t@��tpH�!�ZH��u%H�-��"D�H���#D�H���ZH��t�I��1�1�H��H����H��H�$��E�H�$H�L$dH3%(uH��[]�fDH�H����H��u����V�f���ATUSH�H��H������H��������u'H�����H����H��tnH��[]A\�fF�fD�u�A��9�t��:�H��t�H���r7�u����2�D��H���|2�H��H��H���B�H���f��(���u���H��*ZH�5�	#H�81��|_�ff.����H���s���H��H����������i��AWAVAUATI��USH��(H�dH�%(H�D$1��� ��H��H����1۽M�l$H��uB�H��H����H9�}YL��H�<�H�|$H��t@��uH���H��tH��
H���� u�I�D$H9�}I�D$ ���[�H�D$I�$Hh��@H�|�A�1��6i�H��H�@H�D$H�D$�@H����H9���I�D$H�<�H�|$H��t
@�����vh�E1�H�D$L�sH� tL�sH����H�t$H����X�H�t$H��H���F�H�t$H��I����^�L��H���0�I�$�� �f���I;l$�I�D$ �f���f�H����������]���I9��H��L��H�=2�
)�H�D$�E���L�{H���T\�L��K�4>H�����H�t$H� t7H�VH��u2�8�3���H�5��%�H���1E�H�t$�����H�V�:/u�L)�H��H���yL�H�t$����E��tH�|$�)9����@�{����f�H�Q(ZH�H�CH�L$dH3%(H��uEH��([]A\A]A^A_�H�G�n����1�1��&�H���H��'ZH�5q#H�81��J\��R�D����u
H9�tH�����PH�s'ZH�59#H�81��\�f���H������@AT��A��USH��dH�%(H�D$1�9�u^H�Z�DH�;H��t@��uH���H��tH�$�e�H��EH���A9��H�D$dH3%(uH��[]A\���D����<���Q�ff.�@��H���e�@��H����AT�
I��H��?#U�SH��0H�|$dH�%(H�D$(1���H��tdH��H���e�H�hH����;�EH�T$H��H�5��L�d$�D$�@�H�\$H�\$H�\$H�T$H�L$(dH3%(uoH��0[]A\�H�\$H�\$H�|$��d�H��H�D$�OD�H�D$H�PH� tH�PH�T$H�t$A�1�H�����H�=���L�d$�_X��w����P�D��H��H��dH�%(H��$�1�H������1҅�x�D$%�=@�HD�H��$�dH3%(H��uH�Ĩ��7P����H��H��dH�%(H��$�1�H���W���H�H��?H�Ѓ�H��$�dH3%(uH�Ĩ���O�ff.���SH��H�t$H�|$H�t$ dH�%(H��$�1������x1H��$�H��$��4�H��$�dH3%(u:H��[��s&�H�D$H�D$H�|$�-c��H�=D#H��H�D$��\��2O�f���SH��H�t$H�|$H�t$ dH�%(H��$�1��M�����x.H��$�H�|$x�g3�H��$�dH3%(u:H��[���%�H�D$H�D$H�|$�b��H�=�#H��H�D$�J\��N�D��SH��H�t$H�|$H�t$ dH�%(H��$�1������x+H�t$pH�|$h��2�H��$�dH3%(u:H��[��9%�H�D$H�D$H�|$��a��H�=�#H��H�D$�[��M����SH��H��H��0dH�%(H��$(1�H��������x?H��$�H�������x+H��$�H9$u�H��$�H9T$tf�1�H��$(dH3%(u	H��0[��]M�ff.�f���H��H��dH�%(H��$�1�H���w���1҅�x�T$H��6H��?��H��$�dH3%(H��uH�Ĩ���L�ff.�@��H��H��dH�%(H��$�1�H������1҅�x�T$H��5H��?��H��$�dH3%(H��uH�Ĩ��L�ff.�@��H��H��dH�%(H��$�1�H�����1҅�x�T$H��4H��?��H��$�dH3%(H��uH�Ĩ��L�ff.�@��H��H��dH�%(H��$�1�H���'���1҅�x�D$%�= �HD�H��$�dH3%(H��uH�Ĩ��K����H��H��dH�%(H��$�1�H�����1҅�x�D$%�=`�HD�H��$�dH3%(H��uH�Ĩ��'K����H��H��dH�%(H��$�1�H���G���1҅�x�D$%�=��HD�H��$�dH3%(H��uH�Ĩ��J����H��H��dH�%(H��$�1�H������1҅�x�D$%�=�HD�H��$�dH3%(H��uH�Ĩ��GJ����H��H��dH�%(H��$�1�H���g�����x
�|$ �Z���u&1�H��$�dH3%(uH�Ĩ�f������I�@��SH��H��dH�%(H��$�1�H�������x�\$�&�¸9�t1�H��$�dH3%(u	H�Ġ[��kI�ff.���SH��H�t$H�|$H�t$ dH�%(H��$�1��}�����x@H�@H�|$PH�x%H�D?H��$�dH3%(uEH��[�@�N������H�D$H�D$H�|$�\��H�=e#H��H�D$�hV��H���H��H��dH�%(H��$�1�H��������xSH�|$0�H��tH�@H�x%H�D?H��$�dH3%(u$H�Ĩ�D�[M���f�����$H�@��H��H��dH�%(H��$�1�H���G���1҅�xH�|$0H҃�H��$�dH3%(H��uH�Ĩ���G�f���H��H��dH�%(H��$�1�H�����1҅�x�D$%�=��HD�H��$�dH3%(H��uH�Ĩ��WG����H��H��dH�%(H��$�1�H���w�����xC�T$���u%H��$�dH3%(u)H�Ĩ�f.���H�D�������F�@��H��H��dH�%(H��$�1�H�����xC�T$���u%H��$�dH3%(u)H�Ĩ�f.���H�D������TF�@��UH��SH���H�t$H�\$dH�%(H��$�1�H�\$H���Y�H��H�D$�i9�H��H�D$��+�H�T$ �H���)����H�5* YH����foD$ foL$0foT$@fo\$Pfod$`fol$pfo�$�Hfo�$�fo�$�ƀ�P X0`@hPp`xp���H��$�dH3%(u"H���[]��O�H�T$H�=��"�0��R��'E����SH��0dH�%(H�D$(1��G��D$�����H��u
H�~��,�D$H�;H��H�D$H�<$�X�H��H�$�8�H�$H�PH� uMH�T$1�H�t$A�H�����H�=����8L�H��u=H�L$(dH3%(�u#H��0[��H�P뭺��[/��FD��Q�H�$H�=�"�0��Q�ff.�@��SH��@H�t$dH�%(H�D$81���t}H�H�\$H�T$(H�\$H�|$�W�H��H�D$�47�H��H�D$�)�1�H�t$ A�H�����H�=,��H�D$ �RK�x3H�L$8dH3%(�uH��@[�H����B�H���v����kC��v�H�T$H�=�"�0�Q���H��HH�t$H�$dH�%(H�D$81�H�D$H�D$ H���V�H�D$H��H�D$ H�<$��V�H�|$H�$�Y6�H�<$H�D$�K6�H�|$H�D$��(�H�|$H�D$ �(�1�H�t$ A�H�����H�=R��H�D$(�XJ�xH�L$8dH3%(�u!H��H���H�$H�T$H�=�"�0�N��iB�f�UH��AWI��AVAULc�ATI�uI��SH��L��H��(dH�%(H�E�1�H����H�FH��H�E�H��H���H)�H��H9�tH��H��$�H9�u�%���L�t$I���A�FA�^I�NM�~A���~F1��H�I�<��U�H���4�A�H�pH� tH�pHc�H��L�H�A(�BH�q A�9�|�L��A�1�H�����H�=����H�A�v��urH�}�uHH�]�dH3%(K�D-uRH�e�[A\A]A^A_]�DH�}�H�M�� �H�M�I���-����H�}��?O��DH)�H�L������@�IcH�=�"H��H��I�T�iN�f���H��1ɉ�H�=^���9���f�USH��XdH�%(H�D$H1������_�H�FH�>H�n�T$H�|$H�D$H��uH��ti�tD�H�|$H�D$ H�T$(H9|$u>H�T$8H�D$0H�D$ ��H��H��H�$H�=������H�\$HdH3%(uH��X[]��D��f�1����?�����*�f.�����"���f���1�����D��ATUSH��dH�%(H�D$1���~e�o�H�>H����H��t�f'�H�{�$L�c�����H��t�K'�L��H���D$H�=x������H�T$dH3%(uH��[]A\Ã���*��?����ATUSH��dH�%(H�D$1���~e�o�H�>H����H��t��&�H�{�$L�c�����H��t�&�L��H���D$H�=����3���H�T$dH3%(uH��[]A\Ã���})��h>����US��H��dH�%(H�D$1���~>H�>H���5&�H�L$H�U�s�H�=����D$���H�L$dH3%(uH��[]Ã���)���=���USH��(H�t$H�\$H�$dH�%(H�D$1�H�\$H��H���Q�H�l$H�D$H�<$�Q�H�|$H�$�0�H�<$H�D$��0�H��H�$�m#�H��H���b#�H��H�����xH�L$dH3%(�u)H��([]�H�,$H�\$�I�H�=R�"�0H��H����� =���USH��(H�t$H�\$H�$dH�%(H�D$1�H�\$H��H����P�H�l$H�D$H�<$�P�H�|$H�$�'0�H�<$H�D$�0�H��H�$�"�H��H���"�H��H���w$�xH�L$dH3%(�u)H��([]�H�,$H�\$�y�H�=r�"�0H��H���5��P<���SH��H�t$H�\$dH�%(H��$�1�H�\$H���O�H��H�D$�m/�H��H�D$��!�1�H�t$A�H�D$H�����H�D$ H�={��H�D$�C��t%�|$8���H��$�dH3%(u!H��[���H�T$H�=f�"�0�?I��;�f.���SH��H�t$H�\$dH�%(H��$�1�H�\$H���*O�H��H�D$�.�H��H�D$� !�H�����H�t$1�H�D$A�H�D$ H�=���H�D$�B�1҅�x�D$8%�=��HD�H��$�dH3%(H��u	H��[��:�U��SH��8H�|$H�\$dH�%(H�D$(1�H�\$�tN�H��H�D$��-�H��H�D$�j �1�H�t$�l$H�����A�H�D$H�=���B�H�T$(dH3%(uH��8[]��5:�D��H��H����[���H��H�H��?H�Ѓ��f.���H��H����+���H��H�H��?H�Ѓ��f.���H��H������H��H�H��?H�Ѓ��f.�U��SH��8H�|$H�\$dH�%(H�D$(1�H�\$�TM�H��H�D$��,�H��H�D$�J�1�H�t$�l$H�����A�H�D$H�=�����@�H�T$(dH3%(uH��8[]��9�D��H��H����[���H��H�H��?H�Ѓ��f.���H��H����+���H��H�H��?H�Ѓ��f.���H��H������H��H�H��?H�Ѓ��f.���AUATUSH��HdH�%(H��$81����A��H�>I��H��tf@����@��tV�1��@�݅�����H�=��"�U1�H��t@L��D�����E�<3w)H���"��Hc�H�>��D�{*��f���H�=7�"�1�H��tQI�D$D��L��H�$�4�H�<$H��$��������Q@��C�h@��M�~@��A����-����H�=.�"�0�H���D��L�����I�|$H�t$�}���xiI�|$H��$��g���xSH�L$hH�|$pH��$�H��$@��=��@��>�U@��<���H9�|uH9�|f.�1�H��$8dH3%(�iH��H[]A\A]�f�H�H�ƒ�H���A���H��6���H�W�� tH�W�*@�݅��3���fDH�)Z��H�5/�"H�81���?�fD�C�^w؃�'t+H��l&��\tH��
Z��H�5��"H�81��?�DH��'#���I�t$1��������I�|$H��$������������$��;�¸9���������fDI�|$�����������f�����fDI�|$H��$�����1����������$��������HD��c����I�|$��Q������I�����I�|$��1������)����t���@I�|$H��$�����1���������$������`�HD�����I�|$H��$������1���������$������ �HD�����I�t$1���I�����I�|$H��$���H�H��?H�Ѓ��g���DI�|$H��$��^���1����D�����$��������HD��#����I�|$H��$�����1���������$�H��5H��?�����I�|$H��$������1���������$�H��6H��?�����I�t$1��������I�t$1��|�����I�|$H��$��~���1����d�����$�������HD��C����I�|$��Q������)����t���@I�t$1��$������I�|$H��$�����1��������$�H��4H��?������I�|$���������������@I�|$��������������@I�|$H��$�����1����t���H��$�H����`���fDH��$H��$���@���fDH��$H��$��c�� ���fDH��$�H��$��C�����fDL��D���8��I�T$I�t$1�������f��H9�����H9������H9���������H9�������H9�����������1��N��91��D�H��H�D$H�<$�E��H�=��"H��H�$�>�ff.����ATH���
H�
#USH��PH�t$dH�%(H��$H1�H�t$����H����H��H��H�l$@��D�L�`L����A�D$H�T$ L��H�5����H�l$ �D$(H�g&H�D$0H�H�D$8� �H�\$H�\$H�\$ H�T$����H���$��H��$HdH3%(��H��P[]A\ÐH�\$H�\$ H�|$��C�H��H�D$�O#�H�D$H�PH� tH�PH�l$@H�T$0H�t$ 1�H�A�H�����H�l$ H�=���D$(����H�D$8�C7��@�����H�D$H�D$ H�|$�SC��H�=Z�"H��H�D$�
=��X/����H�mZSH��H��	Y��H�8�
�H�P �@uH�P H��t\�o�oKJ�oS R �o[0Z0�oc@b@�okPjP�os`r`�o{pzp�o��Ƃ���[�ff.����USH��dH�%(H��$�1���B�H�XH�����H�C H��tNH����!�H�PH� u`H�T$H�l$1�H��A�H�����H�=ݾ��H�,$��5��t:H���1�H��$�dH3%(uH�ĸ[]�f.�H�P��-���H�S H�=��"�0�;�ff.���USH��dH�%(H��$�1�H����A�H�XH����sH���(��t%H���o0�H��$�dH3%(u!H�Ĩ[]��m�H�S H�=
�"�0�:��F-�fD��SH��H�t$H�\$dH�%(H��$�1�H�\$H����@�H��H�D$�] �H��H�\$ H�D$���1�H�t$A�H�����H�=p���H�D$H�\$�q4��t$H���/�H��$�dH3%(u!H��[���H�T$H�=G�"�0�0:��{,�ff.���SH��H�t$dH�%(H��$�1�H�D$H�D$H���@�H��H�D$��H�D$H�PH� tH�PH�T$H�\$ 1�H�t$A�H�����H�\$H�=ݸ���3�x$H����.�H��$�dH3%(u!H��[����H�T$H�=_�"�0�X9��+���USH��H��dH�%(H��$�1�H��t@��t:1�1Ҿ�H����#�tmH�H��$�dH3%(usH�Ĩ[]�DH���H��u�H���d?�H�hH����Eu2�uH���%��t.H�D$0�fDH���8*��fD1�H���F*����*����H�U H�=��"�0�h8����H���3>�H�@H�xH�DH���f.�H��H���/�@��AVAUATUSH��H��0H�|$dH�%(H�D$(1�H�D$H�D$�>�A�dL�t$H��H�D$��H�ھd1�H�D$�d�89�H��L�h�#�E�H��H���
A�Ic�H��H���"�H�D$H�PH� tH�PH�T$L��H�E tH�E1�A�L��H�D$H�����H�=����H�\$ �81�H9�t�H��x+H��H���C0�H��H�L$(dH3%(u1H��0[]A\A]A^��^�1�H���0�H�T$H�=�"����6��*)�f.���SH���S�H��[H��������ATUSH��H9�s-H��I��� �H��L��H�����H�H�H9�v�;/u�H��[]A\�ff.���H������AUATUSH��H9�s}H��H��I��E1���H��L��H�����H�H�H9�v.�;/u�H�CH9�v �{/t�2f.��8/uH��H9�u�H��L��[]A\A]�@I��H���I��H���E1���ff.�AWI��AVAUATUH��SH��8H�|$ H��H�t$H�L$PL�D$D�L$DdH�%(H��$(1��U	�I�?H�\�80�L�5��ZH�D$M��u#L�%��"�	L����H�d�ZH��t�I��H9��H��$�L�t$(H�D$0H��$�H�D$8H�D$xH�D$HH��H��H��f�H�T$H��H����I��I��I��I)�H9�v!�8/t��A�>/uI��L9�u�I��I���DH�D$H�8I��u	�;.�m����I��H�D$ I�L$H9�2H��L��L���T�H�|$L�����H��H��t^H�|$(�T4�H9��{H���s��H�L$H�L��L9��/���1�H��$(dH3%(���4H��8[]A\A]A^A_�f�I�D$I�$ tI�D$H��$�H�t$81�A�H�D$0H�����H�=����H��$��-������$�%�=���L����H�|$H��H����H�D$L� �7���f��;.�,���H�D$H�8���f.��H�5��%L���������{.�����H�D$ H�H�GH9�����H�OH� tH�OL�$H�T$H�4L���{?�H��L)�H��H�D$ HD�HH�D$H��H�8�+����H�D$xH�|$(�2�H�|$L��H����H�t$L���|�H��H�PH� ��H��H�T$`H�L$X�&-�H�T$`H�L$XH��HYH9��F�:/�=H���fD�8/�H��H9�u�I��I)�M��L�D$XuH��1�A�}L����H��PD�L$TL�D$ H�t$H�|$0����Y^����H�D$HH��$�H�D$xH�D$H�8���H�|$L��H������o���H�P�)���H��H�L$`�T,�H�L$`L�D$X1�H�D$hH��L��H�L$xL�D$`���H��H�D$XH�D$H�8�y���L�L$hH�L$XL�D$`I9�tH��H��L��L�D$X���L�D$XH��H�D$H�H�D$ L����H��I��I)�M��L�D$X����X������2��0��t<�D$D�������L��H�=��"�0�|$D����������(���H�L$PH��tkH�H�D$H�AH�D$ tH�AH��$�H�t$81�A�H�D$0H�����H�=����H��$��4*�uH�D$H�t$PH�8�����
����T$D�������|$Dt2��$pt(A�}u!H�D$1�L� ����H��������������L��H�=��"�/��"�L��(H�=��"�/��AWAVA��AUATUSH��XH�|$H��H�T$dH�%(H�D$H1�H�D$8��H�|$H�D$0H��t&H�D$H�D$@�u5�H��H�D$��H�D$H�D$0H���*�H�|$0I��H� L�gH�otL�g��)�L�L��I9���A�<$/t��f��;/��H��H9�u�H��H�|$01�H��L)�1�E1��d��H�D$(H�HL�xH� tL�xH�L$ L�L��L��H��H�L$���H�L$H9���L�����Q���H���L�|$ L�\$(I��M��t5H��E��I��L��j�L��L��L�\$�m���AXAY��L�\$��H��t3H���H��L��jE��M��L��L�\$�3���ZY��L�\$��H��L��L��E��jM��H������^_����H�\$H�D$(H��t3H���t(�H9�t!H�|$(����H�t$H�|$(��H�D$(H�T$0H�T$@H�T$0H�T$8H�T$@H�T$8H�t$HdH34%(��H��X[]A\A]A^A_��I9���H�|$H���HL�gL�H� tL���'�M�L��M9�vLA�?/t�D�}/u2H��I9�u�L��H�|$1�L��L)�E1��a��H�D$(����I9���V��H� H�D$8H�HL�xtH�HH��H�L$�K'�H�L$N�$9I9����9/��H����8/usH��I9�u�H�|$8L��1�����H�D$(�r���������fD�=�H�|$(��������f.�H�pH�|$(L)�H�t$ �J��d���DI��I��I)��D1��"���H�T$H�|$(1��h
�H�D$(�5���I��E1��Y������H�����I�����ff.�AVAUI��ATI��USH��H��dH�%(H��$�1�����H�����
�H��H�D$H����H� �H�x�?/t���U1��N�I��H����}�L��H�����H��L��H���#�L��H����H�CH� tH�CH�D$1�H�D$ H�t$A�H�����H�D$H�=Ω���$���M��t(H���T%�I9�tH������_L��H����H���,�=0�H�D$H�D$H�D$H��$�dH3%(H���-H��[]A\A]A^���x/t��uFH��1��;�I��H������:��8���,��8tg�������H��H����H���=��H�D$H��H� t�H�x�~����H��L��L������H���3���DH�|$H�t$ ������x�����f���	�H��H���`��H����*�=0�����X)�H��H���=�������H��L��1���H������6��A��H�T$H�=��"�0��(�ff.���USH��(dH�%(H�D$1��G���w_���uH�nH�>H�D$H�D$H�|$�.�H��H��H�D$�I#�H��H��H�����H�L$dH3%(uH��([]ú����{�ff.���USH��(dH�%(H�D$1��G���w_���uH�nH�>H�D$H�D$H�|$�	.�H��H��H�D$�"�H��H��H���F���H�L$dH3%(uH��([]ú�������ff.�UH��AWAVAUA��ATSH��HH�}�dH�%(H�E�1�H�E�����H�}��p-�H�}�H�E��s��H�}�I��L�wL��N�$0�!�H�E�M9�s#A�?/t��;/��H��I9�u�L��E1�I�WH�C�Ic�H9�LG�I��L��H��?I�I�L9�~HI9�tsH��L��L)����H�u�H��H���v�H�U�dH3%(H����H�e�[A\A]A^A_]ÐE��t[A��ueH�U�H��L���3�H��HE�I9�u�f.��H�=!�"���H���f.�M��I)��5���DL���P����H��A����H��H��H�E�H��H���H)�H���H9�tH��H��$�H9�u�%�t	H)�H�L�H�E�L�L$H�E�L��H���1�f�H��H��A9��I9���E1��.DH�U�H��L��D�E�H�M�����H�M�D�E�H�H�I9�v5Ic��;/L�4�u�H�CI9�v �{/t�xf.��8/u;H��I9�u�H�}�I��%��I���H�E�H��H��H��H�E�����H���N���f�A��I�E9�tIc�H��L�4��y���DI��H��E1��f���A��I�E9�u�H��E1��T���I������H���Y��H�5��"H�81��g �����G�S��wDH����tH�;[����DH�{@��t����H�;[���fD�#	���������H9�s1��?/��H��w������UH��SH��H�����H��t#H�pH� tH�pH������H��H��[]�H���YH��H�5&�"H�81������USH��H�='�"H����H��tH��H��H��[]鱵����K�H���c�H��H��t2H�uH�E tH�uH��耵��H��1��V�H��H��[]�@��H��H��u��e�H�5��"��H�5�YH�81����ff.���ATI��H��UH��S1ۅ��Ã����H��[L��]H��A\�L���ff.����1��5���D��AWAVI��AUATI��UH��SH��(H�t$H����H�A�L��/u�H�����/t��u@H�D$����L�{��H�L$H��tH�H��t	H�D$H�EH��(L��[]A\A]A^A_ÐL�L��H��H��H�D$�.�I��H�����8/uf�I��A�?/t�H�t$L��L���6���I��L)�H�D$M9�s&A�L��<.t�9f��<.u)H��I9�u�H�D$�H���fD�k������fDE1���H�t$<.H��L��LD�����H�H�I9�w�L��L)�M��HDD$���I���R������AWAVAUATUSH��hdH�%(H�D$X1��G�H�D$8��������H�>�'�H�t$8H��H��tbH�����H��H��tRH�CH�D$HH��tH�{H� tH�{�?uFH���>��H�L$XdH3%(�zH��h[]A\A]A^A_�H���@�H�D$8H���f�H�T$HH�t$@H����L�d$HI��M���H�|$8ueL�d$@L9ct�L��L���o��H��H��H�D$���H�D$�g���DH�FH�|$8H�t$H�D$8��H�|$8�n���H�t$���@L�l$8L�����L�d$HI��H�D$8L�PM����M����H�D$@O�H��L��L��L�T$H�D$(H�D$4H��L�\$H�D$ ����Hc|$4L�\$H��H�T$P�D$L�L���,��L�T$��*�~M9�})L�d$@M��t]L�l$PH�D$8��L�d$@���fDL��K�'L��H��L)�L�T$M�H�D$L��L�D$�U�L�D$L�T$I9���L�d$HL�d$@�fD�D$PD$4H�I9��o����|$.tvO�4'L�t$M9��}M���H�T$ H�t$L��H������9D$HcD$4MD�I�L9d$w�M)�M��� ���f�L��L��L���B��L�d$���c������L�d$(������g��L�t$��K�ff.�����b���f���SH��H��H�t$�#�H�t$�$�H�D$���H�|$H����*�H��H���
�H��[���AWAVI��AUATI��USH��H��H����H�H�,L��H��H���*�I��H����I��A���/t�L����.uH�����.t�E1��u$�m��/t+L��H��H�����H�H����t��.u�I�����M��t#M��t>M9�t9I�EH��L)�H9øHE�I�H��L��[]A\A]A^A_�M��t�f�I�����I���J���D�k���
���fD��SH��H�� H�t$dH�%(H�D$1��z"�H�|$H�D$�{��H�|$H��H�GH�D$��H�t$H��H���U!�H�T$H��~+H)�H�|$H�����H�L$dH3%(uH�� [�D1�1������� ���H��H��H�=�Z�(�f.���1��?/�����AWI��AVAUA��ATUSL��H�kH��8�L$H�|$(���H�|$(H�D$����H�|$(I��HGH�D$�.�H�$H� tH�kA�<$~L�su	E����L�������I�����L$I��D��L��H�k�T���H�t$(H���'���H��H�����H� �?L�sJ�t5H��H9�s�}/t
�fD�?/uH��H9�u�H��H�$M������I���cfDM��DI��A�}/t�L��L)�I��I9���L��/N�|%H���>��L��H����H�t$(H���v���H��H���[��L9�sA��/�sM��H��I)�L���z�I�T$L9��,A�/H��H��H�T$�X�H�T$I9���H�CA�GA�UM��H�D$@��t1��.�s��/��H�$H�t$L�����H�I�A�U��u�M9��R1�A�?��L�H9��5�}/H��t�'��x/uH��H�PH9�u�L9�H������I�L��H)���H�|$(H����H�#���H��8H��[]A\A]A^A_�fDM�I9�v�L��H��H�k�	�H� tH�kN�|%���f�M�L9�s�L��H��H�T$H�k���H� H�T$tH�kN�|%����M�M9�s�L��H��H�k��H� �	���H�k����A�T$���e��/�\I��fDI�EA�UM9���I���f���fDM9�rM�eA�UM���J���f.�L��H��H)�H�rH�T$�Y�M��H�T$M)�J�DL9�sI��M��uRM�A�/�f�M�L9�s�L��H��L�T$ H�T$���H�l$H�T$H� L�T$ tH�kL�|I��M��t�L��L��L��L�T$�f#�L�T$����.�����/�����������f�L��H��M)�H)�H�rH�$��H�$J�D*L9�s)I��M����M�H��L��H)��[��d���fDM�L9�s�L��H��H�$H�k���H� H�$tH�kL�|�DI��M��I)�I�T$���@A�D$M�l$</�N���FH�$H�t$L���T��I��I��M)�M9���M����H�#���L��H��M��M����H�4$H���U��H��H����H�kH� tH�kH������H�"�YH�8M���%H��L�L$(H�<$M��D��H�ݺ"1����fDM�M9�s�L��H��H�k���H� �J���H�k�A���H�k����I��A�UM��������H��I���H��H��H���]�H�T$I��H�$H9��AH�D$(H��L��H�$��H�<$H��I���5
�H����H�<$L���@���H�L$L�t$H�$H9�t-L��H��H�����H� I��H�h�IH�@H�D$f�M�I9�r�L��H��L�k��
�H� tL�kH����L�����I��t
1�L���
�H�4$H�����I�t-H�kH� tH�kL�s���L��L��L���B ��A���DH�E����1�H����A�|$tM�l$H��E1�E1��j����L�sN�|5����L�t$�-���A�H�$L��H��� �H��t"M�eA�UI��M������H�5G�"1���A�/L����H�t$H��L��������L��L��H�����9���H�@H�D$���L����H�<$L���`�H�=�<&1����f���USH��H���n�H��H��tH���]�H�þ1�����H��H��I��1��i���H�pH��H����H��H��[]����W���wH����uH�pH�8�[��P�����ff.��������UH���SH��1�H���D��H��H��1�I��1�����H�pH��H����H��H��[]�f���USH��H���n�H��H��tH���]�H�þ1�����H��H��I����f���H�pH��H����H��H��[]�ff.�f����W���wH����uH�pH�8�[��P�����ff.�������S�H��1��@��H��1�1�I���[����ff.���H��H����H�xH� tH�x��H�H��H�Ѓ��f���AWAVAUATUSH���dH�%(H��$�1�H���H������:H��L�4�f��H��H��H�D$H�$H�D$ ID�H�D$f�H��H��H)����H�<$H�D$����H��H���I���IL�d$M�|$L��E1��L�I�I���8@L��L��H����I��M��tA�$/M����L9���A�M��H�T$H�޿���u��D$8�����@u�M��t��tL��L��H����I���D�H�����k����L$8�D$H��1�H�5�"L������M��D�D$tA�$/H�$H�D$H�D$H��$�dH3%(D����H���[]A\A]A^A_�fDH�]I9�r�:H�����H��H��ID�����s�H��I���X��L��I���]�H�5�z%L���	��H��L��I�\$���L�d$I�$ �j���I�\$�`���@A��;��������H�����dH�%(H��$�1�H���c��1Ʌ�x>�T$�������t'���������t��@t,���1��H��$�dH3<%(��uH�Ĩ�f����1�����l�ff.����U1ҾH��SH����Å�x!���J���#����߉��J��H����[]Ð�+��8���t1ҾH���Q��Å�y�1�H����[]���AWAVI��AUATI��USH��HdH�%(H�D$81����I�<$��D�(H��M�>A��~��H�����Å���L�����H��I�4$L�}H��tZ1�L�m�f�L��H��H����I�4�H��t8H�����L��H�E tH�}������t�I�6H�������I��1�H�L$8dH3%(����H��H[]A\A]A^A_�f�A��.�H�D$ H�D$H�D$0�2�H�D$ H��t�I�>L�|$(���H�@H�$H�@H�D$�|�H��I���,��I�4$H�D$H����H�<$1�����rf�H����H9���H��H�<�L�|$0H�|$(��H�xH�D$(t2H�<$M��1�1�H���*�I�}I�E tI�}�������H��H�D$ H��� u�H;h}DH�@ �fD�E<.u�E</�2��������L������H��I�����DH�t$H�<$��H�D$H�D$I�4�H������1�L���@�H�D$H�D$0H�D$ �>���@I�6L���-����\$I���� ����9��f���ATUSH��0H�|$H�|$dH�%(H�D$(1�����(@��~��H��H���]��tIH�������tlH�\$H����H��H��襍��H�L$(dH3%(��H��0[]A\��@��.u�C<.u�C</t�H�D$H�D$ ���H�D$H��uQ1��DH�|$�~���H�t$H���1���H�D$H� ��H�x������t�H�D$�c�����E1�H�l$���H��H�����;@H����I9���H��J�<�H�l$ H�|$��H�xH�D$EI��H�D$H��� u�L;`}nH�@ ���H�x�7������]���1������H�|$I��1�1�H���|�H�{H� tH�{�����t�H�t$H���%����{���1�H����1��j����*��f.���AUH�=b�"ATUSH���&��L�%��YH�-��YH�=t�"I�4$H�E�D��L�-��YH�}�H�]�YH�5�"L��H���H�;L��H�5�"�D��H�}�H�d���H�5N�"��H�;�H�I���H�53�"�
��H�}�H�����H�5ή"�Q��H�;�H�����H�5��"����H�}�H�V���H�5��"���H�;�H�;���H�5g�"���H�}�H����H�5Z�"���H�;�H����H�5?�"�h��H�}�H����H�5H�"��H�;�H�����H�5-�"�1��H�}�H�����H�5��"�u��H�;�H�f���H�5�"���H�}�H�����H�5ԭ"�>��H�;�H�߱��H�5��"����H�}�H����H�5��"���H�;�H���H�5��"���H�}�H�����H�5��"���H�;�H�����H�5g�"�U��H�}�H���H�5\�"��H�;�H�ʰ��H�5A�"���H�}�H�N���H�5ۋ#�b��H�;�H�3���H�5��#����H�}�H����H�5�"�+��H�;�H�����H�5�"���H�}�H�P���H�5��"���H�;�H�5���H�5��"�y��H�}�H�i���H�5�"��H�;�H�N���H�5ш"�B��H�}�H�­��H�5X�"��H�;�H�����H�5=�"���H�}�H����H�5�"�O��H�;�H����H�5�"����H�}�H�t���H�5�"���H�;�H�Y���H�5֫"���H�}�H�m���H�5��"���H�;�H�R���H�5��"�f��H�}�H�����H�5��"��H�;�H�{���H�5w�"�/��H�}�H���H�5c�"�s��H�;�H�Ԫ��H�5H�"���H�}�H�H���H�56�"�<��H�;�H�-���H�5�"���H�}�H�����H�5�"���H�;�H�����H�5�"���H�}�H�����H�5٪"���H�;�H�ߨ��H�5��"�S��H�}�H�S���H�5��"��H�;�H�8���H�5��"���H�}�H�|���H�5{�"�`��H�;�H�a���H�5`�"����H�;�H����H�5#�"����H�;�H����H�55�"���H�;�H�����H�5 �"���H�;�H�U���H�5�"�y��H�;�H�����H�5t
&�^��H�;�H�ߤ��H�5w
&�C��H�;�H����H�5�"�(��H�;�����H�ɴ��H�5NV%�
��H�;�����H�����H�5��"����H�;�����H�C���H�5w�"����H�-`�YH�;�����H�5T�"H�����H�;�����H�j���H�5=�"���H�;�����H�/���H�5)�"���H�;�H�����H�5!�"�h��H�;�H�ɵ��H�5��"�M��H�;�H�~��H�5�"�2��H�;�����H�Ӳ��H�56|"���H�;�����H�����H�5p"���H�;�H�����H�5��"����H�;�����H�‘��H�5��"����H�;�H�����H�5ur"���H�;�����H�ܭ��H�5[�"���H�;�����H���H�5G�"�u��H�;�����H���H�58�"�Z��H�;�H���H�5+�"�?��H�;�����H� ��H�5�"�$��H�;�����H�e��H�5
�"�	��H�;�����H����H�5��"����H�;�����H�o��H�5�"����H�;�H�d�H�5٧"���H�;�H�9���H�5\a"���H�==k%輪H�;H�5��"H��I���W�H�;L��H�5��"�E�H�;�H���H�5}�"�J��H�;�����H����H�5�"�/��H�;�H�5T�"��H�=bE%�:�H�;H�5B�"H�����I�<$1�H�{��H�58�"�_��H�;1�H����H�5M�"�G��H�;1�H����H�5A�"�/��H�;1�H���H�5�&���H�;1�H�[~��H�5�&���H�;1�H����H�52�"����H�;1�H���H�5ށ"����H�;�H�@���H�5ͥ"���H�;�H�%���H�5��"���H�;�H����H�5�o"�~��H�;�H����H�59�"�c��H�;H�50�"�D��I�<$H��H��Z��H�=�Z�H�5�"�
�H�=��Z�H�5��"�q
�H�=�Z�H�5�"�Y
�H�=ʌZ�H�5ڥ"�A
�H�=��Z��H�5ɥ"�)
�H�=��Z�H�5��"�
�H�=��Z�H�5��"�	�H�=j�Z�H�5��"��	�H�=R�Z�H�5��"��	�H�=:�Z�H�5r�"�	�H�="�Z�H�5a�"�	�H�=
�Z�  H�5W�"�	�H�=�Z� H�5>�"�i	�H�=ڋZ�  H�5,�"�Q	�H�=‹Z�H�5�"�9	�H�=��Z�H�5�"�!	�H�=��Z��H�5��"�		�H�=z�Z��H�5�"���H�=b�Z�H�5ڤ"���H�=J�Z�H�5ʤ"��H�=2�Z�H�5��"��H�=�Z�	H�5��"��H�=�"�e�H�=��ZH�5�D(H���o����H�5c���H�=�S'�ׯ�H� �YH�;H�5�"H��޹�H�߾YH�5`z��H��H����H�;�H�F���H�5�v"���H�;�H�[���H�5{	"���H�@�YH�;H�0�ݽ�H�;�H�����H�5�
"�b��H�;1�H�����H�5У"�J��H�;1�H�^���H�5��"�2��H�;1�H����H�5��"���H�;1�H�.���H�5��"���H�;1�H�Ɔ��H�5F�"����H�;1�H�����H�5ru"����H�;1�H�v���H�58O%���H�;1�H�>���H�5)O%���H�;1�H�6���H�5�"���H�;1�H�΅��H�5��"�r��H�;1�H�����H�5�"�Z��H�;1�H�.���H�5Q}"�B��H�;1�H�����H�5ʢ"�*��H�;1�H�>���H�5��"���H�;1�H����H�5�"���H�;1�H�΄��H�5x&����H�;1�H�����H�5~&����H�;1�H��H�5�"���H�;1�H�����H�5:"���H�;1�H�����H�5��"���H�;1�H�
���H�5��"�n��H�;1�H�"���H�5��"�V��H�;1�H�z���H�5��"�>��H�;1�H�����H�5}�"�&��H�;1�H�j���H�5��"���H�;1�H�����H�5]�"���H�;1�H����H�5T�"����H�;1�H�����H�5L�"����H�;1�H���H�5@�"���H�;1�H�����H�59�"���H�;1�H�J���H�5�}#�~��H�;1�H����H�5�"�f��H�;1�H�����H�5�"�N��H�;1�H���H�5�"�6��H�;1�H�����H�5מ"���H�;1�H�r���H�5Ş"���H�;1�H�*���H�5��"����H�;1�H���H�5��"����H�;1�H�����H�5��"���H�;1�H�b���H�5��"���H�;1�H�*���H�5y�"���H�;H��1�[H����H�5d�"]A\A]�l��f.�f�I���������H����f1�H�H��I��H��H��H��
��L���(��Hc�H��H��H��I#H	�I���tH�'���H� �ff.��@�Yf.�"����H��x_f��H*��Y��Y�
�"f/����\��H,�H��?H�߾YH��t
H�H9�HG�H)ȺHD�H�p�@H��H��f�H���H	��H*��X��f�H��u+H�G(H)�H�9��8��8�H��H��H�;�YH�����f�x~f�H���H*�H)���f���H*���"f(��\�f(��Y��^���Y�]�f/�f(�v�
>�"�Y��
�"f/������H,�����fDH��H��f�H���H	��H*�H���X�H)��o���H�ƒ�f��H��H	��H*��X��Z���f.���H� tH��H���f.�H�v H����L���L��xH���H�@H�`H��H�pH�H��L�H�OXL�H���H�H��H��H+��H+�hH+��HGPH��H�H�L)�L)�H)�H+GHH+��H)�H)��ff.���H�H��@�R)��ff.���H�H��@�R)��ff.���H��1�H������‰�Z�����=��ZH�H�Ѓ��ff.���HcH�H��H�DH�1�����H��H�VH�NH��H�8��f���H�GH�@ H�@�H��tH�ƒ�t1��H���H���HE��ff.����H�GH�@ H�P�1���t
�H��u�fDH�Ѓ�t��f.�H���H��t�H���HE��fD��PXH��H�WH�wH�?�f��fDATUSH��H���H�T$PH�L$XL�D$`L�L$h��t=)D$p)�$�)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$81�H��$H�l$ �D$ H�D$(H�D$@�D$$0H�D$0H�<$H�\$H�l$���tH���"������tH��H�=����Z��L�%�Y��H�=�"I�$��I�<$H��H�ھ����耫���H������H��H��ff.�SH��H��dH�%(H��$�1����Y��tH���苬�¸��t�n�Y1�H�����t(1�H��$�dH3%(u/H�Ġ[�f.�H�$H�iD$�H�H�C�����ff.�@H��(dH�%(H�D$1�H���4���f��t!f�f���H*D$�YU�"�H*$�X�H�D$dH3%(uH��(����SH�GH��H��H��H9W wH�C [�fDH�H��H���H�CH�S����H�CH�C [�f.���USH���tH��`�H�_(H�oPH�;H�����H9�u�H���[]�@AVAUI��ATA��U��SH���u�����t+H��uH�="�"1��+����u�H���H���cH�5��YA�H���tH��Z@��u?H��Z@��u2H�ۀZ@��u%H�ƀZ@��u@�� �HE��Z�H9���I��tH��L���&��E���-A��HH���Z��u:H�{�Z��u.H�g�Z��u"H�S�Z��u�� �HE6�ZfDH�5Y�ZH9�tqI���*H��L��说�H�5X�ZH9�������H��Z��u1H��Z��u"H��Z��u���HE�Z[]A\A]A^�f.�H���m���H�5O�YI�޻H�������D�H�=a�"�'��H�=P�"���H������H�=
�"H���Y���H�=��"����H�����H�=�"H�ZZ����H�=ʙ"���H���l��H�=��"H�!Z���H�=��"���H���;��H�=oE"H��~Z�c��H�=WE"�R��H���
��
H�=n�"H��~Z�2��
H�=V�"�!��H������H�=Rf"H�v~Z���H�=:f"����H�����H�=�"H�=~Z����H�=�"���H���w��H�=�"H�~Z���H�=ؘ"���H���F��H�=Ƙ"H��}Z�n��H�=��"�]��H�����H�=u"H��}Z�=��H�=�t"�,��H������	H�=j�"H�Y}Z���	H�=R�"���H�����H�=C�"H� }Z����H�=+�"����H�����H�=�"H��|Z���H�=�"���H���Q��H�=:&H��|Z�y��H�="&�h��H��� ��H�=��"H�u|Z�H��H�=��"�7��H������H�=��"H�<|Z���H�=s�"���H�����H�=_�"H�|Z����H�=G�"����H�����H�=6�"H��{Z���H�=�"���H���\��H�=�"H��{Z���H�=��"�s��H���+��H�=ϡ"H�X{Z�S��H�=��"�B��H�����H�53�YH�${ZH��{Z@��������w���fDH�5�{ZH9��A���I���SH�'{Z��u'H�{Z��uH��zZ����DL��蘯�H�51{Z��%@H9��1��L��Hҁ� H�҃��g��H�5{ZH9�����L��H�H�҃��C��E����H�5�zZH9���I���XA�EH�LzZ��t��H�5zZHE%zZL����H�5zZH9��-I��(L��H�T�Ѯ�H�5�yZH9���I��0L��H�T譮�H���$[]ID�A\A]A^��H;9zZ�����%@H;zZt#�� H;zZ������t����f���u�1���DH�5YyZH9�t|I���E���H;;yZ�p���I��0H�D���@H�YyZ���@H�1yZ���E������HEZyZ�-���DH;�xZu��I��(H�D�T����A�UH��xZ���8�����H��xZHE�xZ�!���@H�=�yZATUH��SH����H��uH�=��"1����D��tK��u�H;�yZtmH;�yZ��H��H��H��4�ׂ�CH��H��H��H�D[]A\�@H���H������t�H���~���H;*yZu��H���H��������?H9��l[H�D?]A\�@�H�=y�"���H�=h�"���H���N��H�=�"H��xZ�v��H�=�"�e��H�����H�=�"H��xZ�E��H�=͒"�4��H������
H�=��"H�ixZ���
H�=��"���H�����H�=��"H�@xZ����H�=��"����H�����H�=��"H�xZ���H�=j�"���H���Y��H�=b�"H��wZ���H�=J�"�p��H���(��H�=H�"H��wZ�P��H�=0�"�?��H�����H�=,�"H��wZ���H�=�"���H������H�=�"H�swZ����H�=�"����H�����H�=�"H�JwZ���H�=ґ"���H���d��H�=ʑ"H�!wZ���H�=��"�{��H���3��H�=��"H��vZ�[��H�=��"�J��H�����H�=��"H��vZ�*��H�=r�"���H������H�=o�"H��vZ���H�=W�"����H�����H�=P�"H�}vZ����H�=8�"���H���o��H�=7�"H�TvZ���H�=�"���H���>��H�=��"H�+vZ�f��H�=��"�U��H���
��H�=�"H�vZ�5��H�=ѐ"�$��H������H�=Ԑ"H��uZ���H�=��"���H�����H�=��"H��uZ���H�=��"���H���z��
H�=��"H��uZ��
H�=i�"��H���I��H�=^�"H�^uZ�q��H�=F�"�`��H�����H�=A�"H�5uZ�@��H�=)�"�/��H������!H�=��"H�uZ���!H�=��"��H�����'H�=��"H��tZ���'H�=��"���H�����H�="H��tZ��H�=��"��H���T��H�=��"H��tZ�|��H�=��"�k��H���#��H�=~�"H�htZ�K��H�=f�"�:��H������H�=�"H�?tZ���H�=�"�	��H�����H�=s�"H�tZ���H�=[�"�ؿ�H�����H��sZ�L���@H9	sZ��	H9sZ�V	H9�rZ�	H9�rZ��	H9�rZ��	H;�rZ��
H9�rZ��	H9�rZ��
H;�rZ�+H9�rZ�vH;�rZ��H9�rZ�H9�rZ�&H;�rZ�LH;�rZ�cH9�rZ��H9�rZ��H9�rZ��H9�rZ�
H9�rZ�;
H9�rZ�]
H9�rZ��
H9�rZ��
H9�rZ��
H9�rZ��
H9�rZ��
H9�rZ�H9�rZ�'�$H���,���H���$���DH�5qqZH���G���H������H���H��������?H9���H�T?H���֤�H�57qZH�������H��H��H��I��4�ׂ�CH��I��H��H�T薤�H�5�pZH���}L��H���H��H��H�T�j��H�5�pZH���)L��H��H��H��H�T�>��H�5�pZH����H��@�H��tH��������?H�9H9��&H�T?H����H�5zpZH��� H���H��������?H9���H�T?H����H�5JpZH���(H��pH��������?H9���H�T?H��艣�H�5pZH����H���H��������?H�@H��H�`H��H9��zH�T?H���5��H�5�oZH����H�}HH���H�pH�H��H��H�xH�H��HEPHEXH)�H��H��������?H�hH��H��H9��NH�T?H��衢�L�BoZI���PH����H��������?H9��H�TL��H���e��H�5oZH���TH���H}XH��������?H�xH�H��H9��	H�T?H�����H�5�nZH���[H��8H��������?H9��)H�T?H���ܡ�H�5�nZH���cH��8H��������?H��H��H�XH��H9��H�T?H��舡�H�5InZH���sH��HH��������?H9��EH�T?H���P��H�5nZH���nH��PH��������?H9��@H�T?H�����H�5�mZH���iH���H}HH��������?H�hH��H��H9��"H�T?H���Ǡ�H�5�mZH���<H���H}PH��������?H�pH�H��H9���H�T?H���v��H�5WmZH���7H��������?H�}H9��H�T?H���A��H�5*mZH���2H��������?H�}H9��H�T?H�����H�5�lZH���-H���H��������?H9���H�T?H���ԟ�H�5�lZH���(H���H��������?H9���H�T?H��蜟�H�5�lZH���*H���H��������?H9���H�T?H���d��H�5mlZH���!H���H��������?H9���H�T?H���,��H�5=lZH���"H��hH��������?H9���H�T?H�����H�=lZ�H��XH��������?H9���H�H�GH�5�kZH��H��賞�H�=�kZ��H��`H��������?H9���H�H�GH�5�kZH��H���r��H�=�kZ��H��hH��������?H9���H�H�GH�5lkZH��H���1��H�=akZ��H��pH��������?H9���H�H�GH�53kZH��H�����H�=(kZ��H��xH��������?H9��~H�H�GH�5�jZH��H��话�H�=�jZ��H���H��������?H9��pH�H�GH�5�jZH��H���n���D���f�H��@H���H�8H��������?H9����[]A\���H����@���H�5tiZH���.���@H������@�ï�H�5tiZH������@諯�H�5TiZH������@H���H��������?H9����o���f��k��H�5$iZH�����@H��pH��������?H9�����/���f��+��H�5�hZH�����@H�}HH���H�pH�H��H��H�xH�H��HEPHEXH)�H��H�hH��������?H��H��H9��,����D蓮�H�5ThZH���w���@H��@H��������?H��H�`H��H��H9�����;���DH���8��L�	hZH�����f���M�fDH���H�H��������?H9���H�D�"����H�5�gZH�����@H���H}XH��������?H�xH�H��H9��'�����苭�H�5lgZH������@H��8H��������?H9�����O���f��K��H�54gZH������@H��8H��������?H��H��H�XH��H9������D[H��]A\���@���H�5�fZH�����H��HH��������?H9��D����谬�H�5�fZH�����H��PH��������?H9����x����}��H�5~fZH������H���H}H����Y��H�5bfZH�����H���H��������?H�pH�H��H}PH9���������
��H�5fZH�����H��������?H�}H9��q������ݫ�H�5�eZH�����H��������?H�}H9��A����譫�H�5�eZH����H���H��������?H9����u����z��H�5�eZH�����H���H��������?H9��G���H�H�G�|��@��H�5qeZH�����H���H��������?H9�v��������H�5JeZH�����H���H��������?H9�v��������H�5#eZH�������Ϊ��4���H��hH��������?H9��^������H��XH��������?H9��?������膪��-����|���d���H��`H��������?H9������N���H��hH��������?H9�����/���H��pH��������?H9��������������������4���H��xH��������?H9����������������H���H��������?H9��r������ff.�H�
�bZH9��@ATI��UH��SH��H����H��������?H�?H9���H�T?H��H��蒖�H�5�bZI9���H���H��������?H9�� H�T?H���[��H�5�bZI9��3H���H��������?H9��H�T?H���$��H�5UbZI9��\H��������?H�}H9��-H�T?H�����H�5)bZI9��XH��������?H�}H9��)H�T?H��輕�H�5�aZI9��\H��������?H�}H9��-H�T?H��舕�H�5�aZI9��`H��������?H�} H9��1H�T?H���T��H�5�aZI9���H��������?H�}(H9��5H�T?H��� ���ufD���H�
,aZH���g���@H;!aZ�L;%aZ��L;%aZ�!L;%aZ�DL;%
aZ�oL;%aZ��L;%aZt9I���$HD�[]A\��H��������?H�?H9�w)H�D?��H��������?H�}(H9�v[D[]A\�������H�5d`ZH������@��H�5T`ZH����@H���H��������?H9�w�[H�D?]A\��H���H��������?H9�v���蛦�H�5�_ZH������@H��������?H�}H9�v��H����k��H�5�_ZH������@H��������?H�}H9��o�������@�3��H�5�_ZH������@H��������?H�}H9��7�������@��H�5t_ZH�����@H��������?H�} H9���������@�å�H�5D_ZH�����@��H��H��H�׺�Ȓ�1�H��ÐAUA��ATI��UH��SH��(�D$�$dH�%(H�D$1��}��H��1�H��t�;u&H�L$dH3%(��H��([]A\A]��H�t$H�����;f(�tZH�D$�8uPf�f.���E„�tYA��tS�$衔��$H�������A$��q�����s��H�������1��Q�����d$f/����,$f.�zt�f/$v��\$�)���\$H�����t��$�A$f(�H��H��"H���Y�H�8��(��1������H�i�YI��H��H��y"�H�81���1����fD�$覓��$H������.����T$�A$f(�H��H�
�"�t���DH���Y�A$f(�H��H�Yy"�H�8�胆��$���贼�@USH��H�����{�H�=1y"H�H��藩�H�=y"H��胩��H���8��H��H��H���J��H��H��[]�I��H��I��U��fE1�SH���������H��I�2H��I��H��I��H����J�D�H��?H��r&� t0A�Au���H��J	���I��h[I��8]�@H��
��H���(�H��������w����u�I����H��J	���I��h�H���������H����f1�H�0H��H��H��H��H����?H��ƈ1�H�H��rH�рN�H��f�H��tCH�����������I��H��fE1�H��I�H��H��H��H�D�HH��r� u�n���fD��H�GPL�OPH�P�L9��!1�f�H�� ��L���HǂH��H���Hǂ�)�H�������H�L�lj�L���Hǂ�H��Hǂ�)�������H���H��Hǂ�Hǂ�)�H��`���H����H�L�lj�Hǂ�HǂPH��)���X���H���H��HǂXHǂ )�(���H�H�J8�b�H�Q�I9�����f�SI���Gt,H��H��tA�� ��t^��A�� H��u�A�c�I���I��XH�8uwH�H9�u�M�S(I���L���X���I�I9�u�A�c�[�DI��H���H���I��A��$I��(A�� H��I���P���I�KxI��H@H�H�AH�B�H9�t@H�P8�`�H�B�H9�u�H���H9�u��K���fD�W��w1���u
H�G�D��H�H�x �����H��t@��t1�H9�����H���H��
u�H���[��H����H�����ff.�f�SH��H���p����uHǃHǃ[�@SH��H���@����uHǃHǃ [�@UH��SH��H��(dH�%(H�D$1�H�?H�>~H��������u1�H�L$dH3%(u.H��([]�H�$H�H9�|�H)�H�D$H+EHi�ʚ;H����G���SH��H��H���i���H��[�SH�� H��H���I���H�[À=�YZtH����I������H���@�s��H���:AVAUATUH��
�
�SH��pH��eH��H��H��H��	H�,�H9����H��@HLJHLJ�H���Q��H�I��E1�H���}1��C@I��H��I�T$I���M��L9�tN�d�I��H��H������H;s6L�d�fA�|$u�H��u�I��PI�|$ ����L���t��I��@�H�L�H)�H�H�T�H�@H�R H�@ H��H��I��`I��X[]A\A]A^�@��S��H���Mu�u[��r��8軤�H��H�=!|"H��1�觢��S1ҾH���u�u[��5��8�~��H��H�=|"H��1��j��f.�H��tH�u�H��1�H�CJH�5�J�g��uH���H��YH�5�{"H�81��F��fDH����H�BH���~H�xPtwH�@@H��t�t^ATI��H��UH��SH���Q��H�UL�@D�JXH� tL�@H�BPH�HH� tH�HH��L��[1�]H��p"A\��w�H���H��u��ff.�AWAVI��AUI��ATUSH��(dH�%(H�D$1��Ǯ�I��1�M��tA�<$u&H�T$dH3%(��H��([]A\A]A^A_�H�t$1�L���!��H�l$I���]�K���&v}1Ʉ���H�L$��H�L$H���H��H�l$�]�����DX u��lj�H������ M��L��H��o"H�6�Y�H�81���|�1��:����H��H��H�H����H�@@H���H�H!��I���H�E�H��H�D$�]H��H��������������Nf�H��u+L��M��~[��H������	I�����@H��������1�H��H��H��I9��
I9��L��H��I���D裈�H�����uz1��=���H�E�@H�����H�D$�]H��H��������\����DH�E�H����H�D$�]H��H���������$����W���f�H��M�M��L��H���Yj�H��x"H�81��4{�X1�Z���H�q�YM�M��L��H�n"�H�81��{�����D資�H���������M��L��H�Yx"������ff.�@H��t3ATI��UH��SH�^�DH��H�}1�H��A��H���u�[]A\�@��H��tH�u�H��1�H��EH�5�E�'��uH���H��YH�5�w"H�81����fDH����H�
ߋ"SHc�H�>��@H�aNZH�r"H��uD�H���;��H�<NZH��t�H��[���fDH�)NZH�r"H��u�D�H����H�NZH��t��DH��MZH�<m"H��u�D�H���Ü�H��MZH��t��DH��MZH���&H���j���f��H��胜�H��MZH��t��C���f�H��MZH��l"H���*���f��H���C��H�lMZH��t�����f�H�QMZH�|l"H�����f��H�����H�$MZH��t�����f�H�!MZH�+l"H�������f��H���Û�H��LZH��t����f�H��LZH��k"H���j���f��H��胛�H��LZH��t��C���f�H��LZH��k"H���*���f��H���C��H��LZH��t�����f�H�yLZH�Sk"H�����f��H�����H�LLZH��t�����f�H�ALZH�
k"H�������f��H����H�LZH��t����f�H�	LZH�ZF'H���j���f��
H��胚�H��KZH��t��C���f�H��KZH��j"H���*���f��	H���C��H��KZH��t�����f�H��KZH�;j"H�����f��H�����H�lKZH��t�����f�H�aKZH�

%H�������f��H���Ù�H�4KZH��t����f�H�)KZH��i"H���j���f��H��胙�H��JZH��t��C���f�H��JZH�ki"H���*���f��H���C��H��JZH��t�����f�H��JZH�"i"H�����f��H�����H��JZH��t�����f�H��JZH��h"H�������f��H���Ø�H�TJZH��t����f�H�IJZH�yC'H���j���f��H��胘�H�JZH��t��C���f�H�JZH�Rh"H���*���f��H���C��H��IZH��t�����f�H��IZH�	h"H�����f��H�����H��IZH��t�����f�H��IZH��g"H�������f��H���×�H�tIZH��t����f�H�iIZH�xg"H���j���f��H��胗�H�<IZH��t��C���f�H�1IZH�*"H���*���f��H���C��H�IZH��t�����f�H��HZH��f"H�����f��H�����H��HZH��t�����f�H��HZH�������H��k"f��H���Ö�H��HZH��t����f�H�D?[�H�D?���H��dH�%(H�D$1�H���ZH�8tH�T$dH3%(�D$uH���f�H�|$�6����?��ff.�@��H��H�1�Z�|$H�8tH���f�H�|$覍��@AUATUH��SH��H��dH�%(H�D$1��l�A��H����H��������?H�} H9�wtL�d?H��L��H��H�} H����u�H���H��L���u�H��t����DD���@|�L��H�L$dH3%(��H��[]A\A]�fD���H�} I���f.����X���H�H�ƒ�H���E������<���H���H��H��蹌�����L�$$�p����H�H�ƒ�H���U�����H��J���轧�ff.�f���H��dH�%(H�D$1�H���ZH�8H��t)H�t$蟋�D$H�T$dH3%(u-H���fDfH�=�wYffH�Ў�H�H�x0H��t�H���9��f���H���|$H�|$躋H���D��H��H��ZdH�%(H�D$1��D$H�:tH�L$dH3%(uH���fDH�|$�>��D$��賦����w����H���������H����f1�H�H��H��H��H��H��H����H��s�f.�SH����H��A����[D���C����AVH��AUI��ATfE1�USH���������H��I�EH��H��H����H����?H�D(HH��s[]A\A]A^�f�I��I��腷�A���A��I��A�$ ��L��I�EH��A�FuH�4(H���H��s
H!�H���H!�(�1�L���N���I�UH��*H�H��rYL	�H�H��*�H�H��r(L	ȀJH�I��X�fD1�L�����I�UL	L*HD��[]A\A]A^�%��DI��hH�H��r��ff.�f��������H�u�Z�8���ff.�@��H��xdH�%(H�D$h1�H�A�Z�0uH�D$hdH3%(��H��x�@�t$H�<$fH�=uYffH��H�H�HH��t�H�P0H���n��H�R�t$H�<$�rt�L�A�t$H�r1�H�|$HH�|$H�D$H�L$ L�D$(H�D$0H�D$8H�D$@H�D$X$�D$P趤�D������ff.����H��ZH�H���f.���SH��胋�H��uH�D[����tH�@H�y�H��[飨�H��H��[�t���@��H���3��H��H��H��������?H9�wH�D?H���@H�����ff.�@��H������@H����H��?H��?���ff.����H�GSH�@ H�X�誊�H������‰��P�����	ʈPH��[�f.���USH��H���n��H��t��tH�mwYH�5`"H�81����@H��H���H��u�H��H��H�5��'��H��H��[]��f���USH�����H���y�H�=g)&H���z[�H�=�_"H�����H�=�_"���H��软�H��H��H����u�H��H��[]�D��AUATUH��SH��H��H���bH����@������t5H��t��tH�nYH�5�]"H�81�����H���H��uT�/��H�=gAZI���H���F|�������H��t	����H�=o]"1��x���H���w����@H�������~H���H��ur譈�H�=�@ZI����H���H���I��(�H��H���p�I��H����L��L��H�����I�ŐH��u�H���
f�H��lYH�5^"H�81�����蛂�H������	H�=�]"�?��	H�=�]"�.��H�����H�=^["H�@Z���H�=F["��H��赭�H�=�]"H��?Z�݌�H�=]"�̌�H��脭�H�=["H��?Z謌�H�=�Z"蛌�H���S��H�=E]"H��?Z�{��H�=-]"�j��H���"��&H�=ng"H�o?Z�J��&H�=Vg"�9��H�����H�=�Z"H�F?Z���H�=�Z"���H����H�=�Z"H�?Z���H�=pZ"�׋�H��菬�H�?ZH����H����H�=C\"1����H���H��u4H�H�ھH��H��I�|(�x��H��$��H��[]A\A]�H��� ���H��H��H��H��I�|(�:����@�������)����b����6���f��K��H��H��H��I����q��J���H�njYH�5�e"H�81��]��H���Ek�H�5�["H��H��rYH�81��:��H��rYH�5["H�81��"��f���SH��tEH��H��tR��uHH���H��t��u�2��H��H������H��$t>[��H��t����H����fD��t�H��iYH�5mY"H�81�裦�H���j�H�5["H��H��qYH�81�耦���SH��賄�H������H��H��8��	шHH��[Ð��H��胄�H��8H������H���c�����tmH���H��taH��H���f�H)�H���X@H��8H9�u�H�0fH~�H9�u	H���Y�fH~�H��<������tH��u�H��H���H��H��H��H���ff.��AWAVAUI��ATI��USH��觃��H�����tH��uH��[]A\A]A^A_�f�H���I��1�E1�H�=�Y"1��s��L��H��A�ԾxH�=�c"�Yo�L��H��A��I����
	|"H��H�=&d"H��L�I��8�YHH�H(H�P �@L�@����L��H��A��H9�r�H��[]A\A]A^A_�ff.�@��H����w0��u'H� kYH�8H�5FpY����H����H�>�޺1��Dž����S1����H�5UnYH��H�����H��[�ff.�f���H���C��H���Hǀ�Hǀ�Hǀ�Hǀ���z�H��Ð��H�����ǀ�Hǀ��H���@��AWAVAUATUSH���Y��H�D$证�����AH���I����I��������?E1�E1�I�����{�L�H�ËU�$��{�$L��H��腷��H�$H�*7ZH��u"D�H�=�W"�o��H�7ZH��t�H�����H�$H��H���,m��EH�0fH~�H9��fH~�H��<�������GH��H�$H����H��6ZH��u!@�H�=W"�߅�H�p6ZH��t�H��苦�H�$H��H���l��EH�0fH~�H9��ofH~�H��<��������H��H�$H���@H��5ZH��u!@�H�=xV"�O��H��5ZH��t�H����H�$H��H���l�H�} L9��?H�D?H�$H��5ZH��u'f.��
H�='V"���H�p5ZH��t�H��蛥�H�$H��H���k�H�}(L9���H�D?H�$H�/5ZH��u'f.��H�=�U"菄�H�5ZH��t�H���;��H�$H��H���Lk�H�}L9��_H�D?H�$H��4ZH��u'f.��H�=�U"�/��H��4ZH��t�H���ۤ�H�$H��H����j�H�}0L9���H�l?H�c4ZH��u#fD�
H�=@U"�׃�H�@4ZH��t�H��胤�H��H��H���j�H�4ZH��u"H�-U"f��H��蓃�H��3ZH��t�H��I��I��8�7��H��H���Gj�H�|$H���J��M9�������H�D$H��[]A\A]A^A_�f���S�H�$���f���S�H�$����f��|�H���	����|�H�$���f��|�H�$�,���f��|�H�$���f�H��H��H��H�$���H��H��H��H�$�3���H�D$�E���f���H���C}�ǀ�Hǀ��H���@��H���}��H�H��H�Ѓ��ff.���AWAVAUATE1�UH��������?SH��(��|�H���Dw�H�D$�:w�I���2w�I���*w�H�D$� w�H�D$�fDL�l?L���C�L��L��H���h�J���H��t$H9���L�l?L����L��L��H���dh�J���xH��t&H9��~L�l?L�����H�|$L��H���1h�J���pH��t"H9�w_L�l?L����H�|$L��H���h�I��I��tXJ���H���R���H9��.����z�I���&�����z�I���z����z�I���fD�{z�I���)���H��0ZH��u%H�,R"D�
H��蛀�H��0ZH��t�H���G��H�|$L��H���Wg�H��0ZH��u$H��0#@�H���S��H�d0ZH��t�H����H�|$L��H���g�H�80ZH��u$H��Q"@�H�����H�0ZH��t�H��跠�H�T$H�|$H����f�H��/ZH��u"H�eQ"f��
H�����H��/ZH��t�H���o��H�\$H�T$H��H���zf�H��(H��[]A\A]A^A_����AUATUSH��H�-snZH�EH�PH��H9�t:I��I��H��P���DH��L��A��H�EH���H��H��P���H9�u�H��[]A\A]�D��USH��hH�L$H�|$(H�t$H�T$dH�%(H��$X1�fH�=DbYffH�<y�H�D$p$H�H�D$8H�D$8H�@pH�D$@H�D$8H�@H�D$PH�D$8H�@H�@DŽ$PH�D$XH�D$`H�D$H$H�L$8H�AH�L$ H��$HH�A0H���-H�H 1�H�qXH9p�H��$���$T�\�������H�L$ H�D$pH�AH�\$`H�D$8H�T$PH�PH�D$8H�T$XH�@H�PH�D$8H�T$@H�PpH;\$}rH�l$(@H��H�t$H�D$H���кH�龁
H�D$HH�|$H�I^�H�\$`H�D$8H�T$PH�PH�D$8H�T$XH�@H�PH�D$8H�T$@H�PpH9\$u�H��$HH�L$ H�AH��$XdH3%(��H��h[]�D�Q`���H�@XH�L$ H�Aǀ����H�A0H��t�H�H 1�H�YXH9XtH9�t
H�|$ �vH�D$`H��H�D$`H�\$HH�D$H$H��$������f�H�8��������Q`�膏�fD��ATI��UH��SH�6�� tgH��H���H��H���R�L��H����H��H���P�H��t@��t[�]A\��H�EH�ƒ�H��t�$[H�E�]A\�I�\$�f���H��fH�=`_YffH�Xv�H��H$H���ff.����H��fH�=0_YffH�(v�H��`$�H���ff.����H���ZH�8���ff.�f��G��(< t1��f�H���'��t1�H���@�s�����ff.����H�����tYv?��tZ��uEH�W�H��t-H�������H�����t)H�G��1���u
�f��\���f�SH���\�uH�{ t!H�{tH���ݏH��u
H����H��t1�[��H�����H��u�H��軈[���fD���WS�����w����ATUH��SH���H��I���b^�u.�}�V��L��H���+H��t&[H��]A\�d�f.�[�]A\�fD[1�]A\�f���H��ATI��UH��S�HC�H��H�H���6�!��tH��t<H�۹@H��?)ٻ��Hc�H�
D/ZH��1�H)�I��H9�����[]A\����f���f1�H���f���H�GH�P�1�H��wH�GH��@����H�h"��Hc�H�>��@H��M"��H��M"��H��M"��H�;I"��H�I"��H�I"��H��H"��H��H"��H��H"��H��H"��H��H"��H�$'��H�jH"��H�RH"��H����H�H�$��H�#H"�H�H"��H��G"��H��G"��H��"'��H��G"��H��G"��H��G"��H�oG"��H�Q�!��H�FG"��H�N�!��SH��H�����H��u	H�p�$[�H��[��ff.�f���SH��H��dH�%(H�D$1�H�H�ƒ�H��t6@��t`������t0f�H�D$dH3%(��H��[�fD������u�H����������u�H���U��H��t���tH���-_�H�H�ƒ�H��t���H���tS��t����u���� �j���H�$� 1�H��H���tL�H�H�ƒ�H���A���H%����H��3���H���1�#���H�����������ff.���S���p����x�����ۉP��	��X[���SH��H��dH�%(H�D$1�H��uH���ׅ��@��u�H�H�Ѓ�H��t��u�H��tP�+p�1�H��H�$H����K�H�H�ƒ�H��t$H�H�L$dH3%(H��uH��[�f���t�H���sk����ff.����H���~�@��AWAVAUATUSH��H��8dH�%(H�D$(1�H����@����H�H�Ѓ�H��������H��H�������
H��譊����0o�H��H�T$H��H���I���l��L�d$I�$�� u|M�l$M����1�M�t$�-DL��L�<�H��L���n^�H���H��L9�tlI�$�� u�I�D$ ��@H���P~�H�5P"H��H��[YH�81��E��DI��I��A���y���������H���i�����f.�H��L��L�l$�p��L��H�l$H�D$�5��H��H���ʅ�H��H�L$(dH3%(��H��8[]A\A]A^A_�@L�l$�H�l$L�����H��I���a�I��$�L��H����i��v���fDL��L�l$�c���H�����H��蓣�H�5$O"H��H��ZYH�81��8��装���USH����~DH���t2H�n��u3H����
H9��ӻ�H��H��H��[]�_n���3o�H���ͺ��Op�ff.�@��SH����l�1�H;�X��H��H;�`��H���������H��H��H��H��H��H��H)�urL��@E1�M��tM�I����HH9�reH�QL9�s<J�
H��I�<�H�H�@ H9�s�H9�s H�4
H��I�<�H�H�@ H9�sH��H9�r�1���[�f.�I��H����H�H��t��B1�f��t�H�z(H9�r����H��H�H�H9�s���H���������H��H��H��H��1�H��H��H��@���@��H��uH�D?Ð@��tH�@H�y����fDH��H������AVAUATUSH��H��dH�%(H�D$1�H��tZI��A��uOH�H�ȃ�H����H�́�tH���Y�H�H��H�ȃ��ƃ�����H��_"Hc�H�>��1�H�t$dH34%(H���fH��[]A\A]A^�f.�H�{H��t�b;H�H���'T���L�-�ZI�}�H�{ 蔚�I�}A�����E��tE�� A��D)���H�H�{@H�H��t�:H�H�{(H��t��:H�L�c8M��t"L����:H��H�5����L��H�$�|>H,$H�@tH�CHH�l�fDH���l�H�(���H���P�H���H���@S���H�{�oG�H��f.����H����L�c8M��t�L���,:H��H�5��L��H�$��=H,$�m���DH��老H��X����H�{H���C����ޒ�H��6���fDH���[�H�� ���������H�{�F�H�l�����@�����H�{���H�CH�l�������@����H�{����H�CH�l����fDH�{H���������H����fDH�CH�P�H���~���L�sL�k �uM�f@L�k A����M����I�FH����L��L��H��:���f.�L�c L���d��HcS@H��H�H������H�;�� ����H�� �hz�@H�l����H�{H���>����v8H��1���fDH�;H�� �,z�D�`�-���L����L���b�I���;���H���b��H���Vd�����H�ھH�=eI"1��l�fD��SH��fH�=PYffH�f�H�H��H���H��tH�H���H+��H��[�ff.�@��H��H���H���H)�H���H��H��H-H9������f���H��fH�=pOYffH�hf�H�H��H���H���H���H)�H��H��H-H��H9���H�����ff.���UH��SH��H���[f�@tnH�����������H��f1�H��H��H�H��H��H��H���H��s9H���H��t-H�
H��t%1�H;jt@H��H9�tH;l�u�H�D�H��[]���H9�r�fDH)�H�VTH������ff.�f���H��tSH���e�H��H�5�[[H���Ka�����H��t1�H�5�_�)a�f��ff.�@��H��fH�=�MYffH��d�H�H�@0H�H0H�$H���H�L$�HH���H�$H�@0H��H���H���ff.�f���SH��H���H���H9�sH)�H��TH������H���H��T�[����f���H��tH�u��1�H�5�[�:`�f.���H��tH�u��1�H�5_c�
`�f.���H�H�Ѓ���tVv$��tG��u:���H��H���PH��P�D��uSH���jM�¸ ��t[�D1��D�k��c-H�;H�� �4v�[�x��ff.���SH���c�H��[H��������1��f���H��&�@��AUATI��UH��SH��H���Tc�H�=|Z�H���������H����f1�H�8H��H��H��H��H��H��H����?H�D7HH��r	H����1�L��7�H��7�� tH9��L�
�ZM��H��M�I��sH9�� L��ZM��H��H�H��sH9���H��ZI��H��H��7H��sH9�v1H��ZI��H��H��7XH��sH9�vH�,ZI��H��H��[]A\A]ÐH�QZI�$��,���H�IZH��u%L�-9"D�L���Cg�H�$ZH��t�H� ZH�	ZH��u%L�-�8"D�L���g�H��ZH��t�H��ZH��ZH��u%L�-�d%D�L����f�H��ZH��t�H��ZH�yZH��u%L�-4"D�L���f�H�TZH��t�H�@ZH�1ZH��u%L�-D8"D�
L���cf�H�ZH��t�H��ZH��ZH��u%L�-8"D�L���+f�H��ZH��t�H��Z���H�M�H���I��r'H��7H���>���H��[]A\A]ÐH�H���H�������H��7H��������f.���H���c`�X�H���H���x�����SH���3`�H;�X��H��H;�`��H���������H��H��H��H��H��H��H)�urL��@E1�M��tM�I���f.�H��H9�rTH�PL9�s;J�
H��I�<�H�H�I H9�s�H9�sH�4H��I�<�H�H�I H9�sH��H9�r�[�fDI��H���H�H��t��Bf��t�H�r(H9�r����H��H�H�H9�s�H�����������H��H��H��H��1�H��H��H��u�H��[�~����w������'�����H���H��t���s����SH����^�H�S'H���������H��H��H��H��H��tH���@H��?)‰Ѓ��?��[�fD��H�����Ð��H��RZH�H��tH���@�����1��D��H���3^�H���H������H���@�H��������?H9�wH�DH���f.�H��H����\�@��SH��@��t4H��uH��BYH�5?2"H�81��u�D@��u�H���H��u�]�1�H��H��輓��H��$t[�@H��u���H��� C�H�5�3"H��H�oJYH�81���D��H�GH�@ H�x�雋�ff.���USH��H��u!H��AYH�5�1"H�81���~�f�H��H����t
@��u��DH���H��t<@��uv��\�H��H���v���H��$�|H��H��tCH��H��[]���\�H��H���@���H��$tJ��t�H���H��u�H��H��u�H��H��[]�Q9�H���5����Q\�H��H�����H��$u�H����A�H�5a2"H��H�7IYH�81���}�ff.�f���H�==Z�@��H����[�H�=�Zu7H��Z(H��ZPH��Z�H��Z@H��Z�H�kZH���fD��H���[��P�у�HH��H��H��<H��?���@����Y�����G��H��<��H��?�W���@��H���3[��P�у��HH��H��H��<H��?���@��AVL�5?2"AUATUH�-WIYS1�H��0dH�%(H�D$(1�I����Z�H�5YIYH�=�1"I�������L��#L��1����6�H��L��H��輾����u��ע!1�f��H�5IYH�=�1"�ֳ��H�5IYH�=�1"胾���
��!1�f�H�5�HYH�=�<"袳���
��!1���HYH�5�HYH�=="�}����
�HY��HY�H�5�HYH�=="�U����f��f�H�5�HYH�=
="�5���H�5�HYH�=="�f��f�����H�5vHYH�=71"�½����tH�_HYI�EH�5\HYH�=*1"蠽��H�=HHYuH�;HY�������!1�f��H�5.HYH�=�<"課��H�5#HYH�=�0"�W�����uSH�5HYH�=�0"�@����`�!1�f��H�5�GYH�=�<"�_���H�D$(dH3%(uH��0[]A\A]A^�f�H��GYI�����p�ff.���H�����z��H��M"��Hc�H�>��@H���$H���@H��0"���H�{�!���H�k0"���H�C0"��H���%��H�+0"��H�10"��H��%�{���@H�'�$�k���@H�0"�[���@H��/"�K���ff.������Y������Y��H����AUATUSH��H�/H��teI��H��1�I����H�]H��u�bf.�H��H��I��H���_?�1�H����H�CH��u�L�kH��L��[]A\A]�6?�fDH�7H��[]A\A]�f���H������UH�oXSH�_H��H�H�CH�3H��H�x0�3���H�C�H�C�H9�u�H��[]����ATUH��SL�eXH�]�V�H���H�EH�CH�3H��H�x0����H�C�H�C�L9�u�[H��]A\�3O�H���������AWI��AVI��AUATUSH��L�f H�7I�\$H��H��H��H���H��H��H��H)�t.H���(I��$A��A)�L���H��(H��'wH�\3�H)�1�I�^(H��fA�M�~I�F0I�ĉ�fA�F��A��H�H�H9���I��f.�L��1���}�I�F0L��1�I�EI�EM�n0�h����s=�I�H��I���Hc�H�I9�r�A�FI�OPfE�fI�V8I�GI�N8I�OXI�N@I�OXH�I�WXI���I��H��[]A\A]A^A_��A���f�I�9��8��8�AVH�W(AUATUSH��L�F8H)�H�N@H���H��H��M�4I��L�
CYI��H9�sH���
f��H*��f�H����f��H*��Y&CY�
��!f/����H,�I9���H��t	I9���H��I��I��H��tDH�EI���H��L��I������I�D$HH�E�EI�l$HI�L9�v9I��H��u�A�E��I���I+�PH��v{A��HI�D$[]A\A]A^�@H�ƒ�f�H��H	��H*��X�����f.�H�Ѓ�f�H��H	��H*��X���f��\��H,�H��?���DI��$�[L��L��]L��A\A]A^骂��f.���1��f�ATUSH��H���AT�1�H��I���D{�H���H��uH�kM��tH���:�H��[]A\�ff.�@��SH����R�H��t��t	H��[�@H��[�f.���SH�>H���4�H�1�[�f���SH��H���`4�H9�[�������f���UH��SH��H��H�?�84�H�}H9�t	�*4�H�EH�;�4�H�;H9�t�4�H�H��1�[]�D��UH��SH��H����3�H9�tH���[]�f.�H����3�H��1�H9�u�H��[]����SfH�=s:YffH�kQ�H�H�x0H��tH� �Fb�ѼH��@YH�CH��t�uH���U���H�CH�CH��t�uH���<���H�{H�C[鎴��ff.�USH��H���bR�1�H��H���ey�H�H��tH�ƃ�H��u)H�{uJ�H��t
H���9�H��[]�@���H���tu��u!��t�鯟�@H��1�[]��H�{t�H��t��u�H��u�� t�H��H��[]���fD���7������H9���AUI��ATI��UH��SH��H���H��uCH��苅�H�EL�L9�t^H�������u�H�uH��t�H���e�H��t�H��t��H�I�ZH�؃�Hu�H�u�H���w�t���H��1�[]A\A]�1��ff.�f�ATUH��H��SH����P�1�H��I����w�H���H��t�H���`u5M��tH���x7�H���H��XH�:u4H�H9�u�[1�]A\ÐM��tcH���C7�[�]A\�f�H��f1�H��At�H�����������H��[]H��A\H��H��H��H�����H��H�Ѓ��[�]A\�ff.���SH����N�H��H�����[�����ATH��USH�� dH�%(H�D$1��M�H��H��H��toH��u*H�L$dH3%(H����H�� []A\�f.�@��tLH��t�H��t�@��u�H���H��t�@���"�
H������H���X��H�����M�H�T$H��H���H����J��ZH��������?H�} H9��3H�D?H�D$H��ZH��u&H�-('fD�H����R�H��ZH��t�H�l$�H��H��H���^�H�D$H��tqH��ZH��u&L�%��!fD�L���{R�H�lZH��t�H��H��H����]�H��H�J2YH�5U%"H�81��n�H���W�H���q���H�ZH��u%L�%$�!D�L���R�H��ZH��t�H��H��H���\]�H�5%"H��H��1YH�81��Qn��{K�����fDH�t$H������������H�l$H�����H��}ZH���H����H�E�����H���t�������
H����H�5m0"H��H�C1YH�81��m�H���H1�H���P���n���H�1YH��H�5$"H�81��m��c����H9���AVI���������AUI��ATI��USH���H���L�1�H��H���s�H���tC��t>H���d� u1��H��H��f1�I��H�H��H��H��H�D�HH��s)f�H��tH���#3�L�I9�u�[1�]A\A]A^þH����y���ѐ1��ff.�f���AWAVAUATUSH��H�GH�L�(�(�GH�T$��H�B(H�$Hc�L�I9���I��I���#DH��tL���2�I�D$H�I�I9�tjL���K�1�L��H���r�A�t�L��M�t$�Z0�H��t�(H=�vHH�D$L�40H�9��8��8�L��H+$H��H��I�D��{���H��1�[]A\A]A^A_��H�P'H���������H��H��H��t�H�Ҹ@H��?)�H�4�H��H��(����AWA���"AVAUATUSH��HdH�%(H��$81�H�|$ H�<$�H�A���Y��H�H�D$H��uH� .YH�5."H�81��k��I��A��u�H�D$H�H�D$��H��u��$I�1�H�D$H��@H����DH�|$��H�D$H��Ā��H����H����H��������?H9��EH���G�H��H��YH��u*H�#!"f.��H����M�H���YH��t�H���n�H�|$H��H���4�H��������?I9���K�l$H�p�YH��u$H�� "@�H���sM�H�L�YH��t�I��������?H��1��n�H�|$H��H���#4��!�H�T?H�|$H���4�H��H�� � H��蘯��H��H�$H�<�H��t�L9�v��F�H���f��G�H�D$H�D$H��@H����L� 1�M���w���H�D$E1�H�t$H�D�L�(�XL�x(A����Hc�L�I9�sXH���'f���H�D� M��tL���*/�M�H�EI9�s.H��L���3H�1�L��I���6o�I�H��u�I����H�D$H�D$H�T$H��@H������H;�W������f�H��$8dH34%(H�D$�~H��H[]A\A]A^A_��
A�1�E1�H�D$H�l-���f�L���XE�H���	���H�D$H�@(H���s���H�|$H�5����H���:}��Z����@�H�D$�K����Q^�1�D���RI�f���AVAUATUH��SH���E�H��~]L�4�H�+H��tH@��uBH���F�1�H��I���m�L�eA��M��tH���-�I��uH�H��t�tH�H��I9�u�[]A\A]A^�fDH���P���ff.���H��u1��@@��u�ATUSH���nF�1�H��I���qm�H�+��M��tH���.-�H��t1�[]A\�ff.����AUATUSH��H�H��t��tH��1�[]A\A]��H��H���E�1�H��I���l�L�#A��M��tH���,�I��u�H�EH��t�tH�EH��1�[]A\A]�H���X���fD��AUATUH��SH��H�_H��t��tqH�]H��t��tH��1�[]A\A]�fDH���XE�1�H��I���[l�L�#A��M��tH���,�I��u�H�EH��t�ttH�EH��1�[]A\A]�H���E�1�H��I���l�L�#A��M��tH����+�I���\���H�EH��t�tH�E�F����H���h���fDH���X��fD��AUATUSH��H��H�oH��t@��t H�CH��t�t[H�CH��1�[]A\A]�f�H���XD�1�H��I���[k�L�eA��M��tH���+�I��u�H�CH��t�tH�C�DH�����fDH������ff.���AWAVAUI��ATUSH��H�_H��t	����A�E1�~x�Hc�I�EH��L�dM��tSA��uML���C�1�L��I���j�M�4$A��M��tL���S*�I��uI�UH�H�zH��t@��t'H�z��A9m�H��1�[]A\A]A^A_�fD���I�UH��H����H���C�1�H��I���j�H�+��M��tH����)�H������I�EH��t�t	I�E����H���x���fDAUATUSH��H��H�oPH��t
@���PH�khH��t
@����H�kXH��t
@����H�[8H��tZ�H�+H��tH@��uBH���ZB�1�H��I���]i�L�eA��M��tH���)�I��uH�H��t�tH�H�[H��u�H��[]A\A]�@H������fDH����A�1�H��I����h�L�eA��M��tH���(�I���J���H�CXH��t���H�CX�0���f.�H���A�1�H��I���h�L�eA��M��tH���V(�I������H�ChH��t�t_H�Ch����fDH���HA�1�H��I���Kh�L�eA��M��tH���(�I���|���H�CPH��t�tH�CP�f���fDH�����fDH������fDH����� �����AWAVAUATI��H��UH��SH��H��H�@�1�H��I���g�H��uK1�����H�݊$H��L��H��1��8�M��tH���K'�H��HL��[]A\A]A^A_�f�I��A����H����H���?H��$�5���<����D�H������H�R�$H��L��H��1���Lc�L9��i������`���H���$�H���-�H��K�<4H��$H��L)�1��m��0�����{>�H���#���uoH�{H��u&H��v`foH7"A�D$A�D$nal)A$�Kf�H�����t7��a�H��t,H�HH� tH�HH��!H��L��1����Lc�@L9������L�L�ʃ��������H�
23"Hc�H�>��@L��%0H=0�fO�<4A�� u#I�FH9��J���H� [embed]O�<4I�A�GH���td�H�KH��L��I��L)�H�D"1��F�Hc�L�H9������L�CH� tL�CH�C1�H��xH=�������N�H��H�"1�H)�L�������A���CI�F
H9������K�<4A�> H��H�shared -H�L)�fD�_�G
H�S�����j���f�A����3I���AM��A��H��K�<4H��"1�L)��k��.���fD�{<�H���C�H��K�<4H�n"H��L)�1��8����H��L)�M��%���H�{�1l�H�I"H��L��H��1������DH���_�H����H�HH� tH�HH��K�<4H�T�$1�L)����x���H����J�H��tH�C H��t�x���H���L����H�C H���:����HH��K�<41�L)�H��"�W�����f�I��D�σ��E�H��K�<4H��"H��L)�1��&�Lc�O�<2L9�����H�3H��H�������������	�������H�{H����L�sL�K�M����I� H�
|"H���%I�~HE�H�T$L�L$H�D$�)�L�T$L�L$H�T$I��H���aH�JH� tH�JAQH��H��"K�<<AVL)�M��1��H�XZ�	����H�KL�C H��t��uH�H�ƒ�H����H��K�<4H�+"1�L)�������fDH�{�]�H�������H�HH� tH�HH��K�<4H��"1�L)�������������fDH�޿����L��H��$H��H��1��|�Hc�H9��8���H��H��H�U"1�H)�H�L��S�����fD��r���fD�������H�CA�����L�
�'H�D$H�C H�D$H�CH��t�8A�����Y�A��H�3A��I��H�ć%�� H�{"HD�H�
u"��HD�H�=h"��HE�H��L�X"��H�D$��t��L�E"H�B"LE�H�{H�T$8H�L$0L�D$(L�L$ �g'�t$H��K�<<�t$L)�AVL�L$8AQH�T$XRH�L$XH�R"QL�L$HH��1�L�D$X�%�H��0Lc�M�L9�����H�CH�����������I�FH9������O�<4H��H� (iseq:I�H�CL)�L��H�P�8���M�VL9������fA�)�x��������fDH��K�<4L)�A�� ��I��L��%H�
�%1�A��H�6"�e��(���L�C(�S����f�H�;H�� ��I�HH� ��H��"H��L��1�� ����I�FH9�����O�4A�n)A�(anofE�BA�B���H���f�H�������H��H��1�L)�K�<4H�V�$�������L�K�s L�%1��sL��H��"��AYAZ�M���DL�CH��"H��1�L���h��+���H�Q�� tH�QH��H��K�<41�L)�H�T"�;����H�KH��K�<41�L)�H�"��Hc�L�H9���������H��K�<<H��L)�蔙����������I��A��H���'H��I��A��A��H�� H�T$D�D$�$�H��H��K�<<H�T$H��L)�E��1�RD�D$H��"��Y^�B���H�PH������H��K�<4L)�����!����$Y�L�sL�KH��M���{���L��%L��
"���L��
"L���%L�����H�{H�
z�$H��
"HD����H�{H� �%H�ʣ'D�s HD�D�CH�{������SH��H��H��H��pH��[�H�t$H�<$��[�����H�$H�L$I��H��H�5Q"�h��@UH��SH��H���Gt9H���������H����f1�H�0H��H��H��H��H����H��H	���H����H��b������������!4�H��H;�X�2��H;�`�%��H���������H��H��H��H��H��H��H)�����L��@E1�M��tM�I���@H��H9�����H�PL9��ă�J�H��I�<�H�H�I H9�s�H9�����H�4H��I�<�H�H�I H9�sDH��H9�w�逃��Hc� ;�$t1H���J�� H��H��[]�fDI��H���]���DH��(H��tTH��H��H���H��(H��H;�0sH��0H���H���1�H���|�������H��u��΂��΂��ׂ�f.�I���������H��AVf1�AUATI����UH��SL�H��I��H��H��H����H����?I��0H��sYI��0�H��rK��I��H��fE1�I��I�EI��H��I����I����?J��0H��r I�D0HH���t+A�D$@u{[]A\A]A^�f�� t�E u��p�����fD� H��HD�I��$@衎��I�EJ��0H�H��r�H��A�|$H�tH��L���b���H��L�������DI�U���H��J	�2X�j���D��AUATI��UH��SH���71�@u1�E uH��[]A\A]�A�$ u�H��H��[]A\A]闢���H����Z�A��Cu���Z�Ct��Z�A��Ct�H��H��L���6���H��D��[]A\A]��Y�@��SH���0�@t]H���������H��H����f1�H�H��H��H��H��H����?H��H��H��s#H���H��rH��[����� u[�f�H��[�nj�����AWI��AVAUL�o(ATUSH��H�H�kxH��HI��I�D$0H�<����H���k��I�$L9�H�JȺtf�H�q8H��H��H�N�L9�u�I�ĐI�EI��I�U I9�u�I�GPH�$I�GxH�D$f�H�$L� L�h�H�EH9���H�X�H��8t~M��tyE1��@I��H��tgM9�vbK9\�u�I�GH��t H�U��sH�{(I�O ��Hc�H��Ѕ�u2I�GH��t
I�w H��Ѕ�uH�[8H9�tH��8I��H��u�fDH�$H�ŐH�$H;D$�E���H���[]A\A]A^A_ÐPXH���E,��2��x3�u*H��Y�"�H�=�"H���Y����1�H�=�~���K���f.���U���SH���gO�H�5 1�H��H�l"ZH��H�H��H��Y�C�KH��Z�������~�(���P��f�C(H�Cx�@�H���H�CxH��H��H��H���H���H���H��(H��0H��(H���f��hH�=�!Xf���f��Hf���H���H���Hǃ@Hǃ���YH�C ��H����s�f�H�dY'H���H��Y� H���H���H�;Y'H�8Y'H�5Y'H�2Y'Hǃ0H�� �����H���:}�H��H��H���H��(H��H��(��u�H��0�a�������H�r�YH����CH�����H��8����	ȈCH��H��[]�ff.����AUH��ATI��USH��H��A��1�L�E����I	�t4I��H��H����R�u-I�����M��H��H��H�5;"L��1��_���H��[]A\A]��I|���H��fH�=0YffH�(+�H�1�H��t
�������H���ff.�����ff.���PXH��H�?YH��H��H�5�"H�81���L����������'L�����#����H���H��t4@��t9H��tCH��tMH��$tW�@��u@����D�馶��fD�>��閶��fD���f����f���f�ATH��I��USH��H�� dH�%(H�L$1�H�T$H��t��t@H�l$H�8H�t$H���{�t>I�<$1�H���i�H�D$dH3%(u9H�� []A\�H�H�у�H��t���H��H���>�H�=�"H��1��@/���A�ff.�AWAVAUL��xATUH��SH��XdH�%(H�D$H1�H�D$@H�D$H�D$8H�D$E1�M�EM��M���H���H�D$ 1�L���kQ�L��M�wf1�H�I�GH��tI� ��I�M��L�|$8A������M���H���H�T$H�t$�Y���y�H�L$@H�1�� �L�IM���I�H�ƒ�H��������L��H��L�L$(H�L$迗��L�L$(H�L$H�~Y��H��L������{�M��u0I�H�у�H��t!��tH�t$ H���L���D$����D$H�SL��1��D$H�j0f�kf�C�EP�H�S0L��1�I�I�WL�{0M����V�����H�S�D$H�B(�����M��������j���fDH����I��M�������H��������?H�U H9�wBH�|H��L��H�U H��X���������H�ƒ�H���q���$I��g���fDH��L�L$(H�L$�>&�H�U L�L$(H��H�L$�H�D$HdH3%(uH��X[]A\A]A^A_��D?�@��H������t
�f�SH���G(�H���?����N�ǃ��[�ff.�ATUSH��dH�%(H�D$1�H��tH���t#H�D$dH3%(��H��[]A\�fDH�H�ƒ�H��tΨ�t�I��H���H��H��H���=#�tAI��$�H�$H����
�H��t�@��u�H�EH�ƒ�H���{����H�E�p���H����:�H�=I
"H��1��+��>�f.���UH��SH��H����%�H��H��H��H��[]������ATI��USH���%���H��H���������H��H��f1�H��H�H��H��H��H�D�HH��rH��L��[H��]A\���fDL��H���5�������H���������ATUSH�^ ��I��H��fE1�H��I�I��H��I��J�D�HH��r,��I��H��fE1�H��I�H��H��H��H���H��s[]A\�H���9�H��I���9�M��H�N"H��H��YH�81���E[]A\��� ��H���������ATUSH�n H����f1�L�H��H��H��H��H��I����H��r<H����f1�L�H��H��H��H��H����?I����H��rI����H��s[]A\�D��H���8�H��I���8�M��H��"H��H�YH�81���C�ff.����AUATI��USH��H���#�H��t��t
H��[]A\A]�f�H���$�1�H��I���K�H�+��M��tH���X�H��u��M#�H�����H���
8�L��H���8�H��H��H�=U"H��1��(�ff.���H��t@��t�AUATUH��H��SH��H���$�1�H��I���K�L�#A��M��tH����
�I��tH��[]A\A]�H���~��H���v7�H��H��H�=�
"H��1��(�ff.�@AWI��AVI��AUI��ATI��fE1�H���������USH��H��hI�MdH�%(H�D$X1���H��H��H��H��
H��H��H��A��H�D$ H�|1HL��1A��?H�I�*H�$H��1�H�H���(L�H�����H�L$D��H��L�L$H��L���H!�I�
L�L$H!H!H!��H���jM9�L��IF�H���_L��1�H���Z��1�H���pP��A��H�|$M��H���������H��fE1�H��M�H��H��H��H��H��L����I	��H��D��L�$L�t$H��H��H��M��H��I�2H!�H	ƃ�HD�D��I��H��I�2M�THI�2H!�H	�A��HD�D��I��I�2I���L��H�H	�H!׃��L$ HE���H�>H�t$�L��H����O��I�EH�H�C$H�@L�cH�@(I�H�@H�@ H��H�\$XdH3%(�VH��h[]A\A]A^A_�fD�������H�H�ƒ�H��t?��t:L�D$8L�\$0��L��H��H�D$(��,�H�D$(L�\$0L�D$8H����H�H�ƒ�H���/���L�\$0���!���L�D$8H�\$H��L�\$0H�T$PH�t$HH�D$(I�;���L�\$0L�D$8����H�T$PI�;L��L�D$0�)�H�|$(L�D$0�����L�D$(��L�D$(���@H��H��I!������DH��L���
Q�����L�D$0L�\$(�q�H�L�\$(L�D$0�����*7�H����3�H�=k"H��1��q$�AWAVAUI��ATUH��SH��H��H�4$D��t
H�E��H��tH��(H��u�H��[]A\A]A^A_�fDH����f1�H�0H���������H��H��H����H��H��H��H!��XH�����I���I��H��thI��M��H�$fE1�D�I��A��tjH��L�����M�61�L��fA�F�4F�I�V01�L��I�I�WM�~0��L������/���DH�$E1�E1�D�H�%��DI�$��H��u�D�]H��L��D�\$����D�\$E���r���D��H���,��b���f���AW�AVI��H�5y�YAUATUSH��hdH�%(H��$X1�L��$ H�\$ L��L��$�H��$��T%�L��H�5��Y�@%�H���F�H���4�H���3�H��H�޿��$�M�v���M��I������m�H����L���D$�Q��M�7H���H���������M�~(I��I��XA��H��H��H!�H��H����H��H����H��H��H��H)�I���H�D$M���
M�� I�H��I#�@tL��L��H��L�L$�.���L�L$I��
I��L9|$uNj|$���1�L���$�1�L���$�1�H���#�H��$XdH3%(u6H��h[]A\A]A^A_�@H��L��L��H��H�D$���H�D$� ����3���AWI��AVAUATUSH��H��HL�.� E�A��M��upL�5�YL��H��"I�>�1����D���PD�H�{ ��/�L��H����/�I�>I��H��H�_"1����CH��H[]A\A]A^A_�DA��u�M;�X��M;�`��H���������L��H��H��H��L��H��H)�utM��@E1�M��tM�I���@H��I9���H�PL9�s?J�H��I�<�H�H�I I9�s�H9�s#H�4H��I�<�H�H�I I9���H��H9�r�M��M��tI�@ I9�s+�f�L�59YL��H�"���f.�HI9�s�L�5YL���1�H��"I�>��D����B�����I��H������DH�H���d����Bf���W���H�r(I9��J������H��H�H�I9��3���H���������A��H��H��H��H��1�H��H��H��H��H�������L��I��A��H��
f1�I��A��?��H�J��D��D�T$$L�LHL���H���(I��D��L�L$(L����H����L$#D��I��I��H��6L�\$��H��L�L$��H�T$0J����1��f�xH�T$8�t$u-L����:-�L�5�Y�H��"H��1�I�>�:��I�����H����H��tL���67�D$��t7�|$#t0L������,�D�D$�L�5;YH��H��"1�I�>���A�E��<tH�D$H��H#D$��FA�E���H�D$(�|$A��H��H#D$�t	E����H�D$8�t$$H��sE��tzL���J,�D�D$�L�5�YH��H�?"1�I�>�E��A�E�"���H�|$0����A�E��<�����D$�����L����+�H�<"H������@A�E�uD���'@������L�5(Y����H�|$0t�A�E��<t�D$u�L�5�Y�@L�����}+�L�5�Y�H�""H��1�I�>�}��I����D���f�L�����E+�L�5�Y�H��"H��1�I�>�E�����L�����+�L�5~Y�H��!H��1�I�>���I������f.�L��D�L$����*�D�D$�L�5/YH��H�e"1�I�>���D�L$�:�����H��H���dH�%(H��$1�H������H�1�!�H��H��YH�81��r��H��$dH3%(uH����-�f�H;�X��H;�`��H���������H��H��H��H��H��H��H)���L��@E1�M��tM�I���fDH��H9�rLH�PL9�spJ�H��M��I�	H�I H9�s�H9�vL�I��O��I�	H�I H9�sHL��H9�w���I�H��t@�Bf��tL�B(L9�r���H��H�L�H9�r#�f.�I��L���e���D��H���������AVAUATU��H��SH��I��H��1�I��K��H��H��H����H��I��H���/�1�H��I���2<�H��������}A�EI��H��A��?fE1�H����`<`��I��@H���p��I�H��(H�L��r7L��H�H��t
��u�tIA�}tH��L���_o��H��L������@M��tH��[]A\A]A^�[��[]A\A]A^��H�����H�=��!1����I�H��*XH�L���P���L��f�BH��?���f���H��u�fDH��@��u�H�(ZATUSH�H��H��u[]A\�_����H;�X��H;�`��H���������H��H��H��H��H��H��H)�ujL��@E1�M��tM�I���f�H��H9�rTH�PL9�s;J�H��M��I�	H�I H9�s�H9�vL�I��O��I�	H�I H9�sL��H9�w�[]A\�I��L���I�H��t��Bf��t�L�B(L9�r����H��H�L�H9�s�I�����������H��I��H��H��1�H��H��H��u�H�������u�L��H��HǃI�4$A�T$L���d���@��H��u�fDH��@��u�H��ZATUSH�H��H��u[]A\�����H;�X��H;�`��H���������H��H��H��H��H��H��H)�ujL��@E1�M��tM�I���f�H��H9�rTH�PL9�s;J�H��M��I�	H�I H9�s�H9�vL�I��O��I�	H�I H9�sL��H9�w�[]A\�I��L���I�H��t��Bf��t�L�B(L9�r����H��H�L�H9�s�I�����������H��I��H��H��1�H��H��H��u�H���R�����u�L��H��HǃI�4$A�T$L���d���@���g������H���sAWAVE1�AUI���������ATI��UH��SH��f�K��H��������H��ZH�H��L��H������I��H��fE1�I��A�G��`I��H��I��A��I��A��?<`��I��@H���l��I�J��H�L��r)L��H��t<A�tH��L����j��H��L���G��I��L9��:���H��[]A\A]A^A_�H���`�H�=e�!1��B�f�H�D$H�2H��HǀH�$�RH�$H�D$H��뚐I�J��XH�L���5���L��f�BH��$�����ff.�@��H���3AWAVE1�AUI���������ATI��UH��SH��f�K��H��������H�;ZH�H��L��H����I��@H���j��H����f1�H�H��I��H��H��H����?H���H�H��r)H��H��t=A�tH��L���[i��H��L������I��L9��S���H��[]A\A]A^A_�@H�����H�=��!1����f.�H�D$H�2H��HǀH�$�RH�$H�D$H��두�ff.�@��H���������UH����SH��I��H��H��fE1�H���EI��H��I��A�у�`I��A��?<`tuH��@H���i��I�J��H�L��r(L��H�H��u&�}tH��H���Eh��H��H�����H��1�[]Ð��u�u�H�����H�=��!1���I�J��XH�L���s���L��f�BH��b����AUATUSH��H��H�4ZL� M��$I��$M����H��@H���h��H����H���������f1�H�H��H��H��H��H����?H���H�H��rrH��H�H��u*�}tH��H���Ig��H��H��H��[]A\A]���@��u�u�H�����H�=��!1���IDŽ$I�uA�UM��$H��[]A\A]�f���AVAUATUSH�H��������H� �YH��L�(M��M��M����A�|$�I��$@H���g��H����H���������f1�H�H��H��H��H��H����?H���H�H��r@H��H��t@A�|$tH��L���%f��H��L��[]A\A]A^���f�H�����H�E[]A\A]A^�H����H�=��!1���f�IDžI�6H��A�VM���f���H����@����AUATUSH��H��H���YL� M��$I��$M����H�����������I��H��fE1�H���E��`I��H��I��A��I��A��?<`��H��@H���;f��I�J��H�L��r(L��H��t3�}tH��H���d��H��H���o��H��1�[]A\A]�f�1��DH����H�=��!1��r�f�IDŽ$I�uH��A�UM��$��I�J��XH�L���F���L��f�BH��5���ff.�@��H����@����AUATUSH��H��H���YL� M��$I��$M����H�����������I��H��fE1�H���E��`I��H��I��A��I��A��?<`��H��@H����d��I�J��H�L��r(L��H��t3�}tH��H���c��H��H�����H��1�[]A\A]�f�1��DH���0�H�=5�!1��
�f�IDŽ$I�uH��A�UM��$��I�J��XH�L���F���L��f�BH��5���ff.�@��H����@����AUATUSH��H��H�=�YL� M��$I��$M����H�����������I��H��fE1�H���E��`I��H��I��A��I��A��?<`��H��@H���{c��I�J��H�L��r^L��H��tc�}tH��H���:b��H��H��H��[]A\A]���D��IDŽ$I�uH��A�UM��$H��[]A\A]�fDH����H�=��!1���f�I�J��XH�L���>���L��f�BH��-������AVAUATUH��SH����H��@����H��YL�(M��M��M����H�����������I��H��fE1�H��A�D$��`I��H��I��A��I��A��?<`��I��$@H���b��I�J��H�L��r.L��H����A�|$tH��L����`��H��L���G��H����@����H��YL� M��$I��$M����H�����������I��H��fE1�H���C��`I��H��I��A��I��A��?<`�H��@H���Sa��I�J��H�L��r)L��H��EtB�{tH��H���`��H��H�����[1�]A\A]A^�H����H�=��!1��	�f�H����H�=��!1��z	�f.�IDžI�6H��A�VM�������IDŽ$I�uH��A�UM��$�n���@I�J��XH�L���?���L��f�BH��.����I�J��XH�L������L��f�BH��������H����@����AUATUSH��H��H�M�YL� M��$I��$M����H��@H����_��H����H���������f1�H�H��H��H��H��H����?H���H�H��r(H��H��t;�}tH��H���b^��H��H������H��1�[]A\A]�f.�1��DH�����H�=��!1����f�IDŽ$I�uH��A�UM��$�ff.�@��H����@����AUATUSH��H��H�-�YL� M��$I��$M����H��@H���^��H����H���������f1�H�H��H��H��H��H����?H���H�H��r^H��H��tc�}tH��H���B]��H��H��H��[]A\A]���D��IDŽ$I�uH��A�UM��$H��[]A\A]�fDH���
�H�=��!1���f.���H��H��� ��1�H���f���AUATUSH��H�_H��������H���YL� M��$I��$M����H��@H���j]��H����H���������f1�H�H��H��H��H��H����?H���H�H��r(H��H��t3�}tH��H���\��H��H���w��H��1�[]A\A]�f.�H����H�=��!1��z�f.�IDŽ$I�uH��A�UM��$�ff.�@��AVAUATUH��SH����H��@����H���YL�(M��M��M���jI��$@H���J\��H����H���������f1�H�H��H��H��H��H����?H���H�H��r.H��H����A�|$tH��L����Z��H��L���Q��H����@����H��YL� M��$I��$M����H��@H���[��H����H���������f1�H�H��H��H��H��H����?H���H�H��r)H��H��EtD�{tH��H���3Z��H��H�����[1�]A\A]A^�DH����
�H�=��!1���f�H���
�H�=��!1���f.�IDžI�6H��A�VM������IDŽ$I�uH��A�UM��$�l���@��AVAUATUH��SH����H��@����H���YL�(M��M��M����H�����������I��H��fE1�H��A�D$��`I��H��I��A��I��A��?<`��I��$@H���	Z��I�J��H�L��r.L��H����A�|$tH��L����X��H��L���7��H����@����H��YL� M��$I��$M����H��@H���Y��H����H���������f1�H�H��H��H��H��H����?H���H�H��r)H��H��EtJ�{tH��H���X��H��H�����[1�]A\A]A^�H����H�=��!1���f.�H����H�=��!1��z�f.�IDžI�6H��A�VM������IDŽ$I�uH��A�UM��$�f���@I�J��XH�L���O���L��f�BH��>������AVAUATUH��SH�_H��������H�|�YL�(M��M��M���JI��$@H���W��H����H���������f1�H�H��H��H��H��H����?H���H�H��r.H��H����A�|$tH��L���V��H��L�����H�]H��������H���YL� M��$I��$M����H��@H���IW��H����H���������f1�H�H��H��H��H��H����?H���H�H��r(H��H��t*�}tH��H����U��H��H���V��[1�]A\A]A^�H����H�=��!1��b��f�IDžI�6H��A�VM�������IDŽ$I�uH��A�UM��$����AWAVAUATUH��SH��fH�=�XffH���L� I�\$0H��tH�[ H���H��!H��H�E�H�H��������H�Z�YL�0M��M��M���8I��@H����U��H����H���������f1�H�H��H��H��H��H����?H���H�H��r-H��H����A�}tH��L���lT��H��L������H��tdH�>�!H�E�i��H�7�!H�E�\cH�2�!L��H�E�Y���H�/�!H�EH��[]A\A]A^A_��H���H�H��u(��h���cH��L��[]A\A]A^A_�������������DH���x�H�=}�!1��Z��f.�IdžI�7H��A�WM������ff.�@��ATI��UH��SH��0dH�%(H�D$(1��i��@ �<H�H���YL�d$H�l$ H�l$H�H��)��H�,$H�D$H��H�D$L��H�����H��H���x��L��H�D$(dH3%(u	H��0[]A\���SH��HLJ@H���H��tH��H�5���v��H���H��H�5�����`�����H��1�[�����AWAVAUATUH��SH��H��8H�>dH�%(H�D$(1�H����H��t
@���8�������bH��!Hc�H�>���0H��0��H�[ H� ��H��������H�;�YL� M��$I��$M���	H�����������I��H��fE1�H���E��`I��H��I��A��I��A��?<`��H��@H���yR��I�J��H�L��r5L��H���X�}tH��H���4Q��H��H�����f�H�D$(dH3%(�H��8[]A\A]A^A_�DH���d�������H���
��H�;H���������������L�cM����A����H�
�YL�0M��M��M����I��@L���Q��L��A��H���������f1�H�H��H��H��H��H����?H���H�H���]H��H�A�$��A�}tL��L���P��L��L��芿��H�;�������H�5B�!��Hc�H�>��fD1�H���?����H�{H��t@��u���H�{H�������@����������{���L���P�H�=U�!1��2��f�H��t+��u&�� tH���H��t@��u�w��H�{H��t@��u�\�H�{H��tH��H�5���H�{@H��tH��H�5a���H���>H������,H�{ H��tH�t1�H�5����H�{(H��tH��H�5�����>�H���H����������f��������� �"H��H����H���T���H�,�H�;H��t@��u�}�H��H9�u��/�������H���=H�{H��t@��u�A�H���H��t@��u�*�H�{0H��tH��H�5���r�H���<����DH�{H��t@��u���H�{H�����������f.�H�� �7�H��I���,���H�{H��tH�t1�H�5���V��M���M���H�CA�V9���9�������.���fDH���`�1�H����H�5��H���F(��U���������H��
H����I��M������I���������E1�J�,�H����@����H�:�YH�H��L��H����I��@H���M��H����f1�H�H��I��H��H��H����?H���H�H��r.H��H��E�A�tH��L���UL��H��L���ʻ��I��M9��M��������H�CH������H�8H��t@��u	�0�H�CH�x H��t@��u	��H�CH�xXH��t@��u	��H�CH���H��t@��u	���H�CH���H��t@��u	���H�CH�xxH��t@��u	��H�CH���H��t@��u	��H�CH���H���C������fDH�CH�P�H����H�k �uH�k H������H�C�@A@��H�XH�H�����f�H�|H��t@��u��H��H�C�H���u����������?���
@���?�����H��H;�X�@�H;�`��?�H���������H��H��H��H��H��H��H)���?�L��@E1�M��tM�I���@H��H9���?�H�PL9���?�J�H��I�<�H�H�I H9�s�H9��w?�H�4H��I�<�H�H�I H9���H��H9�r��O?�IdžI�7L��A�WM��H�;���������H�D$$E1�I���������H�D$��@L�%ZI�<$�nH�{ ��I�<$�CA9������H�S D��L�$�M����A����H���YH�H��L��H����I��@L���;J��L��A��f1�H�0H��I��H��H��H����?H���H�H��r/H��H�A�$��A�tL��L����H��L��L���J���A��H���N������H�;H�� �:��@� ���H�k H���u���H�CH���h���H����^���L�cH� uL�cH������H�{�t�������M�l��*A�tH��L���0H��H��L��襷��I��M9������I�,$H��t�@��u�H�j�YH�H��L��H����I��@H����H��H����f1�H�0H���������H��H��H��H����?H���H�H���x���H��H��E�J���H���D��H�=I�!1��&��L�cH�[�c���H�5��H���z"����H���
��H�=�!1�����H�|$�D$�!��D$���H�|$�^����I��H�����L�����H�=��!1����H�{H�������H��H�5���\����H�D$H�2H��HǀH�T$�RH�T$H�D$H���Y���H�D$H�2L��HǀH�T$�RH�T$H�D$H�����H�@����H�{H�[ ����H�;H�� ���@��H������������H���K������H�D$H�2H��HǀH�T$�RH�T$H�D$H�������=�H����H�=��!1����I�J��XH�L���G�L��f�BH��6�IDŽ$I�uH��A�UM��$�j�H��H�ھ1�H�=��!�!����AWAVAUI��ATI��UH��SH��8H��ZdH�%(H�D$(1�H�;���O��@ ��:�H��u(H�;tzH�D$(dH3%(uyH��8[]A\A]A^A_�@��u�H�S�YL�l$L�d$L�0H�D$M��I������H��H���;�M���f�H�|$����m����H�|$���w������ff.����AWAVAUATUSH��dH�%(H�D$x1��v��I���~��D$8���A�Ff�L�t$@�ƃ��A�F@��I��@��D$H@�t$?D$XD$hH���oH�8�eL��E1�J�T�H�2�ZL�j(��H�4$��Hc�L�I9���H�\$�c�H�D$PL�l$`M���dA���ZL������1�L��H�D$���M�eH�D$A��H��tL�����I����I�u�� tH�D$hA��L��I���������H��f1�I��H�9H��H��H��A��H��A��?H�THL��sH���L��sH�D$p�U����t2H��t-H�T$@H�5j��L��H�D$H�L$L�l$`���H�D$H�L$�Et;H�H��L��s*H���L��rH�T$@H�5h���L��L�l$`�[��H��tL�����L,$L9l$�<L�����1�L��H����L��H��蜖�����|���I�EH�ƒ�H��u�H%���H�D$XH��t-L����H���!�H��H�T�XH�81����D$HE1�M��t
A����H���1�L��������D8��<���L����H���1�L��I�����L���!H�
�!��H��!LE�M����H���XM��H���!H�81��d��D$H����f.�H�T$@H�5���L����������I��@I��H��tpL;8skH�l$@�����I�EH�����H��DE�����fDA���b���I�EH�ƒ�H���N�����H�
�3%H��!HD��5���f��t$H����I��HL�t$(I�^xH�D$0H�L�x�M��H9�txI�m0H��u�UDH�mL���t��H��t?1�H��I����Et�H���$��H���!�H��H�~�XH�81��$���f�A�E�]I�E8L�h�H9�u�H�ÐH9\$0�g���L�t$(I���I��XH�8�iH�H9�u�A�����gA�F��<��I��hH�T$hH9���5�I��XH�T$pH9���5�A����upI��x1�H��t@H�@H��H��u�M���M��xI��I���K�M�VXH�T$XH�H�L�H9��5�M�K�H�H�H9��5��D$?�|$8������A�F���	�A�F���H�\$xdH3%(�!H�Ĉ[]A\A]A^A_�I�UE�eM�u(D��Mc�K�4H�L$I9��H�T$M��1�E1��D$�$DL�����1�L��H�D$ �
�I�A��L�D$ ��H�������H���������H��H��H��H��H��I�D���?H���H��sH�PHH����DE�H���H��s�D$�$M��tL������L|$L;|$�U���H�|$(A�E�Gu�u�$������E���A��D!Ȅ���A�U9��l����Z3�@1���@A�F��<����������c�u�I���I��pM��I���H�DI���M��xL�M��M���H�I�NPI�~XH�M�~HL�L�L�H�H�I)�I���L�I�hI��I��H;D$P�Q���H�H��XH�J�H���!L�I�L�N��H�H�81����H�T$PI��h1�I��H�=��!I��I��IvHI+��I+�pI+�I+��I+��I+�xI+�I+��I+vPI+vX���H���������L���Hl$H9l$��1���H��H��H��H��H��I��ŸH��s�H�����H�&�!�H��H��XH�81��������1�H�k.%L��H�=��!1��*��f.���H9���AWAVI��AUI��ATI��USH��H���B���u;H���s��1�H��I���v�H�+��M��tH���3��H��u
L�L9�tRH��u�H���8��1�H��H���;�H���t��tH��L���3�����t/�H��t�H��L�����L9�u�H��1�[]A\A]A^A_�f�H��H�5���H���n����@1��DAWAVL��AUATUSH��H��H��HLJ�HLJ0HLJ�HLJPHLJ��G�L��8I����������E1�H������ ���-���� Hc�H�,�H��$�WH�EH��H�߃� HE�I��H��@�2
���f1�H��H�uI��H��H����H��H��H��H!���H��8H��L)�L�H=���H���Z���H����I���F���fD���� Hc�H�4�H��$tH�H�߃� HE�H��@��H��H������ ��u�H��H���H�0H���H����$H��(H���� �f�H��H���H�(H���H����$H��(H���� H��$�����H��H���p���L���$��H��H��[]A\A]A^A_��=ff.��Gu*H���H��XH�8uH�H9�u��f.�AUATUSH��H���.��A���C�ƒ������ �&.�� �1��C����C�t"���H���7����C��H����0H���H��XH�8uAH�H9�u�1���j��c�H��D��[]A\A]���@���C�i���f��CuJH�k(L����DH��H���H�}`u�H�ŐL9�u�Ct�H���<<������H���X;���fDH���;���6���H���;��������USH��H���o�z����K��@��H�H��H��[]���ff.�@��USH������hH��H���2����K��@��H�H��H��[]����������L�OH9���H)�I��tLH�wI9�I��H��LG�M)��M�H9�u�L��xH��xH9�I��H��HG�I)��M�H9�u߅�t��DH�H9Gv�UH��XSH��H������t4�Cu.�\��tH���H�8u+H�H9�u�H���UH���[]��H������H�H9Cw���DH)��I1�H�x�U���@ATI��H��USH�����H��H��1����H��1�L�������t�[]A\���H��t'H�H�YH�8t"SH������H��[H�����������1��e��D��AUH���H��XATUSH��H��L� M����H�H9�u�H����N��H��@Hǃ�H��tNH�8�e1��f�H;(�OL�l�H��PH��I�} �]9��L�����H��@H��u�L���1�H���HǃXHǃ`Hǃ�Hǃ�Hǃ8Hǃ@Hǃ�Hǃ�HǃXHǃ`Hǃ�Hǃ��q��H����e��H��H��tf�H����$��H��H��u�H��H��tH������H��H��u�Hǃ(H���Hǃ0�*�H��H��[]A\A]����I������H�=)�!1��r��f���H�����1�H���ff.����ATUSL�H��L�ƃ�H��w���H��.��(���(�H�%�!Hc�H�>���H�CH�P�H�����H�k uH�k H��tDH�SL�bM��t7I������B@�H��A��H�C�@@t�Cu
H���-��D�H������uH�H�у�H��tp��th����H�H�CH�C H��x��H��H�H��x�f�H��H��H�S�H�H9�u�f1�H�f�@H�@H�@01�[]A\ÐH���ؾ���H� �K���H�{�j���=���DH�{�g�H���?$H��藾�H�{ ���K�6��H�{(H��t��#H�{@H��t1�H�5����Q�H�{@��H���Pu��H����u��H���u��H�@�����H�{P������DH�������H�{H�������������f�H���8���k���H���H��[���A����K���H�{H���>����a���4���@A��@�#�����f�H�k 1�H������H�{8�)�����@A���I���4H�{0H��t��H���Ft��H����"H���t��H���nt�����f�H���"���H�CH�������H���A��H�C H��xI��H�SH�L��
f.�H��H��H�S�H�H9�u�����H�k H���+���I��H������H����������H�L�cH�k H��x��H��H�H��x�H��H��H�S�H�H9�u��K����軵����H�{譵����H�{�ߢ���H����������ff.����AWAVAUATUSH���y��HH��H��������H���H�-�Z��H�t �H��H�����H���H�u����H���z�����H���0���K���D$�C� �O�� �1��C���H��@H����H�8��E1�DJ�T�L�*D�bH�j(A��D��Mc�I�L9�r �pf�M��tH��胹�L�I9�vKH�����1�H��I����H�����t�H��袻�H��H���g�t�H�E�f�H��@I��H��t	L;0�W����1�����cߋ|$��H���V���H����ڳ�Hǃ�ǃ��H��[]A\A]A^A_�H���8/���KH��[]A\A]A^A_��#���H��@H����H�8��AWAVAUE1�ATI��USH��fDJ�T�L�2�jH�Z(A����Hc�H�H9�r�[M��tH���3��L�H9�v;H���C��1�H��I���F��t�H���Y��H��L����t�H�뱐I��$@I��H��t	L;(�n���H��[]A\A]A^A_��fDAWAVAUATUSH��XL�~`M����H�<�Xf�8��	D���H�t$(H��H�|$E�����D$H�D$D�D$LA�1�A�WM��fA�I�(i�����A�g�H���������H�<$L�L$8������H��H��H���.��?t��H����H�H�H�����H��I	�M��H�D5?���D$H���D$@I��H�D$ I��M���H��H�$H��H��H)�H���
H�$H�D$ H��v8��I�� I���(H�D$ L�mI�����H�$
H��H9l$ u�H�D$(H�xh��Hc\$@�D$�fAGI�GHX(H�D$H��xt������H�t$(I�W8�|$@|$H�FPH�J�H9¸HE�H�F`A�wH��9�������H�T$(�t$HLcl$HZ8H��Lj@����SH�\$(|$DH�SHI�W�T$DL�{H����I��H������H�\$H�t$(H���hx��H���H��XH�8�H�H9�u�H�D$�����tgH�|$H���H��tVH���H���H�pH���H�$H)�H��H+�H+��H+GPHi�fHk�(Hi��H�rH�B H�J(H�\$H���".��H��D��HH�C`H��0H�H�@E��u-H�PH�H@H����H�HH�T$H�@@HǂxH�H9�u��1��%��H�D$�`�H���Xf�8��H�D$�����t8H���H��t,�Cf��f/���H�D$H��xt
���@H�D$(H�xH������M�'L�4$H�l$0L��H���������D�l$I��H����1�L������@����I������}���T���,L��A��f1�H�H���������H��H��H��H����?H�L�HH�H��sH��H�� L�����M��u=L���u��H�|$L���8��x��M�H��H���O���D�l$H�l$0���A��u�I�H�Ѓ�H��t�L��H�T$���H�|$L�����t�H�T$��tH�D$L��H���H����H���L��1����I�G0L��1�I�I�FM�w0M��^����i��كD$@H��H��������R������A��M�H��H��������7���fDH�D$�@@���L��1�A���C��I�G0L��1�I�I�FM�w0M��������H��H���0�������H���H���Q����@f/�!�>���������,���H��L�4$H�l$0E1�H���������L��H��H��A��f�1�L�����@����I���������������L��A��f1�H�H���������H��H��H��H����?H�L�HH�H��sH��H�� L������M����L���1��H�|$L������&@D��I�H��H���F���D�d$H�l$0���D��A��I�H��H���������H�D$�@@���L��1�A�����I�G0L��1�I�I�FM�w0I��3����>��D��H��H��������t���f.�1�H��X[]A\A]A^A_��A������I�H�D$��H������L���1��H�|$L���������H�D$tH�D$L��H���H����V���L��1�����I�G0L��1�I�I�FM�w0I��l����w��D��D$@H��H�������fDH�Rx��t$HI�WA�WL�{xH�\$H�x�������5������I�G���L�T$I��hH���#���D�\$LE������H��A��I��hI�w@D�\$LH�rH�H�T$(H)��1�H���I��I�G(I�GA�fA�OI�G0I���I�WM������Ao��H�\$8�Ao��[�Ao�c �Ao�k0�Ao�(s@�Ao�8{P�Ao�HK`�Ao�XSp�Ao�h���Ao�x���Ao�����Ao�����Ao��)<$���i��������H��H�rH��u�H�J����DH���;�������f�����$����$f/�v�\��XC�C�C��������f���@AWI��AVI��H���������AUI��M��ATM��USH��H�D$H��H���H�t$HH�L$H��H�D$Pf�T$ZH�|$���L$ZLt$I��M���
A��t�I�H�D$H�у�H��ȈH���;�H��`u�����!�M��tA��uH��t��u�L���h��H�\$HH�\$0H��t�(H=���HL$H�L$0H�D$0H�XhH9X`��M��t
A����D$|�D$xL��L�t$hf1�L�|$pH�D$@H�D$0H�XHH���EH�k0H���8H�D$@L�t$h1�H��L�|$pL� ����I�H�EA�$D���H�C0��fD9���fD9�sH�|$H���xL�d$H�|$PH��L��I��ĀI��$h�ޠ��A�D$�D$0�D$0��`<`�
�T$xf�k���T����D$|����D$xA�F�;���I���H�����L��萮�H�l$HH�\$0�D$|�D$xH9�����H�D$H��L��H��(H)�H�9��8��8�H��H�����D$|HD�H�\$0���@H�D$0H�|$@H�X`�}%��1��f�sL��H�{(�SL��$�i�����H�D$�c�H�|$ ������H��I��I��B�&��?t��H����H�H¸H��H��I	�L��I�D4?D��1�H���D$\I��H�D$8I��M���ML��H�t$ H��H��L)�H���
H�D$ H�D$8H��v9��L�� H���(H�D$8M�uI�����H�D$ 
I��L9l$8u�H�D$0H�xh����H�S�|$\�fCHc�HB(H�D$H��xt�����%H�|$@��#��H�\$0H�C`f�xtH�SHH�PH�CHH�\$0H�P8H�KPH�B�H9ʺHD�H�C`H;Ch�����H9\$HL�t$hL�|$p���hfDL�#H�D$L�l$`M��L�|$ A��I��H����fD1�L������A����I���������������L��A��f1�H�H�D$H��H��H��H����?H�t�HH�>H��s���H��H��H!�H�� L�����M����L���j��H�|$L���-��t91�L���/��H�C01�L��I�I�GL�{0����ݧ�D$\���M�I��M������L�l$`D������f���A��M�I��M�������f�H�D$�@@��L��1�A�����H�C0L��1�I�I�GL�{0M��C��N���I��M��������|���A������I�H��$���H����L���^��H�|$L���!���)���H��$�����H�D$H�t$PL��H����~������f��H�Ę[]A\A]A^A_�f�H�D$H��L�t$ A��L�d$`M��H��H��A��D1�L�����A����I���������������L��A��f1�H�H�D$H��H��H��H����?H�t�HH�>H��s���H��H��H!�H�� L������M����L���2��H�|$L�����t11�L�����H�C01�L��I�I�FL�s0��襥�D$\D��I�I��M������L�d$`D������D��A��I�I��M�������H�D$�@@���L��1�A���s��H�C0L��1�I�I�FL�s0I������D��I��M��������|���f.�H�|$H���p�h���A�������I�H��$���H�����L�����H�|$L����������H��$�����H�D$H�t$PL��H����3������H9D$H������������f�H�P'H�D$H��H��H��H�������H���@H��?��)�H��H��H��(��������&������L����h���t$|H���-�������o���o��H��$��N�o�V �o�^0�o�(f@�o�8nP�o�Hv`�o�X~p�o�h���o�x���o�����o�����o��)d$ �����H�D$@A��H�H�D$H��H��H��H����?H���XH�H�������H��f�AH������H�-�YH�H��H�AH99u�(H�PH98tH��H��H��u��H�QH������@H��H�����f���AWAVAUATUH��SH��H��(dH�%(H�D$1�H�H�ƒ�H��t*@���������H�
`�!Hc�H�>��fD�����H�
��!Hc�H�>��fDH�kH����L�eM��tZA��uTL�����1�L��I�����I�,$��M��tL���ˡ�H��H�ku!H�EI��H��t�uH���yf��H�kI�$�L�e M��tgA��uaL��詺�1�L��H�����M�,$A��H��tL���g��H�kI��u-H�E H��H��t�uH���f��H�SH�E H��f.�L�eXM��tgA��uaL���9��1�L��H���<��M�,$A��H��tL����H�kI��u-H�EXH��H��t�uH���e��H�SH�EXH��f.�L���M��tdA��u^L���ƹ�1�L��H������M�,$A��H��tL��脠�H�kI��u*H���H��H��t�uH���/e��H�SH���H�ՐL���M��tdA��u^L���V��1�L��H���Y��M�,$A��H��tL�����H�kI��u*H���H��H��t�uH���d��H�SH���H�ՐL�exM��tgA��uaL�����1�L��H������M�,$A��H��tL��觟�H�kI��u-H�ExH��H��t�uH���Ud��H�SH�ExH��f.�H���H��t\@��uVH���v��1�H��I���y��L�eA��M��tH���4��I��u&H�kH���H��t�uH����c��H���H�kH��u'H�D$dH3%(��H��([]A\A]A^A_�@@��u�H�����1�H��I������L�eA��M��tH��訞�I��u�H�CH��t�uH���]c��H�C��H���w�����tH������H�H�ƒ������H�
h�!Hc�H�>��fDH�kH��tW@��uQH���I��1�H��I���L��L�eA��M��tH�����I��u!H�CH��t�uH���b��H�C�H�kH������@�������H�����1�H��I������L�eA��M��tH��蟝�I�������H�CH��t�uH���Pb��H�C�o����� tbL���M��tVA��uPL���x��1�L��I���{��M�,$A��M��tL���6��I��u H���H��t�uH����a��H����L�cM��tWA��uQL�����1�L��I�����M�,$A��M��tL���ל�I��u!H�CH��t�uH���a��H�C�H�{H��tH��H��o��H�5&o���q�H�{8H��tH��H�5�q���وH�{@H��tH��H�5�p���H�@��H�{H���E1�fDH�CPN�4�N�,�M��t[A��uUL���=��1�L��H�$�?��M�}H�$A��H��tL����I��u LsPI�H��t�uH���`��I�DH�CHI��H��I9��{���H���#����H�D$E1�H�D$�f�L�5��YI�>��H�{ �v��I�>�\A9��|H�S D��L�4�L�,�M��t[A��uUL���]��1�L��H�$�_��M�}H�$A��H��tL�����I��u Ls I�H��t�uH����_��I�DA��H���T���L���H�;H�� �@��@�\����%�H=�/L�cM��tVA��uPL��踳�1�L��I�����M�,$A��M��tL���v��I��u H�CH��t�uH���+_��H�C�H�{ �p��H�{0H��tH��H�$m��H�5�l����H�{8H������H��H�5Ao���l������H�������fDH�CH�P�H������L�k �uL�k M�������H�C�@A@�[L�`I�$H���������I�lH�EH��t�uH���V^��I��H�EI�D$�H���u��f���fD����H�kH���J���@���@���H���`��1�H��I���c��L�eA��M��tH�����H�CH��I��u1�H��t���H��H�CH� ���H9�����HS H)�H�S ����DH��H�V^��H�5�^��H��臡H�kH�������@�������H��踱�1�H��I�����L�eA��M��tH���v��I���d���H�CH��t�uH���']��H�C�F���fDH�kH��tO@��uIH���Q��1�H��I���T��L�eA��M��tH�����I��uH�CH��t�uH����\��H�CH�kH�������4���fDL�k�� uL�kH���3����H���ӱ�H�;H��H�� ���x�FH9�r
H� �61��~H�{�w��9��g�����M�t�M�&M��tXA��uRL���r��1�L��H�$�t��M�<$H�$A��H��tL���+��I��uI�H��t�uH����[��I�fD��H���m���u���H�;H�� �Y��@�j����%0H=0��H�����H��H���LxH9������H� �����H����w�������H���y���f�����H��
H�k��H���Y���L�t�@L�eM��tOA��uIL���a��1�L��I���d��M�,$A��M��tL�����I��uH�EH��t�uH����Z��H�EH��L9�u����f�H�{ �W��H�{ �>l��H�{(H��tH��H�5Ki���&�H���H�������@�������H���Į�1�H��I������L�eA��M��tH��肕�I���p���H���H��t�uH���0Z��H����L���H��輖��H�{�;���H�kH���$H� L��I���9�����@H�|$�$�ө�$���H�|$���j���f�H�CH�k�i����� ��H��L�s��H��tpE1�@O�,�M��tWA��uQL��蹭�1�L��H�$���M�}H�$A��H��tL���r��I��uK��H��t�uH���'Y��K��I��I9�|�H���_��H��H����]�H9��#���H���]�����H���i�����fDH�{�o�����f.�H�k H������@���
���H�����1�H��I������L�eA��M��tH��诓�I������H�C H��t�uH���`X��H�C ����H�{H������H��H�Yf��H�5�e���=����H�@ H���C�L����9�H�kH�����L�s �t���H�;H�� 菽�@����H����W��H������L��H�����������"��f�AWAVAUATUH��SH���dH�%(H��$�1��G��HDžx�EHDžp�ǃ�@�������E@�|$?�@�^H�ExH�$H��HH�D$H�$L�d$I��H�H�s��EH9��H��8H�C�H�KH�C(�uH��@H�P8�HH�B�H9�u�H����H�ÐL9�u�H�=�R��1����H�}(�EH�|$0H���H�|$�@���|$?H�\$0L�d$uUH��H��H�Ð���I9�u�EuQH��$�dH3%(�H���[]A\A]A^A_�@H��H�����H�{`u�H�ÐI9�u�Et�H���d
���f�H�CH�C�H�C(H���0T������H��pH����L��HH�l$L�t$L�%��XH��HD�H�ExH�$I��I�m0I�$�H��諓�H�����I�MI�E�I��L��H�A�L9�t�H�H8H�H��H�A�L9�u�E1�H�ٺH��L�����M�mM�mH��tGL��I�<�L���H�H�r8f�zH�B8L�j@H�pI�utI�E�H�BI�U�H��H��H9�u�L��I�Ő���M9��*���H�l$����K���G���fD��H�$H�|$�EH�1H�F�H9��`�H�P8�HH�B�H9�u�H9��EH�AH��8H�AH���H�A�H9�u��������H�����H�\$@1�H��H���HDž�H���HDžx)�������H�H�׉�HDž�HDžpH��)���xH��x���H�H����HDžxHDžhH��)���p���H�H�׉�HDžpHDž`H��)���h���H��H���H�H�|$H�o��H�8���H��H��`Y�H�D$@DŽ$��Į�H��_YH�޿谮�H�E(L�l$(H�D$0H���H�D$H���H�D$H��XH�D$ fDH�D$H�T$ H�x t
H�xH98�RH�H9�u�L�l$(H�$L�cM��u� H��8I��tI�|$ ���I�D$8H9�u�H�ÐH;\$u�1�H�5�_Y���1ҿH�5,_Y���M�H�,$I�E�D$L�x�L9��+f�I�E�A�_M�w(A�g���Hc�L�I9���H��L��I���+H��H����M��tH���1��L�H9���H���=��1�H��I���@��H���H��t�H��`u�H����f1�H�H���������H��H��H��H����?H��H�|HH��sA�OH���H��sA�OA�G�H���H�<$H���l���I����M9}�� D$��I�G8L�x�L9�����I�ŐL;l$�����H�,$H������H����`��H����T��H���\��eH�EpH��@H���H�@ H�Hǀp���H�@�H9�uڋ����tH���H��tH��hH+P0H�P0�e�������Ao���Ao���Ao��Ao��Ao�(A��Ao�8A�(�Ao�H�Ao�XA�8�Ao�h�Ao�xA�H�Ao���Ao��A�X�Ao��A�hA�xA��A��A��A��A��A���_���fDL�l$0I�EhI9E`��L�`(H��XI��H��H���������A��H��H��H!�H��H����H��H����H��H��H��H)�I�� M���
M����@H��I��
I9�tHH��@H��H#t�E�L��L��H��������u�I� ���I�ŐL9l$�8������I� ����I�EhI�MPH�P@H�B�H9ʺHD�I�Eh�DE�H��L��L��H���k�����2����H���H�������H��hH�P0���1����襹�D��H���YH�H��teUSH��H��H��H��~(�1ҹH��H��������t�H��[]�t�H��1��H��H�������t�H��[]���AVI��AUATI��USH���*��������M����M��tdL���,��H��H���qL��L�����I��H����L�����I����H��L��H�������t�[L��]A\A]A^�D1�H��A��pI��H��t�L��H������[L��]A\A]A^ÐL��H��[]A\A]A^�=D��H���+��t�L��L������H�������I���Q���ff.���USH��H��H��H��H�֌XH�莊�H��趟�H��H��H�����H��tH��[]�@��p����1���D��USH��H��x.H��H���f��H��H��H���h���H��tH��[]�@�p��H�\�XH��y!H�5��#H�81����@��1����D��ATH��UH��H��SA��1�H�E����I	�t:I��H������u7H��XM��H��H��I�����H�5M�!H�81����[H��]A\����w��ff.�@AWAVAUATUSH��H��(�G�EL���M���I�(H��tjI���������1�1��DH�$H��I;0sEI�|�H��t�H�H��t�u���f1�H��I��H�I��H��I��J���H��s�H���H��0L�,�I��Ș�L���L��I��L�����M����H�hH���M���fH����H��@HF��H��H�`H��H��I��L+�8H����f��H*��
��X��� �Y�f/����Y̋X�H,�f/���H,�L���XD�[L��I9�LB�H�Z�XA��1�L�@(H�0H��H��H�I9�u�H9�HB�1�L9�sL��H)�H��
�
�H��H��H��H��	H��pH��hH��XH��hu	M9���E����H��`H��pH9�s��HH9�s��H薲�H��(��1�[]A\A]A^A_���@�\��Y̊X�H,�H��?f/�������\��H,�H��?���DE�����%��XH���vf���H*�H���<f��H*��Y�f/��
�H,��h�X�Y�f/����H,��Y�H9�HB�H��`f/�f(����H,�H��p���@H�ƒ�f�H��H	��H*��X����f.�蛙����fD�K���H��L��8H��I���������H�D$�E1�H����� �������� H�H�,�H��$��H�EH��H�߃� HE�I��H��@�����f1�H��H�uI��H��H����H��H��H��H��H!���H��8H��L)�L�H=����[���H��tcI���K���H���H��H�*H���H����$H��H��(�� H��$�8���H��H������@H�|$L�cx���H��H�c�H�D$I�$L�p�L9����M�~(I��H���������I#nHA��H��H����I��H��H��t:L��@@��t$H�H��H��H�$�� HE�H��@����H�$H��(H��u�L��H��H��L)�M���
M�~PI���H�$�I���I#t8L�퐨t'H�UH��H��H�D$�� HE�H��@�Z��H�D$H��(H��u�I��
I��L;,$u�I�F8L�p�L9��
���H��H��tI�� ������� H�H�4�H��$t�H�H�߃� HE�H��@����H��H��u�H�|$I�Đ���L9d$�����L���M�����Hǃ0A�1��T����H���H��H�2H���H����$H��H��(�� �Q����H��*���@�\��H,�H��?�U���D�\��H,�H��?����D�\��H,�H��?���DH��H��f�H���H	��H*��X�����H��H��f��H���H	��H*��X��r����H���H+�PH���9�����HH��`H��p���fDAWAVAUATUH��SH��H���s�A���o���C� ����� �1��C衭��C�u9H�}H�&1��肭�c�H��D��[]A\A]A^A_阂����XH�}H��H��8L���E1�H�D$H��H���7�� �������� H�L�4�I��$t�I�L��H�߃� IE�I��H��@�s��A��M��H���������H��fE1��I�0H��H����H��H��H��H!���H��8H+D$L�I9��Y���H�����C����H���������H���H��XH�8��H�H9�u����H���H��L�2H���H����$H��H��(�� ����H���8������H�����H���|����CtH�����H�����(����H�EH���C����Ր�CuzL�s(L���M��L��H�������uL9�t(I�ŐM9�u�C���H���������DH��pu��@L��H�����I�~`u�I�ƐM9�u��H�����y���AWAVI��AUATUSH��H��8H��dH�%(H�D$(1�H���|H�EH���H��H��L���=��I�FHH��p�UH�EH��H)�H9ѺI�nHHF�H��p�H�t$(dH34%(�H��8[]A\A]A^A_�fD�=�NY��E1�1�A������"������H�����L���fE1�M��I)���I��$H���δ��2��M��������N��H��H����I��$M�l$H�D$H��@H���pH�0H����I��1��DH�JL9�swI�H��H�|�L;o(w�����I����f�H�|$ ���|p�uL�d$ �X���L����葁�L��H������w��L)��.��������H��H�PH9�rBH����H�rH�H��H��@H��H�L$H�T$�^��H�T$H�L$H�HH�H�0L)�H��H��H��=��I��J��H�4H�|�8��H��@J�,�H�H��XH��tI9�sL��XH�D$H;�`vH��`L�e I�,$H��H�~����H��@�1�E1�H�T$襰�H�T$H��;���1�E1���������a��藍��AWAVAUATUSH��dH�%(H��$1����
�����G��	�H��@�GH��t=H�:t7��I����ue�(taH�_(H���H�{H��H�ÐH9�u��H��$dH3%(���
H��[]A\A]A^A_�f.��kl�D$,�Ҹ�A�G� �b��� ��1��A�G����A�GtyI��8@��uFA��HA�OA�W��������DALJHA�Gt[A�g�1��f����D��A�W�������	�A�GA��HA�W���F��t����OA�Gu��݁��u�A�G���	A�G����	�A�G��tD��DY��E��u���������A�G��	�A�G�t��A�G�ڀ� �I���E�I��@I�hI��I��IGHI���I���1�A���H��tH�A���I���ILJ(ILJ0��trM���I���I�T$I���H���[I���I9���H��f�H)�H�T��I���BB H�B0A�G��%	É1�I�GI�H9���H����f��H*��Y�|X�
x� f/��^�H,�H��|XH9�HG�I���� I���I9�xvFA��H H���/f��H*��Y�|Xf/����H,�H�p|XH9�HG�I����@1��>��A�����tI���H��tH�C����CH��Xf�8��A�G�aA�w����A�G����I��xI��8H��S㥛� A�g�H��H�<H��H��H��H��H�J1�H��
BYI�����t��AA�wI���M�WxI���M��HILJXILJhI��PILJ8I�z���I�J(H��t)I�R�H��u�H��H�BH��u�H�JI�B(A�G@�=I�M9�u�L��1��?���A�G��Z��2H���Xf�8�����	A�����tHI���H��t<�K�L$�
����L$f/���f��C�C�A\���C1���b��A�gߋ|$,�w������A�W�������	�A�WA�GA��H���U���f�	Ä��V���ALJH�؃���D�A�Gu"�ǀuA�G��b��A�G���@A�g����fDI�H�B�L9�������1�f�PH�P8H�B�L9�u�����I�J��o����I��p�rILJpH��L���<��������I��XI�hI�_xI��8I��HA�OH�D$ H�D$0H�D$H��$I���H�D$H�L�p�H9�u�VfDI�F8L�p�H9��?A�F�����	Шt�M�n(H�L$I�FHH���H#H��H��H�8Hǀ8H�Q�H;L$u�A��L�L$0A�f�H���������H��H����I��I��M��t;L��f�A��t'H�uL��L�L$�� HE�I��@H���ȸ�L�L$H��(I��u�L��H��H��L)�M���
H�D$H�h@H�MH��t<M��@��t'I�EL��L��H�L$�� IE�I��@�a��H�L$I��(H��u�I��
H��H;l$u�I�F8L�p�H9������H�ÐH9\$ ��������f�ILJxA��� ����I���H���'f��H*���� �^wX�\��^J�!�X��^�f/��h�H,�H�$wXH9�HB�I�������H����f��H*��Y��!�
�� f/�sh�H,�H��vXH9�HB�I�����DL���������L�������L��������L�������A�G�����\��H,�H��?��\��H,�H��?���DH�ƒ�f�H��H	��H*��X��R���f.�H�Ѓ�f�H��H	��H*��X�����f�H��L�������{����m�����\��Q�����\��H,�H��?�^���D�\��H,�H��?���DL�-�sXH���I�U�8I����}q�I���H���~��H������I���I�������f�H�ƒ�f�H��H	��H*��X����f�H�ƒ�f�H��H	��H*��X�����f������f.���1���f.�L�-)sX�d�8ILJ�dI�U��p�H���p�I���I���I9�����H������I����\�������A�G�y�����@���ff.��ATA��USH���a�H�߉��'���D��H���\����sq��[]A\�ff.����AWM��AVM��AUI��ATUH��SH���=���D�`H���@I�����u1H��H���f1�������I�����D����I�����D�H���J���H����]��D�cH���[]A\A]A^A_�f.���H��xYH�H��t=U��SH��H���k�CH�����H���s]��@�kH��[]���ff.�@��H�����H���f���AVAUATI��US�,��D�h�@H������D�p�@H��H���b���H����\��D�sL��D�m[]A\A]A^����f�USH��(dH�%(H�D$1��Gt$�H�T$dH3%(u[H��([]��H�����v��t��-��u)H��H�=H�$�l$���H����������H���������ff.�@�Gu
�f�SH�����t3H��8���tH���H���f1����H��[����D[�ff.�ATUH��SH����������H�۸H��HD��u���H���l�I��H��t5L���
}�H��f.�1�1�H��H���!�����t�L��[]A\�D��H�������t�H���gl�H��t�I���ff.�f���SH��x#H���.��H��H���C���H��t[�@�cS��H�,hXH��\!H�5s�#H�81��T���@��UH��SH��(dH�%(H�D$1�H�vYH�H��H�D$�w��H��H�(H�PH��H�D$H�D$H�D$H�D$dH3%(uH��([]�觙����������H��ATI��H��US��1�L�����H	�t<H��H���1��u9H�6nXM��H��H��I�����H�5�g!H�81��e���D[H��]A\鴌��J��ff.�@��AUH��ATI��USH��H��I��L��A��H��E����I�������I	�I	�tAI��H��H��蓧�uAH��mXM��M��H��H��H��H�5�r!j�H�81��ų��DH��L��[]A\A]������f���H�EmXSH��j�H���$��H��H���9���H��t[�f��[Q��ff.���H���wH�?�M���H��H��fDAWH��I��AVH��I��AUH�D(E1�ATE1�USH��H��H�$����A�G��H�,�H��L�H�EpH���H�HH��H�x0H��H��L�1�I�Lp1�H�CH�{f�PH�@0�~��H�{�Eg�H�kA�G�H���
�H���P��H�EH�CE����H��H��[]A\A]A^A_�D�b�A�A��A�G�@���H�4$L�����H��I�H��L�H�hA�G��H�������H��H�$�ɦ�H�UH�$H�PE���u���@D���X���d���H�4$I�G(H�9��8��8�H)�H��H��H��H��lXH��H9��sH�����H�,�H�4$L��H���
�L�H�EpH�������I��p�D�L���������I��puA��zH�,�H�4$L��H����L�H�EpH���'���I��p�sA��H�����L���d���teH�,�H�4$L��H���\�L�H�EpH������I��p����H�4$L�����������H�Ep����I�H=�wH��uE��u�&l�fDH��I�����@D���؝���fDH�D$H���C���I��H����H�UH�D$H�P���@H�4$L���\�H�EpH���������f.�I��pH�4$L��ILJpH�T$��H�T$I��pH�Ep����H��H�4$L��H��L�H���H�PhHP`蒫���[���H�4$L��������y�������@AUI��ATI��UH��SH��H�H��H�]�Gu<H��tG�H���
��H�CH�EK�D�H��I�DHH��H��[]A\A]�DH�H=�wH��u��L��L�����H���DH��H��ff.�@AWM��AVI��AUI��ATUH��SH��H���^^�A��f�E ucH��L��L��� ���H���H��L�h�C���v#��tD�����H��H��[]A\A]A^A_�@�H���۩����f��E� u(�Et��H���%������z����9�����׃��E�r��� �����DAWM��AVI��AUI��ATUH��SH��H���~]�A��f�C ��H�߹L��L���<���H�(��H��L�h�E���vW��tRH���������H����f1�H�0H��H��H��H��H����H��H	D�HD���Ԛ�H��H��[]A\A]A^A_�f��H���è��럐�C� u(�C�_����H������J����8��@��׃��C�b���#�����DAUI��ATM��UL��I���������SH��H��L�L$P�L$HI�Q'H��I��H��H��I��tL�¸@I��?D)�A��������f�G u4��uHH��H��H��L���w���H�T$@H�hL�`H�P H��[]A\A]���t�H��H��H��L���c����ʐL��1����H����S�L�h��v��u�H�ǾH�D$荧��H�D$�fD��AWAVAUATUSH��(dH�%(H�D$1�H�����H��I��I��I��H����H���YE1�M��A��H�(H����H��H�t$�!x�H��H��M��j(M��H��AWAVH�t$(�|���H�� H��H���Y����H�L$dH3%(H����H��([]A\A]A^A_�H�1eXH;8�Y����3s�H;<cX�G���H���NV�H��H�=\j!1��=���)����fH�=`XffH�w�H�H�@0H���*��H�h�����L�d$H��L���sH���Hy�1�H�{(H�P���R��r�H��H���ԍ�H�����tL����s�
���fD�Cu������ff.����AVAUATUSH��dH�%(H�D$1�H�G0H������L�hH��H��I��M���v�H��H��E1�UE1�L��L��jH��j���H�� H��H��Y��u#H�L$dH3%(H��ugH��[]A\A]A^�H�l$L��H���prH���8x�1�H�{(H�P���Q���p�H��I���Č�I�����tH���r뎐�;t������@��AVAUI��ATI��UH��SH��dH�%(H�D$1�H��YH�H��thL���u�H��H��E1�AUE1�L��L��jH��j���H�� H��H��Y��uTH�L$dH3%(H����H��[]A\A]A^�fH�=�]XffH��t�H�H�@0H������H�X�o����L�d$H��L���@qH���w�1�H�}(H�P��P���o�H��H��蔋�H�����tL���q�Z���fD�s����̌�ff.��AWM��AVI��AUATI��UH��SH��H��(dH�%(H�D$1�H����A��E@ uE1�H�}A��H�{�YH��L�M����I��L�T$H�4$�t�H��I��I��AW�L��H��AUAVH�t$ �q���H�� L�T$H��H���Y����H�L$dH3%(H����H��([]A\A]A^A_�H�!aXH;8�>����#o�H;,_X�,���L���>R�L��H�=Lf!1��-�������fH�=\XffH�s�H�H�@0H���8��L�P�����H�l$L��H���poH���8u�1�H�{(H�P���N���m�H��I���ĉ�I�����tH���o�
���fD�3q�����ff.�����B@uH��A�(H��1�����H��H�UWXH�5�e!H�81��D��@��H�7H��u�@��u�H��fYH�H���AUATUH��SH��H�����H���Ct�� ugH��@����m�H���I��H��uW�1�A��5��H�L�hH���H���H�H�l�H��H�M��tHH��(H��[]A\A]�DH�GH9r�H��L�,�LD�J�4��ʐ�����o��f�H���~�H�=
K!1���v�f.��ff.�@��H�E^XATUSH��[�H���!q�H��H�����������H�۸H��HD����H�����I��H��t5L���Mk�H��f.�1�1�H��H���a�����t�L��[]A\�D��H�������u��A��f.�H�޿賑�I��H��t��f���H��ATI��H��US��1�L�����H	�t<H��H���A��u>H�F]XM��H��H��I�����H�5�V!H�81��u���D[�]H��A\�T����f.���AUH��ATI��USH��H��I��L��A��H��E����I�������I	�I	�tAI��H��H��裖�uFH��\XM��M��H��H��H��H�5�a!j�H�81��բ��DH���L��[]A\A]�iS��n��@��UH��1�SH����I�H��H���<S�H�C H��H��[]�ff.���UH��SH��H�B@�t�tqL�F I���v:H��A�(1�1��H���H��H����R�H�C H��H��[]�f.�H�Ѿ1�����H��1�H�x H���`J�H��H��[]�H�?SXH�5�a!H�81��.��ff.���AUI��ATI��USH���S�H��H�m%YH��u!H�-C!��H���cs�H�L%YH��t�H9�tH��1�[]A\A]�DL��蘑��I�����A�D$H��1�[]A\A]�ff.�ATUSL�'H��A�l$L���X���f�H��H��@��A�L$H�������C(H�=o=����H�CH@�kH�CpC8)CP)C`[]A\�E���AWAVAUATUH��S��H��H�T$dH�%(H��$�1�H�=�"Y���K����C���L�D$0�1�E1�H�D$0H�5y"YH�D$8H�D$@�rJ�Å���H�|$0@����E1�H�������dH�D$8����u���PH�D$@�����A�|l��L�l$P�X�@I��H��I�n(��L���CE��A�^�ZH�L���D$�ޏ��1��f�H��$�D$XH�|$(�H�H�'!��D$hH��$�H��$�H��H�D$ H�D$xL�t$PL��$�L��$�����I��XI���I9�8IC�8H9�HB�I���H9�HB�I���H9�HB�H��H�$I���H�D$I�EH���I��pH��t@H��L���
��I��pu�H�$H)�H��t*M��pIdžpH��L������M��pH��u�I��H�ŐH;l$u�E���f��|$�V���j���h�@H��H���:�H����C��@�kL��H�=�G���oo�H�|$(1���H�H�|$ H����L��$�H��$�L��$����H�|$Idžp��H��$�dH3%(�H��[]A\A]A^A_�f��;j���X�@I��H����L���C��A�^�"F�L���D$覍��H��$�H�D$(H��$�H�D$ E�����H�ܛ��I��p����D�c�Ic�H�l����S���2����P��������L�H�	YH��u%L�%3D!D�L���n�H��YH��t�H��YH��YH��u%L�%D!D�L���sn�H��YH��t�H��YH��YH��u%L�%�C!D�L���;n�H�dYH��t�H��Y����@���)���H���H�������N�H�-*�$I��H�YH��u�H����m�H��YH��t�E1�I9�A������H��t/@��u)H�E��H��uH��D���Q�H�����耞�u�1�1����k��l��ff.����AUATUSH��dH�%(H��$�1��h�H�|$�H��L��pH���H�@H�`H�\$H��H��1��H�H����H�|$H�\$0H�D$ �����SVXD�kH��H�@VX���C�D$���H���d@��D�k�D$H��Hǃp�VX���H���J�T%H�@H�`H��H��H)�H9�L��HG�1�H��p茝�H��$�dH3%(uH�Ę[]A\A]���fD��UH��SH��H��dH�%(H�D$x1��f�H�|$�H��1��H�H��H�$H�l$H�\$ ���H�D$xdH3%(u
H�Ĉ[]��~���SH��0dH�%(H�D$(1�����H��1���ueH�D$�e�thH�D$H�=���H�t$H�D$H�D$�J�H�|$H��������?H9�w_H�D?H�L$(dH3%(u]H��0[�@H�H�D$�d�u���z�H���‹�H�L$E1�H�ߺH���*�����d�럺1���h��}����ATH��A��UH��H���SH��H��dH�%(H��$1�H���%��H��E��I��PH�pQXH�پH��?!H�81��G�XZH��$dH3%(uH��[]A\��!}�����d������d����H�5�WWH�=Q!�ɑ f���AUA�@ATUS1�H��L��H)��N�H��I����^�L��H���I]�H�H��@tH��H��u�1�H�=�>!H�NY�a�H�-�QXH�=0?!H�E�a����H�����H�5 ?!H��H���L�H�߹����H�����H�5
?!�1�H�߹H�2�H�5�>!��H��H�'��H�5�>!�~�H�=�>!�Z:�H��H��IXH�0�s�H�,IX1�L�%�GXH�5�>!H�8L����U�H��KX1�L��H�5�>!H�8�U�H�߹����H����H�5�>!�{~���]�H��H�dYH���$L�%�3$@�L���[h�H�<YH��t�H�����1�H��H���O�H�YH��u'L�%@>!��L���h�H��YH��t�H��迈�QH��H����N�H��YH��u$L�%>!@�L����g�H��YH��t�H���w��H��H���N�H�pYH��u$L�%�=!@�L���g�H�LYH��t�H���/���H��H���?N�H� YH��u$L�%�=!@�L���;g�H��YH��t�H�����H��H���M�H��YH��u$L�%f=!@�L����f�H��YH��t�H��蟇�H��H���M�H��YH��u$L�%-=!@�
L���f�H�\YH��t�H���W��H��H���gM�H�0YH��u$L�%�<!@�L���cf�H�YH��t�H�����H��H���M�H��YH��u$L�%�<!@�L���f�H��YH��t�H���dž�H��H����L�H���_x�H�}H��H�5�<!�L��1ɀ=�Y��H��MXH�}H�5w<!H���CX�H�}1�H��H�5Z<!�.X�H�}H�ڹH�5O<!�X�H�}1�H��H�5H<!�X�H�}H�ڹ����H�5D<!��W�H�}1�H�lw��H�5H<!��W�H�}H�5T<!�0x�1�H���H�5H<!H��H���W�1�H��H�y�H�5�.$�W�1�H��H����H�5<!�uW�1�H��H����H�5�<!�]W�1�H��H�1��H�5� �EW�1�H��H����H�5L�$�-W�H�߹����H�~��H�5/$�W�1�H��H����H�5�;!�V���v�H�}H�5�;!H��H��近�
H�=�;!�5�H��H���#��H�=|;!��4�H��H�����H�=z;!��4�H��H�����=�Y��H��H��[]A\A]�Lv�@H�}H�M��H�5�:!�QV�H�}1�H�����H�5d:!�8V�H�}�H�x���H�5U:!�V�H�}1�H�O�H�5J:!�V�H�}�����H���H�5B:!��U����f��H�=�:!�4�H��H���$���A���ff.�@���f.��AVAUATUH�/SH��H��H��H������9���H�OL�g ����H��I��E1�H��I)�1��
DH��9�vh�<�u�I��I��J�|	$u�D�RA9�EF�A9�sCE��F�A���tUL��A��H���AoAD9 D�H��H�D$B��9�w�@H��H��H���H��H	�H�[]A\A]A^�L��H��H�|$u�E�PL��I�A��9�t�E�A���tE���y���fDI��M��I��K�|.�$u߃�����H��H�R� ����u H��H��H�R�P���D�H�����f���H�:�H�r�ff.�@����fD��H�H�1����H��ĀuH����H�D��H�G(H�D�fD���g]����H��ĀuH����H��H����f�H�G(H��H���Ð����fD��H������SL�H��I�@��t
H��H�6H�?A�PH�1�[�f���1�H��������H��������fD���7H����US�H����uH��H�7��H�:H��u5H�rH�uH��uH����[]��@��u��_�H����[]�@@��u�H�T$��_�H�T$H�rH�:H�uH��t����H9���H��u.�����H��$��H���f5���H�����f�H����uH���H��tdH��$��H��$��@��tH��u�H���H��u��@��t&H��t�@��u�H���H��u��fD1��D��H�IGXH�H9Gu�H��t�@��u�H���H���q���H;F�g���龃�fDÃ��H���������H�����f.�AWAVAUATUSH��L�'I��A��tUA��H�oI��1���H��A9�v7A��D8,+u�H��L��H��H�t�����t�H��D��[]A\A]A^A_�@A������H��SH����H��u
�7Q�fH~�H1�H���wq���[H��}��d�.H�4H��H��H1��f�H����.�t3H�H���8q���H��H��}��d�.H�H��H��H1���H�����u�H����o�H����SH�_H�0�b��H�{0[�X���PXH�5'Q!H��H��?XH�81���y�f�����t	H�H�1��P����f���S��tH�H��H�?H�6H�P�PH�1�[�������PXH�5�P!H��H�h<XH�81��^y�ff.���PXH�5�S!H��H�8<XH�81��.y�ff.���UH��SH��H�H��H����H��t0H��tqH��������H��H��H!�H	�H�]H��1�[]�fDH�5	Y�dx�H�H��H��wH�5�YH����H�E�H�5�YH�T�H����H�C>XH�5S!H�81��rx�f�S�oFH�_H�G�oN(H���O(�oV8W8�o^H_H�ofXgX�onhoh�ovxwx�o����H���H���H�FH�GH�%�H	�H�H�H%����H	�H��e%��H��[�AVI��AUATI��USH�H��ƀ���Ā��L�oH��H�5KW��L���`�I�H����ty��I�nI�^ M�t�Kf�H�3H�SL���Q�H�3H��t@��uL���Z�H�sH��t@��uL���Z�H��H��I9�t�}�u�H�;$u���f����[L��]A\A]A^���̀H�vH�H�G�褞L���l$��[L��]A\A]A^���H��H�wH�?dH�%(H�D$1�H����Q�H�$��u�$H�L$dH3%(H��uH�����l�ff.�@��H�����1�H���ff.����H��H����1�H���f���SH��H�� dH�%(H�D$1�H�<$�H�t$H���nP�1�H�����tH��H�L$dH3%(��uH�� [��;l�ff.���H��(dH�%(H�D$1�H�<$�H�t$H���P�H�T$dH3%(u1�H��(���k�fDH���u�Āu�H���7����ATUH��SH��ǀu%H����H���0�I��H��u"L��[]A\�fDH�_(H����/�I��H��t�H����9�H�}���upH��L�؃�L9�������H��H�¹�#fDL�H��I9�A��9�A��H��E�u[H��H���|
��L�D5�u�I��$t����H��H�}H����I�H��L����*�L����!��H��L����q�L��[]A\�H)�H��H����@1���@��ATUSH�/H�������H����H����.�I��H����H��H��u�z!��L����8�H�L��H����L9�������L�SH��H�� ��'�H�{H��H�~�I9�A��9�@��H��H��A�ujA�|��u�H�;$t���f.�� ��L���C8�H�{H��H���d2�H��L����)�H��L����p�L��[]A\�fDH�o(�����H)�H��H����@1��ff.����USH��H�o�YdH�%(H�D$1�H�;t9H�*6XH�H�8t1�H�T$dH3%(u\H��[]ø��f�H�l$H����KH��5XH�H�8tH�;u�H���M1�몐H�;u�H���rM����h�fD��SH�� H���YdH�%(H�D$1�H�H��txH�y5XH�H�9t81�fD��Hc�H�<�u�H�D6H��t)H�|$dH3<%(uaH�� [����f�H�|$H�D$��LH�D$�f.�H�|$�KH��4XH�H�H�9�w�������g���ATUSH�� H�-�YdH�%(H�D$1�L�eM����H��4XH�H�;H��tN1�@�=��`�H��H��H��H�;H��u�H�D-M��t0H�T$dH3%(ukH�� []A\�����f�H�|$H�D$��KH�D$�f.�H�|$�JH�4XL�eH�H�;H���^������g�AWAVE1�AUA��ATUSH��dH�%(H�D$1������?f�L�=�YI��I�?tH��3XH�(H�]H��u/��H���H&�H��H��L��芁�H��H�]H��t]�=H���_�H��t�H)�H��E��u�H��L�����H��H���*;���H�|$�&IH�3XH�(H�]H��u�I�?u
H�|$�JH�L$dH3%(L��u"H��[]A\A]A^A_�fD�Q�I��������e�fD��1�����DUH��SH��H����P�H��H��H���a��H��H���v:�H��H��[]�ff.��H��tSH���G�H��[H���f���f.�ATUSH��dH�%(H�D$1��d�L�%<~YH��I�<$tjH�2XH�H�;H��t6�=�F^�H��tH�x�x���H��H�����H��H�;H��u�I�<$tJH�T$dH3%(H��uCH��[]A\�fDH�|$�GH��1XH�H�;H��u��f.�H�|$�&I��d�ff.�@���������AVH��AUATUSH��dH�%(H�D$1���8�H��H����L�%4}YM�,$M����H��0XH�H�;H����L�e�H��H�;H�����=�]�H��t�L�pL���mE�H;Eu�L��H�E tH�uH��L���k5�u��M��tTDH�L$dH3%(H��uLH��[]A\A]A^�H�|$�^FH�O0XM�,$H�H�;H���S���@1�M��u�H�|$��G�1���4c�@��AWH��AVAUATUSH��dH�%(H�D$1��7�I��H����L�5|YI�>��H��/XH�(H�]H����M�l$�f.�H��H�]H�����=H����[�H��t�L�xL���1D�I;D$u�L��I�$ tI�t$H��L���-4�u�L��H��H)�H�p��g=�L��H����\�I�>I��tWH�L$dH3%(L��uUH��[]A\A]A^A_�H�|$�EH��.XH�(H�]H���,���DI�>A�u�H�|$�F�A����a���AVAUATUSH��dH�%(H�D$1��a�L�-�zYI��I�}��H�w.XH�(H�}H��tZ�=�Z�H��H��t1H�x���H�}I��H)�H�����L��H����[�L��H���=|�H��H�}H��u�I�}tQH�T$dH3%(L��uJH��[]A\A]A^�f�H�|$��CH��-XH�(H�}H���_����DH�|$�nE���`����SH���S[�H���}�1�H�����tH����[Ð��SH��H��dH�%(H�D$1��[�H�{�H�ᾍH�$��X�1�H�����tH��H�\$dH3%(��uH��[��"`�f���H���Z�H���}�1�H���@��SH���Z�H��H����z�1�[�@��AWAVAUATUSH��(H�t$H�|$dH�%(H�D$1��N�L�5�xYI�>��H�,XH�(H�]H����L�d$M�l$�H��H�]H�����=H���X�H��t�L�xL����@�I;D$u�L��I�$ tI�t$H��L����0�u�L��H��H)�H�p��O���I�>uDH�|$H�$�CH�$�0H�|$��AH��+XH�(H�]H���M���@I�>�t�H�L$dH3%(uH��([]A\A]A^A_ø���^�f.�UH��SH��(H��wYdH�%(H�D$1�H�;t2H���BY�H������H�;t,H�T$dH3%(u2H��([]�DH�|$�A��@H�|$H�D$�BH�D$��
^�ff.�f����H�=B!�[�ff.���SH��H�rH���<5�1�H��tH����[�D��ATI��H�:UH��SH���5�1�H�����u
[��]A\�fDH��L���X�H�C��[]A\�D��ATI��H��UH��H�:SH���4�1�H�����u
[��]A\�L��H����W�H�C��[]A\�D��H���s4�H�������H�����f���UH��H��SH��H��H�2�E4�1�H��t	H�k�H����[]�ff.����H��(H�кdH�%(H�L$1�H�<$H��H�t$H���z�H�L$dH3%(u1�H��(��`\�ATUSH�� dH�%(H�D$1�H9�tsH��H��A��H��t@��uH�H�ƒ�H��t`��H���h�tH��H��E������u'1�H�L$dH3%(��H�� []A\�����f�H�UH�с����H����H�Ɓ��ukH����H9�u�H��t�H��uuH�~8WH��tH�S H9��u���@H��H��H��H�\$H�=3CD�d$�G��O���@�2��A���fDH�C(�f.�H�U(�q����H�E H�8WH��t���Z�f�������f���1��u���D��H����H�=�W�s.	��AWAVAUATI��USH��H��@����H�����N�E1�H��E1�H�{�[H�5�� H���r�E���WH���;�H��H����d�E��H�m>!H�5h�#H��HD��Tr�L���N�H��H���d�H��1�[]A\A]A^A_�@���q���H���H���a����a'�L�xH��M����H�������H�uH�E tH�u���!<��H��H�t$�$b�H�MH�t$H�E H�UtH�MN�|>�H�H��E1�L��A��a�I9�����A�A���%<Y����H�<?!��Hc�H�>��A�H�{A������H��H���]�E�������H��H���c����D�	�A�A�H���V����'����ATUSH��H�� dH�%(H�D$1�H����H�-.XH�8H�5k�XH����H��H�=h1�H���n�H��@����H��������H�\$I���fD�>�H�ǨuTH��t�@��u�H���H��
u�E1���H��A�@��H�D$H�<x=H!�H���I>�H�Ǩt�f�H��H�H�L$dH3%(��H�� []A\�DL	�H���l���@���H��H����H�t~H�P���<�
H�EH�Q'XH�5J�XH�@H9����H�t$fH�=�'XffH��>�H��I��E1�jH�t$1�H��H��H�8�YH��XZH��$������H�5�X���@@��uH�H�5�XH���d����9����H��tJH��tS��u/����H��(XH�5��XH�8H���*�������H�a#XH�8����H�1)XH�8���H��$XH�8���H�+H9B���H��uVH����V���H��}��d�.H�H��H��H1�H��H����H��������?H!�H�|��H�N'XH�8�t�����uUH���������H�T=!Hc�H�>��H���6��H�H���H���Vh�H��대���H�CH���w���H��H���H���?���H��$tR���0�����tYH���5�f��f.�fH~��D$�
���fH~�HE�H�����H��H	��$���H���[�H������.U�H��H���U�H�����f.�����t��f�H�5�X1��rM�f�PXH�5'6!H��H�,$XH�81��b^�f�AWAVAUATUSH��HH�T$dH�%(H�D$81�H����H��������I��H��H��L�dH�D$0H�D$H�D$(L�oH�D$L� A�}�I�?��I�wH��H�|$(1�H�t$0��I��ƀ������~{��tN��u1H�D$H��t'�H��H�t$H�|$��H�D$(I�H�D$0I�Gf�I��I��M9��z����1�H�L$8dH3%(�~H��H[]A\A]A^A_���t��f�H��$�?����@H��I�$H��A�E�����tH�H���H��H	�I��m���DH���I��Y����T����?S�ff.�@����u@USH��H��H�H�RH�h�SH�H��H9�u#��t���E�H��[]�fD��H�+"XH�5L4!H�81��Z\�f.�SH�H��H��H����H��tAH��������H��H!�H��H��H	�H�H��uH�5N�XH�ߺ�[��[�fDH�51�X�[�H��������?H�H��H9�wH�5�XH��H�T[��H�z!XH�5^6!H�81��[�f�SH����N�H����_�H��L����[1�1�H���8^��SH���N�H���_�H��L���[1�1�H���^����AUATI��USH���:8�tf1�1���I��H�h� @H����H9�},H��H�<�H���tn�I�E�� u�I;]}
I�E ���H��L��[]A\A]�f.�H��L��[]A\A]�>���ff.���AUATI��USH���7�tf��1�I��H�h�"fDH����H9�},H��H�<�H����m�I�E�� u�I;]}
I�E ���H��L��[]A\A]�f.�H��L��[]A\A]���ff.�ATI��UH��S��X�xH��uH���pA�t$H�%%XH�KL��H�5�1!H�81��Y�DH�E u.H�}H�U1��/�H��u [H��]A\�y�f�H�}��H��$XL��H�5�1!H�81��_Y�ff.�@��H��H�|$H�t$�>�H�|$H�5��%�(���H����H��t
H�|$H���J�H������ATUS��H��dH�%(H�D$1��G�����H�I��H�$��5�Ņ�t��tTH���>�H�<$H�5D�%���H���|�H��tH�L$dH3%(upH��[]A\�D��uD��t^I�D$��1�H�=�m �ZR�H���=�H�<$H�5��%�B���H����H��u�@H�<$�k�돺��9��N�H�$H�-^�XH�=�2!1�H���E]�H��H��H���3��H���/4�ff.�@��H��H�|$H�t$�	=�H�|$H�5H�%���H����H���ff.���ATLc�USH���]M�H��E��~&N�$�H�3�H�����H��H����h�L9�u�H��[]A\����SH�� H�t$H�|$dH�%(H�D$1��h<�H�|$H�5��%����H��fYH�;t:H���BH�H�;tDH��H�H�Ѓ�H�T$dH3%(u;H�� [�f�H�|$H�$�0H�$�@H�|$H�$�1H�$��L�ff.�@��AWAVI��AUATUSH��8dH�%(H�D$(1��f3��~�)L�L�=�eYH��I�?��H��XL�(I�mH��t\f��=H����E�I��H��t.H��H��H)���H��H���bg�I�|$���H��H���Mg�I��I�mH��u�I�?��q#	1�L�c����L�d$�U@H����H9���H�SH��H��H�T$H�SH� uH�S H�DL��H��H�D$��/�H��� u�H;k}QH�S �H����H9�}<H�t�L��H�<�H���/F�H���h�H��� u�H;k}H�C H�t���fDL��H�L$(dH3%(u{H��8[]A\A]A^A_�fD�H�H���Y�L�<�1�1�H��L���mW��H�|$�/����f�H�|$��-H��XL�(I�mH���O��������J�D��H��Āu$H����H��t!H��1�H�=�3����H�G(H��u߾H�=�.!��fD��AWAVAUATUH��SH��H�H��Ā���tuH����tl��L�kL�c H�DH�D$E�uM�<$A�����H�UI�t$L���U������twH����I�<$$��I��I��L;l$u�H���[]A\A]A^A_�@H�{�$H��H�5�����"�t���I��$�r����@H��ƀuTA�}���H��I�$$H��A�E������}H�H���H��H	�H��V���DH��Ā�T����?��A��L��H���i�����!������H�RXH�5+!H�81��R�I�<$$������c���H���H�������H��(dH�%(H�D$1���wrH�BH��uH�L$dH3%(ueH��(�D��u�H�
I��A��I��tр�@t̅�t*H�H�$�H��H��H�L$��9����뗺1��E3��0H���H�%�tH��W�H9G �HD�����H��uPH�����f�@��u�H�H�ƒ�H��u�% �HE��ff.����AW�AVAUATUSH��dH�%(H�D$1���[�H�5�+!H���O�H���2�I��H�n`YH�8�DL�-5XI�]H�;H�����=�s@�I��M��t{H�;L��L��I��H)���c�I��H�����L����'�H��H���Q�H�5"+!H���8�L���|(�L��L��H���c�I��H����L���'�H��H���@Q�H��H�;H��t@�=��?�I��I9]�]����H�5�� H���)8�M���E���H��H�;H��u�H�m_YH�8t7�H�5�*!H����7�H��H�L$dH3%(uCH��[]A\A]A^A_ÐH�|$�*�@H�|$�(L�-�XI�]H�;H����������E�����H��t@��t�H�H�у�H��t��@t�H�G�ff.�@AWH�OAVAUATUSH���dH�%(H��$�1�H�H�$�Ā��H��H��I����H��H�D$�����s�L��$�H��H�G L��H�|70fDH�0H��H��H�r�H9�u�E1�H�l$PI���M�kE���H�<H��}��d�.H��H��H1�H��H��������?H!�L	�H��HO�J�D�I��D9��KK�<�1�H��$t�H��t�@���H�����t�H��t�@��u�@�����$�f.|t ����1��Y���H�T$H�|$H�5H!W�iI�D$ H�D$f�I�D$H�$1�I�$$���Hǃ�H�|$H��H��H)�������H�foL$H�D$@I�$�foT$ AL$fo\$0H�C0S[ H��$�dH3%(H�$�
H���[]A\A]A^A_�DH���������H�++!Hc�H�>��DM�<$A���u�L�t$H�T$H�5J WL���hH�$H��H�D$I��f�I�uH��$tJ�L�I�UL���UpI��I��D9�������[��H�H�������{U�H������@��t,H�GH����fD��H������fH~����H���C�H������B����H��H��uC��B���H��}��d�.H�H��H��H1�H��H����H��������?H��H!��@@��u*H���������H�*!Hc�H�>���H��H���H��t�H��$��@���l���@�����"�f.�q zFuD1��J���DH��H��H	��fD���H�H���A����+T�H���4���fH~�����fD@��t"H�GH������fD��H�����H���A�H��������H��H��uK�A���H��}��d�.H�H��H��H1�H��H����H��������?H��H!�H�D��@��u*H���������H�
)!Hc�H�>���H��H���H���t���H��$��@���`���@����� �f.�p zJuH1��>����H��H��H	�H�D�f�諫�H�H���1�����R�H���$���fH~���fD@��t"H�GH�����fD�#��H�����H���_@�H�������AUI��ATI��USH��H��H���|H���,@���H�H��}��d�.H��H1�H��H����H��������?H!�I�$�u&@��H��L����������I�$�;H�������[]A\A]�@��u*H���������H��'!Hc�H�>���H��H���H���C���H��$��@���/���@���1H����f.�n zwuu1��
���fD��H��M�l(H���[]A\A]�DH��H	�����fDH�����H�H������DH���Q�H�������fH~����fD����H�CH�����H���p�H������L������ƒ�H��H��H��I�LH�YL�iA�lI�$H���H	�H��H%����H��H	�I�$H��1�[]A\A]�fDH��H���>�H������@��H��H��H��uH��H��H�����1�H����H��H��H��H����	�1�H����AWAVAUI��ATI��USH��H��H��(H�t$dH�%(H�D$1�H�D$H�����z=���H��}��d�.H�H��H��H1�H��H���RI��������?L!�H�$H��Ā��L�|$A�1��}L��H�t$H�|$��A��H��ƀ�������t*H�L$dH3%(����H��([]A\A]A^A_�D��t�E��L��H��H�D $H��H��B�D������ H�H���H��H	�H��@��u*H���������H��$!Hc�H�>���H��H���H�������H��$��@�������@�������f.�k �N�H1�����I��L	�H�$���f.�L�d$L�l$���~H��D��M9�tH��H��L�dH��L�l�����4$L��H���q��A�ƃ�t)���H��H�DL�xH�@L�|$H�D$�E���f�L�|$�9���fD����H��H�����������H���H��H��H	�H��H��H�t3H���%L�fL�nH�4$H	�@�tH���f��˥�H�H���u�����L�H���h���fH~��7���fD@��tJH�GH���C���fD��������fD�S�H��� ���H���H��w���f�H���W:�H����H������H��
�����9����D��UH��SH��H��H�>�V�H��uH����6���u�H�H�ʃ�H��t��u�H��t)H�EH��t�uH��H���Q&�H��1�[]����t�H��H�D$��H�D$��H���u1��f�ATI��UH��SH��H��u~H���v9���H�MH��}��d�.H�H��H1�H��H���6H��������?H!���HH����H���
����1���t�M��t
H��H�T(I�$[]A\�D@��u*H���������H��!!Hc�H�>���H��H���H���A���H��$��@���-���@����H���I�f.1h ����1�����fDH���`��H�MH�H���
����H���xJ�H�MH�����@��tkH�CH������H�����H�MH������@H��H	�����fDfH~��{���fDH�}L��H��[]A\�-�DH��H����7�H�MH���i�����AVAUATUS��H��dH�%(H�D$1��G�����I��H��L�6��A�ą�t	����H��H�E�t?H�}L����u>E��uB��t[I�EH�L$dH3%(uBH��[]A\A]A^�@L��H���}�����t�H�$��L���S�뽺��!��6�H�=X1�L���q	�H��t4�AH���C�H�=�!H��1��-E�L��H��H������H����L���0���H�=U 1��9�����f.���H��H��u1�������H�H��H�Ѓ���H��1�������UH��SH��H��dH�%(H�D$1�H�BH��H��u`H��H���e�����t�CH�4$H��u3�����1���tH��H�L$dH3%(u(H��[]��������@H��H��H�������*5�f.���SH����tGH��u
H���R2�f���u�H�H�ƒ�H��t��u�H��ta�Āu$H����H��u!H��[�H��[���H�C(H��t�H�����H��H��H�
��H�=c
���H��[�f���t�H�����H��ff.���AWI��AVA��AUATUH��SH��H��H�L�/L�bH�D$�R��t��uE��u2H��[]A\A]A^A_�E��tL9mtUM��tA��tZL���B1�f�M��t�A��u�I�$H�ʃ�H��t��u�H��u���t�L��D$�)�D$�H�t$I97u��@I�$H�ʃ�H��t���u�H��t%H�UH�SI�H�S H��[]A\A]A^A_����t�L��D$��D$��f���SH��H��0dH�%(H�D$(1�H�|$�H�t$H�t$��H��1�H�����tH�L$(dH3%(uXH��0[��H��uH���#0���u�H�H�ʃ�H��t��uܸH��u���t�H�߉D$��D$��2���SH��H��0dH�%(H�D$(1�H�|$�H�t$H�t$�[�H��1�H�����uH�L$(dH3%(uXH��0[��H��uH���s/���u�H�H�ʃ�H��t��uܸH��u���t�H�߉D$�[�D$���1���SH��H�wH��t@��t	H��[�@��H��[�fDAUI��ATI��USH����H�H���H���PfH�=XffH��H��PH��L��H��H��H�8�G��L��H��H����H��H��[]A\A]�ff.�SH��1�H��H��H��t
1�H�{(��H�S�h���H��[H������ff.��SH��XH��1�H��H�8H�����,���H��tH��H��H��[���H� ���H��H��[�m��ff.�f�SH��fH�=XffH��H�޹��H�8�W��H��H�����H��[�f���UH��SH��H��XdH�%(H�D$1�f�;u&H�����H�L$dH3%(u)H��[]��H�|$��H��f$H��HD���/�UH��SH��H��H���&�H��tH����t�P��wH�@H��H��H��[]�J��H�5�!1Љ�H�'�WH�81��9�ff.�f���ATUSH��H��uH���,��@��u�H�H�Ѓ�H��t��u�I��H��tMI��tW��H��g$�L���.�H��H��tPH����%�H��tCH��H���
���H��[]A\�D��t�H���S�뤐H�#�����H�߽�g����L���=&�H�5!H��H�<�WH�81��28�f���UH��SH���.�H�����~����H� ����H��H�����H�E�ĀtH�E(H��uH��H��[]�H����H��t�H���t��H��H��H�����H�=��;��H���3��H��H��[]�f�H��[]����D��USH��H��H��uH���&+�fD@��u�H�H�ƒ�H��t��u�H��H��t��H��H��H��<��H��H��[]�f���t�H�����H���ff.���SH��H�� H��uH���*��@��u�H�6H���H��t��u�H��t}H��t,����H�H��~H�H��%�H����H	���I��t%H����H��L����H�� H��[��H��H��MD�L���]��H�� H��[�@����w���H��L�L$L�D$H�L$H�$��L�L$L�D$H�L$H�$�D����H��L�L$L�D$H�$�+�L�L$L�D$H��H�$�)���@H�{H�55	WL�L$L�D$H�$�QH��L�L$L�D$H�$�
���1�1���
�f.���ATUSH��H��uH���()��@��u�H�H�Ѓ�H��t��u�H��H����H9���H�����H���H���!���H�H��H�kH�pI�Ā�H�H�%@H	�H����H�H��%�uJH�{ H���H�CH��H�Hǃ�H)�������H�L��H���ü��H��[]A\�H���p���f�CEE H�E0��fD������H���/�����H��WH�5D
!H�81��24�f���H��f.�Z z.u,1��*���H��H��}��d�.H�H��H��H1��@fH~���f���H��H��uK�*���H��}��d�.H�H��H��H1�H��H����H��������?H��H!�H�D��@��u*H���������H�=!Hc�H�>���H��H���H���t���H��$��@���`���@�����	�f.�Y zJuH1��>����H��H��H	�H�D�f�軔�H�H���1�����;�H���$���fH~���fD@��t"H�GH�����fD�S��H�����H���o)�H���������UH��SH��H��(dH�%(H�D$1���9�H��H�$��9�1�H��H�D$�{�H1H�L$dH3%(u	H��(1�[]��(�f.���H���oG�oNO(�oV W8H�F0H�GH�f���H��u�f�黷��ff.���H��(1�dH�%(H�D$1�H�t$H�5J���H�T$H��H�<$�I�uH�D$dH3%(uH��(�H�)�WH�5�� H�81��X1���'���H��(dH�%(H�D$1�H��u/H�4$H��H�5����H�T$1����H�L$dH3%(uH��(�H���
����`'���H��u�~��fDH����)�ff.�@��SH��H��H�^�H�57������H��[�ff.�f���USH��H��(dH�%(H�D$1�H��Ā��H��H����H��tSH�$H��H�t$H�T$H��tZH�ƒ�H��tNH��%��H	�u>H������H��H��H��H�=������H�D$dH3%(u&H��([]�fDH��������fDH�O(�r����:&�f.���AUATUSH��H����zH��H���HH�ƒ�H���8H��H������H	�� H���&1�%�H�kI��un�!���H��H�5�H��I���l�H�{ L��L��H��H�#���H)�H�C���Hǃ����H�H��荶��H��H��[]A\A]����H�UH�uL�`I��L���JI�M�L��H��H�5�����H��蚴��H��f��AoMK�AoU(U�Ao]8] I�EHH�E0H��AEAE(AE8I�EHH��[]A\A]�@H���"����������H�����H���WH�5	!H�81��.�f���SH����tGH��u
H���!�f���u�H�H�ƒ�H��t��u�H��tq�Āu<H����H��u9H��[��� �H����1�H��L��[1�1�H���T0�@H�C(H��t�H��H��H�5Z���H�����H��[����t�H���3�H��z���ff.���SH��H��uH���� �@��u�H�H�ƒ�H��t��u�H��t8��u�ĀuDH%���H�H��[�fDH��1�H�5ܮ����H��[�f���t�H����H��fDH�{��H���7���H��[�f���AUATUSH��H��H��Āt
H��WH9W toH���1H�ƒ�H���!H��H������H	��	H������DL�c�Āu3H����H��u1H������H���WI�D$H��H��[]A\A]�DI�D$H��t�1���H�I��ƀ��I�T$I�mH�58�WH���GI�M�L��H��H�5{����H��Ā���̀f�H��AoMK�oUAT$�o] A\$ H�E0I�D$0H��AEEE H�E0H��[]A\A]�@H�����H�����Q���@������H�����H������H�����H��V���H���WH�5!H�81���*��H�9�WH9V tH����������USH��(dH�%(H�D$1�H�$����H�H��H��ĀtWH�B(H��t0��tZ�u���\�H�EH��H�5/���H��H�D$�r�H�$H�L$dH3%(ukH��([]��H��������¸��t��H��tH�5����H�����H�5����H����덺1��C��. �ff.���H��(dH�%(H�D$1�H��H�t$H�5��H�$��H�$H�L$dH3%(uH��(����ff.���USH��H��H��uH����fD@��u�H�H�ƒ�H��t��u�H���|�ĀuWH����H��H��t8H��H�5Ϋ��H����H��Āu>H����H��H��H9�tH��[]�DH���[]�@H�k(�f.�H�S(��f.����{���H���_�H��k������H��(dH�%(H�D$1�H��H�4$H�5
���H�D$�l�H�D$H�L$dH3%(uH��(���ff.�f���UH��SH��H��H�dH�%(H��$�1��ƀuZ���t'H�T$pH�5���H��H�l$pH�D$x���H�D$xH��$�dH3%(�H�Ę[]�DH�(��H�O H�5�WH9�t�H�GH�oG�oO(�oW8H�|$0H�D$`H�����H�D$H�A)D$0H�D$H�D$)L$@)T$PH�D$8H�|$ H�l$(H��tcH�Ѓ�H��tWH�؁���H	�uFH�����H�t$ H��H�����H�=����c��H��$��H��H���������f�H�T$H���������H�D$�������D��USH��H���~�tzH��u
H����D��u�H�H�ƒ�H��t��u�H��ty�ĀuTH����H��H��tNH��H�5��H���C��H��ĀuCH����H9�t(H��H��[]�DH��H��[]�B��f�H�k(H��u�H���[]�H�C(�f���t�H����H��r���ff.���USH��H����H�߅�tW���H�H��ƀtH�S(H��uH��H��[]�@H����H��t�H��H��H�5'��r��H���ʯ��H��H��[]�H��[]���D��USH��H����tzH��u
H����D��u�H�H�ƒ�H��t��u�H��ty�ĀuTH����H��H��tNH��H�5��H�����H��ĀuCH����H9�t(H��H��[]�DH��H��[]����f�H�k(H��u�H���[]�H�C(�f���t�H���3��H��r���ff.���USH��H���>�H�߅�tW��H�H��ƀtH�S(H��uH��H��[]�@H����H��t�H��H��H�5����H���j���H��H��[]�H��[]�%��D��SH�����tGH��u
H���b�f���u�H�H�ƒ�H��t��u�H��ta�Āu<H����H��u9H��[���H���'�H��L�����[1�1�H���&�@H�C(H��t�H��H��H�5Z��U��H��[��t�H�����H��ff.���SH����t7��1҅�uH��H�5*������H��[�H��H�5������H��[�@���H����&�H��L��[1�1�H���T%�@��SH����tH��1�H�5�����H��[�f�H��[������SH���S��tH��1�H�5���^��H��[�f�H��[�w�����H��(dH�%(H�D$1�H��H�4$H�5j���H�D$���H�D$H�L$dH3%(uH��(��-�ff.�f�����u(SH��H��H�H�53���H�[�f���f.���UH��SH��H�dH�%(H�D$1��ǀucH����H����H�5���H����	�H�$H��uTH���L.�H��x7H��������?H!�H�L$dH3%(H�Du=H��[]�fDH�_(�f�H��H	��ǐH��H�5F�H�����H�$��#�����u`USH���H���U+�H�5h� H����H��H�57���H��H����H��H�5n� �x�H��H��[]�fD�H�=I� ������USH��H��H�?���u0H��������H��H�5r���H��H���'��H��H��[]�DH�{(��f���ATUSH��dH�%(H�D$1����;H�Ӆ�udH�:���tIH�z(H��}��H�5V���H��H��H����H�L$dH3%(H����H��[]A\��H������H�>@��ug�R�A�ą���H�;���u\H����H����H�5ָ��H��H��H���8��A�D$���?�q���H�5:�X1�1�H����
��Y�����K���f�H�{(�f.�H�H�5��XH��H��H�D�H�$�
�����f�H���X���H������1�������ff.�@��AVAUL�-�/ATA��UH��SH���O��H�v/LD�E��~EA�D$�L�5�!L�d�@H�;H9�tL������1�L��H���!��H��L9�u�[H��]A\A]A^�ff.����SH���!H����H���H�� dH�%(H�D$1�苯H�H��ƀu`H����H��ŀuIH����1�H9�s!H��H�5�H�$H�D$��H�D$H�t$dH34%(uH�� [�@H�O(�f�H�S(���D��SH�Ӱ!H����H���H�� dH�%(H�D$1��ۮH�H��ƀu`H����H��ŀuIH����1�H9�w!H��H�5)H�$H�D$����H�D$H�t$dH34%(uH�� [�@H�O(�f�H�S(����D��SH�#�!H����H���H�� dH�%(H�D$1��+�H�H��ƀupH����H��ŀuQH����1�H9�v$H�4$H��H�5uH��H�D$�$��H�D$H�\$dH3%(u%H�� [�f�H�N(�f.�H�S(��%�D��SH�c�!H����H���H�� dH�%(H�D$1��k�H�H��ƀupH����H��ŀuQH����1�H9�r$H�4$H��H�5�H��H�D$�d��H�D$H�\$dH3%(u%H�� [�f�H�N(�f.�H�S(��e�D��AVAUA��ATUH��SH�����H��uH����f�@��u�H�UA��H�Ѓ�H��t��u�H��t|E��~dA�E�L�-K�!L�t��DH�5�H��H�����I9�t5H�;L�����C�H��E��u�H�5tH��H���h��I9�u�[H��]A\A]A^�����{���H�������n���f.���H�%�WH�8���ff.�f���Sf�H��0dH�%(H�L$(1�)D$H�D$ ����H����H���H�S�!�H�8�w�H�D$��D$ �4��H��ƀtLH�S(H��t+H�|$t{H�T$H�5H��H�D$H�D$�m��H�D$H�L$(dH3%(urH��0[�f�H���������u��B�H���:�L�C���1�1�H��H�����f�H��H�5v	H��H�D$���H�D$늺1��6���!���U1ɺSH��H��H���WH����1�H�8�D��H��H��wH��H��[]ÐH��H�xH�5��V�-4H�M�H��H��[]�ff.�USH��H��H�?���u,H�����p���H��H�5fH��H���;��H��H��[]ÐH�{(��f.���SH������H�߅�u4�,�H��WH�2H9�uH��[�H�H��[��@����fD[�b���f���USH��H��H�?���u0H��������H��H�5�H��H�����H��H��[]�DH�{(��f���������USH��H��H�/�k+�H��H��H�Ɓ�D�G����uH��[]��H��H��H�D$�(�H�D$H��[]�@��ATUH��(dH�%(H�D$1���tQ~$�o��|$Hc�L�$��+�|$��uH�D$1�1����f�L�����H�D$��u'H�t$���H�i�WH�5�� H�81��X���@��USH��H��H��u�H������@��u�H���H��u�H�����H��H��tH��H�{u
H�h�WH9CtH�M H��H��[]�H���8���fD��USH��H�����H��H��Āu;�uH��H��[]�f�H��H��H�5s������H������H��H��[]�@H��H�{u�H�֠WH9Cu�H��H��[]��f���ATI��U��H��SH���8��H��tH��H���T�[L���H��]A\�#�����H�5�W1�H�0�+��ff.���������SH�����H��[���f.���AUI��ATI��UH��SH��H��H��u%������tH��[]A\A]��H���H��H��H�{L��L��[H��]A\A]��ff.��USH��H��8dH�%(H�D$(1�H�$H�T$H�7��H�L$ H��H�t$H�|$�P���H�t$��H��t@��t>H�t$ H��t@��tH�|$(dH3<%(��u&H��8[]�DH���(����fDH�������!
���AUATUH��SH��H��u
H���R�f�H�H�؃�H��t�I��H��H�ڃ���H	�u�I��H��H��tvH������t
H���WH9E tL���}'�H���WH9t1H��H�W���H�0���HD�L��L��H�����H��L��[]A\A]�H��H��H���D��t����H�U�w���D��H��H��H��H��H�����1�H���AVAUATUSH��dH�%(H�D$1��O��L�-"YI��I�}��H���WH�(H�}H��tV��=��H��H��t)H�x�5���H�}I��H)�H�����L��L��H�����H��H�}H��u�I�}tIH�L$dH3%(L��uBH��[]A\A]A^ÐH�|$�F�H�7�WH�(H�}H���o����DH�|$�����'����S���H�����u
H��[�DH��[�G�������������H�����H��H��������H�����H��H�������AVAUATUSH��H��0dH�%(H�D$(1���������1�E1�H�\$H���Y���H�$�TH����I9�}tH��N�,�L�����I��H��tH�޿L�l$H�D$���H�����uH�$I��H��� u�L;`}!H�@ �L��L��H���������H��H�D$H�$H�L$(dH3%(H��u9H��0[]A\A]A^�@�k�H���c�L�����1�1�H��H�����H����s�����thAUHc�ATUH��SH��H���0���I�Ņ�~6�E�L�d��H�+�H����H��tH��H��L�����H��L9�u�H��L��[]A\A]�D�K��ff.���H��H��H��H������1�H�����UH��SH��H����"�H��H��H�����H��1�[]�@��H��I��H�:H�rH��H�đ��L��H���H�R���HE����1�H���f���H��H��H��H�H��H�5����H��HD�H���l���1�H���D����H�_�!�醠fD����H�?�!��fD��H���$��@��UH��SH��H��(H�dH�%(H�D$1�H�e�WH;8u@H��Y�@>f��������t?H�CH�@uRH�T$dH3%(utH��([]��!��������H���!H��H�,$���DH��$t"H���H��H�$H�l$�4���f���|��������UH��SH��H��dH�%(H�D$1�H��H��u$�����t(H�$H�L$dH3%(u!H��[]�H��W��u�H��H�����������US��H����~7H��H�6H��������uH��[]�@H��H�u�H��[]鹲����<��ff.����AULc�ATL��I��USH��H���q��H��M��~(N�,�DH�3L��H���1��H��H�����L9�u�H��H��[]A\A]�����uH��H�1���P�׾����f.���H��u�N��fDH���/��ff.�@��SH��H��dH�%(H�D$1�H��H��u(�����tH�$H�L$dH3%(H��uH��[�f�H������������UH��H��SH�Ӻ$H��H�;���H��$uH�CH���[]�fDH��H���%��H��t�H��1�[]����AVAUATI��US����H���H��Ā��H�B(H��toHc��G�I��I�$�����~B�E�L�t�f.�H�+�$L��H���
��H��$tH��H��L���	��H��L9�u�[L��]A\A]A^�@�K��I��I�$�t�[L��]H��A\A]A^���H�����X���@L��H���}��I���_���D��AUI��H��ATUH��SH��H��H�;L�b�$�e��H��$tL��L��H���a��H��1�[]A\A]�@�SH���t�H���^���ff.��������f���H��H���H�t$H�t$���H���ff.����AULc�ATL��I��USH��H���Q��H��M��~(N�,�DH�3L��H���A
�H��H����L9�u�H��H��[]A\A]���AUATUSH��H�����sH��H�>I��I��H���������H��}��d�.H�H��H��H1�H�UH�����H����H��������?H!�H���I�U��H���b�������H�U��M��tH��H��H�L
I�$H��H��H�D
$H�U�D�H��H��������H�H���H��H	�H�E�H��[]A\A]�fDH����u(H���������H�
#� Hc�H�>��DH��H���H�����H��$��@������@���9�T��f.<. ��H������H��H��[]A\A]�=��D�Si�H�UH�H��������fD�c�H�UH���������@����H�GH���j���f.��ۤ��H�UH������I���f�H��H	��D���fD1�M�������I�$H��[]A\A]�f.�H����H�UH��[]A\A]�DfH~����fDH�}L��L������H���g��H�UH��������D��AWAVAUATUSH��8dH�%(H�L$(1Ƀ���H��u@H���H��!�H�8��I���,��D$H��t��tvH�����fD���E1��D$��u��'��H���
�L�(���1�1�H��H����f�H�\$(dH3%(�IH��8[]A\A]A^A_�DH�H�ƒ�H���w������n���H�����ĀuH����H��uH�����H���@H�C(H��t�1����H�;I������H����H�1����H�5֞��H��H��I���8��H�D$ H�D$�f�H����H9��0I�D$H�4�H��H�L$H�t$ M����H���4�H�t$ I��I�D$I�$ uI�D$ H��H�DH�D$I��u}1�L�������t~H�T$L��H��H�����L��L�����I�$�� �N���I;l$��I�D$ �N���f��$L���c��I��H��$t2H�t$ �T���1�I�~�%��u�H�t$1�H������n���DL�l$ �D$L������L���<�I����L���x��L���@
��:���������H���g��H��
����H�{(�H����1��������ff.���H��(dH�%(H�D$1�H�T$H�t$H�t$���$��tH�T$H�L$dH3%(H��uH��(��i��f���ATUSH��H��uH�����@��u�H�H�Ѓ�H��t��u�I��H��tML��H�����H��H��$tH���!���H��[]A\�f������t�[L��]A\���fD��t�H���3��뤐��USH��H��(dH�%(H�D$1�H��uH�����fD@��u�H�H�Ѓ�H��t��u�H���tH��H��H�����ƀ��H�$$H����H��H������H��H���΃���H�KE1��{�H�y�6L��H�<$H��H�H�qH�A$H��B�D�H���H�t$��tH���H��H��H	�H��_���5DH��H�5���H��H���c��H�4$H��$��H��Āu%�H�L$dH3%(��H��([]�DH�����H�$$H��u+H�UH�{H���#��t�H�t$H�<$������H�5����H��H������H�4$H��$�{���H���p���fD�������H���W��H��s����H��$�����A�E��A9��/���L��H��B�<	�H�|9�����I��H��$t��������H������H��$HD�H��Ð��ATA��USH���=�H��E��~!A�D$�L�d�H�3H��H���9��L9�u�H��[]A\�ff.����ATA��H��USH���
��H��E��~&A�D$�L�d��H�3H��H������L9�u�H����H��[]A\�ff.����H�uH���WH�WH9t���fD������t	H�H�1��P����f�ATI��UH��SH��H�� dH�%(H�D$1�E��uRH�H��t
H�7�WH9P tI�<$��H�Y�WH;tLH�]1�H�t$dH34%(udH�� []A\�DH��H�T$H�$H�H��H�D$����H���f�I�<$H��t�@��u�H�H�ƒ�H��t���u����I�$����ff.�f���A��H�JH��
���ff.�f�����tA��H�JH����P������tH�H�1���SH��H��H�?H��t4@��u.H�H����H��t��uH�T$H�4$�@���H�T$H�4$H�H�H�H��1�[�fD��H��ĀuH�����@H�G(���UH��SH��H��H���(��H��t]H��� u*H�PH��u3H�@ H�PH�0H���m��H��H��[]�H����H��uH����H�6�WH�5�� H�81����H�����H�5^� H��H���WH�81���f���SH��H�� dH�%(H�D$1�H�<$�H�t$H������H��H���#���H�L$dH3%(uH�� 1�[�����fD��ATUSH��H�� dH�%(H�D$1�H��uH������@@��u�H��H�H�Ѓ�H��t��u�I��H��tr��H���!�L���эH��t<H��H�5��H��H�$H�l$����H�L$dH3%(H��u8H�� []A\�DH��H�5��H�������@��t�H���[���|���������S�&��1�H�5͆WH��H�x�!H��H��[�D��UH��SH������H��H�5��WH��H�x��H��H��H��[]����H�=e�W����ATUH��SH��H�� dH�%(H�D$1�I��H�<$H�T$H��u9L��H��}���ʳ�����tH�L$dH3%(u4H�� []A\�@H���P���H���H���L��H��}��H��H���������ff.����H��~'H��ĀuH��H����H�H�H��v����@��AWAVAUA�ATI��UH��SH��H�<$O�|��L���-�H���WH9uM��ulK�\�L��H��M��H���V���M��u1H��t��uH��H�����I��L94$�H��[]A\A]A^A_�M��A��M��u�L��H��������M��A��u'I�H�ƒ�H��t��uL�����I���g���K�\�L��H��L�L$M��H��赯��L�L$�ff.���AVAUATI��USH�Ӄ�t9��@����H��赾��Hc�L��H��H���T��H��[]A\A]A^��H�>�x��H��H��t_H��tH�x(tH��WH9P �FH���V���H��H�E�ĀuH����H��t�H��H��蓀��덐H�E(��f.�I�<$�7��I��I��uH���WH�5(� H�81��&��fDH��1�M�l$���H���e@H����H9��$���L��L�4�L������H����H�H�с� taH����H��u<�H��tYH��H�0H��H�����I�$�� u�I;l$�����I�D$ �@H��uJH�PH�R��H�PH��u�H�@ �H��uH�P ��@H�����I����H���WH�5z� H�81�� ��L���h��H��H�5.� H��H�T�WH�81���f.���UH��SH��(H�\YdH�%(H�D$1�H�H��tDH��t�H���"��H�;������H�D$dH3%(��H��([]�DH��t{H���C��H�;t}��t�����H��H�=m� �1����H�����H�|$H�t$��H�t$�h����H�|$�D$�"��D$�a���f�H�|$�V��v����H�|$�D$����D$�l����D���O��H��H�=�� ��f���ff.�SH��H�|$H�|$����H�|$H�5+�%苛��H�5�� H��H���y��t-H���M���H��t1�H��H�$虬�H�$H��[��1�����ff.�@��UH��SH���H��(dH�%(H�D$1��v���H�D$H9�t{H���H���!1��цH�T$H�5�H������ H����H9�},H��H�<�H�����H�D$H��� u�H;h}H�@ ��f�H�D$H�D$H�D$H�L$dH3%(H��uH��([]�����f���ATUSH��H�-�YdH�%(H�D$1�H�}��H���WH�H�H�����=H�����H����H)�H��H��訄��H��H�xH� tH�x�/��H���DŽ��H��H������H�}I���~H��tH������H�T$dH3%(L��ulH��[]A\�@L�d$L�����H�ԶWH�H�H��t�=H�����H���U���H�}uL���\�@A��H�|$�F��s������ff.����AUATUSH��H��8dH�%(H�D$(1��
���"1�1�L�d$1��R���H�$H�@��H����H9���H��H�4ؿL�,��֚��H��tQH�$H� tkH��J�*L��H�D$H�T$����H�����uH�$H� t?H��J�<(�����H�$H��H��� �k���H;X}%H�@ �p���@H�R �f�H�@ �f.�H��H�D$H�$��HEM�XH�L$(dH3%(u:H��8[]A\A]�f.����H�����L�<���1�1�H��H���m������fD��SH�����H�߅�t�g���H�؊X[�fD[����f���AUATUSH��H��8dH�%(H�D$(1��Z���"1�1�L�d$1�袀��H�$H�@��H����H9���H��H�4ؿL�,��&���H��tQH�$H� tkH��J�*L��H�D$H�T$�4��H�����tH�$H� t?H��J�<(�����H�$H��H��� �k���H;X}%H�@ �p���@H�R �f�H�@ �f.�H��H�D$H�$��HE��XH�L$(dH3%(u:H��8[]A\A]�f.��[��H���S��L��~��1�1�H��H�������f��fD��SH������H�߅�t�g���H�(�X[�fD[�R���f���UH��H��SH�����H��H��tH��H��[]�����t�H��H��[]��f�USH��H�|$H�4$H��t{H�|$���H�����H�|$H�5؆%�8���H�<$H�5�� H���%���H��H��H���W��H�5t� H�����tH�$H��H��[]�fDH���h����fDH���(���H��H��[]�ff.���H���C���1�H���ff.����UH��H��SH���H��(dH�%(H�D$1�裖��H��tH��H�l$H�$H�D$����H��H��H������1�H�T$dH3%(uH��([]����fD��AWAVAUATUH��SH��H��H�|$H�|$�I��H�|$H�5��%���H�|$H���k���L�d$I�$ M�l$��M�d$L�}1�L�u@A�� tWL��H����H9�}XL��H��H�PH�pH� tH�pI9�uOL��L�����u@H��H������L�}A�� u�H;]}
H�E �@H��1�[]A\A]A^A_��H���o����I���Q���ff.�@��H��H��������1��%��D��S�1�H�� dH�%(H�D$1��+|��H�D$�9@H����H9�}DH��H��H�xH� tH�x1�H����H�D$H��� u�H;X}
H�@ ���H�D$H�D$H�D$H���XH�L$dH3%(uH�� [����ff.�@��������H�]�X�@���G�����AU�H�=�g ATUSH���Q��H�=�H��X�9��H���X�=�L�%f�WH�=^!H�؄XI�4$�_��H�-��WH���WH��H�uH��b��H�;H�5x����3��H�;�����H�D�H�5���X��H�;�H����H�5���=��H�;�H�����H�5��袻�H�;1�H�F���H�5� 芻�H�;1�H���WH�5G��r��H�;1�H�vm��H�5�� �Z��H�;1�H����H�5H��B��H�;1�H�v��H�5+��*��H�;1�H�.���H�5� ���H�;H�� H�5�����H�;1�H����H�5�w ���H�;�H�Յ��H�5�w �ɺ�H�;H���W�H�5�论�H�;1�H����H�5�e 薺�H�;�H�w���H�5���{��H�;�����H�����H�5{��`��L�-a�WH�;�H�5\�L���B��H�;L��H�5�� �+��H�;�����H�,���H�5:g$���H�;�H��H�5�� ��H�;1�H���H�5�� �ݹ�H�;�H�.���H�5�� �¹�H�;�H���H�5�� 觹�L�-0�WH�;1�H�5�p L��茹�H�;1�L��H�5��%�x��H�;1�H�<k��H�5��`��H�;1�H�t��H�5� �H��H�;1�H���H�5	� �0��H�;1�H����H�5�� ���H�;1�H�|��H�5~����H�;�����H����H�5�� ���H�;�����H���H�5�� �ʸ�H�;1�H�����H�5�� 貸�H�;1�H�f���H�5�� 蚸�H�;1�H��r��H�5�P%肸�H�;1�H��s��H�5�� �j��H�;�����H���H�59��O��H�;�����H� ��H�5b� �4��H�;1�H�H�H�5r����H�;�H���H�5�����H�;1�H���WH�5����H�;1�H����H�5���ѷ�H�;1�H����H�5[s 蹷�H�;1�H�����H�5s�衷�H�;1�H����H�5Ss 艷�H�;1�H����H�5K��q��H�;1�H�5���H�5Ms �Y��H�;1�H�=���H�5P��A��H�;�����H�r��H�5o �&��H�;�����H���H�5F� ���H�;1�H�/�WH�5����H�;1�H����H�5� �۶�H�;�����H�L��H�5!��H�;�H�����H�5�襶�H�;�����H���H�5� 芶�H�;�����H����H�5�� �o��H�;�H�����H�5���T��H�;�H�E���H�5���9��H�;�����H����H�5�����H�;1�H����H�5�� ���H�;1�H����H�5P����H�;�H�����H�5��ӵ�H�;�H�����H�5om 踵�H�;�H�y���H�5� 蝵�H�;�H�N���H�5� 肵�H�;�H�C���H�5�� �g��H�;�H����H�5�� �L��H�;1�H����H�5�� �4��H�;1�H�ؒ��H�5�� ���H�;�����H�͹��H�5����H�;�����H�R��H�5�����H�;�H����H�5�{%�˴�H�;�H����H�5�谴�H�;�H����H�5�y%蕴�H�;�H�&��H�5�3$�z��H�;�H��f��H�5�E �_��H�;�H�0���H�5׿ �Ĺ�H�;�H�U��H�5ѿ 詹��T��H��輮�H��H���X�-�I�<$H���V1�����H�uH��H��|X�ػ�H�=�|X�H�u���H�5��H��B��H�=�|X�����H����H�5���#��H�=d|X�H����H�5�����H�=E|X�H���H�5	� ���H�=&|X1�H�E���H�5��ɸ�H�=
|X1�H�)���H�5� 譸�H�=�{X1�H�M���H�5� 葸�H�=�{X1�H�ч��H�5ý �u��H�=�{X�H���H�5��V��H�=�{X1�H�F�H�5���:��H�={{X1�H�z�H�5�����H�=_{X�����H����H�5^j ��H�=@{X�����H���H�5�� ���H�=!{X1�H�����H�5m��ķ�H�={X1�H�T��H�5n 訷�H�=�zX1�H��H�5�茷�H�=�zX1�H�<��H�5�m �p��H�=�zX1�H�0�H�5���T��H�=�zX1�H���H�5�m �8��H�=yzX1�H���H�5v����H�=]zX1�H���H�5�����H�=AzX1�H��g��H�59����H�=%zX1�H�T��H�5�� �ȶ�H�=	zX�H�u�H�5J�詶�H�=�yX�����H�&��H�5b
!芶�H�=�yX�����H���H�54� �k��H�=�yX1�H����H�5k��O��H�=�yX1�H�/c��H�5H� �3��H�=tyX1�H��t��H�5�����H�=XyX1�H�gx��H�5w���H�=<yX�H�hv��H�5:� �ܵ�H�=yX1�H�lm��H�5Og ��H�=yX1�H�Pm��H�5�}%褵�H�=�xX1�H��l��H�5��舵�H�=�xX1�H�p��H�5H%�l��H�=�xX1�H�Lq��H�5� �P��H�=�xX�����H�����H�5���1��H�=rxX�H�·��H�5�����H�=SxX�H�����H�5*g ���H�=4xX�H�����H�5�� �Դ�H�=xX�H��p��H�5�� 赴�H�=�wX�H�R���H�5p� 薴�H�=�wX�H��p��H�5Z� �w��H�=�wX1�H����H�5w� �[��H�=�wX1�H����H�5���?��H�=�wX�H�̄��H�5��� ��H�=awX�H�=q��H�5�����H�=BwX�����H����H�5)� ���H�=#wX1�H�Bd��H�5� �Ƴ�H�=wX�z��H�5a] H��H�����H��H�5չ �y��H��H�5���j��H��H�5ȹ �[��H�5�vXH��H�=� []A\A]���ff.���H�5�VH�=Y �y�f���H���ca��p�y2
�K���g�* 腕���KH���������L藹���[���,���(�CK����y
�����?]�������;��
��D�������:�6
�(�����n��I��U������s���5�	��k�fp��y��@藖	袲���MD�\���s/�~|���T��6���b��H���|�ff.����H���3����IU����	�"��\�u���`6�����������g���蒏�F����虢�dLH�5� H�=z�,H����f.���H�����1�H���ff.��1�H��u	��SH���ǹ�¸��u[�f.�H�[��H����ÐAVAUATI��USH�H��taA�D$��~SA��I��1��f�H�E��A9\$~.Hc�H��H�lE��u�H�����u)I�|$��A9\$�f�����[L��]A\A]A^����H�����I�|$��u�H��t�@��u�H�E%�H=�u�L9m�q����t���ff.����H��H��1�����1�H������UH��SH��H�H� u>�q��E��~&1��HcÃ�H��HEH�x�I��9]�H��1�[]�H��$����H���[]�f.���H����
���H�l� ��Hc�H�>��@H�� H���@H�� ���H�� ���H�׹ ���H�� ��H�ڹ ��H��� ��H�+���H���#�{���@H�> �k���@H��� �[���@H�:�#�K���@H�V� �;���@H�#� �+���ff.����U��H��S����H��fH�=S�WffH�K��H��H��(H�8H��[]钑�f���AUI��1�ATI���UH�պ(SH������L��I�EH���	��H�k H�CH��[]A\A]�fD��H��x
H�VH���ڛ�PH�"�WH�5ӹ H�81������1�H��H�H��u�fDH�BH�B H������@��ATI��1�UH����SH�Ӻ(�>��L�`H�hH�X []A\�ff.�f���H��H�H������
��	�H�Z� Hc�H�>��@1�H���f��G H��H���@H���w���H���fDH�G H��H�����H�G8H��tH��H�5����H���Q���ff.�@��AUATA��USH��H�7dH�%(H�D$1�H��H������
�	�H�
Ʒ ��H��Hc�H�>��H�CI��H��tL��H�$�{���H�$H9CtH�CH�CL��H�$�]���H�$H9CtH�CE��u�tH�}tH���v��fDH�D$dH3%(��H��[]A\A]ÐH�����H�EH��H�$���H�$H9EtH�EH�}����fDE����H�H��t��A������KH�E�|���@H��m����G ��u�@��H�E��H�<��~���9] w�H�EH��H�$�i���H�$H9EtH�EH�]E����H��uH��H�H���MH���p�����H�����H�}����E������H�} �t�������H�_H� ���H�}���H����������<�����H� � ��Hc�H�>���A�����r���f�I��E���d���@I�}I�E H�4�����M�mM��u��A����H��g����2���f�E���'���H�辈�����f�H��7���H�}�.���H�}�%���H�} ��������������H��;��H�}�2�����DH�CH��H�$�ئ��H�$H9C�����H�C���H�{踦��E������H�{H���r����-��h���H�{菦���Z���f.�H�{�W��H�C�>���H�}����������H�}�4��H�}H�E�'��H�E�����i��f���S1�H��H�5����z�H��[�A�����$����ff.�f���SH�_8H��t"H��H�5h���H���0�H��[��[�ff.���H��H�H������
��H�� Hc�H�>��@H�H��t�otH���@H�H���{��H�H���k��H�����H���f.�D��H�����������t
1�������€�@��@E‰€���E‰ƒ�@@�ǀE‰€ʀ��E��f����X�fD��H�G H�@H�D�ff.���H�H�@ H�@H�D�ff.��������tH��H����?��?HE�����H��	��w0H������H����H��H�H���H�� �fDH��v:�H��u�v^�H��t�H���HE���H��sZH��
tTH����HE�ÐH����HE��DH����HE��f���f.���f.���H�G �xRH�H�Ѓ��f.���H�G H�@ ���H�H�@ H�@ �S1���������t��t1�[����߾[��1�����ff.����USH��H��Hcw8HcW<Hw0�����HcK<H9�~6H�����H��y
H��H��[]�H��C8)‰S<���H��H��[]�H�C81�H��H��[]�ff.��SH��H���H��t���Hǃ�H���H��t�?��Hǃ�[�f�SH�����H���H��t�F��Hǃ�ǃ�[�ff.�@��SH�GH���H�TH�GH�?H�0芸�H�C1�[�f�SH��H���H��t����Hǃ�H���H��t���Hǃ��C�����C�s��H�ChH��H�C`�CpH�Cx[����ff.�@AWAVI��AUE��ATI��UH��SH��H��tyH��E1����H9�tLH����H9���H��t-H��t'A��u��uzI�,$I�H��[]A\A]A^A_�@E��t[��uW1�I�$I�H��[]A\A]A^A_�賙�H�����H��1�H9�t�A��u���fD�;��H���k���H���ff.�ATE1�US�jP��~!H��Hc�I��H9�$HcsLHsD�w��kL)kPL��[]A\�f�Lc�L����fDATI��USH�~DH��H�ot{HcSPLcCTH�*H��I9���HcsLH�{DH��H9�|3)��I�t$�CL�KPI�$ tI�t$H�[H��]H�A\���@I)�H�L��һ�KP�CTH�{D)��@H�~h�t<H�CLH�����DHc�H9�}Hc�H���CT��H��H�CD�D�����F%���% ���H���WH�5� H�81�������H�GH��tH�x �
��f.���f.�AUATA��USH��H��Hc��H����H�*I��H��Hc�H����H��H���K��H�s`H���o������A�4<���D)≓�uǃ�H��H��[]A\A]�fD��������9�~�H���Hc�Hc�H��X���fDH���(��H��I�E�q���@��u���ff.����H�=�� 黔�ff.�UH��SH��H�����H)�H=wH��[]�DH��H��H��[]�g������'�����H���#��H��H��ff.����H���?�q��H��H��f.�ATUSH�_H��dH�%(H�D$1�H� tH�_H�o���H�T$H��L�$+H��L��藆���|tH�L$dH3%(H��u"H��[]A\ÐHc|$H��H)�H��͚�H����賿���H������H�@H���ff.����UH��SH��H��H�t$H�����uH�G H�@(H��H��[]�DH�|$�.��H�|$H�uH�C H�@(H��H��[]�@H�k ���H�E(H��H��[]Ð��H��H�:�q����UH��SH�����H��H���:��H��H��[]�ff.����H�郃���H���ì�H���f����������w�����鷯��U1�SH��H��dH�%(H�D$1�H��t;H�=�aXH��tR1�I�����H��H�5�aX艃�H�$1�H��$t	H��������C��	ЈCH�D$dH3%(u"H��[]Ð�H�=�� �ߪ�H��aX�����UH��SH��
H��H�����H��t�tf.�H���h���H�H�у�H��u�H�x
u�H�H�� tH�HH�closed sH9u��ytreau��ymu�H��H��[]�D��H�H�w��}�ff.�AUATI��UH��S��H�����A����I�T$ E��H��A��H��H�zH����E��[]A\A]���fD��H��H�WH�w�?����H���ff.�@��U��SH��H��H�F H��H�h�q��H�C �xP�tH9huH���[]ÿ$�[��ff.���H;5�`XtL�N I�AH��I�AI�A�ff.�f���H�O H��1�H�yH�H��H�APH)���X���H�H�B H�H�@H�@H�p H���ff.�f�AVAUATUSH�H�����t��t'H��[]H�A\A]A^��1�[]A\A]A^�D�H��t�I��H��I��H�����I��H��tsL��H�EA��L��H��覞�I�^L�eI9�I�FI� tI�F�D�듐L��L�����H��I�~H)�I� tI�~H�1�L���~���H��[]A\A]A^������H�%�VH���X臧�H�P �@uH�P H�H�BH�BH�B H���D��SH��H�?�p��H�{�g��H�{ �^��H�{(�U��H�{H[�K��ff.���駖����������H��H�WH�w1��?藁�H��H����H���OH�WH�w�?�f��H��H��ff.�@��H���� ��H��H��f���H������H��H��f���H�OH�1"H�7H���y�fD��H�O H�WH�w��Ȥ����UH��SH��H��H�T$H�|$�Q��H�D$H��t H��辏�1�H�=��H��1�苐��H�D$H�EH��[]�ff.���H���c
1�H���ff.����ATI��UH��S�����1ɉ�L��H����跠�H���/��uH��[]A\�H�=�WH��H��[H�+!]A\�x���ATI��U��SH�����u�B��1�H��L��[��]��A\�J��H�����H�=k� H��H��1�螻���ff.����AVI��AUA��ATUS��~D�G�H��H�-��L�d��H�;H���ī�H���|��H��H����jI9�u�A��tf�A��~Ic�L���p��H���(��H��t�tH��[]A\A]A^�H���H��u�H�=u�WH���jH��[]A\A]A^�f�I��ff.���ATUH��S��H��dH�%(H��$�1��$��H���"L�d$@I�D$L�d$ H�D$(I�D$H�D$0H�D$H�D$8���H�E�H�D$@H�D$ H�x��H��tHc�H�t�H�1��H��H9�tH�H9��H��t�H��H�H9�u�9���H�|$H��ulH�D$XI�|$ 豀�I�|$0觀�I�|$@蝀�I�|$P蓀�L��L��H��H�=�>�:v�H��$�dH3%(uGH�İ[]A\��3��H�D$H�D$H�T$H�D$X�DH���H�����H��$u�����軵����躠�f.���SH��H� �_��H�{0�V��H�{@�M��H�{P�D��[�ff.�f���AWAVA��AUATI��USH��xdH�%(H�D$h1�賋�H������E���uA����M�<$A����I�A�^�L�|$A����L�l$�/�L���赣�H�|$�;��L��賚�H�D� ���t4Hc�M�|�I�?�9��H�D$H��u�I�?@��t5H���H�|� ���u�A����H�T� Jc�H�>��f.�諳�H����fDL��A�^�蔳�H�D$A���F���H�|$1�����V�H�5�� �1��ͻ������t$P�t$P1�L�L$PL�D$HH�L$@H�T$8H�t$0H�|$蓝�ZYH����H�@H���H�DH�L$hdH3%(��H��x[]A\A]A^A_�@H�t$ H�|$1��7���DH�L$0H�T$(1�H�t$ H�|$����L�D$8H�L$01�H�T$(H�t$ H�|$����Z���L�L$@L�D$81�H�L$0H�T$(H�t$ H�|$�Ü��-���fDH�����H�T$(H�t$ 1�H�|$蒜����DH����������Ɖ�1��8�y�訲�H���WH�5u� H�81�� ��H�i�WH�5r� H�81�����AWAVI��AUATM��USH��hH�t$H�T$H�L$dH�%(H�D$X1�M����A�(A��A���:L��芛�H����H�XL)�I��E���I����M����I��*��H��t!L�T$ L���+L��L��蔈�B�D< I��L�����A��M��tA�,$E���fD�����I��H��t�;-���{���H�L$H�T$A��H��L����H�D$XdH3%(�GH��h[]A\A]A^A_�A�����M��tA�,$H�|$L��1�E1�H�5U� ����x����H�5f� L����������@I���H�5=� I��L��輁�u������DH�|$L��1����H�5�� �l�������H���ȷ�xd��u	D9��������輌�H�����@L��1���I���G���fDE1�1�����fDE1�A�����������fDH�|$H��H�5Q� 1�1��؄�������ff.�H��@�ǀ��������t������to��tZ��t5��t!H���W��H�5�� H�81��/���H�/f#H���@��H�z� H�p� HE�H���H��g#H���@H�J� ��H�hh#H���H��WH�5�� H�81�贸�@����@��@t5��������H�&��uX��H�h#H��HD��������u2����@�ǀuoH�� ��u��H�К H��� HD����t{PH�s�W��H�5ޚ H�81����H��� ��uс�H�a� H��� HD��@����H��� ��u���H��� H�V� HD���H��#@���k�����H��d#H�y6$HD��fD������t+H�� ���0�����H��� H��� HD��H�� ��������H��e#H�Ù HD��H�љ ��������H�p� H��� HD���PXH������H��WH�5�� H�81��Ͷ�ff.�f�ATI��UH��S�1��H�UH�=f� ����M��H��A�$�t�� tH���Ғ�H���X�H��H�0�n���f�ATA��UH��SH��H��0dH�%(H�D$(1�躹�H��ut�M1����tG�$�����fD�d$H��t'H�si�H��S㥛� H��H��?H��H��H)��H�����H�\$(dH3%(uYH��0[]A\�f.�1�H��H�=$�H�$H�D$�D$f�T$H�l$fD�d$�Z��1�H�D$����������DH����xNH��t/@��u)H�H�ƒ�H��uH�NH�V�� u!H�D
��8u=�Hc�H��H�D?��H�V��H�T$萂�H�T$H�=� �0H����H�C�WH�5� H�81����f�SH��H��dH�%(H��$�1�H��裥�x0�D$%�=���H��$�dH3%(��uH�Ġ[���H��H�=H� �0艸��Ԫ�@H���t�DAVAUATUHc�SH��H��D�gpH�GhH�OxA����H����L�pH�G`H��teL�hD��L��L���C��H���H��tn����Hǃ�HM�����-��H���H��[]A\A]A^�f�H�L$���H�L$��L�-��#M���x���L��D��L���ۃ�H���Ï�ATUH��SH�?H��t@諘�I��H���0��I�D$E1�H9�~H�H)�H���e��H+CH9�r,D��[]A\�@1�A�蓄�H�D��[]A\��H��H����D��[]A\�ff.�f�ATI��UH��H�SH��H��0H�|$H�|$dH�%(H�D$(1��=���H�|$H�wH� tH�wH�H�T$H�\$H�t$H�5>\L�d$ �dcH�D$H��xH�L$(dH3%(u!H��0[]A\����I�T$ H�=�� �0�Y��褨�@ATA��UH��SH����H��H��裡�E��u[]A\�f�H��H��[]A\����yAVA��AUATUSH��t\L�$7I��L9�r"�AfDH��L��L��H�A�U A9�tSI9�v!L��L��H���Г�Hc���IcEH�I9�w�[1�]A\A]A^�f�H��D���p�H��H�@H��t�[]A\A]A^�H��[]A\A]A^�@S�GH���ƒ���tW�t�{��m�{��u+[�f���m�{��t�1��h�{[�m��h�{[�}m�D� �pm�{��t�1��h�{�Zm�����ATI��UH��SH��H��G�O���H�H�8H���i��~�8�U��L��H��H���m�[�����]A\�ff.�f�H��u
�f�UH��SH��H��H�5�JX�v�H��t�U��������H�����uMH�5�JXH����v�UH��t��������H�����u#����tH��[]�fD���U뫃��U��H�{WH�5› H�81�蠯�H��zWH�5p� H�81�舯�H��zWH�5�� H�81��p��H��zWH�5Y� H�81��X��H��zWH�5b� H�81��@��ATI��UH��SH�� dH�%(H�D$1�H��rWH�H�D$��t.~:H�H�^H�D$H��ujI�$H������tGH��f�H�H�t$H��uZI�$H�����H�]H�D$dH3%(ulH�� []A\�f.�H���X��H����H�|$�֓�H�D$��H���py�H�t$H��u�H�H�D$�^����H������貤�f���H�G H�x(H��tH��t�r�@��f.�1�1��Wx����H�>����ATUH��SH9�tQI���X��I�D$ H�] �o�oHK�oP S �oX0H�{ [0�o`@c@H�@PH�CP�e�H�C H��[]A\��ATI��USH��H����H��H���|�L��H���|�I��H��H�5�� H��H�ApWH�81��7�����ATI��UH�-GHXSH��H�����tH��[]A\�l�L��H��H���u���D��UA���/SH��dH�%(H��$x1�H��H���H�A���H�H�FA��thH�~A���H�n�A9���H�$H�D$H����@����H�H�|$H��t/@����H�H�l$�$f�H�$H�D$H�D$����H�D$����H�=��H��H�D�H���b�H�|$8H�@H�x(H�D?H��$xdH3%(uOH�Ĉ[]�fD�[����f�H���x��H���`����k��H���;�����D�����������H�D$��������ff.�@ATA��UH��S��x���t1ۃ�Ut��[]A\�@H�}�蚄�t�H�uE��t
H��D������H�=���Ԧ��f�ATL�gPUSH���1�L�������t*H�s(H�{P1ɺ�n�Ņ�x�1�[��]A\��H��� H�C@�(x��C4��[]A\�ff.��PX�1�H����ff.�SH��觝�H��蟮�H��E1�1�1�H��[���ff.��H��1�1���@UH��SH��H��菾�H�S H��1�I��L���H��H�zP1��m�ZYH��$tH�C �@QH��[]�D��ATI��UH�-�DXSH��H��裬�tH��[]A\�Ӡ�L��H��H���%���DUH��SH���A��A��H��u��u<E��u��t���]H��[]�f.���ub���]H��[]�E��u�H��t6�z�t$uH��輐�t$��t�H�mtWH�5~� H�81����@�t$�ou�t$H���H�?tWH�5�� H�81��ި�ff.�AWAVI��AUI��ATUSH��H��(�opdH�%(H�D$1�H����H���RH���s�I��H��tH���y��xI��H�$�PL������H�L$H��E1�1�H���k��H�D$H�L$H�$H�{�����H�$�kpH��H�C`H�D$H�ChH�D$H�Cx�9��H�D$dH3%(�ZH��([]A\A]A^A_�fDI��H���U��L��H�D$��r�H����H�xu/H�PH� tH�P�:-uH�D$1�H�D$H�$�L�����H�T$H�$H9����ɫ�H�T$H9�����H�t$L���|�������DH�L$H��E1�1�1��L��H�D$����fDH��蠎������I�|$I�$ tI�|$H�L$H��E1�L�������H�$H�D$�k���fDL���8��H�$H9D$�;���H�D$�-������fD��H��H�OH�WH�wH�?����H���f.���AVAUATUSH�O(H��H��t�W����DH�S H�s�{訳�H��H��yp�C��ui�s�8u_H�k(�s�L�kL�#D�0H��t7H��L��L�������tYE��uh���u�[H�����]A\A]A^�@L���h���t���f�H��[]A\A]A^�@H�wH�?��/����O���u��s��nH���������r�D�0H������AWAVAUI��ATUH��SH��H��L�f`M���<藩�I9��.������PD�cpL�{`ǃ�L�sxD����D$M�����R��H�ShI9��eH���H�zH�T$�n��H�T$H��I����A����L���H��L�rD������H���D�cpH�KxL��L��A���D��踌�H���H���BH���H���-H������H���z�H���A�EH�����H���ݖ�A�EH��[]A\A]A^A_�fD�C����H��Cp�������H��[]A\A]A^A_��H����Z���H�{hH����耤�H��H���L���H���H��H���f���H��[]A\A]A^A_ÐH��������H�5i�#�T$L��ǃ�Hǃ�H��腋�H���H���%Hǃ��C�u	����H���H������Cp�u_�D$L���Hǃ����Hǃ�����H�S`����L�c`���I9�����H�{`��DA����L���H�zL�5��#D���M���ȋ�H�������@H���`��xuH����������H���B��H�5�� H�PH��mWH�81��&��L��D��L���xr�H���`~�H�5	�#�T$H���]r�H���E~�D��UH��H��SH��H����t �Cs�H�U H�H�BH�BH��H��[]��Ê��ސ��SH�@��t�
s�H�S H�H�BH�B[�D蓊�H�S H�H�BH�B[�S@��t!��r�H����n�ۉH�����[���S��H����ff.���USH��H��H�D;XH��u H�-sh#�H��胄�H�$;XH��t�H��1�1�H���e�H��H��[]�ff.���USH��H��H��:XH��u H�-��#�H���#��H��:XH��t�1�1�H��H���d�H��$tH�����u(H�ciWE1�H��H��H���H�=,���L�1����H��H��[]����AVAUATUSH�O(H��H��t�W����D�SH�s �{���H��H��yq�C��uj�um�8u`H�k(�gm�L�kL�#D�0H��t8H��L��L���e����tZE��ui���u�[H�����]A\A]A^�DL���H���t���f�H��[]A\A]A^�@H�wH�?������O���u���l��nH���������l�D�0H��������AVAUATUSH�O(H��H��t�W����DH�S H�s�{�(g�H��H��yp�C��ui�tl�8u_H�k(�fl�L�kL�#D�0H��t7H��L��L���d����tYE��uh���u�[H�����]A\A]A^�@L���H���t���f�H��[]A\A]A^�@H�wH�?������O���u���k��nH���������k�D�0H��������ATUSL�gM���H���H�=̵�gh�H��H��������H�{��]�H��H����o�H�5J�"�H����I�t$ H��u?A�T$����H�5π H��1����[H��]H�5��#A\鹅�f�H���xo�A�D$��yκ	H�5�� H��苅��f�H��tzH������u+����H��eWH�8�5���H�1iWH�8�#����H�Q`WH�8�����[]A\�G����H�5� H������6����H��eWH�8�����H��aWH�8�����H�idWH�8����1�H9=O7XtEH9=>7X�t7H9=(7XtNH9=7Xt=H;=�6X�tH��@��u�x��H�������m�H���fD��f���f.���USH��H���n�H��t&H�3H�KE1�H��H�S L�CH�6軉�H��H��$u"H�K H�SH�s�{H��[]�T��H�ǨuH��[]��V�fD�#m�x
H��H��H�[]�XH��[]�'������H��H�֋WH���+u�ff.����H��H�5���騊��AUATUSH��XdH�%(H�D$H1���u"H�\$HdH3%(��H��X[]A\A]�H��I��A���m�H��t I�MI�UE1�H��H�u�f�H��H��$u|�'��H���H�l$H�D$�E�D$ �D$$D�d$(L�l$0H�D$8H��uH�T$�H�5M���H���Չ��N����+��H�$H��H�T$H�D$8���H�Ǩu�U�������k�xH��H�����H��������蒐�f�AUI��ATI��USH��H��XdH�%(H�D$H1��l�H��t!H�3E1�L��L��H���e�H��H��$�����H���H�\$H�D$�C�D$ �D$$L�l$(L�d$0H�D$8H��u;H�T$�H�5"�H���ʈ�H�L$HdH3%(uUH��X[]A\A]�����H�$H��H�T$H�D$8�H�Ǩu	�dT��f��j�xH��H��H������耏�AUI��ATI��USH��H��XdH�%(H�D$H1��xk�H��t!H�3E1�L��L��H�����H��H��$�����H���H�\$H�D$�C�D$ �D$$L�l$(L�d$0H�D$8H��u;H�T$�H�52���H��躇�H�L$HdH3%(uUH��X[]A\A]�����H�$H��H�T$H�D$8�H�Ǩu	�TS��f��i�xH��H��H�������p����USH��H���~j�H��t&H�3H�KE1�H��H�S L�CH�6�;c�H��H��$u"H�;H��H�ڹ[H�5���]��DH�ǨuH��[]�R�fD��h�x
H��H��H�[]�XH��[]������1�饆�D��USH��H����i�H��uH�CH�{��tH��H��H�5���[]�H}��H��H�ڹ[H�5����]�F��fDH�sH�K E1�H��H�SH�6���H��H��$t�H�ǨuH��[]��Q��#h�x
H��H��H�[]�ZH��[]�'������USH����cW��x,9�v(1����蚦��t%D����-�cW��9�w�H��[]�f��c�8	�������U1����SH���H���tX�‰Ã����N�9�uH��[]��1��ھ�����t��Wc�8�{�ډ�H�=E� H��1��y��6c�8�{��H�=� H��1��ly�ff.����S���4f��[��ff.������AVI��AUA��ATA��US�'�fD��b�8u8��t31���v�D��D��L��1�肦�Ń��tӅ�x��~�LbW��t~ [��]A\A]A^����e�[��]A\A]A^�1��������t����u���ue��aW��8b�8�z��H�=h� H��1��nx�ff.���H��H�H��H�zH� tH�z�P�p�&��H��H��ff.�@AUATUSH��H�$H��1ҾH�=Fw dH�%(H��$1��Ԅ�Ņ���H����H���\�I��H����L�$H��H��	�f.�H�XL��H)�H��	~x�
H���CR�H��tf�;FDSiu�f�{zeu΀{:u��H�{�
1��Ex��H���P��f�H��$dH3%(��uH��[]A\A]�D��D����O���觉����ATA��US9�t1��~
�P`W��u(��D���J�Ņ�x���c��[]A\�f�����@��.��Ń��u��R`�8&u���_W��D���iJ���D����rI�f�����_WAT��A��U��S��t'�1�諢�Ã��t4��~��[]A\��1�1�臢�Å�x���b��[]A\��_�8u�1�1�D����X���t��Q_W���D����"��f���H���wH�W�?��t1����H��H��D�����H��H��f.���PXH�5�t H��H�8]WH�81�螑�ff.���H��H��H��uH���8����u�H�H�ʃ�H��t��u�H��t
H���D��t�H��H�D$�k�H�D$��ff.�@��H���Û�H�@H�xht0H�x`H��tH���Ƒ�fD�[]�H��H��鯑���H���ff.���H���c��H�PH�zhH��uH�z`�BtH��t'H���^��fDH��u���\�H����f��H���fD��H��t�PH�>YWH�5�s H�81��=��ff.�f���SH�_H���u�H���[�fD��ATUH��SH��H�����u!L�eL����u�I��$�H��[]A\�DH��耛���ff.���SH���u�C��x[����DU��SH��H���pp�SP��t�C tH��[]�@��\���sP�{��Hc���w�H��xH�CLH��H��[]�m���D�\���t��\�8u�K @��u���AUATUSH��H�/H��u
H��[]A\A]�f�H��H��蕙�L�`L���o�H���э�M�d$`I��M��t|M9�t�H��藔�=t@H�yXWH;(uiL��1�1��8��H�5��#H��H���&��H�+H��[]A\A]��H�}�h���A�|$u�L����u��P�����Z�I���w���I�MH��YWH�5!| I�T$H�81����f.�AVAUI��ATUSH��H����:usA�H�kH�KH�����H��L������H��L��H��[]A\A]A^����o��|$A�Hc�H�4$L�4����H�4$�|$��u'1�����9�~��9�t��1��n�f�L���hT��H�4$I����ff.�f���AVAUA��ATUH��SH��H��t��t1蜡�E1�H��D��H�5"(XH��[A��]A\A]A^�F��fDH���H��u�E��E��~HA��Ic�L�t��K��uE��A��@L���S�I��E��tL�mA��tH�mA��t��D���n�f��H���3��L�`L���Wm�L��H��L��L����H��[]A\A]A^�f.���UH��SH�����H�XH���m�CH�����u
�CH��H��[]�@%�����CH��H��[]�ff.���SH�_H���l�C[%��H����ff.����S�f��H�XH���l�HcS���tH�D[�fD��AU��ATUSH��HdH�%(H�L$81Ʌ�~H��H�>��t!����������l���H�D$@�����7t�H��H�t$H����Hc�����H��I��赕�H�XH����k�CH�T$ H��H�5���l$$�D$ L�l$(�q��t��tL��tDH�t$H�S ���D��H�L$8dH3%(u7H��H[]A\A]�f��[�H���_�����H�D$���H�D$��؀�H�F�$���ff.�@��ATUSH��0dH�%(H�D$(1���~H��H���t�������k�D�H�T$����H�H�t$H�����H�����H��I��胔�H�hH���j�EH�T$H��H�5��H�\$�D$L�d$ ��o�H�t$H�U ���"��H�L$(dH3%(u+H��0[]A\�f�H���q�H���n���H�V�T������f���ATUS���H��H���������H�~�o�A�����H�H��赓�H�hH����i�E�t�uP������������uU�PV�H��D����}�<q�H��H��xTH�@H�x5H�D[]A\�E1��u�H���H~�H���s����U<��t��n��@H��[]A\���@��U���t���U�H�U H�=M| �0�^����i�H�QWH�5~k H�81�������S趒�H�XH����h�C[H��=H��?���f.���S膒�H�XH���h�{�H�[��H�H�Ѓ��@��SH�_H���h�HcC[H�D�@���
H�l ��ffD���
H��k ���fD��H�G H�xH�����tH���bS�H��H������fD�?�ff.���H���4S�@��H�G H�xH�����tH���S�H��H������fD�[?�ff.���USH��H��H�oH���l�H�EXH��HE�H��H��[]�f���SH����z�H9�tH�@H��t�H��yH�[H���Bl�S���x1�[�f���H�G H�xH�����t�z�PH�OWH�5�/ H�81����ff.�f���AVAUATUSH�� dH�%(H�D$1���~"H���t,H�n���<L�f�9�t���;g�A����t1H��uH��HWH�5:i H�81�苅���u�H���H��u�H;�Xt6H;�Xt-H;�Xt$H;�XtH;�XtH;�X��DH���y�H���؏�L�hL���e�H����@����H�E1�I��tA����M��I�H;UX��H;8X�
H;3X�H;X�	H;X�H;�X��H�L$dH3%(��H�� []A\A]A^��H���(z�H���[���1��T���f�L���z�H;�XI���Y����A�E�$�U�H��L��H�l$H�5�����D$L�t$�7j�I�ą��^�����&�U���I�u H�=wg I��1�L��H���(��D��H���=��D�뎐�놿�|�����r����	�h����A����H�tNWH��H�5�f H�81��p����y�ff.���AUATE1�USH��H��H�����A���w�H9�t&H���ߍ�H�hH���d�H��t
D�mE����H��蹍�H�XH����c�H��t�k��yH���[]A\A]Ð1��������t$�ƒ�D9�t҃���D	��1��ݒ�t��$P�H�S H�=9v �0貆�f�1��D��豒��t-�ƒ�D9��]�����D��D	��1�臒��>�����O�H�U H�=�u �0�X�����USH��H���nv�H9�t H����H�hH����b�H��t�}��yIH��行�H�XH����b�H��t�{��x1�����t6�t)H���[]��1���ԑ��t$�u�H��1�[]��
O�H�S H�=u �0蛅��N�H�U H�=�t �0脅�@��UH��SH���u�H����H�XH���b�CH�����t���CH��H��[]�fD��CH��H��[]����S�Fu�H��螋�H�XH����a�C[H��<H��?���f���AWAVAUI��ATUSH��H�dH�%(H�D$x1�H�G H�D$H�GH�D$H�GH�D$(H�GH�D$ H�����D$DE1�H�D$0H�D$8H�D$ H���{H�D$H�D$(H����L�D$H�L$A�|$H�T$8H�t$0襄���H�D$�T$D	������:�H�|$0H�D$�M�u�H�|$H���;��H�|$8�_�u�H�|$H�����H�|$�1�|u�H�|$H����H�|$0��H�D$H�H�T$0�� ��H��H�L�|$1�M�uPL�l$H�D$0�p�H����H9�}nH��H���x�H��I���n�H���Ή�L�hL����_�E�mL��D���Ë�uL��D��贋�t
H�|$0L���S��H��H��� u�H�CH9�|�L�l$H�|$8��H�D$H�H�T$�� �'H��H�hE1�I�]0L�t$ L�l$�Z@H����I9�}[L��L���Aw�H��I���6n�H���r�H�����L�xL���*_�A�H������I��I��� u�I�FI9�|�L�l$H�|$��H�D$H�H�T$�� �ZH��H�@I��@1�H�l$(L�l$H�D$��H����H9���H��H���v�H��I���zm�I��H����q�L��I���D��L�hL���h^�A�}H�t$�:���M9�t*L�����L�pL���9^�A�~H�t$�����H��H�E�� �b���H�EH9��e���H�L$xdH3%(H�D$��H�Ĉ[]A\A]A^A_�f.�H��t	�����H���uE�DH���gH�|$ ��XE��H���WH�|$(��8E��1��i7����@L��H������:���H�|$L���Ӎ�����fDH�H�ƒ�H���c���H�kE1�E1�E1�H�l$L���xfDH����H9�}|H�D$H�<���k�H��趆�L�xL����\�A�H�t$�,>�A�OP��uA�����tA�I�uPA���>�A�GA9�DL�H�H���� u�H;k}H�C �DH�D$D�t$DH�D$0�D$D���"���H�D$hH�D$`H�D$`H�D$����@������H�D$ H�H����H���y���H�T$ M�u0H�\$E1�L�l$HE��L�t$8H�jH���af�H����I9���H��J�<���j�H���<o�H��蔅�L�`L���[�A�|$L���=�A�D$A9�DL�H�I���� u�L;{�YH�C �H�D$H�@ ���f�H�D$H�@ ����f�H�D$H�@ ����f�1��I5�����@1��95����@������H�D$(H�H����H�������H�l$(I�U@E1�H�\$PH�T$L��H�UL�l$XE��H�T$H��H����H9���H�D$HH�<��i�I��H���'n�L��I���|��L�pL���Z�A�~H�t$��;�A�FA9�DL�M9�t/L���J��L�`L���nZ�A�|$H�t$�;�A�D$A9�DL�H�EH���� �b���H;]}$H�E �h���E��H�\$L�l$H��fDE��H�\$PL�l$X���F�1��8�6��o���UH��SH��H�_H����^�H��H��uH�CXH�SX�H��HD�H��[]�H���m�H����USH��H�G H�XH�DWH9tH��H��uH������H�E �@P�H��[]����u�H���H��uѾH���bU�����H�W H���zPt�zQt	��H��H�|$�r���H�D$H�P �BQH�����SH����X�Ct�CP��u[�@H�߾[�R�H��@WH�5e! H�81���w�f.���AUATI��UH��SH��H��8dH�%(H�D$(1�H��t
@����H����m�H��@����H�L��H�l$ ��k�H�����H�hH���AX�H���u�EH��H�,$�D$�&9�I��H�@I�$ ��H�D$I�D$H��H��H�5���H�D$�[f�I��H����L��H���D��H�@L�xeK�D-H�L$(dH3%(uqH��8[]A\A]�DH���H������@���!���H���^l�H������fDI�D$�U���fDL���>����C�H�U H�=~i �0�z���l�f.���AUATUH��SH��H��H��t
@����H���Ul�H��H���jj�H���€�H�hH����V�H���>t�E<�����H����7�H� I��H�pH�PuGH�����I��H��x=L��H�����H��K�D-[]A\A]�@H���H���k����q���H�p��C�H�U H�=bh �0�y���������u�GP�f����G�v1���t�@H���_�H���DAVAUA��ATI��U��SH�� dH�%(H�D$1�H����^�H��H�$�HQ�D�l$L�-L��l$�fD�KB�8uFA�1�H��L��H�������r�Ņ�x։��v��H�L$dH3%(utH�� []A\A]A^��A�D�0D���`D�t<L�-����
��A�8u&A�1�H��L��H������\r�Ņ�x��@�A�L��D��H�=fh �9x��j�@��AUATI��UH��SH��H��(dH�%(H�D$1��tF�H��t6H��H��L��H����]�H�L$dH3%(��H��([]A\A]�fDL���P~�L�`L���tT�H��H���H��uI��$�E1�H��tH��I����H�$H�T$H���t:��D�A�|$L����Hc؅�x+L���T�1����`���H�D�V����+\����i��@�1��8�0�fD���GP��t�@H�?���N�ff.�AUHc�A��ATH�tI��UH��S�H���[N�H�����tH��H�Ǩu!�[��t!E��IE�H��H��[]A\A]���C��u�H��1�H��[]A\A]�ff.�@��AUI��ATA��H��UH��SH����|�H�XH���S�H���]p�A��w'�uI�UH��H���[]A\A]� ���D���X�����AWI��AVA��AUATUSH��H�$���s���-H����D$1�A�$DH��t"H�������xH���H���hH�IXH��u!@�H�=b#��T�H�(XH��t�H���{u�H9���H�XH��u'L�-�#��L���T�H��
XH��t�H���7u�H9��NH��
XH��u#L�-=Z �L���KT�H��
XH��t�H���t�H9��H�o
XH��u#L�-P#�L���T�H�L
XH��t�H���t�H9���H�'
XH��u#L�-9T �L����S�H�
XH��t�H���wt�H9���H��	XH��u#L�-T �L���S�H��	XH��t�H���7t�H9��^H��	XH��uf��H�=�S �OS�H�x	XH��t�H���s�H9���H�S	XH��u#fD�
H�=mS �S�H�0	XH��t�H���s�H9�tDH�	XH��u'f.��H�=8S ��R�H��XH��t�H���{s�H9����DH��	D$A9�~1I�����w����I��$��H��H��I���z�A9�ϸI��$�LD�D$��tP�D$�ƨ�H�<$H��L��[]A\A]A^A_�������n���fD��^���A�H�<$�'y�H�XH���KO�H����8�������H���H�������H��u;I�W���y���H��t��t;��u\H���W����D$M�g1��(�����u�H���H���6����H���H���$����H���[]A\A]A^A_�H���#?��H�<$�L$�D$�Px�H�XH���tN�H���7�L$�t$���������u�H���[]A\A]A^A_�H��8WH�5cQ H�81��Lm�H��8WH�5^[ H�81��4m�H�}8WH��H�5Q H�81��m�f�AWI��AVM��AUL�nPATA��UH��SH��H�L$H�} M�����H�T$L��L���N�H��H��tMyKL��D���X�����u��/:����}��&��M��H��3#H�|�#HI�H�E@�9��E4H��H��[]A\A]A^A_�fDH�}���G�H�Ǩt>�=�Hc؅��I���L��D��������twE��u�H�u H�}P1ɺ讵����@�U��E��u�H�T$L���4�H������H�T$L������H������H��2#H�EH�@����H��N H�E@� 9��E4����fDAWAVAUATUSL��$���H��H�$L9�u�H��XdH�%(H��$H@1�H�GH��H�D$H��?H�D$8H�GH�D$0H�����D$$�G0��H�D$I��H��H��?H�D$(H�D$@H�D$�M���|$8���|$(�EL��I���?�5�D$$���L�t$0H�T$H��1�M�����I��H����I�L�t$0H�CPH�$L��E1�H�D$�H�C(H�t$H��H4$�x��w�I��H��xA�H�Ls8H)�ttIc�H�$�ɐH�t$1��Ծ����u��7�8u6H��������y�H��$H@dH3%(��H��X@[]A\A]A^A_ÐH��M H�C@�`7��C4E��x�L��L)�H�|$LI������H�T$I�����H��1����I��H�������@�@���fD�D$$�^�����6�H�t$01��H�C �x��Q�H��x�D$$H�D$0�����"����6���t�H�WM H�C@�6��C4�����_�D��AVAUATUSH��H��dH�%(H�D$1��Gp%�=�t6H���F���fD1�H�T$dH3%(�"H��[]A\A]A^�DH�GL���H�oH�$H��x`H��yL��H)�I��I�D@�H�C(E1�I��1�L���PH�C �x�2;�I��H��~ZH)�HC8H���j������E1�H��y��5�1��H�C �x�P�I��H����L��E1�L)��n�������1�H�sP�������g����R5���&�~�H��L��uV��u%���cH��褼�����,���������5��(H�C(�x1��w�������Cp%�=��s���L�kH�kL���L�,$H����I��H�C H��pH�C(�xM����L��� Y�I��M��~L)�Lc8H���(�����fD����1�H�sP������u��V4��������&�����t=H��J H�C@�-4��C4D����������1��X�I���t����H���x������>������M��xsL��L)��#������3�(H�rJ H�C@�3��C4E���[�������fD�3�������H�4J H�C@�3��C4��f.��k3�1��H�C �x�RN�H��H��xI)�L������:3���t�H��I H�C@�$3��C4�����\���AUI��ATI��UH��S��H��H�~�NF�t!��Ut4���t*H��[]A\A]��H��L��L��H��[]A\A]��@��+t�H��L��[]A\A]�ff.�f���H��H�Ѻ�+S�H�����uH��t01�H����H�Ǩt�D6�H������M�H���H�G.WH�5�R H�81��d�fDUSH��H��H�/�2��8H����uH��[]�DH�߉D$�DE�D$H��[]�f�ATUSH��H��H�Dt^�kP��t'1�H����[]A\�f.�H���x�������HcSTH�sDH������H��x�H�D$uDH�CL������DH�{hH�GL��t9�CT��l�H�CD�s����H���D�H�D$�CL�CPH����[]A\ËC%��H�H�� ��H�����% �����0�sH�=�G D� 1��h�H�s H��H��tH���#5�H��D��H�=�W �Ag�AW��AVAUATUSH��H��HD������dH�%(H�D$81��t$A9���H���E���'Hc��A�9��L�D$(HcSPIc�L�t$0L�D$�V@H����T4�I��H����D9��������HcSPIc���������H���Lc[LL�{DLc�Hc�I�H���D�L$L�M�H�t$N�,L��L�L�|$(L�l$0�7�H�����H�D$(L)�CL)CPH�D$0L)�����]��:���HcsLHc�H����D$H)։�HsD�K�D$)CLCP����ǃ�1���������'���H��H�D$�[B�H���#���L�\$��xHcSPHc�����H���H��ttHc��E1�1�L��Hc��H���L�\$H�Hc��H�L�1�H�l$0�6�H�D$0H���H)����U^�D9��L�\$t
�A�H�L$8dH3%(L��uCH��H[]A\A]A^A_�H��Ic�H�4�IP�D������1�ǃ�H���������V�ff.�@AWAVAUATUSH��H��8H�T$dH�%(H�D$(1�H�h��E1�L�l$H�|$A��L��1�賬��1�H��A��趫���3@L��H��E1�蒔��1�H������H��H���H����H��t)�����t�E��t�H�|$1��VO���fDH��蠐��E����H�l$E����H�s`H����H����1�H�L$(dH3%(H���RH��8[]A\A]A^A_�fD�G����L�w`I��M����M�� H�|$�D$$LD�E1�1�L��訫���D$H�D$$H�D$f.��SP����L��H�|$H��H��H)����H��H	��H�H�|$H���SN�|$$0t-H�D$H� ��H�xH�4/H�L$L�L���s�I�L�|$I9���L��I�� �c�I�OH�� H9��[���H=���L��HF� H�� HB���k�SP���4���H���?��'���@H�xH�4/�l���H�uH��蜓��H�s`H�l$H���^����U*�H���Q���DH�|$1��\M�� ���H�|$1��KM�L�|$�D$��u3H�s`H��tJL����/�L�|$I��L$$H%���H	�I�H�l$���I�wL������L�|$���)�I��������)�H��묋����tE��uL��H���Ǒ��H���9�H�|$1��L�����S�fDH������H��H���H��uH���H���89��AVAUATUSH��H�� dH�%(H�D$1�H�h�fH�k`H����H�D$1�H���6���fDHc����t=Hc��H���H��H�H�H��>�A�ă�������9����H���0���H��u������thHc��H��H����Y�����H�D$��H�0H�D$H�L$dH3%(�GH�� []A\A]A^��H��H�D$諌��H�D$��@��H�T$��H��A� �%���A��L�d$��H�s`H����L���-�L�d$I�$H%���L	�I�$H�D$�a�����G�����H��������1L�cDLckL�}O�4,��H���B���A����}�L��A��p,�CLH��H�D$�kP��C'�H���"���Hc��Hc��H��A�0H���H�H�H��?�H�T$H�߉�� ���L�d$����HcsPL��H��L�L��<�Hc{LH{DA�ą���9CP�Z�A�0��+�CL�kPH��H�D$H�s`H���H���p,�H�l$H�EH%���L	�H�EH�D$����H�����H�D$���Y&�H���h����}�Q���H���_A��A���I�D$I�$ tI�D$�=�M�I���I�� ��������7���HcsP�+��CPH�D$�H�xH�pH�H���;����H���������ttH�|$HcsL�HsD�UA�H�D$�CL�kPH� u�H�pH�xH���}%�H�����������Hc��s*�DcLD)cPH��A� H�D$���H�l$A�0�����A� �0H�l$LN��x���H��!WH�5�< H�81��X��O�AWAVAUATUH��SH��8dH�%(H��$(1�H�h�ML�e`M����A�D$1�H��L�l$�D$�٣��f�Lc��L��M��tdHc��H���|$I��ui�?
���S�H��H��8�f�H���?
u
��)��D$H9�u�)�1�H����\���Lc��L��M��u�H�����H���{���1��m�I�L��L��L����
t �I�L��L��L��L����
u
HcD$I�M9�w�M)�1�H��D��D�|$)É��ԋ���s����H��$(dH3%(��H��8[]A\A]A^A_�H�\$ �G�����f�HcUPH��u!H����7�H������4���HcUPH��t�HcEL�HEDH��HF�8
�v������
�H���8
u/��u�H��H��藉��H��u��
$�H�U H�=�J �0�Z�Hc�H��H)�H���g���H���^�����@��"�I������L�fD��AWAVAUATI��USH��H�_H�oL�/�CP��tyI��E1�H����f.�K�|=H��L����H��~L��I�H)�H����I��H���6�H���v��y�L)�I�l$H���$[]A\A]A^A_�fDH���I��E1�K�D=H�D$�Dy.H������t:H���J6�H�t$L��H���J���H��u��L��I�H)�H��~I���DH������m���@L)�H��^���D1��R������H��H�Ѻ	�+C�H�����uH��t01�H����H�Ǩt�D&�H������=�H���H�GWH�5(C H�81��T�fDATUH�-&���SH���m5�S<��F�v@H���H��H���^Q�t\L�#��!��8L���O�tOH���'5�C<��~2H���H��t��H��t��H��H�5����H���bC�u�[1�]A\��[�����]A\�fD��SH����4�CtS�C<��u>H�{XH��u[��s^�H�XH���4�H��������y�H�s H�{�ޜ��fDH������y���H�sWH�5�7 H�81��rS�f���SH���@����u[�H�@WH�5�A H�81��?S�ff.�@���'5����AUA��H��ATI��UH��SH���]�H�XH����3�H���}�H���U�u1A��w;�uI�$H��H���[]A\A]����@H���[]A\A]�D���������AUA��H��ATI��UH��SH���!]�H�XH���E3�H�����H�����u1A��w;�uI�$H��H���[]A\A]�T��@H���[]A\A]�D���x������SH�� H�t$dH�%(H�D$1��\�H�XH���2�H����3�H�|$H��u?H�|$�7�H�|$H�����H�T$dH3%(���H�� [�f�@��uJH�����tǃ�t��
u���)H�ǨuL�_:�H�|$��D$�"�H��H�D$�f�H��t�H�G�H����[���@���Q����fD�s"���lG�ff.����ATUSH��@dH�%(H�D$81����H��H�H�^����H�D$H��H���YH�t$(���3H�H�|$H�\$0����H�|$(A��H�D$��H�PH� ��H��H�T$ �Z�H�XH���#1�H���;2�CH��H�\$�D$�1�H�|$�Q�H�L$H�1WH�t$H�=�����H��H����H�|$H;GuqH��tLH�D$H�L$8dH3%(��H��@[]A\�f�H�VH�T$����������1��H�|$(t��KA�H�P�#����D��H���=���H��u���fDH���E�H�t$(H�����H���p
�H�������H�S H�=0B �0�AS��E�ff.����AUATUSH��XdH�%(H�D$H1���~H��H���t#H�VH�T$��t���F0�fDH�D$H��H���	L�d$H��L���)���A��H��u)H�L$HdH3%(H�D$�H��X[]A\A]�DH���Y�H�hH���4/�H���L0�EP����H���/�L��H��辚���y:�H�|$H�l$H�D$�E�D$ �D$$H�GH� tH�GH�T$H�5����H�D$(H�\$0H�D$8��I��H��xVH�|$H;GtD��H��舛��M������H�������a?�H���XC�H�����H�yWH�5�1 H�81��xM����H�U H�=`@ �0�Q���C�ff.����UH��SH���N*���H����W�H�XH���.�f��CP��tWH������y�H��H��[]ÐHcSLH�KD���CP�r�sLH�<H���H���U`�H����.��H���H���-��fD��?�H����P�H��H��E1�[1�1�H��]�KO�ff.���S�&W�H�XH���J-�H���9����u�CP��t	1�[�DH��� -�H������¸��x�1���f�AWAVI��AUATUH��SH��H��hH�|$0H�ωT$@dH�%(H�D$X1��8�H��H��?I��u����H�K`H�L$H���H��WH�L$0H9
u����H�|$��H�D$0H����H�@H�D$(H���KH�D$�x��H�D$0H�H�L$H�HH�L$8H�D$ t	H�@H�D$8H�D$8H�L$(�D$DD�t�A��
���D$@������H�D$Hc@H;D$(�����D$L�.fD�D$@A������D$DH�D$(�D$LH�D$8�D$D�D$ A����D$KfDH�{h��1�H���3����8�L��L��L���2�D��D)��L)��H���S�H����D���E��t�Lc��Mc�L��H��~L9�}A��I��H�L$L��D��L��L�D$�$���L�D$H���6I���l���L��L���q�I���g���f��C%�D$�1���D�t$��H���h�����Lc{PL��M����LcKLLKDM��H��~I9�LO�H�L$�T$L��L��腗��I��L)�M��LE�I��tjM�t$L��K�4>�F�L��I�|$I�$ tI�|$H�L��H��L)��)|��M���@H�����CP���L���H����)��?����L���S�L��H��I���r8�1��fDH���y���D$I����H�s`H���"L����D$����H�L$XdH3%(L���eH��h[]A\A]A^A_��D�t$I�D$I�$ tI�D$I�L$D�l�E9��sI�t$I�$ tI�t$H�,H�|$H��H���+?�D�|$ E����H����H�T$H��H���$*����A���D�|$ �0����L)�I��Lc�I����L��L��L����/�D��L)�D)��A����fI�L$E��H9L$(����M�|$I�$ tM�|$L�H�|$L��H��H+D$(H��H�D$��E�H9D$�����H�|$0t�|$K��H�T$(H�t$8H�|$�KF�D$����H���^���I�L$���@L��L���m�I���6���DD�t$�8���fD1��=���f�H���5H�T$1�1��IL�I�������H�L$0H�H�D$H�AH�D$ tH�AH9D$8�F���H�D$0H�L$(H;H�2���H�WH�5�* H�81��IF�f�1��H����H�xI��tH��uA�A��x���D�D$A����6����D$D�+���H���[�����fD�C�:�����;�H�D$H�D$0H���*�������f�H�T$H�|$01��(�H�H�D$0H�L$H�HH�L$8H�D$ t	H�@H�D$8H�t$8L�l$(L�t$I�L��L��L���e<�L��H�T$TL��H��I�����A��HcD$TI�M9���A��
�D$D����H�{h�d����C�Z���H�|$�H�D$�x�K���H�|$�m,��E1�H�D$T1�A��D$TH�D$L�|$�H���Y����PD�{PE���5Lc[LL[DIc׾
L��L�\$ ��L�\$ H��I���b�L$@L)�A��D�x���LA��A��~A�~�
u
D�P�A�E�,/Mc�E)�I���)Ic�L��D�L$(L�T$ �MA�I�D$L�T$ I�$ D�L$(tI�D$Hc�H��L��D�L$ H���v��D�L$ DKLD)KPA����A������t����|$T0t9Ic�I�$ ��I�D$H�L�|$H�L$H�T$J�<8��X�I�L�|$M���D�{PD��E�������H���.$����f��D$L�k���H����H�|$�G�D$D��u
�*����H�=,�#�O�H�T$1�H����%�I��H��H�D$0��8�I�H�L$I�NH�L$8H�D$ t	I�FH�D$8H�D$0�D$DA�
H�@H�D$(��l�����H���������H�D$���H�
��#�H�D$(A�
H�L$8H�D$0�"����T$@M�����.���H�D$L9�v�D$Lt�x�
uH�l$H�t$L��L)��1����E��E1�����L��L���n�D{LI��D){P�,����I�xH�D$���H�C`H�D$����I�D$H�� ���I�D$I�$ tI�D$�u�Hc��<0
����L����>�H�C`H��t^H��L����I�$�T$TH%���H	�I�$�C���I��u����H��WH�5�% H�81��.A��D$�Y����7��
��DAWA��AVI��AUATI��H��UH��SH���K�H�XH����!�H��D��L��L��D�k��H��tHcSA9�tH�
��WH�I H9itH�QH��[]A\A]A^A_�f.�D)�Hc�HQH�QH�QH��[]A\A]A^A_�ff.�@SH��H��H��0dH�%(H�D$(1�H���-����T$H�t$H��H�|$������H�L$(dH3%(uH��0[��x6����S���H��H���'�H��[�fDATUSH�tEH��I���5�H���DH��H���%Q��SH�sL��H�{�����H��u�H��[]A\�H��
WH�5Z. H�81��x?����UH��H��SH��8dH�%(H�D$(1�H��H���5���H��H���Z���H�L$(dH3%(uH��8[]��5�ff.���H�7�$���@��ATI��U��SH��H��0dH�%(H�D$(1����tkL��H��H�ى�賰��H�t$H��u�y�H���(R�H�t$�T$H�|$H�ك��~���H��u�H�L$(dH3%(H��u2H��0[]A\�@�1�H���B�H��E1�L���H���A�H����4�H��	WH�5(- H�81��&>�fD��USH��H�wH��tSH����H���%�H���pQ�H�s�SH�{H�������H��H��uп�%�H���[]�H�	WH�5[" H�81��=�f���AUH��ATM��UH��SH��H�T$H����H��L�l$H��u\��tdH�H��L���I���1�H�|$H��I�����H�����-����H��H�����H����H��H��[]A\A]�DL���X"��u�H���2�H���fDH��uH�|$H�����L�l$�p���@���H��H��u�H�\$��t H�H�FWL�l$H�H�D$�8���@H���P2�H�����F.�fD��USH��H�t$�G�H�XH���@�H���)�H�t$@����H�k`H���\H����H������H�D$H�{h��H�hH������P��H��蟇��Hc��Hc����)�H�H9��)Hc��H���H��H9����)艓�H�T$���H�rH� tH�rH�H��H��5+�H���[]�f�H��H��t@��t2H�|$� �H�{hH�D$�>����C�4���H��H���n��묐H���H��
u�H�k`H��tc��H������H�D$���f�H)�H�H��*�����H���)�� �����K�H�t$H�����fD�3�H�|$H���H��WH�5w H�81��:���USH���AE�H�XH���e�H���-'�H�khH��t�CP��t-H��H��H��[]�|��@H�k`H��u���H�ŋCP��u�H������fD��H�����H��tH�����+���USH��H���D�H�hH�����H���&�H���t�M�EH��H��[]���"�EH��H��[]�ff.���S�VD�H�XH���z�H���B&�HcC[H�D����AWAVAUATUH��SH��dH�%(H�D$1��f���H���C�H�XH����H����%�CP����H�{hA��z1�H��謄��@Hc����tKHc��H���H�S`I��H�<H����H�H���A�ă�������9���nH�����H��u�H���i��E���/H��H�T$dH3%(�PH��[]A\A]A^A_�H��A��?�H�{h�>�����A��E�D)�D���H�|����K�H�������L�k`��Hc��H���Hc��I��H�<M��t�H�1�H�L���u��D�������fD�*�H����;�E1�1�1�H��H���a:������C�|���L�k`M���I��f�H���(��������HcCLHcsPL��H�{DH�H�H���A�ą�~L�CPA9��HcSLH�{DHc�L��H�H�H�1����DcLD)cP��H�|�J�H���
���������q���A��A����DcPA��zM���DHc�A)�I�E��~H���j����xVIc�H��L���i�����L��L��L�����~2L��L��1�L���"��H�|�I��_������I������L�k`H��WI�UH�5�H�81��D6�H�-�VH�5� H�81��,6��,����ATI��US� �L��ty�@�H�XH�����H���"�H�khH��t?�CP��uH�����fDH���HI�H��H������H��u�L��[]A\��H�k`H��u��
�H���D[]A\�����U��SH��H�������x!@��H���������H��H��[]�H�s H�{�~~��ff.���UH��SH��@��teH��H�H���?�H�hH������~�H����k���H��1ҋx�^�H��H��xFH�@H�xH��H�D[]�H���p*�H���H��H��[]�*0�f.�����t���H�U H�=�' �0�8�ff.���UH��SH���>�H�XH���"���H������1�1��x��H��xAH�B�WH�@ H9huHcSH)PH����CtH����d��H���[]��S���t��H�H�S H�=' �0��7�fDATA��UH��S@��tPH��H�H���B>�H�hH���f���H������D��H�ދx���H��x[�]A\ÐH���)�H�������t���H�U H�=m& �0�>7�ff.���USH����~6H��H���t'��u&H�~�9�����H��H��H��[]�&���fD1�����=�ff.�f���USH���Q=�H�hH���u�1�H�������1��x��H��H��x$HcEPH)�H�@H�x6H��H�D[]�f������t���H�U H�=m% �0�N6�fDH��H��[]�-�f.�UH��SH���wHc_P�dH�%(H��$�1�H����"�u�D$%�=�t)H�� H��$�dH3%(H��u@H�Ĩ[]�f�H�������x-�}�1���H�T$0H9�|�H�H)�H��HI����'�H�u H�}�z��f.���ATUSH��dH�%(H�D$1����iH����H����`H�V�H�$9��?H�������H�H���;H��H���h}��H��A���};�H�hH����H����H�����EP����H�<$H��H��1��}��H�<$H��H;GtD��H���L~���H��tRH�$�L@H�$H���;�H�XH���,�H�����H�,$H���(���H��H��H�����f.�H�L$dH3%(�H��[]A\�H�$H�xt�H��D��1��}��H�$��f�H���%�H�����H���������1��7�����H��VH��H�5q H�81��/��%����H�WH�w�?����ff.�f���S�#�H���9�H�XH���"�H�������xH��H�5�k��H���T�u�[�H�s H�{�Lx����H�S H�=$" �0�3�D��USH���1#�H��H���9�H�XH����H���"����x4H��H�5dk��H�����uH���[]�@H��H��[]�*���H�s H�{�w��ff.�f���AVAUATUSH��0H�oL�gdH�%(H�D$(1�H��tzI��I��DI�]HcC<����HcS8HS0L��H��H�$�H�D$L�d$H�l$譒��H��xHcK<H��H9�|\H�C8H)�H��t�~ZH9�tI�H)�u�I�mH�L$(dH3%(H��uoH��0[]A\A]A^�f�H��L��H���r����)�C8�S<�K���I�EH�����8H���(�tI�}�8�����H������~����#�f�AUA��ATI��UH��SH��H��(dH�%(H�D$1��<�H�C0H����H�����E��te�K<H�C0Hc�H��tHc�Hc{@H�4*H9�~LHcs8H�ׅ�u{H�H��L���]�k<H��H�L$dH3%(�9H��([]A\A]���Ct�H���H�$H��L�d$H�l$H����H�5��L)��f.�1������C8�o���f.�E��uK�S��tCH���H��t����HcS<H���+�����2�H���H���F���f�H�C8�� �C@ �"4�H�C0���f�H���8������H��H��5�Hc{<H�C0�B����H�$H��L�d$H�l$������!�DAVA��AUI��ATUSH��dH�%(H�D$1�H�T$�D$�̅��I�ċD$��uaL���IH� H��H�xH�htH�xH��~H��D��L�����H��H��L���09�H��H�L$dH3%(uH��[]A\A]A^�L��� ���!!�ATA��USH��H��dH�%(H�D$1����H��H��� �H��H����H��tiH�{H�Ǹu"H�L$dH3%(ugH��[]A\�f���4�H�hH����H���g(�D��H��H�����H��x.H�D�DH��H��H�$H�5�W�����V �H�u H�}�s��f����WH�wH�?�
���ff.�f�AWAVAUI��ATA��USH��8dH�%(H��$(1�H�0���W<H�\$�U�Icm8I�M0Hc�E1�I���1�H�L�H�,1�H��H�l$�/��H�T$H)�AU<A�U<��t:��v5����IcE@9�u�L���l�����4A�U<IcE@�f.�E���2�H��$(dH3%(�'H��8[]A\A]A^A_�f�H�D$H�l$ H�D$H��H�$I���L�$E1�1�H�L$1�H�l$I���b���H�T$L9�tL)�L��L��I���5���H��~0I�I9�u؃��O������F�����t����D���fDM�}���8L���8#�t4A�E��y�E������H�=� �7�H��H���VH�8�����E������B��HcH�D����I����i��������ff.�@���wH�?�����AWI��AVAUATU��SH��H��8D�oL�wdH�%(H�D$(1��GH����D$��H���@��u
H������H���l���I�ċC<��t����H���rW���C�C����H�C�ƒ�S�uA��;M��tL��讅I��t��tsH�D$(dH3%(��H��8[]A\A]A^A_ÐM��tL���s�M��t^I��A�Ņ��>1�A�L��H�����H�=U\���$�yE��uxI��t�A��uyM���2L����f.�1��D$D�l$��	���H�t$A�1�H�����H�=\���$��#���I�������������Z��HcL�dL��H�[ �6��H�ډ�H�= ��)�DA����DH�T$H�5���H�\$�D$�r"�S<I�ą��r���H������I���`������X�������HcL�d�F����L���X&��b���E���Y����^���f�D���������A������I�$��H��
�����L��H�[ �
������O�ff.�@H�G(H��t��DS1�H���5���H�{DH��t
�,�H�CDH�{0H��t
��+�H�C0H��[�U��S�GH��H�G ��x
����Hǃ�H�{DH��t
�+�H�CDH�{0H��t
�+�H�C0H��[�SU��USH��H��8dH�%(H�D$(1��R�H9�tH�xH��t�G��yeH�[H��t �{��xMH��H���Y��u.1�H����H�L$(dH3%(H��u5H��8[]�f.�H��1�H�������Ð1���@�����������SH��dH�%(H�D$1��2���H��t
H�Ë@��u#H�L$dH3%(�u+H��[���K��{H�t$1��\)��C��n�ff.���ATI��US�0�H��H���-�H�XH����{��xAH�s ��m����uE�C��!��tfI9�tL���M-�H�XH���q�H�CXH����[�]A\���{����x3�C�ƒ�S�u�[H��]A\�D�H�-�VH�5N H�81��,"����H�S H�= �0�5&�D��UH��SH��H�_H�����C��xH�����H���[]�ff.����S�G0H���u �u,H�s@H��uFH�SHH��u%�[�H�?����C0�t�H�{�w�����H�n�VH�5k H�81��m!�{4����D��USH��dH�%(H�D$1��!���H��tH���
�H���U�ŋC��u#H�L$dH3%(�u0H��[]���+1ҋ{����H�t$�7'��C��I�f���AUATUH��SH���j+�H�XH����{����H�s �k������H�����I��H9�u"�C��"����H��H��[]A\A]�a�H���+�L�hL���,�C1�H��A�E�CL�mH�CXI�\$�S���H���[]A\A]��{1��V��x#�C�ƒ�S��|���H���[]A\A]��Z��H�S H�=� �0��#�H���VH�5� H�81�����AWAVAUATUSH��L�gH�/H�_D�wM����I��E1�D��H��H���"���H��xmI�H�}0t#�U<��tHc�L9���)�E8�U<�M9eu�h�H�CH)�H��A��tKH�SH9�~�H)�HH�S�fDL�}�w���8L����t
H�����W���I�����H��L��[]A\A]A^A_�fDI)�H�E8�h����UH��AWAVA��AUATI��SH��H��x���dH�%(H�E�1��G��\���Hc���?��H��H��H�E�H�GH��H���H)�H��H9�tH��H��$�H9�u�%��CH�D$Ic�H���H��`���A����H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$I����sf.�H��H��H��H��<�H��H�}�H���l��Ic�H��`���A���b���H��H�4�H��=��H��H�}�H���3��I��E����H��`���E1�H�XH�E�H��p����:@H������K�D�H�PH� tH�PH�@I��H�H��H�C�E9�~JK�<���H��p���H��x����E�H���Lw���U���t�H��H��h�����H��h����D�+�\������5����H��`���A�F�1�H��H�QH�D(f�HH��H9�u�H��x���H�x0�H��x���H����MH��x���H�P0H��x���HcA<����H���H��`���D��\���H��x���H�]�H�U�H�E�H��`���H�E���\����E�H����H�5�����I��H�}�ulE��~'A��1��DH��I�t�I�<���)�H�CI9�u�H�}�uGH�M�dH3%(L����H�e�[A\A]A^A_]�f.�E1�H�}�t�H�}�����H�}�����DH��x���HcN8Hcv@D�Mc�J�<H9�v7H�H��`���H�AH��x���H�H������DH)�H�L������\����/H��`���A�F�H��H�NL�L(�H��I�I9���H�H��t�H��x���H�q�L��L��`���L��h���Hx0H��p����t*�H��p���L��`���L��h���H��f.�I��@u7H�@8�� �@@ �i"�I�G0����H���H���I���G���H��x���H���H�������[ �L��x����H��I�����3I�W0H�������H��x���H������H��x����@<H��x����I�߉A<����1��'������������f�AWAVI��AUA��H��ATUSH���
�H��H���Y��H����H����#�H�hH�����H���C�E����A�E�1�A��D$�K�H�>A���1�9\$H����H���^�H����L��H�|D��U9I��A9�~/Hc�I�4�Et�E��A)�A����H��D�������A�H��L��[]A\A]A^A_�@H�5y�WL��D��H��H��[]A\A]A^A_�%�H�u H�}�ha�����H�Ѓ�t����H�61�H���K�ff.���ATI��UH��S�"�H�XH����H���	�H��~H��H��[L��]1�A\�p�H��[]A\����H���H�t$H�5��WH�L$�m�H������SH���*�H��[�ff.���SH����H��H����)�[Ð��AUATI��USH��dH�%(H�D$1�����A��H����H���VH�8�J�H�3H��1��#@H���VH�0H��tL���`)�H�3H��L����N)�D9�|�H��VH�0H��tL���1)�H�L$dH3%(�u6H��[]A\A]Ðu����f�� �A�H��H��H�$�b�������UH��S��H���<�H���H�����H���[]�ATI��U��H�5)�WSH�Ӄ�~�s�tH�5�WH�ى�[L��]A\���fD�;��I9�ti���H�����t[M���~H���VH��#H��t+��u&H�H�ƃ�H��u% IE�H��Ƀ��.f�H�5� �1���E�H�l�DH��H�s�L����'�H9�u�[�]A\�A��u
I�T$�|���I��t!I��t9A��u$A��t<H���VH��U���H��VH��F���H��VH��7���H���VH��(���H�v�VH�����ff.���SH�� dH�%(H�D$1�H�`�VH�<$H�H�D$��H��H��t�t3H��H���P���H�L$dH3%(�u=H�� [�DH���H��u�H�{H�5Q�W�D��t�H��H�ڿ�����y
�f���UH��S��H��H��虍��H��H���H��[]����fD��UH��SH��H��dH�%(H�D$1�H��uCH����H�|$�D$���H��H���%&�H��H�L$dH3%(uBH��[]�@��t��t�H�������H���H��u�1��H���U��H����	�ff.���ATUH��SH��H�t$�
�H��H9�tg�j'�E1�H�V�WA��H��u&H�-�fD�H���K��H�,�WH��t�H�L$E��H�ߺH����
�H��[]A\�fDH�t$H�����H��[]A\�f���AUATUSH��H��HdH�%(H�D$81�H�H�D$H�GH�D$��H�|$H�m�WH�C8H�CPH9�tQH���#H���WH��u%H�-��H����H���WH��t�H�|$H�������H��WH�C H�|$H9�tOH���PH�A�WH��u*H�-��D�H�����H��WH��t�H�|$H���b���H�C(H�{�H�{t4H�{ ��H�{(��A�1�H�����H��H�=!����L�H�L$8dH3%(���H��H[]A\A]��@������H���H��t
H����������H����H�D$H���t�H�xH�{ ���H�{ ���H�C H�SX��p��H�«W�������H���H�C@����C4�D���@�������H���H��t
H��������{��H����H����H�D$H�����H�xH�{(���H�{(�V�H�C(�H����p����l���H�{(H���w����A��H�{��H�{(H���e����'������X���H���VH�5��H�81����H�{(H��u�H�{ uH�{�@H��VE1�1�1�H��H�=mL�1�� ��2���fDH�C H���r����@P���g���Lc�H�CM��H��x	L9���L�����L��H��H���R�H�S H�}H�E tH�}L����A��H�S(H����H�EH�}H�E tH�}H��~
1�H����H����1�H�����H�CLc8H�������L)�H�C���f�H�|$H����@����H���H������H��H�D$H�C�!���f�H�|$�v��H���k���H�D$H��t���H�T$H�T$H���h�H�t$ �H�D$(H�D$H�D$ H���VH��L��K0H�D$H�����H�|$�~���fDH�D$H�D$�	�H�t$ H�D$(�H�D$H�D$ H���VH�D$0mH�����K0H��H�D$H�C�>����H���H���.������I��I������H���VH�5�H�81��-
�DH�|$H�����]�����H�C(H�p H�x�@V����AWAVAUATUSH���@H��8dH�%(H�D$(1���H�{ L�cH��L�kL�5ʧW��H�D$H�D$f.�H���h�H�{��M���TI��@�@IN�H�{ I�����@H���	�H�UH�E tH�UL��H�޿M���$����H��H��I��HI��]	�M��xH�K�T=M��LI�H�{H������H�HC8I)�L95�W�;���H�}�0���H�L$(dH3%(���H��8[]A\A]A^A_��H�{ A�@�)���H�L$H�;K�D?L���H�D$H�l$�[��L95��W�X���H��t�H�{H������R���@H�����D���1�H���f��Q���H�;L���
�LD5,�W�S�������m�ff.�f���S��w5H�Ӆ�tH�>H���t�[�D���H��H���X�[��`��ff.������thSH��H�H��u+H�����O�H��H����H���[�f���u�H���H��u�H�t$�|$�Q�|$H�t$H�����f.���H��t@��tH�5"�W1�1����H���H��u�USH���9��H��H����H�XH�����C�u�u'H��H��[]�DH��������x�C����H����y����H�s H�{��R��@����R���f���ATUS��H�XH���7��H���O��CP��tX�S�H�H��H�����H#CH9�uH��u>H���Ƥ����xrHcCL�kP�P�SLH�SD[]�A\H�D�f�H�������fD@��u�H�E��H��u�H���u�L�`L�����A�D$t�H�������[�]A\�fDAUATUSH��H���.�H�hH���R��}��u2H��1���H�XH���4��H�ChH��H��[]A\A]�fD��H���~��I��H��t�H=���vGH=�toH=�u'H���O��H��tH=���H��H�����f�L��H������f���H��u�H�����H��H��t�H���?H��H���d����f�H������H��t�H=�u�H�߽�-�L�`L���Q���@H�����I��H���s���H=wtL��H������[���H�����H��t�H=��H��H�������ƐH���X��H��H��u#H���G��H��tH����H��H�����H��H�߽���H���t�L�`L�������q��H��H���u��H��H���k�H��L��H���]��H��H��[]A\A]�f.�H�����I��H�������H=�tGL��H��������H�߽���L�`L���
���m���H�����L�`L�������T���H���T��H��t�H=�t
H��H������H�߽��L�`L���������ff.���ATUH��S�`�H�XH�����CtHH�{huYL�c`M��t
��	�I9�u^H�����H��tH�{`[]A\�:�f.�[�]A\�H���VH�5��H�81��>�H���VH�5Q�H�81��&�H�C`H�5W�H�PH�`�VH�81���fD��H���C��H��tH�������SH��H��t@��t-H�5ƟW1�1�H������H��$t;H�Ǩt-���[�fDH���H��u�H�[H���h��C[����[�H����H�5B�H��H�`�VH�81��V�fD��S��H�XH�����C[�D��SH����P4����u[����H�S H�=���0�#���H���VH��1�H�����H�8�������S��H�XH�����H���VH��1�H�����[H�8鎷��ff.���H��tSH�����H��[��
�D�ff.�@��H��tSH������H���
�[��1��D��UH��SH��HcWTHcG@Hc��H���H���H�H��t�x�H�H���H��t�d�H�H��H��[]����UH��SH���~
�H�XH�����H���H��t���H���H��t���������C�����CH��H��[]���SH��H�?�`��SH�sH�;[�����USH��H����H�hH���"��H����3��H��H��[]���SH�����H���k��H9�tH�����H��[�f���ATI��US�H�_��r���w������at1H��VL��H�5�H�81����<xuڀ�wuՁ����t"H��<b��t<+u(�����u�fD��%=t���[]A\�<:u��:H�����H��tzH)�H��~ɺH�5�H���������D��fD<t�`������d���D���W�������E���fD��5���fDH�������|�������1�����t
H�!����ƒ�@��E‰€���E‰€ʀ@��@E‰€���E��ff.�@��H���C��H�����x.�����AUATUSH��(dH�%(H�D$1����H�H�$����H�VH�T$���L�n�9���I��L�d$H��1��%
�H�|$H�$H��t&H�50����H����H�Ǩty����f���I��t
L������L�d$H�<$����ډ�H��H�$�M���H�L$dH3%(H�H�DuiH��([]A\A]�H�D$A��M���@�;�����H�\$H���c��H���k��H���C����\������m���X��A�������AWAVAUATUSH��dH�%(H�D$1�H��u(H�L$dH3%(�~H��[]A\A]A^A_�DH��H�5F�WI��H���I�����H�5<�W�$H��I�����$H�5�WH��I��H�����{��H��H��$��I����I��$�rL����I��H��$��A�H��tiH������H�$H��tH���/��8-u�xtDH���\��H��L9��HD�E����@E1�L��H��L���/�������D��f�A�$f.��K��H�8�GI��$�=���A�H��$�HE1��@����I��$t"I����L����1�I���f���fDI����L������H�$H��t\H�����H��H���1��M��L��H��H��H���@����������H��H��$t�I���(���A��V���DL��� ��E1�L��H��H��1��.�������K��H�8�G���L���)���y/�E1�����H����I��H�__"I��$�]/��Q/����1��b���L��A��ܱ�y���1��O���E1�1��8���D����AWI��AVAUA�ATUL��SH��H��H�t$L�t$h1�H�L$ L��L�D$(E1�dH�%(H�D$x1�H�1�H�D$XH�D$`H��H�D$�-��H�D$XH�|$X�D$H�D$0H�D$TH�D$8H��uP�D$TE1�H���A��tvH�5�WH�����H��H��t^H�|$X��H�D$XA�H��t�H�5c��M��H����H�D$XH�Ǩ�������A������D$T�fDH�5��WH���i��H���7L�l$TH��L���/J��D�D$TA��t�T$���H�5a�WH���)��H��tH�L$H��tH�9��H�T$H��D$TA��A��tA��A��A����DE�H�t$L��L��H��D�D$�9�D�D$��t�D$���$H��H�t$pD�����H�L$hH�T$`��L���.P��H�D$XH�L$(I�H�D$ D� �D$T�H�D$`�]H�EH�D$hH�EH�D$pH�EH�D$xdH3%(�!H�Ĉ[]A\A]A^A_��H���0��H�Ǩ�����A	�Ic�D��H�DH�D$X�H��D$T��������P���fDL�d$0L���[��L���c��H��H�D$H����ljD$T�D$D�'��H�T$H�:A��H�����D�D$DH��I��tuH�|$XH�D$��L�L$L�D$8L��H�T$H��I�y�<���D$�M�������.���fDD�D$0���D�D$0L��1�H�T$H���w*������f�A����H�T$L��1�L���T*������\$T�؃���u*H�D$p�L$��u��ug1�L�l$T����f���u��L�l$TH�D$p�����H��VH�5O�H�81�������D�D$TI���X�����H�T$A��L��1�H��L�l$T1��)�����H���VH�5d�H�81��`������H���VH�5��H�81��C����AWAVAUA��ATUSH��hdH�%(H�D$X1�����D�����D�_�H��I��Hc�L�4��[���D��A�H�}H�|$���xH�EH�D$ ���nH�D$H�D$0��L��H�D$�J�I�\$H���,H�|$ u
I����H�|$ H�L$L��1�L�L$0L�D$(����C�|$(�t����!��foD$0�C�{H�|$C`foL$@H�{ Kp�����C��H�k�|$H�CLH�����m<��H�{ I�����H�D$(H�xH� tH�xH��L��� ��H����H�{���C���T��H��VH�{H;8�PH�i�VH;8�`H�L$XdH3%(L���)H��h[]A\A]A^A_�f.�H�D$ �r��H�|$H���}���H�����L��I�����H�XH������L����H�hH������H9��w����C��H�
��VH�SH;��H�
��VH;tH�
B�VH;���}@�����;���{H����;��H�s H�VH� tH�VH��H�ͿVI��H�5��H�81��i��f�L���X��I�Ņ��s���E1��.���DH��蘟�����%������H�{ ���~���s�lj����x��葰��|����w���D�(�}��E���d���H�S D��H�=�������H���;����UE1����p���S�C�oU`H�M H�u(%S`�o]pD�{	ЋU�C�S�U[p�S�UH��������H�K H�s(D9�tv���A����H�{H�����T$�D��T$H�CD���C����������vD���w��D�{D���;��Et	M�����C���L���	�I�D$H���;�����3���H��L������#����{�� ��H�|$�D$�CH�{ ���k����t$���R}��H�C�C���f����衴�H��I�D$���@1�� �诶�������%�f��{�h�������H�{1�� ��{���s����]%�fDH�D$(H�D$0H�D$(�T��0������H�S H�=�����f.�H�����������H�s H�{��:��H�s(D9������D�����Y����D�������q����u�H�C ���H��訜����x��U���1�H��費���1��x���UI���l���L������:����}@���)����M���f��k��H����X���1�L���x�K��H��xV�A��H����.���1�L���x�!��H��������������������H�U H�=A��0���f������t����H�S H�=��0�n��fDA���)������ff.���ATUH��S�����H��t	[]A\�@苽�D� D�����tH����r��H��u��h��1�D���^��ff.���SH�����K[�ff.�f����w�����UH��SH���n��Å�x0��tH����[]��}����}����H����[]���Ӽ�8�<��u�ü�H����[]�f.�H�����Å�y�����AWAVAUATI��US��H��dH�%(H�D$x1��D$������A�H�D$A�H�|$H�����_HcD$HL�t$`H�l$L�d$`H��L��H�=�'��H�D$pH�DH�D$h���L$I�ą���H�����H�XH���=��H�D$H��H�t$ H�=�G��H�\$ L�|$(H�D$0L�l$8蠷�T$����HcD$LL��H��H�=R'��H�D$pH�DH�D$h�j��I�ƋD$���<L����H�hH�����H��蟢�H�t$L���b=���D$�t
I����	CL��L��	E���H�������H�L$xdH3%(H���4H�Ĉ[]A\A]A^A_�fDD�w�H��Ic�L�,���u9A��A�L�}A����H�EH�D$A���T����1�D�����L�����I��E��u��!���H�=�VH��H�L$PH��)��L�d$PL�t$X�c��H���<���L���P��L���H��D$����|$L�6��I��tL�����|$���|$L���L���K���|$���|$H��|$L���|$���չ�1��8�̩�A���%������H�D$�f������AUA��ATI��US��H���-X�V�W��D9�AL�9�L�9�~�eD�C9�L��9�|QI��tHc�L��H�t����H�����u�1��������tȨu�����߉�1������H��[]A\A]�ff.�f���AVAUI��ATE1�USH��H��dH�%(H��$�1�H�|$,�'���������uuH�l$L�t$@f�A�PH�|$M��H��H�5R:��)D$@)D$P)D$`)D$p)�$�L�l$���|$,��q����x;�|$0H�5��"�K��I��H��$�dH3%(L��uAH�Ġ[]A\A]A^�f��|$0�'��H��VI�MM��H�(��H�81�裪������ff.����ATH��L�gU��SH��H�H�_dH�%(H�D$1��� tL�gH������H��t|�׼�H��1�H��t9�A�D$��tIHc�H�C�L�D$H�I�4H��L��H��I�<���9�����H�t$dH34%(u3H��[]A\�A�D�9��������H��踲���u������ff.����AUATUH��SH��(dH�%(H�D$1��������G�H��I��L�d��,�H�	�V�H�H�$L��H�����H��I9���H�H��t�uH���H��tH��H��H�=�苴�H��u�H�;���H�xt��
H��H�$�f������u�H���V�H�H�D$�w���@H�i�VH��H�0�.��H�L$dH3%(�uH��([]A\A]�����f���AUATUH��SH��dH�%(H�D$1������"��I��1�I��tT1�I���,H����H9�}<I�EH��H��L��H��H�$脮�I�E�� u�I;]}
I�E ����H�L$dH3%(u?H��[]A\A]���H�=l����H��H��H�$��������ff.�@��AVAUI��ATA��UH��S�f��H��H9�t^��E1���H���WA��H��u%H�-��D�H�����H���WH��t�E��L��D��H��H��[]A\A]A^�3��[L��]D��H��A\A]A^�j��f.���H���3��H������H��H�����ff.�@��ATI��UH��S���H��H���WH9�t.H�@�@��x#L��H�����H��[]H��A\��f�H�ɰV[L��H��]A\H�����f���SH���3��H��[H��������SH�� H�|$dH�%(H�D$1��]��H��WH�t$H9�t,H�R�R��x!H���i��H�D$dH3%(uKH�� [�H�)�VH�^H�~H�H� tH�~H�ھ���H9�v�H�D$H�D$H�D$�����f���H������H���WH9�tH�B�@��x1�H���DH���VH�8聜�H�����f��fD��AWM��AVA��AUA��H��H�=#9ATM��USH��(H�L$H�T$dH�%(H�D$1��9��T$����H�XH�|$H��H�D�kD�suSH�C L���M��t�Ao$C`�AoL$KpD������H��H�L$dH3%(u;H��([]A\A]A^A_�H�|$���H�|$���H�C �A��t�|$�����H�t$1�H��D�l$A�H�=�������ff.�AVA�AUI��ATA��US��H��0dH�%(H�D$(1�H��tH���	��H�����I�����H��1�1�A��H��H�M����ډ������E�I���L��D$A�L��D��H�D$覛�H�hH�Ë}藣�u#H�t$(dH34%(H��uCH��0[]A\A]A^��M0��f.��k��H��A��1�H��H�MH�����1��q����X���AUI��ATA��USHc�H���X��H��uH��L���D��[]A\A]�[nL��H�����1�D��I��H��VH����H�TL��H��H�����H�������H��[��]A\A]�����g������1Ҿ逫���1Ҿ�p����USH��������藴�H�������t��UtS1���tLH��[]�DH��tRH�;�V1ɉ߾H�����H��H���ף�H�������H����[]�@���H���[]����1Ҿ���H���[]��y*��f���USH���������׳�H��迮���t��UtS1���tLH��[]�DH��tRH�{�V1ɉ߾H�����H��H���w��H�������H����[]�@����H���[]����1Ҿ����H���[]��)��f�AUI��ATI��UH��S��H������L��H��������H��H�����H�hH���:��L�eH��H��[]A\A]��AWAVAUATE1�USH��H��xdH�%(H��$h1��!��H��H��t	�tUDL�k A�UPI�} ����H��teH��� ��H�GH��~P�fA�}PH���f��L�k I�} ���H���H��u�H���L��L�`L���p��E�d$A��A��끐����fA�uPH�ϪV�H�=�"H�I�E觩�I�EL�k I�}(�&A�UP����uA�EPH��$hdH3%(�[H��x[]A\A]A^A_��H����A�EQ<���<u�������H�D$@L�|$0H�D$H��$�H�D$ H���H�D$(H��� �qH�GH�����ס�L�|$8H�D$0H������H�S H�D$0H��H��A��L��H�D$0�ĺ�H�|$0H�D$H�u	�8-�1�1��!i��L�k �D$I�}(�JH��tH�|$(uH�E��H����H�T$�t$�����H�C L�l$0L�p(I���.L���N��L��I������I�NI�VI��I� tI�VH��I�uE1�L��j薩ZYH����I�uI�E tI�uH�|$����(H�|$0���A�Bh��H�T$ ���A���>��t$XD������t$\�T$`;�$�u	;�$�tD�����t����$��QH�-�VH�L$D���H�U���H��I�����E���iH�L$H�U��|$L�c ����I�D$I��tH�C L��H�x裹�L�|$8H�D$0H�C H�x�xR���2��H�hH���V��L�k I�}0tc�AoE0�AoM@H��E`Mp�
��L�k A�EQA�UP���@H�������@H�����G���@A�EQ����fD�ep������H��� ��H����H���f���A�EQ���f��[��H�C H�x�7���fDH�|$�ޥ��0����!��8�j��H�t$0H�=~�H��1����|$����fDH��VH�8�Q�����@H9-�vW�;���H���C���.���fDH���VH�C H�:H�x(H�x�������fDH�G�"����L��L������V���A�EQ1����H�ݟVH�L$��|$H�����I�E�����)��H�D$0L�@H� tL�@L�D$���8�b��H�t$0L��H�=��H��1��y��|$���D����L�D$L��苤�L�k I�} ����ɧ�8���H�t$0L��H�=��H��1��)��|$谖����
�f���AUATI��U��SH��H��H��H�B L�h�����thH�C H�PH�7�VH;tj��uH���VH�
X�VH�H9��L����J���H�S H��ur�zQ�tH����`��H�C H���@Q�B�����u�H���[]A\A]�fDH��t��tN����L������H�C A��H�xE�����H��t�H�S I��L�jL�jH��[]A\A]��H���H��u��-����H�������A���ff.���S����H��H����H��[�fD��UH��S��H��H��sWH9�t-���E1�H��څ�H�=�sW��A��H��[]���H���`���H��H���%��H��H��[]�ff.���ATI��U��H��SH�������tIH�C L���H�P��J��H�C H�x����H�hH�����H�C �oE`�oMp@0H@H��[]A\�H�4�VH�5��H�81�������SH�����H�C H�xH��VH;8u!H��u
H��[�a-���@��u�H���H��u�[�x�����SH���3���H���^��H�C �xQ�t�@QH�@H��[���SH������H�C [H�@�f���SH�����H�C [H��f.���SH�H�����H�C [H�����SH�G H���@R���H�C H�xH�,�VH;8u)H��uH��[�y,��f�@��u�H���H��u��)��H��[�@��SH���C���H�C H�@����tW�xPt_H���'���H�C H�xH���VH;8u+H��t@��tH��[�+���H���H��u�@���H��u1�[�f.��[�f���SH��H��H�t$�����tXH�C H�xH�7�VH;8u4H��uH�t$H�ڿ���H��[�D@��u�H���H��u�H�t$�d���H��[�H�נVH�5`�H�81��v��fD��USH��H��������tzH�C H�xH���VH;8u6H��uH��H��1�1�[]����@��u�H���H��u�fDH�GHch裠��H;,pWtH�K H�QH)�H�QH�QH��[]�H�)�VH�5̺H�81��������ATI��U��H��SH���h��tUH�C H���VH�@H;u0H��uH��L��[��]A\��
��f.��u�H���H��u�[L���H��]A\�?���H���VH�5O�H�81��7�����SH������tGH�C H�xH�p�VH;8u-H��uH��1�1�[�Y
��f�@��u�H���H��u�[�(���H�!�VH�5�H�81������ATUH�-D�SH��fDH���`����H�C H�xH��t@��uH���H��ty����E1�H��mWA��H��u ��H���˶�H�dmWH��t�H�S 1�E��H��H�z1����H��u-H�S �zQ�t#H���PZ��H�C �@Q�[����[���H��t�[]A\����ff.�����ATUH�-V�SH��H�������f.�H�C H�xH��t@��uH���H�������E1�H��lWA��H��u�H�����H�tlWH��t�H�S E��1�H��H�z1����H��u/H�C �xQ�t H���hY��H�C H���@Q�����`����[]A\�fD�K���f���SH�����tOH�C H�4�VH�@H;u+H��t�tH��[�y'��f�H���H��u�@H�����H��t	[ø[��D��@����ATUH�-�SH��H���"����f.�H�C H�xH���VH;8��H��t@��uH���H�������E1�H�kWA��H��u�H���s��H��jWH��t�H�S E��1�H��H�z1��0��H��u/H�C �xQ�t H���W��H�C H���@Q�h���P����[]A\�fD����f���ATI��U��H��SH���(��tjH�C H���VH�@H;u0H��uH��L��[��]A\�	��f.��u�H���H��u�H�ډ�L������H��H���ȷ�H��tH��[]A\���D��H�kWH9�tpAUE1�ATUH��S��H���9��H�8iWA��H��u L�%8��L���#��H�iWH��t�H�=�jWH��E���H��[H��]A\A]���fDH��������AWAVAUL�-��ATUSH��H��H�|$L�d$H�t$dH�%(H�D$81�H�B L�p���H��H�������H�C ��f�H�Y�VL�xL;:��M��tA��uI���H�����<��E1���H��hWA��H��u ��	L���#��H��hWH��t�H�S H�L$E��H��H�z�T$����I��H�S L��H���BQ���H�E�� ��H����H�S L�H��H�BH�B����H�C �.����@PH��H�L$8dH3%(uPH��H[]A\A]A^A_��H�t$�|$L��L����?��L��L������H��I���U���Y����H�E�v����2��f���H��hWH9�tpAUE1�ATUH��S��H���	��H�gWA��H��u L�%���	L�����H��fWH��t�H�=�hWH��E���H��[H��]A\A]���fDH���������AWAVAUATU��SH��dH�%(H�D$1�����I��H���H�$A�E1�I�@DH��������H�C H�PH��VH;� H��t��uH���H�����H��L������H�<$H���H���H���Y��I����H�$��t8H�PI9�~/L��H)�H��L��H�D?I�$H��������[���H�$H�L$dH3%(�H��[]A\A]A^A_�@L�6����H�F�H�$9���E1�I��tA����M��I�H������H����H�<$1�����I�D$�����L���6���H�<$H�������H�$H������f.�H�C �xQ��/���H���R��H�C �@Q�e���D�������fDL�����I��H�$�V����1���膬�������b��f���UH�- �SH��H�����tcH������tG�H��dWH��u@�H���#��H��dWH��t�H��H���\ ��H���D���u�H��H��[]�fDH��H��[]����f���UH�-��SH��H���W��tcH������tG�H�!dWH��u@�	H��蓭�H�dWH��t�H��H������H������u�H��H��[]�fDH��H��[]�b��f���UH�-�SH��H���Ǧ�tcH���k���tG�H��cWH��u@�	H�����H�lcWH��t�H��H���<��H���$���u�H��H��[]�fDH��H��[]����f���AVI��AUA��ATL�%��UH��S�/����H�������tuH��bWH��u#��	L���k��H��H��bWH��t��G��H�U H��L��I��L����H��H�zPD���r��ZYH��$t�H�E H���@Q�Z���u�[H��]A\A]A^�f.�軻�H�����[L��D��H��E1�]H��A\A]A^������SH����H�C H���VH�@H;t[�DH��t�uH���H��t�H��[����f.���SH������tVH�C H�D�VH�@H;u+H��uH��1�1�[�)��f��u�H���H��u�H�XH��脨�HcC[H�D�H��VH�5�H�81������H�ݍVATA��A��USH��H�(H��t$�H�=�u"H�������t
H�?�VH�(D���D��H��H��[D��]��A\�0���H�}�VH�
���H�H�׍VH�8�W����H�M�VH�
Y��H�H���VH�8�'����H��VH�
2��
H�H��VH�8�����H�GH��t�f�SH�����$�������{H�����H�C[�f.���USH��H��H��u�H���ю�@��u�H���H��u�H�{t)H�����H�kH��tH���~���H���V��H�C��������H�@H�PH�@H�@ H�@(H�@0H�@8H�@@H�@HH�@PH�@XH�@`H�@h�@pH�@xHǀ�Hǀ�Hǀ�ǀ�Hǀ�Hǀ�Hǀ�Hǀ�Hǀ�Hǀ�H�H�CH��[]ÐAWI��AVE��AUA��ATI��UL��SH��A�pI��L$I�HH�|$���L������foEL��H�ËD$C`foM�CKp��A��AuH�C H��D��D���SO���C��蹄�u�D$u!H��L��[]A\A]A^A_�@�K0�D$t�L��襻����AVAUATI��UH��H��SH��H��@dH�%(H�D$81����:H��A�ƉD$蟳�I��H�������H�\$I�}H�KL�D$H��H������L$�ȃ�t�Ⱥ��%��E‰ωD$ H�D$(��I��L��H���A�����H�T$8dH3%(uNH��@[]A\A]A^�f.�A��u"H�\$E��1�L��H�KH���Q����k���@���D�t$I����脹�@��UH��SH��(H�|$dH�%(H�D$1�H�D$H�D$�/���H��H�D$H�ƇVH�8莰�H��H��H�@H���x���H�L$dH3%(uH��([]���ff.����UH��SH��辫��H��H�Z�VH�8�"��H��H��H�@H��H��[]����fDAWI��AVAUATUH��S��H��dH�%(H��$�1�H����H�D$E1�A��f�H�l$ H�����A��)D$P)D$`)D$p)�$�)�$�L�t$(�\$0H�D$4H�D$<A���;A����A��t;���H�t$�8����f.����I��H���e���H�H�D$�d���f�L�l$ I�}�r��x�M��tHcD$8�H��H�T�"��H���(H�T$H��H�=����t��D$���$H�D$(H�|$L�D$PL��A�PH�5����H�H 蠟�H��A���u��E���L�؃���������|$8A������&}�D�l$4H��V��H�8�H��H�@H��H���u��H��D�hH�@�؃�(�AM���
fAoI`fAoWQpD�qH�L$E���H��$�dH34%(H���wH�ĸ[]A\A]A^A_�@�\A�ƅ�����L�����H�[WH�x�t�H��ZWH�x�t�두L�l$ I�}�Ұ�����I�}����M���^���HcD$<�H��H�T�i���+���@L�l$ I�}肰������M������HcD$4�H��H�T�*������DH���V����փ�(H�8�Ѭ�H�@H��I�����H�L$D�`�XH�YW�a�L�iXH��u'H�T���H���3��H��XWH��t�L��H��H���v��t���@�|$4A������{�D�l$8�������|$4���z�|$8��z�A��ti�|$Pt*H�t$P���{�fD��������Ip��H�t$�����@�|$8�z�|$<D�l$4�z�D�d$@�^�����|$<�oz�|$@�fz�냋|$<��x�Wz�|$@��x�Jz�|$4��x�=z�|$8��x�0z�H���H��|$���������|$<��
z�|$@�z�H�t$������D��ATUH��SH��H��PH�|$H�4$dH�%(H�D$H1�� ��H�D$H����H�8�� ��H�xH������H�p 1�1�脖�I��H�D$H�D$ H�D$I����H��tH��L���7��H��H��tH��L��蓷�H�l$ H��1�H��H�L$I��L�D$���|$����t$H��L���L���H�\$HdH3%(uxH��P[]A\�H��H�p���S���L�d$L��蓡�H�D$H�xu'H�PH� tH�P�:-u�A��b���DL��1ɺ�茕�I�������_��H�8�VH�5��H�81��׻����AWAVA�AUA�ATI��UH��S��H�������������4H�uH�}L��L������H��H����L�`M��u�q��u/H��H��[]A\A]A^A_�A��u�L��H��藞��B��t�H�=�VH��H��H��H�����[]A\A]A^A_�q����k���fDD��Ic�H�<�蠥�I��H��twA��t�H�}D��腥�I��H��������H������@賗��>���H�=��V1Ҿ��蓴�H��諪����H��螪�1��'���A���1�I��@�ǍW�w��ě�@��AUATI��U��SH��(dH�%(H�D$1�����H�nSWH��u%L�-��f��L���s��H��H�ISWH��t�I�<$H��踼�tT�?��E1�I�<$H�ޅ�I�L$�U�A�����H��躖�tuH�=��VH��H��H�����p�H���W�I�<$H�D$H�D$H�|$���H�D$H��t�H����H��H��u<@H�A~VL���H����H��H�L$dH3%(H��uGH��([]A\A]�H�ƟH�5��1�H�=���ԇ��I�$L���H�LVH�����H����B��f�UH��S��H��H�H�|$t1�H�t$1ɺ�3��H��H����f���H��[]��H�GH� tH�G�8-�u���ff.�AWE��AVM��AUA��ATA��UH��SH��H��H��~VH98uH���\�H��H�D$uAH�ߺ��ߥ�E��M��D��H�@H��D��H��[H��]A\A]A^A_���f�H���H�5z�1�H�=��褆��D���<���H�L$L��D��H��[H��]A\A]A^A_����ff.�AWAVI��AUI��ATA��UH��SL��H��XH�:dH�%(H�D$H1�H�D$H�|$H�D$ ��A��H��H�CH�D$D�#H�kI����I�Ǻm�H�l$ H�T$H�|$H��I��H�t$L�D$L��H�D$�m��H�|$A��H��t�G��A���L$�$I��L��L���_���H�CH�D$HdH3%(�H��X[]A\A]A^A_��H�5QQWL���A}�H��tcH���C��H�H�ʁ� ueH�HHc�A��H9������H�hH��uH�h A�E��uAL�|$������DL�|$���f�H������E�`�Ic�H�|�H��t"@��uH���H��u��|�I��E��t�E��H�EA��t:H�UA��uL�|$����
��1���������1�D������f�AWAVAUATA��USH��hH�T$dH�%(H�D$X1�����D��贖�@D��H��A��Ic�H�,�����rE��A���6L�sA����DH�����{�I��H�5�OWL���{�H��u!H������L��HE�H�5�OW��H�|$L�D$ L��H��D�����E����H�D$0H��tzH�\$@H��tDH�\$@H�T$�D$H��H�=ͱ��H�D$@H�l$H�D$P�}�D$����H�D$0H��{VH��H��H�=A���H�D$@L�t$H�D$P�j�H�L$XdH3%(umH��h[]A\A]A^A_�H�kA�����E���|���f��{��I������H�|$0�v����"����H���z�H�����H�|$0膗�|$�������������f���1����D��AVAUA��ATUSH��dH�%(H��$�1�H�D$H�D$`H�D$pH�D$H�D$hH�D$xH��$�����D���_����_�I��H��Hc�L�4��3���CD��H�T$`�L�J�M��t
Lc�O��M���H��I9�tL�B9��M��t�H��I�I9�u�H�D$9��PL�l$I����A����L��H�H���0L�t$ H�L$L���M��H�����H�D$0H����H�T$H�t$@�D$H�=q���H�D$@L�l$H�D$P�J{�D$�����|$ u�D$ H�L$0H�CyVL��H�=)����4h�H��$�dH3%(��H�Đ[]A\A]A^�DL���px�������E1��o���L���������L�t$ H��L��H��M�����H�L$0H���q�����z���H�|$0���|$�k��A������H��H�I|VH�5��H�81�����S����AWAVAUATU��SH��XdH�%(H�D$H1��������'����_�I��I��Hc�L�,��������A���t1�������9�t���H�l$ I�t$L�mH�M�{�L�����I��L��L���L�����H�D$H��t8H��L���*�H�t$L��H�t$ � ��H�L$H��H��wVH�=�p���}f�H�T$HdH3%(u/H��X[]A\A]A^A_�fDL���v�I�ƅ��:���1�������f���AWAVAUATU��SH��XdH�%(H�D$H1������������_�I��I��Hc�L�,��������A���t1�������9�t����+����H�l$ I�t$L�uH�M�{�L�����I��L��L���L���S���H�D$H��t8H��L�����H�t$L��H�t$ ���H�L$H��H�<vVH�=�p���0e�H�T$HdH3%(uRH��X[]A\A]A^A_ÐL���xu�I�Ņ��2���1����fD蛡�H��蓲�E1�L���H��L������詤�f���AUATUS��H��dH�%(H�D$x1��D$`H�D$PH�D$XH�D$h��~!H��I�Ճ�t+���L�f�9�t�����4��@A�H�}H�l$0���H�E���H�uE1�1�L�D$P�L��H�D$P����H�D$ H��tsH��1҃���H�l$�T$I��t=H�T$H�t$0�D$H�=����H�D$0L�d$8�D$@�v�D$��uCH�D$ H��tVH�t$H��H�=z}���c�H�L$xdH3%(uH�Ĉ[]A\A]��B��H�|$ �Ȑ�|$���A����ff.�@��USH��8H�t$H�|$dH�%(H�D$(1��Ǒ��
H�|$1Ҿ��H�D$H��tnH����H�XH���"��H���*z���H��H���K��H�|$H�����H��蕇��H�D$H�D$ H�D$H�L$(dH3%(H��uH��8[]�@1�1��/v�H�����E��D��S��茙�H�@H��H��蹯�H��[�@AUI��ATUH��SH��1�H��XH�T$H�|$H�L$L��L�L$ L�D$dH�%(H�D$H1��D$�ҕ�H�߃��&�|�H�É�A���$c������1��N��D$�������芬�|$���H�|$����#D$���H�D$I����H���ܮ�foL$0foD$ H��H�(D�`�D$H��C`�CKpH�D$Hǃ�H�C ����{��j�uOL�-PqVI�}��a�D9���I�EH�C�D$��H�T$HdH3%(H����H��X[]A\A]Ð�K0�f.��+��H������H�5�DWL���p�H��u�L$�Q�*��L��H���p�H�D$H�������H�|$���H�|$�,��H�D$����f�L�-�uVI�}�a�D9��1���L�-tVI�}��`�D9������D$� ���H���ؠ�������D$�p����Ÿ���v�1��8��f�H��tVH�5�H�81��,��H��rV�H�t$H�D$-H��j_�H���R��f���AWAVAUATUSH��XdH�%(H�D$H1�H�z�sA������D���:��f.��_�H��I��Hc�L�4�����D��A�L�e����L�u���(H�m�9��&����H�D$L�d$L�t$H�l$H�D$ L��H�\$ 耲�H�|$I��H��H�t$L�D$L��H�D$莒�H�|$A��H��t�h��A���L$�$I��L��H�t$���L��H�T$HdH3%(ufH��X[]A\A]A^A_�@�A�L����H���E���L��L��H��L�������L���xn�I�Dž����E1�����Н�H�mVH�56�H�81��H�������A���e������AVAUATUS��������荈�D��A��H��I��Hc�L�4��`��u4D��H�u��tH�U��u���[L��]A\A]A^����L���m�H����u�����ATI��U��H��S�;o�L���H��H���K���H��[]A\���AWAVAUI��H��ATUSH���#��L9���H��I��L��輓�L�����H�XH�����L���0��L��H���E��C�oC`%����E`�oKp�E�CMp�E�C�EH���H���H�C H��tH�E H�C(D�sH�E(D��謹�A�Dž���D���)��D�}H��1��p���1��x���H��H�����E��L��辙�I9�uH��L��[]A\A]A^A_��H����\�I��H�EXH��>WH��u&H���fD�H��蛈�H��>WH��t�L��H��L���!]����sr�H����`o��1�H�ދx�S��E�S����G��;r��ljD$�t�tD��蒸�A�Dž�����r�|$1��b��L���h��L����I9����������f���H��?WH�@ H�xH�x����H�nVH��gVH�=W?WH�H9uoH���Lf�H�9?WH�@ H�x�ܐ�H��uVH�?WH�R �zQ�t}H�z�܇�H�=?WH�G �@Q�����u��H���f.�H��1�1�����@H��H�D$�S��H��>WH�J H�AH�PH�D$H�QH�QH���fD�H�D$���H�D$H���ff.�@��S�H��dH�%(H�D$1�H�{nVH��H�$H��H����H��iVH�޿H����H��jVH�޿H����H�D$dH3%(uH��[��,��ff.����1�H��t
�?�uH��=WH�R H�B(�SH���z�H��H����s�H��=WH�R H�B([���H��=WH�@ H�@ �ff.����U��S��H��dH�%(H�D$1��H��tH���`��H�$��u(��tF��stoH��H�lV��H�8�*Z�f.���uU��t5��st9H��H�hV��H�8�Y�H�=W�H���	X�H����}�H��<W��H��<W��H��<W�Љ�H�=��1��F��fD��UH��S��H����n�H��ߋ0��e�AWAVAUATUSH��h�L$dH�%(H�D$X1���~H��E��H���t$H�VH�T$��t������H�D$H��H����H���:L�l$H��L���X�H�߉D$�l��H�XH��萁�H��訂�H���oE��u�SP����H�D$H�xH� tH�xH��H���n��H��~IH�|$H;G��f.�H�L$XdH3%(H����H��h[]A\A]A^A_�f.���H�D$ L�5���H�$E��t0H���w��&D�sm�D�8E���H���?;�����L��H���\����H�|$H�\$(H�D$ �CD�d$0�D$4H�GH� tH�GH�$L��H�D$8H�l$@H�D$H�lPH���{���H�|$H;Gt��T$H��H�$� �H�$�H�����H�|$���@H�|$H������T$1����H�|$���H����H�������H������T���A��u�D$��tH�=^9W�y���H�S D��H�=��֢�H����1��3c����H��iVH��H�5g�H�81�胞�AVAUATUS��H��@dH�%(H�D$81���~#H��I��I��E�Ń�t-H�FH�D$���y������f.�H�D$L����J��L��A��追�����I�D$ H�PH�GiVH;urH��uUH�fiVE1�1҉\$ H�t$ �H�l$(H�=g��L�1�L�d$0�X��H��uMI�T$ �zQ�ugE��t=�M��D��u�H���H��u��1�E��E��H����������H��t�H�L$8dH3%(��H��@[]A\A]A^�@L��H�D$�c$��I�T$ H�D$H�J �BQH��� t&H����H���b���H�D$H��u�1�1��5g��H�Q��H�|$H���<���1�����0���H�������H�|$��H�D$H�E������ff.���AVAUATU��S��������}�D�_�I��I��Hc�L�4��ð�u/��uZ��L��L���A�[]A\A]A^����L���c�H����t+��t��t���H��u�����t��h���1��a���ff.�@��E1���?���ff.�@��H��E1���K���H��tH����K��ff.���UH��H��SH��H��(H�T$dH�%(H�D$1�H��t	�����u��H�D$�H�5�;H���4H���t��H���̥�H�XH����{�H���H��H���`F�������{� ��H�D$H�PH�pH� uZ�{�R��H��H�D$H�D$H�D$H�DH��xFH�L$dH3%(u]H��([]��H���H���>����C���H�p�f.���g�0��u H��u+H��4W�H�s H�{��贐�H�S H�=��T��H�6����^�ff.���AWAVAUATM��UH��SH��XH�L$dH�%(H�D$H1����H��H�H����L�t$H��L���K��H�5?:L��A���43H���L��H�hH���pz�H���{�H����H�D$H�xH� tH�xH��H���^��I��H����H�|$H;Gt"D��L����M���M���G�H�L$HdH3%(H���&H��X[]A\A]A^A_��H�|$H�t�D��1���H�|$�H��萎�H������}����L��H���=�H�|$H�l$A�ƋE�D$ �D$$H�GH� tH�GH�T$H�5$��H�D$(H�\$0H�D$8�LIH��x7H�|$L�L9��	���E	�I����f.�H�|$����fD�e�0��uIM��u1H�=�2W����H�LcVH��H�5�|H�81�����S��螉�H��~�1��[\�H�U H�=P��ۛ�ff.���AWH�=�~AVAUATUSH��H��`VH�0�Xi�H�-q`VH�=�~H��H�E�>i�H��bV�H�=9{H���z�H�=9#H�h2W�z�H�=�H�H2W�z�H�=C~�z�H�=8~H�2W�zz�H�=ۮH��1W�bz�H�=�H��1W�Jz����H�5���H�=yH��1W�O����H�5_��H�=�	#�O����H�5��H�=��"��N����H�5/���H�=�}��N�H�57���H�=Y{�N����H�5Ϯ��H�=�{�N����H�5g���H�=0�$�N����H�5��H�=���sN����H�57��H�="�[N����H�5��H�=
|�CN�H�5'�H�=!"�+N����H�5��H�=2�"�N�H��[V�����H�����H�5�|H�8�f�L�%:aVH�=zI�4$�:g�L�=�YVH��[VH��I�7H��>\�H�UH�;H�5�|��W�H��^VH�;H�5�|H���
��H�;�	H�5p|��H�;�H�5e|���H�;H�5�|�f��L�-�^VH�;H�5�|I�E�L��L�5�WH�;H�5/|H�-[VI�H�E�8W�I�uH��H��/W�[�I�H�;H�5|�W�H�uH��H��/W�`[�H�;H��/WH�5�{�J��H�;H��/WH�5�{�4��L�5ŠWH�;H�5�{I��V�I�uH��H�e/W�[�I�H�;H�5�{�V�H�uH��H�H/W��Z�H�;H�5���贒�H�;�����H����H�593��i�H�;�����H�j��H�5�#�i�H�;�����H�_���H�5�{�i�H�;�����H���H�5X�i�H�;�����H����H�5"z�mi�H�;�����H���H�5x�Ri�H�;�����H�S�H�5^y�7i�H�;�����H����H�5#�i�H�;�����H���H�5�z�i�H�;�����H����H�5�v��h�H�;�����H�W��H�5�z��h�H�;�����H����H�5��h�H�;�����H�q���H�5{	#�h�H�;�H�f��H�5ڤ�zh�H�;�����H�k�H�5gz�_h�H�;�����H��H�5���b�H�5�WV1�H�
T��H�=<zH���H�=4�"�@AL�-�[VH��I�E蝏H�-~UVI�E1�L�-9[VH�
��H�=�yH��H�EI�E�g��1�H��H�
���H�=�y�O��H�
���1�L��H�=�y�7��H����H�5Y��H�=�y�}x�H�=�y��H�;�H���H�5£��a�H�;�����H�����H�5_y�a�H�;H�VV�����H�5Sx�a�H�;�H�1}��H�5v�a�H�;H�SUV�����H�5�v�ja�H�;H�XTV�����H�5�"�Oa�H�;�����H��Q��H�5���4a�H�;�����H��Q��H�5�v�a�H�;1�H�-C��H�5�v�a�H�;1�H�EZ��H�5�v��`�H�;1�H��V��H�5�v��`�H�;�H����H�5ax�`�H�;�����H�A��H�5Ox�`�H�;�����H�?��H�5*W"�`�H�;�H���H�5!W"�e`�H�;1�H���H�5��M`�H�;H��H�5���ׄ�H�;1�H�����H�5�w�`�H�;1�H��UVH�5g�!�`�H�;H��SV�H�5�w��_�H�;1�H��_��H�5�w��_�H�;1�H�H`��H�5�w�_�H�;1�H� ��H�5p�"�_�H�;�H��
��H�5dw�_�H�;1�H�=U��H�5C�"�q_�H�;�H��T��H�57w�V_�H�;�����H�GO��H�5�t�;_�H�;�����H���H�5�u� _�H�;�����H�1]��H�5l�"�_�H�;�����H�Fv��H�5=r��^�H�;�����H�KN��H�5T�$��^�H�;1�H��S��H�5�v�^�H�;1�H�+UVH�5�v�^�H�;1�H��S��H�5pv�^�H�;1�H���H�5av�o^�H�;H��SV�H�5Ov�T^�H�;H��WV�H�5>v�9^�H�;H��UV�H�5h��^�H�;1�H�
VVH�5�t�^�H�;1�H��Z��H�5�s��]�H�;�����H�?Z��H�5cs��]�H�;�H�5�u���H�;�H�5�u���H�;�H�5�u��H�;�H�5�u���H�;�	H�5�u�ϝ�H�;1�H�sX��H�5�r�W]�H�;1�H�Z��H�5��?]�H�;�H�pW��H�5��$]�H�-�VVH�;1�H�5b#H���	]�H�;1�H��H�50u�\�H�;1�H�)
��H�5u��\�H�;�H����H�5u��\�H�;1�H�j��H�5�S"�\�H�;1�H��VVH�5�"�\�H�;1�H�&k��H�5�t�z\�H�;1�H��h��H�5�t�b\�H�;1�H����H�5�t�J\�H�;1�H����H�5� �2\�H�;1�H�f���H�5�t�\�H�;1�H�n��H�5�t�\�H�;�����H���H�5tt��[�H�;�����H�8��H�5at��[�H�;�����H����H�5Mt�[�H�;�����H�����H�58t�[�H�;1�H�:���H�5��!�~[�H�-7UVH�;1�H�5��H���c[�H�;1�H��H�5�	�O[�H�;1�H�s�H�5ӣ�7[�H�;1�H����H�5��[�H�;1�H�c���H�5��[�H�;�����H����H�5N���Z�H�;1�H�����H�5|s��Z�H�;1�H�H���H�5xs�Z�H�;�H����H�5hs�Z�H�;�����H�"��H�5��"�Z�H�;�����H�W7��H�5=s�kZ�H�;�����H�|��H�50s�PZ�H�;�����H��6��H�5#s�5Z�H����H�5���H�=s�p�H����H�5]���H�=s�p�H����H�5C���H�=�r�gp�H� ��H�59���H�=�r�Mp�H�=�r�Q�H�=�r�E�H�=�r�9�H�=�r�-�L�5fTVL���{�H��OVH�H�
`o�H�8�@���H�-�OVI�H����z�H��TVH�H�
8o�H�8����L�-iPVH�EL���z�H�SVH�H�
o�
H�8�ߧ��H�UI�6H�=rI�EH��#WH��#W�*U�H�uH�=�q�U�I�uH�=�q�
U�I�<$��I�4$H��qH��H��軃�H��H�5����܆�I�7H����N�H�߹����H�R��H�5��vX�H�߹H����H�5G��[X�1�H��H�?���H�5?��CX�H��H�0�H�5ɠ��|�1�H��H�����H�5Jq�X�1�H��H�y���H�5g�W�1�H��H�a���H�5K���W�1�H��H�����H�5�o��W�1�H��H����H�5�p�W�H�߹����H�ֽ��H�5��W�H�߹����H�����H�5Sm�W�1�H��H����H�51m�gW�1�H��H�k���H�5m�OW�1�H��H�û��H�5�l�7W�H�߹����H�h���H�5��"�W�H�߹����H���H�5�m�W�H�߹����H���H�5�p��V�H�߹����H���H�5rl��V�H�߹����H�̶��H�5���V�H�߹����H�1���H�5�$�V�H�߹����H�v���H�5wp�zV�1�H��H�^���H�5in�bV�1�H��H���H�5Gn�JV�1�H��H���H�5n�2V�1�H��H�����H�5n�V�1�H��H�N���H�5�k�V�H�߹����H�����H�5wk��U�1�H��H�ۯ��H�5Kk��U�1�H��H����H�50�U�H�߹H����H�5�U�1�H��H�p���H�5�"�U�H��1�H�X���H�5�m�lU�1�H��H���H�5�m�TU�1�H��H�����H�5�m�<U�H�߹����H��p��H�5th�!U�H�zIVH�߹����H�5�k�U�H�߹H��p��H�5ii��T�H��HVH�߹����H�5j��T�H��GVH�߹����H�5hx"�T�1�H��H���H�5�m�T�1�H��H�Ѭ��H�5���T�1�H��H�����H�5��mT�1�H��H�q��H�5�m�UT�1�H��H�9���H�5K"�=T�1�H��H�ѫ��H�5y�"�%T�1�H��H����H�5��"�
T�H�߹H�~�H�5�k��S�1�H��H���H�5.m��S�H�߹H�+���H�5 m�S�1�H��H�#���H�5e�S�1�H��H�����H�5;�S����H��H�����H�5֚�tS�H��1�1��89�H�5WH�=�lH��W�~��H�5�WH�=�d�{O�H�
��H�M���H�5�WH�=���:��H�kIVH�l���H�5�WH�=klH�����H��W�H�=�0"H�h �L�H�
����H�<��H�EH�5aWH�=1l�Ֆ�H�=%l�9�H��H�/���H�58WH�=l謖��G}��H��FV�����H����H�5�H�8�eR�H�=�k�De�H����H�=�kH��W�$e�H���܅�H�=�kH�yW�e�H��輅�H�=�H�QW��d�H��蜅�H�=�H�)W��d�H���|��H�
W���H���h��	H�=5kH��W�d�H���H��H�=kH��W�pd�H���(��H�=�iH��W�Pd�H�����	H�=�jH�mW�0d�H�����H�=�jH�EW�d�H���Ȅ�
H�=�jH��W��c�H��訄�H�=��!H��W��c�H��舄�H�=�jH��W�c�H���h��H�=mjH�mW�c�H���H��H�=VjH�EW�pc�H���(��H�=ǰ!H�W�Pc�H�����H�=:�!H�]W�0c�H�����H�=��!H�5W�c�H���ȃ�H�=$H�
W��b�H��訃�H�=hH��W��b�H��舃�
H�=�hH��W�b�H���h��
H�=�hH��W�b�H���H��H��WH��[]A\A]A^A_�f���H�5eRUH�=�h�)�f����W� ��tH�GH�� �����ff.���H��z�H�H��t`S�GH���u=�u)H�H�C�CH�C[�f�H�sH�;�~���f�H���HU�C�t���������f.���H�ERUH��� �Ga�H�P �@uH�P H�H�BH�BH���ff.�f���H��H�5�QU�\6�@H��H��9H��?���f���H��H�5�QU�,6�@H��H��:H��?���f���H��H�5�QU�5�@H��H��<H��?���f���H��H�5aQU��5�@H��H��=H��?���f���H��H�51QU�5�@H��H��>H��?���f���H��H�5QU�l5�@H��H��?H��?���f���H��H�5�PU�<5�H�xH�H�����ff.����H��H�5�PU�5�H�8H�H�����ff.�f���H��H�5qPU��4�@H��H��8H��?���f���UH��SH��8dH�%(H�D$(1�@��t]H�1��cM�H��H��H�=RH��H��H�,$H�D$H�D$H�D$�<2�H��H�T$(dH3%(uH��8[]�f�H���Hq�H�����q�ff.���H��H�5�OU�4�H�xH��������?H9�wH�D?H����H���_X�ff.�@��H�WH�wH�?�<a�ff.��AUI��ATI��USH��H��8dH�%(H�D$(1��j�H��者�H�hH���[�CH�,$H�\$L�d$L�l$� t*L��L��H����`�H�L$(dH3%(u-H��8[]A\A]Ð�� H��H���CH��H�=F�����0�����p�f.���H��H�WH�wH�?��i�1�H��Ð��UH�5dNUH��SH����2�H�Ë@� u�� H��C���c�H��[]�H�=�WH�5�n1���y�ff.�@PXH�5�n1�H��H�=��W�y�D��H�W�B� t��߉B��P���ff.�@��SH�5�MUH���2�@ u
H������H��[�H�=R�WH�5cn1��Dy�@��SH��H�H��t�	]�H�{�@��[�f�PXH�5WrH��H�LDVH�81���x�f�PXH�5orH��H�,DVH�81���x�f�PXH�5�m1�H��H�=��W�x�DPXH��H��CVH��H��H�5VrH�81��x�ff.��PXH�5�mH��H��CVH�81��bx�f�AWI��AVE��AUI��ATI��UL��SH��H��H��t;L�#L�kD�sH�kH��t,@��u&H��H��L��[]A\A]A^A_�h[��H��uH��[]A\A]A^A_�@A��u"A��u<H�=��WH�5#m1���w���H���#w�I��M���l�����D1�A���L����A�����E1�1���!���I��H���tH��lL��H��������D�H�5�l�8��4�ff.���
�W��t�DH�����W�=�����٪�H���ff.�PXH�5�lH��H�<BVH�81���v�f�UH��H��H��AWM��AVAUI��ATSH��H��HH�U�H��H%�H�u�H���dH�<%(H�}�1�H��H)�H��H9�tH��H��$�H9�u���mH�}�H�D$H����8L�H�E�L)�I��H�}�I��M9��fDH�U�H�}�1�D�M��50�D�M�L��E����H�5�kH��1��dj�H�}�u<�x�U���Q��u�H�H��Dp@t1C�4>H�5�kH��1�I���&j�M9�t>M9�sH�E�B�8��~v�C�>.����H�5un"H��I���]�M9�u�H�U�H�5,�!H��1���i�H�E�H�M�E1�I��I�I)�I9�v5H�H�E�����f�H�5�jH��1��i��&���f.�H��H�]�dH3%(uH�e�[A\A]A^A_]�H)�H�L�����\k�ff.��ATA��USH��H�����H�5IUH��H���k-�H��u^A�́A�Āt<H�KH�SH� tH�SI��E��H��H���&���H��H��[]A\�f.�H��H�D$�CN�H�D$�@��u�H�H�у�H��t���u�A��A�Āu�����SH��H��@H�t$H�|$dH�%(H�D$81��UY��Q�tTH�D$H�t$H�����H�\$H��H�=\H�D$ H�D$�D$(�Q*�H�L$8dH3%(u*H��@[�H�|$�~5�H��H��H�D$�������i�f���SH���WH�wH�?���H�{H�C��t�H�{[�҆�f�H�H�HH9�w
HcH�
H�D�PH��H���{���ff.�H�H�HH9�w
�H�
H�D�PH��H���K���ff.�H�H�HH9�wH�H�
H�D�PH��H������f.�H�H�HH9�w�H�
H�D�PH��H�����ff.��H�H�HH9�w
�H�
H�D�PH��H�����ff.�H�H�HH9�wH�H�
H�D�PH��H�����f.�H�H�HH9�w�H�
f����H�D�PH��H���T���@H�H�HH9�w�H�
ȉ�H�D�PH��H���(����H�H�HH9�w�H�
�H�H�D�PH��H������H�H�HH9�w�H�
f��H��H�D�PH��H������UH��H��SH��H�H�pH9�w/H�σ�H��u�XZ�H��DH�H��[]�fD�B����t���@UH��H��SH��H�H�pH9�wH��H���mO�H�f�DH�H��[]��5���DUH��H��SH��H�H�pH9�wH��H���-O�H��DH�H��[]����fDUH��H��SH��H�H�pH9�w/H�σ�H��u�Y�H�f�DH�H��[]�D��A������@UH��H��SH��H�H�pH9�wH��H����Z�H�f�DH�H��[]��d���@UH��H��SH��H�H�pH9�w#H��H���Z�H��Z�f~DH�H��[]�� ���UH��H��SH��H�H�pH9�wH��H���N�H��DH�H��[]����fDUH��H��SH��H�H�pH9�w/H�σ�H��u�xX�H��DH�H��[]�fD�@������@UH��H��SH��H�H�pH9�w+H��H���Y�H�f���Z�f~�ȉDH�H��[]��H����UH��H��SH��H�H�pH9�w/H�σ�H��u��W�H�ȉDH�H��[]�@�@�����@H��H�
H�AH9�wy�f�H�H�0ɉL$�ZD$fH~�H9�tFfH~�H��<������tH��H��u#H���fDfH~�H��H��H��H���f�H���G"�H��H���\���ff.��UH��H��SH��H�H�pH9�wH��H���ML�H�ȉDH�H��[]�����@UH��H��SH��H�H�pH9�w/H�σ�H��u�V�H�f��f�DH�H��[]Ð��>������@UH��H��SH��H�H�pH9�w"H��H���K�H�f��f�DH�H��[]���UH��H��SH��H�H�pH9�w&H��H���W�H�fH~�H�H�DH�H��[]��=�ff.�f�H�
H�AH9�w)H�<H�H��������?H9�wH�D?����I�RH��H�����ff.�@UH��H��SH��H�H�pH9�w>H���tH�H�LH�H��[]�DH���PB�H��H�H�LH�H��[]���DUH��H��SH��H�H�pH9�w>H���tH�H�LH�H��[]�DH��� '�H��H�H�LH�H��[]��%�DH�
H�AH9�w)H�<H�H�@H�xH�D?����3�RH��H�����ff.�@H�
H�AH9�w)H�<H�H��������?H�H9�wH�D?�D�{H�RH��H����ff.�@UH��H��SH��H��H�H�rH9�w2��t H��H�H�H�DH�H��[]��H���&�H����.�ff.�UH��H��SH��H��H�H�rH9�w2��t H��H�H�H�DH�H��[]��H���@�H������ff.�H�
H�AH9�w)H�<H�H�@H�H�xH�D?�D�{2�RH��H����ff.�@��AVI��AUA��ATUH��S���A����H�55>UH���"�I��E��uEH�-VH�H��2VA�H9�DG�H��L��H��A�1��L�[H��]A\A]A^�I�H���U��um��t4H�A��u�M�nL���7��u7L����G�A��A�����H���$�H���º1�D���J�H��4VH�5_H�81��$i�H�m4VH�5�^H�81��i�ff.��H��(H��dH�%(H�D$1�H�H�pH9����f�H�2�D$�L$�D$H�0�Z�fH~�H9�tQfH~�H��<������t%H��H��u.H�L$dH3%(u7H��(ÐfH~�H��H��H����DH�D$dH3%(u	H��(�o��^�H����f�H��(H��dH�%(H�D$1�H�H�pH9���H�H�2H�0H�L$H9�tVH��H��<������t,H��H��u5H�|$dH3<%(uIH��(��H��H��H��H�����H�D$dH3%(uH�L$�D$H��(����]�H�����H��H�
H�AH9�wlH�4H�H��H�H��0tEH��H��<������tH��H��u$H����H��H��H��H��H���@H�L$�D$H����H��H���)�f���ATE1�USH��H�WH�w�)�tNI�L9cvEH�sH�SH�H)�H�sH�S�;�t�H��H��y��3�H���tU[H��]A\�C�f�I���tH��������?I9�wK�D$[]A\Ð[�]A\�fD[L��]A\�TC�@�[]A\��H�H�D���ATE1�UH��SH�O H�WH�w�0@tVI�L9evMH�uH�UH�M H�H)�H�H�uH�UH�M �}��H��H��y��/3�H���tYH��[]A\��B�DI���t"H��������?I9�w#K�D$[]A\�f�[�]A\�fD[L��]A\�B�@�[]A\��H�H�D���ATE1�USH��H�WH�w�)�tNI�L9cvEH�sH�SH�H)�H�sH�S�;�-�H��H��y��k2�H���tU[H��]A\�	B�f�I���tH��������?I9�wK�D$[]A\Ð[�]A\�fD[L��]A\��A�@�[]A\��H�H�D���ATE1�UH��SH�O H�WH�w�0@tVI�L9evMH�uH�UH�M H�H)�H�H�uH�UH�M �}�F�H��H��y��1�H���tYH��[]A\�=A�DI���t"H��������?I9�w#K�D$[]A\�f�[�]A\�fD[L��]A\��@�@�[]A\��H�H�D���UH�5�7UH��SH���G�@ ��H��H��tU@��u_H�}�f�H�5�7UH��H�����o�oKHH��H�H�CH�CH��[]�H�1/VH�8�@H��t:H��tD@��u@��tHH��+VH�8�@H�)&VH�8�n���f�H��+VH�8�V����H��'VH�8�F����H�i*VH�8�6���H�=�pWH�5�\1��b�ff.����AVAUA��ATUS���I��H��H�5�6UH����I��E��tSI�H����A��u@M�nI��t61�L��������A���bI�I�T$I�DH9�s��M�l$1�H��tl@����H�}���H�5"6UH��I����A�T$I�t$I$L�h��H�	PH���H�pH��t
@����[L��]A\A]A^�H��-VH�8�@H���8���%����H�A��uM�nI������M�l$I9���I)��9���f.�H�hH��t�@�������H��L���rD�[L��]A\A]A^�fDH��tjH��tt@��uN@��txH��)VH�8���f�H����H���\���L�����I�T$I��H�����H��#VH�8����H��)VH�8����H�a%VH�8����H�(VH�8�s����1���A��`��K�H��+VH�5<VH�81��3`���AUATUSH��H��H��t
I��A����H���#�H;��V��H;�V��H;�V�^H;��V�QH;��V�DH;��V�7H;x�V�RH;c�V�EH;N�V�8H;9�V�+H;$�VtKH;�VtBH;�Vt9H;�Vt0H;�V��H;�V��H;��Vt
H;��V��H���[]A\A]��H�H�ƒ�H�������E1�H�k�� � DH����I9��@H��J�<��d"�H;�V�H;��V��H;��V��H;��V��H;q�V��H;\�V��H;G�V��H;2�V�|H;�VtsH;�VtjH;��VtCH;�Vt:H;�Vt1H;�Vt(H;��Vt=H;��Vt4H;��Vt
H;��V�����H���[]A\A]øI�H�I���� ���L;c}/H�C ���fD���f���f�H��������?I9�w!H��K�D-[]A\A]ÐH���[]A\A]�H��L��[]A\A]�:�fDH���	[]A\A]������AUA��ATI��UH��SH��H�� VH�8�
��H�5S1UH��H����E��L��H��H��H��A���H��H��[]A\A]���UH�51USH���z�H�pH��H�o%VH;0�B�1��e8�H�5�0UH��H���C�H�KH�3H�8H��t1�f���҈H��H9�u�H��H��[]�@��ATUSH��H�5�0U��H�5�0UH��H�����H�xt~I��H��$VH�u�H;0�B�1���7�H�5D0UH��H����H�}I�t$M�$L�ML�H��t&1�fDH��1�H��A�A2	A�
H��H9�u�H��[]A\����ff.�f���ATUSH��H�5�/U�9�H�5�/UH��H���'�H�xt~I��H�$VH�u�H;0�B�1��7�H�5�/UH��H�����H�}I�t$M�$L�ML�H��t&1�fDH��1�H��A�A
	A�
H��H9�u�H��[]A\���ff.�f���ATUSH��H�5/U�y�H�5/UH��H���g�H�xt~I��H�^#VH�u�H;0�B�1��K6�H�5�.UH��H���)�H�}I�t$M�$L�ML�H��t&1�fDH��1�H��A�A"	A�
H��H9�u�H��[]A\��]�ff.�f���AWI��AVI��AUI��ATU��SH����H��VH�8����H�5(.UH��I����L��H���E�s�A��@�ŀt	@�΀���@tC��@��s1�M��L���;k�H���t/H�L��L�k�KH��[]A\A]A^A_�D��	����&�H�5sO�8������G�AVAUATU��S����I��L�.��t
H�^H��uyL���c�H����H�Ã�~@M�t$A��tuI���ueI�l$H�������H���H7�����fDE1�1�L��H��L��[]A\A]A^�-X�DH���`��u{��t'H��f�1���@L���@N�I���~����H����H���S�������9�H��#VH�5tNH�81��9X�H��#VH�5NH�81��!X�H�j#VH�5�MH�81��	X�f���ATI��H�50,UUH��S��H�xH��H��u!H�H��t)I�$H�CH�E�C[]A\�DH�PH�0���u�I�$[1�H�E]A\ÐUH��SH��H��(dH�%(H�D$1�H�D$H�D$H��t@��tGH�T$H�t$�%�H�D$H��t^H9�rYHD$H�H9�����H�L$dH3%(u<H��([]ÐH�H�Ѓ�H��u�H�OH�G�� tH�GH�L$H��u�fD1���GM����ATUH��H�5�*USH���f�H�5�*UH��I���T�H�x��I�4$H��H�L��H��H���@H��H��H��L��I��H��H9�w�HAH9�r8A�D$�uI�|$H��t`H��t@��t/H�=dWH�5�L1��-V�DH�=	dWH�5gL1��V�H�H�ƒ�H��t��u�I�T$�e�����tBI�4$H��t1M�D$H�}L�MM��t1�@H��1�H��A�0H��L9�u�H��[]A\�H�=�cWH�5#L1��U�����DATI��UH��SH��H�H�3H��uH��t&H�C[I�4$H�E]A\�H�S������tH�3H��u�I�$[H�E]A\�H�='cWH�5�K1��!U���AWAVAUATU��SH��(dH�%(H�D$1����7I��H��H�5&)U�
�I��t I�H������tM�fI����M�}1�M��I)�H�T$H�t$L��������tG��X�M9}��H\$H��L��H���uQ�H�L$dH3%(��H��([]A\A]A^A_�f�I�~�E��DH���������tKH���t
M�fI��uM�}I9��X�������1�L�����udA��tI�M�<�2���H����H���L����I��L�<�����1��05�����J�H��VH�5�IH�81��S����f���ATH�5�'UI��US��H�=
kH����H��M����H�JVH�8�
�H��H���%�H�KH�1�H�5�IH���wG�H�;�
�C������������Y��1� �	�@������H�{u2[H��]H�5��"A\��:�f.�A��uRI�|$�Q���H��H�5�I�:�H�{H��t�H�SH�3������u��H�5\IH���n:��@I���^I���dA���A���`H��VH�8������	H�5�HH���:��.�����H�5�HH���9�C����@�H�5�HH����9�C����@�H�5�HH���9�C���@�H�5ZHH���9�C���@�H�52HH���|9�C�b���@�	H�5HH���\9�C�:���@�	H�5�GH���<9�C����@H�AVH�8������H�5��$H���9������H��VH�8����H��VH�8����H�iVH�8�r������UH�5�$UH��SH���G	�H��H������H�{H��H��uoH�KH�H��wH��E1�E1���|��H��H��[]�f�H��E1�E1����X��H�SH��1�H�5�JH���|D�H��H��[]�f�H�SH�3�t�����u�H��H��[]�fD��H��H�5!$U��H�xH��u�H����H�PH�0�$�����u�1�H���f���AWA��AVAUATUSH�����I��H��H�5�#U� �I��E��t"I�mH����A��tI�]H���nI�\$1�H)�A�A���I�T$L�lL9���I�|$I�4$H����H����H��1�I��H������H�<K�Tv
H��H��H�<H���Y�I�$I��L��A�L��H��H������H��H��[]A\A]A^A_�fDH���P���6@����H�A��tI�]H����I�\$H9������d��@�����tI�4$H���=���f.���v���fDM�uL��������A��tfI�M������H�CV�H�5EH�81���M�D1�H�����u[��t5H����DH�����H���-����L�����I���H����H���D����1���.��_���j��H��VH�5kDH�81��RM�H��VH�5CCH�81��:M�f.���UH�5d!UH��SH�����@�uH�xH��H��tNH��uH�=�ZWH�5[C1���L�f.�@��u�H�H�ƒ�H��t��u�H�SH�3�*�����t+H�H��tH�SH��tH�f��H��H9�u�H��H��[]�H�=|ZWH�5�B�xL��AWI��AVI��AUATUH��SH��8dH�%(H�D$(1�����H��E1�E1�E�uH�}H��tOH��uH�=�YWH�5B1��L�fD@��u�H�H�ƒ�H��t��u�H�UH�u�Q����H�}J�+H9E�	J�#I9���L�K�4&H�\$ H�|$H�t$H������H���.H�DH�L$(dH3%(��H��8[]A\A]A^A_�fDM�(L�D$��L����L�D$���NA����I�����M�`L�D$L����L�D$���A����I�M9��CI�XH��uUL��L)����f�H�t$A�H���H��H�=t����H�H��������?H9�����H����'������H���P�������t3H��C�������E1��p����H���9�����H���x�H������L��L�D$�c�L�D$I����fDL��L�D$�C�L�D$I������H�=�WWH�5z@��I�H�<VH�5�?H�81���I�H�$VH�5�DH�81���I��.@�������H��VH�5VDH�81��I�L��E1��Y������ATUS�_���wEH��H��H�5�U��H�}I���R�H�pH� tH�pH�PL�E��L��[]A\�������*�ff.����ATUH��H�5OUSH����H�5?UH��I����H�x��I�4$H��H�L��H��H���@H��H��H��L��I��H��H9�w�HAH9�r8A�D$�uI�|$H��t`H��t@��t/H�=kVWH�5�>1��}H�DH�=YVWH�5�>1��cH�H�H�ƒ�H��t��u�I�T$���tBI�4$H��t1M�D$H�}L�MM��t1�@H��1�H��A� H��L9�u�H��[]A\�H�=�UWH�5s>1���G����D��ATUH��H�5USH���v�H�5�UH��I���d�H�x��I�4$H��H�L��H��H���@H��H��H��L��I��H��H9�w�HAH9�r8A�D$�uI�|$H��t`H��t@��t/H�=+UWH�5�=1��=G�DH�=UWH�5w=1��#G�H�H�ƒ�H��t��u�I�T$�u���tBI�4$H��t1M�D$H�}L�MM��t1�@H��1�H��A�H��L9�u�H��[]A\�H�=�TWH�53=1��F�����D��ATI��H�5�UUH��S�6��@�uH�xH��H��tMH��uH�=GTWH�5�<1��YF�f�@��u�H�H�ƒ�H��t��u�H�SH�3����t3H�H��tI�$H�C[H�E]A\�DI�$[H�E]A\�H�=�SWH�5g<��E���AWAVAUATUSH��8dH�%(H�D$(1�H��t	H��@��t H��VH�5�@H�81��E��I��H�H�΃�H��u�M����A����I�$H�ƃ�H����H���� ��H�K�� �~H����H9��kH��H�T$��H�T$���9����H�H�T$H��H�T$ 1�H�t$L�l$�J"��ADH����H9��pH��H���=�H��L��I���=�L��I���<�H�t$ H�|$H;��V�uH;~�V�xH;i�V�{H;T�V�~H;?�V��H;*�V��H;�V��H;�V��H;��V��H;��V��H;��V��H;��V��H;��V��H;��V��H;m�V��H;X�V��H;C�V��H;.�V��L��L���}��DH��H��� �����H�C����H��VH�5�>H�81��pC�H��������@H��������?H�|$H9���H�D?H�T$(dH3%(��H��8[]A\A]A^A_�L��L���5���h���L��L������X���L��L�������H���L��L���u���8���L��L���5���(���L��L���������I�D$����fD����c���fDL��L���������L��L���������L��L����������H����H���X���L��L���e�����L��L��������L��L��������L��L������x���L��L���E���h���L��L������X���L��L������H���L��L������8����[��H�$
VH�5�7H�81���A�H�
VH�5E=H�81��A��8�fD��AUI��H��ATI��UH��SH��H��(dH�%(H�D$1��.�������]H�H��H�T$L��H�\$��H�����H;.�VH�t$H�<$�WH;�V�ZH;��V�eH;��V�pH;��V�{H;��V��H;��V�yH;��V��H;}�V��H;h�V��H;S�V��H;>�V��H;)�V��H;�V�6H;��V��H;��V��H;��V��H;��V�	H�T$L���
��DH��������?H�|$H9�wDH�D?H�L$dH3%(��H��([]A\A]�H���(��H�����H�T$L���#��멐���f�H�T$L������뉐H�T$L���C���v���fDH�T$L���{���^���fDH�T$L������F���fDH�T$L�������.���fDH�T$L���������fDH�T$L���k�����fDH�T$L���#�����fDH�T$L���{������fDH�T$L��������fDH�T$L��������fDH�T$L��������fDH�T$L������n���fDH�T$L������V���fDH�T$L���;���>���fDH�T$L������&���H��	VH�5O4H�81��F>��4����ff.����UH��SH��H�5]UH�����H��H��H��H��[]�p���ATUS�_�H�� dH�%(H�D$1���wYH��H��H�5U�z��H�}H�T$H�t$I���I�H�T$��L�EH�t$L���,�H�L$dH3%(uH�� []A\ú������3�ff.�@��AWAVA��AUATI��UH��SH��(dH�%(H�D$1��@���H�T$H�t$H��1��tH�A��L�l$E��VN�$+M��t!DH�T$�H��H�|�aP�L9�u�H��H�L$dH3%(��H��([]A\A]A^A_�fDI�\$L�=��VH���\�������t_H�A����M�l$L���5���ufA��tKI��]����/�H���@�E1�E1�L��D��H��H�����^����H���X��H���L���H��I���
����{2�H�TVH�5A3H�81���;�I9�s���f�I)�L;=��V����L;=��V�����L;=��V��L;=��V��L;=z�V��L;=e�Vt{L;=T�VtzL;=C�VtqL;=2�VthL;=!�Vt_L;=�Vt?L;=��Vt6L;=��Vt-L;=��Vt$L;=��Vt2L;=��Vt)L;=��Vt	L;=��Vu8I������fDI���
���I������H�PVH�5�0H�81���:��j��f.���AVI��AUATU��H��SH�� dH�%(H�D$1�H�T$H���F�H���V��~I�>�(��H��L�d$����H�D$H;m�V��H;X�V��H;C�V��H;.�V�xH;�V�kH;�V�^H;��V�!H;��V�H;��V�H;��V��H;��VtQH;��VtHH;y�Vt?H;h�Vt6H;W�V��H;B�V��H;-�VtH;�Vt
�%���DI��@L���p��1�L�t$I��M����0�H;Y�V�CH;D�V�FH;/�V�IH;�V�LH;�V�OH;��V�RH;��V��H;��V��H;��V��H;��V��H;��V��H;r�V��H;]�V��H;H�V��H;3�V��H;�V�H;	�V�L���+��H���L��H����I�L9�t'H;`�VH�t$H�<$���L���1��H����@H�L$dH3%(L����H�� []A\A]A^�@L���(��H���L���x��H���L������H���p���L�����H���`���L���8��H���P���L�����H���@���M�nL���t����1A����I�L�l$���.I�nH���E����$H�����H�I������fDL���X��H������L�����H�����L���h��H�����L���H��H�����L�����H�����L���8��H�����I���_����L���x��H���`���L������H���P���I���0����L�����H���0���L������I����������I��H�����L���X��H���������H��VH�5l,H�81��c6�M9�s"�i���H��VH�5�-H�81��A6��,�M)����@��AWAVAUATI��US��H��hH�T$dH�%(H�D$X1�����H�|$H�T$0H�t$(�CA�L�=��V������H�l$0����H�D$8L;=��V�8L;=��V�+L;=��V�$L;=m�V�L;=X�V�
L;=C�V��L;=.�V��L;=�V��L;=�V��L;=��V��L;=��V��L;=��V��L;=��V��L;=��V��L;=��V�`L;=q�V�SL;=\�V�~L;=G�V�q�L���@M�l$L���{����.A���!I�L�l$8���CI�l$H���K����@����H�1�H����I��������?H�D$8H�D$H�D$@H�D$�.K�D$H�t$�H��H�D$@L�t$H��H9��UL;=�VL�d$8H�t$0H�|$(�aL;=��V�dL;=��V�oL;=��V�zL;=��V��L;=��V��L;=��V��L;=l�V��L;=W�V��L;=B�V��L;=-�V�/L;=�V�:L;=�V�EL;=��V�PL;=��V�[L;=��V�fL;=��V��L;=��V��H�T$���I���M9������L���/����f.�I�<$���t��H�l$0I�Dž����������H�D$H�L$XdH3%(� H��h[]A\A]A^A_�H�T$�v���I��끐H�T$薿��I���n���fDH�T$�޿��I���V���fDH�T$�&���I���>���fDH�T$�޿��I���&���fD�k%�H���c6�H�|$E1�E1�L���H���k���C���fDH�T$�V���I������fDH�T$����I������fDH�T$�ƿ��I�����fDH�T$�^���I�����fDH�T$�ƿ��I���~���fDL�����I�������H�����H������H�T$�f��I���.���fDH�T$���I������fDH�T$�F��I�����fDH�T$���I�����fDH�T$����I������fDH�T$�.��I�����fDH������H���:���H�T$�v��I�����fDH�������&�����H��UH�5v&H�81��m0�H���UH�5�'H�81��U0�L9�s�[���L)������AUATI��H��UH��SH��H��(dH�%(H�D$1�������9@����H�H�T$H�t$L��H�,$�F;�H��������H�;H����H������ ��H�{���1�I��I���;�H����H9��=H��H���M(�H�����H�t$H�|$H;\�V�~H;G�V��H;2�V��H;�V��H;�V��H;��V��H;��V��H;��V��H;��V��H;��V��H;��V��H;u�V��H;`�V��H;K�V��H;6�V��H;!�V��H;�V��H;��V��L�����H��fDL��H����?�H��� �����H�CH9�����H�L$dH3%(L���|H��([]A\A]�f�H�i�UH�5J)H�81��.��H���(��H����H�����3���@L��踺��H���`���L���غ��H���P���L���(���H���@���L���x���H���0���L���8���H��� ���L�����H������L��踺��H������L���h���H����L������H�����L���x���H������L���X���H�����L�����H�����L���H���H�����L�����H�����L�����H�����L���H���H���p���L�����H���`���H��UH�5�"H�81��,��##��.���ff.���ATI��H��UH��SH��H�� dH�%(H�D$1��3����j���BH�H��H�T$L��H�\$�7�H������H;3�VH�t$H�<$�,H;�V�/H;�V�2H;��V�5H;��V�8H;��V��H;��V�.H;��V�AH;��V�DH;m�V�GH;X�V�JH;C�V�MH;.�V�PH;�V��H;�V�FH;��V�IH;��V�LH;��V�kH�T$����DH�L$dH3%(�CH�� []A\�H���H��H�����H�T$�f�����@H�T$�ַ���@H�T$����@H�T$�F����@H�T$薸������H�T$�V����q����H�T$����a����H�T$�&����Q����H�T$膸���A����H�T$�&����1����H�T$薸���!����H�T$�v��������H�T$�ƾ�������H�T$�f������H�T$�&�������H�T$�v��������H�T$�������H�J�UH�5�H�81���)��T ��_���ff.�@��SH��H��0dH�%(H�D$(1�H�T$H�t$�5�H�T$ H�t$H����4�H�T$H�����H;T$ r�wH�t$H�|$�(�H�H�DH�L$(dH3%(uH��0[������ATI��H�5p�TUH��SH�� dH�%(H�D$1�����H�T$H�t$L��H���]4�H�L$H��H��H���UA�A�H;�DB�1��l���H�T$E1�1�H�t$H���E��H�\$dH3%(u	H�� []A\������H��H�5��T�,��@H��%��ff.�@��SH�5��TH�����P�� u�� �PH��[�H�=26WH�51��$(�@��SH�5T�TH�����P�� t��߉PH��[��$���@��H��H�5!�T���1ɋP�� t��߹�P��H�����SH�5�TH���\��P�� t���H�ljP����H��[�輭��ff.����ATI��UH��H�5��TSH��0dH�%(H�D$(1����H�Ë@� ��H�;H�������u\���H���KH���31�I��H����H�{H9��L�#H�kH�D$(dH3%(�^H��0[]A\�fDH�s�H��1��M��I��H���u��/��H�5"�8�!��H�Q�UH��H��L��A�A�H;(�DB�1�����H�3H��t$H�CH�<$H9�H��HF�H����H9���H��譧��fo$foL$K�3���fDH���UH��H��L��A�A�H;(�DB�1�葭�����@H��1�H)�L���������H���8�������H��H�1�H)�����f�����5�H�<$H�C�H���H�=�3WH�5�1��%����H�=U3WH�5>!1��g%�����H�5��8����@��UH��H��SH��H������u1��tH��H�H�����H��H��[]��H���8��H����H�L�UH�5�H�81���$�ff.���AUI��ATI��U��H�5�TSH���n��@�uH�xH��H��tEH��uH�=2WH�51��$�@��u�H�H�ƒ�H��t��u�H�SH�3������t'H�;K�D%H9Cr,H��@��L�L��[]A\A]�O��H�=02WH�5��,$��������AWAVAUATUS��H�����#I�ԅ�u<H�55�TH�����I��I�OE1�L���L���'�H��L��[]A\A]A^A_�@H�>H�����"�H�5�TL��I���P��I�Dž���L�uI��u#��u
H�mH��uTI�OA��E1���L��� �����A��tRI���u
H�mH��uI�OL9�rcL)�A���H���E1�H�������uJA��@��tH��H��!���@L���(��I���H�����H������1��T��ߩ���ʫ��H��UH�5�H�81��"�A�����f���AVAUI��ATI��UH��SH��H��0dH�%(H�D$(1����H��tI��L��H��L��H���%%�H��$��H��H�5��T����H��I�,H9C��L���S
�A��C�uH�{H��tJH��uH�=�/WH�5g1��!�fD@��u�H�H�ƒ�H��t��u�H�SH�3�:����tYH�1�H��tH�SH)�H�H��H��H�T$L��H�]���D�4$H�D$L�d$芦��H�t$(dH34%(u H��0[]A\A]A^�H�=^/WH�5��Z!�����@�����AWAVAUATUS�_�H������L�.I��H��H�5b�TI������I�ǃ�urI�nH��u0I�^H��unI�W1�H��H��L��L��[]A\A]A^A_��@H��������@��tRH�I�^H��u'I�WH9�rkH)�����t��f.�1�H���F���uF��tH��H��z���f�H�����H���H�����H���X��������L����7���H���UH�5(H�81�� �ff.�@��AWAVI��AUI��ATI��UL��SH��H��8dH�%(H�D$(1��j��H��t!I��M��H��L��L��H���m�H��$��H��H�5��T�T��H��I�,H9C��L���
�A��C�uH�{H��tJH��uH�=L-WH�5�1��^�fD@��u�H�H�ƒ�H��t��u�H�SH�3�����t`H�1�H��tH�SH)�H�H��H��H�T$L��H�����D�<$H�D$L�d$L�t$ ���H�t$(dH34%(u"H��8[]A\A]A^A_�H�=�,WH�5B���&�补�����AWAVD�w�AUATUSH��A���H�^H��I��L�.����H�H�5��TL�����I��A��uwL�uI��u5H�mH��u{I�OE1�H��M��H��L��[L��]A\A]A^A_��
�DL���������A��tZI�H�mH��u0I�OL9�rsL)���E��t�댐H����H���Y���E1�H������uE@��tH��H��l���L������I���H������H���L��������茤���w���H���UH�5hH�81��_�ff.�@��AVAUI��ATI��UH��SH��H��@dH�%(H�D$81����H��tAI��H��L��L��H�����H��$t'H�\$8dH3%(��H��@[]A\A]A^�fDL��H�5�T�y��I��H�DI9ErhL�����H�T$H��L��A�����H�$L��L��H�T$D�t$H�H�l$(H)�H�$H�T$H�L$H�L$H�T$ H������]����Y�������>���ff.���AWAVAUATUS�_�H������L�.I��H��H�5R�TI�����I�ǃ�urI�nH��u0I�^H��unI�W1�H��H��L��L��[]A\A]A^A_�)�@H��������@��tRH�I�^H��u'I�WH9�rkH)�����t��f.�1�H���6���uF��tH��H��z���f�H�����H���H���x��H���X��������<����'���H�p�UH�5H�81���ff.�@��AWAVI��AUI��ATI��UH��SL��H��HdH�%(H�D$81��Z��H��tDI��I��L��L��L��H���M��H��$t'H�\$8dH3%(��H��H[]A\A]A^A_�@L��H�5��T�!��I��H�DI9FrmL����H�T$H��L��A�����H�$L��L��H�T$D�|$H�H�l$(H)�H�$H�T$H�L$H�L$H�T$ H�����L�l$0�����T����f�������AWAVD�w�AUATUSH��A���H�^H��I��L�.����H�H�5��TL���X��I��A��uwL�uI��u5H�mH��u{I�OE1�H��M��H��L��[L��]A\A]A^A_�E��DL��������A��tZI�H�mH��u0I�OL9�rsL)���E��t�댐H�����H���Y���E1�H�������uE@��tH��H��l���L�����I���H�����H���L������A���̟��跡��H��UH�5�H�81���ff.�@��AUH�5�ATUSH��H�4�UH�H���UH�8����H�-�UH���UH�5�H��H�UH�����H�UH�;H�5�H�)&W���H�UH�;H�5�H��%W���H�UH�;H�5�H��%W���H�;H�5�H��%WH�(�UH��`��H�;H�5����H��%W��H�;�H�{���H�5�E!���H�;�H�����H�5��!����Z��L�-+�UH�=`H��I�E��H��t1��
H������H���HB�L�%m�UI�}H��������?I�,$H9���H�T?H�;H�5����'�I�<$H��������?H9���H�T?H�;H�5���'�H�;�����H�t���H�5������H�;�����H�����H�5`��-��H�;�H�N�H�5�(���H�;1�H����H�5�/���H�;�����H����H�5d����H�;1�H����H�5�(����H�;1�H�����H�5�����H�;1�H�#��H�5$���H�;1�H���UH�5f����H�;�H�5���&�H�;�H�5��&�H�;�	H�5��&�H�;�H�5��&�H�;�AH�5u�{&�H�;��H�5i�g&�H�;�H�5^�S&�H�;�	H�5s
�?&�H�;�H�5m
�+&�H�;�	H�5d
�&�H�;�H�5\
�&�H�;1�H�����H�5S
���H�;1�H�O���H�5�'�s��H�;1�H����H�5)
�[��H�;1�H�����H�5
�C��H�;1�H�w���H�5

�+��H�;1�H�/���H�5����H�;1�H���H�5����H�;1�H�����H�5�����H�;1�H����H�5�����H�;1�H�����H�5����H�;�����H�����H�5w����H�;�H�)�H�5�'�}��H�;�H���H�5v�b��H�;�����H���H�5p'�G��H�8�UH�;1�H�5d��/��H���UH�;H�0�}��H�='��H�=H�a�V���H�=H�A�V���H�=�H�!�V��H�=�H��V��H�=�H��V��H�=�H���V�l��H�=�H���V�T��H�=�H���V�<��H�=xH�a�V�$��H�=dH�A�V���H�=PH�!�V���H�=<H��V���H�=(H��V���H�=H���V��H�=H���V��H�=�
H���V�|��H�=�
H�a�V�d��H�;�H�����H�5�
H�7�V����H�;�H��H�5�
�7��H�;�H�X�H�5�
���H�;�����H�M��H�5$���H�;�����H����H�5�����H�;�����H����H�5������H�;�H����H�5.
���H�;�H�1��H�5
���H�;�����H����H�5�o�z��H�;�����H�����H�5�	�_��H�;�����H�0��H�5�	�D��H�;�H�ŵ��H�5�c!�)��H�;�H���H�5]$���H�;�H����H�5�	����H�;1�H�w���H�5k�����H�;�H���H�5k	���H�;�H�A��H�5V	���H�;�H�6���H�5:	���H�;1�H����H�5'	�r��H�;�����H���H�5��"�W��H�;�����H��H�5��!�<��H�;�����H�]�H�5t��!��H�;H�������[H�����H�5��!]A\A]���@Hc��,������H���q����{��H���6�����SH��H�?�P��H�[�ff.��W��w1���u
H�G�D��H�H�x �����H�?�d��@��H9�tgATI��UH��SH��f.�H�����1�H����H��t$��uH�%�H=puH�CHǀ�L�H9�u�[1�]A\�fD1��ff.�f�ATUSH��t1�DH�OH��H���H9�u�H�G�ҋ��H����Hc�H�,�H���h��I��H��tHH�����L��t)�l��H�ʼn�H��H�5�	1��F�H��[]A\�fD���H����fD�H�=U�!���H���f�SH�OH��H�wH� tH�OH��f��> u
H��H�VH9�r�H)�H��H����H��[�f.�AWAVAUATUSH��H��8H�T$(H�t$ ����L�kI��L�l$��H�����I���H�D$H��tA�
��t;1�H����H��L�tM��tL��H�����H���I�����9w�H�D$�@����E1�L�5��UD�����H�
�UI���4H�
8�UD�,A@�t$C�.��tmA��DIc�A��L�B�0��tM<Su�B�D=I��H��t�H�|$H�����H��u�H�|$H�޺���H�t$(H��H�D$ ���D�\$H�D$�9h�S���H�D$H��Āu:H��8H��[��]A\A]A^A_�L��H���0��H�t$(L��H�D$ ������H�D$H�@(H��8[]A\A]A^A_�@1�H��t#@��uH�H�с��H���u��u�D��H���/;�H���D��H9�tGATI��UH��SH��f.�H�����H��1���H��L��s���H9�u�[1�]A\��1��ff.�f�1�H��t#@��uH�H�с��H���u��u�D��H���:�H���D��H9�tGATI��UH��SH��f.�H������H��1����H��L��s���H9�u�[1�]A\��1��ff.�f���H����@AT1�I��H�=UH��S�h�H�����H��L��H��H������H��[]A\��H��tkUH��SH��H�8H��tf�H��(�H��H��u�H�}HH��t�H���H��H��u�H���H��t�H��H��[]����ff.�@AUATUSH�����H�opH����H��tGL�����5Q��9��8����)�Hc�)�I�č�)�H�����H�H�@H�l�H��H��[]A\A]����6�����	��u.1�Hc�L�,�Hc��J�Dj��I��I�<�H���C\,0��Hc��L�H��H��I�\8H���븐H��1�[H��]A\A]�ATI��UH��S������E؉��n�L��H��H��H�����H��[]A\�DUSH��H��H�H��t&H�5��T���H9��H�kH��[H��]�H���UH���T�H�8�=��H��H�@ �EuH�E H���t4H�kH��t@��uH��H�����H����H��H��[]��H��H�����H�kH��t��H���UH�SH��H�5
H�81��k�ff.���H������H��H��������H��H���`�H��H�����@H��H�5��T��H�H�PH��tH�zPt%H����H��H�D$���H�D$H�P��H���UH�5�H�81�����H�����H�@H���H�����SH���s���1�H�5*���H���"���H��[�ff.�f���S��w ���tH�H���2���H��[H������1����f.���H������H�P�R��tH��H���,��H��UH�5�H�81����@��AWI��AVAUATUH��SH��XL�o�NdH�%(H�D$H1�H�FI�U�L$H�D$8�H�T$A�U�D$���I��H�\$@L��L�l$(�D$#��E1�E1�H�\$�D$$H�t$0�o@�\$$��H�T$H�=ƲV!؃�H�D$A��A_ H�,�!�L�mL���b����9�H�D$@H�P��u	I9�tH�PDpH�D$(H�UD;ps1I�D��H������t$�H90t�|$#�t����\$�o���H�l$0E��~I�wH��tM�L$H�T$8L���|DeH��H�5����L���6���H�D$HdH3%(u;H��X[]A\A]A^A_�������H��I�G�@�@E1����fD��AWI��AVAUATUSH��H��8H�dH�%(H�D$(1�H����L�sH�6I�FH�D$�vH�{�o�������@��E���@��E�A�F����H�D$ E1�H�D$�A@�K H�T$	�#H�L$�������7�L$H�D$ ��tMH�PD`I�UE;fsME��H�{L����H�T$H�=ȰVN�,�I�uH��u�H�T$�q���tdH�D$ H�PD`I�UE;fr�L��H�5���H�����H�D$(dH3%(u&H��8[]A\A]A^A_�D��H�C�����I����6�@��UH��SH��H��H��t"@��uH�uH�����tS��t>��t)H��H����H��H�����H��1�[]�f.���H����fD�K�H���fD���H���fD��SH��H���ЦH�߅�ti�ԮH��tWH��[����fDH���h��H���H��t2��u-H���H��u!H�CH��H��wH��H�q�TH9St�[Ð���H��t�H�S �B��w2��u�H�BH��tըu�H����H��pu�H��[�>���fD����H�H�P �B��v�����H�H�P �B��v���uvH�H�P �B��v���ubH�H�P �B���r�����uJH�H�@ �P��w%���8���H�@�U����H����������uH�H�x ���+���ff.�f���AT�US���-��UH��H���VH��?H��?��H��u&L�%��fD�L������H�ġVH��t�H����H��H��H������-��UH���VH��>H��?��H��u$L�%<�@�L�����H�d�VH��t�H���G�H��H��H���Y���-:�UH�3�VH��=H��?��H��u$L�%��@�L���C��H��VH��t�H�����H��H��H������-��UH�ӠVH��<H��?��H��u$L�%��@�L������H���VH��t�H����H��H��H������-��UH�s�VH��;H��?��H��u$L�%x�@�L�����H�D�VH��t�H���?�H��H��H���Q���-2�UH��VH��:H��?��H��u$L�%5�@�L���;��H��VH��t�H�����H��H��H������-��UH���VH��?H��?��H��u$L�%��@�L������H���VH��t�H����H��H��H������-��UH�S�VH��>H��?��H��u$L�%��@�L�����H�$�VH��t�H���7�H��H��H���I��Hc.�UH�lH��VH��u*L�%y�f.��L���3��H�ĞVH��t�H�����H��H�߽H���������U��<�t<H�H�Ճ�H�|�VH��u L�%�^�L������H�\�VH��t�H����H��H��H�����H��[]A\�f�US��H��H�=P�Vt���1�H�~Hc�H�>��@H�!�VH��u%H�-��!D�H���K��H���VH��t�H���VH��VH��u%H�-�."D�H�����H���VH��t�H���VH���VH��u%H�-�H$D�H������H�t�VH��t�H�`�VH�Q�VH��u%H�-lYD�H�����H�,�VH��t�H��VH�	�VH��u%H�-�2!D�H���k��H��VH��t�H�НVH���VH��u%H�-�2!D�H���3��H���VH��t�H���VH�y�VH��u%H�-:^!D�H�����H�T�VH��t�H�@�VH�1�VH��u%H�-�D�H������H��VH��t�H���VH��VH��u%H�-�D�H�����H�ĜVH��t�H���V���H���VH��[]�f�H���VH��[]�f�H�	�VH��[]�f�H��VH��[]�f�H���VH��[]�f�H���VH��[]�f�H���VH��[]�f�H�a�VH��[]�f�H�A�VH��[]�f�H��tJH��t5H����ATUH��SH��@��t;H�4�UH�5m�H�81��#��H����DH�Q�UH��DH���H��u�H�5�UH�EH�r�VH��u&L�%�fD�L���C��H�L�VH��t�H�����H��H���d��H����H��u�e�H��VL�%��H��ufD�L������H��VH��t�H����H��H�����H���ZH��u�e�H���VL�%Q�H��ufD�L�����H���VH��t�H���?��H��H��贿�H����H��u�e�H�R�VL�%�H��ufD�L���;��H�,�VH��t�H�����H��H���\��H����H��u�e�H��VL�%��H��ufD�L������H�̚VH��t�H����H��H�����H���"H��u�e�H���VL�%��H��ufD�L�����H�l�VH��t�H���7��H��H��謾�H����H��u�e�H�2�VL�%�XH��ufD�L���3��H��VH��t�H�����H��H���T��H���JH��u�e?H�ҙVL�%��H��ufD�L������H���VH��t�H����H��H����H����H��u�e�H�r�VL�%��H��ufD�L�����H�L�VH��t�H���/��H��H��褽�H��t~H��u�e�H��VL�%v�H��uf��L���3��H��VH��t�H�����H��H���T��H��tH�Ǩ������E[]A\�fDH�H��f��M�f.��M������E��?��@�E���fD�M �F�����M������M�v�����M������M�����M�>���������@���ff.���SH��H��dH�%(H�D$1�H���,���H�$H���UH�T$dH3%(u	H��H��[�������AWAVAUATUSH��HdH�%(H�D$81�H����L�gH��M����I��$�H���TA��$����DH�t$(E1�H�t$H�t$0H�t$DA��$�A�$�D�A�$�H��H�L�`H�$M����M�<$E1�M��u�@A��Ic�M�<�M����I���t�H��VH�T$L��H�(H�$H��XH�D$0�L���t�H�L$(H�t$1�H��H�L$���H�L$H�yu�L;�`t�H��XL��A���g�H�L$H���:��Ic�M�<�M���n���f.�L���H��L�cA��E;�$�sI��$����f�H���hXI�|$���I�|$p���I�|$x��I��$����I��$����I��$����I��$����I�|$0��A�D$H��?H��vI��$H��t��I��$���I�D$8H��tB�PI��$�+H�xHc�H��H9�t
�b��I�D$8H�xH��t
�O��I�D$8H���B��I��$�H;=��Ut�,��1�H�tH�{���I��$H��t��L����H�t%H�D$8dH3%(u%H��H[]A\A]A^A_�fDH�{H��t���������ff.���AWA��AVAUATUSH��H��HH�|$H���t$(@�t$/dH�%(H�D$81��Q��H�[H����1�E��tH���H�CD�kH�D$H���H����D������I��Iƅ�t+E1�fDI�>H��t	H������A��I��D;��rދ����t4E1���A��I��D;��sI�~t�I�~�����D�����tAE1�L�d$0fDI�H��tL��H�T$0�k��H�T$0I9tI�A��I��D;��r�L��M����I�E�H��?��I��?E1�1�I��L�l$ ���M�,�D����H��D$�D$.M��tLD�D$1��I��D�4H�D$N�$�I�$L��H�$����I�$H9$t�|$.tJ�T�I�U�I!�u�A�GI��H;D$ sWL���f�H���$f�1��I��Lc�H�D$N�,�L��M�e�a��I�UI9�t�<$tJ�T�I�F�I!�u�H����8��H����,��H���� ��H�{P���H�{H���H�{@���H���H��t$H�|$0H�D$0����H�D$0H9��tH���H���H��t$H�|$0H�D$0���H�D$0H9��tH���H�� H��t$H�|$0H�D$0���H�D$0H9� tH�� H���H���
�������E1�L�l$0�4DL�u��|L9�t	��|H�EA��D9����H���D��H��H�H�EH��tL��H�D$0���H�D$0H9EtH�EL�uM��t��l|I9�t��r|H��u��|$/��I��m���I�~�b����|$/I�F��H�L�u� �E���L��L�t$0�|���H�D$0H9E�8���A��D9���<���@�CtAL�c8M��t8I�D$H��t.E�l$E;,$}#1��I�D$HcՃ�H�<�����B�D-A9$�L���M��tMA���tFE1�L�d$0fDD��H��L�H�EH��tL��H�D$0����H�D$0H9EtH�EA��E9.wȀ|$(tiH���9QH�D$H��umH�t$H�^�tr�|$(��H���w���H�{�n���H�D$8dH3%(��H��H[]A\A]A^A_�H��8�,QH�D$H��t�H�|$H�������DH��t�H������f�L���ج�I���.���H�{H�g���c���f�H��踬��8������ff.���L�L�OA���XM���OUSH��A�IA���H�A?H�H��H�A���H��L���@I���H��t�0������K���VHc�I�A�AI�Q8��H�L��H����+BH�H�,� A���A���A���A������H��L�M���L�H�M��tD��t@���@��H��I�TH��tH�:tH)��H��H�<u�H����9�u�A���H��H�A��t+H�WH��t"H�R8H�H��t�JH�H�DH��u�H��[]Ð1�A��t5H�WH��t,H�R8H�H��tD�JH�H�DH��u����1����H�=�U1����f.���H�?�$���@���@��ݬ�ff.�f�S1�����H�����H�CH��[�f���UH��SH��(dH�%(H�D$1�H9�tWH��H��uEH�����H��H�\$H�$�g��H��H�����H�T$dH3%(H��u6H��([]�f��;���uH��蟠H����f.�H��舠H����.��ff.���SH��H��H���=���H�SH�B@H��t�t[�f.�H��H��[����@��SH��H������H�P�H�Z@H��t��t'H�ZPH��[�DH�BPH��[�f.�H��H��H�D$�p��H�D$H��H�PH��H�ZP�X��H�D$H��[�ff.�f���AWAVAUATUSH��8H�o���H����]L�ux�D$H��t����5C���9��8�P�������)�Hc�1�I����V��I�ǃ��eE1��;fD�P��A�D������DI�A��	Ic��~V��I��1�1�1�DI�Ǎ4�1��9\$~A94�u��Hc�fDI����I��L	ƒ�?u�I��H��A9��E����A��	L�t$1�M�g@D�l$L�|$(H�l$ ��fDA���A�\$�E1�E1�L��E���D��Ic�A��	H��I	D$�1�1�A�v69\$~ L�\$Hc�D�E9�u���H��H	ǃ���@u�H�}A��@H���T$�3��T$A�A��?u���I��P��9l$�h���H�l$ L�|$(L���H�}x�V��H�ExH��8[]A\A]A^A_�ff.�@��USH���GH���Hc����50��X���I�������غ9��8���1���)��$������I�������	I��L��1�A�����f�L�\�D��1�DL��H���D9�tD�H����A��A����?u�H��9�ą�~]�����	D�����H���L�W@1�D�N6I��sE�H��D�X�����@u��@H��9�uс�H��P9�u�H��L��[]�f����ݲU�����ff.���SH��H�p�VH�|$H��u'H�:���	H������H�D�VH��t�H�دUH�L$�H��H�;�S��H��1�H��t@��tH��[�DH�WH9u�����H��[�@��H�GH�@@H�H��t�t�� uH�@ H��H�у�H��u��H��H��AWAVAUM��ATUSH��H��(H�kH�T$�|$xH��H�L$hH��H������t6��t2H��}A�H���H�AH���H������EH���2H���E1�H���H��uH���H��D�D$H�T$�ĚH�T$H�t$H��I��L�{�;���M��D�D$M�gP��A����M�gHH�SE�GXH;���.M���
�D$`�AoEA�G\AG`H���H9�tH�@H�pPH�uHH��t
@���SH�CH���Hǀ�Hǀ����H��$�HDž��0HDž����I��\���H�H�CH��L�0H�@�D��H�L�hH�E@H����H�k��H�E8���H�L�hH�EPH����H�SH�BH�D$pHǂ��BlH��$�H�BxH��VH�H��0H���H��$��@�}H�CHǀ�H��(�[]A\A]A^A_�f�H���x�����I�GH�8���H��$��C��H���H�������������H��H���0���������H��H������o���H�����H��H�����H��H�CH���O���H���H���J���@��uH������H�CH���H� �:H��H�~����1��$��H�SH���H����������H��H���}������L��H��D�D$�`��M�gHL��H���Q��D�D$������}A�H����H��H��H����H���H��������~����I�G`I�Gh������I�t$I�$ tI�t$�H�=&`�����������J���H���A�����fDH���A�����fDH�v ����H��������E1��,���f.���AWI��AVAUATUSH��H��hD�D$L��$�L�L$L��$�H�4$H�T$dH�%(H�D$X1�� ���M��H�{PH�sH��H�@���D���ƀH���ULD����H��XI�E�H�D$(�ă�	�D��D$)��H�sD��I��H�CPH��X�H�S`L�l$0L�L$D�D$H�D$8�H��tH�H�T$(L��H��RP��$�P��$�PH�C AQ�@PH�T$8H�t$0L�L$`����H�l$pL��H�=�cH�\$xH��0H�t$@���A�$����H���VH��u)H�n�f��	H�����H�|�VH��t�H��UH��H�;�5���u)H�L$XdH3%(H���H��h[]A\A]A^A_�H������I��H�D$PH��VH��u%L�%��D�	L���s��H��VH��t�H�;H�L$P�H������I9��x���H��u4H�ũUH�H9�`���H�����H���P����1��H���f��t$H��tFH��t �u,<tGH��UH��@H�P�f�H�A�UH��@H���UH��@H�Q�UH��w���H�ڤUH��h������ff.�f���AWM��AVI��AUI��ATI��UH��SH��H�GPL�L$H��`����L�L$��H�����t��y6H��UAQL��M��PL��L��H��jE1�j���H��8[]A\A]A^A_�f���L��H�����L�L$�ff.����AWM��AVI��AUI��ATI��UH��SH��H�GPD�D$H��`�J��D�D$��H�����t��yVE��H���H�]�U�HD�H�=���@�
AWM��L��SL��H��E1�jH��j��H��8[]A\A]A^A_���L��H���C��D�D$�ff.����AWM��AVI��AUI��ATE��UH��SH��H���'��uCH�ĨUM��E��L��t$XH��L��H��Pj�D$hP�i���H��8[]A\A]A^A_�f.��K��H�����t�H�����t�H��H��H�D$�z���H�����u�H�EPA�T$��`�z���H�L$H��H���m���e������AVAUA��ATUSH��0dH�%(H��$(1������D���#���_�H��Hc�L�$�������D��A�H�}H�|$9�����uL�eH�D$H�D$8���H��H�D$��H��H�D$fH�="�UffH���H��H�\$@H�(H���W��}H��H�T$(H�D$ 1�H�t$�H�H�
��VH��DŽ$0DŽ$�9HD��ϥ��H����L�l$8L��L���U��H�t$���Ѻ���L�d$H�=�I���Ȉ
H�T$E1�L��RH��HL��H��AUA�jj�n���H�� H��I���_����|$����L�����H��H���0�H�D$ H�D$0H�D$ H��H��$(dH3%(u{H��0[]A\A]A^�L�����I�ą�t^1�I�������`�����D���F��H��H�D$�ɞ��H����H�T$ H�T$8H�D$H�T$ H������������E1�����AWI��AVAUATI��USL��H��8H�|$L�l$8H�=�5H�t$�
dH�%(H��$(1��s�
H��L��I������L�����L��H�\$@�|��H�|$���`��}1�H���H�L���[��L�����L���*g�L���h�D$8DŽ$���������L���f@H�|$H����H�|$�м�H�}�VH�L$ H��H��H�D$�:�HD�H�T$蓣��H���RH�D$0A��E1�L��PH��HL��AUjjH�T$0�0���H�� H��H���!����|$0���	H��$(dH3%(H����H��8[]A\A]A^A_�f�<��0���H�=1�1�芺�f.�I��A������H���H���	�������H�
��VH�T$ H��H��H�D$(�9ID��k���H�T$(H�T$0H�T$(�����L��H�T$H�\$@�N��H�|$��蒲�H�T$H�߹}H���H�L���'���'���f�1�L���fe�i����l���W��H��H�D$���H�D$H���-��ff.�f���H�����H��H��������H�GH�@@H�H��t�t�� u#H�@ H�@�f.�H�у�H��u��H��H�@����H���3��H��H�������AWAVAUATUSH���L�H�|$dH�%(H��$�1�����H�D$`����H�D$躭�H�$����H�D$P����H�D$H蝭�H�D$0�s��1�H�J`UH��H�D$�=��H�=rVH��$�uJH�T�UL�%�qV1�H��UI��$pL�h�fDA�}I��H�I���K��I�D$�L9�u�A�?1�H�-�7�0��A���L�d$H�D$X��tcI�����L�,�M����H�kqVH��ufD�	H��胷�H�LqVH��t�H���/��L��H���T���A9��w�A�GI�_8�����Y�����)�@����f� �����A�G�JH�|$�
��I��A�GI��I9���L�|$hM��L�d$(M�>H�ǗUM�nB�,8H�����L��H�
�pVI��H�D$ H��H�yJ��yJH��L��H��Hk�nH)�H�<��E��L��H���j��E�����
H���,�I��H+D$(E1�H��H�D$p�E�H�D$8H�b�UB�xH�D$@H�D$@H�
��UL���B�<���H�
7���Hc�H�>��fDL���ȡ�H��tL�����L��H�������w���A���L��)�H�t����V���H�+oVH��u'H��4��	H��蓵�H�oVH��t�H���?��H�<$�H���N���e���HcCH�lH��nVH��u%H�J!D�H���;��H��nVH��t�H������H�<$H��H����A�G�������H��nVH��u(H��5��H�����H�\nVH��t�H�����H�<$�H��螛�������SE1�I�ą�~,�H�CIc�A��H�<��L��L��H���q��D9s�1�H��$�D;3}iL�|$ I��@H�SIc�H�<����L��H��$����H�KI��Hc�H�4�H��$tL�����L��L��A�������D93�L�|$ HcCH�-�4L�lH��mVH��u ��H���ӳ�H�dmVH��t�H�����H�<$L��H��萚�H�9mVH��u%H�-�3D�H��苳�H�mVH��t�H���7��H�<$L��H���H��A�G�?���IcG,L�dH��lVH��u"H�-�3f��H���3��H��lVH��t�H������H�<$L��H�����A�G����IcG L�dH��lVH��u*H�-$3f.��
H���Ӳ�H�tlVH��t�H�����H�<$L��H��萙�A�G�w���IcG(L�dH�NlVH��u*H�-�2f.��H���s��H�$lVH��t�H�����H�<$L��H���0��A�G�����IcG$L�dH��kVH��u'H�-V2��
H�����H��kVH��t�H�����H�<$L��H���И�A�G���IcGL�dH��kVH��u*H�-�1f.��H��賱�H�lkVH��t�H���_��H�<$L��H���p��A�G�G���E�gE�l$Ic��Ո�H��E��~9L�t$N�$�E1�DI�G0L��J�4(I�����H��H���)��M9�u�H��jVL�%�y!H��u��L�����H��jVH��t�H�����H�<$H��H���З�A�G���I�EH���c��[H�x�PH������A���+���/H���M���"�I�}H���o����败�H��I�EH�8H�@H���L�d?H��iVH��u'H�����H���+��H�tiVH��t�H������L��H��H�����I�EHc@L�dH�=iVH��u)H�r1f��H���ӯ�H�iVH��t�H�����L��H��H��葖�I�EHc@L�dH��hVH��u!H��$��H��胯�H��hVH��t�H���/��L��H��H���A��I�EH�x�$��H��H��hVH��u"D�H�=Oc#�/��H�`hVH��t�H������H��H��H�����H�|$ H�������&H�|$H�t$pIu�;���H�|$ H������fDI��L9t$8�OH���UI��B�,8L9��x����q�����H��I�EH�hH�}H��t$��C��H��H��H���d��H�}H��u�H�|$ H���N���I�}���H�|$ H���6���i���I�EH�|$ H�t����Q���I�m��H�5���H��H��1�H��蹢�L�l$xA��L�d$L��$�H�l$p�JH����H9���E�EH��A��Mc�L�����H��诛�L��Hc�H�����L��H��H���c��H�Ic�� u�H�C�H�@I�}H���H�D?H�|$ H���Y�����I�EH�(蘢�I��H���H��$���H��H��H��H�� %���$�H�D$xH���kH�fVH��u#H�~.�H�����H�\fVH��t�H�����H�T$xL��H��诓�H��$��oH��H�=fVH������H�DH�D$xH���/H�.�H��胬�H��eVH��t�H���/��H�T$xL��H���?��H��$��AH��H���� ��Hc�$�H�lH��eVH��u H��-�	H�����H�deVH��t�H�����L��H��H���ђ�H�|$ L����������H�D$I�MH�p��J�D��	��K��	��T�R1�����H��H��H�|$ H)�H��H��H�t�o�����H�t$ H�|$PM���X��H�D$hH�L$(�@H��I9��u�L�|$hH�D$PH��$�I���H���-����#E1��z��M���H��D��H��H�D$ H��L�u�F���
����H�
d�Hc�H�>��H�cVH��u�H�=�� ��H�bcVH��t�H���m��H��H�����H�}H����	���H��H���u��H�D$ L�t$A��H��L��I�l�u購��H��H���H��uL��蝼��H��H���2��uL��臼��H��H�����EH��H�t���H�|$HH�����I���D9(����Z��1�E1�I��H�D$P�H���D$8H�D$(�D$ L�|$@�H����I9��rH���l$ H��$�H�|$N�$�H���H�����H�D$H��H�x菼��H�|$(H��Hc@H�t�Y��H9�tlD�}�]E��~D9|$8tIc�L��H�t�1��D�|$8�������S����������d���������@uxL��L������I�<$�� tEH����Hc�H9��s��|$ I��H��H��$�H��� ���L;p�^H�@ ���I�|$�H��$�L���u����H�qaVH��u!@�H�=�)�_��H�PaVH��t�H�����L��H���0���C���H�4aVH��u$��H�=/)���H�aVH��t�H������L��H���������H��`VH��u$��H�=�(�ϧ�H��`VH��t�H���{��L��H��������H��`VH��u$��H�={(臧�H��`VH��t�H���3��L��H���X���T���H�t`VH��u L�=/(�L���C��H�T`VH��t�H������L��H���������H�8`VH��u$L�=�'@�L����H�`VH��t�H�����L��H���������H��_VH��u$L�=�'@�L��賦�H��_VH��t�H���_��L��H������e���H��_VH��u$L�=%(@�L���k��H��_VH��t�H�����L��H���<������H��$�L�|$@H��$�H��$�H��$�H��$�H��$�A�GH�lH��^VH��u&H�G&fD�H�����H��^VH��t�H�����H�|$0H��H��蟌�A���H�lH��^VH��u H��%�
H��蓥�H�t^VH��t�H���?��H�|$0H��H���O��A��H�lH�<^VH��u H��%�	H���C��H�^VH��t�H������H�|$0H��H����IcG\H�lH��]VH��u#H����H�����H��]VH��t�H�����H�|$0H��H��诋�IcG`�H��$�H�DH��$�IcGdH�DH��$�IcGhH�DH��$�IcGlH�DH��$��I��H��H�?]VH��u#H����
H���S��H�]VH��t�H�����H�|$0H��H�����H��\VH��u$H��$@�H�����H��\VH��t�H�����H�T$(H�|$0H���Ŋ�A����H��\VH��u H����H��跣�H�p\VH��t�H���c��H��H�I\VH��u%H��m!D�H���{��H�$\VH��t�H���'��H��H�l$0H��H���4��(H�=x����L�t$`H��L���#��H���UL���H�t�
��CL��L��H�t���L�������L��H������I�wPL������L�t$L��詵�H��H�����L���ƻ�H��H�����IcGXH��H�t���H�|$X�`��H��H�����H�t$H���x��H�4$H���l��H�t$HH���_��H�t$PH���R��H��H��$�dH3%(��H���[]A\A]A^A_�L�l$xL��$����A��1��u���H�|$ �����(�H��ZVH���H���>����H���ܡ�H��ZVH��t�� ����������H�9ZVL�5"�!H�����L��蜡�H�ZVH��t�����H�ZVL�5��!H��������L���g��H��YVH��t����H��YVH��������H�=��5��H��YVH��t��o���H��YVH���_����H�=n� ���H��YVH��t��=���H�{YVL�5C�!H���&����L���Π�H�WYVH��t������H������&����f��H�D$x��觸���蝸�I���3�1����E H�}��$��C��&��H�T$xL��H���6����H�EH�=�YVH�����H�H!�H��H�D$xH��������H�T$xL��H�����E ���H�]1�Hc;�Ww�H�D$x�)�$���~Hc�H�|$x��H�t����9+�H�%YVH�-L!H��u�H��謟�H�YVH��t�H���X��H�T$xL��H���h���C�H�������H��辨�����T�����H�=1�衟���H��裴��H��H���w�����'�����H�����H����H�����@��H�GH�@P���H���C���H��H��鷪����H�GH�@H���H������H��H��������H�GHc@XH�D�ff.���AWAVAUATUSH��8dH�%(H�D$(1�蹳��L�`H�D$諰�I��A��$����1�L�=a� L�5߷�fD��A9�$�����H�@I�D$pH���X��tً�D$�������>����������s�������A��@t�HcD$H�DH�D$H��ZVH��u@�L��胝�H��ZVH��t�H�ǃ��,��H�t$�H�D$�(��L��H���=��A9�$��0����H�L$(dH3%(L���H��8[]A\A]A^A_�f�H�|$�F��H�D$H��ZVH��u"D�H�=��ߜ�H�`ZVH��t�H��苽�H�t$�H�D$臲�L��H����������H�|$�ٗ�H�D$H�
ZVH��u%��H�=�S!�o��H��YVH��t�H�����H�t$�H�D$���L��H���,����[���H�|$�i��H�D$H��YVH��u%��H�=����H�pYVH��t�H��諼�H�t$�H�D$觱�L��H��������HcD$H�DH�D$H�YVH��u%��H�=�M#菛�H��XVH��t�H���;��H�t$�H�D$�7��L��H���L��������HcD$H�DH�D$H��XVH��u%��H�=+_#���H��XVH��t�H���˻�H�t$�H�D$�ǰ�L��H��������&���HcD$H�DH�D$H�-XVH��u%��H�=��!诚�H�XVH��t�H���[��H�t$�H�D$�W��L��H���l��������HcD$H�DH�D$H��WVH��u!��L���C��H��WVH��t�H�����H�t$�H�D$���L��H������W�����fD��H���S���H��H���'�����AUATUH��SH���*���H��L�`H���{��H���v�I�|$PH��u H��H��H�=�?1�[]A\A]�]��DH����H���h��H��I���=��I�T$PE��H��H��H��H�=�1�[]A\A]������H�GH���H�P��:t�f�H�BH�ff.���H�GH��t�x`�>H��t�pd�2H��t�Ph�M��t�@lA��ff.���H��H�G�8����H��H���q����H�GH������1�H�=3����w�ff.���鷬������ǭ�����H��H��_���1�H��t���H���ff.�@��H��H��/���1�H��t�P��H���ff.���H��H����1�H��t�P��H���ff.���AUATI��UH��S��H��L�odH�%(H�D$1�L��讪��H��t�P��!ډP�U t"H�D$dH3%(uAH��[]A\A]��I�EH�=MaVH��J��H�3����!��H�$H�@H���$��@��AUATI��1�UH��SH���aH�UH�Ë����tNE1���A��D9��v5D��H��H��H�pH��tܺH��A���bH�UD9��w�H����L��H�����H�����aH����[]A\A]����AWAVAUATUSH��HH�_�t$�{dH�%(H�D$81�H�C8H�D$�m�L�5nTVI��M��u*H�-���H�����I��H�ATVH��t�H�--TVH��u,L�%�^!f��L�����H��H�TVH��t�C ���|$�CE1������D�d$CA9��D)�Icԃ�L�,�H�DH��H�D$�L��L��I���Y��L9l$��H�����H�$�l�H�4$H��I���)��H���J�<(��H��t�H���J�<(�Ե�L��H�������H���J�<�谵�H�$H��H������H��H��L��A�����CD9�����L���{��I���l�L��Mc�H��H�$���H���J�<��\��H�$H��t�끐�C��HcC$�S(�t$����@9�����L�$�L�tJ��H�$�+f.�L��I�����L��L���	��L9$$��H���Ǵ�I���Zk�L��H��I�����H���J�< ��H��t�H���J�< 肴�H���D��B�����H���H�<��X��H��L��A���y��L��L���n��CD9�����H���*��H�$�j�H�4$H��I���=��H���Ic�H�$H�<���H�$H��t��{���9�����H�,�L�dJ��H�$�f.�L��L��H�����H;,$t[L��蓳�I���&j�L��H��I����H���H�<(�x~�H��t�H���H�<(�S��L��H���x��I����C���C��H�D$�P����1�L�%CPVM��u*L�-0���L���3��I��H�PVH��t�H�D$;(|&�VfDL��L�������H�D$9(�5L��譲�I���@i�L��Lc�H��I��迿�H�D$H�@J�<��}�H��t�H�D$H�@J�<��f��L��H��苿��f�L�%�OVM��u8H�-_�D�H���k��I��H�YOVH��t�H�D$�@����1��$�L��L�����"��H�D$9h����L���ܱ�I���oh�L��Lc�H��I�����H�D$H�@J�<��|�H��t�H�D$H�@J�<�蕱�L��H��躾���f�C �$�C@��H�L$8dH3%(L����H��H[]A\A]A^A_�@H�yNVH��u%H�-I�D�H���[��H�TNVH��t�H�����I���g�L��H��H�����H��L��������@H��MVH��u%H�-��#D�H�����H��MVH��t�H��蟰�I���2g�L��H��H��贽�HcS,H���H�<��{�H����H��L��茽�����H�qMVH��u%H�-Q�D�H���k��H�LMVH��t�H�����I���f�L��H��H���,��C �*�C��H��L���
���d����L�%)MVM��u(L�-�� D�L�����I��H�MVH��t�L�-�LVM��u �H�=��迎�I��H��LVH��t�H��LVH��u$@�H�=;�#菎�H��H��LVH��t�L��H�$L�d$ �/��*H�D$ � ��L��H�D$(���L��H���3��L�����H�D$ ���L��H�D$(���L��H����H�$H���î�&H�D$ 贮�L��H�D$(貣�L��H���ǻ�����f�H��KVH��u%L�%�� D�L��諍�H��KVH��t�H���W��I����d�L��H��I���l��HcS H���H�<��8y�H��u3L��L���H�����������H��H���+������fDHcS H���H�<��ܭ�L��H�����I���@H�D$HcPH���L�$�L���x�H�������L��蛭�H��H�������HcS,H���H�<��t��H��H��虺�H�����茟�ff.�����G�H����
�h��H��H���H��H�<P�X
@��AWAVAUATUSH��H��HdH�%(H�D$81�H�TpUL��$��<pHc�H=vpU�,���A<�	��L�����Ic�L�>��f�H����H�̓��KH��/�������
H��H�$�y�H�$���x������
H�=��1��]��H���0�H�CH�=��H+��1�H��H���0��H��DH�L$8dH3%(H���qH��H[]A\A]A^A_�f�H�舝�I��I��A���(H��H�� �H��H�=1�1�I��H��I����躬�L��H���ϸ�A�� �
D��fE����H�=�1�q�L��H��茦�H�=:�H��1��k��H���;���H�t$H���s����+H�|$ H����8��H�������H�=���q�H����������H��/�a���Y�������w������H�$�3s�H�$H��H�������H��H�=b�1�貫�H�����f.�L�Mc�H�=V]1�J�4舫�H���X����QH�qH�=Z�1��k��H���;���H����H�AH�XPH��$�����H��$�H���P������H�CH��H�=c�H�$H+��1�H�����H�$H��L�aI�<$I�l$�r�H��H���@p�I�|$L�%&�H��t)��r�H��H��L��H��1�这�H�}H��u޺H�5G�!H���b���e���D��HcҀ<Nu	M����H��H�$���H�$����H��H�Q�Hc�蜖��H������@H���(��H���P��H��������	H�=��o�H�������1��uH��H��pU1�H�H�3oUH9��������DH�|	���H�����fDI�3H��H�Q����H���y����H��3������������H�$�H�$H�������H���n��H���>���fDH�y�����H������a	���8	���o	H��/u��u	�������H��H�$��tH�$H��H������H�̓�H��u	H�Q����H����H�����������;	H�lUH������H�=�� �m�H���w�����#��I��A���&A����@���@���M@����@���t@�ŀ�(�������@�� ��@��@�����O�� �d�����H�=r���l�L��H�����L��H������0�����q�H�=��H��1�誧�L��H��迳����f.�H��H�$�DsH�$H���z�����
H�=��H�$�KQ
H�$H�������H�=�H�$�#Q
H�$H���[�����H�=��!H�$�P
H�$H���3���H��H�$�rH�$H��H�̓�����H�=����k�L��H���������H�{H���3�s H�=	�1�袦�L��H��跲�H�C�¨ tNH�CHc8H�p�}��H�=A�H���ik�H��H���n��H�=��H��1��M��L��H���b��S��������–�I��H�C�Ũ�]����@����@���@����@����@�ŀ����������@�� �U@��@�!������ ������
H�=D��j�L��H��裱�M���SH�����l����
H�=՝�^j�L��H���s��H��H���Ũ�����H�=p��1j�L��H���F��H��H���Ũ������H�=N��j�L��H�����H��H���Ũ������H�=\���i�L��H�����H��H���Ũ��t����H�=;��i�L��H��述�H��H������R����H�=���|i�L��H��葰�H��H������0����H�=���Ni�L��H���c��H��H���Ũ �
����H�=���!i�L��H���6��H��H���Ũ@����H�=����h�L��H���	��H��H����������H�=o���h�L��H���ۯ�H��H����� ������
H�=N��h�L��H��譯������H�=��H���th�L��H��H��腯�����
H�=L��Oh�L��H���d�����H� aUH��F���H��fUH��7����H�=|��h�L��H���%��M�������H�C����"����H�=G���g�L��H�����H�C�Ũ �����H�=L��g�L��H���Ǯ�H�C�Ũ@����H�=(��g�L��H��蝮�H�C��������H�=��]g�L��H���r��H�C��� �C����
H�=��2g�L��H���G��k�����H�=���g�L��H���#��M���[���H�C��������H�=F���f�L��H���������f.��H�=X��f�L��H���ĭ�M������D����H�=%��f�L��H��蚭�M�����������H�=���[f�L��H���p��M���1�������H�=���1f�L��H���F��M�������G����H�=F��f�L��H�����M������H�C�Ũ������H�=Q���e�L��H�����M�����H�C�Ũ������H�=*��e�L��H��讬����f�H��H�$�4lH�$H���d����H�=���We�L��H���l��M���J���H�C�Ũ�H����H�=���$e�L��H���9���\���H��_UH�����H�ωT$H�4$蕅���T$H�4$H�����H�ωT$H�4$�U��H�4$�T$H�����H�ωT$H�4$蕝�H�4$�T$H���q���H�=�1�藟�H���g�H��aUH�����{i�H�=w�H��1��j��L��H���������H�=���Id�L��H���^������H�=9��(d�L��H���=��H�C�Ũ�����
H�=u��c�L��H�����H�C�Ũ����H�=���c�L��H����������
H�=���c�L��H���Ȫ�k����軏�����fD��AWAVE1�AUATUH��SH��H��8L�,�H��]U1�H�|$(1�B�(H�$L�D$�D$H��`UF�$hL%�`U�7c�&H��H�5i�I��H�~bUL��F�h1�LbU���A�$1Ʉ�tPH�DD��I��L��H��A��H�L�H�t$PD�D$H�|$��ZL��YH����Ic�M�A�8��H�<$H������1�H�����t=9�t9I�O�FL��A��H�кH�5��H)�H��GH�
�!L�1��f��I��H�$H��H�x胎��H��t�@����L���+���H�|$(�[I�OI� �vI�WH�5e�!�1��Z�D$H��8[]A\A]A^A_�@�H�5="L��H�L$ L�D$��L�D$H�L$ A�����H�Q�!�L�%��LD�H�-���HD�H�����@HD�L�����ATLD�L�����ULD�H�=y��@SHD�H�5n�� ASHD�L�-b��ARLD�L�
V��WLD�L�K��VLD�H�
@��AUHDʨL��H�/�H�5@�HE�1����H��@I��L���Ј��H�|$(�����L���H�5��!�~�H�|$(L��������fDI�O����H�<$H�s��˒����fDAWI��AVI��AUATUSH��H�o1�H�t$81�dH�%(H��$x1��4`�H���X�I�NH�D$`H�D$�EH�L$I��D$\H�L$ I�NH�L$H�D$  t	I�FH�D$H�T$H�t$H���}�H�5c�H���}�M�oI�}P�_H�=Q�1�衚�H��H���6g�H�CH��H+T$H��G�0I�G����t ��b����������H�5%�!H���}�H�����H�T$H�t$H����|�H�5�H����|�H����\L�t$8�H�5��L���|�I�H�L$ I�NH�L$H�D$  t	I�FH�D$L���E1�H�D$HA�M���L�|$ M��L�l$8L�5��H�t$H�T$H���I|�E��I��M�A�wA�E�O E�G�F�A�O��
����Ic�L�>��DH���!f�H��H�5ݕ1�WH���*��I�XZH��tbH�D$HH����1�H��H����n��uCI�L���t���H��H�����I�wH�|$H1��iV�I�EH�D$I�E t	I�EH�D$L���A��E9'����L�|$ L�t$8H�t$L���r��I�H�L$ I�NH�L$H�D$  ��H���t&H�T$H�t$H���{�JH�52�H���{�H�����L�u8H�T$H��H�t$L�t$P��z��UA������� tE�V��������t
H�L$P�A�9�������@t�u,��D�](A�����tD�M H��D�E�M���ARP1�WH��VH�5�AS视�D���H��0E���L�|$0E�h�I��H��$pH�D$@H�D$pL�5�!H�D$(�<�L+cM��~L��D��H�5�� H��1��@��I��I�����E���E�eH�|$01�L��E)�D�D$ �P���Ƅ$pD�D$ H��A�GA�w�tA9�|A�W�D9��?�M��@tE9G,L�'�ME�L��� t+H�L$PD9Au A�GH�=�H�
�HE�f�L��tA�O$D9�AO(H��D9�IN�M��t'E9G u!A�GH�
̏L�
ɏLE�f.�L��A9�}��H�
��H���HH�H���1�ASWRL�D$`H��H�|$H�J�H�� H�T$H��H�t$�x�D��H��1�H�5���Մ�H�CH��H��L�`�Rb�|$p�W���H�T$(H�5ΏH��1�衄��<���@L�|$0H���{����H�5N�!H���7x�L��1��s�D�d$\L�t$I��M��t3H�t$L��H���x�L�D$H��L��L��H��肘�H�H�L9�r�L�d$1�L�|$HL�-��!I�$�� teH����H9�}cH��L���e��I��M��t1�H��L���j��u(�L��H���w�H�t$8L���?���H��H�����I�$H���� u�I�D$H9�|�H�D$`H�D$hH�D$`H��H��$xdH3%(�$H�Ĉ[]A\A]A^A_�f�A�MlE�MdL��E�u`E�eh�L$(D�L$ �/��L$(I�uPE��H��H�=��1�QD��ATD�L$0���^_�`����H���!����@H�x�!���@H�Y����@H�_� ���@H�� ���@I�FH�D$�@���f�H�D$H�`���f�D��I�W0H�|$@D�D$ )�H�H��H���1��4H�A�GA�wD�D$ ����H�L$H��L�aHI)�L���y��H� H�{H�CtH�{H�L��=��G������H�5��H����u�I�G���������H�5��H���u�I�G����b����
H�5��H���xu�I�G����D����H�5q�H���Ru��+���DL������H��H��襒��]�H��U1�H��H�D$H�z��H�D$`�g����[��ff.���S1�H��1��W�H��H�����H�pH��H����H��[���H���c���H��tH���u���H��H���9��f��H���fD��H���C���H��H��������H�=�9V�pM���AUATUSH�O/VH���+�nI���)L�1�H��H�x9V�HfDH��H�sL�c�Pf�H�=Y9VH��L���>f�H��ntnH�IPUH�=:9VH��H���LI�t�M���pH�j��KH��gu�I��0H��H�a8VI���H�[8V��e�H�=�8VH��L����e��H��[]A\A]�ff.�@��SH��H��H��H�=�8VdH�%(H�D$1�H���Rf������H�L$dH3%(H�$�uH��[��i��f���SH��H��H��H�=J8VdH�%(H�D$1�H����e���n��H�$�H9ZtH�L$dH3%(uH��[����n����fD���'������SH��dH�%(H�D$1�H�GH�=�7VH��H�@H��H�3�ie������H�$H�@H�H�D$dH3%(uH��[��{��ff.���H��(dH�%(H�D$1�E��t���@��E���@��E�4$H��H�T$�L$�D$迃���D$H�T$dH3%(uH��(������H��(dH�%(H�D$1�H�4$H���D$�$����D$H�T$dH3%(uH��(���fD��AWAVAUATUSH��8dH�%(H�D$(1�9w ��H��H���H�GA��H�D$H�@H�D$H�GH��tD`D��u ��A��DE�D���A��DE�H�D$�P����H��H�D$ 1�H�D$�H�}A��E1�L�����H��tD�hE!�H�D$H�T$H�=�5VN�<�M�7L���c���0��H�D$ H�PE��u	I9�tH�PXH�D$I�;Xr�H�D$(dH3%(uH��8[]A\A]A^A_��~�ff.�@��H���V�G �0��Cu��k��ff.�ATUSH��dH�%(H�D$1�H������H��H�H%����L�cH�/H�H�C�}��H�����uGH��V�C �0��Cu%H�T$dH3%(���H��[]A\�H���Ȁ���I�D$@H�H��t�uH�у�H��t�� t]H��H�H�$H��tRH�*VH��u H�Y�
H���cj�H��)VH��t�H��H��H���u�H���c��'}�H�@ �H�ZIU�
H�5�H�8�@�H��뎐��AWE��AVI��AUATUL��SH��HH�|$L��$�H�4$H�T$dH�%(H�D$81��*�H���L�`H�D$賛��M��L�L$H��H�iSULD�I�EH�D$(A�A�u�ƒ�����T$)��	ʈT$)����x�T$(����?	ЈD$(H��$�L�l$(��M���)A�D$M�L$AUE��L��H���$���$�R��$�RUPH�T$8H�t$0�̠��H��0L��H���m��H�����H�D$H�D$ H�D$H�_(VH��u#H�-(��	H���h�H�<(VH��t�H�-�OUH��H�}����uPH�L$8dH3%(H����H��H[]A\A]A^A_�f.�I�yH�������H��$�����H���x|��I��H�D$0H��'VH��u%L�%��D�	L���h�H��'VH��t�H�}H�L$0�H���Ys�I9��P���H�������H�PH9U�1���H���}��H���!����H�D$覙��M��L�L$H��H�\QULD�E1����H��$��J���M��H��uI��I���7���fDH������H�EH���H��$�����H��tRH��t\�u8<tcH�=LUH��J���DE1ɸ��������H��OUH��&����H��FUH������H�qLUH������H�1HUH����H��JUH�����y�ff.�f���H��H�YPUjPAQM��E1�j�n�H��(�f.���AWM��AVAUI��ATI��UH��SH��H����D�p�р�H�����tE��y4H��OUjM��L��PH��L��H��jE1�j�On�H��([]A\A]A^A_�D��H��H����y�����AWE��AVI��AUI��ATI��UH��SH���*��X�R��H�����t��yVE��H��H�mOU�HD�H�=�P1
jM��L��SL��H��E1�jH��j�m�H��([]A\A]A^A_���L��H���Sy��뛐��AWM��AVI��AUI��ATE��UH��SH��H���G(�u;H��NUjM��E��PL��H��L��j�D$hH��P�;m�H��8[]A\A]A^A_�@�s�H�����t�H�����t�H��H��H�D$�A��H�����u�H�����@A�T���x�H�L$H��H���x���n������AWAVAUA��ATUSH��8dH�%(H�D$(1������D���Wb���_�H��Hc�L�$��.�����D��A�H�}H�<$9�����uL�eH��H�D$ �Ҋ�A�H��H�$�07H�5w-!H��H�$�O�I��fH�=BGUffH�:^�H�4$H�(I��H���x�H�D$�R�1�1�H��H���/o�H�4$H��賫H��H�D$���H�xH����L����c�H�{�L�l$ L��L���u���H�4$����`���H�=�|L�$$I����.
jL��E1�AUA�L��H��jjH�|$(�Fk�H�� H���:w��H��I���ϑ�H�D$H�D$H��H�D$�X�H�D$H�D$H�D$L��H�L$(dH3%(udH��8[]A\A]A^A_��L���F�I�ą�tD1�I�������X���I�L�xp�����D���b`�H���:��L���"[��=u�E1�����DAWAVAUATU��SH��HdH�%(H�D$81���������
`�D�_�I��A��Hc�L�$���������A�9���M�����~P��t	��uVM�~ M�fI�nI�FH����H���HD�I��LD�H��uK�H���F�DA����t��
H�=@�L�L$A��-
L�L$H��H��t�@��u�H�U��H��u�H��t�tF�H���6F�fDL���D�I�Dž��61�I����������@A��'���H���H��u�E��tLM��L��H��H��L��踤��H��H����t��H�L$8dH3%(��H��H[]A\A]A^A_�f.��
L�t$0L�L$H�=N�H�D$� ,
L��L��I���r���L��A���
�0N�H�|$���Y�H�D$H��t���H�|$��a�L�=BU��N�E1�E1��L��L��I���t�1�L��H��H�D$ �lk�H�Y�V�8��H�D$ H�D$(L���H�T$H�t$H�D$ A��H��I����I��H����H�x��jA��L��E1�AVH��L��jjH�T$8�g�H�� L��H���9�����H���H���"���L�=��'�����d����L�����U����
H�=��L�L$��*
L�L$�]���L���ٍ�fH�=aBUffH�YY�H�H�xp�W������\��q�1������UH��S��H����1�H��߃���H��[]�T���@��1��E���D����2���f���SH��H�wH�?�?��H�;��$[�ff.�f���AWI��AVI��AUI��ATI��USH��H�l$XD�D$L�$����H��L��L��H��H��GUL��HD�H��Uj�D$`PjL�L$ AQE1�j�D�D$<袕��H��0L��H����_�H���k�H��H��[]A\A]A^A_�f���AWAVAUATUSH��H���H��$�dH�%(H��$�1�H�����HE�H�D$x�X���H��HDŽ$�HDŽ$�����I���K�1�H��H���xr�H���;�H���cr��K�H���Nr��&�H���9r���H���$r�H���j���H��H�D$�
r�H���";�H��H�D$@��q�H���;�H��H�D$H��q�H�D$ H��t
H����:�H�D$ H�߾�q�H�Ǩ�V�AJ�	H�߉D$t�q�H���&�
H��I��H��$��pq�H���hJ�H��H�D$P�Vq�H����i���H��H�D$X�<q�H���4J�
H��H�D$`�"q�H���J�H�D$hI�FL���H�VL��$�H�D$H��u/H��s!f.��H���[�H��VH��t�H�D$H��VH�D$H��u/H��!f.��H���C[�H��VH��t�H�D$H�sVH��u*H�-��#��H���[�H�LVH��t�H��H�-5VH��u,L�%��f��L����Z�H�VH��t�H��L�%�VM��u$L�-� ��L���Z�H��VH��t�I��L�-�VM��u$L�=� ��L���sZ�H��VH��t�I��H��VH�D$(H��u)L�=y� @�L���;Z�H�\VH��t�H�D$(H�CVH��u*L�=1��L���Z�H�VH��t�H��H�
VH��u<H�\$0L�=sH��f��L����Y�H��VH��t�H��H�\$0H��L��$�H�L$8L��H�T$0�BM�H;D$H�T$0H�L$8�}H;D$tnH9���H9���L9���L9���H;D$(��H9���A�H9�t1H��$��9�H�5'uH��H��8UH�81��u�A�H�sVH��u'H�����H����X�H�LVH��t�H���y�H�|$H���;�H��H� VH��u$H�->r@�
H���X�H��VH��t�H���?y�H�|$H���;�H��H��t�uH�H�ƒ�H����H��VH��u H�-w"!�H���3X�H��VH��t�H����x�H�|$H���R;�H���8�H��H�`VH��u$L�%�t@�L����W�H�<VH��t�H9�uI�FƀH��$�L����y����$��H�߃����E�AWL��jAUj��$�PD��$�H�L$PH�T$xH�t$pL��$��7���H��0L��H�T$PL�L$hL�D$`H�L$XH�t$��x�L�����L���rk��H��$�dH3%(��H���[]A\A]A^A_�f��\����fD�{\��H���fDH���i���H���i�����H���h������ ��H�EH���F���H��1���k�H�Ǩ�4�oD�H����$��k�H�Ǩ��KD�H����$��k�H�Ǩ���'D�H����$��sk�H�Ǩ���D��$�����E1�����H�����A���@A�����DA�����DA����DA����DA����DA����D�[��c���fD�Z��/���fD��Z����fD��Z������1h���AUATUSH��D�)H9�teH��I��H����H����e����t\L�H9�t?H����P�1�H����w�H��t��u�H�%�H=pu�H��D��L���j�H9�u�H��1�[]A\A]��H���8f���fD��1�H�=�e���3�ff.���1�H�=Sf���3�ff.���H���|$H�t$H�=����s3�H���ff.���H���i��H��H���Wn����H�E<USH�5pH�H��3UH�8�2�H�;UH��H��Y-�H�;1�H���H�5m���@�H�;1�H���H�5ޜ�@�H�;1�H���H�5�o�@�H�;1�H�5���H�5���@�H�;1�H��i��H�5�� �q@�H�;�����H�bi��H�5�o�V@�H�;�H�wh��H�5zo�E�H�;�H�\e��H�5po�E�H�;1�H�����H�5G��@�H�;1�H����H�5N��?�H�;1�H���H�5����?�H�;1�H�����H�5,o�?�H�;1�H�����H�5ȇ�?�H�;1�H����H�5o�?�H�;1�H�Th��H�5���x?�H�;�����H���H�5�n��D�H�;�����H���H�5�n��D�H�;�����H���H�5�n�D�H�;�����H�����H�5�n�D�H�;�����H�-�H�5�
�qD�H�;�����H�B�H�5�n�VD�H�;1�H�zm��H�5�n�>D�H�;�H�ox��H�5{n�#D�H�;�H�T�H�5���D�H�;�H�9�H�5�m��C�H�;�H��k��H�5��C�H�;1�H��f��H�5���:>�H�H���NH��9UH�8H�5rj�xz�H�H��t�u<H�xH�5Lj[�[z�H�i9UH�55j[H�8�Az��uLH�x�fDH����H�����uh<��H��5UH�5�i[H�8�y�f�H��tJH��td�u<t|H��5UH�8�I���DH�	0UH�8�5���f�H��/UH�8�9����H��5UH�8�
����H��5UH�8�����H�q1UH�8����H�a1UH�8����H�4UH�8�����H�	4UH�8�������H��@�@��H��>VH�H��`�f.���1��f�AWAVAUATUSH��HL��@H�|$8H�L$ H��XI�<$�t$H�T$H�L$0�� �\H�����.�1�H�$I�D$H�D$(�H����H9���H�D$(L�4�H��H�L$M���A����I���H��A��@��L���e
��I��H�pH� tH�p@�����|$�E�|$���|$��H�D$�����H����S����H�D$�H�D$ ���uz@��tu�L���
��1ҿH��H���-L��H��HD�H���m!H�<$H���|�H��I�$�� ���I;\$��I�D$ ����E1�����E��t�L���;X��f�H�D$����T���H���S���D����4���@�>~����H�D$0H�H�T$�� ��H��H��H�<$H�4�`{��J���H��H�t$�R�H�t$��������@H�$H����H�H�D$8H��XH��@H��HH��H[]A\A]A^A_�,��H�D$0H�@ �u���f.�I�|$���fDUSH��H��H��@H��HdH�%(H�D$1��dx�H��t?H��PH����H��uqH�T$dH3%(H��X� H��[]��H��H�L$1�H���$�D$����$�����D$��tlHǃP���$�D$�Ԗ��H��PH��H���">�H����H�L$H��H��H��P�M����?����HǃP�'���H�L$H��H���$�D$���������K���H��P����H�L$H��H�����������I^�f���H��t@��t	��H��H���o�H���f�H�W1�H��~.H�GH� tH�GH�t��H�=�d!��������D��SH�����H�{H� tH�{[���������tCSH��H�>H��u'��H��1�H��u
H�;�`n�[�f��;���f��ff.�@��H��H�������H�1�H�����USH��H��H��(H�T$dH�%(H�D$1��i�H��H�D$H�D$H�|$�p�H��H��H��H�D$��H�L$dH3%(uH��(�[]��\�ff.�AWI��H��AVAUM��ATI��UH��SH��.H��(D�D$dH�%(H�D$1��U�H��tI��H��L��I)�K�<7�.��tsI�<�I9�u�DH���I9�t�PҀ�w�<.t(1�H�L$dH3%(H���%H��([]A\A]A^A_�I��M)�L9��H)�H��L���-��u�I)�M��~C�|7�/u��|$s���|$r��1�M��H�l$��E1�I)�I�E�� t\H����I9��i���I�EJ��H��H�D$�@�H�\$L9suM���B���L��H��L���
-���,���I�EI���� u�M;e����I�E �DJ�t5�H�=b!L����������K����J�t5�H�=(�,L�����Z�D��ATUH��SL�bH���Y<�I�T$H9�|/L�KD�CL��H��H�H�����H��tH�k �[]A\�[1�]A\�f���US��H��dH�%(H�D$1��G���wRH�Ճ�t
1�H�F������H�H��H�$��:�H�ƸH��t
��H���A�H�L$dH3%(uH��[]ú��D���Y�fD��UH��S��H���\H��tH��H���H��[]�C���H���[]�@��UH��SH��H���H����7�H��tH��H��H��H��[]�J���H��%UH�5�|H�81���b�f���AWAVAUATUSH��L�b����H�H��H�D�jI��A��tsH��`H�H� ��H�@ �� L�4���$�I��H�H�@E���bL�������������I�I�\�L�EM�d��g@I��E���|L��`H���,L�M��M��tmM�.M�~A�� J�D�L��M��uI�V H�<�H���=��{*�L�&H��1�[]A\A]A^A_�@H���'����H����L�L�sM��I�M9���I��M���NM�J�4�H����^�I��H����M�qM�L��O�|�I��M�H�]M���m���L��I�qH��IH��H��H��=��J��H�L�H�H���P�L�8�+����1����@�1�A�I������W^�I��M��I�I��]���f�N�|�I��L�H�]����@�������H���H������������tI��M9��u�������L�sM��M��I�M9������M�������H��A��]�I������A����H�ƿ��:�ff.�ATUSH��H�� dH�%(H�D$1������H��H��H�ֺ���E���/�H���H��H�,$H���H��H�\$D�d$��a�H�D$dH3%(u	H�� []A\��V�AWAVAUI��ATUSH��8H�|$H�|$(H�t$(�;�H��H�D$(H�@H�D$ H�H�D$H9��QL�t$A��B�<w�2@�JҀ�v
I��A�L9�u�.���D$L�t$1�L�{�f�M�f�L9�w$A�~�/u�gfDA�|$�/thM��M�t$�M9�u�L�|$H�T$ E1�L��H��L�����H��tD�D$H��L��H��H)�L��A�����H��8[]A\A]A^A_�L��M��I��fDH�T$H�|$E1�L��L��L)�H���I���H���P���H��D�D$H�|$L��L)�L��H��A�������(����H�=�[!L��L����€����D$���L�t$����I�������ff.�f�AWAVAUATUH��SH��8H��`H��hdH�%(H�D$(1���l�H���H��t0H�L$(dH3%(H����H��8[]A\A]A^A_�f.�1�H�5����E1��_7�H��pL��xH��L��H�D$�A$�H��H�D$��f�L����f�H�D$ H��`H�D$�mf�H����I9�}lL��H����U�H�|$I��H�D$ �7B�H�|$ �H�D$ I9�tH��L��H����H�D$ K�T?H��H��A������H�Mc��� u�H�CI9�|�H��`H��h��H��h�R�L�(I��A�� ��H�@H�D$E1�1�H�|$6�H�|$�L��A���&�H��L��L���&�Ic�H;t$}bL����T�H�|$H��H����"�I��H��u�1�H�޿�Z=��H��HD�H���I���DI��A��L�l$�a���fDH��������R����AWI��AVI��AUI��ATUSH���L$(D�D$L�L$dH�%(H��$�1�M��tI�L���]3�H��M����L���I3�|$(H)�1�������r�D$,I��`L��H�l$hH�D$0�+���L��I���3����L��H���0*�H��L��H���6����H�D$hH����H��E1�L�t$HI��H�H�l$PH�l$0H�L$XH����L�l$@H�L$ H�L$`H�|$ H�D$H�L$8�M����H�T$XH�EH�E uH�E H��H�|$8H�D$`��5�I��H�D$`L�XL9�L�\$0��H��L��L���Q"��t[�t$����H�|$L�\$0��H�CI9���L�L$D�D$,H��L��L��L����H��tcH�@�D$M�lM�TA�����<.u=�L$(H�|$@�����P���H�L��H�=�V!�������f�I��H�|$ ���M����M;&��K�T�����@H�D$�D$M�������L���A�����D$,H�|$L�|$pH�\$x��$��sH�D$H�T$pH�5��L��HDŽ$�H��$���2�H��$�H��tiH�L$H���nM�����H�=V!L����������sH��$�dH3%(����H�Ĩ[]A\A]A^A_ÐH��L��L���-�…���M��tA�}u�H�{�sh�H�H�D$L�hH�L$�� ��H����L�H�5kU!E1�L�=�,T�f.�I��K�4�H�����H�����H��L��L���,��t�H�|$1���T�H�L$H��tH�D$hH�M�������r�����L�t$HL�l$@H�l$P�-���@�D$,�/���H�L$H�������H�D$hH����DL�hH���#���H��L��L���5g�����H�|$@������u�~���f.��H�5,qH����H��L��L���+�����H�5qH�����H��L��L���t+����H�|$1��D$��S�T$����L����H�D$�{���fDH�|$H��L�\$0H�D$�O�����L��H�=�,��€���������L��H�=o��€���������T$(���n�����������a����H�|$1��$S�H�L$H���U���H�D$hH��H����4L�@AUI��ATI��USH��.H��H��(dH�%(H�D$1��p5�;.H�D$H��toH��t�/H���E�H����E1�1�M��H��L���������H�T$H�T$H�T$H�L$dH3%(�H��([]A\A]�fD�{/tH�s�H�=�m������l���H���3>�H���+_�H���NF��H�D$H�XH� �9���H�X�0������i���fD�H�=R!H�������t^�H�=+�,H�������t�H�=YmH����������M��E1�1�H��H��L��������������M��E1�����~J�ff.�ATUSH��`H��u H��UH�5�mH�81���S��@��u�H�EH�ƒ�H��t��u�H��H���j
H��I�����H��h�cJ�L��H���d�H�E�� t/H����L��H��H�T����H��`H��h[]A\�Q�H�E��f.�AWL�~AVI��AUI��ATUH��SH��HH�$dH�%(H�D$81�H�H� tL�~�.L����2�H��H��t�/H���B�H����L�d$ L��E1�1�M��1�H��H�$��A�ǃ�r��L�t$��s�-��A��H�|$H�5�'T�&C��A�ƃ��hE���_H���H���H�D$H�D$(H����H�XH� ��1�H�މL$�]-�L$���	��������A�L�d$ H�D$H�XH� tH�X�.H�߉L$�1�M��L$H��H��A�H��H�$�Ѕ�tH�|$ t	H�D$I�EA���SA�sH�T$8dH3%(D����H��H[]A\A]A^A_��H�|$H�5T&T�A�����4H�|$ H��t��@�I�E���H�=�N!H���������L�d$ L��E1��M��H��H��H�$��A�Dž���L����C�H�D$H���=���H�XH� tH�X�.H���0�M��H��H��A�H��H�$�Ѕ�tH�|$ tCH�D$A�rI�E����1�L�d$ �g���@H�|$ H��t�?�I�EDA�r���DH�X�����H�=݇,H�������t�H�=iH���������L�d$ E1�1�H��M��L��H��H�$�Ѕ���I�FI� tI�FH��1�L��H)���H�5`�,H��H�D$�7�H�|$�E�H�|$�vB�H�D$H����L�t$A�E1�����DE������H�D$H�pH� tH�pE1�A�1�1�H��H�$��A�����A�����D��t�����E���������L�d$ ����������t��������אH�|$ H���x����m���DH�XH� tH�X�.H���z.�1�M��A�H��H��H��H�$�Ѕ�tH�|$ ����H�D$A�sI�E���@H�ljL$��H�5��,H��H�D$(�S6�H�D$(H����L$����fDH����<�I�EH�D$(H�D$0A�sH�D$(�U���f�H�|$ H���?����<�A�sI�E�1����9D�f���SH��H��0dH�%(H�D$(1���W�H���g7�H�T$H�
k�H�D$H��H� VH�8�4�����rtw�¸��suRH��UH��,H��u�H����0�H���UH��t�H���oQ�H�t$�H�D$H�D$H�D$�aF�H�L$(dH3%(u<H��0[�H�y�UH��u�H�[J!D�H���S0�H�T�UH��t���0C�AWAVAUATI��H��UH��SH��hdH�%(H��$X1��g��H��H��tVI�D$0H������H�p�F �*H���<�H��$XdH3%(�qH��h[]A\A]A^A_�f�fH�=UffH�*�H��L�(L���ReH�D$I�E0H�@ L��x�������K�1�1�H��H����:�H��H���qwH��H��覯H��L��H�$�w�I��H�����u:�H����,��H��I���OH��H�D$�BH�T$L��H�����H�=md�H��E1�L��H��H���
2�H�<$H���]�L���9dH�D$H�D$ H�D$���DH�|$p�}H��1��H�L�|$pH��DŽ$`DŽ$@L������H���	H��L����H��H�����u8�H����+��H��H���kH��H�$�_H�$L��H�����H�=�c�H��L�L$ E1�I��HH��H���Rm��L��H���g���|$ ���
����_�fDI�D$H��H�|$ H�P�D$  L�d$(H�T$81�H�D$0H�D$@H�D$HH�D$PH�\$XH�D$h$�D$`�A�p����E@�L��H�$��bH�T$H�T$ L��H�T$����H�$H���%�fDAWI��AVAUATUSH��H��L�w0H�t$H�|$dH�%(H��$�1�I���L�t$H�D$@I���H�GpH�D$H�.XH����I���H��I���H���!�I�GDŽ$�HDŽ$�$H��$�I�G0H����H�H 1�H�YXH9X��H��$���$��5
�������H�T$H��$�H�|$H�B�c��H��H����H�D$H�@0H����}�H�p�F ��H���8�1�H��$�H�\$H�t$H�SH�T$HH���H�T$@H���H��$�dH3%(�9H�Ę[]A\A]A^A_Ð�Q`�/����fH�=�UffH��%�H�t$H�(H��� aH�D$PH�E0H�@ L��x�g�������1�1�H��H���6�L�|$H��L���:sH��I���o�L��L��I���A�H��H�����u=L����L�|$�(��H��H����
H�|$I����
L��L��H����H�=4`�h�H�T$H��L��E1�H����-�L��H���gY�H���_H�D$PH�D$XH�D$P�Y���L�|$H�ع}1�H��$�H��$��H�L��H��DŽ$�DŽ$p���H����L��L���P
�H��H������A�H�=|_L��$��H�T$H��E1�I��$HL�L$<H���8i��L��H���M���|$<���*����[�@H�@Xf�H�|$H�WH�O0������ǂ�H���H�y 1�H�_XH9Y��9��p���H�|$�D$$�"�D$$�Y����H�L$H��H�|$`�D$` H�AH�L$hH�PH�D$pHDŽ$�H�T$x1�HDŽ$�HDŽ$�H��$�HDŽ$�$DŽ$��y<����@L�����^&��H��H����
L��I����
L��L��H���j����D�W`�����H�AX�U;�H��H�D$(��]H�T$PH�T$XH��H�T$P��
��H�D$(H���!�@ATI��USH��fH�=�UffH�"�H�(H�����tJ��t-��I�H��H��L��H��������u=H�}pH��u.[]A\�@H���H��u���f.�L��H���u������~ ���G����AU��ATUSH��dH�%(H�L$1Ʌ�~H�>��t$���-�����Z%�f.�����H��I���-�L�-�UH��fA�}�}H���6�H��uhH�{H� uK�9������H��H������H�`Uf�;uvH�T$dH3%(���H��[]A\A]�f�H�{�f.�H���H�|$��H�p!H��HD�I�T$I�$ tI�T$��Q���fDH�|$�f�H��o!H��HD�I�T$I�$ tI�T$��X���H�n���� 9�H�5�[L���!P���AWAVAUATUSH��8H�_0H�GpH�|$H�t$X�L$@H����T$$dH�%(H��$(1�H���H�\$H��$�H�C H��$�H��$�H��pH��$�fo�$�fo�$��D$h����H�T$0)�$�)�$�HDŽ$�HDŽ$�H��xH�|$X�D$gH�D$8�+�H��UH�D$f�;�$H�D$H�L$DŽ$0HDŽ$P$H��$�H�AH��$(H�A0H����H�H 1�H�qXH9p�VH�D$H��$`��$4H�@pH�D$Hǀ��������9H�UH�T$H��$Pf�;H�B��H�D$H�t$H��$�H�
>�H�x ��H�-�U��f�}�qH��$�H�D$����1�L��$�H��$(H�|$I�l$0H�GH��$�H���H��$�H����D$g��t�D$G���H��$�H�D$H��$�H��t*H�t$H�E H�>H�|$(�� ��H�vH���������C����m�T$$���V���mH�D$XH��$�H�D$X��H��$(dH3<%(�(H��8[]A\A]A^A_�H����H�I��H�hH�L$H�� tH�hH�D$H��$�H��H�@ L���L��������|$@H��$��q�<�H���#H���H��$�H���H��$��8����s�I�EI�E tI�EH�L$H��$�H�Q H���H����H��$�H��$��v�������$�1��D$h�����$����H��tI�D$pf�����fDI�|$pH���A�D$$��t���@H�T$H�r1�H�����H������m@������HDŽ$�@�D$h1��W�����Q`����L�|$L�t$8L��L����H��H������<H�|$0H��H��$��w�H�����u���r���suiH�D$�D$g���ƀ��L$G�pLH�T$1�H�5��H��I���g+H�@H��0H�TH�t$H�=��U��fD�D$h1�����f��D$h���H�UH��$�f�;I�D$p�5�D$h����@H�@Xf�H�|$H�G������ǀ�H�G0H��t�H�H 1�H�yXH9x��9���H�|$�R���DH�|$l��H�wi!H��HD�H�T$XH�JH� tH�J����@H�|$t���H�?i!H��HD�H�T$XH�JH� tH�J��[���@H�|$p��H�i!H��HD�H�T$XH�JH� tH�J����@�{�����H��$��u���fDH����I�H��� �H��L��H��H��$����\���DL�������H��H���3�
L��I���(�
L��L��H�������DH��H�=FU1����H�=�UI��H���}�L��H�=��1��<(��D����H�} H�t$��H��$�H��������
H�|$0�H���:�����D�Q`�$����H�|$x�6�H��g!H��HD�H�T$XH�JH� tH�J����@H�|$H��$��T��H��H��t(H�E0H����o�H�@�@ �3H���k*�����fH�=.UffH�&�H�t$L� L���fSH��$�I�D$0H�@ L��x�������[�1�1�H��H���(�H�t$H���eH��I��贝H�t$L��I����H��H�����u>H�t$������H��H���Z�
H�|$H�D$P�K�
H�T$PL��H�����H�=vR��H�T$H��L��E1�H��� �L��H���K�L���ARH��$�H��$�H��$����H���4�H������L�|$H�ع}1�H��$@L��$@�H�L��L��DŽ$0DŽ$����H��H���HL��L���y��H��H�����u6�L�������H��H���Q�
L��I���F�
L��L��H�����H�=sQL��$@��H�T$H��E1�I��HL�L$|H���0[��L��H���E����|$|������M�@H�UH�pH��$DŽ$ H��$H�JH��$1�HDŽ$ H��$HDŽ$(HDŽ$0H��$8HDŽ$H$DŽ$@��.�G����.�I�D$����H�x�<��L���tPH��$�H��$�L��H��$��d���H����ff.��ATA��USH��fH�=�TffH��H�(H��FVH�8t>��1ɺH��H�����H�����U��Y��xA��[]H�A\H�Ѓ���S(��u�E��uH��[]A\��RfDH����9�H����E��u'H�5�OH���D��H�U����H�z�?��H���9�H����f���SH���C�H��tH���G�H��H���
�1�[H�����H�=fO1�����H��VH�8���ff.�f���SH��H���1�H�5(�����H���[���fD��H�]VH��H��H�8�����1��u0�D��H���s�H��H�!VH�8H����ff.�f���S��H�� H�|$dH�%(H�D$1�H�D$H�D$�?�H��H�D$�4(�H��t*��H��H�H�փ��{�H�D$dH3%(uH�� [�H�|$H�5!N�B���o+�ff.�@��SH��H�|$�t$H�T$dH�%(H��$1�fH�=��TffH��DŽ$H�D$ $H�H�CH�$H��$�H�C0H��t{H�H 1�H�qXH9ptcH�|$0��$�������uZH�$H�D$ �t$H�|$H�C���H��$�H�CH��$dH3%(��H��[��Q`�H�@Xf�H�$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xt)9�t	H�<$�|H��$�H�$H�AH�D$��m����Q`���*�fD��S��fH�=q�TffH�i�H�H�@0���[�f.���SH��fH�=@�TffH�8�H��1ɺ[H�8��D��UH��SH��fH�=�TffH��H���1�H��H�����H����H��[]�I�f���UH��1�SH��8dH�%(H�T$(1�H���H�����H��fH�=��TffH��H���1�H��H�����H����1��������?��t
�������H�L$(dH3%(��uH��8[]��(����H��(H�|$dH�%(H�D$1�H�D$H�D$�d<�1�H��H�D$����H�T$dH3%(uH��(��[(�ff.���H�����@��SH��H��0dH�%(H�D$(1��	�1�H��H��H����H���R���H�T$(dH3%(uH��0[���'����H��VAT1�I��UH��H��SH�H�������u'H���H��t#[L��H�`��H��]A\�e3�D[]A\���C�H��H��������AUATI��UH��SH���7�1�H��I����H����H��H��� ��H�CH����1�H���y)�I��H��UH��u#L�%Mh,�L����H���UH��t�H���4�I9�u[�H���-)�H�=��UH���^�H��t9���H�H��H��H��[]A\A]�����H����H���\���H��1�[]A\A]�f��.L�����H��t5�H�=�g,H����€���t.H�ƹH�=�H�����t�H�5fg,L�����H�&VE1�E1�1�1�L��H�8�������r���H��H��1�[]A\A]�
��DH��� %�H���������U�H�=ISH��H��VH���H�
�TH����H�=VIH��H���C�H�=CH�z�H��H����3�
H�=+H�^�H��H����3��$�1�H��@���1�H��X���H��@HǃP�H��HH���H�5�G��1�H�58��H�=�G�|�1�H�5#��H�=�G�g��2$�1�H��`�$��H��h���H������H��pH�������H��xH���y�����H�5��H�=?��a��H�5�T�H�=�� �I��H�5]���H�=BG�1��H���T�H����H�54GH�;�/��H�;�����H����H�5G���H�5H��H�=�F��������H�5���H�=�F����1����H���UH��H��[]��*�PXH�5wGH��H�l�TH�81��-�f�PXH�5nGH��H���TH�81���,�f�H��t@��t%H��H�*�TH��H�5MGH�81���,�fDH���H��u�H�����SH�>H�����H�{H����H�C1�[�ff.����UH��S1�H��H�(H��t�S��H��H�}0H��t�B��H�H�}8H��t�1��H�H�}HH��t� ��H�H��H��[]���UH��S1�H��H�H��t����H��H�}H��t����H�H�} H��t����H�H�}0H��t���H�H�}(H��t���H�H��H��[]�f���USH��H�����H��H����9�H��H��[H�]�D��S1�H��H�5�j�H��[�����H��H���2�1�H���f�SH��H��2�H�{(H�CH�CH�C H�CH��tE�5��H�C(H�{0�$��H�C0H�{8���H�{HH�C8H��t
���H�CH[����w������SH�>H��� ��H�{���1�[���SH��H�(H��t'�:�H�{0�1�H�{8�(�H�{H[�~��fD[�fDATI��UH��SH��H��dH�%(H�D$1�H�<$H�zHH��H��tH��H���D�H�$H�}0L������H�}8H�4$�����H��H�L$dH3%(u	H��[]A\��A �SH���7��H��t�tH��TH��H�5HDH�81��)�H���H��u�[�f�AUATI��UH��SH��H��� tXH��H����L�mH���3L��H�4�L�����H��tH�EH���� u�H�E ��f�H��L��[]A\A]�f�H�^�f.�UH��1�SH��H��dH�%(H�D$1�H����H�$H��t2@��u,H�H�΃�t!H�Ѓ�v4��u�� tH��H�$�H��H�5�H����.�H�$H��uH�L$dH3%(uH��[]�fDH�]�����ff.�f���ATI��H��UH��H��SH����H��t[1�]A\��L��H��H���B��[1�]A\�ff.���SH��H�H��t/�j�H�{�a�H�{ ���H�{0�O�H�;[�V#�fD[�ff.�PXH�5oBH��H�l�TH��H�81��'�ff.�@SH��H�|$H�~@H��u
H�D$H��[�f�H��H�5>�UH�L$��G�H�{(u�H�=� ���@H�����H���S1�H��H���U�5�H��H���U�$H���UH���@��H��t1�H�5>������f��ff.�@��H��t1�H�5�����f��ff.�@SH��H�H��th���H�CH�{���H�{ H�CH�C8H��t
���H�C H�{(H��t
�y��H�C(H�{0H��t
�c��H�C0[�f����w����H��uH��TH��@��u
H�G�DH��t2H��t<@��u@��t@H�q�TH��DH���TH��DH���TH��DH���TH��DH�A�TH��ff.�f�AVAUATI��UH��SH��H��dH�%(H�D$1��&��H�=��UH��H���t��u0H������H��H�L$dH3%(H��u`H��[]A\A]A^�DL�,$H�����I�}I�����H��H��tI�EH�EI�<$H��tL��H�������f���)��H��I�$���-�ff.�f�SH��H��H�t$����u1H�SH�KH� uXH��~H��u%�9e�����u�5�H9qtH�����H��[�DH��u�9Eu�H�T$H��t�1�H����H���D�[�H�K�f.��5�Hf9qu��5�H@8qu�H�|$�\�H���!��f�UH��SH��H��H��H��H����H�}H��t
H�{�H��[]�@H���P6�H��H��1�[]�� �AUA��ATL�fUL��SH��H��H��dH�%(H�D$1�H�l$@�|$H���o���H�D��L��H��d$�U���H�D$dH3%(uH��[]A\A]���DATUH��SH��H��dH�%(H�D$1��m����ttH�����Å�������I��H��ts1҃�tL���tBH�}H��tiH�pH������uI�|$���I�t$H�}H��H�$�z��H�$fDH�L$dH3%(H��u(H��[]A\�@���f��;�H�E���ATL�fUH��SH��H� tL�fH���!�xuH���	��uA�<$#t*H��[]A\�@H���TH��H��H�5$?H�81���!�H���TH��H��H�5�<H�81��!�ff.��ATUSH����H�=�HH��H��t��t0H���H���H������H��I���5��I9�u'H��[]A\��H���H��H��~HD��H�B�TH��H�5+<H�81��.!�ff.���H;=��UtCH;=��Ut:UH��SH��H���ix��H9�tH���<��H��tH�EtH��1�[]��1��DH���TH�5�;H�81�� �USH��H��(H�?dH�%(H�D$1�H��t@��tQH�CH�kH��|H���#H�{ H�GH{H��H�C H�k�H�t$dH34%(�mH��([]�DH�H�ƒ�H��u�H�S H;W�IH�O�� tH�OH�BH�C ��H��u�H= � H�L$H�5��UHOºH�DH�D$��H�{(��H�D$H����H�|$��H�D$H�PH�pH� uH�{H��u������H�pH�{H��t��/�H�D$H�{H�h���H�5�U1�1��0�H�{(t}H��trH��uH���6�������fD�uH�H�у�H��t�t�H���i�����H�x~�H�H�� tH�H���B���H�=��!�����|�H�==��AWAVAUATUSH��8dH�%(H�D$(1�H����H��H�>H��H���H�CL�cH��	M����L9���H��I�� M)�H= HO�H�@L9�IL�H���H�DH�L$�H�D$H�5��U��H�{(�H�D$H����H�|$�1�H�D$L�xM9���H�{ L��H{�?��I��H�D$H�pH� tH�pL��L����M9���H�D$M�I)�H�pH� tH�pM���ML�c�@@������H�H�ƒ�H������H�s H�OH)�H9���H�W�� tH�WH�<2H�����Hk I���D1�1��O��I��H�L$(dH3%(L����H��8[]A\A]A^A_�fDH�CH�C ��fDH�{ H��H{�(��Hk I��H)k�H�@H��}H�D-H�L$ �H�D$ H�52�U�U�H�{(tkH�D$H��tH�|$��L�t$I;n�>�����DH����H�;����H�{L�L���1,����@H����H�;�x����c�H�=ތ!�'��AWAVAUATUH��SH������L��������~a�X���z������E1�1�M��~+f.�H������B��I��H�H��H	�M9�u�H��H��[]A\A]A^A_�D�����{~m�؃�~Lc�E1�H�����A����t��F�<�L��H��I��D��H��H��H!��U���D��H�H��H	�M9�u��1��z���f���Hc��f���DHc��Y�����H���TH�5 8H�81���ff.�SH��H��dH�%(H�D$1����H�{(H��H�����tH�L$dH3%(H�$uH��[�H���TH�5r5H�81��>���f�ATM��UL��SH���	�H��uIH��TH�
H��t*�uFH�PH9��I�|$�'[]A\��H���TH���@��u;H�KH��t��H����H�����uX<��H�9�TH��@H��tJH��td��u��tzH��TH�
H��t��\���fDH���TH�
�B����H���TH��?����H�Q�TH�
�"����H�A�TH������H��TH�
�����H���TH�����H���TH�
����H���TH�����H���TH��H�5p6H�81����H��TH��H�5�3H�81���ff.�ATUSH��H�� dH�%(H�D$1�H�|$H��tL�d$H��H�t$L������u*H��H�L$dH3%(H����H�� []A\��H�l$H��u>H�/�TH�8����H�=��UL��H���=���t�H�D$H��H��P�f�@��t*H��tTH��t.@��u8@��tQH�k�TH�8�fDH�}�f.�H���TH�8�@H���TH�8�m����H���TH�8�]���H�*�TH�8�N�����
�ff.�f�ATA��UH��SH�� H�vHdH�%(H�D$1����H��E��t!H�L$dH3%(H��u{H�� []A\�DH�}8H�T$H�t$H�D$���}Pt(H��t��uH���H�P�H��vH��t"H����H��H���/�H���f.�H�����H�����
�ff.�AUI��ATUH��SH��H��(H�:dH�%(H�D$1�����H�$H�l$H��u'H�D$dH3%(��H��([]A\A]��L��H��H�5C9A���K�H�;���A9�t�D����H�;H���H��I����(�L��H����(�H9�H�v-H����H���TH�H���TH�5�3H�81���f�H��u+H���TH�H�Z�TH�5�3H�81���f��tlH��tvH�������<��H���TH�믨t,H��tVH��t�ul<��H���TH��[���DH�P�M����H�P�f����H��TH��P����H��TH������H��TH��0����H��TH����H���TH����H���TH�����H�L�TH���H�=�TH������
�AWAVE��AUATUSH��hdH�%(H�D$X1�A�@ރ�[��I��H�7H����Hc�I��H�>��fDL�%y���H���A���I��H��A��H�S0M�g�H��H�rH����I��H�CJ�`H�CM���?f�H��I����H��I���L��L��H�����H�CH�P�H�SI���u�H�CA��}�x@��H��L���,���I����@�H��I����H�5i�U�H��I���	
���=H���i���H��H����H�D$HM��tH��1�H���A�$H�5�UH�L$H�L����H�{(��H�S0H��H�rH����L��I�����H�=v�UH�T$PH������tH�D$PL��L��PI��@��u�{P��
L��H���
�I���I��$��H�L$XdH3%(L����H��h[]A\A]A^A_���H�߉D$�o���I��H����
H����E1�E1�H��E��A���q�A��H��D��Hc�H���\�A�OH�H��H	�Ic�I	�L9�|�H��������?I9���K�l-�|$-�
H�C0H��H��H�p������1�H��H�|�D���I������@H�0�$L�gL���s��H���H����1�H�sHH�����H��t�uH���H���D	@H���TH�5�,H�81��0��K���H��H���p�H��I�����L��H����M��tA�$����H�S0H��H�rH����@��H��H���w���I���?�������H��H����H�hH� tH�h�H�=$,H����€������H�=
,H����€����9	�H�=�+H���
�6��€����9f�f(��g��H��H�C0H��H�p���1�H��H�����I��������CH��I���h��I��I���M��tA��uI���H���D
L��L�����L��L���*!�L��1ҾH���XI���&H����H����L�����L��H�����I�E�� u�I�E��fD�H��I����H�T$HH�sHH�D$HH����H���������H���H������H�S0H��H�rH����H�5�U�H��I�������
@��1�L��H�߉��H�5��UH�L$PL���H�D$P��H�{(�h
��H��L���B���I���
���f.���H��H�����H��I����M���s���A�$���g���H�Y�TL��H�5�-H�81��E�DH��1�1�����I�����@�cH���K�I��H��t#�uH�H�ƒ�H��t�� ���H���8�A��H��TL98u
A�F����+	@��E��L��1�H���8���I��H�������H���H�P�H���pH��tI�t$L���M�H�����u/L�����I�$���H��t���H���9��&M�|$M�������A�������L��L��������fD�3�H�l$PH�{0H��H���/�����L�d$PH�{8H��L�������K����1���fD�+�H���3��I���+���H��1ҿ�I���I�������H�0�$L�gL���{��H����H����H��I��H�D$0��L��H�D$���I��H��t�uH���H��	�7H�|$0���H�5�'H��H�'�TH�81���D�3�H��H���X�H��I���m��M�������A�4$�����H���TL��H�5O+H�81����DH�T$P��D$P�aD�D$PI��E����L��@��H���1�I�����f���H��I���P��H�S0M�f�H��H�rH���	�I��H�CI�D�H�CM��t&@H��I���$L��H����H�kI���u�@��H��L����H�CI���r���f��;H��I��� �H�T$HH�sHH�D$HH���V�H��I��tL��H���2�H�5��U�H���^����	H�C0H��H��H�p�C�H��H���x
H�5q�UH�L$PH��H�D$P�Z��H�{(��	H�sHH����H�|$PH�5��H��H���l�{P��H��H����I��I�������H�|$H�(L������q����M����A�4$�.A�$H���N����f�H��1ҿ�a�I���)���f����H��H�����H��I�����H�{0�$�D$PA��L�wL���e��M��tH�t$PH��L���@
A�$�|$P����M�MI�E tM�MM�EM����M�L��L��1�I����A��H��1�H��H���L9�����J���4w�M��I��L��M��ugL�f�����H��H��L���H�G0L�`���H��H����H��L��H�����H���TD��H�5P$H�81��������H��H���\���L)�L�����D��L�����H�5���L��I��H���e�H��L��L���<����H�i�TH�5j&H�81���L��H��H�����I��H��1�L�����E���DH��1�L������H�N�1����D�
H�s���H�<H������|$-A�"I�ĸ"DE�I�|$I�$ tI�|$L��1ɺ���1�L��H��������H���8������1��y	�N���@�
����H���L��H��� ���p�H�|$0�1�I��H��� �]H����H9D$��L�|$H��L��L��K�D?�HC�t��L��H�D$8��H�|$0H�D$(��ZH��H�D$�8E1�I�EH�|$H�D$ ����@H�D$ J�<�J��H�L$�M��H��I���	L��H��I������H����H�|$H��tX�I�E taH�T$ J��H�|$H�4
H���c��H�kI��L9d$t9I�E �m���I�E �i���@��H�|$(H���6��@I�U �L�|$8H�t$(L����@��H��L���9�H�CI����1ҾH���(I��H����H�m�TH�8I9���@��uH�H�ƒ�H��t	�� ��L�����I���)fDH����H���x���L�����L��H���%��I�E�� u�I�E��L���>��H���	�L��H���K������1����I�����L������H���BH�����H����L�%Z	���l�I�E����uHH�x����H���nH���ZH��$�w������<��D���H���I���A����A���H���TH�8���H��H�t$HH�D$���L�d$HH�D$f(�L)�Hh�D$PtH�m�H��~A�<$���L$PH�0fH~�H9��h�fH~�H��<������uH��H��H���O�H���:�H���7������H�|$(H��H�D$�����1����H�o�TH�8����H�@�TH�8���H��TH�8�����������H���TH�8����D$H�|$DI��E1�fTt�ϻ�%����H�|$P��
��T$P�L$�H����A�T$H��I�L$H	��QH��L�aH	�H��H���AH	�H��ve� f�A)��L$H���H*�D���T$�B���T$H���L$�X��T$P~GA�$H��tH���h���L���|���I�����A�T$H��I��H	�����D$Df(��L$�x�����L$f��f/�vfW"(�D$P������H���TH�5sH�81���H�|$0�P��M��L��H�5# H��H�i�TH�81��_�H�X�TH�5�H�81��G�H�=��{��H�4�TL��H�5j H�81�� �H�=aw�T��H�
�TL��H�5�H�81���H�B�TH�5=H�81����H�|$0��H�5HH��H���TH�81���H�=�v����H���TL��H�5�H�81����`��L��H�5�H��H���TH�81��r�H�k�TL��H�5I H�81��W��AUI��ATI��UH��S��H�����H����L��[L��H��A��]A\A]���SH���W��H�߹1�A��1�[�r�f�AVA��AUI��ATUH��SH�� dH�%(H�D$1�����I��H���H��H�o�S�X1�����H�X �@��H�D$H�C H�+� ��H�C(�w��H�C0�n��H�CHH�C8H�C@H�CD�sPI����H�CH�����H��A���y����A�����������H�����t	����I��tL�k@H������H��H�����H�D$H�D$H�D$H��H�L$dH3%(uqH�� []A\A]A^ÐH�X �����H�5i�UH���q��tuH�5N�UH���^��tbH�5+�U1�1�H��������f�� �V��H�C�������H�����A��E��H�.�T�H�5BH�81�������A���1��H�=x�����ff.���H��1�I������H��������DAUATU��SH��H�����H��H������I��H�C(L��L�`�.���u*H�{(L��L���k���u'H��L��[]A\A]�f��L���c���ǐH���h�H�h�H��~��H��H���lH��I������L��H���f��A��H���uՅ�~�L������L�����=0�u���D�����L��H�5�H�PH��TH�81����D��U1�SH��H��H�������;t��Iu'H�߽������;u��uIH��H��[]�����:t#��H���TH�5kH�81��Y��f�H����H��[]���H���TH�5bH�81��(���AWI��AVAUATI��UH��H��SH���!�H���`H��H����H���H�D$�9�H���@����|�t$H������M��tA�H���L������L��I�����L��H��I���������D$y�L������tpL�����L��H��H���z����@���Z���H�E��H����H���?���H�����H�5�H��H��TH�81�����I�EI�UI�E tI�UH���p����:K�g���H��tH�|$uH�EH�ƒ�H��tbH��TH��H�5	H�81����H��[]A\A]A^A_�f�H����H�5YH��H�g�TH�81��]��D�� H�E���H���TH��H�57H�81��1����AWI��AVI��AUATI��UH��SH������H����H�=��UI��tw� ����H�=~�UH��H�(H��t@��uH���-��H�=^�UL�cM��u-H�=V�UL�sL�{H��t9H��H��L��[]A\A]A^A_逼�A��u�L���������;������fD�+��H���H�_�TH�5lH�81��N��ff.���H��H��H��H����H��tZH�G���H��yv>H�G{H��zvTH�N�@�9H���BtNH���tFH���ƒ�	u�
�D���@�>�@���������D�ڈø�����ff.�f�H��(I��dH�%(H�D$1�L�D$L���,�����x'I�Hc�I�IL���f��H�D$dH3%(uH��(�H�:�TH�5TH�81��)�����@ATI��UH��H��SH��H���x���H�H�KH��[L��]A\���f�AWf(�AVAUATUSH��H��XfT
sdH�%(H�D$H1�f.
Svaf��H��f/�w<�H�=.�{���H�D$HdH3%(�kH��X[]A\A]A^A_���H�=��?�����Df.��~f.�zDuBfP�H���t�H�=Q������@�H�=������o���f.�H�L$H�T$1�1�L�D$�8D�d$I��E��t�D$ -A�H�l$D�t$L)�A9�
A�����A�Icԃ�A�D$�L HcՅ�~jH�A��L�l$ �D .Ic�L�I�w��D��D�d� A�N�1�Ic�H��H)�L��s��A�L���X��Ic�H��L���������DL�l$ H��t�Hc�A��L��E��cIc�A�L$L�l$ �D 0A�D$Hc�H�L��D .E����Hc�H����D�$)�@H���H�=J��������Ic�Ic�L�l$ L��L�H��D)�H�L$��E���4���E�t$H�L$Mc�Hc�Ic�B�D$ .F�d5L�I�4�z�����D����t1��ƒ��09�r�D)�Hc�L��K���L���L$�E�L$�B�������AVAUI��ATI��H�qUH��SH���c����UH�uL����H�H)�M��t
A��t@I��$tH��ue[]A\A]A^�@I�$H�ƒ�H��u�� t�D�mH�=@�UL�uA���A��H����L��H����H�uD���$�f�H��H��L��[]A\A]A^���f.�AWAVAUATUSH��xH�|$dH�%(H�D$h1�H�D$($����H�l$I��H���bH����H����H�����H��H�^H�H��H��H���7L�d$PH�پ�D$PlL�����H��lI�H�پL���D$P+���H����	H��E1��E��H��E�l$u�Ic�L��1�����E��
�fD����L��H������CD9�u�I�F8�#��D$PFI�I�NH�|$P����H�D$hdH3%(��H��x[]A\A]A^A_�f�@���~A��@��uH�E��H���dI�~H�T$0H��������1�H�|$E��L�t$X��A)�H��H�|$P��D�|$`H����H��dH�5Z�U������@H�5Q�UH�|$�����A����I�~0H�D$H�D$@$H��t1�H���>�����H�D$Mc�H�5��UM��H��K�T?H�L$8H�T$8L�
fX����H�D$8H��t�uH���H���LH���TH�5	H�81�����D$P0�s���fDH�|$PH�پ�D$Pi���H�|$L��H������W���@L��H����C�����D$PT����fDI�H�پL���D$P-H���%�����I�V8I�~H�t$H�BI�F8�V��H�|$M��1�H�5ݞUL�
g1����H�t$L��1ɿUH�D$8�H�|$8D��L���n������f�I�H�|$PI�N��D$P@���H�|$0L������n���I�V8I�~L�d$HH�t$H�BI�F8���H�|$I�v(�#��H�|$H�T$(H��H�D$���H��H�D$H�x����H�=��UL��H���9���tIH�D$H��H�$H�D$H�PI�~ H�D$H���)H�$H���ò�H�|$H;<$tH�|$($��H����H�|$H�H�ȃ����_	H��Hc�H�>��H�5l�U��*�����H�5S�UH�|$1�1�L�
�M���#��H�t$L��dH�ù�	D��L��H�����H�D$H�D$HH�D$H������H�T$H�t$(H�L$PH��������M�NI��L��L��L�$�D$Hl����L�|$L�$I�H�� H��҃���+��@� I�GM�H�$H�$H��H�x�A�D�H����f�A����u�Mc�I����T$HI�L�ɾL��L�D$�_��L�D$L��L�����H�$H���
���L�`�fDE�,�L��A���x��D���I9�u��tL���a��H��H;$u�����L��H����S�H�T$H����*H��
��H�$H�$L��H��� ���H�|$薢�I��H���r���I�D$1�H�D$I�$ �vH�T$H�<�L��L�,���
H�T$H���UH��J�<*L��D��H�����H;$u�����H���TL��H�0�
I�I�NL���D$H[���H�T$H��� �dH����H��L��H��E1��O�H�D$H��KH����I9������H��J�<�D��L���r���H�D$H��� �YH��H����H9���I���� u�L;`�S���H�@ �H��TL��I�^H�0�I��H��L���D$H/�W��H�|$���A��H�D$H�PH�rH�zH� tH�zL�����I�H�پL��D�l$H�������H� �TL��H�0�H�|$����H���rH�D$H�x��H��t�uH�H�ƒ�H��t	��@���D$H}I�I�N�L�����H�|$�n��L��H�����H�|$H�T$PH�5���H�D$H�xH���"���D��L���������H�۶TL��H�0��I��L��I�N�D$H"���H�D$H�pH�xH� tH�xL��������I�I�N�L���D$Hf����H�T$H�Ѓ�H����H�BH�$�$L�����x����D$HmI��I�NL�����H�|$����H�D$@H�xH�pH� tH�xL���;�H�D$@H�D$HH�D$@����H��t@��u	�� ���D$Hc둹L��H���o��H�\$L��H�5���H�D$HH���'��H�t$XH�|$H�X�H�t$HH�T$PH���F������L��1��6����I�V8H��I�~H�BI�F8�	��I�I�NH�|$H��D$Hf���H�D$H�ƒ�H�����@L���|��b���I�n(H�|$H���6��H�|$H�T$(H��I���1���H�|$8H��H�����H�|$8H�T$@H��I������H��H����H�D$@H�D$(I�I�NH�|$HM���D$HIH�����H�t$�u1�L���
H�D$8H�pH�xH� tH�xL����H��tCH�t$I�~0H�t$HH���1�����H�t$(L��H��H�L$P�g�I�~0H�t$H1����I�V8I�~H�t$H�BI�F8����C���H�H���H���Q���M��H���%���I�I�N�L���D$HI����W���I�T$ ���H�R���H��f�H9��l���H��H��H��?H)�H	�H��H�$�~$�I���1�������H��I�F H�D$���H�BH�$����H�Z���H��I����H�$�����q�H�t$HH��I�F0����I�I�NL���D$HC�W���H�=�z�@�L��H����T������H�j�TH�5MH�81��	���D$H{�c���H��H9�t"H��H��H��?H)�H	�H��� ���I���c���H�G
����H���TH�5�H�81����H�c�TH�5H�81����H���TH�5lH�81��z��H�|$��H�5�H��H�_�TH�81��U��H�N�TH�5H�81��=���x��H�5�H��H�'�TH�81����H�֫TH�5�H�81����H�?���
���H�5@H��H��TH�81�����ff.�@AWAVA��H��SAUI��1�ATUH���@SH��(dH�%(H�D$1�����H�X �@uH�X H�CH�D$���H�C�m�H�C81�H�CH�C H�C(H�C0���I��H�H����H�5�UH��������H�kH�5ȒU1�1�H���4��H�{��H�I��L�{H�l$��D$L��H������D$H�L���H������L��D��H���o�H�{H��uFH�����H�D$H�D$H�D$L��H�L$dH3%(u0H��([]A\A]A^A_�DH���m���H�3��H�;1��������H��TH�@�H�5g�H�81��(��������USH����~sH���t*H�n��tqH�F��uY��H��u*H��u�Զ��@������H��H��H��[]���H�Ǩt�)���H��u��������������@��uH��t�����H���۴������UH��SH��H��H�s�R���SH�sH����H��1�[]�ff.��AUATU��SH�������1�H��t?H��I��L�.H��tDH��t?�Z:��H���"��L��H���7I�4$��H�����H��[]A\A]�f�H�=Y�U��AWAVAUATI��USH��H��8H�~L��dH�%(H�D$(1�H�T$蛽��tOH�H�|$�H�K�D$;�\���H�|$H����H�D$(dH3%(�H��8[]A\A]A^A_�@L�����H��H����H�s(H��L�{�Ծ��I��H��tH������=��A�L�t$H��L��L���D$:�Ž��H�uH�}H�E tH�}H���w�H�{L��H�W���I���>���H�޿H�\$�D$ ����T$ I�vL���3�������fDL�t$H�L���L���D$I�;����Y������H��T1�H�5�H�81�����UH��H��SH��H�=%>H��襾��H���M��H��H��[H��]�,���ff.��AUATI��UH��SH��H��dH�%(H�D$1�H�H������t	H����H��uiL�l$H�}H��t��u��tH���H��t.�(��I�$�L��H��I�L$�D$e�J���L��H���/���H�mH�EH��H�ƒ�H��t�H�D$dH3%(��H��[]A\A]�f�@���_���H���U����� t�H�{H�kp���H��uBH���-��H��u5H9�tH�}�z��H��u"H���
��H��uH�[H�H��H�������H�|�TH�5F�H�81��k������fDATI��USH��H��dH�%(H�D$1�H��u}H�>�TH�(H��H���c���H���۳�H��L9�t.H��H�KH�|$�D$C����H���@���H��H�����H�D$dH3%(��H��[]A\��@��u
H�o�@H��t:H��tD@��u@��tHH�1�TH�(�V���f�H���TH�(�>����H���TH�(�.����H�A�TH�(�����H���TH�(�������ff.��AUA��ATA��UH��SH��H��(H�z dH�%(H�D$1�H��tH�T$�'���usH��uxH��TH�(D��H��H������H�H�K�H�|$D�d$�˹��H���s��H�����H��H�����H�D$dH3%(��H��([]A\A]ÐH�l$H��t�@��uH�m�f.�H��t:H��tD@��u@��tHH��TH�(�U���f�H�a�TH�(�=����H�1�TH�(�-����H��TH�(�����H���TH�(�
����\��ff.����AUATUSH��H��H;=x�UL�"��H;=`�UtsI��H���4��H9�tNH�����H��tAH�mH��I�l$����H��H������A�T$I�t$L���*�H��1�[]A\A]�DH9�Ut(H��UH9�u�I�<$�*���H�=�H��1��)���I�<$����H�=o�H��1��
���ff.���U�H��SH��H��H�3dH�%(H��$�1�H��H���H�H�|$`�ϡ�H��H�$�ӿ��H�T$ HH��$�dH34%(u
H�Ę[]����f���H�5��SH�=Y���f���SH�=G��߶�H�=�AH��軾�H�=wQH�0�U裾�H�=KQH��U苾�H�=@QH��U�s��
H�=��H�ЈU�[��
H�=��H���U�C��H�=��H���U�+��H�=Yu ���H�=�H�_�U���H�=hK!H�?�U���H�=<�H��U�ҽ�H�=M�H���U躽�H�=u� H�߇U袽�H�=_j"H���U芽�H�߹����H����H�5��H���U�X��H�ߺ	H�5�����H��[�H�5����ff.�@����������f���1Ҿ���ATI��U1�SH��H��t@��t1�I�,$H��[]A\�v�H�H�ƒ�H��
u�� t�1ҾH���M��H=�v�H�h�H��������?H9�wH�t-H�����H���H���8��H������H��H���@v苦�H������f���H��H��� v苳�H�����f���H��H���v蛏�H�����f���SH��H��H����uH���D$��u�L$���H��[�I��f���H��H���u���H���"��f���H��H���u���H�����f���SH��H��dH�%(H�D$1��D$�Guf(�fT
��f.
{�vAfP�����U����H�L$dH3%(��H���H��[���f�f.�zFuDfP�������H��Z���H��H�T$dH3%(uaH��H��H��[�c��H�|$����!��H�L$dH3%(u/HcT$H��H��[H�t�*��H�˞TH�5��H�81�����m��ff.�f���H��H���0t�~
x�f(�fT�f.`�v&fP�����:�H�����f�f��f.���f(��-��f(�fT�f.�w8f.�z$u"f/���f/�r�
�f/�sn�9��H��� ���H,�f���-��fU��H*�f(����fT��\�f(�fV���p���fP������<����/���f��,�H�����H�������H�w�TH�5`�H�81����ff.���H��H����r�{��H���b��f���H��H���r���H���B��f���UH��H��SH����t+趦�H��H���r���4��H��[]�	��f��+����f���SH��H��dH�%(H�D$1��?rH�|$���HcD$H�\���H�T$dH3%(uH��H��H��[�����!����H��H����q�D$����%�f(�fT!�f.�r+�L$f�Һf.���E„�uf.���E„�uH���'����^��^��X��X��^��H�����ff.�@��USH��H��HdH�%(H�D$81�H��t@��tXH���0qf��f/���f.��(f.��Q���f(����H�T$8dH3%(�WH��H[]�fDH���H��u�H�{H����H����H���wH�L$0��<H�D$0�:��H�{H���pH���D$�`��H���xp�T$f���%�Jf(��\��Y�f.��Q����X�f(��Y��Q�f.��|$��H��tfW?�f(�����D$H�����H��H���ݰ���������f���������f.���fP����H�{�oH���D$莺�H���o�T$f���%�If(��\��Y�f.��Q��m�X�f(��Y��Q�f.��|$�3����\$����\$����@@��uH���H���J���@���i���H���R���H�{�oH���D$���H���n�T$f���%NIf(��\��Y�f.��Q����X�f(��Y��Q�f.��t$������\$����\$�w������H��TH�5�H�81��)���T$�����T$�Y����\$�����\$�!����d$(�L$ �\$�l$����d$(�L$ �\$�l$�T$����d$(�L$ �\$�l$�`���d$(�L$ �\$�l$�T$�S����d$(�L$ �l$�T$�\$����d$(�L$ �l$�T$�\$������H��H���pm諊�H������f���H��H���Pm蛉�H������f���H��H���0m�˧�H�����f���H��H���m�+��H�����f���H��H��dH�%(H�D$1�H�����f��f/�wtf.�{]�h��H�$H��x/f���H*��X��=��H�L$dH3%(u9H����H�ƒ�f��H��H	��H*��X��Du��������H���TH�5	�H�81�������SH��H��H���,lH���D$�l�L$f�Һf.���E„�tAf.���E„�t3fP��tfP��/F�t��H��[�Y��f��+��H��[�A����H��H��dH�%(H�D$1�H����f��f/�wtf.�{]訂�H�$H��x/f���H*��Y
���X�����H�L$dH3%(u1H���H�ƒ�f��H��H	��H*��X��Du��f���/��H�p�TH�5��H�81�������H��H����j�
(�f/�w]��f/�wOf.�{6f.�{���H���:��f.�u����H�����Du����H�����H�֔TH�5�H�81��
��ff.�f���H��H���@j�
p�f/�w��H�����H���TH�5^�H�81����ff.����H��H����i�
8�f/�wf/�w�3��H���Z��H�+�TH�54�H�81��b��f���H��H���i�
��f/�wf/��w����H���
��H�ۓTH�5�H�81����f���S��H��0dH�%(H�L$(1Ʌ�~vH�>��uiH�t$�O�f��f/���f.�������H�D$H��xXf���H*��Y
W��X��~��H�\$(dH3%(��H��0[�@��tc�������f.�H�ƒ�f��H��H	��H*��X��D�s�������H��TH�5J�H�81����H�^H�t$�z�f��f/��$w�H�t$ H���^�f��f/�f(�w��$f.���f.����$�T$角��T$�$f(�蓒��$H�D$H+D$ �T$�^�H���$xff���H*�f(��L$�X���L$�^��$�X�����y���f.����������������`�������w���H���f��H	��H*��X���m�������@��H��H��1����ff.�@��H��1����f���H��1����f���H��1����f���H��H��1����ff.�@��H��1���f���H��1��"�f���SH�=���ߤ�H���TH��TH�5�RH��H�H�輋�H�ݐT��@H����H�;H�5�>H�������������H�;H�53v H������H�;�H���H�5%��9��H�;�H���H�5����H�;�H�?�H�5�����H�;�H�����H�5�����H�;�H�	���H�5�����H�;�H�����H�5����H�;�H�C���H�5����H�;�H�8�H�5~��|��H�;�H���H�5i��a��H�;�H����H�5T��F��H�;�H����H�5,��+��H�;�H�|���H�5����H�;�H��H�5���H�;�H���H�5����H�;�����H�^���H�5����H�;�H�����H�5����H�;�H����H�5����H�;�H���H�5���n��H�;�H�?�H�5z��S��H�;�H���H�5d��8��H�;�H�Y�H�5O����H�;�H���H�5:����H�;�H��H�5%����H�;�H���H�5��̿�H�;�H�]�H�5��豿�H�;[�H��H�5��长�D�����������tH�H��H�1��fD��SH��H�`�UdH�%(H�D$1�H�;tBH�=�sU辤�H�=�sU���H�;H��sUt)H�D$dH3%(u%H��[�H�|$�ޞ�@H�|$�~����׻����H�=msU1�H�5�G�����H����1�H���ff.��ATH�5'sU�USH���#H��uSL�%ˈT�2f�H���TH9t.H�5�rU�H����"H��H��uH��诒�H��I9$u�[1�]A\�H��@H�5!�SH���i���t�H�E []A\�ff.������tH�.t
1�����f�AWI��AVA�AUIc�I��ATL�UH��SH��(�D���H�T$I�D�'�L�D$L�$D���tN��<��~s��>����_ujD��H�=3�薳�H����EA��Ic�D��L����u�DH�<$��CH���5�-H�����Hc�H�>��f���!t��JЃ�	w�L�l�T1�f.�Hc�H����I�H�HHc�L���zЃ�	v�H�|$H��f�D��H�=n��T$�ݲ��T$H����A�E���1���<����A�E�&�����}u"f�H�D$H��H��([]A\A]A^A_�H�D$H�H��(�[]A\A]A^A_�H�D$H�H��(�[]A\A]A^A_ø�f�H�D$H�����H�|$`H�tdD��H�=$�1����H��H���TH�8���H�t$`H�H���W���H�|$`D��H�=�t�o��H��H�e�TH�8�ݔ�H�\$`H�H���������H�B�T�-H�5��H�8�^{�H�\$`H�H��������H�|$`t�D��H�=x�1��@��USH��H��H��u�H���1��@��u�H���H��u�H��H�5�oU�H���gH��t!H��1�H�=���p��H��1�[]��H��H���S1����H�58oUH��H���=y�H���[]Ð��L�G@H�OHH�wPH�W(L��H��x9H�<�H;�u5I��J�<�H��f�H9�uH�T�H��H���u��@1��ff.�f���H�O@L�GHH�wPH�W(H��~#H;u*1��fDH9�uI��H��H9�u��fD1��D����u 1�H��~9�I�4�H�4�H��H9�u��DH��x�f�I�4�H�4�H��H���u��@����H�7�H�WH�OD�GH�G H�G(H�G0H�G8H�G@H�GHH�GPH�GXH�G`�ff.�@��AWAVAUATUSH��H�t$(H�T$0H�L$8dH�%(H��$�1�H�����I��H�|$hH�D$`�D$<|uH�W�D$�GH�T$hI��H�|$hL�d$pE1�L��H�|$H��$�L��E1�H�|$H�|$xM��H��L�t$ I�������� ���P������D$\H�t$\H��H��H�D$xH��L���D$xHDŽ$�H�D$hPL�L$L�D$ ����Y_H��H����H�L$xI9�LL�H��~�|$��1�H��$�1��;x��H�\$hI�N�&N�$�#f.�H��H�\$h��� t��	��v�����$���L��L�t$ M��H��~#�|$tH��tL��M�,H�H��I)�H��MO�H�|$(��H�|$0�� ˆT$GuKH��$�dH3<%(L����H�Ę[]A\A]A^A_�L��H�H���H)�H��HN������ L�����A�.L�t$pH�D$8@���bH�|$[H�T$\E1�1�H��$�H�|$ L��I��H�D$H�D$pH�D$H�D$xL�l$HD�l$L�|$I���]DH�H���D$GE�H���L$[H��H��HD$8@�(�H@�xL�`H�pH�PH�|$pH���/I�@����H�D$xH��L��L���D$dHDŽ$�jH�t$0L�L$L�D$ ���H��XZE��t H�L$xH��~L��H�H��L�H)�H��LO�H��$�@��x�o����|$\�M�@�ǀ�1�/����H��H�H�������1��
���L�l$HL�|$H�D$(H�|$8H�8H�D$0L�(����H�D$8H��tH�I��������A������ff.���H��1�1������L�G@H�OL�OPI����M��tAH�XH����1�M��~)DH��I��H�H��H��xHH��H��I9�u�H���H�G(M��~�L�OHL��K�<�@H�H��H9�u�1�f�H�I�<�H��H��H��H�I9�u�H���f�M��t;I�H�H�H���DM��~�1��H��I��H��H�I9�u�H����H�G(��f.���ATUSH��dH�%(H�D$1�H����H��H����H9V��L�f�+I��HVH�4@��c��@��C���{��M����I��L��I��L���4��I��J� M��~]L��D��H��H���O��PH��H)�H����4��H�t$dH34%(�ZH��[]A\�fDM��u;��EH�a�@��Hc�H�>��H�H�D�D�H�D�fDH��L��耆��fDHc$H�D�w���f.��$H�D�`���H��������?H�<$H9���H�D$dH3%(��H��[]A\����H�D$dH3%(�w�$H��[]A\銴�f.�H�$H�D�����H�D$dH3%(�7f��Z$뺐�$H�D���f��{H�<$H��������?�F���H9�w0H�D?���fD�{����H��������?H�<$H9�v�H�D$dH3%(��H��[]A\�B��f�H�@H�<$H��{��H��y�H�D$dH3%(u{H��[]A\����{�n���H�@H�<$H��O���H�D$dH3%(u:H��[]A\���f�H�@H�<$H�������H�������谭���AWAVAUATUSH��H��HH�T$dH�%(H�D$81�H����H������hI��H���\I��H��uH�~�R转�H�~�H�D$H��f.�E1�I�L�d$0��L�$$f�M�OL��E�'I��IwL�A��c��A��C��A��M���2A�D$�<1����D��Jc�H�>���HcD$0H�tfDH��I�����M9w�z���H�D$I�� H�D$H9D$�@���H�\$8dH3%(H���iH��H[]A\A]A^A_�f.��D$0H�t�DH�D$0H�t�H�@H�|$0H�A���H��xZfDH�t?�N���fDA��-���H�@H�|$0H�y����H������@H�@H�|$0H�y��o}�H������f��ZD$0���H������f��D$0H�t����A�H�|$0H��������?uqH9��I������H�����@A����H��������?H�|$0H9��������H���`����D$0�e��H���M���DH��������?H�|$0H9�����苑�H���#���M�����H�<$�L���v�������H�<$�L��L�L$�Z��L�L$H�$I��J�M���������1H��H��@�p��QH��H)�H����y���H�H�t���f.��H�t���H�������2��H���j�������H�vE�'H�A��ctLA��C��A�I�ouH��u@A�D$�H�����Hc�H�>��H��t�H�|$(�H���u����H�H�l�%���L�D$(H��H��L���L��H�(H��~���2H��H��@�p��JH��H)�H����y����H�l�����D$(H�l����H�D$8dH3%(�/�D$(H��H[]A\A]A^A_�v���l$(H�H�����A�H�|$(H��������?u H9�wbH�H�o�^���H��������?H�|$(H9�v�H�D$8dH3%(��H��H[]A\A]A^A_�S��A�t7H��������?H�|$(H9�v�H�D$8dH3%(uxH��H[]A\A]A^A_�5��l$(H�H������H�D$(H�l����H�@H�|$(H�A�t1H���9���H�D$8dH3%(uH��H[]A\A]A^A_�y����H������H�D$8dH3%(u�H��H[]A\A]A^A_�߬�A�tmH�|$(�H��>H������H�@H�|$(H��t���H�l?�
���HcD$(H�l���H�D$8dH3%(�j���f��ZD$(�2���Hcl$(H�H������f.���SH��dH�%(H�D$1�H�0t H�D$dH3%(uOH��[�f.�H��H�W8H�w0H� H�����H��y�H�K H�vTH�5��H�$H�81�H)��A��謦�ff.����SH��H���o��H�{ t H�s0H��t/H�S8H��H��[���fD�H��[H�D�f.�H��H�D$�o�H�s0H�D$����SH��H��u#H��{TH�8��H��t#H��H�@[��D@��uH��a�H��u�1�[��H��t2H��t<��u��tJH��wTH�8�fDH�yrTH�8�@H�IxTH�8�@H�	tTH�8�p���f�H��vTH�8�X������AUA��ATI��USH��H��(dH�%(H�D$1�H����H��zTH�8��H��H��t
H��P��u'1�H�L$dH3%(���H��([]A\A]�@H��D��L��U�Ä�t�I�l$hH�-�UI�4$H�}��H�=l\U1�H�;�膰�H�}u�H�|$�E��@��u
H��[����H��t:H��tD��u��tJH��vTH�8�5���H�)qTH�8�#���f�H��vTH�8�����H��rTH�8����H�iuTH�8����H�|$H�t$��H�t$�<������f���ATUSH��dH�%(H�D$1�H�GhH��tkH�@H��H�/H��tH��H��Є�tPH�+L�%ƼUI�<$toH�=P[UH��t1�H���H���b��I�<$t;H�H�{0�k���@1�H�T$dH3%(u6H��[]A\�DH�|$���@H�|$�&�H�=�ZUH��u���#����S覱��H�sT1�H��H��ZU���H��H���3�H�qT�H�=Q�H����[H�pZU�f.�D���=S^UH�H�Ѓ��ff.����=2^UH�H�Ѓ��ff.���H�evT���ff.�����=�]UH�H�Ѓ��ff.���H�%vT���ff.����AWAVAUATUSH��8dH�%(H�D$(1��=�]U�wH��uT�;�gH�=)^U�YH�ܺUH��H�8���ڇ��w�I��fH�=*rTffH�"��H�H�B0H���M��L�hA�E�]UH�eoT�x�A�EH�D$H��}UD�#�L�8��~�H�$H��������?H9��H�D-H�D$ H�\]UH��u(H�-����H�����H�4]UH��t�H�=@]UH�L$ �H���^��H�<$��H��|U�=G]UL�8�DE�H��nT�xD�#tkfH�=#qTffH���H�T$H�H�@H�M��tgH���UH�8tjH�D$(dH3%(uyH��8[]A\A]A^A_�H�BH�H�H�L$������[UA�E�@H��������K���f�H�|$覄�@H�|$���2������ff.�����=t[U�_AWAVAUATUSH��H��sT�;�1H�=�[U�#�u�I��fH�=pTffH���H�H�B0H���?��L�hA�E�[UH�NmT�x��A�EH�D$H�l{UD�#�L�8��|�H�$H��ZUH��u&H�-�fD�H�����H��ZUH��t�H�=H[U1�1�H���l��H�<$���H�{U�=U[UL�8�DE�H��lT�xD�#tifH�=1oTffH�)��H�L$H�H�@H�M��uH��[]A\A]A^A_鲄�f�H��[]A\A]A^A_Ð��H�BH�H�H�L$������YUA�E�@��AWAVAUATUSH��(dH�%(H�D$1��=�YU�aH��qT�;�QH�=IZU�CH���s�I��fH�=`nTffH�X��H�H�B0H������L�hA�E�RYUH��kT�x�A�EH�D$H��yUD�#�L�8�"{�H�$H��������?H9��H�D-H�D$H��YUH��u&H�-`�fD�H���K��H�tYUH��t�H�=xYUH�L$�H��薕�H�<$�-��H�.yU�=YUL�8�DE�H��jT�xD�#tsfH�=[mTffH�S��H�T$H�H�@H�M��u���f.�H�D$dH3%(uMH��([]A\A]A^A_ÐH�BH�H�H�L$�����XUA�E�@H���������N��ff.���UH��SH��H����}�H����H��
���{
=��H���<�{=���{=���{=���{=�~H���2�{=���{
=uH�verify-cH9�H��jTH��H�5&�H�81��$��@H�trace-exH9�UH�dump-disH9u�f�{asu��{
mu��{�d�EH��[]���H��w7u��;statuj�{sud�{���E��@H�call-thrH9�U�{=u��;stat�|H�����lH�����H�������;trac�
����{e�����{�n�[�
���H��
���H�verify-cH9����f�{tx�����{
���EH��[]�@H�exec-memH9�K����{-siz�>����{e�4����{
uBH�qiTH�5J�H�81�蠣�H�exec-memH9����{-siz����{e����H�{�
1��&��EH��[]�@H�call-thrH9������{esho�����f�{ld������{��H�{�
1��ҋ�E�(���f.��;disatp�{=������;trac�v����{e�l���H�=�1��ʜ��E������;disa�>���f�{bl�2����{e�(���H�=��1�萜��fDf�{blu��{e�~����{u��E
����H�trace-exH9tq�{=�:������f��{esho�����f�{ld���������f�f�{tx����H�=��1�����
�����{s�z���H�=��1�����1���f�{itu��{
su�H�=3�1���E����f�{it������{
s������{t���H�SgTH�5T�H�81�股�����ff.�f����=tSUtH��kT�ETU�Ð��H��kT�8t��ff.�����=4SUt+H�|kT�8tH�=�SUtH��H�53���1��<�@����H�EkT�8t��ff.�����=�RUt+H�kT�8tH�=oSUtH��H�5��1��ܰ@����AWAVAUATUSH��XdH�%(H�D$H1��=vRU��H��jT�;��H�=	SU��H���UI��I����H�8�
�|�l�H�$fH�=gTffH�}�H�H�B0H���U��L�hA�E��QUH�?dT�x�UA�EH�D$H�]rUD�#�H�H�D$�s�H�D$H��������?I9��IK�D?H�D$0H��������?I9��K�D6H�D$8H�D-H�D$@H�RUH��u%H�-)�D�H���Â�H��QUH��t�H�=�QUH�L$0�H�����H�|$褫�H��qUH�L$�=�QUH��DE�H�FcT�xD�#tufH�=�eTffH��|�H�L$H�H�@H�H�<$tH�8�UH�8�~H�D$HdH3%(��H��X[]A\A]A^A_�H�BH�H�H�L$����rPUA�E�@L���{�����L���x{������z��w���fDH�|$,�6y�s����H�|$,�vw����|��ff.����AWAVAUATUSH��(dH�%(H�D$1��=�OU�AH�*hT�;�1H�=yPU�#���,j�I��fH�=�dTffH�{�H�H�B0H������L�hA�E��OUH��aT�x��A�EH�D$H��oUD�#�L�8�Sq�H�$H�D-H�D$H��OUH��u"H�-�f��H��蓀�H��OUH��t�H�=�OUH�L$�H���ދ�H�<$�u��H�voU�=�OUL�8�DE�H�aT�xD�#tkfH�=�cTffH�z�H�T$H�H�@H�M��u�2y�f�H�D$dH3%(u<H��([]A\A]A^A_ÐH�BH�H�H�L$�����RNUA�E�诒�ff.�@���=4NUtCH��8H��u�=�NU�\��@SH��H���\�=�NUH��8[�9��f��ff.�@���=�MUtH��u�D�3W����=�MUu�f�H��H�=mNU���H�=YNU���H�=ENU��H�=1NU���H�=eMU���H�=QMUH���Ж����ff.���SH��dH�%(H�D$1�H��������?H9�whH�D?H�$H��MUH��u$H�g:@�H���k~�H�tMUH��t�H�=�MU�H��H��踉�H�T$dH3%(uH��[�f���w�����@��AWAVAUATUH��SH��HdH�%(H�D$81�H��UH�8���v��f�I��fH�=EaTffH�=x�H�H�B0H������L�`A�D$�6LUH�^T�x��A�D$H�D$H�ddT��H��lUL�(�m�H�$H��������?H9��H�D-H�D$ H�OLUH��u#H�-&9�H���+}�H�,LUH��t�H�=hLUH�l$ �H��H���s��I��fH�=h`TffH�`w�H�H�xH��������?H9��vH�D?H�D$ H��KUH��u�H�=�8�|�H��KUH��t�H�=�KUH��H����L�t$ H�D$(H�sKUH��u'L�5����L���[|�H�LKUH��t�H�=�KUH��H��訇�H�<$�?��H�@kU�=�KUL�(�E�H��bT�H��\T�xtpfH�=h_TffH�`v�H�L$H�H�@H�M��t\H�էUH�8taH�D$8dH3%(��H��H[]A\A]A^A_�@H�BH�H�D$������JUA�D$M��u��t�H�t�UH�8u�H�|$��r�f��u����fDH���t���H�|$�q�G������ff.����AWI��AVAUATUSH��XdH�%(H�D$H1�H��UH�8�Z�sfH�=M^TffH�Eu�H��H�L�`��c�H�H�D$H�B0H������L�hA�E�+IUH�t[T�x��A�EH�D$H�ZaTH��iU�+L�0��j�H�D$H��������?I9���K�D$H�D$0H�,IUH��u L�%6�L���#z�H�IUH��t�L�d$0H�=SIU�H��L���k��L�|$0H�D$8H��HUH��u&L�=b�fD�L����y�H��HUH��t�H�=IUL��H�����H�|$I��諢�H��hU�=�HUL�0�E�H�SZT�x@�+��fH�=�\TffH��s�H�L$H�|$H�H�@H�tqH�@�UH�8tvA����L��H�H�L$HdH3%(��H��X[]A\A]A^A_��H�BH�H�D$�n�����jGUH�|$A�Eu���q�H�ʤUH�8u�H�|$,�Jp�{���DL���Xr��[���L���HP��i���H�|$,�fn����l��ff.����AWI��AVAUATUSHc�H��h�T$$dH�%(H�D$X1�H�=�UH�8���>qH��fH�=�[TffH�r�I��H�H�hH]�a�I�$H�D$H�B0H������L�pA�F�kFUH��XT�x��A�FH�D$(H��^TD� �H��fUH�H�D$�/h�H�D$H��������?H9���H�D-H�D$@H�VFUH��u*L�-U3f.��L���Sw�H�,FUH��t�L�l$@H�=�FU�H��L��蛂�|$$L�|$@H�D$HH�H�Ѓ�H�D$PH��EUH��u#L�=���L����v�H��EUH��t�H�=0FUL��H���8��H�|$I���˟�H��eUH�L$�=FUH��DE�H�u]TD� H�cWT�x��fH�=�YTffH��p�H�t$(H�|$H�H�@H�0t|H�S�UH)]H�8��A��tL��H�H�L$XdH3%(��H��h[]A\A]A^A_�fDH�BH�H�H�L$(�7�����rDUH�|$A�Fu��n��z���@H���xo��A���L���hM��z���H�|$<�6m�\����H�|$<�vk�^����|��ff.����ATUSH�IVT�o�G�S�C��u�C@�C��u�C
�{�l��H�DUH��u#H�-,� �H���u�H��CUH��t�H��H��TTH�8��N�H�5�CUH�WDUH��u-H�-���H����t�H��H��CUH��t�H�%DUH���[������1�H�5��1�����CU�������H�GCUH�-�H��u�H���kt�H�$CUH��t�H�=�CUH���0N�H��CUH��BUH��u&H�-ٽfD�H���#t�H��BUH��t�H�=xCUH����M�H��H��BUH��u"L�%�/f��L����s�H��BUH��t�1�1�H��H���8�H�CUH�bBUH��u&H�-Z�fD�	H���s�H�<BUH��t�H�=�BU1�1�H����~�H��BUH�BUH��u"H�-�f��H���Ss�H��AUH��t�H�=�BU1�1�H���~�H�uBUH��AUH��u*H�-�f.��H���s�H��AUH��t�H�=XBUH����L�{H�BUu�C
H��YT���[]A\�fD���H�4AU���H� AU��fD��H�5UfSH�=]��Y�f���H��� t4H��H�����H��tH��x
H9�}H���H�y��f.�H�WH� ��fD��H��@U��8�HE����1��f���H�GH�@ H�@�H�@p�ff.���H�GH�@ H�@�H��t#H����t1��H�H��H��
����H��HE�����H������@��H������@����fD���9�fD����fD����fD���
�fD���-�fD���%�fD���#�fD����fD����fD���	�fD���;�fD����fD���!�fD��H���������fD����fD���@�fD����fD����fD����fD�����fD����?�fD���A�fD�����fD����fD����fD���?�fD���)�fD����fD����fD����fD����fD���DD�fD������fD���""�fD����fD����fD���;�fD��H��=U�H�D�ff.�f����Q�fD���1�fD�����fD�����fD���q�fD�����fD����fD�����fD���A�fD�����fD�����fD����fD�����fD����fD�����fD����fD�����fD�����fD�����fD���	�fD���a�fD���A�fD����	�fD���
�fD����
�fD����fD�����fD����fD�����fD�����fD����fD���A�fD�����fD�����fD���A�fD�����fD����fD�����fD����fD�����fD����fD�����fD�����fD�����fD�����fD����fD�����fD�����fD���
�fD����
�fD����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD��� �fD���� �fD���!�fD����!�fD���"�fD����"�fD���#�fD����#�fD���$�fD����$�fD���%�fD����%�fD���&�fD����&�fD���'�fD����'�fD���(�fD����(�fD���)�fD����)�fD���*�fD����*�fD���+�fD����+�fD���,�fD����,�fD���-�fD����-�fD���.�fD����.�fD���/�fD����/�fD���0�fD����0�fD���1�fD����1�fD���2�fD����2�fD���3�fD����3�fD���4�fD����4�fD���5�fD����5�fD���6�fD����6�fD���7�fD����7�fD���8�fD����8�fD���9�fD����9�fD���:�fD����:�fD���;�fD����;�fD���<�fD����<�fD���=�fD�����fD�����fD�����fD����fD��H�=�H��������?H9�wH�D?���_�ff.���H�=?H��������?H9�wH�D?��_�ff.���H�=uFH��������?H9�wH�D?��{_�ff.���H�=�H��������?H9�wH�D?��K_�ff.���H�=�H��������?H9�wH�D?��_�ff.���H�=�H��������?H9�wH�D?���^�ff.���H�=H��������?H9�wH�D?��^�ff.���H�=E"H��������?H9�wH�D?��^�ff.���H�=E7H��������?H9�wH�D?��[^�ff.���H�=�H��������?H9�wH�D?��+^�ff.���H�=5�H��������?H9�wH�D?��]�ff.���H�=U�H��������?H9�wH�D?���]�ff.���H�=��H��������?H9�wH�D?��]�ff.���H�=��H��������?H9�wH�D?��k]�ff.���H�=e�H��������?H9�wH�D?��;]�ff.���H�=��H��������?H9�wH�D?��]�ff.���H�=��H��������?H9�wH�D?���\�ff.���H�=��H��������?H9�wH�D?��\�ff.���H�=e�H��������?H9�wH�D?��{\�ff.���H�=��H��������?H9�wH�D?��K\�ff.���H�=�H��������?H9�wH�D?��\�ff.���H�=��H��������?H9�wH�D?���[�ff.���H�=�H��������?H9�wH�D?��[�ff.���H�=�PH��������?H9�wH�D?��[�ff.���H�=�CTH��������?H9�wH�D?��[[�ff.���H�=��H��������?H9�wH�D?��+[�ff.���H�=H��������?H9�wH�D?��Z�ff.���H�=�ATH��������?H9�wH�D?���Z�ff.���H�=�a
H��������?H9�wH�D?��Z�ff.���H�=��H��������?H9�wH�D?��kZ�ff.���H�=MGTH��������?H9�wH�D?��;Z�ff.���H�=U�H��������?H9�wH�D?��Z�ff.���H�=��H��������?H9�wH�D?���Y�ff.���H�=EETH��������?H9�wH�D?��Y�ff.���H�=�IH��������?H9�wH�D?��{Y�ff.���H�=�DTH��������?H9�wH�D?��KY�ff.���H�=uCTH��������?H9�wH�D?��Y�ff.���H�=�ETH��������?H9�wH�D?���X�ff.���H�=u>TH��������?H9�wH�D?��X�ff.���H�=�>TH��������?H9�wH�D?��X�ff.���H�=DTH��������?H9�wH�D?��[X�ff.���H�=%rH��������?H9�wH�D?��+X�ff.���H�=�DTH��������?H9�wH�D?��W�ff.���H�=�@TH��������?H9�wH�D?���W�ff.���H�=ue��H��������?H9�wH�D?��W�ff.���H�=�a��H��������?H9�wH�D?��kW�ff.���H�=]@TH��������?H9�wH�D?��;W�ff.���H�=U@TH��������?H9�wH�D?��W�ff.���H�=]>TH��������?H9�wH�D?���V�ff.���H�=>TH��������?H9�wH�D?��V�ff.���H�=E�H��������?H9�wH�D?��{V�ff.���H�=E#H��������?H9�wH�D?��KV�ff.���H�=m@TH��������?H9�wH�D?��V�ff.���H�=%	H��������?H9�wH�D?���U�ff.���H�=�2H��������?H9�wH�D?��U�ff.���H�=H��������?H9�wH�D?��U�ff.���H�=�H��������?H9�wH�D?��[U�ff.���H�=e�H��������?H9�wH�D?��+U�ff.���H�=�rH��������?H9�wH�D?��T�ff.���H�=�E�H��������?H9�wH�D?���T�ff.���H�=�<TH��������?H9�wH�D?��T�ff.���H�=e�H��������?H9�wH�D?��kT�ff.���H�=uC�H��������?H9�wH�D?��;T�ff.���H�=�9TH��������?H9�wH�D?��T�ff.���H�=�>TH��������?H9�wH�D?���S�ff.���H�=-BTH��������?H9�wH�D?��S�ff.���H�=e�H��������?H9�wH�D?��{S�ff.���H�=m?TH��������?H9�wH�D?��KS�ff.���H�=U?TH��������?H9�wH�D?��S�ff.���H�mHUH�8H��������?H9�wH�D?�D��R���H�<TH�8H��������?H9�wH�D?�D�R���H�]:TH�8H��������?H9�wH�D?�D�R���H��<TH�8H��������?H9�wH�D?�D�SR���H��@TH�8H��������?H9�wH�D?�D�#R���H��=TH�8H��������?H9�wH�D?�D��Q���H��7TH�8H��������?H9�wH�D?�D��Q���H�%=TH�8H��������?H9�wH�D?�D�Q���H�]@TH�8H��������?H9�wH�D?�D�cQ���H��;TH�8H��������?H9�wH�D?�D�3Q���H�=9TH�8H��������?H9�wH�D?�D�Q���H�=8TH��������?H9�wH�D?���P�ff.���H�GH�@ H�x�H��������?H9�w	H�D?��P���H�=�!UH��������?H9�wH�D?��{P�ff.���H�=�&UH��������?H9�wH�D?��KP�ff.���H��H�VH�vH� tH�p�[�ff.�@��ATUSL�gL9ft1�[]A\��H��H����n��t�H�}H�E tH�}H�sH� tH�sH9�tL���q��u���fD��H��� tH�����M��H�W�M����H��H�w H���-ff.�f���AUATI��USH��H��hH�odH�%(H�D$X1�fH�=�8TffH��O�H�H9h����H��裑I��H�E H����H��UU����I�E���������H��蛊H�S0H���O��H�r�F@uDH�-}GTf�}��H�SH�BL� H��H�BH�D$XdH3%(��H��h[]A\A]�I�MI�UH��H�}I�E H�I L�CH�T$(1�H�|$H���$@H�\$L�D$H�L$ H�D$0L�d$8H�D$H$�D$@�h�V���f.�I�EI�u H��H��H�P �i*���?�����9����g�fD��AWAVAUATUSH��H��������L�gI��Mc<$L��M���W��H��E��~2I��A��O�l��	fDH��I�T�I�t�H���:�H�CI9�u�H��H��[]A\A]A^A_���H�GH�@ H�p�H�x��'c����H��H�GH�@ H�x��H��������?H9�wH�DH���fDH��H����L�ff.����H��H�E1�I�@H�H��H��I�H��H��������I�L9ȸL�rH��H�D6�fDUH��]�&��fD��H��H�GH�@ H�x���z�H��������?H9�wH�DH���fDH��H���<L�ff.����H�GH�@ H�@�H��uH��:TH�èuH�@��H��t*H��t4�u<t<H�U7TH�ÐH��1TH��DH��7TH��DH�q3TH��DH�)6TH��D��SH�GH�@ H�X��t"H�t9H�CH��t0���<t&1�[�fDH���`)�H��tH���S)�H�xu�[�DH���8)�H�@�f���H�GH�@ H�@�tH���H���)����H��H�GH�@ H�x�@��tH���H��H�H�D�f���(�H����fD��H��H�GH�@ H�x�@��t>H�@��tH�� H�D?H����H��������?H�H9�v�H���lJ�@�c(�H���ff.���H��H�GH�@ H�x�@��t6H�H����tH���fDH��������?H�H9�vH���J�@�'�H����H�H�G��ff.�f���H�GH�@ H�@�tH��t-��H�D�@H��H���'�t��H�DH����@���@��ff.���H�GH�@ H�@�tH��t=H��%�H�D��H��H���D'�t H��%�H�DH���fD�@ ���@ ��ff.���H�GH�@ H�x�@��t"H��������?H�H9�wH�D?�f���H�H����&�H��H��������?H9�w
H�D?H���H���H����H��H�GH�@ H�x�@��t6H�H��������?H� H9�wH�D?H���fDH���WH���K&�H����fD��H��H�GH�@ H�x�@��t6H�辊H��������?H9�wH�DH���DH��H����G�@��%�H����fD��SH�GH�P H�B�H�Z�tH��H#[HE��fDH���%�H#[HE��f.���H�GH�@ H�x�@��tH�H�H���>H���f�H���W%�H�H��H���>H���D��H�GH�@ H�x�@��t*H��H��u�@H�����HE���H���$�H�ǸH��u
H���DH�����HE�H���ff.����H�GH�@ H�x�@��tH�H�H����H����H���$�H�H��H����H���@��SH�GH�@ H�p�H�X�@��tH�H���:/�[��H�H�Ѓ��@H���0$�H����ff.���SH�GH�@ H�p�H�X�@��t5H�H���J�H��������?H9�wH�D[�@H��[��E��H����#�H�����H��H�GH�@ H�x��,�H��������?H9�wH�DH���fDH��H���|E�ff.����H�GH�@ H�x��k|�ff.���H��dH�%(H�D$1�H�GH��H�@ H�p�H�x�H�$��[��H�$H�L$dH3%(uH����:^�f.���H�GH�@ H�x��[�ff.���H��H�GH�@ H�x�@��t6H��NVH��������?H9�wH�DH���DH��H���D�@�{"�H����fD��H�GH�@ H�x�@��t
H��bk�f�H���G"�H��H���Kk�ff.���H��H�GH�@ H�@�H�xH� tH�x�f���H���ff.����H�GH�@ H�x�@��t
H���\�f�H����!�H��H����\�ff.���H��H�GH�@ H�x���D���W�H��������?H9�wH�DH����H��H���dC�@��USH��H�GH�@ H�x�H�X��D�H���tIH�1�H��t#H�؃�u'H��������H9պHD�H��[]�DH��1�[]��H���� �H�����SH�GH�@ H�X�H�x��D�H��t1��tGH��taH��tKH��$te���u����D�9¸�HE�[�f�H���������f���f���f���H��H�GH�@ H�x�@��t6H��~�H��������?H9�wH�DH���DH��H����A�@���H����fD��H�GH�@ H�x��[S�ff.���H�GH�@ H�x��5�ff.���H��H�GH�@ H�x�@��tH���1�H����H�D�f��[�H����fD��ATUSH�GH�@ H�h�H�X�L�`�@��tVH���t>H�H��H��L���E�
H��������?H9�w[H�D]A\�@[H��]A\��@�@H�����H���H�����H���ff.���SH�GH�@ H�p�H�X�@��t5H�H���z�H��������?H9�wH�D[�@H��[�w@��H���h�H�����H��H�GH�@ H�@�H�xH� tH�x��f�H��������?H9�wH�DH���DH��H���@�ff.����H�GH�@ H�x��V�ff.���H��H�GH�@ H�x�@��tH���<H�H��H�Ѓ��fD��H����ff.���H��H�GH�@ H�x�@��tH�讐<H�H��H�Ѓ��fD�S�H����ff.���H�GH�@ H�x��kj�ff.���H��H��H�=^�$�H���ff.�@��USH��dH�%(H�D$1�H�GH�@ H�x�H�X�@��tPH��8R�H���tUH��H�H�T$H����
���t	�D$H�TH�L$dH3%(H��u*H��[]�k�H����Q�H���u�H���S�H����W�f���H����
H��H�H�D����H��H�GH�@ H�x�@��tH��>�H����H�D�f����H����fD��H��H�GH�@ H�x�@��tH��ގ<H�H��H�Ѓ��fD��H����ff.���SH�GH�@ H�x�H�X��>�H�߉����H��������?H9�w
H�D[�fDH��[�G=����USH��H�GH�@ H�h�H�X�@��t(H���t0H�H��H���z\�H����[]H�D�@H�����H���u�H�����H����ff.����wU����UH��SH����t.H��H�H����=�H�ߺ�����H�H����[]ÐH���x�H������USH��H����tFH�H��H���=�H��1���uH��[]ÉۺH��H���N��uH���[]�fDH����H����V,�8�D�H��H��H�=�H��1��B����ATU���SH���x-�H�5��1�H��H��H����t)�H�L������
�H��@L9�sLE1�1�A������"H��H����o�H���t�H��H��H��H�D$���H�D$H��[]A\�fD1�E1�A���"H��1��o�H���H���u�H�=ŏ�i��c+�8u
�� ���ff.�@��H��H�GH�@ H�x��<����H��������?H9�wH�DH����H��H���:�@��H��H��H�H�H9�uH���uH�@��X��H�H��H��~H��?H�H���HE�H�D�f.�H��H�H��„�HE�H�D�f.�����fD�����fD����fD�����fD�����fD�����fD���a�fD���	�fD�����fD����fD�����fD����fD�����fD�����fD�����fD���1�fD���Q�fD����fD����fD����fD����fD����fD�����fD���A�fD���@�fD����fD����fD���!�fD����fD���	�fD����fD����fD���
�fD����fD����fD��1��f���1��f���H������@����fD����fD����fD����fD����fD����fD����fD����fD����fD����fD���	�fD���@�fD���@�fD����fD����fD����fD����fD����fD����fD����fD����fD����fD���9�fD����fD����fD����fD���A�fD����fD���A�fD����fD��H���������fD���	�fD����fD����fD����fD����fD���	�fD���A�fD�����fD����fD���
�fD����fD����fD����fD����fD����fD�����fD����fD����fD����fD���	�fD����fD����fD����fD����fD����fD����fD����fD����fD����fD���1�fD����fD����fD�����fD����fD����fD���!�fD����fD�����fD���A�fD����fD���!�fD���!�fD����fD�����fD����fD���Q�fD����fD����fD���!�fD���!�fD����fD����fD�����fD����fD���A�fD����fD���!�fD���!�fD����fD�����fD����fD���!�fD����fD�����fD���Q�fD����fD�����fD����fD�����fD����fD���!�fD����fD�����fD���!�fD���!�fD����fD�����fD���A�fD���1�fD����fD�����fD���1�fD����fD�����fD����fD���!�fD����fD�����fD���Q�fD����fD�����fD����fD�����fD����fD���Q�fD����fD�����fD����fD�����fD����fD���Q�fD����fD�����fD����fD�����fD����fD����fD����fD����fD���Q�fD����fD�����fD����fD�����fD����fD����fD����fD���A�fD�����fD���1�fD����fD�����fD����fD����fD����fD�����fD����fD�����fD����fD���Q�fD����fD�����fD����fD�����fD����fD����fD�����fD����fD�����fD����fD�����fD����fD����fD����fD����fD�����fD����fD�����fD����fD���A�fD�����fD���	�fD����fD���A�fD�����fD�����fD����fD�����fD�����fD����fD�����fD����fD����fD����fD���	�fD���Q�fD����fD�����fD����fD�����fD����fD����fD����fD���a�fD����fD�����fD����fD�����fD�����fD����fD���A�fD����fD���A�fD�����fD�����fD����fD�����fD���Q�fD����fD�����fD����fD���!�fD���!�fD����fD�����fD���!�fD����fD�����fD�����fD���!�fD����fD�����fD���1�fD����fD�����fD����fD���1�fD����fD�����fD����fD���1�fD�����fD����fD�����fD���Q�fD����fD�����fD����fD�����fD����fD���!�fD����fD�����fD����fD����fD���A�fD���Q�fD����fD���)�fD����fD�����fD����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD�����fD����fD�����fD����fD�����fD�����fD�����fD����	�fD���
�fD����
�fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD���A�fD�����fD����fD����fD����fD�����fD���
�fD����
�fD����fD���A�fD�����fD�����fD����fD�����fD�����fD���1�fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD�����fD����fD��SH�GH�@ H�x�H�X�@��t=H�H��t��t1�H��[ÐH�1�H�ƒ�H��t�H��H!øHE�H��[���H���ff.���H�H�H��H9�u�H���u�H��H�H��H��~H��H��?Hք�HD�H�D6�DH���������USH��H�GH�@ H�x�H�h�@��t8��H��TUH�H����Bt&��!Ã�H�H����[]���.��Ɛ�.���f���USH��H�GH�@ H�X��U�H�߃�H��t*�5�H�H�|�H��������?H9�wH��H�D?[]��-���f�H��[]�!�D��AWAVAUATUSH��dH�%(H�D$1�H9���H��I��I��H��I��L�%���
DL�H9�t|H���#�1�H���J�H��t��u�H�%�H=pu�H��輨��H�$H��TH��u@�L���['�H��TH��t�L���H��L���2�L�H9�u�1�H�T$dH3%(uH��[]A\A]A^A_��9�ff.���ATUSL�gL;ft�[]A\�@H��H���u?��t�H�}H�E tH�}H�sH� tH�sH9�tL���QB��1���u���1��ff.����AWAVAUATUSH��HH���TH�H��� ��H����Hc�\$0��H��H�D$��H��H�$��H�D$�b�H�D$����E1�f�H���TH�H� �IH��Ic�H�<�@���$���H��H�M�TA��H�H� �2H��H�<�@�����Hc�E�gIc�H��������?E��H9���H�D?H�<$H���jS�H�|$H�t�[S�E���@A�,�l$8�D$4D�|$<�H���TH�H� �IH��Mc�J�,�H��������?H9��L�d-H�|$L���I�H������R�8�H��H����O�H��H�D$(��U�H��I���U�H�D$ I����H�w�TH��u#H�-��!�H���$�H�T�TH��t�H���OE�H�T$(H��H���_�H�(�TH��u$H�-Z@�H���[$�H��TH��t�H���E�L��H��H����H���TH��u&H�-�rfD�H���$�H���TH��t�H���D�H��H����
�H���TH��u$H�-Fr@�
H����#�H�d�TH��t�H���wD�H��H���
����H��H�0�TH��u �H�=�q�#�H��TH��t�H���+D�H��H��H���=
���H��H���TH��u&f��H�=Y�/#�H���TH��t�H����C�H��H��H����	�H�|$ tJH���TH��u&f��H�=��!��"�H�`�TH��t�H���C�H�T$ H��H���	�H�|$H��L���	�H�$�TH�H� �tH��J�<�H��������?H9��IH�D?H�<$H���XP�H���TH�H� �qH��J�4�H�|$A���+P�D;t$4���D�|$<�D$8E�tH���TH�H� ��H��Ic�H�<$H�4���O�H�h�TH�H� ��H��H�4�H�|$A�^�O�H�C�TH�H� �SH��Hc�H�<$H�4��O�H��TH�H� �H��H�4�H�|$E�~�bO�D9|$0�W���H�0�TH��u$H��o@�H���C!�H��TH��t�H����A�H�$H�|$H����H���TH��u#H��V�H��� �H���TH��t�H���A�H�T$H�|$H����H���TH��u"H�Dof��H��� �H�l�TH��t�H���_A�H�\$H�T$H��H���j�H��HH��[]A\A]A^A_��H�@ ����H�@ ����H�@ �k����H�@ �0����������fDH�@ ����H����H�I���:���H����I������H�@ ����H�@ �����{��@���fD�K%�H������H�@ �����+%����fDH�@ �����H�X�&������AWAVAUATUSL��$���H��H�$L9�u�H��(dH�%(H��$`1�H�T�8u.H��$`dH3%(��H��(`[]A\A]A^A_�DH�?L��$ �x����@1�L��Lc��f��1�H�|$L����H�H�L$1��c�L�%,�THc�I�<$�MH��� ��H��Hc�]�����)�H�OH9�|Hc�H�����H�l-Lc�H���ML�L�-��TH��I�}�:L��y	�3@Lc�J��� I�<$��Jcl��L�I�}H�t-�L���u�I�<$K�t6��K�I�}H��� ��H������H�H�t��K�I�<$��K�I�}��K����@H�WHc��]�H9��8���)�H�O Hc�H����#���H�ljT$�t�I�<$�T$9�����L�M��A�� ��xtLc�L�O�BK�L�D�l�D��H��A9�tML�L��M��uH�W Hc�L;�t�H�l-H���K�L�-��TH��I�}��J������H�G����M��tVL��H��H������Hc�H�<�@��tG�
��I�<$H��H�H�lH���n��H��TH��H��H�8�Y���n����GH� �X�Hc���"���i/�f���H�5ESH�=�j�)Df�SH��H��#@�H��[�@�f.���H��H�G��H�GH�7�G����������o��H�P���Hc�H�>��H�0�H���H���H���H�݃�H�Ƀ�H����H����H����H�w��H�e��H�T��H�?��H�*��H���H���H���H�߂�H�͂�H����H����H����H����H�o��H�[��H�G��H�3��H� ��H�
��H����H���H�ԁ�H��H����H����H����H�l��H�W��H�C��H�.��H���H���H���H���H�π�H����H����H����H����H�t��H�]��H�G��H�4��H���H���H���H���H���H���H���H���H���H�p�H�^�H�L�H�9�H�%�H��H��H��~�H��~�H��~�H��~�H��~�H��~�H�z~�H�h~�H�R~�H�:~�H�!~�H�~�H��}�H��}�H��}�H��}�H��}�H��}�H��}�H�o}�H�_}�H�N}�H�:}�H�%}�H�}�H��|�H��|�H��|�H��|�H��|�H��|�H��|�H�z|�H�g|�H�T|�H�D|�H�2|�H�|�H�|�H��{�H��{�H��{�H��{�1��ff.�f���H�����A���H����j�H�����AUATUH��1�SH��L�/I�]L�CH�s(H�{J�H��H��H)кH9�HD�J�TH�H9�w4H�K I�H�SH�SJ�H�rH�sH��H��[]A\A]�f.�L�$?�(�L�����L��L�`H��H��H�@H��H�@���L�CH�s(H�C H��I�EJ�TH�I�]�r���ff.�@��UHc�H��SH�<�H��H����H�UH�JH�H�BH���H��[]�@��UHc�H��SH�4�H��H��H�H�x��0�H�UH�BH���H��[]�@���ff.���U�HSH�����H�@0H��H�h H�@8H�@(��� �H�+H�kH�C@H�C H�CH�C���H�H��[]����L�� H�M����I�I�pH9���1�DH�JH�H�D(H9�u�H��@I�PI�pH��tfDHcJH�H�D�H��u�H��t3H�NH�� H��~&H�VH�4�DH�
H��H�IH�IH�DIH9�u�H��t/H�OH�� H��~"H�WH�4�DH�
H��H�IH�D!H9�u�ø@�e�����H���AWAVAUATUSH��L�'M���EH�oH�|$H��tGH�}H�E~$1�fDH�<�H��t	���H�EH��H;]|�H����8�H���8�H�D$L� H�D$M�t$H�@M��tGI�~I�~~/1�H�,�H��tH�}H��t�I���H���q8�I�~H��I;^|��^8�L���V8�I�$H����L�=�~f�L�s1�M�����H�C H��H�H������8��6woIc�L�>��@H��DH�x �7�I�|$H��tDH���7�H��H��u�L����7�H�D$H�H��[]A\A]A^A_�DH�x �7�H��I9��j���H�H���N���I�$I9\$�w����H�{ �o7�H��H�+�d7�I�D$H��H9�u��R���f�L�h I�}�C7�L���;7��f�H�x H��t����v���D����SH���B�H��[�6�f.���H�H������H	�H��DH��u�H�5F �z�f.�ATUH��H��SH����I��H��t&H��H�5�y��B�[L��H��]A\�4�H��H��[1�]H�5}A\�X#����H��t@��t	�L�@H���H��w�H��t�SH����H�H�у�H��t[��� t�H��H�=] 1�[��3�f�AWAVAUATUH��SH��H��8dH�%(H�D$(1�H����I��A����3�M�.H�
JH�7[ E�^E�NA�ŀL��E�~HE�A�NH��D�\$��D�L$H�D$A�F�L$�$�2�H�T$M��H��I��H�5X�RD�\$H��1�ASD�L$ AQAWD�L$ �L$(�"�M�>H�� I��A��A��o��\H�
��D��Hc�H�>����3�H�5|H�����H�D$(dH3%(�C�H��8[]A\A]A^A_�H��H��E���L��2�H�
%�H�5�|H��1��t!�L���,6�H������H��H���2�H�5y H�����x���E���o���H��H���\2�	H��H�5[����H��H���=2�H��H�5F���H��H���2�H�5@�H�����
���H��H��E������1�H��1�H�
T�H�5V{� �H�5!�H�����I�N 1�H��H�����H�EH��H�p��T)�H��H���1�H��1�H�
��H�5�{�L �I�v(H���p����H�5x H�����H��H���Q1�H�
+�H��H�5�z1�� �H��H�5V��E��I�N0H��H��D������H�EH��H�p��(�����E�����H��H����0�H��1�H�
�H�5�z��L�����H���=���H��H���0�H�5Ew H���.�I�~0�����H��H���0�H��1�H�
W�H�5�y�;�H�5��H���|��I�F01�H��H��H�H �7���H�EH��H�p���'�H��H���,0�H�
@�H��H�5�y1����H��H�51�� ��I�F0H��H��D��H�H0����H�EH��H�p��'�����H��H��E�����/�H�
�H�5�yH��1��t�L����H������H��H���/�H�5v H�����x���H��H��E�����\/�H�
y�H��H�5�x1���H��H�5a��P��I�N H��H��D������H�EH��H�p��&�����H��H��E���L��.�H�
ՌH��H�5\x1���H��H�5������I�N H��H��D�����H�EH��H�p��W&����E�������H��H���.�
H��H�5���
�H��H���o.�H��H�5�����H��H���P.�H�5��H������?���E���6���H��H���#.�H��H�5y���H��H���.�H��H�5w���H��H����-�H�5u�H���a�����E������H��H���-�	H��H�5���4�H��H���-�H��H�5����H��H���z-�H�5��H�����i���H��H��E������M-�	H��1�H�
ČH�5�v��H�5}�H���A��I�N 1�H��H������H�EH��H�p��$�I�~(��R�H��H����,�H�
V�H�5TvH��1���H�5�H������I�N(H��H��D�����H�EH��H�p��L$�H��H���,�E�����H�
j~�H��1�H�5�u�;�H�5��H���|��I�N0D��H��H���:���H�EH��H�p���#�I�~8��7�H��H���$,�"H�
��H��H�5�u1����H��H�5)����I�N8H��H��D������H�EH��H�p��#�����H��H��E���߂�+�	H��1�H�
4�H�5"u�p�H�5�H�����I�N 1�H��H���p���H�EH��H�p�� #�H��H���e+�
H��1�H�
\�H�5�t��H�5��H���Y��I�N(1�H��H������H�EH��H�p���"�I�~0����H��H���+�
H�
�H��H�5it1���H��H�5����I�N0H��H��D�����H�EH��H�p��d"����H��H��E���ǂ�*�	H��1�H�
�H�5tA��H�H�5ŬH�����I�N 1�H��H���H���H�EH��H�p��!�H��H���=*�H�
ӉD��H��1�H�5�s���H�5o�H���3��I�N(D��H��H����H�EH��H�p��!�I�~0�H��H������)�D��H��1�H�
��H�5Bs��H�5
�H������I�N0H��H��D�����H�EH��H�p��?!�H��H���)�A��H��H�
E��H�5�r1������0�H��H�5���q��I�N8H��H��D���/���H�EH��H�p��� ��2���H��H��E���
��)�H�
��H��H�5}r1����H��H�5��
��I�N H��H��D�����H�EH��H�p��x �����E������H��H���(�2H�5�H���+����E�������H��H���(�H��H�5K��
�H��H���c(�H��H�55���
�H��H���D(�H�5*�H���
��3���H��H��E������(�H�
τH��H�5r1����I�V H��1�H�59n��H�5xn H���a
����E�����H��H���'�H��1�H�
3�H�5q�k�H�5�H�����I�N 1�H��H���k�H�EH��H�p���H��H���`'�H�
܃H��H�5�p1���H��H�5e��T��I�N(H��H��D����H�EH��H�p������E���A���H��H���&� H�5��H���u	�H��H����&�H�5.�H���V	�H��H���&�)H�5��H���7	�H��H���&�H��1�H�
�H�5p�O�H�5̨H�����I�N D��H��H���N�H�EH��H�p���H��H���C&�����E���m���H��H���%&�H��H�5����H��H���&� H��H�5����H��H����%�H�5O�H���c��'���E������H��H���%�H��H�5��6�H��H���%�H��H�5���H��H���|%�H�5сH�������H��H��E�����O%�H�
K�H��H�5@o1���I�v H���&�H�5�k H������H��H��E���kv�$�H��1�H�
�H�5�n��I�v(H������H�5ck H���L�H��H���$�H�
ĀH��H�5n1��d�H��H�5�}���I�N H��H��D���c�H�EH��H�p����f�H��H��E����r�J$�H��1�H�
�tH�5�m��H�5z�H���>��I�N 1�H��H����H�EH��H�p���H��H����#�H�
��H��H�5Ym1���H��H�5�|����I�N(H��H��D����H�EH��H�p��T���H��H��E����v�#�H��1�H�
B~H�5zm�>�I�v H���b��H�5�i H�����H��H���C#�H��1�H�
~H�52m��I�v(H�����H�5�i H����H��H���"�H��H�
�lH�5�l1���A�V0A�N4H��E�N<E�F8H�5�l1���H�5Pi H���9���H��H��E������"�A�D��H�
�}H��1�H�5�k�?�H��H�5�����I�N D��H��H���>�H�EH��H�p����H��H���3"�D��H��1�H�
�}H�5�k���H��H�5b��)��I�N0D��H��H�����H�EH��H�p���H��H����!�A��H��H�
^}�H�5Bk1�������H��H�5�z����I�N(H��H��D����H�EH��H�p��7���H��H��E����s�n!�H��1�H�
�qH�5�j�!�H�5��H���b��I�N 1�H��H���!�H�EH��H�p����H��H���!�H��1�H�
&{H�5k���I�v(H������H�5�g H���i�H��H���� �H�
�zH��H�55j1���H��H�5�y����I�N0H��H��D����H�EH��H�p��0���H��H��E���po�g �H��1�H�
|H�5�i��H�5��H���[��I�N 1�H��H����H�EH��H�p����H��H��� �H�
�{H��H�5vi1����H��H�5y���I�N(H��H��D����H�EH��H�p��q����H��H��E�������A�D��H�
"zH��1�H�5	i�W�H��H�5ѡ���I�N D��H��H���V�H�EH��H�p���H��H���K�D��H��1�H�
�yH�5�h��H��H�5z��A��I�N(D��H��H����H�EH��H�p���H��H�����A��H��H�
�h�H�5�h1�����
�A�V0A�N4H��E�N<E�F8H�5�h1��
�H�5Be H���+���H��H��E����r��	H��1�H�
�yH�5�g�5
�H�5�wH���v��M�~ A�7����H��H���;�H��1�H�
�H�5*h���I�WH��1�H�5�����H�5�d H����I�GH���L�E��H�
&gH�GE HE�H�
 �E1�H�$H�T$H��H��H��L9�H��vHE$H�$��H�T$L��H��H�5�x1��U�H�4$H�����I�GD��H��H��J��I���O�H�EH��H�p���I�GL9��H�EH��H�p����H��H���+�A��҃��H��H�

gH�5g1����A�V(A�N,H��E�N4E�F0H�5�f1���H�5yc H���b�����H��H��E���w��H��1�H�
�vH�5�f�l�I�v H�����H�5#c H�����H��H���q�H�
�vH��H�5�e1��$�H��H�5vu�e��I�N(H��H��D���#�H�EH��H�p�����&�H��H��E���n��
�
1�H�
ďH�5�eH���
�A�F0�y�H�5�uH���^��H�5fb H�ߺ�J��H��H����E���ttH�
�|�H��1�H�5e�Y
�H�5֝H�����I�N D��H��H���X�H�EH��H�p���H��H���M�H��1�H�
�|H�5�d�
�H�5}�H���A��I�N(D��H��H����H�EH��H�p���H��H�����H��H�
�kH�5�d1��	�A�V4A�N8H��E�N@E�F<H�5�d1��	�H�5Ia H���2����H��H��E����}��1�H�
{�H�5{dH���<	�A�Fh��w�H�5>tH�����H�5�` H�ߺ���H��H���.�E����iH�
���:H��1�H�5d���A�V0H��1�H�5G`���H�5�` H���o��H��H�����5H��1�H�
��H�59c��H�5�H������I�N D��H��H����H�EH��H�p��6�H��H���{�:H��1�H�
b�H�5jc�.�A�V4H��1�H�5�_��H�5�_ H�����H��H���*�5H��1�H�
Q�H�5�b���H�5Z�H�����I�N(D��H��H�����H�EH��H�p���H��H�����-H��1�H�
0�H�5�b��I�v8H�����H�5;_ H���$��H��H����!H�5�bH�
��H��1��<�I�v@H����uH���V�H�5�^ H�ߺ���H��H���7�E���keH�
/��#H��1�H�5b���I�vHH�����H�5�^ H����H��H�����&H��1�H�
�H�5Ka��H�5�H������I�N`D��H��H����H�EH��H�p��H�H��H����$H��1�H�
ԕH�5�`�@�H�5��H�����I�NPD��H��H���?�H�EH��H�p����H��H���4�,H�
��H��H�5�`1����H��H�59p�(��I�NXH��H��D�����H�EH��H�p������E�����H��H�����&H�5Q�H���I��H��H����H�5�mH���*��H��H����H�5;�H�����H��H���p�H��1�H�
�wH�5_`�#�L�����H�����H��H���8�H�5�\ H����I�~0�!�H��H���� H��1�H�
ݓH�5s_��H�5>�H�����I�F0D��H��H��H�H ��H�EH��H�p��l
�H��H����"��H��H��E����u��H�
�kH�5�_H��1��F�L�����H�����H��H���[�H�5�[ H������J�E���{I�~ ���qH��H���#�H�
tH�5_H��1����6H�5�}H����H�5�[ H���n��H��H�����A��H��H�
�s�H�59^1�������H��H�5�m���I�N(H��H��D���~�H�EH��H�p��.���H��H��E���|�e�H�
�_H��H�5�]1���H��H�5jm�Y��I�N H��H��D����H�EH��H�p������E����H��H����'H��H�57��z��H��H�����H��H�5k�[��H��H����H�5$�H���<���,���H��H��E����h��H��1�H�
�lH�5�\�F�H�5ÕH�����I�N 1�H��H���F��H�EH��H�p��
�H��H���;�H�
�lH��H�5�\1����H��H�5@l�/��I�N(H��H��D������H�EH��H�p��
�����H��H��E����z���A�D��H�
�kH��1�H�55\��H��H�5������I�N D��H��H�����H�EH��H�p��2
�H��H���w�D��H��1�H�
�kH�5�[�,�H��H�5~k�m��I�N(H��H��D���+��H�EH��H�p���	��.��H��H��E��� w��H�
�]H��H�5y[1����H��H�5k���I�N H��H��D������H�EH��H�p��t	�����H��H��E���"z��A�D��H�
]H��1�H�5[�Z�H��H�5ԓ���I�N D��H��H���Y��H�EH��H�p��		�H��H���N�D��H��1�H�
pH�5�Z��H��H�5Uj�D��I�N(H��H��D�����H�EH��H�p������E���{H��H�����H�
|hH�5�ZH��1���L������H���<��H��H����H�5DW H���-�����H��H��E���j��H��1�H�
(jH�5�Y�7��H�5��H���x��I�N 1�H��H���7��H�EH��H�p����H��H���,�H��H�
�`H�5Z1����A�V(A�N,H��E�N4E�F0H�5Z1���H�5�V H���j������E������H��H����&H��H�5���=��H��H����H��H�5�f���H��H����H�5��H��������H��H��E����t�V�A�D��H�
�ZH��1�H�5�X���H��H�5��F��I�N D��H��H�����H�EH��H�p���H��H����D��H��1�H�
�mH�5`X��H��H�5h����I�N(H��H��D�����H�EH��H�p��]����H��H��E���Y��H�
@oH�5�XH��1��G��L�����H������H��H���\�H�5�T H�������K��E���F���H��H���/�H�5[eH�����H��H����H�5PeH�����H��H����
�H�5GeH���m��H��H����
����H��H��E���rH�
�H��1�H�
^H�5WA��a��H�5ޏH�����I�N 1�H��H���a��H�EH��H�p���H��H���V
�H��1�H�
�]H�5EW�	��I�v(H���-���H�5�S H�����H��H���
�H��1�H�
�]H�5sV��H�5>�H�����I�N01�H��H�����H�EH��H�p��q�H��H����	H��1�H�
O]H�5V�i��H�5�H�����I�N81�H��H���i��H�EH��H�p���H��H���^�H��1�H�
]H�5MV���A�NDE�NLH��E�FHA�V@H�58V1����H�5�R H�����H��H����D��H��H�
�\1�H�5�U��E�N\E�FXH��A�NTA�VPH�5�U1���H��H�5UR �A��H��H����D��H��1�H�
%WH�5�U�[��E�NlE�FhH��A�NdA�V`H�5�U1��:��H��H�5�Q ����H��H���K�A��H��H�
\�H�5;U1������A�VpA�NtH��E�N|E�FxH�5U1����H�5�Q H��������H��H��E����G��
�H��1�H�
�ZH�5�T��I�v H������H�5CQ H���,��H��H���
�H�
�YH��H�5�S1��D��H��H�5�c���I�N(H��H��D���C��H�EH��H�p�����F��H��H��E����w�*
�H�
�^H��H�5�S1����H��H�5/c���I�N H��H��D������H�EH��H�p�������H��H��E���`<��	�H��1�H�
�UH�5(S�v��H�5�H�����I�N(1�H��H���v��H�EH��H�p��&�H��H���k	�H��H�
TSH�5\S1����A�V0A�N4H��E�N<E�F8H�5ES1���H�5�O H��������H��H��E���ct�	�H�
(_H��H�5�R1���$ H�t$%H��f�D$%I�F �D$'�D$&����H�5RO H���;�����E����vA��E�A���A��H��H����D��H��1�H�
AWH�5�Q�8��H�5��H���y��I�N D��H��H���7��H�EH��H�p����I�V(H���2H�H����A9���1I���H��H��E����l��H�
�YH��H�5�Q1���I�v H�������H�5hN H���Q������H��H��E����O��H��1�H�
jYH�5�Q�[��I�v H������H�5N H�����H��H���`�H�
:YH��H�5�P1����H��H�5e`�T��I�N(H��H��D�����H�EH��H�p�������H��H��E����3��H��1�H�
�QH�5^P��H�5)�H������I�N 1�H��H�����H�EH��H�p��\��H��H����H��1�H�
?QH�5P�T��H�5шH�����I�N(1�H��H���T��H�EH��H�p����H��H���I�H��1�H�
�PH�5�O���H�5Q_H���=��I�N01�H��H�����H�EH��H�p���H��H�����H��1�H�
�OH�5�O���A�N<E�NDH��E�F@A�V8H�5�O1����H�5FL H���/��H��H����H��H�
cPH�5�O1��G��A�VHA�NLH��E�NTE�FPH�5nO1��&��H�5�K H�������E��H��H��E���tf�)�H�
]H�5OH��1�����L����H���|��H��H�����H�5�K H���m������H��H��E����O���H��1�H�
�TH�5�N�w��I�v H������H�5.K H�����H��H���|�H�
�SH��H�5�M1��/��H��H�5�]�p��I�N(H��H��D���.��H�EH��H�p�����1��H��H��E���>��
H��1�H�
:WH�5NA�����I�V(H��1�H�5e����H�5pJ H���Y��H��H����H�
WD��H��1�H�5%M�s��H�5�H�����I�N D��H��H���r��H�EH��H�p��"��M�~0M����zI�H������+��zL�5�V�f�H�H������+u_I��H��H���#�L��D��H��H�5�L1�����H�5Y�H�����I�O D��H��H������H�EH��H�p���I�W0H��u�H��H�����A��H��H�
V�H�5-L1������s��H��H�5�[���I�O0H��H��D���r��H�EH��H�p��"���u��E����nH��H���Y�H��1�H�
3cH�5�K���H�5��H���M��I�N(1�H��H�����H�EH��H�p���H��H����H�
tMH��H�5hK1����H��H�5[���I�N H��H��D�����H�EH��H�p��c�����E����eH��H����H��1�H�
7cH�5�K�M��A�V01�H��H�5�G�8��I�~0H�5�buH�51bH��A��e��H�5�G H�����H��H���&�H��1�H�
�LH�5�J����H�5V�H�����I�N 1�H��H������H�EH��H�p���H��H�����H��1�H�
<LH�53J���H�5��H������I�N(1�H��H�����H�EH��H�p��1��H��H���v�D��H��H�
aJ1�H�5gJ�+��E�NDE�F@H��A�N<A�V8H�5RJ1��
��H��H�5�F ���H��H����D��H��1�H�
�KH�5J����A�VHA�NLH��E�NTE�FPH�5�I1����H�5rF H���[������H��H��E���$E��H��1�H�
�JH�5I�e��H�5�H�����I�N 1�H��H���e��H�EH��H�p����H��H���Z��H��1�H�
_JH�5�H�
��H�5��H���N��I�N(1�H��H���
��H�EH��H�p���H��H�����H�
JH��H�5iH1����H��H�5X���I�N0H��H��D�����H�EH��H�p��d�����H��H��E���8k��H�
(NH��H�5�H1��N��I�v H���r���H�5E H�������a��H��H��E����3�E��H��1�H�
�KH�5�GA�����H�5o�H���3��I�N 1�H��H������H�EH��H�p���H��H�����D��H�
�KH��1�H�5NG���H��H�5�����I�N(D��H��H�����H�EH��H�p��K��H��H����D��H��1�H�
EKH�5�F�E��H��H�5�V���I�N0H��H��D���D��H�EH��H�p������G��H��H��E����<�+��H��1�H�
|NH�5�F����H�5[H�����I�N 1�H��H������H�EH��H�p����H��H�����H��1�H�
7NH�5�F���I�v0H������H�5=C H���&��H��H����H��1�H�
NH�5zF�>��A�F8����o����o���co����o�H�5�B H������H��H���(��H�
�KH��H�5�E1�����H��H�5-U���I�N(H��H��D������H�EH��H�p��������H��H��E���C��H��1�H�
IEH�5&EA��n��H�5�}H����I�N 1�H��H���n��H�EH��H�p����H��H���c��H�
ED��H��1�H�5�D���H�5�}H���Y��I�N(D��H��H�����H�EH��H�p�����H��H�����D��H��1�H�
�DH�5sD���H�5>}H�����I�N0D��H��H�����H�EH��H�p��p��H��H����E���7AH�
�D�H��1�H�5�D�_��E�NDE�F@H��A�N<A�V8H�5�D1��>��H�5A H������H��H���O��H��1�H�
EH�5>D���A�NLE�NTH��E�FPA�VHH�5)D1�����H�5�@ H�����H��H�����H��H�
�CH�5�C1����A�VXA�N\H��E�NdE�F`H�5�C1����H�5G@ H���0�����H��H��E����;��H��1�H�
�CH�5�B�:��H�5�{H���{��I�N 1�H��H���:��H�EH��H�p�����H��H���/��H��1�H�
gCH�5�B����H�5_{H���#��I�N(1�H��H������H�EH��H�p����H��H�����H��1�H�
&CH�5�B���A�N4E�N<H��E�F8A�V0H�5�B1��i��H�5,? H�����H��H���z��H��H�
_BH�5kB1��-��A�V@A�NDH��E�NLE�FHH�5TB1����H�5�> H������+��H��H��E����@���H��1�H�
3BH�5tA����H�5?zH�����I�N 1�H��H������H�EH��H�p��r��H��H����H��1�H�
�AH�5A�j��H�5�yH��諼�I�N(1�H��H���j��H�EH��H�p����H��H���_��H��1�H�
�AH�5NA���A�N4E�N<H��E�F8A�V0H�59A1�����H�5�= H�����H��H�����H��H�
�@H�5�@1����A�V@A�NDH��E�NLE�FHH�5�@1����H�5W= H���@�����H��H��E���&��H��1�H�
�@H�5�?�J��H�5�xH��苻�I�N 1�H��H���J��H�EH��H�p����H��H���?��H��1�H�
�@H�5�?����H�5oxH���3��I�N(1�H��H����H�EH��H�p����H��H�����H��1�H�
6@H�5�?���A�N4E�N<H��E�F8A�V0H�5�?1��y��H�5<< H���%��H��H����H��H�
o?H�5{?1��=��A�V@A�NDH��E�NLE�FHH�5d?1����H�5�; H�������;��H��H��E����U���H�
�LH�5?H��1�����L���z��H���r���H��H������H�5z; H���c������E����cI�~ �pgH��H�����H��1�H�
JH�5�>�b��H�5PVH�����H�5; H�����H��H���_��H�
�DH�5�=H��1����H�5�vH���S��I�N0H��H��D������H�EH��H�p����H��H�����E����,H�
}E�H��1�H�5�=���A�F8���lg����g����g����g�H�5L: H���5��H��H�����H�
�BH��H�5=1��M��H��H�5�L莸�I�N(H��H��D���L���H�EH��H�p�����O���I�~(��=E����gH��H���(��H��1�H�
�pH�5=����I�F(H���!PH����O�H�5�9 H���p��H��H������H�
GH��H�5<<1����H��H�5�K�ɷ�I�N H��H��D��臾��H�EH��H�p��7��銿��H��H��E����&�n��H��1�H�
�>H�5�;�!��H�5�tH���b��I�N 1�H��H���!���H�EH��H�p�����H��H�����H��H�
�;H�5<1�����A�V(A�N,H��E�N4E�F0H�5�;1����H�5k8 H���T���Ǿ��H��H��E���FQ���H�
�=H��H�5;1��^��H��H�5�J蟶�I�N H��H��D���]���H�EH��H�p��
���`���H��H��E���;a�D��H�
CH��H�5�:1����H��H�5IJ�8��I�N H��H��D�����H�EH��H�p�������H��H��E���P����H�
�@H��H�5�:1����I�v H��贻���H�5G7 H���0��飽��E�������H��H�����&H��H�5�^���H��H���h��H��H�5:C����H��H���I��H�51CH�������8���H��H��E����-���H��1�H�
�=H�5�9����H�5LrH�����I�N 1�H��H���ϻ��H�EH��H�p����H��H������H�
>H��H�5+91��w��H��H�5�H踴�I�N(H��H��D���v���H�EH��H�p��&���y���H��H��E���(;�]��H��1�H�
I=H�5�8���H�5�qH���Q��I�N 1�H��H������H�EH��H�p����H��H�����
H��1�H�
�VH�5j8���H�55qH����I�N(1�H��H��踺��H�EH��H�p��h��H��H�����H��1�H�
�<H�58�`��H�5�pH��衳�I�N01�H��H���`���H�EH��H�p����H��H���U��H�
z<H��H�5�71����H��H�5ZG�I��I�N8H��H��D������H�EH��H�p�����
���H��H��E�������H��1�H�
�?H�5�7���I�v(H���Ÿ���H�5X4 H���A��H��H�����H��1�H�
	>H�57�Y��H�5�oH��蚲�I�N 1�H��H���Y���H�EH��H�p��	��H��H���N��H�
(?H��H�5�61����H��H�5SF�B��I�N0H��H��D������H�EH��H�p��������H��H��E����0����H��1�H�
�>H�5�6���I�v(H��辷���H�5Q3 H���:��H��H�����H��1�H�
=H�56�R��H�5�nH��蓱�I�N 1�H��H���R���H�EH��H�p����H��H���G��H�
!>H��H�5�51����H��H�5LE�;��I�N0H��H��D�����H�EH��H�p�������E���I\E��L�=)5H�J IE�L�=#nE1�H�$H��H��A�����H�$D��H��H�5�41��q��I�~0H��DH��LD�L��覰�I�N D��H��H���d���H�EH��H�p����I�V0H���_���H�H�������kI���t���H��H��E���,�(��H��1�H�
�AH�5�4����H�5XmH�����I�N 1�H��H���۶��H�EH��H�p����I�~0�bH��H��L�-m���H�
cA�H��1�H�5#4�q��L��H��趯�I�N(1�H��H���u���H�EH��H�p��%��I�~0�r���H��H���_��H�
AH��H�5�31����H��H�5dC�S��I�N0H��H��D������H�EH��H�p��������H��H��E���L���H�
O@H�5�3H��1����L����H���K���H��H�����H�5S0 H���<��鯶��H��H��E����"���H��1�H�
�8H�5�3�F��I�v H���j����H�5�/ H������I�~(��g_H��H���@��H�
�8H��H�5�21�����H��H�5EB�4��I�N(H��H��D����H�EH��H�p�������E�����H��H������H��H�5=<�U��H��H�����H��H�5:<�6��H��H�����H�5.<H�����銵��E�����H��H���n��H�5�3H������H��H���O��,H�5�MH������H��H���0��$H�5�MH�����H��H�����H��1�H�
�IH�52����A�V01�H��H�53.���I�~0H�5nIuH�5�HH�����H�5U. H���>��H��H�����H��1�H�
�2H�51�V��H�5�iH��藬�I�N D��H��H���U���H�EH��H�p����H��H���J��H��1�H�
�2H�5�0���H�5ziH���>��I�N(D��H��H��A����H�EH��H�p����H��H�������p�H��H��E��������H��1�H�
3H�570A����H�5�hH����I�N(1�H��H������H�EH��H�p��/��H��H���t��D��H��H�
_01�H�5e0�)��A�V0A�N4H��E�N<E�F8H�5P01����H�5�, H������'���E�����H��H�����H�5�1H�����H��H������0H�5�KH���h��H��H������&H�5�KH���I��H��H�����H��1�H�
�FH�5/�a��H�5�gH��袪�I�N(D��H��H���`���H�EH��H�p����H��H���U���O�H��H��E����)�7��H��1�H�
�.H�5�.A�����H�5agH���%��I�N 1�H��H�����H�EH��H�p����H��H������D��H�
�.H��1�H�5@.���H��H�5g�ϩ�I�N(D��H��H��荰��H�EH��H�p��=��H��H�����D��H��1�H�
;.H�5�-�7��H��H�5�=�x��I�N0H��H��D���6���H�EH��H�p������9���H��H��E����R���H�
iCH�5.H��1�����M�n M���A�E�����H�A��$H�L$�7f�I��K�t�H�����D9<$~�H�5>�H���6��I�GL;|$u�H�53* H�ߺ���H��H���|��E����?H�
R5�H��1�H�5�,�&��H�5�eH���g��I�N0D��H��H���%���H�EH��H�p�����H��H�����H�
�.H��H�5�,1�����H��H�5<���I�N(H��H��D���̮��H�EH��H�p��|���ϯ��H��H��E����S���H�
�1H��H�5�,1��f��I�v H��芭���H�5) H������y���H��H��E���1F�]��H�
�1H��H�5N,1����I�v H���4����H�5�( H������#���E������H��H�����H��H�5/���H��H������H��H�5/�d��H��H������H�5�.H���E��鸮��E����OH��H�����H��1�H�
�BH�5+�O��H�5�cH��萦�I�N 1�H��H���O���H�EH��H�p����H��H���D��H�
�0H��H�5�*1����H��H�5I:�8��I�N(H��H��D�����H�EH��H�p�������H��H��E���>����H��1�H�
@1H�5B*���H�5
cH���ѥ�I�N 1�H��H��萬��H�EH��H�p��@��H��H�����1��H��H�
l1H�5t*�8��A�~@��TI�v0H���Q����H�5�& H������H��H���2��H��1�H�
�0H�5!*����I�v8H���	����H�5�& H�����H��H������H��1�H�
I/H�5O)���H�5bH���ޤ�I�N(1�H��H��蝫��H�EH��H�p��M��H��H�����H��1�H�
>0H�5�)�E��E�NPE�FLH��A�NHA�VDH�5l)1��$��H�5�% H�����H��H���5��H��1�H�
*0H�5$)����A�NXE�N`H��E�F\A�VTH�5)1�����H�5�% H���s��H��H������H��H�
�/H�5�(1����A�VdA�NhH��E�NpE�FlH�5�(1��j��H�5-% H�����鉫��E������H��H���m�� H�5)KH�����H��H���N��%H�52KH�����H��H���/��H�5R/H����H��H�����H��1�H�
?H�5u'����H�5@`H�����I�N D��H��H���©��H�EH��H�p��r��H��H������n���H��H��E������H��1�H�
[/H�5�'�L��I�v(H���p����H�5$ H�����H��H���Q��H��1�H�
�-H�5�&���H�5�_H���E��I�N 1�H��H������H�EH��H�p����H��H�����H�
�.H��H�5`&1����H��H�5�5���I�N0H��H��D��諨��H�EH��H�p��[��鮩��H��H��E���q=���H�
n4H�5�&H��1��E��L������H�����H��H���Z��H�5�" H���־��I���H��H��E�����-��H��1�H�
�+H�5&����I�v H�������H�5�" H��耾�H��H������H�
I+H��H�5L%1����H��H�5�4�٠�I�N(H��H��D��藧��H�EH��H�p��G��隨��H��H��E���MG�~��H�
�1H��H�5o%1��1��H�ߺH�5+�ݽ�I�V H��1�H�5�����H�5�! H��贽��'���E���y��H��H�����H��H�5u)臽�H��H������!H��H�5=C�h��H��H������H�5K)H���I�����H��H��E�������H��1�H�
�1H�5$�S��H�5�\H��蔟�I�N 1�H��H���S���H�EH��H�p����H��H���H��H�
W1H��H�5�#1����H��H�5M3�<��I�N(H��H��D�����H�EH��H�p�������H��H��E����;����H�
�1H�5�#H��1����L���<��H���4���H��H�����H�5<  H���%��阦��H��H��E���;�|��H��1�H�
�(H�5k#�/��I�v H���S����H�5� H���ϻ�I�~(���OH��H���)��H�
�(H��H�5�"1�����H��H�5.2���I�N(H��H��D���ۤ��H�EH��H�p�����ޥ��H��H��E����E����H�
�(H��H�5�"1��u��I�v H��虣���H�5, H�����鈥��H��H��E���	J�l��H�
�#H��H�5�!1����H��H�5q1�`��I�N H��H��D������H�EH��H�p������!���H��H��E����:���H�
r-H��H�5�!1����I�v H���ܢ���H�5o H���X���ˤ��H��H��E������H��1�H�
�&H�5!�b��H�5�YH��補�I�N(1�H��H���b���H�EH��H�p����H��H���W��H��1�H�
h&H�5� �
��H�5�YH���K��I�N 1�H��H���
���H�EH��H�p����I�~0��*NH��H������H�
&H��H�5[ 1����H��H�5�/���I�N0H��H��D��覢��H�EH��H�p��V��驣��H��H��E����?���H��H�
v H�5~ 1��@��A�V0A�N4H��E�N<E�F8H�5g 1����H�5� H���˸��>���D�����H�=�6H��1��]��DH��H���
��E����H�
7�H��1�H�5i���H�54XH����I�N(D��H��H��趡��H�EH��H�p��f��H��H�����H��H�
^&H�5�1��^��A�V0A�N4H��E�N<E�F8H�5�1��=��H�5 H������\���H�
U6�H��1�H�5����H�5�WH���H��I�N(1�H��H������H�EH��H�p����H��H������L����H�5S4H���n���>�H��H������A��H��H�
(�H�541������z��H��H�5�-軙�I�N0H��H��D���y���H�EH��H�p��)���|����o��H�5�&H�����H��H���P��+H�5lBH���̶�H��H���1��H�5�&H��譶�H��H�����H��1�H�
�%H�5����I�v(H������H�5| H���e��H��H������H��1�H�
-$H�5/�}��H�5�UH��辘�I�N D��H��H���|���H�EH��H�p��,��H��H���q�����b��H�5�H���޵�H��H���C��@H�5�7H��迵�H��H���$��=H�5x6H��蠵�H��H�����H��1�H�
�H�5j��H�55UH����I�N D��H��H��跞��H�EH��H�p��g��H��H�����H��1�H�
JH�5�_��H�5�TH��蠗�I�N(D��H��H���^���H�EH��H�p����H��H���S��H��1�H�
H�5����H�5[+H���G��I�N0D��H��H������H�EH��H�p����H��H�����H��1�H�
�H�5���A�N<E�NDH��E�F@A�V8H�5�1���H�5O H���8��H��H�����������H�5%#H���
��H��H���o��*H�5�>H�����H��H���P��H�5�"H���̳�H��H���1��H��1�H�
�"H�5 ���I�v(H�������H�5� H��脳�H��H������H��1�H�
L!H�5N蜿�H�5SH���ݕ�I�N D��H��H��蛜��H�EH��H�p��K��H��H����������&H�5�4H����H��H���b��+H�5�3H���޲�H��H���C��9H�5�4H��迲�H��H���$��H��1�H�
HH�5��׾�H�5TRH�����I�N D��H��H���֛��H�EH��H�p����H��H������H��1�H�
.H�50�~��H�5�QH��返�I�N(D��H��H���}���H�EH��H�p��-��H��H���r��H��1�H�
�H�5a�%��A�N4E�N<H��E�F8A�V0H�5L1����H�5� H��谱�H��H�����������%H�5�?H��肱�H��H������$H�5k?H���c��H��H������H�5�%H���D��H��H�����H��1�H�
�%H�5�\��H�5�PH��蝓�I�N D��H��H���[���H�EH��H�p����H��H���P�����A�� H�5�7H��轰�H��H���"��(H�5�7H��螰�H��H�����*H�5�7H�����H��H������!H�58H���`��H��H������H��1�H�
H�5��x��I�v H��蜘���H�5/ H�����I�~(��UDH��H���r���D��c��H�5�H���߯�H��H���D��H�5�H����H��H���%��H�5�H��衯�H��H�����H��1�H�
4H�5k蹻�H�56OH����I�N(D��H��H��踘��H�EH��H�p��h��H��H������=�����!H�5�6H�����H��H�����(H�5�6H����H��H���`��H�5�H���ܮ�H��H���A��H��1�H�
�H�50���I�v H�������H�5� H��蔮�H��H�����������H�5rH���f��H��H������H�5iH���G��H��H�����H�5hH���(��H��H�����H��1�H�
�H�5��@��H�5�MH��聐�I�N D��H��H���?���H�EH��H�p�����H��H���4������%��H��H�5
衭�H��H�����H��H�5肭�H��H������H��H�5�c��H��H������H��1�H�
�H�5-�{��H��H�5�L輏�I�N(D��H��H���z���H�EH��H�p��*��H��H���o�����e��H��H�5����H��H��A��@��FH�5<1H��輬�H��H���!��5H�5e1H��蝬�H��H�����H��1�H�
�H�5g赸�H�52LH����I�N D��H��H��贕��H�EH��H�p��d��H��H�����������"H�5�5H�����H��H�����4H�5�5H����H��H���a��!H�5�5H���ݫ�H��H���B��H��1�H�
�H�5���H�5rKH���6��I�N D��H��H����H�EH��H�p���H��H������1��
H��H�
�H�5�蜷�A�~@��<I�v0H��赓���H�5H H���1��H��H�����H��1�H�
H�5��I��I�v8H���m����H�5 H�����H��H���N��H��1�H�
�H�5����H�5~JH���B��I�N(D��H��H������H�EH��H�p�谿�H��H�����H��1�H�
�H�5�訶�E�NPE�FLH��A�NHA�VDH�5�1�臶�H�5J H���3��H��H�����H��1�H�
�H�5��K��A�NXE�N`H��E�F\A�VTH�5r1��*��H�5�
 H���֩�H��H���;���^�H�
��H��1�H�5 ���A�F8����:����:����:����:�H�5�
 H���i��H��H�������/�����H�5�/H���;��H��H�����(H�5�/H�����H��H�����H�5�H����H��H���b��H��1�H�
�H�5Q���I�v H���9����H�5� H��赨�I�~(���<H��H������������H��H�5��|��H��H��A�����;H�5O4H���W��H��H�����H�5�H���8��H��H�����H��1�H�
�H�5��P��I�V(H��1�H�5�v�;��H�5� H�����H��H���L������B��#H��H�5�0辧�H��H��A����;H�5�0H��虧�H��H�����H�5JH���z��H��H������H��1�H�
BH�5D蒳�H�5GH���Ӊ�I�N D��H��H��葐��H�EH��H�p��A��H��H�����H��1�H�
�H�5u�9��I�v(H���]����H�5�
 H���٦�H��H���>��H��1�H�
�H�5�
���H�5nFH���2��I�N0D��H��H����H�EH��H�p�蠻�H��H������H��1�H�
~H�5J
蘲�H�5FH���و�I�N8D��H��H��藏��H�EH��H�p��G��H��H�����H��1�H�
8H�5{
�?��A�NDE�NL1�E�FHA�V@H�5g
H�����H�5�	 H���ʥ�H��H���/���)����%��H�5�-H��补�H��H�����(H�5�-H��肥�H��H������H�5�H���c��H��H������H��1�H�
�H�5��{��I�v H��蟍���H�52	 H�����H��H���������q��H�5�H�����H��H���R��5H�5>*H���Τ�H��H���3��*H�5W*H��诤�H��H�����H��1�H�
�H�5y�ǰ�H�5DDH�����I�N D��H��H���ƍ��H�EH��H�p��v��H��H����������H�5�H���(��H��H����.H�51*H���	��H��H���n��H�5[H�����H��H���O��H��1�H�
PH�5�
���H�5CH���C��I�N(D��H��H������H�EH��H�p�豸�H��H����H��1�H�
H�5[
詯�H�5&CH�����I�N D��H��H��訌��H�EH��H�p��X��I�~0��d6H��H��������'H�5�-H����H��H���d��5H�5�-H�����H��H���E��H�5�H����H��H���&��H��1�H�
wH�5�	�ٮ�H�5VBH�����I�N D��H��H���؋��H�EH��H�p�舷�H��H���Ϳ�H��1�H�
1H�5�	耮�I�v0H��褊���H�57 H��� ��H��H��腿�H��1�H�
�H�5t	�8��A�F8����2����2���]2����2�H�5� H��轡�H��H���"��������$H�5o/H��菡�H��H�����$H�5x/H���p��H��H���վ�H�5<H���Q��H��H��趾�H��1�H�
5H�5�i��H�5�@H��誃�I�N D��H��H���h���H�EH��H�p����I�~0�\5H��H��L�-�@�K��H�
��H��1�H�5���L��H���C��I�N(D��H��H������H�EH��H�p�豵�I�~0�����H��H���������ܽ� H�5p!H���X��H��H��载�!H�5y!H���9��H��H��螽�;H�5�!H�����H��H�����H��1�H�
�H�5��2��H�5�?H���s��I�N D��H��H���1���H�EH��H�p����H��H���&��H��1�H�
^H�5��٫�H�5V?H�����I�N(D��H��H���؈��H�EH��H�p�舴�H��H���ͼ�H��1�H�
H�5�耫�A�N4E�N<H��E�F8A�V0H�5�1��_��H�5" H�����H��H���p�������a��H�5�
H���ݞ�H��H���B��)H�5�)H��辞�H��H���#��H�5H��蟞�H��H�����H��1�H�
�
H�5�跪�I�v(H���ۆ���H�5n H���W��H��H��輻�H��1�H�
H�5!�o��H�5�=H��谀�I�N D��H��H���n���H�EH��H�p����H��H���c������T��H��H�5��Н�H��H��A��/��;H�5kH��諝�H��H�����-H�5�H��茝�H��H�����H��1�H�
yH�5V褩�H�5!=H�����I�N D��H��H��裆��H�EH��H�p��S��H��H��蘺����莺�H�5tH���
��H��H���o��<H�5CH�����H��H���P��9H�5�H���̜�H��H���1��H��1�H�
!H�5����H�5a<H���%�I�N D��H��H�����H�EH��H�p�蓱�H��H���ع�H��1�H�
�H�5=苨�H�5<H����~�I�N(D��H��H��芅��H�EH��H�p��:��H��H������x���H�
f�H��1�H�5d�(��E�NDE�F@H��A�N<A�V8H�5O1����H�5�H��賛�H��H�����H��1�H�
�H�5�˧�A�NLE�NTH��E�FPA�VHH�5�1�誧�H�5m�H���V��H��H��軸��ľ��謸�H��H�5{�(��H��H��A�臸�?H�53H�����H��H���h��1H�5TH�����H��H���I��H��1�H�
�H�5���H�5y:H���=}�I�N D��H��H�����H�EH��H�p�諯�H��H�����鈼�����H�5�	H���b��H��H���Ƿ� H�5�%H���C��H��H��訷�H�5�	H���$��H��H��艷�H��1�H�
K	H�5x�<��I�v H���`����H�5�H���ܙ�H��H���A���ܯ���2��H�5GH��讙�H��H�����+H�57H��菙�H��H�����=H�5HH���p��H��H���ն�H��1�H�
�H�5:舥�H�59H����{�I�N D��H��H��臂��H�EH��H�p��7��H��H���|��H��1�H�
�H�5��/��H�5�8H���p{�I�N(D��H��H���.���H�EH��H�p��ޭ�H��H���#��H��1�H�
rH�5�֤�A�N4E�N<H��E�F8A�V0H�5��1�赤�H�5x�H���a��H��H���Ƶ�鿾��E������H��H��訵�H�5�	H���$��H��H��艵�H�5�	H�����H��H���j�� H�5$H�����H��H���K��,H��1�H�
�2H�5:���I�F(H���DH�����H�5��H��蓗�H��H����������H�5�H���e��H��H���ʴ�(H�5�H���F��H��H��諴�H�5�H���'��H��H��茴�H��1�H�
vH�5{��?��I�v H���c���H�5��H���ߖ�H��H���D���ï���5��H�5
H��豖�H��H�����NH�5�H��蒖�H��H����5H�5;H���s��H��H���س�H��1�H�
�H�5=�苢�H�56H����x�I�N D��H��H�����H�EH��H�p��:��H��H�����H��1�H�
FH�5��2��H�5�5H���sx�I�N(D��H��H���1��H�EH��H�p����H��H���&��H��1�H�
.H�5���١�H�5V5H���x�I�N0D��H��H����~��H�EH��H�p�航�H��H���Ͳ��s��H�
�0�H��1�H�5���v��I�vHH���}���H�5-�H�����H��H���{��H��1�H�
�0H�5��.��H�5�4H���ow�I�N`1�H��H���.~��H�EH��H�p��ީ�H��H���#��H��1�H�
j0H�5���֠�H�5S4H���w�I�NP1�H��H����}��H�EH��H�p�膩�H��H���˱�钚��輱�H�5�'H���8��H��H��蝱�/H�5�'H�����H��H���~��#H�5�'H����H��H���_��H��1�H�
�H�5����H�5�3H���Sv�I�N D��H��H���}��H�EH��H�p���H��H�����$������H�5�H���s��H��H���ذ�.H�5�&H���T��H��H��蹰�H�5�&H���5��H��H��蚰�H��1�H�
KH�5���M��H�5�2H���u�I�N D��H��H���L|��H�EH��H�p���H��H���A���-���H�
�.�H��1�H�5&����A�V0H��1�H�5Y��՞�H�5��H��聒�H��H�����H��1�H�
�.H�5K�虞�H�52H����t�I�N 1�H��H���{��H�EH��H�p��I��H��H��莯�H��1�H�
u.H�5}��A��A�V4H��1�H�5���,��H�5�H���ؑ�H��H���=��H��1�H�
d.H�5�����H�5m1H���1t�I�N(1�H��H����z��H�EH��H�p�蠦�H��H�����H��1�H�
D.H�5�蘝�I�v8H���y���H�5O�H���8��H��H��蝮�����莮�H�5R%H���
��H��H���o�� H�5S%H�����H��H���P��H�59
H���̐�H��H���1��H��1�H�
(
H�5 ����I�v(H���y���H�5��H��脐�H��H������3����ڭ� H�5"H���V��H��H��軭�2H�5"H���7��H��H��蜭�#H�58"H�����H��H���}��H��1�H�
�H�5��0��H�5�/H���qr�I�N D��H��H���/y��H�EH��H�p��ߤ�H��H���$��H��1�H�
4H�5��כ�I�v(H���w���H�5��H���w��H��H���ܬ��	����ͬ�$H�5�!H���I��H��H��讬�3H�5�!H���*��H��H��菬�H�51H�����H��H���p��H��1�H�
'H�5_��#��I�v H���Gw���H�5��H����H��H���(��H��1�H�
�H�5��ۚ�I�v(H���v���H�5��H���{��H��H���������ѫ�H�5�H���M��H��H��貫�H�5� H���.��H��H��蓫�H�5�H�����H��H���t��H��1�H�
�H�5���'��H�5|H���hp�M�~ A�7������H��H���-��H��1�H�
�H�5����I�WH��1�H�5�\�˙�H�5��H���w��I�GH����H�EH��H�p��z��H��H��迪�閍��谪�*H�5�H���,��H��H��葪�&H�5�H���
��H��H���r��!H�5�H�����H��H���S��H��1�H�
cH�5�����H�5�,H���Go�I�N D��H��H���v��H�EH��H�p�赡�H��H����麖�����H�5H���g��H��H���̩�+H�5�"H���H��H��H��譩� H�5�"H���)��H��H��莩�H��1�H�
�H�5���A��H�5�+H���n�I�N D��H��H���@u��H�EH��H�p����H��H���5��H��1�H�
EH�5$����I�v(H���t���H�5��H��舋�H��H������w���ި�H�5�H���Z��H��H��迨�>H�5{%H���;��H��H��蠨�H��1�H�
H�5��S��H�5�*H���m�I�N D��H��H���Rt��H�EH��H�p����H��H���G��H��1�H�
>%H�5����H�5w*H���;m�I�N(D��H��H���s��H�EH��H�p�詟�I�~0���H��H�����%��|���ԧ�H��H�5:�P��H��H��A�诧�HH�5�#H���+��H��H��萧�H��1�H�
H�5���C��H�5�)H���l�I�N D��H��H���Bs��H�EH��H�p����H��H���7���|��H�
t�H��1�H�5�����H�5b)H���&l�I�N 1�H��H����r��H�EH��H�p�蕞�H��H���ڦ�H��1�H�
,H�5?�荕�H�5
)H����k�I�N(1�H��H���r��H�EH��H�p��=��H��H��肦�鉋���s��H�5�H�����H��H���T��H�5�H���Ј�H��H���5��H�5�H��豈�H��H�����H��1�H�
��H�5{��ɔ�H�5F(H���
k�I�N D��H��H����q��H�EH��H�p��x��H��H��轥�錕��讥�H�5��H���*��H��H��菥�(H�5{H�����H��H���p��H�5�H�����H��H���Q��H��1�H�
a�H�5@����I�v H���(p���H�5��H��複�H��H���	��铈��H�
��H��1�H�5d�貓�H�5/'H����i�I�N01�H��H���p��H�EH��H�p��b��I�~8��YH��H��蜤�
�sx��荤�H�5kH���	��H��H���n��FH�5� H�����H��H���O��H��1�H�
�H�5�����H�5&H���Ci�I�N D��H��H���p��H�EH��H�p�豛�I�~(��H��H����� �v��H�
���H��1�H�5F�蔒�H�5&H����h�I�N01�H��H���o��H�EH��H�p��D��H��H��艣��j���H��H���t��H�
XH��H�5��1��'��H��H�5�%�hh�I�N H��H��D���&o��H�EH��H�p��֚��C����H�5R�H��蝅�H�5��H��艅�H��H�����A��҃���
����H�5��H���Y��뺺H�5��H���C������H�5�H���*���?����H�5��H������/����w��	H�5�H�����H��H���X��H�5�H���Ԅ�H��H���9��H�5�H��资�H��H������y��H��H����� H��H�5聄�H��H����� H��H�5w�b��H��H���ǡ�*H�5H���C���{��詡�H�5T�H���%��H��H��芡� H�5�H�����H��H���k��H�5/�H�����H��H���L���Rr���=��!H�5IH��蹃�H��H�����H�5D�H��蚃�H��H����H�5=�H���{��H��H������{���Ѡ�H�5P�H���M��H��H��負�H�5O�H���.��H��H��蓠�H�5L�H�����H��H���t��钯���e��%H�5�H�����H��H���F��+H�5�H���‚�H��H���'��)H�5�H��裂�H��H������X�����H�5_�H���u��H��H���ڟ�H�5T�H���V��H��H��軟�H�5K�H���7��H��H��蜟�����荟�H�5��H���	��H��H���n��H�5'�H�����H��H���O��H�5w�H���ˁ�H��H���0��	�����!��H�5Z�H��蝁�H��H�����H�5��H���~��H��H�����H�58�H���_��H��H���Ğ�	�-��赞�H�5Y�H���1��H��H��薞�H�5O�H�����H��H���w��H�5C�H�����H��H���X��	�*����I��H�5/�H���ŀ�H��H���*��H�5�H��覀�H��H�����H�5�H��臀�H��H�����	����ݝ�-H�5�
H���Y��H��H��辝�$H�5�
H���:��H��H��蟝� H�5�
H�����H��H��耝�郳���q��H�5��H�����H��H���R��H�5�H�����H��H���3��H�5��H����H��H������
�����H��H�5D���H��H��A����:H�5LH���\�H��H����#H�5mH���=�H��H��袜��z��蘜�H�5��H����H��H���y���H�5]H���~�H��H���Z��TH�5�H����~�H��H���;��1魁���,��H�5��H���~�H��H���
��H�5��H���~�H��H�����H�5��H���j~�H��H���ϛ��m���H��H��躛�H��H�5���6~�H��H��蛛�,H��H�5��~�H��H���|��$H�5�H���}��G����^��#H�5R	H����}�H��H���?��H�5m�H���}�H��H��� ��H�5d�H���}�H��H�����������H�5��H���n}�H��H���Ӛ�H�5��H���O}�H��H��贚�H�5�H���0}�H��H��蕚��~���膚�H��H�5'��}�H��H��A��a��9H�5mH����|�H��H���B��$H�5�H���|�H��H���#���Ί��H��H�����H�5�H���|�H��H�����'H�5�H���p|�H��H���ՙ�H�5�H���Q|�I�~ ��?H��H��諙��2���蜙�"H�5
H���|�H��H���}��&H�5
H���{�H��H���^��H�5 �H����{�H��H���?��(�0}��H��H���*��&H��H�5�
�{�H��H�����H��H�5H��{�H��H�����H�5�
H���h{��X����Θ�H�5��H���J{�H��H��诘�H�5)�H���+{�H��H��萘�H�5t�H���{�H��H���q���h���b��H�5Y�H����z�H��H���C��!H�5
H���z�H��H���$��H�5@	H���z�H��H�����雃����'H��H�5W
�rz�H��H��A��ї�(H�5]
H���Mz�H��H��貗�-H�5n
H���.z�H��H��蓗����艗�H��H�5/��z�H��H��A��d��9H�5pH����y�H��H���E��%H�5�H���y�H��H���&���|������H��H�5_��y�H��H��A���$H�5�H���sy�H��H���ؖ�H�5:�H���Ty�H��H��蹖��w��诖�H�5��H���+y�H��H��萖�H�5w�H���y�H��H���q��H�5j�H����x�H��H���R������C��H�52�H���x�H��H���$��H�5�H���x�H��H�����H�5�H���x�H��H������f��H��H���ѕ�H��H�58��Mx�H��H��貕�H��H�5���.x�H��H��蓕�H�5�H���x�靇���u��	H�5w�H����w�H��H���V��H�5��H����w�H��H���7��H�5��H���w�H��H������Rb���	��H�5P�H���w�H��H�����H�5H�H���fw�H��H���˔�H�5C�H���Gw�H��H��謔��k��蝔�$H�5QH���w�H��H���~��H�5v�H���v�H��H���_��H�5��H����v�H��H���@���;����1��#H�5�H���v�H��H�����H�5
�H���v�H��H�����H�5�H���ov�H��H���ԓ��Q���H��H��迓�H��H�5M��;v�H��H��蠓�$H��H�5a��v�H��H��聓�H�5.�H���u�鯭���c�� H�5�H����u�H��H���D��H�5\�H���u�H��H���%��H�5Y�H���u�H��H������f�����H�5cH���su�H��H���ؒ�H�5��H���Tu�H��H��蹒�H�5��H���5u�H��H��蚒��ӹ��苒�H�5��H���u�H��H���l��H�5��H����t�H��H���M��H�5��H����t�H��H���.�����H��H����� H��H�5���t�H��H����%H��H�5���vt�H��H���ۑ�H�5��H���Wt�駳��H��H��跑�H��H�5K��3t�H��H��蘑�!H��H�5��t�H��H���y��H�5!�H���s��È���[��H�5��H����s�H��H���<��IH�5�H���s�H��H��������H��H�����H�5�H���s�H��H�����7H�5-�H���es�H��H���ʐ�H�5��H���Fs�I�~ ��H��H��蠐�H��1�H�
�H�5���S�I�v H���w[���H�5
�H����r�H��H���X��H�
��H��H�5I�1���H�ߺH�5��r�H�5��H���r�����	��H�5��H���r�H��H�����H�5��H���fr�H��H���ˏ�H�5��H���Gr�H��H��謏��c���H��H��藏�H��H�5���r�H��H���x��&H��H�5����q�H��H���Y��H�5~�H����q��U����;��
H�5��H���q�H��H�����H�5��H���q�H��H����H�5��H���yq�H��H���ގ�	�E����ώ�H�5��H���Kq�H��H��谎�H�5��H���,q�H��H��葎�"H�5��H���
q�H��H���r��麫���c��H�5��H����p�H��H���D��"H�5�H���p�H��H���%��H�5��H���p�H��H�����镵����D��H��1�H�
��H�5���|�H�ߺ6H�5���Xp�H�5[�H���Dp�� d��H��H��褍�H��1�H�
�H�5���W|�H�5E�H���p�H�5�H����o�H��H���T����H��H���?��H��1�H�
��H�5.���{�I�v H���X���H�5��H���o�H��H��������H�5� H���io�H�5l�H���Uo�H��H��躌�A��҃��醐���H�5�7H���%o�뺺H�5�H���o�뤺H�5�� H���n�뎺H�5�H����n�H�5��H����n�H��H���4��A��҃��鎘���H�5E� H���n�뺺H�5Y7H���n�뤺H�5� H���sn�뎺H�5��H���]n�����H�5��H���Dn��R���H��H��褋�H��H�5E�� n�H��H��腋�H��H�5=��n�H��H���f��H�58�H����m����H��H���B��
H�
^H��H�53�1��y�H�ߺ$H�5f�m�H�5��H���m��X��H��H�����"H�
�H��H�5��1��y�H�ߺ6H�5���Lm�H�5O�H���8m��W��H��H��蘊�H�
H��H�5��1��Ky�H�ߺ6H�5L��l�H�5��H����l��]��H��H���C��
�Q���H��H���.��H�
S�H��H�5�1���x�H�ߺ6H�5���l�H�5��H���yl���V��H��H���ى�H�
=�H��H�5��1��x�H�ߺ9H�5��8l�H�5;�H���$l��V��H��H��脉��H��H���r��H�
��H��H�5c�1��%x�H�ߺ9H�5����k�H�5��H���k��0V��H��H������H��H�����%����H��H��L�- �������H��H���߈� �B���H��H���ʈ����H��H��L�-��讈����M���υ���|y�H�EH��H�p��<��H��H��聈��Xk��H��H���l���Ds�����ff.�f���ATI��H�=�U����S��L�H�=�H����L�L���H��H���S��H��[]A\�fD��1�H9���H�D@�ff.�PXH�vTH�
)
H�5�H��H��H��HI�H��ESH�81����f.�USH��H��H��t@��t4H���dl�H��H���)��H��H�5�H��H��DSH�81��ˁ�@��t�H��H���H��t���H��t�H�����H���ff.�f�ATI��H��H�5A<TUH��I�<$S�Ӻ�E�H��$����u
H����H��uH�GDSH�5/	H�81��6��fD�u�H�H�у�H��u�� thH����H��u�H�PH�H�UH� t7H��H�@�I�$��[]A\����u5��[]A\�D1���@H�@ ��f.�H�x�W���H�P �I�4$H�}���f���SH��H��dH�%(H�D$1�����H��uFH���>H��H�$�yD�H��$����H�T$dH3%(��H��[�D��u�H���H��
u�H�@CS�>H�8�F��t�H� u>1��f.�H�CS�>H�8��E���^���H��~и�u���@H��踍��t�1��^����v��H���D$�Y��$踆��T$�$f/�f(�v�\��^�f/�r�\ͥH����X��^�f/�r��X��H��ÐH��(dH�%(H�D$1�H9�tGH�t$H��H��H��H�=�H�$��a�H��uH�T$dH3%(uH��(�f.�����$u�@��ATH��I��USH��H�� dH�%(H�D$1�H��H�|$H�=LH��H�$�
�a�H��L��*H�$�Cm�H��H�߾-H�$�*m�H�T$dH3%(u	H�� []A\��t�ff.����H��(H��dH�%(H�D$1�H��H�|$H�=�H�$/�`�H�|$dH3<%(uH��(��/t�ff.�@��H��H�H�|$H�t$H�|$dH�%(H�D$81�H�D$���H�T$H�t$H�L$ H�D$ -H�='H�T$(�_�H�L$8dH3%(uH��H��s�AUATUSH��H���MH���kH��H��?H��H1�H)�@��u}�E1�H��A�������fD@��tjH��1�H��H���H�H9�ujH��ueH��H��u�H��H��E��HE�H�@H���H�\-H��H��[]A\A]ÐH��?H��I���|����J�H9�wH��H���{���H�@H���L�l6H����w�L��H���t�H�Ã�H��t�H��t��uH���H���x���H���n���H��H��E��HE�H���xw�H��H��H��[]A\A]�S��H���H��[]A\A]�H��H��[]A\A]�;w�H�@H�x�H��H�\?H��[]A\A]�H���w�I���6���fD��@��tH����HE��fDH��������@��t��H��H�����H���(��������H�f�H��(�L$H�|$dH�%(H�D$1��$����4$f��L$�l$�Y�f/��Y����%H�f(�fD(���fT�f.�wm�A\��%8���f/�v*�AX�f(��X�H�D$dH3%(��H��(�@f.�f(��AX�{q�X��^�f/�sef���D�H,�f��fU��D���H*�f(����fAT��\�fV�fD(��X���Df/�wJ�X�f(��h���Du��
f(��,$�DD$�iM��,$�DD$f(��"���@�%(�f(��=�f(�fT�f.�v/�H,�f���=�fU��H*����fT��X�f(�fV�f(��%���\�f/�v�\��f(��X����@f.�f(��X�{Rf(��\��^�f/������fWT��
$�\$�,$�L��\$�,$�\�f(��X��K���t���o����SH��H���h�H��[H���i�@��H��dH�%(H�D$1�H�4$�Oh�H��/H���:g�H�T$dH3%(uH����n�ATH�UH��SH��dH�%(H�D$1�H����H��H��t`��m�I��H9� H��L��H�H��H��H�t�H��H9�~�H�tL���6��H�L$dH3%(L��uHH��[]A\�f.�H��H�$��p�I���H��BSH��H�5~�H�81��kw���m�fD��ATI��USH�� H�t$dH�%(H�D$1��GT����H�T$A����L��H�l$�4fDH��舊�H��H��H�D$�-��e�H�T$H��H�T$H��H�߾<�e�H��t�H�����L��H�L$dH3%(utH�� []A\�D���o���L��H�H�H��H9�|�fDH�|-H�����H9�}���i�H���z�H�L$�L��L��nH���x��|����l�ff.�f���ATI��USH�� H�t$dH�%(H�D$1��S����H�T$A����L��H�l$�4fDH���H��H��H��H�D$�+�d�H�T$H��H�T$H��H�߾>�xd�H��t�H�t$H�����L��H�L$dH3%(uwH�� []A\�����g���L��H�H�H��H9��fDH�|-H��袈�H9�~���Sh�H���Ky�H�L$�L��L��mH���w��y����Uk�D��SH��H��dH�%(H�D$1�H�GH�@ H�@�H�$��g�H����x�H��H��L��lH���Mw�H�T$dH3%(uH��[���j�f���SH���g�H���x�H��L��[1�1�H���w�@��H���@��H���1
H�=��?����H����/R�ff.�@��UH��H��SH����v�H��H���b�H��H���G�H����H��H���C�H��H�5��H��H��6SH�81��s�@��SH��H���7�H��H���9�[��H�H�Ѓ���H����tH��������H9�v.H���@�����H9�v�H��6SH��H�5}�H�81��s�H��6SH��H�5*�H�81��s�H����tH�����v3H���f.�H����v�H�H6SH��H�5��H�81��r�H�-6SH��H�5;�H�81��r�fP��tfW��Y���������UH��H��SH��H���?���r���w%H���v�H��H�5^�H��H��1��7�fD�r���vӍrЃ�	v˄�t�x@u�xt0H���Hv�H��H�5{�H��H��1��a7�1�1���`��H��H�5��H��1��<7�ff.����H��(dH�%(H�D$1�@��ubH��u=H�|$H��H��H�=V	H�$+�)T�H�t$dH34%(uSH��(�@@��u�H���H��
u���dC���f�H�@H�H�WH�x
H�D�H���l���g���H��(dH�%(H�D$1�@��ubH��u=H�|$H��H��H�=�H�$-�yS�H�T$dH3%(uZH��(�@@��u�H���H��
u����(���f�H��H�H9�tH�D?���H�����������k����f�f.���H��@��u3H��u���@��u�H���H��
u�H�����fDH9�tc@��uUH��t>@��tH���H��u,H����fDH���H��
t4H���H��t�H��t�H����f.�1��D��f�H��H���e��DUSH��H��H��?w9�?H��)�H��H��u6H�@��H��H�xSH��H�D[]��H��������?H9�w!H�l6H���j�H��H��[H��]�%�H���`d�H����H��H��[]�j�f.���SH��H����u7H��u�H��H��[�@@��u�H���H��
u�H��[�-�@H��H�t(H���tHH�t;xaH��>~#H��H�����HH��H���@K��fD��H�H�\�@H���{���H��H�t$��i�H�t$H��H��[�1-�H��H��H��[���USH��H��dH�%(H�D$1�H�=W(T�11�I��H��H�5=(T�)����H�$��tWH��t��t=H����H���8�H��H��u:H��8SH�$H�5�H�81��m�H���H����H���`1�H��H��H�k��6�H� tH�kH�CH��u:�H�5N"H���o��u�1�H�L$dH3%(��H��[]�DH���_����H�5+�H���ro��tf�H�5�!H����b���+������H�=���7P�H�'T���H���l���H�������"������N�����b�f��~-�f(�fT�f.=��:f(�f(�f(��\�fT�fT��X��%��fD(�fT��X��D^��^��Y`��]�f(�f����fA/�s}�5u�fA/�f(�wRfA(��\��I�f(�fT�f.�v+�H,�f�fU��H*�f(����f(�fT��\�fV��X��Y�f/��X���f/�v�X�f(��fA/�w��AX��5Ԓf(�fT�f.��5БwV�X�f/��Y�f(��X���f/�v�f/�r��fDf/���%��vv��fT�f(����H,�f��fU��H*�f(���f(�fT��\�fV��z���f/��>���f/��4����+����f/�������������fT�f(��f�PX�1�H����K�ff.�AWI��AVAUATI��US��H��HdH�%(H�D$81���>�LH�1�H�H�L$8dH3%(���LH��H[]A\A]A^A_��o�I��M��Hc�H��H�D$�N~�����I�EI���tuI�EI�$������H��t�H�]$TH�t$L�D$ 1ҹH�D$H�8$TH�D$�^%�H�D$ H��$t3����I�H�D$(H��$�9���I��1����I�$�fDH�D$(H��$������u�H�u4SH�5��H�81��i�@H�|$�0�H�Dž�uI�I�$�9����������1����VJ�H�4SH�5�H�81��h��)_�f�ATI��UH��H��SH���5���P���v�P���w"H���l�M��H��H��H��H�5��1���-��0��	v�H���l�M��H��H��H��H�5��1��-�ff.����H��H��H�6dH�%(H�L$1�H�@��u)H�<$H��H����V�H�L$dH3%(uH���H��H���&����A^���H��H��H�6H�|$H�x��uH�L$���+�H���H�T$������@��tH����H��?H��?���H��H���tu����H��H��?H��?���ff.�@��USH��H��H�l!TH��u H�-��H���J�H�L!TH��t�H��H��H�=z��2�H������HE�H��H��[]�ff.����H����@��tEH����H����H��$���@��u@����D�H��u61��H�����H��u#��u�@��ujH���H��
u^��K��@��u���9�u�H��u��<f�H��tJH��tdH��$t~�@��u�@����D��úH��u���3���c���fD��f���C���fD��y���fD��#���fD��Y���fD��H��H��?@��uGH��u"H��H�o(SH�5��H�81��^e�fD@��u�H�H�ƒ�H��
u�H��
H�������HE�H���f���UH��SH��H��unH�1SH�H��t7@��uqH�MH9�t7��T�H��H����T�H��H��H��[]��U��H�
�0SH�	H9�u�H��H��H��[]�U��@��uJH�WH��t���H����H����@��u^@����H�
�,SH�	�`���DH��tJH��td@��u@��txH��,SH�H���]����!���H�Q'SH��
����H�
A'SH�	�����H�-SH�����H�
-SH�	����H��(SH������H�
�(SH�	�����H�i+SH�����H�
Y+SH�	������H���H��t �Ff.�{	1��fD�u��H���H9�t�H��H��H��?H)�H	�H��H�T$��~D$��f.���H����H��t �Gf.���HJ���H��1�H9�t�H��H��H��?H)�H	�H��H�T$��~D$��ff.�f���H����H��t0�GfTCz���
)zf.�HC���H���H9�t�H��H��H��?H)�H	�H��H�T$��~D$��f.���H����H��t@�Gf(�fT
�y�f.
�yvf��1�f.���H�������f.�H���H9�t�H��H��H��?H)�H	�H��H�T$��~D$��f.���H��H����H��tL�G�b-��H��xH��������?H��H!�H�D�fDH��H��H	�H�D�f�H��f�H9�t�H��H��H��?H)�H	�H��H�|$�~D$�ff.�SH��H����H��H��t<�F�H�߸H����� H���P�H��t�H��H��[�H��f�H9�t�H��H��H��?H)�H	�H��H�t$�~D$�ff.���H����H�����Gf��f/�v"��wf(��%��fT�f.���f/�w%�
݆f/�vf/dž���TG�@��wf(��t�fT�f.�v��H,�f��f(��%e�fU�f(��H*����fT��X�fV��D�H,�f���-/�fU��H*�f(����f(�fT��\�fV�f/��F����f���fDH��H9�uf��H,�H�D�f�H��H��H��?H)�H	�H��H�D$��~D$�����ff.���SH��H��dH�%(H�D$1�����H��uVH���<H��H�$�	#�H��$�J��H���������H��?H��?��H�T$dH3%(upH��[�f���u�H���H��
u�H��!S�<H�8�$���}���H�H��
H�����H��!S�<H�8�l$���N���H��?H���u����T���SH��H��dH�%(H�D$1�����H��u^H���<H��H�$�"�H��$�f��H�������������H�T$dH3%(H����H��[�fD��u�H���H��
u�H�� S�<H�8�#���u���H�H��
H�����H�� S�<H�8�t#���F���H��H��?���r���DH�޺�H�=����(�H���Q����S����H���H��t,1�H��u	��H���t1��DH���H��u�H����H��t`�GH��t�Nf.�z�uȸ�f.�H��f��H9�t�H��H��H��?H)�H	�H��H�t$��~L$��H��f�H9�t�H��H��H��?H)�H	�H��H�|$��~D$��m�����H��H���u#H��uH������@@��uH���H��
u^H��H�����H���H��u�H��f�H9�tIH�ֹH��H��?H)�H	�H��H�T$��~D$��"f.���H��t�H���q����BH���D$��H��t6�G�D$��L$��D$�f.�{	���HD��fDH��f�H9�t�H��H��H��?H)�H	�H��H�T$��~D$��ff.�ATUSH��0dH�%(H�D$(1�H����H��H��I���u4H�؃�H���H��t��t6H���~7�H��H���Q��t�H�M��tH��H��?A�$H���8@H���H��tHH��
u�H���&"�H��M��tH�H��
H����A�$H�L$(dH3%(H����H��0[]A\��C�
w�f/���f/ŀ��f��M��t�
��1�f/�f����A�$f/�r'�
��f/�r�\��H,�H��?�r���fD�H,��b���fDH��H9�t1H�ڸH��?H)�H��H��H	�H��H�D$�~D$�E���@M������1�f��f��g���H�ISH�5B�H�81��8Y��O�H�|$H������H�5O�H��H��SH�81��Y�ff.���AVAUATUSH��PdH�%(H�D$H1�H����H����Gf(�fT
_pf.
Op�!f.��gH�T$H�L$1�1�L�D$��i�T$I����1�1��W
�H�T$I��L)�Hcڃ�����L�t$ �H��L��L���~%�L���F/�D$����9��z�����k���-�D$"0�kL�t$ Hc�L��L���D$!.�
@�D$H�5��L��P�1��5L��h�H�=h��H�T$I��L)�Hcڃ��H���Hc�H���F���L��1��.�D$���\�������d����H�5�L���?�M�l$HcD$L��L��H)�H��T�I�D$I�$ tI�D$�T$Iž0L���Hc��1�H����HcD$H�T$ I)�L��H����@���'H�����
A�M@��tv�T*�fA�T-��i�H��H9��H��H��H��?H)�H	�H��H�D$�~D$�����1�f/}H����	@��H)�H��c�I��H�L$HdH3%(L����H��P[]A\A]A^�@Hc�H�t$ L��H���M>�M�l$HcD$L��I�tH)��SS�I�L$I�$ tI�L$�T$L�9����.0f��{���L�t$ �S��Hc�I�vI�~�a����fDf��������Lc�H�l$ )�J�t-J�|-Hc��*E�SH��L��Hc�B�D, .�=�����fD)�H�Ͼ0Hc��f�H���D$)�H�H��S����H�=�t�
�I������H�L$ I�uH��I�MH�L,H)�I�L-�H��H�TH��H)�H�������H��1�H�<H�<H��H9�r��e����
A�M�T*�A�T-��Q����$K�@��ATUSH��PH�t$H�|$H�|$dH�%(H�D$H1�H�NSH�0�G�H��taH�T$H�t$L�d$0H�=+�H�D$0%L��H�T$8�6�H��H���"�H��t@H��H�\$HdH3%(�,H��P[]A\�H�t$H�|$��l���f.�H�l$@���!H���XH�L$(��<H��H�D$(���H��$�N��1�H�����@�Ņ���H�l$@����H��t@���4@H�L$(��>H��H�D$(��H��$���H�����������t^H�D$H�ƒ�H���H�������H���H�����@fT�jf.�j�}H�\$���H�l$@����H����@����H�E��H��
��H��S�>H�8�����H�EH��
����@�������H�E��H��
�����H��S�<H�8�q���q���H�mH��
H�������DH�aS�>H�8�<����@H�L$(��>H��H�D$(� �H��$����H����������������H�l$@���sH����@����H�E��H��
��H��S�<H�8���tH�mH��
H�����H��L���-H�D$0�F@�H������fDH�E��H��
�����H�hS�>H�8�C�������H�EH��
������H�L$(��<H��H�D$(��H��$����1�H�����@�Ņ���������DH��S�<H�8��������H��?���H��S�>H�8�������1�H�����,���fD1�H�������f.�H��S�<H�8�\���,���H��?�Y���H��H9������H��H��?H)�H��H��H	�H��H�T$�~D$����XF��Uf(�H��SH��H��(f.���f��f(�f.���f.��~-Hgf(�fT�zNuL�5,gf(�f.�fD(��DY�vZfT�f.�wPfA/����MH��t�H��([]�fDf(��5�ffT�f.�vrf.�wlfD(�f(��DY��\��^�H����f(��\$�DD$�$�:V��DD$f���\$f(��$fA/�wi�M�n����f(�f(��t$�|$�\$�$�d"��$�\$f��f(��|$�~-#f�t$�����X��\�t���fA/�w��MH��([]�D�MH������������o����@�ff.���AUATI���UH��SH��(dH�%(H�D$1����H������H�TL�-��H��u"fD�L���31�H��H��TH��t�H��L��H��L�d$H�=_�H�$/�20�1�1�H��H���c<�H�T$dH3%(uH��([]A\A]���C���ATUH��SH�����H��H��I������[L��]H��A\�0>���H��t�����1��ff.�f���@��t&H�������H9�3�H��x)�>1��D�H��t@��uH�H�у�H��
t�1��� �����@��@��uFH��u!H��H��SH�5�H�81��uL�D@��u�H�H�ƒ�H��
u�H��
���1�H�����fD��@��uNH��u!H��H�&SH�5��H�81��L�D@��u�H�H�ƒ�H��
u�H��
H������H��?H�����SH��H��dH�%(H�D$1�����H��uNH���<H��H�$���H��$�z��H���������H�T$dH3%(upH��[�D��u�H���H��
u�H��S�<H�8�c��t�H�H��
H������H�YS�<H�8�4���V���H��?H����nA�ff.���SH�ӺH�� H�|$H�|$H�4$H��dH�%(H�D$1��)��H�$H�|$H��H�L$�H�D$�9�H�\$dH3%(uH�� [���@�ff.���SH��1�H�� H�|$H�|$H�4$H��dH�%(H�D$1�������u#H�L$dH3%(H��u5H�� [�f.�H�$H�|$�H��H�L$H�D$��8�H����V@�fD��H��H��H���uMH��u(�7�H�5�H��H��SH�81��I��@��u�H���H��
u�H��H����f�H9�t@��t%H�H�1�H9���H������H���f.�H��t@��t%H���H��t1��H��H�����H���H��
t$H���H��uH��H�����@H��t��H��H���u�H��tH����HD��n���H������b������ATI��1�UH��SH��H�� H�|$H�|$H�4$H��dH�%(H�D$1��������}�H�$H�|$H�L$L��H�D$�K7�H���H�H�\$dH3%(u	H�� []A\��>���H��H��H����H��tq�G@��u8H��u�>H��H�����@���~H���H��
��H��H���ۂ�u1�H���H�H��H��~�H���H��f�H9�t�H��H��?H)�H��H��H	�H��H�T$�~D$�Y���DH���H���O���H��f��H9�tHH��H��H��?H)�H	�H��H�D$�~L$�!fDH���H��t�H��������Nf/��,����9���ff.���@��u&H��u	��@��u�H���H��
u��1��@��uH��u%�>�K�H�H�H9�~}���H��H��H��@��t H���H��t3�>H����fDH���H��
t<I��A��I��tH��u�H��H���6��H��t)1�H���f�1��DH��H����H���u׸����@��u&H��u	��@��u�H���H��
u��Q��@��uH��u%���[�H�H�H9�|}���H��H��H��@��t H���H��t3��H����fDH���H��
t<I��A��I��tH��u�H��H���F��H��H��u%�H���f�1��DH��H����H��u�1�����H��H��H����H��tq�G@��u8H��u��H��H���x��@���~H���H��
��H��H����u1�H���H�H��H���H���H��f�H9�t�H��H��?H)�H��H��H	�H��H�T$�~D$�Y���DH���H���O���H��f��H9�tHH��H��H��?H)�H	�H��H�D$�~L$�!fDH���H��t�H��������Nf/��,����9���ff.���H��H��H����H��tq�G@��u8H��u�<H��H���(��@���~H���H��
��H��H���[~�u1�H���H�H��H��y�H���H��f�H9�t�H��H��?H)�H��H��H	�H��H�T$�~D$�Y���DH���H���O���H��f��H9�tHH��H��H��?H)�H	�H��H�D$�~L$�!fDH���H��t�H��������Nf/��,����9���ff.���H��H����H�����G@����H��u��H�����fD@����H���H��
tjH���H��u>H��f��H9�t6H��H��H��?H)�H	�H��H�D$�~L$�@H��u��Nf/�s,1�H����H��H��H���|�t�H�H��H��xԸH���f�H��f�H9�����H��H��?H)�H��H��H	�H��H�D$�~D$����H���H���������ff.���@��u&H��u	��@��u�H���H��
u��~�@��uH��u%���{�H�H�H9�}���H��H��H��@��t H���H��t3��H���6�fDH���H��
t<I��A��I��tH��u�H��H���f{�H���t)H��t#1�H���1��DH��H���	�H���tݸ����@��u&H��u	��@��u�H���H��
u��}�@��uH��u%�<��H�H�H9�}}���H��H��H��@��t H���H��t3�<H���F�fDH���H��
t<I��A��I��tH��u�H��H���vz�H���t)1�H���f�1��DH��H�����H��u׸����@��tH����H��?H��?���H���M����H��H��?H��?���f���SH���D$fH�=�SffH���H�5`SH�6H�8����D$H��H���@�4�H��H��[�fDATI��UH��SH��dH�%(H�D$1�H��$��H�
�H���8�H���^I�$H����H�$����H��u[H���>H���F�H��$�81�H�������H�}��H�T$dH3%(���H��[]A\����u�H���H��
u�H��S�<H�8�����x���H�H��
H�����H�
������H������H�sSH�5J�H�81��b=�f�I�$�H�$H�|S�<H�8�W������H��?H�}�*�����u��T�?��H�E����fD��c�#����H�:SH�5��H�81���<��D3�H��跺�����H���S'��
Kc��H�0fH~�H9�tRfH~�H��<������tH��H��u/H���f.�fH~�H��H��H��H���f.�H���g�����H����&��
�S��H�0fH~�H9�tRfH~�H��<������tH��H��u/H���f.�fH~�H��H��H��H���f.�H���������H��@��tbH�f��H*�H�0fH~�H9�t2fH~�H��<������t~H��H��uH���f.�H���g���H��t@��t%�)�H�5�H��H��SH�81��;�DH���H��
u��o3��d���f.�fH~�H��H��H��H���f.���SH��H�� dH�%(H�D$1�@����H�f���H*�H�؃�H�����CH�t$1����D$H�0fH~�H9�t[fH~�H��<��������H��H��u4H�L$dH3%(�1H�� [�f�H��u�%H������@�#���Ő@����H���H��
��H���H����H��u�H���N��H���-���H��f�H9�����H��H��H��?H)�H	�H��H�\$�~D$��@fH~�H��H��H���&���f�H���H���5���H��f��H9������H��H��H��?H)�H	�H��H�t$�~L$�q����H���p1�f(��Y����R/�f���H��H����H����W@����H�f��H*�f��f.�ztQ�^�H�0fH~�H9�tQfH~�H��<�������H��H��u*H���Df��f�f.��>�8��Of(�H���[��H��u�/H����D@����H���H��
��H���H��uzH��H9�t�H��H��H��?H)�H	�H��H�D$�~D$�����H��f��H9�����H��H��?H)�H��H��H	�H��H�D$�~T$����H���C����F���@fH~�H��H��H��H���f�H���T$�/��T$�z����H���H������!���f(�f(��[��f(��U���f���SH��H��@dH�%(H�D$81�@����H�f���H*�H�؃�H�����CH�t$ H�|$���D$�
<]f/�vf/&]����D$ H�D$(H�0fH~�H9�ttfH~�H��<��������H��H��uMH�D$0H�t$0H�|$(�)'�H�L$8dH3%(�bH��@[��H��u#�H���v���@����f�@���H���H��
��H���H��uzH��f��H9�����H��H��H��?H)�H	�H��H�t$�~L$���f��H,�H�D�����fH~�H��H��H���
���f.�H���3���H���N��H���c����H��f�H9��P���H��H��H��?H)�H	�H��H�\$�~D$�+���@H���H-�f(������H���H�����������+�ff.�@����H��u�-���SH��@����H���H��
��H���H��uEH�f�H���H*�H9�tAH��H��H��?H)�H	�H��H�t$�\D$�H��uzH�f��H*��\FH�0fH~�H9���fH~�H��<������t}H��H��u^H��[��H��H)�pmH���H���H���;���H���-[��H�H���.�H��H��H��[���DH��[�v��fDfH~�H��H��H���|���H�H��?�.�ff.�f���@��u6H��u�-�
��@��u�H���H��
u��9��f��;���ff.���H��@����H��u�-H���+
�@����H���H��
��H���H��uBH����H���z�GH�����\FH�0fH~�H9�ucH���a��H���}���H����H��u��-DH����H�����GH�f��H�0�H*��\�fH~�H9�t�H��H��<������tH��u�H��H��ÐH��H��H��H����H����H����_�\$H���)��T$H�0�\�fH~�f(�H9��x�������f.�H��f�H9��.���H��H��H��?H)�H	�H��H�D$�~D$�	���@H���H���G����y���H��f�H9��t���H��H��H��?H)�H	�H��H�D$�~D$�O���@H��H9��G���H��H��H��?H)�H	�H��H�T$�\D$�"���H��f���d$H9�����H��H��H��?H)�H	�H��H�D$���@��H��@���~H��u�*H���
�@���fH���H��
��H���H��u*H����H���R�OH�����F�=@H��u�H����H��u��!�H����H�����OH�f��H*��Y�H�0fH~�H9�tdH��H��<������teH��uMH��H��ÐH����H���0�_�\$H���'��YD$H�0fH~�H9�u�H���*��f.�H��H��H��H����H��f��H9��6���H��H��H��?H)�H	�H��H�D$�~L$����@H���H���o������H��f��H9������H��H��H��?H)�H	�H��H�D$�~L$�w���@H��f�H9������H��H��H��?H)�H	�H��H�T$�~D$���@H��f���d$H9������H��H��H��?H)�H	�H��H�D$���@��H��@���~H��u�+H���+�@���fH���H��
��H���H��u*H����H���R�OH�����F�=@H��u�H����H��u��!�H����H�����OH�f��H*�H�0�X�fH~�H9�tdH��H��<������teH��uMH��H��ÐH����H���0�_�\$H���-%��XD$H�0fH~�H9�u�H�����f.�H��H��H��H����H��f��H9��6���H��H��H��?H)�H	�H��H�D$�~L$����@H���H���o������H��f��H9������H��H��H��?H)�H	�H��H�D$�~L$�w���@H��f�H9������H��H��H��?H)�H	�H��H�T$�~D$���@H��f���d$H9������H��H��H��?H)�H	�H��H�D$���@H��@����H��u�+H����@��tZH���H��u�H�f�f��H���H*�H9���H�ʸH��H��?H)�H	�H��H�L$��~L$��m@H���H��
��H���H��t�H��t6H���f���H��H����
�f�H��H���H����H�f��I�H*�H�0�X�fH~�H9�t'fH~�H��<������t+H��H��u��S��H��H���5��DfH~�H��H��H���H�H��H��?�~%�ff.���@��u6H��u�+�W��@��u�H���H��
u����f��K���ff.�H��(dH�%(H�D$1�H���ttH���w`�H�H�H��H9�u-H���u'�H�L$dH3%(�zH��(��H��H�H��H����H��H��?Hք�HD�H�D6�H��ts@��u]H���H��
��H���H��uyH��f��H9�tqH��H��H��?H)�H	�H��H�D$�~L$�J�H���H��t�@�%���1���f�H�����U���DH��u��NH�f�H�t$�H*�1��]���D$H�0fH~�H9�t'fH~�H��<������t?H��H��������'�����f�H�H�t$�s#�H�t$H���6�����fH~�H��H��H���r����%�D��@��u&H��u	���@@��u�H���H��
u�������ff.���UH��SH��H����t[@����H��t4@��u.H���H��
u"H��H��"�H��H��H��H��[]�[o�H��H��H��[]�W���H��t��t�H��[]�f.�H���H��
u��f�H���8���H��t�H1�y�H��H��H��[]��ff.����H��H����@��txH����H�����_H�f���H*�f(�f(��
�H�0fH~�H9���H��H��<�������>H��upH��H����H��t@��t]H���H��tq��H���{�H����H�����G�Y�H�0fH~�H9��u���H������fDH���H��
��H���H����H����H�����_H���Y�Vf�f/����f(��\$�$�,��$�\$f.�z����fW�Kf(��$f(��	��$H��f(�����H��?H��H��H��H���DH���F�������f�H����H��� �_H���$���$f(��)���H��f��H9�����H��H��H��?H)�H	�H��H�$�~$���fDH��H9�����H��H��H��?H)�H	�H��H�<$�~$�G���f.�H��H9�����H��H��H��?H)�H	�H��H�$�~$�v���f.�H��f��H9��F���H��H��H��?H)�H	�H��H�$�~$�#���fDH��f��H9�����H��H��H��?H)�H	�H��H�$�~$���fD��H��@��u3H��u�*H����@��u�H���H��
u�H���.�fDU���H�������H���H��
�VH���H���H��f�f��H��H*�H��H9�t,H���H��H��?H)�H	�H��H�D$��~L$���Y�H�0fH~�H9���fH~�H��<�������H��H����]��H���H���R����*H��]��f.�H��H�E1�I�@H�H��H��H��I�H��H��������I�L9ȸL��}H��]H�D	�f�H��tJH��u�H��]H������]����f.�H��tJH���?���H��]H����,�@H�f��H�H*�����f.�H��]�S���]�fH~�]H��H��H���fD��SH��@dH�%(H�D$81�@��uI�H��uH�L$8dH3%(�tH��@[�D@��u�H���H��
u��Q����H���t@H����W�H��H��H�H�H9�uNH���uHH�@�	�H���o@H��t@��tuH���H����D�����J����H��H�H��H��H��H��H���H��H��?I��E��tH�
H�w�H�|6H�\H���
������H���H��
��H���H��� H���v����NH��f�H�T$H�H�t$ H���H*�����D$�
BFf/�vf/,F�����D$ H�D$(H�0fH~�H9�tzfH~�H��<������t|H��H��uWH�D$0H�t$0H�|$(�3��'���fDH��A����@H�H�t$��H�t$H���~���f������H,�H�D�Q���fH~�H��H��H����H��f��H9�����H��H��H��?H)�H	�H��H�D$�~L$������f.���H����u4H��u��f�@��u�H���H��
u���f�SH��H��H�H����tMH�H����H�����H������H���H���`H��[隠��f.�H��uH��H�ߺ�[�9��f�@��tJH���H��u�H��H9���H��H��H��?H)�H	�H��H�$�~$�4fDH�H�ȃ�H��
��H���H��t�H���l����Vf�f.��pH���*H���Df���H*�H��y/f(��\$�$�$��$�\$f.��B�<f(�f(��W�H�0fH~�H9���fH~�H��<�������6H����H��H��[�fDH��t:H������ ��H��H��t�H�4$���H�4$H��H��[��D�뭐��H��H���H���DH�@H��H��H9�xEH�t?H��H��[�f/��Y����W3H��[���H���I���H����:����9�H���H���� ����{����fW�Af(��$f(����$H��[f(��[���H���\��H��H��H������H���H��H��H�H������SH��H���(R�H�����H�ƒ�H����H��uH��H�ƿ[��f��u�H���H��u��HH�f��H*��Z���
:AH�0�^�fH~�H9�t*fH~�H��<������t^H��H��uH��[ÐH��f(�[���f�H��H9�tAH��H��H��?H)�H	�H��H�D$�~L$�a���@fH~�H��H��H���DH����@��H����H��t`�GfWS@H�0fH~�H9�tVfH~�H��<������tH��H��u3�fH~�H��H��H���fDH��H9�u�!A���@H��H��H��?H)�H	�H��H�D$��~D$��`���ff.���H���4���@��H��H����H�����Gf��H���H��ts�Nf.�zty�^�H�0fH~�H9�tyfH~�H��<������tH��H��uVH���fDfH~�H��H��H��H���f.�H��H9�uqf��f.�������/H�����@H��H9�t)H��H��f��H��?H)�H	�H��H�D$�~D$����f��f�����H��H��H��?H)�H	�H��H�D$�~L$����C������ff.���H��1�dH�%(H�D$1�H�������$H�D$dH3%(uH����
�ff.�@��f.�z&u��f/��w�1�f.���H�D���@��f.���ATH��U��SH��H����Gf.���H��H��@����H����f(�fT
�.f.
�.�zH�+�SH��u3L�%L���	L���D$�5���D$H��H���St�1�1�H��H���D$���H��$�H������D$�b1�f/�<��H������H��[]A\�@@��uzH���H��
��H��H���?Q�t�H��H��H��[]H��A\��H��H9���H��H��?H)�H��H��H	�H��H�D$�~D$���DH���H������H��f��H9�t%H�ڸH��H��?H)�H	�H��H�\$�~L$H��[]A\��f��Z����H��H��H�ﺇ[]A\� ��H���H��t�H���>����KH��[]A\�������fDH��H��H�����1��D$����f/m;w�ЙHc�H�D�~���ff.���H����H��th�GfTS,H�0fH~�H9�t?fH~�H��<������tH��H��u�H��H��H��H�������H��H9�H��t�H��?H��H)�H	�H��H�T$��~D$��i���@��H���D���@��f.�:{
鍧��Du��v+�ff.�f���AUE��ATA��UH��SH��H��H�؃�H��8H��tWH����H���H��tBH����@����H����H��t#H����@����H���H������H���D$����D$H��u	E����H������DL$f��fDT
�*f(��|$f.��8�T$�D$f(�D���\$ �d$�t����d$fD.
m*f(��\$ ��I�01�f�H��f/����@f/�����tf(�fH~�L9��fH~�H��<��������H��H����H���\$(H���L$ �d$�%�f��L$ �d$�H*��\$(f/��-�t$�Y�f/��XD$�b���f/����]������7���H���H���u����"�������H�T$H��H��<��fD.
J)��H�0H9��a�����hH��H���Bf.�H����$���\$(�L$ �d$����\$(�L$ �d$���f.�ztIH�T$H��H��<��H�0H9��������H��H����H���g$�H��8�[]A\A]�fH~�H��H��H���j���H�E��H���P�������H����H�������6��H���D$�(���D$�E���H��81�[]A\A]��l$f��f/�fD(�fDT
�'w
�%�'�-����%�6�0����D$�]��H�����H��H��H��H�����H��H��H��H�������D$�"�����ff.�f���AVAUATI��U��SH��H��PdH�%(H�D$H1�����H�D$($������H�L$ H�T$L��L�D$(�)���H�|$(H��$��H�|$ H���'H�D$ L�-+�RH�|$I�uH��t�g�H��tI�uH�|$ �T�H����H�D$H�D$0H�D$ H�D$8�R�H���J�H�L$0E1�H��L��H���K��H�L$HdH3%(�0H��P[]A\A]A^�L�t$ L�l$��L��L�D$(L��L���K���H�L$(L��L����	��H�|$ ����h��H�ك�H��tmH�T$ H���2����H�t$E1�1�H���t������)H���Y�������H������H�z�RH�5�H�81���f�H�t$H�T$ H���H����H���@��t`H����@��������H�I��H�I�I��I������L9��\���K�|$M��!�M9�}��E���H�|$ ����H���H��u��Ff(�fT
%f.
�$�u���fP�������a���H�������H�t$E1�1�H���K���������H�l$0fDH��� �H�D$ H��H���+H�D$0���H����E1�1�H��������������I��H�l$0M�A��I��<�*L���7 �H�D$ L��H���+H�D$0��I��H�D$H��L��L��H�D$0�h��H�����t�����H��H��H��H��H������L�t$ L�l$��H���|�H��I��L��jL�I	��H��AVH��AU���H�� �$���H��H9�����H��H��?H)�H��H��H	�H��H�D$�~D$�^���L9�����K�|$M��>�M9�~��h����������_�����f���AWI��AVAUA��ATUH��SH��H��8dH�%(H�D$(1�����@����H�؃�H��t����H���H����L�����H���D$���H���$���T$�$f.�1��D��膞��f(�fT
�"f.
z"���
�1f/����H,�L�dH�L$(dH3%(L����H��8[]A\A]A^A_�f.�H�؃�H���F���H���$���H���H���-���H��t
@���L����H������M������L�����L��H���-���������H�$>L�t$ H�4$�H��L��H�l$ ���H������ZA���������`���I��I�tUH�H�M���H��H)�A��H��H��x�H�I��H�xH��������?H9���L�d?�����d����� 腽�I�����DH�E��H�����������f��k��I���c���A������I���H�����������H�$<����;��I���#���H�0fI~�I9��q���fH~�H��<��������M���P���I������H��I��H)����f.�L���-H��L�|$H�\$ �Q��H�L$���
H���:��I��E��tYL���*H��L�|$ ���L��H�߾+H�D$ ��H�4$L��H��H�D$ ���H������)���L��L���+H�D$ ��I������I��I��I�������ff.�f���H� tH��H�61�H���������fDH�v ��f���H� tH��1ɺH�6���H�v 1ɺH�6���ff.�f���H��8dH�%(H�D$(1�H��tEH��@������H����H��t@��uH���H��tKH��
t+���H��H��u�H���RH�5�H�81���D���H�L$(dH3%(u{H��8��G�
I-f/�vhf/3-r^�H,���f�H��H9�u	1��DH���H��?H)�H��H��H	�H��H�D$�~D$�fDH��u�����H�D$H��H�����H�54�H��H�r�RH�81����S�
G���@��u#H��uJ1�1Ҿ����t`H�f���H*�f�1��*��Y�[�\�f/����f�@��u�H���H��
u��	h�f���H*��fDH��� ��f���H*��D��ATU��SH���N�����t
�[]A\�ݿ
I��Hc����H��A��t���H���H��t�H��t@��u
H�E��H��t�H��H���.��M��u)H��t��tH���RH�5W�H�81����H��H��?H��H�ƅ�toH�����H��[]H��A\����H��H�H�xUH�H��H��H�@H�xUH�D-����H�H�у�H��
�n���H��
H�����H��[]A\���@H��H�H��H��H����[H��]A\��ff.����SH��H����u7H��u�H��H��[�@@��u�H���H��
u�H��[鬹�@H�t;H���t[H�xH��[���@H��H��>~'H��H�����HH���H���0���fD��H�H�\?�t���f�H�t$���H�t$H��H��[�$��@H��H��������H��H������ff.���1����D��ATH��I��1�U1�SH�� dH�%(H�\$1�H��ueH�l$H��L�D$H�D$$H��H���4���H�L$H��H�މ�����H�T$H�4$1�L������H�L$dH3%(uOH�� []A\�fDH�8�� u%H�PHcʉ�H9���9�H�p �u���f.�H��H�p���[����{��ff.���H����Hc�H9��B9�H���f���H��@��tH��H�Hc�H9��#9�H����s������UH��SH��H���[�H����8�H�Ǩu���H��[]�fD����H��[]�ff.����S��w=H�Ӆ�uH��[�f.�H�>@��t����y�H�߉�[�����+����蔖��@H������w/��u	H���@H�>@��t�Z��H���D����H����Q������SH��dH�%(H�D$1�H�t$譥���t$H��H���>���H�T$dH3%(u	H��H��[������@��tSH��H��?H���H������H��[�@������H�����H��H9�uH���H����}��ff.�f���H��@��tH��H�H��H9�uH���fD����H���}��f���SH��dH�%(H�D$1�H�t$轤���t$H��H��讌��H�T$dH3%(uH����[������@��tSH��H��?H���H���q�����[�D�3����@��tH���f�H�����H�@H�x
H�|H��H���H��H���RH�5ʋH�81������H��8dH�%(H�D$(1�H���5H��@��uF��H����H��uH��RH�5
�H�81���@��t2H��t��w����H�H�L$(dH3%(��H��8�H���H��u4�G�
'%f/���f/
%���H,���H��
t"H��u�H�-�RH�5F�H�81����@����r���fDH������_���H��H9�t)H��H��?H)�H��H��H	�H��H�D$�~D$�R����1�����H���RH�5��H�81������H�D$H��H���|���H�5}�H��H��RH�81��q����H��8dH�%(H�D$(1�H���1H������H����H����H��u-�����H�H�t$(dH34%(�H��8�@@��u�H���H��uN�G�
9�f/���f/�#��f/A#rG�
w#f/�r9�\��H,�H��?널H��
�i�������o���@H��H��`���D�H,��Q���fDH��萷��>���H��H9��(���H��H��?H)�H��H��H	�H��H�T$�~D$�4���H��RH�5�H�81�����p��H�D$H��H�����H�5Y�H��H�W�RH�81����D��@��tH�����HE��fD�k`�ff.���@��t��H��H������`�ff.���AUA��ATUH��SH����=p���tvA�ą���=o����Hc�H��1��-��H��H�pH� tH�pD��H��U0H� H�{H�suH�H���$��A9�uH��H��[]A\A]ÐH�{��H�K�RH�MD��H�5�H�81���H�,�RD��H�5�H�81�����H��A��I��H��dH�%(H�D$1�H�t$I���r�����t>H�߽RH�8A��tL��H�5��1�H��J��f.�H�5��1��2��f�E��u+�D$=�wX�D$H�|$���wm���%fDA��uqI�:��H��t]�|$H���q��H�L$dH3%(uWH���@����H��u�H�/�R�T$H�5�H�81���f�����f����뜺1�D���������D��@��t&H�@H�H��H��H9�xH�D���:�H�����U��SHc�H���
H����{��H���tp�t<H�H���H��H�H��H�@H��H���H��H�D[]�DH��H��?��uuH��H���H��H��[H��]�Y��f�H��t+��u&H�H�ƒ�H��
uH��
H�����f.�H�i�RH�5��H�81��X���H������H��H���]���H��� ��H��H���eH��H������H��[H��]���@H��H�+H�H��H�@H��H��H�����H��H��[]�d��@��UH����S��H��H��(dH�%(H�D$1�H����Wf�f.������f(�H�|$�T$�r��L$�T$�������ك�9��`f���l��T$�*������T$�-�f(��
��Y�f(�fT�f.��
�v+�H,�f��fU��H*�f(����f(�fT��\�fV��X��^�f/�v�^�f(�H�0fH~�H9��fH~�H��<�������H����H���`f(����f(�fT�f.���
�f/�vf/�r�H,�H�D�fD�c�����H�t$dH34%(��H��([]��l������~�H�0fH~�H9�t!fH~�H��<�������EH���5���H�D$dH3%(�`H��(f(�[]�ɩ�f�H��H9��}H��H��?H)�H��H��H	�H��H�T$�~T$���D�H,�f���%�fU��H*�f(����fT��\�f(��
�fV�f/���������fD���HO�����H��������ȺVUUU����)Ѓ�9�}�f�f/��k����ɍAH����9������Q����H�D$dH3%(uHH��(f(�[]鱨�H��H��H��H���Q���@H�t$dH34%(uH��(��H��[]���������SH���#�H��[���X����H��@��tnH����H�H�H��H9�uH���uH�@H���n��fDH��H�H��H��H����H��?��H�O�HE�H��H�D?�@H��uH���*��f.�@����H���H��
�H���H����H��/�4H�f�H�0�H*�fH~�H9���fH~�H��<�������=H��H����H������@H�����5���DH���H���=����u���H��u:H��/�l����Ff.;���/���1�H��H������DH�����H��/���H��H�H������H��H���XL�H�H�t$����H�t$H��H����H�t$�h��H�t$H������H��H9�u	���@H��H��?H)�H��H��H	�H��H�D$�~D$� ���H��H��H��H��������������@��u&H��u	��@��u�H���H��
u��Q��/�f���fD��@��u&H��u	�\���@@��u�H���H��
u������
�&���fDAW��AVHc�AUATA��UH���
SH����s��H��H���H�D$t	���H�؃�H��tqH��u[�H���f���H��H��I���(��H��I��H��躽��L��L��I���ܦ��H����t8H��L��[]A\A]A^A_�fD��u�H���H��u�A����A����E���H�|$��H���8@���.H�EH�ƒ�H��
�H��
�����s���H��H��L��[]A\A]A^A_�*��f.�H�H��H��?H��H�H��H��?H1�H�H)�H�A��tGE��urH�H�H��H��H��H��H��H��HH�H�@H���L�l?���f�H�H��H�H��H��H��H)�H�H9�u�H��H��H���fDH�D�H�H��H��H���DH�|$��H��t@��uH�EH�ƒ�H��
��DH��RH�5�wH�81����H��[]A\A]A^A_�}��DH��L���]����t:����������@1�H�������f.�H��?����������H���WS�������g���H��
H��H������f.���AWAVI��AUA��ATI��USH��(dH�%(H�D$1������H��1�E1���H���B�AT$f��f.��-���e�?f(��
�fT�L��f.��H�L$dH3%(H���H��([]A\A]A^A_���_�Hc�H�<�H�<$�
�H�<$��u5D��D���`I�>@����ݾ���f��[��H�Ņ�u�H���H���"��A��L���H���
���H��I9��L��f��H��?H)�L��H��H	�H��H�$�~$f.�������������������A���E���Uf(������
Lf/�vf/6��H�D$dH3%(��H��([]A\A]A^A_����k�������@H�0fH~�H9�t,fH~�H��<��������H��uH���2���H�D$dH3%(�Qf(�H��([]A\A]A^A_���DH��H9��������A�����f(�H�|$�$譤�L$�$���b���ك�9����������f������$�*��	��A���$��E�����D$�Y��$�}���\$�$�
�f.���f�f(�f/����X%�b�^�f/�r�X��^�H�0fH~�H9�t!fH~�H��<�������(H�������H�D$dH3%(��������fDL��������H��H�����������H�D$dH3%(u�H��(D����H��[]A\A]A^A_�����
�f(��j�����E1�����ȺVUUU����)Ѓ�9��A����ɍAH����9�����y���L��������#���H�D$dH3%(�6���H��(L��L��D��[]A\A]A^A_�7�H,�H�l�����
6f(��n�����H��H��H��H�����f(��$f(���i���$�x���f(��$f(��^n���$�\����V����)���f��\%�`�^�f/��2����\��)������1��������UH��S��H��H������H��H���H��[]�v���fD��AUATI��U��SH������H��L��[]A\A]�D�_�I��Hc�H�<�H�|$�	��H�|$��up��f�����I�}@��tm�ع��E1�H��tH���5z��A�Ņ�y���L���T���uPH��D���L��[]A\A]���f����H�Ņ�u�H��L��[]A\A]�fD����f�A��"������1����U��D��ATI��U��H��S���L���H����H��[]��A\�����S��w=H�Ӆ�uH��[�f.�H�>@��t����y�H�߉�[�3��k������|��@U��H���
SHc�H���j��H��@��t�t;H�H���H�D+�H�H��H��H�@H���H��H�D[]�f�H��H��?����H���i�H��H������H��H���s��H��[H��]�E�DH��t+@��u%H�EH�ƒ�H��
uH��
H������H�y�RH�5oH�81��h���H�߾�C���H��H���h���H��H���}�H��H��H��[]����@H��H��H�H��H��H�@H��H�����H��H��[]���D��UH����S��H��H��(dH�%(H�D$1�H����Wf�f.��~����f(�H�|$�T$蒞�L$�T$���p���ك�9��Pf������T$�*�����T$���%��Y�f(�fT�f.�v3�H,�f��f(��-�fU�f(��H*����fT��X�fV��^�H�0fH~�H9���fH~�H��<��������H����H���^�f(��D��f(�fT�f.��
�
2f/�vf/r�H,�H�D�fD������H�t$dH34%(��H��([]���|������~�H�0fH~�H9�t%fH~�H��<�������%H���/���@H�D$dH3%(�<H��(f(�[]��DH��H9��}H��H��?H)�H��H��H	�H��H�T$�~T$����D�H,�f��f(��%�	fU��H*����fT��X�f(��
�	fV�f/����������fD���HO�����H��������ȺVUUU����)Ѓ�9�}�f�f/��{����ɍAH����9������a����H��H��H��H���i���@H�t$dH34%(uH��(��H��[]�H��������SH���s�H��[��������SH��H�Ӄ�H��H��t(�BfP��t*�6�H��H�߉�[�G����H��H9�u��H��H�߉�[�=�DH��H��?H)�H��H��H	�H��H�D$�~D$���UH��S��H��H�����H��H���H��[]�F���fD��ATI��U��H��S���L���H���~�H��[]��A\�����S��w=H�Ӆ�uH��[�f.�H�>@��t�²��y�H�߉�[���K�����v��@��H����@��H��XH�dH�%(H�D$H1��F���"��H��H����A�xuI��Hc�L�
M�BA�f�H��I��H��1�I�x�H��Hc�A�A�P�H9�s�E��u(I�rAH)��L��H�|$HdH3<%(uYH��X���G�-I�x���fDH��A��}���f��H�=���/���H���R��H�5��H�81��3�����ff.���H��H�H��	wH�i�SH���@�
���fD��@��u&H��u	���@@��u�H���H��
u�������ff.���S��wFH�Ӹ
��u
H�߉�[�f�H�>@��t���H��[���f.��{��H��[���p�����t��ff.���������ATUH��SH��H����uLH��u,@��tPH��H��螹�H��[H��]A\���fD@���H�E��H��
�]H��u/���H��t	�����H�H��[]A\��H��H������I��H��H�����t�@���KH���V���@����H�E��H��
�H���H��tH���%���H�f��M�H*�f��f.�z�]�^��a���f�H���H��
�@���H��H��H��[]A\�
(�D@������H���H�������H�f�H���H*�H9���H��H��H��?H)�H	�H��H�l$�~L$�S���D@������������H��L�����H��L��H�����H�������H��H�����H��H���8���H�������H��H�H��?H�H��H1�H)�H9�~���H��H�����H��H�����f��f��f��H*��H*�f.���������f��f��f.�{%H��[]A\�j��f�f�H�f��f���H*���������f���@��u H��u	��@��u�H���H��
u�H������H�0fH~�H9�t)fH~�H��<������t%H��H��uH��ÐH���G���fH~�H��H��H��H���f.����^�����UH��SH��H���k���H��uEH�ڃ�H��tIH��t4��u/H���H��t3��tF��uH��H��H��[]�(��H��[]�f�H��H��H��[]鿴���H��H��H��[]������@��u&H��u	��@��u�H���H��
u���H��H��H���D��H������ATI��UH��SH�� dH�%(H�D$1�H��H�$�H�|$H�{H�t$H�s�Y��H�T$H��H�t$H�=�r���B��H��$tH�L$dH3%(uH�� []A\�L��H���XX��������H��@��u3H��u���@��u�H���H��
u�H������fD�uH��t�t3�&H������fDH�@H!�H�H�x+H�D?�DH���H��
u�H��H�����f��K��ff.���SH��H���p��H��H���5����tH��[��H��?H��?���DH�����[����H��?H��?���ff.���SH��H�����H��H�������tH��[��<H����H���(��[����<H����f���UH��H��SH��軵�H��H��H���}���H��H��H��[]�|h��ff.����H��@��u3H��u���@��u�H���H��
u�H���V��fD�uH��t�t3�^H���F��fDH�@H1�H�H�x+H�D?�DH���H��
u�H��H����f����ff.���H��@��u3H��u���@��u�H���H��
u�H������fD�uH��t�t3�|H�����fDH�@H	�H�H�x+H�D?�DH���H��
u�H��H���y��f����ff.���SH��H��H����t)H�xH��>~H��x�[�f�H��s�[�H���x��u�H��� u���f.���AUATUSH��8dH�%(H�D$(1��G�����H��L�&����H�L$H�T$L��H�t$�P���t|H�t$H���
H���g��L�d$L�l$H�L$ ���H��L��L�l$ �\��H��tnH��L��L���h��H�|$H��t���%��uI�T$����L�d$���?�H��t%��u H���H��
uL��H���Q5�H��fDH�\$(dH3%(H���H��8[]A\A]�fDH�nH��L����f��H��H�����H��H���K���H���fD��f�H�l$@���H����H�L$��<H��H�D$舙�H��$���1�H�����@�Ņ�u��D$H�|$�������H��H��������H�������f���H�O�RH�5�bH�81�����fDL��H���}���H������D@���N���H�E��H��
�=���H��R�<H�8����!���H�mH��
H�����C���DH���������`���fDH���R�<H�8�t�������H��?������V���H��H�D$���f�H�t$�����L$��tH������H��H�����H������H�������ֺ��U���@����@��u&H��u	��@��u�H���H��
u���5�H�@H��H��?H�H1�H)�H�x	H�D�H�������H������@��u&H��u	��@��u�H���H��
u��!6���f.���H������H����u4H��u��f�@��u�H���H��
u��	6�f�H��H��?H�H1�t�H�Ҹ@H��?)�H�D�ff.��AWAVAUATI��USH��H��(dH�%(H�D$1�H����@��������H��H�H�����uH�H�ƒ�H��
��A����H������L��H������H��H���P��eH�����H�������H�D$�!fDH�|$H���K��H��H��耮��H��L��H��袑��H��t�H�t$�L�d$���H��H�@H�$DH�D$H��� �wH����H���H�|$���I��H�E�� �]I��I��A��I��x�L���g�H�$H�<�L������H� ��H�HH�PL�qL�<I9���H����L��L��H��H���.��H����L���H�E�� u�H�E �H���H��
�\���H�����H�è�R���H��t��uH�H�ƒ�H��
u	�� �A���X���H�t$�L�d$����H��H�L$dH3%(H���H��([]A\A]A^A_�f�H�H L�<H�L�qI9�����I�wH���\�������H�D$H�@���f�L�e�������H���L��H��轮��I��H�@I�$ uI�D$ H�pH���+��I�$ t!I��M�$$A��t�I����)����M�d$ ��� �H���H�ɚRH�5�XH�81��h���H��L��H��"W��H���������H���RH�5@WH�81��-��ff.�f���AUI��ATI��U��SH��H��dH�%(H�D$1�A����H����H���<H��H�$��H��$�@�H������������������
����M���
�H��u H�L$dH3%(��H��[]A\A]��u�H���H��
u�H�t6H��������S���H���H��
�C���H�X�R�<H�8�3����'���H�H��
H�����G����H�!�R�<H�8�����H��H��?�����I�}自�uCH��t�trI�}葻�H�5r[H��H���RH�81����fDH���HU�����t@H�H��xH������H��H���RH�5RUH�81��?���H���H��
u�H���H��
u�H��H���u�������1���肮�H���RH�5�VH�81������U��H�.�RH�5YVH�81�����ff.�f���H�����@��H�������H9�v]H�׹@H��H��?)���H��H���?)�1���H��H��H��H9�vfDH�1�H��H��H��H9�r�H���f�f�f���H*�f.��Q�w9���f/�s�H,�H��H��H9�H��H���@�\��H,�H��?��H��H�|$�$����$H�|$���f/�s�H,�H��H��H9�H��H��H����\��H,�H��?��f.���SH���S��H�ètH����H��H����[H�DÐH���8�����H�H��@tBH����H��t?H��u@H��tKH���;�p���H��������?H9�wAH�D[�f.�H�CH��u��[�H��[�G0��H�[�f.�H��[���H�x�RH�5�XH�81����ff.�@��AU�H�=��ATUSH��(dH�%(H�D$1����H�=p�H��S�٭�H�=�zH���S��H�=�SH��SH�t�RH�0���H�
�RH�=�SH�H���RH�0�ԛ�H��RH�=�SH�H���RH�0贛�L�%��R�H��U��H��H�5�SI�$�N��H���RI�<$H�0蛐�I�<$�H�{d��H�5�����H�XMI�<$�����H�5ʥ���I�<$1�H�VU��H�5h����I�<$1�H��K��H�5<(�љ�I�<$�H��F��H�5��赙�I�<$�H�Eb��H�5��虙�I�<$�H�yP��H�5�>�}��I�<$�H��z��H�5�>�a��I�<$�H�q{��H�5k>�E��I�<$�H��I��H�5���)��I�<$�H��I��H�5E>�
��I�<$�H��s��H�5g����I�<$1�H�$j��H�5�=�ؘ�I�<$1�H�j��H�5*>还�I�<$1�H��S��H�5��覘�I�<$1�H��L��H�5�Q荘�I�<$1�H��`��H�5�Q�t��I�<$�����H��H�5�=�X��I�<$�����H��H�5o=�<��I�<$�����H����H�5_=� ��I�<$�����H���H�5N=���I�<$�����H�����H�5-=���I�<$1�H��F��H�5d=�ϗ�I�<$1�H�h��H�5U=趗�I�4$H�=�O���H�-G�RH��H�E���H�}H����H���RH�8H���RH�5IfL�l$����H�}�H�4���H�5J��Ȝ�H�}�H�hR��H�5�謜�H�}�����H���H�5����H�}H���H�5��虻�H�}�H�Y�H�5<P�ݖ�H�}�H���H�5)P��H�}�H�q�H�5P襖�H�}�H��O��H�5P艖�H�}�H��N��H�5�O�m��H�}1�H�T��H�5�O�T��H�}1�H��S��H�5���;��H�}1�H��T��H�5O�"��H�}�����H����H�5�O���H�}1�H�ɉ��H�5�;���H�}�����H����H�5�:�ѕ�H�}�����H���H�5�:赕�H�}�����H����H�5�:處�H�}�����H���H�5�:�}��H�}�H��z��H�5���a��H�}�H���H�5!5�E��H�}�H�����H�5Bs�)��H�}�H�9���H�5���
��H�}�H����H�5"4���H�}�H����H�5<:�Ք�H�}�H�����H�5��蹔�H�}�H�i���H�5�9蝔�H�}�H�����H�5��联�H�}�H�����H�5�9�e��H�}�H�5�H�5�9�I��H�}�H�I���H�5E%�-��H�}H��*�����H�5�M���H�}�H�!S��H�5Q��H�}�H�S��H�5�P�ٓ�H�}�H�Y|��H�5/轓�H�}�H�-}��H�5�X 術�H�}�H���H�5��腓�H�}�H�Ձ��H�5oZ �i��H�}�H�i�H�5��M��H�}�H���H�5���1��H�}�H���H�5�����H�}�����H�u�H�5���H�}�H�i���H�5'��ݒ�H�}�H�MS��H�5���H�}�����H��H�5NP襒�H�=�z�Dq
H��H�D$H�U|S蠿L�l$�H�=��H�D$�q
H��H�D$H�.|S�q�L�l$�H�=��H�D$��p
H��H�D$H�|S�B�L�l$�H�=]�H�D$�p
H��H�D$H��{S��L�l$�H�=!�H�D$�p
H��H�D$H��{S��L�l$�H�=�H�D$�Yp
H��H�D$H��{S赾L�l$�H�=��H�D$�*p
H��H�D$H�k{S膾L�l$�H�=�H�D$�o
H��H�D$H�D{S�W�L�l$�H�=��H�D$��o
H��H�D$H�{S�(�L�l$�H�=��H�D$�o
H��H�D$H��zS�L�l$I�4$H�=�5H�D$��H��H��$}�H�;H����H��RH�8H�5r_����H�;�H�5J����H�;�kH�5J����H�;�H�5�I���H�;H�����H�5�I���H�;�H�5�I���H�;H�›���H�5�I�v��H�;�iH�5�I�b����M�s�H�;H�5�IH���C������vs�H�;H�5�RH���$��H�;H�5�IH����������>s�H�;H�5nH����������s�H�;H�5CIH������H�;1�H��e��H�5Q��U��H�;H�B�H�5���߳�H�;�H�F��H�5���$��H�;�H�Ő��H�5�.�	��H�;�H�����H�5m���H�;�H����H�5T��ӎ�H�;�H�T���H�5�-踎�H�;�H�	@��H�5�3蝎�H�;�H��?��H�5�3肎�H�;�H�#���H�5=��g��H�;�H����H�5�3�L��H�;�H�����H�5W3�1��H�;�H��H�5.���H�;�H�Ga��H�5K��H�;�H�,a��H�5�J���H�;�H����H�5��ō�H�;�H��t��H�5
認�H�;�H��z��H�5�R 菍�H�;�H�@y��H�5���t��H�;�H��w��H�5_T �Y��H�;�H��_��H�5P��>��H�;1�H��Z��H�5m8�&��H�;1�H�
\��H�5t���H�;1�H��[��H�5ܡ��H�;�����H���H�52�ی�H�;�����H����H�5�1��H�;�����H����H�5�1襌�H�;�����H����H�5�1芌�H�;1�H��X��H�5IF�r��H�;1�H��Y��H�5L1�Z��H�;1�H��X��H�561�B��H�;1�H�v��H�5F�*��H�;1�H��~��H�5�E���H�D$dH3%(�4H��([]A\A]�@��u*H�H��R�e�f.�@��uJH��#����H����H����@���&�@����H���RH�;��f�H��t:H����@��u@������H�y�RH�8����H�}����H���RH�8����H���RH�2�RH�8��f.�H�aRH��RH�8��f.�H�ARH�8�C����H���RH��RH�8�U�襰�D��H����H��t�G�f.�H��f�H9�t�H��H��H��?H)�H	�H��H�|$��~D$��ff.����H��H���P��f�ɸ�f/�HF�H���D��H��H��� ���f/��HF�H���D��H�0fH~�H9�t@fH~�H��<������tH��H��u�@fH~�H��H��H���fD�Cm���H�5%�QH�=�A�I�f���H9���HE��f.���H��H��H����ff.�f���H��������fD����fD����fD��H�usS�@��H�]sS�@��H��H��HE��ff.�����fD��H��H��H����ff.�f���H��rS�@��1��f�����fD��1��f���1�H��t$H����t
1��f.�H�H�у�H��t�H�к% HE��ff.���UH��SH�����H��H���
7����� HD�fH�=*~RffH�"��H�� H��H�8�op�H��H���6�����EH��H��[]�@��USH��dH�%(H�D$1�H9�t1H��H���V)H��$t0H��uH�T$dH3%(u5H��[]����f�H����H��H�,$�w��������H���S��H��H�H����H�����H���dH�%(H�D$1�H��H�4$���"��H��H��H���H�T$dH3%(uH����z��f.���S�H��H��dH�%(H�D$1�H��H�4$�q辤�H�T$dH3%(u	H��H��[�� ����H���dH�%(H�D$1�H��H�4$���r��H��H��H���H�T$dH3%(uH����ʫ�f.���H9���H��t;H���u3H���H��u	H����H�H���H��t2H��t,H��H��t#H��H��wRH�5qCH�81�����L�FpH��t7I9�t&H��M�HL;OtDH�RH��tI9�tL;Ju��fDL�GL;Fu��H9�tH��L9BtH�QH��u����@���=���H���H���-���H�WHH�FHH9�w�s�H�FPH9<�����H���H�WPH94º�HD���ff.�@��H9�t����f�1��ff.�f���闌�����H�=$��h�ff.�AWM��AVM��AUI��ATI��UH��SH��H�|$H��越�H�mH��H��t*H��A�Յ�����u#H��H��[]A\A]A^A_�f�H��A����L��L���}b
H�t$H��H���m���H���u��DH��A�L�OKH�t$H�
sH�t$H���B���H��t
H����H�|$���H��Ð��AVHc�AUATI��UH��SH���m�I�Ņ�~N�E�L�t�@H�3L��H���q���A�1�L��H�źH���V��H��讶�L��H������L9�u�[L��]A\A]A^�f���AVAUI��ATU���SHc�H���m�I�ą�~k�E�L�t�H�3L��H����A��L��H��H���ӯ�H���+��L��H���P��H���xg�H�����L��H���5��L9�u�[L��]A\A]A^�@��AVHc�AUATI��UH��SH���sl�I�Ņ�~V�E�L�t�@H�3L��H���Q���A�1�L��H��H���6��H����f�H��膵�L��H�����L9�u�[L��]A\A]A^�f.���1��k�DPXH���Ճ�H���M��ff.�f����l��e�ff.�@��闟��H��H�|$���u�H���@H�T$H�t$�謵�H���f���ATUSH�z��L�%6tRH��I9$��������u|H�|RH�(H��u=H�CH���m0�H�uH���s�H��H���V��H���N���H��[]A\�fDH����.�H��H���}.�H�k@��u�H��H���8���fDH�.H���s�I9,$�y���H�}�n���H�5I>H��rRH�81�蘯�1����H�5������������SA�.L��GH��H��H�
�\H��vRH�t$H�t$���H��tH��H���j��H��[�@��UA�.L��GH��SH��H��H�
�\H�-vRH�t$H�t$�6���H��t!H��H��H�����H��H��[]�f�H�|$����@��UA�L��FH��SH��H��H�
�[H�etRH�t$H�t$����H��t!H��H��H���3g�H��H��[]�f�H�|$膚���@��������SA�2L��FH��H��H�
�[H��xRH�t$H�t$�J���H��tH��H���J��H��[�@��UH��A�2L��FSH��H��H�
l[H�}xRH�t$H�t$���H��tH��H��H���e�H��[]�@H�|$辙���ff.����SA�2L�FH��H��H�
[H�xRH�t$H�t$���H�ƸH��tH���Ŭ�H��[�ff.�@��SH���C��H���;��H��L����[1�1�H��餯�@��SH�����H�����H��L�!�[1�1�H���t��@H��u#H��H��oRH�5�>H�81�菬��@��u�H���H��w˸H��t�H������H9�t
�H��u��@��u�H���H��tH��u(H�����H��tH���H�����HD�H��Ð�ff.�@��H�uH��oRH98u!��H�WH�H��t�H�GPH�D��PH��nRH�5&>H�81�蟫�ff.�@����t�PM��u"H��wRH�H�pnRH�51:H�81��_��A��uI�Q��I��tI��t0A��u!A��tH��sR�H�CtR�H��rR�H�QnR�H��oR�ff.���H��uPH��mRH�5h9H�81��ު�fDH��H��@��u�H���H��tH��u�H��邼�f���H9�t�D1��ff.�f���SH���SX���t
��[�fDH����W1�[���‰��ff.�f���SH����o���uH����1҅��‰�[������uH�FH��t
H��t�3���AUH��ATUH��SH��H��H�6����I��轟�H�5�8�I��1���1�A�L��H�C�����H����脧�L���ܭ�L��H�����H�{tH��L��[]A\A]�@L���_�H��設�L��H���ͺ���ff.�AUH���ATUH��H�=�@S�H���Zq��uB��L�mD�e�iH�-�@�D��H����t�EA8�u�L��H������u�H����[]A\A]��AWAVAUATU��SH��H��H�|$ H�t$(�L$L�D$dH�%(H��$�1���ƒ� ����	���z��0u���}L�d$8H��L���]���D$��u�8"uBH�D$8�H��H�
�H�=�:H)�H��N�H�!�HN�1��6���u��H�L$8H9����9��;@��+�'@��-�L�l$@E1�L��A�eA�
@��0��I�u<H9���H9�w�DH9�s��H��H��@�z��H9�w�I�u<I�MEE1�I��H�L$�{�H�{��L9����� ���	���s<.�KL�$qR��E�D����E9�A����D!������dD�CH��H9�s�H����D�����L<_u�L9��6H�
�pR�9���#D9���{L�C�9H�����A9���L����H�{L9��8���A��D�Y�A�� A��E��DC�E9������K���+����-�xH��A��H��A�
H�t$A��0�?����0H�Jf�H��D�A��0t�0H��A�
H�t$����f.�H���c�����C���<X�t���f���T$�nDH���A�ȃ� ����	����E���������uy��|$@0��L��L��茎��D$�s�8"��L����r�8"��H��$�dH3%(�D$��H�Ę[]A\A]A^A_����tŋD$���gH�D$H���1���f����L$�H���*����E����A��������JD�C��H��H���{���f�L�l$@@�|$@A��H���;I�U���������L��L��芍��D$�q�8"�fH�T$8H���<���L9��3����������H���� t��	������H�T$8H���B���u����f�D�CH�r�0H�CA��X��A��x��A��0��A��H��A�0H���!����D$A���<X�6���f���\$�W���H�D$8�H�
��L)�H��~)L��H�=+61�賐��q�����
���������H�
r���H��H��f.�H���;@��0t�����{H�r�BxH�CH��@��0t`H��A�pA�A�x�_�����A�����H�D$8L)�H��~�H�
��L��1�H�={5����`p���_���A�pA�A�x�Q����)��H�t$(H�|$ �l�H�5�1H��H��mRH�81�菢��
p�L�S�H�L$ �H�D$8H�5�4H)�H��N�H�V�LN�H��mRH�81��A��UH��AWAVI��AUA��ATL�e�SH��HH�}�L��U�dH�%(H�E�1�H�E��O��H�}��vk�H�]�H� �EL�{H�KM���TE��t?H��1�L��H�M��N`�H�M�H��t%�E�����M��tA�f��>�A�<uYH��聠�M�M��D��H��L�����H�}���L�e�H�E�H�E�dH3%(�5H�e�[A\A]A^A_]��H�qH�����H�AH��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����L�D$I���H�����oH�}��E��r���E��N����L�{H�KE����������f.�H���x��f������H�}�H�M��{v�H�M�I��H��L��L��H�M��b��H�]�H�M�I��A�M�����f.�H)�H�L��;����}��H�VkRH�57/H�81���DPX�H�=B/H���)j�H��H��bRH�8���PXH��H�kRH��H��H�5F7H�81�蜟�ff.������fDUH��SH��H���?O
H��H��H���z��H���{�f���SA�.L��7H��H��H�
�LH�afRH�t$H�t$�j�H��tH��H���:r�H��[�H�T$H��H�=u.�p�����AWAVAUATUSH��8dH�%(H�D$(1��G�����H�H��A�H�D$ ��tL�v<��H���oH�|$ �-z�H�|$ I��耝�xH�$��H�<$�����H�T$ L�jM�M9���A�4$@����M�|$M9�s
@��:��M��I��L��L�t$M9�w��I��M9���A�?:u�L9���L��H�$H��H)�H��H�D$蚱�I��H��L)�A�?:H�D$�M���,L���1s���}H�|$L��H����H�|$�[�Fh����M9��5L��H����Z�H��M9��H��t��qH�|$ ���H�5-H��H�6`RH�81��,��@������H���H���y���H���F����H�|$ �&t�H��u)1�H�L$(dH3%(��H��8[]A\A]A^A_�@H��H��I�����t	�tg�H���+��H���H��gRH�5B,H�81�舜��M��I9��-L��H�$H��H)�H��H�D$���I��H��L)�H�D$������G���fD軍���2���M9�t�L��H���#�����fD胫���
���M9�t�L��H���j��|���fDH���H��H���{�������I�oL9�spA�:uiI�����A�|$:�r���H�UgRH��f���H�T$H�t$H�|$ �IW�H��H���^��H����H���m���H�l$ H��H��H�=�3����H�T$ ����|�蜑�L���d��H�D$ H����f.���AWAVAUATUSH��(dH�%(H�D$1��G����H�H�ջH�D$��tH�^<�iH���HH�|$�Nv�H�|$I��衙�xH�$��H�<$������H�T$L�rM�M9���A�4$@���wM�|$@��:u	M9��M��M��M9�w�I��M9���A�?:u�M9��CL��H�$L��L)�H��H�D$�­�H��L��L)�A�?:��H����H��H�t$�Yo�H�t$���H��H��M9���H���K�W�H��H��tH�Ã���H�|$��H�5a)H��H�\RH�81��u��D������H���H�������H���PB���oH�|$�np�H��t9H��H��H�����t:�%8H�L$dH3%(�NH��([]A\A]A^A_�f����f���7��f�H�)dRH�5�(H�81��Ș��H���H��H�������b����M��M9���L��H�$L��L)�H��H�D$�:��H��L��L)��}���@�g����fDM�oM9�svA�:uoM���Q���A�|$:���H��cRH�(����H����H�T$H�|$H����S�H��H�����H���hE����H�\$H��H��H�=>0�Y���H�T$����Cy��.��H����H�D$H����ff.����SH���tD�H�5\�H����H�5q�H����H�CH� tH�C�#H��[�H��H�5"�q���ff.�@��SH��H��t@��t
H��[��H�H�ƒ�H��t��u�H�����H��[�ff.�@��SH���V�H��[�b�f.���H���u5H��u8H��1�1Ҿ�H����Z�H��$t	�u
H��u,�H���f����u�H���H��
u����u�H���H��
�HE�H���@��H���u5H��u8H��1�1Ҿ1
H���KZ�H��$t	�u
H��u,�H���f����u�H���H��
u����u�H���H��
�HE�H���@��SH��u&H��aR1�H�8�uU�H��H�=F([H��1����H��@��uH��אH��t2H��tD��u��tJH�^RH�8�fDH��XR���H�Y^R�H�8��H�ZR���H��\R����USH��H���nX�H��tyH��uDH��`R1�H�8�T�H��H�=�'H��1����H��H��H�=!���[H��]�W`����t;H��tEH��tg��uR��tuH�.]RH�8H���fDH��H��[]鲅�f�H��H�{�|���@H�q]R�H�8�d���@H�yWR��H�YR�H�8�<���@H��[R����H����H�`RH�H9���H��tH���t#H��H��VRH�55&H�81��Ǔ��H���H��tTH���
H��u�H�NpH��txH9���H��H�QH;P�tqH�@H���NH9�t_H9P��fDH�NHH;JHs3H�RPH;4ʺHD��H�yHH;zH��L�BP�I;����f�@��uH�WH9��������H��t:H��tD@��u@����H�}[R�����H�VR����@H��[R���@H��WR���@H���H9�t�H��t��uH���H���6���H�NpH��tOH9��[���H��H�QH;PD�E���H�@H��t%H9��3���H9P��f.�H��YR�(�����1��ff.�@��H��H��H�����ff.�ATUSH��H�H��u1����^H��[]A\�DH����tp����H�f��H*�H�0fH~�H9���fH~�H��<��������H��H����H�EH���[]A\�fDH����Ѓ��i�������
�1����O���H���V�H��I��袇�A����I�f���I*̨��H�f��H*��^�H�0fH~�H9�t+fH~�H��<��������H��H���=���f(���D��/�������E�H��[]A\�@H���
H����H��������f�fDM��tA��t}L���H�����L����X��H��蘈��h���H�؃�H�����������fDH�����H���DH��H��H��H���d���@I�$��H��
��L���H���H��f��I9������L��I��H��?H)�I	�I��L�d$�~L$�j���fD�tTH�ƒ�H���]���H��f�H9��M���H���H��H��?H)�H	�H��H�T$�~D$�#���H���H��
t?H����H��t�H��������@��@L��H�D$�K��H�D$f(����H���L$�/���L$���I�$��H���^����AL$����H�=X!��X�H��H�lQRH�8�T���H�=!��fD��AWAVAUATUSH��8dH�%(H�D$(1��G����zH��H�A�H�T$ ��tL�f���(H���H�|$ �i�H�|$ I���ߌ�xI���rL���Zu���bH�T$ H�JL�I9���A�E����I�]H9�s<:��L��I��I��L�d$H9�w�fDH��H9����;:u�L9���I��L��L��H�$M)�L����L��H�$L)�;:H����H��t
@����H�|$ 莸H�5�H��H��ORH�81��������H���H�����H����5���H�|$ ��c�H��t8H��H��I�����t9�J�H�L$(dH3%(��H��8[]A\A]A^A_ÐH�t$ H��胘��͐�[���f�H��WRH�5H�81��H���H�E��H��H������H����H��H�L$H�t$H�$�a�H�$H�t$��H�L$�bH�|$H�$t`H��H��H����6I�H�$H��H9��F��������H��I9���I��L��L��H�$M)�L���\��L��H�$H��L)��c���H��H���Z��DL�{I9����{:��L���2���f�H�|$ L��H�$�G�I��H���$��L���8H�$����H�}�AH�$�.Q�H�$����L��H�$�f^�H��H��������fDA�}:�F���H��VRH�(�:�����t����H�T$ H��H�=
#�(����l����H���̎�H�D$ H����L��H���L�d$ L���ff.�f�����H��Ð��H��H��t�t��H�G�ff.�@��H��H��t�t��H�wH��t'@��u�H��H��H�D$�Hm�H�D$H���fD����H�H�����SH��H�w�� H	�H�H��t@��tH��[�fD��l�H��[�ff.���USH��dH�%(H�D$1��H9�tH��H���H��$t+H���������H�T$dH3%(u*H��[]��H����H��H�,$�w���p���H��H��u�3f�H��u,H�@H��t!H�H�у��u�H��uހ� u������ff.�f���H��uH��TRH�8�X]��@��u
H��A]�H��t2H��t<@��u@��t@H�QR��H��KR��H�YQR��H�MR��H��OR�|���ff.��PXH���E��H�5�H��H�DSRH�81����f.�PXH�����H�5�H��H�SRH�81�躇�f.���ATUSH��H9�t]H��uH���S{�@��u�H�H�Ѓ�H��t��u�H��H��t5�H��u>9��~H��蓛�H��I��舛�I9�ufH��[]A\�����H��tM�@��u�U����H��tJH��tTH��$t^�@��u�@����D��z���H��IRH�5�H�81��ņ�D��S���fD��C���fD��3����q`�H�������fD��UH��H��SH�����H��H��蠚�H9øHE�H��[]��AUATI��USH��H��H�-\RdH�%(H�D$1�f�}uBH��A��H��H���A��H��I���Z�I9�uGH�T$dH3%(H��uLH��[]A\A]�H�|$�F3H��I��H���LD�H�����H��HRH�5�H�81�蒅��{�ff.�f�AVI��AUA��1�ATE��UH��1�SH��H���I�H��$t[]A\A]A^�fDE����A����E��xs��H�SH�-fHE�H����H��tyH�
��H��u#M��H��H�5GH��GRH�81����DH�����M��H��H�5*H����fDH����Q�H���`�������r���D��?���H�
��H�
��~����AUA��ATI��UH��H��SH��H�����A����*H�H�1�T�H��D��L��H��[]A\A]���@H�߉D$���D�D$H����f.�AUI��ATI��UH��SH���8��L��H���-��H��M��I��PH��FRH��H��H�5&H�81��ă�@AUA��ATU��SH��H������H�؃�H����H����H�=�KR1�H����L�I�Ĩ��H��t�������H���RN�H����E���JH��t	����fH�=JRffH�a�A�����H�߹�1
H�5�H�H�h�{���I�Ĩ��H����L��H���H�5sH�����fD��t3I���uH���$���E����A�H��L��[]A\A]�@H���H��t4I���u�I��H��
t�H��u�D����H��H��[]A\A]���CE��tf�
�f/�v
f/بsnH��[]A\A]�_i���M�H��H���`���E���U���H�FMRH�5wH�81����Df(��l�fT
l�f.�s�������H,�L�d�����H��H9�t)H��H��H��?H)�H	�H��H�D$�~D$�1���@A�����DH���H��
��������D����H�����H�I�܃�H��
����������:���H���H��
�*���fH�=�GRffH��^�H�H�h�S���1�H��H�=���TJ�I���g���0���H�5{H��CR����ff.�@��H��1������ff.�f���USH��H��M��tNI��tH�5!L����f��H�σ�u�^i�H����H�߉�[]�|���@�Q���1���ff.����H���T��@��AWAVAUATI��H��UH��SH��(��H��I���G����H���E<���~p�D�pE��uH��([]A\A]A^A_�fDL��M�������=H�EH�E uH�EH�D$I�\$I�$ uI�\$L���j�D��H��A�E8B���rA�W9���H�t$H��H���R��A�F�H�l�f�H�3H��t@��uL���jb�H��H9�u�H��(L��L��[]A\A]A^A_�H	�H�}��@�H��H��(L��[]A\A]A^A_��fDH��L��H�L$H�T$�	H��I���(L�H�T$H�L$���/���H���>�H��H��H�����H���f.�L���I�����L��H�L$I�\$��I�$ H�L$���I�\$�����USH��H��H��u*H���k�H�5�H��H��@RH�81���}��@��u�H�H�ƒ�H��t���u�H%��H��H��H��H�H�%H	�H��96��H��H��讎�H��t@��u
H�E��H��tH��[]��H��H��H��[]�W������ATUH��S��H��dH�%(H�D$1�H�='8SH�$t-��euxH�$H�L$dH3%(��H��[]A\�fDH��7SH��u%L�%M�D�L���[`�H��7SH��t�H��7S��~�D�c�Ic�H�l��#���u1�1����$^�@H���C�H��E��uWH���_���I��1�H�5e7S�P8�H�$H��$�?���H��w���H����#���H���^��r�D���@��SH������H��tH��[�H������AVAUATA��USH�� dH�%(H�D$1�����D���W]���_�H��I��Hc�L�4��+���ugD��H�mH�D$��uiA��tH�t$��,����H�L$�qL��H�l$�`j�L��H�T$dH3%(u-H�� []A\A]A^�L���HB��u�E1��S���@A���G����q�ff.���AVAUATU��S�������}\�D�_�I��I��Hc�L�4��S���u7��um��I�$L��L�����H��H��u/L���:�[H��]A\A]A^�L���A��u�1�����u�H�H�ƒ�H��t���u�[H��]A\A]A^É��V���@��AUI��ATI��USH��H��(dH�%(H�D$1����H�CH��tH�Ũ��L��H�����I���I��umH��4SH����H��A�H��L�$$���H�D$�u�H�H����H��H���gA��u
�}��H��H����A@M����H�`4SH���_H��A�H��L�$$���H�D$�t�H�L$dH3%(H����H��([]A\A]�f�H��H���\�H�EH�ƒ�H������ ���H��H����V������H����H��L�$$��g�I�$%HH�M�������A�����I�$H�у�H��u���H	�H�I�$H�Ѓ�H����������!��������+Q�H��H�A3S�v��
�|�H�=+3S�H���B�H�=3S�C�H�3S�1���fD��P�H��H��2S�u��
�B|�H�=�2S1�H���QB�H�=�2S�5C�H��2S�Z���f�H�����h����.n�H�=�1��[���UH��SH��H��H��H��dH�%(H�D$1��e����H��H�߾�H�,$�\f�H�T$dH3%(u
H��H��[]��m�ff.�f���U1�1Ҿ�
SH���f�H���Pm�H���8R�H��tc�xH��uH���^��tH���N��t+H��H��[]��H����u�H9�t�H���kN��u�H��H��[]�I�f��C��f���ATUSH��H��t@����fDH���x���I��H����
H�=�	�:+�L��H���`�H��H����{�H�5�H���P^�H��0SH��u%L�%�D�L���Y�H��0SH��t�H��H����G�H���\`�H��H���q{�H��H�5����]�H��[]A\�DH�H�ƒ�H���-����� �$���H�=	��s*�H���H��H��t4@��u.H���H��tH��u��_��DH��[]A\�$5�@�f�H��H���0G��Z���ff.���H����H�$ARH�H����ATI��UH��SH���~��tiH�EH�E tH�E�8-�H�5��u�#�H�5\ H����\�L���D�H�57H��H��1��i�H���_�H��H���u�[1�]A\�f.�@��uH�FH���]���1��f.�H��t2H��t<@��u@��t@H��<R� ���@H�i7R����@H�9=R����@H��8R��@H��;R���ff.����UH��SH���.��H��H���#��H�@pH��t&H9�t!H�P��H�[H��tH9�tH9Su�H��H��[]�f.����H��t@��t�H�H�у�H��t�H�к%HE�����H���4g�@��PXH�5�H��H�(6RH��H�81��s�ff.�SH�H��uH��6RH98uHH��t4��u/H�H�ƒ�H��u �� tH�5$H��5RH�81���r�H���L�H��t[�H�5���H���`�����ATI��U��H��SH���x���H��H���=�H�����1�L���H������m�H��[]A\�f���ATUSH���0���H��H��,SH��u*L�%��f.��L���U�H��,SH��t�H��H���k��tH��H��[]A\��H��4RH��H�5SH�81���q�f���SH��H��u�H���F:�fD@��u�H���H��u�H���v���H��[H���:�f.���SH��H��w���H��H���tjH��H��tT@��uNH���H��v2H��H�T$�e��H����9�H�T$H��H��H��[����H���t�fDH��tH��H��[�H����H�����f���H��t@��t	H���DH���H��w�H���u�SH���Ԅ�H���<9�H��[H��������H��t@��t	H���DH���H��w�H���u�SH��脄�H����8�H�ߺ[H������ff.���AUATUSH��H��H��u�H���8�D��u�H���H��u݉�H��I��A������H��H����D��L���H��H���)k�H��H��[]A\A]�ff.���1��%N�D��H�G�����H��tF@����H����H����H��$���@��u@���A�AD�9���AUA��ATI�̹UH��L��SH��H��H���~��H��uA9���H��[]A\A]ètTH����H����H��$����u�<��D��@���9��o���H�������덐��J���fD��:���fD��*���fD��R���fD��B���fD��2���H��L��H��H����D��AV�AUATUSH��tF@����H����H���H��$�
�@��u@���A�AD�9���I��I��A��A������L��L��H���
�H�ŸH��uA9���[H��]A\A]A^��@��tbH����H����H��$���@��u�@����D��fD���9��_���H��[H��]A\A]A^�@�E���p���D��*���fD�����fD��
���fD��1���fD��!���fD�����L����;�H�PH� tH�PH��L��H���W�����A
H�����6���fDH�	7RSH��H�0�M_�H��tH�߹A
�[H�_����H���F��H�53�H��H��.RH�81���k�ff.����H��tJ@����H����H����H��$���@��u@���A�AD�@9�u	����AUA��ATI��1�UH��L��SH��H��H�����H��t�H��uA9���H��[]A\A]�@�tDH��tvH��$�|��u�<��D��f�����n���fDH���@���뙐��N���fD��>���fD��.���fD��^���fD��N���H��L��H��H���u�D��AV�AUATUSH��tJ@����H���&H���,H��$�2�@��u@���A�AD�@9�u	����I��I�Չ�1�1�L��H���,.�I��H���H��to�M��t0A����I�����A��uA����D�9�t7L���8�H�PH� tH�PL��L��H���z�f.�A�[L��]A\A]A^�fD����>���fDI��[]L��A\A]A^�f�A���9�t��@�����fD����fD����fD��A���fD��H���uEH��uHH��1�H��H��H�5j��H��uH��t?�u;H���H��
�HE�H������u�H���H��
u����H���fD��ATUSH������H����fH�=;/RffH�3F�A�����H�߹��H�5��H�L�`��H�Ũu2H��t�tH��H�tMH�5��H�����@H���H��
u�fH�=�.RffH��E�H��H�L�`H��[]A\�f����d���H���H��
�T���H��[]A\�ff.�@���1�����AUATUSH��H����uwH����fH�=I.RffH�AE�1�1Ҿ�H��I��H�L�h�f+�H��H���H��t)@����H��ujH��H��LH�5��H������I�$�L�hH��H��[]A\A]�D���v���H���H��
�f���H��H��[]A\A]�f�@��u�H�E��H��
����fH�=�-RffH�yD�H��H�L�hH��H��[]A\A]Ð��H��t7H��t)SH����u,1�H��H�=��hS�1�H��[���D��f�1���h�����S1҉�H�5��H��dH�%(H�D$1�I����!��t H�<$H��t2H��tH�5e����H�T$dH3%(��u
H��[�1����\������E1��1�黼����1ɺ�;��ff.�S��H�� H�|$H�|$dH�%(H�D$1��Z������H�|$��tW��t;�����A
H�k������H�L$dH3%(�H�� [�H��t@��t����u���f�������K�H�0fH~�H9�t+fH~�H��<��������H��H���z������p���DH�D$�a���fDH�T$H��H�=�����-�T$���;����H�$��p�H�$�$���f�H�L$1Ҿ�D$�����L$������3����fH~�H��H��H�������UZ�D��H��t/H��tH��H��H�5S���fD�H���;���1�H���.���ff.����H����������������H���H�|$H�|$�d����uH�D$H���DH�|$���H��Ð��H����H��tRH��u;H��-RSH��H�0�(V�H��tCH�߹A
�[H�:��i���f�@��u�H���H��u�H���f.��[�f���USH��H��u	���@H��@��t/@��tjH��%R�A
H�8�(��t2H�f��H*��=H�����
�A��������H�����H�ƒ�H��tS�@H��[]�H�؃�H���/H����H��u��H�=���>,�H��H��$RH�8�̰��@H��H9�t)H��H��H��?H)�H	�H��H�T$�~D$H��[]�f�H��f�[]�D�CH��[]�@H��+R�A
H�8�'���%���H���\&�H��H����W�@����H�f���H*ͨ��H�f��H*��^�f(���f.�H�A$R�A
H�8�'�������H��H��[]�fY�fDH��H9��-���H��H��H��?H)�H	�H��H�\$���fDH��u+�H���6)�fDH�����H����D@��tRH���H��u�H��f��H9�����H��H��H��?H)�H	�H��H�T$�~L$���DH�U��H��
��H���H��t�H�U��H���O����M����tTH�ƒ�H���M���H��f�H9������H���H��H��?H)�H	�H��H�T$�~D$�l���H���H��
t;H����H��t�H������@�=���H��H�D$��W�H�D$f(�����H���L$�W��L$�	����H�=���,���ff.�@��USH��H��u)�*H�=���@)�H��H��!RH�8���fDH��@��t@����H�f��H*�H��[]�f�H�������v_��
������H���#�H��H���
U�@����H�f���H*ͨ�H�f��H*��^�f(��fD��u0�CH��[]�H�؃�H����H����H���H�P��A
�H�����H�ƒ�H�����@H��[]�fDH��t@����H���H�����H���D&�@H��H��[]�V�f�H��H9�t8H��H��H��?H)�H	�H��H�\$�~D$���@H��H9�u)f����H�����H�����f.�H��H��H��?H)�H	�H��H�T$띾)H�=�����H�U��H��
��H���H���H��f��H9��T���H��H��H��?H)�H	�H��H�T$�~L$�*���fD�tTH�ƒ�H���=���H��f�H9��
���H���H��H��?H)�H	�H��H�T$�~D$���H���H��
tDH����H��t�H�������@���@H��H�D$�sT�H�D$f(����DH���L$�RT��L$�w���H�U��H�������M�H���H��RH�5��H�81��[�(H�=0������SH���s&�H��t[�H�߹!
�[H�<�>�ff.���H���D�@��SH��H��dH�%(H�D$1��7�H��tH�T$dH3%(u*H��[�H����2�H��u�H��H�$�!T����:Q�f.���H���4d�@��H��t>SH���]E�H��t[�DH��t+��u&H�H�ƒ�H��u�� u:H�CH��u	[�#3�H���HH�H�5��H��H�GRH�81��=Z�DH�����ff.�@��H���t<�@��AWAVAUATUSH��H��(���H���	A��I��H��t^��uYH�$E1�E1�1�H�D$H�D$H���������	tc��uH�SH;T$�OE���ufDH��L��D��I��jH�5bSL�ӭ��H���k�ZYH��([]A\A]A^A_�f.�H�SH;$����t�I�7H��H�L$H�$�p�H��H�L$I��A���H���H���q������h����,���H�SH;T$u%E���L���I�7H��H�L$H�T$�w��DH�5�SH��H�L$H�T$��H�L$H�T$A��E��������H�5iSH��H�L$H�$��H�L$H�$�Ņ����������H�51SH��H�L$H�T$�G�H�L$H�T$A��E�������I�7H��H�L$H�T$�@������H������H���������AWAVAUATUSH���9��H��R1�H����H�5`�H�;�Y�H�;H�5 ����[V�H�;�H�����H�5 ��(�H�;�H�q���H�5���'�H�;1�H�y���H�5OQ��'�H�;�H�Π��H�5���'�H�;�H�����H�5���'Y�H�;�H�x���H�5���Y�H�;�H�]���H�5����X�H�=���U2�L�=~"RH�-RH��I�?H�E��L�%R�H����H�5_~I�<$�X�H��!R�H��H�5)�H�;�X�H�;�H�ԝ��H�5��hX�H�;�H�����H�5,��MX�H�;�H�����H�5���2X�H�;�H�����H�5��X�H�;�H�h���H�5���W�H�;�H�M���H�5����W�H�}1�H���H�5���8&�H�}H��R�H�5;��&�H�}�H�̟��H�5���&�H�}�H�p���H�5�g��%�H�}1�H�w
��H�5���%�H�}�H�����H�5�h�%�H�}1�H�B���H�5(��%�H�}1�H��RH�5U1�}%�H�}1�H�0���H�5��d%�H�}H�R�H�54g�H%�H�}�H�����H�5�0�,%�H�}�����H�|��H�5�0�%�H�}1�H�+RH�5�h�$�H�}1�H�RH�5�f��$�H�}1�H�1���H�5am��$�H�}H�������H�5���$�H�}H�R�����H�56��$�H�}H��V�����H�5,��q$�H�}H�vW�����H�5"��U$�H�}H��W�����H�5��9$�H�}1�H��RH�5�� $�H�}�H����H�5��$�H�}�H�����H�5����#�H�}�H����H�5����#�H�}H�9R�H�5���#�H�}H�R�H�5���#�L�-�RH�}�H�5��L���u#�H�}L��H�5���]#�����H�5����H�=�F�%�����H�5i���H�=L��
�H�5Q���H�=M3�
�H�5����H�=B���
�H�5A���H�=���
�I�7H�=Q��$�H�-WRH�E��c�1�H�=-H���
H��H�+
S��OH�}1�H�����H�5�d�"�H�}1�H���H�5ud�t"�H�}1�H�����H�5ad�["�H�}1�H���H�5�j�B"�H�}�H����H�5���&"�H�}�H�����H�5���
"�H�}�H����H�5=e��!�H�}�H�����H�5{J��!�H�cRH�}�H�5���!�H�}1�H�9���H�5'��!�H�}��H�}H����L�-�RL�5�RI�}H�5I���]�H�;1�H���H�5&e�Q!�H�;�H�����H�5U��6!�H�;�H�����H�5;��!�H�;�H����H�5=d�!�H�;�H�a���H�5h�� �H��RH�;�H�5���� �H�;�H�{���H�5!�� �H�;�H����H�5��� �H��RH�;�H�5eb�y �H�;1�H�=��H�5]b�a �H�;H�NbH�5�h��D�H�4RH�;1�H�5���3 �H�|RH�;�H�5Lc� �H�QRH�;1�H�5�� �H�i�H�;�H�5}����H��RH�;1�H�5x����H�;�����H����H�5g���H�;�����H�C���H�5Q���H�;�����H�H���H�5B��|�H�;�����H�����H�53��a�H�5ZA�H�;�M�H�;�=�H�5I�H���[�H�;1�H����H�5V��#�H�;�����H�d��H�5�*��H�)RH�;�����H�5�����H�NRH�;�����H�5�����H��RH�;�����H�5����H�@RH�;�����H�5����H��P�H�;1�H�5����H�5RH�;�����H�5���i�H�;�����H�z���H�5���N�H�;�H�����H�5���3�H�;�����H�����H�5s���H�;�����H�i���H�5g���H��RH�;�H�5b��rO�H�k�H�;�H�5T����H�PRH�;�����H�5G���H�=RH�;�H�5<���H�;�H�����H�57��v�H�;�H�����H�5/��[�H�;�H�L���H�5'��@�H���H�;�����H�5$��%�H�>�H�;�����H�5��
�H���H�;�����H�5����H�;1�H�����H�5
����I�<$�;�1�H����H�5�H����I�<$1�H����H�5����H�RI�<$�����H�5a���I�<$�����H�a���H�5���e�H��RI�<$1�H�5ǵ�L�H�URI�<$1�H�5w��3�H�RI�<$1�H�5i���H�5���I�<$�JJ�I�<$H�5��ZX�I�<$H�5
��JX�I�<$H�58��:X�I�7H�=*���I���\�H�=�H����	H��H�S�HI�>1�H�����H�5�]��I�>H�u]H�5d�@�I�>�H�����H�5ݝ�W�I�>�H�����H�5�^�<�I�>�H�}���H�5�C�!�H��RI�>�H�5%���I�>�n�I�>H���2@���`H�H�5���8W�I�7H�=2��	�I�E��[�H�=�~H����	H��H�S�GI�}1�H����H�5�\��I�}H�p\H�5	c�
?�I�}�H�ݑ��H�5ל�Q�I�}�H�a���H�5�]�5�I�}�H�E���H�5�B��H��RI�}�H�5���I�}�d�I�}H��t@����H�H��H�5��[]A\A]A^A_�#V�I�}�����@����H�L�5�
RL�-R�����H����H�������@����@���H�iRH�8�m����H����H����@��uV@����H�5RH�8�@���DH���l���H��tx@��u2@����H�RH�8�G���f�H��R��H�qR���H�aR�[���@H�}�����H�}����L�5�RI�>����I�>����H��R�s���@H�yR���@H�iR����@��H�5ebQH�=����Rf���H�5�H�=����Rf���H���H�=�[��*�H�HSH���w��AWAVL�5��AUI��ATI��U@��SH��H��D�;A��<t3~RA��>t+A��_uL��L���6�H��tOA�EH��D�;A��<u͉�L���6�H��t*A�$��uDE�<$��@A��!t�H��H��[]A\A]A^A_�H��RH�
b�D��H�5��H�81��F�H��	RH�5H�H�81��nF�ff.�AWH��AVAUATUSH�^H��8H�|$dH�%(H��$(1�H� tH�^L�~H�����E1�1�I�I9���H�D$ L�5��I��H�D$�b��x�@��v<v_<=t[<
���D �+I��H��f�I9�~H�B�D =�
E1��D 
H��H���PH��I9�tk�H�r<~v��D =�H�zI��H��L�����A��D4 ���A��D< �DH�t$H�|$H��H�L$�P-�1�H�L$I9�u�M��~H�B�D =H���D 
H��HH��$(dH3%(ufH��8[]A\A]A^A_�H�� t2H��	t,�D E1��+H������f�H�|$H�t$ ��,����D =��D4 H�r�H����:�f.�AWAVAUATUSH��H�$H��(H�<$H��I��D�D$dH�%(H��$1���u���D$=L�5/�E1�L�l$�I�����K�T=H��L)�H�����3I��I��H��H���������0��A��B��C����@����<@��	�Hc�A�46@�r��s�����?@��@��	�H�A��B�A�6�B�I���v���H��L)�H���OI����I��tq�D$��u]H�<$L��L���g+�I����z�H��$dH3%(�H��([]A\A]A^A_ÐH�<$L��L��E1��+����B�D<
I�����L$���B�L<����0A���A�B�D<I�GB�T<I���L�D$���P������������0��A�B�T<�S�������<��A�	��L$H�B�T<A�B�D<I�GI���L�D$������D����B L�5���D$`A��D$��H�<$L��L��E1��-*�����s8�H�����H����f.�zI�
��f/�w+�
��f/�s
���H����Z�H�������H����l���fDATUH��SH��L�gH��H� tH�{L�H���v��J�t%H��[]A\��0�DAT@��I��UH��SH��dH�%(H�D$1��A�^w8@�t$H�\$�D$L���lH��H��H�5"�I��H�HRH�81���@�H�\$�ɾ1�H���H������ff.�H��� tOH��H�W��L��I9�w
�Cf�H��I9�v8H�H��t�u�H�H�σ�H��u�H�x�� tH�xH9�u��H�W H�G�H��H��RH�5X�H�81��C@�AWA��AVAUATUSH��H��xH�|$8H�|$8H�t$0dH�%(H�D$h1��X%�H�|$0�N%�H�|$0�t	�H���VH�D$8H�PH9��,H�HH� tH�HH�H�T$0H�H�D$H�BH� �VH�JH�D$PH�D$H�H�$E���dH�D$ H9$��H�x�D$HH�|$PD� �D$LD��A�� ��A�D$�����A��#tsH�L$HH�T$LD�����H�D$PH9$�����*����0��	��E1�A��@A��E1��%@��S�IH�5��@��Hc�H�>��f.�L�4$�
L��H)��<��H�xH��ID�H�|$P@H��H9$����H�l$H�L$hdH3%(H����H��x[]A\A]A^A_�E1�A��f���f�H�B����L�t$H��A�H�D$PI)��8���@�3�H�D$H�D$P���@��H�|$PH�t$P�
��"�I��H��x�\�D�(E�����H�ARH�5�H�81��=���|$L���1@A�1���fD�D$H��t	1���>@��H�D$H)�H�I��L9���L�`�E���4I)�L��H������H�l$Lc�H�l$E�A��A��D�����DE��)DE����H��H��L��qN�I�D$�M��~3I��1�E��L��H���?.�A��u�H��L��NP�I�D$�M���H�l$H���E����H�D$H��� �<H����H�|$H�t(��������|$L����A�1��1�����@A�1��1����@A�1��1����H�l$H�D$PH)�H�x�*tL9�IO�H��1��H�H��L�@H� �lH��~3H�=��Q1�1�����u�3H�������A�H��H9�u�A���!E����H�|$H���	M���H�ߐM����H;\$���H����x�H��A���H)��,�A���bE����H�|$H���L�I��H���H�D$8H�PH� �7H��H)�L9��>L)��PH�D$H)�H��H��L9��M�f�L��E1�H���%H�l$�+fDE���_H��H���$L�I�D$�M���fI��H�H��H�D$�D$H�D$X�g6�A��u�H���M���H�t$H��H)�L9�IO�L�$3L9��\�;u�RfD�}�eH��L9�u�H����H��A����E���H�|$H���zK�H;l$H��H��E��ID��EH�l$H)�L9�IO�H��H���[�H��A���E����H�|$H���(K�H�DH�D$P�+���H�l$H�D$PH)�H���x�*tL9�IO�1�H���.F�H��H�xH� ��1�1�H�������D��u�3H�������0�H��H9�u��y���A�1������H�D$H)�H��H��L9��M�f�L��E1�H���@���H�l$�.f�E���w
H��H���<J�I�D$�M���~I��fnH���Z��4�A��u�H���L���H�D$H)�H��H��L9���L�`�E����I)�H���)H�l$�'f�E����	H��H���I�I�D$�M����
I�ċf�H��ȉD$�ZD$�4�A��u�H���K���H�D$H)�H�@H��H�pHI�1�H���n	�H��H�pH� �
H;\$�?�E1���P߀�?�L�\$D�|$,I���� I�WH�{��?J�0H9��-
H��L)�I��H�L$eH���~fDH��H��HN�I9���D�E1�E�Q�A��@��	D�E1�A�Y�@��E1�D�D$e��D�T$fD�L$g��tE1�E��A��F�	F�A9�r�H)�H�H���I9��	�<
t<
t
H��I9��g	�<
��
H��<
�5	�P߀�?�
���L��D�|$,L��H��H�L$�-&�A��H�L$����H���J�����L�t$1�L��H)����H��H� ��H�@H��H;\$��1�H�|$�@�	�H��H��H9���H�S<=u�H9��L�K�CI9�s<
��<
��L��QE�A�����A����L��L9����CE�D��A�����A����A��H��H��D	��F���	��^���A���1���A�1�������L�l$L�%��H��������?L��H)�L9�LN�f�M�������L9��~���H�;@����@��@��@�� �����L��H)�H9��H�?RH�50�H�81���4�fDH�D$H)�H������L�#H��M����H�|$ ��H�|$ L�����H��L;p����L��L����H�T$ H�5��RH��H�D$���H�L$���f�H�l$H)�L9�IO�H�T+�H��H9��]������T���H���f����D���H��H�4(H)�H9�v��/���H�l$H�D$PH)�H�x�*tL9�IO�H��1��@�H��L�@H� �@	H������1�1�H�=�Q������H��A�H��H9������u��3H�������A�1�����H�D$8L;p�]H�XH� ��H�X��H�D$H)�H��H��L9��J
M�f�L��E1�H���v���H�l$�,�E����H��H���tD�I�D$�M����I�ċf�H���D$�L$�D$X�Z��.�A��u�H���DF��A���1��#���L�l$L��H)�H��H��L9�IO�H������H������H�,�L�d$ L�t$�N�M���H��L����H��A��tAE���WL���C�H9��NL��H)�H���>H�H��H��u��A��u�H���E���H�l$H�D$PH)�H���x�*tL9�IO�1�H���>�H��H�xH� �61�1�H����������u�3H�������0�H��H9�u�����A�1��1����H�D$H)�H��H��L9���M�f�L��E1�H�������H�l$�)@E����H��H���B�I�D$�M����I��H�H��H�D$�D$��,�A��u�H���vD���H�D$H)�H��H��L9��~M�f�L��E1�H������H�l$�'f�E���WH��H���B�I�D$�M���^I��H�H��H�H�D$�D$�a,�A��u�H����C���H�D$H)�H�@H�pH��	HI�1�H�����H��H�pH� ���=��R��	M���TH�T$H9��f�H�=,�RD�H�CH9��r
A����h
�CH��RL�[�<����L
L9\$�A
�C<=�	L�KH�T$��H���R�(<��
��A��H������A	�D�V�E��A��A��D	�D	�@�~��F�H9����H�=s�RD�I�CH9���	A�����	�CI���<L9���	�����	�CI��<=�_L�"�RE�D��L9��i	A����_	I��H���k�H9��+���@��=�!���B��A��A��A����D	�D	LjH�V@�~��	H��L����H�D$H)�L9��7	L�����E1�E1��2���DH������A�� H�_A��?M��I��I��E	�E��I9���D�gE�l$�A��@��A�\$ L�o��?L�l$I��H��I��E	�A��M9���D�gE�l$�A��@��E�L$ H��A��?A	����f�E�A H��A��I9��d���E1��p���M�f�1�M���L����H��I9������G���fDL��D�|$,H�����I�������H��H�t?A����E���IH�|$�>�I������I���|����@���������f��CH�r�L�K��������`H�L���#�H���C�������4H����?H	�H9�u�I;<��[H9��6�����!�H��A���3���H����?��9���H�D$H�@��f�H�5i�RH�|$81�H�L$�8�H�L$H��I�������vf�H�WI9��9�GH���;���@��t$@���6������H���b?���������H;\$�H�T$�H�=��RD�A���u-H9�w���H9��PH���H�=��RD�A���t�H9����{H�CH���RD�;A���u-H9�w��H9��
H���8H�Y�RD�;A���t�H9��/�xL�:�RH�XH��A�<;�����H9�w2��H��D�L�	�RL��G�A����pH9���<=u�A���tA�����f.�H�AH� tH�AH)����L�@���H�x���L�@��H�p�9���A������L�`�E���|���I)�H���|���DM�����E���~�H�D$H��� �$H����H�|$J�t0���B���M�L�`�E�����I)�H������f�H�P��L�`�E�����I)�H������y���f�H�x�=�L�`�E���C���I)�H���C����I���f�H�@H��L9��#�H��1�H)�H��I��H�L$H�����H�L$H�T$L��L)�H���]���H����H�L$H����H�� H���b<�H�L$H�H%���H	�H�A���E��a�L�`�E�������I)�H�����������H�p���M�f�L��E1�H���K����1�A����H�T$0D��H�=��2�H���QH�5��H�81��j(�A��<=�H9��D�[H�CH�f�RL��F�A�����H9�w-�1DH��D�H�9�RL��F�A���u[H9���@��=u�A�����A�����D��B����	�A������D��A��H����H��D	҈V�����H9�v�@��=t�H�XD��A��H����A��A	�D��A����D�N�E	�A	�D�F�D�^�H9���������f��{
�[�L��H�Z��H�\$���H�D$H�����H�\$A��H���$���H�D$����H��H�AH� �����H�A���H�D$H�@����H���]�L�d$ �)�H��H)���H���F:��	�@���G�����H�CH9D$��{=�	A��B��H�VA��D	������H��L�����H����9��N�H�q�RH��f.���H��H9�u�1��A�H�!��H�=6�R�H��H��@u�����H���v�1���H��B��A��H��D	��F��'������H�5��RH�|$81�躃H�D$ H����H���QH�5��H�81��%�@E1����H���QH�5)�H�81��p%�H���QH�5޿H�81��X%�H����H���L���H���QH�5 �H�81��0%�H�y�QH�5��H�81��%�H�|$���H�W�QH�5��H�81��$�A��������H��A���������L��H��D�|$,�b���H��QH�5��H�81��$���H���QH�5ھH�81��$�H���QH�5��H�81��}$�ff.�f���UH��SH��H����tH�H��H��H�ߺ[]��f�H����H������AUE1�ATI��UH��SH��H���!��A���t&H�H��H��D��L��H��[]A\A]���H����H������H����H�����H������H������H������H������MH��H�����H��H����?�Ȁ�GH��H����?�Ȁ�GH��H����?�Ȁ�GH���?H���΀��?@�w�Ȁ�G��D@�7���H��H�����H���?H���΀��?@�w�Ȁ�G��@H���?H���΀��@�w���@H��H�����H��H����?�Ȁ�GH���?H���΀��?@�w�Ȁ�G��@H��H�����H��H����?�Ȁ�GH��H����?�Ȁ�GH���?H���΀��?@�w�Ȁ�G��PH���QH�55�H�81��"�ff.���AWAVAUATI��USH��H��H�T$8H�|$8dH�%(H�D$x1��&�H�|$8�L��H�D$8H�hH� tH�hH�l$PL�hI��tIM��u#L����H�5��H��H���QH�81��!�A��u�I�$��H��u�L���D��L�$$�1��,�H�$J�D-�D$$H�L$P1�H�D$H�D$pH�D$0H�D$(�H9L$�.H�T$8�D$HH�rH�BH� tH�BH�H9D$��H�yH�|$PD�)�D$LE��A�� �SA�E����FA��#�H�L$HH�T$LD���Z��I��H�D$P�<*�_��0A���	�EA��U�q�A��mtA��u�DD$$�D$$A�F�<S�xH�
J���Hc�H�>��D1�A��T$H��t1���>��M���7��I�,H��L�|$(E�H�L$H��A��A�őD�l$�_H����H9��L�hH�UL��H�<�Mc�D�L$E1��L��L��H�|$X���H�<$L��L����L��L9l$�<H�U�� u�H;E� L�hH�U L���1�A��/���1�A��"���H�\$L��A��t!D���у��H�<$H�t$`��D$`�3�L�4$L��L���,�L��1�L���g��H�L$PH9L$����H�|$0��
�D$$����
���"H�\$xdH3%(H�$�EH�Ĉ[]A\A]A^A_�L�t$�
L��H)����H�xH��ID�H�|$PH���H����A��M�DD$$�D$$���f�H��H�L$PH��H���
���DD��H�=�E1���
�H���-I��L�|$PA��U������L$$���E��D$$H��M�,,L�<$L�t$(M��qf�H�L$P���fDH����H9��gL�`H�SL��H�<�H�|$X�g��H��H�D$XH��tHH����L����L��L��Hc���L��M9�t�H��� u�H9C�L�`H�S L���f�H����H������H�|$PH�t$P�
����I������������H�p�QH�5E�H�81�����D��H�=<�A��{�H�������H��� ��	H��I��A��I)�������H�<$����/������D$L���Z���A��W���M�l$�M�������H�L�|$XH��L�t$`L�|$M�l-L�|$0�s�H����H9���H�SL�`H��L��H�D$XH��ujH�D$`M��tpH�t$XL���k-�H�<$�L���
�L��L��L)�H����H��� u�H9C�}H�S L�`L��H��H�D$XH��t�H�|$�B��H�D$`M��u��s�I���H��M�4,L�l$hM�������L�$$�]H����H9��L�xH�SL��H�<�H�|$X�7��H������L��L��fH~�H�H�D$h�B�L��M9��F���H��� u�H9C��L�xH�S L���H��M�4,L�l$`M������L�$$�O@H����H9��L�xH�SL��H�<�H�|$X����L��L���D$`��L��M9������H��� u�H9C�2L�xH�S L��뱸���H��� ��H����H9���
L�mH�CH�<�L���d�I���HH�<$LN�H��H�D$XL�����H�L$P����A�����H��M�4,L�l$hM������L�$$�UfDH����H9��
L�xH�SL��H�<�H�|$X����L��L��f~�ȉD$h��L��M9������H��� u�H9C�.
L�xH�S L���H��M�4,L�l$hM�������L�$$�R�H����H9���	L�xH�SL��H�<�H�|$X����L��L��f~D$h�)�L��M9��-���H��� u�H9C��	L�xH�S L���H�$H�pI9��0
H�<$L)��Q�H�L$P���H�CI��M�,,H�D$M������1�1�����H��� �f�H����L9��'	M�gH�D$L��J�<�H�|$X�&��1�H��H�D$X�R��I��H��H��u�A�1����I��H�PH�pH� tH�pH�|$XA�A�������5	���~O�I� �|I�wI���|J�6f���H��H��H)�H��w�I�WI�wI� tI�wH�<$M����M9������1�1�����H��� ���L9{�M�gH�C L����H��� �~H����H9���H�EH�D$H�CH��H�|$XH�D$X�h��H�D$XH�hH� tH�hL�xM���yA��m�oH�<$�mH��E1�L���T��H�L$PH�l$���H��� �"H��H����H9��]H�CH��E1�H�D$XH���&���H�|$X���H�D$XH�PI9�����H���QL��H�5�H�81��U�DH��M�4,L�l$hM���k���L�$$�XDH����H9���L�xH�SL��H�<�H�|$X���H�����L��L��f�D$h�	��L��M9��
���H��� u�H9C��L�xH�S L���H�$H�pL��H)�H���#H��L)�I��H���������1�A��c���H��M�4,L�l$`M�������L�$$�[�H����H9��L�xH�SL��H�<�H�|$X�'��H�����L��L���D$`�9��L��M9��=���H��� u�H;C��L�xH�S L���H��� �H����H9���L�mH�CH��E1�H�-�AH�D$XH��t$H�|$X��H�D$XH�hH� ��L�xH�L$PA�F��y�*��<'�5H�˲��Hc�H�>��fDI�wI�������I�W���L�|$0H�L$P��H�T$0H�5F�RH�<$�=��D$$���B����'�H�$��H���M'�H�H�D$H%���H
H�����H;k��L�mH�C ����H;k�wH�EH�D$H�C ���H;k�[L�mH�C �W���H;k�DH�C ���I���i�-I��kM���{H�\$H�$I��@M9�M��H��A�MN�D��H��L��M)�L����M���H�\$H�L$PH�l$��L�c�d���H�h�u���I��?~�?A��ut�H�VUUUUUUUI��I��?H��L)�H�@�d���M��M9���I��I�WL��H��?I�H��H��?I�H�H�I)�M����I�OH�D$`H�\$1�A�H�D$H���.�p���v4�����	�A���*����I��I9���B�D5��p���wă�	����	���M��M9��M)�I�D$I��I��?I�I�M���8I�OH�|$`H�\$1�A�H�|$H����I��I9����€ʀB�D5�E�A��u�H�t$H�<$��D$`���1���M��M9���I��I�WL��H��?I�H��H��?I�H�H�I)�M����I�OH�D$`H�\$1�A�H�D$H���'�x���v-��	�A���"��I��I9���B�D5��x���w˃�	��	���M��M9���M)�I�D$I��I��?I�I�M���I�OH�|$`H�\$1�A�H�|$H����I��I9��NB�T5���	�A��u�H�t$H�<$��D$`��1���M9���H�<$L����H��H�,$L��H����L��1�H��L)�A��AL��@������H�L$P��L����H�t$H�<$��D$`�>��1����H�t$H�<$�T$`�� ��1�����<'w�H����Hc�H�>��M��H�<$L��H�����H�L$P�y�*u�A��Zu�H�<$�H�5�<L�����H�L$P�|�@H�\$A��L���s�H�<$�T$`H�t$`����W�H�\$L��A���E�D���у�����H���QH�5�H�81��1�M��E1��6���M��E1��w���M��E1����M��E1���H���QH�5A�H�81����H�L$PH�l$��1��D���1��k���1���H�T$8D��H�=>��e��H���QH�5W�H�81���H���QH�5a�H�81���DH���QH�5��H�81��h����H���QH�5��H�81��H�����'����H�5�)QH�=���if���H��蓴H��RH�����B��~i��E1�A�L�L������� EE�H��I9�t$���	u�H��H�H������	I9�u�H��GD�GH�W�f.�H�E1���GH�WD�G�f�H�WPL�GX1�H�rL9�s�
��@����{����$t�f��J��-���A߃�]w4�Q�΅ҍBI�����1����H�)�H�5��Q�4��]��r��Qи]��	vz��we��_t`�Q��]��v���a���%]�DH��WhH�wP��h��\���J��@u�H�JI9��G����J�@�]�f.��ff.�@H��~1���|�*tIH��H9�}���*t��-t�H��H9�|�1��fDH�PH9�}�|-t H����f.��|�-u�H�D��|�-u�H�D�H��tcSH�H��H������+��DwEH���Hc�H�>��@H�_ �H��tf�H�{ �����tH�[0H��u�[�1�[�@��f�H�H��L�FH�H�@H�JL�RH�P8�VI�H�HHL�PXD�NL�L�M)�H�L�H�PP���H�H`����V�����htH�@@��h��B�f�ATUSH��0dH�%(H�D$(1���itgI��H��t_H��H�wHH��L��H��A������t$E�KA9�t:A�CD$u0�D$A9Ct&}A��tH���M�H��1�H�@��H�D$(dH3%(u	H��0[]A\���f.�H�F�ATU1�SH��
wqH��tz�GH�����0D��D7�1�A����2�ȃ�2w9L�%����I�4�f��x&H�n�H�D8uH��H����I�܅�HD�H��[]A\���H�T��f�D������H���A�0���9�|NUSH����9�����H����H��Hc����D���H���H��A)�[]Mc�L�ÐMc�L��f�Hc��H����H���@�4���9��}�fD�SH������H���Hc����H���[��SH�����H��t2H�4H�߸fDH���H��H��H�H�H9�u�[�D�[�f�ATI��UH��S�H��<Tt
~Z<ftZ<tu"H�5�<H���#�¸��t.����1�I��L��H���H��1�������[]A\�D<Fu�H�5r<H������u�[]A\�@��SH���c�����x��i����	Ј�i[��AT��@�rUH��SL���H�� ��rH��H�����H�C L��H�[(H���[]A\�ff.��U�8H���S�@H��H�� �\��@H��H�����H�UH��€t	�H�H�UH��%��oEHc�H��CH	‹EH��CH�E H�C(H�C H��H�C0H�E H��[]��SH���H��LJ�H��t>���
[����<H��ǃ�<���H���[�LJ�<��<��H����fD��H�H�����PŃ�4�0H�
�Hc�H�>��DH� �7����HcG�H�G H�xH�PH���H׸H���2H��H��H�H�H9�u��fDH�G H�xH�PH����H׸H���2H��H��H�H�H9�u��fDH�G �H�G H�xH�PH����H׸H���2H��H��H�H�H9�u��fDH�G H�xH�PH��tGH׸�H���2H��H��H�H�H9�u��R����	�H�=aH��1����D��f�H�WH�FH9Gu*H9Vu$H��H�vH������H�����fD��f���H9�t_USH��H�H�H��H������9��E�SŃ�4�H�
�Hc�H�>���H�v H� H��[]�]���D1��D��N(9O(u'H�v H� �6����������@�F9G����H��[]�D��N(9O(u�H�v H� ���������@�H�N(H9O(u��N09O0u�����H�O(H9N(u����H�N(H9O(u�H�N0H9O0�w���뎐H�F H9G �����a������&��H����H��H�=�,H��1������������*���fDAUI��ATUSH��H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H�����nD�fH�����H��$���$H�D$H�D$ H��H����D$0M��D��H��pH�D$H�D$L�����iP��H��pXZH�D$dH3%(u7H���[]A\A]��H�{PH+{HHcNj��A��H9��P����i9��)��f�H���v@��t�H���������w����H��1�1����ff.�H�H�����B�wH��Hc�H�>��DH�F �SH�
�*H����qtH�
�*��rt
����H��H��1�H�F1�����1�[�H�H�����B�wH���Hc�H�>��DH�F(�SH�
�*H����qtH�
*��rt
����H��H��1�H��1����1�[�L�I��A��A�@�wTH�
e�H�V(Hc�H�>�����������������SH�
�)H��A��qtH�
�)A��rtD����H��H��H�u1�1�[���ff.�H�H�����B�!w6H�
ӣHc�H�>��DH�F0�1��DH�F(�H�F �SH�
H)H����qtH�
G)��rt
���u�H��H��1�H�1��o���1�[�ff.���H��H�Ç1�1��I���f�D�GE��~+H�H;2t3H��1���H��H9r�t�ȍHD9�u�1��f���ø�fD���ntE~#��stn��uuQ�������eu3����f��� � �fD��i�����1���v ��D����fDH�A�����ff.������t!�� tT��	t/��
t;}������1��1���
u��1������PH�������fD�����DH�H�H����H�H��H	�H��H���G5�H�H��H������u:H�G H��u�/f.�H�P H��tH��H�H��H������t�ɀH��H����fDI��H�?I��H��v����¸��t�I�y1�H��v�L�������������U� H���SH���8��H��H�hH���H�@���H�CH��H��[]��H�����H��1�H��tH�BH� u�8_����H���f�H�B��f.�ATI��UH�,7SH����L9�tdH9�r�I�H��H9�t?�;y�f�L��H��H���b���~0H�H�H9�tvf��;x�H��H9�u�[�]A\�[�]A\�[�]A\�H9�r��DH��H9�t׀;y����SH��H�WH�wH��K����[��ATI��USH��H�WH�GH;WtH�JH�KL�$�H��[]A\�@H�,H�ҹHD�H9�}�H�oH�4�H�����H�SH�CH9�~�H���H��H��H�CH9�u��f�H�������2�H���X��������hx+SH�����x����h����	Ј�h[�D���H���H��H��
��1��x�����L�OHL�WPH��M9�sA�<	��< ��<#utATI��UH��S�H���H���)��H��H��H��uaH���H����H�H��tmH�5�H������uZ��H������H���H��1����DH�5�eH�������H�5geH����������I��L��1�H���H�#[]A\�]��DI��M9�����A�< t�<	����f�H�5n#H���A���u���H��� ��H����H���@��H[]A\����H`�����AUATI��USH��H��H��~.�|�-H�j�L�j�t/A�|�-L��tDH��H��H��[]A\A]�A�u���fDJ�<.�H�5i"����u���DM�l��H�5M"L������t��H�5>"L������u�H��u��H�5"L�����H��H���^����SH��������/��[�����ATI��H��H��UH��SH������u,H�I;$s��� t�у�	��w�[]A\�fD[1�]A\Ð��w�H��������fDATH��UH��H��1�H)�SH9�|YE��H9�s�~�
t[H��H��H)�H��芿�1҅�u4E��t'H9�v"�E�� t��	��wH��H9�u�H��D1�H9���[��]A\�f�H�F�H9�v�~�
tH��1�H)�H9��H����H�F���f�ATI��UH��SH��� ����H�sHH��L� I��H���L��I�C��L���[]A\�ff.�f�UH��SH��H���o��H�����tGH��tBH�3H��H���ƒ���Ft=����%��Jw#H�ߚHc�H�>���[��H��H���
H��[]��H�[ H��t�H�3H��H���H�
	 H�}H��H��1�[H�	]���DH�
����H�
�R���H�
�@��H�{(H�G�H��i�o���H�W�Hc�H�>��DH�
*�{���@H�
:(�k���@H�
6@�[���@H�
+$�K���@H�
�)�;���@H�
�)�+���H�
"H�3����ff.�f�UH��SH��H�����H�����tAH��t<H�H������u-H�{0t"H���@H�s H���4���H�[0H�{0u�H�[ H��H��[]�ff.�SH��H�� dH�%(H�D$1�H�H�D$H��tH�xu3H��tH�yuH�D$dH3%(u8H�� [�H�;H�������H�H�t$�H�L$赺�H�L$����f�USH��dH�%(H�D$1�H��t$H��H���H��tH�H��H������;��4v!H�D$dH3%(��H��[]�fDH�H��s�H��t*H�������u>H���Hc��H���h���fDH�=�Q���H��H������H�D�$H��1����H���H������T������SH��H��H���H�sX�9���~[�H���H��H�1�H�H1��������[�ff.�SH�GPH��H�p������~
�P�Hc�HSP[�ff.�@SH��H��tH�H������Ot ��+tH��[�fDH�{0u�H�[ ��1�H�1��h�H�H������ff.��H��H�H�N H������6u!1�H�Y1��)��H����1�H�P1����H���ff.�UH��SH��H��H��tH�>H�����G�v=H�
n��qtH�
p��rt��H��H�f1�H��1���H��H��[]��Hu�H���H��t�H�P(H�r H�p(H��H��[]�DH��1�1��P��ff.�H��tH��tH�H������Ot�fDH�1�1���AV1�I��AUA��ATU�SH��L�ch�!fDH��L���}��H���I9�t%A��t�tܺH�5�L�������fD��t[L��]A\A]A^��L���H�5����[L��]A\A]A^�SH�H��~%�?t�H�CH�C�H��[�fDt�H����k��H�C��DAUA��ATI�̹UH��SH��H�� �,��D��H��H���~���Ao$H�CIc$%�H��H	�H���(�P��(�CH��H��[]A\A]�ff.�AWAVAUATI��UH��SH��H��HdH�%(H�D$81�H���H�F(H�=uQI��H��H��?H�H�����H��H��0H�D$0H�D$H�D$(H�D$�'H��0H�t$(L����H��0M��M����I�V0H���|M�~ L�j0M��LD�I�H������;��4w�H�H��s�H�T$H�t$L�|$(�W���t�I�?I��H����I���GŃ�4��H�
�Hc�H�>��D蛯�Hǃ0L��0�-H���;���H�h H�@(H�L$8dH3%(��H��H[]A\A]A^A_�@L��L�D$����L�D$H��H�T$0H���1�H�2H�H��������f.�L��L�D$����L�D$H���f�L��L�D$���L�D$H���f�L��L�D$���L�D$H���v���fDL��L�D$�S��L�D$H���V���fDL��L�D$���L�D$H���6���fDL��L�D$�c��L�D$H������fDL��L�D$����L�D$H�����fDL��L�D$���L�D$H������fDL��L�D$���L�D$H��������H�=�HH��1��p�����ff.�H����ATUH��SL�H��I��A��A��Mt4A��O�A��L���0�L�9���H�X H�h([]A\�@H�H������+u�L�f(�8�+����H�@(H�u(H�h0H�M0H�VL�` H�P(H��H��tH�Q(H�U(H�U�LH��H�PH�C(�-��H����H�H������+�U���H�V(H�H������+�>���H�J0H��H��tH�A(H�M(HJ(H�h0H�E0H��tuH�H(H�B0H�H(H�EH�BH��H�S(�����H�v H��t���H�C H��[]A\�fD�8�+����H�h H�@(H�@0H�C H������H���H�B0H�h(�f�H�H������+uL�H��I��A��A��NtMA��+t�2���f�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H��t;H�q(H�H0H�q(H�RH�P�fDH�F L�I��A��A��+u��f�H�H0H�Q(��fDAUM��ATI��UH��SH��H��H���tH���ɟ�H��L��L��8�g����H�h H�X(H�@0H��[]A\A]�fDATH�JUH��SH��t`H�F0H��I��H��tL�`(H�C(�8�+���H�@0H�h H�@(I�D$0H�S0H�B(H�EH�CH��[]A\���8�+�a���H�h H�@(H�@0��ff.�AUATI��UH��SH��H���H�H��H������LtM~3��M����OuTH�v ���H�C H�@H�CH��H��[]A\A]�f���+u*H��[]A\A]���@H�v(H�H������+��H��0�M���H�X L�`(H��[]A\A]�@L�n(�8�+I�M�q���L��H��L�h H��H�@(H�@0�o���H�߾LH�C(H�@H�C覹�H��H��[]A\A]��H�J�+�8�
���L�` H�@(H�@0����@����H�C(H�@H�CH������USH��H��H��tHH�H������|9H�̓�~;��gu,H�v0�]����oMH�C0KH�HcU%�H��H	�H�H��H��[]�����oEC��H�I��H������NuL�F I�H������+t���fDL���H����UH���+SH�Ӻ8H������H�S(H�h H�@(H�@0H��t8H�r(H�P0H�NH�r0H�H(H��H��tH�N(H�J(H�RH�PH�C(H��[]ÐH�C(H��[]�DH��t[AUA��I�պ@ATA��I��L��UD��SH��#H���k���H��H�X H��I��L�`(L�h0�h8��H��[L��]A\A]�L�ɺ �l�.���ff.�AWAVI��AUI��ATI��USH��(I�dH�%(H�D$1�I�AH�$H�D$H����H�H��������H�Z H��u��H�C H��tH��H�H������t�I��@�L��L������L��L��H�@ H�ź8H�@(H�X0H�@8I�H�$�J���L�h H�h(H�@0H�t$dH34%(uH��([]A\A]A^A_�H���v���1��o�������AVI��AUI��ATUH��SH�H������u`L�f(H��I�D$ H�H�uH������.H��@H����H������uYH�E(I�l$0H�C(H�EH�CH��[]A\A]A^�H�N�8��m�H��L�p I��H�C(H�@0L���{����H�M�8�L���2�H�h H��H�@(H�@0�}���f.�I���H��H��1�����H�u�A���ff.�AUI�պ8ATI��UL��SL��H��H�L$0H���t7�$��L�h L�`(H�h0HcH���H��H	�H�H��[]A\A]þ(�v�L�h L�`(H�h0���AWI��AVM��AUI��ATUH��SH��L�d$XM��ttL��L��H�L$L���	�H��H��L��ATH�L$M��L��L�L$`�(���I�$I�T$H�C(H�KH�SY^H��tH��H���1�H��H��[]A\A]A^A_��H��ATL�L$`����H��XZH��t��ff.��AUI��ATI��USH��H�H����H���H��������������tN~$������_uI�$H��[]A\A]���u�H�[ I�$��t-H��t(H��H���H�{0H�C(�L�c(H��H���m���H��[]A\A]�fD��+������u�H�C(L�` H�X ��u�H���0����f����a���L�c(H�[(���p�����DH�C(H�S0H��tsL�c(H��tZL��L��L�c0����H�[0���8����DL�c H�[ ���!����fDH�C(H�S0H��u�H�����L�c0H����H�Å������H��u����fDH�S H��t!L�c H��t(L��L��L�c(�?���H�[(����H������L�c(H��H���:���fDH�
��� �_��I�$�S���f�SH��H��t*�H�H������t��uH9[(u	H�[ H��u�H�Ѿc�(�K�H�X [�DAVM��AUI��ATM��UH�պxSH�L$0H�� ��H���H��H�X L�p(L�h0L�`8�@@H�D$8�oH�D$@AD�oH�D$HIT�oQdH��tH��H����[H��]A\A]A^�@AWI��AVM��AUATI��USH��8dH�%(H�D$(1�H����H��H��H��H�VHE�I�;L�L$H�T$H�L$�8H�@H�D$�E�HcUL�L$H��L�` H�h(H��L�h0H�%�H	�M��H�tVL�ɺ0�L����H�X H��L�p(L��H���;�H�t$(dH34%(H��u\H��8[]A\A]A^A_�H��fDH����M��uH��u�1��f.�L�ɺ0���H��L�` L�p(M��t������AWI���0AVAUI��H��ATI�Ժ(UH��SH���D�L��(H��H�@ *�0I���$�L��8H��H�@ ��+H����H��H��H�@ H��H�@(H�@0��L��(H��0H�$���L��HH��H�@ &�OH�D$��L�D$fov�H�À`0�H�@ L�@(@4M��tbL��L��L��H����I�ǀK0H�4$L��H�����L��L��H��H����H��t�PH�C �@�S�CH��H��[]A\A]A^A_�L��8�NH����fo
��I��L�p H(�ff.�UH��H��SH��H��H��tH�H������OtH��(�/��H�X H��[]�H�T$1�H�J�1����H�L$��@�H����H��������AWAVAUATI��UH��SH)�H��H��H�NL�nH9�wpJ�)I9�wgM��I)�L9�|aN�t-�H��I�v�v��L�sH�CI���tN�$8J�<(H��L���%��H�CL�sB�0H��H��[]A\A]A^A_�fDL9�}+1�H�e1�����H��1�[]A\A]A^A_�f.�N�t-�H��I�v���L�sH�C�y���D1��DAWI��AVAUI��ATU�SH��H��(H�~L�ft�.M9��>E������������H�|$`tH�T$`D�
M9�����A�����������E1�H����A��H����H�1�1�L��1�H�L$����H�L$��fDD�L$L�D$H�L$���D�L$H�L$L�D$A��u	L9��V�+���?���H��D�L$L�D$H�L$���D�L$L�D$��H�L$�����L��H��L��L�D$H�L$���L�D$H�L$A���������^���fD��uLH�|$`uv@E1���uyH������L��H��L���R���L�cH��D�3H��([]A\A]A^A_�f�E��u�L��H��L��L�D$H�L$�3��H�|$`H�L$A��L�D$t�����T�����uE��A������M���m���fD���\���A�A�A��EC��K���@E1��?����E1�H�|$`�(���H�D$`������A�����I�L$M�@1�L��H��\1����f�AUATUSH��dH�%(H�D$1��H����H�FI��H��H��L�BH��tOM��tJL9���H�JH����H�~�|D�.E���������A��tp��tkL�CH�EH�HM�@1�L��H���1��H��H�����H�����1�fDH�t$dH34%(��H��[]A\A]ÐD�
E��u#H��� ��D�E��uH�����A��L�CH�KD�L$H��H�SH��H�D$L��P�7����D$�X�Z��H������A��� ���H�������������ff.�AWI��AVAUATUSH��(D���H�|$E����H���!H�L�n H��H��H������+��L�|$L��E1䨀ucDM���7H�|$L��L����������H�C(H�|$H�[0H�_0H����H�C(H�H������+�EH�EL�m ��t�I�uI�}H��~�1�1�E1�1��=f.�A��	uJ��D�XAH����A9�|1A��Ic�H��H9�~"A9�~D�A�� u�A����Ic�H��H9��E���'���H)�A�EI��H�4L��L�T$���L�T$I�UM����
�I9���
�A�}v	I9���I�EM�UB�M�������H�H������+t!��@tH��(L��[]A\A]A^A_�f.�H�S0H��t���H�H������+u�H�\$M��H��H�k H��t8H�EE1�H��H������?��w����f�M��t�I�EL��M�m ����M���`���A�E�6���E1��\����H�H�D$H������@�<����?�N���-���f�AWI��AVI��AUATUSH��H���H�4$H�H�@H�L$H�����ZE1�A��H����E���I�� D���p��Hc�H��H��H��H��=�H����E��~VI���A�M�L�H�@H�L�HM�,���I��L�I��vL��L��������uHcÃ�L�\�L��M9�u�D9�|\H�L$L���81����H�$H�h L�p(H�H0H��[]A\A]A^A_�f�1�H��v0D�hE�d����f.�I�� ���B��H���D1��@I���H�}H�H�0����	�������ff.�ATI��UH��SH��H��H�T$H����H�H��������H�J H��u�H�A H��tH��H�H������t�H�t$L��H�L$�3�H�T$H��H��L����HcKH�H����H	�H�L$H�H��tH�1H��H������t��tH��[]A\��Hc��H��H	�H�1H��[]A\�H���o���1��h���ff.�f�AV1�I��H�=�AUL�-�ATU1�S�~��I���I��H��tG�H�L��L����H�1��`��H�[H��t��~ۺH�5�\L������DL��H�5�*���I��[L��]I��I���A\A]A^���ff.�@H���H��tLUSH��H��H��H�h����H�����h uH��[]��H��H��H�5��[]�����UH��SH���H�����H���H�(H�PH�����h uH��[]�DH��H��H�5��[]���ff.�AV�@AUATI��USH��H��tIH��tdH�5��H��L�-F�I���fDH��L��IE��L��虸�H��u�[]A\A]A^�[L��]�A\H�5�A]A^�l��@H���u���ff.�ATUSH��H���� I����^��H�{�H���M��H��H�EM��tH��u�H��H�][]A\�@H��L��H������H�]H��H���[]A\��AUM��ATA��UH��SH���h���A��H���H�htH��H��[]A\A]��H�������t����L9�u�蔔�H9�t�����H�C�ff.�AVAUI��ATI��1�USH��L���1�����H��L��8L�p�@H�������L��H��H�h H��H�@(H�@0[]A\A]A^���AUATA��USH��H��H�GPH�p������xW��D��H�����L�kP�u�Hc�I�D-H�CP��D��H��[]A\A]�DH������H��t�H��L��H���m����������ɐ��SH��H�� H�t$dH�%(H�D$1����H��H�D$H�pH�xH� tH�x����H�T$�H�XH�T$H�T$H�L$dH3%(uH�� [��4��@ATH��I��(U�eH��S���L��H��H�����H�C H��[]A\�f.���H��tSH�~H������H��[����ff.�@AWAVAUI��ATI��UH��SH��H��H�H������Ctw�����~
��?t@��@tCI�$H������@���C��I�݃�?t~H��L��[]A\A]A^A_�@���H��H��L��H��H��[]A\A]A^A_���@H���x������H�Å��I�$H������@�_��C���?tI���@��@�'H�C0H���ZH�@(H�P H��tNH�H������?u?H�r I��I�T$ H���J���
H�� L������ ���fD��?�L��H��H��I�������f�M�t$ ��?�M������@��H�C0H���cH�@(H�P H����H�H������?��H�r H��L�����tdI�t$ H��I���\��I�D$ I�D$(H�S0H��HC(I�D$0H����H������H�R(H�B0I�D$0H�P(H�C0H�P(���DH�� H��E1��֦�H�� L���Ǧ�����f�M�L$0L��(H��?M�|$(L�L$���L��8H��L�p �+H�$���L�L$L�$H��L�x(L�H0H�K0L�@ H��tH�Q(L{(H�B0H�P0H���H�J(H�S0H�J(H�@I��H�CI�D$ �b���H��������?�8���H�s ���fDM�t$ M���Z���f.�I������H������H��H�����H��H�@(����DH�s L��H�����������I�t$ H��M�����H�C H�� H��I�D$ H�C �Y�����@H�C0�U����H�S0H�B(�����UH��AWAVAUATSH��HdH�%(H�E�1�H���"I��M�pI�PI��A��M�M9���A�JM��1�D9��I�E�H��L��IN�I9�vA�}�
u�fD�{�
t	H��H9�u�I�UH��IN�I9��A�EM��<
u�fDI��L9�t
A�$<
t<
u�L��H)�H����H�{�H�E�I9��VH�g�H�E�M9���E;uIcBI�M9�MB�L9�L�M�LC�L�u�I�������I�P1�1����M��L�M�I��u��L�M����!I)�M9�H��MF�L��H)؃�H�H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�E�L�l$I���H9�����H)ؾ H��1�fD���	E�A�LH��H9�u�L�H�E�H�J�^H��L9���H�U��I��D��AUL�M�H�5��L��R1�耻�XZM��uL��聛�H�E�dH3%(�VH�e�[A\A]A^A_]��A�A9�uIcRI�M9�MB�I9�LB�L�u�9�t�H���L�M�H�E�H�E�I������x�����
L���v��L�M�I��H�@H�������I�VI� tI�V�|�
�e����H�5�L��L�M��n��L�M��D���DA�y�
� ���I�A�I9�sA�y�
�VA�JH��I��1�L)�M��D9�����fDIcBH9���M�,L��H��L)������H�E�M)�u�E��AUI��H�5��L��ATH��H�U�A)�PH)�1��
��H�� ���@H��L��L9��L���I)�H�Ͼ~L��L�M���L�M�H��L��&���I�xL��L��L��D�]�L�U�L�E�L�M��V��L�M�L�E�I��L�U�D�]�I9�H��HFE�H�E����I�xH��L��L��D�]�L�U�L�M�L�E����D�]�L�U�I9�H��L�M�L�E�H��HCE�H�E��]���I��L��L)����L��H�]��S���M���������H��t
���9t�H��L�G8H��p�]��ff.�f�SH��H�� H�KH���dH�%(H�D$1�H�C`L�BH���<$H)ȉ|$H�߉D$H�CPH)�H�N1��D$1��&������;$tH�D$dH3%(u#H�� [�DH��pL�C8H��H��������C��UH��SH��H��8dH�%(H�D$(1����E<'w1H��k��Hc�H�>��fDH�5�IH���q�����H���!����}���"��xH��uyH������umH��xH���H��t8H�q1�H��~-�H�AH��H;Xt�8t�H�XH��H9�u�H�D$(dH3%(�H��8[]��H�sH�=��1����H�D$H��QH�H�D$�%����H���H�=	
H�D$ 1�����H�|$ H��舛�H�t$��ɘ�H�U`L�E8H��H��H�EH���H��H)‰$�T$H�UP�L$H)‰T$H�����H�� �w�H��HDž �n��fDH�53H���@H�5;%�s���@H�5iG�c���H��H�=��1��+��H�D$�����<��ff.������h��x�@������9��t�DH�����U1�H��H�
��SH�0�H��H������H��t
���;tH��[]�f�H��pL�E8H��H��H��[]���@ATI��UH��SH�����H���v����txA�$H���H����H�SE�D$D�KL�H����S9�u	E9���H����1�H��AR1�AQL�
�RH�e�踽��H�� H��[]A\����1�H�
��L��H��H�/�腽��M��tXA�$9���\���H��pL�E8��L��H���(���;����H�=��L���������t��S���[]A\��%����ff.��USH��H���H�h81�H��uH��[]ÐL�EH���H��1�H���I���м������;Mu�L�C8H�UH�߉D$H��p�u��D$H��[]�f.�USH��H���H�h H�P(1�H��H	�uH��[]�f.�L�
D�H��tdL�EH���H��1�H�U�1�I���2������9MtH���[]�H��pL�C8H�UH���ѽ��f.�H��L�
�5�@AUI��ATI��UH��SH����H�uB��L��H��@�þ�����H�@ H�@(L�`0�X8H��[]A\A]�H�
j�H��L��1��h������A;Mt��H�H��pL�E8L��H���
�����H�����ATI��UH��SH��H���v@��tGH���1�H������tB1�H�
��L��H��H����׺��M��t���A;$t.[]A\ÐH�������t���f�H���H��1�[]A\�{��H��p[L��H��L�E8]A\�N��fD��ATI��USH�n H���E��t#��t+H���>��L��H��H��[]A\�l�@H���P�����u�H�
J�L��H��1�H����������A9$tH���1�1�����f�H��pL�C8L��H��誻����ATI��UH��SH�:H��H������?t$��@u7�fH�����H��L��[H��]A\���H��H�RH������H����@H�
���qtH�
���rt�K��H��H���1�H��1��E����AUATI��UH��SH��H����H�H��H������?����@u<H�߾f�O��foEH�CHcU%�H��H	�H�H��H��[]A\A]�f�H�Ѿ+�8���H��L��8H�X �fI��H�@(H�@0�r��H�@ H�@(L�h0H��[]A\A]�H��[]A\A]���H���1�1����H��H��L��[H��]A\A]�h��AVAUATUSL���M��tr@��taH��L��L�-nH�[ H��tKH�L�cH������tN��������H�
�L��H��1�H�k�������;Kt~M�v(I�F []A\A]A^ÐL��H�;�L��H��1�艷�����;K�p���H��pL�E8L��H���4���U����H�
���H�
���H��pL�E8L��H������g���ff.�f��V@��HH�N8f���f%�	ЋV0f��HH�����8H��t:H�H(��~"H�P H�@ H�P0H�@8����H�@0��fDH�H0H��u��DATUH��SH��H���H��t*I��1�萔��u<H���H��[1�]A\�7|���ۉ�H��1�H���H��[]A\�|�1�H�
z�L��H��H�������M��t���A;$t[]A\��H��pL�C8L��H��[]A\鮷�ff.�USH��H��H�|$0A�AhtH�����*H���|�F(H�v0A�A0I�q M��tPA�@(A�A4I�@0I�A(I�@ �oI�A8I�Q`I�A�ah�AAHc%�I�I@H��H	�I�H��L��[]�A�A41�I�A(�@A�A0�fDI�iH�
t�H��1�H���H��L�L$��L�L$���A;Iu�H��pL�C8H��H��蝶�L�L$�v���H���gAUATE1�UH��SH��H�H������O���L����M����+t�3H�H������+u
H�^ H�v0H��u�H��tH�H������-tHM��t1I�\$H�
��H��1�H���H���#������A9L$��H��[]A\A]��H�{(u�L�kH�
F�H��1�H���L���ڳ�����;Ku�H��pL�E8L��H��艵��l���@H�^(�K����H�v(H���K���H�H������M�������fDL�f(H�v H������H�H������L�����f���H��pL�E8H��H��H��[]A\A]���AWM��AVI��AUI��ATM��UH��H��SH��H���8���H�����Ao'H�cIc%�H��H	�H�H�L$@���L�����for�H��H�h L�h(H�X0L�`8@@H�D$H�oH�D$PIP�oH�D$XQ`�oYpH��tH��H��蔷��H��H��[]A\A]A^A_�f�L��� �,L�����H���b�����AVA���AUA��ATA��USH��H�=���G�D��H��H�������H��H�5G���H��D������D��H��1�H�5V����H��H��H��H������[D��]A\A]A^�ff.�f���S1���1��~��H���f��[H����{�ff.�f���AU1�I��H��ATA��USH��H�=wH���x��L��H��H���J�D��H��1�H�5���f��H��H��H��H��H���[]A\A]�?���ff.�@��L�N�NH��1�D�FD��)�F @��D�ND���D�@)��H�P�D����H�����V���V���V�D��L�GHH�O`H��H�WX���L)�L)‰0�H�p�P�D��H�H��H�VÐ�����H�W`H��H+WH�V��N�V�ff.�@��L�GHH�O`H��H�WP���L)�L)‰0�H�p�P�DAWAVAUATE��U��SH��H��8dH�%(H�D$(1��Ѓ��������4L�l$H��L���Ԇ�H�����L�3L��8�=H��I���=���h,�<L�x �@(D�`0I����h ���Ch��H�L$(dH3%(��H��8[]A\A]A^A_�f������;���<�L���L�d$L���#��H����׿�L�+L��0�;H��I������h,�:L�p �@(I�E���h �R����sh��#�H���x��5���fD�D$L�l$H��L��蘅�H����L��L��8H�߾>I��L�;�����L$�h,�=L�p �@(D�`0�H4I����1���;���D$��H�l$H���#��H����׾�L�#H��0�<H��I�Ž;���L�h �@(I�$�P������ff.�ATI��USH��H�� dH�%(H�D$1�H��誄�L��H���H��H��H��1��@���H��t���;Mt 1�H�T$dH3%(u&H�� []A\�DH��pL�C8H��H���ʮ����S����UH��SH��H���H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1��H�=��y�H��$H��H�T$H�L$H��H�L$0H�$�D$�D$0H�L$ �/��H�$H�pH� tH�pH�����H��H�D$1�1�H�$�=y�{hH��H�$�޽��H�$1�1�H���H���׫��H�<$1���H�{xH�4$����H�$1�1�H�p�H��訫��H�<$1��ͫ�H���H�4$���H�$1�1�H�O�H���v���H���j��H9�t%��h H�D$(dH3%(uH���[]�@蛋�H����荤�ff.�f�H�H����AWAVAUI��ATUH��SH��H��H�D�`D;b��L�:H�(E��~pA��1�L�5���f�H��I�<�H��tJH�|�xBH���t9H���v@��u
�߰����u!I�<���|�I����t�L��H��1��
��H�CI9�u�H��[]A\A]A^A_�f�1�H�5���Ұ�H�UH��Z���fD�ff.�@��H��H���r�SH���H��H�pH�L�PH��t4L�NI��I��w�DfDI�AH��v>I��H�IM��tM�RM��u�1�H��vH��H���~������E�[�L��I��@H��twH��wLI��v{H��L���K�������M��@��M����@��tD��t@I���H�H��I��[�f.�H��H�������¸��t�[����[�H��`H��[�˼�1�[��U1Ҿ�H��S�H��������u��H���1�H��1��ݨ��H����[]�@ATI��UH��SH���H��H�PL�H���L�JE1�I��w�f.�M�II��vv1�I��v&L��L���3�����t���%���������D��M�RA	�M��u�I��vsL��L�������td�����������tQE��ul[]A\��I��u�H��`L��H��註��t$H��`��H��萻�����f�H��H��H���[1�]1�A\鶧��fDH��H��H���[1�]1�A\閧��E1��E���ff.���ATI��UH��SH���L�HL�L�XI��v[H���DM�[I��vGI��vH��L�������uaH��L�����M����H����!ʅ�u$M�RM�I��u�E1�I��w�1�I��t7[��]A\ù��t�P�I�Hc�H��H���[]A\ù[]��A\�@H���v���tI��$`[H��]A\�m�H��H��-���v���f�UH��SH��H��H���H�@H��vH�xt1��%���u!1�H��H���$�������H����[]�DH���[]�@H��dH�%(H�D$1�H�$H��tH�H������t@��tH�D$dH3%(uFH���fDH�v H��蔽��t�H�$H��t�H�(?��H�v H�������t�H�$H��u�����AVI��AUATE1�UH�-HQSH��H����H�H������.w%HcD�H�>��DH��H�C0H��u�H�[ H��u�E1�[]L��A\A]A^�@H�S(H���H�H�������H�z(u�M��LD�[L��]A\A]A^�fDH�s(H��t�H�{0t�L���@���H��t�M��H�[0LD��{���H�s H�[(H���g���L������H���V����@H�s H���H���L�����H���7���L�k(M��LD�M��t.I�EH������uRI�u0L�����H����M�m8M��u�H�[0H��������(���f�H��L��E1���[L��]A\A]A^�fDL��1�E1�1�H�����[L��]A\A]A^�fD���H���1�H����}��[L��]A\A]A^ÐE1��t����ATUSH��H������H�ŸH��uH��[]A\�f.�L�eH�
��1�H��H���L���Q������1�;Mu�L�C8L��H�߉D$H��p��D$H��[]A\�ff.�f�AWAVM��AUM��ATI��UH��SH��H��H���
tzH���tqH���9���H��tH�H��������L��@�L��茵���AoH�X H�h(@0IcH���H��H	�H�H��[]A\A]A^A_�fDH��L������H��tH�H������t1L��@�L�������AoH�X H�h(H0�f�I���I�H����9�uM��M�x(M��u�L�D$L��@t\�L��迴���AoL�D$L�x H�h(P0H�IcI�@(��H��H	�H�I�EH�CH��H��[]A\A]A^A_�D�L���c����AoL�D$L�x H�h(X0�ff.�AWI��AVM��AUI��ATI��UH��SH��L�L$���L��H�����I�L$H��8�+���L�L$�8H��L�` �%H��H�@(L��H�@0�Ƴ��IcH�L�h H��L�x(��H�X0H	�H�H��[]A\A]A^A_�DH���?AVAUI��ATUH��SL�&H��I��A�����A��;t(L��H��H��[A�]�A\A]A^��L����H�=?PL���������L�%t_RM��u#L�5	�L��胆�I��H�Q_RH��t�L��H��(�2�ϲ��L��H��8L�` �+I��賲��L��H��8L�p �$I��H�@(H�@0臲��H�X H�@(�L�`0[]A\A]A^�fDH�3H���L��1�H������8���1��DAWAVAUATUSH��H��H����H�A��H��I��E��H���ƒ���F�����P�����owaH��KHc�H�>��E��tKH�s L��H���<���H�s(L��H��H�C �)���H�C(H�H������Z����[u
�]H���s�H��H��[]A\A]A^A_�fDH�^ H��t�H�H�����P��c���H��H���^���H��t>H��H���N���H���v�����t'H��H���7���H���H�i�H�01�H��軓�H�H��������@A���>A���T������H���H�d�1�詑��4���@A���FA���������H���H�%�1��A�����@L����H�=�ML�������t'A���-A��u���H��L��1����8H���q����fDA����A����������H���H���1��ِ��d���@L����H�=�LL�������t/A���uA��u���H�v�L��1�舐��L��(�2H��苯��L��8H��H�@ 7�9I���k���H�X H��L�`(H�@0����H�s E��L��D��H�����H�C ����L�{(E1�E��t
E1�I9�A��I�w L��D��H������I�G �o����H�s A�L��H�����H�s(L��H��H�C A�����H�C(�'�������H���H��1��u���������H���H�[�1��U��������H���H���1����������H���L��1�������@���H���L��1��ɐ������\H���wo��r���f�AVAUI�պATI��UL��A�SH��H�����H��H��8�I�����L�p H��L�h(L�`0[]A\A]A^����DAWI��AVM��AUATUL��A�SH��H��H��L�l$PL�d$XH�T$��$���H��H��h�H�$�K����AoL�$L�T$L�x0H��@8�AoML�@ HH�Ao$L�P(PXH��[]A\A]A^A_�s���AVM��AUI��ATI��UH��SH���d���L��8H��%�Ϭ��Ic$H�H�X H��L�h(��H�@0H	�H�[]A\A]A^�ff.�@��ATU��SH��H��dH�%(H�D$1���uz�� u5L������I9��H�L$dH3%(���dH��[]A\ÐL�f藠�I9�t����������z��H;Ct��;t�H�C�H�T$H��������D$����~2��tE��u8�a�I��L9ct���td���[���L�c1��P�����u���I���ѐE1���H�=|"�l���I�����n����fDH��蘟���;���H��舟���fD���tZ��t=���H;C�����;t�H�C1����H�=�!��I���<���@�c��H;Cu�����H��������Q��UH��SH��H���/���uH��[]�@H�U��H��1�1�L�BH��H��[]魗��ff.�f���ATI��UH��SH�����H���r��H���jd�H��u[��]A\��H���x��H��H��A��1�[]��A\�fD��H��u1��@AWI��AVM��AUM��ATI�̹UH��L��L��SH��H��H��转����L��L��H���ǘ�I��I��Ic�H��蓏��H��tL��H���C��tZL���h�L��H��H������L��1�L��H��H��T$@H��L��H��H��薱��H��I�H��t+H��tH��H��H���H���I�H��1�[]A\A]A^A_�@L�� �lH������H��t�H��u�H����ff.����H��L��I�IH��A�q H)�H��M�IH�8L�@�Ԋ�H���ff.�@��H�����H���@��H���iff.�AUATI��U��SH��H���l��L��H��I�����L���q���H��H��贒�H��H��tH��H��[]A\A]�D�Sl��
H���j�L��I��軤�L��1�H��H�� 1��%��������i���������������A��	�A��@	Ѓ�	�D	���i�D���ff.���H���1�H�H��v�zH�@H��vxHc��B>f���SH��H�����H��p���H������H��[�ג����Hc��H���H�H��t!H�JH��@H��tHcIH��H�RH��u�Ð�����Ռ��D������=Y�ff.�f���S����Y����hH��Hǀ��@p����覀��hH�@H�@H�H�C0H�C(ǃ(HǃHǃpHǃ�ǃ�Hǃ�Hǃ��@��H���d[�Hǃ�H���H��[�ff.�f�����H��H��`����H��H��p�ff.���SH���
辘���H��x[�ff.�@����i��@��SH����j�
�w����H���[����H����@����h�����ff.�����������h�����	ʈ�h�ff.�f���ATI��UH��SH���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H���H��twH��L��H���$H��$��D$0H�D$H�D$ H�D$�[��H�CH��~H�SH� tH�S�|�
t:H�D$dH3%(uFH���[]A\�fD1�1��O^�H��H����q���H��H��聦�HDž���?��ff.�@AWAVAUA��ATI��(USH���H��H�L$dH�%(H�D$81���U�H�ŋ���EA�E�=`�s��H�
�>Hc�H�>��H���H�EH���H�CL�e�7H�H�@H�UH�E �����H���k��������h �gH�D$8dH3%(��
H��H[]A\A]A^A_�H�[��H�J��H�8��v���H���j���H���^���H����R���H����F���H����:���H����.���H����"���H�~�����H�j��
���H�Q����H�8���H�����H������H�������H�������H������H������H������H�t����H�\����H�H��z���H�4��n���H�!��b���H���V���H����J���H����>���H����2���H����&���H�������H�������H�|�����H�i����H�T����H�@�����H�������H�������H�p����H�T����H�>����H�)����H�����H���~���H���r���H���f���H���Z���H����N���H����B���H����6���H�u��*���H�c�����H�R�����H�:�����H�����H������H�����H�ʿ����H�������H������H�z����H�^����H�C����H�(����H�����H���v���H�ܾ�j���H�ž�^���H����R���H����F���H�z��:���H�b��.���H�I��"���H�/�����H���
���H������H�ܽ��H������H�������H�������H�u�����H�[����H�B����H�)����H�����H������H�ݼ�z���H�ü�n���H����b���H����V���H�x��J���H�^��>���H�E��2���H�*��&���H������H�������H������H�Ż���H������H�������H�y�����H�^�����H�D����H�����H������H������H�����H����~���H����r���H�|��f���H�i��Z���H�A��N���H�0��B���H� ��6���H�"��*���H������H�]�����H�J�����H�߽���H�ν���H������H�������H�������H�����H�ֽ���H�Ľ���H�
!���H������H������H�޹�v���H� ��j���H���^���H�ƹ�R���H�ƹ�F���H����:���H�(�.���H�t��"���H������H���
���H�
����H�����H������H�,�����H��:����H�7t����H�r����H�v���H�����H�
����H������H�0^�z���H�Ѕ�n���H����b���H����V���fDH���M�t$1�1��D$3\xH�D$I�D$M���D$7L�I���;���H�D$M9��#H�l$ M��L���P���?����\����o��"�6������ ��^�M��L9���DH�T$H��L��� m�Lc�E����H�D$H��L��M�H��P �����q��������J���2L�=@����t���f.�M9���L���b�L��H��H�t$H��M��M���֭��L9��]���M��H�l$ M9�vL��H�t$L��H��L)�読��L�t$�E$H��H�5�L�EM�NP�E P�EP�EP�T$<1��M�Ջ�H�� L��H���������L�=��M9��Y���L��H�t$L��H��L)��:����>���DL�=O��$���@��tcL�=P���
�������u���M9��YL��L��L)�����L�=#�����@��	t+L�=���
�����(���fDL�=����@L�=ڻ���@L�=ֻ���@L�=���|���@L�=���l���@M9���H�D$H��L)�HcPH��L�H9�B��P����������L�t$3M�dH�D$(L��I��M��M��@A�$H�t$H�߃��H0<	�P7��OˆD$5A�$���H0<	�P7�ȹO�L��I���D$6�ͫ��M9�u�H�D$(M�lM���8���fDL�=ܺ���@L��H�t$L��H��L)�M��臫�����f�L��H�t$L��H��L)��j��������`~�ATA��U��SH����h u[H��t/H�sH���Uh��jH��uH��蝖�Hǃ[]A\�D��D��H�������f�L�OPH�GXH��H�5��L�G`���L)�PM)�1�L+GH�!��XZ�o���f.�AUATU��SH��H��H��t��#�A�(�����ju/H�CH�SH��H�p��H�CXH�CPH�C`H��[]A\A]�@H�{`H�sXL���H)�虶��H�sH��L�hI����c��fL��H������ff.��ATI��UH��SH����h ��I9���H��H����H�V��H����H�N�L�1Ҁ�
���1Ҁ�
ux9��uL��H+CHH9�t"�A�9H������H��H����H��H��L��L)��Y������H��H+{H��Hc�H9�����H�k`[]A\�Hc�9���}����L�OPH�GXH����L�G`���H�5ѝL)�PM)�1�L+GH�?��XZ���1�1��'���H��H��H���H;Ft�>t�H�F���L��H+{H��Hc�H9��+����
����AUATUSH��H��H�o@H�G@H���~H�WXH��� H�s`�qH���/��������~Eǃ���H�U���H�EH�k8H�H�CPH�SXH�CHH�C`1�H��[]A\A]�fD�������h�|A��H�WXH9WH��H�s H�������H��SH��H���=H�S(���H�BH9B}pH�C0H�PH�JL�mH�HH�l�A�}uL���pk����H�!OQH�5/�H�81���z�
�t���fD��h�����H�SP����L�,J�<��m�H�S0�L�hH�@H�H�1�H�C0�a���DH��xtVE��tH���L9�t�}t�EH�EH�uH�}����UH��x��7H�UH�P���#��H���H�����i�H�SX�����H�SX�'���������L���ff.�f�SH��H�WPH;WXs"��huH�@wH�rH�sP�<
t[ÐH�������u,H�SP��fD�
H;sXsڀz
u�H���
H�SP[ø����[ÐAUATA�����U��SH��H����H���q������tcH�CPH;CX����h����H�{@��H�pH�sP�(@��
����tI���tH�SP��h�H�B�H�CPH;CHw1�H��[]A\A]�fD�z�
u�z�
u�H��H�SP��f�H���L�kP�
A�}�H��PX���B���A�E�<_�5������,����y���f��H���S�����uBH�CP��h�<�����
H;sX�;����x
�1���H���
H�CP����D����h����ff.�AUE1�ATU��SH��H��L�gPL��H;CX����h��H�{@��H�pH�sP���
tM���t	��i����r��!������B���wHL�cPE1�L�c`H��D��[]A\A]���
H;sXs�x
uH���
H�CPf.��B���v���_t�H�SP��h�H�B�H�CPH;CHv��z�
u��z�
u�H��H�SP�@�H��������n���H�CP����f�A����H������A	�1���f�SH�5 H���0��H�CPH;CXs�8_t!H��E1��
1Ҿ:[���f���hu/H�{@w(H�PH�SP�8
u�H;SXs��x
u�H��H�CP�D�H���+�����u�H�CP�AWAVA��AUATUSH��H��8dH�%(H�D$(1����h �
�ChH���?x��A�FՃ���1�A��0���D$1�E1�L�=�/A�F҃�7�Ic�L�>������D��H�SPH;SX���h�H�{@��H�zH�{PD�2H��A��
u�L�CHH;{X���z
��H�B��hH����H�CP���?���vH;CX�b��h�UH�{@�JH�pH�sPD�(D��A��
�!��+��t
A�EЃ�	�D��H��A����t��D��H���t��A�E�H�SP��ADʼn�H;SX�����f.��H�߉L$�_����L$����H�SP���f.�D��H���%t��1����fDH�CP���`�|$	�u~H;CX����h��H�{@��H�pH�sP�(H��@��
�z�MЃ�	�~����.H��A���D$�s����H��1��s��1�����A���t:H�CPL�CHH�P���h��H�SP@��hI9�s�x�
u�x�
uH��H�CP����Hc��H����E���M��H��A�<�����7����Ũ��D�D$1ɉ�D��H���I��H�L$(dH3%(�J
H��8[]A\A]A^A_�fD���H�SPA��H;SX�	��h��H�{@��H�BH�CPD�2A��
�4	D���߀�X�|��B��D���߃�D��A��_�t��O�UA�FЃ��^A�Fȃ��T	D���߃�E��	A��.��	Hc��A���t#H�CP��h�H�P�H�SPH;SHv
�x�
�H����(H�߾��E1��
H�߉¾:�������H�CPH�sHH�P����H�S`H)�H)�T$1�H�f��|$�|$H�߉D$1��w�����;L$����H��pL�C8H�T$H���9y����@D��H���5q��H�CPH;CX�_��h�RH�{@�GH�PH�SPD�0A��
�7���H;SXs
�x
�

E1�1��D$1��K���D�wh�X&��nA�����f��H�������
H�SP��f��H�����H�CP�����H�P�L�CH1���h�����H���c��H�CP�e���H�P�L�CH1�1��D$��h����H���1�A�;�b��F�8"��H������H��1�H����i��gF�����@�H��������	H�CP���f.�H;sXs
�x
��H�SP��hL�CHH�B���@��hH�CPL9�v
�z�
�A	H��1�����DH;sXs
�x
�v��hL�CHH�CP��@��hI9�s
�z�
�\H�P�1��D$1����H;CX���h�	H�{@��H�PH�SP�0@��
�1�F�1Ƀ�	����_��FЃ�	wWH���n��1�H�CPH;CX�m��h�`H�{@�UH�xH�{P�0@��
u�H;{Xs �x
uH��H�CP��F���v��F���v�H�SP��h�H�B�H�CPH;CHv
�z�
�Hc��H����9���`����H�CPH�sH1�E1��D$H�P��5���H;CX����h��H�{@��H�xH�{P�0H��@��
��~�1Ƀ�	wi��_�/�FЃ�	�+H���xm��1�H�CPH;CX����h��H�{@��H�xH�{P�0H��@��
u�H;{Xs
�x
�]��h�H�CPH;CHv
�z�
�Hc��H����9���T��������1�A��_�bA�FЃ�	�oA��7��D��H���l��1�H�CPH;CX���h�	H�{@��H�pH�sPD�0A��
u�H;sX�DHc��Hc�A9���H�SP��h�H�r�H�sPH;sHv
�z�
��H�������4���H�߾�>�E1��H�߉¾:�W���	����F����>����F����2������D�H���������H�CP���f�H;CX�n��h�aH�{@�VH�xH�{P�0H��@��
�'�~�1Ƀ�vl��h�H�CPH9CHs
�z�
��Hc��H����9�������D���H�߾�N�E1��H�߉¾:�g�������f���_���FЃ���H����j��1�H�CPH;CX�V��h�IH�{@�>H�xH�{P�0H��@��
u�H;{X�1����x
�'���H�PH����������H����_���fD���	Hc��9�����H�{PL�CHH�G���h�L��H�CPL9�v
��
�uH�W�1��D$E1��~����H�߉L$�!��L$�����H�CP���H;CX����h��H�{@��H�HH�KPD�0A��
��A��_t
A�FЃ�	�d���Hc��H����H��������H�߉L$���L$����H�CP��������H�SPH�B�����A�
H;CX������z
���H��A�
H�SP����Hc��H����;���m���H�߾��E1��H�߉¾:�8������1�H�5��H�߉L$�n����L$����hL�CHH�x�H�{P��@��hL9�v
�x�
�(H�W�H�������H�߉L$���L$������H�CP����_������UH�SPH�B������H���K�����H�CP����0H���h��1��`�z�
���H��H�SP����H��������H�CP�*����_���H��H�CP�:���H�PH���~����H�߉L$���L$�������H�CP�H���H;SXs�x
t1��E���H��1�H�CP�6����z�
����H��H�SP���1�H;{X��������H���Q��������H�CP�V����x
�����Hc��H��A�
H�CPHc�A9��������_����z�
����H��H�SP����H��L�CHE1�1��D$1���h�E�z�
�����H�B�1�H��1��D$�"�1�H;{X�a����R����z�
�@���H��H�SP�3����x�
����H�x�����Hc��9��A����������H;KX������x
�{���H��H�CP�n����z�
�����H�B�1�H����Hc��H������A����x�
���H��H�CP���H�PH�������
�����H�G�H�W�1�E1�H�CP�D$���e�Hc��Hc�A9��E������������A�
������A�Fȃ��D��u���Hc��H����;���������������H�CPH�sHA��H��I��H�P������1��D$E1��Y�Hc��H����;������;���f.�AUATA��U��SH��H��L�OPL�G`��h uM��jt	M9���M9�wH��[]A\A]�H�sH����A��juKH�CPH�C`H��[]A\A]�H�GXH�����H�5ӅL)�M)�L+GHP1��o�XL�KPL�C`Z�DH�{`H�sPL���H)�����D��H���H��L�h�G���H�CXL�ɋ��L��L)�H+SHH�=��L)�I��1��P�f.�UH��SH��H��H�OPH��H)�H�OPH��tbH�W`H)�H��~<H��I��E1�H��j�
������H�{PH+{HZ��Hc�YH9��������!�AH���c�H�CPH�C`H�ߺ�!�A�Y���HkPH��[]�ff.�AWI��AVA��AUE1�ATUSH��H��HH�PdH�%(H�D$81�H��A���5�H�T$H���s#�L�cPH�t$H����H�CI�L�cPH��t�8u�xt(H���������9��%���=���E����H�$���T�|$�0�|$H�$H��I�H��t	H9���I�/H��A�H�$��p�H�߉��a��H�$H��H�Ɖ�U0f�H�L$8dH3%(D���>H��H[]A\A]A^A_�f.�Hc�H��A��?a��H��t�L��H��H��H)���z���H�sXH�T$H)��?"�L�cPH�t$H����H�CI�L�cPH��t	�8��H�F�H���jL���������/�L��H��H)�H���u���H��H�5��ƹ���!�AH���D����������H��A��`�����;/�L��H��E1�H)�H������H�5�H���h�����AH����������x�>����/������.�L��H��H)�H������H��H�5�������'�AH������d���@H�KHH�S`H�ߋ��H)ʉT$$H�SP�t$ H)�H�H�t$(1��T$,1�H�M��Af�����;L$ ����H��pL�C8H�T$ H����g���@�;.�1�H��E1�H������H�5�H���l�����AH�����H�|$A������&_�fDAWA��AVAUATI��U��SH��H������H�KPH�CXH9�s�9{t-H��D��L��H���K�����uH�CPH�C`H��[]A\A]A^A_�E��tH�S�z����h��H�{@��H�QH�SPD�)A��
�^H9�w'�X��q����oH��H�SPH9��^�
�� u۹ ��@�\�^���uH���^���%���@��,�1�H��H������H��H�5ߚ����H��H�ߺ�[�A]A\A]A^A_�����H���[����|H�KPH�CX�!���fD�{H���#^��H�CPH�KXH�PH�SPH9�w/���f�H���H���H�CPH�KXH�PH�SPH9�������p@��}��9��z�����\u�H��H9�v�H���]��H�CPH�PH�SP�p�H9�������y
A�
�����H�QA�
H�SP�v�����}�9�����E1��]�1�D��L��H���8����������H�sXH�CPH9�rc���un�����M��udL�5�E��}th9��p���H�=yEI9�LD�E��t�D��H����\��똍J����.H��A��H�CPH9��0������ uغ �ݐ������f�H�D$M��tFH�-EI9�t:L�sP���AH�����H�SPH��H��H�D$H�S`H�CP����H�CPH�C`E��ujH�CPH;CXso��hufH�{@w_H�PH�SP�8
���H;SX�����x
����H��H�CP�����}H���[��H�CP����}H����[��뇾H���������~���H�CP�H�SPH�CXA�������������M����������ff.�@UH��H���SH��H��H�P�#�H�UH��tHSPH��[]��H����H�����H��H�5���ճ��H�ߺ��A�S���H��1�[]�f.�AUI��ATA��USH��H��H�PdH�%(H�D$1�H;{X�7��h�*H�{@�H�GH�CP�/��@��
�p��0��H��L�i��Ic�L�>��A���YH;CX����h��H�{@��H�PH�SP���
�ZH�Ѐ�-�H;SX����h�wH�{@�lH�BH�CP�*@��
���\����[�U�������������@�̀f�H�T$dH3%(���`H��[]A\A]���H���������H�{P����f.�H;CXs��huH�{@v�H���m����H�CPu(H�PH�SP���
�KH�Ѐ�-uD����]L)�H���H��1�H���V���H�5�{H��觱���, �AH���%�� ��������fD�����fD� ���fD����fD�����fDH��H������H�<$�ŸD������
���fD�
���fD����fD�	�v���fD�
H;CX�a����
�W���H���
H�{P�E���D��h�H�{PH9{Hs	�?
�H���9��H�$HCP�
���f.�H9CX����h��H�{@��H�xH�{P��ր�
�	��\tC��?�������B����5���p���g�������fDH9{Xv�@<U��<u��D��L��H�߃�����%����I���f��H�������ugH�CP�H���H;SXs
�x
��H�������
����H��H�{P�����H��������H�CP�J����|���f�H����l��H�CP�b���H;{Xs
�x
�����H���A���
�r����E����H�dx1��Q��p���H�
�;���������A�����H����� u�E���1H��x1��Q��,���H������H9CXv�B<U�,<u�$D��L��H�߃��������������H��������	���H�SP�v�����h��H�{@��H�GH�CP�?
�B���H;CX�8����
�.���H�GH�CP�!���fDH�
�:�����G����� u
A�������H���H�+w1��P��*���H;CXs
�z
���
�r��H��H�CP���H��w1�1��~P����H�*w1��kP�����H�����H�CP�s����H���������H�{P����H��A�����H���H�CP�
�n�����S���H���H��v1���O��X���H���
�nH�SP���ff.�AWI��AVAUM��ATUL��S��H��8�t$L�d$p�$dH�%(H�D$(1�H�GPH�|$ �D$H�|$�BfDH�EA�ƀ�9I�4$I�UH����H9���|$�,@I�GPI;GX�A��h�I�@�H�HI�OPD�0A��
��A�����~I���I���D���
^����t	D9��]���D94$���T$M�GP��A��#u��uVA��\��A�@�����I�4$I�UH���
H9��5���D��L����������0���A�������DM9GXv�A�<$��<@�����<{��A�#fDD��L���mR�������L���c�����mI�GP���f�H����H�EH����H��H�E�b���DI�$D��L���	R���|���@�D$�:���A�� t
A�F����'���I�@�A��h�I�GPI;GH�`I�$H��tI�EH�\$(dH3%(D����H��8[]A\A]A^A_�DA�
I;OX�5����x
�+���H��A�
I�GP����L�����I�GP�D$����f.�M9GX�fA��h�XI�@�MI�HI�OPA�<
��<\�a<utE<
��D��A���g��������\L����P�����DI�$������CL���\A�u�P��D��L���P������I�@�A��h�A�#I�GPI;GH�����DA�x�
�����A�x�
�����I��M�GP�}���I;OX�+A�x
� I��M�GP��D$�����t!� �����A������q����<$
�'����\L��A�
��O���_�����L���T$�����T$�������M�GP���f.��D$�����\L���O������A�
L��D���rO������L$�$L��L������I�GP����I�GPA��h�H�P�I�WPI9WH�i����x�
�_����x�
�U���H��I�GP�H����D$�����*A�
�D$�t���D94$����t	D9��]����\L����N��I�WPA��h�H�B�I�GPI;GH�&����z�
�����z�
����H�B�I�GP����f��D$�A�V��� wH�H����D94$u)��$<Y����H�=0
��Hc�H�>��<$
�9A��h�M�GPM9GHs
A�8
��M9GX�qA��h�cI�@L���UH�GI�GP���
����7����0����
��I�4$H���'���I�UH9������|$����H�D$I�G`L��H�HI�OP����H�D$�D$I�GP��������D$�h���A�� ����A�F����Q���������x��H�t$L����H�t$ H���T�����M�wPHc�H�T$L���uL��H�T$H����I�GP�&���A���������A��h�M�GPM9GHs
A�8
���D$��I�GP1�L��H�P���A�������L��L�D$���L�D$����I�P���A��h�M�GPM9GHs
A�8
��I�P�1�L���0�L��A���K���\xf�D����
�A����A��
�T
7�P҃�B�T27�PI�GP�l���A�
�m����\L����K���'���I�PH�T$�L�D$��H�D$ L�D$H��tM�wP�pHc�I�H�T$M�wP���I�WPI���L��A�����L)���H�5NnL������I�GPI�G`���A�x�
�A���I��M�GP�4���D�4$�}���D��\L���'K��D��L���K��I�GP�[���L��H��H)��5d�I�GP�D���A�x�
�:���I��M�GP�-���A�
I;GXs��
u�H�GI�GP�
���A�x�
�l���I��M�GP�_����(J��AUA��ATI��UH���SH���=��H��H�H�C��[�L�cH���h uH��H��[]A\A]�DH��D��H��1�H�5���	U�H��H��[]A\A]�ff.�ATUSH������H��`�����E1�@H�����A����<�1ҾO:H��H��H���H�E������P:H��H�E����H�EH����H�=�����H��`���DH�E 1�H�E(H�E0H�E8H�EH���H�4H�����h ��H�cxH���[]A\����E1�@H�����A���<�1ҾO:H��H��H���H�E�>���1ҾP:H��H�E�+���H�EH�E H�E(H�E0H�E8E����1ҾY:H������8���f.��^:H��H����'�H�CxH�4H�sx��h �(���H�߹_:H����'�H���[]A\���������\�����E1�@H�����A���;�1ҾO:H��H��H���H�E�F���1ҾP:H��H�E�3���H�E�+���f.�1��g���f�U�V;SH��H��H���H�U���W;H��H�EH���H�U����H�EH���H�UH��t�Y;H�����H�EH���H�EH��[]�ff.�@SH���h u+H��vH�;H��t�W�H��[�wW��[�fDI��1�H�щ�H�5����Q��AUATI��USH��H��H�NH��v+L�-���H�iL��i:H���t���H��H��w�I�$H��v.L�-e�f.�H�iL��i:H���<���H��H��w�I�L$H��v%L�-,��H�iL��i:H������H��H��w�H��L��[]A\A]�V�USH��H��H���H�~H�ntH�VH�����H���H���	���H���H���H��H�����h uH�kxH��[]�D��:H���H���$%�H�sxH��H�sx��h t�H��H�߹�:[H�s�]�$�fD��UD��SH��H��dH�%(H�D$1�H�wH�O H�GXH�GPH�GHH�$H����H�"�HLJ�H���Hǃ�������P9�H��H�=F�H�� H���FH���Hǃ tf�H�����H���u�H�L$dH3%(H��u.H��[]�@H����H��H�����)�H����d�����C����AVAUATUH��SH�� H��t���H��0H��t�o�L���M��t*A�u���f����I�]H���qT�L���iT�H���H��t�XT�H���H��t<@H�^H�����H��H��u�H���H��t$�H�GH����T�H���H��u�H�](H��t:E1�H�{L�+~J�t�H��I���g[�L;c|�H��L����S�M��u�H���H��t�
�H���H��wsH�}�S�H�E[H��]A\A]A^�S�f�����I�]I�EL�4�L9����f�L�#M��tI�t$H����Z�L���CS�H��I9�w����D���f�I�]I�EL�$�L9������H�3H��H���Z�I9�w��r���H�=�e1��Q/�USH��H��H���H�nH��t>H�VH���J����u;H��H��H���H�PH�RH�PH�3��H���H�H��H�H�AH��j;����H���H�߾j;H�HH�QH�PH��H��~[]���ff.�ATUH��SL���H��I�$�f��+���H���H�H��tH��H9�u�[]A\����L�g��Q�L����fDAVAUATM��UH��SH���h u&H��vQHcsH�;std�V�SL�$�[]A\A]A^ÐL��A��I���B�I��L��D��I��H�5~1�H����K�H��w�H��H��[1�]H�5�cA\A]A^�sM���H�ljsHc���HcsH��{���ff.�@ATUH��SH���H��H�GH��vUH�xtN�IL��A�ą�tbH���t)H���v��uH���L����uH�5u}H�����A�D��[]A\�f�1�H��H���#�����t�H���u���@1�H��H����]��u1�H��H������t�H���I�ؾ#5H��H�}H�H�l���H���H�HH��t�Lc��H�}�%5H��I��?�<����]����H��H������������H��Hc�H�>��H�5c���H���f.����1�H���@H�5�b�ė���H���f.�H�5�b褗���H���f.�H�5b脗���H���f.�H�5�b�d����H���f.�UH��SH��H���E��I�辸:H��H���H��{H�H����H���H�HH��t%Lc��H��H��H��{[��:]���@H��[]Ð��AVAUATI��UH��SH��tbI��H����H��H����H�
��Hc�H�>��H�
�{f�1�H��pL��H���C��M��t���A;$�G[L��H�� ]�lA\A]A^�V��f.�H�
n{��H�
�a��H�
�z��H�
�z�t���@H�
�z�d���@H�
{�T���@H������؃�����H���Hc�H�>��@L��H��0��U��H�X L�h([]A\A]A^�f.�L��H��0���U��H�X L�h([]A\A]A^�f.�L��H��0��U��H�X L�h([]A\A]A^�f.�H��pL�E8L��H���ZD����DD��HH�
bpA���W���L��H��A���@�A���*U��H�X L�h(H�@0D�p8[]A\A]A^�DH���H�GH����H�x����8��~H���vH��H�����������H���G����uy1�H��H���Y��uh1�H��H��蕗����tLL��H��0��|T��H�X L�h([]A\A]A^�H����H��_1�H��H��1��jA���~���H��H�����L��H��0��%T��H�X L�h([]A\A]A^�@1�H��H���������j���H��H���@����Z��������H�_1�H��1���@������ff.�f����w����AUI��ATI��UH��SH�����H��H��At
H��1�H��u3L��H��8�j�nS��H�@ L�h(H�X0H��[]A\A]�1��	���H���@UH��SH��H���A��I��H�߾�:H���H�xH�H��[]����AWAVAUI��H����ATI��UH��SH��dH�%(H�D$1�H�$H���PH�
�Hc�H�>���L��(�o�R��H��H���H�C �H�t$dH34%(H���H��[]A\A]A^A_�f.�L��(�^�>R��H��H�@ 뱐L�� �_�R��H���f�L�� �`�Q��H���v���fDL�� �a��Q��H���V���fDL�� �m�Q��H���6���fDL���I����L��(�nH���Q��L��H��H���J�H�C ��I����cD������TH���Hc�H�>��L��(�5H���+Q��H��L�` ����L��(�4H���Q��H��L�` �w����L��(�2H����P��H��L�` �O����L��(�3H���P��H��L�` �'����H���H��H�@H����H�x��H��L��H���_U����I���v)L��H��-���wH���Հ����u_H���I�����uSH�$H��tH�(?L��(�1H���P��H��L�` ���fDL���X�H��[1�H��H��1��=��1��[���1�1��/
�I���(����H��L��H��貒������H���H�BH��vkH�@I�����H����M��I��A��������EH���QH��u%H���D�H����"�H���QH��t�I9���L��(�'H���O��H��L�` ���H�$H��tH�(?L��(�0H����N��H��L�` �^���1�H��s1�H����;��H���H�@H��v�H�@H���E����z���H���H�H���f���H�z�[���H�X0H���b��8���H��@�L��(�1H��L��@�EN��H��L�` H���H�x8�����H�X8���L�:I�������I��������8�������A���A9�~D��8A�GH��rA9�~.D���L��H��H��A����(A��Mc��T�A�GA9��H���3~���������H���}���������L��(�1H���vM��H��L�` H���H�x0����H�X0������3�H����H�2r�3H��I��H��@H���H������L�H���1�H��H��X1�I���:��H�sH��1��[x���f���H��q1�H��1���9���N���ff.�AWAVAUATM��UH��SH��8dH�%(H�D$(1�H����H��I��I���%;���oCI��)D$I����KI�����I�N�8�+H���HL��H�T$L��H��L�p H�@(H�@0H�D$����L��8H��$I���L��L�D$H��H��L�p H��L�h(L�@0�h;��fAo$H�KIc$%�H��H	�H�H��H�L$(dH3%(��H��8[]A\A]A^A_�f�L��� �l�K����@L��H��H���:��H�L��H��fAo$%�SIc$H��H	�H�T$H��J���L��0H��!I���2K��L�h H�X(�`���DL��H��H���:��H�L��H��fAo$%�[Ic$H��H	�H�T$H����L��0H��"I����J��L�h H�X(����81��AUH�wWPI��H�5�oATI��Hc�UH��S��H�����H��H��H��oH�b�HM�1��D<�A�L$A�$1�E�L$E�D$H�5uoH��� <�1�H�5�H���<�M��tj�����w_H���Hc�H�>��I�EH����@:H��t;H�8H��cH������qtH��c��rt��>�H��H�5�cH��1��;�H��H��H�5s�1�[]A\A]�;�DI�}��H�5!�H��H��1��c;��I�EH�����9H��t�H�8H�,cH������qtH�'c��rt�W>�H��H�5cH��1��;��n���I�EH����`9H���W���H�8H��bH������qtH��b��rt�>�H��H�5�bH��1��:�����I�EH����	9H������H�8H�~bH������qtH�yb��rt�=�H��H�5TbH��1��e:����I�EH�����8H�������H�8H�'bH������qtH�"b��rt�R=�H��H�5�aH��1��:��i���I�EH����[8H���R���H�8H��aH������qtH��a��rt�<�H��H�5�aH��1��9�����I�EH����8H�������H�8H�yaH������qtH�ta��rt�<�H��H�5OaH��1��`9����I�EH�����7H�������H�8H�"aH������qtH�a��rt�M<�H��H�5�`H��1��	9��d���I�EH����V7H���M���H�8H��`H������qtH��`��rt�;�H��H�5�`H��1��8��
���I�EH�����6H�������H�8H�t`H������qtH�o`��rt�;�H��H�5J`H��1��[8����I�EH�����6H�������H�8H�`H������qtH�`��rt�H;�H��H�5�_H��1��8��_���I�EH����Q6H���H���H�8H��_H������qtH��_��rt��:�H��H�5�_H��1��7�����I�EH�����5H����H�8H�o_H������qtH�j_��rt�:�H��H�5E_H��1��V7����I�EH�����5H�������H�8H�_H������qtH�_��rt�C:�H��H�5�^H��1��6��Z���I�EH����L5H���C���H�8H��^H������qtH��^��rt��9�H��H�5�^H��1��6�����I�EH�����4H�����H�8H�j^H������qtH�e^��rt�9�H��H�5@^H��1��Q6����I�EH�����4H�������H�8H�^H������qtH�^��rt�>9�H��H�5�]H��1��5��U���I�EH����G4H���>���H�8H��]H������qtH��]��rt��8�H��H�5�]H��1��5����I�EH�����3H�����H�8H�e]H������qtH�`]��rt�8�H��H�5;]H��1��L5����I�EH�����3H�������H�8H�]H������qtH�	]��rt�98�H��H�5�\H��1��4��P���I�EH����B3H���9���H�8H��\H������qtH��\��rt��7�H��H�5�\H��1��4����I�EH�����2H�����H�8H�`\H������qtH�[\��rt�7�H��H�56\H��1��G4����I�EH�����2H�������H�8H�	\H������qtH�\��rt�47�H��H�5�[H��1���3��K���I�EH����=2H���4���H�8H��[H������qtH��[��rt��6�H��H�5�[H��1��3���I�EH�����1H������H�8H�[[H������qtH�V[��rt�6�H��H�51[H��1��B3����I�EH�����1H�������H�8H�[H������qtH��Z��rt�/6�H��H�5�ZH��1���2��F���I�EH����81H���/���H�8H��ZH������qtH��Z��rt��5�H��H�5�ZH��1��2����I�EH�����0H������H�8H�VZH������qtH�QZ��rt�5�H��H�5,ZH��1��=2����I�EH�����0H�������H�8H��YH������qtH��Y��rt�*5�H��H�5�YH��1���1��A���I�EH����30H���*���H�8H��YH������qtH��Y��rt��4�H��H�5~YH��1��1����I�EH�����/H������H�8H�QYH������qtH�LY��rt�|4�H��H�5'YH��1��81����I�EH�����/H���|���H�8H��XH������qtH��X��rt�%4�H��H�5�XH��1���0��<���I�EH����./H���%���H�8H��XH������qtH��X��rt��3�H��H�5yXH��1��0����I�EH�����.H�����H�8H�LXH������qtH�GX��rt�w3�H��H�5"XH��1��30���I�EH�����.H���w�H�8H��WH������qtH��W��rt� 3�H��H�5�WH��1���/��7�I�EH����).H��� �H�8H��WH������qtH��W��rt��2�H��H�5tWH��1��/����I�EH�����-H�����H�8H�GWH������qtH�BW��rt�r2�H��H�5WH��1��./���I�EH����{-H���r�H�8H��VH������qtH��V��rt�2�H��H�5�VH��1���.��2�I�EH����$-H����H�8H��VH������qtH��V��rt��1�H��H�5oVH��1��.����I�EH�����,H�����H�8H�BVH������qtH�=V��rt�m1�H��H�5VH��1��).���I�EH����v,H���m�H�8H��UH������qtH��U��rt�1�H��H�5�UH��1���-��-�I�EH����,H����H�8H��UH������qtH��U��rt�0�H��H�5jUH��1��{-����I�EH�����+H�����H�8H�=UH������qtH�8U��rt�h0�H��H�5UH��1��$-���I�EH����q+H���h�H�8H��TH������qtH��T��rt�0�H��H�5�TH��1���,��(�I�EH����+H����H�8H��TH������qtH��T��rt�/�H��H�5eTH��1��v,����I�EH�����*H�����H�8H�8TH������qtH�3T��rt�c/�H��H�5TH��1��,��z�I�EH����l*H���c�H�8H��SH������qtH��S��rt�/�H��H�5�SH��1���+��#�I�EH����*H����H�8H��SH������qtH��S��rt�.�H��H�5`SH��1��q+����I�EH�����)H�����H�8H�3SH������qtH�.S��rt�^.�H��H�5	SH��1��+��u�I�EH����g)H���^�H�8H��RH������qtH��R��rt�.�H��H�5�RH��1���*���I�EH����)H����H�8H��RH������qtH��R��rt�-�H��H�5[RH��1��l*����I�EH�����(H�����H�8H�.RH������qtH�)R��rt�Y-�H��H�5RH��1��*��p�I�EH����b(H���Y�H�8H��QH������qtH��Q��rt�-�H��H�5�QH��1��)���I�EH����(H����H�8H��QH������qtH�{Q��rt�,�H��H�5VQH��1��g)����I�EH�����'H�����H�8H�)QH������qtH�$Q��rt�T,�H��H�5�PH��1��)��k�I�EH����]'H���T�H�8H��PH������qtH��P��rt�+�H��H�5�PH��1��(���I�EH����'H�����H�8H�{PH������qtH�vP��rt�+�H��H�5QPH��1��b(���I�EH�����&H�����H�8H�$PH������qtH�P��rt�O+�H��H�5�OH��1��(��f�I�EH����X&H���O�H�8H��OH������qtH��O��rt�*�H��H�5�OH��1��'���I�EH����&H�����H�8H�vOH������qtH�qO��rt�*�H��H�5LOH��1��]'���I�EH�����%H�����H�8H�OH������qtH�O��rt�J*�H��H�5�NH��1��'��a�I�EH����S%H���J�H�8H��NH������qtH��N��rt��)�H��H�5�NH��1��&��
�I�EH�����$H�����H�8H�qNH������qtH�lN��rt�)�H��H�5GNH��1��X&���I�EH�����$H�����H�8H�NH������qtH�N��rt�E)�H��H�5�MH��1��&��\�I�EH����N$H���E�H�8H��MH������qtH��M��rt��(�H��H�5�MH��1��%���I�EH�����#H�����H�8H�lMH������qtH�gM��rt�(�H��H�5BMH��1��S%���I�EH�����#H�����H�8H�MH������qtH�M��rt�@(�H��H�5�LH��1��$��W�I�EH����I#H���@�H�8H��LH������qtH��L��rt��'�H��H�5�LH��1��$���I�EH�����"H�����H�8H�gLH������qtH�bL��rt�'�H��H�5=LH��1��N$���I�EH�����"H�����H�8H�LH������qtH�L��rt�;'�H��H�5�KH��1��#��R�I�EH����D"H���;�H�8H��KH������qtH��K��rt��&�H��H�5�KH��1��#���I�EH�����!H�����H�8H�bKH������qtH�]K��rt�&�H��H�58KH��1��I#���I�EH�����!H�����H�8H�KH������qtH�K��rt�6&�H��H�5�JH��1���"��M�I�EH����?!H���6�H�8H��JH������qtH��J��rt��%�H��H�5�JH��1��"���I�EH����� H�����H�8H�]JH������qtH�XJ��rt�%�H��H�53JH��1��D"���I�EH����� H�����H�8H�JH������qtH�J��rt�1%�H��H�5�IH��1���!��H�I�EH����: H���1�H�8H��IH������qtH��I��rt��$�H��H�5�IH��1��!����I�EH�����H�����H�8H�XIH������qtH�SI��rt�$�H��H�5.IH��1��?!���I�EH�����H�����H�8H�IH������qtH��H��rt�,$�H��H�5�HH��1��� ��C�I�EH����5H���,�H�8H��HH������qtH��H��rt��#�H��H�5�HH��1�� ����I�EH�����H�����H�8H�SHH������qtH�NH��rt�~#�H��H�5)HH��1��: ���I�EH�����H���~�H�8H��GH������qtH��G��rt�'#�H��H�5�GH��1�����>�I�EH����0H���'�H�8H��GH������qtH��G��rt��"�H��H�5{GH��1������I�EH�����H�����H�8H�NGH������qtH�IG��rt�y"�H��H�5$GH��1��5���I�EH�����H���y�H�8H��FH������qtH��F��rt�""�H��H�5�FH��1�����9�I�EH����+H���"�H�8H��FH������qtH��F��rt��!�H��H�5vFH��1������I�EH�����H�����H�8H�IFH������qtH�DF��rt�t!�H��H�5FH��1��0���I�EH����}H���t�H�8H��EH������qtH��E��rt�!�H��H�5�EH��1�����4�I�EH����&H����H�8H��EH������qtH��E��rt�� �H��H�5qEH��1������I�EH�����H�����H�8H�DEH������qtH�?E��rt�o �H��H�5EH��1��+���I�EH����xH���o�H�8H��DH������qtH��D��rt� �H��H�5�DH��1�����/�I�EH����!H����H�8H��DH������qtH��D��rt��H��H�5lDH��1��}����I�EH�����H�����H�8H�?DH������qtH�:D��rt�j�H��H�5DH��1��&���I�EH����sH���j�H�8H��CH������qtH��C��rt��H��H�5�CH��1�����*�I�EH����H����H�8H��CH������qtH��C��rt��H��H�5gCH��1��x�����I�EH�����H������H�8H�:CH������qtH�5C��rt�e�H��H�5CH��1��!��|��I�EH����nH���e��H�8H��BH������qtH��B��rt��H��H�5�BH��1�����%��I�EH����H�����H�8H��BH������qtH��B��rt��H��H�5bBH��1��s�����I�EH�����H������H�8H�5BH������qtH�0B��rt�`�H��H�5BH��1����w��I�EH����iH���`��H�8H��AH������qtH��A��rt�	�H��H�5�AH��1����� ��I�EH����H���	��H�8H��AH������qtH��A��rt��H��H�5]AH��1��n�����I�EH�����H������H�8H�0AH������qtH�+A��rt�[�H��H�5AH��1����r��I�EH����dH���[��H�8H��@H������qtH��@��rt��H��H�5�@H��1������I�EH����
H�����H�8H��@H������qtH�}@��rt��H��H�5X@H��1��i�����I�EH�����H������H�8H�+@H������qtH�&@��rt�V�H��H�5@H��1����m��I�EH����_H���V��H�8H��?H������qtH��?��rt��H��H�5�?H��1������I�EH����H������H�8H�}?H������qtH�x?��rt��H��H�5S?H��1��d����I�EH�����H������H�8H�&?H������qtH�!?��rt�Q�H��H�5�>H��1��
��h��I�EH����ZH���Q��H�8H��>H������qtH��>��rt��H��H�5�>H��1������I�EH����H������H�8H�x>H������qtH�s>��rt��H��H�5N>H��1��_����I�}H�H������<������=����>�����F&�H�5z�H��H��1����m��I�EH�5�>H��H�P 1�����O��I�EH�5`>H��H�P 1�����1��I�}H�H������<�
�x��=����>����%�H�5�H��H��1�������I�}H�H������<���R��=����>�����p%�H�5��H��H��1��<����I�}H�H������<������=����>�h���#%�H�5W�H��H��1�����J��I�EH����<H���3��H�8H��<H������qtH��<��rt���H��H�5�<H��1�������I�EH�����H������H�8H�Z<H������qtH�U<��rt��H��H�50<H��1��A����I�EH�����H������H�8H�<H������qtH��;��rt�.�H��H�5�;H��1�����E��I�EH����7H���.��H�8H��;H������qtH��;��rt���H��H�5�;H��1�������I�EH�����H������H�8H�U;H������qtH�P;��rt��H��H�5+;H��1��<����I�EH�����H������H�8H��:H������qtH��:��rt�)�H��H�5�:H��1�����@��I�EH����2H���)��H�8H��:H������qtH��:��rt���H��H�5}:H��1�������I�EH�����H������H�8H�P:H������qtH�K:��rt�{�H��H�5&:H��1��7����I�EH�����H���{��H�8H��9H������qtH��9��rt�$�H��H�5�9H��1�����;��I�EH����-H���$��H�8H��9H������qtH��9��rt���H��H�5x9H��1�������I�EH�����H������H�8H�K9H������qtH�F9��rt�v�H��H�5!9H��1��2����I�EH����H���v��H�8H��8H������qtH��8��rt��H��H�5�8H��1�����6��I�EH����(H�����H�8H��8H������qtH��8��rt���H��H�5s8H��1�������I�EH�����H������H�8H�F8H������qtH�A8��rt�q�H��H�58H��1��-����I�EH����zH���q��H�8H��7H������qtH��7��rt��H��H�5�7H��1�����1��I�EH����#H�����H�8H��7H������qtH��7��rt���H��H�5n7H��1�������I�EH�����
H������H�8H�A7H������qtH�<7��rt�l�H��H�57H��1��(����I�EH����u
H���l��H�8H��6H������qtH��6��rt��H��H�5�6H��1�����,��I�EH����
H�����H�8H��6H������qtH��6��rt��H��H�5i6H��1��z�����I�}H�H������<�T��
��=����>�����a�H�5��H��H��1��-����I�EH����zH���q��H�8H��5H������qtH��5��rt��H��H�5�5H��1���
��1��I�EH����#H�����H�8H��5H������qtH��5��rt���H��H�5n5H��1��
�����I�EH�����H������H�8H�A5H������qtH�<5��rt�l�H��H�55H��1��(
����I�}H�H������<�����=��
��>�T����H�5C�H��H��1�����6��I�EH����(H�����H�8H��4H������qtH��4��rt���H��H�5s4H��1�������I�EH�����
H������H�8H�F4H������qtH�A4��rt�q�H��H�54H��1��-����I�EH����z
H���q��H�8H��3H������qtH��3��rt��H��H�5�3H��1�����1��I�EH����#
H�����H�8H��3H������qtH��3��rt���H��H�5n3H��1�������I�EH�����	H������H�8H�A3H������qtH�<3��rt�l�H��H�53H��1��(����I�EH����u	H���l��H�8H��2H������qtH��2��rt��H��H�5�2H��1���
��,��I�EH����	H�����H�8H��2H������qtH��2��rt�
�H��H�5i2H��1��z
�����I�EH�����H������H�8H�<2H������qtH�72��rt�g
�H��H�52H��1��#
��~��I�EH����pH���g��H�8H��1H������qtH��1��rt�
�H��H�5�1H��1���	��'��I�EH����H�����H�8H��1H������qtH��1��rt��H��H�5d1H��1��u	�����I�EH�����H������H�8H�71H������qtH�21��rt�b�H��H�5
1H��1��	��y��I�EH����kH���b��H�8H��0H������qtH��0��rt��H��H�5�0H��1�����"��I�EH����H�����H�8H��0H������qtH��0��rt��H��H�5_0H��1��p�����I�EH�����H������H�8H�20H������qtH�-0��rt�]�H��H�50H��1����t��I�EH����fH���]��H�8H��/H������qtH��/��rt��H��H�5�/H��1�������I�EH����H�����H�8H��/H������qtH�/��rt�
�H��H�5Z/H��1��k�����I�EH�����H������H�8H�-/H������qtH�(/��rt�X
�H��H�5/H��1����o��I�EH����aH���X��H�8H��.H������qtH��.��rt�
�H��H�5�.H��1������I�EH����
H�����H�8H�.H������qtH�z.��rt�	�H��H�5U.H��1��f����I�EH�����H������H�8H�(.H������qtH�#.��rt�S	�H��H�5�-H��1����j��I�EH����\H���S��H�8H��-H������qtH��-��rt��H��H�5�-H��1������I�EH����H������H�8H�z-H������qtH�u-��rt��H��H�5P-H��1��a����I�EH�����H������H�8H�#-H������qtH�-��rt�N�H��H�5�,H��1��
��e��I�EH����WH���N��H�8H��,H������qtH��,��rt��H��H�5�,H��1������I�EH����H������H�8H�u,H������qtH�p,��rt��H��H�5K,H��1��\����I�EH�����H������H�8H�,H������qtH�,��rt�I�H��H�5�+H��1����`��I�EH����RH���I��H�8H��+H������qtH��+��rt���H��H�5�+H��1����	��I�EH�����H������H�8H�p+H������qtH�k+��rt��H��H�5F+H��1��W����I�EH�����H������H�8H�+H������qtH�+��rt�D�H��H�5�*H��1����[��I�EH����MH���D��H�8H��*H������qtH��*��rt���H��H�5�*H��1������I�EH�����H������H�8H�k*H������qtH�f*��rt��H��H�5A*H��1��R����I�EH�����H������H�8H�*H������qtH�*��rt�?�H��H�5�)H��1����V��I�EH���tLH���C��H�8H��)H������qtH��)��rt���H��H�5�)H��1������H�5�4H��1���������;������H�5ЊH��H��1��h�������;������H�5��H��H��1��A������;�����n��H�5��H��H��1����u����;�l���G��H�5[�H��H��1�����N����;�E��� ��H�54�H��H��1�����'����;�����H�5
�H��H��1���������H�5�H��H��1���������H�5щH��H��1��i��������H�5��H��H��1��K�������H�5��H��H��1��-�����c��H�5w�H��H��1����j���E��H�5Y�H��H��1�����L���'��H�5;�H��H��1�����.���	��H�5�H��H��1���������H�5��H��H��1����������H�5�H��H��1��y���������H�5ÈH��H��1��[��������H�5��H��H��1��=������AU1�ATI��H�5�2UH��SH��H��H�����L9�w0I)�I��N�lcL�%ID�L��H��1�H�����L9�u�H��H��H�5(I1�[]A\A]��ff.��AUATI��US��H��A��h u?���t���tH��[]A\A]�@I�<$H��v�H��[]A\A]鿽��L��I��1�H��H�5�1L���>��L���H��L�����H�5�HH��1�����ff.�AWI��AVAUI���GATUSH��H��(H�$�pH�L$H�
�
L�D$���f�I��@ @0@@@P@`��i��L�xHL�hPM���H�����H�D$H���H�(1�M���:E1�H�<$A��E�4��h �]�UA9���D)�UH�EHc�M��L�<�L��f.�I�v H���T���M�v(I�W�H���LE�H��M��u��fDH�t$H���ӷ��H�<$��H�|$t
H�t$H��賷��H�L$�(�1H����
��H�$H�H I�D$XH��(L��[]A\A]A^A_�DH�<$A��H�<$t�뮐M�7I��M�m(M���l���I�u H��� ���I�u H��I�����H���u�L�uH���Ȑ�EH�U��H�H��H��H�D$�������DH�4$H����������E��I��H�
g/H�ߺ�8H�5_/1�����{�����Hh�����D��H�5�H��1��l��U�Y���@AVH��AUATUH��S��H��tH��EډX0[]A\A]A^�@H�GHL�o`1�E1�L�gP1�1�Lc��I)�I)��9���H�D�pD�pI����D�hI	�D�`L�0�@��AVAUI��ATUH��S�:"t)H����L��H���ŷ�H)�H��H��[]A\A]A^��RM��E1�1�I�t$��t€�'tf~4��,t���\u
A�|$\I�t$u�H��t��DH���VI���@��"u�H��t��DH��[]A\A]A^�D[L��]A\A]A^���A�T$I�L$M��uP��'��1�D��Lc�B�<!'t�M�t$I�H��tM��t
H�|L���d�A�T$L��2���fD��'uJ1�f���HcЀ<'t�H��I9�����H��t
H�|L����M�L�E1�A�T$����I��tԄ������A�|$'�����H��t�H�Df��V�PA�T$H��I�����I��A�H���M���H�|I��A��,����AWAVAUATUSH��HH�|$H�t$H�L$dH�%(H�D$81��B����o�D$ H�H�H����P���������й�i>�؅�I�)׹����O�9����1�L��L�
Xj�fD����9�t6Hc�A�4H9�u�t�fA�<I�t܃�tWHc˃����D�$��9�u���t4����������������H�
˲��Hc�H�>���D$$�����A�H�-�+fDE1�L�5�PL�l$ ��I��I��D9��HKcD�H�|$1�I���;��L�L9�}Ӹ����H�\$8dH3%(��H��H[]A\A]A^A_�H�?�.�s1�H�-+H�|$1�L�=bPL�/�DI��H����A�E��tF�U<%u�9�}�su�HcD� L��D�qH��H�|$I����Ic�I��EA�E��u�D1��K���f�A�*H�-����fDA�&H�-�����fDA�.H�-3���fDA�2H�-����L��H�-2*@H�|$H9|D�E�����A�
H�I)�M�Dž�~�H�-�)�\���@H�D$H���������H�H9�H�D$}H��������H�������g������H����W���D��AWAVAUATUSH��H�$H��fo'�dH�%(H��$x1�H��$�H��)�$@H�D$XH��$ HDŽ$(���h ���H��$@H��E1�H��H�D$0L��$`	L��$ ����fodL�d$@M��fo�$@D��hL�t$8H��$�D�l$M��I��I��)�$`	H�D$HH�D$ H�D$(��D$�D$����)T$`)T$p)�$�A�� �p�D$A�� fA�E��H�L$(H�\$ H�	H�T�I9��L��H)�H�H��H��'�R
H='�'HN�H�H�T$(H�H��H�|��H���
L�|$ L�l-H��H��L��H���L�4�L����H�t$8L��H�H�D$PH���|�H�|$(H��H�t$@H��H�,�H�T$ H���Z�H�D$HH�L$PI9�tL��H�L$8�.��H�L$8H�D$ N�|3�N�l)�L�t�A��$h ��H�D$(H�DA�I9���H�l$@H�\$8H�L$ �D$=����Hc�H�;��h�D$=������
�|$���D�T$E�����|$�$�|$j���
A��$h ��
��D$�=h>w;H�H����B9�u*H��dD�BE����
A������A���H���D�hE����Ic�H��H�D$PH�����)ˈ�$�HcۉL$I�,�H�EH��$���XH��I�VE��$hH��H��H��$XI�DH��$PA�� �HH�|$PH���A�Q�D��$�H�5*�x1�L���$��D�L$E��D��$���D��$�I�D]E1�H��H�=#�L�L��$�I��L��$�I��L��$�E���A��H�5d&L��1�D��I�����I�E�H��H��L��H��H��A�<G���H�5�;L��1��{��D9t$u�L��$�L��$�L��$�D��$�A���?8H��Jc�H�>��fDE��$hI�VH��$PH��$XA�� ��A����H�
��E��Jc�H�>��I�D$PI�L$XH9���H�P���#�����
����� �����	�����A��$itL��$PH�5iL��L������I��$�H��t(�k��t!H�kH��tH�}H�5W%�����?"A��$i�g,E��$hDH��A�� �/H��$�fo�$PH��H�H��I)�I)�I)�H��$L��L��A�uM�H�JH���M�vhH�D$P���C-�H��B�h>wHc�H�5p�f;V��H���B�D$I��A�� ������T$1�H�5;#L���d���D$E��$hA�� fA�E�r���H�|$ L��L�����]���M��I��L�l$PL��$�A��$hH��$�I��$��RI�t$L����I��$t�3,1�L���e���1��D$A��$h �����H�5*#L��1�����y����A��$h ��
H��$M�T$HDŽ$I�$H�D$0I�D$M����
M�L$PA�:M�L$`��	I��$�I�RHDŽ$8H��$0I�BHPA�BH��$���$�H��$�A�B!�É�$��� ���D$PM;L$X�A��$h�I�|$@��
I�QI�T$PE�A��
���I�|$HI�D$PH�OH��$�H��$�H9��e���Y1�I��$�L��$�L��$�I��L��$�L��$�L��$�H��$�H����C�<
��
<
uH��E��$�E����
M����H��L��L��L��L)����I9\$X��I�D$XA��$�I�D$P������L���e�����G�I�D$PH�PI�T$P�8
�]
I�t$XI�|$HL��L��D�D$P�3���7�I�D$8I�\$XL�@I9��4���A��$����I���ADŽ$�M���=���H��$0H��L��L)�H�T$�4��H�T$I���H�PI9\$X�$����H�j6L��L���
������HcD$�=jwH�p��4D�D$E������$@�|$��$D�D$u5�|$���1H�L$0H��$M��H�=!����D$����DH��H�l$ �	fDHc�H���P=����t��=h>wH�H�
�f�<A�EL9���A�L��M��H�=� I��A�^I���D$H�=��4PL��I���M�A�EA��$h �y���L��L��H��D$���D$�^���M��I��L�l$PL��$�A�t$hH��$�@���?�L��L�L$PL�\$�e��L�\$L�L$P�������I��$�L�L$P�	��L�\$H��PXL�\$L�L$P���LL��L�L$PL�\$���L�\$I��$�L��L��L��$�H��$8����L�L$P�
�D$I��$�A�yH��PXL��$���uL�L$PA�A<_t��vHcD$I�I;L$X����\u4I�D$PI;D$X�����u�k�ڄ����L����d����L����������{���I��$�Ic�$�1��M��$�H��$8Ic�$�I��$����H��$`L��H��H�L$H�D$P襻�H�L$�(L��?I�$����L�D$PL�@ H��A��$h �).I��$A�D$h�%�5,�>L���y���D$>@HcD$H�,��A��$h �a���1�L��H�
H�5��q��H�T$0��L��H��$�ʫ��H�5�2L��1��I������@E��$h�D$�����D$A�� ��H��$I��I��fo�$@D�L$I��D$����A6�f����t$H�D$0��$hL��H��$`H��$ L��$`H��$pH��$(H��H�T$PH�t$H�D$�[��Å���H�
 ����>H�t$0H�ZL��1�����$@A9�$����������L��H�t$01�M��H�
�H�H��M���c����;�$@�*L�|$ �D$�fDH�=�XD�GE�������H��$I�oE��$hI�G�D$M�~A�^A�FH��$HI�FA�� �4�M��D�L$I���D$����@�D$L��M��M��M��D$���t8�=jwHcD$H����4H�L$0H��$I��H�=�����h �H�O�H��H�D$M9�t6fDI�UH�D$L��I��H��I��I���4PL��I���-�M9�u�L;|$HtL���	��H��$ H;|$Xt��H��$xdH3%(�D$��H�Ĉ[]A\A]A^A_��H���D�hE��������|$��d���D�L$E���a�����$@��$D�D$����H�T$(L��1�H�L$ H�5����H�L$ �E�H��L��L���������DH�fH�5RL��1�����H�D$PL��$PL��H��$L���<C�$���H�5/L��1����E��$h�v�DH�5H1�������D����D$�������DA�BE�Z�D$PA�BD��HDŽ$8��$�I��$�H��$0�����A���<�E��$hA�� ����A�D$hI�|$D�\$�x��D�\$I�D$D�؃������B�D$I��$���t$�3,L����Y���.�H�5�L��1�������f�A��$hM�L$PDŽ$�DŽ$���L�l$P��L��$���$��Ã�{���ȀM�L$`��A��$h��$��ۉ�$�A�\$hH��$�L��M��A��L;MX����h��H�}@��M�YL�]PE�)E��A��
�

A��~�"&H��Jc�H�>��H�QT�P�D$�
�H��$ H�t$0L��1�H�`
�����$@A9�$�����I��$pM�D$8L��H�T$0�W�����M;L$X�/�A��$h� �I�|$@��I�II�L$PA���
���D�؃���$��A��@�x�9T$P�M�L��D��$�L�T$��$��P��D��$�L�T$A��t��$���#���A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���H��M�BD��L��H��$@S��$��T$`L��$@D�\$ L��$��I���AXAY���D�\$uaA��$htV��$�I�D$PL��$���I�D$`���D�\$PA��L�T$��H�5D�L���.��L�T$D�\$PA�J�I��$�Ic�$�D���M��$�H��$0Ic�$�I��$����H��$`L��H��H�L$H�D$P���H�L$�(L��?I�$�v�L�D$P1�L��H��$0L�@ H��q���D$A�k���1�H��L��D�L$H�5����H�T$0L���H��$�g���H�5O*L��1�����D�L$E��$h����L���X�����/M�L$P���@H�C�I9�t
�{�
���A��$����r�L��M��$��
H��H9����H��L���e����u���I9�r����f�I;T$X���x
���H��I�D$P���$@��$D�D$�D$��D��M��I��L�l$P��L��L��$�H��$��]���D$I��$�"���D�\$E������t$�5,L���o���B�M��L�l$L��$�L��$�H��$�I�D$L��H�p�N����$�1�1�L��$�H�l�L�����I�D$PI�D$`�A��$h �+A�D$h�D$Z�l���L��D�T$���D�T$A��#� �H��$0L�l$H��$8L��$�I��L��$�L��$�M��E��H��$���$��fDI���H��1�M��
E1���L��H��$8S�~��ZY��������
�|�I�FPI;FX��A��h��I�~@��H�HI�NP�0@��
��L���]��A������\�I�FPI;FX��A��h��I�~@��H�HI�NPD� A��
��I�vXI�~HL��D�D$PH��$��t������A�������I�VPA��h�H�B�I�FPI;FH����z�
�����z�
����H��I�VP�����L���U������I�FP�����L���U���������I�FP�@����H���jU������L�MP�J���A��$���#I�t$XD�D$PD�T$H��$�H��$���D�T$���[���#L����R��I�D$L��H�p���I�D$PI�D$`�A��$h ���A�D$h�D$Z�����
I;NX�G����x
�=���H���
I�FP�+���A�
I;NX�o����x
�e���H��A�
I�FP�R���H��$ H;|$Xt�o��H��$(袡�H��$ H����H�T$PH�t$L��H�|$��H��$ ���j�� ���B������A��@���9T$P���I�z����A�J�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���I�T$PI�t$`�<"L���
R���D$ ���H�\$PA�Q�L��H���H�5>�D�L$�X1��6��D�L$���M�L$PM;L$X�M�A��$h�>�I�|$@�2�I�II�L$PA���
����� t��B���w��
u��A��@�Y�9T$P������Y�L�牔$�D��$�L�T$�)��D��$�L�T$��$�A��t	��#������������H�D$XH�t$0L��H�
�H�2HDŽ$(�H��$ 1��r����$@A9�$�����������A�t$h��#�L���̞����ADŽ$��X�H��pL�E8H��H�T$0����L�|$ �D$�H�L;]X����i�u$�����H���H�@���i1��S��H��N���huHH�}@wAI�AH�EPA�	��
���������� ����H��H�����L�MPL;MXr��H���BQ�������L�MP�M��I��L�l$PL��$�H��$�M;\$X��E��$hA����I�|$@���I�D$PH�PI�T$P���
��A�t$h�ƀ�s�A�� ���A�D$h��@t?��=����~�����t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$!�o�M��I��L�l$PL��$�A�t$hH��$��ƀ���A��$h ���A�D$h�D$~��M��I��L�l$PL��$�A�D$tH��$��D$[�P�A�T$t�����E��$hI�t$xH��I�t$xA�� ���I��$�H��A�� I��$�����A�D$hA�l$l�D$}��M��I��L�l$PL��$�H��$�M;\$X��A��$h�
�I�|$@��I�D$PH�PI�T$P��΀�
�/���:���A�D$h�:��� �p��Q����%���#��@��"�3@��'�A��$h�I�D$PI9D$Hs	�8
�J���A��$h ���A�D$h�D$R��L;]X�����h���H�}@���H�EPH�PH�UP��\$��
���|$
�j���+�DH���Xe��DŽ$�L�MP�]h���M��I��L�l$PL��$�A�t$hH��$�A�D$l�ƀ����D$K��Au:��%=t,�D$[@��0t��%�$����$K�D$E��$h�A�� ���A�D$hI�D$xH�4I�t$xA�� ���I��$�A�� H�4I��$��b��+H��L��讨��I�M��I��L�l$PL��$�H��$�M;\$X��A��$h��I�|$@���I�D$PH�PI�T$PD�A��
�C�M�L$`L��D�D$P�*���@L�����D�D$P�D$6A��@�����������A��$h �8�A�D$hA���t7A��$h���A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��H��$`L��H��H�D$P茥�|$6�U�H���1�L��1����A��$�;�$`��I�$H�!�A��$h �&�A�D$h���M��I��L�l$PL��$�I�t$xH��$�E��$hH��I�t$xA�� ��I��$�H��A�� I��$��
��A�D$hA�l$l�D$)�h�M��I��L�l$PL��$�A�D$hH��$��t��$��@u
1ۨ0����(��Y���D$S�XH�'H�XI�D$I�D$PH��I�D$`���M��I��E��L�l$PL��$�H��$�M;\$X���A��$h��I�|$@��I�D$PH�HI�L$P���
�@���&�����=����.���A��$h�I�D$PH�H�I�L$PI;L$Hv
�x�
�Y���$�A�\$h���� ����0@��!΃�@�����A�E��ށ����1�A��@��@��t�����D$&��%�������A��$h ��A�D$h��M��I��L�l$PL��$�A�t$hH��$�@�ƀ������!���$������� A��$h ��A�D$h�D$`�F�M��I��L�l$PL��$�H��$�M;\$X���A��$h���I�|$@�t�I�D$PH�PI�T$PD�A��
�_A�t$h�ƀ�&�A��$h ���A�D$hA��@���A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
����D$-��M��I��L�l$PL��$�H��$��A��$h ���A�D$h�D$,�@�M��I��L�l$PL��$�H��$�M;\$X���A��$h�{�I�|$@�o�I�D$PH�PI�T$PD�A��
��A�t$h�ƀ���A��$h ���A�D$hA��@�x�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
����D$+�{�M��I��E��L�l$PL��$�H��$�M;\$X���A��$h���I�|$@���I�D$PH�HI�L$P���
��1��*�����=���A��$h�I�D$PH�H�I�L$PI;L$Hv
�x�
�2��$�A�\$h���� ����0@��!΃�@����D$N��Au0�ށ���t A��@��@��t���8��D$*��%�������A��$h ���A�D$h�M�M��I��L�l$PL��$�A�t$hH��$���%�������A��$h � �A�D$hM�L$PM;L$X���A��$h���I�|$@���I�QI�T$PA�<
����=�z��>���I�D$P�D$>A��$h�H�P�I�T$PI;T$H����x�
����x�
�w�H��I�D$P�i�f�M��I��L�l$PL��$�A�D$hH��$��A��%=����L��L�L$�CG��L�L$��=A���UD��$�A�t$hA���� A��@��0��D��t	E���D���t
A��s�����%�������A��$h �W&A�D$hA����*&A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�o�����D��t	E�����D$%�F�M��I��L�l$PL��$�A�D$hH��$��D$H�Auu����te��$��D$(��tR�D$I�0uF����t6�D$(�t*A�D$lA9D$ptA��$�I��$�H���1��b��I�D$xA�D$lE��$hH�4I�t$xA�� ���I��$�A�� H�4I��$����A�D$h�N�M��I��L�l$PL��$�H��$�M;\$X�x�E��$hA���e�I�|$@�Y�I�D$PH�PI�T$P�8�|$@��
�(�|$|����|$=��$A�t$h��%����%���A�� �K��|$�A�D$ht(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��#�D$|�p�M��I��L�l$PL��$�H��$�A�D$tA�D$lA9D$p�)�A�t$h�����@��:���@������D$MA��$h���A��$h�� ���E��$hA�D$hI�D$xA�D$lH�4I�t$xA�� ���I��$�A�� H�4I��$������+H��L�������M��I��L�l$PL��$�A�D$hH��$��A�
�%=���M;\$X���A��$h���I�|$@���I�D$PH�PI�T$PD�A��
��A��=��A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�4 D��$�A�t$hA��A�� A��@��0��D!ȃ�D��1��%�������A��$h �0���A�D$h��D��t	E���N��D$/�d�M��I��L�l$PL��$�H��$�M;\$X���A��$h���I�|$@���I�D$PH�PI�T$P�8�|$P@��
���|$P<���A�t$h�ƀ� ��A��$h �t��|$P=A�D$h���|$P<����|$P�t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$<�}�H�EHH��I9��J�H�]X�H��L��H���A�����'�H�EX�(*�bH��L�-�kH�EP�8V��H�EXH�EP�'fDH�EX��h��,*H��cH�EP�V��H�EPH;EX����h��H�}@��H�xH�}P���
�Ϳ��=u��L��H�������t�H�EX�:*�dH��H�EP�U��L�MP�]h�:�M��I��L�l$PL��$�H��$��A��$h ��A�D$hA��$h�D$;�4�M��I��L�l$PL��$�H��$�M;\$X���E��$hA�����I�|$@���I�D$PH�PI�T$P���
�$��=��A�t$h��%�������A�� ���A�D$h���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$^�l���h��$�L�mX����	�M�hH�E`M)�H��$�I���P�L��L���ĵ��I��H���t�L��H��H)�誵��H���"�DŽ$�L)�L�p�M����HDŽ$�E1�L��$�H�l$A���t8����;wH���H��H���!�� ���	���M��A���<;wH���H��H������� �����	���~�I��I��u���fDM��I��L�l$PL��$�A�D$hH��$��t��$��@u
1ۨ0����(����&���D$S�XH�"H�XI�D$I�D$PH��I�D$`���M��I��L�l$PL��$�I�|$HH��$�H�GI9����L���й��A�_A�D$h�D$PD�Ӊ�$��|$P������C�@�|$PL���t����	��I�D$PI;D$X�#�A��$h����I�|$@��H�HI�L$P���
�G�����A�ڃ�!�W���?�N�A��=���A���t)M�L$PA��$h�I�A�I�D$PI;D$HvA�y�
�2�D$7Ic�$�I��$��A�\$h��t
��$�u��0tM�L$PI�D$XI9�s
A�9:�P
I��$�H����H�I�T$`E��$hI+T$HD��@I�Ӊ�$�A�� �z�E;�$����D;�$�������6�I��$�Ic�$�D��$�H�ω�$�H��$��{���D��$�H��I��tf�x	H��$���$��V��q�@���$������A�� � ���A�D$hI��$�Ic�$�I��$��#��|$7H��I�$H��X���$������|$3���H��L�������u8H����L����C�H����6�H��H��-����!�A��$h �7�A�D$h�D$3����M��I��L�l$PL��$�I�t$xH��$�E��$hH��I�t$xA�� ���I��$�H��A�� I��$�����A�D$hA�l$l�D$]�#���uh���Au��1�%=�ø��h ����EhL�MPL;MX�����h���H�}@���I�AH�EPA���
�0��.�zH�MH��h�L�MPL9�����0��	�?H�EPH�P�H9����X��.H���3=���Ã�0��	�߿H�5��H���������h ���L�MP�Eh��L�M`����M��I��L�l$PL��$�H��$��A��$h ���M�L$`L��A�D$h�0���M�L$PM;L$X�#�A��$h��I�|$@��I�QI�T$PE�A��
���A�B�<]��H�
����Hc�H�>��I��I�������H�l$L��$�L�mXH��$�L�mP��)H��aH�E`�MM��DŽ$���h��$��]h����	Ј�h�Á����������$������DŽ$�L�MP�����h���D��H���1�H��1�跷��L�MP�]hL�M`�c��I�7I�^�H��tA�L��1�L���(��H��L��$PH�ٺ!L���M��E��$hH��$����A�0�$L��D�T$����D�T$D��L����7���������A��$h ��A�D$hI��$��@Ic�$�I��$������VA��$�1�1�L��M��$�H������I�$�D$5H�!����$L���{����-L���n���M�L$PM;L$X�iE��$hA���VI�|$@�JI�AI�D$PA���
�A����A��$hI�T$P��H�J�A��$hI�L$PI;L$Hv
�z�
�7���D$$A��$hI�D$PH�P�I�T$PI;T$H�����x�
�����x�
����H��I�D$P���I;T$X��E��$hA����I�|$@�vI�D$PH�PI�T$PD�A��
��A�����A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�KA�_�$L��D�T$����D�T$L��D�����I��$�Ic�$�I��$����I�$�D$5H������$L��D�T$軮��D�T$D���6A��$hu?I�|$@w7I�AI�D$PA�1@��
�G��FЃ�	�R�L���s���M�L$PM;L$Xr��L���j2�����\�M�L$P�A�W�M�F�I�N�M��A��$HL��f��f%�	�fA��$HI�w�I�����E��$hH��$���������H��$`L��D�T$PH��H�L$�C��H�L$�(L��7I�$����T$P�D$@H�P H����E��$hI�H��$�6��I�G�I�V�L��H�p(�R���I�w�L���v���I�w�I�L��L��$PL����I�W�L��fo�$PI�H�R H�B0zH��$�g��E��$h����I�G�I�V�L��H�p(���I�w�L������I�w�I�L��L��$PL����I�W�L��fo�$PI�H�R H�B(rH��$�f��E��$h�N��I�w�L�����I�w�I�H��tI�W�L��$PH��L���o��I�w�H��$H����H����H��虷��E��$h����A��$HA�W�L��$PL��I�7����	�L��A��$H�w��E��$hH��$���I�W�I�M�F�L��$PL������E��$hH��$�k��I�w�I�M�F�L��$PL���[��E��$hH��$�5��I�w�I�M�F�&L��$PL���%��E��$hH��$���I�w�I�M�F�^L��$PL������E��$hH��$����I�w�I�M�F�|L��$PL�����E��$hH��$���I�7I�N�L��L��$P����E��$hH��$�a��I�7I�N�L��L��$P���E��$hH��$�/��I�w�I�M�FຆL��$PL��M��L�T$���L�T$I�N�L�纅H��M���;��E��$hH��$����I�w�I�M�F�L��$PL������E��$hH��$���I�w�I�M�F�%L��$PL�����E��$hH��$�i��I�w�I�M�F�/L��$PL���Y��E��$hH��$�3��I�w�I�M�F�*L��$PL���#��E��$hH��$���I�w�I�M�F�-L��$PL����
��E��$hH��$����I�w�I�M�F�+L��$PL���
��E��$hH��$���I�7L���V��A�V�A�F�L��H��$`�_I���$`��$h� ��$d��$l���L��$P�0L��L�Ѿ[H���u���E��$hH�h H�X(H��$���I�7L����
��A�V�A�F�L��H��$`�_I���$`��$h� ��$d��$l����L��$P�0L��L�ѾZH�����E��$hH�h H�X(H��$�}��I�w�L���A
��A�VA�FL��H��$`�_��$`��$h� ��$d��$l���L��$PI�o�L��L�Ѻ0�[H���_���E��$hH�h H�X(H��$��I�w�L���	��A�VA�FL��H��$`�_��$`��$h� ��$d��$l���L��$PI�o�L��L�Ѻ0�ZH���ӿ��E��$hH�h H�X(H��$�e���I�w�L���)	��I�7L���	��I�I�o�L��L��$P�0�[L���z���E��$hH�h H�X(H��$����I�w�L������I�7L������I�I�o�L��L��$P�0�ZL���!���E��$hH�h H�X(H��$���I�w�L���Ǽ��L��$P� L��L�Ѿl�ھ��E��$hH��$�t���A�F�A�N�L��A�V�A�v�I�_�I�o�$lI���$`�Y��$dH��$`��$h�(H�D$�n���E�G�H��L��H�X H�L$L��$PH�����E��$hH��$���A�F�A�N�L��A�V�A�v�I�_�I�o؉�$lI���$`�X��$dH��$`��$h�0H��$�I�_�H�D$�ӽ��E�G�L��H�L$H�h H��$�H��L��$PH�X(���E��$hH��$�A���I�F�M�G�I�O�L��I�w�M�PI�F�PI�F���PL��$hAR���E��$hH��$8H�� ��I�F�M�G�I�O�L��I�W�I�w�PI�F�PI�F�M�PL��$hAR����E��$hH��$8H�� 餾��I�F�M�G�I�O�L��I�W�I�w�PI�F�PI�F�M�PL��$hAR���E��$hH��$8H�� �V���I�F�I�O�I�W�M�N�I�w�M�PI�F�PI�F�L��PL��$hAR�r���E��$hH��$8H�� ����I�W�I�w�L��L��$PI��}o��E��$hH��$�׽��L��$PI�w�I�L��L���=��E��$hH��$駽��E��$hHDŽ$`鍽��E��$hHDŽ$��s���E��$hHDŽ$��Y���E��$hHDŽ$��?���E��$hHDŽ$��%���E��$hHDŽ$~����E��$hHDŽ$!��E��$hHDŽ$O�׼��E��$hHDŽ$�齼��E��$hHDŽ$%飼��E��$hHDŽ$/鉼��E��$hHDŽ$*�o���E��$hHDŽ$*�U���E��$hHDŽ$-�;���E��$hHDŽ$+�!���E��$hHDŽ$�����E��$hHDŽ$����E��$hHDŽ$��ӻ��E��$hHDŽ$�鹻��E��$hHDŽ$<韻��E��$hHDŽ$�酻��E��$hHDŽ$>�k���E��$hHDŽ$��Q���E��$hHDŽ$��7���E��$hHDŽ$�����E��$hHDŽ$�����E��$hHDŽ$����E��$hHDŽ$&�Ϻ��E��$hHDŽ$^鵺��E��$hHDŽ$|雺��I�VI�G�I�7H�PH�x �í��E��$h�u���E��$h��A�� ��A�D$h�S����8�TL��I�L��$PL��胸���H��膫��H��H������H��H�E H�U(H�U0�?���H��$E��$h���E��$h�A�� ���A�D$hI�H��$鼹��I�I�o�0L��L��$P�XL�����E��$hH�h H�X(H��$�z���I�?�"w�L��$PL��L��H�����E��$hH��$�F���I�w�I�M�F�L��$PL���6��E��$hH��$����I�7I�N�~L��L��$P�D
��E��$hH��$�޸��I�7I�^�H��tA�L��1�L������H��L��$PH�ٺ!L����	��E��$hH��$鎸��I�w�I�M�F�L��$PL���~��E��$hH��$�X���I�o�I�L��A�F�H��D$���H��L�����H���E�H�EH��H������F�!�H�H������D�U��E��L��$P�8�9L��L���*���H�h H��H�X(H�@0H�HcT$%�H��H	�H�H��$E��$h隷��I�w�I�M�F�L��$PL�����E��$hH��$�d���I�w�I�M�F�L��$PL���T��E��$hH��$�.���I�w�I�M�F�L��$PL�����E��$hH��$���I�W�I�M�F�L��$PL���8���E��$hH��$�¶��I�w�I�M�F�L��$PL�����E��$hH��$錶��I��0�XL��L��$PL��輴��E��$hH�@ H�X(H��$�J���I��(�YL��L��$PL���z���E��$hH�X H��$����1�H�
�L��L��H���e���M�����A��$�A;�`�E��$h�͵��E��$hA�� ����A�D$hI�?�Xs�H�����L��$PH��L��L���)��E��$hH��$�s���L��$PI�7L��L��L�T$�`��L�T$H��H��$�9�E��$h�4���E��$hI�t$xH��I�t$xA�� ���I��$�H��I��$�A�� �Z�I�G�A�� I�D$A�G��*�A�D$hA�G�ADŽ$�����I�_�A�D$tA�G�A��$�H��tH�$H�H������?�7���Ct$L��$P�(�CL��L���Dz��H�X H��H��$E��$h�Z���I��$�I�_�H��t��c�I��$�I��$�I�_��c�A�W�I�/L��I��$��L��A��$H����	к8A��$H�=���L��$P�PL��H�h L�ѾH��H�@(I�o�H�@0����fo|$`E��$hH�h H�X(x0x@H��$鉳��I�w�L���M���E��$h�o���I�7I�^�H��tA�L��1�L���`���H��L��$PH�ٺ!L�����E��$hH��$����E��$hI��$�H�'�H�4I��$�A�� �����1H���L���w�E��$h�ϲ��I��0�&L��L��$PL�����E��$hH�X H�@(H��$鍲���8�NL��I�L��$PL��轰���Aov�E��$hH�X p(H��$�I���L��$PI�w�I�L��L��蟵��E��$hH��$����L��$PI�w�I�L��L�����E��$hH��$���H����*L���u�L��(L��0����L��$P�8L��H�@ *L�ѾNH������Ao>E��$hH�X x(H��$�u����8�NL��I�L��$PL��襯���Aov�E��$hH�X p(H��$�1���I�L��$PI�w�L��L��H�P 胴��E��$hH��$���L��$PI�w�I�L��L���ӷ��E��$hH��$�Ͱ��E��$hI�H��$鴰��I��8�+L��L��$PL�����E��$hH�X H�@(H�@0H��$�j���E��$hHDŽ$�P���E��$hI�H��$�7���H����&L�����L��(L��0�^���L��$P�HL��H�@ &L�ѾOH���6���E��$h�`0��Ao>H�@ H�X(x4H��$鷯���H�OL��I�L��$PL�����E��$h�`0��Aov�H�@ H�X(p4H��$�g���E��$hI��$�H��|$MI��$��!�A�� ���I�H��$�#���E��$h�D$=I���=H�����(�����[���I��$�H���H�H��I��$�A�� �׮����H���L���s�E��$h餮��I�w�H���P�I�V�L���[���L��$PI�w�L��L��H��聳��I�H��$H����H��t�HH�B �@�J�BH��$E��$h�2���I�w�H�����I�^�L��H������8H��L��+H���N���I�H�h H�@(H�@0H��$H��t�HH�B �@�J�BH��H��$E��$h鱭��E��$hI�I�W�H�����H��t�JH�P �R�H�PH��$�v���I�7L���;���I��8L��L��$P�+L��蛫��E��$hH�X H�@(H�@0H��$�!���I�G�H��t>I�^�H��L��H���֫��H�ٺ8L��+H���>���H�h H�@(H�@0H��$E��$h�Ĭ��I�w�H�����I�V�L���{���L��$PI�w�L��L��H��衱��H��$E��$h�{���E��$hI�G�H��$�a���E��$hI�H�����H��HD�H��$�:���L���������HDŽ$E��$h����L���h������HDŽ$E��$h���E��$hI�G�H��$�̫��A�W�L��A��$Hf��f%�	�fA��$HI�w��n�I�w�I�M�F�I�N�M��L��贳��E��$hH��$�n���I�7L���3�I�E��$hH��$�J���I�G�H��tCI�V�H��L������L��$P�8L��L�Ѿ+H���b���H�X H�@(H�@0H��$E��$h���I�w�H���C�I�V�L��蟩��L��$PI�w�L��L��H���ů��H��$E��$h韪��E��$hI�G�H��$酪��I�7L���J�I�E��$hH��$�a���E��$hA��$Hf%��fA��$HA���$�1���E��$hA��$HA���$����E��$hA��$H��$��I���je�A��$�I��$�H�k�H��1���I�W�I�w�L��I�M�F�L��$P��E��$hH��$锩��I�W�I�w�M�F�L��I�L��$P��E��$hH��$�_���E��$hHDŽ$��E���E��$hHDŽ$��+���E��$hHDŽ$<����E��$hHDŽ$>���I�W�I�M�F�1�L������E��$hH��$�̨��I�w�I�M�F�1�L���ך��E��$hH��$顨��I�W�I�w�M�F�L��I�誚��E��$hH��$�t���E��$hI�W�H��t:I�H�AH�BH�B(H��u��f�H��H�qH�pH�p(H��u�H�H(H��$����E��$hI�H��$����E��$hA��$HA�W���	�A�� A��$HI�G�H��$����E��$hA�D$hA��E��$h顧��E��$hA��$HA�t$hA��$H��$���A�� ���A�D$h�b���E��$hI�G�H��$�H���A��$H�1�1�1�M�F�L���M����HhH�@0�Ao~�H��$H�ʃ�H�@ E��$hH��=�HhH��?xIcN��*H�@(H�P@H�H��H�@8��H�@`H	�H�鲦��E��$hHDŽ$阦��E��$hI�G�A�� H��$����E��$hA�D$hA��$H�A��E��$h�L���L��$PI�7L��L��L�T$�Q��L�T$H��H��$���E��$h�
���L��$PI�71�L��L���M��E��$hH��$�ߥ��E��$hHDŽ$2�ť��E��$hHDŽ$0髥��L��$PI�7L��L��L�T$��P��L�T$H��H��$��E��$h�l���E��$hA�� ��8�E��$hA�D$hA��E��$h�5���L��$PI�71�L��L���-L��E��$hH��$����E��$hHDŽ$1���E��$hHDŽ$#�Ӥ��E��$hHDŽ$"鹤��E��$hHDŽ$ 韤��E��$hHDŽ$!酤��E��$hI�H�H��$H������<����˨��=�����>�F����B(�:���E��$hA�� ����A�D$hL��$PI�w�L��L���6��E��$hH��$��I�w�L��H��$�,���E��$h�Σ��I�H�����I��$`�j�I��$XH���;�L�����H��L��$PH��L��1�L�����L��I��$X�B��E��$h�a����A�D$h�L���>��A��$i���E��$h�-���E��$hHDŽ$����I�G�L��I�_�L��$P�(I��$�L��L�T$�1���I��$PL�T$H�X H��tH��L������L�T$L�Ѻ(�L��I��$P���E��$hH�@ H��$逢��L���8���E��$hH��$�b���E��$hI�H��$�I����L���|��I�E��$hH��$�#���I���m�A��$HA�G�E��$hf%�f=���f���������	�fA��$H�ء��I�?H���\�臒��I�w�H���B�H��tH��L�����H��$E��$h锡��E��$hA��$HA�G�f%�f=���f����D����	�fA��$H�S���M�I�O�L��L��$PI�W�I�w��ԯ��E��$hH��$����E��$hA��$HA�G�f%�f=���f����D����	�fA��$H�ݠ��I�7I�^�H��tA�L��1�L�����H��L��$PH�ٺ!L�����E��$hH��$鍠��I�W�I�M�F��
L��$PL�����E��$hH��$�W���I�W�I�M�F��
L��$PL����E��$hH��$�!���A��$HA�W�L��f��f%�	�fA��$HA�V�I�FA�N�I�w艔$d��$`H��$h��I�H��u�"�H�C H��tH��H�H������t�H��$`�@�L���۝��L��$P�8L��H�X0L��I�_�H�@ H��H�@(H�@8蛝��E��$hH�X H�h(H�@0H��$�%���I�7L�����I�E��$hH��$����I�7I�^�H��tA�L��1�L�����H��L��$PH�ٺ!L����E��$hH��$鱞��A�W�M�F�I�N�M��A��$HL��f��f%�	�fA��$HI�w�I�襦��E��$hH��$�_���I�w�L���s���L��$P� L��L�Ѿl膜��E��$hH��$� ���I�G�I�V�L��H�p(�<��I�w�L���`��I�w�I�L��L��$PL�����I�W�L��fo�$PI�H�R H�B0rH��$��<��E��$h鬝��I�G�I�V�L��H�p(����I�w�L������I�w�I�L��L��$PL��肸��I�W�L��fo�$PI�H�R H�B(zH��$�v<��E��$h�8���A�F�A�N�L��A�V�A�v�I�_�I�o�$lI���$`�Y��$dH��$`��$h�(H�D$�2���E�G�H��L��H�X H�L$L��$PH���o���E��$hH��$驜��I�I�_�H�P0H�C0H��$�C(H��tH����H��L���ť��I��$ I�7H�C0�f�E��$h�S���L����D�L��H��I�F�H��H��$`H��$h�9G��I��$�H�@H���[�H�x�P�I�o�H��$`�(L��1�:���H�X H�E(�8H�
��HL������I�W�E��$hH�X �@(H��$H�P0頛��I��8�HL��H�
���ԙ��E��$hH�X �@(H�@0H��$�[���M��1�1�1�L���j����HhH�@0�Ao6H��$H�ʃ�H�@ E��$hH��=�HhH��?pIc��*H�@(H�P@H�H��H�@8��H�@`H	�H��њ��fo�$PI��HhH�@0H�@ E��$hH�ʃ�H�@(H��=�HhHc�$PH��?H�@8��*H��H�@`H�P@H�x��H	�H�H��$�L���H��M�G�I�O�1�L��$XM�1�L��AR����E��$hH��$(AZA[�
���H��I�O�M�E1�L��$X1�1�L��AR���E��$hH��$([]�љ��H��M�G�I�W�1�L��$XM�1�L��AR�L��E��$hH��$(XZ错��I�I�w�fo�$P�HhH�@0H�@ E��$hH�ʃ�H�@(H��=�HhHc�$PH��?H�@8��*H��H�p`H�P@H�p��H	�H�H��$����H��M�G�I�O�1�L��$XI�W�M�L��AR���E��$hH��$(Y^�И��H��I�O�I�W�E1�L��$XM�L��1�AR�J��H��$(_AXE��$h鑘��1�H�
�fL��L��H������M��tA��$�A;���HDŽ$E��$h�F���I�7L��H��$��=��ADŽ$8����E��$h����1�H�
fL��L��H���n���M��tA��$�A;�N�HDŽ$E��$h�Η��I�7L����B��I�E��$hH��$骗��1�H�
afL��L��H������M��tA��$�A;���HDŽ$E��$h�_���E��$hHDŽ$��E���1�H�
�eL��L��H�D�蚂��M��tA��$�A;���HDŽ$E��$h���E��$hI�H��$���1�H�
H�L��L��H���6���M���d�A��$�A;�-�E��$h鞖��E��$hI�H��$酖��I�?H������4���I�w�H�����H��tH��L��觟��H��$E��$h�A���I�H��tH����H��$E��$h����L��$P�(�L��L���N���E��$hH�@ H��$���I�w�L��H��$����E��$h龕��M�I�W�1�L��I�w�L��$P�A���E��$hH��$鋕���@�RL��I�L��$PI�o�L��跓���Ao~�E��$hH�h H�X(x0H��$�?���E��$h��A�� ���A�D$h����E��$hA���$fA��$H����E��$hI��$�IDŽ$�H��$�Д��L��$P�(�L��L������E��$hH�@ H��$镔���@�SL��I�L��$PI�o�L������Ao~�E��$hH�h H�X(x0H��$�I���I�H��tH�����H��$E��$h�#���H��I�w�M�E1�L��$X1�1�L��AR���E��$hH��$(AYAZ���H��M�G�I�O�1�L��$XI�w�M�L��AR�^��E��$hH��$(A[[饓��H��I�O�I�w�E1�L��$XM�1�L��AR���E��$hH��$(]X�g���H��M�G�I�W�1�L��$XI�w�M�L��AR����E��$hH��$(XZ�(���H��I�w�I�W�E1�L��$XM�1�L��AR���E��$hH��$(Y^���H��M�G�I�O�L��L��$XI�W�I�w�ARM��a��H��$(_AXE��$h騒��H��I�O�I�W�E1�L��$XI�w�M�L��AR� ��E��$hH��$(AYAZ�f���M��1�1�1�L���u���E��$hH��$�?���E��$hI�H��$�&���E��$hI�I�W�H�AH�BH�B(H��u�M�H��H�qH�pH�p(H��u�H�H(H��$�ۑ��E��$hI�H��$�‘��A��$HL��$PI�w�L��I�L��L�T$�8��L�T$�0L��IH��L���͏��E��$hH�X H�@(H��$�[���A�D$pA�T$l9��ڲ��x��9��˲�*L��I��:<����L���-<���&L��� <����L���<��M��&H��1�L������E��$hH��$�Hh�Ԑ��I�M��1�1�L�����E��$hH��$鬐��A��$HI�w�H���,��H������ѕH�S H���ĕH��H�H���ƒ���u�H�C(H�P H��u����E��$h�A�� ��A�D$hA��$H��*���I�7L������I�E��$hH��$����I�L��H���4��H��L���:��I�E��$hH��$�ԏ��A��$HI�7L��L��$PL��H�����L�T$�6��H��H��t)L�T$�0�JL��L���׍��H�@(H�X H��H��$E��$h�b���A��$HL��$PI�w�L��I�L��L�T$�J6��H��H��t)L�T$�0�JL��L���h���H�@(H�X H��H��$E��$h��A��$HI�7L��L��$PL��H�����L�T$��5��H��H��t)L�T$�0�JL��L�����H�@(H�X H��H��$E��$h過��A��$HL��$PI�w�L��I�L��L�T$�i5��H��H��t)L�T$�0�JL��L��臌��H�@(H�X H��H��$E��$h����I�7L��H��$�3��H��tHDŽ$I�7L����8��ADŽ$8����E��$hA��$H����H�Y���L���L��L��$P�(L��L�Ѿ0L�T$�ڋ��L�T$�8L��H�@ ��+H��L��赋��H��L��H�@ H��H�@(H�@0译��E��$hH��$�)����8�+L��I�L��$PL���Y���H��L��H�@ H��H�@(H�@0�S���E��$hH��$�͌��I�L��H���o1��H��L����7��I�E��$hH��$雌���*L���7��HDŽ$*E��$h�t���I�L��H���1��H��L���k7��I�E��$hH��$�B�����L���E7��HDŽ$�E��$h����E��$hI�H��$�����&L���7��HDŽ$&E��$h�ۋ��E��$hHDŽ$���A�F�A�v�L��H��$`A�V�A�Nԉ�$`I�w�$lI���$hH�ꉌ$dH�D$覽��H��8L��+H��讉��H�T$L��H�X H��H�@(H�@0誏��E��$hH��$�$���L��$PI�7L��L��L�T$�Y6��L�T$H��H����I�?L�T$�H�L��L��H���}���L�T$�8L��+H��L������H��L��H�h H��H�@(H�@0����E��$hH��$鈊��I��I��,H�I�V�L��H���
���L��$P�8L��L�Ѿ+H��蝈��H��L��H�h H��H�@(H�@0蛎��E��$hH��$����I�o�8L��I�L��$P�+L���A���H��L��H�h H��H�@(H�@0�?���E��$hH��$鹉��E��$hI�G�I�H���L�H��tPH�x tH�z �J�H�H0H��� �H�I(H�r(Hp(H�Q0H�J0H����H�q(H�H0H�q(H�RH�PH��$�>���E��$hI�G�H��$�$���E��$hH��$PH��$XI�D$PI�D$`���E��$hI�D$P�D$I�D$`�܈��I�I�o�0L��L��$P�XL������E��$hH�h H�X(H��$隈��I�_�H�H������^uH�C L��$P�8�L��L��貆��E��$hH�X H�@(H�@0H��$�<���E��$hI�W�H�H������^uH�B H��$����E��$h�A�� �רA�D$h���E��$hI��$�H��A�� I��$��c�I�_�H��tH�H��H�������]����T�L��$P�(�L��L���΅��IcN�E��$hH�H��$H��H�X ��H	�H��M���I�w�I�G�H��tI�W�L��$PH��L���y��I�w�H��$H���m�H���V�H���w��E��$h���I�w�I�L���fu��H��L��H������I�I�O�H��$XE��$hH�H(H��$PH�PH�HH��$韆��E��$hI�I�O�H��$XH�H(H��$PH�PH�HH��$�f���I�n� I�^�L��H��_虄��H��tA�H��1�H��L���>��H�ٺ!H��L��L��$P�c��E��$hH��$���I�w�I�^�I�N�H��tA�1�L������H��L��$PH�ٺ!L�����E��$hH��$髅��A��$HA�W�L��$PL��I�w�����	�L��A��$H�6���E��$hH��$�`���L��$P�(�/L��L��蓃��E��$hH�@ H��$�%���L��$P�(�/L��L���X���E��$hH�@ H��$���L��$PI�w�L��L���C���E��$hH��$齄��L��$P�8�.L��L�����Ao6E��$hH�@ p(H��$�y���L��$PI�w�L��L���2���E��$hH��$H�@(�D���I�G�H���8�H�Hc�$Pfo�$P��H��H	�xH�H��$E��$h���I��(�YL��L��$PL���)���E��$hH�X H��$鿃��I�M��1�1�L����u��E��$hH��$闃��I�W�I�M�F�1�L���u��E��$hH��$�l���E��$hHDŽ$�R���I�G�I�o�I�N�I�_�I��$�H��tH��A��L���/��H��L��$P�	�XL��L���O����Ao~�I�w�H�h x8�Ao6H�X(H�@0pHH��$H�����H���_s��E��$h鱂��I�w�I�G�H��t(I�N�I�W�AVM�N�QL��H��L��$`�2��Y^I�w�H��$H�����H�����H���r��E��$h�L���I�G�I�o�I�N�I�_�I��$�H��tH��A��L���)��H��L��$P�
�XL��L���I����Ao~�I�w�H�h x8�Ao6H�X(H�@0pHH��$H���w�H���Yr��E��$h髁��I�w�I�M�F�1�L���s��E��$hH��$送��H��I�O�I�W�M�N�L��$XM���L��AR�Ƌ��IcN�E��$hH�H��$(H����H	�H�A[[�&���I�?����H��I�O�I�W�M�N�L��$XI�w�M�L��AR�c���IcN�E��$hH�H��$(H����H	�H�]X�Ā��E��$hI�VI�G�I�H��$H�H(H�P雀��A��$itL��$PH�5�L��L���w��A��$H��$fA��$H�A��$i�V�E��$h�?���I�H��$A��$itL��$PH�5��L��L���w��A��$i�B�E��$h����I�/�0�-L��L��$PL��L�T$�~��L�T$�8L��H�h �jH��H�@(L����}��E��$hH�@ H�X(H�@0H��$�z��L��$PI�71�L��L���r&��L��H��H��$���E��$h�A��E��$hI�H��$�(��I�w�I�H��tI�W�L��$PH��L���U��I�w�H��$H���ءH�����H���o��E��$h��~��A��$H	�vE��$h�~��A��$I���E��$h�~��E��$hI�I�V�H�P�Ao~�H��$x(�l~��A��$i��E��$h�O~��I�W�1�L��I�o�L��$PL��L�T$譗��L�T$�0L��H�þVL���`|��H�IcNE�F�I��H�h ��H��H�X(H	�H��$H�Ic�H��t"H�H��H���������IcЃ��v�H�H��L���H	�H�����A�w�A�O�A��$IA��$HE��$h�������	�	�A��$IA�W��`	�A��$H�H}��A��$H��A��$H��"�A��$I1�L���Y��E��$h�}��I�W�1�L��I�o�L��$PL��L�T$�i���L�T$�0L��H�þWL���{��H�IcNI��I�w�H�h ��H��H�X(H	�H��$H�H��tH�H��H�������͟���ğH���m��L�����A�W�A��$HE��$h�у�����	�A�O�	�A��$I�����	�A��$IA�WЃ�`	�A��$H�|��A��$H1�L��A��$I�ȃ�����A��$H�������	�A��$I���E��$h�{��M�G�I�W�1�L��L��$PI�o�L��L��$�L�T$����L�T$�8L��H�þUL���y��L��$�H�IcNI��H�h L�@0��E�F�H��H�X(H	�H��$H�Ic�H��t"H�H��H��������IcЃ��s�H�H��L���H	�H����A�w�A�O�A��$IA��$HE��$h�������	�	�A��$IA�W؃�`	�A��$H�z��A��$H��A��$H���A��$I1�L�����E��$h�]z��I�G�L��I�n�I��$���"�H�
nz�8L��HH�D$�wx��H��(L��H�@ �1H���@(H�@0�Hx��I��$ �H��H��$�H�D$H�A �"d�H��H��$�H�D$H�GM�O�I�H����������I����@�H��$�L��L���Ug��I�G��C(H�D$H�C0I��1�1�1�L���|k��H��E1�H��UH�L$I��1�L���߮��1�L��I�o�H��$�XZ�8L��$PL��L�T$�bw��L��$�L�T$L��H��H��$���0H�k(L��I�o�H�C L�C0�%w��I�w�H�X H�h(H��$H���-�H���Pi��E��$h�x��I�w�L��膏��H��$H��t(H�Hc�$Pfo�$P��H��H	�pH�A��$����D�ADŽ$�E��$h�7x��I�H���ҩH�H������C���H��$E��$h�x��A��$HA�W�L��f��f%�	�fA��$HI�w�H��$�q��I��$�H���o��E��$h�w��M��0�KL��L��$PI�o�L��L��$�L�T$��u��L��$�L�T$L��H�h �8�H��L�@(L���u��E��$hH�@ H�@(H�X0H��$�&w��I��8�L��L��$PL���Vu��E��$hH�@ H�@(H�X0H��$��v��M��0�KL��L��$PI�o�L��L��$�L�T$�t��L��$�L�T$L��H�h �8I�o�H��L�@(L�Ѿ��t��E��$hH�h H�@(H�X0H��$�Tv��I�I�o�8L��L��$P�L���t��E��$hH�h H�@(H�X0H��$�
v��I��8�L��L��$PL���:t��E��$hH�X H�@(H�@0H��$�u��I�w�I�L���!z��E��$hH��$�u��I��8�+L��L��$PL����s��E��$hH�X H�@(H�@0H��$�Qu��E��$hI�G�H��$�7u��E��$hA��$H�� u��E��$hHDŽ$A�u��E��$hHDŽ$������t��L��$PI�71�L��L������L��H��H��$����E��$h�t��E��$hI�W�H��t9I�H�AH�BH�B(H��u�s��H��H�qH�pH�p(H��u�H�H(H��$�[t��E��$hI�H��$�Bt��I�W�I�w�M�F�L��I��Kf��E��$hH��$�t��I��$�H���kH�3�H�=C��������jL��$P�H��L��M��H�5��L�T$�?W��H�CL�T$H��$`I�t$HH��$xL��H�ĘH��$`�S����$t���E��$h�ns��I��$�1�L��L��$PH�5����V��E��$h�?s��H��I�O�I�W�E1�L��$XM�L��1�AR蹨��H��$(_AXE��$h�s��H��I�w�M�E1�L��$X1�1�L��AR�|���E��$hH��$(AYAZ��r��H��M�G�I�O�1�L��$XI�w�M�L��AR�;���E��$hH��$(A[[�r��M��1�1�1�L���d��H��I�w�I�H��$ E1�I��1�L��$XL��AR���E��$hH��$(]X�,r��H��I�O�I�w�E1�L��$XM�1�L��AR覧��E��$hH��$(XZ��q��H��M�G�I�w�1�L��$XI�W�M�L��AR�g���E��$hH��$(Y^�q��H��I�W�I�w�E1�L��$XM�L��1�AR�)���H��$(_AXE��$h�pq��H��M�G�I�O�L��L��$XI�W�I�w�ARM����E��$hH��$(AYAZ�-q��H��I�O�I�W�E1�L��$XI�w�M�L��AR襦��E��$hH��$(A[[��p��M��1�1�1�L���b��E��$hH��$��p��E��$hI�H��$�p��E��$hI�I�W�H�AH�BH�B(H��u�4�fDH��H�qH�pH�p(H��u�H�H(H��$�[p��E��$hI�H��$�Bp��A��$HL��$PI�w�L��I�L��L�T$�*��L�T$�0L��IH��L���Mn��E��$hH�X H�@(H��$��o��I�F�M�G�I�O�L��I�w�M�PI�F�PI�F���PL��$hAR�}��E��$hH��$8H�� �o��A�F�A�N�L��A�V�A�v�I�_�I�o؉�$lI���$`�X��$dH��$`��$h�0H��$�I�_�H�D$�zm��E�G�L��H�L$H�h H��$�H��L��$PH�X(�v��E��$hH��$��n��I�F�M�G�I�O�L��I�W�I�w�PI�F�PI�F�M�PL��$hAR��|��E��$hH��$8H�� �n��I�F�M�G�I�O�L��I�W�I�w�PI�F�PI�F�M�PL��$hAR�v|��E��$hH��$8H�� �Ln��I�F�I�O�I�W�M�N�I�w�M�PI�F�PI�F�L��PL��$hAR�h���E��$hH��$8H�� �m��I�W�I�w�L��L��$PI��s��E��$hH��$��m��L��$PI�w�I�L��L���3t��E��$hH��$�m��L��$P� �lL��L����k��E��$hH��$�jm��L��$PI�w�I�L��L����s��E��$hH��$�:m��A��$HA�W�f%�f��	�fA��$HA�V�I�FA�N�I���$d��$`H��$hH��u�@H�C H��tH��H�H������t�L��$`�@�L��L��L�D$�j��L�D$�8L��H�X0H��I�_�H�@ L��H�@(H�@8I�I�F�H��$`�j��L��$PI�w�L��H�X L��H��H�h(H�@0I�G��r��E��$hH��$�l��L��$PI�w�I�L��L���r��E��$hH��$��k��1�L���!���I�_�H��tH�H�������p�I�/H��tH��A�L��L��贷��H��L��$P�X�
L��L����i���Ao~�fot$pH�h E��$hH�X(H�@0x8pHH��$�Jk��1�L��耞��I�_�H��tH�H�������Q�I�/H��tH��A�L��L������H��L��$P�X�	L��L���3i���Ao~�E��$hH�h x8fo=�jH�X(H�@0xHH��$�j��I�W�H��u�@H�B H��tH��H�H������t�I�7H���:�H��jL��M�N�1�PPL��$`����I�7H��$(_AXH�����H���߶H����Z��E��$h�j��I�W�H��u��H�B H��tH��H�H������t�I�7H�����L��$P1�L���'���I�7H��$H���ąH����H���RZ��E��$h�i��A��$H��I�G�I�o��81�L��$PL��I��$�A�G�L��L�T$A��$H�g��L�T$�(L��H�@ �dH��H�h(L��H�@0�yg��E��$hH�X H��$�i��I�7L���԰��I�w�I�L��L��$PL���jo��E��$hH��$��h��A��$HA�W�f%�f��	�fA��$HA�V�I�FA�N�I���$d��$`H��$hH��u�!fDH�C H��tH��H�H������t�H��$`�@�L���f��H�X0I�_�H��H�@ H�@(H�@8H��u��H�C H��tH��H�H������t�L��$P�8�L��L���8f��E��$hH�X H�h(H�@0H��$��g��E��$hI��$@IDŽ$@H��$�g��E��$hI�G�H��$�~g��A��$i�ιE��$h�ag��I��$�H��t.L��M��H��H�5�0�J��H�CH��I��$���\�E��$hI�G�H��$�g��E��$hA��$H�I�D�P0E��uD�H4E��uH�x@uH�x`�K�ADŽ$8����H��$�f��E��$hA��$H�I�G�ADŽ$8����H��$�f��E��$hA�G�A��$8I��$�I��$@A�D$pA�G�H��A�� A��$8I�G�I��$�I��$@I�G�I��$��5�I�w���boH���YoA�V�A�N�I�w�L��I�FH��$`��$dI���$`H��H��$h�W��H��(L��H�þh�d��H�IcNH��$H����H�X H	�IcN�H�H�H����H	�H�I�V�H�PI�W�I��$�A��$8H���J�H�P(���1�H�P H�@ H�P0H�@8I�w�L�����E��$h�"e��E��$hI��$�H�*9H�4I��$�A�� �e���EH�׆L���)�E��$h��d��A��$itL��H�5(�L���5\��L���M��E��$hH��$�d��E��$hADŽ$8����A��$H�HDŽ$�hd��E��$hA��E��$h�Nd��fo�$PI��HhH�@0H�@ E��$hH�ʃ�H�@(H��=�HhHc�$PH��?H�@8��*H��H�@`H�P@H�x��H	�H�H��$��c��H��M�G�I�O�1�L��$XM�1�L��AR�D���E��$hH��$(A[[�c��H��I�O�M�E1�L��$X1�1�L��AR����E��$hH��$(]X�Oc��H��M�G�I�W�1�L��$XM�1�L��AR�ʘ��E��$hH��$(XZ�c��I�I�w�fo�$P�HhH�@0H�@ E��$hH�ʃ�H�@(H��=�HhHc�$PH��?H�@8��*H��H�p`H�P@H�p��H	�H�H��$�b��H��M�G�I�O�1�L��$XI�W�M�L��AR����E��$hH��$(Y^�Nb��I�H���v�H���v	���r�H�����H�n�1�L��H��1��M��E��$h�b��E��$hHDŽ$��a��E��$hHDŽ$��a��E��$hADŽ$8����I�G�A��$H�H��$�a��E��$hA��$8ADŽ$8��$�xa��E��$hHDŽ$�^a��E��$hI��$�H�x H�P(�V�H�@(H�@0H�@8H��$�a��I������I�F�M�G�I�O�L��L��$PI�w�I�W�ARM�P��k��E��$hH��$(Y^��`��I�F�M�G�I�W�L��L��$PI�O�I�w�ARM�P�k��E��$hH��$(XZ�`��I�w�H�H������/���I�L����N��L��H��H���]��I�?I�w�H��$XH��$PH�w(H�WH�GH��$H���K��P��E��$h�`��E��$hI�O�I�VA�~�A�v�H�A H��$�x�pH�PH�IcV�%�H��H	�H���_��I�?��f�H��I�O�I�W�L��L��$XI�w�M�M�N�AR�j��H��$(_AXE��$h�}_��M��0�KL��L��$PI�o�L��L��$�L�T$�]��L��$�L�T$L��H�h �8I�o�H��L�@(L�Ѿ�k]��E��$hH�h H�@(H�X0H��$�^��I�w�I���L��L��$P��b��E��$hH��$��^��I������I�W�I�w�L��L��$PI��b��E��$hH��$�^��I�_�L��I�o�H���!���L��$P�8L��L�Ѿg�\��E��$hH�h H�@(�H�X0H��$�.^��L��$PI�71�L��L���&��E��$hH��$�^��L��$PI�71�L��L�����E��$hH��$��]��I�w�I�L���3b��E��$hH��$�]��I��8�+L��L��$PL����[��E��$hH�X H�@(H�@0H��$�c]��I�W�I�w�L����a��E��$hH��$�=]��I�_�I�N�8L��+�s[��E��$hH�X H�@(H�@0H��$�\��E��$hI�G�H��$��\��I�/�0�KL��L��$PL��L�T$�
[��L�T$�8L��H�@ �����H��H�h(L����Z��E��$hH�@ H�@(H�X0H��$�g\��L��$P�8�L��L���Z��E��$hH�@ H�@(H�@0����H��$�\��M��0�KL��L��$PI�o�L��L��$�L�T$�;Z��L��$�L�T$L��H�h �8�H��L�@(L���Z��E��$hH�@ H�@(H�X0H��$�[��I��8�L��L��$PL����Y��E��$hH�@ H�@(H�X0H��$�J[��I�/�0�KL��L��$PL��L�T$�uY��L�T$�8L��H�h(�I�o�H��H�@ ����L���HY��E��$hH�h H�@(H�X0H��$��Z��L��$PI�_��8L��L�Ѿ�Y��E��$hH�X H�@(H�@0����H��$�Z��I�W�I�w�L��L��$PI��|^��E��$hH��$�VZ��I�_�L��I�o�H����L��$P�8L��L�Ѿg�vX��E��$hH�h H�@(�H�X0H��$�Z��L��$PI�71�L��L�����E��$hH��$��Y��L��$PI�71�L��L������E��$hH��$�Y��I�7L���U��L��$P� L��L�Ѿl��W��E��$hH��$�fY��I��(�YL��L��$PL��L�T$�W��L�T$L��H�X H��L��躈��E��$hH��$�Y��I�I�o�0L��L��$P�XL��L�T$�;W��L�T$L��H�h H��H�X(L���`���E��$hH��$�X��I����шI�W�I�w�L��L��$PI��\��E��$hH��$�{X��I��(�YL��L��$PL��L�T$�V��L�T$L��H�X H��L���χ��E��$hH��$�)X��I�w�I�L���JU��I�G�I�?I�w�H��$PH��$H�F(H��$XH�w(H�WH�G�H��I�G�I�V�E��$hH�P��W��E��$hI�VI�G�I�H��$H�H(H�P�W��I��0�&L��L��$PL����U��E��$hH�X H�@(H��$�]W��E��$hI�O�I�VA�~�A�v�H�A H��$�x�pH�PH�IcV�%�H��H	�H��W��H��I�O�I�w�M�N�L��$XI�W�M�L��AR�Za��E��$hH��$(Y^��V��E��$hI�G�H��$�V��E��$hI�t$xH��*H��I�t$xA�� ��V���m
H��xL���M�E��$h�oV��E��$hI�t$xH�z*H�t6I�t$xA�� �WV���m
H�<xL����E��$h�$V��L��$P� �lL��L���WT��E��$hH��$��U��I�7L��趝��I�E��$hH��$��U��E��$hA�� ����A�D$hI��$�I�_�H�x H�P(�j�H�@(I�/�QL��H�@0M�G�L��$PH�@8A��$8L��H�S8�8�C0H�k(L�D$H��$�S��L�D$H�h(L�@ E��$hH�@0H�C �U��E��$h��A�� �	�A�D$h��T��I��$�I�_�H�x H�P(�'�H�@(I�/�PL��H�@0L��$PH�@8A��$8L��H�S8�0�C0H�k(H��$��R��E��$hH�h H�@(H�C �dT��I��$�I�_�H��t���I��$�I��$�I�_����A�W�L��L��A��$HI��$��a����	к A��$H�JR��L�� L��`H��$��-R��M�L��8�L��H��L�L$�
R��L��$�L�L$L��H�h(L��$P�PH��L�@0L�ѾI�o�L�H ��Q��fo=�SE��$hH�h H�X(x0x@H��$�RS��I�7L���?��1�L���}�A��$HE��$hf%w���fA��$HI�H��$�S��I�w�L���Ϛ��E��$h��R��I�7L���N��L��$P�8L��L�Ѿ.H���Q���Ao~�E��$hH�X x(H��$�R��L��$PI�7L��L���c��I�7H��$H�����H�����H���C��E��$h�YR���)�(L��I�L��$PL���P��I�7H�X H��$H�����H���B��E��$h�R��M�O�A�v�E1�L��A�N�I�VL��$PI�A �p���HI�O�H�PI�IcV�%�H��H	�I�W�I�I�F�ARP�\��H��$(_AXE��$h�Q��I�F�M�G�I�O�L��L��$PI�W�M���ARP�\\��E��$hH��$(AYAZ�RQ��I�F�I�O�I�W�E1�L��$PM���L��ARP�\��E��$hH��$(A[[�Q��I�F�M�G�I�O�L��L��$PI�W�I�w�ARM�P��[��E��$hH��$(]X��P��I�F�I�W�I�O�E1�L��$PI�w�M�L��ARP�[��E��$hH��$(XZ�P��L��$PI�o��8L��L�Ѿ+L�T$�N��L�T$�8L��H�h �H��H�@(L��H�@0�N��E��$hH�X H�@(H�@0H��$�P��E��$hI�G�H��$��O��I�7L���K��L��$P�@L��L�ѾH���N���Ao~�L��H�X(H��H�@ x0�%L��E��$hH��$�O��I�7L���DK��L��$P�@L��L�ѾH���M���Aov�L��H�X(H��H�@ p0��K��E��$hH��$�-O��I�w�I�L���S��L��$P�8L��L�ѾH���NM��E��$hH�X H�@(H�@0H��$��N��I��8�L��L��$PL���M��E��$hH�X H�@(H�@0H��$�N��I�I�o�8L��L��$P�L���L��E��$hH�h H�@(H�X0H��$�@N��I�H��$��Ƅ$�$H�@ ��$���L��$P�@L��L�ѾSH��I�o��DL���Ao~�E��$hH�h H�X(x0H��$��M��I�7L����I��L��$P� L��L�Ѿl��K��E��$hH��$�M��1�H�
�L��L��H��e��8��M��tA��$�A;�e}L��$P� �lL��L���K��E��$hH��$�*M��I�W�I�w�L��L��$PI��Q��E��$hH��$�L��I�w�I���L��L��$P��P��E��$hH��$��L��I�I�o�0L��L��$P�XL��L�T$��J��L�T$L��H�h H��H�X(L���|��E��$hH��$�mL��E��$hI�H��$�TL���@�L��I�L��$PI�o�L���J���Ao~�E��$hH�h H�X(x0H��$�L��L��$PI�_�8L��L�Ѿ+L�T$�2J��I�L��H�X H��H�@(H�@0�0P��L�T$L��H��L���}J��E��$hH��$�K��E��$hI�H�@ H��$�vK��E��$hI�H�@ H��$�UK��E��$hI�H�@ H��$�4K��I�I�w�H�C H��tL��$PH��L��L���:R��I�F�H��$E��$hH�C��J��L��$P�i�@L��L��L�T$�I��I�w�H��H�@ H�@(H�@0����H�@8H��$H��tL�T$H��L��L���Q��H��$E��$h�mJ��I�7H�����H��JI�W�1�L��PM�N�PL��$`���I�7H��$(]ZH���U�H�����H���:��E��$h�	J��I�7H����I�W�L��$P1�L���7���I�7H��$H�����H���۞H���b:��E��$h�I��M��8�L��L��$PI�_�I�o�L��L�D$��G��L�D$H�h L�@0E��$hH�X(H��$�`I��L��$PI�w�I�L��L���L��E��$hH��$�0I��I�7L���uC��I�w�I�L��L��$PL���O��E��$hH��$�H���8�NL��I�L��$PL���%G���Aov�E��$hH�X p(H��$�H��I�7L���B��I��8L��L��$P�+L����F��E��$hH�X H�@(H�@0H��$�\H��A�G�A��$8I��$@I�w�A��$8I�G�I��$@����HH����HI�w�L��$PI�L��L��L�T$�a��L�T$�L��0H��L���3F��I��$�H�X H��H�@(H��$I��$�A��$h �^�I�G�I�W�A��$8I��$�I��$�H���[�H�P(���B�H�P H�@ H�P0H�@8I�w�L�����E��$h�FG��L��H�\���E��$hH��$I��$�H�4I��$�A�� �G���	H��hL�����E��$h��F��A�G�A��$8I��$@I�w�A��$8I�G�I��$@���8GH���/GI�w�L��$PI�L��L��L�T$�
`��L�T$�0L��H��L���D��I�W�A��$8H�X H�@(H��$I�G�I��$�I��$�H���W�H�P(�����H�P H�@ H�P0H�@8I�w�L����E��$h��E��L����E��$hH��$��E��E��$hA��$HA�� ��$���E��$hA�D$hA��$HA��E��$h�E��E��$hI��$�IDŽ$�H��$�[E��I��$�H��$�F�E��$hI��$��0E��M���XL��L��$PI�_�I�o�L��L�D$�SC���Ao~�L�D$I�w�H�h x8�Aov�H�X(L�@0pHH��$H����H���a5��E��$h�D��I��$�I�_�H��t�-��I��$�I��$�I�_����A�W�A��$HI��$�E��$h����	�A��$H�PD��E��$hI�O�I�VA�~�A�v�H�A H��$�x�pH�PH�IcV�%�H��H	�H��D��E��$hI�O�I�VA�~�A�v�H�A H��$�x�pH�PH�IcV�%�H��H	�H��C���$L��I�_�I�o�L��$P�8L����A��I�w�H�h H�@(�H�X0H��$H����H���
4��E��$h�\C��L��$P� �*L��L���A��E��$hH��$�)C��I��(�)L��L��$PL���YA��E��$hH�X H��$��B��H��I�W�M���
L��$X��M�N�L��AR�4M��IcN�E��$hH�H��$(H����H	�H�Y^�B��H��I�W�I�w�L��L��$XM���
M�N�AR��L��IcN�H�H��$(H����H	�H�_AXE��$h�;B��H��I�W�I�M��L��$XE1���L��AR�L��E��$hH��$(AYAZ�A��I��$�I�_�H��t�s��I�G�I��$�E��$hH��$�A��L��$P�8�jL��L����?��E��$hH�@ H�@(H�@0H��$�vA��I��$�I�_�H��t����A��$HA�W�I��$�E��$h����	�A��$HI�G�H�@ H��$�A��E��$hA��$H��A��L��$P�@�iL��L���4?��E��$hH�@ H�@(H�@0H�@8H��$�@��E��$hI�G�H�@ H��$�@��E��$hI�G�H�@ H��$�j@��L��$P�@�iL��L���>��I�W�E��$hH�@(H�@0H�@8H��$H�P �@��I��$�I�_�H��t���I�G�I�W�I��$�E��$hH�P I�V�H��$H�P��?��I��$�I�_�H��t�I��I�G�I�W�I��$�E��$hH�P I�V�H��$H�P�?��I��$�I�_�H��t���I�G�I�W�I��$�E��$hH�P I�V�H��$H�P�??��L��$P�@�iL��L���r=��I�W�E��$hH�@(H�@0H�@8H��$H�P ��>��I��$�I�_�H��t�f��I�G�I�W�I��$�E��$hH�P I�V�H��$H�P�>��I��$�I�_�H��t���I�G�I�W�I��$�E��$hH�P I�V�H��$H�P�\>��I��$�I�_�H��t����I�G�I�W�I��$�E��$hH�P I�V�H��$H�P�>��E��$hI�H��$�=��I��@�iL��H�����L��$PH��L��HD��<��E��$hH�@ H�@(H�X0H�@8H��$�=��E��$hI�G�I�W�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H���7�H�q(H�H0H�q(H�RH��$H�P�@=��E��$hI�G�H��$�&=��I�_�M��@L��H�����L��$P�iI�o�H��L��L�D$HD��;;��L�D$H�@ L�@8E��$hH�h(H�X0H��$�<��I�I�o��@L��H�����L��$P�iH��L��HD���:��E��$hH�@ H�h(H�X0H�@8H��$�\<��I�_�I�H�K0H��H��tH�Q(H�H(HK(H�B0H�P0H�����H�J(H�S0H�J(H�@L��$P�@L��L�ѾiH�C�K:��E��$hH�@ H�X(H�@0H�@8H��$��;��I��@�iL��L��$PL���9��E��$hH�@ H�X(H�@0����H�@8H��$�w;��I�/�8�+L��L��$PL��L�T$�9��L�T$�@L��H�h �iH��H�@(L��H�@0�q9��E��$hH�@ H�X(H�@0H�@8H��$��:��E��$hHDŽ$��:��I�7L��L���k��I�71�L��L��$PL����E��$hH��$�:��I�o�I��@L��M�G�H������kL��$PH��L��HD�H��L�D$HD��8��L�D$H�@ L�@0E��$hH�h(H�X8H��$�(:��I�_�I�/�@L��H�����L��$P�iH��L��HD��F8��E��$hH�@ H�@(H�X0H�h8H��$��9��I��8�+L��L��$PL���7��E��$hH�X H�@(H�@0H��$�~9��E��$hI�G�I�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H�����H�q(H�H0H�q(H�RH��$H�P�$9��I�o�0L��I�L��$P�-L��L�T$�K7��L�T$H��L��H�h H��H�@(L���y�E��$hH��$��8��E��$hHDŽ$�8��I�W�I�w�L���9j��E��$hH��$�8��E��$hHDŽ$�i8��I�W�I�w�L����<��E��$hH��$�C8��E��$hHDŽ$�)8��I�G�H�����H�Hc�$Pfo�$P��H��H	�pH�H��$E��$h��7��I�G�H���֎H�Hc�$Pfo�$P��H��H	�xH�H��$E��$h�7��I�w�H�H������C��]H��I�w�L���
i��E��$hH��$�W7��E��$hHDŽ$�=7��I�7L�����A�V�A�F�L��H��$`�_I���$`��$h� ��$d��$l�A5��L��$P�0L��L�Ѿ[H���!5��E��$hH�h H�X(H��$�6��I�7L���x~��A�V�A�F�L��H��$`�_I���$`��$h� ��$d��$l�4��L��$P�0L��L�ѾZH���4��E��$hH�h H�X(H��$�)6��I�w�L����}��A�VA�FL��H��$`�_��$`��$h� ��$d��$l�/4��L��$PI�o�L��L�Ѻ0�[H���4��E��$hH�h H�X(H��$�5��I�w�L���a}��A�VA�FL��H��$`�_��$`��$h� ��$d��$l�3��L��$PI�o�L��L�Ѻ0�ZH���3��E��$hH�h H�X(H��$�5��I�w�L����|��I�7L����|��I�I�o�L��L��$P�0�[L���&3��E��$hH�h H�X(H��$�4��I�w�L���||��I�7L���q|��I�I�o�L��L��$P�0�ZL����2��E��$hH�h H�X(H��$�_4��E��$hHDŽ$A�E4��E��$hHDŽ$�+4��E��$hHDŽ$�4��E��$hI�H��$�3��A�V�I�FA�N�I�w���$d��$`H��$hH���_4H�H������?�L4H��$`H�
'J1�L��H��KH�����H��L���H]��I��$�1�1��w'�H����E��$hH��$�Y3��I�7L��L���+h��I�H��t2H=�v�t&L��L��H�
�I1�H�6K���L��L����\��I�7L��L���Cc��I�71�L��L��$PL��L�T$���I�?H�����L�T$L��H��L���hS��L�T$�8L��+H��L���0��H��L��H�h H��H�@(H�@0�6��E��$hH��$�s2��I�n�I�w�L��H���@g��I��I����H��L��H����R��L��$P�8L��L�Ѿ+H���v0��H��L��H�h H��H�@(H�@0�t6��E��$hH��$��1��E��$hI�G�I�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H���܈H�q(H�H0H�q(H�RH��$H�P�1���0�-L��I�L��$PL��L�T$�/��L�T$H��L��H�@ H��H�@(L������E��$hH��$�31��L��$PI�o��0L��L�Ѿ-L�T$�]/��L�T$�8L��H�h �jH��H�@(L���4/��E��$hH�@ H�X(H�@0H��$�0��L��$PI�7L��L������E��$hH��$�0��I�I�o�0L��L��$P�XL���.��E��$hH�h H�X(H��$�L0��I��(�YL��L��$PL���|.��E��$hH�X H��$�0��L��$PI�_��8L��L�Ѿ�A.��E��$hH�X H�@(H�@0H��$��/��L��$PI�7L��L��L�T$���L�T$H��H��$��SE��$h�/��L��$PI�7L��L��L�T$���L�T$H��H���!�H�H������0����H��$E��$h�4/��I�7L��L���f_��I�71�L��L��$PL�����E��$hH��$�.��L��$PI�7L��L��L�T$�-��L�T$H��H��$�R�E��$h�.��E��$hI�H��$�.��E��$hI��$�H�4I��$�A�� �SI�D$xH�4I�t$xA�� ��RI�D$I�D$H��$�A�� ��RA�D$h�2.��I�G��(L��I�L��$P�CI�D$L���Y,��IcNE��$hH�H��$H��H�X ��H	�H���-��E��$hI�D$I�D$H��$�A�� ���A�D$h�-��I�o�I�H���n�H����H�EH������?����@tFL��$P�8�@L��L���+��H��L��H�@ H��H�@(H�@0�1��H��H��H��L���1��E��$hH��$�-��I�w�I�H��tH���r�L��$PH��L��L����M��H��$E��$h��,��I��8�+L��L��$PL����*��E��$hH�X H�@(H�@0H��$�y,��I��t+I�^к �bL��H���*��I�w�H��L��H����2��M�M�O��L��L��$P�@I�_�I�o�L��L��$�L�L$�^*��L�L$I�w�L��$�H��H�h H�X(L�H0L�@8H��$H������t��E��$h��+��E��$hI�H�H��H������NuH�A H�H������+HE�H��$�+��E��$hHDŽ$�l+��I�G�H���PQH�Hc�$Pfo�$P��H��H	�xH�H��$E��$h�!+��A�I�o��D$H����PH�EH������?��O��@��L��$P�8�+L��L��L��$��)��1�1�H�h I��$�H�@(H�@0H��$���H��L��$��8L��H�h�@H���L����(��L��$�H�X H��H�@(L�@0�EH�����H�EH�u Hc�$Pfo�$P%�H��uH	ЋT$H�E��H�E(H��tH�
��L�����H�]0H����ML��$�I��L��$�I���E1�M�v0M���y I�V H�H������?t��@u�H�z0u�H�Z �T$H�
���L��H���?�����M����I�E H����H��I9�tH�p H��L����>�����eOH���J'��I�F0I�v I��$ I�E0�a��I��$ L��M���N���D���I�w�L���?��H��H���X|H�H������?�)|��@��{L��$P�8�+L��L��L�T$�'��L�T$�8L��H�X �BH��H�@(L��H�@0��&��H�@ H��H�@(H�h0E��$�H��$E���V{ADŽ$�E��$h�H(��I�w�I�H��tH���'ML��$PH��L��L���-I��H��$E��$h�(��I�w�H�H������C�LNH��I�w�L���Q,��E��$hH��$��'��I�G�H����HH�Hc�$Pfo�$P��H��H	�pH�H��$E��$h�'��E��$hA��$�ADŽ$���$�W'��E��$hHDŽ$�='��I�w�I�H��tH���GKL��$PH��L��L���"H��H��$E��$h�&��E��$hHDŽ$��&��I�w�I�H��tH����JL��$PH��L��L����G��H��$E��$h�&��E��$hA�D$tA�D$t��$�~&��I�7L���Cn��I�E��$hH��$�Z&��A��$HuHA��$Hf����<�H�H,H�
$KtL��L��H�.>1����L��L����O��L��$P� �L��L���:$��E��$hH��$��%��L��$P�@�L��L���$���Ao>L��H�@ H��x0�"��E��$hH��$�%��L��$P�@�L��L���#���Ao6L��H�@(H��H�@ p0��!��E��$hH��$�.%��L��$P�@�L��L���a#���Ao>L��H�@(H��H�@ x0�m!��E��$hH��$��$��I�w�L���+Y��I�W�I�w�L��L��$PL���?��I�W�L��fo�$PI�G�H�R H�B0rH��$���E��$h�u$��A��$i��EE��$h�X$��I�w�L���X��I�W�I�w�L��L��$PL���A?��I�W�L��fo�$PI�G�H�R H�B(zH��$�4��E��$h�#��I�H��$A��$itL��$PH�59@L��L���F��A��$i��DE��$h�#��A��$itL��$PH�5�?L��L�����A��$i��DE��$h�g#��I��$�H��t3L��L��$P�H��H�5'����H�CH��I��$����L����?��E��$h�#���PL��I�_�I�o�L��$P�L���<!���Ao~�E��$hH�h x0�Ao6H�X(p@H��$�"��I��$�H��t�9��I�G�PL��I�_�L��$P�I��$�L���� ���Ao~�E��$hH�@ x0�Ao6H�X(p@H��$�G"��E��$hI��$�IDŽ$�H��$�"��I��$�H����DI�G�L��I�_�L��$P�PI�o�I��$�L���* ���Ao~�I�w�H�h x0�Ao6H�X(p@H��$H���7DH���B��E��$h�!��E��$hI��$�IDŽ$�H��$�j!��E��$h�D$�T!��A��$itL��$PH�5>L��L�����A��$i�~ZE��$h�!��A��$itL��$PH�5�=L��L���m��A��$i�UZE��$h�� ��L��$PA��$itL��H�5m<L��L�T$�&��L�T$�HL�ѾqL������A��$HE��$hH�@8�@0�P@H�@ H�@(H��$A��$H�C ��A��$itL��$PH�5�5L��L�����A��$H��$fA��$H�A��$i�5LE��$h����I��$��L��L��$PH�5E�C��A��$HE��$h��$���I��$��L��L��$PH�5�D���A��$HE��$h��$A��$Hf%��fA��$H�M��H�N51�L��1��
��E��$h�,��I�D$PI�L$XH9���H�P���#����
���� �w��	���kI��$��L��L��$PH�5�:�G��E��$h���A��$itL��$PH�5�:L��L�����A��$i��JE��$h�w��I�H��$A��$itL��$PH�5�:L��L������A��$i��?E��$h�*��A��$itL��$PH�5�[L��L�����A��$i�+7E��$h�����H���� ��L���D$M��M��L�|$ �y'��L�l$L��$�L��$�L��$�H��$�H��$`L��H��H�L$P�@��H�L$P�(L��?I�$���H�L$H�H H�H��$�H9�$���H��$01�L������D$A�)��L�l$L��$�L��$�L��$�H��$��N$L������I�D$L��H�p���I�D$P�(�I�D$`�x���$�H��$`L��H�@H�΀΀I�D$�PH�L$P�V��H�L$P�(L��?I�$����H�L$�D$AH�H H�H��$�H9�$���(��I�$H�H���(��A�b����9T$P�R�� t5�B���v-���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��I�T$PI�t$`�C"L��諃���D$ �>(��A�t$h�*"�L��D�\$���D�\$��'��M;L$X�iE��$hA���VI�|$@�JI�AI�D$PA�9
��'��I;D$X��'��A�y
�z'��I��M�L$P�l'���H�@L��1�M��H�5�>D�L$H�~��I�HcD$L��L��H��I���<C���H�5�UL��1����D$E��$h����L��L�T$D��$�����L�T$D��$����6KM�L$P�(���L��L�T$D��$����L�T$D��$����I4M�L$P�0��L���D$M��M��I���	$��L��L��L��$�L��$�L��$�H��$��r��+��I;L$X�0��A�y
�0��I��M�L$PA��@�
�
A�b����9T$P�����I�z�������$����lA�J�����3/���V/��f.�A�
I;T$X�
��A�y
����I��A�
M�L$P����I�$H�H�������H��谂�����.3H�EP��C��H;EX����i��-1�������H���H��$��i1�����1����
��.��A��@������|$P
���I�z�M.���
����L������D$A��$����tA;�$�}A��$�ADŽ$������t$����$���#L�����M�L$PM;L$X�WA��$h�HI�|$@�<I�AI�D$PE�A��
�N*��A�
I;D$X�=*��A�y
�2*��I��A�
M�L$P�*��fDM��$�H��$0Ic�$�I��$�M��$�L�l$L��$�L��$�H��$��\6��H�D$���M��L�l$L��$�I�D$XL��$�H��$�I�D$PIc�$�I��$�M��$���$�H��$0�5��H�D$���A�y
����I��L�MPH�EP��h�H�P�H�UPH;UHv�x�
u�x�
uH��H�EP��)�DH���p���L�MP�]hDŽ$�L�M`�$��M��L�l$L��$�L��$�H��$���\�4���ADŽ$������#���M��L�l$L��$�L��$�H��$�A��$h�
(���*��A�y
��-��I��L�MP�I��L���D$M��M��L�|$ � ���L��D�\$���D�\$E��$h���1"��M�L$P���I;L$XsA�y
��D�؃���$���+��A��@��
�|$P
��PL��D��$�L�T$�p���L�T$D��$��1$��H�5O!L���S��D�\$PL�T$��$��H;}X��?���x
��?��H��H�EP�?��I�z��#��I�|$D�\$��D�\$I�D$A����A��@tI�D$PI�T$XH9�s	�8:��E�A��$h ��A�D$h�D$Z�Y!�������J��$�������H�^DŽ$�L�MP�]h��!���x�
�U#��H��I�D$P�G#��H��M����H�l$L��$�L�mX��h���qG���@������9���ZG��H�}PH�>�L��H)�H���?G���G�Pƀ�5����Hc�H�>��H����H����H���H���H���H���L�wA��H�5C������t L��닀�=t	��:��F��I�^A�I��I�^I9���F��A�F�ƒ� t��	��v�E��t�I��A�<-��J<_��J�P�����J�P�����J��0��	��JL��H��H��H)����H��H�����H�]`I��L�uPH�pH� tH�pH���=��L��1���L�mX�F��f.�I�z�����S)��H�5AL���P��I�|$���D$ZI�D$�!��L��D��$�L��$���D$�������#�����L���~��D��$�L��$����)��L����у� ����	������:t"��$��������I����>��H��$�I��H�XL��H��$�H���E���H�΃� tу�	��v�@��"��XH��$�I���<;�1Y<"�)Y�� � Y��	���YH��I��u�L��$�H��H��E1�M)�H��$�M���FXL��L��L��$����I�E L��$�H��$���WI�}M����WM�U1�1�M��~LЀ8-u�_��Hc�I9��L��$�L�=�OI��L��$�I��L��$�M��H��$�L��I�H��L��H�������u
�<+�$VI��H��OI9�u�L��L��$�L��$���V�H��I���6����C��H�]8D��$�L�MPL;MX����h�tH�}@�iI�AH�EPE�)A��
��TA�E�<%��H�
���Hc�H�>��D��$���h�L�MPL9MHs
A�9
�1I��$��'+����)�DH���b���L�MP�]hL�M`�����)�`H��D��$��(v��H�EP1�H;EXs1Ҁ8.��A��&��8���H�P���h�H�UPH;UHv
�x�
��H��)�DH�����L�MP�]h�����t	A��$h�A��$h ��8���_*�L���!���8��I�t$XE1��H��/��������<��A��$h�+��E��$h�|$P��>������>��I��$�Ic�$�D��$�H�ω�$�H�L$P���D��$�H��I���p>���ÀH�L$P��$���EA�� A�q�FA�t$h@��t	A��$hA�Af=�Q&��
u%fA;At�A��$h ��EA�D$hA�A�D$�`���.H���E}��H�5&H����K���@��A�� ���#A�D$h�&��A��=��@��A�A��%=�/D��$�A��A�� A��@��0��D��t	E�����A��$h ��@A�D$hA�����@A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��@����D���/��E���/��A�@�����.��A��$�I��$�H�41��%��A��$�H�f1�I��$�����D$+�:��f.�M;\$X��
A��$h��
I�|$@��
I�D$PH�PI�T$PD�A��
�4CA�@�����
�L��L�L$PD�D$�w���
��I��$���H��PX���
I�D$PD�D$L�L$P�@���������^
�D$)��(�\A�@�M�L$`��/�\H�\�Hc�H�>��M����A�t$h��#�L������A ��H9�tH���B���
t	��#���A��$�I��$�H��"1�����	��H9�tH���B���
t	��#�e�A��$�I��$�H��"1��w���W�A��=��8A��>�8��A�2��%=� D��$�A��A�� A��@��0��D��t	E�����A��$h �{7A�D$hA����N7A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�P8����D���k+��E���b+��A�@����U+��A��$�I��$�H�1����A��$�H��1�I��$��g���D$-���A�@����7���A��$��-1�D�D$I��$�H���%��D�D$�A��$h ��-A�D$hA���tuA��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��7A�@��D$i��	����D$�����+�L��D�D$�p��D�D$A�D$hA��@�*���D$����H�}0L��$�L��$��>-�D$��DH��$E��$h�	���L���cr�����H2���D$P�����e2��fDL��$P1�H��L��H�5�-�L�E��$h���I��$`�X3E��$h���A�����M��L�l$PI��L��$�H��$�I�D$8I�t$L��A��$�I�D$@H�CI�D$HHCI�D$XI�\$8I�D$PI�D$`���A��$h���A��$h�� �lDA�D$h�D$
�v���x�
�
�H��I�D$P���
��A�D$h��K1���0t%�$��51��H��I+D$HH��$�I;T$X��0A��$h��0I�|$@��0I�D$PH�PI�T$PD�A��
�K0A��-�0A��~��/DŽ$��D$A��'��-A��`��2A��"��2A��$h��@A��t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
� 0�|$�V0��A��$h�I�D$PH�P�I�T$PI;T$H�40���x�
�*0���x�
� 0��H��I�D$P�0���L����o������$A��$hI�D$P��4��I�$L��H��$���H��$E1��D$H��$�H��$H��$�H�l$PD��M�L$PM;L$XsLA��$huAI�|$@w9I�AI�D$PA�	��
��0�A���w7��o�^��M�L$PM;L$Xr��L���$o�����E1M�L$P뫍A���v�A��H�l$PI�D$PDD$D�D$A��$h�H�P�I�T$PI;T$Hv
�x�
�|0Ic�$�����I�L$HI�T$`L��A��$�H)ʉ�$dI�T$P��$`H)ʉ�$hH�
���$lI��$��E��$�H�e H�>)M��$�A��HN�1�1��U�A��$�;�$`��/�D$���"L��B	�H��$���+����A��$h ��/A�D$h�D$B���H��$�H��$�������t%��$����/����$EىD$������L�����
�����*�‰�L���%����#����)�`H��莄���A��L���\m�����NM�L$P���L���=m������?E��$h�H/���L���Zo����=��L�����LA��$h�I�T$PH�J�I�L$PI;L$Hv
�z�
��L���„�$�t	�� �\?�D$�����D��I���
��M�L$P��$���������
*�‰�L���!���5&��M�L$PM;L$Xs
A�9=��1��D��L���K��D$4��1��I�L$PI��$��
�y�H�L$H��PX����0��H�L$�A�<_��0������0���'1��A�D$h�M�L$P�@1��I�D$XI9�sA��у῀�>�$1����=��=�=L�����D$3�-1���x�
����H��I�D$P������������DŽ$�M���.���L���tk�����w"��A�t$hA���ƀ������A��$h �wA�D$h����"���"��fD�D$��+��A�@����(�A��$��+1�D�D$I��$�H�s���D�D$�A��$h �X4A�D$hA�����A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��4A�@Ѓ�	�a����+L���\p���D$�a��A�9
��2���x�
��2��H��H�EP��2���H���Ej������EL�MP�y�A�t$h��+�L��轶���+���L��D�D$�Fl��D�D$��=�4P����PA��$h�I�T$PH�J�I�L$PI;L$Hv
�z�
��T��$�A�\$h���� @���0��!ʃ�@��BO���D$O��A�#���ށ����
#��A��@��@��t���AO�D$���"���L��D�D$�;i��D�D$���"��A�\$h��$�����0�� ��T���`"����)�`H������L�MP�]h���L����H���[���L����H�����H��$`L���1��H�����H���:��E��$hH��$�4������t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��5I�t$PL���:������0��H�ID$PH�5^#L����<������L��L�L$�%h��L�L$����H��1�L��1�������A�@����"�A�@Ѓ�	��A���M���A��(�MA��[��LD��A�Q��{��L��<�{L�\$1��=�L�w�� t��	���_�E1��B�E��A��A��$�1�D��H�5�L��D��$�L��$��#��A�\$hE��$hD��$�L��$��1-���H���#g������AL�MP�[/���"+�H��蠳��/���L����f�����?FM�L$P�!���u*��L���m���� ����+��L���Y���)���L����h����=�>>��t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�B>�D$��t	���uh�;+�H������'/����+�L���ز�����L���fh����@t-���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�rE�A��$h ��0A�D$h�D$~������+H�QL���*��A��$h �^"��A�t$h��+�L���4���G"���L���e�����^$��D��$�A�t$hA��@��0��D �A����3A���$��@�(�艬��D$UH�@�@/I�D$�(��I�o�H��$`�(L��0���H�X H�E(�_����;������B(�x����|$K�|L��I��$�H��I��$�A�� �3+I��$�H�H��I��$�A�� ��*I��$�H�=�H�I��$�A�� ������H��L���Ŀ�E��$h���I��$�H�@H����(H�x��(E��$h�������+��D��H���Hc�H�>��L����c������AE��$h����H���L�L$�
D��H��PX��uL�L$A�<_t	����-��D�t$M��I��L�l$PL��L��$�H��$����D�T$�(��A�t$h�"�L������H�} H����A��H��t)H�H��H������F��DH�H������E�HDH�K�8�+L����L��$P�8L��H�X L�Ѿ$H�@(H�@0H��$����L��$�H�H��H�h H�@(�L�@0HcD$��H��H	�H��A��A�
I;T$XsA�y
uI��A�
M�L$PA��$h�/CI�T$HI�D$`A��$�H)Љ�$dI�D$P��$`��$hH��H)щ�$lA�� ��CA����~CA�J����qCA��$h�H�H�I�L$PH9�s
�x�
��BD��H��1�L��1����A��$�;�$`�s@I�$�D$5H�!����L���a������M�L$P��*��A�� ��(���6)���L�����(����*��L��������A�� ��W@A�D$h�L���ac����=�@���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�C��tiA��$h�I�D$PH�P�I�T$PI;T$H�W���x�
�M���x�
�C��H��I�D$P���f��L���`������EE��$h����D$�����A��$h �<?A�D$h�D$`�Z���(�苧��D$TH�@�@`I�D$�*��H���L���=�H��钐��A�t$h�(�L��L�L$艬�L�L$�(���A��$h ��A�D$h�D$`�����A��$h �8/A�D$h�L����a����=�*���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�/�D$��`��I;D$XsA�y
u	I��M�L$PA��$h�I�D$PH�P�I�T$PI;T$Hv�x�
u�x�
u	H��I�D$P����+��Ic�$�I��$�H��$`L��$8H�L$P�A��$��
�p�I��$�Hc�H�x�0���$8��#A��H=���?��#H�t$PL��D�D$���H�L$P�(L��6I�$�V�HcT$�D$?H�P H��]����+��L��D�D$PD��$�D�L$�̪�D�D$PD�L$D��$����A�@��D$/�����A��$�1�I��$�H�����A��$�H�1�I��$����������+H�SL�����E��$h�+����+�L���)��E��$h������+H�L���׸�E��$h����A�t$h��+�L������]���D${�.��E��$h�A�� �1(A�D$h�D$L�4���D$^����@L�������L���_���D$8A���)��I�\$PD�D$P�
I��$��{�H��PXD�D$P��u�C�<_t	���(��A�@Ѓ�	��A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�'H��$`L��D��$�H��H�D$P蟵�D��$��|$6D����H�/1�L��1��#��A��$�;�$`��I�$H�!�A��$h ���A�t$h��(�L���h������H����������������$���H��L���!7������"����"��@�L���s[�����|��A�t$hA���ƀ�(���A��$h �A�D$h�����������*�L��D�D$趧�D�D$A�D$hA��@�b���D$������Z+H��L���Q��A��$h �:��A�t$h�[+�L���[���#���Y+H��L�����E��$h��
���Q+H�]L�����A��$h �A"��A�t$h�R+�L�����*"���P+H�0L��豵�E��$h��!������
A�� ��� ���=)���L��褦�� ����+H��L���[��E��$h�)��L���E
��I�t$L���H���D$C������ ������D�L����[���D$���>�������t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�v	�D$��`����Z*�L���ޥ��u���L���,Y������	��A�D$h�_
����u��$����A��$h u)A�D$h�D$:���*�L���n�����A�t$h�m+�L���R���H��L��H�
"1�H��H�K���H��L������E��$hI�G�H��$��L����6���ܾL���Z����]�A�l$l�A��$h ��A�D$h�L���`Z���D$���=������t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$�����H����W�����O	��M��L�l$PI��L��$�H��$��D$\����A��$h�I�D$PI9D$H�u����8
�l����x�
�b���H��I�T$P������$��C����� �:�����	���.���A��$�1�I��$�H������A��$�H�K�1�I��$���������
I;T$Xs�x
uH���
I�D$PA��$h�I�T$PH�B�I�D$PI;D$H�R����z�
�H����z�
�>����0���@A�t$h��%=t ��Au@��0����$����A��$h �SA�D$h�D$E�G����L��L�L$�%V��L�L$��� 	��M�L$`L���k���@L������A���D$6�G	��DI��$pM�D$8L��H�T$P�����	��H�
1�L��1������	��A�t$h��(�L���:���	���A��$h ��I��$A�D$h���5,�?L���{l���D$?�v�A�t$h��(��L��D�D$P�ա�D�D$P���A�D$h0u��	��wH�T�������	A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���A��$h �L���A�t$h�V'�L���V���0����L��D�D$�T��D�D$����	��A�\$h��$�����0�� ��N���`
��@�J+H�1
L���į�A��$h ����A�t$h�K+�L���Π�����B����T	��:��I�L$PH�AI9D$X���y��'t<��"t7I��$�H�L$�
H��PXH�L$��u�A<_t	����A�\$h�D$P��	��A�t$h��+�L���7���P���*�L��� ���9���I+H�VL���׮�E��$h����A�t$h��+�L���������H;UX��M��I��L�l$PL��$�H��$��D$
I��$��������A�t$h�{+��L��腟��;���|$ M��L�l$PI��L��$�H��$�u$�D$D����x
�t���H��H�EP�P���\$�S����x���A��$h�I�D$PI9D$H�����8
�����x�
�����H���D$\I�D$P�X�����t$A��$h�I�D$PH�P�I�T$PI;T$Hv�x�
tB�A��$h upA�D$h�D$[�
����x�
����H���D$�I�D$P���x�
u�H��I�D$P�I�$H���A��$h u.A�D$h�D$���A�t$h��+�L���(���t����g+�L�����뾀x�
����H��I�D$P���A�D$lA9D$p��A��$h usA�D$xu^A��$�tF�� ������D$� �
I;T$X�+���x
�!��H���
I�D$P����D$����D$���I�t$x�")H��L��� ��A�D$xu�A��$h �e���I��$��#)H��L������D���A�D$p�����D$�r�I��$pM�D$8L��H�T$P�(���E�H��1�L��1��@����L��L������E��$h��A�� ������:)���L��茜�����x�
�����H���D$�I�D$P���A���Q��D$����D$���|$P�i������D$3�����v���M��I��H���1�L��1�L�l$PL��$�H��$��\���%��
��*�L����A�D$h���A��$�I��$�H�'�1������D$PA�\$h�*���x�
����H��I�D$P����x�
����H��I�D$P���I�$H���A��$h u?A�D$h�D$���I�$H�&�A��$h u+A�D$h�D$F�|�A�t$h��*�L�����A�t$h��*�L���ܚ�뼺
I;L$X�����x
����H���
I�D$P�����*�L��蛚��+��c+�L��脚����H��1�L��1��������3,�?L����J���U����E'�L���>������I;T$Xs�x
tcM�L$`L�������@L���b��A�
�D$6���E��$h���HDŽ$E��$h���E��$h���H��M�L$`L��I�D$P�s���@L�����A�
�D$6�M���x�
�q��H���D$+I�D$P����
�+�L���\��A�D$h�v�D��L���WO�����}�I��$�Ic�$�I��$��r��I�$H����3)� ��L��������L��H��$8�N��胖�1Ƀ�H��L��H��$8�{h����1�L��H�P��l��L�������l�I��$�L�\$P�
�9H�L$H��PXL�\$P��uH�L$�<_t	�������$�L�������L�\$H��L��I��H��H�������xjH�H�H;]Xs%H����;�
H��PX��u��<_tƃ�w�L�\$L��I��H��A��$�I��$�H��1�L)�M��H�������*���L���D$����I��H���-�A��$�I��$�H���1������A��$h������x�
�a��H���D$-I�D$P���1�������	�D$&������A��$�I��$�H����]��A��$�H���1�I��$��?��A�\$h���I�$H�*�A��$h ujA�D$h�D$F�H���	�D$*������A��$�I��$�H����ؿ�A��$�H�)�1�I��$�躿�A�\$h�x��A�t$h��)�L���i���z����B���v0A��$�I��$�H��1��n���D$NA�\$h�$��1������A�@���������A����M����I�$H���A��$h ��A�D$h�D$F�?�A�@��D$%���*�A��$�I��$�H���1��̾�A��$�H�%�1�I��$�设��D$%����3,�>L����E���D$>���A�t$h��*�L���;���U���I�v�L���Z���E��$h���A�t$h�<�L�����E��$h�W��L��L������E��$h����L��$P� �,L��L������&���I�v�L�����E��$h���L��L������E��$h���I�v�L�����E��$h�o��H�5 �L��1��N���VM��I��~���x�
�7���H���D$!I�D$P��H�
X���H�
3���I��$�1�1�����`(��A�t$h�\�L������.(�����I�D$`I�T$HH�H�HcEH�DH9�s��� t��	������H���������C�y��A�s����x�
����H��I�D$P�y��E��$h�e������P���I�v�L������E��$h�A��IcЁ�H��H��H	�H��o_��E��$h���E��$h�
��A�V�I�FL��H��$`A�N�H�މ�$dH�����$`H�
��H��$h1��5��H��L���z���_��H���H��Hc�H��H	�H��`��IcЁ�H��H��H	�H��ra��A�N�A�V�L��H��$`A�F�A�v�$dH�
���$`H�މ�$hH�O���$l1����H��L�������a��A�t$h�+�L��D�D$���D�D$���H�u �T$L���1�����H���Ǵ��H������L�Ѻ �lL�����E��$hH��$���A�t$h�1�L��菑�E��$h�E����-H�w�L���=��E��$h����,H�B�L�����E��$h�Ĭ��I�$H�%�A��$h ��A�D$h�D$F�|�H�����H�u �T$L���0���0�I��$ �D�x��DH��H���ȡ�H�U�€tH��H�UH�H���o}Hc�%�H��{H	‹EH��CH�E H�C �D$�C(H�E H���G��I��$�1�1�����T$L��H�hH��H����0��L��$P�0L��L�ѾD�s��H��H�X �D$�E(����L��$P� �,L��L���B��鶮��L��$P� �_L��L��L��$�L��$����H�����H�VL������H���(���H�VL������H��頱��A�t$h��'�L���y���V����SH�l$P��D��H��$��6A��$hu7I�|$@w/I�AI�D$PA���
�M9��4��
t$M�L$PM;L$Xr��L���kB����u1M�L$P�H�l$PH�5$�L��������۸IÉD$�$�A�؉�H�l$PA��u˹I�T$PH��$�ID$HH)�Hc�H)¸����H�T$PH9�����"�eL�牌$��X��I�D$X��(I�D$P���H��$�A��$�ADŽ$���$��H�x�|$P�PI�T$8�x�|$I�D$�H @�x!H�PI�D$PI�D$`��$�A��$�������H�l$P�#���A�؉�H�l$PI;D$XsA�y
t1A��
���������H�5�L�牌$������$�����I��M�L$PA��
���������L���C���D$ H��$�A��DŽ$�����
���L����B���D$ H��$�A��DŽ$�����A�
I;T$Xs�x
tDŽ$��D$����H��A�
I�D$P�׾L���8@�����H��A��뼀x�
����H��I�D$P����M��I��L�l$PL��$�A�t$hH��$���%�������A��$h ��A�D$h�L���A����=t^��~tL��>t:��t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$=���D$G�y��D$��l��L���A����=t6��t$A��$h�I�D$PH�P�I�T$PI;T$Hv�x�
t�D$��$��D$����x�
u�H���D$�I�D$P���?*��L���|�������x�
�J���H���D$=I�D$P���H�
�$L��L��1�H�V����L��L����E��$h�#��A��H�l$PI;D$X�k��A�y
�`��I��M�L$P�R���x�
�z��H��I�D$P�l��I��$pM�D$8H��$`L���������A�t$h�"�L��覊��
���L$�S�#����L$�T�����$�N��A��DD$H�l$PD�D$�����6H���L������L��IcF؁�H��H	�H��L��A�t$h�E�L�����E��$h��C��L�Ѻ �lL���D��L�T$H����H��fo�$`E��$h3fo�$p{���L��L�����E��$h���L��L�����E��$h���L��L����E��$h�u����u	E�������D$-�����+�L��D��$�D�L$PD�D$�3��D�L$PD�D$D��$��H��I;T$Xs�x
t4A�t$hA�
�ƀ����A��$h �t�A�D$h��A�t$hH��A�
I�D$P�ƀ�����
����A��$h ulA�D$hA�T$pI�$�D$Q�A�D$lA�D$p����I�$H�-�A��$h uVA�D$h�D$F����x�
����H��I�D$P����+�L���!��뀀x�
�l��H��I�D$P�^���+�L����떹OH��L��诖��k��H�
�L��L��1�H����/���L��L���t���E��$h���A��$�I��$�H�p�1�舲���g��I��$�H�<�1�A��$�I��$��]��E1��"��I�/H�[ H��tH��A�L��L���@��H��L��$P�X�
L��L���`���Ao~�E��$hH�h x8fo�$�H�X(H�@0xHH��$����I�/H�[ H��tH��A�L��L�����H��L��$P�X�	L��L�������Ao~�E��$hH�h x8fo=��H�X(H�@0xHH��$�R��H����_��E��$h�<����H��L����E��$h������H�C�L���֔�E��$h���I��$pM�D$8L��L��� ���~���I�v�L������w��E��$h���E��$h���H�H0H�H ��z��E��$h����x�
�o���H���D$<I�D$P����D�؃���$�A��@���|$P�tiL��D��$�L�T$���L�T$D��$�����H�HH9�v
�x:�	����L���:���A��$h uZA�D$h�D$_�Y��I�z�T$PtVL�牔$�D��$�L�T$肶��L�T$D��$���$��c���鵴��A�t$h�"�L��芄�덃�$��&���A�J���H�PH��L�����AV��I��$�1�1��x�L��$P�(L��H�hL�Ѿ?H����n��H�X �U��H���Y��E��$h�����*� L�������H�H0H�H �l��E��$h����H�4�1�L��1��*����[m��E��$h���E��$h���I��qL��I�G��rl��I;T$Xs�x
t4A�t$hA�
�ƀ�����A��$h �f�A�D$h��A�t$hH��A�
I�D$P�ƀ�Q����
�"��A�t$h��*�L��D�D$��D�D$���I�$H�+�A��$h uA�D$h�D$F�2����*�L��谂��ځ�u	E��������D$+�����*�L��D��$�D�D$PD�L$�l��D�D$PD�L$D��$�����x�
����H��I�D$P�����x�
����H��I�D$P����H�@0��f��H�P0H����f���f���x�
��H��I�D$P���x�
����H��I�D$P�����D$��7��I;T$X�w�A�y
�l�I��M�L$P�^�A�t$h��+�L��茁������+�L���u��E��$h���A��$h����A��I�\$PD�T$�
I��$��{�H��PXD�T$�����C�<_������A���1�����A�
I;T$X�����x
����H��A�
I�D$P�����
I;D$X���A�y
����I���
M�L$P�����L���3����uGE��$hM�L$P���A�t$h��'�L���j������z�
�����H��I�T$P���A��$h��������I�L$PI��$��
�y�H�L$H��PX��uNH�L$�A�<_tA��w<���*���A��$h�O���A�t$h���L�����E��$h�����L���\�����������L���3�����2���E��$h�g����x�
�����H��I�D$P����$L��D�T$豮���_L��褮��D�T$���A�
I;T$X�����x
����H��A�
I�D$P����x�
�
��H��I�D$P���A��$h ��%��A�t$h���L����~��|%��E��$h����I��M9��8����k���A�� �t.�)���L��L�L$�~�A��$�L�L$I��$�A�D$hHc�H��I�$L�L$�F��L�L$H�A�A�D$�����)��L��L�L$�:~�L�L$���ù���+)�L��L�L$�~�L�L$���A�@���vSA��$��/H���1�I��$����(��x��D$UH�@�@/I�D$�!��E1�A��e�I�$H�/�A��$h ubA�D$h�D$F�����(��x�H�@�@'I�D$���(���w�H�@�@"I�D$���A�t$h��+�L���}��A�t$h��*�L���|�����x�
����H���D$�I�D$P�A��A�y�
�Ķ��I��L�MP鷶���x�
�9���H��H�EP�,���L��L�����E��$h���L��L����E��$h�p��I�L$PI��$��
D��$��y�H��$�H��PX��u!H��$��A�<_t��D��$������L$I�D$PL��H�p��I������x����L��H�ID$P�1����t/A��$htKA��$h�I�D$PH�P�I�T$PI;T$Hv�x�
t�S1�����x�
u�H���S1�I�D$P���I�L$PI��$��
�y�H��$�H��PX���I���H��$��A�<_�5������,����g����
I;L$X���x
���H���
I�D$P��I�z�
�&���髯��A�y�
���I��M�L$P��I�QH9����A�y>�y��Y��A�� uz�|$P���À�5�����&����D$P
I;T$X�	��x
���H���D$P
I�D$P���L��$P�(�FL��L�����H�h H���#���1�H�5H�L���h��|$P�$E��$hA�\$h��E��$h������	�D$����e��A��$�I��$�H�^�1����A��$�H���1�I��$�����D$����A�t$h��)�L���y��x���I�QH9�vA�y:���A��$h ��A�D$hM;L$XsA��$hutI�|$@wlI�AI�D$PA�9
tDI��$�Ic�$�I��$��m��I�$�D$9H��y��E��$hA�\$h�&���I;D$Xs�A�y
u�I��M�L$P룾L���0,����u�M�L$P�y�����(���L���x�M�L$P�<���I��$pM�D$8L��L���̯��+��I��$pM�D$8L��L��误��
*��I����H��L���w���H����
��H�����I�G�������H�g�L����E��$h����A�� �VI��$�H��I��$�A�� �I��$�H�I��$�A�� ������H���L��蔆�E��$h���A�t$h�@��L���w�����>H���L���Y��E��$h���M�D$8I��$pL��L��裮�E��$h�U���E��$h�G���E��$h�9���E��$h�+����=H�f�L�����E��$h���L�Ѻ �lL���D���E��$hH��$������H��L��蚅�E��$h������H���L���x��E��$h���I��$pM�D$8L��L���­��(���B(�q����B(�e���A�t$h�p�L���Nv��'��L��$PI�V�1�L��L�����E��$hH��$����L��$PI�w�I�V�L��L������E��$hH��$���H���^��I�G��G��A�t$h���L���u����A�t$h���L���u��,��H���l��I�G���������L���u�E��$h���L�Ѻ �lL��譽��E��$hH��$�G���L�Ѻ �lL��肽��E��$hH��$����A�t$h���L���u����I�$H���A��$h ��A�D$h�D$F�?���x�
�����H���D$�I�D$P���A�
I;T$X���x
���H��A�
I�D$P���H���"��H������I�G����H������L������E��$h�I���H�H������u�\�H�B H��tH��H�H������t�H��I��$��յ��I�I��$XH���F���U��I��$X�H��H��H�B0H��u�H�R H��u��I�G��h'��M��I��L�l$PL��L��$�H��$��7)����.��A��$HufA�D$h�t
��$�uP�0uLA�|$lu.I�T$PI�L$XH9�vWH���B���
tJ��#tE�� t��	��v܃������D$����A��$h u2A�D$h�D$��k��A��$�I��$�H�\�1��ݝ��A�t$h�&+�L����r�뵃�t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��������D$����M�D$8I��$pL��L��觩�E��$h�Y���E��$h�K���I��$pM�D$8L��L���s���%��A�t$h�|*�L���r��1����
H;EXsA�y
��H�EPH�MH��h�H�p�H�uPH9�v
�x�
�ͺ��M��I��L�l$PL��$�I�$H��$�H�.�A��$h tA�t$h�@+�L���q�A�D$h�D$.�����x�
����H��I�D$P����I���
L�MP�Q���H;EX�����A�y
�����M��I��I��L�l$PL��$�H��$�M�L$P锲��A�t$h�E)�L���p���D��L�l$PM��L��$�I��H��$�������)�DL���;;��I�D$XI�D$P�r���L��$�I�GL��L��L��$�L��$�H��$�L)�H��tH��L��H�|$��H��H��$�H����H��H��H��$����H��$�H��$�H�8H��$�H�xH��$� tH�xH��uWH�D$H��$�H��$�H�x`H�9H�hPH�QI�GH��$��� tH�QI�7H�|$��M�����I���_�H��L���.���H�D$H��L��H�����H��$��x���M��t=I�}L��L��H��$�L��$����L��$�H��$�I�E ����M�U���H�D$L��L��L��$�H����~��H��$�L��$�I���M��L�`I����@L��<"u0���L��H��L�B�H�HM�����@<"��<\u�H��H�A��E��$h���)����$�H��L��$�t*H���<;t�� t��	���צ��H��I��u��Ȧ��M���ʣ��J�\5H��H�s���� t��	�������I��I)�H��H9�u�陣��I�D$XI�D$P�ٯ���m���H�Y��$�L�r�H��t�M���f����S���L���B���I��$pM�D$8H��$`L������k�����*�L���m����I�$H���A��$h u.A�D$h�D$F����A�t$h��*�L���em�鍿��A�t$h��*�L���Im���D$>����x�
����H��I�D$P����x�
�����H��I�D$P�v�����u��$�����D$��W��I�$H���A��$h uJA�D$h�D$F�*��M��L�l$PI��L��$�H��$��`����z�
����H��I�T$P����A�t$h�k*�L���kl��I�$A�� H�^�uhA�D$h�D$F����
I;T$X����x
���H���
I�D$P���x�
��H���D$^I�D$P�d��A�����A�t$h��+�L����k��|���I�\$PD�T$�
I��$��{�H��PXD�T$������C�<_��������鉼���x�
�����H��I�D$P���L��$P�0�:L��L��袳��H��H�X H�h(���H�S H���~����f���H�)�1�L��1�荠��鮼���x�
���H���D$|I�D$P�h�����u	E���-���D$%�J�����'��L��D�D$PD��$�D�T$�j�D�D$PD�T$D��$��o��I�$A�� H�|��pA�D$h�D$F����x�
�߼��H��I�D$P�Ѽ��H����*��H���+��H�H0H�Q(��*��H�r0H�H������+��*��H�v H�H������-��*��H�V H����*���v*��L��$P� �,L��L���2�����/��E��$h�ϳ��E��$h���E��$h鳳��H���!��L��L��H�
��1�H�������L��L���E���h��H���!��A�t$h�-��L���ai�E��$h�,��E��$h�E���E��$h�7���HDŽ$E��$h����I��$�Ic�$�I��$��P��I�$�D$5H��\���A�t$h�y(�L����h��-�A�t$h����L���h�E��$h�N����F~�H��$�H�������L��$P�8�9L��L��L��$�述��H�X(H��$�H�h H�@0H��H��$�L��$`蟟�H�{L��$�H��$`H��$hH�5l��H�%Y��HDŽ$pL��$xH��$����H��$pH��$�H��tH�@0H�A0�����D$>����D$}鳥��M�L$`�D$]�(�D�D$P�Gb�\$D�D$P�D$S�@�XD�@I�D$�޽��M�L$`�D$)��D$
I;T$X�����x
����H���D$
I�D$P�����D$����E��$h���A�t$h��*�L���f��t����p���������A��$�I��$�H��1����D$OA�\$h�����	�D$�������A��$�I��$�H�ּ1�����A�\$h��$�����0�� ��/����{���I�$H���A��$h unA�D$h�D$F駼����(��`�|$�D$X�@
@�x�XI�D$�u����D$]��[���鐱��H�5b�L���������A�t$h��)�L����e��v�����(�``�|$�D$T�@�x�XI�D$�����(�.`�|$�D$W�@@�x�XI�D$�˻����(�_�|$�@�x�XI�D$��A��$h uDA�D$h�D$R鄻����(�_�|$�D$U�@�x�XI�D$�R���A�t$h��'��L����d�룿�(�j_�|$�D$S�@�x�XI�D$������(�8_�|$�D$Y�@@�x�XI�D$�պ����(�_�|$�D$V�@
@�x�XI�D$飺��A�����H�H0H�H �X��A�t$h�Z
�L���d��MX��I�v�L�������<O��A�t$h�V
��L����c�E��$h��X��E��$h龭��H��L���cR����uME��$h顭��L��L������E��$h鈭��H�xH��F��H�xP��F��H�xX��F���F��H��L���S��H��$`H��L��HDŽ$`�x����3E��$h�"���H��$E��$h����E��$h����BH���l�fo�$PsH�Hc�$P%�H��H	�H��J����AH���xl�fo�$P{��I��$�1�1�����L��$P�(L��H�XL�ѾAH���辪��H��H�h ���I�?�
j�H���1�L��H��1�贗���|��L�Ѻ �lL���z���H����|��A�t$h�!�L���b�E��$h�S~��H��$`H��� H�(?E��$h�٫��H�P0H����e���e���
I;L$X����x
���H���
I�D$P����z�
�)���H��I�T$P����E��$h�t���H�@0�Se���x�
����H��I�D$P�����H�x�L���p��c��H�@0�c��H�P0H����c���c��E��$h�	���HDŽ$E��$h���E��$h���E��$h�Ӫ��E��$h�Ū��HDŽ$E��$h髪��A�t$h�G�L���`���d��E��$h遪��H��L��薑��H���F}��H��$E��$h�X���H��8�+L��L��$�苨��H��8L��L��$�H�@(�H�@0L�H H��$��R���L��$�H��L��H�@(H��$�H��L�@ H�@0�P���H�C0�Z0��H��(�
L������H��$�I�w�L��H��H�H H������H�C0�0��E��$h�}���H���|��L�Ѻ �lL��谧��E��$hH��$�J���I�w�H�����ؙ��E��$h�*���H�H0H�Q(��k��L��$P� �,L��L���P����q��L��$P� �,L��L���.����0q��H�H0H�Q(�#w��E��$h龨��I�v�L������E��$h館��H�H0H�Q(�^o��H�S0H�B(�jl��I�w�H��t!����E��$h�n���E��$h�`���E��$h�R���f���AWAVI��AUATU1�SH��(L��`M����I��xH��tI�� H�BI�FPI;FX��A��h��I�~@��H�PI�VP���
�WM����A��i���#�����uH�BI9FXv	�:���H�B�A��h�I�FPI9FH��I�F8H�@I���H��kOf�8��L��胡��H��kO��f�:��IdžxI�~��I�FI�FXI�FHI�FP����I��pH���A��i�I��XH����I���L�c(H�D$A��i������I��PM��tH���iL��L�����H��I�� H�s(�4�A��h�B�����	ȉ�	�@�jA��jtH�H�L$H�HIdž�A���H�Z�BH��(�[]A\A]A^A_�f.�A��i����I��pH�������H�WO1�1�H��J�A��i���H���ɠ�H��(1�[]A\A]A^A_�I�VPH�B�I9VX�����:!����A��h@����z�
�����z�
����H��I�VP���H����A���H����H�=�@���1�@������1�L��������M��`I�FP�3���fD� H�
<��_L���O���I�� H�����H�
�o�(�2L���'���H�
�o�8L��H�@ 7�+I������L�
TOPI��L�h H�@(H�@0M��u,L�-'zf��L���Sv�I��H�OPH��t�H�
mo�0�&L��L�$藢��L�$L�x(L�H M����L��H��L���t���I��A��i��S�����I��DL�=�NPM��u(L�-ozD�L���u�I��H�qNPH��t�H�
�n�(�2L�������8�+L��L�x H�
�nI�����A��iH�D$L�h H�@(H�@0��@���� �0H�
in�0�&L��藡���	�XL��I��H�@ �H�D$H�
3nI�G(�j���foB�I��PL�`(I��L�x H�@0@8@H�9����3^�H�����A��i�ƒ�	�A��i��#�������I�VPH�B�����fD��J���f.������f.�I;VXs�x
uH��I�FP@M���I�VPA��i�H�B����f.�L�������H�=�r��Z�H�(mL��H�����H�
m� L���`I���A���H�
�l�8L���+I���%���L��L��L�x H��H�@(H�@0�#���H�
�l�0L���-I�����H�t$L��L�x H��H�@(���H�D$�����L�LPM��u(L�=s�D�L���+s�I��H��KPH��t�L�-�KPM��u4L�=B�f��L��L�$��r�L�$H��I��H��KPt�H�
l�(�2L��L�$�/���L�$�8L��H�
�k�+I��L�P ����L�<KPH�$L�x H�@(H�@0M��u#L�=.;�L���cr�I��H�KPH��t�H�
}k�(�2L��L�T$覞��H�
_k�8L��H�@ 7�$I��肞��L�T$�0L��I��L�x �H�
"kL�P(H�$L�$I�C0�M���L�$L�h L�X(M��tlL��H��L���.���A��iI���e���fD�z������YS�I�NPI��xI���H�QI�VPtI�N8H�AI�VHI�V`�����A��iI������A��i�Z���I��PI������Z�H�����A��i�ƒ�	�A��i�u���I�VP�g���I��`tA��i������KZ�H�����A��i�ƒ�	�A��i�\��������ŝ���t(�r�H���J ��Bщ�H1�Hi“���u��@����1�H9������H��H��H��H��H	�H1��f�H�GH�GH�G(H�G H��t'�H�
��1�H��H��H�TH���F�fD�����g����OI�����I���OH�I��L��H!��!��H��v(H��H�T0H��L!���t�t��t H��H��w��D�G��f.����ff.�AWI��AVI��AUI�����ATI��USL��H��(�OL�G0H�H��H��H!�A�v�5�,H��vHH�DmI�D��L98tGI��J�D#H��L��H��H��H!Å�tʃ�������H�,�H��w�H��u�H������EH�pL�D$H9�t7A�NI�FH��H�T$�L$�H�T$�L$��L�D$uJA;NH�����HE�H��(H��[]A\A]A^A_�f��,_�;�����,��,����A;NuI�~A�NA�v� ���H������ff.�AWAVI��AUI��ATI�����UH��SL��H���OL�0H�H��H��H!�A�u�4�H��vCH�@I�D��L90tHH��H�DH��L��H��H��H!Å�t˃�tv���}H��H��w�H��u�H������>DH�pH9�t0A�MI�EH��H�$�L$�H�$�L$��uFA;MH�����HE�H��H��[]A\A]A^A_�D�_�K�������<����A;MuI�}A�MA�u�/���H������ff.�AUATUSH��H�F(H�V L�o0H�_�oH�N0H9���H�TRH�@I��E1�L��L�$��@�I�CI��I�AM9�tsI��I�y�A	t�K�RI�Q�I�D�H9�t�AoA�I�Q�H�PH��t�I�q�L���Q���I�R��t���t��t/H���f�f�C�f.�H��[]A\A]�D���c����AWI��I��AVAUI�����ATM��M��USL��H��(L�W0�GH�L$�OH��H��H!�H�w�;@�,H��tMH��tqH�|mI�|��L9trI��I�|H�<�L��H��H��H!���tŃ�������H�,�H��u�H�����I�GI9�tl����B�.L���Z�I���LD��fDH�wL�L$L�$H9�t1I�GH��E�wH�T$�H�T$L�$I�������L�L$u;E9wuUH�D$H�H��(H��[]A\A]A^A_��,^������,����E9wuI�wA�OA�G����H�����몃�t��tJ��L���1�L��fB�n�|���B��L���l����AWAVI��AUI��ATUH��SH��(H�GH�>�PI��H����LD�H�}I�U��L��H������H���t�H����
�MH�U���}H���H��L�$[I��H�U0I�I�D$I�EM��tI�D$I�I�$�����H�mH;] ��H��([]A\A]A^A_��L�M(H�] L�E0I9���L�$[I����H��I��I9�tkO;< u�K�t L�L$L�$H9�t8�EH��H�T$�D$H�E�H�T$L�$��L�L$�D$��;E���H�������H�������fD1�M���F���I�H��([]A\A]A^A_��H�M(H��H9�s/H�[H��H�<�u H�D�DH��H�x�u	H��H9�w�H�] H��(�[]A\A]A^A_�@��tC��t^H��H�H�H�Y�L�$[I���o����;E��������f.�H�B��f�H��L�$[I���0���H����H��L�$[I��������H�G����SH���c����C[�ff.�f���SH��H��[�H�{0�[�H��[�Z�ff.�f���USH��H��H����H�Ҹ@H��?)Ѓ�>�����H�wC�Hc�@�/H��H���H��H��Jf�O��vOH�zH����K���H�CH��H��t�K�H�C0H��tQH������CH��H��[]�����H��H�C�@�H�wf��G�`�ېH��H�D$�sC�H�D$�@1��@H��H�D$��Y�H�D$�ff.����ATI��UH���8S�J�H��H��tL��H��H���BC�H��t
H��[]A\�DH��1��Y���@��1����D��H�=�O�~���H�=�N�~���H�=�N��}���H��H�=RO靎�ff.�f���H��H�=¬N�}��ff.�f���H��H�=��N�]��ff.�f�U�SH��H��H�W�H�4H��H9�w_H�<�H9�vRH�{H�CH��tH��H���1�H�TH���;�H��H������H�CH�C �CH�C(H��[]�H��v�H�{H��轍�H��H��H�������EH�{��E�C�E�C�"X�H�EH�{0H�C�X�H�E0H��H�C0�X��ff.�@��H���8tHc�H��H��H�DH��8�H��H��fD��AWAVI��AUI��ATI��USH��H�GH���PI��H����LD�I�}tTL��L��L���v�H���t�H�����H�X��M��tI�M0H�[H��H�RI�$H��[]A\A]A^A_�DI�U(I�] I�E0H9�vjH�4[H�,��DH��H��H9�tNL;}u�H�uH�$I9�t'A�EL���D$I�E�H�$���D$u3A9E�>���H����4���H����S���H��1�[]A\A]A^A_�@A;Et��
���D��AWAVI��AUI��ATI��USH��H�GH���PI��H����LD�I�}tTL��L��L���F�H���t�H�����H�X��M��tI�M0H�[H��H�RI�$H��[]A\A]A^A_�DI�U(I�] I�E0H9�vjH�4[H�,��DH��H��H9�tNL;}u�H�uH�$I9�t'A�EL���D$I�E�H�$���D$u3A9E�>���H����4���H����S���H��1�[]A\A]A^A_�@A;Et��
���D��AWAVAUI��ATI��USH��H��8dH�%(H�D$(1�H�GH��L�t$ �PI��H����LD���H��H9C(�QH�{��L��L��L��H���e���H���t�H�h�H�S0H���t9H�DmL�l��H�|$(dH3<%(�qH��8[]A\A]A^A_��H�K(H�AH�C(H�IH��H�T$ L�8L�`L�h1�H���t��CH��H�s������H�K(H�k H�S0H9���H�DmH���H��H��H9���L;:u�H�rH�L$H�T$I9�t+�CL��D$H�C�H�T$H�L$���D$uE9C����H��������H�S0H�����H�CH�K(H�l$ �����H��������9C�g����|���f���tC��t.H��1����H�S0H�K(H�CH�D$ ��������D��1����fDf�V1��{����r����U�H��SH��H��H����L�O(HD�H��I9�tgH�K0I�AL�SH�C(K�IH��H�(H�pH�PH�CM��tH��H���G��SI����uE�H��[]Ã�t;��tFM��H��[]�H�T$H�4$���L�K(H�T$H�4$�y����fE�B�f�E���f.���ATI��UH��SH��H��H�GH���P��L�K(H���HDºH��I9�tpI�QK�IL�SH�S(H�S0H��H�L�aH�iH�CM��tH��H���X��SI����uE�H��[]A\����t3��t>M��H��[]A\ÐH��H�D$���L�K(H�D$�u���DfE�B�f�E���f.���AWAVI��AUATI��UH��SH��H��8dH�%(H�D$(1�H�GH��L�l$ �PI��H����LD���H��H9C(�fH�{tgL��H��L��H���f�H���t�H�P�H�����H�RH�S0H��L�`�H�|$(dH3<%(��H��8[]A\A]A^A_�f.�L�K(H�S H�C0I9��#H�RH����H��H��I9��L;9u�H�qL�L$H�$H9�t8�CH�T$H��D$H�C�H�T$H�$��L�L$�D$��9C�����H�����H����*���H�CH�T$ f�H��A��H�S(H�JH�4RH�K(H�K0H��H�A1�L�9L�aH�L$ H���������CH��H�s��u6����fDH��������9C�����g���f.���t;��t&H��1����H�CH�D$ �����U���D��1��y���fDf�N1��h����pn���AUATUH��SH��H���o�oNO�oV H�~W H�F0H�G0���H���H��H�|H����?�H�EH�����A�L��H����?�H�E0H����D�+D��I��M��ugH�sH��tI��H���J�T(H��uH��H��[]A\A]�f.�H�}�G��H��H��[]A\A]�f�H�G�l���H�s0L��H�������H��1�[H��]A\A]����UH���8SH���	?�H��H��tH��H���6O�H��tH��H��[]��H��1��7���@�������������AWAVAUATUSH��(L�G(H�_ L�w0I9�v7H�[H��I�I�DH�)H���t�A�H��H��H�h�H���u/H��I9�u�1�H��tH�H��([]A\A]A^A_�f�L�yH��tH�AH�L�>I��I�}��L��H��L���!�H�����A�MI�U�������x����H��H�H�M�e H�RM�t��f�I������I�mI9��N���I�U(I��I�M0I9�s1K�dH��H�<�u"H�D��H��H�x�u	I��L9�w�M�e H��(�[]A\A]A^A_�@H���M�e H�@M�t���m���DM�E(M�e M9���K�dI�L��@I��H��M9���K�dH��H;i�u�H�1L�D$H�$I9�t4E�MI�EH�T$L��D�L$�D�L$H�$��L�D$u#E;MH�T$u"I���tM�e I�����fDE9M�v���M�u0�K���H�BM�e �H�RM�t�кf����H��M�e ��H�RM�t���v���M�e H�����H��������ff.���AWAVAUI��ATUSH��H��HH�t$(H�L$dH�%(H�D$81�H�GH��H�D$0�PI��H����LD�H�{L�s0H�T$(��L��H����I��H���t�H�����CH�S���)B�,:H��H�t$0H�|$(�H�DmH�T$M�4�M�fI�FL�d$(H�D$0A�Յ������A�H�L$8dH3%(D���H��H[]A\A]A^A_ÐL�K(H�k I9�v~H�DmM�<���H��I��I9�t^M��M;'u�I�wL�L$H9�t4�CH��H�T$�D$$H�C�H�T$L�L$���D$$��9C����H�������H�����H�t$0H�|$(1�H�T$A��A�Ņ�tzE1��+���f���t[����J�,�����f�H�D$(L9�tI�FH�D$0A�I�F���fD;C�����?���f.�B�,z�r���fD��L�K(H�l$0L�t$(H��I9��~H�S0I�AL�SH�C(K�IH��L� L�pH�hH�CM���f���L��H������SI�����"���P���^M���0�����CH�S����������J��fDI�����A�H�kH9k ����H�S(H��H�K0H9�s/H�DmH��H�<�uH�D�@H��H�x�u	H��H9�w�H�k A����DB�,��3����B�:�v���fDM�gI�GH�t$0H�|$(�H�T$L�d$(H�D$0A�Յ��/������6����$����E�E1�����@H����L�K(�q�����fB�z���fE�B���B�����E�������f�@��AWAVAUATUSH��xL�g0L�o H�t$H�T$ H�$dH�%(H�D$h1�H�A��L;o(��H�D$`E��I��H�D$(H�D$XH�D$0K�DmI��H�+H���t~A�GH�{1�H�sH�$�D$H�D$H�|$X�Љ���u=L�T$ M��t3H�C�H�$H�t$(H�|$0H�D$`A�҉�H�D$XH�CH�D$`H�C�D$A;GuP��t#����I�_(I��I9��_���f�1�H�|$hdH3<%(�#H��x[]A\A]A^A_��L$I�G0M�gH�\$XH�D$M���H��H��L���K�H���t�1�L��H����L$L�d$��L�h����\E1�K�DmH��A��I���D���@L�SM��D��I��M��M�օ��5M�g(I�_ I�G0I9��`H�4[L�D$H�l�L��L�L$8M��L$@M��I���H��H��I9���L�[I��L;e�u�H�uI9���A�GL�\$HL��D$I�G����M��L$@M��D$L�\$HL�D$L�L$8A9G�J���H����@���H��M��M��A��I�_(H����e���K�����I�oI;W �N���H��I�G0H9�v3H�4RH�<�H�<�u H�D8�DH��H�x�u	H��H9�w�I�W ����L��L��M��M��A��H��H��L�����H���t�H�������A�OI�W���J�������xH��H�8H�I�_(H�W�L�RI���*���DI�W(M�o L9��gH�|$K�DmL�d$@I��L�4���I��I��M9��7I;.u�I�vH9�tQE�OI�GH��D�L$8�D�L$8��ufL�d$@E9O�S���I����I���1�I���L��L$L�d$���w���L�d$@��f�M��L�D$M��L$@L�L$8�8����E;O�V��������D$A9G�����M��L�D$M��L$@L�L$8�D���f�H���I�_(H��L�RI�����f�L�l$L�d$8D�t$@I�_(�B����H��I�_(��H��L�RI�������H�$1�1�H�D$�и����f.�H�B�I�_(�f�H��L�RI���a���@L��M��M��A������`�f���AW1�AVAUATUSH��HH�H�o ��H�t$�D$ H�G0H�T$H�D$H;o(sdH��H�L$H�DmL�$�M�4$I���t<M�|$D�kI�t$H�T$L��H�D$��A��D;ku:A����A��tA��t
L�{(H��I9�w�H��H1�[]A\A]A^A_�fDM��H�C0L�{H�D$M���L��L��H��D�D$ �|��D�D$ H���t�H�h�H�|$M��H�DmL�$�1�M�����D$ A���n���M�L$H��L���t$ ����L�s(L�c H�C0M9��mK�dH�L$8H��L��L�l�M����I��I��L9���O�<dI��I;m�u�I�uI9���QH�AH�L$(L���T$4�H�L$(�T$4���H��M��H�L$89S�_���I����U���L��H��L�{(I��������H�D$H�����H�kL;c �����I��H�S0M9�s7K�dH�<�H��u$H�D
�f�H��H�x�u	I��M9�r�L�c �K���H�K(H�k H9��?H�|$H�DmL�|$8M��D�D$4I��H��L�,��@H��I��H9��M;uu�I�uI9���E�HI�@L�D$ L��D�L$(�L�D$ D�L$(����L��M��L��L�|$8D�D$4D9K����H��������I��M�����f�I��M��H��L��L��H�����H���t�H����]����KH�S����H�D� �L�{(I��K�dH���z���fDM��L��L��L�|$8D�D$4�j����H��M��H�L$8�&���E9H����L��M��D�D$4����fD9Q�����H��M��H�L$8�L������tl����H��H�8H�L�{(L�g�K�dH������H�D$L��L�L$8H�����D�D$4L�`�����fDH�l$8H��L�y(�G���H�B�L�{(D� f�I��K�dH���j���H��L�{(D� �I��K�dH���D���M��L�`�H������Q���H��M������f���AW1�AVAUATUH��SH��8H�L�o0��H�4$H�_ H�T$M��D$H;_(scH�[M�$�M�<$I���t>D�MM�l$1�I�t$H�T$D�L$L��H�$��D�L$��D;Mu9��t����L�m(H��L9�r�fD1�H��8[]A\A]A^A_��M��L�mL�u0M����L��L��H��L$�����L$H���t�1�H���H�X�M���…���1�M�����D$H�[M�$��f����M�L$L��I��M���t$����H�](L�e H�E0L9��K�dL�D$(I��L��L�l�H�L$ �fDI��I��L9��WO�<dI��M;u�u�I�uH9���A�PI�@L�D$H��T$�L�D$�T$����I��L��H�L$ L�D$(9U�R���I����H���I��L��L��L�m(I��������I�����H�mL;e �}���I��H�E0M9�s3K�dH�<�H��u H�D�DH��H�x�u	I��M9�r�L�e �4���L�E(H�] I9�w�~fDH��I9��kH�[H��M;<�u�I�tL�D$I9�t2�UH�E�L$L��T$��T$�L$��L�D$��9U���H�������1�H���M��������DM��L��I��M��L��L��H������H���t�H����k����MH�U��urH�D� �L�m(I��K�dH������I��H�L$ L��L�D$(�o���9U������=���f�A9P���I��H�L$ L��L�D$(������ti����H��H�8H�L�m(L�g�K�dH���(���L�t$ H�\$(L��M�h(���f��H�T$1�1�H�$�и���H�B�L�m(D� f�I��K�dH������H��L�m(D� �I��K�dH�����I��I��L���&���D��L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���H��H��vKI��SB�{ÇH�F�H��E'C��LH��L�L�f�H�H��I��H��H1�H��H��H��L9�u�H���H��wJL��Ic�L�>��1��GH��(H	��OH�� H	ȋH	�H��H��E'C��LH1�H��H)�H��H��H1�H��H��H1�H����mGX�H��H��H��H1�H��1�IДH��H��H��H1���1��H	��fD1��OH��H	���1��q���f�1��V���f��GH����fD�GH��0H���"�����SH���6�H�ߺŝ�[H����f���H����H��SB�{ÇH��H��H1�H��E'C��LH��H���ff.�@��H�H��H��SB�{ÇH��H��H1�H��E'C��LH��H���ff.���H��H��H1�H����mGX�H��H��H��H1�H��1�IДH��H��H��H1�Ð��H������1�f.�����t<��t8D�J�D�B A��D�I�AB�A��D�A AB�H��8�t������D��D���u�1��������D���\����H��tg�D���tdE��t_1��H��H9�tG�D���tBE��t=D�Q�D�I A��E�P�AB�E�H A��EB�D8�t������D��D1��D���u�1�E�������@��H�G0�HH9G�(HD��D��H�G �@ H��>H��?�������0�fD��H������1��f���SH��H��dH�%(H�D$1��.��H�{�.��H�{�.��H�{�.��H�C H��H�$�.��H�$H9C tH�C H�D$dH3%(uH��[��Q�ff.����gb��UH���NH���HSH���6>�H�X �@uH�X H�S8�CH�SH�C8�ffH�C(H�C0H�C@$H�kH��t@��t�K H��[]��H��H��H�D$��=�K H�D$H��[]��SH���NH��(H���=�H�P �B�J H�H��t��tH��[�DH��H��H�D$�p=�H�D$H��[�D�W��w1���u
H�G�D��H�H�x �����H�G �xt
H�s
�@�$�f�H�@ ��f.���H��H�5q�N�<�H�H���@��H��H�5Q�N��H�@H���SH�� dH�%(H�D$1�H��tFH���O�H��H�$H�CHc@XH�DH�D$�kR�H�T$dH3%(uH�� [�D����dO�@��H��(H�W dH�%(H�D$1�H�B H�H��t�tD�� uPH�@ H�H�$HcB(H��H�DH�D$��Q�H�L$dH3%(u H��(�@H�΃�H��t��� t�H�����N�@��H��H�51�N��H�@ H�@H�x H���w\����H��H�5�N���H�@ H�xH���K\�ff.�AVI���(AUI��H�ʂNATUSH��H���+;�H��L�` �@uL�` M�4$M��t
A����I�\$H��t
��txI�\$�
�I�D$�0����H��L���L�h H������
�1���I�D$ H��t�t[H��]A\A]A^��H��H���:�[H��]A\A]A^ÐH��H���:�I�\$H��H���u:��y���L��H���e:��I�����H��H�aOI��1�L��;1ɾ!H�8�F�H�P �J H���f���ATH�5��NUS�\�H���N�(I��H�OH�8��9�H��H�X �@uH�X H�$H�C$I�t$H�sH��t@��tjI�|$ H�w H�sH��t@��t:蝟H�C H��t�tH��[]A\��H��H���u9�H��[]A\�DH���`9�I�|$ �f�H���H9��fD��SH����H��[H��������SH����H�ߺ[H���B��f���SH�5t�N�?�H�8H���dL�H�s H���8�H���b�H��xH��������?[H!�H�D��H��[H	�H�D�ff.����H�5U���Y���H�5M��Y�AWI��AVAUI��ATUSH��L�7M�~I����umH�̓��I�~H�wD���E��t3H���L;*tL�1���H�EL9l�t5H�Ń�A9�u�L��L�D$��L�D$H��I��u�I�1��$1�H9��t'I�VA�F M�0�D�D)�H��H��[]A\A]A^A_�f��F@t�;^,u΀�u�L�D$M�o�fH�=OffH�2�L��H�8�,�I�VL�D$H��H�*t�uH��L��L�D$�F7�I�VL�D$I��n���1��y���f.���H��8dH�%(H�D$(1���~pH�H�$��tPH�FH�D$��teH�N�H�L$9�uDH�T$��H����H�L$(dH3%(u:H��8�fDH�D$H�D$뼺��4����I�@��AUI��H�@~N�0ATUSH��H�DOH�8�46�I�m L�` H��H��H��L����H�u I�t$ H��t@��t'�E(H��L��A�D$(H��[]A\A]����f.�H����5���fD��SH���c���H�ߺ[H�����f��G��v��w�%��fD��SH���w%��H�{�n%��H�{H��t
H��[�[%��[�fD���f.���SH�����H�{ [�)%��f��t
sH�G�1��DH�H�x ��ff.�@��ATUH��SH����e�H��I����e�1�I9�u=H�u H�K �F 2A �u*�F;Au"��t+��to��t��uUH�H9�HD�[H��]A\�fDH�AH9Fu�H�F(H�V0H3A(H3Q0H	�u!H�F8H�V@H3A8H3Q@H	�u@�볐1��@H�AH9Fu�H�AH9F�HD��ff.���USH��H��H��uH���vD�fD@��u�H�H�Ѓ�H��t��u�H�k H��t<�E ���E���ʈ�H�EH�@�P��4������HH��H��[]Ð��t�H���#*�뵐UH��SH��H���H��H��H���a+�H���i,�f�ATI��H��UH��S�.'�H�mH��H��tH���j��t,H��[]A\�fDH�����u�H��L��H�=ל�z���H����S�L��H�=��H���`���AWA��AVM��AUI��ATUH��SH��H��(H�:dH�%(H�D$1���"�H�H��$tb��L��I���r��uNA��H��H��H���L�$$��H�D$�>�H�����tL����L��H��L��H�������1�H�T$dH3%(uH��([]A\A]A^A_��JE�f.���AWAVAUATUSH��H��8H�t$L�t$dH�%(H�D$(1��lU�L��I���%�I��I����I�mpH����H���~T�H����M����H�D$H�t$1�H���H�=�1H�\$H�D$�r#�H��H����L�p �@uL�p L��L�{��I�NL9�tMI�WH9�tfH��u�_H�RH��tSH9�tNH9�u��%H��OH��1�L��H��L�����H��H��t"H�t$(dH34%(H��u.H��8[]A\A]A^A_�L����Q�H��H�=ʚH��H�D$�5�����C�AWI��AVI��AUATUSL��H��HH�T$L�L$dH�%(H�D$81�H����H�wI��H�������<��H��1�L�d$�2@H�@pL��H��H�x赵H��H��tmH�qH��td���<tZ��u H�H������H��t��$���<��H�AH�^ H��u�H�A L��H��H�@pH�x�Z�H��H��u�f�H���P�H��I��$t_��L�����uN��$�H�L$ �L��H���H�l$ ��H�D$(�;�H�����tH�L$H��L��L�����f���$������H�\$8dH3%(�lH��H[]A\A]A^A_�f�H�|$�(H�L$H��vN�/�H�L$�@H�X uH�X I��$tBL�3M��t
A����L�{M��t6A��u0H��L��H�L$H�D$��.�H�D$H�L$�H�$H�C$H�t$H�sH��t"@��uH��H�L$H�D$�.�H�D$H�L$I�u H�sH��t"@��uH��H�L$H�D$�V.�H�D$H�L$H�K �����H��H��H�D$�/.�H�D$����D��$��������H��L���֝�fDH��L��H�L$H�D$��-�H�D$H�L$����@�1�H��L����f.�AUA��ATI��UH��SH��H��dH�%(H�D$1�H��H�$�ʲj�$M��AUH�T$I��H��H�����ZYH�L$dH3%(uH��[]A\A]��Y@�f���AUH�5�tNATUH��SH��dH�%(H�D$1��c�H��H�@H�$H��tcH�s H�N�����tpH�@pL�i H�xH��t?H��L���4�I��H��t,H���]�I�t$ jM��jH�I��L��H�T$����ZY���H�L$dH3%(u>H��[]A\A]�H�~H��t�H�AH�p �:xH�xH�C H�@H�@H�@L�h �i����X?��SH��G��t��tX��tC��t.�����1�[�@H�GH�m-H9Pt�P$�[�@ �DH�H�x ��������[�H�GH�P������J��u1��BBB(f�B0 @����B(B��t�H�R8[�R��������H�xH�5�rN���H��[H�@ H�x�
f.�H���H��H�L����<�W����Hc�H�>��G��t%s6fD�����1�H���H�GH�xH��u��1�H���fD������H����H�GH�P������J��u1��BBB(f�B0 @�����B(B���z���H�R8�R��������d���@�G���M�����N���fDH�GH�x H�������1�þ	H�=R�1��*���H��H�5�qNdH�%(H�D$1��\��H�t$H�@ H�x����T$��9��E�H�t$dH34%(u
Hc�H��H�D���<�ff.�H���H��tdH��t.@��tH��tC@��u=H���H��u1�GH�7�fDH���G�o)H�FH�G�D�GH�7�DH���G�o)H�FH�G�D��AUH�5�pNATUH��SH���c��I��H����H��OH�8H�vpN�(��(�H��L�h �@uL�h H��H�����I�4$I�uH��t@��uH���(�I�t$I�uH��t@��uH���(�I�t$I�uH��t@��uH���}(�I�t$I�uH��t@��uH���a(�I�|$ �W�I�E H��t�uH��H���?(�H��H��[]A\A]Ð@��u
H�}�$����H��t:H��tD@��u@��tHH�A
OH�8���f�H��OH�8����H��
OH�8�����H�Q	OH�8�����H�	OH�8������AUH�5#oNATUH��SH�����I��H����H�(OH�8H��nN�(�\'�H��L�h �@uL�h H�޺H�����I�4$I�uH��t@��uH���0'�I�t$I�uH��t@��uH���'�I�t$I�uH��t@��uH���&�I�t$I�uH��t@��uH����&�I�|$ �ҌI�E H��t�uH��H���&�H��H��[]A\A]�@@��uH�}����f�H��t:H��tD@��u@��tHH��OH�8���f�H�1OH�8�����H�OH�8�����H��OH�8����H�y
OH�8����AWI��M��AVI��AUATUSH��(H�G L�oH�$D�d$`H�L$H�hL�D$H���aH��OH�M��u21�L���5�H��I���bH�TOH�8L��H�5��1��@B�A����L��L���K5�H�����t�M�v E����I�v H��t@��t/H�$L�(H�D$H�H�D$H�(M�7H��([]A\A]A^A_�fDH���H��u�E����H������I��H���oH��I�vL��H��L���ړI���DI�E��H����I�E��H���K���L��L���4�H������4���H�POH�8I�EH�ƒ�H������� ����H�5�1��"A�f�@��uH�^M������������H����I����A��uvA����H�u	OH�M���W������@L��L�T$�j�L�T$H���%���H���)���I�Ũ�Z�������L����I���b����H��OH�����H�q	OH������H�1OH������H��L��I���25�H���~���f.�L���x�I��H�p �I���@H��OH����E1��������ATI��H�5�jNUSH��0dH�%(H�D$(1��u��H�L$H�T$L��H��H��jL�L$0L�D$(���X�(ZH�ZOH�kjNH�8��"�H��H�X �@uH�X L�#M��t
A����H�t$H�sH��t
@����H�t$H�sH��t@��tdH�t$H�sH��t@��t@H�t$ H�s H��t@��tH�L$(dH3%(H��uYH��0[]A\�H���H"���fDH���8"��fDH���("��fDH���"��k���L��H���"��@����5�ff.���SH��H�� H�t$H�t$dH�%(H�D$1��U�H��u 1�H�L$dH3%(��H�� [�@H�S H�ƋB����v�s+H�BH�@H�|$H�D$��H�¸H��u��D����H�H�P �B���ev�r�����H�H�P �B���Gv�r���uuH�H�P �B���-v��{�����uWH�H�P �B���v��]�����u9H�H�@ �P����u�s	H�@�>�����uH�H�x �t��(����3�f.���H�W �B����u�sH�BH�x�M�D����H�H�P �B����u�rЃ���H�H�P �B���iu�r�����H�H�P �B���Ku�r���uvH�H�P �B���1u��v�����uXH�H�P �B���u��X�����u:H�H�@ �P����t�s	H�@�9�����uRH�H�x �m�H�xY�s���USH��H��(H�t$H�t$dH�%(H�D$1���H���CH�S H�ŋB����t�sFH�BH�@H�|$H��H�D$���H����H�L$dH3%(H��H��([]�D����H�H�P �B���)t�r�����H�H�P �B���t��z�������H�H�P �B����s��X�������H�H�P �B����s��6�����uxH�H�P �B����s�������uZH�H�@ �P����s�s	H�@�����u7H�H�x �����H���
?�H�D$H�T$H��H�=ш�t��1�ff.�@��ATUH��SH��H��0H�t$H�t$dH�%(H�D$(1��_�H�D$H���QL�e A�D$����r�smI�D$H�@H�t$H�|$ H�D$ � �H��H���<H�|$ H�H��t
��uH���j�H�L$(dH3%(H���H��0[]A\�f.�����I�$H�P �B���br�������H�H�P �B���@r�������H�H�P �B���r�������H�H�P �B����q�rc���dH�H�P �B����q�rE���FH�H�@ �P����q��H�@����f�H�|$�F%�H�D$���@H�B�����H�L$L��H�����H��A�D$���aq�sI�D$H�xH�|$ ���D����I�$H�H �A���*q�ra����H�H�H �A���q�rC��uxH�H�H �A����p�r)��u^H�H�@ �H����p�sH�@�s���fDH�A�d�����u,H�H�x �.��N�����uH�H�x ������^.�ff.���H�ucN�(��ff.���H��H�5QcN�|��H�H��H�Ѓ��ff.���H��bN�0���ff.���H��fH�=P�NffH�H�H�8H�wH���������A����SH�_ �bK�H��bN�HH���^�H�P �@uH�P �o�oKJH�K H�J H�J8H�JH�KH�	H�J8H�KH�I�H�J(H�KH�I�H�J0H�KH�IH�J@[�ff.�@��AUATUS��H�����|O�̓��|`I��I��fH�=f�NffH�^�H�8H�w���H������L�hL�`�X �h$H��[]A\A]�H���NH�5v�H�81��$6�H���N��H�5��H�81��
6�f.���H�������1��L���H��H���NH�8H������fD��H���#���H��H���NH�8H�����ff.�f���AUATA��USH��(H�|$H�4$dH�%(H�D$1�H��� tvH��H�n��H�D$L�h fH�=@�NffH�8��E1�E��H��L��H�8�2�
H�T$H�T$H�T$H��H�T$H�$H�t$dH34%(u=H��([]A\A]�@H�^H�����wH�n �H�.OH��H�5H�81���4��5+�D��1��u5�D��AUE��ATI��U��SH��H��(H�|$dH�%(H�D$1�fH�=j�NffH�b�H����E��L��H�8H�D$H�p �HD�I���I�
H�T$H�T$H�T$H�L$dH3%(uH��([]A\A]��*�f.���AVAUM��ATI��U��SH�� dH�%(H�D$1�H� ��H��L�vH�L���!�H��ts�.H�E1�L��L��L���A���51�H��H�D$�� �H��txH�D$H�t$�H�D$��,�H��H����H�T$dH3%(uhH�� []A\A]A^�f��G�E1�L��M��L��꾁
A����H��H�D$�` �H��u�H�L$���
H����!��f�H�v � ����b)�f���E1��t0�@��SH��H�_ dH�%(H�D$1�H�t$H������C t09D$���„��D�H�L$dH3%(uH��[�f.��|$�������(���H����
�H��H�H�D����SH��@dH�%(H�D$81�fH�=�NffH��H�H�x�;!H����H�T$H��H��H����H�t$���T$(1Ƀ�t��t%��t81Ƀ�����H�L$8dH3%(u5H��@[�H�S �B u�9D$u���fDH�T$ �H���t���'�H��NH�5ѼH�81��t1�@��H��HdH�%(H�D$81�fH�=@�NffH�8�H�H�x�\ H��thL�D$H��H��L������L$(�������t��t)H�t$�'��|$�t(H�t$8dH34%(uH��H�H���@	���fD�����?'�H��NH�5�H�81��0����SH��H��0dH�%(H�D$(1�fH�=|�NffH�t�H�H�x�H��t,H��H��H����H���}�H�L$(dH3%(uH��0[�H���NH�5��H�81��/0��&�f.���������AVAUA��ATUSH��dH�%(H�D$1�������1���)�Hc����H��H���OH��u"L�%'-f��L���3�H���OH��t�H��I����3�L��H�$��(�H��I���p%��t@L��H����@��u�E��x#H�L$dH3%(H��umH��[]A\A]A^�H�	�OH��u%H�ufD�H����H���OH��t�H��A���D3�L���H�$�C(�Ic�H��H���%����N%�ff.���UH��SH��H�^ �s��tg��tK��u.H�;��H��H���K�{teH�sH��H��[]�3���t�H�=}1��=�DH�CH�p����f�H�[H�s���H�sH��[H��]���H��[]�f���SH��1���$�H��H���6���H���.;�H��xH��������?[H!�H�D�DH��[H	�H�D�ff.����H�=|�OAVAUATUH��S��H���+��H�Q9��_���H��H��H��H��H��H��H�H�BH)�H�4�OH�H� t(H��L�,�H;,�u(N�d([]L��A\A]A^�DH�@ L�,�H;,�t��a1�H��H���NH�8���L�5��OI��L������H�,�H��t
@����L���b��H���OH�����N�d(M��tA��tSH���;��[L��]A\A]A^�����~��H��H�\�O�?*
���H�=F�O�������@H��L�����H�������H��L�����^����ATI��US��H��fH�=�NffH�
�H�(H�}�7H�����t"H��H����L��[H��H��]A\革D<t �tL9`u:H��[]A\ÐH���H��u�H���NL9"tHH��L��H��[]A\�E��DH���x�L�`M��t�A��u�H��L��H�D$���H�D$�f�H��H��[]A\���H���NH�5�{H�81��H+����H���N1�H�8���ff.���AWAVAUATUSH��HdH�%(H�D$81�����I��H��o�L�f���A����nfH�=��NffH��H�5�UNL��L�8�d��I��H�@ H�pH�������H�{��I9F H�D$��H�T$H�L$ L��H��H��jL�L$@L�D$8��L�t$@^_�>�����I��LD���M�oxI�~��b�H��I�VM��P��M��H��L���^!ZYH�L$8dH3%(��H��H[]A\A]A^A_�f�H��NH�8�a�I9F H�D$�C���I���LD�M�ox�>�L�L$H������I�Q��P�s����H��tJH��tT��u'��tZH��NH�8�����	�I�����H���NH�8���f�H�Q�NH�8����H��NH�8����H���NH�8�~�������
��o�ff.�@��H���N�H�8������SfH�=��NffH��H�H�XH����H��t'H�ƒ�H��t+H��t5<t�tMH����H��t [�Z�f.�H��H�@H9CXt�f�H���NH�5RwH�81��H(��H���H��t��f���H���N1�H�8����ff.���ATI��1�U��H��S���H���a<�1�L���H�����M#�H��[]A\�D����AUI��ATI��UH��SH����;�H�=rH��1���,�H�ËE��t"������tg��u*H�EH�h �E��u�H�UH�5�"H��1���DM��tL��H�����H�ߺH�56w�T�H��H��[]A\A]�fDH�ML��H�5�q1�H���h��fDH�}H�G�hX�@�L��H�5KqH��H��A��1��6��y������H�w H�<q��F HD�����ff.�@��H��H�5qQN�\���H�H��H�Ѓ��ff.�AWAVAUATA��USH��8dH�%(H�D$(1��G����CH�H�|$I��H��I��H�D$�X��H��A���cI�}H�|$�m�H����H����H�D$L�h �@uL�h M�} M�g I9�t#M���b1�H���7�H������i@A�L��H��H����kA��IH�D$H�D$ H�D$H����)�H�t$(dH34%(�}H��8[]A\A]A^A_��H�|$��H���YH��u
H�|$�F(�H��H�|$�	�H�p H���F��wz��u
H�FH��t�N E��H��H��A���IA��]���L�d$H����A��H��L��H����H�2���@��H�D$�d���f�����H�H�P �B�������s���H�B�a���A��t:L��H���/6�H����������H�L�NH�8L��H�5�s1��8$��I�$H�ʃ�H���d���L��H��H�L$H�$��5�H�$H�L$H������;���H���NH�8H��u��� t�H�5Gs1���#���H�H�P �B���0�������H�H�P �B����������H�H�P �B�����������H�H�@ �P��wN���S���H�@�A���M�e H����H��L��H���Ai���@H�|$�.&�H��������uJH�H�x ���������q��\�H�|$���H�5rH��H���NH�81���"����UH��S��H��H��dH�%(H�D$1��i��L$H���H�ƒ����L$H�L$����H�t$dH34%(uH��[]����ff.����ATI��H��U��H��SH��H��dH�%(H�D$1����L$L���H�P ����H���L$H�L$HE�H�����H�t$dH34%(u	H��[]A\��G����UH��S��H�=�H���E��H��H���H��[]�R���f�SH�����H��t
H��[�DH�����H��u���
H�����uӾH�=�k��H��H�J�NH�8���H����f.���AUATUH��H��SH��H���t�H����H����H��NH�H�������H���\H�������9����H�Y�NH�fDH9�ukH�5�KNH���L��E��H�m �C��H�� H�} L�gM��uL�g H�s L�nM��uL�n ���tM9�uH�CH9E�f�1�H��[]A\A]�@��u"H�EH���.���H��NH��^���fDH����H����@��uN@����H�}�NH���H�S�����H�� �C�.���H�[ �)���f�H���NH��k����H���NH������H���NH�����H���NH��;����H�A�NH��+����H�1�NH������H�H9M������f�H���NH��a����H���NH��������UH��SH��H��H��t@��t,DH�=���(��H��H��H�����H���	��H�H�ƒ�H��t(H���H��u�H�=o��)���H��H��$u��� t�H���H�������HF��@AWAVA��AUATUSH��H��(H�t$L�d$L��dH�%(H�D$1��Z��H��H����H��NL�(H���NL�8H��teH�T$H��L��H�D$謆jH��M��AVH�T$ I��L��H���_��ZYH�L$dH3%(��H��([]A\A]A^A_�f.�M��D��L��H��L������H��u�H�t$L���z���f.���uH�,�NL�kL�8H���O����f�H��tJH��tT��u/��tZH���NL�(H���NL�8H�������x����H�A�NL�(����H��NL�(�����H���NL�(�����H���NL�(����<�ff.����1��U���D��H�wH�?�p�����2���f���SH��H��H�|$H�t$���H��t H���NH�߹H��H����H��[�H�t$H���C�����SH��H��H�|$H�t$�U��H��tH���NH��1�H��H����H��[�H�t$H�����fD��AWI��AVE��AUI��ATA��USH��H��fH�=��NffH��H�5�FNL��H�(�]��H�8$tJH���L�H HD�H�]xI�y�>T�H��I�QM��D��AVH�0H���H��[]A\A]A^A_�H�V�NH�5'kH�81��E�D��AUM��ATI��UH��S��H���/�E1�L��L��H���A��H��[]A\A]���ff.�@��AUA��ATI��UH��S��H�������u!H��E��L��H���[]A\A]��������H����ff.���ATI��UH��S����.�1�L��H����[]��A\�����E1��t��@��ATI��UH��S���K����uL��H���[]A\����k��H����fD��H��H�dH�%(H�D$1�H�t$�����T$��9��E�H�t$dH34%(u��H����1���H��dH�%(H�D$1��!fDH�x�����u1H�@ H�w H�x��H��u�1�H�L$dH3%(��u H���f�H�t$�V���T$����9�E�����f���H��uH�8�NH�8�(.��@��u
H��.�H��t:H��tD@��u@��tHH���NH�8��-�f�H��NH�8�@H���NH�8�@H���NH�8�@H�Y�NH�8�t������H��H�5qCN�<��H�@ H�@H���ff.�@��H��H�5ACN���H�@ H�xH���ff.���H�W H��t�B �������B��t��t)��tH�:���H�BH�����H9Pt1��@H�B�H��t�H�x����@��H��1��1�H��H���U���D�����t��t(1���t�f�H�1��
�DH�G�H�GH�x�ff.����<uH�H��u
����[
�H������H��H���ý����H��H�5�AN���H�@ H�xH���ff.�SH��H��0dH�%(H�D$(1����<��v@<tl<	u���fDH��H�t$����|$���9�E�������u�����1�H����H�L$(dH3%(�8H��0[�H�GH�x�[�����f����H��t1�H�����f.�H�CH�@ �x�^���H�@H����H9P�I���H�xH�5�@N���H�@ H�xH��u��'����H���OH��u%H�"D�H���+��H�\�OH��t�H�����H�D$H�;�OH��u'H�����H�����H��OH��t�H�\$H����H�޿H�D$��H�޿H�D$�~������@��H��H�5�?N���H�@ H�xH������ff.���AWH�5�?NI��AVAUATUSH��hH�|$@�z��L��H���(�H�=Y_H��1���I��H�CH����H�CH����H�K H�q������ZH�iH����@��uH�U��H��uH�mH�;H��$��H��t�uH�H�у�H���m	L�kM����L��L�5�h��L��H����I9�tH��H�5�^L��1��M�DL��L�����H�C H�x� ��L��H�����H�S H�BH�x H9zt!���H�56�L��H��1���H�C H�@���<�H�|$@�Z���H��H��OH��u$H�-�@�H�����H���OH��t�H����I��H���OH��u)H�-B�f��H����H���OH��t�H���?�H�$H���OH��u(H�-J��H���S��H�d�OH��t�H����H�D$H�C�OH��u'H�-���H�����H��OH��t�H����H�D$(H���OH��u'H�-�I��H�����H���OH��t�H����H�D$H���OH��u'H�-{��H����H���OH��t�H���?�H�D$H�k�OH��u'H�-^��H���S��H�D�OH��t�H����H�D$ H�#�OH��u'H�-��H�����H���OH��t�H����H�5�(L��H�D$8��H��� ��H��H����H�����D$L�T$LH�
\��H�6�HE�H�K1�H�L$0H�T$P���H����I9��0H�D$0J��H� ��H�PL�pH�RH�������M9���L94$�~L9t$��L9t$��L9t$ ��L9t$8�RL9t$��L9t$(�$L9t$�1L9t$�VL9t$ ��L9t$8�@H��� ��H��H����H��L9�����Lc��� ����L;{�DH�C J��H� ����H�P L�2H�RH���������M9���L94$�B���H�5�ZL��1��#�H��� �s����H�SH��L9��r����H�5L�L����H��V���H�i H������H�;H��$����H��L�5�c���L��H���L��_�����H�=a����H��M9��E���H�5��L��1��r����D1�H�=�;�J��H��L9t$�e���H�5DYL��1��;����fDL��H�5rY���H�|$@���H��t)H� ��H��H�HH�H�5yYL��1����L��H�5q^��H��hL��[]A\A]A^A_�DH�5 YL��1�����f��*H�T$X�q�H�T$XH9��CH�t$PL������������H�T$X�A�H�T$XH9��3H�5�XL��1��B����DH�{�����H�S H�H� �}H���D$LH�L$H;
�a���H�j�*���H9�H��G���H�S�� uH�S H�RH� �SH���D$LH�L$H;
����H�j����H9�H������H�S�� uH�S H�RH� �
H���D$LH�L$ H;
�����H�j�&�-�H9������D$LH�������7���H���H���'���H�@������H�=�X����H�������&H�T$X��H�T$XH9����D$L���oI�D$L��H�p�������f��H�=�@���H������H�VH�j ����H�5�VL���������H�@ �L����H�5�VL��1��/��z���f.����Y����H�5OmL�������O����H�5qVL��1�����2���f��H�5'VL���������A���6���I�EH�ƒ�H���"����� ����I���H��t
�tRf�M�mM����A�����I�E��H��������fD�H�5�UL��������H���H��H��w����f��� �����H���H9�t{���L��L�5�pH����H�5�!L�����H������L��H���m�H�5UL���y���l���@H�SH�H� �����H�R �~������L��L�5pH�����,���H�R ���H�R ��f���AVAUI��ATI��U��H��SH�� dH�%(H�D$1�H�t$�;��H�=+�OH��tF��~��H�����t$H����H�L$dH3%(��H�� []A\A]A^�fDH���OH��u%L�5KD�L������H���OH��t�H���O��~�D�u�Ic�M�l����u'1�1������@L���p�������e���@L�����H��E��uKH���2���L�D$�1�H�5;�O���H�D$H������H����������D$������D���v���ff.�f���AWAVAUATUSH��(H�_ �C �+���C��t)�����������ZH�H�X �C��u�H�CH���H9P����L�`�H�=	S�M�H�5�2NL��H����L��L�(���H�5�2NL��I��H�CL�x��H�@ H�P����&<�
�e�I��A� �L�D$��A�W I�w1�H��IOI+OH�D$H�L$�$����$H�L$L�L$H��I��L�D$�P A�W H�HH��L�HH�A��H�YL�A�M��tA��uL��H�����E1�E1��H��H���Z��H�CH��t�uH��H���R���E1�E1�A�$H�5�NH�2N�0H�8���H�X H��L�+M��tA��uL��H���	��I�t$H�sH��t@��uH������I�T$H��H���]�I�D$H�pH��u/M��t=I�FH�p@H�s H��ui�@X�C(H��(H��[]A\A]A^A_Ð@��u�H�����M��uþ	H�=%Q�\��H�����H�C H��t�tB�C(�f�@��u�H���B��I�F�@H�CL�sL�+L�`���@H��H������H�BH�P�������L�BM����������f.�I�wL��L�D$H�$��L�D$H�$����H���NH�5wUH�81��E�H���NH�57UH�81��-�ff.�f���USH��H���N��H��H��u>�a��$H��uH��H��[]�DH��H�5�/N艽�H�H��[]H���@�3���H��H�y�OH��u%H�pD�H�����H�T�OH��t�H��H��1�1�[H��]�j��f.���H��tH���fD��f���H���NI��I��1�1ҾH�8���ff.�SH��H�� dH�%(H�D$1�H��H�4$�H�|$1��@��H�S H�=���H���Z ����H�H ����Q ۃ�	ӈY H�L$dH3%(uH�� [�������SH��H�����H��[H���d���@��USH��H��H�����H��H���`���H��H����H��H��H��[]�$���@ATUH��S�H�� dH�%(H�D$1�H��H�<$1�H�t$��X��H��I���=��H��t
H�E �X ���L��H�=����������H�H �Q ��	ӈY H�L$dH3%(u	H�� []A\����f���SH��H�����H��[H���D���@��USH��H��H�����H��H���`���H��H����H��H��H��[]����@ATI��USH��H�� dH�%(H�D$1�H�<$�H�t$H��H�T$�W��L��H��H�C �X ���H�����H��H�=R�������H�H ��Q ��	ӈY H�L$dH3%(u	H�� []A\�������AUI��ATA��UH��SH��H�z dH�%(H�D$1�H�t$苸��A����Hc�E��u9L�d�/��L��H��H������H�L$dH3%(u_H��[]A\A]�fDM�eI��t�L���~��H��I�����H��t��T$D9�
���t�D9�}���D���a��1�D���R���=��ff.�f���UH��S��H��H��詩��H��H���H��[]���fD��AVH�FAUATM��USH� uH�F Hc�H��H�XL�(L�p��H��H����H��H���T��H�]�� t[L��H������H�H9�XH�u�� u)H�uH�U H�����w[[L��]L��A\A]A^���DH��H�U����L��H�]�D��H�H9�~�I����8�[L��H��L��]A\A]A^�m���H���NH��H�5�IH�81���f���ATL�%C�NH�=�.USI�4$�A��H�2�NH��H��_��H�;�����H�@��H�5���T��H�;1�A����
�*$H�=���H�;1�A��H���$H�=�����H�;1�A��H����#H�=�_��H�;A�1�H�ƺ�#H�;1�H����H�5	��6��H�;1�H�*��H�5�I���H�;1�H�¨��H�5�����H�;1�H�����H�5������H�;1�H�2��H�5z����H�;1�H�j��H�5����H�;H��H�5D�H��H�;1�H�\�NH�5I���H�;1�H�d���H�5�O�x��H�;�����H�9���H�5�H�]��H�;�H����H�5��B��H�;�H����H�5aP�'��H�;�H�ث��H�5,����H�;�H�����H�5����H�;1�H���H�5I�����H�;�����H�:�H�56H���H�;1�H�R���H�5=H���H�W�NH�=9HH�0����H���N1�H�Ч��H��H�5GH��n��H�;1�H�����H�5�F�V��H�_�NH�=�GH�0���H�q�N�H�=�GH��u��H�3�H���

1�H�5L��H�=�����1�H�5���H�=>�˴�I�4$H�=�G���H��NH��H��9��H�H���=H�.�NH�8H�5���	�H�;�H����H�5�����H�;�H����H�5��q��H�;1�H�5���H�5�w�Y��H�;1�H�m���H�5��A��H�;1�H�յ��H�5��)��H�;�����H���H�5=����H�;�����H���H�5�����H�;�����H�����H�5iF����H�;�H�����H�5���H�;�H�����H�5�M���H�;�����H�s�H�5����H�;1�H����H�5�E�o��H�;1�H���H�5��W��H�;1�H���H�5;
�?��H�;1�H�����H�5���'��H�;1�H���H�5�e���H�;1�H�C���H�5����H�;1�H�����H�5�E����H�;1�H��H�5�E����H�;1�H�k���H�5�E���H�;1�H���H�5����H�;1�H���H�5�D���H�;1�H����H�5]E�g��H�- �NH���N�H�5�+H�}�D��H�}�H���H�5+E�(��H�}�H�����H�5d����I�4$H�=
E�<��H��NH��H��Z��H�H���N��fH�xH�5���&�H�;�H����H�5ˆ���H�;�H����H�5����H�;1�H�T���H�5�t�x��H�;1�H�����H�5'��`��H�;1�H��H�5 ��H��H�;1�H�ܱ��H�5�C�0��H�;1�H���H�5����H�;1�H���H�5�
���H�;1�H�4���H�5������H�;1�H���H�5�C����H�;1�H�����H�5�C���H�;�H�)���H�5�C���H�;�����H����H�5�C���H�;1�H���H�5ڍ�j��H�;1�H���H�5�B�R��H�;1�H�֭��H�50C�:��H���N�H�W��H�5KCH�;���H�;�H����H�5&C���H�;�����H���H�5 �����H�}�����H����H�5������!
H�����[]�����H�K��H�5��H��A\�*��f.�H��NH�8�����u<H�x���H����H�����uX<��H�Y�NH�8�o����H��tJH��td�u<t|H�5�NH�8�j���DH���NH�8�V���f�H���NH�8�����H�q�NH�8�.����H�a�NH�8����H�!�NH�8�����H��NH�8�����H�ɽNH�8����H���NH�8������H���NSH�=�AH�0���H�6�NH��H��Ӳ�H�H���H��NH�8H�5!���H�;1�H�%���H�5���)��H�;1�H�}���H�5�����H�;�����H�����H�5X���H�;1�H����H�5w�����H�;�H�����H�5A����H�;�H�����H�5A���H�;�H�y���H�5�@���H�;1�H�!���H�5D`�u��H�;H���1�H�5͊�]��1�H�5����[H�=�F�'����uH�x���H��t:H��tD�u<tLH�%�NH�8���DH���NH�8���f�H�q�NH�8����H�1�NH�8����H��NH�8�t���������fD���+�����+������fD��H�E N��+��ff.���SH�w(H���W,�$���C 1�[�f���H��H�5 N�L��@H��H��8H��?���f���H��H�5�N���P���u�փ�H���H���ff.���H��H�5�N�ܫ�P���u��H�DH���f���H��H�5aN謫�@����H�H��������H��H�51N�|��H��ʃ�����~��H�D	H���f.���H��H�5�N�<���@����<�HN�H���ff.���H��H�5�N��P���tH���f.���H��H�D���H��H�5qN輪��x�HE�H���D��H��H�5AN茪�Hc@H��H�D�ff.���H��H�5N�\��HcH��H�D�ff.�@��B�<v�� uH��fDH���D�B�A��v� t���tiH��H��H��u-E1�H�BH�5B1�H�=B�>��詾�H���f�L�NE1�H��A1�H�5�AH�=�A�-���x��H��Ð�ff.�@AVAUATUS�/D�u����_A��CŃ�A��wpA��H��JH��A��Hc�H�>��H����H��
uCH�5�G�4���u3�A��tbE��t%��A��wDH�����t
��A��v����[]A\A]A^��H��u�H�5�:�ֽ�¸	��u�A��u�DE��t�A��w�DH�����t���a��v��H����H��u�H�5pF�|����L����r����H���a���H�5O��R��¸�������A���fDH���1���H�5-F�"��¸���������fDH���H�������H�5F���¸�����������@H����H���|H�������H�5�E覼�¸
���o������f�H��th�����H�������H�5�E�o�����H�5�EH���X��¸���!����G���@H�5�E�4����/�������H�5tE�������������H�5;E���������H�5�D�ڻ����������H�5�D輻�����������H�55E螻���������d�����Z���f���SH���3��H��薼��~:���Oڅ�~Hc�9�~H�D	�
�N[�@Hc�[H�D	�
պN�H���N��H�5�HH�81��^��ff.����N��x�DH�������x���NH����r�N�H���ff.����H�����H��H�H�D��AVAUATUSH��pH�|$dH�%(H�D$h1�@��uH��豷�H��u+H�|$���H�L$hdH3%(�dH��p[]A\A]A^�H�|$����H�+I��H����L�mH�E ��H���}��H��H�-#H��I������賹�f��L�d$ L�d$D$(D$8D$HH�D$XL�t$L�l$�IH�;��"��H�t$ H�������e��H�;H�GH� tH�GH�D$����H�D$ A�1�L��H��H��������A�Ņ�u�H�D$(H��tc�@�����L�m������F�>��H��HH�H����H��H�����1��x��H�5<D��詨����H�m�NH�T$H�5�;H�81�����AVAUATUSH��`H�|$dH�%(H�D$X1�@��uH���ѵ�H��u+H�|$�1��H�L$XdH3%(�\H��`[]A\A]A^�H�|$���H�+I��H����L�mH�E ��H�����H��H�-sH��I�������ӷ�f��L�d$ L�d$D$(D$8H�D$HL�t$L�l$�FH�;��"��H�t$ H��������H�;H�GH� tH�GH�D$���H�D$ A�1�L��H��H���������A�Ņ�u�H�D$(H��tc�@����L�m�"�����E�f��H��HH�H�����H��H����1����H�5T:D���Ѧ����H���NH�T$H�5?:H�81��/��ff.�@��H��H�w H�OH�WL�GH�?����H��H��f���H��H�w H�OH�WL�GH�?��H��H��f�UH��SH��H��(dH�%(H�D$1����H��H�5%H��H�@H�$H�D$��H�D$H�H�$H�L$dH3%(uH��([]������SH��H�?�C@u���H�{���H�{���H�{���H�{ ���H�{(���H�{0���H�{8�{��H�{`�r��H�{x�i��H����]��H����Q��H����E��H����9��H����-��H���[� ��H��t@��uH�����t
��t�@���f.���ATI��USH�� H�*dH�%(H�D$1�H�|$H�|$H�t$���=H��H������H��u|L�D$I��tH�|$�p��L�D$�H�=S�H��H�T$�����t<L��H������H��H�@H���>��1�H�L$dH3%(u0H�� []A\�M�D$�H��NH�T$H�5FBH�81����������SH�H��H�xH� tH�x�S�s���C�ѳ��C1�[���R�O��tH�H�D�fDH���ϵ�1�OH�H��H�D�ff.�f����f.����f.�S�1������ƒ��t%u[Ð�߀�1�[���ff.���PXH����w5t
��E��H�H��t�1�H��t�H�Ǩt	�ٶ�����p����Һ1�����H��H��1ҿ����uH���H�5M6��覢�fDATI��UH��S��H�� dH�%(H�D$1��D$��tk������P����~
������H��t$�}�U��}�M���8���|$M��u��u}�����H�t$dH34%(ucH�� []A\�H��H	�t0H�T$�H�=O$�ڭ�D$M��tA�D$��t�H��u�뛐����1��f��D$���D$�������H��(H��dH�%(H�D$1�H�<$H�=.�H�t$H��H�T$H�Jg�u��H�|$dH3<%(uH��(��;��ff.���H���#��H����H�D����H��H�w H�OH�WL�G�?���H��H��f.���H�����H����H�D����H���c��H����H�D����H���c��H����H�D����U1�1�H��AUATSH��dH�%(H�E�1��Ǯ����A��Hc�=���H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����H�\$H���H��D���M��A�Ń�����<��I��E��~$A�E�L�l��L��H��H�t���I9�u�H�}�����L��H�M�dH3%(uaH�e�[A\A]]�f.�H��H�4�H��>u@H�VH�}�H���ޥ�H���^���fDH)�H�L��A����=��1��8�4������U��D��SH��H��OdH�%(H�D$1�H�;t*�W��H�;t/H�T$dH3%(�u&H��[�@H�|$覺��@H�|$�F������ff.�@��H���S��H��H�H�D����H9�t'SH��H�5L
N藙�H��[Hc@H�|鵮�D��f.���U1�H��1�SH��H�h�NH����H�5�NH��H���>����uH��H��[]�fDH��Hc@H��H�TH�r�OH�0�z��HcEH�5G�OH��H�T�b��H��H��[]����H�5�O������������ATI��US��1����H��脲�H��uN��t��te�1����W���苝�1��T��H�@H)�H�x"[H�D]A\��L���H��賩��Ɛ[H��]A\���@I�<$H��t��!��H��H������@PXH�57;H��H��NH�81��B��f�PXH�5g;H��H��NH�81��"��f�SH��H�|$@����@��tbH��t@��tK�&��H����H�����H�XH��踿�H�{X���C���}H�H�DH��[�DH���H��u�H�|$�ʵ�H;��OtAH;��Ot(H;��OuRH���[�@�ۯ��f���f�H���[�H���NH�5}/H�81��-��H�v�NH�5~/H�81����H�^�NH�57/H�81����ff.�f�AVAUI��ATUH��SH��H����M��tA��t;L�����H��H������H��H�@H�����H��[]A\A]A^�f�I�EH�ƒ�H��u�E1�M�e�E�H����H9�}�L��H�<�A���4���H��H���Y��H��H�@H�����I�EIc�� u�I;U�{���I�E �f.�����H��H�@�%���ff.�ATI���USH��1�H���F��H��H������H�E[I�,$]A\�ff.��>tKU�H��H�=ƉSH��H�������u���H�u�8��������H�ދ8����ff.�@AWI�@M��AVI��AUATU1�S��H��(H�t$H�$H�D$��H����H9�� H�D$L�,�I�EI�E uI�E H�8�]��H�<$I��H�L�LL��L�L$����L�L$H�������M9>��H�D$L;8��I�EI�E uI�E H�PH�<$L�����D9�AL�M;>t,H�D$L;8t"H��I��� �B���I;o}lI�G �H���I�MI�E uI�M H�y襬�9�L��fDH�<$H�����L���u���H�<$�L���_���r���f.�H��(��[]A\A]A^A_�H�(�ND��H�5A,H�81�����@PXH���5��1��8�,��ff.����H��1�1�蟩��x
�H������ff.��AT1�I��UH���S���Ã��t����[]A\�f�H��t�M��t�L��H�5�+H���D����f�AWI��AVI��AUATI��UHc�S��H������Hc؃�������l��M�l$xM����L��L��L�t���\���H�|-L��A������H��H�@E��ulH��L�����I��$�H��t4�L�����H��1�H�@H������H����[]A\A]A^A_Ð�;��H�@H��I��$��fD�H��������fD���H�@I��I�D$x�0���fD胦�8	u1��f.�M���u���M���l���L��H�57�L������U����AU1�I��ATI��U��SH������Ã��tS�t1�H����[]A\A]���¾��1������Ã��u�M��t7M��t2L��H�5�)L���j���M��tM��tL��H�5�)L���L��땻�����UH��SH��dH�%(H��$�1�H��H��趠���t1H��H�޿����u5H��$�dH3%(uH�Ę[]��;��H�5[)�8�-�����H�5�(�����f.�AUI��ATI��U��SH�����t�0���8uL��L����y��H��H��x�H��H��[]A\A]�辤�H�=�3�0蠪���AUATUSH��dH�%(H�D$1���OH�$��uyH��I��H��H��H����H��L��A����H��H��A�����H�<$��H��u5��D��D���X���u7H�L$dH3%(�uH��[]A\A]�@1��������"������������n�OS��uD������9�t"�ډ޿��������x,���N��[�fD������Ɖ��ʠ��y��a������藣�1��8莓�ff.���H����O�y���H����H�D�ff.�f������H�������^���xH�������USH�����O������������9�u.�=�N9�ty���育��H�T	��u7H��H��[]�D������\��H�T-��t��=�O�
��N���*�OH�=�NH���H����[]阋����1���w�������OS��u(�L����U��ډމ��j���xH�D��N[��T������ff.�@��ATUSH��dH�%(H�D$1����OH�$��ucH��H��H��H����H��H��A���s�H�<$��H��u0��D���.���u5H�L$dH3%(�uH��[]A\�@1��Q�������u���@������OS��uD���.��9�t"�ډ޿�����<���x,�*�N��[�fD������Ɖ�����y����l��'��1��8���ff.���H���~�O�y���H����H�D�ff.�f����V�OS��u(茍���e��ډމ�蚿��xH�D���N[�����_���ff.�@��H������xH�H��H�D��.���ff.���H��1�豾��xH�H��H�D����ff.��PXH���%��H�5P$�8��������fDI�Ѕ�~f�F�L�L��H�7H��tKI�H��tBH��H9�}H��H���	fDH��H�H��H��H��u�H��tH��H�H��H�I�H�H��I�H��I9�u��f�AWI��AVA��AUATI���UL��SH��L��H��H��dH�%(H�D$1��V���I�:H����H��������Ic$H����&�.H)�H��H��?H��H��H)�H9�������Hi�ʚ;Ic$H�E��~AH�H��H��piH�KA�v�L���H�H��H��@��H��@��H��u=H��I9�u�H�MH���gH�H��H�@H��mH�D�DH�@H���H�|?I���*H�$�5wL���ÿ�Ic$L��+H��H�TH�$�衿�I��E��~qA�F�I�@L�d��.@H�D?L��L���*H�$�b��I��H��L9�t.H�;H��t�H��L�y�萘���fD胘�H���K���H�@H�}H�H�D?y�[��L���/L��H�$���H�\$dH3%(uRH��[]A\A]A^A_�H���>����H9����3���H��H�H��H�@H��H������H���������ff.�����fD����fDUSH��H�|$8H�t$H�T$@H�L$HL�D$L�L$dH�%(H��$�1�H�D$p�D$PH�D$ H�D$dH�D$(H�D$XH�D$0H���NH�8�1��H���NH�8�"��H�|$ ����H�T$(H�t$0H�|$T�$�������D$X;D$d�����Å��nH�D$��8�-���H��u	��
������A��1����T��H���u����8t�H�|$tH�|$��H�D$H�l$l�X辛��D$l�fD諛�8���H������H��x�H�D$H��tH�L$H��t�D�H����H��H��u
�蛙�H�t$H����I��H��y��?��8t��5�����߾��聼��A�����H�\$pH�����1�H�޿贳���H�T$H�t$H�|$HH�D$@�Ѕ������1�����軚�H�|$ �(�����#H�T$H�t$8H�L$P����������������H��$�dH3%(����H��[]�D������;D$T����H�T$hH�t$`H�|$\�:�������D$`;D$h���;D$\���������������f�H�T$H�|$H�5C芉�����D�ۙ��D$l�B���H�|$H����H�T$H�����H�5�H������螙�H�5��8萉�苙�H�5��8�}���h�����SH��H�� dH�%(H�D$1�H�|$H�|$H�t$� ��H��H���e��H�53_H����H�|$��H��H���<��H�5��H��蘳�H�L$dH3%(uH�� 1�[����ff.���UH��AWAVI��AUATSH��HH�}�dH�%(H�E�1�H�E�H��u�L��諓�I��A��u�H�H�؃�H��u�� ��H����H�]�H�M�Hc�A��H9�����t��;E��mH�E���A����H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u���L�d$I���E��~^I�F��L�m�H�E��%DH�E�J�<�L���(��C��I�GL9�t+I��I� u�I�F ��f�I�FH�E�����H�}�H��uH�}�L���;������H�}����H�}���H�U�dH3%(��H�e�[A\A]A^A_]�fDH�E�H�4�H��>uWH�VH�}�H���u��I������D1�����u���H)�H�L������H�5>��H���NH�81��/��H�}���ѣ�茿�藖�1��8莆�ff.�ATI��US��@��tI�݃��E<~&��讍�H����H�‰�H�5�L��1�����t;��uOL��[]A\�����n��H��tyH�‰�H�5�L��1����됐��1�H�5�L���̼��t�L��H�5��p��L��[]A\����H�5nL��1�荼��i������H�5FL��1��m���������ATH�5S�MUSH��虀�H�5B�MH�ߋ(舀�1�D�`���Hc�H�5H��H��1����D��H�����H��[]A\���USH��H��H��dH�%(H�D$1�H��H�$���H�<$��H��u%�����H��H�T$dH3%(uH��[]�@1��y����袽�f���SH��H��dH�%(H�D$1�H��H�$�$��H�<$��H��u!H�T$dH3%(H�DuH��[�fD1�������:��f.���USH��dH�%(H�D$1����O��uUH��H��H�$H�����H�<$��H��u+����H��H�T$dH3%(uH��[]�f.�1���������譼�ff.�f���SH��dH�%(H�D$1���O��uVH��H��H�$���H�<$��H��u/��舙��u7H�T$dH3%(�uH��[�f�1�������R����������SH��dH�%(H�D$1����O��uVH��H��H�$���H�<$��H��u/���X|��u7H�T$dH3%(�uH��[�f�1��i�������荻��X����USH��dH�%(H�D$1���O��u]H��H��H�$H�����H�<$��H��u3���������]���x4H�L$dH3%(H��uH��[]��1�������*�������AVAUATUSH��dH�%(H�D$1��^�O����I��H��H�$L���\��H�<$��H��uq謗��tx�����9}�NA��A��DE�莗�9�DE��s���D��9�D��E�葎��xL�G�NL��H�L$dH3%(uFH��[]A\A]A^��1����4���u��ډމ��E���y����1��8����.���f���SH��H��dH�%(H�D$1�H��H�$�T��H�<$��H��u!H�T$dH3%(H�DuH��[�fD1��a����芹�f.���USH��H��H��dH�%(H�D$1�H��H�$����H�<$��H��u%�����H��H�T$dH3%(uH��[]�@1���������f���SH��dH�%(H�D$1���O��uVH��H��H�$�j��H�<$��H��u/���x���u7H�T$dH3%(�uH��[�f�1��i�������荸��X����SH��dH�%(H�D$1���~O��uVH��H��H�$����H�<$��H��u/���H���u7H�T$dH3%(�uH��[�f�1��پ����R���������USH��dH�%(H�D$1��`~O��u]H��H��H�$H���F��H�<$��H��u3��������荭��x4H�L$dH3%(H��uH��[]��1��A�������e���0�����}OATUS����I���{������9�u5��N9���H�tL���*���赝��H�T	��u:[H��]A\�f�H�tL������莝�H�T-��t��k}O�
��N�
�V}OH�=G�N[�H���]A\��v���1���}�f���H��@��t�}����֦�$H���@�������UH��H��SH��(H�t$H�t$dH�%(H�D$1�H�D$���H�|$��H��u<H�|$����H���s��u2H���|��H�L$dH3%(uH��([]�D1�詼���ҵ���ff.�f�ATI��I��L��UL��H����SA��L����f�f���I*$�Y��*M�X�E��~#A�C�L��I�D�f��H���H*J��Y�H9�u�H�0f���H*�^�fH~�H9�tHfH~�H��<������tH��H��u%[]A\�fH~�[]H��A\H��H���f.�[]A\�r��AUI��ATI��UH��SH��H��H�=�{O���H9���H�=�{O�y��H9���H�=�{O�d��H9���H�=�{O�O��H9���H�=�{O�:��H9���H�=j{O�%��H9���H��tH�=G{O�
��H9���H�uM��1�H��L��H��[]A\A]�S���I�$ʚ;H�uM��H��L��H��[]A\A]�g��I�$���fDI�$@B�fDH�uM��1��DI�$@BH�uM���o����I�$�H�uM���O���H�P�NH��H�5XH�81����ff.����SH��dH�%(H�D$1���yO��uVH��H��H�$���H�<$��H��u/������߉�����x0H�L$dH3%(H�DuH��[�f�1�詹����"���Ͳ������ATUSH��dH�%(H�D$1��.yO����H��H��H��H�$H���
��H�<$A��H��uQH��H��H�$����H�<$��H��uC��D���I���u>H�L$dH3%(�u3H��[]A\��1������1��ٸ������M�������AUATUSH��dH�%(H�D$1��\xO����H��H��I��H��H��H�$�8��H�<$A��H��utL��H��H�$���H�<$A��H��uuH��H��H�$���H�<$��H��uG��D��D���B���uYH�L$dH3%(�u?H��[]A\A]�fD1������1������1��ѷ���J���������H��H����t �ۋ���D���xH�H��H�D�@�[�������@��UH��H��SH����t3薋�H�����t3臋�Ɖ�����x(H���[]�fD���H�����u���������ff.�f���H����ATUH��SH��tZ�%��I��H���t2���H�߃�H��t2���‰�D���ٛ��x/[�]A\�胢�H�߃�H��u��s���̐�k��I���������UH��SH��H����t[覊�H��H�߃�t;薊�H��螆�މ����Hc�臆���u+H��H�D[]�D��H����fD���H���������H��h1�dH�%(H��$X1�H�t$0��x����H��$��������x����f��f�H�0�H*L$0�H*D$8�^��X�fH~�H9��BfH~�H��<��������H��H���f��f�H�D$H�0�H*L$@�H*D$H�^��X�fH~�H9���fH~�H��<��������H��H����f��f�H�D$H�0�H*�$��H*�$��^�X�fH~�H9��HfH~�H��<��������H��H���f��f�H�L$H�0�H*�$��H*�$��^��X�fH~�H9���fH~�H��<�������I��H����H�T$H�t$1�L�D$ H�=�tO蘋�H�T$H�T$(H�T$H�T$H�T$(H�T$H�T$H�T$(H�T$H�T$ H�T$(H�T$ H��$XdH3<%(��H��h�DfH~�H��H��H���#���f��kj�H�L$I���Y���fD�Sj�H�������Cj��Y���fD�3j�����fDfH~�H��H��H���-���f�H��I��I��I�����@H��H��H��H���o����/��H�5 �8�!s����ff.����AVAUATUSH��dH�%(H�D$1��jrO����I��H��H�$L���L��H�<$��H��uq輈��tx�����9��NA��A��DE��>��9�DE��So��D��9�D��E��a���xL�O�NL��H�L$dH3%(uFH��[]A\A]A^��1��	���D���u��ډމ�����y��,��1��8�#r��^���	��f���UH��H�5��MSH���'m�H����Xtl�ׅ�Ņ�����th��u3H��H�5�1�H�=����H���Hc�H�D[]�@H��H�5�1�H�=������f�����f�H��H�5�1�H�=�贂�뛉�H�NH�5DH�81�踳��H��H��H�|$H��u�~�H��� H�D$�Nf�@����H�����
��v%�����Gw�H��H�@H� tH�B����u�H�|$葏�	H�=�	H����€���t5�
H�=e	H����€���tH�ƹ
H�=d	�����uxH�����H���DH���H���#���H��$����@��u!@���	����G����������@��tH��H��H��fD�˚�H���fDH�|$��H��}NH�T$H�5"H�81��L��ff.����UH��H�5��MSH����j�H����X��胃�Ņ��=���=�~G=���=�umH��H�5�1�H�=�詀�!�H��Hc�H�D[]����u3H��H�5�1�H�=\�o����D蓚��k���fDH�H�5k1�H�=)�<���f.�H��H�5C1�H�=����f����H�aH�51�H�=�����>�����H�N|NH�5�H�81����ff.�f���AUI��H�50�MATUSH��H���pi�L��H��H�ýOH�0苂�H�5�nOL��I���y��1�H��u!�U1�I��u/�EH��H��[]A\A]�DH�Ǩt)�ԁ�‰U1�I��t�L��A��t蹁����K�������;���f�H��H��H�|$H��u�
{�H����H�D$�Ff�@��ubH�����
��v!��u|�s�H�xH� t!H�x�@��u�H�|$�	��H��H�D$H�p1�趾�����tpH���@H���H���k���H��$�a���@��u2@���Q����fD���@���@��u�T��H����裀�H���fDH�|$��H�jzNH�T$H�5!H�81����@��SH��H�� dH�%(H�D$1����H����E���xkH��������?H�|$H9�w=H�\?H��������?H�<$H9�w5H�|?H��訟�H�T$dH3%(u5H�� [�f��ˣ�H���fD軣�H������{�H�5��8��k�辤�ff.���USH��(dH�%(H�D$1��G���wlH�FH�.H�Ã�uOH���W���H��H�$�K���H��H�D$����H����4l��xBH�L$dH3%(�u(H��([]�@H�^H��HD�룺��#������{�H�5��8�k�ff.���H����wL�t�|��xHH�H��H�D��H�H��t�H�Ǩt�~������;���뻺1�蛎��V��fD��ATH�5c�MUSH���e�(����H�5H�MH���e�D�`H��uH��xNH�8�?��t3H���	H����������=H�6uNH�8��H�{�׻�H�=�H��1��Ʊ�Hc�H�5�H��H��1�迠�D��H���T�H�ߺH�5B��`��H��[]A\��H��t+��u6H�{�m��[H�=�U]H��A\1��X���H�xNH�8��@H��tzH������u[��tFH�otNH�8�f.�H��nNH�8�%����H��tNH�8�����H��pNH�8�����H�9sNH�8�_����H��nNH�8�O����H��tNH�8�?����H�	sNH�8�����H�1pNH�8�������USH��XdH�%(H�D$H1��G�������uH�nH�����H����H�����H�t$�������H�D$0ʚ;H�D$�D$H�D$H�$H�=�gO���H�T$0H9��UH�t$ H��H���%�H�L$HdH3%(��H��X[]�f.���t���k���H����{��f���DH���H��u�H�=�gO�x��H9���H�=�gO�c��H9���H�=cgO�N��H9��UH�=FgO�9��H9���H�=YgO�$��H9���H�=<gO���H9��FH�=�fO��H9���H�=�fO���H9��LH�=�fO�Э�H9��WH�=�fO軭�H9����D$H�$H�D$0@B���@H�|$ 1�����f��f��f�H�0�H*$�Y
��*T$�H*D$0�X��^�fH~�H9�t'fH~�H��<������tH��H���E����]��;���fH~�H��H��H���%���f.�����fD1����f�����fDH�$�D$H�D$0ʚ;���f���i���fDH�$�D$�H�D$0ʚ;�s���f���D$H�$�v�H�D$0�M������}���h���su�H��H�=4��(1��0��H�Ɖ��F��H��H�=�1����H���(�����USH���dH�%(H��$�1��G��������uH�nH�����H��u}H���m���H�t$��f�����H�D$HDŽ$�ʚ;�D$H�D$H�$H��H��$�H��$�H����H��$�dH3%(�zH���[]�fD��t���u���H���Bx��p���DH���H��u�H�=dO���H9��/H�=�cO�۪�H9��"H�=�cO�ƪ�H9���H�=�cO豪�H9��8H�=�cO蜪�H9��3H�=�cO自�H9���H�=wcO�r��H9��IH�=RcO�]��H9���H�=EcO�H��H9���H�= cO�3��H9����es�����H��H�����H�SZ��/�DH��HDŽ$�@BH��	H��H��H��Hi�ʚ;H�$H)��L$�e������#���fD1�����������fD1����H����H�$�D$HDŽ$�ʚ;����f������fD1�H�|$�ti���H�D$HDŽ$�ʚ;H�$iD$��D$���fDH�|$�{�H��H�����H�¿H�SZ��/�DH��	H��H��H��Hi�ʚ;H�$H)��L$�rs�H��$��[���1�H�t$�d���KH�T$ H�D$(HT$D$H�$=?B~
H��-@BH�$i��HDŽ$�ʚ;�D$����H�|$�az�H����*H�t$H�|$I�SZ��/�DH��H��	H��I��H��H��H��H��	Hi�ʚ;H)�H��I��H��Hi�ʚ;H�H�$H)Ǎ>�D$=�ɚ;v-ʚ;H���D$H�$��zr�H��$��c������������p�H��H�=��(1�豨�H�Ɖ��dz�H��H�=�1�薨�H��詳��p�H�5IT�8�`��p�H�5���8�`��p�H�5y��8�`��{p�H�5S��8�m`��hp�H�5M��8�Z`�f.���H��fH�=�iNffH言�H�H�@0H���H���D���'�����������AUA��ATA��U��H���MSH��H�=g_O袅�H��@t)H�@ D�(H��D�`�h�m�H��H��[]A\A]�DH�@ ��f.���ATA��U��SfH�=�hNffH���D���1�H�H�X0�`���H���[]A\�@��H��fH�=�hNffH��H�H�@0Hǀ�H��Ð��U��S��H��HdH�%(H�D$81������|$$�D$ �\$,�D$0�D$(fH�=AhNffH�9��H�t$(��H�H�D$���ljD$ �������t
�T$0�t$(���H�L$8dH3%(��H��H[]��{s�H�����l$$H��\$,H������D$ �D$0�D$(fH�=�gNffH�~�H�H�D$�H��1�H�����H���4v�|$ ���T�����m�8u>H�T$�B$�ЅB t�H�z01��D��f��ډ�H����\�H��$�,����T���D�|$ ���������m�|$ ��D$0����z��f.���ATUS����wh�������u�މ�[]A\�+��H�>I��@��t<�7q�Ń�uCI�|$@��t� q�Éމ�[]A\���諈�����蛈��º1���1��f���AUATI���US1�H��覴�H��tFH�5��MH��H����W�I�ŋM��t�@A�$���t0fH�=fNffH�}�H�H�@0H���H����[]A\A]�D�sl�A�U�H����[]A\A]���US��H��dH�%(H�D$1�H�l$�1�H������t��3��H�L$dH3%(uH��[]������AUATA�����USH��dH�%(H�D$1�L�l$�2��H��fH�=7eNffH�/|�H�H�@0Hǀ�� 賲�H�|H���&��H��H���{��1�L��D���N��Hc؃��u��qk�8��
uH�L$dH3%(H��uH��[]A\A]�1��E[��0��ATUS��H��dH�%(H�D$1������������uDH�t$�ډ��֣����tLH�H�DH�L$dH3%(��H��[]A\��H�>I��@��uD�O��Ń�tD1��@fH�=dNffH�{�H�H�@0Hǀ�����kn�Ń�u�I�|$1�H���O����N{���C����1��K~�����1����S���H��tH���8��H��[H��鬍�@�[Ð���������USHc�H�=����H��H���d��H�5UZOH�TH��H���}^�H�5NYOH�uH��t@��tH��H��[]�DH����H��H��[]�fD��H��H����t�km�H����頟���H����鐟���SH����+	H��1��9������,	�
,	�8i������[�ff.�@��H��(H��dH�%(H�D$1�H��ĀuMH����H�¸H��t$H�<$H��H��H�5�H�D$芰�H�D$H�t$dH34%(uH��(�H�V(�蕑�D��H�5�M�S���AWAVAUATUSH��xH�|$H�t$H�T$dH�%(H�D$h1��
��H�\$H����I����XH������������H��H�\$0�^�H�hH� �,L�hI���.�H��H�=��b���H�}I�u���f���Hc�H�D$0H�D$8H�D$0�����M�l$`L�t$M���pL���w�I��H���sH��� �?H����H����H���U
1�L��袒�H���v�L��I��芒�H���v�H�T-H�t$@�L�t$HH�T$@H�D$P�ߒ�L��H�@H�����H�D$H�D$8H�D$�)H��H���H��tH��$t��u=��������H�L$hdH3%(���;	H��x[]A\A]A^A_�D��u�H�l$H�l$(H��ut@H���(e�H��H�D$(H���/	H��边��H�D$(H��I�|$xH��H���ֺ��I�D$xH�D$H�D$81�H�D$�i������X���H�l$H�l$(H��t�@���>L�mL��������p���H���Hc�H�>���H�h�����H�D$0H�D$8H�D$0f�H�|$�Vo�H������H9�UO�0H9�UO��H9�UO�6H9�UO��H9�UO��H9�UO��H9�UO��H9�UO�H9�UO��H9�UO�CH=�
�H���A�D$A� ���� A�D$AH�|$1�H��t�H�5�7��0����A�T$A�����	�A�D$A����H��1����H��H�D$0A�� ��L�mI��u7@��tH��t,@��u&H���H��uH�=�TO�.��H�|$0H9��QH�D$0H�D$8�!��H�l$(�H�D$0H��芏�H�D$8H����H��t�uH���H����H���Zs�H�l$(H�D$8H���I�>��H��tH���0s�H��H�|$0��Z�H�@H�D$@H�D$8H�l$PH�D$H�f�H�D$0H�l$0H�D$8H���i��H�D$0����H���H�������rH���Zg���yH���Ig���hH�؃�H���A�H�D$8H�|$0�Z�H�@H�D$@H�D$8H�D$PIH�D$HH�t$@�H�D$X�Ŏ�H��H�@I��$�H���j���I��$����DH��H���H���7���H��$�-���@���M���@������H�|$(�?l�H;�RO��H;SO��H;�RO�}H;�RO��I�|$x�H���ٶ��I�D$x����I�D$���fD胊�H�@I��I�D$`�v���fDI��A���^������}������f.�A�D$@��KH�|$��A�D$@1�H��t�H�5���-��������A�D$@���	�A�D$@�N����I��$��H������I��$��%���fDA�D$@�eH�|$H�������1�H��t@�����e�…��gA�L$@A�T$X�����L���Xp�I������H�H�ƒ�H�������1�L�k�HDH����I9��8L��J�<��$���H��I���d��tL���d����H���Lc��� u�H�CI9���H�C �f�1�L���Ƌ�H���o�I���4���fD������5���fDH�D$8�B���f�A�|$@�H�D$H�D$8H�|$���H��H�D$�c|�A�L$@�H��H�D$��V�H�@I��$����H�D$8�H�|$0���DH���(���H�è�K�����H���g����l���@H��� �
H�CI9�t�H�D$8H�|$0�N���I�|$x�H�����I�D$x�#���A�D$@� �H�|$�� A�D$@1�H��t�H�5���@+��������A�D$@��	�A�D$@����H�|$8��m�H���X�H�l$(H�H�DH�D$8���I�|$x�H���i���I�D$x���H�|$�o�A�T$@�����A�D$hA�T$@�c����/z��o���H�D$���H�D$����A�D$A���MO���H�|$H�t$8H�D$8���H�|$8��H����A�\$lA�L$A���H�D$��|���H�|$(��P��H���X���I��$�H��H���u���I��$����A�D$Aui�JMO��uZH�|$H�t$8H�D$8�.���H�|$8��H��u(A�\$pA�L$A�Q���H�������1��?���H���1��3�����\��觰��H�0[NH�5�H�81��Ϗ�H�[NH�5��H�81�跏�H�[NH�5��H�81�蟏�H��ZNH�5e�H�81�臏�H��ZNH�5�H�81��o��H��ZNH�5�H�81��W��H��ZNH�T$(H�5��H�81��:��Hc�H��ZNH�5��H�81����H�hZNH�5�H�81����H�PZNH�5��H�81����H�8ZNH�5	�H�81��׎��r���H�ZNH�5��H�81�躎�f.���ATI��UH��SH��H��H��H�;葛��tH�{H��tL��H����X�[1�]A\Ð�+g�L��H��H�CH���X������SH��H��H��H���:���tV��tH��t,��u'H���H��uH�dYNH��H�5��H�81����H�IYNH�5^�H�81�����1�[�ff.��AWAVAUATUSH��H�$H��h�t$I��L��H��H�T$ M��L�L$(dH�%(H��$X1�贖�H�xH��H�H��Hǀ�H��1�H)�������H�I����H��tH���H���t���H����T$�k@��L������	�@�k@I���@�l$% ����L�3H���RI�nD�}E1�E1�E��us�L�A��	tgM��LD�A��H�=6��c|�H���/M�����A��=��E1�A��/A��I������H��D�}E���EA�� u�M��t�M����I��M)��DL�3H���1�H�������wH�zH��tH�zH�T$P��sy�H����H���Ru�H�C�C@�H�{�+�|$L�t$@H�D$@��Hc�H��舖�L��H�@H��H����s�H�CH� ��H�PL�`H�T$8L�l$8I�I9�v.f��L��H���s�L�|$8L���sc�I�DH�D$8L9�rԺL��H���ds�H�|$HH�l$H�p�1���H�H�t$HI��L�fH� ��L��H�n�u�H��M����I�ML�kH�D$(H�D$HH�D$(H��$XdH3%(�H��h[]A\A]A^A_�H�qH� �x���H�q�o���I�n���DA��H�=��0z�H��u�M�������1�����I��Āu)H����H������H�T$(H�5�L���|�����I�G(��H�C�&���M����H��L)�M��LD�I�E�H��wyH�D$1�f�H�D$L��L��H�LH�Y�H��L��H�L$N�<L����Q�H�L$��u C�</�����DH9�sH�L$�@x�H�iH9l$w��l$1���@�k@�8��I�vI��H�@I� �����t,<	t< �9f�H���< t�<	t��L�{I�I� tI��a�1�L��H����D�L��H�@H��H��܃�C@��H�H�% ���f�H�P�/���I�v�b���1��w��H��H�@�D$��~N�D$L�d$ L�t$H��M�|�fDI�$L��I��H�D$H��d�H�T$HH��H��H�RH���{p�M9�u�H�k�C@�X����Z���L��H�n�4r�H��M���0���L��H��H���:��H������f�H����tC<	u	�=<	tH���E��u�H��H)�L���p�H�5۴�L����o�H���j���1����-~�ff.�f�UH��AWA��H��AVAUATI��SH��H�U�H�M�dH�%(H�E�1�諐�Ic�I��A����H��H��H�E�H�BH��H%�H)�H���H��H9�tH��H��$�H9�u����H�\$H���H����E�����D���xh��E�g�Ic�H�<��@���H�E�H����E����H�;�!���H�E�H��tH��A����H�;H�E��c�H��tPH��� �GH����H���pH��H�L�u�L��H�U�H�@H��k�L���b�H�}��l�H�E�I��E1�DL��A���|k�I�?�l�L��I��I�G��tb�E9�|�H�}�H��u%�E�H�;��tA��������HE�DE�L�M�L�E�H��D��H�M����H�}�聊�H�U�I�EH�U�H�U�H�u�dH34%(��H�e�[A\A]A^A_]��H��L�4�H��=udL��H�}�L��H���dI�L��H��H���H���L��H���j���8���DH�xu3H�@ ���H)�H�L�����f�E���O����{�H���_�H�OPNH�5��H�81����E1�����fD��AWAVAUATUSH��H�|$HdH�%(H�D$x1����H�D$H�D$0H���H�D$H���H��L�=���I�����H�D$ H�D$`H�D$8��DH����H9D$��H�D$ H�L$H��H�CH� uH�C H�8�U�H�D$H� ��H��H�[H� ��L�kH�CH�x@�����UU�I��H�CH� uH�C H�x�8b�H�SH� uH�S H�zH����@�����
U�H�H�lHcD$H�|$HH��H�t�|��H�D$H�D$H��� ����H�D$H�T$H;P��H�D$H�@ ����Kl�I���Q���H�C L�(�,���@H�[ ������l��l���fDH�\$(��H�\$8�f��|$t���0�ޑ�1�H�����H��L��L�l$`D�d$h�l$lL�t$p��V�D$p���t�H�\$(�ljD$(���HcD$(H��H�l�lG�H��H�h�9��{�����fD�+[�I��H�D$0L�@xH�XxH���M���j�D$D����H�D$0L���M��t�L$DL��H��H���Х���D$DL�|$0M���M�����L$DL��H��H��襥��M����D$DM����H�D$I�D$H�D$8I�$�� �(�H����H9D$��H�D$8H�L$L�<�I�GI� uI�G H�8�R�H�D$ I�GI� uI�G H�x��R�L��H��H�D$�D$(H�L�tL���Zo�l$1�H���u%��H����H9��QH����tWH���R��xKH���sR�H��L��D$�o�H��I�$�� u�I�D$븹����L��H��H���~����D$D���DH���D�L$9L$u,I�$H�D$�� ����H�D$I;D$}mI�D$ ����Hc\$L���H�\H���6�HcD$ H��L��H�t�J���L��H��L��I���J�L��L���<n�H�Ũu��t���H�D$0�L$DH�Px�HtL�h H��t$H��� �H����H��H�D$0H�x8��H�T$0�B@H����D$��<t?H��u:H�D$HH�D$`H�D$H�H�T$xdH3%(��H�Ĉ[]A\A]A^A_�<�1�|���H�@H�źYH��L�t$`E1�H�5!��ej��H�KL�t$I��H�H�L$�� t~@H����I9��OH�D$J��H� tsH�PL�rL�hI��trL��L��L����A�M��tA��uL��H���@b�M��tA��uL��H���*b�H�I���� u�L;{��H�C J��H� u�H�P L�rL�*I��u�H�t$1�L��L�l$`�.8��H������H��IN�T$(H�5	�H�81��V~�fD�W�H��H�@H������L�t$`1����H�54���H��H�@H��I���N��H�E�Ā��H����H�<�譈�H��H�@I�EI�E tI�EM�eH�D$XH�l$XI�I9�v6f.��H��H���e�L�|$XL���U�I�DH�D$XL9�r�H��H��H�D$X�e�L��H�\$`�b�1����:�H�t$`I��H�nH� t4H��H�^�1g�H��H��u4H�D$0I�L$L�`(L�h0�O���H�E(����H��H�^�f�H��H��t�H��H��H�����H���H�r���L�t$���H�HN�T$(H�5U�H�81��|�L������s�fD��AWAVAUATUSH��(H�|$dH�%(H�D$1�褅�H����I�H���D�(H����H�U1�L�e�f.�H��H����H9���L��H��H� t~H��L�pI�FI� uI�F H�xH��t7�eM��I����3��uD���o8�L���@�L��H�@�G2�H�UH���� �v���H;]} H�E H��H� u�H�@ �f��I�D�(H�D$H�D$H�D$H�D$H�L$dH3%(uH��([]A\A]A^A_��q���AWAVA��H�>�MAUI����ATA��1�U��SH���p^�H��L�x �@uL�x H��D��L��D���N��uA�GA uH��H��[]A\A]A^A_�H�*FNH�5��H�81���z�f���AUf�1ɺATUSH��xdH�%(H�D$h1�)D$H�l$)D$ )D$0)D$@)D$P�T�H��H�$蘃�H�<$�PH��H��L� �1������t"H�L$hdH3%(H�H�Du9H��x[]A\A]��G�H���H��D�(�c���H��H�D$L��D��H�$�l���gp����AUATI��US��H��8dH�%(H�D$(1�fH�=�@NffH�W�L��߹H�H�h0�2S�H��H�D$�ł�H�|$1�1�H��H�D$H�D$H�CHHDž��D$$�?������7�CA���H�L$(dH3%(��H��8[]A\A]�f�1����g��H�5p�MH��I���1�L��I���JD�A�EL�����t;�CAA�}����u��uX1��@���{���H�D$H�3H�D$H�D$�!����^����o�H�D$H�H�D$H�D$�
F�H�ދ8���H�=E�H�+�B�A�uH��H���]����H�5��H���i`�H��H���.J�H�D$H�D$H�D$H��=NH��H�8��J�H���eT�D��UH��SH��(H�|$dH�%(H�D$1����H��1�H��tH���H������H���H�D$H�D$H�D$H�D$dH3%(uH��([]��
n�ff.�f���H��(H�|$dH�%(H�D$1�����H�D$H�D$H�D$H�D$dH3%(uH��(��m�D��SH��H��H�=N�H��dH�%(H�D$1�H�T$�@�D$��uH�D$dH3%(uH��[�H���n�|$�A���Lm�ff.����AWAVAUATUSH��H��hH�<$H�T$H�L$dH�%(H�D$X1�H��t4H�~H��H�Hdž�H��H)�������H�H�F H�$�@@�H�$L�``M���]H�$�@@�oH�$L�`xM����H�$H���H����H�����E1�L�e�KH����I9�}lL��J��H� tOH��H�8�HG��I���-��uD���R2�����I��H�E�� u�L;m}H�E J��H� u�H�@ ��H�$�@@@��H�$L���M����H�$�x@��H�$�@A������H��t	H�CxH��uR�B�1�E1���A�����7�����-����B�H�\$XdH3%(D���xH��h[]A\A]A^A_�H�0�� ��H�pH�{8�ԗ���f�H��t�K@����H�@H���H�$H���H�xH� tH�x��+�A�ǃ������H�|$H��ttH�T$H��tjH�5�!�v1��K�����hX������H��t�K@�3�CX���{��C����-C�A�ǃ�������H�|$tH�|$�M	DA��������DI�D$1�L�t$0H�D$ H�D$@H�D$�L�H����H9��k���H�D$ L�<�I�GI� uI�G H�8@���9��D�A��H����L������u�����I�GI� uI�G H�H�|$0H�D$@H��������?H9��\H�D?H�|$8H�D$HH��������?H9��*H�D?H�t$�H�D$P�Il�H�@H�{`H��H�����L��I�I�G�� uI�G H�x@����H�H�|$0I�WH��uI�W H�z@��t\H�H�|$8L��D����0����PH��I�$�� �����I;l$����I�D$ ���f.��[[�����fD�Z�H���fD�{Z�I�H�ǁ� �b���f.�H�D$(��g�H�t$(H�@H��H�C`����D�3g�����fD�#g����fDH�$�xh�́�H���|����ChH�$�K@L�`xM���u���H�@8H�hI�$�� ��H��H����H�T$I��M����J��H�\$ E1�H���I�D$N�4(I�FI� uI�F H�x�B�B�D�I�FI� uI�F H�8�B�B�D�I��� �nH����H���MI��1�I�F������B�D�J�D�����I��L9��AI�$�� �d���I�D$ �_���f.�1�M�u�DH����H9�����L��L�<�I�GI� uI�G H�8��A�I�WI��I� uI�W H�z�A�I��H��tH�L$H�T$H��D���������&���D��D����'�����D��H���~q�I�E�� �a���I;m�����I�E �a���fDH�P �pt��G\��H���f�L�4$A�~p��|����A�FA��^���H�$�xl�2C���J���H�|$H�������H�D$H���v���H��H�5z��,��b���f.�L�d$I��A�����H�D$A�M�����A;M��A���������7�A�ǃ���aH�T$H�t$A�}肔����tH�T$H�t$D���������bD��E���Ip�I�UE�uI�E����H���u'�GfD���!p�I�WA�����H����%H��L�|A�wA�?�'&���u�f�H�|$H���j���H�T$H���\���H�5:�A������b+��7���A����
���D���&�������D���*�����f�H�|$H���
���H�T$H�������H�5P5A������+�����DH�������@M�|$L�|$�E���f��[=���y���@1����f�I�~~�M�v ���H�\$ H���rH�t$H�
Vy��� H���	a�M���*���L�D$L�ME1�M��I��I�f.�A�y�M��E1��@��tSL�YM9���K�T��H��H��H��H��H�+0y�I9��kI���H��H��H��H�+0�@I�Յ�u�I�H9�r�H�� H9�s;x�t�L9��(�;8t�H��;8�,L�`H�� H��L9�r�I�D$I�I�� I9���L�d$L�t$E1�L�|$DM��DI��N�dA�<$�����I�|$��A�D$H��t!L��L��H�މ����������A�D$A�<$���#����s���A�D$A�|$��tL��L���
���������A�|$�8m�M�D$A�$����I���tUL��H��H�l�S���H��I9������@I�I�D$I�� I9�����I���/����I�	��I�EL;l$��I����f�H�|$H���*���H�D$H������H��H�5D��%(�����H�t$H�
�v��� H���^����f�H�|$H������H�D$H������H��H�5���'����H�T$H�|$H�5���'������1���L$ �z�L$ ���A����uHA�E����H�t$I�� H�FI9�����H�D$����D������!�������D���k��^����¾��1����Dz�A�ǃ��u�H�|$H������H�T$H�������H�5���'�����H�|$H������H�D$H������H��H�5��A����&���H�|$H�������H�T$H�������H�5�E�&��q���_�D��E���%��\�H�|$H���\���H�T$H���N���H�5Ⱥ�Z&��/�DAUH��H��1�ATUSH��H����#�����C@t(H�H�s(H�xH� tH�xH��[]A\A]�Qw���H�{�H��t>H�SH�C(L�bI�t$H� u7H�_H��t<L�hH��L���T��6�(��t{H����[]A\A]�fDH�_H��t�H��u�H���z!���5�(��u�H�+�I�\$I�$L��H�=���J!����5�(H��[��]A\A]�@H��I�\$I�$M��t�L��L��H�=Ÿ�aS��Y���ff.����AUf�1ɺATUSH��dH�%(H�D$x1�)D$ )D$0)D$@)D$P)D$`�&A�H��H�D$�p�H���q�H�t$H�T$H�=����0�D$��uNH�l$ �PH��L�+H������A����H���H������H�D$H�D$L��D��H�D$�w�H�|$�k��F��Q��|$�X|����PXH����R���AUI��ATI��UH��SH���D4�L��L��H��H������H�������[]A\A]Ð����!����AWAVAUATUSH��L�--NH�|$L�d$ L�|$L�t$dH�%(H��$�1��D$H�D$�D$�.f�������d��o�����1�L��L���������uuI�}�+V�H��-NH�8�V��7������}L��赍���m�ÉD$�E3�L��(�l$�g�����|���z����}1������"O�G�H�T$H��t�D$�H��$�dH3%(��uH�ĸ[]A\A]A^A_���[���H��1�������tH�H��H�D��{���ff.���USH������H������t\1�1�H��+NH�8�U�H��,NH�8�
U�1��C����������������������H���[]ÐH�~1�H����H�;H��t�H�5���������w����H�	+NH�8�T�H�,NH�8�zT�1��������1��t1���/��1��@�+�H�=���_�Hc؅�������H��H�D[]úH�5��o������H����H�=A1Ҿ�}T�Ã���������+e�1����R����F����:��������1�� ��w���H�=�1Ҿ�T�Ń���N�������d�1������������������������������1��D��0�H�5*��8�v �fD��USH��H��OH��u&H�-��H���CF�H��H��OH��t�H�-}+NH�EH��u4H��.NH�8H���(��t21���������H��[]���u<H�xH���(��u�H�}1�1�H���<Q�H�Ǩt=�3�H��[]�f�H��tJH��tT�u(<t\H��*NH�8�s���D�K�H��[]�@H�)%NH�8�O���f�H��*NH�8�7����H��&NH�8�'����H�i)NH�8�������ff.����H��dH�%(H�D$1������tH�H�DH�L$dH3%(uH����k>��u����W�H�=<-NH�T$�$�*�|$�K�ff.����SHc�H�� dH�%(H�D$1�fH�=�'NffH��>�H�H�xt>H�D�H�=_�H�$� +�H��H�D$H��%NH���H���<���uK�D��PXH����w2t1��7�H�H��t�1�H��t�H�Ǩt	��1�����sI���Һ1���A���PXH���M���SH�� dH�%(H�D$1�������u6fH�='NffH�=�H�H�����H��tH��H���>����6�H�H��H��H�$H�D$�E��8=�H�޿H���H&�H��$NH�޿H�$H���H����;�1��A�D��PXH���A7���H��1�dH�%(H�D$1�H�t$�e�H�D$dH3%(uH����U�f�AWAVAUI��ATI��USH��hH�t$ L��$�H�T$(L�D$L�L$dH�%(H�D$X1�M��tM�vPM��t	A�D$H�D$PH��H�D$�O�D$0����LI�������D$0���3L�L$L�D$L��H�L$(H�T$ H�t$����A��M����A�$�����|$TH�\$L���l$P�H�މ�跆��I��H���{�D$L�D$I����H�|$tyH�|$t)H�T$L�l$��H��L���q���H��xA�DfD���y��:@�[+�A�D$H�L$XdH3%(D����H��h[]A\A]A^A_�fD���1�M��t�����+�1ۋ�D$4H�D$H��H��H�D$8D�}fDIc�L��H�t	�hK�H�����t`�E�P9�M����Hc�L��H�t�=K�H�����u�}���;o�A�ǃ�������^�}��D�}�f.�H��H9l$8�o����\*�T$4��$���������[����;*���D$�D$L�:�M��tB�D$Ic�H��H�=�D$LA�D$��%�D$LA�D$��)�L$�A��������M��u�D���V&���@�|$P���|$T����e����R�@��SH��H�� dH�%(H�D$1�H�|$H��j����ZYH��t�T$�H�\$dH3%(uH�� [��LR�ff.����ATUSH��H�?����H�;L�cH�k��d�H��M��H�5��H�H H�xHPI��H���[���ZYH�[]A\�f���H���s%�H���f���UH��1�SH�ӺH����4�H��H��H��H��[]�w����H���1��4�1�1�H��H����v��ff.����AV�GAUATUS��)�H��HH�H���e�I��L�hH� tL�hL��M�t$��_�L��H��H���7J��H��L���EZ�Å�to�؃��t��u L��1�A��W�[L��]A\A]A^�@��"uZH���QH��L��M����g�I�$ tM�l$L���]_�H����L���(2�L��H���I�[L��]A\A]A^�1�L���7W�H�5*����i�f���AUATUSH��hdH�%(H�D$X1�H���XL�oH� tL�o�F�}(�H��HH�H����i�H��L�`H� �H���^�H��H��H����H�L�,$f�H�D$HL�d$A�H�l$H��D$D$(D$8A�1�H�����H��H�=�o���.W�A�Ņ�����	wFL��H���t61�H�߽�V�H�L$XdH3%(H����H��h[]A\A]�D��"��H�t$H����wzH���)f�H�CH� tH�CH��H�D$�]�H�D$�E����L�`�����w���fDH�D$H���T���H�x �A�1�H��H���lU��H���1�H���]U�H�5�D�����yN�f���AUATUSH��hdH�%(H�D$X1��MT�F���&�H��HH�H���
h�H��L�hH� tL�hH����\�H��H��I���#G�H�|$H�L$1�H�D$H��H�D$HH)���L���H�L�l$�,$H��L�d$A�A�1�H�����H��H�=�s���QU�A�Ņ�����	wAL��H���t11�H�߽�BT�H�T$XdH3%(H����H��h[]A\A]Ã�"ulH�t$H����w^H���Ud�H�CH� tH�CH��H�D$��[�H�D$�N���DH�D$H���y���H�x ��?�1�H��H���S��m���1�H���S�H�5��D������L���U1�H�5����H�=��SH���A=�1�H�58p��H�=t��,=�H�=h��0�
H�=Y��$�
�����H�5�H�=���\�1�H�5C�H�=��G�����H�5+p��H�=��/�����H�5���H�=(�������H�5���H�=���
�����H�5su��H�=���
�����H�5���H�=����
�����H�5���H�=���
�H�=����0�H�N�H�5��H��H��
f�H�;�H�5���e�H�;�����H�
�H�5���*�H�;1�H�B�H�5���*�H�;�����H���H�5ɩ��*�H�;�����H�o��H�5���*�H�;�����H�A�H�5��*�H�;�����H���H�5˩�z*�H�;1�H�����H�5ө�b*�H�;1�H���H�5s��J*�H�;�����H�t��H�5D��M�H�;�����H�����H�5�M�tM�H�;�����H�5���H�5v��YM�H�;�����H�J���H�5a��>M�H�;�����H�����H�5N��#M�H�;1�H�'���H�5?��M�H�;�H�|���H�5,���L�H�NH�;H�5�H���H��H�eO�X�H�YOH����H�INH�8H�5���"`�H�=3O1�H��r��H�5��#�H�-�NH�;H�5ʬH�U��H�5_��H��H��O�Q�H��OH���6��NH�xH�5.��_�H�uH�=�OH�
̡��H��q��� 1�H�=�O�����H�����H�5 L�(�H�=�O�H�nq��H�5���"�H�=kO�H����H�5Y���"�H�=LO�H�����H�5��"�H�=-O1�H�$`��H�5���"�H�=O1�H�����H�5xd�|"�H�=�O1�H�̤��H�5�j�`"�H�=�O1�H�`��H�5���D"�H�=�O1�H��_��H�5R��("�H�=�O1�H�(_��H�5?��"�H�=�O1�H��^��H�5+���!�H�=iO1�H�p^��H�5���!�H�=MO1�H�$^��H�5��!�H�=1O1�H��]��H�5��!�H�=O1�H�|]��H�5�s�!�H�=�
O1�H�0]��H�5���d!�H�;1�H��j��H�5���,J�H�;1�H��o��H�5���J�H�;1�H��}��H�5���I�H�;1�H��u��H�5q���I�H�;�H���H�5^���I�H�;�H�
���H�5(��I�H�;�����H�����H�50��I�H�;1�H�}��H�5��{I�H�;�H�����H�5��`I�H�;�H����H�5���EI�H�;1�H�)n��H�5��-I�H�;�H�5��`�H�;�H�5ܥ�`�H�;�H�5ҥ�q`�H�;�H�r���H�5����H�H�;�����H����H�5���H�H������D�H�;H�5��H��H���`�H�;H��H�5���`�H�;H��H�5~��_�H�;�H�5y���_�H�;�	H�5o���_�H�;�H�5g��_�H�;�H�5^��_�H�;�H�5V��_�H�;�H�5O��~_�H�;�H�5J��j_�H�;�H�5F��V_�H�;�H�5>��B_�H�;�
H�58��._�H�;�H�51��_�H�;�H�5(��_�H�;�H�5"���^�H�;�H�5���^�H�;�H�5���^�H�;1�H�j��H�5Ц�2G�H�;�H�����H�5���G�H�;1�H�kj��H�5���F�H�;�H�����H�5Ȥ��F�H�;1�H��i��H�5i���F�H�;�H�����H�5���F�H�;1�H��i��H�5?��F�H�;�H�����H�5a��~F�H�;�H����H�5L��cF�H�;1�H��i��H�58��KF�H�;�H�|���H�51��0F�H�;1�H��_��H�5��F�H�;�H��^��H�5���E�H�;�����H�^�H�5����E�H�;1�H�.NH�5˟��E�H�;�H�5ͥ�6]�H�;�H�5ԥ�"]�H�;�H�5���]�H�;�H�5���\�H�;�H�5����\�H�;�H�5����\�H�;�	H�5���\�H�;�
H�5���\�H�;�H�5���\�H�;�H�5���\�H�;�H�5���n\�H�;�����H�����H�5����D�H�;�����H����H�5���D�H��1�L�
�jH�;L�z�H�
m�H�m�H�5l���H�&	O��cN�0�H�;H�5J��FNXZ�gA�H�;H�57�H��O�QA�H�=�O1�H�g��H�5�H��O�D�H�=�O1�H�ng��H�5���D�H�=�O1�H�g��H�5ݢ��C�H�=_O1�H�g��H�5����C�H�=KO�H�Dž��H�5���C�H�=$O�H�����H�5���C�H�=
O�H�i���H�5y��mC�H�=�O�H�چ��H�5Z��NC�H�=�O�8�H�B�H�5K�H����>�H�=�O�8�H� �H�5)�H����>�H�=�O1�H��t��H�5���B�H�=gO1�H�v��H�5���B�H�=SO1�H�RU��H�5��B�H�=/O1�H��y��H�5ǡ�B�H�=O1�H��y��H�5���~B�H�=�O1�H�nv��H�5���bB�H�=�O1�H�2s��H�5b��FB�H�=�O1�H�և��H�5F��*B�H�=�O�H�w���H�5X��B�H�=�O�H����H�59���A�H�;H�54���>�1�H��d��H�5#�H��H�;O�A�H�=/O1�H��d��H�5��A�H�=O1�H��d��H�5��A�H�=�O1�H��d��H�5۠�jA�H�=�O�H�����H�5���KA�H�=�O�H�(���H�5М�,A�H�UNH�=�O�H�5��H���
A�H�={OH�ڹH�5p���@�H�=`O�H�́��H�5Y���@�H�=AO�H�=���H�5B��@�H�="O�H��r��H�5+��@�H�=O�H�����H�5��s@�H�=�O�H��o��H�5���T@�H�=�O�H�Q���H�5��5@�H�=�OH��1�H��H�5؟[]�@��H��NH�8����u<H�x�E�H����H�����uX<��H��NH�8��H��tJH��td�u<t|H��NH�8���DH�Y	NH�8���f�H�A	NH�8�7�H�NH�8��H�NH�8��H��
NH�8��H��
NH�8��H�i
NH�8�s�H�Y
NH�8�����H���H�=��)�H�=
/H��O��(�H�=/H�dO��(�H�=7�H�DO�(�H�=<�H�$O�(�H�=-�H�O�(�H�=fH��O�w(�H�=��H��O�_(�H�=�H��O�G(�H�=�H��O�/(�H�=��H�dO�(�H�=[�H�DO�'�H�=��H�$O��'�
H�=��H�O��'�H�=��H��O�'�H�=��H��O�'�H�=��H��O�'�H�=A�H��O�o'�H�=;�H�dO�W'�H�=5�H�DO�?'�!H�=��H�$O�''�H�=�H�O�'�H�=�H��O�&�H�=�H��O��&�H�=ǚH��O��&�H�=ȚH��O�&�H�=��H�dO�&�$H�=�H�DO�&�(H�=#�H�$O�g&�$H�=;�H�O�O&�H�=p�H��N�7&�H��NH���W����Hc��HcWhH�H��H���H�G H�@(H�xH�������SH��1Ʌ�t�C���[���H�1��f���1��f�����fD��1��f���H�H�H��tH��H����1�H��Ð1��ff.�f���H�H�@H��tH��H����1�H���1��ff.�f���H�w�$�f���H�w��f���H��PO�H�8�HE��f���H�G0H���Cz�H�@H�����H��OH��@H�D�f���H�F H������H�F H������H�F �@H�D�ff.�@��H�]OH�H�@ H��f.���H�=OH�H�P H�G0H��tH�@H9º�HE��ff.�@��SH��H�(H�5�H���e�H�{(��H��[�G��G��~aATE1�UH��S�DA��D9e~>�EH�]D�}Hc�H��H�H�{�;�����v�H�{A���v;�D9e�[]A\�����H���S;�1�H���ff.����H��H�?�0;�1�H���f����;����AVAUATUSH��H��XH�� dH�%(H�D$1�����H�{x����H�����:�H�����:�H����:�H����:�H����:�H����:�H�{��0����t*H��L��L9�tDH�}�_:�H�mL9�u�H���H��t|1�H�5�������N��~d1�L�t$L�l$L�%��N�H���NHc�H���L��H��L��H�D$�#���tH�D$H�H�@H��tH�|$�Ѓ�A;,$|�H���H��t1�H�5Y������H����9�H�D$dH3%(u
H�� []A\A]A^��v4�fD��PXH�5��1�H��H�=n�N��=�ATUH��SH��H��H�G`�Gh�@H�t$��@Hǃ�H�CXǃ����H�{(H�Cx�3�H����(�H�� 1��DH��HǃH��H��H�D$H��uH���H���H��[]A\��H�|$�v�H�|$�<�xI��uH���$��t'H�@NI�T$H�5��H�81���<�f.�H�|$�6#��@��t;��t'��uH�J8�f.���u#H����H�����H���PH�=j1��9 �f�AWAVAUATUSH��H��XH�|$dH�%(H�D$H1�H��u-H�{ 1�H�L$HdH3%(�FH��X[]A\A]A^A_�@@��u���tʃ���H�C H�{H�t$H�D$ H����H�T$ ��A�ą���H�{H�T$ H�t$H������{(�<H�l$H�U����H�Ѓ�����H�
d�Hc�H�>��f.�H������yH�D$H�L$0H���D$0H�5�H�\$@H�xH�D$8� 4�|$0��D�����fDH�mH��H�������u�H�s H�|$H9�tH�wH��t@��u
�+�H�|$L�gH��L���W�����u�H�s H�l$L9�t%H�uH��t@��uH�����fDH�l$H�D$ H��H��H�C �S�������1���H�l$ H�l$����H�t$�=�H�t$H�xH�CH�{�Y���H�D$ H�C 1����{(�~L�%�IO�D$(I�<$�H�T$(H�5�=H�����I�<$��H�|$�D$(H�����I���H���H��NH��{(H���H�ڛH�=5�NHD�H�5�1��9������H��
L�m��I��M�����1�M�t�H��L�������;���H�s L9�tH�|$I�t�H��t@��u��H��L9�u����f.�H�L$0H��H���D$0H�5���H�l$8H�\$@����|$0����H�D$H��L�`L���g����������H�s H�l$L9��-���H����H�l$����H������H�l$H�}�� ��H����Hc�H9��fq�A9��gMc�H��L���!1�H��H��I��������+���L�k H�l$M9�t/H�����N�,�M��tA��uL��H���k�H�����H�l$H�}A���� �o���H�}�m����H����H�l$�N���fDH��H�t$(�
H�|$�a����rH�D$(1���tc@A��N�l�I��$tJH��L���������g���H�s H�D$(I9�t)H�|$J�t�H��t@��u��H�D$(f.���9(w�H�l$H�U���H�t$H�T$�y:�H�t$H�T$H�xH�CH�{�S���fDH�D$H�D$0H�D$�d���L�eL�m�i���H�l$H���z���tzH�}�D�H�l$H�UH�E uH�U��������H��L�l�L�eH��L���$������l���H�s L9�tH�|$H�uH��t@��u��H��L9�u�����H�}H�� ��&�@�z���H�D$H�L$0H���D$0H�5�H�\$@H�D$8H�D$(H�8�/�|$0��������H�|$0�����H�|$0�������@,�H��H�
����
H�5U��u���H�=>c1��w�@��uH�O���H�|$����H��t!H��tH@��u3@��tH��MH����H�x�MH����H��MH����H�z�MH����H��MH��u���ff.���AUI��ATI��UH��SH��H�ZH�?H�������u^H�s H9utH�uH��t@��t]DI�}H���l�����u0H�s I9ut0I�uH��t'@��u!I�|$�D$��D$�
A�$�H��[]A\A]�I�|$���I�}H���
�����t���@��ATI��USH��H��H�jH�;H��������u#H�u H93tH�3H��t@��t$H��[]A\�A�$H���[]A\�DI�|$�D$�R�D$H��[]A\�D��UH�o(SH��H��H�������t�����uǃ�H���;H��H��[]���@AUATUSH��H�����t���wl���nl���{H�kuH��H��[]A\A]�H�=��N�H�5ޔ���L�kI��H��NH��u H�ؔ�H����H�_�NH��t�L��H��L�����1�H��L���w��L���/�ff.�@��UH�o(SH��H��H����;uf�1��y�;t��H��H��[]�����UH�5dSH��H��H��H�o H�}(�l�H�}(�c�H��H��[]�f���SH�_(H���/��H�S[H�DP0�@��AWI��AVI��H��aMAUM��ATM��UH��H���SH��(dH�%(H�D$1��;�@��H�X H�P H�L��H��H�L��H�D$������N���CH�E0H����j�H�@H���H���H���H���臐��L��L��H���iNH�D$H�D$H�D$H�D$H�L$dH3%(u!H��([]A\A]A^A_�fDH�P H���K����'�ff.�@��SH��H�w(H� ���H�C�[���USH��HdH�%(H�D$81�H�G0H����i�H�hH�|$H��H��H���H�D$�9�H���1��H�|$H�\$(H�D$ H��t]H�T$H���p���u<H���H��tbH�T$H�5�O-�H�L$8dH3%(uRH��H[]��H�D$��f����H���H���H�D$H��u��6�H��H�����h&����USH��H�G0H��t]H��H��H�h�^�H���V��H���H��H��tH����H��H��[]�D�H�D$��H�t$H��H�����H����H�����H�%�fD��SH��H��H�wH�dH�%(H�D$1�H���$���t H�L$dH3%(H�$u0H��[�fD��B�H�SH�;�H��H�$�����W%����SH�� H�T$dH�%(H�D$1�H�G0H��tYH�XH�|$���H���H��tH��tH�T$H���}���t	H�D$�f��H�L$dH3%(uH�� [���$�H�|$��H�%�ff.����H��H�F ����i�H��H���m�ff.�f���ATUS�H�/tH����S%�[�]A\�f�L�e(H��L�����H�KL��AC��yHc�H��H��i����DD�G@E��~;�O�w�ș��Hc�H��H�:u!�G��uڍAA���G�D�G���WE�����AUI��ATL�g(USH��L��H���t���kQ@��upD���E��~d���H�sxD���A��f���A9�t8�șA��Hc�H��H�:u�L9ju݃���A9�u�f.�@��u1�L�����H����[]A\A]�@H�{x�����D��S�>H��tH����1�[��H�r����H���o�1�[�ff.�I��������~YE�QA�qM�D��A�JDי��Hc�H��A�����w%fD9�t$�ȃ����Hc�H��A�����v�1��fD��f�D�GE����D�_D�OL�D��A�KEÙA��Hc�H��Lҋ����w*fDD9�tK�ȃ��A��Hc�H��LҋD�@�A��v�H���o)�oJ)N�����H���1��ff.�f���AUATA�USH���
��tH��D��[]A\A]��L�o(H��H��L���>����te�{Qt/1����U��uGH�H�EL���0��H��D��[]A\A]�f����t�����uǃ�H���2E1��1����U��u胻�u��o��E�o��Mǃ��x�����SH��H��(��H�{X�F�H�{x�=�H���H��t1�H�5H���H����7��H���H��t�f�H�{�H��H��t�\��HǃH��[�(1����SH��H�(H��t1�H�5����C����v[�@H�{�%�H�{[�$�ff.�f�H��Hf�dH�%(H�D$81�H��-H��)D$ H�$H�.�)D$H�D$H�D$ $�����u"H�D$ H��$tH�T$8dH3%(uH��H�f�H�=��NH�5��1���(��V�fD��SH��H�H��$t�Y���H�C�[�fDH�{�?���H�C�[�@UH��SH��H��HcwD�WH�?D9�~4�EDЙfoA����D�UHc�H��H�fo[_H��[]�f�H���g2�D�MD�UE1�H��H�E�ED��)�DЉ�D)�D9�}1Ic�C�A��H��Hc�H�H���oH��oNID9�u�C�4	�u�e���ATA�UH�o(SH��H�����{Pu,�CPE1��t�����uǃ�H���/H�����L��[]A\�D��H�~ �fDAWAVAUL�o(ATI��L��UI�l$xSH��HdH�%(H�D$81��~��A�|$QH�D$uA�D$QH�D$H�\$���|$tqH��H��������u�A��$�t A��$���uADŽ$�L���?.L���'��H�D$H�T$8dH3%(��H��H[]A\A]A^A_��H�D$H�L$ �L�x 1���1��tSH�D$(H��t�M�w(L�����A���tA�����uALJ�L���-L������$���DI�<$H�D$ H�x�����9��t��0_��q���H�~ ���H��u�f.�H����H��uH���H�=^�NH�5��1��%��AUI��ATUSH��H�k(H��8H���dH�%(H�D$(1�I�����H�����L��L�����H��A�����E��u*�{Pu3�$H�T$(dH3%(uH��8[]A\A]�@L��������H�=��NH�53�1��%�ff.����USH��H�^H�.���t�#�1�����uH��H���x�����t�H��[]�ff.�f��H��t@��t��H���H��t�H�OH�Q�H��w2H�W�BAu�H��t#UH��SH��H����H��uH��1�[]�@1��H������E�����H����uH��u���u0��@��u�H�Ѓ�H�H�H��vH��uҀ��H��H��1��%�����1���u�H�����ATI��USH�H���H������I�|$�7�H��I�$H�X(H�����I�|$A�D$�W�oЙ�Hc�H��HH�����u&�H�����[�$]A�D$A\������H���}��I�D$[A�D$]A\�D�)�H��H����R���@��UH��SH��H�5�RMH��H��(dH�%(H�D$1����teH�m H�s 1�H�}(H�t$����taH�|$H�u�C���H�}(H�T$H�t$�0��H�|$��H��H�L$dH3%(u;H��([]�@H���MH�5'�H�81��@"�H���MH�5#�H�81��("�����H��H�7H������1�H���fDATUH��SH��H�n1OdH�%(H�D$1�H�_�NH�;L� t>�����Z�Dž�A�D$H�;t+H�D$dH3%(u'H��[]A\�f�H�|$��
�@H�|$�
�����ff.�@����fDAUATUSH���!�H�=4�I���}��H�=�5H��H���MH����I���H��M��M��H��H�޺[H��]A\A]��@��H������USH��H��H�H�n H��H#E���H	�H�EH�GH�EH�GH�EH�G H�E ����H��upH���p�H�H����H���NH�CH�CH�SH�C H��tH������H!�H�H��1�[]�D%�H�H��1�[]����u�H�H����H���x�����t��n���fDH��H���e�
�S�����H�F H����AWE��AVM��AUI��ATL�f(U��SH��H��8dH�%(H�D$(1�H�L��H�T$�$H�D$L�D$���@��tJ������{QtWL�����E����1�H�T$(dH3%(��H��8[]A\A]A^A_Ð���u�A�L���{���@H��H�{x�d���A�U��u,���t#�����uǃ�H���G&�L���(���j���fD�o��L��AE�o��AMǃ�������1������H�=��NH�5�~1��k�ff.���USH��H��H�l�NH��u H�-��H����H�L�NH��t�H�K�H�ƿ�
�H�CH���[]ÐAUI��ATI��USH��H�-i-OH�]H��t0H���H��tTL��L�����H�}tZM�l$H��[]A\A]�f�fH�=��MffH��H�H�@0H����V�H�XH���H��u����H��H�����fH�=P�MffH�H��H�H�@0H����V�H�P H�J H9H�t���H��[]A\A]�ff.���AVAUATI��USH��H�5�LMH�������tsM�d$ H�k 1�I�|$(H���������M�t$���I��1�fA�EH�;,OH�8H��tc1�A�M��L��H��������u)H��[]A\A]A^�DH���MH�5W~H�81��p�I�|$(L��H���P��H��[]A\A]A^�@fH�=8�MffH�0��H�H�x0H���}���H��t���H�p�MH�5'~H�81���ff.�@��AUA��H��H�mKMATUSH��0H���(��H��L�` �@uL�` A�D$�Y��I�D$(E��~#A�E�L�d�fDH�3H��H���q���L9�u�H��H��[]A\A]�ff.�UH��SH��H��H��*OH�8tH�K1�H��$t	H�M�H��[]�fH�= �MffH���H�H�@0H��t<H�PH�@ H;P t�H���1�H��t�H��H���%�����H��[]�f�H�% fDAVAUATUSH��@dH�%(H�D$81�H��t	H��@��t&1�H�L$8dH3%(�*H��@[]A\A]A^�H�����tЃ���H�}H���8�H���C��A�ą�u�H�T$H�5�H���D$H�l$�^ �|$uoH�;H��������H�j~Hc�H�>��@L�%y)O�D$ H�l$(I�<$�oH�T$ H�5�H�����I�<$�A�|$ t~fD��
���fDH�{Hc�H9���R�A9�}SIc�H���X�H��H�������u�H�;A���� t�H����뽐H�{H�������u�H�{H���t�����u�H��U���������@��H�xH�EH�}���f����tzH��
L�s��I��M��~�E1�K�<�H���������&���I��M9�u��H�{H����������H�T$ H�5�H���D$ H�l$(����|$ �S�������L�cL�s�H�|$��
���H�|$�[�
������H��H�
}��H�5�y����H�=�E1�������SH��H�v�O�����t�[�fD��UH��SH��H��H�r�'�����t�H���[]�@H�sH��������u�H��[]�f���SH��H�rH��������u[�fD��[�fDH��Hf�dH�%(H�D$81�H�t$H�<��H�t$)D$ H�D$�����u$H�|$ H��u*H�L$8dH3%(uBH��H�D���f�H����H��H�5����D$H�$���D$��c
�AVH��SH��(���H�|$H�4$H�T$H�L$ dH�4%(H��$1��D$��u'H��$dH3%(��H��([A^�DH�H�$H���H��(H��H�D$(����H�|$��DŽ$H�L$H�D$0$H�AH��$H�A0H����H�H 1�H�YXH9Xt\H�|$@��$�s������ukH�\$H�D$0H�CH���ejH��$H�CH�|$(���H�$�t$����
���@�Q`�H�|$�&j��@H�@Xf.�H�T$H�B������ǀ�H�B0H��t�H�H 1�H�yXH9xtG9�t
H�|$�
�
H��$L�t$H�t$ H�<$I�FH�D$��I�~����H������Q`��w��AVI��AUM��ATL�%
�UH��SH�󉖸dž�DL��H��H���B L��L��H��H����������t�Hǃ�[]A\A]A^�AUATI��UH��SH��L�k(H��H����}�L������E1�1ɺH��L���K����E��tH�������t�{Pt�H��L��[]A\A]���ATI��UH�nXSH���H��H��L���r���H��H���G�H��$t�[]A\�ff.����H�w0H��tH�v�ff.�f�����f.���AWAVAUATUSH��HdH�%(H�D$81�H������L�o0H��M��tM�mI�EXM�e(E1�A�����H�$H�D$H�D$f�H�$L��H�����L���y��A�ml�A�udD9�DE�A9���E�U`A�MhE��I�}XC����Hc�H��H��D�X�A��w*A��A9���C����Hc�H��H��D�X�A��vփ�����L�r�L��A�Ep���I��$��H�t$H�$H�y�H�=��L�l$H��H�D$L�t$ D�|$(�D$,����H��$u:E�w�C$�ЅC uA�����DL�����C$�ЅC t�H�{01��Y��H�\$8dH3%(u'H��H[]A\A]A^A_�H�K�MH�5G�H�81�����U�E����:K�ff.�AWAVI��AUI��ATUSH��HL�g0dH�%(H�D$81�M��tM�d$H�l$f�E1�E1��H��L��L��)D$I�\$(I��)D$ ���k���tnH�����|$��H�����H��$uZH��L�,$H�l$�i��D$����uM��H�
�L��L�������H���]��H���5��D$��u�H���E���H�T$8dH3%(u$H��H[]A\A]A^A_�H�=:�NH�5�p1��������H�v ������H��(������H��(������H��H�5A@M�,�����H���f���S���|��H��tPH�Ë��NHǃ�H�߃�H��CHǃ��r�N�͍�H��H�oOH�H��[�H�`�M�2�H�=?pH��W��}��ff.�f���H��HLJH��H���ff.���ATUSH��H�_0dH�%(H�D$1�H��tH�[H���o�H�����H�-�OH�}t)Hǃ�H�D$dH3%(u7H��[]A\�DL�d$L���c�
H�}Hǃ�u�L����
��R�f�����~HAU�B�ATL�l�I��UH��SH��H��DL��H��H�����H�C�L9�u�H��[]A\A]�D�ff.�@��H��fH�=`�MffH�X��H�H�@0H����G�H�P H�@H9B ��H���@��SH�5>MH�����1҅�tH���NH�K H�H9H �‰�[�ff.�f������D��H�eOATUSH�(H��tQ��H��H��I��H9�t(fD�����<tH�sL����H�H9�u�L��[]A\�fDfH�=p�MffH�h��H�H�@0H��tH�h��A�H�%���AWAVAUATL�g(UH��SH��L��H���l��H��L��H�EH��H�EH��H�(��H���V���tH��[]A\A]A^A_�fDL�-QOH�m L���I�}L�u�'�E��u`H�EH��L���H���H�EL� L�e�E�������E�ǃ�H��[]A\A]A^A_������I����M���H���NI�EH��u'L�-;n��
L�����H�T�NH��t�H��H�u�M1�1�H�8���H�EL���H���H�EL� �EH��L�e������$E�ǃ��E���f.����
H�EL���H���H�EL� �EH��L�et|�����D�ǃ��EI�}�M���H��[]A\A]A^A_���
��������fDH���؈�H���B���@H����H���f���H��謈�H���p�����H�EOH�GH�~H�8H��LJ�H��H��HLJ�7������UH��H�Q:MSH��H��H���MH�8���H�߾�H�H��^��H���H��H��H��[]����fD��H�������C�dž��GH������H���o����jC�dž�H������ATUH��S��H����t���Q9���H���>��t5L�c(L�����H�UH�EL��H�BH���[]A\����L�%�OH�m I�<$��H���H���H�BH��E��vE��H���E苐��Hǃ��B�ǃ�I�<$tB[]A\�D���t�H�}h��E뤐��� ���fD��
�l���fD[]A\�W�
�������SH������t9�t��[�f��[�������[�f.���ATUSH��H��dH�%(H�D$1���9�t#����H�D$dH3%(unH��[]A\ÐL�%iOH�j�NI�<$H�(t0�m����vA�ǃ�I�<$t���fDH�|$��
��@H�|$��
�������UH�o(SH��H��H�������tH��H��[]���H���H��t��H  H��H��[]�����H���H��t�����<uÐH�G0�H ��!f�ATL�gUSH�GL9�t0H��H��P���DH9] tH�����H���H��P���L9�u�[]A\�f.���AUATUSH��H�#�NL�-OH��{H�k vI�}��H���t���I�}��fH�=Q�MffH�I��H�H�x0�WI�}��L�ch�@H���0����{vw���ƃ���?�H���Dž��CH�x0����L��H����
H���H�x0�X�k�����?�Dž��{�{���I�}t.H��[]A\A]����
�{��������D���
�<���H��[]A\A]�/�
�*�
���D��H�G H���H��t�H�G(H�@0�ff.�@��H��H���MH�5AgH�H���MH�8���H��H���N��H�=��N�����H���H�5J�����H�=s�N�H���H�5�f�K��H�=T�N�H���H�5�f�,��H�=5�N1�H����H�59���H�=�N1�H��H�5w����H�=��N�����H�QH�5�����H�=��NH���H��H�5�����f���H���MSH�=HfH�0����H�~�MH��H����H���MH�;H�5�H��j��H�;H�5fH��H�^�N�Q��H���MH�;H�5fH�H�>�N�1��H�;H�/�NH�5�eH��N���H�;H�5�eH���NH�L�MH�����H�;H��NH�5�eH��N����H���MH�;H�5�eH�H���MH����H��H���N���H�=��N�����H���H�5�e���H�=g�N�����H����H�5we�g��H�=H�N�����H����H�5��H��H�=)�N�����H����H�5I��)��H�=
�N�����H����H�5J��
��H�=�N�����H�g��H�5ڻ����H�=�N�����H�H��H�5�����H�=��N�����H�)��H�5�d���H�=��N[�����H�	��H�5�d���ff.�f���AUATUSH��H�c�NH�(H�EL�eL9�tVH��P���L�-}dDH9] t*��������KL��I��H��MH�81���H���H��P���L9�u�H��[]A\A]�f.���H��OH�8tH���MH��@H��fH�=$�MffH���H�H�@0H��t0H�PH�@ H9P uH�k�MH�H���H���H���@H�% fD��H�UOH�8tH�p�MH��@H��fH�=��MffH���H�H�@0H��t0H�PH�@ H9P uH�3�MH�H���H���H���@H�% fD��H��OH�8tH��MH��@H��fH�=$�MffH���H�H�@0H��t0H�PH�@ H9P uH���MH�H���H���H���@H�% fD��H�UOSH��H�8tH�$�MH�[��fH�=��MffH���H�H�@0H��t,H�PH�@ H;P t�H�:H���H��t���u�H��[����H�% fD��H��OSH��H�8tH���MH�[��fH�= �MffH���H�H�@0H��t,H�PH�@ H;P t�H�:H���H��t���u�H��[�Q��H�% fD��H�UOSH��H�8tH���MH�[��fH�=��MffH���H�H�@0H��t,H�PH�@ H;P t�H�:H���H��t���u�H��[����H�% fD��H�G����SH�5H����H��[����H�GH�@ H�x��k�ff.���H�����H��H���G����H�GH�@ H�x��{��ff.���H�E
OH�8t�fDSH��fH�=��MffH���H�H�@0H���_7�H�P H�J H9Hu[�H���MH��H�5('H�81��i��f���H��H�5!��������H���f���SH��dH�%(H�D$1��D$H��t
H��@��t$@�H�L$dH3%(��H��[ÐH�u�H������u�H�t$H�������tJ1�H�u�1�1ɾ�
H�����H�H��H������u�H�=-�NH�5^]1�����|$�e���H�=�NH��H�5]�_������f.���H��t@��t�H�t�fDSH���7��u�[�ff.���SH�GH�@ H�x�H��t@��t�H��[�f.�H���u�����u�H��[����UH��SH��H��H��t@��tH�] H���[]�DH�u�H�����u�H���S��H�E H��1�[]�fD��ATUH��SH��H��t@��tH�] �[]A\�f�H�u�H���/��u�H�{����H��I���vL��H���\|L�e [1�]A\ÐATI��UH��SH��H��PdH�%(H�D$H1�H��t@��t4�H�]A�$H�D$HdH3%(��H��P[]A\�f.�H�u�H��H�t$���u�H�t$H�����t`H����f�H�t$H��H�D$H�i��)D$0)D$ H�D$H�D$0$�D$8�ǽ����u3H�\$0H��$t(��O���fDH�����H�ø�4���H�=��NH�5�\1�����F��fDAVH��AUH��(E1�ATUSH��pH�|$H��H�l$`D��$�H�t$ H�T$H�L$HL�D$(D�L$4dH�%(H��$h1�H�D$����f.��|$`tYH�|$H���l����u�H�|$���H�D$ �@Q����H��$hdH3%(��H��p[]A\A]A^�fDL�t$p1���A��Å�tAH�\$H��H���9��HcCM��MD�H��H�8�e���L9h�[����g����H�D$xH��t
�x�$H�|$����H�D$hH�@ H�D$8H�D$pH�D$@E�����D$\�H�D$8H�X(H�����H�L$ H�t$@H�D$HH��L$4H�F�H�V�T$\�N������1�H�D$8���t&H�D$8�����uH�D$8ǀ�H���S�H���;������DŽ$`H�T$HDŽ$�$H�BH��$XH�B0H���H�P H�JXH9H�9H��$���$d�������u=H�\$H�|$HH�L$\H��$�H�t$(H�T$HH�C�S���H��$XH�C����f�H�L$H�A������ǀ�H�A0H����H�H 1�H�yXH9xtl9�t
H�|$��
H��$XL�t$H�l$I�FH�����H�D$pH�|$H�t$`����H�����I�~����H���N��fD�Q`�H�@Xf.�H�|$H������H�|$�������@�Z`������H�=��NH�5}V1��.��ff.�AWH�F(I��AVA��AUI��ATL�fxU��SH��H��H�D$H��H��L��A��jE1�L��L���	���ZY��tH��[]A\A]A^A_�@H�|$��A�����~SA���M�GxA�����D��9�t1�ș��Hc�H��Lƒ:u�H�B���u�H�|$����f���@I�H�|$E���I���I���ALJ�H��[]A\A]A^A_�}��ff.�f���H�G0H����.�H�@�xQuH��1�H��������ff.�@��H�G0H����.�H�p�~QuH�Wp������ff.�@��AWAVAUI��ATI��USH��H��H�|$@H�L$0L�D$8dH�%(H��$�1�fH�=8�MffH�0��L�{ I�oH�H�X0H�D$H��tH�[H�CXI��I��A�H�D$ H�CxH�D$(H�C(H�D$I�(H�u/M���OM���FH�=n�NH�5�V1������M����M���
�D$fDA�GH��H�5N�����H�|$迾�A�G��uPM��tD�SdE��tH�|$ �����t4�M���G�T$H�|$I��H��H�
a����,��A�G��t��AoG)D$P�AoO�D$P)L$`��t�D�u9D$P�UA�G���p���H�|$�>��1����H�|$�
��A�G�L����D$M��u-H�t$ H�����H��$�GI�(����D$M��t�H�t$ H�߃L$����H��$�H��E1�H��jL�D$HH�L$@H�T$8H�|$�y���ZY��t�H�|�NH��u H�BS�H�����H�\�NH��t�H���O���D�������������L�Cx�����fD��9�������ș��Hc�H��Lƒ:u�H�BD�E��u�����H�|$��D$P����wg��������H�|$P�޽��H��H�D$XH�t$p�H�D$pH�T$x���H��$�dH3%(�)H�Ę[]A\A]A^A_�@��uNH�t$XH�|$@���H�D$XH�P H�B(H�T$HH��H�D$�-��H�T$HH�D$���tPH���2���������L����*��H�t$XH�|$@����,����D$�)����D$�����o���o��H��ǂ�)T$P)\$`达����H��H���NH��u&H�8SH�վH�����H�t�NH��t�H��H��H�T$�W��H�T$����x�����AUATI��U��SH��H��HdH�%(H�D$81�H��NH��u'L�-�R��L���3��H��NH��t�H�$H�̭NH��u L�-�R�L�����H���NH��t�H�D$H���NH��u'L�-�Q��L������H�l�NH��t�H�D$��v���1�H��L�D$ ���H�L$(H�D$ 1�L�D$0H��$��1�H��$t1�H�����@��H���S���H�\$8dH3%(uLH��H[]A\A]��D�m�Ic�M�$�� ��u1�1����!��L��蘵�H��E���a���D��������f���AVSH��8H�T$(H��NH�<$H�L$L�D$L�L$ dH�%(H��$(1�H�D$(H�8�� ��H��H�p��Hc�H9��(����H�$DŽ$ H�D$H�D$@$H�CH��$H�C0H����H�H 1�H�qXH9p��H�|$P��$$�%��������H�$H�D$@H�T$L��$PH�L$ H�t$H�|$H�C���H��$H�SH�T$(H�T$8H�T$(H��$(dH3%(��H��8[A^�fDH�p H�x�
����Q`�Z���H�@Xf.�H�$H�A������ǀ�H�A0H��taH�H 1�H�yXH9xtI9�t	H�<$��
L�4$H��$H�|$I�F�"���I�~����H���Z��f.��Q`�H�@X����ff.�f�AWI��AVI��AUL�nxATL�f(UH��SH��H��fDH��L��L��E1�jM��H��H���[�ZY����L���Y��f������~N���L�Cx�����	f���9�t1�ș��Hc�H��Lƒ:u�H�BD�E��u�L���!���t���@�{Qu�E1�1ɺH��H������H���[]A\A]A^A_�@��AVSH��dH�%(H��$1�fH�=G�MffH�?��H�H�$H�@0H����H�XH�t$ H�t$H�\$�dfDH�D$��$H�x�{����H�$����H�T$L�t$H��H�SL������1�L��H��H���b���H��$�H�CH�C0DŽ$H�$H�D$ $H�QH�L$H��$�H��tLH�H 1�H�yXH9x�`����Q`�X����DŽ$H�$H�D$ $H�@H��$�@H�%XfDH�Cǀ����H�C0H��tcH�H 1�H�YXH9XtK9�u7H��$�H�\$H�C�H��$dH3<%(u,H��[A^�H�<$��
�D�Q`�H�@X���ff.�f���H�GH�w0H�@ H�H�H�P�H��tH�v�
���f.�UI��SH��H��H��HdH�%(H�D$81�H�G0H����H�hL��H�L$H�T$�>�H�EH�k(�D$(H��H�D$H�D$H�D$ �D$�D$�B��{Pt$H���T��H�=m�NH�5�I1������H�t$H�{X�*������u)H�����H�T$8dH3%(H�u4H��H[]�������u�ǃ�H�����H���Զ������H�L$H�T$L���k�H�%���AWAVI��AUI��ATUH��SH��H��� tmH��H����Hc�H9��!"��~CD�g�1�L�}I���$L��H�1�L��L���|���I9�tH�EH���� u�H�E ��@H��[]A\A]A^A_ÐH�z�f.�UE1�H����1�SH��H��H��H��H��H�-+�ML�E�2��L�EH��H��E1�H�ޥ��H�=����1����H�H�X fH�=A�MffH�9��1ɺH��H�8����H���[]�ff.���H�5����`�����H�5�����P�����H�GH�v H�@ H�H�H�P��s�����SH��H��H��t@��t	H��H��[�H�u�H��H�t$���H�t$��u�H�=�G����H��H���MH�8�S��H������ff.���SH����^��H��H�TKHD�H�@$H�[���H�=�M� ����UH��SH��H���NdH�%(H�D$1�H�;��Hc[�N;Y�NH�V�Nt,�JH�;H�,Љ
;�NtYH�D$dH3%(uhH��[]�f���u4����NH�Ǻ���Hc��NH���N���Hc��ϐH�|$�
�@H�|$�ƾ
�_�������ff.����H��dH�%(H�D$1�H�����H�$��u�H�L$dH3%(H��uH����v��fD���������������H��dH�%(H�D$1�H���P��H�$��tH�L$dH3%(H��u	H���1���������������USH���ТN��~'1�H�-âNH���NHcӃ�H�<����9]�=��N���N
H��[]�H�=��N���q�N�X��H�i�NH��[]�f.���Sf�H��H��@dH�%(H�D$81�)$)D$)D$ �m��H�\$H�$H�D$$H�D$$fH�=��MffH��H��1�H�5f���H�H��NH�H�x ��H�$H��H�p ���H�$H�X H���p���H���ػ��H�|$H��$uH�L$8dH3%(H�D$uH��@[��m��������H������@��Uf�H��SH��H��HdH�%(H�D$81�)$)D$)D$ �y���H�\$(H�$H�D$$H�D$$H�l$ fH�=��MffH��H��1�H�5}���H�H��NH�H�x ��H�$H��H�p ���H�$H�X H���w���H���ߺ��H�|$H��$uH�L$8dH3%(H�D$uH��H[]��s�����ff.���H�5�MH�=�C�I�f�S�A���+���+�@H��D����D1�i�e�lD�D��H��ou�H���	��pD�LJ�	H���	A�p�DM�E1�1��Hc���L��D����D1�Mc�i�
fA3B�F�A��E���o~D���	�D�D9�DN�A��u��o���A�H�D��Hc�H�4�D����D1�i�e�X]3)ȃ����pu
���	����u���[�ff.����	�����	��~=H���	H�FH���	����1‰��%�V,�1‰��%��1Љ��1��f��H��L���H��LJ�	pA�߰��%�A���B�����D	�A����A��EE�3�4H��D1��J�L9�u�L���	A�߰�%�A���B�����D	�A����A��EE�3�t���H��D1��J�L9�uȋ%��с��	ȹ߰����E�3�01Љ��	���ff.�@����fD����	�fD����w���T����1�i�e�lƉt�H��H=pu�H���	LJ�	H���	�@��H���#�����H���C�����H�?�t��@��H�?�d��@PX�H��dH�%(H�D$1�H�~�MH��H�$CH����H�������H��H�5�jM�<��Hc��	H��H�D�ff.���H��H�5�jM���1ɺH��H�xA�B�p���ff.�f���AWAVAUATI��USH��H�5ujMH��輖�H��L��I���>��H��u�H��茦�@��u�H�;H����H��u�H��% tJH����I��H���VH���4H����H��MH�5�BH�81����f.�H�SH���H����H��u�A�A��H�[ M�}H�;A�BE1���pL��L�T$�F��L�T$M����H��H�H�P�H��o��A���	H��L��I����	I���	谹�I�EH��L��[]A\A]A^A_�f.�A��H���[���H���V���H�S L�rH�SH��uH�S H�jI��A����fDH�S��f�A����A���H������1���H���MH�5UAH�81��+��ff.���UH�5thMSH��躔�H���ݖ�1ɺH�}A�B�pH���?��H��H���D��Hc��	H��H�t�0��H�uH���$��H��H��[]�f.�AWAVAUI��ATI��UH��SH��H��H	�H��H��H��H	�H��H��H	�H��H��H	�H��H��H	�H��H�� H	ø����H9�w,@L��A�$��!�H9�r�H��H��[]A\A]A^A_�fDI��A��I�� 1�M��tL��A�$H��H�� H!�H9�r�M��t�H�T$L��A�$H�T$��H	�H!�H9�s��ff.��H��H�=��N���H��tH���fD��	����H�=r�NH��H�D$譒�H�D$H�����H�����Hc��	H��H�D�f���H�����1ɺH��H�xA�B�p���@AUI��H��ATI��1�UH��SH��胫�H��H�pH� tH�pH��L��A�$H��H��[]A\A]����AUATUH��SH��H�����H��I������I9�tH��1�[]A\A]�f.�H��H�5�eM�1��H��H�5�eMH�����L�m��	L�`L��H��L������u�H���	H���	L)�L)�H9�u����	9��	u�H�3H�}H��[]A\A]�����ATUSH��H9�tPI���x��H�5QeMH��虑�H�5BeML��H��臑�;H��H���H�Hc��	H��H����	H���	H��[]A\��ATI��UH��SH��H��dH�%(H�D$1�H�@H�x8H�DH��H��H�$H�5-�N���H��H��u �H���۠�H�������fD�u�H�H�ƒ�H��u�H�SH9�O|eM��tH�s�� u$H��u(H�|$dH3<%(H��u"H��[]A\�H�sH��t�H��L���������-��H�.�MH�5�<H�81����H��MH�5�<H�81����ff.�f�AWAVAUATUSH��(dH�%(H�D$1�H��t6H��H��I��H��tO���H�=�MH9�tH�CH�x8H�� L��H�����H�\$dH3%(��H��([]A\A]A^A_�@H�¹@A�����H��?)�H�����I��I��!E�L��A��H��A����!LC�H�D$1�1�H�D$DL��H��H	�H���t*H�t$Ic�H�߉L$���A���D$�L$tH�D$L��H��H!�H��H��I9�r��:�������ff.��UH��AWAVAUATSH��1�H��HH�}�H��H�u�� dH�%(H�E�1��&��H�<H�E�H�����H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u���iH�E�L�d$H�E�I���L�}�A�BE1�H�߹K�4�L��H�u�L��蜐�L��H��H�E�H�}���L�u��E1��o�D��H��H��H	�H��H��H	�H��H��H	�H��H��H	�H��H��H	�tJA��H�E�H�}��D!���tA9�r�����H�M�B��I��I���t!G�,�E��t�A�������1���@H�u�H�}�1ɺA�B���H�}�H���b��H��H�U�dH3%(u\H�e�[A\A]A^A_]ÐH�E�H�4�H��H��>u-H�E�H��H��H��H�E��T��I�����H)�H�L�����������ff.�@UH��AWAVAUI��ATI��SH��HdH�%(H�E�1�H��tUH���-���H�=&MH9�tI�EH�x8H�� L��H���z���H�u�dH34%(��H�e�[A\A]A^A_]��L��H�U�� 蟊�H�<H��H���woH��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�\$H�E�I���H�E�M���7�H�4�H��H��>��H�E�H��H��H��H�E����I��H�M�A�����E1�H��H��A�AL��L��A��H�E�D�u�M�4�č�H�U�L��L������E�A#A�H��t$A;w�r1��@A��A9�r�w	H��H9�u�A�A1ɺH��L�����H�}�H�E����H�E��k�������֬�fDATI��UH��H��S��H�� H�T$dH�%(H�D$1���tcH�tNy��uHH��H�W�L��H���V���H��������?H9���H�DH�L$dH3%(��H�� []A\Ð���f�����u�H�|$H� u��u���H�D$H�Ǿ辉�H�D$�tMH�H���t�H��L��H�����H�@H��h���H������`���fDH���`���M���H��L��H������H�T$H�T$H�T$�(����Q��SH��H��tH��tH��[�@H�>@��u��z��H��[�H���MH�H�56H�81����f.�UH��AWAVI��1�AUI��� ATI��SH��(H�}�H��dH�%(H�E�1�H�E��\��H��uwH��H�E�H9�tH��H��$�H9�u�H��H�L$A�BE1���L�T$L��I���L��M�����A�7L��A�UA�L�m���DH��L��H=��I�CH��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�T$E1��H��I���A�BL��L�]�L��M���`��H��L�]��D����L�m�1�)Ѓ�tC�|�uH��L��H�E�L�]�H��L��L���L�]�H�����L��L�����L�����L��H�M�dH3%(ucH�e�[A\A]A^A_]�fDH��>uMI�SL�m�L��L�]�H��L��藒�H��E1��A�BH��L��I��蘉�L�]��1�)��A�������H��������H�=-�N�����H��@��SH��ZM��	�j��H��H�x �@uH�x �$��H��[�ff.�@��AUATI��USH��H���:�M��tJE1��A��1��
DH�H9�v;�3��H��I�<,D���H)�苮�H���u���M��A�H��uH��1�[]A\A]�I�H)�t�H��L��L��HF�H��菨��t�H�������[]A\A]�ff.�H��8H��H�|$dH�%(H�D$(1���uH��1����H�t$1�艌�H�T$H�L$H�D$1J3H�� 1ȉ舜���5{�NH�L$H�T$1Q��H�� 3Q1�1�QH�D$(dH3%(uH��8��1����������f���U��SH��(dH�%(H�D$1�H��H���!����|$�w
�D$�1�A�B�H��能��H��H���>��H��H�L$dH3%(uH��([]��_��ff.�@SH���$�R���H�5#�LH��H��H�~��,���H�[��H�����H���	t
H����H��H�D$���H�D$H���f���H�����H��H�x��fD��S���H�XH���z�A���r�f�f��[A�����A*��Y�1�*��X��Y�1�@SH��H�t�MH98t7H�5�MH��谞��tLH�SH�
1WMH�C H9�tHH��tOH��[�D���H���	u�H��H�D$���H�D$��DH��1�[��H���	u���H���MH�H�5�/H�81��Y��f���ATI��USH���=���L��H�����tH�H��H�CH��[]A\H�x8H��(���H���ȿ�H������UH��SH���.�H���	H��tAH��試�t%H�H��H��H��H�=)�L[]��f.�H���h��H����H������fD��SH��H��H�5��M�(��H��UMH9StH�H��[�f�H���	u�H��H�D$�i���H�D$��f���H���s�H���	t	H�H��ÐH��H�D$�3���H�D$H�H���fD��AUI��ATI��U��SH���%�H���	H��tX��w]��t?I�<$薥�H��H�5�LL�#H��H��H�~�����H�+H��L��[]A\A]�f�L������H���H�����랺1�������UH��AWAVAUI��ATSH�_H��L�{H��(H�U�N�4�dH�%(H�E�1�H�E�I�����I�FH��H��H��H��H���H)�H��H9�tH��H��$�H9�u�%���H�E�L�d$H�E�I���H��L���{���H��L��H�}�A�UC�|4�M�n�wC�D4�L��1�A�BH�޺L���͸�H�����L��L��H��舮�H�}����H��H�M�dH3%(uKH�e�[A\A]A^A_]�fDH�E�I�VL��H��H��H�E��
��I���J���DH)�H�L��&����]��ff.�f���AWAVI��AUATA��H��USH��H�����I��H�CH�h8H�����U����A����H��t��tH���@��H�H�Ѓ�H��t��u�H��tVL�}E��u-H�}L��L�����I�EH��H��[]A\A]A^A_��I�>��H�uL��L��H�����I�E�ƀ�t�H�����뛺1�D���r��H��M�M	H�5X,H�81�����H�H�̈MH�5,H�81����ff.���ATUS@��tRH��H�I��H��1����H��H��tH�xH� u�L���}�����u)H��[]A\ÐH�x��f.�H��蘭�I��H���H���MH�5�*H�81��(�����SH���c���H��tH��H��H�=a�L[�[�1�[�@��UH��SH��dH�%(H�D$1�����H��tAH����H���H9�tH�EH�@8H�P H���H�L$dH3%(u$H��[]�DH�t$�H������D$���ۺ�ff.�����t0��f��f���*��Y+�*��X��Y�*�D��1�f�H�� H�� I����H��H� L	�H��H��H��H*��Y�*�f.�AUATI��U��SH��dH�%(H�D$1�H��tLH�����H9���I�D$L�`8I�D$0H��tX��H���H�D$dH3%(uqH��[]A\A]�fDH��H�$��D�,$�t$��D�������I�D$ H���H��A��A�T$ �����H�	�L�%R�L���{��ff.�AWAVAUATUSH��XdH�%(H�D$H1����:	H��I�̅��kH�H���.H�؃�H��tH����H�����H����H�����H���]H�ƒ�H�����Hf(����fT��f.���f���L$f/����L��H���N����L$f��f/�v�Y�H�0fH~�H9���H��H��<�������\H����H���L�������H���H��� ���H����H���������D$0uf��H�L$HdH3%(H����H��X[]A\A]A^A_�D�H��H���p���H�0fH~�H9��6����cu�H���fDL�t$@H��1�H�D$0$H�L$,H�t$8L���D$,�����h���H�D$8H�D$0H���L�|$@I���H�L$0E1��L���-�H
H��H�D$@H������H������H���&���
H���ͮ�H�D$@I��H�������H�H�ƒ�H��
������� �����L���K���u?�T$,���+L���~x�I��A�����D$,1�I�I)���H�\$@H�|$0@��������H�H�H�@H�H���H�\?�*���D�H��L��H���}�H���
���DH��H��H�����H���H�����H�����H��H�D$@H���������H���	�K�~��f(�fT�f.����f.��]H�D$@f�f/���f.������������D$,�����H��H�|$0H�\$@��u ��t�>��H����H�|$0�L���+膭�H������fDH��H9�t)H��H��H��?H)�H	�H��H�T$�~L$���@�L��H���`����!���H��H9���H��H��H��?H)�H	�H��H�D$�~L$����L���X|�I������H���?�����u2H�����
uGH��H�����H���9���@H�D$@����f�H������H�C�H���������������������������f�H�|$0�V���~��H�ƒ�H�����Hf(��5��fT�f.��x����Y
�4�L$L���	���~��H�ƒ�H���0�H�=��fT�f.��/�����4f��Y�H�D$@f(��\L$f/�������T$,L��H���L$�T$����\N4�L$H�0�T$�XT$�Y��X��X�fH~�H9�tH��H��<�������>H���b���f(��lp�H�����@�T$,L��H���L$�;����L$H�0�Y�fH~�H9���H��H��<��������H��H����H�\$@����fDH�T$@H�у�H�����JH�ƒ�H���I�@H�0�X�fH~�H9��=���fH~�H��<������tQH���u�������L��L��H���%�H��H�D$@�E����co�H���[���H�D$@�0���訶�H�����H��H��H��H���q���L��L��H���n�H��������?H9��"H�\����H��H9���H��H��H��?H)�H	�H��H�T$�~L$���H��H9���H��H��H��?H)�H	�H��H�T$�~L$����H��H��H��H���}���H��f�H9������H��H��H��?H)�H	�H��H�D$�~D$���H��f��H9��T���H��H��H��?H)�H	�H��H�T$�~L$�/���f��|$���f�f�����H�����H������HcD$,����1������ff.���AUA��H��ATI��USH��H���a�H��L��D��H��H���M���H��tH��t+H��[]A\A]��H��H��H��1�[1�]A\A]����H�`�MI�$H�5dH�81���ff.���UH��S��H�����H���	t2H���H������H��H��H�����H��H��[]��H��H�D$��H�D$�ff.����ATA��H��UH��SH���g�H��H��D��H���V���H��H��H���h�H��[]A\���AWAVAUI��ATA��UH��SH��XdH�%(H�D$H1��P��H���	H���oA���E��t
M�eI��uvH��H����H�0fH~�H9��fH~�H��<�������H��H����H�L$HdH3%(��H��X[]A\A]A^A_�L�l$@H�L$,L��H�D$0$H�t$8L���D$,������UH�D$8H�D$0H���yL�t$@I���j�H�L$0E1�L���-�?
H��H�D$@H���H���>��H���X��uH���H���CH��H�T$���H�T$H�D$@H��I������H�H�ƒ�H��
�e�� �\L������uC�T$,����L����n�I��A�����D$,1�I�I)��u�H�D$@H�|$0@��t��0H���/L���+���H���Y���@L��谒�H����1�H��H��H����H���)����������i�����fDfH~�H��H��H�����f.�H����H�D$@H����H�ƒ�H�����H�~��f(�fT�f.���f.���H�D$@f�f/���f.���������D$,������H��H�|$0H�D$@@�����ulH�����
uIH��H���ކ�����f�H�D$@����f�L���r�I���A���H�����������������g����/@H������H�P�H�����F�����>���<�6���踢�H���.H�|$0����@H�|$0����~��H�ƒ�H����Hf(��%��fT�f.��8����Y
�+�L$L��蹍��~a�H�ƒ�H�����H�-<�fT�f.�����F+f��Y�H�D$@f(��\L$f/��T����T$,H��H���T$�L$�n��\�*�L$H�0�T$�XT$�Y��X��X�fH~�H9���H��H��<�������_���H����H���O���f�H�H�H�H�@H���H�D?�'���L��H��H���,��H��������?H9���H�D@H�D$@�c���fDH�|$0@�����������@�T$,H��H���L$�s��L$H�0�Y�fH~�H9�t%H��H��<�������xH��H��t��;f��v���fDH�T$@H�у�H�����JH�ƒ�H���C�@H�0�X�fH~�H9�t!fH~�H��<����������H���������e����fDH��H9�t<H��H��H��?H)�H	�H��H�T$�~L$����@L��H��H���"�����H�D$@�*���躬��0���f(��Le��"���H��H9���H��H��H��?H)�H	�H��H�T$�~L$�3���H��H9���H��H��H��?H)�H	�H��H�T$�~L$���H��H��H��H������H��f�H9������H��H��H��?H)�H	�H��H�T$�~D$���H��f��H9��Z���H��H��H��?H)�H	�H��H�T$�~L$�5�����~���f�f���~���f��|$�$���H���=���X���HcD$,����1�D���O���:��f.���SH����H��tH�ߺH��[��DH�5qnN1�1�H���u��H�����f��f/�wf/��s[�H��rMH�5�H�8��L��H��rMH�5�H�8��1����ATI��USH��H��dH�%(H�D$1��	�H��t\H���<��H�=5�LH9�tH�CH�x81�M��tH�� L��H���2��H��H�T$dH3%(H����H��[]A\��H��������?I�|$H9�wlH�D?H��H��H�$H�5YmN�ķ�H���<��H�ŨtEH��H�H���wb����uEI9��{���H��qMH��H�5/H�81��/����S��뒐H���h��H����~��H�qMH��H�5�H�81������AWAVAUATI��UH��SH��H��H�$H��vLH��L�zH��H��H�D$L�l�f�M�w�L���I��A�F���M9�u�M�~M9�u�H�$$H�D$H�\�L�<$M��tI�L���M��H���C���L9�u�H��[]A\A]A^A_�ff.�f���H��H��H��H�=�������ATI��UH��S�
�H��t8H���@��H�=9�LH9�tH�EH�x8L��H��H��([]A\���f�[L��H��1�]A\���ff.�@��L�I��H�GI��H�arenegylI��H�uespemosH�modnarodL1�I�I1�H1�H�setybdetH1�L9�tJ�H��H�~�H�H��
H1�H�� H1�I�H��L1�I�H��H�H��L1�H1�I�� H1�I9�u�L��L��A��Kc4�H��8L�>��f�A�pH��H	�A�pH��H	�A�0H	�H1�H�H��
N�H��H1�H�� L1�I�H�H��H��H��H��H1�L1�H��I�� H�48H1�A��H��
J�H1�H��H1�H�� H�H��H�H��H1�H1�H�� H�H��
H�H��H1�H�� H1�H�H��H�H1�H��H1�H�� H�H��
H�H��H1�H1�H�H��H1�H��H1�H�� H��H1��A�pH��0H	�A�pH��(H	�A�pH�� H	�A�0H	����f���H�uiNH�Ð��H��H��H�=giN���f.���U1ҾH�==iNSH��	dH�%(H��$�	1��m����u!H��$�	dH3%(u~H��	[]�@H��1�H�\$�H������H��H���!��H����/��L��hNI�k@H���(��A�I��I9�u��	��	���o����3����H������Hǀ�	H�H���ff.����AT�H�=�US������H�5k�H�=yI����a�����H�5�H�=_�a�H��tML��H�0�2��H��H���'f�H��H�=8��z�H��oMH��L��H��H���a�H�;H�5���������H��H��H�5�(�fy�����H�J�H��H�5��Ky�H�_��H��H�5_[�0y�1�H���H��H�5��y�H�;�H�i��H�5��x�H�;1�H�A��H�5��u��H�;�H���H�5��Z��H�;1�H����H�5��B��H�;1�H�v��H�51�*��H�;�H�+��H�5�5�x�H�;�����H����H�5�
��}�H�;�����H���H�5�
��}�H�;�H����H�5]Z�}�H�;1�H�R��H�5�
�}�H�;1�H����H�5�
�~}�H�;�H���H�5��c}�H�H����H�HsMH�81�H����H�5��H��H�H�������H�x1�H����H�5"
���H�;H�5!
�l��H��H��H����m�H��H���S�H�߹����H�D�H�5��Hw�H�߹����H�)�H�5��-w�H�=�3M聋�[]H�peNA\�DH��rMH�8�a�����u<H�x�&���H����H�����uX<��H��nMH�8�!����H��tJH��td�u<t|H��nMH�8����DH�9iMH�8���f�H�!iMH�8�����H��nMH�8����H��nMH�8����H��jMH�8�t����H��jMH�8����H�ImMH�8�T����H�9mMH�8�q������H��H�=��L��H�=XH�>dN�9��H�*dNH�����f���H��tH��H�G�H��HE��DH���f���H�G����H��tH��H�G�f.�H�H�G��SH��H��H�?dH�%(H�D$1�@��t7H��H�;1�H��uH�CH��H�T$dH3%(u.H��[�fDH���-H�$�N��H��H����U�H��SH��H��dH�%(H�D$1�H��H�4$�����H�Ǹ���H��tH��H���i�H�T$dH3%(uH��[]��Y��f�ATI��UH��SH��H��u]H�CH��t01�H�@������H��t-H��L����P���9�}[1�]A\�DH�C��f.�[�]A\�fDH��H����������ff.�@��H��H�GH��uH�GH�PH�w�K���ff.���AWAVAUATUH��SH��H��(L�odH�%(H�D$1�H�GH��uH�GL�`H��lMH��H�0���H��u8H��L��L��H������H�L$dH3%(��H��([]A\A]A^A_�@L�}H�EH�E�uH�EL�pI��A��I��uE��usI��t}I��tgD�D$I����L��L�����H�UH�E�D�D$�eH�B���������9�!L��L��L��H��D�D$����D�D$H��u1��2���f�I��u�I��tRE��tMH�L$���L��L�t$裐�H��t�L��L��H���f��&DL��L��L��H�����H��t�L��L���'���H��tNH��H�SH�MH��@��H�E�uH�MH�A������@8�tfH������x��n���DH�[�f.�H�	dME1�1�H��H�=L�1�蛱�H����H��L����������u�1�����fDH�U�����������������H��1�H�=�+l�ff.���ATUSH��H�蜖�H��H�CH��uH�CH�x���H��I���d�H��H��t8H��1�H�C����H����H�5��H���4��L��H���q�H��[]A\ÐH�[��f.���ATI��UH��SH���t:H�H��~UH�}L���6��H�{�H��������?H�x#H�D?[H�E�]A\�H���X��H������[H�E�]A\��g����SH��H�������u1�[��H���Ȳ�1�[�@��H��賲�1�H���ff.��ATH�I��H�BUSH��uH�B1�H�@����H��@��H�H�H9�~f�H�|H���R��H9�u�L��[]A\�D��AWAVAUATUSH��H��H�odH�%(H�D$1�H�GH��uH�GL�`H����H� ��H�v L�51iML�.H�$I�6L���k��H����L�<$�L��H�ᾇ���L��L��H���+c����u.H�ZiMH�5�&H�81���f�L�5�hMA�I�6H����H��u;�H�T$dH3%(u~H��[]A\A]A^A_��H���7����I�6L��譐�H��t�H��u'H�[1�H�C����L��L����H������fDH����f�L���z�I�����諓�H��hMH�5H�81��#��UH��SH��H����uH��uQ��t]H��H��D@��tMH�H�H9�|�H�|H���J��H9�}�H��[]�fDH��萄��u��u�H��H��H�H��������?�h���u�H��[]�ff.�f�ATI��USH���"@H���د�H��t$H�߾�T�H��H��L����e�H��H��u�[]A\�f���AWAVAUATUH��SH��XL�z�|$H�t$ dH�%(H�D$H1�H�BH��uH�BL�-�fML�`L��I�u���I�uL��H�D$�Վ�L��H�D$�f�H�D$A����A�M�����|$���D$����H�D$ H�I�uH�����H��H��A��H�|$��A ����H���i�H���o�8x���^I����A���SI���ZA���?���6H�EI�%�H���H����H�EH�@H��H��I��I�M9�~K�|?I��(��M9��H�L$HdH3%(H���H��X[]A\A]A^A_�H�|$��I��uH�|$��I�u���l��H��H�T$(�Ow���mH�T$(H���&I���=E1��'w��������J��H���B��H�L$ H��E1��T$H��諜�H���@���A���O���I���H���?���L���]�I���/���E��t;H�EH�E�uH�E1�H�@����H��L����A�L��衅��������H�|$����tUH�D$0L�D$0H�\$8I���H�EH�E�uH�E1�H�|$H�
����L��H�@�������H��p���I��tgE��t�H�������L��L����A�ƅ���H�EH�E�uH�EH�@��������L���5���
�����;���L�l$0�L�����L��L���+H�\$0�n��I����I���\������S���H�\$8H�\$0H�D$0I���tH�EH�E�uH�EL��E1�H�@����A���\�I��D��L��H�
�
H���8��`���E1�H�|$u6I������H�|$��H�+cMH�5��H�81��ʗ�E1����H�|$ujI��tdI�������������I�@I��I�I�K�|?M���L��L�y�L����H��@H�����H��H���ui�H����H�EH�E�uH�EE1�H�@����A���j��H���b��H��H��M��AUL�O���H��SATH�L$@�T$$��U�H�� H���L���L�l$0�+L���L��H�\$0��L��H���u�A9�����H�EH�E�uH�EH�@����u'�_L�����L��L���+H�\$0�l��I��L��L����A9�t����L���ܩ�L��L���+H�\$0�2��I��L��L�����A9�t˅��j�������f�H��t@H�EH�@H��H��I��I�M9��X���K�|?I��n��M9�|��A���H�E����H�E�H��H�5�L��������H�aMH�5�H�81�覕�|$�1��w�H��`MH�5��H�81��~��fDI��uH�|$����H��`MH�5�H�81��N��fDH�|$L��H�5����d����H�EH�E�uH�EL�l$0L�t$0H�@����ti�%L�����L��L���+H�\$0�Ճ�I��L��L�����x��+���L���F��E������L��L���+H�\$0蓃�I��L��L���E�A�Ņ�~�������@��H��H���H�t$H�t$�A���H���ff.����H���g�H��軧�1�H���@��UH�GSH��H��H��uH�G1�H�@����@���ߊ�H�{H��胛���H�H��H���|�H��H�CH��t}H�x�T����H�H��H���^|�H��uMH�[1�H�C����H��@���Hc��5|�H��譠�H��xPH��������?H��H!�[]H�D��H���f�H�CH�x�Ӛ�����H�����H���u���H��H��H	�[]H�D��H����H���������USH��H��H��^MH�8�[�H��H�CH��uH�CH�PH�5�QNH����J�H�SH�5�QNH���J�H��t!H��H�SH�5�QNH���J�H��H��[]�H�[��f.�������@��u:H����H��t.1�H��u�fD@��u�H������t�
u�@��f.�H��\MSH��H�0�
��H��u H��UMH��H�0��[H��������[Ð��AUH�GATUH��SH��H��L�oH�t$H��uH�GL�`L��L	�t$H��L��L��H����H��$t}H��[]A\A]�f�L��������u�L�������u�H�5�vL���J�H��u�H�5�vL���J�H��u�M��uII������tH�TMH�5H�H�81���fDH�t$��!��H��[]A\A]�fDA��t*I���‰�I��u���t�H���_�����t���4����I�E��H��u�M��t�A��u�I�$��H��u�H�CH��uH�CH�HH��L��L���؏���S��������!م��[Oȉ����AWAVAUATUH��SH��H��H��dH�%(H�D$1�H��YMH�0���H����L�eH�E���H�mE1�H�E����L�mA��H�kH����H��H�C����L�{����I����I������L��L���,�������H����I��tD��L��H���������~I��uXI��t��L��H�������ua�H�L$dH3%(��H��[]A\A]A^A_�f�H��� ����H����L��H�,$��}�H��uY�1��@H�[�����H���D���I����I���i���D��L��L���<������S���1��Q���DH��L��H���zS���1���I������D��L��L������������1�����覄�H���n��H���M�H�5��H��H�QMH�81����I������H����L��L�<$��|�H�������1�������H��tH��H�t1�1�����H���PH�QMH�5C�H�81�艍�f�������USH��H��H�H��uH�CH��uH�CH�x���w�H���Q�H��H�CH��uH�C1�H�@����H�5��H����H���$u�H�{tmH�CH��tpH��tH�CH�x�Mw�H��$tH��H���^�H��H��[]�f�H��uGH�H�G����H���H�=��HD���u�@H��u�H�C뛐H�xu���H���f.�1�1��V�H������ff.�@��USH��H���>i��u:H��1�1Ҿ�
�	{�H�߾�
1�1�H���z�H��H��[H��]�}�@H��1�1�[]�!����SH�� dH�%(H�D$1�H�BH���}��tD��ueH��H�H��H�$H���tC�vF�I��1�1�L����H��H�D$��S�H�D$H�L$dH3%(u=H�� [�H�����H��밺��l�H��NMH�5�H�81��$��菁�ff.�@������UH��SH��H��H�vH���X�H��tvH�CH��uH�CH�pH�EH�E�uH�EH�x�X�H��tAH�E�uGH�mH�E������H��tOH��H�C������8�uH���[]�H��1�[]��H���f.���f.�H�[�f.���SH��H���P���u1�[��H���x]�H��耝�1�[�ff.����H9�tOUH��SH��H��H��H��SMH�0��|�H��uH��[]�DH��H��H��H��[H�=s]�Ml�D��f���H9�tOUH��SH��H��H��H�qSMH�0�|�H��uH��[]�DH��H��H��H��[H�=3���]��k�D��f�������UH��SH��H��H�vH��;B��twH�CH��uH�CH�pH�EH�E�uH�EH�x�B��tCH�E�uIH�mH�E������H��tQH��H�C������8�uH���[]�f�H��1�[]��H���f.���f.�H�[�f.�USH��H��H��uH���{�f.�@��u�H�H�ƒ�H��t��u�H��t0��tH�CH�xu0H��[]��H�C��f.���t�H���a�H�뾿a���H�=��H���7H��H��H����b�H����c�ff.�@��UH��SH��H���+���H��H����H��H��[]�fDH�ATI�@UH�l?SH���H��H��贚�J�#H��H��y�H�@訂�H��DH��舚�H�߾�Y�H����fD��USH��H��H��ENH��u H�-���H���Cj�H��ENH��t�H��H��1�1�[H��]�u�f�AWA��AVAUATUSH��H��8dH�%(H�D$(1��Gc�H��H���<c�L�5UENI��M��u)H�H�fD�H����i�I��H�)ENH��t�L�l$ E����H��L���-H�D$ L�|$��t�H�$H���L���+L��H�D$H�l$ �t�L���L��H���t�H��L�龇H��H�D$ �t�H��H��H���J����H����I���t(H����I��?E��HD�LE��j���f.�H��tH�����u"H���J���f.�I��H�$�4���@H��OML��L�D$H�0�)x�L�D$H����L�Ǻ��L��H�D$ ��s�L�D$�H��L����I��t��A���O���f�H�$H�L$(dH3%(H�$u>H��8[]A\A]A^A_�f�L��L���+H�D$ �Rs�I���4�����z�L��荘�H�5��H��H�<GMH�81��2��f��@��umH��upUH�-<�SH��H��H�	CNH��u@�H���sg�H��BNH��t�1�1�H��H���H�H�������H��$��H����[]!��@��@��u�H���H��
�z����f���AWI��AVAUATUSH��(H�_dH�%(H�D$1�H�GH��uH�GH�h����@����H�؃�H��t#���2H���H����f.�I��H���(H��H��tBH����r�H�ƒ�H���R�@f(�fTc�f��fH~�fH~�H��f/�HG��_���}I����I��I�GI�n�A�H��H��H�D$H�D$H���I9���H��H��H��H��?H��?8���H��H)�I��I��?I�I�M�<(M���H�0I9���L��H��<������I��M���uDL���X��I����MH���I��?E���&L��I9��S���f.�H�t$dH34%(L����
H��([]A\A]A^A_�f.�H�؃�H���P���H���$���H���H���sH���^H��������t1�������mH�����H���
H����������	�^�I�����L�t$��uG���H���6���I��?E���L��L���*H�D$L���o�I��L���+H��L�d$�{o�H��I�����I���u�H���H�������H�,KML��L�$H�0�ms�L�$H���	L�Ǻ��L��H�D$�o�L�$�H��L���E���f�����A���)���H���H�������I��H������H���o�H�ƒ�H���r�@f��f(�fTG�f/�fI~������I�����L��M�w�$���@H���H�����t�H�7JML��L�$H�0�xr�L�$H���gH�L$L�Ϻ��H�D$�n�L�$�H��L���'D���W��A���E���@H�0L��H��H�$�$fWO�fH~�H9�t5fH~�H��<��������I��H������f.���2�I�����H�DI��I��?I�M��I��O���fDL�<$�$��DL��M�����DM��I��I��I���\���@H��I��I��I���D���@�[q�H���S��E1�1�1�H��L����I���Y���f�M��[����@���H��������H���������Z��t�I����I��1�I�G����H��H�������I������@H�I��H��H��wZ���?���I����I��I�GL�$$M�|$�A�H��H��H�D$H�D$H��DH9$�v���H��L��H��H��?H��?8���H��L)�I��I��?I�I�M�K�l$H���Z��I�ƨ�OH���I��?E��� L��H9$|��
���H���r���H���}������u����Y�A�L�t$��uF�W����H������H��?����L��L���*H�D$L���)k�I��L���+H��L�d$�k�H��I��葏�H�Ũu�H����H�����t�H��FMH��H�0�o�H�������H��L��H�D$�j�H��H���@�����������;���DI�D$M��H�$�g����H����H�����t�H�7FML��H�0�|n�H���8H�L$���L��H�D$�#j�L��H���3@���h��A���O���I�I��I��?I�I�����f.�L�������L��I�����H�E��H�����������M������A��t
@����L��1�H�����I�����M��4���H��1�H9�����H��H��H��?H)�H	�H��H�$�~$�{���H��E1�H9��8���H��H��H��?H)�H	�H��H�$�~$�Z���L��H�H�H�$�W�H�$������H�$L�}L�b�I��@L9<$�6���L��L��H��H��?H��?8���L��L)�H��H��?H�H�L�H�DH��H�D$���H�Ũt>H����H��?��tI��L9<$|�����fDH�CI��H�$�x����H����H�����t�H�DMH��H�0�Ll�H������H��L��H�D$�g�H��H���>���������c���K�<H��H��?H�H��#���f.�I��L�l$����I������M�����H�D$���3A���)H�I��U���S���H�$M�}H�k�L9<$}_L��H��H��H��?H��?8���L��H)�H��H��?H�H�H�L�lL��襋�I�Ĩt3H���t���I��?E��tI��L9<$|�L�l$�X���H�CH��H�$�H��t{H�����t�H��BML��H�0��j�H�������L��L��H�D$�f�L��H���<�������A���q���J�D=H��H��?H�H��8���I��L�l$���L��1�H����I�����L�l$���L���v��H�5��H��H�%:MH�81��w�L����L����H����H����d�H�5*�H��H��9MH�81���v��Tm�L���ff.�@��ATH�GUSH��H�oH��uH�G@��u=H��u%��H���xy����[�]A\�fD@��u�H�U��H��
u�L�`H�2AMH�0L���wi�H��uI��u��̍[]A\�k*�H��u/H�[1�H�C����L��[H����]�A\�jj��f.�H����H����c�H�56�H��H��8MH�81���u������ucUH��SH��H����R��uCH�{H�CH��uH�CH�xt7H��t1�\��tH�����H��t
H��[]�H��H��1�[]�m���H��[]�})�ff.�f����g������ATH�GUSH��H�oH��uH�GL�`I���@��u?H��u'��H����w����[�]A\��@��ujH�E��H��
u]H��?ML��H�0��g�H��t[H��u-H�[1�H�C����L��[H����]�A\��h���H����f.�H���_���A��uCM��u+L���3b�H�5��H��H�27MH�81��(t��A��u�I�$��H��
u����[]A\�,(��D��AVH�BAUI��ATA��USH��H��uH�BH�hH����E���dH�C�u7H��t�t"H���}�[L��]D��H��A\A]A^�m�@H���H��
u�@��uH��t�@��u�H�E��H��
u�H�O=M�H�8�b9��t�H�sH����H�[L�sH�[L��H���@���H��H����L����?��I��H����H���'������A���(I�]����H��$L�dH��L����+��H�����t@����H��I��H�H���l-�L��L��H���n?��I��H��t'fDL���H��H��H��I����H��u�[H��]A\A]A^�H�������H���HH��H���'���[1�]A\A]A^��,�H��I����g�H���i���DH���g�H��H��xMH�@H�����H���]m�I������H�65MH�5��H�81��q��D���S�H��<MH�5[�H�81��q���AUATI��USH���zN����I�l$I�D$I�$���H�XH�@H��H���I��A����H��t$H���H@���>H�U��H��
�-����H����H��H�����H����������al�H��H���<M��ucH���X��uWH��H���8���JfDI�D$�L���fD��tCH��tH��H9�tH�߾�Z=��H��H��H���<��H��L��[]A\A]�fDH��ts��unH���H��
ubH����H���X��t*H��t
@����H�@�k�H��H�����H��H������H���W�����������H��1�1�[]A\A]�g�D��b�H����s�H��L��1�[L�j���]1�A\H��A]�Kr�H�����H�߾��'�H����fDH�߾�K<��H�è�'����`���H��� W���+���H���5�����]�H�5j�H��H�2MH�81��o�ff.�AUI��ATI��UH��SH��H��dH�%(H�D$1���t��u/H��t)I��t#H����H��L�$$�]�H���@H�CH��uH�CL�hM��tA��uL��H����Q�H�CH��uH�CH�(H��t@��uH��H���Q�H�CH��uH�CL�`M��tA��uL��H���Q�H��t<��uWH�SH�8MH9t=H�D$dH3%(��H��[]A\A]��H��9MH�H��7MH9u�H���9��H��t:H��tD��u��tjH�C6MH��fDH��0MH��v���f�H��6MH��^����H�Q2MH��N���H��8MH�5��H�81��Im�f�H��4MH������c�ff.����AUATUSH����~H��L�&L�n��t��tD���jN�f.�H��1���H��L��L��H������H���[]A\A]�H�^H���Y��H��H��HE�����AUATUSH��H��t	H��@��tH�m/MH�5��H�81��\l�@H���H��u�H�8MH�H9Cu�H�����H�5M+NH����k�H�56+NH��I���k�H�5+NH��I���k�H��tH��L��L��H��H���HE�����H��H��[]A\A]�ff.�@��AVAUATI��US�H����I�\$I�D$I�$�uI�D$I��H�hA��t{H����@���:H�������>H���P6�H����I�T$I�$�uI�T$H�B����H�
���H��H����E1����?b[L��]A\A]A^�H��u+H���5�H���'H��u�1�H�5���H���h���t��u���@H���H��
��H���SH���~R���H���~�H�߾�<�H�èt�H����@���6I�@H�L�lL��H��I����}�L9�u�H����e�H��I��A��M������H���Q�H��A����Q�A9������I�D$I�$�uI�D$H�@����u�H���]}�H�߾��;�H��H��H���R3�H���t�������\�H����m�[L��]L�W�A\1�A]1�H��A^�El�H���|�H�߾�;�H����@�������>@����H���6-�H��I�D$I�$�uI�D$H��E1�H�@����A���-�D��H��E1�H�
���H���0`[L��]A\A]A^À�tH���H�����H���@��t�H���n���@���d���H�E��H���]����N���H�E��H��
�4���H���mP���X���M������H���TP������H������@���$����D���@������@��u�H���P������뵐L��H��H��[]A\A]A^���H���������
�������H���x{�I������H�߾�:�H��H��H���c1�I��H��u������H���j����H��u=f.�H���{�H��1�1Ҿ��wV�H�����H���Uj����I�\$I�D$I�$�uI�D$H�hH�@����u�YH���z�H��1�1Ҿ��V�H��H��H��������x�����@H���z�E����H��1�1Ҿ���U�H��H��H�����A�Ņ�~�����H���*�1�H�5s��H����c���H���T�H�5��H��H��)MH�81��f�H���+��ff.���AVAUI��ATU��SH��H�� H�zdH�%(H�D$1�H����H�|$A�@����H�{H����L�c�+C��u*H�H�C���uH�CH�@����tE��t����I������L���^�H��H�L$dH3%(H���mH�� []A\A]A^�f�H�A�H�|$@���i���H�`0ME1�H�0�X�H��A��H���?���H�CH�x�6���@H�l$I����A���g@����A����L���H���LH���H��t$H���4@���*H�E��H���H��tN�@<�H��L���$c���������H����H��H�C��������H���u5H��t@��tH��'MH�57�H�81��}d�DH�M��H��
uօ���A��u:M��tA��t"H�K'MH�5�H�81��:d�f.�I�$��H��
u�H���H��H�H9���H�l-��$���f.�H�[�1����M����������L��H�L$�R�H��L��H����(��H�H�l$�����������fDH�!sN�@<�:���I9�����������DH�����������^�H���s���f�I�$��H��tSL���H������I�$��H�����6���DH��H�L$��-H�D$��Q�H���
���H��.MH�I;D$u�H��uL���H�����M��u�����@���s���H�U��H���b���H;E�X���H�$rN�@<�G���H��L���`����H��%MH�5��H�81��Rb��X�H��%MH�5��H�81��5b�D��ATUSH��dH�%(H�D$1�H�z����I��H���?��tPH����H��H�{����L���Z�H��H�L$dH3%(H���_H��[]A\�����H�H�kH�S%���L�bL�$$I��t�@����H�������H��H���DP�L��H��H���V&��)�m���H�%�H����H��H�C�����J�����@����H�[�����H�S�e����A��t"H�{pN�B<uL9���������H�����H���H��t#H���6���H���-���H�E��H������L���H��t$M������A�������I�$��H�����H��oN�@<����L��H���^�����@H�E��H���k���H��+MM����H�H����H�5,MH9������������A���{���I�$��H������I;D$����H�aoN�@<����L��H���]��a������H��L�����H�����H�[�X����H9Eu��tJH���H������������U�H��"MH�5V�H�81��<_�H��"MH�5n�H�81��$_�A���f����1���D��AUA��ATI��UH��SH��H��(MH�8�'�A��L��H��H�H��H��H�у����H��H��[]A\A]�ff.���AWAVAUI��ATI��UH��SH��H��H��(MH�0�Q�H��tNL�sH��u9H�[1�L�{H�C������M�uM�<$�EH���[]A\A]A^A_�DH����f�H�jNH��H�0�>Q�H�������H�5+N1�1�H���/"�I��H��$tvH�5N1�1�H���"�I��H��$tZH��NH��u#fD�H�=T��7A�H��NH��t�1�1�H��H����!�H��$tH����������)���DH��1�[]A\A]A^A_�ff.�@��AVA��AUM��ATI��UL��SH��H����@����H��H�H����@����H��H�H����H�(H��HH�E��tq�D$@����uH9���H9�HO���H)ؾI�$HH�I�EH���[]A\A]A^�H�t$�fR�H�t$H��H���t���H��yH�x6H�E�H���1�H��t�@���X���H���&R�H���V���H��M���H���[]A\A]A^�f���AVI��AUI��ATI��UD��SH��H�� dH�%(H�D$1�H�T$H�L$H�t$�l�1҅�u'H�\$dH3%(H��u_H�� []A\A]A^��H��L��M��M��U�T$H�t$ H�|$�O���H��XYH��u���t�H�MH��H�5�H�81��[���Q���U�H�=ߪSH����>�H�=�H�rN��>�H�=��H�RN�>�H��H�-�&ML�
��jL��H�
��H�uH�N1�H����H�=���(�H��$MH��H�ZH�MYH�2��!�H�uH�;H�
7�H�����;9�H�;�����H���H�5c��0+�H�;�H���H�5m�+�H�;�H����H�5��*�H�;�H����H�5����*�H�;�H�P��H�5�l��*�H�;1�H����H�5���*�H�;1�H�P�H�5m�*�H�;�����H�ս��H�5���y*�H�;�H�Z��H�54,�^*�H�;1�H�B�H�5�l�F*�H�;1�H���H�5�m�.*�H�;1�H�����H�5���*�H�;1�H�z���H�5��)�H�;�����H���H�5����)�H�;�����H�T�H�5����)�H�;�����H�����H�5�l�)�H�;�����H���H�5��)�H�;1�H����H�5�l�z)�H�;1�H��H�5q��b)�H�;1�H����H�5Kk�J)�H�;1�H����H�5���2)�H�;1�H����H�5k�)�H�;1�H�޷��H�5�q�)�H�;1�H�&���H�5����(�H�;�H����H�5����(�H�;�H�p��H�5�k�(�H�;�H�����H�5���(�H�;�����H�*�H�5@�~(�H�;H���[H����H�5t�]�](�f.���H�G����H�G����H�G�tH����H��?H��?��ÐH�H��
��H��?H��?���f.���H�G�tH��?H��?H��?���@H�H��
H����H��?H��?���fD��H������H�wH��e��ff.�@��SH�W��t"H��H�_H��?��u)H��H��[�Ge���H�H�_H��
H������t�H���2]��H��H���e��[H���]��ff.���SH�_H��\��H��H����d��[H����\��f.���USH��H�WH�_��tIH��H��?��uPH�׾��2��H��H���6,��H�߾H���2��H��H��[H��]�ud��DH�H��
H������t�H���f\���H���y2��H��H����+��H�߾H���^2��H��H���#d��H��[H��]�%\��D��USH��H�WH�_��tYH��H��?��u`H�׾�2��H��H���v+���H���9"��H�߾H����1��H��H��[H��]�c���H�H��
H������t�H���[���H���1��H��H���+���H����!��H�߾H���1��H��H���Fc��H��[H��]�H[�����ATUSH�GH�o���H��H��?H�ӄ����H���)1��H��H���*���H��I���1��L��H���33��H� u*H�@ H�xH�(@��t*H������u-��u?H��[]A\�f�H��H�xH�(@��u��b������t�H��H������y��H�ń�t�[H��]A\�oZ���H�H��
H�������<���H���JZ���/���D���Q
H������fD��USH��H��H�wH��D�H��H��H���xd�H��H��[]�ff.�ATI��UH��SH��ֺH�5��H��H���I;�I�|$��H��H���X�H��[]A\�ff.�@��H�55M�@��t
�uY��DH�7 �4�@AWAVAUATUH��SH��8H�?dH�%(H�D$(1�H�H�H9���?.H��I��I����A�L�l$H��H��H�L$ L��H�}H)�A�A�
L�T$H�D$ ��L�T$H��I����H�D$H�|$ H�EH��������?H9���H�t?I�6�L�T$�3��L�T$I��tI�<$H���.��L��H���'��I��H�|$ M�<$H��������?H9��`L�|?H�}�vDL�l$H)�A�1�A�
L���J�I��H��u)�1�H�L$(dH3%(�H��8[]A\A]A^A_�H�|$A�H�}I�$H9�s	�?.�����H�GH9������߀�EuH�E�WA�?�JՁ�uH�GD��H�EH)�1�A�L��H��A�
H����H��t5H�T$H�UH��t&A��-tPI��tL��H�����H�����I�@�����fDL�T$�-�L�T$H���n���f�I��t�L��H���&���D�-�I������F�fDUH��SH��H��H�>@��t;H����H��x���&��H��[]�H�}�V��H�EH�;�V��H�H��[]ÐH� t���]�����ff.���H������U�H��H�=gSH����H�5�MH��H���@���H��H���U�H�ߺH�5'��7�H��H��[]����ATUH��SH�vNH��u%L�%�f��	L���2�H��H�QNH��t�H��1�1ҾQ
�>�H��1�[1�]H��A\��=���ATUH��SH�NH��u%L�%��f��L���S2�H��H��
NH��t�H��1�1ҾQ
�=�H��1�[1�]H��A\�=�UH��H��S��H��H��H��t0�GH���{�5�q�+5�5�H�EH��[]�fDH��f�H9�t�H��H��H��?H)�H	�H��H�|$�~D$���SH��fH�=MffH�+�H�޹ �H�8�C�H�@H��H��H�@��C�H��[�H�G�uHH��u3SH��H��H���S8�H�{�D$�D8��L$H��[�^�f(�èu�H���H��
u�H�w@��uH��t�@��u�H���H��
u�H���n�����H���s���H�0fH~�H9�tOfH~�H��<������tH��H��u,H����fH~�H��H��H��H���f.�H�������ATUH��SH��H��H�� H�5�NdH�%(H�D$1��?L�H�5�NH��H�D$�+L�L�d$H��H�D$A��uxM��u3H�<M1�H�0�?�H�[MH�5ڶH�81��JL�f.�A���I�$��H��
t)H��ML��H�0�7?��t�I�$��H��
u�H�l$�@��ujH��t�@��tH��MH��H�0�>��v����H�E��H��
t3H��MH��H�0��>���G���H�E��H��
�6����H�t$H�|$�A���H�t$H�sH��t@��uH����.�H�t$H�sH��u'H���?A�H��H�T$dH3%(u3H�� []A\�@��u�H���.���H��ML��H�0�.>�����tA�@��ATUSH��H�� dH�%(H�D$1�H��uH���>�@@��u�H�H�Ѓ�H��t��u�H��H���yH��u�H���7��@��u�H�UH�Ѓ�H��u�� �!H����H����H��L�eH�mL�d$H�l$A��utM��u/H�M1�H�0�N=�H�'
MH�5��H�81��J�fDA����I�$��H��
t)H��ML��H�0�=��t�I�$��H��
u�H�l$�@��u H��t�@����H�E��H��
��H�t$H�|$�[���H�T$H�5�NH����H�T$H�5�NH����H��H�L$dH3%(��H�� []A\�H�UH����H�m ����f����~���H���"��q���f.�H��ML��H�0�<�����f�H��MH��H�0�;����H��MH��H�0��;�������H�E��H��
�����{���H��MH�5{�H�81��H��>�ff.��H����V����ATI��UH��SH��H��A��u7H��uH��H��H��[]A\��D@���H���H��
�VH�}H����uRH��t
@����H���(���H���D$�2��T$f(�f(��gP�H����H��1�[]A\�f�H�E�uH��t��u�H���H��
u�H��tfH������tM���RH�������1H�E�t�H�H��u�H�}H��H��[]A\���fDH���H��
�@���H�E�t��CU�����@H���H������H���@���f��H��H9�����H�ڸH��H��?H)�H	�H��H�\$�~L$���H���H��t�H����H���X���H�}@����H����H�s��t@����H������u,H�sH�}���H�������H�sH�}���H���}���H���[]A\�@H���@T�������fDH���H����K�2���fD�T�����f���f�H���S�����d���ff.�AWA�AVAUATA�U�SH��I��H��XH�t$H�T$8H�L$0dH�%(H�D$H1�H�D$@H�D$H�D$A�����H��t#���"H�؃�H����f.�H�qNH��u!@�H�=��(�H�PNH��t�1�1�H��H����3�I��A���UM����E1�H�D$H�L$�L���<H�D$@�3�H������������VH�L$L����-H�D$@�3�I��H���yH����I����H��I��t8A����M��t
A����H�L$L����*H�l$@�'3�H��I����H��t/@����H���aH�L$��+L�|$@��2�I��I���jI���AI����L���H�D$(I����H����M��tL���H�D$(�cH�L$��*L��L�d$@�w2�H�|$L�|$ I��t`H���H�D$(@A����M���mH�D$H�L$L���+H�D$@�2�I��H�|$(t
I����H�L$H�|$��-L�t$@��1�H���q���H�L$H�ߺ�-I��L�t$@��1�L��H���G���L�d$M��I��I��H�D$H�l$ A���=���I��L�l$A���kA�H�t$L�����H�������H���.����������fDH����H����I���I��t6M��u#M����A����I���H��
�tH��L�����H��I��t<H����@���%H���H��H�L$@��+L�|$@�0�H��H�D$8H�(I���I��tJI����I��� M��u#M����A����I���H��
��L��L�����I��H�|$��I��t@A���MM���*H�D$H�L$@�L���+H�D$@�0�H�D$�H�D$0H�L$H�H�D$HdH3%(�H��X[]A\A]A^A_�A�������I�E��H��
�x���H�t$L������I�����@�������H���H��
�����L�����I��I�������A���M������A����I�������H�|$����H��L�|$ L�l$H���o���H�I�ރ�H��
��I���H��
������%������H���������x���H���H��
�h���I����I�L�l$L�|$ ��H��
�����I������Z���@I���H��
�M���L��H���E��H��I���^���I�����@��uH��t�@��u�H�E��H��
u�I���m���L�|$ L�l$I���-���@H�|$���H��H���_���1�L;t$���[���f�A�������M��tA��tCH�D$(L�|$ L��L�����I��H�|$�����I���i���L�l$����I�$��H��
�M����DL��L�|$ M����H�D$(�H���L���H�ڃ�H��t
H���*���1�H���pX��I���W����A���X��������I�L�|$ ��H��
�>������fDL�|$ M���4���A������I���H��
�����H�t$L�����H�D$����@�������H�E��H��
���H��L������H��H�D$8H�(I�������M�������M���%L��H�L$@��*L�d$@�i,�H�|$I������L�t$�P���M���WM����A���I��t@I��������)����@��u$H������@�������H�E��H��
���H�D$8L�8I������I�������A������M���_���A���U���I�$��H��
������?����L�����H�L$@��*L��H�l$@�t+�H���v���@M������A�������I���H��
�F�������L�l$�/���fDL���t���I���H��
���H�D$8L�8I���d����L�|$ ����f.�H�D$8L�8I���<��������T2�@��ATUSH��H�� H�dH�%(H�D$1�@��t/H��H��?��u6H�L$dH3%(H���CH�� []A\�@H�H��
H������t��g��H�SH��������H�[H�t$H�|$H�T$H�D$��H�l$L�d$fH�=MffH��H�޹ �H�8�_��H��H�hH��t@��uH��H���R�L�cM��tA��uL��H���8�H���0�����H��tBH��tL��u'��tQH�
KMH��L���H�
�MH��:����H�
��LH��*����H�
�MH������H�
Q�LH��
���H�
MH�����0�ff.�f���H��u���
�DAVI��AUATUH��SH��H��A��u}H�I�����
��u����H�}I�t$@��tH�E��y�|��H�uI�|$H���k��I��L��H������H��H��[]A\A]A^��@H��H���H���H��$��@��ux@����H��f��H9�t%H�ڸH��H��?H)�H	�H��H�\$�~L$H���L$�O��L$H��[]A\A]A^�A�����H�}�dH����H��ML� fH�=��LffH��L�� �H�8���I��I��H�XM��uH��H����I�EL���z.����D����H�؃�H�������K�0���DI�T$���y���I��A���l���H��H�H��=H���4H���AH���iH��H����H�@H�\?H��NH�H��(���H������H���L�lH������H��H���RH�@L�l?H�����$3�I������@H�}H������@H����[]A\A]A^�2�f�@��t*H��tDH��tN@��u(@��tYH��LL� �Z���L�e�N����H�Q�LL� �8����H�!ML� �(����H��LL� ����L�����H���LL� ����H�@H�xCH�\6����H�@H�xCL�l��H�\����)2�I�T$H��H�E���H���2�I�T$H��H�E���H���1�I�����H��H�T$��1�H�T$H��H����1�H��H���A�I���w���H���1�H��I���1�L��H���A�I�T$H��H�E������AVI��AUI��ATUSH��PdH�%(H�D$H1�L�d$H�l$ L��H�\$0�.�H���.�H���.�I�6��@�H��I�F��H��E1�L��E1�P��������$�I�u_AX��@��H��I�E��H��E1�E1�H��P�������$�YH��^H��L���!�L���iD�H���aD�H�����H�xH�����H��H�xH�@uH�xH�t$H��E1�E1�S��������XH��Z�D�H�����H�L$HdH3%(u*H��P[]A\A]A^�I�EI�u�5���I�FI�v�����*�ff.���AUATUH��SH��H����uwH��u2H��L1�H�0�a'�H�:�LH�5��H�81��)4�f�����H���H��
t+H��LH��H�0�'��t�H���H��
u�f�H����@���H��I���A����H����H���`H�H��
H��������M����H������uD���UH������t$�5D���OH��H��H�����H��@��t�H��u�H��H��[]A\A]�@I��A��H�E ��I��A��M���[���H��H��?���b���H���|9��H��M���W���H����@�����L���fDH�EH�ƒ�H��
���H������������H�H�у�H��
������@�>H������@�>H�SH	������H��H��H��[]A\A]�T)�@H��LH��H�0�^%����f�H��H��[]A\A]�f�H���(@�������fDH��H��?H�H��H1�H)�H�x8H���gH��u6f�H�@H��]H��H�D?[]A\A]�DH��H���XH��1�H	بuH��H��H��H	بt�@��u�H��@��t����tH9�s	H��H��H��H)�u�H���p���H����H����7��I��H��A������H���7��H���
���H��H��?H�H��H1�H)�H���H��tH������H��1�H	بuf.�H��H��H��H	بt�@��u�H��@��t����tH9�s	H��H��H��H)��<�����u�H����f.�H������H��[]A\A]��+�H��H���^���H���l���@H�E����H�������ff.����AWAVI��AUATUSH��H��(dH�%(H�D$1���usM��u.H���L1�H�0�"�H���LH�5U�H�81���/�DA����I���H��
t*H�s�LL��H�0�"��t�I���H��
u��I��A���CH���IM��A���DI���2H���1L��I��H� �fM���;L��L��H��?���BH���WI������uF@����H������t%�D@����L��H��L��� ��I��A��t�I��u�H��t6M����H��t	����H��H�L$��/H�l$�x�H��I����I����H���H���u����H��t	����H��H�L$��*L�t$��I��H��A�����tsM�������M���)H���(L��I��I�L��H��
H�����������L��H�T$�\4��H�T$H��H�������L����;�������f�H�H�ƒ�H��
�z���M���q���A���g���I�H�у�H��
�T�����@�.H�C��@�I�VH	��1���L��H���9$�H���p����H���8;��������H�L$dH3%(��H��([]A\A]A^A_��H���H��
�<���H��H���;��H��I���M�������H���p������EH��twH��tq���I����H��L���5	��H��I��A��M��uKH����H�5��M1�1�H���J��:���DM��uM��t�A��u�I���H��
u�@�H���SX������fDL��� :�����H����������f.�H���LL��H�0�����f�H���X2��H��I�ǃ����f.����:���H���H��
�*���H���W���o���f.�H���H��
����%���H���H��
�(������L������H���H9�����8���fDL��I��?H�L��H1�L)�H���H���H���H�@H���H�l?����DH��H��H��?H�H��H1�H)�L��H�xBH����H��u@H�@H��IH�l?H�������I�������K���H��H���TH��1�H	ƒ�u�H��H��H��H	ƒ�t�@��ufDH��@��t���t4H9�s	H��H��H��H)�u�H���]���f�H�������H����L���e���H��1�H	�u@H��H��H��H	�t�@��u�H��@��t��@��t"H9�s	H��H��H��H)�u�H������H����H��H��u�H���f�����$�H�������$�H�����H�������@H��������@H������H���d����{�ff.���AWAVAUATUH��SH��H��(dH�%(H�D$1���usH��u.H���L1�H�0���H���LH�55�H�81��(�D���H���H��
t+H�T�LH��H�0���t�H���H��
u�f�I��A���CH���I��A����H���2H���9L��I��H�E ��M���CH��I��H��?���JH���_I������uEA���<I������t$�$@A���6L��L��M�����I��A��t�I��u�H��I��t7M��� H��t
@���H��H�L$��/L�d$�T�H��H���H���8H���cH����@���H��t
@���H�L$��*H�\$��I��H��A�����@��tjM�������M���XH���oL��I��H�I��H��
H�����������H��H�T$�3-��H�T$I��H�������L���4�������H�EH�ƒ�H��
u�H��t����x���H�H�у�H��
�e�����@��H�E��@��H�SH	��B���H��H���!�I���x���f�H���4�������A�H���I��A��H�E �>M����H��H��?����M����H������uP����H������t&������H��H��H������H��@��t�H��u�f.�L��H���e�H�L$dH3%(��H��([]A\A]A^A_�f�I��A���CA�A�H�H��
H�������=���H���+��H��M���2���H���2�����'���@��uH�EH�ƒ�H��
u	H����M�������I��A���{H��y�H���&+��I��H��A������H�E��H��
���H��L���2��H��H������@����H���$���@���"H��ttH��tn@�������@H������H��I��A��M��uNH����H�5I�M1�1����I������M��uH��t���u�H���H��
u�D���O��I�����fDH���1�������H���f������f.�H�I�LH��H�0�����f�H����)��H��I�ǃ��5���f.�@���6���H���H��
�&����QO��I������f�H���H��
�������H�����H���0�����>���fDH��H��?H�H��H1�H)�H�x0H���'H��u.f�H�@H��eH�\?�3���H��H���tH��1�H	بu�H��H��H��H	بt�@��u�H��@��t����tH9�s	H��H��H��H)�u�H���p���H����H���H��
�H����������>���H�H�у�H��
�+�����@��H������@�H�SH	�����H��H����H���K���M�����L���/�������fDL��I��?H�L��H1�L)�I��|H����M����H�@H��L�d?���D���H������H��H��?H�H��H1�H)�H���H��twH���N���H��1�H	بuf�H��H��H��H	بt�@��u�H��@��t����tH9�s	H��H��H��H)��|�����u�H����f.�H������H��H��H��?H�H��H1�H)�H��H�xrH����H��upH�@H���L�d?I������H��H�������`���H��H������@H���X����H�E�#����H��H���tH��1�H	ƒ�u�H��H��H��H	ƒ�t�@��ufDH��@��t���t,H9�s	H��H��H��H)�u�H���-����L���1����H����H���R���H��1�L	�u@H��I��H��L	�t�@��u�H��@��t��A��t"I9�s	H��L��I��I)�u�H������I����I��H��u�L�����H��G���H��H������@�S�I������H�������@�3�I���_���H�����W���@H�����:���@H���/���H���������AWAVAUATUSH��L�/dH�%(H�D$1�I����H�I��H����H��M����I��A��I�E �TM��A��M����H��H��?����M���I������u���XH�������L��L�mA��� M��t
A���L��H����
H�$�p�H�EI�<$@���fDH����+��I�$H�D$dH3%(��H��[]A\A]A^A_�f�A����H��M���A�������H���M���1H�H��
H����������H���s#��H��M�������L����*������D���_L��H��L����I��A��t�I��u�L�mA�����@L��H���*��H�EI�<$@������H��t
@����H����
H�$�6�����I�EH�ƒ�H��
����H�����������H�H�у�H��
�����@�nI�E��@�QH�SH	������H��L�����H�������L���X"��I��I��A�����f�L���8"��I�����H���H��
�(����/���I�E��H��
�������f�H���x)�������fDL��I��?H�L��H1�L)�H��tH����H����H�@H��gH�\?�W���DL��L��H��?H�H��H1�H)�H�x-H���dH��u+H�@H��H�\?�:���f�H��H���<H��1�H	بu�H��H��H��H	بt�@��u�H��@��t����t+H9�s	H��H��H��H)�u�H���q���H���1����H����H��1�H	بu@H��H��H��H	بt�@��u�H��@��t����t#H9�s	H��H��H��H)�u�H������H����H��H��u�H�������;�H�����H�������@H�������@H�����H��������ff.���AUATI��USH��H��H��(H�-�LdH�%(H�D$1�H�u�I���)H�؃�H��t%H������C���JH���U���_H�uH�����H���h��H����H���r���iH���H���Y����H���H��
�XH�ڃ�H����L�����H�0fH~�H9���fH~�H��<�������`H��H����H����H��f�H�L$dH3%(H����H��([]A\A]�fDH�������H�u1�1��������H��L���Z��H���DH���H��t,�������H��
�����H����H�{��@H���H�������H�{@����H��t
@���{��1���@I�|$@���H��t
@�������������H������H����M���bH���LL�*H�\$H�l$H�l$H��H��H�D$�y��H��H���N���H�\$L�d$fH�=��LffH��� �L��H�8����H��H�XH��t��uH��H�����L�eM��tA��uL��H����H���1�����@H���H��
��1�H�������H�؃�H������H���%������^���H�؃�H�������i����H���H��
�@1�H����������H�[����fD�H�����������M����A����I�\$fH�=k�LffH�c�� �H��H�8���H�@H��H��H�@�3�����fDH������H�����H������I�|$@���)H���@���H���H��
�H����H�uH��'���H���H��
��1�H������@����H���f���H���+���H������H������������O���I�|$H����I�|$H��H�����H��H������H��tTH��u<H���aH���.�����&���H����H���HD�HD�����@��u�H�U��H��u�H��t!H�������������H���H��������>+����H������H������H������������A��u
M�l$���I����I����A����A����H���LL�*�a���f�H�y�LH�5-3H�81����H�����I�|$H����H��H�����I�|$H�������fD1�H�������,���I�|$@������H���?H����������+��u"H������H���H��
�H�����H��Hۃ�H��M���H�V�LH�(fH�=3�LffH�+��H�� �H�8�v��H�XH��H��H�@�����1������������V����H���LH��^�������������H��LL�*���������f�I���sI����A���PA����H�!�LH����f�I�|$@����H�������;���H���j�����VK�M���HH�:�LH�fH�=�LffH��� �H��H�8�Z��H�@H��H��H�@�������f.�H��H��H��H�����@H���LL�*���H������H��uH�����������4���fDH�i�LL�*���f�@����������H�
�LL�*�z���A��u(I�l$���H�s�LH����H�D�LH����I����I����A��urA����H���LH�(���A��uI�\$���H���LH��O���I��taI��tyA��uFA����H�O�LH��x���H�P�LH�����H���LH�(�>���H���LH�(�/���H���LH��<���H�|�LH��-���H�=�LH�(����H�.�LH�����H���LH�(���H���LH�����ff.���AUATUSH��H��(H�oH�dH�%(H�D$1��r��H����H���LL�*H�\$H�l$H�l$H��H��H�D$�p���H��H���E�H�l$L�d$fH�=��LffH�{�� �L��H�8����H��H�hH��t@��uH��H�����L�cM��u0H���8�H��H�L$dH3%(��H��([]A\A]�fDA��u�L��H���o���D��uL�k�+���f.�H��t:H��tD��u��tJH�s�LL�*���H���LL�*���f�H���LL�*�����H���LL�*�����H�9�LL�*������ff.��AWAVI��AUATI��UL��SH��H��XH�|$D�L$dH�%(H�D$H1����#H�у���H���H�ك��H���H��
��L���H��u$M����A����I�$��H��
��H���u$H����@����H�E��H��
��H���^��uH�H�ƃ�H��
u	H���i	H���8H���o
I��H����H�EI��H��
H�������4H���II������uEA����I������t#��A���L��L��M���P�I��A��t�I��uِL��H���e��L��H����L��H��I���L��L��H���q��|$+L��H���(���I��L��H�����I��M����L��L���I�$ �JI��A��H����L��H��?����M����H������uGA���%I������t%��DA���vH��L��I���`�H���t�H��u�f�L��L���u��L��H��I���g��L��H����H�L$H����H���LH�H�t$@H�|$8L�d$8H�D$@�k���H�l$8L�d$@fH�=��LffH���H�޹ �H�8����H��H�hH��t@��uH��H�����L�cM��tA��uL��H�����H���-�H�L$HdH3%(H����
H��X[]A\A]A^A_��M����L�����H���D$����L$L���^��L$�y��H���D$�k���L$�|$+�^��D$�`�\�H�0fH~�H9�t+fH~�H��<��������H��H���0���蘽�H���#���A���O���I���H��
�?���H�ك������3���DL����-���M��H��A���A���I�H��I��H��H��?I�I��I�M1�I)�H��lM����	H����
H�@L��g	H��H�I��H����O�l?M��������I����
H����
L��H���nH�@L�t?H��%L��H�I��M��t?H��t:I����
O�L$H��t%L��H����H�@L�L?H���
�|$+L��L���]���I��L��H���z��I��M����L��L���I�$ ��	I��A��H����L��H��?���@M���H�����������A����I������t&�6fDA����H��L��I�����H���t�H��u��U���D�X�����I��H� ��H������H��I��H��?������H��H�L$�
��H�L$I��H�������L����������D����H�t$H�^����f�A��tjL��M���A������H����L��M���BI�EH��
H������� ���L���
��I��M������H���o�����
���DI�$H����H��
u�M��t�A���w���I�MH�΃�H��
�c�����@�I�D$��@��I�MH	��?���L��L�����I�����fDH�|$�$H�|$�h�D$���|$��H�K�LH�����H��H��H��H���O���@���I������H��H�T$���H�T$H��I�ǃ��(����I���H����M���H����L���8�������fDL��� ��������fDL��I��?L��H�L��H1�L)�H���H���8H�����H�@H��uL�l?���H��H��?L��H�H��H1�H)�H���H����H�����H�@H��
L�l?�S���L����
��I��H��A�����f�L��H�L$�
��H�L$H�����fDH��H����H��1�H	Шu�H��H��H��H	Шt�@��u�H��@��t������H9�s	H��H��H��H)�u�H������@H��H����H��1�H	ШuH��H��H��H	Шt�@��u�H��@��t����t+H9�s	H��H��H��H)�u�H�����H���h����H����@�������H�uH����H��
�y�����@��H�C��@��H�uH	��S���H��H�����I�������H���LH�����H���LH������L��L��L��H��?H�H��H1�H)�H���H����H�������H��1�H	ШuH��H��H��H	Шt�@��u�H��@��t����tH9�s	H��H��H��H)�������u�H����f.�H��H��H��?H�H��H1�H)�H��H���H����H������H��1�H	ƒ�u�H��H��H��H	ƒ�t�@��ufDH��@��t���tH9�s	H��H��H��H)������u�H����@H�A�LH��������I���C������I���C���A��tBL��M���A���)���H���pL��M����I�EH��
H�����.���fDI�$H�ƒ�H��
u�M��t�A��u�I�UH�փ�H��
u���@�iI�D$��@�OI�UH	��o������@H���+����H��H��M����L��1�H	�uDI��H��L��H	�t�A��u�I��A��t��@��t"L9�s	L��I��H��L)�u�I���5����H����H���LH��-����H��H������H������@H��H���`���H���T���@M���N��������I�����H������H���
��������fDL�����I������L��L�D$(H�T$ L�L$���H�T$ L�D$(I��L�L$H��H�I��H�����p���H���T���H��������H�������H��������H�������I�׸1��$���L���������<���H��H��?L��H�H��H1�H)�H��SH���H���*���H��H��H	�1Ƀ�uf.�H��H��H��H	ƒ�t�@��ufDH��@��t���tH9�s	H��H��H��H)�u����@H����H���n���H�����L�����I��H��A������L��H�T$���H�T$H������I������H�@H��4L�t�[���H�@H��;L�L���O�t6�4���L��L��H��?H�H��H1�H)�I�xlH��tM��ujI��H�@L���O�l-�Y�H��H�������H������L�D$ L�L$���L�L$L�D$ I������I����I��H��t�H��L��L	���u@H��H��H��H	ƃ�t��u�H���t��t$H9�s	H��H��H��H)�u�H��I���8���fDH����H���>���H��L�D$ L�L$���L�L$L�D$ I���
�H����I���I�L�����I���W�H�������H����������H�����L��I����L��H����I����H��L�D$(L�L$ ��L��H�D$��H�t$H���h�L�L$ L�D$(I���l�fD��ATUH��SH��H��0dH�%(H�D$(1���uRH��u4H�޺+H���$��H��H�L$(dH3%(H����H��0[]A\Ð���H���H��
��L�eH��L�����H�}H���\��H����H�4�LH�H�t$ H�|$H�D$L�d$ �Ъ��H�l$L�d$ fH�=�LffH����H�޹ �H�8�1��H��H�hH��t@��uH��H���$��L�cM��tA��uL��H���
��H���������D@����H���H���z@���(@����H���LH��.����H�؃�H�������H���h���f��H��H9����H�0�X�fH~�H9�t+fH~�H��<�������H��H���L������H���?���H�]����H�ڃ�H���p���H��tJH�������H�KL�CA�+H��H�UH�u��H�����f.�H���LH��8����H��舫���K�.���fDH�y�LH�����f�H�ڸH��H��?H)�H	�H��H�\$�~L$���fDH��LH������H��H��H��H���K���@H���LH�����4��@��ATUH��SH��H��0dH�%(H�D$(1���uRH��u4H�޺-H�����H��H�L$(dH3%(H����H��0[]A\Ð���H���H��
��L�eH��L������H�}H�����H����H�$�LH�H�t$ H�|$H�D$L�d$ ���H�l$L�d$ fH�=޾LffH����H�޹ �H�8�!��H��H�hH��t@��uH��H�����L�cM��tA��uL��H�����H���������D@����H���H���z@���(@����H��LH��.����H�؃�H�������H���X���H��H9���DH�0fH~�H9�t+fH~�H��<�������H��H���P�����H���C���@H�]����H�ڃ�H���p���H��tJH�������H�KL�CA�-H��H�UH�u��H�����f.�H�q�LH��8����H���x����\C�.���fDH�i�LH�����f�H�ڸH��H��?H)�H	�H��H�\$�\D$���fDH�ѺLH������H��H��H��H���K���@H�q�LH�����$��@��AWAVAUATUSH��8dH�%(H�D$(1����H�Յ�u.H��H�L$(dH3%(H����H��8[]A\A]A^A_�DH�>@���+H��t
@���H�5}�M1�1����H�}I��@���H�H��H��
H�������
H�]L�l$ �|���L��L�}H�\$ H�\$H��H�D$莤��L��H���c��L�l$L�t$ fH�=��LffH��� �L��H�8���H��L�hM��t
A���L�sM��t
A����H���S��I��usI��I��A����M��t
A����L��L������fDH���H��
����C ��H�}I��@�����H��H��H��?�������I��t�L��H������L��H��I������I��A���w���A���2L��L���_���H���������������H�L$H�T$L��L��趭��H9�tIH�|$����H�CH��t���H�t$H�sH������@������H���������DH�D$H�T$H����H�
&�LL�)H�l$ H�\$H�T$H��H��H�D$ 輢��H��H�����H�l$L�d$ fH�=ϹLffH���� �L��H�8���H��H�hH��t
@����L�cM��t
A����H���������@1�M9�������L��H����������L��H���������I�E��H��
��������f.���t+H��teH��t~��uj���H�
��LL�)���f�L�k�����L��H���E���G���H��H���5���$���H��H���%���Z���H�
ѺLL�)����H�
�LL�)���H�
��LL�)�w���H�
;�LL�)�h����1��������f�AWAVM��AUI��ATI��USH��H��HH�|$dH�%(H�D$81�H���H���	H����L���H����M����L���H����M����L���H����M����A��/��H�ك��GA����A����L�����w
��uDH�H�ƒ�H��
u+M��t&A��uI�H�փ�H��
�H����@A����I��H���
I�H��
H����L������H���`I������uE@����H������t#�@����L��H��L���@��I��A��t�I��uِM����L��M���I�$ �XL����H����L��H��?L����H����I������uK���2H������t!�f�����L��H�����L��I��A��t�I��u�f.�H��L��H�T$���H��H��I�����L��H������H��L��H�����H�T$L��H��H���v���H��H�����H��H�D$H���JH�ۺLL� H�t$0H�|$(H�\$(H�l$0�w���H�\$(H�l$0fH�=��LffH��� �L��H�8�ا�H�XH��t	����H�hH��t
@����H��H�D$�F��H�D$�@A���H���I�E��H���7���DH�����L���D$���L���D$���L���D$����L$�YD$H�0�YL$�^�fH~�H9���fH~�H��<��������H��H��uqH�L$8dH3%(�FH��H[]A\A]A^A_�fD@���F���H���H���6����1���f�A���7���I�$��H���&�������f(��W���DfH~�H��H��H���i���f.�A������I���H���	����������o����0���f�H��H��H�D$� ��H�D$�@���fDH��H��H�D$���H�D$�3���fD�tDH�|$��H�|$��D$���|$�\H���LL� �����H�D$L�`�j���f.�A��tBL��L������A���H����M��M����I�EH��
H�����E����I�$H�ƒ�H��
u�M��t�A��u�I�UH�у�H��
u���@��I�D$��@��I�UH	��o���L��L�����H���F���fDH�H����	L��I�߃��� �2H������L��H��?�	���DA����I�EH��
H�������7L��M��I���F���f�L��H�t$��H�t$H���W���fDL��H�T$���H�T$�����E���@L�����������fDL��H�L$�;�H�L$H���e���fDL��H��?�]���@H���LL� ���f�L���(����L���x����H��H�T$�S��H�T$�������@H���8������
���fDL��L��H��?H�H��H1�H)�H���H���H�����H�@H���H�l?���L��L��H��?H�H��H1�H)�H��H����H����H�@H��%H�T?�+���L��H�T$���H�T$I�����fDH�����H��I�ǃ����f�H����H��I�ǃ����f.�L����H��I�ǃ����f.�H���x�L��M��H���j�I�����f�H��H��H��?H�H��H1�H)�L��H���H���rH�������H��1�H	ƒ�u�H��H��H��H	ƒ�t�@��ufDH��@��t���t$H9�s	H��H��H��H)�u�H���Y���f�H����L��L��H��?H�H��H1�H)�L��H���H����H���l���H��1�H	ƒ�u�H��H��H��H	ƒ�t�@��ufDH��@��t���tH9�s	H��H��H��H)�u�H���	����H����H���LL� ���f�H��1�H	Шu@H��H��H��H	Шt�@��u�H��@��t����tH9�s	H��H��H��H)��{�����u�H����f.�H��1�H	�u@H��H��H��H	�t�@��u�H��@��t��@��tH9�s	H��H��H��H)��b���@��u�H�����H��H������H����@H��H���l���H�����@H�A�LL� ��������H����������H���S���I��H��?L��I�I��I�M1�H�I)�I��SM����M���
L��H��?H��L1�H)�H���-M����H��H����L��H�I��I��L��H�H��I��H������M�������H����I���H��I���zH�@H�l?H���������H���u���D��@uyH�s��@ugI�VH	����L��H���2��H���J���H��H���*���H�����H��H���n���H���"���H���LL� �#���H���v���H������H�����H��H�����|���H��������H��������H��H��M����H��H	���u@H��H��H��H	���t��u�H���t��H�����H9�s	H��H��H��H)�u�H��H��H�H��H��L��H�I��I��H���T���H���K���I���^H���mL��H���:H�@H�\H�����H��H�L$�`��H�L$H�����H���X���L��H��M����L��1�H	��u@I��H��L��H	��t�A��ufDI��A��t��@��t"L9�s	L��I��H��L)�u�I���N����H����H�����H���^���M���*���H��E1ɿL��H�I��I��H��t	E�����H����H���K���L���>���H�@L���K�l6���I������H�H��H��H��H��A���H�@H�xAH�\?����H�@L�xTM�I�X���H�@L�xSM�I�l$�v�H�L$����H�L$H���|������L������H���J�L��H�L$���H�L$H���M���L�����H��� �L�����L��H�����H��H���j��H������e���H�ƒ�H��
�U���M���L����-�H�L$L�D$�<��L�D$H��L���,��H��H�����H�L$H�����@��AWH��AVAUATI��USH��H��HdH�%(H�D$81���u:H��u�/H��L���˻��fD@����H���H��
�nH���%�I�l$M�|$H���H����H����L����H����M����H�؃�H����H��������H����H��H��?���VH�����A���X@��uH�EH����H��
u	H������0I��H��yH�����H��I�ƃ�H�H��
H�����t@A���N���I���H���>���fDH�����L���D$���H���D$����D$�t���L$�YD$H�0�YL$�^�fH~�H9�t'fH~�H��<�������zH��H��t	f(�誓�H�L$8dH3%(��H��H[]A\A]A^A_��@���]���H�E��H���L����(���H���H������L���H���H�0fH~�H9�t'fH~�H��<�������4H��H��t���H��H������N����H�H��
H��������DH���H���x���H���n���H���9���H�KH�����L�����M��t
A�����L���.��H�KL�C���nM����H�6�LL� L�D$(H�L$0�@fH~�H��H��H�����f�H���H���B������H�EH���gI��I��A���� �@M�������H��H��?I�݄���H����I������uIA����I������t'��A���FL��L��M��谵��I��A��t�I��uِM���_L�����SL��H����tK@��uf�H��@��t�����H9�s	H��H��H��H)�u�H�@H��WH�T?H�ֿH�T$�K�H��L��I���=�L��H���b���H��L��H���$�H�T$L��H��H����H��H���6���I��M���
H�{�LL� H�l$(L�t$0H�t$0H�|$(����H�\$(H�l$0fH�=5�LffH�-�� �L��H�8�x��H�XH��t	���.H�hH��t
@����H��H�D$����H�D$�r���@M��I� tLL������������t ��������L��H�����L��I��A��t�I��u����DL����I�ƨt�H������A����I����I����A���A���eH�ףLL� ����I��A����@����������@H��H��H�D$�X��H�D$���fDH��H��H�D$�8��H�D$���fDM�d$�N���fDH��H��H��H������@L������������fDH����H��I�ƃ����f�H���LL� ��H���1���f�H���8����H�����H��H����H�����DL���(������q���fDH��H�T$��H�T$I���A���fD1�I�������f.�M���x����L��I��?H�L��H1�L)�H���H����H�������H��1�H	ШufDH��H��H��H	Шt�@��u�H��@��t����tH9�s	H��H��H��H)�u�H���;���H����L��I��?H�L��H1�L)�I��AH���9M����f.�H�@H��EL�l?���I�T$I�t$A�/L���H��9���I�$��H��
�����H���=���I�t$I�T$L�CH��u�H��u�M�d$�I���@�������H����H��
����H���v�����uH�H�΃�H��
�H���U�������H��H��H��?H�H��H1�H)�H��H��H����H������H��1�H	ƒ�u�H��H��H��H	ƒ�t�@��ufDH��@��t���tH9�s	H��H��H��H)�u�H������H����A������I���hI���mH���FA����H��LL� �����H�q�LL� ���H��1�L	�uDH��I��H��L	�t�@��u�H��@��t��A��tI9�s	H��L��I��I)�u��9���f�I����I��H��u�L������H���LL� �<���H��H������H������#��I���;������H�����H��H��?H�I��I�I1�I)�H���H���hH���gH�L��I��H��H��M����L����L��H���������H��������H��>H��_H�?H�hH��H�I��H��L��H�H��I��H���Q���H���H���H����H���
H��H���5H�@L�t?H��������I������DH��@��t�L��@H�̓�tHH9�s	H��H��H��H)�u�H�H����P���H���G����H�������3���fDH����@ueH�u��@uSH�KH	�����H��H�����I�����H��H�����H�����H���LL� �Z���L�����H������H�����H��H�����H��H��H����L��1�L��H	��ufDH��H��H��H	��t�@��ufDH��@��t��@��t"H9�s	H��H��H��H)�u�H��I������@H����H���>���H�L�LL� ���H��LL� ����H�ޘLL� ����I�����H���H���I�����H��LL� ����H��>H�x4H�L�s�*���I�M�w�������H�t$�"��H�t$H�����H���
��I����H�����L��H������H��H������I������ff.�@��H��H�t$H��t@��t@H���H��t^H��uGH�
cIH�0H����H�t$H���r�H���DH���H��u�����H���f�@��u�H���H��u�H�L$����H���D��UH��SH��H������H��uR�H���U���u\H��H�����H��tu�ueH���H���H����H����H��[]�fD��u�H���H��
��H��u�H��H��H��[]�}�DH�ƒ�H��t�H��1�1ҾA
[H��]���DH��t�H��H���L������H�0fH~�H9�tdfH~�H��<������tpH��uKH���?���@H�����1�H�{������H���b�������f�H��[]�e��DH���k����H��H��H������ff.�@��AWAVAUATUH��SH��H��HdH�%(H�D$81�H���H�D$uUH��u6�*H��H���F��H�L$8dH3%(��H��H[]A\A]A^A_�@���H���H��
�vL�eL�uL���H���NM��t
A���'L���H���/M��tA��uI���H���H�؃�H���H���{��uH���H����M��A����L��L��H!�H���UH��H��I�H�H��H���P�H���BL��H��?I��M1�I)�H����	M���}
M��H����
L��H�I��I�ƸH�H����TM���KA�I���;�H��>L���
M�M�~�DI�$��H�������L��訹�L���D$蚹�H���D$茹��D$�|���L$�YD$H�0�YL$�^�fH~�H9�t2fH~�H��<��������H��uH������fDf(�观����f�H���H�������H��舀��f��H��H9�����Y�H�0fH~�H9�tfH~�H��<������tTH���v����6���K����H���H��t�H��tFH������H�KH�UA�*H��H�uL�C�V�������H��H��H������H�������K�V���fDL��H�A���0H����A�tR�DH��@��t��f.����H9�s	H��H��H��H)�u�H�@H���L�|?M���4A����L����H�|$�/L��M����H�H��
H����I�݄���H����H������uYA����I������t1��A����H��L��H�T$�Τ��H�T$I��H���t�H��u��H��L������L��L��H������H��H�����L���I�����L��L��H�����H��H���è��I��H���GH��LL�(H�t$0H�|$(L�d$(L�|$0�{��H�\$(H�l$0fH�=’LffH躩� �L��H�8���H�XH��t��uH��H��H�D$��H�D$H�hH��t@��uH��H��H�D$�Ӯ�H�D$H��H�D$�Q��H�D$����M��I�$ ��L������I�Ũ��H����A���t&���fDA����L��L��M���H���I��A��t�I��u�����@L��I� ��H�у�H�|$����H��H��?����f�H���C����H�غH��H��?H)�H	�H��H�\$�~L$�6���fDH��@��t�L��@���oH9�s	H��H��H��H)�u�H�����@I�H�ƒ�H��
����H���������	���H�H�у�H��
�������@��I�F��@��H�SH	�����H��L�����I���j���f.�@��u
L�m����H����H���@���g@���>H�!�LL�(�|���f�H�������L���h������)���fDL������H���h����H��H�T$�3��H�T$�����W���@H��H�T$H�L$���H�T$H�L$I������@H�����I���x����L��H�T$����H�T$��������@H��H��?H�H��H1�H)�I���H���PM���uf�H�@H��L�l?����L��L��H��?H�H��H1�H)�I���H���M�������H��1�L	��uH��I��H��L	��t�@��u�H��@��t��A��t"I9�s	H��L��I��I)�u�H������I����L��L��H��?H�H��H1�H)�H��H��CH����H������H��1�H	ƒ�uf�H��H��H��H	ƒ�t�@��ufDH��@��t���tH9�s	H��H��H��H)�u�H������H����H�\�LL�(����H�-�LL�(����H��1�L	�u�H��I��H��L	�t�@��u�H��@��t��A��tI9�s	H��L��I��I)�u��y���f�I����I��H��u�L������I��H���`���L���R���H�h�LL�(�{������I���N�����I�����H��H������H������H��LL�(�>���L������L���	���H�����9���H����� ���H��H��M���(L��1�M��H	��u@I��H��L��H	��t�A��ufDI��A��t��I��A����L9�s	L��I��H��L)�u�I��H�I��M��H��H��H�H��I��H�������H����I����K�<L�gH������L��H����H�@L�d?H��������I������H���X���H�����I��E1ɹH��H�H��I��H��t	E���w���M������H������H�I��H��H��H��A���øH��>H�x"H�	L�`�,������L���0��I�����H��� ��I������H��L�D$���L�D$I��L����L��H������I������AWI��AVAUATUSH��H��H�/I��A���DH��uH� �LH�5�.H�81�����@��u�H�E��H��
u�H��舥��H��H��I�����I�ă�H��� M��t
A����H���@H���LL�(fH�=��LffH舡�L�� �H�8��|�I��L�`M��t
A���-I�EL���M��L��A��I��H����H�L�LH�fH�=)�LffH�!��H�޹ �H�8�l|�H��L�`M��t
A����H�CH�����H��L���k�H��H��t���H��H��[]A\A]A^A_�f�I�$��H��u+M����H�mH��
H����@��HE��DM��H������H����������H���oH�������l����H�܊LL�(���@H���H���E���H���3x��H���{����(���H��H��[]A\A]A^A_�j��DH���{���H��H��I�����I�ă�H����H��?����@��t;H����H������ur����H�"�LH��9���f.�H�[�&����L��H��赤��J���L�k����H��L��蕤�I�EL���������H�Q�LH������H�!�LH�����H��LH�����H��LL�(�9����H��LL�(�)����H���LL�(�����H�i�LH��p����H�Y�LL�(������w H��H�օ�tH��H���6���fDH���P�1����ff.���AVAUATI��UH��S����Huj��s��H�
�k����t��H�
�i��H��j��HE�L��H���[]A\A]A^�g����D�o�Ic�L�4��`���t�L��D�����H�������1��N��ff.���H�
�h��������H�
%i��������H�
�h������AUI��ATI��A��UH��SH��H��A����H� ��M����H��H��?����M����H������uE����H������t%�fD����H��H��H���I���H��@��t�H��u�H��H��[]A\A]�@M���WH��xBH�H��
H�������q���H���<��H��M���f���H���������[���fDH�����I��H��A��M�������H��H��[]A\A]�f.�H���X���������fDH��H��?H�H��H1�H)�H�x8H���7H��u6f�H�@H��-H��H�D?[]A\A]�DH��H���(H��1�H	بuH��H��H��H	بt�@��u�H��@��t����tH9�s	H��H��H��H)�u�H���p���H����H��?H��H�H��H1�H)�H���H��twH���>���H��1�H	بuf�H��H��H��H	بt�@��u�H��@��t����tH9�s	H��H��H��H)��l�����u�H����f.�H�������H��[]A\A]�Q��H��H���f���H�����ff.����H��dH�%(H�D$1���u$H�wH����H�L$dH3%(u*H���f�Hc�H�Fe��H�D6H��H�$H��H�������訲����SH��H�� H�dH�%(H�D$1����tGH�H�{H�$���tCH�H��H�D$�s�H�T$dH3%(u(H�� [��H���x���fDH���h��������H���c���H��xH��������?H��H!�H�D��H��H��H	�H�D�f���ATUH����SH��uH����H����H�����H����H���ߗ�H�è��H�H��
H��������fH�=ցLffH�Θ� �H�5=�LH�6H�8�t�I��H�hH��t@��uH��H�����I�\$H��t��uH��L�����L���s��L��[]A\�@���:���H�E��H��
�)������4���@H��H��?���S���H������H��H�����H���8���fD������H�H�ƒ�H��
�������ff.�@AWAVAUI��ATU��SH��H��HH�|$�$dH�%(H�D$81�H9��!褕�H���H��I9����DB u�H�\$L9����A�?�PՁ�u
H��D��H�\$H�\$L�t$L��H�L$(H��L���uf����u1���I�H�|$8dH3<%(�eH��H[]A\A]A^A_ÐH�D$ L�|$M9���A���/���$��t5�Д��$H���I��M9�tA��DP u�M9��z���H�t$(H��tv@���H���H�@H�H��H��H9���H�t?�����H�ƒ�H����H����H�|$H����H�D$H�t$ H���ϙ��H�|$A��-��H�t$ �F����������X���M9��O������f.�fH�=�~LffH�Е� �H�5?�LH�6H�8�q�H�@H��H�@H�$蘭�H�$�k����H�\$A�?�&����H��� ��H��A��-�,������k�����fDI��H�L$0L��L��L�|$L�|$ L���Wd�����H�|$ �H��t7H�l$L9�s!���H��H��I9�t�E�DB u�I9������H�t$0H�|$(蹃��L��H��H�D$(�Y�������@��Z���H���H���J���A��-�����j��H���@�����H�ƒ�H�����H��t�uH���H������H�|$ H�����H�D$ ��fD�3c��H��H�D$���fD������H�D$ �J���f.�����j����fD�c��H���Z����$������������&��A�?�I���ff.�U��SH��H����H� H�{H�stH�{H����|���H��tVH�ƒ�H��tjH��u
H��[]�fD�u�H���H��u��@f.��zt҅�ugH���[]����t�H�U�LH��H�5,H�81����H��H9�t�H��H��?H)�H��H��H	�H��H�T$�~D$�H��|LH�5�H�81�褴�@��SH��H���~�H� H�{H�stH�{1�H���{���H�ƒ�H��tOH��u
H��[�@�u�H���H��u��@f.��zt�H�|LH�5��H�81�����H��H9�t�H��H��?H)�H��H��H	�H��H�T$�~D$�ff.����AUATUSH��(dH�%(H�D$1�H�l$H�~LH�\$H�|$H��H�t$H��L�(�Ic��H��H������H�l$L�d$fH�=\zLffH�T�� �L��H�8�l�H��H�hH��t@��tML�cM��tA��t.H�����H��H�T$dH3%(u0H��([]A\A]��L��H���U����H��H���E����N��ff.���H��(dH�%(H�D$1�H�T$H�t$�	d��HcD$��t`>�ؿ�D$H�H�t藮��H�|$H�����H�L$dH3%(u;H��(�DH�|$H�t�a����H��贰���f�H�|$�衰��蚨�f.���UH��S��H��H���9���H���H����H���$d��H�0fH~�H9�tPfH~�H��<������tH��H��u-H��[]�fDfH~�H��H��[]H��H����H��[]�e�DAWAVAUI��ATA��UH��SH��H��8dH�%(H�D$(1�H���}H���DE1�@����M���NH���H�ڃ���H���H��
�)@����H���
@����H�E��H��
�+H����H��$��L�5�{LH��I�6�֣���E����L�|$H��H�=�\��L���y�t$H�Å���I�6H��蔣��u!H��L��H�=�\����y�L$H�Ņ��I�6H��I��A���]�����M����H����I�61��9��H�sLH�5�H�81�����Q
1�H���Ѳ�����Q
H��輲�������H�=-xL1�H���3y�I���F��I��IE�����f�H�E��H���X���H�}H����H���D���H���R��H}���)���H�m� ����H���H����H��$�M���H���DH�ڃ�uH���H����H��$�>��������H�\$H�\$H�l$H�l$H��H���^��H��H���n���H�\$H�l$fH�=�uLffH褌� �L��H�8��g�I��H�XH��t��t>I�l$H��t@��t>L���f��H�L$(dH3%(L����H��8[]A\A]A^A_�H��H��襑��H��L��蕑��H�؃�H���P�Q
H������u/�H�=avL1�H���gw�I���z��I��IE�f�@����������@��uH���H��tI��A��H���m���M���w������H�{H����H��t�H�����]{��t�H�[�H��$t.H���H�������H�����H���${���t���I�����@H����E���f1�H��H�=bY���}v�I��萹����H�߾�Q
H�"�_B��I�6H��H�������z���H��Q
�H��!�0B��H���Y����H���H��
�i���H���H��
t*H�MwLH��H�0蒟���Q���H���H��
�A���H��$�S���@���N���H��u!E���rH�wL1�H�0�G���	���f�@��t*E���K@��t(H��vLH��H�0�������@H�E��H��
u�H�E��H��
����H��vLH��H�0���������H�E��H��
��������f�I�6H��赞���>���E�������L�|$�
���f.�I�6H��腞���(���M����H���;H�T$H��H�=�W���t�T$I�ą��kH�������A���zM��t
A���ZL��H�L$ ��/H�l$ �ٙ�I���k����H�ك�H����H�����H��@�����������fDH���H����H������H������������I�6H��蜝��^����@��t@��u,�����H���H�������@��u
H��
��1�H�������f.�@��t@��u,����H���H�������@��u
H��
��1�H�����r���f.���V��A��E����Q
H���H���;��I���!����@��t@��u-�.����H�E��H�������@��u
H��
�1�H��������f�H���f���H���#���H������H��D���w�H��H���*���E���!����6���@H���N���H���	���H�������H��D���/�H��E�����H���������@@���L���H����@���H���H�E��H��
�M����2���DH�����1�H�������H������1�H��������H������H�}�[���H�}�P��������������H���H��
�����@���G����X����H�T$H��H�=!T���<q�I�ċD$��������I���@�����I�$��H��
�����L��H���ϵ��I���������f���AUA��ATUSH������D���و�f��o�H��Hc�L�$�讻��uJL�#A����I�����$H��qLH�8�H��H��L��[]A\A]�x����L����m����L�#��u0H��t��H�ǻ$���I��t4H�#qLH�:�fDH�[��uzH��t7�H���̶�I��uV��u0H���[]A\A]�f�H�[A�������I��t
H���4���H�KiLH�5dH�81��:��f.�H��t��k���A�����E1����D��H�WH�wH��u/H�rLH�8H��tH��t	1��b�f���f.�@��u
H���@H��t2H��t<@��u@��tHH�AnLH�8�@H��hLH�8�@H��nLH�8�@H�YjLH�8�t���f�H�	mLH�8�\������H����~]I��H���tIH�V��uIH����H��t��u�H��L��H����H�hLH�5H�81����1ɺ$뾺��X�����H��H����H��t,�GfTO��
?�f.�s H��H���f�H��H9�u��H�xH��H���H��H��?H)�H��H��H	�H��H�T$�~D$�ff.���H��H����H��t4�GfT���
���f.�r	�7�H�@H���fDH��H9�t�H��H��?H)�H��H��H	�H��H�D$�~D$�@��ATUH��SH���uVH��u8H��萑�H��H��腑�H��H�5 H��H��fLH�81��w�������H���H��
�7H��urH�SoLL� fH�=0jLffH�(��L�� �H�8�s\�I��H�XH��t��uH��H���g��I�D$L�����[H��L��]A\���@����H���|H����@����@����H�GkLL� �W����H�؃�H�����H���T��H�0fH~�H9��(fH~�H��<�������PH��H����H��[]A\�A��L�e�����H�ڃ�H��t�H�������H����H���N���H�{H����H����H�����o����H�[H�؃�H��t"H���W������N���H���H���>���H����I��H���H��mLH�0I�t$H���s���@���i���L��跄��\���f�H�ajLL� �����kU�H�����H������H�QdLL� �����H��eLL� ����H��H��H��H�����@�H���;x�H�����H�yhLL� �y����@��t@������1�H��������H���H��t�@��u�H��
t�H�������1�H������@��u	H�u���H��t!H��t9@��u$@��t<H��hLH�0����H�LiLH�0���H�]cLH�0���H��dLH�0���H��gLH�0���ff.�@����R��f�����w
�H���:��P�1��=��ff.�f������
��ff.�f�����w�����P�1����ff.���H��(dH�%(H�D$1�H��iLH�<$�H�t$H��H�����H�L$dH3%(uH��(��~��ff.���H�G����H�G����SH��H��t@��t
H��[��H���H��u�H�{@��u&H��t@��t��ul��H���H��
u1�H������t�H�[뤐H��u�H�u�H�u���f.���AUATUH��H��SH��(dH�%(H�D$1����%H���H�5c]M1�1���H��H���DL�l$��-H��L��H�\$�Ɍ�I��H����H��t6@���EH��t
@���%L���+H��H�\$背�H��A�������%H��L���"-��H�������������H��L��H�L$H���{W��H�t$H�<$譛�H�T$dH3%(��H��([]A\A]�fD@����H���H��
����)��H��H���������I��H��A���M���M��u#H��L���j���Z���H������n���A��u�I�$��H��
�������H�E��H��
����H��H���r��H��A��t�����fD1�L9������H�����諒�ff.���AUATUSH��H��8dH�%(H�D$(1�H�T$H�t$�`M��H�|$@���	HcD$H��t��x:H�t����H���;��H�L$(dH3%(�TH��8[]A\A]�@H����Kx���+t$�I��Hc��`�L��I���bh��L��H���q��I��@�������L��H����*��H�������������L��H��蓙�L��L��H��腙�H��H�L$ H�T$H���0U��H�t$ H�|$�a���!���@����uGH�|$HcD$���H��t@��tL��H���h�����DH�E��H��
�R�����DHcD$H�|$���f�H�������1�L9����-����ΐ�ff.���SH�у�H�� H���'�Jf��f/������g�T$�$��u,H���4���T$�$H��f/�w/H�� H��[��H�6H����e��$�T$H��f/�v�H�{�H���H�CH��t��u�H��H���}��fDH�0f(�fW�fH~�H9�t+fH~�H��<��������H��H���)����T$H�t$�|$�$�dM��$�|$H��H�t$�T$���H��H9�t)H��H��?H)�H��H��H	�H��H�$�~$���f��f�����H��H��H��H������1��(z����U��SH��H���p��H��H�4���H�ƒ�H��tMH��uH��[]Ð�u�H���H��u��@f.þzt�H�(`LH�5��H�81��'���H��H9�t�H��H��?H)�H��H��H	�H��H�T$�~D$�ff.����AW�H�=:
AVAUATUSH���={�H�=�H��VM�%{�
H�=J�{�H�=DH��VM�z�L�-EbLH�=�H��VMI�u�.i�H��aLH�50I��H��H����H�H����H�:cLL�5C`LH�-\ZLL�%�_LH�8H�5���H�H���B���H�xH�5Z6�ڣ�����H�5^�H�=��BO�H�;1�H�?��H�5q�Jg�H�;1�H��>��H�5d�2g�H�;1�H�����H�5���g�H�;�H�����H�5��f�H�;�H�����H�5�D��f�H�;�H�E��H�5J���f�H�;�H�����H�5��f�H�;�H�����H�5��f�H�;�H�T��H�5��xf�H�;�H�y|��H�5u��]f�H�;�H�~[��H�5��Bf�H�;�H�3M��H�5G#�'f�H�;�H���H�5���f�H�;1�H��=��H�5���e�H�;1�H��=��H�5{��e�H�;1�H�`Y��H�5�
��e�H�;1�H�HY��H�5�e�H�;�����H�m��H�5�
�e�H�;�����H�B��H�5�
�ve�H�;�����H���H�5�
�[e�H�;�����H�\��H�5
�@e�H�;1�H��=��H�5���(e�H�;1�H�<G��H�5�
�e�H�;1�H�T=��H�5�
�d�H�;�����H�����H�5�	��d�H�;1�H����H�5��d�H�;1�H�)A��H�5���d�H�;1�H�QD��H�51��d�H�;1�H�i@��H�5&
�
��H��_LH�;H�5̾H��dV�H��H��H�5
H��I���֕�H�;H�
�F��L��H��C���r�H��\LH�}�H�5O��d�H�}�H�Qc��H�5:��c�H�}�H�Uj��H�5���c�I�}1�H��C��H�5��c�I�}1�H�#D��H�5��c�I�}�H�ǿ��H�5��c�I�<$1�H��H�5���rc�I�<$1�H���H�5���Yc�I�>1�H�
�H�5		�Ac�I�>�����H��H�5"�&c�H�}1�H���H�5��
c�H�}�����H���H�5���b�I�<$1�H����H�5���b�I�<$�����H���H�5��b�H��]L1�H�|��H�5hH�8�b�H�H���yH�^LH�8�����H���H�5-%��H��H�=��[]A\A]A^A_��F�DH��]LH�8�����ulH�xL�5�ZLH�-�TLL�%3ZL�t���fD���H�x�f.�H����H������<�lI�<$�M���H����H�����uh<�L�%�YLL�5*ZLH�-CTLI�<$���f�H����H�����u<�I�<$����H�}�����H�-�SLL�5�YLL�%KYLH�}���f�H�}����I�>����L�5�YLH�-�SLL�%YLI�>�I���I�>�a����H�1ULH�8�J����H�!ULH�8�;����H�ULL�5:YLH�-SSLL�%�XLH�8��@H��WLL�5YLH�-+SLL�%�XLH�8����@H��WLH�8�����H�yWLH�8�������H�H+1�H��t
�����D��@����~*�B�H)�H�T�DHcH��H��L�H�8H�pH9�u�1��ff.�AWAVI��AUATUH��H�<7H�vSH��(H�T$H��$dH�%(H��$1�H�D$@H�0H��H9�u�H��H9�s@�H��H)�H��H�t�H9�u�H�D$N�,0L�<M9�wCD�eH�\$�A�EH\�N�,3M9�w!D:#u�L��H��H���ҍ��u�H��H+D$�H�����H��$dH3%(uH��([]A\A]A^A_��ӄ�PXH�5��H��H��XLH��H�81��?��ff.�@��SH��fH�=ULffH�l�H�޹(�H�8�SG�H�@H�@H�@ [�f���SH��fH�=�TLffH�k�H�޹H�
H�8�G�f�H�@H�@@ @0H�@@[�ff.�f�UH��H��SH���o��H������H��H���\��H������H��H�5��H��H�PULH�81��6��fDAWAVI��AUATUSH��dH�%(H�D$1�H�H9����8\H�X��H9���I��E1�H��E1��H�k��0<H�+��Hc�H�>��fDH9��-�{-H�k�E���tH9��
�E���H�]<\�qA�H9�u�@�ZH�5x�L���tI������D�	E��t��E��u;I�,$H�L$dH3%(�WH��[]A\A]A^A_É�H�݃�E��D�fD��@��f���f��
�f��
�v���fD�\�f���fDE����H�CH9��H�{-�>�K���2H����\�[���A����@H��H��H��H��H)�H9޾HB���B�H�$H��H���GH́�������ZH�5��L���$H���������f.�����fD����fDH�SH��H��H)�H9־H��HB���F�H$H��H���|����ZH�5(�L���G������S����ZH�5�L���G������5���@�ZH�5��L���lG����������ZH�5��L���NG���������ZH�5��L���0G���������H�������ZH�5(�L���
G���������ZH�5;�L����F������/��ff.�@UH��AWAVI��AUATSH��hH�}�H�H�u�HcRH��H�M�L��x���I��L�M�dH�%(H�M�1�H�E�H�BH��H%�H)�H���H��H9�tH��H��$�H9�u����H�\$1�H���H���%C�H�E�H�U�H�u�H��H�E����������A����A�D$�A�H��H�E��3H�U�H�u�H�}���������B�;A��I��L;}���N�,;L��H��Mc�L���j���|�L��L��H���j�����A��u�����A�H�}�L��H���ip�H��x���H�H����L9�u/H�E�H�M�H�1�H�M�dH3%(��H�e�[A\A]A^A_]�H�}��ZH�5���
E�D�����뽐Mc�L��H��J�4#�i����m���H�}��ZH�5x���D������f�H)�H�L��j���f�H�]�H�a��1�H���A�H�}��H���o��/���H��x���L�0� ���H�sL��H���ri��������o����}�ff.�@��H��I��I��L�FH�FH� tH�FH��I�
J�M�BjH��H�I���H���f���I��H�NH�FH� tH�FH�E1�H��H���k�f�AUI��ATUH��SH��H��舅�L9�tH��I����J�L��H���X�H��H���"=H�CH��t�tH��[]A\A]�f.�H��H��H��[]A\A]�i�ff.�ATI��UH��SH�Ӏ�t'H��u�����[]A\����u�H���H��uWH����I�H��H��t9H�}H���
�H��t(H�SH�sH� tH�sH�}H�L���~���H���5���DH��u�����SI�PHH)�L���l��H��H���і�1�[�ff.�f�UH��AWAVAUATL�g SH��HE�t$ dH�%(H�E�1�E����A�\$I���]�����H����xH�E�tp�E�E1ɍ4Hc�H��H��H��H��<A���w��z_�E�M�L$I�T$I�|$��H�4�1�I�H�BH�H�LBH��H9�u�fDH�E�dH3%(�rH�e�[A\A]A^A_]�fDI�|$Hc��P�A�\$ I�}I�D$�;��xH�E��c����E��4Hc�H��H��H��H��<�����6���H��H��H��H���H)�H��H9�tH��H��$�������u�H�L$I�|$H���V�H��H�4�1��L�I��M��x*H��E�NA��L�I�T$L�Ic�H��L�Ic�I��H��H9�u�L��H�ߺL�M�H�
���v�I�EL�M�H�xH� H�}�tH�@H�E�E��~PA�F�H�}�I��E1�H��H�DH�E�DL�m�H�U�L�M�I��Mo�L����@�L��L�M�I�M�w�L9}�uЋE����E����E�M�\$1�I�������L���$�I�D$H�xL�L�@H��L9�����M�4;M��x�M��1�DI9�����I�D5L��H��H��H��H�H+
H��uZI�D$L��1�L�,xH�BI�EI�D$L�48H9��_��H�H��H��H��L�<L��I+H��ubI�GI�E�e���D~H�p�u���DH��DH9���H�M��H��H��H��H�L+*M���e���~�I��H���D~H�H�m���DH��DH9���H�L��H��I��I��I�I+7H���]���~�H��H���H��H��H��H���H)�H��H9�t H��H��$���H)�H�L��Q���%�t	H)�H�L�H�\$H�������nw��1���,��@��H�=@MH��x f��H*��^W�f.G�{%�|�H�ƒ�f�H��H	��H*��X���Duٸ����AWM��AVI��Hc�AUATI��UH��SH��H�t$�E;�H��E��~.A��E1��@I��JcT�L��H��H�T�x6�I�UM9�u�H�t$L��L)��Q�H��L��H���qJ�H��1�[]A\A]A^A_���H��H�
��H����1��PXH�5��H��H��BLH�81����f�H��tTH�tSH�O(H�� H�9�t?�W�B�Hc�H�<�u4��~0��Hc�H�����H�:�@�ƅ���H��@��u�ø�����P�z���f.���H�tH�G�P�Z���f.���H�t
HcG$H�D�P�5���D��H��t&H�t%H�G(H�H���tH�1��:����P��@��H���M�H��H���m����H��t6H�t5H�W(H�G H�:�t!H�H�@H�WH�0H)��J:�f.���P���@��H���L�H��H���a��AUATUSH��H��}H�o I����Hc}�8�M�mI��;]|+�OH�UL���H��H)���9�L��H���W��9]~&H�UHc�H�4�H���uɾL����1��9]�H��L��[]A\A]�����f�����R���f���1��E���D��AUATUSH��dH�%(H�D$1�H�BH���/H�����H�Ӆ�butE1��U�1��H���:�H�5rCH�hH�XL�` H�SH�zH���h�H�L$dH3%(H����H��[]A\A]�@D�g�Ic�L�,��@���u1�1����A^�L���C�H��E����H���b���H�=<Mt@I��1�H��H�5�;ME1��\8�H�$H��$�1���E1�H�����A������@�H�=Q���_�H��;M�fD��T�H���%����r��A���D���M���f�H�tH�GH��tH� tH�xt�H��H��>LH�5��H�81���{���SH�����H�C[�@8H��?H��?���ff.�@��SH�����H�{[�?�f�USH��H���b���H�C�h8H�CH�pH�xH� tH�x�}2�H��H����c�H��[H��]�d��@��H�����H��xH��������?H��H!�H�D��H��H��H	�H�D�f���USH��H�����H�kH���O�Hc��
b�H��H�5 ���H��H���Uf�H��H��[]�ff.���USH��H���n���H�{�N�Hc��M5�H�{H�5��H��H���f�H��H��[]�ff.�f���SH���#���H�CH���H��x#f��H*��^��f.��{([��u�f�H�ƒ�f�H��H	��H*��X���Duָ[��PXH�5��H��H�$DL��H�81��y�AUATUH��SH��dH�%(H�D$1�H��(��H=���H������H��H��wRH�l$��H�8�1��H���m3�H��H���]a�1�H�L$dH3%(��H��[]A\A]�@L�l$H��I��L���Ex�H��L��Hc��a�I�$H��t�)>�H9�u1���>�I�$1�똺ZH�5�H����5������z����ZH�5��H���5������\����o�f�AWAVAUM��ATI��UH��SH��H��hL�?H��$�H�|$L�L$ H�D$dH�%(H�D$X1���$�L�|$@�D$���D$�D$f�L9���H��H��L���9Z����H�t$@����>��L�~L�|$@��D$?��#<:w)H�
���Hc�H�>����D$�����D$H�t$?�L���_�L�|$@L9��s�����$��D$����H�D$L�8��fDI9��gH��H��L���yY���9L�|$@���KI�H�|$@A��BЈT$?<H��H�
@���Hc�H�>���D$�L���fDD�\$E���8���D�T$E���*���L9�w?��D$���I�}u��;�H9�uI�mH�T$@fDI��L9�v�I�WH�T$@A��D$?<
����y�빐H�t$?�L���~^�D�L$E���������$�������l$�WL�|$@�D$����DD�D$E���h���H�FH9�s
�~?����$��\$��C���DI�w���H�t$@@Hc�I��L����]�I�EL|$@L�|$@H��tgH9������H�|$�ZH�5u��2��D$����H�L$XdH3%(�D$��H��h[]A\A]A^A_�f�A���I�m�'���I�}uH�D$ �D�T$WH�t$V�L���D$V\�5]�L�|$@���H�|$�ZH�5O��2��D$�����U���H�޸H�T$HL��L)�H��HG��1��T$?H��v�H�|$@H��H�|$@�W��H9��tL�L$H�|$@M��L��H��H�����������D$��������H9��uA�{�qI��L9���H�D$H�H����+�H�|$H��H�L$L��L��H���l�����u�L�|$@����N��#tA��$��\$�1�1��Q׀�O�>���L�5���Ic�L�>��I���D$���L��H9�v2H�xH�|$@��T$?��)����\�����hH��H9�w�L�|$@�D$?(�����H��H9��������m�����������ޅ������������|$�����D$���H�T$H�|$@H��L�t$@�����������H�T$@L��L��D$?L)��[�L�|$@����M�wL�t$@I9�sA��� ����	����H�D$HH�l$(E1�H�����	��v[A�H��H��L��L)��1*�H�T$HH����H����H�L$I�L��L��H����������L9�v�A��� u�I��L9�u�I���I��L9��W���I���h���I�}�]H�D$@H��H��H���<T�������H�HD$@�7���I������H�|$�ZH�5���.��D$�����=���H�|$�ZH�5����.��7���H�l$(E��tL�t$@L9�tM�~L�|$@A�>}�k���H�|$�ZH�5���.��D$���������T$������t���������:u��$�D��$��L���A���DD�H�t$?�>Y�H�|$@M��L��H��H��H��jAV�t$ L�L$@�g���H�� ���S����D$�R���f�H�D$@H�L$H��>������D$�����5�H9�t6H�D$@H�����H�|$�ZH�5ͣ�-��D$���������f�I�m��ff.��@��t$H��u
��t!�L2�@@��u�H���H��u�14��;;�H��u�H���ff.���H�H��tH��t
�x����1���*�P��H��u
H��f�UH��H��SH��H���lZ�f��f/�sa�
z�f/�sD�Y4�f/�s�H,�H�EH��[]�fD�\��H,�H�EH�}?H��[]�fDH�E����H��[]�H��:LH��H�5��H�81��Fo�fD��SH�=��H���\q��H��H�=z.M�-���H��[��AWI��1�AVE��AUM��ATI��USH��H��8H�t$dH�%(H�D$(1��D$�y�{H��uH���NV����I�$H��H���@�L�|$ H�|$ M��H��H��H��jAVAUH�t$(L�L$<���H�� ��uS�D$I�4$��u'H��u'H�T$(dH3%(H��uHH��8[]A\A]A^A_�H��t+H���@��ϐI�$�|�����f�I�$H�����rd�f�AWAVAUATUSH��H�$H��(H�T$H��I��H�<7H��$H�vdH�%(H��$1�H�D$H�0H��H9�u�H��H9�r)��i�� �B���H��L�D�H9�tz�2I��I)Ѝ����vہ��vā��wi�� �B��Bi�� ��f������w�i�� �B��Bi�� �i� �B��u���H�D$J�, L�4L9���D�;L�l$�B��E��=�v=�wHi�� �U���Ll�K�l%L9���E:}u�L��L��H���k��u�L��H+D$�i@=�w!i�� �U��Ui�� �����=�w�i�� �U�iС �E��Ui�� ��f���H�����H��$dH3%(uH��([]A\A]A^A_��Qb���H��u��Q�H��t@��tP�
�Z4�f.�H���H��
u���f�AWM��AVI��AUI��ATI��UD��SH��H��XH��$�H�D$dH�%(H�D$H1�H�D$(�o�H�D$H��uH���_���u�H�H�Ѓ�H��t��u�H����H�{��L���R���'H�L$(K�4.A��M��L��L������H�D$ H���KL�l$(M���CM9���@����A��A�� L;l$��E����L��H�߃���<�H�H�D$ A��A��H�HL�`H�L$H� tL�`H��2L��L�L�D$�2�H��H����H��4LL��D��H��L�D$L�l$0��6��t0H��D$��a�Hct$L��L��1���]�H�C������=H�T$L�D$L��L��D��$�H��L��UT��u�H�T$ H�kH�T$0H�T$ H�t$HdH34%(�.H��X[]A\A]A^A_�A��A�� @��t+L��H���;��<fD���B���H���7C��5���f��z�H��H��I���;�H�|$(M��t
H�M��E�������H����A��A�� L9d$�X���L��H���C;�@��t��L��H���-;�랺ZH�5��L����%����������ZH�5��L����%�������H�����L�l$0������������H�}+LH�5�H�81��lh���^��AWE��AVM��AUA��ATI��H��USH��H��H�$�7g�H��H��A�� uKH�SH�sH� u*AWE��L��AVL�L$�f���ZY��t`H��[]A\A]A^A_ÐH�s��f.��;l�H��H9�t�H�%0tQ=t�H�<$�ZH�5����$������fDH��H��L��$����$H��[]A\A]A^A_�DH��H�L$�Km�H�L$�@AWAVI��AUATL�$UH��SH��L��H��H��XH�T$H��L�D$D�L$dH�%(H�L$H1�H�L$8�D$8�{|�}uH���N����H����.�D$(L9���L�l$<H�D$@H�D$H�D$7H�D$ �D����9D$�EH��D���UX����H��	D���UX����D��L�|$H�N�1��L��� �L��L���sN�HcD$<H�I9�vVH��L��L��H���E#�A�ǃ�\�i���Hc|$<H�L9��k���H��L����D$<H��L��Lc�L��L��N�I9�w�H�D$HdH3%(��H��X[]A\A]A^A_�DHcT$<H��L����M��`���H��L��H����G�D$<����H�|$�*H��L��H��U �T$(L�����p~����H�t$ L����D$7\�qM�HcT$<H��L���aM����@�T$8���1Щ�.���L9���I��L�t$ L�l$<D�t$H�\$(H�\$�/@D9���H����UX����HcD$<I�M9�sFH��L��L��L����!���u�H9�ujL��H��L���D�H�I���DD�;�D$<����L�t$ H�\$(H�T$H��L���L��x����Hc�H��L���rL����DH��H�\$(L�t$ �,�D$(�R����Z��USH��H�oH�t$H����H��H�|$@��t,H��u�M�H��[]�f�@��u`H���H��uN�'�H�D$H�|$�@�H�|$H�WH�H��tH�}H�K H���\���H�|$�*��f.�H��t�@���{�����4�H��[]���ff.�@��SH���#�����x6H�S ;B}-H�JH�H�4�H��xH�RH�{[H��H)����f��[É��2�f���ATUH��S����H�}ty��xnL�e A;D$}cHc�I�D$H�<�x;H���s��H��H��ID$H�xH+8H�@H�x![H�D?]A\��[�]A\�fD[]A\�^������ff.���ATUH��S�0���H�}ty��xnL�e A;D$}cHc�I�D$H�<�x;H������H��H��ID$H�xH�@H�x$[H�D?]A\�f.�[�]A\�fD[]A\�g]�������ff.���ATUH��S���H�}tq��xfL�e A;D$}[Hc�I�D$H�<�x3H���3��H��H��ID$H�8H�@H�x[H�D?]A\�[�]A\�fD[]A\��\���h��S���SH������H�{tZ��xOH�S ;B}FH�JH�H�<�x2H�RH�<�H�@H�xH�D?[�@[�j\�f.��[É�������ff.�f���SH�����H�{tZ��xOH�S ;B}FH�RH�H�<�H��x0H�@H�xH�D?[�f.�[��[�f.��[É��r��]�ff.�f���ATUSH������H�{������H�k ;E��Hc�H�EH��H���|H�UH�<�H�@H�x%H�@L�d?H�x0[L��H�|]A\�P��;[�H�@I��H�EH��H�y�H���[�[L��]H��A\�P�f.�[�]�A\�mP�����q�����ATUH��S� ���H�}������L�e A;D$��Hc�I�D$H�<�xOH��H�����I�D$H�@H�H�xH�xXH�l?H�8H�@H�x)[H��H�|?]A\��O�[�]�A\�O�D�3Z�[H��]H��A\�O�@�Z�H��I�D$H�뛉������f�AWI��AVI��L��AUI��ATU��SH��dH�%(H�D$1��d�H���W9�I��H����L��H���p0�H�5��H���,F�M��L��L��A�/L��H������D$/@��ugH�t$H�F@��t�iH����t�xH���H���j(�H��'LH��H�8�x0�H�L$dH3%(u5H��[]A\A]A^A_�f�H�t$�D$mH�F���)�I���8�����S�ff.�ATI��U��SH���?\�H�sH�{H� tH�{[M���H��]A\���f���H��t@��t	1�H���H�1�H�ƒ�H��t�%H�ǸHE�H���f�USH��H��dH�%(H�D$1�H��uH���jP�f.�@��u�H�H�Ѓ�H��t��u�H��H����H�{��H�uH���BU����H�$H�uH�CH�sH��t@��uH���?�H�CH�UH��H��H���H����W�H�E%H	H��H�L$dH3%(uXH��[]À��n���H���5��a���H��LH�5k�H�81���[�Hc��z,�H�5h�H��H��%LH�81��[��
R�f.���H9�t/UH��SH��H���H�H���^��H��H��H��[]���DH���@UH��AWAVI���AUATSH��H�u�dH�%(H�E�1���e�H�5��H���Y�L��I���Z�L��I������L��L����U�I�FD�X8I�FH�8H�E�I��L�`�� H�}�tL�`H�xH����A�<$(H��E��uiA�|$?H�5��uZ�I�T$M��L��H)Ӊ���i���P�����EH��A	�L9�u��
1ۀ�)�+L�bE��H�����A���V�E�mH�U�H�BA��t�iH��A��t�xH����}���D�Ѓ���t>A���E�-H�BA��t�E�mH�BA��t�iH��A���U�H��L���g$�H�5�L����A�A���L��� A����D�M�H��L��L��E1�L����H�5�L���|A�L��L���AT�H�E�H�E�H�E�L��H�}�dH3<%(��H�e�[A\A]A^A_]�H��~	��-�Q��)��H��L�bH��~�z(u
�z?�Z���E��A�������H�U�H�������L��H�5r���@��gj�L��H���*�L���tY�L��1�H����.�I��H� �L�PH�pI�L��I�R�L��L�U��W�L�U�H��I)�I�RH��H���H)�H���H��H9�tH��H��$�H9�u���H�T$H���H�U�M����I�uL��L�U�L)��3U�D�M�H��L��L��E1�L���{�L�U�H�u�L��L����?��g���H��H�������i������������������H��A!�H��u��/����H�pL�P����xH�����H�}�L��H��L�U��qg�L�U��B����H��L��D�U�H�U���!�D�U�H�U�� �����:t(H�}�M�`tM�`H��E������H)�H�L�����H�t��>)u�H�U�H��D�U�H�u���#�H�H�E��#�H��H�U�M��H�H��LH�}�D�U�H�u�jL�bL�D��H��L��D�U��8f�H�}��E�XZ�JN��e#�U�H�}�D�]�D�U���H�8����I�FM�FD�X8I�I�x% H�E������L�D���/����f�AUATUSH��H��(dH�%(H�D$1��T�I���`�H�5��H����S�H���0�I��H���IH��tA�}���dg�H��H���'�H�CH�$H�PH�pH� u`A�/M��L��H����H��H�D$�H�5$�H��H�$�|=�H��uWH�L$dH3%(H����H��([]A\A]�DH�p�f.�L���<���W���H��H���O��W���H������H�C�P8��uTH�t$H���t�iH����t�xH����|$uRH���]����H�51SH���<��D���H�t$�D$mH�F���� �I�����H�������J�SH��H���4���H��H�5��H��H��LH�81��6T�fD��H�tH�GH��tH� tH�xu�GE������ff.�AWAVA��AUI��ATUH��SH��H���0����0�H�����L���R�I��H�EL�xHM9�tl����A�|$tL��H������L���;��u�H��uWE��t0H�E�t%�W��tI9�tI�t$H�=��1��2M�H��L��[]A\A]A^A_�H���X���G����@��u�H�EH�ƒ�H��t��t�H�EL�`HA�|$�U���L���g:���A�����t��8���f��kd�I9�� ���H�EL�`H�s���L���Q�H�5K�H�PH��LH�81��R���H9��H��u1��ATI��USA��t1�[]A\�@H���H��u�H��H���)��H���!��H��tH�����H�H�ƒ�H��tH��L9�u�H�SH�M�R89Q8u�H�UH�KH�RH9Qu�H�UH����A��H����H����H����D9��T���H�EH�KH�PH�qH� tH�qH�xH� tH�x�P�����������f.���f.�H�EH����H������%I��H�H����H����������H���4��W���H���'�A��H��3���ff.����1�L�
�����D�H��A�G�D)�uH9�u�1��ff.����AWAVAUATUSH��H9�IL��H��I��tNH��~qH���A�@����H����H��H��H��L���GN�H��uef�H�������H��L���eO������H��H��[]A\A]A^A_�H��1�[]A\A]A^A_���7H��L����H��t�H��L)�[]A\A]A^A_�H�t$H�<$�
�H�<$H�t$H9�t|H��H��L��[]A\A]A^A_�C�����utD�/H�����H)��]���H��H�L�H��L�tJ�f�H��I9�����D:mu�H�uH��L���~N��u�H���U���f�H��H��L��[]A\A]A^A_�'����b���D�/H�����H)����H��H�L�H��L�t��@H��L9������D:mu�H�uH��L���M��u��{���D�����ntA~��stj��uuM������eu3�
���f��� � �fD��i�����1���v ��D����fDH�������ff.����UH��SH��H���[I���t
1�H��[]�@��7�H��H���8I���uݸ������ff.���USH��H��(H�t$dH�%(H�D$1�H9����;�H�D$H�pH�sH����H�pH�sH��u}H�k H�p H���
H���ʇ�H�D$�@@��t9Hcu9u ��H��H��H��H��<��H����H�D$H�D$H�D$H�L$dH3%(H����H��([]�f�@���y���H���>0�H�D$�g���@@���L���H���0�H�D$H�pH�sH���;����fDH�}����HcuH�E�u �F���f�H�D$H�}H�p8�\��J�����B��
'�f.����'����H��t@��t�H�H�ƒ�H��t��@H��f.���S�F�H��H��tH���6�H��[���H��t@��t�H�H�ƒ�H��t��H��f.���H��t
H�� t�Gø�����fD��AVI��AUI��ATI��US���H��t{H��1�H��uVL�kM����f�H�CH�{ ���;������H�C(K�4H��L� H�C0H�[]A\A]A^�01�H�èu�H�H�ƒ�H��t���@t�H�LH�8����H��H��L�kM�������A���y���L��H���..��i���f���AW�AVAUATUSH��H��dH�%(H��$�1�H�D$ ���H��H�CH�D$(H9hH�H���T��H�SH�T$0L�RH� �
1�H��$@E1�E1ɹ	f�L��$0�H�)�$0H�L$ fD�H�rM��H��L��L�����H�D$H���(H�L$(H�PH�pL���H� tH�pH��LH�H�{ �I8L���H�|$(H��I��L�|$HAW�MY�ZY����H�D$(H�T$L���H�T$8H�T$H�T$0H�T$8H�T$0H��$�dH3%(��H�Ĩ[]A\A]A^A_�L�R����L�t$`H��I��L�|$HL��AW��%�^_���D$tL���cU�D$�_���f.�H�|$(�FU�H�D$(�9L��H���H��@����9?�H�LL��H�5y�H�81��H�Hc�L��L��1��~<�H��L���3���AWI��AVI��AUM��ATI��USH��H��xdH�%(H�D$h1��
7�H��H9CtAL��H��L��L��A��H��I���@�M��xCH�T$hdH3%(L��uuH��x[]A\A]A^A_�L��H�C L��L��H��A��H�k I��M��y�1�L����I���t:I���t�1�H��H�|$�J�f�Ic�H��)$�;�H��H���J��>�H�=�VMH�5u�1��G�AWAVAUATUSH��8dH�%(H�D$(1�H�FH9��
H�����H�$�f�HE�E��H��H��L�D$I��M��)D$H�	���H�D$H�D$ �<�I��H�����H�LH�8����foL$H��H H�D$ H�C0E��u_H���G�H�kH��t@��uH��H���*�H����,�M��tI�]H�t$(dH34%(L��uTH��8[]A\A]A^A_�f.�L����,�H�CH��t��u�H��H���)��fD�I������W,���<�AVAUI��ATUSH�>H����I��H��I�����H��I�$H��tx7H��H���H�H��M��H��H��[L��]A�A\1�A]A^�H����H���X>�H�Ǩu!��.�H�H�y�H��[]A\A]A^�f������+�H�������ff.���H��1�1�H�t$H�t$�%���H�ƸH��xH�|$�>0�H�DH���@��SH�� dH�%(H�D$1�H�D$����H�H��H�D$��t����H�V��tdH��	�1�H�L$H�t$H�����H��xOH�|$�u/�H�D$H��uH�\$dH3%(uVH�� [�@�!��u(H�D$��H���H:�H�����*��H�|$��W�멺���%��:�ff.�@��ATA��UH��SH��1��8�E��t#H��H��H��~�xt	H�UH9�|H��[]A\ÐH�}H)����L�eH�E tL�eL�I�4H��H��L��PhL)�H��H��[]A\�H��H��H��L���7#���D��E1�����@��E1�A����ff.���UH��SH���M�H��tH�èt��X)�H��[]�@H���H��u�H��1�1�H���1�H�ƸH��x�H���-�H��H�D[]�ff.����SH��H��1��n��H��t H��1�1�H����0�[H��?H�Ѓ��D��(�1�[�f.���ATI��UH��S���H��twH��A� H��uQ1�H�����L��H���e7�H�����L����(�H�CH��urH�kH��uQH���I(�[�]A\���u&H�H�ƒ�H��t��@tH�!LH�8�!���H��L�C �|���D@��u�H��H���?%��D�u�H��H���)%�H�kH���{�����f.���'�[1�]A\�ff.�@��H��t6H�~tGH�� �V�9�~$��x+H�FHc��H�<���HD�ø�f.�ׅ����P�R���f���H��tLH�~tKH�F �P9�~:��x0H�PHc�H��H���t%H�@H��H�~H��H)����ׅ�ʸ�P���ff.���UH��AWAVI��AUATSH��(dH�%(H�E�1���T�H���l%�I�^H��H����H����Icv$H��H��I��H��H��<��H�BH��H��H���H)�H��H9�tH��H��$�H9�u�%�t	H)�H�L�L�l$1�H�M�I���L�����H�{L��H�5Q����+��J�H�5�W�H����=�H�M�H��I��H����E�����L��I��1�H�52��'��g�H�ǃ����L��H���z@�A9�tqH�5��L���'�I�uH����I�UL���h'�H�5��L��I���P'�L������0�H��u��H�5xsL����)'�A9�u��H�5��L���'��fDH��L��H�=��1��$D�I��H�M�dH3%(L��udH�e�[A\A]A^A_]É�H�5��L��1��2��P����L��1�H�E��20�H�M�H�=j�H��1�H���C�I��딿����4�fDAVAUI��ATI��USH��H��Hco$H��tqH��tYL�4L9�IO�H9�}%@��L��H���/�L��H���oO�H9�u�H��I9�~I�4$�� uFI�t$I)�L��L��8�H��L��[]A\A]A^�H��H�T$��H�T$I���u���fDH������ATE1�I��UH��SH��H�� HcO$L��dH�%(H�D$1�H��H�t$H�T$A���N�H��t9H��tH�T$H�t$H��H������H�\$dH3%(uuH�� []A\�DL��L���H��t1H��u$�&�H����.�H��H���RN�H���D�C��ڐH��u��%�H����l.��f.������3�@��AVAUATUSH�z��A��Hc�H��H���X��I��E��~eA�E�L�u L�l��'�H����
�H���H���-�L��H���M�L9�t/H���u�H�uL��������y�H�3L��H��H�����L9�u�[L��]A\A]A^�����f.���AWAVAUATUSH��H�GH���H��t+I��H��H����H��t@��t(�H���C�H��1�[]A\A]A^A_��"�H���H��u�H�x��H�}H��� ��H����H9�|��"�1�I��H�EH�D$H�E�� ��DH����H9��@H�D$L�<�A��t1M��u�L�����A��u�I���H��u�fDL�����I�t$I��H����H�~�3�H��txI�VI� tsI�vH�I�D$I�L$ H����H�x�3�Dž���L��H���!,�L��L��H�����H�E�� �&���H;]}pH�E �,����1��@I�vH���H�x�_�Hc��g!�1��I���x��H�5QL�hL�`H�@ I�T$H�zH���%�H��L��[]A\A]A^A_�fDH�}�e����ڹ��f.���AWH)�AVAUATA��USH��H��I�PHM�y M�qI�i�6�I��M��~H�����I��E��~hA�D$�E1�L�d��f�H��L9�t/�;H����*�H�����t�H��L��L��H����A�L9�u�E��tH��1�[]A\A]A^A_�f��L��L���P���ff.���ATUSH�BH���+��~DI��H���u4H�ڃ�H��uAI�|$ H��H��聲����xM[L��]��A\�?*����tG�����@H����	�[L��]��A\�
*�f.�H��L��[�]A\���H�nH�ڃ�H���r���H��tsH�@��tZH��H�IcD$$H��x7H��x-H9�|-H�4H��L��H)�H9�H��[HO�]�A\���H�y�[�]A\�f�H���x-�H���H���h-�H�����軷��ff.���USH����wVt'��H��H��tH���"�H��H��[]��H����H��H��t�H�uH�����H��H�މ�[]��(�1���ff.�@��H��1��(�f���H��H�t���H��tH��Ð1�1�H���#����ff.���H�����H��H���������SH���Ӷ����~H�K(H�S0H�H�{[H�4�H��H)��@��[�f���H����H��H����4����H���s�����x��H�H��H�Ѓ��fD�H���ff.���AU�	f�ATUSH��H�|$H�|$0H�l$dH�%(H��$�1�)D$ H�D$�H�1�f�H����H�|$H�_H� tH�_L�oL�d$ �4�H�L$E1�M��I�H��H��L���V��H�l$H�T$�H��t)H��$�dH34%(H��u'H�Ę[]A\A]�DH�|$L��1�����H�����+�ff.�@��H��fH�=�KffH���(�H�5OLH�6H�8���H�@H�@H�@ H���ff.�@��AU�	f�E1�ATE1�A��UH��SH��H��xdH�%(H�D$h1�H�|$I��)$�H�1�L��f�H��������uH�T$hdH3%(H��u!H��x[]A\A]�H��L��D������H���c��~*�ff.���U��SH��H�����H����H��H��[]�5�f�AVAUA��ATI��USH��H��pdH�%(H�D$h1�H��tnH��H���2�H9�t^H�|$�	1�1��H�f�H�S)$f�7H�sH� uiI��jH��E��jM��L�����ZY��uVH��H��L��蝬���D��H��L���j4�H�L$hdH3%(L��uH��p[]A\A]A^�f.�H�s��e)�H��L��D�����H���/�ff.�@��AW�	f�AVA��AUATUSH��H��dH�%(H��$�1�H�|$@)D$0H�D$ �H�1�f���6�I��H��� ��H��H����H���D��E1�E1�1���у��L$H�L$(H�L$H�L$0H�$���H����H9��H�CH�<�H�|$(�0�|$H��t&I9�t!H�|$(H�%0��=�]L��H�|$H�T$��H�D$(H�T$H� H�xtH�xH�pL�$H�L$ E��H��|��H����H�D$ H��tH9�t	H����H��H�t$(M��u=H���%�I��H�A��Ic�� ����H;S})H�C �$����7��J���fDL���2���fDH��tH��L���P�D��L���U�H��H���:��H��H��$�dH3%(uxH�Ĩ[]A\A]A^A_�f�H�S�W����H���KH�$H�5SZH�81��0�H�HH�UH�5�H���KH�81��t0�H���KH�5f�H�81��\0���&�H���KH�5J�H�81��?0�ff.�@��AWAVA��AUI��ATI��UH��SH��xdH�%(H�D$h1�I����H�|$L��M��H�ù	1�E���H�f�1�L��)$H��f�H��jj� ��ZY��u[L��L��H���,�H���d�H�CH��u+H�T$hdH3%(H��uEH��x[]A\A]A^A_�f��u�H��H������H��M��D��L��L������H�����%�ff.���ATA��UH��SH���z3�D��H��H��H��[]A\�e��D��AWAVA��AUI��ATA��UH��SH��xdH�%(H�D$h1����H�|$�	f�H��1�)$�H�1�f�H��tII��E��M��D��L��H��H���/����u;H�����H�T$hdH3%(H��u=H��x[]A\A]A^A_Ð1�1���H���f�L��D��H������H����:���$�ff.���USH��H��H�=|�LH��tH�GH�@H9Ct!1�H���O�H�X�LH��H��H��[]�H�H������H��tfH�H������H��tD9�u�H�SH�sH� tH�sH�-�LH�EH�xH� tH�x�,���y����H�����fD�{�������ATUSH��0H�t$dH�%(H�D$(1�H����H��H��H��@����H����H�|$�O�H�D$H��tdxCL�d$H��H��H�D$L�����H��H��ttH�D$H�PH� tH�PH)��(@H���8%���H�H�x=H�D$u�L�d$H�PE1�L��H��H��H�\$H�T$H�K����f!�H���u1�H�L$(dH3%(H��uCH��0[]A\�D@���%���H���H�������	������@H����!��f����n"�ff.���S�G�H����wTH��1҃�uH�V��tH�H�6H��H��[�i���f�H��H�t$�c!�H�t$H��H��H�6H��[�;�������ff.����AWAVAUATI��UM�|$SH��(dH�%(H�D$1��A*�L��H�����D$I�$ tM�|$I�\$L�l$L�5��L�L9�v7H��L��H��L���	����td��	��twIc�L�>��f�HcD$I�L9�w�L����T$I�ƅ���H�|$dH3<%(L����H��([]A\A]A^A_�fDL��H��H���"��H�I��i����I�D$1�H�4���I�ƋD$����;�L��H����I�NI� tI�NI�t$I�$ tI�t$M��I)��@I�L9���@H��L��H��L�����������HcD$L�M0IǍA���tw7H�51�Hc�H�>����L$L��H��\A��L�M0�L$H�I�L��H���A��H�I�I9�r�I�FI� tI�FL��L��H)��&����L��H��\A��H�� H�I�L��U0H�I���L��H��\A��H��rH�I�L��U0H�I��|���DL��H��\A��H��fH�I�L��U0H�I��L���DL��H��\A��H��vH�I�L��U0H�I�����DL��H��\A��H��tH�I�L��U0H�I����DL��H��\A��H��nH�I�L��U0H�I����DL��L���%#������9�L��H���p���_���H��H��L�����H����v���1��H��A�A�H�PH9�u�I�I��O����H��L����7�H������(����SH��H�GH��tOH��tH��[�f�H��H��1��3�H������H�����H�CH��tҨu�H��H��H�D$�
�H�D$��j���f.���H9�tWH��t@��uH���H��
t1��DH�t�H�~t�ATUH��SH��H�H�v��H��u1�[]A\����f.�H������H��I���
���L��H���2��H��t�H�� HcE$H�� ;Cu�L�$�H�sH�}L���%��u�H�sH�}L���%���z�����r���ff.���ATUSH���H��H��1/�H���	�H��H���n���H��薪��H��H����Hck$H��H����H�{(H�4�I�����L��H����Hcs$H�{0H��H�����H��H���n�H����2�H��x!H��������?[]H!�A\H�D�f.�H��[]H	�A\H�D�蔥��@��H��H������H��H�����ff.�@AWAVAUI��ATUSH��XdH�%(H�D$H1�H��� ��H����H�D$H�|$��H�|$�W1��/�H�|$H�D$(��L��1�1�E1���E1�H�D$H��H�D$8H�D$8H�D$f.�H�
|�H������$�H�D$0H�D$0H���dH�|$0�j#�xH���H�������H�D$0H�������H�H�ƒ�H�������H�D$H���cH9��@f�H�|$0��������H�D$0M��tE����H�|$���]H�|$(H�t$0Lc���t.��L9|$��L��L���s�H��H�D$8��+�����{�H�t$0H�|$(�l��L��L���A�H�D$8H�|$(H�5:7���1�H�|$8����M����L9��6���H�KI�T$H�v�KH�5ϐH�81��#�DH�|$�V�H�|$8�!�xH��uCH���{
��u7H�|$8�}����}H�D$H����H9�t H�KH�P��M��tKL9��l���H�|$8��#���H������H�D$0����I���x����A��e���DI���A��H�GH�D$H�|$�@����H�=C��z��H�t$@�H�D$@H���KH��l���9f.�M����H�|$(L���:��H�t$(�H�Q�KH��1��H�L$HdH3%(��H��X[]A\A]A^A_�fDH�\$���fD1�L���^�H�
j��H���H��H���!�H��u��H�����H�����1�H�����u���H�\$���H�D$H��tI���3����%�I���&���H�D$I�T$H�H����H�S�KI�T$H�5ώH�81��� ��X����SH�H��� t H����H��tH��[�z���f.�H�FH��u�1�H���l�H����H��t�H��[�E���D��SH���c���H�CH�[�@8��������E����� ��E�����H������H��H�H�D��AVAUATU��SH��dH�%(H�D$1��������m�D�o�A��I��I��Hc�H���@4��u,I�$H�$A����I�EA��zf.�H�����I�ƅ�t�I�$H�$��tM�d$���x����
@A�I�EI��t,H�=��L�VM�E�1�L��H�5��L���H�$H��t��uH���H����I��tXL��A��tW�r���H���C�I�EH��I�EA�mH�T$dH3%(�8H��[]A\A]A^��1��@���H����L�@H�pH� ��M��~����i��w<H�՘����t.H�~1�L�	�H9������i��w��H����u�@H��H���KH�5V�H�81��%�DI����X�H�����H������H�C�����H�=׍�g�H�@�L���H�p�C����D��A��6����������1�H�5�L��1��/�����@�������ff.�@��SH��H��0dH�%(H�D$(1�H���<���H��t>H��H���{���H�CH�t$H����F���H��H�L$(dH3%(u"H��0[�D�L$H�T$H��H�4$�3���l�ff.����ATUSH��0dH�%(H�D$(1�H�����H��t6H�x�}$��H�H�Ѓ�H�L$(dH3%(u7H��0[]A\��D�d$H�l$H�$�}��D��H��H��H��������D��AWAVAUE1�ATUSH��H��hH�|$HH�t$(H�T$ H�L$@dH�%(H�D$X1���H��I����A�|$H�D$0uL�����A��H�D$HH�H�hH�\$H�XH�D$ tH�XH�D$(H�I��H�D$H��H�D$8H�D$TH�D$H9���DE����D$TA����������LcL$TO�4��\�L9���L��H)�H�|$�H�|$L��H���<��E���#�D$TA������������HcT$T�@�I���E��H�=3�Hc�H�>��D1�H�t$ I��9F~YH�VH�H��H�����H�VH��H�D$(H�0H)�H�t$H�t$8H�D$ tH�pH�H�L$0H�|$I�����@I9�����H�|$��H9��jH�\$XdH3%(H�D$��H��h[]A\A]A^A_�f.�H9�v#E���^�D$T�;<�����4@H��H�|$L��L��L)�I�������j���f.�H�|$L��L��I�������H����H�D$@�L$I��H���*���H�x��������L$�A����DH�t$ �VH�N�B�Hc�H�<�u(��~$��Hc�H�ѐ��H�:�@�ƅ���H��@��u��Y���I������H�L$(H�D$ H�qH�@H��H�H�1H)�H�t$H�t$8H�D$ tH�qH�L$0H�|$H�I�������_����H�D$ H�t$8H�@H�H�D$(H�H�L$�� ����H�p�����L��L��H���2��H�I������H�T$L��H��L���}������M�������L��H��L������Hc�L��/����H��H�T$��"�H�T$H�D$����@H�T$L��H��L���
������H��H�|$L��H��H)������{���DHcD$TH�H9�vQI��L�|$��L��L��H���R��H�I�L9�v.E��tC�D$TA���w҃�>tC���tȋD$TH�I�L9�w�H�3�KH�5d�H�81��b�f�L��L��H��L���_���>u�L9�v�H�L$HL��H)�H�H�D$H�AH�D$ tH�AH��H�|$HH)�����H�|$@I��tmH�D$@L��H�x�3�H��tWH�D$@H�L$ L��H��H�x����~:Hc\$TL�����H�T$L��H��H������<�����H�D$HH�D$�5���L���/�����f.���SH��H�H��u_H���H��u#H���LH��uH�����H��1�[��H�t$�3H�t$H�H�����HC�H�H��1�[���3H9���H��[�ff.�@��H�-�KATH�=*�USH�0���L�%�KH�=��KI�$�%�H�=�O����H�=�O��'�H�����H�5���H�=���1�H�5���H�=օ��1�H�5����H�=ą�o��1�H�5����H�=���Z��1�H�5���H�=���E��H�=���I^H�=��=^H�=v��1^H�=m��%^H�=d��^H�4O�H�5DO�H�=M����H�-��KH�=�H�u���H�9�KH�5����H��H���H�;H���K�����H�5����H�;�H��H�5w*���H�;�H���H�5���n��H�;�����H�o�H�5�&�S��H�;�����H����H�5���8��H�;�H����H�5}&���H�;�����H����H�5n����H�;�����H�c���H�5���g��H�;�H�8���H�58&�L��H�;1�H�����H�5{��4��H�;�H����H�5+&���H�;�H�����H�5����H�;H���K�H�5g�����H�;�H�T��H�5�����H�;1�H���KH�5@����H�;�����H����H�5����H�;�����H��H�51��z��H�;1�H�����H�5^%�b��H�;1�H�����H�5�+�J��H�;1�H����H�5�E�2��H�;1�H�Ɩ��H�5����H�;1�H�>�H�5�����H�;1�H���KH�5�x����H�;1�H�>���H�5Ղ����H�;1�H�����H�5>����H�;1�H�>���H�5�����H�;1�H�Ɨ��H�5����H�;I�$H�58��w��H�;1�H���H�5��H�� M����H�;�H�y���H�5�����H�;�H�5K��"�H�;�H�5B��u"�H�;�	H�57��a"�H�;�!H�5-��M"�H�;�AH�5'��9"�H�=��L�]�H�uH�=-����H�>�KH�5?���H��H����H�H���(H�	�KH�8H�5b����H�H������H�xH�5i���H�;�H����H�5/#�C��H�;1�H���H�5S��+��H�;1�H�o���H�5����H�;1�H�G���H�5
����H�;1�H�/���H�5c�����H�;�H��H�5�����H�;�H�����H�5'���H�;�H�^���H�5����H�;�H�î��H�5ڀ�w��H�;�H����H�5A_�\��H�;�H�]���H�5=��A��H�;�H�R���H�5���&��H�;�H�����H�5v����H�;1�H�ߑ��H�5�!����H�;�����H�t��H�5�����H�;1�H�����H�5����H�;H��H�5�#�J�H�;�����H�����H�5����H�;�H���H�5�p�t��H�;�����H�5��H�5C"�Y��H�;1�H�-�KH�5��A��H�;1�H��KH�5��)��H�;1�H����H�5
!���H�;1�H����H�5�'���H�;1�H�
���H�5]�����H�;1�H���H�5�����H�;�H���H�5� ���H�;[�]H���H�5��A\����H���KH�8����f��u<H�x����H����H�����uX<��H�I�KH�8�����H��tJH��td�u<t|H�%�KH�8����DH���KH�8�k���f�H���KH�8�w����H�a�KH�8�C����H�Q�KH�8�W����H��KH�8�#����H��KH�8�7����H���KH�8�����H���KH�8�����H��H�o�odH�%(H�D$81��oO�oG �ofH�G0)$g�on )L$o H�V0)D$ H�W0D�H�D$0NF H�F0E��u�O��tH���u�F��tH�D$8dH3%(uGH��H�fDH�FH+FH��H�F H�FH�H�F��@H�GH+GH��H�G H�GH�H�G���ff.�@Hc�A��1�H�D1�H��E��t1�H���������@��t3���t�
��u�H�P��H��w�H������@H�P��H��w�H�����DATI��U��H��SH�������w.Hc�H�>��f�H�{��L��������uH�[H��u�1�[]A\�fDH�[H��u�1����{��H�[��H�[�f.��C��H�s(�KH�CH��HD��~tHc9�|I��H�VL�D�1��f�H��HcB�9�|$A����~	Hc�����L9�uމK1��Q���@[�0���]A\�fDHcC9��A���C�N���1��ʸ/�������ff.�SH��H�������w4Hc�H�>��H�{������u	H�[H��u�[��H�[H��u�1�[�H�[�f.�H�[�f.��C[%���$/�ff.�@UH�x��SH��H�������wUHc�H�>���1�H�{����9�L�x	H�[H��u�H����[]�f.��C�uJH�[ �����v�1�H����[]Ð�K��w�H��H��t"H�[�w���f��k��t�H�[�e�����1�@����ff.�f�AWAVAUATUSH��(dH�%(H�D$1�H����
w<H��I��H�5����Hc�H��H�>�����������fD1�H�|$dH3<%(����H��([]A\A]A^A_ÐH�E1���@I��L�t$I�}L��L���I�������u�H�D$I9�tH9EvH�EM�mM��u��@M��$�I�D$hM��LD�G��j���L�G(H�GM��LD�IcA;D$\��I�|�L��H��L�D$���������0����{�$���L�D$Ic@A;D$\ZA�L�t$I�|�L��L��L�D$����������H�D$H9EL�D$vH�EA��D9{����Ic�Ic�A;D$\~��0��������G�������H�L��H���&�������������CL�E1҅�t!H�����Hc�1�H��H��H��I9�sL��H��H�U�O���D�G�����������-����G����������L��H��GH�������C��C����H�U���CH�S ����L�t$H�{L��L���\������������H�D$HEH�[H��u����H� �C�t:�G�����H�G 1�H�E����DH�GH+GH�E�i����H�{L��H��������L���f�H�G 1�H�E�;������ff.��AWAVAUATUSH��(dH�%(H�D$1�H����
wTH��I��H�5{���Hc�H��H�>����G���j�V��u�G��~H�G(H�EfD1�H�|$dH3<%(����H��([]A\A]A^A_�f�I�D$Hc@H�E�M��$�D�I�D$hM��LD�A����H�w(H�G�WH��HE�H�D$��~�HcL�l$A9D$\|II�<�L��L����������Z���H�D$H9EsH�EA��D9{�;���H�t$Ic�Hc�A;D$\~��0���� ���fD�G���
���H�L��H���~������������H�uH������C�����1҅�t!I�����Hc�1�L��H��L��H9�sH��H��H�U���L�l$I�����H�{L��L���
������������H�D$H�UH�����H�����H��H�H��H9�IG�H�EH�[H��u��D���@H�GH+GH�E�1����L�l$H�{L��L�������������H�D$H9EsH�EH�[H��u����D�G���H�E����1��������t	�������H�{L��H���+��������@L���B�����u���L��H��GH�������C��C���f���H�U���CH�S(�S����H� L��H��������<������DAUA��H�5�~ATA��U��SH��H���D������|����wLHc�H�>��f�H�{��D��D�������u	H�[H��u�H��[]A\A]���kt�H�[H��u�f�1���@D�ct�H�[�@H�[�{�����믐AVAUATUSH��dH�%(H�D$1�������f��H��}H��I��Hc�H�>��DA�H�{��L�������������H�[A!�H��u�D����E1�I��f�H�{��L���b�����xn��tiA	Ņ�u1�H�[H��u��DH�{L��L������u=H�<$t���@�W����������1��� ���H�L$dH3%(��H��[]A\A]A^��H� �������H��������u��S1������@�W1���u���t)1��������D��t01��y���f����WH����O����c��V���fDH�{��L���2����=����8���ATL�%#|UH��SH�������w]Ic�L�>��H�{H��������u	H�[H��u�[]A\�f.��C=t~4=t= uH�[�����v�1���@�CH�{��uH���=u�H�[�����H��C�m�����
�c�H�{�ʸ#����v���DUH�h{SH��H�������w:Hc�H�>��@�C=t��=t= uH�[�����v�1�H����[]Ð1�H�{���H�[	�H��u�H����[]ÐH�{ �w����Ņ�tǁK�H����[]Ð�C1�u���u���H�{�C�?����c����=�y���H�[�f���ff.��ATH��zUH��SH�������wuHc�H�>��E1������H�[H��txH�{H�������u�A���fD�C=t��=t= uH�[�����v�@E1��$�CH�{��t]H���U���A�ă��CDE�D��[]A\��H�{H���,���A�ċC��u�A��u��C0��=t�����t����C�������Ct���H�{�C�{����A��[]D��A\�DUH��H��SH��H�����H��H��tH��H��H����H��H��H��[]�f�AVI��AUL�-yATI��UH��SH��H������w+IcD�L�>��@H�{H��L�������uH�[H��u�1�H��[]A\A]A^�DH�CH��t�L�sH���fD�{H�CtFL�sH���DL��H�{H��L�k�U���H�sL9�t��>u�H�߉D$���D$�D�Ct�M�Q�UHcKA���S�@�S��t�I�H��H�C覸�I��
���ff.�UH��AVI��AUI��ATI��SH���J\dH�%(H�E�1�H��AH�H��H��H%�H)�H���H��H9�tH��H��$�H9�u���=H�\$�H����~HcЃ���9�}�H�U�H��L���E��1�������A�U\I�>H��������E�E\��M�MhE�� �If�H�?Hcփ�H�<у�A9�|+HcЋ���~�I���H��H�<H��u�L��I�<��@A�}��A�Ef.�����t��������A	UH��H�� u�A�E`H��L��A�E\A�D$�Ŀ�H�u�dH34%(u#H�e�[A\A]A^]��H)�H�L�����
��ff.�f�ATUSH��dH�%(H�D$1������w7H�'vH��H��Hc�H�>���H�{H�������uH�[H��u�1�DH�L$dH3%(��H��[]A\�H�{H���t�����u�H�[H��u�1����W��t����t1��� u�DH�{H���,����f.�H������r���f�L���H�FhM��LD�HcG�����V`��~#H�V�B�t�u�/����/����;E\��I��H�C H�����H�E�K�Ɖ�H�EP���ʃ�O։UH�C(1���������4���1�����DH�wH�WH9�t�H�}HH���G���~B��t
H�E�@	tH�$Hc�C�f���DH�KH�S�$���H�����$����a���H�KH�S�'���H�����'����B�������H�KH�S�&���H������&�������ff.�AWAVAUATUSH��dH�%(H�D$1���?
�S�H��H��sH��I��D�aHc�H�>�����?���6fD1�H�t$dH34%(���`H��[]A\A]A^A_Ð�E1���DH�D��H��L�|$�L���A�Ɖ���u�H�[H��t1H�{D��L��L���(�������u�H�[�D$9$�DE�H��u�E����1�A�������Y����L�gH�wI9��?����I�UH�B9BtL���,��H�sH��EI�L9�w��
���D�G��H� D��H��L����������D������G9G����H�D��H���X�������������SHc<$��tH�����Lc�1�H��I���H9�s��A�ЉU���@�G�����V������e����G���G01ɉE�P���fDI��A�����H�{D��L��L�����������%���Hc$HcuH��H���t:H���t4H���H9�AGljEH�[H��u�������������fDD����H�{������$1ɉE���H�D��H���9�������������E�K�C0�������ff.��G�N���9���AWI��AVAUL�n$ATI��USH��Lcv �_ H�t$M�M9�s}�f�A�D$A9D$tL��L��L���������M9�v?��~;I�M��Lc�)�fD�Q���I��C�T$�Lc�9���I9�@��H��@��u�M9�w�A�_ A�WM9�uBH�|$A�G�O%A�OG�ɹD�A�WA�GH��[]A\A]A^A_��A�_ A�WA�G1��ԉO��ff.�ATA��UH��S�W�wH��Z9�v#fD�9�w��uH�����H��tH�E�UD�$1�;]v�][]A\ø������f�AUI��ATI��UH��SH���G�wH�?�9�v"D�9�w��u��H��H��t*H�E�EH�L��L����1�;]v�]H��[]A\A]ø������ATI��UH��S�W�wH��Z 9�v#fD�9�w��uH���?��H��t-H�E�U�Ao$H��AoL$H1�;]v�][]A\ø������fDATI��UH��S�W�wH��Z9�v#fD�9�w��uH�����H��tH�E�UD�$1�;]v�][]A\ø������f�ATA��UH��S�W�wH��Z9�v#fD�9�w��uH���o��H��tH�E�UfD�$1�;]v�][]A\ø�������ATA��UH��S�W�wH��Z9�wD�$1�;]v�][]A\��9�w��uH����H��t	H�E�U�˸������f.�U��SH��H�������tH��[]�DH����H��[]�p���AVI��AUI��ATI��D��UHc�L��S���o�L��É��C�����
tf�؃��t��t�C�w���t3L��1�L��H��H���H���L��L��L���Z���[1�]A\A]A^��L��L��������H��L���
����ff.�I������	��
t�ƒ��t��u�B��D���������B��ff.�f�USH��H��lH���?w+�Hc�H�>����uH��?v�fD1�H��[]���G���|~j��t��u�H��f��G��~�H��1�H�OH9Ov/H����t(�Gu"�C8�HE������HD�H��[]�fD��t�1��n���@�G�k8H��H��C8�����k8��ff.�H�GL�H�>H�vH���t|L)�H��cvSH���tbH)�H��cv,�9�|�����I9���I9�G����H��m�p�����L�
�mA�A��H���u�1���1�H���u��fD�J ����H��I�ҋV I�������q��l�F$�����u��H�5Bl�4FA�B$A�����u�A�H�=lD�G��A�@D��DЃ��F��D�A�s���A�B��Ʌ�~=��~L��L�������~*�AoA�AoJAK�AoR AS �AoZ0A[0H����ff.�@H�H���tOH���tII��H�I��L9�H�����HG�H�H�H���t9H���t3H��H�H��H9�H�����HG�H��DH�����H�H�H���u�H�����H��f.�AVAUATUS�F ��t�O ��tH�H9tBH�����H�H�GH�GH�G�G �G$[]A\A]A^�f�H�^H9_u�I��H��H����������G$8F$�#L�w$E1�1��I�$Hc�L�L��B9B��H9�������A�UHc��t$@8t$u!E�ED�D9�tcIc�A���T
$8T$t�U��tmD9m gD9k a�K�C�UD�k ��xp��x	ЉC�U�E!C��tN!S�
���E1����K A��D9�~�D9m ~=Ic��D=$8D;$�-����C1��f�����8����C����S�E1�E���c�����AŋK �E1���AWI��AVI��AUI��ATI��U�SH���_ M9�sj��eA�GA9GtL��L��L��蜰���EI�T$A��Hc�A)х�~�f��J���I��A�L6$A�Hc�9�A��I9�@��H��A��u�M9�r�A�^ H��[]A\A]A^A_�ff.��AW�$I��AVL�5mjAUATL���UL��H��SH��H��dH�%(H��$x1�H�H�����H�F0H�FpH���H�FH�FH�FH�F H�F(�F8�F<H�FXH�F`H�Fh�Fx�F|Hdž�Hdž�Hdž�dž�Ɔ�L���H�H�H�EH�SH�C H�UH�EH���H���H�UH�EH���H���E�/A��
��H�
�eD��Hc�H�>��I�(�U	H�EE1�HcPHc@H�SH��H��$xdH34%(D���)H�Ĉ[]A\A]A^A_�@H�}H�D$pL�d$M��H�<$I��H��I�}H��H���.������fM9���H��$�I!T$H�sI�|$H�$�D$���H�$H�sXI�|$X�x���H�$H���I��$��`���L�if�D$A��$�������$`����I��$�H��$HH9���L�]H��$PI;�$�sI��$�H9�sI��$�1�1�H�����<�6	AƄ��H��w��uA�{�A�R�H��H��u�H��$XI!�$�A��$�H�L$pH�T$xI;$sI�$I;T$vI�T$M�mM�������f�A���0����H�U L���H�BhM��LD�A�G���M�g(I�GH�t$(M��LD�Ic$I�<����A�Ņ�����Ic$H�U H�t$0I�<���A�Ņ������A���
H�D$8�H�\$H�$H�D$@��H�D$D�l$�N�IcEH�U H�t$I�<��Z����2���H�D$8H9D$(vH�D$(H�D$@H9D$0sH�D$0��A9_�K
Hc�H�U H�4$M�,�IcEI�<�������t�����fDH�D$pI�H��H��H�$���A�����McWD��A����l	A�GA����	�?H��H�4$�H���$���~w��$���tl��ta�{8��H�4$L�cD�,$A�I��H��H���	�{8I�UH��L��A����A�GD9�}�D�,$A�WA9�}�C0A��Lc�9�t�C0�CpH�|$p����
�CpH�����Ic�1�H��H��H9�vH��H��A�����1�E��t#H�����1�H�|$xH��I��H��H9�sI��H��H�3H�S����H�ELcpA����Hc@H�E1�L�s���I�WI�wA�GH�MI��I)�����zH�{�1����C41�M����L�#H�CHcC8L9��3����C0�'����A��JA�GH��`Hc�H�>���A�G�����==��I�H�t$pH���Q���A�Ņ������D��$�E���~	�o�$��o�$����o�$����o�$�����D��$`ǃ�E���R���H��$H�$L���H��:���f�A�G��EH�C����E1�����DH�E foEL�d$L�t$@foMH�,$H�D$`H�D$p)D$@H��)L$PI�L��H���^���A�Ņ�����H�L$xH�T$pI�vL���M���H�$H�{H�t$x�KL�`H��u�$��CL�CXD�Sp�K��$�L�D$A��A	�%	�H����$�AD�D�K0�C����H����H��t�Cp�C0��~E����E���H�UH�sXL����H�UXH�sXL������L�T$x���|M��t7D9�~D���H���H�����H�sL���R�L�T$xD��$`��tO�����t0��������~5����~H�|$H������g��~H��$H�$H�|$�H�H�T$pH�sL��H�����M�M���P����0����~V=tE1�=����f��P����L����������:�� �1�CE1�����fD�� t�E1������?L��H���H��_���D��t��P�E1����������u��v���fDD��$`E��~	H����H���:�������@D��$���$�A	�D��$�H���E	���$���$`�����H��$P����	�$XH����������f�H���h��H�UH�HcRH�����DA�G�����1ɿL�
�]��ȉ������H�A�T�t>���u4��H�U�Ƅ�uH��u�z�A�I��H��H��u�H�E1�H�C�2���f.��$H�|$L���H����I�H��H����A������A�GD�eI��EH��H���f�D�eA������f.�A�G4��A�G4����A�G1ɨtI�O H������tI�W(H�E1�H�S���A���������@��$(��������o�$�o�$�o�$(�o�$8���������l���@A�E�A��A��A����V����I� D�e�G�E���DH�{���C4M��tGI�G����u6H�u�Ƅ�����u�~�H��[�P��L�#L�c�(���H�uH�{L����Ƅ$�H�����HDŽ$�HDŽ$�HDŽ$�H��$�DŽ$����f�H�sXL����L�T$x�B���f.�%D��$`	���$�E�������H��$P�w������D�CE1���DH�uL��H�{X�3����H��$P�s����u���@H�}H�|$pu
I�G�8��A�G1���tH�����Hc�1�H��H��H9�vH��H��1�H�|$x��H���Y�����H�|$pHc�H�����H����������E�gE���uA��E1��
H�EI��E��H�¾D���PX��tHB��;�u=A��H�U�BƄ;�uM��u�z�H��YB�x��I�WM9�u��t���I�w�}L�uI�W����u7Ƅ�A�����u
A�~A�H�
OYD�AD��H�l$p����M��H��A�VH���������L�}L�$$M��H��H�D�H��$qI��H��L��L��A�?A�T$0��$q���u4Ƅ������u
A�|$�H��X�4P��I��L9�u�L�$$L��� ���E�GE�������C�E�}�̀�CE�_McW1�E�������8���D��$�E��������o�$��o�$����o�$����o�$������l���I�H��H���R�A�ŋC��u
�C����H�U A�O�r$����������„�����?�C�~�1���E1��f.�H�EE��H�¾D���PXE9�~��uHB��;�u=A��H�U�BƄ;�uM��u�z�H�5WB�x��I��I��u����D�l$H�\$H�D$(H�H�D$0H�C�����@�CE�_McW�~������A��_�A�������f.�AWH��AVH)�AUATUSH��hH�|$H�t$H�L$8D�L$HdH�4%(H��$X1�H�D$0H=���I�׈D$O�HM��L��I��f.��H��H9�u�H�|$0�D$H�D$ �%H��$PH�D$(H�D$rH�D$PH�D$H��H�D$X�L$HH�D$HD$ H�D$��tH��H�D$8M��H�L$(H�T$�8A�WH�D$E�gE9g��H�|$H9|$��Ic�HD$H9D$��@�D$������$TuiD;�$Pu_H�D$(E1�H�l$`L�t$@E��I��H�X�-f.�A��D;t$���{u"H��I��D9euH��L��L��;A�W0D9�tɸH��$XdH3<%(�!H��h[]A\A]A^A_���D�d$D+d$�>���H�t$H�|$L���T��A��Ic�HD$H9D$r�����L�t$@H�t$ Ic�H�E����D�L$H�L$P�\$OA�A�H��H��)�Ht$XI��H�QA�T$�L�d$I��L�I��D�I)�M�DA�$��D)�A�4I�E��~��H��A�4H9�u�I��H��M9�u�H�|$ H9|$0����1�����T$E1�H�|$ ���\����Ӹ������������AWAVAUATUSH�����
�H�
�R��H��I��Hc�H�>��fDH�H���;�����x5�E=�z�,=�q��
= t��H����[]A\A]A^A_�f.�E1�H�}L���Q����Å�x�H�mA�H��u�D���f.�E1�E1�H�}L�������Å�x�H�mA�A�FH����A�������s���fDH�W(H����H�NH��y�h�R�\�A���@�_�G ������\����f�D�oD�wH���������H�U�:�J��E���/A������U�����U0����X�����GH�����H���������Å�������E���<�����=�����f����������[���fD�GL�wL�_���M9��9���H��L��1ҿ[L)�]A\A]A^A_���@�\
�����1�����f�1��d���f�H�GH��(�����H��H9�u��k����H�����D�]E�������A����E��uԋU�����������X��������2��fD�Y
�M�����U�����ЉӃ�2���}��u�U0���U���D�EE��u�H��X
H9Uu������=�������D���o����C���EE�����DC��A�\E���f.�M9��������L�fH���D$��E�|$�D$E9|$tL��L��L���I��L�]A��Ic�E��I�M9�r(�ef��|$uCIc�D��1����E��E��M�M9�v<McT$E9T$tL��L��L�����L�]Lc�E9�u�E��͐�����f�Ic��T$D���������f.�D�ME��������N���fD�!���fD������������F8���M��z���u��2�‰�D�UE����H�}(���\�M�������=����H�m�}	��H�}L������Å�����H�mH����H�}L���s���������\H�}�����E�����D�E�n8�F8�B���A�l$8������\
����!�[����u��������X�M)����Ӎ�����}���H�}(t�E�X�j����E�X�^���������T���ff.�@AWAVAUATUSH��hH�|$H�t$H�rH�T$(H�RdH�%(H�L$X1�H�4$H)�L�46H�T$L�����H���H�T$H��N�<0I��H�D$@M��H�D$H�D$8H�T$8H�D$ H9$��H�D$L�t$H�|$H�$H�L��H�t$ �?I���P8��~[��L��M�t�fD�EH��L�j�L9�t5L��M9�w�O�,$H��L�����H��tIJ� H��N�<"M���f�H�T$8H9$�l���H�|$(L��H���!��H�߉$�Ƥ�$��H��踤�����H�L$XdH3%(uH��h[]A\A]A^A_ø�����������ATI��H��H��UH��SH���G��H��tKH�u`H�}HH��H���O�����u�KI�$H��[]A\�f.�H�߉D$�D��D$H��[]A\ø������AWAVE1�AUATUSH��H�|$XdH�%(H��$�1��G�$����I��H�OH�wA��H�4$H�L$H9���H��$�1�H�D$L��$�H�D$H�D$xH�D$ H�D$8�D$PH�D$`�I�GHL�$$A�`H�L$I��H�T$L��PHA�ƅ���I�WHHcj9jtH�t$L���L��Hc�E��tO;�$����$��	H�D$A�V�H��H��H���f�;(��H���x���H9�u�H���|H�4$H��H�H��H�l$(�ՠ�A�ƅ��?H�D$(H�$H;D$�&���H��t+I�w`I�HH���������H�T$H�t$(H9��YH�L$8H�D$H�|$XH��HE�E1�H��H���B���H���Z��f.�H��$�dH3%(D���XH�Ĩ[]A\A]A^A_�@A�F�D$P�D$P���<H��tI�w`I�HH��������u�KH�|$ u6H�\$H��t,H�|$8�ч�H��1��Ǐ�H�D$ H���H�D$ H�D$89�$��*H�D$A�V�H��H��H���H��;h��H9�u�1�1��}��H�D$0H���}H�D$�D$TH�D$@H�<$Hc�H�H��H�D$(����H����H�L$0H�AH�L$A�F�H��H�D�I��H�D$H1�1����I��H��tZA�D$1ۅ�.��DH�L��L��I�T�Ξ��u'��A;\$��I�GHHc�L��A�|�H��P0��y�L��蛆�H�|$A�����苆�H�|$8聆��,���@1�1����H�D$@H���1�1��ئ�H��H����L�d$@1�1�I�D$�I��H�D$0H����H�CL�d$�D$T����D1�1����H��H���X���Ic$9��H�$H�4H9t$�#L�sH�D$@H�\$@H�XI��L9d$H������|$T�MH�|$ H���fH�t$蘍�H����H�D$1�H�@H�D$ ���f.�H�|$ upH�\$H��tfH�|$8�T��H��1��J��H�D$8H�������1�1�����H��H���EH�D$8H�D$ H�|$ H�����H���nH�\$����D1�1����H��H���H�|$ H�D$����H�D$0L�sH�\$0H�X���H�T$H�|$`L����������1�L��蕌�H����H�t$xH��H�D$h�z��H�T$hH���H�S���H�D$ H��tH�t$H���L��H�������1��r���H�D$H�D$8���H�|$xL�������u:H�|$H�t$x��H�|$ ��H�|$ ��H���f���H�|$x���A������L����K�5���H�$H�D$(H����������H�|$A�����觃�H�D$8����H��A�����苃����H�|$ �{���H�t$�����H�D$@H�D$����H��H�$�Q��H�$H���E��H�|$x�;�����H�|$8�,��H�t$1�� ��H�D$8H��t=H�D$8H�t$xH�D$ ����H�����R���H�����H�|$x����;������H�|$x�ς�H�|$�ł�����AU1�ATUH��SH��H��H�dH�%(H�D$1�H�T$� ����u,�T$�UH�L$dH3%(��H��[]A\A]�fD��������u�H��@@��H�]H��D�eL�kH������H�]L�kH�]H��u�3H�SH�PH�CH�[H��tD����y�H��u޸�����g���@A�� t1��S�����EH�mH��t��EH�mH��u���fD����������ٺ�f�AWAVAUATUSH��8dH�%(H�D$(1��?
��H��AH��H��Hc�H�>��H�{H���������uH�[H��u�D1�H�t$(dH34%(���iH��8[]A\A]A^A_�f�I��E1�f.�I�|$H����M�d$A�M���jA��
��@�XH���k������u�L�k H�[(D�u��KH�C9�� 
Hc���1�H��H�H��D�0L�h��(�����C����D�oL�wL�OA���

M9��!���L��H��E1��L)�L���x���������H�(��
H�FH�x���C��
�H�����H�[(H��s�����SH�3H�����������@��Q�G�_1���@�ƅ�����"H���]�����x���fD�F8���H���9�����T���f��G ���F8����~���&
�3H�������������HcsH���+����������H�C(H�SH��HD‹S�����Hc��H��H��H�0H��H)�L�$0��H���L$L9�������3H��L$�!����t݉����fD�G=���
�����S
�}���\
�����������O����(H��� �����;���f�D�wD�oH�������������C���J�{��@L�cA�<$�1D�sE1�E��~#DH��L���u�����������A��E9�u�E8��H�{(�������H���|�����������H�C(�H��H�p������x���fD�G����
����	�����l��������@���H��������-����UH��D$������������L$�VH��Q�<��������H�{H��������������WH������������=�5K=��=�u�����=�����D�GE����
�&H���S�����n���@= �e
=�������=�D����RH����������-����C���r�D$$Hc�H���1�������	���H�{H����������@�� ��
��@�v������������,H����������@�������������G��K�E(��������� M„��p	�6H���U�������m����sH�����������X���H�{H����������B����s�K�E,�������
�ƃ�����ƃ�@������H�����8�����������sH���d�����������YH�����������fDD�aE��DD�D�d$A����6D�sE����D�s0E�������D�cL�kE1�E���g
�A���L$E9��O
H��L��L$�����t܉��?���DDmA������1@D��+U�=H��D��R�������
���H�[H�������H�{H����H�{t�P�>H�������������H�{H���b������������H�{u����@�H���{�������@��������;H���S�����n���@D�WE����
�$H���.�����I�����-H��������.���@�LH�������������H�{H���������������MH�������������ZH��������������sH���>�����������L�cA�<$	�VI�|$H���h����������M�d$�D$M���-I�|$H���?�A�ʼn����d���I�|$������S����L$H��H�[�q��������6���H�{H����������� ���D��=H���N����������H�CH��H�x��������DL�gH�W(L��DD�(E����H��H9�u�����fD�_���a���t����0H���n�������������H��������u���D�sA������A�փ�2�_L�{E1�@H��L�����������5���A��E9��D�[E����D�|$H�{(A�W���AH���<��������H�C(�H��H�p���H�{D��H���
��������������=H��D)������������4H���s������������MD�m8�UH�ED�aA��A9�v*fD�A9�w��U��H���t��H���
H�E�MD�,D;evD�eHcs0H���J��������M9�����A��L�~HD���A�O�D$���D$A9OtL��L��L��L�L$��L�L$��Hc�A��M�$M9�rE�b��|$udHc�E1�H��D��L������������M���A��I�M9��Ic_A9_t#L��L��L��L�L$�L$�~�L�L$�L$Hc�D9�u��뾐�G�.�H�����H�sH���������(�fD�H�������>���fD�2H�������������s��u�S0���j���H�H9C�)D�u�CH������������D��H��� ���E�������t$H����c�������{�U4D�cD�{����H�E@D9��SIc�A���H�{H��H�к���DD�D�8D��D�`������'�C����} ���:��GH�������������D��H���q�������f.��������A���J����AA�ƃ�2�:���D�u�B���PH������������H�{H���-�������QH���V�����q��Hc�D�D$H��D��L���������M�D�$	H��Ic�H���U��H����D�c�H�C��D�H�����������C���H������L��H������������H�[(H��s�����SH�3H���������G�^8H��F8�D�]8����u	��2��L�{A���2����R���@�ʾ=H����������a�H�{H�������N�1H����������7��H��������&�H������#����5H�����������fDH�����SH��P����������C�����D$$Hc�H�������������H�{H���E�������TH���n�������H��G�������o�P�NH����������U�H�{H����������?�OH��������+�f��)H����������@�*H����������@�+H�����������D�OE�����%H���������������'H����������XH���l����������E�KH��p	�s�J��������b�H�{H���$���=H��P�����������7�D�.H����������/H��������
�E)�E��E��~YA�����G�l��A)�A��E1�A�DD��>H������������H�{H���Z��������A��E�E9�u�1�����>H��L$�����������L$�=H�����������b�H�{H��������O�������E�D�|$�=H��D���n��������&�H�{D��H��������
�������>H��D)��6���������!H������������H����������� H����������H�������������H�{(����=H����������F����m��>H����������V�H�{D��H���5�����=�������=+T$H���e������ ��H�������p�����H���տ���������=H���������]���H�{H�T$$H��脹�������������D$$���H�{H�T$$H���]��������������D$$�k� ��x�H���JH�E@�E4�����҉���������ƒ������8H�����������.��sH��衾�������H�����������H��Hc�T$H�����H�����T$H�E@�U4�~����C�������EH��袾�������������ƒ���tc�7H���{�����������sH��������������H�����:�J������l�:H���6���������������G��9H��������뛹�����,�������"�1���f���t<AUATA��UH��SH��H��H��D�n�H�Ƚ����tH��[]A\A]�f��k��sH���=�����uՃCH��H���J���u�A��t(A��t:A��tDH��D��H��[]A\A]�����IH���K�����u���D�JH���3����搾KH���#����֐��H��xK��f���H��xK�81����UH��SH��H��H��uH��]1��EH��[]ÐH���8v�H�EH��u۸���������H��tSH�����H��[�ń�D�ff.�@��H��tWSH��H�?蛄�H���菄�H���胄�H����w��H�{@�n��H����"��H��[��p�f��ff.�@��H���+ATI��UH����S�_u�H��H�EH���V�9H��L���H�H���H��t,H���H)�H������H���H���H�H���H���H��t����H���H����H���H��t�软��H���H����H�;H��t�s蝯��H�H��tyH�{@H��tHcs4H������H�C@H��tRH�{XtL��H��账��u3H���H��tH���������u1�[]A\�D1��H���mo�H�{@���H�;���H������H����Ԃ�H����Ȃ�H��������맸�����f���1�H��ttDH�?��t
�WH���H���H��t
H���H)�H�H���tH��H���tH��H�@tHcO4H��H���H�H��u�����H��tHcH��H���1��D���vjL��t
1���H���ZjL�e��1�H���ff.���AUA��ATI��U��SH��H���!jL����H����M������%�=���A�@L�cHL�CP	�D�k`���Cd���@Hǃ�E�Hǃ�Hǃ�Hǃ�H�H�CH�CXHǃ��C81�H��[]A\A]�L�D$�Vz�L�D$�C����m����׸���и��������'z����SH�����q�H��tH�
iLH�XH��hLH�[�f���SH��hLH��t%��SH�=�hLH�H��hL�_��H��u���hL1�[�ff.����D�1�H��E��A9�v1A���D;4�v�2f.����D�DB94�r ��9�r�1�A9�v
�1�94���É�D���HA������SH�Ӄ�3���w+������H��T������ƒ��C[E��H�S(1�H��t�H�:�mc�������ƒ��C[E�����SH����H���yH�T$��H��Q(H�T$��H����[�'���AWAVAUATUSH��8dH�%(H�D$(1��?	w5�A��H��%H��I��I��Hc�H�>��L��H���Ӛ��L����d�1�H�t$(dH34%(�VH��8[]A\A]A^A_�1�A�H�{L��D��L���f���H���������EL�K��u%�4@�}u�EuH�m�E�����t�L��H�[H��u��f���fD�F8�V����G�L�������D���f.�L���L�W(H�Ah�wM��LD�H�GM��LDЅ�����A�
A�l$\9���A�T$$A�D$L��1�A��DHc�I�4��9��WE��A��A	Ѓ���AN�E��A�T$$�A��A	�����AN�A�D$�C t A�L$ D�A��D��A��A�� AM�A�L$ Hc��I�˃I 9{��_����L�A��t�O�C���������D���9CuD���L��L��L�����������A�������D�cA�������I�wI�I��I)�L�t$胵�I�Ÿ����M������A�GM�A�E�f��hI��d��I�WI�wL���z����Lt$��A9�uϋCD9�������\���D)c1�L���̂�H��H����H��H������H��H���*j�H��1�H���6���H���b������$���f.�������GH��"Hc�H�>��f��G=���=�a= ����L�O��3���L���������������D��L���L��L���9����������I�T$L��H������v���@A��H�{L��D��L���������T���H�[H��u��D���@A��t�A�W���Ѓ��� M�A�D$�CD�����DE���A�� DH�{L��D��L���������H�k���h��������=����H�D���a������@�Gu"�A`��~H�A�@�t��qDA�D$\9C�z���f��0����p���fD�}������}�����L��L���k���H��t
H�P�:tH�E(�}�`H�k���fD�G�n8D��H��F8���A�m8���f�H�oD��H������}����}������}�����U������H�U����������K@���H�t$ L��L���h����������H�|$ th�C�E���L�O��3���L���ş�����W�����L��D�����@D��H��������.���A�� �"�����C�����CL�������������{����C�s���D)�D)c�C�v���A���U���L��D$�^�D$����H�}�A�������1�L���ձ��H��H�D$�x���1�L��L��躱��L�T$H��I���Z���A�A�����������:���I�rI�zH9��)����������6������A�B����A�A�����I�QI�AH)�H)�H9�HF�1�Hc�H9������H��:L�t��ݗ�H�����H@H��H��H�D$萓��H�D$H�EH�k�B���fD��������L���]��������跖���`�����.��L��M��I������������'���/����҃��$���A�BA9A����A�BA9A����A�BA9A������-����/�������������
���A�y����I�MHA�yH�A tpL�L$H��H�L$��H�L$���H���g�L�L$��t|A�A���������I�EHL�L$HcpH��H��P L�L$I�}H��L��� W�������L�AXL�L$H��H�L$L�D$��H�L$�L�D$��H��A��L�L$��u�1�A�y���y���A�y����A�yI�B(�HH�����A�J��tQ����A�y�����I�EHL�T$�ϾL�L$�L$H��PX�L$L�L$��L�T$��������Ⱥ����H�A�T�u��A�R1ɿ�փ��!��tE�\�t0A�A�Q�������t&��A����A��H�E�\�t˅�t���A�At�� ���I�z(taI�y(����A�A�����6���I�EHL�T$�ϾL�L$�L$H��PX�L$L�L$��L�T$��������'�������u����H�������1��h��w1I�EHL�T$�ϾL�L$�L$H��PX�L$L�L$��L�T$u/�ʸ����Hc�A#D�A�BuQ���H�������t�����A�yu�I�EHL�T$�ϾL�L$�L$H��PX�L$L�L$��L�T$t�뷅�u����D��AWAVI��AUI�͹ATUSH��H��8dH�%(H��$(1�L�d$`L���H�M��tI�E�CL��$D��$ ����H�ָH��H�T$L)�H�HD�舁�H�T$�������CM��H��L��H�CL�|$�C4L��H�C@襒�Ņ����$���~H�T$p�B��L�t$��$����]�C L��1�H��L����Ņ����D$x�T$|	‰C$�S(������C80���S,H���Hǃ�H�CdH�ClH�CtH�C|�cr�H�CHL�d$PL��$0H�|$H�T$0L��Hǃ�H�D$@�C8H�D$8�D$H�C`H�D$0�D$L�����Ņ�����$@��$D�щ�%P�����Eȉ�%	ȉCl�tH��$0H�CpH��$8H�Cx��$h��D��$�E����H�{HI�t$I�T$X茬����$ Hc�$h����D��$d��E������������������~I��$�I�|$��蔫���������I��$�H���I��$���H��H���J�H9�u�H��$H��$�CdH���H���H���t���Ch��$��$���� 	�	�����!�;s��H���H��t+�s��u�H�;�|p��CH�H���H��u�f�H��$(dH3%(����H��8[]A\A]A^A_Ë�$X��$\��������� 	�	��@��$���~
H�|$(�o�L�t$H��$�M��tH��tH�T$hI�EH��$�I�UI�EL����U�H��$�o��Q����H�;踢�H�������SH��S�����C�;���@Hc�H���`�H����H�D$(L��H�D$ L���l$$�D$ H��$�袞���Ņ��(���H�|$L�������Ņ�����H�|$L���D����Ņ��������$�L�t$�C � ���fD�C9�����;�$��)L��H��L���[���L�t$�Ņ����������$�������f���u|��$\��$X�� ��	�	��H��$H��t�nn�HDŽ$H�|$H�������Ņ�����$���~
H�|$(�6n���H�|$�HT����H���X_�H���H������H��I�t$<H�����H�4(H��H�CHH���H��H��PpD��$d�ŋ�$hE����������t	���x�CdH��$HH��$PH���H���H������H���H+��ЉCh����fD�|-�����H������D��$�E�����{��uk�s,��ud�K(�����C0������D��$ ���E��������	�H��$8����W����� 	򉓀�G�����C0���|���f�L�t$L���S���������@D�D$ H�D$(E����H�P�B��E1��2f�F�< ;kv�kA��H�|$(D;t$ }yIc�H��H�H�P�BtqLc �sD�zH�A�l$9�s�f.��9�w��sH�����H���H�두������t	�����Cd�8���H����k�1�������������H�SHH���H�K`A�H���L����m��������������Cd�����C0���<���H�SHH���E1�H�K`H���L����������[������t���H�SHH���H�K`A�H���L����ݻ�����X�����s���H�|$(��������H�SHH���E1�H�K`H���L���藻����t�������������H�ǽ����������f���E1�E1��~���AUATI��UH����L��SM��H��H��H��]KL�l$0���_��tH��[]A\A]��H��L��L��H��H��[]A\A]�=��ff.�f���AWM��AVM��AUA��ATI��UH��SH����H���2[�H�H��t`H��D��L��M���t$XM��H��H���ko�ZY��uH��[]A\A]A^A_�fDH�;�D$�d��H��D$H��[]A\A]A^A_ø�������1��f���H��WKH�Ð��H��WKH�81��ff.�@��UH��SH��H��������| 1�H9���H��[]�fDHc�H�H9�s��H��)�[]�f.���UH��SH��H�����
���|�H��[]�f�H)�H����)É�[]�ff.�@��AUI��ATI��L��UH��H��L��SH��H���UhH��I9�vHcE9EuH�I9�HG�H��H��[]A\A]ÐH��L��H���bW�H��H�H�H��[]A\A]�ff.�@��AVI��AUM��ATI��L��UH��H��L��SH��UhH��I9�v1M��tI�EHcE9Eu?H�I9�HG�H��[]A\A]A^�f�M��t�H��I�E[]A\A]A^��H��L��H���V�H�H�H��[]A\A]A^Ð��H��I��H9�vH�r�L�OhH��L��H��A��D1��D��H��tXAUH��ATUSA�X�H��E��~7I��H��I��H9�w�%������tH9�sH�p�L��L��H��A�T$hH��u�1�H��[]A\A]�1��ff.����AUATI��USH��H����~#I���i�f�H��L��L�����U�H�HÃ��u�I9ܸHC�H��[]A\A]�ff.���AUATUSH��H9�s=I��H��H��E1�H��L��H��A���nU�H�H�H9�w�H��D��[]A\A]�fDH��E1�[D��]A\A]�ff.�@��ATI��U1�SH��;u;A�D$��t"H�S~+�{t
�#�:u��H����u��[]A\��Ict$H��L���H���T�H�H����ATI��UH��SH����;u;A�T$��t"H�K~+�{t
�#�9u��H����u�)��[]A\�fDIct$H��L��H��UT�H�H��ff.���I��H�GhH��H��H��L������AWA�aAVA�AAUI��ATI��USH�1H��dH�%(H�D$1�H�l$�fDD�{D�3H��D�|$L��H��D��A�Յ�u&D�t$L��H��D��A�Յ�uH�
�H9�u�H�|$dH3<%(uH��[]A\A]A^A_�詃�f�����P���v)�P�1���wH�H���� �A��H�H���� �A��ff.����AWAVA��L��AUA����1�ATM��UL��SH��L��H��(dH�%(H�D$1��0V��uYE��~wA�E�L�l$L�|��*���{L��L��D$�Յ�u#H��L9�t=�CL��L��;�D$�Յ�t�H�T$dH3%(u?H��([]A\A]A^A_�@1�E��t�H�t$L��H�ssH�D$������O��ff.�@��A���L�T$���P���wvH�I�A��� A�BA�8SuI��tEI�@I9�v<A�@���<Su0H�A�B�I�B��H�A�JI���f��P���w(H�I�A��� A�BA�8st����<�u��u_��~>��N9�t�9�t7H���W�H�<��f.���N9��s���H��9�tH9�u�1��H�A�RI���H�ssH�I�zH�SSI�I�BI�zH�� I�B(I�B<H�SsI�BD�I�z0����������fD��1�H9�s1��?
���ff.����H�H�RQK����H��ff.�@����fD���������fD�����w	@�>��PH�MK��H�5�H�81�萉���H��������fD��1��f���1���wH�SK�����x������UH��SH��H��D�GD9GuN�H9�s:H�sA��~0H9�v+H���f.�H9�vH���J���ȍJ)�A9��H��[]�DH��H��H���N�A����f���ATUSH����xH�
�OK�A��H�[]A\�f�L��I�ԋG9GuBH9�sMHcЍx�1Ʌ���H���4@�t
H�qH9�u�I$H��I�$[]A\�H��H��H���bN��1���ff.��������v���%�-��ff.��������u����u1�����������UH��H��SH�ZH�����t��"H��H�Z@�0HcG9Gu%H9ݺHB�H��H)�H9�u&H��[]��H��H��H���M�Hc���DH�p��������UH��SH�ZH�����tW����H��H�Z����H�S���tV��#H�Z@�2HcG9GubH9ݺHB�H��H)�H9�ucH��[]�@H����u����tH��H���DH9�u�H��H��@�2HcG9Gt�f�H��H��H���L�Hc��DH�p����ff.�@����v7�Ѓ��t
1���t�D��H��H��H����R(����H����ÐH��OK�����p����ff.����f.���E����AVI��AUATI��USH��H9�s]A�@�H��L�l�0�I���E9EtH��L��H����K�H�H�M9�t4I9�vH��L��H��U A�)�t�[��]A\A]A^�A�[]A\��A]A^Ð1�[]��A\A]A^�1҉��ff.���E����AWI��AVAUI��ATUSH��H��H9�sA�@�I��H�-ILKL�d�-f�I��A�FA9FtL��H��L���K�H�I�M9�tJL9�v=L��H��L��A�V ��H��DA��T)�t�H����[]A\A]A^A_�fDA���f�1���1҉�����AWAVAUI��ATI��UH��SH�L���H���R@�A�Ƹ��H��L9�t7�D9�u�H�KE��L��L��H���E��u֋CH��[]A\A]A^A_�@H���!���[]A\A]A^A_�ff.����AWAVI��AUI��ATI��USL��H��(�/H�|$H�L$L�D$�6��� t	���� L��H�ډ�S0H�Iĉ�����E�I�}L;d$sNL9�sIH��L���A�Dž�xIH��L��I�}�S Ic�IM�P���v��P���w���@t����� �H�D$E��D+|$�(H��(D��[]A\A]A^A_�ff.�@��D�H��L�L9���I9���S�DfDA�� tA��A�� H��D�P�E��A���A���EE�L�L9�s?I9�s:M�ZL�E�A�[�E�ڃ�v�A��AA��w�A��@t�A��A�� �H)�D�[�D�H)�Ð��1�H��y,H�ǓH����H��Hc�H�>��H�����H�9��H�I;��H�p��H�D��H�"��H����H����H����H����H����H�A��H�@��H���H����H����H����H�w��H�S��H�,��H���H����H�i
��H�1
��H����H����H����H�`��H�4��H�)��H����H����H����H����H����H�a��H�a���H�A��H���H���H��
��H�i
��H�9
��H��
��H��
��H��	��H����H�C
��H�
��H����H����H�Q	��H����H�	��H�T��H����H���H�y��H�A��H����H����H����H����H�g����AWH���AVAUATUSH��H�<$H�t$H��$�dH�%(H�D$x1�H��$��D$(H�D$0H��$�H�D$8H��w�H��utH�|$1��PN�H��H��t.H�=�@KH���IX�L�<$H��Lc�L��L��L��聍�L�H�$H�$�H�T$xdH3%(����H�ĸ[]A\A]A^A_�H�D$8�D$(H�@L�(L�`L�xA�}��M9���H�D$@1�E1�H�D$�@D�[=��vD�C
A��/��A��/D�\$�x��H�[
���H�D$J�<01��6�{@��1�Hc�H�MrH|$��6�D�\$D��A�EA9EtL��L��L���B�H�Lc�I�M��.�M9���L��L��L��A�U M��Ń��=�����B�D4@�M)�H�|$@�2L��I��/A�/MN�1�Mc�L��L�T$� I�I��/L�T$��H�|$L�T$H�l$@�L�H�$L�T$I��A�$��tI�T$<%t"I�ԈH��A�$��u���+$�0���A�D$I�T$<nu�L��H��H��L�T$�~��L�T$H��Lх���I���E1�f�1�M9����_�����H�D$�H����D�D$J�<01�D�\$�%5�L�t$�{���Hc�H��p1���L���4�Hc|$��H��p�̾1�L���4�{@��1�Hc�H�rp�L��4�D�D$D���"�����..�A.H��f�A��'�����p�ff.�f���AWI��AVM��AUATUH��SHc�H��H��(H�T$H�L$`L��L�$dH�%(H�D$1��@�L��H�H)�H�T�H9�w#H�D$dH3%(��H��([]A\A]A^A_Ë�H�=�<KL��A��T�Lc�M�H9,$��H�\$fDL�t$L�,$H��L��L����?����McfD��E9ftL��L��H���?�Lc�A�FI��E�,,���D��D)�~YI��A�N��1�H��	H���U3�H�=F<KH���S�P���~�I�DL��H��@�H9�u�D��M�|D)��E��II�H�H;,$�2����/fA�����@�EL�e<\�</��L�t$���L��A�VX��u0�}L��	A�VX����H�D$�}�H��PX��up�EI��L��A�G��p���E���g���A�L$�1�I���
�H���TA�H�PH9�u�Mc�I�D$H�I��,���A�\�EI��L��A�G������MH��H��1���2�H�=�:KH���R�P�����I�DL��H�ޤH9�u�M�|L������H�L$A�\M�o�A9AuL9$$vb�p���$M��L�������H�4$H�T$L���=�p���~?��H��D�TA�H��H9�u�A��I��K�,O�|�E���M���G���M��L���2����m�f�AWAVAUI��ATU��SL��H��H�H�T$(L�t$@L�d$`H�L$ dH�<%(H�|$x1�J�<H�D$8H��H�|$H�|$(H�|$H�|$8H�|$H9D$��M��L��H��H�t$��A�U8M��L��H��A��H�t$��A�U8A9�uHE��~8�D$`8D$@u8A�G�L��I�LL�����2@80uH��H��H9�u�H�D$(�@1�H�\$xdH3%(u&H�Ĉ[]A\A]A^A_�H�D$8H�\$ H�����[l�ff.�AWA��A��A��AVI��AUM��ATI��USH��H��XI��odH�%(H�D$H1�H�H�OHL�L$8H�T$@H/H�L$H�L$@H�D$8H�L$H9���H�xH�|$8��a���W�Hc�H�>���PH�xH�|$8fA9�txDI�E����1�H�t$HdH34%(��H��X[]A\A]A^A_�H��H�D$8�DH��H�D$8�o���f.�HcPH�DH�D$8�R���DH��H�D$@I�>I�E1��DH���-����H��H�D$8����f�H��H�D$8����f�fA����=����pI�T$@H��H�D$8H��H����H�L$����L�D$D��L��L��D�\$,L�L$ D�T$(�E���H�T$@H����H����H�D$ID$@�p90D�T$(L�L$ D�\$,��H��H�D$8H�T$@�\����H��H�D$8�G���f�H��H�D$@H�D$8�1���@H��H�D$@H�D$8����@E���O���H��	H�D$8D�T$ A�RA��L��D�\$(L�D$L�L$L���w���H�T$@L�L$H��D�\$(D�T$ ��H����H�D$8����H��H�D$8E�����������f�H�D$@H���w���f�H��H�D$@H�D$8�a���@E��D�T$ �����A��D�\$(L�D$L��L�L$������K���f.�E�������Z���f�H��H�D$8����f��p�6Hc�H�DH�D$8�����P�RHc�H�DH�D$8������P�PHc�H�D	H�D$8����H�t$HcF9FujH�H9�HC�����E�������H���k���fDH��!H�D$8�_���f.�HcP!H�D%H�D$8�B���DH�D$@�f���DH�T$H��L�L$ D�T$(D�\$�7�L�L$ D�T$(H�D�\$HD$8�}���I�U�:�����g�H���)����UI��H��1�SH��H��dH�%(H�D$1�H�H�H�����H�$�4���H��uH�}x�SHH9$H���HE�H�t$dH34%(uH��[]��Gg��AWM��I��AVAUI��ATUH�-C	SH��I�D�g�$L'L�D$ f�t$dH�%(H�D$x1�H�GH��H�\$XM�H�D$(I�I��H�D$`H�H�D$hH�D$`H�D$H�D$XH�D$H�D$hH�D$L9��	H�{H�|$X��a���G�HcD�H�>����$H��H�\$X��t�H��H�L$xdH3%(�3H�Ĉ[]A\A]A^A_�H��H�\$X�DH��H�\$X�p���f�HcCH�\H�\$X�[���DH��H�\$X�$�t$L��L�T$8L�L$L�D$L�\$0H�L$�PL�t$h���H���\���H�D$hH�\$XL�\$0L�T$8L9�H�S�w��I��8L9����I�~0u�I�V0��fDH�{H�D$hI�H�D$ H�8H�D$`I�1���DH�����HcC!H�\%H�\$X���DH�D$hH�T$`�L$�4$H�H��8H��H�P�L҉H�H�@�H�@��p�H�@�H�T$`H�D$h�6����H��	H�\$X����f�H��!H�\$X����f�H�KH�D$h�t$H�L$XH�T$`�p�4$H��8H�X�H��H�P�L�H�@�H�@��p�H�@�H�T$`H�D$h���fD�sH�CI�U@H�D$XL�t$hH��H����H�L$8H�L$`H�L$0��uE�D$I�I��8I�N�L�A�F؋$I�F�I�F�A�F�I�F�H�L$0H�L$`L�t$hL�D$�$L�L$pL��H�L$L�T$HL�\$@H�D$p�v���H���D���H�D$8IE@Hc�PH�|$`H�D$h9�L�\$@L�T$H����)΁�����Hc�HD�H�T$pH��N�I��H�H�H�L$`H�L$0I9�sfDI�NI��8I�V�L9�w�H�\$X�s���DH�K�[����H��H�\$X�P���f��C�H�H�\H�\$X�8���f.�H�K������C�@H�H�\H�\$X����f��C�CH�H�\	H�\$X����H�L$(�A9A�/Hc�H�L9�HC��A���D�t$L�L$�����L��L�D$H�L$L�T$8L�\$0L�t$h���H������H�D$hH�\$XL�\$0L�T$8L9�H�S�w�[���DI��8L9��I���I�~0u�I�V0��fDH��H�\$X�(���f.�H��H�\$X����f�H��H�\$X����f�H���;���@H��������t$H�H��8H�xЉp؋4$H�@�H�@��p�H�@�H�D$h����DH�T$(L��L�T$8L�\$0�0�L�T$8L�\$0Hc�H\$X����a�ff.�f�UI��S��h�I���zL��H�L��I)�N��L9���1��7f�H�XL9�3N�L��H��?L�H�L��I)�N��L9�tRL9�w�L�X�L9�~�H��H��?I��H9��
E���H��H)�H�����L��I;t.��H9���H����H��H)�L��H�D$IcsL�I�C���tXH�M�S H�<�I��H�RH��@��A�L���ICH��9�2����t9)у��AI�JH�H��Hc�I��H�H�[]��Hc�[]I��H��1�@��[��)�Hc�1�H��I��@��]��H�H��E1�1����H������ff.��D7����I���������AWI��AVAUI��ATI��USH��(L�7H�*H�H�L$L�L$L)�H��H��L��I9�ty�(LK���t��H9�wTH�@L��L�\$H��L�$H���r�L�$L�\$H��H��tfL)�H�1�H�I�/I�MI�$H��([]A\A]A^A_�f�D9�tSH���fDI�8u�H��H�$H���Z0�H�$H��t"L��H���x�H���L;t$tH�D$M�0L������뗸�됐A��AVAUATI��US��H��I��E��H��H��H��L��S ��
tKHcC9CurI9�sM�,L9�vH��H��L��S ��
��H��H��L��S������[]A\A]A^�f�E��uC[�]A\A]A^�D[H�GH��H��]L��A\A]A^��H��H��L���B-�H��~���H��L��L��H���^�H��t�H��H��H��S ��
�����}����H��H��L��S ��
�L����k���fDAWI��AVAUATUSH��H)�H��H��$�H�t$(L�L$H�D$0H��$�H�D$8dH�%(H�D$x1�H���I�H�L$H9��aH�D$XH��L�t$`M��H�D$�}d���EdH�=4Hc�H�>��fDL���L���H��H�MHL��L)�H�L$ H)�I9���H�L$L9���L��H�l$@H�l$L)�L�t$HM��L�l$ H�$L��I���DH��H��H��L���\�I9���A�>@88u�I�VI9�v2H�H�pA8vu�H�4$H��DH���y�@8:u�H��H9�u�I9�u�H�l$@I��L�t$HI����H���H����u`L�eHH�$H)�I���t$ H��H)�I9�rL��H��H�|$A�T$hI��L9|$��H�l$@�L�|$XL9,$vfL��M��L��H��H�t$�|$ A�T$8��~BH�U�t$`@8u����H��I�LI�F�H��H���x�@8}���H9�u�H9,$w�H�l$@M��M��tr������������� ��L9���H�}HD�E8H��L��H�T$(A��C�������H�}HH�t$L��H���[�I��H�������E1�H�t$xdH34%(D���pH�Ĉ[]A\A]A^A_�@L�l$(M9�t>H�}HL��H��L���Z�H�}HD�E8E1�H��L��H��I��������D����H���A�H����t���H�L$0L�t$8L��L��H)�H+��H�t$H�9H�}HH��I��B�I��;���H��H�|$�QhI���)���DL���L�eHL;|$�
���A����u~H�,$L��H�l$M��M��L�l$�
�A�<uNH��H��L��L���Y�H9�v����H�t$L��H��L���Y�I��H9D$��������f.�H�,$M��I��M��������X�f�AWAVAUATUSH��H���H��$�H�t$@H�$H�D$`H��$�H�L$L�D$L�L$pH�D$HdH�%(H��$�1�H��H)�H9�whI��H����L�d$H��$�M��H�D$(H�D$xH��$�H�D$A�}d��A�EdH�=�Hc�H�>��I����bf�1�H��$�dH34%(�H�ĸ[]A\A]A^A_�DH�WHH�L$HcBH˃���	H�,$H9�v�H9��I���I���L�L9�LG�I9��6���I�UHHcB9Bt�L��H���%'�H�I���fDI���I���H�L$H�D$0H��H)�H�|$PH�<$H��H�D$XH��H�H��H)�H9�HC�I���H������I9�����A�}`I�mHL�l$hM��H�\$xI�ʼn|$8�H�D$XL��$�L�|$PM�4I�FH�D$ L9|$0��I��H��H�T$ H�t$�|$8�U8��~�I�W��$�A8u)��I��H�LH�CH9�t�H��I���p�A8w�t�I�D$I9��[���A�FH�t$hM��D����)M9��7���H�I�L��L)�I9���M9����E9Et�H��L��L���%���f�I�����I���I���H�L$H�<$H�D$ H��H)�H�T$XL�4L9�LF�L��L�t$0M�4L9������A�u`H��M�}HL�l$PH�D$hL�l$xL��t$8f�H�D$hH�kL�$H�D$XL��$�H9D$ viI��M��L��H��H�t$�|$8A�W8��~EI�VA�6@8�$�����I��I�LI�E�H��I���x�A8~��zH9�u�L9t$ w�L�l$P�d@M���I�mHL;|$����A�A�����L��L�4$I��H�l$�'fDL�M9�LG�L9������A��<��IcD$A9D$t�L��L��L���$�H�I���fDA�E`M���I���H�$H�T$M�eH�D$ L��H)�H�DH9�HF�H�D$0I9�����L�l$8L�l$xL��I��DL��$�M9�vkL��I��L��H�$H�t$�|$ �S8��~IH�U�u@8�$�����H��I�LI�E��H��H���p�@8u���H9�u�I9�w�L�l$8M��M������L;d$�t���L��I+��H9D$wQA������������� ��H�$L9���I�}HE�E8A�L��H�T$@������I�UHLcJD9J�0M�L9$$MF�M��L�d$(����I���H�t$I���H�$H�x�H�D$ H��H�|$8H)�H��H�H)�H�|$0H9�HC�I��������I9������M�uHL�l$PL��M��I��H�D$0I�4H�D$ �8H�u2H�D$8H9��[H���fDH9��GH��H���8@8:t�I�FI9��"����FH�L$PM��D����)M9������H�I�L��L)�I9��M9����C9Ct�H��L��L���|!���f.�I���I���H�$M�uHH��H�t$ H)�McfH�lH�D$H9�HF�E;f��I9��w���L��L�l$0M��L�aI��I��H���DH�I9�HG�I9��E����E8�IcGA9Gt�H��L��L���� �H�H���f.�HcC9CuL�L9<$LG�L;|$0������@H�4$L��H��� �H�I���f�H�4$L���t �Lc�O�<�����H�\$@L9�tFH�D$(L�4$H��L��I�}HH��L��HE��Q�I�}HE�E8E1�L��H��H������Q���I���M��H��uiH�D$pH�|$HL� t7I�}HL9d$��H�D$(H�L$@L��H��HE�H��H�$�P�H�t$HH�H�D$`M��M+��L����fDH���t�H�|$@H�I9��H�T$pH�\$HH��H�:H��t�I�}HH�$H��H���8P�H��I���I���H�L$H�$H�w�H��H)�H�M�H9�HF�I9��h�����A:9u2M��H9�����H���fDH9������H��I��D�E8$t�I�AH9�� ���A�AA���I�I9�r�����DI9������H���	L�l$0I��L�pH�D$ ��H��H��L)�H�T$ �fDM�M9������A8u�I�wL9�tH�T$ L���QW��u�DL�l$0����fDH9l$0�}����CH�L$P���H�H9\$0�����Y���f�M9��G���M���W����H�D$ H�sL9�tL)�L��H����V������I���t���@L�l$h�v���fDM��L�l$P�c���M9����M���c���f.�I���q����L��H)�H�D$pH�H;T$w[H�\$HH�������H�D$(H�L$@I�}HH��HE�H��H�$�N�H��j���@H�$H�t$L����M�H�|$HH��H���f�H�\$HI�}HH�$H�t$I���+�H�|$pH�H������H�;����H�L$(H�T$I�}HH��HE�H�$H��H���M�H�L$HH����M���n�����L�ff.�f�UH��H��AWAVAUM��ATSL��H��xH������L�xH�pL� H�����H������H���dH�<%(H�}�1��x8HDž0��������x`�@�������P������VHc�L�4���d��I�H����H����I�FH��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�D$H����HDž����H���H��H�����H�CH��0���H�@H��H�J�7H��@����I��H��H��H%�H)�H���H��H9��
KH��H��$���L��������������H�;�����H��H����������H��H�����6RH�CH��0���H�@H��H�H��@���H��J�1H������H���H������@0����Hc�H�<�Hc�H�����H��H�����H�����H��H9�sf�H�H��H�P�H9�r�H����H�=g�M�t$HDž�������H�
{�JH�xH������H��0�@�H�@�H��(���H��8���A�$H�����H��h���H��H����������H��(���I��L+�����L9�����c����tL9K0�PH������L�K0H�{8H�SL�����H���-H�����L������L�bL�ZH9�D�����HG�L)�L)�I�$I�E����L�����L��0����I�����H�����L���L�����H������wA�Q(A�׃�A��A����AN�L�����I�<����CJH�H��I�TL)�H�A�A,�ƒ������N�H���t
H�RH��I�TL)�I���9����|(Hc�H��H�4M�L�H�>��i���M�0L�0��L�����H�����L�����L����������0�t� �`@�����_H�����H9�(����KH��8���@�������������V�H�F�H��8������*���n2���"3����V2��
��2H�F�HCx�V�H��8����H�N�H�{x�F�H��2	�@�2����3�	�H��8����V�H�F�H��8���������
�>2��t�H���ѐ���3H�N�H�{x�F�H��2	�@�2���3�	�H��8�����V�H�F�H��8�����u.����1��
u�H�F�HCx�V�H��8�����H�PL�`L�h H�@(H��(����SPH��������tZL�����H�K`L+�����H�CXL��H��H��H�CXH9�|0����6H�AH���y6H�{h� 9H�{x��7�C@�������C@A�$H�=r�JM�t$H�����I�H�����M�^L��H��O�4RI��L�0���A�~�WH���A�VHG@;P�A:H��8���H��@���M��H)�H����:�1�H9�0���tH�P�H�PH��0L�P�H��8����C@�����E���fD�C@H���H�sH�#���N�^�������L��(���I�EH9������JMcgE;g�AL9������UK�D%L��H9�����AH��8���������A�E�FL��M�fH�����H��(���H������������=V�I��H���~LH��8���H��@���H)�H���@D�1�H9�0���tH�P�H�PHc����H��0H�����L�h�L�H�����H������H�P�H��(���H�x�L��H�P�L��H��8���L��(����E�I���6��H��8��������I�IcVM�fH��9������:I�@A�$H�
4~JM�t$�$���H��0���H9���t&H��@���H�H���������H)�H��H��H��H�CH�������v$�H�]�dH3%(H�������pH�e�[A\A]A^A_]���H��0���H9���t&H��@���H�H���������H)�H��H��H��H�CH�������$�HDž�������H��8���1�H��f.�H��0���t��	��H��0��ы��u���F8������H��8���H��@���I��Mcf�H)�H����P�1�H9�0���tH�P�L�pH��0H�=�|JH�P�H��8���H���L A�$M�t$�$���H�����H��8���H��0���L9�LF�L�����fDH��0�=����=t=�4=�u�H�V HcFH�����H��H�����H�V(HcFH�����H��8���H��(���M�fA�L�P�H�p�L�X�H��8���L9׉������L9������*����*��������@����A�F�H�V�H��8������Jb=�B=�8_=���A=
��]H�F�HCx�V�H��8������H��8���H��@���H)�H���O�1�H9�0���tH�P�H�PH�����H��(���H�xH�PH��0H��8���A�H�
{JM��I��H������H��8���H��@���H)�H���
N�1�H9�0���tH�P�H�PH�����H��(���H�@L�h H�PH�H(���I�H�����M�VL�4�H��K�vH��H�0����B�pH����rHH@;q�R4L�ZH��8���H��@���H)�;1�7H����ZL��0����1�I9�tH�P�H�PH��0L�p�H��8���A�<$E��QH��@���H)�H���r[�1�H9�0���tH�P�H�PH�����H��0H��(���L�X�L�h�H�P�H�x�H��8����C@������3�C@H���H�sHL����������G��W�L������s3��A�6M�VH��8���1ɉ��=tA=	�����H��H�PЋ@�=uۅ�u�9r �4H��0�=t�=u�f�������H��8���H��@���H)�H����J�1�H9�0���tH�P�H�P�����A�FH��@���M�VE������H��8���H)�H����HL��0���H��I��H���������L�4�L)�H��H��H�����H���1�L9�tH�P�H���H�PE��H��0D�X�H�Q@L�P��@�F�2H��8���E��ulD�KPE���#SH��@���H)�H���aZ�1�H9�0���tH�P�H�PH�����H��0H��(���L�P�L�h�H�P�H�x�H��8���Hc����I�A�H�
�wJM�rM��H������A�FH��@���E������I�FH������H��8���H)�H���yFL��0���H��I��H���������L��L)�H��H��H�����H���1�L9�tH�P�H���H�PA��I�N�P H��0H�W@H�H��@�F�H��8���E��un�sP����PH��@���H)�H���Z�1�H9�0���tH�P�H�PHc����H��0H�����H�����L�h�H�P�H��(���H�x�H�P�H��8���A�FH�=]vJM�fI��H�����E�H�����L��H��(���H�������[M�H��(���H���&BH�����H������L��H��M�fI���<�H�=�uJI��A�F�H�����A�M�^H��8���1҉��@=tA=	�����L��L�pЋ@�=uۅ�u�A9N �c/I��0A�=t�=u��������CPE����=>H��(���M�f�A8F�P7H�CXA�FH�=@uJI��H�����H��8���H��@���M�fE�H)�H���zH�1�H9�0���tH�P�H�PIc�H��0I��L�H�����L�h�H�=�tJH�P�H��(���H�H�H�P�H��8���A�F�H�����H��8����H��0���tH�CXH��0�@0
���u�� .��
u�H�{xH�p�
�PH�7D�A	�D����+�D	ˆ���H�����L�����H��8���H��0����-�=��)=�t1��tH�CX=
�O/H��B�H�rЃ��l�=u�H�V HcFH��H�V(HcFI������H��8���H��0���H�����L�����H��0�D���+���tH��0�H�ƃ�����u�H�p HcPH�4�H�p(HcPI�4�����H��8���DH��0���tH�CXH��0�@0
���u��Y,��
u�����H��8���0H�CXA�H�=�rJM��I��H�����H��(���H9������L@M�gXI�G L��H�����H9������6��L�����A��L��H�����L����M�gXA�W L�����A��9�����n���H��8��������L��(���L9�������>A�OL9�����/6����JL��H�����L��A�W L��������A����KW�����L��H�����L��A�W L�����������H��8���9�������3���H��(���H9������A>M�gXI�G L��H�����H9������5��L�����A��M�gXL��L��H����������A�W �L����A��H��8���9�����B�������L��(���I�EH9������;A��q4L��H�����L��A�W L���������������EIcGH��(���A9G��H�����L���M�Hc�H�(�������L��(���I�EH9�����<L��H�����L��M�gXA�W L�����A�ԅ��4IcWA9W��.H��(���H�H9����HG�H��(���������H��(���I��H�GH9������:A���3L��H�����A�W L�����������3H��(���IcGA9G�	���H�H9����HG�H��(���������L��(���I�EH9�����;L��H�����L��M�gXA�W L�����A�ԅ��
���H��8��������H��(���H��x���H��H��`���H�����H��8���H������H��@���H������H��0���H������@H9����vf�CP����!�A8�� H�CXA�GA9G��H9������I������Hc�L�H9�����%<H��(���H9����w�A�FH�=}nJM�fL��x���I��H�����H��(���H�����H��h���H9��0:H��X���L������I��H������H��8���H������H��@���H������H��0���H������L������_I9���#Mc�J�7I9��w;D����E1�H��L��H������L���p�����<L��(���O�T5L��(���M9��9D�SPE���w!H��(���H������8�� H�CXE�WE9W�k���L��L�����H��(���Lc�J�7�]�����L��(���I�EH9������*H��8�������L��(���I�EH9�����*H��8�������L��(���I�EH9�����38A�M��������A����/M�f IcGA9G�+L�L9����IF�H��(���A�F H�=�lJI��!H�����L��(���I�EH9�����
*H��8��������H��(���H������g�����H��8���H��@���M�fE�H)�H����>H��0�����1�H9�tH�H�H�HA��H�����M�҉HH��(���H�HJ��H��H)�H�H H��H�����H���������H��H��J��H�1H�p(H�H��0H�
�kJI��H��8���A�F�H������I�H�����M�fI��H��(���H��H�����H������A�F�H�
JkJH������H��8���H��@���M�fE�H)�H����=H��0����1�H9�tH�P�H�PA��H������PH��(���H�PI��H��H�4H����H�>H�x H�:H�x(H��H)�H��H���������H��H��H�H����������I�H��(���M�fH�
�jJH�����I��H��A�F�H������H��(���H9C(�}���H��8��������H��(���H9�����>(D����H�����A�L��H������������@L��(���IcGA9G�aBL�L9����LG�L9������������PPL��H�����H��(���A�W ��
�5GM�G H��(���IcGA9G��RH�H9����HG�L��H�����H��A�Ѓ�
�^RH��8������@��H��(���H9�����7'D����H�����A�L��H���������������H��8�������H������H;�(�����6L��H�����L��A�W����+����tL��H�����L��A�W ��
��EH�����H��8���H;�(����~��*�f���H������H;�(�����&H��8�������H�����H;�(����w&H��8��������H������H��8���H;�(������A���*L��H�����L��A�W L�������������a*H��(���H9��������A��+OL��H�����A�W L�����������H��8����9���H������H��8���H;�(�����L��H�����L��M�gXA�W L�����A�ԅ��f*H��(���H�����H9��(�L��M�gXA�W L�����A�ԅ���H��8�������H��(���H9������0A��0*L��H�����A�W L��������������S<H������H9�(������A��SNL��H�����L��A�W L���������h�H��8����
�D��H��(���H9�����1L��H�����M�gXA�W L�����A�ԅ��W)H������H9�(����E�L��H�����L��M�gXA�W L�����A�ԅ���H��8�������L��(���L9�������3A�OL9�����^*���U?L��H�����L��A�W L�������A�����J�����L��H�����L��A�W L������b������9��|�H��8��������A���9������.H�����H��H��H����YAH�����H��H����gGH����(A����A��A��f��AN�@��tH�RH��H�0���H�RH����,A����A��D�Ƀ�f��Oτ�tH�@H��H�0���H�@L��(���H)�I�LH9�����Y:H��8�������D�CPE�M�VE���.H��8���H��@���H)�H���l9�1�H9�0���tH�P�H�PIc�H��0M��L�L�h�I��H�����H�P�H��(���H�
�cJH�x�H�P�H��8���A�F�H������E�L��(���M�fE���KH��0���E1�L�����L����fDA��E9��bI�$I��I��H��H���t�H�����H��H���t�A�r(A����A��A��f��DO�E��t
H�@H��H�DA�r,A����A��A��f��DO�E��t
H�RH��H�TH)�I�H9�����b���L��H�4�f�H��H���Q�8P��;���H��H)�H���L�����L�����M��I��H��(���L��D�������f�H�I9�HF�H9�(���v+H��IcD$A9D$t�L��L��H������H�H�H9�(���w�D������I��L��M��L�����M��A�A�D)��H�I�E9����H��8��������A�I����9������H�����H��H��H��8���H�������H�����H��H��8���H����g��H����v(A���A��A��f��AN�@��tH�@H��H�0���H�@H����v,A��A���E�ȃ�A��f��ANȄ�tH�RH��H�0���H�RL��(���H)�I�LH9������'H��8�����������9��������H��8���������������I�H�����M�fH��(���H��8���I��H��0���L��H��E��H��1�@H9�sH��0��ƀ�$1�D9H���H9�r�H���D�I(D��D��A����у�fA��AO�L��������H�@I�H��@���H)�H���,2��1�H9�tH�G�E��H�GH��0I��D�W�H��8���A�F�H�=`JH�����E�H��8���M�f1�H��0���E��H��fDH9�sH��0��ƀ�1�D9@���H9�r�I��L�����H)�H�<�H��I�H�����H���������H��I�H��@���H)�H����1��1�H9�tH�F�H�FH��(���E��D�^H�FI�H�F H�����H����H�H�V(H��H)�H���������H��H��H�H��0H�
_JI��H��8���A�F�H������H��8���H��0���M�fH��(���A�6H�@�H�D@H��H���H�ȁx�0H�H�u�9p�u�H9x��#��A�$<=r<>�?��DI��<���H9���t#H��@���H�H)�H���������H��H��H�CH���������HDž�����S���H��8���H��@���M�fE�H)�H���d/H��E���0H+�0���H��D�PH��0I��H���������H��H�=�]JH�P�H��(���H�P�H��8���A�F�H�����L��(���I�EH9�����)A�M��������A�����H��8��������Ic6A�NL��(�����Hc�L�H9������H��8���������A�L��(����RH�L�H9������H��8��������L��(���H�����L��L�����H��8������{��H��(���H�GH9������%Mc&A�GA;G��Hc�H�H9����HF�H9������1I��H��(���L��A�W L����������;M�H�
n\JA�$M�t$�$���A�L��(����H�L�H9�����oH��8���������H��(���H�PH9�����d'�8A8>��H�HH��(����xA8~�5H��8����}����H��(���H�PH9������&�A8��H�HH��(����HA8N�5H��8����0����L��(���I�EH9�����;&A�}A8>�nI�UH��(���A�}A8~�Q6H��8���������IcL��(���H��L�H9�����H��8��������M�fMc6M�M9�����L��(���I�EH9������L�M�L��(���L������M��H�����M��L��M��L��M��H�����L�����A�W8H��(���H9����rO��~.�;@8}�uB��H�TL����8@8;u*H��H��H9�u�H;�������EI��H�AH9����s�H�����H��8���������H��(���H�PH9������%�A8��H�HH��(����HA8N�'0H��8��������H��(���H�PH9�����8%�A8�,H�HH��(����xA8~�l4H��8����9����H��(���H�PH9�����,$�A8��H�HH��(����HA8N��0H��8���������H��(���H�PH9�����3$�A8�zL�hL��(����@A8F�2H��8��������L��(���L�����I�EI9�r5L�M�M��L�⋽����L��(���L��L�����L��A�W8L;�(����3H��8����C����L��(���I�EH9�����~#A�MA8��H��8����
����H�����H;�(����D��H��H���H��8���L������I��H������H��@���H������H��0���H������H������L������^f�I9��'Mc�J�7I9��L&D����E1�H��L��H������L��舿������&L��(���O�T5L��(���M9��s&D�[PE���_H��8���H��@���H)�H���
�1�H9�0���tH�P�H�����H��0E�WH�P�H�����L�h�H�x�H��(���H�H�H�x�H��8���E9W�&���L��L���˔��H��(���Lc�J�7������L��(���I�EH9������"IcGA;G�lL�L9����IF�H9������+H��(��������H��P���H��8���H��(���H�����H��@���H������H��0���H������H������@H9��������sP����H��8���H��@���H)�H���n�1�H9�0���tH�P�H��(���H�����H�PH��0L�p�H�x�L�h�H�H�H��8���A�GA9G�^H9�����sI�����dH�L�H9������$H��(���H9��������sP���L���H��H�S`H�shL�����H���L�����L��0���H�x@�a���ZYH������H��(���H�{xA�H+�����H�KpH�I�˃�I��A��B�D���C:H��@���H��8���H��H)�H����
1�H9�0���tH�H�H�HH��0L�X�D�P�H)�H��8���H�������fDH����L�KI��H������H������H�������X������H��8����V�����H��8���E�M�f1�H��0���L��(���H�F�H�����H�D@H��H�f.�H��0���0t!��Pu�1�D9P��H��0ϋ��0u�D9Pu˅���
�����IcM�d�C@�������C@�����H��8���H��0���E�NE�fH�F�H9��l��HDž���A�T$�M�TV1��%��	��	A9��#
H��0H9��.���8��uԃ�����A�M�fE1����������L������L���H������H������DA��D9�����)(I�$I��L��H��I���t�H�����H��H���t�A�(������ƃ�f����ODŽ�tH�RH��H�0���H�PA�,������ƃ�f����ODŽ�tK�@H��H�0���L�@L��(���I)�H�����K�DH9��I���I��H������������L��h���H�������ު��������L������H������L������H��h���M��M��I��H�����H��(�����L�L9�IF�H9�(���v+I��IcD$A9D$t�L��H��L�����H�L�H9�(���wՋ����L��M��M��L��������D)��H�I�D;�����D���&D��H��8���H��0���M�fL��(���A�>H�F�H�L@H��H��DH���y�0H�A�u�9y�u�L9Q��:1A�FH�=UQJI��H���H�����H9�w,��t(L9��!0H9��0Hc����L�����I�����L9��MH��@���H)�H����3�1�H9�0���tH�V�H�VHc����H�����H�~L�L�n H�VIcWH�N(H��8���A9W�?&I9��HG�H�����H��@���H��H)�H����4H��0����1�H9�tH�H�H�HH��0H��L�P�L�X�H)�H��8���H���I4�1�H9�tH�H�H�HH��(���I��H��0H�����L�p�H�x�H�H�����H�H�H�x�H)�H��8���H����3�1�H9�tH�P�H�PH��0H��8������@H�N�HcV�H�����H��H�����H�N�HcV�H��H���B��f�H�N�HcV�H�����H��H�����H�N�HcV�H��H�����f�H�F�HCx�V�H��8������fD��u�H�N�H�{x�F�H��2	�@�2�����	�H��8������fDH�V�H�RH��H�0����j�J���@H�����L���q���L��(�������L��H�GI��H��(���H������H�����L���1���L��(����������L��H�GI��H��(������H������LH��8��������LH��8���������LH��8����_���H��8���H��@���H)�H�����1�H9�0���tH�P�H�����H�PI�VH��0H�P�H�x�L�h�H�H�H��8�������f.������D9@������������f.������D9H������������f.�H��H�S`H�shL�����H���L�����L��0���H�x@���AZH��(���A[H���%��H��H+�����A�H�KpH�I�˃�A��H�KxI��B�D����1H��8���H��@���H)�H�����
1�H9�0���tH�P�H�PH��0L�X�D�P�H��8�������H��8���H��@���H)�H���F�1�H9�0���tH�P�H�����H�PH��0H�x�H�QH�����L�h�H�P�H�H�H��8������H��H�S`H�sh������H���L�����L��0���H������H�x@���AXH��(���AYH���E��H��H+�����A�H�KpH�I�˃�A��H�KxI��B�D���k2H��8���H��@���H)�H��� �
1�H9�0���tH�P�H�PH��0L�X�D�P�H��8�������H��H�S`H�sh������H���L�����L��0���H������H�x@��AYAZH���]�H��(���H�{xA�H+�����H�KpH�I�˃�I��A��B�D����1H��@���H��8���H��H)�H�����
1�H9�0���tH�H�H�HH��0L�X�D�P�H)�H��8���H�����@H����L�KI��H������H������H�������������H��8�����@�CP�������@H�FH�@H���l�#��f.�H��E1��
��D���E����H��E1����D�CPH���H�s`���H������H�K`H�AH���n���L��H��H9CX��������������������D�XE�������E�FI�~E9�tDI9������D�H��E9�u�H�xH���������f��L7�v��fDH����L�KI��H������H������H������舯�����MH��8���H��(�������DH�spI��1�H��I��H��I��H9��q(H��������H9��^(H��1��H������H�|�g�H���7(H�Cx����DH�PH�RH���l����f.�H�FH�@H���l���f.�H����L�KI��H������H������H������蘮�����]H��8���H��(����w���H����L�KI��H������H������H������L������D�������G������H��8���H��(���D������L����������H�<��CPH)�H���3��H���#'H�E�1�H�M�L�KpH���H�����L�E������H�H�CpH�E��ѥ��L�����H���s�c5L�Sh�d��H����L�KI��H������H������H������L������D�������l������1H��8���H��@���D������L���������
���L9X��%H��@���H)�H����H��H+�����PH���������H��D�VH��H�F�7�H�PL�h �
H��(����Z��H���������M��L+�0���I��L��H��H�������
�C@�����Y���C@A�H�=�EJM�rM��H���;�QA�<$D�?H��8���H��@���H��H)�H����&H��0����1�H9�tH�H�H�HH�����H��0H��(���L�X�L�h�H�H�K�RH�x�H��H)�H��8���L�dH���N��H����L�KI��H��8���H��@���H��0���L�����輫������
H��8���L��������I��L+�0���H��H���������I��H��L���`��L�`H��@���H)�H�����	1�H9�0���tH�F�H�FH��0H��8������H�J��B�H��8���H�sx�B�
H�D�
A	�D�
���F�D	Ȉ�;��H����L�KI��H������H������H������L��p���D��x����ƪ������H��8���H��(���D��x���L��p������H����L�KI��H������H������H������L��p���D��x����g������,H��8���H��@���D��x���L��p�����H����GHH9E��|�������f�M�fH��8���H��@����`��H���������H)�H��H��I����H�����H�<������H�����H�<����������H����#�1�H9�0���tH�P�H�PH��0M��L�p�H��8������H�����L��L��������$Mc&A�GI��A9G�H��(���Hc�H�H9����HF�H�����H9���H��H9���H��8�������H�����L��L�������*I�� �H�����L��L��������I�� �Q�H������H9�(��������H��8���HDž�������顿���C�'��H��8���鋿���C���H��8����u����C����H��8����_����C����H��8����I���H�����H��(���L���K��H�H�(����h��H�����L��L���+��H�H�(�������M�f����A�EH��8���A8F���I�EH��8���H��(���A�EA8F�¾��I�EH��8���H��(���A�FA8E�������I�EH�TRI��M��8A8<$��%H�PH��(����xA8|$�z%H�PH��H��(����x�A8|$�3&I��I��H��(���M9�u�A�$H�=�@JI��M�t$�$�I�V����*A�FA8E�N+��I�EM�d	��H���x�@8:�`H��I��H��(���L9�u�A�$H�
 @JI)�M�t$�$�M�fB�*�I��M��L��(���A8E�����A�$M�t$D)���H�=�?JI���$�M�f����A�FH��8���A8E�E���I�EH��8���H��(���A�FA8E�$�����I�EI�LV�1fD�8A8<$�X!H�PH��H��(����x�A8|$�.!I��I��H��(���L9�u�A�$H�
.?JI��M�t$�$��L���H��8���餼��H��8���阼��H��8���錼��H�����L���|��H��(���Hc�H��*�H��(���A�FH�
�>JM�fI��H����H��8����>���H��8����2���H��8����&���H��8�������H�����L��L���|��H�H�(�����H�����L��L����{��H��(���Lc�J�&H9�������D����H�����E1�L��H�������ť�����X L�(����)��H��8���H��@���H)�H���$�1�H9�0���tH�P�H�PIc�H��0I��H�����L�H�p�H�=�=JH�P�L�h�H�H�H��8���A�F�H���H��8����������E-A�>@8}������L�����M�d�I��I��M9��ɼ��A�A8t���A�����	��A�U�r��у��3 �r����' ��0��	����_��	����H��8����~���H��8����r���H��8����f���H��8����Z���A����������r��у��3"�r����'"��0��	����_��	����A�������A�E�H��ƒ��t�H����h��0��	����_��	��q��H��8����ƹ��A����1����H��ƒ��L���H����@����0��	�4����_�+��H��8����z������sL��H�����L��A�W L���������������L���L�����A�ԅ�����H��8�������L���L�����A�ԅ�����H��8���������5L��H�����L��A�W L������7��������R��H��8���L�����鯸��H�N�H�{x�F�H��2	�@�2���w"�	�H��8����F�H�V�H��8������y!=
��=t�H����Hc����H�����I��g���H����L�KI��H��8���H��@���H��0�����������H��8���鄻������HDž����H�D$H���J�0H�����H��H��0���H��@���H�����$���=��!H�N�H�{x�F�H��2	�@�2����!�	�H��8����F�H�V�H��8������� =��=
u�H�F�HCx�V�H��8����H�N�HcF�H�����H��H�����H�N�HcF�H��H��鰽��H�<�&@H��(���H���H�H�rH��(���:
��
H��H)�H���L������$f.�L�M9�IF�H9�(�������I��IcGA9Gt�L��L��L���v��H�L���L)�H�8�ŵ��D�XE���<�E�FI�~E9�t�I9��$�D�H��E9�u�H������	�H�����H�PL��(���H�����I��I)�L)�I9�����A�L�m����I,H9�sA�H�JI�UH�U�A:E���I�E�H���Q�H�E�H��:P��͵��H;����u�H�E�D�����M��M��I��H�����H��(�����L�L9�IF�H9�(���v+I��IcD$A9D$t�L��H��L�����H�L�H9�(���w�L��M��H�
�7JM��D�����C�$H�M�dA�$M�t$�$�H��0���H;���t&H��@���H�H)�H��H���������H��H��H�SH���������������Hc����H������R���H��8����Ĵ��H��H�shH�S`L��H���L�����D�����L��0���H�x@H��x���P�Л��A[A\H��H��(���D������s���H��H+�����H�{xA�H�SpH�I�Ã�I����B�A��D���KH��x���D�R(E��t#��"E���#E�A����������H��8������H��8������H��8����ݳ��H��H�shH�S`L��H���L�����L������L��0���D�����H�x@H��p���P���^_H��D�����L����������H��(���H�{xA�H+�����H�SpH�H�ƃ�H�����7A��H�����D���H��p����J(���?�� E���v"E�A���������L�b0H�=f5JA�$M�t$�$�H��8������H��8����ٲ��H��8����Ͳ��H��8������H��8���鵲��H��8���驲��H��8���靲��H��8���鑲��H��8���H��@���H)�H�����1�H9�0���tH�P�H�PH��0L�p�H��8�����H��8����>���H��8����2���H��8����&���H��8�������H��8�������H��8�������H��8������H��8������H��8����ޱ���C@H���H�sH�?��������ݵ��L�����A�FH�=
4JM�fL��h���I��H���H��8���遱��H��(���L��M�A�W L�����N��������H��8����R���H�����H��(���L���T��H��(���Hc�H����H������H��H9������A���L��H�����L��A�W L������O����.����H������H��H9�����&L��H�����H������M�gXA�W L�����A�ԅ��$���H��8���鈰��H��$�H9�tH��H��$�H9�u�H��H��$H�D$H���H����H��0���HH��@���H�����J�0H������鈭��Hc����I��4���H��8�������H��8�����H�����H������H9��m���L��M�gXA�W L�����A�ԅ��M���H��8���鱯���C�7���H��8���雯��H������H9��������A���L��H�����L��A�W L���������������߾��H��8����C���H��8����7���H��8����+���H��0���H9���t&H��@���H�H���������H)�H��H��H��H�CH����������HDž������[���L���������H��8������H��8���鵮��H����L�KI��H��8���H��@���H��0���蕗��A�ƅ��� H��8�����H��0���L�KH����I��H��8���H��@���H��D��x���L������H������H������H�������0������?H��8���L��0���H���������H��@���D��x���H��L)�I��H)�H��L��H��H�����H��H������L������H����I��L��p���H������H������D��x���H������蘖�����]���H��8���L��0���D��x���L��p���鮸��H��0���L�KH����I��H��8���H��@���H��D��x���L������L������H������H������H����������A�ƅ��@H��8���L��0���H���������H��@���D��x���H��L������L)�H)�I��H��L�4�H��H�����H��H�������L������H����I��D��x���H������H������L������H�������x������=���H��8���L��0���L������D��x����V���H����L�KI��H��8���H��@���H��0���D������ ������/H��8���D������R��H��8�����H����L�KI��H��8���H��@���H��0����є��A�ą��EH��8����=���H����L�KI��H��8���H��@���H��0���D�����苔�����P���H��8���H��0���D��������H����L�KI��H��8���H��@���H��0���D������L�������3������BH��8���H��0���L������D���������H����L�KI��H��8���H��@���H��0���D������ۓ������H��8���D��������H����L�KI��H��8���H��@���H��0���D�����葓�����V���H��8���D��������H����L�KI��H��8���H��@���H��0����N���A�ą���H��8���鴱��H����L�KI��H��8���H��@���H��0���D������������H��8���D������<���H����L�KI��H��8���H��@���H��0����Œ��A�ą��9H��8���黰��H����L�KI��H��8���H��@���H��0���膒������H��8����߮��H����L�KI��H��8���H��@���H��0���D�������C�������H��0���H��8���D������H�������H��(�����������A����IcF H��H�
M+JH��(���M�d$A�$M�t$�$�H��(�����������A��t�H��8���馨��L������H������H��8���錨��H��8���逨��H��8����t���H��8����h���H����L�KI��H��8���H��@���H��0���L������D������:���A�ą���H��8���D�����L�������9��H��8�������L��L��L������L���������L������L������H�H�����H��8������H��8���鹧��L��(���L�����I��L��������L���o�������H��8���郧��H��8����w���H��8����k���H�HH��(����HA8N��H�HH��(����xA8~�CH��8����-���L��L��E1��/����CP�����H��H�S`H�shL��H���L�����L������L��0���L�����H�x@H�E�P����A[L������H��A\L������[�H��(���H�{xA�H+�����H�SpH�H�ƃ�H����H�7H�����A��D� �RH�U�A�nD�R(E��t&�hE���N�E�A���������5�H��8����2���f.�L�hL��(����@A8F�(H��8�������D�KPE���_���H��H�shH�S`L��H���L�����L������L�����H�x@H�E�P����^_H��L�����L��������H��(���H�{xA�H+�����H�SpH�I�ƃ�I����B�7A��D����H�U��J(��t#��E����E�A���������kH��8����-���DH�����L��L���.��H�I�鑽��A����^���A�$�p��ƒ�v�p���v��0��	����_��	���A�U��z��փ��t����z����h�����0��	��@��_��	����N���H��(���A�FH�
�&JM�fI��H����H�HH��(����HA8N�\H�HH��(����xA8~�'H��8����6���L�hL��(����HA8N�*H�HH��(����@A8F�gH��8������A��������A�$�p��ƒ�v�p���v��0��	����_��	���A�U��z��փ�������z����������0��	��@��_��	������H��H�E�H�S`H�shPL�����L��H�@襊��ZYH���AH��(���H�{xA�H+�����H�SpH�I�ƒ�I����B�A��D����
H�U�D�r(E��t#��E����E�A���������H��8����٢��H�HH��(����HA8N�"L�hL��(����@A8F�
H��8���離��H��(���A�FH�=�$JM�fI��H���H��H�E�H�shH�S`PL�����H�y@L��L������藉��^L������H��_�H��(���H�{xA�H+�����H�SpH�I�ƃ�I����B�7A��D���fH�U��J(�����mE���WE�A����������L�b0H�
+$JA�$M�t$�$�H�N�HcF�H�����H��H�����H�N�HcF�H��H���	�H�����M�H��(���隥��H�F�HCx�V�H��8������H��8����L���H)�H�L��G�H��@���H��8���H��H)�H����
1�H9�0���tH�H�H�����H�HH��0D�`�H�x�H��8����	���H��8���H��@���H)�H���>�
1�H9�0���tH�P�H�PH��0L�X�D�`�H��8���餭��H��8���钠��L������L�M9�IF�H9�(����J	I��IcGA9Gt�L��L��L���_`��H�L���M�g A�GA9G�iHc�L�L9����IF�H�����L��A��H��8�����
�ƹ������H��8������H��8�����H��8������H��(���A�FH�=<"JM�fI��H���H��8���麟��A������A�E�H��ƒ�����H��������0��	����_��	���A����b�H��������H��ƒ�������H����������0��	�������_����H��8����$���H��8���H��@����{���H��8���H��@���顪��A�����A�E�H��ƒ��,����H���� �����0��	������_����H��8���L�����驞��L�����非��H��(���A�FH�=� JM�fI��H���H��8����p���Dž����H9��$��DH��0H9��v�8u�H�x(H������L����HE�A,E��A��A��A����EN�E��t
H�H��H�|
H�H H�IH��H9|
����L9߿����D������������w���HDž��������A���H9��}���L�����A�L�����H��0H9��X�8u�H�x(H����QE�F,�HE��A��A��A����EN�E��t
H�H��H�|
H�H H�IH��H9|
�L9׹����DE��I������H����L�KI��H��8���H��@���H��0���L������L������������H��8���L�����L��������H����L�KI��H��8���H��@���H��0���L�����蚅��A�ą�� 	H��8���L���������H����L�KI��H��8���H��@���H��0���L������L������F���A�ą���H��8���H��@���L�����L����������H����L�KI��H��8���H��@���H��0���L������L��������A�ą��jH��8���L�����L�������3���H��8���髛��H��8���韛��IcH��(���M�d鲟��=�e�H�N�H�{x�F�H��2	�@�2���a�	�H��8������H��8����A���H��8����5���H��8����)���H����L�KI��H��8���H��@���H��0���L����������A�ą���H��8���L�������R���H����L�KI��H��8���H��@���H��0���L������L������讃������H��8���H��(���L������L������H�F0����H��(���H9��������������H��ƒ���H��8����=���H����L�KI��H��8���H��@���H��0�������A�ą���H��8���魥��H�F�H�@H��H�0����h���H����L�KI��H��8���H��@���H��0����‚��A�ƅ���H��8���H��0������H��8���鐙��H����L�KI��H��8���H��@���H��0����p������5�H��8���H��0���H��@����m��H����L�KI��H��8���H��@���H��0���L������L�������������'H��8���H��@���L������L����������H��8����ۘ��H��8����Ϙ��H��`���D�J(E��t#��E����	E�A�����������H��8���鐘��H��P���D�b(E��t#��E���@
E�A���������T�H��8����Q���H��8����E���A��������s�f.�A���������B�DH��8�������H������H;�(����?���������A�E�H��ƒ��SH��8����Ɨ��H����L�KI��H��8���H��@���H��0���L�����蟀��A�ą��%H��8���L�������H����L�KI��H��8���H��@���H��0���D������R�������H��8���H��(���D��������A�FH�
�JM�fI��H����H��8�������H��L���������H��L�����錗��H��L���������������������Ö��H��X����z(��t#��
E����	E�A�����������H��8���醖��H��H���D�B(E��t#�@	E���*	E�A�����������H��8����G���E1��m���A�������A������$���L���������LH��8�������LH��8����w��H���o��A�����A����X�H��������H��ƒ��m��H����a���0��	����_��	��C�H��@���H��8���H��H)�H���	�
1�H9�0���tH�H�H�HH��0L�p�D�`�H��8���鶟��H��@���H��8���H��H)�H���{�
1�H9�0���tH�H�H�HH��0L�P�D�`�H��8���顠���LH��8���鋛��H��8������H��0���H;�������H��@���H�H���������H)�H��H��H��H�S���A�GA9GuML9����wVH��8���郔��H�����H��L��L������H������{��H�����L������H�H��2���H�����L��L���Q��H�L�H9�����v���H��8�������L�hL��(����HA8N�0H��8������L�hL��(����@A8FtAH��8����Փ��H�����L��L���۫�Hc�L���H�����H��8���頓��H��(���A�FH�
�JM�fI��H����H����aH��8����g���H��0���H;���t&H��@���H�H)�H��H���������H��H��H�SH���������Ic�H�����阗��I���J��H����L�KI��H��8���H��@���H��0���L������D��������{�������H��8���H��@���D������L��������H��8���飒��E���E�A������H��8����������D=
��H��H��0�=u��B�
�Q���I��M��H������g���H��8����3���E����E�A������H��8����������D=
�)H��H��0�=u��B�
���E����E�A������H��8�����������=
��H��H��0�=u��B�
鑑��H����L�KI��H��8���H��@���H��0���L������D������cz�����(��H��8���H��(���D�����L�������c�E��x|E�A������H��8�����������=
txH��H��0�=u��B�
���H��8���H��@����B���H�HH��(����@A8FtmH��8���鱐��L���y���H������y�����L���y�����H�J��B�H��8���H�sxH��:	�@�:�����	��H��8����O���H��(���A�FH�=�JM�fI��H���L���y���5�E���9E�A������H��8�����������@=
��H��H��0�=u��B�
�я��H��@���H��8���H��H)�H���k�
1�H9�0���tH�H�H�HH��0L�p�D�`�H��8������vx�����H�J��B�H��8���H�sxH��:	�@�:�����	��H��8�������H��0���H��������ٓ��L���x���Q���H�J��B�H��8���H�sxH��:	�@�:����	��H��8����7���L��H����w���0���H�J��B�H��8���H�sxH��:	�@�:���L�	��H��8������L��H���w���m���L���{w����E���E�A������H��8������Z����=
�H��H��0�=u��B�
�1���L���!w�����H��@���H��8���H��H)�H�����
1�H9�0���tH�H�H�HH�����H��0D�`�H�H�H��8������M��鱏��H��0���H;���t#H��@���H�H)�H���������H��H��H�SH������耶�Ic�H��������H��0���H;����4���H��@���H�H)�H���������H��H��H�S����L���-v������E���zE�A������H��8����������
f�=
�qH��H��0�=u��B�
���L��H����u���7�����0��	v	��_�P���H��8���鴌��H����L�KI��H��8���H��@���H��0���L�������u���������H��8���H��@���L�������4���H����L�KI��H��8���H��@���H��0���L�������<u�����K���H��8���H��@���L�����������0��	v	��_�P���H��8������E��xPE�A������H��8������Ջ���
=
t6H��H��0�=u��B�
魋��L���t�����L��H���t���H�J��B�H��8���H�sxH��:	�@�:��x[�	��H��8���똀L���L���Gt�����H�J��B�H��8���H�sxH��:	�@�:��x�	��H��8��������L뤀L��H�������s����E�����E�A�����������H��8������
t4H�‹J�H�BЁ�u�H��8����B�
�b�����L�E���H�sxH�J�H��8����B�H��:	�@�:��x�	����Ys��끀L�H����L�KI��H��8���H��@���H��0���L������L�������*s��A�ƅ��DH��8���H��@���L������L���������H�J��B�H��8���H�sxH��:	�@�:��x|�	��H��8�������H���L�����H�M�������H�xH�xd��������H��8���錉��H�J��B�H��8���H�sxH��:	�@�:��x�	��H��8����Z����L냀L��H����L�KI��H��8���H��@���H��0���L������L������r��������H��8���H��@���L�����L�������6����L��L����q������H��0���H;����+���H��@���H�H)�H��H���������H��H��H�S�����L�.���L���zq���<�E��xJE�A���������+�H��8������
t/H�‹J�H�BЁ�u�H��8����B�
��L���q���H�sxH�J�H��8����B�H��:	�@�:��x�	��땀L�f.���H��dH�%(H�D$1�H��H�$�Xh��H�<$���H�T$dH3%(u��H����������G��~1L�G�p�H�1�H������
�H��I��H�HH��H9�u����AV��AUATUH��SD�'��wM�E��tkA9�|E1�[D��]A\A]A^���Lc�H�I��L�����H��txH�EH�}L������H��tcE1�H�E�]D��[]A\A]A^��Lc�I��L�����I��H�EH��t L���ݠ�H�EH��t7�]D��[]A\A]A^�A������W���H�}A������k��H�}�b���:���L��A������O���'���f.�����xNAUA��ATA��UH��SHc�H��9~&H�EIc�Ic�H��H�EH��1�H��[]A\A]��s�p���y������@��H�H�GH�G�@��S����H��H��tH��葨�H��[�ff.����H��tgU��SH��H�����6��tH��H��[]�d��@f�H�CH��[]�f.�H��7��H�{�.���t����ff.�@��H9�tgUH��SH��H���v�s���u>�{��~4L�SL�M�O�1�L�CH�u��H��I��I��I��H��H�PH9�u�}H��[]�f.��ff.�@�����K�D���=�K1����AVI��AUI��ATI��USH��H��dH�%(H��$�1�H�$D�L$L�D$H�L$ H�L$(H�D$0�����D$@H�D$H�D$PH�D$XH�D$`H�D$hH�D$pH�D$xM��t�GL��L�ōp�=���tyHc�H��u-�I�~HL��H��L�����I��H��L��I��L��L���'��H��H�<$�{��H�|$h�q��H�|$x�g��H��H��$�dH3%(uH�Đ[]A\A]A^ÐH�����������AWI��AVI��AUATI��UH��SL��H���L�$L��$ dH�%(H��$�1�M��tX�GL��p�Z���t>H�H��t?�H��$�dH3%(�nH���[]A\A]A^A_��L���p��L9���H9���A�Fl��t	I9��UI9�����$(L�l$hH�D$P�D$`H�\$pL�|$xHDŽ$�����DŽ$�HDŽ$�DŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�H;$��E1�H9���A�Nd���L�|$PM��M��H��L��H��L���9}��H�����H���tH���RA�F8��I�VH�B9B�%Hc�H�L9�HC�I��H9$��H���fDE�FdE����H�4$M��L9�sI�FHL��H��H���PhI��I���L��IcNhH+$H����H9���H�t$HL�l$(I��H�t$H�t$@H�t$H�t$PH�t$I�L�t$H��L���t$I9�M��L��L�D$IF���k��^_����H�D$HH�\$L�|$ I9�LG�L9l$@��I�~HL��L��H���b��I��L��L��I��H��L��I����{��H����~H���tH���dA�F8�M�������H�$H9���L9���I�GL9�HF�H�$���fDH9���H�D$HL��L��M��PH��L��H�D$HPL�D$��j��ZY��~lL�l$L�|$PI�~HL��H��H�����M��H��L��I��H��L��I���{��H�����H���tH����A�F8��L��L9,$v�L�l$@A�F8�H�����H�|$PH�$� ��H��$����H��$����A�F8 H�$HDŽ$�HDŽ$�����M������L�����H�$���DH�|$P趧�H��$�詧�H��$�蜧�H�������A�vh����E1�L�L$PL��L�l$hH�-�j��$(H�D$PH��H��H��H�l$p�D$`H�l$xHDŽ$�����DŽ$�HDŽ$�DŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$��wy��H����
���H��������H�������A�F8��1���I���L��IcNhH)�H����H�����H$I9�IB�H�D$H9��#���H�D$8L�l$(L�|$PM��H�D$ H�D$HH�D$H�D$@H�D$�t$L��H��H��t$L��L�L$0L�D$(�l��A[Z��� H�D$8H9��M��H;\$@��M��H��L��H��L���zx��H�������H���tH����A�F8�I�VH�B9B�Hc�H�I9�HF�I��H9T$@��H���fD��H;$rH;,$�pH�,$H�����@H9��WH�CH�$����f�L��H���U��Hc�H�����f.�H��$�����H��$�H)�H�|$PH�$��H��$����H��$��ޤ�H�$�
���DI�~HL��H��H�����I�����fDH�$H�D$�6���f�L��H��赓�Hc�H���f.�H�$��������M��L��I�FpH)�H9�r^I�VxH;$��L��H)�H9�vL��H)�I9���H�4$L��H�V�H)�H��L��H)�H��H9�HB�H�4$H9�������H������$���@L�l$HH����������Ā�c������L�l$���L��DH��H)����L��H)����f.�H9��G���L�\$M��H��L��jH��L��H�D$HPL�L$H�j��AYAZ������A�Fm@L�\$�����L�|$PL�l$M��L�|$I��H�$L�L$M��L��L��H��L���u��H����I���H���tH����A�F8�7���I�VHHcB9B��L�M9�IC�A�Flt-M��I��L9�w�L�l$�u���DH��L��L���‘�H�L�I�~HM��E�F8I��E1�L��H��L���c��L9�v���u�I�~HHcG9Gu�L�M9�IC���@L��L��H+$H)�H9��:I)�L�$H9�vM�FHL��L��H��H)�L��A�PhH��H;$���������DI�~HL��H��A�L�����L��I��I�FHL��L�L$H��P���h���L�L$I�~HL��H��A�L���S��L�L$H��H��t4A�F:t-I�FHL�L$H��L��H�L$H��P H�L$L�L$��
��I9�����I9�������������H�$M��L��H��L����s��H����v���H������H�������A�F8�����H�$H)�����@H9��������I��H��H9$�����L�l$(���L��L����H�L����L�l$(���L�|$ L9,$w�I������I�~HH��L��H�����H��I�Fp�^���M�FHM�X A�PA9Pu<1�I9�vHc�L�L$H�<L��L��H�L$A��H�L$L�L$��
LD�����螿�L��H��L��L�L$ L�\$L�D$H�L$�<��L�L$ L�\$H�L�D$H�L$�L�l$����f.���H���D$PAQM��I��覉�H��Ð��AWI��AVI��AUI��ATE1�UH��SH��H��D�D$L�L$�	I�H9�w|H��H��H��M��D$I��L��L��P���ZYH��xpH��L��H�L$PL��H�D$I���Ѕ�ucI�EH��L)�H�H9�u�H9�s!I�WH�B9BtH��H���E��H�H�H9�v�H��L��[]A\A]A^A_�f�H���LE���fDLc���ff.���H�GH�����G8�����G`����H�GP�����G����1��f����o�oNO�oV W �o^0_0�of@g@�onPoP�ov`w`�o~ppH���H��������ff.���H�OL��H�?H�VI��I)�L)�I9�u=H9�v9�A�)�u-��@�A�4H��)�uL9�u��f����1��f.���H�H�w1�H9�s.fDHi��H���J�H�H9�u�H��H��H��fD�ff.�@��SH��H�H�NL�JL�B�V��~H�N H�>L�VI�L��Ѕ�u
[���C�[�fD���~~&L�F 1�Hcȃ�I��Hc9�<��99F�1��fDu�HcF���F1�ÐUH���8SH��H�����H��t�H�hH�XH��[]�S���8�Í�H��t.H������XH��@H�PH�@�@4[�ff.�H���8�r��H��t/H�H�@H�@H�@H�@ H�@(H���f�H���8�"��H��t�H���f�ATA���8U��S����H��t@H�H�@D�`�hH�@H�@ H�@(�@0��t�@@[]A\Ð��UH��SH��H��H�>�X��H�{ �O��H���G��H���?��H���[]�ATUS�G\�X�����H����~m�Gd9�fH���H��tgD�$Ic�H�����H�����u\�^A9�~+A�L$�Hc�)�H��H�H�L�DH�H��H9�u�H���D�ed�]\��[]A\����΋�H��t;�oEh�oMxA��o���o��HP X0�u����.���묻������AW��AVAUATUSH��(L�7�L$)�H�|$H�t$�L$I9��|��M��E1�A���\f��Cй���D��H)�H��H��H9��:A��L�����A�WX������0A�H9l$��A��A�����I��A�E�D$A�G����L��H�t$L��A�W ��A�GA9GtH�t$L��L��膈�H�L�����I�,A�WX����L�����A�WX���4���L���
��A�WX�KɍS�����HD�����L���߾
A�WX�SɃ�W��E�A�H9l$�2���D�l$�L$9L$NH�D$H�(D��H��([]A\A]A^A_�A��;����L����H��(�����[]A\A]A^A_�L��E1�머�����DAWAVAUATUSH��H�H�|$H�4$H9���I��D�b�1��f�L��H�4$H��A�V A��A�FA9FtH�4$L��H���F��H�L��D��L�<A�VXA��7wK��tGA�Eй�����H)�I��H��H��H9�rZA�,�L9<$v@A��A���t6L��A�F���v���D�+녉�H�|$H�H��[]A\A]A^A_����L����f�H�������[]A\A]A^A_�1���USH��H���H��$@H��$HL��$PL��$X��t@)�$`)�$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H��$(1�H�l$ H�SH�K(H��$L�C0I��H��H�D$H��$0H����D$�D$0H�D$ H�D$P�(��H���XZH�������H��H��1���H��$(dH3%(u
H���[]�譵�ff.�f�H�уJH9��JtH�G�@% = t�@H��1�H�5�Z����AWAVAUATUH��SH��(H�?L�rdH�%(H�D$1�H�|$H9��"A�~I��H��I���~L��A�V H�|$IcVA�ljD$A;VuwI9���H�|$H�SA��M��A��c�A��C������YA�G�����H�
U[Hc�H�>��D�?IcVD�|$���RL��L���7��D�|$H�SHc�H|$H�|$A��M�z����B�
I9�vEA�~�=L��L��A�V H�|$�‰D$IcFA;F�.I9��y�������-��������f�H�|$L��L��蠃�T$Hc�H|$H�|$��-��I9���A�~�RL��L��A�V H�|$IcV�D$A;V�aI9��8H�|$��?�jH�S9B��%�A��DH�}1�E�<$H�L$dH3%(�DH��([]A\A]A^A_�H��8�����B��I9�vEA�~��L��L��A�V �‰T$IcFA9F�����H�|$L9����������-�v���������l���f��������H���H�ـJH9��J�4������H�����tD��H�5bVH��1����H�|$������IcV�D$��u H�����������뉐L��L�����Hc��D$H|$���@A����D�IcF�T$���TL��L��衁�T$Hc�H|$H�|$��-��I9������A�~tGL��L��A�V H�|$IcV�D$A;Vu>I9��H�SH�|$9B�/D��A�π����f��IcV�D$����L��L�����Hc��D$H|$���>����H��T����A����DA����DA����DA����DA�
�u���DA�
�e���DA�	�U���D�B �DE��>���fDH����H�����H�L$H�|$H��L���������
����D$H�|$���DH�L$H�|$H��L�������������D$H�|$���D����߃�A��������f���fD�������������������������DATI��UH���S謁�H�EH��t1A�t$H��H��胞�Ņ�uA�T$H�;I�4$�S�I���[]A\ý������ff.��W�G��tF��t��u-1������D@����W��t1�������D��������f.���u�G��t4��������D���fD��u˃�������D��f���f.�ATHc�I��UH��SH��H)�H�襀�H��H��t9H��L��H���_��H����~$�U�H�H�TH�f��H��H9�u�[H��]A\�ff.��SH��H�?���H��[��ff.�H��|JH9R�Jt0SH��跄�H�����tH�C�@t
����t[�D��
H��H�5QS���1�[����ff.�AWAVAUATUSH��H�|$9�sI����D�yA���A	��D�eD9�tK�ۍCE��I��H�I�,�����u�����)�A��D��t�H�|$�������uA	�D�eD9�u�H��[]A\A]A^A_��AWI��A��AVA��AUATUSH��H��(9�wA��A��L�+M����I�E1�E�W��L�`��E����9�s2�4;��L6E;�v�"D�3��|	E9����9�r�s��A���t@�׉�E�^9�s4D�T=A��C�E9�w���B�L��<	E9���A��D9�r��)�<�<$��'�������<M��I��A�:E��tKE�CG��E9�r>A9�sE9�w4L��L�T$�t$�L$�T$����L�T$I�E�t$�L$A�:�T$A9�DG��|-�A�<�A9�DB����A�u���Z�j9�v9A��f�E�A9�r�A9�t'D��H�ljT$�T��H����I�E�T$D��E�eD�bA9�v#�A9�w�A�uH�����H����I�EHc�D�<(E;e��A�uI�E9�s"�9�r�A�uH���޾�H���uI�EMc�F�4 A9]��A�uI�E��w#���v�A�uH��蝾�H���4I�E�$�1�A�}wA�EH��([]A\A]A^A_É���Y�����D��A���iD�����DE�e�8����A�]�g����D������D��D��A�u9��n���)�D�$�C�,9�v5f��9�r�A�uH��D�D$D�T$�Ľ�H���[D�D$D�T$I�EIc�Ic�Ic�H�H����A;mv[I�EA�uA�m���D�$�D��A�|$E�SA���`���A�UHc�D�\$H�)�Ic�H��Ģ�D�\$E)�E)eI�E�����D�D$L�$�E{�L�$D�D$H��H��H����H��D�D$L�$�����e����UH�EL�$D�D$��w9f.�҃�v��U��H��L�L$D�$裼�H��t>L�L$D�$H�E��}w�EL�+1�1�I�EL�`E���I����������������3�������ff.��9�vH�F�@%@���$5���+���ff.�AWH��M��AVI��AUATU��SH��H��L�d$`L�l$XA�$��t9������wA�$�D$PE��+A�E1�H��[]A\A]A^A_�fD��|$PA9}��9������A��H�pH�$DB�H�|$hD�L$D��D�\$����H�$���H�t$hA�H�x(������x�M��D�L$�jD�\$�I�vD�$H�|$hD������H�t$hE1�I�~(������D�$���-�4����A�U�����A��ҍrA��I�A��A����Hc΋|�B�D���D)�����(Hc�	׉|�M����������P��I�����0�����Hc�)���A	D����D��������H�t$hH�(D�$A���������v���M��D�$�Z����H�t$hE1�I�~(������D�$���9����C�����������������9�s$H�D$hH�@�@
@��A�$��@H�|$hH�pD�$����M��D�$tԋH�|$hI�v�����D�$�DH�|$hD�L$H�$�m����H�$D�L$�ҍrA��I�A��A����Hc΋|�B�D���D)�������H�t$hH�x(A�D�$�������S���M��D�$����5����5����7����p����-���f.�AWAVAUATI��UH��SH��H�1҃����H��tuL�.E�uI��E��~eE�1��fDA���tz��A�WA9�tF�CH�E�|�Hc�A�L���9�r�A�L��H���l�����t�H��[]A\A]A^A_�f�H��L��H��A�[�����]A\A]A^A_�,���@H��1�[]A\A]A^A_��AWAVAUI��ATI�ԉ�UL��SH��8A��D$���H����D�D$ 1�A��D$$HcD$ L�t�A;��9�w�@	σ��xA;so9����ۍCA��D��I�A��A����B�H���I�D�D)ыx���t�L��T$��H�D$�t$�6���H�D$�L$�T$�x	ωxA;r��t$ �F��H��t$ �\���9t$$�C���9��.E1�I�](�%�A��A��Mc�B�T���D9|$�"G�4?A�FH��L�9�vЃ�A�L��H�������t���L$��A�������H��Hc�H�H�t�L�D�H�t$(D�>�s�t$$E;8��A9�r%�f�	�A���xA�A9���D9���E��A�GE��D��AI�A��A����C�H���I�D�D)ًx���t�L��T$ L�D$H�D$�t$���H�D$�T$ L�D$�L$�x�v����D$�������f.��������1�H��8[]A\A]A^A_��\$$9\$�������H�D$(9sI�}(A�L���e��u��\$$9\$~��D$M�u(�\D�lfDHc�A�L��L���L��C�H��T�����u�����A9�u��f���f.�H��8I�}(L����[A�]A\A]A^A_���1ۅ�t�A��DA	���D�x9����ۍC��E��I�������3H���I�D�)�xA��D��t�L��T$H�D$�e�H�D$�T$�x��AVAUATUL��SH��L�d$0H	�I�uAD	�u1�[]A\A]A^Ð1҃[L����H�����]��A\A�A]A^��fDH��H����H������u_H�D�+H��E��ubH��H���-��u�E��t�E1��C�6A�L��H��P��������`���A��E9�u��P���@H�D�+H��E��u�H��L��H��H���u����D��H��A�Љ�DE��������u[H��]A\A]A^���[L��H��]A\A]A^�*���f.�I�H���H����AWAVAUATUSH��8L�/H�L�L$A�}D�0L�D$I��H�D$ L�x�|$���������D$E1�D�E��t{D�t$ E��f�C�6�L$H��A����E�$�����1��fD9�w�UD9�w+��A9���Hc�A�L��CH�A�l�9�w�A9��!A��D;t$ u�1�H��8[]A\A]A^A_�D����1��DH��t��t�H��L���K����b�D$�D$��t�L�l$(L�d$�D$H�|$(�H��D�,����,�E��toH�D$ �P�H9�r`L��1�A��H���@�H�ЋT����L�A9�r6D9�r)D9�H�|$A�L��AG�A9�AC��L��� �����D9�u�I��D$�D$;D$�`������H��L���v�fD��A9�v89������H�t$H�|$A�D�T$���D�T$���u������@A���g����A9������H�t$H�|$D��D�T$A���D�T$���\���H��8[]A\A]A^A_�L��M��I��D��D�t$�D$���@AWL�GL�^AVAUATI��USH��H��x�oD�NdH�%(H�D$h1�L�jL�w(L��D��A��H�V(H�D$��A��tH�|$ �D�|A��D�<H��H�� u��t$1�L�\$@�D�|A��E�<H��H�� u�1�A�4!4H��H�� u�1�L9�t��4�tH��H�� u�E����L��H�s(��H��H9�u�A�}��A!�A��tpH��H��L��1�ATE1�L��L�L$ ����H�|$ ZY��tlH��t�D$����D$fDH�T$hdH3%(��H��x[]A\A]A^A_�DA�}tIM��L�D$D��L��������u��u5H�|$��u��D$H�{(M��tL�����D$�f�1��@A�}H�t$H�T$L��H�D$���H�|$H��t
�D$�6��D$H�|$H�|$����莚�ff.�AWL�^AVAUATI��USH��H��H��h�o�D�NH��dH�%(H�D$X1�L�jL�s(H�$E��A��H�V(A��A��tH�L$�D�|A��D�<H��H�� u�E��t#1�L�\$0fDD�|A��E�<H��H�� u�1�A�4	4H��H�� u�1�H9�t��4�tH��H�� u�E��tzH��H�K(�H��H9�u�A�}��A!�A��tXL��M��I��1�1�����H�<$A��E��tnH��t���H�T$XdH3%(D����H��h[]A\A]A^A_�A�}tIH��H��L��D��ATL��L�L$�m���A��XZE��u��u&H�<$E��u�H�{(M��tL����E1��A�}H�4$H�T$L��H�D$��H�<$A��H��t�9�H�|$H�<$�3���薘�fDAWAVAUA��ATI��U��S��H��I�X�L$H�T$(H�t$$L�$dH�%(H��$�1�H��S`�������t)H��$�dH3%(��H�Ĩ[]A\A]A^A_Ã|$E�A��A�������H��^o�A�E����E1�A��D	�A�EA��A����H�ډ�D���SX��u�D��D��H�M�,�D��A�u���t�H�<$�D$�!�A�u�D$���t$L�D$(�L$$���[H�\$0H�$D���D$4H�D$8H��H�D$@H�D$HH�D$PH�D$X��������E����H�4$H�l$`�D$dH�D$hH�D$pH�FH�D$xHDŽ$��xHDŽ$��
1�H�}(A������uH�$H��H������H��$�H��t
�D$����D$����H�|$XH���
����$����$���fDH�<$H�D$���H�D$�PA	�D�xA��A����H�ډ�D��SX��t�D��E��D��A��H�I���PD��t��@�������wE����E1���@	�A�EA��A��tlH��D���S(��~�H�ھD���SX��tE9��D��D����H�M�,���A�u���t�H�<$�D$��A�u�D$뗋T$��t�1����D$��t�{t�1҃{H�4$I�|$(��A��������������H�$D��L�������@A�E����E1�A��fD	�BA��A���y���H�ډ�D��SX��tE9��D��D��H�I��D���r���t�H�<$H�T$�D$��H�T$�D$�r�H�<$H�T$�D$���H�T$�D$�r	�BA��E9����H�ډ�D��SX��t�D��D��H�I��D���r���t�뤽�A	�D�xA��E9������H�ھD��SX��t�D��A��D��A��H�I���PD��t�H�<$H�D$�O�H�D$�P�H�<$H�t$h�1������H�$H��L���������H�4$H�{(E1���������
��������������9��f�AWAVAUATI��USH��HH�H�idH�%(H�D$81�H�AH�\$0H�$H9��"�}I��I��I����L��L�L$H��H��U H�\$0L�L$A��HcE9E��H�I9�HG�H�\$0E�t$I�$A�D$A��]��A��-�{H�$D9p��A��[���A��&��H�$�@@�^I9��UL��L�$H��H��U L�$��&�8H�\$0A�$�f��}D�3uH���S���DL��H��H��L�L$�a�L�L$Hc�H\$0�)����1�H�L$8dH3%(��	H��H[]A\A]A^A_�DA�$�I���fD�@
 ��I9��7	�}�L��L�L$H��H��U L�t$0L�L$���E9E��Hc�L�M9�IFލA�H�\$0A�D$A�L$��H�^H�8Hc�H�>��DA�$��[���fD��K���fDH�$��D$��3I9��*L��L�L$H��H��U L�L$��:�H�|$0�EH�|$I�|$9E��L9���H�\$H�H�H�\$0L9����L��L�L$H��H��U LcuD9u��L�L$t#L��H��H��L�L$�D$��_�L$L�L$Lc�Iރ�:��H��L��L�L$H��U ��]tUH�4$L�L$;FtM9�vBL���f�M9�v/�E9EtL��H��L��L�L$�p_�L�L$H�I�I9��D���H�D$H�D$0f�H�$�@@tfA�$H�\$0�������I��H���}����L��H��L���L$L�L$�^�L$L�L$Hc�H\$0���H�5U�L���q��H�\$0A�$�p���I9�����L��L�L$H��H��U L�L$��{H�$��t� �����1�H�|$0I��L���������H�T$0�A�$A�D$H9�H��D�A�D$����A�$�I�D$����I9��9���H�$�@@�+���H�|$0I��L�κ��������H�T$0�A�$A�D$H9�H��D�A�D$��W���A�$�I�D$	�<���H�A�$I�D$�����H�$�������H�|$0H��L��L�t$0���=��mH�\$0�A�$A�D$L9�D�A�D$����H�A�$I�D$����H�	A�$I�D$��s���I9�����L$H��L��H��L�L$�U �L$��{�D$,�UH�$�@�GE1�H�\$0��P�EA��9EL�L$H���wI9���A�$�E�t$��fDH�$�@�W���H�A�$I�D$����H�$�@�(���A�$�I�D$���A�$�I�D$�z���I9����L��L�L$H��H��U L�L$��{����H�$�8�����H�|$0�E9E�TI9��F�H�|$0H��L��L�$�H�HD$0���A�Ņ��rH�|$0L�$L9�s1L��L�$H��U H���D$,��UXL�$��t�|$,7�)HcE9EtL��H��H��L�$�Z�L�$H�H�|$0H�H9�����L9������L��L�$H��U L�$��}���H�|$0�E9E��I9��F�H�A�$H�E�l$�A�D$�(���H�L$,H�|$0L��L��L�t$0�>���������D$,A9D$�g���A�D$H�\$0�A�$����M9�vHL��L�L$H��L���U L�L$��]u-�E9EtH��L��L���Y�A�$H�\$0�����E9EtL��H��H��L�L$��Y�L�L$H�H�I9�������O���H�|$0�E9EuGI9��F�H�A�$H���%���H�|$L��H��L�L$�cY�H�\$0L�L$�"���H��L���IY�H�|$0�1���H�5{-L�����H�\$0A�$�����@�����H�|$0�E9E��I9��F�1�L��I��L�$H�|$0�H�HD$0�x��L�$��A����H�|$0L9�s*L��L�$H��U H���D$,��UXL�$����HcE9EtL��H��H��L�$�zX�L�$H�H�|$0H�H9������L9�����L��L�$H��U L�$��}�e���H�|$0�E9E��I9��F�H�A�$H�E�l$�A�D$���������l����/��L��H��L�L$��W�H�|$0L�L$H�A�$H�E�t$�H�\$0L9��\���H�4$�F�N����}��L��L�$H��H��U L�$H�|$0�D$,�EH��9EulI9��F�H�Hǃ|$,^H�|$0�t���1�A�|$H����A�D$A�$���L��H��L�$�$W�L�$���L��H��L�$�W�L�$�	���H��L���V�H�|$0���f����,����W����o����M����-����C����8����9���H��L���V�H�|$0����H��L���V�H�|$0�s������H�=�]J�@���ff.�����]J�D�����D�1��=�]J�f���SH��H)�H��[�fDH������[�f.���H��H�=r�I�}u�ff.�f���H��(dH�%(H�D$1�H�4$H��H�T$H����j�H�L$dH3%(uH��(����f.���AVI��AUI��ATI��UH���SH���W�L��H��L�0H��H��L�h�"R��uH��[]A\A]A^ÐH�߉D$�$f�D$H��[]A\A]A^���AWI��AVM��AUI��ATI���(UHc�SH��L�L$� W�H����H��L��H�<�L)�kH�CA��k�C��V�H�C H��thH��L��H��襞�I�FHL��L��x���H��t5H�SH�H��H��H�|$H��tm��uH��[]A\A]A^A_�H�;�Ie�H�{ �@e�H���8e������Ѹ������f.���SH��H�XH��t1�H�5�����g�H�{XH��t�O�H�CX1�[����H��8H�OXdH�%(H�D$(1��D$H��t-H�GHH�4$H�5X��H�|$H��H�T$H��H�D$ �~g�D$H�L$(dH3%(uH��8��Ѓ���H�XH��t#H��H��H�5U���@g�1�H���f�1��ff.�f���H�WX1�H��t�B�ff.�f���1�H�~XtCATUH��H��SH���!a�Hc����I��H��t"H��H�5���H���ox��uL�eX[]A\�f�ø������L����M�������f���US�'���H��H�XdH�%(H�D$1�H�$H��t(H��H���K�H�$H��t�X��t=��t(H�@ H�EH�L$dH3%(��u(H��[]��H��H�E��fDH�E���i��f���SH��H��dH�%(H�D$1�H���<���xEtcL�$��tU�P�Lc�H��t+Lc�H�{K���Hc1H�<��H��u��H�����u�C��H�\$dH3%(uH��[�DA���������ǁ����1��G8�t�SH���w_�¸��~H�SP�B�t	�C8����[����H����ATUH�-�)SH���;	w�HcD�H�>��H�{(��a�H��[]A\��a�H�{��G�H��[]A\��a�H�{��G�H��[]A\�a��C��t�H�{H��t�H�C H9�u��DH�{(H��t��j����H�{�G�L�cH���[a�L��M���J���[]A\��f����w�����SH��H��1��g�H��tH��u�f�H��H�SH��u�H�C[�ff.���UH���8SH��H���R�H��t�	H�hH�XH��[]�ff.��H�:��AWAVAUATUS1�H���@�ÍCHc�L�$�M��u����Hc�I��I��A��H�,��+D����S�I�H��t2H�E��M�'H�����tzH�}L��E��t��Y��S�I�H��u�HcÉ�H��H��I�lI�D�H)�H�ÐH�}H���F�H�EH9�u�L���E�H�������[]A\A]A^A_�f.�H��1�[]A\A]A^A_��1��DUH��SH��8�ydH�%(H�D$(1�H�T$H��H�BH�$H�D$ H�AH�t$H�5�H�D$H���P@�Å�u:H�t$H��tH�}�g��H��t.H�E��H�\$(dH3%(u)H��8[]�DH�|$�&E���H�|$������E����N~�ff.���S���8�P�H��t�������XH�@H�P[�ff.���������AW1�AVAUATUH��SH)�H��(H����L�GH�OI��I��HcGH��M��I)�N�d=��~yM�l$L9�}uH�C I�|$H9���L�L$H���H��H���$��L�L$H��H����J�|=L��L���cY�H�kL�1�D�kH�kH��([]A\A]A^A_�I���L��L��L���,Y�H�k1�L�H�kH��([]A\A]A^A_���N�L�L$H�����fDL�L$H�L$L�D$�N�L�D$H�L$H��H��L�L$t-L��H��H��L�L$�X�L�L$J�|=L��L���X��=���������D���fDATI��UH���8S�LN�H��H��t,�H�@ L��H��H�@�H��H�CH�C�Z��uH��[]A\�H��1���B���@UH��H����SH��H��dH�%(H�L$1�H�\$H��P0��xH�H��H��H��Z�H�L$dH3%(uH��[]���{���UH�o SH��H���G��tH�H��t
H9�t�5\�H�kH�kH�CH��[]�ff.���ATI��UH��SH���Z@�L��H��H��[]A\�Z����������AWE1�AVI��AUI��ATUS��H��(L�!L�y�T$H�iI�|$dH�%(H�D$1�M��t��A��ƒ>��8��x�|$��H����+<��u/E1�H�L$dH3%(D����H��([]A\A]A^A_�fD�M��A��uƋD$1��?H�\$�0�H�H��H���Y���IA�O9L$�A��I�D$D��H��A�<�H��P0H�E��u�H�4H��萓�H��H���$�H��f�H���D�D$�Q;�D�D$��tH�E����E������I�D$A��x7���w/�о��E1�����H�	t������E�����@E1�H�}(��L������A���DN����fDL�����:�A��A�Gt
��A��E��I�|$�`���I�] 1�H�����H�I�E H�H��t3H��I�E �O���fDH��D$�?�D�D$�6���f.�A������!�����x���AWAVAUATUSH��L�'H�|$I9���I��I��1��wL��L��L��A�V ��A�FA9FtL��L��L���9H�H�L����M�<A�VX��tI�Cк���H)�H��H���������H���H��H9�rC�D��,CM9�vOM��A�F��u�A�$�@��H�L$L�!H��[]A\A]A^A_��H�������[]A\A]A^A_�@��M����1��DAWAVAUI��ATUSH��HH�?L�!H�T$dH�%(H�D$81�I�H�|$0�X��H9�r9���aA�H�L$8dH3%(D����H��H[]A\A]A^A_�DH��I��M��L���uA�T$ �P؃����|�I�H�|$0H��H�|$�yh�A��=���OL�L$0E1�M9M�AL9���A�|$��D�T$ L��L��H��D�\$A�T$ L�L$0D�\$��IcD$A9D$D�T$ ��L�L9�IF�I��L�D$0��,��E��u{L�L$0E��A�L9�vhA�|$�TD�T$L��L��H��D�\$A�T$ L�L$0D�\$��A�D$A9D$D�T$��I�6���L9������#�������A������z���DA�|$A�	M�A�F���L��L��H��D�T$,�L$(D�\$ L�L$�E�D�T$,�L$(H�HD$0D�\$ I��L�L$�����L��H��L��D�T$ �L$D�\$�DE�I�6L�L$0D�T$ �L$�D�\$��H�I�<H�|$0��tc9N�>���H9��5���A�|$��D�T$L��H��D�\$A�T$ H�|$0D�\$��IcD$A9D$D�T$�H�H9�HG�H�|$0��}����A���t	E9��?H�D$�D�XD�xH�D$0I�E�8���I��@�����A�E1����DI�H�|$H��D�T$(L�D$ D�\$��e�A��=����L�L$0L�D$ D�\$D�T$(M9�tE1�����f.�A�����E�����������@A��������DA�D$A�	���f���I�6������fDL��H��D�T$ �L$D�\$�C�D�T$ �L$Hc�D�\$H|$0����A�7����.���A�|$�u�H�����A�6��������s�ff.�f���H��I������H��Hc�������x`��x\H�H��$H�@H�A�<�wl��H��Hc�H�>��f�H�I�pI�@H�����A�@H�F�FH���@H�FA�@I�@H�����I�@H�FH��H���9�fDH�FA�@I�@H�I�@��I�p�f.��oA�oNAH�oV AP H�F0I�@0�f.�H�FA�@I�@H�����I�@�c���ff.�f���H�W8H�O@�AWAVAUATUSH��H��HM�hL�6H�t$H�L$ L�D$L�L$(dH�%(H�L$81�A���(�|���4��<����{�}�E�L�t$0I9��$A�E����L��H��L��A�U A��A�EA9EtL��H��L���0A�H�I�A9���L��D��A�UX�D$����A��-�MDŽ$�L9��}�@L��H��L��A�U A��A�EA9EtL��H��L���@�H�M�<A9��	A��)���T$��tL��D��A�UX����D$L9���M��A�E��u�E�&�D��'�E��������$��rA�)���L9�wS��f�L��H��L��A�U A��A�EA9EtL��H��L���?�H�L�A9���A��)��H9���I��A�E��u�E�>�D�>�C���fDE�>�c�����|$�LA9����D$��u|H�D$ E1�L�0H�D$L�8H�L$8dH3%(D���/H��H[]A\A]A^A_�I��H�D$H�|$L��D��H��}h��H9�LF�����)���fDH�|$0L��L���`�H�L$(���������$���P���@I��A�)����D�D$�����$�A�)����p���L�t$0DŽ$������D$����D��L��M��A�UX��E�A����(���A�)�������M������A�*�������A�8�������fn�fDATI��H��USH��H����O�H��H�=�:JH�,I�D$H��PP��x
H��[]A\�@H��H�ډ�L��D$�g�D$H��[]A\�ff.�@ATA��UH��H��SH���{�����xI��D��[H��1�]��A\�1���[]A\�ff.�ATI��UH��SH��H�����H�H��t;1�L��H��H�������uH��[]A\�DH�;�D$�$4�D$H��[]A\ø������ATA��UH��S����Å�uMA��+tUA��2t1������A��*t�������[]A\�fD��1��ϱ��H��t&H�UH�PH�E��[]A\���������λ������ff.�f�AWAVAUATUSH��L�'L�jH�<$H�T$I9���H��M���P�L��H��L��A�U A��A�EA9EtL��H��L���(<�H�I�A��}t\A�G؃�v#A��{A��vH9�vI��A�E��u�E�>�f�H�$�!���L� H�|$L��L����"e�H����[]A\A]A^A_ÐL��L��L��A�UP��H�$��y	L� �@H���M��!���뭐AWAVAUATUH��SH��A���H�|$H�t$(��H�L$dH�%(H��$1�;�BJH�H�A����]H��L��L��H��M��L���(���D$@A�Ń���E����A��u{H�D$L�s0L�kL� M9���A�E���?L��L��L��A�U ��A�EA9EtL��L��L��L$�:�L$H�Iă�]u�H�5rH��A��!����E����H�T$H�H����H�D$E1���H�D$�D$|H�H��$�A���YH��$��D$DH�D$HH�D$0H�D$ A���pH�
�D��Hc�H�>��@D�UA�E1�H�CD��D�T$8H��P(����1�D�T$8����H�T$xSE��L��H��$�PH��$�PQL�D$@D��H�|$(�c���H�� A����E���
D�mA���S����|$|���AH�|$0H��toL�|$H��L������A�Ņ��BI�(H��t���M���ML�|$HH��L��L�����A�Ņ��^I�~(H����赺��H�D$0M��H�D$H�T$�t$@�B���j���BM��tA�N�B�D$ ����tfH�C�@
t\H�D$H�x(�_H�C1��
H��PX��t7H�C�
H��P(��H�D$�q�@	��H�D$�H@H��$�H�t$E1�H����fDH��$dH34%(D���IH��[]A\A]A^A_�@A�����H�T$H�D$H9tH�x(H��t蝹��M��t�H�D$(L90t�I�~(H��t�耹���fDL��$�I��M��H��H��$�H��$�L�����A�Ņ��$H��$��g.�H��$��Z.��k���DD�D$|E���bH�|$0�D$|��L�d$H�|$0H��L�����A�Ņ��$���I�|$(H��t�ϸ��M����H�|$HH��L�����A�Ņ��8
I�~(H��t蝸��H�D$�D$D�@H�@H�@H�@H�@ H�@(A�FI�FI�FI�FI�F I�F(L��$��@L��$�L�cM9��L��L��L���+�����D$P�L��H�\$8A�L�ӉD$X��D�H�KL��L��L���v���jH��H�GH9�u�H�\$8M9�v`�H�\$8L��M��A���I9�v>L��L��H��A�U ��:����]t#A�EA9EtL��L��H���p5�H�H�A��u�H�\$8H�5ՙH��E1�E1����H�ED�UH��$��[���fD��UI�؋uH�|$�� ����A�Ņ����M��t)�u��t!��UI�؁� L�����A�Ņ�������D$|������uk��$���t_�����T$xH�t$A��ҍB��I������Hcȋt��:D���)������H�|$H�	։t�M��tA	T�f��D$|L��$�DŽ$�H��L��L��H���D��A�Ņ������:���@�}�����H�CH��P(A�Ń������	���1��ME1�H�T$xSE��H��$�PH��$�PVL�D$@L��H�|$(蝻��H�� A�Ņ������H���f�H�S�M�B��t�u�t$8���J1��fD�D$|�����������gL��$�H��L��H��L���Q��A�Ņ��L�����t"��tH�C�@
��
H�5�H��语��E1�A�-A�� ���L��$�H��L��L���b���A�Ņ�������UH�|$1�I�؉��s�����L	A������M�������UI��1�D������A��������D�}^�����D�UE�����H�t$H��L��H���f���D$@A���B���fD�ۦ��H�T$(H�H����I������f�L��L��L��A�T$ ��^�L��L��L����'�������-���D�������T$xH�D$A�H��H�x(���r���A�Ņ�����M���N����T$xI�~(E1�H�މ��I���A�Ņ��.���H�D$H�T$H;�����H�D$H�x(H����������@��e���fDH��$�H�|$H�����A�Ņ������H��$�H����H��L������H��$�A���(�H��$��'�E����������f�H�T$xSE1�1�L��H��$�PH��$�P��$�PL�D$@H�|$(艸��H�� A�Ņ��X������DL��$�H��L��H��L�����A�Ņ���������T������<�����$��M�D$|�����H��$���$H�t$`���'A�L�t$PL��$�I��D�l$XM���;H�S���$�t$8A;v��A�F��B��,I��D9j��H��L��L��L��D�������y�L�t$PA��E������A�$���fDM��t)H�D$L�t$HL��$�H�D$0H��$�H�D$���H�D$H�D$0H��$�H�D$H�D$E1��D$DL��$��@H�@H�@H�@H�@ H�@(���@M��I��H�\$8A�T$A�D$9��{M9������UL��L��L��A�T$ A�T$��A;T$tL��L��L��L$8�.�L$8��]����A��������I��L��L��L��A�
H�\$8L�T$`�j�A�L��L��H�
�H��H�D$8�o��u��D$XL�T$`1�I�؋T$PH�|$%`A�rL�T$X= �D$h���L$l���A�Ņ���M��L�T$XtA�r����t�|$h ��IcD$A9D$��L;|$8vHc�HT$8H�T$8H�I9�HF�H�D$8H�D$8H��$����DH��$��k$�H��$��^$�����f�L��L��L���B-�H�I�M9�����A�T$�h����L$l�T$PI��L������A�Ņ��J���@E������A���������A�D$A9D$tL��L��L����,�H�L��L��I�L���"��������D$P���DH��萮���T$xH�t$�ҍB��I������Hcȋt��:D���)�����D�UH��L��H��L��$�L��D�T$8�V��A�Ņ��Q��D�T$8tD�L$DE1�A�E���?�H�5�H��D�T$8E1�裦��A�D�T$8��H�5`H��脦��1����A�������A����E��D�l$XL��L�t$PE��BD9���D�RD9�t)Ic�H��$D�L$8H��+�D�L$8A��A9��lE9���A����H�CH��$H�wH��P �A����E��L��A��D�l$XL�t$P�t���A��D�l$XL��E1�L�t$P�\���H�T$xSE1�1�L��H��$�PH��$�P��$�PH�|$(L��$�趲��H�� A�Ņ��v����H�D$`H��$�A����D�l$PL��$�L�t$8E��fDH��L��L��H�����A��E9�u�L�t$8D�l$PE1�����A�M���H�T$��BM����A�f��B�D$ ����L�l$8L��L��L���*�H�I�IcD$L�l$8A9D$�b���L��L�d$8L��L����)�H�I�L�d$8�T���E1�D��$1���A�����H�D$0�T$@�@��t\H�t$0���FH�t$��H�D$H�D$0H�D$H�T$0H;���H�D$0H�x(H�������A���G�A������<�H�T$0��B��A������W�H�D$0L�t$HH�D$�U�H��H�@H�V(������H��H9�u����A�2����_���A������
�E��E1��5���H�x(A��
H�޺
�}���A�Ņ��������X�H��蠪���[�ff.�AWAVAUATI��USH��hM�pH�t$I�pH�T$0L�D$ dH�%(H�L$X1�H�
H�t$(H�L$H�L$PH�L$H��(��������<����{�}�E�L9d$�,A�~��H�|$L��L��A�V H�|$PA��IcFA9F��H�I9�HG�H�|$PD9���L��D��A�VXH�l$PA�Dž����D$8A��-uH�l$HA��D$8����@L���D$�H��L��L��A�V H�|$PA��IcFA9F��H�I9�HG�D��H�|$P���)��A9���A��-��E��t%D��L��A�VXH�|$PA�Dž��A�H��H��I9��[A�~�h���A�~D�mH�}t�H��L��L����&�Hc�D��H|$P��H�|$P��)�o���fDA�����T$����D9���A�EՃ���A��-H�L$PA��E��G�l-�I9���A�~��H��L��L��A�V H�L$PA��IcFA9F��H�I9�HF�H�L$L��D��H�D$PA�VX���H�L$L��L��H�L$PH�L$PH��H�L$�G�H�L$���EA��H�t$H�|$P�F0I9���A�~��H�L$L��L��A�V H�|$PH�L$A��IcFA9F�nH�I9�HG�H�|$PD9��~E����H�D$H���@,����'�E�����H�D$A�~D�(H�x�F���H�|$L��L���%�Hc�H|$P�)����D$)������I��D�D$)���H�T$�t$L��H�|$ �"N�H�D$�@,H�\$XdH3%(�D$�H��h[]A\A]A^A_���D$���E���3H�|$HL��H���F�����u����D$81�H�t$�|$H�\$P�‰V,���yH�T$ �R\�D����H�T$(�B t.H�L$ 9A\��H���L�qhHc�H��ID�H�<���H�t$��F(�F�FH�D$0�D$H�����A��D$8����D�>�w���fDH����H�D$�D$8����@,�����)�?���fDI���D$(����h���H�D$H�\$P�@,H�L$PH�D$ H�t$H��H�xH�db���`H�t$(L�T$PD�^A�� t=H�l$ �P�L��M�L��}\L�Eh�Hc9�yH���H��ID�H�<�tdH��I9�u�H�T$��B(��t$A��uH�t$�FL�V ����f.�H�T$�BA��B���f��D$0������A�~D�H�A�(���H��L��L��D�T$<H�L$�5"�D�T$<H�L$H�HD$P����L��L��H�L$�"�H�L$Hc�H|$P�z���fDH�D$�D$*����@,�����A�~D�/u�H���@���H�T$H�|$ H��'����J��D$'���������Q��D$����I�����ff.�AWAVI��AUI��ATUH��SH��HH�L�yH�4$L�adH�%(H�D$81�H�\$(H9��,A�A�A�FI�^��H��L��H��A�W H�\$(��IcGA9G��H�H9�HG�H�\$(A9L$��E�\$A����H9���A�I�^��D�\$L��H��H��A�W H�L$(D�\$A��A�GA9G��Hc�H�H9�HF�A�A�H�\$(E�NA�F��U�=
H�a�Hc�H�>���A����H��L��H��L$� �L$Hc�H\$(H�\$(A9L$�*���A�NA�F��u4A�H�<$H�H�|$8dH3<%(��
H��H[]A\A]A^A_��A�$��t7A9L$��A9L$�9A9L$��A9L$ ��A9L$$�2��	��s��H�5�Hc�H�>��H���C��������A��N��������A��6�������?A���������A��������@��A��������DA�����@H�$I�}(H98�7A���������$A����@A�E�@���A����DA�EuR�3@H��L��H��A�W H�\$(��IcGA9G�6H�H9�HG�H�\$(L��1���A�WXH�\$(������H9�����A�u�A����H�������4A����@H9���L��H��H��A�W ��?upA�D$thH�\$(A�GA9G�rH9���1�L���A�WX���XL�D$(I�EL���@�LH9�vL��H��H��A�W ��P��H�\$(A�$����	H�\$(A��B������oA��.������uKA�����H��L��H��L$���L$Hc�H\$(���DA�������A�
�
�����A�EA�	���������A�F�	����A������1�A�EA�	����A�F�	�]���fDA���F����H��L��H����H�|$(H�H�H�|$(H9��q���L��H��A�W ��#��IcGH�\$(��tH��L��H��A�W IcGH�\$(A9G�PH�H9�HG�H�\$(H9���A���H��L��H��A�W H�\$(��A�GA9G�,A�T$H9���9�t���)u��+���H�����A�
I�FH9��H��L��H��A�W H�\$(��?�GH9���L��H��H��A�W ��+��H�\$(A�I�F �
���H�A�
I�F�f�H�����A�
I�F�k���fDI�MH�|$(L��H��M�E����������H�\$(�:�������A����@H��JH9�!J�qI�E�@�>A��]���A���L���A�$L�D$(%���01�A��0H�|$(L����H��L�D$���^���=��HH�\$(L�D$�A�A�FL9�D�A�F�����A�$ ���A�����A�$����
A����A�$�-A����H9���A����H9��`A��x���H9���
A��g���A�$��@�!A��R���A�$� ��A��;���A�$��>A��$���H9��cA�����A�$��qA����A�D$��A����A�$�f���A�����A�$� �`	A����A�D$ �FA����A�$���	A����A�D$��A�����A�$�� �_A��j���A�D$��A��V���H�|$(L��H��D�L$H�L$(H�L$�9�H�L$D�L$=��z
A�$�l
A�U\9�}	��	�[
A�D$ t&9��(
I���H���
Hc�H�<��

A�FH�\$(�A�A�FI�F(���A�$�@�1
A����A�$��L
A��}���A�$�� ��A��h���A�D$��
A��T���A�$��B���A��A���A�D$@��A��-���A�$��H
A�����A�$��@�
A�����A�D$���A����A�$���A�����A�$�@�nA����A�$��@��	A����H9���A����H9�v D�L$L��H��H��A�W D�L$��{�-
1�D��H�5��L��軏��H�\$(A��U���A�$��DA��>���A�D$�
A��*���H�L$(H�|$(L��H��H�L$0�ِ���������D$0A9F�~A�A�FH�\$(A����A�G���ulA�T$H�H�H�\$(9��;���H9����A���H��L��H��A�W H�\$(IcGA9G�����H��L��H���c�Hc�H\$(���fDL��H��H��L$�>�H�\$(A�T$�L$�t���A�� ���������4���fDA�u�H���I���A�1�����f�H�������A�$�����IcG��tH��L��H��A�W IcGH�\$(A9G��H�H9�HG�I�F A����A�T$A�H�\$(��tR���6IcG��tH��L��H��A�W IcGH�\$(A9G��H�H9�HG�H�I�F A��;�� �����������1�H��KH�5��L���h���H�\$(A���A���H��L��H�����Hc�H\$(�)���A�D$	������l���D�H��H��A��3�H��L��H��D�L$D�\$H�L$��D�L$D�\$Hc�H�L$H\$(��H��L��H���Z�Hc�H\$(����A�H�\$(��N�� ������)���A��8�H�|$(H9������L��H��A�W �ƒ�R�D$����&����NL�D$(I�UL���B�t����|$0t���A�GA9G��L9���H�I�<H�|$(H9���L��H��A�W ��)��L�D$(A�GA9G�IL9źF�H��D$$I�H�\$(H�\$0H�D$0I�^A�H�\$(I�F �D$$A�F,A�F(��:�H�L$(��H�L$0H�t$(ARH��PL�ÿ(M��L�L$4���A[]��y����B�)������L��L��H�����L�D$(�	����|$&u�A�GA9G�bL9źF�H�HD$(1�L�D$(�u���I�E�@@�1�L�D$(A�GA9G�@L9��J������s�A���[�@A�H��I�F��=�A���,�A�	�	A�F��A����A�EA�	A�F% A�F�	���A�����A�D$�tjA��KD�\$H��L��H��A�W H�\$(D�\$��A�GA9G�/H9ݺF�H�HD$(��{�9H�\$(H�\$(H9���
A�D$����H�\$(A��?�L��L��H����L�D$(H�I�<H�|$(H9������A��O
L��H��A�W L�D$(��A�GL��A9G�@
L9źF�H�M�<L�|$(��=�>
��>�b�H�L$0H�t$(PH��jM��(L�L$4���ZY�����H�D$0A�M�~I�F �D$$A�F,A�F(H�\$(A��f�H�	A�I�F��G�L��L��H���"�L�D$(���������,�H�A�I�F���A��0��A�GA9G��L9�F�H�I�A����A�
�
���L��H��H��A�W ��{��H�\$(A���A�EA�	A�F�%�= ����A�F�	�u�I�MH�|$(L��H��M�E������\�H�\$(�����b���A��9�A�	�	A�F� �L��H��H��A�W ��{A�$��� �=H�\$(A����A��I�F���A�D$@�A���A��I�F	��A�A�H�L$(���J�A�GA9G�H9ͺF�H�HD$(H��A��k�A��I�F�R�A��I�F�9�A�EA�	A�F@%�= ����A�F�	��A�	�	A�F���A�	�	A�F����@A�H��I�F���A�D$�*A���A����A�EA�	A�F% A�F�	�m�A���\�L��H��L���7����A�D$����H�\$(E1�A��PA�GA��I��A9G��H9���A��E�n��A�<$�@���H�|$(A�GA9G��H9��F�H�|$(L���H��H�HD$(����A�ą���H�|$(H9�s)L��H��A�W L���A�ʼn�A�WXA��7w���hIcGA9GtL��H��H���L�H�H�|$(H�H9�vH9�rA��G�L��H��A�W ��}u�L�D$(A�GA9Gu@L9źF�H�A�I�E�f����o�����L��H����
�����L��L��H����
�L�D$(�I�Uh���0������H�|$(M���H���0������|I��H�T$(�A�A�FH9�H��D�A�F��l�L��H��H���G
������-����V�L��H��H���*
�L�D$(H�A�I�E�n�H�\$(H9���A�D$��A�t^H��L��H��A�W L�D$(A��A�GL��A9GuLL9źF�H�I�L�D$(A��^tA���1�A�~L����A�FA���A�GD�#I�؃�t�L��H��H���r	�L�D$(�A���H��L��H��A�W H�\$(A��A�GA9G��H9ݺF�H�HD$(A��<t3A��'t-1�H�5z�L��H�\$(�y���H�\$(A����,�����H�T$(M��H��L��D���<������H�\$(A����A�GD�#��t�L��H��H�����u���1�H�|$(M���H���0������H�T$(�A�A�FH9�H��D�A�F��o��@�^���H�|$(A�GA9G�/H9��F�H�|$(M���1�H��H�HD$(�~��A�ą�����H�|$(H9�s#L��H��M�oXA�W L�����A�Յ�����IcGA9GtL��H��H����H�H�|$(H�H9�v	H9���A���A���D�\$H��L��H��A�W H�\$(D�\$A��A�GA9GI����H9���I��A��'t
A��<���D$$����1�L�T$H�L$0H��M��H�t$(AWD��jL�L$4�:��ZY���.�L�D$(L�T$H�D$0A�^,L��A�I�F �D$$M�VA�F(����D�#A�GH�\$(I�؃�tL��H��H��D�\$��L�D$(D�\$H�M�L�T$(A��<tA��'t1�H�5�L������A���D�\$�D$$����I9���L��H��L��A�W L�D$(D�\$��0tR��+uIA�GA9Gu/L9źF�H�HD$(L�D$(��|$$M����������L��H��L������1���A�GA9GuqL9���A��(����1�A��<��A��{uA�}A9�u�A�GA9G��L9źF�H��D$$1�M�L�T$(M��L�T$0�r���L��L��H��D�\$�e�L�D$(D�\$H�I�L�D$(I9��h���D�\$L��H��L��A�W A��(D�\$tqvYL�D$(A��<�V���A�>�W���1�1�A��'����D���L��L��H�����L�D$(�J���1�A�)����1����A��'uA�'L�D$(����L�D$(��A�����8�����L����|$A�WX��t1���D$L�D$(D�X�L��A����I�E�@���A�GA9G��L9�v'H�I�<H�|$(H9�sH�L$L��H��A�W H�L$A��H�L$L���D��A�WX�����|$-H�L$uH�L$(H�\$(H�L$0M��H��H�t$(W�(jL�L$4��AXAY�����H�D$0I�^A�H�\$(I�F �D$$A�F,A�F(���L��L��H��L�D$D�\$�y�L�D$(H�L$D�\$����I�^A�WA9Wu1�H9�sHc�H�H�\$(�h�L��H��H���2�H���L��L��H��� �L�D$(�E�A�L���"�L��H��������L��H��A�W ��}�?���L�D$(A�GA9G��L9źF�H�A�I�E�f����A���A�G�I�������L��H��L$��L�D$(�L$��H�T$(M��H��L���(���������p�A�G������L��H��H�߉L$D�\$�+�L$D�\$��H�T$(M��H��L���{D�\$�`��D�\$�������L��L��H�����L�D$(����fDAWAVAUI��ATUSH��H��dH�%(H��$�1��H�9�t)���@A��H���I��M��Hc�L��H�>��1�1��'���D�I�EH��$�dH3%(D���"H��[]A\A]A^A_�@I�A�@�d!D�vE��uyH�{I�7�ʹ��I�EH��u-�_	������SH�uI�}������H��L��L��H���V��������u�H�sI�I�}������CH��$���$�H��$�H��H�D$�9���H���0�HA�L�|$L�|$I�E�\fDH9��C�A9���H�t$H��L��H�������xU����CI�}I�WL����$����x.A��H�U�BD9��I�MH�qH�y;Bt�����fDA���h�����t��I�EH���E1�H��L��L��H���*��A�����/���A�A����"���1ҋsA���{���~t��I��H�����K �HH�I9B��M�MA��������<L��L�T$L�L$����L�L$��L������L�L$L�T$��������H�U�B�ML��L��L�T$��L�T$�S$��t$�L�T$�s��L�T$H����#L�PI��M�U��fDL��L��H���
��A���������D$�s��I��I�EH����D�L$1�1�I��H��D��������w���D�SD�L$E��tA�NA���|����E�r���H��L��L��L���O���A�����V�������I�AM�AH�|$H�t$�HI�L��L�|$L�L$ H�D$(H��A���@fDH��L��H��S HcKA��9KtH��L��H����Hc�L�l
E9��	L��I9�w�L�l$H�\$L�|$H�l$ L��M���H�|$(L��H�T$����H�T$H��I�E��I�E1�����H�t$XH�����A�ƅ��(I�u�F�zH�F(H���H��8�a�H;H�U���w�Ⱥ����H��T������E�E1�B�T��th�z������������UUUU��%UUUU�8�����3333%3333Љ����%Љ�����%�������B��I��I�� u�����L$��H���0��H�|$X�&��1�1��ݯ��A�����I�EH��������L$H�u���H�9M�qD�T$H�|$HI9��+A�L��L�ƉD$A�V D�T$��?��D�uA�ƀ�Y��o��H���^
D�pH��I�E�>q��A���D$D������I�ED�HI�}��L�t$HH��L��H��L������A�������I��H�|$XM��L��H���"A�����eI�EH�T$X�8��H�PI�M�A��������H�D$HE1�I��;���fDD�v(E��x�N,��tA��A���E\E�tE����H�K H�S�8H�L$H�T$��H����H�T$H�L$D�pE1�I�EH�
H�@ H�PH�H�EX���D�F��	�!����A������������E�8D�v% �D$�4��H���k�L$D�pE1�H�H�0�HI�E�<�����~����I�EH���+�SE1��P����DI�A�@���������1�1��X���I�E����1�1��?���I�EH�����SH�uH��胭��A����������|���I�AL��$��
L��H��P0A��������H�EIcɿ
I�4H�L$H��P0A���������H�L$Hc�L��H�L�诬��I��H����H�zm��H��H�D$H���!H�E�x��
H�y(�
�
H��A��O�������H�E���tYH�D$A���H�L�H(L��L�L$��������L�L$A��) H��( L����������H�|$1��5=�H��H���|H��L��H�D$�=�H�T$H��H�����H�D$�9l��H�L$H��I��I�E��H�HE1����������I�EH�������f�A������5���DH�D$`H��$�H�D$PH�D$I��H�T$DH�H��H9�u�H�EH��$�H�|$H���
H��P0A������
H�|$H�EIc�H�L$ H�4H�¿
�P0A�����c
H�L$ Hc�H�|$�D$(H�H�觪��D�L$(H��I���/�HH�D$`H�E�����H�5D�H��D�L$ 舸��D�L$ ����	�6k��D�L$ H��I��H�D$h��H��1�H�5d�H��H�D$ 跸��A������	H�EL�\$ �x�L	A�K$H�D$�*H�@�H��H�x����E1�A�����FH�D$�*L�\$ H���H�p0H��H��H�|$0�ܸ��L�\$ ��A���H�D$H���H��L�\$(H�H@H�Ϲ+H�|$ 袸��L�\$(��A����H�D$L�\$8H�p�H�pPI��H��L��L�\$(�
���L�\$8��A����H�D$�*H��H��H�xX�=���L�\$8��A���mH�D$H�T$(1�H�pH�X���L�\$8��A���HH�|$(H��H��蔷��L�\$8��A���$H�D$H�T$ �L�\$(H�p8����L�\$(��A����H�|$ �*H���H��螷��L�\$(��A����H�D$H�T$01�L�\$ H�p(贤��L�\$ ��A����H�D$�+H��H��H�x0�G���E1�A�����yH�D$�+H��L�\$ H�D�H�x8����L�\$ ��A���GH�D$�2H�3�H��H�x@���L�\$ ��A���H�D$H��H��H�xP�b���L�\$ ��A����H�D$�*L�\$(H�;�H�p`H��H��H�|$ 舶��L�\$(��A����H�EH�t$�
 H��P0L�\$(��A����H�|$Hc�D$(H�����D�L$(H��I���V�HH�t�H��H��$�H�D$H�xp諵��E1�A�����=H�D$H�T$ 1�L�\$H�pX�#���L�\$��A���1҃�1���g��H����H��$�1�H�PH��$�H�D$H�PPH�pH�֢��E1�A�������D$�/g��D�L$H��I��H��$���H�E�x�&���H��1�L��H�5C�L�\$ �D$
���H�D$X聴��A������L�\$ A��
H��
M�S(L�\$(L��L�T$ �y��A�����ML�T$ A��
H��
L���}y��A�����"L�\$(H�EH�T$XH��I�s(�xL�\$ �|��A������L�\$ I�{(H��t
�Rs��L�\$ H�D$XI�C(�D$
����!��H�D$�H�H(H�p H��H�L$ �v���E1�A�����hH�L$ H���H��L�\$H��謳��L�\$��A���<L��$�1�H��H�5(�L��L�D$ �;���L�\$��A���L�D$ �
 �
 H��I�x(A��jx��L�\$��A����1҃�1��e��H����H��$�1�H�PH��$�H�D$H�PH�p蝠��L�\$��A�����D$ D�L$�;e��D�L$H��I���jH�D$(�E�D�L$0���D$�ld��L�\$(D�L$0H���9�L$HcT$ L�XH�t$P��HH�D�`H�T$����E1�A�������D$�d��D�L$H��I����H�D$PI�CH�E����eM�]E1����D�F0D�FL�v�D$ �F,�D$�F(�D$A��~L�v �8D�D$�r��H��H�������D�D$D�L$H�H�@(D�@E��t�@�|$��t�D$ �N �F0E��~cA�P��}\L��L�]hM�T��Hc9�H���H��ID�H�<���H��I9�u�1�A���A���T�H��A9��I�uE1�����{c��I�EH������1�1�������c��H������I�UE1�H�PI�E��A��������DI�E�����u���b��I��I�EH���v����M�sI��1�H�ǁ� 譅��A�������D�[E���7�A�NE1��-�I�EL��D�L$����H�\$L��L�t$fDH�;H�����I9�u�D�L$H�\$E���������!��M9����H��L��L��S ��E���I��L��I��L�l$H�\$L�|$H�l$ Ic@A9@tH��L��L��H�L$�(��H�L$H�H�M��������A��E1��n�M�S(A��
H��
L��L�T$ �t��E1�A���������L�T$ A��
H��
L���[t��A�����_���E1������H�|$X�EtH��H��L��距��A������	H�|$X�b����DL�t$HH��L��H��L������A�������I��M��L��H��L���A�������H�D$HA�I��U�A�2�����DH�|$X����E���~�fDH�E�@��H�|$HA�FA9F��I9��
A������C�Ic�H�t$H��D�D$���D�D$H�t$H����H�F(1ҐA����H��A9�����L�|$H��L��H��E1�L������A��I�E�`�����N��]�����x$����wA�z~��tA�B��u�A�BM�J���D$ ���H�D$�
�
H��H�p�#m���'�L��L��D�T$���H�|$HD�T$H�H�H�L$HI9����A�~��D�T$H��L��L��A�V H�L$HD�T$A��A�FA9F��I9���A�@߃�]��H���Hc�H�>��I9���H�E�@���D$%�����A�~�D$�D�T$H��L��L��A�V H�|$HD�T$A��A�FA9F�I9��F�H�HD$HD�T$(1�L�
��H�\$�\$L�l$M��A��L�|$ I��D�ōE׃�O�Ic�L�>��E����
��H�|$HI9������A�~�L��L��A�V H�|$HL�
R���IcFA9F��H�I9�HG�H�|$H�I�G�@��E�������I�G�@��E���
	���u���I�G�@��ZE�������U���I�G�@�CE���:��?�� �3���A��(���E���^	������I�GD����@�t���]����������E1������)�o��:����L���؉\$H�\$D�u�EL�T$HM��L��H��L��H��L�l$L�|$ L�T$���L�T$��A����I��H�|$XM��L�ѺH���jD�uA�����k���\��H���x����t$E1��pH�T$XI�EH�PH�D$HI����I�G�@tE��u���������~���A������
�H�E�xy��[��I�E�����3��I�E���H�EA�'�@�t�H�t$HH�L$PI��L��D��H�t$H�t$HH��jL�L$T����Y^A�������H���\��A���D$D���y�H�EHH�T$PH�t$H�D$L�pXH��H)�H�T$H�D$ H���3H�D$XD�L$(M����H�L$XL�����L�D$XD�L$(M����A�@���8
H�U�B	����A�@����	E�pA9��"
A�@I�P ��H�D���D�u�lZ��H�������T$D�HD�pI�E�P�E`�}���:Z��I�E�j������I�E�W�I9��A�~�H��L��L��A�V H�L$HA��A�FA9F�I9̺F�H�HD$HA��=��A��!��H�E�@����H�L$HA�<�)���I9�����H�E�@@����A�~��H��L��L��A�V H�|$HA��A�FA9F��I9��F�H�HD$HA��<�����x���D�������H�D$1�1�L��H�L$H�T$���H�|$���H�T$H�����H�L$H�����A������0�A�FD���t'H��L��L��D�T$D�D$�k��H�L$HD�D$D�T$H�H�A�@�H�L$H��]����H���Hc�H�>��I9������H�E�@ �����A�~��H��L��L��A�V H�L$HA��A�FA9F��I9̺F�H�L$H�D��L��HD$H�D�\$A�VXD�\$H�L$��A���A��<tA�����A��'�9�H�D$HH�T$HI��L��H��D��D�T$H�D$�Ժ��A�����	�H�|$HI9����L��L��A�V ��)����H�|$HA�FA9F��D�T$I9�DG�H�EMc�Lt$H�@	�y�{�oH�C ���D$D�EW��I�EH���H��T$DH�|$�P�^�I�E�H�N�DH�|$XD�L$���D�L$�G�H�D$`���L��L�����L�
��Hc�H|$H�R���E���}���I�qI�yH9��l���H�EHcH9H�kH��H��H��H)�H9��F���H��H��L�T$L�L$��L�L$L�T$H������I;A����I�qH��L�T$L�L$H�D$譕��H�T$L�L$H��L�T$�VA�At�H�{$I�QI�B��I�}1�L�T$��U��L�T$H��I�E�u1�L��L�T$H�D$�U��H�T$L�T$H��H�B�JL�h��H�P�c��C$����L�����A�~�/�����H������D�u����HcQ;U\���H���H�uhH��HD�H�����:	���1�1�謔��I��H����1�H����%�H��H����H�|$XH��H�D$��%�H�T$H��I����I�EL�p��H�Hc�H�5�Hk�Hʋ������H�5��I����H95��I�x�H�(NIH�5��H��H��1��Y��L�L$L�T$�M��E�D�L$ L�\$��D$�fT��L�\$D�L$ H���+�L$E1��HI�EL�X�A�A�����������h���H������I�EA������^��A������S��A������H��1�1�����A�FD�H�L$H�������H��L��L��D�D$H�L$�q��D�D$H�L$����A�FD����N���H�|$HL��L��D�T$�<��D�T$�/���������e�A�FD����0���H��L��L��D�\$H�L$���D�\$H�L$�	������t���A�FD����
���H�|$HL��L��D�T$D�D$���D�T$D�D$�����D�L$(I��H�D$L�pX�(D�L$(���D�L$(H��I�����H�D$H�T$D�L$0H�t$L�D$(H�@H�x�_��L�D$(D�L$0H��I��]H�L$ H��L��D�L$L�D$H�L�����L�D$H�D$ D�L$I�@I�@ I�@E�H���H951�I������H��KIH��L�T$H��H��H�KKIL�L$L��H�5C�1��W��L�L$L�T$���H�L$HH�t$HL��I��H�L$XP�(jL�L$T莛��A��XZE�����H�E�@ t!HcD$D9E\|]H���H���wH�<�tF��{Q��I�EH���~��T$D�P�����E1���1�H�D$�&������~�A�0������H��L�T$L�L$����L�L$L�T$H�I�QI�qH��H)�H9����H9����H�E�c���1������ �|��I�E����i��I�E��� L�D$D�L$�|��L�D$I�@ H�����A�PD�L$A�@�D�H������A�@�������(���E�I�x D�L$Ic�L�D$H�����H���S�L�D$D�L$I�@ E�p���D�T$(�M��L��L�l$L�|$ �\$H�\$D�T$�O��D�T$H���a��L$H�T$HL��H��D�uD�T$�HH��I�EI��@L��E���D�T$��A���/���I��H�|$XM��L��D��H����D�uA�����v���I�EH�T$XD�H�P���L�����A���������L�T$�OO��L�T$H��t�L�PI���1���HDŽ$���L�����A������e��H�Uh���H�L$H�T$�%���H����A�%����:���C���L��L�����A���V���I�Q��A�*�������L�T$�N��L�T$H���-���L�PI����H��L��L�\$H�5��v���A�����{�L�\$A�c�����A�����E1��+�1�L��H�T$����H�T$H������I�}����I�EA������c��AWAVM��AUM��ATI��U��SH��H��(H�4$L�|$dH�%(H�D$1�H�L������…�����9�H�|$���u��
u,H�;H�t$dH34%(����H��([]A\A]A^A_�@1��IM��H�H�X�#1��D$�5M���T$H�H�X��t�9�t���
t�H�4$��M��M��L��L������…�x@H�|$�?u�H�;H�D$H�XH��u�;H��H�KH��u�H�\$H���f�H�|$�$���$�2���H������ff.�AWAVAUATUSH��(dH�%(H�D$1�A���H�H�<$��;�IA����*H�|$H��A��I��H�|$M��L���L���H�|$L�$��A��xaA9�tG��
tb����A������������D�A��H�T$dH3%(D����H��([]A\A]A^A_�I�:�����@H�|$����@1�L�$��L�$I�H��H�$fDH��L��L��H�����A�Dž�x�H�|$I��M��L��D��H������A�Dž�x�H�|$1��<�H�$H�H��H�$A��
t�D9u� ����[����A�������0���AWAVI��AUI��ATI��UH��SL��H��XH�yXdH�%(H�D$H1�H��t1�H�5L���x��H�CL�|$H��L��Hǃ�L��H�C H�CXH�C`�E8H�C8��E`H�C@�CH�EHH�ChH�CH�EPH�CpL�k(H�CxHǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�H�CL�c0H�kHI�L�l$L�l$L���U������-1�I��M��L��L��L���7�����x�CX��4�S\1��D�S\�UH�t$HdH34%(uxH��X[]A\A]A^A_��D�#�I��H��t5D�`�@I�H�P�S\��x&H���H��hH��HD�H�I�1�딋S\������H�����S\������u����=�f.���H��tH���IH�81��f.�H���IH�=�IH�81��ff.�����o�oNOH�F H�G ����7�f����w�����w�����w������f����G�����G�����G���������wH�
k���Hc�H�>����W$1��f��W 1��f.��W1��f.��W1��f.��W1��f.��W1��f.���H������1��f�����fD��������������H������� E�������@E����� ��E����H�m�JH�H����f.�AWA��H�5�XAVA��AUATL�%[�UM��L��SH��(�D$`H�|$L��H�T$H�=���H�/�D�L$LE�LE����D�L$H��E�������|�@�H�=���t�D$���T$H��D�H��D���H�'9UH�5��RL��P1�jAU�t$@jD��$�L�D$HE)��I��H��@H��([]A\A]A^A_�fDE����A�G;D$h��C�7;D$h�cPH��8USPjAU�t$@AVD��$�E)�L�D$HD��L��H�5��1�����H��@�؋L$hL�%�W�|D�i�e���f.�H�lL��H����I��D��H��A��1�H�
��H�5���j��؀|u�H��([]A\A]A^A_�f�C�D7;D$p�(���L�D$1�M��D��L��H�5F��� ��E��tBH�L$�9,������L�A�8 u	��Lc�I�D��M��H�5�1�)ѿL������D$hI��A�ؿH�
�H�5��P1�������DH��H�ߵE1�USP��$���PAU�t$@AV���������SH�A��D�_�
H��I��L��L�API�A��L�;QH�ߍp�D��RL������H�� [�ff.�f���SH���S��H��H�����H��[�H����AVI��AUATUS�����H��JH��H�L��@D<:u@I��A�<:t�trA�M��<:tu��tq��f.�<:t L��������N�H�I�A�E��u�L��L)�L��M�����H���L��H���k�A�E���v���[]A\A]A^�D1����ff.���H� t+H�GH��t�8.u�x/t��U��DH���@H�G�8.t���ff.�f�AU1��ATUSH��H���H����A������A�������m��E9�t���9�t���H���JH�����C0�����C@�����C H��H�ChH���CT�K`H��[]A\A]�ff.���H� H��tH�+�IH98u��H�����H���ff.�f���SH�����H�[�ff.���H�����H�H���ff.���H���C��H��H��wH�^�H��H���D��SH�����H���HE����H�[�ff.���H������H�H���ff.�ATI��USH�H��t!1���L��H���o��H��[]H��A\� �H��1����H��H�E��ff.�f�UH�oSH��H� tH�oH���!�Å�x���$��H�������u$H����[]�H��IH��H�5ԱH�81��4�H���IH��H�5#�H�81���f�H��H�|$H�|$�]��H�L$H�qHc�H9���@�H��H�=��1�����H�D$H���ff.�f���H����H���G�H��u*H�����H��H���IH�5��H�81�����tH��u�H��9��DH���H��u�H���ff.�@ATUSH��H�|$���H�|$H�D$���H��H�D$H�xu
�}-�1ҾH����Å�xa���j�1�1�����
�������+��A�ą�����H�����H��E����H��H��[]A\�f�������r�����1ҾH���+��Å��p�������8�%��H�|$H���������D� A��_�\�������D������H�|$H����f���H�����H��H��[]A\�f�H�I�IH�H��H��[]A\��U��ߋ(�\������H�|$H���8�����H�|$H���$�@�W��w1���u
H�G�D��H�H�x ����|7�
t	���|7�
�>��@H����������u	�u H���H�;�IH��H�5��H�81���H� �IH��H�5��H�81���ff.����H�=��JSt ����H�]�JH��H��:��H���[�H�z�IH�5d�H�81���f���t,H�OH�GH� tH�GH��H��H���)��f�UH��SH��H��迯=0uH��1�[]��H�����H��H��[H��]���ff.�@AWAVAUATUSH��HdH�%(H�D$81��
��H�H�D$�� �CH��H�h���L�d$fDH��H�E�L��H�D$�[��8-I���H���x-��H�D$A�GM�o����<=��M��1�f.�<-�8<_�5�P����)�P������0��	��#H�=��{��=L��H��H�D$ ����H����L)�L��H��H�����H�E��H�t$ H�D$(H���IH��:��H���"��f��I�~�4$���4$H�D$A�$����H�t$L�����H������H�L$H��� ��H�AH�$H)�H�X�H��tf�H�|$H�����H���u�H�L$8dH3%(�������H��H[]A\A]A^A_�@�A�FI�V���a���<=�B���I�����f.��x�U����Z����A�G���6���<-uA�E_I��A�E��u�����A�GI����H�D$A�$���H�D$H�XH�h H��������2���fDH����H)�H�X�������L��H������d����L�FL��M9����OH��I��A�P���D�J��փ� A����F���9�t�@��-t@��_uSfD�P���v0�P���v(��0��	v ��-u+�OH�G��t'M9�t"H���DH������D��_t�1�ø�f�AUA��ATA��UH��S��H����~6E��H��H��D��H�5+H�=p�HD�1��m���H��[]A\A]�Lc�M��t�H��L��H�=������ujA��}L��H��H�=�������u6L��H��H�=�������v����؃��E��D�H��[]A\A]��؃��E��D��r���D�؃��E��D�H��[]A\A]�A�A��t�����ff.�AUA��I��ATI��U��SH������Hc�H����H��H��H�=M��������H��L��H�=8��������H��L��H�=.���������H��L��H�=!�������~A���	H��L��H�=��������H��L��H�=^�x�������A����H��L��H�=*�T������dH��L��H�=���:�������A����H��L��H�=�)�������&H��L��H�=�������tg����A�UE�]L��H�=u]1�A	�!�E�]1�H��A�m������tA����E�]A�mH��[]A\A]�@��~{A�����H�#�L��D��H�5E�H�=�HD�1����YH���[�_]H�=ۧA\1�A]�����C���fD��3���fDHc�H��H�=\�H��������tO��
���D����fD�@���fD�����fD� ����fDA������A��t���������fDIc�H�������ff.�@��1��%���D�����������f���UH��S��H�����V5�I��Hc�H���G5�H��H�=�[�������05�A�A�KH��[]�ff.��AWAVAUA��ATUSH������H��D�v��ufDMc��+H�߈$L��袸��$H����H)�A��E����D�H�Ic���+H�]��E)�H�,��E��D��D��E�t$�H������A��E���Y�}+H�]�K�M�AՃ�A��E���m�������H��D��H�߹[1�]A\A]A^A_���DLc����L���-H��D�$�ٷ�D�$H����H)�A��Lc�J��9-tJE)�J�,;�E���>���fDE����E�N�Ic�����H�����A��������fDA����A���M��t�L��H��H�=��D�L$H�$�P���H�$D�L$���u���D��H��D)�E)�Hc�E�A��H�1����M��E���B���DE�������H��D��[]A\A]A^A_�fDA)�J�,;�E���\���@M�������L��H��H�=�LD�L$H�$���H�$D�L$���0���D��H��D)�E)�Hc�E�A��H͹����f���AVAUATI��U��S�H���PՁ������TLc��+L���"��H���)H)�A�Ń��&Lc�M��� L��H��H�=���������Mc�H��H�=֣L����������A���^L��H��H�=���������A���@L��H��H�=J��������L��H��H�=6��}�������L��H��H�=%��c�������L��H��H�=+��I������A��ML��H��H�=��)�����t7A�$����J�<D)�� ���[]A�$A\A]A^�A�����A��
~bH�ډ�H�=��1��;��[H���]�BA\H�=��A]1�A^���f�1�A�$<+�v���H��I���A�$[]A\A]A^�Mc�H��H�=n�L���w������A��-M���r���L��H��H�=��N�������A������L��H��H�=��*������4���A�$�����fDA�$��J�<3D)������A�$�]���f�A�$�� ����@A�$��@���@A�$�ʀ���@A�$�����@A�$�����@��USH��H���JH��u&H�-}��H���S��H��H�i�JH��t���H��1�1�H�����H��H���e��H��H��[]�ff.���AUATI��U��SH��H��JH��u-L�-��f.��L������H��H��JH��t���L���H��H�����H��H������H��H��[]A\A]�fD��AUATI��U��SH��H���JH��u-L�-��f.��L���S��H��H�Y�JH��t���L���H��H�����H��H���d��H��H��[]A\A]�fD��AUATI��U��SH��H��JH��u-L�-	�f.��L������H��H��JH��t���L���H��H�����H��H������H��H��[]A\A]�fDAUATI��UH��SH��H��dH�%(H�D$1�H��uH������H��H��H���R��H��H�H��u'H�+H�D$dH3%(��H��[]A\A]�DH�$H�U�JH��u)L�--�f��L������H�,�JH��t�H��H��H���D��H��t�H��IH�L��H�5�H�81��0�����ff.�AUI��ATI��UH���:SH��H�����H����H��H9�r?�{t,H���:H�����H��H���|H9�r7�}�H��[]A\A]�f�H��I�u(H��H)�H�=�w����DH��I�u8H��H)�H�=�w�g����DI�u(1�H�=�wH��H��[]A\A]�A����I�u81�H�=�wH����H���IH�ML��H�5�H�81����ff.�@AWAVAUATUSH��HH�|$�L$dH�%(H�L$81�H���0H���'D���H��I��H�^A��D���H���L$I���
L�FM����
A�8-��
A�P����
H�-߱�M�`L�5����y����HcD�H�>��fDA�|$��I��I��I�^M��~M�FM��tA�8-u	A�P��u�H�D$L)����I�L$A���tCA�OXA�O\A�T$I���t����A���I�L$�u��A�O`A���A���u�H�L$蜼��D$H�L$H��fD�D$����L��H�=h��%�A���������A����L��H�=S����A�|$�UI���[H�D$����|$��u0A���@A��� I��A�$���f.��t$��t�H���I��H�5�H�81�����D�D$��u�H�Q�IA����I��H�H��IH�A�$�)���fDD�\$E��u�L��H�=��I��I��� �I�|$�K��$�����D$���l���A�O`@H�D$L)�T$��tA���H�\$8dH3%(��H��H[]A\A]A^A_�@D�t$E������L��H�=���A�|$�_I�I��I��H���nL���{��I��H�5�9�����Q�����I��H�苺�H�A�$����f.��D$�������A�O`I��A�$��fDD�D$E���b���A���I��A�$����@A�D$<:��I�����`A����xA�OXA�O\M����A�$�D$�v���I�w81�H���H�=Cs���A�T$I���K����A�D$����<
uA�|$��M�t$�
H�5ʙL��������7�t$����A�O` I���fDD�D$E���Z���I��A�|$I����I��L���3��1�L��H���f�H�DzIH������A�|$I�E���H���
H�sL�sH���
I��H��L��������fDD�L$E������A�|$�vI���rH�sL�sH���a�>�XH��H�t$轢�H�t$����I��������|$���\���H�T$0L���r��H�T$0I�=��H��v����H�|$/��D$/�~��H���IH�M�������A�$�t����A�D$���������A<4����Ic�L�>��f.�L��H�=��Q�A�|$��I���`���H�{H�5��L�sI������1���fD�D$���t���L��H�=C�I����A���A�$������L$���<���A�O`I��A�$���fDD�T$E������L��H�=���A���A�|$�����M�t$L�������~���L��H�=˖1����1��r���f�H�1�IH����DI����
I�L�cI��L�sH�������1�讳�I�?H��I�G�z���H�P�I��k���fD�H�5��L��������ZA�D$���;<-�3<=�<A�D$M�D$���(I�WPH�5.�L���6���s����H�sI�HL�sI������y���H�T$0�L�����H�T$0H�������I�A�������%�����_��H�A�OXA�g\��[���H�=6o���I�(I�GuI�G(A�T$I�������I�t$I�����I�t$I��I���6����I�|$H�5$��I��I���8�����I�t$I�HI��I��������fD�H�5�L�������u{A�D$���x<-�p<=uaA�D$I�|$��� M��I�WPH�5���ƴ�I�EL)��=���H��I)�L�4�����H�5��L����������H�5Z�L����������H�5uML�������uA�D$	����<=���H�5M�L����������H�5A�L�����������A�T$��t	��=����-������I���}H�SH����M�u������+I�w(1�H�=�l�2�����M�t$�H�5ϫL���T��M�D$���D$MD�L�����I��H��
��H���OH���L��L��H�=�|�z�����
�����T$I�ޅҺE�A#G\A	OXI��	�A�G\�c�����O���fD�{��H��w���A�D$�ƒ��-t���Z���<-����1I���4H�{H���'M�u�I�WPH�5a�茲����H�=������H�=�����H�=�k���H���
H��L��H�=9������������	���<-������������H�蠱�H��F���H�l$H��H��L)��I���H�I�IH�5�H�81��x�����t ��������V���fD�C��H�A�OXA�g\��?���1�H�=4���H���IH��,���<-��A�|$��I�|$���A�|$�����M�D$����A�D$����<=���H�5��L���������uA�T$���J��=�A�H�5mGL����������L$����A�O`����������I���H�{H����M�u�����<-�|���TA�|$
I�t$
��M��H���L��������<-� ���bI���eH�SH���XM�u�I�w81�H�=Mi���f���L��L��H�=�y�Z���t/����������H��L��H�=�y�5���u�I�������L��L��H�=�y������������������A�|$	tVI�|$	M���
����H�5x�L���������������A�|$	I�|$	u�H�ҧIH�5��H�81�����H�5hHL�����������I����H�sH����M�u����A�|$
����I�t$
����H�5r_L����������H�5�L��������6A�OP@A�OT@������-������I���>H�SH���(M�u��������H�5_�H�������tC�H�5,�H��������l1�蛂���A�|$����I�T$M�������s��X���A�|$����A�|$I�T$M�����@���A�|$I�T$u�H�H�IH�5q�H�81��w���A�|$����A�|$I�T$M��������I��I���D$���H�5}
L���������A�D$���~<-�v<=�QL��H�=č�����u1�|$�YA�O`�u�A���趬�H��\�L��H�=@��֧��uA�D$���&<=�L��H�=���}������|$��H�D$A�O`�L)���L��H�=c��q����;���A�D$���'<-�<=����H�=d�1��
����I�T$A�����I�T$A������M���r���H���IH�5�H�81����A�|$�����I�|$A�OP@I�wpA�OT@��8���2�<-t�I�|$��t��ԺL��H�=f�蝦��uA�T$��t<��=t7�L��H�=O��v�����H���IL��H�5��H�81��#���-�Z���^I���3H�{H���M�u�������H�t$0�
���I���U��8"thI���|bH�D$0�8uXM�gh�Q���A�T$
�у��-t���a�����-������I��trH�SH��t_M�u�����u<I�������H�!�IH�5Z�H�81��P��H�	�IH�5�H�81��8��H��IH�5R�H�81�� ��M���I�T$
A���A�|$�����A�|$I�T$M�����j���M������I�|$A������A�|$�Z���A�|$I�|$M�������H�W�IH�50�H�81����H�?�IH�56�H�81��n��<-���|$������I��t[H�{H��tHM�u�1�����u#I�W`H�5\�臩���H�=@�1����H�͡IH�5މH�81����M���I�|$A���A�|$�H����|$uA�|$I�|$M�����|���H�p�IH�5Y�H�81����H�X�IH�5��H�81����H�@�IL��H�5ƎH�81��l��H�=x�1��.������H��IH�5��H�81��A��H���IH�5�H�81��)��H��IH�5;�H�81����M������<-���A�|$������L��H�=q�1�I������I����ff.�AWAVAUI��ATA��USH��H��xdH�%(H�D$h1�H�D$`A�E�ƒ� t4��	��v,��u8H�D$hdH3%(�
H��x[]A\A]A^A_�DI���f.�H�CH�CL��H�D$H�C(H�C(H�D$H�C8H�C8A�uH�D$ �CP@��-@�t$_�D$X�CT@�ʼnD$L�CX�D$H�C\�D$DH�ChH�D$(H���H�D$0�ұ�@��H�<H�L$PI�����1�I��H�D$8����I��t$_H��L��M�H�L$�� H�L$PtL�x@��-tA�-I�<L��I�V���L�l$`�H��H�D$`L���a��A�D��tD�L��H��L�|$`�?��A���t'�� ����	����I��A���u�fDL�}�L��H��H�D$`���M���I��L�����L��H�D$H��H�E �EH�uL�|$E��A��L���-��DD��H��L��L���g�H��~qE��tlI)�M��~dM�<�I��8-tH�P�I��@�-I��xt�I��I���f.�A�I��A��ƒ� t��	������I��A��ƒ� u���H�D$H��tH�CH�D$H��tH�C(H�D$ H��tH�C8�ST�D$L�L$X	KP1�!ȋL$H	KX1ЋS\�CT�D$D1�!�1ЉC\H�D$(H���|H�ChH�D$0H��tH���H�|$����1�H�����H�|$81�������H�u�������f���AWAVI��AUI��H�zATI��USH��H�������r��H��M��uz1�H��H��B�D%L�{L�s(L�c8�;���H�����H�����L�����`fM��u	H�{H��ubM��u	H�{(H��utM��u	H�{8H��u.H��[]A\A]A^A_��L��L��H������s���D�����C@H��[]A\A]A^A_Ð����H�{(�C 迲�L��H���de�f�����C0�fD��AWI��AVE��AUE��ATA��UH��SH��H���'��1�H��M��tL��H�D$���H�t$��H��E��I��L���D$XH��PAVAU���H��8[]A\A]A^A_�ff.����H�5��������H�5���������AVAUATUSH���H��蕭�H�=��JH���f��H��H�����H��H���J�L��H�=��JH�~�J�9��H�ʧJH�=Q�H�l�JH�L��@�u��H�5���H���f���H�=(�腸�H�^��;tEI��fDH����H��H��I���Z��L��J�\#H��H��H�����H��L���)��;uľH�=قH���J���H��H�R�IH��[]A\H�8A]A^�O��ff.�@���ff.���AUI��H��ATUH��SH���dH�%(H��$�1�H�\$0����H��I�����H��H�4��H�=�����H��L�,$H�l$�D$H�\$L�d$ �s��H��$�dH3%(uH���[]A\A]��-��ff.�f���SH�����H��H���8���[H���o7ff.�@��H���ü�H��H���G�����H��t7H������H���&��H�ǥJH��H�H���H���H���"�f��ff.�@��H���s��H���JH��H�H���H���H�����ff.�@AWAVAUATUSH��H���w\�XdH�%(H�D$1��d��C`���CT��H�=�����H��tH�5u�H�=��1��g��{pt
H�i�J��{|t
H�X�J��{t
H�G�J�������H�-��JH�E�����&��H�Ef���H���J�@@@@ @0�u��H�=
��T��H��H���IH�8�Ҫ�{p��1���H�{��H�kH��I�����L�=H�JI��M��u$L�%T5��L�����I��H�!�JH��t�I��H��uY�if.�H����H��~SH���|��L��H��H�$�}��H�ΜIH�<$H�H�G���L��L��L�����H�E�� u�H�EH���H�CHH�D$dH3%(�~H��[]A\A]A^A_�fDH�{p�>�����f�H�=�~�4��CT�u5�u�����H�=�~�����H�=�~���CT���H�=�~���CT�����f���AWAVAUI��ATUSH��hL�%��JH�o dH�%(H�D$X1�H�H�D$H�GH�D$�G�D$H�GH�$M��u'H���@�H���c��H���JH��t�I�ċT$����-H�$�x ���H�
�IH9(�&�ߔ�I��H�$L�|$���D���L�����@��A�������������A'H�t$L���)H����L��L�t$@�
��H�=�}H�D$@�w��L��L��H��H�D$H��L�|$��H��H�t$L���X+L��H���(L��L��H��H�D$@�Ž�D$����H�T$XdH3%(H���_H��h[]A\A]A^A_��^��I�����L�<$1�I�GH�D$(I�G(H�D$0I�G8H�D$8����H���8��H�L$@L��H��H�D$@�>��H�D$ A������H�����H���P��L�xL�pH� tL�pI��~�A�>#u�A�~!uÃ���H�5s�II�~��H��t�K�T>��
��
u��J�H����
u�H�5Q|H���Ƴ�H��tH�4$H�x1Ҁ������H�=�0�ʗ�H��H���/��GH���"��H�|$(uH�$H�xH���5H�|$0uH�$H�x(H���H�|$8uH�$H�x8H����H�|$ ��1��(�H�<$�+����3���fDL��L���u�����H�|$�&H������H��H�=k_莙�I�E ���1�1���L��H��H�����H�t$��H��H�|$�6��H������	��I������H��蹫�H��Gtp�H��uI�E ��;���H��H�����+������H�$�A@�������H�$�A0������H���JH�$H��A ������H���;��H�D$ H��Ct7H�|$ u��_���H�=Lz1�蠭�H�t$ H���n���:���H��聸�H��t�L�xL�pH� tL�pI��~L��L�����H�5��IL���聱�H��������#�����ff.���SH���H�5-��H�=�y�1��H����H�5��H�=�y���H����H�5���H�=�y��H�ΑIH�5��H�=�y���H�,��H�5E��H�=yy�ɱ�H���H�5+��H�=fy诱�H�=>y�H�=;y�H�=3y�H�=+y�H�=#y�H�=y�wH�؜J1�H�
W��H�=yH�H�������H�31�H�
5��H�=�xH�������H�ےI1�H����H�5�xH�;�c��H�;H�5�x�H����H�����H�=�x[H��铖���AUATU��SH��H��踤�H��I���m���~0�E�L�l��H�;H���$��H��H���i��H��L������L9�u�H��[]A\A]�ff.�AWAVAUATUSH��H�$H���~dH�%(H��$�1�A��H��$�H��H�|$8I���H�Ic������M`�L$(H�
t�JH�	H��`H�L$ H��� ��H�����D$(���A)�H�I��D�l$,H�D$0�ET�ZH�}�7�UT�MP!щ�%���!Ȩ��r��@��-�H���%j�E`���
� ��H�}u[�L$,���H�D$0H�8H�}H���b
����W
�����l$,H�D$0<-u��G
f�H�}�7��H�EH�PH� tH�PH�U�J��Ԓ����J��H��H�$H�4�JH�H������H��JH�H����ג�H�}(H����
H�}8H���H�}H���
�}0H�$��x���H�����H������}@��x���H�����H���4���E@����H�4$H�}E1��]��H�}�T��H�D$ �H�=uL��@�g��H�D$譐�I�EH�\$@�D$H�D$H�l$H�DH����I9���H�D$N�<�H�t$J��L���j��1�H�4$L��L9�I��������H��H��tBM9��*�T$���L���.��H�,@��uH��L��虩�L���|��D$I��I�E�� �`���M;e��I�E �b���DH�Z�D$(��2���E����M����M�4$M�����\$(�����A�ą�������H�=�t���H��H���m�}��H�;�E1�A��H�$H��H�D$H�$H�L$M��1�H�5�y�D�L$L�=~�H艈�D�L$I�WE�q�I��I�DL��E���D���I�����M9�u���pE��H���HD$L�=G�HH�$M���@L��E���D���I��袺��M9�u�H�L$H�$�1�H�5�sL�5��H���M�~`fDL��E���D���I���Z���M9�u�H�L$H�$�1�H�5~sL�5�H袇�M�~pfDL��E���D���I������M9�u�H�L$H�$�1�H�5EsL�5O�H�Z��M�~@L��E���D���I���й��M9�u�H�L$H�$1��H�5|x���L�5��HI�>t5E1�1�DH��A��E���L�D����~���Ic�H��H��I�<u�A�H��$�dH3%(L����H�ĸ[]A\A]A^A_��Ep�����L��蠻����H�t$H��H���H{�����D$H�\$@H�l$H����
H�D$ H�l$E1�H�,$L��`M�|$L�|$�pfDH����H9���H�D$H�<غH��L�,�����I��H��t0E��tML���}��N�<(A��uL��L�����L��A��x�H��I�$�� u�I;\$}I�D$ ��L��谺��fDH�l$E����	�EP ��H�t$0�|$,����������<u������������H�}��	Ј��H��t�E H�4$�����!���lc�������D�e`H��A���R
A��tA��tH���H�}�%H�}D����4���A��1�H��I�����A��A����A	�H���ID���L9(��1��H��H�EH�t$PH�H���H��H�=��H�\$PH�D$X�D$`H�l$hL�l$p�w�I��L����$H�x��
L���$H��$�H����H�}���D$(���(%���3	�}0��x	�_��H�$H�<$�b��H���*��}@���?�:��H���B��H���z���%��������<u�/��������������	Ј��������tKH��$�H����
�u`H�x��趦�I��L�-��IL��I�}���I�}�������cH�}A�uH�u�H�=bn�������
H�XJH��u$L�-o@�L�����H�4JH��t�H��H�5�IH�8��|�H�@ �P����1Ʌ�uH�HD�E`L��$�H�uA��A��M����L��L���g��L��I���|����c�E`�y���H�EhH���|
H�M�IH����� �3	L�-�����@H�����L��H�=VnHE�1��Υ���L��H�=>nHH�1�貥���L��H�=&nHE�1�薥�H�=n�H�=n�H�=�m�H�}H�=�JH���fH�=6�IffH�.��L�(I�E0H�����H�h�E �����L��H��t"H��$��H��$�L��$��@��I�UH�uH�|$PH�JH�T$`1��D$P L�l$XH�L$hH�D$pH�D$xHDŽ$�H��$�HDŽ$�$DŽ$�贴	�����3��E`���������H�=)r1��r����DH�=�l茮�H�����H��H���c��|�fDH�t$81��}H�VH����H���H�H���>L�H���MH�u�H�=uk������*H�}�_H������H�}A����H�}�h��L�t$8A��H��M���M�nL���KL��H��H�5��7K�H��L���ׂ�I��H���?	�U��H������DŽ$�I���H��$h�uH���Ͷ��H��$hH��$�H��H��$�H)�H�zH�48H9�s�6@��
��	1�@��
��H�H��������?H9��,	H�D?�H�=��H��$�HDŽ$����H�ߺH��$�H���d��H��H�=N�5�����H��J�1�H��H�L����P��H���h�L��耕����D���H�߉��@��A���������Ƀ���H�UH�uH�߹�iI��������虍�H�}H�����DH�ei�l$,H�D$0H�EH��H�=j�S�����fD�#��H��H�p�IH�}�H���D���L�t$8��I���H����IH�5�hH���.IH��H�5��H���IH���d�I�~�ˇ�I��H����H�|$8H��� ��L���X����5�yJ��~H��yJH��tL�0M����fDL�5a~I��@����H�H�P �B���f1Ʌ��O���H�J�F���f��\$(����������H�}8�E0H������ֲ��H�}�E@H��������H�
ҋJ�E H�������f����]TH�D$P��t7�H�=FH��:艜�H��?H�ǃ��:��H�|$PH��H���J��]T�H�=]�H��6�R��H��?H�ǃ����H�|$PH��H�����H�=
��"��H�L$P�H��H�.�IH�8�v���T����H�D$ L��H��h�l{��-����H�D$ L��H��H�L{��=�����[��H��������8�����������H��fH�E�Q���H�\$8D������H����cGH�����H�=�dDŽ$����H�uH�{1�H�����I��H�������A�����DH�=�f�x�����M���H��$�H���(�������D�H���K������H�H�P �B���~�������H�H�P �B���b�������H�H�@ �P�����������H�H�@ �P���y�������H�H�x �!���H���f���f�L���X��L�-I}IH��I�}�5��I�}輦�����m������L�|$8L�L$PL��I��P����I�I���c|�|$P���+������f����H�}��fH�=}IffH���H�UL�(H������������E����H��{E1�H�$���vA�H�D$��h�@�c��A��1�������H�5����H�==b�n�����H�5����H�=$b��m�1�H�5w���H�=
b��m�����H�5���H�=����m�����d����E1����H�D$8L�l$PH��$ f�L��)D$PH�D$`H�p�Э
H�|$`H�t$P�q��L��I���.���H�u����H�I��H������H��������H�uL��萯����H��$h���H��IH�=&GH�0�F����H�}�Ȑ�H��H���mC����H�}诐�H��H���TC���H�|$8A�H���;z���H�=c�j��H��H������v�f�H�=IcL��$��<��H�EH����H��H�D$0�L��H�8���H��H�EH�������1���s����H�=�b���H���1��
H���8��H��A��轜�H��$�H�D$P苤����A��P��H��xA�m�A��H�$H��x��H�D$��H��A��p���$�H���3�H�u1�L���|�I����H�������������H�=)b� ��L��H��H�D$0H�8���H��H�EH�������H�D$0H�8H�}���L���{�����赏�����H���ț�H��$�H�D$P薣�A�Ņ����1���K����7t{��$���n��$���n�����H�zH�H9��X����0�D�����$�1��i��$��n��$��n�H�=�C�7��H��tbH�t$P��ӝ��$���ri��$���ai��^������H�YwA��H�$H�2wH�D$��H�5{`H�=yC�h��A�H�D$����H�wE1�A��H�$H��vH�D$���ff.����ATUH��S��H��dH�%(H��$�1�����H�>H����H�=�pJ����pJ�����d��L�%E�JH��I�$H���H���裫I�$H������H��sIH��H��1���H���'o�H�=	`軡�H���o��H�|$�ا����H��H����H��$�H��t�?uQH��$�dH3%(uOH�İ[]A\�f.���oJH�-�oJ�5���fDH�=�tI����@H�D$���H�D$��B��f���AUATUSH��dH�%(H��$�1����xH�H��t
�hoJH�ioJH�\$1��1�H���k�����2H�ھ�E1��M������H�ھ��2������D���u2��uvH��$�dH3%(�hH�ĸ[]A\A]�f�H�\$1�H��D���>��A�Ņ�u��|$�nk�l$��t���1�D���zf�|$�Qk���H�\$H������u����|$�*k�E��tw�|$��ud��u}�U����{�8	�9���H�\$������fD��{�E1�8	A����@�{�1�8	@�����D���e�|$��t�����������e�|$�G���������zj����DH���(����k����|$�Wj�D$��������A����������f.���H�?�D��@��SH��H�?���H��[�״����SH��H�?�����C��t��t��t[�DH�{[龨�ff.����b����SH��H���0��H��tH��H��[�n��fD1�[�@ATU��S���#��I�ą���H���H����������!�%����t��Hc�������D�H�QHDʉ�@�H��L�L)�H�w�Hc�H�S�#��H�޿
�q�1҉�L��H���'a�H��H���̪�L��H���a��H��[]A\�f�1҉�H����`�H���W��L��H���,��H��[]A\�@��SH��H��Hc�H��dH�%(H�D$1�蹤�H�$H��toH���'��H�<$�Ϊ�xu8H���P���u,H�4$H��� ��H�L$dH3%(u4H��[�f.�H��vIH�5�H�81��x���1���ס��S�Z��xuH��H���ْ��tH��vIH�5�H�81��-��DH��[�SH��H��H��u#H���[��H�=�pH��1��ʎ�f.�@����H����H��u�H��H9��wH��H��H��?H)�H�0H	�H��H�T$�D$fW�fH~�fH~�H��<��H9�uH��[�^�D�����,H��u�H��H��[�fDH�H�Ѓ���
�>vD����H�{�H�CH����H�{�H�CH����H��H��[�fD������H�؃�H����CfWB�H�0fH~�H9��;���fH~�H��<��������H��H��t�����fD���l���H�{��H�CH���b�����Z���H��H��趌��J�������H��[�n]�fDfH~�H��H��[H��H��Ð������H��H���m�������� H��H�H��[�Mg�DH��H��H��H������@H��H9��m���H��H��H��?H)�H	�H��H�D$�~D$����@��u
�e���DH��H��H�G�@��������S�v��H�o�H� 1�H��萋�H�P �@uH�P H�[�ff.�f���AUE��ATA��U��S��H�5%�HH���`�E��D���H�8H����[]A\A]������ATA��UH��H�5��HSH���s`�D��H��H�8���H��[]A\�ff.�f���H��H�5��H�<`�H�8H�������H��H�5��H�`�H�8H�������H��H�5q�H�_�H�8H�������AWAVAUATUSH��L�.M�eI�E tM�eH�nI�]H��tH9�twI�H)�H�l$�f.�H�D$I��I��H��L��
�ae�H�t$L��H�PL)�H��HE�H�H��I�o�|b�H��L��[H��]A\A]A^A_���H��1�[]A\A]A^A_�ff.�@����h����H��H�5q�H�^�H�8�d��H��H��������H��H�5A�H��^�H�8�u��H�H��H�Ѓ����SH��H�5�H�^�1�H�����H�8@���gy�H��[�f���AUI��ATI��USH��H��eJH��u,H�-�f��H�����H��H�ieJH��t�H�-=qIH��H�}����u
H��[]A\A]�f�H�}H����s�H��t�u�H���H��u�L��H���o�L��H�5E�H��]�H�8H��[]A\A]�>��ff.���ATUSH��tc�7H�������H��_�H�}I��~:1�1�fDH�U��H��H�PH�pH�x謡�L��H�����Hc�H;E|�L��[]A\�A�[]L��A\�f�H����AUATI��USH��H��tOH�EdJH��H��u)L�-�
fD�L��軇�H��H�dJH��t�L�-�oIH��I�}虳��uH��[]A\A]�f.�I�}H���r�H��H��tרu�H���H��u�L��H�����H��t�H������H��L��H��H��[]A\A]�n�����AUA��ATI��1�UH��H�E�HSH��(H�|$1�dH�%(H�D$1����H�|$H�5x�HH���\�H��E��L��H�hH�8H�5����@�T��L��H�pH�����H�D$H�k H�D$H�D$H�L$dH3%(uH��(H��[]A\A]��X�����AUA��ATI��1�UH��H���HSH��(H�|$1�dH�%(H�D$1��$��H�|$H�5��HH���@[�H��E��L��H�hH�8H�5i����@��S��L��H�pH������H�D$H�k H�D$H�D$H�L$dH3%(uH��(H��[]A\A]�蘘����AVE��AUI��ATI��H���HUH��1�SH�� H�|$1�dH�%(H�D$1��_��H�|$H�5��HH���{Z�E��L��L���@H�8H���0S��L��H�pH���!���H�D$H�k H�D$H�D$H�L$dH3%(uH�� H��[]A\A]A^��ٗ�f���AVA��AUI��H��HATI��1�USH�� H�|$1�dH�%(H�D$1�袯�H�|$H�56�HH���Y�L��H�����L���k��H�;H�KE��H�CL��H�5s����CH�C�OR��L��H�pH���@���H�D$H�] H�D$H�D$H�T$dH3%(uH�� H��[]A\A]A^������AVA��AUI��H�+�HATI��1�USH�� H�|$1�dH�%(H�D$1��®�H�|$H�5V�HH����X�L��H�����L��I����L��耆�H�;H�KE��H�CL��H�5�����CH�C�dQ��L��H�pH���U���H�D$H�] H�D$H�D$H�T$dH3%(uH�� H��[]A\A]A^��
��ff.�f���SH�WH�wH��*�H��H���O��H��[�f.���H�WH�wH��K��ff.���SH���w,1�H� ��S�S(��t�uH��[��fDH��H��H��[���SH��H� 1�蝱�C(��tfWN�H�0fH~�H9�tBfH~�H��<������tH��H��u[�DfH~�[H��H��H���D[�R�f���SH���W0�w,H� �y�S(��t�uH��[�5�DH��H��H��[���S�G4H����th��uD�w,H� 1���R�H�ƿ�h�S(��t�uH��[���DH��H��H��[������w,�W0H� ���H���H� 1��m��H�0fH~�H9�t'fH~�H��<������t%H��H���g����Q�H���Z���DH��H��H��H���A���H�=��1����ff.���H� �3����H��H�G H�xH�PH�p���H��H���G�����H� H��t���fD��f���H� �Ө���SH�G H��H�PH�pH�x賙�s(1�1�H��[�m����HcGH�D�f���H� 部���H� �C����SH�$�HH��� 1���H�P �@uH�P H�ZH�B�B�J[�ff.���H��tH�5��H�T�f.�1��f.���HLJ���ff.���USH��H�n(H��t?H��H�NH�VD�C H�;H�v�™�H�EH�k(�eX�E�H�C(H��[]�H�7aIH�5�aH�81��f��fD��H���H�=�b��~�H�=-bH��[J�~�H�=J�H�|[J�~�H�=�dH�\[J�~�
H�=�aH�<[J�g~�H�=�a�V~�H�=�aH�[J�>~�H�=�aH��ZJ�&~�H�=�aH��ZJ�~�H�=�aH��ZJ�}�	H�=�aH��ZJ��}�H�=�aH�kZJ��}�	H�=�aH�KZJ�}�H�=�aH�+ZJ�}�H�=saH�ZJ�~}�H�=kaH��YJ�f}�H�=�H��YJ�N}�H��YJH���f���H��fH�=�`IffH�w�H�H�@0H���H���D��USH��H��fH�=k`IffH�cw�H�H�h0H��u6H���H��tH��H�_���H�=���O�H���H��H��[]�f�H�5�YJH������tUH�5fYJH������tZH�5KYJH���ۛ��t_H�5YJH���ț���z���H�)dIH�5�_H�81��Ș�H�dIH�5_H�81�谘�H��cIH�5"_H�81�蘘�H��cIH�52_H�81�耘���H��fH�=`_IffH�Xv�H�H�P0������HD��H������H��H�5Q�H��P����ҺHD��H��H���ff.�@��SH�5TXJ1�1�H���\�H��$t[�H�5AXJ1�1�H���[�[H��$HD��ff.����W�����H��t/f�f���H*G�Y_�H*�Z��X��O�����f���H���dH�%(H�D$1�H�4$H�5�WJH��� ��H�T$dH3%(uH���膍�fD��H�щ�H�5HWJ���ff.���H��(Hc�Hc�dH�%(H�D$1�H�D6H�5WJH��H�$H�D�H�D$��Z�H�L$dH3%(uH��(������H��(dH�%(H�D$1�H�4$H�5�VJH��H�T$��K��H�L$dH3%(uH��(�豌���AUI��ATI��USH��H��(dH�%(H�D$1��c�H��H��H�5RVJ�(L�,$L�d$���H���jc�(H�T$dH3%(uH��(H��[]A\A]��5��D��H��(dH�%(H�D$1�H�4$H�5�UJH�T$�H�L$H���v��H�T$dH3%(uH��(��܋�ff.����UH��H��SH��H���(n�H��H��H��[H���]�O�ff.�@��UH��H��SH��H����m�H��H��H��[H���	]��ff.�@��H�щ�H�5�TJ�X�ff.���H��8dH�%(H�D$(1�H�4$�H�T$H��H�L$L�D$�ئ�H�L$(dH3%(uH��8��ފ�ff.���UH��SL��H��8dH�%(H�D$(1�H�4$H��������?H�T$H9�wXH�D	H�D$H��������?H9�wOH�DH��H��H�D$H�5+TJ�X�H�|$(dH3<%(u(H��8[]��H���p��fDH����p���!����UH��SL��H��HdH�%(H�D$81�H�t$H�@H�H�L$��H�DH�D$ H��������?I9�wZK�DH�D$(H��������?H9�wQH�DH�5eSJH�L$�H��H�D$0�NW�H�\$8dH3%(uEH��H[]��L���(p��fDH���p��fDH��L�D$�c��L�D$�[����4��@��UH��SL��H��8dH�%(H�D$(1�H�4$H��������?H�T$H9�wXH�D	H�D$H��������?H9�wOH�DH��H��H�D$H�5{RJ�~V�H�|$(dH3<%(u(H��8[]��H���Xo��fDH���Ho��聈���UH��SL��H��HdH�%(H�D$81�H�t$H�@H�H�L$��H�DH�D$ H��������?I9�wZK�DH�D$(H��������?H9�wQH�DH�5�QJH�L$�H��H�D$0�U�H�\$8dH3%(uEH��H[]��L���n��fDH���xn��fDH��L�D$�Ì�L�D$�[���蔇�@��AUM��ATI��H��UH��H�׺ SH���l�L��L��H��H��E1�H��貓�H��H�����H��H��[]A\A]�f���AUM��ATI��H��UH��H�׺�SH���Yl�L��L��H��H��E1�H���rM�H��H��跙�H��H��[]A\A]�f���AVM��AUI�պ ATI��L��UH��H��S�k�M��L��L��H��E1�H��H���΂�H��H���S��[H��]A\A]A^����AVM��AUI�պ�ATI��L��UH��H��S�k�M��L��L��H��E1�H��H���^M�H��H�����[H��]A\A]A^����H���dH�%(H�D$1�H�4$H�5�OJH���S�H�T$dH3%(uH����ƅ�fD��H���dH�%(H�D$1�H�4$H�5(OJH���PS�H�T$dH3%(uH����v��fD��SH��H�=!�H��PdH�%(H�D$H1�H�D$`H�t$H�t$H�T$H�L$ L�D$(D�L$0H�D$8�[�H�5�NJH��H�L$�H�D$��R�H�\$HdH3%(uH��P[�������A��H�щ�H�5MNJ�r��L�
�NJA�A D�PA�����wXM�YH�@H��E�Q H	�1�I��H�0H�xH��tL)�H��iɫ����Q�P1�M��tM)�I��Ei�����A�P�P�1��ff.�f�H���gAWAVAUATUSH��H��H97��s{�G1�t��H�@H�NJH�@H�,ȋC1���t��H�@H��MJH�@H�<����I��H�CH�I��I��t;H��L��H�޿H��[]A\A]A^A_���f�H��H��[]A\A]A^A_�fDH���L�mA����E�U����H�
\MJH�y�H�H�IH�4�H����L�NA����H�EI��1�H�D$��t�B�H�@H�NjVL��L�1�H���t��H�RH�,׋V������H��L��H�RL�4�L��I���1��	���M��H��L��H��1�I����M��L��H�t$H�������t,H�
�LJ��H�RH�qH��H��tH�Q����@M����M�hA����A�HA�@����H�BLJL�R�Q�H�RI�<�H��tnL�OA��tdL��I�0E1�H���t��H�@M��H�I��E1�M��H�D$�G��t��H�@M�4‹G1Ʌ�������H�@I��������t,H��KJ��H�@H�zH��H��tH�P��uh�H��L��H��1������G1���t��H�@H�iKJH�@H�<�����E1�H�ŋC���v�����H�@H�=KJH�@L���[���I�0I��E1�H�t$��t��H�IL�4�D�@H�0H��1�E��tA�H�H�IH�ϋ@E1���������H�@L������fDH�
�JJ�A �x��������y H�yH�@H��H��H�0H�PH�@�@M��H�}1�I���t��H�@H�,�H�H��E1�I��H�D$�A��t��H�@L�4ƋA��t8��L��M��H�@H��H��H���]���D1��L��H��I��L��E1��A���L��H��M��H��1��.���ff.�H��H��IJ�B�H�J=����H��H�H��H��Ð��H��IJH�@���H��IJH��H���������H+H��H���ff.����H�uIJ��H��H�H������AUI��ATI��USH��H�EIJ�xH�X�yy�H9�vH�ŐH��H��(L��A��H9�w�H��[]A\A]�H�G H��t�fD�W���t�SH�����-y�H�������{tH�C [�f�H�sH��H�����H��t�H�P��t�H��H�P��f�AWA��AVI��AUI��ATUH��SH��8L�%��JdH�%(H�D$(1��I�<$�aH�]H��t��tcH��L9st"E��tH�=HJ�x��vt��jx�H��I�<$�H�L$(dH3%(H���yH��8[]A\A]A^A_�fDH�T$ L��H��D�D$�[6D�D$��t�H�\$ H���{����f�H����T�D$����T$D�xH��L�p�@�PH��E�C�E�CA��wBH��NJc�H�>���E�U9������C��
vH���7����D�E�CH�}H��tQ@��u[H�sH���6A�E���DH�|$�a	����H�|$D�D$��_	D�D$����H��H��H�E���H��I����?4I�vL��H�EH���5H�}�x����׾����C�E�2����|��ATUSH��H���dH�%(H�D$1����t}�{H��I��uH9st[�v�L��H��H�����H��tS�xt�SH�sH�L$H��A��r���H�L$dH3%(u&H��[]A\�f�H��(v���fD1�����{������v�@���H��t@��t�H�H�� ���S�����tfD��u�H���x���u�H��[�f���H���cA�H�����u����1�����f���AUATUSH��(dH�%(H�D$1��z�XH��H��I��I��H�D$H�T$�y���H�øH�����{�H�UH�Ѓ�������������L�m H�D$�@�P�I�t�I�|�H�I�$�)�SH���s�H�EH�ƒ�H��twH���Q�H������H�L$dH3%(��H��([]A\A]Ð�� L�m�}���L�m�t���f.�L��H�T$H�����H�D$L�h�L���f��� u��{�#���H��I����c�I9��h����SH�M H��uL��越��J����1��Y���f�H�}L���T�����y�ff.�f���H���A�dH�%(H�D$1�H�L$����H�T$dH3%(uH����Iy�f���USH��H��(dH�%(H�D$1��t@H��A�H��H�E��H��tLH��H�L$��D$�M���H��H�E��H��tMH�T$dH3%(H����H��([]��H��H�T$�{��E1�H�t$���A���fDH���X��H�ŋC;��v����|$t�������H���w�������j���H���f��H�5�IH��1��y��B����x�f.���USH��H��(dH�%(H�D$1��t@H��A�H��H�E��H��tDH��H�L$��D$����H��H�E��H��tEH�|$dH3<%(H��u[H��([]�H��H�T$�S��E1�H�t$���A���fDH���0��S;��v����|$t������:w�f.���UH��H��SH��H��H�O H��t
�	H�5	AJw/�x���tIH;Xui�xwc�PH�
@HHc�H�>��fDH;tSs)�A��t��H�@H�FH��H��u�H��1�[]�D�A��t��H�@H�FH������p��f�H�AH��@���EH���[]���AWAVAUATI��USH��H��(D�*�|$H�T$H�L$�rp�;I�ƃ�����_p�I�~ ����I��A�Ft��
�����L��A9�r�@@A��'p�I�NjCA9Gw�I9�tnL9c���{�p�H�Ã�t�@A9�r�H�{ ��H�D$�L$L��H��H�T$�H��([]A\A]A^A_�P����T$H�D$L��L���H�T$��H�D$L��D�(�xL�H�t$�H��(�[]A\A]A^A_�H�L$��H�߉�KL�H�T$���I�~ IE��k���@��SH��H��� L�H��[���%�D����fD��UH��SH��H��dH�%(H�D$1��G8Fu_<w;H�FHc�H�>��f�H�H��trH�u�u`H��H���-H�$��tWDH��H�L$dH3%(uCH��[]�fD�~�n�H��H���e���H��H��t�E��H��H9pt�1���t�ff.�f���UH��SH��H��dH�%(H�D$1��G8FuO<t#<tuH�T$dH3%(H��u]H��[]�DH�uH��H�L$A������H�����~��m�H��H���u���H��H���J��t��E��js��j��D��H���S9����H������UH��SH��dH�%(H�D$1��9���Wm�xH��t;H���FD��u/H��<JH;XtEH�5�<JH��H�L$A���6�H��H�T$dH3%(H��uH��[]�f����l�H�����r�ff.����H�?H��tH����t��Ӆ�1��ff.�f���H�?�(H��t'@��t	��H���*H��H��(�fD����AU�(�ATUSH��dH�%(H�D$1���=�(�H�2AIH��;JH��sD�1�E1�A������"�H��H��L�%�;J�܌�I�$H��;JH�8H�����H�5DH���u��H�~;JH�8�����!H�p;J�!H�����C�1�E1�A������"�H��H��H�-/;J�Z��H�EH�;JH�x�@ H����*H��CH�������1�H�L$H�5�:Jf�PH��:JH��A��@����H�H�@H�@H�B�����H�@�@�@H�f�H�H��H�8I��tnI��1�f.��k�1�H��@�h��H�@�@�@����H��@I�EH��H���C�'H�C H�Hc�M�,�I�}u�H�D$dH3%(u%H��[]A\A]�fDH�@�@ ������o�H��δ�ff.����f.�����ff.�AWA��AVAUI��ATI��USH��(H�/�t$@���hH���HH����C�I��H����M�uL��L���KB�H� H�KL�k�1�H��L��H�L$�47�H�L$H����M���U�9-�I����H�D$�D$�D$HcD$H�,f�}SI�\L��H�D$H)ËD$�D$M��t�D$A�$H����H�
GGE��H�A�L���HD�I���@I��M9��{H��H��L���w��u�A�<u�A�G�L$��څ�E�H��([]A\A]A^A_�f.�H�K��@�������H�E��H��u<H���x;�I������t$���VI����H�D$�D$��H��H���X���I���l����H�D$H�t$L��L����2�I��H�`BIM��H�
F��H�5�@H�81���v��}G�����L;l$tgHcl$L��H+\$H����H�D$L���D$Hcl$H��H͉D$M���j����w���H�D$I�]�I��u�I���O���fD�D$1ۃ��R�����t
L+l$�+���L��I�U���2�I���*���H���)d�H�5�?H��H�xAIH�81��v�H�gAIL��H�5�?H�81��v�H�LAIH�5m?H�81���u�ff.�ATI��US��H��@dH�%(H��$81�H��H�}�}�L�$$I��woDŽ$���tO��tJH��$�H����\�H�������xH��$�H��$8dH3%(H��u,H��@[]A\���$��DŽ$���k�fDHc�H��5J����6J����US��H���oB�ߋ(���������ZB�(H��[]Ð��H�݁JH�0�]t�ff.�f���AUATU1�SH��CL���H���MM�I�����kH��H���A$Hc�L��H�TH���>�L9�u�H��L��[]A\A]�ff.�U��SH��dH�%(H��$�1�H��FJH�8t�P�H��4JH��H���{��H���Pi�1�H�޿�|��uH��$�dH3%(uH�Ę[]��;A�H�=�=�0�6��j��ATH��USH���H�^H�RxH��H��H9�tH9�tH9�wH9�s[]A\�A��fH�=M:IffH�EQ�	H�(�H�EH�MH�AH��H9�w(H���H��t��uڻD��������H��莋1���f.�AVI��SH��(H�|$�t$dH�%(H��$1�fH�=�9IffH�P�A��H��C$H�\$�D$$��H�D$0$���C$H�CDŽ$H��$H�C0H����H�H 1�H�qXH9p��H�|$@��$��3�������H�\$H�D$0H�t$(�H�CHcD$H�DH�D$(�nk�H�|$1�H�����H��$H�C�\$$fH�=�8IffH��O�H��X$�H��$dH3%(��H��([A^�f�1���@�Q`�I���H�@Xf.�H�T$H�B������ǀ�H�B0H��t�H�H 1�H�yXH9xtX9�uDH��$H�L$H�AfH�=;8IffH�3O�T$$�H�H�x�P$���H����-�H�|$��M	�@�Q`��vg�fDH��XH��dH�%(H�D$H1�H��1JH���a��H�ZCJH�8t�I�H�D$HdH3%(uH��X��g�ff.�f���ATI��U��H�=r:SH�������C��uL�CH�=�0JL���H�
K:1��:B�H�sL��������f.���ATI��U��H�=ySH�������C��uL�CH�=�0JL���H�
:1���A�H�sL����L�����f.���ATI��U��H�=�9SH������C��uL�CH�=E0JL���H�
�91��zA�H�sL��������f.���H��(dH�%(H�D$1�H�$��w8���u*H��H�D$�g�H�L$dH3%(uH��(�H��Ѻ1��P��e�f�H�5)>1�H����fDH��H9�t�F9�u�H�=91��*t�f.���1�H�=�8�t���AUATA��USH��(dH�%(H�D$1�H�D$����D���P�I��H�5�SH��I�}��'�H�D$H����A���.H�Ǩuz�UW�Ã�A��A����I�EL�d$H�D$L���Uf�Hc�H��H�TH�{JH�0�&�H��H�L$dH3%(��H��([]A\A]�f��;?��f�I�EH�D$A������L�d$1�H�L$1�L���w�|$���h���L�l$�H�=�7��7�H��L���Y?�H�D$�=������L�d$�<���H�D$� ����c��H��8IH�5j7H�81��#m����f���AUATU��SH��dH�%(H�D$1��G����eH�>I��H�<$@�����H��1�1���Ƀ������	I�l$A�H���yH����Y�H��tH�|JH�8�+H��>JL� ����I��$�H����1�H��$��H����1�H��RI�l�H�t$dH34%(��H��[]A\A]��{=�Ƀ�@�C���H�G7IH�5-6H�81���k�fD��	1�H��:H��H���r����H��H9�t'�B9�u�H��6IH�5J6H�81��k��H��6I��H�5P6H�81��vk�L������H��H�����Hc�I��ܘH��tH��$��H������H���a�H�=�5�p5����H���6�H�$H����H���MP�H�,$H�E ��H�UH�EH���H�
�5Hc�H�>����H�=Z�4��o���f.���J�L�-����H�����H�����1�H�
|����H9��3����H�=�4�4�����H�UH�E�h�����[��H�������������@�������H�E�����H���%p�������H���59�H�����f�xIGu�xNuy�A��K����8IGNO�CL�-���3����8EXIT�$L�-��HD�����H�SYSTEM_DH9uʁxEFAUu�f�xLTu�1�E1�����8SIG_�y����8SIG_���8DEFAu�f�xULu��xTu�1�w�H��4��Hc�H�>��L�-����fD@��t$H���F���@���<���H�E��H���+���H����,�H�$H����H����������f.�H���D����H�=#3�3��v���f�xDF�;����xL�1����B���fDf�xRE������������I�L�-���������5�ߋ(�F���H�Ɖ��x�L�-e������H��3IH�5�2H�81��(h��^�US��H���3�H���t1�H��t
H�Ɖ���H����[]É���ff.�@��H��H����t@�;9�H�=�61�H����f�H��H9�t'�W9�u�H����P���P��f��H���fD��H��61�H����f.�H��H9�t�P9�u���1��D��S�����1��U������[�T�ff.����AWAVAUATUS��H���dH�%(H��$�1����SH�>I��@����H�|$(1�H�|$(1Ҿ���Ņ���H�9JE1�A�����L�(fH�=p-IffH�hD�H�H�@0I9E(�����D�k��D$H��I���%�H�D$H�D$0H�D$�8f��7��A9�u	E��������K����H�CI9���H��I�<�@��u��N��f��K7�Ņ��6���D�k��ݻI���"�+7����r\��x}H�CI9���H��I�<�@��u��N���D��H�|$��H�T$1���L$��K�L$��x=H�D$0H���D���H�G�H9�t"�����J���'����2�1��8�"�����H�C�D$I9�����@�D$��uH�CQ�H����H�DH��$�dH3%(uTH���[]A\A]A^A_Ð����WJ����f�H�17JH�H�x(�]���F4��A�ǃ��A����A!�������Z�����E�ff.�f���H���=�$J��tHc��,�H���.��H������3�@=@M��=�$J�Ð��H��HdH�%(H�D$81�Hc�$JH�<$H�t$ H���D$H�D$��r�H�$H�T$8dH3%(uH��H��%Z�D���������Z%J�D���=J%J1���t:�H�
4$J�f�H��H��At�4��Ѕ�t�Hc��,��-%J�@1��D��H���H��u��HLJ�1�H������H��H��5JHc�H�H��ИH��u&��w���H��
�u8�u;1�H���DH��$u�m�1�H���fDH��H����@�ە���6�@��H������H�r�H9�t
H����1��H���p���ATH�=�,USH���dH�%(H��$�1��=�����H�5���H�=�,H���w�H�߹����H���H�5�,�\[�1�H��H�0�H�5]��D[�H�߹H���H�5X,�)[�H�Z+I�����H���H�5]�H�;�'2�H�;1�H���H�5��2�H�=���D�H�=,H����D�H�;H��H�\$@H����H��(I�����H���H�5��H�8�1�H����)�1�H�޿��i�H�5��������tH�=�/�
l�H�5��������tH�=q/��k�H�5��������tH�=/��k�H�5����z�����tH�=�.�k�H�5����Y�����tH�=N.�k�H�5b��
�8�����tH�=�-�hk�H�5A������������ J����H�5���
����tH�=e,� k�H�5���������tH�=,�j�H�5��������tH�=�+��j�H���g�1�H�޿�gh�H��$�dH3%(��H���[]A\�@H�=�,�j��J���E���H�5���u�H����A��1�H��H�5���HF�H��J�I�H����#��H��HF�H��J���H��1JH��H�t$ H�$L�"Hc�J�D$H�T$�m�H�$�H�5,�I��$����H���tH��HF�H�:J����U�魚�f.��SL�OH��dH�%(H�D$1���+��y�޸-�G��	~}L�T$A�gfffI�J�	@L���։��L�A�A�����)��)É؃�0�A���c҃�0H�A�A�P�M�BL9�sfL�����H��H���V�L9�u�I)�K�D���H�Gu'��0A�1H)�H�|$dH3<%(u#H��[��I���G0H�G��L�����T�fD��AVAUATUSH��dH�%(H�D$1�H���H�_H��H�:I��H�{H�<$��I��E��A��+��@��t#H����@����H���H����� �H�$A�� �FH��H���3V�H����H��H���//�H���79�H�$H� H�BH�JtH�BI�MH�U8H�L$dH3%(�H��[]A\A]A^�DH��tzH��tDH��tW��F�H�$�s�����R�H�$A�� �_���H���ՇH�$�N���@1��@H�H����w���DH�H����_���DH�H�f��G���DH����Z�H�<$H����Z�H�<$�"H��A�H���Z9�H�$I�����fDH���P���tH�$���H�<$�'|H�$����Q�H�B!IH�53,H�81��q[�SH��W(H�C�C[��H��y+H��H��H���������H��H��H��H�H)ǃ�0@�>H��H���������fDH��H��H��H��H��H�H)ǃ�0@�>H��H��u�H���fDH�������t?��~!H���H�&I����H�5H-H�81��Z�H��%I��H�5�+H�81��Z�H��%I��H�5R+H�81��zZ�f.�AWAVAUATUSH���H9�ssH��I��I��I��A�/��+�k�
pk�U��D���)�9�|YH���\�I9�t4�}L��A�T$X��u�I9�vA�H��H��[]A\A]A^A_�DH�1%IH�5�,H�81���Y�H��1�[]A\A]A^A_�ff.�@H�����t
���tH���H��$I��H�5�,H�81��Y�H��$I��H�5S,H�81��iY�f���H�~t	�W��t1��f�AWAVAUI��ATUH��SH��L�&H�GM�4$I�\$I���H��t%��u6I�MH)�I�H)�I�MteH�E�UH��u�M�4$I�\$I�����H�}H9�sOI��L��L����h�H�EH�}L)�L�I�MH�EH��1�I�H�}H)�I�Mu�H��1�[]A\A]A^A_�DH��t�I���ff.���AWI��AVI��AUATUSH��L�oI�mI�E�� tI�EI�}�>I�PH����H��������H9��M�>I�^I�ԁ�0I)��	H���H��L)�H9�|�H��L��L�D$�U�I�EI�ML�D$H%���H	�� I�m��L�I�^I�(�f.�I)�H�H��M��~*H�]H��t�H�uH��H��I)�H���g�H��H�M���I�I�EI�E tI�EH��L��H)���F�H��1�[]A\A]A^A_�I�M�q���H�`"IH�5(H�81��V�H��IH�5�'H�81���V�H��IH�5�'H�81���V�ff.�@AWAVAUATUSH���GH�|$ H�T$0dH�%(H��$�1�f�D$��HDŽ$�f��
��L��$��D$<I��L�\$L��L��$�HDŽ$�DŽ$�H�D$P�D$H�D$LH�D$@H�D$(A�E���L��%u��A��%��H��D�eE��u�I��M)��MH��$���$�L�+H��L�s�L�H��$���$���~$H����H�|$ H��$��
�����uyH�\$Lt$(E����Ƅ$�H�E�����E1��D$8��D�L�hA�A�Z��H�
�)Hc�H�>��f�I��M)�t��G����"���H�D$ �@@H�����HDD$(H�D$(H��$�dH3%(H�D$(��-H�Ĩ[]A\A]A^A_�H�D$ D��H�@0H��t��P��uA�}��%D����H�D$0������aA��@����/��!H�|$0�ƒ��HWHc:H��H���W��H��$��
�����D�����T$D�����T$H������$����-E1�1�L��$�1��H�|$0���/�����HO���D$8��y�؉D$8A��fDL���h�����H��IH�|$0H�D$P�A������/���ƒ�HW�H�:H��$�H��t
A�����Ƅ$��������D��H��������T$��
�u�������oH��A���$�D�|$LI�L��$�1��D�|$������l$HH�|$0�G=����ƒ�HW�G�
f(�fTUj�L$@f.?j��D$f�ۃ�f/ىD$�p��$�A�1�L�5�#�z1����I��A�DA�E�M�A�IЃ�	v�D$8A�A�Z����E����D��$`D��Ƅ$�1�1��D�|$A���D$L��$`fDH��$���I���|$D�T$I�D$��LE�A��u$HcD$8L)�Hc�Hc�H9������H��~���u��$���H��$�H�CH��H�C�H��$�H�P��$�H��$�����$���~@H���?H�|$ H��$�D�L$`D�T$X������#���H�\$D�L$`D�T$X@�t$����H��$UH�CH��H�C�H��$�Ƅ$U0H�P��$�D��$VH��$�����$���~BH����H�|$ H��$�D�L$`D�T$X�����������H�\$D�L$`D�T$XfDA�����H+�$�Hc�Lc�H9��9���D��$�H��$�A�p��H��~���YH�s�D$��H��$�L�3��$�H�H�SH��$���~(H����H�|$ H��$��f������H�t$Hcl$8�D$��H��$�I9�LL�Ld$(H���D	A�EH�\$DŽ$��������H��$��p���H�|$ H��$�����Y�����$������Ƅ$� ���H�|$0���/�X�ƒ�HW�L�2H��eM��LD�D�����D$����Hc�1�L��D�L$H���z
�H��D�L$H��t
L)�Hc�H9�HL�H��A�D�|$LI�Ƅ$�1�1����H�|$0���/�%�ƒ�HW�H�:A��H��IƄ$�A���D$1ҽH��$�A�xD�|$H�D$PL��$`H�L$PM��7DH��I����H���A�u�I��7I��M)�Ic�H9�LM�����H�D$0�A����A��@����/�.H�|$0�ƒ��HW�:�H�|$0�A�����/�i�ƒ�HW�H�H�t$(H�0���A������A��@��������A��D�|$��������H�|$0��G=�����H�|$0H�WH�BH�G�u���H�D$0�A����A��@����/�H�|$0�ƒ��HW�:�D�|$���
���A����D�|$�l$H���H�|$0���/�
�ƒ�HW����$`���A����Ƅ$�+���A�π����E�MI�EA��*��$A�I�1�	w&fD�L�H��A�lI�D�H�A�IЃ�	v��H�I���������/A��D�|$������@���H�D$0A�����/��H�|$0�ƒ��HWH�H��H�������H��Ƅ$�-H��H��$��
��������D��Hc�A�����D$H��	�L��$�D�L$XL���M�D�|$D�L$XI)�I����$�Ic�H9�I��LM����A�����H�D$0A�����/�TH�|$0�ƒ��HWH�:H��$��
����H�D$0A�����/�1H�|$0�ƒ��HWH�:H��$�����H�IH�|$0H��H�D$P�A���H���A��@�k��/��H�|$0�ƒ��HW�:�4���H����DŽ$��D$��H�\$�H�s@�L$���<�|$<��A�H��Ƅ$X.H�C��$WH��$WH�H��$���$�����D�OI��\$<I�p��~m�S�I�ND��$�Hc�I�H�I�PH��$�A����H���$H�|$ H��$��S�������$�L�D$H��$�D�OI�p�l$H+l$<����H��$YI�HcT$LH�I�PH��$�D��$�A�������H���m���DŽ$�Hcl$8H�t$�D$uI9�IM�Hl$(����H��L)�Hc�Lc�H9����H��$����J���H���A�����$����tL�=+ H��$�L�d$L��H�l$M��I��E��H�l$ H�\$I���fD�OH����A��A��~aH���WL�6H�FH��$���$���~�H����L��H��������S��$�A��H��$�H�ލOA���L��L�d$H�l$Mc�M��I��L�L�>L�vH��$���$����K���H�������H�|$ H��$��q���� ������@HcD$8L)�Hc�A��H9������N���H���E���H��$���$�����H��H��$�L�t$`H��L�d$hH�\$I��H�l$pL�d$ D��M��D�L$XI���f�D�WH���σ���~`H���OL�.H�FH��$���$���~�H���oL��L����������$���H��$�H��D�W���L��D�L$XM��L�t$`A��L�d$hH�l$pH��Mc�H�H��L�C�I�L��$�D��$�A���0���M����H�|$ H��$�D�L$X�����k�H�\$D�L$X���@H�|$ H��$������������9�f�A��e�V�l$@f�f.��*	�$	�|$<��H���H��H�CH�H��$���$���~2H����H�|$ H��$�D�L$�G������H�t$D�L$�D$<�\$H�h�9�}1��l$HA��f��)Ņ������H��$�D��$�����L�|$ L�t$L�d$H��H��$�I���A�xH��A�ȃ�����H��A�HL�&H�FH��$���$���~�H���H��L���������D��$�H��$�L��A�x똃�H���H��$�L�t$`H��I��L�d$hH��E��H�l$M��D�L$XL�l$ �fDA�xH��A��A��A��~dA�pH��L�1H�AH��$���$���~�H����H��L��������0�D��$�A��H��$�H��A�xA���M��L��Mc�D�L$XL�d$hL�t$`H��L�H�L�{H��$���$����&���H������fD�E1�H���3����1�H�������A�1�H���J����d$@f.����D$�T$@f�����D$`�N�1�A��f@�ǃ�f/��D$�E�|$@f��f.��n	�h	fP��|$h���؃�-�D$pD�ȃ�߉D$X��A�c	A��a��H��IH�x�t$�D$hH��$�H��$�L��$�D�L$<�jD�L$<I��L��$�Ƅ$`L��$`M)���
M�L��D�L$<L��$���L$D�L$<����H��$�L)��|$XGHc�$�I�ĉD$<������
���N�9���
9��7���`�D$`H��A�A�gLI�D$�D$���|$p�D$��
��$�1�M�������|$<��A�H��Ƅ$V.H�C��$UH��$UH�H��$���$�����D�OI��\$<�l$@f�I�p��f.�z��Hc�I�ND��$�H�I�I�XH��$�A���H����H�|$ H��$������
���$�L�D$H��$�D�OI�p�l$���U����\$H��+\$<���B������]H�L�d$A��L��$�H�\$ L�|$L�l$XI���D�OI����A��A����H���OM�(I�@H��$���$���~�H���L��H��������C���$�H��$�M��D�O�H��$���$�����L�=\H��$�L�t$hH��L�d$p��M��I��H�l$xM��H�l$ D�T$XL�l$D�L$`��D�_H���σ���~`H���OL�&H�FH��$���$���~�H����L��H�������|���$���H��$�L��D�_���M��D�T$XM��D�L$`L�t$hH�l$xHc�H��L�d$pH�SH�H��L�{�H��$�D��$�A���p�H����H�|$ H��$�D�L$`D�T$X�{������H�\$D�L$`D�T$X�/��1�A�L����DŽ$�H�\$�/�H�D$(f������D$��H��L�3H�CH��$���$����I��D�OH����H����H�|$ H��$������%���$�H��$�L�D$D�O���DŽ$�H�\$���DŽ$�H�\$�n�����L�|$ L�t$L�d$H��H��$�I���f�D�OI���σ���~\H���OM� I�@H��$���$���~�H��t{H��L�������`���$���H��$�M��D�O���L��L�d$I�HHc�I�H�I�hH��$�D��$�A����A��H�qI���p��A�1�M���B�����$����v��HcL$<L�39���H�H�KH��$���$���~/H����H�|$ H��$����������$�H�t$+T$<�Յ��:�D$���H�V���$�H�FH�H��$��SH����$�H��$����/�H���N�H�|$ H��$�D�L$X���������$�H��$�D�L$X�{H�\$��H���H�|$ H��$��L��������$�H��$�L�D$D�O������/��H�|$0�ƒ��HWH�:H���!�H�|$0H�WH�BH�G�\��T$<�����D$<I�NH�\$A�H��$���H�sH�H��$�D��I��A��H���r��D�|$�l$H��H�t$0H�VH�BH�F�o��D$HD�|$���H�|$0H�OH�AH�G���H�|$0H�WH�BH�G���A��@�5	��/�SH�t$0H�VH�BH�FH��T$(f��m�H�|$0H�WH�BH�G�����/��H�|$0�ƒ�HW��:�����/��H�|$0�ƒ�HW��:����/��H�|$0�ƒ�HW��:��H�|$0H�WH�BH�G��H�|$0H�WH�BH�G���H�|$0H�WH�BH�G���d$@D���D$p����d$h�D$X��A������t$�D$hH��$�H��$�L��$�D�L$<�JD�L$<I�����D�D$A��DD$<u@H���H��H�CH�H��$���$����\��/��D$���H�
��H��D�WH�CH�H��$���$�����
HcT$<L�6D��$�H�H�VH��$�A����H����H�|$ H��$�D�L$�(�������H�t$D�L$�l$�����D�t$HD+t$<A��fuD�$�E�����H��$�D��$�A���
H�wH��$�I���A�xH��A��A��A����H��A�@L�>H�FH��$���$���~�H���j
H�|$ H���d�������D��$�H��$�H�t$A�x뒐D�|$D����$���L��$`M��7�@M��M�p�����0H��A�@�u�<0�F����>�I��I��7I��A�F�0L)�M��Hc�H9�LM��G���$�D�|$���Hc�D�|$���Ƅ$�-A��-1�L�5��Ƅ$�-�-1�M�����Hc|$H��$�L�A��f�H9��U��H�PH��$��0H��$�H9�w��,�|$XA��A��f�]���(	����t5Hc��D$`H��A�A�fLI�D$�C�D$�s�H��L�3H�CH��$���$�����H����H�|$ H��$�����������$�L�D$H��$�D�KI�p�>��\$<�d$@f���f.��y�sL�D$1�A�I�p��������
L�|$ L�t$L�d$H��H��$�I����OI���������-
H���wM� I�@H��$���$���~�H��tRH��L�����������$�H��$�M��O�fWe[�D$p-�T$h���E1��L����1��M���h����7L��L��L��D�L$<���D�L$<��l$��A�QH��$Y��$�D�L$A������D�L$A���D$LB�4 A��A����t��Hc�A�D�t$H��LI��=�A��1�M����A��g�EA�eDEȃ�D��D�L$H��$Y��$��n��A��D�L$�D$LB�4 �D$t�D$H��Hc��D$`A�H��LI�D$��A����U�L�D$A�1�I�p��D�|$��$���0H��A�@��$��LO�L��$��t�H�=m�H�n�H���z�L�D$1�A�I�p��Hc�I�NH�\$A�H��$�H��$�H�sD��I��A��H����D$A�1���$�L�5LR���D$���H�|$0H�WH�BH�G�g��H�|$0H�WH�BH�G�*�����$`0u/�d$hf�۾f.���Eք�t�+t$��$����$�Hc�H�H9������D)��D$<��������)
���D$`A�fM�I���D$L���"�H��$YH��$�HcD$LH��$�H��$�H�D$DŽ$�H�p��L��D�L$X1���	�D�|$D�L$XI��H��$���$�����H�t$0H�VH�BH�F���H�t$0H�VH�BH�F�:�
��H�t$0H�VH�BH�F�:�c���/��H�|$0�ƒ��HWH��T$(��;��H�t$0H�VH�BH�F��H�t$0H�VH�BH�F�:���H�t$0H�VH�BH�F�N�H�t$0H�VH�BH�F����)�O�D�Hc���Lc‰�$�L�L�CH��$������H���H��M�H�FH�H��$���$����}H���H�|$ H��$�D�L$�������W����$���$�H��$�H�t$D�L$�{�\$<L�6��$�)�Hc�H�H�VH��$�����H���H�|$ H��$�D�L$�y��������H�t$D�L$�l$����D�t$HD+t$<A��fuD�$�E������H��$���$�A���|H��H��$�I����xH��D��A��A���H��D�@L�>H�FH��$�D��$�A��~�H����H�|$ H������������$�H��$�H�t$�x�L��$�H��$����I��H��$���DŽ$�H�\$0���/���ʃ�HS�H�D�L$H��$��D��$�H�|$ H��$�H��$���Ƅ$�I��H���m��D��L��$�D�L$������D$�?Hc�L9�~Ic�H��A�D�|$H�\$LI�1�1��2��I��D�OH����H�
��H��D�WH�CH�H��$���$���~LH���
H�|$ H��$�D�L$�T����������$���$�H��$�H�t$D�L$D�W��ۅ����H������A��H��$�D�L$H���D�WH����A��A����H���OH�H�FH��$���$���~�H����H�|$ H������������$�H��$�H�t$D�W�HcD$<L��$�DŽ$�H�t$H��$�H��$�H���5��Hc���H�t$0H�VH�BH�F�F���H���bH�|$ H��$�D�L$�
�����r��Lc�$���$�H��$�H�t$L�{D�L$���H�t$0�ƒ�HV���H��$�D��$�����H�QH��$�L�t$I���A�xH��A�������,H��A�@L�>H�FH��$���$���~�H��tUH�|$ H���?��������D��$�H��$�L��A�x�1�A�H�t$����DŽ$�H�\$����E1��L���c���L��L�d$Hc�H�H�H�nH��$���$����9����L��L�d$M�PHc�I�H�I�XH��$���$������D�II�r��M�����D��L��L�d$L�l$XI�HHc�I�H�I�XH��$�D��$�A�������L�D$1�A�I�p��DŽ$�H�\$�����E1�H�t$�I�D$<L��$�DŽ$�H�t$)�H�H��$�H��$�H���X���H�%�H�t$MƿHDŽ$�H��$��H��������DŽ$�H�t$�<�H�\$0H�SH�JH�K����D�L$H��D��Hc�H�H�H�^H��$�D��$�A���6H��A�����1�H�t$����D�_L�=��5��OL�=��A�L��Ic�H�H�FH�H��$���$����F����H�\$ H��$�D�L$H����������H�C0D�L$�&���H��H�8��D�WH�(�%�DŽ$�H�t$�H�1�A�H�t$�$���L��Hc�H�H��H�F�H�H��$���$����%�H���+H�|$ H��$�������m��H�t$��H���i���H�|$ H��$�D�L$�������;����$�H��$�H�t$D�L$D�S�8���Hc���M��D�|$H�\$LH�1����DŽ$�H�t$�����D$`I��D$���DŽ$�H�t$�>�I��D��H�����A�xH���F���H�|$0�7��/wB���HO�7D���I��E��I)���H��H������DŽ$�H�t$���H�|$0H�OH�qH�w�A�xH�i�����A�xH�Y��[����xH�J�����p�Hc�
t3��������tI��1�L��$������D�����(��0�0�ff.�SH��H��H��H��@dH�%(H�D$81��H�<$f�D$H�|$H��tZH�D$0H�C�H��H�D$H�D$ H����H�D$(���H�$�H���������HG�H�L$8dH3%(u9H��@[�f�H����H��H�D$H�D$ H�D$(H�D$0�1����Z�f.�AWI��AVI��AUATUH��SH��H��hL�oH�?dH�%(H�D$X1�H��%0�D$t!H�C�� tH�CI��I)��f�E1�H��H�D$0f�D$ �*�H�|$L��L��H�CH�D$H����H�D$8H����H�l$H�kH�\$(H�D$@H�D$H�V��H�L�k�� tH�kL�t$M��I)�%0�D$tM9�|+L��H��� "�H�D$XdH3%(uBH��h[]A\A]A^A_ÐH���#�H�L$J�|%L��H���:�H��T$H%���H	�H����f���H��tH��~
���D������f���H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��tH��~IH��$�H���$H�D$H�D$ �D$0H�D$����H�L$dH3%(uH�������������ff.����AUI��ATI��UH���xSH���/.�H��H��t�}8H��H����H�sH� tH�sL��L��H���W���H��H��[]A\A]�H�r�HH�UH�5?�H�81��
#�ff.�f���H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$��H�L$dH3%(uH������ff.���H��H��1��o��ff.�@��H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$�S�H�T$dH3%(uH�������fD��UH��SH��H��H�|$H�|$��H�|$���H�|$H� H�GH�wtH�GH�H��H���/���H�D$H��[]���H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$�x!�H�L$dH3%(uH������ff.���AWAVAUATUSH��H�t$pH��$�dH�%(H��$1��GH��$�HDŽ$�$�D$\H�F�H�D$`�2�H��$����H��$�H�D$�C��H��$�H��H��$����H��$�L�HH� tL�HL�ɿxHHL�$H�L$�8*�H�t$I��H�����I�EL�$I�E tI�EH�xH�H��H�@pH)��Hx1����H�I�EH%���H
I�EL9L$�5)�D$8E1�L�ɽx�D$XM���D$,H�D$0�I��H�D$�	fDI��A�<$%I�\$tH9�w�I�D$I��H��H9\$��*I�EM��I)�%0H�$�f�H���%H��L)�L9�|�L��H��H�L$ ��I�EI�}H�L$ H�|$H%���H$�� I�Et	I�EH�D$M����	�D$,M�=0tSL�|$0M9�}IH�|$H�T$H��$���$�J�47L��X3��$�I�I�EL�|$0H%����T$,H	�I�EL9d$��#H��$��$H�D$PH��$�H�D$@�D$ ����H�D$HDŽ$�����A�T$A�$�B�<[��H�5*���Hc�H�>��I��$��!D�<$L��$�A��A��A���k
M��t.A��uI�$H�ƒ�H��
��H���yI��$�L�����D�$H�ƒ�A�� H���*�@f(��]4fT
]4f.��f.���#f��L�=��f/��a
�$����6E���$A��D$@+�D$�P
�D$8����L��I��$�� �;pL����
�j�H��$�L��L��L�x��D$,=0t\L�d$0M9�}RH�|$H�T$H��$���$�J�47L��Y1�0Iċ�$�L�d$0����I�EH%���H	�I�EH��$�L�����H�D$�$`�H��$�H�pH� �4H�xH�H�T$�c��H���@(�$@t^Hc�$�H9�}QH��$�H�pH� �H�xH�H�L$�]��H��$�I��Hc�$�H�JH� tH�JI)�M�eA��0�$ �HcT$ H��H9��	)�Hc��L$H�D$ I��
@H���!H��L)�H9�|�H��L�����I�EH%���L	�M�eI�E�� ��$K�<4���!H��$�H�pH� ��M����H��$�H��$�H��$�M�����Lc|$K�<4� L��M��-���I��$��L�����H�����$@DŽ$�H��$����I��$���L��$��D$h�H���6w2�H��H�@ @H����H��H�����ɉL$hE1�$��@I��H��$�H��u"H��$��t�H��$�H��$�H��tި��H��H���H��t�H��$tè��<��f��$� ��#����#�S��H���$�B�<[����H�D$���H��PX���uH��H�H�5X�H�81���$ ��#�$��y#�S�$H��������<��H;\$s[�D$h}L�t$xM��L�t$I��H��$�H�l$L��$�I���\$h�DA8$��
L��L��H������H�I�L9�w�H�g�HH�5@�H�81���H�L$HH�T$H��DŽ$�H�t$�t���H��H����"���$���$ �Y"�$��7"��$��$ �D$ �4����$� ��"���p"���SH���$�����$��#"D�<$L�CDŽ$�A���{*�nH�L$PH�T$L��H�t$�̼��H��H���6$�D�<$����$� �"����!���SH���$����$� ��!����!���SH���$�h����$ �e!�$��C!H�L$HH�T$H�{DŽ$�H�t$�1���I��H���\!�8$�HD�|$X�|$8D���˼��A�GD;|$\�Z#HcT$XH�|$`�D$XI��H�<׉T$8H��$�@���B���D$ ���B�؃$"�D$ ���� I�_A�W���D�$E���"M�eA��0�fDH��H��L)�H��~�H��L����I�EH%���L	�M�eI�E�� �wC�4%I��f.�H�KH9L$������\$8�|$,M�������0tEH�D$0I9�~;L�H�T$K�44��$�H��$�H���*�I�E��$�H%���H	�I�EH��$�H��$��o#�D$\9D$X}>��t:��uH�D$pH�H���0���H������� ����H�������P�L��L����L��H��$dH34%(� H��[]A\A]A^A_�H�D$L��H��J�<0�$��b���H��������k��
��<b����<o��<x��H��$��
���H��$�H�PH� tH�P�:@�|$H@��-�t�$���l$ H�T$�D$H+�D$PHPH��H+|$Hc�A��H9���O�;X�D$x
�D$@�~
H�T$�:@���m
H��$�H�l$H��$�H��H��H�����C��;@��u�H��$�H��$��)
�������H��$�H�H�D$�<b�L��<o��A���D$@�D$H�D$x��������H��$�H�ƒ�H�����@��9f/���H��$�H�ƒ�H���a�@���H��$�H��$���'����'���L�%��<b�	�����L�%�<o��<xA�H�}�LD�����H���HH�5r�H�81��<�M�e���E�����D$@-A�L�=4��D$M�eA��0�H��(H��L)�L9�|�H��L��L�D$ ��I�EL�D$ H%���L	�M�e�� I�EtM�eK�4HcT$� L�D$ H�����L�D$ H��M�$�d�t$@@��t@�0�D$L���H�H)�L�A�f�A�G�A�����H��$�������$��|$8�T���Hc�$�;D$\�H�L$`�D$8����H�<�H��$�@��������
��D$ ��������$ ����H�L$HH�T$H�{L�D$hDŽ$�H�t$�M���L�D$hH��H���j�8$���\$X�|$8L�D$h���߶��;\$\�CL�D$h�kHcT$XH�|$`�D$XH�<׉T$8H��$�L�D$h@�������L�D$h��$���yD�<$A��A�πI�XA�PD�<$���$�I��$�z�|$8�#���Hc�$�;D$\��H�|$`�S�D$8����H��L�$��c�H;\$������D$h>�J���H�D$�$@��$���D$hM���D	��D$PH�|$��$��VHc�
���L��H����H�|$�I������L��H���i�H�t$H������D$HH�D$@I�ľ
L���+/��Hc�$�H�T$@H�D$HPH��$��NH9�Hc�HMу|$PH��������H�HcD$ H9�~H��H)�H��H�L$M�eA��0�H���H��L)�H9�|�H��L�����I�EH%���L	�M�eI�E�� tM�eH�|$K�<4t
�$
��E�����T$h��t� I���K�<4H�|$t�$��
���TH��$�H�L$@L�xHHH� tL�xHc�$�H9���0��$�I����~	C�4.I���D$H���Hc�$�H9�����~H��K�<4H)�I�4���Hc�$�I�H�|$t
�$��H��$�H��$�H��$�����D�|$X�|$8D��詳��A�GD;|$\�8HcT$XH�t$`�D$XL�$։T$8L���,��H���&�L��A����� ��I��E���6H�M�HH�5Y�H�81����H��$��1��(�H��$��]�L�%��<B�D�<XA�H���LD��,�<x�Y�D$@A���D$H�D$xH��$�H��$��t��H��H=������|$h����H���HD�1����A�E)�H��$�H�PH�pMc�H� �v
H��$�A�����D$PH��$�H�PH���1�H�52�*�H�PH���H���H��$�H�PH9���H� u�H�T���<B��<X�<���A���D$@�D$HH�D$�D$x����<B�Z<X�����H�D$H�����$�}�$�6�l$ �D$H �D$PH�|$	�
L��$�H�|$L��螯��H�D$A)������H��H��L)�L9�|�H��L����I�EH%���L	�M�eI�E�� tM�eH��$�H�pH� tH�pM����H��$�M�H��$�H��$�H�t$L�������L��M��M��L�t$xL��H��$�L��$�H)�H��������BH�|$@�D$x�D�L$8E���B�|$8��'H��$�H��$��H��$���H�CHc�H�T$H��H��$�H�t$8�)��H�D$@H��H��tgH��$��$����I��H��$uH��$�H�t$@���I��H�����|$h}��I�_A�W�D$8�������H�xH����I��$u�H�T$H�t$8H��$���H�D$@됃|$\��H�D$pH�T$8H�8����H�T$8H����H��$��
���D�|$X�|$8D���&���A�GD;|$\��HcT$XH�|$`�D$XL�$׉T$8��H��H9���f�M�e�H��$�Ƅ$�Hc�$�A��0��$��$@�E����
H�n��$tH�F��F� H��H��$t�F�0H��H���$t�F�-H��H���$t�F�+H��H���$t�F�#H��H���F�%L��L���$�u���$H��L���0��I�EL��H%���I	�M�e���M�uH��A�� ��M�e��M�eA��0���K�<4L�������H����H��1�����A�E)�H��$�H�PH�pMc�H� tH�pH��$�A����D��D$PH��$�H�PH���
	1�H�5B-�)H�PH���H���H��$�H�PH9���H� u�H�T���H�pH�t$H� t	H�pH�t$�L$P����$�8
�l$ �D$H+�D$@H�HH� tH�HH�<H+|$Hc�A��H9��xB�D�\$@E��t
��$��l$ �;X���M��tHA�|$��D�T$@E�����$��@A������tD;�$���L�����)D$ �$��J������$�D9�}$A����M���„�t���"D��$�D���L$ )��ȉL$ �$������I�M��0H�L$ Hc��f.�H���H��L)�H9�|�H��L��H��$���I�EI�UH��$�H%���HD$ �� I�EtI�UJ�<2� H��H�L$ ���H�L$ �D$ I΀|$H��M���?I�UD�L$@��0I��E�����$�D9���D)�Hc��
@H���H��L)�H9�|�H��L�����I�EH%���L	�H��I�EI�E�� tI�E�|$h�����t$P�����L$x�7��t����
1���@�ƍtv.��$�J�<0D)�Hc��.���$�M�eD)�A��0H�I�Mc���H�� H��L)�L9�|�H��L����I�EH%���L	�M�eI�E�� tM�eM����H��$�M�H��$��L$ H��$������M�eHcL$ A��0�f�H���
H��L)�H9�|�H��L��H�$��I�EH�$H%���L	�M�e�� I�EtM�eK�<4H�ʾ H�$�&��H�$I��j�E����D$@���D$,����M�e�>�1�$��E1�L$h�$�L��/�A���D$@�D$HH�D$�D$x����H�pM���(�L���$��$��M�e�$K�<4�����H�T$ � �$�X��Lt$ �D$K�<4�$��L9��
H��$�H�ƒ�H���Z�@f/�(�,�H��$�H�Ѓ�H���g
�H,BH�LH��$��]��D$@��H�H;�$����D$H���	H�|$�0����'���H�p���DŽ$�����D$@-L�=����|$ 9�LljD$Lc��H�����I���>�E����A��D$@ �D$��H�xH�����l$ �D$H-�D$@���H��H��H��?H)�H	�H��H�D$�~D$��A��D$@�D$����$��|$8�ڥ��Hc�$�;D$\��
H�t$`I���D$8����H�<�H��$��(�L�����L��H�D$�r��I�ă��$@�>H�����I�$�<$���|$h�� �.D	�H�|$��$��|$P�����I�Hc‰T$HH�D$@���H�D$�$@u�DŽ$��A���D$@�D$H�D$x�P�f�H���H��L)�H��~�H��L�����I�EH%���L	�H��I�EI�E�� tI�EA�..fF�0M�eI��A��0���A���_���H�D$�80�Q����$E1��J���Z����D$ �|$H�D$ ��$��(���I�E%0H��$��DH��(H��L)�H��~�H��L���!��I�EI�UH%���H�$�I�E�� tI�U�D$HB�2I��M�������L�����I�}Hcȁ�0H�|$H�
@H���H��L)�H9�|�H��L��H��$���I�EH�T$HH��$�H%���H	�I�E�� I�UtI�EH���I��B����D$@��tC�D4�A�K�D4�f�A�W�P�^�H�xH�|$H� t	H�HH�L$�|$P�D$H���|$@�M���H�t$D��D�d$�|�Lc�E�����H�|$D���3�A�ą�x/H�|$����A9�t D��L�����D���:���D$, H�D$M�eA��0�$ �!�D$ �����D$ �I�D�H��$u�H��XH��L)�H9�|�H��L���Q��I�EH%���L	�M�eI�E�� tM�eH�D$K�44�|$H��P0Ic�IƋD$ ���.�Lc�K�<4� L��M��Ƕ���f�H���H��L)�H9�|�H��L�����I�EH%���L	�M�eI�E�� tM�e�D$ K�<4���tH�D$H���|$H��P0Ic�I���fDH��hH��L)�L9�|�H��L���a��I�EH%���L	�M�eI�E�� tM�eH�D$K�44�|$M�H��P0�H�H�t$K�<4L����� ����+A���|�A���� �-D��f��$��B���o��0I�����D�|$X�|$8D���ϡ��A�GD;|$\�^HcT$XH�|$`�D$XL�$׉T$8���D�|$X�|$8D��蔡��A�GD;|$\�#HcT$XH�t$`�D$XL�$։T$8����D�|$X�|$8D���Y���A�GD;|$\��HcT$XH�t$`�D$XL�$։T$8�	�H��L��H�L$ H)���
�H�L$ Hc�$�H��H��H)�I����HcT$HK�<4�0諴�Lt$@�����L�D$h�<�Hc|$ H��	��D$�����D$H����H��	��H��$��D$����D$H�p��@�.���H��J�<0L��H�L$H�6
�I�UH�L$H�����\$8M��������H)�K�<4�0H�L$ ���Hc�$�H�L$ H)�I�H���{I��$�A���D$@�D$HH�D$�D$x��H�@I�L��H��L9���A�����L�d?D�|$P����<$�D$H���|$@���l$ �D$@�D$H ���$�J�<0�0D)�Hc����L��A������V:�D�|$PI���h�L�|$K�<4� L��M�����T�L�=@�;��H��HH�5��H�81���H�T$� 踲�Lt$K�<4�=��D$ ��H��$�H��� �	����D$@ �����D$@+����f�L9����H��H��H��?H)�H	�H��H�D$�~D$�r�DŽ$����H��H��H��?H)�H	�H��H�D$�~D$��HcȾ H��H�$���H�$I�K�<4�h�������H���H���������l$ �D$H+�D$P��H�r�l$ H�t$�D$P�������L9������H��H��H��?H)�H	�H��H�D$�H,D$H�L�k���H�؃l$ H�D$�D$H-�D$P������H�t$�>0�
�E1������$�D�|$@���D$A���0��$�H��$�H�D$��L�|$�0L��M��Ͱ�K�<4��L9����H��H��H��?H)�H	�H��H�D$�~D$�}�;X�F�fE��=��0H��@�>�
���0H��$�@��$�����H��K�<4L���[�H�L$ �l���H��$�H�t$@�_��H�t$@���^����$t[�l$ H�T$�D$H �D$P���D$H�D$P�����D$XE1����O��A�����I��D�|$P��H�T$�D$H�D$P��H�D$E1��80A�����H��HH�5�H�81��i��H���HH�5��H�81��Q��H���HH�5S�H�81��9��H���HH�5�H�81��!��H�j�HH�5h�H�81��	��H�R�HH�5?�H�81�����H�|$@�׸�L$xI��H�|$I��H�!�HH���H�01��0��H�	�HD�L$8I��H����L$xH�|$H�01�������H�ۿH��H�5��H�81��x��L��L�|$H�$H��H�SL������L�$I��L��AR�T$pI�H�A��H���HRA)�H���H�01����H�r�HH�#�H�5�H�81��
��f.�H�I�HH�5R�H�81�����H�1�HH�5�H�81�����H��H�L$xI��H���H�|$H�01����T$xH�|$H��1�H��$�H�5�����H�T$@H��H�����H������H���HH�5P�H�81��Z��H���HH�5d�H�81��B��H���HH�5Z�H�81��*��H�s�HH�5��H�81����H�[�HH�5��H�81����H�C�HH�5�H�81�����f�����~H���H�vH����PH��HH�59�H�81����f.�����ŝ���t(�r�H���J ��Bщ�H1�Hi“���u��@����1�H9������H��H��H��H��H	�H1��f�H�GH�GH�G(H�G H��t'�H�
��1�H��H��H�TH����fD���������H��uH����@��u�H�H�ƒ�H��t��u��Q��AUI��ATI��UH��SH��H��H�����H�#�HH;uL�����I��H�CL��P�H���HD�H�S(H�JH�K(H�RH�S0H��H�L�iH�iH�CM��tA��t1H��t@��tH��[]A\A]�H��H��L��[]A\A]�S��L��L���E�����OI�����I���OH�I��L��H!��!��H��v(H��H�T0H��L!���t�t��t H��H��w��D�G��f.����ff.�AWI��AVI��AUI�����ATI��USL��H��(�OL�G0H�H��H��H!�A�v�5�,H��vHH�DmI�D��L98tGI��J�D#H��L��H��H��H!Å�tʃ�������H�,�H��w�H��u�H������EH�pL�D$H9�t7A�NI�FH��H�T$�L$�H�T$�L$��L�D$uJA;NH�����HE�H��(H��[]A\A]A^A_�f��,_�;�����,��,����A;NuI�~A�NA�v� ���H������ff.�AWAVI��AUI��ATI�����UH��SL��H���OL�0H�H��H��H!�A�u�4�H��vCH�@I�D��L90tHH��H�DH��L��H��H��H!Å�t˃�tv���}H��H��w�H��u�H������>DH�pH9�t0A�MI�EH��H�$�L$�H�$�L$��uFA;MH�����HE�H��H��[]A\A]A^A_�D�_�K�������<����A;MuI�}A�MA�u�/���H������ff.�AUATUSH��H�F(H�V L�o0H�_�oH�N0H9���H�TRH�@I��E1�L��L�$��@�I�CI��I�AM9�tsI��I�y�A	t�K�RI�Q�I�D�H9�t�AoA�I�Q�H�PH��t�I�q�L���Q���I�R��t���t��t/H���f�f�C�f.�H��[]A\A]�D���c����AWAVAUATUSH��H��8H��~6H��I��H��H��H��L�l2@H�MH�UL��H��H�����I9�u�I������{H�{�o����H�k H�S(H�CH9��@H�DmH��L�c0L�}H�HM�,I�}��
L9��H�HH��I����I��H�EH9���L�c0H��M�I�$H���t�I;Eu�I�|$I�uH9�t8�CH�L$L�$�D$H�C�L�$H�L$���D$��;C�&���H�S(�Ao$AEI�D$I�EH�E�M�4$H�kH9C �d���H�C0H9���J�|���J�t0H����H��H�~�u	H��H9�r�H�C I��H�EH9��(����H��L��I9�����H��8[]A\A]A^A_�f��CL�=���D$/�H��I�tH���l��1�I��H�C�L��H��I�TH���ۤ�L�k L;k(s�I��M��H�S0K�@L�,�I�UH����A�KL��L�D$M��D�T$/I��H��H��H!��?fDE�$/I��vQH�s0K�dL�\��I�I9t`I��I�D-H��L��H��H��H!�E��t�A����A����M�$�I��w�L�D$I�@E���
A�@A�/H�C(�z@I�xI�sD�$H9����KH�CL�D$L�\$ �L$��L$L�D$��D�$��M��L�\$ L�D$;K����I�EI�CH�C(M�uH�kL9c ��I��I9�������O���E�$o��fDH�C(��f.�E�$������M��L�D$�fD9K������K����fD;C�����H�S(���fDA��t*A����I��H�C(�a���H��H�C ���@A�@fA�oH�C(�<���fDI��H�S0L9�v/K�dH�<�H�4�uH�T2��H��H�z�u	I��L9�w�L�c ��A�@A��H�C(����ff.�@AWI��I��AVAUI�����ATM��M��USL��H��(L�W0�GH�L$�OH��H��H!�H�w�;@�,H��tMH��tqH�|mI�|��L9trI��I�|H�<�L��H��H��H!���tŃ�������H�,�H��u�H�����I�GI9�tl����B�.L���Z�I���LD��fDH�wL�L$L�$H9�t1I�GH��E�wH�T$�H�T$L�$I�������L�L$u;E9wuUH�D$H�H��(H��[]A\A]A^A_��,^������,����E9wuI�wA�OA�G����H�����몃�t��tJ��L���1�L��fB�n�|���B��L���l����AWAVI��AUI��ATUH��SH��(H�GH�>�PI��H����LD�H�}I�U��L��H���E���H���t�H����
�MH�U���}H���H��L�$[I��H�U0I�I�D$I�EM��tI�D$I�I�$�����H�mH;] ��H��([]A\A]A^A_��L�M(H�] L�E0I9���L�$[I����H��I��I9�tkO;< u�K�t L�L$L�$H9�t8�EH��H�T$�D$H�E�H�T$L�$��L�L$�D$��;E���H�������H�������fD1�M���F���I�H��([]A\A]A^A_��H�M(H��H9�s/H�[H��H�<�u H�D�DH��H�x�u	H��H9�w�H�] H��(�[]A\A]A^A_�@��tC��t^H��H�H�H�Y�L�$[I���o����;E��������f.�H�B��f�H��L�$[I���0���H����H��L�$[I��������SH��H����H�Ҹ@H��?)Ѓ�>�����H�wC�HcшH��H���H��H��rf�w��v=H�zH��������H�CH�����H��H�C0�x�H���C[�@�H��H�C��fD�H�wf��G�`��H�"�HH�5��H�81��Q����ATI��UH���8S�8��L��H��H��H�����H��[]A\�ff.�@U�SH��H��H�W�H�4H��H9�w_H�<�H9�vRH�{H�CH��tH��H�f�1�H�TH���Ɯ�H��H�����H�CH�C �CH�C(H��[]�H��v�H�{H���-��H��H��H�����EH�{��E�C�E�C���H�EH�{0H�C���H�E0H��H�C0����ff.�@��H�G����1����D��H�=oH頨���H��H�=oH���ff.�f���H�=EH�p����H��H�=2H�]��ff.�f���H�=H�@����H��H�=�H�-��ff.�f���SH���3��C[�ff.�f���SH��H����H�{0���H��[���ff.�f���H���8tHc�H���H��H�DH��8�H��H��fD��AWAVI��AUI��ATI��USH��H�GH���PI��H����LD�I�}tTL��L��L���6�H���t�H�����H�X��M��tI�M0H�[H��H�RI�$H��[]A\A]A^A_�DI�U(I�] I�E0H9�vjH�4[H�,��DH��H��H9�tNL;}u�H�uH�$I9�t'A�EL���D$I�E�H�$���D$u3A9E�>���H����4���H����S���H��1�[]A\A]A^A_�@A;Et��
���D��AWAVI��AUI��ATI��USH��H�GH���PI��H����LD�I�}tTL��L��L����H���t�H�����H�X��M��tI�M0H�[H��H�RI�$H��[]A\A]A^A_�DI�U(I�] I�E0H9�vjH�4[H�,��DH��H��H9�tNL;}u�H�uH�$I9�t'A�EL���D$I�E�H�$���D$u3A9E�>���H����4���H����S���H��1�[]A\A]A^A_�@A;Et��
���D��AWAVAUI��ATI��USH��H��8dH�%(H�D$(1�H�GH��L�t$ �PI��H����LD���H��H9C(�QH�{��L��L��L��H�����H���t�H�h�H�S0H���t9H�DmL�l��H�|$(dH3<%(�qH��8[]A\A]A^A_��H�K(H�AH�C(H�IH��H�T$ L�8L�`L�h1�H���t��CH��H�s������H�K(H�k H�S0H9���H�DmH���H��H��H9���L;:u�H�rH�L$H�T$I9�t+�CL��D$H�C�H�T$H�L$���D$uE9C����H��������H�S0H�����H�CH�K(H�l$ �����H��������9C�g����|���f���tC��t.H��1����H�S0H�K(H�CH�D$ ��������D��1����fDf�V1��{����������U�H��SH��H��H����L�O(HD�H��I9�tgH�K0I�AL�SH�C(K�IH��H�(H�pH�PH�CM��tH��H�����SI����uE�H��[]Ã�t;��tFM��H��[]�H�T$H�4$���L�K(H�T$H�4$�y����fE�B�f�E���f.���ATI��UH��SH��H��H�GH���P��L�K(H���HDºH��I9�tpI�QK�IL�SH�S(H�S0H��H�L�aH�iH�CM��tH��H�����SI����uE�H��[]A\����t3��t>M��H��[]A\ÐH��H�D$���L�K(H�D$�u���DfE�B�f�E���f.���AWAVI��AUATI��UH��SH��H��8dH�%(H�D$(1�H�GH��L�l$ �PI��H����LD���H��H9C(�fH�{tgL��H��L��H����H���t�H�P�H�����H�RH�S0H��L�`�H�|$(dH3<%(��H��8[]A\A]A^A_�f.�L�K(H�S H�C0I9��#H�RH����H��H��I9��L;9u�H�qL�L$H�$H9�t8�CH�T$H��D$H�C�H�T$H�$��L�L$�D$��9C�����H�����H����*���H�CH�T$ f�H��A��H�S(H�JH�4RH�K(H�K0H��H�A1�L�9L�aH�L$ H���������CH��H�s��u6����fDH��������9C�����g���f.���t;��t&H��1����H�CH�D$ �����U���D��1��y���fDf�N1��h��������AUATUH��SH��H���o�oNO�oV H�~W H�F0H�G0���H���H��H�|H�����H�E�A�L��H�����H�E0D�+H��L��D��H��H��plH��uYH�sH��tI��H�5�J�T(H��uH��H��[]A\A]�@H�}���H��H��[]A\A]ÐH�G�s���H�s0H���d��뙿������UH���8SH�����H��H��H������H��tH��H��[]�@H��1������ff.�����7�����'����AWAVAUATUSH��(L�G(H�_ L�w0I9�v7H�[H��I�I�DH�)H���t�A�H��H��H�h�H���u/H��I9�u�1�H��tH�H��([]A\A]A^A_�f�L�yH��tH�AH�L�>I��I�}��L��H��L����H�����A�MI�U�������x����H��H�H�M�e H�RM�t��f�I������I�mI9��N���I�U(I��I�M0I9�s1K�dH��H�<�u"H�D��H��H�x�u	I��L9�w�M�e H��(�[]A\A]A^A_�@H���M�e H�@M�t���m���DM�E(M�e M9���K�dI�L��@I��H��M9���K�dH��H;i�u�H�1L�D$H�$I9�t4E�MI�EH�T$L��D�L$�D�L$H�$��L�D$u#E;MH�T$u"I���tM�e I�����fDE9M�v���M�u0�K���H�BM�e �H�RM�t�кf����H��M�e ��H�RM�t���v���M�e H�����H��������ff.���AWAVAUI��ATUSH��H��HH�t$(H�L$dH�%(H�D$81�H�GH��H�D$0�PI��H����LD�H�{L�s0H�T$(��L��H����I��H���t�H�����CH�S���)B�,:H��H�t$0H�|$(�H�DmH�T$M�4�M�fI�FL�d$(H�D$0A�Յ������A�H�L$8dH3%(D���H��H[]A\A]A^A_ÐL�K(H�k I9�v~H�DmM�<���H��I��I9�t^M��M;'u�I�wL�L$H9�t4�CH��H�T$�D$$H�C�H�T$L�L$���D$$��9C����H�������H�����H�t$0H�|$(1�H�T$A��A�Ņ�tzE1��+���f���t[����J�,�����f�H�D$(L9�tI�FH�D$0A�I�F���fD;C�����?���f.�B�,z�r���fD��L�K(H�l$0L�t$(H��I9��~H�S0I�AL�SH�C(K�IH��L� L�pH�hH�CM���f���L��H�����SI�����"���P���^M���0�����CH�S����������J��fDI�����A�H�kH9k ����H�S(H��H�K0H9�s/H�DmH��H�<�uH�D�@H��H�x�u	H��H9�w�H�k A����DB�,��3����B�:�v���fDM�gI�GH�t$0H�|$(�H�T$L�d$(H�D$0A�Յ��/������6����$����E�E1�����@H���(�L�K(�q�����fB�z���fE�B���B�����E�������d��@��AWAVAUATUSH��xL�g0L�o H�t$H�T$ H�$dH�%(H�D$h1�H�A��L;o(��H�D$`E��I��H�D$(H�D$XH�D$0K�DmI��H�+H���t~A�GH�{1�H�sH�$�D$H�D$H�|$X�Љ���u=L�T$ M��t3H�C�H�$H�t$(H�|$0H�D$`A�҉�H�D$XH�CH�D$`H�C�D$A;GuP��t#����I�_(I��I9��_���f�1�H�|$hdH3<%(�#H��x[]A\A]A^A_��L$I�G0M�gH�\$XH�D$M���H��H��L���+��H���t�1�L��H����L$L�d$��L�h����\E1�K�DmH��A��I���D���@L�SM��D��I��M��M�օ��5M�g(I�_ I�G0I9��`H�4[L�D$H�l�L��L�L$8M��L$@M��I���H��H��I9���L�[I��L;e�u�H�uI9���A�GL�\$HL��D$I�G����M��L$@M��D$L�\$HL�D$L�L$8A9G�J���H����@���H��M��M��A��I�_(H����e���K�����I�oI;W �N���H��I�G0H9�v3H�4RH�<�H�<�u H�D8�DH��H�x�u	H��H9�w�I�W ����L��L��M��M��A��H��H��L������H���t�H�������A�OI�W���J�������xH��H�8H�I�_(H�W�L�RI���*���DI�W(M�o L9��gH�|$K�DmL�d$@I��L�4���I��I��M9��7I;.u�I�vH9�tQE�OI�GH��D�L$8�D�L$8��ufL�d$@E9O�S���I����I���1�I���L��L$L�d$���w���L�d$@��f�M��L�D$M��L$@L�L$8�8����E;O�V��������D$A9G�����M��L�D$M��L$@L�L$8�D���f�H���I�_(H��L�RI�����f�L�l$L�d$8D�t$@I�_(�B����H��I�_(��H��L�RI�������H�$1�1�H�D$�и����f.�H�B�I�_(�f�H��L�RI���a���@L��M��M��A��������f���AW1�AVAUATUSH��HH�H�o ��H�t$�D$ H�G0H�T$H�D$H;o(sdH��H�L$H�DmL�$�M�4$I���t<M�|$D�kI�t$H�T$L��H�D$��A��D;ku:A����A��tA��t
L�{(H��I9�w�H��H1�[]A\A]A^A_�fDM��H�C0L�{H�D$M���L��L��H��D�D$ �\��D�D$ H���t�H�h�H�|$M��H�DmL�$�1�M�����D$ A���n���M�L$H��L���t$ ����L�s(L�c H�C0M9��mK�dH�L$8H��L��L�l�M����I��I��L9���O�<dI��I;m�u�I�uI9���QH�AH�L$(L���T$4�H�L$(�T$4���H��M��H�L$89S�_���I����U���L��H��L�{(I��������H�D$H�����H�kL;c �����I��H�S0M9�s7K�dH�<�H��u$H�D
�f�H��H�x�u	I��M9�r�L�c �K���H�K(H�k H9��?H�|$H�DmL�|$8M��D�D$4I��H��L�,��@H��I��H9��M;uu�I�uI9���E�HI�@L�D$ L��D�L$(�L�D$ D�L$(����L��M��L��L�|$8D�D$4D9K����H��������I��M�����f�I��M��H��L��L��H���i��H���t�H����]����KH�S����H�D� �L�{(I��K�dH���z���fDM��L��L��L�|$8D�D$4�j����H��M��H�L$8�&���E9H����L��M��D�D$4����fD9Q�����H��M��H�L$8�L������tl����H��H�8H�L�{(L�g�K�dH������H�D$L��L�L$8H�����D�D$4L�`�����fDH�l$8H��L�y(�G���H�B�L�{(D� f�I��K�dH���j���H��L�{(D� �I��K�dH���D���M��L�`�H������Q���H��M������f���AW1�AVAUATUH��SH��8H�L�o0��H�4$H�_ H�T$M��D$H;_(scH�[M�$�M�<$I���t>D�MM�l$1�I�t$H�T$D�L$L��H�$��D�L$��D;Mu9��t����L�m(H��L9�r�fD1�H��8[]A\A]A^A_��M��L�mL�u0M����L��L��H��L$����L$H���t�1�H���H�X�M���…���1�M�����D$H�[M�$��f����M�L$L��I��M���t$����H�](L�e H�E0L9��K�dL�D$(I��L��L�l�H�L$ �fDI��I��L9��WO�<dI��M;u�u�I�uH9���A�PI�@L�D$H��T$�L�D$�T$����I��L��H�L$ L�D$(9U�R���I����H���I��L��L��L�m(I��������I�����H�mL;e �}���I��H�E0M9�s3K�dH�<�H��u H�D�DH��H�x�u	I��M9�r�L�e �4���L�E(H�] I9�w�~fDH��I9��kH�[H��M;<�u�I�tL�D$I9�t2�UH�E�L$L��T$��T$�L$��L�D$��9U���H�������1�H���M��������DM��L��I��M��L��L��H�����H���t�H����k����MH�U��urH�D� �L�m(I��K�dH������I��H�L$ L��L�D$(�o���9U������=���f�A9P���I��H�L$ L��L�D$(������ti����H��H�8H�L�m(L�g�K�dH���(���L�t$ H�\$(L��M�h(���f��H�T$1�1�H�$�и���H�B�L�m(D� f�I��K�dH������H��L�m(D� �I��K�dH�����I��I��L���&���D��L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���L��H�G0L�O(H�O L9�tGI9�vBH�IH��H���
DI9�vH�:�tH�zH��H�x�H��H��I9�u�H)�H���@1��ff.�f���H��H��vKI��SB�{ÇH�F�H��E'C��LH��L�L�f�H�H��I��H��H1�H��H��H��L9�u�H���H��wJL�˖Ic�L�>��1��GH��(H	��OH�� H	ȋH	�H��H��E'C��LH1�H��H)�H��H��H1�H��H��H1�H����mGX�H��H��H��H1�H��1�IДH��H��H��H1���1��H	��fD1��OH��H	���1��q���f�1��V���f��GH����fD�GH��0H���"�����SH���c��H�ߺŝ�[H��邍�f���H����H��SB�{ÇH��H��H1�H��E'C��LH��H���ff.�@��H�H��H��SB�{ÇH��H��H1�H��E'C��LH��H���ff.���H��H��H1�H����mGX�H��H��H��H1�H��1�IДH��H��H��H1�Ð��H������1�f.�����t<��t8D�J�D�B A��D�I�AB�A��D�A AB�H��8�t������D��D���u�1��������D��駊����H��tg�D���tdE��t_1��H��H9�tG�D���tBE��t=D�Q�D�I A��E�P�AB�E�H A��EB�D8�t������D��D1��D���u�1�E�������@��AWAVA�AUI�պ	ATI��L��UH��H�5�bSH���;��L��H��?�H��L�H�Hp(L��H��H9���H�{��I���@�{��I��I��I��N�|%fDL�eL�����H�
e�HH;uL������I��L�uL��H��L���~�M��tA��uL��L�����M��tA��uL��L���Ϟ�H��I9�u�H��[]A\A]A^A_��H��L��H��L��H��[]A\A]A^A_�Q���H�{�נ��I�ǸI��I����H�{0H��u�b��H�{�Y��I��P��A�L���A�G�CA�G�CI�G0�CH�C0H�C������f�H�MH�UH��L��H��[]A\A]A^A_�����H��I�0H�����H�{0�i���L��������H��H� ����H�GH9G(�~��H9��u��H�W0H�vH��H�@H��Ð��H�w��H��H��H9�v��UH�SH��H��H�蓟�H��H��H������EH�{��E�C�E�C���H�EH�{0H�C���H�E0H��H�C0��H�C�CH�C H�C(H��[]�f.�f�U�SH��H��H�o�OdH�%(H�D$81���E��yD�1�)ǃ��|����$I���4:����)��Ⱥ�$I�������)�)�)���)ȉ��@Hȃ�w�H��au7��H�����{��H�\$8dH3%(���kH��H[]�fD��u�H�C0foK�Q�H�fofoS )L$H�D$0�D$)$���ɹ)T$ D�HcȉD$H��lH�t$�T$����H�ףp=
ףH��H��H��H��?H�H��H)�H��H���mH��H9�tjH��D$����{���'���f.��C������t���������D���fD�����F�����DH�ףp=
ףH��H��H��H��?H�H��H)�H��H��H��H9�����l�V��������F�����轭�ff.�f�UH���SH��%H��H�?dH�%(H�D$1�H��H�$!��H���o���U!�} D�E"D�M"��dD�U$�u ���
�M%D�]$��A��fA��fA����������A��A��?A������A��?D�D�KD�C�{�S�CD�S�s�K H�C(H�C0H�D$dH3%(uH��[]��Ŭ�DAWI��AVI��AUI��ATUSH��H+2L�L$J�,FI���U��L�L$H9�H��v�H�H9�w�I9�wSI9�rNL��L��胥�H��L��L)��u��I�GI� u H�I�I�EH��L�[]A\A]A^A_�@I�G��f�H��1�[]A\A]A^A_�ff.�@��H�7��t,��uB���у�a��w��_�H��H9�u��@��у�A��w�� �H��H9�u��ff.��PXH)�H���"��"H�����DH��t@��tH�����
H��H���;��H���H��
u׾
�"��f�AWI��AVAUATL�gUSH��H��XL�oH��$�H�T$@H�L$(L�D$8L�L$ H�D$0dH�%(H��$H1�H� tL�gL��L��$�萹�L�H�|$@��H�|$ H��$�����H����L�t$(M��t(����I9�t�y��I9�t蟕�I9�uf.�H�D$(H�D$@M�L�4L9���H�D$`H�D$|H�D$H�M��%H��I)�L���Br�H��H���I��I)�H��$�L9�vL)�H��L9�2L��$�L��M��H��$�H��$�L������I��H���M)M���|M�L9��������L�eM�N�E1�A���D$L��L��$��D$I��M9����U�J݀�W��H�=����Hc�H�>��DI��L��L�d$D��H+�$�L��H���O���$���$��H�5w�P�t$@��$�L�L$@L�D$XH�L$HL�����H�� H���@M�oI� tM�oI�GL��L��$�I��H�D$P�x��I)�I�L-L�H��$�M��~�T$H��L��H�L$���H�L$Lc�Ll$PM9���H��$�L9�vL)�H��I9��IM��L��L��L�T$L��$�H��$�H��$��n���H����'H+l$PL�T$H�(L�H��L��L�T$H�<)H�L$P�+��L�T$�t$� H�L$PL��L)�@��H��D��sk�L�T$N�,f.�H�\$H��I9��v���L9��1�H��$HdH34%(��'H��X[]A\A]A^A_�f.�I��L��L�d$D��H+�$�L��H���o���$���$��H�5͎P�t$@��$�L�L$@L�D$XH�L$H����D�T$L��L�D$H�
L��L)�L��L�L$XD�\$PL�T$��h�T$|��u:H=���w2H�$�L�T$A��D�\$PL�L$XI��L��L�eM9��,���DL�d$L��I��L�d$I)�I������H��$�H���D$�D$�DL�d$I�߸	D�Å�N�H��$�Lc�L9�vL)�H��L9���M��L��L��L�T$L��$�H��$�H��$��@���L�T$H��I���w%H�D$0O�,H���."H��$�H�HL)�	��L��H�'�1��di�S�I�|$	�0Hc��?i�����f.�H�D$ I��L�d$D���@"��f�D$P�;f����?��;O�D$���A��H��$�M��L+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$��>���H���}$L��L���
���D$<0�uH�5����f���1�L��谢�I� I�_�M�oL��L��$��[��L�I�H��$������I��L�d$D�ø����H�D$ I��L�d$D�ý�@"�D$P�����a�D$��A��H��$�M��L+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$��"���H���a#L��L������D$��<0tH�5������H�5������H�D$ I��L�d$D���h$�<��?��<O�D$�#�������Lc�����L�ɸH)�A��H9�������T��z��"��:�����H��H��uӸA�I��`���DH�D$ I��L�d$D���@"�ňD$P�@������O�D$��������f����A���{���H�D$ L�d$I��I��H��$�Ic�L�H��H��L�L$X���H����H�t$ L�L$X�v!��@�t$P��������u	��3�4 D�T$A��A�|$G��A���CL��H�E��������M��L��I��?H��?I���I���X�ffDI��L��L�d$D��H+�$�L��H�����$��L����$�H�5��P�t$@��$�L�L$@L�D$XH�L$H�b���H�� H����M�oI� tM�oI�GL��L��$�I��H�D$P�(��I)�I�L-L�H��$�M����Lc�Ll$PM9��{���H��$�I9�����L)�H��I9������f.�H+l$P���fD�uL�L$hL�T$XD�\$PD�D$@���?���H�=�����D�D$D�\$PH��L�T$XL�L$h���������I��L�d$Ic؋L$��p�Y��P��H�D$ H�-'�A��@"�D$P����<H�EHC��H��$���
L9���
I9�sL)�H��H9�|2L��$�L��I��H��$�H��$�L���T�I��H�����t$L)� L��H��@��D�I��c��
f��uL�L$hL�T$XD�\$PD�D$@������H�=������I��L��L�d$D��H+�$�L��H��诘��$���$��H�5'�P�t$@��$�L�L$@L�D$XH�L$H�[���D�D$I��L�d$IcبtA��A��A��D�T$H�D$ �@!������<������H�H��H���H�,PH��萀�I���b�D$I��L�d$IcبtA��A��A��D�T$H�D$ �@$��f��f����Rf����H��H�ȅH�,PH���,��I��M��������L$�����H��iII��L�d$Ic�HDŽ$��H��u"D�H�=��G��H��iIH��t�H��H�D$ H��$��H�8莖�D�T$H��A�����E���6LcÅ���H��$�M��L+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$����H���L��L��論��D$H��H�<0tH�5������H�5����E��������L$E1��D$���DI��L�d$D��H��$�A��~�D$��I9�sL)�H��H���?L��$�A�L��L��H��$�H��$���H���\L�h�%�����E�������L$���DH�D$ H��$��I�߾%L�d$D��HDŽ$��H�8���H�Ǩ��bw��D$��������H�D$ I��L�d$D���@$��f�D$P�f������O�D$����E���N�Lc����DI��L��L�d$D��H+�$�L��H�����$���$��
H�5}�P�t$@��$�L�L$@L�D$XH�L$H��DI��L�d$D��D$�"A��H��$�L��H+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$��x�H����H��L���D��H�D$ ��@$f��tf��������D$<0�0����:���fDI��L�d$D��H��$�A��~�D$��L9�vL)�H��H����L��$�A�L��L��H��$�H��$����H���L�h�	��l$H�D$0I��L�d$Ic؃�H����L� �����۸N�Lc�H��$�L��H+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$��1�H���pH��L�����D$<0�qH�5���bL���1�L��袗�I� I�_���M�o����I��L��L�d$D��H+�$�L��H��菒��$���$��H�5��P�t$@��$�L�L$@L�D$XH�L$H�;�DI��L�d$D��H��$�A��~�D$��L9�vL)�H��H���?L��$�A�L��L��H��$�H��$��
�H���LL�h�
���H�D$ I��L�d$D���@!�ňD$P�@�����O���N�D$� ���H�D$ I��L�d$D�ý�@"�D$P�������D$��A��H��$�M��L+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$��"�H���aL��L�����H�5�|�|$0H�F�HE����DH�D$ I��L�d$D���@"�ňD$P�@������O�D$�E���LcÅ��E���A���5���fDE������D$ ��DE�����L$�x�DH�D$ I��L�d$D�Ë@ �ʼnD$P���
��D�D$����~�I��L��L�d$D��H+�$�L��H������$���$��H�58~P�t$@��$�L�L$@L�D$XH�L$H��D�D$I��L�d$Ic؉��tA��A��D�у��L$H�D$ A�H�-�;�@!�������<������A���H�H��H��|H�,P���D�D$I��L�d$Ic؉��tA��A��D�у��L$H�D$ �@$��f��f�����f��A�����H��H��|H�,PH��$��V���f.�I9�sL)�H��I9�|2L��$�L��M��H��$�H��$�L����I��H����L��L��H����T$L��L���@�I���x��H�D$ I��L�d$D���h �n����nO���N�D$���E����A����f.���$�L�d$I��L��I��Ic؅���
�D$��D$E1�A���S�
A���jA����L��L��H�|�j�Y�HH��$�H��H��?H��H��
H)�Hi�I9��XH���������L��H��J�H��H)�H��H��H)�H��H��I9�����A�LM�A�h�I9�sf�L)�H�F�L9�NL��$�L��L��H��$�H��$�D�\$XL�T$P��I��H���3H��$�L�T$PD�\$XH)�L���\$1�LcD$H�|�j�Y�HH�=�zD�\$XH��L��M��L�T$PH��?H��
H)€� ��H��H��z� HD�L��L��1���V�����E��H�L�T$PD�\$XyI��I�T��� H��L��HD��-H�|�j�Y�HI�L��H��L��H��?H��
H)�Hi�A��A��I)�L��u	E�����E��D�\$�!H��A�E:M�EH���������H��H��L��L�D$H��?H��$�H�,L)�H�zH��H)�1����
V�����L�D$H�M�,H��H��H)�H��H)���D���m�D�\$A���^�A�E:I�m1���H��$�H��yH��H)��U���J�H�L�l�#�I��L�d$D��D$��Mc���A��H��$�L��H+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$���H����H��L���}��H�|$ H��$�����$���$��ҍB��Dƒ�1�)ƃ��� �����$I���2����)������I��L�d$D��D$��Mc���A��H��$�L��H+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$����H���H��L��H��$�蕉�H�|$ H����H�����t$@��0��@���|H�5qu���n�f.�I��L�d$D��D$��Mc���A��H��$�L��H+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$���H���@H��L���͈�H�|$ H��$������$�1ɍp+�$�������Z���f.��D$I��L�d$IcبtA��A��A��D�T$��$�����H�D$ H�xH���k�H�|$`��H�D$`H�0H�hH�t$P�� tH�hH�|$(�	H���p�I���]�fDH�D$ D�T$I��L�d$Ic�H�8A��@����H��H�E�������	Lc�H��$�M��L+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$���H����
L��L���e���D$<0�`H�5js���QH���c�I��L�d$D��D$��A��H��$�L��H+�$�L9�vL)�H��L9�,L��$�H��$�L��L��H��$���H���7
H��L����H�D$ H�5�r�@ ���D$���
��DȀ|$0H�F�HE����H�5�r��@�L$A�H�-p2���f�L��L��H��M��ߦ�L9��v�L��H+�$�L��H���0��H��L���Փ�L���Z�DL�����A�	1�I�gfffffffA)�t%f�H��H��?��I��H��H)�H��A9�u�I�ȉ�H��tL��1��NP����LcÅ��e�A���U��L$A�H�-����E���N�Lc������~��������HO�<H�U�HG�D$�����A���Z���Mc�������A�����E���C�۸HN؀|$���S�L�`�D$0H��L9��}H��$�L9�vL)�H��H9�|2L��$�L��I��H��$�H��$�L�����I��H����
L)��t$L��H��I��N�L��L��H+�$��j��H��L���f�I� I�_��M�o�z�A���
���A���-���E�����۸HN؀|$��H����������HO�<H�U�HG�D$�������A���m�T$H��L��H�L$���Lc�H�L$Ll$PM9��@�������L�Ϻ�+HDŽ$�H��$��ǂ�I����������D�T$A��D�у��L$��A�H�-:/��H�mUIH��u*D�\$�H�=F	�v�H�HUIH��t�D�\$H�t$ 1�1�D�\$H�~H���<��D�\$��nH�I���D$M�����I���A�����E�������H��$�L؍k�Lc�L9��e����l���H������L�`H��H��$�L9�vL)�H��L9�����L��$�L��M��H��$�H��$�L���>��I��H��������uDL�d$�I�fDH�5n���H�5�m�����H��$���%L��D�T$HDŽ$�����D�T$H�H��E�����������A������M���p�H�5�m��Mc�I9�sL)�H��L9�/L��$�L��L��H��$�H��$��\��I��H�����t$��� L��Hc�@��H��D��K�I�D��Mc�L9�vL)�H��L9�/L��$�L��L��H��$�H��$�����I��H���*�t$��� L��Hc�@��H��D��!K�I�D��Mc�L9�vL)�H��L9�/L��$�L��L��H��$�H��$����I��H�����t$��� L��Hc�@��H��D��J�I�D�E��D$
�o�����E���������|$��L���U���D$0L�`H��L9��d���A������&��H��L�`�Y���E1��D$�������H��H��$�L��H���������H��1�L)�H�H��?H��mH��H)��I������H�I��}�����H��$�L؍k�Lc�L9��+��2��	�	H��$�L؍k�Lc�L9�����E1��f.�I��I��d�R�B�|%�=�y���p�H��I���x�H�T$(L��A��"H���l�H�pH� tH�pH��$��dH���#L�I�����L������L�`H��H��$�L9��'���L)�H��I9���������H�����H��L�`�[������H��L�`�J���A����I��H��?I��?��I�Ѝ_I���E�����ALۍk���Lc�I9�������L�����L���;�L�����H�PIHDŽ$�H��u$��H�=�q�H��OIH��t�H��$�H��$��H����|�I�¨�R���B�۸N�Lc�H��$�L��H+�$�L9�vL)�H��L9�6L��$�L��L��L�T$H��$�H��$��*��L�T$H���dH��L��L�T$��|�L�T$�D$L��H�<0�8��B���%L�T$H��$�H��$�H��H�D$HDŽ$��{��A��L�T$H��~TL�T$P�݉\$H�\$�H�ٺ�*H��HDŽ$��5w��	�{���A��\$H��L�T$PE��tM�fDH��H�A��u�H�L$H��H���*L�T$H��$��N{�L�T$H��H�NIHDŽ$�H��u0L�T$f��H�=�o�H��MIH��t�L�T$H�L$�H��H��L�T$��z�L�T$��H��$�H�I��L)����H��D�\$脁�D�\$I���~���L�Ϻ�-HDŽ$�H��$��z�I����������A�LO�|$�H���R���D$0H�hH��I9���H��$�L9�vL)�H��I9�|2L��$�L��M��H��$�H��$�L�����I��H����I)��t$L��L��M��D�L��L��H+�$��iz�H�����K�T�H�=iH��$�H��$���9H�t$�H���YZ�H��$�H��$�H��$���f�L)�L��H��H���G����H���N��H�hH��H��$�L9�vL)�H��H9��N���L��$�L��I��H��$�H��$�L������I��H������H�T$(H�t$@L������H�t$8��H�D$`�3�@�H��+���|$uP�D$0�L�����H��L�`�Z�����	�	L؍k���Lc�I9�����A�����L�ϻ�d��H��L�`����H���P��H��H�h�����ff.�@��AWM��AVI��AUM��ATI��UH��1�SH��1�H��賎�H��H��H��H� ���H9�wH���HC�R�T$HM��M��L��H��H��RH��jAW���H��([]A\A]A^A_�ff.�f���AWM��AVI��AUM��ATI��UH��1�SH��1�H���#��H��H��H��H� ���H9�wH���HC�R�T$HM��M��L��H��H��RH��AWj�l��H��([]A\A]A^A_�f.���H�H����H��H��H�:H)�H��~H��8H9�v&������t	H��t
H��H��H9�u�H�:�f�L�@I��I��I��L9�s%@��������H����H)�I9�u�I�L����H���n���L�H��L��I��H��H��L	�L!�I��I��L�I��I��L�I��I�� L���H)�I9�w��%���ff.�f�H�GH�WH� tH�WH�<1�H9�v(�
�΃�a��w�� �@�2H��H9�u��fD��H�GH�WH� tH�WH�<1�H9�v(�
�΃�A��w�� �@�2H��H9�u��fD����H�GH�D�f�H�H����H��t���	Y�f�H���WO�H������X�ff.����H��tSfDH�_�g��H��H��u�[�D����AVAUATUH�oSH�L�o�� tH�oH�H�VL�f�� tL�fI9�t[�]A\A]A^�f�H��H���A��H��tEH����H��t(D9�u�L��L��H��蝄�[]��A\A]��A^���@H���pN���fD�cN�A��H��ff.�H�������xH���H�PH�aPHH�5hcH�81������UH��SH��H��ZHdH�%(H�D$1�f�;unfH�=�KHffH�b��H��H�8�>�H��H���e�1�H�{H�P��>�H�H%���H
H�H��H�L$dH3%(u(H��[]�H�|$��1H�W�H��HD�t����z�D��H�WH��t��t1��H��H���|g�1�H���DAWAVI��AUI��ATL�f�UH��SH���z��M��x>J�D%M��8��GL��H�U��f��|�H�Du$�DH��H���u�H���[]A\A]A^A_Ð�J�t-L��H���e��~)H�L9��	L��H�|��H)��i=��l���@L9��_�������V���L��H�tL��H���Xe�����H��u�H�L�����=�����H�7H���#e����H��H��L��A�V L��D�`D��A�V(����H�L9�����L��H��D��A�V0L��H��H����d����H��[��]A\A]A^A_ÀJ�t-L��H���d�������H�L9������H���[]A\A]A^A_�M��H�{I)��.���H��1�[]A\A]A^A_ÐH9�s{AUI��ATUH��SH��H���+fDH��L��H��U H����UX��tL�I9�v+H��L��H���
d�Lc�E���H��1�[]A\A]��H���[]A\A]ø�f.���H�@H�H�x	H�D?��}�ff.���SH��@��tBH�H�SH��x&�H9�}H�CH� tH�C�0H�D[øH�y�[�@H����v�H�����SH��H�6��N�1�H��tH����[�f���1Ҿ����� ����1Ҿ�����SH���S���H� H�{H�stH�{H�H��1��1A�[��H�D����H�����1�H���ff.��AUATI��USH��H���K�H��Hc@��/�C�<
��<
����H)�H��H��L)�[]A\A]��H��H��L��H��H)��~�H��H��I��H��U��HcEIE�H��H)�I9�w�H��L��H���j~�1�H��H��H��I����<��
ID��fDH�C�I9�s�{�
t	H���i����H���_����AUH��I��ATUH��H��SH��H��H��H���lv�H��H��I��H��U��uH��H��[]A\A]�L��L��L��H���7v�H��H��t/H��1�L��H���<��
IE�H��H��[]A\A]�f.�H��L��H��[]A\A]�ff.�@AVAUATUSH��H�k�\���I��H� tH�kL�cI�I9�w[1�]A\A]A^�DL��L��H��L���u�H��H��t�H9�rH��[H)�]A\A]A^�1�L��L��H���`;��
u�L��H��H��L���Ju�I��H��t�1�L��L��H���2;��
ID��f�AUATI��UH��SH��H�~L1�L�o��L��H���T��H;]}1L��H�E tH�E�H�tM��u�H��H���3��H;]|�M��LD�H��[]L��A\A]����SH���Z�1���t
H��[�d���@H�{�G8�H��[H���K���ff.���H���3A�H�xH�H�������H���A�H��H���'K����駑��AWAVAUATUSH��L�vH� ��H�_M����H�FL�gH�$H� tH�FH�$L�<$I��H��L��I)�H��L��L�D$��{�L�D$��t^I�E�/I����H)�I��M��~uL��D��H���d�I��H��t_L��H��H��H����z�I9�u�H�4$L��L���j{�M��I)؅�u�H��L��[]A\A]A^A_�fDH�_M���7���H)�I����I��������USH��H��dH�%(H��$�1��Q�\X�D$/f�t$-����~r�H�5�h��tH�5�h��ufDH�|$H��H�1�H�l$H��CHI��UL����ZY��uWH��$�dH3%(H�D$u:H�Ĩ[]�f��H�5@h��t��H�t$-��H�5h��}q�H�\$0Hc�H��1�H����n�H��H�=V^1��_����H��1��a�H�0fH~�H9�tMfH~�H��<������tH��H��u*H���DfH~�H��H��H��H���f.�H���.����SH��H��H��H�t$�7W�H��tAH�8�� u&H�p H�xHc�H9��o��H����I�H��[�@H��H�p����H�t$H�ڿ�I�H��[��H��� t�@t	H�G�@H�G �S���Z�Hc�[H��H)��ff.��PXH�5�H��H�L?HH�81��y�f�����H������H�H�
�;IH9�tLH;�;I������H;�;ItMH;�;I����%`=@����5@H���f���t+��H��
�����D��
@���H�a;IH9Fu)��H��
0����t��
 �f�H;Nt�H��CHH�5"WH�81��x�H��CHH�5�VH�81��zx�H��CHH�5\H�81��bx�H��CHH�5�VH�81��Jx�f.�SH����_��u[�H�:@HH�SH�5�[H�81��x�DH�F�H9�s(H���������H��H#t
�CH��H#u8H��H9�w�H��H�
�`H)�Hc�H�>����~�xE1��~�xÐ1��H����H�H��H�F�À~�x�~�x)�~�x�~�x�~�y�H�F��1��H�F��H�F��H�F��H�F�ÐH��:HSH�H��tH��uH�5;[�1��n�H��[�f���u�H�H�ƒ�H��u�H�{u�H�S�� tH�S�:
u�H��[�ff.�PX�1�H���^X�ff.�ATUH��SH��H��dH�%(H�D$1����tb����{;{tH��H�E(H��{�Ѕ�~�C�S9���H�L$dH3%(�9H��[]A\�f.��H�{H�sH9���L�d$H��L���93��\��H�sH�{H��L���6�Hc|$H��L��H{H�s�CH�{�2��-ufH�sHc|$H{H9�sTH�{H��L���h6��HcD$HC�C9�sxH��@HH�:��w[��wV��H�5�Y1��u�f���������C������������H�{HcD$H�sH�H9��@���H�CH���4���H�5�Y1��>u��������K����k�DAWI��AVAUATUL��SH��x�T$H�L$L�D$dH�%(H��$h1�H�GH� tH�GH�WH�D$PH�D$@H�4�D$HH�t$XH����t$����A��tAƇ�D$1��D$/�D$(L�t$`L��I��fD�H��H9�u�E1�1�L�d$@H��L���m���HcЃ������wI�D$�D`���D$/1��D$�D$(L��I��D�H��H9�u�A���k���H��uc�L$��u#H�D$H�H��uA���p�����D$(����H�D$L�(L��M���4H�D$H�H���7������L�DM��t)L��L��L�D$ �:�L�D$ H������;D$(������L��H���=����1�@A���tA�<��A�H��H=u�H��u�|$/tH�D$H�H��$hdH3%(��H��x[]A\A]A^A_ÉT$ �}K�T$ H��H�D$L�(H�����H�T$<H��H���/��^����|$HcD$<HD$P��u4�D$��D$/�D$(����T$ �K�T$ H������D$�D$/��D$�D$(�!����h�AUI��ATI��UH��S��H��(dH�%(H�D$1��E4I��tQH�,$��w`��u4H�=E4IL��H��S�`�H�t$dH34%(u>H��([]A\A]�@I�EH�D$�DH�=	V�a���3I뗉������g�ff.����H�
�3I�@�����H�
�3I�0�����SH���SN��tH��1�[�$�@�kd�H���cu�H��L���[1�1�H����s�ff.��SH���GF�1҃�tH��[�H�)3IH��u�H�����H��H�3I�����ATI��UH�lSH��H��u:H��u1�[]A��$A\���f�H��H���^�H��t�[1�]A\��H��H���u^�H��t�H��u
[�]A\�H��H���U^�H��u���ff.�f�UH��1�H��SH��H��1�H���^�H��yH���[]�@�;>�H��H��H����E�H��H��[��]�a�ff.�f���H��H��dH�%(H�L$1�H��t�t4H�<$H��H�Ǿ��^�H�t$dH34%(u(H���fDH�����t��u�H��H���mB�����e�H�O2HH�5�MH�81��>o�ff.���SH���3�H��[H���G����SH���Gb�H���?s�H��L�ex[1�1�H���q��H�H��t@��uH�ƒ�H��tH	�H�7����H�H��t@��uH�ƒ�H��tH��H!�H�7�@��H��t
H����t1�H���DH�?H��H!���H��HE�H��H���ff.�f���S��wMH�Ӆ�t/H�>@��t6�?�ƅ�y ��H�b9HH�5\�H�81��n��
H��1�[�@{��V�����@UH��H��SH��H�UdH�%(H�D$1�H����I��H��H�MH�E ukH�H�$I��H9�tL�CH�KH� uSI�H���W��xuH�UH������H��tQH��詀�H��H�|$dH3<%(uBH��[]��H�M�f�H�K�f.����f�H���(6����oc�H�H8HH�5�KH�81���l��AUA��ATUSH��H��dH�%(H�D$1��[�H� H�kI��t{H�[�H��t$A�|$t=H�T$H�4+L��H���)�� t\D��H�L$dH3%(uWH��[]A\A]�fDL����S�…�u�D��H��uȀ; D��f�H���f.�HcD$H9�u�1���}b�ff.�f�UH��SH��H��H�H������H����H���&�H�{tOH�E%0=ta= tH��[]ÐH���H��xtrL�I���I�� L�H��[]��H�����x��H���R���~H�H%���H
H�H��[]�DH���X4���S����H���R�H�I��I������{���H�sH�{�� tH�{H����H���Y���I��L��*���f�H�H%���H
 H�H��[]��AWAVAUATUSH��(H�|$dH�%(H�D$1�H���(I��H��H��H����L�%e@HfA�<$��LcmN�t+M��L��������fH�=;1HffH�3H�H�t$�(� H�8�|#�L��H��H�X �I���p��I�FH��L�����M����I� ��I�~H��H����I�FH��A���CH�L$dH3%(L���;H��([]A\A]A^A_�DfH�=�0HffH�xG�H�t$L��H�8��"�I��H���[����}� t|I�H%���H	�I�H��L������M���A���f�I�I�^I�~% H���D���I�~�;���fDI�~H��H������H��L��H���
y���H���hP��I�H�H���H%���H�� H	�I��c����m�H���!���H�|$�H���H��HD����f�L��1��"������^�H��3HH�5�|H�81��Th�@AVAUATUSH��dH�%(H�D$1�H����H��I��H��A��H��tzL�5�=HfA�>��fH�=�.HffH��E�H�޹(� H�8�3!�D��H�@H��H��H�hL�`H�h ��[�H�L$dH3%(H��uMH��[]A\A]A^�f����Y:�H��H��1�H������H����@H�|$�H�o�H��HD�Z�����]�H��2HH�5�{H�81��Eg�DAUI��ATUH�oSH��H��H�L�g�� tH�oH�����H��v��H��tb�9�Hc@H�N�l%H��t��tH��H��[]A\A]�f�H�H�ƒ�H��t�H
H�H��H��[]A\A]�f.�H���/���Q9�Hc@�ff.���H��uPH�/,HH�5�JH�81��^f�fD@��u�H�H�ƒ�H��t̩t�H%����H�H���ff.�@��AWAVAUATUSH��8dH�%(H�D$(1����kI���D$����I�mI�E �hM�eH�t$ I�MH��1�A�H�t$I�������?N�|%H�L$I9���fD�H��H�I9�t`L9�v�H�L$H�DL�ߺ�+H�D$ �KT�I��H�D$I�E tI�EH9���M;e���1�H��H�I9�u��T$����I���H�\$ H���/Lc|$H�ٺ���L�\$K�D?H�D$ ��S�H�ٺ�-H�D$ H���S�L�\$H�ٺ�&H�D$ L���S�I��H�L$(dH3%(L����H��8[]A\A]A^A_�@I�m����H��t�H�DL��H�L$ ��+H�D$ �"S�I���DH�>@��u�*M��A�DI�D�|$�"����o5���L$���_����L$��?H�����H��H��H!�L�\�<���H�DL��H�ٺ�+H�D$ �R�I�����H�`)HH�5�H�81��c��Y�1��D�ff.�UH��SH��H��fH�=L*HffH�DA� �(H��H�8��H�SH�PH�SH� tH�SH�PH�S H�P H���@H	H�H��H����H�H��u9H�% H��t���H�xuH�H��uH� ����H��[]���t[H�C H��tl���H��H��H�D$�E�H�D$D��uH�H�у�H��t��H�H��t���u��^f.�H�у�H��t�����r������Y���H�H�у�H��u��E���f�H��1�H�D$�qE�H�D$H�H�у�H������H��H�����H��������L���ff.��AWA��AVLc�AUATL�$USH��H��L9�IO�H��H� t�A�Mc�K�&H��H9���K�<4���i�L�+H��A�� uTL�CH���A��0@I�� tPH��ubH�<)�A���AH�KH�kL�c H��[]A\A]A^A_�fDL�CM��u�A��0@I�� u�L��H�L$�Rh�H�L$H��t���u�H�H�ƒ�H��t�� H�H�ƒ�H��t	H%��H�H�ƒ�H���_���H%��H��Q���H�sH��t��tZH�KH��uqH�<)�A����H�kH��[]A\A]A^A_�DL��H��H��L�D$�ep�L�D$H�������H�H�ƒ�H��t�H%���H��fDH��H���%p�H���|���DL��1�H�L$��H�L$����L��1�����Y���f�UH��SH��H��H�H�<�� tH��u�����H��H��[]�D��u�H��H�ƒ�H��tѩ@tʅ�~(�?H�Gu0�Q�H�T�fDH���x�uH9�u�H�kH��[H��]�1�H���V���H� u�H�kH��H��[]��Hc�1����b���f�AWAVAUATUH��SH��H��L�oH� ��L�g��]�D�xI��A��=�M��tt1�L��L���-�H��ubC�<,��H��L��[]A\A]A^A_�Ic�O�,�H�D$L�I9�rVL��H��DH���x�uD��)�څ��H��t.E1�뤐L��H��L��L�$��L�$H�H�H�D$H�I9�s�H��D��L��L��[H��]A\A]A^A_�)���f�L�g��\�D�xI��A���N��������ff.�AWAVAUI��ATUH��SH��H��L�:�Q���*HcAI��9�������H���D����M����H9���J�;H9���I���������f�����5H�p�H9���L��H��H#;t�W�L��H#:�DH��H9�w�H��H)�H��H�
�EHc�H�>��I��H�H9�H��M�}HF�H��[]A\A]A^A_�@H9�s�M�w�M��u�DI�F�M����I��H��L��H����H�H�H9�w�M���L���x�xR�x�H�p�xH�x�H�p�x>�x�H�p�x4�x�H�p�x*�x�H�p�x �x�xI�E�R���DH�p�@H��t�H��H)�H��I)�H��L��H��I���}�H�H�H9�vKM��~FJ�;H9������M�}H�����D1��H����Hc�H��fDI���������@M��H��M�}HE����DH���}����UH��SH��H��dH�%(H�D$1�H�$H�E��t/H��tH9�sH��H)�H�t$dH34%(uH��[]�H����H���P������iQ�f�AWAVAUI��ATI��UH�,7SH��H��H���0����A�|$tEH9�r��H�H�H9���L��H��H����<���0H��[]A\A]A^A_�@L���B��u�H��H���Q�I��H���%L�u�H��CI���������L��H��L���b<��~�H�I�H9�t;M��L9�r�fDH��I9���L��H#t��H����H�L�<M��u�H��� []A\A]A^A_�@H�M�H9�s2H���������H��H#t�H��H#�H��H9�w�I��I)�H��BJc�H�>��}�xE�}�H�M�x;�}�H�M�x1�}�H�M�x'�}�H�M�x�}�H�M�x�}�������H�M�H���H�������fDH��H)�H������Hc�H�>��fD�}��	����}�L�}�������}�L�}�����}�L�}������}�L�}������}�L�}������}������L�}����D�H���Hc�H�H��������K���ff.����H��t@��t�H�H�у�H��t��@���ff.�@��USH��H��H�H��� uXH�GH����H�h�H��wH�H���H�PHE�H��[]���H���|�*�H�Hc@��fDH��u;H�C H����H�h�H��v��H��tY�T*�H�Hc@H���@��u�H�Ѓ�H��t��(��@�e����H���p ���u���f�H���X ���@��H��� tH��u�fD@��u�H�ƒ�H��t�@t�UH���S��H��H��H�oH��v��H��t �)�HH��H��H��1�[]���DH��������ff.����AUATUSH��H��L�oL�gH�H��t@��tyH�kM��~"L��� ��L��L���yf�L���]�H�H��L��H��v.��H��tf��(�HcP�E��~H��H��1�[]A\A]� ��EH��[]A\A]ÐH�ƒ�H���w���H%���H�kH�M��~�H���r���fDH�������@��H�5 HH���H�f:H�81����ff.����ATI��UH��SH��H����*� �H�3H��t:H�� �L�cH��H�kH	�L�c H�H�� HH�H�CH��[]A\��H�-)�M�������ff.���AWAVAUATI��USH��H��D�1A��0tlH��H��I���.*��urA�� tQH��L�����H��H���L)���� A�UH��[]A\A]A^A_�A�� tA�Ef.�H��L)�H��[]A\A]A^A_��}��H����;�D$����H��L���/��I��H��t�I���������L�C�f�H��H��L��L�$�>6�L�$���:H�I�H9�tGM��L9�r�f.�H��I9���L��H#t�E1��L��A��Mc�N�<
M��u�A�E �#���M��I9�r��fDH�I�L9�v�H��H��L���5������0E�A�EH��L��[L)�]A\A]A^A_�H��H�
�<H)�Hc�H�>��{��n����{�L�{��`����{�L�{��R����{�L�{��D����{�L�{��6����{�L�{��(����{��&���L�{�����D����0ED$A�EL��L)��2���ff.����H��H��H�H�w�H� tH�x���ff.����H�%0tÐSH�����H�sH�{H� tH�{H���J���H���H���H	�H�[�fDAVf�AUATUSH��H��0dH�%(H�D$(1�H�)D$@�t$�T$��uuL�5^aII�>����L�d$H�-S>I��L��H��H��L��H�\$��S�H�D$H��$t�I�>��H�L$(dH3%(��H��0[]A\A]A^�@H�wH��� tH�{��H�{H��t@H�H����A��H��tiE��t(H���W�=tH��D���NN�H���F^�H��L�5�`IH�k I�>�'���H�|$�Q*����@H�|$��+H�D$�?���H�����A����2G�f���H��8dH�%(H�D$(1�� �H�$H��tJ� ��H�t$1�H�$H�+HH�|$H��H�H�t$ 1�H�D$�G���H�L$(dH3%(uH��8�f�H�=I}H��t�鸌��F�f.���SH���3(�H��[H���W������H��8H��dH�%(H�L$(1�H��H��H��H�����1�1�H�����H�L$(dH3%(uH��8��.F�ff.�SH�H��H������H��tR��t5���t"��tH���0H��t�0"�x��[��H���8U�[=���fDH���`���ff.��AW1�AVAUATUSH��H�|$0dH�%(H�L$x1�H�O�D$jf�T$n�D$pH�L$8H��u0H�L$xdH3%(H�D$0�H�Ĉ[]A\A]A^A_�DH���P��H�I��H�$H�KH�L$H�$ t	H�CH�D$H�D$HD$8H�D$@�H�$I��H�D$qH�D$ H�D$jH�D$H�D$TH�D$(H�D$XDH�$H�t$L��L���4E�I��H������u4H�D$(H��t*��P������P�������0��	�sH�4$L��L���0�Hc�H��~�M�dL��L��L��A�V L���ʼn�A�VX����L����A�VX���	�D$H�����L��H��L���U�����4������@A�E��0��	�����R���f��D$T���H�D$0H�H�½H����H��v��H���)��hH�D$0H�H�\$@H\$8�� ��L�|$0L���+-�Hc�H�H��H9�����U�H��H�D$0H�0H�PH�4$L�$$H�pA�� tH�pH����H�D$0H�HH��t��TH�D$0H�H�$I��A�� H�D$0H�X �EH�����D$PH�k�H����A�~��I�D-H�D$f.�H�D$I��8�/I����H��I���u�H���%1�|$P������|$��H����L��H+D$H�\$@�H�D$HL�l$(�D$T�S���H�|$ �H��L����A�~�T���L��L��L���-���t���L��L��L��A�V ���_���D�x�L��D��A�V(���I���H�H9��>���L��L��D��A�V0L��L��L���1-������f�L��L��L��A�V L��t$��A�VX�����D$P���@�(L��L��L����,��~#Hc�H9�t�H��1�H)�L������fDL9���������v���I��K�t=L��L���,���u#I��u�H��A�K�|=1��P��;���H��L)�I����@L��L��L��A�V L��t$��A�VX�������������D$H���w���H�|$ �H��L�����]���DH��u{H�|$XL��H���������fDH�t$ H��L���Y�����H�t$ H��L���Y��L���1��A���f�A�E�P����/�����a���������H�|$X�H��L���{��k���fDH�|$X�H��L���[��b���fDL�<$L�l$jL�d$qL��M��I��H�$H�t$L��L���?�I��H����H�4$L��L���*�Hc�H��H��~�H��L��L�����L��H��L��������U���I�tL��L���*�9�tL��H��L���Z��A�~uL����/����H����L��H+D$H�\$@H�D$H�:���L�|$0Hc��H�I��g�I�_ I�GI�H�$I��A�� H�D$0H�hM��tH�hH�D$HL�|$@H�T$8L�dH)�K�<<L���i7�L��H�t$jL���Y7�H�D$0H�|H�XA�F�����H�|$0�qM����@H�\$@�4���fDH��L��L���W�����D�H��L��L��������H��L��L���RW��E���H�L$0H�H�$H%���H����H�L$0� H���!����G��H�I��H�$A�� ���Hc�1�����7���H�|$0��������H����V�H���4����=�ff.��SH���wL�=0t[�H���&���H�54�H�PH��HH�81��jF�f.�AWAVI��AUATL�gUSH��(H�t$dH�%(H�D$1�H� tL�gI�^H��tPH��HI�,H�H9D$��L���D�H�|$I��H� H�OL�tH�OM��t=H�$I9���H�L$dH3%(H���	H��([]A\A]A^A_�f.�IcE����L9�w�@I9���IcEH��H��L��L��H��H)��D�L��H��H��H��A�U���LIcEH��H)�L9�r�H��L��L����C�1�H��L��H��H���,��
HD���D�H�$HcPF�l9�I9�u'I����J�49H��H�$H��PH�$����H�t$L��H�$��G�H�|$I���J�=0����E:l�H�$����I��M)�I��~L��L��H���C�������H��L��L��L���C�I9���H�D$H�D$H�D$�y���f�A��
�e���fDL��H��L������H���J���f.�H��L9�w8�H��L)��%���DL9������}�
t����@�}�
t�H�݀}�
u�H�]�L9�w�L)����L)�����:�ff.���H���sI�=�HE�H���ff.���H���CI�=0�HD�H���ff.�AVAUATI��USH�H��H������H������tg��tV��tRH�%0H=tB��xt7L�kH� tRH�kH��I�N�t%��A�L��L��H��H���aA�L9�uC[]A\A]A^�H���H�=t�L�kH� u�H�k�fDH������]���H��HL��H�5�'H�81��^B�ff.�UH��SH��H�H�H��xqH�H9�NH��x6H)�H9�}	H�:H�H��H��H��H�����H��H��H��[]���fDI��I�xL�L��H��H��H�CHH�5� H�81���A�H�+HH��H�5� H�81��A�ff.�@AVAUI��ATI��UH��SH��H��H�dH�%(H�D$1�H������H����������������H�%0H=tx���xtmL��L�t$L9���L��L��H��H�����tw�� tr��	��vjH��L)�H�t$dH34%(��H��[]A\A]A^�H���F�=u��L��H�
.L9�vP����t�<t�H��H9�u���HcD$H�H9��c������f.�H���	�����1��f�����6�DAVI��AUATI��UH��SH��H������H���F�=0� M����I9���H�H������H����������������H�%0H=t��xttH��H��H��L��L���6�I��H��t1�L��H��L���8��t�� t��	��w^�L���[1�]A\A]A^�DH���@E�=u�f�H��H��,fD�S���t�<t	H��I9�r�H��H)�[]A\A]A^�f.�H���(������H�
HI�VH�5��H�81���>�DAWAVAUATUSH��H��HH�|$(H�t$ dH�%(H�D$81���7�H���8H�H��L�cL�s�� tL�sH�D$ M�H�0L�hH�XH�t$�� �,H��I݃���H���������t0��t,H�D$(H�H�D$%0H=t���x�H�D$ H�H��H�D$H������H�������L��t7��t3H�|$ H�?H��H�|$��0H��t���}�x��I9���M9�w$�DI��H��M9���L9��~A��8�tۍr��у� ���p�Bщ��� ��B�9�t�H�H���n�H�X�����H�|$(�C�=����I9��M9��	H�D$0H�D$H�D$4H�D$�MA�O�D���� ���H�DB��ƒ� ��B�D9��HcL$0HcD$4I�H�M9���L9���H�T$H��L��L����H�T$H��L��A��H����E��x��y�H��L��L�����H��L��H�߉D$0����LcL$0H��L��HcЉD$4A9�D�L$INщD$�];�D�L$HcL$����A9���Hc�I�H�M9��Q���H�t$(H�|$ �H�vH9wt����H������H�t$8dH34%(��H��H[]A\A]A^A_�fD����H��������H�|$ �vA�=�p�������fDH�|$(���������H�H��?H�������H�������p���H�|$ �_��E����1�D��@��t H��u	��@��u�H���H��u�USH��H��H�����H��H�����H��H��[H��]���f���USH��H�H��0t1�@��H����[]�H��H����H��v��1�臏�xu�H���	"��u�H��1��K@�=@��H����[]�f���SH�H���H����H��v��H��t���pH��[�:���f.�H���(����p��ff.����ATH��HI��UH��SH��3>�L��H��H��H��[]A\���ff.���USH��H��H��H�w�H� tH�{�	�H��H��H���{��H��H��[]�=�ff.�f���H���C��H���;&�H��H����ff.�@��AWAVAUATI��USH��8�6�ÉljD$�����$�xI����H�ǽ�x ���xM�l$I�$ tM�l$M�D$M�M9��CI��������A�U�Pf.�I9��_A�U��$@�ƀ�@��@��l��{�cM���;H��fD�I��M��I�]I)������#t����\����"���¾�� ��^������<$�L��L��L��L�D$��L�D$I�����������D$~@L��L��L��A�V �L�D$I��������=��D�\$��A��Mc�L�DL9��XH�L9�����H��1�I�\$���I��I�$ tI�\$M�l$I�GI�I� ��L�L(�"H�hI9��XL���f��L�c<"�)<\�!<#��<
��<
�<	�Y<�q<��<��<��<����L�]�Q�^��M���E\M)؃|$��L��L��L��1�L�$H��L�����L�$L�P��fDI�~�o�H�h�v���fD�B�<� �������M���H��GH�52H�81��6��I��~�H��I�����fD��^���fD�E\L��H���E�L9�������"H�]f�EA�~��L��I�NH��"1�H)�H������D$�t$L���)�I�H%���H
I�H��8L��[]A\A]A^A_�fDH�EM9�v)�S��$@�ƀ�@��@�u��{uH�U�E\H��H���E#L��H���E����H�������\nH��L��f�E������\rH��f�]�L������L��L�$�\�L�$���*�������I�G�q����1�=��@��H��	���@A�\tH��L��fD�]����f�A�\fH��L��fD�E������\vH��L��f�}��j����\aH��L��f�M��U����\bH��L��f�u��@����EL��L���2����\eH��L��f�U�����L��L��H��L�D$(L�\$ L�L$�L$��L$L�L$L�����L�\$ L�D$(���$����L�D$ H��L��L��L�\$L�L$A�V Hc$L�L$��L�\$L�D$ L�=��KL��H�L��1�L�$�{��L�$L�L$L��L�L$L�$�Q�L�$L�L$L��I�,�N���L��H��L��1�L�L$L�$�+��L�L$L�$���UH��SH��H���D�H��H��H��H���GH�8H��[]�
��ff.�f���UH��SH��H�����H��H��H��H�C�GH�8H��[]����ff.�f���H��GH��H��H��H�8���@��SH��tH���^
�H��[H�����H���GH�5YH�81��*2�f.���USH���~uH��H���
�H��H��H��[H��]��.�H�:�GH�5H�81���1�f���SH���sC�H��[H�������SH�����H��[H���w�����H�-�GH��H��1�H�8�%��D��H�
�GH��H���H�8���f���H��GH��H���H�8����f���UH��SH��H��H���h�H��H�މ�H���GH�8H��[]���ff.���H�%�H=tSH���E�H�޺[H���2f�H���ff.��AVAUATUH��SH�H��H����H��v"��H���f�A�Lc`M����A�A�L�uH����M�H��I9�lH��uGH�uH�E ��H�KM����J�<1�A���WL�sH��[]A\A]A^����u�H�H�ƒ�H��t�H%���H�뚐H�EH��0H��0��L�e L�uL�m�� �1H��� tI�@uB���H�kI9�t.H����H��v��H�����0�H����6��H��uCL�,%L��L�$% M���?A���EH�}����H�M����D����H�H�ƒ�H��t�� H�H��L�k��H��t~�������qDH���@�H� I��L�hL�p����L�h����H�uH�KM���o���H��L���>�H���\���@L�m�����L�kL�c L��M����������H�H�ƒ�H������L���H�M�������A������<f�H���8������Lc`M�����DH�������L��1��F�I�$H�ƒ�H�������H
I�$���Ic�1��������H�������-���H�=+1��d�A��u6L��H��������I���H�H�ƒ�H���'����1����H��������ff.�f�UH��SH��H������H�UH������H��t,H���d@�H�EH�%0H���H	�H�H��H��[]ÐH��������@UH��SH��H��fH�=��GffH�
�H��(� H�8���H��H��H��[]�^���ff.�AWAVAUI��ATA��USH��H��H�n����H������Ic�I��H�H��H����H��w<�� uTH�sH��L��L���u���H��E��uuH���"�H��H��[]A\A]A^A_���H�����HcpH��� t�H�|5詫��tmH� t�H�s�fD�+0�I��H��o���H�H������H���H����>�H�H�U%0H���H	�H�E�N���H����|H�k L�sH�MH�U�� ��L�EL�{I)�L��L)�L)�H��M��
L9m��H��L��L�$�<���L�$H��LpM)�Lx����DH����������H�����H��v��H������HcxH{H���|�����H�H�k�H����H��v��H�����J��Hc@H�l(fH�=i�GffH�a�H��L��H�8���H��H��t�u
�0@H��蕻��H�H�SH�s�� tH�sH�MH�}�� tH�}E1�H����H���%0L�EH	�H�MH�E�� tH�ML�,H�H����H��v\��H������@A�E�������Hc�1�L������v����H����������H�U�4����A�E�D���fDH������H����H����H���|9�����H�}����H�M����@�C9�H�SH�MH�I�����H��L�����H������H����������H����������H�������A���H�߉t$L�$����t$L�$�g���H��L�$����L�$��H��<���f�AUI��ATI��USH��H��� �H��H�^���H��v��H�����
��HcPH�\fH�=,�GffH�$�H�ٺL��H�8�q��H��I�$�� tm���I�t$ ���I�D$H�EH����H�E I�D$H�EH��%�H=�����H]H���0H�]H��[]A\A]�fDI�T$H�����H����H�EH��%�H=������H	]H��H��[]A\A]�f�fH�=H�GffH�@�(� L��H�8���H������@��ujH�H�ƒ�H��t	H
H�H�u H���f
������L�������L���W���I��H�H�Á���� ��I�D$L������f�H�u �����H�}I�t$��6�I�D$�����L���0���H	]�ƅ�����H���|�H��H��[]A\A]�fDH���p������f�L��H��?��Q��H]��0��H�]��u����L��������H�u+H���GH�WH9uSH���*:�H��[H���N���fD�S����H���jAWAVAUATI��UH��SH��H���d@���
H�H���I�|$H���oH���.I�$H��H���D$��H��v��H���M���@�D$L���ٞ��H��1�H��H���GH�8�b���I��L�hH� tL�hH��u9I�|-�|$I�o��L��L�����H��L��[]A\A]A^A_�DI�\$I�t$I�$ �8L��H���=H��H��?H�H�I��H9�}�/DH�I9�|H��t�I�|H��L��H��4�I9�}�I�|H��H)��Q���L���r4��D���DH��������H�H��H9������H�y�GH�5>5H�81��$��I�$I�D$�� tI�D$�8�����H�]H��訣���fH�=��GffH��H�5q�GH�ٺH�6H�8���I��H�xH� tH�xH�U1�����f�H���H�H�����I�t$L��H������H���3�I�|���DH���GH��H�8���fDfH�=(�GffH� ��H�5��GH�6H�8�d��L��H��I���������L����������HcT$1��������fH�=��GffH��(� H�5f�GH�6H�8���H�}�H�h I������I�GI�oL��L���{����H���GH�5�4H�81��n"�ff.���H���AWAVAUATUH��SH���ۛ��H�u1�H�$���H�UI��� upL�mH�]M�~I� tM�~I��A��0I��WH��M�n��H����I�H��H%��?�H	�H���L��I	�M�&H��[]A\A]A^A_�H�]L�m�fDH��M�F����H���yI�Mǃ����������H�U��0H�����
��x��I�� �FH�$A� �xuH�����E�A���A�� I9�w��Lc�E1�M)�M��u7L�L9���H�$L��H���w���Ҁ;�Lc�DH�M)�M��t�L��H��L��L�L$��0�L�L$믐H�A�GH��H�8���fDH���`&�=�2���DI9�vH���C�I��A�L9�u�L�mH�U�P����H���X��L�����~3�I��T���fDMc�L�mH�U����H��L�D$�#��L�D$���n����I9�w/�f�H��H��L��H�L$��/�H�L$H�L9��h���H�$L��H�����Hc�I)�H��t��AWAVAUATUSH��XH�GH�|$(H�t$H�T$dH�%(H�L$H1�H���H�L$(H�H�iH�T$�� ��H��WG1�1�H�l$0H��-�H�D$8L�` H�D$0H9��H�t$0�D$E1�H�t$ �H��I��H)�I��L�wH��,���H��H�t$ H�|$I�$L�xH��L�`H�@O�7L��L�0H�D$I���Px����Hc�D$H�D$0H�SH9�r�Hct$I��� 1����H��H�HH� tH�HH�D$8H�X H����H�D$8H�D$@H�D$8H�D$(H�H�D$H����H����H�UH��H��?�H	�H�EH�L$HdH3%(H���%H��X[]A\A]A^A_��H�sH����-�H�SH�[H��H�H��tH�SH��u�H�[H�H��u�H�D$8H�x H�@ H���B���f�H�_��$�H��H��u��*���f.�H�i�����L������H���H���GH��H�8��H���)���fDH�|$(�F��H����l0��
���1����H�D$8H�x H�@ H��tH�_�Q$�H��H��u�H�2�GH�5��H�81�����<�ff.����ATUSH�Ӻ�H��H��dH�%(H�D$1��D$�����H�߉D$� ���H��I���5���H�sH��t4H� tH�{t$�D$@t=1�����H�T$L��H��H��H���X���H�L$dH3%(H��u"H��[]A\�@H�t$L��H���h���H�����n�ff.���UH��S��H��H�������H��H������H��[H��]�.��ff.���ATUSH�Ӻ@H��dH�%(H�D$1��D$@���H�߉D$����H��I���(����l$��@������H�H��0H��uoH�sH�{�� tH�{���H��H�H����H����H�UH��H��?�H	�H�EH���,���H�L$dH3%(H����H��[]A\�@H�t$L��H������H��������I9�t>A�|$t6��tV�D$@t�H�s1����H�T$L��H��H��H��莬���@H��)���H���x��H����-��U���f�H�H��0H��u��������UH��S��H��H������H��H���L���H��[H��]�^��ff.���ATUSH�Ӻ H��dH�%(H�D$1��D$ �/���H�߉D$�C���H��I���X����l$��@������H�H��0H��uoH�sH�{�� tH�{����H��H�H����H����H�UH��H��?�H	�H�EH������H�L$dH3%(H����H��[]A\�@H�t$L��H���H���H�������I9�t>A�|$t6��tV�D$@t�H�s1��4��H�T$L��H��H��H��辪���@H��)���H�����H�����+��U���f�H�H��0H��u��������UH��S��H��H���)���H��H���L���H��[H��]���ff.���ATUSH�Ӻ`H��dH�%(H�D$1��D$`�_���H�߉D$�s���H��H��舟��H�sH��toH� tH�{t_�D$@u8H�t$H��H�����I��H�L$dH3%(L��uIH��[]A\�f�1�����H�T$H��H��H��I���s���뼐H���GH��H�8��I����
�@��UH��S��H��H���	���H��H�����H��[H��]�n��ff.���SH���#+�H���GH�:H9�uH��[��H��[�/�ff.�@��SH����*�H��[H�����AVH��AUA�ATI��UH��SH�� H�H�|$H����dH�%(H�D$1�H��v��H���4���H�L$D�hI�,H;At\H�yH� uGL�H�����H��H�D$H�D$H�D$H�t$dH34%(H���ZH�� []A\A]A^�fDH�y�f�fH�=��GffH���H�5a�G� Mc��(H�6H�8����H��H����I�.H��H9���H��uPH�D$H�pH� tH�pH�KH����H�<)�A����H�D$H�kH�D$H�D$�2���@��u�H�H�ƒ�H��t�H%���H�두H���(������H�L$D�h���H�t$H����H�#���LcH;k����H�k����DH��L�H����$�H���M���f.�L��1�����E����
�ff.��USH��H�GH9���H����H��H����H)�H9�HN�H�����th1�H�����H��H�EH����H����H�H��H��?�H	�H�H�{tSH�H�MH%�����0H��H��H��HD�H�H��H��[]�fDH��g����H��H��[]�H���H����xt"H�H���H�� H��H�H��[]�@H�����H�H�����u�H��H����H���p��H�߉��&��7������UH��SH��8dH�%(H�D$(1������G�����H���t6H�H��1ɺH���q���H�L$(dH3%(��H��8[]�fDH�JE1�H�T$ H��H�t$H�L$ ���H��tUH��t�H�T$ H�t$�H�������fDH���t@H�H�V��tTH��H��H������k���@H����H���H����H��H�t$���H�t$H���f�H�����H��뢺�����o�ff.�@��USH��H��H��� ��H��H�o���H��v��H�����p��HcPH�l*fH�=��GffH���H��H�50�GH�8H�6����H��H��H����H�������xuDH������u8H�H�U%0H���= tK=0tDH��H��=HD�H�UH��H��[]�fH�=��GffH����(� �b����H�� H�U��H�����������AWI��AVAUATI��USH��8H�H�|$H����dH�%(H�D$(1���H���A������������I�%0H=�����x��H�|$��H�D$H� ��H�XH�hH��H��ʼn��I��H9�vTL�t$�fDL���x!�HcD$H�H9�s2H��L��L��H������H�tM��u�H���V#�HcD$H�H9�r�H�D$H�D$ M��H�D$ME��)�L����=�I���DH�|$L���{���I��H�L$(dH3%(L��u4H��8[]A\A]A^A_�fDH�XH�h�#���L���h��������ff.����SH���3���tH��1�[�D���@H��[������H�tH����H��1�1��L�ff.����AUATUSH��H�H��(H��(u	H����%0H=0uH�G H��� ��H��E1�fH�=i�GffH�a��(� 1�H�8���H��H���B�H����H��H����H��v��H���(����pH���8���I��H��� ��H�����H��v��H�������HcHL����0k�H�sI�D$H� ��M����H�CM�l$ I�D$H��H��[]A\A]�DI��@���:���H�EH�ƒ�H���&���H
H�E������L���H�CI�D$H�%@I	$H�H��H����H�H����H�,% H��t
@���`I�|$�S���I�$�F����H�sM���2���L��H�����"���@���"���H�ƒ�H������H���@�������H��[]A\A]�q����uH�ƒ�H��t������H�k H����@���|H��H������uH�H�ƒ�H��t��H�H������@������I�$H�ƒ�H������H
I�$��f�H�����������H���������H����������������H�H�ƒ�H���y������f�H��1�����|������H�~uH��� u�@H���t��u�H;w u�uހ��H�H�F H�G H�%@H	�H�H��t@��uH�H�ƒ�H��t	H%���H�H�F���AUATI��UH��SH��H��褄��H��I���9�H��L��L��[H��H��]A\A]����ff.���UH�oSH��H��H���w���uSfH�=��GffH���(� H�5:�GH�6H�8����H�{�H�X H�����H�E�H��H��[]ÐfH�=H�GffH�@��H�5��GH��H�6H�8H��[]�����SH����H��1�1�H��[�S�����H��� tMH��u/H��SH����H��v
��H��t6���H�{[�7��@��u�H�ƒ�H��t��@t��fDH��������@��H��uH���@��uZH�H�ƒ�H��tKH��0@H�� u9H��S�H�_ ��H��v��H��t*�����HcPH�<[H���fD1�H���f.��;����������H�������fD��H��t@��tH�����f�H���H��u�H�����H��t@��t!S�!
1�1�H����H��[H���fDH���H��u�H�����AUATI��USH����I��I�$�� �H��I�\$���H��v��H��������HcPH�\fH�=�GffH�	��H�ٺL��H�8�V��H��I�$�� tj���I�t$ ���I�D$H�EH����H�E I�D$H�EH��%�H=�����H]H���0H�]H��[]A\A]�I�T$H�����H����H�EH��%�H=������H	]H��H��[]A\A]�f.�fH�=(�GffH� ��(� L��H�8�k��H������@��ujH�H�ƒ�H��t	H
H�H�u H���F�������L�������L���7��I��H�H�Á���� ��I�D$L�����f�H�u �����H�}I�t$��I�D$����L���0���H	]�ƅ������H���\��H��H��[]A\A]�fDL���P�����f�L��H��?��1��H]��0��H�]��u����L���
�����H��u�R��f�@��u�H�H�Ѓ�H��t��u�H��tH���@��t��ʐ��SH��H�� H���GdH�%(H�D$1�f�;u'H�(�GH�8����H�L$dH3%(u-H�� [�f�H�|$H�|$�ѲH�J2H��HD�H�t$����fD��AVI��AUATA��UH��SH��H���GdH�%(H�D$1�f�;�FH���GL�(E����H�E�� ��H��H�]���H��v��H�����o��HcPH�\M����H�ٺL��L���ڽ�H�UL�mH��H�����H���~H�CL��%�H=���A���L	+����H�����H������D���M����L���(� L���Y��H��H�EI��A�������H�����H�U�� tH�UH�SH��u}H�C H�EH�CL��%�H=��II����L3I��0L�3E��tH�@H�L$dH3%(H���wH��[]A\A]A^�DH�u �t����@��uJH�H�ƒ�H��t	H
H�H�s H������\����fH�=�GffH���L�0����H�s �2����H�{H�u��H�E�l���f.�fH�=��GffH���L�0�����H�|$�&�H��/H��HD���f�H��A��0���L	+�ƅ�����H���|�������H��I��?��q��L3I��0��L�3��u����f�H���H����m�����L�����H��H�H��I��A��������f��fD��AWAVAUATUH��SH��H��HcJ9J��I��E1�t@H9�sH��L��H��I���F��H�H�H9�w�H��L��[]A\A]A^A_�f.�H������u�I���������L�u�H9�sŐ�����L��L9��L��H��H#t���L��H#��H��I9�w�H��H�
��H)�Hc�H�>��@H��E1�H)�H�H��H��A��I��G����}�xR�}�H�u�xH�}�H�u�x>�}�H�u�x4�}�H�u�x*�}�H�u�x �}�xH)�I�����H�u�@H��t�H��H)�H��I�H��L��H��I�����H�H�H9���������f��H���Hc�H�4��H��������AWI��AVAUATUH��SH��H���HcJ;J�"I�Ճ�tzE1�H9�w�DH�A� I��H�H9�s0L��H��H�������A�0IcEH�H9�HB�I��H9�r�A�����H��L��[]A\A]A^A_�fDH�������v���H9���E1�L�E�I���������fD�����L��L9��XL��H��H#t�(�L��H#�H��I9�w�H��H�
��H)�Hc�H�>��@A��L���@H��E1�H)�H�H��H��A��I��+����}���A���uA�H)�I�����D�}�x2�}�H�u�x(�}�H�u�x�}�H�u�x�}�H�u�x
�}�H�u�y�H��t�H��H)�H��I�L��H��H��L�D$�l��L�D$��~#A�H�HÁ� A�I��H9������x���H���0��D�H����H�H�4�H�u��f.�H������A�E1��1���f�AWAVAUI��ATI��USH��H�dH�%(H�D$1�H������H���>������������I�$%0H=�����x��M����M�<$I�l$I�\$A�� tI�\$A��0L�4+D�|$uqH�L$L��L��H������H�ŋD$�����H�L$dH3%(H����H��[]A\A]A^A_�f�L����=�e���DI�l$빐A�EA9E�2I�� �E��tp1�I9�v�f�H��L��L��H����H�H�I9�w��g����L���`������f�I�$H���H	�I�$�1���f�L������u�D��1��A1�A����I9������I���������M�f�fD����AL��I9���L��H��H#t��L��H#�|H��I9�w�L��H)�H��H�
;�Hc�H�>��L���u��I���!���Hc�H��1�H�H��H��@��H��\���@�{��I9���A�E���f�I���������M�f�I9��!���f������L��L9��L��H��H#t���L��H#��H��I9�w�L��H)�H��H���&7�H�
��Hc�H�>���A�~���I)�L����f.�A�~�xIA�~�I�v�x>A�~�I�v�x3A�~�I�v�x(A�~�I�v�xA�~�I�v�xA�~�y�I�v��H��t�H��H)�H��H�H��L��L��H��蝲�H�H�I9��������f.�A�~�xAA�~�I�v�x6A�~�I�v�x+A�~�I�v�x A�~�I�v�xA�~�I�v�����fDH���
���H��H)�H��H�H��L��L��H�����H�H�I9�������v���H����1�I9��a���f��%�=���H����H�I9�u��4���@�H���Hc�H�4�l���@�H���Hc�H�4����@I�v��G����H���E���H���
���H�SL��1�H��H��H9�v!f��%�=���H����H�H9�u�H��H9��3���H�H�H��H��H��H��H��H	�H!�H��H��H�H��H��H�H��H�� Hƒ�H�H9�w��������f.���H��1��Q���H�@H�xH�DH����H��H���t��@��H���û�H��H���W�����AVI��AUATUS�Lq��H��H��聿����H��A�苆��I��H����I�nI�^I� u^H�H9�v\E1��
�H�I��H9�sE1�E1�H��H��H��L���=��H���E��tSH��������?I9�v4[L��]A\A]A^�D��@I�^뜸E��uL��E1�����DK�D6[]A\A]A^�f�L�����H��������?I9�w����[L��]A\A]A^�@��H��E1��z��I������ff.�f�������AWAVI��AUATUH��SH��H��8�L$��H��I���5��=0��I�M�^M�~�� tM�~K�H�sH�L$H�t$H� u3L�cM9���H����M��u(H��8H��[]A\A]A^A_�fDH�KH�L$��DL��H)��BM�H�L$L��L��L��L�T$�D��L�T$I9��6H��L)�H)�H���H�I��H�|$M��H��L��L���8��I��H��y�H���h����H������H���E������������I�%0H=�L�\$ ����L�\$ �xtj�D$E1���ueL��L��L�\$ �/���L�\$ E1�I��L��H��D�D$,L�\$ ����L�\$ D�D$,H��x9L��H)�H9�|5�D$��t}I����DA��T$M�ޅ�t�L��H��y�L�y�f�H������t���@L��h����L��L�\$ �3��E1�L�\$ =�D$A��D	��3���fDH�t$H��L��L��L�\$踘��L�\$H���^���L��L�\$ ���L�\$ �����ff.�@AUATA��UH��SH��H��H���H��tH��A��1�[]A\A]�
���DH���H������I��E��t@H��xKH��uVH����H��GH�:H9�tH������H��H�SL��H��谧��H��L��[]A\A]�f���F����@@��u�H�EH�ƒ�H��t���u�H���GH�8�f�AWAVAUATI��UH��SH��H��dH�%(H�D$1����L��I����=0�~H�H������H���0��t;��tN��tJH�%0H=t:�E��xt/L��H��E1���I���&@H���@��=u�f�L�sA�L��L���{�I9���L��L��H)�H)�H9�HL�H��M��tDH� t^H�{H��t^L�sH�/H�,$I�E����H��tL9�IG�L��L��H����t��H�t$dH34%(��H��[]A\A]A^A_�H�{H��u�I�T$I�t$I�$ tI�t$��������H���@H��萺�����f�H��L��L��袓��H���]���f.�H������a������ff.�@��1��U�D��SH�����1���t
H��[�$�@H���H��H����H��[H����@��USH��H��H���@uH%���H�H��[]�f��H��� t�H��t��u�H�ƒ�H��tĩ@t�H��H�k���H��v��H��t(���HH��H��1��s���H�H%���H�H��[]�H���H�����@��SH������H���۠��H��[�fDH���u�DSH��H��t@��tH�����f�H�ƒ�H��t$H�ƒ�H��tשu_��u�H��t-[�@H���tр�?H�H��@uH���^��H���t�H��[�K��H���u%H���\�H��H��GH�5��H�81��:��H�=�1����ff.��AWAVAUATUH��SH��H��H���h��H��L�mI�����H�A��0�� t@H����H����H��v��H�������H�{���H�CH�CH�EMcfH��H�C����H�MH��M�<I��I9���H�H���n% J�!H�uH�E tH�uH�{H��tH�{H���-L��H����H�H%���I	�L�+H��[]A\A]A^A_�@���*���H�ƒ�H�������@����H�EMcfH��H�C�8��L�EH��O�<I9��+H�E ��H��uMH�EH�E tH�EH�CL�e H���:L�c H�%% H����H�E����u�H�H�ƒ�H��t�� H�H�ƒ�H��t	H%��H�H�ƒ�H���t������H��i���fD�+������fD�������H�ƒ�H����H%���H�1�H�M�j����L��L�D$���M��L�D$H���=H�ML�EL�E H�����@������H�EH�ƒ�H��t�� H�EH�ƒ�H�������H%��H�E����@����H�UH�Ѓ�H��������H����L�$% 1�M��t2A���SL��1��]��L��I�$H�у�H��tH��I�$H�xuH�H�UH�Ѓ�H����H����H�UH�E�H�E�a���fDH����L�c H�UH��% @��������@H�uL��H����L�D$H�����@% L��������ujH�H����H��t���T���L�c M��tA��tfH��tY��uiH�H�ƒ�H��t��H�M��uO1������H������
���L�c M��u�1����H��% �;���L������L��H������L��A����������ff.�f���H9�u�fD�K���ff.�USH��H��H���@u%H��0H��0u	H%���H�H��[]��#���H��� t�H��t��u�H�ƒ�H��t��@t�H��H�k���H��v��H��t 蛼�H1�H��H�����H��v���H���ز����@��UHc�H��AWAVAUATI��SH��X�}�H�U�dH�%(H�]�1ہ����H��H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����L�|$I���L�}��E����II�<$H��tG�H�1�1�H��@��uZH�H�u������
tk��tf��uH_H9�taI�|DH��H��u�1���H�5��H��H���GH�81����DH��t�H��t�H��$t�@��t�H�u��H��H9�u�L�}�A�L�����I�H��������H)�H��H�E�H����H��v��H���<H�u����H�u�LchH�E�H�@H�H9���L�}�D��H�M�L���n��H�M�H9��3H��������?H9���L�}�I�7�� ��L��H�M����H�M�H��I�|
H9����H�M�����H�M�I��H�E�L�(L�@H�pA�� tH�pM����H�E�L�HH����H�E����L���H��t
L��H�u��� H�H�E�L�(L���H��tL��H�u�H%��H�I��H�E�H�H �R@I�DEH9��L�}�H��I�7�� ����L�}�I�t
�H�M�I��
��H�M�I�GI�O M�GM�/H�M�L��L�I�� tL�I�M�O�,�����A�M��L�}�I�D�H�E��:f����0L�WH�wH� tH�wM����M�I��I��L9u�tCA�I�>��
t��u������I�H�Ǩ���{��A�EI��I��I��L9u�u�H�M�H�L�AH�M�H��LÃ�H�YH���^A�EH�E�H�H��0���}�� ������fDH�]�dH3%(H�E��=H�e�[A\A]A^A_]�f.��k���K���fDL��L��L�U��a��L�U������M����D�i�1��.D����H�%0H=u9H�CI9���H��H�E�I�<܋���
t��u�@�����;���v�H�E�H��H�u�H%���H�����fDH��H�4�H��>�EH�VH�}�H���z��H�E��W������H�������@A�E�������Hc�1�L���Q���s���H)�H�L�����fD�3���S���H�E�H�H�U�H�U�H�U��N���H�O�GH�5�H�81�����H�}�H�u����H�u������H�}������b���H�]�H���Z���H�1�H��������H��H�E�H����H���]���H�E�1�A�H�H�z���L�,%�k���L��L��H�M�L�E��~��H�M�L�E�I�����L�(�@����������H�=H�1����f���AUATUSH��H�kH�����H���\��H� L�cI��tH�kJ�T%L��H��H��臢��H��~*I)�IcUJ�|%L�c���*H��H��[]A\A]�@H���H��[]A\A]�D1�虜������AUATUSH��H�kH������H���[��H� L�cI��tH�kJ�T%H��tH9�vL��H��H��荠��H���H��H��[]A\A]�DI)�H��H�tL�����IcUJ�|%L�c���~�1�����ff.�@��AWAVAUATUSH��H�kH���R���H���J[��H� L�cI��tH�kN�t%L��H��H��L��H��tPI9�vK�֟��L��L��H��L�DI��L��L�D$����M��L�D$NH��I�H��H��[]A\A]A^A_�f��۠��H��~�I)�IcUJ�|%L�c���~�1�����DI)�M��~�M)�L��H��L�������D��USH��H���n���H�{�
H��[]�H����a��H�H�KH�C�� tH�KH��H�,��H��w3�EH�H��H�с�0H��t�H���H�H��[]�fD��H��t ���HcP�E��~�1�H���D���f�H���H�����@��SH�H����H�H������H������tB��tM��tIH�%0H=t9蔲�xt.H���f���H��H����H��[�fDH�����=uӐH���8���H� tOH�CH�SH�T�H9�v2D��2H��H��@�p��JH9�r�H��[�f����H��[�fDH�CH�S�fDH���H��ǃ��+����h������USH�Ӻ`H��dH�%(H�D$1��D$`�ae��H�߉D$�u�H���mX��H��H���f���D$@t;H�T$H��H��H����p���D$�HE�H�L$dH3%(u'H��[]�H�t$H��H���о��H��H���E������ff.���USH�Ӻ�H��dH�%(H�D$1��D$��d��H�߉D$��H���W��H��H����e��H�{tCH� tH�{t3�D$@uLH�t$H��H���4���H��H�����D$t
H���
D�H�L$dH3%(u H��[]�@H�T$H��H��H���o�������ff.���ATUSH�Ӻ@H��dH�%(H�D$1��D$@�c��H�߉D$���H����V��H��H����d��D�d$A��@��A��tUH�t$H��H���U���H��H������D$%���HE�H�L$dH3%(��H��[]A\�f�H�%0H=u�H����U����H�؄�u��D�á�H9�tރ}t�A��uH�%0H=t��D$@�O���H�T$H��H��H���an���D$%�R������ff.���ATUSH�Ӻ H��dH�%(H�D$1��D$ �ob��H�߉D$��H���{U��H��H���c��D�d$A��@��A��tUH�t$H��H������H��H���z��D$%���HE�H�L$dH3%(��H��[]A\�f�H�%0H=u�H���8T����H�؄�u��D�s��H9�tރ}t�A��uH�%0H=t��D$@�O���H�T$H��H��H���m���D$%�R����N��ff.�AWI��AVAUI��ATUH��SH��(�����L�M����H�EA�H��H����H��v��H�����8��D�pH�EL�EL�e�� tL�eI�����M9��D��H��L�D$L�$�[`��L�D$L�$H��H��������L)�L9��hK�H9�|PK�I���K�<L��LE�H�$L�����H�$I�<H�M�A���8H��(H��[]A\A]A^A_�fDH��������?H9���H��Mc�H�E L�D$H�L$L�$��H�����I�<L�$H�L$H��L�D$H9���L�UA�� L�eM���<���L�e�3���K�L��L)�I9�LF�����f.���M���o���1��3���Mc�DI�\H9���K���f�H�}I�4��.��L�UH�] L�D$H�L$H�EA�� L�$�_����H���ȡ���$����Ic�1�覒������L�D$H�L$L�$����L�eH�UH�uI��L�$H�L$M��L�D$A�� tH�uH��u_L�]H��tMM��A�� @��u=L���H��tI�� L�eL��M���A�� H��tI���L�eDH�] ���L��L�D$L�T$H�L$L�$����L�D$L�T$H�L$L�$I���k���H���GH�56H�81����f���AWAVAUATI��UH��SH��@���>H�H��L�uL��H��H9��!I9��H��J�3L��HH��	���H�����H�Ǩ���,��D��H�E�@�H���P��H�UI��� ��H�uH��%0H�=��= uvI�H��L��L���`��L��L��H��H�$�޸�H�$D�+L��L���D$H���Ÿ����9D$�3H�e����0f��ۧ��J���fDH�\+H���H�UD�+��H��L��[]A\A]A^A_��H������H�����D�+A��v�L�L��H���9�����H�M0��H�����H�U�� ����H������@�������H�Ѓ�H���������@�����H��L�}���H��v��H��tN�I��H1�L��H���s���j���@H�EH%���H
 H�E�����A�����������H���X����H���GH��H�5�H�81����f���ATUSH��H��H�����H�����H��I���0��H���H������H��t\9�t,��H������H�+H��%0H=uM��uH���H�+H��H��[]A\�A�|$u�L������t���f.�H��舝��fDH��t@��t
H���
��DH�ƒ�H��tLH�ƒ�H��t۩����u�H���#���������H��H�t$���H�t$����fDH���t���?H�H��@uH��H�t$���H�H�t$��H���u2H��H�t$��H�H�t$�Y���H�N�GH�5?�H�81��}��H�=�1��?��ff.�@��SH�H������H��� tCH���YH����H��v��H�����ۥ�H�{�r��H�CH�H�CH��uz�� H�CH���LH�C�H���tL���x�BH���R��H�H������@H�� H��H�[����H���p��H�H��� �����u��fDH���@����H�ƒ�H��u1H���t&��?H�H��@��H�����H��H��H�ƒ�H�����������H���N����� t1f.��������H�ƒ�H��������@�����H��H�Ѓ�H�������H����H�CH�H�C���fDH�H�������f�H��H��H�[ÐH������H���u>H���D��H������H���H�������H�ږGH�5˶H�81��	��H�=b�1��˴�ff.���AVAUA�ATI��USL�H��I��A��I��vD��I�����u��D�hL�sM����H��������L)�L9���H�+���@��M��~)M�� u?H���ǰ�Ic�L�H��H9���H�+H���H�+[]A\A]A^�fDM��~�M�Ic�H�{�L��l��L�c H�C�f�H���(�����D�h�G����H������H�+�� �Z���H���Q�����u�H���H���������@�w���D��L��L��H����m��H�+�E���fD�����H�+H�SH�sH���� tH�sH��uGH�KH��t0��u+H��H����� H��HE�H��H���H%��H��HE�L�c ����DH���8��H���H�\�GH�5U�H�81����H�D�GH�5��H�81�������S����tI��v<��腡�xH��uH���D���t H���GH�SH�5v<H�81����@[�fDH���GH�5ǭH�81��p����H�H��t�tSH��H���D��H�[��H���H��u��ff.���AWAVAUATUSH��HH�|$(L�d$ H�t$ L��dH�%(H�D$81��G��H�t$ H�|$(�.�H�l$(I��H�E L�E��H�EH�D$H�D$ H�HL�pH�L$H� t	H�@H�D$A�G�D$H��������L)�L9��yH�$�GO�,01�L��L��L�D$H�8�b��L�D$H� H��H�h��M����M����J�|-�|$��H�D$ H�%0H��H�D$(H�%0H=tH= ��1�L���:��H�߉��0��H�H%���H	�H�H�D$(H�D$0H�D$(L�d$0H�D$ H��H�T$8dH3%(��H��H[]A\A]A^A_�f�H�hM���B���H�t$L��H��L�D$���L�D$M���(���H�t$J�|L���n������f�H��HD��>���H�EH�D$�]���f�HcT$1��$������z��H�S�GH�5
�H�81�����f���AVAUATUH��SH��L�vL�o���H��A�����D��������@�u4A9�u/H��������L)�L9�|H��H��[]A\A]A^���f.�[�$]A\A]A^�f���AUATUSH��H��H�H�t$���H9\$�	H�|$臰�H����Y�� �H�l$H�E%0H=0�.H�UL�m H����H�SH�EH�E tH�EH�CH���jL�,% M��M����A���QH��t/����H�H�ƒ�H������H�M����@I�|$uI�$H�UH������H���1H�����H�EH�%0H���H	�H�H��H��[]A\A]�f.�H��ucH����H��v��H����轜�H�{�T��H�CH�C����H��H��荜��H��H��[]A\A]����u�H�ƒ�H��t��@t�H�l$H�U��0H��0u�H�UL�m H����H��t�� H�H����H���i���H%��H��[������R���H���f�H��t@��tDH������H�ƒ�H���H�ƒ�H��tԩ���u�H��������������H��蹢����@H��t���u�H�ƒ�H���H�ƒ�H��t���H�ƒ�H���_������V���H���r�� �S������fD��uH�H�ƒ�H��t������L�k M��M���{����������H�H�ƒ�H�������M�����DH�������?H�H��@u"H������H�����I���Z���f.�H�����H�����H����H��������?H�H��@uH���j��H�����f�H�����H���p��H����L��H��踪�H�������I�EH�ƒ�H�������H
I�E���@H���@������H���1��������������H���٠�H��u���A���g����H���GH�5��H�81�����H�=&�1�菪�ff.�@��SH�
�HH���|T��H��[H���p����SH��H��H�|$H�t$�ū�H�t$1�1�H�������H����HD�H��[�ff.��UH��SH��H�|$H�|$�x��H��H�D$���=0t1H�|$���?��H9���u�}�„�u)H�D$H��[]�H�,�GH�T$H�5@�H�81�����H���>&�H��H���3&�H��H�5�IH��H���GH�81����D��AWAVAUI��ATUSH��H��hH��|$$H����dH�%(H��$X1���H�D$8H�D$@H���f����A���t$��t H�%0H=t�ɗ�E1�xA�ċt$$�������D$$E1�D�x�H�D$HH�D$H�D$@H�D$H�D$8H�$H�D$PH�D$�;�1�L�D$E��H�$H�t$H�|$H��I���mO��I�FM9���I��K�D�H�|$H�D$H蹩�H�t$HH���|��H��E��t�H�L$HH�H������H���I�������w������o���H�%0H=�[����Ɩ�E1�xA���F���fD1�fDH�����H��� �TL�kL�CM���S1��}O�tuH��H�$�:��H�$������E����H�D$HA�����H�$H�D$PH�D$M9���H�\$E��L��A���@D9��_�A��H��I��M9�s]E��tA�E�ƒ�v�H�$H��L��L���ƒ�A��D9���L9�tD��D�T$H��H��U0D�T$HcD$HE��H�I�M9�r�I��H�\$H�L��H����H�����EH�CH� tH�CH)�H;kt;H�kH���7f�H��E1��u��=A�������L�kM��������H��$XdH34%(��H��h[]A\A]A^A_�f��D$$��~6A����kH�L$@H�T$8D��D�T$H�t$�OQ��D�T$�����HcD$H�����H��H�L$(���H�L$(��������H������@�E�����Hc�1�H���{�����DL��M9������������|$$���U��H��M9�t"I��A�E���9�u�~�΀|4Pt�M9�uߐH��n����H��E1����t$$=A�ą��.���H���:��H��H�����H��� �-����|���@�L$$�������D���|P��������f�H����������D���|P�������DH������������@��AWAVI��AUI��ATA��USH��H��GH�(H��� �H��H�Z���H��v��H������HcPH�\fH�=�GffH���H�ٺH��H�8�\y�I��I��� tY���I�v ���I�FI�GH����I�G I�FI�GH��%�H=��y��I��0I��9I�VH�����H����I�GH��%�H=������I	L��L��D������H��L��[]A\A]A^A_�f�fH�=8�GffH�0��(� H��H�8�{x�I������@��ujH�H�ƒ�H��t	H
H�I�w L���V�������L�������H���G���I��H�H�Á���� ��I�FL������I�w �����I�I�v���I�F���f.�L����0蒇�I	�ƅ���L���m������L���h��������L��H��?��Q��I��0��I���u����L���'���D��AWAVAUATUSH��hdH�%(H��$X1�H�zH�D$8H�D$@��I��H��H� �`����H�D$HE1�D�w�H�D$H�D$8L�l$@L��H�D$H�D$PH�D$��H��I��H�|$H�D$H躢�H�t$HH���}��1�H�L$��H�t$H�|$H��I��M��I���H��H�UI9�u�H��L������1�A��H�L�kL�c�� ��M��D$$E�A��A��M9���H�\$(A��L���*����|P�SI9�tA�$I��H��L9�slE��t
��ƒ�v�H�T$H��L��H���#}�A��=���H�L$@H�T$8�ljD$H�t$�K��D�L$�����D$$HcD$HH�L9�r�H�\$(H�H����H����A�$H�H�S�� tH�SI)�H%���Mc��T$$I	�L�cH��L�3��u�H��$XdH34%(�H��h[]A\A]A^A_�@I9�tH��L��D��U0HcD$H� I�A��DD��I���f.����|P��������fD�D$$���H�z������^������H��t`���@A�$������Hc�1�L���%u����L�c�����L��L�c脢�L�k������H��� ������H��������7�����:��f.���AWAVI��AUI��ATA��USH��H�6�GH�(H��� �H��H�Z���H��v��H�������HcPH�\fH�=7�GffH�/��H�ٺH��H�8�|s�I��I��� tY���I�v ���I�FI�GH����I�G I�FI�GH��%�H=��y��I��0I��9I�VH�����H����I�GH��%�H=������I	L��L��D���t���H��L��[]A\A]A^A_�f�fH�=X�GffH�P��(� H��H�8�r�I������@��ujH�H�ƒ�H��t	H
H�I�w L���v�������L�������H���g���I��H�H�Á���� ��I�FL������I�w �����I�I�v����I�F���f.�L����0貁�I	�ƅ���L��荬�����L��舁�������L��H��?��q��I��0��I���u����L���'���DAWAVAUATUSH���H�H�|$(H�T$pH��H�t$xH���L$H����dH�%(H��$�1�H�D$H���<���bA���t7��t3H�D$(H�H�D$%0H=t�d��E1�xA��f�H�\$xH���Ӝ�H�|$p�ɜ�H�D$(H�x��H�D$(L�(A�� tH�x�mH�D$pH�x��L�|$(H�t$xA��0L�l$L���?��H�t$pL��H��H�D$`�*��H��H9�tH�t$pH�|$x���H��H�D$xH�xH� tH�xH�@H��$�H�4H��$�H���O�D$TH�T$pH�BH� tH�BD�\$TH��$�HDŽ$�HBH��$�DŽ$�HDŽ$�DŽ$�E���6L��$�M��L����H��I9�u�H�D$H��$�H��H���5?��A��A�����A���wWBDŽ�������ѐ�H��$�dH3%(�f
H���[]A\A]A^A_�f�H�T$(H�޿����@H�|$t@H�|$K�t-�����g����H�|$(E1��C��=A������D���H�D$�H��$�@H��H���]>�����u�D��$�A�>�tE�.I��M9�u�H�D$H= ���D$$H�\$(H�����H�H��H�L$�� ��H�@H�[H�D$8H�D$8D�T$HL�4HcE�D$hE�����}tH�|$�A���I9������� �|$T�t$$D�D$H�*���A���u=�C�H��L9��T�H�Ћ������tх�t�D�+A����H�D$(H�XH�@H�D$8�I���H��$�H��$�@�����H��H9�u�H��$�L��$�H�D$�H��H���<��A��A����|H��L����<��A�ǃ��uD��$�A���v$H�|$tDD��K�t-H�T?H�|$��}��H��D��F���������DE��|���@���H�D$�H�D$E1�H= �+���H�D$`�D$$ �x����H��虚���%� ����t$$D�D$H�D$H������HcD$$=0tH�L$(H�I��H�\$I���I	�L�)H�\$(H��H����H������H�|$(�{�����f�Hc|$h��H*D$8�YѠH�|$X�H,�H�H�D$8躺�H�D$0I9���L�t$I��L�d$`I���D$PD�l$l��f.�D�苔������-��L���T$@迷�T$@�D$�D$PHc�A��M��L+D$0J�H;D$8�I9�tAH�L$@L��L��D��A�V0�T$H�L$@��t"H��L��H���̰�H�L$@���D$DD$P�D$P�|$$uA���� BD$$�D$$H�I�H;\$��H�t$L��H���x��Hc����L��H�t$H��A�T$ Hc�A��M9�t
L�����ض�Hc�A������H�|$���t$T��t�T$l��������1�M9����D$����H�T$f�H�t$XH�L$HH�|$0L�D$@H)��H*��Y���H,�HкH�H�D$8��|�L�D$@H�L$HH�D$0N�<���H��$�H���im��^�����Hc�$�H�$�H;�$��z���H��$��D$T�m���D��H�|$�L$H�t���HcL$H��������|$T�������L$H�Ǩ���H��HcL$�����H�|$8�H�D$XH����H�D$0I9���D�l$lL�l$`H�D$�D$@�����D$PL�t$�fDD��D����A�����D;|$@��D��H��E���
��D�|$@E1�Lc�D$H�D$PH�L$H+L$0I�H;D$8��H��H�t$D���U0E��tH�t$L��H���+���DD|$PD�|$P�|$$uA���� BD$$�D$$Ld$H;\$�6H�t$L��H���ߐ�Lc�E���L��H�t$H��Mc�A�U A��L9�t
H����?��Lc�L�A�����H�|$udE1�L9��D$@����A������DH�T$H�t$XH�L$H�|$0H)�HкH�H�D$8�lz�H�L$H�D$0H�H�L$���DD��H�|$H�t��H���	D�D$TE���r���H�Ǩ���֖�A���Q���fD�|$$����|$@�� BD$$�D$$H;\$����H�\$H+\$0H�D$(H��� tH����H���MH�D$(H�x賴�H�D$�|$h��OH�D$(H�L$0H�XH�HH��t3�u/H�L$(� H���3>��H�H�ƒ�H��tH�L$(H%��H�H�D$(H�L$8H�H �D$P�D$H���D�L$TE���i���D�|$l�V����D$PL��L��H+\$0�D$HH�D$(H��� t,H����H��vH������E�H�D$(H�x�׳�|$hA���H�D$(H�L$0H�XH�HH��t �uH�L$(� H���[=����=��H�D$(H�L$8H�H �2����}��N���H��tJ����~�����
��HcL$������H�T$X1�H����e����H�D$01��D$PH�D$�E���H�|$(��t��H�T$X1�L���e��<���L�|$01����H�|$0���H�D$`H�571H�PH��vGH�81��m��H�|$(�t������ɡ�f������f���1���D��H��vGATI��UH��H��SH�8耂��L��H��H��H�����H��[]A\�f���H��vGATI��UH��H��SH�8�@���L��H��1�H��H����H��[]A\�D��AWAVAUATUSH��X�|$dH�%(H��$H1�H�D$(H�D$0���[H�L�l$8A��H��L��H�t$H�D$8蚏�H�t$8H���]��H��A���PL�l$8I�}� L�d$@H�L$(I��L��L�D$0�L����4��H�E ��L�}�M����H�m�H����L�E1��{uH���H���A��L9���H�D$$E1�H�D$�f.��|@I��I��I9�sTE��t	A���v�H�T$H��H��L���i�=��*H�L$0H�T$(L����~8����HcD$$I��I�I9�r�H��������?L��I9���?��H��$HdH3%(��H��X[]A\A]A^A_�fDL�\$H�D$(L�|$0I��L�d$@H�|$8H��M���L��L�\$H�D$�3���D$L�\$��M�sI�D�H�D$DI�L��I��H�D$8�č�H�t$8H��臫�H�L$M��1�H�|$8I��L��H���*3��L9t$u�H�E �E���L�}�N���@���|@��������fDK�D-���fD�x����H���~�������M�eI�E tM�eM�l$H��L��L��Sp��uL�l$8�������H��胭�=0t�L��H�T$$H��L���)h��H�E t_H�U�H���\���H�M�H���J���H�H9�v9��1�H��8B�uH��H9�u�H��������?H9�����H�D?����H�U�1������|$����~��ff.�AVAUATUH��SH��H�|$H�t$�"��H�|$訬�=0tiH�t$H���ԩ�I��H�D$H�XH��~KH�MH9�BL�eH�E tL�eH�pH� tH�pI�,H��I��I)�L��蒥��tfD1�H��H��[]A\A]A^�fDH��L��L��L���Ϥ�I9�u������ATUSH��H��H�����H�������I��H��~\H�kH��肻��H�H�{H��L)�H�S�� tH�{H��H�,��H��w7�EH�H��H����0H��t	H%���H�H��H��[]A\�fD��H�����/x�HcP�E��~�1�H���h_��fDH��t@��t
H����DH�ƒ�H��t\H�ƒ�H��t۩����u�H�������������H��H�t$��~�H�t$���fDH���m���]����H���t���?H�H��@uH��H�t$艴�H�H�t$�p���@H���u2H��H�t$���H�H�t$�I���H�.jGH�5�H�81��]��H�=��1����ff.�@AWAVAUATI��USH��H�t$�%��H�|$I���h��H�|$���H�\$=0uA�}��H��L�����H�\$I��H�kH��~{M�t$L9�qM�|$I�$ tM�|$H�sH� tH�sH��L���Ѣ��u=H���u��=0u0L���f��=0uI�/K�7L��L��H����H9�t@1�H��H��[]A\A]A^A_�@L���Њ���A���H���0��xuH��貊�H�\$���1�������H�\$����fDH��dH�%(H�D$1���w>u5H�H�$H��uH�T$dH3%(u$H���H�����H�$��f��K+�����+�����ff.�@AWAVAUA��ATUSH��hH�$�L$dH�%(H�D$X1���~H���t#H�FH�D$H��t��D��軃�H�D$HH�<$I��I����I�‹@�D$,���
A���{�D$8��L�5~MH�<$L��L�T$����M��� L9�L�T$�I)ċD$E1�<lt<r�M��I��?M�I�M��M)�H�D$ H�$H�D$H�H�D$%0H�D$0H���wH��������H�$H�xL��H�H��H�|$H��L��H�H��H�H��H�H��H9��H��H�T$H��HT$ H)�H9��H�H)�H9���H��lGL��HT$1�H�8�$6��H�H�D$H�L$8H�HH�D$8 ��H��%�f�H��H��L��I)�述�H��H�L9�~�M��~H�|$�KHL$H�$H�H�pH�$�� ��H�|$��L�|$I�H�� �	�L��H��L��I��O��I)�L9�~�M��~H�|$ ��L|$ �|$,A���H�|$H�H�G�� uqI)�H�D$L�xA�����D$0=0tH���H�H�L$H	�H�H�D$HH�D$PH�D$HH�L$XdH3%(H�D$��H��h[]A\A]A^A_�DH�G�f.�H�|$H�p����H�T$H���s��L�|$H��I�H������A�6L��L��M��<Y������H�HH���y���A�6H��L���Y�H��L��z����L��M�.D�D$8L��H�L��L��L�T$H��L�L$�gC��L�T$L�L$L��H�D$L��D�D$8H�L��L��H���=C��L�T$H�D$ �'���fDH�|$H�΃�H�<$H�t$H萡�H�|$HI��L�wH� ��L��H�oL�T$膠��H�|$HH���N�����D$8H��tH��L�T$�5���H�hiGH�5z}H�81�����H��L�T$賓�L�T$I������fDH�D$HH�%0H�|$0���H�|$0 tI1����f�H�QiGH�4$H�8�
u��H�D$���M��E1����DL�w� ����H=������ ���f.�H�T$ L��L���`���%���H�T$H��L���H��H�����HcT$,1�L���!W��
���H�UhGH�5�H�81�����_��ff.�@���c�B���f����r�2���f����l�"���f���AWAVAUATUSH��(dH�%(H�D$1������G�H��H�l$I��L�d�H�BH�D$��I��M9���I�H��H�D$蓁�H�t$H���V��H�T$L�zM��t]H�KI9��H�t$H� tH�sH�H��I��M)�L��虚�I9�u�H�D$H�pH� tH�pL��L�������k����H�T$dH3%(uH��([]A\A]A^A_��1���������UH��S��H��H���i_�H��H���H��[]���fD��AWAVAUATUSH��(dH�%(H�D$1�����G�H��H��L�l�H�D$H�D$�@H��L9���H�;H�|$H��t@��uH���H����H�|$�.��H�t$H�����H�T$L�bM��tcH�MI9��L�}H�E tL�}O�4'L�L��H��L���#z�I9��r���H�D$H�pH� tH�pL��L��虙���I�����H�T$dH3%(u0H��([]A\A]A^A_�@H���W����u�H��L9�����1��膐�fD��UH��S��H��H����]�H��H���H��[]���fD��AUATUSH��H�ZdH�%(H�D$1����H�H��H�$����H��H���XV��H�<$H����H����~�L�$$H��L��蔜�L��I���I��=0�H�EI�T$H9��H��H��H)�H)�H9�HO�H����H�}H�E tH�}H����I�t$I�$ �"�-����������4H�F���H�H����H9�HO�����@���#���H���H�������H��H��莆�H��xC��f�H�@(H�8H�@H���H�D?�"H�L��L��H���N��H��H��yv�H�L$dH3%(��H��[]A\A]�f�H��P���H�$H��tȨu�H���H��u���~��f�H��訍�����I�t$����fDH�@H�H�D�w���H���@���j������y�������ATUSH��dH�%(H�D$1����iH�H��H�$��tu���QH�^L�b���H�L9���H��y
L�H��H��?��tAH�$H��t���fD�H�L$dH3%(�H��[]A\�fD1�H��H���S��H�<$H��t@��uH���H��t@H���|�H�4$H��H���$���H��x�H�@H��|H�D�w���f�1�H��H���s��H���Z����d�H�@(H�8H�@H�xBH�D?�:���DH����H����H���H��������&|������H��蘑�������tw��_��ff.�@��AWAVAUA��ATI��UH��SH��hdH�%(H�D$X1�H�=�WHt;E��{��H�L$XdH3%(H���ZH��h[]A\A]A^A_�f.�����H��WHH�mWHH��u!H�7��H����x�H�LWHH��t�H�XWHE��~�A�]�Hc�I�<�H�<$臩�H�<$��u'I�4$H�t$8A����D��1����kv���[����H�D$8H���(���H��L�D$@�1�H�5�VHE1��P�H�|$@L�d$HH��H���H����L��H���H��ub����M������L��H���f�H�e�������I�4$H�t$8���E���H���l���H���Z�����A���I�M���IcE�D$H�D$I��?�?H�$LL�E1����:H���ԣ��H�D$H�MM�4�� ��H�EH��H�D$(��H�E�H�D$H��v��H���(�If�HcP�L��H�T$ �ӛ�H�T$ HT$L9�H��IG�H����H�e��H�MH�$�|$L�}H�<�������H��t"@��uH�EH�ƒ�H��t�� H�EDL�e �~���L��诈�I��������{��I���D����@H���C$��H����H��uZH�U �H��v��H���TH�T$�Re�H�T$Hc@H�H�ML9��/���H�ϺL���^�H��H�E����H�EH�D$(���H�\$8H�H�s�� tH�sH�<$uwH������H����H���h��H�H�U%0H���H	�H�E����H�D$�D$���H�t$8H���W��X���H�t$(H�����H���f���H�}H�$�ϡ�H�\$8H��o���H�|$8��v�H�D$8L�xM9�L�<$ML�1�H9������H�T$1��{K��6���H���~Z������H���oZ���(���H��H�T$�[Z�H�T$�����蚇�f.���H���cv�H��H��H� tH�BH���f.���ATA��U��SH�����Hc�Ic�H�H�sH��H)�H9�|CH��� tH��unH)�H�C D9�}H�{�
@D9�}H�{H��A��k[]A\�fDH��t��uH�H�ƒ�H��t�uKD��H��1�[]A\�.�����u�H�σ�H��t���@�u���D9�}���@[1�]A\�%J�H��UGH�5�uH�81���ff.�f���H��dH�%(H�D$1�H�t$��0��H�T$dH3%(uH����$��@��H��dH�%(H�D$1���t�H�t$H���0��H��tH�T$dH3%(u?H���@H��ZGH�8�D$��tH�5�n1��H���H�5�n1��2��蝅�ff.�f���ATUSH�� H�4$H�|$H��dH�%(H�D$1��Ct�H�|$�	��H�<$�	��H�|$�6k�I��H�$H�XH� tH�XH�x~f�;ta�{t[H�l$��H���d�H��L��ƀ�H��蕎�H��tLH����w�H��H���-��H��H�L$dH3%(u!H�� []A\�H��YGH�5�tH�81��9��褄��[�H�����H�5�m���K������H�wH� tH�wH�W�0.������H��n��V#��fDATA��USH��H��uA1��X�H��H��t~E��uH��[]A\�@H���x��=0u�H���W��H����i�@��t�uX�H��H��t9E��t���DH�����tE��t0H���HX�H��H��u�H���H��t��H����U�fDH��[H��]A\�DH��E���X����_���ff.�@H��H��tGH��u"H��H����W�H��HD�H���@�u�H���H��tH��u��f�������ATI��UH��S���H��t"H��H��t1�H�=l1��_Z�H�][]A\�L���[�H�5sH��H�=OGH�81��3��H��t@��tSH���W�H��t[�@H���H��u�H���H��NGH��H�5�rH�81����DSH��H��u1���V�H��H��tT[�U�@��t�V�H��H��t9[��T�fDH�����t5��t@H���V�H��H��u�H���H��t��H���T�fDH��[�T��H��[�ff.���AU�G�ATUS��H����wMH�>I��H���:���1�I�Ń�uH�U��tH�H��L��L��[]A\A]�]���H��蠀�H���׺��Ll�ff.�����w������AVAUATA��US����L�.H�H��H��LHH��u(L�5��D�L����m�H��H��LHH��t�L���t���H��H��D��H���3y�H��H��uH��[]A\A]A^�fD�3g��t�H��[]A\A]A^鏝���k���UH��S��H��H����M�H��H���H��[]�&���fD��SH��H���T�H��tH��H��[��J��fD�[Ð��H���T�@��H��H�T$H�T$��+��H���@��ATUH��SH�H��H������H������toA���t,��t(H�%0H=t��[�E1�xA���H�����H� H�{H�stH�{[E��H��H�]H��A\�~-��fDH��E1�譎�=A���f�H����Q���e������AWAVAUATI��UH��SH��H�H������H�������y���2���*I�$%0H=��[�x�H����M�4$I�\$A�� �UL��A��0L�$+���I�ŋ@A9E�BI�� �U����L���to����D��1��A1�A���EL9��~I���������M�t$�D�����L��I9��L��H��H#t��L��H#��H��I9�w�L��H)�H��H�
[qHc�H�>��A�|$���I)�L�H��H��[]A\A]A^A_�@1�L9�s�H��L��L��H���?�H�H�I9�w���f�L���،�=������L���P���W���f�I�\$���fDHc�H��1�H�H��H��@��H��f���@��K�I9��2A�E���f�I���������M�t$�L9��*���������L��L9���L��H��H#t�x�L��H#�dH��I9�w�L��H)�H��H������H�
!pHc�H�>���A�|$�xXA�|$�I�t$�xKA�|$�I�t$�x>A�|$�I�t$�x1A�|$�I�t$�x$A�|$�I�t$�xA�|$��W���I�t$�fDH���C���H��H)�H��H�H��L��L��H���	>�H�H�I9����������fDA�|$�xHA�|$�I�t$�x;A�|$�I�t$�x.A�|$�I�t$�x!A�|$�I�t$�xA�|$�I�t$������H�������H��H)�H��H�H��L��L��H���	n�H�H�I9��#������fD�H���Hc�H�4����@�H���Hc�H�4��I�t$��f�H���
����H���M����H��61�I9�������%�=���H����H�I9�u����H�KL��1�H��H��H9�s%fD�%�=���H����H�H9�u�H��H9�s�H��H�H��H��H��H��H��H	�H!�H��H��H�H��H��H�H��H�� H���H�H9�w��/������AVAUATI��UH��S��H��H��dH�%(H�D$1���L��H��I��肅�����H�MI��H�$����H���}��uxH���H��ulI�$H������H�������,I�$��������H��A���0H����vU�E1��xI�$A���f�H����g�H�4$L��L��艏��H��yT�H�T$dH3%(�XH��[]A\A]A^�fD���+H�E�t?H�H��xHI9�LO��
���H��L���m�H�@H���H�D�H���w�H�$H��y�L�y�H���e������\���H���H���L������g��=����L��蘇�E1�=I�$A��I�t$I�|$�� tI�|$H�L��L���&&��H�<$�L��H���ro�H������O�H�@(H�0�+����A���H����|����L���KJ���/��������b��~w�ff.���AUATI��UH��S��H��H��dH�%(H�D$1��r�������I��H�EH�$�������jH�]L��L���ނ��H����(H�H9���H��y
H�H��H��?H��H�$��tIH��t�uH���H��u
��`f�H�L$dH3%(�H��[]A\A]�@1�H��tq�umH���H��uaL���Y0��I�|$I�t$I�$ D��tI�|$H�L��H���~$��H�<$1�L��H����m�H���t����M�H�@(H�0�+fDH���d�H�4$1�H��L������H���>���H��L���sj�H�@H�x$H�D����H���"u�H������f.�H����z���������`��u�ff.�f���UH��SH���~h��H��H��H�����H��H��[]�fDAWAVI��AUI��ATI��UH��SL��H��M����H��tMD1�1��7P�L��I��H���y�L��H�����H��u�L��L��L��1��X:�H��H������@1�1���O�L��H��H���Qy�H���ّ�H��u�L��L��L��1��:�H��軑�H��H��[]A\A]A^A_�f�H��L��L����9�H��u���ff.���AWAVI��AUA��ATE1�UH��SH��dH�%(H�D$x1���Z��A��I��E����
�9H�D$�E1�H�|$�D$DH�D$ A��I��M��H������H�D$(H���1�H����H�D$0H�\$0H�H�D$�����0H�\$0H���6���H���F��H�}H�uH�t$H�|$HH�E t	H�uH�t$H�\$H\$HH�\$P���M����H��蹂�=��H�t$H9t$P��	L�t$H�D$lL�d$81�H�l$HA�H�l$PH�D$M��I���I@L��H+T$�� ����	����H�|$tHcD$DH;D$ � 	H�T$E1�I9�sKH�L$(L��L��H����<�HcT$lI�E��u�M��L+T$�� �B��	���6L�T$I9�r�@L�d$8H�l$HH�MH��~5�D$D��H�|$���uH9�}H)�M����H�����M��uI��H�t$xdH34%(L����H�Ĉ[]A\A]A^A_��I�A����I�FH�D$�A9���A�������H�|$@���qH�|$�Ad�D$D���UH�D$ I������������H�}��M���M���1���5�I���A���f�H������H�L$H)�M��x+H��u&I��H�|$tDH�D$ L��A��V���fDH�t$HH�|$8M��H��L�T$0���H�|$L�T$0I��u�L��A�����H�AGH�H��H�D$01�H������H���J�H�D$0H������H�%=GH�5.aH�81��z�@���uH���=�H�[�H���
���������H�\$0������������M���
HcD$DE1�1�M��H�D$�D$8H�D$Xf�H�|$01�L��H���~g�H�����G�H�D$M���JH�D$L�x I�GL�M9��YI�GL9(�LH�|$���|$8��L;l$H��D$8I��fDH�|$�l���L�|$L���,��L���^��R���f�M��H��H��L�����������5J����M���kH���2��H���w�Hc|$DH�D$(H�D$H�|$0I��H9D$P�KH��H�\$ L��L�l$PL�d$I���?Lc�H�|$I��L��L��M��_���H�|$H��tH��H9\$0��M9���H�T$(L��L���LZ�L��H+T$���L��H��I��L�d$H������f.�I)�M����M����I��I�GH�A�~cA�M���fDI��IcGI��L9�~>I�GJ��H���t�I�GJ��H)�M��xH��t�H��L��I�����I��IcGL9��M��H�|$tH�D$ H�D$ H9D$X~nI���D$8�4���@M��L��H��H��L���4���I���E���@H���a����H�D$H�T$(H�t$PJ�<(� `��D$8H�I�����M��H�|$���H�|$��*������H�D$0H�0H�XH�\$8H�t$�� t	H�@H�D$8H�D$0H�@H�D$(M���H����/��H�t$0H���y�L�d$0L�l$H�D$HcD$DH�l$HL�t$PH�D$Xf.�M9���L��L��L�D$H�t$(H��H�|$8H)���m�I��H��x%J�\%H�|$L��H��H���U�H9�t"H��I9�w�H��L�d$0H�l$HH+\$���L)�H��M��xMH��uHI��H�D$(M�,I�H�|$�d���H�D$ H�D$ H9D$X�N���L�d$0H�l$HL����H�t$HH�|$0M��L��H+T$�n���I���H�D$H�T$(L�L$8H�t$PH�<�l^�M��L�L$8Hc�xH��uI��L���N���M��H��H��L��L�L$8����L�L$8I��L���(���H�|$PH�D$H9����1�E1�M����L�d$H��I��H�l$M��H��L�d$ L�
bH���/���utH�|$tHcD$DL9���M��1�I9���I��A�M�M��A�	I)ޅ�u���t<L��H)�M��x9H��u4I��H�|$tII��L���f.�L���M���H�t$H�|$�!���H�|$L�
daI��u�L���i�����i�I������H��M��L�d$H�l$���H�D$ A��H�D$E��I��M���,����i�I��H�EH�D$H���L��L�d$I��L��H������Zi�I����M��M����M��1�1�H��L���d�I���q���H�|$H�".�I�����1��E���L�d$8H�l$HH�MH���P����g���H��>GH��H�8�uJ��M��u+H��I���u���H���H��M��L�d$H�l$�I�����H�t$p�H�D$p�l�I�������1�D���*T�H�D$��:����i�f���ATUSH��H��1�H�� L�cdH�%(H�D$1���H��H��t���L��H���8]�H��H��H���:��I��H����L��1�H����-�H�SH�l$H��H�$H�uL)�H)�L���-�H��H�D$�=k�H�L$dH3%(��H�� []A\�H���H���m����L��H��H���_�H��x0��?�H��H�P(H�� H�@L�"H�L��L)��S-�H���M���1�1���B�H��H��H���Ql�1�1�H�,$��B�H��H��H���6l�H��<GH��H�l$H�8�H��H��H�D$�mj��+����g���ATI��H��1�USH�� dH�%(H�D$1���H��H��t�t{1�1�H��L���Lz��H��H����H��1�L���,�I�T$H�\$L��H�$H�sH)�H)�H��`,�H��H�D$��i�H�L$dH3%(��H�� []A\ÐH���H���u���1�1�L��H���A^�H��x4�w>�L��H�P(H�� H�@H�*H�H��H)���+�H���O����H��;GL��H�8�fG��1�1�H�$�iA�L��H��H����j�1�1�H�\$�MA�L��H��H���j�H��H�\$�h��*����f�AWAVAUATUH��SH��8H�|$dH�%(H�D$(1�H�|$��U�H�D$L�hH� tL�hH��L�`�Nn�I��H�D$H�%0���1Щ��K�D%1�H�D$M��_@H�D$H�D$ H�D$H��HDl$H�L$(dH3%(H����H��8[]A\A]A^A_�f.�H��H���5��L�L9�}�H�t$I�|L���K'�H�|$H��Lc�L���h*�H��u�H�������f�M���_���K�D%1�H�D$� f�H��H�����L�L9��1���H�t$I�|L���gW�H�|$H��Lc�L����)�H��u�H��藁���d���SH���K��tH��1�[�T���@H��[�������SH����J�1���t
H��[�$���@H���L�H���(�H��[H������@AWAVAUI��ATUSH��8H�|$dH�%(H�D$(1�H�|$��H��H���E5���-M����H���L����D$I��H���#H�D$L�`L�pH� ��M�L��M9�w�^@H��L��H��r~�L9�sGE1�E1�H��L��H��L����Q�H��H��~(H��H�|$H��L)��(�M��u�H��H��;��L9�r��|$toH�D$H�D$ M��LDl$H�D$L�l$H�L$(dH3%(H�D$uzH��8[]A\A]A^A_�fDL�p�>����H�|$�R�H�D$��@L���d��fDH�|$L�����H�D$�@H��� ��D$I�������nb�ff.���SH����H��tH��1�[�4���@�_�H���p�H��L��s��[1�1�H���ln�ff.����SH���H�1���t
H��[���@H����I�H���P&�H��[H������@AWAVAUATU��SH��hH�T$8H�L$ dH�%(H�D$X1�H�T$(H�D$H����:H�D$@��H�D$@H�|$@H�|$8��H�u;H�D$ H��HDD$(H�D$(H�L$XdH3%(H�D$(��H��h[]A\A]A^A_��Q�H�D$8H� �eH�HH�L$H�@H�D$0H�|$@L�d$Ld$0��O�H�t$@H�|$8H�-64GH�^H;u���sm�I��H����H�D$I9��J���H��I��L�|$PfDH�D$H�D$fDL��L��L��H���'��
���D$PH��L��L���"�Hc|$PL��L��,H�A�U����Hc�H;\$�%H�M����H��H�\$H�l$L9�r�M�������H�D$1�H��H�|$8L��L)�H�|$HHEl$H+t$H��,%�H�|$ H���nH���z�E1�I9������F���H�\$ H����H��H���z�H�\$(�6����_�I��Hc�H�<�H�|$�k}�H�|$��u"I�$H�D$@�������1����RJ�f���/�H�Ņ���I�$H�D$@����H�������H�=�*Ht>1�L�D$H�H��H�5�*H�_$�H�T$H1�H��$t1�H�������H�D$H�U����H�=�J��K�H��*H��{��\���H�HH�L$H�@H�D$0����M��Hc�LD�H��r���fDHc|$PH�����L9��������f.�H���X{�H�D$8H�PH� tH�PH;T$uH�L$0H;H�f���H�e-GH�5�H�81��g�@M�������H��HED$H�D$���H�D$@L�pH� tL�pIcU�D$H;PuI�4L��L��A�U�������D$H�D$@H9E��L�|$f�M9�s>L��M��L��H��L)�L���^�H��x"I�,L��L��L��H���jF�H9�teI��I9�w�M9�����H�|$H�L��L)�H�|$8L��H��H+t$�m"�H�|$ H����H���w�H�D$8H�D$PH�D$8���H�|$HH�,tD�T$��u|L)�H�|$8L��H+t$H���"�H�|$ H��t"H���w�I������f.�H���H���y�H�D$8H�PH� tH�PH;T$uH�L$0H;Ht��C�L��H��L���R��q�����d�I���p���H���8y��,����D$����L��L)�H9����I)�H��L��L��M)��d��ID�����A�}tKH��L����6�L��H�D$@�*f�H�|$@�1�H���;�H�D$@L�pH� tL�pH�X�	���L���L��������L��L��L����L)�H���J����g[������H�D$@��H�D$@�*������ATI��UH��S����A��tL��H���1�[]A\�D���@��W�H����h�H���L��[E1�]H��A\�<g�ff.����ATI��UH��S���kA�1Ʌ�tL��H���[]A\���@1���H����@��AWAVAUATI��U��SH��H��HdH�%(H�D$81��A�1���@�ƃ�����9���A����6I�<$����H��I���s���1�H��L����o��I��H���/H�H�D$��1�H�D$(H�P M����H�JL�!H�JL�9���bI��� A�H�KH� tH�KL�CH�L$L�D$���cL���v�H���SY�L�D$H�L$H�D$ H�H�S�� tH�SH9���L;C��H���XH���V�A���V���I�M��H���E���M�}M���\���I���R����1�I�|$1�H�|$ �OM�I��H�������H�|$ ��G�����H�L$8dH3%(�H��H[]A\A]A^A_��M����H�|$ L��H���V�H��H��H�D$ �W[�I��H����H�l$H����;�L��H���@4��0�E�A��=��/H�D$ w/H�(��0H��0�A�� uH���HD�L�CL�pL��L)�H�O�, M)�M�L9���% I��L�SM��tL�SL9�t#L��J�4!K�<4L�T$L�L�L)���P�L�T$H�D$ H�pH� tH�pK�<"L����P�H�L�kH�{�� tH�{H��I���H����A�EH�H%���H	�H�D$(H�+H�D$0H�D$(H���h���L��L��H��L)���L��H���t'�H��H�D$ ��V�H�L$L�D$H�D$ ����H�ƒ�H�������H��H������H	������H����H�t$ H���Y�I��H���=���H��L�s����I��H� tL�sL��L��L��H�k�'��=��H��K�<>L��L)��
��=��H�|$ ���I������DH�¾H����H��v,��H���L�D$H�L$�h2�L�D$H�L$HcpH��� ��H��L�D$H�L$�t$��?�Hct$H�L$H��L�D$J�<.H9��L�A�� ����f���H������1�HcPA�E���$���1�L���#�����fDH��1��P�I�����fDH�{L�L�D$H�L$�%+�L�L�k L�D$H�L$H�CA�� �7���@1�����f����9���H���o8��,���f.�A���?���I�E��H���LD��&���DH���p'������f��L�D$H�L$�f�L�H�SH�sI��H�L$L�D$A�� tH�sH����L�SH��t��tL�A�� fDL�k �Z���� H��L�D$H�L$������L�H�L$L�D$A�� �H��L�D$H�L$�&�L�D$H�L$������DL��L�D$L�L$H�L$�m�L�D$L�L$H�L$I���L�������>����S�H�|$ ����H��袽�L��H��藽�H��H�5�H��H�%GH�81��\�f���H��(GATI��H��U��SH�8�A4��L���H��H�����H��[]A\�f���SH��賵��H��~H�SH��1�[H)��\�@H�)(GH��[H�8��3��D��SH���#���H��~H�SH��H��[H)���H��'GH��[H�8�3��D��USH��H�����H� H�sH�ktH�sH�.H��H�����H��~H��H��H��1�[H)�]���H�y'GH��H�8H��[]�03����ATUH�oSH��L�gH� tH�oH���8��J�T%H��t.H9�v)H��H��H������H��~L��H��H��[H)�]A\�1�H�'GH��[]A\H�8�2��f.���AWAVAUATUSH��H�kH������H� L�kI��tH�kH��N�|-A��I9���E1�A�u(L��H��L��H��L�D$�>��L�D$H�H��I��A��L��L��H��H���k��H��&E��t!H�R&GH��H�8H��[]A\A]A^A_�2���H��L�L��L��H��H)�[]A\A]A^A_�>�ff.���SH���S���H��tH��H������H��1�[H����@H��%GH��[H�8�1��ff.�f���SH���3��H��1�[H�����DAVI��AUI��ATA�UH��H��SH��H�� H�dH�%(H�D$1���e��H����H��H�E��H����L�e1�I�I9���M�&H���Hc}�����J�}I��~G�@H�UHcþH��H��xH�UH��L��H��H)���H��L����j�9]�H�D$H�D$H�D$H�|$dH3<%(L����H�� []A\A]A^���'�H�h H�D$H�EH�H�EL� I9��3���L���S��I�uI9�}RI�}I�E tI�}H�H��L��A�H�L�I����DL��H��L��H)��7�I���T����I�D$I������N�fD��AWAVAUI��H��ATUSH��8dH�%(H�D$(1�I�EH�D$ H�D$I�E t	I�EH�D$�M�}���L��I���:����4����H�D$ 1�I�����H�D$I�EH�D$�B�H��H�l$ �k�H�D$I�E tI�EH9D$��I��M;}��H��H�T$�L��L���h���H��u�M��y-H�L$(dH3%(L����H��8[]A\A]A^A_���L��L��L���-c�����L�1�I�����I��H�D$ H�D$�fDH�l$ H��L��I���Eh�H��H�T$1�L��L������H��u�M��xL��L��L����b��M���M����M���<��;���H�AGH�5��H�81��pV���L�ff.���AWAVAUATI��USH��8H�L�H�|$H�t$dH�%(H�D$(1�����L�t$I��I�I�n�� tI�nH����H��H9T$��M���HD�H������H���p������t*��t&I�%0H=t�i(�x���L�t$M9�>M����M)�I9�|I�H�D$I�$H�D$ H�D$�DL��M��y��E1�H�L$(dH3%(L����H��8[]A\A]A^A_��L���Z�=�u���H�D$N�L=H����M���II�H9�|�H�|$H����H�%0H= ��IcEA9E��H�T$H��L�tM9��R���H��I)�L��L9�HN�����@M�L�t$�*���M)�I9����	���f�H�|$H��H9�H�HO؁�0H�� uIcMI�WH��M��II�H��H9�|eL��L�L$�VV��HD$H�D$�����H��L�tL�L$�y���H�|$����f�L��L��H��L����J�I��H���s���H�D$H�P�H�T$H9�|�M���W���M���-f�L��L��H��L��L�L$H���J�L�L$H��I���%���H���L��L)����DL���x������L���U��L�t$I9���������DL��H�T$L��H��L�L$�h���L�L$I��I9�t#H��E1�L��L��H�����H���u����1�H�|$�`������DL�L$��L�L$I9���H�T$L��H�����H�|$I���I���L�L$H�T$ H��H�\$ L���o��L)�H�������H�ff.�@U��SH��H��H�T$H�T$�6+�H��tQH�T$H��u��tCH�KH� u&H)�H��H���;��H��H��H���
�H��H��[]�H�K��f.��H��H��[]Ð����r���f����1���2���ATA��UH��H����t"H�@��t4H�H��D��H��]A\�,���@H��H�t$�;G�H�t$H��@��u�H��H�T$� G�H�T$H���fD��UH��SH��(dH�%(H�D$1������G����^H���t6H�H��1ɺH�����H�L$dH3%(�<H��([]�fDH��������H���H����H���|1�1�H��H���%Z��H�¸H���t�H�8GH��H�8�'���H�H�VH��t$�u H���H��uH��H���)��S���@�H��H������:���1�H���nR��E1�H�T$H��H�t$H��H�D$�#�H��t<H������H�T$H�t$H���1�����H��H���������H���E�H��������11��F�ff.����UH��S��H��H���y�H��H���H��[]�&���fD��H��uH���@��u�H�H�ƒ�H��t�u
H
H�H���PH��GH�5`6H�81��O�ff.���ATI��UH��SH���jP�H��H�G[L��H��]A\�q���AVAUATUH��SH��H��dH�%(H�D$1�H�H��H����H��v?��H���s�V!�D�`H�H�Ʃ�t-H��t	���wH���/B��H��A���uӁ�0H��0�D��H���Z��H9��NJ�H������H�H��0�T$H��uSH%���H
H�H�kH�{�� tH�{H��A���CH�D$dH3%(��H��[]A\A]A^�f�H��t�H�{H9�~b���1с��H�s�� tH�sL�,>H��L�4.�L�H�L$L��L��H����b�H��T$H%���H	�H��T�����F���H���9���H%���H��+����H���@�����D�`H�H���~���f.�H�ƒ�H��t|H��H�ƃ�H���j���������S���H���h�������\���H���&�H�3�L���@Ic�1�������H��0�����A���fDH����u�����?H�H��@uH���2\�H��V���f.�H���uEH���4x�H��3���H��GH�5y3H�81��L��zB�H��GH�5�1H�81���K�H�=Ku1��/�@��AWAVAUATUSH��H���kH�H��H��A����@��I��L�kI��A��I��weA�L9�}
H���H��� u{L9�t2H��Mc���+�I�/H��H9���H�|+H�k�A����H��H��[]A\A]A^A_�f�D��I���S���H�D�pL9�|�A��t�L9��y���끐H��Mc��U+�I�/H��H9���E��t7H�C H9�vH)�H��HN�H9�^L9��q���H�C�(�L9��[���H��D��L��H��L)���H�CH�<(H�k�A���.���L��1��x�����H�{I�4/���H�k H�C�@L�CH��t'��u"H�H�ƒ�H��tH%���H�f.�L9�L��H�KHN�H��mH�<)�A��}H�kE�������L���;Q����fDH�����������Y��H��� �����@H��E1����H��A�����L��H��L�D$�Y�L�D$H���v���L��1�L�D$�t�L�D$�j���H��GH�5�]H�81��BI�f���SH��H��u�H�����fD@��u�H�H�ƒ�H��uة tH��[����uH��GH�
H9Kt[�� tEH��H��tȩ�@uH�sH���E�f�1�H��1����H��H������H���>�����@t
H��1�1�[�T���H�sH���E���fD��SH��H�uH��GH�WH9t
H���'<�H��tH��[���f�H����H��H��[����ff.��AWM��AVI��AUM��ATUH��SH��H��hH�L$ L�L$(dH�%(H�D$X1���L�I��H�*WHH�8�b�I�w��$�H�@H��$�I�}H�D$8��/�H�$H���.H�D$8H�$I��L�t$@L��H�P H�D$ L�H�D$H�D$HH�D$H�D$@H�D$�J�H��������1�H�|$ L��I��L)�H9�sH��1�I��I��H��H���H��HB�I�L���7D�L�uH�E tL�uK�.H�T$H�<$E1�H�L$HH�t$O�&H�L$���u8L�l$HL�|$@H��M)�I)�L���-6�M��t	M���O���L���u����H�T$8�D$H�B H�T$8H�T$PH�<$H�T$8��F�D$��t.�H�\$XdH3%(uMH��h[]A\A]A^A_�f.�H�t$HH�EH�E tH�EH)�H���5�H�t$(H���A�H����W<����AWAVAUATUH��SH��H����I��H��A��M��H���I9�tx�{tz�I�H9���L�mH�UH�E tH�UL��H�T$�1P�AWM�D$I��AVH�T$L��1�H���S���I��XZI��tH��L��[]A\A]A^A_�fDI����H���,���v���L���`�H��A���%�A9�tpH�uH�}H�E uVL����=�����4���H���n���H9�t�H���1	�H��H��I�����f���fD�C�I�����H�}�f�H���hJ�=���ff.���A�1���!�ff.�@��ATUH��SH��H����A�ă�t"D��H���78��B�H��H��[H��]A\��&�H����I�=t�H��1��8�H��[]A\�ff.�@��UH��SH��H���k���H��H��H��H��[]�&����SH����H��[H�������SH���%�H��[H�������H��uH���@��u�H�H�ƒ�H��t+H�H�ƒ�H��t��u�SH�wH���j@�H��[�q���tЀ�?H�����UHc�SH���H��(dH�%(H�D$1�H�4$H�DH��H�D$�%<�H��H�uAH����!��H��H�����H�@H���0�H�L$dH3%(uH��([]�H�����H�����8�fD��H��tx1��g��fDH���PH��
GH�5�VH�81��;B�ff.���ATUH��S�0�H��I����L�L��H��H��H���@�H��[]A\�ff.��AWAVAUE��ATI��U��SH��H��(H�H�4$H����A��H���tH�{A�t
D�;A��0D9���E��t	E���^M���-A����E�)D9�����A���bE��tA�� t1�M��DM����D��H�4$1�L��H���Sf��D��H���hT�H�H%���H	�H�H��(H��[]A\A]A^A_��D��L�L$���H�D$��H�L$H�D$�yuH���O(����M��t�H�{��H�4$L��H���>��H����S�H�E��H��H%���L	�H�H�D$�PH�D$�p�t����V����E�������IDL�L$�^	�L�L$A���u������L�L$���H�<$L��H���%�L�L$A��M������A����A��EE�DE����H�D$�x����H���Y'���
���E��L�L$��E��u;L�L$�T�H�L�L$H����9�t	A��t{H��L�L$�[E�L�L$A��A����M��������A�� �����D���D1�ED����DH�T$H�<$L��L�L$�*�L�L$A���Z���M������A����D�����H�D$��H�D$H�|$�U��H�|$H���H��H��H�5��H��H��GH�81��>�H��	GH�5�RH�81��>�f�AWAVAUI��ATU��SH��H��XH�t$�����I���-
���1����H�D$H����%�D$ ����H���w�H�L$H�yL�H�|$0H�yH�|$(A�� t	H�IH�L$(HckL�d$(Ld$0����H�D$8H�|$�	H�l$(L��H�����I��H����L9��j	H�D$A��D$I���������H��H�D$H�f��D$ H�I�M9��	H��L��L�����������LcCI����L9���L��L)�L9�IO�H���I�H�D$8H����H�T$H��L���:�T$ ��u�D$ L�M�t$�L9��gL��H��H#Et�@L��H#��H��I9�w�L��H�
�&H)�Hc�H�>��@���1��u:I����L��H���5v��H��H�D$����I����#�D$ ���&���DA�H��XL��[]A\A]A^A_��H�D$H�|$t/I���hI�EH�D$I�E t	I�EH�D$I�EH�D$L;d$(�fH�D-L�t$(A�H�D$ H�D$M��H��H�D$@�DH�I�M9�soH��L��L������������LcCI���]M9��|L��I��L)�L9�IO�H9D$ �H�t$H��twH�T$L���J9�M�M��M9�r�I����M9��l� H���o�L�����eN�I�H%���H	�I�����L��L��L��L�D$8L)���8�L�D$8�d���H��L��L����7�H���JN�H�L$H�T$@H�9H�|$8�� tH�QH9T$(�H�L$H�|$0H;y�H��H���Bt��H�PH�pH� tH�pL���e8�����H)�I��H9�|���I)�L9����K�4.H��L���e���}�����H�D$L�D$8H�x��D�L�D$8I������I����M9�w1M9������H�D$H����H�T$H��L��� ��7����L��L��L��L)��7�뼃������b����1�L�5�&��H��&��ID�H�LIH�L$H�D$�t���@A�|$���I����H�D$Lct$L��A�|$�xHA�|$�M�t$�x;A�|$�M�t$�x.A�|$�M�t$�x!A�|$�M�t$�xA�|$�M�t$�y��M���l���I��t�L9���Hcl$���I����I�EI�MH�L$8�� t	I�MH�L$8%0I�M=��H�L$���D$ ���L�t$(M��M9��^H�D$H�x� C�I��M9��c������L��H��L��L)��>5�H���K�H�L$H�9H�QH�|$�� �H9T$(��H�L$H�|$0H;y��H��H���q��H�PH�pH� tH�pL��� ��5�����1��H���Hc�L�4
����f.�L��H��L��L�D$@H)��5�L�D$@�H���H��H��L���r4�H����J�H�L$H�T$HH�9H�|$@�� tH�QH9T$(��H�L$H�|$0H;y��H��H����p��I��H�PH�pH� tH�pL��L�D$@�4�L�D$@I�%0H= ���������H��@I�4.H��L������������H��H��u����f�H�D$L�D$@H�x�MA�L�D$@I���?���M�t$����H�����I��uH�D$H�x�A�I��I9�wfM9��y���H�t$8H��tfH�T$L���24�D$ Hcl$��� HD���H�Q���H�L$H�H�D$H%���H
 H����M��L��H��L��H)���3��L��H��L��L)���2�H���@I�H�L$H�9H�QH�|$�� tH�QH9T$(�?H�L$H�|$0H;y�+H��H���9o��H��H�PH�pH� tH�pL���Y3�H�ELct$%0H��H= IE�����H�D$H�B"H�D$�/���A�I���H�D$A�M	�L�0���1Ƀ�H�"��H�"�L$ ��HD���H�L	H�D$8H�L$���H�D$H��!H�D$���H�D$H��!H�D$���H�D$�����?���H�;�FH�5��H�81��j4�M��I9�������m���贺��I��u�M9��������H�l$(�D$��H�z�FH�5�H�81��4�f���AWAVAUI��ATUH��SH��H��H�GH�T$PH��H��H9���H9���H�H��I��M��HH�M��tOH��H�T$E���
�H���2�H�T$L��H��M�D$H��I��RL��AW��H��([]A\A]A^A_��H�]H��L��H��[H��]A\A]A^A_�p�H���FH��H�58H�81��53�D��ATI��UH��H��SH��H�G�_�L��H��H���!�H��[]A\�f���AUATI��UH��SH��H��H���!�H��L��1�H���[�����ucJ�<#H�w�H9���H���������H��H��H#t�h�H��H#�TH��H9�w�H��H)�H��H��Hc�H�>���k
�I��H9��?H���6�}��L��1�1�� /�H��L��H��jE1�I��1�H��I����ZYH����H��L��[]A\A]����x<��H�w�x2��H�w�x(��H�w�x��H�w�x��H�w�x
��y"H�w�H��tH��L��H��[]A\A]��@��I��H��tsL9�tnL��L��H��H��[]A\A]�V.�fDH����������J�4#H���$���H��������f��H���Hc�H�4H���o����fDH���I�EH��L���5�L��H��L��������f�L���f������UH��SH��H�����H��H��H��H��[]��C����USH��H�����H��H����H��H��H��H��[]�C�ff.�@��UH��SH��H�����H��H��H��H��[]�WC����USH��H����H��H����H��H��H��H��[]�C�ff.�@��UH��SH��H���{�H��H��H��H��[]��B����USH��H���N�H��H����H��H��H��H��[]�B�ff.�@��AWAVAUATUH�oSH��XH�_H�|$(dH�%(H�D$H1�H� tH�o�/.�1�H��H��I���,�H�|$(I����H�|$(��4�=t!H���FH�5�H�81���.�f�H�|$(H�t$4����H����H�D$(H�x�
�}"�H�L�EI9����E<"��H�L$8�D$L�5�D$L�l$BH�L$f�I�h<\�4H9��A�P�B�<V���Ic�L�>��fD�|$��I�hH9��H�T$�H�����H�|$8�D$B���L��L����L�D$8�D$I�L9��'A�<"�[���I�@H9��UH��H)�H����H�g�FH�5�H�81��-�fD�|$�MI�@H�D$H9���H�-��GH���sL9�tH��L��L�D$ ��L�D$ A�x{�FM�xL9��iA�@<}������	��vH�T$H��L��L)����H�L$8H�Q�H���j=���w��(������5H��L���U0L��L��Hc����L|$8L9���A�<}���� �y���I������aH�
Z��Hc�H�>��H��L��L�D$ �{�L�D$ I���m���DL�ƺL��L�D$ �S�L�D$ I���E���DA�x.dupu
I�@H��H)�H���T���H�ncoding(H3HH�.force_eH3H	��0����x"�&����|$H�h��H�ھ"H��H)��B��H��H)�H�������H)�H������8"�����x)����H���ہ���k��L���y�H�D$(H�D$8H�D$(L��H�L$HdH3%(�kH��X[]A\A]A^A_�@L�ƺL���@�I���8����M�G�D$I�������H�T$H�|$����H�|$8�X��(������.H��L���I��U0L��L��Hc����L�D$�D$LD$8���fD�	�L��L��L�D$ �D$B��L�D$ I�������
��f��
�f���f���f���f���~���fD��n���fDL�D$ �&��L�D$ H��H��G�o����D$���H���FH�5]H�81��)�H�i�FH�5�	H�81��)�H�Q�FH�5�\H�81��)�H�9�FH�5�\H�81��h)�H�!�FH�5:BH�81��P)�H�	�FH�5P	H�81��8)�H���FH�5BH�81�� )�H���FH�5y\H�81��)�H���FH�5�H�81���(�H���FH�5�H�81���(��C�H���FH�5[H�81��(�ff.���USH��H��t"H��H��H����H��H��H��[H��]�&�H���FH�5�H�81��g(����ATI��UH��SH��H����L��H��H��E1�[E1�]��A\�=�ff.�f���UH��AWAVI��AUATSH��(H�}�H�dH�%(H�M�1�H�E�H�����E�H���D�}�D����xH��uH���M����HcCH��H��H��H%�H)�H���H��H9�tH��H��$�H9�u����A�>L�d$I���@��tM�D��H��I��D���-�H��L��D��A��S0H�}��M�Ic�E1�A� L���+�A�>@��u�H�E��'@L�����H�}�E1�D��A�H��L����H�M�dH3%(u4H�e�[A\A]A^A_]������E�����H)�H�L��1����
�ff.�f���SH��H��H��0H�t$dH�%(H�D$(1��G,�H�H�|$A���D$H��I��L���H��wu=��L��H������= uc9�u_H�WH�wA�� tH�w�H���1K��H�H��0H�� ��H�D$H�D$ H�D$�S�L��H������H����I�QI�qA�� uIL�L$H����H�T$�L$H�H%���H	�H�H��H�\$(dH3%(��H��0[��I�q�f.�H�WH�wA�� tH�w�H���^J��H�D$H�D$ H�D$�DD�D$�.��L�L$D�D$��M��@����L$H��t*H�� u�΁�HE�H%���H	�H�����1�������*�f.�AWI��AVAUATUSH��H��x�L$LdH�%(H�D$h1���������H�~H�|$P�(��D$HH�D$@H����H�;��t��������1�L��H��I���O0��H��H����D�L$LA�E��t+H�L$hdH3%(L���zH��x[]A\A]A^A_�DH���FL��H�8�F���I��뾐����D$HH�D$@���a������H����'�E1�H�ٺH��L���O&�I���t����I�GH�x�3.�I��I�GH�D$0I� t	I�GH�D$0I�GL��H�D$8���L��H��H��H�D$��{� �:I��D$����E1�H%���H	�I�H�D$0H�D$H�D$XH�D$ �Uf�I�GI� tI�GH�H�D$I;_���L$H��L��L����.��H��H�D$ H�D$`H�D$XH���`I������H�D$XH�p M��tA��uI�$��H����H�V�|$HH�*H�VH����T$H�����|$���Z1�M����H�|$PH��L����|$�I��u1�L9L$P���D$�H��L)�uxL��L���"�H9������I�wH9���I� �:I�H�H�T$H���
�I�wHc�I� tI�wH�L$H�H��L��H��������H�L$H�t$L��L�L$(�q��L�L$(�g����H��H)�H��L�����H�|$@H�����H���j�I��I�GI� tI�GH9D$0�rH�D$8I;G�cM9������H���FH�5H�81��� �L�L$P�D$����fDI�T$D�D$HH�\E��u\�D$��t�I�$���H��IE��d���I�H����@1�H���.�H���3�H����I���/���fD�|$H�����L����A��t�L������f�I�wH9�}H)�H�L$L��H��H�t$���L��L��L���,,���L$L�����L��L��M����0������DH���p��H�H���H�� ����H�|$P���D$H�X���H�b�FH�5�H�81���������ff.�f���ATI��U��H��SH���4��H��L��[��]A\���f���1����D��AVA��AUI��ATI��USH��@dH�%(H�D$81�H���FH9u��GuqH�D$L��L��D���)�H��H�L$8dH3%(H����H��@[]A\A]A^���_�Hc�H�<�H�|$�3�H�|$��uI�$H�D$A��t�D���^@�s��H�Ņ��8H�D$H���i����u�H�I�GH�2�GH��u&L�%�fD�L����H��GH��t�H��L�D$ �1�H�5�GH��G����L�d$ H�l$(���2H�D$I��$�_L���g�I��H��$��@����H�H�|$H��HH�H��t�"�H9�HL�L��L��H��1�躲��H��H�@H�xH� uRM��tVA�D$����
H�t$H���b���H���5��U���I�$H�D$��������1�����H�xM��u���f�H�t$H����L���Y�L��H��H���+��H�#������H����H�������H�|$��H��H�D$I��$����H��t���I��H��$�����E1����@E1�H��$������ �1�H�5UIL��H��花��H���g���Hc�1��H������ �1�H�5%IL��H���Z���H��M���3���L��H���S���#����i�f���SH��H��H�|$H�t$�%�H�t$H�����H��[�f���H���#H�H���&AUH���ATUH��SH�^H���f.�H�H��HxH9�u�I���(&�I�<$I��H�H����H����I�UH��H��?�H	�I�E�-DL���(�A��tI�EH����H��tAH��H9�tLH�uH�H����A��H��u�H��H�t$���H�t$A���f.�D��L��H���.�H9�u�H��L��[]A\A]�fD����L�����-���1��	��f�H�������S���������ƒ�u���w��v
��t[�@��[�@�����[�H���F��H�5_�H�81������UH��AWAVAUI��ATSH��H��(dH�%(H�E�1�聓��I��A��uxM��u3L��H�����H�M�dH3%(�yH�e�[A\A]A^A_]�fDA��u�I�E��H��
u�H�u�L�����tMH���FH�5آH�81��e�DH�u�L���T��t H���FL��H�5��H�H�81��2�f��u�L����������EĈE�H���@�9L�c�� ��L�sH��������I9����H�����L�+I�T$A��0H9��`�E�C�&H�SC�D&I���IM���@H�������}�L�+L��L�s�>�A��0��=p����3���K=o����@�@H��H�H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�D$�M�L��}�H���H��H�E�A�T$0Lc}�H�}�L��J�t?�
��M�9���H��K�47��H�{H� tH�{H�u�L�L����'�I����I��0�LD�H�H%���I	�L�+����L�cfDL�s�g����H�H%����}�xH
H����H
 H�H����H�������1�H���$��w�����}Ā� LC��m���H�9�FH�5uAH�81�����H����&��H��� �J����@H���/���L�cH�������H����H�ʹH��v��H��t=�@��H1�L��H��蠴��H��_����H�u�1ɺH���};�����H���`������I�L$H���FH�5E��U�H�81���H���F�U�H�5D�H�81���ff.����AUA��ATUH��SH��H��H�����A��teH��H��[]A\A]�D1��%�H��H��I����A�E�L�l�f�H�3L��H����L9�u�L��H���q�H��H��[]A\A]�H�3H��H��[]A\A]���H��t��tH����H�ƒ�H��t:H�ƒ�H��t�ug��u�H���=������4���H�������'���f�H���t���?H�EH��@uH���$�H�E�H���u&H���@�H�E�H�i�FH�5Z�H�81���H�=�=1��Z��f.���ATUSH�H��L�gH�� �tFH�oH��tH�oH�����H��v��H��t����HcPH�J�l%H��[]A\�fDH�H��tH�{L���3��H�{H��t�H�H����A��H��tFE��t�H����=t�H��D����[]H��A\�� �H��������r���f�H�����A�����H���t
H�G �D�s���AWAVAUATUH��SH��(H�H�t$���;H�I��I��I��A��0����H�����z�<L�sA�H��v��H��� ���LcH�}	tO�| L�L$L��蟒�L�L$����H�s�FH�SL�L$L�{L�0H�T$��H�T$L��H��L���ާ��H��I��H���
�L����L�L$LKI��I9��M���f.�H����L�=��FH��0H��0��I�?��u	I��H;{t}�H����I��I��H��e�H��������H�]H��(�[]A\A]A^A_����H����H�u�FH�SH�sH�8�m���I��I��L����I�H%���I	�H�D$I�� M�.L�}L�81�M�<$H��([]A\A]A^A_����uKH�ƒ�H��t?��u%L�=��FH�޺I�?��H��I��H����H��u��u�f.�L�=��F����@H�E$�H�#����H��([]A\A]A^A_�DfH�=��FffH����H�5y�FL���H�6H�8���H�sI��H��� tH�sI� �I�WH��M���H�{I�H��L�4:��H����A�H��L���R�H�����H�s L����������H��H�s���H��v��H����H�t$����H�t$�H1�H���2���H����f.�H�������
����H�������������H�������@A����B���Hc�1�L������0���DI�WH��M�������L����H�{I�WH�I� I�����I�W����H���S�H�����H��H�t$�^��H�t$������H���J����_�����H����H��xH��������?H��H!�H�D��H��H��H	�H�D�f���H�t}H�~tvAUATUH��SH��H��H�H����A��H����H�EH����A��H���E9�tbH���R�H����H��t =tyH��1�[]A\A]�@��f�=t!D������xu�H�����u���H��[]A\A]��H�����A���q������A���L���D�����x�u���H���V��������ff.����ATUH�oSH�_H� tH�oH�FL�fH� tL�fH9�t[�]A\���	��t�H��L��H����[]��A\�����@��H9���ATUH��SH��H��t@��uH���H��t2��H������u[1�]A\�f.�H��H��[]A\���L�eL;cu�H��H������t�H�}H�E tH�}H�sH� tH�sH9�tL������u�[�]A\�f���f.���H9���H��t@��uH���H��t1��f�ATUSL�gL;ft
1�[]A\�H��H���=��t�H�}H�E tH�}H�sH� tH�sH9�tL�����u���fD��f�ATUH��SH��H��dH�%(H�D$1�H�+�GH�$���H��tMI��H��L�����L��H��H�����H��H�����H�L$dH3%(uH��[]A\������@��@��t H��u	��@��u�H���H��u�USH��H��H�����H��H������H��H��[H��]����f���SH��H������H��tH��H��[���fD�[Ð��H9���AUH�GATUSH��L�gH� tH�GL�nH�NH� uCH��H��H9�tM9�L��H��H��IN��	��u/M9�tB}*H���[]A\A]��H�N�f.��H�������[]A\A]�fDH��H�����u1H�H����A��H��t6H�UH������H��t3D9��fDH��1�[]A\A]�1��DH������A���H�������fD��UH��H��SH��H���x��H��t"H��H����H��H�[]H�D�f�H��H��H��[]�C�ff.�@��@��t H��u	��@��u�H���H��u�USH��H��H������H��H������H��H��[H��]�I���f���AWAVM��AUI��ATA��UH��SH��hH��GH�t$(dH�%(H�D$X1�H��u-L�=��f.��L������H��H���GH��t�H�|$(���H�t$(H���m�H��I���"�H�t$(=��H���z��E��t1��u-DH�L$XdH3%(H���sH��h[]A\A]A^A_�f�H�|$(1�1�H�����H��H�D$H�x�FH�8�8��H��H�D$0H�D$0H�D$�@H�t$(�F��H����H�|$01�1�H���|��L��H�|$0H�D$A�Յ��\���H�T$H���M���H�|$H�T$0���H�|$0H�T$(H�GH9B�&���H������H�t$����H���
���H�|$0E���d���1�1�H����L��H�|$0I��A��I������������H�|$L�|$0�)��H�t$(H�|$0�j��H���k������@L��H�|$0A������H���x�=tH�t$(�U����H�EH�}H�t$(% H����H����H�E���0��	����H�NH� tH�N���0��	�����H��~#L�8�D���0��	����H��L9�u�H�VH��~H��f����0��	�����H��H9�u�Hclj|$H�D$ H9��:1Ҿ
H����H�|$(1Ҿ
I�����H�D$A��t��}A���H�=��M�赴��A��NH�D$H�D$ I��<H�DH�D$@H�D$8H�D$H�D$@H�D$ �?H�t$ H�T$�L�|$H����L��H��A�Յ������L��1�1�H�����I��H�D$H�L$L��L���H�D$8����H��u�����H�E�x���H�~�`���H�UH��tH�U�H�V�D$0H� tH�V�8��|���E��t8��o���H�D$0H�D$DH�|$L����f�L��H�H��H���H��H�A�Յ��)����D$0E��u8��������D$0�fD���D$08�u����H��I���H�H�D$L9�����E���D$�D$L9�u������L�%�H�|$�T$L��1�L������L��H��A�Յ������I��I9������uʀ|$t��v������.@�@��AVAUATUS����~H��I��L�&��t �����������fDA��E���t11�I�����[L��]L��A\��A]A�H�
����A^�5���D�;��H���3�H���L��[E1�]H��A\A]A^��L�n�f���AWAVAUI��ATI��UH��SH��XH��GdH�%(H�D$H1�H��u%L�5��f��L�����H��H���GH��t�L���L�=��I�EI�E tI�E���0��	��I�MH��~H��f����0��	��H��H9�u�H�=K���G���I�}H�D$Hc�A��H�D$H9��a1Ҿ
L���+�I�ƨ��H�D$L�|$0H�DH�D$0�f.�L��1�1�H�����I��H�T$L���L�t$8�G��L��H��Յ�t�H��FL��L�t$(H�8����H��H�D$(� �L��L�|$(���H�|$(H�t1�1�H�����L��H�|$(I��Յ�t�H�L$HdH3%(L��uyH��X[]A\A]A^A_���I�H�D$�f�H�@I�~L�x2I��H�|$1�L��D��H�5�����L��H��Յ�t�O�t6�����&��I��������3=�@��USH��H��H�t$H�$����H�|$H�����H�|$���H�<$H�D$H����6��H�$H���H���y���x��H�����H�t$����H���y���x��H���w�����H�<$�vy���x��H���T��H�t$����H�}H�E tH�}H�VH� tH�VH�$H�HH� tH�HH�}ueH�~u^H�@H��t@H��:��ǃ�wE��ƒ�w;�	�ȃ�w1@8�8�MH�����u
8�t@fD1�H��[]��H�t$1�H�����I��H����H�
�}���%���H�<$uƸ����AWAVAUL�oATUSH��H��H��� tL�oL�c����I9�H��IN�I��I)����H�+�L�x�H��H����H��v��H�����*��H�+HcHL�L9�;H��t	���
L�{K�t5L���0@L������� ��H�+�vf�H��%0H=0tYH���H�H��H��荚��H�H��H������H���tH���,�H�UH�H��H���%0H	�H�E���H�+LsL�sM��H��L�cM���H��w(A�$H�#���H��H��[]A\A]A^A_�f.���H�������HcPA�$��~�1�L���W���DH���H�����H��H%���H������H��t��tH������fDH�ƒ�H����H�ƒ�H��t֩����u�H������������H��H�t$���H�t$���f.�H�������"����H�����������L������L���H�������}����H����a�����?H�H��@u"H��H�t$��H�H�t$�8����H���u2H��H�t$�(�H�H�t$�
���H���FH�5��H�81����H�=>%1�����H��L	���AWAVI��AUM��ATUH��SH��H��8H�L$L�D$�;��I�I�NM�VH��H�L$�� tM�VH��M��H��I)�Ld$H�L$ I9���%0E1�H=�aI9��'L9�~#H��yH�|$H�T$ 1�L�T$L��-��L�T$M��~5H�D$H�H�pH�\$�� �QI�<*Ht$L��L�T$���L�T$I�M�fM�H����H����A�$I�H%���I	�M�>H��8[]A\A]A^A_�H��A���H��v��H�����<��I�D�x�� H����Ic�I�~�L����M�f I�FM�>M��A�� M�VM��tM�VA��0I���4E1�H�T$H�tI�|-L�T$(L�H)�L����L�T$(���DH���`���H������HcPA�$�������1�L����fDH�p����L������Ic�H��L�H9��3�������M�>I�VI�vI��M��A�� tI�vH����M�VM��tKM��A�� A��u;L����H��t
I�� M�>L��M����A�� H��tI���M�>DM�f ����H�|$L�T$(��L�T$(A�����@L���������f�L��L�D$(���L�D$(I���J���fDL����������AUATI��1�UH��H��SH��H��H�L$1��\��H�������L��H��H��� ��H�{ �W9��}��xmH�OHc�H��H�����H�GH�|$L�$��V��H�t$H��I)��X�H�L$L��H��I��H��E1�L�I�	���L��H�����H��[]A\A]�����9�~�뇉�H��FH�5��H�81���H���FH�5��H�81����H��FH�5��H�81��h�����AWAVAUATU��SH��8dH�%(H�D$(1��G�����I��H�Ӄ�~	����I�<$����H�������`H����H�H�<$I�|$@����H�I�D$H�|$H�|$ H�D$ ������I�|$@���eH�H�|$I�|$ @���jH�H�|$L�l$H��L�|$L�t$L��H��H������H�|$ L��L������H�����H�L$ H�H�H����H����9��}H�T$L�L$H��L�D$H�4$�J���H�D$ H�%0H��H�H����0H��tH�� ��H����H��0��H�t$(dH34%(H���WH��8[]A\A]A^A_��H�������H����@����H���H��
���/��H��H�<$I�|$@���x������H���n���@� H%���H	�H��d���f�1�H%���H	�H��O���DH�D$ L�l$H��L�|$H�D$L�t$H�@H�D$�n���f.�L�l$H��H�KA�L��H������H���BI�D$H�|$ L�|$L�t$H�D$ ����H�D$ L��L��I�|$A�H�H�}��H�������I�|$���H�5;H��H�Y�FH�81��O������H��H�|$I�|$ @�����������H������L�l$H��H�KA�L��H�����H��t~I�D$H�|$ L�|$L�t$H�D$ �(��H�D$ H�D$H�@H�D$�@���@H��H�����H��H������H�L$ �c���H��F��H�5 �H�81��~��fDI�<$��������������ff.���AUATA��USH��(dH�%(H�D$1��G�H�D$����I��H��H�����I�mH����A���u1�H��L�l$�&���H�t$E1�L��H��H������I��H���H���JH�t$L��H�����H����H�H�K�� tH�KH)�H�t$H�D$�t�@���&H���A����H����H��H�T$H��H�H�t$�-��H���|H�t$H���nH�H�K�� tH�KH)�H�D$H�{H��tH�{H��v��H��H��I�����H�t$H��~nH�|$H���L�kH� tL�kH�kH�H9���H��H)�L�L��>��H�H+l$H�kL�H����H���n�Ef.�H�L$dH3%(L���H��([]A\A]�fDH�E��H������1�1�H��H���(��H��xk�^��1�H�h A��t:9U~UH�EHc�H�MH��H�D$H�4�H�H)�H�t$�� �����I�uH�����…�y�U����A��=���DH���H��H�I�}H�t$@���H�H�|$L�l$���@@���q���H�E��H���`���1�1�H��H������H�D$H���t�H�EH��H�D$H�лFH�8���I���0������H�������HcP�E���~���1�H������o����H��1�H)�H�t$H�����H���8���C���H���h��L��H��H��H�D$���H���X��������H���8��H�������+��H�t$H������fDH���p����E�����������D��UH��SH��H�����H��H����J��H��~H��H��H��[]�z��f.�H���[]�@��AWAVAUI��ATI��USH��H��(H�L$H�H��dH�%(H�D$1�����H�������!A���t&��t"H�%0H=t�-��xA��DM���~H�|$���H�t$H���`��H��H��H���r�L9��0M����L)�H�H�{L9�LN�H�C�� �jL�l$L�4I�E����H�ʁ� M��t
M9�vM��M��uH�sH��tH�sL�,L�sH���I�L�d$K�T%E���N�� H��t
L9�vL��M��uH�CH�SH��tH�SH�H�CH����H�L$L��L)�E1�H)�H��L�I�x�H��H��荿�H�D$H�%0H��H�H����0H��t)H�� t1�H%���H	�H���H��t�H��0��H�D$dH3%(��H��([]A\A]A^A_��H�C�J����L�s����H�{����H��L���I���T���@H���H��=A�����f.�H�T$H��L��L��荎��H�H�����f�H��H�T$L���p���H�I��H�C�$����H���(����g���H�����H�Z�FL��H�5��H�81������I��H�:�FL��H�5��H�81����ff.���AUA��ATUH��SH��H��H�����A��tmH��H��[]A\A]�D1���H��H��I���K��A�E�L�l�f�H�3L��H���1��L9�u�L��H��1�1��m��H��H��[]A\A]��H�H��1�1��I��H��H��[]A\A]�H��t��tH�����H�ƒ�H��t:H�ƒ�H��t�ug��u�H���-������$���H���������f�H���t���?H�EH��@uH���]��H�E�H���u&H���k�H�E�H��FH�5
�H�81��H��H�=�1��
��f.���UH��SH��H��@��t*H�H���t2H��H��H��1�H��?H��:��H��H��[]�H�����H��H���u�H��H��H��[]龻�ff.���AUATUH��SH��H��8dH�%(H�D$(1�����G�����H�L�fH��t!����H��H���H��tH��$t��u71�H����H�T$ H�t$H��A�H���5��H���t����H��H�L��H���M��H�L$(dH3%(L���gH��8[]A\A]�H���������t����q���1�1�H��H���<�H���)H��H�����1�H��I�����L��L��H��H���ʜ��x���DH�6H�SL�cH��u`����H�@��tnH�L��H��萜�L�c�:����H�����H������L��H��H���������@��u�H���H��u�L��H���s�롐H��H�T$���H�T$H���{���fDH�����H�3H���Y���DH�T$ H�t$L��H����������������H��FH�5�H�81��r��f���UH��H����tH�@��t1H�H��H��]����H��H�t$����H�t$H��@��u�H��H�T$����H�T$H���ff.���ATI��USH�� dH�%(H�D$1�������~vd����vdH�\$
��H�]�1��
H���Ϡ�H��跾�H��L��H��H������H�L$dH3%(��H�� []A\���F�^vxH�\$
��H���1��
H���k���f�H�\$
��w!H�U�
H��1��;���g���fDH����
H��1�����F���DH�\$
��H�K1��
H����������9��f���AWAVAUATUSH��H��XH�dH�%(H�D$H1�H������H����@��1�I���6��H�$��L��H�D$�@��A�}�D$�AL��������D$�D$H�|$�D$�6H�D$�x�~H�������nL�<$H�t$L���M��1ɺL��H�5ƿ�
��H� ��H�kL�cI�H��I9���L�|$:fDL��L��H������Lc�E����L��L��H��I�A�U A���D$D$�A��"�3A��\�)A��#��M9���L��L��L��D�D$ �s��D�D$ ����L9l$�[A�����|$��A�@�^w}L��I9��I����H9�vH��H�<$1�H��H)��	��H�$1ɺH�5��H�����H��H�|$HdH3<%(�yH��X[]A\A]A^A_���K��H�D$����H9��'�T$H�<$D��L��L���q����I9�������b���f�A�@�������H�5��Hc�H�>��f�A�ef.�H9�w;H�<$1ɺL���D$:\L��L��D�D$;�8���fDA�rH9�v�DH��H�<$1�H��H)�D�D$ ���D�D$ ��A�f�A�v��A�n�u���DA�t�e���DA�b�U���DA�a�E���D1�L��L��L�����D�D$ ��$����@���u��{����f�H9���H�<$1ɺD�D$ H�5J��K��L9l$���|$D�D$ ��A�@����c���H�
t�Hc�H�>��f�H9��GIcUL��H)�H��H�I9�B��x�H�|$ H�|;���<���H�\$(L�4$H���H�rPL��1��
H��裛�L��苹�1�L��L��H�����H9�u�H�\$(H�D$ H�\H�������H��L������DH��H�<$1�H��H)�D�D$ �O��D�D$ ����DH�|$�D$�D$�����b��H�D$����H�kL�c����H�D$D��D�D$ �H��PXD�D$ �������A����s������f�H��H�<$1�H��H)��������H��舩�������H��H�<$1�H��H)�D�D$ �w��D�D$ �����������
��~9H����
��_H���������H��HE��H�~��tk~JH�s��t]��	�H�hHE��f.�H�C��t3���H�+HE�Å��H�4HE��DH� ���AWAVAUATUSH��H��HH�dH�%(H�D$81�H������H�������I��H� �`L�cL�k1�M�����L��I�����A�~�D$�D$uL���{����D$L��H�D$*M9���L�|$I���=f�I9��H��迶�H�|$1�H��H������L�d$L��L9���L��L��H����Hc����L��L��H��A�V A��H�+D��D�$H�D$����D�$H��H��u�A��w�|$�YI9��(�T$H�|$D������L�d$L��L9��z���L�|$L9��H�L���;��I�H%���H
I�L��H�L$8dH3%(�aH��H[]A\A]A^A_�H��H�|$1�L��L)���������fDI9���IcVL��H)�H��H�I9�B��p�H�4$H�L3������H�\$H�l$I���H�"LL��1��
H���S��L���;��1�L��H��H���K��L9�u�H�\$H�$H�\I���k���H��H�|$1�L��L)�D�$���D�$���fDA�A�^�����H�\$�,����L�cL�k���H��1�L��L��L)���������H��H�|$1�L��L)�������fDH��舥���,�������ff.����SH��H�� H�|$H�|$dH�%(H�D$1��u��H���m��H�T$H�t$�H�D$�^��H�L$dH3%(uH�� [��Y��f���ATUSH��L�g�l���H�ŸL9�}RH���W�H�H�kH�{�� tH�{H��H���H��w3�EH�H��H�с�0H��t
H���H�[]A\����H��t(���HcP�E��~�1�H���L���f.�H���H�����@��U��SH��H��H���u?H�{u��~#����7��H��tH��H��H��[]���DH���[]�@H��t��tH���v��fDH�ƒ�H��tLH�ƒ�H��tک����u�H���w������n���H��H�t$�H��H�t$�W���fDH���t���?H�H��@uH��H�t$���H�H�t$��H���u2H��H�t$��H�H�t$�Y���H���FH�5��H�81�����H�=>1�觽����H��tHH��u1H��H�����H�5[�H��H���FH�81����f.�@��u�H���H��u�H�:�f.���AVAUATUH��SH��L�s�U��L�kI��H� tL�sH���nIcD$H��L9�|H��[]A\A]A^�fDH��K�4.L��L���6��H��L)�L9�t�H��UA�|$uL���u�����H��H�=���~��L��H�����H�߹[1�]H��A\A]A^�	��f�A�H��H��L��L���9��H��tlL)�1�H��H���D��A�|$H��uaL������uU�H�5r�H���i������@H��H�=W�豩�L��H��H���s����fD�����fDL������H�=�H�����H��1�H���:��H��H��迩����H�+�FH��H�5��H�81����ff.�@��UH��SH��H���+Q��H�H��H��H��H��[]��0�ޘ��ff.���SH�Ӆ�t,��u.H�6H��蔫�H��tH��H�����H��[�fD����,`��ff.����SH�Ӆ�t��u=H�6H���D��H��t[�@�H���+��H��u�H�v�FH��[H�8�2�����_��ff.�f���ATI��UH��H��SH���7P��1�H9�tL��H��H��[]A\���fD���0��ff.���AVAUATUSH���l��H��H����H��L�c��O��I��H� uhL�sL9�tH�����=t1�[]A\A]A^�DL�����L9�u�L��L��L���5���t�K�44L��L���S����������L�c�f.����H���c�����ATUSH�� dH�%(H�D$1��o��H��H������H�߅�um訬�L�`H��H��H�kI�t$���H� u7H�}L��H�������E:H��H�L$dH3%(��H�� []A\�@H�k��f.��N��L�c1�H�\$H��I�t$����H��H�D$H�pH� tH�pH�kH� tH�kM��uH�D$H�D$H�D$�h���H�}L����������ff.�f���AVAUATUSH��H��u�H�����@��u�H���H��u��a��H��H��tiH��L�k��M��I��H� tL�kL�sL9�t$H������=tH��[]A\A]A^��DK�t5L��L���Q����t�H��[]A\A]A^��;��H���fD��S���H��H���K�����tH��[�f�H��[�'����H���s��H��H�!�FH�8葦��H��H���D����~H��A��H�J�V�H��H�8頺�PH���FH�5��H�81��'�����@��t0H��uH����F��H��H���<��@@��u�H���H��u��q����@��t0H��uH���F��H��H���,��@@��u�H���H��u�H���f����W������H��8dH�%(H�D$(1�� �H�$H��tR� ��H�t$1�H�$H���FH�|$H��H�H�t$ �H�D$����H�L$(dH3%(uH��8��H�=�H��t����r��f���SH�����H��[H���7�����SH��H��@dH�%(H�D$81�H��t�B��t8H��H�|$H��H��赗�1ҾH���v��H�L$8dH3%(u"H��@[�H��H�t$H�$�#�H�t$H�$�����ff.�@��SH��H��@dH�%(H�D$81�H��t�B��t@H��H�|$H��H���%���H����~��H�L$8dH3%(u'H��@[�DH��H�t$H�$�"�H�t$H�$��7�����UH��SH��H��軨�H��H��H��H��[]�G�����AVH�=F�AUATL�%8�FUSI�4$�=��H��FH��H��^H��H�5L��H���I��H�-��FH�;H�u�&��H�;H�5,K�����H�;�����H���H�5|o���H�;�H�]F��H�5a����H�;�����H�:��H�5�O�f��L�-�FH�;�H�57�L���H��H�;�H���H�5j��-��L�5~�FH�;�H�52]L�����H�;L��H�5]��H�;�H����H�5���ݟ�H�;1�H�!���H�5K�ş�H�;�H�VE��H�5�{誟�H�;�H�+��H�5�菟�H�;H�ݙF�H�5P?�t��H�;H���F�H�5ڸ�Y��H�;�H�ZT��H�5��>��H�;�����H�O}��H�5D��#��H�;�����H���H�5����H�;�H�9�H�5Q����L�5ƗFH�;1�H�5UlL���Ҟ�H�;1�L��H�5�U辞�H�;1�H��L��H�5.�覞�H�;1�H��E��H�5�莞�H�;�H�^��H�5�b�s��H�;�����H�$C��H�5�>�X��H�;�����H�yB��H�5�L�=��L�5�FH�;1�H�5�WL���"��H�;1�H�f��H�5d��
��H�;1�L��H�5[���H�;1�H�:��H�5>��ޝ�H�;�����H����H�5<W�Ý�H�;�����H�$L��H�5�訝�H�;�����H�y5��H�5�荝�H�;�����H�nI��H�5��r��H�;�����H��2��H�5ǭ�W��H�;L��H�5a��@��H�;1�H�D���H�5Q��(��H�;1�H��z��H�5�V���H�;�H�K��H�5���H�;�H���H�5U��ڜ�H�;�����H�����H�5B�远�H�;�����H����H�51�褜�H�;�����H���H�5!�艜�H�;�����H���H�5��n��H�;1�H�*�FH�5+��V��H�;1�H����H�5��>��H�;1�H�B���H�5�*�&��H�;1�H�z���H�5����H�;H�j*H�5����H�;�����H�]��H�5C*�ݛ�H�;1�H�aP��H�5�A�ś�H�;1�H�9���H�5��譛�H�;1�H�!���H�5>a蕛�H�;1�H��FH�5��}��H�;1�H�Y�FH�5o��e��H�;1�H�Y���H�5���M��H�=��,��H������H�=ޫH�)�G���H������
H�=ūH��G���H�����H�=��H�ٌG�̭�H�����H�;�����H�U���H�5��H���G貚�H�;�����H�c���H�5p�藚�H�;�����H�8���H�5^��|��H�;�����H�ͱ��H�5N��a��H�;�����H���H�5<��F��H�;�����H�7�H�5)��+��H�;�����H�<�H�5����H�;�����H�a�H�5	���H�;1�H��H��H�5���ݙ�H�;1�H�aH��H�5��ř�H�;�����H�&K��H�5]u誙�H�;�����H��d��H�5T�菙�H�;1�H�cK��H�5�{�w��H�;1�H��Z��H�5���_��H�;1�H����H�5s��G��H�;1�H�]��H�5f��/��H�;1�H�3���H�5�����H�;1�H�[�H�5����H�;�����H�p���H�5sT���H�;�����H����H�5��ɘ�H�;H���F�H�5��讘�H�;�����H�_��H�5��蓘�H�;�H��8��H�5���x��L�-��FH�;1�H�5��L���]��H�;1�L��H�5���I��H�;1�H��F��H�55+�1��H�;�H���H�5J����H�;�����H�,��H�5b���H�;�����H��*��H�5S����H�;�H�o��H�5B��ŗ�H�;�����H�f*��H�5,�誗�H�;�����H�;*��H�5�菗�H�;�����H�*��H�5��t��H�;�����H��i��H�5ns�Y��H�;�����H�z���H�5Rs�>��H�;1�H��l��H�55s�&��H�;�����H�'l��H�5Ũ���H�;1�H�/k��H�5�����H�;1�H��j��H�5p��ۖ�H�;1�H�j��H�5_��Ö�H�;�H��i��H�5K�訖�H�;�H�Yi��H�5>�荖�H�;�����H��a��H�52��r��H�;�����H�c���H�5��W��H�;1�H���H�5��?��H�;�����H���H�5��$��H�;1�H���H�5ߧ���H�;1�H���H�5Ƨ���H�;1�H�8�H�5���ܕ�H�;�H�
��H�5����H�;�H���H�5��覕�H�;�H���H�5��苕�H�;�H����H�5p��p��H�;�����H�!
��H�5I��U��H�;�����H�&��H�5?��:��H�;�����H����H�5�x���H�;�H�@��H�5'���H�;�H���H�5�����H�;�����H�:��H�5��Δ�H�;�����H�����H�5Φ賔�H�;�����H�D_��H�5l�蘔�H�;1�H��R��H�5J�耔�H�;1�H��U��H�5(��h��H�;1�H�����H�5��P��H�;1�H��W��H�5\��8��H�;�����H�y]��H�5�����H�;�����H�.r��H�5�K���H�;�����H���H�5(����H�;�H�8R��H�5��̓�H�;�H��P��H�5�豓�H�;1�H�M�FH�5�)虓�H�;�H���H�5å�~��H�;1�H��H�5��f��H�;1�H�Z��H�5���N��H�;1�H���H�5���6��H�=���*��	H�=��H��G���H�=��H��G���H�;�����H��P��H�5`�H���G�ؒ�H�;�����H�����H�5P�轒�H�;�����H��P��H�5H�袒�H�ÈF1�H�
r5��H�=��H��H����H�
U5��1�H��H�=����H�����I�4$H�=w�茓�H�e�FH�uH��H�薈�H�;�~�H�;H����H���FH�8H�5�`�l��H�;1�H�`D��H�5���t��H�-m�H�;�H�5�NH���֑�H�;H��H�5�N近�H�;1�H���H�5C�觑�H�;1�H�K���H�5bN菑�H�;1�H�����H�5�J�w��H�;1�H�{���H�5���_��H�;�H�����H�5���D��H�;�H�u���H�5Bm�)��H�;�H�J���H�5_����H�;�H�?Q��H�5wU���H�;�����H��p��H�5���ؐ�H�;�����H��p��H�5�H轐�H�;1�H�A��H�5%^襐�H�;1�H�)��H�5�G荐�H�;1�H��B��H�5���u��H�;�����H��5��H�5�0�Z��H�;�����H��4��H�5�>�?��H�;�����H�P���H�5���$��H�;�����H�e���H�5��	��H�;�����H�z���H�5Р���H�;�����H����H�5���ӏ�H�;�����H�$%��H�5�踏�H�;�����H��#��H�5�蝏�H�;1�[H��A��]H�5l%A\A]A^�}��D@��uH��Q���f�H��t:H��tD@��u@���,���H�M�FH�8����DH�сFH�8�	����H���FH�8����H�a�FH�8������H���tH��
��H�D�DH�GH�D�fD���'���UH��SH��H����m��H��H��H���Q��H���Y��f�SH��@��tGH���^��H�Hc���u(H�KH�=�FH�56�H�8H��xH�5W�1�踽�H��
����H��H��H�=C��m���ff.�f�AUATUSH��H�����H��H�@�B��ƒ�HS�L�"M��tIL���jH��H��I���}�H�����uT�L��H��菇���/v�H�SH�BH�CL�"M��u�H���G�H�@H��H�����H��H��[]A\A]�H�4�FL��H�5��H�81��м�UH��SH���2��H�uH��H���#��H��H�����H��H��[]�ff.�AWAVAUATI��USH��(H�.H�|$�� �;H����M��H��
��H�D�H��@�!�@H�H9�|�L�s�H�{L�t$��H�޻I��H�D-H��L��H�D$I�o�Br�f�I�D$I�$ uI�D$ L�l��L���o�I�?H��H#D$�� �H�D�L!�H��H��uI�w H�����u�H��L��L��H�$��q�H�$H��L��H��H�p�q�H9\$�v���L���^��H�\$H�5"~GL��H���ws�H�5~GL��H���es�H��(L��[]A\A]A^A_�H�n����A�>�A�@H�D$>����f�ATM��UH��SH��tqH��H��u9H��H��讌�L��H��H���@���H��H��t(H��萹�H��[]A\���;}���f�H��H�56�a��H��[]A\�f�H������fDATUSH���T|�H��H����g��t0H���]��H��H��I���������H��L��H��[]A\�%��H��H��H�=����ATI��USH��H���΄�L��H���}��H��A�[�]H��A\����AWAVAUATUH��SH���*���H�5SH��I���x��H���F�����H��H�5�XH��蚏�����H��H��H�5$�胏�1�H�z"H��H�5���k��1�H�"H��H�5o��S��1�H�j
H��H�5��;��I�$�� ��I��I��A��L�t$H�|$��1��I�D$L�4�L���w|�I��H�@H�xuL�|L��L��H��H�����L���Vn�H�����L��I���s��L��I���(|�D���H��A�H����H;\$t(I�$�� �s���I�D$ �n����H�����I���H��H��[]A\A]A^A_�fDI�L$H�L$����f�AWAVAUATI��USH���z���H�5�L��H���ȶ�L����H�5ȧH��H����������H��H��H�53W�S������H�wH��H�5Y��8��1�H�� H��H�5,�� ��1�H�WH��H�5�����H�E�� ��I��I��A��M��~kI�@1��2DH�EL�<�H��L�x2H�TL��L��H������L9�t/H�E�� u�H�E L�<�H��L�y�H��莲�H����f�H��L��[]A\A]A^A_�fDL�m�o���ff.�@��H���tH��
H�wH�ǃ�����H�wH��ۯ�ff.���S�H��H�=R�跀�H��H�=- [H�����@��S�	H��H�=*�臀�H��H�=�[H���ā�@��AWI��AVI��AULc�ATUSH���`��I��H�@M��~P1�fDI�<��o��H��H���_����H��L���!v�H�����uw�H��L��H�����L9�u�L���H@�H�@H��H���u��L�����H��H��H���O����z���uH��H��[]A\A]A^A_�@H��1�1��4����H��H�5J�H���FH�81��'��H��H�5���ff.���H�A��H��H�ש�tH��
L��D�ʃ�H���`��H�rL��D���M��ff.�f���AVAUATI��US����H���4��H���|��H��I�$����I��I��
A��M��~b1�M�t$�/�L��H�<����t7H�H��H��H����H��L9�t.I�$��u�I�D$H�<�轻�u�H��������H���@��H��x+H��������?[]H!�A\A]H�DA^�M�l$�g���fDH��[]H	�A\A]H�DA^�D��H9���H��t@��uH���H��	t1��f�ATUH��SH�����H��I�����I9�uIH�E��uVH�EH����tWH��
��H9��,��H��H��H��[H�=]A\�ޕ�fD[1�]A\Ð��f.�H��
����H�S�f.���H9���H��t@��uH���H��	t1��f�ATUH��SH������H��I������I9�uIH�E��uVH�EH����tWH��
��H9��j��H��H��H��[H�=]A\���fD[1�]A\��f.�H��
����H�S�f.�������AVAUATUSH����~L�oM����I��H��L�v1��!H�EH�<�k��tCH��L9�tVH�EL��I�$�uI�L$H��H�4٩�u�H�EH�<�j��u�[1�]A\A]A^ÐI��I��
A���v���[�]A\A]A^�f���f.�������AVAUATUSH����~L�oM����I��H��L�v1��"H�EH�<��~�H��tDH��L9�tUH�EL��I�$�uI�L$H��H�4٩�u�H�EH�<�~�H��u�[]A\A]A^ÐI��I��
A���v���[�]A\A]A^�f���f.���AVAUATUS����H���t������7��1�L�eI���M@H��
��H9�}\L��H�<�L�4����H�����tL��H�E�uH�EJ�40L���s��H��H�E��u�H;]}H�E��[L��]A\A]A^�@���H�����[H��L�x�]1�A\1�A]H��A^�e��1�1����ff.����ATUH��S萌��tL1�L�e� @H��
��H9�},L��H�<�H������H�E��u�H;]}H�E��DH��[]A\��k��H���c��[H��L���]1�1�H��A\�ɱ�f���AWI��AVAUATA��USH��(dH�%(H�D$1�H�D$���������H�@H���\9�H�@H��H��艤�f�L����H��H��H����H�T$H�5qGH���f��q����yH�L$dH3%(H���VH��([]A\A]A^A_��o�H��Hc�L�,�H�T$������L�3A���5D��A�M���BA���8I���H���(A�Hc�H��I��tIH�=fpG�"L�D$�1�L��H�5JpG�}i�H�D$H��$��H�����t	H�D$�ذ�I��H�@H��tSL�,�@H�;���H��H���}V���2H��L���m�H������6�H��L��H���zw�I9�u�L���7�H�@H��H�����I���`���L��L���u��X���H��1�1��Ĕ��v����*��Ic�A�I��H�@�I������H������H�D$����H�/oGH��u#L�%���L�����H�oGH��t�H�oG���L���Ss�I�Ņ�u1�A�H���t����t���DL�3H�T$A���#���A��D���H��H�5S�H�RwFH�81���H��H�5����W������1��Y��f���AVAUI��ATUH�-knGSH���}�I��H��uCL��L�5oF�'DH;YnGt)H�����t!H��H���\}�H��u&H���^y�H��I;u�[L��]A\A]A^�f.�[H��L��]H��A\A]A^�Zc�f.���AVAUATUH��S��j�L�%�mGH��I��L����|�H��uaH��L�5_nF�'DH;�mGt)H�����t!L��H���|�H��uH���x�H��I;u�[L��]A\A]A^�f�H��L��H����b�f�H�����t�L��H�5�褒�[L��]A\A]A^����AVAUATUH��SH9���I���З�H�E����I�$L�u�����H��H��
��L9���1�M�l$M��2�\@H�EH�4H��t@��uH���M��H��L9�t4I�$H�EL����uI�L$H��H�4٩�u�H�E�[H��]A\A]A^�@I��I�$I��
A������X���I�L$�X���H�tlFH�5�H�81��c����S���H��H���;��H��[�fDAUATI��USH��H�-�kGH���{�H��unL��L�-|lF�$f�H;�kGt/H�����t'H��H����z�H��u.H����v�H��I;Eu�DH��kFH�5Z�H�81���H��H��L����`�f�H��tӨu�H�H�у�H��u��� uH�@H��[]A\A]�@H��H��H��[]��A\A]�ff.���AUATUH��SH���
���H��H��~L�$�L����'��u^fH�=oFffH��� �	H��H�8�Ya�H�߾H���Y��H��H�EH����p�H�]H��H��[]A\A]��fH�=�nFffH谅�I��L��H��I��
I��	L��H�8��`�H��H�xH���p�H��H��[]A\A]����AWAVAUI��ATLc�H��USH��H��8dH�%(H�D$(1�荻�H��uH������u�I��H�H�ƒ�H��t�H�Ł�u�H���LL������H�D$E��uJH�{H��uH�{H�t$��o�H�L$(dH3%(��eH��8[]A\A]A^A_��H�aiGL��H��H�$�x�H����M���+L;=QiGt6I�����t-H�4$L���Rx�H����L���Pt�I��H��iFL;8u�A����L;d$��N�<�L�sM��~8I�t-L��H��uH�CH�4(H��t@��uH���\��H��I9�u�L;d$����H�t$L)�H���#H�[J�<�����fDH�4$H��L����]�H���`���H���L���A����I�EH�������H���H����H�{H��uH�{H�t$�Sn�I�}H�T$H�5�H�\$H�D$�`}�H�|$�=����H�=�/�co�H�|$H���f��H�PH� tH�PH�>pFH�5��H�81��ݤ�D1�1�D���L��@�������H���~����f�H�������I�EH���L�����D���H���H���4��������'�������Ԛ�H��oFH�5
�H�81��L��ff.����AWI��AVAUATI��US��H��dH�%(H�D$1�聸��tE��	I�$H��u1�1����t��@�u�H���H��u�L��L���賮��fDH�-�fGL��H���u�I��H���M���+@L;5afGt5I�����t,H��L���cu�H����L���aq�I��H��fFL;0u¸H�8�� ��H�xHclj�H9��=����7������t9��*���Lc�L���l��H��H�$��t01��	DH�,$H��L���ɛ�I��H��H��H���Fm�L9�u�H��L����\��H�L$dH3%(uJH��[]A\A]A^A_�DH��H��L���Z�I���L��H�8�� �0���H�����(����ݘ�ff.�f���AWAVAUATA��H��USH��H��8H�t$dH�%(H�D$(1��k��H��uH���ޕ�fD��u�H�I��H�Ѓ�H��t��u�H���H�-�dGL��H���s�I��H����M���)fDL;=�dGt1I�����t(H��L���s�H��ueL���o�I��H��dFL;8uƺH��� tdH����H��E��uaH���7H�L$(dH3%(��H��8[]A\A]A^A_ÐH��H��L���RY�I���L��H��� u�H�rH��E��t�A��"H�L$H�9H��t@��uH�H�у�H��t)1�1�D���]��D������H���z�����f��ƀt{H�W(H9���H�{H��uH�{�i�H�D$H�T$H�5�H�\$H�D$H�8�x�H���Y��H�t$H����H�=������H���|�fDH�����袖�L��H�=�����*�L��H���&��H����AWAVAUATI��USH��H�����H��uFH��H�t$衕�I�$H�t$���tDH��
��H��xBH9��H��[]A\A]A^A_�@��tC��t�I�$H��H����u�I�T$H��y�H���H��H��[]A\A]A^A_��H���H����L�5bGL��聳�H��L��I���q�I��H���1L��L�-�bF�0f.�H;�aGt7H�����t/L��H����p�H����H����l�H��I;Eu�f�H�5��H��aFH�81�踞��H������H���>Z�H��H���XL�5BaGL���²�H��L��I���Tp�I��H����L��L�-�aF�-H;aG�{���H������o���L��H���p�H��uNH���l�H��I;Eu��H����H��L��L���"V�I��H���%���M����H�5Ž����H��L��L����U�I��H�������M��t�A��u�I�]H�؃�H��u�H�ށ� �SH����I�$H��%�H��
��H���eI�L$H9���1�I�MH��~#@H��H��uI�U H;,������H��H9�u�H�������[]A\A]A^A_�DA���*���I�mH���H������H��� toH����I�$H��%�H��
^H����H��
��H9��21�I�MH��~�f.�H��H��uI�U H;�����H��H9�u��S���@I�m�f�H���?M�t$L�}�I�EH��uI�E J�<���m�H�L9��]H��H����_�I�uI�}H��H!�� �f.�H����������H�D�H!�H��H��uI�U H��H9�u�H�|��\m��,����H����M�t$L�{�I�EH��uI�E J�<��(m�H�L9���H��H���1_�I�uI�}H��H!؁� �f.�H������:���H�D�H!�H��H��uI�M H��H9�u�H�|��[���@I�]����H��
��I�����f�I�L$�H���fDH��
�����@H��
��I�������I�$��tsH��
��H��I�E tYI��K�|��3l�H��H�5����H��]FH�81�覚�fDH�DH��Z���H��H��]FH�5��H�81��x��M�m �I�\$�H����fD��SH��H��H�t$H�t$�5�����x1H��uH�[H�H��H��[��H��H�H��H��[�H�t$H�������H�@SH��H�xH��H�t6[��S�H���`��H��[H���S�@��UH��SH��H��H�|$H�:H�t$�����y"H�{H��tpH�t$��H��1�[]�DH�;H��u�+��@��u�H�H�у�H��t��u�H��tH���t0H�WH�H�,�H��t�@��u�H���|�뛐��H��H�C�f�H�W��f.���t��D$��r�H�;�D$H��fD��UH��SH��H��H�t$H�t$�������H��t��tH���g���H�H�у�H��t��u�H��tF���t.H�SH�H�,�H��t@��uH��H���{�H��H��[]�@H�S��f.���t�H�߉D$�r�H��D$�H�t$H�����f�SH��H��H�t$H�t$���Hcи��xH��uH�[H��H��[�fDH����f.���AUATI��USH��H�-hZGH���i�H��ufL��L�-�ZF�(fDH;IZGt*H�����t"H��H���Li�H��uH���Ne�H��I;Eu�H�5��C@H��H��L���ZO�H��t�H��t�uH���H��uH��[]A\A]�@H�5�H�ZFH�81������H�����H��H�������H�����H�����H��H���ό�ff.�@��SH���Ӫ�H��軪�H����t0H��
��H��� tH����H9�u[�H�P��f.�H�K��H�CYFH�5L�H�81��2��f���AWAVAUI��ATUH��S��H��(�Q��H����z�H�HH� tH�H�	�L$���y��#�pL����J�I��I�E����I�EH�$1�I�GH�<$H�D$���H�D$L�4�H��H�L$L���Y�H��I���Z��uL����j����L���d�H��H���@g�H�5�(H���\}�I�EI�E�uI�EH��H��H�<��H��H���f�H;$tlH��t?�H�5�H���}�I� �>���I�G �:���DH��
������@�|$#tκH�5A@�L�����@���H��H�5���|�H��(H��[]A\A]A^A_�f�H��H���Uf���}���H��(H��[H�57�]A\A]A^A_�[|�ff.���AUATUSH��H��(dH�%(H�D$1��q���H��1�L�k��H�I���a������I���D�H��
��H9���H��L��荌�H�SH��L��H�$H��H�T$�n�H���u�H;k}sH��L���P��H�S�f.�H��
��H9�}LH��L���)��L��H�4�H��H���V��H��辦�H���u�H;k}H��L�����H�S��DH��H�L$dH3%(u:H��([]A\A]�f.��+��H���#��L����1�1�H��H��荕���6��fD��AWAVAUATUH��SH��(H�?dH�%(H�D$1������H��
����y�H��1�I��I���`G�I���xo�A���LH��
��H9�}tH��L�����H�UH��E��tNL���H�$H�T$�l�L��H���˔�H��H�E��u�H;]}&H��L���ˊ�H�UH��E��u�H��L���C\��ƐH�L$dH3%(L��uH��([]A\A]A^A_�fDH�}�*������f.���AUATU��SH��H��dH�%(H�D$1���)u;H��H�L$dH3%(��H��[]A\A]�DD�g�Ic�L�,�谥��u1�1����r�L���(X�H��E��uFH��t�H���R���1�H��H��H�$��w�H���9��H���H���to��k����J��D���D��AVAUATUH��SH��dH�%(H�D$1�H���;H��H��t@��t%H���ͤ�H�5�H��H�|SFH�81��r��f�H�>H����H��u�H�E����H��
���� ��H����H9�{�~w�E1�I��I���RH����I9�}fH�CJ��L��H��H�$�����xKH�UH�E�uH�UH�H�4$L��I��H���1Z�H��� u�L;s}H�C �D1��w�I��H�L$dH3%(L��u:H��[]A\A]A^�fDH�{�G����H�E�$���������̅�ff.����AWAVAUI��ATUH��H��SH���p��H��QGH��I���^��H��H��I����`�H��ujM���,DL;=�QGt5I�����t,H��L����`�H����L���\�I��H�/RFL;8u�H�5�H��QFH�81�誎�f.�I��M��tA��tH�5h��f�I�H�؃�H��u�H�ځ� �RH����H�MH�΁��H��
hH���H��
��H9���1�I�H���?�H��H9��+H��H��uI�O L;$�u��H����H�m�DH���'H��
��H�L$L�s�I�GH��uI�G J�<��!_�H�H;D$�$L��H���(Q�I�7I�H��H!؁� �f�H��������H�D�H!�H��H��uI�W H��I9�u�H�|��^�ƒ��teH�u���H���D���H��Hc�H�D�H��[]A\A]A^A_��I�_����H��H��L���E�I��H���H�������L�����H��H�=�}H�����fDH�M�����H�EH�D$����f�H��OFH��H�5�{H�81�腌�DH�M���tDH��
��H��I� tAI��K�<���]�H��H�5�{��H�AOFH�81��7���H�]�f.�M� �f.��������AUI��ATI��UH��SH��H���L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$H���$ H�D$H�D$ �D$0H�D$����L��L��H��I��H���L��H�T$dH3%(uH���[]A\A]�虁�f���ATI��UH��SH��H���H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$����H��1�L��I��H���m��H�T$dH3%(uH���[]A\�輀�ff.����ATUSH��H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$���H��H��LFH��tMH��L� ��r�H��L�����H��H����H��H�����H�T$dH3%(uH���[]A\�DH�8�h��H������ff.���AUI��ATUH��SH���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$H���$H�D$H�D$ �D$0H�D$����L��H��H��KFL� �G��H��L��H����?�H��H���~��H�L$dH3%(uH���[]A\A]��~�ff.���SH��H�� H�>H�t$dH�%(H�D$1�H��� taH��H�v��Hc�H9�����H���R�H�5�JGH����z�H��u>H�D$H�D$H�D$�H�L$dH3%(u$H�� [�@H�v H�x�fDH���h}����}���H��H�H��H��� t*H��H�v��H��Hc�H9��K��H���=��H�v H�y��fD��AUATUSH��H���H��$�H��$�H��$�L��$�L��$�dH�%(H��$�1����I��A��H�I9�����A����H��$�D$H�t$ H�D$H��$�H�D$E��~VL�L$�|$1�1�L�D$�������L�H�	H��H��A9�~��/v�L��I��H�	H��H��A9��t�|$H��D���<�H��$�dH3%(ubH���[]A\A]�L����H�H��H��H�D$ �K�H�uH�E uH�u H��$�D$H�D$H��$�H�D$�*����|��������US��H����~7H��H�6H����������uH��[]�@H��H�u�H��[]�I+�����f�ff.����USH��H���H�t$(H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$���H��HD[GGH��H�����H��H���]��H��H���"�H��H�T$dH3%(u
H���[]��z���ATH�=UuUH�-�OFSH�u�V�H�ZHFH��GFH��H�2H��K�H�;�
A�H�;�����H����H�5b#�Z�H�;�����H�c��H�5��gT�H�;�H�X��H�58��LT�H�;�H����H�5Q�1T�H�;�H����H�5(��T�H�;1�H����H�5E��S�H�;1�H���H�5����S�H�;H�s�H�5̕�px�H�;1�H�t��H�5���S�H�;1�H�\�H�5���S�H�;1�H�D��H�5�^�S�L�%�JFH�;1�H�5
L���mS�H�;1�L��H�5� �YS�H�;1�H�-��H�5���AS�H�;1�H�u�H�5^�)S�H��EFH�;�H�5/��S�H�MFH�;�H�5
���R�H�;�����H����H�5z��R�H�;�����H����H�5��R�H�;�����H���H�5���R�H�;1�H�6�H�5�r�R�H�;�����H�K���H�5<��oR�H�;1�H���H�53��WR�H�;�H���H�5���<R�H�uH�=���lS�H�]DGH����H��MFH�8H�5� �f��H�=7DG�j>�H�=+DG�����H�7��H�5/q�[W�H�=DG�����H����H�5��Q�H�=�CG�H����H�5���Q�H�=�CG�H�
��H�5��~Q�H�=�CG�H���H�5q��_Q�H�=�CG1�H����H�5���CQ�H�=tCG1�H�#��H�5Ù�'Q�H�=XCGH���H�5	��u�H�=>CG1�H���H�5����P�H�="CG1�H���H�5�p��P�H�=CG1�H�u��H�5���P�H�=�BG�H�F�H�5���P�H�=�BG[�����]H�U�H�5��A\�wP���uH�x�Q���H��t*H��t4�u<t<H�UHF�+���H��BF����@H��HF����@H�qDF���@H�)GF���@��H��H�=zp�<��H�=zpH�BG�)��H�=xpH��AG���H��AGH������fD�L�WD�H�D��!�Hc�H��L�D�E��t2A�f�D��@A��D!�Hc�H��L�D�E��u݋H�G��u�G�0H�P��SH�� H�$�GdH�%(H�D$1�H�H��t<�
&LFH������q���t�5LF��H��H��t>H�|$dH3<%(uDH�� [�H�|$�W��KFH��p���u�H������@H�|$H�D$�)YH�D$��}t�ff.�f�UH��SH��8H�p�GdH�%(H�D$(1�H�;��H�=wKFH�T$ H����X�H�;����tTH�\$ H��H����t'H��tFH�ڃ�u>H���H��u2H�C H��HD�H�L$(dH3%(ukH��8[]�D1���@H���R�H��H��H�=�nH��1��	a�f�H�|$�D$�2X�D$�a���f�H�|$�fV�+����ls�ff.����H��鴑�@Hc�H��Hw�F��u�o�o��H�F�f�AWI��AVAUA��ATA��	I��UH��S��H��H��� txH����I9�sLL��L���Au�I��H��t8H�L��L����H���2�H��H�sH��[L��]A\A]A^A_�t2�@��?�L��L��H��I���U2��H�G�f.�AVAUI��ATI��UI��H��SH��H��dH�%(H�D$1�H���DF�H��H���q�L��H���q2��L�5�QFI��fA�>u`L�5�GI�>�H�=0IFH��L����U�H��L��D��H�=IF���I�>tbH�L$dH3%(H��u[H��[]A\A]A^�f�H�|$�(H�/�H��HD�I�UI�E tI�U��p���H�|$�fT�r����H�|$�V��_q�ff.�@AUA��ATUS��H��H�-J�GdH�%(H�D$1�L�eM����1�tg;=AHFw_H�=HHF���	H��� ukH�G1�H9�s.�Ks�H��t#��H��I�t]�2s�H��H���HD�M��u
H�|$�SUH�T$dH3%(H��u>H��[]A\A]�f�H������H�|$�fSL�e1��t�;�GFw��P����Zp�f.���SH��H��@��tJH��t@��tH� �����H���H��u�H�F �uH��H�t$�-X�H�t$��uH�����H��1�[�@H�FH���[�ff.�f�AUI��ATM��UH��SH��H��dH�%(H�D$1�fH�=@FffH�
W�(�H��H�8�U2�L��H���JN�H�߉��@��H����n�H�kH��t@��tiL�c H���́�H�=nFFH��H��H�H�C�S�H�=eFFH���C�H�-�NFf�}u2H�L$dH3%(H��uOH��[]A\A]�@H��H����[��H�|$��%H�O�H��HD�H�SH�JH� tH�J���n�ff.�ATA��UH��S�w�xuH���_�Å�t
1ۉ�[]A\�@H����}�=t9=0u�E��u9H����v�H��H�5kiH�PH��BFH�81��w�fD���[]A\�H���v�H�uH�}H�E tH�}H���vt�H��뜐ATUSH�� H�=	EFdH�%(H�D$1�H�T$�wR��t3H�\$H��u1H�L$dH3%(H����H�� []A\�f�1���@��u�H���H��u�H���U��t�H�kL�c 1�H�t$H�CH�=uDFA��H�l$�o0�����H���u�M��H��H�=BDFH��H�H>FH�0�@���H���O�����l�SH��H�� H��GdH�%(H�D$1�H�;t+H�=�CF����H�;t9H�T$dH3%(u?H�� [�H�|$H�|$�OH�t$�f.�H�|$H�D$�QH�D$��el�D��AUATUSH��dH�%(H�D$1�H�l$�(y�H��H��H�sCF�fsH�߻!�H��H�=�F�H[�1�H�7CF�j8�H��H�0CF�+s�&��I���S��؃�v6�S���v.��0��	v&��_t!�H��L��\$�=r�H��H���2���f�H��H��u�H��k���.L�k~���C�k����t1��{@��H��H��L��H����q���H������I9�u��u��H�=��H��H���q��
H�����H�ھH�=n��q��
H�����H�ھH�=C��lq��
H���_���H�ھH�=���Kq��
H���>���H�ھH�=D�*q��H������H�ھH�=5��	q��
H�����H�ھH�=�U��p�H������H�ھ	H�=M-��p�H�����H�ھH�=%-�p�!H�����H�ھH�=��p�1H���x���H�ھ
H�=�	�dp�AH���W���H�ھH�=���Cp�QH���6���H�ھH�=���"p�aH������H�ھH�=��p�qH����H�ھH�=���o��H������H�ھH�=��o��H�����H�ھH�=��o��H�����H�ھH�=i�}o��H���p���H�ھH�=l�\o��H���O���H�ھH�=��;o��H���.���H�ھH�=/��o��H���
���H�ھH�=��n��H�����H�ھH�=���n�H������H�ھH�=�)�n�H�����H�ھH�=I��n�!H�����H�ھH�=У�un�1H���h���H�ھH�=���Tn�AH���G���H�ھH�=Ud�3n�QH���&���H�ھ
H�=���n�aH������H�ھH�=m���m�qH�����H�ھH�=M��m��H�����H�ھH�=M�m��H����H�ھH�=V�m��H����H�ھH�=��mm��H���`�H�ھH�=��Lm��H���?�H�ھH�=R�+m��H����H�ھH�=6K�
m��H����H�ھH�=L���l��H�����H�ھH�=X��l�
H����H�ھH�=8��l�
H����H�ھH�=��l�!
H���y�H�ھH�=[��el�1
H���X�H�ھH�=���Dl�A
H���7�H�ھH�={��#l�Q
H����H�ھH�=6b�l�a
H����H�ھH�=b��k�q
H�����H�ھH�=	�k��
H����H�ھH�=o�k��
H����H�ھ	H�=�~k��
H���q�H�ھH�=��]k��
H���P�H�ھH�=f��<k��
H���/�H�ھH�=.��k��
H����H�ھH�=��j��
H�����H�ھH�=����j��
H�����H�ھH�=n��j�H����H�ھH�=���j�H����H�ھH�=h��vj�!H���i�H�ھH�=��Uj�1H���H�H�ھH�=���4j�AH���'�H�ھH�=���j�QH����H�ھH�={��i�aH�����H�ھH�=3P��i�qH�����H�ھH�=t��i��H����H�ھH�=�T�i��H����H�ھH�=�_�ni��H���a�H�ھH�=�_�Mi��H���@�H�ھH�=���,i��H����H�ھH�=U_�i��H����H�ھH�=7_��h��H�����H�ھH�=_��h��H����H�ھH�=�^�h��H����H�ھH�=���h�H���z�H�ھH�=�^�fh�H���Y�H��1�H�=M��Hh��H���;�H�ھH�=:~�'h��H����H�ھH�=�}�h��H����H�ھH�=����g�!H�����H�ھH�=^��g��H����H�ھH�=^�g��H����H�ھH�=�]�g��H���u�H�ھH�=�]�ag��H���T�H�ھH�=�]�@g��H���3�H�ھH�=�]�g��H����H�ھH�=�]�f��H�����H�ھH�=�]��f��H�����H�ھH�=�]�f��H����H�ھH�=�]�f��H����H�ھH�=�]�zf��H���m�H�ھH�=w]�Yf��H���L�H�ھ
H�=j]�8f��H���+�H�ھH�=T]�f��H���
�H�ھH�='Q�e�7H�����H�ھH�=4���e�GH�����H�ھH�=A
�e�WH����H�ھH�=���e�kH����H�D$dH3%(uH��[]A\A]���^�fD��AWAVAUATUSH��8dH�%(H�D$(1��zuI��H��H��A��H�4$�O�A�ą�t,A�����H�|$(dH3<%(D����H��8[]A\A]A^A_�M��t�L�$M��~�A�K���~��H�5*\��Hc�H�>��A�~@��f�M�~A�I9�t��A�~]�JI9�s/�$M��A���H���vm�H���ve��w`I���:����{�=�0���I�r�D��H��L������A�A�������	���DL��H��H����H�I�I9��^���A��H���vՍH���v̓�0��	vŀ�_t��ƒ�w�L9��)�����=tR��?t	��!����D�4$A��A�������A�������I�GI�WH9��=A�=A�I������E���R���I��A����A�~@�r�$M�~A�L9�����A���_������(���A�F��=���g����M�~�[���A�F<=��<~t�����A�F<<t�<=�0���A�~>M�~u��$���A�~*�����M�~L9��V���A�V�B߉փ�]���J��M�f�ɍAI������:����H�)�H�=(0F�����IL9��sA��$����A�F<=�4���<~�,���M�~A�A��@�����$�����҃���H��H��L��L�$�+G�L�$���D$��H��H��L���U H��
A�lj�UXL�$����H��D���UXL�$��uL����0�=i'GuH��ZH��H�r�UPL�$�L'GL�$H��5?'GD���UX��L�$u)M���$����I�����A�~=�e�����A��w�M��A�
�$
���@��-tQ��0��	�����L���@���0��	�����H��H9�u�I��A��<���M�~A��$���M�fL9��\���A�V�J��Ѓ�v �J���v��0��	v<_t�����-���L��H��H��L�$��L�$H�I�����L�|$L�$I��H��L�t$H�t$L����U8L�$�������t$9������Hc�L��L���Vb�����Y�ff.��AUA��ATUSH��(H�|$H�\$H��dH�%(H�D$1��>�H�|$H��L�g��a�D��H��H��L���u�H�\$H�T$H�L$dH3%(uH��([]A\A]��Y�DATA��UH��S�l���H��HcظH���HD�1��B���tE��t9�t�H��H���4���H���t;H	�H��H��[]H��A\�(��H���&�H���s�H��H���U4�뺾H���e�H�5�SH��H��'FH�81���a�ff.���H����t�����H�������UH��SH��H���9�H��H��H��H��[]��S����SH����e�H��[H���wA����SH��H���H��H��H��H���G��U�H9�[�����f.���SH��H��pGdH�%(H�D$1�H�;t*H�=�.F�"�H�;t(H�D$dH3%(u$H��[�f�H�|$�&:��@H�|$��;���W�ff.�@��ATUSH�� H�_dH�%(H�D$1�H��tOL�%�oGH��H�GI�<$tRH�=.F1�H�t$H�\$�������H�=�-FH���-�I�<$t,H�D$dH3%(u(H�� []A\�H�|$�f9�@H�|$�;���_V�ff.�@��AUATUH��SH��(H�HoGdH�%(H�D$1�H�;�H��H�=D-F�/�H��t*H�;��H�L$dH3%(��H��([]A\A]ÐH���h^�I���q�I��I9�t1�H���.���uzH���#�H��H���'U�H���������H��H�������L��H�=�,F��H�H��Lc�H��&FH�0��H�;�\���H�|$H�D$��9H�D$�C���H��M���5#�L��H��H���1�H���T��s���f.�H�|$�7����T�ff.����AUATUSH��H��(dH�%(H�D$1�@����H��u(H���3�H�59PH��H�7!FH�81��-^�D@��u�H���H��u�L�%�mGI�<$t`H���<��udH�k H�����I�<$�H�L$dH3%(H���H��([]A\A]�fDH��H�����H�|$�6�@H�kL�k 1�H�t$H�CH�="+FA��H�l$����ɚ�H���\\�M��H��H�=�*FH��H��$FH�0���H���9���D��*FL�k�p���tU��5�*FH��H	�H=�H�k F�H�=�*FH��L���@�H�=�*FL���)���@H�|$��7���H�����H�k ����%S�D��AUH��I��H��ATI��UH��SH��H��8dH�%(H�D$(1�H���"�H��H���]R�H�����H��u@L��H��L���RY�H�����H�L$(dH3%(uH��8[]A\A]�f.�H�������R���UH��SH��H���m�H��H��H��H��[]��Z����SH����3�H��[H���G?����SH���3�H��uH��1�[����H��[�'����H���v@��t
H��H��H��ÐH�����f���H��H��H���G�1��d�@��USH��H��H���w"H��o���H������H��[]�D�������H��ETuZ��uMH��1���H��tH����H�5!MH��1��7 ��H�ى�H�54M1���!��H���H��1����H��tlH�����H�5��H��H���B�H�����H��tH��H��[]���fDH��H�߾[]����)�H�5QLH��H��1���H��PHc�I��H��H��H�5�L1��e�D��H��t@��uH���H��uH�G�H���)����H����@��H����(�H��tH��H�@H� tH�BH���D1�H���f���H�����H��H���f.��������&FH)�H9�s	H��H���PH��FH��H�5LH�81��Y�@��USH��H�-hGdH�%(H�D$1�H�}tPH��&FH�x��H�=y&FH�5���H��H���2�H�}t0H�L$dH3%(H��u)H��[]�fDH�|$��1�@H�|$�3����N�����&F�D��H���v��1���
����1��ff.�f���H���v��1�������1��ff.�f���H���v��1�������1��ff.�f���H���v��1�������1��ff.�f����H���t H���v��1������f�1��ff.�f���H���v1������f.�1��ff.�f���H���v��1�������1��ff.�f���@��tH� ��1���
���fDH��H���w�1����@��tH� ��1������fDH��H���w�1����ATUSH�H��H����t`H��H��u1H���y!�I��H��t[H�EL��1��B��[L��]A\�V��fD��u�H���H��uH�C H��u
H�CH�E1�[]A\�@H��u�I���H�FH��H�5�<H�81��U�f.���@��t.H��u	1��fDH����u�H���H��tH��t&�DH��H���H�G �H��HD��@�����AVAUATUSH�� dH�%(H�D$1�H���tBI��H��u`H���X �H��H���I�$1�H�����H�����H��H���HD�H�L$dH3%(H����H�� []A\A]A^�f���u�H���H��tH��u�H���@H�C �u�H�-OdGH�}tH���`3��u%H�}tI�$�H�|$�.��H�|$�/��L�kL�s 1�H�t$H�CH�=!"FA��L�l$����ӑ�L���[S�M��L��H�=�!FH��H��FH�0����H���x����J�H�(FH��H�5;H�81��T�@��SH��H��0dH�%(H�L$(1�H��H��H��H�����H��H�����H������H�L$(dH3%(uH��0[�� J���SH��H��0dH�%(H�L$(1�H��H��H��H����H��H���S��H�������H��HD�H�L$(dH3%(uH��0[��I���H��8H��dH�%(H�L$(1�H��H��H��H���(�H���&�H�L$(dH3%(t�kI�H��8���UH��SH��P�d�YH��H��H��[]���H��1�H���H��H��H��H�v��������H�V6����fD��H��1��q���
��H�������H��1��Q�����H�������H��1��1�����H�������H��1�������H�����@��USH���H���;�f�H��H�@��~A������	É��	É��	É��	É��	Í<��}Hc���H�EH��H��[]����SH��H���X�H��[��X�fD��Hc7H�GH��H��H��H��<uH�1��V�P���+�ff.���HcG����HcH��H�����H��D�H��H���G�E��~UA��L�OD��!��H��L�;0t.�@��t3��
�@��t"���D!�Hc�H��L�90u�H�@H���1��ff.���AVAUATI��UI��H��SH��H�� �dH�%(H�D$1�H���DF���~�y�L�E��D!��H��L�D; t3D�PE��t[��
@D�HE��tG��!�Hc�H��L�D; u�H�XH�\$dH3%(��*H�� []A\A]A^���E����9����uf��D$D$��������	���	���	���	���	�<�9�~/�щ����	ȉ��	Љ��	Љ��	Љ��	Ѝ<��<$�Hc���H�}H�D$�E��~AE1�I���DA��D;u}*Ic�H��H��0��t�H�PL��A������H�}D;u|�H�D$fo$H�EM�-V�H��D��H���������%E�D��H��D�H��H���F�E��~SA��L�OD��!Ή�H��L�;t.�P��t2��
�@��t!փ�D!�Hc�H��L�9u��f��fD1��ff.�f��������AWAVI��AUD�h�ATUH��S1�H��H�$�f�H�CI9�t]H��H��A��H��HE�8��t�L�x�����v!�H�L$����H�L$H��H��H��uAH�$L��H��A�փ�t��u�H��[]A\A]A^A_�D��H������x����H����H����f������~lAVE1�AUI��ATI��U�h�SH���D��t@I�FL9�t7I��L��H��HC���t�H�xL��A�ԃ�u�D��H�����I�FL9�u�[]A\A]A^��f���AWAVAUATUSH��(dH�%(H�D$1����~~�h�H�D$I��I��H�D$H��I��I��H��1�DI�GH؋��t@H�xL��A�Ճ�u,I�G�L��H�|$H�DH�D$A��I�WH�L$H�L��t	H��H9�u�H�D$dH3%(uH��([]A\A]A^A_��B�fD��H�5�EH�=,g�IWf����ff.���� �fD��H������H�G H�WH�BH�������$�fD���@�fD��H��%HE��f.���H�G H�WH�BH�H�G(�h 1��f���H�G H�WH�BH�H�G(�h$1��f�����fD��H�w�����<t*H��xH��tH�H9�u�@H9�tH��H�H��u��H��xH�H������H��fH�=�FffH�(�H�H�@0H�@ ���H��H��>H��?���fD��SH��fH�=PFffH�H(�H�����H�H�@0H�H ��������	Ј��H��[�f���H��fH�=FffH�'�H�H�@0H�@ ���H��H��=H��?���fD��SH��fH�=�FffH�'�H�����H�H�@0H�H ���������	Ј��H��[�D��H��fH�=pFffH�h'�H�H�@0H�@ ���H��H��<H��?���fD��SH��fH�=0FffH�('�H�����H�H�@0H�H ���������	Ј��H��[�D��H��1�H�v H�xH���f.�H�G0H�� @��t#�H��HH��t#H��P��f.��H��HH��u��ff.�@AVI��AUI��ATI��USH�SZ��/�DH�� dH�%(H�D$1�H��fDI�L��L��H��H��	H��H��H��H�$Hi�ʚ;H)�H��H�L$�#��tƅ�t��nuH�\$dH3%(uH�� []A\A]A^É�H�=-?�Z
��U>�DATA�Ժ@U��H��SH��PdH�%(H�D$H1�H��H�����H��<v
��H����@H�<D��H)�H��1����אUSH��dH�%(H�D$1�H�$��x*��H��H�����T�H����0��t�uH�D$dH3%(uH��[]É�H�=�D�/����z=�f.�ATUSH��H�� H�-nVGdH�%(H�D$1��rH�}H�zH�B t@H�G H���H���H�rH�
H�QH���H�D$dH3%(uZH�� []A\�L�d$H�T$L����H�C H�T$H�uH���H���H�zH�
H�QH���H��u�L���L!��<�D��USH��H�oH��zM�H���H���[]�f���H��sA�����f.����WA��AUI��ATI��USH��XdH�%(H�D$H1�H�l$H�D$�(�H��H���R����t$H�L$HdH3%(��uTH��X[]A\A]��L��L��H���j'��u�I�EI$H�t$H������u�H�D$I)EH���h���;���H���EH��� �W(�H�P �@uH�P H�JH�JH�JH������H��~EH����(�H�P �@uH�P �H���ff.���H�EH�����'�H�P �@uH�P H�RH�H���ff.�f���H�5EH���@�'�H�P �@uH�P H�J(H�RH�H�J0H�J(H����H�UEH���$�W'�H�P �@uH�P H�RH�H���ff.�f���H��H�5qE�|���H�8�HE�H���D��ATH�5CEUSH���I��H��1�H�}t
[]A\��fH�=h
FffH�`!�H�5	EH��H�L�`0H�@(H�E���I��$`H��tH�PI��$`�[]A\�ff.�@��UH��SH��fH�=�	FffH�� �H��H�5�~EH�H�X(���H;�HE�H��[]�DH��H�5�}E�p��H�AGH�H���H;PtH�PH�P(H�@H�H�P0H�P(H�@ H���D��H������P$P H��Hc�H�D�H��H�5�}E���H��GH�H���H;PtH�PH�@H��@ H���f���H�����Hc@ H��H�D�D��H��H�5�E��H��H�����H��H�5�E�|���������t%H�@(H��tHcP���tH�DH���D�H���ff.���H��H�5��E���H���H�����SH��H�5q�E��H������‰���������	ʈ��H��[�fD��H��H�51�E�����H��H��:H��?���D��SH��H�5�E��H������‰���������	ʈ��H��[�fD��H��H�5��E�L�����H��H��;H��?���D��H��H�5��E����������<H�H�����f���H��H�5a�E���1��������tH��$�HD�H��H���f���H��H�5!�E��H���H��H�D�f.���H��H�5�yE�|�������HE�H���D��SH�5�yEH���L���H��[ÐH�GSH�5zEH�H����"��H9XtH�XH�@H�[�ff.�@��SH�����H�@H�H��[����PXH�5x6H��H�FH��H�81��?�ff.�H��t@��t%H��H��FH��H�5I6H�81���>�fDH���H��u�H���H��H�v���H��� tH��H��H�����@H�@H���ff.�@��SH�����H��H�����[H��H����ff.����SH�����H��H���x���[H��H����ff.����SH����H�޺[H���@�f���H���#���H�x8H�@H�xH�D?H���fDH���W9����SH�����H��H�����H�@H�x	H�D[�f�H��[�9����SH������H��H�����H�@H�x	H�D[�f�H��[��8���t
sH�G�1��DH�H�x ��ff.�@��H��H��H���mN�1�H���fDAT�UH��SH��@dH�%(H�D$81�H�GL��h%I��PwH���������L��H��H��L��H��H)�H�Ep�6��H��H�EX�*?��uqL��H���#����1�H����H��u�H���Q��u`H�}H��H�V�H����H�߉��t��u.H�L$8dH3%(��uH��@[]A\É�H�=�3�w���r2��H�=�3�d����H�=[:�V����H�=
:�H����H�=�9�:��f.���PXH����O�H�5OXH��H���EH�81��;�fD��SH���#���H��H�p�w���H���?2�H��[�f.�AUATI��UH��SH��H��XdH�%(H�D$H1�fH�=%FffH��H�H�Q0H9��2H�BH9���	�����<unH�C0H�xpH��t@��t2H����H�CH�t$HdH34%(��H��X[]A\A]�DH��t@��uH���H��������L�i(H��xH�T$L��H�$�D��H�t$ H�\$(H�S����H��L�d$0LE�H��H�=��H�l$8H��xL�l$H�D$ ���H���$�����<�����H�=9��1����H�,�EH�5�8H�81���9�H��EH�5�8H�81���9��>0��Dw�f���SH�5ԀE�_��1ҾH��H���=���H���[H��$HD������+���UH��SH���������������xH��[]�����H��0�\�ff.����SH���c=�H��H���J�1�[�@��H95m�FAVAUI��ATI��UH��StH95K�Ft
H95:�F��L�5u�EI�$M9.tTH�����t3��tf�<�H��I�$����H��L����[1�]A\A]A^�[1�]I�$A\A]A^�DH��H���H��u�[I�,$1�]A\A]A^�@H�H�߃�H��t��;�H��I�$��tH���H������I�6H���}�I�<$H��L���n��k���H�RFH�5�/H�81���7�AUATUH��SH��H��H��tcI�Ժ$���I��1�I��$t:M��tFA��u@I�E��H��u3L��L����I�E�Āt?I�E(H��t�H��[]A\A]�fDH��H���M�H���[]A\A]�DH�����ff.�@��USH��8H�t$H�5J~EdH�%(H�D$(1�����H��H�D$H��uw���H�����uH�L$(dH3%(��H��8[]����t�H�S(H�5�cH�zH��tH�PH�pH� tH�pH��o�z��H�D$�H�|$���H�|$�|5�xH��uH�����tH��FH�UH�5�H�81��K6�H�|$��H�D$�-���@H�H�D$�F�D$�Ff�D$�FH�t$�D$�D$�b����l,�ff.���������������USH��H��H���K�H�u1�H��[]�f���
H��H���05�H��H���#�H�¸H��u���D��USH��H�5|E�
��H�@0H�h8�-+�H��H��tH��H�5���H����H��H��[]�f���UH��SH��(H�t$H�|$dH�%(H�D$1��$�H�5
|EH��H�����H�@0H�x8H��tH��tH�T$H�����¸��u1�H�L$dH3%(uH��([]��
+�f.���ATUSH��dH�%(H�D$1�H�$���I�ԅ�t<H�1�H��t8��ttH��1�H�H��~�ʚ;H��H�����HA�H�$H���
�1�H�52{EL�����H��H��H�����H�L$dH3%(��H��[]A\��H���p��
�Zf/�sRf��f/�s8�Y8�f/�s�H,�H�$H���@�\��H,�H�$H�<$?��H�$H���W���H�$�����J����1������)�f���AUATI��UH��S��H��HdH�%(H�D$81�fH�=�EffH�
�L��L�(���~I��H�EH�$��t#H�UH�T$��t�����\�@H�D$I�](H�D$f�I�E0)D$ H�D$0H��H�D$�s��L�d$(H��I�T$���H�L$HE�H�AH�T$0H�=H�\$ H�H���I�D$����H�L$8dH3%(uH��H[]A\A]��(�ff.�f���AVAUI��ATI��US��H��H�� H�5.yEdH�%(H�D$1����I�ƍC�����I�$H�D$���Ņ�t	����H�|$���H=Qt[H��u.��ub��tI�D$H�L$dH3%(ueH�� []A\A]A^�I�V0H�z8H��t�H�T$H���^���t�H�D$�I�F0H�@@�fDH�|$��D�뜺������'�H�\$H�=	�1�H���h6�H��L��H���
�H���R
�H�=cF1���*��"���ff.�@��SfH�=�EffH��H�H�X0H���8��H������H��� tH����H��u�[��H�BH��t�H�C0�H �[�ff.�@��H�OH�5A�FH�?��4�@��AUI��ATI��US��H��H���������H��u-�����H�EH��urH�mL��H�mH��[]A\A]�@����I�}���I�����H�EH��t`�t6H�mH�mH�EL��H���E	�H��L��[]A\A]��A��u�H��L�����H�mH�m��t�H��L��[]A\A]�H�mH�m릺1�������UH��SH������H��H��H��H��EH�8����H��H��[]���ATUSfH�=�EffH���H�H�XH�{��H��t�t[]A\�f.�H�H�у�H��u�H�xuۀ� ��H��H�(H��t���.�D�`�H�GMc�H���u~H�E�� teH����I9�}�H�EJ��t�H�H�XH�@H9��l���H���#��H�TH��J��[]A\���fDH�@ �r����L;e�/���H�E �H�{H�3�H�GH+pH��H���y�[K�t$H��]A\�F?�fD��H��H�5�tE�l������ʃ���u+H�@0H�Pp1�H��t1�����H��H���f.�H�=D%��w H�=����u��H�=/%H�X�HD�H����ff.�AUATI��U��H�=O�FSH��dH�%(H�D$1��)��u]H�R�FH��t&I��f��ktI�$H�SL���H�$�H�[H��u�H�=��F�6��u.H�D$dH3%(uH��[]A\A]É�H�=�$����#��H�=�$���H�����=|�F1ɾ�x���tH���fD����8	t�H�=\$�r7����H�=�+�01��
�ff.�f�AVAUATUH��SH��H��0dH�%(H�D$(1��	�H�2�FH��tuH9��|H�E(�@h��)1�H�L$(dH3%(�nH��0[]A\A]A^�fDH�t$H�|$�����u�H�T$H�E0H���H)�H\$H����@L�%��FH���FH���FM��tH�U0H���L����n����L�t$H�|$L���n���uZH�D$H�T$H�i�FH9�H�W�F@��H��H)�H9�r@��uI���fDH�9�FH��H�#�F�x���fDH��EH�H��F�j�L���A���*-�H���uH�T$H��Ic�H�1�1�H��H��H��H��H)�H��H���F�a���@H���FL�%��F����� ���ATUH��H�5oqES��H������H��H����I��H��� ��H�BH��tt������tH�H�EH�]H�0H����H��t|1��$H����H9�}<H��H�<�H�����H��u?��I��$Hc�H��� u�H;H}H�@ ��D[1�]A\ÐH�����s���@[�]A\ú1����
�H�q�EH�5�(H�81��`)���UH��S��H��fH�=9�EffH�1�H���H�H�@0H�PH��[]����fD��AVI�փ�@AUI���wI�A�UATA��U�����Ѝz~SHc�H����?I�H��Hc�H��H���HB�H���HC�H9�rA9�|A��E�e[]A\A]A^��I�>H��H)��&�H��1�I�H�<(���A�U�ff.�S1�����8���t����߉�1��y8���t[���1��8���@��ATI��UH��S�M�H��@��tLH�H��~Q�����H�CH��t�uH��L���J�H�C(H�[H�C0H�C(L��H�H�k8[]A\�H����H���H��EH�5�H�81��'�H��u������AVAUI��ATUH�պ$SH������I��H��$tdH��uG�"�L��I��H�����L��L��H�����[H��L��]�A\A]A^���f��u�H�M���H��u���H��L��H��[]A\A]A^�R��f�SH��H���������������H�C0H�xH�@pLJ�H���%��D��USH��H��H�5�mE�7��H�߃�H��t4�����������Lº��Oˆ��H��H�H�D[]�D�S��ʐ��AUATI��USH�C�H���c:�H���
�H�54mEL��I��������H�ʼnЃ�<t'����H�<t<H��H�8NHE�L��L��1�H�=��+�H���I��H��tH��H�5�1�����t)H��L��H�5�1����H��L��[]A\A]��H����
��H��t�H� uEH�@ H�HH�H�5'pL��1�������H��H��HD��?���fDH���f���AUATI��USH�����I��H�`4GH�(H��tPH��H��H9�u
�(H�H9�tL9�u�H�sL���6�H�H9�u�H��L��[]A\A]�DfH�=p�EffH�h�H�H�@0H����a�H�h�f���AUI��ATA��H��UH��SH���H��H��3GH�H��t_H��������<���8�1�L��D��H�����l�H�5kEH����������t<H��H��[]A\A]�DfH�=��EffH��H�H�@0H���Ca�H�@�x���H���EH��H�5V#H�81��#�H���EH�5�H�81��t#�@��AVAUATUSH� �H��L�&L�vM����H��FH�����u^I�$M�l$�;H��H����H9�}QL��H�<�tL������L��H���o��I�$��Hc�� u�I;l$}I�T$ ��f�L�����M��tVI� trI��I�^1��-fDH����I9�}/H�߃��i��H��J�����H�Lc�� u�H�CI9�|�[1�]A\A]A^�f.�H�v ���M�v �f.���ATUSH��H��uH�5	"H��1��
��@��u�H�I��H�ƒ�H��t��u�H���u����
H��H������H���
H���X!�H��H���=
�L��H��[H��]A\���ff.���USH��H��H��H�5�hE�$��H��uH���EH�5y!H�81��W!����u�H��H�H�ƒ�H��t��u�H�5M[EH���������udH��H��uH�<�EH�5m!H�81�� �@��u�H�H�ƒ�H��t��u�H�5�ZE������u)H��H��H��[]�H���EH�5� H�81�� �H���EH�5%!H�81�� �ff.���UH��SH���N�H��H�EuH��H��[]��H�ᄆ
���H��H�5)�H���a����ff.�@��USH��H��H����H�uH���[]�fDH�߾�
H����H��H��[H��]���ff.�@ATUH��SH��H���F�_H��t5��H�{�F��Hc�H����H��H��H�4[H�D5]A\���H�t$�A��H�:�FH�t$��H�3�F��H��Hc�u�H���FH�L��h%D�`%H��������H�t$H��H���FA�<�������H�t$H��H���F��E�d�ul����H�t$H��H���F��D���H��Lc�uL����H�t$H���F���2�H��FH�L��`%D�h%A�<D�d�D���Lc�Hc�I��H�8�F��������ff.�@AWI��AVI��H��AUL��I��ATM��USH��H�T$�V���I��`%H�T$H��H�H���FH��t8I��h%H�H�H�L�L�1H�QI�mI�$H��H��[]A\A]A^A_�fD����H�T$H���F����ATUSfH�=��EffH�x��H�H�XH�{�H��H��t�t[]A\�f.�H�H�у�H��u�H�xuۀ� ��H��H�hH��t�H�CH�PH�H+BH���H��H��H� ��H�R H�<��l��H�E �~H��L�eI�T$I�$ uI�T$ Hc�H�@H��H�H��H9��B���L�����H�TL��H��[]A\���@H�@ �J����H���r����H�m �}������H���3&��uH��É�H�=����ff.����H���+��uH��É�H�=��|��ff.���ATUSH��t���[]A\�f�L���H��L�������L�烅�������[]A\�ff.��USH��H��FH�(H���H�����H�:�EH9S�FtH��H��[]������`t�=E�F����H��H��[]���ff.�U1�SH��H�=��FH���Y�������t=H���H���H���H�NH�1H���H����
u)ǃ��H�=��F�&��H����[]�D������ǃ���ff.��ATA��UH��SH�� H�����H��D�����H��[]A\���SH��`H�H��tH9�u�f�H9�tkH��H�BH��u�H�_H��H�H9�tJH�{�H�SH���H�PH�H�[H�t	H�C�H��u>�����<��W�<��W�1��E���1�[ÐH��H�GH�H�G�H���p��H�S�H�s�H���H�����1�[�H��`�ff.����USH��H��H�/H��t/H�����H�H��t3H�5DH9�u.H��H�����H��H��uH��H��[]� �fDH�5�H�=�B1������UH�5�TESH��H�����H��fH�=��EffH���H�UH�H�q0H��t$H��H9Q(uH���_���H��uH��H��[]�H�iH��H���EH�5MBH�81���ff.�H�H�H9���AUI��ATI��UH�h�SH�Z�H���<����H�SH�3H���H���u�I��tkH�EH�UH��H�h�L9�tWH�K H�SH�HH�H�S H�SH�S�����<t�H���t	H�{H��u�1�H���E���H�C����I��u�H��[]A\A]���ATUSH�u2H��H�vI��H�����L��H���(�H�����H��[]A\�H�=b�FH�51��\�ff.����UH��SH��H������H��H��H��H��[]�w������SH������H�����H��[Ð��SH���c��H��������H���a���H��[�ff.����UH��SH������H��H�pH�����H���w
�H�{(H������������H��H��[]�f.���USH��H��H�t
H��H��[]����H��H��t��uH�H�ƒ�H��t	H
H�H��������H�����H�}(H�����������H��H��[]����SH�����H���uH��uH��������H���Q���H��[�@��u�H�у�H��t�H��H���ff.���ATI��UH����StEH��H�L�����H��~?H�P8H��H�X8H�x(H)�H9ںHM�����H��[]A\��H����H���H���EH�5<
H�81��#������<��USH����H����toH���G��H�������<t@fH�=��EffH�����$H��H�8�Vg�H��H���'&����1�H������H���[]�f.�H�I�E1�1�H�8���H������f.�AWAVAUI��ATUSH��8dH�%(H�D$(1�fH�='�EffH���H�H�@0H�@ ���uA��h��~(H�D$(dH3%(��H��8[]A\A]A^A_�DA��L������9����Q�I��M��L9��������<u�H�S0�B$��#B �
u�H�-3OE�/�H�L9�th�����<�f���H�S0�B$��#B �
�R���H��XH��t�H�����H�K0H�H;Q(�-���H��u�H�PH9Pt�����f�H�i�E�H�=�H�H�D$�P���H�=�H��H�D$�7��M���I��L�L$fH�=��EffH���A��L��H�L�p0���L�L$��H��M���1�H�5�L�53���I��L9���L�l$f�H�C0L�.D�H H�C(H��tL�@H�SH��H��1�H�5���H��XH����L��xM��tI�UL��H��1��o�M�mM��u�H�5�
H��1��U�H�{01�1��L��H���=�H��H���b�H�5�]H��1��!�H�L9��E���L�l$H�)!GH�H��t{��H�T$�I����d����o����H�5ME���1�H�PH�xH�r�H9�tf�H�VH��H�r�H9�u�H�H�5
H��1������fH�=�EffH���H�H�@0H����N�H�@�\����h����UH��SH��H�5�WE���H������uQ��<tJH�C H9X(tJfH�=��EffH���H�H;X0tPH��H��t,��!����1�H�����H��H��[]�1��g��H���EH�5>	H�81��O�H���W����H��fH�= �EffH���H�H�@0H�xH����@��H����@ATUH�� SH�G0H�����H��L��hHǀ�Hǀ����H��hI9�t%fDH�H�GH�BH���H��hL9�u�H������H��[]A\�-��ff.�f���H9�t�b���f��ff.�@��H9���SH��`H��t-fDH�HH�PH�H�@H�PH�PH��H��u�HLJ`H��H��XH��uHǃXH������H�C([�f�H�5iJE�t��H�PH�PH�P��fD�ff.�@��U�SH��H�k8H��H�G(H�x�
�H�=v�F���H;k8tH�=d�F���H��[]��@H��EH��EH�-�EH�S@H�C8H�h��ff.�f���H�������t��uH��É�H�=��g�����H��1������uH��É�H�=��:��f.���H������uH��É�H�=����ff.����H��H�5a�E�����uH��É�H�=�����DS�x����H�x(H�������:��H�C`H��[ÐUH���SH��H��H���X��H�S ����R�ƒ���x
9Sv99�v1��H��@���{���H�XH��H��[]����f�H�����H��1�[]�ff.�@��H���c����uH��É�H�=�����ff.����SH���H�������t�u[É�H�=����ff.�@��H�(H��(���ff.�@H��t H�G(H��t�Ph��~H�x(���f�@��t�f.�ATUSH�_ H�oL���L�����H��H��pH��pH�� H���H��xH�� H���(H�� �N�[L��]A\����f���SH���H���(��t�u[É�H�=����ff.�@��H�����uH��É�H�=��|��ff.��SH��H�H��0���H�|$ H�t$�T$H�D$(f�H�D$H�H���H�L$�'����H�D$H�H��H���H�\$ H�t$(H�������D$;��t�H��0[�f�AWL���AVI��AUI��ATUH��SH��H��8dH�%(H�D$(1�H����E1�1�1L��L�D$�\��H�}hH�upH�EhL�D$H�wH�>H�EpH�Eh�����������A�E0M��t>����iH��0I�FhH��0I�~pI�vhH�FH��0��A�E0M��t/H��@I�xXH��@I�p`I�@XH�xH��@A�E1H9�t|M��t I�|$XI�t$`I�D$XH�wH�>I�D$`I�D$XL�����M��tH��uH�{X��H�D$(dH3%(�gH��8[]A\A]A^A_���G1I������@H���EH9��F�p�����`�c����=��F�<����S����L��L�D$E1�����L�D$���fDL������H�GH�;��L������H���f.�I�F0H�D$H��hH�D$��+����tzH�t$H��L�D$�(������L�D$�M�����@+�����!���H��hL�D$��L�D$����H�l$$H���9�H�;�X���H������K���f�H�|$L�D$��L�D$�m������f�ATH�O8I��USH�G8H��H9�tYH�0H�HH�h�H�NH�1�oHH�@H�H�k(��H���M���I9�t I�t$ L��H��E1�[1�]A\�����[]A\�1��ff.��UH��SH��H��H�=T�FuBH�s(��t"�Fh1҅���H��H��H��[]�G����H�{ H��h���1����H�v��T$�v���T$�UH��SH��H������H��H��1��r���H��H��[]����@UH��SH��H������H��H���?���H�=��FuH��H��[]����H�u�������ATUH��SH��H��H�=b�FuxL�C(M��tO�{0L�c8u-H�S@H�EHL�eHH�UPH�S@H��CHH�C@H��[]A\�DL;c8u�H�u 1�1�H���R����H�k(��t�H��H����[]A\���DH�v��L$�T$�J���L$�T$�e���ff.�f���AUATUSH��L�g���HLJHHLJPI��$ ��uH���n��H��H��[]A\A]�|��@H�����H��A���E��I9�$Ht�E��t�1ɺH��H������f���ATUSL�gH��HLJHHLJPI��$ H������I9�$Ht1ɺH��H���_���[H��]A\����ATUH��SL�gI��$ H�����I9�$Ht1ɺH��H������H��[]A\���ff.�f�AWAVAUI��ATI��USH��8dH�%(H�D$(1�fH�=��EffH����H�5KEL��L�0蚼��8�FH��I�n0���
H��H��uH���EH�5�H�81����u�H�H�ƒ�H��t��u�H�C0L��H�p(舿�A�E�������Rǃ�I�E H���I�EH������1����H��H���������H��H���6��H�� H��H�@�{��H�{H�����H�=/�F��H�C��Ru���������[���H�S H�C(H��`%H�PH�X �@hH��H�����ƃ�H�{0H��I��H��H���d�L���H�{(�t�����\���H�{H�މ$����$�����H�5�H��H�[�EH�81��!����H�=�/1�����f�H�=��FL�s H�D$A� H�D$ ���H�5��F�7��Ff����Ff���>H�nH�FH�-c�FH��H��u�E1�A������"1��� ��H��H�����H��� H��賁�H�
,�FH���H�5$�FH����D���D�x�D��1���H�H��TA��9�~qD�D2�D�����A��D���D)�D�x�A��1�Hc�H��I��H���FfD�EfD�}H�EH���FfD�}H�E1�f�EH�-��FH�-v�F����9�|�DA���I�EI�}ǃ�H�CH������H���I�EH�8�� �DH����Hc�H9��>�H�D?H�����I�UI�uL�������������Dǃ�I�EH���I�EH����[�������[��H�=t�F��$�*���$���c���H�C H�t$H�{0H��`%H���I��h%H�D$ �H�S0H��H�(H���H���H����k��Hl$ f�H���H���H�U�H�H�E�H�H�J�H�H�
WwH�J�H�H�J�H�B�B�B�H���H�XH�CH�� H���?��1ɺH��H�����H���E��H�{ ����x���H�L$(dH3%(L����H��8[]A\A]A^A_�fD��H�L$L�D$ L��f�F���TF�G�H�= �F�������fD�H��VL�D$ L��f�NH�L$)�Hc���H��H�,�FH���c1�Hc�H���~������E���H�=��F�y���U���@H�x����H�CH�� H���-��H��1ɺH�����H���3�����fD���	��H�������D�H�$�z��H�$H��H�t�F��D���H��D�x��N�����M��H�$1�H��H�E�F��D����H�H��A�ǍTH���������$H�L$����$A�H��F��9��-���H��H�L$�������T$H�$�����T$H�$H��H�ʿF��D�D������H�L$D�$���D�$H�L$H��H���F��D�����H��A���������$�n��D�$H�L$H��H�c�F��D��E���A��A�H���k�����7��H�L$D�$H�/�F���J���H���FH�5�FH�L��h%D�`%A�7H��tVHc�D�|2�D�����Lc�I��H�
ܾF����H�s�������D����H���F�������H��H���FA�H��u���$�x���$H��H�s�FHc�D�|�H���j�����P��Hc�H��H�K�FD�����Lc�H���J�����'��H��H�%�FHc��.��������ATI��UH��SH��0H�57BEdH�%(H�D$(1�貳�H���
�����������th��tH��EH�5��H�81����H������H��t�H� t}H��H�HH�H�5�H�ĽEH�81���f.�f��D$$D$D$�$L�d$���H��H��H�D$����H�T$(dH3%(u'H��0[]A\�H�@ �H�S�EH�5��H�81�����}��ff.�f���Sf�H��H��0dH�%(H�D$(1�D$D$H�t$�D$$�$�
��H��H�D$� �H��H���u���H�T$(dH3%(uH��0[����f.���ATUSL�gH��I��$ H�����H�s H��H��I��$XA�I9�$XLE�1����[H��]A\���f.���UH��SH��H�GH�� H���@��H�u H��H��E1�1��|�H��H��[]�>��ff.���U��SH��H���<��H�C8�CHH�C@H�C8@��u�C2H��[]�f���USH��H���H�EH�� H����������<tH��H��[]���H��H��1ɺ��H��H��[]�����AWAVAUATI��UH���SH��H��L�s0H���E��D�{`ƃ�L���C`H�CX�C��H��0H��0H�B�H9�t @L9`t	H�P0�J  H�PhH�B�H9�u䋃+��L��h��t @H��L��襻���+����u�H������L�����D�{`H��L�cX������H���ƃ�ǃ�耬�H��H��[]A\A]A^A_�z��f.���AUI��ATUH�o0SH��H��L���H���I��L���!���������)‰����t5I��HH��H��0��L���
��H��H��[]A\A]����H��h�T��f���H��H�=	�E�\��H��H�����ATUSH��H��t)H�o0H�G8H�G@H�G8H��tL�gH���?mI��$�H�=��E���H���[]A\�f.�AWAVA��AUI��ATUSH��H��H�o(H9���L�c(A�D$h��ZL�{H��tE��tH�}(��H�C(1��lI�t$`ILJ�H����;�I�m(H9�tHL�c(A�D$h��~�I�|$(L��船�I�m(H9�u�H�CH�S0H9��tǃ�H���H��I�E8A�H��L��I9E8H�u LE�1���H�=W�FueH��[]A\A]A^A_�fD1��lH��L���ILJ�L�{(H�C(�k���L�}(H���L���h�I�m(�(����H��H�s�[]A\A]A^A_�L��ff.����AWAVI��ATI��USH�� H�G0H�t$H�D$H�D$H�@L�� H�D$H�\$L�<$H���H�� H���h��L��HH��L��PL���o��L��H�D$�B��L���z�H�T$H�D$H�@0H�R0�@$��#B �
��A�������H�D$H�x0H�Ǩ�$����H�D$H�@0H��H���H�T$������H�=˸F���tH�t$�H���(��H�D$H�,$1�H�t$H�@(H��@h���É���H�t$��H��H���0���H�D$����H��H�D$�w��H�\$H�� H���C��H��HǃHHǃP�E��H�\$H���H�Hǃ�H�� []A\A^A_�AUATUH��SH��H�����L�e(H�} A�l$ht;1�1�H��H���\�H;k(tVH��H��1��y���H��H��[]A\A]����L���L��葽�I�D$L������@H�C8A�H��H��H9C8H�u LE�1����ff.�AWAVUSH��(H�F0H�|$H���H�t$H�D$�G����H�l$H�E0H��H���H�� H�����H���H��PH��H��H���H�=ԶF��H�|$輼�H�D$H�P0�B$��#B �
tGH�|$轿�H��蕼�H�D$H��HǀHHǀP蒿�H��([]A^A_��L�t$L�|$1�I�F(L��L���@h��@�ʼn��Z���L��L������H�D$�H�p����J�����ATUH��SH���EH��tH��������AH�~�EH�5������݌��H�] H������H�������H��h����H�������H��L�e(H�� H��H��@H��HH��@H��0H��8H��0���A�$I�D$fH�=d�EffH����H������H�E(H�x(�Y��L�e(��1����A�D$I�|$X誋��H��H��E1�I�D$XH�}1�H��HH�� �����H�E(�@hH�Xǃ[]A\�fD�H���{������������ff.���USH��H���FH�(H���FH�H����H�=��]��H��t(1��
H�������~H�f�F����1���RH�=�����H��t'1��
H���x����~��H��[]�����H��[]�fDfH�=p�EffH�h��H�H�X0H���O���H�[�F���ff.�@��AUATUSH��dH�%(H�D$1����uDL�%��FH��H�o Ƈ�I�<$tMH��PH�GxH��PH���H�WxH�BH��PH�D$dH3%(u[H��[]A\A]�f.�L�l$L����H��PH�CxH��PI�<$H���H�SxH�BH��Pu�L���������D��AVAUATUS���H��H���taH�����H�k(H��t#H�}(觢�H�}X�>��H�}`���H���}��H����q��H�C(Hǃ�[]A\A]A^�DH��t�H�=��F���L�%`�FI�$H��h%H�D�H�(L�hH��Ic����H�}I��tt�E�Pf�UfD�lEH�-t�FH��to�H��L�������uH�=�F�Ϻ��M���f.�L���H���p��H�=�F褺��"����H���FH�-�FH�E�u����I�$H��h%�`%H��F�TH��t!���l����Lc�Hc�I��H�-îF�O����贺�H���F�TH��uſ蚺�H���F���l�H��u���~��H��H�|�F�����Lc�H��u���[��H�\�F���|���ff.�f���UH��PSH��H��PH9�tcH�H�B�H��x�;fDH�pxH���H�PxH�NH�1H���H�PxH�KxH�SxH��H�Y�H9�t���u�H�x�i�����H��[]�f���H���=��F�=�����E��tKH�4�FH�H�B(H��t8H�H0H��t/�I �����t H��HH��tH��PH�����H�����S1�1�H��dH�%(H��$�1�H��H�������H���������'�H��$�dH3%(u	H�Đ[��l��ff.����UH��SH��H��(dH�%(H�D$1�H�t$H�|$����umH�D$H�L$�H)�H=Pv;H9�H��HF�H)�H9���1�H9���!�H�\$dH3%(uZH��([]��H���������H��H���DH��t+H�U0H���H����H)�H=Pw���1��������1���x9=�Ft9=�Ft9=�Ft�DH���EH9��F��������������H��H�=�F�\����uH��É�H�=�����D��H��H�=�F�,����u1�H�=ϫF�����uH��É�H�=g��ê���H�=p�赪�D��UH��SH��H�=��FH���$����uH���H���S���H��H��[]É�H�=���k��ff.���H��H�=A�F�|����uH��É�H�=��5��D��AUI���ATI��U��� SH�����H�=��FL�(H��L�`�h�"����u3H���FH�CH��H���FH�=��F�
����uH��H��[]A\A]É�H�=|�譩���H�=#�蟩�ff.�@��SH��H�=1�F�������H�E�FH9�u�^fDH��H��t8H�PH9�u�H�SH�=�FH�P�{����uJH������[��H�=ɩF�T����u#1�[�@H�CH�իFH�=��F�1����t���H�=c��ߨ���H�=���Ѩ����SfH�=C�EffH�;��H�H�P0H�r(H�z �Fh����H��h�+����[����H��H�5�!E�ܹ���H�H��H�Ѓ��ff.���H�=��F�����U��H�5r!ESH��H���u����tH� H��[]�H�#���H��[]�f���H�5�EH�=�����
f���������������闰����駳����1����D��SH���fDH�����H��u$H��`H��t/H�GH�?H��`u�H���H��H�=A�1����fD[�fD��闸�����H�W �B����sH�zH�����h������H�H�P �B����rȃ���H�H�P �B��tsr�����H�H�P �B��tYr����H�H�P �B��t?�v�����ueH�H�P �B��t%�\�����uKH�H�@ �P��tsH�x�A���1��@��u%RH�H�x 莦��H��H��t	H����1�H���fD��H��8f�dH�%(H�D$(1�H��EH�|$ D$H�8H�t$H�D$�D$�$���H��H���#��H�T$(dH3%(uH��8����f���H��H��H�=������H���ff.�@��H��8f�dH�%(H�D$(1�H�e�ED$H�|$H�8D$�D$$H�t$H�T$�$��H��H���r��H�L$(dH3%(uH��8�������S�H�� dH�%(H�D$1�H��H�������tH���k���ʚ;H�����H��H�$$H@�HD$HB�H�t$dH34%(uH�� [����SH��H�� dH�%(H�D$1�H�=ЯEt.�i���H�����H�HB�H�t$dH34%(u<H�� [�DH���ع��ʚ;H�����H��H�$$H@�HD$HB�H�HB�����f.���UH��SH��Hi�@BH��dH�%(H�D$1��D���H��H��H��H�$貘��H�D$dH3%(uH��[]����fDSH��H�� H��PH�X(L�@0H�t$0dH�<%(H�|$H1�H�\$8H�XI���H�T$H�\$ H�� H�\$H�D$L�D$(�/����H�\$H�C0H��H���H�|$H������H�|$�ѫ�H�S0H�=V��H��PH��H�B$��#B �
uNH�\$8H��(H�|$0��H��]xEcH�T$0H�:H9�vH�H���%���H�t$H�T$@H��H�D$@莗��H�\$H�|$HǃH�d��H�|$H���7�H�CH�S0H;��tǃ�H���H�D$HdH3%(uH��P[��H�t$H���ˣ�����@AWAVAUA��ATI��US��H��(dH�%(H�D$1�H����H�)��H���R����H�H�����HB������@�%A�L�|$���yH�=�F�]��L��D��D�t$�=��FL�d$��������M��t]A��$�I��$�I��$�E��$�ADŽ$�H���*H�s�FI��$�H�l�FI��$�H�8H�=Z�FH�=[�F�����q�����1����������A��A��@tjA�L�|$����f�軫�������H����H�=�F�q���1�H�t$dH34%(�bH��([]A\A]A^A_�L�|$�1��L��f�T$1�A��f�D$D�l$�����������L�|$H�=t�FA��٨��w���@H�I�FH�5B�FH�P�H9����@���H;h�w��@�tH9h�sH��H�BH�H�H9�u�H�JI��$�I��$�H�xH�z������fD�L�|$1�1�f�t$L���f�L$D�l$���������A������'���f�H�=��F��������I��$�I��$�H�xH�=]�F�p������H�,%�$���H�=�������D��H�=��1��2��f�AWAVI��SH��0H�|$L��H�4$�։�L���D$.�D$/�������I�F0L�4$H���H�D$聝���L�4$I�F0H��H���I�� H���,��H�u��M��PH��I��H�/��H�=�F�H�|$��H�$�����tH�$H�P0�B$��#B �
���D$/H�$H�|$��������D$.�ϩ��D$/��uFH��螦�L�4$H��IdžHIdžP蜩�A�����D$.H��0[A^A_�DH�$�����t�H���ڿ����L�4$L�|$�A���L��L���D$���A����.���L��L�����-���f�H�$�H�p�^�������f�H�GH H��t1H�W(�Rh��~�Q����I��H�������H������H��H���E�DH�G(�Hh�������� �u�f.������t.H��H�G��E1����H��H�� ���H�����fD1��DH��H���FH���EH���FH9�tlH����H�r�FH�xH�o�FH�`�F������F����F������	���k�F����6�5T�F1ɺB1����H�׫FH�1�H�='�FH�H�������F9�F��H�5��H�=�F蛟��H�5��H�=�F舟��H�5i�H�=�F�u���H�=��F�������@�1��T�����F���F��ytH�=��F��������=��F����=��F�
���=t�F�����=m�F��������H�51�H�=J�F�D�F�����۞���N���fD��������该�H�=���01����ff.�@ATI��UH��S���x8t1ۉ�[]A\�DH��tL�f���H9�r�H)ŻI�,$��[]A\�fD��t1ۃ�Uu��M��t�,���H9�s�I�$���[]A\�H��tZS@��t+H�H��~@�ʚ;H��H��H��p[���H�rq[������
�
f/�s5f��f/�r[��D1��D�Y�6f/�s�H,��H��������\��H,�H��?�H��[�f.���AWH��AVAUATI��UL��SH��H��H�T$dH�%(H�D$x1��Փ��H��I��H���ח��I9G8&I������kH���W��H������H��L�d$@����I��I�G(H�D$H�D$ H�D$�L��H���u���I9G8��H���fH�=�EffH��f�H�\$@)D$P)D$`H�L�p(H�P0L��H�T$H賑�I�W0L�|$hL���H�t$H�=d9LE�H�D$H�T$`H�D$XI�D$L�t$PH�H�]���A�G$I�G0H�\$ H�l$(L�l$0���H���6������I9��(������H�T$L��H��蠽��H�L$xdH3%(u?H�Ĉ[]A\A]A^A_�H�=�FH�5��1����H�B�EH�5��H�81�����l��ff.��AWI��AVAUATA��UH��SH��H��xH�vdH�%(H�D$h1�轕��I�WH��� �mH����H��u"E���oH���k��H������OH��L�d$H���I��H�D$0H�$H�D$H�D$@I�H��� ��H����H����H���fH�=�EffH���f�H�\$0)D$@)D$PH�L�p(H�P0L��H�T$8��L�|$XH�$H��������L�|$HH�t$LE�I�GH�=`7L�t$@H�D$PL� A�G M�gH�\$H�l$L�l$ �&��H���4�����I9��&���I�赖�H�L$hdH3%(uTH��x[]A\A]A^A_�fDH�G�����H�B������H�R�EH�5��H�81�����|��ff.����AUH��I��ATI��UH��SH������1�L��H��I�����H��H��������H��H��I�����H;C8|H��L��[]A\A]�f�H�{(�����H��L��[]A\A]�@��ATH��I��UH��SH������1�H��H��I�����[H��]��A\�Y���f���AWAVL�5�FAUATL�%��EUSH��H��(dH�%(H�D$1�fH�=m�EffH��������H�D$H�D$D���E����5n�������H�H�=��FH����H�r�FL9�u^�kH�P�H9�wH)�H��?BwSH�0H�PH��x���H�VH�2H�@H��@��@�H���t ����H��FL9�tH��H��t�@�u�H�=	�F蔟�M9$$tNH�='�F�b��I�$H�h�L9�t$DH�E(�H�x���H�E8H�h�L9�u�H�=�F�E��DH���L��@A�
H�����1�L9�@�U��`H�������`���=��FD���H�5��F�����������?�������H�-[�FH�@H�EH��H�$�:DH�=�FD�m�x��A�����ueH�=��F聞�H��H;,$�+���L�}M��u�D�-�FH�t$�D�����H��y��g���0��t݃�t�D��H�=�����@I���I���I���A���H�NH�1I���I�������E���L��ALJ�ALJ����������;�����ۜ��8�j���H�=��f����H�=���01�����H���h��H��@H�B�I9�t�H�P0�J H�PXH�B�I9�uꋓ(����H���D��H��������E����1�H�\$dH3%(��H��([]A\A]A^A_�f�H�=i�F�ԙ�H�M�FL9�tH��H��tH=�t�B�uiH�=:�F�Ŝ�����M9$$�������(��E�A��
���H�������C����H�{(H���N����聳���?���@H�$E1��|�H�$H�R�H9��z���H��?BI��4�ׂ�CH)�H��I��H��A���T����0����H���j������H�����fD��ATUH�-�ESH��H���6��H��H��H�@0D�` �#��[]H�@0�@$��D!�A\��
�ff.�@��H��H�5aE������H�����H��H�=��E���H��H��tH�����H�����D1�H��Ð��H�������SH��H���<������[���H��(Hc�dH�%(H�D$1�H�F�EH��H�H�$H�D6�H�D$H�G H�x(�X���H�D$dH3%(uH��(�����ff.���S�H��H�=�<H�� dH�%(H�D$1�H��EH�H�$�e��H��H�D$H�C H�x(�۶��H�D$dH3%(uH�� [��P����������u��1�����ff.�@�����1���t������ff.�@��H��H�5�E���������u��1�����H���ff.���UH��SH��H�5LE�׃��������tHH��H��1��{�������Ѓ���<vH��H��[]�fD��H�舓�H��[]�D�H��H��[]Ð��SH���C��H�����tH��[�H�ύEH�5m�H�81����ff.���釼�����H��fH�=P�EffH�H��H�H�@0H�@H������AWA��AVAUATUH��SH��(dH�%(H�D$1�fH�=�EffH��L�-��FI�}H�H�@0L�` H�mH�m�#I��$�I���H�L9�u��H�H��L9�tmH��D9xu�H�H�PL�pH�QH�
H�UH�hI��H�H�BH�EH�h I�F H��0����A����1�L���ʮ��H�H��L9�u��H�]E1�H9�A��腵�H�E���H�D$H�E�H9�t���H�D$H�@I�}H�E tHH�D$H�D$H�D$D��H�L$dH3%(u2H��([]A\A]A^A_��H�|$�������H�|$趣����ff.�@AUE��ATI��USH��hH�|$ H�t$H�L$dH�%(H��$X1�M����L�����H�D$(fH�=-�EffH�%��H�H�h0H�E0H�X@H��������t��H��H�E0H�X@�d��H�t$(H��H��H���Q��H�D$H�l$HL�d$XH�D$PH�D$H�D$`E���"H�t$1ۺ$H�����H��$tM���HH���.H�D$ H�D$@�����Q����H�|$H�H���Б�H�T$XH�t$PH�|$H輟��H�|$HH�T$@H�5K~��H�L$4�1�H�T$XH�t$PH�|$HH���:�������Q�X��H�|$HH������l$4���4H9\$H��@H��$XdH3%(H����H��h[]A\A]�������H�D$(�g���@�Q1�����H�|$H�$H���ڍ�H�t$PH�l$HH��$�����@���I9��������D���!�H�t$H�|$H�D$ ��H���E���D������H���H�������H�t$(H���ʌ�H��H�����������H���H���������fDH�t$PH�T$XH�D$8$H�|$H����fH�=��EffH蛣�DŽ$PH�D$p$H�0H�FH�t$H��$HH�F0H���>H�H 1�H�yXH9x��H��$���$T辆�����uvH�L$H�D$p1�H�t$�D$4H�|$H�AH�D$ ��H�D$8H��$HH�L$H�T$XH�t$PH�AH�|$H���������\$4����H�\$8���DH�T$H�B������ǀ�H�B0H��tpH�H 1�H�yXH9xtX9�t
H�|$�J��\$4�i�����Q`�����H���H�������L��H���e��H��������fD�Q`�H�@XH�|$HH����D苺��f��H�T$(H�5R�H��H��EH�81����fH�=ފEffH�֡��H�H�@���H�x�K��fH�=��EffH諡��H�H�@���H�x� ����������H��FH�H��t
H���H�@ÐH��fH�=T�EffH�L��H�H�@0H���=�H�@H���H�@H�������G�����SH��H��H�5-
EdH�%(H�D$1��{�H�@0H��QtKH�x8H��tH��H����q����u#�H�L$dH3%(u$H��[��H�$��f.�H�@@�����D��SH��H��H�|$H�t$襙�H�ƸH��tH��� ��H��[�f.���ATUSH��uH�5,�1��5��D@��u�H�H��H�ƒ�H��t��u�H��H�5)	E�z�I��H�@0H��QtDH�x8H��uH��tH���-s��H��[]A\�DH��t+H��H���0q��H��[]A\��H�X@H��[]A\�@�o��H��I�D$0H�x8��ff.�f���UH��SH��H��H���x��H��H��H��H��[]鄃�@��H��H���FH�8H��t�4�������H�����fDfH�=�EffH���H�H�x0H��t�H���ff.�AVUS��H��豠�����fH�=��EffH蹞�H�H�H0H�$9����H�A0H���H�D$�
����H�$H�A0H��H�iH���H�� H��贋�H��XH9�XtVH�=��F��L�4$1�H��I�F(L���@h����1�藸��I�F(L��H�ߋPh��@��1҉������L��H�����H���f��H�$H�BH�R0H;��tH�4$dž�H���H��[]A^�H�$�H�p�~����c���f�AWAVAUATUSH��H���t$$dH�%(H��$�1�H�D$0�D$H�D$(H�K0H�q ��Q �y$��!���>9�u�A$��!�����A��A��A�ԃ�A��A��A���$�Ѓ��� �D$tH�-��FH�}��E���kE����H�C H;X(�ML��hL9�htz���H�� A�ƃ�A������*@I�I�GH��H�BH���I�A�WL������H���‰�L��hM9�u�H���Ό������A	�D���E�������@��H��H��� ��H��H����H���~�D$ H�\$��@H����H9���H�\$H�GL�,�M����H��EL� H�D$H��H�(�� �=H��H����H���:H�D$L�t�M�>A��t#M���aA���WI���H���GH���EL9 �_L;=��F��L;=��FtlL;=��F��H�D$�D$ H��H�Hc\$ H�\$�� �
���H�D$H;G��H�G H�\$L�,�M������A���M�e�����L$$��t�DH�\$H�t$H���*��I��$�Z�D$��T$���[�$������iK�E�����щ�������N��u
���'H�S0H�B0H���@��H�@�@�5���@������L��M��u)�H9vpuL���ʂ�H��u.H�sH����H�H���H��u�H�vL��蜂�H��t�H;7�F�����H;"�F����H;
�F�s���H��~EH�5U�H�81�藻��H�{ ������f�H�hH�@ H������H�t$H�\$�п�I��$�����L��H��H���I���H�C L9�0������ƒ�����w	����L���U��DH�D$H�D$I��H9��M�������I����I���3A����A���pH�Q�EL� ����f�H�W�p������D�d$�Ń��������H���^W��A	���V����u����D�d$��	�@����a���H�V�EL� �^���H�g}EL� �O���L�|$(L���z�H�}����L�������H�JH�|$(H�qH�T$81��D$0H�t$HH�pH�L$@H�D$PH�D$XH�D$`H�D$h$H�D$x$�D$p�ΰ�b���H�z~EL� ���H��$�dH3%(�D$uRH�Ę[]A\A]A^A_�H�\$�D$���@���H��EL� �a���H���A���L���9�I�����茯�ff.����H�G0���u�J���f.�1��ff.�f���SH��H�� dH�%(H��$1�H�D$$fH�=�EffH蕖�H�H�D$H�D$H�@0H�D$ H�D$(葕����6H����H��H�������H�H�ƒ�H��������H�5*��H�T$H���]��H�t$H��$�.H�������H�\$H��H�D$ H���h��H�D$ H��H��� ��H����H���}H�D$0$H�D$ H�H0DŽ$H�AH�L$H��$H�A0H����H�H 1�H�@H9AX��H�|$@��$��x�������H�t$H�D$0�1�H�F����H�D$(H��$H�t$H�FH�D$ H���v�H�D$ H��H��� ��H����H����H�D$ H�P0�B$�ЅB �t����H�D$(H��$dH3%(��H�� [��H����d�H���^���H�D$�P����@���}���H���H���m���H���^��H�t$�[���@H�BH�������H�D$ ����H�D$ H�@0�H �d���@H�BH���(���H�D$ ����H�D$ H�@0�H �	���@�Q`�w������f���
����H�|$H�G������ǀ�H�G0H��u�H�@Xf.�H�H 1�H�@H9AXtH9��C���H�|$�>��4���f�H�z0H�G0����w���1�����k�����Q`�H���EH�5�H�81��+��薫�H�D$ �H�@0H�@���H�x腀�D��H��H�5�D�m�H�P0���u�H��H������fDH���AVI��AUI��ATA��UH�� SH���2����H�����H�C0���uC�P$�҅P t9H���т�H�S0�B$��#B E��u���t�H�z0H�G0���u�1����f�L��HH��L��P节�[�]A\A]A^�@[1�]A\A]A^�ff.�f�AVSH��xH�T$H��H�L$H�<$H�t$dH�4%(H�t$h1��D$HH�5$�����������D$L�����u"�D$HH�t$hdH34%(�
H��x[A^�f�H�$H�D$L��H�5_�H������H�{�D$/������贪��H�C0H�$H���H�D$0�t���H�$H�C0H��H���H�CH��H�� H�D$8�M���H�S0�B$��#B �
udH�D$1�H��t7H�SZ��/�DH�H��H��	H��H��H��H�T$PHi�ʚ;H)�H�T$PH�L$XH�|$1ɾ�9���D$H�D$H����L�4$I�� H���}�H��I�^8IdžH迀�I;^8t3H�=RwF�}�H�4$H�=BwFH�V8H�F@H�BH�H�^@H�^8膀�H�$H�sH�� H�t$ H���J���H�{H�C0H;��tH�4$dž�H���H�$��H�5ȬHǃ�脩������ƒ����
����T$L��H�4$��	Ј������H�L$����������AWAVI��AUI��ATUSH��8H�=�sE�<��H��H�$H���H�$H���H��HL��PH�����H�$L�� L���C|�H�$L��HǀH�L�H�$L�x8L;x8t3H�=�uF�|�H�$H�=�uFH�Q8H�A@H�BH�L�y@L�y8��L�<$I�wH�� H�t$L���Ͻ��I�I�G0H;��tH�4$dž�H���L�<$��H�5M�ILJ��	���A����ƒ���u���H�4$��	Ј��L��A��H�<$1�L��H�D$H���������:�����u&H�
�H�H���H�=Ъ�l��H�$��H�5�����H�yH���H�ˈD$����������H�C0H�$H���H�D$ ��p���H�4$H�F0H��H���H�FH�� H�D$(袨��H�D$H��8[]A\A]A^A_�fD����=�H��yEH�=��H�裸����q�f���AUI��ATA��H��USH��H�5�D�g�H��fH�=�uEffH躌�H��H�H�h0tQL��D��H��苙��H9�tH���[]A\A]�fDH�U0�B$�ЅB t�H�z0H�G0���u�1�����H��qEH�5?�H�81��P����USH��8H�wH�|$dH�%(H��$(1�H�t$H�G0H���H�D$0�D$,H9����H�|$����H�t$0DŽ$ H�D$@$H�FH�t$H��$H�F0H����H�H 1�H�qXH9p��H�|$P��$$�o������H�t$H�D$@H�FH�D$H��H��H9�t:f�H;\$t"H���踾�����1�H��角��H�H9�u�H�\$8�&�H����H��ud�B$�ЅB uf�D$,H�|$�������H�|$H��H�D$8ʚ;�D$,�A��H�T$0H�z0H��H��� u�H�AH��t������J H�G0���u������H�L$H�Aǀ����H�A0H��twH�H 1�H�YXH9Xtb9�t
H�|$���D$,��u?H��$H�t$H�FH��$(dH3%(u0H��8[]ËQ`�^���H�@X�D$,�v����Q`�H�@X�W�����H�W0H��H��� tH����H��u�G$�ЅG u1��H�AH��tꀢ���O H�B0���u۾H��������H�W0H��H��� tH����H��u�G$�ЅG u�f�H�AH��tꀢ���O H�B0���u۾H���q����H��fH�=rEffH��H�H�z0H��H��� t"H����H��u�B$�ЅB u!H����H�AH��tဧ���J H�G0���uҾH�����AWAVAUATI��USH��H�t$dH�%(H�D$81�fH�=cqEffH�[��H�5�DL��H�L�p0H�h(�c�H��I�$ uI�F0�@$��L��辜�H����H9+���D$L�l$��f.�f�H��L�d$)D$ H�D$0L�t$�e�H�SL��L���H�=�k��HD�H�T$0H�D$ H�CH�D$(I�EH�H��]��H�C�&`�H�;���|$I�v0���mH9+��H�~0H��H��� �,H����H���)�F$�ЅF �'H�H���rH9��l�{�H������I�F ���uH�;�b�I9��4f�H��L�d$)D$ H�D$0L�t$�d�I�~���HD�H�D$ A���A�ǃ��A��A������<���H�SH�CL��M��XH�D$(I�EH�T$0H�H�CI�FH�� �e���H�T$(H�D$0H�;H�BH��ZI�F�|$I�v0��A���IdžX��A	�E�����������F$�V ����!у�
t5�L$H�~ �����
@�V �F$!Љ�����9�u�F$��!ЉD$H�����H�+�L$��tI�F0�H H�5G�DL���O`�I��`H��tH�PI��`H;+����H�\$8dH3%(L����H��H[]A\A]A^A_�f��V �F$!Љ�����9�u�H�����@H�BH�����������N H�G0���������L�����H�+����H��a���@H�+�<���H��iEH�5"�H�81�谦����H��iEH�5ݪH�81�蓦�H��iEH�5��H�81��{��ff.��������f���ATI��UH��SH���Z��H��H��oE[L��H��]A\�\����SH���3����tH�5rEH�ߺ$[��H�3iEH�5��H�81����f�AUATU1�SH��H��dH�%(H�D$1�H�G H��t
H�x H�����uCL�%4�FI�<$tMH�H�CH�BH���ukH�D$dH3%(��H��[]A\A]�@胃�L�%�F�I�<$u�L�l$L���~H�H�CI�$H�BH�H��u�L���D��f�H�C H�5E�DH�x��]�H���H�C H��t#H�PH�p�>��H�C H�x �Q���Q���@H�x��p����H�����1��%���DAWAVA��AUATUH��SH��H��D���H�t$���A��H�S0H�H�����HC����������H�z0H��H��� �H����H����B$�ЅB ������<ucL�l$H��L�����H�S0H�z0H��H��� tlH����H��ui�B$�ЅB ukE1��f���H9�rH��H)����H�t$��<t�A������A	�D��D���H��[]A\A]A^A_�@H�AH��t������J H�G0���u����A�Dž��s���E���m����fDH�AH������������J H�G0��������l��������UH��SH��H��fH�=�iEffH����ʚ;H�H�x0H��H��p<A��H��H��I��I�����I@�I�����H�L��HC�H���[]������H��H�����H��H��q������Hc�H��H�|?�Kz�H��H��H��錤�ff.����ATI��USH��H�� dH�%(H�D$1�H��tH���Э�H���x��1�衵�H��H��H�$H�0���H�=�H��L�d$�|X�H��fH�=�hEffH���H�H�z0H��H��� t[H����H��uX�B$�ЅB uZ�H��t1��,��H�@H)�H�xZH�DH�L$dH3%(uOH�� []A\�@H�AH��t������J H�G0���u�����f.�H��踜��著����SH��H� H�����u[�f���H9tfDH�{ ��f�H9u�H�{ [�3����SH��0dH�%(H�D$(1�H��H���l����uH�D$(dH3%(uH��0[�f�H���h�������������w���tH�H��H���0f�P�1��Ӂ�AWI��AVAUA��ATU��S��H�����A��A�����������ۃ����	ʃ�����E��A���(�H����H��u\�B$�ЅB u^A�������9�umI�����H�� L��譭��E��uMI�W0H�z0H��H��� u�H�AH��t������J H�G0���u�������t�A��u�A�����A	�E���H��[]A\A]A^A_�����Ċ��I�GL��H�� ����I�G���T����H�O0H�y0H��H��� uAH�VH��uA�Q$�҅Q ����H�G0���u
����A��������H����뺀����I 뿐AUATI��UH��SH��H��dH�%(H�D$1��p�H���^fH�=FeEffH�>|�H�H�X0H��u2�H�����H�D$dH3%(��H��[]A\A]�fDD���胻��H��H)�A��H9ŸHB����H�$��H�S0�����H�z0H��H��� ��H�AH����B$�ЅB ����I���<uoH��L������H�S0H�z0H��H��� ��H����H�����B$�ЅB ���ƺ��H9�r!H��H)����H�$��<t�f������A	�D��������L��H��H��������DH�����%���@H�A�m���������J H�G0����`���������Q���@�����J H�G0����������������ג����H��H�WH�wH�?����H���ff.���UH��SH��H�_�n�H����H����H��讧��ʚ;H��H��H��p~H�Ȼ�H�����H��H@�H�H�����HC�fH�=�bEffH�y�1�H��H�H�x0�����H�H��H��[]���fDH��H���U�H���[]�f���H��H�����H��H���}����H�}1Ҿ���H���[]�@��H��fH�=bEffH�y��H�H�x0H�������H��fH�=�aEffH��x��H�H�x0H�������AVD��AUI��ATUSH��H�ĀH�|$(H�t$0D�D$dH�%(H�L$x1ɨ�PfH�=xaEffH�px�H�H�D$H�@0H�D$H������H�h I��L�e(I9��D$>H����H��tH�x�;�����u	M9��H�|$D�d$H��L��H�l$X1����A��D����D$T�<��Å��
�|$>H�D$Xt
ǀ�E��t/��谨�H�\$xdH3%(H����H��[]A\A]A^�@H�D$H�x0H��H��� u@H�BH���SH�t$�F$�D$8�ЅF t�H�G0���u�������H��������k�H�������H��H��M��H��H�T$hRD�L$$H�T$@H�t$8�zY�ZYH��$�n����|$h�է�H�l$`����H�\$H�D$T��H�5ƓH������H�{�D$?����������H�C0H�\$H���H�D$@�Z���L�t$L��I�F0H��H���I�FM�� H�� H�D$H諑��H�|$0H�D$(��H���U�L����}c�L��M�f8IdžH�f�M;f8t4H�=]F�Tc�H�L$H�=]FH�Q8H�A@H�BH�L�a@L�a8�Lf�L�l$I�uH�� H�t$ L������I�}I�E0H;��tH�t$dž�H���L�t$��H�5��Idž��G���A���D�d$��A�������v����T$T��H�L$��	Ј���Y���L�l$H������
��������H�D$�H ���f.��D$����Dž������a�����A�������E1����@UH��AWAVAUATSH��H��L���L�s0dH�%(H�E�1�H���L�g I�Fp�ʱ��H�S0I�FXH�z0H�B`H��H��� �kH����H���h�B$�ЅB �f�����I�uH��� �I�uHc�A��H9��P�����9H��H��H��=��H�BH��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L4�H�|$I�uH���I��H��uI�u H����Hǃ�H�{0H�W0H��H��� ��H����H�����G$�ЅG ��D���E1�L��D��L���1?H�]�dH3%(�H�e�[A\A]A^A_]��H��������@H�AH������������J H�G0��������������������H�CL��L�0�f�Hc�I��H��H��H��=�yH��H��H��H%�H)�H���H��H9�tH��H��$�H9�u���&L�|$H�{0H�sD��I���L���J���H�{0H�W0H��H��� usH�AH�����G$�ЅG ��H��D��L��M��jD���L���Z>ZY���M�}H���A���M�} �8���f.�H�A�G����H������諣����fD�����O H�B0���u
�H�����H�{0����������O H�B0���u
�H���z��H�{0�)����H)�H�L������}����m�USH��H�<$dH�4%(H��$�1�H�wH�D$8H������H�D$��H�D$$H�$DŽ$�HDŽ$�$H�H0H�AH�L$H��$�H�A0H���LH�H 1�H�qXH9p�PH��$��$��S������0H�t$H��$�H�FH�$H�P0H�B0H���s��H�p�F�\H�$H���H�D$@H����H�XH� �a��t�H��H���Z�H�$������N�������������H�D$$1ۿ���H�$H�P0H�B0H������H�p�F�<H�$���H�L$H��@H�$H��xH��tUH�XH�H�$H���H��x��H�xH������L�H�sH���H���;�H�$H��xH��u�H�$H��诫�������H�$H�A ���H;H(��H�D$8H��t'�u#H���H��uH�|$H�T$8��k{��H��$�H�t$H�$H�FH�{0�Z�H��XH���]H�$H�xH�D$����D$'��<����{��H�$H�C0H�x(�qX�H��HǃX����H�� �Bq����H�{�qH�$H���%���H�CH��H�� H�D$(�M���1�H��$�dH3%(��H��[]�f.�H�$1�H������H�D$���H�X����H�<$1����H�D$����1�H���t������ƒ�����������������H���FH�8�oH�$��H��H�{ ����H�[����H�������H������H���H�G�FH�8�����xj������l���H�|$1��t��H�$H�x�S���f.�H�$H�� H�����H�{H��衄�����@H�@0�$��H�@pH�D$8�EH��tH�D$8���[H�$�����H�$Hǀ���fDH�$������/���H�$H����
v��H�D$@H����H�XH� uH�X H�H�hH� tH�h�/H���|m�H��t
�xtH�hH�{@���_��^�A��H��1��H��$�H��@�yG�H�T$@H�T$HH�H�T$@H��v
�*f��$��0p�H��$�H���V�H�$����J�����Q`����H�,$H���$���H�}0H��H���՗��H�\$1��@���f�H��QEH�|$8H�0���H�������H�$��� �BH�$����pH�$H�@ ����b���H�$����Q����j�H������?���H�D$8�1���H�$H������H�{0�|���\���fDH�@Xf��+u����fDH�T$H�B������ǀ�H�B0H����H�H 1�H�yXH9x�`9��/���H�|$�~h� ���f�H�$H�T$XH��H�|$PH�R�D$PH�D$pH�@H�T$`1�H�D$hH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$��l��+����H�$H��$�H��H��$�DŽ$�H�RHDŽ$�H�@H��$�1�H��$�HDŽ$�HDŽ$�HDŽ$�$HDŽ$�$DŽ$��ׁ�6���f���eH�$H�p����fDH�x0��j����[���D�Q`����H�,$H�}�d���:H�5'�H��H���\r�H���^�H�}0H�t$8�v������H�$H�x0�D����~���H�@X1���t��m���V�����AWAVAUI��ATUSH��(H�o��dH�%(H�D$1���i�I�}XA�E�%����I�EX1���i�A�UhA�E����I�] L�cH��� ���I��$ H���T�I9�$H�B1�H��H���U���H���W�H��H�t$H�D$�]��H���/���1�H�L$dH3%(�)H��([]A\A]A^A_�f.�I�E`L���L��H�H���H�$@L���T��fDH�<$L����L�H��L9�t�H�H�CH�BH�H��ptу�(L��L�s���V�L���S�H�[�H��tH�{(tL����V�A�Eh��t��*���f�I�E`H��H�D$�ߑ��L�k(H�|$H����ڕ���A�H�s H��H��I��$XI9�$XLE�1��}������[~�ff.���AWA�AVAUI��ATUSH��H�^dH�%(H�D$1�H�kH�s H��H��XH9�XL�� LE�L��1��}��L����U�H�=�LF��H��H��H�$�*[��H���R�L���R�L�c(L�{1�E�t$hH�C(�>�ILJ�E�� H�C H��H��(uH��tH�}(t"ƃ�I�t$`L��蚔�H�=s�1��j�ƃ�H��H����f���L�e(H���H���c����H�s��cY���1���ff.���AVAUATUH��SH�1�L�oL�wL�`M��t���H�����IEHC�A�����<t
I��$t�[]A\A]A^��X�H����M����蓣��H9���H��L��H)�I�uL��A��$����A��$��N���I�T$0H�z0H��H��� tVH����H�����B$�ЅB ��A��$��A�����<�D����I�����
L���#�듐H�A�H�UI�vH���Z��A�����<�	���I��$�����f�1���f������J H�G0����[�����I���L���@��US��H��H�|$H�t$ �T$�L$dH�%(H��$x1�fH�=�KEffH�b�H�H�D$HH�D$HH�@0H�D$PH�D$X$�D$<H�D$PH�L$PH�t$P����D$H�A(�xh�������� ��������Q�H�|$P�t$H�T$`��.=��H�L$HDŽ$pHDŽ$�$H�AH�$H��$hH�A0H����H�H 1�H�qXH9p�YH��$���$t�=E�������H�4$H��$��D$@H�FH�D$DH�D$(H�\$p1�H�5�t�����H��H�߃��D$D�������H�D$pH�x0H�Ǩ��D���H�t$pH�F0H��H���H�FH�� �|��H�|$ H�D$��H�D$X�P�H�\$p�H�� H��D$<�DN�H��H�k8HǃH�MQ�H;k8t/H�=�GF�N�H�S8H�C@H�=�GFH�BH�H�k@H�k8�Q�H�CH��H�� ���H�{H�C0H;��tǃ�H���Hǃ���H�5`}�'z������ƒ���u�T$D���	Ј��H�D$HH�@0H�D$P�D$�����\$@H��$hH�4$H�|$`H�FH�D$H�t$H�@0H�D$PH�D$P@���������CH�T$HH�z0H��H��� u\H�AH���O�B$�ЅB �M�D$<��n���O��T$<�H�D$XH��$xdH34%(��H�Ĉ[]�H�������T$<H�D$X����%���������H�|$P�T$�t$��������H�T$HH�z0H��H��� �7H����H���0�B$�ЅB �R���H�G0����A�������"����.���DH�D$(H�{��H�5�{H�������������x��������Q`�������������������J H�G0���������������@H�@Xf.�H�$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xt9�����H�<$�\����Q`��H�A���������J ����H�GIEH�5�zH�81����v�H�D$H�H�@���H�x�K�@��1��%Y�D��H��1��q���fH�=IFEffH�A]�H��B$�ЅB uH����H�z0H�G0���u�1�H���l���ff.����SH���K��P�H��[�f���H����P��H���f���H���^���u�ʇ��H���H��AEH�5�H�81��~�����r����SH������hh��H��H�C1���H�[�@��ATI��UH��S��X~���?I��Hc�H��H��w+�����h�H��[I�D$H�uH��]A\���@H����g�H��[I�D$H�uH��]A\�����SH��H�����H�C[�ff.�@��SH��H�(��M�H�{8��M�H�{H�M�1�[�f���H��H�H��t0��p~��?I�Hc�H��H��H��=u1��G7���P���W�@��UH�VH��S��H����S���ۍC?��I��H�u�������?H�)ѺH��H	�H��[]�@��9>~/���G?��H�vI���������?H�)�H�����H��H!�����1�9>~3���G?��H�vI���������?H�)ѺH��H�������f�����ATI��U��?H��S�Z~H�I�A�$��Hc�H��H��w/�����y�I�D$H��H��[H��]A\���f�H���hy�I�D$�֐��ATI��UH��S��X~�H���?Iں���Hc�H��H���HB�H���y�H��[H�EI�t$H��]A\饋�D��AVM��AUA��ATI��UH��SH��H��tH�V���4R��H�[H��tH�UH��A�}��R��H�mM��tI�T$L��A�}��R��M�d$M��L��H��H��D��[]A\A]A^�=���U1�SH��xH�wXdH�%(H�D$h1�H�|$�D$8H�t$H��tc�ʚ;H��H�&��H��H�F��H��H�����H@�H�H�����HB�H�\$@����1�H�t$@H�����H�H�t$��H��HD�H�D$<H�T$HH�D$ H�D$PH�D$(H�D$�H�5�k���D$H�X���H��H�߃��D$<�W������H�D$H�@H�P0H�z0H��H��� ��H�AH�����B$�ЅB ��H�L$HH�T$H�|$8�t$訡����ttH�D$H�xH��tH�D$H�p(��L�H�D$H�xH��tH�D$H�p8�L�H�D$H�x H������H�D$H�pH�L��
����H�����]���@�D$8����HcD$8H�L$hdH3%(�{H��x[]�@H�D$ H�{��H�5�sH�������������Lp��H�\$H�CH�x0H�Ǩ�3:���H�\$H�CH�@0H��H�sH���H�FH�� ��q��H�[H�S0�B$��#B �
��H�� H���C�H��H�k8HǃH�F�H;k8t/H�=I=F�C�H�S8H�C@H�=5=FH�BH�H�k@H�k8�F�H�CH��H�� �N���H�{H�C0H;��tǃ�H���Hǃ���H�5�r�o������ƒ���������T$<���	Ј�����H�D$E1�H��tIH�L�D$(H�SZ��/�DH��H��	H��H��S㥛� H��H�T$PHi�ʚ;H)�H��H��H��H�T$XH�\$H�K H�SH�s�;�B[��D$8�D$8��xH�[���D�D���D$H�D$H�X���������J H�G0���������!������@H��H����������#����+D��L$��l����m�ff.���AVI��AUA��ATM��UH��SH��H��pdH�%(H�D$h1�fH�=I=EffH�AT�H�H�@0H�P0H�D$H�z0H��H��� �
H����H����B$�ЅB �D�,$H�l$H�\$L�t$ L�d$XH���KH��H�UA�}�H���L��H�t$H�}(H9�t�u���H�\$H�����$H��H�S�x��L��H�t$H�}8H9�t�B���H�t$ H�����$H�V�x��UL��H�t$ H�}HH9�t����H��H�����H��H�=N�����+�H�L$hdH3%(��H��p[]A\A]A^��H�AH������������J H�G0��������<��������H�D$P�D$H�h���f.�H�D$@�D$8����f.�I	�tH�D$0H���D$(����f�M��tI�<$I�t$�v�1������!2�1�������j�D��AVI��AUATU��S��H��@H�T$L�l$ dH�%(H��$81�1��|$Hf�t$Lf�D$N�D$fH�=�:EffH��Q�L���H�L�`0L����,��M����H�D$P$H�D$0H�X0DŽ$0H�CH�$H��$(H�C0H����H�H 1�H�YXH9X�H�|$`��$4��4�������H�$H�D$PH�CH�D$0H�P0H�z0H��H��� �,H�AH����B$�ЅB �1�1�H�|$tcH�t$�ʚ;H��H�&��H��H�F�H��H�����H@�H�H�����HB�H�\$H������F���1�H�H�\$��H��HD�L�t$L�l$HL�d$�-�H����H��u\�B$�ЅB u^�t$H��H��L���h�����ttH�|$0L��H��L���a����D$H�D$0H�P0H�z0H��H��� u�H�AH��t������J H�G0���u���e����H��������@H��$(H�$H�|$ H�C����D$��xs�D$N� u|�D$��t�T$���T$f�t�T$���T$�t�D$���D$�D$H��$8dH3%(�:H��@[]A\A]A^ËQ`�����>��T$���������>��	�����뭉��L��������_���f�l$N�>�L����+���0��������J H�G0���������?�������H�@XH��H�����������H�$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xtJ9�u;H��$(H�4$H�|$ H�F���H�D$0�H�@0H�@���H�x��;�H�<$�M뺋Q`��f�@��SH�������[�DH�߾[�U��f.���H��=EH9�3Ft���=E����=E���H���=�3F�V(��H�=�3F1�H���S�@���ff.����j=E齕��ff.�f���S1��d*��H�=�D1�H����}�H�x H���wM�H��[�f���SH�5�D�'�H��1�H��t,H�5ުD��'�H��fH�=6EffH�M�H�H�H9P(��[����ATH�5èDUSH���'�H����H�5��DH��H���'�I��fH�=�5EffH�L�H�H�@(I9$t~H�����B=��I������H��H��L!�H	�H��L�H����tI��L!�H��H	�H�{ H��t[]A\�fDH���e�H���u[1�]A\Ð[�]A\�H��3EH�5iH�81��n�H��3EH�5PiH�81��n�fD��SH�5��DH���&�H��tH���?e�H�[����H�H�Ѓ��H��0EH��H�5)iH�81��m���SH�5d�DH���L&�H��t$H�C H����d�H�[����H�H�Ѓ��H��0EH��H�5�hH�81��Xm����ATI��UH��SH�����L��H��H��I��[E1�]1�A\鐤����AVI��AUATI��UH��SH���s��L��I���?�M��L��H��H��E1�[H��]A\A]A^�I���f���ATI��UH��SH���*��L��H��H��I��[A�]1�A\�
���ff.�f���I��A�H��1����f���AVI��AUATI��UH��SH������L��I���X>�M��L��H��H��A�[H��]A\A]A^閣��fD��SfH�=3EffH�I�H�H�X0H�C H����ta�H�� [�ga����AVAUATUSfH�=�2EffH�I��H�=DgH�L�`0�,O�H����o��	H�=*gH��0F�O�H����o��H�=gH��0F��N�H���o�H��4E�����H��F��H�5�
H��0FH�;�KA�H�;�����H�,q��H�5���0A�H�;�����H�q��H�5?��A�H�;1�H�ɧ��H�5���@�H�;1�H�A���H�5��
��@�H�;1�H�9�H�5jf��@�H�;�H��Z��H�5��
�@�H�;1�H�VZ��H�5��@�H�;1�H���H�5$f�@�H�;1�H��0��H�5���j@�H�;1�H����H�5�e�R@�H�;�H����H�5�e�7@�H�;1�H����H�5�e�@�H�;�H�  ��H�5�e�@�H�;1�H�X ��H�5�e��?�H�;�H�} ��H�5�e��?�H�;�H�Ұ��H�5�e�?�H�;�����H�7@��H�5�e�?�H�;�����H�?��H�5�e�:�H�;�����H�1n��H�5�
��9�H�;�����H�F���H�5q]��9�H�;�����H��4��H�5�y
�9�H�;1�H�S/��H�5��9�H�-�1EH�;1�H�5�
H���|9�H�;1�H��H�5$e�h9�H�;1�H��H�5O��T9�H��/EH�;1�H�5��<9�H��-EH�;1�H�5�d�$9�H�;�H�����H�5*y
�	9�H�;�H���H�5{
��8�H�;�����H�6��H�5�z
��8�H�;�H�3��H�5D�8�H�;1�H��2��H�5���8�H�;1�H��'��H�5{Q�8�H�;�H�IA��H�5:d�m8�H�;1�H�:��H�5�J�U8�H�;�H��G��H�5d�:8�H�;�H�kE��H�5
d�8�H�;1�H�G��H�5d�8�H�;�H��1��H�5�c��7�H�;1�H�'��H�5��
��7�H�;1�H��&��H�5�c�7�H�;1�H�p&��H�5�b�7�H�;�H�&��H�5�b�7�H�;1�H��%��H�5�b�q7�H�;�H�r%��H�5�b�V7�H�;1�H��$��H�5���>7�H�;�����H��0��H�5�
�#7�H�;�����H��0��H�5��
�7�H�;1�H��$��H�5���6�H�;�H�/��H�5�b��6�H�;1�H�Y$��H�5�b�6�H�;1�H��?��H�5�x
�6�H�;H��x
H�5+
�/[��H�=�k����H��H��.EH�0��sL�-�1EH�=�bI�u�7�H�5� ��H��H���~d�1�H��@��H��H�5��&6�1�H��%��H��H�5Xb�6�1�H��%��H��H�5Hb�5�H��H��C��H�5����5�H�=+b�V�H��t 1�1�H����M������H�H�H9�w��2EM�t$H���-�H��H�5bI���H��I��$��u�H�-.EH�=�aH�0�6�H��'E1�H��'�1�A��$��I��$�'�I��$���I�mH�=�a�ph�H�;H��H���B5��H�5[��H��H��'F�<c�H�=}'F1�H����H�5�
��4�H�9'E1�H�=X'FH�5�\��4�H��,E1�H�=<'FH�54a�4�H��*E1�H�= 'FH�5�b�4�H�]-E1�H�='FH�5�[�p4�H�=�&F�����H�M��H�5�*�Q4�H�=�&F1�H�����H�5�`�54�H�=�&F1�H�u ��H�5��4�I�mH�=�`�Yg�H�;H��H���+4��H�5D��H��H�j&F�%b�H�.&EH�=s`H�0�5�H�=H&F�����H��2��H�5��
H�&F�3�H�="&FH�5�u
�o�H�=&F1�H�6'��H�5#�
�z3�H�=�%F1�H��L��H�56*�^3�H�=�%F1�H�>��H�5�_�B3�H�=�%F�H�OK��H�58`�#3�H�=�%F1�H�3$��H�5�u
�3�H�=�%F1�H��&��H�5v
��2�H�=d%F1�H��$��H�5O��2�H�=H%F1�H� ��H�5e_�2�H�=,%F1�H��"��H�5lv
�2�H�=%FH��_H�5;_�W�H�=�$FH�_H�5�t
�W�H�=�$FH��H�5X�
��V�H�-�$FH�=�^�e�H�;H��H���X2��H�51��H��H��$F�R`�H�=�$F�H�?9��H�5&�
��1�H�=d$F1�H��J��H�5�(��1�H�=H$F1�H�7#��H�5@��1�H�=,$F�H�xK��H�5i^�1�H�=
$F1�H�|"��H�5t
�1�H�=�#F1�H�J��H�5�t
�d1�H�=�#F1�H�#��H�5��H1�H�=�#F1�H�(��H�5�]�,1�H�=�#FH���H�5!�
�U�I�mH�=�]�Rd�H�;H��H���$1��H�5���H��H�S#F�_�H�=^'�"d�H�=;#F1�H�� ��H�5��
H�#F�0�H�=#FH�5�r
�l�H�=#F1�H�<$��H�5)�
�0�H�=�"F�����H��,��H�5pY�a0�H�=�"F1�H��H��H�5'Y�E0�H�=�"F1�H��H��H�5!Y�)0�[H�=]]A\A]A^��D��H��H�=	"E�\=�H����H�����f���H�1�H9�tf�H�H��(H9�u���ff.�@��AWAVAUATUH��SH��H��H�GH���������t4�����1����H�XH����H�C�����u�H�x1��!R�I��H����H����T�I�T$HcJ`L�l	HcJdL�t	HcJhHcRlL�|	L�dH��u'�H��tUH�EL�mL�uL�}L�e �?D�u�H���H��uоH���V�H��t�uH���H��t�fD1�H��H��[]A\A]A^A_�@��u�H�xL�g�7T�IcT$`L�lIcT$dL�tIcT$hL�|IcT$lL�dH���N����i����H�XH�C������UH��SH��fH�={$EffH�s;�H�H�x�G}1�H���M-�H��tHH��H��H���$��tFH�@H�H��H9�t H�TH��H��H��[]�'�f.�H��[]�f����f���H�}/FH�H����f.���H����Z�H�����uH���fD1�H�5G9��H��H����4�ff.�AWAVAUATI��UH��SH��L�oL�w H�<*EI�~(M�� M�n I���L��ADž�L�L$��Q�I��XADžhI��`I��XfH�=#EffH�:�H�L�x0H��.FH�I�G(�@hH���ǃ���������bQ�H����VG�H��h�JG�H����>G�H��L�L$M;�HH�� H��H��@H��HH��@H��0H��8H��0AƅQ�dL��L���h��I�_(H��t��1��u;��CH�)EH�=4 FH�)EH��(E�P�I�FI�NH�L$L��P���H9�tF�M��I��I9�tDL��H��A��M�?I9�u�I���L��P���H;D$u�I���H��L��I���I���I���I���I���H�D$I�FI�FI��PI��XI��P�O���kI�����O�H�� ��O�H��hH��pH��hH�EI���ǀ�����'EH��[]A\A]A^A_�!���E1�1�L��H��L���~O�����f���SfH�=� EffH�7�H�H�X0H���P�H��H�5^J���	���H��Hǃx��/�[�p0���H��fH�=p EffH�h7�H�5J��H�H�x0H��������H��+FH����ff.���H��+FH�H���H�����ff.�f���U���SH�=�)��H��H�q+FH���H���d���u��u*H��[]����H�=
;����c���t�H��H���[H�=��]�c����SH�=d)�����H��*FH����u�u [�DH�=�:����H����t�H�=����[��f.���H������N7�H��*FH�Hǀ�H���@��ATA���US��'�H��H�Y*FH���@��uBH����H�H���+���uhH���~�H�@H����H��[]A\�fDE����Ic��'�I��H���D�L� M��t�A��u�L��H���:�H����
���t���D'�H����/�H��I���)�H����L� M��tA��uL��H���`:�H���x
�1����H��I�����L�`M��u]H���U
�H����H�hH���*���@��� ���H��H���:�H���#
�H��[]A\�1��q�I������f�A��u�L��H����9��ff.�f���AUI��ATI��USH���Y�H��fH�=,EffH�$4�H��FH��H�H�h0H��!EH�0�t �H���K�H��H���mg��L��L��H�%���v�H�U0H�ËB$�ЅB uH��H��[]A\A]��H�z0H�G0���u�1������fD��ATD�%�FUSE��ulH�
(FH��x��H��dF��FH�(H��tH��H��H9�t��D��F��6H�H9�u�D��[]A\�fDA��cA�D$[]�aFD��A\�����A�H�����fH�=�EffH�2�H�H�@0H���0��H�h�X���H��E�H�5�ZH�81��T�H��EH�5DZH�81��T�f���H�G Hc�H���H���f���H�G Hc�H���H���f���UH��hSH��H��hH9�u� �H�H9�t�C t�H�{�O�H�H9�u�H��[]�f.���AVI��AUI��ATA��UH���(S��=�f�H�@ H��L�pL�hD�` L�� L�����H��hH��H�H��pH�CH�H��p�
��[L��]A\A]A^��!�D��AUI��ATI��UH���S��H���==�H�����H�5�o��L�(H��L�`H��[]A\A]�$���@��H��xQH�ףp=
ףH��H��H��H��?H�H��H)�H��H��H��)ǁ�l@��tPHc�H�th�p��DI�q=
ףp=
H��H��H��H��I��H��H��H��)������l@��u�I��(\��(Hc�H��H��H��I��H��H��H��H��H9�tHc�H��g�p�Ã��g�����LcO�WI���wL������AkR<H�Aiz�K��A:I��Hc�H��I�Q�H�H��H��H��y�DL)�H�QHH�H��H��L��H�H��xjH�ףp=
ףH��H��H�H��?H��H)�L��H)�H��+xtH�ףp=
ףH��H��H�H��?H��H)�H�H��k|����Hi��QH�H��H�ףp=
ףL��H��H��H��H�H��?H��H)�H�V�L��H)�H��+y�H�����H�ףp=
ףL)�H��H��H�H��?H��H)�H�V��y���PXH�5_WH��H�,EH��H�81���P�ff.�@H��dH�%(H�D$1�@��t@��u@H�4$H�����z?�H���������H�T$dH3%(uH���f�1�H9������F����H��H��D�0�3�H�H �@uH�H �Q-H�H�A �⇃��Q-H������SH��H�?@��t/H�{�fK�H�{�]K�H�{�TK�H�{ [�JK�f.��;K���f�UH��SH��H���oD$ �oL$0H�D$@H�t$ CKH�C(H��t@��tgH�sH��t@��tHH�sH��t@��t)H�s H��t@��t
H��[]�H��H��[]�2�f�H���2���fDH���x2��fD�k2��f�PXH���5c�H�5�UH��H��EH�81���N�f.�H��H�t$H��u2H��EH�8H�L$A��H�5!F��H����@��u
H���@H��t2H��t<@��u@��tHH�EH�8�@H��EH�8�@H�YEH�8�@H�EH�8�q���f�H��EH�8�Y������H�wH�?�0����=a]Ft�BQ�f�H���M]FH�t$H�<$�'�H�t$H�<$H���Q�DSH�����H����H�p(A�����H��y	H��A�H���������H��I��I��H��I��?H�2H��L)�H��H��H)�H��I)�H��H��H��H��?E��H�<
H�|�j�Y�HH��H)�H��H��H)�H��H)�H��H��A��H��
L)�A��E��tD�vA��;�<A��<��D���tK�u��;���<���K����S�������{���s�S��lHc�H��H��?H1�H)�������lt~�CH�=�aHcK��H���9��~���s�C�C�H�Ⱥ�$I�������)�)�)��K�C H��VH�C(H�C0H��[�D�S����H�C�{�C딐�C���S����H��KH�C�A���kHcɉCH��H��?H1�H)��l���?�C�C�H�?���fDA��<��D�����������f���<���K���+������f.��S�H���t���K�S�f.��CH�=�`��lHc�H��H��?H1�H)�@�����C���CH���K�C�K���@���C�S�s�v����K����D������I��(\��(H��H��H��I��H��H��H��H��H9�����m�l����CH�=�_���H��(\��(H��H��H��H��H��H��H�4��mH��H9��������H�����m�w���H��(\��(H��H��H��H��H�=m_H��H��H��H��H9�������H�Z_HE��������H����5���AUATU��SH��H��8dH�%(H�D$(1�H��������L�-%RH����H�؃�H����H�������H���H�����Kf�҅�t
f/���f(�H�|$�T$�$�QQ��T$�$f/��Y�����X��
�,��D$Hc�H���ɚ;~�Xfo
H��ʚ;�D$�H,�f���H*�f.�zt.H�,Ef(�H�5PQH�8��H�@H��.1�H�L$(dH3%(H����H��8[]A\A]�H�L$��H��H�D$�x�H��$��H���&%�I��H����1�H����@�L��H��H�D$��@�I���tjH�H��y	����H�L$ ��*L��H�D$ �5w�6����H�H���1���fDL�-�
H���%���H�1�����fDH���P=�H���H��
����H���6=�H��H������������H��EH�5CNH�81��IG�f���
�\��D$�,�Hc�H���M����\�m
�ʚ;H)�H���D$�/���H���<�H���c���H��H9�t)H��H��H��?H)�H	�H��H�$�~$�r���fDf��f���q����=�H����Z�L��H�5POH��H��	EH�81��F�AUATI��UH��SH��H��HdH�%(H�D$81�H���U���H����H�D$(I�$L�d$0M����A�$L��������H�����ty��v�I��M)���I��'�L��L��H����B�H�����fo$foL$H�EfoT$ H�D$0)H�C0H��)K)S H�L$8dH3%(uWH��H[]A\A]�@I��M)���L��J�4(�1R����H�=CN������f�E1���E1��J����;�ff.���H��H�|$H�|$�!�H�D$H���ff.�@ATUSH��H)�H��~F���0��	w;�G��0��	w/H��t�G��0��	vH�GH��[]���GA\��P��H��H��H�=�M1��I�I���E�<-tB<:t>H����SL��M�H�M�H�5��1���8�H��EL��H�8�1�H��� ���H�5[ML��1��8���F9Gu�F9Gt�����D��D�F9Gu�F9Gu�F9Gu�1��9u���ff.�AWAVAUATA��USH��H��XH�$dH�%(H��$H1�H��H�D$8H���=SFH�D$@�G �D$u��RF���fofoKfoS H�C0HcK)D$P)L$`)T$pH��$����q���H�<;�D$`H�D$PH�H�D$XH�|$PH��$���L�l$0H��I��H�D$0L��E�����7���H����H��H�����L�\$0��tj���I���QL�\$8H�D$0I9��H9D$@�
H��L��E�������H���`H��H���E���L�\$0�����H�$L�1�H��$HdH3%(�q
H��X[]A\A]A^A_�fD�|$\�����D$d��lHc�H��H��?H1�H)�H��W@���	�9���D$\H�<;H�D$P�D$X���D���H��t/H��H���{���L�\$0��������L�\$8�E���gH�|$8H����H��H���gH��H���3��������-�o9H�|$@H��)�$��oY)�$��oa )�$�H�A0H��$�E���r�]�H��H����H��H���������>L�\$@�{�o)A�)�$��oi)�$��oy )�$�H�A0H�L$8H��$H��$�H�D$(H��$�H�D$ @H�qL9���E���A����A���>H�D$0H9���I9���H��L��E�����I��M��� L��H�����H�L$0�����	�AoL�\$@H�qH�L$8)�$��Ao`)�$��Aoh )�$�I�@0H��$�L9��B���Hc{�sH�L$�SI������$�H�L$A��D��A�A�)�A����A��i�m����y�DD)ȉ@I���Љ�E��A���%D�����QA����D)�A��E��A��+��D�к��QA������D)�A���G�A��A����yA�DD��)�D�PDI�A��A��A�����QA���[D��A������D)�A��A��A��+�D����QA����D)��+�$��SB�&+�$��s�i�+�$�D)�k�<D�D)�Hc�D�Hc�)�H�;i��QHы�$�H�H���<�D�)�H�H�H�$H�1�����f�H�|$8H���c�H��H�������H�(G�����H���c���H��H�����L�\$0�������D$����L�d$HI�� H��L��L�\$H��H��H���.�p����*�{L�\$0D�FD����D������)R��A)�D9���)��+i�‹A+Ck�<�H�T$HH�H)�H��H�T$H�Q9StH�QH�D$HL9������H��L���&�H����H��H������L�\$0�������H�D$HL9�LN�H�$L����DH��D$`H�D$PH�D$X���H��E�M���@��H�����H�H�D$PH�D$X�Y���L�\$0����fDH��H��?H�H�H��L��H��?L�H�H�H9�{H�t$0A�H��L��E������,�I�����@�Ao0H�L$@I��H�L$8)�$��Aox)�$��Aop )�$�I�@0H��$�A���f�L9�}3H�D$0A��d���I������L�\$@L�\$8H�D$0����DI��A�L�\$0�-���@H�|$ H�L$H�t$�<�H�t$H�L$K�H)�L9�H��uI�C�H�D$0A������L�\$8L�\$0E��������D$���C���L�d$HI�� H��L��L�\$H��H��H���q����{�p����*L�\$0D�GD����D������)R��A)�A9��S)��+i�‹A+Ck�<�H�T$HH�H)�H��H�T$H�Q9StH-�QH�D$HL9�����H��L���i�H�����H��H������L�\$0������H�D$HL9�LO�H�$L�����H�|$(H�L$H�t$���H�L$H�t$I�H)�H9�H����H�T$0E1����f��D$X������G�D$T������;��H�<;H�D$P���fDH�H9�,����/����H�<;�D$XH�D$P�R���@L�\$0�@���fDH�H9���������H�t$0H��E1�����H�D$P�D$X����f.�L�\$@�v���fDI�������I��(\��(H��H��H��I��H��H��L��H�FNI��L9�������H�?NHE����fD�������Q)������)׃�����D��A����A)�E�N�����A�������QE)�D��A����A)�A���%���f.�E�˺��QA��D��A����A)�A������DH�D$P���D$P��x��<����D$P<����D$P���J.�f.�H�I��L�H9�}H��x5L�H��fDH��H��������H�I��H)�L9�|:H��I���fDH��H��H�I��H��H��H)�L9�L��I�L)��PH��DH�5�?H�81��C7�UH��dH�%(H�D$1�@��tM@��u_@��uH���H��
t=H�4$H���*��%�H�T$dH3%(��H��]�DH��t�벐�KB���f�H��H�E1�I�@H�H��H��I�H��H��������I�L9ȸL�rH��H�D	�f�H���8h��l�����,�ff.�AUATI��UH��SH��dH�%(H�D$1�@��t@��udH�4$H����$�H��I�����H��H��tm1�H���.��H��I�$�.�H�EH�D$dH3%(u9H��[]A\A]�H��H�H�H�H��H��yH�H��H�DI�$H�DH�E��+�L����I�H�5�<H��H�t�DH�81��j5�f.�H��dH�%(H�D$1�@��tF@��u`@��uH���H��
t>H�4$H���+�$�H�T$dH3%(uOH���H��t��f�����f�H�H�H�@H�H�xH�D?멐�K0���$+�@H��t@��t�@��ff.�SH��H���3�H�P �@uH�P �b-�H���uH��H��H�D$���H�D$H��[�ff.�SH�5�pDH�������P-��8��t[�H���ZH�H�5T=H��H�	�DH�81��3�ff.�@��H�������@-��8<�HE�H������S�v���H��H�\�DH�8�T�H�P �@uH�P �o�oKJ�oS R [�ff.���USH��H������H�5pDH��H������uH��1�[]��H����H�}H�0H��[]��ff.���H������H�8H���:��SH�5�oDH������P-��8��u[�H���
G�H�5<H��H���DH�81��2�ff.�@H��dH�%(H�D$1�@��tF@��u`@��uH���H��
t>H�4$H���-�H!�H�T$dH3%(uOH���H��t��f������f�H�H�H�@H)�H�xH�D?멐�-���d(�@@��tR@��tLI��H��H��I�H��Hp�H��I9�uH���t)L��H�H��H��L9�t0H���_^����S^��H�@H���
-�DH�DH���ff.�H���g���H��t�tH���f�H���H��u�H�xu�H�@�����H��������5wH�8����H��t�t�H��H���,7�@H���H��u�H����UH��SH��H��dH�%(H�D$1���t/@��t.H9�|}����H�T$dH3%(unH��[]��H��t��t.H��H����H�,$�M�H��H��H���_���DH���H��
u�H��H����H����뉸������&�ff.�ATI��UH��S�G$�V$�_"��?��?f��)��V"��?f����?)��V"H�6k�<������_"H�?����)�i��������t|A�D$!�U!1ƒ�t+�U!������8��%]�����QHc�H�D[]A\�A�D$ �U 1��t�U ��
����
��8��%]�����QHc�H�D[]A\�f�H�uI�<$�S�����%]�����QHc�H�D[]A\����ATUH��SH�����H�5�kDH��I������t7H�����I�<$H�0�����t����H������[H��]A\�@H��H��[]A\�Qi���SH��]��H�������~��H�������yH��[�H���DH�5�7H�81��J.�f.�S�G!������<��H���G ����W"�����<���G"��|f����?��`t_��;���S$�<��?9���H�{�����x=H�{��5w�����y+H�{H��u[�f�[�
���f.���uQ�S$��?�H��DH�5Q7H�81��k-�H���DH�5�6H�81��S-�H���DH�5�6H�81��;-�H���DH�5�6H�81��#-�H�l�DH�5�6H�81��-�H�T�DH�5�6H�81���,�SH��H���m(���5wH�����H��H��������x;H���������=(��H���@�����5wH���S���H��H�����1҅��‰�[�ff.�f�PXH�5X6H��H���DH�81��R,�f�H��t@��t�	�H���H��u��
�u9�DH��@��t>H��H�H��x=t!�
����H��H���^*�fD�H���fD�!�H���H��DH�5�5H�81��+�fDH��t@��tH�(kn�6���fDH���H��u�H����5w����H��H���Z�f.���H������H�8���H��H���/�ff.�@UH��SH��H����H������H��H�������o�oKH�oS P H��[]�ff.����SH��H9�t���H��[�f�UH��SH����>�H���Z��H��H9�tH��H���g���H��H��[]�ff.�f�ATUH��SH��H��H�#�EH�T$H��u*L�%x4f.��L����
�H���EH��t�H�L$H��H���R��1�H��$t	H��������C-҃�	ЈC-H��[]A\�f.�1�H��t@��u
�H��u��@��t
�f�H�1���H��
t�1�H������H��H��t7@��t@��t+��H��ÐH���H��u��
�6�H�����k�H���fDAWAVAUATUH��SH��H����um�2��I��H��t\L�pM��~SL�hL�%�6�
H��H��t6��I��u�L��I� tI�wI�<���@����ũ���L��H���%����Ń�9�uH����[]A\A]A^A_��6���fDUSH��H��ue1�1ҾQ
H�����H��H��$����H���J+���t^@��u]H��tS@��uMH�E��H��
tEH��u:H��H��[]�T���@@��u:H�������w�H�U5Hc�H�>���H��H��[]�f�H��t�H�G�H����E���@���;���H��H��H��[]�H��H��[]��f�AUATI��USH�����H��thH��L�`H� tL�`H�߽�w&��xtH��H��[]A\A]�H�����A�Ņ�u�H�{	�H�CH��4Hc�H�>��L�����H��H��u�L������A�|$:�u�A�|$:u�I�T$I�D$��I�T$I�D$H����
��yЃ�	�P����R�zЃ�	����5�x��D��J����rЃ�	�����@�pЃ�	�I��5�@���Pk�<E��@���A�$��Bը�����A�D$�HЃ�	����A�L$�qЃ�	��������Ai�A�A�����-u���$��������D)�H�H�l�u���fDA�|$:�I�D$�Y���H���$����]���@I�D$�琺L��$H�==0������0�������f.�A�$<Zto�P���v_�P���vO�P��������иM)�i�H�H�l����f.�H���[H��]A\A]�D��A����@��$���ff.�H��dH�%(H�D$1�@��tH��H��Ic�H����uRH��u-H�4$H���%��H�T$dH3%(uoH���f�@��u�H���H��
u�������H��H�H9�uH���t�H��H�H��H��~H��H��?Hф�HD�H�D	�@H��������SH��������G �����"�\����� �@���
������
%���	Љ‰C f��tf��f%�f��	�f�C �s$��f%�f=�t3��f�������Ⱥ%I�$f��?����)�����у���	�f�K$[�fDH�?�!�k�����SH�H��H���K H��?H1lj�H)ǁ��@���#�������
H�=�8��D���s!������ƒ�H��D9����C ����%�����
	��ȉK f%����s$��f%�f=��H�����f�����������%����
��G H�?���H�f�C ������!H���z������H�H��H��H��?H1�H)Ǹm@���-f%����C f%�	�f�C �t������f���f%�	�f�K �=���f�H����H������T����	�S!�C %����� �‰C f���������f%�f��	�f�C ����H�?�!������H�H��H��H�
7H��?H1�H)�@�����S!�Ѓ�������4����	�H��S!�����
�‹C �`���f.�H�;����H��C %��
"�C �?���I��(\��(H��H��H��I��H��H��H��H��H9������t���
H�=66��D�����f.�H���h�H������H���X�H���4���H��(\��(H��H��H��H��H�
�5H��H��H��H��H9������H��5HE����������������
H�=�5H��5��H��D��HE�����H��(\��(H��H��H��H��H��H��H���nH��H9��������H�����fn���f.���H��dH�%(H�D$1��c�H�8@��tZH����&�.H��H��?H�H��H��H��H)�Hi�ʚ;H)�H��?H)�H�D�uCH���H��u7H�xu0H�@�*fDH��u;H����
H�$�5w��H��u�H�t$dH34%(u*H����@��u�H���H��
u���5w�.���M�ff.�f�H���g�H��t�tH���f�H���H��u�H�xu�H�@H���@H���G�H��t�tH���f�H���H��u�H�xu�H�@H���@H�����H��t�tH���f�H���H��u�H�xu�H�@H���@H���g�H��t�tH���f�H���H��u�H�xu�H�@H���@H����5w���H��t�t	H���@H���H��u�H�xu�H�@H���@H����5w���H��t�t	H���@H���H��u�H�xu�H�@H���@��H����H�8���H��H����ff.�@��H�����H�8�{�����5wH��H����f.�H�@H�x)H�D?H��u�fD�u�H���H��t8��H���?�H��t�uH���H��uH�xtH���fDH�xu�H�@�@H�@��f�USH��H���r�����5wH������H��H��t%H�@H�xH��H�tH��[]�[���H��[]ÐH����H��H��[H��]�7����UH��SH��H��(dH�%(H�D$1�H�L$H�T$��H�D$H��t�t?�H�H�D$H��t�tG�H�EH�D$dH3%(uEH��([]�DH���H��u�H�xu�H�@��H���H��u�H�xu�H�@���f.�AUATUSH��H��8dH�%(H�D$(1�H�l$ L�d$H��L��f%���5w����H�D$ L��H��H�|$��H�C���H�|$ H�D$�H�|$H�D$����H�Ǩ���)���H��$I�H�|$�������)��C$у�f%?���	�f�K$@���d����I��D�������D���B�D���)�k�<)��C$��?��	ЈC$������4
�ų����)��C"k�<f%�)�cu��?��	�D����f�K"��B�H�T$��)�H�|$����	�H�L$�C"��H�|$�!��H�|$H�@�����*����H�;=+~=:,�������������)�)�k�diɬ�D���)Ή�+~��9,�����Ⱥs�m��������)�)�E��i��)�΁�����������,2��A��)�A)�D�Ai�m)�A��A�ELc�f%�K�t$���C f%�	�f�C �{�H�L��H�؅�LH�A���:Ic�H��,�����C!���	ЈC!H��)�H�C����
�‹C %���	ЉC H���EH�CH�D$(dH3%(�H��8[]A\A]Á�G��������@�C��t���fD�3��e���fD�#�I�����D��3����A�Ef%����C f%�	�f�C ��H�Ic�H�R*�����C!���	ЈC!H�5'�������D��3�����fDA�hD��&������H��(\��(L��H��H��H��H��H��H��H��I9��|�����������n����
�DUSH��H��(dH�%(H�D$1���tRH��H�L$H�T$��5w����H�l$H�\$@��tcH���tKH��H�H�t$dH34%(H��uOH��([]�H�������t�H�
�DH�5� H�81���@H���`�H���H���P�H�����fDAWM��AVM��AUI��ATI��UH��SH��HH�<$dH�%(H�D$81�A����H�\$ H�T$L����5wH���+���H�|$H�T$ H��H�@����H�D$ ��tgH�H�T$(H��H��I��M��$�L��L��PH�|$�*���^_H�\$8dH3%(��H��H[]A\A]A^A_�DL�������[���L������H��u"H�\$ �H�T$�>�H�T$�c���@H��L��I��M��$�H��QH�|$L������ZY�l�����ff.�@��H��(dH�%(H�D$1����H�8�{������H���n�����5wH�L$H�T$H�����H�|$���H�t$dH34%(uH��(��3�UH��SH��H��(H�|$dH�%(H�D$1�H��t@��tlH�����H����H��H�L$H�T$����H�|$H��uq��5w����H�|$H�E�������u|H�L$dH3%(uqH��([]�H���H��u�H�ߺ�
�Z!�H�EH��H�D$��@��u�H���H���y���H��n���H��e����Q��,
�H�����@AUATU��SH��H��dH�%(H��$�1�H�$H�����H!B H���EH�H�BH�BH�B��
��H�T$H�D$H�T$XH�T$ H�T$`H�T$(H�T$hH�T$0H�T$pH�T$8H�D$PH�D$HH�T$xH�T$@H��$�H��$����PH��H�D$H�D$PH�x8�@H��t
Lc�N��L���H��H9�tH�H9��H��t�H��H�H9�u�9���f�K$�H�|$L�l$L�d$ �&�H�I���y�C!�����C!I���2�C %����� �C �C!���������H�|$(1�H���g�S"��H�|$0����	ЈC"1�H���,�S"��?L�d$@��H�|$8f���	�f�C"��u
I���H�����c$�H�$H��H�CH���m�H�l$H�$H��$�dH3%(��H�Ĩ[]A\A]���H���P
�$���+���H�;�!�^���MH�H��H���H��?H1�H)�@���;�C ���
����9�����)�%�������
	ЉC �ĉƒ����T��	ЈC!����H��H���������C$��?��	ЈC$H�$����H�����	����������?���C$��	ЈC$M��t(A��u"I�$��H��uL���
��I��L����H������5wH��H��������H������H�$�o����L���x����uQ��
�‹C %���	ЉC ���f.�L��������C!���	ЈC!�u�����+�����������K�������������fDH�FH�F@����H�D$@H�~(L�n H�D$(H�FL�fH�|$H�D$0H�L�l$H�D$8����C%L�d$ ��	ЈC%�����S ������������L	����	��K!�C %����� �C ����f�1��[���H����H�����H���H��(\��(H��H��H��H��H��H��H��H9��������H���у��}������������L��胿��AW��AVI��AUATUSH��8H�?dH�%(H�D$(1����H�L$ H�T$�!H��H������H�|$ @�������I��A�v!A�V Ic�E��@���
���������A�N"A�v"A�Q���f��A�Ճ���?A��i�k�<�A�N$��?�Hc�H�l	��y�DD)ɉʍII����A��-�cD���D$���>����Q����)�A��H�|$��A��+�$�����QH��D��A����D$��D)��D�D)�H�H�|������H��I������L��H�����H��t%�u!H���H��uH�x��f.���5wH���S���H���F���5wH��H���6�H��H�����I�vH��t"@��uH���H��uH�~�}DH����H�\$(dH3%(ufH��8[]A\A]A^A_�f��k��I���2���E�����QA��D��A����A)�A�����DH�@�/����H�v��}�ff.�f�U1�SH��dH�%(H�D$x1�H�\$@H�l$�f�H��H��H�D$���H��H�����H���AHc@H��H��������H�=b�EH��H�`�EH�D$H)�H��H�����HN�H�8�E諽��H�����D$TH�|$H�D$H�D$ lH�H�DH�D$�D$P�D�����D$1���	ЈD$1�D$L����
�‹D$0%���	ЉD$0���D$H�������Ѓ�	ȈD$2�D$D��?�����D$2f%�	��T$@f�D$2�D$4��?��	ЈD$4�)���H�����H�=b�EH����H��H���w�H�Ǩ�,����1�EH�D$xdH3%(uH�Ĉ[]���������@AUATUH��SH��H��XdH�%(H�D$H1��F������H�=��E�����E����H�=��E����5wH���I�H��H��������vL�l$L�d$H���5wL��L����H�|$H�l$@���}H�H�|$L��L���»��H����HcD$$H�kH�CH���H��D$ �D�����C!���	ЈC!�D$����
�‹C %���	ЉC ���D$�������Ѓ�	��L$,�C"�D$��?�����C"f%�	��T$f�C"�C$��?��	ЈC$�D$(�������C$f%?�	ЍQ���S f�C$��f����f���	�f�S �T$0���	ЈC%H��H�L$HdH3%(urH��X[]A\A]�f�H��H���%�H�����[����V���fDHc	�E��5wH�|��H��H����H��H�����H�������H���y����v��fD��ATUSH��H��H��0dH�%(H�D$(1����H��I���~���H��H�X �@uH�X I�<$H��H�;�n���H��trH�t$H�;��H��H��H��H�H�D$H�D$ �t$(�t$(�t$(�t$(�t$(贷���C-H��0���H�C-H��H�T$(dH3%(u!H��0[]A\�H���DH�5eH�81�����f.�AUI��H��ATA��UH��SH��H���R��H����A�����H��ui��5wH���<�H�;H�����L��H���&��H��H���k���K-�P-��8���	ʈP-H�SH�PH�S H�P H��H��[]A\A]�f.��u�H���H��u�H�xu�H�@�w���H��t�t7���5wH����H�;H����L��H�����H���b���DH���H��u�H�xu�H�@�H�����ff.�@��ATI��USH�����H��H����[L��H�����]H��A\���ff.���ATI��USH���M��H��H�����[L��H��]H��A\�[���ff.���USH��H�����H�5BDH��H�������u H���DH��H��H�8H��[]����H��DH�5SH�81�����ATUSH������A���uYH�����H�8H����L��H�������H��H�����H��tFH�W�DH��H��H�8H��[]A\�|���@H�>H��t�H�T$�U��H�T$I���H��L�����H��몺1�����ff.����USH����wb���tH�>H��tH�T$���H�T$H��H������H�8H���*�H��H�����H�޹����H��H���DH�8H��[]����1��C����ATUSH���������urH���Z��H�8H����H��H������H��I�����L��H����������L��xL��H������H��H���DH��H�8H��[]A\� ���H�>H��t�H�T$���H�T$H���n����1����@��USH��H�����H�5�?DH��H�������u(H���DH��H�����H�8H��[]����H���h��H�}H�0��H������H��[H��]�v��fDAWAVA��AUATUSH��H��8H�t$H�|$�dH�%(H�D$(1��x������H�|$H�l$H�L$�H��L�|$ ����H�|$L��H��y���H�|$ @���#�f��H�|$L��H��yA�����H�|$ @����:��H�|$L��H��1A���b��H�|$ @�������H�|$I��D��A�������_��H��uSH�|$H�����5w���H�{H������H�CH���u�����-H�s��5w�_������E��t0�C$��?A��*A��;~A��<A���C$A��?��A	�D�k$E��t6�S"f����?��D�����;~��<���S"��?��f���	�f�C"��t=�K"����������F�,� �ჾH�߃�|	�@�k"�V��H�D$(dH3%(�pH��8[]A\A]A^A_�@������H���H������H������H����f���`�ჾ����H�߃�|	ȈC"��������<���!���DA��<A��������������fD������fD����H�|$I��D��A�������H���A��A��������H��H�D$��@H�t$�A������H��H�D$����f����Ⴭ�	ʈS"����f�H�{��5wA���~��H�C���DH�{��5wA�����H��H�C����]��ff.�f�USH��H��XH�7�idH�%(H�D$H1��������jH�=z�E�LH����H�ŋS�E��uH�L$HdH3%(H����H��X[]ÐH�=1�E�t���5wH������H��H���|�����$H�;@���H�H������Hc�H9���<��D$$�C!H�T$H�|$��D$0������D$ �C ��
���D$�C"�����D$�C"f����?�D$�C$��?�D$�̹��H����H�[H��t"��uH���H��uH�{��fDH�|$����5wH������H��H�����H������fD�S����fDH����H����������H�����Hc��E��5wH�|�z��H��H���/��H���h����H�[�_����R��H��H�(�DH�5�&H�81�����AWAVAUATUH��SH��H��dH�%(H��$�1�����L�l$`L�t$0H���5wL��L���p�H�|$0L�d$`H��H�@����H�L$H�|$(L��L��H�D$(輵��H���SHcD$t�t$|L�cH�|$0H���H��D$p�D�����C!���	ЈC!�D$l����
�‹C %���	ЉC ���D$h�������Ѓ�	ȈC"�D$d��?�����C"f%�	��T$`f�C"�C$��?��	ЈC$�D$x�������C$f%?�	ЍV���S f�C$��f����f���	�f�S ��$����	ЈC%H�@H���H�D?H�CH�D$H�CH��H��$�dH34%(�JH�Ĩ[]A\A]A^A_�f�H��������S���H��H����H���H�;���������OfofoK�!H�C H�;)D$0)L$@H�D$P���H�Ǩ�����I���{!�����*��@���)�����D���)�)�D����R�gfff�L��iə�������Ai�m�)�E��A�IAIɍD���Q�����D���D���A��A���A��)�E)�A�AѺ�$I�D���D���B�
��)���)�D��)�@������Hc�H��Hc�H��H)�Hc�H�DH�|$0H�D$0���H��������H�H�D$ L�d$`H�L$H���EH�T$H�|$ L��H�D$�Ʋ��H����H�D$D��$�H�D$H�D$L�l��5wL�����H��H���9��H��H����H��tI�S%D��L�k�����	ЈC%H�D$H�CH���������p���fD�+��I���8���1����f�H�=H�E�*H�#�EH�D$H�'�ED�%�EL�l�M���fD�L�|$L�t$H�=�L�l$`舧��L�d$ L��L��H�D$L��L��H�ƛF����H�D$ 螱��H���H�D$D��$�L�lH�D$H�D$����@Mc�L��H��?I1�I)�A���!���H��(\��(L��H��H��H��H��H��H��H��I9���Hc�H��Hc�H�D���fDH���@����������<���fD1���
�H�L$(L��H���EH�=��EH��E述����$�H�|$(�ͼE���H��H�D$(���H�D$(H���E����f.�L��L��L��L��H�D$ �f���H������E1�A����������������,��ff.����USH��8dH�%(H�D$(1��G��������H��H��D�H����H��H�k ����CuH�k �U-H�E��ǃ��U-�tFH��H��H��t$(�t$(�t$(�t$(�t$(�s���H��0H��H�L$(dH3%(u(H��8[]�DH��H���E���뭺��d���O��ff.�@ATI��USH��H�����H����H��t��t
H���b��f�H�H��H�Ѓ�H��t��u�H��tCH���;����P-H�@ H�h�⇃��P-H��t@��uH��H�����H��[]A\�@��t�H������L���)���f���UH��SH��8dH�%(H�D$(1����H���@-�ƒ�8��uu�@uTH�"�EH�;H��H�D$��H����H��H��H��t$(�t$(�t$(�t$(�t$(����C-H��0���H�C-H�L$(dH3%(H��uUH��8[]�H��uH���+��@��u�H�UH�Ѓ�H��t��u�H���Z������Q���H������D������H�q�DH�5V�H�81������H���C��H��H���������UH��SH��8dH�%(H�D$(1�H��H����H�����H��H���%���H�����H�L$(dH3%(uH��8[]�����AVAUATUSH��H��H�?dH�%(H��$�1�@���H������H�����H9��&H��l��$��C!�����H�|$p�������$��C ��
���D$|�C"�����D$x�C"f����?�D$t�C$��?�D$p�C%���������E�1���$�H�T$�Ϯ��H����H�[H����H�|$�����5wH�����H��H�����H��H��$�dH3%(H����H�İ[]A\A]A^�f.���覿��H�����H��H���a������f�H��L�d$�3�L��H��H���E���H���H�t$H�;�/������g�C!�T$11ƒ����C �T$01���^�C"�T$21ƒ�|��C"�T$21�f�€�T�C$�T$41ƒ�?�`�T$4��?��?8���D��5w��L�l$@����H��H���y��L��H��I���{�H���UL��H������H��t���f.���5wH���s��H��H���(��L��H��H������H��t
���D��5wH���;��L��H������H��H��I�������&���L��H�����H�����C"2D$2�|�f�C"f3D$2f���S�C$2D$4�?�CL��L����H���r�C"2D$b�|������C"f3D$bf��������C$2D$d�?�����H�t$PH�|$ �C%�x�3�����IH��t�����T$1������8��q���foD$foL$ ��5w��H�D$0)D$@)L$PH�D$`���H��H�����L��H��I�����H����I��L��L�l$@�F����H���H���P���H�x�E���H�@�<���@H���H���`���H�x�U���H�@�L���@L������H������3���������H����/�Z����$����fD���&���H���H������H�{����H�[�����T$2��������8�������"���f.�H�t$H�;製�����������fD�T$0��
����
��8��o��������T$2f����?f����?8��L������H�{H�t$�R�����t^��5w��Q�o��H��H������L��H��H���&�H���u���H�&�DH�5%�H�81�����D��������fDH�{H�t$�Ҽ�����2������D軼����II��������ff.�AVAUATUH��SH��0dH�%(H�D$(1�����H���@-�ƒ�8�����@��L�cI��H�;L�����H����L��L��L�k ��H��H��H��t$(�t$(�t$(�t$(�t$(�-���L�k H��0M��tA��tZ�C-L�c���P�C-M��tA��t.fDH�L$(dH3%(H����H��0[]A\A]A^�@L��H��������L��H�������H��uH�����@��u�H�UH�Ѓ�H��t��u�H��tA����@��t�H�������C-��8<u�����H�L�DH�51�H�81������V��fDATUH��SH��H��@H�t$dH�%(H�D$81��F�#H�� H�;H�L$ H�T$��5w���H�t$H�=d�E��H�5�EH��H�L$�H�D$虯�H��1�H��$��H�5(DH�|$(���H�|$(����L�g �G���	���I�<$�P��H�T$(H�T$0H�T$(H�|$H��H�D$ ����H��I���d����c-�H�|$ ��5wL�cH�k �I��H�sH�D$ H��tH��t
@���H������H�D$ H�|$H��uH�����H�T$H��H������H�D$H�D$0H�D$�H�L$8dH3%(��H��@[]A\�fDH��tk@��ueH���H��	uY�1
�o��H�|$(H�����H���:��H��tP������H���H�����H�x���H�@����f�1�1Ҿ1
����H������H��u�1����fDH���H����H�~���H�v����@H�^ �����L�g �I�������f�AWL�~ AVAUATUSH��H��hH�t$dH�%(H�D$X1��FuL�~ I�?L�l$0L�d$(��5wL��L�����H�D$(H�t$H�=�EH�l$0H�$��H�5��EH�L$ H�ߺH�D$ ���H��$�H�L$I�WH��H�D$(H�5�%DH�T$H�L$聼�����H�|$(L�o �G��L����H��A�u(L��A�u A�uA�uA�uH�|$8蹘��I�}H��0���I��A�E-��8<�iL�d$0H�D$(I�oH��t
@���TI����A�O-@H�4$L�����H��H���w���A�g-�L��H��I�oH�T$ I�_ �j���H�D$H�D$0H�D$�H�\$XdH3%(��H��h[]A\A]A^A_�L�t$(M���H�5�E1�1�L�����H���7���H�5�E1�1�I�GH�|$(�^��H������1Ƀ��A�G)���	�1�A�G)H�|$(H�5��E�-��H��蕽������9��
1ɉ�A�G(%���	�1�A�G(H�|$(H�5f�E����H���Y����������A�G*1Ƀ�	�1�A�G*H�|$(H�5!�E���H���������������A�G*1��f%�	�1�fA�G*H�5�EH�|$(�w��L��H�����1ɉ�A�G,��?��	�1�A�G,H�5��EH�|$(�D��I�G�1
H�������1ɍA�G-��	�1�A�G-H�|$(���H���7��I��H�����������H���H�������I�~�����M�v����H�|$H���+�����fD1����f�L�o �����A��tzA������AoG��5wL��)D$0�AoO)L$@I�G(H�D$P����L��H�����H���dH��L���t$X�t$X�t$X�t$X�t$XH�|$8�{���H��0���f�I���H��	ttA��tH���t���I�~�i���M�v�`���H��
�V����?����I�wH�������H��t@��uH���H��uH�~uH�vL������I���W���H�=�E����H�|$(H���w��H���/���H�=�EI�G���H�|$(H���R��H���
������A�G)���	�A�G)H�=��E�z��H�|$(H�����H��腺������)��
��A�G(%���	�A�G(H�=_�E�:��H�|$(H���ݝ�H���E����������A�G*��	�A�G*H�=�E���H�|$(H��蜝�H���������������A�G*��f%�	�fA�G*H�=ͩE���H�|$(H���[��L��H�������A�G,��?��	�A�G,H�=��E���H�|$(H���$��I�G�1
H��������A�G-��	�A�G-�H��H�|$(H����������a���|���H�5�DH�5�H�81�����@UH��SH��8dH�%(H�D$(1��r���H���@-�8���@uXH�K H��裸����ugH�;H�����H����H��H��H��t$(�t$(�t$(�t$(�t$(訒���C-H��0���@�C-H�T$(dH3%(H��uqH��8[]�DH�������t���f.�H��t@��t
H�����DH�UH�Ѓ�H��t��u�H���:������1���H��註��$����.��H��DH�5��H�81����fD�F-��8<t<t	���@���[�ff.���UH��SH�������P-�у�8��t(��@H��tH�CH��[]�DH��H�������H���[]�ff.����AWAVAUATUSH��dH�%(H��$�1�����H��I��蔬��H�t$@H�8I�����H�l$@I��A����H�H��k�JH��-+�A���?�kH�D$H�|$HH�L$ H�T$(��!���H�L$(H�t$ H��S㥛� H��H��?H�H��H��H��H)�Hi��H�T$H)�H�|�ͪ�����T$bH�L$I��A�D$-H�|$��8<��HE��D$df����?H��H��%�H	‹D$`H	��L$b���T$t��%���H	��L$a�������
Hc�H	�I	�I	�D�|$pH����1��3��I��H����H�D$pH�t$xL��H�D$�0����s��1�H�I�4H�D$�Ӱ�H��H�HH� tH�HH�T$H�t$H���M��H�t$E1�L��H�|$A�"�H��*��L��H������L���Ҭ�H��u5H�5��EM��t
A����L��H�����H�5��E�H���ؖ�H����H�gfffffffH��I��H��H��I��?H��H��L)�H��H�H)�H��H��H��H��H�|$nH��?@�t$oH��H)�H��H�ףp=
ףH�H)�H��H��H�H��L)�H��	�@��@�ƈL$n@��H��蝯�H�5��EH��H���+��A�D$-��8<tLL��膵��H�L$8H�T$0H��H��茧��H�|$8�譫�H����H�5��EH��H���ҕ�M�D$ L��赳�����
H�5V�EL��H��諕�H��H��$�dH3%(��H�Ę[]A\A]A^A_��H��k��H�l@�lH)�H9��H�D?E1��lH�D$���f�I�E��H���(���I�UH�����I�UH�5��EH������#���H�|$p��I��H������H�����tdH�|$@��A���?�k芩�H�D$����1�1Ҿ1�r��I������f.�H�D$L������I�������H�t$@���l�,��H�D$���f�H�|$0�F��H���Z���fD���E1��lH�D$�w����1��u��H��lH��H��cH�L$@HE�H� �DH�5	�H�81�����*��f.���UH��SH���^���H���@-�@t#��<t-<H�H��H��[]���f.�H��H�������C-��H��DH�5��H�81��G�����UH��SH�����H��@-@tH�CH��[]�f.�H��H���e���H�CH��[]�f.���UH��SH��螦��H��@-@t�C)H��[]��H���H��H����������UH��SH���^���H��@-@t�C(H��[]��
��H�D�H��H����������UH��SH������H��@-@t�C*H��[]����H�D��H��H�������ff.���UH��SH���Υ��H��@-@t�C*H��[]f����?H�D�fDH��H���=�����ff.���UH��SH���~���H��@-@t�C,H��[]��?H�D�f�H��H���������AWAVAUATUSH��(����H����H����H�H���HI�����H�\$L�tH�����I��@-@��M�EA����I�I��'��H=N�M�I���I��H=NH�H���H��L�1��L$L�D$���L�D$�L$H� I��L�ptL�pL��H���L��1��Ē�Hc�L��-A�U)�����L�w���������0�WA�u)�G-@�����������)փ�0@�wA�U(��
��������0�WA�u(�GT��
���������)ƃ�0@�wA�U*����������0�WA�u*�G	:@�����������)ƃ�0@�wA�U*f����?������0�W
A�u*�G:f����?�������)ƃ�0@�wA�U,��?������0�W
A�u,��?�������)ƃ�0@�wH��t~M�EL�w�G.H��	��	M�ĉ�)�I�A���6��t-f���N�
�L$�*�蹻�L��L$�H,�H�H��I��L��H�sM��1�H�<��
��Hc�I�A�E-��8<u;A�ZI�vI�GI� tI�GH)�L���G��H��(L��[]A\A]A^A_�DH���(�����H�H��H�����+H�7c\"�A:A�H��I��H��I��?H��H�gfffffffA�F:H��
L)ƒ�0A�VH�|�j�Y�HH��H��
H��L)�H��H��H��H��?H��H)�H��H�H)�H����0A�NH���������H��H�H��L)�H��H��H��H��?H�:H��H)�H��H��H)�H��H��H)�H��H��H��I�vH��?H��H)B0A�FH��H�H)���0A�N���A�1�H�D$�0���f�L�Ǿ
�s��L��I��H������I� I�I�GtI�H�����H��H������H=N�M�I���I��H=NH�H���H������@H�߸-�g���H������u���H�s��
L�D$�ݙ�L�D$H��L���m����uyH��t�t`H������ud�
H�����H�T$L�@I��L9���Lt$I�t$I�$ tI�t$H���i���L��H)��e���Y���H���H��
t��f�H������H���I������f.�H������H���v���L�ljT$�\$����T$�L$I�����L)þ0L��L�D$H���؍�L�D$L���I����1��/��ff.�@AVI��AUI��ATI��UH��H��S�D���H���@-�@t9��8H��L�L��<L��L�CL����H����P�Ѽ��ZYH��t[]A\A]A^ÐH��L�����C-�H�x�DH��H�5��H�81����@��SH���Þ���@-��8<t ���H��[�H��H�=���;������H��[�H��H�=O�����ff.���SH���S��H��[�H��H�=J����ff.���ATUSH���0���H�����H�ھH�="�H�����H�}H��赴��H��tNI�ĨtH��H�H���ɚ;���H�5�}H���1����5wL��褠��H���,��H��H������E-��8<�"H�[�EL�%�G
H��u ��L���;��H�4�EH��t�H�}1�1�H�������H�H�Ǿ+H��yH�߾-H���������H��I��H��I��?L�:I��L��M)�L)�H��H��H)�H��H��H)�L��H��L��H��?J�H�|�j�Y�HH��H)�H��H��H��I��1�I��I)�H��
I��H��E)Љ�L)�H�5���M��H���DH��[]A\�@H�����H���7����H�ߺH�5Q��̸�H��[]A\�@��H��H�5}�1�����H��[]A\�DH�5T�H��1�����H�H�sH�K�� �
@H��~H��H��H��tH�C�|0�0t�H���t���>���ff.�@��UH��SH�����H���@-�@tC��8<tRH�C H��tH��u
H��[]�fD�u�H���H��u�H��H��[]�2��f�H��H�����C-��8<u�H���H�=;�[]�s��AVAUATUH��SH���L$UH�D$@H���bH�۔EH��u'L�%8���L���ò�H���EH��t�H���o��H9�u:�D$UA�A�����D$UH�|$0�Š��H����H�����@H�Y�EL�%��H��uD�L���K��H�4�EH��t�H�����H9��H��I��A�譤����u����I��H����H��$�A�IE�H�D$@�[���f.����[���H�H�Ѓ�H���H������?���H���qH���9���I��I����H�|$0�2��I�$�uH��H���O����T$R�����<v�⃾H�|$0�T$R踩��H��L��H��t$X�t$X�t$X�t$X�t$X�~��H��0H��L��A�D$-���@A�D$-����H�؅�uuL���ԥ��H�D$@H����I��$��H�l$@A�d$-�H��tj�����H��H�|$0����H�|$0H�D$@�U��I�$�uH��H���r���H��H���G��[]A\A]A^�fDA�A�����H�|$0�V��I�$�uH��H���#���H����[]A\A]A^�f��������H��菦��y���f.��d$U�A�A��{���f.�H�|$0���I�$�uH��H��賗���T$R�d$U������<wEH��L��H��t$X�t$X�t$X�t$X�t$X�z|��A�D$-H��0���HA�D$-H�����D�⃾H�|$0�T$R�ҧ���L��H���}��H��tH��H���������W���H����z��@H��H����|��I��H���������fD��AWI��H��H��AVM��AUI��ATM��USH��HdH�%(H�D$81�H��$�H����?���H#D$0H	�H��$�H�D$0H�o�EH�D$(�ݞ��H�D$�I��tL���š������D$1���	ЈD$1�I�����T$0����
����	ЉD$01�I�����T$2������	ЈD$21�H�����T$2��?��f���	�f�D$2H�����d$4�H�D$H��L��t$8�t$8�t$8�t$8�t$8H��$�����H��0H�\$8dH3%(��H��H[]A\A]A^A_�f�L��舠������+���訝���L���h�������-�����H���P���������5�����H�t$H���������D$4��?��	ЈD$4H�D$H�D$�0������ff.����AWH��I��AVI��AUM��ATUSH��dH�%(H�D$x1��j��H��H����H���U���xtH���DH�5��H�81��7���H��踰���u�H�kH� ��L�cL�L�d$@I����A���{I�L��L�l$H9�v3��� ����	���{�E��� �n��	���bf�H��H�L$HH�T$@A�H)�A�
H�L$(H�T$ �E��H�D$H���&H�T$HH�t$@H����H9���H��H)�H��~	�>-��A�����D�\$E��E��D�\$8�H9��3��� ���	���	H�T$@H9������ ��H�׃� �H��	���<H9��RH9����|$8��&�D$8E1�Ņ��D$AH�Ã���AH܃�?E��EI�A��?H���1H�D$HH����H��	�@H�D$f�H�D$p)D$`H�D$PA����L��L��DD�D�\$tH�L$XH�_�EA��H�D$hC�D�T$qA���A	�A���DD�D�T$q��?A���E	�A��D�d$tD��D�l$pf�L$t�H����
A����A	�D��D�l$x���ʼn؃��	�@�l$z�\$zf���	�f�\$z�t$x�t$x�t$x�t$x�t$x��H��0H��H�L$xdH3%(H����H�Ĉ[]A\A]A^A_�H���DH��H�51�H�81��5��DL�cL�L�d$@I������H�D$����L���!���f�H��H�t$@H9�����H��H��H��������	H�z�����H��H�|$@H9������ ����D�@�H��A����������H��H�|$@H9����������fDL��蠀�H�|$@H�D$�y����A�����E1�1�1�E��H�D$f�H�D$p)D$`H�D$P����f.�H)�H��L)�D�T$(D�\$ H�L$�Ӏ�H�L$D�\$ I��D�T$(�5���@�	�
D�T$8H)�H�L$���H�L$H��H���l��D�T$8H��H�D$f�H�D$p)D$`H�D$PH���B�����8���@H�T$ H�~H�
�H���X��A�ƒ��_H�t$@H��H)�H��~�>-t\A�����D�\$E��D�\$8�����H�p��
D�T$8H�L$�0��H�L$H��H���p��D�T$8H���?���H������H�T$ H�~H��H�
��D�T$8�~��D�T$8��A����H�t$@H��H)�H��~
��� t��TtA�����D�\$D�\$8�\���H��t��F��0��	w�L�FH�T$ H��H�
p�L��D�T$0L�D$�D~��L�D$D�T$0���D$8�H�D$@H��H)�H�xH�����<.��<:��H�T$ H�
��H��D�T$<L�D$0��}��L�D$0D�T$<��?�D$�RH�D$@H��H)�H�xH����<.��<:�H�T$ H�
U�H��D�T$<L�D$0�}��L�D$0D�T$<��?A����H�t$@H��H)�H���;����>.�2���H�D$HH�~H��H�|$@H)�H�t$HH;t$sH9�jH���H�L$(H�T$ E1�A�
D�T$0D�\$�̓�D�\$D�T$0H��H��u�����0��	����H��H�t$@H�t$@H9�r�����7��0��	w�H��H�t$H�k������H���DH��H�5>�H)�H�81���H�ڌDH�5��H�81��y���H�=��踋�H�t$@H��H��H��H)��r��H���DH��H�8���H��舝�H��H���B���H�v�DH�5��H�81����H�^�DH�5��H�81���H�F�DH�5t�H�81����H�.�DH�5��H�81����H��DL)�L��H�5��H��H�81���H���DL)�L��H�5��H��H�81���H�ԋDH�57�H�81��s��H���DL)�L��H�5'�H��H�81��R��H���DL)�L��H�5M�H��H�81��1��H�t$@���H��L�D$���H�|$@H��H���:��L�D$��y1�D$@L��H�5	�D)���H�5�DH�81��ۿ�ff.���UH��SH��8dH�%(H�D$(1�H��H�����H�����H��H������H�����H�L$(dH3%(uH��8[]�����ATUH��H��SH��H��������tH��[]A\��H��萗��I��H��t'H��$tQH��虐��H��L���N��H��[]A\���f�H��H���5p��H��tH��H�������u�H���m���H��[]A\���@��AWAVI��AUM��ATUSH��H��H���\H�=]�EL��I������H9�t]H�=.�E����H9�tLH�=-�E���H9���H�=�E���H9���H�=��E���H9��6A���DA�ʚ;H��芕��H��H����L���u���H��H����A��ʚ;��O�d?H���MH�߾�5w�P���L��H��腟��H��H��t
@��tW���5wH���#���H��H���؞��L��H���
���H��I��tL��H������H��H��[]A\A]A^A_��H�E��H��u�H�}u�H�m�fDH��H�5�C���H�߅�tJ���L��H�0H��藈��H��H���܈���M-�P-��8���	ʈP-H�UH�PH�U H�P �Z���@�K���H����H��t�uH���H��uH�x�����5wH���#���L��H������H������������H���H�������H�{�����H�[���@A�@B�3���DH���������}���H���H���m���H�{�b���H�[�Y���H�@�_���H���m��L���m��H�X�DH��H�5`H�81����@��ATI��UH��SH��H�=��E���L��H��H��I��[A�]1�A\���fD����w��H��t	H�6H��u����f�����P�1���ff.���AWAVI��AUATI��USH������H��@-@��f�E(��ZI����M��tA��t%L���]��H�5��H��H�~DH�81����f�I�<$H����H��u�� ��H�����(��1�I��I�D$H�D$��@H����H9���H�D$L�<�L9=ЀE��L9=��E��L9=��E��L9=��E�L9=|�E�$L9=g�E�?L9=R�E�YL9==�E�tL9=(�E��L9=�Eu�E-L��L���<H�H�҃��l��L9=�E��H��I�$�� �.���I;\$��I�D$ L�<�L9=�E�3���H�UL��L�����L9=�E�$����U)L��L���H����L9=�E�����E(L��L���
��H�T�Ճ�L9=�E������E(L��L��%�H�T诃�L9=XE�����E,L��L��f����H�T臃�L9=(E������E*L��L�����H�T�`��L9=�~E������E*L��L��f����?H�T�8��L9=�~E������E,L��L���?H�T���L9=�~E�u���H�}������5wH���1���L��L��H������L���fDL���P�L��L��H���‚��^���D�螟�H�UH�5s~EH��I��蘂��U)H�5U~EL���H���~���E(H�54~EL���
��H�T�a���E(H�5~EL��%�H�T�D���E,H�5�}EL��f����H�T�%���E*H�5�}EL�����H�T����E*H�5�}EL��f����?H�T����E,H�5u}EL���?H�T�́�H�}�ԙ����5wH�����H�5@}EL��H��襁��E-H�5"}EL���<H�H�҃�脁�L����H�5�|EL��H���j��H��L��[]A\A]A^A_��I�|$�	���fDH�} H��t&H;=}EtH;=}EtL���L�����z���@�e-�H��L������b���@H��L�������B������AWAVAUATI��USH��dH�%(H��$�1��f��L�d$0H��H��uH�����u�H�H�ƒ�H��t�H�Á�u�H����H�5�|EL���#H�5�|EH�|$0I����"H�5�|EH�|$0H�D$��"H�5�|EH�|$0H�D$8�"I��H��t�1�H��H�=������I��H�5X|EH�|$0�"I��H��t�1�H��H�=4p��诊�I��H�5�{EH�|$0�["H�t$0H��I���[��H�|$0葚�H�D$0H�PH� tH�PH�pH����1��<��H��H��H	�H��u�D�J�BI��H��I	��BH��I	��BI	������H��H��H��H�D$I��uH��H����L���H����H��H��
�����H�D$a�TA��L�|$@H�D$P��A�����A��	�H��H���T$a����
�‹D$`%���	Љ‰D$`���Ѓ�A	�L��H��D�T$b���D$b��f%�	�f�D$bL��A��H��Mi�����D$d��?��	ЈD$dH����?���H!D$`H�zEH�D$XK�D	H�D$HI���'H�|$�
���H����L��H�D$���H�t$H���aH������H�|$HH���~��H�D$HH�|$@胴��H��I���h���I�ƀ`-�L�8A��uL��H���~���D$����A�F-��ǃ�A�F-I��t[1�H�t$p�H�l$pH�=�d��L�d$x�:��H����H��t�uH���H��uH���i��I�F H��H���Q��H��$�dH3%(H���|H�Ę[]A\A]A^A_�DH�|$8����H�|$8���H�T$8H�zH���������	�������Hk�d�р�	�������Hc�H�H����@��<	�������H�H�tH�|$H�|��H�D$H���fDK�|	��5w�Y������H��茓��H��I�������5wH���4���L��H�����H��H���~��I�ƀ`-�H����y���H��H����|���i���I���\���H��L��裻��H������D���fD���G���H���/��L�d$0�5���D��L���L�L$ �T$��{��L�L$ �T$I�����fDH�N�H��H�|$@L�L$(H��H�T$@H�T$ H�L$����H�|$@H�T$ H��H)�H��H�L$H)�H9���H��x{1�H��A�"��	��L�L$(I���H��L�L$tL��諆�L�L$I�����fD���^}�L�L$I���������D���fDL���g���s���H�<sDH�5��H�81��+��薦�L���a��H�|$�a��H�H�r������AUATUSH�����H�Յ��~H�H��tuH���݅����tH������H��H��I���C������H����I��H��tzH��$tTH�����H���Ą��L��H��H��覹��H��H��[]A\A]��@H��蘄��H��[H��]A\A]�v��fDH���x���H��[H��]A\A]����fDH��H���E`��I��H��t4H���D���L��H��I�������tH��L��[]A\A]ú1��X��H����]����UH��SH���~z��H��@-@t%�C(f��t0H��%�H�D[]�f.�H��H�������C(f��u�H�{ H��t!H;=�tEtH;=�tEtH��������u�c-�H��H������C(��C(�f���UH��SH����y��H��@-@t%�C,��f��f���t#f��H����[]H�D�H��H���E����H�{ H��t&H;=tEtH;=tEtH���L����u ��c-�H��H������C,��C,�f���H���S����H��
�HE�H���ff.����H���#����H���HE�H���ff.����H�����H��	�HE�H���ff.����H�������H���HE�H���ff.����H������H���HE�H���ff.����H���c����H���HE�H���ff.����H���3����H���HE�H���ff.����UH��SH��hdH�%(H�D$X1���w��H��@-@��f�C(����C,H���?H�DH�$�C*f����?H�DH�D$�C*����H�DH�D$�C(��
��H�DH�D$�C)��H��H�D$ H�CH�D$(�C,f����H�DH�D$0�C(%�H�DH�D$8�C-��<H�H�Ѓ�H�D$@�9��H��
H�D$H藤�H�T$XdH3%(�gH��h[]�@H��H���}��f�C(�����H�{ H��t'H;=8qEtH;=7qEtH���}��������D�c-�H��H���1�������7�����AWAVAUATI��USH��H�t$�av��H��@-@�Lf�C(���H�|$�Ώ�H�|$�t���xtH��uDH�5��H�81��V��fDH���ؑ���u�H�|$�l�H��H� tvL�pH�|$L�m���I��M��td�C-H��L�L�CL��L��L��L���8<����P�h���H��H��XZH�|$�&��H����H��H��[]A\A]A^A_�L�p�f�H�=�1��–�L��1�1��6��H���ĐH�{ H��t&H;=�oEtH;=�oEtL�����������@�c-�H��L���������@H��L��������H��tDH�T$H�5��H�81����ff.���H��nE����]�E�����H��H��1��nh����tH���H�=��8b����ATUSH��H�� dH�%(H�D$1�H��uH���T��@@��u�I��H�H�Ѓ�H��t��u�H��tmH���uu��H��`-�H���v��H�t$H�<$�؋��H�E�uH��H���s��I��tL��H����H�L$dH3%(H��u H�� []A\����t�H���Ӂ���\��ff.����UH��SH��H��H���xW��H��H��H��H��[]��@��H���@BH�|$H�|$H�4$H���o��Hi4$�H�|$����H��H�!kDH�8��r��H���@��H��(�ʚ;dH�%(H�D$1�H�|$H�|$H�t$H�t$�Zo��H�t$H�|$諊��H��H��jDH�8�yr��H�L$dH3%(uH��(��_��ff.�@��USHc�H��(H�dH�%(H�D$1�H�GH�t$H�|$H�T$�ʚ;H�D$��n��H�t$H�|$����H��H�5jDH�8��q��H�ō�Q=��vE�����t�����uZH���r���P-��ǃ��P-H�L$dH3%(H��u-H��([]�fDH����q���P-��ǃ��P-H�TH�P��s��H�LqDH�5b�H�81����ff.���ATUSH��H��t@����fD��5w�&���H��H�\iDH�8�q��H��H��tQH���{����tH���g���H��H��蜹����u.H���}��I��H��tOH��$�}H����v��L��H���z���H��[]A\�f�H���H���p���H��e���H��\���@H��H���=V��I��H��tH���ܯ��H��L��������u�H���S��D[H��]A\鴯��@��H����Z��H��H��H��H��S㥛� H��H��?H��H��H��H)�Hc��f���SH�5D�CH���Lx���u81�H���Z��H��H��[H��S㥛� H��H��?H��H��H��H)�Hc��DH���o��H�8���ff.���SH�5��CH����w���uH��1�[�=Z��DH���o��[H�8駌�������Z��f���UH��SH��H��8dH�%(H�D$(1��n�H��t%H�T$(dH3%(�H��8[]�f.�H�=QiEH���q���H�D$H��hEH��u)H�-�f��H���Æ�H��hEH��t�H�L$�H��H���Rg�H��$tH���D���j�����H�=���7R��H�D$H�D$H�D$H�ihEH��u%H�-q�D�H���C��H�DhEH��t�H�L$�H��H����f�H��$u�A�1�1Ҿ1H���*�d������ff.���AU�H�=�ATUSH���х��H�=�H�iE蹅��H�=�H��hE衅��H�=p�H��hE艅��H�=�H��hE�q���
H�= �H��hE�Y���H�=�H�~hE�A���H�=�H�^hE�)���H�=[�H�>hE����H�=;�H�hE���H�=-�H��gE����H�="�H��gE�Ʉ��H�=�H��gE豄��H�=U�H��gE虄��H�=�H�vgE聄��H�=��H�VgE�i���H�=��H�6gE�Q���H�=t�H�gE�9���H�=��H��fE�!���
H�=z�H��fE�	���H�=W�H��fE���H��詤��H�=P�H��fE�у�H��艤��H�=6�H�^fE豃�H���i���H�=�H�.fE葃�H���I���H�=e�H�fE�q��H���)���H�=�H��eE�Q��H���	���H�=��H��eE�1��H������H�=L�H��eE���H���ɣ��H�=��H�neE���H��詣��H�=>�H�FeE�т�H��艣��H�=+�H�eE豂�H���i���H�=��H��dE�QN��H��H�GeE貜1�H�=���4N��H��H�"eE蕜L�-�jDH�=�I�u�p�H�wbDH��H�茍�H�;I��H��iDH�0�e�H�;H�5MN���h��H�;�����H�����H�5K��t�H�;�����H����H�5;��rt�L��H�!�H�5���|��L��H��H�5J��f��H�;1�H�j~��H�5��n�H�;1�H��r��H�5Y
�n�H�;1�H��l��H�5F
�~n�H�;�H��n��H�5���cn�H�;�H�Tj��H�5Z��Hn�H�;1�H��j��H�5w
�0n�H�;�H��r��H�5��n�H�;�����H���H�5���m�H�;1�H�>���H�5w���m�H�;1�H�&���H�5���m�H�;�����H�+�H�5K��m�H�;1�H����H�5<��m�H�;1�H���H�5*��m�H�;1�H�3��H�5��gm�H�;1�H���H�5��Om�H�;1�H����H�53��7m�H�;1�H���H�5���m�H�;1�H�C�H�5��m�H�;�H���H�57���l�H�;�H���H�5���l�H�;�H�2���H�5�J�l�H�;�����H�W���H�5�
�l�H�;�����H�����H�5�
�l�H�;�����H���H�5�
�el�H�;1�H�����H�5q��Ml�H�;1�H�����H�5���5l�H�;1�H�)���H�5���l�H�;1�H����H�5��l�H�;1�H�����H�5����k�H�;1�H�a���H�5z���k�H�;1�H�I���H�5%��k�H�;1�H���H�5��k�H�;1�H���H�5��k�H�;1�H�!�H�5��uk�H�;1�H�)���H�5���]k�H�;1�H����H�5ؤ�Ek�H�;1�H����H�5���-k�H�-�`DH�;1�H�5ϦH���k�H�;1�H��H�5���j�H�;1�H��H�5����j�H�;1�H�^f��H�5����j�H�;1�H�Ff��H�5���j�H�;1�H���H�5���j�H�;1�H�f�H�5s��j�H�;1�H��H�5c��rj�H�;1�H���H�5T��Zj�H�;1�H���H�5G��Bj�H�;1�H�F�H�59��*j�H�;1�H���H�5)��j�H�;1�H��y��H�5��i�H�;1�H�.���H�5
���i�H�;1�H����H�5����i�H�;1�H��{��H�5��i�H�;1�H��{��H�5ͥ�i�H�;1�H��{��H�5���i�H�;�H�#�H�5x��gi�H�;�����H�8���H�5���Li�H�;H�u�H�5x��֍�H�;�����H�����H�5�諚��L��H���H�5�
萚�I�UH�;H�57���Z�H�5H��H��H�����1�H��H�o���H�5���h�1�H��H����H�5���h�1�H��H�����H�5��h�1�H��H�G���H�5���{h�1�H��H�/���H�5@��ch�1�H��H�׼��H�5���Kh�1�H��H�����H�5���3h�1�H��H�W���H�5j��h�1�H��H�ϻ��H�5W��h�1�H��H�����H�5~���g�1�H��H�/��H�56���g�1�H��H��H�5y��g�1�H��H��H�5l��g�1�H��H��H�5c��g�H��1�H�c��H�5V��g�1�H��H��b��H�5C��gg�1�H��H����H�5K��Og�1�H��H�3��H�5ӯ�7g�1�H��H�[�H�5 ��g�1�H��H��v��H�5(��g�1�H��H�;���H�5���f�1�H��H�#���H�5���f�1�H��H��x��H�5��f�1�H��H��x��H�5ڢ�f�1�H��H��x��H�5��f�1�H��H�3v��H�5���wf�1�H��H�{j��H�5"
�_f�1�H��H��d��H�5
�Gf�H�߹H����H�5�,f�H�߹H�����H�5*D�f�H�߹����H�ž��H�5)
�e�1�H��H��a��H�5���e��H�=��x��H�=	�H���x�H��H��H���[S�H�߹H����H�5��k�H��ZEH��[]A\A]�ff.���H�5��CH�=����f�������t���� t�������@����%�=�����%�tH�7�H����tHc�H�
-���H���tHc�H�
,���H���tHc�H�
"���H��� tHc�H�
���H���@tHc�H�
���H�ց�t+Hc�H�
���H��Å��7������+���������fD�����fD����H�\���Hc�H�>��@H�yZE��H�aZE��H��ZE��H�iZE��H�QZE��H�9ZE��H�!ZE��Hc�H�D?����SH��1�H�5H����l�H���T��[����H��H��� ���H���fDUH��SH��H�H�SXH�CHH��tH�XH��w-��H�CHH��wa�{<K�{@%H��H��[]�Ǚ��H�}X��f.�H�}P觙�H��H��[]陙�f�H�}8臙��DH�}X�w���DUH��H��SH��H�=�XEdH�%(H�D$1�H��H���m���t.H�<$H��H���l���tH�$H�L$dH3%(uH��[]�1�������AUATI��UH��H��SH��H�=vXEdH�%(H�D$1�H��H���l���t7L�,$H��H��L���l���tAH�L$dH3%(H�$ubH��[]A\A]�f��p�H�=XEL��H��H�$�uk��� �{�H��L��L� H��H�hH�@H�@H�$�=k���F��fD��UH��SH��H��H�t$H��H�;H�T$��k���u/��z�H�SH�;H��H�hH�H�H�SH�C��j�H��1�[]�ff.�@��ATI��UH��SH��H�H��t&Hc�L��H��H���$���H�H��[]A\���A�H�L$�T$�|Hc��c��H�L$�T$H��DU�SH����O￸��y��0�h\Hc�H���@XH�H�@H�@H�@H�@ H�@(H�@0H�@8H�@@H�@H�@`�Ɨ�H�CdH�CPH�H�ClH��H�CxHǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�Hǃ�H��[]�ff.�f�AWAVAUATUH��SH��H��hH�T$H�L$dH�%(H�D$X1��]\������L�d$0L�-����x�H�XH�H�D$@H�D$8�em�H��1�H�\$(H��H�D$0�h�I�D$H�D$�\f�I�wH�=5UEH���mi���t;L�t$(H��H��L���Vi�����I�GL��L��L��H�D$H�h�H�D$HL���V��L�|$8M��tI�H�D$8H��u�H�D$H�D$@�A�����H�|$0��N�H�L$XdH3%(D����H��h[]A\A]A^A_�f.�I�WH�|$0H����g�L���ה�H�|$8H��tDH�H�D$8軔�H�|$8H��u�H��E1��
f�A��H�|$0H���_h�H�t$(H��u�E���A��H��H�L$H�D$D���H�l$(H�|$0H��H���%h�H�|$(H��u�����A����������F��fDAUI��ATI��UH��SH��H�?�B���x!�lj��h_�H��H��tH�@�f.�H��1���h�1�I�E��I�$H��[]A\A]�ff.�@��H���H�t$H�L$��菕�H���f.���H��H���H�t$H�t$�A��H���ff.����SH���H��H�t$H�t$�0��H��H���Z�H��[�ff.�@AVAUATUSH��H�� dH�%(H�D$1��Gp��t:��t5�����H�L$dH3%(H����H�� []A\A]A^�H���L���H��L����\�H��I���<{��{pH�D$�-H���H����J�|-�\�H��I���{�H�|$L���H�D$�Rg�H�|$H���Eg�L��H��H�=�H��1����H�=�REH���]�H�5�REL��H��H����B�H�5kREL��H���B��{pH���H�5PREHE��B�H����s�H�5REH��H���yB�H����s�H�5.REH��H���[B�H����߇���x!����\�H�����H�5�QEH��H���*B�H���讇����o������\�H��跊�H�5�QEH��H���A��I���H���H����=[�H���H�D$�H�=~6I��������?L���y�H�D$H�kL���H��L���l��L�����uH�sL���U�����}H�|$�e�H��L��H�=�H��1��|��H�ŋC`��~TE1�L�-66�fDA��D9s`~8Ic�H�@H��HCPH�H�H��:t�H�PL��H��1�A���4}�D9s`�H�=�PEH���[�H���H���`����x
��L���|�H�5sPEL��H���@�����H���H�|$A���d�H�=��H��H��1�譍������M�H���L���H��I��I�H��L���Yj���~H�H;��tsH�D$H��������w���fDH���H�|$A��Id�H�=�H��H��1��%������H�|$�&d�L��L��H�=�H��1���H������L��L��H��A�V H�=���1��ڌ�H�D$�k�����}�ff.���H�55OE�@Y���H�5OE�0Y���H�5%OE� Y���H�5
OE�Y���H�5OE�Y���H�5�NE��X���H�5�NE��X���H�5�NE��X���H��C1��^��ff.�SH���wp�H��t[�H���f�[���pY���AUATI��UH��S��H��H�9t\A�<$H��u"��o�H�}H��Hc�H��[]A\A]�<�@���H���+��L��I�����H�����L��H���Mw��H�t$�|�H�t$H�E�PXH�5�H��H�IDH�81����f���ATUH��H�5�CS�>�H���+H�5��CH��H��A��Y�����H�m H����H�{H�uH9�t�}�E1���H�{H�uH9�t�}�E1���E1�E9��H�{(H�u(H9�t
�Y}�����H�U E1�H9S usH�{H�uH9�t	�b����u]�C`E1�;E`uR��~HL�CPH�}PI�H�H�H9u8��H�t@�0H���fDH�I�H��0H�H9uH9�u�A�L��[]A\�f�E1�[]L��A\������H��H�5��C�L=�H��tH��H�������f���fD��H��H�5��C�=�H��t!H���H��tH���"��f��H����!������H��H�5Q�C��<�H��t!H���H��tH�����f��H���������UH�5�CSH���<�H����H�ÿ�>��{pH���)�1�H��H���9�H�����9�H���H��t��l��H��H����9�H���H��t��l��H��H���9�H���H��tFH�����T��H��H���9�H���H���H���T��H��H���V9�H��H��[]�������AVH�5�CAUATUS�;�H����H��1��x�I�ċE`��#�yf��l�H��L������9]`~XHc�H�@H��HEPH�L�(I�EI�}�8t����H���I��I�}I�����H���5��L��H���js���[L��]A\A]A^�����ff.�@AWI��AVAUI��ATU��SH���G\9G`����l�A�w`I�Ƹ0)�Hc�H����Hc�I�WPH�vH��H�4H�|0H���jq�I�GP�`H�H�D$�k�I�}HI��L�(�@H����I�UPH��tI�|$X��A�D$Ic}<I�D$(I�D$0I�D$HI�D$@����Ic}@����I�PH�D$H�L� I��H�C A�G`L�s�PL�sL�s�C(A�W`I�U�:t.9�}�(��9�Hc�H�RH��H�H�2H�6�>t�I�WhH��1�[]A\A]A^A_�f��j�I�UPH��I�D$XH������I�$H�xH�����������j�I�D$P�?�����{j�I�D$8�"�����H�P�0Hc��L�A�_\I�GP�A����0�Z�DAVAUI��ATUSH��tcH���8X�1�L�p
I��L���Q�H��H�xH� tH�xH�enc/tranH��s/f�GM��u(L��H���mo�H����u�H���mL�[I�E]A\A]A^�H��
L��H���я���ff.�@��H��8t<SH�FH��H��t�xDt11�[�DH�FH�~H���(���H��u�1����1��DH�@H��[�f��G��uZUH��H��H��SH�lj�H����H��t0H�pH��tH����H��[]����f�H�xH�p���H��H��u�H�������[]Ã��ff.����y�tSH��H��IH��H�;�q����C[�@��UI��H��H)�L��H)�H��H�(H)�H9�}H�E�x<H�E8H��uH�I�8H��]ÐH�E8H��t�H�H��L��L�D$H�$�`��H�EH�$L�D$�x<~
H�E8H�}(�H�E8H�}(�fDAWI��I��AVI��AUATUSL��H��XM�(L�'H�T$H�.D�L$dH�%(H�D$H1�A�E8�D$A�@������H���Hc�H�>��f.�M��L��H)�H���
H�CH��H���E�L��H)�H���p
H�CH��H������0�E�L��H)�H����H�CH��H���E�L��H)�H����H�CH��M��H������0�E�fDA�EH�C(�C�D$t	I9.�	L;d$�[�D$�UI����L��H)�H����
H�Icu@I���H�yHH9���HcI@�H�sP��HM�~H�sPH����H�{XL�T$��H�C@L�T$H��H�CH��H�1�H���z@CH�SPH�s@�H���H�CHH9C@�_L��H)�H����
H�H�C@H��z@H�p~�H�SP��L��H;L$�"I��M)�D$�N�CM��~*H�H�{8�x<~H�{8H{(L��L��H�L$�=k�H�L$I��I�.Lk(��@HcL$I�x(L�l$M)�I�D=�D$t	H9���H9�~H)�I�I��H�D$�C1�M���!
H��x<�DH�C8L��H�L��H�L$�j�H�s(H�L$L�H�D$H��I�I�.H����	H)�H�K01�H�s(�+H����H�{XH���H��C�M�'I�.H�t$HdH34%(��H��X[]A\A]A^A_�DA�$�CM�\$�S I�u(��I�MH�<�D���F�A8���H�|$@H�CL�
��H�|$ H�{XH�|$(H�ƒ�H���BIc�L�>��fDM����L��H)�H����S$H�CH����H��IE��E��C$H�SI�M��H���C$���9�r�M�����DB8T�W�����L���D)�H���D>��HЋ��3����M��L��H)�H���	H�CH��M��H���E��G����M��L��H)�H���7
H�CH��H���E�L��H)�H���	H�CH��H���E�L��H)�H����H�CH��M��H���E�����M��L��H)�H����	H�CH��H���E�L��H)�H����H�CH��M��H���E�����M��M��I)�M���C
IcE@I�7I9���
L��L�D$@L��H��L�T$(L�\$ ���H�3M�MxH�KPA�L�\$ L�T$(HcV@��LM�~H�KPH�~HH�T$@H�{XvH�{XL�T$(H��L�\$ A��H�C@L�\$ H��H�CHL�T$(�5���H�31�H���~@CH�sPH�K@�H���H�CHH9C@����L��H)�H���4H�3H�C@H��~@H�H~�H�sP�fDM��L��H)�H���K	H�McE@I�EpH�sH�zHL9��!
HcR@���HM���	H�SPH���n	H�{XL�T$(L�\$ ��H�C@L�\$ H��H�CHL�T$(�R���H�31�H���~@CH�sPH�K@�H���H�CHH9C@����L��H)�H���6
H�3H�C@H��~@H�H~�H�sP�M��L��H)�H���^H�CH��H���E�L��H)�H����H�CH��H���E�L��H)�H���`���M���CM)�M��~*H�H�{8�x<~H�{8H{(L��L��L�\$��e�L�\$M��I�.Lk(�b���f�M������M��L��H)�H����H�H�KP�x@~H�KPH�C@H�uH�PH�S@��EH�S@H�CHH��H9�����M���k����M��M��I)�M����IcE@I�7I9��oL�D$@L��L��H��L�T$(L�\$ ���H�;A�L�CPH��L�\$ L�T$(HcW@I�����LM�~L�CPH�HH�KH�T$@�]H�{XL�T$(L�\$ ��H�C@L�\$ H��H�CHL�T$(�/���H�31�H���~@CH�sPH�K@�H���H�CHH9C@�����L��H)�H���IH�3H�C@H��~@H�H~�H�sP�M����M���Q���M������M������M������M������M��L��H)�H�����CH�������E��k����M���I����M���y����M�������C�M�'I�.H�C(������L�YH�K�S �ȉK�0���I�7L�D$ L��L��H��L�T$8L�\$0���H�3I�MhH�T$@L�\$0H�~HL�T$8�<H�|$(L�T$8H��L�\$0��L�
��L�\$0L�T$8H�C�	���H�I�U`H�yH��H�|$(L�T$8H��L�\$0��L�
t�L�\$0L�T$8H�C����M���CM)�M��~*H�H�{8�x<~H�{8H{(L��L��L�\$�bb�L�\$M��I�.Lk(����C$���H�{(M��HcL$M)�J�4/H9��_�����D$�����I9.����CM��~)H��x<�dH�C8H�L��L��L�\$��a�L�\$M��I�.Lk(�k���H�C@M9�s:L��1�H�{P�H�S@H�H��H���y@~H�sPH�JH�K@�H��I9�u�H�C@H��1�H�C@H�CH���L��D$�����I9.�����M���CM)�M���[���H��x<��H�C8HC(L��L��L�\$H���a�L�\$�)����M���C M)�M���������DM���CM)�M���������DH�D$L�I�I�.H�{(1��G����M���CM)�M����������DH�{X�R��M���CM)�M���Z�������DM���CM)�M���:����_���D�C�M�'I�.���f�M���C	M)�M�����������DM���CM)�M���������DM���CM)�M�����������DM���CM)�M����������DH�C8����CM��~&H��x<�qH�C8H�L��L���E_�H�C(L�H�|$I�?I�.H�C(����D�CM��~*H�H�{8�x<~H�{8H{(L��L��H�L$��^�H�L$I��I�.Lk(��fD�C�M�'I�.�i�f�H�{X�=�M���CM)�M�����������M���C
M)�M����������M���C!M)�M��~*H�H�{8�x<~H�{8H{(L��L��L�\$�:^�L�\$M�I�.Lk(����M���CM)�M�������@���M���CM)�M�������%���M���CM)�M���v����M���C
M)�M���������CM�'I�.�{���M���CM)�M�����������M���CM)�M����������H�{X���H�SP�v���H�{X���L��L��H��L�T$0L�D$@L�L$(L�\$ ���H�M�exH�{XH�T$@L�\$ H�yHL�L$(L�T$0vH�{XL�T$(H��M��H��L�\$ A��L�\$ L�T$(H���H����H�{XL�T$(H��L�\$ ��L�\$ L�T$(H�M����L��L��H��L�T$0L�D$@L�L$(L�\$ �M�H�3H�KH�{XM���H�T$@H�~HL�\$ L�L$(L�T$0vH�{XL�T$(I��H��L�\$ A��L�\$ L�T$(H����M���CM)�M���1����V���M���CM)�M�����������M���C"M)�M����������H�C8���H�{X����H�{X�	���H�{X���H�F��CH�L�\$H��H��H��H)�M��������H�C8�s����Wb�H�C8���H��1DH�5��H�81���k�fDUI��H��AWI��AVE��AUI��ATI��SL��H��(I�P0dH�%(H�E�1�H����H�BH��H��H%�H)�H���H��H9�tH��H��$�H9�u���!H�|$H�s8H���H�H�}�H�E�H��x<��Hs(L�]��.{�E��H�U�L��H�C0A��I��L��H�}����L�]�����t3H�u�H�U�H�{8H�H)�x<kL�C01�H��uoL�H�C0� �L��E��I��L��L��L������H�}�dH3<%(��ulH�e�[A\A]A^A_]��H�s8�D����H�{8L�C01�H��t�H�C(�M�L�H��Wz�H�E�L�C0H+E��M��k���H)�H�L������}`�ff.�f�AWAVAUATUSH��xH��$�H�|$H�t$0H�T$8H�L$ L�D$(D�L$DH�D$HdH�%(H�D$h1�H�D$_H�D$`H����H�|$ �xH�D$L�@PA�x(uA�@(H�D$�@`�p�Hc�A��H�RH��E�L(���~A���ܧ�D�ɿH��H��@��s�������P�Hc�H�RH��L�A��0fD�J(������L��H��H���su'H��0��A���\A�|$����u�E1�A����D�d$@f.�D�\$D�l$@E1�E���@�E�H�H�@H��H�L�xL�X9��-H�KL�CL�cL9�t>L��L��H��L�\$L)�L�D$�W�L�D$L�\$H��HKH�CI��M)�H�CL�cH�K L�SH�D$E��9hdtA������A��t�D$@A����I�L�L��L��L��L�T$H�D$����L�T$���C(H�D$I;��A��U��w�H��c���tH�D$�PdH�D$�Ջ@`�p�9�~tH�D$H�PPHc�H�@H��HӅ�����L�\$8L�|$09�����L�T$ H�L$(M�"����f�A�����7���@M9"�DE��^����E��t;;D$@~5�l$@E1��u����H�D$�@`�p����t�T$@9��$���A���
�A��E��xRH�D$H�HPIc�H�<@H��HϋG(��uiA�s�Hc�H�@H��H��DH��H��0�BX��uA��A��u�H�D$H������H�|$hdH3<%(��H��x[]A\A]A^A_���v�P���w�G(H�|$HD��f.�H�D$(H�D$`H�D$ �t���@H�|$`H�D$8H�|$0�P���D�d$DA������D�L$DH��1�1��t$PL�D$8H�L$0A����H�|$A�����Z�Y��D��/����D$@�����[�������DUSH��dH�%(H�D$1�����H����H��H9����y�H�CH������H���D$�=Y�����7��xt8H�� H���H	�H�H�L$dH3%(H����H��[]�DH���pL�H���u�H�sH�{�� tH�{1�H�L$H��)z��D$H�똨�i���H��H���G��Y�����(���H��H���X��n���f�H����(�H���U�����Z�ff.�AVAUI��ATI��U��SH��H���+A��A�EA���A�<$������L��H���.�E��to�H�5�zH���
L�H�5����������� ����@�V��������
����H��[]A\A]A^�fD��uL��H���!.�E���g�����fD1�L��L��H��H�5�y�W�E���?����fDE���B���H�ߺ
H�5�y�;K�H��[]A\A]A^��1�1��O-�H�������H���-�H�ߺH�5�x��J�H��[]A\A]A^��H���h-�H�5y�H����J�H�5�J
����H���9-�H�5�x�H���J�H�5�J
����f�H���-�H�5Rx�
H���dJ�H�5]J
����H����,�H�58x�H���4J�H�5-J
���3���H���,�H�5�w�H���J�H�5�I
�� ����H���z,�H�5�w�
H����I�H�5�I
���f.���AUATUSH��H���zO�H�5��CH��H���(�H��tSL�`L�hH��H��H�=��1��f��L��L��H��H����H��H�52��PI�H��H��[]A\A]�f�H��H��H�=�

1�[]A\A]�Uf�D��H��H�=�'E1�H�5�����:�H�=�'EH���"���ATUSL�gH��H�/L��H�����H�xu	H�X[]A\�H��+DL��H��H�5�|H�81��`�D��SH��tH������H�X[�H��+DH�5�vH�81��P`���H�WhH�A�H��t
H��xDtH�@�fDH��@USH��H���b%��8u-�H�
�H���H�CH�S H�K(�CXH��[]�H��H�ChH�H�x�}I�H�5�H���n-�H�5uvH�
���H҃�H����H�TvHE�H�5(�HE��f���SH�5��C��H��t4H�xH��t H�{(�I�H�s H�{H��[�F\�fDH��������������ATI��US�WX��ufA�D$`��~71�HcŃ�H�@I�D$PH��H�<�D��I�D$PH�|�Ef�A9l$`�I�|$0�4f�I�|$P�*f�[L��]A\�f�fDH��f��ff.�f����'_�����GXS����H�G H��W`��~zL�OP���`L�RI��M�A0M��f�I��0I�H�
H�qHH��H�V`Hcq<HcI@HF�I��H�A��HO�H��Hу�HO�I�IH�H��t
I�Q H)�H�M��M9�u�HcO\H�WHH+W0[H�IH��H�H��f����P���fD���G`��tH�GP����H�H�@0H=���O��ff.����G`��tU��tQUSHc�H��H�GPH�(H�EH�U8�x<~H�U8H�E0HE(H��H)�H�4H���em�H)]0H��[]�f.��ff.�@��ATI��H�50�CUS��H����H��������H��t
I�<$H��uaH����X�A��Ic�1��L.�H��H�pH� u,D��H����F�H���H��tH����.�H��[]A\�DH�p��f.�@��u�E�I��H���zX�D9�DL�닐��-�I����1�����=��#����SH��H��H��0H�=#EdH�%(H�D$(1�H�T$�@7���tLH�|$1�H�u$H�T$H�5R��H�\$H�D$��5�H�D$H�L$(dH3%(uH��0[�@1����'R����H��8H�t$H�|$H�T$ H�t$dH�%(H�D$(1����H�|$�c�H��t(H�����H���0\�H�L$(dH3%(uH��8�����Q�ff.�����G`��tH�GPH�H�H��:t�xDtH��1�H�5����@H��H�5����@���O`��t'�Q�Hc�H�@H��HGPH�H�L�A�8t�xDtH��H�5���_�����H��H�5���G�����AWAVI����AUI��ATUSH��H�T$dH�%(H��$81�H�D$0H��H�D$�z���D$������D$A�>�D$��A�}��1�L�-����H�$M��I��H�<$�Ja�M��tR�D$M�wM�oA��D$���*H�\$��H�l��H��H9���H�3L����5����u�L���#Z�E1�H��$8dH3%(L����H��H[]A\A]A^A_�@L���W�A�>uA�}�8���H�L$ H����L��L��H�D$ �D$(�?��H�L$ �D$H�$������D$L�$$��L��I�l���I��I9�twI�$H�xu�H�xH�p���I��H��u�H�<$�`��!����D�d$E0�E'D�d$�D$A�����@L���8V�A�}����A�>�,����_���fD�|$�o��I���f.�H��H9�tGH�H�pH��uH�xH�p����H��A�W`L���������u�L���X�H�<$�i_��q���@H�<$�W_��
���1����I�����NN�ff.�AWAVAUATM��UH��SH��H��HH��$�H�D$dH�%(H�D$81�M���s1�M���b�I��H����H�D$(H�+E1�L��H�L$0O�<H��H�$H�\$(M��L�d$0H�L$H�D$�2-�H�\$0L)�tQ�L��H���T�I��H�L$H�$L�E1�H�t$M�.L��H�\$0��,�H�\$0L)�uVH���I��K�,?M9�u�H����@�I��M��uKH�L$H�$H�E1�H�t$I��L��H�\$0�,�H�\$0L)�t���u-L���W�H�D$H��3L��L��H���f��K���DM9�tL���]�L��E1���V�H�L$8dH3%(L����H��H[]A\A]A^A_�f.�H��A�LE�1�M���ya�I��H��taL���?�H�+E1�L��I��H�D$0H�D$(H�L$0O�>H��H�\$(H�$H�L$H�D$�+�H�\$0L)�u'M�������@���E1��H�����������/��������������K����AWAVAUATUSH��H�$H��HH��H��I��I��dH�%(H��$81��~��CH����L��H��I���"������S`H�l$(E1�����H�{0L�K0L�C8I��L�k@H�KHE1�H���I�EH�H)�L9��oH���FH�<(I�}M��t
I��yD��E��tL����[�1�H��$8dH34%(��H��H[]A\A]A^A_�@L�|$0H��H��L��H�D$0M��L��L��PA��g���ZYH���L9�H�l$(A��I9�I����A!֋S`�������r�H�KPHc�H�@H��H�L�8I�?�D�4H�xL�HL�@I��L�hH�H H����L��H�L$L�D$L�L$L�$�=�L�L$L�D$L�$H�L$H�l$(I�I�I�EL�H�I�EH�������@H��L��H���c�I�EH�l$(���@I�0L�T$H�L$H)�L�L$H��L�$��B�L�$L�L$I�EH�L$I+II�EI�9L�T$I�8I�EH�H)�L9�ryH�l$(�0�����y<I�W0I�w8~I�w8H����H�I�}I�G0����f�I��MW0������L�K0L�C8H�{0L�k@H�KH���f�H)�H�L$L�L�D$L�$H��rGH����O�L�D$L�$H�L$I�I�UH�I+I�UI�H�H�l$(H�I�E�j���f�E��tL���sY�������|���f���Hc�H�RH��H�L�HL�@H�xL�hH�H ���fDIw(��a�I�}I�W0����%H�DSH�wH��H��t#H�K(H�S H���c�[����������fD�[�H�s��DAWH�5"�AVAUATUH��SH��8H���dH�%(H��$(1�H�����H���L������5H�L$����A��H���M��H�\$L�%�g��H�D$I��H��H�D$H����A�L��H�߉�A�O�����A�G�A�G���1��
�H�ڋ
H����������!�%����t�H������D�H�JHD�H�
#g��@�H��H��H)���a�����X�����E��tL���W������H��$(dH3<%(��H��8[]A\A]A^A_�f�E��tL���SW�1���L�d$ H��L��A�H�D$M��H�5��H��P���I��XZM���y���H�D$H�ƒ�M9�t(L9��tH���O���A�H���|����@H���8���E1�H���`���1��)�����E�fD��AWAVI��AUM��ATI��USH��H��XH�T$D�L$dH�%(H�D$H1�H�D$;�GH�D$@H����H���m�D$I�npI��%����
�D$I�F8H�D$ H�D$<H�D$f�I�G0AAGAG A�F`����H�;M��I)�I�~0tGI�v8I�V@H9�t:H)�H��L9��G�^�H+I�F0I�F@I�F8�D$�eH�;M��I)�I�4$H�l$H)�L9�IO�H��t�D$��H���>^�H�;H�H�;I,$I�,$H9l$�b�D$��A�FpA�����H�H�@H��IFPH�pH����H�PH9���H�;L��H)�H��H)�H9����]�A�F`H+��H�H�@H��IFPI�~0H�PH�PH�Pt7I�V@I;V8t-H��M��H��L���t$D�L$,H�t$0�C���XZ�����D$twI�$H9T$�
H��M��H��L��t$D�L$(L����AYAZ����A�FpA��DI�~0tI�V@I9V8�#�D$��A�~`���D$H�l$L�|$(
A��@H��M��L��E��UH�T$H��L���r�_AX��t�L�|$(�Ņ�A�np@�ƃ���@�u	����HcD$<H�@H��IFPH�H�I�FxH�9�y<I���H�yI����+H�H8I���H�H(H�@0I���I���@��tA������v��u)A�%��� ����0uL���C��������A���cH��H��M��L���t$D�L$,H�t$0��Y^�Ń��������fDH�FA�I�$H�H�PH���A�FpH�\$HdH3%(D���KH��X[]A\A]A^A_�f.�H��M��H��L��t$D�L$(L��H�T$���A[��X���H�H8�����L�����������������I��H����L�+LxDA�FpA��M���DI��H�\$@���H�D$L�d$@�k���f�L��������z������A�FpA����DM��uCL�+A�FpM~8A������H���(Z�A�F`��H�H�@H��IFP�B���fDL���Z���I@�f���AWAVI��H�5ކCAUATU��H��SH��dH�%(H��$�1��D�H����I��H�D$ H�D$H�D$`H�D$(H�D$H�D$hH�D$0H�D$pH�D$8H�D$xH�D$HH��$�H�D$@H��$��������*���]�Hc�M�,��]�A�������~�I�VI��H�T$(H�T$`H�D$ H�z� DH��t
Lc�O��L���H��H9�tH�J9��H��t�H��H�H9�u�L�L$@9��[���L�l$0E1�I��tA����M��I�L�t$81�I��tA����L��H�H�|$HH�T$@H���DH���6�%�H�Ǩ������H�|$�i-�H�|$ t
H�|$�W-�H�|$(��!�I����I���M���(L�l$(M;}�mH���|M��I���M���L����L�I9��H�D$ H����H�PH� tH�PH�T$PHPI�EI�E tI�EL�H�t$PL��A��H�L$XL�H�D$X�6�H�|$(H�t$XA��H�GH� tH�GH)��6�H�|$ H��tH�t$PH�GH� tH�GH)��w�H�|$8uwA��uqH��������?H9���H�D$0H�L�l$(M�}M�����H�DH�5x]H�81��F�H�D$P1�����L��L����C�L�l$(����I��$�H��t
H�|$(��D��蹲��H��$�dH3%(�PH�Ĩ[]A\A]A^A_�H�|$(�VK�H��H�D$ H���!���H�@H9�HL�����@1�H������H�5
EH��H�T$1���H�T$H�5�EH�����@��H���������H�����E������.��q���L���N;�H���.���L���>;�I������L����l�I���a���H��DH�5?\H�81��LE�H��DH�5A\H�81��4E�H�}DH�5�aH�81��E�H�eDH�5*\H�81��E��}���r&��];��Ⱦ�����ATH�5�CUSH��H��0dH�%(H�D$(1��e��H����1�1�I�����H��H�ڿH��H�D$H�$H�D$H�D$H�D$ ���H9�Et;H9uEt2H9DEt)H9KE�ׂ�H�L$(dH3%(H��uH��0[]A\�L���Y���H���a �����w:����ATUSH��H��@H�t$H�5�CdH�%(H�D$81���H����H�|$I���
)�1�1���H�|$H����H�t$H�ڿH�D$H�l$H�D$ H�D$(H�D$0���H9�
EtDH9}
Et;H9L
Et2H9S
EtCH9R
E���H�L$8dH3%(H��uH��@[]A\�L���X���H���`�����v9�H�ODH�5/ZH�81���B�ff.���AVAUATI��US���������� ��H�5�X��@��H�=�o�z���L�pA�D$`��~}��1�1�L�l@I���6Hc��oH��0��H�@H��H��oIH�oQ P I9�t5I�T$PH�H�9L97u��o���I�D$PH�|H��0�lI�A�l$`I9�u̐A�$��[]A�$A\A]A^�@H�5�W���?�����[]A�$A\A]A^�DH�5�W����@H�5�W����@��AUA��ATI��UH��H�=�XSH�����D��L��H��H��H�����H�ߺH�5��p)�H�=A	EH��H��[]A\A]�����AWI��AVAUI��ATUH��SH��H��dH�%(H�D$1��M��8tH��L��I������u^H����*�I��H�����CXH�,$��utH�$�CXL�sL�k(H�C 1�H�L$dH3%(uyH��[]A\A]A^A_��H��H��L��E1�H�D$E1�L��L��P��ZYI��H��t0�CXM��t�H�{�G���H��L��H���RP��[������w����6���UH��H�51}CSH��dH�%(H�D$1���H��thH��H��H�,$�3%�H�<$��>�H�HH�$H�PH�pH� u1H���i�����t4H�T$dH3%(H��uH��[]�f.�H�p���e�����5�H�=�EH�5z\1��k?�ff.���AVAUI��ATUS��H�� dH�%(H�D$1�H���aH�5�EI�����H��tH;�E�Y��H�5�EL����H�5�EH��tH9���� L����H��t�؃� ��D�H�5TEL���|�H��tLH;7Et=��0H; Et4<�H��t���H��	DH�5�\H�81��q>����0�H�5�EL����H������H;�E��H;�E��H;mE��H;XE�<t!H���
��H���H����H�����H�5�[H��H�,	DH�81���=�f�H�H�L$dH3%(����H�� []A\A]A^�fDH���H������H���x�H�5�[H��H��DH�81��m=�D��A�H�5�EL��1���H�5�EL��H�����@���H������A	������H�5�EL���H�����E�H������A	�����H�5REL��� H�����E�H������A	������@H�����E�H������D	��
��uH�=1Z1��)�H�53EL���K�H�D$H����H�|$��!�H�|$�HB�H�|$=0����"�H�D$�	�H�T$H�5�EH��H����H�5�EL�����H�D$H��t5H����&�H����H�D$H���H�T$H�5�EH���C�H��tH����I�m����@H�5YEL���y�H��H�D$H��t�H��뉐��	����fD��A��#���f�E1�������� A�����f�H�|$�(�H���L���H�|$�1�H���9���H�|$���>����"����;���fD��@A����f.�H�IDH�5
YH�81���:����H�������>1�H�DH�5 XH�81��:�H��DH�5�WH�81��:��*�H�|$H�D$�9�H�|$H�X���H�55XH��H��DH��H�81��^:�ff.���1��uA�DAWA��AVAUATUSH��HH��$�L��$�H�$H��$�H�D$H��$�H�D$dH�%(H�D$81�����D���[�D�g�H��H�t$H��Ic�M��M�Ή|$ H��H�D$(�N��H�t$D�T$ ����A��~�H�H�UH�VH�A����H���H�}�D$H�D$0�5������DH��E1���H�;�������H���u�1�M����H��H�T$ �m�H�T$ H��H����@H��H�T$ �K�H�T$ ��H�~A�����H���O���H�����H�Ǩ���
��D$H�D$0H�}�s�����C������D�H�;I���Y�����D������*�H��M���D���I�l$H���X���H�BI�/�L$I�H�$M�eH�H�D$�H�D$0H�L$H�H�D$8dH3%(uqH��H[]A\A]A^A_�@�!��M���fDH�t$0H���c1��D$�>���f.�H�|$(���E��H�t$H����������"��
.�ff.�f���AWAVAUATUSH��dH�%(H��$x1�H�D$XL�l$0L�d$(PL��L��H�D$,PH�D$`PH�D$`PL�L$`L�D$X��H�z���HDŽ$�H�� H�t$@H�|$8H�L$`�&���H�l$`H����H�\$p�|$$H���&���A�ǃ����H�}H���� ��H�}Hc�A��H9��ju���t6D�G�H�EH��uH�E Ic�H��H��t	����C�t7�H��Hc����E��~(E�f�H�;H����Ic�H��A��H�����E9�u�H��$xdH3%(H�D$`�`H�Ĉ[]A\A]A^A_��H�����I���@H�H�ƃ�H���k����� ��H�BH�8H�T$D�D$�v6�H�T$D�D$H�@H� H�D$H�BuH�B H�xH�T$D�D$�?6�H�|$H�p聣��D�D$H�T$H�pH��tNH��8������~D���C�t7�H��D�D$Hc����D�D$E������fDH�B �O����H�xH�pH�T$D�D$�ٴ��D�D$H�T$H��H��u���T$$H�t$@H�|$8�M�L�d$hH�T$(L�l$hH��H�T$0�!��<+�ff.����H����ATUH��SH��H��H��uH�= S1��a����u�H�H�ƃ�H��u��t�H�5�DH�ωT$�$���T$H��H��I����?�H��H��t8I��t2L���<3�I�T$I�t$H�HI�$ tI�t$H���������tH��H��[]A\�fD�k?�H��1��4���ff.�@��AWAVAUI��ATI��H�5�pCUS��H��H��dH�%(H��$�1��Q��H�������H�D$hH�l$xL���L�t$pPH��L��H�D$hPH�D$HPH�D$HPL�L$HL�D$@����H�� H�L$h�T$`H�t$(H�|$ �w�I��H���RH�|$ H�l$0�?tLH���CH�D$8H���H�T$pH��$�H�T$pH�T$xH��$�H�T$xH�l$0�f.�H�D$8I���L��I���M�} H��$�dH3%(�H�Ĩ[]A\A]A^A_�DI�<$H���l�I��H�����H�D$HH�8H�D$P�� ��H����Hc�H9���p��F���E1�I��I�E H�D$@H�D$H�D$HH�D$H�D$XH�D$��f�H����I9���L��L���*�H��H�D$@���H��H����H��� ��H����H����H��1�H�$�p*�H�T$H�t$H�|$hH�D$h跤��H�$�H���F*�H�t$`H�T$PH�|$pH�D$p荤��H�t$`H�|$XE�O`�?urH��D��H��L���������#I��I��� � ���I�FI9��#������kH�|$ H�D$(H�l$0I�I�G�D$`H�D$h���fDH��$�H�����D�$L��$�D��$�DŽ$��š������'��$��Lc$�I�WP��t!H�D$HH�D$0K�IH��H�H�H�H�D$ H�D$P1�H�D$8A�G`��H�H�@H��H�H�H�@H�D$(����H�A�g����H�|$H�]H�D$X�b�H��H�D$`���DH�|$(�������H�D$8����D������H�D$0���f.�H�x�`����H�D$0H��\H�D$8H��H�D$ H�D$(�y���H�T$`H�t$XH�=DN1��4�H�T$hH�T$xH�T$hH�T$pH�T$xH��H���CH�T$pH�8��H���u�H�n�CH�5�MH�81��
/�H�t$`H�=�F1��J4�H�T$hH��$�H�T$hH�T$pH��$�땋T$`H�t$(H�|$ �&��L��$�H�T$pH��$�H��H�T$x��
�H���CH�5FH�81��.��$��AWAVAUA��ATUSH��H�H�T$HdH�%(H��$�1Ƀ���M�ƅ���H�H�D$h���<H�FA�H�D$pH�D$hH��$�D��H��$�H��H�T$0���H�t$8H�D$X����H�|$p�D$,��L��$�H�T$xL��H�|$p���H��$�H�L$xL��$�H�D$H��$�H�D$��tkH��t>H�|$t6�y��H�|$���H�L$���H�L$����fDH�t$L�������udH�8ZH�D$I���SfDH��t3H9L$�kH�l$H��t�yuH��������H�t$L�������CH�kH� tH�kH�SH��$�H�JH�T$ H��H�L$�<�H�L$H�T$ H� H��L�`tL�`I�H�t$L��L��H�D$H�DD��L��$�H�D$ ��H��H���H�D$@A�I�������H�EhA�H��tH�D�p@Ic�L��$�H�D$P�x@���?�������w����L��$�H�D$PH��M)�L�cJ�0H�H��H�T$�(�H� H�T$tL�cM�I�L��$�H�D$L�D$H�L$0E1�L��H�T$ H���g�I���e��������������m���H����+�H��$�H9D$ ��H�CH� tH�CH��$�H���H��$�H)���H�|$��H�D$HH�H��$�dH3%(�D$,��H�Ĩ[]A\A]A^A_��H����d�H���H���H���'�L��H��$�H��H�D$@��H��$�H���H��uH��诞��H��H����*�H����@H�|$8��H��$��A)�H�HH��$�H�PH�pH� tH�pH���;�����{���H�X�CH�5�AH�81��)��H���������H��L�xH��$�H�D$H��$�H�D$���%���H9L$�����A��tE����fDH�|$p������D$,�����������H�D$hH���TE1�A���A��A��"�)���A���
���I���H�������H�5��DL������I��H��t���L���G�H�
���H�L$@H�������L���J�H�����H��H�y���HE�H�D$@���H��H�L$�K�H�L$���^����-���f�H�L$L�=q�����H�L$H��H��H���\�H���$���@H���H���Q���H���CH�D$@�����H�|$�.��D$,H�D$XH��$�H�D$hH�D$pH��$�H�D$p�����E���{���H�����H�D$h���DA������}���H���^�������H���-�=�������fDI��tH�5;�DL��H�L$�N��H�L$I��H��L��H����P��H�L$HH��HD�H��o����1�������H�T$ H�5NFH)�H���CH�81��2'�H�t$L��D����H���j�f.�AVAUI��ATI��US��H��dH�%(H�D$1�H�$��@��1�L�$L���L����E���H�T$dH3%(urH��[]A\A]A^���o�Hc�L�4��;���u-�ݿ1Ʌ���9�}��9�u!1�H��t�H��������L���X��H���͉�1��������ff.���USH��H��8dH�%(H�D$(1�H��uH�����fD��u�H�H�Ѓ�H��t��uى�H������H�T$ H�\$ ����Ņ�xxH�t$ H9���H�������H���D$�����U���xu_H���
�H���uSH�sH�{�� �1�H�L$H���:��D$H�H���H	�H�H�L$(dH3%(H��uRH��8[]�f�H�� ��fD���<���H��H�t$���H�t$�%�����H�����@H�{�x����R�f���SH��H��dH�%(H�D$1�H�$H�����H�<$H�މ��*���H�L$dH3%(uH��[���ff.�@��SI��H����H�� H�t$H�t$dH�%(H�D$1�H�D$H�|$�H�����H�|$H�މ�课��H�L$dH3%(uH�� [���@��USH��H�t$H�5aC���H��tvH��H�|$�3	�H���+��H��H���
�H���$�H�|$1ҹH�����H�D$H�PH�pH� uH��H���5����tH���[]�f�H�p���U���H���CH�5b�H�81��]#�ff.�f���H��H�����dH�%(H�D$1�H��H�$�A���H�$������H�T$dH3%(u��H����i�f����'������H������H��uH���H�������AWAVAUI��ATUH��SH��xH�|$D�D$$dH�%(H�D$h1�H����H��H���y!�H��H�D$H�L(��D$ H�D$H�D$H�@hH��tH�Hc@@H�D$H�CH�D$(H�D$`H�D$0H�D$XH�D$8H�D$TH�D$@�=@L�|$XH�t$`H��L)�L��L)�L�M��H)���H�|$�J��|$��H��L�c�'�H�L$L)�H�T
H9�sI�4H��L)�H���9/�L�l$XI�T-L�|$(H� tL�{H��H�T$O�4'�&�D�L$$H�L$0L�t$`H�T$H�t$8M�H�|$�E���D$�D$ =t= �#����D$ H�T$HL��H�L$@H�t$`�D$T�6�H��T$TH%����T$ H	�H����H�L$hdH3%(H��uhH��x[]A\A]A^A_�fDH���H��I��H�D$H�+��D$ H��M���E���L��H�������5���H���CH�5>8H�81�� ������AVI��AUE��ATM��UH��SH��H��H�� H�t$dH�%(H�D$1���H�D$H�pH� tH�pH��L�E��L��H���:�H�T$H�T$H�T$H�L$dH3%(u
H�� []A\A]A^��Y�f���A��H�NI��1��{�ff.���E��A��^�ff.���H�NA��A�1��8����UH�537SH��H�`�CH�-��CH�;H�U����H�UH�;H�57H�H�D����H�UH�;H�57H�&�D���H�-��C�����H�.���H�57H���DH�}���H�}�����H�����H�5�6�k��H���CH�;H�5�6H��R��H�5˗��H��H�!.E�|�H�=.E�H����H�5�6���H�=�-E�����H���H�5�6�~��H�=�-E�����H�{�H�5�����H�=�-E1�H�����H�5_7����H�=�-E1�H�#���H�5Y6���H�=�-E1�H�Ǚ��H�5F6���H�=d-E1�H�k���H�5:6�o��H�=H-E�����H����H�506�P��H�=)-E�H����H�5�
�1��H�=
-E1�H����H�5�����H�=�,E1�H�u���H�5�5���H�=�,E�H�F���H�5�5����H�=�,E�����H����H�5�5���H�=�,E1�H�k���H�5�5���H�=x,E1�H����H�5�5���H�=\,E�H����H�5�5�d��H�==,E�H�����H�5e��E��H�=,E�H�5k5�-�H�=,E�H�5`5�u-�H�=�+E��H�5X5�]-�H�=�+E�AH�5K5�E-�H�=�+E�aH�5A5�--�H�=�+E�H�5;5�-�H�=�+E�H�515�,�H�=v+E�H�5&5��,�H�=^+E��H�5,5��,�H�=F+E� H�55�,�H�=.+E�@H�55�,�H�=+E�H�55�,�H�=�*E�H�5	5�m,�H�=�*E� H�55�U,�H�=f�D1�H�U���H�5	5����H�=J�D1�H�)���H�55���H�=.�D1�H�����H�5\3���H�=�D1�H�ѓ��H�5P3���H�=��D1�H�����H�5�4�i��H�=��D1�H�ɓ��H�5}4�M��H�=��D1�H�����H�5v4�1��H�=��D1�H�q���H�5�2���H�=~�D1�H�E���H�5�2���H�=b�D1�H�	���H�5G4����H�=F�D1�H�ݒ��H�574���H�=*�D1�H�����H�5+4���H��[]�
�f.���S����H�=@2H���D�^���H�=�3H���D�F���H�=�3H���D�.���
H�=�3H�{�D����H�=�3H�[�D���H�=s3H�;�D����H�=�1H��D����H�=�2H���D���H�=�H���D��H���V��H�=pFH���D�~��H���6��H�=�,H���D�^��H�����H�=�2H�c�D�>��H�����H�=�2H�;�D���H������H�=�.H��D��H�����H�=��
H���D���H�����H�=�2H���D��H���v��H�=�2H�K�D��H���V��H�=v2H�#�D�~��H���6��H�=n2H���D�^��H�����H�=/H���D�>��H�����H�=B2H���D���H������H�=�1H���D��H�����H�=�-H�[�D���H�����H�=I-H���D��H���v��
H�=6-H���D��H���V�H�w�DH���DH���(H��,��
H���c��H���DH��t�H�����
H�=h1H��D�7��H������H�=��H���D���H������	H�=61H���D��H�����H�= 1H���D���H�����H�=1H���D��H���o��H�=Q�
H�\�D��H���O�[H�?�D���f�1�����u������u�������u�������u������x��� ��@D��ff.��1���t��uP��tU����f��u�����u������u������u������u����u� Ð��D�����ff.�f�H��(L�WdH�%(H�D$1�HcGM��E�A�M�Y�D����� ��)‰��
����M9�sTA�Q���tR��D�lj�A��)����A��I�A�D	�����?H�� I9�s
A�A����	�H�����H!�H	��1҅�urD�ǁ��?H�� H	�H�|$�D$H�D$dH3%(u_H��(�f.��D��1�)�����?H�� M9�sA�Q���HA��A	�L	���D�lj�1�����?H�� �[����[
�ff.��ND�WA9���AWL�F1�AVAUATU�i�Lc�SH�_I��O�$0I�A�$E�D�HD��A��D$�E9���A��M��I��E1�1��I��A�S�E�
I��I��L�I�Չ�H�I�� I)�L��E�J�H�� H�у�M9�s�E�E���	I�V�H9�s$E�V�E��t�DD�
E��uH����H9�r�o�NA��A9���Hc�H��H�L��f�H9�sH��H���291t�rp��H�މD$�1��I��A�H��H��H�H)�H�ЉV�H�� ��M9�s�Hc�H���2��u*H�B�H9�v�J���t����uH����H9�r�o�D$�[]A\A]A^A_�@�w����D$�[]A\A]A^A_�1��DD�W�NA9��&�����fDUS��H����~C�ٽ��E�H�H�<�'H���4��H�‰Z�jH�BH��H��[]�f�H���DHc�H�4�H��t=H��H�����H���H�H��H�����H9���H�2H������H�1��ٽH�="�D��H�
A�C�E�H�H��'I��H��I��H��H��H)�H��L�H= �"���H�1H���H���CH��H9��(���H����@H�����H��t�H���H�1H���t
H9�uH���U���H����@UH���SH��H��(�D$dH�%(H�D$1�����D$I��fH~�fH~�f~D$H�� ������։ρ���EωL$����H�|$�����u_�T$A�Q�T$E1���A�QA��A��E�A����������U�5)‰H�\$dH3%(L����H��([]�D�T$� )�����L$	�A�I����T$�DH�|$�����T$A�A�A�� A�Q���w���-2�EA�@�H�A�|����A��A)�D��c�������AWI��AVAUATI��USH��LcoLcvE9�|D��I��Mc�I��Lc�C�.1�A9\$@��A|$����Hc�L�XI�,�L��I9�s@�H��H9�w�I�I��N�,�K�4�L9�r�^f.�I��I9�vKH��D�W�E��t�L��M��E1ɐI��A�P�D�1H��I��L�L�I�щQ�I�� L9�w�D�	I��I9�w���~�u�H�U���t�H���
��u��u�XH��[]A\A]A^A_��AVI��AUI��ATUH�nSHcFH�_D�gA)���H��H�H��
@H9��H��H���89:t���A�}����IcU1�D�`H�pI��L��IcVH�|��
�L��H���S�H��L�VH)ʋM�H)�H��A��A�R�H�� ��H9�w�I9�v;L��H��@H���V�H��H)�H��A�ӉW�H�� ��I9�w�I�q�H)�H��L�E��uf�H���A����t�D�@[]A\A]A^�DA��,���H��H��A�H��L��M��I�������1����H�@[]A\A]A^��H��t9�GH�
�DE1���1Hc�L���L��H��H���tHcWH��H�<�H9�uÐ�G�����AWA��AVA��A��AUATUH��SH��D�e�E�E�A�\$9�~����9���:���I��H�xE��~#A�O�H��H�D�f�H���B�H9�u�H�|�HcEH�uL��A��ta� E1�D)�fD�D��H��H����D	‰W�D�F�A��I9�w�E��D�DE�E�eH������H��L��[]A\A]A^A_�D�I9�vץI9�w���f.�AUHc�1�ATUHc�SH��H��D�g��D�H��H�H�ʼnD�H��H�� A9��H��tD9c~&Icĉl�A�D$�CH��H��[]A\A]�f��C�x����I��HcCH��H��uH��L������Icĉl�A�D$�C�I�}H�s����fDAV��AUI��ATUS��H��������M��tNH�-��DH����M��E1��@�t.H�}H��t;H����t�L��H������L��I������M��u�H��L��[]A\A]A^�fDH��H������H��H�L���H�}H��t�H�D$�;���H�D$H��뎐��H�*H��4�1��j���I���>���f������H��H�qH�E1�H�E�H�-��DH������H��H�D$����H�D$H������ff.�@��H��tS��A�<wGL�7I��1��f�A�	D�A�A��w"��0L��I��Hc�L	�M9�u�H�2�@L��H)�H�2�1�1�H�2�ff.���H��tfL��C�I��E1�L�7A���v�D�A�	A�
��w"I��H��I��I	�M9�u�H�2L����L��L��H)�H�2�1�E1�H�2L������A�H��txATL�%w�CLc�E1�U��H��Sf.�H�Z�C�A�A�����t19�~-L��I��pEM��I��L�I��sA�H��H��x�H��u�H)�[L��]H�A\�@E1�H�L���A�벐��AUATUSH��(dH�%(H�D$1����
�����$���H��I��H��I����tw�� tP�K���vH��+tS��-���I��1ۀ�0uOI�l$������A�D$���<X��I����,H�����u�I����HL�`���0t��Ҹ
D�L��H�L$H�����L�D$蛿�H�T$I�H��IE�M��tI�m�T$��u[H��H�ڃ��HD�H�t$dH34%(uxH��([]A\A]��K���1��ӐL�`�H������k���fDI���l�������"H������@I���u��C������2���������UH��SH���^��H�XH���B��H��H��H���T�H��[]�ff.�f���UH�T�C1�1�SH��(dH�%(H�D$1��v�1�1�H�D$���H��H�D$H�X H��tDH�����H��H������H�D$H�D$H�D$H�@ H��H�L$dH3%(uH��([]�H�=�$�����f���H��txATUH��S�H���u
�`@H����ƒ� t��	��v�,t��t<I��I��A�$��t�ƒ� t
��	��v��,u�L��H��H)���A�$L���u�[]A\��ff.���AWAVAUATUSH��I��H��H�t$dH�%(H�D$x1��;��H�
$�A�E<-�9��Hc�H�>��@A�E�D$ ������I��1�<0���M��ʃ�/����9��1�E1�E1��.DC��D�tQ�I��A�A���у�/�p��9��A��~�A��ԍ��DA���f��D$ f�H�D$H��tH��D$ ��tfWG*H�D$xdH3%(��H�Ĉ[]A\A]A^A_ÐA�E�D$ ��� ���f�H�D$H��t�H���I��A�E<-������D$ 1�<0���A�E�ƒ�߀�X��E�eE��t�H�-B�CA��I��H������H���A��0��f�f����)A������D$�'�A��H���\$����\$�$H���KH)�f��I��E�u��A���H*��Y��YR%�X��$E��u�L��D��f(�������M��D�D$8E��1Ƀ�߃�Eu<D��	�	������A�o@��+�@��-�uI�WE1ɍ}Ѓ�	��L��1�E�����f��+\$8��D��E���\$$�H*�ED�A��AN�f�$A��	~$�Q�H�5�"f��Hc��H*��Y��X��$A�����D$$�����I�|$$�&�%D)�;D$$�X�H�<"�$L��D)�H��Y‹D$$A�D�H��Y��a���D	������L��f��H���@H���*��0t�}σ���D�Z��0H�zA�[Ѓ�	w;D�T�H��C�lS�D�E�S�A��	v�H��H)�H������N��E���=L����I�����1�E1�E1�f���.�/���A�WM�_�zЃ�	����E�����D$8E�ĹA��<�NA�SM�{�zЃ�	�����M����f�A�EI��<0t��������D��)�D$$�D$���k��tH�H�� �<$�Y<��<$�d$����<$�|$A�L$�9��81�������)ƒ�~�D���9��D�D$(��D�D$(H��D�p�@A��	��M�u	A�@�L�t$(M�l
H�D$0H��D��I��A�V��
H�ǃ�0���M9�u�A��H�L$0H��H�D$(L�lE9�~9E�T$�H��E)�O�t�I��A�U��
H�ǃ�0�w�M9�u�H��D�d$8�L$$1�L�|$PA)��DI�I��D$(H�CH�D$XH�D$lH�D$HH�D$hD�d$8H�D$@�{��I��HcCH��H����	H�t$HH�|$@�D$���I���k�D�|$hH��H�H�EE���\	�D$8E�,�D$(�L$lD+|$B�t9�A��3�����|	A�6A)�D$C�L=A�D9�D��N�D9�AOŅ�~)�A)�A)ŋt$8��~3H��L$<��L��H��H���p�L��H�D$0���H�D$0�L$<I�ą�~
L����)�I�ċD$$��~�t$(L�����I��E��~L��D����I��E��~H��D�����H��L��L����HcU�x�HI���@9���H�4�L�@I�0H�t5�I9���H��H���9t��YM��L�|$P����H�������H�D$��H�$H�� A��%�=���E�]E��u	����L��D�D$$�'�D�D$$I��HcEA�U)…��"H��I�MH�H�T�fDH9��gH��H���:98t��SD�L$E���RD��%�=��?=p��
�H�P9�t$H�$�~$�Y�fH~�f�4$H���f
L����L����H����H����L�����$L������A�I�WA�o�~���@�}�4$�t$���f.�M�߃�0�z
�D)�@B�?I��A���0t�zσ�����0A�����L$8M��M�������I��E�uA��0t�E����A��H������H���������!f�f��A�����A��.�A���A��P�I���A�U�,)Љ�A������D1�)ȃ��c	I�MA��BЃ�	����D��H��1�A���
D��	w:��H���DB���4�JЁ�/~߃�	wf.�H�����0��	v�A��A����D�D$=4�������	�$1�1�H�
�D�t
Hc��Y������u�fH~�@��HD$H�$Hc���H�$H�؉�H�� -PH�� H	�H�$�Y$fH~�f�$H�� ��%�=�|�n=�|�YH���������D$H�$�<$�|$���L��1�I���7����|$$��!���D�d$8H��$L��A)�Ic��^��9�����D)�D$8)�ƒ�tHc�H�
��<$�^<��<$���D$�K����|$f����D$�ƒ��9���$�$�|$1�1�H�5�@��t
Hc��Y��u��fH~�HD$H�$����H�$�k�T$H�� �����)��~������4�
	�7H��4H�$�4$f�f.��t$�D����>����$L������$�"��f�A��.�d��{f��A�����E�u�$M�}�T$E����E��H���\$D���g���\$�$H���aE���T$�$D���D$�f�E����A��H���\$�$����$�\$H���H)�f��E�wI�����H*�L���Y��Y�f.T$�X�z�u��|$�$M���|$�A��H�����H����E�uI��E��u��$L��H���=�fD�����H�t$pL���L$<��H�t$tH��fI~��D$0�y�D�L$p�|$tA�W+UfI~�D����L$0�L$<)�օ���L���D��H�� �H�� H	�H�D$0�~L$0�^����
f/��I�����
�H��?H�<$H�� ����������|$��t^���wV��f/�r0�,��
Y��t��f���H*�f(���ufW"fH~�H�׉�H�� ���)�H�� H	��d$H�$�$fH~�H�� �����@H�� H�$�$�Y��X�fH~�f�$H�� H���9�u�t$���%L���M�L���E�H���=�L���5��,$�l$�H���D�D$(D�l$8D)������Y
�lf(���ufW@fH~����fDH�t$XI�~�������DD)�E��)�fH~��H�� �H�� I	�L�D$0�~D$0�4���M��L�|$P����H�$H�ȉ�H�� ���������t2�t$fH~�H�� %�-@H�� H�$�X4$�t$f�4$��T$������������PH�� I���<$H�$�$L	�H�<$H�� �$�������H�� H�$�$�Y��X�fH~�f�$H�� �ׁ�������|v`H��������H9T$��H�$�=���f�H�������H�T$H����H����H���
�� ������PD�$H��H�� I	�L�$�����,�f��*��\ȅ���H�������H�$�|��f/������M��L�|$P����DI��
A�	�t��0f/����Y
Njf(�fW����E1�1�E1�1��D$8E1���� f/�w�f/
�����u����E1��v���L��f��8�觿�L���"H��H�$�$����i�
�i�!����$�����|$fH~�H�� %�-@H�� H�$�\<$f.=9�|$f�<$����������H�$����"���L��I���Z��D$����HcT$$H�(�$L���Y��b�I�MA�U���M�����N�f��P�$�D$H�� H	�H�$�<$�|$�"�1����D�������%�-
��H�� H	�H�$�<$�|$����H�������H�D$����H�$H�� I���H��D$�Y����D$�j������������(������`���A��0����I��E�7A��A��0t�E���E�����M���O����D$E�7M���=���D�T$�����E��t������w���k)���9������%�H�� H�$�<$�|$����M��L�|$P�F���"H��H�$��M��L�|$P���H�$�����H�������!�H!�H	�H�$�5�������M��M���L$8A�C��1�D�tU����$�D$�Z�� ����!�H�� H�$���L���P�������������L$8D��~/E�L��G�4���E�A9�t��~���������A�T�D�b���j���1�A���T����G�I����AWf(�AVAUATUSH��x�|$�t$H�T$(L�D$0dH�%(H�D$h1�fH~�f�D$H�� �Å�����f(�%�=��=f�f.���f(�H�t$`H�|$d�L$ �T$�F���T$�L$ H�ʼn����fH~�fH~ҋt$`E1�H�� ��-���H���?H�� H	�f��H�T$�D$f��*��Y
��\}�Y}�X}�X�f/��D,��BD�F�A)�E��A����Ic�H�=$��f/���A���D$L�D$8E����E���'D�d$ E��D$�D$��	�����~	��1ۉD$�|$�����D$�D$H�������x�D$D$ ��D$\�����D$@O�����Hc��D$X�u�e���H�D$(���մ�H�\$0A�0I��fD�H��tH�@H�H�t$hdH34%(L���3H��x[]A\A]A^A_Ð���fH~��H�؉�H�� H	‰�%�H�T$�T$=�����H�D$(fH~��'H�������H�����	�)���nH��I���I�D�
H��H�����u�H�\$0H���7����5���@�D$L�D$8E���G���D�pA)�D�t$8E1�E���8����Zf��|$�D$H���D$���Y�D$\�x���D$@Hc��D$X�T$P�p��I��"\$X��
�D$ �T$P����
�‰�H�����Љ��������f(��^�
1�L�
D��t�tHcʃ��AYɃ��u��^�D�D$LE��t�
f/���f�ɋL$@�*��Y��X
q
fH~�fH~�H�� ��-@H�� H	…����|$ D�L$@�,�f��H�T$A�Q�Hc�I�_L��
�\$�A$ҋT$H�*΍F0�\����A�
�aA��^��\�f/�w|�-if(��\�f/���
A���LA�A��%�I�T�f�f(��\�f/���
H9���Y�f��H���Y��,��*؃�0�C��\�f/�v��G�D$ ���D$��T$蘱�I�NjD$d��x�|$ �T$��������D$P�\$\�\$@�D$X�D$3E��u	�6+D$`�\$8�A�������D$HI��H�I�E�t$8��~E��~D9���AO�)�)�A)Ɖt$8�t$��~7�D$H����	L�����H��H��I�����H��H�D$���H�D$H�ſ�Q��H��H�D$H�H�GE���b�|$XtH�������H�D$�v
�D����� )ƒ��;�)�T$8�Aօ�~
H����W��H��E��~H�|$D���B��H�D$�D$L����H�\$HcC9E��H��H�uH�H�T��H9��oH��H���9t��[�D$ H��1Ҿ
�X�����H�ŋD$H�����D$\�����D$@L��D�d$@L�t$��H��1Ҿ
���H��L��H��H���'����0�C�D�EE��u
�}����D)�D9�|�A��E1��H���A��H�t$H�ŋUHcF)…��P
H��H�MH�H�T�
�H9���H��H���290t��S���
�*
f.��t$`D�t$dfH~�A�A��2�� ��� )�f~����f�A��H*�fH~�fH~�H�� ��-�H�� H	�A�F��@���@D��D)d$8��D�d$ E1�D$����D��.���aH��I���N�
f.��
H��H�����u�H�t$0H���:���H��2���f��D$L�D$8E���H�����f��@)�����A����	������D$H�x����f���A*�f.�z�����A����������@D�t$@E���rD�\$H�D$ E��������D$8���)L�l$E����	�D$@M��L�|$@��I�\I��H�\$8�H�t$L������E�g�ōX0IcEA)���H��I�OH�I�T�fDH9���H��H���:98t�A���H�t$H�|$����P���0
A�����HcPE�GA)�u>H��I�wH�H�L�f�H9���H��H���99:t�E�A��H��D�D$H���E��D�D$H���|$�wE���xI��A�^�L;t$8��L��1Ҿ
���1Ҿ
L��I��L;l$������H�|$1Ҿ
I������H�D$���fDH��D�D$H�s���|$D�D$H�R	�D$����E���E	D	��a����l$L��L�|$@A��D�MI�^E��u
�}��E�����H���X��H�t$H�ŋUHcF)…��o	H��H�MH�H�T��H9��p	H��H���290t�riA��9����D�d$A��1�PfDH�t$H�|$����H���!���H���v���|$��A��L��I�^L�|$@A��9�LA��E�&M��L�l$��fDH�t$H�|$���D�PE�������A������[��I��H�D$����f���*��Y��X
�fH~�fH~�H�� ��-@H�� H	�fD�\�H�T$�L$f/��KfW
�f/����D$Pf�T$�|$ �D$d������HcD$ H��‹D$����D$@����E�Y
%A�H�D$f/L$�.�D$ I�_A�1H�|$���M��tL�����H�����H�D$(�t$ ��0H�D$0H���S�H��K�f��|$�\$H��	ڈT$X��������\$8E1����f.��D$P������D$8A��h���D�D$ �����H��������Y�f(���1��L�
�1�f.��tHcʃ����AYɃ��u�@���I���f(��@���DD������|$XH�D$��E1�H�t$�F�D$X��H��|����� )‰��|���D�D$�����~����\$@����H�|$1Ҿ�����UH��H�D$Hc@)…���H��H�MH�H�T�H9��[H��H���9t��G����fDf(¾�5�f��t$H���$��H�����@�D$X��D$\�D$@�D$���Y�f�f.�����L��fD��
NVf(��X�f/�w�\�f/����D$P�������w�C��t$ �DL9��f�B�H��H�S�<9t���X���f(¾��H�������H�D$�K���H�D$H�� ���7�����A��E��A��$������@H�D$E1�D$L���؉D$ ����L����(��I������H�D$H�� ��u��u���HcT$ f(�f��I�_H�C���H�փ��^��t$ �,�f��*���0A��Y��\�f.��$�D$@�����D$@�%`���I�L�fDH9����Y�f�H��f(��^��,�f��*��P0�S��Y��\�f.�z������H�À{�0H�C�t��a�A�A���#���A�A�H���%ڳI�t��C�H��H9�������Y�f��f��H���,��*ȃ�0�\�f.�z�������@�S��oI9��(�P�H��H�C���9t�|$P��t��t
���DH�|$�F��M���?���M���.���M9��%���L���#������fD�S�H��H�C���0t��A�9�9M��L�l$������w�t$ �x����|$@������D�L$\E���-����%Ʋ��f�ɋD$ �*��Yčx��Y��X
|�fH~�fH~�H�� ��-@H�� H	���A��D$��D	��y�������H�D$E1��-���A�1�D$ ��A�}���H��IcEH��H���`�H���c��H�D$����A�0L���C��D$ ���A��L��M��H�\$8L�|$@L�l$���A���S��Y������L��1Ҿ
���I�ŋD$\���6�D$@����X�f/����A�H�������D$�������D$\��D��A��I�^��L��L�|$@A��9�F�����1��DO�E�&M��L�l$���H�ljl$A��L��L�|$@���A�����E���%����l$L��A��L�|$@�uI�^����������D$\�\$ �D$@�,������������f�H�{I�u����������f.�H�������������������A����������'���D�D$�����{����D$\���A�����������D�����������T$f��D$ I�Of(��^��,�f��*��P0A��Y��\�f.�{'�|$@�U���H��������<)‰��K���H��������ff.���AWI��AVAUM��ATLc�UH��SfH~�H��(dH�%(H�D$1�fH~�H�� �����f(�fT
��f.
����f.��gf.���$H��H��4��uiH�\$�T$�Y�fH~�fH~�H��4-A�E��tH��A�|$Mc�Hc��%��H��A�T$�H�� ��
��B�4������.�-�A�E��u��A�A��ݟ�����<H��A���
��H�� ���	�H�� I	�L�L$�D$�X��\�fH~�fH~�H�� ���)�A��N�0A���1��H�HL9�s-@��H���������t=@�q�D��A����	�L9�u�E��xZI�A�$M��tM�eH�\$dH3%(�=H��([]A\A]A^A_�fD%���A���H�� L��H	��=���A���Lc�A�T$�Hcʀ<0t��DA�����	觞��nH�
t��IH����1H��H��@�2@��u�M���K���I�U�B���A���.��������A���9���0f�M�������H�PI�U��A������
���aH�
��NH���	fD�1H��H��@�2@��u��[���������H�������ff.����ff.���H������H��tH����f.���H�:����H��H�H��P(1�H������USH��H�H��tH��H�{H�u�SH�[H��u�H���[]�����A ����H�r����H� tH�G�fDH�G���H�G����H��H�R�`f����(�fD���H�fD�����uH�1��ff.�f���H�G ����H�G ��ATI��UH��SH��H�� dH�%(H�D$1�H����H��t0������H��tH�L$dH3%(��H�� []A\Ð�H��u�EH��A����f.�H�ރ�t��EH��A����H���H��u�H��H�t$�w��H�p�CH�t$H9t�H�{H�t$L���%���H����{��ff.�USH��H�5tCH��蛋�H�5�CH�xH��舋�H��t'H�T�DH�H���H9HtH�@H�@H��tH�+H��[]�ff.�f����Q�����g�����闓����������SH��H�?�`��H�{H��T��H�C[�ff.���SH��H��/��H�{H�C�"��H�{(H�C���H�{8H�C(���H�C8[�f���USH��H�oH��tH��H�����H9�tH�CH��[]�f���H�GL�GH�H��L9�u�'�H��H�HH�JH�H�H�H�@H��I9�u�����ff.���H�H�GH�BH����f�UH��SH��H�0H��tfDH�_���H��H��u�H��H��[]�i��f���SH��H�?�/tH���H���[Ð���H���3���[�ff.����SH��H�?�0��H�{[�&��fD��SH��H����H�{���H�{(��H�{8[�����H��t���f��ff.�@��H�����H�=T�H��1��R���H������H��tH�?鿄������SH�H�{�S H�[0H��u�&fDH�[H��tH�{H��t��y��H�[H��u�1�[�ff.����SH��H�����H�5�H��H��1���ff.����SH���H��dH�%(H�D$1�H�4$H�����1�H��H���F��H�D$dH3%(uH��[����ff.���SH���S��H��H���x��1�[�@��SH���3��H��H���X��1�[�@��SH��H� �ֺ���H�C [�f���H��H��H��H��H�����1�H������O���AWAVM��AUI��ATI��UH��SH��H��8H�D$pL�L$H�$H�D$xH�D$H��$�H�D$dH�%(H�D$(1��9I���x��H�T$$L��H��I���\M����thA�L��H��A�֋T$$H�,�H��t@��uH��H���K���T$$A��H�� H	�H�L$(dH3%(��H��8[]A\A]A^A_�f�A�G�D$$�����L��H��L���J���xt+�PA�w9��|H��L��H��H�$��E1��S���DL��H��H�D$��L��H��H�D$��L��H��H���(����A��H��t@��tA��H�� �>���f.�H��H���e����H�D$L��H�D$H���H�D$�h����O��H�(�CH�5��H�81��������AUI��ATUH��SH��H�r�����z I�Et_�^H����D� ��H��H�4�����A9�s/��D��D)�H��H�H�L�f�H�B$H��H9�u�I�EH�uH�EH��t	H�}�M��H��1�[]A\A]��H��^E1�H�1��r���f�E1��a����AWM��AVM��AUI��ATI��UH��SH��H�|$H�����H�mH��H��t*H��A�Յ�����u(H��H��[]A\A]A^A_�f�H��A�ԅ�����L��L���z��H�t$H��H��蘦�H��蠧���ATI��UH��SH��躠���u[1�]A\��L��H��H���H���S��[1�]A\�ff.��UH��SH��H���H�WH��t��t<H�{��wH�CH��t�tH��[]��H��H��H��[]����H��H�����ff.���UH��SH��H���;����uH��1�[]�fDH��H��H�+���1����H��1�[]�ff.�H�H����H��t�H�G�ff.�UH��SH��8H�?dH�%(H�D$(1�H��H�|$�f.��H�G��u.H��H��H��u�H�D$H�EH�D$(dH3%(uH��8[]�H�C���H�{�����@��H���GH��0�h����H���ff.�UH��H��SH��H�=E�DdH�%(H�D$1�H���5x����t1H���DH�$H�8thH�L$dH3%(H��ukH��[]�fDH���DH�8t1�����s�����u�H�����H�5 �H��H���CH�81�����@�C�����u�H��tˀ{u������ff.�f�UH��SH���"���H��H��t
H��H��[]ÿ�v���8H���i��H�b�CH�kH��H�
��H�H�=2�DH�PH�W�C�CH�PH�`�CH�H(H�P H��H�H�@H�@0�yw��H��H��[]�ff.�@��SH��H���@���H�q�CH�
�H�H�PH�T�CH�H(H�PH�e�CH�XH�P [�ff.���SH��H����H�H�X[��SH�����H��[H������ff.����>uH��H������1�H���@1��ff.�f�H���DH�8t�f�SH��藸����t[ÐH��������t�H��CH�5v�H�81�����ff.����UH��SH��H�������tH��H���<���H��1�[]�SH���W����u3���t=��H�SH�t�1��1�H�:$��H��H�H9�u�[ÐH�;[����1�[�ff.��ATI��UH��SH���C<t��t{<usH����@��H���C<u�H���@��H��L��H�������uLH�UH�2H�����tT��t@��w;H�R �K��H�4�H��$tH�UH�{A�ԃ�u7��<uR1�[]A\�DH�}H�W�fD�� t(H���f���tυ�t�H�=�1��I��f�H�R�H�=	�1��,��ff.��SH��H��H��dH�%(H�D$1��p��H��H�߾1H�$���H�D$dH3%(uH��[��l��ff.����ATI��UH��SH���Z����t�}tH�����L��H���-��[1�]A\�fDUH��SH������H�5�!H��H��諬�H��H���p��H��H��[]�2{��f�����E���UH��SH��H���t��H��H��H��聟�H��艠�f�UH��AWAVAUATSH��H��dH�%(H�E�1�����;$I����L�hH�E�I���wgH�@H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�t$I���A�$M����L�}��2fDH�PL�}�L��L��H���i���$I��H�xL��H���t��L��1�L�����L��H�����H�u�dH34%(H��u$H�e�[A\A]A^A_]�H��1�H������H�����q��I�~L�}���UH��AWAVAUATSH��H��dH�%(H�E�1��?$���Ϛ�H�E�L�hI��I���wgH�@H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�t$I���A�$M����L�}��2fDH�PL�}�L��L��H���)���$I��H�xL��H���4��L��L��艥�L��H�����H�u�dH34%(H��uH�e�[A\A]A^A_]�D���H�����9��I�~L�}��ff.�@��H�vH��t@��t
1��f.�H�������w��u�H��H�zH��H�=���1�H���ff.�H��t@��tH�G�H�H�ƒ�H��u�� t�H���H��tۨu�H�������w��ff.�f�ATUSH��H�� H�-n�DL�g(H�t$dH�%(H�D$1�H�}tnH�t$H���H��t@��tG���M��tH�T$H�5oL���gr��H�}t@H�D$dH3%(u<H�� []A\��H���ȣ��fDH�|$趙�@H�|$�V��诶�ff.�@��ATI��UH��SH�^處���tH��u[1�]A\�f���u�H�������w�H���t	���u�M�$$H�����H��L������H��H���������u�Hǃ�����1�[]A\�f�H���H��t|AUATI��UH��SH��H������L�k(����M����I�<$H�7�� t}H��H���H�����L��L��H�5v�����p��I�<$H��H��[]A\A]雼�����H�(H��t(H��H�5>����p��f�H���8���k�����H�_�H��[]A\A]������u(USH��H��H�.H��uH��H�����H���[]�1��D1�H�t$�L��H�t$H���f�����u8AUATUH��SH��H��H�H��u(H��H�����H���[]A\A]�D1��DL�n1�1��;��L��I���P��L��H���E���H�����ATUH��SH��H��L�%W�DdH�%(H�D$1�I�<$��H�}�s����t	H�tVH�=g�DH��H���H���Ϳ�I�<$��H�H�EH��H�T$dH3%(��H��[]A\�fDI�<$u��Į����u�H��t��u	H�t<H�F�CH�5��H�81����DH�|$�f��E����H�|$���o���H��������;�����J��f.���H��1��j��H���D�U���H�=<�H�j�D���H�v�D�!��H��H�W�D���H�=K�D�&��ѿ�H��H�?�D�Ҏ�H�=3�DH����f���H����H��t
������ø�f.���H����H��HD�����AUATUSH��HH�t$dH�%(H�D$81������H�|$I��umH�>�DH�;�dH�D$(H�D$ H�T$ L��H�=��H���;��H�;�AH�L$8dH3%(L���KH��H[]A\A]��H�|$螠�H�|$H�oH���:H�_H� tH�_�&��H�I��H9���;tzf�H�{H9�r_�;:��H9�vaH��H�����;:t	H��H9�w�H9�tEH��1�L��H)������
u0H9�w�H��CH�5��H�81�諺�H��H9�v�?:u�H�|$��H��DH�D$H�;tLH�D$(H�D$ ����f��{:u���H�|$覓����H�|$�F�����H�|$膓H�D$�芰�H��CH�5��H�81����H�K�CH�5��H�81����f.���H��H��0dH�%(H�D$1�H�t$���H��tH���~�H�L$dH3%(uH�����ff.�@��������H��H���dH�%(H�D$1�H�t$�W�H�L$dH3%(uH���蝯�ff.�f���UH��SH��H��dH�%(H�D$1�H���C�D$H90twH��H��/H�t$���H��H��� ��l$H���H��t�t3�������	舃�H�D$dH3%(u(H��[]��H��H���ݛ��H�������ٮ�f���H�����H��H���'�����H��dH�%(H�D$1����H�t$H��.H����H��t9H��H�@H� uH�L$dH3%(uH���@H�B��f.�1����7�����H��uH���CH�8����@��u
H������H��t:H��tD@��u@��tHH��CH�8���f�H��zCH�8�@H�a�CH�8�@H�!|CH�8�@H��~CH�8�t������H��H�=��D1�H�5��i��H�=�DH���ce����H�=��D�x���H��賺�H���[��@H���f���H�=��DH��t1�H�5���Bi��f��ff.�@��H�=m�DH��t1�H�5g��i��f��ff.�@��ATI��UH��SH��H�� dH�%(H�D$1��H��tH�H�D$�4�H���|�H�H�XM��t@L�`H��tGH�}CH�hH�P H�D$H�D$H�D$H�D$dH3%(u"H�� []A\�L�%�zCL�`H��u�H�-A�C��"��f���1�1��S����H�
}|C1��>��ff.���H��tH��tH��H��1����DH�5�}CH��u�H�5|CH��H��1�������AUATUSH��(dH�%(H�D$1���~H�H�D$��t!���_���y��f��H�|$���H��H���H���]�I��H����H�H�X0H��u��H9kt2H�[H��u�H�L$dH3%(H����H��([]A\A]�f��P���t#H�t$�H�l$蟭�H���f.�H�x0����D���H��H��t!L�kH�sH������L��M��u�I�$�H���_���H�x0����Q���H����H�56�H��H��1��9y�H�|$�?��H�|$H�5�H��1��z�H�n������ff.���AUATUS��H������H��L�.��teL�f��u~I��tdL���f��H����� H���A��H�H�J0L�`�H�HH�
��H�HH�B0H���[]A\A]�D�S��I��I��u�H��H���[]A\A]��������U��D��UH��SH��(dH�%(H�D$1���H��H�H�pH�S�SH�C0H��t�S��tH�L$dH3%(H��u5H��([]��CH��H��H���H�=e��H�$H�l$��h��谨���SH���C�H��[H���W������H���s�H�H�xH�rH�BH����ff.���SH����H��tH��[��H��1�H�=D��ߞ��[����H����H�
�uC�H�H9H�HD�H���f���H�����H�H�@H������H����H�H�@H������AVAUATUSH��dH�%(H�D$1���I���S�H��H���DH�8��H�=�DL��H�5���b��H��u+H�L$dH3%(L����H��[]A\A]A^��H����d���D$$A�Ņ�~��L�t$�3���H�=�1��е�H�����H��L�������A9�|�H����ۍ�H�����t�	���C0L���D$躓�H���r��H���D裡��������H�4uCH�5��H�81�����n��ff.���AUATUH��SH��(L�-��DdH�%(H�D$1�H�A�DH�8��H����H�T$H��L��I���^����tHH�\$I�$H�;H9�t�W�����/tO�H�H�D$dH3%(uxH��([]A\A]�fD��F��H��L��H�hH��H���^��I�$�����I�$�DH�t$莠��H�t$���J���H�tCH�5��H�81�����T��H��tCH�5��H�81��̮�ff.����H�}�D�@��ATI��UH��SH��0H��DdH�%(H�D$(1�H�;��H���5����tH�EuH�;tQH�="�DH�T$ H���}����u)H�;��H�L$(dH3%(��H��0[]A\�f�H�D$ I�$���苟����u�H��t@��u
H�EtYH�sCH�5��H�81��ڭ�f.�H�|$H�t$�!�H�t$�:����H�|$�D$貈�D$�Z���H��衳����(�������f���AUATUH��1�SH��H��(dH�%(H�D$1�H�T$�����t,H�L$dH3%(H�D$H���H��([]A\A]�D�����I��H�D$�m�I�$L�%y�DI�<$��H�}L�l$蠶���t	H�t+H�=�~DL��H���o�I�<$tjH��b���fDI�<$u�������u�H��t��u	H�tAH��qCH�5?�H�81��m��DH�|$辅�k���f�H�|$�V��H���L�����a����蝢�ff.�f�AVAUATI��UH��SH��H�� dH�%(H�D$1�H�H��I�Ń�I�� ������tv��wqL�5R�DI�>�(H���ps�����D���D$�X��H�T$L��H����*�������T$H�C I�>H��H�D$��H�D$�fD����H��H�L$dH3%(��H�� []A\A]A^���r����KH� �H����DH�{ H�T$L���/������I�>H�D$u�H�|$��L��蚴����]���I�>�S����C�����H�D$�Z���H���Q�����I���H��<���H��蠰�������H��oCH�5Z�H�81��p��H��H�T$L�����H���r�����H�D$H�XD���D$���H�T$L��H���g)����������D$H�����f�H�[��f.�I�>H�l$�����H�|$��m���f�H�{H�T$L������H����f����H���DH�D$H�T$L��H�8��fDH�|$�������ff.��SH��dH�%(H�D$1�H����H��H���tGH�50{DH��uk1��$���H�����t\H�5u�BH����a�H��tHH��H��H���J����t6H�$�2H�H�ƒ�H��u���uH�H�5�zDH��tH����H��t��1�H�\$dH3%(uH��[��3��H��dH�%(H�D$1��'���H��tH��H�����H��t
H�xH��u1�H�T$dH3%(uH��Ð�Ke��H��t�H�$H�x($u����Ğ�@SH������H��tH��H���7��H��H��t
H�xH��u
1�H��[�fD��d��H��t�H��[�f�ATI��USH��dH�%(H�D$1��`���H��u+1�H�L$dH3%(H����H��[]A\�f�1�H��H�����H��t�H�xH�(H��uAH�E u/H�}H��H�<$�7����t�M��t�H�$H��t�I�$��H�}��f��+d��H���i����諝�ff.�H��u1҉��fD@��u�SH�H��H�ƒ�H��t'�$����H��$t+�H��tH���[�fD��uH�H��t@��t�1�[���fD��H��1�����f���USH��1�H��dH�%(H�D$1��L����t	H�t7H�=@xDH��H��蝁���uiH�D$dH3%(��H��[]�fDH���DH�8u�趗����u�H��t��u	H�tmH�8kCH�5��H�81�����H��H�,$�m���u0�E1ۅ��z����؃�H�|��Qa�9]w��^����H�}����I���H��身����#�������ff.���U1�SH��H��dH�%(H�D$1�H�������uH�D$dH3%(uOH��[]�fDH����l���H�$u(�1ۅ�tˉڃ�H�,�H�}�>e�H�EH�$9w��H�8�8$���q�����UH��SH��H��8dH�%(H�D$(1�H�|$1�蔮�����H�t;H�=�vDH�T$ H�t$�]^���uiH�D$(dH3%(�	H��8[]�fDH��DH�8u������u�H��������H���H���[����t��f�H�T$ H�Eu
H���DH�8t<H�=�uDH���g��g���H�=�uDH�T$ H�t$�]����I���H�T$ ��H�T$�^���H�T$��u�H��t@��u
H�EtH��hCH�5z�H�81�訣�H��H�T$諩�H�T$���j����������USH��H��(dH�%(H�D$1�H�|$�	k�1��������tH�u
H���DH�8tFH�=�tDH�T$H�t$��\���tH�\$@��uZH���j��H�D$dH3%(u^H��([]��k�����u�H��t��u	H�t&H��gCH�5��H�81�輢�@H�;��c��H��趨����h�����������S1�H��H��dH�%(H�D$1�H����1҅�uH�L$dH3%(H��u=H��[�H����i���H�$tH�8� ^�H�P��f.��H������ff.�@��H��uH���@��u�����D��H��u�Ð@��u������H��u�Ð@��u������AVAUATI��USH��H�� H�dH�%(H�D$1�H�Ѓ������tL��wGH�o ��]���t�CL�c H��螨�H�D$dH3%(�kH�� []A\A]A^�DL�-��DI�}�&1�迪���tH�uI�}��L�5�rDH�T$H��H�D$L���{�H�l$H��tH���%]���t�CH�l$L�e�薊�L��H��L� H���uc�H����\���t�CI�}� ���H�|$�l{�����1�� t!H���\���t�CL�c���@H�o��f�蛑�����,���H��t��u	H�t/H�eCH�5��H�81�����H�|$�6y����H���٥���������*��f.���USH����H��H� t0��������H��H��u9H�KH�#���H��[]��H��H�{��k�H�CH��[]�@H�sH���\��H�������w������H��H����L�
���1�PH�0L�i��PH�Q��P�[��H��(�fD��USH��H��H��uH��膒�fD@��u�H��H�H�Ѓ�H��t��u�H��tH��H���r���H��H��[]����t�H��H�t$�Nx�H�t$�����U��SH��H���Z�1�9�t�k�H����[]�D��ATUSH��dH�%(H�D$1�H��toH��H����udI���e���t8H�����tm��ty��wtH�{ H��t=H��L���y����HE��%H�߽���H��L��H��������u�1�H�L$dH3%(H��u8H��[]A\�f�H�{�f.�1�H��H������t�H�$H�8�s���输�ff.���UH��SH��H��H��t@��t5H��H���zr�H�����u2H��H��H��H�5����[]�j�f.�H���H��u���f�H��jCH�H��[]�ff.���AUATUSH��H��(dH�%(H�D$1�H��u
H���R��f�@��u�H�H�ƒ�H��t��u�H��H��tMH��u^��t#H���{h�H�H�ƒ�H��t��H�fDH�D$dH3%(��H��([]A\A]Ð��t�H����u�H���@���H�EH�ƒ�H��������1�H�T$H���$���t�H�t$H�����H����H�H�ƒ�H��t��H�H���Mc����5�苅�I��H�D$H�8�{]�I�EL�%�DI�<$��1������tH���I�<$tnH�=mDL��H���$^�I�<$�qH���!��H��H���6�����F�mH���sW�9�������k���H�H�ƒ�H��������p����S�����uH�uJH���Π���u>f.�H�E�\���I�<$�Q����������D���H�E��H��_CH�56�H�81��d��@H�D$1��H�4�I���Ǘ�I��D� E��t$A�T$�H�@I�T�fDH�$H��H9�u�H�L$E1��������fDD��H�t�I�t�H��t@��u
H���@}�H�L$A��D9!w��V���DH��H������x���H�|$�t���H�|$�r�5���H��袟����D����	��������USH��H��8H�-�DdH�%(H�D$(1�H�}��H�=kDH�T$H�t$ �kt�������H�T$H�=�jDH���\�H�=�jD1�H�t$ �R�H�}teH��u H�D$(dH3%(u\H��8[]�f���u�H�H�ƒ�H��t̀�H���@H�|$H�t$�rH�t$�V����H�|$�s���ff.�@��AVAUATUSH��@dH�%(H�D$81�H��tH��@��t*f�H�D$8dH3%(��H��@[]A\A]A^��I��H�H��H�Ѓ�������������1�����L�-q�DI�}�>H������H��H�\$I��L�d$ H�l$(�t_�H�T$����H��L���\��I�}�Q���H�|$�r�B���f�H�����H��H�\$I��L�d$ H�l$(�_�H�T$����H�{H�5����Qq����@����������H���.��1�H�T$H��I���l�������H�D$H��H�\$L�d$ H�D$H�l$(�^�H�T$��tH�D$H�5~��H�8��p�����H��L���u���p���H�{ H�5U���p����H�|$�o������@��H��H�5���魜�ff.�f�SH��H��H��t3H��t@��u���H��H��H�5����q��H��H��[��H�|$��f�H�|$H���ff.����USH��H��dH�%(H�D$1�H��t@��t(1�H�L$dH3%(H���H��[]��H�H�Ѓ���tJ��tf��waH���Q]�����H�-�DH�}��H�{ 辣�H�}��u�H���}p�H���]���tTH�{蓣����f���@���W������N���1�H��H���y����9���H�4$H���e��H���'���DH�;H�� 謅��@������f�H�;H�� 蔅��X���@H���0n�D����6��fD��USH��H���X�H���T�H��H�5���H��H����H��H��H��[]���AUATUSH��H��8H�t$dH�%(H�D$(1�H��u	H������@��u�H��H�H�Ѓ�H��t��u�H����H��H�l$���H�I�Ń�H��tMH��tGL�d$H�t$L��H��L�������t;H�D$H�t$(dH34%(��H��8[]A\A]��H�|$����@H���X[�����H�����tm��tA��w<H�{ H��t�L��H�t$�&M���H���t�����6���H���7m��)���f�1�H�T$ H�������N���H�D$ H�8��H�{�f�H���X����s����~��ff.�����r���f�USH��(dH�%(H�D$1�H�$H�t$H��tH��@��t'�H�D$dH3%(��H��([]�DH�5qdD1��j�H�����t�H�5��BH���#K�H��H�t$H��H���L�H�<$H��t�H�t$�M���H�T$H�2H�JH�NH�1H�RH�H�PH9Pt)H�}�f���H�5�cD�H������M���DH�0H�=�cD�av����Z��f.�AWA��AVAUATUSH��8H�oH�_ H�|$L�o(H�T$ L�e(D�w0H��dH�%(H�D$(1�L���@������L�d$ I�|$$��H��赽��E�<$I��H�']CH9(�,��H���&Q�L��H�=��H��1��B��I�D$H��t+A�t$��t"H�xH� tH�xL��H���1�謃�H���Đ�D��L��H��L������H�D$(dH3%(��H��8[]A\A]A^A_�H��舐����	S�H��L��I��H���@��D��L��H��L������DH�D$H�T$H��H��H�H8�@@H�L$�D$��A��u-H��t(H�����H�\$L�k(H�{@�6=H�C8�J���DH��H���=���E�4$M�l$M��tA��uL��H���ns�H�D$I�D$H��t�u
H�t$H���Ns��D$A�D$����K��ff.�AWAVAUI��ATUSH��xdH�%(H�D$h1�H���xH�-�DH��I��H�}�EH��uH���@����u�H�H�Ѓ�H��t��u�H���%H�}�2H�{(��f�H�|$`L�t$ H�D$`)D$0)D$ )D$PH�\$8L�l$@L�d$H�;1�L��H�D$X����H�}��H�-�ZCH�EH����M�������H9�u
I��k�"H�D$hdH3%(��H��x[]A\A]A^A_��1��<��L��H�C(I���B������P�L��L��I��H����=��1�L��H��L���R���O���D����M��������������A�������I�$�����L���"�����}���H�#SCH�5ܳH�81����f�A������I�$�����������M��$�M���BA��$���I��t������H9��/L���M����D���A��I��u+H�t$ H�QH�߈L$D�D$�p���D�D$�L$I��E��td����H�E�h���@������H���g�����f�H�|$�vf����H�|$�h�����H�t$ H��H�����I��I��u�L���+\�L��H��� ��I��$�H��t�uH��L���p�A��$���a���fDH�5��H�=Z�1��K\�����fDA�����DL���[�L��H���]��H�E���L���[�L��H�����L��H���6��H�E�Y���H���e���H�5ֱH��H�OCH�81��
���u��D��AVAUI��ATUSH��dH�%(H�D$1�H�G(L�d$H�XH�PH�+H9�t|H�{($tYH�{H��u�o��@��u�H�H�Ѓ�H��t��u�H��thL�5�DI�>t{�H�����I�>tXI�E(H�PH�MH��H9�tH����H�t$dH34%(�u@H��[]A\A]A^�fD��t��d��@L���f�fDL���Xd�x����^��ff.�ATUH��SH��H����1�H��t@��t H9�u3H���H����[]A\�H���X���H9�t�H���K���H��H���PJ�I��H��utH���@J�H��H��襎�M��H��H�5��H��H�PCH�81��D��@@��tH��t'H���g���D���H��H���Q���H���V���1���I�I���u�H��跿��H���w����H��H�ߺ$[]A\�T���@���������H��u�fD@��u�H�H�ƒ�H��t[USH��H��u��?��H��H����H��H���#Q���u�}t1H��H���
��H�{uH��[]�H��H��[]���f���H���p���ff.���SH��t.H��uPH��1�H�=���O��H��H����~�H��[��H��1�H�=ٲ�'��H��H���~�H��[��H��1�H�=_
��H��H���~�H��[�ff.�@��ATI��UH��H��S��q�H��H���_~�H��L��[H��]A\鍂�ff.�f���SH����H�[�f.����g����UH��SH����}�H��H�5$���H��H���)��H��H��[]�ff.�@��SA�2H��L�+�H��H�
p5��H��RCH�t$H�t$�ʻ��H��u
H���]{�D��u�H�H�ʃ�H��t��u�H��t)H��t;�$H��H�����H��$t%H��[����t�H��H�$�a�H�$�H�T$H��H�=­����D��S�H��H�t$H�L$�A��u�H���&�H��H��[�ff.�f���AUI��ATI��USH��fH�=�MCffH�d�H�(H����-[H��tL��H��HDž�H�=P��+��M��tL���>[�H�7RCH;uL��L��H�=o����L��L��H�=;����ff.���ATI��H��UH��SH��H�� dH�%(H�D$1��[�����H��t��uH���H��t�H���N��H�{��H�=�WDH��H�5�L�$$H�l$H�\$衂�H��tH�D$dH3%(uNH�� []A\�f�H�XDH����t�H��L���"�����H��許��H�5q�H��H�?ICH�81��M���{�H��PCH�5`�H�81��0����USH��H��t'�:t"H��H��H����4��H��H��H��H��[]���H�CPCH�5�H�81����f���UH��SH��H�����H��t&H��H��tH�@(H�E�H��t�V0�H��[]�H��1�[]�������u�@U�H��SH��H���JK��tFH�PCH��H9tG蒰��H��H���D�H��H��H�5q�H��[�1�]�x{��H��[]�f��K���H���H�54�H��[1�]�?{�ff.�@��ATI��USH��H��dH�%(H�D$1�H��tQI�|$(H��t$H�-(�DH�}tIH��H�5G����b5��H�}tKH�L$dH3%(H��uDH��[]A\���T�H���fDH�|$�\I�|$(��H�|$�F^��y�ff.�@��UH��H��SH��H���H��NCH�H9���H9��„�uH��H���U�H�[H��u�H��[]���H��t?USH��H��H��=�H��H�5K���H��H����?�H����C�H��H��[]�fD�c=���USH��(dH�%(H�D$1�������t	H�����t0H��1����H���nT�H�L$dH3%(��H��([]�H�Z(H��tWH�-��DH�}tYH���ы�H����<�H�5���H��H��H�D$�3��H�}H�D$u�H�|$��\H�D$�D1��<��v���@H�|$�[뛺1��c��x���UH��SH��H����H��SDH����tH��H��H��[]�����H��[]�f���AUI��H��ATI��USH��H�����H��H���V������H��t
��uH���~H��H��H��L��[]A\A]�9�@��H��LCH��H��H�8鷑����AWAVI��AUI��ATI��USH��dH�%(H�D$1�H��DH�$$H�8��I��L��L��L���;������L��1��	���H��H����DL��L��H���
����tI�<$H��uI�$H�[H��u�H�$H����I�<$H��tH9�tL��H������H�L$dH3%(H��ucH��[]A\A]A^A_��I�<$uM�,$L��L���j���H��H���f����@�#q��������H��DCH�5�H�81�����u�L��趃�L��H�=�
H������@��H��dH�%(H�D$1�H��H�$�s�H�L$dH3%(uH����u�ff.���H��twUH��SH��H��H�t�DH�8tf1�H��H�������u/H��腽��H��H��u�+H�[H��t1�H��H�������t�H���[]�f�H��1�[]��1��D�p����u�H��CCH�5�H�81��g~����ATI��H��UH��S�*��H��H���^���tH��L��[]A\�\Q�H���tg�L��H�=�H��貹��f���USH������H�Ӆ�t
H�������1�H��uRf�H��H���e�H�[H��H��u�H����H�}�8�H��H�5����H��H����:�H����>�H��H��[]��u�H�H�ƒ�H��u��� t�H���H��t��u�H��������u���H��1����H��H����H���X����1�H����H��H���Z���H��1�[]��7��1��^����UA�L���SH��H��H�
o*��H�DCH�t$H�t$���H����H��t��tH���np�fDH�H��H�Ѓ�H��t��u�H��tS�$H��H����H��$t
H��[]�fDH��H���n�H��t8H��萀�H��H�=��H���޷��fD��t�H���V��f�H�T$H��H�=��謷��ff.����ATI��USH��蝍�H��H����S�H��H��H��蔏�H��t[L��]H��A\�`{�[�]A\�fD��USH��H��(dH�%(H�D$1�H��uH���Fo�fD@��u�H�H�ȃ�H��t��u�H��tpH�-يDH�}��H��H�C���1�H��PH��L�
O���PH�����L����P芬��H�� H�� H�}tCH�L$dH3%(��uiH��([]Ð��t�H��H�T$H�4$�T�H�T$H�4$�l���@H�|$H�$��UH�$�@H�|$H�T$H�4$�SH�T$H�4$�A����p�f.�SH��H��@dH�%(H�D$81�H�����tE��tI��wDH��H�T$H�4$����H�T$H�4$H�����H�D$8dH3%(ukH��@[�@�����ߐf�H�\$H��H�L$)D$ H�s��H��L�
8���H�D$8L���H�t$ PH�{�PH�#���P�-���H�� ��"p�f���USH��H��H��uH���Vm�fD@��u�H��H�H�Ѓ�H��t��u�H��tH��H�����H��H��[]����t�H��H�t$�S�H�t$�����UH��SH��H��H���|�H��H��H��H��[]�$1�@���w������AWI��AVI��AUATUH��SH��dH�%(H�D$1�H�>�DH�8�L��1�H���w��L�����|�G���E1�H��H���(M��D1�H��H���C����tI��M��uI��H�[H��u�M����M���!M9��H��L��L��M���O�A��t)L����k���˶��H��H����M�������I�H�Ѓ�H����M��t�H��t���u�H���KL��H��L���u��I�^@A��H���EH��H��H���&������H��ECH�H�$H�PE��thH�D$dH3%(�(H��[]A\A]A^A_�DM���.����#���f�M�vM������A������I�H�Ѓ��C���M����I���H��u�I�~X�����H��H�5���L���g���j���f�� ��`�H��DCH��H��L�pH�H�@H�PH���.&���,���f��+h�������H��;CH�5%�H�81��v��������L���WP����f���V$��H��I�F@���M���"����#����l����AUI��ATI��H��UH��SH���z�H��H����V���tH��L��H��L��[]A\A]�:Z�H���B_�L��H�=��H��耱�����8����H��H��H��H��H���g��1�H�����H��H��H�5�����{�f.���SH��0dH�%(H�D$(1�H�G(H��t)H��DH�;tYH�T$ H���D$��H�;t.��t"H�D$ H�L$(dH3%(uKH��0[��1���@H�|$�$�#P�$�fDH�|$H�t$H�$�UNH�$H�t$��Uk�D��AWAVAUATUSH��H��H�wH�?�/���H��t"E1�H�x$tH��L��[]A\A]A^A_�fDH�sH�;�$��H�+H���H���B1�1����H�5DFDH��H��I�������D�I�D$ H�5��BL����,�H�{H�D$��*��H�=FDH��H����:�I��H����H�5�BH���,�I��L�hH�s�B�H1��7W�H��H�@ �EuH�E H�H�sL�(A�H�@($H�|$H�PI�W H�p H�PI�W �@0L�pH�H��I�G �{6�H������@������H��L����V�����@������H�5/ED1�H���%��I��H������������H�	�B�(1��mV�I��L�x �@uL�x I�/H��t@��t.M�oH�=�DDL��H��I�GM�o M�o�8=�����H��L���%V�����ATI��UH��SH��PdH�%(H�D$H1��	���H��t
H�x$H��t"1�H�L$HdH3%(��H��P[]A\�H��DH�8t{H�l$H�l$H�=DDf�H��H�5�)D$ )D$0L�d$H�D$(�o�H�$H��t��H�|$(H��H�5%%��D$ ��n�H��H�T$H�$�^���fD�[c�����x���H��L���Ȏ���;����.h�ff.�AWI��AVAUE��ATUH��SH���T$�L$H�������I�L����H��uI�_E1�H��H������I��H��tkE��t
A�>��H��H��L����I�FH��$��I9�t;H��H���`��H��tH�@(H��[]A\A]A^A_��H��H��I���4�낋L$��u:�fH�=�7CffH�N�H�Hǀ��$�M9p�*���M�I�����u����T$���u���H�E<CH9�e����f.�fH�=X7CffH�PN�H�H����$�5���ff.��AWAVAUE��ATA��UH��SH��H��L�5�;CI9>t:A���b���H��$uE��uH���H��t;�$H��[]A\A]A^A_��1��)���H��$t�H��[]A\A]A^A_�@I�>H��E��D��[H��1�]A\A]A^A_���ff.�@��AWAVAUATUSH��(H�|$dH�%(H�D$1��dn�H�\$I��L�sH� tL�sA�}��L����V�����H�kL�L9���A�>#��H��:CL� L9���L��M��H9�r�H��H9����;:u�H��L��L��L)�荂��;:��H����L��E1�1ɺH���f���I��H��$��H��udH��1CH�T$H�5Y�H�81��wn��H��9CH�5�H�81��Xn��H��H��L��L��L)����s�����u�H�������w�H9�����H�D$H�D$H�D$L��H�L$dH3%(�}H��([]A\A]A^A_�H��H)�H��v�{:uL�{L�����H�|$H��1�L)��)�H�5�H��H��8CH�81��m�H���
���H�5��H��H��8CH�81��rm���c�ff.�f���H���V�H��H���<��ATI��UH��S��H��$tH��H��|DH�8t+H��[]A\�L���Hq�[H��]H��A\�	y�f��k^��H��t˄�u��u�H�u�H����r���u�L����9�H��H���Q�H��H�5�H��H��1CH�81��l����E1����:���f.���E1��1�����ff.�f���E1�1ɺ���ff.�f���A����������A�1ɺ���f.�UH��SH��H���O���H��t:H��1�H�z$tH��[]��H��H�����H����H����[]�DH��1�[]����ATUSH��H�� H�wH�?dH�%(H�D$1�H�D$�l�����u(1�H�L$dH3%(H����H�� []A\�fDH�sH�;H�T$���H��H��t��bH�H��tH�t$H��tH���b���t�H�t$H�����I��H��t�H�xH��t(�'��H���r���I�D$H�T$H�CH�S �]����;q�H�T$H�zI�D$H��t�uH����M�I�D$H�T$H�
=DH�	H���I�L$���`�D��ATA��UH��SH���DE��tCH�[H��t:H��H���?�����t�1�H��H�����H��t1�H������H��t
[H�]A\�f�[�]A\�fD����DAWI��AVA��AUA��ATI��U1�SH��H��D�D$H��u,�D	�ukI���H��u_H�X5C�H�H��t�L��H�����H��uE��t�H�[봋T$��t�8t#H�x$t4E��t(H�5CH�I9�tH9�u1�H��[]A\A]A^A_ø��1�L��H������H��u�L��H���K���H��u���@��E1����
���f.���E1��1����ff.�f���E1�1ɺ����ff.�f���A���������AUATUSH��H��H��u
H���"\�f�@��u�H�H�Ѓ�H��t��u�H��H����H��H����I��H��t>H�{(H���j����u^H��H���w���u.H���?l�H��H�=��H��荣��DH��H���]w���t�H���l�H��H�=W�H���_����H��H��L����H���bg�M�l$I��$t7L����n�H��L��[]A\A]Ð���>���H���OA��1���f.�H��H��A��_���ff.�f���SA�1L�ޏH��H��H�
���H��,CH�t$H�t$�*���H��tH��H���
@�H��[�H�T$H��H�=u�耢����ATH�5��BUSH��H��dH�%(H�D$1�H�G H�x�]�H�-f8DH�C(H�H�$H��u*L�%b���L���I�H��H�18DH��t��WuH��H��H���DU�H��H�������H�sH�;��H��t4H�x$t-�S	H�T$dH3%(H����H��[]A\��H�;H�s�?�H��1CH�{H�H9tQ�j�H�s(H�1�H��H�=�1�H�6��R��DH�=�7DH��H�5����b�H���U���f.���i�H�K(H�=h�1�H��1�H�1�R��D�����[����AUATUH��SH��H��H���T=�H��I�����1�L��H����x�H��t$H��H��I����H��t.�H��[]A\A]�L��H���8��H��H�=~�H��膠��L���i�H��H�=d�H���l���ff.��AWAVA��AUE��ATA��UH��SH��H��HdH�%(H�D$81��>��E������A�F�L�t$0H�D�H�D$H�D$(H�D$�L��H���d�H;\$��H�L��H�D$0�i;�I��H����H��H����H�����E��A��D!�D	�H�x$�u�H�T$L��H��D�D$蝻��H��t�H�D$(D�D$D#@0E	�D�@0�n����i'�H������H�=
�H��1���P�H�D$8dH3%(u=H��H[]A\A]A^A_�L����g�H��H�=�H������H�T$0H��H�=��������Y�ff.���SH��A��H����H���p���H��[�ff.���SH��A��H��1ɉ�H���C���H��[�ff.���SH��A�H����H������H��[�ff.�AVAUATUSH��dH�%(H�D$1�H�����tsH��I��A��A���DE��t[H�[H�����tNL��H�����H��H��t�E��u&H�}$tXH�}H��tGHcEH�t�OS��DH��-CH9u�@�H�L$dH3%(unH��[]A\A]A^���W���L��H���t���H�����t�H��H�����H�$H�z($�{���H�x���H������f���H�$HcP@H�x8H�t�R���X�AVAUL�-U-CATA��UH��SH��I9}t2A�����H��uE��uH���H��t3�[]A\A]A^�D1����H��t�[]A\A]A^�f.�I�}[D��H��1�]A\A]A^�W������1ɺ�`������1��P���H�a38531fdU�3fSH��fos�f�3D�!H�3D)�2Dfoa���2D))�2D�?u~�+�+�pDH�-�2DH����=e.C��H�8&CH�p+��H�=x2D�4Hc��-�H���+�H�-6.CH��H�=�[H��]�,�f�H��H�=a2D�1��L�X+Hc�H)��j���fDH�5Ɗ���L�Hc�H)�H�=�-C�`���H�5������L�Hc�H)�H��?���ff.���U�SH��H�=#C�e�H����*�H�=$C�H���I�H���*�H��H�=J�H���,�H�=8#C�
��H���*�H�=/�H���+�H�=P(C���H���^*�H�=�H����+��EH�=��+��(H�=B���H���%*�H�=��H���+�H�=�'C�1��H���)�H�=�H���n+�H��H�=��_+�H����8�H��H�=։�H+�H��H�=ډ[]�f�fD���F,C�D���=6,C�D���pH�1�H�=��HD��1������H�0DSH��u(H����H���sA�H��/DH��t�H��H��)CH�8��6�H�=T�[�������H��H�=�+C���H��)CH�8H���q�f���H��H�=�&C��H�U)CH�8H���q�f����@��t1�H��u
�f�@��u�H���H���������1�H��t@��t�f�H�H�у�H��u�H������t5��u$��t H�H��t@��uH�1�H�Ѓ�H��t�1��f���f.�I���t�.fDI�@�H��I���uI�x�1��e�����t��I�x��J���f.���H�BH�H �B ��H�H��H)FH�r�!ff.���H����H��H���ff.�@����f.���H�2�����H��H�RH�0����H��I��H�JH�RH�0A�����H��I��H�JH�RL�@H�0A��@��H��I��H�JH�RL�H L�@H�0A����H��H��I��H�JH�R�p(L�H L�@H�0A��H���@��H��H��I��H�JH�R�p0�p(L�H L�@H�0A��H��Ð��H��H��I��H�JH�R�p8�p0�p(L�H L�@H�0A��H��(�ff.���H��H��I��H�JH�R�p@�p8�p0�p(L�H L�@H�0A��H��(�ff.���H��H��I��H�JH�R�pH�p@�p8�p0�p(L�H L�@H�0A��H��8����H��H��I��H�JH�R�pP�pH�p@�p8�p0�p(L�H L�@H�0A��H��8�D��H��H��I��H�JH�R�pX�pP�pH�p@�p8�p0�p(L�H L�@H�0A��H��H�f���H��H��I��H�JH�R�p`�pX�pP�pH�p@�p8�p0�p(L�H L�@H�0A��H��H�ff.�@��H��H��I��H�JH�R�ph�p`�pX�pP�pH�p@�p8�p0�p(L�H L�@H�0A��H��X�ff.����H��H��I��H�JH�R�pp�ph�p`�pX�pP�pH�p@�p8�p0�p(L�H L�@H�0A��H��X�f���H�BH�@H�@�HH�BH��tH��H��H�n�f�H�@H��H�n�f���H���ff.�@����f.���H������H��H�JH�����H��L�BH�JH���ff.����H��L�JH�JL�BH������H��H��H�J�r L�JL�BH���H���ff.����H��H��H�J�r(�r L�JL�BH���H���f���H��H��H�J�r0�r(�r L�JL�BH���H��(�fD��H��H��H�J�r8�r0�r(�r L�JL�BH���H��(���H��H��H�J�r@�r8�r0�r(�r L�JL�BH���H��8���H��H��H�J�rH�r@�r8�r0�r(�r L�JL�BH���H��8�ff.�f���H��H��H�J�rP�rH�r@�r8�r0�r(�r L�JL�BH���H��H�f.���H��H��H�J�rX�rP�rH�r@�r8�r0�r(�r L�JL�BH���H��H����H��H��H�J�r`�rX�rP�rH�r@�r8�r0�r(�r L�JL�BH���H��X�@��H��H��H�J�rh�r`�rX�rP�rH�r@�r8�r0�r(�r L�JL�BH���H��XÐ��H��H��H�J�rp�rh�r`�rX�rP�rH�r@�r8�r0�r(�r L�JL�BH���H��h�ff.���H�1��f����H�VH9Wu
H�NH9Ot�f�H�N H9O u�H�W1�H��t�H�v�
�;uم�~-H�~H9zuˍy�1�H���H�LH��H;LuH9�u�1�����f.���1��f������u	H�1��f����=�dDH�H�Ѓ��ff.���H��H�������dD�ff.���� �fDAWI��AVE��AUATA��UA��H��S�Ӄ�H��H����H�qE1�H��t
H�	A��D�L$��D�L$L�xE��tH�m�p ��H�h���D	�	�@�p E��tH�E��tH��T$P��tH�H��[]A\A]A^A_�E1��ff.�SH�hCH��E1�1ҾE1�1�H��jH�8����H�S0^AXH���H��u[�H��H��1�E1�jE1������ZY[ÐATI��UH��H�rSH��H�uH��t@��t0H�CH�pH�EH��t@��t	[]A\�@[L��]A\�d6�@�[6���f�S��fH�=�CffH��0�H�H�@0����Cu������H�z�Hc�H�>������H���Hc�H�>��fDH�����[��H�y[��H�	"[��H��![��H�y![��H�9![��H�� [��H�� [��H�i [��H� [��H��[��H�y[��H�[��H��[��H�Y[��H��[��H��[��H�9[��H��[��H����[��H��[��H�	���[��H����[��H����[��H����[��H����[��H�)���[��H�9���[��H�I���[��H�i���[��H�����[��H�����[��H���[��H����[��H�I���[��H�y���[��UH��H��SH��H���L(�H��H��H��[H��]�H8��AT1�A��U�Չ�SH�=��UU�H��A9�t���t8H�lj�H�5�|1��ED�H��H�5�����H�CH��[]A\H�8�"�H�5 �H���a�����ff.�@ATI��UHc�SH��H����L�$�H�#�[]A\�ff.�f�USH��H�_���<w+H�����H��Hc�H�>��DH�sH��t@��tAH��[]�f.�H�sH��t@��u	�l2�@H�sH��u�H��[]��H��H��[]�B2�f�H�sH��t@��t9H�sH��t@��tH�{t�H��H��[]�=��DH���2���fD��1��AWAVE��AUI��ATI��USH��(H�dH�%(H�D$1�H�D$H�� 9����̓��tj��H�t$��>���I����>�9XuOH�t$H9puD�@A9Gu;H�T$1�L���\���A�l$H�D$N�l�1�M��tA��uL��L���E1�L����$H�L$dH3%(u!H��([]A\A]A^A_�@H�T$1������D�D��H��H��H��H��H�����1�H�����UH��Hc�H��SH��H���F�H��H��H��H��[]��@��AWAVAUATUSH��8H�jH�ZdH�%(H�D$(1�H�nH�D$$H�EH�@L�xH��t��t2�H�L$(dH3%(�H��8[]A\A]A^A_�f.�L�#L��M���I�� ��t{��tG��wBH�=*\D��L�C H�E I�Ń�I�� �D$D�l$E9�u\����y���I���u���f�A���a���H�T$ L��H��裝��H�D$ L�@��L�CA�� u�L�C�DA��urH��������������H�{ H����H�T$L���'�������H�D$����fD�K=��������L��H�������H�L$H�T$L��D��L�D$�����tB�T$�D$L�D$D9������H�M�����pH�� H��H	�H�MH�U �����H�E��uTH�����H
I!�H�EL�e �%����1�H�T$ H���a���������H�D$ H�8���H�{���H�����H�E ����H�����H�} �I����8A����H�5�D�PJ���H�5�D�@J���PXH����I����PXH����I��AVI���AUI��ATI��UH��S�b4�H�ML��L��H�H��H��H�hH�@���@��uH��L���-�H��[]A\A]A^�f�H��tKH��tH;wXt@H�N�H��tGH�H������u8H��tKH��t=H�A H��t(H�r�H���B��H�O`H��u����f.�H�A�H�A�AUI��ATUH��SH��dH�%(H�D$1��[!�L��H���P!�I��H��tWH9�tBI��t,L��H����"�H�T$dH3%(uGH��[]A\A]�fDL��H���Z���H���(?�H���H��H�,$�?B�H����U?�DUH��H��SH��H��� �H��tH��H��H��[]�U"�DH��H��H��[]�Z�ff.�@AVI��AUI��ATI��UH��SH���CH��t
H;wX��H�]�H����H�H��H������t?���H��H�@H�@H�@ M��tI;l$Xtt�E��H�E�M����I����H�k H���][I�u�L��H��]A\A]A^���fD1���,�H�@H��H�@H�@ �I�T$0H�zI�D$`H��t��u�H����*�M���{����L�sM��u[]A\A]A^�fDL�sM��t�A��u�L��H��[]A\A]A^�*�fDH�_`H���[���H�H�������
���H�޿�s�H��H�@H�@H�@ H���?������f.�1����f�H�_`H��u�1����H��H�@H�@H�@ �p����c<�H��H�C H�������������H��H���)��v���H�¾����H������=���H��tc@��u]H��CH�WH9t]H��
CH9��H�
>C�$H9u4Hc�H��UD�ru$H����H�G(H�D�fD�$�f���Hc�H�
^UD�Au���uSH�@H�H�xXH�D?�f.�Hc�H�
&UD�A�g���H��� t�H��H�ǃ������=�H����H�D���@���AUATUH��SH���^�G�L�%�C�H��qH��A��1�I�<$�3�H�}H�
X|�H�5�q觽�E��~B1�L�-�q�I�$��L���JN�HcÃ�H��HEH�x�/�9]�H��1�[]A\A]Ð��H���uH�H�H�1��f�UH��SH��H��H���"���uH�H�EH���[]�DH�EH���[]�ff.��USH��H��H��H�-�DdH�%(H�D$1�H��H��@����uH�D$dH3%(u+H��[]�H��@H������H�<$H� 聢����:�f.���H9���AUI��ATI��USH��H���fDH��tH���	�L�I9�tSH���"�1�H��H���I�H�H��t�H��t��u�H��%�H=�u���t�H�{t�H�C�H��1�[]A\A]�1��ff.�f���H���CJ��H���f���H��#J����#��UE1�SH��H��L��w H�OH�D����A����%��P����H�{H��XZH��uH��H��[]�@�S	��H�5��H��H���l�H�]H��t��tH�e����H��H��[]�@H��H���m%�H�e������H�H��t�t1�ÐSH��H��H��H�I��A��I��tE1�H��[�D���ʀ�H�_H�H��t�@��u�H�1�H�ʃ�H��u�H��H��fDH��H�T$����t�������1���u����H�T$H�H��t�H��t��u�H��H��H�D$�$�H�D$�g���f.����H�=���k�ff.���U��
SH��H��dH�%(H�D$1����H�5*DH��H���w@�H��H��H�$��H�L$dH3%(uH��[]��7��AWAVAUATUSH��H��(dH�%(H�D$1�H��@�t$H�5�H�$H�D$�D$�%�H�<$u3�|$��H�L$dH3%(H�D$��H��([]A\A]A^A_�H��H�=ax1�E1��WE�L�%jWH�$L�-��H���GH����I9�}YH�CJ�<�@��tAH���I��H��tL��H��M���h
�L��H����I��H��� u�L;s}H�C ���'�H���A�<$,tY�|$H�u�H�5rlH��HD��
�H��
CH��H�8�#�H�����5�H��
CH��H�5�wH�81��+?�H�5ՉH������f.���SH��H�?� ��H�[�ff.���H���c:�1�H���ff.����SH���SQ��H��XH����}�H��`H����}�H����E�H����H�C H��tH9X(tH��[��E��[�ff.���SH��H�?���H�sH�{[�R6�f���SH�����H�G0tH�x8H��t��H�H��[�f�H�PH�����f���SH�G0H��H�x(�������t������uH����w��H�CH�8�;9�H���/9�H���#9�H���9�H���9�H����8�H�����8�H���H��t��H�����8�H�����8�H��X�8�H����8�H����8�H��[���DH����8�H����8��4���ff.�ATH���B�UH��1�S�& �H��L�` �@uL�` I�,$H��t@��t&���E�I�D$H��[]A\�f.�H��H���������SH��H���`��H1�[�f���AWAVAUATU1�SH��HL�%�DdH�%(H�D$81�I��$�����I��$�I�����I��$�I����I���MI��$�H�$�KH�D$I��$ H��tDH�@H��H��u�I��$8��I��$(H�D$��I��$@I��$0H�H�D$�n�I��$HH��H�D$ ���f��L�%�
DH�D$(I��$X�=�I��$XH�T$0H�5���H�D$0��H���CH��@ H�@H�D$0H��Ѐ%L�L�L�H$HD$H�HD$HD$H�HD$ HD$(H�T$8dH3%(uH��H[]A\A]A^A_��A1����H��H����S�����H���T�@��H����<�@���w�����WA����PXH�������H����H�=,X�H������H���f.���AUI��ATI��USH��fH�=CffH��L��H�H�CH�P8H�h@H�SH�PH�P@��L��I���~��L��H����>�H�CH�P�H�SH�hH���[]A\A]�UH��SH��H���*�H��t51��
H���["�H9�HM�H��H���H��HI�H���H��H��H��[]�ff.���USH��H��H��*0�H�sH����!�H�s H����!�H�SH��t-�
��~'��H�ZH�l��H�3H��H���!�H9�u�H��[]�DH��tKH�H��H������t��t$���HE�����tH�1���@H�W1��uH�B�1��ff.�f�HcBI��A��H�vH�
��u1�����@I�QH�R���I)�I�Q J�T��L��vBA�$�ff.�H��H��t8�����t��uH�PH��t	H�BH��u��DH�@H�@��fD�ff.�@H�OH�H�F8H��H9�s.H�VXH��€u�"fDH��8H9�sH�P H��€t��u�1��ff.���H��fH�=��BffH�x�H�8H�WH�B8H�RX��tH���|���1�H��t-H�P �u@H�B�H��H��t�H�R��H��HE�H��H�����SH�58dH��1�H�=9d��H��[�j���f.�H�1�B�H9:��H���BH98��H�|CH98��H�<�BH98��H��CH98toH�X�BH98��H�CH98��H���BH98��H�`�BH98��H�pCH;8tH�$�BH;8����������f���f.���f.���f.���f.��@�f.���f.���f.���f.�PXH�����H����f��fD�W��w1���u
H�G�D��H�H�x ����t
sH�G�1��DH�H�x ��ff.�@H�=�DDt�DH���&����tH���H�o�BH�5 nH�81��5�fD��ATI��UH��SH������spH�KL��H�S�shL�K �s`L�C�sXH�3�sP�sH�s@�s8�s0�s(��H��P[]A\�ff.���ATI��UH��SH���J���H���shH�KH�S�s`L��L�K �sXL�C�sPH�3�sH�s@�s8�s0�s(��H��P[]A\�f.���ATI��UH��SH������s`H�KL��H�S�sXL�K �sPL�C�sHH�3�s@�s8�s0�s(��H��@[]A\��ATI��UH��SH�����H���sXH�KH�S�sPL��L�K �sHL�C�s@H�3�s8�s0�s(��H��@[]A\���ATI��UH��SH���J����sPH�KL��H�S�sHL�K �s@L�C�s8H�3�s0�s(��H��0[]A\����ATI��UH��SH�����H���sHH�KH�S�s@L��L�K �s8L�C�s0H�3�s(��H��0[]A\�fD��ATI��UH��SH������s@H�KL��H�S�s8L�K �s0L�C�s(H�3��H�� []A\�ff.�f���ATI��UH��SH���Z���H���s8H�KH�S�s0L��L�K �s(L�CH�3��H�� []A\�ff.����ATI��UH��SH���
����s0H�KL��H�S�s(L�K L�CH�3��ZY[]A\�D��ATI��UH��SH������H��H�K�s(H�SL��L�K L�CH�3��ZY[]A\�@��ATI��UH��SH�����H�KH�SL��L�K L�CH��H�3[]A\��ff.���ATI��UH��SH���J���H�KH�SL��L�CH�3H��[]A\��ff.�@��ATI��UH��SH���
���H�KH�SL��H�3H��[]A\����ATI��UH��SH������H�SH�3L��[H��]A\�����ATI��UH��SH�����I�4$H��H��[]A\��f.���UH��SH��H���{���H��H��H��[]��ff.�f���AUI��ATI��U��SH��H���B���H��L��L���H��[]A\A]��ff.���AUI��ATI��UH��S��H������Hc�L���)�H��L��[H��H��]A\A]��f�AVI��AUI��H��ATM��USH��H��H�� dH�%(H�D$1�H�T$H�D$�O$�H�T$H��1�H��tH���DH�x@H����n�H�T$H���������n�H�\$H���BL�sH�CI�$M��taA��u[L��L�����H�sH��H��t	@��tMH��H�sH��t@��u��H�L$dH3%(H��uRH�� []A\A]A^��H�sH��t�@��u�L���i�H�{�H���H���0���H�@H�D$�"����M%�ff.�f�AWI��AVE��AUATI��UH��SH��H���
Hc9���Ic$L��I��H���B�A�$L�+E��t&L�����H�CH��H��[]A\A]A^A_���M@��H�C�אH�GH�xt(H�PH��t������HD��f�1��P�g-��UH��H��SH��H��dH�%(H�D$1����H��t6H�����uH�T$dH3%(u0H��[]�fDH����#���fDH��H�$��&���$��ATI��H��UH��H��SH���<���t,A��H��H��t[]A\�O����[]A\����[1�]A\ÐAUI��ATUH��H��SH��H���u��H��H�=ZH��I��1��^2�H��L��H������H��t7H�þH���%�1�H��I���%�M��L��H��H��H�5f1��#!�H���BH��H�8��H����f���H��tH9�t
1���H��BS�H��H�=�Y�H���5�H���<�1�[����ATUS���u��[]A\��H�?H��L�&��
���uL���
���uL�e��[]A\���H�E��[]A\�ff.��H��t;�W�Ё�������	ЉG����uS�H����<tH��[�3�@��H�H��t���2����H��fH�=d�BffH�\	�H�H�@H���tH�@HH��t	H�@�8tH�����H���[��H�=�dZH��1��)%�f���AUATUSH��H��H��t\H��fH�=��BffH���H��L� I�D$H�P8L�h@I�T$H�PH�P@�!�H��H�5'��H�����I�D$H�P�I�T$L�hH��H��[]A\A]�ff.�@H��u�f.�UH��H��SH��H��������t(H���.�H�}H��1�[H�^��H��]��DH��[]�f�H�G�����tBATI��UH��S1�fDH�����L���H�4��h���H�E;��r�[�]A\�f���f.�UH��SH��H��H�CH���u.H�{H��tH���w���H�CH���uH�@�H��H�XH��u�H��[]���ATUSH��dH�%(H�D$1�fH�=L�BffH�D�H�8H�GH�X8H�@X��tH���H�H���,�H�$H�@H����H�SI��H��u2H�K �uzH�A�H��uaH9�t�@H��8H9C u�H�SH��t�H�B�����t�1�DH�����L���H�4�� ���H�SH�B9��w��fDH�xH�����H�$H���0��H�<$H���2�H��H�L$dH3%(u	H��[]A\������H����#�1�H���ff.���H��t@��t��H�H�у�H��u� u��u�H�G�fDU��SH��H��H�dH�%(H�D$1�H�������t5H�$H��t,H�pH�N H9HuH��u4���<t*<	t&fDH�����H�=QaH��1��G��H�=��C���R��H�=��C�H���>��H�D$dH3%(uH��[]���f���AVAUA��ATI��USH�.fH�=�BffH��H�H�CH�P8L�p@H�SH�PH�P@H��u�H���~��fD@��u�H�E��H��u�A�}�H��I�t$Hc��1�H�CH�P�H�SL�pH��[]A\A]A^�DL�M��A��I��t���ATI��UH��SH��H��t^H��A����L	�uL�/���H�H��H�� H��t,I�$��u6H�������H��H!�I�$H	�I�T$ H��[]A\�H����H�����I�D$ ��ff.�@��AUI��ATUH��SH��H��H��CH��u&L�%ȆfD�L���#	�H���CH��t�H9��~I��t@�}u:H�EL�eH��t9H��������?H9�wBH�tI�<$��6�H��1�[]A\A]�H�EI��H��u���I�$H��������?H9�v�H���l�H�����EH��1�[]A\A]�ff.�@AUATI��H��US��H��H���BH�8�8�H�Ń���H�<YHc�H�>��f�H���CL�-�TH��u!D�L����H��H���CH��t�L��H�5�nH���
��H���(�H��H�5�nH������H��H��[]A\A]�f�H�1�CL�-�SH��u�D�L����H��H�	�CH��t��f.�H���CL�-�SH���m���f��L���S�H��H��CH��t��C����H���CL�-z�H���%�����L����H��H���CH��t������H���CL�-ISH�������L�����H��H�a�CH��t������H�!�CL�-�PH���������L����H��H���CH��t����ff.�@H��u�$�D@��u�H��BH�OH9u�w2Du�UH��SH��H������H��uH�H�ƒ�H��t��@tH���$[]�H��H��H��[]�7���AUM��ATI��UH��SH��H���B H�~��~9HcЃ�I�����H�L$H�H��L��H��I)�H)�H�L���H�{H�L$L��H��H�Ⱦ��H�{H��tBH��H��t5H���A��t(H��M��tA��uI�U��H��H�]�HD�H��M��H��H��L��[E1�]A\A]��ff.���H�L�BH��
���ff.�f�AUATUH��SH��dH�%(H�D$1�H��tgH��I��I��H�{L��L���&����tBH�$H��t9H��tH�]H�PH��tG�����t<H�L$dH3%(u0H��[]A\A]ÐH�[H��u�H��tH�E1���fD1���7��H����ATI��UH��SH���q�H��t5H�s H����H��t#H�sL��H���	���H��tH�P�����u?H�CH�@H��uHH�C H�xH��t+H�sL������H��H��tH�C���<t�H��[]A\Ð[1�]A\�f�M��t�H�PI�$[]A\�1��ff.���L�ȃ�H��tHH��tzA��t^M��uGH�% E1�D�PI��I��A��t�I��I��E��t�L�L�ȃ�H��u�E��H�M���A��u2I���H��u&E��H����f�E��H�U���I�A D�@ A��A���w���ff.�USH��H��H��uH�����f.�@��u�H�H�ȃ�H��t��u�H��H��t]H�EH�@H�@�@���t6H�KH��H��t��uH��H��H�T$��H�T$H��H��[]�DH�K��f.���t�H��H�T$�^��H�H�T$�@��SH�FH��H��H�wH��H�P�� ���H�k[�f�ATUH��SH��H��dH�%(H�D$1�H��t
@��tO�H�uH�F H9EuH�Euh���<t^<	tZH�D$dH3%(��H��[]A\�DH�H�ƒ�H��u���t�H�CH��t��u�H���H��HD���H�=��CH������t�H���u��Å�t�H�}���H�} I���,�L��H�5;WH��1����4$����{�H�$H��,Df	P�9�����ff.���ATUH��SH��H��dH�%(H�D$1������u5H��H�5���H���C��H�D$dH3%(uQH��[]A\�f.�H�GpH��H�x�����t�L�$$M��t�1�H��H������I9�t�I�t$ L���4�������ff.�f���SH��H��H��H��1�����H9�tH�s H�����1�[�H�OH�H�GH�4�H9�r�Rf.�H��8H9�s?H�H H��€u�H����t�0H�A�H��H���u H�y�1����H��t��%fD1��DH�y����H����Z�H���@H�OH�H�GH��H9�r��Z��H��8H9�s7H�P ��u�I��H��H��课���¸��tL�������@ ��H����Z�ff.�H�OH�H�GH��H9�r�Z��H��8H9�s3H�P ��u�H��I��H���?�����tL������@ ����H����=Z�ff.�@ATA��H��UH��S�>���H��tIH��H�@���<tH��[]A\�E��u;H��H�����H��H��tH�CH��t
���<u�1�H��[]A\�fDfH�=8�BffH�0��H�8�����H��tH�xH��H���_���H���f.�AWAVAUATUSH��H��(H�H�h�H��H�H��uH���
�@��u�H�H�Ѓ�H��t��u�H�N I��H�vH�vI��D�q�I�� L�nH��tcH����H��H�� A9����� H�SuH�SD��H�,�H��t@��uH��H����H��$tIH��(H��[]A\A]A^A_������E��D��H��L��H�����H��$t%H����H���f.�����w�H��(L��H��L��H��[]A\A]A^A_�I�f�A���t҉�H�L$H�t$�i	�D��H�D$�\	�H�t$H�L$;pu�H�L;hu'H�|$�@9GuH�������H!�H	�H����H�Ѓ��b���f�H��H�L$�3��H�H�L$H�Ѓ������H��H��H�RH�pH������DAWAVAUATUSH��H��8L�H�|$A� �H��E�o I�w1�I��A�E�M�$��N��L�`H��L�pD�h I�D$H�D$H�p�I�t$�H��t@��txH�D$H�H��H��I�$H�ƒ�u=H��I�$H��u]I�GH��H�x�H���U���H�PH��I�T$���I�$$��H��u(I�D$�H��8H��[]A\A]A^A_�H�����{���H��� ��H�{Hc�H9���V����Lc�I�U�H)�H�{H�$H�|$�� tvf�H�D$J��tlH�I�GH�@�����t8H���H;t|�B��H�<���H�BH9L�t]H��H9�u�I��L9,$twH��� u�H�C J��u�H����H���H��H�����.���H��H����I�$$����1�I�GH�4H��tS@��t5I�4L��H��I���z�L9,$u�H�D$H���H��������b���H�tH��I�4�3��븐I��fDH��H�L$(H�T$ H�t$��H�t$H�T$ ��H�L$(u�H��H�4$����H�4$H�=�OH��1����H��H��t.H��H��H�5�B1��	�H�r�BH��H�8���H�����H�5�BH��������ff.�UH��SH��H��H�~H�����H�PH�S�uH��H��H��[]�K��H��[]ÐH��I��A��H��taI��t�@I�A�H��I�����I�y�1����H��t�H��E1�H��1�AP�E��L�����H���f�H�wH�N H���t�l��H��t�H�H H��t�Jf.�H�A�H��H���u0H�y�1��5��H��t��fDI�y�����i���DH�y�����Q���ff.�f�L�M��A��I��t����ATI��UH��SH��H��tFH��A����L	�u4�t��H�H��H�� H��tH�������H!�H	�I�$H��[]A\�H���(��H��H!��t��"Du
H9��$1�ÐH��H��H��H��H	Шu��"Dt�f�@��t�$H��u��@���>�$@��u�ATUSH��H���BH�WH;tSH�
|�B�$H;u5�m"Du,H9���H��t@��uH���H��uH�^H;_t}1�H��[]A\�@H���H��tH��t�@��u�H���H��u��"Du�H����H�����GH�����Nf.�z�u���f���I��H��H��L���)����j���I�|$I�$ tI�|$H�uH�E tH�uH9�t�H������t�1��.����c!D@�f������H��f��H9��_���H��H��H��?H)�H	�H��H�D$�~L$�:���H��f�H9�����H��H��H��?H)�H	�H��H�T$�~D$���fD��H���u@H�P�H��H��t��ff.�@��H�G H�H��
���ff.�f���H�W �uH�B�H��H��t�H�B��ff.���SL�H��E1��w H�OD��H�A��H��%���P������H�{ZYtH� ����H�@[����H��fH�=0�BffH�(��H�8H���|���ff.����H�VH�rH��t@��t	���[��ff.���UH��SH��H����H�����H��H��H��贏�H��H��[]�f.�H�G0H��� O�ATUSH�@ H��H�� Ƈ��e�H��I�����L��a
H��H������q
H��L���w��H�kpH�{����DPXH��fH�="�BffH���H�8�r���f�USH��L��\$0D�T$8H�D$(I�k�A�Mc�N�T�8L9�vuI�…�~D�S�N�T�DH��H�@�L9�u�H�D$ M�
M�BI�RI�C�I�BI��I�C�I�s�I�K�M�S�I�C�I�C�H�/H��[]�f��;���ff.���USH��H�BL�HM�YI�CH�H�AD���H�
H�	��tmH��H���L�FA)��H��H�I�HcJ I�[H��L�[I)�I�H�I��L�BH�NA��H�J�VH��ARPA�s���H��(�$[]Ëi �ff.���H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL���>����$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL�������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL���^����$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�j�P�vL������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�j�P�vL���~����$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�j�P�vL�������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL���.����$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL���N����$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�j�P�vL�������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�j�P�vL���n����$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL�������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�jP�vL���>����$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH��H�JD��APL�B�j�P�vL�������$H��(�@��H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH�JD��APL�B�jP�vL���b����$H��(����H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH�JD��APL�B�jP�vL�����$H��(����H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH�JD��APL�B�jP�vL������$H��(����H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH�JD��APL�B�jP�vL�������$H��(����H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH�JD��APL�B�jP�vL����$H��(����H��H�BH�NH��L�HI�AL�PHcB H��H)�H��H�I�H�NI�rH�JD��APL�B�jP�vL���2�$H��(����SH�BH��HcJ L�FL�HH��I�AI)�I�H�H�XH�CLcPD���H�N��H�JE)�VK�4�L�B�ASVH��p��H�� �$[�ff.�f���AUH��ATUSH��H�BH�nL�HI�AH�X�B L�C��E�PM�X0E�hD)�EPHc�M�$�E���Hc�H��E�H)�Mc�A)�D�H�M�D)�H�NE)�H�JA��H�H�D�VH��ASPI�@L�B�J��P��H��(�$[]A\A]�ff.����AUATI��USH��H�BM�D$LcZ L�HL��I�qH�FH�XJ��H)�L�S8IcBMc*L)�L)�M��E��~*M�Z1�E�U��	fDH��I��I��H�HI9�u�O��I�H�vH�M�H��HcCD���I�L$L�VH�JA)�H�D�E��ASAPL�B�PA�r��H��(�$[]A\A]�ff.�@ATH�FI��I��USH�WD�Q�����H�RL�`A���sZL�AI��A��t?s"H�	UI�{SR�!wwAT��H�� []A\�A���H�H�H D�QA��u��$�fDA����H�H�x �G����������H�H�x �G��tu�����H�H�x �G��tWre����H�H�x �G��t=rK��upH�H�x �G��t'r5��uZH�H�@ �x��ts,L�@I������f�A���DL�GI�������uH�H�x �2��H��I������fDAUATUH��SH��H��H��t{H�CjE1�E1�j���yH��pH�F�p�0�H�� H���$�H��I��詬�C$L�k�ЅC u5I��8L�kL��q
H���3��H��L����H���P���۫I����H�{01���E���f�AWI����D��AVAUATUH����SH��蠮��I��H�E�@t
H�@8D�hE��L��H��L��������
L��L�p�g��H��H�@H��H�p���1�A��H����H�5!6H���x��H�5�HH�����A�E�L�-ҩI�D�H�D$@�L��H��I���<��I�~��c��H��H������H�5�H�����L;t$u�H�CH� tH�CH�S�D�)�(���ff.�UH��H��SH��H��H���I-�H��H��H������ff.�AWAVAUATA��USL��H��hH�FH�|$PH�@8H�t$HH�T$H�p�HL�L$8�8H�@H�t$�L$,�|$@H�D$ ���)���D$(I��L�̓�E1�H�D�H�D$A�D$�H��H�$�M�/L���5�E��~(H;���H�JH;D��H��H;$u�M����L����L��H����I��H��L;|$u�M���8�L$@9L$,�^�D$@Hcl$,E1�H�D$0L�t$�D$D����A�D$�)�H��H��I�Hl$8H�L$H�$H�l$fDK�<�D��E���a�E��~(H;�K��@H�JH;D�t]H��H9$u�H�D$ J��H��$��H�t$J��I�GL;|$tUI����HT$H��D$(H�EH�$���HT$H�H�t$�D$(J��I�GH�$L;|$u�H�D$HH�@�@ ��D;d$(��H�|$0uHcD$DH�DH�D$0HcD$@H�|$8H�L$0H��H��h[]A\A]A^A_ÐH�D$l$,J�������D����	D$D������ƽ�I������fDH�T$����fDH�T$�#���fD�D$@H�|$8A�l$�E1���H�L�4�Ic�����I��E��~0L�d$�
�I��K��H��$tJ�4�L������I�GI9�u�M�.���fDH�|$0tMH�|$0K�t?�����W����H�D$0�D$D���f��D$(�D$,�g������1�H�\$X�\$DH�D$0I����H��H��t��s�H�t-�L�������H�\$X�k����艼�I��E��~,A��1��H��H�D$H�<�$tH�4�L����
�H�EI9�u�H�t$HH�|$PL��H��!���H�t$HH�|$PL��H��[���AWAVE��AUATUH��SH��hH�FH�|$PH�@8H�t$@H�L$ ��PD�D$LL�`H�@�\$,H�]�T$(H�D$0�ǀ�)H�������*H�D$E1��-@H��H�����H��$t?H�T$ H��J��I��D9|$(~KK�<����I��E��uƺ$H��H���ο�H��$u�H�|$�dH�|$L��I����	�D9|$(�H�|$���t$,9t$(���D$,E1�H�l$H�D$8L��E�����D$H��HcD$()�H��I�HD$ H�t$H�D$M���.H�|$H������H��$tGH�L$H��H��H�EH9l$tVH��I�<�A��A�����E��u�H�|$�$H�����H��$u�H�D$0H��H��$��H�T$H��H�EH9l$u�H�D$@H�l$H�@�@ ���D$,H�\$ ��H�H�,�H�|$8uHcD$HH�DH�D$8H�\$ HcD$,H�L$8H��H��h[]A\A]A^A_�@��޹�H�D$���@H�D$Dl$(H��A�����D����	D$H����D$(H�](�������D$(�t$,9t$(�`���f.�H�D$@�D$HH�D$8H�@�@ ����@�|$Lu9H������H���P��H�L$ H�t$@A�H�|$PH�������fDH�E�Āt/H�E(H������H��躀�H�t$@H�|$PH�^H���1����H�������H�|$8tH�|$8H�t-��$������z��E1�H�\$X�\$HH�D$8I���@I��I��tD��s�K�t$�L���޿���H�\$X�H�L$H�t$@H��WH�|$P���f.���UH��AWAVAUATSH��8dH�%(H�E�1�H�H����4�L�jH��L�@I��HcC M�^I��I�UA�I��H��H�RI)�L�zI�WH�r8HczHcFHc6H)�Hc�M��H��H��H��=�H�rI��H��H���I)�H���L��H9�tf�H��H��$�H9�u�%�t	H)�H�L�L�T$I���H��t%I�4�L��L�M�L�E��M��f�L�M�L�E��M�I��L��L��L�����I�GM�MI�|$I�NHcPD���I�AA)�H�pHcC L�VH��H)�E��H��H�I�H��I�NH�K�ASAPL�CPA�r���$H�]�dH3%(uH�e�[A\A]A^A_]ÿ�F��������AWAVAUATI��UH��SH��H�{H��(H�BH�NLcz L�HI�AL�pH�F H��� H��H�EH�H��H���H��H��#H9���A�D$$��A�D$ ��I�vH�C8L�k@I�D$H�ED�FM�UI�EE��t2A�x�I��1�L�_N�<��	fDH��I��I�L�H�HH9�u�O�ڋ�H�MI�|$P���D)�L�EPAR�vL���t�L�k@H��H�$[]A\A]A^A_�@H�v��H�s`H�sPH��H��H��H��A�D$$HE���H�uA�D$ �)���I�|$01�H�T$L�L$H�L$�9��H�T$L�L$H�L$������AWAVAUATI��UH��SH��L�SH��(H�BLcj L�HD��I�AL�pI�F+PH�H0Hc�H��H�V H�H�$H�NH�u�� H��H��H�H��H���H��#L9���A�t$$��A�t$ ��H�s8L�{@I�t$H�uM�WI�7�p��t1�~�I��N�,�L�G1��DL��M�\�M�\�L�YH9�u�O��D��H�MI�|$ASD���A)�L��ASARLcD$H�@J��L�EP���L�{@H��H�$[]A\A]A^A_�@H���H�{`H�{PI��H��I��H��A�t$$IE���H�}A�t$ �"���I�|$01�H�T$H�L$L�L$�u7��I�FH�T$H�L$L�L$���ff.�f�L�
SD�I��� tqH��M�Y��Lc�L9���/�D�H�C��E��t5H�7H�~H�D�8H9�vJ1�E��~Hc�I�<�A�4��Hc�H�<�A9�u�H�[A� ��f�M�Y I�A�fD��ff.�AWI��AVI��AUI��ATUSH��H��XdH�%(H�D$H1�A��tH���Ѓ�@��uC������ ��H�D$HdH3%(��H��X[]A\A]A^A_���R�I�E�N L�g����\H�G�E�i�H�o�I�GE�n M����A����I����H�l$0H����H�]�� �H��L�m��A�n I�w����'��Hc�Hc�H�H9�����A��Ѝh�A�^ �Y)�Hc�H�<�H�D>8I9���1�H���v@I�T�H��H��H9�u�H�I�wA^ E������I����I�$�Ā�{H����H����I�~(H���&I�GA�F L� H��I�G���DI�OH�A�H���_H���'��H���ϴ�I�OH���VH��ƀ��H����H���:H�A��'���f�M���-�H�kHcEH��I�ĉD$H�D$���H��I�GH�D$ �D$E���~��H�L$ �D$,H�D$H�D$H��L�$��I��K��J�t�H���|��I�EL9l$u�L�l$H�D$ Lcd$,I��L)�I��M)gH�A�F A�F$��+D$A�F �e����H�w�A�A�L�d$8I�wA�F I���!I�,$�� ��H��M�D$������\��Hc�Lc�H�L9��t�ʃ�A���)��B�A�n Hc�H��H�D8I9���H���K1��I��H�T�H��H9�u�H�I�wAn E���zM���`���� �����A�F ���w���I�_H�{�H���f���@���\���H�H�у�H���I����� �@����ƀ��H����H������H��A�F I�_����D���H�������fDH��A�n I�OA�F$�����L��L$���H���<���L$I���8���Hc�H�*H=��H��H�xD�L$ H)�L�D$H�T$H�t$�խ�H�T$H�t$H��I�����L�D$H��L��L�����D�L$ I�OA�F M�f(A�A�H�H��H)�H�D$8I�OL�a�H�D$@H�D$8@I�n(H���y���M�������� �����H�E�� ��H����H������H��1�1��u��H��H������������H�H�ƒ�H��������� �����H��荩�H��Ā�qH����H������H�����H��H���N��A�F$�b������D$,����H�0H����H���5��������������H����H�������H��耰�I�O����I�$H�ƃ�H���W������[����Ā��H����H���B���L��L$�.���L$I���*���f�H�P(�l����I�F(E1��s���I�F(E1����H�p(�V����M�D$ I�l$�<����L�m H�]��I�D$(�s���fDI�D$(����a���[���Lc�I�H=��v���J��H�x�L$H)�L�L$H�t$�D��L�L$H�t$H��H�D$L���J��L�D$H��L��L���7���E�I�OL�D$H�A�F H��M�F(H)�H�D$0I�OL�A�H�D$@H�D$0�L$���1����1�����L��L$�L���L$I�$ ����l����P���H�E�_���H�W(����諮�H�C�A�F$�+�������[����H�C(������U��SH��H��������'���t1H�C0ƃ�H����&�H�@ H�{�H��(H�Cp�o���H���w�����1��f���H�G8�fD��USH��H���G$H�o�ЅG uH��8H�kH��[]�fDH�01��-������USH��H��H���;��H�{E1�E1�H��H�C�#�yH��H�Hjj�pj�`��H��(H��[]�fD��PXH���A���H�����f��@��tI��~ED�@�Ic�H��H��t5��u0H�1I��A��I��u ���t H�q(H��uD�D��f�9�u
�H������Q�։��e��D��ATUS�����AH���t9H��������H���H��tH����H�ݻ����H�=5�����H�=$����H������H�=(H�&�C����H�=���H���h���H�=
H��C����H�=����H���7���
H�=�H���C�_���
H�=��N��H������H�=�H�{�C�.���H�=����H������H�5n�CH�G�CH9���H���H�=�CH��������?H9��*H�T?H��譮�H�5�CH9��UH�=��CH��������?H9��#H�T?H���v��H�5߶CH9��FH�=�BH��������?H9��lH�T?H���?��H�5��CH9��gL�%8�CH��I�$�@H�T���H�5m�CH9��cI�$H��@ H�T����JfD�C���H����fDH;A�CtH;0�C��H;�C��H9���H���H��[]A\�f��[��H�5�CH������@H��BH�5ʕH�81�����+��H�5̵CH������@H�=Y�CH��������?H9�w(H�l?[H��]A\�DH�=��BH��������?H9�v�[]A\�ѿ��H�=�CH��������?H9�v����諿�H�5D�CH�����@H�ѢC[H��@H�lH��]A\�fDL�%��CI�$�@ H�l����1����H�����H�5��H��H�[�BH�81�����US��H��(dH�%(H�D$1�����H�H��H�D$����H�|$���H��H��uL1�H�L$dH3%(��H��([]�H�RH�|$H�T$躸�H�T$H��t�1�H��H����uH�}p1�1�H�����H��t�H�P�����t���uH9h u�H�H��������t�����������D����H��H��H����������HE�H�������H��H��H�����������HE�H�������H��H��H����������HE�H�������H��H��H����i��������HE�H������uHc�H����铐����H�O �u(H�A�H��tH�H������t7H�A�H��H���t�H�A�H��tH�H������t���HE��1��H�@H��t�H�H������ff.���H��H���t�.fDH�A�H��H���uH�y�1�荦��H��t�H���H�y��r���H����H���@��AUATUH��SH��H���H��I��I���MH����H� �BH�8I9�tDH��H��1�A�jE1�1��u���H�[H�EH�hXZH����H�{H�u�I9�u�H��H��1�L��jA�E1�1��.���H�EY^H��[]A\A]�D@��uL;gt�H��s���H��trH����@��uR@����H���BH�I9�t�@��u[@����H�ڦBH�8�"���f�H�EH��[]A\A]�DH�I�BH��@H��BL; �,����fDH�!�BH�8�����H���BL; �����fDH�q�BH��c���f�H�Y�BH�8������AWAVAUATI��USH��(H�<$H��dH�%(H�D$1�H��u&H��tpH�a�BH��H�5yH�81��M��DH��t�@��u�H���H��H��w�L���p��H��H�\$dH3%(H���H��([]A\A]A^A_�@H�$L�@I�H �t�uDH�A�H��H���u`H�y�1��գ��H��H��t�DH�EL�m�©tWL��M��u�I�@H���bH���BH�8�L���ؙ�H���N���H�y��r���H��H��u���DM���H�t$H��H�t$f.����H�Y�tH����H��BH��H��tjE1��RDL��H��H���RW��I�WH��$��L9���H�T$1�L��H����V�����qL��H��I���Þ�L��H���f��I��H��u�I�UH��tWI�EL��I���H�������H���
H�������j����H�ڣBH��2���f��U��H�}tH���(H��BH�8fDH���~���H�$L�@�R����H�=h�C�����H�$�Y��H�$H���������������������H������H��H�$���H�$���t���L��讧�H��H���c��H��H�59H��H���BH�81��e��DH�[�W����H�a�BH��A����H�T$����fD�u	H�x���H����H�������<��H���BH�8�p���@��uH������H��BH�����H����H����@��ud@����H�F�BH�8���H��BH����H�8�BH����H���BH�8��H���BH�8���H�C�BH�8����H���BH�8�<���H�U�BH�8�-���H��BH�8����H�ϠBH�8���H���BH�8�����s����AWAVAUI��ATI��UH��SH��H�N �t�2f.�H�A�H��H���uH�y�1��ş��H��t�H���H�y�誟��H��H���c�I�EH��tH���BH9P�LH�
�BH��H�VL�H��BL�H���BL�0H�0�BL�8H�V�BL�H�<�BH�H��tX@H�H�vA��H��A��D�T$tH��H��t
@��uGH�~H��tH��t@��tW�
toH��H�VH��u�H���BH�5�H�81����@L��H��t�L��H��t�L��@��u�@��L��ID��H�?I��A��I��u��� u��
u�D�T$E��tH��tr@��utH�vH����H��M��H��H��[L��]A\A]A^A_�����H9X�����H�=��C��H�xH��H��$[]A\A]A^A_��4���H���H��t2H��t<@��u@��L��ID��n���fDL���`����L���P����L���@�����������I�E�j���H�s�BH�5�H�81��b��f���AWAVI��AUI��ATM��USH��H�N H�<$�t�.fDH�A�H��H���uH�y�1��%���H��t�H���H�y��
���H��H�����I�$H��tH��BH9P�dH�m�BH��H�QL�H�l�BH�8H��BL�H���BL�8H���BL�H���BH�0H��tW@H�H�YA��H��A��D�L$tH��H��t
��uHH�K@H��tH��t��tX�
tmH��H�QH��u�H��BH�57H�81����DL��H��t�L��H��t�L���u���L��HD��f�H�	I��A��I��u��� u��
u�D�L$E��tH��������H�[H����L��L��H���ܸ�H�<$H��M��H��L��H��[]A\A]A^A_�Y���f�H9h�����H�=��Ct|H�xH��L��L��[]A\A]A^A_�����H���|���H��t*H��t4��u��L��HD��\���L���T����L���D����L���4�����[�������I�$�n���H�ÖBH�5�H�81����f���AWAVAUATUSH��H��(H��uH���N��fD@��u�H�I�(I��I��M��H��H��D�}���H�� H��tD����vE��L��L��H��賄��H��$uYH��(L��L��L��H��[]A\A]A^A_�>���fDH��H�� 9�u]H�S�� uH�SD��L�$�M��tA��tI��$��H��([]A\A]A^A_�DL��H��H�L$� ��H�L$��f�����j�����H�T$H�L$�F��H�L$H�D$���5��H�T$H�L$;PH�u3L;pu-H�|$�@9Gu ��H�����H!�H	�H��9���H����������H�GH��teH�w H����uWH�PH�G@D���J�D��B t(��t#�z��D)�Hc�H�4�@��t*H���H��:t��@t
H���fD1��D�v ����H�Gf�@~!���ff.���H�G�@f%~!f��������H�G�@f%~ f��������UH��SHc�H��H��fH�=$�BffH���I��E1�1�H�H�PH�xH�RH��H)�H�I�jjR��UUj����H��([]���@��t����a���@�����H��tLH��@��tNH�����u�8H��H9�t*H�RH�����t H���u�H�
��H��u�H�JH9�u�H��H����H�H����H��u���tH�WH��t��uH���H��HE��H���x���fD��H���H�G���釆������'������������H�H����USH��H��H�h H��tAH��t\�t�mDH�C�H��H��uXH�{�1�譖��H��t�H9���H��[]�H�=�Cu���u�H��1�[]�@H���[]�@1��DH�{��R���H���*�H9���럐��AWAVAUATUSH��XL�"H�|$H�t$H�T$dH�%(H�L$H1�H�JH�$M��t\H�n I�\$ I�$�0H���O�Et�@H�E�H��H����H�}�1�豕��H��t�H9��H�$H���CL� I����'A�M����H�=��C��H�$L�8M���zL�l$@L�t$1�M��M��L�,$�?f�L�D$@L��`H�t$�L�����HDž`��Hc�M�t�M���I���t�H�-k�CL��L��L��XL���|����u��e��L��L��H��H�$�#}��L�$�DH�= �C����������������M�t$H�L$HdH3%(L����H��X[]A\A]A^A_�DH�	�BL�0H�$H�pH������A�I��t)M��u4H��BL��H�55�H�81��	��f�A����A��u�I���H��H��w�L���`��I��A��H�$Ic�H�4�H��u��N���fDH�}�貓��H�����H9����������H�D$L�@I�H �t���H�A�H��H�����H�y�1��a���H��t�H��f�H�EL�m�©��L��M��u�I�@H���H��BH�8@L��E1��]��I���&���DL�t$H�=c�CuH�|$<���H�=X�C�"H�G�CH�D$H��+���fDH�y�袒��H��H���F������M����H�l$(H��L�t$@f.����T$$��H�Y�tH���JH�;�BH�H��tj1��QfDH��L��H���F��I�GH��$��H9��K1�L��L��H���F�����L��H��H����L��H���:U��I��H��u�f�I�UH���I�EL��I���D���@H�D$1��
H�(L�h L�`���H��L�pM����A�Et!��I�E�H��I����I�}�1��Q���H��t�H�ՒBH��L�H�ؑBL�H�V�BH�
H���BL�:H�"�BL�*H��BL�
�C����H�RH��t��uH�:I��A��I��t.���u-H�vH����H�VH�t�H��u�L��빐�� t�H�C M��tA��uI�uL�������t@H�H�D$H�H��t��uH��L��謬�I�D$H�U�H�t$L��H+PH���(����f�H����H����������L��ID�����@���GH���mH���e������bH�Z�BH����f�H�l$(�U��H�}tH����H���BH�8f�H���n���H�D$L�@�E����H�=��CD�|$$I���{����Ź�M���m������e���A���[���I��N���L���%�����>���L���%��H��H���ڬ�H��H�5�H��H��BH�81�����@D�|$$L�t$@���f�A���B���L��H������2���fDH�[�g����H�|$<��H�$L�8M���,�������H���BH��1����I�}��b���H���
����C�@H���P����L���@����1����f�L��� �����u	H�x���H����H�������<��H�h�BH�8���@��uH��1����H��BH��q���H����H����@��ud@����H��BH�8���H�O�BH��/���H��BH�� ���H���BH�8�9���H�R�BH�8�*���H��BH�8����H�T�BH�8���H�%�BH�8���H��BH�8�v���H���BH�8����H���BH�8�X����C�����ע������ff.���H�GHc�H�@ H���ff.����AWH��AVAUATI��H���USH��H��8H�-�BdH�%(H�D$(1�H�}�y��H�M�
�H�=�����H���fH�D$ L�5��H�D$L�l$�kfDL��L��H����s�����ZH�{0H���~L��L����s������L�{8M��tH�T$L��L���s�������H�[H����H�M��H�=�����H���a��H�KH���<M���c���H�}H����1�脄�H�{1�H�5�����v��H�{0��H�M��H�=�����H�{01�H�5p�����u��L�{8M���N���H�}L��L��1����1�H�5�~��L���u��H�[H���'���f.�H�D$(dH3%(�7H��8[]A\A]A^A_�DH�M�	�H�=�����H�|$�T��H�{0H�������L�{8M����������DL�{8M��������@���fDH�M��H�=�����H�{0H����M������L��L����q�����#���DH�M�	�H�=��f��H�|$謭�����H�}L��L���1��ڂ�H�t$ 1�L���[}�����fDL�{8M������M��������w���������ff.���USH��H��H��dH�%(H�D$1�H���CH��H��X�q����u&H���N!�H�D$dH3%(u0H��[]��H�,$1�H�5Sl��H�����H�EH`�C��I��f���AVI��AUA��ATA��USH�� H�-8�CdH�%(H�D$1�H�D$H��t�AH�ο��~�H�=��CH��L�pD��H�CD��H�C tbL��8L�d$H�-�|���L��H��H��L���w��H�D$H��t�H�=��Ct3H�T$dH3%(u4H�� []A\A]A^�fDH�|$�V��@H�|$�H�D$��J��f.���H��1�dH�%(H�D$1�H�7�CH�<$H��H��8�Lz�H�D$dH3%(uH������f���1�H�=�|�����ff.���UH��H��H��SH��H��H��t
@��t'�H���o��H��t��t6H��[]��H�EH�ƒ�H��u�%�H=t�H�m�DH��H��H��[]�?��ff.�@��H��dH�%(H�D$1�H�GH��t�uH�D$dH3%(u(H���DH��CH�<$H��1�H��H�$y����ݵ�ff.�f���H��s�����AUATI��UH��SH��H��(H�dH�%(H�D$1��@����CH�M������u��~�@�S��%������	ЉCH�o�CH�]�����M�������<�H�P���Hc�H�>��M�,$M�d$L�kM��tA��uL��H�����I�E��tH�MH�� t�M����L�cL��uH��H��褡�@H�D$dH3%(�tH��([]A\A]ÐL�mL;k �<�����u���<t<	�"���I����)��I��>���I��+���%I��&��I��*�9I��%�������DL�cA���J���L��H���ߠ��:���f.�fH�=X�BffH�P��L�cH�H�PL�`H�H��I9�r����I��8I9���I�D$ ��u�L���QaLc�E������I�|$�[��H��H�$K�D-H�D$�@��H����H�CH����������fDA�|$I�$�{H�C��i��H�C�r���f�I�$H�C�c���H��q���C���������H�C�i��H�C�;���L�cA���jH���CH���jH�0H�sH���
���@���������I���
�_wII������I�����I�����I���������DI�����w1I�����I�����I���
�������I��a�cI��!�vI���
��������I���
�I���
�I����k�����rf.�I����Cw1I�����I�����I��|�'�����.fDI����c���I��������H�=�CH���}�H�=ڍC�L���}�����I��/�&I��<t I��-���������멐��f���f���~���fD��n���fD��^���fD�
�N���fD��>���fDL��H���U�����fH�=؀BffH�З�H�H�@0H�����H�@�m����fH�=��BffH蠗�H�8�e��H�CH���[����C���fD����fD����fD����fD�
���fD��~���fD��n���fD� �^���fD��N���fD��>���fD��.���fD1��!���f��	�����������������#��AVAUATUSH�w H���\���L�cH�sL�k L�sM��tA�D$��%������	�A�D$���u��0�L�pH��L�h H�L�`H���H%���H	�H�EL�c�vz�H���L�` H�ƃ����H�
�BH�P(H�JH��H�
��B���H�H%����H
H�[]A\A]A^����UH���0S���H���z������H�h ���	�H���B@�8H�JH�P(H�
��BH��[]Ð��AVI��AUI��ATUH��SH��Ӄ���t����1�H��t'�E������~�M@�U��%������	ЉE����t�I��L�pL�h I�$H�hH���CH��������փ���	�H	�I�4$H��tL���dg��[L��]A\A]A^�H���Щ�H�=��H��1����ff.�@��AWAVAUATUSH��H��L�gH�wL�o L�wM��t.A�D$����H�trA�T$��%������	�A�D$��s�L�`H��L�pL�h H�H�H%����H	�H�EH�CH��t�����t"H��H��[]A\A]A^A_Å�~�A�$@�DL�`M��t�M�t$I�t$M�|$ I�L$M��t4A�F����I�$u��~A�@A�V��%������	�A�F�H�L$��r�H�L$�0�L�x I��H�HI�$L�pH���H%���H	�I�EH�[�w�H���H�X H�ƃ����H��BH�P(H�JL��H�
�B�������f�AUATUH��SH��H��(dH�%(H�D$1��{����udH�=O�C��H�{X��L�c8M��tH�T$H��L���c����uQH�[0H��tH��fC�8u|H��H����e��H�=��C��H�D$dH3%(�KH��([]A\A]�@L�l$I�}��I�EH�x ��L���[��H��L���pe��H�[0H���{���됐H�T$H��H����b�����l���H�|$���]���f�H�|$���^����H�|$�&�����L�l$H��tEH�{L��H���b������L�d$M����I�|$u/H�{0H��tL��H���eb����u
H���Io�����L�d$M��t�I�$H���tqH��u:I�T$I�\$ ���<�H�[pL���}���H�sH��H��H����I�$H
 L��I�$���I�T$�������tX�usI�$��H���K���I�D$H��H�x0�d���5���fDH�[H������-���fDH���pn���X���H�zH��t�H� �F�I�D$��H��CL��H����L��H�D$H��H胴�H�|$H���V���H� ���E���H�z��������ff.�@��H��t@��t	���@H�H�ƒ�H��u�ATUH��SH���Āt3����H��I��H�����H�5�L��H���1�1�H�=�m���Gt�H��H��H�5�[]A\��0����AWAVAUA��ATUSH��8dH�%(H�D$(1����I��H��t��tL����H�H�Ѓ�H��t��u�I�l$pH���nA�E�H��L�l$ H�D�H�D$H�D$H�$��H�D$ H����H�PH������ƃ�@����@���9L9�t	M9��:����H�BH�@�P��4�����HL��L���{���H��H;\$��H�H�<$H�D$苇�I��H����I��H��t I�~L��L���(_�����@���M�vM��u�I�$��H���1�L��L����f�<uH�BH�ƒ����H��tTL��H�����H�=y�H��1��ǩ�H;\$�P���@H�L$(dH3%(��YH��8[]A\A]A^A_�H��H�@���H�rH���]���H�vH���P����6��@��������;����<�d���H��t�uH���H���K���H�P �B���;�����t[H�H�ƒ��#���DH��zBL�0M������I�~L��L����]����tH�D$ H����M�vM��u����fDH�Ѓ�H��H�������������L��H�4$�x��H�4$�t���L������H�=��H��1��v�����L�����H�=Z�H��1��X������H�t$L���f�豤����贏�@��UH��S��H�=@�
H���+�H��H���H��[]���f���������H��t@��t�H���H��u�����ff.�@��AVAUATI��UH��SH��H�L�ouA�E��<�L�u A�EH�ֿ��%������	�A�E��j�L�`H��L�p H�UL�hH���H%���H	�H
H�H��H��[]A\A]A^�fDL�w M��u�H�ֿ�zj��0�H��L�`L�p H�UH�@H���H%���H	�H
H��o�H���L�` H�ƃ����H��zBH�P(H�JL��H�
�zB�F�H��H��[]A\A]A^�fDI�}H�����H�T$����H�T$I��H�PH��t(��u#H��H��H�T$裏�L�u H�T$����DL�u �����ATUSH�GH�XH�{t
H��[]A\�DH�s H��H�� ��H�uH��H���!���H�UH�ËB%�����uH�ZH��t���u�H��H������f��0�L�b ��m�H���L�` H�ƃ����H��yBH�P(H�JH��H�
oyB��H��[]A\�f����7����AWAVI��AUI��ATUSH��H��8dH�%(H�D$(1�H�=��C��L�c8L�|$ M��t}L��L��L����Y����tkH�|$ H�oH�E uHM��tH�EI�EH�=S�C�mH�L$(dH3%(H����H��8[]A\A]A^A_������L��L����[��I��H����I�|$L��L���dY������H�L$ H����M��tM�eH�yH��ukM�l$0H�L$M����L��L��L���Y��H�L$����H�qL��H���N���L��L��H��H���mY��H��t@��uH��L���G���L�c8M����L��L��L���X�������H��L��L��H���,_�������M�d$M������M��tI�EL�%|CL��L��I��$@�[X����tgH�l$ �H�|$�f�����H�|$覂�&����1��)W��H�L$I��I�D$0�
������W��I��H�C8�7���f.����af�I��$@L��L�pH��H��H�@H�@ �7X������-��ff.�f�H���W���H��tH�PH��t������HD�H���f�1�H���f�AVI��AUA��ATI��UH��SH�� dH�%(H�D$1����H��H��tH�@���<t-H�L$dH3%(H����H�� []A\A]A^�f�H�D$M��A��H��LD�L��L���"���H��H��tjH�xu�M�.M�e0M��toH�T$H��L���V����uJH�sH��L�����H��L��H��H���W��H��t���X���H��L���ڊ��H���D1��<���H�\$�2����1��AU��I��I�E0�賝�U��S��H����ta1ҹ���H��t^��tH�H������tJ��tWH�@���<t�H����[]���E�H��[��]�D1�1��W���H��u�1�H����[]����t���f.���UH��SH���G(t
H���Ղ�DH��H�wH�?��,�����t��t�H���$[]���C(u�H���$[]�ff.���UH��SH��H��H��7z��H�MH�E�A�������Q��H��%������	ЉAH�K�jV��H�EH�u H�CH�s H��t@��tGH�uH�sH��t@��t$H�H�UH%����H	�H�H��[]�@H�������fDH���Ј��fD�������^����	@�V���f���AVAUATUSH��H��H�WdH�%(H�D$1���u*H�L$dH3%(H����H��[]A\A]A^�fDH�����������t��� u�H����H��������H�BH�@;pu�H�7wCH�Xx��H��H��H�$H��H�Φ�H�$H��t#H�� uH��H
H��H����N�{���H�C�0�L�` �f�H�sL�k �H��L�sL�` ���H�)rBH�HH�E(�EH�
rB������~��@�U�U���%������	ЉE�Wa�H�hI��L�pL�h H�CH�pH�uH��t@��uL�����H�CH�@H�@H�� H�uH��t@��uL�����H�vCL��H��H��H�ff�H�I�$L��%H����H	�I�$�����v ���跙����AWAVAUATI��USH��H��8dH�%(H�D$(1�H�=��C��I��A����I��I�� M�t$8M���(H�T$ L��L����Q������H�L$ H�i�QL�EA�� ��M����H��A��H��A�������H�A98u
D9H�M�r�H��H��H��H9���H��H��9:u�D9Ju�H�=ƱCH�j�*@H�|$�>}�f�H���H��L��L���]S��D1�L��L���K���H��H���gH�H�T$ L��L����P��H�L$ ���+H��H��H�L$�k���L��I���_�H�L$H��L�pH�(aH�EI�F���<��H�EuXHcQ;�\H�A�rH���qH�M���2H���H��%���ZH�j@��uH��L��芄�f.�H�=��C����H�L$(dH3%(H���tH��8[]A\A]A^A_�@H�E��u?H�����H
H�u H�E�J���f���N��I��I�D$8���f�H�����H�E �m���DH�-��A�\���@H�EH��t����<t�I��L�E���DH�|$�y�7����L�{�A����H�h�����H�C �[�����f���u<���H�L$�R��H�L$H�AHcQ�x����{ D�K�=���@�H�yH�L$�Hc��l�H�L$H�AHcQ�<���@H��L��L��L���U��H��������f�UH��SH��H��H��H���)���H�EH��tH�y�AH9�t	H��t�tH��[]�@H��H��H�D$萂�H�D$H��[]�@H��u+H�kBH�H�FH9Hu_H�PH��� uP����uH�J��DH��tBH��tT��u��tZH�cgBH��fDH��aBH��@H�VH�6����@H��gBH��x���f�H�acBH��`����H�fBH��P����AVI��AUI��ATI��UH��H��SH�����H��H��$tH��[]A\A]A^�@H��L��L�����H�@H��t�H�P���<u�H���H9Bu�L9��HE�H��[]A\A]A^�f�AWAVI��AUATUSH��芽��H���4L�hH��I��H��I�ExM��H��tI��I��I�H�C��H��tyI�L$1�uH�PH9�tdL��L��聐�H��uPM��tKA��uI���H��t-L���}��L��H�5��H��H�)`BH�81�����M���M��u�H�C�H�u������L�h H���p@���XH�����H��1��H���I���L������H�EH����H�SH���H����H�BpH�XH����H�EH9X�
H�PH� ��L9j��H�R�
����w�H���tH�
Q]H�HH��[]A\A]A^A_�fDI�|$��f���H���c�H�SH���H���^���H�BH���Q�����I���H�H�΃�H���6�����HE��*�����A��L��K�4	H��H�� H	�H	�I�|$H��H�E�y���@L��1�H�����I��H���GH�޿��X�H�
{\H�HH�L�hH��H��H�I�U������xI�|$H�EH��������H��H�D$�i~�H�D$�����@��tb����H��`BH�5��H�81���fD1���,X�H�
5YH�@H�HH�H�%��Fu�L�h H�tuDL�n�����I�|$H�uH�UH������H�PH�����H�
�AH�MH��[]A\A]A^A_�@H��AH�EH��[]A\A]A^A_�fDH�FL�F H�����L!�H�NI��D�‰�A����L	�����E��A�������I	������
���D��u#H�����H��H�x H��f���fDH�����H�H �M���H��`BH�5��H�81��e��DUH��H��H��S��H��(H�?dH�%(H�L$1�H�T$H��H�4$H�D$���H�D$H���hH�|$dH3<%(uH��([]��i��f���H��H��u��ya�f�@��u�H�H�ƒ�H��u�� tH��[BH�5��H�81�螘�fDH���H���ff.����H������@����H��uP��`�@@��u�H���H��u�@��t!H���H���t1H��u6H�H��t#@��u�H�H�ƒ�H��u�� t�H�H��u�1�������H��H�dH�%(H�D$1�H���F��H�$��tH�L$dH3%(H��u
H���@1������ff.�@��1��v��D��1��%�D��1���D��H�Ѻ�|��ff.�@������f���H��1��b|��f���AUATI��UH��SH��(dH�%(H�D$1�H��H�D$HD�1�H���&|��H���}H�xH��uSL�mI�m0H��tnH�T$L��H���E�����~H�sH��L�����L��H��H��H���E��H��t)��tD@H�L$dH3%(H��uDH��([]A\A]�f�1���@1��AD��H��I�E0��H��L���y��H�\$�蔌�@��1��Uu��D��SH��H��dH�%(H�D$1�H�FH��H�$�$u��H��tH�xtH�L$dH3%(uH��[�f�H�sH�$H����������f����W����S��fH�=q\BffH�is�H�8�Ay�����P �����	�@�x [�ff.�f���H���]��H��H���\��H9�tSH��t>H��H��t6��1Шu*����
�,��L�����Ic�L�>���1�H���f��H���fDH�GH9A��H�����DH�wH�y�b�H����������DH�G H9A ������1�H�wH9qu��G9A�����u�����H�vH����ff.�@��SH�^�3����|�H��H����[��H��t,H�������<
�7��H�����Hc�H�>��@H��[��sH���|��s[H���|��H�CH��[H�p�o|��H�sH���\|�Hcs[H���O|��H�sH��[�;|�H�sH��[�d�H�s H��[�|�ff.���H��u�Ð1�H����H��1�H��tH�H����t�H���D��H��fH�=ZBffH�p�H�H��tH�@H��t	H�@H���H��XBH�5�H�81��֒�fD��SfH�=�YBffH�p�H�H��t	���t
[��H����	��tꀋ�1�H������������H�����Hc�H�>��H��J��H��J��H��J��H�F��H�����H��E��H��E��H��E��H��E��H��E��H�jE��H�TE��H�� ��H�*E��H�E��H��
��H��D��H��D��H��D��H��D��H�p��H�yD��H�`D��H�HD��H�/D��H��
��H�D��1��ff.�f�SH��H����_�I��H�z[BH��uH�8H��L��H�5=�1��n��L���u�L�M��t4L�Ƀ�������H��tJ�q�I��H��L�҃�w(H�5|�L��1��*��H��L��H�5��L��1����H�5��L��1����I��L��H�5��L�����ff.�f�ATI��UH��SH��H��0dH�%(H�D$(1�H�$�H�D$H�T$H�D$H�D$ fH�=VBffH�wm�H�8H����H�|[BH�0H�@@H��H��L1�H��H��H��H)�H��H�H��	H��H��
H)�H)�H�G0H��H���g��H�x ��H���hH����H;p��H�@H� ��L;`��H�P���<t(�$H�\$(dH3%(��H��0[]A\�fDH����H9Bu�H9ݸ�HE���@��t2H��tlH����@��ut@����H�WBH�0���H�uH������L��H�����H�����H���O���H�@H���B����/���DH�)WBH�0���f�H�1QBH�0����H��RBH�0�p����H��UBH�0�`����<��ff.����UH��SH��H���Kz��H��$t
H��[]�fDH��H��H�ߺ�[]���f���UH��SH��H���z��H��$t
H��[]�fDH��H��H�ߺ�[]�b���f���AWAVE��AUI��ATA��UH��SH��H��M�8H��tgH�@TBH9(t#H��L��L��H��[]A\A]A^A_�/h��A�|$�I�pHc��'��H��E��L��L��H��H��[]A\A]A^A_�5h�D�$H�=��L�D$��;��L�D$H���v���ff.�f���H��H��H�=��U�f.���AVI��AUATUH��SH��0dH�%(H�D$(1�fH�="SBffH�j�H�H�X0L���L����p��H���H��^CH��8��B�H���H���H���`d�H�T$H���H�t$H�=�
L�t$ H�D$H���H�D$�U�L���L���H��t*�T$�UH�L$(dH3%(u(H��0[]A\A]A^�fD�t$��t�H�C0H�x�U���Ɓ�fD��ATI��USH��H�� dH�%(H�D$1�fH�=RBffH�i�H�(H�EH��tH;u
�SH9tKH���H��u�H�=�H�$L�d$�-U�H�&^C�H��H�D$�$A�H���g�@L�`1���H�H�}�H�XH�@�@ H�Ep��T����PXH������~
H�>��t��t������k�f���|�H�v���SH���]7��H��H���{����SfH�=QBffH�g�H�8H�GH�X8H�@X��tH���Q��H��H��t`H�{�^��H�����t[�@H�{���H9�\Ct7H�PH��	~�H�HH� tH�H�|�)u�H�(eval atH9u��y u��[���H��fH�=`PBffH�Xg�H�H�@H�@H��u(H�
��H�����
H�=[��iE�f��u�H����H��@u�H���D��H��fH�=�OBffH��f�H�H�����SH��fH�=�OBffH��f�H�[���H�T[C���H�WH�H��H9�s(H�FH��t
��H�~uH��8H9�r���H���1�Ð��H�WH�H��H9�r�*f.�H��8H9�sH�F ��u�H���f.�1��ff.�f���UH���SH��H��ZC�r�H�� H�(H�PH�� H��[]�fD��H�W1��uH�B�H��H�@�@��SH��H��dH�%(H�D$1����H��H��H�@H�$��]��H�<$�?�H�<$H���#��H�T$dH3%(u	H��H��[���}�D��USH��H��dH�%(H�D$1�螊�H�$H�@H��t&H��H��H����\����tH�CH���H��u�H�$H����H�<$H��蓐�H��H�T$dH3%(uH��[]��D}�@���B��tr"��uH�H�H��t�t~�D��ATI��UH��H�2SH��H�uH��t@��u��i�H�sH�uH��t@��uL���i�H�CH�pH�EH��t@��u[L��]A\�i�fD[]A\�H���i����AUATUSH��(H�o H�|$dH�%(H�D$1��}��D�m �%��H��A���M�H��L�` H��H��L�����EA�D$A�D$ ��D	�A�D$ H�D$H���tH�H�D$H�D$H�D$H��H�L$dH3%(uH��([]A\A]�f.��+N�H����{����USH��H��H�o �E��wW��u;H�EH��t2H�@H��H��tH�L���iD��1�H��H����o���M H�H��H��[]������H�EH�P �B��w'��u�H�BH��t�H�sJBH�5ӳH�81�袄�f�����H�H�P �B��v���urH�H�P �B��v���u^H�H�P �B��v���uJH�H�P �B��v���u6H�H�@ �P��w���8���H�@�h�����uH�H�x �vN���R������S���H��H���w�H��[�fD��ATUSH�o H���E��wa��uIL�eM��t@H�}H����I�D$1�H��H��tH��1��B��H��H��H���pn���M H��H�[]A\�D���H�EH�P �B��wo��u�H�BH��t�H�IBH�5k�H�81��:��f.�@���g���H��Z����$�����M���H�%HBH��H�5S�H�81���������H�H�P �B���u�����u~H�H�P �B���]�����ufH�H�P �B���E�����uNH�H�P �B���-�����u6H�H�@ �P��w�����H�@������uH�H�x �L��������AWAVAUA��ATI��UH��SH��H�FH�H�FH�������E1�H��A���(J�I�t$H�h I��H�uH��t
@����I�4$H�uH��t@��tfI�D$H�pH�EH��t@��t>A��D�}C�T-D�m A��A	�D�m ��tLH��L��[]A\A]A^A_�f.�L����d��fDL����d��fDH���d��j���I�T$H�BH��t�H�H��t
�t&�u�f�H�B�fDH�v��"���f�H�H�΃�H��uˁ��H��u�H�@H�B�L������H��t?@��tH��GBH��1�H��l���@@��t"@��uH���H��tH���@��f�H����R��UH��AWAVAUM��ATSH��H��P���H�VH��p���D�ZD�b(H��x���D��L���D�RE�dH�%(H�]�1�Džh�������A��u�BD�h���I��A����A��A��D��rD�u�%`��X���H��p���L�@I�@H��@���H��P����X 9��U��A���K�D��L�I�|��H�H��H9�u�I�D�L�m�I�@D��%�]��E��B�A�� ��1�M����
Hc:A��H�U�I���b
H��H��H��=�TH�BH��H��H%�H)�H���H��H9�tH��H��$�H9�u���H�|$D)�H���]�H�}�H��t5Hc�I�t������X�����`����&f.�H�E�H�E���X�����`���D���A��A�EA���+H�E�A���~
��`���@�,	D��`���HDž0���HDž8���E������L�����A9�� ��h������t9��
H��x���H�@�p@����@����@����1�@���3@����@����H�P8HcBHcH)�H�U�M�L�H���
H�E��L�@L��x���H��p���L������I�G�p��@t4H��x���H9��t$Hc@,H��p���M�d�H��P���H�p�c���I�$H��p���H��@���H�@H�H��H�M�dH3%(�H�e�[A\A]A^A_]�D@�� ��I���t���I��ƀ��H������L����T���H���K���L���k�H��x���H��p���H��
H����~��fDD��X���E��������H��8�����H��x���H�@E����
�@�����0t
��h�����H�E�H��tH��� ��H����H���K�}��hH�E�H�H����X�H�U�H�H���HH�H�E�H�E��� �H��H�׃�Hclj�H9����D9���H��p���H�PIc�H�JH�D�8H9���
H�}�H����D�E�E����L�7�U�A�� �*L�wIc�I9�������h���A�D9��Ã����!�E9��f�H�}��A��莌�E9�u��@H�]�Lc`(H��� ��L��L�sJ��H��=����H���H�s L��H���,L��H��1�L)��t�H��x���H�@�p@������D�@�U�A9��HcHL�e��E�M�L�M����Hc�H���
�Hc���I��A9������M�H�}���h���H���R�M��E����+�E�������h������T��h�����L��X���L��(�����Lc�I���DI�����{
��H�E�L�m�D�r���h���N�< L��D�u��>�Ic�L�<�M��tA��uL��L����\�L���0��U����L��X���L��(�����h�������D��h���A��Ic�E��L�$�L)�H���DI��H�E�H�}�J�4 �$R�I�D$�L9�u��jDHcxD�E�D9��H�u��]�H� ��	H��D��Lc��D�:Ic�M�L�1��
�H��Hc�L�H��I��H�JI9�u�D)��E��p߉}����A�H�����H��x���HDž0���HDž8���H�@�P������H��CBH�5��H�81��:x�f.�Hc@ H�}�M�d�H�����m�I�$H��x���H�@HcP M�t�I�H�с� ��H����H��8���tzf�@0urH���	I�N L�b�H��8���J94�uTH��0���L��H� ����~<�H��0���J��H��H��t�uH��0���L����Z�L����-�H��x���H�@D�p�����C��E��E�H�I�D�H�8H�E�H���� ��H����Hc���H9��c����`���D�4;A�^����H��x���A�HDž0���HDž8���H�@�P�p�����h����U������D9���!�A9��KHc��H�M�D�H�H��H�T�H�H��H9�u�D�e����g���H�}�D+�h���H��t*H��� ��H����Mc�I9���H�E�A)܋U�D)�U�����@H��L��H��J����H��=@��I��@��H���#	H�s����f�A)�H��H}�D�E����@��h��������H�u�Hc��o�H�E�H�E��E�H��x���H�@�p����Ic�D)�H��HM��U�H�P0�
���Hcu���]��E�H�E��>���H�x�(����I��A������D�C�H�E�Ic�L�4�I���UM��tjA��udI�H�Ѓ�H��uUH��x���H�HL��Ate�Au_��`����S���j��E�H��H�E��;���H�Q�Y����L��D��8�����e�H��x���D��8���H�H�IH�ׁ����H�p(H��u
�A �0��`����Jf�A ��q@��0u4H���_H����H����H��x���H�I��`���u
�q���d
L9�t�u��V�H�u�Hc�H���Q���F����A0��	�m�I��D��HDž0���HDž8����R���D�����fDI���PE1��� tA���`����pL��L��x���H��p���L��L���z��I�G�p�����D�S�D�s��E�Ic�D�u�M�|�Ic�I�T�H�U�I���,M��t
A����L��D��8����Ad�H��x���D��8���I��H�H�Q��LH����H��u
�B ����`���uf�B ��J��0��I��Ā��I�G(H�����B�T��`�������H�}���D�E�E����L��A�誃�H�U�1��^I�H�ƒ�H������H��x���H�Q�B�.�����`�������BEΉ�`�������f.�H��8�����`���H�E��Y�]�D��`���I��H�u�D)�HcÃ��]�E��~[H��8���L�<�D��`���H�ZA�P�H�I��H�D�H��@I�I�4$L��I��I���;�L9�u�]�D��`���H�u��C�H�L�4Ƌ�X���D�u�
@��`�����I�V�;����H�P8HcRM�d�I���)��`�����M�<$�p��������H����H�@ Hc�H��H��0���H���h��H��8����XH��0���H�H����H���(A��F�@H�_����������D�q�]��A������X���1�����A�D9�����Bf�
���D��X���E��tf%0f=0����E����I�W(��H�U���`�������1�A�H��� tNH����Hc�H9����D�H���N�H� �B�Hc@$L)�H�4�I�|�����I�G(���H�Z볋u�����L)�H���i��M�H�v �j���H��x���L��X���L��(���H�@�p�E�HDž0���A�HDž8������B��H�U�1��(���H�����h���H)�H�L����H��H�����_���H�����I�N����x�W�A���h���D9������"�����L��D��8�����`����w5�D��8���I��H��x���H�P���D+�h����������<�HDž8���A���H��D��8�����`����5�H��x���D��8���H�I�A0�����H�H�ׁ������d��E�H�E���@�����F�I��H��x���H�@�p����m^��I�$�� ��H��I����Lc]�Hc�H��M��I)�1�O��f.�A9�}yI�<��A��I�<	H���A9�u�Ic�D�U�H�����E1�1�1����E����E�D��A���`���������L���	4�I��H��x���H�@�p����@��tD�U�A9�����\���L���{G�H�Hcu��� ��H��L�O��H��Hc�A��H9��������H��p���H�H�GH�H�yH�D�8H9�����A�<0D�1��}�E��~ Hc�M�ɍ0��Hc�M�T�D9�u�Hc�D�S���M�|�D���R�}�A�H�E��e��HDž0���HDž8�����L��D��`���L��h�����2�D��`���L��h���I���d���H�P(�����a��E�H��H�E��I���I�|$Hcω�H9����M�d$ ����L��D��8�����`����}2�D��8���I��H��x���H�P�J���H���� H��8��������Ā�sH����H��x���H�I�IH��������H��0���H��8����2��E�I��H����H��H��8����L��H�� ���L��(����\�H�� ���L��(���I��H��8���H��Ā��H����H��x���H�I�IH������ t	��0�������E����XH�}�L��8�����)�L��8���H��0���A�^�L��0���A�H��8�����L�O H��q�����`����D�M�E����H�}�L���e{�L��H�U�A�����HDž0���A�HDž8����g�D��������t�����_��E�H��H�E��S���H��D��8����0�H��x�����`���D��8���H�I�l���H�x�F�H�@ H�8�DF��U��� �.���H��0����E�H���I��I�L��8���M��H����H���-����Y���H�}�� _��E�H�E������`���L����/�I������H�x��H��0���H�@(�������M9�tc�E�H�M�����H��H��(���H��`����j-�H��(���M��H��`���L�<�tA��uH��L��H��`����K�H��`���H�����H��x���H�@�P��t	M�����@0��D�]�E����H�}�A�^��'�H��x���Dž`���@H�@�PH��0���L��0���H��8����}�I�G(�/���H���j�����������f���L����T����� �K���H�E�L�E�L��L��8���H�P(H�pH��p���H�x�w��L��8�������H��8���H� H��0���Dž`���@L��0���A�H��8������H��x���A�H�@�H���^���H�}�L��8����]��E�L��8���H�E����H��H��`����\��E�H��`���H��H�E�����H�E�L�E�L��L��8���H�P(H�pH��p���H�x�4v��H��x���L��8���H�@�@0t,�PA�^�H��0���Dž`���@L��0���H��8�����HcU�H��M�|�A����E�H��0���L��0���H��8������H�}��5\��E�H�E�����p\�D��h���H��x���D���H��p����g��A���+���H����|@�ff.��AWAVAUI��ATUSH��H�If�A~!��L�w�IE��I��L��H��L����u��A��t&I�E�S �H9��_H��1�[]A\A]A^A_��s I�E��tt�H9�t���I�VHc�H�D�8I9����Q�Hc�)�H�D�H�H�T�DH�H��H9�u�K �H��H��H��L��[]A\A]A^A_�\�@�P�⁀�u�H�}�A�H��u"I�E�s �H�e���fD�6�����[U��H�8I�U�� tyI��I��A��HcrI�VH�T�8H��I9�v�M��~J1�1�L�P��'�<f�L��H���I�9�~$Hc�L9�}H�8H��L�D�� u�H�x ��1��s ����L�H�A��L��L���e��ff.�@H��xH��dH�4%(H�t$h1��T$PD��Mc���L�L$@D��$�H�t$0�T$TH��L�D$I��H���d$TH�D$H$H�D$XH�$�H�D$H�D$H�D$ ���H�L$hdH3%(uH��x��Y�ff.�@��AWI��H��E��AVM��E��H��AUI��A��ATE��UH��SH��M�fI�ZL�T$I�D$L��LchHcF H��H)�I���!���M�FI�H�}I�T$L�T$H�D�����I�ZN��H�RD)�A��AQH��VH�L��AR0�E1�I��PH��""�eS��H��8�$[]A\A]A^A_Ð��AWI��AVAUI��ATI��USH��H�BL�xI�WH�BH�u?H�JH�W0H������H�RH;
t%H��'BH�5��H�81��
b�f.�H�H�X �{t�IcD$ L�sI�jH��H)�I�FD�XI�$H��������L�T$E1�I��D�\$�u~H��L��L��L����L�T$Lc\$H�U�L�CH�I�L$I�RI�VI�}M��I����V���D)�VJ�t�VH�RL��H�ºA""P�$R��H��8�$[]A\A]A^A_�L��L��L���b���Lc\$L�T$����B�F����AWI��A�AVM��AUI��ATE��USH��H��(H�*E��tM�9H�t$hH��H�L$L�\$����H�|$pL�\$H�{�H�D$�D$`��M�j��ffj�ց���E�H�sI���vI�uHc�jL��$�H�L$8�>Q��H�� H�uD��H�D$L��L��I���UH�kI�ċC$�ЅC u!H��8L��H�kH��([]A\A]A^A_��H�{01��������AUI��I��ATI��UL��SH��H�ʹ����H��H��H��p��H�C(D�C L�S�K$H��tiH�8�� uNL�H H�xHc�H9����Ic�A��H��H��H��H�UH�uL��jARQH�M�p���I\$H��([]A\A]�H��L�H���Ic�M�L$H��H��I��ff.����H��H��I��A��jH�VH�vjjH��	���H��(�@AVI��L��AUATE��UH��S�����L��I���j"�M��D��H���H��[]A\A]A^�_���ff.�@��SH��fH�=�%BffH�<�H�8H�OH�H�wH��H9�w�D�H��8H9�v4H�N ��u�H�'%BH�^(1�H��H�����1�1�H��[��E�H�=�1��A�ff.�f�AWAVAUATUSH��L�n I�U����H��I�E�����L��H�����€�H�EH�@�����@ �ZD�{�Ic��f�1�1�I�����sHc�I��H��H��H��=����H���~��Hc�H��H��H��H����H�M I�1�L�`��uH�UI�T$I�D$M�t$E�|$ H�E H�M�eH��L��[]A\A]A^A_��H��L������H�^8H;FXtfDH��8H9C u�H�����H�C H�M H��I�E�H��€������A��e�1�1�I�����H���I��L�L���l�����DM�e�E������������V+P���H�H����tTH�����x���f.��tH��"BH��1�H��H�����H�M I�E�H�����@��6��[ ��*���ff.����UH��SH��H�_�H�UH�EH��H9�r�-DH��8H9�sH�{t�H��H��H��8�q������H��[]Ð��AVAUATUSH�WH�H��H9�sFL�fH��M��t�VfDH�xuIH��8H9�r�H�F ��tH���f�H�C ��t?H��8H9�r�H�� BH�5�H�81��[�fDH�N I���u�H����M��t�H�FX����L�����I��H�%BH�8�,#�L��H�h H��I��H���W��I�t$H�uH��t@��uL����=�I�t$H�uH��t@��uL����=�H�CH�@H�p@H�u H��t@��uL���=�H���t��E(L��[]A\A]A^�H��BH�57�H�81��Z�ff.�f���UH��AWAVAUATI��SH��H��`���H��x���dH�%(H�E�1�H�F H�H��tdI�Ũt%�� ��H�p H�H��h���H��t_�u$�H�΃�H��u�H��h���H�΃�H��t>�� H���H�p �"@�� ��H�% H�H��H��h���H��L�h���A�D$����E1���uM�|$��p���fH�= BffH�6�H�E�H�Hc�p���H��H��H����QH�AH��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L4�L�t$H�E�I���H��X���A�H��H���.�H�%H��h���H����������qI�$H�H �A��wE1�������L�y�������AH�H�H �A��vу��)H�H�H �A��v����H�H�H �A��v�����H�H�H �A��v�����H�H�@ �H����E1����x���L�x�o���H�}�H��H��p�����T���H��X����-���T���H��p���I�ƉH�Q�H��`���I�~�jg�H�E�1�H��H��p�����/�H��p���L�u�H�E�H��H�E�袺��I��M����I�GL��A�M��H��h���L��H�pP�3O�I��H��X���H�E��[�L��1�L��H���U��H�sH�����H��x���L��H��I���K���C$L�c�ЅC u}I��8I�EL�cH�]�dH3%(��H�e�[A\A]A^A_]���H�=�����E1�L��H��H��H����<�I���K���1��@H�XH��h����g���H�{01�����s�����u%H���p���H�x �I ����p���I������FL�fD���f.�H�WH�H��8H��H9�s,H�>tH�~u'H�F H�%�H=ffu�H�FH�@�f�1��DH�F �u��H�P�H��H��t�����H��fH�=0BffH�(3�H�H�qH���Y����H��H��������SH��fH�=�BffH��2�L�I�pL������H�ٺ[H���H�����H��fH�=�BffH�2�H�H�qH������1�H��H���
��ff.���SH��fH�=pBffH�h2�L�I�pL�����H��1�[H������ff.���U��SH��H��fH�=)BffH�!2�L�I�p��t�E�H��H��H)�H�4�L���8���H��H��1�[H��]�e��D��H��fH�=�BffH��1�H�H�JH�BH�H��H9�r�7�H��8H9�s'H�P ��u�H�x��I�H� tH�@H���1�H��ÐH��H������H��fH�=PBffH�H1�H�H�PH�xH�H��H9�r�'�H��8H9�sH�G ��u�H���M�D1�H��Ð��UH��SH��fH�=�BffH��0�H�H�PH�XH�H��H9�r�Bf.�H��8H9�s/H�C ��u�H��tH�����EH�{H��[]��H��H��t�EH���[]���H���c���H��tH��H�@H� tH�BH���@1���ff.����H��fH�= BffH�0�H�8H����5��ff.����SfH�=�BffH��/�H�H�JH�BH�H��H9�r�[���H��8H9�siH�X ��u�H��������u+�#��D��tH�S1�H�{����H��u/H�[�H��H���t׃�tH�SH�{�[�o���[��ݑ����UH��SH��H��fH�=8BffH�0/�H�H�JH�BH�H��H9�r�@H��8H9�swH�P ��u�H9huhL�H L���L��tXA�t�`I�A�H��I���uPI�y�1�����H��t�H�PH�tH��uTH��BH�H9ӺHE�H��[]ÐH��1�[]��I�y����H������H�PH�u���t"H��t@H��t��u&��t?H��BH��H�R�H�BH��z���H�_BH��k���H�0BH��\���H��BH��M������H��fH�=�BffH��-�H�H�JH�BH�H�4�H9�r�@H��8H9�s}H�H H��€u��t�<@H�A�H��H���u(H�y�1����H��t�H�xH��u/H��H���f�H�y��r��H�����H�xH��t�H���>�H��BH�5|�H�81��*O�f.���PXH���!*��H���Y+�f�AVAUATI��U��S����A����H�WH�H��L�Ѓ������S���T��H�N E1�L�1H��A��u"L��E1ۀ�tM��LD�H�@�H��H���t�L9���H��E1�f�H��A��u�L�B�I��L��A�t�H���6H9��-H9��CH��8I9���H�s L�6�fDH�G��tǀ�H��[]A\A]A^�f���tWH��t��tAǀ�L����f�1�H�G1��D�����L�`H�X�h []A\A]A^�H���H��udǀ�L��[]A\A]A^�fDH�V H�B�H��t�L9�s�H9�u�fDH;C ��H��8I9�w�1��k���f�H���E���A�T$ ���L������A�ƀt:A����H��H9������H�SH�R�:�����M��uLA��H�CL�@A�����A��u;������t��u���t�M��u	E��������L��H�=|�K���E���QH9��>H9�t)H���	@H9�tH�@�H��H9�u�1������I9�u���[���f�H�V H�v�H�ND�A��tUH�CH�@�8��H�B�H���H��H��t!I9�vH;C u
�H9C ��H��8I9�w�H�N1�D�A��u�H�K H���H�B�H��I9�v#H9�u��fDH;C ��H��8I9�w�L��H�=�z�)���f�H�SXH�sHH��8�/����H��� ���1�A����I���H��u�Rf�H���H��tDH�@�0D�F�A��v�@�Ņ���	�@��H�����f.��A���1���@����fDH�CH�@L���M���#���A�	������L�L+@1�I�AI���f���H�� 9����8	u�H;pu�D�XM9�v�D�XM9�wԉ�H��A�DI9������]���H��1����D���H���fD������H�L�F H�A�uI�@�H��I���t�M�H�M��t[M��H�}�A��I��t'H���I��tH�?A��t
A��tH��)��E1���M�A��I��L��)��IE�E1���P1ҾH�=y�8����ATI��UH��SH�_H�C �tf�H��8H�C �u�H�@�H��t(H�MH�UH��H9�vH;C u�#H9C tH��8H9�w�L��H�=�x���1���A�H�}�L�`H�X�@ H�Ep��������������H�=4~Hc�H�>��fDH�=vx��#���H�=NxH��$u�H���T$H�<$fH�=?BffH�7&�H�<$�T$H�H�@H�pH���;#��H�=����'#���H�=�w��H�=�w����f.���S�$������H��tH���$�fH�=�BffH�%���H�H�x������PXH��fH�=~BffH�v%��H�8�)���f���SH��fH�=PBffH�H%�H��H�8���ff.�f���H��H�=aC�\�H�=MCH���L�ff.����H�-CH��tH��1�H���#"�1��ff.�f���H��H��������uH����H�GpH��H�5R*��H�xH���u���D��I��I���af��H��1�H��t-H��tH�GH�@ H�M��tH�GI��M��tH�W I��f���ATUSH��H�� H�t$H�$dH�%(H�D$1�H��uSH���*H�1�H�L$H���g�����tH�D$H��u,f�1�H�\$dH3%(��H�� []A\ÐH��H�H�ʃ��uH���>H�����J���vH��u�H�D$H��BH;�5H���]*�H�D$H�<$��I��H���s���H�{�J�H���`���H� ��H�hH�T$H�8uH��tH�|$�� �H�T$H����H�H�D$L�cH�C �H�kH�S(����fH�=�BffH��"�H�8������ �)���H���H�D$H�������H����J�����������f.�H�hH��������?���fDH�@H�D$H����J�������������H�=St��H�D$���DH�.t�����:�ff.�@AWA��AVAUI��ATUSH��H��L�bL�D$L�BL�L$dH�%(H��$�1�H��z$M�H�I�����I�ƒUUH�D$H�BH�hH��Bf�8L�u��H�C0H���7��H�p�F �H�Cj1�H�{jI��L��L��pj�84��A�vH�� ��x	D9��}H�D$I�ND��L��H�T$I�EA�VI��H�CL�p8M9��C�C$H�{0�ЅC �L�sH������H�w�F@�>L�%�BfA�<$��H��$�dH3%(L����H�Ę[]A\A]A^A_��I�V H�u H�L$0L�D$(L�T$ �4���L�T$ L�D$(������H�mB�����DH�L$H�E ���lH�� H��H�MH�{H��L�D$(L�T$ H�I H�|$@H�|$0H�T$X1��D$0 H�\$8L�d$HH�L$PH�D$`H�D$h$H�D$x$�D$p�9L�D$(L�T$ �Y���f�������L��L��H�=l�1��}%�DH�D$H�U ���H�� H�MH��H�|$0H�I H�T$`1��D$0@H�\$8L�t$@L�d$HH�L$PH�D$XL�|$hH�D$x$�D$p�o8�T���f.�H�EH�u H�L$0H��H�P �������<�����6���f�1����H�{0�����������H�L$H�Q���H�D$H�@�3�����D���<"��'7����LcB H�����L��I��L)�HFI��L�@�w������AU�����I��ATI��UL��SH��H��H��H�H�(H���P��L�C(M��uG@��ty��@��atH��H��L��L��[]A\A]�p����{$u�� u�H�CH�
W���H�H�ɐI��� t8H��I����M�L$H��H��L��[L��]I��A\A]���@�m�I�xHclj�H9��g��M�@ ����L�FI�@�H��t3H��t�uH�I��A��I��t���ŀ��H����H��u�ATI��UH��SM�X�H��I��� ��H��I����Hc�A�D$$M�H�I�D�8H9���L�ȅ�~*�Q�1�H�r�	fDL��M��M�T��L�PH9�u�I��H��L��H��H��H�EI��[]A\���f�H�H(�W����I�CLcȉ�L9��\�=�M�[ �[���fD[]A\�����3/����USH��L�FM�H�I�I��A�� t/H��M�Q������I�H8�B$I�@�H9�����.��f�I�ALcЉ�L9���~�M�Q ����Hc��B$M�H�I�D�8H9�vƅ���D�Y�1�I�k�f�H��I��I�\��H�XL9�u�I��H��I��H�FH��[]���1�I����f���Lc�O��M���{���A��uI�H�݃�H��t0����Z���H��[]�������Lc�O��M��t������ t�ǀuH��I��A����M��t��M�I(��L���n���ff.����H�H�I��A��������L�B��tK�� uFUI��I��SH��H����@uBM���H��%�����H�!���I�@H��[]����f�H�	���I�@����M����H��%���u�I�SH�����I�@H�B�H���BH��t�uH�H�΃�H���
H��H��L��L��[]���D�H�,���I�sH�����I�@L�F�I�H�� tGH��I������H���~H�V8�C$H�F�1�I9��8�},��D�@ ����@ �9���I�xHclj�H9��i|�M�@ ���qHc��C$L�N�H�D�8I9�v������y�1�H�o�f�H��I��H�T�H�PH9�u�I��H��L�F�I�CH��H��L��L��[]�����ŀ��H��H����H������H�B�H��� t}H��H�x��Hc��C$L�J�H�D�8I9���������D�A�1�I�h�
�H��H�4�H�t��H�pI9�u�I��H��L�B�I�C�[���H�@(�y���L��I���;���H�xHc���H9��>{�����3���H�x �g�����H�I�<�H�������@��uH�I��A��I��A�t$D)Ɂ���������G�H�I�<�H��t��� t�ĀuH����A�H��t����L���9���H�G(��f.�SH��H��@H��BdH�%(H�T$81�f�;uSH��Bf�;��H��Bf�;��H��Bf�;��H�D$8dH3%(�"H��@[�fD����v5�� ����@u�H�8Bf�;t�1�1�H��H������t���@��u�1�1�H��H�����t���D�� ���@t����i���1�1�H��H������R�����L���@�� �s���1�1�H��H���X���(�����"���f.���������@�����G���f�H�kBf�;����DH�UBf�;�����a����.�ff.�f�AWAVAUATUSH��D�%HCdH�%(H��$�1�A��CD���GC�H��H�6H��L�{I�GL��L�|$HH+pH���I��D��A��I�GH��tHH�C D!�H���@H�������H�D$1�H�}h��L�m0M��tM�mI�EH�D$D��	�H���D$8A��A��tE��t������
�t��@�+���r������������A��tE��t�D$8�EDH�D$HH�D$PH�D$HH��$�dH3%(�.H�ĸ[]A\A]A^A_��H�߉L$8�dV���L$8L�hI�EI�UH�T$1�H������P����@H�SD��L�[��L�R�A�M�QI�wH���>����N�5���H�H�UH�|$P�L$PH�T$`1�H�l$XL�\$hH�D$pH�D$xHDŽ$�L��$�HDŽ$�$DŽ$��,H�+����fDE��L�[A��
E�U��I�wH���g���D�V�]���H�H�UH�|$P�L$H�T$`1�D�T$PH�l$XL�\$hH�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$��T,H�+�L$����E��L�[A��E�U� I�wH�����D�V����H�H�UH�|$P�L$H�T$`1�D�T$PH�l$XL�\$hH�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$��+H�+�L$�]����E��L�[A��E�U��I�wH���%���D�V����H�H�UH�|$P�L$H�T$`1�D�T$PH�l$XL�\$hH�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$���*H�+�L$����E��L�[A��E�U�[I�wH���l���D�V�b���H�H�UH�|$P�L$H�T$`1��D$PH�l$XL�\$hH�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$��D*H�+�L$����H�S E��L�[A��@H�B�E�U�xI�wH�������D�V�����H�H�UH�|$P�L$H�T$`1�D�T$PH�l$XL�\$hH�D$pH�D$xHDŽ$�H��$�HDŽ$�$DŽ$��)H�+�L$�(���L�SA�E�H�D$H�0H�����F���H�H�UH�|$P�L$H�T$`1��D$PH�l$XL�T$hH�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$���(H�+�L$�i���f�H�SL�sL�b�A�E��H�D$H�0H��������F�����H�H�EH�|$P1��D$PH�l$XH�D$`L�t$hH�D$pH�D$xHDŽ$�L��$�HDŽ$�$DŽ$��6(H�+����DH���H��L�\$ L�T$0�L$����H�U�L$H�|$PL�T$0L�\$ I�uH�l$XH�T$`1҉L$P�L$(L�\$hL��$�L�T$H�D$pH�D$xHDŽ$�HDŽ$�$DŽ$��'H�+�L$(L�\$ L�T$����f.�H�H���L$(D�T$ L�\$�Q���H�UL�\$H�|$PI�uH�l$XH�T$`1�L�\$h�D$PH�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$���&H�+�L$(D�T$ L�\$���f�H�D��H��L$0L�\$(D�T$���H�UD�T$H�|$PL�\$(I�uH�l$XH�T$`1�D�T$PD�T$ L�\$hL�\$H�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$��&&H�+�L$0D�T$ L�\$����H�D��H��L$0L�\$(D�T$���H�UD�T$H�|$PL�\$(I�uH�l$XH�T$`1�D�T$PD�T$ L�\$hL�\$H�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$��n%H�+�L$0D�T$ L�\$�/����H�D��H��L$0L�\$(D�T$�3�H�UD�T$H�|$PL�\$(I�uH�l$XH�T$`1�D�T$PD�T$ L�\$hL�\$H�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$��$H�+�L$0D�T$ L�\$�����H�D��H��L$<H�D$0L�\$ D�T$�v�H�UD�T$H�|$PH�D$0L�\$ I�uH�l$XH�T$`1�D�T$PD�T$(L�\$hH��$�H�D$H�D$pH�D$xHDŽ$�HDŽ$�$DŽ$��#H�+�L$<D�T$(L�\$ H�D$����H�H�����H�EH�t$1�H�|$P�D$PH�l$XH�D$`L�t$hH�D$pH�D$xHDŽ$�L��$�HDŽ$�$DŽ$��b#H�+���H�H���L$ L�T$�?�H�UL�T$H�|$PI�uH�l$XH�T$`1�L�T$h�D$PH�D$pH�D$xHDŽ$�HDŽ$�$HDŽ$�$DŽ$���"H�+�L$ L�T$�K����!����ATUSH��pdH�%(H�D$h1�fH�=L�AffH�D	�H�H�kH���K��H�S0H���l�H�r�F@uNL�%'BfA�<$���C$�ЅC ��H��8H�kH�D$hdH3%(��H��p[]A\��H�xH�P H��H�D$H�HL�EH� H�T$@1��D$@H�|$0H�|$H�\$H�l$ L�D$(H�L$8H�D$HH�D$X$�D$P�!H�D$�?���DH�PH�p H�L$H��H�R �����,�����&����H�{01��%q���#���� �ff.�AWAVAUATUSH�����3I��H�:��I��I��D��@��t:H��u#H�7�AH��>�H�5�kH��H��1���)�@��u�H���H��u�H���AL�8A���tW��u<��ur����1���uxA�ى�M��L��A��L���4����� H��t<H�����)H�=@j���H����L���v���t�A���1�L���A�����뽾+H�=5j�X��H��눾/H�=�j�B��H���o����6H�=6j�)��H��H���AL�8�L���H� �AH�5�XH�81��(�ff.�@��ATI��UH��S��fH�=��AffH��L��H���H�8D����X������ATI��UH��SH�_I9�t+H�C H�%�H=UUt%�E$�ЅE u+H��8H�]I9�u�[]A\�f����H�]�DH�}01��n����USH��8dH�%(H��$(1�H�AH�D$8DŽ$ H�D$H�AH�D$@$H��$H�A0H���L�H E1�I�YXH9X��H�|$H�|$PH�L$H�T$(H�t$ D��$$����������H�L$H�D$@H�AH�D$(H��tvH�t$H�F(H�FH��H�\$H�|$ H�CxH�D$��H�D$8H��$H�CH�D$8H��$(dH3<%(�(H��8[]�f�E�A`�G����H�D$H�P �uf�H�B�H��H��t�H�B��r����H�@Xf.�H�|$H�G������ǀ�H�G0H��t�H�H 1�H�yXH9xtH9�t
H�|$�
�C���uH�D$H�hpH�D$H;Et#H��$H�D$��H�x�V�fD�Q`�H�\$H��H�����H�Cǀ�H�CpH�EH�D$8H��$H�C����6�fDAVI��AUATI��UH��SH��fH�=��AffH��1�L�(H��t�����L��H������H��[L��L��H��]A\A]A^�i���f����f.���H��8dH�%(H�D$(1��D$@H�<$H�=YDH�t$H��T$L��H�L$L�ɉD$ �I���H�T$(dH3%(uH��8��_�ff.�@��H��j���H���ff.����H��8dH�%(H�D$(1�H�<$H�=}�H�t$H��T$L��H�L$L���D$ ���H�T$(dH3%(uH��8����ff.�@��USH��8dH�%(H�D$(1�H�l$PH�<$L��H�t$L�Ή�T$1҃�H�L$������D$ �d���H��tH�fH�=��AffH���H��H��H�=CH�����H�\$(dH3%(uH��8[]��$�@��SH��0dH�%(H�D$(1�M��tlH�t$H�t$HH�L$�L$@H�<$L�ljT$D���D$ ����H��fH�=I�AffH�A�H��H��H�=tBH��<���H�\$(dH3%(uH��0[�H�o�AH�5OSH�81��#��y�f�SH��0L�D$ H�|$(dH�%(H��$(1�DŽ$ H�D$ H�@H�D$8H�\$ H�CH�$H��$H�C0H����L�@ 1�I�XXH9X��H�D$(��$$H�|$PH�L$H�T$H�t$H�D$@����������H�$H�D$@H�L$(1�A�H�t$H�|$(H�B�H�D$��H��$H�$H�t$H�QH��t�H��$(dH3<%(��H��0[�f.�A�x`�K����H�@Xf.�H�$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xti9�t	H�<$�<�����H���H�D$ H�Pp�H�RH9T$(�+���H�t$8H�|$ 1�����H�D$ H�T$ H�@H�@H�Bp�����Q`���fD��AUI��ATI��UH��SH��H��fH�=��AffH���L��L��H��H��L�H��[]A\A]�������AUI��ATI��UH��SH��dH�%(H�D$1�fH�=��AffH�y��L��H�L$L��H��H�I���p����t$��uH�T$dH3%(uH��[]A\A]�H�{����ff.�@��UH��SH��H��H��t�@��H��H��H��H��[]�"��f�H���AH�8�����ff.�@��H����w7��tH�>1�H�5�H�����f.�H�i�AH�8�Q��H���к1���AUATUH��SH��H��xdH�%(H�D$h1���t[L�CI�@L�`I�@ H�H��%�H=""�LH=33��H=t8H�D$hdH3%(�KH��x[]A\A]ÐH���AH�H9Au���fDL�-��AfA�}�uH�C0H����_�H�p�F�ZM���qH��t�@�������H�EH�ƒ�H���n����} �d���H
H�E�U���DH�C0H���o_�H�p�F�5���I�@H��H�|$��D$H�\$L�D$ H�D$(H�D$0H�D$8H�D$@H�D$HH�D$X$�D$P�2����D��@L�K0��H�����I��@��tL�mM����^�I�q�F��M���L���=��H�S0H�JH�P�A�rH�rH�������F�����L�CL���F=��H�P H�HH�@I�xH�@ H�|$(H�|$H�T$@��D$H�\$L�D$ H�D$0H�L$8L�l$HH�D$X$�D$P�G�Q���f�M����]�I�q�F��M���/���A�D$	�#���H����H�SH�J�D$H�T$ H�|$�L��H�\$H�L$(H�D$0H�D$8H�D$@H�D$HH�D$X$�D$P����DH���8�H�SH�|$H��H�JH�T$ ��D$H�\$H�L$(H�D$0H�D$8H�D$@H�D$HH�D$X$�D$P�5�6���I�@H��H�|$�L�D$ �D$H�\$H�D$(H�D$0H�D$8H�D$@L�l$HH�D$X$�D$P��L�CM����L���\;��H�S0H�������[\�f.�1�1�H�L$H��������r�����l����A�D$�����H����H�SH�J�D$�[���H�p H�xH�D$H�R M�H�D$H�|$8H�|$H�T$0�H�t$@H�qH�\$L�D$ L�L$(L�l$HH�D$X$�D$P��H�D$H�P����DA�D$	����I�@H�|$�L��L�D$ �D$H�\$H�D$(H�D$0H�D$8H�D$@L�l$HH�D$X$�D$P�vL�C���H����H�|$I�PH��H�\$�D$H�T$(�L�D$ H�D$0H�D$8H�D$@H�D$HH�D$X$�D$P������<�ff.��AWE1�AVI��AUI��ATU��SH���H�_dH�%(H��$�1�H�D$ H�D$�	�H��8I�^H�H��t
H�SH����H�C H�%�H=UUtA�F$��A�F t�I�~01��(`���fDI�F0H���1Z�H�p�F@�cL�%�AfA�<$t�H����8��H�L$L��H�PH�p H�R �����t�I�^�f.�H�r�U�L�NL)�H������H������M���b�H���nfD1�H9�L��L��@�����I�^H�C � A�F$������A�F ��I�FH��8M�np��I�^H���I�~�q��I�UH9��&H������NH���E�f�H�	
L��$�)D$p)�$�)�$�DŽ$�H�|$xDŽ$�H��u
���+���D�E��tD��1�D�\�pH�QD�BI9�sD�BI9�rD�A����E9�����H�� D9�u�1ɉ������H������D�E��t9H�Q1�@D�BI9�sD�BI9�rD�E�C�A���q��H�� A9�uѺ1��u������[H�S L���� �=A�E H�S8L��I�UH��H����H�щ��*���H���z6��H�{H�P H�HH��H�@H�@ H�|$8H�|$H�T$P�H�\$0�D$ @L�t$(H�D$@H�L$HH�D$XH�D$h$�D$`�s
I�^�%����U����)���1��b����D�E���rH�Q1��@��H�� A9�tLD�BI9�s�D�BI9�r�D�A��t=A��u�I9]u͉�H���DI��H��$I�Fp��f��1�������H��HȋHL�PH���@H�L$1�H�D$M�������L�C 1�I����uM���H�C@H��H�T��F t'��t"�F��)�H�I�����H��%�H�ƒ>t��@tH��H�L$H�D$I�~I��H��I��E1�H�I�RH�CH����L�h�H�KV�����VL��P�r��x���I�FH�� ǀ��$I�Fp�M��t7E�$E��t.I�L$1�fD�yH9�s
�yH9�r�9t[��H�� D9�u�H��8L��L��I�Fp�I�]��A�F$I�^��A�F ��H��8I�EI�^�0DH��L�JL�RH�L$�J H�L$M��t�H��E�$E���g���I�T$1�����H�� D9��G���D�BI9�s�D�BI9�rރ:uى�H��L�xL�PH���@H�|$H�D$�
���H��1�H���DI��L�K H�M�A���uP���H�C@I��H�T��F t)A��t#�F��D)�H�I�����H��%�H�ƒ>tA��@tH��H���D9 H�ƒ�taH�PH�SI�UH�I�Fp�$H��$�dH3%(uOH���[]A\A]A^A_�H�D$I��E1�H��H�D$���H�C먉�1�����H�C늋@ �\�����I�~01��kY���H����@ �A���I�~01��SY������ff.���H������UH��SH��H��fH�=�AffH���H��H��1�H�H�xH��[]�f��fD��AWI��AVI��AUATI��UL��SH��H�$fH�=��AffH���H��H��E1�E1���H�L�k�	�H��I�mH�D$���jH�{M��jI��L��#DDUjH�t$(�X��H�� H�<$A��H�kI�ċC$�ЅC � H��8L��H�kH��[]A\A]A^A_�fDH�{01��X����ff.���H���SH��H��8�s��H��(�g��H�����H��@H�����H��HH��@����H��PH��HH����H��X����H��`H��X���H��hH��`���H��pH��h���H��xH��p�v��H��8H��x�c��H���H��8�P��H��HH�������AH�����H���H��u[�fD�����H��H������H��[������H��P�	������H����AWAVAUATI��H�WUH��SH��H�GH�T$L��P���H9�u��I���L��P���H;D$t{A����t�M��I��H�$I9�u���M�?L;<$t�I�G0H�H��t�H�@L�pL9�s�fDH�;H��t@��uL���H��I9�w��f.�H��[]A\A]A^A_����H����ATI��UH�oSH�GH��P���H9�t#�H�;�
�H���H��P���H9�u�I��$H��t�H�H�8���H�[H��u�I��$����I��$@����I��$H���I��$P���I��$X���I��$`���I��$h���I��$p�t��I��$x�g��I��$8�Z��I��$��M��I��$��@��I��$�3��I��$�H��t�a��I��$��AI��$h��I��$@1�H�5���I��$`%�	���I��$H���&f.�H�GH�� u��H��H9�tH�;H��t�H�u�H�H��H9�u�L���!��[]A\�Tq����H����AWAVAUATUSH��H��L�g(�=G�BI�D$0L�(������P��*
�%��萫��諫���f���1���|U��H�����H��@���H��H���H���AH�H�x�ٺ������L�5��BH��I��x��I��H9�r�+DH��(I9�vH�}H��t�@��u�蓺��H��(I9�w�I�>�r�H����6���H��X�e���H��P���I�|$(�?�I�D$(�a�	��L������L������H���H�� H��H���H���H���H���H���H�CH�CH�CH��PH��XH��PH��t$f.�L�wL�?��H��A��L��M��u�H���H��t%1�H�51�����H����@��Hǃ�H��8H��t�$��Hǃ8H��(H��t���Hǃ(H�������H��H��tDL�w��L��M��u�H��t�=�BuIH���	�H������H���Ž�1�H���BH��[]A\A]A^A_�f�1��DH������KS����;�H���u�L����L���l���f.���AWAVI��AUATUSH��L�?M����H�GH�_1�M�,�H�CL)�H��H��H�T$H��~)f�M�$�L������I9�tI��H��H;l$|�L9�u�fD�ubH��8I9�t|H�{H�k ���H�{H�C���H�{(H�C�|��H�C(H�E�u�L�e�I��A�$t�I�|$�W��I�D$H�E�t�H�}H��8�=��H�}�H�E�0��H�E�I9�u�I�~P���I�FPH��[]A\A]A^A_�ff.���SH��H�����H���H�Ct	[��H�{0[���ff.���AUATI��USH��H�7H��t'H�_H�GH�{L�,�H)�H���{�L9���f�I��$�t(I��$�tfH�=2�AffH�*��L; tL���}��I�|$p��I�|$`��I�|$8H��t1�H�5���衺��I�|$@�w�I�|$H�m�I��$��`�I�|$PH��[]A\A]�L��@H�z�?��H�E�uL�H��8I9��C���H�{H�k ���H�{�
��H�{(���H�E�u�H�U�H��u��t�H�}����H�}��������H��H�5aNA�����H�H��H�Ѓ��ff.���H�7H�W�@��H��H��H�7E1�H�WE1�H���H����yjjV1�j���H��(�ATI��UH��SH��H�w�j��ǃ�Hǃ�M��������H��8Hǃ�H���H�C0Hǃ�Hǃ$H�@pH�@`H�@@H�@HH�@P���Hǃ���ƃ��� ��������	Ј��H��hH��pH��h[]A\�DL��`%�I��L���0�H�{0L��H������ ���ff.����H�H�GH�G�@��UH��LA��SH������H�5�LAH��H�����H��H��CH��t$H���BH�EH��H��H�U �j���H��H��[]�fH�=�AffH���H�H�@0H��t�H�@�ff.���USH��H�w�BH�@(H�@0H�PH�H���G��H�{�H���K�H�{�H��H��[H��]��fD��AU��%�ATUSH���ӷ���H����H����H��H����H����@����H���H�=�4H���H���H���H���H�CH�CH�CH��PH��XH��Pǃ������:����H�=�EH��`%����@�H�=24H��h%�����H�=.4H��p%����H��h%�?H��x%wHǃh%�H=�?wHǃx%�H���IH���B�M���C���H��@����1�H��H�)���H��X�����x�H��P�g��H�] H�E(���H��H�EH�C �*�����H��1�H������L�e0L�mL����y��M���H�5"�BH������H�{0�9��H�{h�0���K��H���B�?��H���BH��[]A\A]�H��A�"�H�=5�
H�����#����H�=��B�@��ATUSH��0H�|$dH�%(H�D$(1�H��t
H���t#H�D$(dH3%(�CH��0[]A\�H�H�ʃ�������H�=cC�H�^�BH�5�HAH�\$H��H���k��H�PH���~H�HH��H��t9��u4I��H��L��H�$����H�$H�@L9�tH���BL���	@H�@H�D$H�D$ H�=�CH�D$�&���H�|$�L������H���8��H�5�GAH��I���ƹ�H�HH�PH��H���{������r����Z�����������H���@H�|$�.�����4��@H��dH�%(H�D$1�H�|$蒭��H��uTH���BH��tH�L$dH3%(uWH����H�=1觯��H��H���B����H���B���T$H��H�=�01���H��������@AWAVAUATUSH���H�|$XH�t$P�T$|dH�%(H��$�1��A����H�D$H��u	H�AH�D$H�
H�=$]
���H�D$p�Q�������H�|$P�D$`�:H�|$PH��$�IH����1�H��$��}�t$|�H�H��$�H��$�H�D$袎�D$`1҉�$�H�D$H�fD��H�@�JH���H��u�H�D$hH�D$�r��Hc��T$xH����L$d�ݏH�|$X���H�D$(����HcD$xL�t$HH�@H�4���H)�H�t$ H�@H��H�D$8H��$�H�D$@H��$�H�D$0�I�FH�l$ L��$�H�$Hc��H��H��蝏�����C�E1�E1�H��H�$�BfDI��*�nI�����I��&��I�����I��L9<$��I�FK�H]H���N�$8L���m����t�L���1��H��H��$�L�`H� tL�`L��H�T$����H�T$H��H�D$uA�<$_�MH�t$(H����=0�k���H�D$H�PH��H�T$�o��H�T$L��H��H�D$�z��H�L$0H��$�L�D$H�T$H��I��H��$�L����L9<$����A��H��薎I�FL���H�D$@H��$�H�L$ H��$�H�A�H9L$8��H�D$ �@�����H�5��
H��A��蘢����H�5G
H��A���x��y����H�5�O
H��A���X��Y����H�5ab
H��A���8��9���A�D$��1<������ ������kH�H�P �B����H�D$H���A���H�BH�D$H�3����HcD$d1�H�@H��$H�<����=�C�H�L$hH�T$PH�t$XH�|$���H�����L$d����HcT$xH�RH��H�D$��H)�H�RH��H�D$(H�D$HH�D$H�D$HHH�D$ f����1�蟽�L�|$L�$I�ċD$`M�l$8A��$�H�D$I�D$P���L��I��$�H�D$H�@���A�l$p�Ky�E�H�$��e���E<*������A���<.tH��A��<:��I��$�H��藽�D��L���LyH�CH;$��H��I�WH�[L�4�L���ףL��E1�H��蹣H��t�H���r���H�L$H��H��H��@����I���@�&�A�&�<&�n���H�D$H��H��@輁��I���K���f�H�D$ H�L$L�d$ L�`H�D$H�@H���H�D$H�A�H9L$(tH�D$�c����*�A�*����H�D$�H��HH��$�PjL�L$XD��$�H�T$`H��$����H��$`I��XZH��t(H�{8H�k�3yH����H��H����H��u�H�|$�A���$����=fH�=
�AffH���H�H�C0H���:�H�h�E �TH��$�dH3%(L����H���[]A\A]A^A_��1����H��$�H�D$h�����b���H�D$P��������H�H�@ �P��wTH�D$H�������H�@H�D$H���H�|$|�G���H�D$PH�|$PH��$������~����D$`H�D$P������]H�H�@ �P��v����EH�H�@ �P���x������)H�H�@ �P���\������
H�H�@ �P���@�������H�H�x ���H�D$H�����H�L$XL��H��t"H��$��H��$�L��$����H�SH�uH��$�H�JH��$�1�DŽ$� H��$�H��$�HDŽ$�HDŽ$�HDŽ$�H��$�HDŽ$�$DŽ$�������U���@�H�|$H�$���H�$H�����fDAWI��AVI��AUATUSH��H���T$dH�%(H�D$x1��-������,����I��A�G���'E1�uM�g�������A�G�����j7��dI�WH������}A��
D��hH�R�A��H��H��t�H���XH��$�eH��tH��褬��H��1�L��L�������=�C�_�L$L��L��H���e��H��H�$�Y��L�$L�hI��M�����H��L��M��A�jL�$H������	�I�D$A�jH�pPAWD�D$���I��XZL�$L����M��t.fH�='�AffH���H�H�C0H���I6�H�h�E ��H�L$xdH3%(L���H�Ĉ[]A\A]A^A_������I�H�P �B����5�������H�H�P �B����5��d����H�H�P �B����5��B���H�H�@ �P���~5���H�P��������MI�H�P �B��wE1������L�b���@���H�H�P �B��vЃ��H�H�P �B��v�����H�H�@ �P����E1���]���L�`�T����E1�H�������H�|$芠��H��H��$��������1�H�����fDH������Z���L���K������T$L��H��L���&�I���-���fDH�R���L��I��tH�t$`�L�t$`L�l$h�]��H�SH�uH�|$�D$ H�\$H�JH�T$ 1�H�D$0H�L$(H�D$8H�D$@H�D$HH�D$X$�D$P������A��������H�H�@ �P����3��#�������H�H�@ �P���3�������ubH�H�x �ؼ��H��������uIH�H�@ �P���\�����u1H�H�@ �P���D�����uH�H�x �_���I������b��f���ATL�%k�BU��H��SH���$��H��H�����H��H�����I���H��[]A\�Z�f.���S�H��B蚴��H���^�H�=G9AH������H�=T*A�'H��8���H��([�f.����ff.���H�5%(H�=�!�i�	f���H���BH��8�ff.�f���H���ASH�e�BH�8腹�H�����H�5N
1�H��8H�?�BH��8���H�,�BH��8�h��H�
H�5�	
[H��������H���BH��tH��f�H��fH�=D�AffH�<��H�H�@0H��tH�@H�H��ÐUI��H��AWI��AVI��AUATI��SH��hL�VdH�%(H�E�1�H�H�H�BI��A���@�M������D�M�@��@�2�P��f��~!��@I�H��L��D�E���L�U��E�����A�T$ �E�L�U�LcE�9�LcM���M��������! t)1�H�}�dH3<%(�0H�e�[A\A]A^A_]�D��uI�BH�5�t�I�F��t+��B`u"H�@H�@I�
I�B H�����I�B1�뉁���A����A����K�@I�AH��4AH��I�B�K���@f����f��~ f���W�@ ���� �I�$M���wH��H���H�H���KH��H��%�9��H��1�H�� M�������uA��L��H�����H	���D�E�L�]�L�U��6,��L�U�L�]�H��D�E�1��uH����'���@H�~��M���?���������I�GD��p���D��t���H�I�BL��x����M�H�E�H��BH�U�H��PL�U�H�}���P��H�U�L�U��NjM�L��x����E�H�E�@��H�U�D��t���D��p���H�@H�E��H�}�H�U�1��2BH��H����H��H	ƃ�@u�H�}��L��x���L�]�D�E�D�M��د�D�M�D�E���L�]�L��x����I�F����@�s����E1�M��H��L��L��L���l���-���@�[������H���z���aA��Mc�K�Ä����H�������f.�@�������H�H8HcxA�T$ H�M�@�� �|M���E-�L�KA�	)�9��j���Hc�M�iH��H��H��=��H�BI��H��H%�I)�H���L��H9�tH��H��$�H9�u��t	H)�H�L4�L�d$I���H��t"I�4�L��L�U��M�L�]���L�U��M�L�]�H�}�M��L��L�U�HcHcGL��H)�L��M����H�C�� �����L�U�uI�BH�5������H����I�B1����H�q����?���@D�H�@H��L��I�L�]�E�D�M�D��D�E�L�U��E�����A�T$ D�M�D�E���D)����E�L�U�L�]�9��vM��������%! �À������A9�~$Hc��D�I��H�I�T�H�H��H9�u�I�FHc�H�@0������DH��1����H�{H�KH�����H�����������fDH������H�sA�@�H�{H�H�KH�S I��I��H�����A����H!�L	�I��A�����L	�H	��Q��'��H�1��8���9�����H�}�E1�1�L��L�U�HcHcGL��H)�1�M�$�M�����H�}�L�U�HcI�<����M������� ������uI�BH�5������H��I�B1����;Q �����H��1�����S �����uI�BH�5��`���H��I�B�P������H�����uI�BH�5��,���H�����I�B�����[����K���H�� H��M�A�P�H	�Hc�I	�L��H��I����H����H�H�� H��H��H!ȹ����H�H!�H	�H	�H��H�1�������H�p H�}�1�L�]�D��t���D��x����M��+��L�U��M���L�]�D��x���D��t������������A����L��L�����D�M�L�]�L�U�褴�L�U�L�]�H�����D�E�D�M�u
�}�����H�}�D�M�D�E�L�]�L�U����H�E�I�FH�pHH�E�H�x��H�U�L�U�H��L�]�D�E�H��D�M��z(��(��[�������D��L��L���9�f���AWAVI��AUI��ATUSH��H��8H�BH�@H�@H�PH�BD�PD���H�H����H��%�HcK I�}A�,H��E�A��D�T$H��H)�H��L���c���H�D�T$H�2H�S@������L�JI�MM�^LcC H�{I�QL�zHc�H����u|I��H��Hc�E)�L)�H�KH�F�H�4�I�EI�GD��API��L��ATVHPL��R�����H�� H��8�$[]A\A]A^A_�@�@ � ����v�a����I�E I�uH��� H��H��H�H��H���H��#H9���A�F$��A�F ��I�I�E8M�e@I�FH�CD�WM�t$I�$E��t8A�r�I��H�FN��H�D$1��f�H��I��I�L�H�HH9�u�H�D$M�4Ƌ�H�KL��L�CP���D)�PAVHWL��RH������M�e@H�� ����H�@��I�E`I�EPH��H��H��H��HE�H�C�%���I�~01�L�\$(H�T$ H�L$L�L$L�D$�+��L�\$(H�T$ H�L$L�L$L�D$����AWI��AVI��AUATUSH��H��8H�BH�NH��H�@H�@H�PH�BLc`D���HcC E��E��H��H)���H�H�{H��������L�OHc�I�NM�_H����HcS L�CI�yL�WufH��E)�L��H)�H�A�H��H�KI�FI�BJ�⋰VL��AURHh�U���H�� H��8�$[]A\A]A^A_�fD�r�o���I�F I�vH��� H��L��M�H��I���I��#H9���A�G$��A�G ��I�zI�F8M�n@I�GH�CD�GM�}I�EE��t9A�p�H��H�FH��H�D$1��H��H��I�T�H�PH9�u�H�D$M�<Nj�H�KL��L��P���D)�L�CPAWHoL��U���M�n@H�� �����H�@A��I�F`I�FPH��H��H��I��HE�H�C�$���I�01�L�\$(H�T$ L�L$L�T$H�L$�@)��L�\$(H�T$ L�L$L�T$H�L$��f�AWI��AVI��AUI����ATE��UH��L��SH���dH�%(H��$�1�H�T$�;9��H����H��H���L���
��HDŽ$�H��$�E���HH�����A�ă��U��� �A�L�mxH��$�H�D$`H�
��H�D$ H�D$ H��H��$�H�ExH��$�H��$�H�D$0H�D$0�H�D$8H�\$@H�L$HH�D$PHDŽ$�DŽ$�H�D$`�H�D$hH�D$p�H�D$xH�D$(H��$�HDŽ$�L��$�D��$���L�mxH���������H��$�dH3%(u=H���[]A\A]A^A_�@�[��H�8u;�A�����D�����������H���AH�5�"H�81��*��H�����L��H�D$�U��M��L�L$I����!��L"�ff.�@AWAVE��AUI��ATA��USH��H��H�L$L�$dH�%(H��$�1�H����H���AH�(fH�=��AffH脽�H��A�1�H��L�8L���K�������u5DH�$H��$�dH3%(�4H��[]A\A]A^A_�H�A�AH�8H���1�H�މL$�o6���L$H��H���_H�@H���R���<�D<��A�����H�g�H�T$PH�RH�D$X1�E����D�d$(H�D$@���H�D$HH�D$`�D$,�u
A�����H�H�T$E��L��H��$�Ic�H��$�H��$�H�D$pH�D$0H�D$0H��$�H�D$@H��$�I�GxI�GxHDŽ$�DŽ$�H�D$p�H�D$xH��$�H�D$8H��$�L��$�D��$���$����`���@@��uBH�ofH�=��AffH螻�H��A�L��H��L�8L���d�����������I�}�K����H���I����A����A���H��AH�(fH�=6�AffH�.��H��L��H��A�L�8L�������������A����A����H���AH�8����H�ֿH�T$��F���L$H��t%H�@H��t�H�T$��<����f�H��E��L��H��AVL���t$QH��L�L$(���H�� H��$�����	���f�H���AH�(�����H�q�AH�(fH�=>�AffH�6��H��A��H��L�8L��������������H�1�AH�8�����L��H�$�4S�H�$������A���1�L���f�fDH���AH�(fH�=��AffH趹�H��A��H��L�8L���z��������0���H���AH�8�[���H�t$H�L$(H�T$,E��H��$�袬��D�d$(H�D$�D$,�����H���AH�8����f�H��AH�(����H�٢AH�8������H��L���qJ�����E��A�$����ff.���E1�A�$���ff.�AWAVAUATUSH��8dH�%(H�D$(1����q�I��H��H�5P��Hc�H��H�>��DH��L�$���L�$�H��H��L��������H�\$(dH3%(�H��8[]A\A]A^A_�DH����I�|$H��胯�H�����H��蠝�H���X(��H�����I�L$ �t��H�A�H��H�����H�y�1����H��t�H�e�AL�*H�k�AL�"H��AL�H���AL�H���AL�
H���AL�H�H�PH�X�΁�H����H�؅�tL��H��t���\H�C�H��tH��t
��D��
�dH����H��L�$H�T$蟜�L�$I��I���H�T$���pH��AL��H�5H�81�����DM����H�ȤAH�H��L�$�A��1ɺH��H���߽��L�$H���H�H������������H�x�-��I�|$H�����H�������DI�T$ �ufDH�B�H��H��t�H�z�������L�����H��1�H�������H�JH���H���H�ApH�x1�H�������H�B1�H�p 脎������j���f.�H���(��I�t$ I��Hc�u�H�F�H��H��t�H���s���H��H��A���;H��+��w'H��&H��w#1�H���Ӵ�H����������DH��`t�H�=+1���@H�H�ǃ�H�������� ��������L��H�������L��H�������L����������L��ID��{�����tH������H�[fDH���
H���&��H��H������H����� �����t1�H�=N1��;������fDH�y��Z���H���u�����@�������A��tzI���I����A����A���3H���AH��6���M�������A�����I���H��H������L��L���m�������T���@I�X����L�����H���H����0���L�CI�H �t�]fDH�A�H��H����CH�y�1��Y���H��H��tِH�EH�©�>H�mH��u�I�@H����H��AH�8L���Ɵ��������@1�����H�AH���������H�0H����H���������HE�����f�H����H����������L��ID�����@�H�L$��L��H�l$H�D$苘�H��1�H��$���H�����������DH�i�AH��l���f�H�1�AH��T���H�y�����H��H���������f�L�mM��trH����L�q�tM����H�ƟAL�0I��tr��L��L���^��I��H��t[L��L��H���N��I�$����M������H�UH�}��tH���!H�a�AH�8H���>���L�C����I�UH��t�I�EL��I���D���H�	�AH��\���A��uM�v�R���L���Z���L���R���I��tKI��tTA��u0A����H�w�AL�0����H�x�AH�����L������H��AL�0��H���AL�0���H�{�AL�0�����u	H�x�p���H����H��tt�ua<��H���AH�8�E���H���AL�0������@��u	H�����H��tlH��tW@��uB@��tiH���AH�8���H�:�AH�8���H�ۖAH�8����H���AH�8����H�
�AH�8�w���H���AH�8�h���H�ϚAH�8�Y���H�X�AH�8�J���H�I�AH�8���H���AH�5��
H�81��y��f�AWL��AAVAUATUSH��8dH�%(H��$(1�H����,H�GI��I��H�I��H�������I�GI�vL��I�L�`�I�FI�I��L��H���B��1��H�@H��tH�P���<��Z�I�I��f.�����I�VI�FL��L��I�I��H�2H�1�B@���,H��H�����f�H��%���H��H)�I�H��$HDŽ$H��$�H��$��$���$���������$H��uvH��AH�H�BH9HuzH�xH�?�� ukH��$�H��$�H��L��PI��H��$��H�CL�H��H�C�e����L��L��耗�������u#H�BH�IH9Ht�DH�{H���0��놐H���a+H���f+���?+���9EH��AH��7���I�uH9�tH���AH�~�8L�gtkI��$(H��t5L���I��I�ED���E���V*I��$�#���I�uH�I��I�� H�:�AI��$0�RH��I��$0H9��b/f�H�I��I�� ��L��L���v�������I�NL��I�I��I�OH��BH�qI�wH��b��L��L���4�������I�NL��I�I��I�OH�۠BH�qI�wH��b��L��L��������I�GI�vL��H�P�I�F��I�I��I�G H���BH�x�H����RHc�H��I�o�e��L��L��蔕������I�GI�vL��I� H�P�I�F��I�I��H�-�B���PHc�H��I�o�e��L��L���>�������I�FI�VL��I�I��I�G H��BH��H�@�H��H)�H�I�GH�xI�H��f��L��L���������I�NI�_ I�vL��I�7I��H��H���BH)�I�OH�3H�yI�H�1�b��L��L��薔������I�VI�NI��L��M�7L��L��H�6�B�	���I��I�G H�(A�E$��A�E ��PH�C8�� I�E��'H�K@H�S8I��H�qI��H�s@L��"��L��L����������I�FI�VI�NL��I�L��L��I��H���B脓��I�WH�JI�OH��c��L��L���Ó������M�fI�FL��I�I�I��L�o
AI�wIcD$I�$H�R�BH��H)�H��L��A��I�O�A+T$Hc�H��I�WH�B��e��L��L���F�������I�GM�fL��H�x�I�FL��I�I��H��B�U���H��$��LI�WH�B��c��L��L��������I�GI�NL��M��L�@�H�X�I�FI�I��H���BM��t=A��u7H��AH�I9@u'���BuL��H�$L�D$�x�H�$H����FM�t$H��H������I�F�I�D$I��H�H��I�D$I�/�����L��L���?�������I�GI�^M�FM��I�nI��H�p�I�H�ڜBH���M'f���BG�(I�l$�#��L��L���������I�FI�^M��L�<$I�m0H�D$I�FI�I��H�H�v�BH��u�D�˛�H�H���wDH���DH9��kDA�E$��A�E t�I�}01��������L��L���T�������I�WI�^I�nI��H�R�I�H���BH���")I�o�#��L��L����������I�WI�^I�nI��H�R�I�H���BH������1'A�E$��A�E ��WH��I�oI��I��#��L��L��諐������I�WI�^I�nI��H�R�I�H�M�BH�������&A�E$��A�E ��WH��I�oI��I��#��L��L���H�������A�E$I�nI��M�7��H��BA�E ��KI��I��I�� ��L��L����������I�wI�WI��L��L�V�H��M�7I�wH���BH��tlI�G H�8@�ǀ�G(H�JI�W@D���M��J�T��A t,@��t&D�YE�C�E)�Mc�J�����bH��%�H�ƒ9�3(��@�*(H9���
�H�C H�(A�E$��A�E �LH�C8�� I�E��"H�S@H�K8I��L�H��I��H�S@�!��L��L����������I�~I�FL��L��I�I��H�H���B���IH��H�����f��H�����H��H)�I�wH��$HDŽ$H��$�H��$��$�$���H��$�H��L�����$�|��I��H��$��>H�CL�H��H�C�e��L��L���-�������I�FM�FM�fL��I�I��L��H�͘BI�L$L�D$H�L$fH�=�AffH���H��$�L��A�RI�$L�T$xARH�L$L�D$ H�8L�T$�5H��$�^_L�$���>HH��H�����f�H�����H��H)�I�wH��$HDŽ$L��$�H��$��$�$�H��$�����L��H�߃���$�{'��H��$�H��L��H��$��PI��H��$��>H�D$xI9D$tH�uH�{I�D$���>H�CL�H��H�C�e��L��L��讌������M�fI�FI�VL��I��L��I��I�4$H�E�BL���/I�$����GH��H�����f�H�����H��H)�I�wH��$HDŽ$L��$�H��$��$�$�H��$�����L��H�����$�H&��H��$�H��L��H��$��PI��H��$��=H�EL�H��H�E�c��L��L��衋������I�FI�VM�fL��I�I��L��H�A�BH�����H���
Hc�H�>����L��L���O�������I�VI�F I�vL��I�^I�I��H��BH����r�I�GL��H�P���I�O�H)�H��I�WH�B��e ��L��L���ߊ������I�FI�~L��L��I�I��H���B���B��#H��$��#I�GH�PI�WH�8�c��L��L��胊������I�FI�~L��L��I�I��H�'�B�T�B�J#H��$�@#I�GH�PI�WH�8�c��L��L���'�������I�nI�vL��L��I�/I��H�˔B���B�I#H��$�?#I�WH�JI�OH�2�`��L��L���ˉ������I�nM�fL��L��I�/I��H�o�B���B��"I��$��"I�WH�JI�OL�"�`��L��L���o�������I�GI�vL��M��I�H�X�I�FI�I��H��BH����1��?"��H�@H���j"H�P���<�X"H�9	�H9B�G"H���'	�H��H��$�2"I�D$H�X��e��L��L���ψ������I�FM�FI�nL��I�I��M��H�o�BH�ML�D$H�L$fH�=��AffH詞�H��$�E1�L��RH�UL�T$XARL�D$ H�L$H�8L�T$�H0H�t$`ZYL�$@���%EH��H�����f�H�����H��H)�I�H��$HDŽ$L��$�H��$��$�$�H��$���������$H���G7H���AH�H�D$XH9H�zHH�PH��� �gHH��$�H��$�L��L��PI��H��$�d8H�D$XH9EtH�uI�|$H�E���8I�D$L�H��I�D$�c��L��L���+�������M�fI�FI�V1�I�L��L��I��I�4$H�őBL���u*I�4$@���CH��H�����f�H�����H��H)�I�OH��$HDŽ$L��$�H��$��$�$�H��$���������$H����5H���AH�I�D$H9H�GH�PH��� ��FH��$�H��$�H��L��PI��H��$�#6H�EL�H��H�E�c��L��L���������I�wI�VI�~L��I�NA�I��H�v�I�oI�?L��H���B��c��L��L��褅������I�FI�VI�NL��I�E1��L��I��H�<�B�O��c��L��L���]�������I�FM�fI�� I�^�H�$D��I�G��H�h�H�H�M�7I�oH��B���y��������\H���S@���IH�E��H��H���4L��H��H���o���I��H���Q�uH���H���H��H��H�=�	荏����L��L��莄������I�GI�VI�~L��L��I��H�@�I��H�%�BH��t���2H���9���HE�H�VH�B��a��L��L��� �������I�FI� I�VL��I�NI�I��L��H��H���BH)�H�?@����H��wH�����H�EH�PH�UH��c��L��L��訃������I�FI�OL��L��M�FM�fH�$I�F I�I��H�<�BH�D$H$H��������L�L��H�� H�D$L�Ѓ����sC���C���CH�=��B��AL�I I�I�Ã�I�� �D$DD�\$@D;\$�|H����7I��H��$�LD��'��L��L���ɂ������I�VL��I�vI�nH��������H�������I�GH��L��L��L�@�I�F I�I��H�8�B�������HD�I�GH�h��c ��L��L���F�������I�GI�NL��L��H�P�H�p�I�FI�I��H�ތB��I�WH�J�I�OH�B�e��L��L���������I�NI�vL��I�7I��H��H���BI)O�`��L��L��贁������I�vI�GM�FL��M��H�x�H��H��M�H)�H�I�BH�{�I�GH�x��b��L��L���c�������I�VI�vL��I�I��I�WH��H��BH��H�zH)�H�s�I�H�2�`��L��L����������I�FI�VM��M��I�I��M�GH���BH�4�H��H����:L��I�<�I�P�H)�H)�fDH�2H�H��H��H�p�H�JH9�u�M�BA�a��L��L��莀������I�GI�vL��I��L�@�H�x�I�7H�-�BL�@�H�x�b��L��L���K�������I�vI�FL��I�I�I��H��H��BL�$�H��=��SM���uL�I��e��L��L����������I�GI�~L��I��H�p�I�?H�xH���BI�H�0H�p��a��L��L���������I�NL��I�oI�I��H�O�B�b��L��L���u������I�GI�VL��H�x�H�p�I�FI�I��H��B�t�I�WH�J�I�OH�B�e��L��L���!������I�FI�NL��L��L�% �AI�I��H���BfA�<$��:H����H�$�ȏ�H�$I��H�C�H)�H��H�SL�b��e��L��L���~������I�WL��L��H�B�L�b�I�VI�I��H�C�BH����H�SL�b�H�B�e��L��L���S~������I�GI�~L��H�p�I�FI�I��H��B�E���I�WH�B��c��L��L���~������I�^I�FI�wM��I�I��H��H���BH��H��H)�H�~����I�OH��I�WH�B�A�d$��L��L���}������I�GL��H�x�H�p�I�FI�I��H�G�B��l��I�WH�J�I�OH�B�c��L��L���X}������I�GL��H�x�H�p�I�FI�I��H���B��k��I�WH�J�I�OH�B�c��L��L���}������I�GI�VM��L��I�^L�`�I�FI�oI�I�ƉЃ�H���BL�d$H�$M���L��H�T$L�D$�ˑ�L�D$H�T$H��H�D$H�0H��� ��,H��L�HL�\$H��I��Hc$H�������/L9��}51�H9��3OH�EH��K�L�1�f.�H�1H��I��H��H��H�p�H�4:H9�w�L�UD�$E��t/H�]L��L��L�\$H)�L�$H�CH�E�a��L�$L�\$H�L��$�H�D$HA�`��L��L���{������L�%‰AI�^I�NL��I�I��H�U�BfA�<$��8H��虞�H�UH�JH�MH��#��L��L���Y{������H�
h�AI�^M�fL��I�I��H���Bf�9�l5L�����H�UH�JH�MH��#��L��L���z������I�GM��L��H�p�H�h�I�FI�I��H�H���B�Ā�[H�F(H����+H�CH�P�H�SH�h�A�d$��L��L���z������M�fI�FI�WL��I�I��L��J��L��H�+�BH)�諀�I�O�L)�H��I�WH�B��e��L��L���1z������I�GL��H�x�I�FI�I��H�ԄB觅�I�WH�B��e��L��L����y������I�NI�FI�^L��I�I�WI��1�H��H��H�L$H)�H�w�B�*~���H��H�$�~��H�$H��H��荨�H�L$I�W�H)�H��I�GH�X��e��L��L���^y������I�GL��H�p�H�x�I�FI�I��H���B�p���I�WH�J�I�OH�B�c��L��L���y������I�^I�FI�wM��I�I��H��H��H���BH)��F���I�O�H)�H��I�WH�B�A�d$��L��L���x������I�FI�v�L��I�L��I��H�I�B�|���I�WH�JI�OH��c��L��L���[x������I�FI�v1�L��I�L��I��H���B�0���I�WH�JI�OH��c��L��L���x������I�vI�FL��L��I�I��I�O H���B������uZ�t �W9�H�A�H��H����<9H�y�1���v��H��t�@H������9H�@H��u�$�����NH�vAH�8H�SH�BH�CH�:�e��L��L���Kw������I�NI�vL��I�I��I�OH��BH�yI�H�1�`��L��L���	w������I�NL��I�wI�I��I�OH���BH�yI�H�1�b��L��L����v������I�NL��I�I��I�OH�n�BH�qI�wH��b��L��L���v������I�GI�~L��H�p�I�FI�I��H�$�B���I�o�e��L��L���@v������I�FI�~L��I�I��H��B�*���I�WH�JI�OH��c��L��L���u������I�GI�vM��L��H�h�H�P�I�FI�I��H���BH��t@��uH�E��H��H���9H���\��L��L���u������I�GI�nL�t$L�|$H�P�H�H�I�FI�I��H�)�BH����	H���.6DH�qpAH�5��
H�81��`����L��L���!u������I�FI�VL��L��I�L��I��H��B���I�WH�JI�OH��e��L��L����t������I�FL��L��H�$I�FH�D$I�GH�@�H�D$I�FI�I��I�GH�ZBH��t�uH�H�ƒ�H���P.H�CH�K H�D$0���H�y��s��I��H�����l�����L��L���1t������I�FM�fL��L��M�G H�D$ I�FI�I��I�GH��~BH�D$(A�t�
"@I�@�H��I�����!I�x�1��	s��H��t�H��I�$H��tH�=�yAH9x��&H�ptAH��H�VH�H�D$H�jsAH�H�D$H��nAH�H�D$H��pAH�H�$H��tAL�H��wAL�H��tc@H�H�v��I���tM��H��t@���VL�FfDI��tM��t
A�����
�% H��H�VH��u�H��pAH�5�
H�81�������L��L���r������I�w I�FI�VL��M�fL��I�I��H�]}B�uH�F�H��H��t�M�����L���`��L��H��A��H���14H��'�6��H��+�t(H��`��I螙��[��L��L���r������I�GI�vL��L��I�NI� H�P�I�F��I�I��H��|BH��t1�DH��H��H��H9�u���+Hc�H��H�k�e��L��L���q������I�NI�FI�vL��I�I��M��I�G H�<|BH��t1�DH�@�H��H��H9�u�H��H)�H�I�@H�HI�HH��g��L��L���(q������I�VL��I�I��H��{B�`��L��L���p������I�GI�NM��L��I�vI�_ H�P�I�FI�I��H��{BH��t1�fDH�[�H��H��H9�u���B.Hc�H��H�H�mA�d$��L��L���up������I�NI�FI�vL��I�I��M��I�_ H�{BH��t1�f�H�[�H��H��H9�u�H�����H�C�H���2��>'H�mAH����L��L����o������I�VI�FI�NL��I�I��M��I�_ H��zBH��t1�DH�[�H��H��H9�u�H���H��H)�H�I�T$H�JI�L$H��e��L��L���io������I�OI�FM�FL��M�VL��I�I��H�zBH�D$H$H������u{L�!L��H�� H�$L�������/���S/���J/H�=��B�.L�I I�I�Ã�I�� �D$DD�\$@D9$��3���tI���H�����I!�M�"�H�UH�JH�MH��c��L��L���n������I�GI�oM��L��M�VM�NL�X�I�FI�I��H�yBH��t
@����H���*��f.���L��L���!n������I�GI�w L��L��I�VH�H�I�FI�I��H��xB�u@H�F�H��H��t�L���p]��H�k�e�H�A�H��H����L���H�y�1���l��H��t�I��H�D$H�H��tH�=�sAH9x��!H�DnAL��H�QH�H�D$(H�>mAH�H�D$ H��hAH�H�D$H�XjAL�H�~nAL�H�dqAL�H���7���H�L�a��L���tL��M��tA���lI�t$DH��tH��t
@�����
�oH��H�QH��u�������L��L���l������I�GI�VI��L��L��H�H�M�7H�LwB�U��I��H��$(dH3%(L���;@H��8[]A\A]A^A_�H�~ H�����f�Hc�H��H)�I�OH��$�F�$�HDŽ$H��$�H��$��$����H�UgAH����H�&mAH�����H��hAH�����H�����L!�I�A�H�EH�PH�UL� �c A�����I�$L��H�΃�H��������H�������H������H������������H���H��H����H��H���/7��H��H�\$H�CH�H�H�KH�P�H�D$�`H��H�$H��耊�H�$H�sI��H��H��L��H)��|�H�$��L����X��H�UH�JH�MH��cH�����f���BG����H���H����$H����H���H�����F��$�f(�fT
.�	f.
�	wjf��H��$��L$H�t$L�$蔪��L$L�$H�t$f.�z5u3��$��
��	f/���<f/��	��<�H,�H�tH��$�L������tH��$�H�H������H��I�oI��I��#I�o�#I�o�#���L�A��I�����H��L�$���L�$A����H�
��
Jc�H�>��H��H)�H�I�T$H�JI�L$H��eM��A����!H��t��uH���H����!H���}��H�5��	H��H�,dAH�81��"���t!�M*�H�A�H��H����1*H�y�1��h��H��t�H�xH���>�襏�H���1�H��蕏�I��H�$1�E1�1�L��L��I�oH�@D��D���H�XD�T$譋��I�O D�T$I���u@H�A�H��H���t�L�A�ARI�}L��AV�33USH�t$ �(���I�EH�� I��H�I��H���A�E$��A�E �=1H��I�oI��I��#H�t	�g`�H����1���H�s�L��H�$���H�$�����0Hc�H��H�����H��L��L)��կ�I�L�I��e1��
��H�CH��t�uH�H����H��u	�Ā�Q��H���CX�H�kA�d$H������苉�I��$(I�uH���(��H�I��I�� L�eH���[��I��I�$H�EI��W��H�
�tAf�9��4L�sL��H���Ƌ�I�H�CfDI��I�/���L�%�tAfA�<$�8L�cH��H��誉�I��I�$H�CI�/����H��&�>��T������L��L���Sf�������L��L���?f��I�FI��I������L��L���!f�������L��L���
f���x����L��L���e���d����L��L����e���P����L��L����e���<����L��L���e���(������I�G�L��H�x�I�FI�I��H�VpB�yW��H���h'H��$����I�W1�H�B��c����I�GL��L��H�x�I�FI�I��H��H�pB���n��B�jH��������H9���(H���tH�GH��$�`��H�UH�B��c��L��L����d���Q����L��L����d���=����L��L���d���)����L��L���d�������L��L���d�������L��L���d��������L��L���nd����������I�GL��L��H�x�H�p�I�FI�I��H��H�oBH!���
���B��
H��a���H��H��H�H9���,H�����,H�@觗�H��$�%���H�SH�J�H�KH�B�e����I�GI�NL��L��I��H�P�H�@�I�H�fnBH��H!����r
�`�B�e
H�H������H��H�H9�u�H���t5H��H�H��H���(5H��H��?H��H�
@��HD�H�DH��$����H�UH�J�H�MH�B�c����I�FI�vM��I�oH�D$I�GH��L�H�H�@�H�D$I�FL��I�I��H��mBL�$����H�@H��tH�PL�$���<��$I��M��M�'�������I�GI�NL��I�H�p�H�P�I�FI�I��H�,mB�/���H��$�����I�WH�J�I�OH�B�e����I�GI�vL��L��I��L�@�H�@�I�7H��lBL��H!ƃ����ީB��I9���HM�H�BH�p�H�rH�x�a����I�GI�vL��L��I��L�@�H�@�I�7H�rlBL��H!ƃ����t�B��I9���HO�H�BH�p�H�rH�x�a����I�WI�~L��I��H�B�L�B�I�?H�	lBL!���:�7�B�-H��$�#H�z�I�H�B�a����I�GI�vL��L��I��L�@�H�@�I�7H��kBL��H!ƃ��H	�¨B�;	I9���HL�H�BH�p�H�rH�x�a����I�GL��L��H�x�H�p�I�FI�I��H�@kBH�������@��t"H��H!�������8�B���������6H��_AH�GH;��H��cAH;�k�����B�^����_�H��$�O���H�SH�J�H�KH�B�e����I�GI�vL��L��I��L�@�H�@�I�7H��jBL��H!ƃ������B�|I9���HN�H�BH�p�H�rH�x�a����I�GL��L��H�x�H�p�I�FI�I��H�$jBH������@������H�cAH�GH;�
"H��^AH;������B�x��賨�H��$�i��H�UH�J�H�MH�B�c����I�GI�~L��I��H�P�L�@�I�?H��iBH��L!ǃ������B��L	�H��$��H�x�I�H�P�a����I�G�L��H�x�I�FI�I��H�3iB�VP��H��$����I�WH�B��c����I�GL��L��H�H�H�x�I�FI�I��H��hBH���|�����s��H��aAH�qH;0�� H��aAH�H9��L����B�?��H��H���i�H��$�*��H�UH�J�H�MH�B�c��L��L���]�������L��L���]�������L��L���]��������L��L���l]��������L��L���X]��������L��L���D]�������L��L���0]���������I�WI�NL��L��I��H�B�H�R�I�H��gBH��H!у�����B��H��H)���0H��$����H�SH�J�H�KH�B�e����I�GM��L��H�H�L�@�I�FI�I��H��H�RgBL!����L�B�H�I��I��������H��I��H��H��1�H�@H�H�I9�H��$ I��H�D	H��$�����H�SH�J�H�KH�B�A�d$����I�GI�vL��L��H�P�I�FI�I��H��fBH��������B��H�EH�H��c����I�GL��L��H�x�H�p�L�`�I�FI�I��H�PfBH������@������H�[AH�GH;�aH��^AH;�����0�B����L����]�I��$����H�EH�P�H�UL�`�c����I�GL��L��H�x�H�p�I�FI�I��H��H��eBH!������B��H��H���0H��H��$���H�UH�J�H�MH�B�c����I�G�
L��H�x�I�FI�I��H�IeB�lL��H��$����I�WH�B��cH��L��H��H��H	Ш�H�������M�������H��L	�������H��ZAH�H9A�z���I;@�p����ݡB�c���H�ȃ�H����#�IL����H���I#�A@�Y�H�0fH~�H9�t+fH~�H��<��������"H��H���u�����E��a���H��H��H��H��H	Ш��H�����H�����H��H	����H�ZAH�H9G���H;F�|��B�o��"x��6���H��H��H��H��H	����H���Z���H���Q���H��H	����B���H�
�YAH�	H9J�.���H;H�$������B����H����H���� H�pH�Ѓ�H���� H�JH�4$�$H�$�$��x�H�0fH~�H9��CfH~�H��<�������W H���"H������L��H��H��H��H	�����M���H���L��H	ǃ���H�5�XAH�6I9p��H;p���ŸB��L�ƃ�H���0-�AHH�ƃ�H����,�@f.ȸHG���L��H��H��H��H	�����M���nH���eL��H	ǃ��VH�5XAH�6I9p�BH;p�8�!�B�+L�ƃ�H���c.�AHH�ƃ�H���.�@f.ȸHC��3���H��H��H��H��H	����
H����H����H��H	��H�
xWAH�	H9H���H;J����\�B���H����H���L,�@H�Ѓ�H���7-�J�\�H�0fH~�H9�t+fH~�H��<�������	 H��H���K����rB��7���H��H��H��H��H	Ш�5���B�(H����H���;#�OH���H���>%�FH�0�X�fH~�H9�t+fH~�H��<�������H��H���������A����L��H��H��H��H	�����M���QH���HL��H	ǃ��9H�5�UAH�6I9p�%H;p���B�L�ƃ�H����)�A@H�ƃ�H���H)�Hf.ȸHG����L��H��H��H��H	�����M����H����L��H	ǃ���H�5[UAH�6I9p��H;p�x�M�B�kL�ƃ�H����(�A@H�ƃ�H���1(�Hf.ȸHC���f.�M�M��A��I����A�� �
���f.�H�6H����H������ �����M��H�����L�$H�����L�D$@�����@��L�D$LDD$�v�L��I�����L��I�����H�t$A���u�A��H�t$(HDt$ �a�H�}I�H��H��D�B���H�� H��������v4L��L��H��L�L$L�\$L�$�<��L�$L�\$H��$L�L$�3L��L��L��H���2w��H�kA�d$���t@H���;@����H����H���t@����@��H�t$HDt$H����%H�T$ H�|$(M���Z��H�SH�JH�KH��e��tM���A����M�d$I���k%H�T$H�4$L��L�\$�n�L�\$L�D$L��H�$H�|$0L���Z��H�k�eI��I��a���H��QAH����I�x��Q��H��H���������H����H����H��$�����K��<��D��7��H����H����H��$��H����������Y���H��H�� 9���H�E�� uH�ED��L��M��tYA��u;L��H��H�L$ D�D$L�L$L�T$L�$�l�L�$L�T$L�L$D�D$H�L$ I��$uH�E�����fDH�kA�d$H�������������H��a ����������uH�J�����u>H�J���H����H�������
���8H�QAH�����H����H���	��������H��PAH��K��L�H L�`L�\$H���I�uH9�tXH�tRAH�~�8L�gtDI��$(H����L���I��I�E������0�I��$����I�uH�I��I�� H�I��I�� I�uH9�tXH�RAH�~�8L�gtDI��$(H����L���I��I�E��������I��$���I�uH�I��I�� H�I��I�� H��贘��U��I�uI9���H��QAH�~�8H�O��H��(H���hL���I��I�ED���E���B�H�D$XH9Et&H�uI�|$H�E�uH��L�$�!j�L�$I��$�5��I�EI��H�I�� I�uH9��%H��PAH�~�8H�O�
H��(H����L���I��I�E��������H�D$xI9D$t&H�uH�{I�D$�uH��L�$�i�L�$I��$����I�EI��H�I�� I�uH9�tZH�ZPAH�~�8L�gtFI��$(H���L���I��I�ED���E����I��$����I�uH�I��I�� H�I��I�� H�+H�t$H��H�=�&��H��,���<�H��I�EH�xH�kH���gH�H�$H�PH�*H��H�PA�d$H�k��H�|$�&��H����H�}�	�H�@H���L���H�P���<�:���1�H�1��H9B���"���f�H9H���H�=^�B�@H�xH�t$ �$���� ���L�\$HL�d$HA�M������<$����L9���H��L)��H�E1�H��H��H��H�@�H��H9�r�H�uH9��T��H�EK�T�H��H�2H��H��H��H��H�p�H9�w�H�}�#��L9X�s��H�=��B�H�xH�T$H�4$讒�H�k�eH������@������H��OAH�H9G��������B���p��~�L����L�D$H��H��L���M�H�$H��$���I�T$H�J�I�L$H�B�eM������H�t$xI9t$�I���H��<���H�{I�t$@���)����f�����H�t$XH9u�v���H��i���I�|$H�u@���V����df��L���@�������H���Mf����I�GJ��I�t$�L��H�H�H)�H����H�K�L)�H��H�SH�B��eI�WJ��L��L��H)�����I�WJ��L��L��H)����I�GI�t$�A�$L��J��H�H�H)�H������I�GJ��I�t$�H��H�H�L�@�H)�H��L�����S���I�WJ��L��L��H)����4���脀�����H������H���
���H��H	������H�hJAH�GH;��H�\MAH;�BH�IAH;�˰��H;F������*�B�������}�����B����5��B�(������B�I�H����H����@H�Ѓ�H���G�\B����B����f��<t�uH���H��uH��H�4$� S�H�H�4$�ރ���Hc�H��H��;���b�B�(�L�ƃ�H���1�A@H�ƃ�H�����Hf/ȿ�HF��S��'�B��L�ƃ�H����AHH�ƃ�H�����@f/ȿ�HF��R��ƏB�-�L�ƃ�H���P�A@H�ƃ�H����Hf/�H�H�׃��&����B�#�L�ƃ�H���z�AHH�ƃ�H���*�@f/�H�H�׃���H������@������H�E��H��H������H��H��H�L$�qB�L��H��H���Q��H�L$H��I������vH��H��H�=T�	��Q���H�v�K�H��H�E1�L)�����H��H��H9�u�H��H�E�U��H�UL�\$H�BH�T$L9���	H�EL�L$L�$�t�H�T$L�$L�L$L�\$H�H��L)�����1��(���M�wL��H��衁�I�I��I�GI�鞭��M�GA�a�Ā�������H��H9��gH��H��?H)�H��H��H	�H��H�$�~$�d���b.��H�k�eH�+AAH��\���H��$�H�$��*��H�$H����H�PH� tH�PH���
H��HD�I�$�� ��H�����L��L���6��H�y H�����f�Hc�H��H)�I�wH��$�$�HDŽ$H��$�AL��$�H��$��$�Ʒ��H�p H�����f�@Hc�H��H)�I�OH��$�$�HDŽ$H��$�H��$��$�"���I�}01����I��I��I�� �-��I�o�eH�y H�����f�Hc�H��H)�I�wH��$�$�HDŽ$H��$�AL��$�H��$��$����H��$�H�$�$)��H�$H���#H�PH� tH�PH��
H��HDАL������H�~ H�����f�Hc�H��H)�I�OH��$�$�HDŽ$H��$�FL��$�H��$��$���I�}01�L�$�{��L�$����H��>AH�鈻��I�}01�L�$�T��L�$����+��I�o�eH�~ H�����f�Hc�H��H)�I�OH��$�$�HDŽ$H��$�FL��$�H��$��$�ߺ��H��$�H�$��'��H�$H����H�PH� tH�PH���
H��HD�H���	H����H��L��L������H����*������*�B�
�@����H�H��� ��H��H����H���nH���\H9��\H�����H�@H���3��H�P���<�!��H�b�H9B���H���p��H����H��麸�����H�@H������H������H���=�H��銸������H�@H������H�P���<����H���H9B����H�����H���@���L�T$ H�L$L�D$��j�L�D$H�L$��L�T$ ���H�4$H���N�H���C���8���L�D$H�L$L�T$�j�L�T$H�L$��L�D$����L��H���x��������H�@H������H�P���<����H�=��H9B����H���+��H���o����n��H�@H������H�P���<����H����H9B�v��H���6��H���*���fDA��L�D$ L�T$�J��H�4$H��H�L$H��$��h��L�D$ L�T$H��$�H�L$L�H鰼��L�IA�� �����L�I閼��L�T$A������L��H��L�D$H��$�H�L$���L�T$L�D$H��$�H�L$L�H�y��L�IA�� �h��L�I�_��H�}I�T$�������I�|$I�R����醷��M�EI�H �t�DH�A�H��H�����H�y�1��)>��H��t�I��I�$I�L$H�©��I��H��u�I�@H����H��BAH�8H���34�H���o��H�y���=��H������骹��H�y��=��H������釹�@I����I����A���
A��L�d$(LDd$ ���H�Ɖ��g��I��I�W�H�B��c��T�����H�x�����>��H�A��H9B�7���L��I�WH��H��H���H�B��cH����H9B���H�L$H�T$L��H���e��H��$����H��I�WH��H�H�J���I�OH�B�A�d$H���OH��AAH�H��@AH�H9��M���5�B�@��H���mH��T����B����H���D��z������߄B���@�����H�L���N+���H�EL��I�4�H)�L�D$L�$�=n�H�T$L�\$L�D$L�$H�H������H�uH��I�D�H���H��H�H��H�J�H�H�I9�u�H�H�u���H��=AH����H��=AH�鐴����W��s��H�R9AH��ӵ��H�@�i����H�/9AH��T���H���������H�L$H���!H��$�L�d$(L��H�$L�l$ ���H�Y�tH����H��?AH�H��tkE1��S�H��H��H���2�I�UH��$��L9���H�$1�H��H�������_H��H��I���6�H��H�����I��H��u�H�D$H�PH���NH�L$H�T$H��B����x'�����H�y��E:��I��H���������@����H�[�,����銶���<$��H������X���Y���PH�y H������L�\$HL��L����M�������H�D$H�����|$��H������1���1���(H�y H������L�\$HH�4$L���M����s��H�D$H�6�����̵��H����H����
��������
H��:AH��/���L�d$(L�l$ I�$I�|$��tH����H��=AH�8H�������M�E����H�=H�BL�l$ �a��H�$�4c�H�$H���K�����C�����:��H��-��H��H�$�w�H�$�����H���>�H��H���>V�H��H�5�
H��H�j6AH�81��@q�@��u`H�G���I�}01������&���H�A(����I�D$�u�I�}01����f���@�������H���H���������q����H����H���@����@����H�K9AH�����fH~�H��H��H�����H��4AH��0�RH��H��0H9����H�$�Z�H�$H��(H�����I�u���H��7AH�餱��L�l$ H��$�����H��H��H�����H��H�
�	H9��7��H��H��H��?H)�H	�H��H�����H��H�5H�	H9�����H��H��H��?H)�H	�H��H������H��3AH��0�RH��H��0H9��E�H�$�Y�H�$H��(H���(�I�u�M�fH~�H��H��H������H�H��H����H��?H�H���HE�H�D���H�t$�U��$���郲��H��H��H�$�N��H�$���I�}01��ʵ�����M���[�M���S�H��f�I9�����L��I��H��?H)�L	�H��H�$�~$���H��f��H9��V��H��H��H��?H)�H	�H��H�$�~$�3��fH~�H��H��H���5��H;F�v���}B�i�H����H����
�OH���H���
�H��f�H9�����H��H��H��?H)�H	�H��H�$�~$����H�2AI��$0�RH��I��$0H9������W�I��$(I�uH�����H�I��I�� f�����D���D�D$<H�T$0L�\$(L�L$ L�T$H�t$H�L$��]�H�L$H�$����]�H�t$H�L$;pL�T$L�L$ L�\$(H�T$0D�D$<���H�uL;P�H�<$�@9G���������H�� H!�H	�H��H�E�a�fDH�1AI��$0�RH��I��$0H9��B���V�I��$(I�uH�����H�I��I�� @H�4AH��v���H�4$��L����L�d$���H��0AI��$0�RH��I��$0H9��\��JV�I��$(I�uH����H�I��I�� f.�H������@q�H��I���%;�H��L��H���e�L��H��H���$�����H���H���z�H�L$M������I�|$�L@�H�L$H9�����H����:�H�5G�
H��H�e.AH�81��[k�M��u
H�7AH�H��H��H�L$�9^�H��I���~:�H��L��H���Pe�L��H��H����#�L����D�L��H����i�H�L$L��H���/Z��(��H�.AH��V���H��3AH��G���H��f��H9�����H��H��H��?H)�H	�H��H�$�~$���H��-AH����H��3AH����H�����:���H;F�����yB����]����P��H��$�H�$�'��H�$H����H�PH� tH�PH��
H��HD�I�$�� ��H�����L��L������H��f��H9����H��H��H��?H)�H	�H��H�$�~$���H��f�I9����L��I��H��?H)�L	�H��H�4$�~$�|�H��f�H9����H��H��H��?H)�H	�H��H�$�~$��H��f��I9��u�L��I��H��?H)�L	�H��H�4$�~$�R�L�\$�xZ�L�\$���@��H�D$H����H��������H�GH� �r��ia��s��H��f�H9��������H�$�Z�H�$�������I�$��H��f�H9��/�H��H��H��?H)�H	�H��H�$�~$��H��f��I9����L��I��H��?H)�L	�H��H�4$�~$��H��H��H�$�W��H�$�'����H�x��H��H9��D��H��H��H��?H)�H	�H��H�$�\$�!��H��f��H9��
�H��H��H��?H)�H	�H��H�$�~$���H��f�I9����L��I��H��?H)�L	�H��H�4$�~$��H��f�H9����H��H��H��?H)�H	�H��H�$�~$���H���AH���(��<��H�n/AH�8���f����$�f(��0��H��$�H�4$���H�4$H����H�PH� tH�PH�y�
H��HD�H���'H����H��L��L�����H��@�������<$H�L$@H�T$DL��L�T$L�\$L�L$�0�L�T$���(����D$@L�\$�T$DL�L$A9�t
H�� �JH	�I��������I������H�4$�|$H�L$@H�T$DL�T$L�D$L�\$(L�L$ ���L�D$L�T$��������D$@L�\$(�T$DL�L$ A9�t
H�� �JH	�I���������I���P���@��u@H��x�L�$�L�L�$H���,��1�����H�F(����I�D$�6����@ �{���H��tfH��tQ@��u<@��t'H��-AH�8��H��'AH�5-�
H�81���d�H��,AH�8���H�(AH�8���H��)AH�8���H��-AH�8���H��)AH���H�C,AH���H�l)AH���H�H��?H���_��a���H�y�����Z���>��I��f��L9�����I��H��I��?L)�H	�H��H�$�~$���I��f�M9��n��M��I��I��?L)�L	�H��H�4$�~$�K��I��f��L9�����I��H��I��?L)�H	�H��H�$�~$���I��f�M9��W��M��I��I��?L)�L	�H��H�4$�~$�4��1�H��$�H��薴�����W���H��$�H�8��H��f��H9�����H��H��H��?H)�H	�H��H�$�~$���I��f�L9����I��H��I��?L)�H	�H��H�$�~$����I��f��M9�����M��I��I��?L)�L	�H��H�4$�~$���H�y�
�j���H�H��H��?��]��g���H��f�H9�����H��H��H��?H)�H	�H��H�$�~$���H��)AH���H��
�W�H���
���H��
�>�H���C��H��鷠��H��)AH�8���H��$AH�8���H��&AH�8���H��*AH�8���H���
�!���H�y��1�H��$�H��L�$�IJ���������H��$�L�$H�8��H��f��H9�����H��H��H��?H)�H	�H��H�$�~$���I��f�L9�����I��H��I��?L)�H	�H��H�$�~$���I��f��M9�����M��I��I��?L)�L	�H��H�4$�~$�i��H�=#�
1��lD�H�=��
1��^D�H�=�
1��PD���1�����D��SH��dH�%(H��$�1�H�GDŽ$�H�D$$H��$�H�G0H���$H�H 1�H�qXH9p�H�|$H�|$ ��$�H�D$�a!�������H�\$H�D$H�sH�CH�,*AH�~�8H�_��H��(H��toH�|$��H��$����$���tH�|$H��DŽ$��E��H��$tZH�L$H��$�H�QH��$�dH3%(�-H��[�@H��#AH��0�RH��H��0H9���H�|$衍���n���@�Q`��H�@Xf.�H�L$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9x��9�t
H�|$�f;H�T$����H�BpH�|$H�‰���D��H��$������H�|$�����$������DŽ$���{H�H��(H��� ���H�L$H�q�~���D�Q`�l����T�ff.�AWI�׉�AVAUATI��USH��L��E��H��XdH�%(H�D$H1����k �C@�����ta������u>H��L��$�H�3L�����H�|$HdH3<%(�H��X[]A\A]A^A_�DH�1�H�X H��u��C��u�A���pH��H�CH��I��jL��H��L��$�APA��H���2���H�� �@��M�t$L�[�T$(M�1�E0�M�VI��""E�������D$,A��$��Q������BI�NH�H�D�8I9���Hc�H��I�<I�~H��H��=�H���MH����L��L��UL��$�L��D�D$<L�T$L�\$���L�\$L�T$H�I�KM�VZL�CL��D��HcqH�� _I��I�|$AQD���A)�AQM�L$M�II�4�E1�VH�IL��H��L��P��L��H�� L������O�����j�Hc�L�,�I�}H����D�D$H�t$�$�M�D�D$H�t$H�Nj$H��ĀtH�G(H�������;���L��D�D$H�t$L�T$L�$�������T$(L�$L�T$H�t$D�D$�p���f�H��L��L�$�ak��T$(L�$I������H�����y���@��K��H�T$,H�L$(L�T$H�|$0L�$�+,���T$(L�T$H��L�$�	���fD@�������H�H����H������
���fDD�D$H�t$�$�!��$H�t$I�ED�D$�0����P�H�ο�.5�A��$�1�L����r��ff.�AWI�׉�AVAUATUH��SH��L��E��A�H��XdH�%(H�D$H1�L��$��C��ts������u>H��L��$�H�3H�����H�|$HdH3<%(��H��X[]A\A]A^A_�DH�E1�H�X H��t�D�K �CA��A����u�DA����H��H�CH��I��AUL��H��H��$�APA��H���p���H�� �o����A��L�uL�[�T$(M�1�E0�M�VI��""E�������D$,���������O�BI�NH�H�D�8I9��xL��M��tM�:I�JHc�H��L�M�FI��I��=��H����L�T$A��H��L��AQD�D$<H��L��$�L�\$��L�T$M��H�}M�VZL��YL�$L�CI�KHcqteD��H�H��@I��AQD���A)�AQL�MM�II�t�M��VH�IL��H��L��P�I��H�EH�� H�@ H� H���������@D��H�H�� I��AQD���A)�AQL�MM�II�4�E1�VH�IL��H��L��P�H��H�� ��D�b�Ic�L�4�I�>H���)D�D$H�t$�$��H�D�D$H�t$H�Nj$H��Ā��H�G(H���D������fDH��D�D$H�t$D�L$L�T$L�$�p�����T$(L�$L�T$D�L$H�t$D�D$���H��H��D�L$L�T$L�$�g��T$(D�L$H��L�T$L�$����DH�����U���@H�T$,H�L$(D�L$H�|$0L�T$L�$��'���T$(D�L$H��L�T$L�$�u���@�CG��@������H�H����H�����������fDD�D$H�t$�$�F��$H�t$I�D�D$����L�H�����0����1�H���n��ff.���H��A��H��xtLsZH��F u!H��AQE��I��D�����ZYH���fDjAQE��I��D���N���^_H�����$�F t���H�H�@ ����H��H�D$�F u
H���T���@jP���H�����U�����H��AWAVI��AUI��L��ATSH��H��H��dH�%(H�E�1�H�H��Me��L�c(M���pHcs H��I��H��H��=�zH�BH��H��H%�H)�H���H��H9�tH��H��$�H9�u���L�D$M�~I���H����A��Mc�K��I�FH�CH�@H�HH�QH�uH�qI�M0H������H�IH;1��H�r H�S(L�SD�K$H��u[�K PH�SL��AR���H�}�dH3<%(��H�e�[A\A]A^A_]��H��L��L��H)�H���d�I���M���H�:�� uH�zHc׉�H9�t����f.�H�������H)�H�L����f�L���8�M�D$I�$ uM�D$ I�n�����.���I�H�AH�5͒
H�81��CS���L�BI�@H�@H�@H�@ �H��uH�H�@ �H��t��tH�����I�@���DH���I�@�x��AWAVAUATI��USH���H�ZdH�%(H��$�1�H�L�CL�0I�H�����<�	��H����H���
I��Hc�H�>��@�C H��H��L��L��H�C���H��$�dH3%(��H���[]A\A]A^A_��H�AH�@�@ ��H��j��H��L��H�C��j���fDH����H��L��H�C������I�@H�@pH�xH���cA���+L��H�� 1���H���BH�x������/H��$�H�H�D$p�H�D$x$H��$�HDŽ$�H�D$pH�EH��L��L���[������fDH��
H��L��H�C��
����DL��1�L��H���@a���} ����
H����9H�����H
H�K H���`B`�A����A��A��A uH�W��H�CH��L��L���E���@���H�I���H��L��H�C�:����%���DL��L��H���`���} ����	�K`BH���`���<H�����H��H�K H����<A���rA��A��a uH��7��H�CH�UI�|$H����5�����@A����I�� L�4$M�L$ A�t�~fDI�A�H��I����dI�y�1����I��H��t�M���g@H�4$1�H���ʦ��H��H���L�@H��H9Ct}I�v���<uL9�ID�A���<��L�CI��M�M����I�H��t�I�p �"=�H��u�L�C��fDI��L��H��L������f.�I�D$L��H��t
H�@�8��H�T$�n��H�T$H���Q���H�pL���R���H�T$��u�L�B�3���I�xH���, ��H��H���H�EH�x��H�E�H�$H�@H�p��H�
�
H�$H�0H�HH��H�PH��H��H�H�J�	������H�MI�|$H�EH�AH��uxH�	H�H���������������e�����x���H�rI�|$H�FxH��HE���@�H���!�C H��L��L���	�4���@�u�H����0�H�]H�EH�SH�H���g���@H��L��L�������DI�y��B��I��H�������颐��H��h��H��L��H�C�h�����DH�SH�KH�D$�H�T$H�SH�L$(H�����H�T$ H�L$0���xA���$A��A��a uH�g4��H�D$(H�UH�t$I�|$�2���:���f.�I�@H�xH������H�4$1�责��H�����@H�����������H�����H�H ������H��	H�0�	�����������H�=�y
1���/�f�I�}H���I�EH��L����H;w����H��8H9�r�L�����DH�����H�C ����DH�
!H�T$PH�L$XH�L$@H�MH�H�D$@�H�H�D$H$H�D$`H�����������4������v�������H�rI�|$H�FxH��HE��2>�H���{H��L��L���D$`�s	���fD���|�����������������	�C �L���I�E0H�����H�@�@ �GH��L��L���D���I�U0H�����H�R�B@�)���H�KH�q A���vI�� H�IH�}M�EH�I H��$�H�|$pH��$�H�r1�H��$�H�$�D$p@L�l$xL��$�H��$�L��$�HDŽ$�$DŽ$��AH�$���I�FH�$����E�v������������n�����H��L��L������	�D$`H�H�D$X��6���I�v�����o)D$p�oK)�$�H�C H��$�H�L$p���I�E0H������H�@�@ �}H�UH�t$I�|$�/��I�U0H���|��H�R�B@�����H�L$ H�q A�������M�v����I�E0H���=��H�@�@ ��H�UI�|$H���.��I�U0H��� ������f�E�v���E�v����foT$@fo\$PH�D$`)T$p)�$������I����I����H�KH�q A����L��H�� H�IH�}M�EH�I H��$�H�|$pH��$�1�H��$�H�p�D$p L�l$xL��$�H��$�HDŽ$�$HDŽ$�$DŽ$��>�#����I����I���H�r A���@L��H�� H�RH�}M�EH�R H��$�H�|$pH��$�H�pH��$�1��D$p L�l$xL��$�H��$�HDŽ$�$HDŽ$�$DŽ$��X>��H�KH�q A����L��H�� H�IH�}M�EH�I H��$�H�|$pH��$�1�H��$�H�p�D$p L�l$xL��$�H��$�HDŽ$�$HDŽ$�$DŽ$���=�����<����'�I�V�.���1�1���'�I�N���I�V�K���D��ATI��UH��SH��H��0dH�%(H�D$(1�H�BH�$�H�D$$H�x���H��L��H��H�D$H��H�D$H��H�CH�D$ ��H�L$(dH3%(u	H��0[]A\��0<�AWI��AVAUI��ATUH��SH��H���HcJ dH�%(H��$�1�H�FH��H��H��H)�H��H�t$���*A��A��D��D�rH��@��D�s �t$I9��A��v(H�t$��D�D$H��H�L$H�~�4�D�D$H�L$D�D$H����H��H�� �9I�H�|$D�D$H�1�I�GH�D$@�E���H�D$H�D$A�� H�D$PQH�D$XD��H�D$`H�D$@H�D$ H�D$(H�D$0��H�D$p�H�D$ H�H�CH�D$x$H�������H�x1ҾQ�.���H�T$pH�5�HDŽ$�H�SH�H��$�H��$�H�
H���#H�H�������`�������N������H�pI�H�FxH��HE���6�H��uiH��L��L��DŽ$��(�H�H�@H�D$0�����H��AH�8����f���t[H�=�p
1��-'�DH��$�foD$pfo�$�)�$�H��$�H��$�H��$�H�C)�$��H��L��L���"�H��$�dH3%(�cH���[]A\A]A^A_�f�H����H�����uh<�H�IAH�8�G������������{�����H��L��L������	��$�H��H��$����R���@H��AH�8����D�e�������2��H�}�_F�H�|$D�D$H�H�EI�GH�D$@�E�������@H��L��L�������DH��
AH�8�o���f�H��AH�8�W����H�Y	AH�8�G�����I�����I����7���H�JH�D�A H����f�H�H�I��A�������A��A�A��EE�E��A���EE�E��A����EE�M��tOH��H�� H=Qu8H��H�B(I��H�JH��uDHcB I�QH�GxA�� H��H��H)���������H�A�f��A�p����H�0�� u%H�P H�pHc�H9�� ��H�GxA�� �`��H��H�P������ATI��UH��SH��@H�ZdH�%(H�D$81�H�H�sH�H���H�H����������uW�������uLH�vH�}H�T$H�FxH��HE��
3�H�T$H�����C H��L���M��������H��L�����H�|$8dH3<%(��H��@[]A\����������u���H��L������	�C H���H�C�����fD�o)D$�oKH�L$)L$ H�C H�D$0H�D$H�B�^���DH������W����I����I�t����c5�H�=|l
1��"�D��ATUSH��@dH�%(H�D$81�H���R��H�jI��H�H��H�uH�H���H�H����������uV���
����uKH�vI�|$H�T$H�FxH��HE��s1�H�T$H�����E L��H�����������L��H���<�H�|$8dH3<%(��H��@[]A\����t{����uă�L��H�߃�����	�E H�M���H�E�D����f��oE)D$�oMH�L$)L$ H�E H�D$0H�D$H�B�e���@L��� ����_����I����I�����3�H�=�j
1��%!�D��ATUH��SH��H��@H�N dH�%(H�D$81��uDH�A�H��H���t�H�L�A�H���LBu-H��H�����H�|$8dH3<%(�H��@[]A\�DL��H��H�T$H�$�ܻ��H�T$H�$H��H�B�H��AH�0H��H�$�P���H�$I��H�BI�t$H�H�H���HH�H����������uW���s������H�vH�{H�$H�FxH��HE��D/�H�$H��u3A�D$ H��H�����������tHH�=�i
1�����Ao$)D$�AoL$H�L$)L$ I�D$ H�D$0H�D$H�BH��H���������t/H����H�����up<��H�AH�0����H�p������������u���H��H������	A�D$ H�����I�D$����7���H��H������'���H�J�@H�0�n���H�AH�0�_���H��@H�0�P���H��AH�0�A����I����I�p����81��AWAVI��AUE��ATUH��SH��H��L�RD�b H�|$L�D$8dH�%(H��$�1�M����H�vAL�8H�|$8L�T$��D��I��E1ɀ�A��H��L�T$��H�D$`�Hc�Mc�M����H�T$`H�D$p��H�D$hH�L$xL��$�H�T$@H�D$HH�D$P�� ��H�T$@f�H��L��H��1�D�L$)�$�HDŽ$�HDŽ$��L��$��%���D�L$H�5���H��$�A��H��$�H��$�D��$�H�S�H����H�H������������H�|$H��L���F�H��$�dH34%(�|H��[]A\A]A^A_�DH�H�RH�T$P�����A��u
M�z�f����I����I����A��ufA���,H�EAL�8�2���DDŽ$�A�H�H�|$H��L��H����F���@DŽ$�A���DH���@L�8�����H�H�
H����H�H�������>��ua�����������H�pI�~H�FxH��HE��+�H���oH�|$H��L��DŽ$��D����������y���H�=8e
1��q��H�|$H��L���0����e���M�������A���A��DE�D�ʃ��DE�D�ʃ���H�D$DE�H�S(D���H���I�~H�G@I9���Ic�H��L�\$0H��D�L$(H��H��=�L$ L�T$I�~�,A��H�����Mc�I��I��I)�L)�J�4L�D$H��h&��C �QL��D�`D�c ���L�D$L�T$���L$ D�L$(L�\$0�I�VH�|$8L�\$(D�L$ L‰L$H�T$��	�H�T$L�\$(D�L$ �L$H��Q����@H�U�mH�D$pH�L$xH�T$hH�T$`L��$�H�T$@H�D$HH�D$P����f�H��@L�8����H��@L�8�v������tE�����������H�|$H��L��������	��$�H�(�H��$����p����I빋I�|���f�H�)�@L�8�����H��$�fo�$�fo�$�H��$�H��$�)�$�)�$�H��$�H�C����QL��L�\$0D�L$(H�T$ �L$L�T$����L$H�T$ ��D�L$(L�\$0uWH�|$8L�\$(D�L$ �L$H�T$�8�H�T$H��H���
��Q�L$D�L$ L�\$(�b����E�����S%���*�H�t$8H��L�\$H�T$�w
�L�\$H�T$L�T$M������H�A��A���� ��H��L�B��H��Hc�H9���w�H�X�@��L��1�H�8�٦��H���a�I�VH�D$8J�M��tVA��A��Ic�A��D��1�H��H)�H��@I��L��H�8萦��H������n�L�B H�z�v����m�M���D�M�AWAVAUATUSH��H�L�(�B ����A�ύH�I�����I��Lc�H��H��H�vJ��L��H)�H�L�7��~'L��H��=uf��H�H��I)�L���"��C H�u�H�H���K E��M��H�uH��L��H��H��[L��]A\A]A^A_�5���H�>�@H�5	c
H�81���2�L�ο�
���H�H���t��������fD�I��ff.���AV�����I��AUATUH��SH��H��H��H��H�L�(L���B��L�c(M��u-�{$H��H��L���H����[]��DA\A]A^����L���p���{$I��u'H��L��H��H��[L��]A�A\A]A^�D���@L��1�1�H�D$�,�L�D$H� �C$�ff.�f���H�H�I��A��tm������ uJ��tH�BH�
���H�H����f.�D�J A��t;A��t<�� t�M���u�H�@D;u�H�BH�
����H�H���D�H��At���A��A��AA��Au���DAVAUATI��USH��pdH�%(H�D$h1�I�@H�@�p����t�H��H��g
I��I��Hc�L��H�>��L��1�L��H���A���{ ���#��@B`�pH�MA����A��A��tH����H�EH�CH�@H�@�PH�CH���H��H��I�l$H�L$hdH3%(��H��p[]A\A]A^��L��L��H���e@���{ �����@B`��H�MA���:A��A��tH�y��H�EI�D$H�sH�{H�P����I�l$�d���@H�)��H��L��I�@H�L�CH��0
���;���H�A�H��L��I�@�2�����DH�����H��L��I�@������DH�@����I�V0H����r�H�B�@ ��H�CH�KH�@H�qH�@�@H��uH�qH��I�l$H����r�H�R�B@�����H�uH�~ A���^I�� H�vM�FH�v �D$@L�t$L�D$ H�L$(H�t$0L�l$8H�|$@H�rH�|$1�H�D$HH�D$H�D$X$�D$P�%H�D$����I�F0H���r�H�@�@ �(I�D$H�sH�{H�P����I�V0I�l$H����q�H�R�B@�����H�MH�q A���kI�� H�IH�{M�FH�I �D$@L�t$L�D$ H�|$(H�L$0L�l$8H�t$@�%���DE�m����E�m����H�UH�J A���L��H�� H�RH�{M�FH�R H�|$(H�|$H�t$8H�pH�T$01��D$ L�t$L�D$ H�L$@H�D$H$H�D$X$�D$P�^$I�V0���H�UH�J A����L��H�� H�RH�{M�FH�R H�|$(H�|$H�t$8H�pH�T$01��D$ L�t$L�D$ H�L$@H�D$H$H�D$X$�D$P��#�Z����#�1�1���M�m���I�u������
�M�m���I�u�Z���fD��AUM��I��ATI��UH��SH��H��H����tSA��A���C A��tK���.��I�T$�C H�H��H)�H�B�H�CH��H��H��L��[L��]A\A]�,�@D�I�f���t,��������A�� t�H����o�H�U;u�L�����H��H��L�D$��;��H�{(L�D$H��ub�C ������I�T$E1ɉC H�H��H)�H�B�H�C�{$�O���A��@�F���A��Au�A�� �����t���D�Ƀ�A��Au��x����c��A�L�D$H�CI�D$H�PI�T$H�P�H�H�SH�P��H�>�@H�5�
H�81���*�ff.�f�AWAVAUATUH��SH��H��1�H��hH��$�H�D$dH�%(H�D$X1�H�؃�H��tfH��������H���B������$�H�C �����xH��H����t�H��H����t�H�H�؃�H��u�DH���$�L�mH�M�L�{�T$8E0�M�uH�D$I��""1�E�������D$<����k������BI�MH�H�D�8I9���Hc�H��I�<I�}H��H��=�H����H��1�L��L��D��$�H��E����PD�D$L�w��M�OM�uL��A]L�CH�H�}A��IcIH�� A^I��VA���)�VH�uH�vH��L��QI�IH��PL�L$(H�L$0����H�� H�����H�|$XdH3<%(�^H��h[]A\A]A^A_�f�H��H��jH�{H�CAQH�I��H��APA��H��H�����H�� �DH���H������H��H��H���z���y���DH��L�L$(D�D$$H�t$艟�����T$8H�t$D�D$$L�L$(����c����8D��$���H�% E��E�$���$��������H�T$<H�L$8L�L$H�|$@�����T$8L�L$H�����fDH��L��L�L$��7��T$8L�L$����f.��x @�����$��4�����H�ο�(����1�H����?�����SH��H��dH�%(H�D$1�fH�=,�@ffH�$�H�$H�8H�GH�@ �uH�P�H��H��t�H�p�H��t7H��H��E1�E1�j�jj����H�� H�\$dH3%(uH��[�1ҾH�=�	����(����AUATI��U��SL��H���;�H��A�ŸHD�fH�=m�@ffH�e�H�8H�GH�@ �uDH�p�H��H��t�H�p�H��t'H��I��E��L��j��jj�]���H��([]A\A]�f�1ҾH�=e�	����ff.�f���H��H�|$fH�=��@ffH���H�8H�GH�@ �uH�P�H��H��t�H�p�H��t'H�L$H��E1�E1�j�jj����H��8�1ҾH�=հ	�]��ff.�f���UH��S��H��fH�=I�@ffH�A�H�8H�GH�@ �u�L�@�I��L��A�t�H�p�H��t&H��H���E1�jE1�jj�<���H��([]�D1ҾH�=E�	����ff.�f���H��H�|$fH�=��@ffH��H�8H�GH�@ �uH�P�H��H��t�H�p�H��t'H�L$H��E1�E1�j�jj���H��8�1ҾH�=��	�=��ff.�f���ATA��UH��S��fH�=(�@ffH� �H�8H�GH�@ �uL�H�I��L��A�t�H�p�H��t&H��E��H���jE1�jj����H�� []A\�1ҾH�=%�	���ff.�f���ATUS��H�� dH�%(H�D$1���H�D$H����H�8�� ��H�h H�xHc�A��H9��;g�fH�=P�@ffH�H�H�8H�GH�H �u�H�A�H��H���t�H�q�H��tWH��D��E1�A��jH��jj�<���H�T$(H�T$0H�T$(H�� H�\$dH3%(uDH�� []A\�H��H�h���Y���1ҾH�=�	���H��@H�5��	H�81��"�����USH��(dH�%(H�D$1��q��H�D$H����H�8�� ��H�X H�xHclj�H9��%f�fH�=5�@ffH�-�H�8H�GH�H �uDH�A�H��H���t�H�q�H��t_H����E1�E1�jH��jj�%���H�T$(H�T$0H�T$(H�� H�\$dH3%(uMH��([]�H��H�X���]����1ҾH�=��	�}��H���@H�5��	H�81��!������UH��ATSH��PH�u�H�U�H�M�L�E�L�M�dH�%(H�E�1����fHc���H��H��H��=��H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u���lH�EL�d$�E�H�E�H�E�I���H�E���~b�S�I���L��I�L�H�}E1��"@��H����A�L�H�H�P�H9�t��/v�H��H��H��H�H�P�H9�u�E��t�u�fH�=N�@ffH�F��H�8H�GH�P �ufDH�B�H��H��t�H�r�H����H��E1�E1�L��j��jj�9���H�� H�]�dH3%(��H�e�[A\]�f�fH�=��@ffH��H�8H�GH�P �uH�B�H��H��t�H�r�H��t7H��E1�E1�1�j1�jj��H�� ��H)�H�L����f�1ҾH�=��	�=��������ff.���AWAVAUI��ATUH��SH��(dH�%(H�D$1�fH�=�@ffH��H�H�CH�P �u�H�B�H��H��t�H�B�H�ƒ�H��tH�=1c
1���f�H��I��E1���oH��H��M��I��)$H�PH�T$H�P�	��I��L�hM����H�CH�H H��uf.�H�V�H��H��t�L�v�H�,$�uH�Q�H��H��t�H�q�H��taH��E1�E1�1�jH��L��jAW�:�H�� H�|$dH3<%(uCH��([]A\A]A^A_��A���\���L��H���+��L���1ҾH�=�	�����ff.���H��H�|$fH�={�@ffH�s��H�8H�GH�@ H���H�|$$tRH��uDH�P�H��H��t�H�p�H��twH�L$H��E1�E1�j�jj�X�H�� H����H��uH�P�H��H��t�H�p�H��t'H��E1�E1�1�j1�jj��H�� H���D1ҾH�=�	���ff.�f�AWI��AVAUATE��UH��S��H��8�t$dH�%(H�D$(1�fH�=k�@ffH�c��L�0I�FH�P �uH�B�H��H��t�H�R�E1�H����H�Ѓ�H��tdH���*���bH���@H��H�T$�	�H�T$H�J �qH��H����tH��H����tH�E1�H��A���f�H��H�t$�oH��)D$H�BH�D$ I�FH�RL�|$H�H �uH�A�H��H���t�H�q�D�D$�L��L�����I�VH�J �uf�H�Q�H��H��t�H�q�H����H��E1�E��H��j��L��AUP�W�H�� H�\$(dH3%(��H��8[]A\A]A^A_�H��H�t$�o
H��)L$H�BH�D$ �+���@�������H���H�������H���G��E1�D��H���H���DG���|����1ҾH�=ݥ	�e���������H��H��E1��¾���D����H��H��E1���1�������ATI��U��SH���.�E1�L���H��[]A��A\1��_���ff.�@��ATI��U��SH���[.�E1�L���H�߾[A��]A\����ff.����ATI��UH��SH��H��@dH�%(H�D$81�����H�3I�T$@���tH��f�H��%���H��H)�H�J�D$H�D$(H�$H�L$�D$ ��D$�������D$$H��tl��uwH�IH�CH9H��H�PH��� ��H�D$H��L��H��PH��$��H�|$8dH3<%(�BH��@[]A\�f.�H���@H��@H����H������ug����H�'�@H��\����裏���������1�H����0��f.�H�EH��H�@ H� �̷���P����H�a�@H�����I�|$H�S�x������DH�~ f�Hc�H��H)‹FH�J�D$D$H�D$(H�$H�L$�|$ ���f.�H���@H�����H���@H��~����H�I�@H��n����
�ff.����UH��SH��H��XdH�%(H�D$H1������H�EH�~���H��f��H���A��I��L)�H�W�D$(H�D$8H�l$H�T$(�L$0D$��H�T$H�߃��D$4���H��$tTH�\$HdH3%(��H��X[]�f�H�t$���H�t$���V������1�H���/���H�CH��H�@ H� �����f.�H�H f�@Hc�H��H)�H�W�D$(D$H�D$8H�l$H�T$(�L$0�0�����ff.��AWI��AVAUATL�%�L
UH��SH��H��L�vdH�%(H��$�1�H�M�nL�I�}���<��Y���Ic�L�>���I�GA�O H�CxA�G$A���T	L��H�� H��I�wI��E1�PH���H��XZf.�H��$�dH3%(H���H�ĸ[]A\A]A^A_�@H�sA�W H�N�BH�H�D�8H9��)I�GL�IL�NH���~,D�B�1�M�P�f�H��H�T�H�T�H�PI9�u�K��H�FH�GL��H��H�@�@ ���E0��H�CH��H�@ H� �A���H���9���f�I�WI�M�wE�W L�jH�M�eE�\$��"H�� H�D$A�$M�GA��UUt_A��UUE��~TA�J�Hc�H�D�H��tC�u?H�H�փ�H��u0�ƀ�sH����H��E�A�����A���UUH��DD�@L�=��@fA�?��H�C0H����W�H�@L�{�@ ��D�T$Ic�1�H�{D�$M��L��jjA�wj���H�� D�$D�T$E��x	E9���
I�L$H��D��L��A�T$H��H�CL�`8M9��F�C$H�{0�ЅC ��L�cH���<W�H�G�@@��L�%2�@fA�<$tzI�EI�u H�L$PH��H�P �����t]��Zf.�A�w$I� H��L�$��,����"B`L�$�eI�FH�UI�H�@H�p����H��f��C$�ЅC �2���H�{01��Y���"���f�I�EA�H�HpH��L��H��� H�����@L��L�$�<f��L9��0V�L�$I���I�FI���X���fDH������H�D$ �H�D$(H�D$@H�D$0H����H�D$8H�D$ I�GH��L��H�����H���e���D�w���t���D���A�w$1�I� H��L�$�L+����!B`L�$�]I�GH�@H�@�PI�GH���[H��H�,����fDA�w$1�I� H��L�$��*���:!B`L�$�sI�FI�H�@H�p���H���c���I�GH�@H�HH�QH�uH�qH�K0H����T�H�IH;1��H�r I�W(M�GE�O$H���A�O I�WPH��API���I���Y^H����������A�w$I� H��L�$��%*���n B`L�$�H�UI�wI��#�H�����I�ME1����@�#)���i���H�C0H���T�H�P�B ��I�WI�OH�RH�qH�R�RH��uH�qH�,�H����S�H�@�@@�$���I�VH�r A����I�� H�RH�{H�R �D$P@H�\$XH�|$`H�L$hH�T$pL�D$xH��$�H�pH�|$P1�H��$�HDŽ$�$DŽ$�����H�C0H���=S�H�@�@ ��H�UI�wI�L�$��H��H�C0H���
S�DH�@L�$�@@�N���I�VH�J A���6I�� H�RI�wH�{H�R �D$P@H�\$XH�|$`H�t$hH�T$pL�D$xH��$��!���f.�H�:�� tuH����Hc׉�H9������yR�A�$I�WH���A� �����'H�����I�GA�W H��H��M�OE�G$H�p �0���H���x����H�z�f.�H�@���I�T$ I�u H��D�$H�L$PD�L$L�D$D�T$���D�$D�T$��L�D$D�L$���������H�C0H����Q�H�@�@ ��I�FI�L�$H�@H�p�i��H��H�C0H���i����iQ�@H�C0H���XQ�H�@�@ ��I�FH�UL�$I�H�@H�p�X��H��H�C0H�������Q������OL��L��H�=�Q
1�����D���I�MI�U H�|$PD�L$H�t$L�D$H�I H��$�1�H�t$xH�pD�T$D�$L�|$`�D$P H�\$XL�t$hH�L$pHDŽ$�HDŽ$�$DŽ$��L�{D�L$L�D$D�T$D�$���H�@H�D$����I�P���I�MI�U H�|$PH�t$H�I H��$�1�H�t$xH�p�D$P@H�\$XL�d$`L�t$hH�L$pH��$�HDŽ$�$DŽ$�����1��R��H�{0�n��������N���H�P(���H�D$`H�/��H�D$hH�D$PH�D$P�H�D$XH�D$p���I�NH�q A���QL��H�� H�II�L�$L�KH�I H�|$hH�|$PH�T$x1�H��$�H�p�D$P H�\$XL�L$`H�L$pHDŽ$�$HDŽ$�$DŽ$��L�$���I�NH�q A����L��H�� H�II�L�$L�KH�I H�|$hH�|$PH�T$x1�H��$�H�p�D$P H�\$XL�L$`H�L$pHDŽ$�$HDŽ$�$DŽ$��L�$�����I�NH�q A���RL��H�� H�II�L�$L�KH�I H�|$hH�|$PH��$�H�r1�H�D$x�D$P H�\$XL�L$`H�L$pHDŽ$�$HDŽ$�$DŽ$���H�C0L�$���M�@����I�NH�q A����L��H�� H�II�L�$L�KH�I H�|$hH�|$PH�T$x1�H��$�H�p�D$P H�\$XL�L$`H�L$pHDŽ$�$HDŽ$�$DŽ$��TL�$���I�P�H���I�P���H���@H�5{H
H�81����M�@�*���I�@���I�P�B���D��D��D���H��H�=�M
1����f.���AUI��1�L��ATI��USH��H���I�qdH�<%(H��$�1���$H�=���L�L$0H�D$ ���H�|$8�‰L$H�D$(��H�D$@�T$�u�����Hc҅�H��L�l$`H�T$hHc�H��$�H�T$pH�T$PH�T$H�T$H��$�H�T$ H��$�H�SxH�CxH��$�H��HDŽ$�DŽ$���$�H�D$P�H�D$XH�D$L��$���$��[�H��$�dH3%(u8H���[]A\A]�H�L$H�T$A��H��H��$��m���T$�L$�
�����ff.����g������AUH�5���1�ATUSH����o8L�G dH�%(H��$�1��O,H�_H�t$8��I�pH�G0L�D$0��L�oL�cx�L$��H�CxH�D$ �H�D$(H�D$@�T$�u�����1�Hc�H�Cx��H��H�T$hHc�H�T$pH�T$PH�T$H�T$H��$�H�T$ H��$�H��H��$�H��$�HDŽ$���$���$�DŽ$�H�D$P�H�D$XH�D$`QH�D$L��$���L�cxH��$�dH3%(u<H���[]A\A]�H�L$H�T$H��A��H��$�����T$�L$H�sx�������f�AUI��ATM��UH��SH��H����H���dH�%(H��$�1�H�T$�\��H���1H�¸$H���H����H�T$0H��H��$�L��$�L�cxH��$�H�D$8H�D$PH�CxH�D$H�D$H��$�H�D$ L��$�H�D$ �H�D$(H�D$@HDŽ$�DŽ$�H�D$P�H�D$XH�D$`�H�D$hH�D$pH�D$H��$�HDŽ$�H��$�DŽ$���L�cxH��$�dH3%(�H���[]A\A]��$���\��ff.����AVAUI��ATI��U��SH��H��u4L�5��@A��H��1�I�6L���z!�������[]A\A]A^��@��uJH�vA��H��H���H!�����u�1�L�s���ƒ�L��L���\��������[]��A\A]��A^�H����H������uW���H���@H�0A��L��H��L���� ������Y���1҅����������H�z�@L�0�j���f�H��@H�0�@1҅�M�6���I����L�5��@A��L�����f�L�5q�@A��L������f���L��H���H��H��L����H��L��I������H�������H��$����!����fDH�Y�@L�0���f�H���@H�0���H���@L�0���f���ATA��UH��SH��fH�=��@ffH���D��H��H��[]A\H�8����f.���1��U��DUH��AWMc�AVI��AUI��H��ATI��SH��H��L��h���dH�%(H�E�1���L��H��L��A�H������H�����u0H�EH�u�dH34%(�H�e�[A\A]A^A_]�f.��UH�߾Q���U�����H��$��	��	�H�E��U�H��H��`����&X��H��H��t�H�u�A�OHc���wiH��H��HDžx���H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�D$I����Af.�H����X���H�4�H��=�.H��H��x���H���"����X���I��L��L��P�����X����D�H��h���L��P���J����X���H��I�H�37
HE�H��h���L��H��=��H��uv�E H��`����M�E1�Aƅ�H��X��H�=�����E�H���@H��L�E�L�1�L�m�L�u�H�]�L�e���H��x���H��h�����H��h�������fDH��h���I�x��P���L��X����K���P���L��X����[�����L����������ff.�f���AVAUATI��UH��S��H��dH�%(H�D$1�fH�=��@ffH���L�(��~H�EH�$��t$��������
��f.��H�����H��H����1�H����M��uH�Z�@L�0�DA��uRM�t$��H��L����V����������HE�H�L$dH3%(��H��[]A\A]A^�DI����I���A����A���)H�a�@L�0�|���f�H�<$�7��M��trA��uxI�t$I��H��L��L������H��$�f���1��_���DH�۸H��HE���L��L��L��I��H������H�����t�H��$t������H�1�@H�2�I��tpI����A��uQA��t<H���@H�2�b���H�*�@L�0���H���@L�0���H���@L�0���H�u�@H�2�&���H��@H�2����H���@H�2����H�H�@L�0�S���H�q�@H�2���H�]�������UH��AWI��AVAUATI��SH��D����dH�%(H�E�1�H�GxD���H�GxH������H��Q���YI��Lc���J��H��HDž���H��H%�H)�H���H��H9�tH��H��$�H9�u����L�t$I���L��L����������L����Hc��I�H�23
M��H��LD�H��H��=�6H���=M���|H�U�@H�8H����1ҾQ�R��H����H����M1�H������H��0���H�@H�=����HDž ������I�wx��HDž(�����H��8���HDž@��������������u����H��P���Hc�L���]�H�����H�����H�u�H�E�H�� ���H�E�H������I�GxH�E��EH��h���L��L�e�H�E��E��E�HDžP����HDžX���HDž`���QL��p���HDž������H�������H�]�dH3%(��H�e�[A\A]A^A_]�fDA��uI�|$�~����I����I����A����A����H�1�@H�8�?���f�L��L�����J�4�H��=����H����9H��H�����H���D��L�������I��L������y����I�~L���4	�����H�����H��������H���������f�H)�H�L�����f�H��@H�8�w����H��@H�8�g����H���@H�8�W����H�I�@H�8�G���D�EL��H�}�H�����H��������Lc���������I��I�GxL��H���������M�Ɖ�D����L��L���L��A�� ���H�ο��������L��������AWAVAUATI��U��S��H���dH�%(H��$�1�fH�=ɾ@ffH���L�(I�}H�O H��ufDH�B�H��H��t�H�B�I�ExH�1H���H�L�w�[������;�H�PH�@H�@pL�z 1�H�xL���N��H���(1҅�H�D$0H�@��H�
Ѷ��H�D$ ���H�L$8H�D$(H�D$@�\$�T$�u�����Hc�Hc҅�L��H�D$pH�D$PH��$�H�D$H�D$H��$�H�D$ H��$�I�ExI�ExH�T$hL��HDŽ$�DŽ$�H�D$P�H�D$XL�|$`H�D$H��$�L��$���$���$��:�H��$�dH3%(�bH���[]A\A]A^A_ÐH����L��A�UM��L��L�����ZY�H�T$L��H�L$A��H��$��!���T$�\$I�������L��ff.����1��U��D��USH����~BH����H�vH������H�UH�5��AH��謭�H�UH�5��AH��虭�H��H��[]Ã������f���AWA��AVAUI��ATUSH��L�$dH�%(H��$�1�H� �H��H�L�fE�w��}	�Hc���D$�D$�D$E����I�EH��M�mH�D$�l��H��M����A����M�}M��t4D1�H��L���K��H��tH��L���^��H����M�M��u�fH�=q�@ffH�i��H�<$H�8tH�$H�GxH��D��H��E1ɋD$L��PL�D$����ZYfDH��$�dH3%(�BH��[]A\A]A^A_��H�v ����H��@L�8�/����I����I����A���bA����H�a�@L�8���f�H�D$fH�=��@ffH���H�<$H�T$L� t	H�$I�D$xH������H�D$@�H�D$X�@HE�H�BH�D$HH�T$PH�D$`D�t$(�l$,�u
A�����Ic�H�T$L��H��$�H��$�H�D$pH�D$0H�D$0H��$�H�D$@H��$�I�D$xI�D$xH��$��D$HDŽ$�DŽ$�H�D$p�H�D$xH��$�H��$�H�D$8L��$�D��$���$��U���0���H���@L�8���H�r�@L�8���H�3�@L�8���H��@L�8�r���D�D$H�t$H�L$(H�T$,H��$��C��Hcl$,D�t$(H�D$����H�H�@H�5��H�81������R��f�AWAVE��AUI��ATI��USH��H��8dH�%(H�D$(1�H�H�����H�� H��H�yH��tg1�H����H��I��H��tUA�D$$��A�D$ ��H�����L��H��L��H�D$H��H�CH�$�H�D$L�|$H�D$ ����-�H�CH���K H��E��M��L��I�D$x�C$H�sP��ZYH�t$(dH34%(u5H��8[]A\A]A^A_�DH�j�7����I�|$01��7���L����*��f.�AWM��A��AVAUI��ATUH��SH��H��HdH�%(H��$81�A����A��tA�A����P1�E1�E1��fD�A�A�Mc�L�l$pH�D$`�H�D$hH�D$xL��$�H���H��@H�0H�@@H��H��L1�H��H��H��H)�H��H�H��	H��H��
H)�H)�H�E0H��H����3�H�x ��L���hM���I;t$��M�t$I� ��M;n��E���'H���H�o�@H�8M����I�F���<��<��I�H����H�������������I�T$D��D�|$@��H�R��$��u
A�����H�HDŽ$H��$�H��$�H�D$PH�D$PDŽ$HDŽ$��HDŽ$�L��$�L��$�H�D$XH��$�L��$�H�ExH�ExL��H��H��$�D��$H��$H��$D��$��$���H��$8dH3<%(�;H��H[]A\A]A^A_�f.���t;H���AH���G���N����H�n�@H�0���fDH�sH�������L��H���]���H�L$`D�L$L�\$D�T$L�$�#T��D�L$L�$I��D�T$L�\$E���lH��tH�@H��tvM��I��I�FH��tg���<t]<����L���D�L$L�\$D�$L�D$�W��D�$L�\$H��D�L$t"H�@H��t�L�D$��<�����fDA��A��H��ARE��A��D��L��M��H��H���F�ZY�|����1�A�E1��Y����H��L�\$D�T$L�$�c�L�$D�T$��L�\$�I������1�H��������tkH����H�����������eH���@H�8���fDH��"
E1�Hc����DE1�H���u���I��L�p�i���H�{�s���H��$�H����fDE1�H��AR���f�H���@H�0����H���@H�8�-����H���@H�0�|����H���@H�8�
����H��$��L��L�\$D�T$L�$���L�$D�T$H��H��L�\$�s���H�x��H��$�L�H0H�$M����L��H��$�L��L�\$(D�T$ H�L$L�D$L�L$�ә��L�L$L�D$��H�L$D�T$ L�\$(���H�qH�$H��L�\$ D�T$L�L$L�D$(��<��L�L$L��H��H�D$L�����H�L$D�T$L�\$ H���������L�D$(u4H�<$H��L�\$ D�T$L�D$H�L$���H�L$L�D$D�T$L�\$ H�AH���c������<�U���<�jH�οL�\$D�$L�D$H�L$��S��D�$L�\$H������H�PH�������H�L$L�D$���������H�H����H���'�����I9��k�������H����H�QHDŽ$��H��$�D���HDŽ$�H��$�HDŽ$�D�|$<�D$P�u
A����JH�HDŽ$H��$�H��$�H�D$@H�D$@H��$�H��$�DŽ$HDŽ$��HDŽ$�L��$�L��$�H�D$HH��$��+���DH���@H�0����H�q�@H�8�����L��L��H�pH�~ Q����H�����������H�p H��t@��uH���H��u
H�vfDH��$�$t<H��$�L�\$D�T$H�L$L�$�%��L�$H�L$H��D�T$L�\$�H���A��!���fDH���@H�0����f�H�i�@H�8�M����H��L�\$D�T$H�L$L�$��^�L�$H�L$��D�T$L�\$������DA����E��L��H�L$@D�$H��$�H��$ �q���LcD$@D�$I�Ë�$�M���8���fD1�L�\$ D�T$H�L$L�D$���L�D$H�L$I��H�$D�T$L�\$ L�H0�����L��E��L��H�L$<D�$H�T$PH��$ ���LcD$<D�$I�ËD$PM���}���H�����ff.�UH��AWAVAUI��ATA��S��H��HH�U�dH�%(H�E�1�H�E�fH�=D�@ffH�<��E��H�E�$L�0��A��A��A�uI�FH�@PH�E�����I�EH�E�H�E�H��H�E��2��H����I����L�}�I�VH�R H��ufDH�N�H��H��t�H�N�H��H�u�E��M��L��I�Nx��H�
H��u����L��H��XZ�N��H��H�}�dH3<%(�OH�e�[A\A]A^A_]�f�H�E�H�������H�E�H�x�Q�Y������I�E<��H��t�uH�L�}���H��t:I�FI�vI�H�}�H�H8H��H9�sxL�x@I�GI9�uk�N��H�E�I�GL�}�AƆ��Q����H���@H�8�n���H�}���H�}���E����}���H� �@H�8�5������H�E���L�m�fDL�}��Hc�H������H��H��H�E�H��H���H)�H���H9�tH��H��$�H9�u�%�t	H)�H�L�H�L$L�}�H���H�E��S�H�yH�M�Hc�I�uH�H������H�M�I����H�n�@H�8�s���H��@H�8�d���H���@H�8�U���H�y�@H�8�F���H��L�}�H��L���v��H���{���H���@E��H�U���A��M��1�H�8A���	V��H��葿�H���@H�5U
H�81��)�����@��ATI��UH��S���{��L��H��߃�[]�A\����_���ff.�@��ATI��UH��S���;��L��H��߃�[]�A\�у�� �����AVA��I��AUA��ATI��UH��Sۃ��fH�=t�@ffH�l��H��D��L��A��M��H��H�8H�G�p��ZY[]A\A]A^�ff.�@��AVA��I��AUA��ATI��UH��S�Ӄ�fH�=�@ffH��H��D��L��A��M��H��H�8H�G�p�;�ZY[]A\A]A^���AVE��AUI��ATA��UH��SH��fH�=��@ffH西�H�8H�wH�N H��uf�H�B�H��H��t�H�B�M��H��H�GxH�	A��D��E�H���vH��A��A����ZY[]A\A]A^���AWE��AVI��AUA��ATI��UH��SL��H��fH�=�@ffH���H�8H��tH�_xH�GA��M��D��E�H��L��H��pA��A���5�H��[]A\A]A^A_�fD��USH��H��� �fH�=��@ffH蝾���H���K��H�SL�CH�3A��H�8H�G�p���H��[]�ff.����SH��fH�=P�@ffH�H��H��1ɺH��A�E1�H�8H�G�p��ZY[�ff.���AWLc�AVM��AUI��ATI��UH��SH���dH�%(H��$�1�fH�=Ѧ@ffH�ɽ�L�l$@H�D$0�H�D$8H�D$HL�|$PH�H����H���@H�0H�@@H��H��L1�H��H��H��H)�H��H�H��	H��H��
H)�H)�H�C0H��H����#�H�x ��L���hM����I;q��I�AH� ��L;h�{H�SH�JH�PH����������~����I�AD�t$�D$H�@�u
A�����1�H�D$xH�D$`L��H��H�D$ H�D$ H��$�H��$�H�CxH�CxHDŽ$�DŽ$�H�D$`�H�D$hL�l$pL��$�H�D$(L��$�H��$�H��$�D��$����H��$�dH3<%(��H���[]A\A]A^A_�f�@��t:H����H���6@���@���2H�k�@H�0�%���H�uH������L��H���M���H�L$0�6D��I��H�CH�HM��t
I�AH���f���H��L��A�M��QH��D��H����ZY�(���H�ƿH�$L�L$�*G��H�$H��t�H�@H��t��L�L$��<�'����H�!�@H�0�c���L��H�L$H�T$E1�H��$�L�$����Lc|$L�$I��HcD$M�������H��@H�0�����H���@H�0�����H�I�@H�0�����ff.��SH��H��H��dH�%(H�D$1�����aH�$H��t
��t-DH��H���(��H�D$dH3%(u*H��[�f�H�H�ƒ�H��u�� t�H����q��i��f���ATD��E1�A��UI��H��S��H��Q����V�h��XZu	[]A\�@H�9�A���t�[L��H��]A\����f���H��(dH�%(H�D$1��A��wIH;	�@t/H�$��L$H���b���H�D$dH3%(u5H��(�D���9�����H�p�@��H�5 
H�81��
���x�����H��dH�%(H�D$1��$�	�L$H�����H�D$dH3%(uH����*��f.���AWH�=�
AVAUATUSH��8dH�%(H�D$(1�H�@�@H�0�H��L�=��@H��I��f��I�H����H�[�@H���@H�-�@H�$H�8H�O�@H�D$H��@H�D$H�ϡ@H�D$H�5~y	���I�?�����H��H�5\�	���I�?1�H����H�5
���I�?�H����H�5
��H���@H�8�!��I�7H��	
I��H���<��L�����H���<��I�EL���L�����H��'I��H�����L��H���������L��H�H:�����1�L�羥H������x��L�����H�ٱ�����_��L��H�Э�����F��L�����H�W������-��L�����H�.��������1�L��H������1�L��!H�������L��H�ɝ��H�5T7	��L��H�����H�5%7	���H�{����L��H�5{:	�Ǩ�L�����L��I�D$�n��L������H��@H�=d	
L�(H���@H�0�Ʃ�H�
w�@H��H�������I�?H�5��	H��I������H�=!	
�	��L��H������H�=	
���L��H������H�=	
�ѡ�L��H�������a}�I�?H�5	
H���O��L�-�A�螾�I��`%I��H��������?H9��1
L�t?H�ݩAH��u�H�=�
菺�H���AH��t�H���;��L��L��H���M��I��h%H��������?H9��
L�t?H�w�AH��uf��H�=|
�/��H�X�AH��t�H������L��L��H�����I��p%H��������?H9���	L�t?H��AH��uf��H�=6
�Ϲ�H��AH��t�H���{��L��L��H��荠�I��x%H��������?H9��#	L�l?H���AH��u#L�5�
�L���k��H���AH��t�H�����L��L��H���)��L�����I�?L��H�5�
���L�%0�AfH�=��@ffH舳��H�={�	H�L�p0���E1�E1��H��H�ƿ���I�vL��L��I������I�?L��H��@���L��H�W@I�$H���@H�8���L��I�FI�FM�t$(I�D$ H���AM�f H��8Idž�I������I�F0I�UE1�H��E1�1ɾH�@H�RH�I���L�hH�PH�@ 1�H� ���H�_�@jH�8����I�V0H�RH�R H�B�XZ���H�=�H���?��H�;1�1Ҿ+f�
��A�g���H�}1Ҿ+�W���L�-�@1Ҿ+I�}�@���L�%��@1Ҿ+I�<$�)���1�H�;�f�5��A�-����H�}�E1��-���1���*f�=y�AH�;�ݫ��H�}��*�ʫ��H�;E1���/fD�H�A譫��H�}��/蚫��H�;E1ɺ�%fD�
�A�}���H�}��%�j���H�;E1Һ��fD���A�M���H�}����:���I�}����'���L�|$���I�?����H�;E1ۺ��fD���A��H�}������I�?����Ϊ��I�}���軪��L�|$���I�?褪��H�D$���H�8荪��H�$���H�8�w���H�;��<fD�5�A�]���H�}��<�J���H�;1����f���A�/���H�}�������H�;1���>f���A����H�}��>���H�;1����f���A�ө��H�}������I�}1��	��f�K�A褩��I�<$�	��葩��I�<$1��
��f��A�u����
��L�5��@I�>�\���H�;�
���J���I�<$1����f���A�.���I�>�������1�I�<$��f���A�����I�}������I�>����ۨ��I�<$1ɺ
��f�
n�A迨��I�}�
��謨��I�>�
��蚨��1�I�<$�f�54�A���~���I�}����k���I�>����Y���1����f�=��AH�;�>���I�}����+���H���@E1����fD���AH�8����I�}�����I�}E1ɺ��
fD�
��A�֧��I�<$���
��I�>���
豧��I�}E1Һ��fD�V�A蓧��I�<$E1ۺ��
fD�:�A�u���I�<$1����
f� �A�Y���I�<$1����
f��A�=���1����
f���AH�ە@H�8����H�;1���&f���A����H�;1���|f���A���I�?1����f�}�A�ʦ��1�H�;��f���A�详��H�}���蜦��I�}���艦��I�>1ɺ�!f�
A�A�n���1�I�<$�!f�5.�A���R���H���@H�8���H�t�@H��H����H�L$ A��	��
H��H�D$ ��H�;�C��H�;����V�H�D$(dH3%(��H��8[]A\A]A^A_��tlH���"H���8���<�HH���@H�-*�@H���@H�D$H�_�@H�}H�D$H��@H�D$H�c�@H�$�8�f�H�xH�]�@H�D$H�!�@H�D$H�e�@H�֔@H�-��@H�D$H��@H�$���f.��+��I���������I���������I���e�����I�����H�ѕ@H��@H�D$H���@H�;H�D$�l���f�H���@H�D$H�8H�b�@H�D$�<���H�Q�@H�D$H�8H�r�@H�D$����H���@H�z�@H�-۔@H�D$H�8H�D�@H�D$H��@H�D$H��@H�$����v��fD��UH��SH��H��H�dH�%(H�D$1�H����z����t0H�<$H��t'H�G���<t���H��H�������A�1ɺH��H����H�D$dH3%(uH��[]����ff.��AWM��AVE��AUATUH��SH��H��hH��$�H�T$�L$H�D$dH�%(H�D$X1�H��u
H�Ӗ@H�H��t����f�A��t;A��t5H��q����H�����H��a�ED$�D$A����H��t@��u;H�H�ƒ�H��u,�ĀtH�����H��H�����A����f.�H�CpH�L$PH��H��H�x�Hy������H�|$PH����H��I��I�����vf�H�H�ƒ�H�������� ����A���U���H�����u*H�H�ƒ�H��u�M���f�H����H��u�L�cpM��L9�tH��H�����I�EH�T$HH��H��H�D$ �x�����+L�l$HL��I�EH��H�D$0�24�����RL��L���/���H�D$0�A��1�A��A�����L$,�>��H�����tA��tH�D$0��`����T$H�t$1�H�����I��M���9H�T$L��L���	��H��L������H���@L9 �~H����H���t	H��Au^A��tXM��tSM��H�L$PI�~H��H��H�L$�w��H�L$����H�|$P�~H��螕�H�=�
H��1��m��D�D$,��tI�E���<tL�����H�t$ L��H��L������H��t
��teDH�L$XdH3%(L���lH��h[]A\A]A^A_�f�H����H����ED$�D$A����������H���H��u�H�=ݚAH��t�1�H���֢����v���H��L��胪���f���H���֖�H�=o

H��1�蕴�D�D$,�;���H��Qtv5H��a�j���H���`��H�=Q

H��1��/���L���f.�H��d���H���1�����DM�vM���H������fD�D$A���)������f��0����D��I��������	�A�H��$�I�G H���@H�PI�G(H���@�}���fDI��I�����D�D$,A���6������P�����������<�����H�D$01�H�x蟹�I��M�������H�D$0H�x �e��L��H�D$0I�E�@X�D$,�M��H�PH� tH�PH��H�T$8�/��L�D$0�L$,H�=_
H�T$8H��1�����D$,���H�D$0L�h�y��������H��(dH�%(H�D$1�H�$1�H�L$H����H�D$dH3%(uH��(��˻�ff.�AWI��AVI��AUE��ATI��UH��SH��8dH�%(H�D$(1����H��E����L�xH�uuL���]���A��I���H�L$1�H��L��L�t$H�\$H�L$���H��atFE����H�D$(dH3%(��H��8[]A\A]A^A_�f.�L���X��I���{���H�9�@L98t�M��t�A��u�I���H��u�L���%��H;.�@u�L��L���q��A����o���DL����A�I��� ���f.�L���ب�����C���L���Ȳ�H�L$1�H��A�H��L�t$H�\$�������H�ʆ@H�5�H�81�����$��@��AWAVA��AUA��ATI��UD��SH��H��fH�=w�@ffH�o��H��H��L�8�r����tH��uH�L��諒�H�=��H��1����H��肯�I��E��ujE��u5H��[]A\A]A^A_�fDL���x����Ń�ta���E��@L���x�H��A��L��H�ߺ[H��]A\A]A^A_���@A��H���L��H������{���DL���x������=���H�=	
1�貯��*���ff.�f�AWAVAUA��ATI��USH��(H�t$H�|$dH�%(H�D$1��}��H���!M�t$pI��H�D$H�$L��M��u<�^f�H�\$H��t;H�C�������H�x�XH�mH��tH�}H�$L����p����u�H�m1�H��u�H��ufM���A���I�$��H����H�`�@H�(H����H�D$H�$H�}H�$L���kp������H�\$H����H�CH���������������H�H����A9�tIL��H�����I9�t	I9���H�S���<��H�A��H%����I	�L�+L��L������H�D$dH3%(��H��([]A\A]A^A_�DH�mH���(���1�L��L���3�H�@H��t�H�@H��t����<�@�����fD���/����DE��1ɺL��L���c��f���fDH�RH���H���H�A��H%����I	�L�*�0���H�t$L���6�聶��AWAVAUATUH��SH��H��u
H��貳�f�@��u�H�I��H�ƒ�H��t�H�Á�u�A��A��H��tAE��tLA��tvE��~�I�4�D��H��H������A9��H��[]A\A]A^A_�f���t�H���S��밐���H����H��H�=��[H��]1�A\A]A^A_�d��@I�>�(��I��H��tME1�H�X�,fDH����I9��x���H��J�4�D��H��I���z���I��� u�M;g�P���I�G ��I�6H��D��H��[]A\A]A^A_�F���fD��ATI��U��H��SH���x��L���H�����H��[]A\�ff.���ATI��U��H��SH���8��L���H���F���H��[]A\�ff.�US��H����t<H��H��H���������tH��Hc�H��[]�^��fDH�EH��[]�D�L$�o���fH�=ׄ@ffH�ϛ�H�8觡���L$�P �����	шH H���[]������b���f���UH��S��H�=I	H���;�H��H��߹[H��]�-���ff.�f��������f��������f���UH��S��H�=j�H���:�H��H��߹[H��]����ff.�f���S�����H�5/AH�=��Su�1�H�5Z���H�=�R	�>u�1�H�5����H�=���)u�1�H�5���H�=���u������H�5����H�=���t������H�52��H�=����t�H�=�@�����H�a@H�5�H�;���H�;�����H�C���H�5��nj�H�;�����H�x���H�5��<��H�;A�1ɺ	�A��H�K�@A�1ɺ	�1H�;����H�;�����H����H�5��V��H���@�����H�s���H�5�H�;�4��H�;�����H�U���H�5�����H�;�����H�:?H�5����H�;�����H�?H�5�����H���@H�=��H�0�
�������H�q��H�5�:	H��H�p�A請�H�=d�A1�H�[p��H�5��菋�H�=H�A1�H�/p��H�5lq	�s��H�=,�A1�H��y��H�5S��W���H�=�
�6���H�=F��%���H�=q	H�ڍA�
��[H�ōA�@AUI��ATI��UH��L��S��H��L�ME�jjA�����ZYH9�t4H�͌A���tL��L��H�D$���H�D$H��[]A\A]�@H�P���
 H�H����H	�H��ff.����I���d���@��SH�$�@�����H�غ��H�5�H�;�I��H�;�H��d��H�5��.��H�ׄ@�����H�{
H�5$�H�;���H�;�����H��H�5����H�;�H�BH�5���։�H�;�����H���H�5l��K��H�;�����H�����H�5Zn	�0��H�;�����H�Q���H�5�D	���H�;�����H��H�5�Z	��H�;�����H�K��H�5��ߺ�H�;�����H�0��H�5k��4��H�;�����H����H�5I����H�;�����H����H�5E���H�;�����H�O��H�5B����H�;�����H����H�5A��Ȉ�H�;�����H�i���H�5:�譈�H���AH��8�ڦ������H�����H�53�H�����H�p�AH��8謦������H�0���H�5SC	H�����H�B�AH��8�~�������H�r	��H�5�H��賹�H�,}@1ҾQH�;�
���H�;�QH�H��I��H�������H�;1Ҿ����H�;��H�H��I��H�������H�;1Ҿ�赕��H�;��[H�H��I��H����������AWAVAUATUSH��8�|$H�t$dH�%(H�D$(1�H��tI���tH��y@H�5Z�H�81�谶�H���H��u܋D$���O�\$L�|$�L��L�����m����؅�����M��H�l$ I�D�H�D$fDI�<$M���\��H���1�H�T$ H��t6H�BH��tk���<ta<uoM�M��tfM��I�~H��H����d����u�M�vM��u�H���@L�0M��t&I�~H��H����d����t
H�T$ H��u�M�vM��u�1�H��L���E
�DL��H�$I���p��H�$�H��I��H���	���L9d$�&����|$t_Hc|$H�t$踮�H�L$(dH3%(uJH��8[]A\A]A^A_��ĉ��fH�=,|@ffH�$��H�8����P ����
�P ��H�D$H���y��f���AWAVAUATUSH��(H�t$dH�%(H�D$1�H����H��I��L�t$E1��l�I��M��tKL��H�{L��L���c������H�D$H����H��H�@���<��<��A��t1�L��L�����@I���H��u�H��@H�H��t�H�{L��L���c�����vH�D$H���hH�PH��H��t����<t����<u>L�#M�L�j I��A���'���H�[H���"����_���fDH�S���<t�<uL�#H�ZI��A��E��uL�#I��A��H�{upH�����H��E1�D��PA�H��sH�\$H����XH��AZ���tH��H������H�D$dH3%(�H��([]A\A]A^A_�DL�C H�t$D��H��H�����I��H�h H��t@��t'H�sI�t$H��t�@��u�L���;���f�H��H���%��H�E��H��u��k���H�[H���f����5���fDH��1ҿ�ɑ��H��H������H�PH���������<��<�����H�BH������H�@H���������<�n������H�&u@H�5L�H�81����耨���ATI��UH��SH��H�|$H�T$���H��t-H��H�����H��L��H��H���p�H�����H��[]A\�H�t$L�������AVI��AUI��ATI��USfH�=�x@ffH�{��L��H�H�CH�P8H�h@H�SH�PH�P@�t�L��I����t�L��L��H���o�H�CH�P�H�SH�h�[]A\A]A^ÐAUATUH��SH��H��(dH�%(H�D$1���H����L�cpH�����H��H���H=A�qI�|$H�T$H���_�����L�l$M���	I�UH�������<��<��L9�tH��H�����H��L���{���I�|$H���a��L��L���#���I�E���<��H��艴���H�D$H��t��uH�H�ƒ�H��u�� u9�H�L$�H����H�D$dH3%(��H��([]A\A]��H������f.�H�BH��tH�@H��t���<����H�����H�=��H���i_��H��L��H���ˊ�H���Ӌ�H��L���u�����H���|�H�=1�H��1��W���q���轥�ff.�f����������SH��H�����H��[H�����@��AUATUH��SH��dH�%(H�D$1���~;�G�H��I��L�l�DH�L��H�$��H��t2H��H��H�����L9�u�H�L$dH3%(H��u1H��[]A\A]�H�$H�=���R^��H��H��H��贉�H��輊��פ����AWE��AVI��AUI��ATM��U��SH��H���dH�%(H��$�1�H���NH�z@H�81ҹL�����H���l1�E��H�D$0H�@��H�
tm��H�D$ ���H�L$8H�D$(H�D$@�l$�T$�u����gHc�Hc�E��L��H�D$pH�D$PH��$�H�D$H�D$H��$�H�D$ H��$�I�ExI�ExH�T$hL��HDŽ$�DŽ$�H�D$P�H�D$XL�t$`H�D$H��$�H��$���$���$��ܖ��H��$�dH3%(��H���[]A\A]A^A_�@��u
H�~����H��tZH��td��u7����H�?u@H�8����L���L��H���p������H��o@H�8�U���f�H�qu@H�8�=����H�1q@H�8�-���H�T$L��H�L$E��H��$��T}���T$�l$I���l���@H��s@H�8����l��ff.��UH��SH��H��H�T$��t��uEH�w@H��H�0���H��tAH��E1�L�D$���H���A���H��H��H��[]�@��t�H�=��1��M��H�vn@H�5��H�81��e��DAWAVA��AUA��ATUSH��H������H��� ugL�jH�SI��H��E1�H�T$M��7�Zf.�H�D$J�4�D��L��H���	���H�����u3I��M9�t(H��� u�H�C ��f.�I��I��A���1�H��[]A\A]A^A_��H��D��H��H��[]A\A]A^A_���ff.���������ATUSH��H�� dH�%(H�D$1��0�Au,H��H��葁�H�L$dH3%(��H�� []A\�@L�%�@H��H�T$fA�<$u'H���і�E1�L�D$H����H������H�|$��V��H��t7H�PH� tH�PH���H��HD�H��� t
H������H�C�H�������ff.�f��������H��:�AuH��H�����f�SH��H��H��葢�H��E1�E1�1ɺ�
H��[��������f.�UH��H��SH��H��8dH�%(H�L$(1�̸Au0H��H���my�H��H���"��H�T$(dH3%(u6H��8[]�H��H��H�$��E1�I����H��H���.����������g����AVI��AUI��ATI��UH��SL��H��0dH�%(H�D$(1���AuLH��H��L���x��H��$H��HD�H��L��H���Й�H�L$(dH3%(u|H��0[]A\A]A^�H�$I��$u6�E1�L��L���#��E��I��ٺaH��H���[����f��A����H�ھq�H��H�D$��q�����ff.�@��������A�$����AVAUI��ATUSH��H��H��dH�%(H�D$1���A�.�H���HH�*L�f�I��H�,$�(@��tj�϶AuaH9���H�,$��tH�$H��I��M���I��I�]��u�H��u-L����H��蘕�H��H��H���k������H�ڃ�thH�؃�H��tH��t�H��u�H���H��u�H���H��tH��t�@��u�H�E��H��u���A�x���H��H���z������5���H���H��u�H��q@H�H��teH9CtoH�؃�H��u�닐H���8��E1�E1�1ɺ�
H��H���p���H��DH�L$dH3%(H����H��[]A\A]A^�@H�
�q@H9����H��tK@�������H�M��H�����H9E�����;�A����H��H��螣������Y���@H�؃�H���s���H��������e���荛�ff.�f�������AVI��AUATUSH��H��H��dH�%(H�D$1����A�.�H���HH�*L�f�I��H�,$�(@��tj��AuaH9���H�,$��tH�$H��I��M���I��I���u�H��u.L����H���I��H��H��H���[i����fDH�ڃ�thH�؃�H��tH��t�H��u�H���H��u�H���H��tH��t�@��u�H�E��H��u��dzA�w���H��H���*����7���f�H���H��u�H�eo@H�H��teH9CtoH�؃�H��u�닐H�����E1�E1�1ɺ�
H��H��� ���H��DH�L$dH3%(H����H��[]A\A]A^�@H�
Qo@H9����H��tK@�������H�M��H�����H9E������A����H��H���N�����[���fDH�؃�H���r���H��������d����=��ff.�f���������UH��ATSH��PH�M�1�L�E�L�M�dH�%(H�E�1���(�k��H�]�dH3%(��H�e�[A\]��H�ELc�H���E�H�E�I��H�E�H�E�I�BH��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�L$L�e�D�M�1�H���L�]�H��I��%fDE��H��A���M�M�L�@�L9�tA��/v�M��H��I��M�L�@�L9�u������D�M��������ff.���AUATUSH��dH�%(H�D$1�H����H��H������H����H����`H��H���H=A�MI��I��H����I�|$L��H����O������H�4$H����H�F���<��<��H��A�1ɺH�����H�������H�$��t3L��H���{��H�D$dH3%(��H��[]A\A]�@H�H�ƒ�H��u��� t�H������fDM�d$M���*���H���zo�H��H������1ҿ�L��H��t�H�PH��t����<t�<�#���H�BH��t�H�@H��t����<�����H����l�H�=��H��1�豙�������H��b@H�5��H�81�菟�ff.�@��AUATUH��SH��dH�%(H�D$1���~;�G�H��I��L�l�DH�L��H�$�iv�H��t2H��H��H���5c�L9�u�H�L$dH3%(H��uH��[]A\A]�H�4$H�����a�����AVI��AUI��ATUH��SfH�=�e@ffH�|�H��H�H�CH�P8L�`@H�SH�PH�P@�8b�L��H��H���b�H��L����H�CH�P�H�SL�`�[]A\A]A^Ð��UH��AVAUI��ATI��H��SH�� H�U�H�dH�%(H�E�1��� tqH��H���A��H��H�B%�H9�tH��H��$�H9�u�%�t	H)�H�L�H�L$H�wH���H���?D��L��L�����@H�_Hc�A��H9��������uH��H��H��=����H����H�BH��H��H%�H)�H���H��H9�tH��H��$�H9�u����H�L$H�w H����U���DH��1��x�H�@H��H�E��
��L�E�M�pI� tafH�=�c@ffH��z�H��L��M��A���L��H�8H�G�p�%���H�U�H�U�H�U�ZYH�]�dH3%(uFH�e�[A\A]A^]�M�p �f�H��踬�H�����H�޿�3w�H)�H�L��#����ݒ�ff.�f���AWLc�AVM��AUI��ATI��UH��SH���dH�%(H��$�1�fH�=c@ffH�	z�L�l$@H�D$0�H�D$8H�D$HL�|$PH�H����H��g@H�0H�@@H��H��L1�H��H��H��H)�H��H�H��	H��H��
H)�H)�H�C0H��H������H�x ��L���hM����I;q��I�AH� ��L;h��H�SH�JH�PH���������������H�H����H����I�AD�t$�D$H�@�u
A����B1�H�D$xH�D$`L��H��H�D$ H�D$ H��$�H��$�H�CxH�CxHDŽ$�DŽ$�H�D$`�H�D$hL�l$pL��$�H�D$(L��$�H��$�H��$�D��$��7���H��$�dH3<%(��H���[]A\A]A^A_�fD@��t:H���XH����@����@����H��b@H�0�
���H�uH�������L��H���0	��H�L$0�f��I��H�CH�HM��t
I�AH���V���H��L��E1�M��QH��D��H���ݨ��ZY�/���fDH�ƿH�$L�L$�Z��H�$H��t�H�PH��t��L�L$���������f�H�pH�~ Q����H���{���������H�p H��t@��uH���H��uH�v@L�$H��$�A���H��H�L$��H�L$L�$H�����������fDH��a@H�0����L��H�L$H�T$E1�H��$�L�$�i��Lc|$L�$I��HcD$M������H��[@H�0����H�A]@H�0�s����H��_@H�0�c���謎�ff.����AUI��ATA��UH��SH��H��fH�=�^@ffH�u�H�H�AH�P I��uI�@�H��I���t�I�@�H��H��H�AxL��H�
H��D��[]A\A]���fD��AVI��AUA��ATI��UH��SI��tL��fH�=w^@ffH�ou�H�H�Xx[L��D��L��H��]A\A]A^鯠�ff.�@��AWE��AVI��AUA��ATI��USH��H���L�D$dH�%(H��$�1�H��uoH�c@H�8H��t)1�L���F�H��H��tH�tH�@L;p���$H��$�dH3%(��H���[]A\A]A^A_�f�@��u
H��@H����H������u����H�_@H�8�Z����H��Y@H�8�D���f�fH�=(]@ffH� t�H�UH�l$@H�D$0�H�D$8H�D$PD�l$L�0H��U��H�D$H1�E�������D$�u<A���~3H�t$H�L$H�T$E��H��$���f��D�l$H�D$�D$fDH�H�T$E��L��H�D$xIc�H��$�H��$�H�D$`H�D$ H�D$ H��$�H�D$0H��$�I�FxI�FxHDŽ$�DŽ$�H�D$`�H�D$hL�d$pH�D$(H��$�H��$�D��$���$���~��� ���f�H�^@H�8�����H��Y@H�8�����H�y\@H�8����,��ff.��ATI��USH��dH�%(H��$�1�@�������t]I�D$H�X�H�P�I�T$H����H��Y@H;����H����H�������H���j��H��u�H��t;I�T$(I�\$H��H��$�dH3<%(H����H�İ[]A\����t,I�T$ �uf�H�B�H��H��t�H�Z��f.�1��@H�Q[@��H�8�Y�����H���Ā�H���n���H���b����H��������H����H��[@H�8f��1Ҿ���H��H���fH�=Z@ffH�q�H�t$p1�H�l$ H�D$�H�D$H�D$0HDŽ$�DŽ$�H�8H�[R��H�D$@�H�D$(H�D$@H�$H��H�D$pH�D$H�D$xH�GxH�GxH�D$HH�D$P�H�D$XH�D$`H�D$H��$�H��$�DŽ$��)|��H��H����H���t�H����H������1��Y�H������H�^@H�8����I�L$ �t��H�A�H��H�����H�y�1���X��H��t�H�hH�������H��H�����H����H������H���H�����H����~�H���r���H�{�6���fD�v����I�T$ ������f�H�B�H��H��t��{���H�y��:X��H�������P�����H�S��H���&�H��������S�H��I��H���S��H��L���H��L����L������H�=\�����Z�H��H��I��H���[�L�����H��S@H�8�O���H�pU@H�8�@���H�)X@H�8�1����܆�H���T~�H�5��H��H�SS@H�81��I��f�AWI��I��D��AVAUATUH��H��L��SH��HH�EL��$�L�p�@���VI��H��A��I��H�� A��A��H�|$A���LH�D$D��M���I��|$ A��E1�A��tL�@�I��� ��I�@E�|�H��t	���tH�M H�H��H�փ�uf.�H�G�H��H��t�H�G�H�D$H��H��u�H�[�H��H���t����H�CH�@H�@H�MD���H�y�I������tJI�8H���� �@I�pH�<�H�D98H9��&H��H��=�pI�p H���1H�Ic�H��H�D8L�H9���H��H��=�6H����H�D$L�EA�� I�E�H��$�I�EH�D$I�E�D$ ���A	�D��I�EC�<I�E H��$�L�(I�L�qH�AH�D$H��H[]A\A]A^A_�fD�H��L�\$8L�T$0L�D$(D�L$$�G���H�M D�L$$L�D$(L�T$0H�D$H�L�\$8H�փ��u���@H��������@H����H�D98H9���I�pH������H��H��L�\$8D�T$0L�D$(D�L$$蔝�L�D$(D�L$$H��D�T$0L�\$8I�8�� ��I�PH�<��y���DI�RI�H��H9�����H��H9�t@H��8H9���H9X u�H�@����@C�DH��L�\$0H�L�D$(H��D�L$$H)����L�\$0L�D$(D�L$$�1�����s}��H�~D�~ D�NH�|$A�������DA�~E�f �|$ I�~H�|$���fDH���������g����f���AWI��AVAUI��ATUH��SH��H��dH�%(H��$�1�����_L�#A���BD����� �SH�KH�L$fH�=�R@ffH��i�H�T$0H��E1�RM��L��L�t$AVH�L$H�8�t���H�t$ ZY@����H��H�����f�H�����H��H)�H�}H�D$xHDŽ$�L�t$`H�T$x��$�D$hH�D$p���������$�H����H�5W@H�H�D$H9H�kH�PH��� �XH��H�D$hH�T$`L��PH�t$H9st
H���H��$�H��$�dH3%(�kH�Ĩ[]A\A]A^A_�f.�L��1�L��H�����H�3@���#H��H�����f�H�����H��H)�H�}H�D$xHDŽ$�H�\$`H�T$x��$�D$hH�D$p���������$�H����H�V@H�H�CH9H�dH�PH��� �QH�D$hH�T$`H��L��PH��$�����I�EL��H�@ H� �H)��������������A���1�L�����������H����H�����������H��Q@H��(���f���tkH����H������������H��Q@H�����fDH�}H�s@���!���H�D$�Tl�H�D$�
���f.�H�J�����H�J����A�D$���fDH�}I�V�#����fDH�}H�S�����fDH��Q@H��G����H��Q@H��W����H�~ H�����f�Hc�H��H)�H�MH�D$xD$hHDŽ$�H�D$p�FH�\$`H�T$x��$����H�~ H�����f�Hc�H��H)�H�MH�D$xD$hHDŽ$�H�D$p�FL�t$`H�T$x��$��i���H��J@H��w����H��J@H�����H�qL@H��W����H�aL@H��g����H�O@H��W����H�	O@H��'����}�ff.����AWI��AVAUATI��UH��SH��H��dH�%(H��$�1�����M�4$A���QD����� ���L��L��H����I�$���2H��H�����f��H�����H��H)�H�{H�D$xD$hHDŽ$�L�d$`H�D$pH�T$x��$���L��H�߃���$���H�T$`H��H��H�D$h�PH��$�vH��$�dH3%(�<H�Ĩ[]A\A]A^A_�DI�L$H�L$fH�=�L@ffH��c�H�T$0H��M��RA�L��L�l$AUH�L$H�8���H�L$ Z^���}H��H�����f��H�����H��H)�H�{H�D$xD$hHDŽ$�L�l$`H�D$pH�T$x��$���L��H�߃���$��v�H��H�T$`H��H�D$h�PH�t$I9t$���H�����H�{I�t$@������H�D$�Yh�H�D$���������������1�H���J���f.�H�EH��H�@ H� �<$���q����A�F����H�y H�����f�IHc�H��H)�H�sH�D$xD$hHDŽ$�L�d$`H�D$pH�T$x��$�����H�y H�����f�IHc�H��H)�H�sH�D$xD$hHDŽ$�L�l$`H�D$pH�T$x��$�����Nz�ff.�AWAVE��AUI��ATI��UH��SH��H��8dH�%(H�D$(1�fH�=�J@ffH�a�L�8I�OI�I�GL��L9�sH�P ��u�1�H�H ��t'H��8L9�r�H�I@H�5��H�81��F��fD�o@H�@H��D��L���D$)$L�,$I��L��H�D$�N���H��H���UH��t=H��L��H��L���܁��L���t"��H�\$(dH3%(�H��8[]A\A]A^A_ÐH�|$t��D$���#��sAH�L$�t�xDH�A�H��H���ucH�y�1��I��H��t�H���?��H���k�������H�$H�P �B������rA����H�H�@ �P������s,H�H�H�y��'I��H��u��w��DH�J�[�����uVH�H�@ �P���_��r���u<H�H�@ �P���E��r���u"H�H�x �JL��H�������x�I�p��]�@��ATUH��S1�H��tH����j�H��fH�=kH@ffH�c_�H�H��t;H�JH�BH�H��H9�r�%DH��8H9�sH�P ��u�L�`��H��SAL��8H���jj�H��L��[A�]1�H��A\�0�����H�5���P������W{����ATUSH��fH�=�G@ffH�^�H�8�
-���H�=^�H��H�CH�E��J�H�{I����i�H�;L��[H��A�]H��A\���f.���SH��0H�|$H�t$�T$$dH�%(H��$(1�H�D$0fH�="G@ffH�^�DŽ$ H�D$@$H�H�D$8H�\$8H�CH�\$H��$H�C0H���;H�H 1�H�qXH9p�H�|$P��$$�6A������H�t$H�D$@H�FH�D$H��tz�uvH�D$H�H�D$(��H��u`H�	RAH�t$1�1�E1�H��8���H�t$H�D$0H��$H�FH�D$0H��$(dH3<%(�H��0[�fDH�D$H��� uKH�D$H�H H�PHc�H9�����D�D$$H�|$��
�.z�H�L$H�D$0H��$H�A�fDH��H��H����벋Q`����H�@Xf.�H�L$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xt89�t
H�|$�[H��$H�t$H�FH�D$8��H�x�yH��f��Q`���t�fDAUE��ATI��U��S��H��8H�T$dH�%(H�D$(1��[���tF���MH�|$H�L$E����a��H�T$(dH3%(�<H��8[]A\A]�fDH�D$�C����I�$H�|$H�D$��b���t{����L�l$I����H�D$L�d$H�D$ fH�=<D@ffH�4[�A��1�1�L��H�8�Rh��H�|$ H���ub�H�t$ A��L��H��L���?����=���f.�I�|$@��tU�`N���I�D$H�D$H��u�|��I��H�D$�i���@H�|$�b��G���f���f��e��1�1����^������]���r����E1���?���ff.�@��E1�1��"���f���ATI��UH��S��蛐�E1�L��H����[]A��A\1����ff.�@��ATI��UH��S���[��E1�L��H���߹[A��]A\���ff.����AWAVAUATUS��H��XdH�%(H�D$H1�H�D$H��L�d$H�D$(H�D$H�|$ L�d$0H�D$8����H�H�պH�$H�D$ L�@�@H��t
Lc�N��L�	��H��L9�tH�H9��H��t�H��H�L9�u�9��7�[`����A�����H�\$L�l$�$L�<$H��HD�I����fH�=�A@ffH�X�H�5��?L��H�(�\3�H��D��L��H��I���؃��H��H����H��L��1�H���ly��H�C�����u.H�����H�|$HdH3<%(��H��X[]A\A]A^A_�H�uH�����L��L��H����&���@E��H��1�L��H���=����H�|$@��u�c�A�����L���8_�����KK�������H[�H�}p�V��*p�f.���AWAVAUATUH��SH��fH�=�@@ffH�{W�H�H�E���ubH�SH��L�`D��D���L�j�%��H�{H��E1�I��H�C0�#DDH���AWAVAUAT�j��H��(H��[]A\A]A^A_���H�<@H�5��H�81��y�@��AUATI��USH��fH�=�?@ffH��V�H�H��KAH��u)H�-E(f��H���3\�H��KAH��t�H��H�]D@H�8�5�H�h I��H�����H��1�L��H���ew��I�D$�����uH��H��[]A\A]����@H�sH���$��H��L��H����$����@���W������H�O�WH�wH�?�9<�f���E1�����@��AWAVI��AUA��ATUH��SH��H��L�$L�L$dH�%(H��$�1�H���rH��C@L�8fH�=�>@ffH�U�H��A�1�L��L� L���G��������
H�nC@H�8H����1�H��L$����L$H��I���H�@H�������<��<��A��$��JL�T$H��H�$M��L�L$D��H�޿�Ћ�$0L�T$H�f6��H�D$X1���I�RL�T$P��D�l$(H�D$@���H�D$HH�D$`�D$,�u
A����gH�H��$�L��L��H��$�Ic�H��$�H�D$pH�D$0H�D$0H��$�H�D$@H��$�I�D$xI�D$xH��$���$0HDŽ$���DŽ$�H�D$p�H�D$xH��$�H�D$8H��$�D��$���$��_��H��$�dH34%(��H��[]A\A]A^A_�f�H��:@L�8fH�=~<@ffH�vS�H��A��L��L� L���:��������0H�$L�L$M��D��H��H��1��и$�r���D@��uBL�fH�=<@ffH�S�H��A�H��L��L� L���Ԓ������t�H�{���DH���VH���<����������H�c=@L�8fH�=�;@ffH�R�H��H��L��A�L� L���f��������,������C����H�=@H�8����L�ֿL�T$�F���L$H��tH�@H��t�L�T$��<�����H��M��E��H�ڋ�$8L��L��Pj$QH���jr��H�� M��D��H��$H�D$H��H�$@��L�L$H��@����H�D$�	���@H�7@L�8�����L��L�T$����L�T$�������A��$�1�L������H��<@L�8fH�=n:@ffH�fQ�H��A��L��L� L���*���������H�a<@H�8�����H�q6@H�8�����H�8@H�8���D��$0L��H�L$(H�T$,H��$��/D��D�l$(I�ƋD$,�f���fDH��:@L�8����f�H�y:@H�8�^����,i�H��H�������H�%�AH��tH��f�H��fH�=t9@ffH�lP�H�H�@0H��tH�@H�H��Ð����DA�@��H��DAH��(�ff.�f���H�E�?�@��H���?�@��H��DAH�H����GH�����ff.���SH��H���1�H�C[�f���H��3-���ATI��USHcH��t,H�_H�@H�,ÐH�;�m�H�{H��t�,�H��H9�u�I�|$��,�I�|$[]A\��,�f�AWI��AVAUATUSH��H�GH�7L�<�M����H�GI�_�H9���I��L��I��I��I)�L��H��m۶m۶mI��L��I�D$H��H�D$A��H�D$H��~]J��I)�O���X�����H�;t	H��H��A��H��8L9�t)H�{u�H���i���H��H��8H��H�@H�P A��L9�u�H��[]A\A]A^A_�H��1�L��[]A\A]A^A_A��f.�UH��H�tH���?SH��H��H�=�CA�{S�H�5��?H��H����(�H�EH��H��[]�ff.���H�U�?�0�;S�ff.���H��H�5��?�|(�H�H�xH��tH���f���H���fDUH��H�U�?SH��H��H�=�BA��R�H�P �@uH�P H�*H�ZH��t��t
H��[]�fDH��H��H�D$�R�H�D$H��[]�@��UH��SH��H�5}�?H����'�H�XH��t��tH��H��[]�@H��H���MR�H��H��[]���USH��H��H�/H���>��H�{L�CH��H��HD‹SH��[]H��A��f���H��H�5Q�?�<'�H�H�H��tH�H���t<t"H�BH�@H�@HH���H�AH�@��t�H�y �=��H��HD�H���DH��tZH��t@��tPH�=�1���Q�H�H�ƒ�H��u�H������t
��u�H���@H�G1��u�H�x���1���ff.��AUH�5�?ATUSH��(H�|$dH�%(H�D$1��E&�L�l$Hc8H���e(�I�ċ��~21�f.�Hc�L���H�D@H�<����L��H���~�;+|�H�D$H�D$H�D$L��H�T$dH3%(uH��([]A\A]��c����AUA��ATL�%�UH��SH��H��L�/H��t
L�fH� uD�E��tHH��trL�KH� tL�KH��L��L��[H���]1�A\A]��,��EL�f��u�L��M�D�D$H�=4��u��ED�D$H��u�H��L��L��[H�.�]1�A\A]�j,�f.�AWA��AVI��AUATM��UIc�S��H��8dH�%(H�D$(1����l���A�A�H��t"H�t$ E1�1�1�L�$H�D$ �'�L�$������t8��tKE1�1�M�$H�t$(dH34%(�H��8[]A\A]A^A_��A�/I�����H���f�I�NI�I�VH��H����H��p1�H9�wH)�H��m۶m۶mH��H��H�HH�T$H)�H�t$E1�L���>�H��H����H�����H���M���H�D$L�L$H��7���DI���n���A����I�A����I�M���M����J�D-����N�H�$Hc��L$L�,���~�H�$�L$��u5�ٿL�*����L�J���h����1����K��L��H�T$�$�(1��$H�T$H�Dž�u��#���@A��tAI�M��xmJ�D-I������K���L��L�$�_�L�$I������L���_�I������L���_�I���H��������H��4@L��H�5z�H�81��i�H��4@L��H�5�	H�81��zi���_�A������������H��H�5�?�!�H�H�xH��tH���e���H���fD��H�m5@H�8H�@H�xH�D?�D�d�H��1�1�dH�%(H�D$1�H���0"�����t	H�$H��uH�t$dH34%(H��u"H���fD��u�H���H��u�H�R����^�@��ATI���UH��S�H#�H�U1�H��H����H���_���H�߾H����H�ߺ��m�H�ߺ��[�H��H�߾H���G�I�D$H�߾H�PH�H��H)�H��i��m۶H�H�T��I�<$H��[]A\�6y�fD��AUATI���UH��SI��I��H���{"�H�U1�H��H�����H�����H�߾H����L��H�߾��H�U�H�߾H��HD���L��H�߾�u�I�D$H�߾H�PH�H��H)�H��i��m۶H�H�T�D�I�<$H��H��[]A\A]�^x�ff.���H�A��% H��t;L�IH� tL�IH�NH��tH�NH����1���&�f.�H�NH��tH�NH����1��&���ATI��USHcH��t3H�_H�@H�,ÐH�;�h&�H�{H�H��t	�W&�H�CH��H9�u�I�|$�@&�I�|$I�D$�1&�[]I�D$A\��1�H�����u�@H����u�H�H��H�у�H��t1��H������u�H�P�����HE��f��H�����uÐ@��u�H�H�у�H��u�H������u�H�G�f.�H���[�H�pH� tH�p�
H�=ʮ�u-�����H���ff.�H��xH;}H�?H����]�PH�c0@H�5"�H�81��e�f���AT1�I��UH��H�=�S�4j�H��I��t+H��L��H�5�1��'Y�H�}H�EH��[]A\��fD�H�5��H���L���f.�AWAVAUATUSH��XH�_H�L$H�OD�L$ D�L$'dH�%(H�D$H1�H�H�D$@H�,�H����H��m۶m۶mH��8H��H)�H��H��H���lI��I��E��H����H9���H�t$@L����L�|$@H�$A�M���FH9���E1�D�d$&1�M��H�D$M��D��M��H�D$�=�H�;t
M���I��H��8H9���L�l$@IcuH��L9���L�sM��u�M��̍pLc�H�߈T$(A�uK�DvI�D�H�D$����H�T$H��H��T$(t��K�vH��8H�D$I�D�H�@ H�@(H9��r���f�M��H�L$H��t1�M�����؉H�L$HdH3%(H�$��H��X[]A\A]A^A_�H�t$@1��T�H�$H�D$@�H�D$H��t����|$&u��t=I�F������������L���T$(����T$(�������L�s��u��L�\$@L�H��McL�T$8L�\$(A�@O�l@L�D$0A�I��K�+H�D$�́��H�T$L�\$(H��L�D$0L�T$8H���H�CH�@����K�@H�D$I��H�@ H�@(L�s�,����H�|$M��D�d$&�����H�{H��tH�H��tE�����������H��8H9�u��f���I���G������[���H�<$H��L�D$8L�T$0L�\$(�}D�L�\$(L�T$0L�D$8�,���f�H�<$H�ƈT$(�PD��T$(����fDH�H�{H�L$H�T$�H�zH��H�B(H��u�H��t@��tU�|$ �����H�\$H�l$H�[H��H)�H�������L�$$fDH��L��H�����H����s�H��u��i���H��H�<$�C���O�t+M��uQK�@H�T$M�T�(H�D$H��H����H��L�pH��L�P(H��u�|$'uGH�D$L�s�p���A��u�H�<$L��L�D$8L�T$0L�\$(�$C�L�\$(L�T$0L�D$8�z���H�D$L�t$L�hH�@H��I)�M��~�H�\$L��L�4$fDH��L��H�����H����r�I��u�H�\$�b����|$'u	L�s����L�t$H�\$A�L��L�4$��U�ff.���ATI��U��SH��dH�%(H�D$1�fH�=�%@ffH��<�I��A���L��H�H����H��x	H�$H��u#H�L$dH3%(�u&H��[]A\�DA�E1�1�H��H���������T���AVAUATUH��SL�fH�L���T�I�t$I��H�EL�vPH��t=H+^L��H��H��H��H����Z���[�UL��L��H�}H�E]A\A]A^��D�1҅�t؋VX����H��H�5��?��H��H�zH��uH���fDH�rH�WH��t#H+rH��H��H���NZ�H��H�H�D�f��
��t�HcBXH�D�ff.�@AWAVAUATUSH��(H�GL�oH�L$L�D$H��M���S��H�L�dȅ��AM9��8��M��E1��!fDI�>t��~~��I��8A9�}YM9�tTI�F ��t�L����|��H��t�H�p�6��@��u̅��H�T$Ic�H��H�D$H��t��A��I��8A9�|�H��(D��[]A\A]A^A_��L���h|��H�L$Ic�H�<�H��t_L�@A�uUH�H�D$H��t�L��M9�tGI�6I�~H��tkH�GL�D$H+pH��H��H����X�L�D$A�A���j���@I�F�f�I�}0t�A�A���G���f�E1��?����H�w1����t��FX�ff.�@��H�W 1���u9SH�_H��t(H�7H�SH��t;H+rH��H��H��H���3X���t[�D��H�C[�@X���BX���u�[�D��H�5�?� /���SH��H��dH�%(H�D$1�H��t@��t)f�H�L$dH3%(H����H��[�H�H�Ѓ�H�H�H��w�H��t7H�t$荞���|$t�H��t�H��H��H�=�1��`�H������ t�H���H���{���@���q���H���H��H���]���H�t$�#����|$�H���H���>���H��H��H�=l�	1��_�H���"����P�ff.�f�SL���H�N����ž���Ic�L�>��DH���H����H���H9�t.1���H�R�H����������H9�u�NH�����H�=��[H��1���^�@H�qP[�F���fDH�AP[�f.�H����L���@H���8�����H�=a�[H��1��^�@H���ff.�AUATUSH��H��H�H����H�P���tc<uwH�{H���ZH�{�O�JO�H�{H�sH��H�GH����H+pH��H��H���mU�A��H�H�P�"fDH�BH�@��u��H�{��N�H�sH��H�CH�PH���/H+rH��H��H��H���U�A��H�CH��H��tH�z H������H��L�mH�E tL�mH��H���gQ�L��H�5ҁH��1��#4�H��E�����H�5,�H���@�H����H�SH� tH�SH��H�5�1��'L�H��H��[]A\A]�f�H�1*AE1�H�H���H�z ��&��H��HD�H�H�z H���(���H���,���H��D��H�5ϡ1��K��P�����
E1�����D�bX����f.�H��H�5j��<?�H��H��[]A\A]�fDH��0E1�H�R���X���D�`X�O���ff.���H��H�5��?�|�H�8���H��H���-����H��H�5a�?�L�H�8H���P���ATH�5�?USH�� H�|$dH�%(H�D$1���Hc8H���<�I�ċ��~&1�HcŃ�H�D@H�<����L��H���g�;+|�H�D$H�D$H�D$L��H�T$dH3%(u	H�� []A\��mL�ff.�f�UD��SH��H��8dH�%(H�D$(1�L�L$��H��xeH�T$H��tkH�L$E1�E1�H��H����T$H�D$��u8H�Dž�tQ���H�T$H�T$ H�T$H�\$(dH3%(u4H��8[]�fD���f��+K���f��{���K�@ATA��UH��H�5@�?S��H����
������u)����t!H�x0E��H���E1�[1�]A\����[�]A\�fD��UH��S��H��fH�=�@ffH�2�H���E1�A��H�8H��[]�����UH��S��H��fH�=i@ffH�a2�H���A�A��H�8H��[]�]���ff.�f���SH�5�?���H�H�H��tdH�J���t<t%H�sH�z [����fDH�AH�@��t�H�y �6#��H��HD�H�[H�z H���z���f.�H�s�[������H��H�5a�?�L�H�H�xH��t0H�pH��t'H�GH+pH��H��H��H�����f.������H���fD��H��H�5�?���H�H�@H�����H�5��?��&���E1�E1�1�H�����1��v�fD��UH�5T�?H��SH����H��H�@H��tH��[]�@H���8���H�CH��t�u�H��H���6�H�CH��[]�D���f.���H��H�5�?�,�H�@(H���ff.�@��UH�5��?H��SH���
�H��H�@H��tH��[]�@H���h�H�CH��t�u�H��H���p5�H�CH��[]�D��AWAVAUATUSH��8dH�%(H�D$(1�H��t	H��@��t0E1�H�L$(dH3%(L���H��8[]A\A]A^A_��H�H�ƒ�H��u��� �8H�E H�8H�5:�?�E%���t�H�}�� �!H����H�t$A� 1���L�t$I����H����H9��[���H�EH�<�H�5ٙ?H�|$��$����7���H�|$H�5��?�	�L�|$H�H�2K�t'�H��t@��uL��H�D$�.4�H�D$H�H�rK�4'H��t@��uL��H�D$�4�H�D$H�H�RH�[I�T�(H�D$�L�t$ H�D$H��I��H�E�� �2���H;]�����H�E �3����H�E�����H�}�����F�f���H��E1�E1�1���H��H������ff.�@��H��D��E1�1��Z�H��H���~���ff.���SH��@dH�%(H�D$81�H���H�<$H�\$H�D$ H���D$H�D$(fH�=z@ffH�r-�I��H�
��H���H�5Z��H�8���H�D$8dH3%(uH��@[��E����SH�T�H��0dH�%(H�D$(1�H��@H�T$H��H�H�D$fH�=�@ffH��,�I��H�
�H�h�H�5���H�8���H�D$(dH3%(uH��0[��.E�ff.���SH��@dH�%(H�D$81�H���H�<$H�\$H�D$ H��H�t$H�D$(fH�=]@ffH�U,�I��H�
{��H���H�5=��H�8���H�D$8dH3%(uH��@[��D�f.���H��fH�=@ffH�+�H�����1�H�8H������������f���1����D����A�H��E1�H��1ɉ�����f�����E1�H��E1�H��1ɉ����D��UH�5ܕSH��H�8@H�-�@H�H�}��H�5^��H��H�� A�L�H�� AH����H�@@H�8H�5���Z�H��@H�=� AH�
���H�m���H�0�+�H�=n A1�H���H�55i	�"�H�H�=O AH�5=e�c�H��H�1 A��	�H�% AH���4��LH�xH�5��Y�H�=�A1�H���H�5���H�=�A1�H�0���H�5�����H�=�A1�H����H�5DL	���H�=�A1�H�X��H�5����H�=�A1�H���H�5����H�=qA1�H�P���H�5�^��H�=UA1�H����H�5e�h������H�5<���H�='��0������H�5��H�=���H�}H�������[H�s�H�5�]�!�fDH��@H�8������u<H�x�.���H����H�����uX<��H��@H�8����H��tJH��td�u<t|H��@H�8����DH�9@H�8����f�H�!@H�8�9����H��@H�8����H��@H�8�����H��@H�8�|����H��@H�8����H�I@H�8�\����H�9@H�8�������AVAUATUSH��`H�t$H�|$dH�%(H��$X1�fH�=8@ffH�0(�H�8H��H�|$�P�H�CH��1�H�����1�H�\$@H�D$H����H�H�D$P�� ��H����H�T$`1���?�L�D$0H�
_�H�D$0H�D$H��H�5���H��H�D$8�j��H�|$0��I��H��L�0�ZDL��H����H9�}[L���YB��H��I���IB�H��t%H��H�|$H������L��H����L�u��Hc�A�� u�H�EH9�|�H�L$L�d$XDŽ$PH�D$p$H�AH��$HH�A0H���H�H 1�H�YXH9X�H��$���$T�G
�����u_H�\$H�D$pH�|$@H�t$H�CH�D$��H�D$(H��$HH�CH�D$(H��$XdH3%(��H��`[]A\A]A^�H�L$H�A������ǀ�H�A0H��t`H�H 1�H�yXH9xtH9�t
H�|$��$H��$HH�D$�H�xH��������DH�P������Q`�H�@Xf��Q`����C>���H��H��H�w H����1�H��H���z@�f.���H��H��H�w H���X��H��H���G@����H��H��H�w H���(��H��H���@����H��H��H�w H�����H����?�H�����u�H���f�H��H���d��@��H��H��H�w H�����H��H���?����H��fH�=�
@ffH�$�H�H�JH�H��H+BH��H��i��m۶H�H�D���H�G����AUI��ATI��U��S��H��fH�=@
@ffH�8$�H�8H��t H��M��L����[]A\A]���H��1�[]A\A]���AUM��ATI��U��S��H��H�5�?��M��L���H�x0H����[]A\A]�O�ff.�@��H�����H��tH��H����;�f��H���fD��H�����H��tFH��AH��t
H���D�H�=���H��H��A�B��H��AH���@���H��tH��H���A�f���f���H������H��tH��H���R4�f��H���fD��H�����H��tH��H���K�f��H���fD��H���s��H��tH��H���R#�f��H���fD��S����H�����t.H�èuH�H�Ѓ�H���|H��tH��[�%)�D�[�f��� t�H���H��t��t*H���RX�H���ZS�H��H�=��[H��1��EI�DH���H��H��w��fDH�[H��[�(�ff.������H��H��u�DH�Ѓ�t1��DH�H�у�H��u�H�к% HE���H��tZATUH��SH���J�H��I���*�I��t2H��H�<�[H��H�ƗL��H�=ʋ]HE�A\1��lH�@H��[]A\ø�f.���H������H��t.H�@H�x �1�H��tH�����H���fD���H��t�H��H���J7�f.���SH���
�H��[H���������ATUSH���p��H��t+H�@H�x ���H��[H��]A\HD�H�������+9�H��H����T�H��I����I9�tHH��tBH�uI+t$Hc�H9�����H�UH�E tH�U[H��]1�H�=��A\�.G�fDH��[]A\�AWAVI��AUI��ATUH��SH���H�Z H+H��H�t$dH�%(H��$�1��_a��H�D$H����H�t$H��H�E �D$ H9��H�%�H=DD����L�=ڢH=wwt0��L�=��
H=�xtH=�yL�
��H�uID�I��L�eM����A����A����H�EH����I�T$H��H+BH�D$ H��H�D$(����D$����H�D$�L��H�I�H��H�E�H��m۶m۶mH)�H��H��1�������H�|$ ���H�L$(1��L��H���{�����H�MI+1�H���H���L���R����aH�ؾL��H�KY�8��m4H��H��H��?H��H��H���H)�H���Hi�'H)ˀ|$ HE�H��1������1�L��H���L����������t$���1H�E � t1�H�V��L��������1�H����L���������
NOA�����H�|$�$�D$�2H�T$L��$��L�����H�>�H��1��L��������.H�U�L���f��H����L��H��1��������M��tI�D$����������L�=�H=UU�p���H=ffL�
�H�`rL�eID�I��M���U���H�D$�D$H��tEH�@H�x �V�H�|$0H���If�I�$H���H��@��D$H�D$�L��E1�H�I�H��H���H��m۶m۶mH)�H��H��1��������1�H��$�dH34%(�qH���[]A\A]A^A_�fDH�E H���D$p�����L�=��H=�P���v;L�=��H=""�;���H=33L�
 �H�+qID�I�������H��L�
C�H�qID�I�����A��ubL�����H� tyH�HH�|$0H�|:	��1�����D$��������1�H�o��L��������_������D��H��t����f.�L�=��g���@H�H�f.�1�H�L$0�L��H��e�u��������������L���x2�H�HH� tH�HD�D$H�|$0H�0�1�������A���DH�D$H�H�D$%�H=`�����1�H����L������������L�t$I�F�8��� ��I�~H����I�ؾL��H��H�s�1����������I�V L��L��$��L������H�^��L��H��1��k�����z���H�SH9S �>����L�����H�7�H������L��$�����1�H�G��L��������%���I�D$������.���E1�L�l$��I�D$A��D;���
���H�EH�U D��L��H���H�@H�ڋ��H��H)�H�2����I��I�D$H���H�<��z�H�|$M��H���H���1��l�����t����v����0�f.��t
sH�G�1��DH�H�x ��ff.�@AUI��A��@ATI��US��H��H�7�H��XdH�%(H�D$H1�H��H������Ã�P~L��H�=̅A���"���x1D��L��H����!���xH�L$HdH3%(��uH��X[]A\A]�f����������/�@��AU1�ATI��H���UH��L��SH��H���S��1҅�x`H�UH�EL�mH��H9�s.�H��L��L��H������H�UH�EH��8H��H9�r�H���L��1�����Љ��H����[]A\A]���H��fH�=��?ffH��H�8H�@H�wH�H���.���ff.���AW1�I���AVAUI��H�̂ATI��L��USH���o������M����L�5��1�H���L���A������A�D$ ����1��,�1�H���L���
����x^��A;l$ sl��I�D$��L��H���L��H�L�I��1������x(I\$I9�u�1�H�5��L������y�@1�H��[]A\A]A^A_��L���h���I��H���%���H���L��1��f������ff.�@��ATH��UH��SH��dH�%(H�D$1��B������H�:H���Q!�H��H�$�5�H����H��I��1������xX1�L��H���H�߾�����x;�E����r}����H�EH�P �B����s~H�rH�N�\@1�H�L$dH3%(��H��[]A\Ð����H�H�P �B���2����$�1���f.�H�uH�NH��H�������fD���=H�2H�N �A��u�H�%fDs&H�AH�V H�H�B����sLH�r�fD����H�H�H �A��t�r�����H�H�@ �H��t�sSH�@�fD����H�H�P �B��t(r�����H�H�@ �P��tsFH�p����1��	�����ubH�H�@ �H���)���r���uHH�H�x ����H�2�$�����u/H�H�@ �P��t�r���uH�H�x ���H������+�f.���SH��H�5�{?�<��H��[H�x0H�w�+���ff.���H��H�WI��H�H�����H�r I��I)���uH�JH�qH�
H+NH��H�wI�����M��xM��H�����I��I9�LG�L�BH��L��I)�H��H)�I��H��m۶m۶mH��H��H�q�P1����H���������SH��H�5�z?�\��H��[H�x0�/���ff.�@��AWAVAUATUSH��L�vM����I�FH�T$H��H��H�WI��I��m۶m۶mH�@H�$H�H��H)�H��I�ą�~[E1��&fDI�UI�EA��H��H)�H��I��A9�}01�H����H���"����y�H��1�[]A\A]A^A_�D1�H����H��������x�L�l$L+,$xL���;�L��E1�L��H��H��1��D;�H���[]A\A]A^A_�����fD��USH��H��H��H�5yy?���H�6}�H��H�@0H�h1��f����x?L�EH�M1��H�}H���D����xL�E H��H�}1��H���#��H���[]����S�H��H�=lA�'��H��H�5]A[���56D��AWAVAUI��H�=�|ATUSH��H��(dH�%(H��$1���"�H��t:H��L�d$��L��H��A��H�||1��h��L���p��������-�AH�!~@���@��AH��AL� fH�=��?ffH���L�0M����M����I�vH��L�����H����H��H�=�|�4�����1�H��}�H����������A�L$1��H��H��{�������I�F0H���-u�H�@H��}�H�ߋ�1��~�����|�!(�H��t1�H��}�H���U�����SH��H�=B|�~����<fDM����1�H��}�H���������I���1�H�{H������I�uxH�{H�߉����I���H��zH�߉����I���H��zH�߉����I���H��zH�߉��t���I���H��zH�߉��\���I���H��zH�߉��D���I�uhH��zH�߉��/���I�upH�zH�߉�����I�u(H�nzH�߉�����I�u0H�\zH�߉����I�u8H�JzH�߉����I�u@H�9zH�߉����I�uHH�(zH�߉���I�uPH�zH�߉���I�uXH�zH�߉���I�u`H��yH�߉��r�I���H��yH�߉��Z�H�ٺ�H�=dz�7�1�H�@|�H���K�����IH���+���1��H��H�)z�%�����#1�H�L|�H��������M���V�3�A�Dž��FI��$�H��t_L�@H� tL�@H�x�HNHH��1�H�y��������1�H��y�H���������I��$`���H��1�A�H��x�O�����MI��$`Ic�H��� ��H����H9�}dH��L�4�M����1��A�H���ds��H����H��?L�1�M��D���H��xH����������A����1�H��x�H���������f�H�5w�H�=�w���I��H�����H��L�l$1�H�Tx�f����y2�fL���L���[�H�پL��H��H���5�H9�uL���X,���t�L���-�H�xD�H��1�����Љ��H��$dH3%(����H��([]A\A]A^A_��H�ax�L��1�����F���D�말H;H����H�@ �m���DA����L���?�H����q��H���m��[H�H�у�H���H�� ��L�HM��D��H�wH��H�xLN@1�H��AV����ZY���7��������I�H�Ѓ�H��t,H�P�H��voL����>�H���/q��H���a���M�F����M�N�� tM�NM��D��H�@vH��I�~MNF1���������������f.�H��L�fQH�e�L��LD�L�D$���H���p��L�D$H��t�uH�H�у�H��tc1�D��H��uH�߾������:�������A���2���I����I����A��uoA����H�=�?L������� t`H�PM��H��D��H�xLNH1�H��RH�Nu���^_�����������L�H�2���H�p�?L��o���H�P�H�;�?L��Z���H���?L��K���H���?L��<����h���%���H�H�у�H������������AUATUSH��H�;8AL� M����H�(�?I��$I��H�(L9�taL�-�t�$�H�{0H��H�w� ���t)H�L9�t4H�C(H��L��H��L�@1��w����y�H��1�[]A\A]�fDH���[]A\A]�fH�=�?ffH��H�H�@0H����l�L�`�H����AVSH��8H�|$H�t$L�D$��t&H�L$H�T$�A`�D$$���A`�H��8[A^�D��H�~0I����������H�D$H��HtvA���tlfH�=i�?ffH�a�H�H�D$(H�@0H�x0H�Ǩ������H�D$(H�@0H�@0H��H���f.�H�\$H�t$H���0�����u�H�D$H�t$H�pX�,���f���H�}�@SH�H�XXH�f6AH�H��tH9�[���fDfH�=��?ffH��H�H�@0H��t�H�@H9�[������UI��SH��H��@H�H�6AH�8H�kXH��t1�H9�tHH��H��1�[]�o����L�D$fH�=;�?ffH�3�L�D$H�H�x0H��t�H�1�H9�u�H��H�޺1�[]�"���f���UI��SH��H���@H�H�r5AH�8H�kXH��t�H9�tHH��H��1�[]����@L�D$fH�=��?ffH��L�D$H�H�x0H��t�H��H9�u�H��H�޺1�[]���ff.�@��UI��SH��H��@H�H��4AH�H�kXH��t1�H9�H����H��1�[]�>���fDH�<$H�t$fH�=�?ffH��H�<$L�D$H�H�@0H��t�H�@�@��H�m�@H��B`���B`�t�@H�BXH�z0���ff.�@��SH��H�(�@H�H�4AH�8L�C`H��tH��H��1�1�[���f�L�D$fH�=S�?ffH�K�L�D$H�H�x0H��t�H��@��H���@H�8�o`t�H�GXH��0�w�����ATUSH��H��D�c`H�kX�C`H�s0H�CX���D�c`H�kX[]A\�D��ATUSH��H��D�c`H�kXH�s0�C`H�CXH��t�m��D�c`H�kX[]A\����D�c`H�kX[]A\�ff.���H��2AH�8t�fDH��@H�8H�wX�+��D��ATUS��H���T$9���g�H�-�2AL�d$H�EfD9�vH��u�L�������T$��f�H��[]A\����SH��H�(�O�H�{�F�H�CH��t
H�x[�3�[�ff.�AVA��AUA��CATUH�- 2AS��u��%C��D!�@�� ��A��A��A��E��@��@ugA��A��A��E�ʼn�E1҉����@��AE������AE҅��~E	�uI	���H�
2A	މ߉u�[]A\A]A^鄏�@E1�E1���E1�E1��x���D諰�H��1A��	]��H��E��u5E��u0[]A\A]A^�D	މ���C�2�H��1A��	]����[D��]A\A]A^�n��fD�c��u�J���ff.�H�G0H���#f�H�@�N�xH�P	�H�VH�p�ΉH����AVAUA��ATI��UL��S芘��H��tUL�pH��L���F�A��
I�$uH�����[�E]A\A]A^�DL����H���0��[�E]A\A]A^�@[I�$�E]A\A]A^����SH��fH�=p�?ffH�h��H�H�phH���Qe�H�Xh�[�ff.�f���ATUH��SH�� dH�%(H�D$1�H���@L� ���H��H�E0H���	e�H�@I�,$H�@H��ty1�1��H�@��H��t�u�H�@��H��u�Hc�Hc�H�L	H�DH��H�$H�D$��H��H��H�����H��H�|$dH3<%(uH�� []A\����������AVAUATA��UH��SH��H��`H�L$L�$dH�%(H�D$X1����M�gH�=$nA�� t,��H�=nA��@tA���H�=3H�_GHE��A�I��fH�=��?ffH���H�L$L�D$D��L�(I�uL�����H�$H������EDH�D$H�|$L�t$ H�D$(HcD$H�DH�D$0�H���oH�D$8H�D$@H��tLH�|$tDA�� A���t:I�EH�P ��u-H�@H��t$�u H�%�H=pu�(�H�D$@fDH�$��H�߾H��HD�H�T$ H�D$H��H�D$XdH3%(��H��`[]A\A]A^�H�=�zA�������H�=7�
A�������A��H�=
�
H��EHE����A��H�=3MH��EHE��w���DH�H�ʃ�H��taH��������� �����H���H�$���fDH��H�t$1�L����
��H�$H���i����W���@�C!����fDH�@H�$�C���H�=������G����UH�5h?SH��H�|$�e��H��H�@H��tH�s H�|$��H��[]��H�k0H��tH�,AH�H��t(H9�u�H�{(H�T$����H��[]�@fH�=8�?ffH�0��H�H�@0H��t�H�@�ff.�ATUH��SH��D�g�G�GH�?H��tH�G�u&�WH�oH��	SH��u�{�st+��t[]A\�f�H�E�'#�H�}뽐H��[]A\�#�@[D��]A\����@PXH�5�jH��H�L�?H�81���f�AUA��ATI��UH��S��H������tf��u2�0�T�D�(�XL�`H�hH�@ �@(H��[]A\A]�H�%�?H�5vmH�81���@�G��t	������ff.�H�G0H����_�L�@1�I�xH��u�Bf�H9WtH�H��t1H��u�H9w tH��u�H��$tH9OuڃH���A�@ H��u�A�x u	��H��I�x�D$�_����D$H���fDH����AUATI��UH��SH��H��@��uB�U�St:H�S H��uYD�k(E��u`L�KH�{�u4H��H�M H�UL�E0�}A���H�[H��u�H��[]A\A]�@H��A�����I;T$0u���I�|$���A9�u���D��SH�G0H��H��t3�t�C@[�fDH���H��u�H�@�C@H�C0[�H�O0H�W(H�w H����H�C0H��u�H�C0�C@[Ð��H�OhH��t H�GhH�=�?�H�x������PH���?H�5hH�81����f.���SH��H��H��tH���7��H��1�[����H�xH�H��tw1��A��uQH�IH��tD�H;Yu�A��D�H�I�GH��u�W��u��W�G��tH�@H��1�[��H�D$����H�D$����G��SH�� H�|$H�t$H�T$dH�%(H��$1��F����FH���/L��DŽ$�D$,H�CH�D$0$H��$H�C0H����H�H 1�H�qXH9p��H�|$@��$���������H�|$H�D$0H�T$1�H�GH�D$H�0���H��$H�L$H�AH�D$�h�x���D$,��u/���1�H��$dH3%(��H�� [�fDH�|$�K������f�H�@Xf.��Q`�>����H�L$H�A������ǀ�H�A0H��t�H�H 1�H�yXH9xt(9��5���H�|$�F��&����H�|$�f����:�����Q`�����fDAWI��AVI��H��a?AUA���@ATUL��SH����H�5na?H��I������H��H�h(H��t@��t11�H�C0L��L�sL�{ D�+L�c8H��[]A\A]A^A_�f.�H��L���5��H�Eu�H�������u�H�8%AH�H��u�fH�=��?ffH���H�H�@0H��t�H�@�|���ff.�ATI��UH��H��SH����H��t,H�ھ��H�=������H��L�` H��[]A\���H�3�?H�5idH�81��"�f���USH��H��H�5,\?���H��fH�=��?ffH����H��H��H�8�f���H��H��[]�ff.����ATI��USH��fH�=��?ffH���H�5�[?L��H�(�P���$H�$���H��H��I�����H��tH��L��H����H��[]A\�f.���AWAVAUI��ATUSH��H�H�t$�� �
I��I��A��M����1�E1�� �_I�EH�<��Z���H��H� AH��u �H�=[�
�g��H�AH��t�H����H9��"H��AH��u'L�5�p��L���#��H��AH��t�H�����H9��>H��AH��u#L�5��
�L�����H�lAH��t�H����H9��H�GAH��u#L�5��L����H�$AH��t�H���O�H9���H��AH��u#L�5�B�L���c��H��AH��t�H����H9���H��AH��u#L�5b�L���#��H��AH��t�H�����H9���H�oAH��u#L�5�a�L�����H�LAH��t�H����H9��vH�'AH��u#L�5e�L����H�AH��t�H���O�H9��FH��AH��u#L�5#	�L���c��H��AH��t�H����H9���H��AH��u#L�5�	�L���#��H�tAH��t�H�����H9���H�OAH��u#L�5�`�L������H�,AH��t�H����H9���H�AH��u#L�5�`�
L�����H��AH��t�H���O�H9��&H��AH��u#L�5t`�L���c��H��AH��t�H����H9��0H�wAH��u#L�5A`�L���#��H�TAH��t�H�����H9���H�/AH��u'f.��H�=G����H�AH��t�H����H9���H��AH��u#fD�H�=�_���H��AH��t�H���K�H9���H��AH��u#fD�H�=�_�_��H�xAH��t�H����H9��l�P�I�E �����H��A	�L9�tI�E�n���fDA������������H�|$H��1�[D��]I��A\1�A]A^A_���fD�랐��f�L�z������s���fD��c���fD� �S���fD��C���fD��3���fD�@�#���fD������fD�����fD�������� �����@�����(����H���?H�5H�81��V�H���>��H�5�]H��H���?H�81��3���SH�H��tH�{�	�H�[H��u�[�ff.����SH�H��tH�{�'��H�[H��u�[�ff.�����G�G��t���ff.���AVI��AUA��ATI��H�5�T?US�?��H��fH�=t�?ffH�l��D��L��L��H����H�h H��H��[]A\A]A^��ff.�@��AWE��AVI��AUA��ATI��USH��H�5;T?����H��fH�=��?ffH����D��L��D��L��H��o�H�h H��H��H��[]A\A]A^A_��f���S�F�H��fH�=��?ffH���H��[H�8�W��������f���UH�5�W?H��SH���'��H�xu^H�Ë@��u-H�C�3H��t3H�x��A�H��H�5u�����CH���$[]�D�H��H�=I��D���H�[�?H�5�^H�81���f.���S���H��H���+��H��[�fD��UH��SH��H�5�R?�g��H��fH�=��?ffH���H��H�޹$H�8H��[]��ff.���ATI��UH��H�5�R?S���H��fH�=K�?ffH�C��L��H��H��[]A\H�8�N�ff.���SH��fH�=�?ffH���H�ڹ$1�[H�8��D��SH�=��H���L��H��t!H�����H��tH�ھ�H�=Z����H��[�H���?H�5�YH�81��
����UH��SH��H��fH�=x�?ffH�p��H��H��1�H�8H��[]�z�f.���UH�5�U?H��SH�����H�xH��H��uSH�@H��t2H�xH��H�5T�����C�$H�CH��[]�@H��H�=&��Q�����H��H�5���	��H��AH�C�(�D��ATUSH��H�5�T?H���V��H��D�`�����tFH�}uYH�����E��u"H���?H�=l�?H�پ$[]A\���H�A�?���H���X��A��[]H�A\H�Ѓ��H��?H�5�[H�81��	�ff.���H�w0�$1���ff.�����$1Ҿ���ff.���AUATUSH��H�_�H�kh�����H��tH��[]A\A]�DH��?H�H9Gt�H�CHL�kpH�{hA��H�k@H�CpH��H��H�C@�>����H�S@H�ChH�k@H�SHE��t,H�SH�R � tH�SH���H�SH�߉D$�!���D$H�S����H�z���f�H��t
�E���6���H�S0H�{hH����L�L�bA�D$t2A�D$I�t$H��H���L�A�l$A�|$ tI�|$��@H�kh�����H�C@L�kpH�ChH�CHH�k@�����SH��pH�|$H�t$dH�%(H��$h1�H�D$(fH�=�?ffH����D$0H�H�xhH�D$�#H�\$H���F;��DŽ$`�D$$H�CHDŽ$�$H��$XH�C0H���H�H 1�H�YXH9X��H��$���$d�
��������H�L$H��$�H�|$1�H�AH�D$��H�D$(H��$XH�L$H�A�D$$��uAH�T$H�D$0H9BhtK����H�D$(H��$hdH3%(��H��p[�@H�|$�V:��H�T$H�D$0H9Bhu�H�D$H�@h��H�T$H�D$0H�Bh����D�Q`����H�@Xf.�H�T$H�B������ǀ�H�B0H��t�H�H 1�H�yXH9xt9�����H�|$�&������Q`��H�D$�H�@���H�x����f���H��fH�=�?ffH���H�H�@hH��tH����b�f�����f���S�=��������w-���D���{���21�H��[������ �W��@����u�H��@H�14H��u�fD�H������H��@H��t��D=�Ewc=�x=�m=�p���H�{�@H�D	H���[����H���{��H�T�@H��t��:���f.�= �U=@��=�
���H���@H�2SH���������H�����H��@H��t�����f�H��@H�������H�ؘ
f��H������H��@H��t����f�H���@H��RH���y���f��H�����H���@H��t��R���f�H�a�@H�$�H���9���f��H���S��H�4�@H��t�����f�H�A�@H�l�H�������f��H�����H��@H��t�����f�H��@H��_H�������f��H������H��@H��t����f�H��@H���
H���y���f��H�����H���@H��t��R���f�H�A�@H�hQH���9���f��
H���S��H��@H��t�����f�H��@H��H�������f��H�����H��@H��t�����f�H���@H�QH�������f��H������H���@H��t����f�H�i�@H��7H���y���f��H�����H�<�@H��t��R���f�H�i�@H�RPH���9���f��H���S��H�<�@H��t�����f�H�	�@H�PH�������f��H�����H���@H��t�����f���H��fH�=`�?ffH�X��H�H�xhH��t	H���C����ff.���SH�H$H��tHcCD[H�D�fDH�OHH�w�L�CDH�����HcCD[H�D�ff.���H��fH�=��?ffH����H�H�xhH��t	H��鳾���ff.���H�GHH��$tÐSH��H�OHH�w�H�L�CD�e��H�CH[�ff.�@��H��fH�=P�?ffH�H��H�H�xhH��t	H���c����ff.���USH��H���dH�%(H�D$1��� tvj��������@���C@���H�{0H��tSH�{ tLH��H�s(H�$H���g��H���H���������� ��tC����tm��th�H�L$dH3%(��H��[]�����u�H��?H�5NH�81��@���� t�@tظ��u�H�sH�{�u��H��t�H�P 1�H�H�с��H��""t>H�x�m��e���������L����w����H��� �����H��H��H������H�s H�{0H���`f���������fD��H��fH�=`�?ffH�X��H�H�xhH��t	H���#�����ff.���S�G@H����u��H�{ H��u�[�@[�R�f���H��fH�=��?ffH����H�H�xhH��t	H������>�ff.���S�G@H����u��H�{(H��u�[�@[���f���H��fH�=��?ffH�x��H�H�xhH��t	H�������ff.����G@SH����u��H�C0[�fD��H��fH�= �?ffH���H�H�xhH��t	H���S���n�ff.������ tU��@tPSH��H�wH��s��H��tH�PH��t��t�[�DH����H��pu�H�{H��[�!������f.���H��fH�=p�?ffH�h��H�H�xhH��t	H���c�����ff.���H�G����H��fH�= �?ffH���H�H�xhH��t	H���C���n��ff.���AUH��H�50F?ATUSH��蓳�H��fH�=�?ffH���H�H�XhH���p��� �
ws���������usH����H��H��tbH���s��H������H��I�����H��I���U��H��I��D��[L��]H��A\H�=BM1�A]���=tY=tR��@��H�����H�����H��I���.��H��H������H��D��H��[H��]1�A\H�=�IA]�2��f�H�����H��H�����H��H��H�=�I[H��]1�A\A]���H��萸�H�����H��I�����H��I���r�H��H���g��H��E��L��[H��H��]H�=~LA\1�A]���EH�5�H�=YI��H�IHD�H��1�[]A\A]�q�����H���PtH�G8H��$�>�H���H���?H�5�HH�81����D��H��fH�=��?ffH���H�H�xhH��t	H���������ff.���H����@tH�G8H��$��=�H���H�6�?H�51HH�81��e��D��H��fH�=@�?ffH�8��H�H�xhH��t	H���3�����ff.���H���H�W8�� t[H��$�3=�H�
H��t+��u&H�θ���H��puH���f.��� uH�R H�H����H����H�k�?H�5fGH�81���f.���H��fH�=p�?ffH�h��H�H�xhH��t	H���C������ff.���H���H�G8�� tnH��$�q<�H�H��t+�u'H�с��H��puH��H���y��f��� uH�@ H�xH���Z��f.�H��H�xH���?��H���?H�5�FH�81������H��fH�=��?ffH���H�H�xhH��t	H���3�������ff.���H���0tH�G8H��$��;�H���H��?H�5FH�81��5��D��AUA��ATI��UH��H��SH��H�5PA?H��跮��L��H�=(���0��C�k��H�H�pD�h(�SPH�HH��SH��t@��tH��[]A\A]�f.�H��H��[]A\A]���ff.���AWAVAUI��ATI��UH��H�5�@?SH��L��H��(dH�%(H�D$1����H9��@I��D�p��H�������I���H�5@<?H���ȭ�I�G����H��H���`��I����fDH�5)@?H��葭�L�d$H��H���@H��u&L�=�	fD�L���3��H���@H��t�H��H�=�?H�L$�H�8�{��H����H���	�I�NjC����I�������L������D$��H�����H�CH��t��>L�����H���I�3E1�L$H��L��E���j�H�{�L��F�$(�Q���tI�G���cE�����;��U��CH��A�������t~E����H��?H�=��?H��$����e���I����I���„�t���f�I�GI���^���I���BH������G����u�A��H�H�Ѓ�H�L$dH3%(�H��([]A\A]A^A_�H��?�S���@H��H���E��L���=��H�������L��E1��)��3H�����<�����@�������H�rH��ts1�H��L��A��`���H�{L��1�����3�c����s�����fD�D$�������H������H���?H�5FH�81��6��fD��H�T$�l��H�T$H��H�B�@�d����r��H�K�?H�5BH�81�����H�3�?H�5%BH�81�����H��?H�5�EH�81����H��?H�5DDH�81����H��?H�5|EH�81����f.���H�1�H��u�+��uHH�@H��t�H9pu���H�@�GH��u�OÐ��H��H�5q<?�ܩ��xH�H��H�Ѓ��f.���H����@��S��H��H�����uH�=��@H����A�$[�s��H�5�7?H�L$H�$�k��H�L$H�$����H�5�9?H�=A��f���S�H�=4n���H������H�5f�H�=�@H��@�è�H�Թ?�H�p��H�5�@H�;��H�;�H���H�5�@��H�ϻ?H�=�@H�0���[H��H���@�����H�1�H9�tf�H�H�� H9�u���ff.�@��AU� I��ATI��USH�����H��1�H��taH��@L�cL�kH�(L���L�����H���L��H�H���H�CH���H�H�����H�������H �H��[]A\A]�ff.����SH����>��H�xH��H�H��Hǀ�H��ǀH)�1������H�H���[�f.���H�=�@SH�H�������tfH�=��?ffH���H�H��t�H [ÐH�������fD��H��@SH�H�����Hǃ�[������fD��H���@1�E1�H�L���L��I��A��L��I���H�7H��tH9�tH��H��H�� u�A�������K�TD������H�M�@S��H����H����	�fH�=��?ffH���H�H��t
�H [�H��� ����ff.���H��1��1��1҃��t��������H������H��1����1҃��t���s�����H������AWAVATI��UM��$�SH��@H�|$(H�\$@dH�%(H��$81�H�V�@H�L���L�|$fH�=��?ffH���L��H�\$HH�\$@L�t$ H�(�E$H�l$�D$���D$4H�EpH�D$8���I��$�H�T$HL��H�D$HH�I��$�H�I��$�H�QH�
I��$�I��$���1�A���M$�D$H�EH�EpH��$(H�E0DŽ$0H�D$P$H���LH�H 1�H�qXH9p�0H�|$`��$4�7�������!H�t$D�d$H�D$PH�FE��t@��	@D�d$A�ĉ���)�D��H��H��HL$1�H�y�D$�A9�u�L�d$@�$@H�H�GH�oH�_H�BH��M��H���H�|$@L9�u�H��$(H�t$H�F�D$4���!F$H�D$8H�Fp�D$��u*H��$8dH3%(�HH��@[]A\A^A_�H�D$�t$�	�fH�=��?ffH���H��H �fD�Q`����H�@XH�T$H�Bǀ����H�B0H��t�H�H 1�H�YXH9X��9�t
H�|$���H��$(H�t$H�\$@H�F�D$4���!F$H�D$8H�FpH9\$@����L�|$ L���U��H�D$(H�T$HL��H���H���H�H�D$HH�QH�
H�T$@H�D$HH�BH�H�\$HH�\$@�(��fH�=��?ffH���H��H ����Q`�?������f.�@��H�H�H��$uH��$t
H9������1�H9�������USH��H��H�/H�}�g��H�EH�;�[��H�H��1�[]�ff.�@��H��H�?dH�%(H�D$1�H��t,H��H�����H�5?H�$����H�<$H��t�4��H�D$dH3%(uH����*��f.���AUI��ATI��UH��SH��H�:����I�$H�EH��$t?H��藨�H9�tH���[]A\A]�f�L���x��H��1�I9�u�H��[]A\A]�L�eH���[]A\A]�ff.����H���s��1�H���ff.����H���S��1�H���ff.����UH��SH��H��(H�zdH�%(H�D$1�H��t
���H�CH�EH��$tPH�UH��$tFH�T$H�sH��H�$�H��H�T$H�$H�T$H�T$H�T$H�L$dH3%(uH��([]�f�H�k��������USH��H�H�����H��H���`��H��H�D�[]�@��USH��H�H�����H��H���0��H��H��[H�]�f���H��H�?dH�%(H�D$1�H��t%H��H�5H�$��H�<$H��t���H�D$dH3%(uH����������H��(H�?dH�%(H�D$1�H��t&H��H�5�H�<$H�D$�D��H�|$���H�D$dH3%(uH��(������SH��H�?1�H�5�����H�;[�.��ff.���SH��H�?1�H�5����׿�H�;[��ff.���SH���sQ�H�{�jQ�1�[�fD��ATI��UH��H�:SH������H�}$H�tH���1Q�L�����[1�]A\�f�H�+�[]A\���UH�51?SH��H�����H��H�5-H�8H���"��H�}���H��H��[]�ff.�@��SH��H��H���\�H���E��1�[ÐH��(H�t$H�5�0?dH�%(H�D$1��k��H�T$H�t$H�8�ٿ��$��tH�T$H�L$dH3%(H��uH��(�����ff.���H������H��$�HD�H���ff.����H���S����H��$HD�H��ÐH��(H�t$H�500?dH�%(H�D$1�諜�H�T$H�t$H�8����$��tH�D$H�H�L$dH3%(H��uH��(��+��ff.���H������H��$�HD�H���ff.����H���S����H��$HD�H��Ð��H��(H�t$H�5/?dH�%(H�D$1����H�T$H�t$H�8�����tH�D$H�H�L$dH3%(H��uH��(��g�����H��H��_��1�H������H��H�?�@��1�H���f���ATI��H�5�.?USH��H�� dH�%(H�D$1��2��H��H�t$L�$$H�8H�T$H�T$�����tPH�D$H�t$H��H�(�Z�H�t$H���Z�H�|$���H��$tH�L$dH3%(H��u&H�� []A\�f�������t�L���z��H�����`����ATI��UH��SH�Ӆ�tH�H�H�H�C[H�E1�]A\�����I�$����AUATUH��SH��H��L�*L�b��t!H�EL�(H�L� H��1�[]A\A]����f��H�EH��H���f���ATI��UH��SH��H�5X-?H�� dH�%(H�D$1��ϙ�H��H�$H�a���H�8H��H�l$�A��H��t��t?H��t@��t$H�L$dH3%(�u,H�� []A\�fDH��L�������H��L���
������fD��UH�T,?�SH������H��H�h �@uH�h H�=
,?���H�EH��H��[]�f.���UH�d,?�SH�����H��H�h �@uH�h H�=-,?�Ȧ�H�EH��H��[]�f.���H�?�ԓ�@��H�?H�6H��$tH��$t
�uc�D��f.���AUATUH��SH��H��H�zH��t
���H�EH�{譟�H�;H�C衟�I��1�L9#uH��[]A\A]�@蓸��I���V��H�SH�}L� H��H�PH�P�+��M��tH�]H���[]A\A]�f�軻���f���H��H�5!+?謗�H�8�4��H��������?H9�w
H�DH���H��H�����ff.����H��H��H�wH�����1�H���f���H��H��H�7H�����1�H�����H��(dH�%(H�D$1�H�H��H�$H�G�H�D$軸�H�T$dH3%(u1�H��(����ff.�@��H�?�t��@H��(dH�%(H�D$1�H�4$H�5���H�T$H��H�D$�۷�H�|$�1��H�D$dH3%(uH��(��'�����H�?H��t1�H�5����f��ff.�@��SH�5�)?H�����1�H�5s���H�8�K���H��[�fD��SH�5d)?H�����1�H�5c���H�8����H��[�fD��SH�54)?H��輕�1�H�5����H�8���H��[�fD��UH�5)?SH��芕�H�����H�}H�5���H��H�����H��H��[]�f���UH�5�(?SH���J��H���r��H�}H�5��H��H���l���H��H��[]�f���ATI��H�5 (?USH��H�� dH�%(H�D$1����H��H�t$L�$$H�8H�T$H�T$�ԕ���u@�+�����u"H�L$dH3%(H��u=H�� []A\�fDL���h��H����H�t$H��H�l$�S�H�|$�$����-��ff.�f�SH��H��H��t��t�
��H��[H���~��fD����H��[H���g�����UH��SH��H��8H�t$H�5'?dH�%(H�D$(1����H�T$H��t��t H�y�?H�5�/H�81�����H�
����t�H��voH�փ�H��t�H��t�H�8H�T$H�t$H�L$H���H�l$�
��H�t$H��t@��tBH��t@��tGH�\$(dH3%(H��uAH��8[]�D�H���Q�����H���н��fDH��H��载������fD��AUATUSH��H��H����H�7�?E1�H�8���H��H�5:&?I���’�L��L��H�=�l	H��1��K��H�}H�5�H��H������H�CH� tH�C�#H�ߺH�5�)���H��H��[]A\A]��@��uI��H��m���fDH��tBH��tT��u��tbH��?I��H�8�?����H���?I��H�8�%���fDH�Y�?A�H�8�
���H��?A�H�8��H���?I��H�8����fD��UH�FH��SH��H��H� tH�F�8#�teH�5v#H�����H�CH� u9�#H�uH�����H�ߺH�5A���H�uH������H��1�[]ÐH�C�f.�H�5"cH�����ff.�@��UH�5$?SH��H�����H�8�o��H��H��u/H�(�?H�8���H��H��H��H��[H�=�,1�]�K����uH�{��DH��t2H��t<��u��tBH�k�?H�8�fDH��?H�8�@H���?H�8�@H���?H�8�t����H�9�?H�8�d������ATH�=��US��L�%%�?H�5>,H��H��I�$�ߙ�H�5����H��H���
��H�߹H����H�5��貧�H�߹H���H�5��藧�H�߹H�H�H�5p��|��H�߹H�-�H�5���a��H�߹H��H�5�^�F��H�߹H���H�5���+��1�H��H�?���H�5�����1�H��H�W���H�5y���1�H��H�?���H�5ű���1�H��H�����H�5���˦�1�H��H�����H�5��賦�1�H��H�g���H�5�>
蛦�1�H��H����H�5��胦�1�H��H����H�5z]�k��1�H��H�����H�5�s
�S��H��?H��H�0衜�I�$H��H�5�*�.��H�5��H��H���\��H�߹H�
���H�5����H�߹H�"�H�5����H�߹H����H�5���˥�H�߹H���H�5*谥�H�߹H���H�5�蕥�H��1�H���H�5���}��H��1�[H�����]H�5��A\�a���ATI��USH���~H��H���~[L��H��H��]A\���@��AVAUI��ATI��UH��SH��H��0�>dH�%(H�D$(1��.H���E��H�SI��H�CH��I+�0)�H�� H	�H��������?H9�whL�l?L��L�$$�g��H�{H�sH��H�D$H)����H��L�l$H�D$H�&�@H��N��H�L$(dH3%(uH��0[]A\A]A^Ð��I����1�����ATUH��SH��dH�%(H�D$1�H��3H�1�H�4����H��H�PH� ��H�EE1�L��H��tBH�EL��1�F��D������x0��	�PW��Oƒ�H����� u�I��I��L9Mw�H���@H�$!L�%�1H��u�L���s��H���@H��t�H��H��H�����I�Ā}u%H�\$dH3%(L��u_H��[]A\�H�P�6���H�_�@H��u#H��1�H�����H�<�@H��t�L��1�1�H���X��I��똋GL�d�����@��AVH��AUATUH��SH�� H��0H��8dH�%(H�D$1�H)����H��`I�����H��`I��tPI��������?1��$f.�H�t?L��H���?��H9�`vH��pH�<�L9�v����H����@Hc��L�4$L�d$H�DH�D$H�?�@H��u#H���
�H�����H��@H��t�H��H���@H��H�8�5��H�L$dH3%(u
H�� []A\A]A^������AWAVAUATUSH��H�����PH�L$H�t$H�T$dH�%(H��$�1�軋���PI�Ņ���1�L�d$<L�5d�?L�=Nl�H��L������9�Pvj��H�T$�D$<H��H�HH�pH�8�t��L��L��H���֙��T$<��t��L���ѳ�H������H�$����H�$�D�L�%�.���I��H�H�D$A�GI�G����H�L$@H��A�GH�L$����M�wM���CfA�>�A�G��A�Ic�L�>��I�V`I�FhH��H+�0)�H�� H	�H��������?H9����H�D?I�VpH��$��H��t/I�FxH��H+�0H�� )�H	�H��������?H9��8�H�D?I���H��$��H��t2I���H��H+�0H�� )�H	�H��������?H9���H�D?I���H��$��H��t2I���H��H+�0H�� )�H	�H��������?H9��<�H�D?I���H��$��H��t2I���H��H+�0H�� )�H	�H��������?H9����H�D?I���H��$��H��t2I���H��H+�0H�� )�H	�H��������?H9��P�H�D?H�)�@H�t$�H��$��R��H��H���W��L�<$M��tkA�G�����M�wI�L��H�$���A�f����T�H�
a.��Hc�H�>���M�7L�������H������M��M��u�H�����H��$�dH3%(���H���[]A\A]A^A_�M�v8��1��L�8I��L�p�@�>���M�F�L�$���L�$�M�v L�8L�@�@H�$���H�4$I��L�pH�0�@��M�F�L�$�¶�L�$�M�v L�8L�@�@H�$衶�H�4$I��L�pH�0�@���M�F�L�$�x��L�$�M�v L�8L�@�@H�$�W��H�4$I��L�pH�0�@�`���M�F�L�$�.��L�$�M�v L�8L�@�@H�$�
��H�4$I��L�pH�0�@����1�I�~M������fDI�F(�L�D$(H�t$ L��L�$��L�D$(L�$H�t$ I���@L�I��L�HH��I9vw����1�I�~M�������f�I�F(�L�D$(H�t$ L��L�$�`��L�D$(L�$H�t$ I���@L�I��L�HH��I9vw��R���I�v�H�4$� ��H�4$I�~ I��L�8H�p�@�*�E1�I�F0�L�D$ N��I��L�$���L�D$ L�$H���@L�I��L�HM9~ w��H�$M�~8说�H�$I�~@H��L�xH��@�e�1�I�FP�H�L$(H�t$ L��L�$�p��H�L$(L�$H�t$ I���@H�H��L�HH��I9v@w��b���M�F�L�$�0��L�$�M�v L�8L�@�@H�$���H�4$I��L�pH�0�@����M�F(�L�$���L�$�L�8M�~0L�@�@H�$�ų�H�4$�L�xM�~8H�0�@H�$褳�H�$�M�v@L�xH��@H�$胳�H�4$I��L�pH�0�@���M�v��^��L�8I��L�p�@�k���M�v��=��L�8I��L�p�@�J���M�F0�L�$���L�$�M�v8L�8L�@�@H�$��H�4$I��L�pH�0�@����I�v�H�4$�β�H�4$I�~ H��L�8H�p�@���1��I�F0�H�T$(H�t$ L��L�$舲�H�T$(L�$H�t$ I���@H�H��L�HH��I9v w��z���M�v��L��L�8I��L�p�@�Y���M�F�L�$�'��L�$�M�vXL�8L�@�@H�$���H�4$I��L�pH�0�@����I�v�H�4$�ݱ�H�4$�L�8M�~XH�p�@H�$輱�L�$�M�vpL�xL��@H�$蛱�H�4$I��L�pH�0�@���M�F�L�$�r��L�$�M�v`L�8L�@�@H�$�Q��H�4$I��L�pH�0�@�Z���M�F�L�$�(��L�$�M�vXL�8L�@�@H�$���H�4$I��L�pH�0�@����M�v����L�8I��L�p�@���M�F�L�$轰�L�$�M�v L�8L�@�@H�$蜰�H�4$I��L�pH�0�@���I�v�H�4$�s��H�4$I�~ I��L�8H�p�@�m�E1�I�F0�L�D$ N��I��L�$�1��L�D$ L�$H���@L�I��L�HM9~ w��H�4$M�v8��H�4$I��L�pH�0�@����I�v�H�4$�֯�H�4$I�~ I��L�8H�p�@���E1�fDI�F0�L�D$ N��I��L�$葯�L�D$ L�$H���@L�I��L�HM9~ w��H�4$M�v8�_��H�4$I��L�pH�0�@�h���M�v@��:��L�8I��L�p�@�G���M�v@����L�8I��L�p�@�&���M�v@���L�8I��L�p�@����M�v@��׮�L�8I��L�p�@���M�v0�趮�L�8I��L�p�@���I�v@�H�4$葮�H�4$�L�8M�~XH�p�@H�$�p��L�$�M�v`L�xL��@H�$�O��H�4$I��L�pH�0�@�X�M�F�L�$�&��L�$�M�v0L�8L�@�@H�$���H�4$I��L�pH�0�@��M�v0����L�8I��L�p�@���I�v0�H�4$軭�H�4$�L�8M�~8H�p�@H�$蚭�L�$�M�v@L�xL��@H�$�y��H�4$I��L�pH�0�@��M�v(��T��L�8I��L�p�@�a�M�v(��3��L�8I��L�p�@�@�M�v(����L�8I��L�p�@��M�v(����L�8I��L�p�@��M�v(��Ь�L�8I��L�p�@���M�v�诬�L�8I��L�p�@��M�F�L�$芬�L�$�M�v0L�8L�@�@H�$�i��H�4$I��L�pH�0�@�r�M�F�L�$�@��L�$�M�v0L�8L�@�@H�$���H�4$I��L�pH�0�@�(�M�v���L�8I��L�p�@��M�v@��٫�L�8I��L�p�@���M�F�L�$贫�L�$�M�v0L�8L�@�@H�$蓫�H�4$I��L�pH�0�@��M�v@��n��L�8I��L�p�@�{�M�F�L�$�I��L�$I�V �L�8L�@�@H�$H�D$ �#��H�t$ H�$I�~(I���@H�0H�P��1��I�F8�H�T$ L��L�$�ݪ�L�$H�T$ L�8H��I��L�HH���@I9V(w��H�4$M�v@觪�H�4$I��L�pH�0�@��M�F�L�$�~��L�$�M�v L�8L�@�@H�$�]��H�4$I��L�pH�0�@�f�I�v�H�4$�4��H�4$�L�8M�~ H�p�@H�$���L�$�M�v(L�xL��@H�$���H�4$I��L�pH�0�@��M�v��ͩ�L�8I��L�p�@���M�v@�謩�L�8I��L�p�@��M�v@�苩�L�8I��L�p�@��M�v@��j��L�8I��L�p�@�w�M�v0��I��L�8I��L�p�@�V�1�I�~(M���X�fDI�F8�L�D$(H�t$ L��L�$���L�D$(L�$H�t$ I���@L�I��L�HH��I9v(w����I�v�H�4$��H�4$I�~ I��L�8H�p�@���E1�I�F0�L�D$ N��I��L�$聨�L�D$ L�$H���@L�I��L�HM9~ w��H�4$M�v8�O��H�4$I��L�pH�0�@�X�I�v(�H�4$�&��H�4$�L�8M�~@H�p�@H�$���L�$�M�vHL�xL��@H�$���H�4$I��L�pH�0�@���M�v�迧�L�8I��L�p�@���M�v�螧�L�8I��L�p�@��M�F�L�$�y��L�$�M�v L�8L�@�@H�$�X��H�4$I��L�pH�0�@�a�M�F�L�$�/��L�$�L�8M�~@L�@�@H�$���H�4$�L�xM�~XH�0�@H�$���H�$�M�vpL�xH��@H�$�̦�H�4$I��L�pH�0�@���M�F�L�$裦�L�$�L�8M�~@L�@�@H�$肦�H�4$�L�xM�~XH�0�@H�$�a��H�$�M�vxL�xH��@H�$�@��H�4$I��L�pH�0�@�I�M�F�L�$���L�$�L�8M�~@L�@�@H�$��H�4$�L�xM�~XH�0�@H�$�ե�H�$�M�vpL�xH��@H�$败�H�4$I��L�pH�0�@��I�v�H�4$若�H�4$�L�8M�~0H�p�@H�$�j��L�$�M�vHL�xL��@H�$�I��H�4$I��L�pH�0�@�R�M�v@��$��L�8I��L�p�@�1�M�v@����L�8I��L�p�@��M�v@����L�8I��L�p�@���M�v0���L�8I��L�p�@���1�I�~(M�����fDI�F8�L�D$(H�t$ L��L�$�x��L�D$(L�$H�t$ I���@L�I��L�HH��I9v(w��j�1�I�~(M���l�f.�I�F8�L�D$(H�t$ L��L�$���L�D$(L�$H�t$ I���@L�I��L�HH��I9v(w���1�I�~(M����f�I�F8�L�D$(H�t$ L��L�$谣�L�D$(L�$H�t$ I���@L�I��L�HH��I9v(w���1�I�~(M�����f�I�F8�L�D$(H�t$ L��L�$�P��L�D$(L�$H�t$ I���@L�I��L�HH��I9v(w��B�1�I�~(M���D�f�I�F8�L�D$(H�t$ L��L�$���L�D$(L�$H�t$ I���@L�I��L�HH��I9v(w����1�I�~M�����f�I�F(�L�D$(H�t$ L��L�$萢�L�D$(L�$H�t$ I���@L�I��L�HH��I9vw���M�F`�L�$�P��L�$�M�vhL�8L�@�@H�$�/��H�4$I��L�pH�0�@�8�M�v8��
��L�8I��L�p�@��M�v8����L�8I��L�p�@��M�v8��ȡ�L�8I��L�p�@���M�v0�觡�L�8I��L�p�@��M�F�L�$股�L�$�M�v L�8L�@�@H�$�a��H�4$I��L�pH�0�@�j�M�F�L�$�8��L�$�M�v L�8L�@�@H�$���H�4$I��L�pH�0�@� �I�v�H�4$���H�4$I�~ H��L�8H�p�@�ȸ1��I�F0�H�T$(H�t$ L��L�$訠�H�T$(L�$H�t$ I���@H�H��L�HH��I9v w���M�F@�L�$�h��L�$�M�vHL�8L�@�@H�$�G��H�4$I��L�pH�0�@�P�E1�I�~L��tBI�F(�L�D$ N��L�$���L�$L�D$ L�8H��I��L�HI���@M9Fw��H�4$M�~0�ϟ�H�4$I�~8H��L�xH�0�@�e�1�I�FH�H�T$(H�t$ L��L�$萟�H�T$(L�$H�t$ I���@H�H��L�HH��I9v8w���E1�I�~L��tDDI�F(�L�D$ N��L�$�5��L�$L�D$ L�8H��I��L�HI���@M9Fw�I�V0�H�t$ H�$��H�t$ H�$I�~8I���@H�0H�P�Ƕ1�fDI�FH�H�T$ L��L�$赞�L�$H�T$ L�8H��I��L�HH���@I9V8w��H�4$M����|��H�4$I��L�pH�0�@��M�v��W��L�8I��L�p�@�d�M�v0��6��L�8I��L�p�@�C�M�v@����L�8I��L�p�@�"�M�F�L�$���L�$�M�v L�8L�@�@H�$�ϝ�H�4$I��L�pH�0�@���E1�I�~L��tBI�F(�L�D$ N��L�$荝�L�$L�D$ L�8H��I��L�HI���@M9Fw�I�~0�)�E1�I�F@�H�t$ N��I��L�$�9��H�t$ L�$H���@H�0H��L�HM9~0w��H�$M�~H���H�$I�~PI��L�xH��@���1��I�F`�L�D$(H�t$ L��L�$��L�D$(L�$H�t$ I���@L�I��L�HH��I9vPw�I�~h�G�E1�f�I�Fx�L�D$ N��L�$�e��L�$L�D$ L�8H��I��L�HI���@M9Fhw��M���H�4$�,��H�4$�M���L�xH�0�@H�$���L�$I��L�pL��@��M�v����L�8I��L�p�@���M�v��›�L�8I��L�p�@���M�v�衛�L�8I��L�p�@��M�v�耛�L�8I��L�p�@��M�v��_��L�8I��L�p�@�l�M�v(��>��L�8I��L�p�@�K�1�I�~M���M�I�F(�L�D$(H�t$ L��L�$��L�D$(L�$H�t$ I���@L�I��L�HH��I9vw����M�F8�L�$踚�L�$�M�vPL�8L�@�@H�$藚�H�4$I��L�pH�0�@��1�I�~M�����I�F(�L�D$(H�t$ L��L�$�P��L�D$(L�$H�t$ I���@L�I��L�HH��I9vw��B�I�v(�H�4$���H�4$�L�8M�~@H�p�@H�$���L�$�M�vHL�xL��@H�$�Ι�H�4$I��L�pH�0�@����M�FH�L�$襙�L�$�M�vPL�8L�@�@H�$脙�H�4$I��L�pH�0�@���E1�I�~(L��t?I�F8�L�D$ N��L�$�E��L�$L�D$ L�8H��I��L�HI���@M9F(w��H�4$M�vP���H�4$I��L�pH�0�@���M�FH�L�$���L�$�M�vPL�8L�@�@H�$�Ř�H�4$I��L�pH�0�@����E1�I�~(L��t@�I�F8�L�D$ N��L�$腘�L�$L�D$ L�8H��I��L�HI���@M9F(w��M�~PH�4$�O��H�4$�L�xM�~XH�0�@H�$�.��H�$�M�v`L�xH��@H�$�
��H�4$I��L�pH�0�@���M�v(����L�8I��L�p�@���M�F�L�$�×�L�$�M�v L�8L�@�@H�$袗�H�4$I��L�pH�0�@���M�F�L�$�y��L�$�M�v0L�8L�@�@H�$�X��H�4$I��L�pH�0�@�a��M�v0��3��L�8I��L�p�@�@��M�v����L�8I��L�p�@���M�FP�L�$���L�$�M�vXL�8L�@�@H�$�̖�H�4$I��L�pH�0�@����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��ЪH�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���H�D?I�V(H�D$`�H��t/I�F0H��H+�0H�� )�H	�H��������?H9��ɪH�D?H��H�D$h�Tk�I�V@H�D$p�H��t/I�FHH��H+�0H�� )�H	�H��������?H9��p�H�D?H�t$�H�D$xH�L�@��a�H��H���ܼ�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FA�VH�DH�D$X���tI�EI�E uI�E ��H��I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9��R�H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9����H�D?H�t$�H�D$pH�Ɵ@�`�H��H��讻�L�<$�U��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��N�H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9����H�D?H�D$`I�~(E1��rd�H�D$hI�~(t%fDH��I����h�H�|$hH���׺�M9~(w�I�F@H����I�VHH��H+�0H�� ��)�H��������?H	�H9��Y�H�D?H��H�D$p�h�H��H�D$x�h�H��H��$��yh�H�t$�
H�h�@H��$��;_�H��H���@��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��p�H�D?H�D$PA�F�H��@H�t$H�DH�D$X�^�H��H��跹�L�<$�^��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��w�H�D?H�D$PA�FH��H�DH�D$X�Wg�H��H�D$`�Jg�I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���H�D?H�t$�H�D$pH�4�@��]�H��H���ܸ�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FE1�H�DH�D$XI�~��a�H�D$`I�EI�~H�D$ u7鏘fDH�D$ I�v(H�|$`B�4�I����H�4��&��M9~�]�I�E u�I�E ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��ǣH�D?H�D$PA�FH��H�DH�D$X�e�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��i�H�D?H��H�D$h�pe�H�t$�H�g�@H�D$p�5\�H��H���:��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H�Ě@H�D$`�[�H��H��菶�L�<$�6��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FH��H�DH�D$X�/d�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��3�H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��e�H�D?H�t$�H�D$pH��@�Z�H��H��艵�L�<$�0��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FE1�H�DH�D$XI�~�^�H�D$`I�~t(f�H��I���c�H�|$`H�����M9~w�I�~0E1��E^�H�D$hI�~0t(f�H��I����b�H�|$hH��觴�M9~0w�H��E1��b�H�D$pI�~P�]�H�D$xI�~Pt#@H��I���|b�H�|$xH���_��M9~Pw�I�~hE1��]�H��$�I�~ht(fDH��I���<b�H��$�H�����M9~hw�H���b�H��H��$��b�H�t$�H�m�@H��$���X�H��H���ճ�L�<$�|��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��K�H�D?H�D$PA�FH��H�DH�D$X�ua�H��H�D$`�ha�I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���H�D?H�t$�H�D$pH���@�W�H��H����L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��R�H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9����H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��y�H�D?H��H�D$p�`�H�t$�H�w�@H�D$x��V�H��H���ұ�L�<$�y��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9�� �H�D?H�D$PA�FH��H�DH�D$X�r_�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��œH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9����H�D?I�V@H�D$pI�FHH��H+�0)�H�� H	�H��������?H9��>�H�D?H�t$�H�D$xH���@�U�H��H��蔰�L�<$�;��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FH��H�DH�D$X�4^�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��$�H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���H�D?I�V@H�D$pI�FHH��H+�0)�H�� H	�H��������?H9����H�D?H�t$�H�D$xH�Ɠ@�QT�H��H���V��L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��֚H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��w�H�D?H��H�D$h�\�H�t$�H��@H�D$p�aS�H��H���f��L�<$�
��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�F�H���@H�t$H�DH�D$XA�FH�DH�D$`��R�H��H���ϭ�L�<$�v��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��m�H�D?H�D$PA�F�H�
�@H�t$H�DH�D$XA�FH�DH�D$`�2R�H��H���7��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��8�H�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9��0�H�D?H�t$�H�D$hH���@�9Q�H��H���>��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FI�~H�DH�D$X���I�~0H�D$`���H�t$�H��@H�D$h�P�H��H��虫�L�<$�@��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��חH�D?H�D$PA�FH��H�DH�D$X�9Y�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��y�H�D?H�t$�H�D$hH�C�@��O�H��H���˪�L�<$�r��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��E�H�D?H�D$PA�FH��H�DH�D$X�kX�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9����H�D?I�V@H�D$pI�FHH��H+�0)�H�� H	�H��������?H9��c�H�D?H�t$�H�D$xH�
�@�N�H��H��荩�L�<$�4��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��7�H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���H�D?H�t$�H�D$hH��@�M�H��H��誨�L�<$�Q��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9����H�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9��q�H�D?I�V8H�D$hI�F@H��H+�0)�H�� H	�H��������?H9��/�H�D?H�t$I�~HH�D$p�L���H�t$�H���@H�D$x�aL�H��H���f��L�<$�
��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�F�H���@H�t$H�DH�D$X��K�H��H���ݦ�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FH��H�DH�D$X�}T�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��G�H�D?H�t$�H�D$hH�ߊ@�
K�H��H�����L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FE1�H�DH�D$XI�~�O�H�D$`I�~t&�H��I���S�H�|$`H���o��M9~w�H��E1��nS�H�D$hI�~8�N�H�D$pI�~8t#@H��I���DS�H�|$pH���'��M9~8w�I�FPH����I�VXH��H+�0H�� ��)�H��������?H	�H9����H�D?I�V`H�D$x�H��t/I�FhH��H+�0H�� )�H	�H��������?H9��E�H�D?I�VpH��$�I�FxH��H+�0)�H�� H	�H��������?H9��̏H�D?H��H��$��fR�H�t$�H�
�@H��$��(I�H��H���-��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FE1�H�DH�D$XI�~�)M�H�D$`I�~t$DH��I���Q�H�|$`H��菣�M9~w�H��E1��Q�H�D$hI�~8��L�H�D$pI�~8t#@H��I���dQ�H�|$pH���G��M9~8w�I�FPH�����I�VXH��H+�0H�� ��)�H��������?H	�H9����H�D?I�V`H�D$x�H��t/I�FhH��H+�0H�� )�H	�H��������?H9����H�D?H���@H�t$�	H��$��G�H��H��蘢�L�<$�?��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9����H�D?H��H�D$h��O�I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9��\�H�D?H�t$�H�D$xH�8�@�kF�H��H���p��L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��ΆH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H���@H�D$`�E�H��H���Š�L�<$�l���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��8�H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9����H�D?H��H�D$p��M�H�t$�H�j�@H�D$x�D�H��H��蝟�L�<$�D���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9����H�D?H�D$PA�FH��H�DH�D$X�=M�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��)�H�D?H��H�D$h�L�I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9���H�D?H��H�D$x�L�H�t$�	H�R�@H��$��uC�H��H���z��L�<$�!���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH��H�DH�D$X�L�I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9��r�H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���H�D?H��H�D$p�K�I�VHH�D$xI�FPH��H+�0)�H�� H	�H��������?H9����H�D?H��H��$��KK�I�V`H��$�I�FhH��H+�0)�H�� H	�H��������?H9��N�H�D?H��H��$��K�H�t$�H���@H��$���A�H��H���ǜ�L�<$�n���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��~H�D?H�D$PA�FH��H�DH�D$X�gJ�I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9����H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��k}H�D?H��H�D$p��I�I�VHH�D$xI�FPH��H+�0)�H�� H	�H��������?H9��:}H�D?H��H��$��I�H��$�I�EI�E uI�E A�V`��H��I�VhH��$�I�FpH��H+�0)�H�� H	�H��������?H9��^H�D?H��H��$��(I�H�t$�
H�׀@H��$���?�H��H�����L�<$閻��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���{H�D?H�D$PA�FH��H�DH�D$X�H�I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9����H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��7�H�D?H��H�D$p�H�I�VHH�D$xI�FPH��H+�0)�H�� H	�H��������?H9���H�D?H��H��$��G�I�V`H��$�I�FhH��H+�0)�H�� H	�H��������?H9���|H�D?H��H��$��uG�H�t$�H�,@H��$��7>�H��H���<��L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��NzH�D?H�D$PA�FH��H�DH�D$X��F�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���yH�D?H�t$�H�D$hH�6�@�i=�H��H���n��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��byH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H��@H�D$`�<�H��H���×�L�<$�j���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���|H�D?H�D$PA�FH��H�DH�D$X�cE�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��_|H�D?H�t$�H�D$hH��~@��;�H��H����L�<$霷��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��5|H�D?H�D$PA�FE1�H�DH�D$XI�~��?�H�D$`I�EI�~H�D$ u8�u�H�D$ I�v(H�|$`B�4�I����H�4��>��M9~��uI�E u�I�E ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��IwH�D?H�D$PA�FA�VH�DH�D$X���tI�EI�E uI�E ��H��I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9���H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��]wH�D?H�t$�H�D$pH�Oz@�9�H��H����L�<$馵��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��:H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���zH�D?H��H�D$p�
B�H�D$xI�EI�E uI�E A�VHH�t$�	��H��H�{@H��$��8�H��H��貓�L�<$�Y���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��L~H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���}H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��-yH�D?H��H�D$p�@�H�D$xI�EI�E uI�E A�VHH�t$�	��H��H��x@H��$��`7�H��H���e��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���|H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��6xH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���wH�D?H��H�D$p�s?�H�t$�H��w@H�D$x�86�H��H���=��L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���{H�D?H�D$PA�FH��H�DH�D$X��>�H�t$�H�w@H�D$`�5�H��H��觐�L�<$�N���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��YrH�D?H�D$PA�F�H��v@H�t$H�DH�D$X�5�H��H�����L�<$�Ű��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���tH�D?H�D$PA�FE1�H�DH�D$XI�~�9�H�D$`I�~t%fDH��I���=�H�|$`H�����M9~w�H�*s@H�t$��S4�H��H���X��L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���yH�D?H�D$PA�FH��H�DH�D$X�<�H��H�D$`��<�I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9��_yH�D?H�t$�H�D$pH��s@�x3�H��H���}��L�<$�$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��wH�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���vH�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9���vH�D?I�V8H�D$hI�F@H��H+�0)�H�� H	�H��������?H9��DvH�D?H�t$I�~HH�D$p����H�t$�H�Nr@H�D$x�42�H��H���9��L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���wH�D?H�D$PA�FH��H�DH�D$X��:�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��%wH�D?H��H�D$h�:�H�t$�H�ks@H�D$p�Y1�H��H���^��L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���vH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��SvH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��vH�D?H��H�D$p�l9�H�t$�H�Kr@H�D$x�10�H��H���6��L�<$�ݫ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��luH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���tH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���tH�D?H��H�D$p�D8�H�D$xI�EI�E uI�E A�VHH�t$�	��H��H�	q@H��$���.�H��H�����L�<$鐪��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���tH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��$oH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���nH�D?H��H�D$p�6�H�t$�H��o@H�D$x�-�H��H����L�<$�h���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���sH�D?H�D$PA�FH��H�DH�D$X�a6�H�t$�H�8n@H�D$`�&-�H��H���+��L�<$�Ҩ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���rH�D?H�D$PA�FI�VH�DH�D$X�H��t/I�F H��H+�0H�� )�H	�H��������?H9���tH�D?H��H�D$`�5�I�V0H�D$h�H��t/I�F8H��H+�0H�� )�H	�H��������?H9���vH�D?H��H�D$p�:5�H��H�D$x�-5�I�VPH��$��H��t/I�FXH��H+�0H�� )�H	�H��������?H9���vH�D?H��l@H�t$�
H��$��+�H��H��识�L�<$�V���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��qqH�D?H�D$PA�FH��H�DH�D$X�O4�H��H�D$`�B4�I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9��qH�D?H�t$�H�D$pH��m@��*�H��H���ԅ�L�<$�{���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��nH�D?H�D$PA�FH��H�DH�D$X�t3�H��H�D$`�g3�I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���mH�D?H�t$�H�D$pH�	m@��)�H��H����L�<$頥��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��pH�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���oH�D?H��H�D$`�a2�I�V0H�D$h�H��t/I�F8H��H+�0H�� )�H	�H��������?H9���qH�D?H��H�D$p�2�H��H�D$x�2�I�VPH��$��H��t/I�FXH��H+�0H�� )�H	�H��������?H9��dqH�D?H�1g@H�t$�
H��$��(�H��H��臃�L�<$�.���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��eH�D?H�D$PA�FE1�H�DH�D$XI�~�,�H�D$`I�~t&�H��I���1�H�|$`H�����M9~w�I�V0I�F8H��H+�0)�H�� H	�H��������?H9��8hH�D?H�t$�H�D$hH�(f@�'�H��H��舂�L�<$�/���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��|mH�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��+mH�D?H�D$`I�~(E1��L+�H�D$hI�~(tH��I����/�H�|$hH��跁�M9~(w�I�V@I�FHH��H+�0)�H�� H	�H��������?H9���iH�D?H�t$�H�D$pH��f@�S&�H��H���X��L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��:jH�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���iH�D?H�D$`I�~(E1��*�H�D$hI�~(tH��I���.�H�|$hH��臀�M9~(w�I�V@I�FHH��H+�0)�H�� H	�H��������?H9���kH�D?H�t$�H�D$pH��e@�#%�H��H���(��L�<$�Ϡ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9�� gH�D?H�D$PA�FH��H�DH�D$X��-�I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9���lH�D?I�V0H�D$h�H��t/I�F8H��H+�0H�� )�H	�H��������?H9��xnH�D?H�D$pI�EI�E uI�E A�V@��H��H�D$xI�EI�E uI�E A�VD��H��H��$�I�EI�E uI�E A�VH��H��I�VPH��$�I�FXH��H+�0)�H�� H	�H��������?H9��:bH�D?H��H��$��,�H�t$�H��e@H��$��R#�H��H���W~�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��siH�D?H�D$PA�FH��E1�H�DH�D$X��+�H��H�D$`��+�H�D$hI�~(�9'�H�D$pI�~(t$DH��I���+�H�|$pH���}�M9~(w�H���+�H�D$xI�FHH����mI�VPH��H+�0H�� ��)�H��������?H	�H9���lH�D?I�VXH��$��H��t/I�F`H��H+�0H�� )�H	�H��������?H9���lH�D?H�zc@H�t$�
H��$���!�H��H����|�L�<$針��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���cH�D?H�D$PA�FH��H�DH�D$X�*�I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9��|kH�D?I�V0H�D$h�H��t/I�F8H��H+�0H�� )�H	�H��������?H9��NkH�D?H�D$pI�EI�E uI�E A�V@��H��H�D$xI�EI�E uI�E A�VD��H��I�VHH��$�I�FPH��H+�0)�H�� H	�H��������?H9���bH�D?H��H��$��m)�H�t$�H��b@H��$��/ �H��H���4{�L�<$�ۛ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���bH�D?H�D$PA�FH��H�DH�D$X��(�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��dbH�D?H�t$�H�D$hH�b@�a�H��H���fz�L�<$�
���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��JaH�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���`H�D?H��H�D$`��'�H�t$�H��]@H�D$h��H��H���y�L�<$�?���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��^H�D?H�D$PA�F�H�.]@H�t$H�DH�D$X�
�H��H���y�L�<$鶙��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��GaH�D?H�D$PA�FE1�H�DH�D$XI�~�"�H�D$`I�EI�~H�D$ u2��T�H�D$ I�v(H�|$`B�4�I����H�4��^x�M9~��TI�E u�I�E ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���_H�D?H�D$PA�FH��H�DH�D$X��%�A�V H�D$`���tI�EI�E uI�E ��H��I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���^H�D?I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9���^H�D?H�t$�H�D$xH�^@��H��H���w�L�<$�×��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��h_H�D?H�D$PA�FH��H�DH�D$X�$�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��
_H�D?H��H�D$h�w$�H�t$�H�6]@H�D$p�<�H��H���Av�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��W]H�D?H�D$PA�FH��H�DH�D$X��#�I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���\H�D?H��H�D$h�#�H�D$pI�EI�E uI�E A�V8H�t$���H��H�A\@H�D$x�?�H��H���Du�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��x\H�D?H�D$PA�FH��H�DH�D$X��"�A�V H�D$`���tI�EI�E uI�E ��H��I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���XH�D?I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9��[XH�D?H�t$�H�D$xH�[@��H��H���t�L�<$麔��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��[[H�D?H�D$PA�F�H��Y@H�t$H�DH�D$X��H��H���s�L�<$�1���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���UH�D?H�D$PA�FH��H�DH�D$X�*!�H�t$�H��X@H�D$`���H��H����r�L�<$雓��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��XH�D?H�D$PA�FH��H�DH�D$X� �H��H�D$`� �I�V(H�D$h�H��t/I�F0H��H+�0H�� )�H	�H��������?H9���aH�D?H�t$�H�D$pH��Y@�
�H��H���r�L�<$鶒��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��1WH�D?H�D$PA�F�H��V@H�t$H�DH�D$X��H��H���q�L�<$�-���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���ZH�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��5ZH�D?H�D$`I�~(E1��J�H�D$hI�~(t%fDH��I�����H�|$hH���p�M9~(w�I�V@I�FHH��H+�0)�H�� H	�H��������?H9��X]H�D?H�t$�H�D$pH��U@�K�H��H���Pp�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���VH�D?H�D$PA�FH��E1�H�DH�D$X���H�D$`I�~ �?�H�D$hI�~ t"H��I�����H�|$hH���o�M9~ w�H����I�V@H�D$pI�FHH��H+�0)�H�� H	�H��������?H9��)XH�D?I�VPH�D$xI�FXH��H+�0)�H�� H	�H��������?H9���WH�D?H�zV@H�t$�	H��$���H��H���o�L�<$駏��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���UH�D?H�D$PA�FH��H�DH�D$X��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��@UH�D?H�D$hI�EI�E uI�E A�V0��H��I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9���TH�D?H�t$�H�D$xH�PU@���H��H����m�L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��vTH�D?H�D$PA�FH��H�DH�D$X�x�I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9��\H�D?I�V0H�D$h�H��t/I�F8H��H+�0H�� )�H	�H��������?H9���[H�D?H�D$pI�EI�E uI�E A�V@��H��H�D$xI�EI�E uI�E A�VD��H��I�VHH��$�I�FPH��H+�0)�H�� H	�H��������?H9��APH�D?H��H��$��e�H�t$�H��S@H��$��'�H��H���,l�L�<$�ӌ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���MH�D?H�D$PA�F�H�R@H�t$H�DH�D$X��H��H���k�L�<$�J���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��CPH�D?H�D$PA�F�H�O@H�t$H�DH�D$X��H��H���k�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���QH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H��O@H�D$`A�FH�DH�D$h�\�H��H���aj�L�<$����H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��	QH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���RH�D?H��H�D$h��I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9��YRH�D?H�t$�H�D$xH�aP@�4�H��H���9i�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���OH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H��O@H�D$`�
�H��H���h�L�<$�5���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��JOH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��LH�D?H��H�D$h���I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9���KH�D?H�t$�H�D$xH��M@�a�H��H���fg�L�<$�
���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��vOH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H��L@H�D$`��H��H���f�L�<$�b���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���NH�D?H�D$PA�F�H��I@H�t$H�DH�D$X�-�H��H���2f�L�<$�ن��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��MH�D?H�D$PA�FI�VH�DH�D$X�H��t/I�F H��H+�0H�� )�H	�H��������?H9���TH�D?I�V(H�D$`�H��t/I�F0H��H+�0H�� )�H	�H��������?H9��?TH�D?I�V8H�D$h�H��t/I�F@H��H+�0H�� )�H	�H��������?H9��TH�D?H�t$I�~HH�D$p�~��H�t$�H��H@H�D$x��	�H��H����d�L�<$�w���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���IH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H��I@H�D$`� 	�H��H���%d�L�<$�̄��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���HH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H�/I@H�D$`�u�H��H���zc�L�<$�!���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���GH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���GH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���GH�D?H��H�D$p��H�t$�H�H@H�D$x�M�H��H���Rb�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��zFH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��FH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���EH�D?H��H�D$p�`�H�D$xI�EI�E uI�E A�VHH�t$�	��H��H��F@H��$���H��H���a�L�<$鬁��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��kCH�D?H�D$PA�FH��E1�H�DH�D$X��H�D$`I�~ ��	�H�D$hI�~ t'�H��I���t�H�|$hH���W`�M9~ w�H�2E@H�t$��+�H��H���0`�L�<$�׀��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���BH�D?H�D$PA�FH��H�DH�D$X��
�H��H�D$`��
�I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9��?BH�D?H�t$�H�D$pH�UD@�P�H��H���U_�L�<$���H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��BH�D?H�D$PA�F�H��C@H�t$H�DH�D$X���H��H����^�L�<$�s��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��0CH�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`A�FH��H+�0H�DH�� H�D$hI�F()�H	�H��������?H9��cCH�D?H��H�D$p��I�V8H�D$xI�F@H��H+�0)�H�� H	�H��������?H9��CH�D?H��B@H�t$�	H��$���H��H���]�L�<$�:~��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���?H�D?H�D$PA�FE1�H�DH�D$XI�~��H�D$`I�~t"H��I����H�|$`H���\�M9~w�H�2B@H�t$����H��H����\�L�<$�w}��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��RAH�D?H�D$PA�F�H��A@H�t$H�DH�D$X�B�H��H���G\�L�<$��|��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���>H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���>H�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9��|@H�D?H��H�D$h�w	�H�D$pI�EI�E uI�E A�V@��H��H�D$xI�EI�E uI�E A�VDH�t$�
��H��H�:@@H��$�A�FHH�DH��$����H��H����Z�L�<$�{��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���?H�D?H�D$PA�FI�~H�DH�D$X�Hu��H�t$�H��?@H�D$`�M��H��H���RZ�L�<$�z��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��=H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��>H�D?H��H�D$h��I�V8H�D$pI�F@H��H+�0)�H�� H	�H��������?H9��0>H�D?H�t$�H�D$xH��>@�%��H��H���*Y�L�<$��y��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��V>H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H��=@H�D$`A�FH�DH�D$h�l��H��H���qX�L�<$�y��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��	;H�D?H�D$PA�FI�VH�DH�D$X�H��t/I�F H��H+�0H�� )�H	�H��������?H9���EH�D?H�D$`I�~(E1��+�H�D$hI�~(t&�H��I����H�|$hH���W�M9~(w�I�F@H����GI�VHH��H+�0H�� ��)�H��������?H	�H9���FH�D?H�t$�H�D$pH��<@� ��H��H���%W�L�<$��w��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���9H�D?H�D$PA�FI�VH�DH�D$X�H��t/I�F H��H+�0H�� )�H	�H��������?H9��EH�D?H�D$`I�~(E1����H�D$hI�~(t"H��I���d�H�|$hH���GV�M9~(w�I�F@H���cFI�VHH��H+�0H�� ��)�H��������?H	�H9��EH�D?H�t$�H�D$pH�];@���H��H����U�L�<$�v��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���8H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���8H�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9���9H�D?H��H�D$h�
�H�D$pI�EI�E uI�E A�V@H�t$�	��H��H��9@H�D$xA�FDH�DH��$���H��H���T�L�<$�Ku��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���7H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��E7H�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9���9H�D?H��H�D$h���H�D$pI�EI�E uI�E A�V@H�t$�	��H��H��8@H�D$xA�FDH�DH��$��f��H��H���kS�L�<$�t��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��_9H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��9H�D?H��H�D$`���I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���8H�D?H�t$�H�D$pH�
9@�`��H��H���eR�L�<$�s��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��u5H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��85H�D?H��H�D$`���I�V0H�D$h�H��t/I�F8H��H+�0H�� )�H	�H��������?H9���?H�D?H�t$�H�D$pH�8@�P��H��H���UQ�L�<$�q��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��34H�D?H�D$PA�FI�VH�DH�D$X�H��t/I�F H��H+�0H�� )�H	�H��������?H9���>H�D?H��H�D$`��I�V0H�D$h�H��t/I�F8H��H+�0H�� )�H	�H��������?H9��)>H�D?I�V@H�D$pI�FHH��H+�0)�H�� H	�H��������?H9���3H�D?H�t$�H�D$xH��6@���H��H���P�L�<$�p��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���2H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��9H�D?H��H�D$hE1��F��H��H�D$p�9��H��H�D$x�,��H��$�I�~H�{��H��$�I�EI�~HH�D$ u:��m��fDH�D$ I�vXH��$�B�4�I����H�4���N�M9~H��m��I�E u�I�E ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��61H�D?H�D$PA�FH��E1�H�DH�D$X�O��H�D$`I�~ ��H�D$hI�~ t$DH��I���$��H�|$hH���N�M9~ w�I�F8H����=I�V@H��H+�0H�� ��)�H��������?H	�H9��?<H�D?I�VHH�D$p�H��t/I�FPH��H+�0H�� )�H	�H��������?H9��<H�D?H�t$�H�D$xH�5@�V��H��H���[M�L�<$�n��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���2H�D?H�D$PA�FA�VH�DH�D$X���tI�EI�E uI�E ��H��I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9���;H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��u5H�D?H�t$�H�D$pH��3@�(��H��H���-L�L�<$��l��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��w1H�D?H�D$PA�FE1�H�DH�D$XI�~�)��H�D$`I�EI�~H�D$ u8�,�H�D$ I�v(H�|$`B�4�I����H�4��vK�M9~��+I�E u�I�E ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���0H�D?H�D$PA�FH��H�DH�D$X���H��H�D$`��I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���0H�D?I�V8H�D$p�H��t/I�F@H��H+�0H�� )�H	�H��������?H9��h8H�D?H�t$�H�D$xH�80@�C��H��H���HJ�L�<$��j��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��H.H�D?H�D$PA�FH��E1�H�DH�D$X���H�D$`I�~ �7��H�D$hI�~ t"H��I����H�|$hH���I�M9~ w�H����H�D$pI�F@H����9I�VHH��H+�0H�� ��)�H��������?H	�H9��z7H�D?I�VPH�D$x�H��t/I�FXH��H+�0H�� )�H	�H��������?H9��.7H�D?H�
/@H�t$�	H��$�����H��H����H�L�<$�i��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���.H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��J.H�D?H�D$`I�~(E1����H�D$hI�~(t"H��I���,��H�|$hH���H�M9~(w�I�V@I�FHH��H+�0)�H�� H	�H��������?H9��4,H�D?H�t$�H�D$pH��-@���H��H���G�L�<$�Wh��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��\/H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H�B-@H�D$`���H��H���G�L�<$�g��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���.H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��V.H�D?H�D$`I�~(E1�����H�D$hI�~(t$DH��I���L��H�|$hH���/F�M9~(w�I�F@H����6I�VHH��H+�0H�� ��)�H��������?H	�H9��O3H�D?H��H�D$p����H�t$�H�E)@H�D$x���H��H���E�L�<$�_f��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��|)H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��+)H�D?I�V(H�D$`�H��t/I�F0H��H+�0H�� )�H	�H��������?H9���2H�D?I�V8H�D$h�H��t/I�F@H��H+�0H�� )�H	�H��������?H9���2H�D?H��H�D$p���H��H�D$x���H�t$�	H��'@H��$��Q��H��H���VD�L�<$�d��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��(H�D?H�D$PA�FH��H�DH�D$X���H��H�D$`����I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���'H�D?H�t$�H�D$pH��+@�v��H��H���{C�L�<$�"d��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���,H�D?H�D$PA�FH��H�DH�D$X���H��H�D$`���I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9��~,H�D?H�t$�H�D$pH��*@���H��H���B�L�<$�Gc��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��<&H�D?H�D$PA�F�AFH�DH�D$X�,�H�t$�H��(@H�D$`���H��H���B�L�<$�b��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��g*H�D?H�D$PA�FH��H�DH�D$X���H��H�D$`���I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9���)H�D?H�t$�H�D$pH��'@�'��H��H���,A�L�<$��a��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���$H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H�^'@H�D$`�|��H��H���@�L�<$�(a��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��M&H�D?H�D$PA�FH��H�DH�D$X�!��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���%H�D?H��H�D$h����H�t$�H��&@H�D$p���H��H���?�L�<$�M`��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��p"H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��/'H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���&H�D?H��H�D$p���H�t$�H��$@H�D$x�y��H��H���~>�L�<$�%_��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��|$H�D?H�D$PA�FI�VH�DH�D$X�H��t/I�F H��H+�0H�� )�H	�H��������?H9��,H�D?H��H�D$`����H��H�D$h����H��H�D$p����H��H�D$x���I�VHH��$��H��t/I�FPH��H+�0H�� )�H	�H��������?H9��|,H�D?H�%@H�t$�
H��$��2��H��H���7=�L�<$��]��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��y H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��( H�D?H��H�D$`���I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���H�D?H�t$�H�D$pH��"@�,��H��H���1<�L�<$��\��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��C"H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���!H�D?H��H�D$`���H�t$�H�"@H�D$h�^��H��H���c;�L�<$�
\��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��H�D?H�D$PA�F�H�y!@H�t$H�DH�D$X����H��H����:�L�<$�[��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��!H�D?H�D$PA�FE1�H�DH�D$XI�~����H�D$`I�EI�~H�D$ u5�j@H�D$ I�v(H�|$`B�4�I����H�4��&:�M9~�:I�E u�I�E ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH��H�DH�D$X���H��H�D$`���H��H�D$h���I�V0H�D$pI�F8H��H+�0)�H�� H	�H��������?H9��H�D?I�V@H�D$xI�FHH��H+�0)�H�� H	�H��������?H9��u!H�D?I�VPH��$��H��t/I�FXH��H+�0H�� )�H	�H��������?H9���&H�D?I�V`H��$�I�FhH��H+�0)�H�� H	�H��������?H9��5"H�D?H��@H�t$�H��$��m��H��H���r8�L�<$�Y��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��,!H�D?H�D$PA�F�H��@H�t$H�DH�D$X����H��H����7�L�<$�X��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H�{@H�D$`�9��H��H���>7�L�<$��W��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��WH�D?I�V(H�D$`�H��t/I�F0H��H+�0H�� )�H	�H��������?H9��G$H�D?H��H�D$h�d��I�V@H�D$p�H��t/I�FHH��H+�0H�� )�H	�H��������?H9���#H�D?H��H�D$x���H�t$�	H��@H��$�����H��H����5�L�<$�V��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FI�VH�DH�D$X�H��t/I�F H��H+�0H�� )�H	�H��������?H9���$H�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9��H�D?I�V8H�D$h�H��t/I�F@H��H+�0H�� )�H	�H��������?H9��)$H�D?H�t$I�~HH�D$p�jN��H�t$�H�I@H�D$x���H��H���4�L�<$�+U��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��|H�D?H�D$PA�FE1�H�DH�D$XI�~���H�D$`I�~t#@H��I�����H�|$`H����3�M9~w�I�F0H����#I�V8H��H+�0H�� ��)�H��������?H	�H9��y"H�D?I�V@H�D$h�H��t/I�FHH��H+�0H�� )�H	�H��������?H9���!H�D?H�t$�H�D$pH�3@�6��H��H���;3�L�<$��S��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��)H�D?H�D$PA�FE1�H�DH�D$XI�~�7��H�D$`I�~t"H��I�����H�|$`H���2�M9~w�H��@H�t$��s��H��H���x2�L�<$�S��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH��E1�H�DH�D$X���H�D$`I�~ �g��H�D$hI�~ t"H��I������H�|$hH����1�M9~ w�H��E1�����H�D$pI�~@� ��H�D$xI�~@t#@H��I�����H�|$xH���1�M9~@w�I�FXH���]!I�V`H��H+�0H�� ��)�H��������?H	�H9��� H�D?I�VhH��$��H��t/I�FpH��H+�0H�� )�H	�H��������?H9��� H�D?H��@H�t$�
H��$�����H��H����0�L�<$�|Q��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9���H�D?I�V(H�D$`I�F0H��H+�0)�H�� H	�H��������?H9��lH�D?I�V8H�D$hI�F@H��H+�0)�H�� H	�H��������?H9��*H�D?H�t$I�~HH�D$p�wI��H�t$�H�@H�D$x���H��H���/�L�<$�8P��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��~H�D?I�V(H�D$`�H��t/I�F0H��H+�0H�� )�H	�H��������?H9��H�D?I�V8H�D$h�H��t/I�F@H��H+�0H�� )�H	�H��������?H9���H�D?H��H�D$p�u��H��H�D$x�h��H�t$�	H��@H��$��*��H��H���/.�L�<$��N��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH��H�DH�D$X����I�V H�D$`�H��t/I�F(H��H+�0H�� )�H	�H��������?H9���H�D?H�D$hI�EI�E uI�E A�V0��H��I�V8H�D$p�H��t/I�F@H��H+�0H�� )�H	�H��������?H9���H�D?I�VHH�D$x�H��t/I�FPH��H+�0H�� )�H	�H��������?H9��IH�D?H��H��$�����I�V`H��$��H��t/I�FhH��H+�0H�� )�H	�H��������?H9��\H�D?H��H��$����H�t$�H��@H��$��D��H��H���I,�L�<$��L��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��5H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�VH�t$���H��H�c@H�D$`���H��H���+�L�<$�EL��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH��H�DH�D$X�>��H��H�D$`�1��I�V(H�D$hI�F0H��H+�0)�H�� H	�H��������?H9��GH�D?H�t$�H�D$pH�3@���H��H����*�L�<$�jK��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9���H�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9���H�D?H��H�D$p����H�t$�H��@H�D$x���H��H���)�L�<$�BJ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��kH�D?H�D$PA�FH��H�DH�D$X�;��H�t$�H�
@H�D$`���H��H���)�L�<$�I��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�F�H��@H�t$H�DH�D$X�w��H��H���|(�L�<$�#I��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��B
H�D?H�D$PA�FH�DH�D$XI�EI�E uI�E A�V��H��I�V H�D$`I�F(H��H+�0)�H�� H	�H��������?H9��mH�D?I�V0H�D$hI�F8H��H+�0)�H�� H	�H��������?H9��+H�D?H��H�D$p���H�t$�H��@H�D$x�O��H��H���T'�L�<$�G��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��|H�D?H�D$PA�FI�VH�DH�D$XI�F H��H+�0)�H�� H	�H��������?H9��+H�D?H��H�D$`���H�t$�H�[
@H�D$h���H��H���&�L�<$�-G��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��H�D?H�D$PA�FH��E1�H�DH�D$X�#��H�D$`I�~ �u��H�D$hI�~ t(f�H��I������H�|$hH����%�M9~ w�H������I�V@H�D$pI�FHH��H+�0)�H�� H	�H��������?H9���H�D?I�VPH�D$xI�FXH��H+�0)�H�� H	�H��������?H9���H�D?H��@H�t$�	H��$��+��H��H���0%�L�<$��E��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9���H�D?H�D$PA�FE1�H�DH�D$XI�~�,��H�D$`I�EI�~H�D$ u3��f�H�D$ I�v(H�|$`B�4�I����H�4��~$�M9~��I�E u�I�E ��H�D$I�VH�D$@A�FH��H+�0H�DH�� H�D$HI�F)�H	�H��������?H9��oH�D?H�D$PA�FI�~H�t$H�DH�D$X�=��H�t$�H��@H�D$`����H��H����#�L�<$�xD��H��>H�5WgH�81��@�I�V0I�F8H��H+�0)�H�� H	�H��������?H9��-H�D?H��H�D$h���H��H�D$p�s��I�VPH�D$xI�FXH��H+�0)�H�� H	�H��������?H9���
H�D?H��$�I�EI�E uI�E A�V`H�t$�
��H��H��@H��$�����H��H����"�L�<$�C��I�V0I�F8H��H+�0)�H�� H	�H��������?H9��W	H�D?I�V@H�D$hI�FHH��H+�0)�H�� H	�H��������?H9��	H�D?H��H�D$p�l��H��H�D$x�_��I�V`H��$�I�FhH��H+�0)�H�� H	�H��������?H9���H�D?H��@H�t$�
H��$�����H��H����!�L�<$�B��I�V0I�F8H��H+�0)�H�� H	�H��������?H9��?H�D?H��H�D$h���I�VHH�D$p�H��t/I�FPH��H+�0H�� )�H	�H��������?H9���H�D?H��H�D$x�c��H��H��$��S��I�VhH��$�I�FpH��H+�0)�H�� H	�H��������?H9���
H�D?H��$�I�EI�E uI�E A�VxH�t$���H��H�@H��$����H��H��� �L�<$�aA��I�V0I�F8H��H+�0)�H�� H	�H��������?H9���
H�D?I�V@H�D$hI�FHH��H+�0)�H�� H	�H��������?H9��x
H�D?I�VPH�D$pI�FXH��H+�0)�H�� H	�H��������?H9��6
H�D?H��H�D$x���H��H��$����H�t$�
H�@H��$�����H��H�����L�<$�o@��H������H�t$�H��@H�D$h���H��H����L�<$�8@��H�����H��H�D$h���I�V@H�D$pI�FHH��H+�0)�H�� H	�H��������?H9���H�D?I�VPH�D$xI�FXH��H+�0)�H�� H	�H��������?H9���H�D?H��@H�t$�	H��$�����H��H�����L�<$�?�������������t���x��陆���n�������d�������Z��魅���P��鲈���F���e���<���d���2��鐂���(��������������)����
���B��������������vx��������������������:z�������-��������'������颍�����������������������^����鞈���~������t�����j������`������V�����L���M��B�����8���}��.���,��$���)�������z�����������鐼�����鼽�������Q����������������H���������������Y���������������������������������$����������������z���e���p���i���f������\������R�������H���Z���>�������4�������*������ �������������������S������������h�����麯�������=��������������`������������������������頧������^������靀������/����v������l������b�������X���6����N�����D��遹���:���O����0����s���&���s������Hs������r������˼�������������%������驾���������������|�������鸯�������3��������������T��������������Y�������F�����������|��霃���r���>����h������^��阼���T������J���ʨ���@������6���×���,���ƃ���"���������L������-y������w������x�������Px�������q����������������������א������������`������������������������<����������x������n������d���	���Z������P���Ά���F���w����<�������2���Ň���(����������E����������
���������d������5��������{���������������黪������酫������������/������鱰������������������������鱞���~���-����t���ۘ���j���8����`�������V��餢���L���E����B�������8��郣���.���p����$��頤������*�������������s�����1������	�����闝�������9���������������T������������s�������������U�����~�������}���������z�������p�����f������\��酰���R���&����H���d����>������4��鴞���*����� ��铠�������������������������ҧ������鷉�������u��������3��������������颭������S��������������2���������������������������v���ƥ���l���u����b�����X���I��N������D�����:���m����0�����&���������������������}��������������i���������������*5�������Z�������Z��������l�������n������o������Vo������v�������u������Pu���|���w���r���x���h���Xx���^���	x���T���N����J���{����@�������6��鏊���,���ֈ���"���x������������騉�����霆������1����������������8��������"�������鯁�������������N������������銎�������������<�������Z�������В���x�������n���K����d������Z���/p���P��鈖���F���3����<���c���2���{c���(���9c�������b������a���
���^������a������`�������%e�������e�������f�������f�������\������4\������h������k������[d������d�������c���~���yc���t����]���j���j]���`���B��V�����L���a���B���@a���8���h���.���$h���$����f������rf������i������Vi������i�������h�������OW������飢�������|U�������+U������sV�������Y������Y������[�����������������A��z���V���p���%����f���+����\������R���U���H���2U���>�����4����1���*���bo��� ���1������t�����闎������.���������������y��������
��������������0�������������!������T��������������������������J�����������v���P���l������b��� ��X���z��N�����D������:�������0������&���Lu������l������jl�������{������v�������nn���������������������-�������鼫�����������������^������������0������1������v����|��郑���r�������h�������^��魔���T�������J���N���@���F����6���#����,���$���"��������J��������������g�������U�������0����������������������@����k��������B���鍒����>U����Ĺ����r���I���e.��L���K��I���K��H���K��I���E.����l������H���xI��I���!.��H���?��H���8=��H���x8��H����7��I���-��H���3���<��ff.����UH�5�RSH��H�-@H��
@H�UH�;�%��H�UH�;H�5�RH��?���H�UH�;H�5�RH��?���H�UH�;H�5�RH���?�׿�H�UH�;H�5�UH���?轿�H�UH�;H�5�RH�x�?裿�H�UH�;H�5yRH�V�?艿�H�UH�;H�5pRH�4�?�o��H�UH�;H�5`RH��?�U��H�UH�;H�5URH��?�;��H�UH�;H�5QRH��?�!��H�UH�;H�5ARH���?���H�UH�;H�59RH���?���H�UH�;H�56RH�h�?�Ӿ�H�UH�;H�5&RH�F�?蹾�H�UH�;H�5RH�$�?蟾�H�UH�;H�5RH��?腾�H�UH�;H�5	RH���?�k��H�UH�;H�5RH���?�Q��H�UH�;H�5�QH���?�7��H�UH�;H�5�QH�z�?���H�UH�;H�5�QH�X�?���H�UH�;H�5�QH�6�?���H�UH�;H�5�QH��?�Ͻ�H�UH�;H�5�QH���?赽�H�UH�;H�5�XH���?蛽�H�UH�;H�5�QH���?聽�H�UH�;H�5^H���?�g��H�UH�;H�5~QH�j�?�M��H�UH�;H�5}QH�H�?�3��H�UH�;H�5yQH�&�?���H�UH�;H�5wQH��?��H�UH�;H�5tQH���?���H�UH�;H�5oQH���?�˼�H�UH�;H�5oQH���?豼�H�UH�;H�5iQH�|�?藼�H�UH�;H�5hQH�Z�?�}��H�UH�;H�5_QH�8�?�c��H�UH�;H�5cQH��?�I��H�UH�;H�5aQH���?�/��H�UH�;H�5^QH���?���H�UH�;H�5ZQH���?��H�UH�;H�5QQH���?���H�UH�;H�5JQH�l�?�ǻ�H�UH�;H�5BQH�J�?譻�H�UH�;H�50QH�(�?蓻�H�UH�;H�5"QH��?�y��H�UH�;H�5QH���?�_��H�UH�;H�5QH���?�E��H�UH�;H�5	QH���?�+��H�UH�;H�5�PH�~�?���H�UH�;H�5�PH�\�?��H�UH�;H�5�PH�:�?�ݺ�H�UH�;H�5�PH��?�ú�H�UH�;H�5�PH���?詺�H�UH�;H�5�PH���?菺�H�UH�;H�5�PH���?�u��H�UH�;H�5�PH���?�[��H�UH�;H�5�PH�n�?�A��H�UH�;H�5�ZH�L�?�'��H�UH�;H�5�PH�*�?�
��H�UH�;H�5�PH��?���H�UH�;H�5�PH���?�ٹ�H�UH�;H�5�PH���?迹�H�UH�;H�5CRH���?襹�H�UH�;H�5nPH���?苹�H�UH�;H�5dPH�^�?�q��H�UH�;H�5QPH�<�?�W��H�UH�;H�5EPH��?�=��H�UH�;H�58PH���?�#��H�UH�;H�5/PH���?�	��H�UH�;H�5PH���?���H�UH�;H�5PH���?�ո�H�UH�;H�5PH�p�?軸�H�UH�;H�5PH�N�?衸�H�UH�;H�5�OH�,�?臸�H�UH�;H�5IYH�
�?�m��H�UH�;H�5�OH���?�S��H�UH�;H�5�OH���?�9��H�UH�;H�5�OH���?���H�UH�;H�5�OH���?���H�UH�;H�5�OH�`�?���H�UH�;H�5�OH�>�?�ѷ�H�UH�;H�5�XH��?跷�H�UH�;H�5�OH���?蝷�H�UH�;H�5�OH���?胷�H�UH�;H�5�OH���?�i��H�UH�;H�5�OH���?�O��H�UH�;H�5�OH�r�?�5��H�UH�;H�5�OH�P�?���H�UH�;H�5�OH�.�?���H�UH�;H�5�OH��?���H�UH�;H�5�OH���?�Ͷ�H�UH�;H�5�WH���?賶�H�UH�;H�5~OH���?虶�H�UH�;H�5�NH���?���H�UH�;H�5cOH�b�?�e��H�UH�;H�5aOH�@�?�K��H�UH�;H�5GNH��?�1��H�UH�;H�5DOH���?���H�UH�;H�5=OH���?��H�UH�;H�55OH���?���H�UH�;H�5*OH���?�ɵ�H�UH�;H�5OH�t�?诵�H�UH�;H�5
OH�R�?蕵�H�UH�;H�5OH�0�?�{��H�UH�;H�5�NH��?�a��H�UH�;H�5�NH���?�G��H�UH�;H�5�NH���?�-��H�UH�;H�5�NH���?���H�UH�;H�5�NH���?��H�UH�;H�5�NH�d�?�ߴ�H�UH�;H�5�NH�B�?�Ŵ�H�UH�;H�5�NH� �?諴�H�UH�;H�5YNH���?葴�H�UH�;H�5�NH���?�w��H�UH�;H�5�NH���?�]��H�UH�;H�5�NH���?�C��H�UH�;H�5�NH�v�?�)��H�UH�;H�5�NH�T�?���H�UH�;H�5{NH�2�?��H�UH�;H�5mNH��?�۳�H�UH�;H�5]NH���?��H�UH�;H�5PNH���?觳�H�UH�;H�5?NH���?荳�H�UH�;H�5;NH���?�s��H�UH�;H�5>NH�f�?�Y��H�UH�;H�5:NH�D�?�?��H�UH�;H�53NH�"�?�%��H�UH�;H�5�KH��?���H�UH�;H�5
NH���?���H�UH�;H�5�MH���?�ײ�H�UH�;H�5�MH���?轲�H�UH�;H�5�MH�x�?裲�H�UH�;H�5�MH�V�?色�H�UH�;H�5�MH�4�?�o��H�UH�;H�5�MH��?�U��H�UH�;H�5�MH���?�;��H�UH�;H�51EH���?�!��H�UH�;H�5�GH���?���H�UH�;H�5PJH���?���H�UH�;H�5/HH�h�?�ӱ�H�UH�;H�5JH�F�?蹱�H�UH�;H�50MH�$�?蟱�H�UH�;H�5MH��?腱�H�UH�;H�5MH���?�k��H�UH�;H�5MH���?�Q��H�UH�;H�5�LH���?�7��H�UH�;H�5�LH�z�?���H�UH�;H�5eIH�X�?���H�UH�;H�5�LH�6�?���H�"�?H��[]�f.����AWAVAUATUSH���H�t$PH�L$XdH�%(H��$�1�H95�?��H9��?I���H9��?�h�D$H�|$X�"��H�D$XH�XH� �|
H��$�HX�D$h���L��$�H�$L9��^
H�D$tH�-jSH�D$ H�D$pL�-qSH�D$H�D$lH�D$H��$�H�D$8H�D$hH�D$HH��$�H�D$@H�D$|H�D$0H�D$xH�D$(L��M��I�ǐ�t$HH��t$H�t$@�t$@H�t$XL�L$@L�D$8H�L$0�|$,��H��$�H�� ���52���HcD�H�>��fD�|$l��H�D$PL)�L��L��$�H��$��M���|$lH��$��W
�D$lIcD�L�>��H���?L�%bQH��u%D�L������H���?H��t��H���x���T$pH��$�����
����
���u:H�*�?L�%	QH��ufD�	L���k��H��?H��t�H������|$tH��$����D$tH�
RHc�H�>���H���?L�%�PH��u%D�
L�����H�|�?H��t��H������|$x	H��$���D$xH��QHc�H�>��H�A�?L�%_�H��u�D�
L�����H��?H��t��DH��?L�%�H��u�D�
L���c��H���?H��t��b���f�H���?H���P���L�%�Of��L���#��H���?H��t��"���f�H���?L�%�OH���	���f��	L������H�T�?H��t����f�H���?L�%�OH��u%D�L�����H���?H��t��H���P���T$|H��$����{	���3	�������u9H�a�?L�%�OH��uD�	L���;��H�<�?H��t�H������H��$�H��$�H��������?H9���H�D?H���?L��$��	H��$�L��軟�H�<$H����L��$�I9�����H�$�T$hH��$����5	���	�����H��?L��H��$��R��H��$�dH3%(��	H���[]A\A]A^A_�f�H�q�?L�%.NH�������f��L�����H�D�?H��t��j���f�H�9�?L�%�MH���Q���f��L������H��?H��t��*���f�H��?L�%�MH������f��L�����H���?H��t����f�H���?L�%WMH������f��L���S��H���?H��t����f�H���?L�%MH�������f��L�����H�d�?H��t��j���f�H�Y�?L�%�LH���Q���f��	L������H�,�?H��t��*���f�H�!�?L�%uLH������f��L�����H���?H��t����f�H���?H������L�%!Lf��
L���S��H���?H��t����f�H�a�?L�%=LH�������f��L�����H�4�?H��t��j���f�H���?L�%eKH���)���f��L������H���?H��t�����f�H���?L�%KH�����f��L�����H�\�?H��t�����f�H�Q�?L�%�JH�������f��L���S��H�$�?H��t����f�H��?L�%{JH���i���f��
L�����H���?H��t��B���f�H���?L�%/JH���)���f��L������H���?H��t�����f�H���?L�%�IH�����f��	L�����H�|�?H��t�����f�H�q�?L�%�IH�������f��L���S��H�D�?H��t����f�H�9�?L�%FIH���i���f��L�����H��?H��t��B���f�H��?L�%�HH���)���f��
L������H���?H��t�����f�H���?L�%�HH�����f��
L�����H���?H��t�����f�H���?L�%YHH�������f��L���S��H�d�?H��t����f�H�Y�?L�%HH���i���f��L�����H�,�?H��t��B���f�H�!�?L�%�GH���)���f��L������H���?H��t�����f�H���?L�%�,H�����f��L�����H���?H��t�����f�H���?L�%.GH�������f��L���S��H���?H��t����f�H�y�?L�%�FH���i���f��L�����H�L�?H��t��B���f�H�A�?L�%�+H���)���f��L������H��?H��t�����f�H�	�?H�����H�=O
���H���?H��t�����fDH���?H���������H�=F�_��H���?H��t����fDH���?L�%�.
H���q�����L���#��H���?H��t��R���f�軾�����fDH���?H�������L�%fFf��L������H�|�?H��t��c���f�H�a�?L�%1FH���J���f��L�����H�4�?H��t��#���f�H���?L�%�FH���:���f��L���S��H�\�?H��t�����f�H�Y�?H������L�%<Ff��L�����H�,�?H��t�����f�H��?L�%FH�������f��
L������H���?H��t����f�H�X�{��L��$�����˿����Բ�H�����������k����f�������D$��H�%�>H�5�CH�81�����H�5�>H�5�CH�81����H��>H�5�yH�81����H��>H�5�CH�81��|��H�Ū>H�5MCH�81��d��H���>H�5%CH�81��L�������-����������f���SH�=�D蟺�H�5�DH�����H���>H�5�DH��H��?H��p��H�H�=��?H�5�DH���?�S��H�=��?�H�p�H�5�H���?譴�H���?H��u*H�kDf.��H�����H�\�?H��t�H�����H�`�?H�9�?H��u%H��yD�H����H��?H��t�H���_��H��?H���?H��u%H��yD�H���s��H���?H��t�H�����[H���?�fDPXH�
W���H�5KDH�=sH���۠�ff.�PXH�
���H�5DH�=_H��諠�ff.�����>�
H�ɖ��Hc�H�>��H��[�H�i[�H�F[�H�&[�H�[�H��Z�H��Z�H��Z�H�Z�H�[Z�H��M�H�6Z�H�Z�H��Y�H��Y�H��Y�H��Y�H��Y�H�fY�H�IY�H�1Y�H�
Y�H��X�H��X�H��X�H��X�H�kX�H��b�H�AX�H�,X�H�X�H��W�H��W�H��W�H��W�H��W�H�qW�H��b�H�FW�H�$W�H�W�H��V�H��V�H��V�H��V�H�rV�H�[V�H�BV�H�"V�H�V�H��U�H��U�H��U�H��U�H�{U�H�`U�H�?U�H�"U�H�
U�H��T�H��T�H��T�H��T�H�}T�H�fT�H�NT�H�:T�H�T�H�T�H�^a�H��S�H��S�H��S�H��S�H�hS�H�BS�H�a�H�S�H��R�H��R�H��R�H��R�H��R�H�lR�H�LR�H�-R�H�R�H��Q�H��Q�H��Q�H��Q�H�dQ�H�f`�H�6Q�H�Q�H�.`�H��P�H��P�H��_�H��_�H��_�H��P�H�aP�H�>P�H�P�H��O�H��O�H��O�H��O�H��O�H�iO�H�LO�H�*O�H�O�H�_�H��N�H��N�H��N�H��N�H�iN�H�KN�H��^�H�N�H�N�H�v^�H��M�H��M�H��M�H��M�H�lM�H�GM�H�%M�H�M�H��L�H��L�H��L�H��L�H��L�H��L�H�fL�H�IL�H�/L�H�L�H��K�H��K�H��K�H��K�H��K�H�uK�H�UK�H�?K�H�K�H��J�H��J�H��J�H��J�H�{J�H�WJ�H�;J�H�#J�H�.]�H�]�H��I�H��I�H��I�H��I�H�vI�H�UI�H�1I�H�I�H��H�H��H�H��H�H��H�H�~\�H�kH�H�QH�H�6H�H�H�H�.\�H��G�H��G�H��G�H��G�H�lG�H�QG�H�>G�H�,G�H�G�H�@T�H��F�H��F�H��F�H��F�H��F�H��F�H�rF�H�MF�H�(F�H�f[�H��E�H��E�H��E�H��E�H�[�H�dE�H�GE�H�)E�H�E�H��Z�H��D�H��D�H��D�H��D�H�xD�H�TD�H�8D�H�D�H��C�H��C�H�FZ�H��C�H�Z�H��Y�H��Y�H��Y�H�VY�H�WC�H�1C�H�Y�H�C�H��B�H��B�H��B�H��B�H��X�H�UB�H��X�H�.B�H�B�H��A�H��A�H��A�H��A�H�oA�H�VA�H�?A�H�+A�H�A�H��@�H��@�H��@�H��@�H��@�H��@�H��
�H�c@�H�O@�H��W�H�#@�H��?�H��?�H��?�H��?�H��?�H�_?�H�;?�H�?�H�?�H��>�H��>�H��>�H��>�H��@�H��>�H�^>�H�;>�H�>�H��=�H��=�H��=�H��=�H��=�H�f=�H�H=�H�.=�H�=�H�=�H��<�H��<�H��<�H��<�H�~<�H�h<�H�F<�H�*<�H�<�H�fV�H�6V�H��;�H�V�H��U�H��;�H��;�H�c;�H�B;�H�$;�H�;�H��:�H��:�H��:�H�~:�H�c:�H�NU�H�>:�H� :�H�U�H�:�H��Q�PH�
����H�5�9H�=�Q�e��D��AUI��ATI��0UH���S��H���x��H��tc��>wm��H��H�5o>H��H�H�H��tM�Nf�H��H��@@ L�hL�`�XH�P �H)�ptH���[]A\A]�H��1�[]A\A]���H�
���H�59H�=�S蟕�ff.�@��AWI��AVAUATU��SH��H�|$H�T$L�D$`L�L$h��t=)D$p)�$�)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$81�H��$0�D$  H�D$(H�D$@�D$$0H�D$0��>�\��H�%>H��H�L�#M���;L�l$ 1�1�M��M��H�������b�������0��D$����I��H�����T$�rHc�H��H�t$脙�H�t$H��I����L��M��M��H�����H��$0�L�\$H�D$(H�D$@�D$  �D$$0H�D$0�͡��Cf�L��H�L$L�\$AF H�|$AFAA�F)M�~I�NA�nM�^ A�F(�Wr��L��蘧��1�H�L$8dH3%(uH��[]A\A]A^A_�������H�
ێ��H�5�6H�=�Q�c����USH��H�_H��u�5H��H�����H��t"�{(H�+t�H�{ ���H��H����H��u�H��[]�f.�D1��@B9|sIH�HH9�s8H��DH��H��H)�H��H�I��A��I��H��L��9<�v�H9�w�1��D��f������H��~�H>����H����<�tE<�uR�G<�vY<�wU�G���<?wJH���W��������	��W��?	�Ð�O��`��vd��vj��<w�G��x�H�1��fDH���D�O�����?vdH���H��~�<��[����O��`���G���<?vQH���W����
%��	��W��?	���H���W��%���?	�À�u��G��P<w��G���<?w�H��G�W����
%��	��W��?	��W����	��ff.���H��dH�%(H�D$1�H���@���H�$H�L$dH3%(uH������f����H������f.����H�¦���������H�������������H�"�����f.����H�����������H������������H�"�����f.����H�����������H������������H�£����f.����H������������H�������������H�b�����f.����H�B����������H�"�����������H������f.����H�����������H� ����������H�������f.����H������������H�b�����������H�B�����f.����H�"����������H������������H������f.����H�œ���������H�������������H�������f.����H�b����������H�B�����������H�"�����f.����H�����������H������������H�˜����f.����H������������H�������������H�b�����f.����H�B����������H�"�����������H������f.����H�����������H�•����������H�������f.����H������������H�b�����������H�B�����f.����H�"����������H������������H������f.����H�‘���������H�������������H�������f.����H�b����������H�B�����������H�"�����f.����H�����������H������������H�����f.����H������������H�������������H�b�����f.����H�B����������H�"�����������H������f.����H�����������H�Š���������H�H��H��?����1���xH�������@���1���xH�l������f�����fD���1���xH�<������Ð������y=1�H��~5�J��w0�����H��tH��~���uP�G��<vX1��f�H��t��Jp��	w
��w��Jf��w��O�� ��wр��v������u��G�P1���	w�1���v���H�H�Ѓ����ff.�@�������v1�H��~w�BP�J_<G�������B<vaD�BVA��T���w�F�<`w�@����A��wI��_�@��]��1���w�G�P���`w<ur1����w�F�<�w�@��ub����w��G�P_���]w����G�p_�@��]v��B<�J���멐�BX<v�����f.������ff.�@��H��dH�%(H�D$1����x)H������H�L$dH3%(uNH���fDH����=�wHc�H�o�1��:t�H�$뾐��H�5�����}��u�1��谸���H��dH�%(H�D$1����x)H������H�L$dH3%(uLH���@H����=�wHc�H�ߝ1��:t�H�$���H�5$�������u�1��� ����H��dH�%(H�D$1����x)H��������H�L$dH3%(u5H���H�����=�w	H���D�H�5D����m��覷�fD������yQ1�H��~I�B_<]v1���t,1�H��~5���u0��v*�G��_<^H����f��G�H_���]w��ff.������H��t11�H��t	���fD�<�t9<�tE<�u��G��_< �����H�֙��������f��G��?<���f��G��_<���f�����B_<>v"��y1�H��~�J��v�� ��v�D��f.��G�P����w<u1��D��f������H��t����x�H�"����������g���H��t����x�H������f.�������y$1�H��~��_��]w�W�J���>v��_��]v���f��������v11�H��~)���t$�W��у�߃�A��v��1���~��H��ff.�f�������y"1�H��~��_��]w�G��_<^����H��ff.�f�������y'1�H��~�J_��]v(H��~���u�O�Q_��v)��1��D�G��_<^����H��D�O�Q_��]w��G��_<^����H���������yZ1�H��~R����}wJ�W�B�<�w
���u;H��~-��0��	w%�G�P1���}w�G��0<
����H���1��D�ff.�@��H��xrH��A�LN�H��tL�H�5������t?1��%fDD�D����F�D����tH��H�HI9�u�1��DH��ø�PH�
]���H�5�{H�=�{�E��DUSH��H����H��A�LN�H��t^E1�1���L�=��'A��?��D	ȃ�I�����A�42��t9M9�t$B�,��A��A�
��uɉ���!���f�H�H��1�[]�L�H��[]�H�
���H�5*{H�=4{�����H��dH�%(H�D$1����x)H�*����H�L$dH3%(uNH���fDH����=�wHc�H��1��:t�H�$뾐��H�5�������u�1���0����H��dH�%(H�D$1����x)H�������H�L$dH3%(uLH���@H���`���=�wHc�H�_�1��:t�H�$���H�5�����m���u�1��蠱���H��dH�%(H�D$1����x)H�
������H�L$dH3%(u5H���H������=�w	H���D�H�5ė�������&��fD���H������������H�����������H�“����f.����H�������f.����H�������f.����H�b�����f.����H�B�����f.����H�"�����f.����H������f.����H������f.����H�’����f.����H�������f.����H�������f.����H�b�����f.����H�B�����f.����H�"�����f.����H������f.����H������f.����H�‘����f.����H�������f.����H�������f.����H�b�����f.����H������f.����H�"�����f.����H������f.����H������f.����H�����f.����H�������f.����H�������f.����H�b�����f.����H�B�����f.����H�"�����f.����H������f.����H������f.����H�ˆ����f.����H�������f.����H�������f.����H�b�����f.����H�B�����������H�"����������H������������H�����������H�‡����������H�������������H������������H�b�����������H�B����������H�"����������H������������H������������H�„���������H������������H�������������H�b����������H�B�����������H�"�����������H�����������H�����������H�Œ����������H�������������H������������H�b�����������H�B����������H�"����������H������������H������������H�‹���������H������������H�������������H�b����������H�B�����������H�"�����������H�����������H�����������H�Š����������H�������������H������������H�b�����������H�B����������H�"����������H������������H������������H�‰���������H������������H�������������H�b����������H�B�����������H�"�����������H�����������H�����������H�ˆ����������H�������������H������������H�b�����������H�B����������H�"����������H������������H������������H�‡���������H������������H�������������H�����������H������������H�"�����������H�����������H�����������H�†���������H���������������H��H��t6H����H��tÐ����t8���tC1����u��G��@< �����H�>��������G��`<����G��a<�����ATL�gUH��SH)�H��I9���H�������6<A�zH�sp��Hc�H�>��fDH����	H����H��
��H���H��
��H��u(�H�5�lH����UL�%�>��tf�E1�L��[]A\�D�H�5�X
�U���E���H��	tL�%J>[]L��A\�f�L��H�5
m�\UL�%e>��t����H����E1�[]L��A\�H����	H���l����H�5�lH���UL�%�>���L����H�5�nH����TL�%�>���)����H�5lnH����TL�%�>�������H�5<nH���TL�%�>������H�5nH���|TL�%>��������H�5�mH���YTL�%>��������H�5�mH���6TL�%>���z����H�5|mH���TL�%,>���W����H�5LmH����SL�%9>���4����,���@H����H��	�x
H���!H��
�r����
H�5kkH���SL�%5>����������H����H��	��H���a
H��
��H���H�������H�5�jH���0SL�%�>���t����l���@H�������H�5�jH���RL�%�>���>����6���fDH��������H�5jH����R���
���L�%C
>����fDH���`����H�5�iH���RL�%�>�������H�5�kH���gRL�%�>����������H����H���\H���YH��	��H����H����H���FH����H��
���
H�5�gH����QL�%�>���&�������fDH���>H���`H����H���5H���^H���N����H�5gH���xQL�%�	>����������@H����H���
H��
��
H����
H���~����H�5�fH���QL�%3	>���^����V���fDH���WH��
��	H���2����H�5fH����P������L�%�>�
���f.�H����H��
��H��	�6H��
��H��	�vH��
��H��	��H��
�4H���JH��
�<H���nH��
�|H����E1��y���fDH���H���"H���R����H�5�eH����OL�%>���2����H�5|hH����OL�%>�����������E1������H�5vgH���O������L�%}>�����H�5�,H���dO���8
�H�5
eH���HO���(
�H�5�dH���,O�����H�5�dH��L�%�	>�	O���T���E1��L����H�5��
H����N���Y����H�5�+H����NL�%�>���|��������H�5�dH���NL�%J
>������H�5�gH���~NL�%W
>�������H�5vgH���[NL�%d
>��������H�5LgH���8NL�%q
>���|����H�5"gH���NL�%�>���Y����H�5�fH����ML�%[
>���6����H�5�fH����ML�%h
>�������H�5�fH���ML�%u
>�����H�5zfH���ML�%�
>�������H�5PfH���fML�%�
>��������H�5&fH���CML�%�
>��������H�5�eH��� ML�%�
>���d����H�5�eH���LL�%�
>���A����H�5�eH����LL�%�
>�������H�5~eH���LL�%�
>��������H�5TeH���LL�%�
>�����������H�5�aH���lLL�%5>����������H�5HOH���DLL�%m>�����������H�5cH���LL�%�
>���`����H�5IeH���KL�%�
>���=����H�5eH����KL�%�
>�������H�5�eH���K�������L�%D>���H�5��
H���K����������H�5�bH���jK���$�������H�5�(H���IKL�%�>��������H�5�dH���&KL�%�>���g����e����H�5�`H���JL�%w>���?����=����H�5�`H����JL�%�>�������H�5kcH���JL�%�>��������	H�5�aH���JL�%D>�����	H�5�aH���hJL�%�>��������H�5�_H���@J�����H�5�_H���$JL�%�>���h�H�5�bH���JL�%�>���E�H�5vbH����IL�%�>���"�H�5MbH���IL�%�>�����H�5$bH���IL�%A>�����H�5�aH���uIL�%N>�����H�5�aH���RIL�%[>�����H�5�aH���/IL�%�>���s�H�5�aH���IL�%>���P�H�5WaH����HL�%>���-�H�5.aH����HL�%>���
�H�5aH���HL�%\>�����H�5�`H���HL�%i>�����H�5�`H���]HL�%v>�����H�5�`H���:HL�%�>���~�H�5a`H���HL�%�>���[�H�58`H����GL�%=	>���8�H�5`H����GL�%Z>����H�5�_H���GL�%'>�����H�5�_H���GL�%�>�����H�5�_H���hGL�%�>�����H�5k_H���EGL�%�>��������H�5b\H���GL�%�=���]��[�
H�5/J
H����FL�%�=���5��3�H�5k\H����F�����H�5|\H���F�����H�5k`H���F�H�5`\���h���L�%�>���
H�5�[H���`FL�%I�=�������	H�5�]H���8FL�%A>���|�	H�5�]H���FL�%~>������T�H�5?]H����EL�%�	>������,�H�5j[H����E�������L�%��=��H�5[H���E���W�L�%�=����	H�5#[H���uE���l���뮺H�5�ZH���WEL�%��=������H�5_H���4EL�%�
>���x��H�50]H���EL�%
>���U��H�5]H����DL�%>���2��H�5�\H����DL�%$>�����H�5�\H���DL�%1>������H�5�\H���DL�%>>������H�5^\H���bDL�%K>������H�54\H���?DL�%X>������H�5
\H���DL�%e>������[���H�5�ZH����CL�%%>���0��H�5�ZH����C�������H�5�\H���CL�%v>���������H�5>[H���CL�%�>���8�����H�5�XH���]CL�%F�=��������
H�5MZH���5CL�%�>���y��
H�5>ZH���CL�%>���V��
H�5"]H����BL�%H>���3��
H�5�[H����BL�%U>�������
H�5ZH���BL�%�>���W�����H�54XH���|BL�%��=������H�5�ZH���YB���P����H�5�YH���8BL�%�>������w�L�%}�=�k�L�%q�=�_��
H�5XH���A�����
H�5�WH����A�����
H�5�WH���A���|�
H�5�[H���A���l�
H�5�WH���A���\�
H�5�WH���lA���L�
H�5Y[H���PA�����
H�5�WH���4A�����
H�5�WH���A�����
H�5�WH���@�����
H�5�ZH����@�����
H�5�WH����@�����
H�5vWH���@�����
H�5iZH���@���d�
H�5aWH���p@L�%�>��������	H�5^VH���H@�����	H�5UZH���,@�����	H�5FVH���@�����	H�54VH����?�����	H�5�YH����?�����	H�5VH���?�����	H�5
VH���?���<�	H�5�YH���?���,�	H�5�UH���h?���2�L�%Y�=��L�%�=��L�%�=��L�%�=��L�%9�=�w�L�%]�=�k�L�%��=�_��H�5�UH���>�����H�5�UH����>�����H�5wUH���>�����H�5�XH���>�����H�5aUH���>��td�H�5UUH���p>L�%��=���#���L�%��=��L�%�=��L�%m�=��L�%��=��L�%��=�s�L�%	�=�g�L�%�=�[��H��t@��t%H���|��H�5�H��H�+W>H�81��!���H�H�ƒ�H��u�� tH�G��H�G�ff.���H��H��H�H�5H��l��H������AWI��AVAUATUH��SH��H��(�0W�H9�?��H9\�?��H9?�?��H9
�?��H9�?�H9�?��H9��?��H9��?�@H9�?��I��t1�I�����H��@����#H��(1�[]A\A]A^A_��I��t�M��u}�H��� "��fDI��t�L���z���H��H���!�DI��t�1�I�����H��@���!�I��t�L��A���}�{���H����!�a����L�����H��H�p�l!�G����I���6���L�����I�WH��H���!������H�p]>L��H�5V�H�81����@�sc��~���fDI������1�I�����H��@���"����@I�������M��tM��A��uI�/H���H����L���ݥ�H�5��H��H��T>H�81�肑�f�I���f���L������H��H���si�H��1�H�5[�L�Lf�L9�tsD�A�P���wC��Hc�H�>��� DH����f���������������������H�D\>A��H�51�H�81��ߐ����H���M ����� tVH����H��H���!���@H�������L��L���b��I��H��tI��A��uH�H�ƒ�H��tL������I�o�� ��H����H�D$H�SPK�dH�t$H��H��H�D$�a!����H�|$��L��L�����H��<t5H��u �A��H�5b�H��H��R>H�81�����u�H���H��u�H�L$Ik�I��HAH�D$�KS�H����\�H��H��1�H���H�|$H��H��H�P��q5L9t$�i���I��L9������d���I�EH�D$����H��S>H�5�HH�81��N��H��Z>H��H�5��H�81��3��AUATI��UH��SH��dH�%(H��$�1�H��H���?�����H���?8H��H�l$ I���?8L��L��H��H����+H���f3H��H��H��I���55H���-�H��I����L��H���`�L��H��I���i$H���1H���92L��H��$�dH3%(u&H��[]A\A]�H��R>H�5�GH�81��=��訄��ATI��USH��H���dH�%(H��$�1��W7H��H��H���Y7H��L��H��H���+H���2H��H���#H��H��$�H��1��H��$�dH3%(uH���H��[]A\�����ATI��USH��H���dH�%(H��$�1��6H��H��H���6L��H��H��H���h*H����1H��H���#H����0H��$�dH3%(uH���[]A\��y��f���UH��H��SH��H�� H��GH�SH�H�l�2���H��H����}�H�{H��[H��]�%��DAWAVAUI��ATUH��SH��HH���dH�%(H�D$81��`G�H���I��H����H�D$L�|$ H�D$fDH�CH�KL�l$ L�5\�?H��H)�H+�0�{H�TH�D	H�T$(H�D$0uL�5�?H�_�?L����bB�H�t$L��H�D$�KB�L��H���P��H�H��u�H�L$8dH3%(L��uH��H[]A\A]A^A_��!���ATI��USH��H���dH�%(H��$�1���4H��H��H����4H��L��H��H���(H���0I��H��$H�x �t�H��H����H��H�����L��H��H���!H����.H��$�dH3%(uH���H��[]A\��i��f�PXH�5�H��H�,V>H�81��Ҋ�f���UH��SH��H���k���H��H��谉�H�sH��H�P�6���t����HE�H��[]����ff.���UH��SH��H������H��H���P��H�sH��H�P�6���t����HE�H��[]��.���ff.���UH��SH��H�����H��H�����H�sH��H�P�`5���t����HE�H��[]�����ff.�UH��SH��H��8dH�%(H�D$(1��G(H��uwH��tVH��u,H���H��謝�H�5M�H��H�[L>H�81��Q�����u�H�H�ƒ�H��u��� toH�sH���H�D$(dH3%(uYH��8[]�@H�|$H�t$H�=���H�T$H�T$�D$�XR��D$���U���H���d�|$�+��H�s��-�ff.�f�AWAVAUATU��SH���������j��_�I��I��I��Hc�L�<������ud������I�$�L�����H��t��uH�H�ƒ�H��tBH���j��H�5�H��H�K>H�81�����L���O�H�…�u�1��V���f�H�S�� uH�sH��L��[]A\A]A^A_�-DH�s�߉�����ff.���ATA���
USH��dH�%(H��$�1�H�\$ H��H�|$ H���H�D��H�����H��H���-���H��I����0H����H��$�dH3%(uH�ĐL��[]A\��}���ATA���
USH��dH�%(H��$�1�H�\$ H��H�|$ H���H�D��H���(���H��H�����H��I���20H���JH��$�dH3%(uH�ĐL��[]A\��}���H���c���H��H��H�H�������UA���
SH��dH�%(H��$�1�H�\$ H��H�|$ H���H�D��H���z���H��H�����H���/H���H��$�dH3%(uH��[]��X|����ATA���
USH��dH�%(H��$�1�H�\$ H��H�|$ H���H�D��H�����H��H������H��I����.H���
H��$�dH3%(uH�ĐL��[]A\���{�AWAVAUATU��SH���������f��_�I��I��I��Hc�M��H�<�H�|$�x��H�|$��u'������I�?H��u'��}M�D��K�H�Ņ�u�1���@��u�H���H��u��yn�H��L��I�H�����I�|$��-L��H��H����+��tR��uH��[]A\A]A^A_Ã�tQL��D$���D$H��H�5���H�J>H�81��6��fD�����L����Q�H�ދ8�A�L���H�޿�}A�ff.�f���ATA���
USH��dH�%(H��$�1�H�\$0H�l$H�|$0H��L�D$�H�D��H���Q���H��H���f�H��I���,H���H��$�dH3%(uH�ĠL��[]A\���y�ff.����ATA���
USH��dH�%(H��$�1�H�\$0H�l$H�|$0H��L�D$�H�D��H�����H��H�����H��I���[,H���sH��$�dH3%(uH�ĠL��[]A\��,y�ff.����H���S���H��H��H�H�������UA���
SH��dH�%(H��$�1�H�\$0H�l$H�|$0H��L�D$�H�D��H����H��H����H���+H���H��$�dH3%(uH�Ĩ�[]��qx����ATA���
USH��dH�%(H��$�1�H�\$0H�l$H�|$0H��L�D$�H�D��H���a���H��H�����H��I���+H���#H��$�dH3%(uH�ĠL��[]A\���w�ff.����AVAUL�-��ATUSH�� 1�L� H��H�x ��j�I�l$I�D$H�E�� ��f.�H����H9�}uH��H����y�1�H���y�I��H�=|?H��u�L���Sd�H�$|?H��t�L��H��H���X��I�t$I��H���R�I�&���H�E�� u�H�EH9�|�[]A\A]A^�fDAWAVAUI��ATM��USH��L��H��H�|$H��dH�%(H��$�1�H�T$p��H���H�D$x�
;�L���H��M����H�D$PL�|$0H�D$H�D$ H�D$�I�FH��0L���L�d$0H)�H�DH�D$8A�FL�d$PH�DH�D$@I�FH)�H�
�?H�DH�D$XA�FH�DH�D$`�5�H�t$�H�܏?H�D$ ��5�H�t$�H���?H�D$(��5�H��H���̐�M�6M���P���H���H��$��H��tCH�t$P�L�d$PH���H)�H��H+�0H�DH�X�?H�L	H�L$XH�D$`�T5�H���H��$��9�H���I��H���H�D$0H�D$H�EH�ML�d$0H��H)�H+�0H�D	H�TH�T$8H�D$@�E)<�~����H��y?H��uf��H�=�
��a�H��y?H��t�H��苂��}I���Р��H�����H���p��H�} L��H�D$P�G�H�t$�H�^�?H�D$X�d4�H�t$P�H��?H�D$`L�|$h�D4�L��H���I��H�mH������H���L��$��8�L���H��M���	H�D$0H�D$H�D$PH�D$�I�FI�NL�d$0H��H)�H+�0H�D	H�TH�T$8H�D$@A�F)���
H��x?H��u&f��H�=�
�`�H�`x?H��t�H���[��A�~I��蟟��H�����H���?��I�~ L��H�D$P��F�H�t$�H�-�?H�D$X�33�H�t$�H��?H�D$`L�|$h�3�H��H�����M�6M������H�T$H�t$p�H��$�L��$���2�H��$�dH3%(��H�ĸ[]A\A]A^A_��<��H�iw?H���
����H�=��
�_�H�Hw?H��t����fDH�Iw?H���������H�=�
�__�H� w?H��t��{���fD<u<H��v?H���a���@�H�=���_�H��v?H��t��;���fD��H�>A>H�5�H�81��m{���q��AWAVAUI��ATUSH��H��8�T$L�d$`dH�%(H��$(1��x$H��H���}$L��H��L��H���,H�5����L���H���E$H��H���J$H��H���_L�H��$�H���5�H�L$@�H�5f�?H��Hc�$�H�=L�?H�l$@H�\$PH�DH�D$H�i�I��H�D$ �fp�H�D$(�?�L��H�D$0H�D$ H�D$H�c�H�D$H�D$H��$���I��H��$hH�x ��c�H��H���}L�H��$�tRH��������?E1��H�t?H��I���o��L9�$�v%H��$�J�<�H9�v��/o�H����f.��|$����4�H�T$0L��L��L��H��腨��H��H���
��H�t$(H����H�L$0H��M��H�=[�?L����H��L��L���EL���H��H��$(dH3%(u8H��8[]A\A]A^A_�DH�L$0H�T$(M��L��H�=)�?���H����zo�f.���ATA���
USH��dH�%(H��$�1�H�\$0H�l$H�|$0L�D$H���H�D��H���a�H��H���A���H��I���"H���
H��$�dH3%(uH�ĠL��[]A\���n����ATA���
USH��dH�%(H��$�1�H�\$ H��H�|$ H���H�D��H���h��H��H�����H��I���m!H���	H��$�dH3%(uH�ĐL��[]A\��>n�ff.���ATA���
USH��dH�%(H��$�1�H�\$0H�l$H�|$0L�D$H���H�D��H���!�1�H��H������H��I���� H����H��$�dH3%(uH�ĠL��[]A\��m�f.���ATA���
USH��dH�%(H��$�1�H�\$ H��H�|$ H���H�D��H���(�1�H��H���k���H��I���0 H���HH��$�dH3%(uH�ĐL��[]A\��m����AVAUATU��SH��`dH�%(H��$X1���������W��_�I��Hc�L�,�變����������M�,$1�H�l$ H�|$ �
H��$��I���H�H���F�I��L��L��H�
�H���I��H��$�H�x �z_�H��H��H���l���H��L��H��H��I��舤��H��M��H��H�=؅?H������L��H��H���bL���*�H���2H��H��$XdH3%(�?H��`[]A\A]A^��L���8<�H�…������1�����fD������k�@AUATI��USH��H���dH�%(H��$�1��5H��H��H���7L��H��H��H����H���^I��H��$H�x �Z^�H��H��H���L���H��L��H��H��I���h���H��M��H��H�=��?H�����L��H��H���B
H���H��$�dH3%(uH���H��[]A\A]��j����ATA���
USH��dH�%(H��$�1�H�\$0H�l$H�|$0H��L�D$�H�D��H����H��H������H��I���;H���SH��$�dH3%(uH�ĠL��[]A\��j�ff.����ATA���
USH��dH�%(H��$�1�H�\$ H��H�|$ H���H�D��H����H��H���-���H��I���H���H��$�dH3%(uH�ĐL��[]A\��si���AT��UHc�H��SH��H��dH�%(H�D$1�H�D6H�5�m?H�$H��u'L�%̾@�L���+V�H��H��m?H��t�H��H���|a�H��tFH�pH� u1H�hH��H��节��+H�T$dH3%(uH��[]A\�DH�p��f�1����h����SH����/�H��H���������H�=��
�M�H��=>H�55�
H��H�9�?H��i4�H�H�='�?H�5S�H�1�?�L4�H�H�=
�?H�5=�H�D�?�/4�H�H�=�?H�5�H���?�4�H�H�=Ё?H�5*�H���?�3�H�=��?H�5�H��H�Ł?��3�H���?H�=��?H�5ْH�D�?�3�H�H�=u�?H�5ʒH��?�3�H�H�=X�?H�5��H�*�?�}3�H�H�=;�?H�5��H���?�`3�H�H�=�?H�5��H��?�C3�H�=�?H�5~�H��H��?�&3�H���?H�=�?H�5k�H���?�3�H�ր?H�=��?H�5E�H�i�?��2�H�H�=��?H�57�H��?��2��H�=+�H���?�S��H�=��H�l�?�S��H�=�H�Ā?�oS��H�=�H�$�?�WS��H�=:H�\�?�?S��H�=ɑH�l�?�'S��H�=��H��?�S��H�=��H�4�?�R��H�=B�
H��?��R�H��?H��j?H���!H�e�	��H���R�H��j?H��t�H�=��H��?�_9�H����\�H�=X?H�5^�
H�����H�=B?�����H�����H�5Z���D�H�=#?�����H�����H�5E���D�H�=?�����H����H�5
��D�H�=�~?�����H�Q���H�5���D�H�=�~?�����H���H�5���fD�H�=�~?�����H���H�5|��GD�H�=�~?�����H�����H�5j��(D�H�=i~?�����H�%�H�5X��	D�H�=J~?�����H���H�5H���C�H�=+~?�����H�g���H�5=���C�H�=~?�����H���H�5(��C�H�=�}?�����H�i�H�5��C�H�=�}?�����H���H�5��nC�H�=�}?�����H���H�5���OC�H�=�}?�����H�|�H�5��0C�H�=q}?�����H�]�H�5���C�H�=R}?�����H���H�5Ï��B�H�=k}?�H���H�5����B�H�=L}?�H�@�H�5���B�H�=-}?�H���H�5���B��n��[�Z����	H��H�5c�H��H�!2>H�81��Wl��H7��U�SH��H�_H9�wJH��uN�H��w�k�H�H9�r@H��H9�w�H��H�H�4��v�H��tH�]H�E�H��[]�f�H�H9�v1�H��[]�fDH9�vH��H9�v�1����H���1���USH��H��@��H���)�H�߾"H���Y�H�uH�UH�߹��H��H�߾"[]�1����UH���SH��H�������tH�H�SH�HH�H�,�H��[]�f���UH���SH��H�������u
H��[]�H�sH�H�~H���pZ�H�CH�(H�H��[]�ff.���H�H��u�UH��H��SH��H���<�����uH��[]ÐH�H�CH�uH�<�H�EH���z�H�EHH��[]�f���H�u�@SH��H��CA�f�H�C[�f���USH��f�>���H���H��H��Hc�H�>��H�v(H��t����H�s0H��tH�����H�s8H��tH�����H�s@H��tH�����H��H��[]�@�f�H�v(����DH�~H���DH�v���H�v�L����H�v(�H�sPH��t�H���0����H�vH�%���H�sPH��t�H�������H�v@�	����t���H�v@����f���H�v@����X���H�~���H�s@H������H�sXH��tH������H�s`H���%���H���������H�v�
H�s0H��tH�����H�s8H����
H���H���s�������H�vH�������\�������H�v�N���H�s H���B������H�v�4���H�s H���(������H�~��H�s@H������H�sHH���q���H������d���H�vH��t���H�s H���I���H�������<���H�v����H�s H���
�"���H�v0�������H�~�;	H�{0�2	���H�v���H�s H���x������H�vH��t�e���H�s H���	H�s8H��tH���H���H�s@H���	���H�v�.���H�s H���"������H�v����H�s H�������s���H�v���H�s H������Y���H�v���H�s H�������?���H�vH��t���H�s H���	H�s8H������H���������H�vH��t���H�s H����H�s8H�����H���l�������H�v�^���H�s H���R������H�v�D������H�vH��t�1���H�sXH���%������H�vH��t����H�s`H�������q���H�vH��t��H�sXH��tH�����H�spH���E���H�������8���H�vH��t���H�sXH���������H�vH�������������H�vH��t���H�s H�������H�v(H�������a�������H�v(H��������J������H�v(�<������H�v0H��t�)���H�s8H��tH������H�s@H��tH������H�{H���i���H�v0���[���H�v0����M���H�v(H���@��������6���H�v����(���H�vH��t���H�s@H��tH�����H�sXH��tH�����H�spH���|������H�vH��t�i���H�s@H��tH���X���H�sXH��tH���G���H�sxH���;������H�vH��t�(���H�s@H��tH������H�sXH��tH������H�spH������e���H�v���H�s H���O���H�������B���H�~�i�4���H�v0����&���H�~�=
����H�vH�������������H�v@�����H�v@�z������H�v@�l�������H�v�^���H�s0H��tH���M���H�sHH�������H���8������H�vH��������!������H�v(H�������
����u���H�~��H�s0H�����[���H�v8����M���H�v8�����?���H�v8�����1���H�~��H�s`H��tH�����H�shH���
���H��������H�v������H�vH������m�������H�~�_�H�sPH���S���H�sXH�������H���>������H�vH��������'������H�v(�yH�sPH��tH������H�sXH��tH�����H�s`H���Z���H������M���H�v����H�s0H�������3���H�v����%���H�v0�������H�v@����	���H�v(���H�s@H��tH������H�sHH�����H���j�������H�vH�\���H�sPH�������H���G������H�v�9���H�s0H���-������H�vH��������������H�v����H�s0H������g���H�v���H�s0H������M���H�vH���@��������6���H�v���H�s0H���������H�v@�������H�v@�������H�v@�����H�v��H�s0H����H�sHH��tH���\���H�sPH���H�shH���H���H��tH���0���H���H�������H���������H�v�
���H�s H�����H�s(H���a���H������T���H�v�����F���H�vH��t����H�s H���+���H���������H�vH��t���H�s H�����H�s(H����H�s@H���|������H�v��H�s0H��tH���]���H�s8H������H�v(H��������:������H�v(�,������H�v@�������H�v@�����{���H�vH���n������d���H�v8H��t���H�sPH���I���H������<���H�v0����.���H�v@��� ���H�v(��H�s@H��tH����H�sHH�����H�������H�vH��t�n�H�s H����H�s8H�����H���M���H�v�?�H�s H���3���H�~�%�H�s0H��tH����H�s8H���w�H�����j�H�v8H���]�����S�H�vH���F�����<�H�
����H�5A�H�=8�
� �ff.�f�ATUH��SH�>t2H�FH�0H��t&I��1��
H�EH�4�H��tL��H���g�H9]w�H�}u
[]A\�DH�}�w4�f�[H�EE]A\�f�����f�����H�'�Hc�H�>��H���H�Ǧ�H����H����H����H�o��H�Y��H�D��H�-��H���H���H���H�ϥ�H����H����H�w��H�W��H�4��H���H���H���H�Ӥ�H����H����H�y��H����H�N��H�9��H� ��H�
��H���H�ԣ�H����H����H�s��H�W��H�<��H�)��H���H���H���H�Ң�H����H����H����H�g��H�J��H�3��H���H����H���H����H����H�{��H�U��H�1��H�F��H���H���H���H����H�ݠ�H����H�~��H����H�m��H�I��H�6��H���H�!��H�ր�H����H�~��H�N��H���H���H�ԟ�H����H����H�p��H�]��H�?��H�&��H���H����H�ܞ�H�Ǟ�H����H�^�H�t��H�&�H��~�H��~�H�;��H���H���H�ݝ�H�ǝ�H����H����H�z��H�c��H�A��H���H���H���H�ܜ�H����H����H���H�[��H�6��H�~�H��}�H���H��}�H�ޛ�H�v}�H����H����H�h��H�D��H�.}�H��|�H��|�H���H���H���H�ƚ�H����H����H�h��H�S��H�4��H���H����H�ݙ�H�Ǚ�H����H����H�m��H�I��H�-��H���H����H���H�ɘ�H����H����H�t��H�N��H�n�
�ff.�f���f�?��C
AUATI��H���UH��SH��H���Hc�H�>��H�@L��H���
H�{XH��tL��H���
H�{`H��ubH��[]A\A]�H�H��tL����	H�{ L��H����	H�{(t,E1�f�H�C8L��H��J�<�I���	L9k(w�H�{@H��L��H��[]A\A]�	�H�H��u��t���f�H�L���d	H�{ ��fDH�L���L	H�{0�fDH��f.�H�(H��u��$���f�H�8�{����H�HL��H���	H�{PH���X������H�(�C����H�H��tL����H�{X�"���fDH�(L���H�{@H��tL��H���H�{HH��������fDH�H��tL��H���lH�{ H�������\���f.�H�H��tL���?H�{@H��tL��H���+H�{XH��tL��H���H�{p�r���H�0H��t
L���DH�{8H���O������H�(H��tL����H�{0H��tL��H���H�{8H��tL��H���H�{@H���������H�H��tL���H�{ t�E1�H�C0L��H��J�<�I���iL9k w��f���H�H��tL���MH�{ �D���E1��H�C0L��H��J�<�I���!L9k w�����H�H��tL���H�{ t#E1�H�C0L��H��J�<�I����L9k w�H�{8H��tL��H����H�{@�����E1�f�H�CPL��H��J�<�I���L9k@w����H�L���H�{ �y���E1�@H�C0L��H��J�<�I���YL9k w��P���H�H��tL���=H�{`���H�H��tL���#H�{XH��tL��H���H�{pH���f������H�8H��������H�`H��tL����H�{hH���1�������H�H��tL���H�{ �����E1�f�H�C0L��H��J�<�I���L9k w����H�L���rH�{0H����������H�H��tL���OH�{ �L���E1�H�C0L��H��J�<�I���)L9k w��&���H����H�L���	H�{ L��H���H�{(H���Q������H�H��tL����H�{@H��tL��H����H�{XH��tL��H���H�{x�
���H�@���H�PL���H�{XH��������E1�H��s����H�C(L��H��J�<�I���YL9kw��P���E1�H��B���H�C(L��H��J�<�I���)L9kw�� ���E1�H�(����H�C8L��H��J�<�I���L9k(w����E1�H����H�C(L��H��J�<�I����L9kw����E1�H�t!@H�C(L��H��J�<�I���L9kw�H�{0H��tL��H���H�{8�v���E1�H�CHL��H��J�<�I���YL9k8w��P���E1�H�(�B���H�C8L��H��J�<�I���)L9k(w�� ���E1�H�(����H�C8L��H��J�<�I���L9k(w���E1�H����H�C(L��H��J�<�I����L9kw����E1�H�(�����H�C8L��H��J�<�I���L9k(w����E1�H�t!@H�C(L��H��J�<�I���iL9kw�H�{0H��tL��H���OH�{8t%E1�DH�CHL��H��J�<�I���)L9k8w�H����{���E1�H�(����f�H�C8L��H��J�<�I����L9k(w����E1�H�(t!@H�C8L��H��J�<�I���L9k(w�H�{PH����������E1�H������H�C(L��H��J�<�I���yL9kw��p���E1�H�t!@H�C(L��H��J�<�I���IL9kw�H�{0t)E1�f�H�C@L��H��J�<�I���L9k0w�H�{HH��tL��H���H�{Pt%E1�DH�C`L��H��J�<�I����L9kPw�H�{ht)E1�f�H�CxL��H��J�<�I���L9khw�H���H��tL��H���H���H������y���E1�H�(�k���f�H�C8L��H��J�<�I���IL9k(w��@���E1�H�(�2���H�C8L��H��J�<�I���L9k(w������ff.�f���ATI��UH��H��SH���Մ�u[]A\ÐL��H��H��[]A\�n���ff.���f�:����AUATI��UH��SH��H���H�D�Hc�H�>��H�56��9�H�MH�UH��I��$0H�5'�H)�H)�1��r��,H���%��H�5/�H����H�M H�UH��I��$0H�5ߖH)�H)�1��*��,H���ݺ�
H�5��H��詹H�U(H�����I��$0H�M0H�5��H��H)�H)�1��ٷ�,H��茺�H�5i�H���X�H�U8H���e�L��H������,H���S��
H�5B�H����H�U@H���I��$0H�MHH)�H)�H�5�H��1��O�H��H�߾}[]A\A]��!H�5���ǸH�MH�UH��I��$0H�5��H)�H)�1����,H��賹�H�58�H�����[H��蒹�E��{��t�H�5��H���N�H�߾]H��H�]�H�߾,�P�H�ߺH�5U���H�M�H�U�H��I��$0H�5
�H)�H)�1��U�H�߾,��H�ߺH�5���ԷH�M�H�U�H��I��$0H�5”H)�H)�1��
�H�߾,�H�ߺH�5ٕ茷H�M�H�U�H��I��$0H�5z�H)�H)�1��ŵH�߾,�x��H��H�5/��D��"H���W�H����H��I�����L��H�߹H���q�H�߾"�$�H��H�߾}[]A\A]�
��H�5q�E1��ٶH�MH�UH��I��$0H�5ǓH)�H)�1����,H���ŷ�H�5ϓH��葶H�M H�UH��I��$0H�5�H)�H)�1��ʴ�,H���}��
H�5��H���I��[H���\�H�}(��H�E8L��H��J��I�����L9m(��M��tھ,H�����˺H�5`�H����H�MH�UH��I��$0H�5֒H)�H)�1��!��,H���ԶH�5@�H�ߺ蠵�[H��賶�E����]H��蜶�,H��菶�H�5��H���[�H�M H�UH��I��$0H�5I�H)�H)�1�蔳�,H���G��H�5�H����H�U(H���}�I��$0H�M0H�5��H��H)�H)�1��C��,H����H�5�H���´H�U8H����I��$0H�M@H�5��H��H)�H)�1����,H��襵�H�5��H���q�H�UHL��H������,H���u��
H�5��H���A�H�UPH���4	L��H������5���� H�5`���H�MH�UH��I��$0H�5�H)�H)�1��L��,H����H�5	�H���˳H�M H�UH��I��$0H�5��H)�H)�1����,H��跴�H�5͓H��胳H�U(L��H�����,H��致�H�5��H���S�H�U0H�����I��$0H�M8H�5;�H��H)�H)�1�胱�,H���6��
H�5��H����H�U@H���s�L��H���j����,H����H�5��H���ɲH�UHH����L��H���1����,H���ij�H�5��H��萲H�UPH����I��$0H�MX�l����H�5��q����H�5}�E1��M�H�MH�UH��I��$0H�5;�H)�H)�1�膰�,H���9��H�5��H�����[H����H�}�-�H�E(L��H��J��I���V���L9m��M��tھ,H���ڲ�˺H�5��觱H�MH�UH��I��$0H�5��H)�H)�1���H��H�߾}[]A\A]鉲� H�5=��X�H�MH�UH��I��$0H�5F�H)�H)�1�葯�,H���D��H�5��H�����[H���#��E��P���q��t�H�5P�H���װ�]H�����,H���ݱ�H�5�H��詰H�UH����I��$0H�M H�5��H��H)�H)�1��ٮ�,H��茱�H�5ݕH���X�H�U(H�����I��$0H�M0H�5@�H��H)�H)�1�舮�,H���;��H�5W�H����H�U8H���g�I��$0H�M@H�5�H��H)�H)�1��7�H�߾,H��H���H��H�5��貯�"H���ŰH���-�H��I���2�L��H�߹H���߲H�߾"蒰H��H�߾}[]A\A]�{��H�5��J�H�MH�UH��I��$0H�58�H)�H)�1�胭�,H���6��H�5@�H����H�M H�UH��I��$0H�5�H)�H)�1��;��,H�����
H�5ϏH��躮H�U(H���e�I��$0H�M0H�5��H��H)�H)�1����,H��蝯�H�5z�H���i�H�U8H�����L��H�����,H���d��
H�5S�H���0�H�U@H�����I��$0H�MHH�5�H��H)�H)�1��`��,H�����H�5�����(H�5�~�ѭH�MH�UH��I��$0H�5��H)�H)�1��
�H��H�߾}[]A\A]鳮�+H�5�}肭H�MH�UH��I��$0H�5p�H)�H)�1�軫�,H���n��H�56�H���:��[H���M��E��ε����t�H�5?�H����H�߾]��H�߾,��H�ߺH�5"��ӬH�UL��H���D�H��H�߾}[]A\A]�ͭ�H�5�|蜬H�MH�UH��I��$0H�5��H)�H)�1��ժH��H�߾}[]A\A]�~��$H�5�}E1��J�H�MH�UH��I��$0H�58�H)�H)�1�胪�,H���6��H�5W�H�����[H����H�}�"�H�E(L��H��J��I���S�L9m��M��tھ,H���׬�˺H�5�|褫H�MH�UH��I��$0H�5��H)�H)�1��ݩ�,H��萬�H�5��H���\�H�M H�UH��I��$0H�5J�H)�H)�1�蕩�,H���H��
H�5�H����H�U(H��������H�57�H������$H�5|�֪H�MH�UH��I��$0H�5ćH)�H)�1���H��H�߾}[]A\A]鸫�$H�5�{自H�MH�UH��I��$0H�5u�H)�H)�1���,H���s��H�5��H���?��[H���R��E��̶��������H�5��H�����E ��H�߾]H����H�߾,��H��H�5-��Ʃ�"H���٪H���A�H��I���F�L��H�߹H����H�߾"親H��H�߾}[]A\A]鏪� H�5�z�^�H�MH�UH��I��$0H�5L�H)�H)�1�藧�,H���J��H�5q�H�����[H���)��E������ҳ�����H�5v�H���٨�E �Գ�]H�����,H���թ�H�5݆H��表H�UH��� �I��$0H�M H�5��H��H)�H)�1��Ѧ�,H��脩�H�5/�H���P�H�M0H�U(H��I��$0H�5>�H)�H)�1�艦�,H���<��H�5X�H����H�U8H���n�I��$0H�M@H�5�H��H)�H)�1��8�H�߾,H��H���H��H�5��賧�"H���ƨH���.�H��I���3�L��H�߹H����H�߾"蓨H��H�߾}[]A\A]�|�� H�5xw�K�H�MH�UH��I��$0H�59�H)�H)�1�脥�,H���7��H�5A�H����H�M H�UH��I��$0H�5�H)�H)�1��<��,H�����H�5̄����H�5�v警H�MH�UH��I��$0H�5��H)�H)�1���H��H�߾}[]A\A]鏧�(H�5wE1��[�H�MH�UH��I��$0H�5I�H)�H)�1�蔤�,H���G��	H�5P�H�����[H���&�H�}�1�H�E(L��H��B��I�����L9m�
�M��tھ,H�����˺'H�5�u貥H�MH�UH��I��$0H�5��H)�H)�1����,H��螦H�5��H�ߺ�j��[H���}��E���]H���f��,H���Y��H�5��H���%��U���E�L��H������,H���"��H�5K�H����H�U H����I��$0H�M(H�5ցH��H)�H)�1���H�߾,�ѥH�ߺH�5��蝤H�M8H�U0H��I��$0H�5��H)�H)�1��֢H��H�߾}[]A\A]��� H�5tE1��K�H�MH�UH��I��$0H�59�H)�H)�1�脢�,H���7��H�5A�H����H�M H�UH��I��$0H�5�H)�H)�1��<��,H�����
H�5��H��軣�[H���ΤH�}(���H�E8L��H��J��I����L9m(�ޣM��tھ,H��萤�˺(H�5�r�]�H�MH�UH��I��$0H�5K�H)�H)�1�薡H�߾,�I�H�ߺ
H�5���H�UL��H����H�߾,��H�ߺH�5 ���H�M(H�U H��I��$0H�5�H)�H)�1���H�߾,�ѣH�ߺH�5f�蝢H�U0L��H����H��H�߾}[]A\A]闣�+H�5�q�f�H�MH�UH��I��$0H�5TH)�H)�1�蟠�,H���R�H�59�H�ߺ���[H���1��E���H�߾]��H�߾,�
�H�ߺH�5o��١�UL��H���k��H��H�߾}[]A\A]�Ԣ�2H�5�p裡H�MH�UH��I��$0H�5�~H)�H)�1��ܟ�,H��菢H�5v�H�ߺ�[��[H���n��E�(�H�߾]�W�H�߾,�J�H�ߺH�5����UL��H�����H�߾,��H�ߺH�5A���H�M(H�U H��I��$0H�5�}H)�H)�1�� �H��H�߾}[]A\A]�ɡ�-H�5}e蘠H�MH�UH��I��$0H�5�}H)�H)�1��ўH�߾,脡H�ߺH�5�~�P��UL��H������H�߾,�U�H�ߺH�5{�!�H�M(H�U H��I��$0H�5}H)�H)�1��Z�H�߾,�
�H�ߺH�5f~�ٟH�U0L��H���J�H�߾,�ݠH�ߺH�5}詟H�M@H�U8H��I��$0H�5�|H)�H)�1���H��H�߾}[]A\A]鋠�+H�5�i�Z�H�MH�UH��I��$0H�5H|H)�H)�1�蓝H�߾,�F�H�ߺH�5�}���UL��H�����H�߾,��H�ߺH�5�����UH��1�H�5'��/�H��H�߾}[]A\A]�؟�.H�5�h觞H�MH�UH��I��$0H�5�{H)�H)�1���H�߾,蓟H�ߺH�5�}�_�H�M H�UH��I��$0H�5M{H)�H)�1�蘜H�߾,�K�H�ߺH�5r{��H�M0H�U(H��I��$0H�5{H)�H)�1��P�H�߾,��H�ߺH�5\|�ϝH�U8L��H���@�H�߾,�ӞH�ߺH�55|蟝�U@L��H���1��H�߾,褞H�ߺH�5C��p��UDH��1�H�5��輛H��H�߾}[]A\A]�e��4H�5Ag�4�H�MH�UH��I��$0H�5"zH)�H)�1��m�H�߾,� �H�ߺH�5F|��H�M H�UH��I��$0H�5�yH)�H)�1��%�H�߾,�؝H�ߺH�5�|褜H�M0H�U(H��I��$0H�5�yH)�H)�1��ݚH�߾,萝H�ߺH�5�z�\�H�U8L��H�����H�߾,�`�H�ߺH�5�z�,��U@L��H�����H�߾,�1�H�ߺH�5|��UDL��H�����H�߾,��H�ߺH�5��Λ�UHH��1�H�5���H��H�߾}[]A\A]�Ü�/H�5oe蒛H�MH�UH��I��$0H�5�xH)�H)�1��˙H�߾,�~�H�ߺH�5�z�J�H�M H�UH��I��$0H�58xH)�H)�1�胙H�߾,�6�H�ߺH�5]x��H�M0H�U(H��I��$0H�5�wH)�H)�1��;�H�߾,��H�ߺH�5Gy躚H�U8L��H���+�H�߾,辛H�ߺH�5 y芚�U@L��H�����H�߾,菛H�ߺH�5.~�[��UDH��1�H�5��觘H��H�߾}[]A\A]�P�� H�5�cE1���H�MH�UH��I��$0H�5
wH)�H)�1��U��,H�����	H�5yH���ԙ�[H����H�}�ǘ@H�E(L��H��B��I���A���L9m���M��tھ,H��襚�˺.H�5�b�r�H�MH�UH��I��$0H�5`vH)�H)�1�諗�,H���^�H�5ExH�ߺ�*��[H���=��E���]H���&��,H�����H�5~wH�����U�����L��H���o����,H�����H�5xH��讘H�U H�����I��$0H�M(H�5�uH��H)�H)�1��ޖH�߾,葙H�ߺH�5�u�]�H�M8H�U0H��I��$0H�5KuH)�H)�1�薖H��H�߾}[]A\A]�?��%H�5ka��H�MH�UH��I��$0H�5�tH)�H)�1��G��,H���H�5{{H�ߺ�Ɨ�[H���٘�E����]H��E1�还�,H��貘�H�5�uH���~��[H��葘H�}���H�E(L��H��J��I������L9m�}�M��tھ,H���S��˺,H�5�V� �H�MH�UH��I��$0H�5tH)�H)�1��Y�H�߾,��H�ߺH�5nu�ؖ�UL��H���j���H�߾,�ݗH�ߺH�5v詖H�M(H�U H��I��$0H�5�sH)�H)�1���H�߾,蕗H�ߺH�5�t�a�H�U0L��H������H�߾,�e�H�ߺH�5�s�1�H�M@H�U8H��I��$0H�5sH)�H)�1��j�H��H�߾}[]A\A]���-H�5GU��H�MH�UH��I��$0H�5�rH)�H)�1���H�߾,�ΖH�ߺH�50t蚕�UL��H���,���H��H�߾}[]A\A]镖�+H�5�T�d�H�MH�UH��I��$0H�5RrH)�H)�1�蝓H�߾,�P�H�ߺH�5�s���UL��H��讼��H��H�߾}[]A\A]���.H�5�S��H�MH�UH��I��$0H�5�qH)�H)�1���H�߾,�ҕH�ߺH�54s螔�UL��H���0���H�߾,裕H�ߺH�5�s�o�H�M(H�U H��I��$0H�5]qH)�H)�1�訒H�߾,�[�H�ߺH�5�q�'�H�M8H�U0H��I��$0H�5qH)�H)�1��`�H�߾,��H�ߺH�5lr�ߓH�U@L��H���P��H��H�߾}[]A\A]�ٔ�4H�5uR訓H�MH�UH��I��$0H�5�pH)�H)�1���H�߾,蔔H�ߺH�5�q�`��UL��H����H�߾,�e�H�ߺH�5�r�1�H�M(H�U H��I��$0H�5pH)�H)�1��j�H�߾,��H�ߺH�5s��H�M8H�U0H��I��$0H�5�oH)�H)�1��"�H�߾,�ՓH�ߺH�5.q衒H�U@L��H�����H�߾,襓H�ߺH�5�r�q��UHL��H������H��H�߾}[]A\A]�l��/H�5�P�;�H�MH�UH��I��$0H�5)oH)�H)�1��t�H�߾,�'�H�ߺH�5�p���UL��H��腹��H�߾,�H�ߺH�5q�đH�M(H�U H��I��$0H�5�nH)�H)�1��H�߾,谒H�ߺH�5�n�|�H�M8H�U0H��I��$0H�5jnH)�H)�1�赏H�߾,�h�H�ߺH�5�o�4�H�U@L��H�����H��H�߾}[]A\A]�.��H�5zOE1��H�MH�UH��I��$0H�5�mH)�H)�1��3��,H�����	H�5�oH��貐�[H���őH�}�ύf.�H�E(L��H��B��I������L9m���M��tھ,H���}��˺H�5�N�J�H�MH�UH��I��$0H�58mH)�H)�1�胎�,H���6��H�5LpH����H�UH����L��H���j���,H��E1���
H�5pH���Ə�[H���ِH�} ���H�E0L��H��J��I�����L9m ���M��tھ,H��蛐�˺#H�5�M�h�H�MH�UH��I��$0H�5VlH)�H)�1�衍�,H���T��H�5joH��� �H�UH����L��H������,H��E1����
H�5;oH�����[H���H�} �ӉH�E0L��H��J��I���5��L9m ���M��tھ,H��蹏�˺(H�5�L膎H�MH�UH��I��$0H�5tkH)�H)�1�迌H�߾,�r�H�ߺH�5�l�>�H�UL��H�����H�߾,�B�H�ߺ	H�5Kn��H�U L��H�����H�߾,��H�ߺH�59k�ލH�M0H�U(H��I��$0H�5�jH)�H)�1���H��H�߾}[]A\A]��$H�5lK菍H�MH�UH��I��$0H�5}jH)�H)�1��ȋ�,H���{��H�5�lH���G��[H���Z��E��5���V������H�5�lH���
��E �X�H�߾]��H�߾,��H�ߺH�5�l�ҌH�UL��H���C��H�߾,�֍H�ߺH�5ml袌H�M(H�U H��I��$0H�5�iH)�H)�1��ۊH�߾,莍H�ߺH�5�j�Z��U0L��H�����H�߾,�_�H�ߺH�5l�+�H�M@H�U8H��I��$0H�5iH)�H)�1��d�H��H�߾}[]A\A]�
��%H�5�I�܋H�MH�UH��I��$0H�5�hH)�H)�1����,H���Ȍ�H�5�jH��蔋�[H��觌�E�����,�����H�5�jH���W��E �.��]H���`��,H���S��H�5�jH����H�UH���äL��H������,H�����H�5�jH����H�U H���q�I��$0H�M(H�5�gH��H)�H)�1����,H���ɋ�H�5xjH��蕊H�U0H����I��$0H�M8H�5}gH��H)�H)�1��ňH�߾,�x�H�ߺH�53j�D��U@L��H���ֱ��H�߾,�I�H�ߺ
H�5j���UDL��H��觱��H�߾,��H�ߺH�5Ag��H�MPH�UHH��I��$0H�5�fH)�H)�1���H�߾,�ҊH�ߺH�5+h螉H�UXL��H�����H��H�߾}[]A\A]阊�+H�5�F�g�H�MH�UH��I��$0H�5UfH)�H)�1�蠇�,H���S��H�5�hH�����[H���2��E��ڔ���������H�5~hH�����E ����]H�����,H���މ�H�5lhH��誈H�UH���[�L��H������,H��襉�H�5?hH���q�H�U H���	�I��$0H�M(H�5YeH��H)�H)�1�衆�,H���T��H�5hH��� �H�U0H�����I��$0H�M8H�5eH��H)�H)�1��P�H�߾,��H�ߺH�5�g�χ�U@L��H���a���H�߾,�ԈH�ߺ
H�5�g蠇�UDL��H���2���H�߾,襈H�ߺH�5�g�q��UHL��H������H�߾,�v�H�ߺH�5hg�B�H�MXH�UPH��I��$0H�50dH)�H)�1��{�H�߾,�.�H�ߺH�5�e�H�U`L��H���k��H��H�߾}[]A\A]���&H�5D�ÆH�MH�UH��I��$0H�5�cH)�H)�1���,H��诇�H�5�eH���{��[H��莇�E�����������H�5�eH���>��E ���]H���G��,H���:��H�5�eH����H�UH���ȚL��H���n���,H�����H�5�eH���ͅH�U H���v�I��$0H�M(H�5�bH��H)�H)�1���,H��谆�H�5_eH���|�H�U0H����I��$0H�M8H�5dbH��H)�H)�1�謃H�߾,�_�H�ߺH�5e�+��U@L��H��转��H�߾,�0�H�ߺ
H�5�d��UDL��H��莬��H�߾,��H�ߺH�5(b�̈́H�MPH�UHH��I��$0H�5�aH)�H)�1���H�߾,蹅H�ߺH�5c腄H�UXL��H�����H��H�߾}[]A\A]���H�5kA�N�H�MH�UH��I��$0H�5<aH)�H)�1�臂�,H���:��H�5bH����H�UH���ÝL��H���n��H�߾,��H�ߺH�5a�̓H�M(H�U H��I��$0H�5�`H)�H)�1���H��H�߾}[]A\A]鯄�)H�5k@�~�H�MH�UH��I��$0H�5l`H)�H)�1�跁�,H���j��
H�5}bH���6�H�UH����L��H������,H��E1��.��	H�57bH����[H���
�H�} �}{H�E0L��H��J��I���K��L9m �\{M��tھ,H���σ�˺H�5@蜂H�MH�UH��I��$0H�5�_H)�H)�1��Հ�,H��舃�H�5�aH���T��[H���g��E����������H�5�aH�����E ���]H��� ��,H�����H�5�aH���߁H�UH���ƔL��H���G���,H���ڂ�H�5taH��要H�U H���t�I��$0H�M(H�5�^H��H)�H)�1����,H��艂�H�5�_H���U��U0L��H������,H���Z��H�5	aH���&�H�U8H���ۓI��$0H�M@H�5^H��H)�H)�1��V�,H���	��H�5_H���ՀH�UHH���q�I��$0H�MPH�5�]H��H)�H)�1���,H��踁�H�5�^H��脀H�UXH���ՒL��H�������,H�����H�5�^H���K�H�U`H�����I��$0H�MhH�53]H��H)�H)�1��{~�,H���.��H�5`H���H�UpH�����������H�5�;��H�MH�UH��I��$0H�5�\H)�H)�1��~�,H���À�H�5^H���H�UL��H������,H��蓀�H�5�]H���_H�U L��H�������,H���c��H�5�\H���/H�U(H���"��I��$0H�M0����&H�5�:�H�MH�UH��I��$0H�5�[H)�H)�1��9}�,H�����H�5]H���~H�UH����L��H��� ���,H��E1���H�5�\H���|~�[H���H�} �NtH�E0L��H��J��I������L9m �-tM��tھ,H���Q�˺'H�5c:�~H�MH�UH��I��$0H�5[H)�H)�1��W|�,H���
�
H�5�\H����}H�UH����L��H���>��H�߾,��~H�ߺH�5�Z�}H�M(H�U H��I��$0H�5�ZH)�H)�1���{H��H�߾}[]A\A]�~�H�5s9�N}H�MH�UH��I��$0H�5<ZH)�H)�1��{�,H���:~�H�5�[H���}H�UH���r�I��$0H�M H�5�YH��H)�H)�1��6{�,H����}�
H�5k[H���|H�U(H����L��H������,H���}�H�5@[H���||H�U0H�����L��H������,H���w}�H�5[H���C|H�U8H���d�L��H������,H���>}�H�5�ZH���
|H�U@H�����L��H���r����,H���}�H�5�ZH����{H�UHH������I��$0H�MP����H�5?8E1��{H�MH�UH��I��$0H�5�XH)�H)�1���y�,H���|�	H�5�ZH���W{�[H���j|H�}��n�H�E(L��H��B��I�����L9m��nM��tھ,H���%|�˺+H�5�6��zH�MH�UH��I��$0H�5�WH)�H)�1��+yH�߾,��{H�ߺH�5@Y�z�UL��H���<���H��H�߾}[]A\A]�{�$H�5A6�tzH�MH�UH��I��$0H�5bWH)�H)�1��x�,H���`{�H�5�XH���,zH�UH����L��H��蔿��H�߾,�'{H�ߺH�5NW��yH�M(H�U H��I��$0H�5�VH)�H)�1��,xH��H�߾}[]A\A]��z�(H�5a6�yH�MH�UH��I��$0H�5�VH)�H)�1���w�,H���zH�5wXH�ߺ�\y�[H���oz�E�b��]H���Xz�,H���Kz�H�5�WH���y�U���P�L��H��衠���,H���z�H�5=XH����xH�U H�����I��$0H�M(H�5�UH��H)�H)�1��wH�߾,��yH�ߺH�5�U�xH�M8H�U0H��I��$0H�5}UH)�H)�1���vH��H�߾}[]A\A]�qy�,H�5�4�@xH�MH�UH��I��$0H�5.UH)�H)�1��yv�,H���,yH�5WH�ߺ�w�[H���y�E�`�H�߾]��xH�߾,��xH�ߺH�5IV�w�UL��H���E���H��H�߾}[]A\A]�x�H�5�T�}wH�MH�UH��I��$0H�5kTH)�H)�1��uH�߾,�ixH�ߺH�5T�5wH�UL��H��覼��H�߾,�9xH�ߺH�5WT�wH�U L��H���v���H�߾,�	xH�ߺH�50T��vH�M0H�U(H��I��$0H�5�SH)�H)�1��uH��H�߾}[]A\A]�w�H�5�1�vH�MH�UH��I��$0H�5tSH)�H)�1��t�,H���rwH�5aTH�ߺ�>v�[H���Qw�E�#��]H��E1��7w�,H���*w�H�5&TH���u�[H���	wH�}��jH�E(L��H��J��I���G���L9m��jM��tھ,H����v�˺#H�5�0�uH�MH�UH��I��$0H�5�RH)�H)�1���s�,H���v�H�5�RH���Pu�[H���cv�E�������������H�5�RH���u�E� ��x�@��x�]H��E1��v�,H���v�H�5�RH����t�[H����uH�}��^H�E(L��H��J��I������L9m��^M��tھ,H���u�˺%H�5U/�ptH�MH�UH��I��$0H�5^QH)�H)�1��rH�߾,�\uH�ߺH�5KQ�(tH�UL��H��虹��H�߾,�,uH�ߺH�5'Q�sH�U L��H���i���H�߾,�tH�ߺH�5Q��sH�M0H�U(H��I��$0H�5�PH)�H)�1��rH��H�߾}[]A\A]�t�-H�5..�ysH�MH�UH��I��$0H�5gPH)�H)�1��qH�߾,�etH�ߺH�5TP�1sH�UL��H��袸��H�߾,�5tH�ߺH�50P�sH�U L��H���r���H�߾,�tH�ߺH�5P��rH�M0H�U(H��I��$0H�5�OH)�H)�1��
qH��H�߾}[]A\A]�s�,H�5�-�rH�MH�UH��I��$0H�5pOH)�H)�1��pH�߾,�nsH�ߺH�5�O�:rH�UL��H��諷��H�߾,�>sH�ߺH�5\O�
rH�U L��H���{���H�߾,�sH�ߺH�55O��qH�M0H�U(H��I��$0H�5�NH)�H)�1��pH��H�߾}[]A\A]�r�,H�5�3�qH�MH�UH��I��$0H�5yNH)�H)�1���o�,H���wr�H�5OH���CqH�M H�UH��I��$0H�51NH)�H)�1��|o�,H���/r�
H�5�OH���pH�U(H���ІL��H���c���H�߾,�qH�ߺH�5O��pH�M8H�U0H��I��$0H�5�MH)�H)�1��nH��H�߾}[]A\A]�q�H�5�2�spH�MH�UH��I��$0H�5aMH)�H)�1��n�,H���_q�H�5iQH���+pH�M H�UH��I��$0H�5MH)�H)�1��dn�,H���q�
H�5�NH����oH�U(H���G�L��H���K����,H����p�H�5�NH���oH�U0H������I��$0H�M8醶���2H�5x<�{oH�MH�UH��I��$0H�5iLH)�H)�1��m�,H���gpH�5NNH�ߺ�3o�[H���Fp�E���H�߾]�/pH�߾,�"pH�ߺH�5�M��n�UL��H��耖��H�߾,��oH�ߺH�5N�nH�M(H�U H��I��$0H�5�KH)�H)�1��lH�߾,�oH�ߺH�5M�wnH�U0L��H�����H��H�߾}[]A\A]�qo�-H�5�1�@nH�MH�UH��I��$0H�5.KH)�H)�1��ylH��H�߾}[]A\A]�"o�0H�5F5��mH�MH�UH��I��$0H�5�JH)�H)�1��*lH�߾,��nH�ߺH�5?L�m�UL��H���;���H��H�߾}[]A\A]�n�.H�5�4�smH�MH�UH��I��$0H�5aJH)�H)�1��kH�߾,�_nH�ߺH�5�K�+m�UL��H��轔��H��H�߾}[]A\A]�&n�1H�5�3�lH�MH�UH��I��$0H�5�IH)�H)�1��.kH�߾,��mH�ߺH�5CK�l�UL��H���?���H�߾,�mH�ߺH�5�K�~lH�M(H�U H��I��$0H�5lIH)�H)�1��jH�߾,�jmH�ߺH�5�I�6lH�M8H�U0H��I��$0H�5$IH)�H)�1��ojH�߾,�"mH�ߺH�5{J��kH�U@L��H���_���H��H�߾}[]A\A]��l�7H�5l2�kH�MH�UH��I��$0H�5�HH)�H)�1���iH�߾,�lH�ߺH�5J�ok�UL��H������H�߾,�tlH�ߺH�5�J�@kH�M(H�U H��I��$0H�5.HH)�H)�1��yiH�߾,�,lH�ߺH�5K�jH�M8H�U0H��I��$0H�5�GH)�H)�1��1iH�߾,��kH�ߺH�5=I�jH�U@L��H���!���H�߾,�kH�ߺH�5�J�j�UHL��H������H��H�߾}[]A\A]�{k�2H�5�0�JjH�MH�UH��I��$0H�58GH)�H)�1��hH�߾,�6kH�ߺH�5�H�j�UL��H��蔑��H�߾,�kH�ߺH�5-I��iH�M(H�U H��I��$0H�5�FH)�H)�1��hH�߾,�jH�ߺH�5�F�iH�M8H�U0H��I��$0H�5yFH)�H)�1���gH�߾,�wjH�ߺH�5�G�CiH�U@L��H��贮��H��H�߾}[]A\A]�=j�%H�5a/�iH�MH�UH��I��$0H�5�EH)�H)�1��Eg�,H���i�H�5-HH����h�[H����i�E��#m��Dm��߈�H�5#HH���h�E �Fm�]H���i�,H���i�H�5HH���OhH�UL��H������,H���Si�H�5[FH���hH�M(H�U H��I��$0H�5
EH)�H)�1��Xf�,H���i�H�5�EH����gH�U0H���6�L��H���?����,H����h�H�5�EH���gH�M@H�U8H��I��$0H�5�DH)�H)�1���e�,H���h�H�5cGH���VgH�UHH�������D����&H�5`-�3gH�MH�UH��I��$0H�5!DH)�H)�1��le�,H���h�H�5TFH����f�[H���g�E��o��)o�����H�5JFH���f�E �+o�]H���g�,H���g�H�58FH���vfH�UH�����L��H���ޫ���,H���qg�H�5FH���=fH�U H���X�I��$0H�M(H�5%CH��H)�H)�1��md�,H��� g�H�5(DH����eH�M8H�U0H��I��$0H�5�BH)�H)�1��%d�,H����f�H�5�CH���eH�U@H�����L��H�������,H���f�H�5�CH���keH�MPH�UHH��I��$0H�5YBH)�H)�1��c�,H���Wf�H�50EH���#eH�UXH����L��H��苪��H�߾,�fH�ߺH�5EB��dH�MhH�U`H��I��$0H�5�AH)�H)�1��#cH�߾,��eH�ߺH�5/C�dH�UpL��H������H��H�߾}[]A\A]�e�,H�5h*�kdH�MH�UH��I��$0H�5YAH)�H)�1��b�,H���We�H�5�CH���#d�[H���6e�E���j���j��K��H�5�CH����c�E ��j�]H����d�,H����d�H�5pCH���cH�UH����L��H�������,H���d�H�5CCH���ucH�U H����I��$0H�M(H�5]@H��H)�H)�1��a�,H���Xd�H�5`AH���$cH�M8H�U0H��I��$0H�5@H)�H)�1��]a�,H���d�H�5�@H����bH�U@H����~L��H���D����,H����c�H�5�@H���bH�MPH�UHH��I��$0H�5�?H)�H)�1���`�,H���c�H�5hBH���[bH�UXH���W~L��H���ç��H�߾,�VcH�ߺH�55B�"b�U`L��H��贉��H�߾,�'cH�ߺH�5B��aH�MpH�UhH��I��$0H�5�>H)�H)�1��,`H�߾,��bH�ߺH�58@�aH�UxL��H������H��H�߾}[]A\A]�b�&H�5�/�taH�MH�UH��I��$0H�5b>H)�H)�1��_�,H���`b�
H�5�?H���,aH�UH����yL��H��蔦��H�߾,�'bH�ߺH�5.>��`H�M(H�U H��I��$0H�5�=H)�H)�1��,_H�߾,��aH�ߺH�5�>�`H�M8H�U0H��I��$0H�5�=H)�H)�1���^H�߾,�aH�ߺH�5�>�c`H�MHH�U@H��I��$0H�5Q=H)�H)�1��^H��H�߾}[]A\A]�Ea�'H�5).�`H�MH�UH��I��$0H�5=H)�H)�1��M^�,H���a�
H�5�>H����_H�UH���xL��H���4���H�߾,��`H�ߺH�5�<�_H�M(H�U H��I��$0H�5�<H)�H)�1���]H�߾,�`H�ߺH�5�=�K_H�M8H�U0H��I��$0H�59<H)�H)�1��]H�߾,�7`H�ߺH�5P=�_H�MHH�U@H��I��$0H�5�;H)�H)�1��<]H��H�߾}[]A\A]��_�%H�5A,�^H�MH�UH��I��$0H�5�;H)�H)�1���\�,H���_�H�5�=H���l^H�UH����vL��H���ԣ��H�߾,�g_H�ߺH�5l<�3^H�M(H�U H��I��$0H�5!;H)�H)�1��l\H�߾,�_H�ߺH�58<��]H�M8H�U0H��I��$0H�5�:H)�H)�1��$\H��H�߾}[]A\A]��^�(H�5�+�]H�MH�UH��I��$0H�5�:H)�H)�1���[H�߾,�^H�ߺH�5�>�T]H�UL��H���Ţ��H�߾,�X^H�ߺH�5:�$]H�M(H�U H��I��$0H�5:H)�H)�1��][H��H�߾}[]A\A]�^�H�5<A��\H�MH�UH��I��$0H�5�9H)�H)�1��[H�߾,�]H�ߺH�5�9�\H�UL��H�����H�߾,�]H�ߺH�5�9�]\H�U L��H���Ρ��H�߾,�a]H�ߺH�5�9�-\H�M0H�U(H��I��$0H�59H)�H)�1��fZH��H�߾}[]A\A]�]�+H�5)��[H�MH�UH��I��$0H�5�8H)�H)�1��Z�,H����\H�5�:H�ߺ�[�[H���\�E�UkH�߾]�\H�߾,�\H�ߺH�5�9�Q[�UL��H�����H�߾,�V\H�ߺH�5|:�"[H�M(H�U H��I��$0H�58H)�H)�1��[YH�߾,�\H�ߺH�558��ZH�M8H�U0H��I��$0H�5�7H)�H)�1��YH�߾,��[H�ߺH�59�ZH�U@L��H������H��H�߾}[]A\A]�[�$H�5�'E1��XZH�MH�UH��I��$0H�5F7H)�H)�1��X�,H���D[�H�5{8H���Z�[H���#[H�}��DH�E(L��H��J��I���a���L9m��DM��tھ,H����Z�˺*H�5g'�YH�MH�UH��I��$0H�5�6H)�H)�1���WH�߾,�ZH�ߺ
H�5o8�jYH�UL��H���۞��H�߾,�nZH�ߺH�5�6�:YH�M(H�U H��I��$0H�5(6H)�H)�1��sWH�߾,�&ZH�ߺ
H�5:��XH�M8H�U0H��I��$0H�5�5H)�H)�1��+WH�߾,��YH�ߺ
H�5�9�XH�MHH�U@H��I��$0H�5�5H)�H)�1���VH��H�߾}[]A\A]�Y�-H�5`!�[XH�MH�UH��I��$0H�5I5H)�H)�1��VH��H�߾}[]A\A]�=Y�-H�5� E1��	XH�MH�UH��I��$0H�5�4H)�H)�1��BV�,H���X�H�5�5H���WH�M H�UH��I��$0H�5�4H)�H)�1��U�,H���X�H�5
;H���yW�[H���XH�}(��AH�E8L��H��J��I���ʜ��L9m(��AM��tھ,H���NX�˺,H�5��WH�MH�UH��I��$0H�5	4H)�H)�1��TU�,H���X�H�55H����VH�UH���-tI��$0H�M H�5�3H��H)�H)�1��U�,H��E1��W�H�5:H���V�[H���WH�}(��@H�E8L��H��J��I���Л��L9m(��@M��tھ,H���TW�˺,H�5v�!VH�MH�UH��I��$0H�53H)�H)�1��ZT�,H���
W�H�5aH����U�[H����V�E��fe�t�	H�5N9H���U�]H���V�,H���V�H�5�3H���zUH�UH���iI��$0H�M H�5b2H��H)�H)�1��S�,H��E1��ZV�H�5�8H���&U�[H���9VH�}(�n?H�E8L��H��J��I���w���L9m(�M?M��tھ,H���U�˺7H�5���TH�MH�UH��I��$0H�5�1H)�H)�1��S�,H���U�H�5V7H���T�[H���U�E��
c��NYA��
H�5C7H���ET�E��)r� �NY�,H���DU�H�5&7H��I���T�E�@�6a���%Y���_a�,H���U�
H�57H����S�E���#r���:a���_a�,H����T�H�5�6H���S�E�=a�]H��E1��T�,H���T�H�5�1H���SSH�M H�UH��I��$0H�5A0H)�H)�1��Q�,H���?T�H�5�6H���S�[H���TH�}(�dEH�E8L��H��J��I���\���L9m(�CEM��tھ,H����S�˺3H�5��RH�MH�UH��I��$0H�5�/H)�H)�1���P�,H���S�H�5;5H���eR�[H���xS�E���c��VA��
H�5(5H���*R�E��bq� �V�,H���)S�H�55H��I����Q�E�@�}b����U����b�,H����R�
H�5�4H���Q�E����o����b����b�,H���R�H�5�4H���sQ�E��b�]H��E1��yR�,H���lR�H�5t/H���8QH�M H�UH��I��$0H�5&.H)�H)�1��qO�,H���$R�H�5�4H����P�[H���RH�}(�5?H�E8L��H��J��I���A���L9m(�?M��tھ,H����Q�˺!H�5O�PH�MH�UH��I��$0H�5�-H)�H)�1���N�,H���~Q�H�5�2H���JP�[H���]Q�E���U���U���q�H�5�2H���
P�E ��UH�߾]�QH�߾,�	QH�ߺH�5b.��OH�uH��虂H��H�߾}[]A\A]��P�/H�5.�OH�MH�UH��I��$0H�5�,H)�H)�1���MH�߾,�PH�ߺH�5�-�YO�UL��H����v��H�߾,�^PH�ߺH�5�.�*OH�M(H�U H��I��$0H�5,H)�H)�1��cMH�߾,�PH�ߺH�5o-��NH�U0L��H���S���H�߾,��OH�ߺH�5
,�NH�M@H�U8H��I��$0H�5�+H)�H)�1���LH��H�߾}[]A\A]�O�&H�5��cNH�MH�UH��I��$0H�5Q+H)�H)�1��LH��H�߾}[]A\A]�EO�'H�5��NH�MH�UH��I��$0H�5+H)�H)�1��ML�,H���O�H�55-H����M�[H����N�E��rU���U��n�H�5+-H���M�E ��U�]H���N�,H���N�H�5-H���WMH�UH����gL��H��迒���,H���RN�H�5�,H���MH�U H����gI��$0H�M(H�5*H��H)�H)�1��NK�,H���N�H�5	+H����LH�M8H�U0H��I��$0H�5�)H)�H)�1��K�,H���M�H�5�*H���LH�U@H���HeL��H������,H���M�H�5�*H���LLH�MPH�UHH��I��$0H�5:)H)�H)�1��J�,H���8M�H�5,H���LH�UXH����dL��H���l���H�߾,�LH�ߺH�5&)��KH�MhH�U`H��I��$0H�5�(H)�H)�1��JH�߾,�LH�ߺH�5*�KH�UpL��H����H��H�߾}[]A\A]�}L�H�5�-�LKH�MH�UH��I��$0H�5:(H)�H)�1��I�,H���8L�
H�5|-H���KH�UL��H���u����,H���L�
H�5�)H����JH�U H����gL��H���<����,H����K�	H�5-H���JH�M0H�U(H��I��$0H�5�'H)�H)�1���H�,H���K�H�5�,H���SJH�U8H���F���I��$0H�M@�/����&H�5��$JH�MH�UH��I��$0H�5'H)�H)�1��]HH��H�߾}[]A\A]�K�"H�5Z��IH�MH�UH��I��$0H�5�&H)�H)�1��HH�߾,�JH�ߺH�5(�IH�UL��H�����H��H�߾}[]A\A]�J�#H�5��VIH�MH�UH��I��$0H�5D&H)�H)�1��GH�߾,�BJH�ߺ
H�5[+�IH�UL��H������H��H�߾}[]A\A]�J�H�5�*��HH�MH�UH��I��$0H�5�%H)�H)�1��G�,H����I�H�5�*H���HH�UH���W\I��$0H�M H�5w%H��H)�H)�1��F�,H���rI�H�5�(H���>HH�U(L��H��词���,H���BI�H�5<*H���HH�U0H����[I��$0H�M8H�5�$H��H)�H)�1��>F�,H����H�
H�5s&H���GH�U@H����[L��H���%����,H���H�
H�5�)鶔���%H�5��vGH�MH�UH��I��$0H�5d$H)�H)�1��E�,H���bH�H�5�%H���.GH�UH���$dL��H��薌���,H��E1��&H�H�5"%H����F�[H���HH�} �<H�E0L��H��J��I���C���L9m ��;M��tھ,H����G�˺H�5�E1��FH�MH�UH��I��$0H�5#H)�H)�1���D�,H���}G�H�5�$H���IFH�M H�UH��I��$0H�57#H)�H)�1��D�,H���5G�H�51$H���F�[H���GH�}(��7H�E8L��H��J��I���R���L9m(��7M��tھ,H����F�˺ H�5xE1��EH�MH�UH��I��$0H�5�"H)�H)�1���C�,H���F�	H�5�$H���XE�[H���kFH�}��5H�E(L��H��B��I����l��L9m��5M��tھ,H���-F�˺!H�5��DH�MH�UH��I��$0H�5�!H)�H)�1��3CH��H�߾}[]A\A]��E�$H�50E1��DH�MH�UH��I��$0H�5�!H)�H)�1���B�,H���E�H�5[(H���`DH�UL��H���щ���,H���dE�
H�53(H���0D�[H���CEH�} �P.H�E0L��H��J��I��聉��L9m �/.M��tھ,H���E�˺'H�5/��CH�MH�UH��I��$0H�5� H)�H)�1��BH�߾,�DH�ߺH�5"�CH�UL��H�����H�߾,�DH�ߺ
H�5�%�ZCH�U L��H���ˈ��H�߾,�^DH�ߺH�5� �*CH�M0H�U(H��I��$0H�5 H)�H)�1��cAH��H�߾}[]A\A]�D�(H�5��BH�MH�UH��I��$0H�5�H)�H)�1��AH�߾,��CH�ߺH�5 !�BH�UL��H������H�߾,�CH�ߺ
H�5�$�cBH�U L��H���ԇ��H�߾,�gCH�ߺH�5��3BH�M0H�U(H��I��$0H�5!H)�H)�1��l@H��H�߾}[]A\A]�C�'H�5���AH�MH�UH��I��$0H�5�H)�H)�1��@�,H����B�H�5r$H���A�[H���B�E���O���GA��
H�5_$H���aA�E��_� ��G�,H���`B�H�5B$H��I���(A�E�@�Q���aG���4Q�,H���B�
H�5$H����@�E���]^���Q���4Q�,H����A�H�5
$H���@�E�QH�߾]H��H�AH�߾,�AH�ߺH�5��n@H�M�H�U�H��I��$0H�5\H)�H)�1��>H�߾,�ZAH�ߺH�5$�&@H�M�H�U�H��I��$0H�5H)�H)�1��_>H�߾,�AH�ߺH�5+��?H�M�H�U�H��I��$0H�5�H)�H)�1��>H�߾,��@�H��H�5�#�?�"H���@H���|H��I���|L��H�߹H����BH�߾"�v@H��H�߾}[]A\A]�_@�,H�5
�.?H�MH�UH��I��$0H�5H)�H)�1��g=H�߾,�@H�ߺH�5|��>�UL��H���xf��H�߾,��?H�ߺH�5�"�>�U1�H��H�5�.�=H�߾,�?H�ߺH�5��>H�M(H�U H��I��$0H�5pH)�H)�1��<H�߾,�n?H�ߺH�5��:>H�U0L��H��諃��H�߾,�>?H�ߺH�5e�
>H�M@H�U8H��I��$0H�5�H)�H)�1��C<H��H�߾}[]A\A]��>�-H�5`�=H�MH�UH��I��$0H�5�H)�H)�1���;H�߾,�>H�ߺH�5	�s=�UL��H���e��H�߾,�x>H�ߺH�5!�D=�UH��1�H�5�-�;H��H�߾}[]A\A]�9>�H�5<!�=H�MH�UH��I��$0H�5�H)�H)�1��A;H��H�߾}[]A\A]��=�H�5	�<H�MH�UH��I��$0H�5�H)�H)�1���:�,H���=�H�5�H���q<H�UH����OL��H���ف��H�߾,�l=H�ߺH�5s�8<H�M(H�U H��I��$0H�5&H)�H)�1��q:H��H�߾}[]A\A]�=�$H�5E1���;H�MH�UH��I��$0H�5�H)�H)�1��:�,H����<�H�5�H���;�[H���<H�}�O*H�E(L��H��J��I�����L9m�.*M��tھ,H���s<�˺H�5
�@;H�MH�UH��I��$0H�5.H)�H)�1��y9H��H�߾}[]A\A]�"<�"H�5�	��:H�MH�UH��I��$0H�5�H)�H)�1��*9�,H����;�H�5BH���:�[H���;�E���A���A��N[�H�5,H���l:�E ��AH�߾]�u;H�߾,�h;�H��H�5��4:H�uH���lH�߾,�;;H�ߺH�5��:H�u0H����lH��H�߾}[]A\A]�;�H�5`��9H�MH�UH��I��$0H�5�H)�H)�1��8�,H���:H�5H�ߺ
�9�[H���:�E�WK�]H���:�,H���z:�H�5�H���F9H�UH����LL��H���~���,H���A:�H�5bH���
9H�U H���xOL��H���u~��H�߾,�:H�ߺH�5/��8H�M0H�U(H��I��$0H�5�H)�H)�1��
7H��H�߾}[]A\A]�9�!H�5�E1��8H�MH�UH��I��$0H�5pH)�H)�1��6�,H���n9�	H�5wH���:8�[H���M9H�}�5f�H�E(L��H��B��I���_��L9m��4M��tھ,H���
9�˺,H�5w��7H�MH�UH��I��$0H�5�H)�H)�1��6H�߾,��8H�ߺ
H�5��7�UH��1�H�5�'��5H��H�߾}[]A\A]�8�-H�5��U7H�MH�UH��I��$0H�5CH)�H)�1��5H�߾,�A8H�ߺH�5h�
7H�M H�UH��I��$0H�5�H)�H)�1��F5H�߾,�7H�ߺH�5��6H�M0H�U(H��I��$0H�5�H)�H)�1��4H��H�߾}[]A\A]�7�/H�5C�v6H�MH�UH��I��$0H�5dH)�H)�1��4H�߾,�b7H�ߺ	H�5��.6�UH��1�H�5r&�z4H��H�߾}[]A\A]�#7�%H�5�E1���5H�MH�UH��I��$0H�5�H)�H)�1��(4�,H����6�H�5�H���5�[H���6H�}��"H�E(L��H��J��I���z��L9m�"M��tھ,H���|6�˺+H�5>�I5H�MH�UH��I��$0H�57H)�H)�1��3�,H���56�H�5�H���5�[H���6�E��PC���=A��
H�5�H����4�E���S� ��=�,H����5�H�5�H��I���4�E�@�~C����=����C�,H���5�
H�5�H���O4�E����S����C����C�,H���C5�H�5oH���4�E��CH�߾]H��H�5H�߾,�5H�ߺH�5��3H�M�H�U�H��I��$0H�5�H)�H)�1��2H�߾,�4H�ߺH�5g�3H�M�H�U�H��I��$0H�5yH)�H)�1���1H�߾,�w4H�ߺH�5��C3H�M�H�U�H��I��$0H�51H)�H)�1��|1H�߾,�/4�H��H�5��2�"H���4H���voH��I���{oL��H�߹H���(6H�߾"��3H��H�߾}[]A\A]��3�,H�5��
�2H�MH�UH��I��$0H�5�H)�H)�1���0�,H���3�	H�5H���K2H�UH���eIL��H���w���,H���F3�H�5�H���2�U ���.<L��H���Y��H�߾,�3H�ߺH�5���1H�M0H�U(H��I��$0H�5�H)�H)�1��0H�߾,��2H�ߺH�5��1H�M@H�U8H��I��$0H�5�H)�H)�1���/H��H�߾}[]A\A]�u2�3H�5��
�D1H�MH�UH��I��$0H�52H)�H)�1��}/H�߾,�02H�ߺ	H�59�0H�UL��H���mv��H�߾,�2H�ߺH�5���0H�M(H�U H��I��$0H�5�
H)�H)�1��/H�߾,�1H�ߺH�5�0H�U0L��H���u��H�߾,�1H�ߺH�5g�T0�U8L��H����W��H��H�߾}[]A\A]�O1�&H�5��
�0H�MH�UH��I��$0H�5
H)�H)�1��W.�,H���
1�	H�5�H����/H�UH���	GL��H���>u���,H����0�H�56H���/�U ����9L��H���'W��H�߾,�0H�ߺH�56�f/H�M0H�U(H��I��$0H�5TH)�H)�1��-H�߾,�R0H�ߺH�5x�/H�M@H�U8H��I��$0H�5H)�H)�1��W-H��H�߾}[]A\A]�0�'H�5��
��.H�MH�UH��I��$0H�5�H)�H)�1��-H�߾,�/H�ߺH�5
�.�UL��H���V��H�߾,�/H�ߺH�5�
�X.H�M(H�U H��I��$0H�5FH)�H)�1��,H�߾,�D/H�ߺH�5��.H�U0L��H���s��H�߾,�/H�ߺH�5;��-H�M@H�U8H��I��$0H�5�
H)�H)�1��,H��H�߾}[]A\A]��.�(H�5.�
�-H�MH�UH��I��$0H�5
H)�H)�1���+H�߾,�}.H�ߺH�5��I-�UL��H����T��H��H�߾}[]A\A]�D.�!H�5�
�-H�MH�UH��I��$0H�5
H)�H)�1��L+�,H���-�
H�5�
H����,H�UH����BI��$0H�M H�5�	H��H)�H)�1��*�,H���-�H�5
H���z,H�U(L��H����q���,H���~-�
H�5m
H���J,H�U0H����AI��$0H�M8H�52	H��H)�H)�1��z*H�߾,�--H�ߺH�54	�+H�MHH�U@H��I��$0H�5�H)�H)�1��2*H��H�߾}[]A\A]��,�H�5��+H�MH�UH��I��$0H�5�H)�H)�1���)�,H���,�H�5�	H���b+�UL��H����R���,H���g,�H�5�
H���3+H�M(H�U H��I��$0H�5!H)�H)�1��l)�,H���,�H�5�
H����*H�U0H����AL��H���Sp���,H����+�
H�5�	H���*H�U8H���OAL��H���p���,H���+�H�5�	H���y*H�U@H���HAL��H����o���,H��E1��q+�	H�5z	H���=*�[H���P+H�}H�<#DH�EXL��H��B��I���Q��L9mH�#M��tھ,H���
+�˺&H�5O�
��)H�MH�UH��I��$0H�5�H)�H)�1��(H�߾,��*H�ߺH�5(�)�UL��H���$Q��H��H�߾}[]A\A]�*�+H�5��
�\)H�MH�UH��I��$0H�5JH)�H)�1��'H�߾,�H*H�ߺ	H�5Q	�)H�UL��H���n��H�߾,�*H�ߺH�5?��(H�M(H�U H��I��$0H�5�H)�H)�1��'H�߾,��)H�ߺH�5)�(H�U0L��H���
n��H��H�߾}[]A\A]�)�5H�5��
�e(H�MH�UH��I��$0H�5SH)�H)�1��&H�߾,�Q)H�ߺH�5��(�UL��H���O��H�߾,�")H�ߺH�5H��'H�M(H�U H��I��$0H�5�H)�H)�1��'&H�߾,��(H�ߺH�5��'H�M8H�U0H��I��$0H�5�H)�H)�1���%H�߾,�(H�ߺH�5��^'H�U@L��H����l��H�߾,�b(H�ߺH�5A�.'�UHL��H���N��H��H�߾}[]A\A]�)(�0H�5��
�&H�MH�UH��I��$0H�5�H)�H)�1��1%H�߾,��'H�ߺH�5F�&�UL��H���BN��H�߾,�'H�ߺH�5��&H�M(H�U H��I��$0H�5oH)�H)�1��$H�߾,�m'H�ߺH�5��9&H�M8H�U0H��I��$0H�5'H)�H)�1��r$H�߾,�%'H�ߺH�5~��%H�U@L��H���bk��H��H�߾}[]A\A]��&�)H�5o�
�%H�MH�UH��I��$0H�5�H)�H)�1���#�,H���&�H�5H���r%H�UH���1q���`z���-H�5��
�O%H�MH�UH��I��$0H�5=H)�H)�1��#H��H�߾}[]A\A]�1&�,H�5��
�%H�MH�UH��I��$0H�5�H)�H)�1��9#H�߾,��%H�ߺH�5N�$�UL��H���JL��H��H�߾}[]A\A]�%�/H�5��
�$H�MH�UH��I��$0H�5pH)�H)�1��"H�߾,�n%H�ߺH�5��:$�UL��H����K��H�߾,�?%H�ߺH�5e�$H�M(H�U H��I��$0H�5�H)�H)�1��D"H�߾,�$H�ߺH�5��#H�M8H�U0H��I��$0H�5�H)�H)�1��!H�߾,�$H�ߺH�5�{#H�U@L��H����h��H��H�߾}[]A\A]�u$�.H�5��
�D#H�MH�UH��I��$0H�52H)�H)�1��}!H�߾,�0$H�ߺH�5��"�UL��H���J��H��H�߾}[]A\A]�#�%H�5��
��"H�MH�UH��I��$0H�5��
H)�H)�1�� �,H���#�H�5�H���~"H�UH����8L��H����g���,H��E1��v#�H�5��
H���B"H�U L��H���g���,H���F#�H�5}H���"�[H���%#H�}(�Y#H�E8L��H��J��I���cg��L9m(�8#M��tھ,H����"�˺H�5y�
�!H�MH�UH��I��$0H�5��
H)�H)�1���H��H�߾}[]A\A]�"� H�5�
�e!H�MH�UH��I��$0H�5S�
H)�H)�1���,H���Q"�H�5{H���!H�M H�UH��I��$0H�5�
H)�H)�1��V�,H���	"�
H�5��
H���� H�U(H���f9L��H���=f��H�߾,��!H�ߺH�5��
� H�M8H�U0H��I��$0H�5��
H)�H)�1���H��H�߾}[]A\A]�~!�*H�5��
�M H�MH�UH��I��$0H�5;�
H)�H)�1��H�߾,�9!H�ߺH�5`�
� H�M H�UH��I��$0H�5�
H)�H)�1��>H�߾,�� H�ߺH�5�H�U(L��H���.e��H��H�߾}[]A\A]� �H�5��
�H�MH�UH��I��$0H�5t�
H)�H)�1��H�߾,�r H�ߺH�5�
�>�EH��H�5���H��H�߾}[]A\A]�. �"H�5
�
�H�MH�UH��I��$0H�5�
H)�H)�1��6�,H����H�5.H�ߺ
��[H�����E�O0�]H����,H����H�5��
H���pH�UH���q5L��H����c���,H���k�H�5��
H���7H�U H���%4L��H���c��H�߾,�2H�ߺH�5Y�
�H�M0H�U(H��I��$0H�5�
H)�H)�1��7H��H�߾}[]A\A]���H�5?�
�H�MH�UH��I��$0H�5��
H)�H)�1����,H����H�5�
H���gH�UL��H����b���,H���k�
H�5�
H���7H�U L��H���b���,H���;�
H�5��
H���H�U(H���_2L��H���ob���,H����H�5��
H����H�M8H�U0H��I��$0H�5��
H)�H)�1���,H����H�5a�
H���H�MHH�U@H��I��$0H�5t�
H)�H)�1���,H���r�H�5+�
H���>H�UPH���}1I��$0H�MXH�5&�
H��H)�H)�1��nH�߾,�!H�ߺH�5�
��H�MhH�U`H��I��$0H�5�
H)�H)�1��&H��H�߾}[]A\A]���.H�5��
�H�MH�UH��I��$0H�5��
H)�H)�1���H�߾,�H�ߺ	H�5��
�VH�UL��H����`��H�߾,�ZH�ߺH�5��
�&H�M(H�U H��I��$0H�5�
H)�H)�1��_H�߾,�H�ߺH�5k�
��H�U0L��H���O`��H��H�߾}[]A\A]���)H�5��
�H�MH�UH��I��$0H�5��
H)�H)�1���H�߾,�H�ߺH�5��
�_�UL��H����A��H�߾,�dH�ߺH�5��
�0H�M(H�U H��I��$0H�5�
H)�H)�1��iH�߾,�H�ߺH�5C�
��H�M8H�U0H��I��$0H�5�
H)�H)�1��!H�߾,��H�ߺH�5-�
�H�U@L��H���_��H��H�߾}[]A\A]��-H�5N�
�iH�MH�UH��I��$0H�5W�
H)�H)�1��H�߾,�UH�ߺ	H�5^�
�!H�UL��H���^��H�߾,�%H�ߺH�5L�
��H�M(H�U H��I��$0H�5�
H)�H)�1��*H�߾,��H�ߺH�56�
�H�U0L��H���^��H��H�߾}[]A\A]��/H�5g�
�rH�MH�UH��I��$0H�5`�
H)�H)�1��H�߾,�^H�ߺH�5��
�*�UL��H���?��H�߾,�/H�ߺH�5U�
�H�M(H�U H��I��$0H�5��
H)�H)�1��4H�߾,��H�ߺH�5�
�H�M8H�U0H��I��$0H�5��
H)�H)�1���H�߾,�H�ߺH�5��
�kH�U@L��H����\��H�߾,�oH�ߺH�5N�
�;�UHL��H����>��H��H�߾}[]A\A]�6�*H�5��
�H�MH�UH��I��$0H�5��
H)�H)�1��>H�߾,��H�ߺH�5S�
��UL��H���O>��H�߾,��H�ߺH�5�
�H�M(H�U H��I��$0H�5|�
H)�H)�1���H�߾,�zH�ߺH�5��
�FH�M8H�U0H��I��$0H�54�
H)�H)�1��H�߾,�2H�ߺH�5��
�H�U@L��H���o[��H��H�߾}[]A\A]�H��[]A\A]�DH�߾]��H��H�߾}[]A\A]��@�]H����,H����H�5��
�N\��H�߾]�H�߾,�{H�ߺH�5��
�GH�MHH�U@H��I��$0H�55�
H)�H)�1��H��H�߾}[]A\A]�)�]H��E1���,H����H�5_�
H�����[H����H�}0t1H�E@L��H��J��I���-Z��L9m0vM��t޾,H����Ͼ]H����,H����H�5��
H���eH�UHH���B1L��H����Y���,H��E1��]�H�5��
H���)�[H���<H�}Pt1H�E`L��H��J��I���~Y��L9mPvM��t޾,H����Ͼ]H��E1����,H�����H�5G�
H����[H����H�}ht1H�ExL��H��J��I���Y��L9mhvM��t޾,H����Ͼ]H����,H���t�H�5�
H���@H���H����.L��H���X���,H���8�H�5�
H���H���H����^����g���]H����,H����H�59�
H���H�U0H����/L��H���)X���,H��E1���	H�5��
H����[H���H�}8t1H�EHL��H��J��I����W��L9m8vM��t޾,H���b�Ͼ]H���S�,H���F�
H�5'�
H���H�UPH���>&I��$0H�MXH�5��
H��H)�H)�1��B�,H����
H�5��
H���H�U`H����f��I��$0H�Mh�X��H�߾]�H�߾,�H�ߺH�5��
�uH�MHH�U@H��I��$0H�5c�
H)�H)�1��H��H�߾}[]A\A]�W�]H���J�,H���=�H�5��
H���	H�U0H���;$L��H���qV���,H��E1���	H�5��
H�����[H����H�}8t1H�EHL��H��J��I���"V��L9m8vM��t޾,H����Ͼ]H����,H����
H�5o�
H���ZH�UPH����-I��$0H�MXH�5B�
H��H)�H)�1���,H���=�
H�5,�
H���	H�U`H���1-I��$0H�MhH�5��
H��H)�H)�1��9H�߾,��H�ߺH�5�
�H�MxH�UpH��I��$0H�5��
H)�H)�1���
H�߾,�H�ߺH�5��
�pH���L��H����T��H��H�߾}[]A\A]�g�]H���Z�,H���M�H�5'�
H���H�M8H�U0H��I��$0H�5�
H)�H)�1��R
�,H����H�5_�
H����H�U@L��H���BT���,H�����H�5��
H���H�UHH���}'L��H���	T��H�߾,�H�ߺH�5Z�
�hH�MXH�UPH��I��$0H�5V�
H)�H)�1��H�߾,�TH�ߺH�5��
� �U`L��H���5��H��H�߾}[]A\A]�H�߾]�H�߾,�H�ߺH�5�
��
H�MHH�U@H��I��$0H�5��
H)�H)�1��H��H�߾}[]A\A]�H�߾]�H�߾,�H�ߺH�5��
�a
H�MHH�U@H��I��$0H�5O�
H)�H)�1��H��H�߾}[]A\A]�C�]H���6�,H���)�H�5#�
H���H�U@H����!I��$0H�MHH�5��
H��H)�H)�1��%�^X��H�߾]��
H�߾,��
H�ߺH�5��
�H�M8H�U0H��I��$0H�5��
H)�H)�1���
H��H�߾}[]A\A]�t
�]H���g
�,H���Z
�
H�5m�
H���&H�U0H����L��H���Q���,H���!
�H�5B�
H����H�U8H���WL��H���UQ��H�߾,��H�ߺH�5��
�H�MHH�U@H��I��$0H�5��
H)�H)�1���	H�߾,�H�ߺH�5��
�lH�MXH�UPH��I��$0H�5Z�
H)�H)�1��	H��H�߾}[]A\A]�N�]H���A�,H���4�H�5<�
H���H�U0H����I��$0H�M8H�5��
H��H)�H)�1��0	�8����]H�����,H�����H�5�
H���
H�U8H����$L��H���P���,H����H�5��
H���d
H�U@H���S$I��$0H�MHH�5L�
H��H)�H)�1���,H���G�H�5c�
�~W���]H���)�,H����H�5`�
H����	H�U8H����!L��H���PO���,H��E1���
�H�5,�
H���	�[H���
H�}@t1H�EPL��H��J��I���O��L9m@vM��t޾,H���
�Ͼ]H���z
�,H���m
�H�5u�
H���9	H�UXH���RI��$0H�M`H�5!�
H��H)�H)�1��i�,H���
�H�58�
H����H�UhH����]��I��$0H�Mp��O���]H����	�,H����	�H�5�
H���H�M8H�U0H��I��$0H�5��
H)�H)�1����,H���	�H�5��
H���TH�MHH�U@H��I��$0H�5B�
H)�H)�1���,H���@	�
H�5�
H���H�UPL��H���}M���,H���	�H�51�
H����H�UXH����#L��H���DM��H�߾,��H�ߺH�5��
�H�MhH�U`H��I��$0H�5��
H)�H)�1���H��H�߾}[]A\A]��]H���x�,H���k�H�5s�
H���7H�U8H���I��$0H�M@H�5�
H��H)�H)�1��g�,H����H�56�
�����]H����,H�����H�5��
H���H�MhH�U`H��I��$0H�5��
H)�H)�1����,H����H�5��
H���sH�UpH����I��$0H�MxH�5[�
H��H)�H)�1���,H���V�
H�57�
H���"H���H���FI��$0H���H�5�
H��H)�H)�1��L�,H����
H�5��
H����H���H����I��$0H���H�5��
H��H)�H)�1���,H����H�5��
H���tH���H���fI��$0H���H�5V�
H��H)�H)�1���,H���Q�H�5�
H���H���H���
Z��I��$0H�����K���]H����,H����H�5��
H����H�U8H����L��H���3J��H�߾,��H�ߺH�5��
�H�MHH�U@H��I��$0H�5��
H)�H)�1���H�߾,�~H�ߺH�5<�
�JH�MXH�UPH��I��$0H�58�
H)�H)�1��H��H�߾}[]A\A]�,�]H����,H����H�5��
H����H�U8H���bL��H���FI��H�߾,��H�ߺH�5�
�H�MHH�U@H��I��$0H�5��
H)�H)�1���H�߾,�H�ߺH�5O�
�]H�MXH�UPH��I��$0H�5K�
H)�H)�1��H��H�߾}[]A\A]�?H�߾]�2H�߾,�%H�ߺ
H�5��
��H�U0L��H���bH��H��H�߾}[]A\A]���]H�����,H�����H�5�
H���H�M8H�U0H��I��$0H�5��
H)�H)�1����,H����H�5��
H���UH�U@L��H����G���,H���Y�H�5��
H���%H�UHH����I��$0H�MPH�5
�
H��H)�H)�1��U�,H����
H�5��
H����H�UXH��� L��H���<G���,H�����H�5��
H���H�U`H���L��H���G��H�߾,�H�ߺH�5T�
�bH�MpH�UhH��I��$0H�5P�
H)�H)�1��H�߾,�NH�ߺH�5��
��UxL��H���(��H��H�߾}[]A\A]��]H����,H����H�5%�
H����H�M8H�U0H��I��$0H�5��
H)�H)�1����,H����H�5��
H���H�MHH�U@H��I��$0H�5m�
H)�H)�1���,H���k�H�5��
H���7H�MXH�UPH��I��$0H�5%�
H)�H)�1��p��,H���#�
H�56�
H����H�U`H����L��H���WE���,H�����H�5�
H���H�UhH���uK���T���]H����,H����H�5��
H���v�H�U@H����I��$0H�MHH�5^�
H��H)�H)�1���,H���Y�H�5�
H���%�H�UPH���^L��H���D���,H��� �
H�5��
H����H�UXH���L��H���TD���,H�����
H�5��
H���H�U`H���rJ���S���]H����,H����H�5��
H���s�H�U@L��H����C���,H���w��H�5�
H���C�H�UHH���7I��$0H�MPH�5+�
H��H)�H)�1��s��,H���&��H�5B�
H����H�UXH����R��I��$0H�M`��D���H�5h�
H����2H���H�5��
H�����J���H�5��
H����H���H�5��
H���u��H���H�5��
H���\��E�t%�,H���g��H�5��
H���3��E���� ��q���,H���2��H�5��
H����q���H�5_�
H�����E�t%�,H�����H�5H�
H����E���� ��o���,H����H�55�
H����o���,H����H�5F�
H���a��E@�X����,H���j��H�5,�
H���6��2�����A��H�5�
H�����E� ����@���������,H��I�����H�5��
H�����E����������������������4���M�������H�5��
H���t��E�t%�,H�����H�5��
H���K��E��� ������,H���J��H�5��
H����锒�����A��H�5��
H�����E� ������@����ۦ���,H��I�����H�5��
H����E�����������������צ���������M���:�(��H�5�
H���T��E�t%�,H���_��	H�5��
H���+��E���� �����,H���*��
H�5��
H��������TA��H�5��
H�����E� �v����@��	��������,H��I�����H�5��
H����E���v�����������	��������������M����	�	��H�5�
H���4��``���H�5��
H�����E�t%�,H���&��H�5~�
H�����E���� �����,H�����H�5k�
H����ܔ���H�5Q�
H����E�t%�,H����	H�51�
H���{��E��1� �����,H���z��
H�5�
H���F��߽���H�5��
H���-��E�t%�,H���8��H�5��
H�����E��H� �k����,H�����H�5}�
H�����E����H�50�
H����E�t%�,H����H�5�
H����E���� �Ր���,H����H�5�
H���X�鯐���	H�5Y�
H���?��E�t%�,H���J��H�5:�
H�����E��	J���,H������I����!A��H�5��
H�����E� ����@�����A���,H��I�����H�5��
H����E����������������=�����_��M������fD�H�5��
H���<��E�t%�,H���G��H�5��
H�����E���� ��s���,H�����H�5��
H������s���H�5�
H���������H�5��
H���� ���H�5��
H����E�t%�,H����H�5��
H���j��E���D���,H���q��aD���H�5��
H���8��E�t%�,H���C��H�5o�
H�����E���� �,L���,H�����	H�5��
H������L���H�5�
H�����O���H�5��
H�����{���H�5	�
H�����E�t%�,H����H�5��
H���f��E��@� �n���,H���e��H�5��
H���1��m���H�5��
H�����E�t%�,H���#��H�5{�
H������E���� �k���,H������H�5h�
H������j���H�5C�
H�����E�t%�,H�����H�50�
H���x��E��]~���,H�����3~���H�5��
H���F��E�t%�,H���Q��H�5}�
H�����E��k� �I���,H�����	H�5��
H�������H���H�5��
H������y���,H������H�5��
H��I�����E����������������������,H�����H�5��
H���]��E�������������,H���Z��H�5��
H���&�非���H�55�
H���
��X���H�5�
H�������O���
H�5��
H������'Z���
H�5��
H��A����E��S����,H��A����#����
H�5t�
H��A��~��E�������,H��A���逼���
H�56�
H��A��@��E����,H��A��A�����H�50�
H�����O���,H�����H�5��
H��I������E���������Y������,���'�,H������H�5��
H�����E���Y������{����,H�����H�5��
H���_��U����H�5��
H���F��E������,H���O��n����H�5>�
H����钔���,H���$��H�5
�
H��I������E���-������̮�����N
���o�,H������H�5��
H�����E���̮��������,H�����H�5��
H���m��Ȯ���,H���{��H�5d�
H��I���C��E���D���Z������+
���I�,H���/��H�5D�
H�����E���Z������|����,H�����H�5=�
H������V����
H�5��
H��A����E��s����,H��A����C����H�5��
H���m��v���H�5|�
H���T��3���
H�5��
H���;�����H�5J�
H���"���H���
H�5��
H���	�鐴���H�5��
H�������w���H�5 �
H������E�5���,H������Y5���H�5��
H�����m���H�5��
H�����m���H�5��
H���u����H�5��
H���\��I��H�5��
H���C��l���H�5u�
H���*��/l���H�5\�
H�����k���H�5C�
H�����,k���H�5*�
H������H���H�5�
H��������H�5��
H��������H�5��
H�����a����H�5��
H���{��|���H�5��
H���b������H�5��
H���I�����H�5{�
H���0��M����H�5b�
H����鳣���H�5I�
H�����T����H�50�
H������M���H�5�
H������IS���H�5��
H���������H�5��
H�����m;���H�5��
H�����;���H�5��
H���h��sc���H�5��
H���O��e���H�5��
H���6��e���H�5h�
H�����*e���H�5O�
H�����6���H�56�
H���������H�5�
H������1���H�5�
H�����;1���H�5��
H��������H�5��
H��������H�5��
H���n��7���H�5��
H���U��-7���H�5��
H���<������H�5n�
H���#�都���H�5U�
H���
��"y���H�5<�
H����������H�5#�
H������m���H�5
�
H��������H�5��
H�������H�5��
H�����B��H�5��
H���t��z����H�5��
H���[����H�5��
H���B�飾���H�5t�
H���)��Q����H�5[�
H����骾���H�5B�
H��������H�5)�
H���������H�5�
H�����鍶���H�5��
H��������H�5��
H��������H�5��
H���z����H�5��
H���a�����H�5��
H���H��l��H�5z�
H���/��Z���H�5a�
H�����	Y���H�5H�
H�����X���H�5/�
H������,��H�5�
H������j���H�5��
H�����Y����H�5��
H��������H�5��
H��������H�5��
H���g��N����H�5��
H���N�����H�5��
H���5��D����H�5g�
H����骚���H�5N�
H�����u���H�55�
H��������H�5�
H������7��H�5�
H��������H�5��
H�����W��H�5��
H������g���H�5��
H���m��\���H�5��
H���T��[���H�5��
H���;��/[���H�5m�
H���"��/b���H�5T�
H���	���k���H�5;�
H���������H�5"�
H������M���H�5	�
H�����i���H�5��
H�����<i���H�5��
H������h���H�5��
H���s��h���H�5��
H���Z��g����H�5��
H���A�����H�5s�
H���(��1i���H�5Z�
H�����Zl���H�5A�
H���������H�5(�
H������L���H�5�
H������~���H�5��
H�����H~���H�5��
H�����h���H�5��
H���y��<���H�5��
H���`���;���H�5��
H���G��\���H�5y�
H���.��[���H�5`�
H������`���H�5G�
H�����3���H�5.�
H�����雁���H�5�
H����������H�5��
H�����g����H�5�
H��������H�5�
H�����3���H�5��
H���f��a5���H�5��
H���M��4���H�5�
H���4��4���H�5f�
H�����m���H�5M�
H��������H�54�
H���������H�5�
H����������H�5�
H���������H�5�
H�����o���H�5�
H�����݋���,H�����H�5��
H���_��E�������~��������雡���,H��I���G��?��,H���5�����,H��I�������,H���
��H�5�
H������E�������/���������L���D�,H���������,H�����H�5��
H���}��E�����������������Ս��f��,H���c��_���,H���Q�鬦���,H���?�� }���,H���-��Z���,H�����X���,H��I�������,H������z���,H������S���,H��I��������,H�����~6���,H�����H�5��
H���s��E��������-���������J�����,H���[��I7���,H���I��T���,H���7��ww��E1� ������@���A��������!�������E1�������$�M���:����(���� ����2w��� �����{��� �������E1� �J����@�~�A���������m��������E1����������M��������t���� �;��:5��� ����ä��E1� ������@�U�A����B����������a���E1���u����W�M���2���� ���E1� �����@���A��������B���������E1���������M���[����I���è �^��S��� ����^Q��� �L��N���� �[��u5��� ����X��� �a��RU��� ����@����i��� ���[��� ����Ww��f.����H�7H�W�@��UH��SH��H��H���I�H��H�{H��[H��]����UH��SH��H��H����H�H��H�{0H��[H��]���@�w^�����w(����@������G]�ff.�@��@�w\����ATUH��SH��H����H��H����v5�H�=e�
��������H�=O�
H�������t4H��v�H�=4�
H�������t3H��1�[]A\�f�L�b�H�{H�T$L�����H�T$I9�u��EXH���[]A\�@�H�=��
�H�=��
����u��EXH���[]A\�L�b�H�{H�T$L���{�H�T$I9�������ff.���@�w_����@�w`����SH��H��H�sH��wn�H��H�CP[���ff.���H�GPH�vH���ff.�@��SH��H��H�3��(n��CH��H�C[������H�GH�vH���ff.�@��@�w����AUI��H��ATUSH����I�}0�I�}HtLE1�I�UPK�dH�,�H�}t 1�H�EH�[H��H�<��H9]w�H�}I���E�M9eHw�I�}PH��[]A\A]�D�����G(H����AWL�~AVAUATI��USH�����uqA�I��A�D$(A�G����IA�A�D$]A�GA�D$\A�GA�D$XA�A�D$^A�A�D$_A�A�D$`E�wE��u2H��[]A\A]A^A_���L��H�H��I���v����D��I�D$HH��H�D$�vl�I�D$PH��t�H�$I��
H�$A�/�H�IH��H��H�+�Al��CH�CH����A�OI�W�KH��t;E1��f.�H�CD�:L�jK�vI��H�<�L��L���^K�T=L9�u�H�$H�$H9D$����I�D$PI���c�����L��I�|$0H��I�����fD�H��L��[]A\A]A^A_���f���AWAVAUATUSH��L�l$XL�T$@L�t$HH�l$PE�]E��uA�EL�I9�tAA�I�[H�EA�H���	<o�L�%��
��Ic�L�>����1�A�A�A�	A�H��[]A\A]A^A_ø��H9�s#A�{
I�Cu�@H���x�
tH�H9�u����A�A�A�	A�H�EH��1�[]A\A]A^A_��
A�A�A�A�	f.�E1�L�%��
H9�v;�<<�^��<>�H��H�E���A�A�H9�wŋ���
���ir��
���U���A�EH��1�[]A\A]A^A_��A�A�A�A��R����A�A�A�A�	�,����E1�A�A�A��	����A�A�A�A�	����A�A�A�A�����A�A�A�A�	����E1�A�A�A��t����A�A�A�A�	�N����A�A�A�A��(����A�A�A�A������A�A�A�A������A�A�A�A�	����A�A�A�A�����A�A�A�A��j����A�A�A�A��D����
A�A�A�A�	�����A�A�A�A�	����A�A�A�A�	�����A�A�A�A�	����E1�A�A�A�����A�A�A�A�	�c����A�A�A�A��=����A�A�A�A������A�A�A�A�	���E1�A�A�A������A�A�A�A�	����A�A�A�A�����A�A�A�A��\����A�A�A�A��6����A�A�A�A�	�����A�A�A�A�����A�A�A�A������A�A�A�A�����A�A�A�A��x����A�A�A�A��R����	A�A�A�A�	�,����A�A�A�A�	�����A�A�A�A�	�����*���fD<_upH���9H�uPE��tKA�:wEA�Ic�L�>���A����@A����@A��~���@����fD<!t������<*���0<	v)��������1�A�}�}���A�E�p���@I��I���MW��H��A���B�<	�mH��������H��1��DH9�v	�"�H����0H��I�Hc�H�B��B�<	vӋ�����H�MA�$����H��H�E����A�A��p���fD�9��H9��������������P�wKH�
�
Hc�H�>��DA�H�EH��H��]���A�H�E��te��uA�H�E�Ʌ�tK��u�A���t���t��DH�E�X����������A���H�E���A��1�����ff.���1���w
��H�|�
H����AVI��AUI��ATUSH��H��L��X���L������I�6L��H���H��[��I��]A��A\L��H�� A]H�5\�
I�� 1�A^����f�:��VAWAVAUI��ATI��UH��SH��H��(�H���
Hc�H�>��H�5��
H����H�UH�ML��H���0����H�5��H�����L��H������H�5S�
H������E��7�H�5D�
H�����
H�����L��H�����H�5��
H����� H����H�UH�M L��H������H�5��
H���O�H�uH�U 1�H��H)����H�5]�
H���&�L��H�����H�5k�
H����H�}(�w7� H����H�U(H�M0L��H�������H�5��
H�����H�u(H�U0H��1�H)����H�5־
H����L��H�����H�5"�
H����H�}8�s6� H����H�U8H�M@L��H������H�5s�
H���A�H�u8H�U@H��1�H)����H�5O�
H����L��H�����H�5��
H�����
H�����L��M�4$H�5ѽ
���L��H����H�UHL��L��H���W���M�4$L��H�����H�5�
H����H�}P�U�
H�����L��M�4$H�5e��d�L��H���I�H�UPDL��L��H�����M�4$H��([]A\A]A^A_úH�5�
��H�UH�ML��H���;����H�5�H����L��H������H�5��
H������ H�����H�UH�M L��H������H�5ּ
H����H�uH�U 1�H��H)�����H�5��
H���{�L��H���`��H�5&�
H���\�H�}(�cK� H���d�H�U(H�M0L��H���a����H�5O�
H����H�u(H�U0H��1�H)��h��H�5+�
H�����L��H������H�5�
H�����H�}8��J�
H������L��M�4$H�5��
��L��H����H�U8L��L��H���(���M�4$L��H���i��H�5?�
H���e�H�}@�&H�߾ �m�H�U@H�MHL��H���j���H�ߺH�5U�
�&�H�u@H�UHH��1�H)��q�H��(H�ߺ[H�5,�
]A\A]A^A_����H�5��
���H�UH�ML��H������H�5ƳH����L��H�����H�5��
H�����E��U6��x6�H�5�H���p�H�߾
��L��H���H��H��H�5һ
�D�H�߾ �W�H�UH�M L��H���T���H�ߺH�5?�
��H�uH�U 1�H��H)��[��H��H�5�
���L��H������H��H�5��
���H�߾ ���H�U(H�M0L��H������H�ߺH�5ù
��H�u(H�U01�H��H)�����H��H�5��
�k�L��H���P��H��H�5�
�L�H�߾ �_�H�U8H�M@L��H��H��H�X���H�ߺH�5C�
��H�u�H�U�1�H��H)��_��H��H�5�
���L��H�����H�ߺH�5��
����H�5�
H����H���@H��I���EL��H��1�H����H��(H�ߺ[H�5��
]A\A]A^A_�s��H�5�
�b�H�UH�ML��H�������H�5J�H���;�L��H��� ��H�5=�
H����� H���/�H�UH�M L��H���,����H�5�
H�����H�uH�U 1�H��H)��3��H�5��
H����L��H�����H�5s�
H����H�U(1�H��H�5ʸ
���H�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5J�
L���J�L��H���/��H�5}�
H���+�L;t$�L��H��H�5�
HD���H�U8L��L��H��J��E�wM�����H�D$I�$L;4$�y���L��H�����H�5��
H����H�}@�\IH�߾ ��H�U@H�MHL��H�����H�ߺH�5��
�y�H�u@H�UHH��1�H)�����H�5��
H���P�����H�5��
�:�H�UH�ML��H���W����H�5"�H����L��H�����H�5�
H������ H����H�UH�M L��H�������H�5�
H����H�uH�U 1�H��H)����H�5ε
H����L��H���|��H�5<�
H���x��
H�����L��M�4$H�5P�
�S�L��H���8�H�U(L��L��H�����M�4$L��H�����H�5�
H����H�}0�E� H����H�U0H�M8L��H����H�5�
H�����H�u0H�U8H��1�H)����H�5�
H����L��H�����H�5��
H����H�}@�tD�
H�����L��M�4$H�5Y�
�\�L��H���A�H�U@L��L��H�����M�4$L��H��� ��H�5��
H����H�}H�6D�
H���$��L��M�4$H�5�
��L��H�����H�UHL��L��H���o�M�4$L��H�����H�5`�
H���H�}P�mH�߾ ��H�UPH�MXL��H����H�ߺH�5��
�m�H�uPH�UXH��1�H)���H��(H�ߺ[H�5s�
]A\A]A^A_�6��H�5T�
�%�H�UH�ML��H���B�H�5
�H���L��H������
H�5)�
H����H�U1�H��H�5	�
�*�H�EH�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5��
L���L��H���n��H�5��
H���j�L9t$�L��H�R�H�5G�
HD��F�H�U(L��L��H��J��E�wM�����H�D$I�$L;4$�y���L��H�����H��H�5�
�H�߾ �
�H�U0H�M8L��H����H�ߺH�5�
�ÿH�u0H�U8H��1�H)���H��(H�ߺ[H�5ɱ
]A\A]A^A_錿�H�5�
�`�H�5��
�j�H�UL��H��H�M��H��(H�ߺ[H�5J�]A\A]A^A_�5��H�5�
�$�H�UH�ML��H���A�H�5�H���L��H������H�5پ
H���޾�E��>-��c-��KF�H�52�
H��设�
H���L��H�����H�5�
H��肾H�}�?� H��芿H�UH�M L��H�����H�5u�
H���C�H�uH�U H��1�H)���H�5Q�
H����L��H�����H�5�
H���H�}(��>� H����H�U(H�M0L��H�����H�5�
H��輽H�u(H�U0H��1�H)����H�5ʯ
H��蓽L��H���x��H�5�
H���t�H�}8�0>� H���|�H�U8H�M@L��H���y��H�5g�
H���5�H�u8H�U@H��1�H)���H�5C�
H����L��H��H��H���H�ߺH�5�
���H�5	�
H���ռH���]�H��I���b�L��H��1�H����H��(H�ߺ[H�5ͮ
]A\A]A^A_鐼�H�5F�
��H�UH�ML��H�����H�5g�H���X�L��H���=��H�5Z�
H���9�� H���L�H�UH�M L��H���I��H�57�
H����H�uH�U 1�H��H)��P��H�5�
H���ܻL��H�����H�5��
H��轻H�}(��;� H���żH�U(H�M0L��H������H�5��
H���~�H�u(H�U0H��1�H)��ɾ�H�5��
H���U�L��H���:��H�5i�
H���6�H�}8�*;�
H���>��L��M�4$H�5�
��L��H�����H�U8L��L��H����M�4$L��H������H�5��
H���ƺH�}@�i;� H���λH�U@H�MHL��H������H�5��
H��臺H�u@H�UHH��1�H)��ҽ�H�5��
H���^�L��H���C��
H�5g�
H���?�H�}P���H��(H�ߺ[H�5˯]A\A]A^A_���H�5��
M��X�A���H�uL����A���H�uL��I�����L��D��H��I��A��1�H�� I�� H�5��
���H�5��H��蘹L��H���}��H�5��
H���y��E��6(��[(��<B�H�5{�H���I��E t!�,H���V��H�5˴
H���"��
H���5�L��H�����H�5��
H���H�}�59� H���H�UH�M L��H�����H�5�
H��跸H�uH�U H��1�H)����H�5Ū
H��莸L��H���s��H�5��
H���o�� H��肹H�U(H�M0L��H�����H�5m�
H���;�H�u(H�U01�H��H)�膻�H�5I�
H����L��H�����H�5��
H����H�}8�8� H���H�U8H�M@L��H�����H�5�
H��贷H�u8H�U@H��1�H)���H�5©
H��苷L��H��H��H�l�H�ߺH�5��
�h��H�5��
H���T�H�����H��I�����L��H��1�H��葺H��(H�ߺ[H�5L�
]A\A]A^A_���H�5��
M��X�A���H�uL�����A���H�uL��I�����L��D��H��I��A��1�H�� I�� H�5��
�	��H�5��H��蕶L��H���z��	H�5��
H���v�H�U1�H��H�5��
�H�EH�$H����H��E1�E1�H�D$I�$H�D$H��D��I�ǺH�5�L����L��H�����H�5N�
H���L9t$�L��H��H�5٧
HD��صI�W(L��L��H��J��D�uL���[�H�D$I�$L;4$�y����e��H�5�
M��X苵A���H�uL����A���H�uL��I���r�L��D��H��I��H�� A��1�I�� H�5*�
蝳�H�58�H���)�L��H�����H�5w�
H���
�� H����A���H�uL����A���H�u L��I�����L��D��H��I��A��1�H�� I�� H�5��
���H�5ͦ
H��蛴H�uH�U 1�H��H)����H�5��
H���r�L��H���W��H�5�
H���S�H�}(�����
H���[��L��M�4$H�5$��#�L��H����H�U(��� H�5K�
M��X�A���H�uL�����A���H�uL��I�����L��D��H��I��A��H�� 1�H�5��
I�� �	�H��(H�ߺ[H�5��]A\A]A^A_釳� H�5��
M��X�o�A���H�uL���l�A���H�uL��I��M��@�O�L��D��H��I��H�� A��1�I�� H�5�
E1��w��H�5�H����L��H�����H�5��
H�����H�5�pH���в1�H�}��H�U(L���4���H�5ڦ
H��H�PH�1��A�FI��H;E��E��túH�5p�H��H�$�k�H�$륺#H�51�
M��X�M�A���H�uL���J�A���H�uL��I���4�L��D��H��I��A��1�H�� I�� H�5�
�_��H�5��H����L��H���м�H�5Կ
H���̱�E��� ��
!�� 9�H�5��
H��蜱�
H��诲L��H���t��
H�5��
H���p��
H��胲�L��M�4$H�5L��K�L��H���0�H�U����H�5��
M��X��A���H�uL����A���H�uL��I����L��D��H��I��A��H�� 1�H�5¢
I�� �1�H��(H�ߺ[H�5ě]A\A]A^A_鯰�H�5W�
M��X藰A���H�uL����A���H�uL��I���~�L��D��H��I��H�� A��1�I�� H�56�
詮�H�5D�H���5�L��H�����H�57�
H����� H���)�A���H�uL����A���H�u L��I�����L��D��H��I��A��1�H�� I�� H�5��
���H�5١
H��觯H�uH�U 1�H��H)����H�5��
H���~�L��H���c��H�5��
H���_�H�}(���������H�5߭
M��X�7�A���H�uL���4�A���H�uL��I����L��D��H��I��A��H�� 1�H�5ڠ
I�� �I�H��(H�ߺ[H�5ܙ]A\A]A^A_�Ǯ�H�5s�
M��X诮A���H�uL����A���H�uL��I����L��D��H��I��H�� A��1�I�� H�5N�
��H�5\�H���M�L��H���2��H�5�
H���.��E�w�H�5��
H�����
H���#�L��H�����	H�5�
H�����E�����H�5x�H���ŭL��H��誸�
H�5�
H��覭H�} �.� H��议H�U H�M(L��H������H�5��
H���g�H�u H�U(H��1�H)�貰�H�5u�
H���>�L��H���#��H��H�5��
��H�߾ �2�A���H�u0L����A���H�u8L��I����L��D��H��I��A��1�H�� I�� H�5��
�$�H�ߺH�5ߞ
谬H�u0H�U8H��1�H)��H��(H�ߺ[H�5��
]A\A]A^A_�y��H�5Ѫ
M��X�a�A���H�uL���^�A���H�uL��I���H�L��D��H��I��A��1�H�� I�� H�5�
�s��H�5�H���L��H�����H�5�
H����� H����A���H�uL�����A���H�u L��I����L��D��H��I��A��1�H�� I�� H�5r�
���H�5��
H���q�H�uH�U 1�H��H)�輮�H�5�
H���H�L��H���-��H�5��
H���)�H�U(1�H��H�5S�
�t�H�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5Ӝ
L���ӪL��H��踵�H�5�
H��贪L9t$�L��H���H�5��
HD�萪H�U8L��L��H��J��E�wM�����H�D$I�$L;4$�y���L��H���E��H�5��
H���A�H�}@��-� H���I�H�U@H�MHL��H���F���H�54�
H����H�u@H�UHH��1�H)��M��H�5�
H���٩L��H��辴�H�5O�
H��躩H�}P�K-�
H���ª�L��M�4$H�5��
芩L��H���o�H�UPL��L��H���
��M�4$L��H���N��H�5��
H���J�H�}X��,�
H���R��L��M�4$H�5�
��L��H���H�UXL��L��H�����M�4$L��H���޳�H�5Ƣ
H���ڨH�}`�s����H�5�
M��X貨A���H�uL����A���H�uL��I����L��D��H��I��A��H�� 1�H�5U�
I�� �ĦH��(H�ߺ[H�5W�]A\A]A^A_�B��H�5Q�
M��X�*�A���H�uL���'�A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5ə
�<��H�5גH���ȧL��H��譲�H�5�
H��詧�E��$��I���1�H�5��H���y��E t!�,H��膨�H�5��
H���R�H�߾
H���a�L��H���&�H�ߺ
H�5p�
�"��H�5B�
H����H����H��I����L��H��1�H���K�H��(H�ߺ[H�5�
]A\A]A^A_�ɦ� H�5M�
M��X豦A���H�uL����A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5P�
�ä�H�5^�H���O�L��H���4��H�5��
H���0��
H���C��L��M�<$H�5�
��L��H����H�UL��L��H�����M�<$L��H���ϰ�H�5�
H���˥� H���ަA���H�u L����A���H�u(L��I����L��D��H��I��A��1�H�� I�� H�5]�
��H�5��
H���\�H�u H�U(1�H��H)�觨�H�5j�
H���3�L��H�����H�5i�
@H�����
H���#��L��M�4$H�5���L��H���ЯH�U0����#H�53�
M��X迤A���H�uL����A���H�uL��I����L��D��H��I��H�� A��1�I�� H�5^�
�Ѣ�H�5l�H���]�L��H���B��H�5�
H���>��E��H�5
�
H��� �H�߾
�3�L��H����	H��H�5�
��H�߾ ���uI��@踷H��H�5��
H�PH�1�� �H��(H�߾
[]A\A]A^A_�Ť�*H�5Ѱ
M��X荣A���H�uL����A���H�uL��I���t�L��D��H��I��H�� A��1�I�� H�5,�
蟡�H�5:�H���+�L��H�����H�5�
H�����E�(�H�5ۗ
H����H�߾
��L��H���ƭ�	H��H�5�
�¢H�߾ �գ�uI��@膶H��H�5̖
H�H�P1���H�߾
衣L��H���f��
H��H�5��
�b�H�߾ �u�A���H�u L���R�A���H�u(L��I���<�L��D��H��I��A��1�H�� I�� H�5�
�g�H�ߺH�5"�
��H�u H�U(H��1�H)��>�H��(H�ߺ[H�5��
]A\A]A^A_鼡�%H�5Ш
M��X褡A���H�uL����A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5C�
趟�H��H�5N��B�L��H���'��	H��H�5N�
�#�H�߾ �6��uI��@��H��H�5-�
H�H�P1��O�H�߾
��L��H���ǫ�
H��H�5��
�àH�߾ �֡A���H�u L����A���H�u(L��I����L��D��H��I��A��1�H�� I�� H�5U�
�ȞH�ߺH�5��
�T�H�u H�U(1�H��H)�蟣�H��H�5_�
�+�L��H�����
H��H�5�
��H�߾
���L��M�<$H�5�
��L��H���̪H�U0L��L��H���j��M�<$L��H��諪�H��H�5�
觟H�߾ 躠A���H�u8L����A���H�u@L��I����L��D��H��I��A��1�H�� I�� H�59�
謝H�ߺH�5g�
�8�H�u8H�U@H��1�H)�胢H��(H�ߺ[H�5>�
]A\A]A^A_���#H�5ũ
M��X��A���H�uL�����A���H�uL��I�����L��D��H��I��A��1�H�� I�� H�5��
��H��H�5��臞L��H���l��	H��H�5��
�h�H�߾ �{��uI��@�,�H��H�5r�
H�PH�1�蔜H�߾
�G�L��H����H�ߺ
H�5�
���UH��(H��H�5}|	[1�]A\A]A^A_�F��&H�5��
M��X�ΝA���H�uL�����A���H�uL��I����L��D��H��I��H�� A��1�I�� H�5m�
���H��H�5x��l�L��H���Q��
H��H�5��
�M�H�߾ �`�A���H�uL���=�A���H�u L��I���'�L��D��H��I��A��1�H�� I�� H�5ߎ
�R�H�ߺH�5
�
�ޜH�uH�U 1�H��H)��)��H��H�5�
赜L��H��蚧�H��H�5�
薜H�߾ 詝A���H�u(L����A���H�u0L��I���p�L��D��H��I��A��1�H�� I�� H�5(�
蛚H�ߺH�5V�
�'�H�u(H�U0H��H)�1��r��H��H�52�
�L��H�����
H��H�5�
�ߛH�߾
���L��M�4$H�5��
躛L��H��蟦H�U8L��L��H���=��M�4$L��H���~��	H��H�5��
�z�H�߾ 荜�u@I��@�>�H��H�5��
H�PH�1�覙H�߾
�Y�L��H����H�ߺ
H�5'�
���UDH��(H��H�5�y	[1�]A\A]A^A_�X��,H�5d�
M��X��A���H�uL�����A���H�uL��I�����L��D��H��I��H�� A��1�I�� H�5�
���H��H�5���~�L��H���c��
H��H�5��
�_�H�߾ �r�A���H�uL���O�A���H�u L��I���9�L��D��H��I��A��1�H�� I�� H�5�
�d�H�ߺH�5�
��H�uH�U 1�H��H)��;��H��H�5��
�ǙL��H��謤�H��H�5�
訙H�߾ 軚A���H�u(L����A���H�u0L��I����L��D��H��I��A��1�H�� I�� H�5:�
譗H�ߺH�5h�
�9�H�u(H�U0H��H)�1�脜�H��H�5D�
��L��H����
H��H�5�
��H�߾
���L��M�4$H�5Ɋ
�̘L��H��豣H�U8L��L��H��I��@�H��M�4$L��H��艣�	H��H�5��
腘H�߾ 蘙�u@L���M�H��H�5��
H�H�P1�赖H�߾
�h�L��H���-��H��H�5Y�
�)�H�߾ �<��uDL����H��H�57�
H�PH�1��Y�H�߾
��L��H���ѢH�ߺ
H�5ړ
�͗�UHH��(H��H�5Bv	[1�]A\A]A^A_���'H�5�
蚗H�UH�ML��H������H��H�5��s�L��H���X��
H��H�5��
�T�H�߾ �g�H�UH�M L��H���d��H�ߺH�5O�
� �H�uH�U 1�H��H)��k��H��H�5+�
�L��H���ܡ�H��H�5B�
�ؖH�߾ ��H�U(H�M0L��H������H�ߺH�5ӈ
褖H�u(H�U01�H��H)����H��H�5��
�{�L��H���`��
H��H�5_�
�\�H�߾
�o��L��M�4$H�54�
�7�L��H����H�U8L��L��H�����M�4$L��H����	H��H�5"�
�H�߾ �
��u@I��@軩H��H�5�
H�PH�1��#�H�߾
�֖L��H��蛠H�ߺ
H�5��
藕�UDH��(H��H�5t	[1�]A\A]A^A_�Փ�H�5X�
�d�I��XA���H�uH��I��H�D$�R�A���H�uL��I��M��@�5�L��D��H��I��H�� A��1�I�� H�5�
E1��]��H�5�H����L��H����H�5�
H���ʔ�H�5�RH��趔1�H�}�L�f�H�U(L���4��q�H�5��
H��H�PH�1��ْA�FI��H;E��E��túH�5P�H��H�$�K�H�$륺&H�5a�
M��X�-�A���H�uL���*�A���H�uL��I����L��D��H��I��H�� A��1�I�� H�5̅
�?��H�5�~H���˓L��H��谞�H�5��
H��謓�E��H�5{�
H��莓�
H��衔L��H���f��	H�5��
H���b��U������H�5��H���C�L��H���(��
H�5c�
H���$�H�} �� H���,�H�U H�M(L��H���)���H�5�
H����H�u H�U(H��1�H)��0��H�5�
H��輒L��H��衝�H��H�5�
蝒H�߾ 谓A���H�u0L����A���H�u8L��I���w�L��D��H��I��A��1�H�� I�� H�5/�
袐H�ߺH�5]�
�.�H�u0H�U8H��1�H)��y�H��(H�ߺ[H�54�
]A\A]A^A_��H�5��
M��X�ߑA���H�uL�����A���H�uL��I�����L��D��H��I��H�� A��1�I�� H�5~�
���H�5�|H���}�L��H���b��H�5.�
H���^��E���H�5*�
H���@��
H���S�L��H�����
H�5��
H����H�U1�H��H�5>�
�_�H�EH�$H������H��E1�E1�H�D$I�$H�D$H��D��I�ǺH�5��L��蹐L��H��螛�H�5�
H��蚐L9t$�L��H���H�5w�
HD��v�I�W(L��L��H��J��D�uL�����H�D$I�$L;4$�y�������H�5=�
M��X�)�A���H�uL���&�A���H�uL��I����L��D��H��I��A��H�� 1�H�5́
I�� �;�H��(H�ߺ[H�5�z]A\A]A^A_鹏�(H�55�
訏H�UH�ML��H�������H��H�5�z聏L��H���f��	H��H�5��
�b�H�߾ �u��uI��@�&�H��H�5l�
H�PH�1�莍H��(H�߾
[]A\A]A^A_�3��&H�5g�
��H�UH�ML��H�������H��H�5�y�ێL��H����	H��H�5�
輎H�߾ �Ϗ�uI��@耢H��H�5Ƃ
H�PH�1���H��(H�߾
[]A\A]A^A_鍏�)H�5��
M��X�U�H�UH�ML��H���r����H�5=yH���.�L��H�����	H�5=�
H����� H���"��uI��@�ӡH�5�
H��H�H�P1��;��
H����L��H��賘�
H�5�
H��词� H���ŽA���H�u L����A���H�u(L��I����L��D��H��I��A��1�H�� I�� H�5A
贋�H�5r
H���@�H�u H�U(1�H��H)�苐�H�5N
H����L��H����H�5e
H���� H����A���H�u0L�����A���H�u8L��I�����L��D��H��I��A��1�H�� I�� H�5�~
��H�5�~
H��艌H�u0H�U81�H��H)��ԏ�H�5�~
H���`�L��H���E��
H�5G�
H���A��
H���T��L��M�4$H�5~��L��H����H�U@����/H�5��
M��X��A���H�uL�����A���H�uL��I�����L��D��H��I��A��1�H�� I�� H�5�}
M��@��H��H�5�v臋L��H���l��	H��H�5�
�h�H�߾ �{��uL���0�H��H�5v
H�H�P1�蘉H�߾
�K�L��H�����
H��H�5H�
��H�߾ ��A���H�u L����A���H�u(L��H�$���L�$H��H�5�|
I��A��1�L��D��I�� H�� ��H�ߺH�5�|
蘊H�u H�U(1�H��H)����H��H�5�|
�o�L��H���T��H��H�5��
�P�H�߾ �c�A���H�u0L���@�A���H�u8L��H�$�)�L�$H��H�5�{
I��A��1�L��D��I�� H�� �P�H�ߺH�5|
�܉H�u0H�U81�H��H)��'��H��H�5�{
賉L��H��蘔�
H��H�5�}
蔉H�߾
觊�L��M�4$H�5l{
�o�L��H���T�H�U@L��L��H����M�4$L��H���3��H��H�5_
�/�H�߾ �B��uHL���H��H�5=}
H�PH�1��_�H��(H�߾
[]A\A]A^A_���*H�5��
H��M��X�ɈA���H�uL����A���H�uL��I���L��D��H��I��A��H�� 1�H�5lz
I�� �ۆ�H�5vsH���g�L��H���L��	H��H�5s|
�H�H�߾ �[��uI��@��H��H�5R|
H�H�P1��t�H�߾
�'�L��H����H�ߺ
H�5$}
��� H����4����H�5>�
M��X辇A���H�uL��軿A���H�uL��I��西L��D��H��I��A��1�H�� I�� H�5]y
�Ѕ�H�5krH���\�L��H���A��H�5�|
H���=��E��<���a�����H�5�|
H���
��E t!�,H�����H�5�|
H�����
H���L��H��辑�
H�5v|
H��躆�
H���͇�L��M�<$H�5�x
蕆L��H���z�H�UL��L��H������M�<$L��H���Y��H�5�y
H���U�� H���h�A���H�u L���E�A���H�u(L��I���/�L��D��H��I��A��1�H�� I�� H�5�w
�Z��H�5x
H����H�u H�U(1�H��H)��1��H�5�w
H��轅L��H��袐�H�5�x
H��螅H�}0���
H��覆�L��M�<$H�5kw
�n�L��H���S�H�U0L��L��H����M�<$L��H���2��H�5�x
H���.�� H���A�A���H�u8L����A���H�u@L��I����L��D��H��I��A��1�H�� I�� H�5�v
�3��H�5�v
H��迄H�u8H�U@1�H��H)��
��H�5�v
H��薄L��H���{��
H�5�z
H���w�H�}H�8���
H�����L��M�4$H�5Hv�G�L��H���,�H�UH����H�5׋
H��M��X��A���H�uL����A���H�uL��I���L��D��H��I��A��1�H�� I�� H�5�u
�*��H�5�nH��趃L��H��蛎�H�5�x
H��藃�E�����������
�H�5�x
H���g��E t!�,H���t��H�5�x
H���@��
H���S�L��H�����
H�5�x
H����H�}�k��
H�����L��M�<$H�5�t
��L��H���ɍH�UL��L��H���g���M�<$L��H��訍�H�5nx
H��褂H�} ���� H��謃H�U H�M(L��H��詳���H�5�t
H���e�H�u H�U(H��1�H)�谅�H�5st
H���<�L��H���!��H�5�u
H����� H���0�A���H�u0L���
�A���H�u8L��I���L��D��H��I��A��1�H�� I�� H�5�s
�"��H�5�s
H��讁H�u0H�U81�H��H)���H�5�s
H��腁L��H���j��H�5�t
H���f�H�}@����
H���n��L��M�<$H�53s
�6�L��H����H�U@L��L��H��蹲��M�<$L��H����H�5�t
H���� H���	�A���H�uHL����A���H�uPL��I���иL��D��H��I��A��1�H�� I�� H�5�r
�~�H�5�r
H��臀H�uHH�UP1�H��H)��҃�H�5�r
H���^�L��H���C��
H�5gv
H���?�H�}X�K��
H���G��L��M�<$H�5r
��L��H����H�UXL��L��H��蒱��M�<$L��H���ӊ�H�5<r
H����� H����A���H�u`L��迷A���H�uhL��I��詷L��D��H��I��A��1�H�� I�� H�5aq
��}�H�5�q
H���`H�u`H�Uh1�H��H)�諂�H�5nq
H���7L��H�����
H�5s
H����
H���+��L��M�4$H�5�p��~L��H���؉H�Up鏳���$H�5[�
M��X��~A���H�uL���ĶA���H�uL��I��讶L��D��H��I��A��1�H�� I�� H�5fp
��|�H�5tiH���e~L��H���J��H�5�s
H���F~�E���������U�H�5�s
H���~�E t!�,H���#�H�5�s
H����}�
H���L��H���Lj�
H�5s
H����}H�}���
H����~�L��M�<$H�5�o
�}L��H���x�H�UL��L��H������M�<$L��H���W��H�5s
H���S}H�} �5� H���[~H�U H�M(L��H���X����H�5Fo
H���}H�u H�U(H��1�H)��_��H�5"o
H����|L��H���Ї�H�5]p
H����|� H����}A���H�u0L��輴A���H�u8L��I��覴L��D��H��I��A��1�H�� I�� H�5^n
��z�H�5�n
H���]|H�u0H�U81�H��H)���H�5kn
H���4|L��H�����H�5Ho
H���|H�}@���
H���}�L��M�<$H�5�m
��{L��H���ʆH�U@L��L��H���h���M�<$L��H��詆�H�5Go
H���{� H���|A���H�uHL��蕳A���H�uPL��I����L��D��H��I��A��1�H�� I�� H�57m
�y�H�5hm
H���6{H�uHH�UP1�H��H)��~�H�5Dm
H���
{L��H�����
H�5q
H����zH�}X����
H���{�L��M�<$H�5�l
�zL��H��装H�UXL��L��H���A���M�<$L��H��肅�H�5�p
H���~z� H���{�u`I��@�B�H�5�n
H��H�H�P1��x�
H���]{L��H���"��H�5fp
H���z� H���1{A���H�uhL����A���H�upL��I���L��D��H��I��A��1�H�� I�� H�5�k
�#x�H�5�k
H���yH�uhH�Up1�H��H)��|�H�5�k
H���yL��H���k��
H�5mm
H���gy�
H���zz�L��M�4$H�5Ck�ByL��H���'�H�Ux�ޭ���%H�5�
M��X�yA���H�uL����A���H�uL��I���L��D��H��I��A��H�� 1�H�5�j
I�� �(wH��(H�ߺ[H�5�c]A\A]A^A_�x�%H�5R�
M��X�xA���H�uL��L�|$膰A���H�uL��I���p�L��D��H��I��A��1�H�� I�� H�5(j
�v�H�56cH���'xL��H�����H�5�k
H���x� H���yA���H�uL���A���H�u L��I����L��D��H��I��A��1�H�� I�� H�5�i
�
v�H�5�i
H���wH�uH�U 1�H��H)���z�H�5�i
H���pwL��H���U��
H�5�r
H���QwH�U(1�H��H�5{j
�uH�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�h
L���vL��H�����H�5.j
H����vL9t$�L��H��hH�5�h
HD��vH�U8L��L��H��J��E�wM���;���H�D$I�$L;4$�y���L��H���m��H��H�5j
�ivH�߾ �|wL�|$A���H�u@L���T�A���H�uHL��I���>�L��D��H��I��A��1�H�� I�� H�5�g
�itH�ߺH�5$h
�uH�u@H�UHH��1�H)��@yH��(H�ߺ[H�5�g
]A\A]A^A_�u�$H�5B
M��X�uA���H�uL��裭A���H�uL��I��荭L��D��H��I��H�� A��1�I�� H�5Eg
�s�H�5S`H���DuL��H���)��H�5�h
H���%uH�}���� H���-vH�UH�M L��H���*����H�5g
H����tH�uH�U H��1�H)��1x�H�5�f
H���tL��H����
H�5<p
H���tH�U(1�H��H�5�g
��rH�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5Hf
L���HtL��H���-�H�5{g
H���)tL9t$�L��H�fH�5f
HD��tH�U8L��L��H��J��E�wM��舥��H�D$I�$L;4$�y���L��H���~�H�5Xg
H���sH�}@�w���H�߾ �tH�U@H�MHL��H��軤��H�ߺH�5�e
�wsH�u@H�UHH��1�H)���vH��(H�ߺ[H�5}e
]A\A]A^A_�@s�$H�5t|
M��X�(sA���H�uL���%�A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5�d
�:q�H�5�]H����rL��H���}� H�5|
H���r�E��A���d��H�5*:H���r�
H���sL��H���W}�H�5�e
H���SrH�}���� H���[sH�UH�M L��H���X����H�5Fd
H���rH�uH�U H��1�H)��_u�H�5"d
H����qL��H����|�
H�5jm
H����qH�U(1�H��H�5�d
�pH�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5vc
L���vqL��H���[|�H�5�d
H���WqL;t$�L��H�?cH�54c
HD��3qH�U8L��L��H��J��E�wM��趢��H�D$I�$L;4$�y���L��H����{�H�5�d
H����pH�}@�����H�߾ ��qH�U@H�MHL��H�����H�ߺH�5�b
�pH�u@H�UHH��1�H)���sH��(H�ߺ[H�5�b
]A\A]A^A_�np�H�5�w
�6��H�5�j
M��X�EpA���H�uL���B�A���H�uL��I���,�L��D��H��I��A��1�H�� I�� H�5�a
�Wn�H�5�ZH����oL��H����z�H�5j
H����o�
H����p�L��M�<$H�5�a
�oL��H���zH�UL��L��H���"���M�<$L��H���cz�H�5�c
H���_oH�} �"��
H���gp�L��M�<$H�5,a
�/oL��H���zH�U L��L��H��負��M�<$L��H����y�H�5Qi
H����n� H���pA���H�u(L���ߦA���H�u0L��I���ɦL��D��H��I��A��1�H�� I�� H�5�`
��l�H�5�`
H���nH�u(H�U01�H��H)���q�H�5�`
H���WnL��H���<y�
H�5�h
H���8nH�}8�����H�߾ �@oH�U8H�M@L��H���=���H�ߺH�5(`
�mH�u8H�U@H��1�H)��DqH��(H�ߺ[H�5�_
]A\A]A^A_��m�H�5�t
M��X�mA���H�uL��觥A���H�uL��I��葥L��D��H��I��A��H�� 1�H�5M_
I�� �kH��(H�ߺ[H�5OX]A\A]A^A_�:m�H�5Kg
M��X�"mA���H�uL����A���H�uL��I���	�L��D��H��I��A��1�H�� I�� H�5�^
�4k�H�5�WH���lL��H���w�
H�5�`
�,����/H�5�u
�lI��XA���H�uH��I��H�D$聤A���H�uL��I���k�L��D��H��I��A��1�H�� I�� H�5#^
�j�H�51WH���"lL��H���w�H�5�f
H���l�E������������H�5�f
H����k�E� �'��@��������,H����l�H�5�f
H���k�E���<���������g��,H���l�H�5�f
H���Vk�E���<����B��
H���SlL��H���v�H�5�^
H���k� H���'lL�|$A���H�uL���A���H�u L��I����L��D��H��I��A��1�H�� I�� H�5�\
�i�H�5�\
H���jH�uH�U 1�H��H)���m�H�5�\
H���wjL��H���\u�
H�5�e
H���XjH�U(1�H��H�5�]
�hH�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5\
L���jL��H����t�H�55]
H����iL9t$�L��H��[H�5�[
HD��iH�U8L��L��H��J��E�wM���B���H�D$I�$L;4$�y���L��H���tt�H��H�5]
�piH�߾ �jL�|$A���H�u@L���[�A���H�uHL��I���E�L��D��H��I��A��1�H�� I�� H�5�Z
�pgH�ߺH�5+[
�hH�u@H�UHH��1�H)��GlH��(H�ߺ[H�5[
]A\A]A^A_��h�+H�5�q
�hI��XA���H�uH��I��H�D$袠A���H�uL��I��茠L��D��H��I��A��1�H�� I�� H�5DZ
�f�H�5RSH���ChL��H���(s�H�5c
H���$h�E��L���q���T��H�5c
H����g�E� ����@������p��,H����h�H�5�b
H���g�E�����������q��,H���h�H�5�b
H���wg�E����������
H���thL��H���9r�H�5�Z
H���5g� H���HhL�|$A���H�uL��� �A���H�u L��I���
�L��D��H��I��A��1�H�� I�� H�5�X
�5e�H�5�X
H���fH�uH�U 1�H��H)��j�H�5�X
H���fL��H���}q�
H�5b
H���yfH�U(1�H��H�5�Y
��dH�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5#X
L���#fL��H���q�H�5VY
H���fL9t$�L��H��WH�5�W
HD���eH�U8L��L��H��J��E�wM���c���H�D$I�$L;4$�y���L��H���p�H��H�50Y
�eH�߾ �fL�|$A���H�u@L���|�A���H�uHL��I���f�L��D��H��I��A��1�H�� I�� H�5W
�cH�ߺH�5LW
�eH�u@H�UHH��1�H)��hhH��(H�ߺ[H�5#W
]A\A]A^A_��d�H�5l_
M��X��dA���H�uL���˜A���H�uL��I��赜L��D��H��I��A��1�H�� I�� H�5mV
��b�H�5{OH���ldL��H���Qo�H�5_
H���Md�E�����������H�5�^
H���d�E t!�,H���*e�H�5�^
H���cH�߾
�	eL��H����n�
H��H�5�W
��cH�߾ ��dH�uH��聖H��(H�߾
[]A\A]A^A_�d�'H�5Bl
�cH�UH�ML��H��袔���H��H�5jN�^cL��H���Cn�	H��H�5jW
�?cH�߾ �Rd�uI��@�wH��H�5IW
H�H�P1��kaH�߾
�dL��H����m�
H��H�5X
��bH�߾ ��cH�U H�M(L��H�����H�ߺH�5�T
�bH�u H�U(1�H��H)��e�H��H�5�T
�bL��H���gm�
H��H�5fV
�cbH�߾
�vc�L��M�4$H�5;T
�>bL��H���#mH�U0L��L��H�����M�4$L��H���m�H��H�5hT
�aH�߾ �cH�U8H�M@L��H������H�ߺH�5�S
��aH�u8H�U@H��1�H)��eH��(H�ߺ[H�5�S
]A\A]A^A_�a�H�5{[
M��X�{aA���H�uL���x�A���H�uL��I���b�L��D��H��I��A��1�H�� I�� H�5S
�_�H�5(LH���aL��H���k�H�5[
酯���H�5�Z
M��X��`A���H�uL����A���H�uL��I���̘L��D��H��I��H�� A��1�I�� H�5�R
�^�H�5�KH���`L��H���hk�H�5&Z
H���d`H�}�3�� H���laH�UH�M L��H���i����H�5WR
H���%`H�uH�U H��1�H)��pc�H�53R
H���_L��H����j�H�5�V
H����_�
H����`�L��M�4$H�5�Q
�_L��H���jH�U(L��L��H���;���M�4$L��H���|j�H�5NY
H���x_H�}0�.�� H���`H�U0H�M8L��H���}����H�5kQ
H���9_H�u0H�U8H��1�H)��b�H�5GQ
H���_L��H���i�H�5^S
H����^H�}@����
H���_�L��M�4$H�5�P
�^L��H���iH�U@L��L��H���D���M�4$L��H���i�H�5mX
H���^H�}H���
H���_�L��M�4$H�5NP
�Q^L��H���6iH�UHL��L��H���ԏ��M�4$L��H���i�H�5�R
H���^H�}P�ң��H�߾ �_H�UPH�MXL��H������H�ߺH�5P
��]H�uPH�UXH��1�H)��aH��(H�ߺ[H�5�O
]A\A]A^A_�]�H�5W
M��X�]A���H�uL��耕A���H�uL��I���j�L��D��H��I��H�� A��1�I�� H�5"O
�[�H�50HH���!]L��H���h�
H�5�P
H���]H�}����
H���
^�L��M�4$H�5�N
��\L��H���gH�UL��L��H���U���M�4$L��H���g�
H�5P
H���\H�U 1�H��H�5�O
��ZH�E H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5<N
L���<\L��H���!g�H�5oO
H���\L9t$�L��H�NH�5�M
HD��[H�U0L��L��H��J��E�wM���|���H�D$I�$L;4$�y���L��H���f�	H�5zO
H���[H�}8����
H���\�L��M�4$H�5wM
�z[L��H���_fH�U8L��L��H�����M�4$L��H���>f�H�5�N
H���:[H�}@�)�� H���B\H�U@H�MHL��H���?����H�5-M
H���ZH�u@H�UHH��1�H)��F^�H�5	M
H����ZL��H���e�H�5UN
H���ZH�}P�t���H�߾ �[H�UPH�MXL��H��踋��H�ߺH�5�L
�tZH�uPH�UXH��1�H)��]H��(H�ߺ[H�5zL
]A\A]A^A_�=Z�H�5�S
M��X�%ZA���H�uL��L�|$��A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5�K
�2X�H�5�DH���YL��H���d�H�50M
H���Y� H���ZA���H�uL��菑A���H�u L��I���y�L��D��H��I��A��1�H�� I�� H�51K
�W�H�5bK
H���0YH�uH�U 1�H��H)��{\�H�5>K
H���YL��H����c�
H�5kL
H����XH�U(1�H��H�5L
�3WH�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�J
L���XL��H���wc�H�5�K
H���sXL;t$�L��H�[JH�5PJ
HD��OXH�U8L��L��H��J��E�wM���҉��H�D$I�$L;4$�y���L��H���c�H��H�5�K
�XH�߾ �YL�|$A���H�u@L����A���H�uHL��I���ՏL��D��H��I��A��1�H�� I�� H�5�I
�VH�ߺH�5�I
�WH�u@H�UHH��1�H)���ZH��(H�ߺ[H�5�I
]A\A]A^A_�UW�*H�5qc
M��X�=WA���H�uL���:�A���H�uL��I���$�L��D��H��I��H�� A��1�I�� H�5�H
�OU�H�5�AH����VL��H���a�H�5�K
H���V�E����H�5�K
H���V�
H���WL��H���va�	H�5�J
H���rV� H���W�uI��@�6jH�5J
H��H�H�P1��T�
H���QWL��H���a�
H�5QK
H���V� H���%WA���H�u L����A���H�u(L��I����L��D��H��I��A��1�H�� I�� H�5�G
�T�H�5�G
H���UH�u H�U(1�H��H)���X�H�5�G
H���zUL��H���_`�
H�5aI
�F����$H�5�X
�MUH�UH�ML��H���j����H��H�52@�&UL��H���`�	H��H�52I
�UH�߾ �V�uI��@��hH��H�5I
H�H�P1��3SH�߾
��UL��H���_�
H��H�5�I
�TH�߾ �UH�U H�M(L��H��跅��H�ߺH�5�F
�sTH�u H�U(1�H��H)��W�H��H�5~F
�JTL��H���/_�
H��H�5.H
�+TH�߾
�>U�L��M�4$H�5F
�TL��H����^H�U0L��L��H��艅��M�4$L��H����^�H��H�50F
��SH�߾ ��TH�U8H�M@L��H���ք��H�ߺH�5�E
�SH�u8H�U@H��1�H)���VH��(H�ߺ[H�5�E
]A\A]A^A_�[S�H�5?`
M��X�CSA���H�uL���@�A���H�uL��I���*�L��D��H��I��H�� A��1�I�� H�5�D
�UQ�H�5�=H����RL��H����]�H�5/G
H����RH�}����
H����S�L��M�<$H�5�D
�RL��H���w]H�UL��L��H������M�<$L��H���V]�H��H�5pD
�RRH�߾ �eSA���H�u L���B�A���H�u(L��I���,�L��D��H��I��A��1�H�� I�� H�5�C
�WPH�ߺH�5D
��QH�u H�U(1�H��H)��.U�H��H�5�C
�QL��H���\�H��H�5)E
�QH�߾ �RA���H�u0L��苉A���H�u8L��I���u�L��D��H��I��A��1�H�� I�� H�5-C
�OH�ߺH�5[C
�,QH�u0H�U81�H��H)��wT�H��H�57C
�QL��H����[�H��H�5�D
��PH�߾ �QA���H�u@L���ԈA���H�uHL��I��辈L��D��H��I��A��1�H�� I�� H�5vB
��NH�ߺH�5�B
�uPH�u@H�UHH��1�H)��SH��(H�ߺ[H�5{B
]A\A]A^A_�>P�H�5]
M��X�&PA���H�uL���#�A���H�uL��I���
�L��D��H��I��H�� A��1�I�� H�5�A
�8N�H�5�:H����OL��H���Z�H�5D
H���OH�}����
H���P�L��M�<$H�5rA
�uOL��H���ZZH�UL��L��H�����M�<$L��H���9Z�H��H�5SA
�5OH�߾ �HPA���H�u L���%�A���H�u(L��I����L��D��H��I��A��1�H�� I�� H�5�@
�:MH�ߺH�5�@
��NH�u H�U(1�H��H)��R�H��H�5�@
�NL��H���Y�H��H�5B
�~NH�߾ �OA���H�u0L���n�A���H�u8L��I���X�L��D��H��I��A��1�H�� I�� H�5@
�LH�ߺH�5>@
�NH�u0H�U81�H��H)��ZQ�H��H�5@
��ML��H����X�H��H�5fA
��MH�߾ ��NA���H�u@L��跅A���H�uHL��I��衅L��D��H��I��A��1�H�� I�� H�5Y?
��KH�ߺH�5�?
�XMH�u@H�UHH��1�H)��PH��(H�ߺ[H�5^?
]A\A]A^A_�!M� H�5�Y
M��X�	MA���H�uL����A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5�>
�K�H��H�5�7�LL��H���W�
H��H�5�D
�LH�߾
�M�L��M�<$H�5`>
�cLL��H���HWH�UL��L��H����}��M�<$L��H���'W�H��H�5�>
�#LH�߾ �6MA���H�u L����A���H�u(L��I���L��D��H��I��A��1�H�� I�� H�5�=
�(JH�ߺH�5�=
�KH�u H�U(H��1�H)��NH��(H�ߺ[H�5�=
]A\A]A^A_�}K�"H�5�W
M��X�eKA���H�uL���b�A���H�uL��I���L�L��D��H��I��A��1�H�� I�� H�5=
�wI�H��H�56�KL��H����U�H��H�5�?
��JH�߾
�K�L��M�<$H�5�<
�JL��H���UH�UL��L��H���B|��M�<$L��H���U�H��H�5�<
�JH�߾ �KA���H�u L���o�A���H�u(L��I���Y�L��D��H��I��A��1�H�� I�� H�5<
�HH�ߺH�5?<
�JH�u H�U(1�H��H)��[M�H��H�5<
��IL��H����T�H��H�5�A
��IH�߾ ��JA���H�u0L��踁A���H�u8L��I��袁L��D��H��I��A��1�H�� I�� H�5Z;
��GH�ߺH�5�;
�YIH�u0H�U81�H��H)��L�H��H�5d;
�0IL��H���T�H��H�5�@
�IH�߾ �$JA���H�u@L����A���H�uHL��I����L��D��H��I��A��1�H�� I�� H�5�:
�GH�ߺH�5�:
�HH�u@H�UHH��1�H)���KH��(H�ߺ[H�5�:
]A\A]A^A_�kH�H�5
F
M��X�SHA���H�uL���P�A���H�uL��I���:�L��D��H��I��H�� A��1�I�� H�5�9
�eF�H�53H����GL��H����R�	H�5=
H����GH�}����
H����H�L��M�<$H�5�9
�GL��H���RH�UL��L��H���%y��M�<$L��H���fR�H��H�5�:
�bGH�߾ �uHA���H�u L���RA���H�u(L��I���<L��D��H��I��A��1�H�� I�� H�5�8
�gEH�ߺH�5"9
��FH�u H�U(1�H��H)��>J�H��H�5�8
��FL��H���Q�H��H�5J:
�FH�߾ �GA���H�u0L���~A���H�u8L��I���~L��D��H��I��A��1�H�� I�� H�5=8
�DH�ߺH�5k8
�<FH�u0H�U8H��1�H)��IH��(H�ߺ[H�5B8
]A\A]A^A_�F�H�5XC
M��X��EA���H�uL����}A���H�uL��I����}L��D��H��I��A��1�H�� I�� H�5�7
�C�H�5�0H���EL��H���pP�H�5-9
H���lEH�U1�H��H�5�8
�CH�EH�$H����H�$E1�E1�H��H�D$I�$H�D$�H�57
L���EL��H���O�H�5I8
H���DL9t$�L��H��6H�5�6
HD���DH�U(L��L��H��J��E�wM���Vv��H�D$I�$L;4$�y���L��H���O�H�5B
H���DH�U01�H��H�5�7
��BH�E0H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5.6
L���.DL��H���O�H�5a7
H���DL9t$�L��H��5H�5�5
HD���CH�U@L��L��H��J��E�wM���nu��H�D$I�$L;4$�y���L��H���N�	H�5l7
H���CH�}H���
H���D�L��M�4$H�5i5
�lCL��H���QNH�UHL��L��H����t��M�4$L��H���0N�
H�57
H���,CH�UP1�H��H�5V6
�wAH�EPH�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�4
L����BL��H���M�H�5	6
H���BL9t$�L��H��4H�5�4
HD��BH�U`L��L��H��J��E�wM���t��H�D$I�$L;4$�y���L��H���HM�
H�5�?
H���DBH�Uh1�H��H�5n5
�@H�EhH�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�3
L����AL��H����L�H�5!5
H����AL;t$�L��H��3H�5�3
HD��AH�UxL��L��H��J��E�wM���.s��H�D$I�$L;4$�y���L��H���`L�H�5�>
H���\AH�������
H���aB�L��M�4$H�5&3
�)AL��H���LL��L��H��H����r��M�4$L��H����K�
H�57
H����@H���������
H����A�L��M�4$H�5�2�@L��H���KH����Lu���H�5�=
M��X�@A���H�uL���xA���H�uL��I���kxL��D��H��I��A��1�H�� I�� H�5#2
�>�H��H�5.+�"@L��H���K�	H��H�5X2
�@H�߾
�A�L��M�<$H�5�1
��?L��H����JH�UL��L��H���aq��M�<$L��H���J�
H��H�5�1
�?H�߾
�@�L��M�<$H�5v1
�y?L��H���^JH�U L��L��H���p��M�<$L��H���=J�H��H�5�1
�9?H�߾ �L@A���H�u(L���)wA���H�u0L��I���wL��D��H��I��H�� A��1�I�� H�5�0
�>=H�ߺH�5�0
��>H�u(H�U0H��1�H)��BH��(H�ߺ[H�5�0
]A\A]A^A_�>�$H�5D
M��X�{>A���H�uL���xvA���H�uL��I���bvL��D��H��I��H�� A��1�I�� H�50
�<�H�5()H���>L��H���H�H�5�1
H���=� H���
?A���H�uL����uA���H�u L��I����uL��D��H��I��A��1�H�� I�� H�5�/
�;�H�5�/
H���=H�uH�U 1�H��H)���@�H�5�/
H���b=L��H���GH�H�5�1
H���C=H�}(���
H���K>�L��M�<$H�5/
�=L��H���GH�U(L��L��H���n��M�<$L��H����G�H��H�5r0
��<H�߾ ��=A���H�u0L����tA���H�u8L��I���tL��D��H��I��A��1�H�� I�� H�5e.
��:H�ߺH�5�.
�d<H�u0H�U8H��1�H)��?H��(H�ߺ[H�5j.
]A\A]A^A_�-<�H�5,4
M��X�<A���H�uL���tA���H�uL��I���sL��D��H��I��H�� A��1�I�� H�5�-
�':�H�5�&H���;L��H���F�H�5�3
H���;� H���<A���H�uL���sA���H�u L��I���nsL��D��H��I��A��1�H�� I�� H�5&-
�9�H�5W-
H���%;H�uH�U 1�H��H)��p>�H�53-
H���:L��H����E�H�5J/
H����:H�}(�
��
H����;�L��M�4$H�5�,
�:L��H���EH�U(L��L��H���0l��M�4$L��H���qE�H�5!/
H���m:H�}0�.���H�߾ �u;H�U0H�M8L��H���rk��H�ߺH�5],
�.:H�u0H�U8H��1�H)��y=H��(H�ߺ[H�54,
]A\A]A^A_�9�H�5l6
E1���9H�UH�ML��H��M��@�j���H�5�$H���9L��H���D�H�5�.
H���9�H�5u�H���91�H�}��DH�U(L���4��AMH�5�-
H��H�PH�1��7A�GI��H;E�ۚE��túH�5 WH��H�$�9H�$륺!H�5);
�9H�UH�ML��H���!j���H�5�#H����8L��H����C�H�5�-
H���8H�}�I��
H����9�L��M�4$H�5�*
�8L��H���sCH�UL��L��H���j��M�4$L��H���RC�H�5g-
H���N8H�U 1�H��H�5x+
�6H�E H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�)
L���7L��H����B�H�5++
H����7L9t$�L��H��)H�5�)
HD��7H�U0L��L��H��J��E�wM���8i��H�D$I�$L;4$�y���L��H���jB�H�5�*
H���f7H�}8�r�� H���n8H�U8H�M@L��H���kh���H�5Y)
H���'7H�u8H�U@H��1�H)��r:�H�55)
H���6L��H����A�H�5�*
H����6H�}H��|��H�߾ ��7H�UHH�MPL��H����g��H�ߺH�5�(
�6H�uHH�UPH��1�H)���9H��(H�ߺ[H�5�(
]A\A]A^A_�i6� H�5U8
�X6H�UH�ML��H���ug���H�5@!H���16L��H���A�H�5�*
H���6�E� ��H�5�*
H����5�
H���7L��H����@H�ߺ	H�5�)
��5�}���v��H�5\+H���5L��H���@�
H�5�*
H���5H�} �R�� H���6H�U H�M(L��H���f���H�5}'
H���K5H�u H�U(H��1�H)��8�H�5Y'
H���"5L��H���@�H��H�5m'
�5H�߾ �6H�U0H�M8L��H���f��H�ߺH�5�&
��4H�u0H�U8H��1�H)��8H��(H�ߺ[H�5�&
]A\A]A^A_�4�H�5�2
M��X�4A���H�uL���}lA���H�uL��I���glL��D��H��I��A��H�� 1�H�5#&
I�� �2H��(H�ߺ[H�5%]A\A]A^A_�4�H�5�1
M��X�3A���H�uL���kA���H�uL��I����kL��D��H��I��H�� A��1�I�� H�5�%
�
2�H�5�H���3L��H���{>�H�5G,
H���w3�E���H�59,
H���Y3�
H���l4L��H���1>�	H�5�%
H���-3H�}����
H���54�L��M�<$H�5�$
�2L��H����=H�UL��L��H���d��M�<$L��H���=�
H�5%
H���2H�} �f��
H����3�L��M�<$H�5�$
�2L��H���r=H�U L��L��H���d��M�<$L��H���Q=�H��H�5�$
�M2H�߾ �`3A���H�u(L���=jA���H�u0L��I���'jL��D��H��I��A��1�H�� I�� H�5�#
�R0H�ߺH�5
$
��1H�u(H�U0H��1�H)��)5H��(H�ߺ[H�5�#
]A\A]A^A_�1�H�5d/
E1��1H�UH�ML��H��M��@�b���H�5tH���e1L��H���J<�H�5_&
H���F1�H�5%�H���211�H�}���DH�U(L���4���DH�5:%
H��H�PH�1��Y/A�FI��H;E�a�E��túH�5�NH��H�$��0H�$륺%H�5�6
M��X�0A���H�uL���hA���H�uL��I���hL��D��H��I��A��H�� 1�H�5P"
I�� �.H��(H�ߺ[H�5R]A\A]A^A_�=0�H�53)
M��X�%0A���H�uL���"hA���H�uL��I���hL��D��H��I��A��1�H�� I�� H�5�!
�7.�H�5�H����/L��H���:�
H�5�(
H���/�
H���0�L��M�<$H�5|!
�/L��H���d:H�UL��L��H���a��M�<$L��H���C:�H�5j(
H���?/�
H���R0�L��M�<$H�5!
�/L��H���9H�U L��L��H���`��M�<$L��H����9�H�5G#
H����.H�}(����
H����/�L��M�<$H�5� 
�.L��H���9H�U(L��L��H���-`��M�<$L��H���n9�H�5�'
H���j.� H���}/A���H�u0L���ZfA���H�u8L��I���DfL��D��H��I��A��1�H�� I�� H�5�
�o,�H�5- 
H���-H�u0H�U81�H��H)��F1�H�5	 
H����-L��H���8�H�5'
H���-� H����.A���H�u@L���eA���H�uHL��I���eL��D��H��I��A��1�H�� I�� H�5E
�+�H�5v
H���D-H�u@H�UH1�H��H)��0�H�5R
H���-L��H���8�H�5`&
H���,H�}P���� H���.H�UPH�MXL��H���^���H�5�
H���,H�uPH�UXH��1�H)��0�H�5�
H���,L��H���y7�H��H�5&!
�u,H�߾ �-A���H�u`L���edA���H�uhL��I���OdL��D��H��I��A��1�H�� I�� H�5
�z*H�ߺH�55
�,H�u`H�UhH��1�H)��Q/H��(H�ߺ[H�5
]A\A]A^A_��+�H�5�$
M��X�+A���H�uL���cA���H�uL��I���cL��D��H��I��A��1�H�� I�� H�5V
��)�H��H�5a�U+L��H���:6H�ߺ
H�59
�6+�EH��(H��H�5 $
[�]A\A]A^A_�o)�H�5�#
M��X�*A���H�uL����bA���H�uL��I����bL��D��H��I��H�� A��1�I�� H�5�
�	)�H�5�H���*L��H���z5�H�5F#
H���v*�E���H�58#
H���X*�
H���k+L��H���05�	H�5�
H���,*H�}�x��
H���4+�L��M�<$H�5�
�)L��H����4H�UL��L��H���[��M�<$L��H���4�
H�5
H���)H�} �~��
H����*�L��M�<$H�5�
�)L��H���q4H�U L��L��H���[��M�<$L��H���P4�H��H�5�
�L)H�߾ �_*A���H�u(L���<aA���H�u0L��I���&aL��D��H��I��A��1�H�� I�� H�5�
�Q'H�ߺH�5
��(H�u(H�U0H��1�H)��(,H��(H�ߺ[H�5�
]A\A]A^A_�(�H�5)!
M��X�(A���H�uL���`A���H�uL��I���u`L��D��H��I��H�� A��1�I�� H�5-
�&�H�5;H���,(L��H���3�
H�5�
H���
(H�}�
��
H���)�L��M�4$H�5�
��'L��H����2H�UL��L��H���`Y��M�4$L��H���2�	H�5�
H���'�
H���(�L��M�4$H�5u
�x'L��H���]2H�U L��L��H���X��M�4$L��H���<2�H�5�
H���8'H�U(1�H��H�5b
�%H�E(H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�
L����&L��H����1�H�5
H����&L;t$�L��H��H�5�
HD��&H�U8L��L��H��J��E�wM���"X��H�D$I�$L;4$�y���L��H���T1�
H�5�
H���P&�
H���c'�L��M�4$H�5(
�+&L��H���1H�U@L��L��H���W��M�4$L��H����0�H�5|
H����%H�}H��� H����&H�UHH�MPL��H����V���H�5�
H���%H�uHH�UPH��1�H)��(�H�5�
H���%L��H���h0�H�5
H���d%H�}X�%k��H�߾ �l&H�UXH�M`L��H���iV��H�ߺH�5T
�%%H�uXH�U`H��1�H)��p(H��(H�ߺ[H�5+
]A\A]A^A_��$�H�5(
M��X��$A���H�uL����\A���H�uL��I���\L��D��H��I��H�� A��1�I�� H�5u
��"�H�5�H���t$L��H���Y/�H�5�
H���U$� H���h%A���H�uL���E\A���H�u L��I���/\L��D��H��I��A��1�H�� I�� H�5�
�Z"�H�5
H����#H�uH�U 1�H��H)��1'�H�5�
H���#L��H���.�H�5
H���#H�}(�ʢ�
H���$�L��M�<$H�5k
�n#L��H���S.H�U(L��L��H����T��M�<$L��H���2.�H��H�5�
�.#H�߾ �A$A���H�u0L���[A���H�u8L��I���[L��D��H��I��A��1�H�� I�� H�5�
�3!H�ߺH�5�
�"H�u0H�U8H��1�H)��
&H��(H�ߺ[H�5�
]A\A]A^A_�"�"H�5$(
M��X�p"A���H�uL���mZA���H�uL��I���WZL��D��H��I��H�� A��1�I�� H�5
� �H��H�5
�"L��H����,�H��H�5Y
��!H�߾ �#A���H�uL����YA���H�u L��I����YL��D��H��I��A��1�H�� I�� H�5�
��H�ߺH�5�
�!H�uH�U 1�H��H)���$�H��H�5�
�W!L��H���<,�
H�5x
H���8!��l���H�5B
M��X�!A���H�uL���YA���H�uL��I���YL��D��H��I��A��H�� 1�H�5�
I�� �-H��(H�ߺ[H�5�]A\A]A^A_� �H�5�
� H�UH�ML��H���Q���H�5�H���s L��H���X+�H�5�
H���T H�}�N��
H���\!�L��M�4$H�5!
�$ L��H���	+H�UL��L��H���Q��M�4$L��H��M��X��*�H��H�5�
��H�߾ �� A���H�u L����WA���H�u(L��I���WL��D��H��I��A��1�H�� I�� H�5o
��H�ߺH�5�
�nH�u H�U(H��1�H)��"H��(H�ߺ[H�5t
]A\A]A^A_�7�H�5
�&H�UH�ML��H���CP���H�5
H���L��H����)�
H�5�
H����H�U1�H��H�5

�+H�EH�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�
L���L��H���o)�H�5�
H���kL;t$�L��H�SH�5H
HD��GH�U(L��L��H��J��E�wM����O��H�D$I�$L;4$�y���L��H���(�	H�5�
H���H�}0����
H����L��M�4$H�5�
��L��H���(H�U0L��L��H���KO��M�4$L��H���(�H�5k
H���H�U81�H��H�5�
��H�E8H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�52
L���2L��H���(�H�5e
H���L;t$�L��H��H�5�
HD���H�UHL��L��H��J��E�wM���rN��H�D$I�$L;4$�y���L��H���'�H�5j
H���H�}P��� H���H�UPH�MXL��H���M���H�5�
H���aH�uPH�UXH��1�H)���H�5o
H���8L��H���'�H�5�
H���H�}`�Q�� H���!H�U`H�MhL��H���M���H�5
H����H�u`H�UhH��1�H)��%�H�5�
H���L��H���&�H�5�
H���� H���H�UpH�MxL��H���L���H�5�
H���^H�upH�Ux1�H��H)���H�5l
H���5L��H���&�
H�5
H����
H���)�L��M�4$H�5���L��H����%H����O���H�5n
��I��XA���H�uH��I��H�D$�RA���H�uL��I���RL��D��H��I��H�� A��1�I�� H�5Y
���H�5gH���XL��H���=%�H�5�
H���9H�}�R��
H���A�L��M�4$H�5
�	L��H����$H�UL��L��H���K��M�4$L��H����$�H�5�
H����H�U 1�H��H�5�
�H�E H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5s
L���sL��H���X$�H�5�
H���TL9t$�L��H�<H�51
HD��0H�U0L��L��H��J��E�wM���J��H�D$I�$L;4$�y���L��H����#�H�5q
H����H�}8���
H�����L��M�4$H�5�

�L��H���#H�U8L��L��H���4J��M�4$L��H���u#�H��H�5Q
�qH�߾ �L�|$A���H�u@L���\PA���H�uHL��I���FPL��D��H��I��A��1�H�� I�� H�5�	
�qH�ߺH�5,

�H�u@H�UH1�H��H)��H�H��H�5

��L��H���"�H��H�5f
�H�߾ ��A���H�uPL���OA���H�uXL��I���OL��D��H��I��A��1�H�� I�� H�5G	
�H�ߺH�5u	
�FH�uPH�UXH��1�H)��H��(H�ߺ[H�5L	
]A\A]A^A_��#H�5[#
M��X�A���H�uL����NA���H�uL��I����NL��D��H��I��H�� A��1�I�� H�5�
�	�H�5�H���L��H���z!�H�5O
H���v�E���H�5E
H���X�
H���k�ߍ���$H�5
�5H�UH�ML��H���RG���H�5H���L��H���� �H�5o
H����H�}�ܒ�
H����L��M�4$H�5�
�L��H��� H�UL��L��H���BG��M�4$L��H��� �	H�5�	
H����M ���b��H�5H���`L��H���E �H��H�5�
�AH�߾ �TH�U(H�M0L��H���QF��H�ߺH�5<
�
H�u(H�U01�H��H)��X�H��H�5
��L��H�����
H��H�5

��H�߾ ��H�U8H�M@L��H����E��H�ߺH�5�
�H�u8H�U@H��1�H)���H��(H�ߺ[H�5�
]A\A]A^A_�Z� H�5�
M��X�BA���H�uL���?LA���H�uL��I���)LL��D��H��I��A��1�H�� I�� H�5�
�T�H��H�5���L��H�����
H��H�5�
�H�߾
���L��M�<$H�5�
�L��H���H�UL��L��H���E��M�<$L��H���`�H��H�5�
�\H�߾
�o�L��M�<$H�54
�7L��H���H�U L��L��H���D��M�<$L��H����H��H�5a
�H�߾ �
A���H�u(L����JA���H�u0L��I����JL��D��H��I��H�� A��1�I�� H�5�
�H�ߺH�5�
�H�u(H�U0H��1�H)���H��(H�ߺ[H�5�
]A\A]A^A_�Q�H�5�
M��X�9A���H�uL���6JA���H�uL��I��� JL��D��H��I��A��1�H�� I�� H�5�
�K�H�5�H����L��H����H�5�
H����E������Ѓ��j��H�5�
H����E� ����@�i����8��,H����H�5�
H���K�E��������A������,H���?�H�5a
H����E��������ĉH�߾
�L��H�����H��H�5W
��H�߾ ��H�uA���L���HH�u A���L��I���HL��D��H��I��A��1�H�� I�� H�5[
��H�ߺH�5�
�ZH�uH�U 1�H��H)���H��H�5e
�1L��H����H��H�5*
�H�߾ �%H�u(A���L���HH�u0A���L��I����GL��D��H��I��A��1�H�� I�� H�5�
�H�ߺH�5�
�H�u(H�U01�H��H)����H��H�5�
�zL��H���_�H��H�5�
�[H�߾ �nH�u8A���L���KGH�u@L��H��HA���I���1GL��D��H��I��A��1�H�� I�� H�5�
�\
H�ߺH�5
��H�u�H�U�1�H��H)��3�H��H�5�
�L��H���H�ߺH�5�

��H�5�
H���H���KH��I���KL��H��1�H����H��(H�ߺ[H�5�
]A\A]A^A_�G�H�5
�6H�UH�ML��H���S?���H�5�H���L��H�����H�5�
H����
�
H����L��M�4$H�5�	��
L��H���H�UL��L��H���N?��M�4$L��H����
H�5�
H���
�
H����L��M�4$H�5c�	�f
L��H���KH�U L��L��H����>��M�4$L��H���*�H�5��	H���&
H�}(��R��H�߾ �.H�U(H�M0L��H���+>��H�ߺH�5�	��H�u(H�U0H��1�H)��2H��(H�ߺ[H�5�	]A\A]A^A_��H�5�	�H�UH�ML��H���=���H�5��H���xL��H���]�H�5�	H���Y�E��~�H�5D�	H���;�
H���N
L��H����
H�5��	H���H�U1�H��H�59�	�Z
H�EH�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5��	L���L��H����H�5�	H���L9t$�L��H���H�5w�	HD��vH�U(L��L��H��J��E�wM���<��H�D$I�$L;4$�y���L��H���+�H�5��	H���'H�}0�Z�� H���/H�U0H�M8L��H���,<���H�5�	H����
H�u0H�U8H��1�H)��3�H�5��	H���
L��H����H�5B�	H���
H�}@�aP��H�߾ �H�U@H�MHL��H���;��H�ߺH�5��	�a
H�u@H�UHH��1�H)��
H��(H�ߺ[H�5g�	]A\A]A^A_�*
�H�5��	�
H�UH�ML��H���6;���H�5�H����	L��H�����H�5��	H����	�E���|��}��;��H�5��	H���	�E� �o��@t!�,H���
�H�5��	H���r	�
H���
L��H���J�H�5y�	H���F	H�U1�H��H�5p�	�H�EH�$H����=��H��E1�E1�H�D$I�$H�D$H��D��I�ǺH�5�L����L��H�����H�5�	H����L9t$�L��H���H�5��	HD��I�W(L��L��H��J��D�uL���+:��H�D$I�$L;4$�y����5=���H�5

M��X�[A���H�uL���X@A���H�uL��I���B@L��D��H��I��H�� A��1�I�� H�5��	�m�H�5�H���L��H�����H�5��	H����H�}����
H�����L��M�<$H�5��	�L��H���H�UL��L��H���-9��M�<$L��H���n�H��H�5�	�jH�߾ �}A���H�u L���Z?A���H�u(L��I���D?L��D��H��I��A��1�H�� I�� H�5��	�oH�ߺH�5*�	�H�u H�U(H��1�H)��F
H��(H�ߺ[H�5�	]A\A]A^A_���H�5�	�H�UH�ML��H����7���H�5��H���L��H���q�H�5�	H���mH�}���� H���uH�UH�M L��H���r7���H�5`�	H���.H�uH�U H��1�H)��y	�H�5<�	H���L��H�����H�5S�	H����H�}(�
��
H�����L��M�4$H�5��	�L��H���H�U(L��L��H���97��M�4$L��H���z�H�5�	H���vH�}0����
H���~�L��M�4$H�5C�	�FL��H���+H�U0L��L��H����6��M�4$L��H���
�H�5��	H���H�}8����
H����L��M�4$H�5�	��L��H���H�U8L��L��H���Y6��M�4$L��H����H�57�	H���H�}@���
H����L��M�4$H�5c�	�fL��H���KH�U@L��L��H����5��M�4$L��H���*�H�5�	H���&H�}H��I��H�߾ �.H�UHH�MPL��H���+5��H�ߺH�5�	��H�uHH�UPH��1�H)��2H��(H�ߺ[H�5�	]A\A]A^A_��H�5��	E1��H�UH�ML��H��M��@�4���H�5}�H���nL��H���S�H�5h�	H���O�H�5.�H���;1�H�}��bfDH�U(L���4��H�5B�	H��H�PH�1��aA�FI��H;E��bE��túH�5� H��H�$��H�$륺#H�5I
�H�UH�ML��H����3���H��H�5���L��H���z
�	H��H�5��	�vH�߾ ��uI��@�:H��H�5��	H�PH�1��H��(H�߾
[]A\A]A^A_�G�H�5$�	�H�UH�ML��H���33���H�5��H����L��H�����
H�5�	H����H�}�B��
H�����L��M�4$H�5��	�L��H���H�UL��L��H���#3��M�4$L��H���d�H��H�5��	�`H�߾ �sH�U H�M(L��H���p2��H�ߺH�5[�	�,H�u H�U(H��1�H)��wH��(H�ߺ[H�52�	]A\A]A^A_��$H�5�
M��X��A���H�uL����8A���H�uL��I����8L��D��H��I��H�� A��1�I�� H�5|�	���H�5��H���{L��H���`�H�55�	H���\�E�Qt�H�5+�	H���>H�߾
�QL��H����	H��H�5=�	�H�߾ �%�uI��@��H��H�5�	H�PH�1��>�H��(H�߾
[]A\A]A^A_���#H�5�
M��X�A���H�uL���7A���H�uL��I���7L��D��H��I��A��1�H�� I�� H�5J�	��H�5X�H���I�L��H���.
�H�5�	H���*��E���k���k�����H�5�	H����E� �s�@��t���>��,H�����H�5�	H����E���t����s������,H����H�5�	H���}��E���s���#sH�߾
�z�L��H���?	�H��H�5��	�;�H�߾ �N�H�uA���L���+6H�u A���L��I���6L��D��H��I��A��1�H�� I�� H�5��	�@�H�ߺH�5��	��H�uH�U 1�H��H)���H��H�5��	�L��H����H��H�5��	�H�߾ �H�u(A���L���t5H�u0A���L��I���^5L��D��H��I��A��1�H�� I�� H�5�	�H�ߺH�5D�	��H�u(H�U01�H��H)��`�H��H�5 �	��L��H�����H��H�5l�	��H�߾ ��H�u8A���L���4H�u@L��H��HA���I���4L��D��H��I��A��1�H�� I�� H�5[�	��H�ߺH�5��	�Z�H�u�H�U�1�H��H)���H��H�5e�	�1�L��H���H�ߺH�5;�	���H�52�	H���H���8H��I���8L��H��1�H���;�H��(H�ߺ[H�5��	]A\A]A^A_��-H�5%
M��X�A���H�uL���3A���H�uL��I���3L��D��H��I��A��1�H�� I�� H�5@�	M��@��H��H�5D��8�L��H����	H��H�5D�	��H�߾ �,��uL����H��H�5'�	H�H�P1��I�H�߾
�L��H����
H��H�5��	�H�߾ ��A���H�u L���2A���H�u(L��H�$�2L�$H��H�5`�	I��A��1�L��D��I�� H�� �H�ߺH�5x�	�I�H�u H�U(1�H��H)���H��H�5T�	� �L��H����H��H�5F�	��H�߾ ��A���H�u0L����1A���H�u8L��H�$��1L�$H��H�5��	I��A��1�L��D��I�� H�� ��H�ߺH�5��	�H�u0H�U81�H��H)����H��H�5��	�d�L��H���I�
H��H�5H�	�E�H�߾
�X��L��M�4$H�5�	� �L��H���H�U@L��L��H���*��M�4$L��H�����H��H�5�	��H�߾ ���uHL���H��H�5��	H�PH�1���H��(H�߾
[]A\A]A^A_��!H�5��	M��X�}�A���H�uL���z0A���H�uL��I���d0L��D��H��I��H�� A��1�I�� H�5�	��H�5*�H����L��H����
H�5$�	H���H�}��F���=���%H�5�	M��X��A���H�uL����/A���H�uL��I���/L��D��H��I��A��H�� 1�H�5w�	I�� ��H��(H�ߺ[H�5y�]A\A]A^A_�d��H�5��	M��X�L�A���H�uL���I/A���H�uL��I���3/L��D��H��I��A��H�� 1�H�5��	I�� �^�H��(H�ߺ[H�5��]A\A]A^A_���$H�5�
M��X��A���H�uL���.A���H�uL��I���.L��D��H��I��A��1�H�� I�� H�5c�	����H��H�5n��b�L��H���GH�ߺH�5y�	�C��UH��(H��H�5��[1�]A\A]A^A_���%H�5�
M��X��A���H�uL���.A���H�uL��I����-L��D��H��I��H�� A��1�I�� H�5��	���H��H�5���L��H����H��H�5��	�H�߾ �A���H�uL���w-A���H�u L��I���a-L��D��H��I��A��1�H�� I�� H�5�	��H�ߺH�5G�	��H�uH�U 1�H��H)��c��H��H�5#�	���L��H�����H��H�5��	���H�߾ ��A���H�u(L���,A���H�u0L��I���,L��D��H��I��H�� A��1�I�� H�5b�	���H�ߺH�5��	�a�H�u(H�U0H��H)�1��H��(H�ߺ[H�5g�	]A\A]A^A_�*��'H�5
M��X��A���H�uL���,A���H�uL��I���+L��D��H��I��A��1�H�� I�� H�5��	�$��H��H�5����L��H���H�ߺH�5��	���UH��(H��H�5�[1�]A\A]A^A_����H�5�	�^�H�UH�ML��H���{$���H�5F�H���7�L��H�����
H�5��	H����H�U1�H��H�5B�	�c�H�EH�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5��	L�����L��H����H�5��	H����L9t$�L��H���H�5��	HD���H�U(L��L��H��J��E�wM���$��H�D$I�$L;4$�y���L��H���4��	H�5�	H���0�H�}0�Du�
H���8��L��M�4$H�5��	��L��H����H�U0L��L��H���#��M�4$L��H�����H�5��	H����H�U81�H��H�5��	��H�E8H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5j�	L���j�L��H���O��H�5��	H���K�L9t$�L��H�3�H�5(�	HD��'�H�UHL��L��H��J��E�wM���"��H�D$I�$L;4$�y���L��H�����H�5��	H�����H�}P��t� H�����H�UPH�MXL��H����!���H�5��	H����H�uPH�UXH��1�H)�����H�5��	H���p�L��H���U��H�5+�	H���Q�H�}`�6��H�߾ �Y�H�U`H�MhL��H���V!��H�ߺH�5A�	��H�u`H�UhH��1�H)��]�H��(H�ߺ[H�5�	]A\A]A^A_����H�5�	���H�UH�ML��H���� ���H�5��H����L��H����	H�5��	H�����
H�����L��M�4$H�5\�	�_�L��H���D�H�UL��L��H���� ��M�4$L��H���#��H�5��	H����H�U 1�H��H�5I�	�j�H�E H�$H����#��H��E1�E1�H�D$I�$H�D$H��D��I�ǺH�5��L�����L��H����H�5��	H����L9t$�L��H���H�5��	HD���I�W0L��L��H��J��D�uL��� ��H�D$I�$L;4$�y����#���,H�5 �	M��@�4�H�UH�ML��H���Q���H��H�5��
�L��H�����	H��H�5�	���H�߾ ���uL���H��H�5��	H�H�P1���H�߾
���L��H����
H��H�5��	��H�߾ ��H�U H�M(L��H�����H�ߺH�5��	�^�H�u H�U(1�H��H)����H��H�5i�	�5�L��H�����H��H�5[�	��H�߾ �)�H�U0H�M8L��H���&��H�ߺH�5�	���H�u0H�U81�H��H)��-��H��H�5��	��L��H����
H��H�5��	��H�߾
���L��M�<$H�5r�	�u�L��H���Z�H�U@L��L��H�����M�<$L��H���9��H��H�5e�	�5�H�߾ �H��uHL���H��H�5C�	H�PH�1��e�H��(H�߾
[]A\A]A^A_�
��'H�5��	H�����H�UH�ML��H�������H��H�5����L��H����	H��H�5��	��H�߾ ���uI��@�T�H��H�5��	H�H�P1���H�߾
�o�L��H���4��
H��H�5l�	�0�H�߾ �C�H�U H�M(L��H���@��H�ߺH�5+�	��H�u H�U(1�H��H)��G��H��H�5�	���L��H����H��H�5�	��H�߾ ���H�U0H�M8L��H��������]���H�5��	M��X�w�A���H�uL���t"A���H�uL��I��E1��["L��D��H��I��H�� A��1�I�� H�5�	M��@���H�5�H����L��H������H�5�	H������H�5˧H�����1�H�}�nPH�U(L���4��H�5��	H��H�PH�1���A�GI��H;E�3PE��túH�5xH��H�$�s�H�$륺H�5R�	M��X�U�A���H�uL���R!A���H�uL��I���<!L��D��H��I��H�� A��1�I�� H�5��	�g��H�5�H�����L��H������H�5��	H�����H�}�2h�
H������L��M�4$H�5��	��L��H����H�UL��L��H���'��M�4$L��H���h��H�57�	H���d�H�U 1�H��H�5��	��H�E H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5�	L����L��H������H�5A�	H�����L9t$�L��H���H�5��	HD����H�U0L��L��H��J��E�wM���N��H�D$I�$L;4$�y���L��H�����H�5�	H���|�H�}8��f�
H�����L��M�4$H�5I�	�L�L��H���1�H�U8L��L��H������M�4$L��H�����H��H�5��	��H�߾ ��H�U@H�MHL��H�����H�ߺH�5�	���H�u@H�UH1�H��H)��#��H��H�5��	��L��H�����H��H�5A�	��H�߾ ��H�UPH�MXL��H�����H�ߺH�5��	�\�H�uPH�UXH��1�H)���H��(H�ߺ[H�5b�	]A\A]A^A_�%��#H�5Q�	��H�UH�ML��H���1���H��H�5�����L��H������	H��H�5��	���H�߾ ����uI��@�H��H�5��	H�PH�1���H��(H�߾
[]A\A]A^A_���&H�5��	����%H�5��	�]�H�UH�ML��H���z���H��H�5B��6�L��H�����	H��H�5B�	��H�߾ �*��uI��@��H��H�5!�	H�PH�1��C�H��(H�߾
[]A\A]A^A_����#H�5$�	M��X��A���H�uL���A���H�uL��I���L��D��H��I��A��1�H�� I�� H�5O�	����H�5]�H���N�L��H���3��H�5��	H���/��E���U���U��l�H�5��	H�����E t!�,H�����H�5��	H������
H�����L��H�����
H�5h�	H����H�}�j�
H�����L��M�<$H�5y�	�|�L��H���a�H�UL��L��H�����M�<$L��H���@��H�5�	H���<�H�} ��i� H���D�H�U H�M(L��H���A���H�5/�	H����H�u H�U(H��1�H)��H��H�5�	H�����L��H�����H�5��	H����H�}0�4i� H����H�U0H�M8L��H������H�5��	H���v�H�u0H�U8H��1�H)����H�5��	H���M�L��H��M��@�+��H�5�	H���'�� H���:��u@L����H�58�	H��H�H�P1��W��
H���
�L��H������H�5��	H������ H������uDL���H�5��	H��H�H�P1����
H����L��H���s��H�5��	H���o�� H�����uHL���7�H�5��	H��H�H�P1����
H���R�L��H�����H�5[�	H����� H���&�A���H�uPL���A���H�uXL��I����L��D��H��I��A��1�H�� I�� H�5��	���H�5��	H����H�uPH�UXH��H)�1�����H�5��	H���{�L��H���`��
H�5b�	H���\��
H���o��L��M�4$H�58��7�L��H����H�U`�����H�5 �	M��X��A���H�uL���A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5��	���H�5��H����L��H�����H�5��	H�����E��KR��pR���h�H�5��	H���Z��E t!�,H���g��H�5��	H���3��
H���F�L��H�����
H�5��	H����H�}��d�
H�����L��M�4$H�5��	���L��H����H�UL��L��H���Z��M�4$L��H�����H�5a�	H����H�} �5d� H����H�U H�M(L��H������H�5��	H���X�H�u H�U(H��1�H)����H�5f�	H���/�L��H�����	H�5>�	H����� H���#��u0I��@���H�5�	H��H�PH�1��<��
H�����L��H�����H�5��	H����H�}8�5c� H����H�U8H�M@L��H������H�5��	H���q�H�u8H�U@H��1�H)����H�5�	H���H�L��H���-��H�5��	H���)�H�}H��b� H���1�H�UHH�MPL��H���.���H�5�	H�����H�uHH�UPH��1�H)��5��H�5��	H����L��H�����H�5��	H����H�}X��b�
H�����L��M�4$H�5o�	�r�L��H���W�H�UXL��L��H���
��M�4$L��H���6��H�5��	H���2�H�}`�b� H���:�H�U`H�MhL��H���7
���H�5%�	H�����H�u`H�UhH��1�H)��>��H�5�	H�����L��H�����
H�5��	H����H�}p��\���g!���H�5��	��H�UH�ML��H������H�5r�H���c�L��H���H��H�5��	H���D��E���M���M���d�H�5��	H�����E t!�,H���!��H�5��	H������
H����L��H������
H�5}�	H����H�}��`�
H������L��M�4$H�5��	��L��H���v�H�UL��L��H�����M�4$L��H���U��H�5�	H���Q�H�} �l`� H���Y�H�U H�M(L��H���V���H�5D�	H����H�u H�U(H��1�H)��]��H�5 �	H�����L��H������H�5��	H�����H�}0��_� H�����H�U0H�M8L��H����
���H�5��	H����H�u0H�U8H��1�H)�����H�5��	H���b�L��H��M��@�@��H��H�5+�	�<�� H��M��X�H��u@L����H�5F�	H��H�H�P1��e��
H����L��H������H�5��	H������ H������uDL����H�5��	H��H�H�P1��	��
H����L��H�����H�5��	H���}�� H����A���H�uHL���mA���H�uPL��I���WL��D��I��H�� A��I�� 1�H�5�	H�����H�5@�	H����H�uHH�UP1�H��H)��Y��H�5�	H�����L��H������
H�5��	H������
H������L��M�4$H�5����L��H����H�UX�=���H�5��	�|�H�UH�ML��H������H�5d�H���U�L��H���:��H�5i�	H���6�H�}�UT�
H���>��L��M�4$H�5�	��L��H�����H�UL��L��H�����M�4$L��H������H��H�5��	���H�߾ ���H�U H�M(L��H������H�ߺH�5��	��H�u H�U(H��1�H)����H��(H�ߺ[H�5��	]A\A]A^A_�[��H�5��	M��X�C�A���H�uL���@A���H�uL��I���*L��D��H��I��A��1�H�� I�� H�5��	�U��H�5�H�����L��H������H�5'�	H������E���F���F��	_�H�5*�	H�����E t!�,H�����H�5�	H���k�H�߾
�~�L��H���C��
H��H�5��	�?�H�߾
�R��L��M�<$H�5�	��L��H����H�UL��L��H�����M�<$L��H������H��H�5��	���H�߾ ���A���H�u L����A���H�u(L��I���L��D��H��I��A��1�H�� I�� H�5l�	���H�ߺH�5��	�k�H�u H�U(1�H��H)����H��H�5v�	�B�L��H���'��	H��H�5N�	�#�H�߾ �6��u0I��@���H��H�5-�	H�H�P1��O�H�߾
��L��H������H��H�5��	���H�߾ ���A���H�u8L���A���H�u@L��I���L��D��H��I��A��1�H�� I�� H�5U�	���H�ߺH�5��	�T�H�u8H�U@H��1�H)���H��(H�ߺ[H�5Z�	]A\A]A^A_���H�5�	M��X��A���H�uL���A���H�uL��I����
L��D��H��I��A��1�H�� I�� H�5��	���H�5��H����L��H�����H�58�	H�����E��>��,>���[�H�5/�	H���T��E t!�,H���a��H�5�	H���-�H�߾
�@�L��H�����H��H�5�	��H�߾ ��H�uH���H�߾
��L��H�����H��H�5��	��H�߾ ���H�u0H���sH��(H�߾
[]A\A]A^A_���$H�5��	M��X�p�A���H�uL���m	A���H�uL��I���W	L��D��H��I��A��1�H�� I�� H�5�	���H��H�5���L��H������	H��H�5�	���H�߾ ���uI��@��H��H�5��	H�H�P1���H�߾
���L��H����H�ߺ
H�5��	���U1�H��H�5����L��H���`��
H��H�5��	�\�H�߾ �o�A���H�u L���LA���H�u(L��I���6L��D��H��I��A��1�H�� I�� H�5�	�a�H�ߺH�5�	���H�u H�U(1�H��H)��8��H��H�5��	���L��H�����
H��H�5��	��H�߾
���L��M�<$H�5}�	��L��H���e�H�U0L��L��H�����M�<$L��H���D��H��H�5��	�@�H�߾ �S�A���H�u8L���0A���H�u@L��I���L��D��H��I��A��1�H�� I�� H�5�	�E�H�ߺH�5�	���H�u8H�U@H��1�H)���H��(H�ߺ[H�5�	]A\A]A^A_���%H�5��	M��X��A���H�uL���A���H�uL��I���iL��D��H��I��A��1�H�� I�� H�5!�	���H��H�5,�� �L��H�����	H��H�5,�	��H�߾ ���uI��@���H��H�5�	H�PH�1��-�H�߾
���L��H����H�ߺ
H�5��	���UH��(H��H�5�[1�]A\A]A^A_����H�5��	�n�H�UL��H��H�M���H��(H�ߺ[H�5N�]A\A]A^A_�9��H�5��	M��X�!�A���H�uL���A���H�uL��I���L��D��H��I��A��1�H�� I�� H�5��	�3��H��H�5˷��L��H�����
H��H�5��	��H�߾
���L��M�4$H�5x�	�{�L��H���`�H�UL��L��H�����M�4$L��H���?��H��H�5��	�;�H�߾
�N��L��M�4$H�5�	��L��H����H�U L��L��H�����M�4$L��H������H��H�5@�	���H�߾ ���H�U(H�M0L��H�����H�ߺH�5ѽ	��H�u(H�U0H��1�H)����H��(H�ߺ[H�5��	]A\A]A^A_�k��H�5��	M��X�S�H�UH�ML��H���p����H��H�58��,�L��H�����	H��H�58�	�
�H�߾ � ��uI��@���H��H�5�	H�H�P1��9�H�߾
���L��H�����
H��H�5�	��H�߾ ��A���H�u L���A���H�u(L��I���L��D��H��I��A��1�H�� I�� H�5?�	��H�ߺH�5m�	�>�H�u H�U(1�H��H)����H��H�5I�	��L��H�����
H��H�5��	��H�߾
�	��L��M�<$H�5λ	���L��H����H�U0L��L��H���T���M�<$L��H�����H��H�5��	��H�߾ ��A���H�u8L���A���H�u@L��I���kL��D��H��I��A��1�H�� I�� H�5#�	��H�ߺH�5Q�	�"�H�u8H�U@H��1�H)��m�H��(H�ߺ[H�5(�	]A\A]A^A_���� H�5�	���H�UH�ML��H������H��H�5����L��H�����	H��H�5��	��H�߾ ���uI��@�X�H��H�5��	H�PH�1���H��(H�߾
[]A\A]A^A_�e��H�5Q�	�4�H�UH�ML��H���Q����H��H�5��
�L��H������	H��H�5�	���H�߾ ���uI��@��H��H�5��	H�PH�1���H��(H�߾
[]A\A]A^A_���#H�5��	H����H�UH�ML��H������H��H�5p��d�L��H���I��H��H�5޽	�E�H�߾
�X��L��M�4$H�5�	� �L��H����H�UL��L��H�����M�4$L��H������H��H�5J�	���H�߾ ���H�U H�M(L��H�����q���H�5��	M��X��A���H�uL���A���H�uL��I���L��D��H��I��H�� A��1�I�� H�5B�	���H�5P�H���A�L��H���&��H�5�	H���"�H�}��B� H���*�H�UH�M L��H���'����H�5�	H�����H�uH�U H��1�H)��.��H�5�	H����L��H�����
H�5��	H�����
H�����L��M�<$H�5s�	�v�L��H���[�H�U(L��L��H�����M�<$L��H���:��H�5�	H���6�H�}0��A� H���>�H�U0H�M8L��H���;����H�5)�	H����H�u0H�U8H��1�H)��B��H�5�	H�����L��H�����H��H�5Ͷ	��H�߾ ���A���H�u@L���A���H�uHL��I���L��D��H��I��A��1�H�� I�� H�5A�	��H�ߺH�5o�	�@�H�u@H�UHH��1�H)���H��(H�ߺ[H�5F�	]A\A]A^A_�	��H�5��	M��X���A���H�uL����A���H�uL��I����L��D��H��I��A��1�H�� I�� H�5��	M��@��H�5��H����L��H���m��	H�5��	H���i�� H���|��uL���1�H�5z�	H��H�H�P1���
H���L�L��H�����
H�5L�	H���
�� H��� �A���H�u L��L�|$�A���H�u(H�|$I����L��D��H��I��A��1�H�� I�� H�5��	���H�5ɴ	H����H�u H�U(1�H��H)�����H�5��	H���n�L��H���S��
H�5�	H���O�H�}0��>�
H���W��L��M�<$H�5�	��L��H����H�U0L��L��H����M�<$L��H������H�5�	H����H�}8�6>�
H������L��M�<$H�5��	�L��H����H�U8L��L��H���2�M�<$L��H���s��	H�5��	H���o�H�}@��=�
H���w��L��M�<$H�5<�	�?�L��H���$�H�U@L��L��H�����M�<$L��H��E1����H�5�	H����H�5�~H����1�H�}H�kH�UXL���4���H�5�	H��H�PH�1���A�GI��H;EH�0E��túH�5��H��H�$�H�$륺&H�5��	�����!H�5`�	�}���'H�5'�	M��@�C�H�UH�ML��H���`�H��H�5(���L��H�����	H��H�5(�	�H�߾ ���uL�����H��H�5�	H�H�P1��-�H�߾
��L��H�����
H��H�5ݴ	衿H�߾ �H�U H�M(L��H����H�ߺH�5��	�m�H�u H�U(1�H��H)����H��H�5x�	�D�L��H���)��H��H�5j�	�%�H�߾ �8�H�U0H�M8L��H���5�H�ߺH�5 �	��H�u0H�U81�H��H)��<��H��H�5��	�ȾL��H�����
H��H�5��	詾H�߾
輿�L��M�<$H�5��	脾L��H���i�H�U@L��L��H����M�<$L��H���H��H��H�5t�	�D�H�߾ �W��uHL����H��H�5R�	H�PH�1��t�H��(H�߾
[]A\A]A^A_���"H�5��	�
���+H�5L�	�׽H�UH�ML��H������H��H�5��谽L��H�����H��H�5*�	葽H�߾
褾�L��M�4$H�5i�	�l�L��H���Q�H�UL��L��H�����M�4$L��H���0��H��H�5q�	�,�H�߾ �?�H�U H�M(L��H���<�H�ߺH�5'�	�H�u H�U(1�H��H)��C��H��H�5�	�ϼL��H�����
H��H�5��	谼H�߾
�ý�L��M�4$H�5��	苼L��H���p�H�U0L��L��H����M�4$L��H���O��H��H�5{�	�K�H�߾ �^��u8I��@��H��H�5U�	H�PH�1��w�H��(H�߾
[]A\A]A^A_���H�5@�	M��X��A���H�uL�����A���H�uL��I�����L��D��H��I��H�� A��1�I�� H�5��	��H�5��H��肻L��H���g��H�5�	H���c�H�}�>;�
H���k��L��M�<$H�50�	�3�L��H����H�UL��L��H����M�<$L��H����H�5&�	�	H�����u ���k(�H�5��H���ԺL��H�����H��H�5>�	赺H�߾ �ȻA���H�u(L����A���H�u0L��I����L��D��H��I��A��1�H�� I�� H�5G�	躸H�ߺH�5u�	�F�H�u(H�U01�H��H)�葽�H��H�5Q�	��L��H�����
H��H�5:�	�H�߾ ��A���H�u8L�����A���H�u@L��I�����L��D��H��I��A��1�H�� I�� H�5��	��H�ߺH�5��	菹H�u8H�U@H��1�H)��ڼH��(H�ߺ[H�5��	]A\A]A^A_�X��%H�5�	��H�5��	�6�H�UH�ML��H���S��H��H�5���L��H������	H��H�5E�	��H�߾
���L��M�4$H�5Ȫ	�˸L��H����H�UL��L��H���N�M�4$L��H�����
H��H�5�	苸H�߾
螹�L��M�4$H�5c�	�f�L��H���K�H�U L��L��H�����M�4$L��H���*��H��H�5��	�&�H�߾ �9�H�U(H�M0L��H���6�H�ߺH�5!�	��H�u(H�U0H��1�H)��=�H��(H�ߺ[H�5��	]A\A]A^A_黷�$H�5�	誷H�UH�ML��H������H��H�5��胷L��H���h��	H��H�5��	�d�H�߾
�w��L��M�4$H�5<�	�?�L��H���$�H�UL��L��H�����M�4$L��H�����
H��H�5^�	�H�߾
���L��M�4$H�5ר	�ڶL��H���H�U L��L��H���]�M�4$L��H����H��H�5�	蚶H�߾ 護H�U(H�M0L��H����H�ߺH�5��	�f�H�u(H�U0H��1�H)�豹H��(H�ߺ[H�5l�	]A\A]A^A_�/��H�5U�	��H�UH�ML��H���;��H��H�5��L��H�����
H��H�5ڧ	�صH�߾
���L��M�4$H�5��	賵L��H���H�UL��L��H���6�M�4$L��H���w��
H��H�5��	�s�H�߾
膶�L��M�4$H�5K�	�N�L��H���3�H�U L��L��H�����M�4$L��H�����H��H�5,�	��H�߾ �!�H�U(H�M0L��H����H�ߺH�5	�	�ڴH�u(H�U0H��1�H)��%�H��(H�ߺ[H�5�	]A\A]A^A_飴�%H�5��	蒴H�UH�ML��H�����H��H�5w��k�L��H���P��
H��H�5N�	�L�H�߾
�_��L��M�4$H�5$�	�'�L��H����H�UL��L��H����M�4$L��H�����
H��H�5��	��H�߾
��L��M�4$H�5��	�³L��H��觾H�U L��L��H���E�M�4$L��H��膾�H��H�5��	肳H�߾ 蕴H�U(H�M0L��H����H�ߺH�5}�	�N�H�u(H�U0H��1�H)�虶H��(H�ߺ[H�5T�	]A\A]A^A_���H�5s�	��H�UH�ML��H���#��H�5�H���߲L��H���Ľ�
H�5s�	H���H�}��7�
H���ȳ�L��M�4$H�5��	萲L��H���u�H�UL��L��H����M�4$L��H���T��H�5�	H���P�H�U 1�H��H�5z�	蛰H�E H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5��	L���L��H���߼�H�5-�	H���۱L9t$�L��H�ãH�5��	HD�跱H�U0L��L��H��J��E�wM���:�H�D$I�$L;4$�y���L��H���l��	H�58�	H���h�H�}8��6�
H���p��L��M�4$H�55�	�8�L��H����H�U8L��L��H����M�4$L��H����
H�5Ҥ	H���H�U@1�H��H�5"�	�C�H�E@H�$H����H�$E1�E1�H��H�D$I�$H�D$�H�5��	L��袰L��H��臻�H�5գ	H��胰L9t$�L��H�k�H�5`�	HD��_�H�UPL��L��H��J��E�wM�����H�D$I�$L;4$�y���L��H�����H�5��	H����H�}X��/� H����H�UXH�M`L��H�����H�5�	H���ѯH�uXH�U`H��1�H)����H�5ߡ	H��訯L��H��荺�H�5+�	H��良H�}h�J���H�߾ 葰H�UhH�MpL��H����H�ߺH�5y�	�J�H�uhH�UpH��1�H)�蕲H��(H�ߺ[H�5P�	]A\A]A^A_��� H�5��	M��X�A���H�uL����A���H�uL��I�����L��D��H��I��A��1�H�� I�� H�5��	�
��H��H�5��虮L��H���~��
H��H�5}�	�z�H�߾
药�L��M�<$H�5R�	�U�L��H���:�H�UL��L��H������M�<$L��H�����H��H�5��	��H�߾
�(��L��M�<$H�5�	��L��H���ոH�U L��L��H���s��M�<$L��H��贸�H��H�5�	谭H�߾ �îA���H�u(L����A���H�u0L��I����L��D��H��I��H�� A��1�I�� H�5B�	赫H�ߺH�5p�	�A�H�u(H�U0H��1�H)�茰H��(H�ߺ[H�5G�	]A\A]A^A_�
��H�5W�	M��X��A���H�uL�����A���H�uL��I�����L��D��H��I��A��1�H�� I�� H�5��	���H�5��H��萬L��H���u��H�5֡	H���q��E��������U5�H�5١	H���A��E t!�,H���N��H�5á	H�����
H���-�L��H�����
H�5��	H����H�}��)�
H����L��M�<$H�5��	辫L��H��裶H�UL��L��H���A��M�<$L��H��肶�H�5H�	H���~�H�} �)� H��膬H�U H�M(L��H������H�5q�	H���?�H�u H�U(H��1�H)�芮�H�5M�	H����L��H����H�5ؠ	H���H�}0�z(� H���H�U0H�M8L��H������H�5�	H��踪H�u0H�U8H��1�H)����H�5Ɯ	H��菪L��H��M��@�m��H�5[�	H���i�� H���|��u@L���1�H�5z�	H��H�H�P1�虨�
H���L�L��H�����H�5�	H���
�� H��� ��uDL���սH�5�	H��H�H�P1��=��
H����L��H��赴�H�5�	H��豩� H���ĪA���H�uHL����A���H�uPL��I����L��D��I��H�� A��I�� �/���$H�5&�	M��X�J�A���H�uL���G�A���H�uL��I���1�L��D��H��I��A��1�H�� I�� H�5�	�\��H��H�5���L��H���ͳ�	H��H�5�	�ɨH�߾ �ܩ�uI��@荼H��H�5Ӝ	H�PH�1��H��(H�߾
[]A\A]A^A_隩�&H�5f�	M��X�b�A���H�uL���_�A���H�uL��I���I�L��D��H��I��A��1�H�� I�� H�5�	�t��H��H�5���L��H�����	H��H�5�	��H�߾ ���uI��@襻H��H�5�	H�PH�1��
�H��(H�߾
[]A\A]A^A_鲨�(H�5έ	����'H�5�	����H�5g�H���\�L��H���A��H�5�	H���=�� H���P�L�|$A���H�u`L���(�A���H�uhL��I����L��D��H��I��A��1�H�� I�� H�5ʘ	�=��H�5��	H���ɦH�u`H�Uh1�H��H)����H�5ט	H��蠦L��H��腱�H�5�	H��聦H�}p�0%� H��艧H�UpH�MxL��H������H�5t�	H���B�H�upH�UxH��1�H)�荩�H�5P�	H����L��H����H�5ĝ	H���H�����$� H���H���L��H��H�������H�5�	H��貥H���H���1�H��H)���H�5��	H��胥L��H���h��H�5>�	H���d�H�����#� H���i�H���L��H��H����`���H�5N�	H����H���H���1�H��H)��a��H�5$�	H����L��H���ү�H�5��	H���ΤH����/#� H���ӥH���L��H��H��������H�5��	H��膤H���H���1�H��H)��˧�H�5��	H���W�L��H���<��H�5�	H���8�H������H�߾ �=�H���L��H��H����4��H�ߺH�5�	��H���H���1�H��H)��5�H��(H�ߺ[H�5�	]A\A]A^A_鳣�H�5�	H��蟣�E�t%�,H��誤�H�5��	H���v��E���
� �" ������H�5T�H���I�L��H���.��H�5��	H���*�� H���=�H�U0H�M8L��H���:���H�5(�	H���H�u0H�U81�H��H)��A��H�5�	H���͢L��H��貭�H�5?�	H��订� H���L�|$A���H�u@L����A���H�uHL��I����L��D��H��I��A��1�H�� I�� H�5;�	讠�H�5l�	H���:�H�u@H�UH1�H��H)�腥�H�5H�	H����L��H����H�5��	H����� H����A���H�uPL�����A���H�uXL��I�����L��D��H��I��A��1�H�� I�� H�5��	��H�5��	H��胡H�uPH�UX1�H��H)��Τ�H�5��	H���Z�L��H���?��H�5`�	H���;�H�}`�� �
H���C��L��M�4$H�5�	��L��H����H�U`L��L��H�����M�4$L��H���ϫ�	H�5�	H���ˠH�}h����
H���ӡ�L��M�4$H�5��蛠L��H��耫H�Uh�7���H�5~�H���s�L��H���X��H�5��	�?����H�5N�H���C�L��H���(��H�5I�	H���$�H�}0��"�
H���,��L��M�4$H�5�	��L��H���٪H�U0L��L��H���w��M�4$L��H��踪�	H�5�	H��负H�}8�2"�
H��輠�L��M�4$H�5��	脟L��H���i�H�U8L��L��H�����M�4$L��H���H��H��H�5Ғ	�D�H�߾ �W�H�U@H�MHL��H���T��H�ߺH�5?�	��H�u@H�UH1�H��H)��[��H��H�5�	��L��H���̩�H��H�5g�	�ȞH�߾ �۟H�UPH�MXL��H������H�ߺH�5Ð	蔞H�uPH�UXH��1�H)��ߡH��(H�ߺ[H�5��	]A\A]A^A_�]��H�5T�H���I�L��H���.��H�5̚	H���*�� H���=�H�U0H�M8L��H���:���H�5(�	H���H�u0H�U81�H��H)��A��H�5�	H���͝L��H��貨�H�5�	H��讝�
H����L��M�<$H�5��	艝L��H���n�H�U@L��L��H�����M�<$L��H���M��	H�5~�	H���I�H�}H���
H���Q��L��M�<$H�5�	��L��H���H�UHL��L��H�����M�<$L��H���ݧ�H��H�5��	�ٜH�߾ ��I��XA���H�uPH��H�$��H�$A���H�uXI��H����L��D��H��I��A��1�H�� I�� H�5\�	�ϚH�ߺH�5��	�[�H�uPH�UX1�H��H)�覟�H��H�5f�	�2�L��H�����	H��H�5>�	��H�߾ �&��u`L���ۯH��H�5!�	H�PH�1��C�H��(H�߾
[]A\A]A^A_���H�5��H��贛L��H��虦�H�5��	H��蕛� H��訜H�U0H�M8L��H������H�5��	H���a�H�u0H�U81�H��H)�謞�H�5o�	H���8�L��H�����H�5��	H����� H���,�H�U@H�MHL��H���)���H�5�	H����H�u@H�UH1�H��H)��0��H�5�	H��輚L��H��补�H�5f�	H��蝚�
H��谛�L��M�4$H�5u�	�x�L��H���]�H�UPL��L��H�����M�4$L��H���<��	H�5m�	H���8�H�}X���
H���@��L��M�4$H�5�	��L��H����H�UXL��L��H�����M�4$L��H���̤�H��H�5y�	�șH�߾ �ۚH�U`H�MhL��H������H�ߺH�5Ë	蔙H�u`H�UhH��1�H)��ߜH��(H�ߺ[H�5��	]A\A]A^A_�]��H�5T�H���I�L��H���.��H�5R�	H���*�� H���=�H�U0H�M8L��H���:���H�5(�	H���H�u0H�U81�H��H)��A��H�5�	H���͘L��H��貣�H�5�	H��讘�
H����L��M�<$H�5��	艘L��H���n�H�U@L��L��H�����M�<$L��H���M��H�5��	H���I�H�}H��� H���Q�H�UHH�MPL��H���N���H�5<�	H���
�H�uHH�UPH��1�H)��U��H�5�	H����L��H���Ƣ�H�52�	H���—H�}X��
H���ʘ�L��M�<$H�5��	蒗L��H���w�H�UXL��L��H�����M�<$L��H���V��	H�5��	H���R�H�}`���
H���Z��L��M�<$H�5�	�"�L��H����H�U`L��L��H�����M�<$L��H�����H��H�5��	��H�߾ �H�UhH�MpL��H������H�ߺH�5݈	讖H�uhH�Up1�H��H)���H��H�5��	腖L��H���j��	H��H�5��	�f�H�߾ �y��uxL���.�H��H�5t�	H�PH�1�薔H��(H�߾
[]A\A]A^A_�;��H�5�]H�����S���H�5��H���������H�5��H���Օ�����H�5o�H��輕����H�5V�H��裕�b���H�5=�H��芕�����H�5$�H���q������,H���������H�5x�H���F��E��"���,H���O��H�5Đ	H�����"���H�5
�	H�����E��{�,H���	��	H�5�	H���Ք�E���
�,H���ܕ��(��H�߾ �ʕ�uI��@�{�H��H�5��	H�PH�1����
H��薕�.���H�5'�	H���]��E����,H���d��H�5�	H���0��E����,H���7����H�߾ �%��u I��@�֧H��H�5�	H�PH�1��>��
H�����l~���H�5Î	H��踓�E���	�,H��返�	H�5��	H��苓�E���
�,H��蒔�e+���H�5[H���Y�����H�5K�	H���@��E��k�,H���G��	H�5+�	H�����E����,H��������H�5Y�	H�����E���,H�����H�5=�	H��贒�E��Z�,H��軓�u���H�5-ZH��肒���H�߾ 萓�u I��@�A�H��H�5��	H�PH�1�詐�
H���\��c���H�5y�	H���#��E�����,H���,��H�5d�	H������H�߾ ���uI��@跥H��H�5��	H�PH�1����
H���Ғ����H�5DYH��虑���H�5֌	H��耑�E����,H��臒�H�5��	H���S��E�����,H���\��u���H�5y�	H���#��E����,H���*��H�5b�	H����E����,H����{���H�5 NH���Đ�E��Z�,H���ˑ�H�5��	H��藐�E�����,H��蠑�����H�5XH���g��
f���H�5�WH���N���\���H�5��	H���5��E�t%�,H���@��H�5��	H�����E��0� �	�������H�5�WH���ߏ�<9���H�5qWH���Ə����H�5%�	H��譏�E�t%�,H��踐�H�5
�	H��脏�E��?� �V��0��H�5WH���W��x���H�5�	H���>��E���,H���E��H�5�	H�����E���
�,H������*���H�5W�	H���ߎ�E�t%�,H�����H�5?�	H��趎�E��M� �7��������H�5�	H��艎�E�t%�,H��蔏�H�5�	H���`��E��d� �t����N���H�߾ �Z��uI��@��H��H�5Q�	H�PH�1��s��
H���&��XX���H�5��	H�����E���,H�����	H�5؈	H����E����,H���ǎ�|���H�59UH��莍�N����H�5�	H���u��E�t%�,H��耎�H�5Ղ	H���L��E���� �*����F����H�5��	H�����E����,H���&��H�5{�	H�����E����,H����f����H�5�	H����E�t%�,H���ˍ�H�5u	H��藌�E�����,H��融�‚���H�5��	H���e��E����,H���l��H�5��	H���8��E����,H���?����H�5�SH��������H�5�SH����骋���H�5SH���ԋ��U���,H�����H�5H��讋�E�@�R���������������������¹���*�,H��肌�H�5��	H���N��E�݌���,H���W��H�5��	H���#�鷌��� �G����@�����(�����ub������,H�����H�5!�	H���Ҋ�E�"���������� ����@ue���ϋ������G�,H��貋�H�5��	H���~��E��u����΋���������������D�,H���c��H�5]�	H���/��E���E�����t��z���f������������,H�����H�5a�	H���݉�����Q���� ���@�f����!�������,H��轊�H�5˄	H��艉�E��������!���������"���,H���t��H�5Ą	H���@���!���,H���N��H�5�H�����E�@�����.!�����S�����ut���W!���¹����,H�����H�5*�	H��辈�E�S!���N���� �l����@uI���� ������������,H��藉�H�5��	H���c��E� ���,H���m��H�5g�	H���9��E���U ����������u���� ��@�����v����uf������,H�����H�5"�	H���Ӈ�E�v�������� ���@�����>v��������,H��诈�H�5��	H���{��E���z������9v�����U�,H���o��H�5��	H���;��E�<v���,H���D��H�5��	H�����v���,H�����H�5�	H�����E���ru�����^����4���� �(�@���������uf������,H��踇�H�5Ӂ	H��脆�E������� ���@������������ �,H���`��H�5n�	H���,��E���z����������������,H��� ��H�5X�	H�����E���������,H�����H�5�	H��輅�E��������t��Y���fD�,H��賆�H�5�H�����E�@u���������������������������¹���7����������B����0���fD�,H���;��H�5x	H�����E@��{���e{���,H�����H�5C�H���ׄ�E�@��������Ws������������������|s���¹���<����������c����Q���f���T� �C���������7���� �	���������� �`����:�����O� ������������� �& ��� ����)���� ������Ϥ���H�5�yH�����8'���H�5�yH���Ճ��L���H�5oyH��較����H�5VyH��裃�k���H�5=yH��芃����H�5$yH���q��n����H�5yH���X�酾���H�5�xH���?�逽���H�5�xH���&��;���H�5�xH���
��F���H�5�xH�����Qm���H�5�xH���ۂ�/e���H�5uxH���‚�ث���H�5\xH��詂��f���H�5CxH��萂�Sf���H�5*xH���w��'?���H�5xH���^������H�5�wH���E��*���H�5�wH���,�����H�5�wH�����Q
���H�5�wH����9��H�5�wH����� Z���H�5{wH���ȁ��g���H�5bwH��证�9/���H�5IwH��薁�=2���H�50wH���}��!���H�5wH���d��r���H�5�vH���K������H�5�vH���2�����H�5�vH������K���H�5�vH�����ry���H�5�vH������`���H�5�vH���΀鞙���H�5hvH��赀�c]���H�5OvH��蜀����H�56vH��胀����H�5vH���j�����H�5vH���Q��e��H�5�uH���8���M���H�5�uH�����V���H�5�uH���������H�5�uH��������H�5�uH�����z���H�5nuH����+���H�5UuH�������H�5<uH������H�5#uH���p�-���H�5
uH���W�8����H�5�tH���>�����H�5�tH���%����H�5�tH����t����H�5�tH����~�j����H�5�tH����~����H�5ttH���~�9Y���H�5[tH���~���H�5BtH���~���H�5)tH���v~���H�5tH���]~�( ���H�5�sH���D~����H�5�sH���+~����H�5�sH���~����H�5�sH���}鹻���H�5�sH����}�0����H�5zsH����}����H�5asH���}��r���H�5HsH���}�S���H�5/sH���|}�J���H�5sH���c}����H�5�rH���J}�r���H�5�rH���1}����H�5�rH���}�O���H�5�rH���|����H�5�rH����|�o����H�5�rH����|����H�5grH���|�#B���H�5NrH���|�I����H�55rH���|�
���H�5rH���i|�k���H�5rH���P|�����H�5�qH���7|�Y���H�5�qH���|�
���H�5�qH���|鐋���H�5�qH����{�2w���H�5�qH����{�v���H�5mqH���{� v���H�5TqH���{�u���H�5;qH���{�>w���H�5"qH���o{��y���H�5	qH���V{��B���H�5�pH���={酯���H�5�pH���${�N���H�5�pH���{�}L���H�5�pH����z� ���H�5�pH����z�{���H�5spH���z����H�5ZpH���z�3���H�5ApH���z�9���H�5(pH���uz鯝���H�5pH���\z�����H�5�oH���Cz�����H�5�oH���*z�o����H�5�oH���z�B����H�5�oH���y额���H�5�oH����y�x����H�5yoH����y�؟���H�5`oH���y�8����H�5GoH���y黖���H�5.oH���{y�����H�5oH���by�����,H���pz饣���,H���^z�����,H���Lz����������:�f�����������h��f��,H���z�˔�����r��a��,H����y���� �b����H�5M@H���x�]��������G��H�5'@H���|x�����H�5@H���cx鰹����������è ���@�p������1�������(������r� ����H�5�?H���w���� �����H�5�?H����w���� �����H�5d?H���w����� �~��@�W�������1�����������	���� ����@�(�����x��1������������a��O�� �@�H�5�>H���&w�;� ����H�5�>H���w�޽��� �����H�5�>H����v����� ������H�5n>H����v鑤��� �o����H�5M>H���v�j���� �����H�5,>H���v����� �Y�@��l���H�5>H���Xv��l��� �J����H�5�=H���7v�E���� �?�@�$�����d��1���������������� �����H�5�=H����u�����������!�����A
������i����������������������v������0���������������������
�����t|���g��U���������.������c������q����������;�������	���o	������c���H�5u<H����t��c����t.���d��R����k	���H�5B<H���t�R	�����)
���H�5!<H���vt�
����� �����������������������u���u����t
�����������u���H�5�;H���t�u�������������b����b��ff.����Sf�H�� dH�%(H�D$1�H��)$H�D$H���[���H��裀H�D$dH3%(uH�� [��H���H�GH�WH9�r1��S�O!H��H)�L�G(@��H���ըH��tH��H�C�[Ð1�[�ff.��H�OH�GH9������?������{��H�PH�WH9����p@��,�����0@��	wvH��H�GH9����0@��9w0@��0��@��,��H��H�GH9�v{�0@��0rr@��9v�@��}ufH��H�G�Q���f���*��v��f�H���0����H�pH�wH9�v#�p��0��	wH��H�GH9�w�f.�H�WH�����@H��H�GH9��:�����ff.�f�ATUH��SL�Gf�����H�_A��L9����;]��H�CL9�s�;[u�{:��L9�sv�;^��A��� D��\uL9�sH�CH�EfDH��I9�vBH�C�;]H�Etc���[u�A��H���_���H�EL�E��DH�CL9�s	�;[�{���1�[]A\��H�OHH�m�H�L��U@[1�]A\�@[�]A\�fDH�sH�OHH��H�wH��U@��H��H�]�(���H�SH�UL9�s�{:t	H�]���H�E�{^tI�:H���
�����uL�E��H�UL�EL9�sɀ:]u�H�JH�MI9�v��z]u�H��H�U�%���H�CH�E��AVAUATUSH��H��@H�dH�%(H�D$81����#<;w(H��	��Hc�H�>����k @���H�sH)��{!�zH�C(�H��1�H��tHSH�����H�L$8dH3%(��H��@[]A\A]A^�DH��H�{H���X�����fDA��H�sH�of�)D$ H��H�D$0H�k�D$(�D$,�D$7�D$#�D$ �D$4H9��%D�k A��@H9����8)�vfA�����H�KHH�{H�S��S@D�k 1��/���DH�wH�KHH��H�s�S@��
����H�wH�KHH�A�H�s�S@����H����H�{H��������������H�GH�CH;C�����H��H�{�����C��H�����A��H�������D���H�CH�sH9������8|�����H��H�C���D�?����H�GH�CH9����O�Q߀�]�&L��	��Ic�L�>�␾
H���C����������H�CH�C�������aH�����D ��t:<��<u.H�{H9�t%��ȃ�<)�|��:�s��aH����v�1����L�oL�kL9��
�G<!��<=���>H�������t�H�sH��L)�H��uH�KHH�T�L��S@H�sH�{0H���I��H�V�L��L��譥H�s8L���S0L��苩H�CH�s���<-��H�CH�HH�KH9��B����P��:����)����a��� ������L �������H��@�������H����D H��H�CH9��������:�]��)�T��a����������L �������I��H��I��L�ɀ�u�1��5����)H���c������|���H�CH�s���L�w�'H��L�s�9������R���H�{0H�Ct�I��H�P�L��L���d�H�s8L��S0L���B�H�CH�s�@���H��H�{H9��G�{!tzH�C(�x(tp1��&H�{1�H��u�?\��H�sH�H�{H9�������u	�?)�;H�C(H)��H��u�1��J����H�CH�P�H9S�(����x�\�����)H���W�����u�1�����H�GH�C���H�wH�KHH���H��H�s�S@�����D�k �8)t%H��H�KHH�ɉH��S@1����@D�k ��H��H�C���H��H�KHH�}�H��S@1����H�GH�C����H�KHH�r�L��H��S@1��d�������H��H�KHH�5�H��S@1��D����D �k����<)�/����|$7u�C H��H�{�����9)t2�T$7D�k H�C��u
�C ���@���w����C �n����D$7<t<u�C H��H�K����C ��f.�ATU��S��H������A�Ą�u!�6fD�<)t<|t��H�������tH�CH;Cr�D��[]A\�DE1�[]D��A\�D��SH�H��`dH�%(H�D$X1����H�<$H�t$�D$!H��H�t$H�D$(H�D$pH�T$H�D$@H�D$x�L$ L�D$0L�L$8H�D$HH9�v%H��1�H���&�����tH�D$H�T$H9�s�8|tH�D$XdH3%(uH��`[��H��H�D$H9�w������f.��PXH�
�	�H�5o{	H�=z{	H��蛾�ff.�PXH�
	�H�5?{	H�=�{	H���k��ff.���AUA�����ATI��UH��SH��H���2�liH�sI+�$0L9�w4H���SiH�sH+sL9�wH���>iA�t$H��H��[]A\A]�'i�b���f�AUATUSH��H��H�6H����H�H��H��t`H9�w<H+7A�����L9�w)H��I����hH�uH+3L9�wH��L��[]A\A]�h���H�
4~	�"H�5<z	H�=�z	�l��H�
~	�!H�5z	H�=Kz	�M��H�
�}	� H�5�y	H�=z	�.��ff.�ATI��UH��S�wL���gH�}tCH�u�����H9�wQL���hH�}t1�@H�EL��4�H���gH9]w�[]A\�f�L����g�u[L��]A\��g����ff.�@ATUH��S�FH��t��tr��tm����[]A\��I���H���gH���x�I+$A�����H��L9���H���ZgH���B�L9�w{[H���]A\�?g�H��� �I�ĸ����I9�wQH���fD��H���gH����[L��H��H��]A\��eH�
|	�;H�5rx	H�=/y	袻����������AWI��AVAUL�-hy	ATI��UH��0SH��H��A�7H���fA�wH��L�3�fI�WI�wH��H���M���fA�?��-A�IcT�L�>��f�A�wH��H��[]A\A]A^A_�5fDA�wH���#fA�w���u��DA�wH���fA�w�����H����eI�W(I�w H��H�����I�W8I�w0H��H�����M�@�$����A�wH���eI�wH��L������I�w H��L������I�W0I�w(H��H��H��[]A\A]A^A_�L���H��H�5
x	H��H�D$�cA�wH���CeA�w�����H���.eI�w I�W(H��H�����I�w0H���-H��L���C���I�w8H����,H��L���+���I�w@H���+H��L������M�gH�����I9��YD��H���dM��tKI�WX�2����:A�T$�A�L�$��DI�WXB�4*I������H���kdM9�u�I�WhI�w`H��H���3���I�p��,�H���cI�WxI�wpH��H������I����Y,�H���cI���H��H��I�������I����,�H���YcI���H��H��I������I�����+�H���%cI���H��H��I����l���I�����+�H����bI���H��H��I����8���H������H��L)�H9���H�SH�L$�
H��[]A\A]A^A_�DA�wH���cA�w�����H���bI�W(I�w H��H������I�w0H��L������I�W@I�w8�J����A�wH���bA�w���tJH���bI�W(I�w H��H���w���I�W8I�w0H��H���d���I�w@H��L�����A�wH��������s���A�wH���SbI�wH��L�����I�W(I�w H��H������M�0����A�wH���bI�wH����%H��L���;���I�W(I�w �i���fDA�wH����aA�w����f���H����aI� �K%�H���.aI�W(I�w H��H���{���I�W8I�w0�	���fDA�wH���{aM�����f�A�wH���caI�W I�wH��H���0���I�W0I�w(H��H������I�W@I�w8H��H���
���I�wHH��H��H��[]A\A]A^A_�M���DA�wH���`I�W I�wH��H������M�(M���@���1����A�wH����`I�wH����$H��L�����I� ��$�H���`I�W(I�w H��H���`���I�0��$�H����_I�W8I�w0H��H���5���A�w@������H���@`A�wD�������H���+`I�WPI�wHH��H�����M�X�t����A�wH���_I�W I�wH��H������I�(��#�H���P_I�W0I�w(H��H�����I�8�^#�H���%_I�W@I�w8H��H���r���I�wHH��L������M�PM������1��s�A�wH���[_I�W I�wH��H���(���I�W0I�w(H��H������I�w8H��L���f���A�w@��������H���_A�wD����A�wH����^A�w����~���H����^A�w���DA�wH����^I�wH����"H��L�����I� ��"�H���^I�W(I�w H��H���`���I�w0I�W8H��H���M���I�w@H���`"H��L�����I�wHI�WPH��H���"���I�wXH���("H��L���j���I�WhI�w`H��H����M�p�s���fDA�wH���]I�wH���O"H��L���#���I�W(I�w H��H����I�W8I�w0H��H����I�WHI�w@�+���A�wH���]I�wH���"H��L������I�w H�����H���\����A�wH���c]I�wH����!H��L�����A�w �������H���6]I�W0I�w(H��H����I�W@I�w8���fDA�wH���]I�wI�W H��H�����I�w(H���u H��L�������8���A�wH����\M�o�����I9��L���D��H���\M��tFI�W(�2����-���A�U�A�L�4���I�W(B�4*I���������H���c\M9�u�I�w0H���c$H��L�����I�w8H����H��L���n���I�WHI�w@H��H����I�WXI�wP���A�wH���\M�o�����I9������D��H����[M��tII�W(�2����h���A�U�A�L�4��@I�W(B�4*I������;���H���[M9�u�I�W8I�w0H��H���c�I�WHI�w@H��H���P�I�wPH��L����I�wXH����H��L�����7	A�wH���7[A�w�������H���"[A�w����A�wH���[I�W I�wH��H�����M�o(�����I9�����D��H����ZM������A�U�E1�L�4�I�W8L��J�4*H��I�����M9�u����A�wH���ZI�wH��L�����I�o �����H9��
�����H���kZH���.����U�1�L�,�I�W0L��H�4*H��H���~�I9�u�����A�wH���'ZA�w���A�wH���ZI�H����I�0H��H��[]A\A]A^A_��A�wH����YI�W I�wH��H����M�w(�����I9��Q���D��H���YM��t2A�V�E1�H��H�D$I�W8L��J�42H��I����L9t$u�I�@�q�H����XI�WHI�w@H��H���,�I�wPH���7H��L���t�I�wXH���H��L���\�M�`M���t�1���A�wH����XM�w�����I9��y���D��H����XM��t2A�V�E1�H��H�D$I�W(L��J�42H��I�����L9t$u�I�w0H����H��L�����M�w8�����I9��
���D��H���jXM��t2A�V�E1�H��H�D$I�WHL��J�42H��I���z�L;t$u�I�P�g�H���WI�WXI�wPH��H�����I�`�-�H���pWI�WhI�w`H��H����I�WxI�wpH��H����M����#�A�wH���WI����A�wH���WI�o�����H9��!�����H���WH���B�U�1�L�,�I�W(L��H�4*H��H����I9�u���A�wH���;WM�o�����I9����D��H���WM��tKI�W(�2������A�U�A�L�4��fDI�W(B�4*I������s�H����VM9�u�I�W8I�w0H��H����I�w@H��L�����I�H���H���VI�WPI�wHH��H���a�I�wXH����H��L����I�w`H����H��L����I�whI�WpH��H����A�wx���������@A�wH���VI�wH���kH��L���C�M�o �����I9����D��H����UM��t+A�U�E1�L�4�I�W0L��J�4*H��I����M9�u�I�w8H���p���1�H���U�l���A�wH���UI�wH��L����I�w H��L����I�(���H����TI�W0I�w(���A�wH���=UI�W I�wH��H���
�M�(��A�wH���UI�wH���&H��L���<�I� ��H���dTI�W(I�w H��H����I�w0I�W8H��H����I�w@H����H��L�����I�wHI�WPH��H���s�I�wXH���JH��L����A�w`�����H���fTI�WpI�whH��H���3�M�x��A�wH���=TI����H���SI�W I�wH��H�����M�o(�����I9����D��H���SM����A�U�E1�L�4�I�W8L��J�4*H��I����M9�u��A�wH���SI�wH��L�����I�w H���kH��L�����I�W0I�w(H��H���U�I�8���H����RI�W@I�w8���A�wH���CSI�W I�wH��H����I�w(H��L���a�I�0���H���RI�W8I�w0H��H�����I�w@H����H��L����I�wHH����H��L����I�P���H���.RI�WXI�wP��A�wH���RI�wH��L�����I�w H��L����I�w(H��� H��L����I�W8I�w0H��H���+�I�WHI�w@H��H����I�P���H���QI�WXI�wPH��H�����I�WhI�w`�{�A�wH����QM�o�����I9��y�D��H����QM���2�A�U�E1�L�4�I�W(L��J�4*H��I�����M9�u���A�wH���QI�wH����H��L����I�w H��L����M�o(�����I9����D��H���LQM��t+A�U�E1�L�4�I�W8L��J�4*H��I���a�M9�u�I�w@H��L���M�I�H���H���uPI�WPI�wHH��H�����I�X����H���JPI�W`I�wX�8�A�wH���P�AGH��H��[]A\A]A^A_��QA�wH���PI�wH����H��L����I�W(I�w H��H���<�I�W8I�w0���A�wH���BPI�w�K�A�wH���,PI����H���O����A�wH���PI�wH����H��L���*�M�o �����I9��p�D��H����OM��t+A�U�E1�L�4�I�W0L��J�4*H��I�����M9�u�I�w8H���wH��L�����I�@�RH�߾��NI�WHI�w@H��H���:����A�wH���HOI�wH����H��L���p�M�o �����I9����D��H���OM��t+A�U�E1�L�4�I�W0L��J�4*H��I���(�M9�u�I�8�qH�߾�KNI�W@I�w8H��H�����hA�wH���NI����H���NI�W I�wH��H���[�M�o(�����I9���D��H���^NM���UA�U�E1�L�4�I�W8L��J�4*H��I���o�M9�u��%A�wH���NI�wH���.H��L���@�I� �	�H���hMI�W(I�w H��H����I�0���H���=MI�W8I�w0H��H����A�w@����5�H���MA�wD���� �H���MA�wH�����H���kMI�WXI�wPH��H���8�M�`��A�wH���BMI�W I�wH��H����I�W0I�w(��A�wH���MI�wH��L���F�I�W(I�w �t�A�wH����LM�w�����I9��r�D��H����LM��tNI�W(�2����S�A�V�A�H��H�D$�f�I�O(B�41I������#�H���LL9t$u�I�W8I�w0H��H���I�I�WHI�w@H��H���6�I�wPI�WXH��H���#�I�w`H����H��L���k�M�hM�����1���A�wH���LI�o�����H9������H����KH������U�1�L�,�I�W(L��H�4*H��H����I9�u��|�A�wH���KM�o�����I9��)�D��H���KM��tKI�W(�2����
�A�U�A�L�4��fDI�W(B�4*I��������H���;KM9�u�I�W8I�w0H��H����I�w@H��L���T�I�wHH���
H��L���<�I�wPI�WXH��H�����A�w`�������o��A�wH����JM�w�����I9��I�D��H���JM���l�I�W(�2����&�A�V�A�H��H�D$�DI�O(B�41I��������H���SJL;t$u���A�wH���:JA�w������H���%J���A�wH���JM�w�����I9����D��H���IM��t2A�V�E1�H��H�D$I�W(L��J�42H��I����L9t$u�M�w0�����I9��E�D��H���IM��t2A�V�E1�H��H�D$I�W@L��J�42H��I����L9t$u�I�wHH����H��L����M�wP�����I9����D��H���6IM��t2A�V�E1�H��H�D$I�W`L��J�42H��I���F�L9t$u�M�wh�����I9����D��H����HM��t2A�V�E1�H��H�D$I�WxL��J�42H��I�����L;t$u�I���H����H��L�����M���M�����1��}f�A�wH���cHI����H����GI�W I�wH��H�����I�w(H��L���i�I�0���H���G�<�A�wH���GI�wH����H��L���'�M�o �����I9��m�D��H����GM����A�U�E1�L�4�I�W0L��J�4*H��I�����M9�u����A�wH���GI�W I�wH��H���Q��M�w(�����I9����D��H���TGM����A�V�E1�H��H�D$I�W8L��J�42H��I���`�L9t$u��cA�wH���
GI�W I�wH��H������I�(��
�H���_FI�W0I�w(H��H�����I�w8H����
H��L������I�@�3H�߾�FI�WHI�w@H��H���i����A�wH���wFI�W I�wH��H���D��M�o(�����I9����D��H���GFM�����A�U�E1�L�4�I�W8L��J�4*H��I���X��M9�u��Q�A�wH���FA�wH��H��[]A\A]A^A_�fEA�wH����EI����H���AEI�W I�wH��H�����I�W0I�w(H��H���{��I�8�
�H���E�A�A�wH���qEI�wH��L�����I�w I�W(H��H���/��I�w0H���
H��L���w��I�W@I�w8H��H�����M�HM���|��1�����A�wH���EM�o�����I9����D��H����DM��t+A�U�E1�L�4�I�W(L��J�4*H��I�����M9�u�I�0�t
H�߾�DI�W8I�w0H��H���k���A�wH���yDI�wH��L�����I�W(I�w H��H���7��I�w0H��L�����A�w8����������fDA�wH���#DI�wH��L���T��I�w I�W(H��H������A�w0������H����CI�W@I�w8�Z��A�wH����CI�w��A�wH���CI�wI�W H��H�����I�w(H���zH��L������I�0����H���BI�W8I�w0����A�wH���_CI�W I�wH��H���,��I�(�z
�H���BI�W0I�w(H��H�����I�w8H���@
H��L���I��f�I�@���H���hB�&�A�wH����BI��x�H���>BI�W I�wH��H�����I�w(H���>H��L������I�w0H���H��L�����I�w8H����H��L�����I�w@H����H��L�����I�H�h��H���AI�WPI�wH���A�wH���BI�W I�wH��H������M�o(�����I9�����D��H����AM���#�A�U�E1�L�4�I�W8L��J�4*H��I�����M9�u����A�wH���AI�wH���r	H��L������I� �M	�H����@I�W(I�w H��H���@��A�w0�������H���KAI�8���H���@I�W@I�w8H��H�����I�H���H���@I�WPI�wHH��H������I�wXH���{H��L�����I�`�V�H���E@I�WhI�w`H��H�����M�pM���
��1����fDA�wH���@I�W I�wH��H���X��I�W0I�w(H��H���E��I�w8H��L�����A�w@�������H���A@A�wD�������H���,@A�wH����A�wH���@M�o�����I9�����D��H���?M��t+A�U�E1�L�4�I�W(L��J�4*H��I�����M9�u�I�w0H���&H��L������M�o8�����I9��7��D��H���?M��t+A�U�E1�L�4�I�WHL��J�4*H��I�����M9�u�I�P���H����>I�WXI�wPH��H�����I�`�V���H���>I�WhI�w`���A�wH���?I�wH���sH��L���/��M�o �����I9��u��D��H����>M��t+A�U�E1�L�4�I�W0L��J�4*H��I������M9�u�I�w8H����H��L������M�o@�����I9����D��H���m>M��t+A�U�E1�L�4�I�WPL��J�4*H��I�����M9�u�I�X���H���=I�W`I�wXH��H������I�h�/���H���z=I�WpI�wh�h��A�wH����=I�W I�wH��H�����M�o(�����I9��S��D��H���=M������A�U�E1�L�4�I�W8L��J�4*H��I�����M9�u����A�wH���j=A�w�������H���U=�U��A�wH���C=I����H���<I�W I�wH��H�����I�(���H���<�M���A�wH����<M�M���F��1�����f.�A�wH����<I�o�����H9��I����H���<H���j���U�1�L�,�I�W(L��H�4*H��H�����I9�u��<��1�H����;����H����;�Y��1�H����;���1�H���;�y��H���;�K�1�H���;�$�H���;�G�H���;����H���x;���1�H���i;�d��H���\;�,��1�H���M;�H��H���@;���1�H���1;�W��H���$;�T��H���;���H���
;���1�H���:�L��1�H����:����1�H����:�
���1�H����:�<�H���:���H���:��H���:�|�H���:���H���:���H���:���1�H���q:��1�H���b:�V�H���U:�X�1�H���F:���1�H���7:��H���*:�u�1�H���:�]���1�H���:����H���9���H����9�
���H����9���H����9���1�H����9���H���9�M�1�H���9�(���1�H���9�S�1�H���9��1�H���9�q���1�H���q9�B�1�H���b9��H���U9���H���H9����H���;9�e�H���.9�@�1�H���9��1�H���9����1�H���9�D�1�H����8���H����8���1�H����8��1�H����8�*���H���8�N�H���8���H���8��1�H���8�^�H���8�K�1�H���u8�$�1�H���f8��H���Y8���H���L8����1�H���=8���1�H���.8�.�1�H���8�
�1�H���8�`�H���8��1�H����7�?�1�H����7�
�1�H����7�?���1�H����7�M���1�H���7����1�H���7����H���7���H���7���H���7���1�H���s7���1�H���d7���1�H���U7�D��1�H���F7���1�H���77���1�H���(7�{��H���7��1�H���7�/��1�H���6�f�1�H����6��f�AVI��H��AUA�����ATUH��SH���jL9�����H���.7H�[H��teD�sH���7H�{ 輠�I��L9�wM��H���6H�s L��H���K5H�SH�sH��I��0����s)H���H6H�H��u�[]A\A]A^�H�
PL	�H�58H	H�=CH	�h�������ATI��H��UH��SH����i�����H9�wI��H��I��0�\6H�[H��t*�sH����5H�SH�sH��L�����H�H��u�[]A\��/��ff.�@��ATI��UH��SH� 詟�H�ø����H9�w��L����5H�u H��L��[]A\�/4����f.�AVAUA�����ATUH��SH��H��������H���6L��`M9���D��H���w5M��tWH��pH�0L9��oA�D$�A�L�4��"f.�H��pJ�4 I��L9��8H��� 5M9�u�H���H��H��A������s���H����GhL9��<��H����4L���M��tw�I�t$H+�0L9���H���4A�t$�����H���4I�t$H+�0L9���H���4A�t$�����H���j4M�$$M��u�H���tW�H����3H���H���H��H��0�
��H���H��H�����H���H��H��[]A\A]A^����1�H���v3��@H�
�I	�H�5qE	H�=|E	衈�H�
*I	�H�5RE	H�=�E	肈����ff.�f���AWA�����AVI��AUI��ATUH��H��SH������L��I��/A��PL���X3L��H��L�����I�L9��ZI�VL���A��PI�.�4��N/A��T����E1��bf.�I�L9�������I�V
�L��H�L$�D
�H�SH�3�1H�L$H�CL9�w|I�V�D
�A��E9�TvXI��@D��H�‹%���?t܍X���H�L��BHc�H��I�H��,@�j���H�I+�0L9�w9I�V�D
�닐H��[]A\A]A^A_�H�
�G	�H�5�C	H�=�C	���H�
{G	�H�5�C	H�=D	�ӆ�H�
<G	�@H�5xD	H�=�C	贆�����ff.�@��AVI��AUI��H�ι
ATI��USH��PdH�%(H��$H1�H�l$H�|$H��$��H�H���<U��H��L��L��H���+`H����H��L�$$H�D$H��H��$��g1�L��I���0L��H���p���L��H���X��H���}fH���ET��H��$HdH3%(uH��P[]A\A]A^���ff.�f���AVI��AUI��H�ι
ATI��USH��PdH�%(H��$H1�H�l$H�|$H��$��H�H���LT��H��L��L��H���;_H����H��L�$$H�D$H��H��$��f1�L��I����/L��L��H���]hL��H���W��H���eH���RS��H��$HdH3%(uH��P[]A\A]A^��
��f.�H��H����L�����G�f.��H��i�Q-���i��5�1��
���dkT�L9�u�H��1҃�t"H����A�8	�H��u�i�Q-���iғ5���1�1Љ���1�i�k�녉��
1�i�5��‰��1��fDI�����G��fDI��H�H��t$I�H�4��4���A�yt5]�S���I�y����������N�B�����f/�w	1�f/����ff.�f��f��Dt7vf��Rtf��{u/�G,��Ðf��6u �Gf/�����f�H��PH�
2M	��H�5&D	H�=u>�:��f.�ATUSH��dH�%(H�D$1����6f��Y�vH�!D	��H��Hc�H�>��H�nHH���iH��I���	iL��H�������Si�Q-���iғ5�1�H�L$dH3%(�2H��[]A\�@H�~����H�{0A���s���D1�5mBP��f�H��H���hH��H���hH��H������@�WH�vH�?��cH��H�$�h����j���H�nH�^H���0hH���I���2hL��H���7���i�Q-���iғ5�1��(����H�~���������DH�v����i�Q-���iғ5�1����fDH�~�������H�
�K	��H�5_B	H�=�<�s��讴�ff.�AUATUSH�����3f��]��H����H��C	H��Hc�I��H�>��f��H�5\�H��H��[]A\A]�*f��H�5Q���f��Cf(�fT
O�f.
?��af.��#�H�C�8-�~�H�5�A	�f�H�[�H�5�A	�*H���������H��L��H���
���f�;{���H�5VA	�>���f�H��H�s[]A\A]�\D�H�5`�������(��*H�sH���j\�/H���*H�s0H���Q\�)H��H��[]A\A]�*f.��/L�cH�r*L����eL��I����e1�L��H��H���,�/H���B*�C��v��N����H�5ú���N���H��[]A\A]��H�VH��1�H�5A@	[]A\A]�$'@H���"H����)H���7eH��I���<e1�L��H��H����+�"����f��VI�<$H�s�`H��H��H�5�[��]1�A\A]�&H��H�f.��:H��H�R)H���dH��I���dH��L��H��[1�]H��A\A]�e+DH�C�8-�"�H�5���>���H�
KH	�VH�5?	H�=n9�3~��H�5��H���'�C����H�5�H���'�C�m����+H���(�c���fD�H�5x�H���T'�C�E����*H���[(�C���fDH�5@ H���|%�.H����2H��������eH����2H���t?H��H��H��[H�D>	]A\A]��2�-��'�����-��'�s���H���k$�f���UH��H�rHSH�}HH��H����b��u�Cf9Er����H��[]���������f�PXH�
G	�AH�5�=	H�=�7H���|�ff.����f=�tf=�t
f=�t?P����H�~H�f=�tf=�tf=�u�H�r�.bfDH�rH�b�H�~��f��f��Rt'H��f=�u]H�BH�?�H���]H��H��DH�z �J,t%H����������H��HD��f.��B(H��H�ڄ�HE��H�
�E	��H�5�<	H�=�6�{����f�>�tf�:�tH��H�~H���VfDAUL�oATUH��SH��H��L��H���)���H��L��H��I������1�I9ĸ������L�H��[]��A\A]�ff.���SH��H����2f9���f��Dtvf��Ru?H��H��[�J���f.�f��6���K�B�����f/�vqH��[�f��{uqH�r0H�{0H�T$��U��u�H�T$H��H�{[H�r�UDH�RH�[�2�f9��d���1�f9�����B���1�f/���H��[�H�
zD	�/H�5;	H�=]5�"z�f�AWAVAUI��ATI��USH��H��(�G�o�L$�L�D$9��@�����|-��|$���H�D$H�����D$H�;E1��h�D��L�4�M��tL��L���q���H�L$H�;!�L�4�A��D;{r��d��H�D$H��D$�CL��L���:���!�I����L��L��H�D$�Ѕ�toA��A!�D��H�L�4�L�H�2H��uσCL�*1�H��([]A\A]A^A_�����A��H�D$H��t�H�;��D$�Y���f�H�L�H�H��t��|$t�L�*H��([]A\A]A^A_�f����3������H���dH�%(H��$�1����3f��]��I����H��H�
b<	Hc�H�>���I�A`H��tE��tRI�Q`�L@I�AhH��tE��t:I�Qh�4@H�|$ A��I�yL�<�t$(H�t$ H�D$0����DH��$�dH3<%(�`H���ÐH�|$@A��I�y L������t$HH�t$@H�D$P����H�<$A��L��L����t$H��H�D$�Y�����I�ApH��t	E���n���I�Qp�e���DH��$�A��I�y@L�)�����$�H��$�HDŽ$�����$���@I�AxH��t	E������I�Qx����DH�|$`A��I�y0L�L����t$hH�t$`H�D$p�������H��$�A��I�yPL������$�H��$�HDŽ$��i������@1����贩�@��SD�GH��E��u/�{��u7�s,��u@�K<��uI�SL��uR�C\��u[[�f.�H�?����{��t�H�{���s,��t�H�{ ����K<��t�H�{0�؉��SL��t�H�{@�ȉ��C\��t�H�{P[鷉����AVAUATUSH��0dH�%(H�D$(1�A�H�t$�T$��3H�L$ f��]��H����H��H�5�:	Hc�H�>����H�5��H����@H�D$(dH3%(�H��0[]A\A]A^���H�5��H�����f.��A@f(�fT
n�f.
^���f.8�����I�@�8-�7	�H�5�5	H���K�^���fDI�XH��H�5�5	�(H�������P���3f��]��H�a;	��Hc�H�>��@I�pH���P�����H�5p�H���������H��(L�D$��L�D$H��I�p�ePH��/�L�D$H��I�p0�GP�)H����}���DI�XH�/H��L�D$�jH����YH��I����Y1�L��H��H��� �/H���:L�D$A�@���������������H�5��H��������H��H�584	H��1�������I�X�"H���H���'YH��I���,YH��1�L��H�����"H������f.�I�p�gTH�5o�H���1���W����I�XH�f�I�XH�:H���?H���XH��I���X1�L��H��H���\�����I�@�8-���H�5z�H��������H�5v�H���fDf�;{���H�5	3	H�������:L�cHH���L���XL��I���	X1�L��H��H����L�cH�"H���fL����WL��I����WH��1�L��H����"H���6�a���H�s�T$H�|$�SH�5�H���1��L�7���L�c�H�T$ H�5G2	H��1��+�����/L�cHH����L���=WL��I���BW1�L��H��H�����/H����C�����������������H�5�H���M���H��(�[H�sH���LH��/�BH�s0H����L�)H���)�T����H�5��H�����;���H�sH���L�*���L�cH��H�531	��L�������-A�$��3f��]�'H�q8	��Hc�H�>���Cf(�fT
[�f.
K��WH�C�8-�]�H�5��H���L����H�5�H���3�~����H�5��H���fA�<${���H�5q0	H����E����:M�l$HH���L���kUL��I���pU1�L��H��H��� �M�l$H�"H����L���4UL��I���9UH��1�L��H�����"H����]���I�t$�T$H�|$�tPH�5|�H���1���2���M�l$�H�T$ H�5�/	H��1�������/M�l$HH���8L���TL��I���T1�L��H��H���U�/H���A�D$��>�������������H�5�H������H��(�I�t$H���_JH��/�I�t$0H���EJ�)H����I����H�5��H���O�0���I�t$H���
J����M�l$H��H�5�.	�L��������BH�t$L��H����fA�}{���H�5V.	H��������AD$f(�fT
��f.
���<I�D$�8-��H�5B�H����x����H�5S�H���~�_���H�
�6	�VH�5�-	H�=(��l�f.��H�5`�H��L�D$�7L�D$A�@�0�����H�5]�H��L�D$�L�D$A�@�����H�5�H����L�D$A�@����D�+H�������fD�*H�������fDH�5�H�����.H���G!H���������eH���0!H����e�H��,	H��H���?!�R����-H���M�E����-H���;���f.������H�C�8-��H�5Q,	H�����,����H�5�H�����C�V����H�5��H����C�1����H�5�H����C�����+H�������*H����S���H�5q
H����.H��� H��������eH���H����|�H�|+	H��H��� �S����-H������H�������-H��������}���+H��������H�5��H���A�D$�����H�5�H���A�D$���f.5�zZuXI�D$�8-���H�5�*	H���O�0����H�5Z�H���6A�D$�a����*H���>�&���H�5)H���e�.H����H�������eH���H���t.�H�8*	H��H��������-H�����J���H���e��H���[�w����-H�������@��H�������H�%>	��Hc�H�>��H��H���H�$:	��H�:	��H�:	��H�����H�����H�����H��9	�H��9	�H��9	�H��9	�H�N3	�H�u9	�H����H�c��z���H�J9	�n���H�.9	�b���H��9	�V���H�9	�J���H�:��>���H��8	�2���H��8	�&���H��8	����H������H��8	����H��8	���H�t8	���H�������H�L8	����H�68	����H�98	���H��5���H�8	���H��7	���H��7	���H��7	�~���H��7	�r���H�x7	�f���H�d7	�Z���H�F7	�N���H�7	�B���H�7	�6���H��6	�*���H�]3	����H��6	����H��6	����H�����H�6	���H�c6	���H�M6	����H�.6	����H�D6	���H�P5	���H��5	���H�E����H�2����H��5	���H��5	�v���H��5	�j���H�p5	�^���H�M5	�R���H�35	�F���H�5	�:���H��4	�.���H��4	�"���H��4	����H��4	�
���H��4	���H�k4	��H�R4	���H�84	����H�4	����H�4	����H��3	���H��3	���H��3	���H��3	���H�{3	���H�c3	�z���H�K3	�n���H�23	�b���H�3	�V���H�3	�J���H��2	�>���H��2	�2���H��2	�&���H��2	����H�|2	����H�]2	����H�E2	���H�+2	���H�2	����H��1	����H��1	����H��1	���H��1	���H��1	���H�x1	���H�^1	���H�=1	�~���H�#1	�r���H�1	�f���H��0	�Z���H��0	�N���H��0	�B���H��0	�6���H�4��*���H�e0	����H�I0	����H�}�����H�#0	���H������H��/	���H��/	����H��/	����H�-3	���H��/	���H��/	���H�e/	���H�I/	���H������H�%/	�v���H��2	�j���H��.	�^���H��.	�R���H��-	�F���H��.	�:���H��.	�.���H��.	�"���H��.	����H����
���H�a.	���H�
4	��H��3	���H�r�����H�b�����H�������H�|����H��3	���H�R3	���H��-	���H��-	���H��-	�z���H��-	�n���H��-	�b���H�_-	�V���H�@-	�J���H�!-	�>���H�-	�2���H��,	�&���H��,	����H��,	����H��,	����H��,	���H�,	���H�j,	����H�@,	����H�D,	����H�,	���H��+	���H��2	���H��+	���H��+	���H��+	�~���H�
�;	�\H�5�2	H�=\�!a�H�
�;	�bH�5�2	H�==�a�f���H�������H��8	��Hc�H�>��f�H�	�H���@H������H��4	���H��4	���H�z4	��H��3	��H��3	��H���H���{���@H�m��k���H�85	�_���H���S���H��4	�G���H���;���H��4	�/���H��4	�#���H��4	����H�������H�x4	���H�g4	��H�V4	���H�E4	����H�44	����H�#4	����H������H������H�~3	���H�g4	���H�V4	���H�a��{���H�94	�o���H�M��c���H�q��W���H��3	�K���H��3	�?���H��2	�3���H��2	�'���H�q2	����H�������H�I2	����H�82	���H�M2	���H��2	����H�m2	����H�X2	����H�D2	���H�&2	���H�2	���H�d1	���H��1	���H��1	����H��1	�s���H��1	�g���H�t1	�[���H�`1	�O���H�M1	�C���H�x��7���H�	��+���H�0	����H�������H�������H�3	���H��2	���H��2	���H��2	����H��1	����H��1	���H������H��1	���H��1	���H��1	���H�p1	���H�q��w���H�}1	�k���H����_���H�Z1	�S���H�-1�G���H��.	�;���H��.	�/���H��.	�#���H��.	����H�������H�11	���H�!1	��H�Z����H�/	����H�
1	����H�i.	����H�0	���H�T0	���H�o0	���H��0	���H�,/	���H��0	�{���H��.	�o���H��.	�c���H�w.	�W���H�f.	�K���H���?���H�J.	�3���H�%��'���H�-.	����H�.	����H��-	����H��-	���H�^����H��.	����H������H�t.	����H�X.	���H�v.	���H�b.	���H��-	���H��-	���H�.	����H��-	�s���H��-	�g���H��-	�[���H����O���H��-	�C���H��1�7���H�u-	�+���H��.	����H��.	����H��-	����H��-	���H��-	���H��-	���H��-	����H�������H������H�'����H�r����H�C����H�C���H������H�X,	�w���H�5��k���H�1,	�_���H�Q��S���H�A��G���H��+	�;���H��+	�/���H���#���H�Q1����H������H��+	���H��+	��H�s+	���H�b+	����H�������H�7+	����H�+	���H�+	���H�
�3	��H�5�*	H�=��UY�H�
�3	��H�5�*	H�=q�6Y�fD����fD��SH��H�H�wH���%^�H��H�C[���f���SH��H�H�G���]�H��H�C[�����H�G����H�����AUATI��USH��H��L�/I�l5H�wH�H9�v<H��uH�C�H��v�H�H9�w�H�s�7��H��H�CH��tH�+H��L�L��[1�]A\A]�O��H��[]A\A]�D��AWAVAUI��ATUH��SH���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�I��H��$1�H�D$1�H�D$ M��I��H�������$�D$0H�D$�e���xg��M�}I�uHc�N�4;I9�wwI�}M�uM��I��H��$H������H��H�D$L�H�D$ �$�D$0H�D$�d�I�mH�D$dH3%(u[H���[]A\A]A^A_�DH��uI�E�I��v�H�I9�w�I�uI�}�{��I�EH���G����跉����AVI��AUATI��USL�/H��H�wH�J�,*H9�v<H��uH�C�H��v�H�H9�w�H�s���H��H�CH��tH�+L�[L��]L��A\A]A^���f�[]A\A]A^����AVI��AUATI��USL�/H��H�wH�J�,*H9�v<H��uH�C�H��v�H�H9�w�H�s�w��H��H�CH��tH�+L�[L��]L��A\A]A^�R��f�[]A\A]A^����AUA��ATUSH��H��L�'H�wH�GI�l$H9�v<H��uH�G�H��v�H�H9�w�H�sH�����H�CH��tH�+F�, H��[]A\A]�f���AVAUATU��SH��L�/H�wH�G����A��M�eA�΀I9�v5H��uH�C�I��vH�I9�w�H�sH���\��H�CH��tL�#F�4(H�C��L�+H�s��w�M�eI9�wL�#B�,([]A\A]A^�H��uH�C�I��v�H�I9�w�H�sH�����H�CH��u�븐M�eL9�s�H��uH�G�I��t��H�L9�r��ff.����6��1�����ff.�@��ATUSH��H��L�'H�wH�GI�l$H9�vEH��uH�G�H��v@H�H9�w�H�sH���D$�&���D$H��H�Ct	H�+fB� H��[]A\�D��H����AWI��AVE1�AUA��ATI��UH��SH���@H�5��L��1����L9�t5C�4I���C�<v�C�<wv3��E��t�1�H�5
pL�����L9�u�H��[]A\A]A^A_�fD<U��H�
a-	��Hc�H�>��@I�I�wH�ZH9��I�G�\\I�f��h����E����I�I�wH�ZH9���H��uI�G�H��vH�H9�w�I�wI�H�$�Ϙ�H�$H��I�G�T���f�I�I�wH�ZH9��I�GI��\bf������I�I�wH�ZH9��<I�GA�\fI�fD����DI�I�wH�ZH9��LI�GA�\nI�fD��f���DI�I�wH�ZH9���I�G�\"I�f�4�8����I�I�wH�ZH9���I�GA�\tI�fD�����DI�I�wH�ZH9���I�G�\rI�f�<�����E����I�I�wH�ZH9���H��uI�G�H��vH�H9�w�I�wI�H�$�?��H�$H��I�G���j���f�I�I�wH�ZE��upL9�vkC�4<{A��<@@��A�u<$uQH9���I�GI��\I�GI�I�wH�Z�0@M�I�wI�PH9���I�GI�B����@I�GH9�sHH��uI�G�H��t�H�H9�r�I�wH��H�$�`��H�$H��I�G�����I��#�����H��uI�G�H��vH�H9�w�I�wI�H�$���H�$H��I�G������2����H��uI�G�H��v�H�H9�w�I�wI�H�T$L�$貕�L�$H�T$H��I�G������������fDH��uI�G�H��v�H�H9�w�I�wI�H�$�G��H�$H��I�G�.����r����H��uI�G�H��v�H�H9�w�I�wI�H�$��H�$H��I�G�~����"����H��uI�G�H��v�H�H9�w�I�wI�H�$觔�H�$H��I�G��������H��uI�G�H��v�H�H9�w�I�wI�H�$�W��H�$H��I�G���������H��uI�G�H��v�H�H9�w�I�wI�H�$���H�$H��I�G�����2����H��uI�G�H��v�H�H9�w�I�wI�H�$跓�H�$H��I�G�n��������H�5jL��1�������I�GA�\vI�fD����I�G�\aI�f����H��uI�G�H��t
�H�H9�r�I�wI�H�$�'��H�$H��I�G�2����8������AVAUI��ATI��USL�7H��H�wH�GI�,H9�v<H��uH�G�H��v�H�H9�w�H�sH��贒�H�CH��t+H�+J�< L��H���x�H�{L��[L��]A\A]A^邘�f�[]A\A]A^����AVAUATUSH�.H��u[]A\A]A^�L�/L�vH��H�wH�N�d-I9�v9H��uH�C�I��v@H�I9�w�H�s���H��H�CH��t�L�#L�[H��L��]A\A]A^���f���H��@��H�H��t,SH���fDH�H��H�tH�S�|��>��u�[�����SH�_@��H�H����E�H��H)�H��H�����[HE��f���AVAUATUSH�H9���H��H��I��I��L�$t>H����H�}H�UH�4L)�L��v�H]H��[L��]L��A\A]A^��DH�wH�I9�v8H��uH�E�I��vH�I9�w�H�u运�H��H�EH��tL�eH��f.�[]A\A]A^�H�
�%	�,H�5G$	H�=W$	�I����H��S]���1�H�
�&	H��~fD��t	H��H9�u��@��AVAUATUS1�H��~GI��I��L�5�&	H���H��I9�t)�LH�tH��A�t<
u�L��H����(I9�u�H��[]A\A]A^�f.���1�H�
3&	H��~fD��t	H��H9�u��@��1�H�
&	H��~fD��t	H��H9�u��@��@��H��%	�8���f���@��H��%	�8�������H��~l1�1�L��$	�f.�1�H��H9�t-D�L�M��C�t2A��_u܄�tH��L�
H9�u�@A�9_t"��f�H��u1���L�
�L�L���D��H��~l1�1�L��#	�f.�1�H��H9�t-D�L�M��C�t2A��_u܄�tH��L�
H9�u�@A�9_t"��f�H��u1���L�
�L�L���D��1�H�
s#	H��~fD��t	H��H9�u��@��H��~l1�1�L�<#	�f.�1�H��H9�t-D�L�M��C� t2A��_u܄�tH��L�
H9�u�@A�9_t"��f�H��u1���L�
�L�L���D��1�H�
�"	H��~fD��@t	H��H9�u��@��H��~l1�1�L�|"	�f.�1�H��H9�t-D�L�C�<M��y2A��_u܄�tH��L�
H9�u�@A�9_t"��f�H��u1���L�
�L�L���D��@��H��!	�8���f���@��H��!	�8�����fD��@��H��!	�8�����fD��@��H��!	�8�����fDPXH�
�$	�H�5k#	H�=�#	H����D�ff.���H�GH�H�G�@��UH���SH��H��H�����H�CH������H�kH�H��[]�@��U��SH��H��H�H�wH�GH9�r'H��u<� �H�SH���6��H�CH��t-H�H�JH��,��H��[]�@H�6H����fD1���ff.����H��H9wvH�GH�����u*�H�H���H�
�#	�.H�56"	H�=M"	�C�H�
�#	�/H�5"	H�=p"	�C�ff.���H�H��t"H�O;1t$1��
�94�tH��H9�u�1�����f���H�H��t�W�fD��������ATUStf�^�����	���	���	���	���	�D�cL��H���L���"�H��t5H�EJ��H�E��E�][]A\�DA���[1�]A\Ð1��ff.�f�����t9wr�F�H��HG�PH�
?"	��H�5� 	H�=\!	�WB����AWAVAUATUSH���GH�t$D�p�D����H��I��H�A�H��tDD���H�����A�H9�u�E!�L�?D��I�Nj%���?tRH�o�DA��E!�D��I�Nj%���?t0����?�C�H�H��H�L9hu�H�t$H�8L���}���u���H��[]A\A]A^A_�H�
+!	��H�5�	H�=� 	�cA���AWH��I��AVAUI��ATUSH��8�W�o��D�R����D!Ӎ@9��~����L��J�<	A�H��t@D���0H�����A�H9�u�E��M�]E!�D��M�$�A�$���?��I�EH�D$ �#�A��E!�D��M�$�A�$���?��A�$���?�k�Hc�H��Hl$ H;Mu�H�}H��L��D�T$L�\$H�L$L�$H�|$(�^|�L�$H�L$��L�\$D�T$u�A�D$��<@uzH�|$(�T�L�$L�MA�d$?A�$���?�VfDA�U�ZA�]�����?��A�$��H��E�|$���?%�	�A�$����?A�D$I�EH�L�H�HH��8��[]A\A]A^A_�����-D�<H�L$D9�H�t$D�T$�$w�E���E�w�L��L�D$ �{�I��H��t��$L�D$ D�T$L�L$��J��H�L$tgI�}H�WN����H��I9�tJH������?t�GD!��I�4����?t���D!��I�4����?u�H�H��H�I9�u�I�u��H��H�L$H��L�$賋�I�}�R�I�]D��E��D!�L�$H�L$M�eE�}�q���H�
 	��H�5�	H�=�	�x>��c���H�
�	�zH�5�	H�=�	�T>�@��AWH��AVI��AUATUH��SH��8�W�_��D�B�A���E!č@9��5E���@H��I�<A�M��t!f.�D���0H�����A�H9�u�E��L�mE!�D��I�\�����?tH�EH�D$�@A��E!�D��I�\�����?tY�%���?��H�H��HD$L;pu�H�8H��L��D�D$H�L$�fy�H�L$D�D$��u�H���0Q�D�#A���?�R@�UD�bD�eA�����?�{�D��H��D�{���?%�	�����?��@�CH�EH�H�L�pH��8D��[]A\A]A^A_�E���/D�H�t$D9�D�D$�T$w�E�ʾE�y�D�L$,L��L�T$ ��x�I��H��t��T$L�T$ D�L$,D�D$��N�$�H�L$teH�}H�WN���@H��I9�tKH������?t�GD!���I�t�����?t���D!���I�t�����?u�H�H��H�I9�u�H�u��L��H�L$H��D�L$���H�}��O�D�L$L�eE��L�mH�L$D�ME!�E�����H�
U	��H�5)	H�=�	�;����H�
	�zH�5	H�=�	�;�f���AWH��I��AVAUI��ATUSH��8�W�o��D�R����D!Ӎ@9��~����L��J�<	A�H��t@D���0H�����A�H9�u�E��M�]E!�D��M�$�A�$���?��I�EH�D$ �#�A��E!�D��M�$�A�$���?��A�$���?�k�Hc�H��Hl$ H;Mu�H�}H��L��D�T$L�\$H�L$L�$H�|$(�~v�L�$H�L$��L�\$D�T$u�A�D$��<@u}H�|$(�0N�L�$L�MA�d$?A�$���?�YfDA�U�ZA�]�����?��A�$��H��E�|$���?%�	�A�$����?�ȀA�D$I�EH�L�H�HH��8��[]A\A]A^A_�@���-D�<H�L$D9�H�t$D�T$�$w�E���E�w�L��L�D$ ��u�I��H��t��$L�D$ D�T$L�L$��J��H�L$tgI�}H�WN����H��I9�tJH������?t�GD!��I�4����?t���D!��I�4����?u�H�H��H�I9�u�I�u��H��H�L$H��L�$�Ӆ�I�}�L�I�]D��E��D!�L�$H�L$M�eE�}�q���H�
@	��H�5	H�=�	�8���H�
�	�zH�5�	H�=�	�t8�@��UH��SH���EH�?��t,1����H�Nj%���?t�R���@t��9]w�H��[]�L�f���H�H��HEH�8��K�H�}��DAWI��AVAUATUSH��H��L�vM����L�&H�JH����L�*H�L$M9�L��IC�L�EJ�<�L�$��<�H��H��tfH��L�$H�L$tD1�1�fD1�I9�vA��L9�sD��L�L�1�L��H���H��H9�r�I9�r��L��I�/I�A�GA�GH��[]A\A]A^A_�M��H�JA�IE�H�L$L�EJ�<�L�$�<�L�$H�L$H��H���Q���말L�vA�����H�OH��toH�H��v*D�D��E��u\H���fDH�P��4���uMH��H��u�ATUSD�!H��E��@��@"oH���WJ�H�H�CD�c@�k[]A\���H��ff.��AWAVAUATUSH��H��xL�nL�zH�|$dH�%(H��$h1�M����H�.M����L�N�dL9���H��
�}H�D-L9���I��L�l$Xf�H��I��L��$�L��$�L��M)�L)�L�T$ J��H�l$pH��$�I�I�H��$�L��$�L��$�L�|$PH��L��H�D$(L�l$xL��$)�$�L�t$P�D$`�D$dDŽ$�Ƅ$�L��$�DŽ$�Ƅ$�DŽ$�Ƅ$�HDŽ$����L�L$pH��H��L��$�f�L��L�L$L��L�D$)�$�HDŽ$�b���L�L$L��H��f�L��HDŽ$ L��$0L��)�$�l���L�D$H��L��H�D$(f�HDŽ$@L��)�$0H���9���f�L��H��H��$PL��)�$PH��H�D$HDŽ$`����H�D$L�T$ H��$XH����H��$PH��H�D$H��$�H�D$H����L��$�I��L��$�M����L��$�H�|$H�L$ L�T$HL�L$@L�\$8L�D$0H�t$(�8�H�L$ I��H����1�H�<1�H�t$(L�D$0L�\$8I��L�L$@L�T$H�f.�A�T�H��E1�H9�tI��I9�vA��H)�I9�vA��H)�L�y�L�<:1�L��H��L��A�T�H�H��H��I��I��H9�u�H��$�H�D$H��t&H�D$A�L���t�A�T����u
H��H��u�L����n�H�|$I����H��$�H�t$L��H���T�H��$�H����H��$�O��L��H���'�I��H���[L��1�H��I�<�1�D��A�L���H�H�1�H���H��H9�u�I���t#K�<�@���1�H��H�H��H��W�H9�v�I��w�	f�I��I��t	C�D����t�H�|$�E�M��tL���vE�H��$�H��t�dE�H��$H��t�RE�H��$8H��t�@E�H��$XH��t�.E�H�D$L� L�x�@�@��f�L�rL�eM��A�H����L���Hm�I���M����L��L��M��D1�1�H��t/�E�T����I��D��L�H�1�H���H��H9�u؉�H��H��I9�u�I��w��I��I��t	C�t����t�H�D$L� L�H�@�@H��$hdH3%(��H��x[]A\A]A^A_�DL�vM���GH�*L�eH���qA�A��L��L�D$�=l�I��H��t�H���L���L�D$M��H��M��L������fD�L��L�D$�k�L�D$H�D$M���OH��L�t$H�l$@L��H�D$H��$0E1�H�D$ H��$H�D$0H��$PH�D$(L��M��L�l$8I��I��H��L�d$HM��H�D$@H�t$0L��DŽ$ H�|$(H�T$ Ƅ$$J�,0H��$H�D$8I9�H��$8H��$H��IF�Ƅ$DDŽ$@L)�H��$0���H��$P1�1�H��$XH��tf.�A��D����L�H�1�I��A��H��H9�uޅ�t
N�6H�t$B��XB�H�D$I��H�I�I9�����L�d$HH�D$H�\$L� H�X�@�@����H��t��@L��M��I��H��L��I���3���L�]A��q���I��A��I���H�D$H�p�����L�jA�����I�����������1�����H�|$�A�����M�������`�H�
f	��H�5�
	H�=�
	�~-�H�
G	��H�5v
	H�=�
	�_-�M��M���E���@PXH�
W	�H�5F
	H�=�
	H���+-�ff.�AVI��AUATUSH���|H��H��H��E1��	fDH��H��1�I��H��H9�v�N�,�L����1�H��H��t*M��tH��J�<(H��1�H��H��Q�H��H9�u�M�&I�v[]A\A]A^�f�1��1�H��H��t�E1���ff.��AWAVAUATI��UH��SH��L�~H�|$8H�t$0dH�%(H��$�1�M����H�D$0L�0I�FH��H��H�����H��E1��Ch�H�D$H���;H�\$L��M��I���DH��I�����M9�s8I�EB�4�L9�sB�D�I��H�L��H��H�@I�<�H9�v�I���wM9�r�f�H�\$H�D$P)D$@I9���H�|$@H��L���G���H�D$@L�d$H�D$H�D$`H�D$(H��$�H�D$H���;�H�t$H�|$(H��H�����H�|$HH��t��>�L�{foT$`H�D$p�I��L��L�|$ E1�)T$@H�D$P�g�L�t$I���}�H�t$f�I�VH��H�|$)�$�HDŽ$��b�H�T$L��H��L����I�~H��t�a>�I�~ H��t�S>�H��$�H��t�A>�I��I��0I9�s:L��H��H�RM�,�I�WH9��i����AoI��I��0AMI�V�I�UI9�r�H�|$��=�H�\$ L�d$H������H�L$8I�D$�Ao$H�AH�D$0H���@�A��L���=�H�|$HH��t�=�H��$�dH3%(uOH�Ĩ[]A\A]A^A_�L�~�A��n���D�d$P����H�
`	�TH�5o		H�=�		�X)��\���AWAVAUATI��UH��SH��H��8dH�%(H�D$(1�1��:+��HÃ���H��		��Hc�H�>��fDH��A�fDL9�sc�L�5)	H�{A�4@�����I9�v>D�����f��<_tA�H��<���H�H9��H��I9�uӉuH�D$(dH3%(��H��8[]A\A]A^A_�DH��A��a���f��;0uH���;0t�A�
�<���@�;0A�
�)���H��H)�H�����C��0<H��H��	��Hc�H�>��fD�C�ƒ��Ot<ou>H��A�������;0A�
�����H��H)�H���jH�����H��A����f�L��E1�H)��,�I����<_tA�I�WM�<��=A�I��H��I9�w�A��
�&��M��A��t�H���Љ���D9�r�M��L��I���L�D$I��L��� c�M��L�D$teI�w�L��M�A� H��A� @D�H��H��H����H��E��A��D	,M��I)�I9�sE��A)�D��A��D	LH��H)�I9�u�I��w�f�I��I��t	B�T����t�L�eH��H�E�E�EL�D$�]�L�D$H�D$(dH3%(�8H��8L��[]A\A]A^A_��9�I�W�L�D$I���8��8��H��I��H��H��I���b�M��L�D$H��tDO�L��1�M��O�\8��L�ߍ�H)ύ4PH��I��H��H��H9�u�4�1�H��I9�u�H�t$�ʚ;H��L�D$H�L�d$H�\$�D$ �D$$����H��� 9�L�D$����H��A�
�?���L9�������H�{L�5`	A�
A�4�:������H�
$	��H�5�	H�=���$��X�����G:Ft<�������<L�O�����M��t]L�H�I9�rYL�VM��tHI9�wCM��t<C�L��C9L��r:w0J������1��DA�<A�49�rH��9�wH��I9�u�1��H�~t	���fD�N9Or�F��ff.�@��H�?uFH�>u@D�GE��t7�N��t/��t3D���fD��1��ȅ�u�D��1��G�F1��F��D�����ff.���AWAVAUATUH��SH��H��(dH�%(H�D$1��~�BH�EH���{H�}�9f�H��ʚ;H��H�)$H�D$���L�|$M���L�4$�O�$�L��M���E_�H��H����M�T$�M��tUM��J�| �O��A�����DA�	H�w	���H��A������)���0�N��H9�u�I��H��	M9�u�M����1��}0H��t� D�|0uH��H�tL9�r�M��I)�L��H������H���:6�H�|$H��t�+6�H�D$dH3%(uwH��([]A\A]A^A_þ-�������H�H�5�ZH��1����뼋T$H��H�5ܻ1�����H�|$H��u�뛋UH�5��H�������H��A��W����T�ff.�@��H�H��t�~5�fD����H������H�����H�tH�GH�0H�wH��DH�wH�wH����UH��SH��H�H��tf.�H��4�H��H��u�H�EH��[]Ð����tpA�x(ti��?~dH��td�9�t_AVI��AUM��ATA��UH��S1���H�H9�vI�<�D9�tH��H)�A�UH��u�1�[H��]A\A]A^�����1�H���f.���ATI��UH��SH��H���\�H�CH��tL�#�H�kH�C[]A\�[1�]A\�f���H�G���AUATUH��SH��H��L�gL;g�~�;
��H�EH9���H)�H�EH�UH��H��H��uH�HH�MH�¸H��[]A\A]�H9\
�r�H�
�	�3H�5�	H�=	�z�f.�L�oK�<d�H��H�}�[�H�EH��t&J��L��H���+l�L���3��@���fD1��v���H�
:	�0H�5^	H�=�	��H�
	�/H�5?	H�=U	�����H�H9�wGH)�H�G1�H�L�@��
�H�HL9�wL��H)�H��H�H94�tr�L�@�L9�v�D
��D��PH�
�	�?H�5�	H�=�	�m�ff.�f���H�H9�wWH)�H�G1�H�L�@��
�H�HL9�wL��H)�H��H�H94�t%r�L�@�L9�v�+t��D
�H�� H	��f.���PH�
�	�]H�59	H�=_	���ff.�f���H��1�����fD��H9�wH)�H�7H�W�G�PH�
�	�H�5�	H�=�	�u�D��H�7H�W�G�ff.�f���H�7H�W�G�ff.�f���AVAUATI��H��1�U�SH��dH�%(H��$�1��(k����tzH��ƿ���J�������D$%�=@��L�l$0M��tk1�E1�A�ع�L���k���I��H��������M�4$1�M�l$A�D$H��$�dH3%(��uuH�Ġ[]A\A]A^�@��1���H��$�I�D$I�$A�D$�����y����k��f��߽�T��v����*O�f.���AWAVAUATI��H��1�U�SH��dH�%(H��$�1���i������H��ƿ���LI�������D$%�=@��L�l$0M��tuL���} �I��H������L��H���4 ���I����I�����M�4$1�M�l$A�D$H��$�dH3%(��utH�Ĩ[]A\A]A^A_�D��1��G�H��$�I�D$I�$A�D$���������߽���f�L���x.��w�����M�ff.����tFATUSH�oH��L�'H����H��t#H�H��L��H���C[]A\�/g��[]A\��ff.�@��H�WH;Vr"wH�6H�?�V�D��f.�������f.���H�G����H������GH���t!��t�H�wH��t�H���7V��H���h-����H��tp���tiD�E��tWE1��f�I��L9�tCB���tFF�E��t4���� D�P���A��F�A��A�� D�Q�E��A��AF�)�t�����@�1��@PXH�
���H�5a�H�=�H�����ff.���AWAVAUATUSH��8H������H��I��I��D�D$H�T$�%H�޵:L��H��`I9��*E1�H���A�(H�D$��L�|$�f�I��I9���K�,4H�|$�uA���D�H����E��yЀ|$t�H�D$H��H��L)��I���I��I��H��t5H9�t0H;�;�ZL�@ H�|$K�<L�湶1��5���I��I���M����M�I9��_���f�1�H��8H��[]A\A]A^A_�@H�|$�
�I��I9�s�K�,4H�|$�uA����C�H��u�E��y�H��H��L)�A��|$I��uH��t�M���L�l$I���I��H��t?H9�t:H;�;�L�@ H�|$K�L�湶1�L�T$ �U���I��L�T$ H�L$H���M��u�I��O�,4I9�s!H��L��L)�A�H��u
I��O�,4I9�r�D�EH�|$L��H�1�������f�I���E1�I��L�l$�@I��I9������K�,<L���uA���B�H�������E��y�H��H��L)��<���H��tI��f��|$t���H��L��L)�����H��u
I��O�,<I9�r�D�EH�|$L��H�1��4����k����L��H�l$ M��H�l$I���H��L��L)�UH��u
I��O�<,I9�r�H�l$ L��H�|$M�I��L��1�D�EH����������H�H�NL�|$H�\$H�L$ I��I��D�l$H�|$H�t$(��I��M9��s���A�7H��L��A���A�H���Z���E��t�E��y�L�t$I���H��t@H�L$H9�t6H;l;uCL�A H�T$ ��1�H�t$(I������I��H�D$H�D$H�L$H����g������f����f=���AUH�7���ATUSH��Hc�H�>��f��H��[]A\A]ø�Gu�H�oH��t�L�g(1�I�<������t�H��H9�u���fD��Gu�L�g(M��t�L�o8I�]f�;u81�H�{�[�����t�H�{ �N������{���H��L9��n���I�\�f�;t�H��1�[]A\A]Ð1��ff.�f�H��0H��pL�BL��I�L��H��u�8�tj1�L9�r�s�H����uHH��I9�t���	t�� u�H��H��I9�u��@H��H�PHH�H��H����H��������x�u��x�u�H����ff.�f�USH��H����H��H�����H��t"�8x-H�PH��@�
H����xH9�u�H���[]�@H��1�[]��U��SH���8H����H��tFH���1�H��t�J1f�H�@0@@ H��H1@�h2H���H���[]�H��1�[]��USH��H��(H�o H��H��(H��wNH��H�l$X�oD$ �oL$0�oT$@H�T H�D(�o\$PBJR(Z8H�G �H��[]�H���@��H�C H��t:H�l$X�od$ �ol$0�ot$@�o|$P hp x0H���[]�f�1��ff.��H��Xf�dH�%(H�D$H1���D$D$�D$�
�D$$f�D$���H�D$4�D$��D$<�$@�t$�T$��t	�T$�@��t@�t�t$8HLJ��t$8�t$8�t$8�t$8�t$8�t$8�t$8�{���H��@H�L$HdH3%(uH��X��C�ff.�f�H��X��dH�%(H�D$H1���<����[��[t��{�{A�AE���<�	fD�
��[����{��}H��f�H�D$4D$D$H�T$���D$<f�T$���$@�t$�D$�L$�T$D$$�L$�@��t	�D#H����t�D�t$8HLJ��t$8�t$8�t$8�t$8�t$8�t$8�t$8�9���H��@H�L$HdH3%(��H��X�@��(�(A�AE���<������>������(u�)����L��f�H�D$4D$D$L�D$D��D$$fD�D$D����D$<�$@�t$�D$�T$D�D$���������]�{���fD�<�?����A�f�H��Xf�dH�%(H�D$H1��@�D$D$�D$�/�D$$f�D$� �H�D$4�D$��D$<�$@�t$�T$�L$D�D$E��t
D�D$�@��t	�D#H����t�L�t$8HLJ��t$8�t$8�t$8�t$8�t$8�t$8�t$8�t���H��@H�T$HdH3%(uH��X��@�fDUH��H��H��SH���l���H��1�H��t4H9�tH��H��H��tH���H;�;����H��[]��AWAVE��AUI��ATI��UH��S��H��D��D�����@9���A����E����H�M���t>9��HA�W�H�A(H��H�4��fDH��(9��$H9��i�H����u�E�P�U�A��L�aL�iD�q�A H��[]A\A]A^A_�DE�����(��$�]H�H��H���N���$����A�H�MD�}A���4�����A�O�L�E��1�i�;�]���1�i�;�]����1lj���9�t\����!�9�����!�H��I�4Ћ��uۋE�P�U�F��L�fL�nD�v�~ H��[]A\A]A^A_�f.�H��1�[]A\A]A^A_��G�?E9��TD�Ǿ(�T$D�$�fG�H��H���W��D�$�T$A���H�}A�G�E�H�H��H�w(L���fDH��I9�tPH��(���t�A��	vh�G ���D��!�H��H��D�E��u��o�oOJH�G H��H�B I9�u��EE�Dž������H�}H�$�U�H�$�l���@���1�i�;�]���1�i�;�]���1ЉG �z���A�H��H�uH��D�$H���W�D�$H��D��E���H�
[�	�\H�5��	H�=.���	���u�E���e���H�
�	��H�5p�	H�=��	��	��H��(H��uH�G ��f�H�P�H��wH��(H��H�D(H�G ÐUSH��H��H��(H� H�o8�C�H�k H��[]��AVAUI��ATUH��SH��H��H���H9�s?I��E�e�DH��H9�t'D8#u�L��L��H���E���u�H��[]A\A]A^�@[1�]A\A]A^�DAUI��H��ATI��L��UH��SH��H�54�H��xdH�%(H�D$h1��X���H����H�S`�oH��H�p�oK�oS L)��o[0�oc@H�T$`H�U��okPH��H)�)$H��H��0H�K)L$)T$ )\$0)d$@)l$P�H���S�H��H��u+�D$\fA��$�H�D$hdH3%(u&H��x[]A\A]�f�H���(�L��H�H�������";�f��H�G�	I�ȋ����txH��D�
A��tCA��um��t0A�����A�����A���|A9�rw�wH������A���uЉ
�H���f.���A���t�A���u�A�A���w���H�VH�vH����p��1��H�VH�vH������p��1�H�����e���D���f�H�VH�vH������Wp��1��0���H��L�
O�	��u��L�
D�	H�_pLD�L�.�	@��u��L�"�	H�=pLD�H��H��hH��`1�QH���3�p��H���ff.����yI��I��uL�IH�qH�H��L��H���1��lp��ff.��AVAUI��ATA��UH��SD��A��n�rA��u��A��e��H�
�:H���I9���H���H�������uTH��H�Q0H9���L9�t;L���L�H D��1�H��hH��`��L���o����n�.fDD��[]A\A]A^�@H�
q�:I9���H�
�}	�%H�5��	H�=��	��f�A��su�H�
3�:H���I9�u�H���H���7���H�Q`H9�t�H9�u�H9��t���L�����L��H����H��hI�ٹ�H��`A��1�H�����n��D���5���f.�H�
��:H�A`I9��4���H���H��u������������fDH���������DL���8�L��H����I�ٹ�L��H��hH��`A��1��Jn�����DL�APH��h��1�H��`H����n��D���n���ATL���UH��S�������vR���~��un��XL�������H��H[L��H��P1�]D�A\�m����Vt3��]t.H��PH��H��L��[]A\�l��f.����uҋ�X���H��h��L��H��`[I��1�]A\�<m��@��@轡��H��P[L��H��HI��]��1�A\�	m��f�苡��I���+���H��h1�H;�8s�G0��@ �uÐH���:���H�����ff.���G���@ �u�H��1�H��hH;�8s���蠹��H������H����t/��u�H�5Cs�a����t���H���@�H�5s�7�1҅�u���ff.�@ATUH��SH��H��H��8H��dH�%(H�D$1�H��H�$H)��Ź��H�4$I��H��t#H�D�1�H�VH9�H����������j��H�\$dH3%(L��u	H��[]A\��U4�DATUH��SH��H��H��8H��dH�%(H�D$1�H��H�$H)����H�4$I��H��t#H�D�1�H�VH9�H���������Fj��H�\$dH3%(L��u	H��[]A\���3�DATUSH��hH��8H9�si�H��H��A�:��.te��߀�EuSH�PH9���1������t;H��hH��H�pH��h����H�hA�,�E[D��]A\�f�A�:D��[]A\�f�H�P1�H9�v�x茺����t�H��hH��H�pH��h���H��8H�hH��hH9�sv�A�,��߀�Eu��A���fD�x�WՁ��7���H�P1�H��hH9�s�x�
���������H��hH��`��H�����h������A�,�)���AVA��AUI��H��@ATI��H)�UH��S蝽���Å�u��[]A\A]A^�@I���E��L��H���H������[]A\A]A^�f�UH��SH��H��f�>t.f�c�H�{H�����H�{t&H�EH�CH��[]��H�Ff�8�u���H�EH�CH�EH�CH��[]�f�UH��SH��H���H�V0f=���f��FtMH����H�~8H�����H�uH�CH��tH9�vH�sH�CH��tH;EsH�EH�CH��[]�@H����H��hH��`1�H�����A��I��A)��h��H��H�{8�!��H�u�H�uH��t/H�UH������g��H��H�{8����H�u�Q���DH�k0�C����H�n0H�u�/���H�~H�����H�u����ff.�H�OH�VH�FH��tH9�HG�H�WH�WH��tH9�HB�H�GH��h�g���H�OH�VH�FH��tH9�HG�H�WH�WH��tH9�HB�H�GH��P�'���ATI��U��SH�FH��H�JH�vH�RH��tH;KsH�KH9��|H�S(H�D��f��|t<w0f��t4f��kt.H�{L�����@��tfA�L$[]A\��f-�f��w�I�T$I�t$�<H���e��뵐H�KH9�v�H�S륐H�S�{����AVH��I��H��AUA�ATL��XUSH��H�� ���L��dH�%(H�D$1����H����H��H��I��L�拓�f�I��L��H�H )$H�D$莅��I�v���L������L��I��聢��L��I��膢��H��H�UM��H�uAVA���-H���1��e��XL��Z腱��H�D$dH3%(u
H�� []A\A]A^��#.�AWI��AVI��AUATUSH���G�L�����I�I��L�,H��L9�sH1��f�H��H��I��I9�tO�;�7���I9�v��t�;	u�H��H��I9�s�@I�?L��H��H)���&�M�gH��[]A\A]A^A_�@I�?L�����AVAUI��ATUSH��@�6H��脷���L�`H��M�t$L���;6�H��t&H�uL��H����F�L��H��B� =H��脻��A�E[]A\A]A^�����
f=���UH�����H��SH��H��Hc�H�>��H�~ �
H��[]�fDA�L�
c�H�SH�sH��1�H���[�>]�c��f.�A�
L�
`�ƐA�L�
�h붐A�L�
pj릐A�	L�
�_떐A�L�
'j놐�FL�
����f��E�A��f��H�r�LE��Y���@A�L�
]d�C���fDA�L�
�i�+���fDA�
L�
P_����fDH�~8����v0H��@��H�PH��toH��t?H�������L�A���%<W�����H�_���Hc�H�>��A�����H�f�8<=�|����x>A�L�
�H�e����z���L�A�A<=t!<@t2<*�H���A�9*�>���A��M���A��PĀ�v�<!t�����A���+��t�����AVf�AUA��ATI��UH��SH��H��`dH�%(H�D$X1�H�T$(H�R�~H�|$ H�JH�R��H�<$H��)D$0)D$@H�L$H�T$H�D$P�D$�D$P�6��H��H�\$ I���6��H��A��I��H�5��RL�-�L��VL��H���N7��XH�{Z胳��H�D$0H��HD�H�t$XdH34%(u
H��`[]A\A]A^���)�DAWAVI��H��AUI��ATUS��H���6H�$輱��A�E��wA�EA���tE1�A�����������1�L�\�I��XN�<�H�D$�
@H��(L9�tvI�mH݋U��t�uH�<$����E��t؋E��u�A�����x^�uI��@�O���L�@M��t�L�A�9_t�H�UH�u�=1�I���H��(�`��L9�u�H��[]A\A]A^A_�f.�H�uH�|$�����y��Q���f�E���A��A��A�������D�GA��wF��������t0H�W;2��H��(1���H��(;r�t��9�u����f.���A��H���E��1�i�;�]���1�i�;�]���1�A!���9�t���D��!�D9�t���D!���H���υ�uݸ�����1��ff.�H��tCSI����E1��A�z2u)M�A��M��tI�z���������t�D��[��A��[D���A�����D���ff.���5�gH�����Hc�H�>��@�>���f����G����_��	����>}��Ð����I���@�1���I����H����@�>K���f����K�����@�1���_��/��H��H�������B�������Y��	��@��Ѓ��I����f��	��f.���Ѓ��I����R��	��f.��>���f��������}��	������I�����@�>%��Ð�>R���f�1��ff.�f�H�WH��tjL�O(1�I�AI;1u�fDI��H��H9p�tH��H9�u��M��1�@H�B�SH��H9�t H)�I�t�L��H������;?�H�CH�H�H�K[��ff.��PXH�
t	�B(H�5�w	H�=4}	H�����ff.�H��hH��8H9�s-USH���2@��
t.H�J@��
ttH��h�H��[]�H�JH��h��H��xH��H��t\H9�wqH��pHLJx�H��u�BH�H��hH��[]��H9�v��z
��x����f.�H�t*�H��X���H��h����H��I���������t!��H��I�BH�ЋB���t*���BH���H�
r	��H�5wv	H�=�v	����H�
r	��H�5Xv	H�={v	���AVAUATUSH��t<I��H��H�-�E1����f=�w ��HcD�H�>��f�H�[H��u�E1�[]L��A\A]A^��H�[(��f.�H�s@H��t�H�{Ht�L���x���H��t�M��H�[HLD��fD�SI�����t1���H�?9�u��sE1�H������[L��]A\A]A^�M��LD�[L��]A\A]A^�DH�SH�C(H�\��B���fDH�{@H�s0t5H��t
L�����H��u4H�s(H��t
L������H��uH�[@����@H�C(H��u
H�����I���H�����H��L�����H������L�s0M��LD�M��tI�vXL���i���H��t$M�v`M��u�H�[8H���k����(���f�E1���ff.�PXH�
�n	�`H�5gt	H�=�t	H�����ff.�ATI��USH���f��btmvKf��t��f=�u4H�{t-H�C(1�H�0H��tL��H�����H9kv
H�C(H�4�H��u�[]A\�f�f��u�H�[(H��t��f��bu���S�sI��$��B���tH��t*��H�?���u�[H��]A\����H�[H���E��������@H��I��������t ��H��I�BH�ЋB��t*���BH���H�
Hm	��H�58s	H�=Gs	���H�
)m	��H�5s	H�=ds	�q���PXH�
�j	�|	H�5�r	H�=�x	H���K��ff.�H��I��������tI�R��H��H�‹@H���H�
2h	��H�5�r	H�=�r	���f.�PXH�
�g	�4H�5wr	H�=tx	H������ff.�PXH�
gg	��H�5Gr	H�=�r	H�����ff.������=����u����wH�FH�VH�GH�W@H�GH�PH�
Ge	�[H�5�q	H�=�y	�?��ff.�@PXH�
�d	��3H�5�q	H�=z	H�����ff.�PXH�
'd	��	H�5�q	H�=z	H������ff.�H��tHH�H�H��t0H�wH�T�H;Jv�+�H�T�H;JwH��u�H���H���PH�
_	��H�5q	H�=z	�c��U��SH���H���k��H��t&H��(H�@H��tH�PH�H���[]ÐH��1�[]��PXH�
'm	� H�5�p	H�=q	H������ff.�H��v�|�
t�f��|�
u�H�H���:�UT��DH���H��t#1����u<�H�H��t�P2�@0u��t�H�VH�vH�����T�����u�H�VH�vH����	��S��f�AWI��AVI��AUI��ATUH��SH��L��H���G��H��H���,��H�,H9�r�A�H�H9�v8H��H��H)�A�$H��u�I�I�6H��I���[��]A\A]A^A_�aS���H��[]A\A]A^A_ÐH��tH�:t�@H�~u
H�F(H�f�8tt�H�QH�qH�����S�������UH��SH��H��H��tB�Ft<H�~H��t3H�v(H�H��t'f�9ZtY1��DH��H��tf�9ZtAH��H9�u�H��t#H�UH�uH��H����[]�R��@H��[]��H�QH�qH�����_R���ff.�f�SH�H�H��C��uH�{����H��[�m��DH�{�_����ff.�f�UH��SH��H���f��;@��
t@��#tH�������tH;]r޸H��[]�f���D��M�ȅ�t,��uH�H�6H��1�L�
hQ�tR��@��H�H�6H��1�L�
%Q�MR��ff.�f�AWAVAUATUSH��H��H���H�t$H�8��H�@H�H����E1�L�5OTL�-XTL�%0TH����?�M��H�PH�p��H��1�I����Q��H���L98vVH�@J��H��tI�f��kt8f��|t�f��t$H�
mZ	��=H�5�l	H�=@����DM���M���H�D$H���H��[]A\A]A^A_�D�f��>t/f��ot1f��
t#PH�
S^	��H�5Cl	H�=֡����F�@H�FH�VH��@H)�H������fDAVL�r AUATI��USH�jH��H��t=M�$$H��H��I��M��I)�L���Y���L��H��L���K���L�c[]A\A]A^�fDI���H������L���ی��I�m�DATUH��SH��H�rH��t-H�H��H9�r7H��H��H)����H�][]A\�f.�I���H��而��I�4$�H�
Sg	�)H�5#k	H�=�k	�{��ff.�AUATI��UH��SH��H��H�>t0I��H�QH�qH�������N��I�uH���߷��I�EI�<$t-H�UH�u��H����N��I�4$H��諷��I�$H��[]A\A]��UH��SH��H��H�uH�FH�GH�EH�{H��H�C�1���f�}�u�S�щЃ� ��@�� D�f�CH��[]�f.�H����I�� �0A�I�����5wFL��H��L��u_H���D���5wL��H��L��uL��u)��t:H�H��u�H����H�H��u��fDH�>H��t,H��H���l����H�
�]	�o=H�5ti	H�=�����H�
�]	�M=H�5Ui	H�=Rr	���ff.�f��H��f��1tDf=�tNf��0t(PH�
�\	�?H�5i	H�=5r	�h���H�B(H��tH�xt f�'�H��H������f�JH��H��鰴��H�@(H�H��t�f�8�t�%��=Uu��Df�H뵐UH��SH��H��H�(uH�t.H�s(H�{H���6���H�CH9EHCEH�CH��[]�fDH�FH�G��ff.�UH��H��H��SH��A�H��XH�������i��H��t!H�UH�uH��H�����[]��K��f�H��[]�f�H��8_t`AVA��AUI����ATM��UH��L��SH��臞����t#I�$H�3��H���[]A\A]A^�K��[D��]L��A\A]A^�]���D��AUI����ATUSH��@H��H���"���H�PH��tAH�j�I��H�����I�4$H��H���{.�H��H��H���-���A�EH��[]A\A]�fDH��1�H�5,K�ץ��A�EH��[]A\A]��AUATUSH��H�nH��t9��H)�t&I��I��1�DI�E(L��H�4�H���D�H9�u�H��[]A\A]�H�
]T	�(H�5}f	H�=g	����D��X��ht5��et0H��t;UH��SH��H��H���H�����H���H��[]�f�H�����1����f�H��H��`1�H��X�w���H��H��AVE��AUI��ATI��U��SH��xH�������I��M9�t'A��L��L��H��A��A���v��H��H���uE��t[]A\A]A^��H��X�L��H���A��H���t�H9�t�}E��u�I�MI�EH��H���D��H��hH)�ATH��`QA�й1PI��A)�1���I��H�� []A\A]A^�fDH��`L�X��4����AWAVAUATUSH��H�$H��H�







dH�%(H��$1�I��I��H��I��D�L��H��L���H��L����H������DL��M����A�|�
L�x�t�H=tHL��L��L���:���I��tdI��	tFI��u��L��H�=�M������r���1��jfD��L��L�����S����	L��H�=�d	���L��H�=zd	��H�����L��L��覇���	����H��$dH3%(uH��[]A\A]A^A_��"�f�U�H��H��@SH���F����Å�uH����[]��H��0H���A���H��H�����H����[]�DAUATUSH��H��(H��hH��8dH�%(H�D$1��D$H�F�H9�v
�~�0��H���%��H�hH�t$H�����H��8��H��hH��H9�sY�8.�0��:�o�|$uxH9�sK���rusH�HH��hH9���H��i���.�Wf���:t�|$u,@H�L$dH3%(���2H��([]A\A]��H9�v����i�����t�x�ȃ�߃�A<v��_u�H��h������.<J��H�
����Hc�H�>��H��hH���o��H�hH��hH�ƺf��xH��8H9����<.uV�:fDH�F1�H9�v�~�l�������H��hH��8H�ƃ�:�����H9�r
�:�1fD�<r�M<i��H��h�:�:H��8H9����������@H����-H��h��@L��hH��8M�eL)�L������H�����L��I��D���B���fDH�FH��h1�H9�v�~�e����������H��hH;�8s	�:_�<H��`H������<D��H��h���H�FH��h1�H9�v�~������QH��hH;�8s	�:_��H��`H�������C��H��h�f��x�2���@H�FH��h1�H9�v�~�Ք�����tH��hH;�8s	�:_�|H��`H������lC��H��h� f��x����@H�FH��h1�H9�v�~�E�������H��hH;�8s	�:_��H��`H������B��H��h�^���H9��������:���fDH�F�<H��hH9��w����N�:��i�����H�FH��8�=H��h���f�H�F�:�;H��8H��h�b�����.����H��hH�����H�hH��H��h���H��hH��8H�T$H�D$H)�H���B���H�t$I��H��t#H�D�1�H�VH9�H����������A��H��hL�H��h�W���H��hH��8H�T$H�D$H)�H���ŏ��H�t$I��H��t#H�D�1�H�VH9�H���������eA��H��hL�H��h�z���H����/H��h�;���H��H��h�4���H��H��h����H��H��h���H��H��h�t����
�UH��SH�����H��8t/H��H��H)�H��PH��u
�U��_tf��x:H��[]��U��x`���_t�H����H��[]�����H��H��8H��H�H��H)�[]��f���f�H��H)�H��[]�U��ff.�@ATUH���SH��H�vH��hH��t2H)�H���w���H���}��H��I���}��[L��H��H��]A\�¸��f�H��`[H��]A\�m���ff.�f�ATI��USH��H��hH��8H)����t<H���H��H��H��hL��HD�H������H�h[]A\�fD��T��H����fDAVAUL���ATI��USH�vH��H��hH����H)�L��I�l$ ���I�t$H��hH��H)��p��L���|��L��I���}|��L��L��H��迷��H���w|��H��I���\|��M��t'�8xBH�PL��f��
H����x%H9�u����H��[]A\A]A^�U���D1���@H��`L���	���H��`H��hH)�t&�9x9H�AH����H����xH9�u����[]A\A]A^�@1����[]A\A]A^��ATI��UA��SH��H����uIE��xH����L��[]A\��~��f�H���H��H��tH�Vq:H9�t1H������H��H�5���1�D�D$��{��D�D$또H9�t�L�A H��h��1�H��`H����>��H���ff.�f�H��H)�H��t��>_u��F<0t�SH����H��H�T$H�4$�
�����t&H�4$H�T$H��1�H�����[I���=��f�H��[�f.�ATUH��SH��H��L�fH�vL��H)�H��tNH��@E1�菑��H�����H�y������tH�sH�SA�H9�s�>_u`H��D��[]A\�@�>_u��~@��0t�H�t$�G���H�t$��tNI��L��H���1�����<��H�sH�SH)��g���DH�������;��H��D��[]A\�H�sH�SH)��2���ATI��UH�-��SH�����f=�����HcD�H�>��H�s0H���t�����td1�H�V[I��$�A��$�H�v��]A\��*�c;��H�sH��t
�L���z���H�s H��t
�L���d����5f�3[]A\��H�s1�L���B���H�[ 1��H�������/H�CH�sL�
;A�8[��L��]H��A\���H���H��衼����t��(����H�C(H���w���H�x�l���H�@(H�����@�cf�A��$��E���H�CH�sA�7L�
W	�u����H�CH�sL�
W	�T���@H�CH�������f�8�t�����Sf�A��$�����H�CH�sL�
�V	����DH�CH�sA�7L�
�V	���fDA��$������H�SH�s�2I��$�[]A\�9��ff.�S�0H�����H��t!�f��Q@�@ �Z�P[�H��:�0�H�V	H�81�������S�pH�����H��t'H�‹�H�׍p1��H��i�3f�H�Љr[�H���:�p�H��U	H�81��/���*��f.�UH���0SH���H���E�H��t4�3H�Mf��V�@@ f�0�PH�HH�H�H��[]�H��:�0�H�'U	H�81�������DATI�� U��SH�����
�H��t1�I�4$f��J�>@f��HH�pH�p�h�[]A\�H���:� �H��T	H�81��-���(���UH���0SH���H���E
�H��t4�3H�Mf��V��@@ f�0�PH�HH�H�H��[]�H��:�0�H�'T	H�81�������DUSH���>UuCH��H����	�H��tH�MH�s�l�QH�KH�p�U�PH�HH��[]�H�
[G	��H�5�R	H�= \	�3��H�|�:��H��S	H�81�������ff.��USH���>juCH��H���� 	�H��tH�MH�s���QH�KH�p�U�PH�HH��[]�H�
+H	��H�5;R	H�=�[	���H���:��H��R	H�81��q���l��ff.��USH���>`uCH��H�����H��tH�MH�s���QH�KH�p�U�PH�HH��[]�H�
kE	�fH�5�Q	H�=8[	����H�<�:��H�NR	H�81���������ff.��USH���>NuCH��H������H��tH�MH�s�3�QH�KH�p�U�PH�HH��[]�H�
�E	��H�5�P	H�=�Z	�S��H���:��H��Q	H�81��1���,��ff.��USH���>luCH��H����@�H��tH�MH�s���QH�KH�p�U�PH�HH��[]�H�
kF	��H�5[P	H�=HZ	���H���:��H�Q	H�81�������ff.��USH���>]uLH��H�����H��tQ�MH�sf���QH�Kf�8�U�PH�pH�HH��[]�H�
�C	��H�5�O	H�=�Y	�
��H�S�:��H�eP	H�81���������USH���>uLH��H�����H��tQ�MH�sf�F�QH�Kf�8�U�PH�pH�HH��[]�H�
"G	��H�5O	H�=�O	�j��H���:��H��O	H�81��H���C��AUI���0ATI��UH���SH��H���[�H��tH�UI�Mf�H�XH�{A�v�rI�$fD��pH�HH�xH�H H�P(�uH��[]A\A]�H��:�0�H�)O	H�81��������ATI��PUH��SH������H��tA�;I�4$f��TH�U@�O@ @0�HH�pH�pH�P H�p@H�PH�[]A\�H���:�P�H��N	H�81��������AVI��AUI��� ATUH���S�0�H��tXH�ËEM�6H��@M�mD�`L��D�eL)�L���a���f�Cf��CH��D�cL�kL�s[]A\A]A^�H���:� �H��M	H�81��q���l��ff.��AVI��AUI��� ATUH���S��H��tXH�ËEM�6H��@M�mD�`L��D�eL)�L��豅��f�>Cf��CH��D�cL�kL�s[]A\A]A^�H�,�:� �H�>M	H�81������ff.��AVI��AUM��ATI���UH���8SH�����H��tOA�$L�Ef�H�hH�{I�A��rI�UfD��pL�@H�xH�X H�H(H�P0[A�4$]A\A]A^�H��:�8�H��L	H�81�������ff.�@AVI��AUI��ATI���UH���8SL����H��tOA�$L�Ef�H�hH�{I�A���rI�UfD��pL�@H�xH�H H�P(H�X0[A�4$]A\A]A^�H���:�8�H��K	H�81��d���_��ff.�@AUA��ATA��UH��SH��H��H�VH�6H��H)�H��tW� ��X�H�����MH�3f�a�QH�Kf�8�PH�pH�HD�`D�h�UH��[]A\A]�f��>_u��~H�T$H�4$@��0t��c��H�4$H�T$���{���H���I���1��.���`���H���:� �H��J	H�81��e���`��AUI���0ATI��UH���SH��H���{�H��tP�UI�M�rI�$�uH��H��tH�{f�A��H�xH�HfD��pH�HH�P H�X(H��[]A\A]�H�/�:�0�H�AJ	H�81����迾�ff.�@AWI���AVM��AUI���`ATI��UL��SH��H����H��tcH��A�M�E�I�M�$H��D�PL�M1��H��D�Vf�H��L�FH�VH�^L�F@L�^HL�NPH�VXE�H��[]A\A]A^A_�H�b�:�`�H�tI	H�81������f�AWI���@AVM��AUI��ATM��UH��SH���H�����H��tT�M�f�A�tI�>I�M�rI�$fD��pL�PH�xH�hL�P H�H(H�P0H�x8�3H��[]A\A]A^A_�H���:�@�H��H	H�81��F���A���AWAVAUATUSH��8dH�%(H�D$(1��>,��I��I��� �D��I��H���:A�EM�t$f���D$A�EI�D$H��H�D$L)�H���H�{����H��L��H��H������H�LH��H��.tD�8.u�H��H9�u�1��@H��H9�s5�|_H�|H�Hu�H��H�4)H�L$H��H)����H�L$H��H9�r�H�T�H�T$�y��H�t$ H���H�D$��H�T$H;T$ uH�D$�������"�}I�T$I�t$I���1��yA��I��A)��7+��H�����f�D$A�6M�wA�GH�D$�AGI�GL��H�L$(dH3%(��H��8[]A\A]A^A_���"tH���D$�=���D$�Df(�fT
�f.
�v�H��H��)H��GA�HF��D$DF�H��I�t$I�T$�/PI���1�I���_*��XZf���D$f/�w
�-�e����8#�X������H��:� �H�F	H�81�蜼�藺�H�
�@	�LH�5 E	H�=+F	�x���U���xSH���H����H�����3H��0f�hH�@�V�H�Hf�0�PH�HH�@ H�@(�@0H�@8H�@@H�@HH�@PH�@XH�@`H�@hH�@p�H��[]�H��:�x�H�E	H�81�蠻�蛹�ff.�ATI��UH��� S����H�U�}H��H�EH�SH�Ct3H�S8H�C@H�uH�UI��$@H)���|���C0H��[]A\��H�C8H�C@��ff.�AUI��ATI�� UH��SH�����I�L$H��H�HH�E(H��t~H�}H�PH�utH�} H9�HB�A�<$H�StsI�T$H�K8H�S@foE�oMH�sXI��@H�CpCHK`I�t$I�T$H)��|���C0H��H��[]A\A]��H�}H�ut%H�U A�<$H�Su�H�C8H�C@�@H��t�H�V�^���f�UH���SH��PH���E��H��tU�ML�C1�f�H�{H��@���;@ HE�IE���HL�@H�xH�P0H�p8H�P@H�pH�MH��[]�H���:�P�H�C	H�81�艹�脷�@AWAVAUATUSH��HdH�%(H�D$81��>z��I��I���� ��I��H����A�$M�u��L���D$A�$I�EH�D$H��H)�H�D$H���9H�}��6��H�t$H��H��H������+�*���
H�t$0H���H�D$ ��H�T$0H9����:��H��H�D$(�y��H�D$ �8"t
H�D$(H=���?v&M�MH�t$D�EL��I��$��51���%��1��L$f�oAA�OH�L$AGfA�A�GL��I�OM�wH�L$8dH3%(��H��H[]A\A]A^A_��H�t$I��$���L���$��H�����H�D$ �8"�r����I���H�
�:	�H�5T@	H�=�J	謺�H���:� �H�A	H�81�芷�腵�H�
�:	�3H�5@	H�=SJ	�f������AVAUATUS�>
usH��I���� �~��H��H��tu�EM�uH��@M�mD�`L��D�eL��L)��x��f�
CD�cL�sL�k�CH��f�[]A\A]A^�H�
�9	�1	H�5i?	H�=J	��H�
�:� �H�@	H�81�蟶�蚴�f.�AVAUATUS�>usH��I���� ��H��H��tu�EM�uH��@M�mD�`L��D�eL��L)���w��f�CD�cL�sL�k�CH��f�[]A\A]A^�H�
�4	��
H�5�>	H�=fI	���H�:�:� �H�L?	H�81��ϵ��ʳ�f.�AVAUATUS�>9usH��I���� ����H��H��tu�EM�uH��@M�mD�`L��D�eL��L)��w��f�OCD�cL�sL�k�CH��f�[]A\A]A^�H�
i4	��H�5�=	H�=�H	�!��H�j�:� �H�|>	H�81�����f.�ATI���UH��SH��X���H��tuH��A�$H�SD�@E�$H��tWL�]�;t>L�KI��1��H���H��D�Ff�H��H�VL�^L�VL�N H�n([]A\�f�E1�E1���L�[�H���:�X�H��=	H�81��8���3��ATUS�:�uiI��H����0H���L��H��tkA�$H�SH�s��H��A�$H��tH�}f�A�	H�xH�hfD��HH�pH�p H�P([]A\�H�
$8	�	H�5D<	H�=iG	蜶�H��:�0�H��<	H�81��z���u��DAWAVI���0AUI��ATUH���SH�����H��txH�ËEI�MH��@M�>D�`H�Q�H�L$D�eL)�L���t��f�I�6I�U�~f�H�L$CD�c�CH��L�{H�KH�s H�S(H��[]A\A]A^A_�H��:�0�H�(<	H�81�諲�覰�fDATI���UH���PSH������H���}A�$H�uH�S���}A�$tR�;L�MI��tQL�CH��f�A�WH�P@ @0fD��HH�pL�PL�H L�@@H�xH[]A\�fDE1�E1҃;u�1�E1��H�G�:�P�H�Y;	H�81��ܱ��ׯ��UH���0SH���H�����H��tq�}k������ ���t����Eʋ3H�}A��f�H�o�(fD��VH�uH�x�P�H��8H�p@H�P(H��[]�H���:�0�H��:	H�81�������H�
�/	��H�5�9	H�=�D	��f�AVAUI��ATUH��S���t��um� ����H��H��tu�EM�uH��@M�mD�`L��D�eL��L)��7r��f�*CD�cL�sL�k�CH��f�[]A\A]A^�H�
�/	��H�5�8	H�=oD	�J��H���:� �H��9	H�81��(���#��AWI���`AVI��AUI��ATM��UH���SH��L�D$H�\$X�*��L�D$H��to�MH�T$P��M�M�6�qH�:M�M�$L��uH�KI�m�p�SL�PH�xL�PL�p H�h(L�X0L�H8H�x@L�@HH�HP�PXH��[]A\A]A^A_�H���:�`�H��8	H�81��O���J��f.�AUI��ATA��UH��S��H��E��u1H����A���t�H��tg��H�?���u�H��������� ��&��H��tB�MI�uf�`�QI�Mf�8�PH�pH�H�XD�`�UH��[]A\A]����H��:� �H��7	H�81��}���x���AUI���`ATI���UH��SH�����H����H��A�E� <�t<��E�A�$�oEf�SH�﹍�oM�oU(���o]8�oeHf�A�$�CH�EXCH�CXKS([8cH���H��H��[]A\A]�H�	�:�`�H�7	H�81�螭�虫�f�AVI��H��AUI��ATI��UH��S�Ŀ��H��tH�PH�p�H������1�fA�<$�H��@������I�T$A�>H��I�FH�SH�CL�ct8I�VH�C8H�S@L������H��@L��H���zt���C0H��[]A\A]A^�H�C8H�C@��fDAVI���AUI���@ATI��UH��SL������H����A��;I�MM�$�rH��t��tOH�SA�6��t[L�KH��f�A�/H�PH�HfD��pH�HL�@ H�h(L�H0H�x8[]A\A]A^�H�U1�A�6E1��f.�1�E1��H�b�:�@�H�t5	H�81������f�AWM��AVM��AUI���ATA��U���HSH��H�����H����1�f�;u
1�H�{0����A�UA�>L�CI��rI�A�utPM�VM�NA�bf�HfD��pH�PL�@�hD�`H�P H�x(H�X0L�P8L�H@H��[]A\A]A^A_�DE1�E1��H�y�:�H�H��4	H�81�����	��f�AWI���PAVE��AUM��ATUH���SH��(H�T$H�$���H�$H�T$H����H�ËEH�	H��@M�GM�WD�`L�:M�MH�Q�D�eL)�L��L�D$L�L$L�T$H�$�l��f�L�D$L�L$C@L�T$H�$�^�CD�D$`�CHH��f�D�cL�CL�KL�CL�S L�{(H�K0L�k8D�s@H��([]A\A]A^A_�H�V�:�P�H�h3	H�81�������fDATI���UH��SH��X���H����H��A�$�}D�@tRH�UL�MH��t]L�[E�$I��1��H���H��D�Ff�H��L�VL�^H�^H�V8L�N@[]A\�DH��t#L�SL�[E1�E�$1��E�$M����E�$E1�E1�E1�1��H�h�:�X�H�z2	H�81������AWM��AVI��1�AUI��ATI��L��UH��SH������`����H����H��0H��H�����L��H��H��H�D$����EI�L�{(M�D$I�6�C�PI�MH�D$H�{�SH�C@H��L�CH�sH�K H�C0H�C8H�CHH�CPH�CX�UH��[]A\A]A^A_�H�W�:�`�H�i1	H�81��������AWM��AVI��1�AUI��ATI��L��UH��SH������`�����H����H��0H��H���o��L��H��H��H�D$�׭���EI�L�{(M�D$I�6���PI�MH�D$H�{�SH�C@H��L�CH�sH�K H�C0H�C8H�CHH�CPH�CX�UH��[]A\A]A^A_�H�G�:�`�H�Y0	H�81��ܦ��פ��ATI��UH��S�H��=�t=�uj�}U���8�����H��tkA�$H�sf�A�mH�UL�CH�}��fD��HH�pH�PH�pL�@ H�x(H�P0[A�$]A\�H�
R'	��H�5�.	H�=�:	�*��H�s�:�8�H��/	H�81�������H�
'	��H�5�.	H�=�:	���@AWI��AVI��AUI���ATM��UH����SH������H����1�fA�<$H��u1�I�|$0@���A�EH�}0A�jf�sL�MM�D$L�����I�I�H�{0�oE�oM8�CH���oUP�o]`A�EH�E(fD�L�KH�C(H�EHL�CH�CHH�KpH�SxCK8SP[`���H��H��[]A\A]A^A_�H�@�:���H�R.	H�81��դ��Т�AUI��ATI��UH��SH������H��tH�PH�p�I��$��9��1�H�E(fA�}�@���H����f�8����L����H��I�EH�CH�E(H����H�}H�PH�uH�M tH9�HB�foEH�SI��$@H�U�oML�kH�sXH�5��H�S8�H�K@H�CpCHK`�nk���C0H��H��[]A\A]�Df���\���fDH�M H�}H�uH���}���H���t���H�V�k���AWM��AVI��AUI��ATI��UH��SH���ε��H��tH�PH�p�H�������H����H��H����1�A�?I�wI�Wtm�MI�>��I���MM��tM�D$M�Mf�A�%L�cC fD��C H�؉KL�CH�SH�{(L�K0H�s8H�S@H��[]A\A]A^A_��H)�H��@�Yd��I�WI�w�w���H���:�H�H�,	H�81�芢�腠�DAVI��AUI��ATI��UH��S跴��H��tH�PH�p�I��$�����1�fA�}�L��@�����H��I�EH�CH�E(H����H�}H�PH�MtH�u H9�HB�H�SA�L�k����I�vI�~foE�oMH�KXH�{ H�s(CHK`H�Cp��uf�KI��$@�H�5,|�i���C0H��[]A\A]A^�fDH�}H�MtMH�U L�kH�SA����{���foU�o]H�KXH�C H�C(SH[`H�Cp�f�H��t�H�Q�$���f�AVI���AUI���PATI��USH���=��H����H��A�I�MH�S��A�}A����;M�EI����H�{H��f��EVE E0�EH�MH�UL�ML�E H�}@H�uHM��t;I�<$t4I�D$H�0H��t'1��I�D$H�4�H��tH��H���V���I;$r�[H��]A\A]A^�@E1�E1Ƀ;�l���1�1��j���H�q�:�P�H��)	H�81��������AWI���AVI��AUI��ATM��UH���`SD��H�����H����A����}A�MM�V�rM�^A�7��H�U��tmI�}H�mI��M�mI��M�$M�D$f�XA�L$A���pfD� H�PL�xL�pH�h L�P(L�X0L�h8H�x@L�HHL�@P�HXH��[]A\A]A^A_�f�H�mI��M��1�E1�����tI�}L��1�E1��p���f�L��M��1�E1�1�E1��`���H�4�:�`�H�F(	H�81��ɞ��Ĝ�@AWI���`AVI��AUI���ATUL��SH��XH�$L��$�L�D$dH�%(H�D$H1����H�����}�H��H�MA�H�E��A�}I�6H�C8L�$L�t$fD�[�WI�?M�L$H�s E�D$I�.A�UH9ljSH��M�*HF�H9�M�$H�{A�}L�k(H��H�SH��HC�fD�#H�k0H�SH�K@L�SHL�KPD�CXH�L$HdH3%(�H��X[]A\A]A^A_�f�f�H��H�D$@)D$0H9���H�L$01�H�\$L�r�H�L$��L�d$ I��H��@�u�V����H��Ic�L�>����DH��I;l$r͉�L��H�\$L�d$ ��A��H�|$D�\$�QG��D�\$H��tfH�D$ H��H�|$H�0�L�"1D�\$,LG�L�D$�G��H��I��PI��HPL�L$0I���1�L�D$(���
��XZD�\$,H�|$D�\$�V��H�EH�MD�\$�!���f��?����3���f��?����#����� �����f��?��ˀ����������������f��?���@����H�|$�I��L�����f.�H�D$0H�D$���H��:�`�H�,%	H�81�诛�誙�����DAUATUSH���::��I������0I�����H��H����A�E�RI�T$f�I�L$f�3����CA�EC f�s�CH�SH�Kf��tGv-f��t7f�� u@�H�{�t��H��H��[]A\A]�Df��u�����͐���H�
R	�H�5b#	H�=�X躝�H��:�0�H�$	H�81�蘚�蓘�H�
	�H�5#	H�=Y/	�t��@AWE��AVE��AUI��ATI��UH��SH��H����P�f���t
f�����}���H��`��H����A�MH�Sf�L�`8M�L$H�}A�]�qH�MfD�A�uL�C�pH�PL�HH�PL�@ H�x(H�H0D�x@D�pDH��[]A\A]A^A_�H�
�	�H�59"	H�=�.	葜�H�ڣ:�H�H��"	H�81��o���j��H�
�	�H�5�!	H�=�.	�K��ff.�AWE��AVE��AUI��ATI��UH��SH��H����P�f���t
f�����}����H��-��H����A�MH�Sf�L�`8M�L$H�}A�_�qH�MfD�A�uL�C�pH�PL�HH�PL�@ H�x(H�H0D�x@D�pDH��[]A\A]A^A_�H�
�	�NH�5!	H�=c-	�^��H���:�H�H��!	H�81��<���7��H�
�	�OH�5� 	H�=�-	����AWE��AVI��AUI��ATI��UD��SH��H���;���H��tH�PH�p�H����m��L��H������H��tH�PH�p�H����D��A�� fA�}�H��AD������H��I�EI9D$IFD$H�EI�EI9D$ICD$L�mA�>H�EtgI�FI�VH�E@H�U8H��0H�����L��I��H���J���L�mXI�vH��@I�VH)��X���E0H��H��[]A\A]A^A_�f.�H�E8H�E@�ff.�AUATUSH���:<�I������HI������H��H����A�E�{I�T$f�I�L$f�3����CH�C@A�EC C0f�s�CH�SH�K�C@f��tTv2f��t<f�� uM�H�{H����o��H��H��[]A\A]�fDf��u!������f���H�
	�ZH�5r	H�=T�ʘ�H��:�H�H�%	H�81�訕�裓�H�
�	�FH�5,	H�=�+	脘�@AWI��AVM��AUI��H��ATI��1�UL��SH��H���&���`����H����H�|$@�M�$E��?�QI�MttH�w�A��t`I�^M�^H�|$@L�WH���C�PH�HH�xH�HL�@ L�x(H�X0L�X8H�h@H�@HL�PPH�pXH��[]A\A]A^A_�@E1�1�롐H��tH�}u$I��A��t$I�^M�^1�E1��f�H�}�A��u�E1�1�1�E1��a���H���:�`�H��	H�81��C���>��ff.�AUI��ATI��UH��SH��H���e���H��tH�PH�p�H������L��H���<���H��tH�PH�p�H����n���8����H����A�U�� ��1Ɂ�����}M�E�WH��t\�3f��ltSf��RtM�UL�KI�uH��M��tI�|$A�zf�HfD��PL�HH�xH�XL�` L�@(H�p0H��[]A\A]ÐM��t;A�4$f��lt0f��Rt*�UH��u�I�uM���f���[���fD���UM��H���d����c���H�"�:�8�H�4	H�81�跒�貐�f�AUI���ATI��UH��SH��8H������H����A�<$H��tyH�MH;Kvo�f���tyf��tf��Aur1�A�uL�C��A�u����M�L$I�|$A�f�PfD��pL�@H�HH�XH�h L�H(H�x0H��[]A\A]Ð��t[�I�L$f���u�f�KH��t�f��z�����Uf��A��f��A@��A���b���f��z�X����Sf#U���J����H�K�(����1�E1��Q���H�ϛ:�8�H��	H�81��d���_��ff.�@AWI��AVI��AUI��ATI��UL��SH���~���H��tH�PH�p�I��$����1�fA�>�L��@������H�U(H��I�FH�CH����H�}H�BH�MtH�u H9�HB�H����H�CA�L�s����I�wI�A�}H�{ H�s(��I�uI�}H�s@H�{8foE�oMH�KXH�SpCHK`��uf�KI�uI�UI��$@H)���Q���C0H��H��[]A\A]A^A_�DH�}H�Mt]H�E H���S���I�EL�sH�CA����O���A�}H�C H�C(�O���H�C8H�C@�J����H��t�H�A���f�AWAVI��AUI��ATUL��SH��H��8H�L$L�d$pL�$dH�%(H�D$(1��á��H��tH�PH�p�H������1�L��0L��H������L��H�����H�$�H��H��H�$�~���L��H�������L��H��H��I���]���H�UH�uL��H��0L�D$H���D$H�D$H�D$ ���`�H�����L�$H��t�M�E�CI�|$I�6L�h(�QH�L$L�@�H�	�PH�xH�@H�@ H�p0H�H8L�H@H�hHH�@PH�@XH�L$(dH3%(u6H��8[]A\A]A^A_�H�{�:�`�H��	H�81��������F��fDAWI���PAVI���AUI��ATI��UL��SH�����H���CH��A��
<�t1�<����A�A�<$I�T$�pH�EA�6��M�L$I�҃}�vL�EH��f�A�Uf�KC C0fD��sH�SH�CL�SL�K L�C@H�{HM���	I�}��I�UH�2H����1�1�L�c(�>@�Fuf�c�L��H���ya��I;m��I�EH�4�H����H�S(H�CH��uH�{��H9FHCFH�C�f��1t�v&f��Ut�f=����F��̓�f�F�fDf��0��H�F(H���g���H�x�\���H�@(H�H���L���f�8�tg��S%��=Ut~���f�S�,����H��H��[]A\A]A^A_�fDH�VH�S�E���1�E1����fDE1�E1��e���D�P��̓�f�P�C���������f�C��������������f�S���H�
�	��H�50	H�=U	舎�H�ѕ:�P�H��	H�81��f���a���AWAVAUATUSH���>.�H��H���H�t��I��H�����EH�Sf�I�D$@AD$��AD$ �EH�kH�Z�AD$0A�${
A�D$I�l$I�T$H9�r�-fDH��H9�t�}0t�z�0uH��H9�v�{�0t�I��I)�I����L��.H�����I��H����L��蕒�I��H����L��H��H��L)�H)�I�l$H��H�L$�8��H�L$L�C�I�wL��L�D$I�|
���K�L5�L��1�H����c��A�E1H��<M�t$01�I�LL��L���c��L���͠�L��H����h��H��L��[]A\A]A^A_�L�D$I�}�0L��蚃���A�D$@��H��:�9�H�=
 	H�����耇�H�
Y
	��H�5		H�=�	�a��H���:�H�H��	H�81��?���:��H�

	�zH�5�	H�=P	���ff.�ATUSH���H���h1@��u	H��[]A\ÐI��� ����H��t9A�$H�sH�X��f�8�QH�KH��f�h�PH�pH�HH��A�$[]A\�H��:� �H��	H�81��~���y��f�AVAUI��ATUSI)�u[1�]A\A]A^�D���H��H��I���2H��8H��H��H)�PI��H��u/�<_����y�I��$8I��$H��H)�I��M��t�A��$���I��$L��H��P���d���L�H9�v8@A��$�I��$8tEI��$H)�H��PH��u$�<_t��x\H9�[]��A\A]A^�D�H�H9�w��ݐ�����<_t�H������H��t�H�H9��x����fDI��$8I��$H��H)���fD���x9H�
ʢ��u<_�����A�L��H���x���������k���H��8H��H)�����I�����fDH)�H������W����A����DAWAVAUI��ATL�b(M�u0USH��H��@H��H�4$H�r(H�R0H)���G��I�U0I�u(H�߉���������H�����H��H�L$艔��H�L$���A����H�4$L��M���H��账��D����L��H������ �H�����H�����f�E�Q�H�uH�MH�hf�8�PH�pH�HH��[]A\A]A^A_�DI�UI�u��L���L����I�U0I�u(H9�v�B�<!tO<?tKH���H�yE1�H��H����8{��H�4$L��M���H�����1��,���DI�U0I�u(��fDA��I��L��A)�1��`�I�U0I�u(�H�/�:� �H�A	H�81��Ą�迂�ff.�@ATUSH��H�ĀdH�%(H�D$x1�������m��H�VH�L$ E1�L�D$@H��0�$H�T$0H�D$H�D$H�B�H�VH���D$ nH�T$hH�T$`H�D$(�D$`mH�D$pH�D$@H�D$H�D$P��H�T$pH�t$hH��H9��L�`HL���3i��H���H����H�$:H9��H�B0H9���1�f	EH�|$xdH3<%(H���H��[]A\�@H��0H�L$ H�T$@E1�L�D$`�$H�D$H�D$H�D$(H�D$0H�F�D$ H�D$HH�FH���D$@mH�D$PH�D$`H�D$h�D$p��H���\����L���s�����>�����6���fD��&���H�
	��H�5_	H�=|	跅������H�
�	��H�5/	H�=�@臅��¸�f�AWAVAUATUSH��H��@H��H�����H�����H)���C��H��HA��H��PH)�H����H���D��H��蒐������y1��}2���E0u�������tnL��PL��H1�L��L)�H��uTA�<$iuMA�|$tuE����H���8�f�L�h�Q�XL�`�f��P��D1�H��[]A\A]A^A_���:_�3����z@��0�%����?��������H�����$���H��HD�hA��0t4H�5.�A�L�5B2:�
A�ǃ�H�I�4�H��A������E8�s⃻X'tH����H0@H��@E1�1�D��H�����H�}H��H�D$�6U��H�D$H��[]A\A]A^A_�f�H��H��@D��H��E1�[]A\A]A^A_�;��H�Ċ:��H��		H�81��Y���T~�@USH��H����X{tH��P�@�<!t<?u#1�H��@H�����f	hH��[]������H��t�H��[]�f�AWAVAUI��ATUSH��H��(L���H�T$H�L$I�FH��tRH��t7I�F(H��f��`��f��X��H�PH�p��H����&�H��(H��[]A\A]A^A_�@H��t�E1�1�E1���f��X��I��M9~vDI�F(J���f��`u�H�qH�Q@����I�����I����M9~w��E���?@���p������'��H��H���H�t$A�Ef�H�NH�t$��A�EH�V�Y�Cf�3H�KH�S�����E��uc��3���f�I���H�H��u���@0@�~H�H��t�x2t�G0 t:I������������@H�QH�qI����������f�H)�H����H�
���<H�5�	H�=<���@I�����1��m��r����I���H�H��u���H0 H�H��t�x2t�H�D$� �L�pH�D$H�h赼�H��H����A�Ef�n��CA�Ef�;�CL�sH�kD�c�����>_�$����FH�L$<0�������:��H�L$�������H�A�@��0A8�DB����H�PH�p��H����q��F����H��:H�,	�H�81��|��z�H�
����;H�5.	H�=�:��� �ff.�@AUATL�fUH��SH��H���H��8dH�%(H��$�1�I9�sJ�E<@�<{tJ<$��L��h�H��$�dH3%(�H���[]A\A]ÐL��h����f�H9�`�d�Gf�H���$��$��$�HDŽ$�DŽ$�DŽ$���$���$���$���$���$���$���$���$��@l��H��hH��@�$ƃ��c�����L�mL9��3����}-uH�EH9��I�ŀ����A�U���cH�
���€�_���H	Ѓ�H��uD�}@��-������q8����u-�E�P߉���]������� H�1	�������o����H9�`�f��D$|D$DD$TD$dH�D$t�D$@�t$x�t$x�t$x�t$x�t$x�t$x�t$x�t$xH���k��L��hH��@�&����f.�L�mL9������}@uH�EH9�LG耻�tAH��L)�L��PH��u\A�E<_tS�������H��8H��L��L)��*A�U����H�
d��€�_���H	Ѓ�H���V���H9�`sH��h���H���fDH��L)�L��PH�������A�E<_��������V���H��8H��L��L)��6����L��h������f��D$<D$D$D$$H�D$4�$�t$8�t$8�t$8�t$8�t$8�t$8�t$8�t$8�i���L)�L���������L)�L��������軮�ff.�AWAVI��AUATI��USH��H��HdH�%(H�D$81����
f=��zH��l��I��Hc�H�>��f�H�SH�v�1�H���A��I��A)��l��H��-��H��H���U1�fA�}u
1�I�}0���A�$L�KL��H��M�E�T$D�xL�L$E�<$L�D$�͓��A�>L�SH�{L�D$L�L$�T$��I�vI�NA�@H�}(L��H�u8H��fD�uf�UD�}L�ML�E�EL�U L�m0H�M@��L���H�t$8dH34%(H���]H��H[]A\A]A^A_�f.��H��1��H��H���Y1�fA�}u
1�I�}0���A�$H�KM�EH�s��A�>A�$�{�rM�VM�NA�Q�}L��H�u(H��fD�]f�U�EH�ML�EH�M L�m0L�U8L�M@�L���1����H�5M7�t���M��L�CL��1�L����N��I��$�H��H���{���H��L����K������F�oND�~H����D$)L$ A�G�E��tH���&��H�m���u�H�SH�CH)�H����H�}�l$���׊��H��L���\K����M��L�D$ L��D��L�����H���\���@H��H���-K���H����H�n8H����H�V@�B�<?��<!�{H�~H�pH�~XH�����F�_f�L���8���I�EI��$@�H�5r�H�C�w<��H�SpH�sXL��C0�t���1�fA�}u
1�I�}0����fCH�݃�f�C���f.��H����H��H���	1�fA�}u
1�I�}0���A�$H�KA� f�UI�~I�vfD�]��M�UL�CH�MA�$D�KH�}8L��H�u@H�މEL�UD�MH�M L�E(L�m0��I�����f�H�v(H��tL�����H�C(L���c���H��L��H��H���x��H��I�NI�VM��L������H�����@�8����H��H����1�fA�}u
1�I�}0����A�$H�sI�U��A�>A�$�)M�FI�~�EI��$�A�)fD�Mf�MH�uH�UH�]L�E H�}(L�m0H��t9H���A�f����1wL��H��H��u���BH�@H��u�H��L�����H�����fDI�NI�VM������H�������H����H��H���1�fA�}u
1�I�}0����A�$H�sI�U��A�>A�$�{�M�NM�F�E�oCA�,I��$�fD�}f�MH�uH�U�}E L�m0L�M8L�E@H��t?H���A�����1wM��I��I��uA���QH�@H��u�H��L���G��������CuBL��L���oG��I�VI�v�H��I��$��B���m���D1�1������H�{XH���[���L��I��$0�K���H��H�CX�?����E1�E1����D1�E1�����fDE1�E1����D�:_�Y����B<0�M������.�����=����E0H�sI��$�H�S��@I��<�1���Z��v�H��I��$�H���������I��$���N�����f�I��$���.�����H�~pt�F��������H�~�A��$���I��$8I��$H��H)�PH��u1�E<_t)���[���I��$8I��$H��H)�H���:���I��$0L���ڣ��L��H�CXH��H������H�EH�s0L��H�C�x��fA�}��1����܃�����U����H�
t��€�_���H	Ѓ��y����HH��y:H���H�81��jo��em��oV81�H��L��)T$ �.s��H��L����D��H�t$ H�T$(I��$@H)���0��1�L��M��L�D$ L����"��H�T$(H�t$ L��H���m�������I��$8H��H)��������8�O���I�}0���@������AWAVAUATI��UH��SH��8L�.L�vdH�%(H�D$(1��W��L��H���W��H��L��L�<I��L������tx�}0��I�FL��H�PH�@H�T$H�D$�`v�H���y��L��H��H�����I��@L��H����2��A��E��tH�UD��H��H�T$�k-��H�T$��tRf�H�D$(dH3%(�(H��8[]A\A]A^A_�DI��@L��H��L�|$H�\$�L/��A����H��D���,��I���D��H��H�D$��{���ƒ��t7H�}tG��H�t$L��D������H�}H��H�� ��A���Y���f�I��wrH��cJc�H�>��8��D$�V���T$H��H���WH�Ow:�8�H�a�H�81���l���j�H�__ENCODIH9�}@H�|$H�L$E1�D��H�T$H���b��H�}�1��*���H�__LINE__H9�����H�__FILE__H9u�����<m�T��<r�g<uu��H�5��H���@�����p����C������a<�Z���H��b��Hc�H�>���<i��<o��<d�+���f�;do� ��������c<�
���H��b��Hc�H�>�����a<
���H��b��Hc�H�>��8��ͪ�H���~���A�M�AoNf�Q�fA�U@ f�1�H�@0�PHL�pH�E�����H�5j�H���.�����6����H�5�H��������B��������H�5��H��������!������H�5/RH���Щ������������H�5��H��诩�����������H�5t�H��莩������������;then������;true������t����;self������c����;redo�����R����;next�n����A����;else�]����0����;case�L��������;when�;��������H�5�
H���������������H�5��H���ɨ�������������H�5��H��訨���������H�5z�H��茨������������H�5�H���k����������n����H�5�	H���J�����z����M����H�5��H���)�����Y����,����H�5��H��������8��������H�5�H���������������H�5�H���Ƨ��������H�5a�H��誧�����������H�5��H��艧�����������@<e������H�5�H���\����������_����{NG__�z����M���f�;or�j����=���f�;if�2���f�;in�O����"����H�5�H�������.��������H�5g�H���ݦ�������H�5O�H���������������A�E�AoV�H��D�@1�E�E�H�uf�fD�FVL�v�����AVAUATUH��SH��H��0�>dH�%(H�D$(1��G�f=��H�5�^��Hc�H�>��f.�I��DH�\$(dH3%(L���4H��0[]A\A]A^�@I�܄�t�H�SH�s�H����p���fDH�s(I��H��t��ҹH���<���H�C(�fDH�SH�s�1�H���I��A��I��A)������\���@H�{8H���#H�s@�F�<?�<!�H�{H�H�{X��H�{p��H�{���?_tH���T$H)��P�T$H������t
�C�lH�s0H���n���H�����HI��H�����E�sH��fA�$H�K�oc���ok �os8fA�t$�E�S0A�D$I�L$A�T$0Ad$Al$ At$8�I|��L���@A�fD�#I���6���fDA�?I��fD�����fDA�PI��fD�����fDH��H�5&�)���H�s1�H���詢��H���H��I���7u��H��H���:������H�SH�CH)�H���K�S�sH����B���t�H������H�?���u�H��I���y��A�afD��Y����H���H��t;H����D���1wH��H��H��u����H�@H��u�A�+I��fD�����H���H��t;H����D���1wH��H��H��u����H�@H��uٽ(I��f�+���f�H�sH�Sf����k��f��l�}f�����f��3��H)�H��@�	%��H�sH��1ɉ��	���H��H��I���8���.���fDD�kfA���H�SH�s�I��H���������fDf����
rkf����x���H����x���H�SH�s�Z���f�H����r�_��H�SH�s�:���f�H����w�?��H�SH�s����f�H����s���H�SH�s���f��:_������B<0�������� ���������H�sH�S��1�H���I�����H���H���nr���^���f��P��A��I��I��H���*H�SpH�sXH���r{��H�SpH��t
f�:�.�EH�s�KA��H�KX�oCfA�>H�߃��oKH�oS`fE�n�EA�FAFI�vAN I�N0AV8I�VH�Vx��Y����H�SH�s�H�������)���f�H�SH�s�H��������i���H����q���H�SH�s���@H����u���H�SH�s�z���f�H����t���H�SH�s�Z�����t������PH�k:H�(��H�81��`��^�H�
���H�5*�H�=g��c�H�SH�s�H����	���v����o[8H��1�H��H��)\$�*d��H��H��A����5��D��H�t$1�H���ڝ��I���
���f�AWAVAUATUSH��HH��hH��8H9�w/H��`��H��H���H��H[]A\A]A^A_�v��fDA��A���MI��I��H���Q�kwH�5JY��I��Hc�H�>��fDH)耻�H����H��H��I��M��H��hL���LD�1��2�D��L��H������H��hH�PH��hL9���D�:E��y�H���H��H��tH�5S�9H9���H���롐H����I���j���1�1��
f.�����H�<9v���H	��H��	�H��uݍ�(��L�~=���E��������A��t>H���L�%�9H��t$L9�tL�@ H�t$L��1�H��������L�����L������H��hH��H[]A\A]A^A_ÐH9�����L�A H��`L��1����m��H������D��H����A��H��h�����EH���H��H��tH��9H9��xH�����H��HL��[]A\A]A^A_�8���D��H����A��H��h�����H���H��H��tH���9H9��BH������@H�UD��H��h���L9��0�*�< ���F<?�U<\� H�BH��hL9�s�B<u��<U��A��A��H��HL��L��H��[]A\A]A^A_�y���f�D��H����A��H��h����H���H���9H��H9�u	H����H��������f�D��H����A��H��h��
����H���H�O�9H��H9�u	H���\H������;���f�D��H����A��H��h��	����H���H��H��tH��9H9��6H���������f�D��H����A��H��h�%
���1H���H��H��tH���9H9��H������{���f�H��A��D��H��h@�Ń���A���B	�̀@����H���H��H��tH��9H9���H���������f.�D��H����A��H��h�����FH���H��H��tH���9H9��zH��������f�H�UH��hA���	H��hH9����?-��H�WH��hH9���Z
H)�H��H��H���H�hH��@H��`H����J����H�UH��hA���^
I9��
�:-�H�zH��hL9��B��
L��H��H)�f��H�hH��`H���H�¹M�c���@H���A��E�D��H��h��A���a�ɀ���-H���H�U�9H��H9��=���H���4���H9��+���L�A H��h��1�H��`H����.��H�����f�D��H����A��H��h������H���H��H��tH��9H9���H��������f�H���A��E�D��H��h��A���i�ɀ���@�����H�5�L��1�����(���H�UD�y�H��h1�H9�s�}�q��A�����H��hB���8�W�1�	�A��H�PH��hH;�8s�x�,����t%H��hB���H��H��h��0	�A��A��E����E������������fDH�UH9�������}
�����H�UA��H��h�.H���H��tH�
a�9H9��1H��H������R���H�UH��hH9��L1�A����������[H��hH�BH��hH;�8�1��q����tA������H��hA	�D����A��DE�D���A����A�πE�τ���H���H;�]:H��u	H���mH���D�����@H�M�H�}H�L$H��hH9��>s�}{tfH)�H��H�ƸHO����E��A��H����H��hE����H�r�A��TH���I��H��H1�[]A\A]A^A_�
��H�}L��H��hH)����H��t(H�hL��8H��hH��L��H)����H��u�H��hL��8H��L9��x
�}\�Y
H�EI9�v�}nt�H�D$1�A��H���D�d$8L��A��H�D$H��H��D�|$?H��L�t$0A��f.�H)�H�����I��H����H����L��hA��M�L��hA���pE���gH�\$M���'1�E1��f�A����H�<9v������	��H��A	�I9�u�A��$(��=��aA����D	����
H���L�w�9H��t4L9�t/L�@ H�|$L��H�޹�1�L�\$(L�T$ �h���L�\$(L�T$ L���A����A�����A������A������D��L������@���Q��D��L�����?@�΀�<��D�����?@�΀L���'��D��L���?@�΀���H��hH��8H)��
��H�hH��H��hH��8H��H9��M
�;}�B���H��D��H��L�t$0D�d$8H��~�|$?�K
H��H��hA�����H��hH�t$H��HL��[]H)�A\A]A^A_���f�������H�5Z��L��1��������L��H��H��H)�����H��H)�H��H�hH�����H���L���9L9�tH�\$E1�H���!���L���E1�H�\$�D��L������������t�
H�5�L��1�����
�N�@�����	�8�fDA��E��������H�5fL��1�����E���@���������D�}A���T�����D��A�WЃ���	A��9G�A��������!���fD�������fD���'�
��fD������h�fD������P�fD���s��8�fDH�|$H��SH��H�D$ �U���L�D$ ���<	��H��A��H�

�H��H��h1���L��D���A�����������H���H���aH���9H9�H���H�������M�������D��E1�����H��hH���+�H�H��hE������H��`H����O��E�τ�t(A��� D��H�5o�L��1�D�L$���D�L$E���r����F����z@�|$�c
���������L$A���ʍAЃ���	��9G�����H��hH��`�LH����d�H��`�NH����ջ��H��hL��8�w���H��`�KH���誻��H��8���H��`�KH���膻��H��hL��8���D�����@���B����������H�5���<����H����D��H��h��A��t=�̀D��u:H���H��H��tH�
��9H9��S	H���D����D��t�1�D��H�5�L��� ���@��y��H�|$�OL��H��贺��L������L�﾿�����L���������	H�5��L��1��������H��I��H���H��A��T���H��hH�u�L��D�L$H)����D�L$�����H�5(�L��1��b����]����H�5
�L��1��G����r����H�5�L��1��,�������H�5�L��1����������H�5��L��1�����	����
H�5��L��1��������H�|$J��OH���p���H���L��9L9���H����L��hA�������o@�� �
vf@��?��	@��\��H�WH��hH9�����G<ut<U���H��H��`��H��hH���H��h�C�@@��	��H��E��H�
��1�H��hD��H���KH��A�������D��E�D��H��HL��L��H��[]A\A]A^A_�|z��D�zA�� ��A��\�NA��	�
E���!�A��H�
���<��D��H����A��H��hDE�D���ȀA������H���H��H��tH�
��9H9��?
H�������A������L���L�������L���������D��D��A��?����A�̀����?@���ˀ��H�D$1ɀ}}�����L��H��H9�����A����H�t$L��H)�������H��@��D�����H��h��`��A�����΀@���o	H���H��tEH���9H9�H�������H9������L�@ H��h1�H���H��`���}���H������H��A��H�
��H��H��h��.F��D���A�������"	H���H���FH���9H9�H���H��������H9����L�A H��h��1�H��`H����ж��H���j�H9����L�A H��h��1�H��`H���薶��H����H9����L�A H��h��1�H��`H����\���H����H9��}�L�A H��h��1�H��`H����"���H���L�H9��S�L�A H��h��1�H��`H������H���"�H9����L�A H��h��1�H��`H���讵��H�����H9���L�A H��h��1�H��`H����t���H���N�H9����L�A H��h��1�H��`H����:���H������H�5^�L��1�������H�5C�L��1��}��+���H�5(�L��1��b�����H�5
�L��1��G��E���H�5�L��1��,������H�5�L��1�������H�5��L��1�������H�5��L��1�����Y���H�5��L��1������H;
gN:���L�A H��h��1�H��`H���D�L$����H��D�L$�K�@�����@��H�5���<�p�D��H���埃�A��H��h���̀D����H���H��tEH�x�9H9�H�������H9������L�@ H��h1�H���H��`���Z���H�����H��D��H��L�t$0D�d$8H��H��������|$?���H�t$H�U��RH����7���H��hH��8���@���������D������1�D��H�5�L���A�@����������u1���H�5��1�L��1���1���H����UH�t$��H9������L���OD�D$H���聱��D�D$���H��hL�xE����H���L�%�9H��t$L9�tL�@ H�t$L��1�H��������L�������������������L������@��������?@�΀L���������?@�΀L������L���?@�΀������D�d$8H��hH��L�t$0A��H���
�H����OH���y���H��h�UH��H������:}�������H�5W�L��1����=���H��D��H�
�H��H��h�����?��A��A���}���H�BH��hL9�s�B<u��<U��D������~�H��A��H�
��H��H��h���^?��A���DE�E��A�ȀE��������H��`H����JH�����H�t$L��L��H)����H��hL�x�"�H��A��A��E�H��hA��`A��A��tA�ȀE�����H��A��H��hH�
1���H���>��E��A���T���A������I���H��`H����ML���?�H9����L�@ H��h1�H���H��`���j���H����H�t$A�йQ1�H���I��A)��=������H��H��hH��hH��`��H�����H9������L�@ H��h1�H���H��`�����H�����������@���'���������@������H�t$�OL��H����ɭ��L������L�﾿����L�������H9����������H�5��L��1�����y���H��H9����L�@ H��`H���1�����������H�5D�L��1��~�������H�5)�L��1��c���H��H��h���ff.�AWAVAUATUSH��8L��hL��8dH�%(H��$(1�M9��O���H�o I��L��P�o�XƇ��$����}�@�D$Ƈ��@W�EH�
;Hc�H�>���H��pH���H��`I��H��hHLJpM9��KI�� AdžXH��tI��XL��H�8�P@H��$(dH3%(��[H��8[]A\A]A^A_��H��pH����H��`H��hHLJpI9���I�� AdžXH��t�I��XL��H�8�P�r���f�I��I��pH����
I��hILJpL9���1�H��D�<��< ��<\�]<
�I��hI��`L9��qL�mM��h�M��~�v#H�5�9��Hc�H�>��f�H��pH���p
H��`H��hHLJxHLJp�E0H�M�E0I��hI��8H�$H9���(H�MM��`H�L$M9�0��A��
���EƄ$'DŽ$#
\#�D$(��'uƄ$&H��L��$#A�L��H)�L���'��f�H��)�$�)�$�H����)H��$�E1�H�D$�:DH�sI��hI��8L��L��E1�A�H)��''��H��H����)�<
�X���t�<
�*YI��xH����H9��„���3H��I��XH�����E��uaH�$M��8H�I9�rNL��H)���f�
H����:�H���a(�x�
uH��H+$I��I�ċE�����F(M9��d(�E���N���jI��E1�I;�8r�$�I��I��M;�8��A�?�������A�?	u�I��I����f.�H��pH���I��hIdžpL��I��`H)�I��x��
���I��hI��8H�H9�s�:
����H�H���2H�H�F�I��hH9�v(�~�
u"I��xH9���bI��pIdžxI�� AdžX�H�������I��XL��H�8�P����<s<	����H��I��hL9����>���fD<#u$H��L���A������B1I��h���@<\��VI��8H�CI��hH9��UH�T$I��hI��`�mW��I��hI��8H9����|$('�;(H�t$1�1�L���
��I��hH��$�����fDH�FI9�v�~
�M�~
���\�����I��hM��8H�pI��hL9��7����H��M��I��`I9�0s�}�
uH��I��`I�� AdžXH���&���I��XL��H�8�P�����H�VL9�s�~
�}�~
�[I����;�ҥ��I��hM��8H�pI��hL9��@����S���I��hM��8L9��1I��`���DI��8H��E1�H)���L�<�E���B!I��hH��L��L��I��8A�E1�H)���"��H�����I��8L�{M��hI9�s
�{
��$L)�A�L��L��L��E1��}"��H���Q���DH�FI9��@����~
��1���@I��xH����%I��hILJxL9���8H���e���DH�FI9�������~
������I��hI9�����M���������f��|$('��� ��
t*��
�I���H�VI��hH9��R�~
�HH�փ}L�f�KL��$�H��A��K�����E�l���H9��!I�� AdžXH�������I��XL��H�8�P����H�]L��A�L��H)�H���!��f�)D$`)D$pH���|L�d$`�M���t8��+(�u��
�@8��.��
wG�����
��SI��xL�hH���TI��XH���G��M��hI��8�
��#�X��\�tSI��8H��I��hH9���L��I��hI��`�S��I��hI��8H9���)�<
��6<\��9<
�`9�U��t8��l7�U��t8��\7�}��.L��1�1�L���v��I��hH�t$x�DI��8L�hI9��
@��
�!H�}��#I9�`�&I��8H�HH9�@�ǀ�
u#@��tI��hH�q�I��X����,D��
u@��tH9�v�x
uH�H��DI��h�}tsI��hI��8H9�s`�8:u[H�HH9�v�x:tLI��hL��A�F��-��I�� AdžXnH���:���I��XL��H�8�P�%���DA�FL���-��I�� AdžX�H�����I��XL��H�8�P���H�]L��E1�L��L)�H��L���E��f�HDŽ$�)�$�)�$�)�$�H��t]L��$�M��XM�|$ ��u��
��@8������2"H�pI��hI��8E1�H��L��H)����H��u�I��`I9�h�g8I��8H��$�L��I��h�`��I�� AdžX�H�����I��XL��H�8�P���f�I��8L�HI9��I@��
�]H�}�!I9�`��I��8H�xH9�A����
u3E��t.I��hH�w�I��X���I��8I��h�.���
uE��tH9�v�x
uH�x�DI��hH)�H�����I�hL���+��I�� A�FAdžX�H�����I��XL��H�8�P����H��I9�`I��hH��$�L�����y^��I�� AdžX�H�����I��XL��H�8�P�y�f���upH�$L�H9�rdH��L)���[�
L���/�H�\$I��H��tH�@A�|$�
L��H�D$uH���EH+$M��������#I9���#I��8�E��������E1�L9�w'�5f.�I��I��8I��I9���"A�?������"A�?	u�I��I�����I��h�9�@I��X��I��hI��8�F����L�����L��`��@L��`��@L��`L���z�H�pI��hI��8A�H��L��H)��{��H�������I��hI9�`�G)I��8H�t$`L��I��h�\��I�� AdžX�H�����I��XL��H�8�P��H��L���h������LHI��h�]����x
�����@��
�����@��
��!�}
��#I��8L9���!M��hL)�E1�H��L��L���������I��h���x
�� @��
����x
�� M��hL)�A�H��L��L���S������H�|$�
������I��X����I��hH�t$L���j[��I�� M��h�E0AdžX�H���t�I��XL��H�8�P�_�M��A�F���'M9�s
�}@��DA�FI�� AdžX�H����I��XL��H�8�P��I�W M��A�GA�oA�o�:��.��A�FA�FI�� AdžXH�����I��XL��H�8�P��M��M��I�� M9�s�U��|�dJ��=�IAdžX�A�V����ҁ����A�VH���S�I��XL��H�8�P�>�M��A�GA;G��1A�W���;-��>�2-AƇ��A�G��A�FA�FI�� A�fA��XH�����I��XL��H�8�P���A�G����/����.ALJX	�<$���� A�GI�� H�����I��XL��H�8�P�q�M��A�F%�������A�F�M9�s
�}=�zGA��XI�� H���+�I��XL��H�8�P��I�� A�oA�GA�oALJXH�����I��XL��H�8�P���M��M9���$�U��*�F��=��EA�F�0t����@���Au$������t��u����F��%�A��X������A�FI�� H���H�I��XL��H�8�P�3�I�� A�oA�GA�oALJX}H����I��XL��H�8�P���M���{��tA�W��0u��u�|A��XI�� A�FA�FA�fH�����I��XL��H�8�P��A�WM����t�<$�t��0��f�L��HDŽ$�$���$����$���$����$f��$���DŽ$DŽ$�Ƅ$�'��$�Ƅ$�'Idž���$��$��$��$��$��$��$��$����I�� H��@AdžX�H�����I��XL��H�8�P�u�M��M9���#A�F���Au)������tL���N*������GA�F�%�A��X������A�FI�� H����I��XL��H�8�P���M��M9��l-�E��!<]�sH�&��Hc�H�>��L��L)��;SL��
I����N'�I��H���:*I��h� ��h�H���@6f�H��H��@H�hL�h�5
��I��hI�� ALJXH��tI��XL��H�8�PI��`M��hL�sL��L)�H����H��L��I9�s�a"H�xH��I9��M"L��A����-M��H)��
��H���%"H�XI9�r��x*u��x-u�H��H��I9�s�O�H�xH��I9��=L��A����-M��H)��	��H���H�PI9�r��x*u��x-u��D$/I��I��M9��3I����D$(H�D$8H��$�H�D$0�#fDH��H��sI��M9���YA�>@��;v�����u�M9���YA�>@��;�H��L��H���H���
H��I9�v
�}�s���u�L9�t�}:�a0�|$/�3I��I9�w��|$(M��h�@DI�m��	f�A�G�A�!������ �0��%M9�� -M����L��H��I�����I�� AdžX~H�����I��XL��H�8�P���f�A�WM����t�<$�t��0��f�"#HDŽ$�$���$����$���$����$f��$���f��$�L����$�DŽ$DŽ$�Ƅ$�Ƅ$�"Idž���$��$��$��$��$��$��$��$���I�� H��@AdžX�H�����I��XL��H�8�P��I�� A�GAƇ�ALJX�H���z�I��XL��H�8�P�e�M��A�VM9����}@��:�3���K������>I��hI;�8s"D�A��#� A��"��=A��'��=I�� A�F�AdžX�H�����I��XL��H�8�P����M��fA��x�:M9�sL���uI��A��XI�� A�FH�����I��XL��H�8�P�q�M��A�F�A����
f�HDŽ$L���$��$���$��x
�$f��$��c
DŽ$DŽ$�Ƅ$�/��$�Ƅ$�/Idž���$��$��$��$��$��$��$��$����I�� H��@AdžX�H���}�I��XL��H�8�P�h�M���M��A�F�Au��1ہ�����M9�s
�}.��8I�� A�FAdžXH���
�I��XL��H�8�P��A��@M���B%I�� A�FAdžXH�����I��XL��H�8�P��M��M��A�F���AA�FI�� M9�s
�}@��8AdžX�H���h�I��XL��H�8�P�S�M��A�V�€�A�FI�� M9�s
�}@�8AdžXvH����I��XL��H�8�P��M��A�F�_M9���&�}������EI��hI��8A�FH9�s	�?\��HH)�H��I���I��hI��8H��I��H)��PM��hH��uM;�8��&A�}_��&I�tI;�8�u&L���BL��H���]&��A��XI�� H����I��XL��H�8�P��M��A�F%�M9����}>�},������A�F�}=��-�1A��XI�� H�����I��XL��H�8�P��M��A�V�BA�FA�F����M9�s
�}]��-I�� A�FAdžXH���P�I��XL��H�8�P�;�I9�0�2�}�
�(M��M��I��8A�VI�� ����҃���A�VL9�vA���>�RG��~�G��=��GAdžX'H������I��XL��H�9�Q���f.�M��M��A�F%�������A�FM9����}@A�9��'A�����(I��L��L��L)��PH����&A�<_��&���<M��hM;�8��-A���2��E�I��`I���L�����I�F �8�1$I�� E��XH������I��XL��H�8�P���M��M��A�FM9�s
�}<�c3���6A�FI�� M9�s
�}=��2AdžXpH���a��I��XL��H�8�P�L���D$(�D$I��8A���H9�vA�E�<
�h$L9�v<
��$I��xH��t"I��8H9���DI��pILJxA�G��t	������=��I��pH����#I��8H��H)��#��I��8H�H9��4N�;#��H��H)��G�
H����H���PL�`L9�vMH��L��L)�����I��8L�H9�s0�8#u+H��H)���F�
H�����H����OL�`I9�r�A�W�t	����
�����
I��8H��t)H9�s$���.��
��&uH�PH9�v
�x.��
�M��<.��4<&u	H9��GM�|$(A�FAƆ�AdžXy�u��I�� H���e��I��XL��H�8�P�P��I�� I��hALJXH���.��I��XL��H�8�P���M��I�� A�F���A�FM9�s�U��@�m3��=�>'��~�2AdžXH������I��XL��H�8�P���L���������H��I9��"��;@��;w�H��H�������A�����_��M���I��L��H��H)�PH����E<_�A&����1I��`I��hI���D�E����A��\��Ic�H�
Q��<�s��1�蛇��M��8�b��L��L��zL)����I�hA�F�t�0I�F �8�TI�� A�FA��XH���}��I��XL��H�8�P�h��H���
I��hA�F�t��H�uI��hL9�s�L���7E��H��t�I�hH��I��hI��8H9�s9A�����*H)�H��H��I���PH��u��<_�g7���2PI��hI��`1�I���A����0��A��I��1����A)��_�����H��1�I��hA���M��h��*I��L��L��L)�PH����A�E<_������?M��h1�M;�8sA�E��M���������9-I��hI��81�I��A���@��H��H)�I��`�ťL��H���1�A��I��A)�舅�������M��hI�M��h�������I��8I9����A����DL)�L��H��I���PH��u�A�E<_t��������I��8I��L��L)�H��u����H���0I��h���H�E(H��tL9 vM;�8sA�?
tL� I��hH��$�L����C��I�� AdžX�H������I��XL��H�8�P����M��hI;�8�`>I��pH�t$`L��Idžx�_C��I�� AdžX�H���t��I��XL��H�8�P�_�������D��
u7H�\$�\H���9��H�߾
�,��I��hH�CH��$��p����
�[H�VI��hH9�s�~
t�H�\$�\H�������
H���������I�n H)�A�L��L�eL���5��f�H��)D$@)D$PH��tyL�l$@�;�r�����'�:E�mH�s���
<\�r<#�d	:E�?H�sA�L��L��I��8I��hH)����H�EH��H��u�I��hI;�`�?I��8H�t$@L��I��h��A��I�� AdžX�H������I��XL��H�8�P������A��I�� AdžX�H������I��XL��H�8�P���H�uA��I���1�H�I���*���H�E L��A�FI��pI��hI��x��
��I�� AdžX5H���&��I��XL��H�8�P���H�}�\I9�`�EI��hH�t$@L���@��I�� AdžX�H������I��XL��H�8�P���L�����L9�����@A�?���������I��M9�u�H�$H�t$L����R�������I��hH��$�L���&@��I�� AdžX�H���;��I��XL��H�8�P�&��fDH�T$I��hI��`L���e0��L��$��z��I��hI��8��I��hH��$�L���~@��I�� AdžX�H������I��XL��H�8�P���1�:E�
:E�
�}��L��1�1�L��衲��I��hH�t$XI��8A�L��L��H)�����H������L)�L��E1�H�����I��8INjEI��h������H�E(H������L9 ����I9�s
A�?
����L� ���H�DI��XH�I��h����I��hM��8I9��5���H��H�\$�\H��螿��L��H����>�����H�pE1�H��L��I��8I��hH)����H�m�!��H�pA�H��L��I��8I��hH)����H�m�6�:U����
�<;v%��#ukH��L��������Q,I��h�����������
��<I��xL�HH����(H��L��L�$��L�$I��8M��h�y���\�|<H��I��hI;�8�Q��I��`L��I��h�V-��I��hI��8H9��7�<M�D��<
��<C�.<
��I��xH���;I��hL���W�I��hH�pI��hH��$����I��8H��I��hH9������L��I��hI��`�'-��I��hI��8H9������<�^<�(<	� <
���
L��耽��I��xH���K9I;�8�7I��pL��Idžx���L��H���ι��I���H��H������I�� AdžX�H�����I��XL��H�8�P���@I��hH�t$`L���;��I�� AdžX�H������I��XL��H�8�P���H��L��I��h�1��I�� A�FAdžX�H���~��I��XL��H�8�P�i��@��
�M��@��
�Z��M��hI��hI��`L���+��L�l$xL�����H�pH�EI��h����EI��8����E�����|$(��I�� ALJX8H�����I��XL��H�8�P���}
�G�x
�u��I��hM��hI��`L��L�$�o*��L�$L��$�L�����L9��f��f�A�}�f�����R��I��L9�u�H�$H�t$H���L����9��M��tI��XL���h�H�D$I��hH�E �8\��I��pH�D$I��xA�FL���|��I�� AdžX5H������I��XL��H�8�P���<u��<x��<c��8E����yyH)�A���H����I���H���I��hL��HD�H��H�$�ȹ��H�$I��hL��H��貹��H�$I�hH��I��h�#����}��L��\����I��8I��h�g���H��L���ӏ�����j��=��TI�� A��XH������I��XL��H�8�P���1��+��H�sA�L��L��I��8I��hH)�����H�mH���L���L�HI��8E1�H��L��M��hL��L)�����H�E���< ��<\��<
�����H�BI��hH9�s
�z
������
L������I��h���H�EL9����A�}begi���A�}n���1�L9�s�}�������M��hI��8I�UH��H9�vA�}�+2H��L)��5�
L���0	�H��H����
I��XH��H����I��hI�� ALJX!H��tI��XL��H�8�P� ��I�H��H����I��`I��hf�M��XCH�{H�C�C�DH��L��I����M��hI�� ALJX#H��tI��XL��H�8�PI��hI��8H�GH9��`I��`�?=endu<H9�����N��I��h�����GI��8����<��H��H)���3�
���I��H���;���I��h�E���=��OA��XI�� H������I��XL��H�8�P����I;�8��0H��I��pL��H��$�IdžxI��h�u5��I�� AdžX�H������I��XL��H�8�P�u����L���j���I��hH�pI��h���H�l$ I��I9��I��`M��hI9��%I�m��D$(���fA�������M���|$(u'I�� AdžX8H��tI��XL��H�8�PA�FAƆ�AdžXy���I��8H��H)��/2�
�L�I��H���UI��XH��I����M��hI�� ALJX"H��tI��XL��H�8�PI��hI���H��H�C���U��$�4$L�������4$L������I��hH�pI��h���A�F�P��I�� A�FAdžXH������I��XL��H�8�P����\L��讴��L��L����3��I��h�X��H�t$`L���Z3��I�� AdžX�H���o��I��XL��H�8�P�Z��A�F�������A�F�h�M9�s!�E<=�X<>�
��0t���m��A����%=����u���XI�� A�FAdžXvH������I��XL��H�8�P��������(����������1��T��D$/�Q���U��&�~!��=�2!��.��A�F��0�������������*������q	A�F�����@M9����I��L��L��L)�PH����9I��hH�BI9�8vz�B��$���xNI��H��$���PI��hH��u+I��8H9�s�
��I��/wH�5���Hc�H�>��I��`I������rq����Ƅ$��A�FM9�����U�r�M9�s
�}=���AuD%=t8��L��������
I��hI��`�#I����p��M��hA�F1�M;�8sA�?������uI��h�fA��xH�P�:I��hI;�8sL���v)��A��XI�� A�FH������I��XL��H�8�P�r����������M9�s�U��=���0t���r��u���4AdžX�%�������A�FI�� H�����I��XL��H�8�P������Au������t
�0���I�� A�FA�fA��XH������I��XL��H�8�P���A�F���F�M;�8�L
A�9���W���tAƆ�A�F�����lH�T���H�����M��I��`M��8A���H�I��hM��M��h���GM9��],A�����
I��L��L��L)��PH����A�<_�����6L��M��hH)�M9���I�WI9�vA�=t I��8L9�vA�?!�`5A�??�V5A�v@�ƀ�-5I��8H9�s A�A��A��A��>�5@��=��4L9���4A�?=��-��t�<$t@��0tI��8L9�v
A�?:��,E�fA���?AH��H��
�1AH��Hc�H�>��H�H������I�M9��+A����<_t�H��������M9��xM��D��D��L���r������+AdžX~A�F%�������A�FI�� H���'���I��XL��H�8�P����f�L���L��L���-���I��h���I��h���A�F�����H�t$@L���,��I�� AdžX�H�������I��XL��H�8�P���H�GI��hH9�s
�
�F��}
t
�\L���i����
L���\����
L���O���I��h�>�A�U�������_tH�E����H����M��H�����I9����;�O�������L���y���I�� ALJX%H���ο��I��XL��H�8�P鹿���\L��謬��L��L����+��I��h�+�H�BI��hH9�s
�z
�\�}�M�
L���d���I��h���M��h� ���=�H���yf�H��H��@H�hL�`�������I��8M��h�j���L�����I��hH�pI��h����9�f�`#HDŽ$�$�L����$����$�f��$�����$DŽ$DŽ$�Ƅ$�Ƅ$�`��$�f��$�ILJ���$��$��$��$��$��$��$��$�Q�I�� H��@ALJX	H����I��XL��H�8�P�ݽ��I�� A�GALJX	H�������I��XL��H�8�P饽��E�GE������A��X�ܞ��I��h�I��`I��I���1��(j���|��I��hH�t$@L���)��I�� AdžX�H���4���I��XL��H�8�P�����}�lI��xH����I��hI��X�2��I��hH�pI��h����\����I��hI��8H9�s	�::�U
I��`I����$�h��A�F���b��AƇ��oA�G�s���~L��H��0I����Ih����I��h�4�L�������I��h��I��`H���EM��I���H���g��I��hI���H��H�C����I�� AdžXH���ٻ��I��XL��H�8�P�Ļ��@H��$�L���`(��I�� AdžX�H�������I��XL��H�8�P逻��I��h����1��(h����I��8H�FH9����F��	<��L�Q���Ic�L�>�๕1���g���@�L��I�����H����f��I��hI��`I���H�p�������M��hI�TA�FI��h��A�F����L���:��������}���A�V��Au7�с���t'�����I��hI��`�"I����Jf��A�FI��h1�I;�8s����5����������A��XI�� H������I��XL��H�8�P����}=����tM9�s
�}s���D��0t����M���Y���I��h�����|$(uI�D�I��hI��xH������I��hI��XH�p�����a��Idžp�j�I�� AdžX�H���K���I��XL��H�8�P�6���A�}
�����l����}A�9��������A���A�91ۃ��ÁÉI��hI��8I��H)��I��hI��`��I���L�I��1�A)��me������I�hH��I��hI��8H9�wq����H)�H��H��I���PH��u2�<_�����e��I��8I��H��H)�H���F��I�hH��I��hI��8H9��%��A���u����x���_tH�����H��H)�H��H���Hy��뗸�L��H��H)��1y����H��$�L���$�y#���$���ȃ�$�$<Y�g�H�
���Hc�H�>��\L���o����A�L�}M��hM9��M"M9�8��A��2�3�����m�%��҃��[�H�UH��I9�w��H��I9������}�ڰ����u�H��L9��}���<"��	H��L9���I��<;u-�@�H��I9����E<;�<"����w�����t�H�l$ �	H�t$@L���L"����L��b�1��$c�����A����
H�
l�€�_���H	Ѓ�H��������M��h����I�M9���M��8��L��H)�H��	���A����D$(������H��H�-��L��H)�H�����C�Pƀ�5����HcT�H�>��H����H����H���H���H���H���L�sA��H�5��H���3����tDL���A�~�0�����u.E���g'A�F<=��<:�� ˆT$(�@'I�nA�I��I�nL9�r�M��h�����L�s�ڮ����t�E1��w���M�����A����9<_�'H������H�H�������L��M��hH)���AdžXH��I��hH�������I��XL��H�8�P�l�����H�U�I��h���A�F�3L9�s
�}=��A��XI�� H���'���I��XL��H�8�P����I�� H��A�FI��hAdžXxH�����I��XL��H�8�P�ϳ��I�� H��A�FI��hAdžXwH�������I��XL��H�8�P錳��I��h1�I;�8s����O��������I��hI��`1�I���L�
�|L���!�_���O�1�H���	�������\L��������H���2I��h�2��I��h1�I;�8s��������t	A�F��I��hI��`1�I���L�
e|L����!�d_��A�F�j�H�EA�VL9�I��h�A�Fs
�}=�
A��XI�� H���Y���I��XL��H�8�P�D�����H��I�� ��I��h��tB��Au:��0t��u1A�FAdžXH�������I��XL��H�8�P���A�FAdžX�H���ı��I��XL��H�8�P鯱��H�
�u�v)H�5�yH�=
�����A�?臮�����T���A���A���q���1ۃ��ÁÇ�l���I�� H��A�FI��hAdžX�H���-���I��XL��H�8�P������L������I�� A�FAdžX�H�����I��XL��H�8�P�ΰ����親����t	A�F�y�I��hI��`�'I����\�����f�L���$��$���$�����$f��$����HDŽ$DŽ$DŽ$�Ƅ$�/��$�Ƅ$�/Idž���$��$��$��$��$��$��$��$��I�� H��@AdžX�H�������I��XL��H�8�P飯��I�� H��A�FI��hAdžX�H���u���I��XL��H�8�P�`���H�rH9�����B�����<'���<"���L���/��H�����I��h�e�M��������9��_�&H�
����H�H���������A�E����<_��H��	����H�H���n������L��\蜛���
L��菛���u�L��|$/I��H�l$ u8I9�w�#�fDH��I9��g�}�2�����u���f��E<;t��������t	H��I9�w�H��A����-L��L)�M��H��H�D$�I��H���oH�|$0H��L�����H�|$0�V��H�\$ H�D$I��L)�I9�`��H�|$�
H�|$��
H�|$��H�|$0���� ��,�H�������L$H�|$8L�pH��L�`�H�X�0������L�b�RM9��
��"�
L����PI9�vH��"��	H�h��\u�I9�w�}"H�l$ ��	�|$/�����r���H�PH��H���A�������H�|$�H�|$����H�|$�H�5ӱ�r�����	���H�T$ L��L���z��D$(����H�|$H�D$����H������H�T$H��L���;�L�D$H�l$I��L��L��L��L)�A�_�H��L)��D_H��A����-M��H)�H��H���W��H��H��u�I��H�T$H�|$0L��H�l$��������I��h�~L��0I��`�W�������蓥�������I��hI��`�%I����|W��A�F������H�UI��hL9�s
�}>�AdžXqH���P���I��XL��H�8�P�;���H�UA��I��hA����I;�8s
�}=����L��������A�F���@A�FI�� AdžXsH���Ȫ��I��XL��H�8�P鳪��H��I��h�d���I�� H��A�FI��hAdžXH���u���I��XL��H�8�P�`���H�UI��hL9�s
�}.����A�F����A��XI�� H������I��XL��H�8�P����AdžX�H��I��hH�����I��XL��H�8�P�ѩ��AdžX
H��I��hH�������I��XL��H�8�P革��AdžX�H��I��hH���~���I��XL��H�8�P�i���I��8I��H��H)��!�L��L��L)��j����H�
�m�\2H�5qH�=���l��M��hI;�8��I��pH��$�L��Idžx���I�� AdžX�H���˨��I��XL��H�8�P鶨���}A�觥�����t�A���A�����L��L��L)���i�����AdžXH��I��hH���[���I��XL��H�8�P�F���L)�L��H���i������=��-A��XI�� H������I��XL��H�8�P���L�cI9�s
�{.�����|$(I�� u'AdžX8H��tH�8I��XL���PI�� A�FI��`M��hIdžpAdžXH������I��XL��H�8�P�j���1�A��"L��@��1�1��T��I��h�H��I�� H��A�GI��hALJXH������I��XL��H�8�P�����}�۠�����%�M��hM��8��I�� H��A�FI��hAdžX�H�������I��XL��H�8�P靦��H�EI��hL9�s
�}=����L���I����3A�F���Au+������t��L���W�����A�F��%�A��X������A�FI�� H������I��XL��H�8�P���I��h1�I;�8s���蹟�����@A�F�P���H���I��h�q���=��YA��XI�� H�������I��XL��H�8�P�|���H��A�FI��hAdžX�H���U���I��XL��H�8�P�@���I�� H��A�FI��hAdžXH������I��XL��H�8�P���H�UA�FI�� I��hL9�s
�}=��
AdžXH�������I��XL��H�8�P髤����tAƆ�A�F���I��hI��`1�I���L�
�mL��
�!�"Q��A�F�����H�
�h�H2H�5-lH�=�������H��陼��H�UI��hL9�s�}=thA�Ft0M��hAdžX�H����I��XL��H�8�P�ۣ��A�FAdžX�H�������I��XL��H�8�P骣��H��A�FI��hAdžX�H�������I��XL��H�8�P�n���H�
�g�1H�5GkH�=ڠ���H��$�L���$�����$���L���#���L��H�l$ H���!���I��`����I��8I��L��L)����I��hI��`1�I���L�
lL�V��!�O����1�H������d���I��hI��`1�I���L�
�kL��t�!�BO���G�����A��I;�8�	I��pL��Idžx���L��H���ы��I���H��H�����I�� AdžX�H������I��XL��H�8�P���L��L��|$/����I��H�l$ ��H�|$�H�5�X������2�I��`I��0H����P��� t	��	��H��H9�w��t����������tY��u#�H�5E�L���/������I��`I��hATI���1�SL�L$(A��4��M��AYAZ��H�5؋L��������u�I����H�H���a�x2�@1t��R�H�5JL��������p���I����H�H���!�x2�@1t���H�5��L���_�����0���I����H�H�����x2�@1t����I����H�H�����x2�@1t����|�L��L��L)��a��M��h�d�x�
�����I��hI����9��K���c�L�����H�|$�H�5/�������=�|$��I��hI��`�0I����K����H�|$�H�5�V�Y��������L�������������������I��hI��`AT1�SL�L$(A�I����4��K��XZ���L���m��������t}���v�I��hI��`AT1�SL�L$(A�I����4�K��A[X�?�AƇ��2�AƇ��%�H�|$�H�59��p��������AƇ���AƇ�����H��M��I��hH9���L����1�L�����=��I�� AdžX�H���2���I��XL��H�8�P����H��M��I��hH9���L���N�<<��vm<[���}<{ueD����1�1�L������A�F�I�� AdžX�H�������I��XL��H�8�P阝��1�1�L���|���:����)<(t���A��<[t�<{t�<<�E�눺]�w����>�m���E1�1�1�1�L���?���r���H��M��I��hH9��tL���k�<<�Z��<[�B�}<{����L�����I�� AdžX�H���Ҝ��I��XL��H�8�P齜��H��M��I��hH9���L�����<<����<[���}<{u}D����1�1�L���l��I�� AdžX�H���Q���I��XL��H�8�P�<����)<(�7������<<�-���<[�%���<(�E������)<(t���A��<[t�<{�x���<<�E��i����]�X����>�N���E1�1��K����]����>���1�1����H��M��I��hH9���L�����1�L�����j��I�� AdžX�H���_���I��XL��H�8�P�J���H��M��I��hH9�sYL�����L�������I�� AdžX�H������I��XL��H�8�P���1�1�L�������d���1�1�L�������H��M��I��hH9�� L����<<���<[���}<{��D����1ҾL���x��I�� AdžX�H���]���I��XL��H�8�P�H���H��M��I��hH9�szL���}��L�����
��I�� AdžX�H������I��XL��H�8�P����)<(�R�����A��<<�K���<{�C���<(�E��4���1�1�L�����됺]�����>����E1�1�1�1�L���������H���4I��h�0�M��M���L���H���I��h����i�I��8I��L��L)�M��h�p�H��A�F�H��$�I��hH���/����1�H��L���x��H��$�H��$�I���豽���铷��AdžX+M�_M��hH�������I��XL��H�9�Q铘��AdžX*M�_M��hH���t���I��XL��H�9�Q�_���AdžXrH��I��hH���@���I��XL��H�8�P�+���I�WH9�I��h�(vA�=t%A��XH�������I��XL��H�9�Q���M�_�)M��h�ɸ���H)�H��H���0Y�����I�� H��A�FI��hAdžX�H�������I��XL��H�8�P�x���I��hI��`1�I���L�
y`L�x�!�	D����H�
�[�"/H�5_H�=�m�u��I��hI��X�R���I��hH�pI��h���H�t$`L���$����$��L�H鏦��AdžXH��I��hH�������I��XL��H�8�P首������L��L��L)��W�����L��M��hH)������I��hI��`1�I���L�
�_L�B(�!�C���D�I��hI��`�&I����B����A�F���H9������I��pL��Idžx���L��H���s��H��I���I�\$ H��謺��H���d��H��H���I��1��
�<xDH��H9�u��6I��hI��`1�I���L�
�L����!�0B�����1�A���I�|$ �(���I�� AdžX�H���=���I��XL��H�8�P�(���H�
qY�0H�5]H�=���Y��A�镵��H9�vA�:���A�FA�?:�4�mI��hM��`H��L)�H����I�� A��XH�������I��XL��H�8�P鍔��I��h�7I��hM��`H��L)�H��ti��7A�F���q���<$��A�F ��u����x���I��@L������I������������A�F�E���M9�0t.A�}�
t'��7�������u	��u����A�F��j����H�5IEL������u�M��8I9�tv��E<
t<
u�H�EI9�v��}
u�I��X�H��H��H�h讵��M��8L��H)�����
H�����H��u�I�� M��hAdžX�H��tH�8I��XL���PI�� I��`AdžXI���I��hI���H�����I��XL��H�8�P�ϒ��I�WH9�vA�:��A�FA�:����I��h�m���A�F�J���=�tRA�F�6���I��`I��hH)�H��������8_������@<0��������>������+����x���A�F�k����0t
��u�����L9����E<-��<~�X�$I��A�<`�/<"�<'��L��L��H�T$D�D$(���H�T$H���1D�D$(I�hD���L�����H��tbI�hI��hI;�8r�A��I���MI�� H��A�FI��hAdžXtH���B���I��XL��H�8�P�-���M��hA��L�l$L��1�L)�H��$�1��H��@�D$@DŽ$ �L��$(H��$0D��$8��$<L��$@H��H��$ Idž��L�����I��xH��@H��t7I��pI�� AdžX6H���t���I��XL��H�8�P�_���M��8I��hL��H)������
����I��H����I��XH��M�e�\���M��p�I��A�'M��hM��hM��M9�r-�uA�U��D9��s<
�k<
�cI��M��hL�l$M9�r�L��L)��OI��A�`M��h�H�E�$I��hM��hM9������I��h�P�H�E�$I��h��M��鹲��H�CH9�������{.������|$(I�� u'ALJX8H��tH�8I��XL���PI�� I��`H��A�FI��hIdžpAdžXH���ώ��I��XL��H�8�P麎��I��A�"M��h���@������H�T$M��A�ع�I���L��1��:;��M��8�R���L��L)�E8Et2L�깄L��D�D$(I�����1:��M��hD�D$(����I��1�M��h����H��L�W�1�I��h�:��� ���L��L���a���M��鍓��M��h遦��H���<-t<_tI���H��PH��t	H��L9�r�H��H��L������D$(��u�H��I�����H���q9��M��hD�d$(I�m��%���M��I��`�\��1��G������C���<$�9���P��I�H9�vA�>����������<$�
�����A�FI��h�t�<$t�0tH9�sA�:����H��u?=t8H�defined?H9Uu(��uA�F�F����A�F�F�����u����I��8I��L��L)�����I��hM���:��L�����<<����<[�i�}<{��D����1ҾL���"���I�� AdžX�H������I��XL��H�8�P��H��M��I��hH9���L���#��<<����<[���}<{��D����1ҾL��蚿��I�� AdžX�H������I��XL��H�8�P�j����)<(�%�����A��<[����<{����<<�E������)<(�{�����A��<[�t���<{�l���<(�E��]����]�L����>�B���E1�1�1�1�L������B����]����>���I��`I������6���H���H��L��S�1�I��h�M7��魯��H�FH9�v
�~
����H��L�T�1�I��h�7���w���I���H�uI��hH���	�9tH�IH��u��
�:��H�RH��u�A�~����A�F����A��XI�� H�����I��XL��H�8�P�͉��H��L�S�1�I��h�o6���Ϯ��I��8I��H��H)����H��L�S�1�I��h�16��鑮��AdžX����������A�FI�� H���?���I��XL��H�8�P�*���I��8��������I��hI��`�)I�����4������H�5�<H���.����;A��u:A�F�j���H�__LINE__H9Eu<A��u$A�F�l��A�F�j��A�F�l��H�__FILE__H9E��A����A�F�k�k�H�5<>H���~�����A����A�F�MAƆ��+�H�5T:H���>���u<A��u$A�F��>��A�F�k���A�F�>���H�52VH�������u|A��udA�F�@AƆ���A�F�M��H�5�-H������utA��u\A�F�SAƆ��U�A�F�@�C�H�5��H���V���u}A��ueA�F�A��A�F�S��H�5�<H��������A�Ā��A��
tTA�F@�Y��A�F�A��H�5x5H������u<A��u$A�F@�B�~�A�F�Z�l�A�F�B�Z�H�5|bH���m���ulA��uTA�F�D�*�A�F�Y��H�5�4H���+���u|A��udA�F@�\���A�F�D���H�5�2H���������A����A�F�JAƆ���A�F�\��H�5&2H��������A�ĀuvA��
A�F�bAƆ��@�A�F�c�.�A�F�J��H�5�8H���/���u<A��u$A�F�N���A�F�b���A�F�N����H�5�dH��������{A���_A�F�[���}caseujA��uRA�F�CAƆ��g��H�5`2H���z���umA��uUA�F�?AƆ��/�A�F�C���}elseutA��u\A�F�IAƆ����A�F�?����H�5'0H������u]A��uEA�F��E��A�F�I���}nextulA��uTA�F@�T��A�F�E�m��H�5ߩH������u]A��uEA�F�K�=�A�F�T�+��}redoulA��uTA�F�X�
�A�F�K���H�5�3H������u]A��uEA�F�L���A�F�X���}selfutA��u\A�F�]��A�F�L���H�5�/H������umA��uUA�F�OAƆ��K�A�F�]�9��}thenutA��u\A�F�_AƆ���A�F�O���H�5M5H������u]A��uEA�F�U���A�F�_���}trueupA��uXA�F�`��A�F�U���H�5�/H��������A��uMA�F�V�U�A�F�`�C��}whenuvA��u,A�F�fAƆ���A�F�V��A�F�f��f�}douaA��uQA�FAƆ�A�F����ۃ�H���L��H)����I��H��P�����7���A�F�f�}if��A�Ā��A��
A�F�PAƆ��U�A�F�Q�C�A�F�[�1��H�5�-H���D����u~A��ufA�F�^��H���C�����P�����=�A�F�P���f�}inutA��u\A�F�RAƆ���A�F�^���H�5�+H������uhA��uPA�F��a�k�A�F�R�Y�f�}or�����A��u~A�F�WAƆ��-�A�F�a���H�5,H���.����u^A�ĀuFA��
A�F�dAƆ����A�F�e���A�F�W��A�F�d���H�5�+H������u:A�ĀuhA��
A�F�gAƆ��e�A�F�h�S��H�5P^H���f�����s���A��u$A�F�i��A�F�g�
�A�F�i��f���X5t?SI��H��H�H���I��1��f*��H��Pǃ@H��H[�@�|��AUE1�A��H��XATUSH��H��HdH�%(H�D$81�H��0H��L�D$ �$H�D$H�D$H�D$ H�D$(�D$0�g��L��hH�ŋ�X��tR=�tKE��tD�kH����{��H��HH�}HL���w���f�MH��H�L$8dH3%(uH��H[]A\A]�@A�|$�@u�I����-��ff.�f�;�Xt@U��SH��H���H��H��x���H��H���T(��H��Hǃ@H��[]�@�C{����X9�tF9�tBUSH��H���H��H��x���H��H���(��H��Hǃ@H��[]����z��ff.�AW�f�{AVAUI�`�ATUSH��H��xdH�%(H�D$h1�L�d$����H���Y�H��PI��H��HI�WXI�GI�GPI�D$H�$H�D$0H�D$I���Xt	��}�S��{�*=����d�7H������o�@H�t$XH��PH��L�t$PH�T$`)D$PH�D$`�=���L��H��H��������H�T$`H�t$X�H������H��L��H���¾����X�����y�
�k�}H������H��PH��HI�GI�GhL��I�W`H�L$hdH3%(��H��x[]A\A]A^A_���M�ȃ�f��
����[f��'v'����f�M�>���DH���8���H���@���L��H���	���H��@H���a�L��H��H�����H��h��H��`H����%����X����f�H���x���:���H���x�����H��1��x���o�@H��P��X7)L$H�D$ t$H�$H��I�t$H���@���H���x����H���8x��L�t$�o�@H��H��PI�vI�V)T$0H�D$@�J�L��H��H���,���uH�T$@H�t$8�H�������x����E�ƒ�f��
�ƒ�[f��'w��L��H��H���	„�tf�M��3�����ff.�AVAUATUSH��@dH�%(H�D$81���X��qH��H���Yw��H��P�o�@H�D$0��X)D$ ��Ut5��7tP1�H�T$ H���A��H�L$8dH3%(�9H��@[]A\A]A^�H���v��H��@H�t$ H���d���f�H����v��H��HH��PH��@H)��x��L�����A��L���g��A�ă��t_H��HH��D��H��L�AH��H�$H��PH�D$���D��H��HH�t$D��H��H�D$H��PH�D$�H�H������H��PH��HE1�D��I�~�s���H��D��H��H��HL�AH��H�$H��PH�D$���1��H�
|7�tBH�5�>H�=�M�$���_��ff.�@AWAVAUATUSH��XdH�%(H�D$H1���@��<�o�@H��P1�H����X7)D$0H�D$@t;H��H�T$@H�t$8�I�H�|$HdH3<%(�H��X[]A\A]A^A_�fDH���(u��L��PL��HH��@L��L��L)��v��H�����A��H��H�T$���H�T$���A��tOH�L$D��H��H��L�AL�d$L�|$����D��H�t$ D��H��L�d$ L�|$(��H���.���f�H�zE1�L��L��D���˪��H�L$D��H��L�AH��L�d$L�|$�j��1��H�
5�RBH�5/=H�=<L臷�����f�AWI��AVAUE��ATUSD��H��D��XdH�%(H��$�1�A�A�=��}@A��H�5��Hc�H�>��f�D�D$��s��A���JD�D$L��D���\�����I��PI��H���I��H���^�A�f�A�gI�\$A$��fE�$A�A�D$I�l$�H��$�dH3%(L���ɷH�ĸ[]A\A]A^A_�@A��.���L���s��I��P1�1��Ao�@E�MA�L��H��$�A��@E��)�$�H�4@H��9�t��N�H��$�H�
��L��H���d��I���L���@A��.�}�L���r��I��P1�1��Ao�@E�MA�L��H��$�A��@E��)�$�H�4@H��9�t��ƽH��$�H�
=QL��H������I������@�o�XH��h)�$�H��$���q����$�1�1�E�MA�]L��H�4@H�	�9E�ɋ4��M�H��A��X����wI��hI��`�I����|��H��$�H��1�L�����I�������H��8H��hH��H�D$�-�������I��x�тL�����H�D$8A��@L��E�e�D$h�q��I���f��Ao�@�+)�$`H�D$XH��$`H�D$@I���I��P)�$�H��$�I��0HDŽ$pH��$�H��$�A�EDŽ$����D$I���H��H�D$ �e��A��1ɾL��A��A�4�D$(���L��H��H������H��tH�PH�p�I������A��X��y�h�=��]���_�j�I��hI��`�5I�������I���H�o���A��XI�����I�����E1�I��0H��L��H��$�H�D$0L��$�H��$�H��$�M��H��$�H��$�H��DŽ$�H��$�H�D$P���A[[I��A��X��J�4�H��$�L��L�d$`M��I���I��H�\$H�pA���tH�T$0H�t$8E1�1�L�������Ao�XI��hL��)�$�H��$���n��H�|$ �+���D�L$(1�L��A�8��)�L��H��H���+���H��tH�PH�p�I����]��A��X��y�}m=��rm��_�mI��hI��`�5I������I���L��J���T$A�eL��M������A��XA�mI����y��l�����lH��I�T$M��H��t$I�t$L�����A��XH�EHH��AYAZ��J�8sI��hH�|$�o�����w���I��hI��`�61�H�|$HA��I��A)�����J���f.�H��x��~���I��L���2m��I��P��Ao�@I���)�$�H��$�����A��X=����=��
CH�
��Hc�H�>����l��I��@L���L�I���d���@A��tH��hH��`�H����{��L���l��I���I��HI��PH��t@H����f.����1wH��H��H��u���A�H�@H��uٺH�L����M��HA�UL��M��P�Ҿ*L�L$L�D$���I�L��I���F�P��W��L�D$L�L$H��I�����A�I��Pf�wI��HA$��fA�<$A�A�D$I�l$I�T$M�t$I�l$ I�\$(M�L$0M�D$8I�L$@I�T$H�����Kk��I��PI����I��HH�D$���A�EA��X{D�����A�D1�1ҾL��I��0胶�D$A�H��I��I��I��I���D�T$(L�D$ L�gH�L$����P�M����4��H�L$L�D$ H��I��D�T$(�y�A����|$A����1�A��LD�HD�L��f�A�.I�t$A$A�D$H�D$fE�$I�l$I�\$M�t$ I�L$(M�D$0M�l$8I�l$@I�D$H����@H����o�Xf�HDŽ$�H��x)�$�H�D$hH��$�H�D$0H���H��h)�$�H��$��0{���H�D$I��0�H�D$PI���H��H��$��i���L���qi��A��X��=���MH���Hc�H�>��H��x�{���H��L��E�u�&i��I��PA�gf��Ao�@A��XsE��)�$�H��$�H��$�I���)�$�HDŽ$�H�D$I����/�1�1�E��A�.�0L���3�A��@H�D$ I��HH�D$0I��PH�D$(tH�T$(H�t$0�.I����Q��A��X�D$8��p��{�L��M��0�	���A��X��y���=����L�l$�D$8H�D$`�P����XzA�gD��L����A�oH�D$A��X��Y�����M���A���tH��$�E1�1�H��L������0�KL����I���H��t=H��������1wH��H��H��u���ڈH�@H��u�I���H��$�1�L��H�p�ܳ��I������H�\$ A�o�f��%tf��*tH�SH�s�.I�������H��L���d��H�|$�|������[��I��H���)�A�H�L$1�I��@I��HH�T$(�XH��$�M��PA�L��$�H�D$�D$8H�t$8H�t$0��L��$�L��$�L�D$XHD�LD�H)�L��$�L�L$PL�T$HL�\$@H�L$�h���L��A���H��L�D$XL�T$H�H�H�D$fE�$L�\$@L�L$PA�\$H�L$H�t$8I�D$8H�D$ M�t$M�D$I�D$@H�D$`M�L$I�D$XH�D$M�T$ M�\$(M�t$0M�l$HI�L$PI�D$`I�t$hM�D$pA�T$x�<�@H��x�)w�U��H�D$ L���he��I��Pf��Ao�@)�$ H��$I���)�$H�D$@H��$ H�D$HI���A��XHDŽ$0��y���=�����P�����J��=���MH�5�Hc�H�>����d��I��@L������I���\�@�d��I��@L������I���<�@�T$�d���T$E�EL��f�H��$�E��I��H��1�I��P)�$�)�$�)�$HDŽ$�?H��$H��t5H�PH�p�I�������H��$L����y��HDŽ$�P�L��$��_��I��H�����H��$H��$�L��$�H��$�H��H���6�A�f�A��I�T$A$��A���fE�$A�A�D$I�\$I�\$I�l$ M�D$(I�|$0M�l$8I�t$@I�L$H���A������I���H�����H����A��+f.�������?���H�@H��������1w�L��H��H��t�I�����H������d�@H��x��t�}��H�D$�"I���A�m�s���A�GL��D��DA�G�kb��1�E��A�:I��P��L���Ao�@H��$�)�$����I���A�oI��H�_�G��A��XHI������I��0�:��L���yA���H��A��XKH�D$t8A�gD��5L���ԱA�oH�D$A��X��y�'�=���A���tH�t$E1�1�L��H��$��l����KL������X�����I��H���ݨ1�L��L���R��A�1�H��$�I��PL��$���A��HD�HD�A��@A��MwI��HH��A�D$H�D$A�$�I�T$I�t$I�T$M�D$ I�\$(I�l$0I�|$8I�L$@M�l$HI�D$P�S�H��x�Vr�m��H�D$�"I���A�m�c���A�GL��D��DA�G�[`��1�E��A�9I��P��L���Ao�@H��$�)�$����I���A�oI��H�_�7��A��XHI����Z�I��0�9��L���yA���H��A��XKH�D$t8A�gD��4L���įA�oH�D$A��X=��"���y��A���tH�t$E1�1�L��H��$��\����KL�����X�����I��H���ͦ1�L��L���B��A�1�H��$�I��PL��$���A��HD�HD�A��@A���sI��HH��A�D$H�D$A�$�I�T$I�t$I�T$M�D$ I�\$(I�l$0I�|$8I�L$@M�l$HI�D$P�C�H��x��p�]���H�D$L��L��$�E�e�d^��I���f�M����Ao�@I����+)�$�H�D$I��P)�$�I��0H��$�A��HDŽ$��D$���E�M1ɾL��E��A�8��g�L��H��H���i���H��tH�PH�p�I����
��A��X��y�{�=��p���_�}�I��hI��`�5I����X
���D$ I��I���L�g�}��A��XM�����I���{v1�H��L���F���`����I��H���&}�`H���9H��&�H�81��9���4��@A��tH��hH��`�H����	��L���\��A��@a���@��&��I��H����A�f�A��E��A$I��HI��P��AD$A�A�D$A��XAD$ ��fE�$I�L$I�T$I�L$0I�T$8=��2@H���Hc�H�>���\��I��@L����I��A�����A��X���A�UH��L�����?I���w���T$�[��I��PL���Ao�@H��$�)�$�����T$f�8I���,�A��X���9�A�Gu	��G��k����kA�����A��X���A�UL��L�����l>I�����@�[��A��@/�ޢ� ����I��H�����A�I��PL��H��$ M��HDŽ$ .�XH�E�A�L��$(H��$0���A�$DA�\$M�l$I�l$I�D$�;��Z��I��@L���d��I����@�cZ��A��@-��� �����I��H����A�I��PL��H��$M��HDŽ$,�XH�E�A�L��$H��$���A�$DA�\$M�l$I�l$I�D$����Y��I��@L������I���d�@H��h�o�XH��$�)�$��Y��A��X=����=��xH��$�H��$�L�����I�ă��"�=�t ��L���֫H����`A��X��uك���y����L��1�I��`M��h�f��f�H��$�I�\$@H��M�t$HM�t$H�D$)�$�HDŽ$�I9��'L�-ʧfD��B�<�_<��IcD�L�>��@�X��L����E1��Ao�@I��PH��$ ��)�$ H��$0�z��I��H��$`H�D$H��$@H�D$DA��X����=�����&��O�G=��3M=��MILJ�M��tpI�|$uI�|$0�GlI�|$L���l��I�EI�D$A�Ef����f��A���uf��ztA�Euf.�fA�d$�f=�ufA�L$@L��E1��]W��A��X���5���DM��tsI�|$uI�|$0�k�I�|$L����k��A�UI�Ef��I�D$��f��A���u
f��ztA�EufA�d$�A��Xf���ufA�L$f��Ao�XI��h)�$�H��$�����n����L�����H��$�L���E����0��{V��L�����Ao�@I��PH��$�E1�H��$�)�$�H��$��m��I��H��$�H�D$�ÉD$fDA��X����=�����&�H��D=���H=���HM��tkI�|$uI�|$0�<jI�|$L���j��I�FI�D$A�f����f��A���uf��zt
A�Fu
fDfA�d$�f=�ufA�L$@L��E1��eU��A��X���E���DM��tkI�|$uI�|$0�N�I�|$L���i��A�I�Ff��I�D$��f��A���u
f��ztA�FufA�d$�A��Xf���u	fA�L$f��Ao�XI��h)�$�H��$�����l����L�����H��$�L���U����@��T��A��Xf�A��@I��HM��P)�$�)�$���)�$HDŽ$����8H�5��Hc�H�>����T��I��@L�����I����@�T$�S���T$E�EL��f�H��$�E��E��@�ʺI��HI��P)�$�)�$�)�$HDŽ$�/H��$��0cA��^����X����I��H����L��$H��$�M����fI�pH��tH��$H9�HB�H���%�A��L��fo�$��o�$�A���P1��H�H��$�A�fE�$A�T$I�\$I�t$I�\$I�l$ A\$(I�D$8Ad$@M�D$P�i��f��R��I��@L���l��I���D��@�R��A��@[�l������I��H���=�A�f�I��HA��A$I��P��fE�$A�A�D$I���I�t$I�T$H������E1�H�=���81��Hc�H�>��f��T$��Q��I��P�T$�Ao�@H��$�A��X)�$���{��[���YsA�Gu	��G��[����[I��@L�����I��A���&��A��X���A�UH��L�����4I�����fD�CQ��I��@L������I��A������A��X����A�UH��L�����G4I������H���gHLJ��P���P��_��I��H�����A�I��Hf�A�$AI��PI��0AD$ ��AD$0A�A�D$A��XI�t$I�L$I�t$I�L$ I�T$@I�T$H��t3��t.A�U��H������H��L��L���9�A��Xy�&���A�o�L�����I��PI��HI�D$I�T$@I�D$H���A��.��lL����O��E�M1�A����I��PE��1��Ao�@A�L��H��$�A��@)�$�H�4@H�Н9�t���H��$�L��H�
��H��H���*��H��L��I���w������f��KO��I��@L���,��I��A������A��X����A�UH��L�����O2I�������N��I��P�Ao�@A��X)�$�H��$�=����=���kH��$�L��H���[��I�ă����t#��L���0�H����VA��X���u؃��Y� ��L��M��`I��h������YI�D$@I�D$HI�\$����f.��N��I��P�;L���Ao�@�H��$�)�$��Y��H��$�M��@1�H��$�L���x�I��A���k��A��X�]��A�UH��L������0I���C��A��.��jL���~M��I��P1�1��Ao�@E�MA�L��H��$�A��@E��)�$�H�4@H�w�9�t�辘H��$�H�
ZaL��H������I�����@D��x�L��A��@=�X�� ��n��I��H�����A�I��PD��L��M��HH��$�DŽ$�<�XH�E�A�L��$�H��$��	���A�$DA�\$M�t$I�l$I�D$�����[L��I��@L������I������@H�G �8��H�XH��$�L�p�hH�\$�XHDŽ$�����H�P(�\$�K��I��P�Ao�@H��$�A��X)�$���5�ƒ������XH�T$L��L������I��HDŽ$��H��$�H��$���`�ew�`��
��I��H���c�A���� <�t<��E�A�A��@H��$�����$�A��-�H��$������I��PI��I��I��I�ڽ�fA�T$fA�,$A�D$I�t$M�\$M�L$M�D$ I�\$(I�\$0M�T$8I�|$@I�D$HI�D$PA�D$XI�L$A��X��F��A�ML��1�L�����"�I���*��f.��kJ��I��PI��HL���E��I��A������A��X����A�UH��L�����h-I�������J���`I��H�I��P���L�sI��H�����A���� <�t<��D‰�A�A���A��I�\$I���I���fE�$��A�T$XI��A�A�D$I���I�l$I�\$M�t$ M�t$(I�l$0I�D$8I�D$@I�t$HI�L$PILJ�ILJ�ALJ�H��tH�
�)9H9������H��0��H9�D�A��X�fA�|$����A�ML��1�L����聠I�����f���H��L����I��@H��H�D$E1�L��$�����A�gI���ÉD$H��$�H�D$A��X����������
8��y���������*��I��h�I��`I��I���1���I��PALJ@I��HH�t$L���̞��A�o���H��x�GX�ͪ��H�D$L����G��I��P�Ao�@H��$PA��X)�$@��y�Jq=��?qI���f��IHDŽ$p)�$`D��H�\$0H��$`H�\$@I������IT�UA�g�L�����g�A�oH��A��X��y���=����H��$@L��1�E1�H��H�D$�h��I��A��X��f���*�}L����F��A��@��AI��PI��HI�EHI�U@D�ME��A��1�1Ҿ0L���,�1�1�L��H���m��I�EPH�@I�EA��X��yt=��7L���bF��A��X��_��Zf��ƒ��It	��M��7I�UH����>L�k`H�SL��Y�,JA���tH�T$H�t$E1�1�L�����L����E���h��t��I��H���$�A��
L��M��HI��PA���PL���H�A��XA�fE�]A�UM�EI�uM�EI�u ��_�
����������y�����=�����=�wQH�5�Hc�H�>��*�/g����lH��D��L�d$���_L�����A��X����DH�IH�
E�9D��E��t=�u�I�E(L�d$A��H�D$(�EH�����D$ D�D$ 1ҹ�L����N�H�|$(H��H���~Y��H�CI�EA��X�P���/�C���H��H��D��L�d$H��������<����H�IH�
��9D��E�������k���H��$�f�L���HDŽ$�)�$�H�D$H���A��tH��hH��`�H������L����C���L���I��HI��P�8��I��HA�UL���Ҿ,H�D$I��PH�D$輓� �L��I�����I������#t��,tI����!H��H���M�L��L���Ҟ��H�|$�Y���P�����I��H����A�f�I��P�xA$I��H��fA�<$A�A�D$H�D$I�\$I�D$0H�D$I�T$M�t$I�\$ I�l$(I�D$8I�L$@I�T$H�r��f��B��I��PL���Ao�@H��$�)�$�H��$����A��XI��H��$�H�D$���t^H��$���tQ������B�����K����@L���������A��X��t���u��Ao�XI��h)�$�H��$����iKH��$�H��$���I�����I��PDŽ$�H��$�H��$�H�t$L���U����@��H��hf��o�XHDŽ$�H���)�$�H��$�H��$�H�D$H���)�$�L���6A��A��X��yt�=�t��zW��}�qWA�]M����)A�gL�������A��A�&1ɺ�L���e�I���H�D$L�o���A��XM���=��Oq��y�Fq��}��m��$�|��yL���@��H��L��A�o��H�|$�6V��H�D$�f��i�hf=��	hI��0L���k���H�T$�L��H��H���ӆ��H��$�H��H��$�M��PM��HL���Z���I�����f�D��x��?��A��@;��� ��V��I��H�����A�I��PD��L��M��HH��$@DŽ$@:�XH�E�A�L��$HH��$P�!�A�$DA�\$M�t$I�l$I�D$���A��tH��hH��`�H�����L���#?��I��PE��@I��HH�D$A��X��=��6$H�)�Hc�H�>����>��A��@X�J����N��I��H�����A�I��Hf�|I��PA$��A���fA�$A�A�D$I�L$I�T$���I���I���L���%�������K>��I��@L�����I������@f�L��$�H��xL���)�$�HDŽ$�L����4N�Ϡ��H�D$L��A�]��=����1�1��Ao�@I��PA��A���0L��)�$�H��$��1�f�8gH���$sA��X�~xI��HI��PA��@H�t$H�D$tI�����H���@��L���n��A��X=���h��y��h�P�����OA�g�ھ$L���)�A�oI��A��X��Yt���I��OM����OfA�}���H��$�H��M��A�SH��$�L��H�t$(��I��XZI���H��$�1�L��H�p�7���I����������KL������I���H��t<H����fD���1wH��H��H��u����\H�@H��u�L��L��薞��L����Q���h�菻�I��H���?�A�H�T$I��@H�t$I��H�XL��$�L��$�A�L��$�H)�L��$�H��$�L�D$@M��PL�\$8A�hL�T$0L�L$(H�L$ H�D$�g=���
L��L�D$@��1�L�\$8L�T$0�H�L�L$(H�D$fE�<$H�L$ A�\$M�D$M�t$M�\$M�T$ M�L$(M�D$0I�D$8I�l$@M�l$HI�L$PM�t$XA�T$`������x��:��I��@L�����Z�I�����f���x��:��I��@L�����b��I���Z��f.��:��I��P1�1�A�]H�-ň9A�L��H��$�A��@���Ao�@A��H�@�t�)�$��مA��X�I����n�f��D�?��>f��R��>f��{��>L��H��$�H�
L�����I�����@H�G �o()�$`�ox)�$p�op )�$��oP0)�$��9��A�M�L����H��$`��I���8���A�E��1������
�I�����D�[9��I��PL���Ao�@H��$�)�$�H��$��[���A��XI�ā���~q���tW��tR�����D9����B����|5L�������:���A��X��t���u��Ao�XI��h)�$�H��$�����AH��$�H��$���I����\�I��PDŽ$�H��$�H��$�H��$�L���������D�+8��I��@L�����I��A������A��X����A�UH��L�����/I�������GH��x�o�G�3H褚��I��L��A�g�7��I��P1�L���Ao�@H��$�)�$��[h��A��X��m�,8�K3=��8��7=��
8=���7��{�E3�Ao�XI��hL��)�$�H��$��7��A��X}�2pE�MA�1�L��H��$�E�ɹ�J�H��A��Xy�px�i�}L���7���A��@�P���t	���9�I��HI��PH�SHH�CH�CPA��XfDA�o��o��k���GL���ٺ��I��PM��HH�D$A��X�P���t	��Y�SW��Y��N1�M��NH��$�A���H�D$tE1�1�H��L��L���������KL���^���I���H���f��H2H�Є���DH�H��u�H��$�H��L���`���H�T$H��L��I��@���I���H���*���A�o�p����I��H����A��L��H��$�I��PM��HD�H1��H�H��$��\E�fA�$I�D$H��$�E�L$I�D$ H��$�I�t$I�D$(H��$�I�T$I�D$8H�D$I�t$0M�t$@I�D$HM�D$PI�T$XI�\$`I�l$h�t���@�4��A��@M��H�D$I��PH�D$ A��X��y��l��{��kE�MA��1�L��E�ɺ�
��H�D$H��E1�1�H�D$H��L���݆��H��tH�PH�p�I�����H���KT�H��L���&���1�f�;�L��@����з��I��L�pH���TM�l$�|$I�\$��IH�D$ M�t$8I�D$@H�D$I�l$`�I��@I�D$XH�5íI�D$HH�D$M�l$hI�D$P�M;��A�D$0�#���M���M��XM��u��>�M�RM����>A�L�މ��V�����t����>AƇ�A��&tD��L���r����5�||H�����Hc�H�>��A�H�@H�����鍿��DA���I���E���	bA���?q������W���H�IH�܀9������v!E�E�1�L��H��$�E���R
f���T�3N��\��2�0�H��$��ױ�I��H���!}A�L��A�H��tH�Sf�A��I�T$A$A�D$I���fE�$I�l$I�l$M�t$ I�\$(H�������1�H�5k��81�z�Hc�H�>���H��I9����L�t$L���F��H��H��tPH��H�1�H�#L��HG�I���
��H��I��M��I��PI��HP��I���1����A_XH�|$�+��fA	l$���f��?�f���j���f��?�f���[����� �S���f��?�@�̀�E���f��?���@�8������0������(���H�IH�9�4����b����}�DI�G L���o8)�$`�oP)�$p�oH )�$��oh0)�$��0��A�M1�L����H��$`�ЛH���f��g��H�CI�l$H��H��I�D$�E��A��X���A�FH������D$H��$`H�D$f.�A�G�L���0��A��X��=���Hc�H�>��I�G L���o)�$`�oX)�$p�o` )�$��oh0)�$��/���L$H�t$1�L����I���f��g��I�FL��H��I�D$�:D��A��X�L��������L���H/��I��0E1�H��$�I��@H��$�L��DŽ$�L��$�H��$�H��$�DŽ$�H��$�H��$�HDŽ$�HDŽ$�DŽ$����I��PI��HL�hHI��L���AT��I���H����TH�*9H9���_H�B0I9���1�fA	FA�����I��0H��$�1�L��DŽ$�H��$�H��$�謱��I�������I��hI��`�I���������I��hI��`�t��I��H����wA�f�gI�^A��fA�6A�A�FI�nL��L���C���R���L���-��I��0E1�H��$�I��@H��$�L��DŽ$�L��$�H��$�H��$�DŽ$�H��$�H��$�HDŽ$�HDŽ$�DŽ$��`��I��PI��HH�hHH��H���R��I���H���gmH�|
9H9��grH�B0I9���1�f	C��J���I��0H��$�1�L��DŽ$�H��$�H��$�����H�������H�@H��z9�4�����H��$�H��$��|I����.����H��$�H��$�诫�H��H����uA�f�gH�^A�]��f���A��FH�nA��X�B1�1�L�����H�D$I���H�o���A�G�{L��I����R�DA�G����L��A��1�A�z��I��HH�D$ I��PH�D$��A��XA�oH�D$��H��\I��0����9:��y�0:�v
��I��h�cI��I��`I��1�I�������D$(A��XE1���Kt�ھL���zI��A���tH��$�E1�1�L��L��贍���}�KL�������p��#��I��H���uA��\$(�L��I��PL��$��P1���M��H�H�LD�HD�H�D$A�A�7I�D$H�D$fE�<$I�D$ H��$�A�T$I�D$8H�D$ M�D$I�D$@H�D$I�t$M�t$(M�D$0I�D$HI�l$PM�l$XM�L$`I�t$h銶��H�@H�x9�����e���A�]�01�1���A�YL��A���3uH������L���^Z��L���)��I��P�Ao�@H��$�A��X)�$������fA�G�L���C)��A��@��$�I��HH�D$PI��PH��$���$�����T��H�ԄHc�H�>��L���Y��A�GL����(��I��HE��@H�D$@I��PH�D$H�\$PA��XDŽ$�H�D$8H��$���m�l,��)=��+�,,=��+=���*��{��)L���K(��A��@A��X}H�D$`I��H�D$XI��PH�D$xt2A�EA�L��1���A���Pj蠬H�D$p_AXA�GI���AƇ�H�_�~�A��XI�����}�i�	��I��h�@I��`I��I���1��H��I��PALJ@�D$tH��$�I��HH�D$ A��X��'��(I��0�|$XH�\$�uR��y��V=���VA�WA�g�A�O�H�����9��A�]�L��A�W�ۉ��wA�oH�D$HA��X��Yt���I��9H�|$HtH�D$Hf�8��oH��$�H��A�L��SL�D$XH��$�H�t$��H�D$XXZA�o�C�KL��A�o�Ъ��H�D$DŽ$�E��@I��HH�D$(H��$�M��PH�D$I���H�T$1�L��H�p�r��I���裀��A����2H�T$A�����2H�t$@I��@H)���'��H�t$hL���D$�B���H�|$0�;������9��I��H���0oM��A��u	H�D$HL�HH�D$8H��t
�f��t��UA���$�L��$�L�T$P�P1����L$XLD�LD�L�D$xA����L$t��$�LD�HD�L��$�H��$���H�L$ LD�HDȃ�H�|$H�L$ H�L$(HD�HD�H�|$A��L��LD�HD�A�-H�L$(��H��D$fE�4$A�T$A�D$H�D$@I�t$I�D$ H�D$M�L$I�D$(H�D$8I�D$0H�D$`I�D$8H�D$HH�L$ H�|$I�t$`I�D$@H��$�I��$�H�L$(I�D$HH��$�M�T$pI�D$PH��$�M�\$xI�D$XH��$�I��$�I�D$hM��$�M��$�I��$�I��$�I��$�M��$�锰��L����#��A��X�����`L�����L��H�D$8�T��A�G�L���#��A��@A��X��$�I��HH�D$PI��PH��$��G�=���
H���Hc�H�>��L���T��L���;#��I��P�Ao�@H��$�A��X)�$��ƒ�������H��$�D��$�DŽ$�H�D$8H�\$@H��$�H�\$H�\$PH��$��,���I���H�_��y�L��I����"��E�M1ɺ�Ao�@I��PE��A�A�L��)�$�H��$��
�A��XyH����g�i�}L��誦��A�G��BL���Ao�@��I��P)�$�H��$�軦��A��@H��H��$�L��$�L��$�L����$�I��HH��$�H�D$PI��PH��$������L��H�D$8�eR��H��$���sy��A��X�G�=���H��Hc�H�>��H�@H���p�@����I�����H������٭��f�I�����H�����鷭��I�G L���o0)�$`�ox)�$p�oP )�$��oX0)�$��� ��A�M��L����H��$`��H��f�A��X��=��SH���Hc�H�>��I�G L���o )�$`�op)�$p�ox )�$��oH0)�$��; ��A�M1�L����H��$`肋I����f��Vt�#f��o�#f=�u)A�f=�tf��VtI�VI�vI���1�����A��>��j�8��G��I��H���hjA�f�I�VA�A$��fE�$A�A�D$H�D$I�l$I�T$I�\$M�t$ I�l$(I�D$0�
���L���U��I��PI��HL���/���I������L���/��I��0E1�H��$�I��@H��$�L��DŽ$�L��$�H��$�H��$�DŽ$�H��$�H��$�HDŽ$�HDŽ$�DŽ$����I��PI��HL�hHI��L���(D��I���H���ccH��8H9��|dH�B0I9��x	1�fA	F�3���L���C��I��@L������I������L���$��I��@L������I�����I��0H��$�1�L��DŽ$�H��$�H��$��Y���I�����L������I��@L��芤��H������L�����I��PI��HL��脙��H�����A�G�L���|��I��0E1�H��$�I��@H��$�L��DŽ$�L��$`H��$�H��$�DŽ$�H��$�H��$�HDŽ$`HDŽ$hDŽ$p�B���I��PI��HL�pHH��L���uB��I���H����aH�^�8H9���bH�B0I9���1�f	C���L�����I��@L���r���H������I��0H��$���L��DŽ$�H��$�H��$��ß��H�����H�|$���.
���i�H�IH�^j9�����z�����n���������q9�W�I��hI��`�I��������I��hM��`�D��H��H����eA�f�gH�k��f�;A��CL�kH��L���z1���%������L����.L��A��X�G�=��H��Hc�H�>��I��hI��`1�I�������I��`�M��hH�T$芚�H�T$H��I����dA�f�gM�nA��fA�A�A�FI�V���I��hI��`1�I�������I��`�M��hH�T$���H�T$H��H���JdA�f�gL�s��f�3A��CH�S�����H���O���1�K�-CM��0DŽ$�L��$�L��$���f�+<�`�胙�I��H���ܼ��A�H��$�L��H��$D�@1��H��E�fA�<$E�D$I�t$M�t$I�l$I�t$@I�T$HM�t$PM�t$XH����UA��XR�L$A�EH��$�D�l$`��H�\$P�D$H��$�H�D$H��$H�D$0H��$�H�D$X�fD�H�L�D$(D�L$蟘�H���"dA�D�L$L�D$(�qA����,A�7M��1�@f�GL�XI�|$ H�h�pH��f�H�XH�P H�X(L�p0L�@8L�h@H�D$�l-��H�D$A��XRH�@I�D$�P#A���tH�T$0H�t$ 1�L��A��\{��E���A�GL��AƇ�AƇ��4��D�D$H�t$f���L��)�$�I��HM��PHDŽ$��"�E���H�|$H������A��X��Q��&��c��+��y�T=��I�e�_L������E��@M��HM��PA��X�ƒ��I�M�����R�D����T$�L��L�D$8D�L$(�qg�H�H�D$�͖�H�T$D�L$(H��L�D$8�AbA��qH��� ���1�A��L�ZA�7LD�LD�����H�IH�1e9D��E��upE�MA�(1�L��E�ɺ��v�H��A��X��yt=��v���L�����A��X��yu���fDH�IH��d9D��E���(��1��D���I��hI��`H��H)�H��u5�;_u0�C<0t(���B����tI���I��H��H�޹�1�����L�����I��HE��@H�D$@I��PH�D$A��X�]�A�G��I��hI��`H��H)�H������;_����C<0�������������I���I��H��H�޹�1��F���������>A�I��hI��`I��1�I������I��`H�D$@I��hH�D$�:�������>A�I��hI��`I��1�I�������I��`H�D$@I��hH�D$�/����������)���H�n�A��X����I��hI�ٹI��`I��1�I����Q����I��PI��H���I��H���C^A�f�gI�\$A$��fA�$A�A�D$I�l$���H����h���H����\���H����P���H�Z��D���H����8���H�6��,���H��� ���H������H�������H������H�����H������H�c�����H�J�����H�/����H�����H������H������H������H������H�]��x���H�?��l���H����`���H���T���H���H���H����<���H����0���H�H��$���H�=�����H�b�����H�������H�w���H��$�L��H������H�D$8A��X�G�=��
���H��yHc�H�>��H��$�L��H���'���H�D$8�H��$�L��H���͠��H�D$8�H��$�L��H��胈��H�D$8�H��$�L��H���	���H�D$8�o���H��$�L��H���̊��H�D$8�R���H��$�L��H��菇��H�D$8�5���H��$�L��H���R���H�D$8����H��$�L��H���5���H�D$8���H��$�H��$�L���s���H�D$8����H��$�L��H��薉��H�D$8���H�D$8���fD��$��M���FA�f=��Mf��V��Y�t$L���cL��H��H���Tq��H�CI�F�׺�����$�M���NA�Ef=��f��U��Y��L���[cI�}(uI�}�I�UH9PHCPI�U�f��1t��f��U���@ufA�e�I�}(H���7%���:���f���y��I�|$tS���6I��P��I����I��H��H��1��޽��I��HALJ@A��X���JH��������@�Ń�m��@��oE����
L���&����L��H��1��H�A��X�ȃ��y�ƒ�w
��H���	��@�ƃ�G��@�u��u�L$H��L��L���g�L��A���<��I�|$uI�|$0��I�|$H���$��H�CI�D$�f����f��A���u
f��zt�Cu�fA�d$�f=���f��g�m��A��X�|��f�f�����U�P��̓�f�P�O���f�f��0��UH�P(H���0���H�z�%���H�R(H�H������f�:��>�A�M����U�GI���fA�M���D�UA�g�L�����a^H��tH�xI�EXtH�@I�EA��XA�o��yt=�����L�����A��X���f.�M����fA�>������I��01�H��L��DŽ$�H�L$H��$�H��$�DŽ$�H��$�H��$�輬��L��I���L��H���W���H��I��H��I���m��I�E�t$L��H�C��_H��H���m���"���f�L������螑��L���&
�������I��0DŽ$�DŽ$�H��$�H��$�H��$�H��$�M����A�f��V�tf=��`WM�F(�`�I�^0L�D$�6��L�D$H��I�������A���� ���t����E�A�A�~X�L$ M�VHM�NPI�]�r�T$��A�7fA�UA�u�`I�]0A�}X�fA�EM�EI�EI�E M�E(I�E8I�E@M�UHM�MP舋��T$�L$ H��H���خ��� ���t����E�M���M���A����I��HI��PfD�A���L�KHL�CPA�f�C�SH�sH�KH�s(H�K0�{XL��H�CH�C H�C8H�C@ILJ�ILJ�ALJ��+��H�L$1�H��L���I���L��H��H�D$�Yk��H�D$H��H���Ik��L���!b�H�D$I���Ĵ��@L�������>���L����
��陲���I��0�`�DŽ$@DŽ$`H��$HH��$PH��$hH��$p���H��H���]���A���� ���t����D�A�I��`A��H�EM���M���fD�u�QA���I��hH�uA��UI���H�u(I��H�MH�E H�M0H�E8H�E@L�MHL�EP�}XILJ�ILJ�ALJ�H��tH�
6�8H9��2��H��0��H9�D�f�EL���r	��M����A�Ef��U��f=��|RL�D$H�T$1�L��I���腻��H�x(I��uH�x�I�FI9EICEI�FA�Ef��1t��f��U��A�EufA�f�I�V(L��H��H�T$���I�~(H�T$uI�~�I�FH9EHCEI�F�Ef��1t�f��U���EufA�f�H��H��M���G���J���f�M����fA�}������I��0H��$�DŽ$�I���DŽ$�L��$�H��$�H��$�H��$�H��$�1�L���L���H�x(H��uH�x�.H�EI9EICEH�EA�Ef��1t��f��U��A�Euf�e�L��H�}(I���p������I�|$�I�T$M�l$0�U���DfA�L$���@D�L$A�1�L�����H���f��V�af=�uH�C@H��t�x�:tA��X*�����L�����E���=L���]z���H��L��H��H��$�1��H�L���JN��A��@*��I��0DŽ$�H��$�H��$�D�L$A��1�1ҾL���>�H�T$H��L��H������H��H���K��A��X�:3L��H��A��1����@f=��MA�E��̓�fA�E�B���f�f��0��LI�E(H������H�x����H�@(H�H������f�:���G�A�F����U�bJ���fA�F����Df=��L�E��̓�f�E����f��0�_LH�E(H�������H�x���H�@(H�H������f�9��uG�	A�F����U��J���fA�F���DI��hI��`�oI��������>���@I�E@I�EH�8���I��01�H��L��DŽ$�H�L$H��$�H��$�DŽ$�H��$�H��$��ѣ��I���{�f�I��01�L��H��$�I���L��$�DŽ$�H��$�H��$�DŽ$�H��$�H��$�肶��I���e�������7����9����0��1��q��f�f=���JA�E��̓�fA�E�"���f��0��JI�E(H������H�x�����H�@(H�H�����f�:���H��E����U�6J���f�E���H�CI�D$��f��`����H��H���:���A���� <�t<��E�A�I��`A��f�SI��hM���fD�M���A�����H�KI�|$A��CH�sH�CH�C H�K(H�s0H�C8H�C@L�KHL�CP�{XILJ�ILJ�ALJ�uI�|$0��(I�|$H���;��H�CI�D$�f����f��A���u
f��zt�Cu�fA�d$�f=��S��fA�L$�G��I��0I��XDŽ$�M���DŽ$�H��$�H��$�H��$�H��$�I���H���5"H�
^�8H9���1H�A0I9���2E1�H�L$H��L�����I�|$ILJ�ILJ�H��ALJ�uI�|$0��'I�|$H������UH�Ef��I�D$��f��A���u
f��zt�Eu�fA�d$�f����ھ��fA�L$�ξ��f�L��L�L$P����L�L$P����f�L������A��X_�����L������I��P�Ao�@H��$�)�$��s���DI���h���H�PI�U���I�MI�L$���f�L���h��A��X����8���fDL���@��I��P�Ao�@H��$�A��X)�$�����	�H����	L��L���X��1�I�VI�vL����~��H����@H�CH����L�����A��X�h���@L�����A��X�����B��H�
|���JH�5l�H�=����B�@=�t�������_���������A�GE�ME1��H��$�E��1�L��DŽ$��DA�GI��0H��$�H��$��_�A�oH��A��X�d�������f��7�t��9�k��0�bI���I��0H�_��U�H��$�I���H�l$ H�l$xH�D$`A��X'�D$t�D$X��)L���c���A����@A��7��@A��@H��$��A�]�ۉ�$�I��HH�D$I��PH�D$(�V��A�gI��0L���-s��1�A��A����A�<1ɾL��H�D$H�gIA��XZI��H��$�H�D$��CH�t$HL��1�L��A��QD��I���A�oH�_�T�I���I��0I���N����t�������f�A�EI��01�1����A�L��PA�j��I���H�D$pH�_�MT�I���Y^H��$�H�l$ H�l$x�t���f��
t
f��>���A�f��
�[)f��o�Q)f��>tI�VI�vI���1�詩��A��>��E�8��0|�I��H���QGA�f�I�VA�A$��fE�,$A�A�D$H�D$I�l$I�T$I�\$M�t$ I�l$(I�D$0���=������s�����_������d�����m�����A�O�����������������1��o���H��t I�T$0H�KH��tDH�JH�R`H��u�I�yL�l$��M�"��K�XI��PI�D$I�D$HI�D$P��KL������I��PA��@I�T$��Kt	���D���"I��HI�T$PI�D$HH�t$0L���]��H�|$@����܇��f��6����L��f��D��*��f��R��H�j�B,駇���I���I��XM���H����)H�
k�8H9���7H�A0I9��L8E1�H�L$L��H�����L��ILJ�ILJ�I��ALJ��r����M���DL�d$`H��M���A�����I�d��t1�H�T$0�|$hIL��H�t$8��E1��']���6�KL���~��L���f��/��	f��Cu'I��HI��PH�HPH�PH�PXH�@HH��u�@H�t$XL���K\��H�|$@����l���@I��0H��$�DŽ$�I���DŽ$�L��$�H��$�H��$�H��$�H��$��Y���`���x�H��H���2���A���� <�t<��E�A�I��`A��f�SA���I��hfD�M���M�����H�sH�s(�{XL��A��CH�KH�CH�C H�K0H�C8H�C@L�KHL�CPILJ�ILJ�ALJ��|���H��L���X���L���@L���`���A��X��_�3M��0A�M����H�PI9T$vI�T$H�PI9T$sI�T$I�t$(I�|$H���W���Ԟ���H��I�t$(I�|$H�D$�W��H�D$H�@I�D$�O���fDI�}(uI�}��0I�EH9EHCEI�E�Ef��1tv=f��Uu�EufA�e�I�}(H���S���V���f=��E>�E��̓�f�E��f��0�+>H�E(H��t�H�xu�H�@(H�H��t�f�:��=�A�E����U�Y>���fA�E�L���D$ �����D$ �����I��PI��H��I����ȣ������Ao�XI��hH��$�)�$�����L���{���R����Ao�XI��hH��$�)�$�����L����z���ô��DD�L$1�A�1ҾL����qH���H���f��{� ?H�j�B,�Ԃ��f��6�?�BfW��H�j�B鮂��H�4vH�
3D9D��E���������_�����v=��%���E�Ef���L��H��$�E���)�$�H��)�$�)�$HDŽ$��H��$�H��L���z��I������H��$�H��$�� I����9���M��PL��M�l$@I�\$H���D�l$`I�|$ �u!A��X��y��!=���!��I��0A���tH�t$ E1�1�L��H��$��W��L���,�K�5y��I��HH�t$@L��I��PI�T$PI�D$I�D$X�W��H�|$H�a
���<���A��&�- D��L���'4�������Ao�@I��PH��$�A��X)�$�=���H�
�]Hc�H�>��H�@H�dB9D��E���ǯ��1�H��$�H��$�L����r��A��X��1ɺH��L�����A��XI�ă�'�z���I���H��tH�2����9H���fD�8�E.H�@H��u�)u��+@�:)��+H�RH��u�I�T$I�t$�I����K�������H�@H��A91�D��E���'���E�M1�A�b1�E�ɾ0L���>H�������H�������1��ګ��H�D$�x�@H�����H�P����A�]L���ۉ��sEI��H���//fA�<$�uA��X��5��,����,H��$�f�L��HDŽ$�H��)�$�H�D$�E��DA��X��5��������5A����`��+H�\$H��$�L��D�L$ I��I���H���r���H��I������H�T$L��L���7u��A��@D�L$ ��/I��PI��HI�D$HI�T$@�Aol$Al$�|$����H��$�H�D$H��H�������M�t$(M���%4I�D$8H�H���9D�l$D��1�E1�E���+J��1�I��H��I;l$(��3I�D$8H��H����3f�;�u΄���1H�{P��1I�D$8D��J��I��볉�L���CH�������H�|$H���������I���D$(���1�� ���L�����D�L$1�L��A�4���Ao�@I��P)�$�H��$��MlH�L$PH��L��H�T$XI�����H��A��X���I��HI��PH�H0H�PH�P8����H��$������L��$M��tfA�}�����A��^��7� ��o�I��H����7A��PM���6A�I�m�1�L���fA�$:A�T$I�\$I�l$M�l$�x|���H��`H��H�D$���H��`H��H�D$鮧��H��`L�`��ŷ��H�4vH�
�=9�����XE�Ef���L��H��$�E���)�$�H��)�$�)�$HDŽ$��H��H��$�L���Rt��H��A�$f��X�f��`��6H��$�H��$�H)�H����A�L$I����Q���tfDH���F9��H����u�A�t$H�x�D��L��L��I������;{��H��`L�`��A���H��`H��H�D$�ń��I��`H��H�D$8�'}��H��`H��H�D$ �̈��H��`H��H�D$韍��H��`H�X����H��`H��H�D$�j���H��`H��H�D$�u����Ao�@I��P)�$�H��$���I��PI��H�oI���虚�����H���������Y���M�	H�D$鯅���H���J�����Yt��E1�IuE1��z���A��������H�t$E1�1�L��H��$��&P���}����H�������Yt���IuH�D$HA�]���B��H�D$HA����_��H�t$E1�1�L��H��$��O���@��H�EI�F���H����H��$�f���A�GI��hL��AƇ�M��`H�D$�l�E��A�/1ɺ�L���g�L��H�D$`�
���1��L���y��p��A��X����I�EI�F���L�]1�A�7E1�E1����L�����D�L$1�L��A�8���Ao�@I��P)�$�H��$��bgH�L$PH��L��H�T$XI���
���H��A��X����I�FI�D$鶕��I�EI�D$髓��L���g�A��X���������A�����H�t$L��E1�1�L���0N��A��X��Kt	����3I��hI�D$����I�D$HI�D$P�Z�1�1��
�����tH�T$0H�t$8E1�1�L����M��I��x�aL���M��I��L�����T$A�gL���Ao�@I��P�)�$�H��$��:A�oH��A��X��y�(=��(H��$�A���H�D$tE1�1�H��L��L���)M���7�KL���n��H�D$H��L��M��@H�PH�p�x}��H�CH���I�D$8I�D$@����E1�E1�A��H�qMD�ID��Y����L����H�D$�߽��1�1�鴈���i�}L���m��H��L���L��H�|$�I���H��$�1�H��$�M��PM��HL���i��I���u��A���tH�T$H�t$E1�1�L���(L��I��x�L����K��H�D$I��hL���Ao�XH��$�)�$����A��X��y�^(=��S(��K���11�L��$�M��XL��I�UI�u�|��H�PI�D$8I�T$H���>(A��X��H�D$H��$�H��A�H��AVL�D$(L��H��$�腪H�D$(AZA[铀��I�D$HI�D$P���H��$0H��$(��I������I��PDŽ$�H��$�H��$��C���H��$�H��$���I���觔��I��PDŽ$�H��$�H��$����A�E1�D��I��L��L��A�H��$�H��L��H�D$H��AU虩^_H���O���I��hI��`I���1��6A��I��A)������u�����&���s����&���tt���T$A�g�L���
7A�oI��A��X��yt=��w��L��L�L$���L�L$�w���T$A�g�3L����6A�oI��A��X��y��$=���$1�H��L��L�D$(�W���`���e�L�D$(H��I���D���M���aI�pA��|$ 1�I�t$H��$�A�$�����I�l$(LD�HD�A�A��XIA�D$H��$�I�T$I�D$ A���I�T$I�\$0M�l$8M�D$@I�D$HI�D$PI�D$Xtg��tH�t$E1�1�L��H��$��H���6�KL���i��I��PI��HL��H�t$I�T$PI�D$XI�D$��G��L���$����q����tH�t$H��$�E1�L���3H��I��x��L���G��H��L�����T$A�gL���Ao�@I��P�)�$�H��$��4A�oH��A��X��y�B#=��7#H��$�A���H�D$tE1�1�H��H��L���G���7�KL����h��H�D$H��L��M��@H�PH�p��w��I�D$H����I��hI�D$I��`I�D$PI�T$H���0�H��$��c�I��H����.A�L��A�H��tH�Sf�A�kI�T$A���A$I�\$fE�,$A�D$I�l$I�l$ M�t$(�lp��I���I���L���vB���Qp���0�H��$��c�I��H���d.A�L��A�H��tH�Sf�I�T$A���A$I�\$fA�$A�D$I�l$I�l$ M�t$(��o��I���I���L����A���o����"��������"���k���I����,H��H���ʏ���v��I���L���Ao���Ao�XH��$�I��h)�$�)�$�H��$���A��X��N H��$�L��H���p���`�I����a�H��H���@���A���� ���t����D�A�I��HA��H�EfD�]�QI��PH�uA��UH��$�H�u(I��H�UHH��$�H�MH�UP��$�H�E �UXI���H�M0H�E8H�E@H��tH�
8�8H9���&��H��0��H9�D�f�EI�t$(I�|$H���A��H�EI�D$鴒��I���L��A����Ao���Ao�XH��$�I��h)�$�)�$�H��$���A��X��$H��$�L��H��$��[���`�I���a`�H�������A���� ���t����E�A�A��f�PI��HI��PfD���H�@A��HH��$�H�xH�HHH��$�H�pH�HP��$�H�@ �HXH�
�8H�x(H�p0H��0H�@8H�@@I9��DI;|$sI�|$I;t$vI�t$I�t$(I�|$H���?��鑆��H�uE1����H�CI�D$��1�L���c��I��L�pH���ѫ��H�
*���
H�5��H�=a���"�f�L��H�T$L�D$����A�L�D$H�T$���������M����I�U�{��H��$�H��$���I�����������H��$�H��$�I���1����I��PI�D$@I�D$HI�D$駭��A�EA�g�L��D��D����.A�oH��A��X��Yt	��M�����H���$���f�}�����H�
����PH�5w�H�=D���!��H��$�H��$��-I����G����	w����=�wH�=ZJHc�H�>��H�4vH�
m,9�<����<��M�DL��H��D��L�d$���A��@�yI��PI��HI�EHI�U@D�L$ �$���H��$L��H��$H�L$(H��$H��L��$�L��$��?]��H��$��I��1�A��XfH�|$�H��&��D�l$8�ÉD$H��$�H�D$0�fDf=�uf�KM��XA���E1�H��H�T$L���ԧ��H��tNA���H�pL�����A���H�sL��H�D$����H�SH�sI���L�L$A���.1�葊��A��X���^��y��=����n�_L���a��I��HI��PI�V@I�FI�FHA��X�ƒ��It	��f�fA�>��&I�|$ L����I�FA��XfI�D$��A���tH�T$(H�t$ 1�L��A��?��L������X�I��HI��P�~[�I��H����#A��L��A���P1��H�A�fE�A�VI�^I�^I�n I�n(A��X���D�L$A�)1�1ҾL���1WH��H��H�@H��I�F�;��f��g��f=�����f�K�����T$�
L���Y+H������H�PI;VvI�VI�FP���f�L�����A��X��_�~���L�������P���L������D�L$1�1�I��PA�b�L���Ao�@H��$�)�$��WVL��H��H�D$0H��H�PH�p�|Y��H��H�PH��I�V�I�f�;g�����A��X���L���[�����D�l$8I�|$ �H�|$��������=����H�=�HHc�H�>��=������_���������~��H�4vH�
.(9�4���t�钕��f�I�EH�E����I�L$�Q��L���1
�����I�����A���H�@I�D$�H��A���tH�t$E1�1�L��L���<��L��I��`M��h�l��A��X��y�=�����K���UA�g�L�����Q)A�oH��A��X��y��=��|�@��X�H���[$A�f�A�2I��`�QI��hfD��PH�XH�HH�XL�p H�h(H�p0H�H8A�I�D$@A��XI�L$����L�����鶓���UA�g�L�����(A�oH��A��X��yt=����L��H�L$�K��H�L$��f��iuH�D$H�xPI��tL����K��H�T$L��H��I�����H��$�H��$�I��HI��PA��XI�T$PI�t$XI�L$`I�D$hI�T$I�D$u
A����I���H��tG�
��(�Zd��H���D�8(�Gd��H�@H��u�u��@�:��H�RH��u�A���VI�T$I�t$�I����9�����c��H�|$���H�D$f�8����H�
��KH�5�H�=��Y�f�H��$A���H�D$(tH�t$ E1�1�H��L����9��L������H�t$@L���?9��H�|$H��H��$�+H��$I���脃��H�D$(H��L��M��PM��HH�PH�p�V��I���c��L���^��A��X魎��E�Ef���L��H��$�E���)�$�)�$�)�$HDŽ$�z�����z��fo�$�H��$��o�$�H��$fA�d$�At$HI�D$XA|$`I�T$pH���fH�BI�D$�Vz��L�����A��X_��e��L�����I��P�Ao�@H��$�)�$��e��L���a��A��X=�t	��y����L���B��A��X��yt�=�����f�L�����A��X_��w��L�����A��@I��HM��P�D$ �w��H��$�H���/�H�p陁��I��0H�D$A�G�?��L��AƇ��y�WY��A��X�D$X�d���L���{��A��X�G���A�UH��L����蝷I���a��D��蝶��I��h�I��`I��I���1����铿��H��$�H��$�HDŽ$�H��$�H��$�HDŽ$�DŽ$�H��$�L�GL��PI��PM��HP��c��H��$�A^I��X���H��$H��$�+I����y����e��f��o����I�VI�v�I����Q������I��`L�h���L���D��A��X�4��I��`H�X���L��� ��A��X�����L$H��L��L���O����)L����*��I��0L���H��H�T$L���H��I���w��A��X��t)����I��h�WI��`I��I���1��R���M���1�A��A�&��L����L��L��H��I�����A�����fA�>gt|A��X��ytD���t<��}tc��t��m���I��h�WL��I��`I��1�����p����L������A��X=�����y����}�<���I���H�_��(��iA�oL��I����}�V��I�UI�E(H�\��f�����f��i�
H��L����3��H�|$�-��L��L���]3��H��$�L��H��$�M��PM��HL���Q��I����]��L�����A��X��yt�=��0�����I��`H��H�D$���L��H�T$ L�D$�D��A�L�D$H�T$ ������	�����}���X]��H��H��$���H�H��$���L��L��H���}LH���U����7����J��̓�f�JA�U���������fA�U�ѿ��L���<��A��X����H�jH�R����A��s���:_�2��B<0�&����������I���L��� ���=�H�L$8H��@��f=��N�����Hc�H�>��H�qH�A(H�L����H�IH��u��!���DH�I(H��u�����f�H�QH�q��I���L�L$0�R|��L�L$0���L���P��A��X=�tL��ytGA��X}�����L��)�'��I��0L���CD��H�T$�L��H��I������d���L������A��X��yt�=�u���f�A��$����M���L�����A��@I��HM��PA��X�D$(鞣��L�����E��A�[1�I��H��L��H�D$ I��PH�D$�JL���H�D$����A��X��yt8���t0�v���I��h�lI��`I��I���1���{��A��X�G�����
A�gD��.L���A�oI��A��X��Y�~��M�uA���tH��$�E1�1�H��L���0���0�KL���Q��I���1�L��H��$�H�p���I����'��H��L��A�o��(��H�|$���p���L�I��H����A��L�织L��$�I��P�P1�M��H�H�H��$�A�fA�$I�D$H��$�A�T$I�D$ H��$�M�D$I�D$(H��$�I�t$I�D$8H�D$ M�D$0I�D$@H�D$M�l$XI�D$HH�D$M�L$`I�D$PI�t$h�*Y��L���r��E��@I��HI��P�}j��L���P��I��P�Ao�@H��$�A��X)�$�=�wH�
?Hc�H�>��Hk�H�F9�<t,1�H��$�H��A�]L��H��$�����J��H�����E�MA�b1�1�E�ɾ0L���E�Hk�H�
�91��<t��K���L�����E��@I��HI��P�k��L���n��A��A�V1�A��@I��PL���Ao�@H�@H��$�1ҋt�)�$��L��E1�L��H��$�H���Qs��H��$�H�
�L��H���]��I���W��L��1�����I��PA��XM��HH�D$tA�U�L������H��H��$�A���H�D$tE1�1�H��L��L���-�����L����N��邔��L��L����,��L���-��h�I��P��I�I��H����A�I��@1�H��L��$�L��$�D�@E�D�D$����
L��D�D$��1��H��hE�D$fA�$M�l$I�\$M�l$0M�t$8I�l$@I�\$PI�\$XA�T$`�kV��I��PL��DŽ$��H��$�H��$����H��$�HDŽ$�H��$�HDŽ$�H��$�H��$�H��DŽ$�H��$�L�GL��PM��@�j��f�HI��[]��U��L��H��$�H��$�DŽ$�����H��$�H��$�HDŽ$�HDŽ$�H��$�L�GL��H��$�H��$�DŽ$�PI��PM��HP��X��A]A^I���8U��L�����I��P�Ao�@A��X})�$�H��$���
E�M1�A��L��E�ɺ�H��$�H�D$H�\$�A���H����A��Xy���i�}L���]L��I��HM��P钓��L������A��X�9���L�����A��X�N��L����������}�&���GT��L�����A��X�n���L��D�L$�v��D�L$1�L��A�D�E��@�I��HM��PD�T$��A���D�T$H���/M��0�D$M���7\��H�EI�E�E��L���������I��PH��E1�E1���{��H��$�1�L���;]��H���܏��A��X}���AƇ����A�G����H��$�L��D�L$H���3T��H�T$L��L��fo�$�I��P(H��$�I�D$8�I��A��@D�L$��I��PI��HI�D$HI�T$@�Ao\$A\$�J��I���I��H��t H���8H9��*
H�B0H9�������H��$�fA	D$H��$�I�T$I��`I�D$ I��h�AoL$I�T$8I�D$@AL$��`ufA�$��|$�xH�T$L��L���H����z��L���l����c��L���_����e����R�����Q��L���D��E��@M��HM��PA��X頭������������ʃ�fA�U镴��I��@L��$�H�D$H��$�H�D$L������I��P�;L���Ao�@�H��$�)�$��I��H�D$H��L��L�D$L��H�P�Aa��A��XH��������I�E@I�EH��L���a��A��XL�l$�D$8H�D$`�7\��L��I��X�0��I��P�Ao�@A��XK)�$�H��$���A�U�L�����H��$�I��L��H��$�H���PW��H�PI�D$8I�T$����M��H��HE��`��I����*�p��������I��PI��H�C�I��H���J
A�f�gI�\$A$��fA�<$A�A�D$I�l$�x��H��$H��$�+I����p�����I��PI��HH��H)�H�����L��������I�FI�D$�m��A��"����f�P��I�EI�D$�k����$����H��$��>H��$�I��I���1��Dp��A��X�r���I��I��I��1�E1��aw��A�������Fy��L���J������I�D$@I�D$H�S��H��$�H��$�H��$�H��$�H��$�PI��hPL�GM��`L���R��I���[I��I��]H���8H�g�8H9���H��0H9�������fA	D$L������KN��L��L�D$(���L�D$(���L���|���������]n���N��L�c��DŽ$�'L��$�L��$���@�I��H���	A�L�ǹH�ލP1��A�H��$�L��A�PH��$�fA�gM�`M�`�\[��I�MI�U(I���H�pH�D�H�P��m���O�L���y4��H��L��H��I�����I�UI�E(L��L�d�A�$��L��H�T$���H�T$�Ry��L���o���A��X���1��M�L���T���A��X��H�pI�����#m������H���0��Y�A��M�8E1��J�L�������o��A��Xy�@�i�}L��D�T$ H�L$�>D��D�T$ H�L$A��@M��HM��P�D$��T��A��XR�*��CL��L��苿���w�E1�1��4���H�������������颒��H��L���W��D������H�t$H�{H������L���L����A��XyI���
I���H���Y�A��X��'��K����}��K��I�T$I�t$�I�����k���K��E1�M��A�H��L��H��$�H��AVH��$���A\A^I����L��蔾��I��PH��$�I��HH�D$ A��@�D$t����L���a���郇��H��I��E1�E1�1�E1��Bs��M���h���fA�}��^���H�
���JH�5	�H�=��a��B��̓�f�BA�F���������fA�F����A��̓�f�AA�F��F�������fA�F�6���H�\$H��H+D$@H���U����{�=�K���H�T$H�t$@�=I����oj���+���D�l$M�t$(��r��I�D$@I�D$H�*���H��$��QH��$I�D$��a��H��$�I��1�L��H��$��P���A���H��$�H�F�H����r���I�|$H�a���c���L�����H��$�H��$�H��$�H��$�AQL�GM��@L��L��$�AV�5^��A��X+AZI��A[��L�hHH�@A�|$XL��$�L��A�\$H��$�I�D$��$�f��H��$�����L��H�D$��E1�E1�L��H��$�H�
C���H��RQH�T$����?��XZL�
��8E�l$D��I�A0I9�D����I�������t	@�����À��A�u���<��@����f%�@����I���H��tL9���I�Q0I9��D�fA	D$�H���1���y����e����;_�W����C<0�K������>������;���I���I��H��H�޹�1���h������L���}���������馜���B��̓�f�B�E��2�������f�E�#���L���:��������������+������L��裺���R��������1����I���A�sD��D��L��L���������颍��L���Z���H��$�1�H��$�M��PM��HL���:���˅����R������F���B��̓�f�BA�E��u������fA�E�e��A�����鍛����6���L���й��H��$��-����549A��1��Ao�@I��P1�L��A��)�$�H��$��I���H��L�o��H�D$L��I��M���L��H�HH�P�6��I��鍻���������X�������H�
�u��H�5�H�=-��`��L��������I��`A�n�r���H����H�@I�D$�]��I���A�e�I��������*�������h�[��L��D�T$H�D$蘸��D�T$H�L$���E1�����H�
�x�H�5Z�H�=����X�R[��H�
A}��HH�51�H�=Ɛ��� �)[��H�
(|��H�5�H�=e��`���P�[��H�
?x�=H�5߀H�=r��7��M�AP��1�D�T$I��hI��`I����}e��D�T$L�
Q�8������*���H�
�|�6LH�5{�H�=�����H�
�t��H�5\�H�=ّ��H�
M|�bNH�5=�H�=�� 
��H�
)|�OH�5�H�=���q��I�D$@I�D$�[��H�
�r�ZEH�5�H�=~��C��H�
�v�
FH�5�H�=_��$��H�
�{��NH�5�H�=@����H�
�x��H�5�H�=��������Y��H�
�q�["H�5eH�=�������]Y��H�
�z�aH�5<H�=q���H�
�w��H�5H�=���u����Y������H�
s�]H�5�~H�=���B��H�
�x�,H�5�~H�=Ў�#��H�
�u��H�5�~H�=�����H�
�z��HH�5�~H�=Z����H�
�w�hH�5n~H�=����������	���p�\X��H�
Kz� NH�5;~H�=��8�3X��H�
w��H�5~H�=��j���0�
X��L���������H�
�t��H�5�}H�=o��4���H��W��H�
�q��EH�5�}H�=F����H�
�y�SMH�5�}H�=������@�W��H�
+r��H�5k}H�=�����AWAVI��AUATUSH���t$fA��'���t$��E������E���@��H���f��j��w-f���;��f��gu1H��H��[]A\A]A^A_�Df=����Xf=��[A��XL�=9I��A�}f�|$��f�� ��f��)�|f���`A��X�C@t��H�IA�<��m���E��t#A9���f��z�T��H�IE;,��E���@��tf����f��%�E��I��H�@I��D�X	D�(�H�P�D$D�\$
A9����������D�L$H��D�ʼn�L���ܙD�\$
H���f��,������f��Q����f��b��f��juvA��XH��H�IA�<��������f���wf�������A��XL�=�9H�@I��A�<�������O���fD��f���m�����f�f��@tA��X���fDA��X�C��������f�H�{ ��������@�Ł����	Ń���	Ń���@���D���!���A��XH������I��hI�鹾I��`I��1�I����[_�����fDH�{ tIH�{XH�KHt^H���<���H�Cp1�H���-���f�8@��� �����H�@A�<�%�����4���H�C8H��t€8[u�H�C@�x�]u����H�CpH������H��������H�C@H�������x�:��������@A��XL�=�8H�@I��A�<���H�{H���H�SpH����f�:�������f�H��hH��`��H����a]����I��hM��`��/�H��H��t8A�f�gH�k��f�A��CL�c����H�{X�
����G���H���8��H��yH�81��B���=��ff.�f�AWI��AVAUATA��U��SH����X=�����y��M��XD��E1�L��������$I��0L�����$��I���D����I���\��I���H�D$1�A��A�&��L�������L��L��H��H������A�����E��XA��ytBA���t9L��D��������uXf�;g�A����L���ޮ���y���f�L���Ȯ��A��X��yt�=�t�L��D���������B���I���H�_���1�I���A��t	1�A����L��L�����H��L��[]A\A]A^A_�DD��蠐��H�|$�WI��hI��`I��1���[��I��PALJ@I��H���L������A��X=��=�����@L�����A��X��tl��yt/=�t(L��D��������]����������yu�L��蠭��A��X=�u���L��D�����������AƇ�����AƇ����AWAVAUATUSH��H����X��&tL=��	��$�0�+���H��P�'H��HH����Y��H��1�[]A\A]A^A_�HLJ��G�����XH��HL��P��0��v2��9�I��z�`H��訬��H��@H���i3��I���4@��
�����.H���v���H��@H���'6��I��@�0���+�H�����f�1�QI�MH�hf�0�PH�hH�HL�` L�h(�H��[]A\A]A^A_��D�gD�w�GHLJ��G�t$�֫����X%H��HL��P��D�s�FH��E1�D�c�%�0��L��HL��P�@��+�H�����f�A�0L�p�QfD��PH�hH�hL�h L�x(L�`0L�p8�H��[]A\A]A^A_�f��`��*�H���p���� ���t����EыH��`A��H�@H��hL���fD���L���D���H�x��HH���H�x(H��H�pH�@ H�p0H�@8H�@@L�PHL�HPD�@XHǃ�Hǃ�ǃ�H��tH�5�8H9�����H��0��H9�D�f�PH��H�D$�!���H�D$H��[]A\A]A^A_�D�t$H���c���־�����k�FH��D�sI�Ǿ%D�c�>.��L��HL��PM���'���I�����I�G(H�f�`�����H��萩��H��@H���q2��I������f�H���h���H��@H����3��I������G�7H���-����L��hL��`�(�I��H�����f�gM�uAE��fA�}�A�EM�}���f.�H���ب��H��PH��HH���$��I���Z���f.����v����`H�<�8H�Xr�H�81����������@�׹0�й��ff.��AWAVAUATI��USH����T$
f�L$dH�%(H��$�1���X��pH�G H���8�&H��$�L��$�E1�H�|$H�|$PH�|$H�|$`L�<$I��H�|$ �A�EufA�d$�I�|$(H��A�舼��A��X���I�G �8���hD�hL���Ao�XI��h)L$0H�D$@�o���A��X����=���D"l$
��n�@����I����m��L���Ao��H�D$`)T$P�+��I��P�Ao�@H��$�A��X)\$p=�����n�����=���
A��@�	���I��P�I��HI��I���1��UT���`�I��PALJ@I��H�%�H��H���PA���� <�t<��E�A�H�t$x���|$0A���H�L$8H�|$@I�ȉEH��$�A��fD�Mf�UL�EH�]H�MH�} H�u(H�E0H�]8H�]@H�D$PH�EHH�D$XH�EP�D$`�EX��M����f=�tf��UtH�UH�u�I����R��E����I�|$(uI�|$�8I�D$H9EHCEI�D$�Ef��1�����v-f��U�s���f=��v�E��̓�f�E�c���fDf��0�SH�E(H���?���H�x�4���H�@(H�H���$���f�8����A�T$%��=U��
���fA�T$���D���L���)���`�I��H�($�H��H���{A���� <�t<��E�A�A��@���|$0A���H�t$8����I��PL�\$@I��I��H��A��f�UH�ډEH�uH��H�}8H�}HfD�mL�ML�EL�] H�](H�]0H�M@H�EHH�EP�EX�v���EM������I��f=�tf��V�����fDH��$�dH3%(L����H���[]A\A]A^A_�@=����\$f�HDŽ$�)�$��kD=�����n���u��uaI�����n�P�������L���~'��H�T$0M��@H�$H��L���CU��H��H�<$跸���E����fD��L���m���H���,A��X�h����H�$I��01�L��I���DŽ$�I��H��$�H��$���T��H�x(H��uH�x��H�CI9D$ICD$H�CA�$f��1tvQf��Uu+A�D$uf�c�L��H�{(I��������f.�f=��;
A�D$��̓�fA�D$��f�f��0�
I�D$(H��t�H�xu�H�@(H�H��t�f�8��2��S%��=U�����f�S�n���@H�<$H���\��������I��hL���Ao�X�Ao��H�D$`I���)d$P)l$pH��$��A���A��X�����������n��	f�`�HDŽ$�)�$�I����~ �H����A���� ���t����D�A�?I��PA��H�@fD��OI��HH�pA��HH�L$pH�xH�HHH�L$xH�x(I��H�HP��$�H�@ �HXI���H�p0H�@8H�@@H��tH�5ـ8H9���	��H��0��H9�D�f�PH�<$H������D$�hf�A��X=�����n���u��uZ��n�����L���џ��H�$H�t$0L��I��@��>��H��E�������H�PH�p�I����L��������L����H���t���H�<$H���8����c������oI��PI��E1�1�����H�EI�D$���f�L���(���H�$E1�L��I��HL�D$H�t$0I��@DŽ$��H��$�H��$�HDŽ$�HDŽ$�DŽ$��?��H��$�H��$�H�xHH���G��E�������H�UH�u�I����uK�����H�T$@H�t$8�I����UK��H�T$0M��X�R���@L�\$@I��I��1�1�����@I��1�1�����@H�T$@H�t$8�I����J���`���H��H����A���� <�t<��E�A�H�|$xA��XL��$����|$0A��xH�L$8����I��hL�L$@I��M��`H��A��f�UfD�U�EH�MH�]L�mL�M H�}(L�E0L�]8H�u@�k���@�`����H��H���A���� ���t����D�A�?�|$0L�l$`�WH�|$XA���H�L$8���I��hL�T$@I��M��`I��UH�T$pH�u@I��H�UHH�T$xf�E�H�UP��$�H�M�UXI���L�ML�]L�U H�}(L�m0L�E8H��tH�
}8H9�����H��0��H9�D�f�E�����I��PI;�0v�~�
u	H��DI����H���H��I��PALJ@I��H����fDI��I��E1�1�1�1����@I�D$H�C�a���L��躛��I���H����H�C|8H9��TH�B0I9���H�\$pH�L$L��H�SH�s��E1�L�D$H�t$0H��L��I��@�;��H��E���]���H�PH�p�I����H���E�_���f�`�HDŽ$�)�$�I�����H����A���� ���t����E�A�?H��$�f�H��f�(H�,$�WH�|$xH�pA��PH�T$PH�xH�PHH�T$XH�x(H��H�PP�T$`H�p0H��H�@H�@ H�@8H�@@�PX����@�`����H���A���� ���t����E�A�?I��hA��f�HM���M���fD��WE���I��`H�pH�p0H��H�xH�x(H��A��PH�@H�@ H�@8H�@@L�PHL�HPD�@XILJ�ILJ�ALJ��9���L���a���A��X��������L�����L�,$H��L��H�T$0M��@L���pK��L��H������E�I�L�L$@I��L��1�E1��t���L������`��p�H��H����A���� <�t<��E�A�L�D$xA��@H��$����|$0A���H�L$8����I��PL�l$@H��M��HI��A��f�UfD�U�EH�ML�]H�]L�m L�E(H�}0L�M8�������rI��hH��E1�E1������tlI��hH��E1�E1��*����P��̓�f�PA�D$������fA�D$��L�T$@I��M��1�E1���L�l$@H��I��1�E1��>���H��M��E1�E1�1�E1�����L��腗��I���H����H�x8H9���H��0I9���H�\$pH�D$H�T$ H��L��H�p�F�E1�H�T$H�t$0I��L��I��@�g7��H��E���$��h�������I��PL��E1�1��z������������H�|$H�\$p�:��A����3����K���H��L��E1�E1�1�E1��������x���L��葖�����P��̓�f�P�C��D����f�C�5������L��I��E1�1�1�E1����H�l$H��蹿��H��H��螿��H�,H9�r
�<H�H9�v1H��H��H)��zX��H��u�H��$�H�t$x��I�����B��A�H�\$p�k���A�H�\$p�[����������E���H�\$pH�����A����M����d���A�H�\$p�T���H�\$pH�����H��H���߾��H�TH9�sIH�\$(H���H�H9���H��H��H)��W��H��u�H�T$`H�t$X��I���H�\$(�B��A�����H���8�`�H��^H�81��?���:��H�
P��@H�5�]H�=�o���H�
$Q��H�5�]H�=�f����7�H�\$(�AVAUATU��SH��H���o�@H��PdH�%(H��$�1��>��X)D$H�|$ �y��t%���S=��DH�
Hc�H�>����=��"H�wHc�H�>��f��H�t$��H���l��I��H��$�dH3%(L���VH�Đ[]A\A]A^��H��谓��H�L$pH�t$E1�H��H��0H��@L�D$P�D$pH�D$PH�D$xH��$�H�D$X�D$`�3��H��PH��HH�hHI��H���ܸ��H���H����H��s8H9���H�B0H9���1�fA	D$����fD��u�7H������,���@�~��=��;L�d$pH�|$XH��H��H�|$`L���D$P��>�����X��t�k����	��H������H���H����H��r8H9���H�B0H9���E1�M��H�T$PH�t$H��H��@�v2��I���5���fD=�����H��D��D����I��H����f�8�u��X=�����H�t$H��1�H����0��L��H��I�����@=�tD��H���6�H���M��X��uڅ�t�k���r�
��H��������@H��P�,H��HI�D$HI�T$@I�D$�H����H�������������
���fD��t�SH������H�L$PE1�H��H��0H�T$0H�t$�o�@L�D$p�D$0H�D$8H�D$@H��P)L$PH�D$`H�D$pH�D$xDŽ$���0��I�����H��h�o�XH��L�d$p�o��H�D$`H���)T$PH��$�)\$p�F�����X=������H�t$1�H��H���S/���`�I����H�������� ���t����Eʋ;H�t$`f�HA��fD�(�WH�|$XH�p��PH�T$pH�xH�PHH�T$xH�x(L��H�PP��$�H�p0H��H�@H�@ H�@8H�@@�PX���`����H�������� ���t����Eʋ;H��hA��f�HL���L���fD��WD���H��`H�pH�p0H��H�xH�x(L���PH�@H�@ H�@8H�@@L�PHL�HPD�@X����t�kH��褎���	��H�������@�kH��P�-���f�H�T$ H�t$�	H����E;��������=���fDH��L������������fDI�D$@I�D$H����f�H�T$ H�t$�
H�����:�����L���H���A�����������D��t�k�
��H������`��(
�I��H����H�L$H��P���|$��$L�D$ I�Ƀ�@�H��HH��A�D$I�FX�Aof(�AonHI�L$I�NHI�D$XI�F(A�$�H�D$xI�F0I�T$H��$�H���M�L$M�D$ Ad$(I�|$8I�t$@Al$H�D$p7H����H�km8H9���H�B0H9���H��$�H�t$xH����A�D$fA�D$L��������A��6���A��+���H�t$1�H��H���+��I������1�1����E1�E1�����H��H�L$袼��H�L$���t���A�D$���I�D$@H��PI�D$H����
�\���H��H�L$�e���H�L$H��H���E���L�lL9�r�Bf�H�I9�v1L��H��H)��N��H��u�H��$�H�t$x��H����w8��A�D$�������H�
�8�`�H�UH�81�������ff.�f�AWAVAUATUSH��H��dH�%(H�D$x1�H�����L�d$ L���f�H��L���)D$ H�D$0���1Ҿ#H������H��H��t'���uH�@H���H�U(H��H�t��3��H���H�T$@�H��H�p�6��H��������������L��0H���cL��H��L��@�q����H�5��L��I�����L��H�߉�����L��H�����H�5d�L���Α��� H��A����
���H��H��H��0L�hXD�`0H�PH�PH���t��������L��0L��@���H����L��H������H�5UAL��I���D���L��H�߉�����L��H������H�5��L������L��H�߉����1�H��H�D$�
��H�T$H�5~�L��I��H��0I�GH��8I�W�M�gXI�GI�G I�G(I�G8I�G@袐���H�5�@L��A�G0芐���H��D$�7�I��H���(��L$f�A�@A$�PH��0AD$�fE�$A�T$I�D$I�D$A�L$I�D$ I�D$(M�|$0I�D$8I�D$@H��tH�}�2H�EH9EsH�EH�}L���(���fA�L$L��H���6����H�5<�L��I��迏��L��H�߉����L��H���G������L��H������L��H�5�SI���x���� H��A���x���X�I��H��0M�}XI�EI�EE�u0��H��H�����H�׹A��H��0D�@1��H�D��H��H�rH�rH�rH�r H�r(H�r0H�r8H�r@L��H�jPL��fD�
D�BL�jH���H��u@H��0H������H��H��0H�EH�E�DH��L���E�L��荜��H��t��8��9�H�����f�H�u�y�QH�M��PH�T$@f�8H�PH�T$HH�pH�P H�T$PH�HH�P(H�h0H�L$xdH3%(�H�Ĉ[]A\A]A^A_�f�H�������H�D$��I��H�����H��0A�$��H��8�D$`�AI�T$I�t$�`�A�D$�L$H�T$hH�T$pH�T$�B�H�T$�L$H��I���1�q1�L�ǹ�H��3I�xHA�pH�5��I�PI�PI�P(I�P0�A��L�D$�V���L�D$L��H��H�T$`L����2��L�d$H��L�����L��L����fA�O�N������ֵ�����H9E��������L��H������H�����DL��H�����H���/����P���8H�T�8H�pN�H�81���������H�
�I��VH�5rMH�=ZQ�����X븹H뱹`몹�ff.�U����E��SH��H������H��H��H������H��tH�PH�p�H����0��H��H��[]�f�AWAVAUATUSH��H�t$f�L$dH�%(H�D$x1��f��A@��f��Z��@�����XH��I��E1���m��=���H��菃��H��P�o�@H�D$p��X)L$`��t#=��XH�
9�Hc�H�>���H�D$H���D$1�1ҾH��A�aD�HE�����H��H��I�����H��tH�PH�p�H�����/��L��H�T$`H��A�����I��fA�<$At>L��L���S����XtZH�L$xdH3%(D����H�Ĉ[]A\A]A^A_ÐI�|$(L���S���fA�}��fA�d$���Xu��H���X�����X=��������m�������=��!H�=��Hc�H�>���o�XH��hH��)T$ H�D$0���H�t$ H���=��H�t$H��H��I���O��H��0�D$@H�D$HH�D$P��X=��H�
�Hc�H�>��@H�@H�=��8D��E���nH�|$(H��H��H��Ht$0�P���VH�T$0H�t$(�D$`7H�B�H�t$hH�D$p�J�H��H)�!����?��H��@H��H�L$����H���������H�L$���A����H�t$`H�����H���f��D$1ҾH��A���D�xE��E���F��H��H��I���H��H��tH�PH�p�H����z-��fA�}�ufA�MH�t$L��H������A�Ef��V��f=�u.I�E@H��t%�x�:uH��0�D$`H�D$hH�D$p�/@���*H�����H��P�o�@H�D$p)\$`E��1�1ҾH��A���s��H��H��I���u��H��tH�PH�p�H����,��L��H�T$`L��H���D-��I������@H�@H�=��8D��E��������D$1�1ҾH��A�D�HE������H��H��I������H��tH�PH�p�H���� ,��L��H�T$@L��H���,��I���?���DH�D$(H�t$`H���D$`H�D$hH�D$0H��H�D$p�C��H��H�B� �H�T$�W��H�T$H��I����f�E���H�rH�JAEI�UfA�}A�EI�uI�M�O����H�@H�=��8D��E���FH���H��t$1�����X��H�H��t�P2�@0u��t�H�T$pH�t$h�H����+��E1��!���DH�@H�
=�8D��E��������fDI�U�f��@��f��A��@���R���f��z�H����B�>���A�E����.���DI�EH�E����A��I��H�¹�H���1��4+���x����H�t$hH�T$pH��H)��C��H�t$`E1�D���H���N��H���V���fDH�IH�e�8�����`����5��DH�IH�=E�8�����O����;���D������H�T$pH�t$h�
E1�H����)�������P��H�
�A��6H�5�EH�=�W���H�:�8� �H�LFH�81��ϼ��ʺ�f.�USH��H��8dH�%(H�D$(1���X�t[E����A��1�����H��H��H������H��tH�PH�p�H����(��H�L$(dH3%(H����H��8[]�D�D$�t$��{��D�D$�t$1��o�@H��P1�H��E�HA�bE��)D$H�D$ �6��H��H��H���8��H��tH�PH�p�H����j(��H��H�T$ H�t$H���U���H���O��������AWI��AVAUATUSH�����$�t$���L$8�D$��$�T$D�D$D�L$f�D$dH�%(H��$�1��g��x��H����H��A�M��`M��I��h�H��A�s�P1�H�l$`�D$\�H�H�D$pfD��SL�CH�sH�D$H�,$A�I��A��X��u���l=����S=���=�����{��H�T$\I��XL��蘵��L���@����|$\��I�wH�HH�PH��tH9�HG�I�OI�OH��tH9�HB�I�WH��I�詎���|$A��X�����y��L���y��A��X��L���y��I��P��I��HI����j&����D��7�wA��@L��M����H�SH�CA�oH9���
H��$�dH3%(H����H���[]A\A]A^A_��=��M=���=�u��|$�X	H�T$\I��XL���<���L������x��I����H0A��@������'��H��H����A��9f�I��H�Hf�3I��PI���A��KH�SH�CH��tL��趾��@����H�SH�CI�OH��tH9�HG�I�WI�WH��tH9�HB�I�GI��������0��I��9����m�o����|$u�|$uAƆ�H�T$\I��XL���%����I������L���w��I��P�Ao�@)�$�H��$�H��$�H��H��$�H)�A���)�$���I���PH��$����e�B�<!�Q<?�IH��$�L���A�H��$��L��H��$����"���A��X��}��
�l����
��y�p=��H�
$�Hc�H�>��fD�����������&���H�T$\I��XL�����L���qv��A��X7A��@M��HI��P�I��0�D$ DŽ$�H��$�H��$�I����H0�C���v�����@���H��H����A���$�D�hE�.�%	L��$�H��$�I��@L��L�L$(H)��w����$�L�L$(��H��$�H��$�f��|$ H�K Cf�;D�kL�cL�K�CH�S(L�c0H�k8��	I���I������
L��L���"��H��L��莻���|$A��X�L������3L��M��H�SH�C���L����t��A��@��0������1��u$I��PI��H�I����!��DA��X'H�T$\��I��@L������Ao�@I��PL��H�4$)L$`H�D$p��H�T$pH�t$hL������o���A��X'��	H�$�|$\L��H�T$H�pvR�U����������ʃ�f��
�ƒ�[f��'wH�`�H��H����	ʄ��&f�H���fD����t?��ʃ�f��
�ƒ�[f��'wH�`�H��H����	ʄ���f�HDH��L������R���=��5=������I���H�o�z���|$I����hH��$�H��$�L��������A
H��L���=���AƆ�A��X���f���9�w
��u�>���I��PI��H��I����������f.�H�T$\I��XL������L���r��A��X7M��HI��P�0
I��0�D$ DŽ$�H��$�H��$�I����H0�@�����H��H����
A���$�D�hE�.��L��$�H��$�I��@L��L�L$(H)���s����$�L�L$(�H��$�H��$�f�A���|$ H�K CfD�D�kL�cL�K�CH�S(L�c0H�k8��I�H��I������:���fDH�T$\I��XL���\$\���L���Hq��I��P�Ao�@H��$�A��X)�$���U�8	��7��	I��0E1�DŽ$�H��$�H��$�I����H0�@��`��H��H����A���$�L��$��hA�.�-L��$�H��$�L�D$ I��@L��H)��nr����$�L�D$ �<H��$�H��$�H��$�H��$�f�A�[H�{ CfD��kL�CL�k�CH�s(H�K0H�S8E���'I�����I���L�ƹ�L������H��L���O������f.�L����o���A���I�GH��tI9�LG�I�GM�gH��tI9�LB�M�OI�_H�q����I��hI��`�I����Y�����@I��PI��H��I����1�����@L���0o��I��PH��$�L���Ao�@H��$�)�$��0��H��$��L��H��$��D$ �������f.�L��AƆ�M��H�SH�C�m���DH�@H�
�8�,���tnfDH��$�H��$�L���`���I�ń���I���H�_���L��L��I���胴��A����u���AƆ������H��$�H��$�M��@E1�L��H)��o��A����D$ �-	�D$�|$D�HE���q�t$A�f1�1�L��A���W���L��H��H���Y���H��tH�PH�p�I������A�nA������8��
��I��H����	A�L��$�L��L�M�HL��L��L�D$ A�H��H�$��L$0L�L$(�"o��f�L$0L�D$ AEL�L$(A�pA�EH��$�AEI�E H��$�fE�]A�MM�EM�MI�E(I�m0�]���f.�H�@H�
�8D�$�E��� �������I��1�1�1�����f�I��XL����������@�|$8t�|$\�QI��PI��H��I����G��H�SH�C��f.�I��1�1�1��i���f�I���H�o�P��H��$�H��$�L��I����������H��L������AƆ������f�K�L���fDH��$�I���������f��0���a�fDf�K�H���fDH��L��1�胁���C�fDL��$�L��1�1�1�L�������I�GH��tI9�LG�I�GM�GH��tI9�LB�M�oI�������@I�GH��tI9�LG�I�GM�gH��tI9�LB�M�OI�������@f�K����fDH��$�A�й�1�I���I��A)��t�����I��`�I���M��hM��@H�D$ �m��L���uj��H�t$hH�T$pL��H)��Pl��A����D$H�D$L��D$�|$D�HE���n�t$A�f1�1�L��A��褵��L��H��H��覼��H��tH�PH�p�I�������A�n�H��e��H���H�D$@A�L��L�D$hH�T$pD�PL�ME�L)�L��D�T$<L�L$0L�D$(�k��H�L$@f�D�T$<L�D$(L�L$0�qA�AH�D$hH�A H�D$pf�H�A(H�D$ D�QL�AL�IH�A0L�i8H�i@����I�GH��tI9�LG�I�GM�GH��tI9�LB�M�OI�0H����}��A����`I���H�_���A���I���������DI��PI��H�
I��������@I��PI��H�I����i�����@I��PI��H�I����A����@L���@h��I��PH��$�L���Ao�@H��$�)�$��@��H��$��L��H��$��D$ �������f.�L����g������I��@H��$�L���8��H��L�@L�h����A�E�H���f��
��f��'wH�`�H���	„���fA�M������у�f��
�J�@��f��'wH�`�H���	�@���zf�H�)���f�L���g��I��PH��$�L���Ao�@H��$�)�$����H��$��L��H��$�A���������t$1�1�L��A���:���L��H��H���<���H�������H�PH�p�I����j�����D�t$1�1�L��A�����L��H��H�����H�������H�PH�p�I���������I��@L�����H�{HH���H�PH�p��I�������H��H���T���H�SH�C����у�f��
�J�@��f��'wH�`�H���	�@����f�H��f�I�^���I����t$LH�x苻��9D$H�����H�T$pH�t$hI���1���A��I��A)�����W���I����t$LH�x�B����D$H���I��PI��H��I�������6���H�KH�PH�@H��tH9�HG�H�KH�SH��tH9�HB�H�CH�kH��I����t$ H�x�Ⱥ��A�����I����t$ H�x謺��A9��
���H��$�H��$�I���1���A��I��A)��'������������H��8H�
.�H�81�苤�膢��@��H��$�H��$�1�1����H�
�"��H�5�,H�=�?�G��H�
�"��	H�5�,H�=U?�(���8�v���1�1��:�1�1�����Z����
����H�K���AWAVAUATUH��SH��H��(��X�tpA����@��E�����1�AQ��"E��H��j��E1���Y_H��H��H������}I��t��X��y��=�tH��(L��[]A\A]A^A_Ð1��@H���c��H��@H�D$H���H�D$��X�������0����9�qH�|$H��h�H��`���H���b��H�t$H�����H��P�H��H��HA��衦��� �����H��H�����L��PH��@L��H�HL���L)�L���L$�d���L$f�
EEf�U�ML�uL�}�EE����I�|$ H���v��I�|$t{H�E��XI�D$�����H����a��������ukH�|$H��h�H��`���H���a������H���a����X�S���Df�M�v���fDH�EI�D$�w���f.��"�7H�������f�H�|$H��h�
H��`���H���a���j���fDH�|$H��h�H��`��
��H����`���:���H�o�8� �H��*H�81������ff.�@AWAVAUATUSH��H��HdH�%(H�D$81���X��	=��k��H�
R�I��Hc�H�>��DH��h�o�XH�D$0)L$ �2`����X��	=���H�c�Hc�H�>��D��A�й1�D��4E���z���H���f��V��f=�uH�E@H��t
�x�:�[��X�����IH���_��H��P�o�@H�D$0��X)l$ ��	=��JH��Hc�H�>��f��[_��H��P�o�@H�D$0��X)T$ ��7�c�E���	��0����
��H�t$(H�T$0��H���������H�l$0L�d$(�n��H���
�;f�gH�h�Wf���PL�`���o�XH��h)d$ H�D$0�^��H�t$ H������MH��L��H�����H��H�t$8dH34%(H���y	H��H[]A\A]A^A_�D���Ƈ�L��`L��h�^����X��������{����O��m��9@��H��hH��`��I��H���1����H���]����H��PL��HH�L$L�$�'��L�$H�L$H��H�����f�A�gH�J����fD�
���BL�B��L��H�����XyH���L���H����H��HH��PL�eL�e@H�EL�uHH�UPH�EXD�������L��`L��h��\����X��D�E��L��H��E�������XyI�������H����A�L��HL��Pf���uf��4���x�L�$����L�$H��H�����H��A�L���P1��H��H�} fD�]�UL�eL�}L�eXL�m`L�EhL�}p��p�����D��[��H��HH��PH��@H)���]��L�����A��L��肪���Ń���_H��HD��L��H��H�L$H�D$H��PL�AH�D$蘼����H��HH�t$ D��H��H�D$ H��PH�D$(�^��H����fD�o�XH��h)\$ H�D$0�2[��H�ߺ;����H�L$01�H��H�T$(L��@��������H��`H��hH���������L��hL��`�W��H��H�����f�gL�eE��f�U��EL�m�-���D�MA��1�1�E�ɾ4H������H�T$ H��1�H�����H�����H�t$(H�T$0��H����%����H�l$0L�d$(���H���B�;f�A�gH�h�WfD���PL�`�z�����z����{����9�����H����Y��H��@H���F�fDH�T$0H�t$(H��H�����H���-���I�~H����M�fL��M�~M�fHM�nPM�FXM�~`���E��A��1�1Ҿ4H���ۤ��H��H�T$ H��H���X��H������H��H�T$ 1�H���>��H�����fDH�EH�7����I�~X�����M�fL��M�~M�fXM�n`M�FhM�~p�o���DH�߃���X��H��@H�����S��H���R���L��H�߃��
���H���6������1�A�����4H��A�����H������DH��PH��HE1�D��I�}苎��H�L$D��L��H��HL�AH��H�D$H��PH�D$����1�����DH���W��H��@H������4���@D���ƃ�H��L��`L��h�W��D�M1ɾH��E��A����)���H��H��I���+���H��tH�PH�p�H����]����XyD����v���}H������P�����H��H�����f�H�L$(�uEH��PH��H��f�}��EH�D$0H�MH�UL�uH�M H�E(L�m0L�e8H�u@H�UH�j���H����V��H�����H������H��PH��H��H���A��I��A)��O��H��HH��PH��@H)��bX��A�1�H��H��@���i����@H���HV��H��@H���)�����@H���(V��H��PH��HH������]���DH���V��H��@H������<���@H����U���x��a��H��H����H��P�H��L��H�P1��H���f�]�UL�eH�uL�eXL�m`L�EhH�up����f.�H���hU���`�����H��H������H��A�BH��PL��H�P1��H��fD�U�UL�eH�uL�e@L�uHL�EPH�uX���H���T���P���H����T�����H����T���}����a���H�e�8H���H�81������x�׹P�й`��DAWI��AVI��AUATE��UH�-{�SH��xH�4$H�\$0�L$L�kdH�%(H�D$h1�A��XM��t==�����*�AH�L$hdH3%(L���H��x[]A\A]A^A_��Ao�@I��P��	)L$0H�T$@=���HcD�H�>��D�Ao�XI��hL��)T$PH�D$`�S��E�D$H�4$1�E����L����A��Xy�����}L��H�D$����H�D$L��H�T$`H�t$XM��PM��HH�����M����L��H�KM��H��L������I�������I��`I��hI����L$�����I��hH�D$I��`H�D$�c��H����A�>f�A�g�WH�|$fD�A�H�xH�|$�PH�xM���V���I���9���f.�A�L$�T$H�4$L�������I������L���XR��I��P�Ao�@H�D$@A��X)\$0��	=�����H�5��Hc�H�>���A�L$H�4$��L�����W����f�I��@L�d$PL��H�D$H�D$0H�D$H�D$XH�D$L�d$ L���Q����L���7M��HI��P���I��HH�|$I��PH)��pS��M�����A��L���,��������H�L$ H�4$L���D$,I��HL�D$H�T$PI��PH�T$XD���>����D$,��I��HH�t$D��L��H�D$0I��PH�D$8����8�I���~��H����A�H�uf�A�A��X*�QI�OA�fD��PH�pH�HH�hL�x L�h(H�X0��I���a���f�L��H�D$�P��H�D$���f�I��PI��HE1�D��I�|$袆��H�L$ D��L��I��HL�D$H�4$H�D$PI��PH�D$X�1���1���H���O�������H���8H���H�81��;���6���8��ff.�@AWA��AVA��AUE��ATE��UH��SH��H��8dH�%(H�D$(1���X=��Ov]=�t~=�u����A�M��H��H��H���%A��I���H�L$(dH3%(L����H��8[]A\A]A^A_�f���mu+�&O��H��@H���
��A�M���fD���@E�ED��1�E��H��H���X���E1�I��A�f��V�tf=�uI�G@H��t
�x�:��A��t
��X�E���G����x�� ��H��H���Q��H�׍p1��3M�OM�G�H��L�z8I��f��rL�JL�B��f�E�@D��E��D��D�$��D�$�f��VtLf���uH�P@H��t
�z�:��D��H�������A�ML��H��H�����	I���{���H�PH�f.��M��H��H������A�I�����f�L�l$f�L��D�$L��)D$E1�H�D$ �Gb����XD�$�=E��tL�d$ H�l$M�l�fA�}����x�D�$���D�$H��I�����H�t$ �L��L�D$�PH��L�XJ�D�L�P1��H��A�WfA�M�_M�WM���TH�6H���H1�E1�M�g@�7DL��D�$�|a��D�$H��H;l$�H�D$ H�4�H���E��u��f=�A��f��F��A���I�w8�I�GH����I�WI�w��H����'�������f�D�����I���A��E��H��D�$�
L����XD�$��?���J���7�mH�D�H��H�Ѓ����RH��@H��D�$A��&��L��H���{`��D�$�<����I� D�$�c`��D�$���f�E��tE��tI�WI�w��H����M���H�|$ 胢�����h�����I��H���MM�4$fA�>��H����M�F�
L��I�u�P1��H��4�fA�?A�WM�GI�wM�w M�o@H��t?M�o(���L�d$ I�4�L��H���_��H�D$H�P�H9�r�H���>���I�WI�w��H����r���� ��������E���1�H��H��D�$����D�$I��L��L��D�$�_����XD�$��������L����H��H�Ѓ��@�����I�n���H��H�����3A�gf�L���
A�4fD��F��H�jM�F�B1��H�H�j�3fE�A�wM�GI�oM�w I�W@�A���H��D�$�I��H��H������E��D�$I��uA�������H��PH��H��H���D�L$H�$�2���D�L$L�$����xH�Ǔ8H���H�81��a���\�����H�
�	��H�5�H�=%�6���h�ff.�@AWAVI��AUATI��UH��S��H��8dH�%(H�D$(1���X���h������{t
H���%f�L���xH��I��PM��HH�$A��X��y����}�%D�CL���L��E����`���A��XyI�������}L���}��M��HM��PM����A�$f��4�Wf��B��f�����x�L�D$�O��L�D$H��H���AA��H��H�u�P1��H��H�sH�{ f�H�$L��A��SL�{H�kL�kXH�C`L�ChL�{p�-\��H�L$(dH3%(H����H��8[]A\A]A^A_��I�|$�Q���I�|$X�E���H�EL��M�|$I�l$I�D$H�$M�l$XI�D$`M�D$hM�|$p��I�|$����I�|$@�����H�EL��M�|$I�l$I�D$H�$M�l$@I�D$HM�D$PM�|$X�8���DI�|$�����I�|$H�����H�EL��M�|$I�l$I�D$H�$M�l$HI�D$PM�D$XM�|$`���DL���8F������L�l$L��@I�EH�$L���F��I��P�;L���Ao�@�H�D$ )D$�X��H�$H��I�UM��L����H��A��X��t����+���f.�L���E��I��PA��XyM��HH�$��A��XtVD�CL���L��E������A��XyI�������L�����M��HM��P�,���L��� E��M��HM��P�x�L�D$���L�D$H��H����A��H��H�u�P1��H�H�$�A�f��SH�sL�{H�kL�kXH�C`L�ChL�{p�F���L���D��A��X�6���L���D�����L���wD���"�����H��8�x�H�H�81�蛄�薂�fDAWf�AVA��AUI��ATUH��S�˹H���H�4$L�d$PL��dH�%(H��$�1�)D$H�D$ �H��f��m��f=��f��	��1�f��V�����H�uH�UI�����I��0��L�uL�}�D$0H�D$8H�D$@���H���zA�Mf�gL�pf�0�QH��L�xA�U�PH�T$0H��L��1����H�|$H���W����L�|$0I�D���A��X�d�`����H��H����H�D$H����H�T$ H�
L�AH���L�UA�E�H�ߍp1��H�A�u�BL�k H�k81�sH�2f�L�CL�SH��u�nH�4�H��tbL��H���;W��H�T$ H;l$r��HDH���bA�ML�EH��H�u�Q��H��BL�Cf�H�sH�k8A�U�SH�T$ H���=��L������H��H��$�dH3%(��H���[]A\A]A^A_�f�H�B@H��t
�x�:�������H�D�L�P���f�L���A��A��X�J���/��������������\���mL������I��@L�����I��L��L��L��L�T$�ݡ��A��XL�T$�J���/�}��������H��H�Ѓ�����H�4$L��L��L�T$���L�T$H��I��0L��L���D$0H�T$8H�T$@L���Q�I��H��t#H�PH�p��I���H�D$�{�L�D$H�|$L���IU���b���@����H��H�Ѓ�������H���K���I��hI��`��I���� ��'���L��L���͠��A��X�J���/����������H��H�Ѓ�����H�4$H��L�����H��I��0�D$0H�T$8H�T$@H�T$0�s���@L��H��H�Ѓ��?����L��H��H�Ѓ�����H�D�H��H�Ѓ��w����H�4$��A��1�L��L�T$�u�L�T$H���`����E�FH�4$��1�E��L���E�H���6���D�ٺ1�L��藖��I���f��V��f=�uI�B@H��t
�x�:�����I�RI�r��I���L�T$��L�T$�f���fDH�4$L�����H��t?H�PH�p��I���H�D$�a�L�D$H�|$L���/S���H���f.�H���6���I�RI�r��I���L�T$��L�T$���諴��`H���8H���H�81��I~��D|����H�
��VH�5�H�=�
���ff.�AWI��AVAUATI��L��U1�SH��xD��$�H�t$H�t$0H�L$ D�L$D�t$,dH�%(H�D$h1�H��0�D$0H�D$8H�D$@���L�$$H��A��X��D��*��L���/=��A��@��I��PI��HI�D$HI�T$@E�NE��A��1�1Ҿ0L���z���1�1�L��H�����I�D$PH�@I�D$A��X=�t	��y�VL���<��A��X��_��fD�ƒ��It	��M�5I�T$H���L�e`H�UL����Y��H�$H��tA���tH�t$E1�1�H��L���9���L���1<���h�費�I��H����A��
L��M��HI��PA���P1��H�A��XA�fE�$A�T$M�D$I�t$M�D$I�t$ ��_������x�����y���=�������=�w[H�=P�Hc�H�>��f.�H�RH�
��8D��E��������_L��辿��A��X���f�H�RH�5u�8D��E��t=�u�E�nI�D$(E��H�D$D�l$(D�D$(1ҹ�L���腾��H�|$I��H���O��I�EI�D$A��X�P���/wH��H�����T���@��*����>���L���:���@I�D$@I�D$H�p���f�H�{��H�SL�c0�����D$A�VA�gL��H�5z��҃��4��L���H��tH�xI�D$Xt	H�@I�D$A��XA�o��yt=��r���L����9��A��X�^���I�L$H�K�m���f�L�$$H��t$H�S0H�uH��tf.�H�rH�R`H��u�It~��M����K�>M����A���tH�t$E1�1�L��L���d���A��X��Kt	����I��hH�C���~H�CHH�CP��fDM��tA���tH�t$E1�1�L��L�����I��x��L���ƛ��H�D$I��hL���Ao�XH�D$`)L$P�8��A��X��y��=�����K����1�L�d$PM��XL��I�T$I�t$���H�PH�C8H�SH����A��X��MtT��K����I��PH�CH�CHH�CPH�D$ H�CH��H�\$hdH3%(��H��x[]A\A]A^A_�@M��tA���tH�t$E1�1�L��L�����L��I��`M��h��7��A��X=��t��y�kE1���KtJ�D$�T$,A�gL���H�H������4���裇��A�oI��A��X=�t��yuL���a7���@����H����A�?I��hf�H�hI��`�W�2H�HH�H8A�f�8�PH�hL�h L�p(H�p0H�KA��XH�C@��K�`�������L����6��A��X�4���@I��hH�CI��`H�CPH�SH�n���f�L��D�l$(�6��A��@tYI��PI��HI�D$HI�T$@E���h���f�I��`H��H�D$�j���L���@6��A��X���@I�D$@I�D$H�@�D$,H�
,�A�gL���P�D$�҃��4�����A�oH��A��X��yt=��<���L��H�$��5��H�$�'���DL���5��A��X����@H�pI�����{��#���行���\���@�hH��8H�(��H�81��u��s��ܫ��@��DAUA��ATUSH��H��H�o�@dH�%(H�D$81�H��P��Xy)$H�D$�{�c1�H��E1��e����X=��j��y�!�<$�g��Kt%�ƒ��It	��Y����Y����M��1�%�KH�����H���H���D�H2H�Є���H�H��u�H�T$ H��H�����H��L��H��H��@��H���I���ǎ���k�`�襳�H��H������H��L�L$L��PL��H�p1��H���3f�H�D$ �rH�BH�D$(L�JH�B H�D$0L�BH�B(H�D$L�b0H�BHH��H�j8L�J@L�RPL�BXH�|$8dH3<%(�H��H[]A\A]�D1��
���f�1�u�$�H��跷�����f�A�U�H�����L���H�����A���c�H��E��D���%����kH�ŋ�X��Yt	��M�P���H��t8f�}�t0H�
���f<H�5��H�=��v��A��1�E��H��I��1�A�AUH�L$1�H�����ZYH�����@�{2���{���fDH���h2���o�@H��P��X�)L$ H�D$0��E�M1�H�T$ �E��A�H���}����XyI����ƃ��#��H���d�����@�P���t��utH��PH��HI�D$I�D$P��XI�T$H��y���DH���1����X����H��H�T$ 1����ƃ�H��I���|1���H���r1���`���踈�����H��{8�`�H��H�81��q��o�ff.��AWE1�AVAUATE1�UH��SH����L$H�\$PH�L$`�T$fD�D$dH�%(H��$�1��D$��X�D$H�L$H��H��I�΃����|$��=���wT��m��=���H���0��H��PL��HH�D$ ��X=���H�
��Hc�H�>��=���H���E0��H��P�o�@H�D$`��X)L$P���ƒ�}��	�=����u	����L��H��蘈��H�T$I�v1�H���ծ��I��E����H�}H���DL���4�����=���E���<H�����H�|$P�L��I��1��H��D$H��L���H���q���H�}A��H����L���ɍ��A��H�UL���A����f	B����fA�?gt>D���E��u1�|$��Xt	��y���@u	E���J���*H��$�dH3%(��	H���[]A\A]A^A_�f��|$�D�D$A���H��A��A�V�D�HE���z��H��H��I������H��tH�PH�p�H����G��A�Ef��V��f=�uI�E@H��t
�x�:����X*��H�}H����L��M���z���1�H�Ef	P����H��hH��`�H���������X����fDH���-��E������XA�9D$�������@H���-����X=��?H�
<�Hc�H�>��fDH��hH��`�H����9�����@H���8-��E������@*�rH��0�D$0H�D$8H�D$@H���a���H�|$PL��L��I�ǹ1��H�H���Qt���D$1�1ҾH��A��D�`A��A���D$ �Fx��H��H��I���H��H��tH�PH�p�H����z��H�T$0L��L��H�����L��H���p����X��E1�L���4���H�}H���wL��诊���E���)���A�������H�@H�5Uz8D��E���xH���H��t/1����x2�>�H�H��t�@0u�x2t�H�T$ H����L������0��5��I��H��������H�T$ E1��DH�@H�5�y8D��E���`����D$A�V1�1ҾH��D�HE����v��H��H��H�D$(��}��L�D$(H��tH�PH�p�H������L�D$(�0�L�D$(航�L�D$(H��I��������M���E���I�Pf�A��|$I�WAA�GH�D$ fE�M�oM�GM�o I�G(��L�}(��X� �D$�G���fDI�EH�1�����D$1�1ҾH��A�`D�HE����u��H��H��I����|��H��tH�PH�p�H������E����H�T$I�vL��H�����I������H��A���)����X�����H�}H����L���+����!���fD�o�@H��P)T$0H�D$@���f�H��PH��H�H����a���=���@H��hH��`�H����9�����@H�@H�5uw8�<����f.�H���H��u�f��x2u3H�H��t�@0u�x2t�H��PH��H�H��������|$u$E��tH��PH��H�H��������@��[�����I��H���6�H�}f�8H��HH��PA��fA�7�A�GI�OI�WH����L��誆��H�Ef�H�D$�E0�D$����H��P1�1Ҿ�o�@A�]H��H�D$`�D$)\$PD�HE���ks��f�8zI���L��L��1�H������I��H���[������DH�@H�5�u8D��E���p����~��H��H��0詛��H��H�E���DH��H��0艛��H��H�E���DI�UH�t$X�H����������f�H��PH��H�H��������#���@H��PH��H��H�����������@H��0H����L��H�EH���"����n���D�����H�T$ H����L���w������f�H���x&����X��=�wH�5��Hc�H�>��H�IH�5�t8����t=�u7��L$ L��L��H���&���A������H�IH�5St8�����x�����m�������D�0H��p8H����H�81��&f��!d��H��H��0��H��H�E��H�P0H�p(�H����������H��H��0踙��H��H�E�:���@H��0H��M��薙��L��H�EH���ǃ��1��H����ۛ���N���H�
����H�5�H�=�rh�f���X9�tv��tYL�@H�Fs8B������vJSH���H��I��H��XA��A�ҋ8�s����u,H��A��E��D��L��[��D����[�fD�ff.�@AVE��AUI��ATA��US��XH����{��̈́�u7E��t��X�����Cu	��G�4[��]A\A]A^�f���=�wH�5�Hc�H�>��fDH�IH�Er8����ul��uE���@1��@�CE�FA�ԹE��L��H�ߍD�C�����@���k�F���DH�IH��q8�����L��_�������=�����x���1�������c#��H��PH��H��X}I�UI�E��E�FH���cA��E���}L��������X��}���]��H��h�H��`I��H���1����H��Pǃ@H��HH���k�I�EI�U �R���f�H���"��A�vH�����Y�I�uI�UH��H��I���#|���M���1���I�}(tNI�t$I�T$�H����C��I�u(H��tI�}H����言��M�e(����f.�A�}0u�M�e(����H���"��A�vH������I���n������X����)����)��H��P�VH��HI��H���1��u�����H�߽�!��H��PH��HI�E I�U�!����H���x!��H��HH��P���H��0H��膕��I�u(H��I�E�	����ax���AU��A��1�AT��UA��SH��A��H��(dH�<%(H�|$1���H���ƒ���D�1��l��H��H��I���s��H��tH�PH�p�H��������XZt$H�\$dH3%(L����H��([]A\A]�f��-H����x���o�XH��hH��)$H�D$�o ���5�r8A��1�A��1�H����k��H���H��L�o�qw�H��L��I��L���H�JH��H���q���I���U���褖�@AWL�=ۿAVAUI��ATA��USH��H��8dH�%(H�D$(1�f�>�A��蔓��L��1ɺH��H��L�l$���H��H��H���d����XM�]��t-H�L$(dH3%(H����H��8[]A\A]A^A_��H��L�$�d����XL�$L��m8=��X��{����=�wH�5�Hc�H�>��DH�IA����utE�L$A�Y1�1�E�ɾ0H��L�$�j��1ɺH��H�����H��H��H����c����XL�$�����H�IH��l8�������������H��@H������H��H��H���c�����fDH����(L�\$�Rv��E�L$1�1�E��A�Y�0H����i��1ɺH��H������H��H��H���"c��H���H�GH�$�>u�H�$L�\$H�����X�Q���H��L�$����E��L�$L�l8��H��P�o�@H�D$ ��X)D$=�wBIc�L�>��1�L��I�uH��L�$�{���H��H��A�H���wb����XL�$����H�@1�A�4���u�E�L$A�b1�1�E�ɾ0H��L�$��h����H��H������L�$H���w���H�@A�<����e���� t��H��PH��H��H�������L�k8L�$�����\��ff.��U��SH��H�����H�ŋ�X��yt1��'t��}tH�UH�u�H����n��H��H��[]�@H���h����X�AWA��AVAUA��ATE��USH��H��(dH�%(H�D$1�����D��X��u_��E��ZD��蜟��H��A���tdH��H���p����X��Z�vH�L$dH3%(H����H��([]A\A]A^A_�1҃�E��Z��D���8���H��A���uH�UH�u�H����s��H��H���p����X�~���DE��Z�D�����H��I��H����o��fA�>�t��XL�����<���H��0H��H���$H�D$H�D$�8���H�xH��uH�x0�+L�}L��L���/��I�FH�EA�f����f��A���uFf��zt@A�Ft9f�f=�uf�M��X��A�����������f�f�e���f�H����-�Or���o�XH��hH��)$H�D$�?��1�f�}tV�5�l8E��1�H��A���e��H���I��L�o�:q�H��H��M��L���H�JH��H���:���H�����f�H�}Xt�1�H�}H���DI�FH�E����H�����1�E��D��H���+���H�}I��uH�}0tfL��L���O.��I�FH�EA�f����f��A���uf��ztA�Fu	@f�e�f=�tf��g�����L��H����m�����f�M��H�@H�E�襏�DAWAVAUA��ATUSH����o�XH��hdH�%(H��$�1�f~�)D$0��H�L$@=��7&A��H��H��H��Hc�E��E��H�>��fD�2H���L�l$PA���np��E��f��H��L���L����o�XH��h)T$PH�D$`)\$pH��$��6��1�1�E��A�
�H���c�����I���(��Xy�b)��H���]���H��P1�1��o�@E��H��A�H��$�)�$��Dc��I��H���H�GH�$��n�H�$L��H��H����z��L���O-��H�T$xM��H��H��$�H��H��ATL��$����AZA[I���H��$�dH34%(L����/H���[]A\A]A^A_�@���
f��e��"H�ջ��Hc�H�>��@����H��0H�������H��H��H��I���v]��E�L$1�D��H��E��A�9��5b��H��H��I���7i��H��tH�PH�p�H����i��f�}�X�@�����@���I��H����11�L��H���a���H���I�v�m�����I�NI�T$fA�?���I�OI�WA�GH�D$8fA�oI�GH�D$@I�G(I�G I�G0I�G8I�G@M�gHM�wP����)�$�H��$����E�L$1�D��H��E��A�8��a��H��H��I���h��H��tH�PH�p�H����N��H��$�M��H��H��H��$�谭��I�����H����-�m��H�������Xy��%E�L$D��A��1�E�ɺH���y`��H���I��L�o�l�H�L$@M��H��L���H�T$8H������I���g�������E�L$1�D�@WH��E��A�]��1��`��H��H��I���
g��H��tH�PH�p�H����?����8���I��H���4.�f�A�rH�MI�T$A��fE��I�OI�WA�GH�D$8I�oI�G(H�D$@M�g I�G0��������H��0H������H��H��H��I���fZ��E�L$1�D��H��E��A�:��%_��H��H��I���'f��H��tH�PH�p�H����Y���f�}�X�@�����@���I��H����.1�L��H���Q���H���I�v�j�����I�NI�T$fA�7�����������X=���H�
O�Hc�H�>��f�����H��P�o�@H�D$`��X)d$P��=���
H���Hc�H�>��D���H��Pf�H��H��X)�$�)�$�HDŽ$�H��$�H��$���"E�D$1�H���cL��$�E���L������k�hH�߾�m���H��PH��HH��$���XH��$�A��������"�Cu	��G�E#L��H��H���)���I���Y�������
f��e��H�����Hc�H�>��@�%���=��?!H���^��E�L$1�1�A�]E��D��H����\��H�T$0A��H��H��H���g���I�������D���Ƈ�L��$�Ƈ�L��`�GL��hD�$����E�D$L��H��f�E�����)�$�HDŽ$�����D�$L��I��D������H��H���$c��H��tH�PH�p�H����V����8����I��H���K*�f�eI�T$AH�M��fA�7�A�GI�OI�WI�oM�g M�w(M�o0���f����
f=��fH����Hc�H�>��@����A���o�@H��P��Xf�E��HDŽ$�)L$PL��$�E��H�D$`)�$�)�$�)�$���{���Ef��r�Bf=��f���.�G�=���H�Y�Hc�H�>����#��E�L$1�D�@?H��E��A�]��1��Z��H��H��I���a��H��tH�PH�p�H���迻���8��P��I��H����(�f�A�H�MI�T$A��fE���{���D���
f��e�cH�
���Hc�H�>��@�[���E��@L��HL��Pf��r��f=���f����E�L$A�]1�1�E��D��H���Y��H�T$0E1�����f.�D���Ƈ�L��$�Ƈ�L��`�GL��hD�$�
��E�D$L��H��f�E�����)�$�HDŽ$�讽��D�$L��I��D����g
��H��H���_��H��tH�PH�p�H����.����8�迌�I��H���#'�f�dI�T$H�MA��fA�?�����D)�$�H��$�����E�L$1�D��H��E��A�4��RX��H��H��I���T_��H��tH�PH�p�H���膹��H��$�M��H��H��H��$��أ��I���(����k��E�L$1�1�E��A�]D��H����W��H�T$0E1�H��H��H���w���I���Ef��T��f��}����ML��H�uHH��f������W��I����f.�H������H��P�o�@H��$�)t$pA��E��H��L��$�L����H�L$pM��H��H�T$PH��蕺��I��A���@�H��$��1�H��$��"��X��L��D��H����I�����1�H�T$0H��H���N���I�����fDH�@H�UY81�D��E��u�E�L$1�A�]1�E��D��H���|V��H����H�@H�Y8D��E��t���a���HDŽ$�f�E�D$L��$�)�$�E��)�$�)�$�1ɺL��H�����H�T$PL��H��H���2���I����f.�H���H
����X��{��E������=��xH�5P�Hc�H�>��f�H��A��L��$��	��E��f�L��A��E��H���o�@H��P)�$�)�$�)|$p)�$�H��$�HDŽ$��
�H�L$pM��H��H�T$PH��腸��I��A���0��	�����H��h�gH��`I��H���1�����H��P�D$pH�D$xH��$��Z����FtH�V@H�v81��AM���H���	��f�}iD��H�߸E�D$A��DD�E��D����f�}iI��u
A���;H�T$0L��H��H�����I���h����E�D$D��D��A��E��H���0�I���Ef=�����f��l�df=��:f��3�H�UH�uH�߹�vL��H��L�L$0L��L�E1҉�莜��H��H��I��� �������{��H��H��H��I���M��H�����E�D$D��H��A��E�����H�T$0L��H��H�����I���}�D�;�H������H�L$`H��H��H�T$XL��@�B���I���B�H��I�����H�T$@H�t$8H����p�T�����H�UH�v�1�H���A��I��A)����H���3��E�L$D��D��A��E��A�XH������|$0I����!�H�腆�I��H����!�L�EH��H��M�uD�`L�$D�#�Ic��f�A�;H�MAH�UfE�AGL�$M�wH��H��I�O M�GI�W(A�GH�D$8E�gI�G0H�D$@M�o@I�G8�m��� �H�UH�v�1�H���A��I��A)�����H���<��E�L$D��D��A��E��A�]H������P�I��虅�I��H���_!�L�]H��H��M�VD�`L�\$(D�#L�T$ �Wb��H�L$@L�EH��@L�l$8�D$H�Q�H�EL�D$L��L)�H�L$H�$���f�A�<L�\$(AL�T$ D�L$H�4$AGH�L$fE�L�D$E�gM�_M�WE�OM�G I�w(M�o0AG@I�O8H��H��M�w@A�GH�1�����H�UH�v�1�H���A��I��A)��Ȳ��H�����E�L$D��D��A��E��A�^H�����|$0�I����H��O��I��H���V�L�EH��H��M�uD�`L�$D�#�a��f�A�=H�MAH�UAGfE������j��E�L$D��D��A��E��A�]H���	��P�I���ǃ�I��H�����H�L$@H��@L�l$8L�UD�`M�ND�EH�Q�D�#L)�L��L�T$L�L$D�D$H�$����L�T$L�L$f�D�D$�MA�omAGfA�E�gM�WM�OE�GAG@Ao M�o0H�$�J������H�T$@H�t$8I��H������_����"��e��E�L$D��D��A��E��A�XH�����|$0I����H�跂�I��H�����H�uf�A�LI�L$�o}A��AG��UfE�A�GI�wI�OA�WA H�D$8H��H��I�G0H�D$@M�g@I�G8����i����E�L$D��D��A��E��A�XH���K��|$0I�����H���I��H����I�Mf�A�!H�uA$�ou��AD$��UfE�4$A�D$I�t$I�L$A�T$At$ H�D$8I�D$0H�D$@M�l$@I�D$8H��H������L��H���(���I��������E�L$D��D��A��E��A�XH���z��|$0I���u�8��-��H�����3f�A�$I�L$�VfD�8H�u�H�pH��H��H�H�PH�T$8H�hH�P H�T$@L�`0H�P(胸��I������6��E�L$D��D��A��E��A�XH�������|$0I�����H�舀�I��H�����f�I�L$AH�u��fA�?��UAGI�wI�O�ouA�GA�WAw ����H�VH�FH)�H���FH�����E�L$D��D��E��A�XA��H���&��D�MD�EH�T$0H��H��H���+���H��H��I���=������3��H�T$@H�t$8I��H�����������H�5M�te��H�߉$���E�L$D��D��A��E��A�XH�����D�$E1�H��H�T$0H��H��螥��H���H��I���LP��H��H������T�A��E��E��F������E��H�U8H��tXH�E@�@�<!tL<?tH�����H��8H��H��H�$H)�PH�$H�����<_�����4H�UH�u�H������H�L$0H�UpH��H�uX��\��E��D��D��A�XD��H�����H�}pI�����|$0���`��6~�I��H���f�I�t$A�D�MH�}fE�H�M���o} I�w�om8�fE�O�U0A�GI�I�OA Ao0H�D$8A�WDH��I�w@A�G@I�GHH�D$@M�gXI�GP�_��H���EU����H�VH�FH)�H����H����E�L$D��D��A��E��A�]H�����H�L$@H�T$8H��I���EPD�MH��H�����^H��_H��I������Q����E�L$D��D��A��E��A�^H���3���|$0�I�����H���|�I��H�����f�I�L$H�uA��AG��UfA�?�V�������E�L$D��D��A��E��A�]H������P�I���q|�I��H���7�H�L$@H��@L�l$8L�UD�`M�ND�EH�Q�D�#L)�L��L�T$L�L$D�D$H�$�}���L�T$L�L$f�D�D$�o}�AAGAG@fA�?E�gM�WM�OE�GA ���H�VH�FH)�H���4H���'���E�L$D��D��E��A�^A��H������D�MD�EH�T$0H��H��H�����H��H��I��������H�5��<a��H�߉$���E�L$D��D��A��H��E��A�^�`��D�$E1�H��H�T$0H��H��薢������H�5����`��H�߉$�j���E�L$D��D��A��H��E��A�]�	��H�L$@H��H��H�T$8H��I��jD�L$�v���H���H��I���K��AZH��A[H����������E�L$D��D��A��E��A�]H������P�I���Xz�I��H����H�L$@H��@L�t$8L�UD�hM�OD�EH�Q�D�+L)�L��L�T$L�L$D�D$H�$�d���f�"L�T$A$L�L$D�D$fA�$�ouH�$AD$AD$@E�l$M�T$M�L$E�D$At$ M�t$0I�L$8M�|$@A�D$H��������E�L$D��D��A��E��A�]H������@�I���by�I��H���O�H�L$@H��@L�t$8M�GD�hL�MH�Q�H�$D�+L)�L��L�L$L�D$�w���H�$f�H��L�L$L�D$�&A$AD$0fA�4$L��M�|$0E�l$M�L$M�D$I�l$M�t$ I�L$(A�D$8�m���I�����A��E��E��F�k�
����E�uH�U8H��tXH�E@�@�<!tL<?tH�����H��8H��H��H�$H)�PH�$H�����<_������H�UH�u�H����v���H�L$0H�UpH��H�uX�QV��E��D��D��A�^D��H�����H�}pI�����|$0����`��w�I��H�����I�t$A�D�MH�}fE�H�M�ou ��I�w�o}8�U0�fE�OA�GI�I�OAw A0�������E�L$D��D��A��E��A�^H���f���|$0�I�����H��w�I��H����I�Mf�A�#H�u�o}A$��AD$��UfE�4$A�D$I�t$I�L$A�T$A|$ �����%���E�L$D��D��A��E��A�^H�������|$0�I���w�8��tv�H�����3f�A�'I�L$�VfD�8H�u��B�������EA��E��E����
����	H�U8H��tXH�E@�@�<!tL<?tH�����H��8H��H��H�$H)�PH�$H�����<_������H�UH�u�H�������H�L$0H�UpH��H�uX��S��D��E��D��A�]D��H�����H�}pI����h��Yu�I��H�����H�t$8H��@D�UL�MD�`I�ML�EH��D�#H��HT$@D�u0D�T$L�L$H�L$L�$�`����o} D�T$�A�GHH�D$8H��I�w@L�L$H�L$fA�D��L�$I�GPH�D$@A �o}8fE�WE�gM�OI�OM�GA�G@E�wDI�GXM�o`A0�vV��H���L�������H�T$@H�t$8I��H�����趡���y����E�L$D��D��A��E��A�^H���[���|$0�I���`�H��t�I��H����f�A�NH�uI�L$A��AG��UfE��}�H��I���5�H�T$@H�t$8H����^�
�������H��I���
�H�T$@H�t$8H����X�ߠ�����H��I������X�$��H��P�]H��HI��H���1��p����c��H�IH��A8D��E����E�D$f�A��H��H��P�o�@E��L��$��L��)�$�)|$p)�$�)�$�H��$�HDŽ$����H�L$pM��H��H�T$PH������I��A��������X����A�T$L��H�����%��I�����H�IH�A8D��E�������_������#���=�����H�L$`H�T$XH��H��L��@�?���I���x���H�
���yUH�5`�H�=���5��H�E ���df���'�����WL��L��I��H���1������fDH�E ���df������|$P�S��H�T$`H�t$XH���I���W1�裟����X���������L��H��H���9���A�T$H����H������I���V��fDH�}(�E��H�E8H�8H���5��E1�E1�f�?�t �#��H�E8J�<�H��t$f�?����H��HI�����L�u(I�M9�w�M������L���9�H�D$H������M��tlH�E8L�l$1�H�8H��u�WfDH�E8H�<�H��tDH�WHH�L$H��H�$�F��H�$I��H���G��L��L��M�H����H�L$H��H9M(w�L��$�H�t$L��L���o���ML��H��L��f�����6<��L��I��������fDH�E0���df���'�����H�E0���df���������H��hH��`1�H����(A��I��A)�轝�����H��P��DŽ$�H��$�H��$�H�$�So�H�$H��I�����f�gI�T$A<$��fA�$�A�D$I�T$����f=�����f=���H�T$@H�t$8�xH����@������H��L��$��;��9��H���.����H���!�A�t$H�����ѹ��H��$�I�UH��H��I���H��M���7��H��$�t9I�T$I�t$�H���踛��H��$�H����H��$��M��L��$�����H�������H�UH�u�H����g�����H���j�A�t$H��������I���[����:_�N��B<0�B����5����2�H�uH�U��1�H���I���ϛ��H���H���>����:_����B<0�������������H�uH�U��1�H���I���x���H���H���I>���u�H�V@H�v8H��H)�H���)�H���1��H�߉$�t�E��D��D��A�^D��H�����H�T$0E1�D�$�P�:_����B<0������,������H�uH�U��1�H���I���ƚ��H���H���=���c�H�V@H�v8H��H)�H�����H���0��H�߉$���E��D��D��A�XD��H���h��H�T$0E1�D�$�>�E��D��D��A�]D��H���=�����I���k�I��I��H���	H�UpH�uXH���,F��H�MpH��t
f�9���H�t$8H��@H�L$(D�]L�UD�hM�NL�EH��D�+H�EXH��HT$@D�\$ L�T$L�L$L�D$H�$����ID�\$ L�T$A�D$`H�D$8H��L�L$L�D$fA�$H�4$H�L$(I�D$hH�D$@�om E�l$�ouH�o}`fE�\$M�T$M�L$M�D$I�t$@I�L$XI�D$pM�t$xAl$ At$0A|$H�B����H�T$@H�t$8�rH���� ������H�T$@H�t$8�wH���������H�T$@H�t$8�uH��������H�T$@H�t$8�qH�������p�H�T$@H�t$8�sH���蠗���P�H�T$@H�t$8�tH���耗���0�D��E��A�^D��D��H���1���|$0�I���_�x���i�I��I��H���7H�UpH�uXH���D��H�UpH��t
f�:�X�I�}fA�$JD�UL�MH�uH�MX��I�|$�ou �o}H��om`fE�T$A�D$M�L$I�t$I�L$@At$ A|$0Al$HH�D$8I�T$XH��I�D$`H�D$@M�l$pI�D$h��@��I��D��E��A�XD��D��H���7���|$0I�����x���h�I��I��H���@H�UpH�uXH���C��H�UpH��t
f�:���ou �I�}D�UfA�$HL�MH�u��At$ H�MX�omH��ou`fE�T$A�D$M�L$I�|$I�t$Al$0I�L$@At$H����H�U@H�u8H���pX��H�U@H�u8H�߹��,��E��D��D��A�]D��H�߉$�>��H�L$@H�T$8I��AQjD�L$���>_�����F<0������H�T$H�4$�=�H�4$H�T$��ulH�U@H�u8����>_�@����F<0�4�����H�T$H�4$��H�4$H�T$��uOH�U@H�u8�	���H��H��0�\��H��H��$��
���I��H�����1��n���H�U@H�u8����I��H�����1��K���H�U@H�u8����	^��
���@H��C����_���H	Ѓ�H����H�}H��H�}X��H�}p���H�u0H���>0�����
����H�'C����_���H	Ѓ�H���L�H�}H�A�H�}X�6�H�}p�+�H�u0H����/���3��
��xpH��B����_���H	Ѓ�H���y�H�}H�n�H�}X�c�H�}p�X�H�u0H���/���`�H��8H��H��H)����H��8H��H)�蠨���H��8H��H)�茨������H��8H��H)��u��������8H��08H����H�81��.&��)$�H�
���H�5��H�=߻�
)�H�
����H�5��H�=����(�H�
T���
H�5t�H�=����(�H�
���H�5U�H�=���(��H�X���H�
���H�5,�H�=!��(��`�/���H�
#���H�5�H�=0��[(��x����H�
���JH�5ڭH�=��2(�H��8H��H��H)��/���H�
P��OH�5��H�=ݻ�'��X����P���H�
���%H�5m�H�=����'�H�
ޛ�$H�5N�H�=]��'�H�
Ϟ�P
H�5/�H�=$��'�H�
p���
H�5�H�=��h'�H�
ѝ��H�5�H�=��I'�H�
��]H�5ҬH�=ǹ�*'��h����H�
ɚ��H�5��H�=���'�H��8H��H��H)����H�
ߜ��H�5o�H�=����&��@�r���H�
����H�5F�H�=;��&����I���H�
}��H�5�H�=Z��u&��� ���H�
D��tH�5�H�=��L&�H�
%��sH�5իH�=��-&�ff.�f���H�j��@��AWAVAUATUSH��8H�t$(H�T$ H�L$H���@I��H�\$(1��Y�H�L�t$ I�E(�	#�XI�E H��M��@L�D��I��0L��I��8H���7A�EI��D���A�E�����ADž@I��H)�I��P��I��`�I��h��ADžX��I��ADž�B�Aƅ�Aƅ����L��I��XH��H���.�袋.H�|$H��H��H��HB��l��H�|$��H�T$H�B �oBH�j0H��I��8�B(A�(A���)$�
��H��H���mH�T$�B^A����B]A����B\A����BXA����B`A���H�BHH��A�����Aƅ�H�$DH�$H�|$H����1�H��L��@��I��1����A�D$I������B0I�<$u�f�H��I9$v}H��L����H��H����	��H��I����	��H��H����(�H��t�H��L��H���p�H��L��H���9���t�I���I��0A�H��H�~H�щ��_��I9$w�H�T$H�$H�$H9BH����A�eH�|$ vH�D$(�8���A���M��8M��0�� M��$M)��xL��
L���O�L��H��H��L)�H��HE�H��vI��h�8#���<$�TL�%h�H��u�H��L)�H���XL��H�|$H��L�u�t��I��8L)���H�ھ
L�����I��H��u�H��~&�}#u �}!uH��L��L������H��uBM��u�f�M��0I�����L��L��貋��H�|$����M��8I���M��t"H�SL��L��I��H�$�6��M��H�$H�t$H��tH�>tH��H��L��L)�H)�H������ADž@M��HM��PADžXM��`M��hM��8fDI��L��H)����I�H��8[]A\A]A^A_À}#������}!����������H���H��L��H�H������w����x!�4���H��H�5��L��H�L$ ���H����H��H�L$ t@H�T$H�{I��H��t
�z_�P���H�QL��L��H�D$H�$�5��H�D$H�$H�|$����H�t$�~_����H�>�����H��I+�0L��H)�H���s��M��8I�������x������x�����I��hH�m�7I��I9����I��I��H������L������H�D$�x_����A����������H�
ޡ� H�5N�H�=ǥ��H�
���WH�5/�H�=T����r4��f���H���@��USH��H��(H�����H������H����ߋ��H���H��tH�/�3�H��H��u�H���H��t@H�/��2�H��H��u�H��@H����}�H��X���H���t/�H���6��H���u�H��(v@H������H��(w�H��[]�����O�����AWI��AVM��AUI��ATUH��SH��H��H��H�$�c��L��L��H���>��H��A�����H��H�D$�m��L��H�T$�AH��H�����H�4$L��H���>��H��A�����H���C��H��I���(��L��L��H��H������H���?O��E��u?H���t5H��(u�H���H��tf.��z��s���H�H��u�H��[]A\A]A^A_�ff.����AU�
I��H��ATI��USH��HdH�%(H��$81�H��H��H�\$p�H�H����H��L��L��H������H���N��H��H����H��H��$HA������H���G�H��$8dH3%(uH��HD��[]A\A]��O�ff.���ATI��H�5L�UH��SH�ӺH�����H�߾�.��H�߾�!��H��1����H��1��
��L��H��H���ߓ��H��1�[]A\�������AVI��AUI��H�ι
ATUSH��H��@dH�%(H��$81�I��H��H�l$p�H�L�����L��L��L��H������H���JM���H�5z�H��I���S���H���f���H���Y��1�H���O��1�H���E��H��L��H������1�H���-��L��H���"�H�����L�����H��$8dH3%(uH��@[]A\A]A^��zN�f.���AWAVI��AUI��H�ι
ATUSH��H��hdH�%(H��$X1�L�d$ H�|$ I��H��$��H�L�����M��L��L��L��H���C����H�5c�H��I���<���H���O���H���B��1�H���8��1�H���.��H��L��H������1�H�����L��H����L������H������L����H��$XdH3%(uH��h[]A\A]A^A_��YM�f���AVI��AUI��H�ι
ATUSH��H��@dH�%(H��$81�I��H��H�l$p�H�L����L��L��L��H����H���K���H�5J�H��I���#���H���6���H���)��1�H�����1�H�����H��$xH���u�����$H�����H��H���H���ԍ��L��H�����H�����L���y�H��$8dH3%(uH��@[]A\A]A^��1L����AVAUI��ATUH��SH��H���-�H��H�t���H���M����I��L��H��PI��H����L��H��J�,+E1�A�T$��A��L�A��H9�w#�NfD��yGL��H��A�$H��t5H�H9�s-I��H��I)�L��A�T$H��u��<_u�H��H9�r����ƒ��=t<!u
H��A�H9�tE1�[D��]A\A]A^�f��<_t!��y�L��H��A�$I��H���3�����DA��!���A������D��H���������wH�$���H���H�
����YH�5�H�=���m�ff.�f���H���c�������wH�����H���H�
E���YH�5ŜH�=X���ff.�f���UH��SH��H��������t.���uOH��[]����;H���[]��H��uӀ}_u��U��0t����[�������H����H��tH1�H��u��u1ҍN߀�?wH�1V(�H��ƒ�����<^��@��|��	�	����\���f�}==��f�}<=��f�}[]������(����f�}!=�����f�}!~����f�}[]�����f�}==���f�}=~���f�}>=����f�}>>����f�}<=�����f�}<<�����1�f�}**�������}=�B������f��}>�6������1��}=�1����1�����H�5�8H�=2�� ���H��0H�l$(H�\$ L�d$L�l$L�t$L�<$H�'H�&H�l$(H�\$ L�d$L�l$L�t$L�<$H��0H���f���������f��W�1�����wb����H�5��������Q�NHc��Vʉ�������Hc��Nʁ�%H�
�H�Qf��xH��H�5ڟH��9<�t�H�D��f.��W�1�����wb����H�5��������B�NHc��Vʉ�������Hc��Nʁ��
%H�
�H�Qf��xH��H�5:2H��9<�t�H�D��f.��1��J���w|�w�N���wn��H�=ڭ��D�����A�LA��A��F�D�A��A��B�<���Q-H�=�H�Of��xH��L�-H��J�<;u;wt�@I�D�f.��1��J���c���w�N���c��D�GA�H���c��D��H�==���D�D�����A�L	A��A��F�D�A��A��F�D�A��A��F�D�A��A��B�<���.8H�=_�H�Of��x'H�IL�
�*H��J�<	;u;wuD;GuI�D	�ff.�f�������w=�wH�G
���B�������w��H���7H�<����	�@������f������Hc�H�z�7H��H�1�ø�����f.����H���/�ff.���AVAUATUSH��@dH�%(H�D$81�H9��I��H��I��1�I� ��N����H�
p8���U��,��-��Hc�A�FA9FtL��L��H���0�H�H�I9���L��L��H��A�V �P�?w�I��r�랹H����t$�4p��t$�p��t$�p��<�4$�x@���Dx�ˁ��wGL�-��I�D�f��x5H�-�=H�@8uu%H�uH�|$����uB�|%����!���H�L$8dH3%(��H��@[]A\A]A^�f.�Lc��I�T$�B�$H��,w���wwH�=/���Hc�H�>��H��������H�������H������H����t$�4p��t$�4p�����H�l���A�D��D����L$H�S��H����B�fD��AWH��I��AVAUATM��USH��H��L�*H��H�L$L��S �k9kA��H�L$�����v���H�L$I��I9�saHc�IM����A�����tW1�E1�tCIc�H��L��A��A�|��S0Hc��A�Iԃ�D9��H����[]A\A]A^A_�DH��u�1����A�~H�C0H��H��L��[]A\A]A^A_��f.�H��H��L����D�������I��Hc�IM���L����M�1����z����H��A�TA�H�PH9�u��W���D��AWL�=�,AVI��AUATUSH��H��H�|$(H�t$4dH�%(H�D$81�H�t$� I�W�$H�T$I��I�WH�T$ ���L�|$L�|$L�l$L��A�L��D$4Hc$I�,��}�Ӆ�ui�EL��L��A�?�D$4�Ӆ�uN�$��tn�$H�t$ L�|$��L�,��L��L��A�?�Ӆ�uI��M9�t;�}L��L���Ӆ�t�H�L$8dH3%(�H��H[]A\A]A^A_�@H�D$�$I���4$�@�D$,��9��!���L�|$I��H�2�I9���L�|$�D$4iL���IL���Ӆ��w���L��L���i�D$4I�Ӆ��U����D$(@�^H�/&L�4$A�H�D$1�A��tdL�t$H�$�E�l�L��D���A�Dž��!I��fDA9�tH�$�L��D��Ӆ�����A��I��E9�u�H��A9��H�D$H�D$H�**H9���L�4$��0H�5*L��Ӆ������H�$L�4$A�H�D$1�A��t]L�t$H�$�E�l�L��D���A�Dž�ufI��A9�tH�$�L��D��Ӆ��#���A��I��E9�u�H��A9��H�D$H�D$H��$H9�t
D�`�{���@1����D������D�`����K>�A�G����f���AWI��H��AVI��AUI��L��ATM��US��H��H��hdH�%(H�D$X1�A�U A�m�D$A9m�qM9��C�|$��@����A��I��H����������rE����L�l$ E1�L�\$M��C�|�A�>����H���#C��I��I��D9�ՋD$�������JD�D$I�U��M��H�4�D�\$L�L$1�A�@�I��L�<��M��E��~TE��~FD�$A�>A�L��A�r�Hc�D�B ��H��H��I���(�@�x�pD�@9�u�D�$��I��M9�u�I��M9�u�L�L$I�y�M���H��tH����J���w;D�D$1ɋ|�D9�tHc��H�4�I�4��.�F�~H��9��f�H�t$XdH34%(���NH��h[]A\A]A^A_�D�HA�,$A�D$E�L$D����H��t@���u9�փ�t2D�D$1ҋL�D9�tHc���H�<�I�<��/�G�OH��9��D�L$E���g���Hc�I�M9��X����D$L��L��L���D$ A�U ��A����H��t�����uD�HD�L$$McME9M��F�\
H�l$ H��D�$�]�H��t9����J���w,1�E��Hc��H�4�I�4�D��F�|�H���~9��M�M9������L��L��L��A�U ��A����H��t�����uD�HD�L$(E�UE9UtL��L��L���
�A��H���a�H���X�������J����G����,$1�D�Hc��H�4�I�4��.�F�|�H���~9������@L��L��L���2
�������1҃�t�t�A�t�H��9��C�����f��|$1���H���L�������A��������6���L��1ɉ*H���B��t�H���r�9������1��y���f�L��L��L���	�Lc��G���������D�T$L��1�M�\�E��~5D�A�4L��HcËJ��H��H��I���(�@D�@�H9�u׉�H��L9�u�I�y�T�H���������J�������1ɋ|�;|$tHc��H�4�I�4��.�F�~H��9�����1��J���1���9����AWAVI��AUI��I�p�ATUH��SL��H��(�H�|$D�$�H�L$H�4$A��A	�@I�}H;,$��L9���H��L���Lc�E����H��L��I�}�S M}L�K0A����z���@�����A�� ��D��E��
A���A��t
A��i�^A�� A���H��H��D��A��H�H�E���N���A���I�}H;,$�G���H�D$A��D+|$D� H��(D��[]A\A]A^A_��A��@��E��A����@A��@u�=�v�=0t�=1�6��E���l�A���H����E�������D!���3���D��ց�!΁����/��H�5���%�H��D�D������tD���`��`tDH��D�D����ƀtE��u-H��D�D�����tA��u��H��D�D���H����A���H�D$��A�@�������A��@����D��E��
A���A��t
A��I�:A�� A���5���DE��A���A�� ����A��A�I�����D��E���A���A�����L$H��H�ڿiA�ыL$L�K0A�H�H�A�����A��A�0���f�A��p���/wiH��A��@�H��A��A��H�H������H���b����E��t���u6��D!���E���A��D!����D�D��+�����������H��H��D��A��H�H��!���A��A�1���A��A�i���H�pD�@��H�t$A�̃�������H��H��D��t/A��H��H�H�H�D$H��8�S0L�K0H�H�H�D$D�@���A��L�K0H�H�H�D$D��y���f����H�R
H�
��xiL�GL9��|D�GH��H�J���xWL�GL9���D�GH��H�J���xUL�GL9�t|H���OH�1��<
����D�����������D��f���������D@��f�H��

��������������������H��

��������H�y

���������1�H9�s1��?
���ff.����I�����������~������҃����f��H�w�)�����I�L��!��H���F�����?	�H9�u��������H����ff.�����L��I��H��H����>����H�M�����xH��8���H���I��H��H��L����ff.�f�����ǀ���t6������t)�����t�����v���%�-������ǀ���t&�����t,����tt����v<���t	�����@�>��D��H�F�������?H���π@�x�)�Ð������������?����ʀ���V��?�Ȁ�FH�F��@������?�����π����?��ʀH�F�V@�8H��)�øo����ff.���H��H9�v(�����t��H9�sH�������t��f.����1�f�1��@���D���
t@1�A��t ��
tHc��1H���@��@�
��O���
u���f��W�G����E��DˆG��
��ff.�f���1��?u�
��O��D��H��H�=�7�|L�H�=%�7�pL�H�=y�7�dL�H�=Ϳ7H���TL�@������H�>��AWAVAUATUSH��(H�-�7H�]H�;��1���BHc�H�<�u��Lc�H�t$I��A���L��H��49���L��H��49��I��H�EH��49E���iL��A�E�H��L�$�H�T$1��f�H�pI9�tI��M9�tM�/H��u�L��I�����L�M9�u�H�T$H�L�"H��L)�H�T$H���I��E1��A��Ic�L�<�M��t.H�xI9�u�L��A��H�L$��Ic�H�L$L�L�<�M��u�H�T$L)�L�%�39E1�H��39E1�H��39H�T$H��39�
f�L�uH��M�A���=F�H�5~39I�J�&Ic�H��L�$�H��u�L�uM�I�I�I�$H��([]A\A]A^A_�A��Z���D��H�t$1�H��H�t$����H�D$L�%,39L�%�29H�39H�D$H�39H�39뀐��H�=�29tZH��29SH�8H��t1��>���H��29Hc�H�<�H��u�H���>�H�=�29�>�H�r�7H��29H�[�fD����SH���H��$8H��$@H��$HL��$PL��$X��t@)�$`)�$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H��$(1�H�=�19u#H��$(dH3%(��H���[�H��$�H�\$ H���H�L$H�D$H��H��$0�D$�D$0H�D$��H��19H�=�19H�����H�
o19H9�HB
l19H9�v#H�h19H�H�f.��H��H9�u�H�-19H��6����,�f.�f���SH�����?��H�H����8t[H��H9�u�H��H)�H)�tUL�B��H���t)f�M��t
�I��H��H�����u�H)�H�H���[��H��H��H)�H)�u�H���

�H�H��[�1���L�B�H��1����H��tGL�D�H���D�P�H��H���W���tH�AL9�u�H���H���x�uH)�H���DH��DH���x�u�H)�H���fDH�71�H�FH��H��V�1���y#fD��H�7H����Hc�H��V���x��@t��)։���Hc�H)��@��?��Hc�H��ff.��H��ff.��I��DI�8E1�1�H�wH��I�0�G���y$D��I�8H��H����H�I��G���x���H�F1�H��I��F�H��1�Lʄ�yIf���I�0H����H�H��F���x�H��H�H	�t(H��!�g���L�������Z���f�1�1�H��H�H	�u��H��H�`���tH�WH�P`����H�WH�P`��D��t+1���u#H��H�`H�WH�P`����F(H���H�G`H�PH�W`��F(H���f�ATUH��SH��H���t��H��#�\	��H���T�^H�� �8�H��!�,H��"��H�W`1�1�H�BH��H�G`�B���y&fD��H�S`H����H�H��B���x�H���E(H�H�E���[]A\�H���I����H����MH�����H����H���H�W`1�1�H�BH��H�G`�B����y���f���H�S`H����H�H��B���x��N���fDH���FH��������H�H���H�E�E(H�U��"���@H���V��H����H���hH�C`H�PH�S`��E(H�E������H��)����H��&����H��'��H��(�H�G`H�PH�W`�H�H�C(H�������H��H��H�EH�E�E(��Q���H���H����H���B(�"���@H��$��H��%u|H�G`H�PH�W`��f���@H��,���H��*��H��+uDH�W`H�BH�G`��R�E(��	�H�H�E�����H���FH��������[��]A\�H�����H����H��uԀ��fD���H��H���>����ń�u����H��
L��1���K������fDH�� H���s�������H�E�E(�����H������H���Vv|H��	�H��
�$���H�G`H�PH�W`�H�E H�U�E(�HC`���@H����H��
���H�`���E(H�E��T���fDH���J���H�������H�{`H�GH�C`�#����E(H�E�����fDH�������H���-H���H���U���H�G`H�PH�W`��-���fDH�C`H�PH�S`��E(H�E����@���)�������H������������L��1�H��
����]����H�C`H�PH�S`��E(H�E��2���@H�����E(H�E�����H�G`H�B ��B(H�H�G`���H�G`H�PH�W`��+���@E1��Z�L��H�_
1�1��������H�W`1�1�H�zH��H�{`�B���y$@��H�S`H��H����H�H��B���x�H��H�}H��E(H�E �HC`�C���DH�W`1�1�H�zH��H�{`�B���y�@��H�S`H��H����H�H��B���x��fDH�G`H�PH�W`��E(H�E�����@H�W`1�1�H�BH��H�G`�B�����������H�S`H����H�H��B���x��n���fDH�W`1�1�H�BH��H�G`�B���y!@��H�S`H����H�H��B���x�H���E(H�H�E��&���H�G`H�PH�W`��~���@H�G`H�PH�W`��E(H�E����@H�G`H�PH�W`��E(H�E�����DH�W`H�BH�G`��R��	�H�H�H�S(H�������H��H��H�EH�E�E(��a����#���H�H���H�E�E(H�U��6���H�������E(H�E������H�W`1�1�H�BH��H�G`�B����������H�S`H����H�H��B���x����fDH�W`1�1�H�BH��H�G`�B���y!@��H�S`H����H�H��B���x�H��H�����L�g`L���t�L�eH�E I�DH�E�E(�H�C`�@���f.�H�W`1�1�H�BH��H�G`�B���������H�S`H����H�H��B���x�����fD���a���AWAVAUATUSH��	�H��$@	�t$,H��L�D$L�L$H�$dH�%(H��$�1�H�G��H�D$��G1��H���x�x���9�u��8L�@E1�H��1�@��y(f.���I��H����Hc�I��x�@��x�H��H�l$`1��I�H��L�l$0���H�H�FD�L$(H�t$`H�D$hH�FPHFH��$�H��$�H�F`L��$�H��$��D$$E���L�|$E1�����A�f�I�WM�W)D$01�1�)D$@)D$P��y&f���L��I����H�H�A�B���x�D���L�zH��I��1�M�$01��������I��H����H�H��B���x�H��H�$L��H��H��_����I���}I��u�|$XuH�|$tH�D$0H�|$H�A��D9������D$$9D$,tz���D$$9D$(���L��$�H��$�dH3<%(L��uZH��	[]A\A]A^A_Ã|$Xu�H�|$t�H�|$H�D$8HD$0H����f.�1�1��#���E1��H�D$������AUA�����ATUSH��H�D�(�B
L�*M9��JH��D�I�L�j8fD�BfA���L�HH��fA��IE�D�J
A���#H�(H�jH��A��I��H�I��H��H�H�k0��SfA��vu�x���P�S�P�S�P�S�p@�s��Hc�H�|0fA��ucH��H�{ A��E1�ARE1ɾ�����f���H�k0H�C(XZI�,$H��1�[]A\A]��P�S�P�S�P�S�P�S��Hc�H�|H�{ I9�v$�?u
�Q��xH�xtFL��1�H)��i��H��u�H�������[]A\A]�@L�hH���B
L�*���@�(�����H��H�{(�W���ATI��UH��SH��@dH�%(H�D$81�H���I��$�f�E1�1�)$H�~)D$H��)D$ I��$��F���y%���I��$�H��H����H�I��F���x���H�GH��I��$��G�H��1�L�E1���yvfD��I��$�H����H�I��G���x���H��H����L����uH��H��L�������+���H�\$8dH3%(uH��@[]A\�f.�E1�1�����@SH��H���E1�1�L�NH��L����F���y,f���H���I��H����H�I��F���x�D��I�AI��H���A�A�I��1�M�E1҄�yffD��L���I����H�I�A�A���x���H��L�M��t!H��tL�CH��H��H�s�����tH��[�1�H��[�f�E1�1��f�AT1�I��UH��SH��H��dH�%(H�D$1�H�G`H�PH��H�W`D�P�1�E����DA��I�D$`H��A��Mc�L�D�P�E��x�I��I���I�����I��$��f�H��H�BH�$�x�x�I��H��L��H�$���H�<$1�1�H�GH��H�$�W���y0��H�<$H��H���Hc�H��W���x�H��H�I9���H���GH�$��H��H�BH�$�x�x�H��L��H�$�O�H�4$H�FH�$���y�H��1�1�@��H�4$H��H����Hc�H��V���x�H��H�I9�u�I��$�H����I�$I�T$`H�p1�H+QH1�H��H�I��$����x�H�ƃ�H�F��I��$���Hc�H����x�H��H�FH��SI��$��F�C��t	A��$�H��H�\$dH3%(ufH��[]A\��tK��Ԙ�=����A��$�1���M�йm�H��H�Y�1��2��1�IDŽ$��H���^����U�DH�>H��t&�������FH�FH9�tH���O�A��N��u(��@H�GH���FH�F�O�A��N��t�H��H�׾1�H������1�H���f�H��H�H��?tH���G����ff.�f�AWI��AVM��AUM��ATA��USH��8dH�%(H�D$(1�L�T$pL�|$xf���z����A�8��L�ǽL�
q9�H���H�€zH�Bu��@H�Z1�H��1Ʉ�y'���H��H����H�H��B���x�@H���{�x�fDH���{�x�A9�ta��A9�|/�;H��u�M+rL��9D��1�M��H����L���Z��H�D$(dH3%(�H��8[]A\A]A^A_��H��I�}H��JH�tlH�H�L��fDH��H���u
�S@H���:u�H��H���xu�M��H�P�L��1��L�T$L�$����L�$L�T$H��JL�
!9I�U����H�L$H�l$H��L��H�D$(����@��I��AW��L��L�L$0L�T$�_�H�D$(�t$0��L�T$L�\$E1�I��I�EL��L��L�<$�1�H�D$(I�EXZ�����l�ff.��AWAVAUATUSH��L�d$h�D$PD�\$xL�T$pf�D$I�D$ H�I+D$(A9����W��L$Ic�I��D)�H��D�L$H�,�H�H��D�D$L�pdH��L�M�l@�f�H��@H��L9�tMH�UI9�s�I9�v��T$�t$I��H��@��$�H��ATL�D$pH�L$h�|$���D$�C�XZL9�u�H��[]A\A]A^A_��AW1�AVAUATUSH���
L�9��$�H�=|9L��$H�t$1���$�H�L$xL�D$D�L$dH�%(H��$�
1��,����5�1��lj���H��H����1�1������E1�A�ع�H��1��,�I��H�����������A�>ELF��M�F(A�F>M�wI�oM�H��fA�~<M�\�,H�D$X1�E1�L��H�D$PM��L�(�M��L�d$(L�-��I��E��H�D$hH�D$ H�D$`��L�L�{�~�CIc�L�>�����ߋ(������K�H�L�H���L��1����H�D$8����H��$�
dH3%(H�D$8��H���
[]A\A]A^A_�H�\$PA�F<A��H��@D9��Z����D$L��$�M��H�D$8L�d$(���H�D$PH����H�\$XH���yH�[�1�H�hL�h H�\$0���H��H����H���������L��H��H�������B�I�L.L�d$8H�@M�,.H�,�H��$�M��H�D$(I��H�l$0A�D$��<u;I�|$t3A�4$H��H�L����H��tH�t$(H�������1�I��M9�u�L�d$8H�D$8H����fA�~�HED$8I�G @I�WHI�w`H����	I�0��	I�GL��$0H��$�H��$8I�GPH��$pHDŽ$PH�H��$�HDŽ$XHDŽ$`HDŽ$hH9���HcL$H�D$L�|$(H�|$L�t$0H��H��$�H��H��H�DH��$���$���)�H�H��H�DPH�D$pH��$H��$�f�H�zH��$HDŽ$�H��$�����uH��H��$���DŽ$�H��H�H��$�H�GH��$����$@f������
L��$0L���*�H��$�H�JH��$����$��J����H��$01�L��$�HB0DŽ$�H��$�@H�pE1�H��1�H��$��P����'���H��$�H��H�@��Hc�I��P���x�D��L��H��N�I9���I���w�^fDH��H�FH��$��x�x�H��L��H��$��o�H��$�L���O�����H�=9�H�������LD������H�\$ ���fD�H��L��������VH�\$`����@�H�=��H��������z�H�=��H�������H�D$XHD�H�D$X����H9�$������L�|$(L�t$0I�w`H���7I�GhH�H�D$(H9��H��$�H���H�D$0H��$pH�D$ �H��$pH�T$0L��L��H�t$ ����������H��$p�A�E1�H��$�DH9���L�FL��$p�<��Hc�H�>��fDI��I�@H��$p�x�x�I�@H��$pA�H����������I�����=L��$pL��I��A�x�x�H9��o���fDH9t$(�
���H9t$(���H�
�9H�$�L��1���U������*�$���$�����$�������Hc�I���$���H��A��D��L��AT�D$P�t$0AW��$���$���$�PH�t$PD��$���$����H��$�H��$H��@����L�������FH��H��$pI��`������$�����$�L��H)�1�H����$�H��I��$���@H�F@H��$pH��H���x�x����fDH�F@H��$pH��H���x�x�����fDL�NL�F1�1�L��$p�F���h���L��$pL��I����H�H�A�@���x�H��D�,�w����H�|$ ����H��$pH��$���O����L�NH�V1�E1�L��$p�F�������H��$pH��H����H�I��B���x�H��I���$�L��M����f.�����H��A��D��L��AT�D$�E1�A�P�t$0AW��$���$���$�PH�t$PD��$���$��~�H��$�H��$H��@�]���DH�\$h�&���fD�L��L��91�H����S��H��$pH��$�����fD�L��H�
�91�H�����H��$pH��$�����fDI�p
M�pH��$p����D��L9��{H��$pL��$pL��L��H��$0L��H��$p�J�����H��$�L��L��L��H��$p��$���$x��$�f��$zH��$�H��$�H��$�H��$���H��t!��$x��L��L���g����H��$0H���f�L��H��$ HDŽ$0)�$ �������H��$0H���H�����8��wƄ$�H���H�Q���� �@��$�H��$L��$�M��H�D$HH��$�H;�$������H�t$Hf�L��L��)�$�)�$�)�$�)�$���H��t���$��.�w���nL��L���K���u�L�|$(L�t$0I�w`H�|$ ��
H�D$ H���/���H�\$hH���!���H�P H�xH���������H�[H��H��H����������B�I�>HcT$M�W H�@I�|>L�L$L��H�D$H��H��L�,Ћ�$�L̓�)�H�H��M�L@�f.�H��I9�������A��<u苼$�9|$}�L�AL��H��M�� @I�?L�@(L�P H�xH��@H��I9�t��x���H�:L)�H9yr�H�x0uʋ9H�L�H�x0�@H�c�L��$�1�H�5R�H��$�H���H��$�H���H��$�H���H��$�H���H��$H���H��$H���H��$H���H��$H���H��$ I�@0H�D$0I�@HH�D$8I�@`H�D$@I�@xH�D$HI���H�D$pI���H��$�I���H��$�I���H��$�I���H��$�H��$0H��$�L��$�D��$�I��H��$�H��H�D$0H��H��$0H�D$8H��$8H�D$@H��$@H�D$HH��$HH�D$pH��$PH��$�H��$XH��$�H��$`H��$�H��$hH��$�H��$pH��$�J�, ���L������H��$�L��$�I��D��$�L��$�H�CL�H�EH�C H�EH�CH�E���c�H�kI�L�H�}�}H��$���
I�A���f�L���T����H��L��D�,�9����J������HDŽ$X1�1�HDŽ$`HDŽ$h�f�L��L��L��)�$�)�$�)�$��f�f�H��t}H��$�H��rt?v%H��stOH��tu�H��$�H��$h��H��u�H��$���$�끐H��$�H��$X�k���H��$�H��$`�S���H��$0H���������?���L��L��)�$�HDŽ$�� ����!�����$�H��$`H��$���H��H�H��$PH��$0H�������fDH�GL��$0H��$��GL����$��Y����$��@�@Ƅ$�1�H��$@Ƅ$�HDŽ$�HDŽ$�H�D$@Df�L��H��L��)�$@)�$P)�$`��H���EH��$PH��1��v1H��Uto��H��X�;H��Yu�H��$@��$��@H��u*H��$@H��tH�$HH��$��`�����R���H�P�H���D�����$hH��$@��t1҃���H���[H��U�	H��HET$@�D�H�T$@���DH��<�8������f�H��$�D��$�H��$�H��$�H��$�H��$XH��H����H��$�D��$�H��$�H��$�H��$��m���D��$z��$xAT��$8L��$�L��$�H��$���$P�3�A[A_�"���f.�L�|$(L�t$0H����L��1��`���^���H��$P�;���H��Ƅ$�����Ƅ$�DŽ$�����I��I��H��J��$��W���D��$�9\$�a���H��$�L��$�L��$�L��$�H��H��M��A��H��$���$�H��$�H��$�L��$�D��$��Mf.�E���oE���fL;D$@rL;�$���f�H��I��@L9l$p�BH��$0L�@(L+@ L@��u�E���LL�L$@E��uL��$P��$@�D��$�H���H��$hE���H�$�H�E��H�HH��$p����g�������H�=�Hc�H�>��DH��$�H��$�H������H��$p1�1�I��H�BH��H��$p�B����	���H��$pH����H�H��B���x�L�H��H�I9���M9���!��AfDH��$�L��$�H���L��H���N�H��I���C�M9���I9���!Є��H��$p��H��$�H��$�H�����I��H��$p����@E���2H������H�P@H��H��$pH�R�z�x�E1����H��@H��$pH���x�x�H��H��$pH��H���z�x��H���fDH��@H��$pH���x�x�H��H��$pH��H���z�x�����fDE���w���L;D$@�l���L�d$@I�����M���T���I�} tU�@���H��$��AoM�AoU�Ao] I�E(H�H��$�HH�H��$�P �HH�@(X0H��$0H�I�MH��$�I�ML�X H��$�M�L+X(I�M M�]���DL�|$(L�t$0L��$����H��$�HHx@H�qH��H��$p���H��H��H��H��$p�u��H��H	��Y���H���tL�I9�r�L�I9�s�I������I���D��$�H�D$`A��H��t	E����H��$�H�����E�����H�PL�D�BK�D H=���H�D$x�2H�
��8fo��H����8/H�build-id)Y�8H�b�8M���!1�L�2H�=l��f.�H��H��I9���A�T�փ�@������47�Q@�1H��u��A/H����H�D$8�r�f�H��$�Ƅ$���H�D$XH�D$hH�D$PH�D$ �R��H����*���@H��$XH��$�tH�D$@H�H��$�Ƅ$������$1H��$`H��$@H��$ �\H��H��8���HȀ�$��+H��$�H��������ߋ(�����.��H�:�H�����H��$�H��$@L��L��H�$HH��$����H���I���f�L��L��L��)�$p)�$�)�$����H������H��$�u�H��$pH��tH�$xH��$��L��$�L��$�L��$��P�H�X�/H�=.�8L��f��H���]���H�L$xH�5�8H�)�@H��H����������!ʁ ��t��A�����€�D�H�HHD���ѹ�H��H)�H�5��8H=�H�~LF�L����
�H�
��8�H��H�/usr/libA�ug���8/debH�v�8I�EH)�H�<fD�
o�8�޻������H�\$xH�H��tH��H�U H�L$xH��H�P H�UH�H�1�ATD�L$L�D$(H�t$ ��$��a�_AX�9���H��$��H����H�������L��$�D��$�L��$�H��$���H�P1�H��1�H��$p�p�@���_@��H��$pH��H�@��Hc�H��p�@��x�L�H�BH��H��1�H��$p�B�L�$>1�������H��$pH����H�H��B���x�L����L�L$@L�D$8L�\$0���L�L$@L�\$0H��L�D$8I����H�K H�UH��L�L$@H��$�L�D$8H��L�\$0��L�\$0L�D$8L�L���L�L$@�JH��$�I�AH�������DI�WHI�w`H�D$`H����H�D$PH�D$8H�D$XH�D$hHDŽ$�H�D$ ����ug�.deb�f�q��A���H�L$xH�H��tH��H�S H�L$xH��H�P H�H�H�1�ATD�L$L�D$(H�t$ ��$���XZ��L�|$(L�t$0����L������HDŽ$�H�D$8�^�H��$�L�d$8I�G H�D$8���L��1�����I�9L�����H�EH�E�3�L������������UHc�H��AWI��AVAUATI��@SH��H�����<���dH�%(H�E�1���A��HDžX���Hc�I�����H�5��8H�=��H��0�������H��xH���8��E��<��������E1�H��(���L��H��H���H��`���M��H��@���H��X���H�� ����I�FL;�H�����I��M��E��I��F�T+E��u�K�<�H��@��������t�H��0���L��h���H�H����L9�tH��f�H��H�H����L9�u�H��`���H��tJ�D+H��p���H���j���J�D+0I�FL;�H����e���@L��H���I��H��(���L��H���I��I��K�D5I���I�$I�V(I�NI��I)�H���5H���|M�F0M����H���>A�V����I�vH����I�>H��t	�?��H��RH���VP�H��1�M���l��H�� M�m8M��tHI�MI�EA�UM�MM�E0H��t	�8�-H��RH����H��1��"��M�m8^_M��u�I�~0H��t�H�5l������tI��@I��M9������L��X���L��H���M����L�m�I�]H�M��L����I��L9�txH�P0H�U�H�PHH�U�H�P`H�U�H�PxH�U�H���H�U�H���H�U�H���H�U�H���H�U�H���H�U�I��Bt�H�:I�����H��X���L9�u�H�pH���rI��$L��H��X�������L��X���M���;�����<�����~?D��<���M�n8E1�I�}H��t�H�_8���H��H��u�A��I��@E9��L�����H��0����~��H�E�dH3%(��H�e�[A\A]A^A_]�@H�.��H��1�M���_����f.�H��H�
�H��1��M���4�������I��I+F H���I���DRH���AQI������fDH��H���P�H��1�M���ڶ�ZY�k���RH���VWP�B���RH���P��DH�x�G�����f�M���=���H��0���L���L�������H��X���L�����H��tH��H��`���H��X���L�@ H�0H��tJ�t+H��p���H��tJ�D+0H��x���J�D+(�H�=��8���H��E��I���(���H�� ����L�拽<������AXAYH������������H�PH��H��H��H%�H)�H���H��H9�tH��H��$�H9�u����L�l$H�5��8I���L���h������H��X���H��tH��H��L�(��<���E1�SH��X���M��L��H��X������A[A]H�������H��0���H���L��X���M���+����C���H)�H�L��W����"��f���HcI9AVAU�PATH�@I��UH��H��SH�}7L�,É 9I�}�s����u	I�}H��ufH�VA�PH�=Q�� H�{M����H��uFL�s@H�C`L��H��I��H���%��H�S0��t�M��tmL��L�rH��L�j0���M�u@H�y�8H�H��0�\9�L��0L�����Hǃ0[H��]A\A]A^����fDH��u�H��H�=��1��j��f.����ff.����ff.���1�H�=c����f.�@���f.����H���H�=�*�G���t
H���D�H�=�*H���#����H�UUUUUUUUH��H��H!�H�33333333H)�H��H��H!�H!�H�H�H��H��H�H!�H�H��H��8�f���ATI��E1�USH��yI��I��I�����I��I��L��I��H��y
H��H��H��I��H��L��M��uVH9�v)L��H��H��H��H��1�M��t
H��H��H��[]A\�@H��u
�1�I��H��H��1�H��H��H��H���L��I9�vL��H���I��H��?��u$I9���L9���H��H���f.�Hc�A�@��H��I)�I��H��A��D��H���H��D��I	�H��H���H��D��H���H��H	�H��I��H��H��I��H��H9�ruH9�sH)�L�H��I��L)�H�D��I��I��D��H��H��I	�H��L�����@H)�L�H���H�����H��H���%s - %sruby_xmalloclinked to incompatible %s - %sincompatible library version/opt/alt/ruby34/share/ruby/site_ruby/opt/alt/ruby34/lib64/ruby/site_ruby/opt/alt/ruby34/share/ruby/vendor_ruby/opt/alt/ruby34/lib64/ruby/vendor_ruby/opt/alt/ruby34/share/rubygems/opt/alt/ruby34/share/ruby/opt/alt/ruby34/lib64/ruby/opt/alt/ruby34array size too biggiven block not usedsort reenteredrecursive array join[]array frozen during sort[...]negative array sizeargc == 1array.cindex %ld too bignegative length (%ld)argument too bigmodified during shufflesort_byflatten reenteredslice step cannot be zeroattempt to drop negative sizeattempt to take negative sizecan't set length of shared negative sample numberrepeated permute reenteredcombination reenteredtoo big to productproduct reenterednegative argument$, is set to non-nil valuetry_convertinitialize_copyto_sto_ato_hto_aryeql?[]=fetchuniondifferenceintersectionintersect?<<appendunshiftprependinserteach_indexreverse_eachempty?find_indexreversereverse!rotaterotate!sort!sort_by!collect!map!select!filter!keep_ifvalues_atdeletedelete_atdelete_ifreject!transposereplaceclearfillinclude?<=>slice!rassoc|minminmaxuniq!compact!flattenflatten!cyclerepeated_permutationrepeated_combinationbsearchbsearch_indexany?none?digsumfreezedeconstructrb_ary_shuffle_bangrb_ary_shuffleary_sample0ary_sample_bi132_bi135_bi137_bi169_bi172_bi174rb_builtin_basic_definition_p_bi223_bi227_bi241ary_sized_alloc_bi247_bi266_bi272ary_sample_memonegative array size (or size too big)block supersedes default value argumentindex %ld outside of array bounds: %ld...%ldindex %ld too small for array; minimum: %ldwrong element type %li at %ld (expected array)wrong array length at %ld (expected 2, was %ld)tried to flatten recursive arraywrong argument type %li (must be numeric, true, false or nil)wrong argument type %li (must respond to :each)probable buffer overflow: %ld for %ldelement size differs (%ld should be %ld)repeated combination reenteredary_take_first_or_last����������������#<:@%d:%d-%d:%d>:%s@%d:%d-%d:%d>NODE_SPECIAL_NO_NAME_RESTset_encodingNODE_SPECIAL_REQUIRED_KEYWORDNODE_SPECIAL_EXCESSIVE_COMMANODE_SPECIAL_NO_REST_KEYWORDAbstractSyntaxTreeLocationast_s_parseast_s_parse_fileast_s_ofast_node_typeast_node_first_linenoast_node_first_columnast_node_last_linenoast_node_last_columnast_node_all_tokensast_node_childrenast_node_inspectast_node_node_idast_node_script_linesast_node_locationsast_location_first_linenoast_location_first_columnast_location_last_linenoast_location_last_columnast_location_inspectAST/locationAST/nodenode_locations: unknown node: %sThread::Backtrace::Location object expectedunexpected rb_parser_ary_data_type: %dnode_children: unknown node: %scannot get AST for ISEQ compiled by prismcannot get AST for method defined in evalnode_id_for_backtrace_location�*�`*�`*�`*� *��+� *� *��+��+��+��)��)��)��+��+��+��+��+��)��)��+��+��+��+��+��+��+�0+��*��+��+��+��+��+��+��+��+��+��+��+��+��+�*��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+�*�+��+��+��)��)�*��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��+��/�6�.�.�-�-�-�.�.�Q5�Q5�D5�D5�X-�x.�x.�x-�x-�X-�.�f6�-��6��6��1�x1�;/�(.�(.�o2�(.��1�a7�;7�7��6��-��-��.��-��-�X-�x-�A0�x-�X-�X-�X-��.��.��-��-��-��-��4�5��.�U2�-��2��4��0��0�^1��2�^1��2�X-��.��2�X-��3��7�-�-��5�-�-�X-�-��.��-�-�$3�?3��3�-�-��/��-�-�-�-�-�x-�x-�x-�x-�x-�X-�X-�k1��2��-�X-��.��0��5�x-��0��1��6�unsupported flags specifiedword order not specifiedunexpected word orderbyte order not specifiedunexpected byte orderinvalid wordsize: %zutoo big wordsize: %zutoo big nails: %zuinvalid radix %d-InfinityNaNsquare overflowmultiplication overflowtoo big numbershift width too bigInteger()unsigned longunsigned long longInteger out of Float rangeremainderexponent is too largecoerceGMP %sGMP_VERSIONtoo big numwords * wordsize: %zu * %zuinvalid value for Integer(): %+liwds is not enough: %zd for %zdunexpected bignum length for karatsubaunexpected bignum length for toom3too big power number requested: maxpow_in_bdigit_dbl(%d)**(2**%d)bignum too big to convert into 'string'bignum too big to convert into '%s'too big to unpack as an integerbignum out of range of unsigned longbignum too big to convert into 'long'bignum out of range of unsigned long longbignum too big to convert into 'long long'Integer#pow() 2nd argument not allowed unless a 1st argument is integerInteger#pow() 1st argument cannot be negative when 2nd argument specifiedInteger#pow() 2nd argument not allowed unless all arguments are integers��������������������������������������������c���������������������������������������������������������������c�>�<��!�)R���@����eg��Aa"P�yB6�!�)R����#NJ9�?�V�(M�M�brsx�}�9w�=��'[��!~�^�'�\<��]ۮ��2���ļI���-@��{YXVq�`77���)�42����xd�n"�_�p�=8��#<Z�+�se��Y�6�A݁�� W�
�	_O��%,�D!q\n�%g�.��A?(






0123456789abcdefghijklmnopqrstuvwxyz��?�=�A����C���Cbad scan arg format: %s__tmp_classpath____classpath__can't make subclass of Classalready initialized modulecan't copy the root classalready initialized classcan't copy singleton classBasicObjectModuleRefinementcan't define singletonunknown immediate %pinherited%s is not a class (%li)no super class for '%s'%s is not a module (%li)cyclic include detectedcyclic prepend detected%s keyword%.*sunknownrefinement module is not allowedsuperclass must be an instance of Class (given an instance of %li)can't make subclass of singleton classnon iclass between module/class and originno origin for class that has originRString was chilled for multiple reasonssuperclass mismatch for class %s%li::%li is not a class (%li)superclass mismatch for class %li::%li (%li is given but was %li)no super class for '%li::%li'%li::%li is not a module (%li)GC must not occur during the subclass iteration of Class#descendants'%li' is not a singleton classwrong argument type %s (expected Range)cannot clamp with an exclusive rangemin argument must be less than or equal to max argumentcomparison of %li with %li failedComparablebetween?clamp����������������p����������������������8���8������������������������������������ �������X��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0�8�@�H�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�P�V�V�V�V�V�V�V�V�V�V�V�V�V�(�K�K�$K�4K��J��J��c��c�Lc�4��4��4���c�4��4��4��|c�lc�4��4��4��4��[c����E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E��E�����E��E����E��E��E��E��E��E��E��E��E��E��@��E��E�����E��E��E��E��E��E��E��E��E��E��E��E��E��������8�����E��E��E��E��E��E��E��E��E��E��E��E�����E��E��E��E��E��E��E��E����E��E��E��E��E��E��E��E��E��E��E��E��E��E��(��E�����E��E��E��E��E��E��E��E��E��E�����������E��E����E��8����\��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|�����|��|�����|��|��|��|��|��|��|��|��|��|����|��|�����|��|��|��|��|��|��|��|��|��|��|��|��|�����|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|��|�����|��|��|��|��|��|��|��|��|��|��|��|��|��|�����|�����|��|��|��|��|��|��|��|��|��|�����ܵ����|��|�����|��������V��1����������������������������������������������������������������x�����S�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.�����������������������������������	�����������������������������D��Z����Z��Z�����Z����������������Z��������Z��Z�����|�����Z�����T����������������������l�����$��L�����L��$�����������������������|�������������L����H�����|��������������������������|�����H��4�T����������������������������������������������������������Q���� �� �+�K�-��Q��Q����"��"��(��%�$�4'���l�I�� �������;�5���h���1�Y��7�m7�
6�
6��5��3��3�,�,�,��3��3��I��I�J��P��,��I�yI��H��H��G��F��F�VF��M��M��M�oM�M��L�%L�yK�,K�7J��O��N�[E��D�D��Q��Q��Q��B��Q��/��.��E��Q�).�,��2��1��A��@�b?�>��<��;��;�i;�R:�R:�:��9��9�G9��8��8��7��P�5P��P��0��Q��Q��Q��Q�KN�yK��M��g��g��g��g�rg��m��m��m��m�eg��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m�[g�Qg�Jg��m��m��m�=g��m��m��m��m��m��m��m�3g�rg��f�!g�g�g��f��f��l��l��l��l��f��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��f�}f�vf��l��l��l�if��l��l��l��l��l��l��l�_f��f��e�w��v�4v�|v�v��v��v��v�$v�z��y��y��y��z��z��z��z��z��y��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��n�xy��y��z��z��z��y��z��z��z��z��z��z��z��y��z��y�������������������������������������������������<����d��T��������������������������������������$������������������������������������������������������������������������������������������������������������������������l��������������������D��t��t��t��t��t��t��t��t��t��t��t��t��t�����������������$��t��t��t��4��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t�����������t��t��t�����t��t��t��t��t��t��t����$��t��������������z��z��z��z�����z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��}��s��l��z��z��z��_��z��z��z��z��z��z��z������������������n��������������a��������������������������������������������������������������������������������W���������������#�����������������������~��n��A��,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,��0�.�.�H.��0�H.��0�P/��.��.��.��/��1��0��2��2��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�80��0��0��0��0��0��0��0��0��0�2�1��0��0��0��0�3��+��+��+��0��0��0��0��0�,��H��H��H��H�IH��I��I��I��I�9H��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I��I�/H�%H�H��I��I��I�H��I��I��I��I��I��I��I��G�IH��F��Q�tR��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��Q��R��R��R��R��R��R��R��R��R��R��R��R��R��R��Q��Q��Q��Q��Q��R��R��R��R��Q��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��Q�$R��R�4R��Q�4R��R��P��R��Q��R��R��Q��R��R��R��R��Q��Q��Q��}�.~��y�.~�.~�}�.~�(|�|��{�h}�*}�.~�*}�N}�.~�.~�.~�gy�&y�.~��x����
�����
��
��t��
��Ĕ�������$��
��
��
��
��
��
�����$�����
�����|��������������������������������������������������������������������������������������������̠����������������������������,�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<��L�����������������\�����������������@��h��h��G��h�������G�� ����`����h��G��G��G��G��h��P��@��P��P��G��G��h��h��h��P��P��P�����G��P��P��P��P��P�����P��P��G��P�� ��G��P��h��h��G��G��G��G�����G��h��h��h��h��G��(��P��P��P��@��G��P�����G��h��h�����G��G��P��P��P��G��P��P��P�����G��P��h��h��h��h��h��h�����G�����G��h��P��P��P�����G��P��h��h��h��h��G��h��G��P��h����G��G�����G��G��h��G�� ��G��G��h��G��G��h��h��h��h��G��G��h��G��G��h��h��p�����h��h��h��h�����G��h�����h��Ʊ�h��h��h��G��h��h��ȷ�G�����l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��d��l��l��l��l��D��l�������l��l��l��l��l��l��l��l��l��l��l��l��l�����l��l��l��l��l��l��l��l��l��l��l��l��l�����l��l��l��l��l��l��l��l��l�����l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��D��l��l��l��l��l����l��l��l��l��l��l��l��l�����l�����l��l��l��l��l��l��l��l��l��l��l��l��l��l��l�����l���������:�T������:�������u���:�;�������������:��:��:��:�7�����7��z������:��:����S�������,��R���:�a��4��k��>�������������:�"�;���:�w��F���}�_�8����:�2���G����:�������������i���:��
��
��:�Y
�

����:�������P��:����^�m��:���6�f������%�%��#��#��:��8��:��"��!�� ����(��:�^(��2�(&�{5��.�����3��:����*,��+��+��:�x+��:�H.��-��:��.��:��:��%��:�i���$���:�����6���:��*��(�8+����1�3����9�������.��t��������7����U���:�����������e8�88�
8��7�9���7�\7�9��/7�9��9���7����������������������������������������������������������������������������������������������������������������������������������������������Ŀ�����������������������������������������,�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,���������������������������������������,�������������,���������,�����������������,�����,���������������,�����������,��������������������,�����,�������������������,�������,�����������������������,�����,�����������������������,���,���������������,���������������,���,�,��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
�8��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
�<)��0��0��0��0��0��0��0��0��*��0��0��0��0��0��0��0��0�<.��0��0�,/��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�D+��0��0��0��0��0��0��0��0��0��0��0��+��0��0��0��0��-��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0��0�.��0��0��0��0��0��0��0��(��Y��W�|R��Y��Q�Q��Y��Y�DP�{g�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�{g�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�{g�Ej�Ej�{g�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�{g�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�{g�Ej�Ej�Ej�Ej�{g�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�Ej�'g�Ej�Ej�Ej�Ej�Ej�Ej�Ej�qb�__builtin___builtin_�������������������������������������������������������������Wunsupportedblock in %liblock (%d levels) in %liget_local_var_idx: %dget_dyna_var_idx: -1unexpected node: %sinvalid %+li Fixnum: %+lino masgn_state%li: undefined labelbroken binary formatYARBunknown binary formatunmatched endian: %cunmatched word size: %dconstant_id out of range: %udump size exceeds::unsupported classinvalid byte sequenceinvalid bytecode<compiled>&.  ~~~~~
%1i |   ~~~~~~
%2i |   ~~~~~~~
%3i |   ~~~~~~~~
%4i |   ~~~~~~~~
      | %5i |       | %5i |   ~~~~~
  | %1i |   ~~~~~~
   | %2i |   ~~~~~~~
    | %3i |      | %4i | > > ...  ...
    make_shareable_copymake_shareableto_i-@matchee%p: %s-- raw disasm-----------------------------%-20s   %04d %-65s(%4u)
<hidden><ivc:%d><icvarc:%d><ise:%d><calldata:, %d><ch><%p><TS_BUILTIN>unknown operand type: %c  trace: %0x
  adjust: [label: %d]
dump_disasm_list error: %d
argument stack underflow (%d)unknown label: <L%03d>unknown list type: %dWrong op typeinvalid instructionTS_FUNCPTR is not supportedNODE_CASE: unknown node (%s)NODE_WHEN: unknown node (%s)Invalid breakInvalid retryrescue in ensure in NODE_DASGN: unknown id (%li)Invalid yieldunknown dvar (%li)invalid frozen_string_literal<class:%li><module:%li>singletonclassInvalid nextInvalid redoMETHODEVALMAINTOP**unknown scope: %ddeconstruct must return Arraydeconstruct_keyskey not found: %+lirest of %p is not emptyunexpected nodeNODE_IN: unknown node (%s)ensure_shareablesetup_arg: unknown node (%s)__builtinPrimitivecstmt!cexpr!cconst!cinit!attr!leafinline_blockuse_blockc_traceunknown argument to attr!: %sattr!: unknown node (%s)arg!arg!: too many argumentarg!: unknown node (%s)mandatory_only?_bi%ddefined guard in dstr: must be string: %sunsupported: putundefkeyword#arg_restlead_numpost_numpost_startrest_startblock_startarg_sizelocal_sizestack_maxnode_idsnode_ids is not an arraykwbitsambiguous_param0wrong exception entryRUBY_EVENT_CLASSRUBY_EVENT_ENDRUBY_EVENT_CALLRUBY_EVENT_RETURNRUBY_EVENT_B_CALLRUBY_EVENT_B_RETURNRUBY_EVENT_RESCUEunknown instruction: %+lioperand size mismatchISEQ is requiredmidflagorig_argckw_argunknown operand: %cRUBY_EVENT_LINEshould be top of iseqibf_dump_overwrite: overflowpath object size mismatchunexpected path objectEncoding not found %s!NO_COLOR%.*s:%i: %s@pathprism_compile.cnode type %s not implemented$.attr!: no argumentarg!: no argumentUnexpected node type: %sUnsupported node %s -- SCRIPT_LINES__invalid source encodingibf_loaderibf_dumppinned_listcompiler/labels_wrapperget_symbol_value: unknown node (%s)unmatched version file (%u.%u for %u.%u)unaligned iseq list offset: %uunaligned object list offset: %uibf_dump_object_unsupported: %spm_options_frozen_string_literal_init: invalid frozen_string_literal=%dobject offset out of range: %zdmandatory_node: can't find mandatory nodeibf_dump_object_struct: unsupported class %liLocal with constant_id %u does not existibf_load_object_class: unknown class (%d)object index out of range: %ldobject offset out of range: %u%p === %p does not return trueUnexpected numeric type on imaginary number %s
can not yield from isolated Proccan not access variable '%s' from isolated Proc%p does not respond to #deconstructDon't have a literal value for node type %s<L%03d> [sp: %d, unremovable: %d, refcnt: %d]%s
operand size miss! (%d for %d)iseq_set_sequence: adjust bug %d < %diseq_set_sequence: ic_index overflow: index: %d, size: %diseq_set_sequence: adjust bug (ISEQ_ELEMENT_ADJUST must not be the first in iseq)iseq_set_sequence: adjust bug to %d %d < %dtoo large iseq_catch_table - %dNODE_CASE: NODE_WHEN is expected, but %sNODE_CASE: must be NODE_LIST, but 0NODE_WHEN: must be NODE_LIST, but 0Can't escape from eval with breakCan't escape from eval with nextCan't escape from eval with redoargument of top-level return is ignorediseq_compile_each: unknown node (%s)iseq_set_arguments: NODE_ARGS is expected, but %scompile/ISEQ_TYPE_%s should not be reached%p length mismatch (given %p, expected %p+)%p length mismatch (given %p, expected %p)%p does not match to find pattern%p does not respond to #deconstruct_keysdeconstruct_keys must return Hashillegal variable in alternative pattern (%li)guard clause does not return trueNODE_CASE3: NODE_IN is expected, but %sNODE_RESBODY: unknown node (%s)unexpected rb_parser_shareability: %d%s: invalid node in NODE_OP_CDECLcompile_hash: NODE_LIST is expected, but %sshould not call builtins here.mandatory_only? should be in if conditioncan't find builtin function:%sargc is not match for builtin function:%s (expect %d but %d)non symbol argument to attr!: %snon symbol argument to arg!: %smandatory_only? should be put on topcompile_array: NODE_LIST is expected, but %s:opt param is not an array: %+likeyword default has unsupported len %+li:keywords param is not an array: %+liinvalid exception symbol: %+liunexpected object for instructionshould not compile with coverageunexpected realpath %lx(%x), path=%+libuiltin function table is not providedbuiltin function index (%d) mismatch (expect %s but %s)%.*s:%i: syntax error%s found
Unreachable node in defined?: %sCannot compile a ForwardingArgumentsNode directly
Should not ever enter an in node directlyA pm_missing_node_t should not exist in prism's AST.Unexpected node type for shareable constant write: %sUnexpected node type in pattern matching expression: %smandatory_only?: not in method definitionmandatory_only?: in method definition with no parametersmandatory_only?: not in method definition with plain statementsmandatory_only?: can't find mandatory nodeUnexpected node type for parameters: %sUnsupported node in requireds in parameters %sUnsupported node in posts in parameters %snode type %s not expected as keyword_restUnexpected keyword parameter node type %sUnexpected node type for index in for node: %sto_cComplexnot a realRational.eEcan't convert %li into Floatin a**b, b may be too bigabs@real@imageinfinite?rationalizePIallocaterectangularpolardivmodfloorceilmoduloroundsteptruncateimaginaryimagquofdivmagnitudeabs2anglephaseconjugateconjpositive?negative?marshal_dumpmarshal_loadto_fto_rcomplex.somarshaled complex must have an array whose length is 2 but %ldcan't convert %li into Rationalcan't convert %li into Integer%li can't be coerced into %liinvalid value for convert(): %+lican't convert nil into Complex������������������������-DT�!	@-DT�!�?�!3|�@�?�Ruby:fiber_pool_allocate_memorycan't alloc machine stack to fiber (%zu x %zu bytes): %sattempt to yield on a not resumed fiberFiber storage can only be accessed from the Fiber it belongs toFiber#storage= is experimental and may be removed in the future!start && stack && size >= 1024attempt to transfer to a resuming fiberattempt to transfer to a yielding fibercannot raise exception on unborn fiberattempt to resume a terminated fiberattempt to resume the current fiberattempt to resume a resumed fiber (double resume)attempt to resume a resuming fiberattempt to resume a transferring fibercontinuation called across threadscontinuation called across fiberRUBY_SHARED_FIBER_POOL_FREE_STACKSSetting RUBY_SHARED_FIBER_POOL_FREE_STACKS to a negative value is not allowed.Setting RUBY_SHARED_FIBER_POOL_FREE_STACKS to a value greater than 1 is operating system specific, and may cause crashes.can't set a guard page: %sNo scheduler is available!storage must be a hashstorage must not be frozenuninitialized fibercreatedresumedsuspendedterminated (%s by resuming)cannot initialize twicenot running threadcoroutine_transferfiber called across threadsdead fiber calledcoroutine/amd64/Context.hcan't call across trace_funcpoolstorageFiberFiberErrorcurrentblocking?storage=resumekillbacktrace_locationsalive?set_schedulercurrent_schedulerschedulefiber.soContinuationcallcccontinuationcoroutine_initializeDBG> %s: %s
gc_stresscirgengcDBG> %s: %s (id: %d, line: %d, location: (%d,%d)-(%d,%d))
ignored rgengc option: '%.*s'
unexpected debug option: %.*s
������readdirfchdirclosedirfdopendircontinuous RECURSIVEsclosed directorytelldirdirfdHOMELOGDIRHOME/LOGDIR not setDirfor_fdentrieseach_childfilenoto_pathpospos=getwdpwdchrootmkdirrmdirunlinkexist?fnmatchfnmatch?FNM_NOESCAPEFNM_PATHNAMEFNM_DOTMATCHFNM_CASEFOLDFNM_EXTGLOBFNM_SYSCASEFNM_SHORTNAMEdir_s_opendir_s_closedir_initializedir_s_arefdir_s_globconflicting chdir during another chdir blockconflicting chdir during another chdir block
%li:%d: note: previous chdir was herenul-separated glob pattern is deprecatedЏ�Ō�������Ќ�������$������������t�����push_globdir_initializedir_chdir0chdir_pathdir_s_chrootdir_s_mkdirdir_s_rmdirrb_dir_s_empty_pdo_lstatdo_opendirdo_statglob_helper��������openpath: pathname too long (ignored)
	File "%.*s"%s
/usr/local/bin:/usr/ucb:/usr/bin:/bin:.openpath: pathname too long (ignored)
	Directory "%.*s"%s
	File "%.*s"%s
rb_enc_from_encoding_index(%d): not created yetwrong argument type %li (expected Encoding)encoding %s is already registeredcannot set encoding on non-encoding capable objectencoding index out of bound: %dwrong encoding index %d for %s (expected %d)failed to load encoding (%s); use ASCII-8BIT insteadinvalid encoding name (non ASCII)invalid encoding name (NUL byte)incompatible character encodings: %s and %sdefault external can not be nilsetting Encoding.default_externalsetting Encoding.default_internalinvalid encoding name: %stoo many encoding (> %d)enc/%s.sofailed to replicate encodingfailed to load encoding (%s)encoding %s is not registeredinternal_encodingexternal_encodingunknown encoding name - %lifilesystemBINARY (ASCII-8BIT)unknown encodingempty stringinvalid byte sequence in %sinvalid codepoint 0x%x in %s (autoload) (dummy)broken Encoding#<%li:%s%s%s>localedummy?ascii_compatible?name_listaliasesdefault_externaldefault_external=default_internaldefault_internal=locale_charmapUTF-16BEUTF-16LEUTF-32BEUTF-32LEUTF-16UTF-32UTF8-MACEUC-JPWindows-31J��������������������������������������������both pattern and block are givensymbols beginning with an underscore are reservedinvalid sizeinvalid slice sizeto_enum%s%s reenteredsort_by reenterednegative size (%ld)too big sizeEnumerabledetectinjectreducegroup_bytallyfirstmin_byminmax_bymember?each_with_indexeach_entryeach_sliceeach_conseach_with_objectchunkslice_beforeslice_afterslice_whenchunk_while_alonechunk_categorizechunk_enumerablesliceafter_enumsliceafter_patsliceafter_predslicebefore_enumerableslicebefore_sep_patslicebefore_sep_predslicewhen_enumslicewhen_invertedslicewhen_preduninitialized producer#<%li: uninitialized>#<%li: ...>#<%li: %+li>uninitialized productuninitialized chainuninitialized yielderuninitialized generatoruninitialized enumeratoriteration reached an endunallocated yielderunallocated generatornon-symbol key inserted% li: %li, unallocated productunallocated chaincan't copy execution contextunallocated enumerator#<%li: %li#<%li: %+li(%s%li%s.feed value already setno block givenunallocated producer%+li out of rangeprivateenum_forEnumeratornext_valuespeek_valuespeekLazylazy_enumerable_map_enumerable_collect_enumerable_flat_map_enumerable_collect_concat_enumerable_select_enumerable_find_all_enumerable_filter_enumerable_filter_map_enumerable_reject_enumerable_grep_enumerable_grep_v_enumerable_zip_enumerable_take_enumerable_take_while_enumerable_drop_enumerable_drop_while_enumerable_uniq_enumerable_with_indexeagerforceStopIterationGeneratorYielderto_procProducerproduceChainProductArithmeticSequenceexclude_end?last===enumerator.soproc_entrytried to call lazy drop_while without a blocktried to call lazy take_while without a blocktried to call lazy reject without a blocktried to call lazy filter_map without a blocktried to call lazy select without a blocktried to call lazy flat_map without a blocktried to call lazy map without a blockwrong argument type %li (expected Proc)tried to call lazy new without a blockcannot get the last element of endless arithmetic sequence (08@H��������compile errorErrnoE2BIGEACCESEADDRINUSEEADDRNOTAVAILEADVEAFNOSUPPORTEAGAINEALREADYEBADEEBADFEBADFDEBADMSGEBADREBADRQCEBADSLTEBFONTEBUSYECHILDECANCELEDEXFULLEXDEVEUSERSEUNATCHEUCLEANETXTBSYETOOMANYREFSETIMEDOUTETIMEESTRPIPEESTALEESRMNTESRCHESPIPEESOCKTNOSUPPORTESHUTDOWNEROFSERFKILLERESTARTEREMOTEIOEREMOTEEREMCHGERANGEEPROTOTYPEEPROTONOSUPPORTEPROTOEPIPEEPFNOSUPPORTEPERMEOWNERDEADEOVERFLOWENXIOENOTUNIQENOTTYENOTSUPENOTSOCKENOTRECOVERABLEENOTNAMENOTEMPTYENOTDIRENOTCONNENOTBLKENOSYSENOSTRENOSRENOSPCENOPROTOOPTENOPKGENONETENOMSGENOMEMENOMEDIUMENOLINKENOLCKENOKEYENOEXECENOENTENODEVENODATAENOCSIENOBUFSENOANOENFILEENETUNREACHENETRESETENETDOWNENAVAILENAMETOOLONGEMULTIHOPEMSGSIZEEMLINKEMFILEEMEDIUMTYPEELOOPELNRNGELIBSCNELIBMAXELIBEXECELIBBADELIBACCEL3RSTEL3HLTEL2NSYNCEL2HLTEKEYREVOKEDEKEYREJECTEDEKEYEXPIREDEISNAMEISDIREISCONNEINVALEINTREINPROGRESSEILSEQEIDRMEHWPOISONEHOSTUNREACHEHOSTDOWNEFBIGEEXISTEDQUOTEDOTDOTEDOMEDESTADDRREQEDEADLKECONNRESETECONNREFUSEDECONNABORTEDECOMMECHRNGE%03d[BUG] 
%s

RUBY_CRASH_REPORT%s:%d: ; use %s instead:%+li is reserved for Ruby %s
%s: errno == 0 (NOERROR)%s: %s (%s)%s: %s (%d)undefined errno[ASYNC BUG] errno == 0 (NOERROR)
Assertion Failed: %s:to_tty?detailed_messagefull_messageset_backtracecauseSystemExitfatalSignalExceptionInterruptStandardErrorTypeErrorArgumentErrorIndexErrorRangeErrorScriptErrorSyntaxErrorLoadErrorNotImplementedErrorNameErrorlocal_variablesto_strNoMethodErrorprivate_call?RuntimeErrorFrozenErrorSecurityErrorNoMemoryErrorEncodingErrorCompatibilityErrorNoMatchingPatternErrorNoMatchingPatternKeyErrorSystemCallErrorcategorieswarncategoryexperimentalperformancestrict_unused_blockbottom:FSTRunknown category: %liinvalid category: %dmodule class an instance of invalid value for %s: %+liunknown errorinvalid instance type @ %lino key is availableno matchee is availableno receiver is availablenegative level (%ld)%s:%ld: warning: rb_sys_fail(%s) - errno == 0can't modify frozen %scan't modify frozen %li: , created at %li:%dNOERROREAUTHEBADARCHEBADEXECEBADMACHOEBADRPCECAPMODEEDEADLOCKEDEVERREDOOFUSEFTYPEEIPSECENEEDAUTHENOATTRENOPOLICYENOTCAPABLEEOPNOTSUPPEPROCLIMEPROCUNAVAILEPROGMISMATCHEPROGUNAVAILEPWROFFEQFULLERPCMISMATCHESHLIBVERSEWOULDBLOCKELASTwarning_bi53rb_warn_m_bi55name_err_mesg�� �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �@���0 �0 �0 �0 �0 �0 �0 �0 �0 ���0 �0 �0 ���backtrace must be an Array of String or an Array of Thread::Backtrace::LocationObjectClassModuleFloatStringRegexpArrayHashStructIntegerFileDataMatchDataComplexRationalniltruefalseSymbolIntegerundef<Memo><Node><iClass> and will be removed in Ruby %swrong argument type %li (expected %s)unknown type 0x%x (0x%x given, probably comes from extension library for ruby 1.8)unknown type 0x%x (0x%x given)undef leaked to the Ruby spaceSyntaxError#path changed: %+li (%p->%p)SyntaxError#path changed: %+li(%s%s)->%+li(%s)expected :top or :bottom as order: %+li%li() function is unimplemented on this machine[FATAL] rb_fatal() outside of GVL
rb_sys_fail_str(%s) - errno == 0rb_sys_fail_path_in(%s, %s) - errno == 0warning: literal string will be frozen in the future (run with --debug-frozen-string-literal for more information)
: info: the string was created here
string returned by :%s.to_s will be frozen in the future	 ... %ld levels...
%*ld: from %li
, maybe for Module.new__refined_class____refinements____defined_at__extend_objectappend_featuresincludedCannot include refinementincludeprepend_featuresprependedCannot prepend refinement__activated_refinements__exception object expectedException '%li' - %li
circular causes$! not setunhandled exceptioncan't modify frozen %s: %liUnknown longjmp status %dcalled without a blockmain.Module#%li:%d:in '%li': %li:%d: unexpected return
unexpected next
unexpected break
unexpected redo
unexpected throw
assigning non-exception to $!$@failglobal_variables__method____callee____dir__refineusingused_modulesused_refinementsimport_methodsmodule_functionnestingconstantsextenduntrace_varexception reenteredsignowrong argument type %li (expected Class or Module)Can't import method which is not defined with Ruby code: %li#%li%li has ancestors, but Refinement#import_methods doesn't import their methods%susing doesn't call the given block%s.wrong argument type %s (expected Module)Cannot extend object with refinementRefinement#include has been removedmain.%s in the wrapped load is effective only in wrapper moduleRefinement#prepend has been removedcan't pass a Proc as a block to Module#refineexception class/object expectedException '%li' at %s:%d - %li
Exception '%li' at %s - %li
method '%1$s' for module '%2$s' is method '%1$s' for class '%2$s' is method '%1$s' for module '%2$s' is privatemethod '%1$s' for class '%2$s' is privatemethod '%1$s' for module '%2$s' is protectedmethod '%1$s' for class '%2$s' is protectedundefined method '%1$s' for module '%2$s'undefined method '%1$s' for class '%2$s'undefined private method '%1$s' for module '%2$s'undefined private method '%1$s' for class '%2$s'undefined protected method '%1$s' for module '%2$s'undefined protected method '%1$s' for class '%2$s'main.using is permitted only at toplevelModule#using is not permitted in methodsModule#using is not called on selfonly cause is given with no argumentsretry outside of rescue clause
machine stack overflow in critical region ��0��P��p�����������������Traceback (most recent call last):
 (most recent capath name must be ASCII-compatible (%s): %li%s is unimplemented on this filesystemcouldn't find home for uid '%ld'non-absolute home of %.*s%.0liInsecure world writable dir %s in PATH, mode 0%onot opened for writinguninitialized File::StatcharacterSpecialblockSpecialsocketbirthtime#<%s: uninitialized>0%lo0x%lxpath name contains null byterecursive arraybcdefgGkloOprRsSuwWxXz=<>unknown command '%s%c'unknown command "\x%02X"resolvingnegative level: %duser %li doesn't existnon-absolute homeFileTestdirectory?readable_real?world_readable?writable_real?world_writable?executable?executable_real?file?size?grpowned?pipe?symlink?socket?blockdev?chardev?setuid?setgid?sticky?identical?lstatftypeatimelchmodlchownlutimesymlinkreadlinkrenameumaskmkfifoexpand_pathabsolute_pathabsolute_path?realpathrealdirpathbasenamedirnameextnameSeparatorsplitALT_SEPARATORPATH_SEPARATORflockConstantsRDONLYWRONLYRDWRAPPENDCREATEXCLNONBLOCKTRUNCNOCTTYBINARYSHARE_DELETEDSYNCRSYNCNOFOLLOWNOATIMEDIRECTTMPFILELOCK_SHLOCK_EXLOCK_UNLOCK_NBinordevrdev_majorrdev_minorblksizeblocksH�`�`�`�`�`�`�`�`�`�`�����`�`�`��0�`�`�`�`�`�`�`�`�`�P��������P�`�`�`�����`�`�����`�0�P�`�h�`�����`���rb_file_s_sizerb_file_s_statrb_file_s_lstatrb_file_s_ftyperb_file_s_atimerb_file_s_mtimerb_file_s_ctimerb_file_s_linkrb_file_s_symlinkapply2filessyserr_fail2_inrb_file_s_renamerb_file_s_truncaterb_file_s_mkfiforb_io_statrb_file_lstatrb_file_atimerb_file_mtimerb_file_ctimerb_file_birthtimerb_file_chmodrb_file_chownrb_file_truncaterb_file_flockrb_f_testrb_stat_initrealpath_recrb_check_realpath_internalrb_readlinkrb_file_sizerb_file_s_birthtime/dev/null[FATAL] gc_byimmediate_sweephave_finalizerneed_major_bynofreeoldgenshadyoldmallocnewobjcapinonemarkingsweepingweak_references_countmarking_timesweeping_timeheap_allocated_pagesheap_empty_pagesheap_allocatable_slotsheap_available_slotsheap_live_slotsheap_free_slotsheap_final_slotsheap_marked_slotsheap_eden_pagestotal_allocated_pagestotal_freed_pagestotal_allocated_objectstotal_freed_objectsmalloc_increase_bytes_limitminor_gc_countcompact_countread_barrier_faultstotal_moved_objectsold_objectsold_objects_limitoldmalloc_increase_bytesnon-hash or symbol giveninvalid string for %s: %s
%s=%f (default value: %f)
rgengc_allow_full_mark %s@%s:%d%s=%zd (default value: %zu)
T_OBJECTT_MODULET_FLOATT_STRINGT_REGEXPT_HASHT_STRUCTT_BIGNUMT_FILET_MATCHT_COMPLEXT_NILT_TRUET_FALSET_SYMBOLT_FIXNUMT_IMEMOT_UNDEFT_ICLASSexpected keyword argumentsimplementationnon-hash givenslot_sizeheap_eden_slotsforce_major_gc_countsize pool index out of rangeunknown key: %liGC %zu invokes.
GC_FLAGSGC_TIMEGC_INVOKE_TIMEHEAP_USE_SIZEHEAP_TOTAL_SIZEHEAP_TOTAL_OBJECTSMOVED_OBJECTSGC_IS_MARKEDconsideredmoved_upmoved_downException in finalizer %+limarkedwb_protecteduncollectiblepinnedRUBY_GC_HEAP_FREE_SLOTSRUBY_GC_HEAP_%d_INIT_SLOTSRUBY_GC_HEAP_GROWTH_FACTORRUBY_GC_HEAP_GROWTH_MAX_SLOTSRUBY_GC_MALLOC_LIMITRUBY_GC_MALLOC_LIMIT_MAXRUBY_GC_OLDMALLOC_LIMITRUBY_GC_OLDMALLOC_LIMIT_MAXattrestbmethodrefinedcfunczsuperoptimizednotimplemented%p is not symbol id value%+li is not id value%+li is recycled objectTOTALFREE,inv,cc,cmppubpripro<NULL> [inv][%s%s] len: %ld (embed) [shared] len: %ld len: %ld, capa: %zd "%.*s":%s id:%d(%p) id:%d-> %p[%c] %zdsrc:%s(too_complex) len:%zu(embed) len:%dlen:%d ptr:%pr:%d<%s> ruby_thread_has_gvl_p()gc.ccorrupted objectnon objectrb_obj_info_dump: %s
try to mark T_NONE objectvmend_procglobal_tblmachine_contextfinishrb_gc_mark(): %p is T_MOVEDrb_gc_mark(): %p is T_NONErb_gc_mark(): %p is T_ZOMBIEnot inmarking -> %s
during_gc != 0Cannot %s during GCtoo large allocation sizedfree != (RUBY_DATA_FUNC)1towarddouble_heapexpand_heap<OBJ_INFO:%s@%s:%d> %s
ObjectSpaceeach_objectundefine_finalizer_id2reffailed to allocate memory__id__object_idcount_objectsBASE_SLOT_SIZERVALUE_OVERHEADHEAP_PAGE_OBJ_LIMITHEAP_PAGE_BITMAP_SIZEHEAP_PAGE_SIZEHEAP_COUNTRVARGC_MAX_ALLOCATE_SIZERVALUE_OLD_AGEINTERNAL_CONSTANTSauto_compactauto_compact=latest_compact_infoverify_compaction_referencesverify_internal_consistencyProfilerenabled?raw_datatotal_timeOPTSUSE_RGENGCRGENGC_ESTIMATE_OLDMALLOCGC_ENABLE_LAZY_SWEEPGC_COMPACTION_SUPPORTEDgc_start_internalgc_enablegc_disablegc_stress_getgc_stress_set_mgc_statgc_stat_heapgc_config_get_bi321gc_config_set_bi349_bi353_bi365_bi377_bi387gc_info_decode: non-hash or symbol givenretained_weak_references_countremembered_wb_unprotected_objectsremembered_wb_unprotected_objects_limitoldmalloc_increase_bytes_limit%s=%f (default value: %f) is ignored because it must be greater than %f.
%s=%f (default value: %f) is ignored because it must be lower than %f.
heap_page_body_free: munmap failedCouldn't unprotect page %p, errno: %sCouldn't protect page %p, errno: %shash modified during iteration%s=%s is ignored because it overflows
%s=%zd (default value: %zu) is ignored because it must be greater than %zu.
rb_gc_impl_object_id: FL_SEEN_OBJ_ID flag set but not found in tableheap_name must be nil or an Integerforce_incremental_marking_finish_countIndex    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)
%5zu %19.3f %20zu %20zu %20zu %30.20f
rb_malloc_grow_capa: current_capacity=%zu, new_capacity=%zu, malloc_offset=%zucannot define finalizer for %swrong type argument %li (should be callable)finalizer references object to be finalizedobj_memsize_of(): GC does not handle T_NODE 0x%x(%p) 0x%lxobjspace/memsize_of(): unknown data type 0x%x(%p)heap_idx_for_size: allocation size too large (size=%zuu, heap_idx=%zuu)RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIORUBY_GC_HEAP_FREE_SLOTS_MAX_RATIORUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIORUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTORRUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIORUBY_GC_MALLOC_LIMIT_GROWTH_FACTORRUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTORrb_method_type_name: unreachable (type: %d)internal_object_p(): GC does not handle T_NODE 0x%x(%p) 0x%lx%+li is id of the unshareable object on multi-ractorrb_raw_obj_info(): GC does not handle T_NODE 0x%x(%p) 0x%lx[%s%s] len: %ld, capa:%ld ptr:%p:%s (%s%s%s%s) type:%s aliased:%d owner:%p defined_class:%p(mid:%s, flag:%x argc:%d, kwarg:%s)(klass:%s cme:%s%s (%p) call:%p[FATAL] failed to allocate memory
integer overflow: %zu * %zu > %zupush_mark_stack() called for broken objectpush_mark_stack: unexpected T_NODE objectrb_gc_mark(): unknown data type 0x%x(%p) %sCould not preregister postponed job for GCinteger overflow: %zu * %zu + %zu > %zumalloc: possible integer overflow (%zu*%zu)Object ID seen, but not in mapping table: %sFL_FINALIZE flag is set, but finalizers are not foundrb_gc_copy_finalizer: FL_FINALIZE set but not found in finalizer_table: %sverify_internal_consistency_reachable_i: WB miss (B->W) - %s -> %s
verify_internal_consistency_reachable_i: WB miss (O->Y) %s -> %s
Object %s points to MOVED: %p -> %sROOT %s points to MOVED: %p -> %sgc_move: object ID seen, but not in mapping table: %sread_barrier_handler: segmentation fault at %pcheck_rvalue_consistency: %p is in an empty page (%p).
check_rvalue_consistency: %p is not a Ruby object.
check_rvalue_consistency: %s is in tomb page.
check_rvalue_consistency: %s is T_NONE.
check_rvalue_consistency: %s is T_ZOMBIE.
check_rvalue_consistency: %s is not WB protected, but age is %d > 0.
check_rvalue_consistency: %s is uncollectible, but is not marked while !gc.
check_rvalue_consistency: %s is uncollectible, but not old (age: %d) and not WB unprotected.
check_rvalue_consistency: %s is remembered, but not old (age: %d).
check_rvalue_consistency: %s is marking, but not marked.
check_children_i: %s has error (referenced from %s)check_rvalue_consistency: %p is a special const.
rb_gc_impl_objspace_reachable_objects_from_root() is not supported while during GCrb_gc_mark() called for broken objectrb_gc_mark(): GC does not handle T_NODE 0x%x(%p) 0x%lxrb_objspace_reachable_objects_from() is not supported while during GCverify_internal_consistency_i: T_ZOMBIE has extra flags set: %s
verify_internal_consistency_i: FL_FINALIZE %s but %s finalizer_table: %s
gc_verify_internal_consistency: found internal inconsistency.freelist slot expected to be T_NONE but was: %s
page %p's has_remembered_objects should be false, but there are remembered old objects (%d). %spage %p's has_remembered_shady should be false, but there are remembered shady objects. %spage %p's final_slots should be %d, but %dheap_pages_final_slots: %zd, total_freed_objects: %zd
inconsistent live slot number: expect %zu, but %zu.inconsistent old slot number: expect %zu, but %zu.inconsistent number of wb unprotected objects: expect %zu, but %zu.inconsistent finalizing object count:
  expect %zu
  but    %zu zombies
  heap_pages_deferred_final list has %zu items.lazy sweeping underway when freeing object spaceobj_free() called for broken objectobj_free(): GC does not handle T_NODE 0x%x(%p) 0x%lxgc_sweep(): unknown data type 0x%x(%p) 0x%lxT_MOVED shouldn't be seen until compaction is finishedgc_is_moveable_obj: unreachable (%d)heap_page_body_allocate: munmap failed for startheap_page_body_allocate: munmap failed for endsame heap page is allocated: %p at %lugc_profile malloc or realloc missinteger overflow: %zd * %zd + %zd * %zd > %zdcannot create a new page after GCcannot create a new page after major GCobject allocation during garbage collection phaseundefining the allocator of T_DATA class %liCannot wrap an embeddable TypedDatacalloc during GC detected, this could cause crashes if it triggers another GCEmbeddable TypedData must be freed immediately�z�`z� z��y��y�`y� y��x��x�`x� x��w��w�`w� w��v��z��v�`v� v��u��u�`u��z��z��z� u��t��t�pt�0t���������t��d��T��D��4��$�����������Ԙ�Ę����������������t��d��T�����������D�����4��$�����Y����������X������(��8��X��������Ȣ�(��X��X���Y��Y��Y��Y�X���Y��Y��Y��Y��Y�p��ܣ����X��X��d��t��������������IJ�Բ�����D��T��T��\��������T�����T��������T��T��T�����T��T��T��T��T��T��T��L��T��T��T��T��T��<���Y����T��,����P�P�P�P�P���P�P�P�P�P�P�,[�P�P���,[�P�P�P�P�0�� ����0�`��������h�������X�������������������������������h��[��3�4�4�T3��4��4��4��4��4�$5��5��2�<5�T3�T3��[��[��[��[�T3��[��[��[��[��[��5��[�\5��[�T3��Q�Y��S��S��Q�Z�S�xW�X�`Z��Q��N��V��X��R��R��[��Q��[��[�S��Q��[��[��[��[��V��Q� V��[��Q�eQ��X�TS�TS�\Q��Y��R��V��W��Y�\Q�TN�|V�X�$R�$R�[�eQ�[�[��R�eQ�[�[�[�[�dV�eQ��U�[�eQ��P�X�qR��R��P�Y�R��V�W�hY��P��M�V��W��Q��Q��Z��P��Z��Z�R��P��Z��Z��Z��Z��U��P�(U��Z��P�rb_memerrorrb_data_object_wrap�������?��&�.>@�@\��(\�?$@(temporary intercan't add a new key into hash during iterationCannot dup ENV, use ENV.to_h to get a copy of ENV as a hashhash representation was changed during iterationrehash occurred during iterationbad environment variable %s: ASCII incompatible encoding: %sbad environment variable %s: contains null byteret: %d, hash modified during iterationdefault_proc takes two arguments (2 for %d)wrong default_proc type %s (expected Proc)can't replace hash during iterationcompare_by_identity during iterationCannot clone ENV, use ENV.to_h to get a copy of ENV as a hashwrong element type %s (expected array)element has wrong array length (expected 2, was %ld)odd number of arguments for Hashwrong element type %s at %ld (expected array)invalid number of elements (%ld for 1..2)cannot freeze ENViteration level underflow => too much nested iterationskey not found: "%li"{}{key not found: %lirehash during iteration{...}unsetenv(%s)rehashto_hashstoredefault=default_procdefault_proc=each_valueeach_keyeach_pairtransform_keystransform_keys!transform_valuestransform_values!fetch_valuesexceptinvertmerge!mergehas_key?has_value?compare_by_identitycompare_by_identity?ruby2_keywords_hash?ruby2_keywords_hashinitialize_cloneinitialize_duprb_hash_init���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
�����Q��Q��Q��Q�����Q��Q��Q��Q��Q��Q��8��8��8�����8�����\��������������L��������������������L��L��L��l��L����d��������������T�����������������������������������3��|��������������l�����������������������������������������<��<��<��<�����<��<��<��<��<��<�����������$�����{���������������������������������������������$��$��$��$�����$��$��$��$��$��$������������������L��������������<��������������������Y��Y��Y��l��Y���|���������\�����������������������TZ����callcachecallinfoconstcachecrefenvifuncparser_strtermsvarthrow_datatmpbufimemo_ast is obsolete�E��E��E��E�F�F�$F�4F�DF�TF�dF�tF��E��E��G��G��G��G��G��G��G��G��G�bQ��G��G��G��G�4I��H��J�lJ�|J��I��I�,J�<J�8Q��H��H�I��H�H�tH�K�K��J�tH��J�tH�tH�tH�tH��J�L�L�L�L�L�L�<L�,L�L��P�L��K�L�L�negative buffer size (or size too big)ungetbyte failedARGFchomptoo few arguments for syscalla+w+r+invalid access oflags 0x%xab+rt+rb+wt+xwtwbwxwtxwbxwb+xwt+wb+w+xat+invalid access fmode 0x%xtextmode specified twicebinmode specified twicepollfd %d/proc/self/statusFDSize:end of file reacheduninitialized streamsysseek for buffered IOUnsupported advice: %+li%li (%ld, %ld, %li)advice must be a Symbolsyswrite for buffered IOrwread_writereadable_writableunsupported mode: %litimeout given more than oncelseekcopy_file_rangesendfilefd:%d too long characternot opened for readingsysread for buffered IObroken separatorrs modifiedinvalid limit: 0 for foreachungetc failednegative length %ld given%s() not implementedputcfstatflush failedencoding conversion is setencoding is set to %s alreadyinvalid access mode %sto_intperm specified twiceencoding specified twiceruby_popen_writer(%s): %s
putsno stream to set encodingno stream to set positionno stream to rewindno stream to seekno stream to tellreadlineseach_codepointeach_chareach_byteeach_lineno stream<STDIN><STDOUT><STDERR>@tied_io_for_writingtoo many argumentsto_openIO.popen4.0negative offset %ld givenreinitializing Fileread would blockwrite would blockIOErrorEOFErrorflushreadpartialprintdisplayTimeoutErrorREADABLEWRITABLEPRIORITYEAGAINWaitReadableEAGAINWaitWritableEWOULDBLOCKWaitReadableEWOULDBLOCKWaitWritableEINPROGRESSWaitReadableEINPROGRESSWaitWritablesysopenbinreadbinwritecopy_stream$,$/$-0$\$_reopensyswritesysreadto_iotimeout=fsyncfdatasyncsync=lineno=readcharreadbyteungetbyteungetcSEEK_SETSEEK_CURSEEK_ENDSEEK_DATASEEK_HOLEeof?close_on_exec?close_on_exec=close_readclose_writeisattybinmodebinmode?sysseekadviseioctlfcntlset_encoding_by_bomautoclose?autoclose=wait_readablewait_writablewait_priority$stdin$stdout$>$stderrSTDINSTDOUTSTDERRARGF.classargvto_write_iofilenameskipinplace_modeinplace_mode=$<$FILENAME$-i$*permflagsopen_argstextmodeautoclosenormalsequentialwillneeddontneednoreuseio_read_nonblockio_write_nonblockio_readlineUnsupported encoding %li ignored%li::new() does not take block; use %li::open() insteadWe plan to remove a syscall function at future release. DL(Fiddle) provides safer alternative.too many arguments for syscallBOM with non-UTF encoding %s is nonsenseUnsupported encoding %s ignoredexclusive access mode is not supportedreturn value overflowed stringboth textmode and binmode specified%li must have %li method, %li givenASCII incompatible encoding needs binmodenewline decorator with binary modeASCII incompatible string written for text mode IO without encoding conversion: %srb_update_max_fd: invalid fd (%d) given.rb_maygvl_fd_fix_cloexec: fcntl(%d, F_GETFD) failed: %srb_maygvl_fd_fix_cloexec: fcntl(%d, F_SETFD, %d) failed: %srb_fix_detect_o_cloexec: fcntl(%d, F_GETFD) failed: %sencoding mismatch: %s IO with %s RSEvents must be positive integer!Timed out waiting for IO to become readable!Timed out waiting for IO to become writable!byte oriented read for character buffered IOinvalid limit: 0 for readlinesinvalid limit: 0 for each_lineclosing non-duplex IO for writingclosing non-duplex IO for reading%+li%cwrite is outdated interface which accepts just one argumentcannot specify src_offset for non-IOexpected IO or #fileno, %li givenIgnoring encoding parameter '%li': %s_encoding is used%s can't change access mode from "%s" to "%s"setvbuf() can't be honoured for %liCan't do inplace edit for stdio; skippingCan't rename %li to %li: %s, skipping fileCan't remove %li: %s, skipping fileCan't set owner/group of %li to same as %li: %s, skipping fileCan't do inplace edit for stdioCalling Kernel#open with a leading '|'IO process creation with a leading '|'The given fd is not accessible because RubyVM reserves itinvalid read/write type passed to rb_readwrite_sys_fail: %deQ��O��P�8Q��P��P��P�(Q� P�io_read_nonblockio_write_nonblockio_reopenrb_io_reopenrb_io_syswriterb_io_sysreadrb_io_preadrb_io_pwriterb_io_fsyncrb_io_tellrb_io_seekrb_io_rewindrb_io_set_posrb_io_close_on_exec_prb_io_set_close_on_execrb_io_close_readis_socketrb_io_close_writerb_io_sysseekfinish_narg (closed)io_getpartialrb_sysopenfptr_finalize_flushswallowio_freadrb_io_set_nonblockio_fillbufrb_sys_fail_on_writeutf-bom|closed streamBuffer already locked!Buffer not locked!Buffer is locked!Zero-length mask given!Invalid type name!Could not allocate buffer!io_buffer_map_memory:mmapRuby:io_buffer_map_memoryLength can't be negative!
0x%08zx  %02xSize can't be negative!Flags can't be negative!Offset can't be negative!io_buffer_map_file:mmapInvalid negative file size!Mask overlaps source buffer!Buffer is not writable!Buffer is invalid!Buffer has been invalidated! %p+%zd EXTERNAL INTERNAL MAPPED FILE SHARED LOCKED PRIVATE READONLY SLICE INVALIDWidth can't be negative!Width must be at least %zu!Count can't be negative!Cannot resize locked buffer!rb_io_buffer_resize:mremaprb_io_buffer_resize:reallocLockedErrorAllocationErrorAccessErrorInvalidatedErrorMaskErrorRUBY_IO_BUFFER_DEFAULT_SIZEhexdumpvalid?LITTLE_ENDIANBIG_ENDIANHOST_ENDIANNETWORK_ENDIANnull?external?internal?mapped?shared?locked?private?readonly?lockedresizeU8S8u16U16s16S16u32U32s32S32u64U64s64S64f32F32f64F64size_ofget_valueget_valuesset_valueset_valuesget_stringset_string^and!xor!not!IO::BufferSpecified offset+length is bigger than the buffer size!The given offset is bigger than the buffer size!Type extends beyond end of buffer! (offset=%zd > size=%zd)IO::Buffer is experimental and both the Ruby and C interface may change in the future!Cannot transfer ownership of locked buffer!
(and %zu more bytes not printed)The given source offset is bigger than the source itself!The computed source range exceeds the size of the source buffer!Argument buffer_types should be an array!Argument values should be an array!Argument buffer_types and values should have the same length!Cannot resize external buffer!@%dlabel_%luinline_const_cachepeephole_optimizationtailcall_optimizationspecialized_instructionoperands_unificationinstructions_unificationdebug_frozen_string_literalcoverage_enableddebug_levelplainunsupported iseq type: %dload_iseqtranslate<main>func_ptrunknown exception type: %dcode_locationparse.yb_callb_return<%li:%li@%li:%d>keyrestnokeykeyrequnknown defined type %dconstant-from:$%c:$%d<ic:%td ::%s<is:%td>argc:%dkw:[%li]ARGS_BLOCKARGARGS_SIMPLETAILCALLKWARGKW_SPLATKW_SPLAT_MUTFORWARDINGOPT_SEND<calldata!%li><cdhash><funcptr><builtin!%s/%d>ARGS_SPLATmid:%liARGS_SPLAT_MUTCbrCliRsBrBcCrCcReCaEnClLi%04zu %-*s %*s(%4d)[%s%s%s%s%s%s%s%s%s%s%s%s]BlockAnonKwrestPostAnonRestAmbiguousArg== disasm: #<ISeq: uninitialized> LEAF SINGLE_NOARG_LEAF INLINE_BLOCK C_TRACE== catch table
unknown catch type: %dOpt=%ld%s%s%s%s%s%s[%2d] <%s>unsupported type: :%liInstructionSequencedisassembleto_binaryload_from_binaryload_from_binary_extra_database_labeltrace_pointscompilecompile_parseycompile_prismcompile_file_prismcompile_filecompile_optioncompile_option=label_wrappertmpsetT_IMEMO/iseqwrong iseq wrapper: %li for %puninitialized InstructionSequenceattempt to evaluate dummy InstructionSequencetrace_instrument: invalid insn address: %pCompile option must be Hash/true/false/nilpm_iseq_compile_with_option: invalid frozen_string_literal=%dYARVInstructionSequence/SimpleDataFormat#<ISeq:%li@%li:%d (%d,%d)-(%d,%d)>| catch type: %-6s st: %04d ed: %04d sp: %04d cont: %04d
|------------------------------------------------------------------------
local table (size: %d, argc: %d [opts: %d, rest: %d, post: %d, block: %d, kw: %d@%d, kwrest: %d])
rb_vm_insn_addr2insn: invalid insn address: %prb_vm_insn_addr2opcode: invalid insn address: %p�������������3�0�x2�0��0�J2�0��1�1�3�41�1�0��1��0�0��0�c/�L/�3�0��.�4�.0�`>�.0�.>�.0��>�.0��=�.0��=��S�T0�(T�T0�T0��T�T0��T��V��S�V�V�T0�U�U�T0�T0��U��U��S�T0�hS�m�0�m�0��l�0��l�0��l�0��g�nilinstance-variablelocal-variableglobal-variableclass variableconstantmethodyieldsuperselftruefalseassignmentexpression�

!#%')+,-/13578;<>?ACFGHJLMOQRSUVXZ\^bfhkmqtwz}��������������������������������������������������������	 !#%')+,/02357:;<>@ACEFGIJLNPRVZ\_aehknqsux{~�����������������������������������������������LNLNLNLNLNNNNIAIAIJIJKIIIIVNVVNNNNVVNNNVNNNNNNNNVVIAVNLLNISNISISCSCSCCVCVCVCCVCVINNNCSCSCNOOOOSTHOCCCCCCCCCCCCCCCCCVCVCCCCCCCRRNRNLLLLLNLNLNLNLNNNNIAIAIJIJKIIIIVNVVNNNNVVNNNVNNNNNNNNVVIAVNLLNISNISISCSCSCCVCVCVCCVCVINNNCSCSCNOOOOSTHOCCCCCCCCCCCCCCCCCVCVCCCCCCCRRNRNLLLL
$2EP[o�����������+9ENU^qz��������������� +8BN[inz��������'39?DMZdi{����������������
#,8AIZh�������.BVo������ 2BR_m}�������%4BTfz���������,:L]p�������		0	E	U	j	�	�	�	�	�	�	�	�		

,
7
O
^
n
}
�
�
�
�
�
�
�
�
�
!0DXix������.BVj�nopgetlocalsetlocalgetblockparamsetblockparamgetblockparamproxygetspecialsetspecialgetinstancevariablesetinstancevariablegetclassvariablesetclassvariableopt_getconstant_pathgetconstantsetconstantgetglobalsetglobalputnilputselfputobjectputspecialobjectputstringputchilledstringconcatstringsanytostringtoregexpinternnewarraypushtoarraykwsplatduparrayduphashexpandarrayconcatarrayconcattoarraypushtoarraysplatarraysplatkwnewhashnewrangepopdupdupnswapopt_reversetopnsetnadjuststackdefineddefinedivarcheckmatchcheckkeywordchecktypedefineclassdefinemethoddefinesmethodsendsendforwardopt_send_without_blockobjtostringopt_ary_freezeopt_hash_freezeopt_str_freezeopt_nil_popt_str_uminusopt_duparray_sendopt_newarray_sendinvokesuperinvokesuperforwardinvokeblockleavethrowjumpbranchifbranchunlessbranchnilonceopt_case_dispatchopt_plusopt_minusopt_multopt_divopt_modopt_eqopt_neqopt_ltopt_leopt_gtopt_geopt_ltltopt_andopt_oropt_arefopt_asetopt_aset_withopt_aref_withopt_lengthopt_sizeopt_empty_popt_succopt_notopt_regexpmatch2invokebuiltinopt_invokebuiltin_delegateopt_invokebuiltin_delegate_leavegetlocal_WC_0getlocal_WC_1setlocal_WC_0setlocal_WC_1putobject_INT2FIX_0_putobject_INT2FIX_1_trace_noptrace_getlocaltrace_setlocaltrace_getblockparamtrace_setblockparamtrace_getblockparamproxytrace_getspecialtrace_setspecialtrace_getinstancevariabletrace_setinstancevariabletrace_getclassvariabletrace_setclassvariabletrace_opt_getconstant_pathtrace_getconstanttrace_setconstanttrace_getglobaltrace_setglobaltrace_putniltrace_putselftrace_putobjecttrace_putspecialobjecttrace_putstringtrace_putchilledstringtrace_concatstringstrace_anytostringtrace_toregexptrace_interntrace_newarraytrace_pushtoarraykwsplattrace_duparraytrace_duphashtrace_expandarraytrace_concatarraytrace_concattoarraytrace_pushtoarraytrace_splatarraytrace_splatkwtrace_newhashtrace_newrangetrace_poptrace_duptrace_dupntrace_swaptrace_opt_reversetrace_topntrace_setntrace_adjuststacktrace_definedtrace_definedivartrace_checkmatchtrace_checkkeywordtrace_checktypetrace_defineclasstrace_definemethodtrace_definesmethodtrace_sendtrace_sendforwardtrace_opt_send_without_blocktrace_objtostringtrace_opt_ary_freezetrace_opt_hash_freezetrace_opt_str_freezetrace_opt_nil_ptrace_opt_str_uminustrace_opt_duparray_sendtrace_opt_newarray_sendtrace_invokesupertrace_invokesuperforwardtrace_invokeblocktrace_leavetrace_throwtrace_jumptrace_branchiftrace_branchunlesstrace_branchniltrace_oncetrace_opt_case_dispatchtrace_opt_plustrace_opt_minustrace_opt_multtrace_opt_divtrace_opt_modtrace_opt_eqtrace_opt_neqtrace_opt_lttrace_opt_letrace_opt_gttrace_opt_getrace_opt_ltlttrace_opt_andtrace_opt_ortrace_opt_areftrace_opt_asettrace_opt_aset_withtrace_opt_aref_withtrace_opt_lengthtrace_opt_sizetrace_opt_empty_ptrace_opt_succtrace_opt_nottrace_opt_regexpmatch2trace_invokebuiltintrace_opt_invokebuiltin_delegatetrace_opt_invokebuiltin_delegate_leavetrace_getlocal_WC_0trace_getlocal_WC_1trace_setlocal_WC_0trace_setlocal_WC_1trace_putobject_INT2FIX_0_trace_putobject_INT2FIX_1_&%s is already registered.o./<top (required)>cannot load such filecannot infer basepath$-I$LOAD_PATHresolve_feature_path$"$LOADED_FEATURESrequire_relativeautoloadautoload?Can not set autoload on singleton class$LOADED_FEATURES is frozen; cannot append featureloading in progress, circular require considered harmful - %s$:.so.omarshal data too shortinstance of IO needed%li does not refer to module%li does not refer to classMarshal.load reentered at %scan't dump anonymous %s % li% li can't be referred totoo many instance variablesbad symbolMarshal.dump reentered at %sdump format error (unlinked)singleton can't be loadednan-infclass %li not a structdump format error_load_datadump format error(0x%x)dump format error (bad link)%li is not enc_capableno allocatorlong too big to dumpe%dexceed depth limitcan't dump internal %s_dump() must return stringarray modified during dump_dump_datacan't dump %lican't dump anonymous ID %ldsingleton can't be dumpedmarshalMarshalMAJOR_VERSIONMINOR_VERSIONmarshal_compat_tableload_argdump_argcan't dump non-ascii %s name % lilong too big for this architecture (size 8, given %d)%li#%s returned same class instanceinstance variable removed from %li instanceinstance variable added to %li instanceprepended class %li differs from class %lidump format error (user class)struct %li not compatible (struct size differs)struct %li not compatible (:%li for :%li)class %li needs to have method '_load'instance of %li needs to have method 'marshal_load'class %li needs to have instance method '_load_data'can't override instance variable of class/module '%li'can't override instance variable of class '%li'can't override instance variable of module '%li'incompatible marshal file format (can't be read)
	format version %d.%d required; %d.%d givenincompatible marshal file format (can be read)
	format version %d.%d required; %d.%d giveninvalid byte sequence in %s: %+lidump format error for symbol(0x%x)dump format error (symlink with encoding)ruby2_keywords flag is given but %li is not a Hashcan't dump recursive object using _dump()singleton class can't be dumpedtoo big Bignum can't be dumpedcan't dump hash with default procno _dump_data is defined for class %liinstance variable 'E' on class %li is not dumpedinstance variable 'K' on class %li is not dumpedx����������������������������h��������������������8��h���������� ������������������p�������� ����������������8���������������������������������0��p�������������������������������������������������������(�������S���������������=��encodingNumerical argument is out of domain - lgammaNumerical argument is out of domain - gammaNumerical argument is out of domain - sqrtNumerical argument is out of domain - log2Numerical argument is out of domain - log10Numerical argument is out of domain - atanhNumerical argument is out of domain - acoshNumerical argument is out of domain - asinNumerical argument is out of domain - acosNumerical argument is out of domain - logMathatan2acosasinatanacoshasinhatanhloglog2log10sqrtcbrtfrexpldexphypoterferfclgamma�?�?@@8@^@��@��@��@&A��KA��A���A��2�A(;L4B�uwsB�uw�B���7�Bs��6C�h0�{CZA���C Ƶ�;(Dl�YaRwND0C7@@-DT�!	��y�PD�?���9��B.�?iW�
�@Unable to specify native size for '%c'Unable to specify endianness for '%c'Unable to use both '<' and '>' multiple timesDuplicated registration of memory view to %liUnable to parse item format at %zd in "%s"memory_view/exported_object_registryInvalid type character '%c'__memory_view__memory_view/entryh�x�(�x�(�x��(�x��x��x�x�(�x�H�x�x��x�x�x�x�x�x�x�x�x�x�x�x�h�(����x��(�x��x�H�x�x�(�x�H�x�x�H�x�h�P��P��������������������������������P���������p�����0������� �
�� �
���� �
�� �
�� �
��
�h �
�X �
��
�� �
��
��
��
��
��
��
��
��
��
��
��
��
�� �8 �8 �8 �
�� �
���
�X �
��
���
���
��
�X ��!�!��!�!�!�2"�!�m"�!�m"�!�!�"�!�!�!�!�m"�!�!�!�!�!�!�!�!�!�!�!�!�!��!�#�#�#�!�#�a#�!�A#�!�!�!�!��"�!�"�!�!�!�sSiIlLqQjJsSiIlLqQjJon_constant_state_changedon_update_referenceson_cme_invalidatetrace-exitsverify-ctxdump-disasmcall-thresholdexec-mem-sizeon_constant_ic_updateon_tracing_invalidate_allentry_stub_hitbranch_stub_hitCompilerrb_iseq_trb_control_frame_tHooksrjit_bi4_bi9rjit_stats_enabled_prjit_stop_statsrjit_trace_exits_enabled_p--rjit-exec-mem-size needs an argument--rjit-call-threshold needs an argumentargument to --rjit-stats is ignoredargument to --rjit-disable is ignoredargument to --rjit-trace is ignoredargument to --rjit-trace-exits is ignoredargument to --rjit-dump-disasm is ignoredargument to --rjit-verify-ctx is ignoredinvalid RJIT option '%s' (--help will show valid RJIT options)libcapstone has not been linked. Ignoring --rjit-dump-disasm.Disabling RJIT because RubyVM::RJIT::Compiler is not definedCould not preregister postponed job for RJIT--rjit-exec-mem-size=num  Size of executable memory block in MiB (default: 64).--rjit-call-threshold=num  Number of calls to trigger JIT (default: 10).--rjit-stats  Enable collecting RJIT statistics.--rjit-disable  Disable RJIT for lazily enabling it with RubyVM::RJIT.enable.--rjit-trace  Allow TracePoint during JIT compilation.--rjit-trace-exits  Trace side exit locations.cfp == GET_EC()->cfprjit_c.cRUBYVM_CFUNC_FRAME_P(cfp)Ruby:rjit_reserve_addr_spacemmap failedruby: yjit: mmap:total_samplesedgesrawframesrjit_crjit_enabled_p_bi12mprotect_writemprotect_exec_bi24_bi29dump_disasm_bi41_bi45_bi50_bi54_bi58_bi65_bi70_bi75_bi80_bi84_bi89_bi93_bi97_bi106_bi110rjit_for_each_iseq_bi118_bi123_bi129_bi133_bi142_bi147_bi155_bi162_bi166_bi170_bi176_bi182_bi186_bi190_bi195_bi203_bi212_bi218_bi224_bi229_bi234_bi239_bi245_bi249_bi254_bi263_bi268_bi282_bi287_bi292_bi296_bi304_bi308_bi312_bi318_bi323_bi327_bi331_bi341_bi346_bi354_bi355_bi356_bi357_bi358_bi359_bi360_bi361_bi362_bi363_bi364_bi366_bi367_bi368_bi369_bi370_bi371_bi372_bi373_bi374_bi375_bi376_bi378_bi379_bi380_bi381_bi382_bi383_bi384_bi385_bi386_bi388_bi389_bi390_bi391_bi392_bi393_bi394_bi395_bi396_bi397_bi398_bi399_bi400_bi401_bi402_bi403_bi404_bi405_bi406_bi407_bi408_bi409_bi410_bi411_bi412_bi413_bi414_bi415_bi416_bi417_bi418_bi419_bi420_bi421_bi422_bi423_bi424_bi425_bi426_bi427_bi428_bi429_bi430_bi431_bi432_bi433_bi434_bi435_bi436_bi437_bi438_bi439_bi440_bi441_bi442_bi443_bi444_bi445_bi446_bi447_bi448_bi449_bi450_bi451_bi452_bi453_bi454_bi455_bi456_bi458_bi459_bi460_bi461_bi462_bi463_bi464_bi465_bi466_bi467_bi468_bi469_bi470_bi471_bi472_bi473_bi476_bi480_bi484_bi488_bi492_bi496_bi500_bi504_bi508_bi512_bi516_bi520_bi524_bi528_bi532_bi536_bi540_bi544_bi548_bi552_bi556_bi560_bi564_bi568_bi572_bi576_bi580_bi584_bi588_bi592_bi596_bi600_bi604_bi608_bi612_bi616_bi620_bi624_bi628_bi632_bi636_bi640_bi644_bi648_bi652_bi656_bi660_bi664_bi668_bi672_bi676_bi680_bi684_bi688_bi692_bi696_bi700_bi704_bi708_bi712_bi716_bi720_bi724_bi728_bi732_bi736_bi740_bi744_bi748_bi769_bi770_bi772_bi774_bi775_bi777_bi780_bi781_bi784_bi794_bi795_bi796_bi802_bi803_bi805_bi807_bi808_bi809_bi812_bi818_bi819_bi820_bi822_bi824_bi825_bi827_bi830_bi833_bi834_bi836_bi842_bi843_bi845_bi847_bi848_bi849_bi852_bi862_bi863_bi864_bi870_bi871_bi872_bi873_bi874_bi875_bi881_bi882_bi883_bi889_bi891_bi892_bi893_bi906_bi908_bi912_bi913_bi923_bi924_bi925_bi926_bi927_bi933_bi934_bi935_bi941_bi942_bi943_bi944_bi945_bi946_bi952_bi953_bi954_bi955_bi956_bi957_bi963_bi964_bi965_bi966_bi967_bi969_bi971_bi972_bi977_bi983_bi984_bi985_bi986_bi987_bi988_bi994_bi995_bi996_bi997_bi1003_bi1004_bi1005_bi1007_bi1011_bi1021_bi1022_bi1023_bi1024_bi1025_bi1026_bi1027_bi1028_bi1034_bi1035_bi1036_bi1037_bi1038_bi1039_bi1045_bi1046_bi1047_bi1048_bi1049_bi1050_bi1051_bi1052_bi1053_bi1054_bi1055_bi1056_bi1057_bi1058_bi1059_bi1060_bi1061_bi1062_bi1063_bi1064_bi1066_bi1067_bi1068_bi1069_bi1070_bi1080_bi1081_bi1082_bi1083_bi1085_bi1087_bi1102_bi1103_bi1104_bi1105_bi1106_bi1107_bi1108_bi1109_bi1110_bi1111_bi1112_bi1113_bi1114_bi1115_bi1116_bi1117_bi1118_bi1119_bi1120_bi1122_bi1123_bi1124_bi1125_bi1126_bi1127_bi1128_bi1129_bi1130_bi1131_bi1132_bi1133_bi1134_bi1135_bi1136_bi1137_bi1139_bi1142_bi1143_bi1144_bi1145_bi1146_bi1147_bi1153_bi1154_bi1155_bi1156_bi1157_bi1158_bi1159_bi1165_bi1166_bi1167_bi1168_bi1169_bi1170_bi1171_bi1177_bi1178_bi1179_bi1180_bi1182_bi1185_bi1186_bi1187_bi1190_bi1191_bi1192_bi1194_bi1208_bi1209_bi1210_bi1216_bi1217_bi1218_bi1219_bi1225_bi1226_bi1227_bi1228_bi1234_bi1241_bi1249_bi1250_bi1251_bi1257_bi1258_bi1259_bi1260_bi1261_bi1262_bi1268_bi1269_bi1270_bi1276_bi1277_bi1278_bi1288_bi1289_bi1295_bi1296_bi1297_bi1298_bi1299_bi1300_bi1301_bi1302_bi1303_bi1304_bi1310_bi1311_bi1312_bi1313_bi1314_bi1315_bi1316_bi1317_bi1318_bi1319_bi1320_bi1321_bi1322_bi1323_bi1324_bi1325_bi1326_bi1327_bi1328_bi1329_bi1330_bi1331_bi1332_bi1333_bi1334_bi1335_bi1336_bi1337_bi1338_bi1339_bi1340_bi1341_bi1342_bi1343_bi1344_bi1345_bi1346_bi1347_bi1348_bi1349_bi1350_bi1351_bi1352_bi1353_bi1354_bi1355_bi1356_bi1357_bi1358_bi1359_bi1360_bi1361_bi1362_bi1363_bi1364_bi1365_bi1366_bi1367_bi1368_bi1369_bi1370_bi1371_bi1372_bi1373_bi1374_bi1375_bi1376_bi1377_bi1378_bi1379_bi1380_bi1381_bi1382_bi1383_bi1384_bi1385_bi1386_bi1387_bi1388_bi1389_bi1390_bi1391_bi1392_bi1393_bi1394_bi1395_bi1396_bi1397_bi1398_bi1399_bi1400_bi1401_bi1402_bi1403_bi1404_bi1405_bi1406_bi1407_bi1408_bi1409_bi1410_bi1411_bi1412_bi1413_bi1414_bi1415_bi1416_bi1417_bi1418_bi1419_bi1420_bi1421_bi1422_bi1423_bi1424_bi1425_bi1426_bi1427_bi1428_bi1429_bi1430_bi1431_bi1432_bi1433_bi1443_bi1444_bi1445_bi1446_bi1447_bi1448_bi1449_bi1450_bi1451_bi1461_bi1462_bi1463_bi1464_bi1465_bi1466_bi1467_bi1468_bi1469_bi1470_bi1471_bi1472_bi1473_bi1474_bi1475_bi1476_bi1477_bi1478_bi1479_bi1480_bi1481_bi1482_bi1483_bi1484_bi1485_bi1486_bi1487_bi1489_bi1491_bi1492_bi1493_bi1494_bi1497_bi1498_bi1499_bi1501_bi1502_bi1503_bi1504_bi1505_bi1506_bi1507_bi1508_bi1509_bi1515_bi1516_bi1522_bi1523me->def->type == VM_METHOD_TYPE_CFUNCCouldn't make JIT page (%p, %lu bytes) executable, errno: %sRuby:rjit_reserve_addr_space:fallbackrjit_full_cfunc_returnNODE_SCOPENODE_BLOCKNODE_IFNODE_UNLESSNODE_CASENODE_CASE2NODE_CASE3NODE_WHENNODE_INNODE_WHILENODE_UNTILNODE_ITERNODE_FORNODE_FOR_MASGNNODE_BREAKNODE_NEXTNODE_REDONODE_RETRYNODE_BEGINNODE_RESCUENODE_RESBODYNODE_ENSURENODE_ANDNODE_ORNODE_MASGNNODE_LASGNNODE_DASGNNODE_GASGNNODE_IASGNNODE_CDECLNODE_CVASGNNODE_OP_ASGN1NODE_OP_ASGN2NODE_OP_ASGN_ANDNODE_OP_ASGN_ORNODE_OP_CDECLNODE_CALLNODE_OPCALLNODE_FCALLNODE_VCALLNODE_QCALLNODE_SUPERNODE_ZSUPERNODE_LISTNODE_ZLISTNODE_HASHNODE_RETURNNODE_YIELDNODE_LVARNODE_DVARNODE_GVARNODE_IVARNODE_CONSTNODE_CVARNODE_NTH_REFNODE_BACK_REFNODE_MATCHNODE_MATCH2NODE_MATCH3NODE_INTEGERNODE_FLOATNODE_RATIONALNODE_IMAGINARYNODE_STRNODE_DSTRNODE_XSTRNODE_DXSTRNODE_EVSTRNODE_REGXNODE_DREGXNODE_ONCENODE_ARGSNODE_ARGS_AUXNODE_OPT_ARGNODE_KW_ARGNODE_POSTARGNODE_ARGSCATNODE_ARGSPUSHNODE_SPLATNODE_BLOCK_PASSNODE_DEFNNODE_DEFSNODE_ALIASNODE_VALIASNODE_UNDEFNODE_CLASSNODE_MODULENODE_SCLASSNODE_COLON2NODE_COLON3NODE_DOT2NODE_DOT3NODE_FLIP2NODE_FLIP3NODE_SELFNODE_NILNODE_TRUENODE_FALSENODE_ERRINFONODE_DEFINEDNODE_POSTEXENODE_SYMNODE_DSYMNODE_ATTRASGNNODE_LAMBDANODE_ARYPTNNODE_HSHPTNNODE_FNDPTNNODE_ERRORNODE_LINENODE_FILENODE_ENCODINGunknown node: %d�{�4�,�$�����~��~��~��~��~��~��~��~�~�~�~�~�~�~�~�~�|~�t~�l~�d~�\~�T~�L~�D~�<~�4~�,~�$~�~�~�~�~�}��}��}��}��}��}��}��}�}�}�}�}�}�}�}�}�|}�t}�l}�d}�\}�T}�L}�D}�<}�4}�,}�$}�}�}�}�}�|��|��|��|��|��|��|��|�|�|�|�|�|�|�|�|�||�t|�l|�d|�\|�T|�L|�D|�<|�4|�,|�$|�|�|�|�|�{��{��{��{��{��{��{��{���������������������������������������������������������l������������������������������������������������������(internal variable: 0x%li)(null node)
| # statement sequence
| # example: foo; bar
statement #+- nd_head (%s%d):
nd_next (next block)+- %.*s:
| # if statement
nd_cond (condition expr)nd_body (then clause)nd_else (else clause)| # unless statement
end_keyword_loc ()+- %.*s: (%d,%d)-(%d,%d)| # case statement
nd_head (case expr)nd_body (when clauses)case_keyword_loc ()nd_body (in clauses)| # when clause
nd_head (when value)nd_body (when body)nd_next (next when clause)then_keyword_loc ()| # in clause
nd_head (in pattern)nd_body (in body)nd_next (next in clause)| # while statement
| # until statement
nd_cond (condition)nd_body (body)closing_loc ()| # method call with block
| # example: 3.times { foo }
| # for statement
nd_var (var)| # break statement
| # format: break [nd_stts]
| # example: break 1
nd_stts (value)| # next statement
| # format: next [nd_stts]
| # example: next 1
| # return statement
| # format: return [nd_stts]
| # example: return 1
| # redo statement
| # format: redo
| # example: redo
| # retry statement
| # format: retry
| # example: retry
| # begin statement
| # example: begin; 1; end
| # rescue clause
nd_head (body)nd_resq (rescue clause list)nd_else (rescue else clause)| # rescue clause (cont'd)
nd_args (rescue exceptions)nd_body (rescue clause)nd_next (next rescue clause)| # ensure clause
nd_ensr (ensure clause)| # && operator
| # example: foo && bar
| # || operator
| # example: foo || bar
nd_1st (left expr)| # multiple assignment
| # example: a, b = foo
nd_value (rhsn)nd_head (lhsn)nd_args (splatn)| # example: x = foo
nd_vid (local variable)nd_value (rvalue)| # example: @x = foo
nd_vid (instance variable)| # example: @@x = foo
nd_vid (class variable)| # example: $x = foo
nd_vid (global variable)| # constant declaration
| # example: X = foo
nd_else (extension)| # example: ary[1] += foo
nd_recv (receiver)nd_mid (operator)nd_index (index)nd_rvalue (rvalue)call_operator_loc ()opening_loc ()binary_operator_loc ()nd_vid (attr)message_loc ()| # example: foo &&= bar
| # example: foo ||= bar
| # example: A::B ||= 1
nd_head (constant)nd_aid (operator)shareability (shareability)| # method invocation
| # example: obj.foo(1)
nd_mid (method id)nd_args (arguments)| # example: foo + bar
| # function call
| # example: foo(1)
| # format: [nd_mid]
| # example: foo
| # safe method invocation
| # example: obj&.foo(1)
| # super invocation
| # format: super [nd_args]
| # example: super 1
| # format: super
| # example: super
| # list constructor
| # example: [1, 2, 3]
as.nd_alen (length)nd_head (element)nd_next (next element)| # empty list constructor
| # format: []
| # example: []
| # keyword arguments
| # format: [nd_head]
| # example: a: 1, b: 2
| # hash constructor
| # format: { [nd_head] }
0 (keyword argument)1 (hash literal)nd_head (contents)| # yield invocation
| # format: yield [nd_head]
| # example: yield 1
nd_head (arguments)| # local variable reference
| # format: [nd_vid](lvar)
| # example: x
| # format: [nd_vid](dvar)
| # format: [nd_vid](ivar)
| # example: @x
| # constant reference
| # example: X
nd_vid (constant)| # class variable reference
| # format: [nd_vid](cvar)
| # example: @@x
| # format: [nd_vid](gvar)
| # example: $x
| # format: $[nd_nth]
| # example: $1, $2, ..
nd_nth (variable)| # example: $&, $`, $', $+
string (string)| # example: /foo/ =~ 'foo'
nd_recv (regexp (receiver))nd_value (string (argument))nd_args (named captures)| # example: 'foo' =~ /foo/
nd_recv (string (receiver))nd_value (regexp (argument))| # string literal
| # format: [nd_lit]
| # example: 'foo'
| # xstring literal
| # example: `foo`
string (literal)| # integer literal
| # format: [val]
| # example: 1
val (val)| # float literal
| # example: 1.2
| # rational number literal
| # example: 1r
| # complex number literal
| # example: 1i
| # regexp literal
| # format: [string]
| # example: /foo/
| # once evaluation
| # format: [nd_body]
| # symbol literal
| # example: :foo
| # interpolation expression
nd_head (preceding array)nd_body (following array)nd_body (following element)| # splat argument
| # format: *[nd_head]
| # example: foo(*ary)
nd_head (splat'ed array)| # example: foo(x, &blk)
0 (no forwarding)1 (forwarding)| # method definition
nd_mid (method name)nd_defn (method definition)| # method alias statement
| # example: alias bar foo
nd_1st (new name)nd_2nd (old name)| # example: alias $y $x
nd_alias (new name)nd_orig (old name)| # method undef statement
| # example: undef foo
nd_undefs (nd_undefs)+- element (%s%ld):
| # class definition
nd_cpath (class path)nd_super (superclass)nd_body (class definition)| # module definition
nd_cpath (module path)nd_body (module definition)| # example: M::C
nd_mid (constant name)nd_head (receiver)| # format: ::[nd_mid]
| # example: ::Object
| # example: 1..5
| # example: 1...5
nd_end (end)| # self
| # format: self
| # example: self
nd_state (nd_state)| # nil
| # format: nil
| # example: nil
| # true
| # format: true
| # example: true
| # false
| # format: false
| # example: false
| # virtual reference to $!
| # format: rescue => id
| # example: rescue => id
| # defined? expression
| # example: defined?(foo)
nd_head (expr)| # post-execution
| # example: END { foo }
nd_body (END clause)| # attr assignment
| # lambda expression
| # format: -> [nd_body]
| # example: -> { foo }
nd_body (lambda clause)| # optional arguments
nd_next (next)| # post arguments
nd_1st (rest argument)nd_2nd (post arguments)| # method parameters
1 (excessed comma)| # new scope
nd_tbl (local table)(empty)| # array pattern
nd_pconst (constant)pre_args (pre arguments)rest_arg (rest argument)post_args (post arguments)| # find pattern
| # hash pattern
| # line
| # format: [lineno]
| # example: __LINE__
| # format: [path]
| # example: __FILE__
path (path)| # encoding
| # format: [enc]
| # example: __ENCODING__
enc (enc)dump_node: unknown node: %s (while-end)nd_iter (iteration receiver)nd_2nd (right expr)nd_head (variable)string (preceding string)nd_head (other arguments)nd_body (block argument)length (length)nd_beg (begin) (begin-end-while)nd_state (begin-end-while?)0 (see extension field)? # @ %s (id: %d, line: %d, location: (%d,%d)-(%d,%d))%s
| # format: [nd_head]; ...; [nd_next]
| # format: if [nd_cond] then [nd_body] else [nd_else] end
| # example: if x == 1 then foo else bar end
| # format: unless [nd_cond] then [nd_body] else [nd_else] end
| # example: unless x == 1 then foo else bar end
| # format: case [nd_head]; [nd_body]; end
| # example: case x; when 1; foo; when 2; bar; else baz; end
| # case statement with no head
| # format: case; [nd_body]; end
| # example: case; when 1; foo; when 2; bar; else baz; end
| # case statement (pattern matching)
| # example: case x; in 1; foo; in 2; bar; else baz; end
| # format: when [nd_head]; [nd_body]; (when or else) [nd_next]
| # format: in [nd_head]; [nd_body]; (in or else) [nd_next]
| # format: while [nd_cond]; [nd_body]; end
| # example: while x == 1; foo; end
| # format: until [nd_cond]; [nd_body]; end
| # example: until x == 1; foo; end
| # format: [nd_iter] { [nd_body] }
| # format: for * in [nd_iter] do [nd_body] end
| # example: for i in 1..3 do foo end
| # vars of for statement with masgn
| # format: for [nd_var] in ... do ... end
| # example: for x, y in 1..3 do foo end
| # format: begin; [nd_body]; end
| # format: begin; [nd_body]; (rescue) [nd_resq]; else [nd_else]; end
| # example: begin; foo; rescue; bar; else; baz; end
| # format: rescue [nd_args] (=> [nd_exc_var]); [nd_body]; (rescue) [nd_next]
nd_exc_var (exception variable)| # format: begin; [nd_head]; ensure; [nd_ensr]; end
| # example: begin; foo; ensure; bar; end
| # format: [nd_1st] && [nd_2nd]
| # format: [nd_1st] || [nd_2nd]
| # format: [nd_head], [nd_args] = [nd_value]
NODE_SPECIAL_NO_NAME_REST (rest argument without name)| # local variable assignment
| # format: [nd_vid](lvar) = [nd_value]
NODE_SPECIAL_REQUIRED_KEYWORD (required keyword argument)| # dynamic variable assignment
| # format: [nd_vid](dvar) = [nd_value]
| # example: x = nil; 1.times { x = foo }
| # example: 1.times { x = foo }
| # instance variable assignment
| # format: [nd_vid](ivar) = [nd_value]
| # class variable assignment
| # format: [nd_vid](cvar) = [nd_value]
| # global variable assignment
| # format: [nd_vid](gvar) = [nd_value]
| # format: [nd_else]::[nd_vid](constant) = [nd_value]
| # array assignment with operator
| # format: [nd_recv] [ [nd_index] ] [nd_mid]= [nd_rvalue]
| # attr assignment with operator
| # format: [nd_recv].[nd_vid] [nd_mid]= [nd_value]
| # example: struct.field += foo
| # assignment with && operator
| # format: [nd_head] &&= [nd_value]
| # assignment with || operator
| # format: [nd_head] ||= [nd_value]
| # constant declaration with operator
| # format: [nd_head](constant) [nd_aid]= [nd_value]
| # format: [nd_recv].[nd_mid]([nd_args])
| # format: [nd_recv] [nd_mid] [nd_args]
| # format: [nd_mid]([nd_args])
| # function call with no argument
| # format: [nd_recv]&.[nd_mid]([nd_args])
| # super invocation with no argument
| # format: [ [nd_head], [nd_next].. ] (length: [nd_alen])
| # example: { 1 => 2, 3 => 4 }
| # dynamic variable reference
| # example: 1.times { x = 1; x }
| # instance variable reference
| # format: [nd_vid](constant)
| # global variable reference
| # nth special variable reference
| # back special variable reference
| # match expression (against $_ implicitly)
| # format: [nd_lit] (in condition)
| # example: if /foo/; foo; end
| # match expression (regexp first)
| # format: [nd_recv] =~ [nd_value]
| # match expression (regexp second)
| # example: /foo#{ bar }baz/o
| # string literal with interpolation
| # example: "foo#{ bar }baz"
| # xstring literal with interpolation
| # example: `foo#{ bar }baz`
| # regexp literal with interpolation
| # example: /foo#{ bar }baz/
| # symbol literal with interpolation
| # example: :"foo#{ bar }baz"
nd_next->nd_next (tailing strings)| # format: "..#{ [nd_body] }.."
| # splat argument following arguments
| # format: ..(*[nd_head], [nd_body..])
| # example: foo(*ary, post_arg1, post_arg2)
| # splat argument following one argument
| # format: ..(*[nd_head], [nd_body])
| # example: foo(*ary, post_arg)
| # arguments with block argument
| # format: ..([nd_head], &[nd_body])
forwarding (arguments forwarding or not)| # format: def [nd_mid] [nd_defn]; end
| # example: def foo; bar; end
| # singleton method definition
| # format: def [nd_recv].[nd_mid] [nd_defn]; end
| # example: def obj.foo; bar; end
| # format: alias [nd_1st] [nd_2nd]
| # global variable alias statement
| # format: alias [nd_alias](gvar) [nd_orig](gvar)
| # format: undef [nd_undefs]
| # format: class [nd_cpath] < [nd_super]; [nd_body]; end
| # example: class C2 < C; ..; end
| # format: module [nd_cpath]; [nd_body]; end
| # example: module M; ..; end
| # singleton class definition
| # format: class << [nd_recv]; [nd_body]; end
| # example: class << obj; ..; end
nd_body (singleton class definition)| # scoped constant reference
| # format: [nd_head]::[nd_mid]
| # top-level constant reference
| # range constructor (incl.)
| # format: [nd_beg]..[nd_end]
| # range constructor (excl.)
| # format: [nd_beg]...[nd_end]
| # flip-flop condition (incl.)
| # example: if (x==1)..(x==5); foo; end
| # flip-flop condition (excl.)
| # example: if (x==1)...(x==5); foo; end
| # format: defined?([nd_head])
| # format: END { [nd_body] }
| # format: [nd_recv].[nd_mid] = [nd_args]
| # example: struct.field = foo
| # format: def method_name([nd_body=some], [nd_next..])
| # example: def foo(a, b=1, c); end
| # example: def foo(a:1, b:2); end
| # format: *[nd_1st], [nd_2nd..] = ..
| # example: a, *rest, z = foo
| # format: def method_name(.., [nd_ainfo.nd_optargs], *[nd_ainfo.rest_arg], [nd_ainfo.first_post_arg], .., [nd_ainfo.kw_args], **[nd_ainfo.kw_rest_arg], &[nd_ainfo.block_arg])
| # example: def foo(a, b, opt1=1, opt2=2, *rest, y, z, kw: 1, **kwrest, &blk); end
nd_ainfo.forwarding (arguments forwarding or not)nd_ainfo.rest_arg (rest argument)nd_ainfo.kw_rest_arg (keyword rest argument)| # format: [nd_tbl]: local table, [nd_args]: arguments, [nd_body]: body
| # format: [nd_pconst]([pre_args], ..., *[rest_arg], [post_args], ...)
| # format: [nd_pconst](*[pre_rest_arg], args, ..., *[post_rest_arg])
pre_rest_arg (pre rest argument)post_rest_arg (post rest argument)| # format: [nd_pconst]([nd_pkwargs], ..., **[nd_pkwrestarg])
nd_pkwargs (keyword arguments)nd_pkwrestarg (keyword rest argument)NODE_SPECIAL_NO_REST_KEYWORD (**nil)| # Broken input recovered by Error Tolerant mode
nd_brace (keyword arguments or hash literal)nd_next->nd_head (interpolation)nd_ainfo.block_arg (block argument)nd_ainfo.opt_args (optional arguments)nd_ainfo.kw_args (keyword arguments)nd_ainfo.pre_args_num (count of mandatory (pre-)arguments)nd_ainfo.pre_init (initialization of (pre-)arguments)nd_ainfo.post_args_num (count of mandatory post-arguments)nd_ainfo.post_init (initialization of post-arguments)nd_ainfo.first_post_arg (first post argument)###########################################################
## Do NOT use this node dump for any purpose other than  ##
## debug and research.  Compatibility is not guaranteed. ##
###########################################################

;��x��!����I��х���_x��}���|�M������u�˨�Q��������<��M���v���ŕ�ܥ�z�+����t�q�{������-����q��w�Zw�j����ю�C{���%����.u���������S��{��ڣ�Xv�`��0����/z�w��9��Ƣ�)q�o�on�Zk��j��i�h�Fm��d�6��m�p�*j�l��k��n�Nc�b��]�_��[��`��\��^�[�_Z�	Z�Y�3Y�_X�W�AW��V�Q��P�5Q�cP�O�O�nN�gM�BV�T�S�R�V�L�L��p�|   smallcoerce must return [x, y]invalid radix %ld%li.%li%c%lihalfeveninvalid rounding mode: % lito is given twicestep is given twice%li%li%li%li.%li(%li)not an Integer%-.10g0.e%+03ddivided by 0need to define '<=>' in %sstep must be numericstep can't be 0Unknown subclass for to_f: %sinvalid codepoint 0x%X in %s%u out of char range%ld out of char rangebignum out of char rangenegative radixout of domainZeroDivisionErrorFloatDomainErrorNumericsingleton_method_addednonzero?allbits?anybits?nobits?uptodowntosuccchrpowRADIXMANT_DIGMIN_EXPMAX_EXPMIN_10_EXPMAX_10_EXPMINEPSILONNANnan?next_floatprev_float_bi101_bi120_bi134_bi181_bi209_bi236_bi253_bi285_bi335integer %ld too %s to convert to 'short'can't define singleton method "%li" for %liinteger %ld too small to convert to 'unsigned int'integer %lu too big to convert to 'unsigned int'integer %ld too small to convert to 'unsigned short'integer %lu too big to convert to 'unsigned short'no implicit conversion of nil into Integerfloat %s out of range of integerno implicit conversion from nil to integerinteger %ld too %s to convert to 'int'integer %ld out of range of fixnumno implicit conversion from nilfloat %s out of range of long longno implicit conversion from stringno implicit conversion from booleanfloat %s out of range of unsigned long longThe beginless range for Integer#[] results in infinitywrong argument type %s (expected Integer)Numerical argument is out of domain - "isqrt"-Infinity@�<�C @aU��N�ڿ�?compared with non class/modulecan't inherit uninitialized class%li does not have #dig methodoptional boolean argument is obsoletedinvalid value for Float(): %+listring for Float contains null bytecan't convert false into Floatuninitialized class variable %1$s in %2$sinvalid class path encoding (non ASCII)%li does not refer to class/moduleunexpected value for freeze: %liinitialize_copy should take same class objectcan't convert %li to %s (%li#%s gives %li)base specified for non string valuecan't convert nil into Integer[bug] frozen object (%s) allocatedinvalid kwfreeze passed to mutable_obj_clonecan't instantiate uninitialized classcan't create instance of singleton classcalling %li.allocate is prohibitedno implicit conversion to float from nilno implicit conversion to float from trueno implicit conversion to float from falseno implicit conversion to float from stringclass or module requireduninitialized classFloat %.*s%s out of range#<%li:%p>-<%li:%pcan't convert nil into Floatcan't convert true into Floatcan't unfreeze %liwrong instance allocationno implicit conversion ofcan't convert%s %s into %s%s %li into %s#<refinement:#<Class:%li=allocator undefined for %lican't convert %s into Hashequal?!=singleton_method_removedsingleton_method_undefinedKernelconst_addednil?!~singleton_classitselfsingleton_methodsprotected_methodsprivate_methodspublic_methodsinstance_variablesinstance_variable_getinstance_variable_setinstance_variable_defined?remove_instance_variableinstance_of?kind_of?is_a?NilClass=~included_modulesset_temporary_nameancestorsattrattr_readerattr_writerattr_accessorpublic_instance_methodsprotected_instance_methodsprivate_instance_methodsundefined_instance_methodsconst_getconst_setconst_defined?const_source_locationremove_constconst_missingclass_variablesremove_class_variableclass_variable_getclass_variable_setclass_variable_defined?public_constantprivate_constantdeprecate_constantsingleton_class?subclassesattached_objectTrueClassFalseClasskernelnilclass_bi20rb_obj_clone2_bi69_bi124_bi163rb_f_float1rb_f_floatrb_f_integer1rb_f_integer�����
expected true or false as %s: %+lito_int�ary�str�sym�hash�proc�io
a
s!
i1
fA
rQ
invalid attribute name '%1$s'wrong constant name %1$s'%1$s' is not allowed as a class variable name'%1$s' is not allowed as an instance variable name'%c' allowed only after types %sunknown %s directive '%s' in '%li'malformed UTF-8 character (expected %ld bytes, given %ld bytes)too short buffer for P(%ld for %ld)can't compress negative numbersCan't use both '<' and '>'encodes() buffer overrun\x%.2xnon associated pointeroffset can't be negativeoffset outside of stringpack length too big%% is not supportedmalformed UTF-8 characterredundant UTF-8 sequenceinvalid base64@ outside of stringX outside of stringx outside of stringno associated pointerpack(U): value out of rangebuffer must be String, not %sformat string modified@XxuPMmbuffer size problem?pack_packpack_unpackpack_unpack1�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;��0��/�@2�2�@)��2��0�L3�(�(��'�;��'�-�.�;�h/��'�;��'�;��.�(�;�)�;��)�;�;�;�;�;�;�K*�*�+�@)�%+��0�+�.0�0�&�;�&��3�~1�;�1�&�;��.�;�0,��'�(�5�T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�'T�2M�N�N�`M�mM�L�G�bG�N�C��B�'T�bF�H�H�'T�+L��B�'T�C�'T�	E�C�'T�J�'T�N�'T�'T�'T�'T�'T�'T�N�N�`M�mM�I�G�H�N�C��B�'T�bF�K��H�'T�yF��B�'T�C�'T�K�C�9J��C�Q�P�cQ�cQ�cQ�cQ�cQ�O�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�cQ�Q�cQ�cQ�cQ�cQ�cQ�cQ�Q�qO�cQ�cQ�cQ�cQ�cQ��N�"Q��O��P��P��P��P��P�VO��P��P��P��P��P��P��P��P��P��P��P��P��P��P��P��P��P�"Q��P��P��P��P��P��P�"Q��N��P��P��P��P��P�+N�� �0123456789ABCDEFABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_too few argumentssSiIlLqQjJ���������GpS�S�`S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�W�W�W�W�X�Y�Y�Y�Y�TX�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�X�Y�Y�Y�Y�Y�Y�Y�X��X�X�Y�XY�Y�Y�X��Y��Y��Y��Y�Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y��Y�X��Y��Y��Y��Y��Y��Y��Y�@Y�X��Y�Z�Z�Z�Z�Z�Z�T[�T[�T[�T[�T[�T[�T[�[��[��[��[��[�[�[�D\�D\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�\\�<\�<\�L\�D\�<\�T\�D\�\\�\\�\\�D\�D\�e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�@f�@f�@f�@f�de�@f�@f�@f�=e�=e�=e�e�e�e�e�e�e�=e�=e�=e�e�e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�=e�e�e�e�f�=e�=e�f�$f�4f��e�=e��e�=e�e�=e�=e�=e�=e�=e�=e�=e�e�e�e�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��j��j�k�(k�Hk��k��k��k��k�hk��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k�k��k��k��k��k��k��k��k�k��k�j�4��̕�K��K����K��K����K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��K��4��̕�K��K����K��K��������L��L����������������������3��3��3��3��������|��������������������������������������������������3��ȴ�(��ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ���ȴ�ȴ�ȴ�`��`��ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�`��`��`��`������ȴ�ȴ���е�h��ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�x��x��ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�0��0��ȴ�ȴ�ȴ�ȴ�ȴ�ȴ�`����`���������������������������������������������������������������������������������������������������~��r��f�������������������������������Z��N��B��6��*����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������v��j��^��R��F��:��.��"����
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������z��n��b��V��J��>��2��&��������������������������������~��r��f��Z��N��B��6��*����������������������������������v��j��^��R��F��:��.��"����
�����������������������������z��n��b��V��J��>��2��&��������������������������������~��r��f��Z��N��B��6��*��������������������N����������������������������������������������������������������������������������������������������������������������������$��$��$��$��$��$��$��$��d��d��d��d��d��d��d��d��d��d��d����d��d��d��d��d��d��d��d��d����d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��t������d��T�����d��d��d��d��d��d��d����d��d��d�����d�����d��D��d����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������h���x�����������������H�������4�4�4�4�4�4�4�4�4�4�4�4�$�t��� ��x����H�������������	�	�	�	�	�	�	�	�	�	�	�	�	�$	�D	�L�
�
��	�
�
�
�	�
�
�
�	�
�h	������������������������������������������������������������������������������������������������������������������=�1?�7��6�6�e6�G6�5��������������������������������������������������������������������������������������������������������������2�=2��1�1�81����0��0�30��/��/���./��.�.��).��-�����$-���,�v,���,��+�q+�+��*�l*�*�)�g)�)�(�b(�(�'���'���X&�&������$�$���#����#�I#��"�"�D"��!�!��?!�� � �: ����5����������������0�������+���������������}�&���x�!�������������f��i����������_������Z����U����P����K��������F���E�EE��D�D���@D���C�6B��A�A�1A��@�G�F�F�JF���������t9��:�';�~;�J���
�d�n�s�N$�S%�%�&�]'��{-��2�B3�3��3�G4�4�4�L5�5�,>�>��>�~?�@��?�,@������o8��8�9����9�":�y:��������;�,<�<���<�1=�=�j7��^J�7�8�I�YI�I���������OG�G���TH�H��������������B���B�;C�C��������������������E��N�LM�N�lN�N�N�����!��V������4��T����L��۲�²���������ѳ���f��D��	��������C��*��*�����������������}�����9��P��������	�����������W��&�������<����I����x����Ŷ���s������#����������ʹ���G������ʠ�������4��W��3������l��R��������������\����W���������3��3�������P�����R����������E����+������w��R��$������a��/��j��������R��$������+��]���X�����ڞ���h��������;��������њ�����o��U��;��!������ә�������k��Q��7��������Ϙ�������g��M��3��������˗�����}������������������������������������������������������������������������������������M����Ζ���2����?����q������3��������]��'��������O����Ï���[��%��������������̜���F����ޛ�b��,����9��֍�b����Ռ���)��������߫�ū���1������ê�������<��ک���X��>��������è�������`������s������������m����Ԥ���p��W��'������;��������ۢ�����������������������U����;���������H��+�������g��:�������y��'��������/�������s��������3�3��2�i2�2������k���������������0�0�M0�/�/�P/��.�.�6�lT�{1�.1�6�k6�������4�T4�4��3�~5�=5�����5�1��5�p��S��������������������������������d�������H����v��8����������������q�����y����e����������x��_��8������u��6������b��$��������������[�����������T��:�� ����������������b��R������j���������������[����X��`���������5����h����2�>��
���s�/��������������P�q�p��������
���8
��	��	�	�	���	����������������8����U�
���v�#���c�+��[���h�������)���O�5����\��2���#�#���6#�"��!���,!�!� �� ���� ���l � ���������q�������������������,&����%�%�Y%�%��$�$�j$�(���a(�^)���k&���"��������������� (���,�*�����)���)�-����,�Y-������F����������{�a�B.�(.��-��-�'���L'��&�&�.�-���������������W����������������������������������k��Q��7����_��E��y��خ�����������­�r����ܭ�������"��	������X��-��P�����b��I���������|��:��������?����T������S����غ�S��ɹ�Ž�z��߽�������޼�V����Ѹ���{������1�����P�������������������������W��"��	��I�������x���������k��������c����d����������������������������������������(������3����H��H�k�����H��H�ܤ���������s��L��������y��A����������G��7����۱�۳�����A��7����>��>����%���������(���H�������b���H�/���������2�����@������� ����m���H����H��H�˩������H��H�u��?����]��C��r����h���H�z���������������f�������H��H��H���x��-����������z��5����s��*����=�����H����H�@������B��O������8����e������H������i�����������H��	���������f��(�������v��E��������Q�������H���@�����H��H��H����H�R���H�y��`��5�� ������ҍ�������j��P��6��������Ό�������f��L��2��������ʋ�����|��b��H��.���H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H���Ċ�v��(��ډ�����X������g��ۆ�O��Ņ�;����τ���c��-������k��9����͂���a���H���h��2��t��>��������
��ԑ�+����~��
�������H���|�ğ�����v��8��ٞ�Ş���t��G���H�6������^�����������H�t���H��H�Z������V��$����(���H���n��������k������ϗ���W�����H��H�����?���H��H��H��H��H��H��H��H��H��H�����������2���������S���������l��!�����f��6���H����H�����z����A'�&�&�&�%�o��2����������}��`��t$�W$�#�#�G#�"�r"�N"�*�H�#%��$�U*�*���1��(�'�'�x'�&)��(�^����)�e%�)������H��H��H��H��H��H����H����H��H�R����1�������x����������������H������H�z��"����!��5��
��i����z��)���������\���������J��
�������?����}��A����~���H�d��>�����������H��H�~��]��4��w��������J�������k��N��=�����B������������L���7����p����������p������l����H��H�q�P������H��H��H���_���H�������_��>���H����H�x���H�h��
��H��H�p
�(
��	�	�E	���b�I�'����V����U
�
�p����H��:��
��3�
��
��H�W�������8��H���Y�s��H��������H�v��H���/���H��H��H����H��H��H��H��H��H��H��H����H��@����>��S��H�	���H���H�����H��H��H����H��H���*�����H��H�`��H�O�� ��H� �!��H�~�9����H���H��c�R�#���!��!�!�~!�,��H���5�4"�U!����H��H�Y���H��H��H����H��H����H�P���H��H��H��H��H��H��H��H��H��H�6��������Σ�����!���������H��H�i��s��#���H���=���H�4��Ӡ���a��+����՟���q��
��������f��$������e��'����������8����������q��v��"����;�����H�����,��y���H�#����K��ٹ�j�����H��H��H�Ƹ����H��H�X��1���H��H���ʼ��������� ���H����H�����D�����������H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H��H�ٿ����H�k'���r=�
p�
p�
p�r=�
p�
p�
p�
p�!T�o�!T�!T��S�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�r=�
p�
p�
p�
p�
p�!T�T�i�xh��n�`�Z�|Z�a�Z�i^�]�c]�\�m�Wd�M�M�M�M�M�M�M�M�M�M�YV�fg�e�gf�_��A�X�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�W�AW�Lm�g�/j�3\�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�
p�tc�b��U�uU�p�p�kA�p�kA��q��q�kA�kA�p��q�p�@o�p�p�n�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�p�kA�kA�*p��q�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�kA�p�%�:�:�%�:�:�:�:�:�
%�%�:�:�%�:�$�:�:�:�:�$��$�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�
%�%�:�:�%�:�$�:�:�:�:�$��$�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�(�/�/�V(�/�/�/�/�/�/�/�V(�Y����������������]������������+����������������������������������������������������Lj�|��5����������ч�G�G��G��G��G��G��G��G��G��G��G��G��G��G��G��G�G�G�G�G�G�G�G�G��G�G�G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G�G�G��G��G��G��G��G��G�G�G�G�tnvfrsNONE333333333333333333333333333333333333333333333333333333333333333333
3333
3
33333333333333333
333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333����������������@!!		&&###)  .

4+@;""@*F(M@T�X$$\_ei�o%%ruz�
'���@����00�11�22�//�,,��..�--������)Multiple codepoints at single character literalformal argument cannot be a class variableformal argument cannot be a global variableformal argument cannot be an instance variableformal argument cannot be a constantclass/module name must be CONSTANTcan't make alias for the number variablesBEGENDENDARGENDFNARGCMDARGMIDFNAMEDOTCLASSLABELLABELEDFITEMbreakelsenilensureendthennotfalseselfelsifrescuetrueuntilunlessreturndefanddoyieldforundeforinwhenretryifcaseredonextsupermodulebegin__LINE____FILE____ENCODING__ENDaliasBEGINdefined?classwhile���@		���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	

 !!""###############$$%%&&''(()*+,-.//01023333444444444556789::::;<<=>?@ABBCCCDDDDDDEFFGGHIJJJJJJJJJJJJJKJJJLLLLLLMMNNOPPQQRSSSSTTUUVVWWXYYZZZZZZZZZZ[[[[[[[[[[\]]^___``aaabbccddefffghijjklmmnnopqqrstuvvwwxxyyzz{|{}~{���������������������������������������������������������������������������������������������������������������������������������������������� !"#$'-./0123456789;<=>?@ALM[\cfgijlopqrstuvw�����������������������������.34defghikloprstu�������������	

 !"#$%&'-./0123458LMNOPQRSTWX]^_`lm����������������������':cflmnq��������������������������6������� ������8/f����������������.c����������,�x��xyz�jjjj����������()*+,%&�����������52��fl��NOPQRSTUVWXYZ_`e�������������Eab������������c������48_c�������!"#$12348��������b��5gdd��8���x���e���b��dd��\�����������6@A�����b�d����������������8�����b��)Bxz{{xx{C{�mvqwN�����������46789:N\flmn��X�������������������������67k�899��������������������������������458�������458�����
������8b���48���b����Eb���48����d}��������48�48�������������8����������48�48*}|xn{BxxnBx���fl������������"44��4'���������)�7)
Dl��������c����������??�dd������dd������
��;�A48�48����48����������������'�dd�dd��������+~���j{jjj���������������������,,*�*��,�8,�,b��==���7��d���	`�
��l�:?;��������52���d���������������������++l�����48�48>>�������������a������=����/�����������������48:[\cfijlq�.DEFGJNOPSTUVWXYZ[\]^_dehilpsu��D��eb�	
c��l��>�-y�������$%�$[[8�>ELMNOR��>�4x4f�e����EYZb��HI4c���������;<CD�&|0� !#&��������E�EPR����}�\LPJQRqUY[[�>�>�LOSLOS8b�����()��1������"&��"c��"���K���x������48�48`c@��4'(����� ����!�8b�QSQPR������"�"�"�"48"��AB(����""�""�"j8F;45a:FP:�[�
%��^-UaiL�U`PB�aE��3CPbcd45:�8Re8 PHDL4gD�=����LHMBPxU�?@A�fv�
xebcde67%&a4567���M}�l������LM7��
b
>d���fe+��B
45d�B��6�xO���]^��a�E�d�4�8	
��_��28����f��xbyfD*x����
�*�_���
�����%
��%��
�������EFGH_�����������������#���9��%�����'G��`���;$_>����������CL�<��e������C�e���^������_`����`���v^x�|�_���N��
��_��
���
�����B������B
 �"_EFGHdJK�|��d%l���(�q-��(��d��dd����d�����z{1������z{�}�'(��������������Nd��4��d8�������������dB�d����
���C���
����8���O���O����)������dE��*x,z{��A�MD��:R����B�eE��ab����ON�s.�p�d�F�|�J�����+s-d2d|Rm�%&q������BE�E�����d�������������������b+��bl�)N������nE_<�l�v"����|�������M6�4�Rab"��@A��_�l���Eb�4E����M��u�T�Pu��E�E���ba�cb��EE�����E�EFt8babEE�BE�BCabbD���abab���N�����b�abE����A���������K��N�D�xGz{Nabz{���67�9E�(�E�@AE.�0k2E4��013��.l0i2b4EEbabD�8Gab���E������B����.b02�4�Fb��45��8������E���C���d�|AE�������UK��xdz{]^YZabcdZf��ab��B�4�6789:	��B�d����!���B����N����()E�.���\�/&'����	f�x�z{dmn���abx�z{�}E+4�Sx�z{'(�4+����Z[��E2
�ab<���	�m�������,���ab,S�W��Z[���_��������E,w8mz�p�,��u��x����E���ab����B���%W��Z[4�^�N�abE��+,����m��p�E�C�EFGH�JKe	�ab��4���x�z{�}ab_`�����������a�4�������el��
X��8�STw��z���:�������������8���4N6789:i
�l�E���4�679���N�����mn���\ab��W����f�9���lmn;<=>�
��f����45��N�����C���Cbd�Y)�������4�6789�!"#$�v]^�la�f123�*[Q);<=>?�'(��+��N$��fm�el���<����_`AB��DE$����������M��O����R����opqrstuvw��_������4��6789:0��2��4�������u����x�������N��E������������������������������f��������lmn�����������������������N������������"������_`����������������!"#$4��6789��?@AB��1234H����8����;<=>?����������C��EFGH�JK��������f]����[\b()*+,c��_fNij��l����opqrstuvw_`��������4��6789:���������������9��������N��D�FG����4�6789������������4f6789��mn���45����4�6789:������C������������������������N�����������������]^��\a��������f�����f�������lmn��4��6789:���������'(����+���������������N����������<���������������������������f����������lmn�����������������_����������AB��DE�������������M�����uR�x��������	������������������������������������������~�����������������������������������������������������������������!"#$����S������W����Z[1234������8����;<=>?���m����p�����C��EFGH��JK����������������[\����������c��_f����ij��l���opqrstuvw�����������������������������������������������������������9!"�����������)*������������������������������������������������������������������D��FG�����������������\]��_`��������������
������������������������������������������������������������������������������������������������������������������������������45��������NOPQRSTUCWX����������_`AB��DE��'(����+��M���]^R��a��������f����<������������������������������������������������������_��������������	����������������������u��x������������������������������������������������������������������������������������������������������������W����Z[��������������������������������m��p����~45����8�����������������������������������������������������U��������������������bcd���������������������������������C��EFGH��JK��������D��FG��������������������_������������9��������������������������������������������45����8������������������������������������
�����������U��������������������bcd���������������������,�����������������������������������������������������������NOPQRSTUVWXYZ�������_`%���������������������������������������������������C��������	����������������������������_`������������������������'(����+����AB��DE������������M��<����R�����������������������������W����Z[��������������%��_��������������m����p������������������u���x����C����������������������������������������_`�������������������������������������������������������������������������������������������������������������������������'(���+��������������������������������<��7�����������B��E������������
��O����R������������������_�����������������������������������������u����x��D��FG���459�8�������������������������������������������U����������������������bcd���������������������������������B���E����������������O����R����������������������������������������������'(���+�������������������������<�����������������������������������������������������������_��������������������������459��8����u	��x���������D���G������������������U��������������������bcde��������������%����������	
����
��������������������W��CZ[��%&��()*+,������������m����p������_`�����������DE�����������������������������D��G���������ab�������������������������������������y����������������������������������45������9�������������	�����������������������������������������%����b�����������������������������������8������
��C������������������������M��S����RW����Z[����_`�������������������m����p������45��������������������������������	������B��E������������������O���R������������������������������������������������������������������������������������������������S������W��Z[������������������������������m���p�����������������������������������������������C�����

������������������������������������_������������(���������������������'(����+��:����B����E�������������<��O��������������������������������������������������������_����������������������������������C����u����x��
��D����G���������������������_�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������B���E��������'(����+R�����������������������������<�����������������������������������������������D���G���9_������������	���������������������\u����x��������'(����+�������������������������<����B����E�����������������������R������������������S������W��_Z[���������������������������������m��up��x�����������������������������������������������������������������������������������������������������������������������������������	D����G����������������������������������������������9�������������������������������������������������������������������������������������S����
W����Z[������������������������������m����p���������������������9�������������D����G�����������������������������������������������������������������������������/012������67���������������������CD����������	�������������������������������������������������f���������������������������������������������������������������
���������������������S������W����Z[�����������������������������m����p���	
����
��������������	����������������%&��()*+,���������������������������������������DE��������������NOPQRSTUVWXYZ��������_`ab����eW����Z[k��������������������������y���m����p������������������������������������������������
����������������������������������������defgh����klmnopqr��t����wxyz{|}~������������������������������������������������������������������������������������������������������������������������������������������
�������������������������	
����
���������������������������%&��()*+,�������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de����8����k����������A����D��������y����|M��������R�������������������������������������������������������������������������������������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A�������������������LM��������������������������[\��������
��c����fg��ij��l����opqrstuvw��y����������(��������������������������������:�����������������������������������������������������X����������������������������������������NOPQRSTUVWXYZ��������_`��������e�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	
���������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM\������������������������[\������������c����fg��ij��l����opqrstuvw��y���������������������������������������������������������������������������������������������������� !"#$����'���������-./0123456789��;<=>?@A������NOPQRSTLMWX������������_`������[\������������c����fg��ij��l����opqrstuvw����������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw����������������������������	
����
���������������������������%&��()*+,������NOPQRSTUVWXYZ��������_`��DE����������������NOPQRSTUVWXYZ��������_`ab��de���������k����������������y����|���������������������������������������������������������	
����
��������������������������������%&��()*+,������NOPQRSTUVWXYZ��������_`��DE����������������NOPQRSTUVWXYZ��������_`ab��de���������k����������������y����|����������������������������������������������������������	
����
������������������������������%&��()*+,������NOPQRSTUVWXYZ��������_`��DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k����������������y����|����������������������������������������������������������	
����
������������������������������%&��()*+,������NOPQRST����WX������������_`��DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k����������������y����|����������������������������������������������������������	
����
��������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k��������������������������y����|�����������������������������������������������������������	
����
��������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k��������������������������y����������������������������������������������������������������	
����
����������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de����������k��������������������������y����������������������������������������������������������������	
����
����������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k��������������������������y�����������������������������������������������������������������	
,����������������������������������������%&��()*+,NOPQRSTUVWXYZ��������_`��������DE����������������NOPQRSTUVWXYZ��������_`ab��de���������������������������y����������������������������������������������������������������	
������������������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de��������������������������������������y�����������������������������������������������������������������	
��������������������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de��������������������������������������y�����������������������������������������������������������������	
��������������������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de��������������������������������������y�����������������������������������������������������������	
���������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
�������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
�������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
�������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
���������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw�������������������������������������������������������������������	
������������������ !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
������������������ !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw����������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw�������������������������������������������������������������������������������	

������ !"#$%&'����������-./0123456789������������������������������������LMNOPQRST����WX��������]^_`����������������������lm������������������������������������������������������������������������������������	

������ !"#$%&'����������-./0123456789������������������������������������LMNOPQRST����WX��������]^_`����������������������lm�����������������������������������������������������������������������������������	

������ !"#$%&'����������-./0123456��8��������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����p�����������������������������������������������������������������������������	

������ !"#$%&'����������-./012345����8��������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����p�����������������������������������������������������������������������������	

������ !"#$%&'����������-./012345����8��������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$���'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$���'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw�������������������������������������������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw���������������������������������������������������������������� !"#$����'����������-.��0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lm��opqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij����mnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij����m��opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��l����opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��l����opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A����������������������������������������������������������_������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij!"#$opqrstuvw������1234������8��:;<=>?���������������������������N������������������������[\������������c����f����ij��lm��opqrstuvw������������!"#$������45����8�������1234�����8����;<=>?LMNOPQRST����WX��������]^_`������������[\������lm��c����f����ij��������opqrstuvw��������������������������45���8�����������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm�����������������������������������������������������������������������������������������)C3�2BCI/�������|�����a��.�)�.��Bu��<W�)))����,���(���V�	����r~r�5DS;5�,�89:���c������� |�JK!���{�R/P����L78t�r���QQ���u��|���W���rr���z66<y��	V��x������Trr���|���w�_����v����z���{��{�Nr�rsL|�4��u�_��d��Bt��6�x��
��'St�����?�u�f$@)����V�y�������}�RU6J��~�>>I��s|yZ?y|�QQ�@��|�'�d,����U�S���)&A{��������K~������������������?{�rIr�@{�B���r�r���,����P��������x���T��x�d{t�����>t�u�v��z�w�u����y�����y����z��]������^��
W���>��;�>>�b_z]`|}~��{u���|��z�)���qr���y��{v�w���������z��f[V�s6���5��U{5������a��z,�������t�`����{���v��_�w��v����w�>��z��)���z�u�;��z�?�)��O@u~�����OO&o����o���	�����6�y�,#D%���1�3Q-�22r��r�$�ghjk�A*+'��JK�w��������`�{Q����������{z����t�w�+zg��[�)`�v��[��tdW}�^l.z�(��O������$+�.#���%��
�h��
�����),���2�a��5O�^� .�]�OO�5�s)|���b.�&Mn[�p��qr^��v�]���.9�\���vv��������-[���,�Z�c�,L5
��\��y�������&���������Z����Y����{������A��������&����O��Y�Y���P�$%�'c��b�b�D-.c��Q�H�X�����[�������c����b���c�c���X�X�Y����{������z������[[��*r�r��������������c��&���X�X���*&)����������������u��� !"^#*y���r~���NN#�� !�������*�$�����w��%����'(����
���b�|��)��NN��NTV(��)z���2U9Yb�b�N��TVs��<�[���v�x��e������oo��������N�&B����[���������b��N��N�[����)������NNN�NN�*NN����d��������&}�����[��������SVi��l������)�����[*{���������$zz{|}~����)e����ij&�&[��"��[[��N��(NN�� &�# !"�����������Y$%P'��#uv�.�'(0PP��$�!���2���%4N9��&'(()*+�)���&&&PP�E����[��00�P��)��*�P*��� !t�PP��Pp&[P ![R+>L�<()*+,00��0��d}"�R����z�0qr�[�[:���*9:;<=>?@A0 !"?@Bz{|}~00$#H[[000�00P00�%[�&'(�PPPPdP/1358�)qr*P*� !CDFG !$I%()*+,wxyz{|}~PPPPP0PP00�M'(REFGHI)P*d*+,-9:;<=>?@Aqr !"fPP/0PPP$ff#[��[P !yz{|}~% !��'(Pff� !"��fPFF)#���ff$ff�%P&'( !"[�PFFF[#)P*FP[%&'([[FPPPPP)FP*F[fFFFFFFF0ffffPfPPfPPPXPP�[[[ !$%()*+,P[[Pfffffff�F'(FF)f*+,-[9:;<=>?@A[�ff/fff$F��f�����f[PPPf����[fgfggP�GGf�PfPPPPggPPdefghijkgmnPqrffffGGGfPggfggGPPPuvwxyz{|}~PGffPffGffGffGGGGGGGfLfgPPPggPggP�gLL&Pg&PGGG&&&Pggggggg�fffgGPPPP��-gggggfPg-fLff���ffgff�fgLfLdefghijklmnopgqr&fffgHHfLgftguvwxyz{|}~�L&HHHgggg�gHgLLL�fff-HffggHgH�fgggHHHHHggHHf�-fLIIgg&���LLfffIIfIIHLHHLMf&LI�IIggg-MMHL'LIIIIIII�L�'LL'''JJg�L�&g-gggg�gg���JJgJIII��Jg&�gggJMgI+JgJL-LMJJJmJJ+JJM�����'����������gMgg-�������LLggLLM'L��gLJ�JJ�W��g��MLMMg�LLL�LWWJ���L���gggg+��M��g�'�&LLLM+M��LL���MM'LMWLY&�WMM��W��MLMM��&�+KKWML�'���W��KKK��WK+�WW'��K�KK�MM�KKKKK�KK�W�+��WLLWMMMMMMWKW]KK+LLLML�MMMMMMWWKLM��W�LLMMMLLLLLLLM���'MMMMMMMM��MMMMMMM���MLLLM'�WWLM'MMM�MWMW����WWW�
��=>W����������WWW����WW��������������������W����=W���������������������������W����������������������W��TUVWXYZ[\]^_`bcdefghijkl�������������������������������������������������������������������������������������������\������������x�������������������������������������������SS���S�SS	
��
S !"#$%&'()*+,-.�/012�3456789:;<=>?@A��c�BCD��Sdefghijklmnopqrs����SSSSt�uvwxyz{|}~��SSSS��S"S���S������	
������
�� !"#$%&'()*+,-.��/0�123456789:;<=>?@A��BCD�����	

� !"#$%&'()*+,-.d����ij/0��qr123456789:;<=>?@Auvwxyz{|}~BCD����	

 !"#$%&'()*+,-./0123456789:;<=>?@Ac�c�c�c�c�c�c�c�BCDc���c�c�c�c�c�c�c�c�c�c�defghijklmnopqrc�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�tc�uvwxyz{|}~c�c��c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�b�c�c�c�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�defghijklmnopqrb�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�tb�uvwxyz{|}~b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b���b�b�b���������������������������������������defghijklmn��qr������������������������������������������uvwxyz{|}~������������������������������������������������������������������������������������defghijmnqr������������������������������������������uvwxyz{|}~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������]������v�����������������������#��������������������������������������������������������������������������������������������������������������������������������������������������������������������defghijklmnopqr��������������������������������������!��tuvwxyz{|}~���x�����������������������������������������������������������������������������������������������������������!����x���������������������������������������������������������������������������������������������������������"����v�����������������������#�������������������������������������������������������������������������������"����v�����������������������#���������������	
�
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
��
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
��
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
�
� !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
�
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD����	

 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	

 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD��	

 !"#$%&'()*+,-./012356789:;<=>?@ABCD���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD���	
��
 !"#$%&'()*+,-./012��5679:;<=>?@ABCD?@�������������������������������������������$%�'��������������������������������������������������������������������������$%�'��������������������������������������������������������������������������������������������:��������������������������������������������������������������������������:���������������������������������������������������������������������������������������	

�" !"#$%&'()*+,-.#�5679:;<=>?@A	

$%�" !"#$%&'()*+,-.#�5679:;<=>?@A	

$O� !"#$%&'�()*+,-./012��567���9:�<=>?@AB�D	
�
 !"#$%&'()*+,-./012��5679:;<=>?@ABCD	
�
 !"#$%&'()*+,-./0123456789:;<=>?@A�	

BCD !"#$%&'()*+,-./012��5679:;<=>?@A	

BCD� !"#$%&'�()*+,-./012��567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./01���567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./01���567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567��9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567��9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567�9:�<=>?@A	

B�D� !"#$%&'()*+,-./012��567
9:;<=>?@A	

B�D� !"#$%&'()*+,-./012�567
9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567�9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567�9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567
9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567\9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D� !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D !"#$%&'()*+,-./012��5679:;<=>?@A	

BCD� !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D� !"#$%&'()*+,-./012�5679:;<=>?@A	

B�DZ !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D�" !"#$%&'()*+,-.#_567`9:;<=>?@A	

$�" !"#$%&'()*+,-.�456789:;<=>?@A	

$�" !�#$%�'()*+,-.���5679:;<=>?@A	

$�" !�#$%�'()*+,-.��5679:;<=>?@A	

$�" !"#$%&'()*+,-.#_5679:;<=>?@A	

$�" !"#$%&'()*+,-.��5679:;<=>?@A	

$�" !"#$%&'()*+,-.��5679:;<=>?@A !$%&()*+,$#'()*+,-'9:.<=>?@Amno/ !$$%()*+,���������������'(��)*+,9:;<=>?@A������������wx/y��$������������������������������n���������������������������������x���������������������������������n���������������������������������n���������������������������������x��������������������������������?n@�������������������������������BxC�������������������������������HnI��������������������������������x���������������������������������n���������������������������������x��������������������������������n�������������������������������	x
�������������������������������6n7��������������������������������x���������������������������������AEFGZ�}~��H�J��KaS��N�����NOIQRSTU�V�������p�X�Y��q,������v�Z��=�GE�BE	\]^_`abcdeX[�W:��
�5�������+��������mn��i.bh��\ijYFGJK�;���
>=�1�34��5�wxy78�{9:;<=,?@ABCDE��TXklmnop7qr
�stuvwx045��j�ekyz1{|}~�����F�MNOP-}/0�1234�6789�:;<=>?@�������t����'���������������r��������d��������sa�R����Y	������������~��e����\�
u�����������������
��]�������i�����9�p������������������������h��������������������������������������������������b��������������\�����[��������h������6������������+�����*��	���_������m���������
�������l�1�������	�������������������������/�V�������j
����E������������j����������������������Y��:�
�	����&������a��N���A�����$��?���I���0���8���0������/���G����������������7.���{|}�vwxy��2����<<������������c��s�}}�
(-��BV2UgkuK�NRRW2aW_CDbdEFlGrIvHxJa��`����KLZ����������������������������������������������������������������������������!���~��=�5}��-8e19��L�f�b=<vw��WZ���T<iP<<<�<��qz{|�����imys{�F��r��t���[�^���wolI��G	QPh����L������Lp����������ML�d<c
`e��T<�4.7/�<)<(3<]E <RhU V���yt������~fg�h�j	"#$%CD�����������������<�����������������\�<mx���	
���<�����������2�<���2��fTRn����lN<Y��2�:6;��<���#*%,\
SjQ<r�<����kouqw�&���<���������9����<7:
�8�������=)?,>vpA/?!8�*L����_�*'�]&O��S�de��S<�����<<X�X0!�9���<0�<<6�z�����npzt|'<����������������su�Y�BnT��`
^�X����T�i�j��q�O��$+[�����������>=@��<��5�4�a2�3�YZ[�bc��gk�m�������;A+@"�PV5�<�)}OJ�	%.14:;0<
ABCFGHIJLKMN8H1�]�_�o<��������<��DE�T<"<(QR/3?@��7\��L������������<��������<, #6<%&*}2-=>U
<<<<<<T^�������������$SS<��W���<������������T�!<&'+��������S���������������������������'��������������;+;+������������������y&$�������������C����������������`1`1`1`1�3"�"-.C(���%������;;;;�1`1�������H��K--����W�
��64��(�������*�*�����$�4$5�5B%;+���������9����������������������������������>���V��������������������������������������������������������������������������������������������������������������������������������������������������������������=������������L`1��"`1`1`1��`1--���%���������*<�T������+��;+�����)R2������q#����������W�����Q��M��3"���HI����N�����f����6tt����p����������I����������������������'��*�*�*�*��R2R2��������������������������������3"�(�����`1`1`1`1`1����`1`1`1`1`1`1`1`1��`1����`1`1`1`1`1`1`1`1`1`1�����7;+�7��K||�*�!�!����E�����zNYd��*������������q5�������������/��1)�������=������������7���������`1-,����a8;+�8�����-��`1������C����������'����`1='9�8��$�����9��-����.�������8����Q��6�9;+�9�������������������������Z�a`1����
$����������I*��������������������4����������b��i����v������0��x`1�������������2��2��s���������.6���/��Q����_y����II���++H&&QQQ�����}�������^�������������(h ���&*oP:;+�:������8������;;+y;R2�������������D3D3'��`1�3�3`1���������TMQ`1`1�����,���-������R2%��PD3��������6Q�b��������F��;����F;��Q���4~������8�������������`1�������������������%%���%����������������`1����=����Q63����E�m������V|����������������-,�������������w���s������������|/���&������!��*"b���C�'������
��������`1���������������C�����������������������������4������_b���������������2���������������/��Q��������;;+?<����`1D3D3
������D3D3����n0s�������!�*��������`1��Q������������������������3`1`1��`1`1���-������������������������%`1`1����`1I*I*D3`1+e�J7J7%����������D3�����������O�������|�������06�����������`1�����\���%%--����%������NN������������1��1������'��2���7��������n������(��������������������������6|�����!����!�`1���J7��#����������������
$�������������7����5��4������G���*�����7�7yNN���J7J7�����d~��������������|�CH��
$���bZ����[f0]7��^���������ycq��������������t���������������������������<;+=w��������*�*���R����������v��7�������\�����7�����7�O�������������q�u�����������a���������b�������������h=����������������\��\�����\��u����7������������������\��������������������������
$&--27?HOU[fqz������������������������







#
"
0
/
<
?
K
U
T
b
g
m
m
m
t
u
x
y
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�

&+27>>CHNSY^ckkpuz������������������������������������������������������������������������������������������	#)/6=CIOUZ_dinsx}������������������������%,348=DIRWamntuvz�����������������''''''''()*0/<<BHMRW]bglqw|����������������#"53DBQV[`ov}��������������
!"#&'*+56=>AFMRY^chmtz����������������������������������!&,27>D=^enut�����������������"'-4>?BCEPM]^abhpqw}������������������������
"',/3:?FNT[\cjoty��������������������������������!&-BEJNQVY`cdguvw~���������������������������+37*JKNSVWZjknvw��������������������������������������#(-27<AFKPV]hqz���������������� !$*27>DCijqs������������������������������H�KIJ����������E��������F�������YZ[\LMNO_`TSPQRWX]^bUVa	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDGcdefghijklmnopqrstuvwxyz{|}~�����������������mismatched indentations at '%s' with '%s' at %d_%d is reserved for numbered parameterget_nd_vid: unexpected node: %sget_nd_value: unexpected node: %sset_nd_value: unexpected node: %sget_nd_args: unexpected node: %s'%s' is ignored after any tokens'%s' is ignored unless in comment-only linepossibly useless use of %s in void context'when' clause on line %d duplicates 'when' clause on line %d and is ignoredblock argument should not be givenadd_block_exit: unexpected node: %sboth block arg and actual block givenkey %+li is duplicated and overwritten on line %dnegative string size (or size too big)string literal encodings differ (%s / %s)pop_end_expect_token_locationspush_end_expect_token_locationsnegative string size (or size too big): %ld%s%.*s%.*s%.*s%s
&. inside multiple assignment destinationsetter method cannot be defined in an endless method definitiontoken position mismatch: %d:%d:%s expected but %d:%d:%s'it' is already used in
%s:%d: current block herenumbered parameter is already used in
%s:%d: %s block herekeyword arg given in index assignmentblock arg given in index assignmentlocal->used->pos != local->vars->posassigned but unused variable - %lianonymous %s parameter is also used within blockfound '= literal' in conditional, should be ==regexp encoding option '%c' differs from source encoding '%s'parser_token2id: unknown token %dAppend tokens (line: %d) [%d, :%s, "%s", [%d, %d, %d, %d]]
parser_dispatch_delayed_token:%d (%d: %td|%td|%td)
add_delayed_token:%d (%d: %td|%td|%td)
parser_dispatch_scan_event:%d (%d: %td|%td|%td)
lex.pcur < lex.ptok. (line: %d) %td|%td|%tdinvalid Unicode codepoint (too large)invalid character syntax; use \M-\%cinvalid character syntax; use \C-\M-\%cinvalid character syntax; use \%cinvalid character syntax; use \M-\C-\%cinvalid character syntax; use \C-\%cInvalid escape character syntaxvtable_add: vtable is not allocated (%p)formal argument cannot be a constantformal argument cannot be an instance variableformal argument cannot be a global variableformal argument cannot be a class variableformal argument must be local variableCan't change the value of selfCan't assign to numbered parameter _%didentifier %li is not valid to setnumbered parameter is already used in
%s:%d: current block hereidentifier %li is not valid to getvtable_pop: unreachable (%d < %d)syntax error, unexpected %s, expecting %s or %s or %s or %ssyntax error, unexpected %s, expecting %s or %s or %ssyntax error, unexpected %s, expecting %s or %ssyntax error, unexpected %s, expecting %scan't find string "%.*s" anywhere before EOFunterminated list meets end of fileunterminated regexp meets end of fileunterminated string meets end of fileencountered \r in middle of line, treated as a mere space'**' interpreted as argument prefix'**' after local variable or literal is interpreted as binary operatoreven though it seems like argument prefix'*' interpreted as argument prefix'*' after local variable or literal is interpreted as binary operatorunterminated here document identifiertoo long here document identifier'<<' after local variable or literal is interpreted as binary operatoreven though it seems like here documentinvalid character syntax; use ?\%c'?' just followed by '%.*s' is interpreted as a conditional operator, put a space after '?''&' interpreted as argument prefix'&' after local variable or literal is interpreted as binary operatorambiguous first argument; put parentheses or a space even after '%c' operator'+' after local variable or literal is interpreted as binary operatoreven though it seems like unary operator'-' after local variable or literal is interpreted as binary operatorunexpected fraction part after numeric literalno .<digit> floating literal anymore; put 0 before dot':' after local variable or literal is interpreted as binary operatoreven though it seems like symbol literalambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after '%c' operator'/' after local variable or literal is interpreted as binary operatoreven though it seems like regexp literalparentheses after method name is interpreted as an argument list, not a decomposed argumentunterminated quoted string meets end of file'%%' after local variable or literal is interpreted as binary operatoreven though it seems like string literal'%s' is too big for a number variable, always nil'$' without identifiers is not allowed as a global variable name'$%c' is not allowed as a global variable name'%.*s' is not allowed as a global variable name'@' without identifiers is not allowed as an instance variable name'@@' without identifiers is not allowed as a class variable name'@%c' is not allowed as an instance variable name'@@%c' is not allowed as a class variable nameInvalid char '\x%02X' in expressionenforce_keyword_end check. current: (%d, %d), peek: (%d, %d)
enforce_keyword_end is enabled
Reducing stack by rule %d (line %d):
else without rescue is uselessBEGIN is permitted only at toplevelcomparison '%s' after comparisonclass definition in method bodymodule definition in method bodysyntax error, unexpected end-of-inputInvalid return in class/module bodykey must be valid as local variablessymbol literal with interpolation is not allowedunexpected ... in lambda argumentcan't define singleton method for literals'if' at the end of line without an expression'elsif' at the end of line without an expression... at EOL, should be parenthesized?embedded document meets end of filewords_tSYMBOLS_BEG_symbol_listinvalid value for %s: %sunexpected node: %s, %sNODE_DEF_TEMPNODE_EXITSunixdosutf8-macunknown encoding name: %sa variablea constanta literalinvalid multibyte char (%s)Can't set variable $%ldCan't set variable $%cunexpected null nodestatement not reachedstring sizes too big%s: [[%d, %d]%s%.*s%s
%s%s
%s mixed within %s source%s is not ASCII compatibleouterdynamic constant assignmentduplicated variable nameinvalid symbolunexpected node as symbol: %sduplicated key name... after rest argumentlex_state:  at line %d
internal parser error: lex.state: %licond_stack: %licmdarg_stack: %liunexpected ...no anonymous %s parameterempty expressionvoid value expressioninteger literal in flip-flopstring literal in conditionstring literal in flip-flopregex literal in conditionregex literal in flip-flopsymbol literal in conditionsymbol literal in flip-flopword_sepnl"{""}""[""]""("")"backslashkeyword_classkeyword_modulekeyword_defkeyword_undefkeyword_beginkeyword_rescuekeyword_ensurekeyword_endkeyword_ifkeyword_unlesskeyword_thenkeyword_elsifkeyword_elsekeyword_casekeyword_whenkeyword_whilekeyword_untilkeyword_forkeyword_breakkeyword_nextkeyword_redokeyword_retrykeyword_inkeyword_dokeyword_do_condkeyword_do_blockkeyword_do_LAMBDAkeyword_returnkeyword_yieldkeyword_superkeyword_selfkeyword_nilkeyword_truekeyword_falsekeyword_andkeyword_orkeyword_notmodifier_ifmodifier_unlessmodifier_whilemodifier_untilmodifier_rescuekeyword_aliaskeyword_definedkeyword_BEGINkeyword_ENDkeyword__LINE__keyword__FILE__keyword__ENCODING__tIDENTIFIERtFIDtGVARtIVARtCONSTANTtCVARtLABELtINTEGERtFLOATtRATIONALtIMAGINARYtCHARtNTH_REFtBACK_REFtSTRING_CONTENTtREGEXP_ENDtDUMNY_ENDtSPtUPLUStUMINUStPOWtCMPtEQtEQQtNEQtGEQtLEQtANDOPtOROPtMATCHtNMATCHtDOT2tDOT3tBDOT2tBDOT3tAREFtASETtLSHFTtRSHFTtANDDOTtCOLON2tCOLON3tOP_ASGNtASSOCtLPARENtLPAREN_ARGtRPARENtLBRACKtLBRACEtLBRACE_ARGtSTARtDSTARtAMPERtLAMBDAtSYMBEGtSTRING_BEGtXSTRING_BEGtREGEXP_BEGtWORDS_BEGtQWORDS_BEGtSYMBOLS_BEGtQSYMBOLS_BEGtSTRING_ENDtSTRING_DENDtSTRING_DBEGtSTRING_DVARtLAMBEGtLABEL_ENDtIGNORED_NLtCOMMENTtEMBDOC_BEGtEMBDOCtEMBDOC_ENDtHEREDOC_BEGtHEREDOC_ENDk__END__tLOWESTtUMINUS_NUMtLAST_TOKEN\c?\e\a\b\v\f\t\r\n\0\\\"Invalid octal digittrailing '%c' in numberFloat %s out of rangeinvalid Unicode codepointUTF-8 mixed within %s sourceinvalid Unicode escapeunterminated Unicode escapeinvalid hex escapevtable_alloc:%d: %p
cmdarg_stack(push)cond_stack(push)vtable_free:%d: %s(%p)
cur_tablecmdarg_stack(pop)cond_stack(pop)(none)tmpvtable_add:%d: %s(%p), %s
duplicated argument namep->lvtbl->varsp->lvtbl->usedCan't assign to nilCan't assign to trueCan't assign to falseCan't assign to __FILE__Can't assign to __LINE__Can't assign to __ENCODING__p->lvtbl->argsordinary parameter is definednterm%s %s (%d.%d-%d.%dNODE_SPECIALStack now%s vtargsvtable_pop:%d: %s(%p), %d
syntax errorsyntax error, unexpected %sStarting parse
Entering state %d
Stack size increased to %ld
Reading a token
unknown regexp option%s - %*sincomplete character syntaxunknown type of %stringcond_stackcmdarg_stackNow at end of input.
Next token isShifting   $%d = END in method; use at_exitInvalid retry without rescueInvalid retry after elseInvalid retry after ensureinvalid local variable - %li->block given to yield%li: no such local variablekeyword rest-> $$ =Error: discardingError: poppingnesting too deepCleanup: discarding lookaheadCleanup: popping$;$Fshareable_constant_valuewarn_indent"end-of-input""invalid token""'class'""'module'""'def'""'undef'""'begin'""'rescue'""'ensure'""'end'""'if'""'unless'""'then'""'elsif'""'else'""'case'""'when'""'while'""'until'""'for'""'break'""'next'""'redo'""'retry'""'in'""'do'""'do' for condition""'do' for block""'do' for lambda""'return'""'yield'""'super'""'self'""'nil'""'true'""'false'""'and'""'or'""'not'""'if' modifier""'unless' modifier""'while' modifier""'until' modifier""'rescue' modifier""'alias'""'defined?'""'BEGIN'""'END'""'__LINE__'""'__FILE__'""'__ENCODING__'""local variable or method""method""global variable""instance variable""constant""class variable""label""integer literal""float literal""rational literal""imaginary literal""char literal""numbered reference""back reference""literal content""dummy end"'.'"backslash""escaped space""escaped horizontal tab""escaped form feed""escaped carriage return""escaped vertical tab""unary+""unary-""**""<=>""==""===""!="">=""<=""&&""||""=~""!~""..""...""(..""(...""[]""[]=""<<"">>""&.""::"":: at EXPR_BEG""operator-assignment""=>""( arg""{ arg""*""**arg""&""->""symbol literal""string literal""backtick literal""regexp literal""word list""verbatim word list""symbol list""verbatim symbol list""terminator""'}'""'#{'"'=''?'':''<''|''^''&''+''-''*''/''%''!''~''{''}''['',''`''('')'']'';'$accept$@1programoption_termstop_compstmttop_stmtstop_stmtblock_openbegin_block$@2$@3bodystmt$@4stmt_or_begin$@5allow_exitsk_END$@6command_asgnendless_commandoption_'\n'command_rhs$@7$@8def_namedefn_head$@9defs_headexpr_value$@10$@11expr_value_docommand_callblock_commandcmd_brace_blockfcallmlhsmlhs_innermlhs_basicmlhs_itemmlhs_headmlhs_postmlhs_nodecnamecpathfnamefitemundef_list$@12reswordsendless_argreloprel_exprlex_ctxtbegin_definedafter_rescuearef_argsarg_rhsopt_call_args$@13command_argsopt_block_argarg_splatmrhs_argmrhsprimary$@14$@15@16@17$@18$@19$@20$@21$@22k_begink_ifk_unlessk_untilk_casek_fork_classk_modulek_defk_dok_do_blockk_rescuek_ensurek_whenk_elsek_elsifk_endk_returnk_yieldif_tailopt_elsefor_varf_margf_marg_listf_margsf_rest_margf_any_kwrest$@23f_eqf_kwarg_f_block_kwexcessed_commaf_opt_primary_valuef_optarg_primary_valueopt_args_tail_block_args_tailopt_block_paramblock_param_defopt_bv_declbv_declsbvarmax_numparamit_id@24$@25lambdaf_larglistlambda_body$@26block_callmethod_call@27brace_body@28do_bodycase_argsp_pvtblp_pktblp_in_kwarg$@29p_case_bodyp_casesp_top_exprp_top_expr_bodyp_asp_altp_lparenp_lbracketp_expr_basic$@30p_argsp_args_headp_args_tailp_findp_restp_args_postp_kwargsp_kwargp_kwp_kw_labelp_kwrestp_kwnorestp_any_kwrestp_valuep_primitivep_variablep_var_refp_expr_refp_constopt_rescueexc_listexc_varopt_ensurestringsstring1xstringnonempty_list_' 'words_tWORDS_BEG_word_listsymbol_listwords_tQWORDS_BEG_qword_listqwordswords_tQSYMBOLS_BEG_qsym_listqsymbolsxstring_contentsregexp_contents@31@32@33@34string_dendstring_dvarssymdsymsimple_numericnonlocal_varuser_variablekeyword_variablevar_lhsbackref$@35f_opt_paren_argsf_paren_argsf_arglist@36f_kwarg_f_kwf_opt_arg_valuef_optarg_arg_valueopt_args_tail_args_tailargs_forwardf_bad_argf_norm_argf_arg_asgnf_arg_itemf_argf_labelkwrest_markf_no_kwargf_kwrestrestarg_markf_rest_argblkarg_markopt_f_block_arg$@37assoc_listassocsoperationoperation2operation3dot_or_coloncall_opcall_op2rbracetrailer8[�[�[�[�[�[�[��[� 	�	



 @ @� @ � !!""##$$% %&@&'�'(())**++,,- -.@./�/00112233445 56@67�78899::;;<<= =>@>?�@reason@exit_valuetoo many arguments (%lu)#<%li:%p %li:%d%p(&%+li) (lambda)callable object is expected#<% li: (% li) (not-implemented)%li=...%li: ...**%li&%li**nil %li:%li<empty_iseq>(binding)aritylambda?curryruby2_keywordsLocalJumpErrorSystemStackErrorstack level too deeporiginal_nameownerunbindsuper_methodpublic_methodUnboundMethodbind_callpublic_instance_methodBindinglocal_variable_getlocal_variable_setlocal_variable_defined?Skipping set of ruby2_keywords flag for proc (proc created from method)Skipping set of ruby2_keywords flag for proc (proc accepts keywords or proc does not accept argument splat)Skipping set of ruby2_keywords flag for proc (proc not defined in Ruby)wrong local variable name '%1$s' for %2$sundefined singleton method '%1$s' for '%2$s'method_def_min_max_arity: invalid method entry type (%d)bind argument must be an instance of % lisingleton method called for a different objectlocal variable '%1$s' is not defined for %2$sminimum argument number out of range: %dmaximum argument number out of range: %drb_hash_proc: unknown block type %dmethod_callable_method_entry: not callable.the lambda method requires a literal blockwrong argument type %s (expected Proc/Method/UnboundMethod)can't bind singleton method to a different classbind argument must be a subclass of % lican't call unbound method; bind firstCan't create Binding from isolated ProcCan't create Binding from C level Proc0h�h�h�g�h��g��g�g�g��g��g��g�tried to create Proc object without a block-c/bin/shgetpwnam_rcan't find user for %ligetgrnam_rcan't find group for %lipthread_sigmaskduplex IO redirectionnegative file descriptorwrong exec redirectfd %d specified twicefcntl(F_GETFD)fcntl(F_SETFD)sigfillsetfork(2)getresuid(2)getresgid(2)signal to obtain old actionsigprocmasktoo many groups, %d max stopped SIG%s (signal %d) stopped signal %d exit %d (core dumped)pid %ldunexpected unit: %ligetrusagenegative shift value: %dProcess::Status#coredump?Process::Status#>>3.5invalid resource value: %linegative mask value: %dProcess::Status#&invalid resource name: % ligetrlimitsetrlimit#<%s: clock_getres(%+li)gettimeofdaytimesclockclock_gettime(%+li)wrong exec rlimit optionpgroup option specified twiceunsetenv_otherschdir option specified twiceumask option specified twiceclose_othersuid option specified twicegid option specified twicewrong exec redirect actionwrong exec option*?{}[]<>()~&|\$;'`"
#wrong first argumentchild fd %d is not redirectedprocess.cCommand failed withsetpgiddup2cannot close fd before spawnsetgidsetuidnoclosenochdirdaemon_forkgetlogin_rgetpwuid_r$?$$exit!abortProcessWNOHANGWUNTRACEDlast_statuswait2waitpidwaitpid2waitalldetachWaiterstopped?stopsigsignaled?termsigexited?exitstatusppidgetpgrpsetpgrpgetpgidgetsidsetsidgetprioritysetprioritywarmupPRIO_PROCESSPRIO_PGRPPRIO_USERRLIM_SAVED_MAXRLIM_INFINITYRLIM_SAVED_CURRLIMIT_ASRLIMIT_CORERLIMIT_CPURLIMIT_DATARLIMIT_FSIZERLIMIT_MEMLOCKRLIMIT_MSGQUEUERLIMIT_NICERLIMIT_NOFILERLIMIT_NPROCRLIMIT_RSSRLIMIT_RTPRIORLIMIT_RTTIMERLIMIT_SIGPENDINGRLIMIT_STACKeuid=egid=initgroupsmaxgroupsmaxgroups=CLOCK_PROCESS_CPUTIME_IDCLOCK_THREAD_CPUTIME_IDCLOCK_REALTIME_COARSECLOCK_REALTIME_ALARMCLOCK_MONOTONIC_RAWCLOCK_MONOTONIC_COARSECLOCK_BOOTTIMECLOCK_BOOTTIME_ALARMCLOCK_TAIclock_gettimeclock_getrescstimecutimeTmsUIDGIDrideidchange_privilegegrant_privilegeeid=re_exchangere_exchangeable?sid_available?from_nameSysgetuidgeteuidgetgidgetegidsetruidsetrgidseteuidsetegidsetreuidsetregidsetresuidsetresgidissetugidpgroupnanosecondfloat_microsecondfloat_millisecondfloat_secondTIME_BASED_CLOCK_REALTIMETIMES_BASED_CLOCK_MONOTONIChertzexec_argProcess::Status��ӵ�8��h��ӵ���ӵ�ӵ�ӵ�ӵ�ӵ�ӵ�ȶ���ӵ�ӵ�ӵ�@����������������������������������!.:breakcasecontinuedodoneelifelseesacevalexecexitexportfiforifinreadonlyreturnsetshiftthentimestrapunsetuntilwhilerlimit_maxgroups %d should be positiveenvironment name contains a equal : %lican't handle UID while evaluating block given to Process::UID.switch methodcan't handle GID while evaluating block given to Process::UID.switch methodset_blocking failed reading child errorProcess::Status#exitstatus or Process::Status#stopsigother Process::Status attributesProcess::Status#signaled? or Process::Status#termsigProcess::Status#exited?, Process::Status#stopped? or Process::Status#coredump?other Process::Status predicatesnegative process group ID : %ldunsetenv_others option specified twiceclose_others option specified twiceexception option specified twicewrong exec redirect symbol: %liwrong exec option symbol: % licyclic child fd redirection from %dexception option is not allowedGETTIMEOFDAY_BASED_CLOCK_REALTIMETIMES_BASED_CLOCK_PROCESS_CPUTIME_IDGETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_IDCLOCK_BASED_CLOCK_PROCESS_CPUTIME_IDe��A��.Acan not send any methods to a moved objectASCII incompatible encoding (%s)can not call receive/receive_if recursivelyThe incoming port is already closedThe outgoing-port is already closed[FATAL] failed to allocate memory for main ractor
can not make shareable object for %li#freeze does not freeze object correctlyThe incoming-port is already closedcannot assign unshareable object to %liractor_local_value_store_if_absentrunningcan not %s %li object.ractor.cthrown by remote Ractor.@ractorcan not copy the objectNot a ractor objectnot added yetRactor/channelalready added_activatedSelectoraddremoveRactorIsolationErrorRemoteErrorMovedErrorClosedErrorUnsafeErrorMovedObjectmethod_missing__send__instance_evalinstance_execr:%u (%s)
can not move the objectno taking ractorsreceiveyield_value_bi276ractor_create_bi289_bi303ractor_select_internalractor_receive_if_bi711_bi717_bi718_bi719_bi730_bi751_bi786_bi828_bi832ractor_local_valueractor_local_value_set_bi880_bi887ractor_requireractor/selector@f�`�@f�@f�a�0d�a�xc�c�b�a�a��a�a�a�a�@f�@f�@f�@f�a�@f�@f�@f�@f�@f�a�C��d��C��C��d��d��d��2��Ԃ���d��d����d��D��D��C��C��C��C��d��C��C��C��C��C����obj_traverse_iobj_traverse_replace_iwrong dump datawrong valuerandom data too short %ldrandom data too long %ldinvalid argument - %liuninitialized random: %sfailed to get urandomrandom number too small %grandom number too big %grandom number too small %ldrandom number too big %ldBasesrandRandomleftnew_seedFormatterrandom_numberrandom/MTundefined random interface: %sRandom interface version 1.0 expected: %d.%d�����t��h����x��l��`���A�<step can't be negative(... ... ...)(... .. ...)'initialize' called twiceinteger?can't do binary search for %scan't iterate from %sbad value for rangenot a dumped range objectexclRangecover?overlap?step is required for non-numeric ranges#step for non-numeric beginless ranges is meaningless#step iteration for beginless ranges is meaninglesscannot determine inclusion in beginless/endless rangeswrong argument type %li (expected Range)cannot convert endless range to an arraycannot get the first element of beginless rangecannot get the last element of endless rangecannot get the maximum of endless rangecannot get the maximum of beginless range with custom comparison methodcannot exclude non Integer end valuecannot exclude end value with non Integer begin valuecannot get the minimum of beginless rangecannot get the minimum of endless range with custom comparison methodnot an integer%s can't be coerced into %s@numerator@denominatorgcdgcdlcmrational.somarshaled rational must have an array whose length is 2 but %ldcan't convert nil into Rationalundefined group name reference: % liincompatible encoding regexp match (%s regexp with %s string)too short escaped multibyte characterescaped non ASCII character in UTF-8 regexpvariable $= is no longer effective; ignoredvariable $= is no longer effectiveUTF-8 character in non UTF-8 regexpcan not access Regexp.timeout from non-main Ractorscan't make regexp with dummy encodingincompatible character encoding/.../n has a non escaped non ASCII character in non ASCII-8BIT scripthistorical binary regexp match /.../n against %s stringencoding mismatch in dynamic regexp : %s and %sincompatible encodings: %s and %sASCII incompatible encoding: %sinvalid group name reference formattoo short escape sequenceduplicate meta escapetoo short meta escapetoo short control escapeduplicate control escapeunexpected escape sequenceinvalid escape codeinvalid multibyte escape\x%02Xto_regexpuninitialized MatchDatasymbolize_namesuninitialized Regexpindex %d out of matchesinvalid Unicode rangeinvalid multibyte characterinvalid Unicode listinvalid timeout: %lialready initialized regexp: /(?regexp preprocess failed: %sregexp match timeout#<%li: %li>no arguments given(?!)flags ignoredunknown regexp option: %liignorecaseRegexpError$~$&$`$'$+$=last_matchlinear_time?casefold?fixed_encoding?named_capturesIGNORECASEEXTENDEDMULTILINEFIXEDENCODINGNOENCODINGbytebeginbyteendmatch_lengthpre_matchpost_match��������@�@�@�@�@�@�@�@�@�@�@�(�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�0�@�@�@�@��@�?�@����@�@�@�@�@�@�@��@�@�@� �@��@���@���������L���������������������������������������������������\������������������������������������������������������������������������������b����X����1�������������X���������������������������������������6���6�����6����6��������6���K�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�(`��_�_�h_�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�8_�^�^��^��^�^�^�^��^��^��^��^�^��^��^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^��^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^��^��^��^��^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^��^��^��^��k�m�l�l�l�<m�l�l�l�l��k�m�m�m�m�m�m�m�m�m�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l��l�l�l�l��m�l�l�l�l�l�l�l�l�l�l�l�	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������������������������������������������������������������������������������������������������������������������py�`y�Hy�8y�y�y�xz�hz�Xz�Hz�(z�(z� {�{��z�z�z��z�(~��{��{��{�|�|�X}�{��}��{�~���~�~�~���~��~�$����������������T��t������T��D��>��T��$������ք�0����������0����ȅ�����l��T��<������x����P����0������x��x��x��h��p��Ѝ�P������H������������ܓ�������Ȟ�(����3��(��@��0��X��8������Y��\��,��Y����Y��Y��Y����Y��Y��Y��Y��Y��Y��Y����h��P������������p��ح���@����<����̿�����������l������X��X��X�� ����@��`�������0�������0��8��0��0��0����0��0��0��0��0��0��0��0��	



��M����}od[SMGC?;8520-+*(&%$"! 










Alnum
AlphaBlankCntrlDigitGraphLowerPrintPunctSpace	Upper
XDigitASCIIWordAaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~�����������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~�����������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������������������������������������������������������������������������������������������������������������������no support in this configurationinvalid combination of optionsnot supported encoding combinationtoo many capture groups are specifiedinvalid character property name {%n}group number is too big for capture historymultiplex definition name <%n> callundefined group <%n> referenceinvalid char in group name <%n>numbered backref/call is not allowed. (use name)too short multibyte code stringtoo many multibyte code ranges are specifiedmismatch multibyte code length in char-class rangeupper is smaller than lower in repeat rangetoo big number for repeat rangeinvalid repeat range {lower,upper}invalid pattern in look-behindend pattern with unmatched parenthesistarget of repeat operator is invalidtarget of repeat operator is not specifiedunmatched range specifier in char-classchar-class value at start of rangechar-class value at end of rangecan't convert to wide-char on specified multibyte-encodingdefault multibyte-encoding is not setundefined error codetoo big wide-char valueinvalid code point valuenever ending recursionmultiplex defined name <%n>undefined name <%n> referenceinvalid group name <%n>group name is emptytoo long wide-char valuetoo short digitsinvalid backref number/nametoo big backref numberempty range in char classinvalid conditional patterninvalid POSIX bracket typeundefined group optionend pattern in groupunmatched close parenthesisnested repeat operatorinvalid control-code syntaxinvalid meta-code syntaxend pattern at controlend pattern at metaend pattern at escapepremature end of char-classempty char-classend pattern at left bracketend pattern at left braceinvalid argumentparse depth limit overmatch-stack limit overunexpected bytecode (bug)undefined bytecode (bug)stack error (bug)internal parser error (bug)undefined type (bug)\x%02x���������,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,����������������|��l��\��L��,��<��,�������������������������|��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��l��\��L��<��,��,�������������������������|��,��l��\��L��<��,������,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,����,��,��,��,��,��,��,��������,��,��,��,�������������|��,��,��,��,��l��\��,��,��L��<��: /L��L��\�����l����,���������l��|��������������,������,��L��L����������L��L��L��L��L��L��L��L��L��L��L��L��L��L��L��L��L��L�����������������������������������L��L����T��L��<��<��|��|������������������������\��7����7��$��7����l��7�������������������������������������������$����������������������4��T������������������������$��$��������������������������������������t��t��t��t��t��t��t��d��d��d��d��d��d��������������������d��d��t��t������������h����h��|��h������h��4��t��t��t��t��t��t��t��t��t��t�������������������
�<�l	���d�L���Unknown escape \%c is ignoredinvalid Unicode Property \%c:]invalid back referenceinvalid subexp callGrapheme_Cluster_Break=ExtendGrapheme_Cluster_Break=LGrapheme_Cluster_Break=VGrapheme_Cluster_Break=LVGrapheme_Cluster_Break=LVTGrapheme_Cluster_Break=TRegional_IndicatorExtended_Pictographic*?+ and ??+? and ?+?character class has '%s' without escapecharacter class has duplicated rangeregular expression has '%s' without escapeGrapheme_Cluster_Break=ControlGrapheme_Cluster_Break=PrependGrapheme_Cluster_Break=SpacingMarkregular expression has redundant nested repeat operator '%s'nested repeat operator '%s' and '%s' was replaced with '%s' in regular expression0��@��+��+��P��`��+��+��+��+��+��+��+��p��+��+��+����+����+����J��J��J��J��J��J��J��J��@��@��@��@��@��@��@��@��@��@��@��@��)��@��@��@��x��@��@��@��@��@��@��@�����@��@�����@��@��@����@��@��@��@��@��@��@��@��@��@��@��@�����@��@��@����@��@��@��@��@��@��������@��@����@����@��������������������������������L�������|��d����4�����l�����$�����������������������������������\���������������������������'
������������������������
�������>�U���'��������������������d��A�*������������������������l���k���T�����S�������
�������
�d�����
���e
����
�v
���
�O
�:
���� ���� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��� �� �(��� �� �� ��H�`�x�� �� ��� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��� ����� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �h��P"� #�p5�"�8*�$�h)�84��(��)�*�*�05�P"��'�"�&��%�(%�p*�0,�,�<��;��;��;��;��;�.<��;��;��;��;��;�9��;��;��;��;��;��;��;��;��;��;��;��;�7��;�=�=�t=��;��;��;��;��;��;��;��;��;��;��;��;��;��;��;��;��;�>��;��;��;��;��;��;��;��;��;��;��;��;��;�79��;��;�9��;��;�9��;��;��;��;�9��;��;�9�9��;��;��;��;��;�9��;�9��;��;�9��;��;��;��;��;�;�9�{:�{:�{:�L9�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�9�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�{:�*9�{:�{:�h9�{:�{:�{:�{:�W9�{:�{:�\:�
9�{:�{:�{:�{:�{:��8�{:��8�{:�{:�s8�c9�;9�;9�;9�;9�;9�v9�|<�;9�;9�;9�;9��6�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�X4�;9��:��:�:�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�];�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�;9�6�;9�;9��6�;9�;9��6�;9�;9�;9�;9��6�;9�;9��6��6�;9�;9�;9�;9�;9��6�;9��6�;9�;9��6�;9�;9�;9�;9�;9�F9�alnum
alphablankcntrldigitgraphlowerprintpunctspace	upper
xdigitasciiwordV��;k�����\�I��I��I��I�I�I�V�``�� \V���cn
��\V��C ���\V�C ��\V�?w`K���\V���\�*�P\V*��@\V���\"�\\.;:  %s%.*s%s
  %s%.*s%-*.*s%s%-*s%.*s

  unknown encoding name - %s$0 not initializederror_tolerantcommentoptimizegemserror_highlightdid_you_meansyntax_suggestrubyoptyjitdebug features are [%.*s].withoutversion-help-yydebug-syntax-insns-but only [%.*s].parsetree-usage-copyright-chopgsubcasecmp%s already set to %liextra argument for %s: %sUTF-8ASCII-8BIT-s-Sno code specified for -e-r-xCan't chdir to %sCan't chdirmissing argument for -Ecopyrightmissing argument for --enable--encodinginternal-encodingexternal-encodingmissing argument for --parserunknown parser %syydebugmissing argument for --dumpbacktrace-limitcrash-reporthelpRUBYLIB@gem_prelude_indexTMP_RUBY_PREFIXGemErrorHighlightDidYouMeanSyntaxSuggestRUBY_GC_HEAP_INIT_SLOTSno Ruby script found in input -$VERBOSE$-v$-w$-W$DEBUG$-d$0$PROGRAM_NAMEargv0setproctitleARGVRUBY_PAGERCOLUMNS-R +/^[A-Z].*%sDump List:%s
%sFeatures:%s
%sWarning categories:%s
RUBYOPTRUBYPATHprogram input from stdinSyntax OKTOPLEVEL_BINDING$-p$-l$-aRUBY_FREE_AT_EXITinsns  Instruction sequences.-n  Run program in gets loop.-w  Synonym for -W1.dummy encoding is not acceptable - %s $_ value need to be String (%s given)shebang line ending with \r may cause problemsno %s allowed while running setuidno %s allowed while running setgidinvalid name for global variable - don't know how to dump with%s '%.*s'unknown argument for --%s: '%.*s'unknown argument for --debug: '%.*s'don't know how to dump '%.*s',unknown warning category: '%s'missing argument for --disablemissing argument for --encodingmissing argument for --internal-encodingmissing argument for --external-encodingRuby was built without YJIT support. You may need to install rustc to build Ruby with YJIT.invalid switch in RUBYOPT: --dumpmissing argument for --backtrace-limitwrong limit for backtrace lengthmissing argument for --crash-reportinvalid switch in RUBYOPT: --%sinvalid option -%c  (-h will show valid options)invalid switch in RUBYOPT: -%cinvalid option --%s  (-h will show valid options)environment variables RUBY_GC_HEAP_%d_INIT_SLOTSThe environment variable RUBY_GC_HEAP_INIT_SLOTS%sUsage:%s %s [options] [--] [filepath] [arguments]
%sRJIT options (experimental):%s
-K is specified; it is for 1.8 compatibility and may cause odd behaviorRJIT and YJIT cannot both be enabled at the same time. ExitingFree at exit is experimental and may be unstabledeprecated  Deprecated features.experimental  Experimental features.performance  Performance issues.strict_unused_block  Warning unused block strictlygems  Rubygems (only for debugging, default: enabled).error_highlight  error_highlight (default: enabled).did_you_mean  did_you_mean (default: enabled).syntax_suggest  syntax_suggest (default: enabled).rubyopt  RUBYOPT environment variable (default: enabled).frozen-string-literal  Freeze all string literals (default: disabled).rjit  Pure-Ruby JIT compiler (experimental, default: disabled).yydebug  yydebug of yacc parser generator.parsetree  Abstract syntax tree (AST).-optimize  Disable optimization (affects insns).+error-tolerant  Error-tolerant parsing (affects yydebug, parsetree).+comment  Add comments to AST (affects parsetree with --parser=parse.y).--backtrace-limit=num  Set backtrace limit.--copyright  Print Ruby copyright.--crash-report=template  Set template for crash report file.--disable=features  Disable features; see list below.--dump=items  Dump items; see list below.--enable=features  Enable features; see list below.--external-encoding=encoding  Set default external encoding.--help  Print long help message; use -h for short message.--internal-encoding=encoding  Set default internal encoding.--parser=parser  Set Ruby parser: parse.y or prism.--verbose  Set $VERBOSE to true; ignore input from $stdin.--version  Print Ruby version.-y , --yydebug Print parser log; backward compatibility not guaranteed.-0[octal]  Set input record separator ($/):
-0 for \0; -00 for paragraph mode; -0777 for slurp mode.-a  Split each input line ($_) into fields ($F).-c  Check syntax (no execution).-Cdirpath  Execute program in specified directory.-d , --debug Set debugging flag ($DEBUG) to true.-e 'code'  Execute given Ruby code; multiple -e allowed.-Eex[:in] , --encoding=ex[:in] Set default external and internal encodings.-Fpattern  Set input field separator ($;); used with -a.-i[extension]  Set ARGF in-place mode;
create backup files with given extension.-Idirpath  Add specified directory to load paths ($LOAD_PATH);
multiple -I allowed.-l  Set output record separator ($\) to $/;
used for line-oriented output.-p  Like -n, with printing added.-rlibrary  Require the given library.-s  Define global variables using switches following program path.-S  Search directories found in the PATH environment variable.-v  Print version; set $VERBOSE to true.-W[level=2|:category]  Set warning flag ($-W):
0 for silent; 1 for moderate; 2 for verbose.-x[dirpath]  Execute Ruby code starting from a #!ruby line.--jit  Enable JIT for the platform; same as --rjit (experimental).--rjit  Enable pure-Ruby JIT compiler (experimental).-h  Print this help message; use --help for longer message.\N�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�PN�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z��Q�Z�Z�PS�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z��R�Z�R�PR�Z�Z��S�Z�S�Z�Z�Z�Z�Z�Z�Z�8T�Z�Q�Z�pQ��R�Z�Z�Z�Z�Z�Z�Z�Z�HQ�Z� Q��P�P�Z�Z�@P�P�Z�Z��O�Z�O�Z�O�Z�PO�O�Z�Z�N�N�T�pT�W�zT�zT�zT�_T�zT�zT�zT�zT�zT�zT�zT�zT�W�zT�zT�zT�zT�W�zT�W�zT�zT�zT�zT�zT�zT�zT�zT�zT�zT�zT�W�zT�zT�zT�_T�zT�zT�zT�zT�zT�zT�zT�zT�W�zT�zT�zT�zT�W�zT�W�frozen_string_literalgems, error_highlight, did_you_mean, syntax_suggest, rubyopt, frozen_string_literal, rjit, yjitversion, copyright, usage, help, yydebug, syntax, parsetree, insnsno-
unknown literal type (%s) passed to negative_numericunexpected rb_parser_ary_data_type (%d) for script linesBlocking function was already invoked!Scheduler must implement #blockScheduler must implement #unblockScheduler must implement #kernel_sleepScheduler must implement #io_waitscheduler_closetimeout_afterkernel_sleepprocess_waitio_readio_preadio_writeio_pwriteio_waitio_selectio_closeaddress_resolveblocking_operation_wait�7�5Out of shapesUnreachable�s�T��|��s��s���0��s���s���������s�The class %li reached %d shape variations, instance variables accesses will be slower and memory usage increased.
It is recommended to define instance variables in a consistent order, for instance by eagerly defining them all in the #initialize method.Ivar should not exist on transitionRuby:Init_default_shapes:shape_listRuby:Init_default_shapes:shape_cachebad signal type %ssignal name with null bytenegative signal name: % liunsupported signal '%.*s%li'pthread_sigmask:unblockSEGVSegmentation fault at %pIllegal instruction at %pBUSBus Error at %pSIG%sSIG%uinvalid signal number (%d)SIGbad handlerSYSTEM_DEFAULTSIG_IGNSIG_DFLIGNORESignaltrapsignamesignmcan't trap reserved signal: SIG%scan't trap reserved signal: %d��-��-��-��9��-��!��~��-��-��-��-��-��-��T��:�����������:��:��:��x��:��:�����T�������������:�����:��:��:��:��:��:��:��:��:��:��:��:��:���� handler
 received in failed to install RUBY_SIGCHLD handlerfailed to install SIGSYS handlerfailed to install SIGPIPE handlerfailed to install SIGSEGV handlerfailed to install SIGILL handlerfailed to install SIGBUS handlerfailed to install SIGUSR2 handlerfailed to install SIGUSR1 handlerfailed to install SIGALRM handlerfailed to install SIGTERM handlerfailed to install SIGQUIT handlerfailed to install SIGHUP handlerfailed to install SIGINT handlerSIGEXITHUPINTQUITILLTRAPABRTIOTFPEKILL	BUSSEGVSYSPIPE
ALRMTERMURGSTOPTSTPCONTCHLDCLDTTINTTOUIOXCPUXFSZVTALRMPROFWINCHUSR1
USR2PWRPOLLrb_vsprintf reenterednumbered(%d) after namedinvalid index - %d$too big stringtoo big specifierInf0x0X0b0Bmalformed format stringflag after widthflag after precisionvalue given twice - %d$too few argumentswidth given twicewidth after precisionnamed%.*s after <%li>named%.*s after numberedone hash requiredkey%.*s not foundprecision given twiceprec too bigprecision too biginvalid format character - %%invalid characterinvalid mbstring sequencenumbered(%d) after unnumbered(%d)malformed format string - %%*[0-9]unnumbered(%d) mixed with numberedunnumbered(%d) mixed with namedcannot construct wchar_t based encoding string: %sincomplete format specifier; use %%%% (double %%) insteadmalformed format string - %%%ctoo long name (%zu bytes) - %.*s...%cnamed%.*s after unnumbered(%d)too many arguments for format stringmalformed name - unmatched parenthesisG��k��k�����k��k��k��k��k��k������k�������k����6��6��6��6��6��6��6��6��6��k��k��k��k��k��k��k����k��k��|��X��k����k��k��k��k��-��k��k��o��k��k��k��k��k��6��k��k����k��k��k��k��k��k��k��k����k�����
��X�����������k��k����k����������k��k��b����f��k��k�����k�����P�P�$�P�$�P�P�P�P�\�6�P���P��.�.�.�.�.�.�.�.�.�P�P��P�P�P�P�4
�T�P�P�4
�P�4
�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�T�P�P�P�P�P�P�P�P�4
�T��T�4
���4
�P�T�P�P�P�P�P�T��
�P�P��
�P�T�P�P�T�P�P��0000000000000000                st_table too bigxi�i��i�j��i��i�@i�j� 	�	



 @ @� @ � !!""##$$% %&@&'�'(())**++,,- -.@./�/00112233445 56@67�78899::;;<<= =>@>?�%*d%0*d%*ld%0*ld�}�t�|}�t�t�t�t�t�t�t�\}�t�t�s�s�s�s�s�s�s�s�s�s�\w�t�t�t�t�t�t��{�l{�L|�Ls�y�x�w�w�Tv�t�t�<v�,u�\t��z�z�t�{�w�lq�����܈�lq�܋�L��t�t�t�|��d��t���,��̃�����t�w�,��t�����T������t�z�t�,��L�����~�l~�Ls�~���AMPMJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberSundayMondayTuesdayWednesdayThursdayFridaySaturday%+*ld%+.*ld%a %b %e %H:%M:%S %Y%m/%d/%y%02d%I:%M:%S %p%H:%M%e-%^b-%4YcCxXyYdeHkIlmMSuUVwWy%0*ld%0*d%Y-%m-%dwide char encoding: %stoo many optionsinvalid second optioninvalid optionlen == 0type mismatch: String giveninput string invalidnegative length %ldindex %ld out of stringstring size too bigNULL pointer givenwchar encoding givennot encoding capable objectzero width paddingstring contains null charstring contains null bytecrypt'$;'$; is set to non-nil valuenon-ASCII character detectedunterminated dumped stringinvalid escapeblock should not cheat%.*ld%.*dregexp not matchedindex %d out of regexpregexp group %d not matchedstring not matched\u%04X\u{%X}\x{%X}value of %li must be Stringno receiver givencasecmp?succ!next!byteindexbyterindexsetbytebyteslicebytesplicescrubscrub!+@dedupundumpasciiturkiclithuanianfoldupcasedowncasecapitalizeswapcaseupcase!downcase!capitalize!swapcase!hexoctcharscodepointsgrapheme_clustersappend_as_bytesinternto_symstart_with?end_with?scanljustrjustcenterlstriprstripdelete_prefixdelete_suffixgsub!chop!chomp!lstrip!rstrip!delete_prefix!delete_suffix!tr_ssqueezetr_s!delete!squeeze!each_grapheme_clusterrpartitionforce_encodingvalid_encoding?ascii_only?UnicodeNormalizeunicode_normalizeunicode_normalize!unicode_normalized?$-Fall_symbolsmapping_buffercannot compile grapheme cluster regexp: %soption :fold only allowed for downcasingincompatible encoding with this operation: %s$/ is set to non-default valueinvalid range "%c-%c" in string transliterationinvalid range in string transliterationunicode_normalize/normalize.rbtemporal unlocking already unlocked string%s is returning NULL!! SIGSEGV is highly expected to follow immediately.
If you could reproduce, attach your debugger here, and look at the passed string.
offset %ld does not land on character boundaryabout to free a possible shared rootcan't modify string; temporarily lockedwrong argument type %li (expected String or Integer)append_as_bytes arguments should have been validatednegative expanding string sizereplacement must be valid byte sequence '%+li'salt too short (need >=2 bytes)value of %li must be String or Regexp%+li is not a symbol nor a stringvalue of $; must be String or Regexptemporal locking already locked stringcan't set length of shared stringboth of block and replacement givendumped string contained Unicode escape but used force_encodingdumped string has unknown encoding namehex escape and Unicode escape are mixedinvalid dumped string; not wrapped with '"' nor '"...".force_encoding("...")' formwrong number of arguments (given %d, expected 2, 3, or 5)���f��`����������������ֺ�̺�º���������������v��l��b��\��ؼ���������ؽ�ʽ����������������z��p�������������������������������}�r�g�`��������������������ߐ�Ґ�Ő�������9��,���������������`��������������� �������������������������8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8����8��8��8��8������8��8������8��8��8��8��8��8��8����8��8��8����8���������8��H������$��$��������$��$��$��$��$��$��$�����$��$��$�����$����$��$��L1�<1�,1�1�1�1��0�/�/�/�/�/�/�/�/�/�/�/�/�/�0�0��0��0��0�0�0�x0��/��/��/��/��/��/��/��/��/��/��/��/��/�80�.force_encoding("\X\X\X\X?��������?�....dup.force_encoding("%s")setup_fake_str333333�?offset %ld too small for struct(size:%ld)offset %ld too large for struct(size:%ld)identifier %1$s needs to be constantredefining constant %li::%listruct size differs (%ld required %ld given)struct size differs (%d required %ld given)wrong argument type %li (expected Array or nil)no member '%1$s' in structduplicate member: %skeyword_init?define#<data #<struct invalid data member: %liduplicate member: %liinconsistent structkeyword_initinvalid struct member: %li(keyword_init: true)struct size mismatchbroken membersunknown keywords: %sstruct size differsuninitialized structcorrupted struct:...>'%1$s' is not a struct memberStruct__members____members_back____keyword_init__non-symbol object %s:%lx for %li in symbol table%p can't remove str from str_id (%s)invalid symbol in encoding %s :%+lisymbol table overflow (symbol %li)wrong argument type %s (expected Symbol)cannot make operator ID :%li attrsetcannot make unknown type ID %d:%li attrsetcannot make unknown type anonymous ID %d:%lx attrsetcannot make anonymous %.*s ID %lx attrsettoo big to make temporary ID: %zdinvalid symbol: %s__recursive_key__btbt_locations_1_2_4_5_6_7_9respond_to?respond_to_missing?<IFUNC><CFUNC>core#set_method_aliascore#set_variable_aliascore#undef_methodcore#define_methodcore#define_singleton_methodcore#set_postexecore#hash_merge_ptrcore#hash_merge_kwdcore#raisecore#sprintf_bi28�������������������������������������������������������������������O������ݥ�����������Х���������������������������������������x����A������������������������������������������������������������������������������������������������������������������������������titlecaseletterlocalinstanceinvalidglobalattrsetconstclassjunk�..�...�+@�-@�**�<=>�<<�>>�<=�>=�==�===�!=�=~�!~�[]�[]=�::�&&�||�&.pthread_cond_timedwaitcannot freeze %+li%+li not initializedpthread_attr_init(&attr)pthread_attr_destroy(&attr)unknown mask signaturedeadabortingpthread_rwlock_rdlockpthread_rwlock_unlockepoll_ctlqueue size must be positivesleep_forever#<%li:%p@%li %s>can't alloc threadpthread_mutex_lockpthread_mutex_unlockunexpected THREAD_STOPPEDunexpected THREAD_KILLEDqueue closedN/A mutex:%p cond:%zu
   uninitialized threadpthread_mutex_trylockpthread_mutex_initpthread_mutex_destroypthread_cond_initpthread_cond_destroypthread_cond_signalrb_native_cond_broadcastpthread_cond_waitcan't create Thread: %smust be called with a blockalready initialized threadRUBY_MN_THREADSRUBY_MAX_CPU!!!pthread_rwlock_destroypthread_rwlock_initpthread_rwlock_wrlockthread_syncinvalid keeping_mutexes: %sclose event_fdepoll_create (errno:%d)queue fullqueue emptyevent_waitevent_wait errno:%dkilled threadblock is needed.thread.creleaseddeadlock; recursive lockingBlocking operation timed out!waiting count overflowwaiting count underflowdestroyed thread shield - %pneverimmediateon_blockingstoppassabort_on_exceptionabort_on_exception=report_on_exceptionreport_on_exception=ignore_deadlockignore_deadlock=handle_interruptpending_interrupt?terminatewakeuppriority=thread_variable_getthread_variable_setthread_variablesthread_variable?stop?name=native_thread_idThreadGroupencloseenclosed?RUBY_THREAD_TIMESLICEDefaultThreadErrorMutextry_locksynchronizeClosedQueueErrornum_waitingenqSizedQueuemax=ConditionVariablethread.rbrb_queue_poprb_szqueue_poprb_szqueue_pushthread_shieldthgroupcondvarsized_queuemutexrb_thread_wakeup_timer_thread: writepthread_attr_setstacksize(&attr, stack_size)pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED)pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)Target thread must not be current threadTarget thread must not be main threadthread_join: Fixnum (%d) should not reach here.thread_join: THROW_DATA should not reach here.unregister/epoll_ctl fails. errno:%dclass or module required for rescue clauseuninitialized thread - check '%li#initialize'can't modify frozen thread localscan't move to the frozen thread groupcan't move to the enclosed thread groupcan't move from the frozen thread groupcan't move from the enclosed thread groupAttempt to unlock a mutex which is not lockedAttempt to unlock a mutex which is locked by another thread/fibersleeper must not be more than vm_living_thread_num(vm)* %+li
   rb_thread_t:%p native:%p int:%u
    depended by: tb_thread_id:%pNo live threads left. Deadlock?
%d threads, %d sleeps current:%p main thread:%p
can't start a new thread (frozen ThreadGroup)Ruby:nt_alloc_thread_stack_chunkalready initialized thread - %li:%liregister/epoll_ctl failed(fd:%d, errno:%d)close_invalidate: timer_th.comm_fdscan not create communication pipeconsume_communication_pipe: readinvalid inspect_tbl pair_list for %+li in %+li[BUG] rb_thread_call_with_gvl() is called by non-ruby thread
rb_thread_call_with_gvl: called by a thread which has GVL.rb_thread_terminate_all: called by child thread (%p, %p)can't be called from trap contextdeadlock; lock already owned by another fiber belonging to the same threaddo_mutex_lock: mutex is not owned. terminated with exception (report_on_exception is true):
thread_start_func_2: locking_mutex must not be set (%p:%lx)stopping only thread
	note: use sleep to stop foreverstream closed in another threadThe first rb_internal_thread_specific_key_create() is called with multiple ractorsrb_internal_thread_specific_key_create() is called more than %d timesrb_thread_call_with_gvl"+HH:MM", "-HH:MM", "UTC" or "A".."I","K".."Z" expected for utc_offset: %lican't convert %li into an exact numbertime interval must not be negativeunexpected divmod result: into %liyear too %s to marshal: %li UTCtime string should have ASCII compatible encodingyear must be 4 or more digits: %.*sfraction hour is not supported: %.*sfraction min is not supported: %.*ssubsecond expected after dot: %.*sformat should have ASCII compatible encodingstrftime called with empty format stringtime interval%f out of Time rangecan't convert %li into %s(NO-TIMEZONE-ABBREVIATION)two digits %s is expected after '%c'gmtime/localtime errortime out of rangeuninitialized %lialready initialized %liutc_offset out of rangemon out of rangemday out of rangehour out of rangemin out of rangesec out of rangesubsecx out of rangeargument out of rangenegative ndigits givendst?time out of system rangegmtime errortime + time?localtimew errorisdst is not set yetinvalid format: %s%Y-%m-%d %H:%M:%S UTC%Y-%m-%d %H:%M:%S %z%a %b %e %T %Y%Y-%m-%d %H:%M:%S.%09ld %c%.2d%.2dstdcan't parse: %+limdayhourmissing min part: %.*smissing sec part: %.*scan't parse at: no time informationmarshaled time format differinvalid format: %liabbr%Zstrftimesubmicronano_numnano_denlocal_to_utcutc_to_localyearisdstfind_timezonemonthydaywdaysubsecTimemktimelocaltimegmtimegetlocalgetgmgetutcasctimegmtoffgmt_offsetutc_offsetutc?gmt?sunday?monday?tuesday?wednesday?thursday?friday?saturday?tv_sectv_usectv_nsecxmlschemaiso8601tmto_timefrom_timetimevtime_s_nowtime_s_at1time_s_attime_init_nowtime_init_parsetime_init_args���+��+��+��+�����+��+��+��+����+����+��+��+�����L����L�����L���������L��l��janfebmaraprmayjunjulaugsepoctnovdec�������������������������������������������������������������������������������������������	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

																														






























																														






























��;Zx����0N��:Yw����/Mxml_text_escapexml_attr_content_escapexml_attr_quotecrlf_newlinecr_newlineuniversal_newlineincomplete %s on %s%s followed by %s on %sU+%04X%s from %s to %sxml_textxml_attr_contentno-conversion with invalid library name - (null)�US-ASCII&#x%X;negative output_byteoffsetoutput_byteoffset too bignegative output_bytesizetoo long conversion resultconverter already finishedcode converter not found (already initializeddecoration failed: %stoo big fallback stringtoo long stringUndefinedConversionErrorInvalidByteSequenceErrorConverterNotFoundErrorencodeencode!Converterasciicompat_encodingsearch_convpathsource_encodingdestination_encodingprimitive_convertprimitive_errinfoinsert_outputputbacklast_errorreplacementreplacement=INVALID_MASKINVALID_REPLACEUNDEF_MASKUNDEF_REPLACEUNDEF_HEX_CHARREFPARTIAL_INPUTAFTER_OUTPUTUNIVERSAL_NEWLINE_DECORATORCRLF_NEWLINE_DECORATORCR_NEWLINE_DECORATORXML_TEXT_DECORATORXML_ATTR_CONTENT_DECORATORXML_ATTR_QUOTE_DECORATORsource_encoding_namedestination_encoding_nameerror_charerror_bytesreadagain_bytesincomplete_input?incomplete_inputfallbackxmlinvalid_byte_sequenceundefined_conversiondestination_buffer_fullsource_buffer_emptyafter_outputpartial_inputuniversalcrlfcreconv�Q��Q��Q�R�R�Q��Q�o�Qh�(i�Vj�h�i�k�0l��k��p�m�xl�p�o�hn��p�p�p�p�q�h�*h�(i�i�h�k�xg�q�(q�ho�xo�p��r�}r�k�k��r�Kk�[p�q��r�q��j�_q��r��p�m�k��r��q�f�n��r�x�x�x��r�x�x�x��r�%s to %s in conversion from %suninitialized encoding converterunknown transcoding instructionunexpected transcode last resulttranscoder from %s to %s has been already registeredoutput_byteoffset+output_bytesize too bigunexpected result of econv_primitive_convertreplacement character setup failedunknown value for invalid character optionunknown value for undefined character option:newline option precedes other newline optionsreplacement string is broken: %s as %sunexpected value for newline option: %liunexpected value for newline optionunexpected value for xml option: %liunexpected value for xml optionrb_econv_open_opts called with invalid opthashnot a 2-element array in convpathadding conversion failed: %s to %snot fully converted, %td bytes leftgetcwdruby_getcwd_guard���8��8��8��8��8��8��8��8�� �� �� �� �� ��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8�� ��8��8��8��8��8��8��8��8��8��8�����8����}NaNInfinity��ؗ�Ҝ<3���#�I9=��D��2�����[%Co�d(h��7y�ACn����F��?�O8M20�Hw�Z<�s�Ou�?$@Y@@�@��@j�@��.A�cA�חAe��A _�B�vH7B��mB@�0�B�ļ�B4&�kC��7y�AC�؅W4vC�Ngm��C=�`�X�C@��x�DP����KD��M��D������������������������������������������������	�������

 !"#������

 !"#�������������������������������������������������������������������������������������������������������������������������������������0123456789abcdef0123456789ABCDEF��7y�AC�?�����A�5�����?5�5�?�5�����?�?aCoc���?��`�(��?�y�PD�?<�s�Ou@@`global variable '%li' not initializedcan not access global variables %s from non-main Ractorscan not set instance variables of classes/modules by non-main Ractorscan not access instance variables of shareable objects from non-main Ractorsthe temporary name must not be a constant path to avoid confusionundefined global variable %liglobal variable '%s' not initializedcan not access global variables from non-main Ractorscan not get unshareable values from instance variables of classes/modules from non-main Ractorsalready initialized constant %lialready initialized constant %li::%liprevious definition of %li was hereno class/module to define constant %lican not set constants with non-shareable objects by non-main Ractorsclass variable % li of %li is overtaken by %li'%1$s' is not allowed as an instance variable nameinstance variable %1$s not definedprivate constant %2$s::%1$s referenceduninitialized constant %2$s::%1$sautoload must be constant name: %liconstant %li::%li is deprecatedrb_define_const: invalid name '%s' for constantcan not access class variables from non-main Ractorswrong class variable name %1$sclass variable %1$s not defined for %2$scan't retrieve anonymous class %lican not access non-shareable objects in constant %li::%s by non-main Ractor.constant %2$s::%1$s not defined'%1$s' is not allowed as a constant variable nameExpected %li to define %li but it didn'tExpected %li to define %li::%li but it didn't%li with no argument is just ignored%li is a read-only variable__autoload__can't change permanent nameempty class/module namecan't alias in tracer::Ruby#<Class:%p>#<Module:%p>uninitialized constant %1$sempty feature nameconstant ::%li is deprecatedcannot remove %1$s for %2$sundefined class/module % licannot remove %2$s::%1$sautoload_constautoload_dataautoload_table +MN +PRISMRUBY_DESCRIPTIONRUBY_VERSIONRUBY_RELEASE_DATERUBY_PLATFORMRUBY_PATCHLEVELRUBY_REVISIONRUBY_COPYRIGHTRUBY_ENGINERUBY_ENGINE_VERSIONruby2_keywords.rb +RJIT +YJITrubyruby - Copyright (C) 1993-2025 Yukihiro Matsumotoruby 3.4.4 (2025-05-14 revision a38531fd3f) [x86_64-linux]"x86_64-linux2025-05-14a38531fd3f617bf734ef7d6c595325f69985ea1d3.4.4ruby 3.4.4 (2025-05-14 revision unsupported length: %d..%d  | %s (len:%d) vm_method.c  |   	 and uses 'yield'.block_given?iterator?the cvc table should be setshould have cvar cache entry%li is not a %s  > noreasonvm_get_cref: unreachablevariable '%li'a hidden variableconstant_cache_invalidationsconstant_cache_missesglobal_cvar_statenext_shape_idshape_cache_size%+li is not a class/moduleno class variables available[%s] # vm_mtbl
  ->   [MTBL]   ## RCLASS_M_TBL (%p)
    MTBL: NULL
  [CM**]   ## RCLASS_CALLABLE_M_TBL
  [CCTB] %p
filter_defined_class: %sno self, no lifeuncaught throw %p(eval at vm_eval.cnot supported yetisolate a Procmake a Proc shareableno keywords accepted<temp>vm_cref_dup: unreachablebreak from proc-closureunexpected returnno block given (yield)unexpected breakunexpected nextunexpected redo<unknown>RubyVM::FrozenCoreno method name givenNULL lambda functionRUBY_THREAD_VM_STACK_SIZERUBY_FIBER_VM_STACK_SIZERUBY_FIBER_MACHINE_STACK_SIZE(eval at %li:%d)(eval)yjit_hookrespond_to? is defined herevm_defined: unreachable: %uunexpected back-refunknown defineclass type: %dsame!!RubyVMkeep_script_lineskeep_script_lines=Threaddirect threaded codeoperands unificationinline method cacheINSTRUCTION_NAMESthread_vm_stack_sizethread_machine_stack_sizefiber_vm_stack_sizefiber_machine_stack_sizeDEFAULT_PARAMSno class/module to add methodpubliccatchthrowpublic_sendmodule_execclass_execmodule_evalclass_evalUncaughtThrowErrortagremove_methodalias_methodpublic_method_defined?private_method_defined?protected_method_defined?public_class_methodprivate_class_methodno class to make aliascheck_match: unreachableno class to undef methodTOPLEVEL_BINDING is not builtvm.cVM/pin_array_listVM/thread�y��y��y�z�z� z�0z�@z�Pz�`z�pz�z�z�z�z�z��z�y�z�z��z��z��z�z�{�{�({�8{�H{�X{�h{�x{�{�{�hy�z�|�|�|�|��|�|�p|�|�|�|�|�p|�H��@�����ȧ�Ц���
�
���(
��
�(
����(
��
�h6�6�h6�h6�6�X6�Y�X6�X6�h6�6�<7�T7�t7�t7�7�7�;�7�7�$7�7�8� :�:�:��9��9��9�9�9�9�9�9�p9�`9�P9�@9�0:�09� 9�9�9��8��8�0:�0:�0:��8�8�8�8�8�t��T��d����<��܁�
�
���
�4��L��,��|����,��
�
�
�
�
�������,��-
��G�ZG�vG�G�G�G�+�+�O�O�+�+�+�+�+�+�+�+�+�+�+�+�+�Q�DP��P�ZQ�pw�w� y�x�y�w�`x�
��w�z�w�y����ș��(�����L����<�����O
����|����� $����vm_set_main_stackrb_current_ifuncvm_ccs_dump_iStack consistency error (sp: %td, bp: %td); required keywordswrong number of arguments (given %d, expected %dcref_replace_with_duplicated_cref_each_frame: unreachablecan not %s because it accesses outer variablescan not %s because it uses 'yield'.thread_free: locking_mutex must be NULL (%p:%p)thread_free: keeping_mutexes must be NULL (%p:%p)ractor unsafe method called from not main ractor
%li:%li: previous definition of %li was herecalling %s without arguments inside a method may not have the intended effectundefined optimized method: %sRedefining '%s#%s' disables interpreter and JIT optimizationscan not make shareable Proc because it can refer unshareable object %+li from system stack overflow during GC. Faulty native extension?can not access non-shareable objects in constant %li::%s by non-main ractor.class variable access from toplevelSkipping set of ruby2_keywords flag for %li (method accepts keywords or method does not accept argument splat)Skipping set of ruby2_keywords flag for %li (method not defined in Ruby)Skipping set of ruby2_keywords flag for %li (can only set in method defining module)super called outside of methodself has wrong type to call super in this context: %li (expected %li)implicit argument passing of super from method defined by define_method() is not supported. Specify all arguments explicitly.can't define an allocator for a singleton classrb_method_definition_eq: unsupported type: %drb_hash_method_definition: unsupported method type (%d)method '%li' called on terminated object (%p)method '%li' called on broken T_???(0x%02x) object (%p flags=0x%lx)method '%li' called on hidden %s object (%p flags=0x%lx)method '%li' called on unexpected %s object (%p flags=0x%lx)method '%li' called on unexpected immediate object (%p)undefined method '%1$s' for %3$s%4$simemo_type_p(ifunc, imemo_ifunc)Proc's self is not shareable: %lidefined with an un-shareable Proc in a different Ractorvm_make_proc_with_iseq: unreachableCan't create Binding Object on top of Fiber.Cannot create Binding object for non-Ruby callerCan't call on top of Fiber or Threadisns(throw): unsupported throw typeretry outside of rescue clausevm_call_cfunc: cfp consistency error (%p, %p)private method '%1$s' called for %3$s%4$sprotected method '%1$s' called for %3$s%4$sundefined local variable or method '%1$s' for %3$s%4$ssuper: no superclass method '%1$s' for %3$s%4$smethod name must be a Symbol but %li is givenRUBY_THREAD_MACHINE_STACK_SIZEthe block passed to '%li' defined at %li:%li may be ignoredthe block may be ignored because '%li' does not use a blockrespond_to? must accept 1 or 2 arguments (requires %d)%li%crespond_to?(:%li) uses the deprecated method signature, which takes one parameterunimplemented defined? type (VM)not defined at the refinement, but at the outer class/moduleputspecialobject insn: unknown value_type %dunknown operand %ld: blame @shyouhei.superclass mismatch for class %livm_call_method: unsupported method type (%d)vm_call_method: unsupported optimized method type (%d)rb_yield_refine_block: an iseq block is requiredvm_call0_cfunc_with_frame: cfp consistency error (%p, %p)vm_call0: unsupported optimized method type (%d)vm_call0: unsupported method type (%d)vm_call_super: should not be reachedarity out of range: %d for -2..15method redefined; discarding old %li
%s:%d: warning: previous definition of %li was heremethod redefined; discarding old %liredefining Object#%s may cause infinite loopredefining '%s' may cause serious problemsattribute accessor as module_functionmodule_function must be called for modulesremoving '%s' may cause serious problemsmethod '%1$s' not defined in %2$sundefining '%s' may cause serious problemswrong argument type %s (expected Proc)Can't eval on top of Fiber or ThreadNot a toplevel InstructionSequenceframe2iseq: unreachableruby%s:%d:in unknown method
	from %s:%d:in '%s'
no such frame	from %li:%d:in  '%li'
%li#%liunknown methodBacktracecallercaller_locationseach_caller_location<cfunc>#<%s:%p>%li%s%li%.*s%liframe_info-- Ruby level backtrace information ----------------------------------------
	from %s:%d:in unknown method
calculate_iseq_label: unreachable]�]�\�]�(]�(]�(]�]�\�<internal:CFUNCIFUNCDUMMYe:%06td E:%06tx c:%04td p:---- p:%04td s:%04td %-6s [FINISH]  self: %s
  me:
    called_id: %s, type: %s
    owner class: %s
    defined_class: %s
 me is corrupted (%s)
  lvars:
    %s: %s
 %3.3s: 0x%.*zx-- env --------------------
%04d: %08lx (%p) <- ep---------------------------
-- proc -------------------
Thread state dump:
pc : %p, sp : %p
cfp: %p, ep : %p
RUBY_ON_BUG%s %dTotal ractor count: %u
RIPRBPRSPRAXRBXRCXRDXRDIRSIR8R9R10R11R12R13R14R15EFL/proc/self/maps* Loaded script: %.*s
* Loaded features:

 %4d %.*s
 %4d %s:<unnamed>
 %4d %s:%.*s
 %4d #<%p:%p>
 %4d #<%.*s:%p>
* Process memory map:

th: %p, native_id: %p
-- Control frame information -----------------------------------------------
  [PC] %04td, [SP] %04td, [EP] %04td, [CFP] %04td
Launching RUBY_ON_BUG command failed.Crashed while printing bug report
-- Threading information ---------------------------------------------------
Ruby thread count for this ractor: %u
Note that the Fiber scheduler is enabled
-- Machine register context ------------------------------------------------
-- C level backtrace information -------------------------------------------
-- Other runtime information -----------------------------------------------

unexpected situation - recordd:%u current:%ushould be NULL, but %pc-callc-returnaccess from outsideNo need to allow reentrance.trace_func needs to be Procc_callc_returnthread_beginthread_endfiber_switchscript_compileda_calla_returnunknown event: %linot supported by this eventdisabled#<TracePoint:%li %li>#<TracePoint:%li %li:%d>#<TracePoint:%s>only target_line is specifiedcan not enable any hookstrace_pointset_trace_funcadd_trace_funcTracePointtracepoint_new_stracepoint_inspecttracepoint_stat_stracepoint_trace_stracepoint_allow_reentrytracepoint_enable_mtracepoint_disable_mtracepoint_enabled_ptracepoint_attr_eventtracepoint_attr_linenotracepoint_attr_pathtracepoint_attr_parameterstracepoint_attr_method_idtracepoint_attr_callee_idtracepoint_attr_defined_classtracepoint_attr_bindingtracepoint_attr_selftracepoint_attr_return_valuetracepoint_attr_eval_scripttracepointCan not specify normal event and internal event simultaneously.can't nest-enable a targeting TracePointcan't disable a targeting TracePoint in a block#<TracePoint:%li %li:%d in '%li'>#<TracePoint:%li '%li' %li:%d>rb_tracearg_return_value: unreachablerb_tracearg_raised_exception: unreachablerb_tracearg_object: unreachablecan not override target_thread filterspecified target is not supportedtarget_line is specified, but line event is not specifiedtracepoint_attr_raised_exceptiontracepoint_attr_instruction_sequenceWeakKeyMap keys must be garbage collectable#<%li:%p size=%lu>WeakMapWeakKeyMapgetkeyweakkeymapweakmapunknown node type: %dAliasGlobalVariableNodeAliasMethodNodeAlternationPatternNodeAndNodeArrayNodeArrayPatternNodeAssocNodeAssocSplatNodeBackReferenceReadNodeBeginNodeBlockArgumentNodeBlockLocalVariableNodeBlockNodeBlockParameterNodeBlockParametersNodeBreakNodeCallAndWriteNodeCallNodeCallOperatorWriteNodeCallOrWriteNodeCallTargetNodeCapturePatternNodeCaseMatchNodeCaseNodeClassVariableAndWriteNodeClassVariableOrWriteNodeClassVariableReadNodeClassVariableTargetNodeClassVariableWriteNodeConstantAndWriteNodeConstantOperatorWriteNodeConstantOrWriteNodeConstantPathAndWriteNodeConstantPathNodeConstantPathOperatorWriteNodeConstantPathOrWriteNodeConstantPathTargetNodeConstantPathWriteNodeConstantReadNodeConstantTargetNodeConstantWriteNodeDefNodeDefinedNodeElseNodeEmbeddedStatementsNodeEmbeddedVariableNodeEnsureNodeFalseNodeFindPatternNodeFlipFlopNodeFloatNodeForNodeForwardingArgumentsNodeForwardingParameterNodeForwardingSuperNodeGlobalVariableAndWriteNodeGlobalVariableOrWriteNodeGlobalVariableReadNodeGlobalVariableTargetNodeGlobalVariableWriteNodeHashPatternNodeIfNodeImaginaryNodeImplicitNodeImplicitRestNodeInNodeIndexAndWriteNodeIndexOperatorWriteNodeIndexOrWriteNodeIndexTargetNodeInstanceVariableAndWriteNodeInstanceVariableOrWriteNodeInstanceVariableReadNodeInstanceVariableTargetNodeInstanceVariableWriteNodeIntegerNodeInterpolatedMatchLastLineNodeInterpolatedStringNodeInterpolatedSymbolNodeInterpolatedXStringNodeItLocalVariableReadNodeItParametersNodeKeywordHashNodeKeywordRestParameterNodeLambdaNodeLocalVariableAndWriteNodeLocalVariableOrWriteNodeLocalVariableTargetNodeLocalVariableWriteNodeMatchPredicateNodeMatchRequiredNodeMatchWriteNodeMissingNodeModuleNodeMultiTargetNodeMultiWriteNodeNextNodeNilNodeNoKeywordsParameterNodeNumberedParametersNodeNumberedReferenceReadNodeOptionalKeywordParameterNodeOptionalParameterNodeOrNodeParenthesesNodePinnedExpressionNodePinnedVariableNodePostExecutionNodePreExecutionNodeProgramNodeRangeNodeRationalNodeRedoNodeRegularExpressionNodeRequiredKeywordParameterNodeRequiredParameterNodeRescueModifierNodeRescueNodeRetryNodeReturnNodeSelfNodeShareableConstantNodeSingletonClassNodeSourceEncodingNodeSourceFileNodeSourceLineNodeTrueNodeUndefNodeUnlessNodeUntilNodeWhenNodeWhileNodeYieldNode����������d������r��b��Y�������8�����z��������J��k���� ��j�������������}���������������\��(������������R����l�������������B��c������������I�������^����������������,��������M��n�����l������������c�����{����r��������������������Z�����"����������������B�����������������������Z�������*��t��B��7��������������`������������������?��c������������������������������������������������X��y��������������$�������7�������e����Bm�gl��*�*�}�9|�E~��=��O�?r��t��d�bc�b�5��3��0��B�A���m@�7���u���A���x�G�\F��&�%�_$�#�y;�|:�9�p8�<p�o�M�%�`�h_�X^�R]�t�s�Zu�f2�n�n�v�D� ��X��q�
i�WI�/H��g�uf�(�'�3=�<�Xe����C� ��kN�CM�L��K�kV��U�e/�5.�Y�LX�7?�>��S�*S����\�vT��Z�E�W��Q�@"�e!�P�O�hQ�7��
��	�W	����W�g�����4��.����$�)��������}���0��������%7�W6��"���E�P��Kx�i�� ��z�y�J�J�6-��+�k�i�,������ClassVariableOperatorWriteNodeGlobalVariableOperatorWriteNodeInstanceVariableOperatorWriteNodeInterpolatedRegularExpressionNodeLocalVariableOperatorWriteNodeinvalid versioninvalid variantunsupported directivebang not alloweddouble endianparse resultSPACEUTF8BERSTRING_SPACE_PADDEDSTRING_NULL_PADDEDSTRING_NULL_TERMINATEDSTRING_MSBSTRING_LSBSTRING_HEX_HIGHSTRING_HEX_LOWSTRING_UUSTRING_MIMESTRING_BASE64STRING_FIXEDSTRING_POINTERMOVEBACKUNSIGNEDSIGNED_NAAGNOSTIC_ENDIANNATIVE_ENDIANENDIAN_NASIZE_SHORTSIZE_INTSIZE_LONGSIZE_LONG_LONGSIZE_8SIZE_16SIZE_32SIZE_64SIZE_PSIZE_NALENGTH_FIXEDLENGTH_MAXLENGTH_RELATIVELENGTH_NAPrismPackDirectiveFormatv3_2_0P��<��<��l��T������@������@������@������@�������8��ܮ��l�������X����ر��X����ذ�H��ز�prism/diagnostic.calias_argumentampampeq_multi_assignargument_after_blockargument_bare_hashargument_block_forwardingargument_block_multiargument_conflict_ampersandargument_conflict_starargument_conflict_star_starargument_formal_classargument_formal_constantargument_formal_globalargument_formal_ivarargument_forwarding_unboundargument_no_forwarding_starargument_splat_after_splatargument_term_parenargument_unexpected_blockarray_elementarray_expressionarray_expression_after_stararray_separatorarray_termbegin_lonely_elsebegin_termbegin_upcase_bracebegin_upcase_termbegin_upcase_toplevelblock_param_local_variableblock_param_pipe_termblock_term_braceblock_term_endcannot_parse_expressioncannot_parse_string_partcase_expression_after_casecase_expression_after_whencase_match_missing_predicatecase_missing_conditionsclass_in_methodclass_nameclass_superclassclass_termclass_unexpected_endclass_variable_bareconditional_elsif_predicateconditional_if_predicateconditional_predicate_termconditional_termconditional_term_elseconditional_unless_predicateconditional_until_predicateconditional_while_predicatedef_endlessdef_endless_setterdef_params_termdef_params_term_parendef_receiverdef_receiver_termdef_termdefined_expressionembdoc_termembexpr_endembvar_invalidend_upcase_braceend_upcase_termescape_invalid_controlescape_invalid_control_repeatescape_invalid_hexadecimalescape_invalid_metaescape_invalid_meta_repeatescape_invalid_unicodeescape_invalid_unicode_listescape_invalid_unicode_longescape_invalid_unicode_shortescape_invalid_unicode_termexpect_argumentexpect_eol_after_statementexpect_expression_after_commaexpect_expression_after_equalexpect_expression_after_splatexpect_expression_after_starexpect_for_delimiterexpect_ident_req_parameterexpect_in_delimiterexpect_lparen_req_parameterexpect_messageexpect_rbracketexpect_rparenexpect_rparen_after_multiexpect_rparen_req_parameterexpect_string_contentexpect_when_delimiterexpression_bare_hashexpression_not_writableexpression_not_writable_falseexpression_not_writable_fileexpression_not_writable_lineexpression_not_writable_nilexpression_not_writable_selfexpression_not_writable_truefloat_parsefor_collectionfor_infor_indexfor_termglobal_variable_barehash_expression_after_labelhash_rockethash_termhash_valueheredoc_identifierheredoc_termincomplete_question_markincomplete_variable_classincomplete_variable_class_3_3incomplete_variable_instanceinstance_variable_bareinvalid_block_exitinvalid_characterinvalid_commainvalid_escape_characterinvalid_float_exponentinvalid_local_variable_readinvalid_local_variable_writeinvalid_multibyte_charinvalid_multibyte_characterinvalid_multibyte_escapeinvalid_number_binaryinvalid_number_decimalinvalid_number_fractioninvalid_number_hexadecimalinvalid_number_octalinvalid_percentinvalid_percent_eofinvalid_printable_characterinvalid_retry_after_elseinvalid_retry_after_ensureinvalid_retry_without_rescueinvalid_symbolinvalid_variable_globalinvalid_variable_global_3_3invalid_yieldit_not_allowed_numberedit_not_allowed_ordinarylambda_openlambda_term_bracelambda_term_endlist_i_lower_elementlist_i_lower_termlist_i_upper_elementlist_i_upper_termlist_w_lower_elementlist_w_lower_termlist_w_upper_elementlist_w_upper_termmalloc_failedmixed_encodingmodule_in_methodmodule_namemodule_termmulti_assign_multi_splatsmulti_assign_unexpected_restnesting_too_deepno_local_variablenon_associative_operatornot_expressionnumber_literal_underscorenumbered_parameter_itnumbered_parameter_ordinaryoperator_multi_assignoperator_write_argumentsoperator_write_blockparameter_assoc_splat_multiparameter_block_multiparameter_circularparameter_method_nameparameter_name_duplicatedparameter_no_defaultparameter_no_default_kwparameter_numbered_reservedparameter_orderparameter_splat_multiparameter_starparameter_unexpected_fwdparameter_unexpected_no_kwparameter_wild_loose_commapattern_array_multiple_restspattern_capture_duplicatepattern_expression_after_inpattern_expression_after_keypattern_expression_after_pinpattern_expression_after_pipepattern_expression_after_restpattern_find_missing_innerpattern_hash_implicitpattern_hash_keypattern_hash_key_duplicatepattern_hash_key_interpolatedpattern_hash_key_labelpattern_hash_key_localspattern_ident_after_hrocketpattern_label_after_commapattern_restpattern_term_bracepattern_term_bracketpattern_term_parenpipepipeeq_multi_assignregexp_incompat_char_encodingregexp_invalid_unicode_rangeregexp_non_escaped_mbcregexp_parse_errorregexp_termregexp_unknown_optionsrescue_expressionrescue_modifier_valuerescue_termrescue_variablereturn_invalidscript_not_foundsingleton_for_literalsstatement_aliasstatement_postexe_endstatement_preexe_beginstatement_undefstring_concatenationstring_interpolated_termstring_literal_eofstring_literal_termsymbol_invalidsymbol_term_dynamicsymbol_term_interpolatedternary_colonternary_expression_falseternary_expression_trueunary_disallowedunary_receiverundef_argumentunexpected_block_argumentunexpected_index_blockunexpected_index_keywordsunexpected_labelunexpected_multi_writeunexpected_range_operatorunexpected_safe_navigationunexpected_token_ignoreuntil_termvoid_expressionwhile_termwrite_target_in_methodwrite_target_readonlywrite_target_unexpectedxstring_termambiguous_binary_operatorambiguous_first_argument_plusambiguous_prefix_ampersandambiguous_prefix_starambiguous_prefix_star_starambiguous_slashcomparison_after_comparisondot_dot_dot_eolequal_in_conditionalequal_in_conditional_3_3end_in_methodduplicated_hash_keyduplicated_when_clausefloat_out_of_rangeignored_frozen_string_literalindentation_mismatchinteger_in_flip_flopinvalid_magic_comment_valueinvalid_numbered_referencekeyword_eolliteral_in_condition_defaultliteral_in_condition_verboseshareable_constant_value_lineshebang_carriage_returnunexpected_carriage_returnunreachable_statementunused_local_variablevoid_statementfalse && "unreachable"unexpected bare hash argumentexpected a `{` after `BEGIN`cannot parse the expressioncannot parse the string partinvalid embedded variableexpected a `{` after `END`invalid hex escape sequenceinvalid Unicode list: %.*sexpected a matching `]`expected a matching `)`expected an index after `for`incomplete expression at `?`Invalid %sinvalid commainvalid exponenttrailing '_' in numberinvalid character `%c`%.*s: no such local variableunexpected parameter orderunexpected parameter `*`unexpected `,` in parametersunexpected rest patterninvalid Unicode range: /%.*s/unknown regexp %s - %.*sexpected a rescued expressionunexpected labelunexpected %s, ignoring itCan't set variable %.*sunexpected write targetinvalid value for %.*s: %.*s%sliteral in %sdiag_id < PM_DIAGNOSTIC_ID_MAXalias_argument_numbered_referenceargument_after_forwarding_ellipsesargument_no_forwarding_ampersandargument_no_forwarding_ellipsesargument_no_forwarding_star_starargument_splat_after_assoc_splatconstant_path_colon_colon_constantescape_invalid_unicode_cm_flagsescape_invalid_unicode_literalexpect_expression_after_ampampeqexpect_expression_after_less_lessexpect_expression_after_lparenexpect_expression_after_operatorexpect_expression_after_pipepipeeqexpect_expression_after_questionexpect_expression_after_splat_hashexpect_singleton_class_delimiterexpression_not_writable_encodingexpression_not_writable_numberedincomplete_variable_instance_3_3invalid_encoding_magic_commentinvalid_number_underscore_innerinvalid_number_underscore_trailingnumbered_parameter_inner_blocknumbered_parameter_outer_blockparameter_forwarding_after_restpattern_expression_after_bracketpattern_expression_after_commapattern_expression_after_hrocketpattern_expression_after_parenpattern_expression_after_rangeregexp_encoding_option_mismatchregexp_utf8_char_non_utf8_regexpunexpected_token_close_contextambiguous_first_argument_minusinvalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variableinvalid argument being passed to `alias`; can't make alias for the number variablesunexpected `&&=` in a multiple assignmentunexpected argument after a block argumentunexpected argument after `...`both block arg and actual block given; only one block is allowedunexpected `&`; anonymous block parameter is also used within blockunexpected `*`; anonymous rest parameter is also used within blockunexpected `**`; anonymous keyword rest parameter is also used within blockinvalid formal argument; formal argument cannot be a class variableinvalid formal argument; formal argument cannot be a constantinvalid formal argument; formal argument cannot be a global variableinvalid formal argument; formal argument cannot be an instance variableunexpected `...` in an non-parenthesized callunexpected `&`; no anonymous block parameterunexpected ... when the parent method is not forwardingunexpected `*`; no anonymous rest parameterunexpected `**`; no anonymous keyword rest parameterunexpected `*` splat argument after a `**` keyword splat argumentunexpected `*` splat argument after a `*` splat argumentunexpected %s; expected a `)` to close the argumentsunexpected '{' after a method call without parenthesisexpected an element for the arrayexpected an expression for the array elementexpected an expression after `*` in the arrayunexpected %s; expected a `,` separator for the array elementsunexpected %s; expected a `]` to close the arrayunexpected `else` in `begin` block; else without rescue is uselessexpected an `end` to close the `begin` statementexpected a `}` to close the `BEGIN` statementexpected a local variable name in the block parametersexpected the block parameters to end with `|`expected a block beginning with `{` to end with `}`expected a block beginning with `do` to end with `end`expected an expression after `case`expected an expression after `when`expected a predicate for a case matching statementexpected a `when` or `in` clause after `case`expected an `end` to close the `case` statementunexpected class definition in method bodyunexpected constant path after `class`; class/module name must be CONSTANTexpected a superclass after `<`expected an `end` to close the `class` statementunexpected `end`, expecting ';' or '\n'expected a predicate expression for the `elsif` statementexpected a predicate expression for the `if` statementexpected `then` or `;` or '\n'expected an `end` to close the conditional clauseexpected an `end` to close the `else` clauseexpected a predicate expression for the `unless` statementexpected a predicate expression for the `until` statementexpected a predicate expression for the `while` statementexpected a constant after the `::` operatorcould not parse the endless method bodyinvalid method name; a setter method cannot be defined in an endless method definitionunexpected %s; expected a method nameexpected a delimiter to close the parametersunexpected %s; expected a `)` to close the parametersexpected a receiver for the method definitionexpected a `.` or `::` after the receiver in a method definitionexpected an `end` to close the `def` statementexpected an expression after `defined?`expected a `}` to close the embedded expressionexpected a `}` to close the `END` statementinvalid control escape sequence; control cannot be repeatedinvalid meta escape sequence; meta cannot be repeatedinvalid Unicode escape sequenceinvalid Unicode escape sequence; Unicode cannot be combined with control or meta flagsinvalid Unicode escape sequence; Multiple codepoints at single character literal are disallowedinvalid Unicode escape sequence; maximum length is 6 digitstoo short escape sequence: %.*sunexpected %s; expected an argumentunexpected %s, expecting end-of-inputexpected an expression after `&&=`expected an expression after `,`expected an expression after `=`expected an expression after `<<`expected an expression after `(`unexpected %s; expected an expression after the operatorexpected an expression after `||=`expected an expression after `*` splat in an argumentexpected an expression after `**` in a hashexpected an expression after `*`unexpected %s; expected a 'do', newline, or ';' after the 'for' loop collectionexpected an identifier for the required parameterexpected a delimiter after the patterns of an `in` clauseexpected a `(` to start a required parameterunexpected %s; expecting a message to send to the receiverexpected a `)` after multiple assignmentexpected a `)` to end a required parameterunexpected %s; expected a newline or a ';' after the singleton classexpected string content after opening string delimiterexpected a delimiter after the predicates of a `when` clauseunexpected bare hash in expressionunexpected '='; target cannot be writtenCan't assign to numbered parameter %.2scould not parse the float '%.*s'expected a collection after the `in` in a `for` statementexpected an `in` after the index in a `for` statementexpected an `end` to close the `for` loopexpected an expression after the label in a hashunexpected %s, expecting '}' or a key in the hash literalexpected a `=>` between the hash key and valueexpected a `}` to close the hash literalunexpected %s; expected a value in the hash literalunterminated heredoc; can't find string "%.*s" anywhere before EOF'%.*s' is not allowed as a class variable name`%.*s' is not allowed as a class variable name'%.*s' is not allowed as an instance variable name`%.*s' is not allowed as an instance variable nameunknown or invalid encoding in the magic commentidentifier %.*s is not valid to getidentifier %.*s is not valid to setinvalid multibyte character 0x%Xinvalid multibyte escape: /%.*s/invalid binary number; numeric literal without digitsinvalid decimal number; numeric literal without digitsinvalid hexadecimal number; numeric literal without digitsinvalid octal number; numeric literal without digitsinvalid underscore placement in number`%.*s' is not allowed as a global variable name`it` is not allowed when a numbered parameter is already used`it` is not allowed when an ordinary parameter is definedexpected a `do` keyword or a `{` to open the lambda blockexpected a lambda block beginning with `{` to end with `}`expected a lambda block beginning with `do` to end with `end`expected a symbol in a `%i` listunterminated list; expected a closing delimiter for the `%i`expected a symbol in a `%I` listunterminated list; expected a closing delimiter for the `%I`expected a string in a `%w` listunterminated list; expected a closing delimiter for the `%w`expected a string in a `%W` listunterminated list; expected a closing delimiter for the `%W`unexpected module definition in method bodyunexpected constant path after `module`; class/module name must be CONSTANTexpected an `end` to close the `module` statementmultiple splats in multiple assignmentunexpected '%.*s' resulting in multiple splats in multiple assignmentunexpected %s; %s is a non-associative operatorexpected an expression after `not`number literal ending with a `_`numbered parameter is already used in inner blocknumbered parameters are not allowed when 'it' is already usednumbered parameters are not allowed when an ordinary parameter is definednumbered parameter is already used in outer blockunexpected operator for a multiple assignmentunexpected operator after a call with argumentsunexpected operator after a call with a blockunexpected multiple `**` splat parametersmultiple block parameters; only one block is allowedcircular argument reference - %.*sunexpected name for a parameterexpected a default value for the parameterexpected a default value for the keyword parameter%.2s is reserved for numbered parametersunexpected multiple `*` splat parametersunexpected `...` in parametersunexpected **nil; no keywords marker disallowed after keywordsunexpected multiple '*' rest patterns in an array patternexpected a pattern expression after the `[` operatorexpected a pattern expression after `,`expected a pattern expression after `=>`expected a pattern expression after the `in` keywordexpected a pattern expression after the keyexpected a pattern expression after the `(` operatorexpected a pattern expression after the `^` pin operatorexpected a pattern expression after the `|` operatorexpected a pattern expression after the range operatorunexpected pattern expression after the `**` expressionfind patterns need at least one required inner patternunexpected implicit hash in pattern; use '{' to delineateunexpected %s; expected a key in the hash patternexpected a label as the key in the hash patternexpected an identifier after the `=>` operatorexpected a label after the `,` in the hash patternexpected a `}` to close the pattern expressionexpected a `]` to close the pattern expressionexpected a `)` to close the pattern expressionunexpected `||=` in a multiple assignmentincompatible character encoding: /%.*s//.../n has a non escaped non ASCII character in non ASCII-8BIT script: /%.*s/unterminated regexp meets end of file; expected a closing delimiterUTF-8 character in non UTF-8 regexp: /%s/expected a value after the `rescue` modifierexpected a closing delimiter for the `rescue` clauseexpected an exception variable after `=>` in a rescue statementcannot define singleton method for literalsunexpected an `alias` at a non-statement positionunexpected an `END` at a non-statement positionunexpected a `BEGIN` at a non-statement positionunexpected an `undef` at a non-statement positionexpected a string for concatenationunterminated string; expected a closing delimiter for the interpolated stringunexpected %s, expected a string literal terminatorunterminated quoted string; expected a closing delimiter for the dynamic symbolunterminated symbol; expected a closing delimiter for the interpolated symbolexpected a `:` after the true expression of a ternary operatorexpected an expression after `:` in the ternary operatorexpected an expression after `?` in the ternary operatorunexpected %s; unary calls are not allowed in this contextunexpected %s, expected a receiver for unary `%c`invalid argument being passed to `undef`; expected a bare word, constant, or symbol argumentunexpected block arg given in index assignment; blocks are not allowed in index assignment expressionsunexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressionsunexpected multiple assignment; multiple assignment is not allowed in this contextunexpected range operator; .. and ... are non-associative and cannot be chainedunexpected %s, assuming it is closing the parent %sexpected an `end` to close the `until` statementunexpected void value expressionexpected an `end` to close the `while` statementexpected a closing delimiter for the `%x` or backtick string'%s' after local variable or literal is interpreted as binary operator even though it seems like %sambiguous first argument; put parentheses or a space even after `-` operatorambiguous first argument; put parentheses or a space even after `+` operatorambiguous `&` has been interpreted as an argument prefixambiguous `*` has been interpreted as an argument prefixambiguous `**` has been interpreted as an argument prefixambiguous `/`; wrap regexp in parentheses or add a space after `/` operatorcomparison '%.*s' after comparisonfound `= literal' in conditional, should be ==key %.*s is duplicated and overwritten on line %i'when' clause on line %i duplicates 'when' clause on line %i and is ignored'frozen_string_literal' is ignored after any tokensmismatched indentations at '%.*s' with '%.*s' at %iinvalid character syntax; use %s%s%s'%.*s' is too big for a number variable, always nil`%.*s` at the end of line without an expression'shareable_constant_value' is ignored unless in comment-only lineassigned but unused variable - %.*spossibly useless use of %.*s in void context+s�#s�s�s�s�s�r��r��r��r��r��r��r��r�r�r�r�r�r�r�r�r�{r�sr�kr�cr�[r�Sr�Kr�Cr�;r�3r�+r�#r�r�r�r�r�q��q��q��q��q��q��q��q�q�q�q�q�q�q�q�q�{q�sq�kq�cq�[q�Sq�Kq�Cq�;q�3q�+q�#q�q�q�q�q�p��p��p��p��p��p��p��p�p�p�p�p�p�p�p�p�{p�sp�kp�cp�[p�Sp�Kp�Cp�;p�3p�+p�#p�p�p�p�p�o��o��o��o��o��o��o��o�o�o�o�o�o�o�o�o�{o�so�ko�co�[o�So�Ko�Co�;o�3o�+o�#o�o�o�o�o�n��n��n��n��n��n��n��n�n�n�n�n�n�n�n�n�{n�sn�kn�cn�[n�Sn�Kn�Cn�;n�3n�+n�#n�n�n�n�n�m��m��m��m��m��m��m��m�m�m�m�m�m�m�m�m�{m�sm�km�cm�[m�Sm�Km�Cm�;m�3m�+m�#m�m�m�m�m�l��l��l��l��l��l��l��l�l�l�l�l�l�l�l�l�{l�sl�kl�cl�[l�Sl�Kl�Cl�;l�3l�+l�#l�l�l�l�l�k��k��k��k��k��k��k��k�k�k�k�k�k�k�k�k�{k�sk�kk�ck�[k�Sk�Kk�Ck�;k�3k�+k�#k�k�k�k�k�j��j��j��j��j��j��j��j�j�j�j�j�j�j�j�j�{j�sj�kj�cj�[j�Sj�Kj�Cj�;j�3j�+j�#j�j�j�j�j�i��i��i��i��i��i��i��i�i�i�i�i�i�i�i�i�{i�si�ki�ci�[i�Si�Ki�Ci�3s�pm_diagnostic_levelpm_diagnostic_messagepm_diagnostic_id_humanprism/encoding.cn >= 0ANSI_X3.4-1968Big5Big5-HKSCSBig5-HKSCS:2008Big5-UAOCP65001CP932csWindows31JCESU-8CP437CP51932eucJPeucJP-mseuc-jp-msEUC-JIS-2004EUC-KReucKREUC-CNEUC-TWeucTWEmacs-MuleGBKGB12345GB1988IBM437ISO-8859-1ISO8859-1ISO-8859-2ISO-8859-3ISO8859-3ISO8859-4ISO-8859-5ISO-8859-6ISO8859-6ISO8859-7ISO-8859-8ISO-8859-9ISO8859-9ISO-8859-10ISO8859-10ISO-8859-11ISO-8859-13ISO8859-13ISO8859-14ISO-8859-15ISO-8859-16ISO8859-16KOI8-RmacCentEuromacGreekmacIcelandMacJapanmacRomaniamacThaiPCKSJISShift_JISSJIS-DoCoMoSJIS-KDDISJIS-SoftBankstateless-ISO-2022-JPstateless-ISO-2022-JP-KDDITIS-620UTF-8-HFSUTF8-DoCoMoUTF8-KDDIUTF8-SoftBankWindows-1250646CP1258CP1257CP1256CP1255CP1254CP1253CP1252CP1251CP951CP950CP949CP936CP863CP878CP874CP869CP866CP865CP864CP862CP861CP860CP857CP855CP852CP850CP775CP737CP720EUC-JISX0213GB2312GB18030IBM869IBM866IBM865IBM864IBM863IBM862IBM861IBM860IBM857IBM855IBM852IBM850IBM775IBM737IBM720KOI8-UmacUkrainemacRomanmacCyrillicmacCroatianWindows-1258Windows-1257Windows-1256Windows-1255Windows-1254Windows-1253Windows-1252Windows-1251Windows-874CP1250eucCNISO8859-15ISO-8859-14ISO8859-11ISO8859-8ISO-8859-7ISO8859-5ISO-8859-4ISO8859-2macTurkishMacJapaneseh�����������������������P������`��������������������В�����0���ؑ�����������������������P������`��������������������В�����0���ؑ����pm_utf_8_codepointpm_encoding_utf_8_char_width																


  ""$$&&((**,,..0022446699;;==??AACCEEGGJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxy{{}}������������������������������������������������������������������������������������������

  ""$$&&((**,,..0022:;=>AACFHHJJLLNNpprrvv�����������������������������������������������/``bbddffhhjjllnnpprrttvvxxzz||~~����������������������������������������������������������������������������������������������������������������������

  ""$$&&((**,,..1V������������

  ""$$&&((**,,..0022446688::<<>>@@BBDDFFHHJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxxzz||~~������������������������������������������������������������������������������������������������������������������������(/8?HMYY[[]]__ho����������������!!!!!
!!!!!!!$!$!&!&!(!(!*!-!0!3!>!?!E!E!`!o!�!�!�$�$,/,`,`,b,d,g,g,i,i,k,k,m,p,r,r,u,u,~,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l���������������������������������������������������������"�"�$�$�&�&�(�(�*�*�,�,�.�.�2�2�4�4�6�6�8�8�:�:�<�<�>�>�@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l�n�n�y�y�{�{�}�~���������������������������������������������������������������������������������������������������������§§ħǧɧɧЧЧ֧֧اا����!�:�'��pz|���������@n_n��4�M�h����������������������������������
�
����8�9�;�>�@�D�F�F�J�P�l������������!�<�U�p������������4�V�n����������!�0�I�P�i�p������������EEptvwz}�������������/1VYY`��������������� WYin���������?M�������,@X`jp����������;	=	L	N	P	U	c	f	o	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
>
B
G
H
K
L
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359=DGHKLVW\]_cfoqq��������������������������������(*9=DFHJLUVXZ]]`cfo����������������������������




:
=
D
F
H
J
L
N
N
T
W
_
c
f
o
z

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:@FMMPY������������������������ )@GIlq�����688;IP����������HJMPVXXZ]`����������������Z������lo������3@S`lnprs���������� x���� +08Fmpt������ ^at����������35CELPY������6@IM}����������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!-!/!9!<!?!E!I!N!N!`!�!�$�$,�,�,�,�,�,-%-'-'-----0-g-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-/./.00!0)0105080<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф�����+�@�n�t�{�����"�����ʧЧѧӧӧէ٧���'�@�s���èŨŨШ٨���������*�0�R�`�|���������ϩ٩����6�@�M�P�Y�`�v�z�������ªª۪ݪ�������	���� �&�(�.�0�Z�\�i�p�����������������m�p�������(�*�6�8�<�>�>�@�A�C�D�F����=�P���������p�t�v�����!�:�A�Z�f�����������
&(:<=?MP]��@t����-JPz���������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	








5
`
|
�
�
�
�
�
�
5@U`r��H����
'
0
9
������''0Ep�����Efoqu��������26?DGPrvv��������477>A��������������(*02359=DGHKLPPWW]cACEGJPY_a��������������>@@DDPY������*09@F8���		578;<?BPY����������25>P�����
68>@@PYr�����	6::<=?ACCFGPY`eghj�����������:>@PY�� �#$n$�$C%�/�/0/4A4F4DFFh8j@j^j`jijpj�j�j�j�j�jk/k@kCkPkYkckwk}k�k@nnoJoOo�o�o�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p���������������������%�*������!�#�$�&�*�0�m������,�7�=�@�I�N�N�����������������������������������������C�G�G�K�K�P�Y�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������0�I�P�i�p������ߦ�9�@�� ���������JP�#���������EEptvwz}�������������/1VYY`��������������� WY_n�����������?M�������,@X`jp����������;	=	L	N	P	U	c	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
>
B
G
H
K
L
Q
Q
Y
\
^
^
p
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359=DGHKLVW\]_cqq������������������������������(*9=DFHJLUVXZ]]`c��������������������������




:
=
D
F
H
J
L
N
N
T
W
_
c
z

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:@FMM����������������������@GIlq�����688;?P������������HJMPVXXZ]`����������������Z������lo������3@S`lnprs�������� x���� +08Pmpt���� ^at������35CEL��������6MOZ}����������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!-!/!9!<!?!E!I!N!N!`!�!�$�$,�,�,�,�,�,-%-'-'-----0-g-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-/./.00!0)0105080<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф������*�+�@�n�t�{�����"�����ʧЧѧӧӧէ٧���'�@�s���èŨŨ�����������
�*�0�R�`�|���������ϩϩ�������6�@�M�`�v�z�������ªª۪ݪ�������	���� �&�(�.�0�Z�\�i�p��������������m�p�������(�*�6�8�<�>�>�@�A�C�D�F����=�P���������p�t�v���!�:�A�Z�f�����������
&(:<=?MP]��@t����-JPz�������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	








5
`
|
�
�
�
�
�
�
5@U`r��H����
'
������''0Ep�����Equ������2DGPrvv����������477>A������������(*02359=DGHKLPPWW]cACEGJ_a������������>@@DD����*@F8���		578;<?B����������25>P�����
68>@@r�����	6::<=?ACCFG`eghj���������:>@�� �#$n$�$C%�/�/0/4A4F4DFFh8j@j^jpj�j�j�jk/k@kCkckwk}k�k@nnoJoOo�o�o�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p�����������������%�*������!�#�$�&�*�0�m������,�7�=�N�N���������������������������������C�G�G�K�K�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������0�I�P�i�p���ߦ�9�@�� ���������JP�#wrong argument type %li (expected String)wrong argument type %li (expected Array)invalid command line flag: '%c'wrong argument type %li (expected Symbol)Invalid or non ascii-compatible encodingUnknown error (%d) initializing file: %sThe prism library version (%s) does not match the expected version (%s)invalid version: %liunknown keyword: %li@valueUnknown level: %u1.2.0SourceTokenInlineCommentEmbDocCommentMagicCommentParseErrorParseWarningParseResultParseLexResultStringQuerycommand_linefilepathmain_scriptpartial_scriptscopesprofileprofile_fileparse_streamparse_commentsparse_file_commentsparse_lexparse_lex_fileparse_success?parse_failure?parse_file_success?parse_file_failure?dump_filelocal?constant?method_name?�K�L�L�L��K�L�L�L�L�L�L��K�L��K�L��K�L�L�L�L�L�L�L��K�prism/templates/src/node.c.erbPM_CLASS_VARIABLE_AND_WRITE_NODEPM_CLASS_VARIABLE_OPERATOR_WRITE_NODEPM_CLASS_VARIABLE_OR_WRITE_NODEPM_CONSTANT_OPERATOR_WRITE_NODEPM_CONSTANT_PATH_AND_WRITE_NODEPM_CONSTANT_PATH_OPERATOR_WRITE_NODEPM_CONSTANT_PATH_OR_WRITE_NODEPM_GLOBAL_VARIABLE_AND_WRITE_NODEPM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODEPM_GLOBAL_VARIABLE_OR_WRITE_NODEPM_GLOBAL_VARIABLE_TARGET_NODEPM_INSTANCE_VARIABLE_AND_WRITE_NODEPM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODEPM_INSTANCE_VARIABLE_OR_WRITE_NODEPM_INSTANCE_VARIABLE_READ_NODEPM_INSTANCE_VARIABLE_TARGET_NODEPM_INSTANCE_VARIABLE_WRITE_NODEPM_INTERPOLATED_MATCH_LAST_LINE_NODEPM_INTERPOLATED_REGULAR_EXPRESSION_NODEPM_IT_LOCAL_VARIABLE_READ_NODEPM_KEYWORD_REST_PARAMETER_NODEPM_LOCAL_VARIABLE_AND_WRITE_NODEPM_LOCAL_VARIABLE_OPERATOR_WRITE_NODEPM_LOCAL_VARIABLE_OR_WRITE_NODEPM_NUMBERED_REFERENCE_READ_NODEPM_OPTIONAL_KEYWORD_PARAMETER_NODEPM_REQUIRED_KEYWORD_PARAMETER_NODE{"type":"AliasGlobalVariableNode","location":{"type":"AliasMethodNode","location":{"type":"AlternationPatternNode","location":{"type":"ArgumentsNode","location":{"type":"ArrayNode","location":{"type":"ArrayPatternNode","location":{"type":"AssocNode","location":{"type":"AssocSplatNode","location":{"type":"BackReferenceReadNode","location":{"type":"BeginNode","location":{"type":"BlockArgumentNode","location":{"type":"BlockLocalVariableNode","location":{"type":"BlockNode","location":{"type":"BlockParameterNode","location":{"type":"BlockParametersNode","location":{"type":"BreakNode","location":{"type":"CallAndWriteNode","location":{"type":"CallNode","location":{"type":"CallOperatorWriteNode","location":{"type":"CallOrWriteNode","location":{"type":"CallTargetNode","location":{"type":"CapturePatternNode","location":{"type":"CaseMatchNode","location":{"type":"CaseNode","location":{"type":"ClassNode","location":{"type":"ClassVariableAndWriteNode","location":{"type":"ClassVariableOperatorWriteNode","location":{"type":"ClassVariableOrWriteNode","location":{"type":"ClassVariableReadNode","location":{"type":"ClassVariableTargetNode","location":{"type":"ClassVariableWriteNode","location":{"type":"ConstantAndWriteNode","location":{"type":"ConstantOperatorWriteNode","location":{"type":"ConstantOrWriteNode","location":{"type":"ConstantPathAndWriteNode","location":{"type":"ConstantPathNode","location":{"type":"ConstantPathOperatorWriteNode","location":{"type":"ConstantPathOrWriteNode","location":{"type":"ConstantPathTargetNode","location":{"type":"ConstantPathWriteNode","location":{"type":"ConstantReadNode","location":{"type":"ConstantTargetNode","location":{"type":"ConstantWriteNode","location":{"type":"DefinedNode","location":{"type":"ElseNode","location":{"type":"EmbeddedStatementsNode","location":{"type":"EmbeddedVariableNode","location":{"type":"EnsureNode","location":{"type":"FalseNode","location":{"type":"FindPatternNode","location":{"type":"FlipFlopNode","location":{"type":"FloatNode","location":{"type":"ForwardingArgumentsNode","location":{"type":"ForwardingParameterNode","location":{"type":"ForwardingSuperNode","location":{"type":"GlobalVariableAndWriteNode","location":{"type":"GlobalVariableOperatorWriteNode","location":{"type":"GlobalVariableOrWriteNode","location":{"type":"GlobalVariableReadNode","location":{"type":"GlobalVariableTargetNode","location":{"type":"GlobalVariableWriteNode","location":{"type":"HashNode","location":{"type":"HashPatternNode","location":{"type":"ImaginaryNode","location":{"type":"ImplicitNode","location":{"type":"ImplicitRestNode","location":{"type":"IndexAndWriteNode","location":{"type":"IndexOperatorWriteNode","location":{"type":"IndexOrWriteNode","location":{"type":"IndexTargetNode","location":{"type":"InstanceVariableAndWriteNode","location":{"type":"InstanceVariableOperatorWriteNode","location":{"type":"InstanceVariableOrWriteNode","location":{"type":"InstanceVariableReadNode","location":{"type":"InstanceVariableTargetNode","location":{"type":"InstanceVariableWriteNode","location":{"type":"IntegerNode","location":{"type":"InterpolatedMatchLastLineNode","location":{"type":"InterpolatedRegularExpressionNode","location":{"type":"InterpolatedStringNode","location":"InterpolatedStringNodeFlags":{"type":"InterpolatedSymbolNode","location":{"type":"InterpolatedXStringNode","location":{"type":"ItLocalVariableReadNode","location":{"type":"ItParametersNode","location":{"type":"KeywordHashNode","location":{"type":"KeywordRestParameterNode","location":{"type":"LambdaNode","location":{"type":"LocalVariableAndWriteNode","location":{"type":"LocalVariableOperatorWriteNode","location":{"type":"LocalVariableOrWriteNode","location":{"type":"LocalVariableReadNode","location":{"type":"LocalVariableTargetNode","location":{"type":"LocalVariableWriteNode","location":{"type":"MatchLastLineNode","location":{"type":"MatchPredicateNode","location":{"type":"MatchRequiredNode","location":{"type":"MatchWriteNode","location":{"type":"MissingNode","location":{"type":"ModuleNode","location":{"type":"MultiTargetNode","location":{"type":"MultiWriteNode","location":{"type":"NextNode","location":{"type":"NoKeywordsParameterNode","location":{"type":"NumberedParametersNode","location":{"type":"NumberedReferenceReadNode","location":{"type":"OptionalKeywordParameterNode","location":{"type":"OptionalParameterNode","location":{"type":"ParametersNode","location":{"type":"ParenthesesNode","location":{"type":"PinnedExpressionNode","location":{"type":"PinnedVariableNode","location":{"type":"PostExecutionNode","location":{"type":"PreExecutionNode","location":{"type":"ProgramNode","location":{"type":"RangeNode","location":{"type":"RationalNode","location":{"type":"RedoNode","location":{"type":"RegularExpressionNode","location":{"type":"RequiredKeywordParameterNode","location":{"type":"RequiredParameterNode","location":{"type":"RescueModifierNode","location":{"type":"RescueNode","location":{"type":"RestParameterNode","location":{"type":"RetryNode","location":{"type":"ReturnNode","location":{"type":"SelfNode","location":{"type":"ShareableConstantNode","location":{"type":"SingletonClassNode","location":{"type":"SourceEncodingNode","location":{"type":"SourceFileNode","location":{"type":"SourceLineNode","location":{"type":"SplatNode","location":{"type":"StatementsNode","location":{"type":"StringNode","location":{"type":"SuperNode","location":{"type":"SymbolNode","location":{"type":"TrueNode","location":{"type":"UndefNode","location":{"type":"UnlessNode","location":{"type":"UntilNode","location":{"type":"WhenNode","location":{"type":"WhileNode","location":{"type":"XStringNode","location":{"type":"YieldNode","location":PM_ALIAS_GLOBAL_VARIABLE_NODEPM_ALIAS_METHOD_NODEPM_ALTERNATION_PATTERN_NODEPM_AND_NODEPM_ARGUMENTS_NODEPM_ARRAY_NODEPM_ARRAY_PATTERN_NODEPM_ASSOC_NODEPM_ASSOC_SPLAT_NODEPM_BACK_REFERENCE_READ_NODEPM_BEGIN_NODEPM_BLOCK_ARGUMENT_NODEPM_BLOCK_LOCAL_VARIABLE_NODEPM_BLOCK_NODEPM_BLOCK_PARAMETER_NODEPM_BLOCK_PARAMETERS_NODEPM_BREAK_NODEPM_CALL_AND_WRITE_NODEPM_CALL_NODEPM_CALL_OPERATOR_WRITE_NODEPM_CALL_OR_WRITE_NODEPM_CALL_TARGET_NODEPM_CAPTURE_PATTERN_NODEPM_CASE_MATCH_NODEPM_CASE_NODEPM_CLASS_NODEPM_CLASS_VARIABLE_READ_NODEPM_CLASS_VARIABLE_TARGET_NODEPM_CLASS_VARIABLE_WRITE_NODEPM_CONSTANT_AND_WRITE_NODEPM_CONSTANT_OR_WRITE_NODEPM_CONSTANT_PATH_NODEPM_CONSTANT_PATH_TARGET_NODEPM_CONSTANT_PATH_WRITE_NODEPM_CONSTANT_READ_NODEPM_CONSTANT_TARGET_NODEPM_CONSTANT_WRITE_NODEPM_DEF_NODEPM_DEFINED_NODEPM_ELSE_NODEPM_EMBEDDED_STATEMENTS_NODEPM_EMBEDDED_VARIABLE_NODEPM_ENSURE_NODEPM_FALSE_NODEPM_FIND_PATTERN_NODEPM_FLIP_FLOP_NODEPM_FLOAT_NODEPM_FOR_NODEPM_FORWARDING_ARGUMENTS_NODEPM_FORWARDING_PARAMETER_NODEPM_FORWARDING_SUPER_NODEPM_GLOBAL_VARIABLE_READ_NODEPM_GLOBAL_VARIABLE_WRITE_NODEPM_HASH_NODEPM_HASH_PATTERN_NODEPM_IF_NODEPM_IMAGINARY_NODEPM_IMPLICIT_NODEPM_IMPLICIT_REST_NODEPM_IN_NODEPM_INDEX_AND_WRITE_NODEPM_INDEX_OPERATOR_WRITE_NODEPM_INDEX_OR_WRITE_NODEPM_INDEX_TARGET_NODEPM_INTEGER_NODEPM_INTERPOLATED_STRING_NODEPM_INTERPOLATED_SYMBOL_NODEPM_INTERPOLATED_X_STRING_NODEPM_IT_PARAMETERS_NODEPM_KEYWORD_HASH_NODEPM_LAMBDA_NODEPM_LOCAL_VARIABLE_READ_NODEPM_LOCAL_VARIABLE_TARGET_NODEPM_LOCAL_VARIABLE_WRITE_NODEPM_MATCH_LAST_LINE_NODEPM_MATCH_PREDICATE_NODEPM_MATCH_REQUIRED_NODEPM_MATCH_WRITE_NODEPM_MISSING_NODEPM_MODULE_NODEPM_MULTI_TARGET_NODEPM_MULTI_WRITE_NODEPM_NEXT_NODEPM_NIL_NODEPM_NO_KEYWORDS_PARAMETER_NODEPM_NUMBERED_PARAMETERS_NODEPM_OPTIONAL_PARAMETER_NODEPM_OR_NODEPM_PARAMETERS_NODEPM_PARENTHESES_NODEPM_PINNED_EXPRESSION_NODEPM_PINNED_VARIABLE_NODEPM_POST_EXECUTION_NODEPM_PRE_EXECUTION_NODEPM_PROGRAM_NODEPM_RANGE_NODEPM_RATIONAL_NODEPM_REDO_NODEPM_REGULAR_EXPRESSION_NODEPM_REQUIRED_PARAMETER_NODEPM_RESCUE_MODIFIER_NODEPM_RESCUE_NODEPM_REST_PARAMETER_NODEPM_RETRY_NODEPM_RETURN_NODEPM_SELF_NODEPM_SHAREABLE_CONSTANT_NODEPM_SINGLETON_CLASS_NODEPM_SOURCE_ENCODING_NODEPM_SOURCE_FILE_NODEPM_SOURCE_LINE_NODEPM_SPLAT_NODEPM_STATEMENTS_NODEPM_STRING_NODEPM_SUPER_NODEPM_SYMBOL_NODEPM_TRUE_NODEPM_UNDEF_NODEPM_UNLESS_NODEPM_UNTIL_NODEPM_WHEN_NODEPM_WHILE_NODEPM_X_STRING_NODEPM_YIELD_NODE{"start":%u,"end":%u}"new_name":"old_name":"keyword_loc":"left":"right":"operator_loc":{"type":"AndNode","location":"ArgumentsNodeFlags":"CONTAINS_FORWARDING""CONTAINS_KEYWORDS""CONTAINS_KEYWORD_SPLAT""CONTAINS_SPLAT""CONTAINS_MULTIPLE_SPLATS""arguments":"ArrayNodeFlags":"elements":"opening_loc":null"closing_loc":"constant":"requireds":"rest":"posts":"key":"value":"name":"begin_keyword_loc":"statements":"rescue_clause":"else_clause":"ensure_clause":"end_keyword_loc":"expression":"ParameterFlags":"REPEATED_PARAMETER""locals":"parameters":"body":"name_loc":"CallNodeFlags":"SAFE_NAVIGATION""VARIABLE_CALL""ATTRIBUTE_WRITE""IGNORE_VISIBILITY""receiver":"call_operator_loc":"message_loc":"read_name":"write_name":"block":"binary_operator":"binary_operator_loc":"target":"predicate":"conditions":"case_keyword_loc":"class_keyword_loc":"constant_path":"inheritance_operator_loc":"superclass":"parent":"delimiter_loc":{"type":"DefNode","location":"def_keyword_loc":"lparen_loc":"rparen_loc":"equal_loc":"else_keyword_loc":"variable":"ensure_keyword_loc":"RangeFlags":"EXCLUDE_END"%f{"type":"ForNode","location":"index":"collection":"for_keyword_loc":"in_keyword_loc":"do_keyword_loc":{"type":"IfNode","location":"if_keyword_loc":"then_keyword_loc":"subsequent":"numeric":{"type":"InNode","location":"pattern":"in_loc":"then_loc":"IntegerBaseFlags":"BINARY""DECIMAL""OCTAL""HEXADECIMAL""RegularExpressionFlags":"IGNORE_CASE""EXTENDED""MULTI_LINE""ONCE""EUC_JP""ASCII_8BIT""WINDOWS_31J""UTF_8""FORCED_UTF8_ENCODING""FORCED_BINARY_ENCODING""FORCED_US_ASCII_ENCODING""parts":"FROZEN""MUTABLE""KeywordHashNodeFlags":"SYMBOL_KEYS""depth":"content_loc":"unescaped":"call":"targets":"module_keyword_loc":"lefts":"rights":{"type":"NilNode","location":"maximum":"number":{"type":"OrNode","location":"optionals":"keywords":"keyword_rest":"numerator":"denominator":"rescue_expression":"exceptions":"reference":"ShareableConstantNodeFlags":"LITERAL""EXPERIMENTAL_EVERYTHING""EXPERIMENTAL_COPY""write":"StringFlags":"filepath":"SymbolFlags":"value_loc":"names":"LoopFlags":"BEGIN_MODIFIER""EncodingFlags":�O�gF�MF�3F�F��C��C��E��E�J�C�C�mO�C�"O�C�G�G�G�OG�0G�G�G��F�F�F�hD�ZD�LD�>D�C�C�eH�L�L�L�L�sL�YL�?L�(L�L�C�C�WH�H�H��G��G�N�N�C�M�zM�C�=M�C�C�EN�7N�)N�N�C�C�E��C��N�N�C�H�C�[I�I��H�H��I��I��I�I�C�C�I�~I��C��C��C��C��C�C�C��C�C�J�J�sJ�eJ�C�C�N��C�E�D�E�C�-E��M�D��J�C�C�C�C�K�K�O��L��D�K�lM�I�K�KJ�\E�E�C��C�C�C�sK�.K�C�C�4J�C��J��J�C�I�C�sH��C��C�\N��C�C��C�K��K�D�"D��C�VO�R�R�R�R�{R�sR�kR�cR�[R�SR�KR�CR�;R�3R�+R�#R�R�R�R�R�Q��Q��Q��Q��Q��Q��Q��Q�Q�Q�Q�Q�Q�Q�Q�Q�{Q�sQ�kQ�cQ�[Q�SQ�KQ�CQ�;Q�3Q�+Q�#Q�Q�Q�Q�Q�P��P��P��P��P��P��P��P�P�P�P�P�P�P�P�P�{P�sP�kP�cP�[P�SP�KP�CP�;P�3P�+P�#P�P�P�P�P�O��O��O��O��O��O��O��O�O�O�O�O�O�O�O�O�{O�sO�kO�cO�[O�SO�KO�CO�;O�3O�+O�#O�O�O�O�O�N��N��N��N��N��N��N��N�N�N�N�N�N�N�N�N�{N�sN�kN�cN�[N�SN�KN�CN�;N�3N�+N�#N�N�N�N�N�M��M��M��M�P�@Q�@Q�@Q�@Q�1V�Y�S�@Q�0Q�P��R�0Q�P�R�P�RS�0Q��Q�|T�bT��Q�pQ�@Q�PU�S�P�Q�Q�Q�P�P�dQ�Q�Q�Q�XQ�0Q�XQ�XQ�0Q�XQ�P�P�dQ��R��Q�Q�Q��Q�Q�P�P�0R�P�U�P�P�0Q�Q�Q�Q�P�P�dQ��W��T�Q�pQ�pQ�P�U�`R��U�`R�2U�Q�Q�Q�P�P�dQ�P�bW�W�rZ�9Z�X�P�P��V�P��T�Q�Q�Q�P�P�dQ�P�@Q�@Q�"T�P�
V��V�"X�0Q�P�P�P�P�dQ�Q�@Q�BY�0Q�pQ�pQ�0Q�0Q�dQ�0R�P�P�P�P�P�XQ��X�P�P�Q�P�pQ�V�P�P�P�Q��W�P�T�P�P�bV�Q�Q�V�Q�P�R�8����}���g��y���(���
������]��[����<��c���#��p��y������Ā�W�~�}�}��{���X��a��������l����%��n��0��U������t������K��9����y��P�����E������}������gr�k����(����*�����������̫����H��
�����^��m��R��7��޼���������z�y��x�mw��u�Xt�s�D�������$��-��T����\��
����F������%�����!��*���K��M��c�����z��,��������\q�p�o�n�Mm�Rl�k�cf�}e�l�.e�xh�)h�[g�f�i�c�a�Xa�`��^�]�#\�`�8Z��X�pm_node_destroy3.33.43.3.3.4.latest�8���8���8���8���8�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?���8�� ?�� ?��j8�� ?��c8�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?�� ?���>���>���>���>��b>��<>��>���=���=���=��~=�� ?��X=��2=��=�� ?���<���<�� ?���<�� ?��w<��T<�� ?��.<�� ?��<�� ?�� ?�� ?�� ?�� ?�� ?���;���;���;��b>��p;��>��J;��$;���:���:�� ?���:���:��i:�� ?��C:��:�� ?���9�� ?���8���9���9���9��J7��J7��J7��J7���=���=���=���=��J7��?���>���>��T?��1?��B?��(?��(?��(%i,%u)-(%i,%u)|   +-- new_name:+-- old_name:+-- keyword_loc: = ""
@ AliasMethodNode (location: +-- left:+-- right:+-- operator_loc:@ AndNode (location: @ ArgumentsNode (location: +-- ArgumentsNodeFlags: contains_forwarding contains_keywords contains_keyword_splat contains_splat contains_multiple_splats+-- arguments: (length: %lu)
+-- @ ArrayNode (location: +-- ArrayNodeFlags:+-- elements:+-- opening_loc:+-- closing_loc:+-- constant:+-- requireds:+-- rest:+-- posts:@ AssocNode (location: +-- key:+-- value:@ AssocSplatNode (location: +-- name::%.*s@ BeginNode (location: +-- begin_keyword_loc:+-- statements:+-- rescue_clause:+-- else_clause:+-- ensure_clause:+-- end_keyword_loc:+-- expression:+-- ParameterFlags: repeated_parameter@ BlockNode (location: +-- locals:+-- parameters:+-- body:+-- name_loc:@ BreakNode (location: +-- CallNodeFlags: safe_navigation variable_call attribute_write ignore_visibility+-- receiver:+-- call_operator_loc:+-- message_loc:+-- read_name:+-- write_name:@ CallNode (location: +-- block:+-- binary_operator:+-- binary_operator_loc:@ CallOrWriteNode (location: @ CallTargetNode (location: +-- target:@ CaseMatchNode (location: +-- predicate:+-- conditions:+-- case_keyword_loc:@ CaseNode (location: @ ClassNode (location: +-- class_keyword_loc:+-- constant_path:+-- inheritance_operator_loc:+-- superclass:+-- parent:+-- delimiter_loc:@ DefNode (location: +-- def_keyword_loc:+-- lparen_loc:+-- rparen_loc:+-- equal_loc:@ DefinedNode (location: @ ElseNode (location: +-- else_keyword_loc:+-- variable:@ EnsureNode (location: +-- ensure_keyword_loc:@ FalseNode (location: @ FindPatternNode (location: @ FlipFlopNode (location: +-- RangeFlags: exclude_end@ FloatNode (location:  %f
@ ForNode (location: +-- index:+-- collection:+-- for_keyword_loc:+-- in_keyword_loc:+-- do_keyword_loc:@ HashNode (location: @ HashPatternNode (location: @ IfNode (location: +-- if_keyword_loc:+-- then_keyword_loc:+-- subsequent:@ ImaginaryNode (location: +-- numeric:@ ImplicitNode (location: @ InNode (location: +-- pattern:+-- in_loc:+-- then_loc:@ IndexTargetNode (location: @ IntegerNode (location: +-- IntegerBaseFlags: binary decimal octal hexadecimal+-- RegularExpressionFlags: ignore_case extended multi_line euc_jp ascii_8bit windows_31j utf_8 forced_utf8_encoding forced_binary_encoding forced_us_ascii_encoding+-- parts: mutable@ KeywordHashNode (location: +-- KeywordHashNodeFlags: symbol_keys@ LambdaNode (location: +-- depth:+-- content_loc:+-- unescaped:@ MatchWriteNode (location: +-- call:+-- targets:@ MissingNode (location: @ ModuleNode (location: +-- module_keyword_loc:@ MultiTargetNode (location: +-- lefts:+-- rights:@ MultiWriteNode (location: @ NextNode (location: @ NilNode (location: +-- maximum:+-- number:@ OrNode (location: @ ParametersNode (location: +-- optionals:+-- keywords:+-- keyword_rest:@ ParenthesesNode (location: @ ProgramNode (location: @ RangeNode (location: @ RationalNode (location: +-- numerator:+-- denominator:@ RedoNode (location: +-- rescue_expression:@ RescueNode (location: +-- exceptions:+-- reference:@ RetryNode (location: @ ReturnNode (location: @ SelfNode (location:  experimental_everything experimental_copy+-- write:@ SourceFileNode (location: +-- StringFlags:+-- filepath:@ SourceLineNode (location: @ SplatNode (location: @ StatementsNode (location: @ StringNode (location: @ SuperNode (location: @ SymbolNode (location: +-- SymbolFlags:+-- value_loc:@ TrueNode (location: @ UndefNode (location: +-- names:@ UnlessNode (location: @ UntilNode (location: +-- LoopFlags: begin_modifier@ WhenNode (location: @ WhileNode (location: @ XStringNode (location: +-- EncodingFlags:@ YieldNode (location: @ AliasGlobalVariableNode (location: @ AlternationPatternNode (location: @ ArrayPatternNode (location: @ BackReferenceReadNode (location: @ BlockArgumentNode (location: @ BlockLocalVariableNode (location: @ BlockParameterNode (location: @ BlockParametersNode (location: @ CallAndWriteNode (location: @ CallOperatorWriteNode (location: @ CapturePatternNode (location: @ ClassVariableAndWriteNode (location: @ ClassVariableOperatorWriteNode (location: @ ClassVariableOrWriteNode (location: @ ClassVariableReadNode (location: @ ClassVariableTargetNode (location: @ ClassVariableWriteNode (location: @ ConstantAndWriteNode (location: @ ConstantOperatorWriteNode (location: @ ConstantOrWriteNode (location: @ ConstantPathAndWriteNode (location: @ ConstantPathNode (location: @ ConstantPathOperatorWriteNode (location: @ ConstantPathOrWriteNode (location: @ ConstantPathTargetNode (location: @ ConstantPathWriteNode (location: @ ConstantReadNode (location: @ ConstantTargetNode (location: @ ConstantWriteNode (location: @ EmbeddedStatementsNode (location: @ EmbeddedVariableNode (location: @ ForwardingArgumentsNode (location: @ ForwardingParameterNode (location: @ ForwardingSuperNode (location: @ GlobalVariableAndWriteNode (location: @ GlobalVariableOperatorWriteNode (location: @ GlobalVariableOrWriteNode (location: @ GlobalVariableReadNode (location: @ GlobalVariableTargetNode (location: @ GlobalVariableWriteNode (location: @ ImplicitRestNode (location: @ IndexAndWriteNode (location: @ IndexOperatorWriteNode (location: @ IndexOrWriteNode (location: @ InstanceVariableAndWriteNode (location: @ InstanceVariableOperatorWriteNode (location: @ InstanceVariableOrWriteNode (location: @ InstanceVariableReadNode (location: @ InstanceVariableTargetNode (location: @ InstanceVariableWriteNode (location: @ InterpolatedMatchLastLineNode (location: @ InterpolatedRegularExpressionNode (location: @ InterpolatedStringNode (location: +-- InterpolatedStringNodeFlags:@ InterpolatedSymbolNode (location: @ InterpolatedXStringNode (location: @ ItLocalVariableReadNode (location: @ ItParametersNode (location: @ KeywordRestParameterNode (location: @ LocalVariableAndWriteNode (location: @ LocalVariableOperatorWriteNode (location: @ LocalVariableOrWriteNode (location: @ LocalVariableReadNode (location: @ LocalVariableTargetNode (location: @ LocalVariableWriteNode (location: @ MatchLastLineNode (location: @ MatchPredicateNode (location: @ MatchRequiredNode (location: @ NoKeywordsParameterNode (location: @ NumberedParametersNode (location: @ NumberedReferenceReadNode (location: @ OptionalKeywordParameterNode (location: @ OptionalParameterNode (location: @ PinnedExpressionNode (location: @ PinnedVariableNode (location: @ PostExecutionNode (location: @ PreExecutionNode (location: @ RegularExpressionNode (location: @ RequiredKeywordParameterNode (location: @ RequiredParameterNode (location: @ RescueModifierNode (location: @ RestParameterNode (location: @ ShareableConstantNode (location: +-- ShareableConstantNodeFlags:@ SingletonClassNode (location: @ SourceEncodingNode (location: V&���<��e;���9��M8��j���}>��M�m�����!�����+�����������q������D��9���B�����'�������H����o��&��6����3��91��(1��1���5���3��<8��N���)��O)���(��)&���-���*��g�����������0������������W��������������J�����J��2H��I���O��W��������������Z���҃��7���&����r��am���i���h���e��'c���b���a����������ψ���T~���{���x��fx��Sa���_��O]��\���Y���V���S���R���"�� ��C��:��[$�����$������%���]�����a��t�������j���?��������������)������s���V���9���������w���������M���L���J��E���B��EB���@��]@��/?��
>���=��RI���H���;���:���7��5��_2��2��^0��I-��2��!+��m#���(��e&��,�����9��9��9�����<���d���d���9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��d���9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9��9����������9�����h���u�������u���u���u���f���D���u���u���u���u�������u���u���u���u���u���u���u���u���u���u���u���u���h���u���܀��h���h���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u���u�������u���u�������u���u���u���u�������u���u���u�������u���u���u���u���u���u���u�������u���u�������u���u���u���u���u���h���prism/serialize.cvalue < UINT32_MAXlocation->startlocation->endcontent_offset < owned_maskvalue >= 0 && ((unsigned long) value) < UINT32_MAXlocation->start <= location->endfalse && "Cannot serialize mapped strings."prism/templates/src/serialize.c.erb�������������������x���8���4�������(������e���(������u���`����(���x�������#���x����������<��� ������8�������8���������(���8�������8�����؏��¨����؏����������(���܇��ؤ�����8�������8�������������������������������M���8�������8���������(���/���9����������������������x���'���x���ʧ��8�������8���������(�������[���"�����������Ħ����������8���`���O�����������H���H������؋����������������������%���H���(�����������:���������8�������(�����������&���@���@���x�������*�������؋��ѯ�������]���`�������@�����������:�������i�������@�������b���1�����������H�������@�������@���؋��ܩ��pm_serialize_stringpm_serialize_contentpm_ptrdifft_to_u32pm_serialize_locationpm_sizet_to_u32prism/static_literals.c0.0(0i)#<Encoding:%s>���N���N���N���N���N���N���N���N���N���N���N���N���N������N���N���N���N���N���N���N���N���N���N���N���N���N���@���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���H���N����N���N���N���N���N���N���N���N���N���N���N���p�������N���N�������N����x���&���&�������&���&���&���&���&���&���&���&���&���&���&���&���&���ؼ��&���&���&���&���&���&���&���&���&���&���&���&���&���(���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���&���@���&���&���&���&���&���&���&���&���&���&���&���&���&���&���X���&�������&���&���&���&���&���&���&���&���&���&���(���H�������&���&�������&���Ⱦ��X������������������������������������������������������0�����������������������������������������`��������������������������������������������������������������������������������������������������������������������������0�������������������������������������������`�������������@�����X��������x�����������������������������������������������������������������������������������(�����������������������������������������������������������������������������@��������������������������������������������`��������������������������������������H��h����������������������Y��'��'����'��'��'��'��'��'��'��'��'��'��'��'��'�����'��'��'��'��'��'��'��'��'��'��'��'��'�����'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'��'�����'��'��'��'��'��'��'��'��'��'��'��'��'��'��X��'�����'��'��'��'��'��'��'��'��'��'�����������'��'��I��'����������������N�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j�����3�����pm_static_literal_positive_ppm_static_literal_inspect_nodenode_hashpm_int64_valuepm_compare_number_nodespm_string_valueEOFMISSINGNOT_PROVIDEDAMPERSAND_AMPERSANDAMPERSAND_AMPERSAND_EQUALAMPERSAND_DOTBACKTICKBACK_REFERENCEBANGBANG_EQUALBANG_TILDEBRACE_LEFTBRACE_RIGHTBRACKET_LEFTBRACKET_LEFT_ARRAYBRACKET_LEFT_RIGHTBRACKET_LEFT_RIGHT_EQUALBRACKET_RIGHTCARETCARET_EQUALCHARACTER_LITERALCLASS_VARIABLEEMBDOC_BEGINEMBDOC_LINEEMBEXPR_BEGINEMBEXPR_ENDEMBVAREQUAL_EQUAL_EQUALEQUAL_TILDEFLOAT_IMAGINARYFLOAT_RATIONALFLOAT_RATIONAL_IMAGINARYGLOBAL_VARIABLEGREATER_GREATERGREATER_GREATER_EQUALHEREDOC_STARTIGNORED_NEWLINEINSTANCE_VARIABLEINTEGER_IMAGINARYINTEGER_RATIONALINTEGER_RATIONAL_IMAGINARYKEYWORD_ALIASKEYWORD_ANDKEYWORD_BEGINKEYWORD_BEGIN_UPCASEKEYWORD_BREAKKEYWORD_CASEKEYWORD_CLASSKEYWORD_DEFKEYWORD_DEFINEDKEYWORD_DOKEYWORD_DO_LOOPKEYWORD_ELSEKEYWORD_ELSIFKEYWORD_ENDKEYWORD_END_UPCASEKEYWORD_ENSUREKEYWORD_FALSEKEYWORD_FORKEYWORD_IFKEYWORD_IF_MODIFIERKEYWORD_INKEYWORD_MODULEKEYWORD_NEXTKEYWORD_NILKEYWORD_NOTKEYWORD_ORKEYWORD_REDOKEYWORD_RESCUEKEYWORD_RESCUE_MODIFIERKEYWORD_RETRYKEYWORD_RETURNKEYWORD_SELFKEYWORD_SUPERKEYWORD_THENKEYWORD_TRUEKEYWORD_UNDEFKEYWORD_UNLESSKEYWORD_UNLESS_MODIFIERKEYWORD_UNTILKEYWORD_UNTIL_MODIFIERKEYWORD_WHENKEYWORD_WHILEKEYWORD_WHILE_MODIFIERKEYWORD_YIELDKEYWORD___ENCODING__KEYWORD___FILE__KEYWORD___LINE__LAMBDA_BEGINLESS_EQUAL_GREATERLESS_LESSLESS_LESS_EQUALMETHOD_NAMEMINUS_EQUALMINUS_GREATERNUMBERED_REFERENCEPARENTHESIS_LEFTPARENTHESIS_LEFT_PARENTHESESPARENTHESIS_RIGHTPERCENTPERCENT_EQUALPERCENT_LOWER_IPERCENT_LOWER_WPERCENT_LOWER_XPERCENT_UPPER_IPERCENT_UPPER_WPIPE_PIPEPIPE_PIPE_EQUALPLUS_EQUALQUESTION_MARKREGEXP_BEGINSEMICOLONSLASHSLASH_EQUALSTAR_STAR_EQUALSTRING_BEGINSYMBOL_BEGINUAMPERSANDUCOLON_COLONUDOT_DOTUDOT_DOT_DOTUSTARUSTAR_STARWORDS_SEPprism/token_type.cend-of-inputmissing tokennot provided token'&&''&&=''&.''&=''!=''!~''__END__''[]''[]=''^='character literalclass variable'::''=begin''=end'embedded documentation line'#{''#''==''===''=>''=~'rationalstring separatorglobal variable'>='>>=heredoc endingheredoc beginninglocal variable or methodignored newlineinstance variable'alias''and''begin''BEGIN''break''case''class''def''defined?''do''else''elsif''end''END''ensure''false''for''if''in''module''next''nil''not''or''redo''rescue''rescue' modifier'retry''return''self''super''then''true''undef''unless''until''when''while''...''yield''__ENCODING__''__FILE__''__LINE__'label terminator'<=''<=>'<<=method name'-=''->'numbered reference'..''%=''%i''%w''%x''%I''%W''|=''||''||=''+='regular expression beginningregular expression ending'/=''*=''**''**='string literalstring contentstring endingsymbol literal���d��X��L��@��4��(�����������������������������������������t��h��\��P��D��8��,�� ���������������������������������������x��l��`��T��H��<��0��$��������������������������������������|��p��d��X��L��@��4��(�����������������������������������������t��h��\��P��D��8��,�� ���������������������������������������x��l��`��T��H��<��0��$��������������������������������������|��p��d��X��L��@��4��(�����������������������������������������t��h��_��V��M��D��;��2��)�� ���������������p��������������t��h��\��P��D��8��,�� �������������������������x��,�� ��������������������������X��L��@��4��(��������������������������h�����������������������������|��p��������������������l��`��T��H��<��d����������������������������������L��@�����(����X�������������|��p��d�����0��$��������x��x�����h��h�����������������������������x��\��P��D��8��t�����������H��H�����������t��h��\��P��D��8��,�� ��������������������������������������l��`��T��H��<��0��$��������X��X����4�������������pm_token_type_humanpm_token_type_nameprism/util/pm_buffer.cindex <= buffer->length���P�������p�����@��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��������8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8�����pm_buffer_insert�����������������������prism/util/pm_constant_pool.cindex < list->capacitypool->size < ((uint32_t) (1 << 30))list->ids[index] == PM_CONSTANT_ID_UNSETconstant_id != PM_CONSTANT_ID_UNSET && constant_id <= pool->sizeis_power_of_two(pool->capacity)pm_constant_pool_resizepm_constant_pool_insertpm_constant_pool_findpm_constant_pool_id_to_constantpm_constant_id_list_insertprism/util/pm_integer.cz0.values != NULLz2.values != NULLbigints_length > 0value != -1 && "invalid digit"0��������������x���P���������������������������]���]���]���]���]���]���]���]���]���]������]���"���]���]���]���]���]���]���]���]���]���]�������]���]���]���]���]���]���]���]���`���]���]���]���]���]���]�������]���]������]���"���]���]���]���]���]���]���]���]���]���]�������]���]���]���]���]���]���]���]���`���karatsuba_multiplypm_integer_convert_basepm_integer_parse_digitpm_integer_parse������������������������������������������������	�������

�������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������prism/util/pm_newline_list.c*cursor == '\n'cursor >= list->startlist->size == 0 || newline_offset > list->offsets[list->size - 1]pm_newline_list_line_columnpm_newline_list_linepm_newline_list_appendprism/util/pm_string.cstart <= endpm_string_shared_initprism/util/pm_strpbrk.cpm_strpbrk_explicit_encoding_set���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
\#\ 	


\X ��c��c��c��c��c��c��c��c��X��c��c��c��c��c��c��c��c��c��c��X ��c��c��c��c��c��c��p��c��c��c��c�����c��c��c�����c��c��c��c�����c��c�����c��c��c��c��c��c��c��X ��c��c��c��c��c�����c��c��c��c��c��c��c��c��c��c��X ��c��c�����c��������c��c��c��c��c��c��c��c��c��c��X ��c��c��c��c��c��c��c��c��c��c��c�����c��c��X ��c��c��c��c��c��c��c��c��c��c��������c�����c��c��c��c��c��c��c��( ��c��c�����������c��c�����c�����@ ��������G��G��G��������G�����G�����G��G��G��G��G��G��G��G��G��G��G��G�����G�����G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G�����G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G������"���!���!���!���!��\!��"���!���!���!��"��<"��"���!���!���!��"���!���!���!��\"��\"��l"���!���"���"���!���"���"��\!��"���!���!���!��l!��\"��"���!���!���!��\"���!��\!���!��\!��\"��"���!���!���!��\"���!���!���!��$$��-$��-$��-$��-$��-$��-$���$��-$��-$��-$��-$��-$���$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��D$��-$��-$��D$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��T$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$��-$���$��-$��-$���$��-$��-$��-$��-$��-$���$��-$��-$��-$��-$��-$��-$��$$��-$��$$��-$��-$��-$��-$��-$��-$��-$���$��-$��-$��-$��-$��-$��-$���$���$��-$��-$��-$��-$��-$��-$��-$���$��-$��-$��-$��-$��-$��T$��*5��9��A6��A6��A6��A6��A6��A6��A6��A6��9��9��9��9��9��9��9��9��9��9���7��9���8��*5��9��9��9��9��9��9��9��9��9��h7��9��9��9��9��9��9��9��9��88��9��9��9��9��9��9��A6��9��9���7��9���8��*5��9��9��9��9��9��9��9��9��9��h7��9��9��9��9��9��9��9��9��88���?���?���?���?���?���?���?��@���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?��,?���?���?���?���?���?���?���?���?���?���?���?��,?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?��,?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?��,?���?���?���@���@��|@���?���?���?���?���?���?���?���?���?���?���?��,?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���?���@���?���?���?���?���?��l?���?���?��D@���?���?���?���?���?���?���?���?���?���?���?���@���?���?���?���@���?��|@���o���o���o���o���o���o���o���o���o���o���o���o���o���o���o���o���o���o���o���n����������������������<�������������������������������������������������������������������������������������������������������������������������������������������������L���������������������������������$�����̘��������������������������������������������������������������������������ܜ��ܜ��������ĝ��t���3���ܜ�����ܜ��ܜ��ܜ��Ŝ��Ӡ������u�������T���3�����������������������������������������������������������������������r�����D���۞��D���D���D���D���D���D���D���D���ʞ��D���D���D���������������D���D����������������ԝ�������������v�����Q���Q���Q���Q���Q���Q���Q���Q������Q���Q���Q���Q���Q���Q���Q���Q���Q���Q��� ���Q���Q���Q���Q���Q���Q���p���Q���Q���Q���Q������Q���Q���Q���Q���Q���Q���Q���Q���Ф��Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���8���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���P���Q���Q���Q���Q���Q���Q���Q���Q���h���Q���Q���Q���Q���Q���Q���Q�������Q���Q���Q���Q���Q���Q���`���Q�������Q���Q���Ф��Q���Q�����Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Ф��Q���Q���Ф��Ф��Ф������Q���Q���Q���Q���Ф�����̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦�����̦��̦��̦��̦��̦��̦��̦��̦��d���d���d���d���d���d���d���d���̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��$���̦��̦��̦��̦��̦��̦��̦��̦��̦������̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦��̦�����̦��̦��̦��̦��������<���̦��ԩ��4���̦��̦��̦��̦��̦��̦��̦������̦��̦��̦���T���ī��<���t���̦��t�����������������������������������������������������������������������������������������/�x�����[�����������V����s����P�����������������������������������
�@�O�����������������������������������������������������������2��������������������������������������������������������������
�����A������������������������������}�}�}�}�}�}�}�}�}�����������������������������������������������������������������������������������������������������������������������������������'��:���:���:���:���:���:���:���'��:���:���:���:���:����&��:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���.&��:���:���:���:���:���:���:���%���$���#��:���:���:���[#���5��G@���<���<��9���8��y@��V8��y@��y@��y@��"8���2��q
��Y7��7��`6��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��q
��=6��	��_���_���_���_���	��	��	��_���_���	��_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���	��	��_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���	��	��_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���_���	��	���	��
��
���	��
��
��
��
��
���	���	��
��
���	��
���	��
��
��
��
���	��{	��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
���	���	��
��
���	��
���	��
��
��
��
���	��{	��Hn���m��Xm��؉��؉��Pl��؉��؉��xt��؉��؉��؉��؉��؉��(s��l��؉��؉��؉��؉��Xk��؉��؉��؉��؉��؉��؉��؉��؉��؉��؉��؉��؉��؉��؉��xc���b���b��(b���r��؉��؉��؉��؉��؉��q���a��؉��8a��x���X}��P���@p���}��؉��Hu��y���h���W��T��8S���Q��؉��؉��؉��؉��؉���P��؉��xP���O���K��؉��؉�����h���~������؉��h~��؉��؉���j���h���j��Hi��؉��(i��h`���^��؉���\��؉��؉���Z��؉���X���X���p���X��؉��؉��؉��؉��؉��؉��؉��؉���a��؉��؉��h���؉������{���{��؉��؉��؉���z����Hn���f���d��؉��؉��؉��؉��؉��؉��؉���c��؉��؉��؉��؉��؉��؉��؉��؉��ȃ��؉��؉��`����o��؉��(o��8K��8K���J������(J��xI��
���o���
���
���
���
���
���
���
���
���
��� ���
���
���
���o���
���
���
���
���o���
���
���
���
���o���
���o���
���
���
���
���
���
���
���
���
���o���
���
���
���
�������
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���o���o���o���o���o���
���o���
���
���
���
�������
���
���
���
���
���
���o���
���
���
���
���
���o���
���
���
���
���
���
���o���
���
���
���
���
���
���
���
���o���
���
���
���
���
���
���
���
���
���o���
���
���
���o���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���o���
���
���
���
���
���
���
���
���
���
��� ������� ��� ��� ��� ��� ��� ���j�������������������j�������j���j���j�������������������j���j�������j�����������Ŏ�������������������������������������������������������������j���j�������j�������������������Ŏ��j���j���j���������������|�������Ŏ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j���j���j���j�����������j�������������������������������j���������������������������j���������������j�����������������������j�������j�������j�����������������������j���j���������������j���j���j���j���j�����T�������������������������������T�����������T�����������T�����T���������������������T�����������������������������������������������������������������������T���T���T���T���T�����T���������������������������T�������������T���������������T�������������������T���������������������T���������T���������������������������������������������������������������������������������������������p���p���p���p�������p���������������p���p���p���p�����������p�������p���p���p���p���p���p���p�������p���p���p���p���p���p���p���p���p���p�����������p�������p���p���p���p���p���������������p���p���p�������p���p���p���p���p���p�������������������������������������������������������������������������������p�����������������������������������p�����������������������������������p�������p�����������p�������������������p���p���p�������������������p�����������p���p���p���p���p���p���p�������p���p���p���p���p���p�������p���p���p�������p���p���p���p���p�������p�������p�������p���p���p���p���������������p���p���p����������������������������������������������������������������������������������������������k������k���k���k���k���k���k���k���k���k����}��k���k���k������k���k���k���k������k���k���k���k������k������k���k���k���k���k���k���k���k���k������k���k���k���k���$~��k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k������������������k������k���k���k���k���$~��k���k���k���k���k���k������k���k���k���k���k������k���k���k���k���k���k������k���k���k���k���k���k���k���k������k���k���k���k���k���k���k���k���k������k���k���k������k���k���k���k���k���k���k���k���k���k���k���k���k���k���k���k������k���k���k���k���k���k���k���k���k���k����}��$~���}���}���}���}���}���}��6���!{��{��8{���:��!{��!{��{��8{���:��!{��!{��@{��{��8{���:��@{��{��8{���:��@{���:��!{��!{��!{��!{��!{��!{��!{��!{��!{��{��8{���:��!{��@{��@{��{��8{���:��!{��!{��!{��!{��@{���:��@{��{��8{���:��8h���h��8h��8h��8h��8h��8h��8h��8h��8h��8h��Sh��8h��8h��8h���h��8h��8h��8h��8h���h��8h��8h��8h��8h���h��8h���h��8h��8h��8h��8h��8h��8h��8h��8h��8h���h��8h��8h��8h��8h��h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h���h���h���h���h���h��8h���h��8h��8h��8h��8h��h��8h��8h��8h��8h��8h��8h���h��8h��8h��8h��8h��8h���h��8h��8h��8h��8h��8h��8h���h��8h��8h��8h��8h��8h��8h��8h��8h���h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h���h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h���h��8h��8h��8h��8h��8h��8h��8h��8h��8h��8h��Sh��h��Sh��Sh��Sh��Sh��Sh��Sh��J���������������J���+���J���J���J���������������J���J������J������������������������8���������������������������������J���J������J������������������J���J���J������������8���������������������8���8���8���8���8���8���8���8���8���8���8���8���8���8���8���8���8���8���8������8���8���8���8���8���8���8���8������8���8���8���8���8���8���8���8������8������8���8������8���8���8���8������������J���J���J���J������8���J����������������������J���������������������J������������J������������������J������J������J�������������������J���J������������J���J���J���J���J�����x���l���`���T���H���<���l���`���T���0���$������l���`���T������l���`���T���������`���ܔ��Д��Ĕ������������������l���`���T�������|���p���l���`���T���d���X���L���@���4���T���(���l���`���T���������}�������j������������� 4�� 4�� 4�� 4�� 4��������P���P���P���P��� 4�� 4�� 4�� 4�� 4�������������������������� 4�� 4�� 4�� 4�� 4��������P���P���P���P���������������������������������Hx���x���x���x���x��Hx���x��Hx��Hx��Hx���x���x���x���x��Hx��Hx���x��Hx���x���x���x���x���x���x���x��Xw���x���x���x���x���x���x���x���x���x���x��Hx��Hx���x��Hx���x���x���x���x���x��Hx��Hx��Hx���x���x���x��Xw���x���x���x���x���x���x��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw���x��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw���x��Xw��Xw��Xw��Xw��Xw��Xw��Xw��Xw���x��Xw���x��Xw��Xw���x��Xw��Xw��Xw��Xw���x���x���x��Hx��Hx��Hx��Hx���x��Xw��Hx���x���x���x���x���x���x���x��Hx���x���x���x���x���x���x��Hx���x���x���x��Hx���x���x���x���x���x��Hx���x��Hx���x��Hx���x���x���x���x���v��Hx��Hx���x���x���x��Hx��Hx��Hx��Hx��Hx������В��В��В��В��t���В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В������В��В��В��В��В��В��В��В��t���В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��В��W���В��В��В��В��В��В��:���В��В��В��В��В��В��В�����В��В�����В��В��В��В��В��В��В��В��В����̑��������W���W���W���W�����W���������W���W���W���W�������W�����W���W���W���W���W���W���W�������W���W���W���W���W���W���W���W���W���W�������W�����W���W���W���W���W���������W���W���W���g���W���W���W���W���W���W�������������������������������������������������������������������������������W�����������������������������������W�����������������������������������W�������W�����������W�������������������W���W���W�����������W���������W���W���W���W���W���W���W�����W���W���W���W���W���W�����W���W���W�����W���W���W���W���W�����W�����W�����W���W���W���W���W�������W���W���W�������������m���ۊ��ۊ��ۊ��ۊ��m���ۊ��m���m���m���ۊ��ۊ��ۊ��ۊ��m���m���ۊ��m���ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��:���ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��m���m���ۊ��m���ۊ��ۊ��ۊ��ۊ��ۊ��m���m���m���ۊ��ۊ��ۊ����ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���ۊ��:���:���:���:���:���:���:���:���ۊ��:���:���:���:���:���:���:���:���ۊ��:���ۊ��:���:���ۊ��:���:���:���:���ۊ��ۊ��ۊ��m���m���m���m���ۊ��:���m���ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��m���ۊ��ۊ��ۊ��ۊ��ۊ��ۊ��m���ۊ��ۊ��ۊ��m���ۊ��ۊ��ۊ��ۊ��ۊ��m���ۊ��m���ۊ��m���ۊ��ۊ��ۊ��ۊ��ۊ��m���m���ۊ��ۊ��ۊ��m���m���m���m���m�����������������������������������������������������������������������������������������������~������������������������������������������������������������������������~������������������������~���������������������������~���~���~���~���~���~���~���~���~���~���~���~���~���~���~���~���~���~���~�������~���~���~���~���~���~���~���~�������~���~���~���~���~���~���~���~�������~�������~���~�������~���~���~���~�������������������������������~����������������������������������������������������������������������������������������������������������������������������������f}�����������������������������������{r��/���/���/���/���{r��/���{r��{r��{r��/���/���/���/���{r��{r��/���{r��/���/���/���/���/���/���/����r��/���/���/���/���/���/���/���/���/���/���{r��{r��/���{r��/���/���/���/���/���{r��{r��{r��/���/���/������/���/���/���/���/���/����r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r��/����r���r���r���r���r���r���r���r��/����r���r���r���r���r���r���r���r��/����r��/����r���r��/����r���r���r���r��/���/���/���{r��{r��{r��{r��/����r��{r��/���/���/���/���/���/���/���{r��/���/���/���/���/���/���{r��/���/���/���{r��/���/���/���/���/���{r��/���{r��/���{r��/���/���/���/���/���{r��{r��/���/���/���{r��{r��{r��{r��{r������g���g���g���g�������g���������������g���g���g���g�����������g�������g���g���g���g���g���g���g���Ƃ��g���g���g���g���g���g���g���g���g���g�����������g�������g���g���g���g���g���������������g���g���g���w���g���g���g���g���g���g���Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��g���Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��g���Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��Ƃ��g���Ƃ��g���Ƃ��Ƃ��g���Ƃ��Ƃ��Ƃ��Ƃ��g���g���g�������������������g���Ƃ������g���g���g���g���g���g���g�������g���g���g���g���g���g�������g���g���g�������g���g���g���g���g�������g�������g�������g���g���g���g���g�����������g���g���g��������������������������=������������������������������0������������=���������������=���������������=������=������������������������������=���������������U���������������������������������������������������������������������������������������=���=���=���=���=������=���������������U���������������������=������������������=���������������������=���������������������������=������������������������������=������������=���������������������������������������������������=���������������������������������0���U���0���0���0���0���0���0����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ���ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��k���ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��L���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��k���k���k���k���k���ޡ��k���ޡ��ޡ��ޡ��ޡ��L���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��k���ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ��ޡ���L���������`���li��li��li��li��P���li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��`���li��li��li��li��li��li��li��li��li��li��li��li��li��`���li��li��li��li��li��li��li��li��li��li��li��li��li��`���li��`���`���`���`���li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��li��=���li��li��li��li��li��li��`���li��`���li��li��li��li��li��li��li��li��li��li��`���`���`���li��+���`���li��`���li��li��li��li��li��li��`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ��� ��� ������`������������ ��� ��� ��� ��������� ������ ��� ���`��� ��� ��� ��� ���`��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��������� ������ ��� ��� ��� ���`������������ ��� ��� ���`��� ���`��� ��� ��� ��� ���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`��� ���`���`���`���`���`���`���`���`��� ���`���`���`���`���`���`���`���`��� ���`��� ���`���`��� ���`���`���`���`��� ��� ��� ��������������� ���`������ ��� ��� ���`��� ��� ��� ������ ��� ��� ��� ��� ��� ������ ��� ��� ������ ��� ��� ��� ��� ������ ������ ������ ��� ��� ��� ��� ��������� ��� ��� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������l���������������������������������������l��������������l��������������l�����l�����������������������������l����������������������������������������������������������������������������������������������������l��l��l��l��l�����l����������������������������������l�����������������l��������������������l��������������������������l�����������������������������l�����������l��������������������������������������������������l��������������������������������������������x������������������������������������������x���������������x���������������x������x������������������������������x�������������������������������������������������������������������������������������������������������x���x���x���x���x������x�������������������������������������x������������������x���������������������x���������������������������x������������������������������x������������x���������������������������������������������������x�������������������������������������������������������������������������������������������d�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������d�����d��d��d��d��d��d���� �� �� �� ����� �� �� �� �� �� ����� ���� �� �� �� �� ��h�� �� �� �� �� �� �� �� �� �� �� �� �� �� ���������� �� �� �� �� �� ������ �� ���������� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ���� �� �� �� �� �� ���� �� �� �� �� �� �� ���� �� ���� �� �� �� �� �� �� �� �� �������� �� �� �� �� �� �� �� ���� �� ���� �� �� �� �� �� �� ������������ �� �� �� �� �� �� ���� �� �� �� �� �� �� �� ���� �� ���� �� ����������� ����$��d��d��d��d��d��d��d��d��d��d��d��d��d��$��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��$��$��$��$��d��d��d��d��d��d��$��d��d��d��$��$��$��$��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��d��$��d��d��d��d��d��d��$��d��d��d��d��d��d��d��$��d��d��$��d��d��d��d��d��d��d��d��d��$��$��$��d��d��d��d��d��d��d��d��d��d��d��$��d��d��d��d��d��d��d��$��$��$��$��$��d��d��d��d��d��d��d��$��d��d��d��d��d��d��d��d��$��d��d��$��d��d��d��d��d��d��$�����(��(��(��(��(��(��(��(��(��(��(��(��(�����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��������������(��(��(��(��(��(�����(��(��(��������������(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�����(��(��(��(��(��(�����(��(��(��(��(��(��(�����(��(�����(��(��(��(��(��(��(��(��(�����������(��(��(��(��(��(��(��(��(��(��(�����(��(��(��(��(��(��(�����������������(��(��(��(��(��(��(�����(��(��(��(��(��(��(��(�����(��(�����(��(��(��(��(��(�����|!��� ��� ��� ��� ��|!��� ��� ��|!��� ��� ��� ��|!��� ��|!��� ��� ��� ��� ��� ��|!��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��|!��|!��|!��|!��� ��� ��� ��� ��� ��� ��|!��|!��� ��� ��|!��|!��|!��|!��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��|!��� ��� ��� ��� ��� ��� ��|!��� ��� ��� ��� ��� ��� ��� ��|!��� ��� ��|!��� ��� ��� ��� ��� ��� ��� ��� ��� ��|!��|!��|!��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��|!��� ��� ��, ��, ��� ��� ��� ��|!��|!��|!��|!��|!��� ��� ��� ��� ��� ��� ��� ��|!��� ��� ��� ��� ��� ��� ��� ��� ��|!��� ��� ��|!��� ��� ��|!��|!��|!��� ��|!�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������4���3��4��4��4��4��4��4��4��4��4��4��4��4��4���3��4��4��4��4���3��4��4��4��4���3��4���3��4��4��4��4��4��4��4��4��4���3��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4���3���3���3���3���3��4���3��4��4��4��4���3��4��4��4��4��4��4���3��4��4��4��4��4���3��4��4��4��4��4��4���3��4��4��4��4��4��4��4��4���3��4��4��4��4��4��4��4��4��4���3��4��4��4���3��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4���3��4��4��4��4��4��4��4��4��4��4��4���3��4��4��4��4��4��4��@A���@��@A��@A��@A��@A��@A��@A��@A��@A��@A��XA��@A��@A��@A���@��@A��@A��@A��@A���@��@A��@A��@A��@A���@��@A���@��@A��@A��@A��@A��@A��@A��@A��@A��@A���@��@A��@A��@A��@A���@��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A���@���@���@���@���@��@A���@��@A��@A��@A��@A���@��@A��@A��@A��@A��@A��@A���@��@A��@A��@A��@A��@A���@��@A��@A��@A��@A��@A��@A���@��@A��@A��@A��@A��@A��@A��@A��@A���@��@A��@A��@A��@A��@A��@A��@A��@A��@A���@��@A��@A��@A���@��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A���@��@A��@A��@A��@A��@A��@A��@A��@A��@A��@A��XA���@��XA��XA��XA��XA��XA��XA���@���B���@���@���@���@���@���@���@���@���@��$B���@���@���@���B���@���@���@���@���B���@���@���@���@���B���@���B���@���@���@���@���@���@���@���@���@���B���@���@���@���@��A���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���B���B���B���B���B���@���B���@���@���@���@��A���@���@���@���@���@���@���B���@���@���@���@���@���B���@���@���@���@���@���@���B���@���@���@���@���@���@���@���@���B���@���@���@���@���@���@���@���@���@���B���@���@���@���B���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���B���@���@���@���@���@���@���@���@���@���@��$B��A��$B��$B��$B��$B��$B��$B��`A���A��`A��`A��`A��`A��`A��`A��`A��`A��`A���A��`A��`A��`A���A��`A��`A��`A��`A���A��`A��`A��`A��`A���A��`A���A��`A��`A��`A��`A��`A��`A��`A��`A��`A���A��`A��`A��`A��`A���A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A���A���A���A���A���A��`A���A��`A��`A��`A��`A���A��`A��`A��`A��`A��`A��`A���A��`A��`A��`A��`A��`A���A��`A��`A��`A��`A��`A��`A���A��`A��`A��`A��`A��`A��`A��`A��`A���A��`A��`A��`A��`A��`A��`A��`A��`A��`A���A��`A��`A��`A���A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A���A��`A��`A��`A��`A��`A��`A��`A��`A��`A��`A���A���A���A���A���A���A���A���A��$A���A��$A��$A��$A��$A��$A��$A��$A��$A��$A��6A��$A��$A��$A���A��$A��$A��$A��$A���A��$A��$A��$A��$A���A��$A���A��$A��$A��$A��$A��$A��$A��$A��$A��$A���A��$A��$A��$A��$A���A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A���A���A���A���A���A��$A���A��$A��$A��$A��$A���A��$A��$A��$A��$A��$A��$A���A��$A��$A��$A��$A��$A���A��$A��$A��$A��$A��$A��$A���A��$A��$A��$A��$A��$A��$A��$A��$A���A��$A��$A��$A��$A��$A��$A��$A��$A��$A���A��$A��$A��$A���A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A���A��$A��$A��$A��$A��$A��$A��$A��$A��$A��$A��6A���A��6A��6A��6A��6A��6A��6A���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C��D���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C��D���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C���C��D���C���C���C���C���C���C���B��C���B���B���B���B���B���B���B���B���B���B���B���B���B��C���B���B���B���B��C���B���B���B���B��C���B��C���B���B���B���B���B���B���B���B���B��C���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B��C��C��C��C��C���B��C���B���B���B���B���B���B���B���B���B���B���B��C���B���B���B���B���B��C���B���B���B���B���B���B��C���B���B���B���B���B���B���B���B��C���B���B���B���B���B���B���B���B���B��C���B���B���B��C���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B��C���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B���B��HO���N�� O���M��L��!k��!k��!k��HO��HO��!k��!k�� K��!k��!k��!k��!k��HO��L��!k��!k��!k���J��!k��!k��!k���M���J���J��!k��!k��!k��!k��!k��!k���M��HO��HO���L��8Q��!k��!k��!k��!k��!k��0L��0L��HO��L��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k���N��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k��!k���P���O��!k��!k��!k��!k��I��!k��!k��xH��!k��!k��!k��!k��!k��!k��!k��!k���G��!k���F��!k��!k���I��!k��!k��!k��!k��!k��!k��!k��0L��0L��HO��HO��L��!k��HO��L��!k��!k��!k��!k��!k��!k��HO��L��!k��!k��!k��!k��!k��HO��L��I���F��HO��L��E��!k��!k��!k��HO��L��HO��L��HO��L��!k��!k��!k��!k��!k��HO��!k��!k��!k��!k��!k��!k��HO��HO��V���f���f���f���f���f���f���f���f��b���f���f���f���f���f���f���f���f���f���f���]���f���f���f���f���f���f��d���f���f���f���f��`c���f���f���f���f���f���f���f���f���f���f���f���f���f���f���f���f���f���f���f��$V���f���f���f���f���f���f���f���f���f���f���f���f���f���f���f���f��kf���f���f���f���f���f���f���f���f��T_���f���f���f���f���f���f���f���^���f���f���f���f���f���f���f���f���f��Cf���f���f���f���f��V��tN���N��tN��tN��tN��tN��tN��tN��tN��tN��tN���N��tN��tN��tN���N��tN��tN��tN��tN���N��tN��tN��tN��tN���N��tN���N��tN��tN��tN��tN��tN��tN��tN��tN��tN���N��tN��tN��tN��tN��TN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN���N���N���N���N���N��tN���N��tN��tN��tN��tN��TN��tN��tN��tN��tN��tN��tN���N��tN��tN��tN��tN��tN���N��tN��tN��tN��tN��tN��tN���N��tN��tN��tN��tN��tN��tN��tN��tN���N��tN��tN��tN��tN��tN��tN��tN��tN��tN���N��tN��tN��tN���N��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN���N��tN��tN��tN��tN��tN��tN��tN��tN��tN��tN���N��TN���N���N���N���N���N���N��M��PO��PO��PO��PO��M��PO��M��M��M��PO��PO��PO��PO��M��M��PO��M��PO��PO��PO��PO��PO��PO��PO���L��PO��PO��PO��PO��PO��PO��PO��PO��PO��PO��M��M��PO��M��PO��PO��PO��PO��PO��M��M��M��PO��PO��PO��M��PO��PO��PO��PO��PO��PO��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��PO��M��M��M��M��M��M��M��M��PO��M��M��M��M��M��M��M��M��PO��M��PO��M��M��PO��M��M��M��M��PO��PO��PO��M��M��M��M��PO��M��M��PO��PO��PO��PO��PL��PO��PO��M��PO��PO��PO��PO��PO��PO��M��PO��PO��PO��M��PO��PO��PO��PO��PO��M��PO��M��PO��M��PO��PO��PO��PO��PO��M��M��PO��PO��PO��M��M��M��M��M��,N���`���`���`���`���`���`���`���`���]���`���`���`���`���`���`���`���`���`���`��{W���`���`���`���`���`���`���Z���`���`���`���`���Y���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`��PN���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`���`��%P���`���`���`���`���`���`���`���`��Y���`���`���`���`���`���`���`���V���`���`���`���`���`���`���`���`���`��Q���`���`���`���`��,N���I��rK��rK��rK��rK��rK��rK��rK��rK���I��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK���I��rK��rK��rK��rK��rK��rK���I��rK��rK��rK��rK���I��rK��rK��rK��rK��rK��rK��rK��rK��LJ��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK���I��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK���I��rK��rK��rK��rK��rK��rK��rK��rK���I��rK��rK��rK��rK��rK��rK��rK���I��rK��rK��rK��rK��rK��rK��rK��rK���I��rK��rK��LJ��rK��rK���I��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��rK��LJ��rK��rK��LJ��LJ��LJ���J��rK��rK��rK��rK��LJ���D��pG��pG��pG��pG���D��pG���D���D���D��pG��pG��pG��pG���D���D��pG���D��pG��pG��pG��pG��pG��pG��pG���D��pG��pG��pG��pG��pG��pG��pG��pG��pG��pG���D���D��pG���D��pG��pG��pG��pG��pG���D���D���D��pG��pG��pG���D��pG��pG��pG��pG��pG��pG���D���D���D���D���D���D���D���D���D���D���D���D���D���D���D���D���D���D���D��pG���D���D���D���D���D���D���D���D��pG���D���D���D���D���D���D���D���D��pG���D��pG���D���D��pG���D���D���D���D��pG��pG��pG���D���D���D���D��pG���D���D��pG��pG��pG��pG��pG��pG��pG���D��pG��pG��pG��pG��pG��pG���D��pG��pG��pG���D��pG��pG��pG��pG��pG���D��pG���D��pG���D��pG��pG��pG��pG��pG���D���D��pG��pG��pG���D���D���D���D���D��G��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ���N��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��)M��OZ��OZ��OZ��OZ��OZ��OZ���L��OZ��OZ��OZ��OZ���K��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��)G��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ���J��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��TN��OZ��OZ��OZ��OZ��OZ��OZ��OZ���M��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��OZ��,N��OZ��OZ��OZ��OZ��G��!Y���Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��9Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y���Y��!Y���Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y��Z��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y���Y���Y���Y���Y���Y��!Y���Y��!Y��!Y��!Y��!Y��Z��!Y��!Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y���Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��!Y��9Y��Z��9Y��9Y��9Y��9Y��9Y��9Y����������
%/ &0	!'1pm_string_query_constantpm_string_query_localflush_block_exitspm_void_statements_checkpm_loop_modifier_block_exitspm_call_operator_write_node_createpm_index_operator_write_node_createpm_call_or_write_node_createpm_index_or_write_node_createpm_local_variable_or_write_node_createpm_instance_variable_or_write_node_createpm_constant_or_write_node_createpm_constant_path_or_write_node_createpm_class_variable_or_write_node_createpm_global_variable_or_write_node_createpm_call_and_write_node_createpm_index_and_write_node_createpm_local_variable_and_write_node_createpm_instance_variable_and_write_node_createpm_constant_and_write_node_createpm_constant_path_and_write_node_createpm_class_variable_and_write_node_createpm_global_variable_and_write_node_createpm_global_variable_write_nameparse_expression_infixcontext_humanparse_stringsparse_blocklike_parameterspm_block_parameters_node_closing_setparse_negative_numerictoken_begins_expression_pparse_and_validate_regular_expression_encoding_modifierpm_array_node_close_setpm_interpolated_string_node_appendpm_interpolated_node_appendpm_true_node_createpm_self_node_createparse_retrypm_retry_node_createparse_block_exitpm_redo_node_createpm_nil_node_createpm_call_node_not_createpm_undef_node_createpm_index_target_node_createpm_false_node_createpm_parameters_node_keyword_rest_setpm_node_flag_set_repeated_parameterpm_locals_readspm_forwarding_parameter_node_createpm_block_parameter_node_createpm_source_encoding_node_createpm_source_line_node_createpm_source_file_node_createpm_class_variable_read_node_createpm_instance_variable_read_node_createpm_constant_read_node_createparse_yieldparse_blockpm_super_node_createpm_forwarding_super_node_createparse_returnpm_forwarding_arguments_node_createpm_begin_node_end_keyword_setpm_find_pattern_node_createparse_pattern_restpm_implicit_rest_node_createpm_hash_pattern_node_node_list_createpm_no_keywords_parameter_node_createparse_pattern_keyword_restpm_case_node_condition_appendpm_alias_method_node_createpm_alias_global_variable_node_createpm_integer_node_rational_imaginary_createpm_integer_node_rational_createpm_integer_node_imaginary_createpm_integer_node_createpm_locals_unreadpm_parser_scope_findpm_back_reference_read_node_createpm_numbered_reference_read_node_numberpm_numbered_reference_read_node_createpm_float_node_rational_imaginary_createpm_float_node_rational_createpm_float_node_imaginary_createpm_float_node_createpm_locals_readpm_symbol_node_label_createpm_assoc_splat_node_createparse_assocsparse_expression_prefixpm_token_buffer_escapeparser_flush_heredoc_endparser_lexparse_programnext_newlinepm_locals_resizepm_locals_writepm_parser_init���@prism/prism.c\C-\M-index != UINT32_MAXlocal->reads < UINT32_MAXscope != NULLlocal->reads > 0params->keyword_rest == NULLlength >= 0end >= startnode->body.size > 0__END__
__END__
regex string symbol Failed to allocate %d bytes
token->type == PM_TOKEN_COMMAtoken->type == PM_TOKEN_FLOAT\sargument prefixhere documentunary operatorescaped spaceescaped form feedescaped horizontal tabescaped vertical tabescaped carriage returnregexp literalbegin statement'{'..'}' block'do'..'end' block'when' clause'in' clausemethod definitionmethod parametersparameter default value'defined?' expression'else' clause'elsif' clauseembedded expression'ensure' clausefor loopfor loop indexif statement'{'..'}' lambda block'do'..'end' lambda blockloop predicatetop level contextmodule definitionmultiple targetsparentheses'END' block'BEGIN' block'rescue' clausesingleton class definitionternary expressionunless statementuntil statementwhile statementreceiver != NULLstatements->body.size > 0rest != NULLtarget->block == NULLsource != NULLnext_capacity > locals->capacity(modifier == 'n' && modifier_encoding == PM_ENCODING_ASCII_8BIT_ENTRY) || (modifier == 'u' && modifier_encoding == PM_ENCODING_UTF_8_ENTRY) || (modifier == 'e' && modifier_encoding == PM_ENCODING_EUC_JP_ENTRY) || (modifier == 's' && modifier_encoding == PM_ENCODING_WINDOWS_31J_ENTRY)parser->heredoc_end <= parser->endend_keyword->type == PM_TOKEN_KEYWORD_END || end_keyword->type == PM_TOKEN_MISSINGPM_NODE_TYPE(node) == PM_BLOCK_LOCAL_VARIABLE_NODE || PM_NODE_TYPE(node) == PM_BLOCK_PARAMETER_NODE || PM_NODE_TYPE(node) == PM_KEYWORD_REST_PARAMETER_NODE || PM_NODE_TYPE(node) == PM_OPTIONAL_KEYWORD_PARAMETER_NODE || PM_NODE_TYPE(node) == PM_OPTIONAL_PARAMETER_NODE || PM_NODE_TYPE(node) == PM_REQUIRED_KEYWORD_PARAMETER_NODE || PM_NODE_TYPE(node) == PM_REQUIRED_PARAMETER_NODE || PM_NODE_TYPE(node) == PM_REST_PARAMETER_NODEclosing->type == PM_TOKEN_BRACKET_RIGHT || closing->type == PM_TOKEN_STRING_END || closing->type == PM_TOKEN_MISSING || closing->type == PM_TOKEN_NOT_PROVIDEDpm_binding_powers[type].left == PM_BINDING_POWER_UNSETclosing->type == PM_TOKEN_PIPE || closing->type == PM_TOKEN_PARENTHESIS_RIGHT || closing->type == PM_TOKEN_MISSINGparser->current_block_exits != NULLfalse && "unexpected node type"token->type == PM_TOKEN_KEYWORD_NILtoken->type == PM_TOKEN_KEYWORD___ENCODING__token->type == PM_TOKEN_KEYWORD_TRUEtoken->type == PM_TOKEN_KEYWORD_FALSEtoken->type == PM_TOKEN_KEYWORD___LINE__token->type == PM_TOKEN_KEYWORD_SELFname->type == PM_TOKEN_NUMBERED_REFERENCEdiff > 0 && ((unsigned long) diff < SIZE_MAX)name->type == PM_TOKEN_BACK_REFERENCEtoken->type == PM_TOKEN_CLASS_VARIABLEtoken->type == PM_TOKEN_INSTANCE_VARIABLEoperator->type == PM_TOKEN_USTAR_STARfile_keyword->type == PM_TOKEN_KEYWORD___FILE__name->type == PM_TOKEN_CONSTANT || name->type == PM_TOKEN_MISSINGoperator->type == PM_TOKEN_USTAR_STAR || operator->type == PM_TOKEN_STAR_STARkeyword->type == PM_TOKEN_KEYWORD_NILtoken->type == PM_TOKEN_INTEGERPM_NODE_TYPE_P(target, PM_LOCAL_VARIABLE_READ_NODE) || PM_NODE_TYPE_P(target, PM_IT_LOCAL_VARIABLE_READ_NODE) || PM_NODE_TYPE_P(target, PM_CALL_NODE)operator->type == PM_TOKEN_AMPERSAND_AMPERSAND_EQUALoperator->type == PM_TOKEN_PIPE_PIPE_EQUALtoken->type == PM_TOKEN_INTEGER_RATIONALtoken->type == PM_TOKEN_FLOAT_RATIONALpoint && "should have a decimal point"[pm_float_node_rational_create] Failed to allocate memory(label.end - label.start) >= 0!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE)parser->current.end <= parser->end*breakpoint == lex_mode->as.list.incrementorparser->current.type == PM_TOKEN_USTAR_STARparser->previous.type == PM_TOKEN_USTARtoken->type == PM_TOKEN_FLOAT_IMAGINARYtoken->type == PM_TOKEN_FLOAT_RATIONAL_IMAGINARYPM_NODE_TYPE_P(node, PM_LOCAL_VARIABLE_READ_NODE)parser->lex_modes.current->mode == PM_LEX_HEREDOCtoken->type == PM_TOKEN_INTEGER_IMAGINARYtoken->type == PM_TOKEN_INTEGER_RATIONAL_IMAGINARYkeyword->type == PM_TOKEN_KEYWORD_ALIASPM_NODE_TYPE_P(condition, PM_WHEN_NODE)token->type == PM_TOKEN_KEYWORD_SUPERkeyword->type == PM_TOKEN_KEYWORD_SUPERstatements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)token->type == PM_TOKEN_KEYWORD_UNDEFtoken->type == PM_TOKEN_KEYWORD_REDOtoken->type == PM_TOKEN_KEYWORD_RETRYbody == NULL || PM_NODE_TYPE_P(body, PM_STATEMENTS_NODE)lex_mode->mode == PM_LEX_STRINGPM_NODE_TYPE_P(node, PM_HASH_NODE) || PM_NODE_TYPE_P(node, PM_KEYWORD_HASH_NODE)operator->type == PM_TOKEN_NOT_PROVIDED || operator->type == PM_TOKEN_UAMPERSAND || operator->type == PM_TOKEN_AMPERSANDtoken->type == PM_TOKEN_UDOT_DOT_DOTPM_NODE_TYPE_P(left, PM_SPLAT_NODE)prism/prism.soAW���V���V���V���V���U��-W��-W��-W��-W��-W��-W��W��W��W��W��////////////////////////////////////////////////
//////////////	///////////////////////////////////////////////////������������������������������������������������������	

������������:698+RRRRRRRRRRRRRRRRRRR43210/.-RRRR+R*RR
RRRRRRRRRRRRRRRR
RRRR%RRRRRRRRRRRRRRRRR%$#"!
RRRRRRRRR����������������������5&8%:0$49
	76321/
.-,+*)('!#" �������������������������
�	s��%���
�
�
�
�
�
�
�
�
�
�
�
�
p�
�
�
�
�
�
�
x�
�
�
�
�
�
�
�
�
�
�
�
�
�
c�
�
�
�
�
�
�
�

	����1�h�$�r���WwNP�Z4q
�����C�B��vKt��`�(7aB���-�J��.������h�(+�
���<V'`��F�U���d��G#@7�-���=v�TLu`i9�������������MT������f���m����HreE�j�=�OU������g�QV�J���hUX�sL���jSW�P���i����NEM������b���������@GO�)���c���������BKS������e�����*�F�����Z�+����������IQ�-�����d�����,D������������r%��WY�	����k����&���������������z�������(�����������CK�|�����a��������>����������'�����[[�
�����m���������1������~��	�.�d=E��������^���������8�����������	����
���$���������h������m�@�>����������������x0������������YZ�����l������������
o!������?G��������_�AI�R:����`�r;���<���������_]������o�:B���������!t���z���8�����/�x/7����������������������*�"T�q����#-5,�������������t�0��������v"�JR������� ����Q�E��}y�.�����o������;C�
�����]����SQ�������d��������9A�����\�P�~'����7?�������[�(b���5=�������������2��9�����
�����$�������2 ����������]\������n����"������4pu�a^�6���p�������:��������n��(8������u������l����#+{��~���R�j�����!)z��|��Q�������������#�dMU��e�8�$������?�r0&w�J��g�:�'y$zL~�P������K�&�������<������������q���v�I������Xv�t��{�N�W�������V�����������,a����������6@�������#�+3����������/�����������T&��y�%-|������������r���� �������%xsx��}��������Y�����������ps�����x�K����������>����������3;���������������������`�������)�������!�����G%��4S�����19�Z�F��D���������������	O��
4,4R���b���V����c��C������6��f�9�����g�����l�?�
��*������h���)1~�������������.B
��p�mu�H�'/}���������������f�w�v|�O�������l��w�q�D���aR�]���������	K^��Mf������������������d ������������H������������^����t��p��y�L��T`�'�����b\������b��k��D���������+�<D��B������.6�����7Wi�<��RF�������������3\������������e����c���������_������qX����
����u�r��z�M�nT���������6�����OV5��a���������h��q����������c\��������J��[`����3��g���4<����A��iZ���V��I������������������P��1��b
��=jv�Ko�B���������������L���W��2:�������Y�������5�i��
��n�A����LU�������o����E��G�����i��h�;���08������|�X�����������k��pnC�s��F��l������c�����������N�������������gj�IaBJ�����HP^FN�=_��"+���C����A�����]���������!(03�����Ts��������e������DL�������N��6>���1?�@H������"*����}X��;�$��w>F��������N������9����w����������}S�{2��������`��q��������������������7]���������������(������%���������y��7�����k��!:�Cu�������W����#Z�� (��Q{������s�����/�7������)����8@���
o{���t��G���J�<��?������������������/����*2���������U�f����k�>����&.�������5��S������$,-�����������������������U�P�������������H��������������=���m����������������������9������O����������'��&����;���- ��+��_����������������[��A�������������[����,�������������Y�����������������)�����0���G��Y���������%��������5��������������������������#������4������������������������������������������������k�������������������������1���������������������@������������������������������e������������������_�������������������������-��������������.�������������������3��������������	���������I���������������������2����"������������������������������������������M������������������������������������������c�����������d��������������V�������������������������������������������������������*�������������������������m��������������������E��������������������i����������������������g��������������������������������������������������������������������������������������������������������\������������������������������������������������������������������������������������������������������������������������������Z����������������������������������������������������������������������������������������������������������X�������������������������������������������������������������������������������������������������������������������j��������������������n�������������������������������������������������������������������������������������������l��������������^��������������h����������������������������������������f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`������������������������������������������������������������������������������������������������������������������������������������������������
3���!�



















`




]








�






�


u

�




E

"(�r���O��o�ie-Rq@�`�>1�K����k���g�nD3�#/���:��Zm���V�'��~�y�/`}c��];��7�����VG�3�2�g�Ef�L��D�%�3���/r���������������R��1=����2�����M�����	3>����)9����Nk�����Il���9A��W��m��R�Qc���AE����86A�X�Us��/<���CI���[�L{���?D
��P����2�U�Ti��;B�����������Z�Ry���CF����^xv�Y�Vu��II�����G�\�Y}�����������N}������_��E���%OL���#MK���\ M�Z�[���������b��������a��������Yh����T����G�y����GH���������X�����=C���#�����^�S���,j����i���Xw���t����(�!m�����"f��������������q���~�������������N[j�%EG���{�����W�+p������������#���]�������n&P�\�u���������1r���|�/�����������������u.X���I������w�����-;�������������K���������x�����)w�LT����g�+:�����������J�
�!KJ��������S�Ze��������������t��`�������������i�meo)SN��������������^���������$��'�����d-���-WP�����+UO����`�������_������&2���hs������f�����'QMs��������������]���������:�����k����c��������
7@O�5?���P�����O��������������q���������o��/��Q������-*
�����b)������������b4��`��k������s��e����.g���������F��5o����������v�_g{��6d������o���������f�������9��������7����p�Kz�����������z6��������������q���������3������������W����p|K�a���{�������������9�Hi�4�������h���E����h������y����r�����������-��������������������N��=2�S�����A]����l�d�����k�n����C�$���n�������P�B	����������������0���~�%�������������E�������������1�R$j����������c����(����������������m�����������
�����8W���&���X�����;�g�����Y��,����O�����q�������w�G���a����^������Fc���������.�������t-�����}0����������{yU����������<��A���*���+����k���������?������`��u`������������q��������*��������"�z"�������6��������C
^&������}?���o�������/&����7����������������c%��@����2���?�����������#����mu��� "���������'��_�������������3�p���}����(���:�����a���(������jDa������R�����rt�������,����������=��Hd���������l���u�� ��1��������w*T|�5����i{����������U_nV0s�����e��$�����������@�\��(R������<�����1���#��;��Je��yS^m������v������~3�������
8������SLZi�� J�������z�������>[���Z������5	TQ0��!4����������x�������v������/��Q]l������:������}�4�������@�����Vbq.���������������
>6��	�����z����������A��B���F����2�����`o������������g����4�������,�x8����7����������������;Y)��O\k����>���������|�����5�,V\��,����Z��������������������<����gD����������������7�U���������|�����������$N���3�������:��3����1���"���%����������������=��!������� �����"L�����������7�������������������?�����������������[���'����x�������9���B���������
ap���	������������6������F�������������8���@��Lb������������D�����p�����/��������������>��	���~�������C������0KB��
B����0��x�<n�����������G������|V:'l��������f
v����.��8�����#�������)t*����������������Xcr��rJ��h����f������d�����wlW��z�5�������D�������M�������������9v��(j����H��������@�������������������&�M�.������E������������r������� 
4����������h�+�����!��$�����I���>�V���n��Yds���j������]f��������!�������'�����������F��[et��������J�����������������������������������������H��������������;����H�<�����������������������������������������������������*���������������������������+���������������������y������������������������%��������������������������������������������������������������������~�����=����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Q����D������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������b��������������������������������������������������������������������������������������������������_������������������������������������]������������������������P��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� 
����������������������������������������q�%>/�	�X[6�6k�[X,���������������������������o����������o�������������
�������������������"�����������������$'=*_._����3Z����=����������������@,��CMI4������K�������P��������������S�����[������`���e-��h!����������k�p}l���������M�����������������b�M�����������������������*������������������������������?���D����������������
����G������������������������������`$3��������.K����5������8�������������������������=hE�����������NE��qmys��������~%���������������������������������������������������� �������(�����f�������������8������������O�e��������7*����������4AD(GO��P��Z�^�c0������m�������u����������������������������E��������������������������������N�����L�������1�����L���L���]�����5�������������������������������������,������������0���������������5*��������Gs������������������������VJ��_$����gQ��������������������������nl��������������w�������|7������������������������������������������������������������.�������������������������������������������������L����������������������
������������#��%�����������������3�������������������������V���������][����b)��p[������������������������x"��^�F����������p�%���q�����������������c���j�������������������"J������)���0n<�����A���MF��RC`u����o}�����������d�����������������������������������������������1������4��������������������������3����	����������������������O����%D����)�9_������@����������������CE����H'U�Z�����x�����}���[�����K���������x�������������H����������������������������������u������������
��������������������������������������
�`���������������!������������'�������1������C�����HM����]2��`i����n
tQ�������������������������������������S�/�p�������T�������������������������:����'B��,0/�������������4C��8?����������������������������������Iq��������������������Q�����������������h����������m�����������	�����������������������������������D�W	X��	 	�1	)������������������������������4	�����������������������������9	��?	��������������������D	�����������������������M	r��������������Y	Ua	h����������������������������f	����i	���s	������������	C�����	5�	������	��������	|�����	B�	9�������������������������	�����������������������������������
f��������
�����������������
�������)
��/
X��E
s����������J
�N
GQ
��������]
��n
�s
���x
���
����������
E�
�������
j�
<���������������������������
������������
]���
������
��
��

���
��
b�
��
��
������
�������������������&h��,�A����LFaq�yJ�a�������g�e�����U��������!�����������e�����������n�a�������������{��������������������%H������9���G�Pb�hcsI�*�,�)�+�������-���U�����

(

 
'(
6:
#B
J
"R
$Z
/c
&��k
%s
@��w
.�
�
 ���
�
!�
����
�
��
�������������
{�����
i�������
\�����
��������������V�����������������������%�����/V��������������������8�����C����������������Yi����_x����������e�����jX��p����]���y��������������������������������������	#������8����q������������������������/�����������G���S&����������V@������_�c���hD������y'��{��$������������������������� �������������z�������������������������/�������������������������
�������#�����������������(!����������6��9���Cl��c�����������hzp�����������������uk�����������������������x�������������������������������������
��������������
U������������!I��������*���0s��������::����H���M�R}������W&������������������_Qd�����������������pP������������������������������=�����������'�����������H���������������>������������������������r������������������������(W������0���K=��������Xz��y���~]���������|���������������~���
�����������������������������������������j���F��������������{r ��������$���)�����9C�������N��Ul�������q�����������������I�����y�������������~���������,�������������a���������a�������������������������_�������������
����������������������������������������������$o����9�M�[A��`	����em����j�����������������������������t=�����������������������������?��������������+�������������r�����������������N�������������J������R�����������������������&�����C�����LQR��������c����������������r����������������m�������������������������������f����������������������������������w���*��������/n4V��Dn��H�������lzu
|5���P�u��������������� �����������������������������������y��u�����k���������������������������
���������������	����Y������#�(����������������������-��5�����<d��������������Q�������������V{������_�l�����������������������������������������������������������4��������������������������������������������������������������������������������������������������b������������������������������������oF�O#eN��������j��������+�#���������\�������������\�����������$�Z����������������������������������������������������������|	������������������������������������������������9�����>�������C�����UYw~���������������������}�������|�����������������������O�������������������������������#^����:C����������������V%Y�������������������������������������������������������������������������������R������������������������������������S�������������d���������������������g��������������������������������������������.��/�:i��D�������������������������������������jy����������o��������x����v���������������������������������R�������T��������������������������v�����Y�������������������������t�����>����	������'�+�;����������A�����������S���������������������������X�������]v�����7�������������������������������������������������������������������������������������������p�p���������������W�2�������x������W��������������������������	����������00��������������������?�����������������������������������������R�����������������������������������������������Y-��������������������ek	����{��6�����������������&����������������������������������"�������������������������������������������6�������������������������f������1l��<N��������������������E���������L1����d�iB��������������������5�������������������������������������w����������������������������������&��8��>A��I�����������������������������������������������������������^k����������������������f���������������������n����+�����X���������������������������>���v�6�������������������[�������� @���� �/ G����������������B S����G ^L �������������V S] ���������������n �������������s �����x g����� w������� Y� ���������� ������������������ �� c����� �� �������������������� ���� ���� T� V������!��������������!���������)!T��4!2C!9��Z!;s!�{!��������������!Z���������!k���!��������������������!��������������!I�����!��������������������!����!��!H�����������������������������������!��������!K�������������������������!�������������������������������">����2"�����9"�����A"}������������������������������������I"���e"4�"0���������������"������������"����������������������"b���"���������������"������������������"j�����"��������������������"7����������#3������������������"#�������������)#���������������1#?G#q��[#�������������f#������������������s#����#����������#/���������#Q���������������������#~�#�#��������#����������������������������#����������#e�����������������#����������������������#3����������������������$���������$�����$�������������������������������������$�����#$
��)$s��������������������������������������������?$�������������������������������������E$1��T$PY$�����������v$������������������������������������������$B�$9�������������������������������������������������$;�������������������������������������������$��������������������$g���������������������������������������������$)���������$c�����������������������������������������������������������$����������������������$����������$�������������������������������������������%�����%�����������������%�$%(��1%`������6%@��������G%�����L%`��������������T%���������������������������������������������b%�������������������r%G�����������������������%������������������������������������������������������������������%����������������%���������������������������������������������������������������������%������%���������%��������%A����&h��������������������&������������������������&�����)&2������������A&����������������������������������������������������������������Q&�����������������������������������k&d��t&����������&�����������������������������������������������������&\�������������������������������������������&������������������&������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������&-�������������������&����������������������&������������������������������������������������������������������������������������&����������������������������������������������������������������������������������������������������������������������������&����������������������������������������������������������������������������������������������������������������������������������������������������������&�'�����������������������������������������������������������������������������';������������������������-'<��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������P'w������������������������������������������������������U'�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\'t������������������������������������������a'ti'���������������������������������������������������������������������������������������������}'������������������'������������������������'P�����������������������������������������������������������������������������'������������������������������������������'8�':�������������������������������'���������������������(<����������������������������������������������������(Z������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"(K����������������������������������������������������������������������������������������������������������������������������������������������������������������������'(�������1(���������������������������������������������������������������K(.��������������������������������������[(�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������b(t�������������(������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(�yiyiiilanalinamakamanimnmiaolocilaolaooinkannadacnpiinnkozgrancolinearamarkyezipomecariinkharoshthikanaloemgrekmromroocariangeorgreekgonmmendekikakuipemeroinosmanyacakminmanichaeaninmroinmiaoinchakmacmandaicmeeteimayekzzzzinarmenianinmyanmarinmakasarcommonlmmarcinrunicincarianinideographicsymbolsandpunctuationinkhmerqaaiinahommercinchorasmiancombiningmarklcpermmcconnectorpunctuationcansincuneiformnumbersandpunctuationarmiccarmnincherokeeprependedconcatenationmarkincuneiforminavestaninipaextensionspcarmenianinsharadavaivaiiinmarchenmakasarmasaramgondiinarrowsincyrillicinchamqmarkriqaacinsamaritanlatninmasaramgondiinthaanalatininthailineseparatorpcminkatakanainkaithiinscriptionalparthianinitialpunctuationmteiinzanabazarsquareinkhmersymbolsinsyriacintakriarabickatakanaprtizsasciicspsmandprivateuseinruminumeralsymbolsinmyanmarextendedamodiincjkcompatibilityformsinkanaextendedaincjkcompatibilityideographsbraimendideoletterlinmeeteimayekinideographicdescriptioncharactersyezidikndainnandinagarikannadainmodiinlaoxidcontinueinoldnortharabianintransportandmapsymbolsletternumbergothicinlinearainmendekikakuimongolianinmiscellaneousmathematicalsymbolsainspecialsgrlinkbrahmiinemoticonskaliinolditalicxidcinmedefaidrininchesssymbolsincjkcompatibilityideographssupplementkitsinadlampsalterpahlaviincommonindicnumberformsltinnewaskcontrolinkawiinancientsymbolspalminlyciansopatternwhitespaceinmandaicidcmeroiticcursiveintotovsxidsinwarangcitisorainopticalcharacterrecognitionkawiinoldsogdianinmalayalambamuminkanasupplementinsundanesegrextprintintaithamlowerpatternsyntaxjoincinoldsoutharabianincjkstrokesbatksamrinwanchobatakpatwssamaritanidsbinaryoperatorpaucinsmallkanaextensionsmindominotilesalnuminznamennymusicalnotationinsylotinagriinugariticincontrolpicturesinlinearbideogramsinmusicalsymbolssitalinmodifiertonelettersinancientgreekmusicalnotationlisulowercasecwcmscbassidsinlatinextendedaintaileinmiscellaneoussymbolsinmiscellaneoussymbolsandarrowsincaucasianalbanianinmiscellaneoussymbolsandpictographsinoldturkicinsaurashtraincyrillicextendedaidcontinueintaixuanjingsymbolsintamilinmultaniinlatinextendedepdbaliblankidstinlydianinnewtailuebengalirunrllindeseretinancientgreeknumbersidstartzlinmeeteimayekextensionsbalineseincyrillicextendedcinspacingmodifierlettersinearlydynasticcuneiformplrdcanadianaboriginalsindinlatinextendedcuideoincountingrodnumeralszinhdiadiinkhudawadiinhanifirohingyadiakgongingranthabidicxidstartxdigitmongcasedinhiraganasinhalaadlmxsuxglagoliticstermbamugeorgianinosagegunjalagondiphoenicianinolduyghurmultanikaithijoincontrolrunicingeneralpunctuationinmahajaniincyrillicsupplementlowercaselettermarchengraphemelinkingeorgiankhojkichaminoghamcherchakmainkaktoviknumeralsemojiinsiddhamcherokeekharinmongolianinnagmundariincherokeesupplementmanichaeaninolchikiinkhitansmallscriptquotationmarkvithkuqivariationselectoradlaminethiopicgraphemebaseage=11.0age=12.1age=10.0age=12.0age=13.0age=1.1casedletteringurmukhiage=2.1incjkunifiedideographsextensionaage=2.0luage=3.1age=9.0age=3.0age=3.2age=8.0intamilsupplementage=6.1unknownage=6.0age=6.2age=15.0age=7.0age=6.3cwtage=14.0unassignedage=5.1age=5.0age=5.2diacriticage=4.1ahomage=4.0incjkunifiedideographsextensionekhmrinsinhalainmiscellaneoustechnicalsaurgurusundanesepunctpaucinhaugurmukhichorasmianlogicalorderexceptionkhmerlimbuchrsoriyainscriptionalpahlaviincyrillicextendeddincjkunifiedideographsextensionccntrlinlatinextendedadditionalinsorasompengradicalemojimodifierkharoshthinmathgothphnxanatolianhieroglyphsinenclosedalphanumericsnandinagarinointangsankonkooingreekandcopticpgranthadecimalnumberincjkunifiedideographsintirhutainhatranlinbmultsaurashtrakthizanbinbhaiksukiinnabataeaninphoenicianxpeoinkanbuninmeroitichieroglyphsahexenclosingmarksdinelbasaninenclosedideographicsupplementsiddlinearbcpmninenclosedalphanumericsupplementbidicontrolinphaistosdisclimbinkangxiradicalslepcbrailleregionalindicatorinlowsurrogatesbrahinoldhungarianbengemojimodifierbaseinarabicosageinheritedincyprominoanglagmedfosmaindograarabmedefaidrininshorthandformatcontrolsphliinimperialaramaicemodingreekextendedinanatolianhieroglyphspunctuationgraphemeextendcwlvithingeometricshapesemojicomponentdsrtcopticinkayahliinoriyainarabicpresentationformsainbasiclatinincjkunifiedideographsextensiondwarasinhsundshavianinsundanesesupplementinyezidibhksbhaiksukiinhanunoointangutsogdianinlatinextendeddsogoinsinhalaarchaicnumbersideographicugardeseretodicoptimperialaramaicinsogdianindingbatsformatininscriptionalpahlavilyciininscriptionalparthiangrbaselycianinbatakcprtinunifiedcanadianaboriginalsyllabicsextendedamymrmyanmarintibetanintagsasciihexdigitsentenceterminalnandinblockelementsinornamentaldingbatsinethiopicextendedainnumberformscwcfoidcbopocuneiformcaseignorableinoldpersiancwuinelymaicinsoyomboingeometricshapesextendedincjkcompatibilityinmyanmarextendedbinnushuinkanaextendedbolckinbyzantinemusicalsymbolsolchikiinkatakanaphoneticextensionsincopticoidsinarabicextendedamodifierletterincjksymbolsandpunctuationolowerbopomofoinlisuinoldpermicinnoblockextinunifiedcanadianaboriginalsyllabicstakriinbraillepatternsinvaialphainbalinesesorasompengclosepunctuationhaniinmayannumeralshaninmiscellaneousmathematicalsymbolsbinlepchapatsyninlisusupplementinsyriacsupplementhanonewaspacingmarkinpalmyrenetakrxposixpunctinkhojkitaileassignedhanunoohirainarabicextendedcnewtailuespaceintelugulydiidsbextpictlydianinethiopicsupplementsarbugariticinyiradicalsinphoneticextensionssharadazanabazarsquarebugiwordtermseparatoringeorgiansupplementsogdextendershrdgraphtnsatangsaphagdograinhanguljamoinshaviansiddhamcfinunifiedcanadianaboriginalsyllabicsextendedbugineseinmongoliansupplementcyrlinhanguljamoextendedapfnumberinphoneticextensionssupplementdogrmlymincopticepactnumbersmalayalaminbamumndinsuttonsignwritinginethiopicextendedshawpalmyrenesoyoincjkunifiedideographsextensionhsgnwtotocaucasianalbanianinmathematicalalphanumericsymbolsincjkunifiedideographsextensionghatrantaivietmeroitichieroglyphsingeorgianextendedincjkunifiedideographsextensionfoldpersianinduployanincyrillicextendedbdashhatrinnyiakengpuachuehmongincombiningdiacriticalmarksnlincombiningdiacriticalmarksforsymbolskhudawadiincjkradicalssupplementinglagoliticorkhsyrcsurrogateindevanagariavestanoldpermicethiogamrohgidstrinaryoperatorjavainphagspalepchaindevanagariextendedaintifinaghintagalogincombiningdiacriticalmarkssupplementtaleinbrahmiterminalpunctuationinsymbolsandpictographsextendedasyriacinbengalinagmextendedpictographicbuhdjavanesetamlinbugineseinlatin1supplementingothicinvariationselectorshexinverticalformsebaseincurrencysymbolsavstosgeincombiningdiacriticalmarksextendedintaivietspaceseparatorsoftdottedncharinvedicextensionsinlimbuolditalicgujrmathsymbolincjkunifiedideographsextensionbgujaratiphagspainvariationselectorssupplementcurrencysymbolinlinearbsyllabarywanchoinpaucinhauotherotheridcontinuesylozpinaegeannumberswarangcitiothernumberdigitnonspacingmarktitlecaseletterinmeroiticcursivewchographemeclusterbreak=spacingmarkinletterlikesymbolsinottomansiyaqnumbersintagbanwacyrillicoalphagraphemeclusterbreak=crnarbchangeswhencasemappedinbopomofographemeclusterbreak=regionalindicatorotheralphabeticnoncharactercodepointoldhungarianinsymbolsforlegacycomputinginsmallformvariantsinhangulsyllablesemojipresentationepresinbassavahindevanagariextendedinbuhidtirhutainpsalterpahlaviwhitespacefinalpunctuationoryaphlpinbamumsupplementbuhidparagraphseparatorinalphabeticpresentationformsinlatinextendedgelbachangeswhentitlecasedincombininghalfmarksintangutcomponentsthaathaioldturkicthaanainlatinextendedfougrtanginarabicmathematicalalphabeticsymbolstagbanwatamilkhitansmallscriptmahjmahajanihangtirhsylotinagritalunagmundaridevaingujaratideprecatedinarabicpresentationformsbdevanagariingunjalagondigraphemeclusterbreak=tgraphemeclusterbreak=lvttaithamnbatteluhiragananabataeaninrejangintangutsupplementkhojhmngcyprominoaninhebrewinmathematicaloperatorsinarabicsupplementinenclosedcjklettersandmonthschangeswhenlowercasedtangutelbasanosmanyainsuperscriptsandsubscriptsgraphemeclusterbreak=extendgraphemeclusterbreak=prependnshuotherlowercaseinethiopicextendedbotherletterkayahliinplayingcardselymgraphemeclusterbreak=lgraphemeclusterbreak=contrologrextelymaicchangeswhenuppercasedinalchemicalsymbolsoldsogdianotheridstartinsupplementalarrowsainvithkuqisymbolinarabicextendedbcypriotanyotheruppercaserjngwspaceinindicsiyaqnumbersinprivateuseareaothersymbolouppersignwritingnushuhmnpupperinsupplementalarrowscomathmodifiersymbolhebrinhalfwidthandfullwidthformsinsupplementalmathematicaloperatorsinpahawhhmongalphabeticuppercaseduploghamdashpunctuationhangulinhanguljamoextendedbbassavahaghbhunghexdigitincypriotsyllabaryindivesakurutibtinlatinextendedbhluwtibetaninyisyllablesoldnortharabiandefaultignorablecodepointinhighprivateusesurrogatessoyombootherdefaultignorablecodepointpahawhhmongunifiedideographothermathchangeswhencasefoldedinmahjongtilesdepdivesakurugraphemeclusterbreak=lfuppercaseletterinsupplementalpunctuationethiopicinyijinghexagramsymbolsecompinglagoliticsupplementinbopomofoextendedinjavaneseotherpunctuationtifinaghtfnghanifirohingyatavtinboxdrawingoldsoutharabianinegyptianhieroglyphsinegyptianhieroglyphformatcontrolstagbrejangtglgtagalogothergraphemeextendinsupplementaryprivateuseareaainhighsurrogateshebrewduployangraphemeclusterbreak=vgraphemeclusterbreak=lvinsupplementalarrowsbgraphemeclusterbreak=zwjteluguzyyyolduyghurinhangulcompatibilityjamoopenpunctuationhypheninsupplementalsymbolsandpictographsegypnyiakengpuachuehmongegyptianhieroglyphsinsupplementaryprivateuseareab3�/�/��������@		�
�
��P@
_P�����P�P�`�`�����`�P%�/`4�C�F�g�k?n�n�n�o�o��������������P���������������P�������������`�o�����P���������������� ����#��
����������P�#O������ ���@���?�ߦ���p����o�����������������P���O��������������0����/�����O�p����_���������������������O�0����/����������`���_����������O�����������������p���0�o��/���������������p���o�oo�o@n�nk�k�j�jpj�j@jojh?jDF04_40/4�/�/�$O%$$ �#����_��`�_p�o_����P�O��_��OO��`_��������O��PO��������p�0o/����`
?
��O��`@_?�
�

_
�	�	 	?			����@_?��p�0o/��������P0O/����������@�?�������p���P�o�0�O� �/�����P����O���������������������������p���0�o��/������ߪ`���_������ߩ`��0�_��/������ߨ@��0�?��/� ���������@����?�Ф����Ϥ���N���M�M4�M3�32�2�1�1�1�1�1�1�1�101�11/1�0�0@0�00?0�/�//�/�.�...�-�-�-�-0---/-�,�,`,,,_,+�+*�*�)�)))�'�'�'�''�'&�&�%�%�%�%%%`$�$@$_$$?$#�#"�"�!�!P!�!!O!� � � � p �  o ��������������O������ �����PO�����`@_ ?����������������
�


�����
�


�	�			��p�`o@_?����PO���0�/�p�o��P��O��
 
 ����7�9�S�U�o�q���������ìŬ߬�������3�5�O�Q�k�m�������������ۭݭ������/�1�K�M�g�i�������������׮ٮ�����+�-�G�I�c�e������������ӯկ���
�'�)�C�E�_�a�{�}���������ϰѰ���	�#�%�?�A�[�]�w�y���������˱ͱ�����!�;�=�W�Y�s�u���������Dzɲ�������7�9�S�U�o�q���������óų߳�������3�5�O�Q�k�m�������������۴ݴ������/�1�K�M�g�i�������������׵ٵ�����+�-�G�I�c�e������������Ӷն���
�'�)�C�E�_�a�{�}���������Ϸѷ���	�#�%�?�A�[�]�w�y���������˸͸�����!�;�=�W�Y�s�u���������ǹɹ�������7�9�S�U�o�q���������úźߺ�������3�5�O�Q�k�m�������������ۻݻ������/�1�K�M�g�i�������������׼ټ�����+�-�G�I�c�e������������ӽս���
�'�)�C�E�_�a�{�}���������ϾѾ���	�#�%�?�A�[�]�w�y���������˿Ϳ�����!�;�=�W�Y�s�u������������������7�9�S�U�o�q�������������������3�5�O�Q�k�m�����������������������/�1�K�M�g�i�����������������������+�-�G�I�c�e���������������������
�'�)�C�E�_�a�{�}������������������	�#�%�?�A�[�]�w�y��������������������!�;�=�W�Y�s�u����������������������7�9�S�U�o�q�����������������������3�5�O�Q�k�m�����������������������/�1�K�M�g�i�����������������������+�-�G�I�c�e���������������������
�'�)�C�E�_�a�{�}������������������	�#�%�?�A�[�]�w�y��������������������!�;�=�W�Y�s�u����������������������7�9�S�U�o�q�����������������������3�5�O�Q�k�m�����������������������/�1�K�M�g�i�����������������������+�-�G�I�c�e���������������������
�'�)�C�E�_�a�{�}������������������	�#�%�?�A�[�]�w�y��������������������!�;�=�W�Y�s�u����������������������7�9�S�U�o�q�����������������������3�5�O�Q�k�m������������8�8�T�T�p�p���������ĬĬ��������4�4�P�P�l�l�������������ܭܭ������0�0�L�L�h�h�������������خخ����,�,�H�H�d�d�������������ԯԯ����(�(�D�D�`�`�|�|���������аа����$�$�@�@�\�\�x�x���������̱̱���� � �<�<�X�X�t�t���������ȲȲ������8�8�T�T�p�p���������ijij��������4�4�P�P�l�l�������������ܴܴ������0�0�L�L�h�h�������������صص����,�,�H�H�d�d�������������ԶԶ����(�(�D�D�`�`�|�|���������зз����$�$�@�@�\�\�x�x���������̸̸���� � �<�<�X�X�t�t���������ȹȹ������8�8�T�T�p�p���������ĺĺ��������4�4�P�P�l�l�������������ܻܻ������0�0�L�L�h�h�������������ؼؼ����,�,�H�H�d�d�������������ԽԽ����(�(�D�D�`�`�|�|���������оо����$�$�@�@�\�\�x�x���������̿̿���� � �<�<�X�X�t�t�����������������8�8�T�T�p�p�������������������4�4�P�P�l�l�����������������������0�0�L�L�h�h�����������������������,�,�H�H�d�d�����������������������(�(�D�D�`�`�|�|�������������������$�$�@�@�\�\�x�x������������������� � �<�<�X�X�t�t���������������������8�8�T�T�p�p�����������������������4�4�P�P�l�l�����������������������0�0�L�L�h�h�����������������������,�,�H�H�d�d�����������������������(�(�D�D�`�`�|�|�������������������$�$�@�@�\�\�x�x������������������� � �<�<�X�X�t�t���������������������8�8�T�T�p�p�����������������������4�4�P�P�l�l�����������������������0�0�L�L�h�h�����������������������,�,�H�H�d�d�����������������������(�(�D�D�`�`�|�|�������������������$�$�@�@�\�\�x�x������������������� � �<�<�X�X�t�t���������������������8�8�T�T�p�p�����������������������4�4�P�P�l�l�����������`�����_`�|��		;	;	>	@	I	L	N	O	�	�	�	�	�	�	�	�	

>
@
�
�
�
�
�
�
�
�
@@GHKL��������AD��������������

?
@
F
H
J
L
�
�
�
�
�
�
�
�
33��>?11;<VW��44������#&)+0138UUWWmr;;=ACD����������������$+45����#�$�'�'�������èR�S�����������������/�0�3�4�M�M�����������������������,,EF��������,.2355��??ADGHKMbc57@AEE����������������02;<>>������&&,.881578==@@BB������99WX��//>>��������������45>?AAQo�o�o�of�f�m�m�lo������������K_pp��������0J������#%')-Y[�����	:	:	<	<	A	H	M	M	Q	W	b	c	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	

<
<
A
B
G
H
K
M
Q
Q
p
q
u
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
<<>?ADMMUWbc����������<<>@FHJMUVbc����������������

;
<
>
>
A
D
M
M
W
W
b
c
�
�
�
�
�
�
�
�
�
�
�
�
114:GN������557799q~����������-0279:=>XY^`qt��������]_23RSrs����������
���� "'(229;VVX^``bbels|��4:<<BBks����������������,367��������������  � � �,�,--�-�-*0/0�0�0o�r�t�}�������������%�&�,�,�ĨŨ������&�-�G�Q�������������������)�.�1�2�5�6�C�C�L�L�|�|������������������������������������� �/���������vz





8
:
?
?
�
�
$
'
����FP��8Fppst�������'+-4ss��������/14467>>AA����;<>>@@WWflpt8?BDFF^^����������������������3:==?@��������"%'+/79:00;<>>CC������
38;>GGQVY[����068=??��������16::<=?EGG��������6:@@BB@4@4G4U4�j�j0k6kOoOo�o�o�o�o�����-�0�F�e�e�g�i�n�r�{�����������B�D��6�;�l�u�u������������������!�#�$�&�*�����0�6�����������������D�J����� �	���    ( . ` o �������04?4����s�z�����

������N
N
������??AA::��FF�wz�������/1VY���������
JM����-0>@[^^`jp�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfw��������������������������������(*9<DFHJMUVXZ]]`cfow�������������������������




D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|���������6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������LP~���7;IM������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-].�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�12 2����ƤФ+�@����ʧЧѧӧӧէ٧�,�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�k�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F���������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coz|�������������6@U`g������
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~�������'0Yp�����MRu�������46GPv����A��������������(*02359;DGHKMPPWW]cflpt[]a��������DPY`l����+0F;���		578;FPY������GP���	
68EPlp�����	6::<=?GPY`eghj���������:>Y������#$n$p$t$�$C%�/�/0U4DFFh8j@j^j`jijnj�j�j�j�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������-�0�F�P�������&�)����E����������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������������%�*������!�#�$�&�*�0�m������,�0�=�@�I�N�O�����������������������������������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������������;�@�H�P�Q�`�e���������v�{���������G�P�Y�`������������S�`�m�p�|������������������������������ߦ�9�@�� �����������JP�#��������������������������	��	��
��
����������
��
 ������wz�������/1VY���������
JM����-0>@[^^`jp�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfw��������������������������������(*9<DFHJMUVXZ]]`cfow�������������������������




D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|���������6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������LP~���7;IM������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-].�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�12 2����ƤФ+�@����ʧЧѧӧӧէ٧�,�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�k�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F���������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coz|�������������6@U`g������
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~������'0Yp�����MRu�������46GPv����>��������������(*02359;DGHKMPPWW]cflpt[]a��������DPY`l����+0F;���		578;FPY������GP���
68EPlp�����	6::<=?GPY`eghj���������������#$n$p$t$�$C%�/�/0.40484DFFh8j@j^j`jijnj�j�j�j�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�o�o�op���Ռ�������������"�P�R�d�g�p����j�p�|��������������-�0�F�P�������&�)����E������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R��������������������������!�#�$�&�*��,�0�=�@�I�N�O�������������������������������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������������;�@�H�P�Q�`�e���������s�����������G�P�Y�`������������S�`�m�p�t�x�|����������������������������������ߦ�8�@�� �����������J��������������������������	��	��
��
����������
��
 ������wz�������/1VY���������
JM����-0>@[^^`j������	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfw��������������������������������(*9=DFHJMUVXZ`cfow�������������������������




D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|��������� 6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������KP|���7;IM��������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-R.�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�12 2�������ƤФ+�@������§ʧ��,�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�k�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coo6@U`g
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~������'0Y����MRo�������46GPv����>��������������(*02359;DGHKMPPWW]cflpt[]a��������DPY`l����+0?;���		578;FPY������GP���
68EPlp�����	6::<=?GPY`eghj���������������#$n$p$t$�$C%0.40484DFFh8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�o�o�op���Ռ����P�R�d�g�p����j�p�|�����������������&�)����E������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������������������!�#�$�&�*��,�0�=�@�I�N�O�����������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������������;�@�H�P�Q�`�e���������s���������G�P�Y�`������������x�z���S�`�m�p�t�x�z�����������������������������ݦ�4�@�� �����������J��������������������������	��	��
��
����������
��
 ������wz�������/1VY���������
JM����-0>@[^^`j������	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*9=DFHJMUVXZ`cfow�������������������������






D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|��������� 6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������KP|���7;IM��������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-O.�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�1�1�12 2�M�M������ƤФ+�@������§Ƨ��+�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�g�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coo6@U`g
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~'0Y��MRo�������46FPv������>��������������(*02359;DGHKMPPWW]cflptY[[]_��������DPY`l����+0?;����������GP���
68EPlp�����	6::<=?GPY`eghj�������������#$n$p$t$�$C%0.40484DFFh8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�op������P�R�d�g�p����j�p�|�����������������&�)����E������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������������������!�#�$�&�*��,�0�=�@�I�N�O�����������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0����������������������l�p�������;�@�H�P�Q�`�e���������s���������G�P�Y�`���������
�q�s�v�z�����������S�`�m�p�s�x�z�����������֦�4�@�� ���������������������������������������	��	��
��
����������
��
 ������wz�������/1VY���������
JM����-0>@[^^`j������	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*9=DFHJMUVXZ`cfow�������������������������






D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|��������� 6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������KP|���7;IM��������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-O.�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�1�1�12 2�23�M�M������ƤФ+�@������§Ƨ��+�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�g�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coo6@U`g
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~'0Y��MRo�������46FPv������>��������������(*02359;DGHKMPPWW]cflptY[[]_��������DPY`l����+0?;����������GP���
68EPlp�����	6::<=?GPY`eghj�������������#$n$p$t$�$C%0.40484DFFh8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�op������P�R�d�g�p����j�p�|�����������������&�)����E������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������������������!�#�$�&�*��,�0�=�@�I�N�O�����������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0����������������������l�p�������;�@�H�P�Q�`�e���������s���������G�P�Y�`���������
�q�s�v�z�����������S�`�m�p�s�x�z�����������֦�4�@�� ���������������������������������������	��	��
��
����������
��
 ������wz�������/1VY���������
JM����-0>@[^^`j������	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*9=DFHJMUVXZ`cfox�������������������������






D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|��������� 6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������KP|���7;IM��������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+�+�+�+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-N.�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�1�1�12 2�23�M�M������ƤФ+�@��������+�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�e�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coo6@U`g
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~'0YMRo�������46FPv������>��������������(*02359;DGHKMPPWW]cflptY[[]^��������DPY`l����+0?;����GP�����
68EPlp�����	6::<=?GPY`eghj��������� �#$n$p$t$�$C%0.4DFFh8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�k@n�noDoPo~o�o�o�o�op�����p����j�p�|�����������������&�)����E������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������������������!�#�$�&�*���������J�P�Y�^�_�q�������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0����������������������k�p�������;�@�H�P�Q�`�e���������s�������G�P�Y�`����������>�@�p�s�v�z�z�|�������������`�m���֦�4�@�� ���������������������������������������	��	��
��
����������
��
 ������wz�������/1VY_a�����������
JM���-0>@[^^`j������	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*9=DFHJMUVXZ`cfox���������������������������






D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|��������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�������KP|���7;IM������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+�+�+�+�+�+�+�+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-I.�.�.�.�./�/�/�/0?0A0�0�0�01.111�1�1�1�1�1�12 2�23�M�M������ƤФ+�@������������+�0�9�@�w���ŨΨ٨����S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�e�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coo6@U`g
578<<?UW��������		9	?	?	�	�	�	�	�	







3
8
:
?
G
P
X
`
�
�
�
�
�
59UXrx�����H������`~MRo�����46CPv������>��������������(*02359<DGHKMPPWW]cflptY[[]]��������DPY`l����+0?����GP�������
68EPlp�����	6::<=?GPY �#$n$p$t$�$C%0.4DFFh8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�koDoPo~o�o�o�o�op�����p����j�p�|�����������������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������������������!�#�$�&�*���������J�P�Y�^�_�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0����������������������.�0�k�p�������;�@�H�P�Q�`�e���������s�������G�P�Y�`����������>�@�L�P�k�������������֦�4�@�� ���������������������������������������	��	��
��
����������
��
 ������wz�������/1VY_a�����������
JM���-0>@[^^������	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*9=DFHJMUVXZ`cfox���������������������������






:
=
D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|��������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�������KP|���7;IM��������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!�#$&$@$J$`$s+v+�+�+�+�+�+�+�+�+�+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-D.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M՟�����ƤФ+�@������������+�0�9�@�w���ŨΨ٨����S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�e�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#0JPz�������������'0coo6@U`g
578<<?UW��������		9	?	?	�	�	�	�	�	







3
8
:
?
G
P
X
`
�
�
�
�
�
59UXrx�����H������`~MRo�����46CPv������>��������������(*02359<DGHKMPPWW]cflptY[[]]��������DPY`l����+0?������
68EPlp����� �#$n$p$t$�$C%0.4DFFh8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�koDoPo~o�o�o�o�op������j�p�|�����������������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������������������!�#�$�&�*���������J�P�Y�^�_�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0����������������������.�0�k�p�������;�@�H�P�Q���������s�������G�P�Y�`��������� �'�0�0�3�>�@�K�P�^�����������֦�4�@�� �����������������������������������	��	��
��
����������
��
 �����owz�������/1VY_a�����������
JM���-0>@[^^����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*9=DFHJMUVXZ`cfox����������������������������






:
=
D
F
H
J
N
W
W
_
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|��������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�������KP|���7;IM�������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!�#$&$@$J$`$s+v+�+�+�+�+�+�+�+�+�+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-B.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M՟�����ƤФ+�@������������+�0�9�@�w���ĨΨ٨����S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�e�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#0JPz���������'0coo6@U`g
578<<?UW��������		9	?	?	�	�	�	�	�	







3
8
:
?
G
P
X
`
�
�
�
�
�
59UXrx�����H������`~MRo�����46CPv������=��������������(*02359<DGHKMPPWW]cflpt��������DPY����+0?������ �#$n$p$t$�$C%0.4DFFh8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�koDoPo~o�o�o���j�p�|�����������������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������������������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0����������������������.�0�k�p�������:�@�H�P�Q��y�{�����������s�������G�P�Y�`�������������������֦�4�@�� �����������������������������������	��	��
��
����������
��
 �����bwz�������/1VY_a�����������
JM���-0>@[^^����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*9=DFHJMUVXY`cfox����������������������������






:
=
D
F
H
J
N
W
W
`
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�������KP|���7;IM�������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!�#$&$@$J$`$s+v+�+�+�+�+�+�+�+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-B.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M̟�����ƤФ+�@��������������������+�0�9�@�w���ĨΨ٨����S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�_�d�e�������������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �-�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37�������������#0JPz���������'0coo6@U`g
578<<?UW���			9	?	?	�	�	�	�	








3
8
:
?
G
P
X
`
�
�
�
�
�
59UXrx�����H`~MRo�����46CPv��������=����(*02359<DGHKMWW]cflpt��������DPY���������� �#$n$p$t$0.4h8j@j^j`jijnjoj�j�j�j�jkEkPkYk[kakckwk}k�koDoPo~o�o�o���j�p�|�����������������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R����������������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0����������������������.�0�k�p�������:�@�H�P�Q��,�0�}�������������J�P�y�{�����B�E�������s�������G�P�Y�`���������֦�4�@����������������������������������	��	��
��
����������
��
 �����%wz~�������'1VY_a�����������
JM���-0>@[^^������	w	y		�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*359=DFHJMUVXY`cfox����������������������������






:
=
D
F
H
J
N
W
W
`
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�����KP|���7;IM������ EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!�#$&$@$J$`$�&'L+P+Y+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-;.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M̟�����ƤФ+�@��������������������+�0�9�@�w���ĨΨ٨����S�_�|���ͩϩ٩ީߩ�6�@�M�P�Y�\�{���ª۪����	���� �&�(�.�������������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �&�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37��������� #0J���������
578<<?UW_			9	?	?	�	�	�	�	








3
8
:
?
G
P
X
`

59UXrxH`~MRo������46C�������� n#$b$p$s$0.4h8joDoPo~o�o�o������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������
��.�0�k�p�������:�@�H�P�Q�� �0�5�7�|������������������>�@�@�B��������=�@�C�P�g���@�E�O�����s���֦�4�@����������������������������������	��	��
��
����������
��
 �����%wz~�������'1VY_a�����������
JM���-0>@[^^������	w	y		�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*359=DFHJMUVXY`cfox����������������������������






:
=
D
F
H
J
N
W
W
`
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�����KP|���7;IM������ EHMPWYY[[]]_}�������������� d j q t � � � � � � � !�!�!�#$&$@$J$`$�&'L+P+Y+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-;.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M̟�����ƤФ+�@��������������������+�0�9�@�w���ĨΨ٨����S�_�|���ͩϩ٩ީߩ�6�@�M�P�Y�\�{���ª۪����	���� �&�(�.�������������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �&�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37��������� #0J���������
578<<?UW_			9	?	?	�	�	�	�	








3
8
:
?
G
P
X
`

59UXrxH`~MRo������46C�������� n#$b$p$s$0.4h8joDoPo~o�o�o������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������
��.�0�k�p�������:�@�H�P�Q�� �0�5�7�|������������������>�@�@�B��������=�@�C�P�g���@�E�O�����s���֦�4�@����������������������������������	��	��
��
����������
��
 �����%wz~�������'1VY_a�����������
JM���-0>@[^^������	w	y		�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*359=DFHJMUVXY`cfox����������������������������






:
=
D
F
H
J
N
W
W
`
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq�������������HJMPVXXZ]`����������������Z]|������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�����KP|���7;IM������ EHMPWYY[[]]_}�������������� d j q t � � � � � � � !�!�!�#$&$@$J$`$�&'L+P+Y+,.,0,^,`,�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-;.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M̟�����ƤФ+�@��������������������+�0�9�@�w���ĨΨ٨����S�_�|���ͩϩ٩ީߩ�6�@�M�P�Y�\�{���ª۪����	���� �&�(�.�������������������m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �&�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37��������� #0J���������
578<<?UW_			9	?	?	�	�	�	�	








3
8
:
?
G
P
X
`

59UXrxH`~MRo������46C�������� n#$b$p$s$0.4h8joDoPo~o�o�o������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������
��.�0�k�p�������:�@�H�P�Q�� �0�5�7�|������������������>�@�@�B��������=�@�C�P�g���@�E�O�����s���֦�4�@����������������������������������	��	��
��
����������
��
 ������wz~�������'1VY_a���������
JM���-0>@[^^	w	y		�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfw��������������������������������(*359=DFHJMUVXY`cfox����������������������������






:
=
D
F
H
J
N
W
W
`
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq����������HJMPVXXZ]`����������������Z]|������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�����KP|�������7;IM���� EHMPWYY[[]]_}�������������� d j q t � � � � � � � !�!�!�#$&$@$J$`$�&'�'�'�'�'L+P+Y+,.,0,^,`,�,�,%-0-e-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-1.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M˟�����ƤФ+�@�s�|��������������������+�0�9�@�w���ĨΨ٨����S�_�|���ͩϩ٩ީߩ�6�@�M�P�Y�\�{���ª۪ߪ��	���� �&�(�.�������������������-�0�m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �&�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37��������� #0J���������
578<<?UW_			9	?	?	








3
8
:
?
G
P
X
`

59UXrxH`~MRo�� n#$b$p$s$0.4h8j������&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������+�0��������������������
��.�0�i�p�������:�@�H�P�Q�� �0�5�7�|������������������>�@�@�B��������=�P�g����������������� �%�(�+�-�-�0�3�5�@�E�O�����s���֦�4�@����������������������������������	��	��
��
����������
��
 ������wz~�������%1VY_a���������!^`
JM���-0>	9	<	N	P	U	X	r	y		�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfq��������������������������������(*359=DFHJMUVXY`cfox����������������������������






(
*
9
=
D
F
H
J
M
W
W
`
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq������������HJMPVXXZ]`����������������Z_|������� 6@S`lnprs������ w���� +0;@@Dmpt�������^`|�����KP|����7;IM���� EHMPWYY[[]]_}�������������� d j q t � � � � � � � !�!�!�#$&$@$J$`$�&�&�&�&�&�&�&'''	'''')'K'M'M'O'R'V'^'a'�'�'�'�'�'�'�'�'�'�'L+P+Y+,.,0,^,`,�,�,%-0-e-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-1.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2�23�M�M˟�����ƤФ+�@�_�b�s�|������������+�0�9�@�w���ĨΨ٨����S�_�|���ͩϩ٩ީߩ�6�@�M�P�Y�\�{���ª۪ߪ������������������-�0�m�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �&�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37��������� #0J���������
578<<?UW_			9	?	?	








3
8
:
?
G
P
X
`

59UXrxH`~�� n#$b$p$s$0.4����&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������+�0����
��.�1�1�=�=�?�?�B�B�F�F�J�N�W�W�_�_�y�y�{�|��������������1�@�H���֦�4���������������������������������	��	��
��
����������
��
 ������wz~�������#1VY_a���������!^`
JM���	9	<	M	P	T	X	r	{		�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMVW\]_cfq��������������������������������(*359=DFHJMUVXY`cfox����������������������������






(
*
9
=
D
F
H
J
M
W
W
`
c
f
u
y

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIlq��������������Y_���HJMPVXXZ]`����������������Z_|����v���� 6@S`lnprs������ w�� +0;@@Dmpt�������KP|����7;IM�� EHMPWYY[[]]_}�������������� d j q t � � � � � � � !O!S!�!�!�#$&$@$J$`$�&�&�&�&�&'''	'''')'K'M'M'O'R'V'V'X'^'a'�'�'�'�'�'�'�'�'�'�'L+P+T+,.,0,^,`,o,q,},�,�,�,%-0-e-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-0.�.�.�.�./�/�/�/0?0A0�0�0�01-111�1�1�1�1�1�12 2C2P2�23�M�Mß�����Ƥ�+�@�_�b�s�|��������+�@�w���ĨΨ٨�S�_�_��6�@�M�P�Y�\�_�����-�0�j�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �&�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37��������� #0J���������
578<<??			9	?	?	








3
8
:
?
G
P
X
 n#$b$p$s$����&�)����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R������������+�0�����֦��������������������������������	��	��
��
����������
��
 ������otuz~�����������1VY_a���������!:@^`
JMm����	9	<	M	P	T	X	p	{		�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<CGHKMVW\]_afq������������������������������(*359>DFHJMUV`afo����������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIjq���������!#')*,269@Y����Y_���HJMPVXXZ]`����������������Z_|����v���� 6@S`lnprs������ w�� +0;@@Dmpt�������KP|����� EHMPWYY[[]]_}�������������� c j q t � � � � � � � !N!S!�!�!�#$&$@$J$`$�&�&�&'''	'''')'K'M'M'O'R'V'V'X'^'a'�'�'�'�'�'�'�'�'�'�'+ +#+,.,0,^,`,l,t,w,�,�,�,%-0-e-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-....�.�.�.�./�/�/�/0?0A0�0�0�01,111�1�1�1�1�1�12 2C2P2�23�M�M�������Ƥ�� �!��+�@�w�����-�0�j�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �#�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37� #0J���������
578<<??				








3
8
:
?
G
P
X
 n#$b$p$s$����&�*����E��V�`�q��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������֦��������������������������������	��	��
��
����������
��
 ������APotuzz~~��������������1VY_a�����������!:@^`
JMm��	9	<	M	P	T	X	p	}	}	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<CGHKMVW\]_afq������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIjq���������!#')*,269@Y����Y_���HJMPVXXZ]`����������������Z_|����v���� 6@S`lnprs������ w�� +0;@@Dmpt����������� EHMPWYY[[]]_}�������������� c j q t � � � � � � � !L!S!�!�!�#$&$@$J$`$�&�&�&'''	'''')'K'M'M'O'R'V'V'X'^'a'�'�'�'�'�'�'�'�'�'�'+,.,0,^,�,�,�,%-0-e-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-....�.�.�.�./�/�/�/0?0A0�0�0�01,111�1�1�1�1�1�12 2C2P2�23�M�M�������Ƥ���+�����-�0�j�p�������6�8�<�>�>�@�A�C�D�F����?�P����������� �#�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37� #0J���������
578<<??








3
8
:
?
G
P
X
����&�*����E��V��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������֦��������������������������������	��	��
��
����������
��
 ������6PW]otuzz~~�����������������1VY_a�������������!:@X`
JMO��	9	<	M	P	T	X	p	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<CGHKMVW\]_afq��������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIjq���������!#')*,269@Y������Y_���FHHJMPVXXZ]`������������������������ FHZa|��v���� 6@S`lnprs������ w�� +0;@@Dmpt��k��� EHMPWYY[[]]_}�������������� T W W _ c j q t � � � � � !;!=!K!S!�!�!�#$&$@$J$`$&&}&�&�&�&�&'''	'''')'K'M'M'O'R'V'V'X'^'a'�'�'�'�'�'�'�'�'
+�.�.�.�./�/�/�/0?0A0�0�0�01,111�1�1�1�12 2C2P2}22�23�M�M�������Ƥ����-�0�j������6�8�<�>�>�@�A�C�D�F����?�P����������� �#�0�R�T�f�h�k�p�t�v������������������������
&(:<=?MP]��37? #0J�������
578<<??����&�*����V��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������֦��������������������������������	��	��
��
����������
��
 ������ "3P���O`otuzz~~�����������������1VY_a�������������!:@U`���
,0J��			9	<	M	P	T	X	p	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02369<CGHKMVW\]_afp��������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIjq���������!#')*,269@Y������Y_���FHHJMPVXXZ]`������������������������ FHZa|��v���� 6@S`lnprs���� w����� EHMPWYY[[]]_}�������������� R W W _ c j q t � � � � � !:!=!K!S!�!�!�#$&$@$J$`$�$%&&&&}&�&�&'''	'''')'K'M'M'O'R'V'V'X'^'a'�'�'�'�'�'�'�'�'�*�.�.�.�./�/�/�/0?0A0�0�0�01,111�1�1�1�12 2C2Q2{22�2�2�23v3{3�3�3�34�MN�������Ƥ����-�0�j������6�8�<�>�>�@�A�C�D�F����?�P����������� �#�0�F�I�R�T�f�h�k�p�t�v�������������������������� #0J%(M����&�*����T�V���������������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������֦��������������������������������	��	��
��
����������
��
 �����"3P���N`btuzz~~�������������������������1VY_a�������������!:@U`mp���
,0J��			9	<	M	P	T	X	p	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02369<CGHKMVW\]_afp��������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIjq���������!#')*,269@Y������Y_���FHHJMPVXXZ]`������������������������ FHZa|��v�������� w����� EHMPWYY[[]]_}�������������� F H M j p t � � � � � !:!S!�!�!�!"�"#{#}#�#$&$@$J$`$�$%�%�%�%&&&q&'''	'''')'K'M'M'O'R'V'V'X'^'a'g'v'�'�'�'�'�'(�(�.�.�.�./�/�/�/0:0>0?0A0�0�0�0�0�01,111�1�1�122 2C2`2{22�2�2�2�2�23v3{3�3�3�34�MN�����������������¤ĤƤƤ����-������6�8�<�>�>�@�A�C�D�F����?�P��������� �#�0�D�I�R�T�f�h�k�p�r�t�t�v��������^�a������������������� #0J%(M����&�*����T�V���������������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������֦��������������������������������	��	��
��
����������
��
 ����q"3P���N`btuzz~~�������������������������1VY_a�������������!:@U`mp���
,0J��			9	<	M	P	T	X	p	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02369<CGHKMVW\]_afp��������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[������������������������������������GIjq���������!#')*,269@Y������Y_���FHHJMPVXXZ]`������������������������ FHZa|��v�������� w����� EHMPWYY[[]]_}�������������� F H M j p t � � � � � !:!S!�!�!�!"�"#{#}#�#$&$@$J$`$�$%�%�%�%&&&q&'''	'''')'K'M'M'O'R'V'V'X'^'a'g'v'�'�'�'�'�'(�(�.�.�.�./�/�/�/0:0>0?0A0�0�0�0�0�01,111�1�1�122 2C2`2{22�2�2�2�2�23v3{3�3�3�34�MN�����������������¤ĤƤƤ����-������6�8�<�>�>�@�A�C�D�F����?�P��������� �#�0�D�I�R�T�f�h�k�p�r�t�t�v��������^�a�����������������������������������������������������	��	��
��
����������
��
����8��P�����E`atuzz~~��������������������OQ\^�������������1VY_a�������������!:@R`mp���������			9	<	M	P	T	X	p	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02369<CGHKMVW\]_afp��������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
:?[������������������������������������GIiq�����������������Y_������ EHMPWYY[[]]_}�������������� . 0 F j p t � � � � � !8!S!�!�!�!"�"###z#$$$@$J$`$�$%�%�%�%&&&o&'''	'''')'K'M'M'O'R'V'V'X'^'a'g'v'�'�'�'�'�'070?0?0A0�0�0�0�0�01,111�1�1�122 2C2`2{22�2�2�2�2�23v3{3�3�3�3N������-������6�8�<�>�>�@�A�C�D�F����?�P��������� �#�0�D�I�R�T�f�h�k�p�r�t�t�v��������^�a�����������������������������������������������������	��	��
��
����������
��
����8��P�����E`atuzz~~��������������������OQ\^�������������1VY_a�������������!:@R`mp���������			9	<	M	P	T	X	p	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02369<CGHKMVW\]_afp��������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
:?[������������������������������������GIiq�����������������Y_������ EHMPWYY[[]]_}�������������� . 0 F j p t � � � � � !8!S!�!�!�!"�"###z#$$$@$J$`$�$%�%�%�%&&&o&'''	'''')'K'M'M'O'R'V'V'X'^'a'g'v'�'�'�'�'�'070?0?0A0�0�0�0�0�01,111�1�1�122 2C2`2{22�2�2�2�2�23v3{3�3�3�3N������-������6�8�<�>�>�@�A�C�D�F����?�P��������� �#�0�D�I�R�T�f�h�k�p�r�t�t�v��������^�a�����������������������������������������������������	��	��
��
����������
��
���� ��P�����E`atuzz~~��������������������OQ\^�������������1VY_a�����������!:@R`mp���������			9	<	M	P	T	X	p	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Y
\
^
^
f
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02369<CGHKMVW\]_afp��������������������������������(*359>DFHJMUV`afo��������������������������






(
*
9
>
C
F
H
J
M
W
W
`
a
f
o
:?[������������������������������������������Y_������ EHMPWYY[[]]_}�������������� . 0 F j p t � � � � � !8!S!�!�!�!"�"###z#$$$@$J$`$�$%�%�%�%&&&o&'''	'''')'K'M'M'O'R'V'V'X'^'a'g'v'�'�'�'�'�'070?0?0A0�0�0�0�0�01,111�1�1�122 2C2`2{22�2�2�2�2�23v3{3�3�3�3N���-������6�8�<�>�>�@�A�C�D�F����?�P��������� �#�0�D�I�R�T�f�h�k�p�r�t�t�v��������^�a��������������������xy��������00WX����������KL����./??\]__ko�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	






)
)
1
1
4
4
7
7
:
;
=
=
C
F
I
J
N
P
R
X
]
]
_
e
w
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�

))1144:;EFIJNTX[^^dex���������������������������������

)):;EEIINTWW[\^_depv��������������������������





E
E
I
I
P
S
d
e
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
;>\�����������������������HHmp��������������IINOWWYY^_����������������[\}����������7?T_mmqqt������y����,/<?ACnou������__}~��������MO��8:JL��������FGNOXXZZ\\^^~��������������e e r s � � � � � � � � �!�!'$?$K$_$t+u+�+�+�,�,&-&-(-,-.-/-h-n-q-~-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-^..�.�.�.�.�/�/�/�/@0@0�0�0110101�1�1�1�122����ǤϤ,�?�����˧ϧҧҧԧԧڧ�-�/�:�?�x��ƨͨڨߨT�^�}��ΩΩکݩ����7�?�N�O�Z�[�êڪ���������'�'�/�/�l�o�������������������n�o��������7�7�=�=�?�?�B�B�E�E�������������S�S�g�g�l�o�u�u����������������������������'';;>>NO^��46�������������$,KO{��������������(/dn{{��������������7?V_h������		669;=>VV��������		:	>	@		�	�	�	�	







6
7
;
>
I
O
Y
_
�
�
�
�
�
�
68VWsw������I����(
/
:
_������(/Zo������NQv~��������55HOw����B��������������
))1144::EFIJNOQVX\demou�\\b�������EOZ_m����,/G�<���
669:GOZ�������HO����
�		77FOmo������

79;;>>HOZ_ffii����������;=Z������#�#o$o$u$$D%�/�/�/V4�CGF�g9j?j_j_jjjmj�j�j�j�j�j�j�j�jFkOkZkZkbkbkxk|k�k?n�n�nKoNo�o�o�o�o�o�o�o�o����֌��	������������#�1�3�O�S�T�V�c�h�o�����k�o�}��������������.�/�G�O���������'�(�����F�����������W�_�y���U�U�����������������������������������������:�:�?�?�E�E�G�I�Q�Q����������������������$�+�������"�"�%�%�+�/�n�������-�/�>�?�J�M�P������������������������������������������L�O�Z�]�`�p����>����� � �#�#�%�&�(�(�3�3�8�8�:�:�<�A�C�F�H�H�J�J�L�L�P�P�S�S�U�V�X�X�Z�Z�\�\�^�^�`�`�c�c�e�f�k�k�s�s�x�x�}�}���������������������������,�/���������������������������<�?�I�O�R�_�f�����������w�z����������H�O�Z�_�������������T�_�n�o�}���������������������������������:�?��������������KO�#�����N����< < I I "!"!9!9!�!�!�!�!##(#(#�#�#�#�#�#�#�#�#�$�$�%�%�%�%�%�%�%�%&&&&&�&�&'''''''''!'!'('('3'4'D'D'G'G'L'L'N'N'S'U'W'W'c'g'�'�'�'�'�'�'�'�'4)5)++++P+P+U+U+0000=0=0�2�2�2�2���
��/�/�l�q�~������������������/�/�2�:�<�?�I����=�F�O�����t�������H�O�Z�_����������:�<�E�G������
##**09
 
 � � �������������� (&&�&�&
'
'����������������B�C�F�P�f�x�|�|���������������������t�u�z�z���������E�G�K�O���������������������&�&�0�9�<�>�w�w��������������������������Q##�#�#�#�#�#�#�%�%&&H&S&&&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&''
''('('L'L'N'N'S'U'W'W'�'�'�'�'�'�'++P+P+U+U+����������������������/�/�2�6�8�:�P�Q�� �-�5�7�|�~���������������������>�@�@�B�����=�K�N�P�g�z�z�����������O����������������������:�<�E�G���p�|��������������������##**09����< < I I "!"!9!9!�!�!�!�!##(#(#�#�#�#�#�#�#�$�$�%�%�%�%�%�%�%�%&&&&&&&&&&&& & &"&#&&&&&*&*&.&/&8&:&@&@&B&B&H&S&_&`&c&c&e&f&h&h&{&{&~&&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&'''''
'''''''''''!'!'('('3'4'D'D'G'G'L'L'N'N'S'U'W'W'c'd'�'�'�'�'�'�'�'�'4)5)++++P+P+U+U+0000=0=0�2�2�2�2������p�q�~������������������/�/�2�:�P�Q��!�$�������������������������=�I�N�P�g�o�p�s�z���������������������������������������������������O������������������������:�<�E�G���p�|���������������������������������!/:@[^``{~�������������������� ' 0 > A S U ^ �!_$%u'�'�+..000 00000>�?�E�F�	
  ��  ( ) 
���P!!..??������7799=>d	e	JKbbghnn56		DE��Z[^_}~;<~< = G I ....<.<.S.T.00������������v�w�ΨϨ/�/�ȩɩ]�_�����R�R�V�W�������a�a�V
W
UY��GH��AC������89;<��KL����AB<>DDFFBC��AB��CDnjoj�j�j7k8kDkDk�n�n������������iq����!!.!.!�0�0@D������������������"ij//IIhh������VVXXbb������--��q q H!I!|,|,"�#�V�W�������������&�'�Z�[�������������*�+�^�_�������L�M�h�h�IIsswwyy��j o )#*#OO_`��e e d1d1�����������4�MN����������!�!�#�$�'�)�ߦ�9�@�� �������JP�#�.�.�.�./�/�/�/�/�/�/�/�	�	�	�	>>WW��������>
>
W
W
�
�
�
�
55  .0/0����>>WW������00e�e�n�r� ����������������������������������������	��	��
��
����������
��
������������`!o!�$�$0�I�P�i�p�������������EEzz��,jxx��q q   � � p!!�$�$|,},����p�p�������\�_�i�i���������0�m�!����@@��UUFF��

CC��66{{001050�0�0�0�0����ϩϩ��p�p�ݪݪ��p�p���]]����BkCk�o�o�o�o<�=�D�F��^^``���������NPW]btuzz����YY����������KRWX������0J����������<	<	M	M	Q	T	q	q	�	�	�	�	<
<
M
M
�
�
�
�
�
�
<<MMUU��<<MM����;
<
M
M
�
�
GLNN����557799>?������779:cdim������]_����9;u|����44DDks��67x}��������,j�����������������,�,/./.*0/0�0�0�0�0o�o�|�}����������!���������ĨĨ��+�.�S�S�����������{�}���ª����[�_�i�k����� �/�>�>�@�@�p�p����������������
�
"
'
��FP��FFpp��34ss����56��<<MMflptBBFF����??��++9:=>CC��44GG��??BBDE��G4U4�j�j0k6k�o�o�o�o�����������-�0�F�g�i�m�r�{�����������0�m�0�6�������������D�F�H�J�00!0)080:04�MN���m�p���o�op���Ռ��p���ߦ�9�@�� ���������JP�#�EE����������KWY_pp��������0?��#%'),�����	:	;	>	L	N	O	U	W	b	c	�	�	�	�	�	�	�	�	�	�	�	�	

>
B
G
H
K
L
Q
Q
p
q
u
u
�
�
�
�
�
�
�
�
�
�
�
�
>DGHKLVWbc����������>DFHJLUVbc��������������

>
D
F
H
J
L
W
W
b
c
�
�
�
�
�
�
�
�
�
�
114:MM��������q�����+688;>VY^`bdgmqt������23RSrs������ +08U^at����5C��������$6���$�$�-�-t�{���������#�'�������èŨŨ����&�*�G�R�����������)�6�C�C�L�M�{�}���������������������������vz





$
'
��8Est������'2EF������,477>>AA��>DGHKLWWbc5ACE��������0>@@��*,80578;<@@BB������
59;>Q[��/68>����16::<=?ACCGG��������4:>@OoOoQo�o�o�o�o�o���������!�#�$�&�*�����G�G�0�I�P�i�p���09AFaf��!�&�A�F��^^��������  2 4 @ @ a d } ~ � � � � � � � � � � !!!!
!!!!!!$!$!(!)!,!-!/!1!3!8!<!?!E!I!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!##�#�#�#�#�#�#�#�#�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%&&@&@&B&B&`&c&m&n&�'�'�'�'�)�)�)�)�)�)a�a�c�c�h�h�<�<�>�>��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p�����������������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������l!!,,..:;??~~��������
��0>^^d	e	Z[
JKahnn��56����	DE��Z[]_}~;?~< = G I ....<.<.A.A.L.L.N.O.S.T.00����
�����v�w�ΨϨ/�/�ǩɩ]�_�ߪߪ����P�R�T�W�����������a�a�d�d�����WW		V
W
�
�
:?��UY��GM��AC������8<��KMZ[����AB<>DDFFBC����ACqq��CDp$t$njoj�j�j7k9kDkDk�n�n��������
""''����  9 : B.B.0000A�D�����b�c�
--����  ..�0�0c�c�
�
�e�e�--����  S S { { � � ""....:.;.@.@.].].000000�0�01�2�X�X�c�c�
�
��� 
   * . f i ����:>Ypz|�����������������pj�j�j�jp��/�/�������o�o�Ռ		578;FPY�����������,�0�=�@�I�N�O���������'0Y
'
0
9
@n�n��`eghj�������;GP��o�op���	6::<=?GPY�o�op�����������[]ap�����
68EPl�K�P�Y�^�_����������������������������������DFF+0F����������������������Pz��`�����
�
@j^j`jijnjojDPY��������
�
�
�
Pv6@U`gAkEkPkYk[kakckwk}k�k(*02359<DGHKMPPWW]cflpt'�j�p�|��������������j�j�j�j0coo����������oJoOo�o�o�o�	�	�	�	�	�	�	�	46G@[^^MRu��������H`rx@UX_`

@UW_�����������ͩЩ٩ީߩ����h8jФ����-0>0U459?��ª۪ߪ ^`|������6�@�M�P�Y�\�_� 	9	?	?	����0�S�_�_��-�/�/���ŨΨ٨�+�P7;IMO��������@�w�				 �#$n$p$t$�$C%LP~








5
8
:
?
H
P
X
�����,�0-g-o-p---,_,�����!�#�$�&�*������������,�,�,�,(�(
578<<??����P����
&(:<=?MP]��Pmpt +0;@@DO`lnprs@S 4o��KUppQ	T	���������������� 
 � � *0-0�0�0�� �-�����;;�-�0�F�g�i�{������������O0J#-/�����Ƥ�.�.�.�./�/0000!0)080;04�MN���m�p���o�o�o�oߦ�9�@�� ���������JP�#��1/1�1�1�0�0�0�0�1�1�2�23W3f�o�q��������������� �"�U�U�d�g�A0�0�0�0��2�2�P�R��� x��`l����������������������p���$HJMPVXXZ]`����������������Z]|���-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-��	���� �&�(�.������������������.0/011�122`2~2`�|������������������������
��������������-%-'-'-----����`��GIlq�������������������������������:@[
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
��




D
F
H
J
O
T
c
f


��������������������������
(*9<DFHJMUVXZ]]`cfow������������������������������������(*02359<DGHKMUW\]_cfw�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�








(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�		P	U	c	f		���	��
JMO`j:
 ?AJVoq���Pp�������P���=�@�����������p�t�v���`~������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~�������������������������	�������6�8�<�>�>�@�A�C�D�F�O�1VY�����
��/��++xx�-�-@���.�/�0�m�����$psuwz}��������������&*]afj�� EHMPWYY[[]]_}��������������&!&!e�e�@����E�'AZaz������������%,\bekwy��q q   � � *!+!2!2!N!N!`!�!`,,"�����ʧЧѧӧӧէ٧���0�Z�\�d�f�i���!�:�A�Z���������%�*��@[`{���������������tt~~����@@����d	e	??������56������������   d f p t ~ � � � � !%!'!)!,!1!3!M!O!_!�!�!�!&$@$J$`$�')s+v+�+�+�+.].�/�/00000 00070<0?0�0�0�0�0�0�0�1�1�1�1 2_22�2�2�2X3�3�M�M�!�����0�9�.�.�ϩϩ[�[�j�k�>�?���0�R�T�f�h�k������ �;�@�[�e�p�p�������������37?����������P�������&�)�f�j�z����������������������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�����������q����=��+�0�����������������������������;�@�H�P�Q�`�e���������v�{���������G�P�Y�`������������S�`�m�p�|���������������������������� 8M	M	�	�	M
M
�
�
MM��MM��;
<
M
M
�
�
::����9:44��``DD����--��,�,�ĨĨS�S�����������?
?
FFpp��34��55��MMBB����??��++99=>��44GG��??DE��ABk ~����pwz���������/1VY���������������J`oq��������
/M��������$$((0>@X^^`jp���	9	;	;	=	@	I	L	N	P	X	a	d	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
>
@
Y
\
^
^
f
o
r
t
v
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359==@@GHKL\]_afw��������������������������������(*9==ADXZ]]`afow�����������������������������




:
=
=
?
@
F
H
J
L
N
O
T
V
X
a
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
023?FO[������������������������46688:GIl����������,1188;<?WZ]apu��������������HJMPVXXZ]`����������������Z`|���������146@Q`lnp��������������
 x��������#&)+0138@@Dmpt�������UWWaacdmr������3;;=ACLPjt~�����������������+45;IM������������������ EHMPWYY[[]]_}�������������� 
  ' / _ p q t � � � � � !�!�!&$@$J$`$s+v+�+�+�,�,�,�,%-'-'-----0-g-o-p-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-.].�.�.�.�./�/�/�/0)000?0A0�0�0�01/111�1�1�1�12 2����ƤФ+�@�n�s�s�~����������ʧЧѧӧӧէ٧�����
��$�'�+�0�9�@�w���èΨ٨����%�.�F�R�S�_�|���������������ͩϩ٩ީ�����(�/�0�3�4�@�B�D�K�M�M�P�Y�\�{�}�������������������ªª۪������	���� �&�(�.�0�k�p���������������������m�p���������6�8�<�>�>�@�A�C�D�F���������������0�R�T�f�h�k�p�t�v��������������������������
&(:<=?MP]��37�������������#-JPu�������������'0coz|�������������6@U`g������
578<<?UW��������		9	?	?	�	�	�	�	�	





5
@
H
P
X
`
�
�
�
�
�
59UXrx�����H�����#
0
9
`~������'0EQYp�������7GMRoqruu������������&,,6GPrtv����������.23558=?@����������������(*02359==??ADGHKMPP]c7@AEEG[]]_a��������������������������2;<>>ADPY`l������������ !&&0F.88;;���		/1578==?BDFPY��������29:?FPPWX\�������	
/>>@EPlp�������	0FFPY`eghj�������������5>?AACY������#$n$p$t$�$C%�/�/0/4A4F4DFFh8j@j^j`jijnj�j�j�j�j�j�j�jk/k7kEkPkYk[kakckwk}k�k@n�noJoPo�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|�����������������P�������&�)�d�f�f�j�m��������������A�E�E����������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�����������7�:�m�t�v���������%�*�0�m��,�7�=�@�I�N�O�������������������������������������������������C�K�K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������������;�@�H�P�Q�`�e���������v�{���������G�P�Y�`������������S�`�m�p�|����������������������������ߦ�9�@�� ���������JP�#ko������������K_pp��������0J������#%')-Y[�����	:	:	<	<	A	H	M	M	Q	W	b	c	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	

<
<
A
B
G
H
K
M
Q
Q
p
q
u
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
<<>?ADMMUWbc����������<<>@FHJMUVbc����������������

;
<
>
>
A
D
M
M
W
W
b
c
�
�
�
�
�
�
�
�
�
�
�
�
114:GN������557799q~����������-0279:=>XY^`qt��������]_23RSrs����������
���� "'(229;VVX^``bbels|��4:<<BBks����������������,367��������������  � � �,�,--�-�-*0/0�0�0o�r�t�}�������������%�&�,�,�ĨŨ������&�-�G�Q�������������������)�.�1�2�5�6�C�C�L�L�|�|������������������������������������� �/���������vz





8
:
?
?
�
�
$
'
����FP��8Fppst�������'+-4ss��������/14467>>AA����;<>>@@WWflpt8?BDFF^^����������������������3:==?@��������"%'+/79:00;<>>CC������
38;>GGQVY[����068=??��������16::<=?EGG��������6:@@BB@4@4G4U4�j�j0k6kOoOo�o�o�o�o�����-�0�F�e�e�g�i�n�r�{�����������B�D��6�;�l�u�u������������������!�#�$�&�*�����0�6�����������������D�J� ���OO_`��  * . ` o d1d1�����������������s�z��09AZ__az����������������������tvw{}�������������/1VYY`��������������� in���������JM�������-@[`jp������c	f	o	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfoqq��������������������������������(*9<DFHJMUVXZ]]`cfo����������������������������




D
F
H
J
N
T
W
_
c
f
o
z

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:@NPY���������������������� )557799>GIlq�������IP����������HJMPVXXZ]`����������������Z]_iq������lo������4@S`lnprs��������
 x���� +0;Fmpt������ ^`|���������LPYks��7@IM}���������� EHMPWYY[[]]_}��������������������? @ T T q q   � � � � � � � � !!!!
!!!!!!$!$!&!&!(!(!*!9!<!?!E!I!N!N!`!�!,�,�,�,-%-'-'-----0-g-o-o--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-00!0/0105080<0A0�0�0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф�����+�@�o�t�}�����"�����ʧЧѧӧӧէ٧�'�,�,�@�s���ŨШ٨���������-�0�S�`�|�����ϩ٩����6�@�M�P�Y�`�v�z�ª۪ݪ�������	���� �&�(�.�0�Z�\�i�p�������������������m�p�������(�*�6�8�<�>�>�@�A�C�D�F����]�d�=�P����������� �/�3�4�M�O�q�q�s�s�w�w�y�y�{�{�}�}������!�:�?�?�A�Z�f�����������
&(:<=?MP]��@t��������-JPz���������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	








5
8
:
?
?
`
|
�
�
�
�
�
�
5@U`r��H����
'
0
9
�������''0Pp�����Ffu�������46?DGPsvv��������7>A��������������(*02359;DGHKMPPWW]cflptJPY^a������������@DDPY����+09@F:���		578;CPY��������>GGP�����
68@PYr�����	6::<=?GPY`eghj���������:>BPY�� �#$n$�$C%�/�/0/4@4U4DFFh8j@j^j`jijpj�j�j�j�j�j�j�jk6k@kCkPkYkckwk}k�k@nnoJoOo�o�o�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������-�0�F�e�i�m�r�{�����������B�D��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p��������������������6�;�l�u�u���������������%�*������!�#�$�&�*�0�m������,�0�=�@�I�N�N�������������������������������������K�P�Y�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~������������������������ߦ�9�@�� ���������JP�#��AZaz��������������������ptvw{}�������������/1VYY`����� Jnoq�����������/M���������$$((@X`jp�����	9	=	=	P	P	X	a	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	





(
*
0
2
3
5
6
8
9
Y
\
^
^
r
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359==\]_aqq����������������������(*9==XZ]]`a��������������������




:
=
=
N
N
T
V
_
a
z

�
�
�
�
�
�
�
�
�
�
022@F����������������������@GIl��*??PUZ]aaefnpu������������HJMPVXXZ]`����������������Z������lo������1@Q`lnp������ x������Pmpt���� T��3EL������#MOZ}��������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!9!<!?!E!I!N!N!`!�!,�,�,�,�,�,-%-'-'-----0-g-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-00!0)0105080<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф������*�+�@�n���������"�����ʧЧѧӧӧէ٧�����
��"�@�s����������������
�%�0�F�`�|�����ϩϩ���������(�@�B�D�K�`�v�z�z�~�������������������ªª۪ݪ������	���� �&�(�.�0�Z�\�i�p��������������m�p���������(�*�6�8�<�>�>�@�A�C�D�F����]�d�=�P���������q�q�s�s�w�w�y�y�{�{�}�}����!�:�A�Z�f���������������
&(:<=?MP]��@t����-JPu�������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	






5
`
|
�
�
�
�
�
�
5@U`r��H����
#
����''0Ep�����7qruu����&DDGGPrvv��������+?@������������(*02359==PP]a4GJ_a����������/DD����@F+���		/??AA��������2::PP\�����
.@@r�	0FF`eghj�����3�� �#$n$�$C%�/�/0/4A4F4DFFh8j@j^jpj�j�j�jk/k@kCkckwk}k�k@nnoJoPoPo�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|����������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p�����������������%�*�0�m��,�7�=�N�N���������������������������������C�K�K�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������ߦ�9�@�� ���������JP�#09AZ__az����������������������tvwz}�������������/1VYY`��������������� in���������JM�������-@[`jp������c	f	o	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfoqq��������������������������������(*9<DFHJMUVXZ]]`cfo����������������������������




D
F
H
J
N
T
W
_
c
f
o
z

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:@NPY���������������������� )557799>GIlq�������IP����������HJMPVXXZ]`����������������Z]_iq������lo������4@S`lnprs��������
 x���� +0;Fmpt������ ^`|���������LPYks��7@IM}���������� EHMPWYY[[]]_}��������������������? @ T T q q   � � � � � � � � !!!!
!!!!!!$!$!&!&!(!(!*!9!<!?!E!I!N!N!`!�!,�,�,�,-%-'-'-----0-g-o-o--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-00!0/0105080<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф�����+�@�o�t�}�����"�����ʧЧѧӧӧէ٧�'�,�,�@�s���ŨШ٨���������-�0�S�`�|�����ϩ٩����6�@�M�P�Y�`�v�z�ª۪ݪ�������	���� �&�(�.�0�Z�\�i�p�������������������m�p�������(�*�6�8�<�>�>�@�A�C�D�F����=�P����������� �/�3�4�M�O�p�t�v�����!�:�?�?�A�Z�f�����������
&(:<=?MP]��@t��������-JPz���������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	








5
8
:
?
?
`
|
�
�
�
�
�
�
5@U`r��H����
'
0
9
�������''0Pp�����Ffu�������46?DGPsvv��������7>A��������������(*02359;DGHKMPPWW]cflptJPY^a������������@DDPY����+09@F:���		578;CPY��������>GGP�����
68@PYr�����	6::<=?GPY`eghj���������:>BPY�� �#$n$�$C%�/�/0/4@4U4DFFh8j@j^j`jijpj�j�j�j�j�j�j�jk6k@kCkPkYkckwk}k�k@nnoJoOo�o�o�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������-�0�F�e�i�m�r�{�����������B�D��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p��������������������6�;�l�u�u���������������%�*������!�#�$�&�*�0�m������,�0�=�@�I�N�N�������������������������������������K�P�Y�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~������������������������ߦ�9�@�� ���������JP�#��AZaz��������������������ptvwz}�������������/1VYY`����� Jnoq�����������/M���������$$((@X`jp�����	9	=	=	P	P	X	a	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	





(
*
0
2
3
5
6
8
9
Y
\
^
^
r
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359==\]_aqq����������������������(*9==XZ]]`a��������������������




:
=
=
N
N
T
V
_
a
z

�
�
�
�
�
�
�
�
�
�
023@F����������������������@GIl��*??PUZ]aaefnpu������������HJMPVXXZ]`����������������Z������lo������1@Q`lnp������ x������Pmpt���� T��3EL������#MOZ}��������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!9!<!?!E!I!N!N!`!�!,�,�,�,�,�,-%-'-'-----0-g-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-00!0)0105080<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф������*�+�@�n���������"�����ʧЧѧӧӧէ٧�����
��"�@�s����������������
�%�0�F�`�|�����ϩϩ���������(�@�B�D�K�`�v�z�z�~�������������������ªª۪ݪ������	���� �&�(�.�0�Z�\�i�p��������������m�p���������(�*�6�8�<�>�>�@�A�C�D�F����=�P���������p�t�v���!�:�A�Z�f�����������
&(:<=?MP]��@t����-JPu�������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	






5
`
|
�
�
�
�
�
�
5@U`r��H����
#
����''0Ep�����7qruu����&DDGGPrvv��������+?@������������(*02359==PP]a4GJ_a����������/DD����@F+���		/??AA��������2::PP\�����
.@@r�	0FF`eghj�����3�� �#$n$�$C%�/�/0/4A4F4DFFh8j@j^jpj�j�j�jk/k@kCkckwk}k�k@nnoJoPoPo�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|����������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p�����������������%�*�0�m��,�7�=�N�N���������������������������������C�K�K�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������ߦ�9�@�� ���������JP�#�AZaz�������79������������ "3:TVWYY[\`accefhlooqruu}}����������EEpsvw{}�����������������/1Va���������������������yy}}������ EHMPWYY[[]]_}��������������������&!&!*!+!2!2!N!N!`!!�!�!�$�$,p,r,s,u,v,~,�,�,�,�,�,-%-'-'-----@�m�����"�/�2�o�y�����������������ʧЧѧ֧٧����S�S�p�������!�:�A�Z�O����pz|�������������������@nn�C�nAZ������

  ""$$&&((**,,..0022446699;;==??AACCEEGGIJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxy{{}}������������������������������������������������������������������������������������������

  ""$$&&((**,,..0022:;=>AACFHHJJLLNNEEpprrvv���������������������������������������������������/``bbddffhhjjllnnpprrttvvxxzz||~~����������������������������������������������������������������������������������������������������������������������

  ""$$&&((**,,..1V����������������

  ""$$&&((**,,..0022446688::<<>>@@BBDDFFHHJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxxzz||~~��������������������������������������������������������������������������������������������������������������������������(/8?HMYY[[]]__ho������������������&!&!*!+!2!2!`!o!�!�!�$�$,/,`,`,b,d,g,g,i,i,k,k,m,p,r,r,u,u,~,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l���������������������������������������������������������"�"�$�$�&�&�(�(�*�*�,�,�.�.�2�2�4�4�6�6�8�8�:�:�<�<�>�>�@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l�n�n�y�y�{�{�}�~���������������������������������������������������������������������������������������������������������§§ħǧɧɧЧЧ֧֧اا����p�������!�:�'��pz|���������@n_n�!�raz������		

!!##%%''))++--//11335577::<<>>@@BBDDFFHIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwzz||~���������������������������������������������������������������������������������������������		

##%%''))++--//1133<<?@BBGGIIKKMMOTVWYY[\`accefhlooqruu}}����������EEqqssww{}��������������������������������������0_aacceeggiikkmmooqqssuuwwyy{{}}����������������������������������������������������������������������������������������������������������������������		

!!##%%''))++--//a�����yy}}��		

!!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}}��������������������������������������������������������������������������������������������������������������������� '07@EPW`gp}��������������������������N!N!p!!�!�!�$�$0,_,a,a,e,f,h,h,j,j,l,l,s,s,v,v,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,-%-'-'-----A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m���������������������������������������������������������#�#�%�%�'�'�)�)�+�+�-�-�/�/�3�3�5�5�7�7�9�9�;�;�=�=�?�?�A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m�o�o�z�z�|�|���������������������������������������������������������������������������������������������������ççȧȧʧʧѧѧקק٧٧����S�S�p�������A�Z�(O��������������`nn"�C�saz������		

!!##%%''))++--//11335577::<<>>@@BBDDFFHIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwzz||~�������������������������������������������������������������������������������������������		

##%%''))++--//1133<<?@BBGGIIKKMMOTVWYY[\`accefhlooqruu}}����������EEqqssww{}��������������������������������������0_aacceeggiikkmmooqqssuuwwyy{{}}����������������������������������������������������������������������������������������������������������������������		

!!##%%''))++--//a���������yy}}��		

!!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}}��������������������������������������������������������������������������������������������������������������������� '07@EPW`gp}��������������������������N!N!p!!�!�!�$�$0,_,a,a,e,f,h,h,j,j,l,l,s,s,v,v,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,-%-'-'-----A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m���������������������������������������������������������#�#�%�%�'�'�)�)�+�+�-�-�/�/�3�3�5�5�7�7�9�9�;�;�=�=�?�?�A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m�o�o�z�z�|�|���������������������������������������������������������������������������������������������������ççȧȧʧʧѧѧקק٧٧����S�S�p�������A�Z�(O��������������`nn"�C�aAZ����

  ""$$&&((**,,..0022446699;;==??AACCEEGGJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxy{{}}������������������������������������������������������������������������������������������

  ""$$&&((**,,..0022:;=>AACFHHJJLLNNpprrvv���������������������������������������������/``bbddffhhjjllnnpprrttvvxxzz||~~����������������������������������������������������������������������������������������������������������������������

  ""$$&&((**,,..1V������������

  ""$$&&((**,,..0022446688::<<>>@@BBDDFFHHJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxxzz||~~������������������������������������������������������������������������������������������������������������������������(/8?HMYY[[]]__ho����������������&!&!*!+!2!2!`!o!�!�!�$�$,/,`,`,b,d,g,g,i,i,k,k,m,p,r,r,u,u,~,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l���������������������������������������������������������"�"�$�$�&�&�(�(�*�*�,�,�.�.�2�2�4�4�6�6�8�8�:�:�<�<�>�>�@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l�n�n�y�y�{�{�}�~���������������������������������������������������������������������������������������������������������§§ħǧɧɧЧЧ֧֧اا����!�:�'��pz|���������@n_n�!��''..::^^``�����������otuzz������YY__������������@@K_pp������0J��������-Y[�������	:	:	<	<	A	H	M	M	Q	W	b	c	q	q	�	�	�	�	�	�	�	�	�	�	�	�	

<
<
A
B
G
H
K
M
Q
Q
p
q
u
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
<<??ADMMUVbc������<<>@FHJMUVbc������������

;
<
A
D
M
M
b
c
�
�
�
�
�
�
�
�
114:FN��������557799q~����������-0279:=>XY^`qt����������]_23RSrs������������CC���� "'(229;VVX^``bbels|����446:<<BBks����������������,367x}������������,jxx��������������    $ $ ' ' * . ` d f o q q   � � � � |,},�,�,o-o---�-�-/./.00*0-01050;0;0�0�0�0�0��������o�r�t�}����������!�p�p�����������������%�&�,�,�ĨŨ������&�-�G�Q�����������������ϩϩ��)�.�1�2�5�6�C�C�L�L�p�p�|�|���������������������ݪݪ��������[�_�i�k���������������� �/�R�R�U�U�����������>�>�@�@�p�p���������������vz������





8
:
?
?
�
�
$
'
����FP��8Fppst�����������'+-4ss��������/14467>>AA����;<@@flpt8?BDFF^^����������������3:==?@��������"%'+/79:;<>>CC������
38;>GGQVY[����068=??��������16::<=?EGG��������6:@@BB04@4G4U4�j�j0k6k@kCkOoOo�o�o�o�o�o�o�������������������-�0�F�g�i�s�����������B�D��6�;�l�u�u������������������!�#�$�&�*�0�m�����0�=�����������������D�K����� ��AZaz����������������������EEpsvwz}�������������/1V`���������������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!-!/!4!9!9!<!?!E!I!N!N!`!!�!�!�$�$,�,�,�,�,�,-%-'-'-----@�m�����"���������ʧЧѧӧӧէ٧�������0�Z�\�i�p�������!�:�A�Z�O����pz|���������������������������@nn�T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p����������������	���%�*�0�m��C�0�I�P�i�p����++<>^^||~~����������������  2 4 @ @ D D R R a d z ~ � � � � � � � � � � !!!!
!!!!!!$!$!(!)!,!-!/!1!3!8!<!I!K!K!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�"## #!#|#|#�#�#�#�#�#�#�#�#�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%&&@&@&B&B&`&c&m&o&�'�')�*0+D+G+L+)�)�a�f�h�h�����<�<�>�>�\�\�^�^������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~�������������������������  ���� 
 / / _ _ 00) ) ( (   ���� 
 ( ) / / _ _ 00����������������������	�	pp����O
O
y
y
446688������������mm@@��ajt|!!!!!	!!!!!!#!%!%!'!'!)!)!.!.!:!;!J!J!L!M!O!O!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!####"#(#+#{#}#�#�#�#�#&$@$J$�$�$%�%�%�%�%�%&n&p&g'�'�'(�(+/+E+F+M+s+v+�+�+�+�,�,P.Q.�.�.�.�./�/�/�/0000 0 06070>0?0�1�1�1�1�1�122*2G2P2P2`22�2�2�2�3�M�M��Ƥ(�+�6�7�9�9�w�y�@�O�����������������7?y���������wx�
�
??����<k?kEkEk����P�������&�)�d�j�l��������������A�E�E��V����7�:�m�t�v�������O�O�����.�.��+�0�������������������
�������;�@�H�P�Q�`�e������������v�{���������G�P�Y�`������������S�`�m�p�|�������������������������@++<>||~~����������D D R R z | � � !!@!D!K!K!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�" #!#|#|#�#�#�#�#�%�%�%�%�%�%o&o&�'�'�'�'�'�')�)�)�)�)�)�)�*0+D+G+L+)�)�b�b�d�f�����\�\�^�^�������������������5�5�O�O�o�o�����������������^^``������������������uu�����������������0�0�� �!�����[�[�j�k����>�>�@�@�������$$�������	�	�	�	�
�
��??��� � 8�8�����i�i������������������$$++<>^^``||~~��������������������������uu���������������������	�	�	�	�
�
pp��O
O
y
y
??446688������������mm��@@��ajt|������������D D R R z | � � � � !!!!!	!!!!!!#!%!%!'!'!)!)!.!.!:!;!@!D!J!M!O!O!�!�!�!##(#+#&$@$J$�$�$%g'�'�'�'�'�'�)�)�)�)�)�)s+v+�+�+�+�,�,P.Q.�.�.�.�./�/�/�/0000 0 06070>0?0�0�0�1�1�1�1�1�122*2G2P2P2`22�2�2�2�3�M�M��Ƥ�� �!�����(�+�6�9�w�y�[�[�j�k�)�)����@�O�������b�b�d�f�i�i�������>�>�@�@�\�\�^�^���������7?y���������wx�
�
??��<k?kEkEk����P�������&�)�d�j�l��������������A�E�E��V���������������5�5�O�O�o�o����������������7�:�m�t�v�������O�O�������������.�.������+�0�������������������
�������;�@�H�P�Q�`�e���������v�{���������G�P�Y�`������������S�`�m�p�|�������������������������O(([[{{::<<��    E E } } � � ##
#
#)#)#h'h'j'j'l'l'n'n'p'p'r'r't't'�'�'�'�'�'�'�'�'�'�'�'�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)".".$.$.&.&.(.(.B.B.U.U.W.W.Y.Y.[.[.00
0
00000000000000000?�?���5�5�7�7�9�9�;�;�=�=�?�?�A�A�C�C�G�G�Y�Y�[�[�]�]���;�;�[�[�_�_�b�b��!#%'**,,./:;?@\\��������~~��Z_����������	

jm��
��0>^^d	e	p	p	�	�	v
v
�
�
ww���
�
OOZ[������JO��`hnn��56����
DE����Z`}~��;?~����    ' 0 8 ; > A C G Q S S U ^ �,�,�,�,p-p-..............*...0.9.<.?.A.A.C.O.R.T.00=0=0�0�0����
��s�s�~�~����t�w�ΨϨ��������.�/�_�_���ͩީߩ\�_�ުߪ��������0�0�E�F�I�L�P�R�T�W�_�a�h�h�j�k�����
�
�������� �<�<�a�a�d�e�����ooWW		?	?	P
X


�
�
9?��UY��GM����@Ctu��������8=��KOZ[]]����AC`l��<>;;DF��?F����	AEpq��CO��p$t$�/�/njoj�j�j7k;kDkDk�n�n�o�o��������^�_���      9 9 ....	.	..... . .
��    : : ....
.
.
.
...!.!.L))]]}};;==��F F ~ ~ � � 	#	###*#*#i'i'k'k'm'm'o'o'q'q's's'u'u'�'�'�'�'�'�'�'�'�'�'�'�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)#.#.%.%.'.'.).).V.V.X.X.Z.Z.\.\.	0	000
0
000000000000000>�>���6�6�8�8�:�:�<�<�>�>�@�@�B�B�D�D�H�H�Z�Z�\�\�^�^�	�	�=�=�]�]�`�`�c�c�--����  ....:.;.@.@.].].000000�0�01�2�X�X�c�c�
�
���__? @ T T 3�4�M�O�?�?�H�������	�	rw��x~X
^
p
x
*3i|����p p t y � � P!_!�!�!`$�$�$�$v'�'�,�,�1�1 2)2H2O2Q2_2�2�2�2�20�5�3ux���� #X_y����		�	�	�	�	�	�	@
H
}
~
�
�
�
�
X_x����`~&QT��Re��:;��Zl��[kak�n�n��������`�x�����q������������-�/�=�����`!�!�!�!00!0)080:0��@tAAJJ��$n$�09������`i����f	o	�	�	�	�	f
o
�
�
forw��fox~��X
^
f
x
�
�
PY�� 3@I��i|������FO������PY��@IPYp p t y � � P!�!�!�!`$�$�$�$v'�'�,�,00!0)080:0�1�1 2)2H2O2Q2_2�2�2�2�2 �)���0�5�Ш٨�	�Щ٩���P�Y������3@x���� #AAJJ����X_y����		�	�	�	�	�	�	@
H
}
~
�
�
�
�
X_x����0
9
`~&QT��Ro��6?������PY��PY��0;��PYPlPY��PY��$n$`jij�j�jPkYk[kak�n�n��������`�x�����@�I�������������P�Y�q������������-�/�=������Zo������������K_pp��������0J������#%')-Y[�����	:	:	<	<	A	H	M	M	Q	W	b	c	�	�	�	�	�	�	�	�	�	�	�	�	

<
<
A
B
G
H
K
M
Q
Q
p
q
u
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
<<??ADMMUVbc������<<>@FHJMUVbc������������

;
<
A
D
M
M
b
c
�
�
�
�
�
�
�
�
114:GN������557799q~����������-0279:=>XY^`qt��������]_23RSrs����������
���� "'(229;VVX^``bbels|����446:<<BBks����������������,367��������������� � � � � � �,�,--�-�-*0-0�0�0o�o�t�}�������������%�&�,�,�ĨŨ������&�-�G�Q�������������������)�.�1�2�5�6�C�C�L�L�|�|������������������������������������� �/�����vz





8
:
?
?
�
�
$
'
����FP��8Fppst�������'+-4ss��������/14467>>AA����;<@@flpt8?BDFF^^����������������3:==?@��������"%'+/79:;<>>CC������
38;>GGQVY[����068=??��������16::<=?EGG��������6:@@BB@4@4G4U4�j�j0k6kOoOo�o�o�o�o�����-�0�F�g�i�{�����������B�D��6�;�l�u�u������������������!�#�$�&�*�����0�6�����������������D�J������� � � � p�r��		;	;	>	@	I	L	N	O	�	�	�	�	�	�	�	�	�	�	

>
@
�
�
�
�
�
�
�
�
>>@@GHKLWW����������AD��������������

>
@
F
H
J
L
W
W
�
�
�
�
�
�
�
�
>?+,1188;<VWbdgm��������44������#&)+0138UUWWaacdmr55;;=ACD����������������$+45����.0/0#�$�'�'�������èR�S�����������������/�0�3�4�M�M�{�{�}�}�����������������������,,EF��������,.2355��>?ADGHKMWWbc57@AEE��������������02;<>>������ !&&,.880578==@@BB������99WX��//>>��������������45>?AAQo�o�o�oe�f�m�r�6o������������K_pp��������0J������#%')-Y[�����	:	<	>	O	Q	W	b	c	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	

<
<
>
B
G
H
K
M
Q
Q
p
q
u
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
<<>DGHKMUWbc����������<<>DFHJMUVbc����������������

;
<
>
D
F
H
J
M
W
W
b
c
�
�
�
�
�
�
�
�
�
�
�
�
114:GN������557799>?q���������+>VY^`bdgmqt������]_24RSrs����
���� +0;U^`|��4Dks������$7������������� � �,�,--�-�-*0/0�0�0o�r�t�}�������������#�'�,�,�������Ũ������&�-�G�S�����������)�6�C�C�L�M�{�}����������������������������������� �/�����vz





8
:
?
?
�
�
$
'
����FP��8Fppst�����'4EFss��������,7>>AA��;<>DGHKMWWbcflpt5F^^��������0@��+,:0578;>@@BC������
39;>GGQ[��/68?����16::<=?EGG��������4:>B@4@4G4U4�j�j0k6kOoOoQo�o�o�o�o�o�o�o�����-�0�F�e�i�m�r�{�����������B�D��6�;�l�u�u������������������!�#�$�&�*�����0�6�����������������D�J���AZ����

  ""$$&&((**,,..0022446699;;==??AACCEEGGJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxy{{}}������������������������������������������������������������������������������������������

  ""$$&&((**,,..0022:;=>AACFHHJJLLNNpprrvv�����������������������������������������������/``bbddffhhjjllnnpprrttvvxxzz||~~����������������������������������������������������������������������������������������������������������������������

  ""$$&&((**,,..1V������������

  ""$$&&((**,,..0022446688::<<>>@@BBDDFFHHJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxxzz||~~������������������������������������������������������������������������������������������������������������������������(/8?HMYY[[]]__ho����������!!!!!
!!!!!!!$!$!&!&!(!(!*!-!0!3!>!?!E!E!�!�!,/,`,`,b,d,g,g,i,i,k,k,m,p,r,r,u,u,~,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l���������������������������������������������������������"�"�$�$�&�&�(�(�*�*�,�,�.�.�2�2�4�4�6�6�8�8�:�:�<�<�>�>�@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l�n�n�y�y�{�{�}�~���������������������������������������������������������������������������������������������������������§§ħǧɧɧЧЧ֧֧اا����!�:�'��pz|���������@n_n��4�M�h����������������������������������
�
����8�9�;�>�@�D�F�F�J�P�l������������!�<�U�p������������4�V�n����������!�
����������������������������������� ?AJnoq���������/M�����@X`jp�����	9	=	=	P	P	X	a	r	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	





(
*
0
2
3
5
6
8
9
Y
\
^
^
r
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359==\]_aqq����������������������(*9==XZ]]`a��������������������




:
=
=
N
N
T
V
_
a
z

�
�
�
�
�
�
�
�
�
�
023@E��������������������@GIl��*??PUZ]aaefnpu���HJMPVXXZ]`����������������Z��lo������1@Q`lnp���� BDx��������Pmpt���� T3EL������#MOZw��������5!8!0-g-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-00<0<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN����������*�+�n�n������������������
��"�@�s����������������
�%�0�F�`�|��������������(�@�B�D�K�`�o�q�v�z�z�~�������������������ªª۪ܪ������	���� �&�(�.����������������m�p�����(�*�6�8�<�>�>�@�A�C�D�F����=�P���������p�t�v���f�o�q���������������
&(:<=?MP]������-@BIPu������P�'0c6@U`g
578<<?U`v������		 	9	�	�	�	�	






5
`
|
�
�
�
�
�
�
5@U`r��H
#
����''0Ep�����7qruu����&DDGGPrvv��������+?@������������(*02359==PP]a4GJ_a����������/DD����@F+�		/??AA��������2::PP\�����
.@@r�	0FF`eghj�����3�� �#�$C%�/�/0/4A4F4DFFh8j@j^jpj�j�j�jk/kckwk}k�koJoPoPop���Ռ���"�2�2�P�R�U�U�d�g�p����j�p�|���������
�
��,�N�N������������������������������������!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������ߦ�9�@�� ���������JP�#G����������ttzzYY@@������$$((��q	q	FF������CC��x},jxx��q q   � � |,},o-o-/./.001050;0;0�0�0�0�0����������������p�p�����������ϩϩ��p�p�ݪݪ��\�_�i�i�p�p�����������@kCk�o�o�o�o�o�o����������0�m�7�=�����K�K��az������		

!!##%%''))++--//11335578::<<>>@@BBDDFFHIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwzz||~�������������������������������������������������������������������������������������������		

!!##%%''))++--//1139<<?@BBGGIIKKMMO���qqssww{}��������������������������������������0_aacceeggiikkmmooqqssuuwwyy{{}}����������������������������������������������������������������������������������������������������������������������		

!!##%%''))++--//`���������+kwy�		

!!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}}����������������������������������������������������������������������������������������������������������������������� '07@EPW`gp}��������������������������
!
!!!!!/!/!4!4!9!9!<!=!F!I!N!N!�!�!0,_,a,a,e,f,h,h,j,j,l,l,q,q,s,t,v,{,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,-%-'-'-----A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m���������������������������������������������������������#�#�%�%�'�'�)�)�+�+�-�-�/�1�3�3�5�5�7�7�9�9�;�;�=�=�?�?�A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m�o�o�q�x�z�z�|�|�����������������������������������������������������������������������������������������������������������ççȧȧʧʧѧѧӧӧէէקק٧٧��������0�Z�`�h�p�������A�Z�(O��������������`nn�3�N�T�V�g�������������������������7�R�k������������"�;�V�o������������������6�N�P�U�p��������������������	���%�*�"�C��AZaz��������������psvw{}�������������/1V`���������������������+kwy� EHMPWYY[[]]_}��������������������!!!!
!!!!!!$!$!&!&!(!(!*!-!/!4!9!9!<!?!E!I!N!N!�!�!,{,~,�,�,�,�,�,-%-'-'-----@�m�����"�o�q���������ʧЧѧӧӧէ٧��������0�Z�`�h�p�������!�:�A�Z�O����pz|�������������������@nn�T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p����������������	���%�*��C��AZaz��������������������ptvwz}�������������/1VYY`����� Jnoq�����������/M���������$$((@X`jp�����	9	=	=	P	P	X	a	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	





(
*
0
2
3
5
6
8
9
Y
\
^
^
r
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359==\]_aqq����������������������(*9==XZ]]`a��������������������




:
=
=
N
N
T
V
_
a
z

�
�
�
�
�
�
�
�
�
�
023@F����������������������@GIl��*??PUZ]aaefnpu������������HJMPVXXZ]`����������������Z������lo������1@Q`lnp������ x��������Pmpt���� T��3EL������#MOZ}��������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!-!/!9!<!?!E!I!N!N!�!�!,�,�,�,�,�,-%-'-'-----0-g-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-/./.001050;0<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф������*�+�@�n���������"�����ʧЧѧӧӧէ٧�����
��"�@�s����������������
�%�0�F�`�|�����ϩϩ���������(�@�B�D�K�`�v�z�z�~�������������������ªª۪ݪ������	���� �&�(�.�0�Z�\�i�p��������������m�p���������(�*�6�8�<�>�>�@�A�C�D�F����=�P���������p�t�v���!�:�A�Z�f�����������
&(:<=?MP]������-@BIPu�����������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	






5
`
|
�
�
�
�
�
�
5@U`r��H����
#
����''0Ep�����7qruu����&DDGGPrvv��������+?@������������(*02359==PP]a4GJ_a����������/DD����@F+���		/??AA��������2::PP\�����
.@@r�	0FF`eghj�����3�� �#�$C%�/�/0/4A4F4DFFh8j@j^jpj�j�j�jk/k@kCkckwk}k�k@nnoJoPoPo�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|����������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p�����������������%�*�0�m��,�7�=�N�N���������������������������������C�K�K�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������ߦ�9�@�� ���������JP�#�����������xy��������00WX����������KL����./??\]__ko�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	






)
)
1
1
4
4
7
7
:
;
=
=
C
F
I
J
N
P
R
X
]
]
_
e
w
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�

))1144:;EFIJNTX[^^dex���������������������������������

)):;EEIINTWW[\^_depv��������������������������





E
E
I
I
P
S
d
e
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
;>\�����������������������HHmp��������������IINOWWYY^_����������������[\}����������7?T_mmqqt������y����,/<?ACnou������__}~��������MO��8:JL��������FGNOXXZZ\\^^~��������������e e r s � � � � � � � � �!�!'$?$K$_$t+u+�+�+�,�,&-&-(-,-.-/-h-n-q-~-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-^..�.�.�.�.�/�/�/�/@0@0�0�0110101�1�1�1�122����ǤϤ,�?�����˧ϧҧҧԧԧڧ�-�/�:�?�x��ƨͨڨߨT�^�}��ΩΩکݩ����7�?�N�O�Z�[�êڪ���������'�'�/�/�l�o�������������������n�o��������7�7�=�=�?�?�B�B�E�E�������������S�S�g�g�l�o�u�u����������������������������'';;>>NO^��46�������������$,KO{��������������(/dn{{��������������7?V_h������		669;=>VV��������		:	>	@		�	�	�	�	







6
7
;
>
I
O
Y
_
�
�
�
�
�
�
68VWsw������I����(
/
:
_������(/Zo������NQv~��������55HOw����B��������������
))1144::EFIJNOQVX\demou�\\b�������EOZ_m����,/G�<���
669:GOZ�������HO����
�		77FOmo������

79;;>>HOZ_ffii����������;=Z������#�#o$o$u$$D%�/�/�/V4�CGF�g9j?j_j_jjjmj�j�j�j�j�j�j�j�jFkOkZkZkbkbkxk|k�k?n�n�nKoNo�o�o�o�o�o�o�o�o����֌��	������������#�1�3�O�S�T�V�c�h�o�����k�o�}��������������.�/�G�O���������'�(�����F�����������W�_�y���U�U�����������������������������������������:�:�?�?�E�E�G�I�Q�Q����������������������$�+�������"�"�%�%�+�/�n�������-�/�>�?�J�M�P������������������������������������������L�O�Z�]�`�p����>����� � �#�#�%�&�(�(�3�3�8�8�:�:�<�A�C�F�H�H�J�J�L�L�P�P�S�S�U�V�X�X�Z�Z�\�\�^�^�`�`�c�c�e�f�k�k�s�s�x�x�}�}���������������������������,�/���������������������������<�?�I�O�R�_�f�����������w�z����������H�O�Z�_�������������T�_�n�o�}���������������������������������:�?��������������KO�#���������������������  * . ` d f o ������������04?4����s�z� ����xy��������00WX�����������KL����./??\]__ko�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	






)
)
1
1
4
4
7
7
:
;
=
=
C
F
I
J
N
P
R
X
]
]
_
e
w
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�

))1144:;EFIJNTX[^^dex���������������������������������

)):;EEIINTWW[\^_depv��������������������������





E
E
I
I
P
S
d
e
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
;>\�����������������������HHmp��������������IINOWWYY^_����������������[\}����������7?T_mmqqt������y����,/<?ACnou������__}~��������MO��8:JL��������FGNOXXZZ\\^^~��������������  * . ` o r s � � � � � � � � �!�!'$?$K$_$t+u+�+�+�,�,&-&-(-,-.-/-h-n-q-~-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-^..�.�.�.�.�/�/�/�/@0@0�0�0110101�1�1�1�122����ǤϤ,�?�����˧ϧҧҧԧԧڧ�-�/�:�?�x��ƨͨڨߨT�^�}��ΩΩکݩ����7�?�N�O�Z�[�êڪ���������'�'�/�/�l�o�������������������n�o��������7�7�=�=�?�?�B�B�E�E�������������S�S�g�g�l�o�u�u�������������������������'';;>>NO^��46�������������$,KO{��������������(/dn{{��������������7?V_h������		669;=>VV��������		:	>	@		�	�	�	�	







6
7
;
>
I
O
Y
_
�
�
�
�
�
�
68VWsw������I����(
/
:
_������(/Zo������NQv~��������55HOw����B��������������
))1144::EFIJNOQVX\demou�\\b�������EOZ_m����,/G�<���
669:GOZ�������HO����
�		77FOmo������

79;;>>HOZ_ffii����������;=Z������#�#o$o$u$$D%�/�/�/04?4V4�CGF�g9j?j_j_jjjmj�j�j�j�j�j�j�j�jFkOkZkZkbkbkxk|k�k?n�n�nKoNo�o�o�o�o�o�o�o�o����֌��	������������#�1�3�O�S�T�V�c�h�o�����k�o�}��������������.�/�G�O���������'�(�s�z�����F�����������W�_�y���U�U�����������������������������������������:�:�?�?�E�E�G�I�Q�Q����������������������$�+�������"�"�%�%�+�/�n�������-�/�>�?�J�M�P������������������������������������������L�O�Z�]�`�p����>����� � �#�#�%�&�(�(�3�3�8�8�:�:�<�A�C�F�H�H�J�J�L�L�P�P�S�S�U�V�X�X�Z�Z�\�\�^�^�`�`�c�c�e�f�k�k�s�s�x�x�}�}���������������������������,�/���������������������������<�?�I�O�R�_�f�����������w�z����������H�O�Z�_�������������T�_�n�o�}���������������������������������:�?��������������KO�#�����wz�������/1VY���������
JM����-0>@[^^`jp�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfw��������������������������������(*9<DFHJMUVXZ]]`cfow�������������������������




D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|���������6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������LP~���7;IM������� EHMPWYY[[]]_}�������������� d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-].�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�12 2����ƤФ+�@����ʧЧѧӧӧէ٧�,�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�k�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F������������ �R�T�f�h�k�p�t�v��������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coz|�������������6@U`g������
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~�������'0Yp�����MRu�������46GPv����A��������������(*02359;DGHKMPPWW]cflpt[]a��������DPY`l����+0F;���		578;FPY������GP���	
68EPlp�����	6::<=?GPY`eghj���������:>Y������#$n$p$t$�$C%�/�/0U4DFFh8j@j^j`jijnj�j�j�j�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������-�0�F�P�������&�)����E����������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������������%�*������!�#�$�&�*�0�m������,�0�=�@�I�N�O�����������������������������������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������������;�@�H�P�Q�`�e���������v�{���������G�P�Y�`������������S�`�m�p�|����������������������������ߦ�9�@�� ���������JP�# ��������!#%*,/:;?@[]__{{}}������������~~��Z_������������	

jm��
��0>^^d	e	p	p	�	�	v
v
�
�
ww���
�
OOZ[:=������JO��`hnn����56����
DE����Z`}~��;?~���� ' 0 C E Q S ^ } ~ � � ##)#*#h'u'�'�'�'�'�)�)�)�)�)�)�,�,�,�,p-p-...0.O.R.].0000000000=0=0�0�0�0�0����
��s�s�~�~����t�w�ΨϨ��������.�/�_�_���ͩީߩ\�_�ުߪ����>�?���0�R�T�a�c�c�h�h�j�k����
������ �;�=�?�?�[�[�]�]�_�e�����ooWW		?	?	P
X


�
�
9?����UY��GM����@Ctu��������8=��KOZ[]]����AC`l��<>;;DF��?F����	AEpq��CO��p$t$�/�/njoj�j�j7k;kDkDk�n�n�o�o��������^�_�09AZaz��������������������EEptvwz}�������������/1VYY`��������������� WYin���������?M�������,@X`jp����������;	=	L	N	P	U	c	f	o	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
>
B
G
H
K
L
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359=DGHKLVW\]_cfoqq��������������������������������(*9=DFHJLUVXZ]]`cfo����������������������������




:
=
D
F
H
J
L
N
N
T
W
_
c
f
o
z

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:@FMMPY������������������������ )@GIlq�����688;IP����������HJMPVXXZ]`����������������Z������lo������3@S`lnprs���������� x���� +08Fmpt������ ^at����������35CELPY������6@IM}����������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!-!/!9!<!?!E!I!N!N!`!�!�$�$,�,�,�,�,�,-%-'-'-----0-g-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-/./.00!0)0105080<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф�����+�@�n�t�{�����"�����ʧЧѧӧӧէ٧���'�@�s���èŨŨШ٨���������*�0�R�`�|���������ϩ٩����6�@�M�P�Y�`�v�z�������ªª۪ݪ�������	���� �&�(�.�0�Z�\�i�p�����������������m�p�������(�*�6�8�<�>�>�@�A�C�D�F����=�P���������p�t�v�����!�:�A�Z�f�����������
&(:<=?MP]��@t����-JPz���������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	








5
`
|
�
�
�
�
�
�
5@U`r��H����
'
0
9
������''0Ep�����Efoqu��������26?DGPrvv��������477>A��������������(*02359=DGHKLPPWW]cACEGJPY_a��������������>@@DDPY������*09@F8���		578;<?BPY����������25>P�����
68>@@PYr�����	6::<=?ACCFGPY`eghj�����������:>@PY�� �#$n$�$C%�/�/0/4A4F4DFFh8j@j^j`jijpj�j�j�j�j�jk/k@kCkPkYkckwk}k�k@nnoJoOo�o�o�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p���������������������%�*������!�#�$�&�*�0�m������,�7�=�@�I�N�N�����������������������������������������C�G�G�K�K�P�Y�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������0�I�P�i�p������ߦ�9�@�� ���������JP�#09AZ__az��������������������tvwz}�������������/1VYY`��������������� in���������JM�������-@[`jp������c	f	o	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfoqq��������������������������������(*9<DFHJMUVXZ]]`cfo����������������������������




D
F
H
J
N
T
W
_
c
f
o
z

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:@NPY���������������������� )557799>GIlq�������IP����������HJMPVXXZ]`����������������Z]_������lo������4@S`lnprs��������
 x���� +0;Fmpt������ ^`|�������LPYks��7@IM}���������� EHMPWYY[[]]_}��������������������? @ T T q q   � � � � !!!!
!!!!!!$!$!&!&!(!(!*!-!/!9!<!?!E!I!N!N!`!�!�$�$,�,�,�,-%-'-'-----0-g-o-o--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-/./.00!0/0105080<0A0�0�0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф�����+�@�r�t�}�����"�����ʧЧѧӧӧէ٧�'�,�,�@�s���ŨШ٨���������-�0�S�`�|�����ϩ٩����6�@�M�P�Y�`�v�z�ª۪ݪ�������	���� �&�(�.�0�Z�\�i�p�������������������m�p�������(�*�6�8�<�>�>�@�A�C�D�F����=�P����������� �/�3�4�M�O�p�t�v�����!�:�?�?�A�Z�f�����������
&(:<=?MP]��@t��������-JPz���������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	








5
8
:
?
?
`
|
�
�
�
�
�
�
5@U`r��H����
'
0
9
�������''0Pp�����Ffu�������46?DGPsvv��������7>A��������������(*02359;DGHKMPPWW]cflptJPY^a������������@DDPY����+09@F:���		578;CPY��������>GGP�����
68@PYr�����	6::<=?GPY`eghj���������:>BPY�� �#$n$�$C%�/�/0/4@4U4DFFh8j@j^j`jijpj�j�j�j�j�j�j�jk6k@kCkPkYkckwk}k�k@nnoJoOo�o�o�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������-�0�F�e�i�m�r�{�����������B�D��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p��������������������6�;�l�u�u���������������%�*������!�#�$�&�*�0�m������,�0�=�@�I�N�N�������������������������������������K�P�Y�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������0�I�P�i�p������ߦ�9�@�� ���������JP�#�09AFaf�AZ����

  ""$$&&((**,,..0022446699;;==??AACCEEGGJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxy{{}}������������������������������������������������������������������������������������������

  ""$$&&((**,,..0022:;=>AACFHHJJLLNNpprrvv�����������������������������������������������/``bbddffhhjjllnnpprrttvvxxzz||~~����������������������������������������������������������������������������������������������������������������������

  ""$$&&((**,,..1V������������

  ""$$&&((**,,..0022446688::<<>>@@BBDDFFHHJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxxzz||~~������������������������������������������������������������������������������������������������������������������������(/8?HMYY[[]]__ho����������!!!!!
!!!!!!!$!$!&!&!(!(!*!-!0!3!>!?!E!E!`!o!�!�!�$�$,/,`,`,b,d,g,g,i,i,k,k,m,p,r,r,u,u,~,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l���������������������������������������������������������"�"�$�$�&�&�(�(�*�*�,�,�.�.�2�2�4�4�6�6�8�8�:�:�<�<�>�>�@�@�B�B�D�D�F�F�H�H�J�J�L�L�N�N�P�P�R�R�T�T�V�V�X�X�Z�Z�\�\�^�^�`�`�b�b�d�d�f�f�h�h�j�j�l�l�n�n�y�y�{�{�}�~���������������������������������������������������������������������������������������������������������§§ħǧɧɧЧЧ֧֧اا����!�:�'��pz|���������@n_n��4�M�h����������������������������������
�
����8�9�;�>�@�D�F�F�J�P�l������������!�<�U�p������������4�V�n����������!�0�I�P�i�p���
	
  ������ 
 ( ) / / _ _ 00�!/:@[`{~������������~~��Z_������������	

jm��
��0>^^d	e	p	p	�	�	v
v
�
�
ww���
�
OOZ[:=������JO��`hnn����56����
DE����Z`}~��;?~���� ' 0 C E Q S ^ } ~ � � ##)#*#h'u'�'�'�'�'�)�)�)�)�)�)�,�,�,�,p-p-...0.O.R.].0000000000=0=0�0�0�0�0����
��s�s�~�~����t�w�ΨϨ��������.�/�_�_���ͩީߩ\�_�ުߪ����>�?���0�R�T�a�c�c�h�h�j�k����
������ �;�=�?�?�[�[�]�]�_�e�����ooWW		?	?	P
X


�
�
9?����UY��GM����@Ctu��������8=��KOZ[]]����AC`l��<>;;DF��?F����	AEpq��CO��p$t$�/�/njoj�j�j7k;kDkDk�n�n�o�o��������^�_�� ~�wz�������/1VY���������
JM����-0>@[^^`jp�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfw��������������������������������(*9<DFHJMUVXZ]]`cfow�������������������������




D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|���������6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������LP~���7;IM������� EHMPWYY[[]]_}�������������� ' * d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-].�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�12 2����ƤФ+�@����ʧЧѧӧӧէ٧�,�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�k�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F������������ �R�T�f�h�k�p�t�v��������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coz|�������������6@U`g������
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~�������'0Yp�����MRu�������46GPv����A��������������(*02359;DGHKMPPWW]cflpt[]a��������DPY`l����+0F;���		578;FPY������GP���	
68EPlp�����	6::<=?GPY`eghj���������:>Y������#$n$p$t$�$C%�/�/0U4DFFh8j@j^j`jijnj�j�j�j�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������-�0�F�P�������&�)����E����������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������������%�*������!�#�$�&�*�0�m������,�0�=�@�I�N�O�����������������������������������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������������;�@�H�P�Q�`�e���������v�{���������G�P�Y�`������������S�`�m�p�|����������������������������ߦ�9�@�� ���������JP�# ������az����������		

!!##%%''))++--//11335578::<<>>@@BBDDFFHIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwzz||~�������������������������������������������������������������������������������������������		

!!##%%''))++--//1139<<?@BBGGIIKKMMO�������EEqqsswwz}��������������������������������������0_aacceeggiikkmmooqqssuuwwyy{{}}����������������������������������������������������������������������������������������������������������������������		

!!##%%''))++--//`����������		

!!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}}����������������������������������������������������������������������������������������������������������������������� '07@EPW`gp}��������������������������q q   � � 
!
!!!!!/!/!4!4!9!9!<!=!F!I!N!N!p!!�!�!�$�$0,_,a,a,e,f,h,h,j,j,l,l,q,q,s,t,v,},�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,�,-%-'-'-----A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m���������������������������������������������������������#�#�%�%�'�'�)�)�+�+�-�-�/�1�3�3�5�5�7�7�9�9�;�;�=�=�?�?�A�A�C�C�E�E�G�G�I�I�K�K�M�M�O�O�Q�Q�S�S�U�U�W�W�Y�Y�[�[�]�]�_�_�a�a�c�c�e�e�g�g�i�i�k�k�m�m�o�x�z�z�|�|�����������������������������������������������������������������������������������������������������������ççȧȧʧʧѧѧӧӧէէקק٧٧����������0�Z�\�i�p�������A�Z�(O����������������������`nn�3�N�T�V�g�������������������������7�R�k������������"�;�V�o������������������6�N�P�U�p��������������������	���%�*�0�m�"�C��!~�wz�������/1VY���������
JM����-0>@[^^`jp�����	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
<
<
>
B
G
H
K
M
Q
Q
Y
\
^
^
f
v
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359<DGHKMUW\]_cfw��������������������������������(*9<DFHJMUVXZ]]`cfow�������������������������




D
F
H
J
O
T
c
f

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:?[����������������������GIlq�������������HJMPVXXZ]`����������������Z]|����������6@S`lnprs������ x���� +0;@@Dmpt�������^`|�������LP~���7;IM������� EHMPWYY[[]]_}�������������� ' * . 0 ^ ` d f q t � � � � � � � !�!�!&$@$J$`$s+v+�+�+�,�,%-'-'-----0-g-o-p--�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-].�.�.�.�./�/�/�/0?0A0�0�0�01/111�1�1�1�12 2����ƤФ+�@����ʧЧѧӧӧէ٧�,�0�9�@�w���ŨΨ٨�S�_�|���ͩϩ٩ީ���6�@�M�P�Y�\�ª۪����	���� �&�(�.�0�k�p�����������������m�p�������6�8�<�>�>�@�A�C�D�F������������ �R�T�f�h�k�p�t�v��������������������������
&(:<=?MP]��37�������������#-JPz�������������'0coz|�������������6@U`g������
578<<?UW��������		9	?	?	�	�	�	�	�	







5
8
:
?
H
P
X
`
�
�
�
�
�
59UXrx�����H�����'
0
9
`~�������'0Yp�����MRu�������46GPv����A��������������(*02359;DGHKMPPWW]cflpt[]a��������DPY`l����+0F;���		578;FPY������GP���	
68EPlp�����	6::<=?GPY`eghj���������:>Y������#$n$p$t$�$C%�/�/0U4DFFh8j@j^j`jijnj�j�j�j�j�j�j�jkEkPkYk[kakckwk}k�k@n�noJoOo�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������-�0�F�P�������&�)����E����������V�`�x��T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R���������������������%�*������!�#�$�&�*�0�m������,�0�=�@�I�N�O�����������������������������������������K�P�Y�^�_�q����=�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~��������������������������+�0��������������������������;�@�H�P�Q�`�e���������v�{���������G�P�Y�`������������S�`�m�p�|����������������������������ߦ�9�@�� ���������JP�# �����@09`i����f	o	�	�	f
o
�
�
fo��fo��f
o
�
�
PY�� )@I����FO������PY��@IPY �)�Ш٨�	�Щ٩���P�Y��������0
9
fo��6?����PY��PY��09��PYPYPY��PY`jij�j�jPkYk����@�I���������P�Y�����		  ���� 
 / / _ _ 00�AZaz��������������������EEptvwz}�������������/1VYY`��������������� WY_n�����������?M�������,@X`jp����������;	=	L	N	P	U	c	q	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	







(
*
0
2
3
5
6
8
9
>
B
G
H
K
L
Q
Q
Y
\
^
^
p
u
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
(*02359=DGHKLVW\]_cqq������������������������������(*9=DFHJLUVXZ]]`c��������������������������




:
=
D
F
H
J
L
N
N
T
W
_
c
z

�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
:@FMM����������������������@GIlq�����688;?P������������HJMPVXXZ]`����������������Z������lo������3@S`lnprs�������� x���� +08Pmpt���� ^at������35CEL��������6MOZ}����������������� EHMPWYY[[]]_}��������������������q q   � � !!!!
!!!!!!$!$!&!&!(!(!*!-!/!9!<!?!E!I!N!N!`!�!�$�$,�,�,�,�,�,-%-'-'-----0-g-o-o-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-/./.00!0)0105080<0A0�0�0�0�0�0�0�01/111�1�1�1�1�14�MN��Ф������*�+�@�n�t�{�����"�����ʧЧѧӧӧէ٧���'�@�s���èŨŨ�����������
�*�0�R�`�|���������ϩϩ�������6�@�M�`�v�z�������ªª۪ݪ�������	���� �&�(�.�0�Z�\�i�p��������������m�p�������(�*�6�8�<�>�>�@�A�C�D�F����=�P���������p�t�v���!�:�A�Z�f�����������
&(:<=?MP]��@t����-JPz�������������'0cpz|�������������6@U`g������
578<<?U`v������		 	9	�	�	�	�	








5
`
|
�
�
�
�
�
�
5@U`r��H����
'
������''0Ep�����Equ������2DGPrvv����������477>A������������(*02359=DGHKLPPWW]cACEGJ_a������������>@@DD����*@F8���		578;<?B����������25>P�����
68>@@r�����	6::<=?ACCFG`eghj���������:>@�� �#$n$�$C%�/�/0/4A4F4DFFh8j@j^jpj�j�j�jk/k@kCkckwk}k�k@nnoJoOo�o�o�o�o�o�o�o�o�op���Ռ�������������"�2�2�P�R�U�U�d�g�p����j�p�|��������������T�V�����������������������������������
�
�����9�;�>�@�D�F�F�J�P�R�������������������4�6�N�P�n�p�����������������%�*������!�#�$�&�*�0�m������,�7�=�N�N���������������������������������C�G�G�K�K�����!�"�$�$�'�'�)�2�4�7�9�9�;�;�B�B�G�G�I�I�K�K�M�O�Q�R�T�T�W�W�Y�Y�[�[�]�]�_�_�a�b�d�d�g�j�l�r�t�w�y�|�~�~���������������������0�I�P�i�p���ߦ�9�@�� ���������JP�#

�SsSS�NS�d}��lJ��nJ�J�dZ������������5�5R!""*bJ�H1TW
Y
A�`�����B���	��
������
����������	���
���������
��������(��)��*��+��,��-��.��/� ��(�!��)�"��*�#��+�$��,�%��-�&��.�'��/��h��i��j��k��l��m��n��o�`��h�a��i�b��j�c��k�d��l�e��m�f��n�g��o��E������E���B�BE�B��������E������E���B�BE�B���������B�B����B�B�E������E���B�BE�B������FfFFFiFIFlFLFfiFFIFflFFLStSTStSTDvDFDeD5DkD;NvNFDmD=ffi�ffl��B���B��������B�������B��R�T�BV�B��a��ff�fi�fl�h1�j�ss��st��t�w
�y
��nI�������B������B������B����P�B��B��������e��te�tk�tm�tv�~v������������������������� ���!���"���#���$���%���&���'���`���a���b���c���d���e���f���g���p��t��|��i0a Ab Bc Cd De Ef Fg Gh Hj Jk K*!l Lm Mn No Op Pq Qr Rs St Tu Uv Vw Wx Xy Yz Z� �� �� �� �� �� �+!� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� x    	  

          !  # "% $' &) (+ *- ,/ .3 25 47 6: 9< ;> =@ ?B AD CF EH GK JM LO NQ PS RU TW VY X[ Z] \_ ^a `c be dg fi hk jm lo nq ps ru tw vz y| {~ }� C� �� �� �� �� �� �� �� =�  � �� �� �� �� �� �� �� �� �� �� �������������� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ������ �� �� �� �� �    	  

          # "% $' &) (+ *- ,/ .1 03 2< ;? ~,@ ,B AG FI HK JM LO NP o,Q m,R p,S �T �V �W �Y �[ �\ ��` �a ��c �e ��f ��h �i �j ��k b,l ��o �q n,r �u �} d,� �� ŧ� �� ��� �� D� �� �� E� �� ��� ��q ps rw v{ �| �} �� �� �� �� �� �� ��� �� �� ��� �� �� ���� �E�� ��� �� ��� �� �� �� ��� ��� ��� �� �� ��� �� �� �&!� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� � �� �0 1 2 �3 4 �5 6 7 8 9 : ; < = > �? @  A !�B "��C #D $E %F &G 'H (I )J *�K +L ,M -N .O /P Q R S T U V W X Y 	Z 
[ \ ] 
^ _ a `c b�e dg fi hk jm lo nq ps ru tw vy x{ z} | ~� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �    	  

          !  # "% $' &) (+ *- ,/ .a 1b 2c 3d 4e 5f 6g 7h 8i 9j :k ;l <m =n >o ?p @q Ar Bs Ct Du Ev Fw Gx Hy Iz J{ K| L} M~ N O� P� Q� R� S� T� U� V� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ���@p��@q��@r��@s��@t��@u��@v��@w��@x��@y��@z��@{��@|��@}��@~��@��@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@��@��@��@��@��@�y }�} c,� Ƨ    	  

          !  # "% $' &) (+ *- ,/ .1 03 25 47 69 8; := <? >A @C BE DG FI HK JM LO NQ PS RU TW VY X[ Z] \_ ^a `�c be dg fi hk jm lo nq ps ru tw vy x{ z} | ~� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �  	 
   
          (! )" *# +$ ,% -& .' /0 81 92 :3 ;4 <5 =6 >7 ?@ HA IB JC KD LE MQ YS [U ]W _` ha ib jc kd le mf ng op �q �r �s �t �u �v �w �x �y �z �{ �| �} �� �� �� �� �� �� �� �N! 2!p! `!q! a!r! b!s! c!t! d!u! e!v! f!w! g!x! h!y! i!z! j!{! k!|! l!}! m!~! n!! o!�! �!�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$�$ �$0, ,1, ,2, ,3, ,4, ,5, ,6, ,7, ,8, ,9, 	,:, 
,;, ,<, ,=, 
,>, ,?, ,@, ,A, ,B, ,C, ,D, ,E, ,F, ,G, ,H, ,I, ,J, ,K, ,L, ,M, ,N, ,O, ,P,  ,Q, !,R, ",S, #,T, $,U, %,V, &,W, ',X, (,Y, ),Z, *,[, +,\, ,,], -,^, .,_, /,a, `,e, :f, >h, g,j, i,l, k,s, r,v, u,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,�, �,- �- �- �- �- �- �- �- �- �	- �
- �- �- �
- �- �- �- �- �- �- �- �- �- �- �- �- �- �- �- �- �- �- � - �!- �"- �#- �$- �%- �'- �-- �A� @�C� B�E� D�G� F�I� H�K� J��M� L�O� N�Q� P�S� R�U� T�W� V�Y� X�[� Z�]� \�_� ^�a� `�c� b�e� d�g� f�i� h�k� j�m� l��� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ��#� "�%� $�'� &�)� (�+� *�-� ,�/� .�3� 2�5� 4�7� 6�9� 8�;� :�=� <�?� >�A� @�C� B�E� D�G� F�I� H�K� J�M� L�O� N�Q� P�S� R�U� T�W� V�Y� X�[� Z�]� \�_� ^�a� `�c� b�e� d�g� f�i� h�k� j�m� l�o� n�z� y�|� {�� ~��� ���� ���� ���� ���� ���� ���� ���� ħ�� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ��ç §ȧ ǧʧ ɧѧ Чק ֧٧ ا�� ��S� ��A� !�B� "�C� #�D� $�E� %�F� &�G� '�H� (�I� )�J� *�K� +�L� ,�M� -�N� .�O� /�P� 0�Q� 1�R� 2�S� 3�T� 4�U� 5�V� 6�W� 7�X� 8�Y� 9�Z� :�( ) * + , - . / 0 1 	2 
3 4 5 
6 7 8 9 : ; < = > ? @ A B C D E F G H  I !J "K #L $M %N &O '� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� p� q� r� s� t� u� v� w� x� y� z� |� }� ~� � �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �`n @nan Anbn Bncn Cndn Dnen Enfn Fngn Gnhn Hnin Injn Jnkn Knln Lnmn Mnnn Nnon Onpn Pnqn Qnrn Rnsn Sntn Tnun Unvn Vnwn Wnxn Xnyn Ynzn Zn{n [n|n \n}n ]n~n ^nn _n"� �#� �$� �%� �&� �'� �(� �)� �*� �+� 	�,� 
�-� �.� �/� 
�0� �1� �2� �3� �4� �5� �6� �7� �8� �9� �:� �;� �<� �=� �>� �?� �@� �A� �B�  �C� !�i IA@aB@bC@cD@dE@eF@fG@gH@hJ@jK@kL@lM@mN@nO@oP@pQ@qR@rS@sT@tU@uV@vW@wX@xY@yZ@z�	��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��
�	ss@@@@@	
@@
@@@@@@@@@ @!"@#$@%&@'(@)*@+,@-.@/2@34@56@79@:;@<=@>?@@A@BC@DE@FG@HI*	�nJ@KL@MN@OP@QR@ST@UV@WX@YZ@[\@]^@_`@ab@cd@ef@gh@ij@kl@mn@op@qr@st@uv@wx@�y@z{@|}@~9	s�@S�@��@��@T�@��@V�@W�@��@��@Y�@[�@��@`�@c�@i�@h�@��@o�@r�@u�@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��A���I@���a���i@��������@���@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@���	j������@���@��@��@��@��@��@��@�@@@@@	
@@
@@@@@@@@@ @�"@#$@%&@'(@)*@+,@-.@/0@12@3:@e,;@<=@�>@f,A@BC@�D@�E@�F@GH@IJ@KL@MN@OE�	�p@qr@sv@w@��@��@��@��@��@��@��@���	��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@���	��		��@��	��	��!	��)	��@��@��@��@��@��@��@��@��@��@��@��@��1	��9	��@��A	��@��@��@��@{�@|�@}@P@Q@R@S@T@U@V@W@X	@Y
@Z@[@\
@]@^@_@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@? @@!@A"@B#@C$@D%@E&@F'@G(@H)@I*@J+@K,@L-@M.@N/@O`@ab@cd@ef@gh@ij@kl@mn@op@qr@st@uv@wx@yz@{|@}~@�@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@�@@@@@	
@@
@@@@@@@@@ @!"@#$@%&@'(@)*@+,@-.@/1@a2@b3@c4@d5@e6@f7@g8@h9@i:@j;@k<@l=@m>@n?@o@@pA@qB@rC@sD@tE@uF@vG@wH@xI@yJ@zK@{L@|M@}N@~O@P@�Q@�R@�S@�T@�U@�V@��J�	e��@-�@-�@-�@-�@-�@-�@-�@-�@-�@	-�@
-�@-�@-�@
-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@-�@ -�@!-�@"-�@#-�@$-�@%-�@'-�@--� �� �� �� �� �� ��i	2�q	4�y	>��	A��	B��	B��	J��	c��	K��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@�@@@@@	
@@
@@@@@@@@@ @!"@#$@%&@'(@)*@+,@-.@/0@12@34@56@78@9:@;<@=>@?@@AB@CD@EF@GH@IJ@KL@MN@OP@QR@ST@UV@WX@YZ@[\@]^@_`@ab@cd@ef@gh@ij@kl@mn@op@qr@st@uv@wx@yz@{|@}~@�@��@��@��@��@��@��@��@��@��@��@���	h1��	t��	w
��	y
��	a��	a�

ss�@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@�@	@
@@@
@@@@@@@@@(@ )@!*@"+@#,@$-@%.@&/@'8@09@1:@2;@3<@4=@5>@6?@7H@@I@AJ@BK@CL@DM@EP	�R#	�T;	�VS	�BY@Q[@S]@U_@Wh@`i@aj@bk@cl@dm@en@fo@g�j�	����	����	����	��ʂ	���	����	���	��*���R���z������������������B���j�	 ����	!����	"����	#��ʄ	$���	%����	&���	'��*� ��R�!��z�"����#����$����%���&��B�'��j�	`����	a����	b����	c��ʆ	d���	e����	f���	g��*�`��R�a��z�b����c����d����e���f��B�g��j�	p����	�����	����	�B�ӈ	�B��@��@��@p�@q�	����)		��2�	t��R�	���j�	����		�B���	�B��@r�@s�@t�@u��	�����		��
	��"
	�B�3
	�B�@��@��@v�@w�K
	��c
	��z
	���
	�B��
	�B�@��@��@z�@{�@����	|��Ҋ	����	���
	�B��	�B��@x�@y�@|�@}�J���&!@�*!@k+!@�2!@N!`!@p!a!@q!b!@r!c!@s!d!@t!e!@u!f!@v!g!@w!h!@x!i!@y!j!@z!k!@{!l!@|!m!@}!n!@~!o!@!�!@�!�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$�$@�$,@0,,@1,,@2,,@3,,@4,,@5,,@6,,@7,,@8,	,@9,
,@:,,@;,,@<,
,@=,,@>,,@?,,@@,,@A,,@B,,@C,,@D,,@E,,@F,,@G,,@H,,@I,,@J,,@K,,@L,,@M,,@N,,@O, ,@P,!,@Q,",@R,#,@S,$,@T,%,@U,&,@V,',@W,(,@X,),@Y,*,@Z,+,@[,,,@\,-,@],.,@^,/,@_,`,@a,b,@kc,@}d,@}g,@h,i,@j,k,@l,m,@Qn,@qo,@Pp,@Rr,@s,u,@v,~,@?,@@�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,�,@�,@�@A�B�@C�D�@E�F�@G�H�@I�J�@K�L�@M�N�@O�P�@Q�R�@S�T�@U�V�@W�X�@Y�Z�@[�\�@]�^�@_�`�@a�b�@c�d�@e�f�@g�h�@i�j�@k�l�@m���@����@����@����@����@����@����@����@����@����@����@����@����@����@��"�@#�$�@%�&�@'�(�@)�*�@+�,�@-�.�@/�2�@3�4�@5�6�@7�8�@9�:�@;�<�@=�>�@?�@�@A�B�@C�D�@E�F�@G�H�@I�J�@K�L�@M�N�@O�P�@Q�R�@S�T�@U�V�@W�X�@Y�Z�@[�\�@]�^�@_�`�@a�b�@c�d�@e�f�@g�h�@i�j�@k�l�@m�n�@o�y�@z�{�@|�}�@y~�@���@����@����@����@����@����@e��@����@����@����@����@����@����@����@����@����@����@����@����@f��@\��@a��@l��@j��@���@���@���@S���@����@����@����@����@����@����@��§@çħ@��ŧ@�Ƨ@�ǧ@ȧɧ@ʧЧ@ѧ֧@קا@٧��@��p� �q� �r� �s� �t� �u� �v� �w� �x� �y� �z� �{� �|� �}� �~� �� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��r�	ff���	fi���	fl�Ӌ	ffi��	ffl�2�	st�R�	st�r�	tv���	te���	tk�Ҍ	~v��	tm!�@A�"�@B�#�@C�$�@D�%�@E�&�@F�'�@G�(�@H�)�@I�*�@J�+�@K�,�@L�-�@M�.�@N�/�@O�0�@P�1�@Q�2�@R�3�@S�4�@T�5�@U�6�@V�7�@W�8�@X�9�@Y�:�@Z�@(@)@*@+@,@-@.@/@0	@1
@2@3@4
@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G @H!@I"@J#@K$@L%@M&@N'@O�@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@�p@�q@�r@�s@�t@�u@�v@�w@�x@�y@�z@�|@�}@�~@�@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@��@�@n@`nAn@anBn@bnCn@cnDn@dnEn@enFn@fnGn@gnHn@hnIn@inJn@jnKn@knLn@lnMn@mnNn@nnOn@onPn@pnQn@qnRn@rnSn@snTn@tnUn@unVn@vnWn@wnXn@xnYn@ynZn@zn[n@{n\n@|n]n@}n^n@~n_n@n�@"��@#��@$��@%��@&��@'��@(��@)��@*�	�@+�
�@,��@-��@.�
�@/��@0��@1��@2��@3��@4��@5��@6��@7��@8��@9��@:��@;��@<��@=��@>��@?��@@��@A� �@B�!�@C�I@i0@i@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@������������0�����������0�����0������4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

��unknown address_size:%dunknown format:%d%d: unsupported form: %#lx
.debug_abbrevlseek: %s
mmap: %s
.strtab.dynstr.note.gnu.build-id.gnu_debuglink.debug_info.debug_line.debug_ranges.debug_str_offsets.debug_addr.debug_rnglists.debug_str.debug_line_strUnsupported operation in %s
/proc/self/exe%s(%s) %s/%s:%d
%s(%s) %s:%d
%s(0x%lx) [0x%lx]
%s(%s) [0x%lx]
%s(%s+0x%lx) [0x%lx]
%s(%s+0x%lx) [0x%lx] ???:%d
%s(%s+0x%lx) [0x%lx] %s:%d
%d: Abbrev Number %ld not found
Unexpected file number %d in %s at %tx
Unexpected directory number %lu in %s
Unknown extended opcode: %d in %s
Unexpected size of .debug_line in %s
%s(%s+0x%lx) [0x%lx] %s/%s:%d
���������x��������P�(������@� ���x��!�$"�"�L"�"��!�!�!�0123456789abcdef/usr/lib/debug/.gem_preludebuiltin_lookup: can not find %svm->builtin_function_table should be NULL.YARB��xl##_
	�_#
	UO�s�'sO)#i�			
))+!!!O�K�+�G����������������))'s�%%'%)	!!E5)5��������#���������	1-#%����������������-����������A�	GE)<internal:yjit_hook>
RubyVM�)	YJIT

call_yjit_hooks
Moduleenabled?	sendGE<class:Module>with_yjit#core#undef_methodGEKdefined guard in <internal:yjit_hook>$!������������$0DHpYARB$"��l#_
	�%-s%-
sOO#_
	�%-sO#_
	�%-sO#_
	�%-s�#�;;	131
YYCECI+w+w%a%c%a#g7�7�11�1/�1�1��������1�




'��������'7AC��������AC7S]_��������]_S	oy{��������y{o)))))�-w��7=��=������������������+�#c�1���s-��	%sO%-%s���@				!�	!	
)
+
)		)!+!-9/))	I�A�!
I�Y!7'��������'	�3c�
%-5s���KMKQ@SQK	/)	%�#k1!KUk7���������9c�
%-;s���'i'k'i)o@)q)o'i'	/)	%�#g7!'i')Og3���������?c�
%-As���3�3�3�5�@5�5�3�3	/)	%�#g=!3�35Sg3��������U�}�	GE-<internal:gem_prelude>Gem�)ErubygemsEbundled_gemsErrorHighlightEerror_highlightDidYouMeanEdid_you_meanSyntaxSuggestE/syntax_suggest/core_exterequireGEArescue in <internal:gem_prelude>CE7`RubyGems' were not loaded.$!	path==raise	warnGCEC`error_highlight' was not loaded.GCE=`did_you_mean' was not loaded.GCEA`syntax_suggest' was not loaded.LoadError������(<L\l����������8<@dhl�YARB�&�Dl)#iO)#i	O%'-
sO)#i�CC1E1G1K1E5{5{5}

)A�?m}?m+����������������k	))''s�	!iOO%��������	k))''sO%'s�5';';'7'9';+=+?+=-C	!!))�%mC-m1��������	%s''s�#�k'
''�=o=o=q=u9��������?{	9m?{		)9+!#�k#%%5{5?k+��������%-1sO%s�		
	
!3)9YI-//
I%
��������	��������%-9sO%�G;s�')'-/-!5!	3)y	a5775!a7#����������������C��%�	G;o���������9S9U;];_;c;k;g;k=m!"#$K%�3BF�?AA9m9=�U;��������
��������	}�i�A�e�	GE%<internal:prelude>Binding
KernelSetEsetEnumerableautoloadGE<class:Binding>irb+core#set_method_aliasGE<module:Kernel>ppprivateGE'<module:Enumerable>
to_set!instance_methodsinclude?GEirbEirbrequireGEppEpp�	objsGE
to_setklass	argsblocknew������$(<D\`t|������������ $,4<YARB$!��l#i	Os�K%-
sO%-sO%-sO%-sO%-sO%-s�#�O;S;U?[?]?[AaAcAa=gKqKsKqMwMyMwO}OO}Q�Q�Q�Q�Q��������Q�
	35��������35!))))))k�]��S��5cc����������������;%m%m!	�)rjit_stats_enabled_p�%oO�	5rjit_trace_exits_enabled_p�%o
�#�%))!-!-+=+=-A-A7O	-��������7O		#	#	=���O7�1���������)c�	#����CiCkCiEo@EoCiC		!w!W%'CiCEW)���������	_bi4�	!	)-//�����������������	_bi9�#%!	)133%��������	���������rjit_stop_statsO%s�#3#3%5%5'7
99q/C57!7!'C!���������rjit_stop_statsO%s�/G/G1I1I3K
=9i/;;7-K-3;����������A��M��	GE<internal:rjit>?	RJIT?	E
fiddleEfiddle/importE'ruby_vm/rjit/c_typeE+ruby_vm/rjit/compilerE%ruby_vm/rjit/hooksE%ruby_vm/rjit/statsenabled?requireGE<module:RJIT>
enableat_exitGE3rescue in <internal:rjit>A$!GEenabled?GE
enableGE-block in <module:RJIT>print_statsG!dump_trace_exits
RubyVMLoadError$(04@Ph���������� $04@D`pt��YARB��?]�$rl�rjit_enabled_p�#i	�#��z��z�		z�	z�	��������	z��=gz�	�?g����������������sQ)#iO#iO̓
_bi353Uͅ
_bi354U͇
_bi355U!#͉
_bi356U%'͋
_bi357U)+͍
_bi358U-/͏
_bi359U13͑
_bi360U57͓
_bi361U9;͕
_bi362U=?͗
_bi363UAC͙
_bi364UEG͛
_bi365UIK͝
_bi366UMO͟
_bi367UQS͡
_bi368UUWͣ
_bi369UY[ͥ
_bi370U]_ͧ
_bi371Uacͩ
_bi372Uegͫ
_bi373Uikͭ
_bi374Umoͯ
_bi375Uqsͱ
_bi376Uuwͳ
_bi377Uy{͵
_bi378U}ͷ
_bi379U��͹
_bi380U��ͻ
_bi381U��ͽ
_bi382U��Ϳ
_bi383U���
_bi384U����
_bi385U����
_bi386U����
_bi387U����
_bi388U����
_bi389U����
_bi390U����
_bi391U����
_bi392U����
_bi393U����
_bi394U����
_bi395U����
_bi396U����
_bi397U����
_bi398U����
_bi399U����
_bi400U����
_bi401U����
_bi402U����
_bi403U����
_bi404U����
_bi405U����
_bi406U����
_bi407U����
_bi408U����
_bi409U���
_bi410U���
_bi411U���
_bi412U���
_bi413U���
_bi414U���
_bi415U����
_bi416U����
_bi417U����
_bi418U����
_bi419U����
_bi420U����
_bi421U����
_bi422U����
_bi423U����
_bi424U����
_bi425U����
_bi426U����
_bi427U����
_bi428U����
_bi429U����
_bi430U����
_bi431U����
_bi432U����
_bi433U����
_bi434U����
_bi435U����
_bi436U����
_bi437U����
_bi438U����
_bi439U����
_bi440U����
_bi441U����
_bi442U����
_bi443U����
_bi444U����
_bi445U����
_bi446U����
_bi447U����
_bi448U����
_bi449U����
_bi450U����
_bi451U����
_bi452U����
_bi453U����
_bi454U����
_bi455U����
_bi456U��m�	�m��m�
�m��m��m��m��m��m��m��m��m��m�!�m�#�m�%�m�'�m�)�m�+�m-m/m1m3m5	m
7m9
m;m=m?mAmCmEmGmImKm M!m"O#m$Q%m&S'm(U)m*W+m,Y-m.[/m0]1m2_3m4a5m6c7m8e9m:g;m<i=m>k?m@mAmBoCmDqEmFsGmHuImJwKmLyMmN{OmP}QmRSmT�UmV�WmX�YmZ�[m\�]m^�_m`�amb�cmd�emf�gmh�imj�kml�mmn�omp�qmr�smt�umv�wmx�ymz�{m|�}m~�m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��m��m��m��m��m��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m
�
m
�
m
�
m
�
m
�
	m

�
m
�

m
�
m
�
m
�
m
�
m
�
m
�
m
�
m
�
m
�
m
 �
!m
"�
#m
$�
%m
&�
'm
(�
)m
*�
+m
,�
-m
.�
/m
0�
1m
2�
3m
4�
5m
6�
7m
8�'
8�

�R
�Raaabb
bcccdddee"e#f$f)f*g+g0g1h2h7h8i9i>i?j@jEjFkGkLkMlNlSlTmUmZm[n\nanbocohoipjpoppqqqvqwrxr}r~ss�s�t�t�t�u�u�u�v�v�v�w�w�w�x�x�x�y�y�y�z�z�z�{�{�{�|�|�|�}�}�}�~�~�~����������������������������������������	�
���������� �%�&�'�,�-�.�3�4�5�:�;�<�A�B�C�H�I�J�O�P�Q�V�W�X�]�^�_�d�e�f�k�l�m�r�s�t�y�z�{����������������������������������������������������������������������������������������������������������������������
��������!�"�#�(�)�*�/�0�1�6�7�8�=�>�?�D�E�F�K�L�M�R�S�T�Y�Z�[�`�a�b�g�h�i�n�o�p�u�v�w�|�}�~�����������������������������������������������������������������������������������������������������	�
�������%�&�,�-�3�4�:�;�A�B�H�I�O�P�V�W�]�^�d�e�k�l�r�s�y�z����������
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
#�
#�
'�
'�
+�
+�
/�
/�
3�
3�
7�
7�
;�
;�
?�
?�
C�
C
G
G
K

K
O
O
S
S!
W"
W(
[)
[/
_0
_6
c7
c=
g>
gD
kE
kK
oL
oR
sS
sY
wZ
w`
{a
{g
h
n
�o
�u
�v
�|
�}
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
�"
�"
�"
�"	
�"
�"
�"
�"
�"
�"
�"$
�"%
�"+
�",
�"2
�"3
�"9
�":
�"C
�"D
�"J
�"K
�"�"�"�"�"� "� &@0&A0&�H&�H*#X*$X*-\*.\*Xd*Yd*�o*�o*�w*�w*��*��.�.�.6�.7�.@�.A�.��.��.��.��.��.��23�24�2��2��2��2��6�6�6f�6g�6m�6n�6�6�::><2>=2>C6>D6F�F�JL�JM�J��J��N4�N5�N;�N<�NE�NF�Nf�Ng�N��N��N��N��RH�RI�R��R��R��R��R�R�R�R�R�
R�
V`Van3�n4�n=�n>�n��n��n��n��v��v��v��v��v��v��v��v��v��v��v�v�v�v�v�v�v�v�v�v�v�v�zzzzz#z#z'z'z#+z$+z+/z,/z13z23z97z:7zA;zB;zI?zJ?zQCzRCzYGzZGzaKzbKziOzjOzqSzrSzyWzzWz�[z�[z�_z�_z�cz�cz�gz�gz�kz�kz�oz�oz�sz�sz�wz�wz�{z�{z�z�z��z��z��z�	


9!�n_.�>�

	z�	�>�
�
�

��������
k
<�k
=�k
>�k
?�k
@�k
A�k
B�k
C�k
D�k
E�k
F�k
G�k
H�k
I�k
J�k
K�k
L�k
M�k
N�k
O�k
P�k
Q�k
R�k
S�k
T�k
U�k
V�k
W�k
X�k
Y�k
Z�k
[�k
\�k
]�k
^�k
_�k
`�k
a�k
b�k
c�k
d�k
e�k
f�k
g�k
h�k
i�k
j�k
k�k
l�k
m�k
n�k
o�k
p�k
q�k
r�k
s�k
t�k
u�k
v�k
w�k
x�k
y�'
y�#7'K/k9�G�Q�Y�a�k�s������������������������ �(�0�9�F�R�^�f�n�������������������
�
�
�
9�
E�
Q�
Y
a
i
o
u
�#
�'
�/
�3
�7
�=
�A
�F
�J
�J
�J
��
�:c
:
;
;
�Mc������������������k
{�k
|�'
|�T
�Y
�Y
�YU9
z
;
;RR]9	������������������
_bi458�����!	;#
}
~
~���ʙ#��������	����������
_bi459�����!	;#

�
����˭#������������������
_bi460�����!	;#
�
�
����̕#��������
����������
_bi461�����!	;#
�
�
����ͅ#������������������
_bi462�����!	;#
�
�
����έ#������������������
_bi463���!	;#
�
�
���ρ#������������������
_bi464���	!	;#
�
�
��	�Е#������������������
_bi465���!	;#
�
�
���с#������������������
_bi466���!	;#
�
�
���҉#������������������
_bi467���!	;#
�
�
���Ӎ#������������������
_bi468��$�%!	;#
�
�
��%�ԅ#������������������
_bi469��+�,!	;#
�
�
��,�Յ#������������������
_bi470��2�3!	;#
�
�
��3�֑#��������!����������
_bi471��9�:!	;#
�
�
��:�׭#��������#����������
_bi472��@�A!	;#
�
�
��A�ر#��������%����������
_bi473��G�H!	;#
�
�
��H�١#��������'����������
_bi476��N�O!	;#
�
�
��O��#��������)����������
_bi480��U�V!	;#
�
�
��V��#��������+����������
_bi484��\�]!	;#
�
�
��]��#��������-����������
_bi488��c�d!	;#
�
�
��d��#��������/����������
_bi492��j�k!	;#
�
�
��k��#��������1����������
_bi496��q�r!	;#
�
�
��r��#��������3����������
_bi500��x�y!	;#
�
�
��y��#��������5����������
_bi504����!	;#
�
�
�����#��������7����������
_bi508�����!	;#
�
�
�����#��������9����������
_bi512�
�
�!	;#
�
�
����
#��������;����������
_bi516�
�
�!	;#
�
�
�
�

#��������=����������
_bi520�
�
	�!	;#
�
�
�
�

	#��������?����������
_bi524�
�

�!	;#
�
�
�
�


#��������A����������
_bi528�
�
�!	;#
�
�
�
�

#��������C����������
_bi532�
�
�!	;#
�
�
�
�

#��������E����������
_bi536�
�
�!	;#
�
�
�
�

#��������G����������
_bi540�
�
�!	;#
�
�
�
�

#��������I����������
_bi544�
 �
!�!	;#
�
�
�
�

!#��������K����������
_bi548�
$�
%�!	;#
�
�
�
#�
#
%#��������M����������
_bi552�
(�
)�!	;#
�
�
�
'�
'
)#��������O����������
_bi556�
,�
-�!	;#
�
�
�
+�
+
-#��������Q����������
_bi560�
0�
1�!	;#
�
�
�
/�
/
1#��������S����������
_bi564�
4�
5�!	;#
�
�
�
3�
3
5#��������U����������
_bi568�
8�
9�!	;#
�
�
�
7�
7
9#��������W����������
_bi572�
<�
=�!	;#
�
�
�
;�
;
=#��������Y����������
_bi576�
@�
A�!	;#
�
�
�
?�
?
A#��������[����������
_bi580�
D
E!	;#
�
�
�
C
C
E#��������]����������
_bi584�
H
I!	;#
�
�
�
G
G
I#��������_����������
_bi588�
L
M!	;#
�
�
�
K
K
M#��������a����������
_bi592�
P
Q!	;#
�
�
�
O
O
Q#��������c����������
_bi596�
T 
U!!	;#
�
�
�
S!
S
U#��������e����������
_bi600�
X'
Y(!	;#
�
�
�
W(
W
Y#��������g����������
_bi604�
\.
]/!	;#
�
�
�
[/
[
]#��������i����������
_bi608�
`5
a6!	;#
�
�
�
_6
_
a#��������k����������
_bi612�
d<
e=!	;#
�
�
�
c=
c
e#��������m����������
_bi616�
hC
iD!	;#
�
�
�
gD
g
i#��������o����������
_bi620�
lJ
mK!	;#
�
�
�
kK
k
m#��������q����������
_bi624�
pQ
qR!	;#
�
�
�
oR
o
q#��������s����������
_bi628�
tX
uY!	;#
�
�
�
sY
s
u#��������u����������
_bi632�
x_
y`!	;#
�
�
�
w`
w
y#��������w����������
_bi636�
|f
}g!	;#
�
�
�
{g
{
}#��������y����������
_bi640�
�m
�n!	;#
�
�
�
n

�#��������{����������
_bi644�
�t
�u!	;#
�
�
�
�u
�
�#��������}����������
_bi648�
�{
�|!	;#
�
�
�
�|
�
�#������������������
_bi652�
��
��!	;#
�
�
�
��
�
�#�������������������
_bi656�
��
��!	;#
�
�
�
��
�
�#�������������������
_bi660�
��
��!	;#
�
�
�
��
�
�#�������������������
_bi664�
��
��!	;#
�
�
�
��
�
�#�������������������
_bi668�
��
��!	;#
�
�
�
��
�
�#�������������������
_bi672�
��
��!	;#
�
��
�
�#�������������������
_bi676�
��
��!	;#
��
�
�#�������������������
_bi680�
��
��!	;#
��
�
�#�������������������
_bi684�
��
��!	;#
��
�
�#�������������������
_bi688�
��
��!	;#
��
�
�#�������������������
_bi692�
��
��!	;#	


��
�
�#�������������������
_bi696�
��
��!	;#
��
�
�#�������������������
_bi700�
��
��!	;#

��
�
�#�������������������
_bi704�
��
��!	;#
��
�
�#�������������������
_bi708�
��
��!	;#
��
�
�#�������������������
_bi712�
��
��!	;#
��
�
�#�������������������
_bi716�
��
��!	;#
��
�
�#�������������������
_bi720�
��
��!	;#
��
�
�#�������������������
_bi724�
�"
�"!	;#
�"
�
�#�������������������
_bi728�
�"
�"!	;#
�"
�
�#�������������������
_bi732�
�"
�"!	;#
�"
�
�#�������������������
_bi736�
�"
�"!	;#  
�"
�
�#�������������������
_bi740�
�"
�"!	;#!""
�"
�
�#�������������������
_bi744�
�"#
�"$!	;##$$
�"$
�
�#�������������������
_bi748�
�"*
�"+!	;#%&&
�"+
�
�#�����������������)Q�O%sQ)�
�"1
�"1
�"/
�"0
�"1
�"2!		�)u!U'((
�"2
�
�U


�����������������
,Q�O%sQ,�
�"8
�"8
�"6
�"7
�"8
�"9!		�){![*++
�"9
�
�[


�����������������
/Q�O0-1sQ/�
�"B
�"B
�">
�"?
�"A
�"B
�"C!		2!%�+a-..
�"C
�
�a

�����������������
5Q�O%sQ5�
�"I
�"I
�"G
�"H
�"I
�"J!		�){![344
�"J
�
�[


�����������������
8Q��O9-:��
_bi769%s��
_bi7707;-<�
_bi772=-<�
_bi774>-?s�
_bi7757@-<�
_bi777A-?s%ss�
_bi7807Bo��
_bi7817sCo�s�
_bi7847sQ8�"�"�"O"P"U"Y"Z"^"X"c"d"i"m"n"s"x"y"{""v"�	"�	"�
"�
"�
"�"�"�"�"�"�
"�
"�
"�
"�"�"�"�"�"�"a"�"�"�!		�)2!2!�)
9A	DE
9
9AFGH
9
9A	IJ
9A	KL�
�O677
�"�
�O�Y��������������������!OQ�O%sQO�"�"�"�"�"�"�!		�)u!UMNN"�U


�����������������
RQ�=OS-T�
_bi794%s�
_bi7957%s�	
_bi7967sQR�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�!		�)�)
9A	UVK�}�PQQ"��K!))�����������������)
YQ��OZ-[�

_bi802%s�
_bi8037\-<�
_bi805]-<�

_bi807^o��
_bi8087_o��
_bi8097s`o�s�
_bi8127sQY�!&?!&?!"�""�""�#"�#"�#"�#"�$"�%&%&&&	'&
'&(&(&(&(&)&")&')&+)& &&-+&1+&6$&8,&<$"�!&>!&?.&@!		�)
9
9
9A	ab
9
9A	IJ
9A	KL����WXX &@ .�Aaa�����������������a
eQ��Of-g�
_bi818%s�
_bi8197h-?s�
_bi8207i-<�
_bi822j-<�
_bi824ko��
_bi8257l-<�
_bi827m-?s%ss�
_bi8307sn-<�
_bi833oo��
_bi8347ss�
_bi8367sQe�1&�1&�1&E2&F2&K3&O3&P3&T3&N4&Y4&Z4&\4&`4&W5&e6&f6&k7&o8&p8&u9&z9&�9&�9&x:&�;&�;&�<&�<&�<&�=&�=&�:&�>&�:&�7&�@&�A&�A&�B&�B&�B&�B&�@&�5&�D&�5&c1&�1&�F&�!		�)2!
92!�)
9A	Dp
9A	HG
9
9AJ
9A	Iq
9AKFL�
M�ycdd0&�0Fy�e��������������������#tQ��Ou-v�
_bi842%s�
_bi8437w-<�
_bi845x-<�
_bi847y-?s� 
_bi8487zo��!
_bi8497s{o�s�"
_bi8527sQt�I*"I*"I&�J&�J&�K&�K&�K&�K&�L&�M&�M&�N&�O&�O&�P&�P&�P&�P*P&�Q*Q*
Q*Q*N*S*S*L*T*L&�I*!I*"V*#!		�)2!
9
9A	FH
9
9A	IJ
9A	KL����rssH*#HV��Caa�����������������a
~Q�O-�sQ~�Y*,Y*,Y*(Y*)Y*+Y*,Z*-!		2!%�+e|}}X*-XZe

�����������������
�Q�EO�-��#
_bi862�o��$
_bi8637�o��%
_bi8647sQ��]*W]*W]*2^*3^*8_*=_*B_*F_*;`*K`*P`*T`*I]*V]*Wb*X!		
9
9
9A	��S������\*X\b�K!))�����������������)
�Q�qO�-��&
_bi870%s�'
_bi8717%s�(
_bi8727%s�)
_bi8737%s�*
_bi8747�o��+
_bi8757sQ��e*�e*�e*]f*^f*cg*gg*hg*lg*fh*ph*qh*uh*oi*yi*zi*~i*xj*�j*�j*�j*�k*�k*�k*�k*�e*�e*�m*�!		�)�)�)�)
9
9AU����A�����d*�dmҍ9SS�����������������S
�Q�CO�-��,
_bi881�-�s�-
_bi8827%s�.
_bi8837sQ��p*�p*�p*�q*�q*�r*�r*�r*�r*�r*�s*�s*�s*�s*�p*�p*�u*�!		2!�)
9A	��Q������o*�ou�K#))�����������������)
�Q�_O�-��/
_bi889�-<�0
_bi891�o��1
_bi8927%s�2
_bi8937s%s%ssQ��x*�x*�x*�y*�y*�z*�{*�{*�|*�|*�|*�|*�}*�}*�}*�}*�z*�*�*��*��*�x*�x*��*�!		
9�)
9A	���)�)
9A���m�����w*�w���1SS�����������������S
�Q�O�-�sQ���.�.�*��*��*��.�.!		2!%�+e����.��e

�����������������
�Q�[O�-��3
_bi906�-<�4
_bi908%s%s%ss�5
_bi9127%s�6
_bi9137sQ���.5�.5�.�.�.�.�.�.�.�.�.�.�."�.#�.%�.)�.�.-�..�.2�.,�.4�.5�.6!		�)�)�)
9A����)
9A	L�i������.6����1SS�����������������S
�Q�O�-�sQ���.?�.?�.;�.<�.>�.?�.@!		2!%�+e����.@��e

�����������������
�Q�sO�-��7
_bi923�-�s�8
_bi9247�-�s�9
_bi9257�-�s�:
_bi9267�o�;
_bi9277sQ���.��.��.E�.F�.K�.P�.Q�.S�.W�.N�.\�.]�._�.c�.Z�.h�.i�.k�.o�.f�.t�.|�.��.r�.��.��.�!		2!2!2!
9
9A
	�����9������.���ʇ7EE�����������������E�Q�EO�-��<
_bi933�o�=
_bi9347�o�>
_bi9357sQ���.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.�!		
9
9
9A	��S�������.����M!))�����������������)
�Q�uO�-��?
_bi941%s�@
_bi9427%s�A
_bi943'�7�o�B
_bi9447%s�C
_bi9457%s�D
_bi9467sQ���.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.�!		�)�)
9�)�)
9AU�����I������.���׍;SS�����������������S
�Q�uO�-��E
_bi952%s�F
_bi9537%s�G
_bi954'�7�o�H
_bi9557%s�I
_bi9567%s�J
_bi9577sQ���22�22�.��.��.��2�2�2�.��2	�2
�2�2�2�2�2�2�2�2!�2"�2&�2 �2*�2+�2/�2)�21�22�23!		�)�)
9�)�)
9AU�����J������23��؏;SS�����������������S
�Q��O�-��K
_bi963%s�L
_bi9647%s�M
_bi9657�o�N
_bi9667%s�O
_bi9677�-<�P
_bi969�-<�Q
_bi971�-�s�R
_bi9727s%s%s�os�S
_bi9777sQ���2��2��28�29�2>�2B�2C�2G�2A�2K�2L�2P�2J�2U�2Z�2^�2S�2b�2c�2g�2a�2l�2m�2r�2v�2w�2|�2��2��2��2��2�2��2��2��2��2��2��2��2��2��2j�2��2��2�!		�)�)
9�)2!
9A��)�)
9
9A
	����
9AUV����

�^����2���^�[��������������������
�Q�qO�-��T
_bi983%s�U
_bi9847�o�V
_bi9857%s�W
_bi9867%s�X
_bi9877%s�Y
_bi9887sQ���2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2�!		�)
9�)�)�)
9AU����F������2���ח9SS�����������������S
�Q�_O�-��Z
_bi994�-�s�[
_bi9957-�s�\
_bi9967-�s�]
_bi9977sQ���6�6�2��2��2��2��2��2��2��2��6�6�6�6	�6�6�6�6�6�6�6�6�6!		2!2!2!
9Am������6���k/77�����������������7		Q�wO-	�^_bi1003%s�__bi10047
o�`_bi10057-<�a_bi1007o	
o
%ss�b_bi10117sQ��6e�6e�6�6�6$�6(�6)�6-�6'�62�67�6;�60�6@�6A�6F�6J�6O�6S�6X�6[�6\�6^�6b�6>�6d�6e�6f!		�)
9
9
9�)
9A
9A�O���6f��۟9aa�����������������aQ�O%sQ��6l�6l�6j�6k�6l�6m!		�)�!a�6m��a%


�����������������
Q��O-�c_bi1021o�d_bi10227o�e_bi10237o
�f_bi10247%s�g_bi10257o�h_bi10267 -�s�i_bi10277!o�j_bi10287sQ��6��6��6r�6s�6x�6}�6��6��6{�6��6��6��6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6��6��6�6�!		
9
9
9�)
92!
9
9A"#$%����6���Koo�����������������o(Q�qO)-*�k_bi1034%s�l_bi10357%s�m_bi10367%s�n_bi10377+o�o_bi10387%s�p_bi10397sQ(�	:	:	6�
6�
6�6�6�6�6�6�6�6�6�
6�
6�
:
6�::
::::::	:	::!		�)�)�)
9�)
9AU,-./K��&'':֕9SS�����������������S
2Q��O3-4�q_bi10455o�r_bi104676-7s�s_bi104778o�t_bi104879o�u_bi10497%s�v_bi10507%s�w_bi10517:o�x_bi10527;o�y_bi10537<o�z_bi10547%s�{_bi10557%s�|_bi10567%s�}_bi10577=o�~_bi10587%s�_bi10597>o��_bi10607%s��_bi10617%s��_bi10627?-@s��_bi10637%s��_bi10647A-<��_bi1066Bo��_bi10677Co��_bi10687D-7s��_bi10697s��_bi10707sQ2�>;>;: :!:&:+:0:4:):9:::<:@:7:E:J:N:C:S:X:\:Q:`:a:e:_:i:j:n:h:s:x:|:q:�:�:�::�:�:�:�:�:�:�:� :� :� :� :�!:�!:�!:�!:�":�":�":�":�#:�#:�#:�#:�$:�$:�$:�$:�%:�%:�%:�%:�&:�&:�&:�&:�':�':�':�':�':�(:�(:�(:�(:�)>*>*>
+>+>+>+>
,>,>",>&,>->+->,->.->2->))>4.>8)>>:>;0><!		
92!
9
9
)
)
9
9
9�)�)�)
9�)
9�)�)2!�)
9
92!
9AEFG
9A-)HIJKLMNOPQRSTUVWXYZ[���011><0���������������������1;^Q�O%sQ^�3>B3>B3>@3>A3>B4>C!		�)w!W\]]2>C24W


�����������������
aQ�
gOb-c��_bi1080%s��_bi10817d-es��_bi10827fo��_bi10837g-<��_bi1085h-<��_bi1087i��s�7j��s�7k�'ls'l7m�'ns'n7o�'ps'p7q�'rs'r7s�'ts't7u�'vs'v7w��s'x7y��s'z7{�'ls'|7}�'ns'~7�'ps'�7��'rs'�7s��_bi11027�-es��_bi11037�-�s��_bi11047�-�s��_bi11057�-�s��_bi11067�-�s��_bi11077�-�s��_bi11087�-�s��_bi11097�o��_bi11107�o��_bi11117s��_bi11127%s��_bi11137%s��_bi11147�o��_bi11157�o��_bi11167�o ��_bi11177�o!��_bi11187�o"��_bi11197�o#��_bi11207�-<��_bi1122%s��_bi11237%s��_bi11247%s��_bi11257%s��_bi11267�o$��_bi11277s��_bi11287�-es��_bi11297�-es��_bi11307�-es��_bi11317�-es��_bi11327�-es��_bi11337�-es��_bi11347�-es��_bi11357�-es��_bi11367%s��_bi11377�-<��_bi1139�o%%ss��_bi11427�o&��_bi11437�o'��_bi11447%s��_bi11457�-1s��_bi11467%s��_bi1147'�7sQa�7F�7F�7>H8>I8>N9>R9>S9>W9>Q:>\:>]:>_:>c:>Z;>h;>m;>q;>f<>v=>w=>|>>�?>�?>�@>�@>�@>�@>�@>�@>�A>�A>�A>�A>�A>�A>�B>�B>�B>�B>�B>�B>�C>�C>�C>�C>�C>�C>�D>�D>�D>�D>�D>�D>�E>�E>�E>�E>�E>�E>�F>�F>�F>�F>�F>�F>�G>�G>�G>�G>�G>�G>�H>�H>�H>�H>�H>�H>�I>�I>�I>�I>�I>�I>�J>�J>�J>�J>�J>�J>�K>�K>�K>�K>�K>�K>�LBLBLBLBLB	LBMBMBMBMBMBMB>BNB>>OBOBOB!OB%OBPB*PB+PB-PB1PB(QB6QB7QB9QB=QB4RBBRBCRBERBIRB@SBNSBOSBQSBUSBLTBZTB[TB]TBaTBXUBfUBgUBiUBmUBdVBrVBwVB{VBpWB�WB�WB�WB~<B�XB�<>tYB�YB�YB�YB�ZB�ZB�ZB�ZB�[B�[B�[B�[B�\B�\B�\B�\B�]B�]B�]B�]B�^B�^B�^B�^B�_B�_B�_B�_B�`B�`B�`B�`B�aB�bB�bFcFcFcF	cFdF
dFdFdFeFeFeFeFfFfF fF$fFgF)gF.gF2gF'aF4hF8aB�iF=iF>iF@iFDiF;jFIjFJjFLjFPjFGkFUkFVkFXkF\kFSlFalFblFdlFhlF_mFmmFnmFpmFtmFknFynFznF|nF�nFwoF�oF�oF�oF�oF�pF�pF�pF�pF�pF�qF�qF�qF�qF�rF�sF�sF�tF�tF�uF�uF�rF�vF�rF�wF�wF�wF�wF�xF�xF�xF�xF�yF�yF�yF�yF�zF�zF�zF�zF�zF�{F�{F�{F�{F�{F�7F�7F�}F�!		
)2!
9
9!
9!
9!
9!
9!
9!
9!
9!
9!
9!
9!
9!
9!
9!
9A!��������������2!2!2!2!2!2!2!
9
9
9AU����������)
)
9
9
9
9
9
9
)�)�)�)
9
9A�����2!2!2!2!2!2!2!2!
)
9
)
9A	��
9
9�)2!�)
9A=9����������������������������
n2�P"�_``6F�6}"�
�&��������������������cyC�Q��O�-���_bi1153%s��_bi1154'�7%s��_bi1155'�7%s��_bi1156'�7�-�s��_bi11577�-�s��_bi11587%s��_bi11597sQ���JK�JK�J�J�J	�J
�J�J�J�J�J�J�J�J�J�J!�J"�J&�J'�J �J,�J-�J/�J3�J*�J8�J9�J;�J?�J6�JC�JD�JH�JB�JJ�JK�JL!		�)�)�)2!2!
)
9A
������������JL��Kaa�����������������a�Q��O�-���_bi1165�-�s��_bi11667�-�s��_bi11677�-�s��_bi11687�-�s��_bi11697�o(��_bi11707�o)��_bi11717sQ���J��J��JQ�JR�JW�J\�J]�J_�Jc�JZ�Jh�Ji�Jk�Jo�Jf�Jt�Ju�Jw�J{�Jr�J��J��J��J��J~�J��J��J��J��J��J��J��J��J��J��J�!		2!2!2!2!
9
9
9A
�������������J����Iaa�����������������a�Q��O�-���_bi1177%s��_bi11787%s��_bi11797�o*��_bi11807�-<��_bi1182�o+�-<��_bi1185%s��_bi11867-�s��_bi11877s-<��_bi1190o,��_bi11917%s��_bi11927ss��_bi11947sQ���N3�N3�J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��N�N�J��N�N�N�N�N�N�N�N�N#�N$�N(�N"�N*�N,�N0�J��N2�N3�N4!		�)�)
9
9�)2!
9A	�
9
)
9A	
9A
9A
	U	
G�
|������N4����k��������������������#
Q�O%sQ
��N:�N:�N8�N9�N:�N;!		�)w!W�N;��W


�����������������
Q�O-�sQ��ND�ND�N@�NA�NC�ND�NE!		2!%�+a�NE��a

�����������������
Q�=O-��_bi1208%s��_bi12097%s��_bi12107sQ��Ne�Ne�NJ�NK�NP�NT�NU�NY�NS�N]�N^�Nb�N\�Nd�Ne�Nf!		�)�)
9A	�K����Nf���U!))�����������������)
Q�QO-��_bi1216%s��_bi12177o-��_bi12187%s��_bi12197sQ��N��N��Nk�Nl�Nq�Nu�Nv�Nz�Nt�N�N��N��N}�N��N��N��N��N��N��N�!		�)
9�)
9A�_���N����e)77�����������������7	"Q�YO#-$��_bi1225%s��_bi12267%-�s��_bi12277&-�s��_bi12287sQ"��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N�!		�)2!2!
9A'(�g��� !!�N����c-77�����������������7	+Q��O,--��_bi1234.'p�s�7/�'ps'p70�'rs'r71�'ts't72'3�s'475-<��_bi1241%s%s%s%s%s%s%ss��_bi12497%s��_bi125076-�s��_bi12517sQ+��RG�RG�N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��R�R�R�N��R�R�R
�R�R�R�R�R�R�R�R�R �R!�R$�R%�R(�R)�R+�R/�R�R3�R4�R8�R2�R=�R>�R@�RD�R;�RF�RG�RH!		
9!
9!
9!
9!
9!�)�)�)
)
)�)�)
9A7�89:;�)2!
9A�<=>?
@A�
��
)**�RH��
����������������������!%DQ�qOE-F��_bi1257%s��_bi12587%s��_bi12597Go.��_bi12607%s��_bi12617%s��_bi12627sQD��R��R��RM�RN�RS�RW�RX�R\�RV�R`�Ra�Re�R_�Rj�Ro�Rs�Rh�Rw�Rx�R|�Rv�R��R��R��R�R��R��R�!		�)�)
9�)�)
9AU����H��BCC�R���ӏ9SS�����������������S
JQ�EOK-L��_bi1268Mo/��_bi12697No0��_bi12707sQJ��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R�!		
9
9
9A	OPSē�HII�R����W!))�����������������)
SQ�COT-U��_bi1276%s��_bi12777V-es��_bi12787sQS��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R��R�R�!		�)2!
9A	��Q�QRR�R���Q#))�����������������)
YQ�OZ-�sQY�R�R�R�R�R�R�R�!		2!%�+aWXXR�a

�����������������
]Q�-O^-<��_bi1288%s��_bi12897sQ]�R�R�R�R�R�	R�	R�	R�	R�R�R�R�!		�)
9A_;�c�[\\R��=�����������������bQ��Oc-d��_bi1295%s��_bi12967e-es��_bi12977f-es��_bi12987%s��_bi12997%s��_bi13007%s��_bi13017%s��_bi13027%s��_bi13037%s��_bi13047sQb�V_V_R�VVV	V
VVVVVVVVV V"V&VV*V+V/V)V3V4V8V2V<V=VAV;VEVFVJVDVNVOVSVMVWVXV\VVV^V_V`!		
)2!2!
)
)
)
)
)
)
9Aghijklm
An�
�``aa
V`
`�]��������������������qQ�WOr-s��_bi1310t-7s��_bi13117u-7s��_bi13127v-7s��_bi13137w-7s�
_bi13147x-7s�
_bi13157y-7s�
_bi13167z-7s�
_bi13177{-7s�
_bi13187|-7s�
_bi13197}-7s�
_bi13207~-7s�
_bi13217-7s�
_bi13227�-7s�
	_bi13237�-7s�

_bi13247�-7s�
_bi13257�-7s�
_bi13267�-7s�

_bi13277�-7s�
_bi13287�-7s�
_bi13297�-7s�
_bi13307�-7s�
_bi13317�-7s�
_bi13327�-7s�
_bi13337�-7s�
_bi13347�-7s�
_bi13357�-7s�
_bi13367�-7s�
_bi13377�-7s�
_bi13387�-7s�
_bi13397�-7s�
_bi13407�-7s�
_bi13417�-7s�
_bi13427�-7s�
_bi13437�-7s�
_bi13447�-7s�
_bi13457�-7s�
 _bi13467�-7s�
!_bi13477�-7s�
"_bi13487�-7s�
#_bi13497�-7s�
$_bi13507�-7s�
%_bi13517�-7s�
&_bi13527�-7s�
'_bi13537�-7s�
(_bi13547�-7s�
)_bi13557�-7s�
*_bi13567�-7s�
+_bi13577�-7s�
,_bi13587�-7s�
-_bi13597�-7s�
._bi13607�-7s�
/_bi13617�-7s�
0_bi13627�-7s�
1_bi13637�-7s�
2_bi13647�-7s�
3_bi13657�-7s�
4_bi13667�-7s�
5_bi13677�-7s�
6_bi13687�-7s�
7_bi13697�-7s�
8_bi13707�-7s�
9_bi13717�-7s�
:_bi13727�-7s�
;_bi13737�-7s�
<_bi13747�-7s�
=_bi13757�-7s�
>_bi13767�-7s�
?_bi13777�-7s�
@_bi13787�-7s�
A_bi13797�-7s�
B_bi13807�-7s�
C_bi13817�-7s�
D_bi13827�-7s�
E_bi13837�-7s�
F_bi13847�-7s�
G_bi13857�-7s�
H_bi13867�-7s�
I_bi13877�-7s�
J_bi13887�-7s�
K_bi13897�-7s�
L_bi13907�-7s�
M_bi13917�-7s�
N_bi13927�-7s�
O_bi13937�-7s�
P_bi13947�-7s�
Q_bi13957�-7s�
R_bi13967�-7s�
S_bi13977�-7s�
T_bi13987�-7s�
U_bi13997�-7s�
V_bi14007�-7s�
W_bi14017�-7s�
X_bi14027�-7s�
Y_bi14037�-7s�
Z_bi14047�-7s�
[_bi14057�-7s�
\_bi14067�-7s�
]_bi14077�-7s�
^_bi14087�-7s�
__bi14097�-7s�
`_bi14107�-7s�
a_bi14117�-7s�
b_bi14127�-7s�
c_bi14137�-7s�
d_bi14147�-7s�
e_bi14157�-7s�
f_bi14167�-7s�
g_bi14177�-7s�
h_bi14187�-7s�
i_bi14197�-7s�
j_bi14207�-7s�
k_bi14217�-7s�
l_bi14227�-7s�
m_bi14237�-7s�
n_bi14247�-7s�
o_bi14257�-7s�
p_bi14267�-7s�
q_bi14277�-7s�
r_bi14287�-7s�
s_bi14297�-7s�
t_bi14307�-7s�
u_bi14317�-7s�
v_bi14327�-7s�
w_bi14337sQq�n2n2VeVfVkVpVqVsVwVn V| V} V V� Vz!V�!V�!V�!V�!V�"V�"V�"V�"V�"V�#V�#V�#V�#V�#V�$V�$V�$V�$V�$V�%V�%V�%V�%V�%V�&V�&V�&V�&V�&V�'V�'V�'V�'V�'V�(V�(V�(V�(V�(V�)V�)V�)V�)V�)V�*V�*V�*V�*V�*V�+Z+Z+Z+Z+V�,Z,Z
,Z,Z,Z
-Z-Z-Z-Z-Z.Z$.Z%.Z'.Z+.Z"/Z0/Z1/Z3/Z7/Z.0Z<0Z=0Z?0ZC0Z:1ZH1ZI1ZK1ZO1ZF2ZT2ZU2ZW2Z[2ZR3Z`3Za3Zc3Zg3Z^4Zl4Zm4Zo4Zs4Zj5Zx5Zy5Z{5Z5Zv6Z�6Z�6Z�6Z�6Z�7Z�7Z�7Z�7Z�7Z�8Z�8Z�8Z�8Z�8Z�9Z�9Z�9Z�9Z�9Z�:Z�:Z�:Z�:Z�:Z�;Z�;Z�;Z�;Z�;Z�<Z�<Z�<Z�<Z�<Z�=Z�=Z�=Z�=Z�=Z�>Z�>Z�>Z�>Z�>Z�?Z�?Z�?Z�?Z�?Z�@Z�@Z�@Z�@^@Z�A^A^	A^A^A^B^B^B^B^B^C^ C^!C^#C^'C^D^,D^-D^/D^3D^*E^8E^9E^;E^?E^6F^DF^EF^GF^KF^BG^PG^QG^SG^WG^NH^\H^]H^_H^cH^ZI^hI^iI^kI^oI^fJ^tJ^uJ^wJ^{J^rK^�K^�K^�K^�K^~L^�L^�L^�L^�L^�M^�M^�M^�M^�M^�N^�N^�N^�N^�N^�O^�O^�O^�O^�O^�P^�P^�P^�P^�P^�Q^�Q^�Q^�Q^�Q^�R^�R^�R^�R^�R^�S^�S^�S^�S^�S^�T^�T^�T^�T^�T^�U^�U^�U^�U^�U^�VbVbVbVbVbWbWbWbWbWbXbXbXbXb#XbYb(Yb)Yb+Yb/Yb&Zb4Zb5Zb7Zb;Zb2[b@[bA[bC[bG[b>\bL\bM\bO\bS\bJ]bX]bY]b[]b_]bV^bd^be^bg^bk^bb_bp_bq_bs_bw_bn`b|`b}`b`b�`bzab�ab�ab�ab�ab�bb�bb�bb�bb�bb�cb�cb�cb�cb�cb�db�db�db�db�db�eb�eb�eb�eb�eb�fb�fb�fb�fb�fb�gb�gb�gb�gb�gb�hb�hb�hb�hb�hb�ib�ib�ib�ib�ib�jb�jb�jb�jb�jb�kfkfkfkfkb�lflf
lflflf
mfmfmfmfmfnf$nf%nf'nf+nf"of0of1of3of7of.pf<pf=pf?pfCpf:qfHqfIqfKqfOqfFrfTrfUrfWrf[rfRsf`sfasfcsfgsf^tfltfmtfotfstfjufxufyuf{ufufvvf�vf�vf�vf�vf�wf�wf�wf�wf�wf�xf�xf�xf�xf�xf�yf�yf�yf�yf�yf�zf�zf�zf�zf�zf�{f�{f�{f�{f�{f�|f�|f�|f�|f�|f�}f�}f�}f�}f�}f�~f�~f�~f�~f�~f�f�f�f�f�f��f��f��f��j�f��j�j	�j�j�j�j�j�j�j�j�j �j!�j#�j'�j�j,�j-�j/�j3�j*�j8�j9�j;�j?�j6�jD�jE�jG�jK�jB�jP�jQ�jS�jW�jN�j\�j]�j_�jc�jZ�jh�ji�jk�jo�jf�jt�ju�jw�j{�jr�j��j��j��j��j~�j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��n�n�n�n�n�n�n�n�n�n�n�n�n�n#�n�n(�n)�n+�n/�n&n1n2�n3!		2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!
9A�������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi^r6*9F�oppn3�F��
occ�����������������c���lQ�Om-nsQl��n<�n<�n8�n9�n;�n<�n=!		2!%�+ajkk�n=��a

�����������������
qQ��Or-s�
x_bi1443to1�
y_bi14447%s�
z_bi14457%s�
{_bi14467u-�s�
|_bi14477v-@s�
}_bi14487w-@s�
~_bi14497%s�
_bi14507xo2�
�_bi14517sQq��n��n��nB�nC�nH�nM�nR�nV�nK�nZ�n[�n_�nY�nc�nd�nh�nb�nm�nn�np�nt�nk�ny�nz�n|�n��nw�n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n�!		
9�)�)2!2!2!�)
9
9Ayz{|�}~���Dopp�n���D�W}}�����������������}
�Q�O%sQ���n��n��n��n��n��n�!		�)�!a����n���a%


�����������������
�Q��O�-��
�_bi1461%s�
�_bi14627%s�
�_bi14637�o3�
�_bi14647�o4�
�_bi14657�o5�
�_bi14667�o6�
�_bi14677%s�
�_bi14687%s�
�_bi14697%s�
�_bi14707%s�
�_bi14717�o7�
�_bi14727%s�
�_bi14737%s�
�_bi14747�-�s�
�_bi14757�-�s�
�_bi14767�o8�
�_bi14777%s�
�_bi14787%s�
�_bi14797%s�
�_bi14807%s�
�_bi14817%s�
�_bi14827%s�
�_bi14837%s�
�_bi14847�o9�
�_bi14857%s�
�_bi14867�o:�
�_bi14877�-<�
�_bi1489�-<�
�_bi1491%s�
�_bi14927%s�
�_bi14937�-�s�
�_bi14947s�-<�
�_bi1497�-�s�
�_bi14987�o;�
�_bi14997ss�
�_bi15017%s�
�_bi15027%s�
�_bi15037�o<�
�_bi15047%s�
�_bi15057�-es�
�_bi15067%s�
�_bi15077�o=�
�_bi15087%s�
�_bi15097sQ���v��v��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��r�n��r�r�r�r�r�r�r�r�r�r�r�r�r"�r#�r'�r!�r,�r1�r5�r*�r9�r:�r>�r8�rB�rC�rG�rA�rL�rM�rO�rS�rJ�rX�rY�r[�r_�rV�rd�rl�rp�rb�rt�ru�ry�rs�r}�r~�r��r|�r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��v�v�v�v�r��v	�v
�v�v�v�v�v�v�v�v$�v,�v0�v"�v2�v4�v8�r��v<�v=�vA�v;�vE�vF�vJ�vD�vO�vT�vX�vM�v\�v]�va�v[�vf�vg�vi�vm�vd�vq�vr�vv�vp�v{�v��v��vy�v��v��v��v��v��v��v�!		
 )�)
9
9
9
9
()
)
)�)
9�)�)2!2!
9�)�)�)�)
,)
.)�)
9
2)
9�)�)2!
9A���2!
9
9A	'�
9A	�'
6)�)
9�)2!�)
9
8)
9AKG�����������������������������������"�|����v���|��,,�����������������,)WO�Q�O��
�_bi1515�
�_bi1516sQ���v��v��v��v��v��v��v��v�!		�!-�Uu����v���u%

�����������������
�Q�O��
�_bi1522�
�_bi1523sQ���v��v��v��v��v��v��v��v�!		�!-�Uu����v���u%

�����������������
�'�s��v��v��v��v�!
9!YI����v���I!	

�����������������
�'�s��v��v��v��v�!
9!YI����v���I!	

�����������������
�'�s�v�v�v�v�!
9!YI����v��I!	

�����������������
�'�s�v�v�v�v�!
9!YI���v�I!	

�����������������
�'�s�v�v�v�	v�!
9!YI���v�	I!	

�����������������
�'�s�v�v�v�
v�!
9!YI���v�
I!	

�����������������
�'�s�v�v�v�v�!
9!YI���v�I!	

�����������������
�'
s�v�v�v�v�!
9!YI���v�I!	

�����������������
�'
s�v�zzz!
9!YI���zI!	

�����������������
�'
s�zzz
z!
9!YI���zI!	

�����������������
�'
s� z z z!z!
9!YI���z!I!	

�����������������
�'
s�$z$z$z%z!
9!YI���#z#%I!	

�����������������
�'

s�(z(z (z")z#!
9!YI���'z#')I!	

�����������������
�'
s�,z',z(,z*-z+!
9!YI���+z++-I!	

�����������������
�s�0z/0z01z1!
9!I?���/z1/1?!

�����������������
�'
s�4z54z64z85z9!
9!YI���3z935I!	

�����������������
�'
s�8z=8z>8z@9zA!
9!YI���7zA79I!	

�����������������
�'
s�<zE<zF<zH=zI!
9!YI���;zI;=I!	

�����������������
'
s�@zM@zN@zPAzQ!
9!YI���?zQ?AI!	

�����������������
'
s�DzUDzVDzXEzY!
9!YICzYCEI!	

�����������������
'
s�Hz]Hz^Hz`Iza!
9!YIGzaGII!	

�����������������
	'
s�LzeLzfLzhMzi!
9!YIKziKMI!	

�����������������
'
s�PzmPznPzpQzq!
9!YI
OzqOQI!	

�����������������
'
 s�TzuTzvTzxUzy!
9!YI
SzySUI!	

�����������������
'
"s�Xz}Xz~Xz�Yz�!
9!YIWz�WYI!	

�����������������
'
$s�\z�\z�\z�]z�!
9!YI[z�[]I!	

�����������������
'
&s�`z�`z�`z�az�!
9!YI_z�_aI!	

�����������������
'
(s�dz�dz�dz�ez�!
9!YIcz�ceI!	

�����������������
'
*s�hz�hz�hz�iz�!
9!YIgz�giI!	

�����������������
!'
,s�lz�lz�lz�mz�!
9!YI  kz�kmI!	

�����������������
$'
.s�pz�pz�pz�qz�!
9!YI"##oz�oqI!	

�����������������
''
0s�tz�tz�tz�uz�!
9!YI%&&sz�suI!	

�����������������
*'
2s�xz�xz�xz�yz�!
9!YI())wz�wyI!	

�����������������
-'
4s�|z�|z�|z�}z�!
9!YI+,,{z�{}I!	

�����������������
0'
6s��z��z��z��z�!
9!YI.//z��I!	

�����������������
3'
8s��z��z��z��z�!
9!YI122�z���I!	

�����������������
�_bi12�!#!6	?+455#	+������������������mprotect_write�!5#7!96	a';7887	#;/#������������������mprotect_exec�)I+K!96	a%=:;;'K'	+=1#������������������	_bi24�>-7s�s�1W1Y3]3_3c3e3i5k!?2!
9!!�-i<==/k/	5i9'������������������_bi29�%s�s�;w;y={={=}=�?�!?�9
9!�#_@AA9�9	?_5'������������������
dump_disasm�DE@�H�I�K�!FGDH	�!#	��PBCCG�G	KSGC�����������������	�_bi41�S�U�!	=)IJJQ�Q	U)������������������_bi45�[�]�!MV	Q=KLLY�Y	]=1#������������������s��_bi50�c�c�c�e�g�!PQR!�mNOOa�a	gmO=
�����������������
�_bi54�m�o�!	7#STTk�k	o#������������������_bi58��٥�#�%s�s�u�u�w�w�w��w�w�w�!y�y�y�y�{�!V�WX!�9
9!-�3�UVVs�s	{�kQ!�����������������!�	s��_bi65�����������![\R!�mYZZ�	�mE-
�����������������
�	s��_bi70�����������!QR!a]^^���	�a9-
�����������������
%�	s��_bi75�������������!a
B)�!o_``���	�o?
-
�����������������
%�	s��_bi80�������������!a
B)�!obcc���	�o?
-
�����������������
�!_bi84�����!�	UAdee�ǧ	�A1#�����������������%�	s��#_bi89�������������!a
B)�!ifgg�ԯ	�i9
-
�����������������
�%_bi93�����!	5!hii�ڹ	�!������������������'_bi97�����!lm	O;jkk��	�;+#������������������)
_bi106�����!U	O9noo���	�9)#������������������+
_bi110�����!U	O9pqq���	�9)#������������������-%rjit_for_each_iseq�������!_
o3B@=rss���	�=%������������������/
_bi118���!�	='tuu��	�'������������������s�	�1
_bi123��٥�#�%s�s��
�����������!����� !JxWR!X!�9
9!9�?�vww� �	���![+�����������������+	�3
_bi129��'�(!V	A+yzz�(�	�+������������������5
_bi133��/�0!	I3{||�0�	�3������������������7
_bi137��8�9!	YC}~~�9�	�C/#������������������s��9
_bi142��?�@�A�E�F!H��R!�!�����F�	��Q=
�����������������
�	s��;
_bi147��K�L�M�Q�R!�R!�!i����R�	�i7-
�����������������
�	s��=
_bi155��W�X�Y�]�^!�R!�!i����^�	�i7-
�����������������
�?
_bi162��e�f!	O9����f�	�9%������������������A
_bi166��m�n!�	I3����n�	�3������������������C
_bi170��٥�#�%s�s��w�x�y�z�{��{�}��!�~�����!V��X!�9
9!-�5�������	��kQ!�����������������!�s�	�E
_bi176�%s�s���������������������!���R!�9
9!'�/�������	��q!�����������������!�	s��G
_bi182�����������!��R!�!s������	�sA-
�����������������
�I
_bi186�����!V	O9������	�9%������������������K
_bi190�����!	I3������	�3������������������s�	�M
_bi195�%s�s���������������������![�WR!�9
9!'�/�������	��eQ!�����������������!�O
_bi203�%s�s���������������!���9
9!�%�������	��E7������������������s�	�Q
_bi212�%s�s���������������������!l��R!�9
9!'�/�������	��qQ!�����������������!�s�	�S
_bi218�%s�s���������������������!Q�R!�9
9!'�/�������	��eQ!�����������������!�	s��U
_bi224����
�
�
�
!QR!�!u����
�	�uC-
�����������������
�	s��W
_bi229��
�
�

�
�
!��R!�!i����
�	�i7-
�����������������
�	s��Y
_bi234��
�
�
�
�
!��R!�!i����
�	�i7-
�����������������
�s�	�[
_bi239��٥�#�%s�s��
#�
$�
%�
*�
+�
,�
-�
.��
.�
0�
9!�
1�
2�
4�
9!���R!X!�9
9!9�?�����
9�	���[+�����������������+	�	s��]
_bi245��
>�
?�
@�
D�
E!��R!�!u����
E�	�uC-
�����������������
�_
_bi249�%s�s��
K�
L�
M�
M�
N�
P�
Q!?�9
9!�%����
Q�	�9'������������������a
_bi254��
X
Y!�	E/����
Y�	/������������������c
_bi263�
`
a!�	I3���
a	3������������������e
_bi268�
h
i!�	I3���
i	
3������������������g
_bi272�
n
o!	9#���
o	#������������������i
_bi282�
t
u!	9#���
u	#������������������s�	�k
_bi287��s�s�
z
{
|
�
� 
� 
� 
� 
�!
�!��R!�!
9!)�3����
�	!�qQ!�����������������!�m
_bi292�$
�%
�!�	I3���#
�#	%3������������������o
_bi296�(
�-
�!��	YC���'
�'	-C/#������������������q
_bi304�0
�1
�!	I3���/
�/	13������������������s
_bi308�4
�5
�!�	I3���3
�3	53������������������u
_bi312��٥�#�%s�s�8
�8
�9
�9
�9
��9
�9
�9
�!:
�:
�:
�:
�;
�!V�WX!�9
9!-�5����7
�7	;�qQ!�����������������!�w
_bi318�>
�?
�!V�	YC���=
�=	?C/#������������������	s��y
_bi323�B
�B
�B
�C
�D
�![\R!�!s���A
�A	DsA-
�����������������
�{
_bi327�G
�H
�!V	O9���F
�F	H9%������������������}
_bi331�K
�L
�!V	I3���J
�J	L3������������������
_bi341�U
�V
�!�	I3���T
�T	V3�����������������́
_bi346�%s�s�Z
�Z
�[
�[
�[
�[
�\
�!���9
9!�%����Y
�Y	\�S7�����������������%s�
"�
"�
"�
�)	?9�7�
"�
G
c9

����������
%s�"�"�"�
�)	;5�7�"�=Y5

����������
%s�(&(&(&
�)	;5�X�(&(K(g5

����������
%s�)&$)&%)&&
�)	;5�X�)&&)Y)�5

����������
%s�+&3+&4+&5
�)	;5�X�+&5+=+Y5

����������
�-�s�9&}9&~9&�9&�
2![K�d�9&�9G9�K	

����������
�-�s�B&�B&�B&�B&�
2![K�d�B&�BCB�K	

����������
%s�Q*Q*Q*	
�)	;5�s�Q*	QGQc5

����������
%s�S*S*S*
�)	;5�s�S*S=SY5

����������
%s�_*?_*@_*A
�)	;5���_*A_C_�5

����������
%s�`*M`*N`*O
�)	;5���`*O`I`_5

����������
%s�k*�k*�k*�
�)	;5���k*�kGkk5

����������
%s�|*�|*�|*�
�)	;5���|*�|Y|�5

����������
�-�s��.w�.x�.z�.{
2![K����.{�A��K	

����������
%s��.��.��.�
�)	;5����.��=�e5

����������
%s��.��.��.�
�)	;5����.��=�g5

����������
%s��.��.��.�
�)	;5��"�.��?��5

����������
%s��2�2�2
�)	;5"�"�2�?��5

����������
%s��2W�2X�2Y
�)	;5"�"�2Y�AƑ5

����������
%s��2��2��2�
�)	;5"�"�2��?�w5

����������
%s��2��2��2�
�)	;5"�"�2��C�w5

����������
%s��64�65�66
�)	;5""	�66�=�Y5

����������
%s��6L�6M�6N
�)	;5"
"	�6N�C�g5

����������
%s��6U�6V�6W
�)	;5""	�6W�E�g5

����������
%s��6�6��6�
�)	;5""
�6��=�Y5

����������
%s��6��6��6�
�)	;5""
�6��=�Y5

����������
%s�6�6�6�
�)	;5""
6�Ae5

����������
%s�6�6�6�
�)	;5""
6�=Y5

����������
"-"s�6�6�6�6�
2![K""
6�M�K	

����������
%s�:::	
�)	;5"'":	Ao5

����������
%s�:-:.:/
�)	;5"1":/Ie5

����������
%s�:G:H:I
�)	;5"1":I?u5

����������
%s�:U:V:W
�)	;5"1":W?c5

����������
%s�:u:v:w

)	;5"1":wKq5

����������
%s�:�:�:�
�)	;5"1":�M5

����������
%s�:�:�:�
�)	;5"1":�S{5

����������
%s�":�":�":�
�)	;5"1"":�"I"e5

����������
%s�$:�$:�$:�

)	;5"1"$:�$K$�5

����������
%s�+>+>+>
�)	;5"1"+>+S+o5

����������
%s�,>,> ,>!
�)	;5" 1",>!,O,k5

����������
%s�;>j;>k;>l
�)	;5"!`"";>l;Q;m5

����������
%s�VBtVBuVBv
�)	;5"#`""VBvVOVk5

����������
%s�WB�WB�WB�
�)	;5"$`""WB�WKW�5

����������
%s�[B�[B�[B�
�)	;5"%`""[B�[O[e5

����������
%s�\B�\B�\B�


)	;5"&`""\B�\O\�5

����������
%s�]B�]B�]B�
�)	;5"'`""]B�]O]}5

����������
%s�^B�^B�^B�
�)	;5"(`""^B�^M^{5

����������
%s�_B�_B�_B�
�)	;5")`""_B�_M_�5

����������
%s�`B�`B�`B�
�)	;5"*`""`B�`K`u5

����������
%s�gF+gF,gF-
�)	;5"+`""gF-gWgs5

����������
%s�tF�tF�tF�

)	;5",`""tF�tCtk5

����������
%s�wF�wF�wF�
�)	;5"-`""wF�wWw5

����������
%s�xF�xF�xF�
�)	;5".`""xF�x_x�5

����������
%s��J��J��J�
�)	;5"/�"0�J��C�Y5

����������
%s��J��J��J�
�)	;5"1�"0�J��U�q5

����������
%s��J��J��J�
�)	;5"2�"3�J��A�}5

����������
%s��J��J��J�

)	;5"4�"3�J��S��5

����������
%s��N�N�N

)	;5"5�"3�N�W��5

����������
%s��N��N��N�

)	;5"6"7�N��C�{5

����������
%s��Rl�Rm�Rn
�)	;5"8C"9�Rn�?�5

����������
%s��R��R��R�
�)	GA":I";�R��G�kA

����������
%s��R��R��R�
�)	GA"<I";�R��A�eA

����������
%s��nO�nP�nQ
�)	GA"=p">�nQ�C�kA

����������
%s��n��n��n�

)	GA"?p">�n��U��A

����������
%s��n��n��n�

")	GA"@�"A�n��E�mA

����������
%s��n��n��n�

$)	GA"B�"A�n��=�]A

����������
%s��n��n��n�

&)	GA"C�"A�n��=�oA

����������
%s��n��n��n�
�)	GA"D�"A�n��=�{A

����������
%s��r.�r/�r0

*)	GA"E�"A�r0�G�wA

����������
"G-"s��rg�rh�rj�rk
2!WG"F�"A�rk�eũG	

����������
%s��r��r��r�

0)	GA"H�"A�r��W͇A

����������
%s��r��r��r�

4)	GA"I�"A�r��K�{A

����������
"K-"s��v'�v(�v*�v+
2!WG"J�"A�v+�GۋG	

����������
%s��vQ�vR�vS

)	GA"L�"A�vS�M�sA

����������
"No>��v~�v��v�

9
G9"M�"A�v��Y��9

����������
"Q-"s��v��v��v��v�
2!WG"O�"P�v����G	

=���������
y�a�! � � A!�!"a"�"!#�#�#A$�$%a%�%!&�&�&A'�'(a(�(!)�)�)A*�*+a+�+!,�,�,A-�-.a.�.!/�/�/A0�01a1�1!2�2�2A3�34a4�4!5�5�5A6�67a7�7!8�8�8A9�9:a:�:!;�;�;A<�<=a=�=!>�>�>A?�?>@�@FA�CDE�F\I(K�K�L9N<O�PQqR�RzT|U	W�X�Zy\�]X_�_�ayc�h>i[vPx@z}�}~;�{�w�	�����u�ՋS��&�����>��V�ƶ6��������f�ֹF���&����n�޼N���.����~��^��>��������n���N���.����q���k�������a���A�����������a���1����q�U���!���&���6���	�����6���	���c�(���v�����u�����i���1���X���1������I���A�������n����v���F�����N�����V����n����v���&�~���.�����6�����N�����V����^����f����n���v��&�~��.����6����>����F�����^����~��>�����f��&��N��	GE#<internal:rjit_c>"R	RJITGE<module:RJIT>"SCsingletonclass'UNLIMITED_ARGUMENTS3VM_ENV_DATA_INDEX_ME_CREF3VM_ENV_DATA_INDEX_SPECVAL/ARRAY_REDEFINED_OP_FLAGBOP_ANDBOP_AREF
BOP_EQBOP_EQQBOP_FREEZE
BOP_GE
BOP_GT
BOP_LE
BOP_LTBOP_MINUSBOP_MOD
BOP_ORBOP_PLUS#BUILTIN_ATTR_LEAF-HASH_REDEFINED_OP_FLAG3INTEGER_REDEFINED_OP_FLAG!INVALID_SHAPE_ID'METHOD_VISI_PRIVATE+METHOD_VISI_PROTECTED%METHOD_VISI_PUBLIC#METHOD_VISI_UNDEF1OBJ_TOO_COMPLEX_SHAPE_IDAOPTIMIZED_METHOD_TYPE_BLOCK_CALL5OPTIMIZED_METHOD_TYPE_CALL5OPTIMIZED_METHOD_TYPE_SENDCOPTIMIZED_METHOD_TYPE_STRUCT_AREFCOPTIMIZED_METHOD_TYPE_STRUCT_ASET#RARRAY_EMBED_FLAG+RARRAY_EMBED_LEN_MASK-RARRAY_EMBED_LEN_SHIFT-RHASH_PASS_AS_KEYWORDS+RMODULE_IS_REFINEMENTROBJECT_EMBED-RSTRUCT_EMBED_LEN_MASK%RUBY_ENCODING_MASK!RUBY_EVENT_CLASS#RUBY_EVENT_C_CALL'RUBY_EVENT_C_RETURN!RUBY_FIXNUM_FLAG!RUBY_FLONUM_FLAG!RUBY_FLONUM_MASKRUBY_FL_FREEZE'RUBY_IMMEDIATE_MASK%RUBY_SPECIAL_SHIFT!RUBY_SYMBOL_FLAGRUBY_T_ARRAYRUBY_T_CLASSRUBY_T_HASHRUBY_T_ICLASSRUBY_T_MASKRUBY_T_MODULERUBY_T_OBJECTRUBY_T_STRINGRUBY_T_SYMBOL!SHAPE_FLAG_SHIFTSHAPE_FROZEN#SHAPE_ID_NUM_BITSSHAPE_IVARSHAPE_MASKSHAPE_ROOT1STRING_REDEFINED_OP_FLAGT_OBJECT+VM_BLOCK_HANDLER_NONE+VM_CALL_ARGS_BLOCKARG%VM_CALL_ARGS_SPLATVM_CALL_FCALL%VM_CALL_FORWARDINGVM_CALL_KWARG!VM_CALL_KW_SPLAT)VM_CALL_KW_SPLAT_MUT)VM_CALL_KW_SPLAT_bit!VM_CALL_OPT_SEND!VM_CALL_TAILCALL)VM_CALL_TAILCALL_bitVM_CALL_ZSUPER/VM_ENV_DATA_INDEX_FLAGS!VM_ENV_DATA_SIZE#VM_ENV_FLAG_LOCAL/VM_ENV_FLAG_WB_REQUIRED+VM_FRAME_FLAG_BMETHOD)VM_FRAME_FLAG_CFRAME/VM_FRAME_FLAG_CFRAME_KW)VM_FRAME_FLAG_LAMBDAEVM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)VM_FRAME_MAGIC_BLOCK)VM_FRAME_MAGIC_CFUNC+VM_FRAME_MAGIC_METHOD)VM_METHOD_TYPE_ALIAS-VM_METHOD_TYPE_ATTRSET-VM_METHOD_TYPE_BMETHOD)VM_METHOD_TYPE_CFUNC'VM_METHOD_TYPE_ISEQ'VM_METHOD_TYPE_IVAR-VM_METHOD_TYPE_MISSING;VM_METHOD_TYPE_NOTIMPLEMENTED1VM_METHOD_TYPE_OPTIMIZED-VM_METHOD_TYPE_REFINED)VM_METHOD_TYPE_UNDEF+VM_METHOD_TYPE_ZSUPER1VM_SPECIAL_OBJECT_VMCOREblock_type_iseq)idRespond_to_missingimemo_callinfoimemo_iseq)rb_block_param_proxyrb_cArrayrb_cFalseClassrb_cFloatrb_cIntegerrb_cNilClassrb_cStringrb_cSymbolrb_cTrueClass)rb_mRubyVMFrozenCore+rb_rjit_global_events#rb_vm_insns_countrb_ary_clearrb_ary_dup+rb_ary_entry_internalrb_ary_push!rb_ary_resurrectrb_ary_store5rb_ary_tmp_new_from_values!rb_ary_unshift_mrb_backref_get3rb_ec_ary_new_from_values'rb_ec_str_resurrect-rb_ensure_iv_list_sizerb_fix_arefrb_fix_div_fixrb_fix_mod_fixrb_fix_mul_fix%rb_gc_writebarrier!rb_get_symbol_idrb_gvar_getrb_hash_arefrb_hash_aset'rb_hash_bulk_insertrb_hash_new+rb_hash_new_with_size#rb_hash_resurrectrb_ivar_definedrb_ivar_get/rb_obj_as_string_result#rb_obj_is_kind_ofrb_range_new#rb_reg_last_match#rb_reg_match_last#rb_reg_match_post!rb_reg_match_prerb_reg_new_ary!rb_reg_nth_match/rb_rjit_branch_stub_hit-rb_rjit_entry_stub_hit#rb_str_buf_appendrb_str_bytesize-rb_str_concat_literalsrb_str_dup'rb_str_eql_internalrb_str_getbyterb_str_internrb_sym_to_proc'rb_vm_bh_to_procval%rb_vm_concat_arrayrb_vm_defined%rb_vm_get_ev_const-rb_vm_getclassvariablerb_vm_ic_hit_p/rb_vm_opt_newarray_hash-rb_vm_opt_newarray_max-rb_vm_opt_newarray_min/rb_vm_opt_newarray_pack#rb_vm_set_ivar_id-rb_vm_setclassvariable3rb_vm_setinstancevariable#rb_vm_splat_arrayrb_vm_throw-rb_vm_yield_with_cfunc#rjit_build_kwhash-rjit_full_cfunc_return'rjit_optimized_call3rjit_rb_ary_subseq_length-rjit_record_exit_stack+rjit_str_neq_internal-rjit_str_simple_appendCALL_DATAICIDIVC
RArrayRB_BUILTIN
RBasicRObjectRStringRStructattr_index_t5iseq_inline_constant_cacheAiseq_inline_constant_cache_entry5iseq_inline_iv_cache_entry3iseq_inline_storage_entry+method_optimized_typerb_blockrb_block_type'rb_builtin_functionrb_call_data?rb_callable_method_entry_struct5rb_callable_method_entry_trb_callcacherb_callinfo#rb_callinfo_kwarg#rb_captured_blockrb_cfunc_t%rb_control_frame_trb_cref_t7rb_execution_context_struct-rb_execution_context_t+rb_iseq_constant_body%rb_iseq_location_t+rb_iseq_param_keywordrb_iseq_structrb_iseq_trb_jit_func_t!rb_method_attr_t'rb_method_bmethod_t#rb_method_cfunc_t7rb_method_definition_struct#rb_method_entry_t!rb_method_iseq_t+rb_method_optimized_t!rb_method_type_trb_proc_trb_rjit_options1rb_rjit_runtime_countersrb_serial_trb_shaperb_shape_t!rb_thread_structVALUEshape_id_trb_id_tablevm_call_handler+method_missing_reasonvm_ifuncrb_cref_struct+rb_scope_visibility_trb_vm_tagrb_atomic_trb_fiber_t'rb_trace_arg_structrb_iseq_typeiseq_insn_info!iseq_catch_tablerb_snum_t_Booliseq_bits_t%rb_code_location_t#iseq_compile_data'rb_hook_list_structrb_event_flag_t#rb_method_alias_t'rb_method_refined_tredblack_node_tccan_list_noderb_ractor_trb_vm_t!rb_native_thread)rb_thread_sched_itemrb_calling_info-rb_nativethread_lock_t'rb_unblock_callbackrb_mutex_structccan_list_headrb_waiting_list%thread_invoke_typerb_ext_confignewGEsingleton class	mmapmprotect_writemprotect_execrjit_insn_exits!rb_rjit_countersdump_disasmto_value-BASIC_OP_UNREDEFINED_Prb_iseq_line_norb_class_of1rb_callable_method_entry#METHOD_ENTRY_VISI!rb_simple_iseq_pSPECIAL_CONST_PBUILTIN_TYPERB_TYPE_P+rb_shape_get_shape_id%rb_shape_id_offset+rb_shape_get_iv_indexFL_TEST_RAWFL_TEST%rjit_for_each_iseqget_symbol_id1rb_vm_frame_method_entry/rb_class_get_superclass
ID2SYMobj_is_kind_ofimemo_type_p/rb_iseq_only_optparam_p-rb_iseq_only_kwparam_prb_obj_frozen_prb_intern%rb_method_entry_at;rb_shape_get_next_no_warningsrb_shape_id1rb_class_attached_object%rb_singleton_classArb_aliased_callable_method_entry)rb_yjit_get_proc_ptr1rb_shape_get_shape_by_idrb_iseq_checkrb_iseq_pathvm_ci_argcvm_ci_flagvm_ci_kwargvm_ci_midrjit_optsrjit_cancel_all#rb_vm_insn_decodeto_ruby!HAVE_LIBCAPSTONE!rjit_exit_traces#rb_vm_ep_local_eprb_hash_keys+rb_hash_stlike_lookuprb_obj_classrb_sym2idIrb_callable_method_entry_or_negative9rb_method_basic_definition_p1UNDEFINED_METHOD_ENTRY_PRCLASS_ORIGIN%RCLASS_SINGLETON_PG#rb_vm_insn_encode!rb_iseqw_to_iseqGEblock_type_iseqGE)idRespond_to_missingGEimemo_callinfoGEimemo_iseqGE)rb_block_param_proxyGErb_cArrayGErb_cFalseClassGErb_cFloatGErb_cIntegerGErb_cNilClassGErb_cStringGErb_cSymbolGErb_cTrueClassGE)rb_mRubyVMFrozenCoreGE+rb_rjit_global_eventsGE#rb_vm_insns_countGErb_ary_clearGErb_ary_dupGE+rb_ary_entry_internalGErb_ary_pushGE!rb_ary_resurrectGErb_ary_storeGE5rb_ary_tmp_new_from_valuesGE!rb_ary_unshift_mGErb_backref_getGE3rb_ec_ary_new_from_valuesGE'rb_ec_str_resurrectGE-rb_ensure_iv_list_sizeGErb_fix_arefGErb_fix_div_fixGErb_fix_mod_fixGErb_fix_mul_fixGE%rb_gc_writebarrierGE!rb_get_symbol_idGErb_gvar_getGErb_hash_arefGErb_hash_asetGE'rb_hash_bulk_insertGErb_hash_newGE+rb_hash_new_with_sizeGE#rb_hash_resurrectGErb_ivar_definedGErb_ivar_getGE/rb_obj_as_string_resultGE#rb_obj_is_kind_ofGErb_range_newGE#rb_reg_last_matchGE#rb_reg_match_lastGE#rb_reg_match_postGE!rb_reg_match_preGErb_reg_new_aryGE!rb_reg_nth_matchGE/rb_rjit_branch_stub_hitGE-rb_rjit_entry_stub_hitGE#rb_str_buf_appendGErb_str_bytesizeGE-rb_str_concat_literalsGErb_str_dupGE'rb_str_eql_internalGErb_str_getbyteGErb_str_internGErb_sym_to_procGE'rb_vm_bh_to_procvalGE%rb_vm_concat_arrayGErb_vm_definedGE%rb_vm_get_ev_constGE-rb_vm_getclassvariableGErb_vm_ic_hit_pGE/rb_vm_opt_newarray_hashGE-rb_vm_opt_newarray_maxGE-rb_vm_opt_newarray_minGE/rb_vm_opt_newarray_packGE#rb_vm_set_ivar_idGE-rb_vm_setclassvariableGE3rb_vm_setinstancevariableGE#rb_vm_splat_arrayGErb_vm_throwGE-rb_vm_yield_with_cfuncGE#rjit_build_kwhashGE-rjit_full_cfunc_returnGE'rjit_optimized_callGE3rjit_rb_ary_subseq_lengthGE-rjit_record_exit_stackGE+rjit_str_neq_internalGE-rjit_str_simple_appendGECALL_DATA@CALL_DATAGEIC@ICGEID@ID"T"UEunsigned longparseGEIVC	@IVCGE
RArray@RArray"T"VE
RArray"T"WE"T"V"T"UE	long"T"W"T"U"T"X"T"Y	capashared_rootlenauxptr	heaparybasicasGERB_BUILTIN@RB_BUILTINGE
RBasic@RBasic"T"VE
RBasicflagsklassGERObject@RObject"T"VERObject"T"W"T"V"T"X"T"X"T"Yivptriv_index_tblGERString@RString"T"VERString"T"U"T"W"T"V"T"X"T"W"T"U"T"V"T"Y
sharedembedGERStruct@RStruct"T"VERStruct"T"W"T"V"T"U"T"X"T"YGEattr_index_t@attr_index_t"T"UEuint32_tGE5iseq_inline_constant_cache7@iseq_inline_constant_cache"T"VE5iseq_inline_constant_cache"T"X"T"XentrysegmentsGEAiseq_inline_constant_cache_entryC@iseq_inline_constant_cache_entry"T"VEAiseq_inline_constant_cache_entry"T"Xvalue_unused1_unused2ic_crefGE5iseq_inline_iv_cache_entry7@iseq_inline_iv_cache_entry"T"VE5iseq_inline_iv_cache_entry"T"UEuintptr_tiv_set_nameGE3iseq_inline_storage_entry5@iseq_inline_storage_entry"T"WE3iseq_inline_storage_entry"T"V"T"Xrunning_thread	onceic_cacheiv_cacheGE+method_optimized_type-@method_optimized_type"T"UEintGErb_block@rb_block"T"VErb_block"T"Wcaptured
symbol	proc	typeGErb_block_type@rb_block_type"T"UGE'rb_builtin_function)@rb_builtin_function"T"VE'rb_builtin_function"T"UE
void *"T"U"T"U"T"Xfunc_ptr	argcindex	nameGErb_call_data@rb_call_data"T"VErb_call_data"T"X"T"XciccGE?rb_callable_method_entry_structA@rb_callable_method_entry_struct"T"VE?rb_callable_method_entry_struct�)"T"Xdefined_classdefcalled_idownerGE5rb_callable_method_entry_t7@rb_callable_method_entry_t"T"V"T"XGErb_callcache@rb_callcache"T"VErb_callcache"T"X"T"W"T"V"T"U"T"X	attrvbf	cme_call_	aux_GErb_callinfo@rb_callinfo"T"VErb_callinfo"T"Xkwargmid	flagGE#rb_callinfo_kwarg%@rb_callinfo_kwarg"T"VE#rb_callinfo_kwarg"T"U"T"U"T"Ukeyword_lenreferenceskeywordsGE#rb_captured_block%@rb_captured_block"T"VE#rb_captured_block"T"X"T"W"T"X"T"X	iseqifuncval	selfep	codeGErb_cfunc_t@rb_cfunc_tGE%rb_control_frame_t'@rb_control_frame_t"T"VE/rb_control_frame_struct"T"X"T"X"T"X"T"X"T"U"T"Xpcspblock_codejit_returnGErb_cref_t@rb_cref_t"T"VErb_cref_struct"T"Xrefinementsklass_or_self	nextscope_visiGE7rb_execution_context_struct9@rb_execution_context_struct"T"VE7rb_execution_context_struct"T"X"T"UE
size_t"T"X"T"X"T"X"T"X"T"X"T"X"T"X"T"UEuint8_t"T"V"T"X"T"X"T"Ustack_startstack_endstack_maxsizevm_stackvm_stack_sizecfptaginterrupt_flaginterrupt_maskfiber_ptrthread_ptrlocal_storage9local_storage_recursive_hashMlocal_storage_recursive_hash_for_tracestorageroot_leproot_svartrace_argerrinfo)passed_block_handlerraised_flag/private_const_referencemachineGE-rb_execution_context_t/@rb_execution_context_tGE+rb_iseq_constant_body-@rb_iseq_constant_body"T"VE+rb_iseq_constant_body"T"UEunsigned int"T"X"T"V"T"V"T"Z"T"Z"T"Z�"T"Z�"T"Z�"T"Z�"T"Z�"T"Z�"T"Z�#"T"Z�'"T"Z�+"T"Z�/"T"Z�3"T"Z�7"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"X"T"X"T"X"T"X"T"X"T"X"T"X"T"X"T"V"T"X"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"W"T"X"T"X"T"X"T"Uhas_leadhas_opthas_resthas_post
has_kwhas_kwresthas_block!ambiguous_param0!accepts_no_kwargruby2_keywordsanon_restanon_kwrestuse_blockforwardable	sizelead_numopt_numrest_startpost_startpost_numblock_startopt_tablekeywordflip_countscript_linescoveragepc2branchindexoriginal_iseq	list
singleiseq_sizeiseq_encodedparamlocationinsns_infolocal_tablecatch_tableparent_iseqlocal_iseqis_entriescall_datavariable!local_table_sizeic_sizeise_sizeivc_sizeicvarc_sizeci_sizestack_maxbuiltin_attrsprismmark_bitsouter_variables'mandatory_only_iseqjit_entryjit_entry_callsrjit_blocksGE%rb_iseq_location_t'@rb_iseq_location_t"T"VE/rb_iseq_location_struct"T"U"T"Upathobjbase_labellabelfirst_linenonode_idcode_locationGE+rb_iseq_param_keyword-@rb_iseq_param_keyword"T"VE+rb_iseq_param_keyword"T"U"T"U"T"U"T"U"T"X"T"Xnumrequired_numbits_starttabledefault_valuesGErb_iseq_struct@rb_iseq_struct"T"VErb_iseq_struct"T"X"T"W"T"X"T"V"T"U"T"V"T"Xobjlocal_hooks'global_trace_eventscompile_data
loader	execwrapper	bodyGErb_iseq_t@rb_iseq_tGErb_jit_func_t@rb_jit_func_t"T"UGE!rb_method_attr_t#@rb_method_attr_t"T"VE+rb_method_attr_structidGE'rb_method_bmethod_t)@rb_method_bmethod_t"T"VE1rb_method_bmethod_struct"T"Xhooksdefined_ractorGE#rb_method_cfunc_t%@rb_method_cfunc_t"T"VE-rb_method_cfunc_struct"T"U"T"U	funcinvokerGE7rb_method_definition_struct9@rb_method_definition_struct"T"VE7rb_method_definition_struct"T"Z"T"Z"T"Z"T"Z"T"Z�s��"T"W"T"Ucfuncaliasrefinedbmethodoptimizediseq_overload!no_redef_warningaliasedreference_countoriginal_idmethod_serialGE#rb_method_entry_t%@rb_method_entry_t"T"VE-rb_method_entry_struct"T"XGE!rb_method_iseq_t#@rb_method_iseq_t"T"VE+rb_method_iseq_struct"T"X"T"Xiseqptr	crefGE+rb_method_optimized_t-@rb_method_optimized_t"T"VE'rb_method_optimized"T"UGE!rb_method_type_t#@rb_method_type_t"T"UGErb_proc_t@rb_proc_t"T"VblockGErb_rjit_options!@rb_rjit_options"T"VErb_rjit_options"T"U"T"Uonexec_mem_sizecall_thresholdstatsdisabletracetrace_exitsverify_ctxGE1rb_rjit_runtime_counters3@rb_rjit_runtime_counters"T"VE1rb_rjit_runtime_counters"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U"T"U!rjit_insns_count1send_args_splat_kw_splatsend_args_splat3send_args_splat_not_arrayAsend_args_splat_length_not_equal=send_args_splat_cfunc_var_args7send_args_splat_arity_error5send_args_splat_ruby2_hash7send_args_splat_cfunc_zuperIsend_args_splat_cfunc_ruby2_keywordssend_kw_splatsend_kwarg-send_klass_megamorphic!send_missing_cmesend_private7send_protected_check_failedsend_tailcall'send_notimplementedsend_missingsend_bmethodsend_aliassend_undefsend_zsupersend_refined%send_stackoverflowsend_aritysend_c_tracing1send_is_a_class_mismatch?send_instance_of_class_mismatchsend_keywordssend_blockiseq%send_block_handler!send_block_setup%send_block_not_nil)send_block_not_proxysend_block_arg#send_iseq_kwparam5send_iseq_accepts_no_kwarg#send_iseq_has_opt)send_iseq_has_kwrest1send_iseq_ruby2_keywords?send_iseq_has_rest_and_capturedEsend_iseq_has_rest_and_kw_supplied'send_iseq_has_no_kw!send_iseq_zsuper9send_iseq_materialized_block%send_iseq_has_rest5send_iseq_block_arg0_splat#send_iseq_kw_call%send_iseq_kw_splatsend_iseq_splat?send_iseq_has_rest_and_optional+send_iseq_arity_error;send_iseq_missing_optional_kw3send_iseq_too_many_kwargs3send_iseq_kwargs_mismatch/send_iseq_splat_with_kw7send_iseq_splat_arity_errorMsend_iseq_has_rest_and_splat_not_equal'send_cfunc_variadic1send_cfunc_too_many_args5send_cfunc_ruby_array_varg1send_cfunc_splat_with_kw%send_cfunc_tracing1send_cfunc_argc_mismatch/send_cfunc_toomany_args%send_attrset_splat%send_attrset_kwarg'send_attrset_methodsend_ivar_splat%send_ivar_opt_send7send_optimized_send_no_argsEsend_optimized_send_not_sym_or_strKsend_optimized_send_mid_class_changedEsend_optimized_send_mid_id_changed9send_optimized_send_null_mid1send_optimized_send_send3send_optimized_call_block3send_optimized_call_kwarg3send_optimized_call_splatAsend_optimized_struct_aref_error3send_optimized_block_call5send_optimized_struct_aset+send_bmethod_not_iseq+send_bmethod_blockarg-invokesuper_me_changed#invokesuper_block!invokeblock_none%invokeblock_symbol!invokeblock_proc/invokeblock_tag_changed=invokeblock_iseq_block_changed-invokeblock_iseq_arity7invokeblock_iseq_arg0_splat9invokeblock_ifunc_args_splat5invokeblock_ifunc_kw_splatAinvokeblock_iseq_arg0_args_splat9invokeblock_iseq_arg0_has_kw'getivar_megamorphic!getivar_not_heap+getivar_special_const'getivar_too_complex-optaref_arg_not_fixnum)optaref_argc_not_one-optaref_recv_not_array+optaref_recv_not_hashoptaref_send-optgetconst_not_cached!optgetconst_cref-optgetconst_cache_misssetivar_frozen!setivar_not_heap'setivar_megamorphic'setivar_too_complex#expandarray_splat'expandarray_postarg+expandarray_not_array3expandarray_rhs_too_small?getblockpp_block_param_modified;getblockpp_block_handler_none3getblockpp_not_gc_guarded3getblockpp_not_iseq_block)compiled_block_countGErb_serial_t@rb_serial_t"T"UE%unsigned long longGErb_shape@rb_shape"T"VErb_shape"T"X"T"U"T"U"T"U"T"Xedgesedge_namenext_iv_indexcapacityheap_indexparent_idancestor_indexGErb_shape_t@rb_shape_tGE!rb_thread_struct#@rb_thread_struct"T"VE!rb_thread_struct"T"X"T"X"T"X"T"X"T"X"T"UE
int8_t"T"U"T"X"T"X"T"X"T"W"T"V"T"U"T"V"T"U"T"X"T"X"T"U"T"X	argskw_splatarglt_node
ractorvmntecschedmn_schedulable
seriallast_statuscallingtop_selftop_wrapperpriorityrunning_time_us-blocking_region_bufferthgroup/pending_interrupt_queue9pending_interrupt_mask_stackinterrupt_lockunblocklocking_mutexkeeping_mutexes)interrupt_exec_tasksjoin_listinvoke_arginvoke_typestat_insn_usageroot_fiberschedulerblocking!specific_storageext_configGEVALUE
@VALUE"T"U	findGEshape_id_t@shape_id_t"T"UGErb_id_table"T"[GEvm_call_handler"T"[GE+method_missing_reason"T"[GEvm_ifunc"T"[GErb_cref_struct"T"[GE+rb_scope_visibility_t"T"[GErb_vm_tag"T"[GErb_atomic_t"T"[GErb_fiber_t"T"[GE'rb_trace_arg_struct"T"[GErb_iseq_type"T"[GEiseq_insn_info"T"[GE!iseq_catch_table"T"[GErb_snum_t"T"[GE_Bool"T"\GEiseq_bits_t"T"[GE%rb_code_location_t"T"[GE#iseq_compile_data"T"[GE'rb_hook_list_struct"T"[GErb_event_flag_t"T"[GE#rb_method_alias_t"T"[GE'rb_method_refined_t"T"[GEredblack_node_t"T"[GEccan_list_node"T"[GErb_ractor_t"T"[GErb_vm_t"T"[GE!rb_native_thread"T"[GE)rb_thread_sched_item"T"[GErb_calling_info"T"[GE-rb_nativethread_lock_t"T"[GE'rb_unblock_callback"T"[GErb_mutex_struct"T"[GEccan_list_head"T"[GErb_waiting_list"T"[GE%thread_invoke_type"T"[GErb_ext_config"T"[GE	mmapmem_sizeGEmprotect_writemem_blockGEmprotect_execGErjit_insn_exits"T"U	addrGE!rb_rjit_countersGEdump_disasm	test�	fromto� ���GEto_valueGE-BASIC_OP_UNREDEFINED_PopGErb_iseq_line_nopos_iseq_addr	to_iGErb_class_ofGE1rb_callable_method_entrycme_addr==GE#METHOD_ENTRY_VISIcme_cme_addrGE!rb_simple_iseq_pGESPECIAL_CONST_P
_valueGEBUILTIN_TYPEGERB_TYPE_PGE+rb_shape_get_shape_idGE%rb_shape_id_offsetGE+rb_shape_get_iv_indexshape_idivar_idGEFL_TEST_RAWGEFL_TESTGE%rjit_for_each_iseqGEget_symbol_idGE1rb_vm_frame_method_entry	_cfpGE/rb_class_get_superclassGE
ID2SYMGEobj_is_kind_ofcGEimemo_type_p	_ptrGE/rb_iseq_only_optparam_p_iseqGE-rb_iseq_only_kwparam_pGErb_obj_frozen_pGErb_internstrGE%rb_method_entry_atme_addrGE;rb_shape_get_next_no_warningsshape
_shapeshape_addrGErb_shape_idGE1rb_class_attached_objectGE%rb_singleton_classGEArb_aliased_callable_method_entry	_cmeGE)rb_yjit_get_proc_ptrproc_addrproc_t_addrGE1rb_shape_get_shape_by_id_shape_idGErb_iseq_checkiseq_addrGErb_iseq_pathGEvm_ci_argc_ci_addrGEvm_ci_flagGEvm_ci_kwargkwarg_addrGEvm_ci_midGErjit_optsGErjit_cancel_all
reasonGE#rb_vm_insn_decodeencodedGEto_rubyGE!HAVE_LIBCAPSTONEGE!rjit_exit_tracesGE#rb_vm_ep_local_ep_eplep_addrGErb_hash_keys	hashGE+rb_hash_stlike_lookupkeyGErb_obj_classGErb_sym2idsymGEIrb_callable_method_entry_or_negativeGE9rb_method_basic_definition_pGE1UNDEFINED_METHOD_ENTRY_PGERCLASS_ORIGINGE%RCLASS_SINGLETON_PGE#rb_vm_insn_encodebinGE!rb_iseqw_to_iseqiseqwGEblock in RArrayGGE!block in RObjectGGGE!block in RString"T"UE	charG"T"UGE!block in RStructGGEGblock in iseq_inline_constant_cacheGGESblock in iseq_inline_constant_cache_entryGEEblock in iseq_inline_storage_entryGE9block in rb_builtin_function"T"UGE+block in rb_call_dataGGEQblock in rb_callable_method_entry_structGEGblock in rb_callable_method_entry_tGE+block in rb_callcacheGGE)block in rb_callinfoGE5block in rb_captured_blockGGGE7block in rb_control_frame_tGGGG"T"UE	voidGE%block in rb_cref_tGEIblock in rb_execution_context_structGGGGGGGGGGE=block in rb_iseq_constant_bodyGGGGGGGGGGGGGE=block in rb_iseq_param_keywordGGE/block in rb_iseq_structGGGE9block in rb_method_bmethod_tGE5block in rb_method_entry_tGE3block in rb_method_iseq_tGGE#block in rb_shapeGGE3block in rb_thread_structGGGGG"T"UGGG"T"UGG"T"XGEIblock (2 levels) in rb_thread_struct"T"U
RubyVM
ModuleCTypeImmediate
StructUnionPointerArrayBitField	Stub	Bool���,04HLPhl������������ ,0<@LP\`lp|�����������		(	,	D	H	`	d	x	|	�	�	�	�	�	�	

0
4
X
\
p
t
�
�
�
�
�
�
�
�
�
 8<PThl���������� 48HL\`pt������������



,
0
@
D
T
X
h
l
�
�
�
�
�
�
�
�
�
�
 04HLdh���������� 48TXpt��������,0HLdh����������<@\`|��������� $48PT`dx|������������$(<@PTdh�����������48PTpt����������(,<@X\lp����������04HL`dx|��������8<LPhl������������48LPlp��������$(<@PTpt�������� $@DPT\`hltx��������������8<\`|�����������8<LP`dx|����������04LPhl������������,0DH`dx|������������ 04DH\`x|������������  $ ( < @ T X d h p t � � � � � � � � � � !! !$!8!<!P!T!d!h!t!x!�!�!�!�!�!�!�!�!�!""","0"D"H"`"d"t"|"�"�"�"�"�"�"�"�"# #4#D#`#t#�#�#�#�#�#�#$$$4$D$`$|$�$�$�$�$�$�$%%<%L%h%�%�%�%�%�%�%&&(&4&@&T&h&t&�&�&�&�&�&�&�&'<'X'h'�'�'�'�'�'�'�'�'�'�'�'((((,(8(<(P(T(`(d(t(x(�(�(�(�(�(�(�(�(�(�(�()))(),)<)@)X)\)l)p)�)�)�)�)�)�)�)�)�)�)**(*,*H*L*\*`*t*x*�*�*�*�*�*�*�*�*�*�*++++0+4+D+H+`+d+x+|+�+�+�+�+�+�+�+�+�+�+,, ,$,8,<,P,T,h,l,�,�,�,�,�,�,�,�,�,�,--$-(-@-D-X-\-l-p-�-�-�-�-�-�-�-�-�-�-..$.(.D.H.d.h.�.�.�.�.�.�.�.�.�.///(/,/H/L/`/d/�/�/�/�/�/�/�/�/�/�/00(080<0D0L0P0X0`0h0x0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0111 1(10181@1H1P1X1\1l1|1�1�1�1�1�1�1�1�1�1�1�1�1�1�12222,202<2H2P2\2d2l2t2|2�2�2�2�2�2�2�2�2�2�2�2�2�2�23333,343@3D3d3�3�3�3�3�3�3�3�3�34$4H4P4X4d4p4|4�4�4�4�4�4�4�455,5L5T5p5x5�5�5�5�5�5�5�5�5�5�5666 6,646@6L6T6\6`6p6�6�6�6�6�6�6�6�6�6�6777 7(70747D7T7\7l7t7|7�7�7�7�7�7�7888 8(848<8@8`8�8�8�8�8�8�8�8�8�8�8�8�8�8�89999 9$949D9L9\9d9l9t9|9�9�9�9�9�9�9�9�9�9:::$:<:D:X:`:h:p:x:�:�:�:�:�:�:�:�:�:�:�:;;$;,;4;<;D;L;T;\;d;t;�;�;�;�;�;�;�;�;�;�;<<$<D<L<l<t<|<�<�<�<�<�<�<�<�<�<�<�<�<�<�<== =,=<=D=L=`=t=�=�=�=�=�=�=>>>(>@>P>l>x>|>�>�>�>�>�>�>??$?,?4?<?D?L?T?X?`?d?l?p?x?|?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?@@@@$@,@4@<@D@L@T@\@d@l@t@|@�@�@�@�@�@�@�@�@�@�@�@�@�@�@AA$A8ALA`AlA|A�A�A�A�A�A�A�A�A�ABBB,B8BLB\BdBpB|B�B�B�B�B�B�B�B�BCCC,C8CDCPC`ClCxC�C�C�C�C�C�C�C�C�CD,D4DPDXD`DlD|D�D�D�D�D�D�D�D�DEEE E(E0E8E@EPE`EhE|E�E�E�E�E�E�E�E�E�E�E�E�EFF,F<FHFPF\FdFhFtF�F�F�F�F�F�F�F�F�FGGG$G<GDG`GhGpG�G�G�G�G�G�G�G�G�G�GH H@HHHhHpHxH�H�H�H�H�H�H�H�H�H�H�H�H�HII I0I@IDIXIpIxI�I�I�I�I�I�I�I�I�IJJJ(JDJLJdJlJpJ�J�J�J�J�J�J�J�J�J�J�JKK K(K0K@KTK\KhKpK�K�K�K�K�K�K�K�KLLLL L(L0L8L@LHLPLXL`LhLpLxL�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�LMMMM M(M0M8M@MHMPMXM`MhMpMxM�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�MNNNN N(N0N8N@NHNPNXN`NhNpNxN�N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�NOOOO O(O0O8O@OHOPOXO`OhOpOxO�O�O�O�O�O�O�O�O�O�O�O�OP(PLPpP�P�P�P�PQQ4QHQXQxQ�Q�Q�Q�Q�Q�Q�QRR(R<RXR|R�R�R�R�R�R�RS$SDSXSpS�S�S�S�ST$T<T\TpT�T�T�T�T�TU0ULUlU�U�U�U�UV V<VXVpV�V�V�V�V�VW<WdW�W�W�W�W�WX4XTXlX�X�X�X�X�X�XY4YPYpY�Y�Y�Y�YZ Z8ZPZlZ�Z�Z�Z�Z�Z�Z[([<[T[l[�[�[�[�[�[\,\H\`\d\t\�\�\�\�\�\�\�\�\�\�\�\�\�\]] ],]<]H]\]`]p]�]�]�]�]�]�]�]�]�]�]�]�]^^^^$^,^4^<^D^L^T^\^d^l^t^�^�^�^�^�^�^�^�^�^�^�^�^__$_8_T_`_|_�_�_�_�_�_�_``$`8`H`T```t`�`�`�`�`�`�`�`�`�`�`�`�`�`�`aaa0a8a<aHaPaTahapata�a�a�a�a�a�a�a�a�a�a�a�abbbb$b(b<bDbHb\bdbhbtb|b�b�b�b�b�b�b�b�b�b�b�b�b�bccc,c4c8cLcTcXcpcxc|c�c�c�c�c�c�c�c�c�c�c�c�cddd(d0d4dHdPdTdpdxd|d�d�d�d�d�d�d�d�d�d�d�dee e$e4e<e@eHeTeXelexe|e�e�e�e�e�e�e�e�e�e�e�e�e�effff4f<f@fTf\flftfxf�f�f�f�f�f�f�f�f�f�fggg$g(g8g<gHgLgdghg�g�g�g�g�g�g�g�g�g�g�g�ghh(h0h4hPhTh`hdhxh|h�h�h�h�h�h�h�h�h�h�h�hiii,i8i<i\idipi�i�i�i�i�i�i�i�i�ijjj(j8j<jXjdjhjxj�j�j�j�j�j�j�j�j�j�j�j�jkkkk(k4k8kLkXk\khklk�k�k�k�k�k�k�k�k�k�k�k�kllll l,l4l8l`ldl�l�l�l�l�l�l�l�l�l�l�lmmm,m0m4mHmLmPmTmhmpmxm|m�m�m�m�m�m�m�m�mnn,n0nPnXn\ntnxn|n�n�n�n�n�n�n�noo4o8o<o@o`odoholopoxo�o�o�o�o�o�o�o�o�o�o�o�o�o�o�oppp p$p(p,p0p4p8p<p@pDpHplppptp�p�p�p�p�p�p�p�pqqqq q$q@qDqHqLqPqTq\q`qdqhqpqtqxq�q�q�q�q�q�q�q�q�q�qrrrrYARB<�l)#i�3353#5Q#����������������%m
%#i�C	C%K'K1Q3	I3	3Q3��������#��marshal_load�
CCE#G%!

�)'	�C%CGcK	C����������������	))'#'
s�M/M/M+M-M/M1%!]I!!K1KOI%
����������������	A�a��	GE%<internal:marshal>MarshalGE!<module:Marshal>	loadsingletonclassGE	load
freeze�
source	proc� ���GEsingleton classrestore+core#set_method_alias $<HL`h|����������YARB<
�l)#i�3#3#����������������k
k'�--3	9'	3'	��������ً#�!!	9	11	����������������'�#�//!/1!9/--1/	����������������A��A�	GE'<internal:nilclass>NilClassGE!<class:NilClass>	to_i	to_fGE	to_iGE	to_f�������������YARB $��l)#i����3#��#����������������)#i
O)#i�GG1�1���	
!Y!9	��9��������k	%''sO%''s�5)7)9)=)7+?+A+E+?-G	))'�#gG-g+��������k%''sO%''sOk!
%'#'!sO%'%'!s�IuUwUyU}UwWW�W�Ww�������������������	))))M�E�1�1��S'##��������#	'+����	�%--/sO�rb_queue_pop�HP!!!#!'!!%3'5!7)1�I%�
X'))5	'�S;��������	��������'+����	�%;-/sO�rb_szqueue_pop�@HIOIQKYKYK[K]MaMcMgMaQsSu!7)1�M%�P9))IuI	S�S;����������������'+����	�%A-/sO�rb_szqueue_push�8@w�w�y�y�y�y�{�{�{�{����!!"7)1�O'	�H=??w�w	��cK��������
��������	A�!�����	GE-<internal:thread_sync>
ThreadGE<class:Thread>QueueSizedQueueGE<class:Queue>popdeqshiftalias_methodGE%<class:SizedQueue>	pushenq<<GEpop�GEWcan't set a timeout if non_block is enabledtimeoutnon_block� ���raiseGGGE	pushG
object� ���ArgumentError <HL`hx|��������������,8DLTX\`hlx�YARB�(hl)#i�������C3���3����������������%m
%mk	'�	!C#C_������	sW	����W���������time_s_now�	
!!	�!�!
C3#����������������'�
'!��time_s_at���C)C+C-C/G[I_!�-'��C_CI�c
S��������'/Q�	���#�#�#�#�#�#�����%1-3sO�	���	�	�time_init_now
������
�	time_init_parse�%��time_init_args�	8H�e�g�m�q�s�w�{�}�����������������������������������������������!������������������!����! !"#$K)�
B�B�X+--����E�W���������	���������time_s_at1�ECI_!	M/MD_CI/����������������I�YA�)�	GE!<internal:timev>	TimeGE<class:Time>nowatinitializeGEnowin� ���GEat�microsecond	time
subsec	unit� ���GEinitialize�)OEwtimezone argument given as positional and keyword argumentsprecision�'	yearmon	mday	hourminsec	zone� ���strraiseGArgumentError���������������(08<LPT��������������YARB�l)#i�CCE3#EU#����������������k
))''
sOkk	))''s�!!!55K;SASAS=S?SAUC	!!?�;�	CU�;��������	�_bi12�!	)	�����������������_bi28�93;5!	)555;	����������������%�M9O;!!##K;KO	��������	��������A�)y��	GE#<internal:symbol>
SymbolGE<class:Symbol>	to_sid2name	name
to_sym
intern+core#set_method_aliasGE	to_sGE	nameGE
to_sym0<@T\hp|�������YARB��dl)#i�//13#1Q#����������������k
'
�K-K-Q/	
)
	/Q��������'Q���
��	�rb_hash_init�
�K
KKM!M%M'M)M+O-!

'�ABR	�K-KO�mS����������������	A�y�	GE<internal:hash>	HashGE<class:Hash>initializeGEinitialize�)capacity�
ifnone� ���blockifnone_unset������$(48DLTYARBpC�dl)#i�**+3#+#����������������k
kk	kk
k%o�-[+�]����������*		/�-q	*q'��������e�	�	�'rb_ary_shuffle_bang�(0---/1!�C!�8--1S5#����������������e�	+�	�rb_ary_shuffle���[[[])_+!�9!��'))[+[_S5#����������������'1Q��
e	�	3���
��ary_sample����1�3�9��;��Q�U�W�Y�]!3�I%�
�-//�]���aC��������		'?Q��	��	�
_bi135��

_bi137��c�e�g��������!����! '�C�;==�����;#��������'?Q��	��	�
_bi172��
_bi174���������������!����! '�C�CEE�����;#��������
�	oO�	���������!	%&OkBD[GII����[5	+����������������'U�;rb_builtin_basic_definition_p�))'UsOkU'W�;rb_builtin_basic_definition_p�M))'WsOkW'Y�;rb_builtin_basic_definition_p�)))'YsO))'Y'WsO'[�;rb_builtin_basic_definition_p�Q))'[sOk[']�;rb_builtin_basic_definition_p�)))']sO))']'[s�#�#��)�������������������������������������������������������� ""#"&&$%&)
��������)
��������)
					_!_!_!a!_!_!a!�
W�YQS�)�Y�c;;��������;	�ary_sample0��I�]!	A!!c//�]��!�����������������	
_bi132����!	9#e==����#�����������������
_bi169�����!	3gEE����
����������������%�o���������������
6o
M#�]iIk���#�S]/��������#_1?�	�
_bi223���	#��#O���O�
_bi227���������#O%���������!������������������������!
	:;!K�uB�qss���
��W!+����������������#_1?�	�
_bi241���#�	�ary_sized_alloc��#O���	��O�
_bi247���������#O����������!����������������������������������!
	:;>!!_�B�y{{���
��m+C����������������#_1?�	�!
_bi266���#�	�ary_sized_alloc��##O��	����	�O�#
_bi272���������#O��	�	�
�
!


�!
		:;>!!g��B����
�o-C����������������A��91�����I�	
A��	GE!<internal:array>ArrayGE<class:Array>shuffle!shuffle
samplefirst	lastfetch_valueswith_yjitGEshuffle!�
random�I� ���GEshuffle�GE
sample��n� ���aryGEfirst�)unspecifiedGE	lastGEfetch_valuesindexesblock	map!GE-block in <class:Array>	eachmapcollect
select
filter#core#undef_method+core#set_method_aliasGGGGE+block in fetch_valuesifetchGE	each_ivalueGEmap
result<<GE
select
Random


$
,
0
@
L
X
d
l
t
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
 (,<HPX\x����������� (,4@HLXYARB�l)#i�	U	U	W3#W	w#����������������%sOk
'
�		iSiSwU	9Q?		U	w?!���������_bi53��
�#�rb_warn_m��_bi55Q�	��	�rb_warn_m�#�(kkm%m)m+m-uS!o1o;o=oA�oAqOuS!q��������uS!
!?�})	�8iSiu�k!K����������������	A���	GE%<internal:warning>
KernelGE<module:Kernel>	warnmodule_functionGE	warn!uplevelcategory	msgs� ���[]Warning0<@T\pt|������YARBP�l)#iO)#i	�YY[
!S!3[I3����������������k'�	
)


��������k	k'�/ACWCWIY	9'YI'	���������pack_pack�8@!	�#�HC73�����������������pack_unpack���3?5A!	�!B��#%%/A/5C73��������	���������pack_unpack1�x�EUGW!	�##�
�+--CWCGC73����������������Q���)��	GE<internal:pack>Array
StringGE<class:Array>	packGE<class:String>
unpackunpack1GE	pack
bufferfmt� ���GE
unpack
offset�GEunpack1 $(<DPTdlp�������������YARBDK�
l)#i�c�c�c�3#�c�#����������������%m
k%m	%m%m
kkkkkk!k#k%k'k)!k+#k-%k/'k1)k3+k5-'5��	�!�)�+�3�5�M�O�_�'�0�7�<�A�G�L�Q�u�}���������������	�ҍ�	c�c��E7���������!tracepoint_new_s���!!	O+B%799�!��%�����������������%tracepoint_inspect��'�)!	G/=??�)��
�����������������#tracepoint_stat_s��1�3!	I-ACC�3����������	���������%tracepoint_trace_s��K�M!	Y/B+EGG�M��+�����������������	1tracepoint_allow_reentry��]�_!	Q;BIKK�_����������
���������'tracepoint_enable_m�()*+����!()*,	�1B	��MOO�cSC����������������	�
)tracepoint_disable_m�)�*�!	K3B[]]'�'*	�����������������)tracepoint_enabled_p�1�2�!	Q3_aa0�02�����������������+tracepoint_attr_event�8�9�!	S5cee7�79�����������������-tracepoint_attr_lineno�=�>�!	S7gii<�<>
�����������������)tracepoint_attr_path�B�C�!	S3!kmmA�AC!�����������������5tracepoint_attr_parameters�H�I�!	c?%oqqG�GI%�����������������3tracepoint_attr_method_id�M�N�!	S=suuL�LN�����������������3tracepoint_attr_callee_id�R�S�!	S=wyyQ�QS�����������������;tracepoint_attr_defined_class�v�w�!	cE{}}u�uw��������!���������/tracepoint_attr_binding�~��!	S9��}�}��������#���������!)tracepoint_attr_self�����!	S3!�������!��������%���������#9tracepoint_attr_return_value�����!	cC!�������!��������'���������%Atracepoint_attr_raised_exception�����!	cK�������	��������)���������'7tracepoint_attr_eval_script�����!	cA#�������#��������+���������)Itracepoint_attr_instruction_sequence�����!	sS!�������!
��������-��������AQ�q�A!��Y�)�i�A�	�	�	q
�	GE-<internal:trace_point>TracePointGE%<class:TracePoint>newinspect	stattraceallow_reentry
enabledisableenabled?event
lineno	pathparametersmethod_idcallee_iddefined_classbinding	selfreturn_value!raised_exceptioneval_script)instruction_sequenceGEnew
eventsGEinspectGE	statGEtraceGEallow_reentryGE
enable
targettarget_linetarget_threaddefault� ���GEdisableGEenabled?GEeventGE
linenoGE	pathGEparametersGEmethod_idGEcallee_idGEdefined_classGEbindingGE	selfGEreturn_valueGE!raised_exceptionGEeval_scriptGE)instruction_sequence4DH`ht|����������� 0DTlpx��������������


 
$
0
4
<
@
L
P
X
\
l
p
|
�
�
�
�
�
�
�
�
�
�
�
�
�
�
YARBdg<�l#i	�'''3#'L#
����������������%m%m%m	%m)#i
O)#i�ss/�1�U�W�{�}ݍ����""L	
A�A�

''L�'��������e�
s�
�ast_s_parse�8Pssssu-w/!!!�5#�hs/sw�g
[����������������e�
3s�
�!ast_s_parse_file�0H��7�9��S�U!!!�?#�
`/11�U���g
[����������������e�
;s�
�ast_s_of� 8��]�_��y�{!!!�/#�P799�{���g
[��������	���������=node_id_for_backtrace_location�ߋ�!!	kG%?AAݍ��%����������������kIkKkMkOkQkSkUkWkY!k[#k]%k_'ka)'a���������������������������	U�U�EGG����)
��������kK+kM-kO/kQ1kY3'Y�(�0�8�@�HHK	%�%_cee""K_���������	ast_node_type�����!	A%gii���	�
�����������������+ast_node_first_lineno�����!	S5kmm���	������������������
+ast_node_first_column�����!	S5oqq���	������������������)ast_node_last_lineno�����!	S3!suu���	�!�����������������)ast_node_last_column�����!	S3!wyy���	�!����������������%s�#�%s7o5���������!����������!	U9U9!��{}}���	��5�����������������'ast_node_all_tokens�����!	Y1)������	�)�����������������#ast_node_children�����!	Q-%������	�%�����������������!ast_node_inspect�����!	Q+'������	�'��������!���������!ast_node_node_id�����!	Q+'������	�'��������#���������+ast_node_script_lines�����!	Q5������	�	��������%��������%s�����%s۝%s۝M���'��'���%sMs�O���ٷ%s'�Ms�O�s�#����	�	�
�
�
�
��
�
�
�
�
�
�����������������������
�
��!��!M]9K9�!O9�!�!�!Q9�!�!�!M9�!�!�!��}F����	F�U�{��������'��������{�%ast_node_locations���!	S/%����	%��������)���������3ast_location_first_lineno�)�*�!	a=%�mm(�(	*%��������+���������!3ast_location_first_column�1�2�!	a=%�qq0�0	2%��������-���������#1ast_location_last_lineno�9�:�!	a;'�uu8�8	:'��������/���������%1ast_location_last_column�A�B�!	a;'�yy@�@	B'��������1���������')ast_location_inspect�IJ!	Q3���HH	J��������3���������s�%s%s7�ٷ�۷7s٫�I%s%s7�'���'��7sٯ��	���#�����������������������������������������������������������������������������������
�����������
^_`�!K9M9�!�!�!�!O9Q9�!�!�!�!�!�xu>�}����M�>�Q�s��������s	A����)�a�!��Y�Q�!	�	�	�!�
q
�
I�	GE<internal:ast>�%AbstractSyntaxTreeGE7<module:AbstractSyntaxTree>parseparse_fileof=node_id_for_backtrace_location	NodeLocationGEparse�#keep_script_lineserror_tolerantkeep_tokens�I�
string� ���GEparse_file�pathnameGEof�	bodyGE=node_id_for_backtrace_location%backtrace_locationGE<class:Node>	typefirst_linenofirst_columnlast_linenolast_column
tokensall_tokenschildreninspectnode_idscript_lines
sourcelocationsGE!<class:Location>GE	typeGEfirst_linenoGEfirst_columnGElast_linenoGElast_columnGE
tokens!each_with_objectGEall_tokensGEchildrenGEinspectGEnode_idGEscript_linesGE
source���������lines-[]byteslice[]=	joinGElocationsGGGGGGEblock in tokens��tokenaloc	last<=><=>=<<
RubyVM�������$HP\`hl���������������$<@PXhx���������$(8<LP`dtx������������� ,4<@LPTX\`dx|���������YARB$,|l)#iO#����������������
S?���?	����������������%m
k%m	%m'��	�G�]�_�{�}����	%�%a	����a!���������dir_s_open�	����dir_s_close	O���8@�!�#�%�%�+�/�;�;�G!�C�G!

%!-�YBQ	�H�G���g�����������������dir_initialize�08�[�]!
	�'B�
@#%%�]��SC3�����������������dir_s_aref����y�{!	�)	�'))�{��cSC��������	��������	��e�	��
��
��	�	dir_s_glob�����������������������! /�EB
��577�����{c����������������
	��dir_s_closeO���7�;�=#!_+5CE�=��E5��������Q���Q���	GE<internal:dir>DirGE<class:Dir>	openinitialize[]	globGE	openencoding	name� ���blockdirGEinitializeGE[]	base	sort�)	args� ���GE	globflags�Ipattern
_flags� ��GEensure in open$!HLPdlp���������������$(08<HT\`tYARB�4<l)#i�YY[3#[�#����������������k
kk	'�}#�9�W�W�Y	W?	Y�?��������#��!io_read_nonblock�}
}!�#!
�1'	�}#}�cK	C����������������	�#io_write_nonblock����7�9!	�-#��!##�9��C73����������������+�
#��io_readline����=�?�A�C�U�W!�/%	�
�'))�W���S
C��������	��������	A�i��	GE<internal:io>IOGE<class:IO>read_nonblockwrite_nonblockreadlineGEread_nonblockexception�)lenbuf� ���GEwrite_nonblock� ���GEreadline$/chomp�seplimitHLP`hl|����������� (,4YARB%x�<l)#iO)#i	O)#i�KK����]#]#]$

1�1S$�S����������������k	kk
kkkk))''sOk!))'#'!sOk%'%�
%7Oa%u+�1�7�7�3�5�7�=�C�C�?�A�C�I�I�K	'!'!i�e�
K��C+��������	k-k/k1k3!k5#k%))'7'1sOk9'k;)k=+k?-kA/kC1kE3kG5kI7kK9%o;��c�w������Źɿɿɻɽɿ�����������/�9�A�E�E�[�	'!M	��}�)++��[�K1��������	kS=k1?))'7'1sOk-AkECkUEkWG'W�c�p�u�u�u�u�u�|���"�"�#	'!A�?�OQQ]#]��'��������	%�
!Y[[
	��������	��������'a�')!]__%%)����������������%�9;!cee77;	��������
��������'k�QS!giiOOS����������������'a�c#e%!mooa%ae����������������#�w)y+!qssu+uy	����������������ً�/�1!uww�1��	����������������%��;�=!y{{�=��	����������������%��G�I!}�I��	�����������������
_bi101��a�c!	)����c�������������������
_bi120��u�w!	)����w�������������������
_bi134�����!	9#�������#�����������������
_bi181�����!	3�������
��������!���������	
_bi190�����!	3�������
��������#��������'a�Ʒǹ!#�iiŹ��
��������%���������
_bi209�����!	3�������
��������'��������%�����!#���������������)���������

_bi236�����!	3�������
��������+��������#_ka�	�
_bi253����#O���O����%����������#O%���������!��������������������!
	S!�!�!U�mB��������[)+��������-��������	%��
�!!����
	��������/��������%���!!����	��������1���������
_bi285���!	1������������3��������%���ss�0�0�0�0��0�0�1�!^�!�)-!�����/�/1�C+��������5��������%�:�;�!)%���9�9;%��������7��������ۋB�C�!!���A�AC	��������9��������'��;rb_builtin_basic_definition_p�))'�sOk�I'ϋ#�E�F�F�G�G�G�G�I�I�Z�
I��������Z�
	�!1�k��+�E�EZ�#��������%�d�e�!'#���c�ce#��������=���������
_bi370�r�s�!	1׋�p�ps��������?���������
_bi382�~!	1ك�||��������A���������
_bi391��
�!	1۷������������C���������
_bi400���!	1��������������E���������
_bi409��!�"!	1����"����������G��������#_ka�	�
_bi335�%��#O���O�s���	����������#O%�N�N�O�O�!R�R�S�S�T�T�U�U�U�S�S�S�S�S�W�X�!
	tu!�!�!W�oB����I�I
X�c);��������I��������i99�)q�I��!i�	a�a�	ae	�		
a
�
A�]�
Y
�
	am�	GE%<internal:numeric>NumericIntegerFloatGE<class:Numeric>dupreal?	realinteger?finite?infinite?imaginary	imagconjugate	conj+@+core#set_method_aliasGE<class:Integer>-@~absbit_lengtheven?magnitude	odd?ord	sizetimes	to_i
to_intzero?ceildivnumeratordenominatorwith_yjitGE<class:Float>	to_fpositive?negative?GEdupGEreal?�)GE	realGEinteger?�GEfinite?GEinfinite?GEimaginaryGEconjugateGE+@GE-@GE~GEabsGEbit_lengthGEeven?GGE	odd?GEordGE	sizeGEtimesi	succ<GE	to_iGE
to_intGEzero?GEceildivother-divGEnumeratorGEdenominatorGE1block in <class:Integer>
downto#core#undef_methodGE	to_fGGGGEpositive?GEnegative?GE
downtoto	from	pred>=HLPht�������������$(<DHP`ht|������������$(048@DPTXdhtx�������������������� $(04@DLP\dhpt��������������$,4YARBP!��l)#i�������C3���3����������������%m
%m%m	%m%m
%#iO%k'sO))''sO%m%k'sOk))''sO%m!k#k%))'''%sOk))#i+!Ok-#k/%%m1'%m3)k5+k7-%m5/%m71%m93%m;5%m=7%m?9%#i;�	 � �.�.�f�f�����������������������������
�
�
�
W�
\�
\�
\�
\�
\�
��
��
��
��
��
��
��
��
��
��
�
�
�::%H-N7S8S@XAXKjLjToUoZv[v`}a}q�r����	

A)C!A)C!C!�
5��	�������++��������+	�	�%I-KsO�
_bi276�%-M�'OsO%��ss��sQu1'Q�sQu1/�����	�ractor_create�X`%%#++39AG3OQUOWY_aceikmoquy{}s!		)*+,-])_Iace)g!i!')k!')���BT	BhEGG�I�G����������������G
	�
_bi289�!�$�!	5moo � $�����������������
_bi303�/�2�!	3qss.�.2
��������	��������e�'yQ�	��	��Ó%{-}sO�ss�
'y��	'�����	���
�	-ractor_select_internal�ABC@��ff�f�fg�g�g�g��g�g�g�g�g�i�i�i�i�j�j�i�l�l�o�o�o�o�o�o�o�p�!	DABEFG�!])!�!�!�u�)	"uwwf�fp��=�+����������������+
�
_bi431�����!	3�������
��������
��������))''s�������������C!kW�������W
����������������	�

_bi442�����!	9#�������#�����������������#ractor_receive_if�������!,
q1B@A�������A#�����������������#ractor_receive_if�
�
�
�!,
o1B@?���
�

?!�����������������
_bi600�B@h	p	
X�
[�!UB*	�#�&x���
W�
W
[S?3�����������������
_bi644�B@


��
��!UB*	�#�* ���
��
�
�S?3�����������������
_bi711�
��
��!	?)���
��
�
�)�����������������
_bi717�
�
_bi718��
_bi719�	�
_bi720�'��	Qu1��-����-�Qu1�
�-��
��-�Qu1'��Qu1'�/�
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��!						-`a')�!')�!')')�X�����
��
�
���?s3����������������3	
�
_bi730�
��
��!	;%���
��
�
�%����������������%'�s�
��
��
��
�	�)
I?���
�
�
�?	!���������!
_bi751�
�
�!	9#���
�
�
�#��������#���������#
_bi769�!	1�����������%���������%
_bi786�!U	A+���+��������'���������	�	�'
_bi828��)
_bi832�q@��;;<D%!@!D%!Uq*�5#�:����:%:D�G
3��������)���������+%ractor_local_value�I,J-!t	]//���H-HJ/��������+���������--ractor_local_value_set�O6P7!tw	q7;���N7NP;'#��������-���������+%ractor_local_value�T?U@!t	a/3���S@SU3��������/���������--ractor_local_value_set�YJZK!tw	q7;���XKXZ;'#��������1���������/Eractor_local_value_store_if_absent�kSlT!t	�O3���jTjl3��������3���������1
_bi880�pWsZ!	1���oZos��������5���������3
_bi887�w]z`!	1���v`vz��������7��������%s�%������������5ractor_require�~e~eigi�q!�o�q!	�=)!�KB����}q}��9%��������9��������%sOk�='���t�t������A9_I�������I��������;����������o?s��v�w������!
�!iU������	�U#��������=���������-�sOk�A'���|�}�������
��!��u������?�u5

==��������
�s�%�������������s�����������!��������!	�=!?!)�7B���������I-��������A��������I���I�Y�)�	�	i
�
a�%
y
�
1q�Y�Q�����	GE#<internal:ractor>
RactorGE<class:Ractor>newcurrentcount
selectreceivesingletonclass	recvreceive_if	send<<yield	takeinspect	to_s	nameRemoteErrorclose_incomingclose_outgoingshareable?make_shareable[][]=store_if_absent	mainmain?_requireprivate+core#set_method_aliasGEnew�E7must be called with a blockE�Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.experimentalE:	args� ���blockblocraise	warnuplevelcategory!caller_locationsfirst	path
linenoGEcurrentGEcountGE
select�)�EYspecify at least one ractor or `yield_value`�yield_value	move�Iractors� ���#yield_unspecifieddo_receive
empty?
delete!GEreceiveGEsingleton classGGEreceive_ifGGE	sendobjGEyieldGE	takeGEinspectE#<Ractor:#E EE>id
status+GE	nameGE'<class:RemoteError>
ractorattr_readerGEclose_incomingGEclose_outgoingGEshareable?GEmake_shareable	copyGE[]symGE[]=valGGGEstore_if_absentGE	mainGEmain?GE_requirefeatureG_activatedGE_activated��prependGE'block in _activatedE<RactorRequire>requirem%set_temporary_nameGErequireArgumentError
Kernel
Module����������� 08@HP\dl|���������,08<\����$0<PX`lp|������������,8DHLX\ptx������������������$0@DX\pt����������������� $48HLP\`x����������YARB�J�
�l)#iO)#i	���������
!c!C��C����������������%mk	%m%m
%m%m%m%m%m%m!%m#%m%%m'%m)!')�G	G)QImKmS�U�]�_�g�i�y�{Ƀ��������>�>�Z�Z�l�l�x�x�������	u�u�

���G9��������k#%'s�����������	/)WG+--����G���������
��	'5�#gc_start_internal� 8II!I#I%I'K)!�;!	�
P133G)GKsO
C����������������		�
��	'5�#gc_start_internal� S=SASCSESGUI!�;!	�8ACCQIQUsO
C��������	��������		�gc_enable�oQqS!	3EGGmSmq�����������������gc_disable��[�]!	9IKK�]����������
���������gc_stress_get��e�g!	9%MOO�g��	�����������������	gc_stress_set_m��w�y!*	Y)1QSS�y��1%�����������������gc_count�ˁ̓!	9WYYɃ������������������#��
gc_stat���������!/�c[]]����C#	����������������#�	#��gc_stat_heap�������������!2/�/�acc����c3
#����������������#���	�gc_config_get��
_bi321�)�'ks�%m-osO�gc_config_set�%qs�>�>�?�?�?�?�!A�A�B�B�B�C�C�C�C�F�J�!H�H�H�J�!	9u!w)w)U��gii>�>J�_++����������������#��#��
K���
_bi349�%}-sO�
_bi353�Z�Z�[�[�[��[�\�\�[�]�]�^�^�^�^�a�d�!/�!w)C�[�y{{Z�Zd�I##�����������������
_bi365�m�q�!*	M7���l�lq7#�����������������
_bi377�y�|�!	1���x�x|�����������������
_bi387�����!	1���������������!���������
��	'5�#gc_start_internal�
(
������������!�;!	�*@�CC�����W
C��������#��������		Ya����A�Y�y��	Y	�	�
�	GE<internal:gc>GCObjectSpaceGE<module:GC>startgarbage_collect
enabledisable
stressstress=count	statstat_heap
configlatest_gc_info'measure_total_time=%measure_total_timetotal_timeGE)<module:ObjectSpace>module_functionGEstart�full_markimmediate_markimmediate_sweep�)� ���GEgarbage_collectGE
enableGEdisableGE
stressGEstress=	flagGEcountGE	stathash_or_keyGEstat_heapheap_nameGE
configimplementation�EaAttempting to set read-only key "Implementation"�	hashinclude?raiseGElatest_gc_info�E1non-hash or symbol given==GE'measure_total_time=GE%measure_total_timeGEtotal_timeGArgumentErrorTypeError48<LTdhx����������0@D\pt|�������������


 
$
,
0
8
H
L
X
d
h
t
�
�
�
�
�
�
�
�
�
�
 $<@X\lp�YARBPC�Dl)#iO)#i	���'�'�'�
!c!C�/C����������������kk	kk
k))''sO%sOkkk'�%_-�A�U�{�����}�������������%�	!!#9U�Q�

�%�A#��������	%k)')s�*�*�*�/�	+)K;%'''�'/;	���������_bi20�)+!	)-//%%+	�����������������rb_obj_clone2� a+c-!	�%!�
(133_-_c3'#��������	���������_bi69��?�A!	'9;;�A������������������%�O%��M�Q�S�U!!
AB7=??�U��7	��������
��������	#_EG�	�
_bi124�%���c�c�m�q!�u�y�{!
!w+BMACC�{��M#����������������	#_EG�	�	
_bi163��#O�O���������#���������!����������������!
&��������++��������+��������++-��������+-!/�KB�IKK������������������������	�
rb_f_float�)#������!*)+	�#��OQQ����SC3�����������rb_f_integer�)#����"�$�!*.)/�)'	��Y[[�$sO	C��������	##_
eG�g_#iGUO�k'ms�#�+�+�+�+�,�,�,�,�.�!,��������.�!7!q!=�;B@�acc*�*.�K'�����������������wc����s�����������@���������	<{!M)	+�)}sKu���	�}1���������rb_f_float1�����!*	G!'}QQ����'�����������������rb_f_integer1� �$�!*	S%/[[�$/����������������#���������<	1-�c�����������������-��������Y!}�a�
�s!��7��Q�	GE#<internal:kernel>
Kernel
ModuleGE<module:Kernel>classclonefrozen?tap	thenyield_self	loopFloatInteger+core#set_method_aliasmodule_functionGE<class:Module>with_yjitprivateGEclassGEclone
freeze� ���GEfrozen?GEtapGE	then��)GE	loopeGEFloatexceptionarg� ���GEInteger	base� ���GEwith_yjit
RubyVMe	YJITeiadd_yjit_hookblock	sendGErescue in loop�$!
resultGGGE5defined guard in with_yjitStopIteration����			$	,	4	@	H	P	`	h	p	|	�	�	�	�	�	�	�	�	�	�	�	



 
$
,
0
4
8
@
D
H
P
\
d
l
p
|
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
4enc/encdb.soenc/trans/transdb.so;`+k%��|+\|��+���2���t2����2���3����3��84���41��X5J��L?i���N|��|T���Y����`����i����n���q���Hq���q|��r�����������d����(� ��(�%���.��ИT��$�]��d����ě���8����̜���0��������<����l����d���������P���l�)���1����;����D����_���i��Ժs��`��������̼���<���������p������$���8����^��@�h��|����`���������\���������������	��|�����$��x���� ����<�����*��<�8����Q������������������������f�������`�������������~������`����8���$
����������@*���B���G���_���w��t�������p$����&��� '���(���*���*���.$��d04���4>��<7V��lDp���D���E���tE����E���L����i��� j����n���ho���p���@u���x"��8y/���y<���3��@�������������L�]��x�n��p������9����b��(�P���b��̓g�����������X�����1���V��0�[��P�k��P�t�������l��������������������������������h�����#��d�7��(�G���[��`�t��t�Y����^����������L���`�����%����*��(�8����I��T�W������0��������������������@���������"���D����I����W������H�������l������X������T�����'���P��|�Z���d��T�n������4���������t���)���*��x*��+�� /���=&���B9��\FL��Xd���]���D^����c��,m����v	��L�����-��Џ=���Q��ܕ���d��������|����ؚ���������4���̜��(���̢3����D���M��x�R��p�W��d�`����i��X�r�������|��������������$���������������S���\����j���x��������������4��������������
���
��x#��89��>��<C���H��@��������������4����"����#����<���>���A���B���C����D��M��O&�_E��_O�`]��ab�nl��{���}��X�������������������$���
�4� �8�*�L�/�P�=��G���V�|�d�$�r��������������������X�������ܼ��D�����������0��X�#���1�l�6���;�`�@���E���J���O���d�,�n�������������x������&���9���:���<��B9� C[��Fi�hOw�XP���Q���R��S���S���U��W"��XL��\k�gy�o~��o��Xw���x��D������� ���Ԫ��ܱ��0��H����-�X�2�X�7���<�ܿD��c�T�{����������������������X���@�������T�������P�'���0��>���Q�L�_���j� �r�����h��x�� ��l���%��+��x+���-��|.��\H��J�LN&�x_6�LdD�@ef��l���r���r���r���s���u��|���|��D}��x}��p��8�����(���+�L�9�<�C���M�̌[�4�i���{�D�������<���$���p�������<�������l���Ț�����|�	�X�
	�0�:	���C	��L	���_	����	�Ȧ�
����P���P���Ī���������Ȭ������$���t�������	���@���N�p�`��r�t�z�����@���`���8������� ���T�������������
���
��#
�\�-
���7
���@
���N
���\
�8�j
���x
����
����
��<�
��F�
��i�
�w�
�L�|��+<��+��,��,,\�T,|�l,���,���,���,���,��,\��,l�-��-��(-��H-|�t-��-\��-���-��.��.��h.�|.L��.\��.���.��.��.<�/|�H/L��/��/��0L�h0���0l��0��1|�1 �d1| ��1\"�2$��2�%��2|'�(3�(��3�*�L4,��4�-�l5|.��5�.��5l/��5�/�6|0�D6�1��6\2��6l3�7�3�$7�3�@7�3�\7\4��75��7�5�8�5� 86�48\6�P8�6��8\7��8�7��8�7��8�8�$9L?�p9�@��9,A��9�B�<:\D��:�D��:LE��:�E��:|F�;LH�0;�H�\;�I��;�I��;�J��;,M��;�Q�H<|S�|<�W��<�W��<<X��<\X�=lX�=LY�d=�Y��=<Z��=lZ�>�Z�0>|\�|>|^��>�^��>L_�`?�_��?�_��?<b��?�c�@�d�4@�g��@�g��@|j��@,k�ALk�4A�k�lA<m��A�o�B�p�DB<t��B�t��B,v�C�v�4C\{�xC�{��C�|��C<}�Dl}�<D\~��D�~��DL��Dl��D��0E���|E<���E��F���dF|���F����F���F��(G,��<G̋��G����G|��H���@H\���H|���H���$I��8I���IL���I,���I<��J���<J���PJ��dJL��|J����J����J���J<���Jܛ�@K��\K����K̝��K���@L���L���L<���L\���L���Lܢ�XM����M<���M̤� N̦��Nl���N����N��4O���O,���O<��P̯� P���TP���pPܰ��P,���Pl���P̱��Pܳ�@Q��`Qܵ��Qܸ�0R��DRl��hR����RL���Rܺ��R��$S���PS\���S����S,���S����S���0T����T����T���U���8U���TU���|U���Ul��V���XV���lV����V,���V,���V��Wl��<W<��lW����W���W��(X,��lX<���X��� Y���4Y\��hYl��|Y���Yl���Y���<Z����Z����Z|�� [���@[��\[���[���[��\��\��,\��D\,�\\\�t\���\���\���\��\L��\|�]��0],�H]<�\]���]\��]���]��^�	�@^<��^|��^���^���^��^��,_��@_�d_L�|_|��_���_��_L��_��4`��H`��`<��`��$a�"��a�"��al#��a,$��a�$��a\%�b�&�<b�'�\b�'�pbl(��b)��b�)�cl*�0cl+��c�,��c,.��cL.�d|.�0d�/�\dL1��d5��e\6�f�6�f�6�0f<7�Df�7��f8��f<9��f<:�$g�;��gL<��g�=��g�=��g�>��g�?�$hLA�`h�A��hLC��hE��h�F�Li<I��i�L�j�S�8j�U��jLV��j�g� k�h�pk<o��k�u�l\v�<l<���l���m���4m���m����m<��n���Ln��`n<���n���n\��o���8o̎�Lȏ��o���o���ol���o\��8p<���p��ql��\q̾��q<��,r\��@r���|r����r����rl���r����rl��sL��Ts<���s����s���$t��`t<��ttl���t|���t\���t��$uL���uL���uL��0vl��Dv����v����v���w���,w��|w����wl���w|���w���4x���x<���x|��$y���8y���Py���y���y���y����y���y���y���@z���\z\���z����z���z<���z���{�({<�x{���{���{���{���{���{��|<�H||�x||	��|�	��|�
��|�� }�h}���}���}���}l��}\�(~L�L~\��~���~l������"�8�\&����&���|'�Ѐ�)��|*�(��*�@��*�T�+�h�\+����,���<-�ԁ�-���/�<��6���7��|7�@�8�t��8����8�؃9���9�<��9�T��9�l��:����<�܄\=�(��=�@��=�l��>����B�Ѕ�B���B��C� �<C�8�lC�P��C�h�,D����D�ĆF���F�,��F�H�G�\�\G�x��G����G�ć,H��lH����I�8�<J�d��J���L����L�؈,M��<M��LM��|M�0��M�D�,P���<P����W�(�lZ�d��Z�x�����\��,�,��X�l��������,���l��4����P����x�����<����l��Ќ|���L��0���h�,����<����\���|��<�<���������<��̎�������x�L����l������������̏����,��������l��$���8���L�\��x���������А���<����������(����<������������ԑ����<��8�\��L����x���������|������`���������̓����L���l��(����@����X�l�������<�ؔ�����H�<�p��������L�ؕ\���<�l�d���������\�̖�	�(�
�<��
�������
�ؗ�
��|����0�,�L����<�8���x�|������<���|���� �,�8���P���d�,�����������(���x�l�؛���,�L�|�t�,����D���X����L���|�����؝�����0���X��l�\���,� �|�H� ���� �؟� ��<!���!���!�(��"�P��"���|#���$�Ƞ\$�ܠL%�<��%�x�&����'��(�@�<(�\�l(�x�)����)�ܢ�)���\*�0�+����+����,���,� �<0�d�\1����2��3�<��3�h�4����4�ԥ6���6�<�<7�x�\7���,9�Ħ�9���<<�(��<���l>���,@�ܧ�@���A��\B�H��B�d��B���<C���\D��,E�0�F����F�Щ�G���H�h�J���\J�ت�J��<K�D��K�X��K����L��LN��O�<��O����P�Ԭ�Q��\R�@�,T���,U���U�@�,W����W�ԮX� ��X�\��Y���Z���,[�ԯ�[��|\�0�L]�\�^����^����a����b�,�le���g��Lj�H��l���\p���\q�@�Lt����v����y�T�܇�������l��$����L����t����Ե���4�����|��̶���0�����\�� �|����|��8������,����������t�l�������X����,������P��������L�4�\�����������n�������<��x�,��,������������������T�|��������\����<��8������<��t���������t������������,�T�<���<�p�L%��L3����>����@���B�`��G���\J�D�|K���lS���,T���U�D�|W���|Z�0�,^����_���|g����m�4��m�H�n�\��n���o������P���d�|��x�ܐ������,�\��������������� ����P�|����|���������l���������|���������������t�\�������`�������������x�ܷ�(��������������|���<�D�����������\��
��������p�,�����@����<)�l�\,���5����>�P�lH���R���V���\���\�0�,��t�܌��������<��������ܑ�@�,����l���̕��|��D����X����l�������������������ܗ������H�̘�\�ܘ�p������|��������L����� �|��4�|��l�<����L����L����\���|��4��\L���<��������������ܧ�4,��Pܨ��<����������������4L��\<���|���l��������,\��hl���������� ��d����,������$<��Tl�������������L���������L�����<l��T���<��
�l�@<!���,��\/�	�/�@	<0�`	�0��	,6��	�9�4
�9�H
�9�\
:�p
L>��
�>��
�C�,F�X�F�tG��G��|G���H��LS�<|S�P�S�h�S��|T��U���U���U��,V�8
�V�T
�V�h
�X��
,Y��
<Y��
LY�\Y��Y�D�Y�`LZ�|�Z���Z��[��\[��[�(�[�L�]���]��,^���_�$�`�`�`�xb��<b��|e��e�,g�h�g��h���h��h�,�i���o���u�T�|��|}���~�@L��`��|����܁��������\��������4��L����܃������������,���L�����4���H����܈��\���܉����0L��P���t����|�����̐�H���t<���,��\��,L���|����������<�� \��4���H������l���<���ܥ�8���L\������,���<��l��8���lܩ���������������L������L��h\������������0��H̭��������,���������������x������L���l�� ,��4 <��H ���l ��� ���� \��� ���!ܼ� !���D!ܽ�\!���t!���!,���!l���!����!���"|�� "̿�<"��X"<��t"����"|���"���#���<#���X#��l#����#����#\��$���,$���L$,���$\���$����$���$L��%���@%<��`%L��t%l���%����%���&|��L&,���&l��4'��d'����'����'���(|���(,��$)l���)����)����)��� *����*���+���P+���+����+<���+���,���,,���H,��d,����,���,<���,|��-���0-���P-|���-����-<���-l���-���-��.��,.���P.���.����.���/���H/��d/���|/���/��0��0��00��H0,�x0<��0|��0���0��0<��0\�1��,1��H1��d1���1\��1���1���1��2	�,2�
�h2L��2\��2��3��3
�03��`3L��3l��3|��3���3��04|�|4��4l�5�05��d5,�x5��5��5��6��H6�|6\��6���6,��6<��6��P7���7��7,��7���7���7�!�H8L"�x8�"��8�#��8�#�9�#�9l$�@9�$�\9�%��9�%��9l'��9�'�:(�$:L(�L:�(�l:�(��:L)��:�)��:�)�;�*�$;�*�@;,+�\;<+�p;�+��;�+��;l,�,<�,�h<<-��<\-��<|-��<�-��<�.�=l/�P=|/�d=�/�x=�/��=�/��=�0��=�0��=l1� >�1�8>�1�P>�1�h>,2��>L2��>\2��>�2��>�2��>3��>,3�?<3� ?\3�4?�3�P?�6��?8��?<8��?\8��?�8��?�8�@�8�(@9�<@\9�d@�9��@,:��@�:��@,;�$A,<�`A�<��A,>��A<?�B,@�LB,A��B�A��B�A��BC��BlC� C�C�<C�C�XC�C�tC,E��C�F�D\G��D�H��D�I�0E,K��ElL��E�M�TFN��F,N��F�N��F�N��F�P�HGQ�dG�Q��GlR��G�R��GLT�HH|T�dHU��H<U��H�U��HV� IlV�TI�V��I,W��I�W��I�W�$JlX�XJ�X��J�Y��J<Z��J�Z�HK[�\K<[�xK�[��K\��K�\�(L�]�LL�]�hL^��L\^��LL_��L<`�0Ml`�DM�`�|M<g��M�g�N�i�DNlj�pN�j��N<n��Nlp��N�p�O�x�XO�|��O�}��O�}�P�}�P���TP\���PL���Pl��Q��,Q̐�|Q����Q��� R���XRܖ�lR����R���R���Rl��S���,S��hS\���S����S|��Tܟ�XT\���T����T����T<���T��@Ul���Ṳ��U����U\��DV���`V���V\���Vܩ�W<��\W����W̰��W���0Xܳ�lX����X����X|��Yܷ�4Y��PYl��pY����Y����Y,���Y����Y���Z��$Z��@Z̺�tZ���Z����Z����Z�� [L��X[���t[����[L���[����[��\���L\,���\����\���\L��]���T]����]����]|��4^L���^����^����^����^����^���^,��_<��_L��0_\��D_���\_���t_���_\���_����_����_���_��`,��`<��(`L��<`���h`����`����`l���`����`���`<��aL��(a���La���a<���aL���al���a����a���b���b��8b<��TbL��hb\��|b|���b����b����b����b���c���0c���Dc��Xc<��lc����c|���c���d���(d��DdL��`d|��|d����d����d���4e,��pe����e���f���8f,��Tfl���f����f����f���g|��Lg,��xg\���g����g,���gl��h���(h���Ph,��lhl���h����h���il��4i<��hi����i���4j���`j��|j����j,���j<��k���4k��`k|���kl���k����k���(l,��LlL��`l���|l���l����l��m���,m��Hm���tm����mL���m����m���m<��n���n��dnL���n���n���n���n|�@o��|o\��o��p�<p���p���p���p�q��Tq��lq���q	��q\	��q,
�rL
� r�Lr��xr\
��r<�s�\sl��sl�t��HtL�ttl��t��t���tl�u��Tu���uL��ul��u���u\$�(v�%�tv,&��v�&��v�'�<w�(��w\)��w|)��w,*�$x|*�@x�*�px�/��x�7�LyL?��y,@�zlA�Dz�A��z�A��zB��zC�{�C�d{�C�x{\D��{�D��{�E� |lF�`|LH��|�_�}la�$}|a�8}�a�L}�a�`}�a�x}�a��}�a��}�a��}b��},b��}<b��}lb�~�b�~c�H~,c�\~lc�|~�c��~�c��~|d��d��d�0�d�\f���f��h��|h���i�H�Lk����l�Ȁ<m���|m���m�4��m�H�,n�t��n����n����w�ȁ\x��<y�0��y�D��z�x�{���\{����{��\|���|�T�{}���|}���~���~����X�����������(�\��t������̈��L������0�L��\����x�܊���l��Ć����\��@����t�<������؇���,���,��4�<��p�L����l���l��0�l��T�,��p�������Љ�����<���L��$���\�<��Ċ���������<����|���������,��Ћ|���������� �L��H������̟�܌����,��8����\����x�l���������<������@���X�|����,����\��Ȏ������<�\��X�|�����������ȏl���\��T�\����������������̾�H����������\������T����h�������̒\���������(����������,����l���,��4����T�,��p������,��Ԕ\������,����l�����,����L����l��ܕ���0���L�<��l�\����|������������̖��������,����`������,���������������(����@���T���p�<������������̘���|������8���X�|��x��������������̙���L���\���\��`����x������L�������Ț����l��H�������ț����,�� �|��H����d��������������������H��������Нl�����H���t��������<�\�|����؟��D��
�x����l�����ؠ�$���P����|�������<�ԡ��������0�<�P�\�l�L���������̢��������8���d��|�\���\ �ȣ|!���!��<$�d�L$���|$���L'�Ĥ�'��(���)���+�L�,�d�\,�|�<-����/���2�p��4��7�0�|7�L��7�`�L9�ȧ�:��<<��>�H�|?�l��?����C����C�Ԩ�C���D���D�D�lE���|E����E����E�̩,F��LF��|F�,��F�H��J�t��J����J����J���LK��lK����K���K�(��K�@�L�X��L�|�,M����M�ī�N���N��<O�4�\O�L�|O�d��O���P���<P���Q���<Q���Q�@��Q�X�R�p�<R���\R���lR����S���S���S��T�,�,T�D��T�`��T���,U���LU�̮lU���U����U���U�,�V�D�LV�\�|V�t��V����V����V���W�دLW��|W���W� ��W�8��W�P�X�h�LX���lX����X����X�Ȱ�X��Y���LY���Y�8��Y�X�Z�x�\Z����Z����Z�ر[���\[���[�,��[�D�|\�|�,]����]�Ȳ�]�ܲ�^���^�8�\`�`��`�x�a���|a���a� �lb�X��b���lc�ȴ�d��|f�T�<g����g����h�ص�h���h���k�P�l�d�,l�x��l����l����l�Զ�m��ln�$��n�@�lo�d�p����p���Lq�з�q��,r���r�$�s�@�|s�\��s�x�\t����t���<u�Ը�u���|v���v�0�Lw�L��w�h�Lx���|y���|z�ԹL{���<|���}�D�~�X��~����~����~������<������@�|��l�L��������܃��l������$�̄�<����T�����������������ȼ����L��<���X�̐���\����,��Խ�������$�,��D�|�����������о������� ������ܠ�����H�,��t�̤���̧��,���L������4�\��l�����������,����\��D�l��X����x�ܯ���|����������������\�\�������������������l�����������$���@�,��X������<���������l��D�|��x�\���������l���������L���l������,����@����T����h���|�L��������������������������� ���<�\��\�������������0��������������L���0�\�D���X���l�����,���|�����������\��|�8���T�����	���\	����	���	�,��
�X��
����
���,����$�l�@���\�����l��������������\�,���|����������������,�,�|�L���d�����\�������!� ��!�<��!�X��!�p��"����#����#��$�,�l$�D��$�\�)���L)���|)���,,�$��,�\�/����/����/��0�,�,0�@�l0�\�<1�|�L1���\1����1���L2�,�\2�@�|2�T�|4�x��5����5����6����6����8�<�l9�|��:����:���?��\?�$��?�8��?�P��@�x��@����@���A���|A����A����A��,B���B�<��B�X��B�l��B����E���,F���\G��lG� �|G�4��G�H��G�x��G���,H���LH����H���I���<I��\J�D�lJ�X��J�p��J���K���,K���\K����M���N�<��N�P��N�d�\O����O���P��lQ�d�,S���<S����S����S���S�0��S�L�LT�t��T���U����U���U�,��V�l��W����W����Z��|[�T��\���\`����`�0�\a�\��a����b����c�8��d����f���|q����q����s��u�L��u���Lv����w�0�x�|�lz����z��{�$�,{�8�\{�T�l{�h�|{�|��{���|����|���\�<���X�����������,����܁�����T�\���������������h���������@���\�l������������,����@�,����|����l���l��h���������L��H������<����\��,�|��������������������\�����ܮ�����h�ܯ���ܼ���̽�D�������������H�|�������������������4�\��`����|�������������������(�����������,��T�|���������|��,���|�|�����,���X���l�L���\�������\�<����L���� �\�!����!��"���,"���"�P�,#�|��#���,$��|$����$�(�%�<��%���,&��l&���&��\*�l��*����+���,�h��-����/�(��0����1����3�h��3�|�,5����5��|6�H�7���\7��8���8�L�9�x�<>���?���?�4��@�X�|A����A����A���A���H��H�,�I�l�I��J��,J��<J��LJ��|J���J���J��J�$�J�8K�TK�h,K�|<K��LK���K���L���L�lM�X�M�tN��<N��\N��|N���N���N�O�0�O�\\P�x\Q���Q���Q���Q�lR�4�R�P�R�d�S��,U���U���V� �W�T�X���X��Y��LY��,Z�,<Z�@l[���\���]�^�0|^�T�^�l�^��`���`��`��`�0<a�h�a���a���a��<b���c�0	�c�D	�c�X	�c�l	�e��	�i��	�i�
�i�(
lk�x
�k��
�l��
�l��
�l��m�\,n���n��,o��\p�$�p�<�p�h�q���s��t���u�8
lv�T
�v�h
�v��
�x��
�x��
|�0\}�T�~�x����L���܄�Hl��tL�������̈�|��@<��l\�����������8\��p��������<��������� ���P����,����������L��4���X���L���l���ܖ��<���l������l��@����������\��4|��H|���ܞ������������$���h������l��,,��X����ܥ�����|�������|��$���PL��|̩��\��������4|��X<��|,���L���|�����(<��T���|ܰ�����L���ܱ�\��<ܲ�|���<���L���l���ܳ�8|��d\���|���|���������0ܶ�H���`,�������̸�����$<��<|��T���h���|̹���������|�� ܻ�X��l<�������������( \��d l��x ���� ���� ���<!����!<���!����!��",��$"|��P"���|"���",���"���",���"L��#��� #���4#|��`#����#����#����#,���#<��$���D$���$<���$|���$���%���H%��|%����%����%<��&l��4&���h&l���&����&���&,��,'<��@'L��T'��x'���',���'<���'����'��(<�� (���<(���T(,��t(����(���(���)���0)���X)<���)l���)����)����)\��(*���<*<���*\���*|���*����*L��$+\��8+���L+���`+��t+����+,���+���+<���+L���+\���+���,��L,\��h,����,���,L���,,�� -|��L-���|-����-����-���-��.��(.<��@.\��X.���.���.����.����.��4/��H/�`/�t/,��/<��/���/l��/��0��<0�T0\��0���0���0��1,� 1l�<1|�P1��d1��|1���1���1��1<��1\��1��2��,2<�d2���2l��2��3<	�43,��3���3|�4<�44l�P4��p4���4L��4���4��(5L�l5���5<��5��86l�`6���6���6���6,�7<�7��@7��`7<��7���7,��7�� 8��<8��X8��l8L��8���8\�9�!�P9�!�h9�"��9<&�8:|&�d:�&��:�&��:\'��:�'��:�(�@;�)��;|+��;�+��;�,�8<�,�L<�,�`<.��</��<,0�=�0�`=�0�t=�1��=�1�>�2�8>�2�T>�3��>�3��>�4��>|5�(?�5�<?6�t?,6��?l6��?�6��?7��?l7�@�7�$@�7�8@8�T@l8��@�8��@9��@:�$A�:�hA�;��A<<��Al<�B�<� B�=�\B�>��B@��BL@��B|@�C�@�4C�@�HC�@�\CA�tC,A��ClA��C�A��C�A��CB��C�D�<D�E�xD�F��D,G��D\G�EO�PElO�|E�O��EP��E\P��E�Q� F�R�pF�R��FS��FT��F,U�G\U�0G�U�|GLV��G[�8H�\��H_��H�b� Ic�|I�c��I�c��Ie�J�g�lJk��JLk��J�o�K�q�hKs��K�s��K<t�L�t�0L�t�LLu�`L�u��L,v��L<w�My�PM�z��M�{��M|��M��,Ṅ��N,���NL���N����N��(O,��<O��pO����O����O���P���0P��LP|���P����P���P��� Q���LQ̓��Q|���Q���Q|��R��@Rܖ�lR����R̘��R<���R���S��PS̜��S|���S\��T|��T���dT���xT\���T����T���T���(U<��LU���U\���U̦��U\���U|��XV����Vܮ��V��8W<��LW����W����Wܰ��W����W��$X��LX|���X,���X\���X��Y���@Y,��|Y<���Y����Y��Z���@Z���TZ����Zl���Z,��[L��4[���\[���x[,���[L���[����[����[����[L��$\���L\���h\����\,���\l���\����\���]\��D]L���]����]���X^\���^|���^����^���^���H_����_����_����_���4`���p`\���`����`���a��(a���La��la<���aL���a���Hb���\b���pb���b����b���$c���\c���cL��Hdl��dd����d\���d����d���e��� e��<e<��Xe���xe,���e����el��f���<fl��`fL���f<���f����f���g<��Pg���gl���g���h<��dh���h\���h��i��Xi,�xi���i��i<��il��i��j�� j<�Lj���j��j��k��0k�
��k\��k�
�l\�Tl���l���l��@m���m���m���mL�n��Ln���n���n\�o��$o,�do� ��o�!��o�!� p�#�lp�#��p�$��p|%��p�%��p�%��p�&�q�&�8q�)��q�+��q\,�r|,� r�,�<r.�hr|0��r<I�s\I�s|I�(s�I�<s�I�PsJ�psJ��slJ��s�J��s�J��s�J��s,K��s\K�t�K�,t�K�Dt�K�\tL�tt�L��tM��t,M��t�M�u�M�(u\N�Tu|N�pu�N��u�N��uO��u<O��u\O��u|O�v�O�,v�O�Hv�P��v,Q��vLQ��vLS�$w�S�Xw�T�|w�T��wU��w<U��wlU��w�U��w�U��w�U�x,V�$x\V�8x�V�Lx�V�`xW��xLW��x�W��x�W�yX�<y\X�hy�X��y�X��y<Y��y�Y�z,Z�@zlZ�lz�Z��z�Z��zL[��z�[�{�[�<{\\�t{�\��{�\��{\]��{�]��{^�|,_�H|�_�l|�`��|\a��|b�}�b�p}�c��}|d�(~�e�T~�g��~�j�<Lk�t�k���l��Lm��n�,��n�x�,p����p��\q���r�L�s����t�Ё|w��<x�@��x�`��z����{�؂�~�$��T�L���������L������<����x�,����̊�ԄL�� ����d���������\��$���H����|�̟�������<��̆l�������ܢ�4�L��`���������ܦ�,���x�|��Ĉܪ����T�,����<������8���t�����<����L����̹��|���̺�4������ܼ���<����������(����<�<��h���������������D���\���t�l������������č����<�������`�\��������l�����D�����|��,����P����������|��$����8����L����h�|���������L���\��4����`����t�<����|����<����������ؓ|��0�L��������\��H�|��`����t������\��|�������4���H���`���t�
���,
���������l�P���d���x��������,���<�̗L��|��������(�|�x�,�����L�,��.���2��L;��|;���;�(��;�@��;�T��<���<=�ě�=����=��,>�H��>�d��>���,@��\@���A�<�E���<E�̝�E�$�\F�|�G�ԞlI�4��L���M���,M�ԟ<M��lM��N�d�lV�РW��,W� �LW�4�|W�L��W�d��[����[���\���\�С�^� �\`�L��`�d��`�x��`���\a���|a���a���c�X�,d����d����d��Le��h�h��h���Lj����l�H�lr���,t�ԥ�t��lz�T�l{�x��~��|�������������������������ܨ���L���l�� �|��4����L�<��p������̔������̩L����� �L��<�\��P����t�,����ܘ�����<���X�<��t�|�����������Ы|������� �̜�<���T�l��p�|���������ܝ���\���������L�̟�x�����l��Э�������,��(�\��<����P���l����������|��خ<������8���t�����|��ԯ���|��8�|��d�L������������ ����L�̰���������������@���x�<����L��زl���l��(���`�����������������(�<��T���������\��<������������ܵ����,��d�l�������ȶ�����L��8�,��t�����������|��з���������,��(�L��@�l��X����p���������������<�����������4����L���x�|���������������<���\��0�|��H�<��d����������,��Ժ|��������(�/��L�<��`�\��t�l����|������������Ļ���ػ�������<�0���T���h����������̼|�H��|���������,�����̽��<���P��
�d����l�����Կl��,�$���`�|������������<��\��|����x�\ ��\"�l��&����&����&���<'��\'���'�,�,*����+���\,��|,� ��,�8��,�L��-�p��0���<3�8�,6���9���,9���|9���9���9�0��9�D�:�X�:�l�,:���<:���L:���\:���l:���|:����:����:���:� ��:�4��:�H��:�\��:�p��:���;���;���,;���<;���L;���\;���l;��|;�$��;�8��;�L��;�`��;�t��;����;����;����;���<���<���,<��<<��L<�(�\<�<�l<�P�|<�d��<�x��<����<����<����<����<����<���=��=��,=�,�<=�@�L=�T�\=�h�l=�|�|=����=����=����=����=����=����=���=���=�0�>�D�>�X�,>�l�<>���L>���\>���l>���|>����>����>����>���>� ��>�4��>�H��>�\��>�p�?���?���,?���<?���L?���\?���l?���|?���?�$��?�8��?�L��?�`��?�t��?����?����?���@���@���,@���<@��L@��\@�(�l@�<�|@�P��@�d��@�x��@����@����@����@����@����@���A��A��,A�,�<A�@�LA�T�\A�h�lA�|�|A����A����A����A����A����A����A���A���A�0�B�D�B�X�,B�l�<B���LB���\B���lB���|B����B����B����B���B� ��B�4��B�H��B�\��B�p�C���C���,C���<C���LC���\C���lC���|C���C�$��C�8��C�L��C�`��C�t��C����C����C���D���D���,D���<D��LD��\D�(�lD�<�|D�P��D�d��D�x��D����D����D����D����D����D���E��E��,E�,�<E�@�LE�T�\E�h��E�|��E����E���F���LF���|F����F����F��G��<G�0�lG�D��G�X��G�l��G���,H���\H����H����H����H���I���LI��|I� ��I�4��I�H�J�\�<J�p�lJ����J����J����J���,K���\K����K����K���K�$�L�8�LL�L�|L�`��L�t��L���M���<M���lM����M����M����M��,N��\N�(��N�<��N�P��N�d�O�x�LO���|O����O����O���P���<P���lP���P���P�,��P�@�,Q�T�\Q�h��Q�|��Q����Q���R���LR���|R����R����R��S��<S�0�lS�D��S�X��S�l��S���,T���\T����T����T����T���U���LU���U�8��U�L�V�`��W���X�0�,X�D�|X�d��X���,Y����Y���,Z���\Z����Z��[�(�|[�H��[�d�L\����\���]���|]����]��^���^�8��^�P�<_�l��_����_���`���l`����`����`��,a�,�la�D��a�\��a�|�|b���,c����c����c���c��d�8��d�t��d���\e���|e����e���f��<f��lf�0�g�\�<g�t�|g����g���h����h����h���h�8�|i�p�lj����j���<k���Lk��\k��lk�(�|k�<��k�P��k�d��k�x��k����k����k����k����k���l���l��,l��<l�,�Ll�@�\l�T�ll�h�|l�|��l����l����l����l����l����l����l���l��m�0�m�D�,m�X�<m�l�Lm���\m���lm���|m����m����m����m����m���m� ��m�4��m�H��m�\�n�p�n���,n���<n���Ln���\n���ln���|n����n���n�$��n�8��n�L��n�`��n�t��n����n���o���o���,o���<o���Lo��\o��lo�(�|o�<��o�P��o�d��o�x��o����o����o����o����o���p���p��,p��<p�,�Lp�@�\p�T�lp�h�|p�|��p����p����p����p����p����p����p���p��q�0�q�D�,q�X�<q�l�Lq���\q���lq���|q����q����q����q����q���q� ��q�4��q�H��q�\�r�p�r���,r���<r���Lr���\r���lr���|r����r���r�$��r�8��r�L��r�`��r�t��r����r���s���s���,s���<s���Ls��\s��ls�(�|s�<��s�P��s�d��s�x��s����s����s����s����s���t���t��,t��<t�,�Lt�@�\t�T�lt�h�|t�|��t����t����t����t����t����t����t���t��u�0�u�D�,u�X�<u�l�Lu���\u���lu���|u����u����u����u����u���u� ��u�4��u�H��u�\�v�p�v���,v���<v���Lv���\v���lv���|v����v���v�$��v�8��v�L��v�`��v�t��v����v���w���w���,w���<w���Lw��\w��lw�(�|w�<��w�P��w�d��w�x��w����w����w����w����w���x���x��,x��<x�,�Lx�@�\x�T�lx�h�|x�|��x����x����x����x����x����x����x���x��y�0�y�D�,y�X�<y�l�Ly���\y���ly���|y����y����y����y����y���y� ��y�4��y�H��y�\�z�p�z���,z���<z���Lz���\z��lz��|z����z���z�$��z�8��z�L��z�`��z�t��z����z���{���{��,{��<{��L{��\{��l{�(�|{�<��{�P��{�d��{�x��{����{����{����{���{��|��|��,|��<|�,�L|�@�\|�T�l|�h�||�|��|����|����|����|���|���|���|���|��}�0�}�D�,}�X�<}�l�L}���\}���l}���|}����}���}���}����}���}� ��}�4��}�H��}�\�~�p�~���,~���<~���L~���\~��l~��|~����~���~�$��~�8��~�L��~�`��~�t��~����~��������,��<��L��\��l�(�|�<���P���d���x�������������������������,���<��,�L��@�\��T�l��h�|��|��������������������̀��܀�����������0���D�,��X�<��l�L����\����l����|���������������������́� �܁�4���H����\�l����̂���<�����������@,��l<���<��\��,|��H���\\��p|���l��������(���<|��d\��x|����������<��@���`lE���E��E�F�4�F�T�G���H��I��|I�J�8|J�T�J�p�L���L�M�,M�0�O�L�O�h�O���P��R�LS�H�S�l�S���S��T��<T���T���T�,U��U�8�U�LlV�xW���W���X��<Y�	Z�@	�[�l	�]��	�]��	|_��	�_�
\`�$
�`�@
�`�X
\a��
�b��
c��
�d��
�d��
le��e� |f�4g�T�g�xi���i��k���k�,m�$,o�X|s��Lx�$
z�`
�z��
{��
,{��{�$�{�<L|�T<}���}��L~��l���LL��t<���,���|���̅���4��X���|<�������l���������0l��XL��|<���������l��0���`l���ܜ��L�������|��0���D����ܤ����̩�P���,�������(\��P���l���\�������L��,L��|�������$���8���L<��h����<�����<��,L��\,���L���|�����H��l\��������������L�����0���L��h����\����������������� ���4\����������l��4���H���\�������L���\�����D���h<���������L��H|��p��������������<�� |�� ���@ ���T ���� <��� L��� ���<!,��P!<��d!����!|���!����!,���!l��"��("���<",��`"\���"����"����"���"��#���#��`#l���#|���#����#���$�
�T$\�h$���$���$��$<��$\��$|��$��%��%��(%��<%��P%��d%��x%��%,��%<��%L��%\��%l��%��&,�,&��X&��p&,��&|��&���&,��&L��&\�'|� '�l'\��'���'|�(�@(�T(<�p(\��(l��(���(���(���(�)|�H)��t)���)L��)���)��)L�*|�,*��D*<�\*��p*,��*|��*���*���*��*��(+\�`+�%��+<(��+l(��+�(�,�(�,,�(�L,<)�p,-��,�0�-�0�(-L1�H-l1�d-�1��-l2��-3��-4��-6�.<6�$.�9�x.�=��.�=��.>��.\>�/�>�$/,?�P/|?�d/@�x/L@��/|@��/�A��/�A�0�B�D0�C��0D��0lD��0|G�L1�G�`1H��1H��1J�2�J�P2�K��2L��2M��2�M�43|P�p3�P��3�Q��3�R�4<T�@4�T�h4�T�|4�T��4U��4�U��4�U��4lV�(5�V�D5\W�p5�W��5X��5�X��5�X��5�X�6Z�h6�[��6�[��6L\��6�]�H7<_��7�_��7�`��7�`�8�a�`8b��8�b��8�b��8�b��8Ld��8�d�9�d�9�d�09�d�P9|e�t9i��9�l�(:�l�H:�l�\:lm��:|m��:n��:n��:\p�(;|��t;����;����;���;́�<���P<,���<���=܆�4=l��X=��p=����=����=\��(>��@>���>����>���><���>̺��>ܻ�?\�� ?̼�D?L��X?����?����?���?|��@̿�$@\��\@���x@���@����@���@|��A���$A<��dA|���A����A,��B���4BL��PB���lB����BL���B����Bl���B����B����B,��C|��4C���PC\���C|���C���C,��D���(D,��|D���D,���D��� EL��PE���|E���E����E��F��,F\��LF���hF����FL���F����F,���F���<G��XG����G����G<��,H���@H<��xH����HL��I���HI���\I|���I����I��J<��XJ����J|���J���HK���dKl���K����K<��8L���dL����LL��M���dML���M���N��TN����N����N\���N���LO|���O����Ol��P��LPl��pP����P���P��Q��LQ��`Q\��Ql��Q���Q���Q,�DR��xR\	��R
��R�
�4Sl�`S���S
��S,�<T��PTl��T|��T�0U�|U���U���U\�V�� V��4V��HV�\V<�pVl��V���VL�W�4W��W��W,��Wl�X��HX���X��X���X�!�tY,"��Y�#�Z�$�`Z�%��Z*�[|*�D[+��[�+��[L-��[�-�0\�-�h\/��\\/��\�/��\0� ]\0�4]l0�H]�0�\]�0�x]1��],1��]L1��],2��]\2��]�2�^�2�^�2�0^�2�D^�2�X^,3�l^l4��^<@�_�@�T_�A��_,C��_lE�0`�E�X`<G��`|H��`I��`LZ�8a\[��a\��a|_�(b�c��bd��bk��b|t�Hcu��clw��c�w��c<x�d�x�Td�y��d�z��d�|��d\}�e�}�He|~��e���el��f܀�4f\���fl���f܄�4g��\g\���gl���g���0hL��hh����h\��i���<i����i����i|1�n�:�|n<;��nL;��nl;��n�;��n�;��nL<��n�=�@o�>��o�?��o|A�p�C��p�C��pD��pLD��plE�q�E�8q�E�Lq�E�`q�E�tq�E��qF��q<F��q\F��qLG��q�G�r�H�hr�I��rL�s�L�Ps�M��s,P��s\Q�<t�Q�ht�Q�|t�Q��tlT��t|T�u�X�Tu�]��u�b��ug�<v�g�Pv�g�dvlh�xv�h��v,j��vLj��v�j��v�j��vk��vk�w�k� w�k�4w,l�LwLl�`wll�tw|l��w�l��w�l��wm��w,m��w�m�x,n�Dx\n�Xx�n�lx�n��x�n��x<o��x�o��x�o��x,p�y,q�\ylq�tyLr��ylr��y�r��y�r�zs�zs�0zlt�|zu��z�u��z�u��zv�{,v�${Lv�@{|v�T{\w��{�w��{x��{�x�|\y�\|�z��|�}��|L~�@}L��},���}\��~́�~\��0~܃�l~l���~<���~���4��l�������L�� �l��4����L����`���x�����������,���\��������l��P�|��d�����<���L��������ܕ�4����X�|��t���������\�����0�l��P�����������<����\�������Ԅ���\���\��P����d����|�l��ȅܥ��\��(����P����l�,����̩�Ȇl�� �|��4����H����\�����<�������<��D������̭���ܭ������l�����$����8����P���h�\��|�|����̰�������<��؉����<���,��d������������4����H���\��������������ċ������������<����p�l�������Ԍ���8�,��h��������������,��ȍ<��܍\���|������$����<���T�L��l���������������<��Ԏl�������L��$�\��d������,����L����,�����H�<��`�l��x��������������Ԑ�������$�,��<�<��P�L��d������������������l������$����<����T����l������������В,���l������8���L���`�������������ԓ<���<��L�|��x������l���������� ���L�l������ԕ�������<����x�,����\����|��Ȗ<�������,��P����l����������L����|��ؗ��������������h����|������<�������,��(�,�d���������l�������0��T�������Ě������8���\�<����ě<������	�P�L�����Ĝ�����
�4��
�P�\�|�����\�ԝ�����8�|�d�����L�����,����@���l������ğ| ��\%���%�4��%�H��%�\�&���\&�Ġ�&�ܠ,(���(�@�L)����)���l*��l+�(��+�H��+�\�,���L,����,�̢-��-���|9�L��9�x�\:���|@��LC���K�h��L���lM��<N�<�P�x��P����P���\Q���^�H�L`���<a�ԦLa���a�(��a�<��b���c���<e���f�$�g�@��g�\��g�x��g����h����h�̨�h���k�8�\l�h��l����l����l��,m���Ln�H�,p����q�Ȫ�������$����8�̅�L���h����|���������,����\��Ы�������������̆�$���L���`���t�,����L����l�������Ĭ܇��L���l��(����@����T�,����L����l���̋����`�̓���L�������\��d������ܕ������Я��0�<��L�<����̘�԰L���������4����`�ܚ�t������ܛ�бL�������ܝ�L�l��h������L�������IJL����������0�,����<����|����,����|��$����X�l��p�<������ش,���̦�8�ܦ�L�L����L����\��е̩��,��D�����,������,�\��d��������طl������,�<��H�,��t���������L���l��(�|��<�\�������������������(�ܷ�@�|��`����t�L�����������,��,�<��@�ܺ�p�\���������@�<��l�l��������������X������,����|��̽���0����D���\�<��x������L��о����L������4�L��X����|���������������<��ؿ\����������4����X���t�l��������<���\��4��������\��D����l�,�����������������������������D�|������������,����L������,����H����\������,����<����L��������������<��0���T�,��h�����<����l�����������������������,�,��@�<��T�L��h����������������������(�l��t���������������\������H����t�������������$���T�L���������������������<�� ����l������L����|������������,��$���P�,��|����������,������(�L�X�|������<����� �L�4�,�p�����<����8���d�l�������<����P��d�|���l���|�������l������"�L��"�d�#�x�,#���\#����#���L$����$�(�%�<��'����'���<(����(���(�$�)�<�l)�h�+����+���,���3�x��3����3���<5����5���5� �l6�@��7����7���\:����:���;�L�L<���=����=���<>���>�@��>�x��?����@����@��<A�0��A�X��C����D���\Q��\R�`��R����R���<T���V�h�,Y���[���[�D�l\�|��a����e�8�i�l�|i����j���k�`��l���lp���|p���p���p�(�q�<�q�P�<q�d��q����q����r���|s��|t�L��t�`��t���,u���<u���\u����w�(�\x�t�lx����x���,y����y��z�4�\z�P��z�t�\{���,}���������\��x�L��������,��|��������|�,����̩��̮�`����������\��<�l��p�|������������@�����������,�����d���������l��|�0���D���X��������������0�<�`���������\��\�X��t������ ��"�P��"�d�\#����#���l$���<(���L(��|(� ��(�4��(�H�,)�d�<)�x�L)����)����+����-� ��/�D�L0�p�l8����8����8����9�0��9�L�L:�h��:����:���|>��A�4�\A�T��A�h�B����B����B���<G�@��G�T�,H���LH���lH����H���H�$�I�8�\I�L�|I�d��I�|��I����J����J����J���L�4�\L�H��L�d��L����L���LM����M����M��\N�8�|N�T��O����W���X��<X���X�`�Y�|�,Z��L\�0��\�H��_����`��d�X��d���,e����e���lf�D��f���|g����g���h�,��i�t��j���k��\k���l�,��l�X��q���r����s���s��<t���u�P�<w���|w���ly�L�z�`�lz����{���{��|��<|��l|�$��|�8�l}����������H��������������� ����\����p������<��������������(l��@܉�p��������<��(|���L������<��t,���l�������̑�����,��,��T���l,���\���\��$���t����,�����Hܚ�t<�������|�� ��Dܡ�|�������L�� ���@��\��t����<���̫�$���t<���<���,������	��H	|��p	L���	����	���@
���|
l���
<���
,��0l��h��������������8�������l��
���X
L���
����
���
l�����HL�����������<���<�����|��T,���������<<�������,��8���������p�����\����������4�H,�\l�tl��|��������l���0 �P\+���4���4�5�L�5���5���5���5��L6�,�6�`7���7��7� \8�`�8��,9���9�:�@<:�T�:��\;��\<��=��=�(>�<<>�PL>�d\>�xl>���>���>���>���>���>��l?�@�X<@�ll@���@���A��,B��<B��B�h�C��LD�<E�d�E��J���M��Q�4LR���V��\W���]�D<_�|L_��\`��|a�@�e���q��\�� ���( ���< ���� \��� |��� ���!,��T!����!����!����!���!L���"l���"\��"l�#|�$#��8#��L#��`#��t#��#,��#���#���#<��#|��#��$$��@$L�X$l�p$���$��$���$��X%���%��,&<	�@&���&��&���&,��&L�'��8'\��'��'<��'l�,(L��(��)L�|)�!�*$�h*&��*l+�+�7�d+�7�x+�7��+�7��+8��+L8��+l8��+�8�,,9�X,:��,\:��,�:��,;��,,;�-�;�@-<<�l-�<��-=��-�=�.>�.L>�8.�>�`.�?��.\@��.�@�/�@�$/B��/|B��/�B��/,C�0\C�40lC�H0�E��0�F��0K�D1lL�h1|L�|1<P��1�P�2�P�D2LQ��2�Q��2�R�3�e��3�l�4����4���5��X5l���5l���5���6̹�6ܹ�06��D6���X6��l6���6,���6<���6L���6̺��6ܺ��6���6���7<��$7\��87��8\��(8|��D8\���8����8L���8����8���9��$9���<9,��X9L��p9����9���9l��:|�� :���8:����:����:����:<���:���;��8;����;|���;����;\��L<l��`<|��t<����<\�� =,���=����=���=���>��T>���>���>l��0?���|?����?l��4@|��H@���\@����@����@|���@���A���A��4A\��LA���A���Al��B��<B��B\�4C��tC���C���C���C��C<��C�0D��TD�pD���D���D���D �EL �@E� �lE� ��E� ��E� ��E�!�F�!�(F�!�@F,"�XF\"�tF,#��F�#�G�$�\GL%��G&��G�&�H�'�\H�(��H�(��H�(��H,)��H�)�I�)�8I�*�\I�*�pI,+��IL+��I\+��I�+��I�+��I�+��I�+�J,�$J<,�<J\,�PJ�,�|Jl.��J�.��J�/��J�/��J,0�K|0�,K�0�@K�0�TK1�pK<1��K�1��K�1��Kl2��K�2�L3�<LL3�dLl3�xL�3��L|4��Ll5��L6�M7�DMl7�|M�7��M,8��M�8�,N�8�HN,9�dN�9��N�9��N\:��N�>�PO�>�|O�>��O?��O<?��O�?��O�?�PB�lP�B��P�B��P�B��P,C��PLC��P\C�QE�LQ\E�hQ�F��QlG��Q<H�R�I�lR�I��R�I��R�J��R<K�S\K�4SL�`S<L�tS|L��S�N��S�N��SO�TLR�TTS��T,S��T\S��T|S��T�S�U�T�<U,U�hU,W��U�W��U�W�VLX� V�X�@VY�\VlY�pV[��V`��VL`�W�`�4W�`�HW,a�dW�c��Wd��W|d�X�d�X�d�(X�d�<Xe�PX�e�xX�e��X�i�Y�j�(Y�l�lY�l��YLm��Y�m��Y|n�Z�n�4Z�o��Zlq��Z|��[L��@[����[̣��[����[,���[��\��(\̦�D\,��l\���\L���\���]��� ]���4]���H]L��\]\��p]����]L���]����]��4^\���^L���^���_���T_����_����_�� `��L`��``,��t`<���`\���`l���`����`����`����`���a��$aL��8a|���a���b���Lb����b����b���c���dcL���c\���cl���c��d��0d<��|d����dL�e��de,�xe��e�e|�e�	��e�	��e,
�el
�f�
� f�
�4f,�Hf<�\f��pf�
��f�g��Dg��pg��g��g��h�,h\�Dh�>�$i|?�xi@��i@��iA��ilA�j�A�j�A�0jB�Hj<B�dj�B�j,C��j�C�jD�k�E�k�F�k�F�lG�0lLG�Ll\G�`llG�tl�G�l�G�l�H��l\I�@mJ�m�J��m�J��m�J�nK�n,K�,n<L�xnLM�n�M��nLN�o�N�0o�N�Lo�O�toP�o�P�o<Q��o\Q�oS�0pV�p�V�p�V��p�V��p,W�qlW� q�W�dq\X�q�X�qY��qLY��q|Y�r�Y�r�Y�(rLZ�HrL[�tr,\�rl]�s�_�Ls�`�s�a��sb�s�d�Dt\f�ptlh��t<i�u|j�|u�l��u<m��u�o�Xv�o�lv�p�v�q��vlr�w�r�(ws�lw�u��w�u�xv�xlw�`x�w�xx��x|x��x�x�y���Pý�ly���y����y���y܅�(z���Tz܇�zL���z���8{\��d{܍�{<��{|���{̎�|��� |,��l|l��|���|̕��|���|\��}|��4}���P}���d}ܖ�x}���}<��}|���}��~L��<~���d~���~��\��,̥����l��L�<���|�����܀L���ܯ�8���`�����<���|��܁�������<����<���\��؂���$�,��D�\��X��������\������(���D����d����<���l������Ȅ<��(�|��<����`�<�������l��<����L���l������$����8�L���,��ԇ�� ���4�\��T����,�����̈�������,�|��X�������؉\���L��`������Ċ����������P�\������Ћ������P�<��x�L������،����<��D�����|����������H����
��|
�4������Џ������<�$�|�P�<!��"���#��,%�d��%��L+�Б\+��l+��|+���,�X��,��.�̒L.���0�0�L2�d�7��<7�ȓ<8��|8�,�9�H�:�|�<:��\:��<;���;���;�$�L<�D��<�p�l=��|=��,>��\>�8��>�X��>�l��>��|?���D��,G�D�I��<I��,J���U�X�W���X��Z��LZ�,��Z�L�<\���\���\�ؙ\c�$��c�\��c��<k�ؚ|k���k�$��k�D�ll�x��l���m��n�0�<n�L��o���q�ܜ�u�(�Lv�\�\v�p�lv���v���x�ܝ�x��y��Ly�D�L|���~�����,��,�L��|����ԟ܃��L�� �|��H����d�����������Ƞ���ܠ<������T��������<��<�l������Тܗ���� �L��H�|��p�����|���̟����@����p�|������������� �<��d�l������ȥ���<�� ������������Ц��P�\��p�|��̧������P�\������L���|������t�����\��ԩ���4�\�������L���\��`����ī�������L�����L���|������h�l������ح,���l��0�������������L�����8�\��p��������د�������|��@����l���������l��0����P����h���|�L�����������,���L�����0�l��T����|��	���	�в�	��,
���
��\�X����,
�̳�
���D�\�p���l�������8��T���l��l��<�\��������`����,��\�4������̸�����(���t�� ���#���%�l�(���-�8�,.�d�l.��L/��0�ܻl0��<1�<�\1�T��1�l��1���3��l5�(��6�t�\7���8��<�@�,<�T�=���=�ľ?��@�4��@�l�A���B���B���B�<��C�h��H��I��|I��,J��<K��LK�,�|K�@�,L��LM��LN�(��N�h�P���P����Q�(�<R�L��_��e����e��\f�@�|f�X��f���f��g���g���Lh�$��i�`�|k��l���Ll��ll�0��l�P��l�d��l�x�<n��ln���|n����n���n��o�0��o�\��o�p��o��,p��\p���p���p����p���,q��\q���q�$�<r�\��r�p�t���|t����t��6u�(�Vu�P�|u�d��u�x��u���u���u��v����v���v���v�0�w�D�w�X��w�l�|y���y����z��L{�X�|��<|��L|���\|���l|���|���|� ��|�4��|�H��|�\�}�p�}��|}���}��~���L~����~���~��,�4�L�H���\�L��������,�������$�,��L�<��`�L��t�\�������L���������̃����$�L��<�|��T����\��������̅������,���L��,����L�̆�d����<���|��������܇������L���|��,����H�܈�d�����,���l��������܉������,��(�l��H����h�������<���l��������̌� �l��������������������<��p����<����L���\������@���h�����ܔ�������L��H�̗�h���|��������\��H���h���������̝��̞�@���h���������������<��L����d����,����̣�����l����������������0�l��d���������̫� ����<�,��X���������������̭�����T��������|����ܰ����@�,��\�\��x�����,������������̳�L�<�����������,������0�ܸ�D����h����<���l���������̺����� ����T����p������������������,������(����t����|�����������0����t�L���������������h�,�����������\������<����p�������������,��8�����l����,���\��X����������������<�\��d�����<�������\���l��,����H����d�<���l�������������(�<��@�L��T��������������������������������\���l��0�|��P����l�,����������������������8��������������L����������X�L���<����,�� ����l����l����������(����@�<��`�L��t�l������L����|�����������l��P����l���������������$���8���d��x������������,�<�H�|�|����L���,��l�<�,�����,����P�L�������������!�`��!�t��!��<"��\#��l#��%�X��%���%��'��\'���'���'�(��)�t��+���+���,��,-� �\-�8�<1��L1��\1��,5�4�<>��L@���A��<C�X��H���H��I��<I��\I���I���I� ��I�<�\J�t��J���J��K��\K���K���K��LL�@��L�l�,M���Q���S� ��W�h�X��lX��|X���X���X��Y��,Z�H�|Z�d��Z��[��\[���[���[�(�\�d�L\���h���h��i���j�4,k�lLk��k�Ln���n��n� �n�4o�H�o�|p�<p��q���r�,�s�|�s��s�<t���t�u�D�u�X<w�llw��w�,x�|x��,y�\y�,z�H,z�\lz�tl~���������$��T<��h\�����ܑ��̒�0|��L���`��<��l��������<�����8<��T̖���\������,��8���p��<������ܛ����|��	̜�4	���L	L��t	l��	���	<���	���	ܞ�
���h
|��
<����4l��T\��p���ܩ����\������ܪ�0��H<��`���|,�������$
���P
���
l���
|�����H,�����,����PL���������,�����Dl��p,������L��$l��|���\����D��<���������L��p���\��,���p�����|�����4<��h|��������\�����D������|�������\���������\����\	�\<�|�������4,�\���$��P��h��,�\���������l�(�,�<�l��L �| � � �8L!�TL"�\#��#��$��L$�\$� �%�LL3�l3�|4��4��,5��\5��|5�6�D�6�p\7��7��<8� L9�0 \;� �;� �;�� ,<�� l<�!�@�L!�@�`!�@�t!�@�!�@�!A�!A��!,A��!<A��!\A�"|A� "B�\",B�x"|C�"�C��"�C��",D�#,E�<#�E�|#�G��#�H�$�H�0$\I�h$�I�$J�$l\�$,^�,%�b�%�c��%�f�0&,g�|&\g�&�g�&�g��&h��&�h�'�h�8'�i�h'�i�|'lj�'�j�'k��'�k�(|l�0(�l�L(Lm�`(�m�t(\p�(�r�)|v�p)�v�)�x��)\~�*L���*,��$+L��+����+���,��l,̈�,܍��,���,���@-l���-L��.���.���.���$/L��P/���t/��/ܤ��/<���/L���/l��0���`0L��0l��0����0����0,��1,��,1���@1��T1L��p1���1\��2���82ܹ�2L���2����2���03\��l3���3���3����3,��4��L4��t4���4<���4|�� 5���p5���5����5����5���5���6�� 6��46<��L6|��t6���6���6���6����6����6����6���7��7,��(7<��<7,��p7���7���7���7���7���7��8L�� 8|��H8��\8��p8,��8l��8����8����8��9��9,��09|��L9���d9��9,��9L��9l���9����9���:l��T:L��:���:,��;���L;��;��;���;����;���<<�8<��T<��p<��<��<L�<|��<��=��@=<�d=|�=��=���=���=<�>|�L>��d>,�x>��>���>|	�L?�	�?<
��?\�?��@�(@,�<@L�x@��@��@��@���@��Al�$A�8A<�PAL�dAl�|A��A��A|��A���A��B��B��PB\�B���B��B<�C|� C��8C��PC��hC<�Cl��C|�C��0D�lD��Dl��D���D, �E� �DEl!�dE|!�xE�"�E,#��E�$�E�%�(F,&�LFL&�`Fl&�tF�&�F|(��F�(�G)�GL)�8G�)�dG�)�G�*�Gl+��G�.�0H�/�pH�1�H�1��H2��Hl3�I�3�@I,5�|I<5�IL6�I\8�J,<�lJL=�J\>��Jl>�J?�<K�?�dK�?�K�?�K@�KL@��KA�LLA�,L�A�TL�B�LLC�L�C��LLD�,ME�`M\E�M�E�M�F��M�F�NLG�`NlG�tN�H�NI��N�I�OJ�HO,K�O,L�O|L��O�M� P|N�TP�N�P,O�P<O�P�Q�QLR�DQ\R�XQ|R�pQ�R�QLS�QlU��Q|V�(R�W�tR�X��R�Z�8S�Z�PS�[�S�[�S�[�S�[��S\��S<\��S�\�,T�]�`T<^�TL^�T,_�TL_�Ul_� U�_�4U�_�HU�`�ULa�U�b��Ulc�V�d�hVe�V<e�Vle�V�f�Wg�`W,g�tW<g�W�h�W�i��W�i�W�i�Xj� Xlj�<X�j�TX�j�lXk�X|k�X�k�X�k�Xl��X,l��X<l�XLl�Yll� Y�l�4Y�l�HY�l�dYm�YLm�Y�m��Y�m��Yn�ZLn�HZ�n�xZ�n�Z<o��Z|o�Z�o�[�o� [�o�4[�o�H[�o�\[p�p[<p�[lp�[�p��[�p��[�p�\<q�D\|q�p\�q�\�q��\<r�]�r�D]�r�X],s�l]<s�]\s�]|s�]�s�]�s��]|t�^�t�T^<u�^�w�_x�_�x��_�x�`�y�``�z�`�z��`�z��`l}�8a|}�La�}�`a�}�|a�}�a~��a�~��aL�$b��Xb��b���b���c��<c���hc<��c\��cl���c|���c,��(d���`d��td���d���d<��e\�� ẻ�Te��pe,��e<��e����e̋��e\��Dfl��Xf|��lf���f���f���f����f���fl��g̎�<g<��dg���xg��g<��g���g����g,���gl��g���h���,h��@h,��\h���h���h<��8i���|iܔ�i,��i|��4j̕�lj��jL���j���k̖�4k���`k,��k\��k����k̗�l��Pl\��lܙ��l��m���4m��xm���mܛ�mL��n��� n��@n���xn���n\���n���oܟ�<o���To<��ho���o����oL��p<��Lp<��p���p���p���ql��Hq<��q���q����q���q�� r̫�Tr���pr���r����rl��r��4s��s��s��tL��@tL��dt̴�t����t,��tL��u|��$uܷ�Lu��du<��xu|��u���u���u���vl��Tvܺ�xvL��v���v,���v���w��,w|��Pw��tw\��w̾�w<���w���x��(x���Lx���pxl��x��xL���x���y,��$y���Hy��ly|��y���yl���y,��$z��hz���zL���zl��{���0{���{����{���|��l|����|l��|���X}��}��},��}l���}���~���0~L��H~,��~���~L���~|��~������(���<|��P�������,��L����Ā|��<�����|������ȁ���܁���<��$�\��8����L���`���t�,���<�������\�`�l�t�|�����������\�(�\�l�������\�Є������|�P�\��������,�@�,�|�������,� �<�4�l�H�����܇���|�<���\�� ���!���!���"�D��$���(��)���)�0�\*�|��.��</�(��/�@��/�T�<0�l��0���0���0���0�ċ�0�؋�0��1��2�<�2�P��2�t��2���2���3���3���4�H�5�`�\5�|��5���7��L8�čl:���:�@��:�t��;�؎�;���<�0��=�T��=�p�>���>��?�ď<?�܏\?��l?���?� ��?�4�<@�\�\@�p��@��\A��B���B�<�D�h�<D���E��LG���G��lb�X�<d���d�ؒ�e�,�,g��,h���h�P�,i�p�|i��j�̔Ll���l�@�n��\r���r�ĕs�ܕ\s���s���s�,�<t�T��t�x�u���u�̖�u��v���v�8�,x��y��,y�ؗ,~�P�<~�d��~�|�|��L������̘����������L��,����L�܁�`����|������ ��������ܚ,��(�\�������������l�|�������,���l���̢�X�ܢ�l�L���l���ܣ��|���,�����8�l��p�����L��؞����l��D�ܵ����П,�����T�|��|�\��̠,�����\�L������ȡ��������0�\��T�|�������,��Ģ|������(����<�l��p����l��(�<������Ȥ�����������<�� ����<����T�����������x�<��ܦ��@�<��T�\��h����ȧ�g�d��g�x�j���m�(�,r�ĩ�r���r� ��t�d�Lu�x�܁�تl������\�̆�p�����L��ԫ܊��l��P����ܬ\��(����<�\�������̛�8�\���̠��|��D�,�������L���ܣ��l��P����������� ����|�|�������̭�0���D�,��p�l������в���|�����Գ������(�L��h�<���|�������<��(����l����\���l��$����P�L���|����������L���|������T�L�������\��4����d��������<��$����h�,���|���,�����(���x����|����D���l	���	�8��	�d�|
���
���
���
���
��,�0��
�L�<��L��,�ľ,���h�|����ؿ�����(��D����<�������\���p����������������(�� �l�� ��� ��#���,#���l%�0�|%�D��&�l��(��<)����)� ��+���/��|0�4��0�p�|3���7����;�T��@��\D���F�t�,G��<G��LG����G���J�L��K���K���K��,L���lL��|N�X�,O���O��P��,P�(�<P�<�|U���U���U����U���V���V��<V� �LV�4�lV�P�|V�d��V���W���,X��LX�,��X�L��X��LY���Y����Y��lZ��[�P��[���^���_��<_���_�8�l`�d�La���a��,b���|b����b���b��,c�0��c�\�i���i���,j� ��j�@�\l���l���l����m����n�4�Lq��|q���q��<r����r��\s�L��s�t��s��|t����t����t��u��,u�$��u�X��u�l��u��,v���w��,x��\x�4��x�X�|y�|�z��<z��Lz���\z���|z����z���}�4�\��|�������������<����l����������(���t�l������������L���|��4����T�l�������,�������������\��l����<����܎��|��D����\�������������l������4���������L����|����\���<���,��0����P��������<����|��������0�\��\��������L��������ܦ�p��������ܧ�(����p�\����������4����P����<���̭����������8�L��L���x�̱����������\��@�̳�l�����,����\����|�����@�\�����������<����\������(����T�,��p�����̽��l�������<��0�\��D��������,����<�����������$�<��D�|��`����|������������������\������<����X����t�,�����������������,������L������������������L����h�|���������������<������������,����|��������<���l��0���h�l����������������\��������������0����|��������|������0�,��H�L��`��������L�����������<��0�l��L����h�����,����L��������������0�|��L����d����|�<���\���|����<���|��(����d���������,����<���l�����\�l��|�����������������|����������(���D�<��`�|�������|�����������0�,��l����������\������� �l��d��������l��,����\����\����������,����D��������\������ �\��4����P����d���x��������<���\���|�����������������,���@�<��T�\��h�|��|�������������������<���\���|������0����D���X����l����<���\���|�������������������� �<��4�\��H�|��\����p��������������<��\��|�������$���8���L��`�<�t�\��|����������������<��\�(�|�<���P���d���x������,��<��\��,��\���� �|�<���X�l�l����L��|��������<	��|	���	��|
� ��8���p�l�����|
���
���
���
���
���(�<�<�\�P�|�d���x������������<��\��|�����,��@��T�h<�|\�|�������������<�\�0|�D��X��l�����<�\��|�������� ��4�H<�\\�p|������������<�\�|�$��8��L��`��t�<�\�|�������������(<�<\�P|�d��x��������<��\��|�����,��@��T�h<�|\�|�������������<�\�0|�D��X��l�����<�\��|�������� ��4|�H�3�<4�l4���8��9�L�:�,;�|;��|<�(	<=�\	\=�x	�=�	>��	|>�	|?�(
|@�t
A�
�A��
�A��
LB� �B�T<D��D��|E��E� ,F�L�F��G��L�
,O�\
�O�
lP��
Q�
�Q�,S�t�S��T��,U��U�L�[�l�\��\��]�|]�,�]�`^�|lj��j���o��,z�Plz��V�W�<W�8lW�`|W�t�W��W��W��X��X�Y�,<Y�H\Y�\�Y�x�Y��Y�LZ��\�\�e��f���f�0 ���H.\��l.���.���.����.l��,/���d/���/���/����/l��0<��<0���x0���0,��1����1|�2��D2��2���2��3��\3L�p3��3��3,�3�	��3L�4���4���4,�5�� 5<�X5<�5��5��6��86l"�|6\*�6,2�6<2��6l2��6�2�7�2�7�2�(7L3�t7�4��7|5�86�\8�6�8�7��8�7��8L8�9<?�9�?��9l@�:|@�,:�@�H:�@�d:�A�:�A��:B��:�B�;�B�0;�B�D;C�X;,C�l;�C�;LD�;|D�;E�;<E��;�E��;�E�;F�<,F� <LF�4<|F�P<�F�d<�F�<\G��<�G��<H�<,H�=�H�L=I�`=�I�=M�=�O�D>�R�>\S�>�T�?U�8?^�?<^�?�^��?b�4@�f�@Lg�@�g��@�i�A�i�$A�i�8A�i�LAj�`A\j�A�j��A<k�BLk�B|l�TB�l�lB�m�B�m�B�m�B�m��Bn��B,n��B|o�0C�p�|C<q�C|q��C�q��C�q��C�q�D\r�$D�r�@D�v�D�w��D|x��D�x�$ELy�XEz�E�z��E}�F�}�DF\~�lF���F��$G|��pG|��G����G,���Gl��H���HH܈�H��H\���H����HL��I܊�PI<��I����I��J<��8J|��LJ���`J|��J|���J,��,K���hK̓�K���L��PL̖�dL,��L���L,��L\���L<��M���0M|��M���M|���M��N��$Nl��@N���\N̞�xN,��N\��N����N����NL��O|��,O���@O��TO���O���O���P��$P,��LP���`P���P��Pl��P��(Q|��`Qܦ�Q���Q\��Q����Q�� R���xR���R���S��,S��DS��S|��Sܭ�,T��hTܴ�TL���T���U��|U̷�U<���U,�� Vl��pV̻�V<��V����V<��W���,W\��XW���W���W<���W��X|��4X��`X���XL���X���Y���LY\��Y���Y���Z���DZl��Z���Z���8[���d[L��[<���[���[���L\���\����\l��],��<]���l]���]����]l��^<��T^��^����^���_���X_l��_\���_|��0`l��``|��`���`|��(a���ta���a���a<��<b\��|b����b���(c���dc��cL��c���Hd���d,���d���e��He���e\���e���,fL��xf��f��g��Pg��g�hl�8h��h��0i��i� ��i<(�$jH�k<��Xl���tl|��l����l,��m|��XmL��m����m���To,��o����o���pl���p̼�q���hq��q����q���rl��\rl��r|��s<��Ps<��s���sL
�8t��t���t�"�$u|#�Hu�&�u�'�uL+�v�+�8v�.�v<e�(wLe�<w�k�w�k�w�l��w�l��w�m� x�n�\xo�x,p��xLq�ylr�\y�s�y�s�yLt��yv�z|v�$z�v�<zw�Pz�w�dz,x�xzy�z\y�z�y�z�y��z�{�{}�p{\��{���|��\|���p|��|���|���|̋�|���|l���|<��||��}���(}��<},��P}l��l}����},���}���~L��<~���T~,��h~<��|~���~,��~|��~L���~���D���̤�����L��,�̨�D����X�<��,������؁|������`����t����������,��Ԃ����zRx�$x�`aFJw�?:*3$"D�P��Pa \���A�C
A�t
A(�T�]A�H
F���H��
F���6E�L
ON$���rE�C
E����
D��HN�HN$�HI<�/P4�d0�x<�?�h��d�F������/A�Q
NJ(���tA�G�N N
AAA(��E�D�D0V
AAK0@d�CB�A�A �D0�
 AABHt��,E�[������L���BF�B�B �A(�A0��
(F BBBBv
(H EBBE��	��80��,D���E�D�D �T
ABDt�����4�$�6B�D�D �O
ABDRABH�,��B�B�B �B(�A0�A8�FPV
8D0A(B BBBE@4���B�E�B �A(�D0�G@�
0A(A BBBA@x,��B�E�B �A(�D0�G@�
0A(A BBBAH���}F�E�E �D(�F0O
(A ABBAD(C ABBL��fN�F�A �A(�D0
(A ABBBd(F ABBA����4X���F�D�A �u
AEJKAE�t�-����H�\��B�E�E �D(�F0^
(A ABBFD(C ABB4��nB�E�E �D(�F0N(D ABB@<���F�B�E �A(�D0�D@7
0A(A BBBK zRx�@�����(����8�<�F�B�A �D(�G@�
(A ABBEzRx�@����$C���8(|�F�B�A �D(�G@�
(A ABBEt���8x��F�B�A �D(�G@�
(A ABBH�ɪ��`�L�YF�B�B �A(�A0��
(F BBBDD
(A BBBMT
(F BBBH zRx�0�����(@���pd����F�B�E �A(�A0��
(A BBBK�
(F BBBAD
(A BBBHn
(D EDGE�˩��p�X���UF�E�A �A(�D0s
(F ABBAS
(F ABBB\
(D ABBKQ
(G CDEEzRx�0����$6���`�	���tF�B�B �A(�A0��
(D BBBDa
(D BBBEI
(A BEBA�Ѩ��4
����E�A�D ~
AAF|
DAO,D
���qs�F�E �mABB��� t
 ���nE�v
E`
H �
l���fE�o
LV
J$�
�����E�|
OK
MmL�
0���3E�A�I �
AAHD
FAED
DAGLAA84 ����B�E�B �E(�D0�w(A BBB4p����h�D�O M
CADDG�A��\���)E�W�p���AAK�t���(A�[4�����lF�A�D �Q
ABAADB44�����F�D�A ��
ABKQDB4lH����F�A�D �U
ABEQDB�����AAK�����J���7A�X
A0�����F�A�A �D@k
 AABA,$
`���mR�C�A �JABE���T
����$A�^p
����<�
�����N�B�B �A(�I0��(D BBBA�����H�
`����F�B�B �B(�D0�A8�D`�
8A0A(B BBBKL��FN�E�D �C(�H0�
(F ABBKD(C ABBD����4`���B�E�D �A(�F0h(D ABB@�,�vF�B�B �A(�A0�D@!
0A(A BBBGL�h��F�N�B �A(�A0��
(C BBBF�(F BBB(,�	�uk�A�G K
D�A�MX
�a lx
�jD�a
K^
B��
��(�p��B�A�D �{
ABK(�
��A�D�G P
HAK ��
��A�G0�
AD �&E�X
CA @$��E�t
GL
D4d��kF�A�G0$
DBHR
FBFH�(�WF�B�B �B(�A0�A8�D`�
8A0A(B BBBE0�<��F�A�A �D0�
 AABIH��GF�B�B �B(�A0�A8�D`�
8A0A(B BBBEh��,|�@�D��P�H�L��B�E�E �B(�D0�D8�GPt
8D0A(B BBBJL��}F�D�G �G0R
 AABBz
 AABBH AAB8T�mB�E�D �D(�G0u
(D ABBL�D�"(�`�*B�D�D �XABH�d��B�B�B �B(�A0�A8�G@U
8D0A(B BBBE`���B�E�D �D(�G0
(A ABBE�
(A ABBH`
(D ABBG���gO4���_A�A�D ]
IAKL
IAEzRx� �� ������IE�a
JQ  �FE�^
MN,@D �GF�A�A ��
ABD@pd"��A�A�G �
AAFr
AADH
AAF��#��M�z�Q�P�P$��U�B�A �A(�D0�����H0����K
(D� A�B�B�L(�&�WE�w
L(D@'��A�A�G0�
AADHp�)��F�B�E �A(�A0�g
(A BBBCh(A BBB�*�HN4�*��B�B�D �D(�F0n(A ABBLh*�SB�E�B �A(�A0��
(A BBBH|
(A BBBML\x+�vF�G�A �A(�G`�
(D ABBF`
(D ABBG4��-��A�D�G x
AAJw
GAI|�`.��B�E�B �B(�A0�A8�DP/
8A0A(B BBBFA
8D0A(B BBBJH
8A0A(B BBBF dp1��A�J0n
AF(��1�>E�C�D0y
DAF�3��E�n
E@��3�tF�B�B �D(�D0�FPS
0A(A BBBA�7�.E�X
KA\8�7��F�B�A �A(�D0n
(D ABBK~
(A ABBDH
(D ABBG ��8��E�G0d
AG�9�&E�X
CAH�(9��F�H�B �B(�D0�A8�D@�
8D0A(B BBBG0(�9��E�A�G l
DABDAA\(:�Rpt:�H��:��F�B�B �B(�A0�A8�G`I
8A0A(B BBBHH��>��B�B�E �B(�G0�A8�GP�
8A0A(B BBBBHx?�;F�B�B �A(�D0��
(D BBBE^(K DDEHhl@��F�E�A �A(�D0�
(D ABBCQ(F HDEL��@�yF�B�B �A(�A0��
(A BBBEd
(A BBBE4 B��E�D�D }
AADa
AAE<�B�)(P�B�YE�A�J w
DADH|(C�F�Q�J �B(�A0�A8�D@�
8D0A(B BBBD��C�H��C��F�B�B �A(�A0�u
(D BBBED(A BBB8(<D��F�M�A �l
ABMo
ABFHd�D��F�N�B �B(�A0�A8�OP�
8A0A(B BBBK,�dF�0E�C
F���F���
Ad�dI��F�B�E �B(�A0�A8�DP
8D0A(B BBBKA
8D0A(B BBBB8H�J�F�E�A �A(�D��
(A ABBI<��K�{E�D�G0S
AAKz
AADHAA��K�X��K��B�B�D �D(�G0u
(D ABBGU
(G DBBDT(C ABB4pL�9E�n
A@P�L��F�B�B �A(�A0�D@�
0A(A BBBE�0N�0�,N�^E�D�D y
AAHHDA�XN��dN�&�N�VDI�N�HH0z
A08�N�WE�A�G h
DDKDEAl(O��4O�H�@O��B�E�B �E(�D0�D8�G��
8A0A(B BBBD��P�4Kc
AH��P��F�B�E �D(�E0��
(D BBBJG(A EBBHH LQ��F�B�E �D(�E0�}
(D BBBCW(A EBBH� �Q��E�G�D v
AAHk
DAPD
FAE\FA<� TR�jF�B�B �A(�D0��
(D BBBI !�S�4!�S�H!�S�8\!�S��F�E�A �D(�G0�
(D ABBK\�!�T��F�I�E �E(�A0�D8�FP�
8D0A(B BBBGS8D0A(B BBBD�!|U��F�B�B �E(�A0�D8�F@~8A0A(E BBBD@"�U��F�B�B �E(�A0�D8�F@~8A0A(E BBB4�"LV��F�A�D �i
ABIAAB\�"�V�F�E�A �D(�I0�
(D ABBDf
(D ABBAx
(D ABBA���L4#0X��F�E�A �D(�G0U
(A ABBFH
(D ABBG�#�X�8�#�X��F�B�A �A(�G0�
(A ABBJH�#�Y��B�E�B �B(�D0�E8�G`�
8A0A(B BBBE@ $�]�E�A�D �
AAD\
FAEW
DAD<d$`^�M�C�G0AAH��P0��^
AAH�$0_��H�b
F0�$�_��I�C�G0^DAJ��P0���$0`�E�Q%4`�$H [(%L`�J<%�`�4E�P
KL4\%�`�TE�A�F ]
AAED
MAEH�%�`�F�B�B �E(�A0�A8�D`�
8A0A(B BBBA�%�b�'E�M
FGL&�b��F�B�E �B(�A0�A8�D�i
8A0A(B BBBH|P&$d��F�B�B �E(�A0�D8�G@�
8C0A(B BBBO�
8D0A(B BBBD�
8J0D(B BBBF�&�f� �&�f�}E�l
GV
J4'�f��F�A�D �^
ABLADB@'Tg�ME�Z
I4\'�g��F�A�D �^
ABLADB,�'�g��E�C
P������
A(�'�m��E�D�G@t
AAJ4�'Tn��I�A�A �[
ABGd
ABI((�n�f <((o�XE�G o
AD8`(do��B�E�D �G(�GPf
(A ABBK0�(�o��F�D�A �D@�
 AABF,�(�q�E�G ^
AEK
ADzRx� � ����L0)$r�9F�B�A �D(�G0y
(D ABBJ\
(A ABBF8�)t��F�A�D �Z
ABHI
ABD�)ht�E�T�)lt�E�T$�)pt��b�t
�Je�c�`*u�vF�B�B �B(�A0�A8�DP
8D0A(B BBBAQ
8A0A(B BBBE$�*4w�CE�F�G nAAL�*\w�1F�E�B �B(�D0�A8�G�y
8A0A(B BBBB�*L�(+X�/F�D�G �ZAB8+\�.,L+x��E�C
H����D�x
D,|+H���E�C
I������
E,�+��EE�C
D��H���p
D,�+(���E�C
D��E�E�H�1
Ad,ȋ�RF�N�B �B(�A0�A8�O@H
8D0A(B BBBJg
8D0A(B BBBD t,���sE�h
CU
K,�,���E�C
D��F�J��
H@�,ܒ�F�B�E �A(�A0�DP2
0A(A BBBCp-���F�B�H �A(�A0��
(D BBBC\
(C BEBHA
(D EBBJ�
(D BBBD(�-T��eE�D a
GOM
GE�y���"�-���	0�-����E�D�D d
DAJODA.��	L.���F�B�E �A(�D0�F
(A BBBA�
(D BBBH l.8��TE�j
AW
AH�.t���F�E�B �H(�D0�A8�K��
8A0A(B BBBKH�.����F�E�E �E(�C0�^
(G BBBMA(A BBB`(/��F�B�E �A(�D0��
(A BBBGR
(A YBBHG
(A EBBG0�/Ț��F�A�A �GP�
 AABJ�/T��4E�P
KL�/t��-E�`\�/����F�B�A �D(�D@F
(D ABBHC
(D ABBDo(D ABB0\0(���F�E�A �DP~
 AABA�0����0����0���
�0���%HW�0���%HW�0Ȩ�%HW1��$HV,1���)H[D1��)H[\1(��)H[t1@��)H[�1X��)H[(�1p��uF�A�K �_AB�1ĩ�!HT�1ܩ�D�1ة��F�B�B �A(�A0�m8H@X8D0A(A BBBD2@��cM�@C�(`2���CB�R�I �bAB�2���,H_8�2Ъ��B�H�A �D(�D��
(A ABBAL�2���pF�L�B �B(�A0�A8�D�2
8A0A(B BBBH03���7HfH3̬�)\3��DMt3��?A�U
E8�3���B�E�D �D(�D@U
(A ABBB�3x�� �3���JA�G@x
AG4���$KT4ȯ�'A�Q
NF <4د�OE�_
LF
A`4��HM�h�|48��"@�4T��IB�E�E �D(�A0�GP�
0A(A BBBE�4`��H�4l��EB�B�B �B(�A0�A8�D�}
8A0A(B BBBK$zRx��������,�}��p54��'KW8�5L��OB�B�A �J(�G0�
(D ABBFd�5`��2F�E�E �E(�D0�D8�DP�
8A0A(B BBBNh
8F0A(B BBBI,68��@6D��xL�g\6����p6T��y$�6����L�E�t
AJ,�6H��3G�E��
AJB
AE�6X��A��
G�6H��
47D���B�D�D �`
ABCnAB,H7����E�E�G ��
ABE4x7<���B�E�D �F(�J0�(A ABB�7����H�T
D_T�74���B�B�B �E(�D0�A8�D@�HKPIHA@H
8D0A(B BBBGP(8���RB�D�A �j
DBIA
DEF�(B0F(D A
ABE|8���YL[
I�8,�� AAK�80��!AAK(�8D��JA�I�D0�
AAE|�8h��{B�E�E �E(�A0�A8�D�J�H�W�B�s�G�X�A�W
8A0A(B BBBJD�J�S�E��|9h���B�B�E �E(�A0�A8�G�o�M�T�D�_�D�j�M�K�A�p�J�X�D�a�E�g�H�\�B�Z
8A0A(B BBBBZ�J�Y�D�b�E�d�M�W�D�P�M�U�D�a�A�H\:H��KB�B�D �A(�DpCxH�VxDp�
(A ABBG�:L��#�:h��6�:���m8�:���|B�E�E �D(�A0�c(A BBB ;4��JP4;p��*F�B�B �B(�A0�A8�DP�X\P[
8C0A(B BBBK8�;L���B�B�B �D(�A0��(A BBB\�;��SN�F�B �A(�A0��
(A BBBHY(I BEBE�����X0�����$<���(8<���5A�A�DP�
AAKd<���RDI|<���0�<���3B�A�A �D@�
 AABI8�<���wB�B�A �A(�DP�
(A ABBD0=���bE�A�G ^
DDMUGA04= ���B�A�A �Gp�
 AABG0h=|���A�C
B�E�E�E�D�f
AL�=���B�B�E �D(�A0�}
(A BBBAm
(A BBBIL�=X���B�B�B �A(�A0��
(A BBBEN
(F BBBA,<>���\A�C
B�I���H��
A$zRx�������,�t��,�>���(A�C
P������
D��>����E�E�B �A(�D0��
(D BBBL`
(A BBBIA
(A BBBHD8T@BHBPI0A
(A BBBKm(A BBB l?���|H@FHDPdHA@D,�?T���A�C
H����R�/
CL�?����H@F
BGHGPFHA@D
GDHKPDXD`I@D
DDHGPFHA@,@T��iA�C
B�G��J���
Kh@@���B�K�M �F(�D0�D8�D��
8A0A(B BBBA~�N�F�F�F�F�A�,�@�	�QA�O�S G(H0\AA��@
��B�B�K �E(�D0�D8�N�O
8A0A(B BBBEd�L�F�I�F�I�G���L�F�I�F�I�|�8dAp�NF�B�A �A(�DP�
(A ABBG0�A���F�A�A �D@�
 AABIH�AP�^F�B�A �A(�DP�XQ`BhBpgPW
(A ABBHD Bd��F�B�A �A(�DP�XK`dXDPX
(A ABBCDhB���F�B�A �A(�DP�XK`dXDPT
(A ABBF8�B$�NF�B�A �A(�DP�
(A ABBG�B8�V(C��PE�A�G0J
AAGzRx�0�� "p��4\Cx��E�D�G j
AADT
AAJ �C��aA�z
EQ
G�C<�PDc
I[�Cl�@�Cx��B�B�B �A(�A0�G`
0A(A BBBK0D4"�ADDp"��� V\DX#�AA��
FX|D�%��F�B�B �B(�A0�A8�Dp�
8A0A(B BBBD�xK�TxBpX�D(��F�B�B �B(�A0�A8�Dp�
8A0A(B BBBD�xK�UxBpH4E�*��B�B�B �B(�A0�A8�D`~
8A0A(B BBBJ zRx�`������(�m��,�E�+�]A�F
D��E�F��}
A��m��L�E7�TB�B�B �B(�A0�A8�G��
8A0A(B BBBD$zRx��������,)m��w,�F�L�d
A�C
P�����K
AP\m���FW�8�FW�\F�A�A �r
ABCf
ABGG8X�	0G4X�DG@X�yL�K
IXdG�X�(TS8|G�X��B�B�A �A(�GP�
(A ABBC8�GL[��B�B�A �A(�GPE
(A ABBHd�G�]��B�E�E �E(�A0�A8�D`�
8F0A(B BBBK�hKpJhB`�hKpIhA`8\Hxb��B�E�D �D(�D@�
(A ABBE(�H�c�
A�D�G0�
GAJ8�H�d�	B�E�D �D(�G@o
(A ABBEI�e�%I�e�% (I�e�E�G �
AKDLI�f��_�D�D �_ABG���X ���X���A ���,�I`g��B�A�A �j
ABG��I�g�(F�B�B �B(�A0�A8�G��
8A0A(B BBBH��E�W�A�d�K�V�B�j�N�U�A���N�V�B�M�M�\�B�dJ�k��H |
DL�Jdl��F�E�E �D(�D0�G`HhKpFhA`T
0A(A BBBK�Jm�<�J m�$B�H�B �G(�G0��
(D BBBJ($Kn�>A�F�G@�
AAEdPK$o��F�E�E �H(�M0�D8�D`phHpWhA`|hKpWhB`c
8A0A(B BBBF�K�s�L�K�s�F�B�B �E(�D0�A8�D�
8A0A(B BBBF L�{��E�J L
AD0@L�{��F�D�C �F@z
 AABGtL�|�H�L�|�,F�B�B �B(�A0�C8�Dp�
8A0A(B BBBDH�Lp}�;F�B�B �B(�A0�C8�Gp�
8A0A(B BBBGT Md~�KF�B�B �B(�A0�C8�Gp�x]�ZxApY
8A0A(B BBBHHxM\�;F�B�B �E(�A0�A8�Gp�
8A0A(B BBBF�MP��%�Ml��HtS,�M����F�E�D ��
BBC ND��4N@��HN<��	\N8��	pN4��	X�N0���O�A�D �
A�A�GUM�A�U ��|
A�A�JD
A�A�E�Nd��HE�j
A �N���TE�]
FS
A OԂ�HE�j
A <O��TE�]
FS
A`OD��0HN
JK �OT��uH _
Ip
HL �O���IA�G0
AHL�O܅�-E�D�G N
LAEr
GAF�
AADE
DAF P����E�G0r
AA <P(���A�Y
FN
B`P��tP���P܉��P؉�4�Pԉ�PE�T
Gn
Jb
Fk
EW
I,�P��:E�G0Y
AJ�
GEQ����E�S
H4Q��0HU
CK TQ��-H �
JX
HDxQ����Q�J Z
F�EvAI�H �D
A�K]
D�GD�Qd���Q�J Z
F�EnAA�H �D
A�KZ
D�J<R���{E�G S
IH�
AGc
DID
AKHR��\R�� pR���E�G |
AG0�Rp���F�A�D �G0q
 AABI �R,���E�G0D
AGX�R���E�D�G@�
DAM�
GAKp
GAHH
GAH{AA HS���yH@
HI
WD�lS���P�B�B �D(�A0�D@�
0A�(A� B�B�B�EP
0I�(A� B�B�B�F�
0D�(A� B�B�B�OY
0A(A BBBGl
0I�(A� B�B�B�E�
0A�(A� B�B�B�E������H@T�7F�B�B �B(�A0�A8�D�V
8A0A(B BBBFH�T���8F�B�B �B(�A0�A8�D�V
8A0A(B BBBFL�T���lF�B�B �B(�A0�A8�D��
8A0A(B BBBE (U̥��H�N
J]
K LU8���H�K
EZ
N4pU���~E�D�G �
FAA�
AAE�U��tE�}
N[�UL��-\P�Ud���U`��WV���<H]
KG4(V̩��E�A�GP�
AAFAXH`[XGP`V$��GtV`��NP�V����F�B�B �D(�A0�I
(A BBBA
(A BBBG|�VH��F�B�B �B(�A0�A8�G�B
8A0A(B BBBGS�J�X�D�^�D�^�D�]�O�K�D�$zRx��������,�\���W���RE�E(�W��eB�I�I �q
ABH0�W4���F�D�A �G0g
 AABCHX����F�B�B �E(�A0�A8�D@T
8D0A(B BBBJ`X��6cRxX��HQH�X$���F�J�D �D(�D0D
(C ABBHM(C ABB�Xh��HK�Xp��HQ(Yx���A�D�G |
AAF@8Y,���B�B�B �A(�A0�DP�
0A(A BBBJH|Yȷ��F�B�D �D(�G0d
(C ABBEW(C ABB�Y,��$H[(�YD��nF�D�D �g
CBFZ�����H$Z ���B�B�B �E(�D0�A8�Gp�
8C0A(B BBBDpZ���(Q�V�Zȼ�A�L�Z̼�#TN�Z��#TN�Z���#TN�Z��#TN8[,���F�J�D �A(�G0M
(C ABBGD[���bA�H
A8d[н�wB�B�A �D(�GPF
(A ABBD(�[���A�G�G y
AAF�[���Q�M�[���1�[���:E�t\ܿ�:E�t,4\��AO�D�D �[ABK���d\ ��9N�dF��\D��9N�dF�8�\h��-R�B�A �A(�D0Z
(A ABBF(�\\���E�I�D v
DAC$]��JA�G�D xDA,,]����R�D�A ��
FBE\]X���Hp
Ax]���hE�b�]0���],���](��&N�]D��A@�]���\F�B�B �A(�A0�DPC
0A(A BBBE(^���L<^���F�B�B �B(�D0�A8�G�
8A0A(B BBBD$zRx��������,~U��8�^����B�B�A �I(�D0
(D ABBF_��>d_,���0F�K�B �B(�A0�A8�D��
8A0A(B BBBF�
8A0A(B BBBIH�_���)F�B�B �B(�A0�D8�D�]
8D0A(B BBBA(�_(*��A�A�G }
AAH$�_�+�=E�A�G jDA0 `�+��F�A�D �G0z
 AABA<T`P,�F�E�B �D(�A0�\
(A BBBK<�`0-�5F�B�E �D(�D0�S
(A BBBA�`0.�E�T$�`4.�,E�D�J IJAa<.�JE�i
BY8al.�,L�_Ta�.�,L�_pa�.�	H�a�.��F�E�A �A(�D0{
(D ABBKc(D ABB4�a/��F�D�D �n
ABAxABb�/�E�O,$b�/�M�D�I �~
ABEHTb�0�B�E�E �B(�A0�D8�D�|
8A0A(B BBBC8�bT5�F�B�D �A(�G0�
(A ABBAH�b86��F�B�B �B(�A0�D8�G`�
8A0A(B BBBA((c�8�tF�A�A �hABTc9�vJV8lch9��F�B�A �F(�G0~
(D ABBC8�c�9��F�B�D �A(�D`�
(A ABBAzRx�`����$JP��d|:�JJ^0d�:�Dd�:�Xd�:�ld�:��d�:�SH E
A�d(;���d�;���d@<���d�<�(�d�<�4F�D�D �[DB(e�<�4F�D�D �[DB(De�<�4F�D�D �[DBpe=�&E�\�e=�!�e4=�K�ep=�a�e�=��H�eH>�"$F�B�B �B(�A0�A8�GpV
8D0A(B BBBH0(f,b�0F�A�A �D@
 AABE\f(d���(tf�d�+F�D�D �UAB4�f�d�:F�E�D �D(�G0I(M ABB�f�d�(�fe�3F�D�A �]DB(ge�/F�D�C �WDB<Dg e��F�B�E �A(�A0�C
(D BEBI(�g�e��E�D�D@W
AAJL�gdf�"F�B�E �E(�D0�A8�G�
8A0A(B BBBB0hDi�F�G�C �G��
 AABA44h j��F�D�C �G��
 AABA(lh�j�\A�I�G0C
AAA�hk�"HY�h4k�HI�h<k�HI�hDk�"HY(�h\k��E�A�D@�
AAC4$i�l�fJ�J�Q a
CAFDFAE��\im�WH I
A0xi\m�EE�D�G M
CAGZAA�ixm�QH C
A�i�J��\E�G�A $�i�m�PE�J�N mDAj�m��E��,j�n�k4@j�n��A�A�G f
AAGN
AAHxjlo�
8�jho��B�B�A �A(�D0A
(A ABBGla�I��$�j�o�QA�E�G AAA(kp�\B�F�D �LAB0k4p�#$DkPp�QA�J�D AA$lk�p��A�C
G��N
GzRx����$	I��	�k�r�	H�k�r��B�B�E �B(�A0�A8�DP�
8D0A(B BBBG(l<s�3Lf4@lds��A�M L
DBk
ID�
DExl�u�"EAK�lv�r$�llv�9E�D�D gCA�l�v�jVWS\�l�v��B�B�A �A(�G���V�F�A�|
(A ABBFD�U�F�A� zRx������(VG��& �m�w�~E�h
CI
AzRx�� (G��	(�m�w��A�A�D }
AAA8Z�F��90nLx��B�D�D �G0d
 AABG4Ln�x�sB�D�D �I
ABJOAB�ny�2Z�n<y�>f�nhy�Lt�n�y�]s]�n�y�Us]�n4z�>f(o`z�XP�F�G dFAH��0o�z�oW4Ho�z�eA�J�G S
CAGO
FAAD�o${��B�E�E �B(�A0�A8�DP�8D0A(B BBBL�o�{�B�B�A �A(�I0h
(D ABBHR
(I ABBHHp\|��B�B�B �A(�A0�b
(A BBBGI(C BBB<h�D��xp�|�>fH�p�|��O�B�A �A(�D0J
(D ABBFD(F ABB�pdD��
$�p�|�AQ�D�G `CATq}��B�E�E �E(�D0�A8�J`]hIpExA�V8A0A(B BBB�+�C��	L�qD}�uO�E�E �E(�D0�A8�GP_XH`Y8A0A(B BBB�qC��
�q`}�	(�q\}�QK�D�F rAAG��$r�}�$E�Z@r�}�#E�Y\r�}�4E�nxr�}�-A�k8�r�}��B�E�D �D(�G0�
(A ABBE$�rt�:E�D�F eDA�r��s��ME�O�\(s���B�B�B �B(�A0�A8�Dp_xH�G�D�WpX
8A0A(B BBBA zRx�p������(�A��	$�s��JA�Z
E^
JAD�s,���B�D�B �B(�A0�A8�DPs8A0A(B BBBD0tt���B�E�E �E(�D0�F8�DPp8D0A(B BBBxt̀�9�t���C�t4��X�t���^�t́���t�@��	�tD��_A�]h_@��	0 ut���B�A�D �J0I
 AABBTu����huL��1\|ux���B�B�B �B(�A0�A8�D`�
8C0A(B BBBKL8F0A(B BBB$�u���A�A�G �AA8bp?��
v\��*DezRx�6?��H\vH���B�B�E �E(�D0�A8�GPw
8D0A(B BBBB4�v���XR�B�A �D(�G0q(A ABB�vԅ�AAK�v؅�$A�]
A(w���B�J�I@{
ABE4Dwp��bF�D�D �`
ABGUNB|w���!AAK4�w����E�D�O K
DAHL
DAGL�w$���B�H�D �A(�D0|
(K ABBID
(A ABBA0 x����F�A�D �D0~
 AABG0Tx ���F�A�G �G@}
 AABA4�x���cQ�D�G _
AACTF�D�,�xԈ�=A�G
D��G��I��
J�:�<��"<yЋ�B�E�B �A(�D0��
(D EBBL`Dy���1N�A�G N
AAJ`
DAKDFAE��H ��|
G�A�L\G�A�0�y���tB�A�D �G0~
 AABH(�y؍��E�D�G@p
AAA(z<��SF�D�G �|CB<4zp���F�E�B �A(�D0�d
(A BBBC0tz���uF�A�D �J`�
 AABA0�z���F�A�A �J0d
 AABA8�zX���F�E�E �A(�J0z
(J ABBL{���E�O,4{����A�C
H����H�S
I0d{`��YQ�G�G f
CAGDCA,�{����A�C
M������
H@�{���B�B�E �A(�A0�G@}
0A(A BBBA�u�9��, |d��sA�C
M�����<
C(P|����A�C
M������
E||H������|���Z^8�|����H F
BN
BN
BN
BN
BN
A�|��`Km
H}P��!AAK4 }d��MB�D�K �c
ABIA
ABA0X}|��B�D�A �N0K
 AABD@�}h���F�B�B �A(�D0�D@}
0A(A BBBHL�}���F�E�D �I(�D0q
(D ABBJj
(D ABBAL ~����F�E�D �A(�L0g
(D ABBDL
(D ABBKHp~��F�B�B �B(�A0�C8�G`�
8A0A(B BBBEH�~ȝ��F�E�B �B(�A0�D8�DP�
8A0A(B BBBBH\��<F�B�E �B(�D0�A8�DP�
8A0A(B BBBG TP��HDU
GW
IG(x|���A�D�G0e
AAA|<6��(�̟�FB�D�A �uGB���J4�,��bB�D�A �f
JBGA
MBHL0�d���B�J�D �H(�G0p
(C ABBID
(F ABBA,��Ԡ��A�C
F���J��=
G(��4���A�I���]�H�A�H܀آ��B�E�E �B(�A0�D8�G@e
8D0A(B BBBAH(�\���B�B�E �E(�D0�D8�G@{
8D0A(B BBBK@t���.B�E�E �D(�D0�G�I
0A(A BBBD$��ܤ�YE�N�N uAA\����|�E�J �E(�D0�D8�J@�8A0A(B BBBI������P@������L@�����B�E�E �E(�A0�D8�GP�Xm`N8D0A(B BBBL��4���B�E�E �E(�D0�D8�DP@Xw`Y8A0A(B BBB@����9B�B�H �D(�D0�N@�
0A(A BBBF�|�2��
$8����v^�D�G EFA`�s2��	Ht��fB�H�G �D(�K0Q
(D ABBFY(D AEB8�����B�B�B �A(�A0�{
(A BBBF ������E�G0Z
AI �$��hA�f4<�x��Z |
JD
LD
LT
LU
KG
It�P����@��ȫ��F�D�A �D0e
 DABEL
 DABE(ЄD���A�J u
AG_
AH(�����A�L c
AG_
AH (�|���A�J Q
ACHL���F�B�B �B(�D0�A8�G`~
8A0A(B BBBH0��ܰ��F�D�G �G0�
 AABAd̅����B�B�B �B(�A0�A8�D�h
8D0A(B BBBED
8D0A(B BBBGL4��B�E�B �E(�A0�D8�L�%
8A0A(B BBBB`��0��%B�E�B �E(�D0�D8�GPZXF`nXCPsXF`[XFP8A0A(B BBBT�����B�B�E �E(�D0�D8�GP3XF`lXIP�8A0A(B BBBT@�D��fB�E�B �E(�D0�D8�G@tHFPlHE@�8F0A(B BBBD��\���F�B�D �D(�G0�8G@X8A0O
(I ABBO`����B�E�B �E(�A0�K8�G@HHFPgHC@rHFP[HI@�8A0A(B BBBTD����fB�E�B �E(�A0�K8�G@ HFPgHA@�8A0A(B BBBT�����#B�E�B �E(�A0�K8�G@bHFPgHE@^8F0A(B BBBL�����
B�B�B �B(�A0�D8�J��

8A0A(B BBBJHD�0��B�M�K �D(�D0�y8L@f8F0A
(A BBBE0����lB�A�D �D0
 AABA$ĉ@��/A�A�K UDD$�H���DQ
KJ
NN
JH����B�B�B �B(�A0�A8�D`D
8A0A(B BBBD�D|+��\t����+B�H�D �D(�G0Q8M@[8A0E
(A ABBJc
8M@HD(A ABB\Ԋ���#B�H�D �D(�G0M8M@[8A0F
(A ABBEc
8M@HD(A ABB44�P���B�E�G �A(�G0V(N ABB`l����0B�I�D �D(�G0K8L@[8A0H
(A ABBE`
8L@LD
(A ABBF`Ћt��8B�I�D �D(�G0O8L@[8A0G
(A ABBJ`
8L@LD
(A ABBF�4�P��gB�B�E �B(�D0�D8�G`LhkpbhF`�
8J0D(I EBBGi
8A0A(B BBBEdhNpkhA`�hNp}hA`p��4��B�E�E �B(�A0�D8�G`jhFpRhB`khepFhA`vhNp_hA`�
8A0A(B BBBJ�4�����B�B�B �E(�A0�D8�G`�hFp]hH`LhBpghI`@hFpmhF`�hNpshA`BhEpnhJ`�
8A0A(B BBBH�8A0A(B BBBd؍<��B�E�E �E(�D0�D8�GP^XF`RXAP�XN`dXAP�
8A0A(B BBBKH@�����B�B�B �B(�A0�A8�Dp�
8A0A(B BBBDk'��
���$��}B�B�B �B(�A0�A8�DP�
8D0A(B BBBI�
8F0D(B BBBOO
8A0A(B BBBGD
8D0A(B BBBOD
8H0A(B BBBK zRx�P������(�&��
L�����&B�B�B �B(�D0�D8�G��
8A0A(B BBBI$zRx��������,&��H�`��B�B�B �B(�A0�A8�D�K
8A0A(B BBBE$zRx��������,�%��
X��h ��B�B�I �B(�A0�A8�N��
8A0A(B BBBIM�c�P�A�H���%�B�B�B �B(�A0�A8�G�[
8A0A(B BBBJ$zRx��������,�$��U��$8�(��08��E�H�GP�
AAFzRx�P�� �$��	L��8��F�B�B �A(�A0�Q
(D BBBIh
(D BBBFL@�9�X
F�B�B �E(�A0�A8�D��
8C0A(B BBBE@��$C�(H0P
HX
HX
H`
HX
Hx
H\
LTԒE�B�B�B �B(�A0�A8�DP�XB`nXCP�8A0A(B BBB\,��F�\B�E�E �D(�D0�k
(A BBBJT
(A DBEH�(E GGB����H��B�F�B �B(�D0�A8�J�
8A0A(B BBBHC�G�K�H��t�F�A���q�K�A�|�v�_�B��e"��
�4�O�`B�B�E �B(�D0�D8�G�+
8A0A(B BBBAl�K�P�A���H�s�B���W�h�A��
�G�W�A�}�K�V�D���K�F�B�{�B�q�C�u�B�e�H���B�l�E���E�|�A��H�m�A���H�m�A���B�V�A��B�W�B���E�i�A���A�m�A���W�f�B���B�m�A��M�V�A��R�V�B�	�E�m�B���^�o�E���X�d�B��h�\�B��c�\�F���H�r�B��W�h�B���E�i�A���B�l�B��	�L�_�A���F�\�B�K�E�[�B���]�]�A���G�M�D��
�P�E$zRx��������,���L$�@���F�F�B �B(�A0�A8�J�)

8A0A(B BBBA$zRx��������,���8d������R�G�E �H(�I0�D8�G@�
8A0A(B BBBIv8C0A(B BBBF�����Ϝ�����2B�E�B �B(�A0�D8�G�T
8A0A(B BBBK��K�E�D�S�S�B�A�B��B�W�A�s�K�O�A��B�a�A�B�B�U�A�3�B�V�A��E�x�C���E�g�B���E�g�B���E�q�D�B�E�Z�B���K�W�B�~�B�l�E���[�N�B�N���`�H�E�S�^�H�Q�A�>�H�H�G�X�S�B�{�H�s�B�W�B�Z�[�L�B���B�o�B�h�B�q�C���B�c�H�B�B�V�A�I�E�s�A�B�B�U�A�e�K�S�A�P�O�H�B�V�.�B�]�E�B�K�W�B���B�v�A�u�B�\�A�F�K�V�A���B�p�D���B�h�E��B�k�C�|�B�i�H�z�B�`�E�B�K�R�B�%�B�j�H�B�E�d�B�B�E�P�A�Z�B�V�A���B�W�B�=�B�h�C���B�p�D�x�B�x�B�1�B�p�B�H��T̛����B�E�E �E(�A0�A8�JP[XD`NhApZP^8A0A(B BBB�$�0��2B�F�F �B(�A0�G8�J�
8A0A(B BBBF[�G�S�I���f�B�B�S���m�S�A��a�U�J���F�_�H�8�F�o�D�L�F�p�A���F�o�B���F�v�B�I�F�m�B�L$�p���B�B�B �B(�A0�A8�D��
8A0A(B BBBA
\��&T����AK�F�E �E(�A0�D8�GP1
8A0A(B BBBF����������
����hB�B�B �B(�D0�A8�D���T�U�A�H
8C0A(B BBBFI�e�^�G�D
8A0A(B BBBGL�I�N�A�c�S�P�A�l�J�[�A�p�M�`�A�\��X�fB�B�E �E(�D0�D8�G��
8A0A(B BBBIV�B�Q�A��i���(D0�T
�aL�D�D �Q
ABHD(L0O(A CAEG���\x�|
��B�B�B �B(�D0�D8�J���F�T�A�l
8A0A(B BBBA�؟���
B�I�B �B(�D0�D8�J��
8A0A(B BBBDw�M�O�A���E�j�A�]�E�w�F���D�P�B�c�M�R�A�\|��JB�I�E �D(�A0�Dpi
0A(A BBBFUxF�FxApGxF�FxAp zRx�p�����((��H����B�B�B �A(�A0�d
(D BBBJD(A EBB�`���B�E�E �B(�A0�D8�Gp�xH�axBp�xP�vxGp�
8F0A(B BBBG_
8A0A(B BBBG�
8A0A(B BBBEBxN�bxEpKxP�fxAp|�P"�0B�E�B �B(�D0�D8�GPG
8C0A(B BBBC�XV`oXCPa
8F0A(B BBBFBXJ`vXFP���(�B�E�B �B(�A0�D8�J�]
8A0A(B BBBG��B�n�B���B�m�B���B�s�A�F�B�n�A���B�W�B���B�l�A�]���
D`�D7��B�M�E �I(�D0�8I@l8A0A(A BBBH���7�6B�B�B �B(�A0�A8�D��
8A0A(B BBBCH��>�B�B�B �E(�D0�D8�G��
8A0A(B BBBK�@��C��B�F�B �B(�A0�A8�G���N�f�A�h
8A0A(B BBBFD�N�f�A�W�E�s�B�o�E�o�B�$zRx��������,F��
���K�	B�E�E �B(�A0�D8�GpxA�\xBpkxN�bxEpbx\�oxCp
8A0A(B BBBD�xN�nxGp�
xH�Q�
xH�I���8T��
B�F�E �E(�D0�G8�J���G�`�A�N�K�Q�A�s
8A0A(B BBBC��T�q�B���g�Y�B�\��)�T��a�SB�B�B �E(�D0�D8�GP�
8A0A(B BBBJ�XH`ZXAPr
XJ`Pw
XH`I�
XJ`OqXN`}8A0A(B BBBJPs
X[`J�
XJ`GLXG`sXAPD
8A0A(B BBBK
XJ`O�
XJ`Oq
Xi`Ff
XJ`Pn
XJ`PLP��k�*B�H�B �E(�D0�A8�G�
8A0A(B BBBAI���"H���m��B�B�B �B(�D0�D8�G`>
8A0A(B BBBA|�4o�^B�F�E �B(�D0�A8�J���K�e�H�}
8A0A(B BBBE>�F�f�A���j�^�B�`��t�^B�B�B �B(�G0�D8�G`K
8A0A(B BBBA�
8F0A(B BBBF8�v�B�B�D �D(�GP}
(A ABBJH ��v��B�B�B �E(�D0�D8�F`
8D0A(B BBBG�c+��
$���~��A�X
GS
Ey8����B�D�D �y
ABJ�
JBGt�����B�B�E �E(�D0�D8�F@�
8C0A(B BBBG\
8F0A(B BBBEy8F0A(B BBBp\�����B�E�B �E(�A0�D8�GPQXI`^XFPI
8C0A(B BBBC�
8A0A(B BBBHHЪD���B�I�E �E(�H0�D8�G��
8A0A(B BBBA��
��H0����UB�I�E �B(�D0�A8�G�w
8A0A(B BBBA�7
��	\������B�B�B �B(�A0�A8�G�u�J�S�H�u
8A0A(B BBBF$zRx��������,�����,���mB�F�B �B(�A0�A8�G���V�V�A�N�M�Q�A�M
8A0A(B BBBH�O�]�B��M�l�H�xf���Ԭ�������4�����aF�G�A �A(�D0@(D ABB,4����K�H�C �kABD���Ld�P��wF�B�E �B(�A0�D8�J��
8A0A(B BBBH$zRx��������,���F�D������^L����_F�F�B �B(�A0�A8�D�
8A0A(B BBBAD��L|�����F�B�E �B(�A0�A8�G�
8A0A(B BBBGd̮X���K�B�E �K(�D0�G@_
0A(A BBBAa0A(A BBBG�����C@�����(4�����E�P�F@h
AAA0`�$���F�P�F �D@k
 AABA(������E�P�F@k
AAA�����mQ�
H�9�	��L�4���B�B�B �B(�F0�A8�Q��
8A0A(B BBBG��	���T�����B�B�E �B(�D0�D8�J��c�O�A�q�B�I�A���F�[�B���Q�W�E�6
8A0A(B BBBGm�O�`�A�V�F�[�F�$zRx��������,���E�H����?B�B�B �E(�A0�A8�G���L�F�B�X��
8A0A(B BBBHv
8D0A(B BBBMw�O�B�E�]���M�H�G�N���L�F�B�X���T�b�A�D
8A0A(B BBBE��H�V���I�H�G�N���I�K�G�N�^�H�T�A�F
�G�Kh
�G�IN
�H�Jt
�G�M\
�G�M\
�G�M`�L�H�G�N�t
�G�LV�L�B�K�S���I�K�G�N��
�G�ES�I�H�G�N�\$�0���B�E�B �B(�D0�D8�G�t
8A0A(B BBBHH�W�F�B�N�T~���"���l��-B�E�E �E(�D0�D8�G���I�X�A�{
8A0A(B BBBHD�L�\�I���L�O�A�L
�K�Y�U,��\8�����B�B�E �B(�D0�D8�G���H�U�A��
8A0A(B BBBHV���	x��h���B�B�B �B(�A0�A8�G��
8A0A(B BBBDE�B�M�A�O�G�\�E��
�G�U�C���<�x��k�B�E�E �E(�A0�A8�G��
8A0A(B BBBAk�D�W�A��B�d�B�[�M�B�D�I�`�M�B�D�I�m�H�B�D�I���D�F�D���M�s�B�u�B�d�A�,�q�L�B�i�G�M�A�Y�G�M�B��G�L�B�Y�G�L�A�Y�G�M�A���J�E�C���K�j�A���Y�i�B�P�]�U�C���B�B�E�g�6�i�Z�E�I�N�K�B�I�M�Q���O�M�B�I�M�Q��B�d�A���J�w�B�]�K�k�A�^�J�j�A�p�K�R�A���K�m�B���a�f�A�Y�G�L�A���I�p�B���J�o�A���D�l�G���O�k�A���O�s�A���Z�s�A�]�K�j�A�r�Z�g�B���Z�f�B���Z�n�A�	�C�e�B���B�_�B�f�G�L�B�Q�V�B�I�I�w�V�B�I�I���H�B�D�M��W�g�B���L�m�B�o�I�U�B�Y�G�M�B���J�v�E�u�B�o�A���W�f�B�q�i�l�C�_�K�j�B�S�f�f�A�v�i�g�A�c�f�o�A�v�i�g�B�c�f�o�B���k�g�B�f�K�k�A���B�d�A���F�K�B�A�P�g�A�Y�B�L�B���E�K�E�R���Z�Y�B���B�j�E���J�n�A�k�d�v�A�B�B�d�B�R�C�d�A���B�B�B�R�c�K�q�B���J�P�B�Q�J�P�B�Q�J�P�B�Q�J�O�A�Q�J�O�B�Q�J�O�A�Q�J�P�B�Q�J�O�A�d�S�R�B���G�f�A�N�O�W�A���f�e�A��J�o�G��n�_�A��[�g�A��D�L�A��B�L�A��
�O�E��J�q�A���N�W�A���b�W�A���^�l�B�Q�Q�Z�B���O�Z�B�/�N�p�A���O��B��
�P�E��D�N�B�0�L�o�A��G�r�D���G�f�A���L�R�B�[�B�A�C�%�B�{�E���L�X�B���J�o�A�J�M�]�B�$zRx��������,����&L�����B�B�E �E(�D0�A8�G�w
8A0A(B BBBE$zRx��������,$��XL� ���B�B�B �B(�A0�A8�D��
8A0A(B BBBA4���'�x�|��]B�E�B �B(�A0�D8�D���D�_�A���M�t�C�~
8A0A(B BBBHr
8A0A(B BBBD`�T���B�E�E �B(�A0�D8�GP�
8A0A(B BBBGY
8H0G(B BBBHTd����R�B�B �D(�E0��8B@V8A0F
(A BBBFk(A BBBX�����NB�E�H �B(�D0�A8�G`ZhWpihC`�
8A0A(B BBBF��|���B�E�H �E(�D0�D8�G��
8A0A(B BBBE��R�T�A��
�K�KQ�J�O�A�L�E�[�B���K�`�E��N�e�B�������
B�E�B �B(�A0�A8�J���H�U�B��
8A0A(B BBBG�N�{�A�x�N�n�B���N�m�A�
�P�pz�H�V�B���N�m�A���B�^�A���N�l�B�t�����>B�B�E �B(�A0�D8�G�<
8A0A(B BBBC}�J�\�A�8
8A0A(B BBBJ`(�����B�B�E �B(�D0�D8�GP�
8A0A(B BBBG�8A0A(B BBB�������2B�B�B �E(�A0�D8�J�w
8A0A(B BBBE��N�U�A�L�U�B�E�D�D�X�I�B�B�G�z�B�W�B�D�G�F�B��B�a�E�`�O�t�B�B�`�]�B�G�G�S���N�V�A�Q�U�B�E�D�B�[�I�B�s�D�w�B�W�B�|�D�G�B���B�h�A�`�B�m�C���B�b�H�o�B�V�B�B�P�u�E�X�n�B�H�H�X�P�\�E�F�_�g�N�Z�B���B�V�A�\�e�F�A���N�q�A�t�N�_�B���K�s�A�N�N�B�H�^���b�B�F�\�W�B�d�C�~�B�H�H�^�q
�B�B�E�[���B�B�E�O��B�V�B���B�W�A�\�e�G�B�~�N�`�B���B�o�F�[���B�j�F�q�B�o�F�[���B�g�C�i�B�j�B��B�a�F��B�g�C�v�B�j�F�q�B�r�F�X��B�d�E�B�H�a�E�`�}�e�F�A���B�k�B���B�k�D�s�B�s�B�T�����B�H�E �E(�A0�A8�D`QhApAxK�\`^8A0A(B BBBT����NB�E�B �B(�D0�D8�GP{XI`UXAPw
8A0A(B BBBKT<���AB�E�B �B(�A0�D8�GP�XK`PXAPx
8A0A(B BBBDd����B�B�B �B(�A0�D8�G`�hJpahJ`�hKpPhA`x
8A0A(B BBBF`�����B�B�B �E(�A0�D8�G`�hMpQhA`BhNpahA`n
8A0A(B BBBAT`����B�E�B �B(�A0�D8�G`�hLpFhA`g
8A0A(B BBBGT��|��B�E�B �B(�A0�D8�G`�
8A0A(B BBBDehIpKhA`d���B�B�B �B(�A0�D8�G`�hJpahJ`�
8A0A(B BBBFehJpNhA`dx�L ��B�B�E �B(�A0�D8�G`<hIpKhA`BhNpohC`Q
8A0A(B BBBK����"��B�E�B �E(�A0�A8�J���[�Q�B� �J�I�A���D�J�A�[
8A0A(B BBBFs?����x�)�L
B�B�B �B(�A0�A8�D�J
8A0A(B BBBFs�J�Z�A���a�n�C���B�F�B�B�B�u�B�t��2�B�E�B �E(�D0�D8�G�]�J�H�B�N�m
8A0A(B BBBE��K�E�B�S����p5�m	B�B�B �B(�D0�D8�G�Q
8A0A(B BBBF}�H�H�B�M���D�K�A�\�M�k�A�$zRx��������,��a�H�>��B�H�E �B(�A0�D8�G���B�K�B���O�W�H�_�K�_�B���N�w�C�p
8A0A(B BBBF�K�M�
�O���DF��	B�B�E �B(�A0�D8�D���D�P�B���O�V�A�S�N�w�C��
8A0A(B BBBH�K�P�)
�O���|O�`
B�E�E �B(�D0�D8�G�|�^�T�B�[
8A0A(B BBBF��B�z�C���O�c�A���B�L�B��G�l�D��
�c�L��_�\�A�T
�B�G�K�Q�A��>���|��X��B�B�E �B(�D0�D8�G���Q�n�A�L�]�Y�A�@�J�U�A�[
8A0A(B BBBD[�Q�h�G�m�]�X�A�V�O�M�B�L,��[��B�B�B �E(�A0�A8�G�@
8A0A(B BBBBP|�(a��B�E�B �E(�D0�D8�G@ZHJPX8A0A(B BBBE@,���a�j/A�C
F���M���
H��*�8$�����A�e
Jw
Ip<�8��(P�D��1E�E�G��
AAG|�X��gE�y
JD�����)F�B�F �D(�D0�G�E
0A(A BBBFH�����BF�B�B �E(�A0�A8�Jp
8A0A(B BBBH4,����:F�F�D �O
ABFJAB@d����^F�B�E �G(�A0�GPb
0A(A BBBJ8������F�B�H �A(�JP�
(A ABBA��0��	��,��	�(�� �$��4� ��]8H�l���B�D�D �U
ABFW
ABF��Й�L��ܙ��B�E�E �D(�A0�\
(C BBBJ]
(F BBBG��\����h���d��($�p��}E�D�J A
DAG$P�Ě�2E�A�G _DAx�ܚ��0��X���A�G \
AKs
ADdA����[4��@���B�D�D �l
ABGqFB(����E�A�G w
DAG8����L����� `����E�|
GQ
GL��p��E�F�G A
DAHT
DDLH
DAKZ
DAI$��@���D h
D`
HZ
F �����#E�A
JY
G$ �ġ��G f
Cc
Ep
HH�����OZ `�4���A�s
DT
A �����EE�G �
JK(�����A�D�G0K
AAG�����ME�G0��Ԧ��A�h
GK
EF
JF
RA($�P��WA�D�G0t
AAFP����Od����&H i
G,��ԫ�CE�{
HK
Ea
Gv �����E�s
HT
L$�����PK 
Fa
G�
A �����E�F w
CK8 ����?F�A�D ��
GBOW
ABF\������W
EI8|�����F�B�A �D(�D@�
(A ABBG������8��x���F�B�A �D(�D@�
(A ABBGL���B�B�B �E(�D0�D8�G��
8A0A(B BBBB(X�����E�D�J@
AAF8�����B�B�D �D(�D@C
(A ABBG@�����NF�A�D �w
FBFy
DENl
DEK8�����F�B�A �D(�G@]
(A ABBI0@�����F�A�D �G@Y
 AABALt�P��WB�B�B �E(�H0�D8�G��
8A0A(B BBBH,��`���B�D�D �}
ABF8�����+F�B�A �A(�F0�
(G ABBH@0�����E�G n
AE�
MJ�
AF�
AIt� ���L�����9
F�E�B �B(�D0�D8�D�e
8A0A(B BBBFK��@��x���E�A�G0e
DDF]
DANo
DDI(0�4��
E�A�G �
DDI8\���4B�E�D �A(�G@�
(D ABBG����)E�\$��0��QE�P�D rDA��h����VD����F�A�A �\
ABIl
ABA{
ABA(<����E�D�G0_
AAG8h�l���F�B�A �A(�G@Z
(A ABBG8���^F�B�A �A(�G@�
(A ABBGH��$��F�B�B �E(�A0�A8�G`�
8A0A(B BBBEH,���~F�B�B �B(�D0�A8�G`�
8A0A(B BBBE@x��#��F�A�D �G0�
 CABB�
 FABF ��8&��E�G0Z
AI���&�GHX
PN8��&��F�D�D �Y
ABFW
ABF@<�8'�KF�B�B �D(�D0�D@E
0A(A BBBEP��D,��E�A�DP�
AAG�
DAI�
AAI�
AAE���/���|/����/�,��/�7A�C
B�G��F��y
D @��3��A�F0W
AA@d�04��B�B�E �D(�D0�G`#
0A(A BBBEL���8�5F�E�A �A(�D0�
(J ABBM�
(D ABBE���:�xHx
H �0;�ZE�G G
AA8�l;�	L�h;�RH0D
A0h��;�E�W g
DIE
GLHG<���<��
F�N�B �A(�A0��
(H BBBO��G�0��$G�6Hm�LG�;E�^
M$$�pG�E�F�G gDAL��G�� `�DH�wE�X
CE
K���H�(���H�zA�N�D S
DAE��������H�\A�Z��0I�.H�LI��B�B�B �B(�A0�A8�Gpv
8A0A(B BBBA(T�K�bF�A�D �w
ABE��DK�	��@K���<K�	$��8K�IA�K�I qAA��`K�AAM�dK�yJPG8��K�RB�B�D �E(�G0e
(A ABBAX��K�AAMt��K�5H\
L��L�GH y
A��HL�=Ho
A ��lL�NE�N p
AE0���L��F�K�A �DP�
 AABD( �$N�<E�K�I N
JAE(L�8N�<E�K�I N
JAEHx�LN�[B�F�B �E(�D0�C8�D@�
8A0A(B BBBD8��`O�2F�B�D �D(�FP�
(A ABBH�dP�/VJ(�|P�E�A�G �
DAID�`Q�"E�XL`�tQ�2B�B�A �A(�D`H
(A ABBH\
(A ABBF��dT�aH0@
H8���T�B�B�D �A(�G0�
(A ABBH0��U��E�D�D w
DAGiFA(<��U�A�H�D t
AAE(h�LV�gE�I�G G
DAA����� ��|V�DE�j
IF
A\���V��F�E�B �A(�D0�N
(D BBBFV
(G BBBMa(F BBBL,�W�B�B�E �E(�D0�D8�J�
8A0A(B BBBA4���L���\��B�B�B �B(�A0�A8�D��
8A0A(B BBBD�W���L��Pb�B�B�E �E(�D0�A8�G�O
8A0A(B BBBE�~��@X��h��A�A�G0^
AAGI
AAEN
AAH@��xi�$F�H�A �|
ABBI
ABDA
CBJ��dj��A�A�G ��k��A�C
�hl��F�K�F �<��l�1Q�YF�X�m�l�m�)N�PB���,m�5E�k��Pm�!��lm�.E�d���m�%HV4���m��F�B�A �A(�D0�(A ABB$�n�LQ�`�@�4n�	T�0n�	h�,n�|�8n���4n�E�T$��8n�@E�D�D aID��Pn�(��Ln�F�B�A �A(�G� zRx������(���L�r� E�(d�r��E�N�D I
AAA(��dr�tQ�A�G v
AAG���r����r�NE�a
JY ���r�WE�i
JG
S�0s�	D(�,s��F�B�E �K(�A0�D��
0A(A BBBB zRx�������(K����lx�(��hx�:F�D�D �_
ABE(��|x�(F�D�C �SAB(��x�:E�D�M N
HDEL@��x��F�B�E �E(�D0�A8�D��
8A0A(B BBBH4]g��$�� ~�&E�D�F IHAD��(~��F�B�E �D(�A0�D��
0A(A BBBD����(����&(<�؃�:F�D�D �_
ABE(h���(F�D�C �SAB(����DE�A�L `
GAE������ ��4(��L��FF�A�A �/HBzRx� ���$���0H�<��/H�
Od�P��DQ�r������K��
A8��8���F�B�A �A(�J�t
(A ABBB�����4�����`F�A�A �K
ABJ|AB\$�Њ��F�B�B �B(�A0�A8�GPH
8D0A(B BBBFyX[`JhBpBxA�NP�� ����,��(��(��%E�F�D@k
AAD0��,��HE�D�F M
AAB_CA�H��$�P��8�L��L�H��`�D��t�@��#HZ(��X��AF�A�G gAAI��L��|���E�E�E �D(�C0�k
(A BBBHI
(A BBBHx�܍�N�B�F �E(�A0�A8�D@s
8A0A(B BBBB[
8A0A(B BBBKp������H@��������p��'H\�����	�����HD f
FW����� HQ4������F�H�A �a
ABE]
CBF �D��4�P��E�L�X��`�d��kH@]
A|����KH }
A����.Kbd�����B�G�H �E(�H0�A8�D�r
8A0A(B BBBA�
8F0A(B BBBEL�,��2B�B�B �E(�D0�D8�G�w
8A0A(B BBBEh���&HZ��4��-Ka��L��E� ��T���E�D0�
AA����	 �����E�D n
AH����HI@$�����B�B�B �A(�A0�DP�
0A(A BBBDh�,��]E�A
A��l��^E�B
A�����HO ������E�D0
AG�p��HI��x��HI����(�|��HK(@����3F�D�D �WDEl����:HZ
NI�����COs����|D0K
A��T��FE�^
E����DD l
A�����AAD8�����F�A�D �F
ABDk
ABJ,P�D��qE�A�D �J
ABI�����<I�WH�A�8������B�K�F �D(�DpX
(A ABBG�H��LA�t
A��|��5H����rF�B�B �B(�D0�A8�D`�
8A0A(B BBBG4X�ܠ�MF�E�K �L(�D0](D ABB����aDa
Kp��D��&E�\�X��:E�c
HE �x��RA�T
KY
Al�G��9$����$A�^4@�����B�B�D �D(�F0g(D ABBx���*HW��$��*HW4��<��tF�D�D �o
FBKVDE����oE�V
E�Ԣ�	H�Т�F�E�E �B(�A0�A8�GPH
8A0A(B BBBC8`����/F�H�A ��
ABDn
CGH�����VOz4����tF�D�D �o
FBKVDEH�(���B�D�B �J(�A0�A8�D@J
8D0A(B BBBA zRx�@������(4��Lp�T��?B�B�B �B(�A0�A8�F��
8A0A(B BBBD�k���,�0���F�H�I �W
ABG8�����B�B�A �A(�D0q
(D ABBD @���E�J@l
ADLd���B�E�E �E(�A0�A8�D�
8A0A(B BBBG�������B�B�B �B(�A0�A8�G��J�P�K�B�G�R�N
8A0A(B BBBDL	�M�D�E�D�J�]�$zRx��������,2��D|�����F�D�D �G0J8C@CHAPKXC`I0a
 AABAd���2B�E�B �B(�A0�C8�G���N�G�A�K�D�R�n
8A0A(B BBBD,���'HP NH���$HK PXd���B�H�E �B(�D0�A8�G���K�F�A�X
8A0A(B BBBF@������B�E�E �D(�A0�D`�
0A(A BBBB zRx�`�����(���0<�(���B�D�D �D@�
 AABAzRx�@���$"��H������F�H�E �E(�A0�A8�G@d
8D0A(B BBBF4�4���F�N�C �|
ABJQ
DBI8(����F�B�A �A(�Dp�
(A ABBDd���wA�M
B(�P��ME�D�D c
DAK�t��E�L�x��9HY
E����E�TD����B�B�E �B(�D0�H8�DP�8A0A(B BBB$L(��6E�D�D cDAt@��$�L��3E�D�D `DA�d��9E�Z
QD����9E�W
TD4����~E�A�D G
GAGO
FAA(���9HX
FD��~E�|
G`t��#HV x���gE�K M
DA����/E�e����	 ����dE�D0�
AA<�4��zF�D�D �L@fHEPVHA@T
 AABA,0t���E�GPbX\`KXAPn
AAzRx�P� ;�������`H@R
A8�����F�E�D �D(�L`Y
(A ABBA�<��FE�<p��\x���B�B�B �B(�A0�A8�G���G�O�A�m
8A0A(B BBBH(|���E�D�F@b
DAJ������������HN����*A�h`��������	,���1H�hH���3L�fd���_H0Q
A�4���@��E�V�D��)Q�W�X��#E�]�l��&AAD���EAD t��\D H
D<���#WP���bA�j
AHl(���B�B�B �B(�A0�A8�D@	
8D0A(B BBBD����Be8�����B�E�A �A(�NP#
(A ABBH<L���A�A�G J
AAKO
AAGIAA4H���B�A�A �O
ABJ�AB$�t��XE�A�R yAA����&����&,�����A�C
F���M���
G(d��A�A�D c
CAC,���@���T���3dh���B�G�I �B(�A0�A8�GP\
8D0A(B BBBJ
8C0A(B BBBHH�����F�E�B �E(�A0�G8�D@r
8C0A(B BBBD,	����B�D�D �Y
ABJ@L	h��GF�B�E �A(�D0�D@�
0A(A BBBD<���
(�	`���E�A�G0^
AAC0�	����F�D�A �G0�
 AABE
���%@
����F�B�E �D(�A0�DPu
0A(A BBBE\
H��0p
D���F�D�D �D@T
 AABF@�
����F�B�B �A(�D0�D@�
0A(A BBBA0�
L��vA�A�D T
CABLDA ���8E�Y
BF
J@���0E�Q
R(\����A�C�D k
DAH�<��	<�8���E�N�D b
CACD
DAG|CA�����0�����F�D�D �D@U
 AABE $��|E�D`A
AEH\�� HS`d��ht���AQ�iF�T�����N�A�G �
AAEw
D�A�LSD�A�X ��D�A�,�\���@�F�A �|�A�B�(
���oE�A�G @
FAL<D
���F�B�B �A(�A0��
(A BBBD�
���E�O�
���HI$�
���gE�M
F|
LF�
$��dH0V
A(�
x���A�A�D@r
AAF (��OE�Q
JO
E8L8��~B�E�D �A(�G`�
(A ABBG$�|���Q�Y�v�F
A����	$����<E�Q
JO
IC����\A�G�K 8��( D��E�D�G0y
AAE(L���2F�A�D �_AB(x���,E�D�G N
AAA����tT`I����E�O����9HR
G����	4���BF�D�D �U
ABJNAB(H���>J�D�J XAAF��Tt����S�B�E �D(�D0�u
(A BBBBb
(A BBBGG�����8�8���F�B�A �A(�D0o
(J ABBB(���;E�C�G K
AAA4���H���\���Hp���F�B�B �E(�A0�A8�DP�
8A0A(B BBBC0�����F�A�D �D@y
 AABD�������
,��<@���F�B�B �A(�D0��
(C IBBE����
(�����E�A�D0N
AAF�D��HI�L��*Ha�d��HIl��EfP ���HI8���	L���9a`���#E�]|���7fP���HI���	���� ��#E�]8�4��-F�I�A �A(�D0�
(H HBBI,(��VH-
KHl��\x��p���!E�[����$E�^����:E�[
HQ���$���:E�D�D gDA8��[F�E�E �D(�A0�{(D BBB(@��fF�D�H �PAB(lX���F�D�A �qAB(����}F�D�A �nAB8����F�E�A �D(�F0�
(D ABBA,���F�D�D ��
ABA80d��.F�J�A �D(�D@�
(A ABBI<lX��F�J�B �D(�A0��
(F BBBI<�(���F�J�B �D(�A0��
(F BBBI<����F�J�B �D(�A0��
(F BBBE$,���wE�G t
AGmAT��(h���5E�D�D0�
AAK(��UF�F�I �|AB�D�.E�[
A�X�.E�[
A�l�.E�[
AL��(F�B�A �D(�G@�
(A ABBFm
(A ABBETd`�`F�B�B �A(�D0�G@�
0D(A BBBF}
0D(D BBBEL�h��F�B�A �D(�D0f
(A ABBCg
(G CDEE���@ ��8F�B�A �C(�D0^8J@T(A ABBF0����@x��HF�B�A �C(�D0b8I@b(A ABBE0`_���@���8F�B�A �C(�D0^8J@T(A ABBF0����@(��8F�B�A �C(�D0^8J@T(A ABBF0է��p���6F�B�A �A(�F0a8L@W8A0P
(H FBBIa
(I DEBKD
8L@HH
(D ABBA0�P�WE�I�D e
FABOFA(|�E�Q<D��\F�E�D �D(�D0Q8a@I(D ABB��� HPH���F�E�B �B(�A0�D8�DP'
8D0A(B BBBD�|	�JAAY0�	�{F�D�A �D@Z
 AABAH8�	��B�B�E �E(�D0�D8�D`t
8A0A(B BBBH��
�lL��
�gF�B�B �A(�A0��
(F BBBA_
(H EBBE���(A�[0��E�D�D c
DAKDDA8l�$A�^0T��VE�A�G p
DAFDDA4���hF�D�C �l
ABD]DB0���VE�A�G p
DAFDDA0�
�VE�A�G p
DAFDDA0(<
�VE�A�G p
DAFDDA0\h
�VE�A�G p
DAFDDA0��
�VE�A�G p
DAFDDA0��
�vE�A�G P
DAFDDA,���F�D�A �T
ABF8(l��F�D�A �Y
ABIA
CBJ4d���E�A�D Q
DAHJ
AAAH�8��F�B�A �D(�D0_
(A ABBJD(D ABB���/b���)E�c4 ���E�D�D0l8[@F8A0W
AADP 4�Ld @��F�B�D �A(�D0u
(A ABBDD
(D ABBKX���� � ���A�G0{
AD� X�NE�c
A!��HQ !��7E�[
HNH@!���F�B�D �D(�F0�
(D ABBGa(I HEB@�!X��F�D�D �D0�
 CABDR
 CABH�!�(4�! �hF�D�C �o
ABA]DBd"X�VB�B�B �B(�A0�A8�G�
8A0A(B BBBA
8A0A(B BBBO �"P��A�G }
AJ8�"���F�B�A �D(�D@2
(A ABBG(�"���E�A�D M
DAD#��JA�H(,#(�rA�D�G@�
AAF0X#|�.B�A�D �G0b
 AABD�#x!�E�VL�#|!�B�E�H �B(�A0�A8�D�N
8A0A(B BBBAP�#<)�JF�B�B �A(�A0�
(A BBBBH
(C DEBJ<L$8-��B�E�E �A(�D0�T
(D BBBA�$�-��$�-�<�$�-��F�B�A �A(�D�a
(A ABBKH�$01��F�B�B �B(�D0�D8�F`�
8A0A(B BBBF0@%�5��F�D�A �D0_
 AABF(t%p7�E�A�D0j
AAJ(�%d9��E�A�G0�
AACL�%�;��B�B�A �A(�D0�
(A ABBHC
(A ABBG8&H?��F�I�A �m
ABHY
FGJdX&�?��B�B�B �B(�A0�A8�D@�
8A0A(B BBBKE
8A0A(B BBBA4�&tC�F�I�A ��
ABLvDP�&LD�&0'hD��F�F�A �J0�
 AABD@'E�*E�d\'(E�'E�a4x'<E�KF�D�G �D(�F0d(F ABB�'TE�$E�^8�'hE�nF�H�A �C(�K`�
(A ABBA8(�F�KF�E�D �A(�KP�
(A ABBJ0D(�G�JF�D�C �G@�
 AABE@x(�H��F�E�E �A(�A0�G`�
0A(A BBBK8�(XK�`F�J�D �A(�F0f
(F ABBD4�(|K�qF�C�C �b
FBJhFB0)�K�Aa�_(L)�K�FF�I�D �e
FBAx)L�1E�f
AH�)@L��F�B�B �B(�A0�D8�Fp_
8A0A(B BBBH@�)�M�wF�E�B �D(�A0�DP3
0A(A BBBG $*�N�WE�L0
AALH*O��F�C�D �D0G
 FABGT
 DABMl GABH�*�O��F�D�A �D(�D0y
(D ABBKT(D ABB�*P�"E�\8+$P�zF�B�D �C(�GPX
(A ABBA(<+hP�DE�C�G `
FAA@h+�P�~F�E�B �D(�C0�G@�
0A(A BBBFL�+�R�[F�D�G �A(�F0g
(F ABBF
(F ABBHL�+�T�KF�D�G �A(�F0a
(F ABBD

(F ABBHLL,�V�8F�E�D �C(�D@�
(F ABBB�
(F ABBD0�,�X��F�G�C �G@�
 AABF8�,�Y�F�H�D �D(�D0l
(F ABBG0-h[��F�G�C �G@Q
 AABD8@-�[�F�H�D �D(�D0j
(F ABBA0|-�]��F�G�C �G@Q
 AABD �-d^�XE�J u
FA�-�^�.E�[
A�-�^�SE�J }F.�^�)E�c ,._�XE�J u
FAP.D_�.E�[
A l.X_�XE�J u
FA�.�_�.E�[
A�.�_�"E��.�_�.E�h0�.�_��F�I�A �F0q
 AABE(/P`�GF�F�G �kFB @/t`��E�J@y
AG d/0a��E�L0W
AG4�/�a�UF�I�A �]
FBKLFB4�/�a�UF�I�A �]
FBKLFB�/�a�WE�l
A(00b�OF�I�A �]
FBA(@0Tb�OF�I�D �P
FBAl0xb�?E�d
GN(�0�b�yE�J E
FFRF0�0�b��E�I�D k
FADFA0�0Hc��E�C�J0E
FAB\FAH 1�c��F�D�B �B(�A0�C8�G@"
8F0A(B BBBFl1(e�E�Q�1,e�$E�^L�1@e��F�B�E �E(�D0�A8�G�	
8A0A(B BBBGD�1�h��F�A�A �s
ABBV
HEMA
GLED<2(i��F�A�A �s
ABBV
HEMA
GIEL�2�i��F�E�E �A(�H0�p
(A BFBLA
(D EGDEL�2@j��F�E�E �A(�H0�p
(A BFBLA
(D EDDE$3�j�IE�<D3�q�3X3r�l3r�
�3r��3 r��3r�
�3r�
�3r�
�3r�3Oc�38r�3Oc4`r�;Ok,4�r�;OkD4�r�3Oc\4�r�3Oct4s�$HX�4s��4s��4s��4s�(�4s��E�S
Ha
GA
GD 5|s��E�G �
AB,58t� @5Dt�sE�N V
DA d5�t�sE�N V
DA�5�t��5u�(H_�5 u� �5u��F�H�A �D04�5�u�0E�A�G �
DAJN
DAM$6�v�86�v�L6�v�E�Oh6�v�E�O�6�v�"E�\�6�v�E�O�6�v�"E�\�6�v�"E�\�6�v�7�v�7�v�E�P87�v�L7�v�E�Ph7�v�E�P0�7�v��F�D�A �G@�
 AABH�7�w�0Hg�7�w��7�w��7�w�@8�w��F�D�A �@
DDMF
HEMFHE@P8$x��F�D�A �@
DDMF
HEMFHE�8�x�5E�S�8�x�)H\�8�x�'A�Y�8�x�!E�[9�x�!E�[$9�x�+E�D�F UAA@D9y�/F�B�E �D(�K0�DP�
0A(A BBBJH�9�y��F�B�D �D(�N0m
(D ABBDv
(D ABBI8�9Pz��F�B�D �D(�N0F
(D ABBCH:�z��B�E�B �F(�D0�D8�GP�
8A0A(B BBBAD\:({��F�F�B �E(�A0�D8�DPu8A0A(B BBB0�:�{�gB�D�D �M0O
 IABN�:�{�'E�a(�:�{�7F�D�D �eAB0 ;�{��B�A�A �D0�
 AABI@T;@}��F�E�E �A(�D0�FPc
0A(A BBBJ�;�}�8D[
A4�;�}�~F�B�D �A(�F0a(D ABB(�;(~��A�D�G0f
AAD<�~�(E�b4<�~�8D[
A8P<�~��F�B�E �A(�A0�r(D BBB�<8�8D[
A�<\�6E�G eD$�<|�2E�D�D ^AA�<��8D[
A=��8D[
A`(=��TF�B�B �A(�A0�g
(A BBBFm
(D BBBI�
(A EBBG�=؀�	0�=Ԁ��F�G�A �F0Z
 AABF0�=0���F�D�A �G0�
 AABA4>́��A�D�G@rHGPXHA@T
AADzRx�@�� ���Lp>$���F�B�E �G(�A0��
(A BBBD
(A BBBJ�6����(�>`��WA�D�N f
DAA?���E�Q8?����F�B�B �D(�A0�l(C EEB4X?���E�A�G |
DABR
DAA(�?4��
F�A�D �]
ABE�?��`HW(�?`��bE�A�G w
DAA(@���jE�A�G 
DAA,,@���B�D�A ��
ABA\@���E�QLx@����B�B�E �E(�D0�D8�D�
8A0A(B BBBG �@\���E�D \
AJ�@؉�A��9E�S0A��F�D�D �K0\
 AABA0PAT��F�D�D �K0\
 AABA�A���EE�c
E(�AԊ��E�D�GPx
AAF�Ah��HE�\
O(�A����E�D�D0^
AACB0��HE�\
O0Bd��HE�\
OLB���HE�\
OhB̌�HE�\
O�B��HE�\
O�B4��oL�B���F�E�E �D(�A0��
(J DDBOA
(D EBBJ C`��}E�G0J
AI,(C���E�F
M�����-
K�#��lC����C��
H�C���F�B�B �B(�A0�C8�G@�
8D0A(B BBBF$�C4��#A�C
B�D��
Gx�x~��`D(���F�B�B �D(�A0�t
(A BBBF�
(F BBBHr
(D BBBE$�Dt���A�b
Mn
JT��}���Dȓ�,E�T
GKL�Dؓ��F�B�E �D(�D0�s
(A BBBAg
(A BBBBH,E��B�B�B �B(�A0�D8�DP
8A0A(B BBBExE��HL�E��HLH�E���qB�F�B �E(�G0�C8�DP
8A0A(B BBBI�E0��HLF8��HL$F@��=E�^
ETDF`��BE�i
BH`F����B�B�E �E(�D0�A8�DP~
8A0A(B BBBI�F��(�F$���E�A�N0
AAK(�F����E�A�N0
AAKHGL���F�E�B �L(�A0�A8�G`
8D0A(B BBBEHdG����F�B�B �L(�D0�D8�DP�
8D0A(B BBBHH�G$���F�B�B �B(�A0�D8�K`
8A0A(B BBBD@�G���[B�B�E �D(�D0�G@�
0A(A BBBE`@Hğ��F�I�B �D(�C0��
(D BBBHI
(H EDBL�
(H EDBL@�H`��EF�I�B �A(�A0�G@�
0A(A BBBK(�Hl���E�G I
DGD
GEIУ�HK,,Iأ��F�A�A �j
ABK(\IX���E�D�D y
AAH(�I̤��A�A�G k
DAG(�IP���E�D�D j
GAI6�x��(�I����E�D�G0\
FAE( J$���A�A�G G
AAFLJ���HNdJ���HIH|J����F�B�B �B(�A0�C8�Dp'
8A0A(B BBBKH�J,��xB�B�B �B(�A0�D8�DP�
8D0A(B BBBF,K`��HE�A�G X(H0XAAHDK����F�B�E �D(�C0�D8H@T8A0M
(A BBBGH�K���I�B�B �A(�C0�[8K@Y8D0L
(A BBBAH�Kx��"F�B�E �D(�C0�D@rHNPQ0A(A BBBG@4(L\��bF�A�A �`(H0_(A NAB`L���HIHxL����B�E�A �A(�K0p
(D ABBCD(D ABB�L��PH0B
A,�L4��GF�D�A �K0l AAB@MT���F�B�B �A(�A0�GPU
0A(A BBBH zRx�P�����((u��H�Mȶ��F�B�E �B(�A0�A8�D`t
8A0A(B BBBA\�t��
H�M8���F�H�B �E(�A0�A8�D`t
8A0A(B BBBG��t��
XLN����F�E�E �E(�D0�A8�GPsXH`W8A0A(B BBBCPtXH`VXAP8�N��@F�B�A �D(�F0�
(F DDIE8�N ��?F�E�E �D(�D0�[(A BBB O$��4O ��LE�U
NX\TOP���F�E�B �B(�A0�D8�FPs
8L0D(B BBBKy8A0A(B BBBL�O����F�B�A �A(�F0]
(A ABBMQ
(I HEBGPp��$Pl��oE�G k
AHmA(@P���|E�G�D r
DAIPlP���F�E�E �E(�D0�D8�DPYXH`^XAPT8D0A(B BBB<�P����E�D�G l
AABL
FAEZFAhQ���F�E�E �E(�D0�D8�G�j�K�F�A�v
8A0A(B BBBHY�K�F�A�8lQx��TF�N�A �A(�D@�
(A ABBJ�Q����H��Q@���Q<���Q8��RD�� KTRL��,RH��@RD��TR@��hR<��|RH���RD��%D`�R\��(�Rh��~A�C�G0k
AAA�R����R���1E�]
FDS���/E�i8S���#E�YLTS���B�E�L �I(�A0�G
(A BBBEO
(A BBBJ�Sp���S|��A�(�S���=F�A�D �nAB(�S���
E�C
K�����
A8(T|���F�D�D �S
CBJA
FBG0dT��*F�A�A �G`v
 AABG�T��dH m
K0�T`��*F�A�A �G`v
 AABGH�T\���F�B�B �E(�D0�C8�D@�
8D0A(B BBBI04U���XF�A�A �D0�
 AABH0hU����F�A�D �F0d
 DABD�U8��4HY
GG�UX��HO�U`��	(�U\���A�A�G W
DAK(V����A�G�F0G
AAI@V��TV��� hV���A�f
IO
A@�Vh���F�B�B �D(�D0�FP|
0A(A BBBD�V��v0�Vp���B�D�A �GP�
 AABFW��a(,Wx��PE�A�D t
DAA4XW����E�D�D Y
DAEs
DAH �W��pA�O
HC
A<�W@���E�A�J G
DADS
DAHVDA(�W���A�D�G@~
AAD X��H4X���B�E�D �A(�D0Y
(A ABBAD(H ABB8�X$���B�M�I �K(�G�~
(A ABBA8�X����B�I�A �D(�D0z
(D ABBIH�XL��9B�B�B �B(�A0�E8�H��
8A0A(B BBBFLDY@���B�B�B �B(�D0�D8�G�!
8A0A(B BBBF0�Y���B�D�D �D0�
 AABAH�Yl��B�E�D �A(�G0h
(D ABBD_(D ABB(Z��PI�D�D �wAB@@Z�F�B�B �D(�D0�FP|
0A(A BBBD(�Z��~q�H�G mH�D��Z4�YHq
GX(�Zt��A�I�D0j
AAF�Z��IE�w
A[�=E�_
DT(8[<��B�D�D �zAE<d[���B�B�E �D(�D0�N
(A BBBJ8�[��ZB�E�E �I(�F0�g(A GIB0�[�^B�D�D �G0C
 AABA8\@�tF�A�A ��
ABHv
DBL$P\���E�W
LO
Ik
Ex\��\�0�\$��F�D�C �J��
 AABA8�\��F�E�D �D(�J��
(A ABBA0]��F�D�C �J��
 AABC8D]�	�F�E�D �D(�J�}
(A ABBH �]Te���E�J��A(�]`
��E�D�J��
AAA �]4��E�J��
AD�]��K��
A(^���E�D�J��
AAA0<^h
��F�D�D �J��
 AABA(p^�E�D�J��
AAA�^��9�^$��^ ��K��
A�^�d���EAG�,�^��#F�E�E �D(�D0�G� zRx�������(e��
d_p�[F�D�A �tp�d���_���E�O�L 0�_|��F�K�D �D0o
 AABA(�_�d��hF�E�D �D(�G�`�e��EAD4`��3H`��|\`8�+p`T�PzR�`��< �`��VE�M }
AA$�`��,E�G�G IGD$�`��6E�D�D0fAAa�d���C�(ace��FE@@a�e��)EAA\a��5A�D�D |a��JHr
FI8�a�F�B�A �C(�G0|
(F ABBF �a���H A
GT
DX�aX��E�M�b��E�M�(4b��5M�D�D �XABD`b���F�E�E �E(�D0�D8�D@T8D0A(B BBB4�b,�}F�E�D �D(�D0\(D ABB�bt�0Hc8�b���F�I�I �A(�A0�R(M BBB4c�!��E�M�Pct"�&E�hc�"��E�M�T�c0#�|F�B�E �E(�D0�D8�G`�
8A0A(B BBBI�
hSpX�cX%��H0�
A8�c�%�F�B�A �C(�D@�
(A ABBA4d�&�<E�vPd'�-Ha hd'�uA�I J
AA8�dx'��F�E�D �D(�I��
(A ABBA(�d2b���E�D�I��AA(�d(��E�D�I��
AAE( e�(��E�D�G t
AAALLeH)�
F�I�B �B(�A0�A8�G��
8A0A(B BBBA�e-�	4�e-��N�G�G U
CAK]FAD��8�e|-��F�A�A �`
ABER
ABK $f.�#A�G {
AD8Hf/��F�B�A �A(�G��
(A ABBD zRx������(@a��4�f81�kF�G�A �Y
DJKgAB�fp1�gl1�+E�H g�1�F�B�B �E(�D0�F8�D`
8A0A(B BBBElgH4�<H[
A�gl4�<H[
A �g�4�xE�[
Hs
ET�g�4��F�B�B �B(�A0�D8�FPxXH`RXAP[
8A0A(B BBBAH hd6��F�E�E �E(�D0�A8�DP�
8A0A(B BBBG ��_���h9�<H[
A�h(9�<H[
A�hL9��E�J��h�9��E�D�J��h�:�2EADi�:��E�J�zRx��� �^��-\i8;�)H `tiP;�$E�Z$�id;�3A�D�D ^FA�Ut^��(�ih;�FA�A�G h
FAE,VS^��5jx;�EAD(j|;�EADDj�;�EAD`j�;�EAD |j�;�~E�F0[
AIzRx�0� �]��I�j�;�EAD�j�;�-F�D�A �k�;�E�$k�;�E�<k�;�E�Tk�;�E�(lk�;��E�A�J��
AAE0�k�<��F�A�D �J��
 AABC0�k�=��F�D�D �I�
 AABFlD>�BE�G�D  lt>�%EAK<l�>��E�G�G� \l8?�F�A�A �G00�l$@�xF�A�A �G0|
 AABA�l\��%�l\A�JMK�l�A�!�l�A�E��
m�L�($m�L�YB�A�D �p
CBDPm�L�ZI�w
Hlm(M�E�L,�m,M�]B�A�A �G@M AAB�m\M�WDF
FF�m�M�,HS
EG�m�M�bHG
IIn�M�	,n�M�	(@n�M�NF�A�A �BABlnN�/�n4N�*HR
FI�nDN�	H�n@N��B�E�B �E(�A0�C8�Gp�
8A0A(B BBBDo�P�AOao,Q�AAD4o0Q�xHo�Q�9Hg
AHho�Q�VHm
KI
G\�o�Q�xN�B�B �D(�D0�s
(A BBBDb(A BBBG�����H0�����8�oS��F�E�D �A(�D0^
(C ABBA@$p�S��F�B�B �A(�A0�DP�
0A(A BBBA8hpLT��F�B�D �D(�G0�
(C ABBH�p�U�TA�t$�pV�JE�A�G pGA�p,V�HE�x
Cq`V�HE�x
C0 q�V�kE�A�G A
DAMDAA(Tq�V��F�A�A �rFG(�q4W��E�D�G m
CAG8�q�W��B�A�D �d
KEEA
ABD8�qlX�/F�B�D �A(�G0i
(C ABBKH$r`Y��F�E�B �E(�D0�A8�DPD
8A0A(B BBBAHpr�Z��F�E�B �E(�D0�A8�DPT
8A0A(B BBBA(�rH\�gF�D�C �t
CBJ(�r�\��E�A�D �
DAGHs`]��F�B�E �E(�D0�A8�DPd
8A0A(B BBBGL`s_�F�E�D �C(�D0�
(I ABBN�
(D ABBKH�s�`�VF�B�E �B(�A0�A8�GP
8D0A(B BBBD@�s�d�?B�A�D �D0�
 AABGQ
 AABK4@t�e��B�I�K �x
ABGP
ABA4xt<f��B�A�A �G��
 AABAzRx�����$T��0�t�k��B�B�B �E(�D0�C8�DPu<m�LA�D�F08ulm�^E�p
K Tu�m�bA�J��
AHHxu�n�@F�B�B �B(�D0�A8�N`
8A0A(B BBBD(�u�t��E�A�G0a
AAA,�uTu�pF�I�D �F
ABD v�u�TE�N<v�u� Pv�u��E�G�~
AEtv`w�jS Ti Y�v�w�$E�W�v�w��E�J
A�v�x�~Hd
Ld
D�v�x�EANw�x��F�D�D �,w�y�dE�D�G Lwz��F�D�D �lw�z�EAN�w�z�%EAH0�w�z��E�F O
FHI
CLo
AE�wL{�1H�L
Q��x`{�2Hfx�{�BE�d
A,8x�{��F�D�A ��
ABI8hx�|�F�E�A �A(�G0�
(D ABBK�xp}�(H[0�x�}��F�B�B �B(�D0�C8�G� �P��	y��EAD y��)HM
A$<y���E�G�"
AAdy����K��
A�y��$�y ���E�G�!
AB,�y����E�A�G�C
AAF�y���;Hrz���7Hn(z؆��A�D�D0u
AAHPHz����B�B�E �D(�D0�
(A BBBK�
(M BBBLp�z���B�E�I �B(�D0�A8�G�6
8A0A(B BBBBi�P�a�A�|8G0D(E BBBl{����F�B�B �B(�A0�A8�D���U�S�A�J
8A0A(B BBBIh�X�F�A�L�{ԍ�ZB�E�A �A(�J�v
(A ABBAI�L�Z�A��{��QHM
A�{(��"0|D���B�D�D �G0d
 AABGzRx�0���$�L��(h||���F�A�G��
ABG �|��:A�G��
AB,�|���B�A�G��
ABF �|̕�ZA�J��
AB}��3E�i,(},���A�A�J��
AABX}��"E�Ut}��EAD(�}���E�D�D0a
AAH$�}x��`E�A�D SAA8�}���eF�E�E �D(�D0�A(A BBB ~��4~��E�LP~��E�R0l~��cE�D�D q
DAEUDA�~$���~0��$H[�~H��\E�a
J(�~����F�O�H ��AI0��HK,8��E�JH,��	$\(��ZA�D�D KDA�`���l��HT�t�� HU�|��'KY����'KY �����E�G�b
AA ����E�G�b
AA @�����E�G�b
AA(d����E�D�D@w
AAJ�����,�����zB�D�D �X
ABKԀ�� HU���HO(���wA�D�J C
DAI0�d��HNH�l��HO8`�t���F�E�D �F(�DP�
(A ABBA����HQ(�� ���E�A�J0c
AAA����HN�����HO����HP(����HP@����	8T����hF�B�D �D(�D`�
(A ABBC����������ܥ�̂إ�HO���VR�@A�4�$��ZB�D�D �Y
ABJN
CBM8�L��6DY
AT�p�� HLl�x�� HL����� HL�����-Hd�����-Hd̃���-Hd�Ц�-Hd����-Hd���HQ,���-HdD� �� A�Z`�$��*Hax�<��*Ha��T��-Hd��l��HQ��t��HQ؄|��HQ����&HM����3HM �ħ�HL8�̧�HLP�ԧ�HLh�ܧ�%HL����2HL����$E�Z ��0��IHf
BI
GD؅\��9Ha
GD��|��9Ha
GD����9Ha
GD8����9Ha
GDX�ܨ�9Ha
GDx����9Ha
GD����9H`
HD��<��w̆���HL4����uF�A�D �^
DBAb
AEP$�����E�D�D �DA D����SE�`
KV
Ah����4U(|����E�A�G��
AAA,��|��]B�D�A �B
ABD$؇���fA�C
E����
F���&HW4���zE�A�G [
FAAY
AAE4P�T��jE�A�G h
FADY
AAE4�����jE�A�G h
FADY
AAE4��ĭ�zE�A�G [
FAAY
AAE4����rE�A�G h
FAD`
AAF40�T��rE�A�G h
FAD`
AAF8h����/F�B�A �G(�D@�
(A ABBEL������F�I�E �A(�A0�f
(D BBBJi(H EDB(� ���B�B�B �D(�A0�( �����E�A�G0�
AAG(L�8���F�A�A �z
ABKx�ܲ�HI����	H�����B�B�B �B(�D0�A8�D`�
8A0A(B BBBA����.V����0�����B�G�A �D0m
 AABAL���`���0t���B�P�F �DP
 AABA����iK�X
Aċ@��UK�D
A �����E�G�Z
AA ����E�G�W
AA (�|���E�G�T
AA L�����E�M�z
AAp�t��aK�P
A��ȹ�aK�P
A����aK�P
AČp��iK�X
A�ĺ�iK�X
A����iK�X
A�l��iK�X
A4����lK�K
J P���eE�J�O
AA t�`���E�G�^
AE�����K�_
F��`��^K�M
AЍ���iK�X
A����|K�J
K�\��|K�J
K($����)E�D�G��
AAA P�Ŀ��E�D@�
AI t�����E�DP�
AD��L���HP�
A,�� ���A�C
B�G��I�H�$
F����(������A�A�Dp�
AAA$�P��8�L��0L�H���F�A�A �D0u
 AABA0������F�A�A �D0u
 AABA(�� ��pE�A�F0O
AAA(�d���E�A�D@�
AAA(����E�A�D@�
AAA 8�����E�G��
AA \�X���E�G��
AA(������A�C�DP{
AAA��X��&HQĐp��&HQܐ���&HQ(�����A�C�DP{
AAA ���&HQ8���&HQP�4��&HQ<h�L��tF�B�A �A(�G��
(A ABBJ0������F�P�A �G��
 AABBܑ���L��(������E�A�G��
AAK($�@���E�A�G�^
AAA P�����E�G��
AA t�P���E�G��
AA(������E�A�J�P
AAF���<H]
KG@����FF�B�B �A(�A0�G`
0A(A BBBA(����E�L(D����EF�A�A �yABp���8�����F�B�A �A(�D0d
(D ABBE\��t��	B�E�B �B(�A0�D8�G��
8A0A(B BBBC��Q�Z�A�| �$��"B�B�E �B(�A0�A8�D�R�K�W�B�V�M�T�A�Q�K�Q�A��
8A0A(B BBBID������B�B�E �D(�A0�J�G
0A(A BBBI(�<���E�A�D@t
AAA(�����E�A�D@t
AAA,@�$���A�C
F���J���
B p����`H�V
JU
K��0��(��<��YE�D�G h
DAA4ԕp���E�A�N N
GAF~
DAE(����4F�G�D �UDE8����HL����xF�B�E �B(�D0�D8�D`f
8D0A(B BBBBH��,��%F�B�B �B(�A0�A8�D��
8A0A(B BBBD�������ME�G AH�<��F�B�E �B(�D0�A8�G@�
8D0A(B BBBA d����E�G0}
AF����������
H�����NF�E�B �E(�A0�A8�Kpm
8D0A(B BBBG$�����`E�A�G MDA$���5f8����	$L����GE�I�I jDA$t� ��cE�A�G PDA��h��5f�����	���%A�_����7KeL����XF�B�B �B(�A0�A8�G��
8A0A(B BBBGH����K��
C0d�p��pE�K�D f
CABkCAH������F�B�E �B(�D0�A8�D��
8A0A(B BBBJ0� ��F�A�A �DPw
 AABI8�����F�I�A �A(�D0�(C OBBT���eh����|���)�������@���L�̚X��d��p��|����40���ZD��EAD `��B�A�A �J�����HI �����A�J�i
AK����_D0U
Aܛ��FA�X
Ge$����<E�A�D jFAP$��|B�B�E �D(�C0��
(A BBBK�
(A FBBHTx�<��J�A�D �i
ABEK
FBE_
ABF	
DBIXМt3��R�D�D �+ABH���` ���Y�A�B�L ���G
FBI,�7�HV8D� 7�B�E�D �D(�DPG
(A ABBH$��9�`A�A�G QDA$��<9��J�H�X
IE�9�N�:�I��L:�7�x;�
A�y
F,�h<�)@��<�CpOX��<�,A�jt��<�,A�j(���<�yA�D�G@~
AAD��8=� A�^؞<=� A�^�@=�-MV�(*��@ �D=�IP�B�B �A(�K0�(A BBBE�����<��)��
x�<>�9A�W
A��`>�6A�T
A���>�JT]
A(̟�>��l�G�D �}�C�I�T��,?�B�B�E �E(�A0�A8�D`~
8A0A(B BBBDhRpWhC`,P��A�9G�D�D �aABE������A�JT]
A$��(B��R�C
�KvA�Ġ�H�QH u
C�$I�,H U
C8��8I�CB�B�A �D(�G@�
(A ABBGH��'��L�8J�wH A
Gh��J�H R���J�]H y
G���J�	���J�]A�T�L̡(K�3E�E�E �E(�A0�q
(A BBBC�
(A BBBJ�L�	0�L�D� L��H�s
EzRx�� �&��	���L�$���L�LE�S
HX
HG̢�L�AHk
ED�(M�$HM�@M�6I�l$ �dM�gE�A�G PDA$H��M�kE�A�D [DA8p��M�>F�B�A �D(�G0b
(A ABBDP��%�����Q��E�{
HܣhR�/E�i��|R�HP ��R��H^
Eg
AH\4�S��B�B�B �E(�D0�A8�D@_
8A0A(B BBBC�8A0A(B BBB���S�IHh
H���S�#E�]̤�S�OHF� T�,HcH��8T�~F�B�B �B(�A0�A8�DP�
8A0A(B BBBJH�lX�,Hc`��X�"HSHx��X��F�B�B �B(�D0�K8�D`{8D0A(B BBB4ĥ[�kF�B�A �A(�D0V(A ABB,��8[�zE�A�G��
AAFzRx����$#��)8`�T]��F�D�D �A
FBIS
JBA���]�$H[���]�$H[̦�]���]�4TO
E��^��q�w
HV��^�	0��^�	@D��^�gF�A�D �p
DBOA
FBGACB,���^�wJ�D�D �W
ABD���!��̧_��_� � _����X
AD� ��`�2E�G L
AG<�b�-E�g X�,b��E�G �
AJ|��b�H���b�=F�B�B �B(�A0�A8�Gp�
8A0A(B BBBE(ܨ�d�aE�A�D j
GAL<�� ����d�<E��
K<�f�8@P�4f�F�B�B �A(�A0�G@�
0A(A BBBK� �����i�AE�{ĩ0j�7ة\j�UHI$��j��E�D�G }AA�k�#,�(k�)J�S�H�<k�!\�Xk�SH Jt��k�GE�}���k�&���k�& ��l��~�TF�X�M�ܪxl�E�L��|l��xl�L �tl��F�B�D �D(�G0
(A ABBB�
(A ABBBp�$o�(H[ ��<o�/E��
Gb��Hp�	��Dp�	ԫ@p��Lp�JE�D`>����lp�,�hp�+@��p�HPX��p�<H]
KGx��p��E�V
E��q�4��(q�E�A�D x
DAIu
DAF�r���r�ZHQ�Tr�,HX(�lr�	<�hr�P�tr�,HX@h��r�EF�I�B �A(�H0�F`
0A(A BBBC���t��Hk
E�7��ܭXu�	�Tu�	\�Pu��K�B�A �A(�D0Y
(D� A�B�B�KG(A ABBC����H0����$d��u�IE�E�H tAA(���u�]F�A�D �GDBH���u�^L�E�E �B(�A0�A8�D@(
8A0A(B BBBHL�w��L�F�B �A(�A0�
(A BBBEi(G EBBT�px�(h�lx�AB�A�A �yAB���x�&E�V
ED���x�E�Q�x�E�O$��x�KE�D�G vCA0��x�IE�D�G N
FAKVAAH��x�rE�h<d�Py��A�A�G H
AAEl
CAH`DA؜;�����y�	<̰�y��O�E�D �D(�G0�(C ABBD����L�8z��B�A�G �_
CBBN
FBJ`
AEbAFB\��z�E�T0x��z��F�D�A �D@B
 AABKD���}��O�L�E �D(�A0��
(C BBBAP�����H� ~�(F�B�B �B(�A0�A8�DP�
8C0A(B BBBHL@���F�J�B �B(�A0�A8�G�
8A0A(B BBBA<��d���F�B�B �A(�D0�k
(A BBBG(вĂ�TX�A�A �vABL������F�B�A �A(�D0Q
(C ABBIG
(C ABBALL�8���F�B�A �D(�D0`
(C ABBGD
(C ABBD8�����F�B�A �A(�G0d
(C ABBCHس\��*F�B�B �E(�A0�A8�D@�
8C0A(B BBBG8$�@���B�B�A �A(�G0�
(A ABBE�`����
F�B�B �B(�G0�D8�G�K
8D0A(B BBBJ��P�N�A���K�E�G�F�M�X�x�L�Q�B���X�R�A�,%��������E�A�A  4���LE�J I
AA\����(l����A�D�G c
AAG̡^���<��Ȓ�;O�E�B �G(�D0��
(A BBBCX�ȓ��F�B�D �D(�D0U
(A ABBAK
(D ABBL~(D ABB$H����E�_
LF
JDHp�t��oF�E�B �F(�A0�A8�DPF8F0A(B BBBp'�����VAAD�@�������EAA(����DE�K�D *DA|�b��8\����pF�E�D �A(�D0P
(A ABBA<�%����ȗ�4Hkķ��ط��(EAD���	����	����	0����0D�p���B�G�A �G@Z
 AABALx����B�B�B �I(�A0�D8�D�d
8A0A(B BBBA@Z���ܸ��Ea�c0��L���B�A�A �D0u
 AABG$,����)E�D�G IJA,T���mF�D�A �D
DBK4��@���P�A�A �Z
ABA{AB4������Y�A�A �lABF���H ���8�`���F�B�D �A(�G0S
(A ABBC80�ĝ��R�B�A �G(�G0p
(A ABBALl����B�E�E �E(�R0�A8�G�
8A0A(B BBBGH��h��gB�B�B �E(�A0�D8�GPh
8A0A(B BBBGL�����F�G�L �B(�A0�A8�G��
8A0A(B BBBE$zRx��������,P��H�����F�E�B �B(�A0�A8�G�p
8A0A(B BBBF�T��nK�]
AT�����W�B�B �A(�G0��
�(A� B�B�B�HA
(A BBBH8T�����b�A�A �U
�A�B�L�
ABD8�����b�A�A �U
�A�B�L�
ABD̼X��	T�T���O�B�E �L(�D0�D8�DP�
8A0A(B BBBDx������T8����AO�B�E �L(�D0�D8�DP�
8A0A(B BBBEP������(������O�G�T p
CABH��H���B�B�A �A(�G0�
(G ABBI@(A ABBL����F�B�B �A(�A0��
(A BBBGM
(A BBBDDX�̲�QY�B�A �A(�G0�(C ABBC����H0����D����QY�B�A �A(�G0�(C ABBC����H0����X����YY�B�A �A(�G0�(G� A�B�B�R0����c
(A ABBG<D����F�B�B �A(�D0��
(C BBBDD��P��Y�B�A �A(�G0�(C ABBK����H0����X̿(��Y�B�A �A(�G0�(G� A�B�B�R0����c
(A ABBG(���HN8@���F�B�A �A(�D0�
(C ABBK<|�غ��F�B�B �A(�D0�Z
(C BBBF<�����IF�B�B �A(�D0�t
(C BBBD<������F�B�B �A(�D0�\
(C BBBD`<�H���F�B�B �B(�A0�D8�D@1
8A0A(B BBBH^
8D0A(B BBBM0�����F�D�D �DP�
 AABAzRx�P���$�	�����PA�JH$�P���F�B�B �B(�A0�D8�GpP
8A0A(B BBBF�N	���H������F�B�B �E(�D0�D8�DpO
8A0A(B BBBDLO�	��L�����	F�B�B �B(�A0�A8�G��
8A0A(B BBBD�|�	��sPH�,���O�B�E �E(�D0�A8�G@�
8C0A(B BBBCX������H�����2B�B�I �B(�A0�A8�G@8D0A(B BBB<�����mr�B�A �A(�G0�
(D� A�B�B�I̺	��$<����1E�A�G [DA$d����9E�A�D fDA����	0����z�H�G H
FAHX��(�����=B�G�A �oAB����=W�L����80����F�P�A �A(�G0�
(D ABBEl����HK,�����$F�A�A �C
ABB�����;`������F�B�B �B(�A0�A8�DP�
8A0A(B BBBDP
8A0A(B BBBA�6F��L@�$���`�B�B �E(�D0�A8�D@�8A0A(B BBBA������L�����|
B�B�B �B(�A0�A8�D��
8A0A(B BBBHXh���L�����P
B�F�O �H(�D0�A8�G�a
8A0A(B BBBJt"J��X����WHl����F�B�B �B(�A0�D8�G`�
8A0A(B BBBE<����L��H�{	B�B�B �B(�A0�D8�G�M
8A0A(B BBBE4�x�yT�A�G n
AADbAAD��`T���B�E�B �D(�A0�r
(D BBBFd
(D BBBBG
(A BBBJ����"(��X�ME�A�M n
AAE��|�(�x�\E�A�D g
AAE8���,L���qF�D�G �P
DBEl�`��H����zB�B�B �B(�A0�A8�G`-
8H0A(B BBBIH����B�B�B �B(�A0�D8�GPR
8D0A(B BBBM�:���H<�x�)B�B�E �B(�A0�A8�Gp�
8A0A(B BBBGWg��-H��H�tB�B�B �B(�A0�A8�G��
8A0A(B BBBK
4��!(��h*�4B�D�A �iABD(�|*��F�E�E �E(�A0�D8�D@h8F0A(B BBB(p��*�QT�F�D gAAI����+�HN8��+�^F�B�B �D(�A0�C(A BBB(��4+��A�A�D@o
AAI��+�RQ�u
�JA,<��+��B�A�D �`
ABF\����"��D,�LE�^
E(��x,�yE�D�D@d
AAA���,�	,���,�qI�G�A �P
DBE��S��@ �-��F�E�D �A(�D0Q
8L@OD
(D ABBE���x�L-�5L�a
C��p-�HOH��x-��B�I�I �J(�D0�A8�GP�
8D0A(B BBBF�>q��8��0��B�E�D �D(�K0w
(D ABBFHH�L1��B�E�E �E(�A0�D8�G@I
8D0A(B BBBE`��H���1�B�E�E �E(�A0�D8�G@�
8D0A(B BBBC������8�|2��B�E�D �N(�G@n
(A ABBDT�g���XX�3��F�B�B �B(�A0�A8�D`ahHpMxB�N`r
8A0A(B BBBD8����)P��l4��F�B�B �A(�A0�D@zHGPKXE`I@j
0A(A BBBD�����
P0�5�4F�B�E �D(�D0�D@oHHPKXE`I@n
0A(A BBBA�n���
X���5��B�E�E �B(�D0�D8�G`ahHpMxB�N`w
8A0A(B BBBDx����
�<7�<d@�h7�1p�B�A �D(�D0�
(A ABBF`����,`�d8��M�A�A �x
ABF��v���,���8�vI�G�A �P
FEE��E���@��,9��F�E�D �A(�D0Q
8L@OD
(I ABBE���$@�t9�2E�F�D ]DA4h��9��E�D�D C
DAKd
DAAH��:��F�E�D �A(�D0~
(C ABBFY(C ABB(��H:�mB�A�A �aABL��:�$F�B�B �B(�A0�D8�I��
8A0A(B BBBJ<h�l?�JF�B�A �A(�G�-
(A ABBA(��|@�oE�D�J�T
AAA ���@��E�D@�
AE@���A��F�G�L �J�_�G�a�A�Z
 AABA<��A�	P��A�	d��A�8x��A��F�H�A �A(�F0�
(D ABBI��pH�<��hH�0B�B�B �A(�D0��
(A BBBA�XI�
 �TI�.OU8�lI�L�xI�
`�tI�
t�pI�*���I�	���I�/���I�
���I����I�'E�a���I���I���I�
0��I�	4D��I�E�A�I0e
CAHO
CAE|��I��eN���J�DNH���J�xB�B�B �B(�A0�A8�D@P
8D0A(B BBBE��K�GH�g�@K�YD]
_0��K�A�RL��K�AAKh��K�R|��K�(E�]
A���K�"EAK���K�"EAK(���K��E�D�D x
CAG��XL��A��H��L�B�E�B �D(�A0��
(D BBBH](D BBBd��M�QH C
A���M�HK���M�HN ���M�eE�G0R
AA��0N�JH0|
A��dN�8�pN�F�A�D �c
ABG�
ABD,@�TO�$F�A�A ��
ABG(p�TP��E�A�D0C
AAA ���P��E�D0b
AD0���Q��F�A�A �D@x
 AABHH��@R�*B�B�E �E(�A0�A8�DP�
8A0A(B BBBG@�$S�$T� S�4A�D�G bDA|�8S�&F�L�0��LS��B�A�A �D0�
 AABG���S�	@���S�,F�E�B �A(�A0�D@�
0A(A BBBAH$��T�]F�E�B �B(�A0�A8�DP�
8A0A(B BBBA@p��U�	F�B�B �A(�A0�D@�
0A(A BBBJ���V�/E�i ���V�nE�G [
AA�� W�HS�(W�E�VH(�,W�FF�B�B �B(�A0�A8�D`
8A0A(B BBBA(t�0X��A�D�D@G
AAF���X����X�+E�e4���X�KF�G�D �S
CBGWAB4��X�KF�G�G �S
CBDWAB@��X�HR$X��X�4E�G�G \CA��Y�PH0B
A0��8Y�gB�A�A �D@{
 AABI��tZ���pZ���lZ�H�xZ��F�B�B �B(�D0�A8�GP�
8C0A(B BBBA<X�\��B�A�A �G@�
 AABFtHHPYHA@���_����_�AAKL���_��B�B�B �B(�A0�A8�D�
8A0A(B BBBD0��`�fI�A�G nAAG��F ��(L�(a��A�J
EA
Gr
Ex��a�(A�[���a�(A�[H���a��F�B�D �A(�D0[
(D ABBKD(D ABBH��(b��F�B�D �A(�D0[
(D ABBKD(D ABB,H�|b��B�D�D �]
IBNx��b�HH 0��4c�!F�A�A �F0p
 AABF��0d�5H l(��Xd�IF�D�A �zAB �|d��E�D0l
AJH,�e�F�B�E �B(�A0�A8�Dp�
8A0A(B BBBGx��f�JH��(g��F�B�B �B(�A0�D8�DP�
8F0A(B BBBE���h��H0r
F��i�(�,i�DJVH �di��F�G�B �B(�A0�A8�DPm
8A0A(B BBBBl��j�1L��k�B�F�B �B(�A0�A8�G��
8A0A(B BBBF ���m�IH@
H�
J ��o�YH@
P�
R`�<p�<B�E�D �A(�G0v
(F ABBD�
(F ABBF�
(C ABBG|�r�IH`
HXH��Hr��B�B�B �E(�D0�A8�J`�
8A0A(B BBBF(���u��E�D�G0S
CAI<��u��R�D�D �}
ABF
�A�B�J@T��w�6F�B�B �A(�A0�F@y
0A(A BBBE���x�=HZ
N(���x��E�D�G0m
AAA(��4y��E�O
DD
Ln
J`��y�F�E�E �B(�A0�D8�GPd
8A0A(B BBBD�
8A0A(B BBBH p��z��E�G@K
AH ��{��E�G@K
AH���{�*E�V
EI4���{�eB�E�D �A(�D0K(D ABB��{�4A�k,�|�SA�z
ENL�H|�>A�|(h�l|�pE�D�D0y
AAH(���|�cA�D�J j
GAE,���|��F�A�A �
ABF<���}��E�D�D B
DADy
DAJDAA(0�~�rE�A�G K
DAC(\�h~�vE�G0�
DHW
DE,����NF�A�A ��
ABD��܀�GH\
\ ����YH@
P�
R(��L��fE�D�G@L
CAA$����.8����L����mH0G
Ah���`H0G
A��P��!��l��#E�](������E�A�G@�
AAGL��$���F�B�A �A(�D0�
(D ABBH�
(A ABBE(0�����E�O
DX
Pg
I$\�(���E�L
GU
CmL������F�B�A �A(�G0�
(D ABBF�
(A ABBE�� ��(��,���E�A�D@|
AAHث�(���RH0D
A4D�0���E�A�G {
AAFD
FAE|�؉�SH0E
A(�����E�D�J�m
AAF@������E�A�G x
DAFD
DAGM
FAD<���{E�A�G i
DAEj
DAADAA@H�\���E�A�G x
DAFD
DAGM
FAD<�����{E�A�G i
DAEj
DAADAA(��8���E�O
DX
P_
A$��̍�lE�j
AS
EX ���9E�a
JD@�4��9E�a
JD`�T��SH0E
A|����6I�]J�(������E�D�D0r
AAG(��P��yI�A�L FDAG��(�����NE�A�G p
DAF0�ȏ�qF�A�A �D0g
 AABI8P����F�B�I �D(�D0�`(D BBB ��h���E�[0r
AE �����E�[0r
AE ������E�[0u
AJ �����E�[0u
AJ<�����F�B�E �A(�D0��
(D BBBH\�h�� p�t��/E�H@�
AC0�����eE�H�G e
DABbAA(�����FA�A�G p
DAB$����NE�g
DG
QA(���NE�A�G p
DAFH�,��	0\�(��\E�A�G0h
AAIYAA��T���F�A�D@(���zE�A�G ]
DAA<����~E�A�G [
DAC^
DAE\DA(�X��=F�D�F �]IBH�l��\�x��	p�t��E�LH��x��dF�E�D �D(�G0W
(A ABBIL(K DBB(������A�A�GPo
AAF8����F�B�A �D(�D0�
(D ABBA@���� KT@X�����B�B�B �A(�A0�D@�
0A(A BBBB��x��)E�U
FD�����	�����HI�����HI@����-F�B�B �A(�A0�G`�
0A(A BBBE<D����uJ�E�A �D(�G0F(D ABBF���������KQ$��Ț�,E�D�G WCA��К�>Hu�����;Hr�� ���,���8��(0�4���E�D�G@Z
AAD(\���oE�D�G0}
AAA4��,��TE�A�F ]
AAED
MAE4��T��]F�E�G �A(�G0y(D ABB��|��&U����!  ����`E�G @
AC0D���YE�G�L Z
FAGTCALx����F�B�B �D(�A0��
(D BBBES
(D EBBH8�����dF�H�A �D(�G0i
(C ABBE������$H [40���]F�E�G �A(�G0y(D ABBph�,���F�B�A �A(�D0�
(A ABBG�
(A ABBJ�
(A ABBKT
(A ABBFH�x��F�B�B �B(�A0�A8�Dp�
8A0A(B BBBF(�L��WH0I
A8D�����F�A�A �[
ABJO
DBK(����/E�A�G@C
AAF�����HV(���DF�D�A �uAB(�$��TF�G�A �BAB�X��-0�t��R0D�����B�D�D �G@]
 AABFx�,����8��X��D��jY�G FC�����(�����E�D�J t
DAD ���ZE�G0E
CA0$�P���F�A�A �G@�
 AABFX����+E�e$t���9E�D�D fDA��(��0��$���F�A�D �G@M
 AABEH����2z�B�B �H(�D0�D8�DP`
8A0A(B BBBD80����F�B�B �D(�A0�q
(A BBBI(l�h��2E�D�D@[
AAF ��|��qA�D Z
AH(��ح��E�D�L@�
AAA0�|��4F�A�A �D0�
 AABE8����zF�B�A �A(�G`.
(A ABBKX�̰�.E�\
GA8x�ܰ�zF�B�A �A(�G`.
(A ABBK�� ��.E�\
GA0�0��GE�G�D R
DAIMDA0�L���A�A�D0n
DAG\DA<�Ȳ�HK(T�в�zE�G�L@Z
AAAH��$��F�B�B �B(�A0�D8�GP�
8C0A(B BBBH������� ����E�K0�
AA����	,����@����	8T�����F�N�A �A(�D0v(H ABB���������$H�����Hv����HK����?Q�T
KD<�����B�B�B �D(�A0�k
(D BBBHT�@��HP0l�H��vE�D�D C
CADVFA�����Hk
E��zѿ�$�t��>E�G�I bAA4�����JF�G�I �I(�D0`(A ABB0����/WD����,(X����3F�F�I �ZAB,�����}Hn
JG
ID
LI
GH����,��!8�H���F�B�D �A(�D@�
(A ABBB(�Hп�,����E�UH����\����2E�_
LA,|�����H{
EH
HH
HD
LD���Ͽ�� �����N�X��
T��`��(l��)<����Pd��dp��
xl���h��4A�[
DK<����tE�A�G m
DAAZ
DAANDA����>A�|���1A�o$��.E�h@$��qA�k`\����B�B�E �E(�D0�D8�D@G
8A0A(B BBBEZ
8A0A(B BBBD(���JB�D�A �l
ABJ,�(��	B�D�A �W
DEI��&80$���B�B�D �A(�G0p
(D ABBGl���0����9A�D�G T
AAFDGA����	����HI����HK0�����B�A�A �H0^
 AABB,X��$H[<Dp��E�D�G0]
DAFf
DAEQDA����$����$A�D�D UDA���˿�����
����HN���	���	(���	(<����A�C�G0q
AAB$h���E�D�O mDA�t��4����JB�B�D �D(�F0g(G ABB����!HX(����EE�C�G d
FAA ���#4���S\H<���B�B�B �A(�A0�U
(A EBBIC
(A BBBF�(A BBB����KO{���5E�k�(��	�$��	 �� HU(��!HV4@��HLLH��HLdP��x\��$�h��UE�D�G0BAA����HK4����]F�D�D �k
ABDNHB(���TF�D�C �\
CEEL0���F�E�E �A(�A0�s
(A BBBD_
(A BBBJ4�����F�A�D �I�
 AABD����3E�md����F�B�E �B(�D0�A8�D�L�D�f�A�z
8A0A(B BBBE�
�LL<���rB�B�E �B(�D0�A8�D�
8A0A(B BBBD,�����D_
E\
DK
E[
A�X����Z���#AAD���WB�D�D �0	T���B�D�D �GP�
 AABKD	���D 
M `	���|A�Q�M
AA@�	����R�B�B �A(�D0�G@|
0A(A BBBJ@�	����B�A�D �A
ABET
ABIOAB0
����B�D�G �GPv
 AABA4@
T��?B�D�D �Y
ABJGAB\x
\���F�E�B �A(�A0�U
(C BBBCX
(A BBBAD(A BBB$�
����A�e
JZ
FN
J(��SF�D�D �|FB(,8�� Q�D�G s
AAG0X,���B�D�D �D@�
 AABK����9�$��	(� ��iF�A�D �ZAB�d��IB�D�A �(���;F�D�H �S
ABE,,����E�I�G�
AAG(\��^B�D�D �V
ABE4�<��dB�E�A �s
CBHXAB�t��AAK�x��$A�^����0
���KA�D�G M(T0H(A RAA(@
���;F�D�H �S
ABE4l
����A�D�D0j
AAKR
AADH�
P��:B�B�E �E(�A0�A8�G`�
8A0A(B BBBG�
D��&H]L\��F�B�B �A(�A0��
(H BBBET
(A BBBE|X��kB�B�B �E(�A0�D8�GP8
8A0A(B BBBG^
8A0A(B BBBHD
8A0A(B BBBB(����?E�G�G \
DAD��=E�]
FT$0��2A�_
H$@T��RE�A�G DA$h����E�A�G uDAL����F�B�B �A(�A0��
(H BBBFT
(A BBBEL����F�B�B �A(�A0��
(H BBBET
(A BBBE80T���F�A�A ��
IIN�
ABLl���v}OLIH����E�A�G D
AAMK
AAKP
DAAADA�\���h��8t��.B�B�A �A(�D�l
(A ABBD8<h��B�E�D �A(�G��
(A ABBH8x<��B�E�D �A(�G��
(A ABBHH����E�A�G x
IHJK
AAKP
DAAADAd��T`���E�A�G Z
KAMD
IHKn
AAHP
DAAADA(l���`E�A�D z
AAJ����(�����E�J�D b
AAI�\��E�JL�`���L�E�E �D(�A0�P
(C BBBDH
(C BBBAD���1Hf<\��B�B�A �A(�G� I� �
(A ABBF(����{F�D�A �o
ABC�L��4�H���L�F�C �_
ABIY
ABD���(���6HX
HKH���"EAKd��aH z
F �$��RH]
KI
OI�`��ZHe
Ka����#K����E�T(����BF�A�D �d
ABF ��E�P
A4<���A�C�G V
AAEq
DAJLt@���B�B�A �A(�D0M
(A ABBCq
(A ABBI@����B�B�E �A(�A0�G@k
0G(A BBBEHl���F�B�E �A(�D0�h
(E BBBK�(A BBB0T ��RE�D�D i
DAELDA�L��$E�P�`��*E�d8�t��1F�D�A �A(�Dp�
(A ABBJ0�x���F�A�A �DP�
 AABJ80D��9F�A�A ��
ABDl
ABI\(R����4��&E�U�H��,E�Z�\��E�Q�`���l���x��5YI���(���5YI$@��.E�A�G [DAh��>E�x���3[@����F�B�B �A(�A0�DP
0A(A BBBI8���(F�B�D �A(�G0_
(F ABBB4|��E�A�G c
FAIY
CAA0P�XE�D�D o
DAGJDA�@�.E�]L�T��F�B�B �E(�A0�A8�G��
8A0A(B BBBK(��	�ME�D�D m
AAD(�	�`A�A�D p
AAHH
�@d [ `D
�FE�V
EI
E8�p
�vF�B�D �D(�G`�
(A ABBF8����F�B�A �D(�G0�
(F ABBE�մ��D�$P�+\N@<h�B�B�E �D(�C0�DP�
0A(A BBBA8�4
�
F�B�D �D(�GPD
(A ABBG��"H�$�qB�H�I �D(�I0k
(D ABBDM(F ABB8X�hF�E�G �D(�D0n
(N ABBE|X���F�E�E �B(�A0�A8�DP
8D0A(B BBBM�
8F0A(B BBBAG
8F0A(B BBBAH���zB�E�E �F(�D0�D8�DP~
8D0A(B BBBGT$�{B�B�B �B(�A0�A8�H��Q
D��m
8A0A(B BBBB@|8�}F�B�B �A(�A0�G@G
0A(A BBBFX�t�sF�E�D �D(�F0a
(A ABBHD
(J ABBEI(D ABB$��jH`
HP
HI
A0D��GA�A�G0_
AAFTAA@x��/B�A�A �G0T
 CABK�
 CABAL����B�H�B �B(�A0�A8�G�F
8A0A(B BBBAHH�ZB�B�B �B(�A0�A8�Gp�
8A0A(B BBBGX\ �(D[
A@tp �PB�B�B �A(�A0�GP�
0A(A BBBHL�|$�JB�B�B �B(�A0�D8�G�`
8A0A(B BBBAH |&�/F�B�B �B(�D0�A8�DPu
8F0A(B BBBG$T `'�jH`
HP
HI
A4| �'��B�A�H ��
CBHAFB�  (�~E�_
D� �(�1E�S
A� �(�	H!�(��F�H�D �D(�D0z
(N ABBID
(F ABBAHL!�(��F�H�D �D(�D0z
(N ABBID
(F ABBA �!,)�E�D0l
AJ0�!*��F�A�A �D`
 AABC8�!�+��F�B�A �A(�D��
(A ABBF0,"H-��E�D�D |
DABaGH`"�-�WE�m
FL|"(.�B�B�E �B(�A0�D8�G��
8A0A(B BBBH\�"�8��B�E�E �B(�G0�D8�D@N
8A0A(B BBBKV8A0A(B BBB ,#89�XA�J@F
AAP#t9�E�T,l#x9�hB�A�A �H
ABA(�#�9�RE�G�DPz
AAA�#�9�0�#�9��F�D�C �GP{
 AABE($�:�~E�A�D T
FAA8<$�:�F�E�D �D(�D@j
(D ABBF(x$�;��E�A�D0�
FAJ(�$�=�jE�A�D m
GAI�$�=�HO
A0�$�=�RE�A�G m
DAALDA %�=�)E�^H<%>�YF�B�B �B(�A0�D8�DP�
8A0A(B BBBA4�%A��F�D�A �b
ABHYAB(�%�A�BA�C�G d
DAA4�%�A��E�D�D `
FADT
DAO($&@B��E�D�D p
FAD,P&�B��B�D�D �L
FBB(�&4C�SE�A�D c
GAK0�&hC��E�A�D L
FAClDA(�&�C��A�D�G�_
AAC0'hD��F�A�A �D0<
 AABD@'F�T'F�kE�A
A4t'`F�sE�A�D B
FAED
DAE@�'�F�.F�B�B �A(�A0�D`�
0A(A BBBJ8�'�G��B�E�D �D(�GP�
(A ABBI@,(8I��B�E�E �A(�A0�D@�
0A(A BBBA0p(�I��B�D�A �G0T
 AABJ�(PJ�H�(\J�B�B�B �E(�D0�A8�G��
8A0A(B BBBJ)0L�H),L��B�E�B �B(�A0�C8�Gp�
8A0A(B BBBBd)�N�PQ�z��)�N�]A�W(�)O��A�A�GPj
AAK �)�O�rE�D }
AI8�)�O��F�D�A �e
FBHa
DBE$(*�P�4E�D�D _FAP*�P�kE�g
D(l*�P��E�A�D0L
AAH\�*\Q� F�B�A �D(�D0P
(D ABBFA
(F ABBDe
(F ABBAH�*R�F�B�B �B(�A0�A8�D@�
8D0A(B BBBG,D+�R�NA�C
D��G��K�;
K`t+X�(B�B�E �H(�A0�A8�DP�
8D0A(B BBBET
8A0A(B BBBE�+�X�%4�+�X�HF�D�D �e
DDEDAB$,Y�(H _<,Y�E�LX,Y�E�Y8t, Y��F�B�D �A(�D@�
(A ABBB�%4���$�,�Y�-E�D�F VFA8�,�Y�RB�D�J �_
DBK�
FBA (-�Z��E�D0`
AF$L-x[�*E�D�I IIA(t-�[��E�D�G0R
AAD<�-\��F�A�D �D0n
 AABGQ AAB8�-d\��F�B�A �A(�Gp`
(A ABBIH.�a�F�B�B �B(�A0�A8�Lp3
8A0A(B BBBI h.lc�DE�]
FV
A$�.�c�vI�D c
FJp�(�.�c��m�A�D k
DAF�.dd�4�.`d��F�A�A �i
AFHQFBL,/e��B�B�A �A(�G0~
(A ABBG�
(D ABBK8|/�g��F�A�D �C
ABOA
FBA�/h�HO
A$�/h��E�t
G\
DF
A�/xh�E�U0|h�-E�P
A40�h�H0�h�2E�ed0�h�!J�L��0�h�+J�VH�$�0�h�YE�D�D FDA$�0 i�`E�D�D MDA�0Xi� E�V$1\i�0E�A�G ]DA01di�'E�a,L1xi�=F�D�A ��
ABD|1�j�Q�1�j�HI8�1�j�hF�B�A �A(�DP�
(A ABBDH�1l��F�B�B �B(�A0�A8�DPn
8A0A(B BBBF�̝��7LD2�n��J�E�B �H(�A0�D8�J�>
8A0A(B BBBHL�2�r�F�B�B �E(�A0�A8�D��
8A0A(B BBBK��O���(�2�y�RF�A�D �M
ABE$3�y�E�M@3�y�	@T3�y��E�D�D S
CADT
CAHY
CAKL�3z��F�B�B �B(�D0�A8�I��
8A0A(B BBBG4�3�|��F�E�D �A(�F0�(A ABB@ 4$}�F�B�E �D(�A0�J��
0A(A BBBC0d4~��F�H�C �D0�
 AABD8�4�~�F�B�A �D(�DP�
(A ABBA8�4���F�B�A �D(�D@�
(A ABBIH5D���F�B�E �D(�D0�\
(A BBBHA(D HBB\5���!HQ4t5���nF�D�D �n
AENHLB�5��E�L �5���E�D0R
AD�5x��JHb
FSH6���F�E�E �O(�D0�A8�D`�
8A0A(B BBBA@X6|��B�H�E �D(�A0�F`�
0A(A BBBDH�6H���B�E�D �A(�G0O
(I ABBHG(A DBB�6���	�6���7���L$7����E�A�D n
AAFv
DAEI
FAHR
FAALt7���E�A�D n
AAFv
DAEI
FAHR
FAA4�7`��XB�E�D �D(�F0y(D ABB\�7���'B�B�B �B(�D0�A8�J�
8A0A(B BBBHI�L�F�A�$zRx��������,Ɨ��;L�8��%F�B�D �C(�J0}
(F ABBGJ
(A ABBH�8���E�T09��eE�D�F o
AAHWDA,89<��}F�D�F �Q
ABAh9���HE�e
FS�9���0E�j�9Ћ�E�M�9ԋ�E�M�9؋�E�P�9܋�\E�m
N[$:���E�G
L]
KF(@:����E�G }
AF`
AA4l:���E�A�G f
HALE
AAA4�:`���F�D�F �l
CBOQ
IBE �:���pE�m
NS
E,;���F�A�H ��
ABA,0;����J�A�H ��
ABG$`;t��lE�m
N_
AF
A,�;����J�A�H ��
ABG4�;����F�D�F �l
CBOr
ABA8�;���R�E�A �D(�F0B(I� D�B�B�L,<8���F�B�B �I(�A0�A8�G�1
8A0A(B BBBI8|<����R�E�A �D(�F0B(I� D�B�B�H�<ܒ�>F�B�B �B(�A0�C8�DP
8A0A(B BBBE0=��E�H�G `
DAGDDA08=,���E�H�G `
DAGDDA0l=����E�H�G `
DAGDDAT�=���F�E�E �H(�D0�U8U@I8A0[
(D BBBKN(M EBB�=|��FE�]
FY >���E�m
Na
F(<>��`M�G�A �~DDh><��)|>X��)�>t��)�>���6Q�d(�>���_E�A�G OAAH�>���B�E�E �E(�D0�D8�DPy
8D0A(B BBBE@8?\��B�B�B �D(�G0�Gp�
0A(A BBBK(|?8���E�D�D@o
AAA$�?���JE�D�D sDAL�?��B�E�B �B(�A0�D8�I�
8A0A(B BBBE0 @D���F�A�D �Gp�
 AABD`T@����F�B�H �H(�D0�D8�F@Q
8D0A(B BBBDe
8N0A(B BBBL8�@̡�nF�B�D �C(�DP
(A ABBD(�@��eA�D�F0s
AAH\ AD���B�E�E �E(�D0�D8�GPF
8G0D(B BBBGs8A0D(B BBBH�A���B�B�E �E(�D0�D8�G��
8A0A(B BBBID�����L�At���B�B�B �B(�D0�A8�D�y
8A0A(B BBBD0B$��DB ��DXB��mF�B�E �A(�A0�G��
0A(A BBBFH�BD��7F�B�B �B(�A0�C8�D��
8A0A(B BBBGL�B8��gF�B�B �B(�A0�C8�D�
8A0A(B BBBB<<CX���F�B�A �A(�I�?
(A ABBA(|C����E�A�DP�
AAE�CL��,E�f<�C`���B�E�A �D(�I�S
(A ABBBLD����F�B�B �B(�A0�A8�D�'
8A0A(B BBBE<TD@���F�B�B �A(�A0�Z
(D BBBH(�D���-F�D�F �YABH�D���F�B�B �H(�A0�A8�DP�
8D0A(B BBBHEX��  Ed���e `[ q
GX DE@���E�I o
AAhE���Mi�c�E���E���E�C�F0�E��� E�D�F L�E����B�B�B �B(�A0�A8�D�

8A0A(B BBBK@(F���B�B�B �A(�A0�Fp5
0A(A BBBE<lFȹ��F�B�B �A(�C0�N
(A BBBM�FH���FT��%HW
A(�Fh��bE�G�G@�
AAHHG���UF�B�B �B(�D0�D8�D��
8A0A(B BBBHHTG����F�I�B �B(�A0�A8�D@�8A0A(B BBB�G4���G@���GL���GH��
�GD��iI�m
Jh�H���$H���COs<H���'HSTH���'HSlH���'HS�H��'HS�H(��'HS�H@��'HS�HX��$HX�Hp��#HW�H���'HS(I����E�D�DPn
AAC@I��AHh
HD`ID��8tIP���B�E�D �A(�G`e
(A ABBB�I���HV(�I���QE�K�D e
AAA�I��AAMJ��!\$J ��<E�a
A@JD��'E�a\JX��AAKxJ\��AAK�J`��AAM�Jd��$AAD�Jx��AAK`�J|��B�E�E �E(�D0�D8�G@c
8G0A(B BBBMI
8A0A(B BBBELK8��5T`8�)���OxKL��AAK,�KP���A�J
B�G��F���
A0�K ���B�D�A �G0P
 DABK �K����E�GPw
ADL(��.E�d8L<��%ZLLX��%Z`Lt��&[tL���$Y�L���%Z�L���&[�L���,a�L��(]�L��(]�L8��-b(MT��LA�G�D k
AAG(,Mx��;A�G�D g
AAA(XM���:A�G�D f
AAA(�M���LA�G�D l
AAF(�M���<A�G�D h
AAA(�M���@A�G�D l
AAA(N���:A�G�D f
AAA(4N��LA�G�D k
AAG(`N$��HA�G�D t
AAA(�NH��LA�G�D m
AAE$�Nl���D ]
GI
OD
E(�N���<A�G�D h
AAA(O���LA�G�D p
AAB(8O��?A�G�D k
AAA(dO0��CA�G�D o
AAA�OT��Av4�O���[A�G�D d
AAF[
AAA4�O���[A�G�D d
AAF[
AAAP���Av(P��Av(<PX��RA�G�G g
AAH(hP���RA�G�G g
AAH�P���Av<�P���F�E�E �A(�D0�`
(D BBBA �P����D0�
Bl
E Q����D0s
Iw
E$0Q4���D D
HG
QO
EXXQ����F�D�A �Q
DBN[
ABBA
FBGA
DBICABX�Q���F�D�D �]
ABJ[
ABJA
FBGA
DBICABXRt���F�D�A �Q
DBN[
ABBA
FBGA
DBICABXlR����F�D�D �]
ABJ[
ABJA
FBGA
DBICAB(�RL��E�K�D f
AADL�R@��]F�B�E �A(�A0��
(D BBBA
(D BBBG�DSP���F�B�A �A(�G0�
(F ABBH
(F ABBAc
(F ABBBD
(F ABBAD
(D ABBKD
(F ABBA4�S���`F�E�D �D(�D0(D ABB$T���|E�H�D eDA,<T(���F�A�A ��
ABA,lT����F�A�A ��
ABA,�TH���F�A�A ��
ABAH�T����F�E�E �E(�A0�C8�D@�
8A0A(B BBBF<U\��GI�B�B �A(�C0��
(A BBBJ4XUl��oF�K�D �j
ABFYKB(�U����A�D�G@p
AAB,�U8��;F�A�K �
ABA4�UH��oB�D�D �Z
IBA^
IBAH$V����F�B�B �B(�A0�C8�D`�
8A0A(B BBBC,pV����F�K�A ��
IIO<�Vt���E�K�D D
DACx
DACTDA�V��GH_
IVHW$��fF�E�B �B(�A0�A8�D@�
8D0A(B BBBG(LWH���E�K�D �
DAAHxW���B�E�E �B(�A0�D8�Dp�
8A0A(B BBBG,�Wp��dF�A�A �E
ABE,�W���;F�A�K �
ABA,$X���;F�A�K �
ABA8TX���F�K�D �v
EBFI
IBAH�XT��:F�B�B �B(�A0�A8�Dp�
8A0A(B BBBA8�XH�dF�H�D �D(�GP|
(A ABBA$Y|�0E�D�N IJA0@Y���F�A�A �G@i
 AABAHtY��vF�B�E �B(�D0�D8�D`�
8A0A(B BBBG@�Y$��F�E�B �A(�F0�DP�
0A(A BBBELZ���F�B�B �B(�D0�A8�F�n
8A0A(B BBBA8TZ0��F�B�G �D(�GP�
(A ABBJ0�Z���F�G�D �G@`
 AABD �Z0��E�G@u
AA0�Z���F�K�D �D@�
 AABA[�!HS4[0�<E�a
AP[T�,E�a
Al[h�0Hg�[��4E�i
A0�[��,F�D�K �DP�
 AABG(�[��eE�G�G `
DAH8\���F�E�D �J(�D0o
(K ABBEH<\h�wF�B�B �B(�A0�A8�F@z
8D0A(B BBBE@�\��PF�B�E �D(�D0�G`
0A(A BBBAH�\��1F�B�B �B(�A0�A8�G@G
8J0A(B BBBIH]��_F�B�E �E(�D0�D8�Gp
8A0A(B BBBAHd]� �QF�B�F �B(�A0�A8�D@Z
8J0D(B BBBJ@�]�!�F�B�E �D(�D0�GpM
0A(A BBBGH�]�"�1F�B�B �B(�A0�A8�G@G
8J0A(B BBBIH@^�#�F�B�E �E(�D0�D8�G�P
8A0A(B BBBEH�^H$�QF�B�F �B(�A0�A8�D@Z
8J0D(B BBBJ8�^\%�M	F�I�A �A(�D0�
(F OBBI_p.�E�O0_t.�)D_�.�,X_�.�sK�D�D �QCBG���,�_�.��B�A�A �z
ABG�_\/�FA�D`�_�/��B�B�B �B(�A0�A8�Gp]
8E0D(B BBBAq8A0A(B BBB8`�0�K|N,P`$1�SK�D�D �pCBH����`T1�K|N,�`�1�SK�D�D �pCBH����`�1�(�`�1�9B�M�D �bAB(a�1�qF�D�D WD�A�H4a 2��B�B�A �A(�D0d
(D ABBId(C DBB(�a�2�;B�D�D �mAB4�a�2��A�A�G f
ADDZ
DAI�a�3�HI�a�3�HLb�3�`D c
I0b�3�HTHb�3�#E�]db�3�6E�]
H�b4�<HW
EL�b84��F�E�B �B(�A0�D8�D�V
8A0A(B BBBHd�m��Hc�5�lF�E�B �B(�A0�A8�Gp(
8A0A(B BBBF��gm��(`c�6��E�D�G A
CAK(�c�6�sE�`
KN
B}
K(�cL8��F�F�A ��AB��c�;��A�A�F 3
AACK
AACK
AACK
AACK
AACK
AACK
AACK
AACKAA�PUl��D�d�=��W�A�D �d���` ����ABG���P ��� �dHB�ME�G w
DAL�dtB�F�B�B �B(�A0�A8�D��
8A0A(B BBBGL@e4E��F�E�B �B(�A0�A8�G�"
8A0A(B BBBD0�e�J��b�A�D EAAB��A ���ePL��eLL��eXL�A�\(f\L��E�D�D@^
AAC4f�L�<E�`
KG0TfM��E�G e
AFL
AKqAH�f\M�F�B�B �B(�A0�A8�Dp�8A0A(B BBB(�f O�'E�A�D DAg$P�(g0P��E�D h
AFRA@g�P�@HTg�P��B�B�B �E(�A0�A8�G`j
8F0A(B BBBC$"5i��h�g U��F�E�B �B(�A0�A8�G���A�H�H�F�D�l�|
8A0A(B BBBDT h�W��F�E�E �E(�D0�D8�DPrXG`KhEpI8A0A(B BBBCPTxh�W��F�E�E �E(�D0�D8�DPQXG`KhEpI8A0A(B BBBDPT�hDX��F�E�E �E(�D0�D8�GP]XJ`BhEpI8A0A(B BBBKPX(i�X�]F�B�E �A(�A0�G�N�O�H�B�	I�V
0A(A BBBD`�i�Z��B�E�B �B(�D0�A8�J�,�L�	B�	B�	N�x
8A0A(B BBBJ�i]�HIj]�IjP]�HIL,jX]�oB�B�B �B(�A0�A8�G�n
8A0A(B BBBA�mf��6�jdv�HI�jlv�	�jhv�HP�jpv�
�jlv�HIktv�
kpv�HI,kxv�H@k�v�zF�B�B �B(�A0�A8�DpQ
8A0A(B BBBC�k�z�HIH�k�z��F�B�A �D(�D0k
(M ABBJj(M ABB�k{�%l0{�2l\{�HO0ld{�Dl`{�Xll{�	llh{�	�ld{�!HX�l|{�"HY�l�{�"HY8�l�{��F�B�D �D(�F@D
(A ABBHfd��4m�{��F�B�F �D(�D0�(C ABBLPmt|��	F�B�B �B(�A0�A8�D��
8A0A(B BBBE�m��,KX��xc��L�m���F�B�B �B(�A0�A8�G�
8A0A(B BBBCH�$c��x0nT��F�B�E �B(�A0�D8�Gp�xA�PxDp�
8A0A(B BBBEyxO�N�O�O�N�N�O�fp��n���5	B�E�E �B(�A0�A8�G�-�J�M�A�X�O�A�C�D�I�P�|�I�A�A�Z��
8A0A(B BBBCy�E�K�A�$zRx��������,�a���oX��0E�j�ol��:HW
QI�o���HI�o���4�o����F�B�A �A(�K0�(A ABB ,pH��WE�J A
AATGa�� dpp��jE�J G
AI�G�`���p���	 �p���eE�D U
AA�G�`���pܡ�oH0a
Aq0��JH0|
AH qd��1F�B�B �B(�A0�A8�Dp
8A0A(B BBBA�.`���qD��%0�q`��?B�A�A �D0�
 AABD���_��
h�qX��cF�E�E �B(�A0�D8�D���P�H�H�A�A�S��
8A0A(B BBBK Hr\��&HIA B(H0ITlrh���F�E�B �E(�D0�D8�G@dHGPKXE`I8A0A(B BBBA@T�r����F�E�E �E(�D0�D8�D@AHGPKXE`I8A0A(B BBBD@Tsا��F�E�E �E(�D0�D8�GPRXG`KhHpI8A0A(B BBBEP\ts@��KF�B�B �E(�A0�A8�DpSxH�N�B�NpP
8A0A(B BBBH`�s0���B�B�B �B(�A0�C8�D��
8A0A(B BBBK��K�H�B�N�$8tL��,E�D�F VAA`tT��ttP���tL��#E�]\�t`���F�E�E �E(�D0�A8�DPqXB`EhBpGxE�NPW8D0A(B BBBhu���_F�B�B �B(�A0�A8�J���E�B�B�G�A�h�O
8A0A(B BBBJ8pu����F�B�A �A(�D0q
(C ABBI�u����u���u��"H Y�u(��HI,v0��?L�
HO
I
Q4v@��Hv<��\vH��LpvD���B�B�B �B(�A0�A8�D�d
8A0A(B BBBL(�v����A�A�G0]
AAH�v��.\Qw ��;wL��)E�_4w`��QN�h
JP�Tw���HT@IZ��(�w���uE�A�J@X
FAAH�w���B�H�B �E(�D0�D8�L`�
8A0A(B BBBA4�wl��WF�A�D �~
ABDACB(0x����E�A�F0g
AAA0\x���<E�D�F O
IAHDFA(�x��NE�D�G V
JAEH�x(���F�B�B �B(�A0�A8�D@�
8C0A(B BBBE0y���B�A�A �G@j
 AABA�y�X��HPy����B�B�B �E(�A0�A8�Dp�
8A0A(B BBBAH�yH��9B�B�B �B(�A0�D8�DpJ
8A0A(B BBBKL�y<���F�E�E �E(�A0�A8�G�&
8A0A(B BBBB88z����B�E�D �A(�OP�
(A ABBG,tzP���B�A�A ��
ABFL�z���wB�F�E �E(�A0�D8�D��
8A0A(B BBBH �z��E�G@�
ADH{���B�B�B �B(�G0�D8�G�	b
8A0A(B BBBJ$zRx��	������,PV��	L�{����B�E�B �B(�A0�A8�J�m
8A0A(B BBBB$zRx��������,�U��,,|����B�D�A �I
ABE8\|H��F�D�A �A(�D@�
(A ABBCL�|���TB�B�B �B(�A0�A8�G��
8A0A(B BBBA$zRx��������,�T��8$}`���B�D�A �Q
AEJR
ABK`}���?E�d
H|}���}$��*E�`�}8���}D���}@��#HV �}X���E�F0^
AA ~���ZE�G��
AD4~��&E�`P~��+E�^$l~(��GE�D�D sAA(�~P���E�F�DP�
AAA�~���UH0G
A�~�� �~��YE�G@F
AA4@��iM�F�G �\
NBJA
ABD\Lx���F�B�D �D(�D0�
(D ABBMU
(C ABBC�
(F ABBJ,����E�M�D �DA����AAK����AAK����@Oa,����$E�^$H����]E�D�F HDA$p�4��nE�D�F YDA$��|��+E�A�G TED�����E�U܀���HN����}A�{����	$����E�W@����:E�h
KA0`���B�D�D �G0d
 AABA��`��>A�|8�����vB�B�D �D(�D0T
(D ABBC(�����A�F�G0�
AAG4�L��EF�G�G �N
CBIOCBP�d��BE�p
KAp����!AAK �����LA�D W
AC�����<DwȂ���!܂��!�4��wA�u����	 �����@4����B�B�B �D(�D0�G@M
0A(A BBBF(x�����A�G I
AFb
EA0��0��PA�D�P \
AAELFA8؃L��{B�E�E �D(�G@X
(A ABBA0�����B�A�D �G0�
 AABE(H�<���B�E�D �u
ABE,t�����B�A�A �@
ABI0����pW�D�G bCAH��H ��(؄<��A�A�G@g
AAFH����B�B�B �B(�A0�A8�Dp�
8A0A(B BBBGHP����2B�B�B �B(�A0�D8�D@d
8D0A(B BBBF �����gA�G @
AA(�����B�D�D �z
ABI0�8��3B�A�A �G@Q
 AABH0 �D���B�D�D �D@x
 AABF8T���B�E�A �D(�GP~
(A ABBIL����)B�B�E �B(�A0�A8�D�
8A0A(B BBBA4���8B�E�D �D(�F0I(G JBB���A�X@4���B�E�E �A(�D0�DP!
0A(A BBBBx�l�8��x��B�B�A �C(�G0~
(D ABBJ4ȇ<��E�C�J i
DAHl
FAEH����B�E�B �B(�D0�G8�DPr
8A0A(B BBBJHL�H��F�E�E �B(�D0�D8�D@m
8G0A(B BBBE���������lD0J
A(Ȉ��.B�D�G �VDBH����B�F�B �B(�A0�A8�G�X
8A0A(B BBBIH@�t��B�B�E �H(�D0�w
(A BBBEb(A BBBL����aB�B�B �B(�A0�A8�D�E
8A0A(B BBBCH܉-��B�B�L �G(�A0�I8�D`3
8A0A(B BBBF((�|.��E�A�D D
GAE$T�/�4E�D�G _CA8|�(/�yB�B�A �C(�D0T
(A ABBJH��l/��B�B�B �B(�D0�A8�Gpe
8A0A(B BBBE$��0�4A�G�N QDD8,��0�ZB�B�D �D(�G@�
(A ABBJ0h��1�$B�D�A �G0�
 AABI8���2�DB�E�D �D(�GP�
(A ABBB8؋4��F�B�A �A(�G0i
(C ABBF(��4�wE�I�J�W
AAA@�5�T�5��E��p��6����6�(���6��B�D�C �X
ABLȌ�6�HQ�7�HQ��7�HQ�7�7E�J bA0�47�HQH�<7�HQ4`�D7�#E�G d
IGA
GHh
DJ ��<8�BHz
N[
E��h9�HQԍp9�HQ(�x9�GE�G�D `
AAN ��9�_E�G B
GE<��9��H \
L\(\�X:��E�A�G`j
AAG��>�HQ��>�HQ��>�HQЎ$>�HQ�,>��H _
I(��>��E�J b
ANIA0�4?��H g
A$L��?��Hy
ON
JN
Et�P@�DH_
E���@�NHi
E���@�NHi
E ȏ�@�E�F@
AE��B�	��B���B�(��B�<��B�P��B�d��B�x��B����B�;E����E�	���E� АF��E�D Z
AD�pF��|F�HK4 ��F��B�M�A �[
CBA_ABX��F�xl��F��B�E�H �H(�D0�D8�D`b
8A0A(B BBBAP
8F0A(B BBBAP
8F0A(B BBBA0�,I��E�A�G W
CAHgFA��I�c0��I�KD�0J�IX�lJ�all��J��F�B�B �B(�A0�A8�G���]�P�A��
8A0A(B BBBD��\�X�A�ܒXN��TN��|�@O�@F�A�A �D0�
 AABG�
 AABM]
 AABO�
 AABGt
 AABHu
 AABG���R�vF�B�B �B(�A0�A8�G�F
8A0A(B BBBK+
8A0A(B BBBEd
8A0A(B BBBEo
8A0A(B BBBEV
8A0A(B BBBEb
8A0A(B BBBE P��W��E�D k
AK(t� X�hE�G ]
DKG
AP ��dX��E�d
GW
I8ĔY�nF�E�D �A(�GPV
(A ABBE0�4Z��F�A�A �D0�
 AABF4��Z�QE�DT� [�h�,[�|�8[���D[���P[�H��\[�4F�B�B �B(�A0�A8�Dp�
8A0A(B BBBD�"�;��	|�<]��S�B�B �B(�A0�A8�DP0
8A�0A�(B� B�B�B�GD8A0A(B BBBB������HP������L`;��	H��H^��F�B�B �B(�A0�A8�D`�
8A0A(B BBBB|Q	;��	D��_�SE�D�G �
AAD�
AAE�
AAE���:��h��c�|��c���d�9��0d���<d�9L̗hd��F�B�B �B(�A0�A8�D��
8A0A(B BBBD�9:��	H0��f��F�B�B �B(�A0�A8�D`r
8A0A(B BBBBS�9��	��h�Qi�Y���Hh���Th�`TGؘ�h� ��h��E�D �
ACL�i��F�B�B �B(�A0�D8�D�T
8A0A(B BBBE�	�8��	Lt��k��F�E�B �B(�A0�A8�D��
8A0A(B BBBH<;t8��	Lؙ�m��F�E�B �B(�A0�A8�G�7
8A0A(B BBBG�	8��	,<��p��F�A�A ��
ABG\��7��;��$s���0s�J��ls���xs�Кts���s�9���s���s� ��s�
4��s�
H��s�
\��s�
p��s�
���s�
���s�
���s�
���s�
ԛ�s�
�|s�
��xs�
�ts�
$�ps�
8�ls�L�hs�
`�ds�
t�`s�
��\s�
��Xs�
��Ts�
ĜPs�
؜Ls�
�Hs�
�Ds�
�@s�
(�<s�
<�8s�
P�4s�
d�0s�
x�,s�
��(s�
��$s�
�� s�
ȝs�
ܝs�
�s�
�s�
�s�
,�s�@�s�
T�s�
h�s�
|�s�
��s�
��s�
���r�
̞�r�
��r�
��r�
��r�
��r�
0��r�
D��r�
X��r�
l��r�
���r�
���r�
���r�
���r�
П�r�
��r�
���r�
��r�
 ��r�
4��r�
H��r�
\��r�
p��r�
���r�
���r�
���r�
���r�
Ԡ�r�
��r�
���r�
��r�
$��r�
8�|r�
L�xr�
`�tr�
t�pr�
��lr�
��hr�
��dr�
ġ`r�
ء\r�
�Xr�
�Tr�
�Pr�
(�Lr�
<�Hr�
P�Dr�
d�@r�
x�<r�
��8r�
��4r�
��0r�
Ȣ,r�
ܢ(r�
�$r�
� r�
�r�
,�r�
@�r�
T�r�
h�r�
|�r�
��r�
��r�
���q�
̣�q�
��q�
��q�
��q�
��q�
0��q�
D��q�
X��q�
l��q�
���q�
���q�
���q�
���q�
Ф�q�
��q�
���q�
��q�
 ��q�
4��q�
H��q�
\��q�
p��q�
���q�
���q�
���q�
���q�
ԥ�q�
��q�
���q�
��q�
$��q�
8�|q�
L�xq�
`�tq�
t�pq�
��lq�
��hq�
��dq�
Ħ`q�
ئ\q�
�Xq�
�Tq�
�Pq�
(�Lq�
<�Hq�
P�Dq�
d�@q�
x�<q�
��8q�
��4q�
��0q�
ȧ,q�
ܧ(q�
�$q�
� q�
�q�
,�q�
@�q�
T�q�
h�q�
|�q�
��q�
��q�
���p�
̨�p�
��p�
��p�
��p�%�q�%0�$q�%D�@q�%X�\q�%l�xq�%���q�%���q�%���q�%���q�%Щr�%� r�%��<r�%�Xr�% �tr�%4��r�%H��r�%\��r�%p��r�%��s�%��s�%��8s�%��Ts�%Ԫps�%��s�%���s�%��s�%$��s�%8��s�%L�t�%`�4t�%t�Pt�%��lt�%���t�%���t�%ī�t�%ث�t�%��t�%�u�%�0u�%(�Lu�%<�hu�%P��u�%d��u�%x��u�%���u�%���u�%��v�%Ȭ,v�%ܬHv�%�dv�%��v�%��v�%,��v�%@��v�%T��v�%h�w�%|�(w�%��Dw�%��`w�%��|w�%̭�w�%��w�%��w�%��w�%�x�%0�$x�%D�@x�%X�\x�%l�xx�-���x�-���x�-���x�-���x�-Юy�-� y�-��<y�-�Xy�- �ty�-4��y�-H��y�%\��y�-p��y�%��z�%��z�!(��8z�jF�A�A �M
ABHد|z�)��z�8��z�zF�B�D �A(�G��
(A ABBA zRx������(%"��fDt��{��F�B�B �B(�A0�A8�G@]8D0A(B BBB��/"��	а�{���{�DHi
GG�|�ZQ�D� �T|�DHi
GG@��|�� T�}�nE�l
Gb
Fx�L}�(��h}�:H^
J���}�bHh
HW
Iȱ�}�cHa
GW
I�,~�UlXL�p~�et]O ��~�i|`
DD@��ZHq
GD
L`�T�ZHr
FG
I����FE�`
KQ����KtL����tDV
FSز\��LtL����EE�b
Q �Ȁ�]E�v
ED
L0���DHi
GGP�4��d�@��VH H
A����������ZHr
FG
I��Ё�5dI̳���4Hk� ��5dI��H��LHp
HG4�x��}E�A�D N
AAFD
CAHT�����E�a
Jt�P��ZHr
FG
I���������������:H^
J8ش̃��F�A�A �C
FBEA
DBI � ��]E�v
ED
L8�\��THz
FGX����l����BHc
M��܄�BHc
M��������!HX(е4���E�A�D0r
AAB�����HI����:H^
J0���BHc
ML���IE�t
GD(l�H��eE�A�D p
CAJ�����	(�����ME�D�D l
DAB4ض����E�A�G `
AAAZ
FAG0����F�A�H �D0z
 AABG;���X����LHp
HGx�܇�v��H��
��D��
��@��
ȷ<��
ܷ8��
�4��
�0��
�,��
,�(��
@�$��
T� ��
h���
|���
����
����
����
̸��
���
���
����
����
0���
D���
X���
l���
����
����
��܇�
��؇�
йԇ�
�Ї�
��̇�
�ȇ�
 �ć�
4����
H����\����p���������
�����
�����
�����
Ժ���
����
�����
����
$����
8����
L����
`����
t����
��|��
��x��
��t��
Ļp��
ػl��
�h��
�d��
�`��
(�\��
<�X��
P�T��
d�P��
x�L��
��H��
��D��
��@��
ȼ<��
ܼ8���4��
�0��
�,��
,�(��
@�$��
T� ��
h���
|���
����
����
����
̽��
���
���
����
����
0���
D���
X���
l���
����
����
��܆�
��؆�
оԆ�
�І�
��̆�
�Ȇ�
 ��
4����
H����
\����
p����
�����
�����
�����
�����
Կ���
����
�����
����
$����
8����
L����
`����
t����
��|��
��x��
��t��
�p��
�l��
�h��
�d��
�`��
(�\��
<�X��
P�T��
d�P��
x�L��
��H��
��D��
��@��
�<��
�8��
�4��
�0��
�,��
,�(��
@�$��
T� ��
h���
|���
����
����
����
����
����
����
����
����
0���
D���
X���
l���
����
����
��܅�
��؅�
��ԅ�
��Ѕ�
��̅�
�ȅ�
 �ą�
4����
H����
\����
p����
�����
�����
�����
�����
�����
�����
�����
����
$����
8����
L����
`����
t����
��|��
��x��
��t��
��p��
��l��
��h��
�d��
�`��
(�\��
<�X��
P�T��
d�P��
x�L��
��H��
��D��
��@��
��<��
��8��
��4��
�0��
�,��
,�(��
@�$��
T� ��
h���
|���
����
����
����
����
����
����
����
����
0���
D���
X���
l���
����
����
��܄�
��؄�
��Ԅ�
��Є�
��̄�
�Ȅ�
 �Ą�
4����
H����
\����
p����
�����
�����
�����
�����
�����
�����
�����
����
$����
8����
L����
`����
t����
��|��
��x��
��t��
��p��
��l��
��h��
�d��
�`��
(�\��
<�X��
P�T��
d�P��
x�L��
��H��
��D��
��@��
��<��
��8��
��4��
�0��
�,��
,�(��
@�$��
T� ��
h���
|���
����
����
����
����
����
����
����
����
0���
D���
X���
l���
����
����
��܃�
��؃�
��ԃ�
��Ѓ�
��̃�
�ȃ�
 �ă�
4����
H����
\����
p����
�����
�����
�����
�����
�����
�����
�����
����
$����
8����
L����
`����
t����
��|��
��x��
��t��
��p��
��l��
��h��
�d��
�`��
(�\��
<�X��
P�T��
d�P��
x�L��
��H��
��D��
��@��
��<��
��8��
��4��
�0��
�,��
,�(��
@�$��
T� ��
h���
|���
����
����
����
����
����
����
����
����
0���
D���
X���
l���
����
����
��܂�
��؂�
��Ԃ�
��Ђ�
��̂�
�Ȃ�
 ��
4����
H����
\����
p����
�����
�����
�����
�����
�����
�����
 �����bE�i
Bd
D ���X(4�0��gE�A�D A
DAH0`�t��kE�A�D {
FADTAAH������F�B�B �B(�A0�A8�DP�
8A0A(B BBBA(��d��tF�A�A �P
ABEL����	F�B�B �B(�A0�A8�D��
8D0A(B BBBIT\�x���F�B�B �B(�A0�A8�H��Q
D�}
8A0A(B BBBF�� ����(��A�P��,��)��H������HT�_���8<�ؑ��F�B�A �F(�D0\
(A ABBK$x����<E�G�O ^AA$�����<E�G�O ^AA�����$�����yE�F�D gAA����T�ܓ�O�B�B �B(�A0�A8�DPU
8A0A(B BBBF�������p����E�L�����8�����xb�A�G �e
�G�B�HG�C�I�����gt�X
DR�\�D����B�B�B �B(�A0�D8�Gp�xL�G�B�Upe
8A0A(B BBBA�d����,t��A�JF�K�H �mAB���A����A�6AAY���A�sA�A�G 8��@B��B�N�H ��
ABHG
ABF 0�C��E�G ]
AFX����h��C�oD K
A^��D�lD0Q
K0��pD��F�G�A �G@u
 AABA���D�QH0C
A�� E�}HPo
A���E��B�B�A �A(�D0�
(D ABBB�
(G ABBHD
(I ABBAG
(A ABBHS
(I ABBA���F�(���F�(���F����F�YD0�
E��8I�E�O�<I�PH B
A0$�pI��B�D�D �D0s
 AABK0X�J�3F�D�A �D@�
 AABF �����
0��K�;F�D�A �D@�
 AABIh�c��� ���K�nE�G [
AA�HL�,E�[(�\L�<�XL�P�dL�d�pL�\E�G�D ���L�)E�W���L�`DW
E��M�_DQ
K��LM�(��XM��M�G�G u��P ����M��H0S
E4��N��H0S
EP�$O��<d��O��A�A�G p
FAH`
DDHTDA8��0P��E�G S
DEV
AIn
DFDG(���P��A�A�G0�
AAF�HR�� �$T�AAKH<�(T��B�E�B �B(�D0�A8�F�D
8A0A(B BBBD���U�tB�D�G ����U�_H F
A��0V�9H f
A��TV�AdQ$���V�dE�A�G QDA ��V�:4�X�gZ^4L�XX�E�D�D w
GALS
GAM���Y�f���Y�c��XZ�v���Z����@[��K f
ON
R ���[��A�M }
DA�,\�U ,�x]��E�G p
ACT��� d�0^�E�G t
AG������_�����_�%0��a��B�A�A �DP�
 AABAD���b�LF�B�B �A(�A0�D��
0A(A BBBE0@��f��F�A�A �Dp�
 AABAzRx�p���$��4����EAH8�� k��A�H�G@w
AAG
AAF8��l��F�B�I �D(�DP�
(A ABBAzRx�P����$N�(p�m�0F�A�D �WDE��m���m�\��`m�ZS]���m�`S] ���m��E�G e
AF��� ,��n�rE�L0Z
AA P�o��E�I0F
AK,t�po�KN
Ge
Kc
M_
I0��`p��F�F�D �G@l
 AABAl���$���p�BK h
Mo
AT
D ��q��da
KvR 8��r��da
K}K$\�hs�BK h
Mo
AT
D$���t�BK h
Mo
AT
D$���u�EK j
Kw
If
J ���v��da
K|L ���w��da
KvR�xx�>dN4��x�ZE�D LD0T��x��B�D�D �D0�
 AABH ��|z��HM
KI
WD ���z��HM
KI
WD$��T{��HM
KD
LY ��|��E�G0�
AC,��}��K w
Fh
HN
J�
O L���RE�GP�
AHHp�ā�sa�D �AI�P �T
F�FO
G�JD
A�KV������E,��4���H X
Hb
F~
BH
P,����lH X
H�
BA
OH
P,0�ԇ�lH X
H�
BA
OH
P`���bt�p��E������D0\
HzRx�0���D��5H��p���E�D�G x
GAHD
GALS
AAKgGA00���JH 
I`
Hu
K�
PR
NPd���*A��
HY
�OH
HP
�PA
�OT
�Ld
�LF
AF �����E�DPx
AF����`��t��8A�M B
A�OI
I�N0
AGr
D�J~
D�EV
A�E`
A�I4T�P��A�D k
IGm
ABD
EG��O���$�����Й�$��̙�RK n
GI
Wo
I����AH s
A�8��6l �d��eF�D�D �D0�
 AABEm
 DAFH�
 AABHT
 LABE_
 AABM��d������������#L�����F�E�D �D(�P`�
(F ABBA^
(C ABBAX�ȡ�>F�B�B �D(�C0�G��
0A(A BBBA��H�N�E�I�Hx�����F�E�B �E(�A0�D8�Gp�
8A0A(B BBBK��`��.��|��3�����@H@�
A�̪��A�F
YL(�L��TF�A�C �R
ABA�
AEMT
ABIYDB8x�\���E�G S
DEV
AIV
AI[D����"GS�������7EAO0�����F�I�C �D@o
 AABG����D����HU0w��p�t��/H\
D`w��0��t��DE�D�G _
AAGIAA�[� ��|��LE�P
KX
H$����?DO
ER
FI
A 4����PE�D }
DAX���-K�XE�t���#HR
A����7HY
G ��8��OE�D }
CA��d��-K�WF���x��PT]
D�����H@�
D$�0���H@c
E@����%T�б�%8h����F�E�A �D(�D0q
(D ABBB�����+H �
E�����@L�����\A�C�O @
FAFZ
DDN�
ADIjDAP$��E�F�J@�
AAA\
EAN
EAFl
FAEx���E�L<����YD y
Kf
JI
O�
I[
Mk
MV
H��0��:��\��:|������B�D�E �B(�D0�I8�DPv
8D0A(B BBBGy
8G0A(B BBBO
8A0A(B BBBJ�|�ؼ�_F�B�E �E(�D0�A8�D`�
8A0A(B BBBI@
8A0A(B BBBFl
8A0A(B BBBJq
8I0A(B BBBE{
8J0A(B BBBE$0����*E�D�I IIA\X����F�B�D �C(�D@N
(D ABBFt
(I ABBNP
(D ABBG(��<��0F�D�F �VAD ��@��LE�P
KX
HL�l��[A�K�G C
FACq
ADJw
GAIiDADX�|��]E�F�J@�
AAI`
EAJ
FAE�����E�L(������E�M \
FLX
FJ$�����*E�D�I IIA(���0F�D�F �VAD <���LE�P
KX
H`�4��t�0���H`�
H����*��0��5$��\��UE�W
DR
NI
G�����	`������F�A�D �G0d
 ADBKD
 AABH�
 AABJ-
 AABG X�����n@
BD
LI|�X��	H��T���E�D�G {
GAMD
AAJD
GALDGA����;����	0�����F�D�D �D@f
 AABA8�,���L����RE�_
TIl���GE�_
LI$��8��4E�G�D WGA��P�������� ����VE�h
CL
D8����0F�B�A �A(�D`
(A ABBG\��ܾ�
P����`d����	x����6����	����dH��p��sB�B�B �B(�D0�A8�G`8
8A0A(B BBBJ8����SF�E�D �C(�G@�
(A ABBBL�ܾ�P����d����� ~
D4������E�d
GU
KO
AD
LT
E8��l��kF�N�A �A(�DP
(A ABBD����T����+Hb ���+Hb8���]L�h��d�p��x�|������������
�����
�|��
�x���t���p���|��
,�x��@����T����h�|��
|�x����t��B$�����lE�D�D YDA(�����E�A�D0@
AAD��L�� HP�T��VH H
A ,����PE�L u
DAP����VH H
Al���AQ_��@����L��	��H��H��T���B�E�E �E(�D0�D8�DPl
8D0A(B BBBJ����OD s
IN8,����~F�E�B �D(�D0�^(D BBB8h����F�B�E �A(�E0�~(D BBB8��p���F�E�B �D(�D0�f(D BBB��������AAD����$����	8����>D W
E],X�����F�A�A �n
ABG�����	�����LE�T qA(�����lE�Q�G0t
DAJ(�,��lE�Q�G0t
DAJ�p��	(�l��LE�T qA(H����dE�Q�G0t
AAEt����QE�T vA�� ��,E�[��4��,E�[�H��MI_����a|b�����Qy�$���J$����NJ^<����P����3E�T
GKp���)E�c8�����b�E�A �D(�G0g
(D ABBE4����yB�J�A �K(�I0O(C ABBL����B�B�B �B(�A0�C8�J�w
8A0A(B BBBI,P4��KA�C
D��E�E�I��
I�T��)AAP�h��$AAD�|��
�x��'A�D�G  ����`E�T q
AAH���F�B�B �B(�A0�A8�Dp
8A0A(B BBBEH\X�dF�B�B �B(�A0�A8�D`�
8A0A(B BBBC�|�aE�G
D���AE�R
I`���E�L�|Tic[$`�|Tic[D���E�a
J4`T��E�A�G x
KDLt
DAG���q_��P���B�A�A �D0V
 AABFh
 FABG�
 AABEH\��F�B�B �B(�A0�A8�Dp�
8A0A(B BBBBd�x��!��Ik V�P�BO�b
GI(����E�A�D0K
AAI���C����&AAD4��&AAD,P��*F�A�A �i
ABD$���8E�G�D eAA8����B�B�D �A(�G@V
(A ABBD8�`��B�E�G �D(�F0�R
(A BBBG8 $�fB�E�D �G(�G@_
(J ABBI,\X�LB�E�D �D(�D0T8G@\�x�B�E�A �C(�G@
(D ABBEt
(A ABBFf
(A ABBL�(�(4�dE�A�G y
HAI,x�x@t��F�B�B �B(�G0�D8�D`t
8A0A(B BBBG�
8G0A(B BBBMP
8D0A(B BBBK0����A�A�G �
AAHDGA0�t�,F�A�D �F0D
 AABG$p�E�Q
A@@t��F�B�B �D(�A0�DP�
0A(A BBBAL� ��F�B�B �A(�C0�\
(D BBBDr
(D BBBA8����F�E�D �A(�GP	
(A ABBJ(�cE�D�M0B
DAA4<H��E�J�D 
DAI]
DAN8t��eF�A�A ��
ABFd
ABI,���4b�D�D �vCBK���$���VE�D�D CDA	, �9	X �0	T �%EAKL	h �pA�]
A(l	� �GF�D�F �sAB,�	� ��F�A�A �\
ABE�	<!�FE�y(�	p!��E�D S
GMY
DA
�!�Pt�T�,
"�Ut�Y�4H
\"�uF�B�A �A(�G0Z(D ABB�
�"��
�"�	\�
�"�k^�E�I �G(�J0\
(A ABBA@����X0����H����p0����L�#��F�G�B �A(�A0��
(D BBBIY
(D BBBEX%�l%�UH�^
L\�\%�[g�E�F �G(�J0b
(A ABBEp����X0����H����p0����L�\&��F�G�B �A(�A0��
(D BBBGT
(A EBBJ8�'�zTxdI4X�'��F�A�A ��
ABC]AB��(�X��(�F�B�A �A(�G0�
(D ABBF]
(D ABBJu(D ABB
T)�HP�_I�K�  
�)�yE�T R
ADD
�)�X
�)� l
�)��A�F0l
AD�
T+�BSU�
�+��
�+��
�+�?H b
FN �
�+�w]�^�u�F\,��E�A�D0�
AAAz
AACD
EAFI
AAE�
DAKPt@/��E�A�D0Q
AAC~
AAAV
AAGt
DAG�|2�2E�O
DN��2� ��2�fE�G o
AD �2�$4�2��K�O
Fh�H�\H3�TpD3�8F�B�B �B(�A0�A8�G`hKpWhA`D
8A0A(B BBBKH�,5�F�B�B �B(�A0�A8�D@u
8H0A(B BBBHE�(E�<E�)H\HT0E��B�B�I �E(�D0�E8�G@h
8D0A(B BBBAL��E��B�E�B �B(�A0�A8�K�Z
8A0A(B BBBDP�TG�}B�B�B �B(�A0�A8�G� I� J
8A0A(B BBBB$zRx�� ������,�¾�$�DI�jD{
AH
HL
D(��I�;B�A�D �lAB ��I��B�H�D �D0�J�}eLtJ��B�E�B �B(�A0�A8�G��
8A0A(B BBBA(`�e�=E�D�G L
LAG8�f�]F�E�D �D(�G0Z
(J ABBM�,f���L��g��F�B�B �B(�D0�A8�J�O
8A0A(B BBBD��1���D@{�	X<{�lH{�HP�P{����{���|�} �4}�nF�V
DCE���}�~0��}��B�A�A �DP�
 AABA,,h~��F�A�C �{
ABH(\�~�wc�A�D {DAH���,�Ys�e�p�GA�y
FF4����B�D�D �]
ABFXAB���(E�b(��TB�P�D �zAB$D@���A�N�I }AA l���zA�f
Id
D���nK]�h��>XV<����zJ�A�D MA�A�R ��x
AAFHЃ�7B�E�A �A(�J���u�M�A�W
(A ABBH zRx������(��������5����mq�{���mq�{�`���i�w�����I�{h�� t��J4����HL��k\���p���Z��
���=$���HA�N�D oDA�@��6Di
CD�d���B�D�E �T
FBAA
FBAA
FBA8���A�W(T����B�D�A �a
ABE�$��DOl�滾����XN�dF�P�\���n�D�D �j���` ���K�A�B�r ���D
ABI8����F�B�D �A(�G0g
(D ABBDXL��A�S���4�<��jB�J�D �n
ABGA
CBB,�t���B�D�L �_
CBJ(���CB�D�D �uAB4��sA�D�G Y
AAIg
GHJ$T`��eA�D�G SDA |����A�G0F
AA(����A�A�D0Q
AAG�؎�BA�[
Ad���!A�_��TA�`
G$`��RDl
HY4D����A�D�G N
DAAe
DAF|��0H�4���B�G�E �A(�F0�X
(D BBBIU(D BBB����KA�h
G4����rB�E�I �D(�D0P(D ABBL0���B�B�B �B(�D0�D8�G�R
8A0A(B BBBEH�����K�A�D �@
ABE�
ABGp���D �������4����ZB�E�D �D(�G0}(A ABB,����B�E�D �Y
ABIpH,��iB�B�D �D(�D0G
(A ABBCI
(A ABBIu
(A ABBEV
(D ABBI(�(��pA�A�G Q
DAA�l��80����{A�I�L V
AABHAA80��rG�N�K �D(�L0f(A DBBA����Hl(��B�B�E �E(�D0�A8�D`�
8A0A(B BBBA<����B�E�E �A(�D0�g
(A BBBA8�ܙ�xB�J�D �D(�G0~
(A ABBA`4 ���B�E�E �E(�A0�D8�DPaXH`kXAPT
8D0A(B BBBHDXB`NXAPL�|��B�E�D �A(�D0N
(A ABBDK
(A ABBG�<��KA�I8 p���B�E�E �D(�I0�h(D BBBH@ Ĝ�9B�E�E �B(�D0�A8�Dp�
8A0A(B BBBAH� ����B�J�B �H(�I0�D8�DP 
8D0A(B BBBD(� ���\A�G�G0n
AAAh!0��[�B�B �B(�D0�D8�J@i
8D0A(B BBBGY
8C0A(B BBBKh������Hp!ԟ��B�E�B �E(�A0�F8�G`�
8A0A(B BBBJD�!(��bB�B�A �A(�D@�
(A ABBBtHPPLHF@H"P���B�E�B �B(�A0�A8�D`�
8D0A(B BBBK��O���Hd"����B�E�E �B(�A0�A8�DP�
8A0A(B BBBJ@�"Ħ��B�D�D �G0�
 AABHW
 AABA8�"����B�N�I �A(�C0�w(D PBB40#��YM�A�J ]
AAIDK�A�0h#,��UA�D�L g
AAFDKAL�#X���B�G�B �D(�A0�M
(A BBBDA
(D GIBI4�#���yB�A�A �L
ABE]AB5����88$ܨ�rB�E�D �D(�D0\
(D ABBH8t$ ��mB�B�E �F(�A0�Q(A BBB8�$T��B�B�D �A(�G0|
(A ABBF �$���|E�G0i
AA(%��6B�L�I �[AB<%��!J�P�`X%���B�B�B �E(�D0�D8�GPL
8D0A(B BBBEL
8J0A(B BBBI,�%����E�C
M�����[
H�%8��# &T���A�G0q
AF($&в�A�D�GP�
AAHP&���00d&д�\A�M�N X
AAJOGAH�&���$B�D�D �](I0D8H@P D
ABMq
ABD0�&��vA�A�D0V
AABSAA4',���A�A�D ]
AAK}
FAD8P'����B�E�D �D(�D0C
(A ABBDD�'���O�D�D �T
ABB]
�A�B�HH�K�B�(�'����B�D�A �e
ABI((���B�D�D �k
DBEl,(h��B�B�D �D(�D0T
(D ABBCV
(A ABBDD
(A ABBFT(G DBB<�(��B�B�B �A(�A0�
(A BBBB�(��{L�(T���B�A�D �h
CBLU
ABHm
ABHRAB(@)ĺ�
A�A�G0~
DAD`l)����K�B�D �D(�D0�
(A ABBH�����H0����O(G� A�B�B�H�)���B�E�E �E(�D0�G8�G@�
8D0A(B BBBC8*����F�J�E �D(�A0�n(D BBBX*��#E�V4t*��qF�J�D �A(�N0r(R ABB�*H��;�*t��+�*���+�*����*���!+ľ�+H$+��BB�B�B �B(�D0�C8�Gp�
8A0A(B BBBJ0p+���B�D�A �G@X
 AABF,�+@���E�D�J��
AAEP�+����N�B�B �E(�A0�D8�G@�
8A0A(B BBBC`������(,|��8<,x��	A�l
AW
KW
ID
AK
EC$x,L��<A�K�I bCAD�,d��BB�D�D ��
ABHN
CDKN
CDEP�,l���F�D�D �|
CBA\
ABAF
ADEY
DBE0<-��\A�D�G y
DAFDFAp-D���D E
G��-����B�E�B �D(�H0�D
(A EBBEo
(D BBBG�
(D BBBGW
(D BBBG\
(D BBBB<. ���B�A�A �G0V
 AABKN AAB`T.p���B�B�E �E(�D0�D8�GPr
8A0A(B BBBG�
8D0A(B BBBFD�.����B�E�E �E(�D0�D8�DP�8A0A(B BBBX/$��KK�B�E �A(�D0�c
�(G� G�B�B�L�
(A BBBG`�����H\/��>B�B�B �B(�A0�A8�G@�
8D0A(B BBBG8�/��[B�B�J �D(�J0�s(A BBBD�/0���B�E�E �B(�A0�J8�JPk8A0A(B BBB8,0���aB�E�E �D(�D0�E(A BBB0h0����F�A�D �G0H
 AABB0�0H��CA�D�G M
AAEUHA4�0d��ZF�D�D �d
CBITADH1���R�E�E �E(�I0�J8�J@�
8C0A(B BBBET1`��1HN Zp1���"8�1����B�B�D �C(�G0w
(D ABBF�1���;�1 ���1��.�18��9E�o2\��?,2���@2���T2����E��p2T��"�2p��!E�[�2����2���(E�b�2����2����2���#03���1F�D�D �G��
 AABG`@3����B�B�B �E(�I0�A8�L��
8A0A(B BBBA��D�D�D�R����8�3���B�D�C �F
ABFd(U0O(A 8�3����B�B�A �C(�G0F
(A ABBE804���B�D�D ��
ABDd(W0O(A \Eq���
8�4D��3B�B�A �A(�G0v
(A ABBG`++���$�44��oA�m
Bw
AF8�4|��RB�B�G �C(�G0v
(A ABBG845���7B�E�A �C(�G0u
(D ABBHp5����A�q
NH�5��6B�B�E �B(�A0�A8�Gp
8A0A(B BBBGT�5��B�B�D �C(�G0l
(A ABBDa
(A ABBAH8X@H8I0006���A�D�G g(K0T(J CAA�"����Lx6,��jB�E�E �E(�A0�A8�G�
8A0A(B BBBK`�6L��B�E�B �B(�D0�C8�GP|
8A0A(B BBBA�
8I0F(B BBBL0,7��vA�L�G Z
AAHyCA8`7D��B�E�D �A(�G@G
(A ABBHH�7�h	B�E�B �E(�A0�D8�FpW
8A0A(B BBBFH�7,��B�E�D �I(�D0y
(D ABBF[(D ABB848p�WB�A�A ��
ABH�
ABD$p8��qA�F�G `AA �8��PA�c
LA
G4�8��B�B�D �A(�G0�(D ABB0�8���A�A�G W
AAFlIH((9�E�D�G0�
AAE<T9��F�B�B �A(�D0�0
(D BBBG$�9���A�A�G �HA(�98�ZB�A�D �v
ABHL�9l��B�B�B �D(�D0�i
(A BBBBx
(C IBBH,8:��	B�A�D �c
ABC4h:���DA
KK
EU
KU
KU
KU0�:d�oA�D�G B
KFIDAA��:��sF�B�B �D(�D0�h
(L GBBO�
(A BBBK^
(A BBBK^
(A BBBKk
(A BBBF�
(A BBBDL
(A BBBE�;p�	8�;l�lB�E�D �D(�K0|
(A ABBD$�;��8A�D�G eAAH�;��2B�B�B �L(�D0�D8�DP}
8A0A(B BBBKHH<�#�B�B�B �B(�D0�D8�Dp�
8A0A(B BBBC8�<p%�X=B�S�G �D(�F0�
(M ABBJ4�<�b�tB�D�K �D(�J0~(M ABBH=�b��B�B�D �A(�F0^
(A ABBEN
(A ABBLHT=0c�lB�E�B �J(�A0�A8�G`I
8D0A(B BBBF8�=Te�|B�E�B �A(�D0�V
(A BBBE`�=�e��F�B�E �A(�D0�c
(A BBBDc
(A BBBFA
(D BBBEL@>g�+B�B�B �B(�A0�A8�D��
8A0A(B BBBD��>�i��]F�B�B �B(�A0�A8�G� L�-\
8A0A(B BBBI�-S�-g�-B�-��-[�-F�-A�-9.�-E�-J�-J�-Z�-]�-E�-H�-J�-Z�-]�-E�-H�-J�-Z�-]�-E�-H�-J�-Z�-�#�-\�-X�-B�-I�-[�-W�-A�-I�-\�-W�-A�-��-^�-W�-A�-I�-]�-N�-B�-��-[�-X�-B�-I�-^�-X�-A�-I�-]�-W�-A�-I�-^�-W�-A�-I�-]�-W�-A�-I�-]�-Q�-B�-R�-_�-X�-B�-��-E�-T�-A�-�-a�-o�-A�-S�-`�-n�-A�-q�-G�-d�-A�-��-]�-N�-B�-R�-[�-X�-B�-I�-^�-X�-A�-Z�-d�-W�-A�-I�-]�-W�-A�-I�-^�-W�-A�-I�-]�-N�-B�-R�-]�-[�-B�-I�-_�-X�-A�--�-E�-J�-J�-Z�-��-E�-H�-J�-Z�-]�-E�-H�-J�-Z�-]�-E�-H�-J�-Z�-��-A�-Y�-B�-�-\�-X�-A�-I�-[�-W�-A�-I�-\�-W�-A�-��-^�-W�-A�-f�-D�-W�-A�-f�-D�-W�-A�-��-`�-N�-B�-|�-`�-W�-A�-!�-A�-N�-B�-s�-A�-X�-B�-i�-A�-X�-A�-f�-D�-W�-A�-h�-A�-W�-A�-A�-E�-Y�-A�-F�-b�-n�-A�-I�-a�-e�-B�-R�-_�-X�-B�-$zRx��-������,Z���
d�B`��x	F�B�E �B(�A0�C8�D`�
8F0A(B BBBKK
8C0A(B BBBACx��90C���
DC���XC���IlC���	�C���uH�CP��BB�E�E �I(�D0�A8�G`�
8D0A(B BBBJH�CT��2B�B�E �E(�H0�D8�GP�
8D0A(B BBBF8,DH���B�B�A �A(�D0�
(A ABBFHhD����B�H�B �I(�G0�A8�G`
8D0A(B BBBD|�D`��mB�B�E �E(�A0�D8�D`�
8A0A(B BBBI�
8A0A(B BBBHD
8F0A(B BBBE4EP��	HEL��E�MdEP��#E�Y(�Ed��E�A�G0�
AAI(�EX��LF�D�I �d
ABF�E|���Ex��Ft��Fp��(Fl��<Fx��PF���(dF����A�F�G o
AAA�FT��:`�F���+F�B�E �E(�D0�A8�DPe
8A0A(B BBBF
8C0A(B BBBE`GL��+F�B�E �E(�D0�A8�DPe
8A0A(B BBBF
8C0A(B BBBEHlG��(F�B�B �E(�D0�A8�Gp�
8A0A(B BBBH4�G����E�I�G0h
AAAR
AAD@�G����F�D�D �G0w
 AABHR
 AABBH4HP��@F�B�E �B(�D0�D8�Gp�
8A0A(B BBBKX�HD��(F�B�A �D(�G0�
(D ABBKM
(D ABBJl(C DBB(�H��LE�I�D a
DAHI<��	I8��	`0I4���F�B�B �B(�A0�A8�D`Z
8A0A(B BBBJ�
8F0A(B BBBE�Ip��H�Il��F�B�B �E(�A0�A8�G��
8A0A(B BBBBL�I@��NF�B�B �B(�A0�A8�D�
8A0A(B BBBDHDJ@���F�D�B �B(�A0�A8�D��
8C0A(B BBBGH�J���kF�D�B �B(�A0�D8�Dp�
8A0A(B BBBH�J���c�J4��cK���cK���c,KH��P@K���E�Q\K���1pK���2�K���?�K���K��k�Kd��	�K`����K���L���L���
(L���<L��� PL���uE�G b
AAtL@��	0�L<���A�P�D0Y
AAH]AA$�L���[A�S e
AFYA�L��)�L���&M��HS$M ��HT <M(��lA�D0T
AF`Mt���H0c
E|M��)H\�M��%HXL�M��B�J�L �A(�A0��
(D BBBHL
(D BBBB�M��7Hn8N���F�H�A ��
ABIO
ABFPN���E�LlN���E�Q�N���dE�{
PK�N���N��H�N��FB�E�B �E(�A0�A8�DP�
8A0A(B BBBCO���H@i
G88O|���F�Q�A �A(�D0N
(A ABBOtO��E�Q�O��Ja�_
�HA�O���O��E�M�O��!,�O ���F�A�D �X
DBG($P���E�A�G l
DAB�<����9dP ��'A�D�G (�P0��pB�G�D �a
ABGH�Pt���B�E�E �E(�A0�D8�G`�
8A0A(B BBBAH�P���`F�B�B �B(�A0�A8�Gp
8A0A(B BBBALHQ��B�E�E �B(�A0�A8�G�u
8A0A(B BBBJD�Q��wB�E�D �D(�G@bHJPTHA@T
(A ABBAD�Q��F�I�A �D(�D@kHEPTHA@\
(A ABBA0(R���A�b
EW
I\
D
QT,\Rh�-M
DY
GX
H|N`������RT�eH R
F�R���8�R$�F�I�A �D(�D0�
(D ABBB8Sh��F�I�A �D(�D0�
(D ABBEHHS���B�H�E �B(�A0�A8�D`�
8A0A(B BBBG<�S@	�UF�K�A �DPfXE`PXFP�
 AABA �S`
�FE�G0~
AE\�M���
Tx���Q$T+���
(8TL��E�A�G@{
AAF(����
0xT�
��F�A�D �GP�
 AABKܒ����
�T$��T0�%HV�TH�UT�(H[Ul�	,Uh��E�{8HU���F�B�A �A(�F0M
(A ABBA�U@�*H]�UX�#HV8�Up��F�B�D �A(�DP�
(A ABBE�U�8V��F�E�D �C(�GPq
(A ABBA@@Vt�F�B�E �D(�C0�DP�
0A(A BBBC�VP� �VL�oE�D K
AK�V��HI �V���E�DP�
AA�V\��HP|
D W��E�G@[
AA8Wl�	@LWh�2F�B�E �A(�A0�D@�
0A(A BBBD<�Wd��E�D�D v
DAHE
ADFDAA�W��TE�m
NKL�W�xN�B�B �A(�D0�a
(A EBBF~
(D BBBH\@XD��B�D�A �F0m
 KGBJR
 AABB\
 GABJt
 DABE�X��t�X��!F�B�B �B(�A0�A8�D���B�U�A�m�H�Q�A�X
8A0A(B BBBJ}
�M�FX�A|��@Y��TY���E�L
OtY �(�Y,�;F�F�F �eAB8�Y@��J�E�D �D(�D0�
(D ABBG�Y�!Z �%HVHZ8��B�B�B �B(�D0�A8�Dp�
8A0A(B BBBH(hZ��dE�D�I0J
AAA0�Z��yF�G�F �G0U
 AABA$�Z, �.E�D�M IIA�Z4 �fA�Q
F8[� �/F�B�A �G(�G0�
(A ABBDH[|"��E�D�G Th[�"��B�B�E �B(�A0�A8�G`bhHpThA`X
8A0A(B BBBK�[D$��[@$��[<$� �[8$�ME�G r
AA  \d$�JE�G o
AAPD\�$��F�E�E �E(�D0�A8�G@LHLPO8A0A(B BBBA@da�x��4�\�$�AF�E�D �D(�F0](A ABB8�\�$�RF�E�D �D(�F0R
(L ABBL( ]%�-F�D�D �TAEL]%�(`]%�:F�D�D �Y
ABF�](%�OH A
A�]\%�~H U
C�]�%���]L&�!HX�]d&�%HX^|&�l^�&�HK4^�&�BH^'�=lI`^D'�"HX x^\'��A�G@�
AD�^)�%HXL�^ )��
F�L�B �B(�A0�A8�D�i
8D0A(B BBBF@_�3�cF�B�E �D(�F0�DP^
0A(A BBBGHH_�4�cF�B�B �B(�A0�A8�D`/
8D0A(B BBBB<�_8��E�A�G `
DAFV
AAH}HD�_�8��_�8�" �_�8�yA�G0j
AA `9�E�O$<`9�<E�A�J _GA0d` 9��B�A�D �I@}
 AABA�`�9�E�O$�`�9�<E�A�J _GA0�`�9��B�D�A �G@�
 AABA8a:��F�E�D �D(�D@\
(A ABBG$La�:�*E�D�I IIALta�:��F�F�B �D(�A0�v
(D EBBJn
(J BBBE�Y�s��,�a\;��	F�O�A �R
AXO b�D��L�1
S,bhF�
@bdF�	Tb`F�	hb\F�
|bXF��bdF�E�X�bhF�'HS�b�F�2Hi�b�F�.He�b�F�(H\c�F�6Hm$cG�2Hi<c(G�=H]
KG\cHG�+Hbtc`G�"HT�cxG�!HS�c�G��{r
Cn<�c H�B�B�B �A(�A0��
(A BBBH d�J�rE�~
ED
L(dLK�DTX
DSHd|K�HI@`d�K��B�B�B �A(�A0�D�K
0A(A BBBA@�d M��B�B�B �A(�A0�D�K
0A(A BBBA�d�N�'H\e�N�'H\(e�N�pA�D�G@\
AAADe0O��E��`e�O�&0te�O��F�D�A �D@�
 AABD�e�P�8E�r�e�P�3\Q�e�P��e�P�f�P�2A�]
BM$fQ�PEAD@f4Q�*DW
A0\fHQ��B�D�D �F@�
 AABD�fR�UD0K
A�fXR�HI�f`R�&H[�fxR�HI�f�R�HIg�R�HI$$g�R�kE�G
I����
K Lg�S�qE�D A
AEpg4T�HI�g<T�6J�S�0�g`T��E�H�D k
DAGzDA�g�T��g�T�	8h�T��F�D�A �T
FBIQ
DBI<h(U�AAKXh,U�AAK4th0U�#A�D d
AFu
FEd
FA<�h(V��B�B�E �A(�D0�A
(A BBBJ(�h�V�2B�I�A �^EB i�V�QF�P�G s��H<i8W��B�I�E �B(�A0�C8�F`H
8C0A(B BBBA�i|X�AAD�i�X�$HV
A(�i�X�NB�F�I �R
ABJH�i�X�YB�E�E �B(�D0�D8�F@�
8C0A(B BBBB88j�Y��B�G�I �C(�D0V
(C ABBI(tj0Z��A�D�G�Q
AAA8�j�Z�`B�E�D �C(�D0q
(D ABBA8�j�Z��F�B�A �A(�D@�
(A ABBEk<[�bG�j
G4k�[�#HSLk�[� IQ
A4hk�[��E�A�D C
DAF}
MAE�k4\�AK�k
A0�kh\��F�A�A �D0s
 AABE�k�\�bG�j
Gl(]�#HS$l@]�AK�k
A@lt]�"HO
F\l�]�$HQ
Fxl�]�AAD�l�]�
�l�]�nH�l�]�uB�E�E �B(�F0�D8�MP�
8A0A(B BBBDm,`�
m(`�
,0m$`�xA�A�G�
AAF `mtc��E�G0�
CA,�m�c�BE�C
D��L����
GL/�g��	8�m�e��B�D�A �J
ABD\
ABI(n�f�]F�H�A �JAB(0n�f�nE�A�J0I
AAE \n8g�fE�G D
AG(�n�g��E�A�D0Y
AAK �n�g��E�D \
AJ �nTh��E�D \
AJ(�n�h��E�A�D0d
AAH@ o$i��F�B�B �A(�A0�D@�
0A(A BBBH do�i�fE�G D
AG(�o,j�nE�A�J0I
AAE �opj��E�D \
AJ �o�j��E�D \
AJ(�oHk��E�A�D0d
AAH8(p�k��L�A�A �I
DBCB
MBEdp@l�/H[
E(�pTl��E�G�D@h
AAF@�p�l��B�J�I ��
ABAF
AFSAABL�pdm��B�E�D �D(�G0�
(G ABBHX
(G ABBL @q�n��E�D c
AC0dqo��F�A�A �D0�
 AABH8�q�o�F�B�A �A(�D@�
(A ABBG�qpp�<H^
J(�q�p�cE�G�D j
FAG(r�p�L�A�D �{
FBD(Hr,q�E�D�G C
FAFtr�q�4K�g
F@�r�t��F�B�B �A(�A0�D@�
0A(A BBBH(�r\u��E�K�D K
KAE$sv�dD �
FF
JI
G(,sXw�SE�K�D i
IAI8Xs�x��F�L�A �A(�G0F
(D ABBF$�sy�D �
EH
HI
G �sz��E�G0p
AC(�s�z��E�A�D@o
AAEt8{�jH[
M8(t�{��F�H�A ��
ABIT
HEO(dt }��E�A�Dp�
AAK(�t����E�A�G��
AAG�t8��+Hb�tP��	�tL��	8�tH��fF�E�I �J(�D0o
(D ABBF(8u|��<F�D�C �kABdu���/Hf(|u����E�C�F`�
AAD4�u���F�A�A �U
ABHo
ABFH�ut���F�B�F �A(�F0U
(C ABBFO(C ABB(,v���YE�A�F0E
AAA8Xv���F�B�G �A(�D@�
(A ABBA0�vp���B�A�A �F0Y
 AABI�v<��/E�W
LF�vL��	0�vH��jE�A�Q v
DAFLDA0w���0HQ
GIPw���1E�klw���{H0g
A�w��L�w��VF�B�B �B(�A0�A8�D��
8A0A(B BBBF(�w(��YF�D�D �k
CBBx\��tE�nP4x���B�B�B �B(�A0�A8�G� I�!�
8A0A(B BBBA,�x����A�C
B�L���H�
HL�x,��:F�B�B �B(�A0�A8�G�7
8A0A(B BBBAHy��PF�B�B �B(�A0�A8�D`.
8A0A(B BBBAHTy ���F�B�L �J(�F0�C8�D@v
8D0A(B BBBA8�yd���F�M�A �A(�D�v
(A ABBA8�y����F�B�D �A(�F`�
(A ABBJ(z���sE�D�D@^
AAADz��KH0}
A `z$��dE�Q v
AAL�zp���
F�B�B �B(�A0�A8�G��
8A0A(B BBBAx��Z��\�z���DB�J�A �A(�G0o
(A ABBFQ
(C ABBG[
(A CBBE(H{����F�M�A �A(�G�t{`��EAD4�{T��?F�E�D �D(�D0\(F ABB�{\��	L�{X��=F�B�B �B(�A0�A8�G�
8A0A(B BBBA,|H��%HR
F4H|\��*E�A�D m
FAB�
FAA@�|T��DE�A�D l
AAHt
AAJq
AAE�|`��tH t
D�|ľ�{E�G0�|(��MEAD}\��EAD4}P���E�D0P}��EADl}��>H p
AL�}���B�B�B �E(�D0�A8�D�c
8A0A(B BBBG,�}���TE�G0Y8B@F8A0_
AA4~���NF�A�A �_(S0L(A CAB@~��HN$X~��0E�F�L IJA�~��$HTL�~,��F�G�B �A(�A0��
(D BBBET
(D BBBA<�~����F�B�A �A(�D�
(A ABBF<(����F�B�A �A(�D�
(A ABBA8h���E�Q�D �
(K0L(A 2
MAL�����H��`���l���x�� E�Z�|���x��0�t��
D�p��X�l��#SKp����#TK���������������Ā���؀�T��
������������(����<����P����1d����-E�c,�����iI�D�D �PABD�����4��HKȁ<��HN�D��	@�@���F�B�B �A(�A0�KPe
0A(A BBBA8����EAM0T����B�A�D �G0�
 AABI��|��WIH�����5B�B�B �B(�A0�A8�G�x
8A0A(B BBBEd$�R��8�����F�E�D �D(�D@
(A ABBDL<�(��{F�D�A �G0n
 AABDI
 FABFV AAB$��X��LE�E�J nDA8������B�B�A �A(�G0l
(D ABBA�z�Q��$����@E�E�J bDA$,���7E�H�J ZDAT� ��E�QHp�$��F�E�L �E(�D0�L8�D`�
8A0A(B BBBG@?Q��
Є��� E�Z(�����E�A�D`�
AAIzRx�`�� �P��(H�����E�A�D0{
DAF t����yE�G |
AG ��L���E�D0p
AA�����#HS(ԅ���kF�A�A �V
FBJ�$��I8�`���B�E�E �A(�J0�
(C ABBEP����5E�S
HTp���n��`���hdL������F�B�G �A(�D0J
(D ABBID
(D ABBC�����E�~����CE�f
EN(�,���DPi
CD����<E�\
GS(d�����A�D�G 
AAC(��T��[B�G�E �IAB�����
HЇ���oB�B�B �F(�G0�F8�D��
8A0A(B BBBHH��M��0����
D����8TN
A8`�����B�E�A �A(�K`a
(A ABBE$��(��CE�A�D vAA0ĈP��yF�D�G NCAE��C �������mTX8�����F�D�A �n
FHIY
GBF(L�����E�D�Q@w
AAEx�,��HQ0��4���B�A�D �D0^
 AABC�
8L��؉���
4����lB�B�A �A(�D0C(R DBB4$����O�A�G �
CAFL
CAH\����Hp����eB�E�E �E(�E0�C8�Gpt
8A0A(B BBBB$�����_E�A�G JFAH�����B�E�D �A(�D0w
(A ABBC~(A ABBԁ�J��LD�`��F�B�B �D(�A0�|
(A BBBFl
(A BBBE4��0���F�O�A �A(�L0U(D ABB4̋����A�D�G f
AADL
AAJ@����B�B�B �A(�A0�Dpx
0A(A BBBDp��I��\�8��E�T0x�<��GE�D�G T
FAETAA��X��*E�T
GǏh���DPV
F(����B�D�G�R
ABF8����mB�E�E �H(�D0�M(A BBB4P���pB�B�D �D(�K0K(D ABB(����4B�D�E �eAB��0��ȍ<��L܍8���F�B�B �B(�A0�A8�D��
8A0A(B BBBAX��G��H@����)B�B�E �E(�A0�A8�D��
8A0A(B BBBA�����
�����
�����
Ȏ���HU�����E�c
A���%0�0���F�A�A �D0Z
 AABF8H����QJ�E�I �D(�G0a(A ABBF���������<Hsp�F��
����3E�m̏���,����M�A�A �O
ABG|�d���F�B�B �B(�E0�D8�J@H
8A0A(B BBBGu
8A0A(B BBBI
8A0A(B BBBL\��E����P�I$����ZE�K�G vGA���(H_�QE�����(H_�3E��@8���)F�A�D �V
ABLo
ABFyABl��D������FQ�U
JU0�����F�A�A �G0{
 AABB��D��0��L�OE�E�J R
DAEUDA,�h�.(@���FB�E�A �zABLl���KF�B�A �A(�D0�
(A ABBAg
(A ABBE`��C����!���H�����#L��4����F�B�A �A(�D0q(A ABBP��zdx
DK
Ep�t�zdx
DK
E����zdx
DK
E ��4	�zL�T
HB
F ԓ�	�zL�T
HB
F ���	�zL�T
HB
F�H
�	0�D
�E�SL�H
�`�T
�HIx�\
���h
�gY�r
A'�A��
���
�HU Ԕ�
��E�D D
AB��|�2a�P���IE�`
KX04���ZE�D�G S
FAFeCA4h���oF�A�D �X
ABJyCB0��4�B�D�D �Gp@
 AABK@ԕ 
��B�E�I �A(�A0�G��
0A(A BBBG zRx�������(]@��hP�T�B�I�E �E(�E0�D8�GPIXK`OXAPH
8A0A(B BBBE�8A0A(B BBB����1�?��
��1���?��
\�(��F�B�B �E(�D0�A8�J��H�Z�A�
8A0A(B BBBE��O?��8��D�~F�B�D �C(�Gp
(A ABBI,����F�A�G�0
ABGzRx����$�>��P �4��B�E�E �F(�E0�D8�G@JHKPOHA@�8F0A(B BBB,t����F�A�G��
ABD����&(����A�D�J`�
AAHH����F�B�E �E(�A0�D8�D@i
8A0A(B BBBB���=��$D����A�M�P _FAl�8���4���0� ��<�eE�G O
DA̙��-E�g���(�����E�D�D0^
AAC(�L�JH |
AD���	X�|�	l�x�IH w
A����	0�����E�A�D H
AADkAA ��E�KP�
AA���(����E�H�G`�
AAA4���L���"A� h�� �!|��!�
���!�
���!�L���!�
̛�!�
��!���!���!�=AAI $�"�%HW<�"�3HWHT�@"�F�B�B �B(�D0�A8�NP9
8D0A(B BBBK$��$�vE�H�D _DAHȜ\$��B�B�B �E(�D0�D8�PPQ
8D0A(B BBBG��$�MD U
Gl4� %�HPL�(%�,HP4d�@%�IB�H�F �D(�D0g(D ABBH��X%��F�B�A �D(�G0Y
(C ABBKr(A ABB(��%�hF�A�A �\AB0�&�B�D�D �G0�
 AABDHH��&�$B�B�B �B(�A0�A8�D`c
8A0A(B BBBE,���'�!A�C
I������
B,�)��A�C
F���E�H�`
I0��+�?B�D�G �F@g
 AABB (��,�FA�R
ER
A,L��,�8A�C
D��G�J�H��
G|��.����.����.�1E�kH��/��F�B�D �A(�G0c
(C ABBAi(F ABB��/��D@�
I((�0��E�K�D@u
AAAT��0�)A�gp��0�7D S
IV���0�HI���0�LE�b(Ġ1��A�D |
AFl
CI(��1�MF�D�A �e
ABM(��1�jE�D�D h
KAO H��1�NE�G `
ACl�2�:H V
BY8��82��F�E�D �C(�D0G
(D ABBJ,ȡ�2�sA�C
F���F��!
GH���3�%F�B�E �B(�G0�A8�G@|
8D0A(B BBBI,D��4��F�A�A �C
ABBt�05�,E�[
HC(��@5��E�D�D0S
AAF���5�v8Ԣ6��B�B�D �C(�D@T
(A ABBGL��6�r	B�B�B �B(�A0�A8�D��
8A0A(B BBBFH`��?��F�H�D �A(�G0h
(A ABBHD
(I CBBE(��(@�dE�D�F0s
DAI(أl@�@F�G�D �kABH��@�vF�B�B �E(�D0�D8�D��
8A0A(B BBBA P��H��E�Y
Jp
A0t� I�=F�D�A �G0j
 AABHD��,J��F�B�B �B(�D0�D8�GP}8A0A(B BBB��J�4��J�aF�D�D �q
ABNAIB<��J��P��L�d��L�(x��L��E�O�G�v
AAE��`M�$H[,��xM�F�M�A ��
AIF�XQ�7Hj��Q�.��Q�	,��Q�) @��Q�A�G H
AG(d�R�gA�I�G0N
AAA4��TR��B�D�D �{
CBFQ
FBGȦ�R�%Hܦ�R�F�B�B �B(�A0�D8�G`i
8A0A(B BBBE(��T�,<�U��F�A�A �s
ABB4l�hU�xF�D�D �u
JBAV
JBA���U�,E�R
IKħ�U�HK(ܧ�U�[B�K�A �IABH��U��F�B�B �B(�A0�A8�GP�
8A0A(B BBBH0T�PW��A�D�G S
AAGxAA(���W�GB�D�A �|AB`���W��F�B�B �B(�A0�D8�D��
8A0A(B BBBA_�H�K�B�R��,_�$H [0�D_�HS4H�L_�8E�E�G �
DAM~
DAM(��T`��E�A�G m
DAA���`�	���`��X�c
MFL�$a�mF�F�A �D(�G@
(A ABBC�
(A ABBG0�Db�A�VHL�Hb�YF�B�B �B(�A0�D8�JP
8A0A(B BBBJ��\d�Go<���d�1M�A�G �DAC��p ��`��P ��0��e�_E�A�G r
DDIDEA  ��e��E�D0z
AD@D�pf��M�D�G �
FAAD
CAHP��P ����g�4E�R
IS4��,g�^J�D�J X
AAFDJ�H�4�Tg�^J�D�J X
AAFDJ�H�@�|g��M�D�G ~
FACD
CAHP��P ��(\�h��A�A�G M
AAH$���h�*E�D�G TDA���h�jE�K�F �$Ьi�NE�A�G pHDH��,i�nB�E�B �B(�A0�A8�Gp�
8A0A(B BBBJ(D�Pk��Q�H�G LDAG��Hp��k��F�E�B �B(�A0�A8�D`�
8A0A(B BBBK@��8x��F�E�A �u
FBG}
ABH[
GGOD��x��I�D�G F
AADDF�A�E ��LA�A�H�<y�	D\�8y�;F�E�A �C
FBIE
GGMl
ABE`��0z�mF�F�E �D(�A0�A
(D HBBI2
(D BBBDa
(C BBBF`�<|�uF�B�D �A(�D0
(D ABBG|
(E ABBJQ
(F HDEH8l�X~��B�E�D �D(�G@�
(A ABBI8�����F�B�A �A(�D0Q
(F ABBA4�P���F�B�A �A(�D0�(D ABBt���5F�B�B �D(�A0��
(D BBBAa
(D IDGE�
(D BBBA�
(A BBBE@�����KF�B�E �A(�C0�GP�
0A(A BBBC0ذ���F�A�A �D0p
 AABH4����RF�E�D �D(�D0q(D ABB`D�Ќ�AF�B�B �E(�D0�D8�G@E
8F0A(B BBBF�8C0A(B BBBT�����F�E�E �D(�D0�D@�
0F(A BBBD`0F(A BBBL�����F�E�E �D(�D0�GPA
0A(A BBBHDXJ`WXAP8P����E�M�D y(P0|(H �FO��x��	��t��	��p��6Ȳ���:ܲȒ��Ē��В�bE�_
Lj$� ��&E�Y4@�4���E�A�D D
DDJQAD4x�����E�A�D Q
DDM^AD8��d���F�A�A ��
ABCv
DBL�(��$�4��2E�A�G _DA((�L��AB�D�D �sABT�p��
h�l��H|�x���B�B�B �B(�A0�D8�DpY
8A0A(B BBBD4ȴ���eA�D�G a
AAA\
AAB4��!�����$(�ܗ�YE�P�D zDA(P���`F�A�D �HCE(|�H��`F�A�D �HCE(��|��}A�G�J0m
AAGԵИ�ME�G ���yN�J ^AI� �`��yH@
HI
WD08�����F�A�D �J@�
 AABD0l�X��tF�A�A �G@�
 AABD�����
`������F�D�D �G0O
 GABJo
 CABC^
 DABK

 FABEL�ܟ��	B�H�B �B(�G0�F8�J��
8A0A(B BBBA0h�|���F�A�A �G@@
 AABE|����@Z�E�B �A(�D0�G@r
0A�(A� B�B�B�I{
0A�(A� B�B�B�M�
0F�(A� B�B�B�Gt�����F�E�E �A(�A0�D�U�J�T�B�[�J�P�D�W�G�P�D�a
0A(A BBBA������DF�B�A �D(�G0&
(D ABBE�
(G ABBId
(D ABBCW
(F ABBFL
(A ABBFH����F�B�E �B(�A0�A8�G`
8A0A(B BBBIHh�\���
F�B�B �B(�A0�D8�G`�
8A0A(B BBBCH������B�B�B �B(�A0�A8�DP
8A0A(B BBBJ8�d��E
F�B�D �A(�JPD
(A ABBG����8P�d���F�B�A �A(�GP�
(A ABBGL������B�B�E �B(�D0�D8�G�4
8A0A(B BBBH0ܺ��F�A�D �GPH
 AABB0����F�A�D �GPH
 AABBHD����>F�B�B �B(�A0�A8�Dp~
8A0A(B BBBFL������B�B�E �E(�D0�A8�G��
8A0A(B BBBGL�d��1F�E�B �B(�D0�A8�G�
8A0A(B BBBH\,��� D�@
��H J
FU
CjLh��
��E�D�G W
AAG_
NAJP
JDJ�
AAJH����F�B�B �B(�A0�D8�G�J
8A0A(B BBBDd�p��B�E�B �B(�A0�A8�G@e
8D0A(B BBBJ�
8D0A(B BBBJl���2f8�����F�B�B �D(�D0�{
(A BBBL��H�нD��@�t��<��F�E�H �D(�G0�
(D ABBEt
(D ABBKW
(F ABBF
(A ABBFp��!�hH u
C ��"��E�G0Z
AI��t"�GHX
PN,о�"�QF�A�G ��
ABDH��#�EB�B�B �E(�A0�C8�G��
8A0A(B BBBBx/���4`��'��A�C�G0D
AAGi
FAH ���(��E�G ~
AE8��8)��F�B�A �A(�DP�
(A ABBI���)��H0b
F<��*��E�D�I U
AAGI
EAQDAAHT��*��	B�B�B �E(�D0�D8�Gp
8A0A(B BBBAL���4�kF�E�A �A(�D0d
(I ABBMr
(F ABBC��5���p6�xHx
H ��6��K k
J\
D@�D7�|K v
G8\��7��F�A�D ��
GBL�
ABF��<;���8;�#W��T;��`;�%Y�|;�RH0D
A��;�	��;�	,��;��E�R
I8H�,<�F�B�A �G(�DP
(A ABBG8��>��F�B�A �A(�G`l
(A ABBE ���?��E�J0U
DH(��@A��E�C�G0m
AABH��A�F�N�B �B(�A0�A8�D@�
8H0A(B BBBJ\��I�p��I�5H���I��B�B�E �B(�A0�L8�G��
8A0A(B BBBA���J�!AAK���J�GE�A��J�SE�M$����8�K�JA�G�D HX�<K�qB�B�E �B(�A0�A8�DP
8A0A(B BBBA,��pN��A�C
D��L����
A���P�GH_M R��Q�.H�Q�uB�E�A �D(�G0|
(A ABBKD(G ABB(T�PQ��B�D�D �S
ABH���Q�#E�],���Q�\A�C
H����I��
Gd�0��
���U�XD��@V��F�E�H �B(�D0�D8�DPb8C0A(B BBB<��V�P����d����EV|�hV�AAK��lV�fa���V�Q���V�V���V�<w��W�HI�W�LG�HW�HI84�PW��B�B�A �A(�D0~
(D ABBAp��W����W�8���W�gF�B�A �A(�D@�
(A ABBE���X�=e��Y�!E�M� Y�E�M$ �$Y�LA�A�G yADH�LY�GHX
PN$h�|Y�EE�A�G rDA$���Y�CE�A�G pDA���Y�iE�t
Gh��Z� AAK8�� Z�B�B�A �D(�D@�
(A ABBE`0�[�B�B�B �E(�D0�D8�G�
8A0A(B BBBJQ�H�B�D�N����b�B���b�-h@��c��Q�G�G x
AAGW
AAGL
AAA��c�(E�b\��c�B�G�E �E(�D0�A8�Gp^xE�B�B�Spl
8A0A(B BBBAP|�Hd�B�B�B �B(�A0�A8�G� I� �
8A0A(B BBBA��f�>\TL��<f�9B�E�E �E(�D0�D8�G��
8A0A(B BBBDl8�,i��B�E�E �E(�G0�A8�GPhXH`KXAPH
8A0A(B BBBBh
8A0A(B BBBFL���i�8B�B�E �B(�E0�D8�M�g
8A0A(B BBBF4���l��A�A�D0n
AAJy
AAA 0�Dm�NE�m
NF
ADT�pm��F�A�D �U
FBHA
FBGA
ABED���m��F�A�D �R
FBKA
FBGA
ABED�� n��F�A�D �Q
FBDA
FBGA
ABE(,�hn�sE�F
EA
OF
A(X��n�sE�@
KA
OF
AD��o��F�A�A �h
IBEh
DEOA
FGED���o��F�A�D �u
IBEA
FGJF
DEIH�@p�B�E�H �E(�A0�C8�DP�
8A0A(B BBBJ(`�q�7B�D�C �^IB��(q�>(��Tq�6A�A�G0�
AAA(��hr�<J�D�G QG�A�,��|r�A�C
D��Q���
A(�lw�8<�hw��B�B�A �A(�GP�
(A ABBFx��x�*A���y�5H��0y�oB�B�E �E(�A0�D8�D@�
8D0A(B BBBA8��Tz��Z�D�A �I
ABE����P ���,��{�4�@��{��F�B�B �B(�A0�A8�DPx
8A0A(B BBBDD
8C0A(B BBBHW
8D0A(B BBBD`
8G0A(B BBBHd
8G0A(B BBBE��}��(��}�EE�D�G Q
AAE(,��}�fE�A�G@�
AAC����l��	���&�� � E�Z��$�&��@�<��L��F�E�E �D(�A0�_
(A BBBE��&��l,���-F�G�B �B(�A0�A8�J���J�F�A�P
8A0A(B BBBAY�M�F�A�H�����F�E�E �E(�D0�A8�G�T
8A0A(B BBBAH��L��PB�B�B �B(�A0�A8�Dp�
8A0A(B BBBKL4�P���B�B�E �A(�A0�F
(D HDBM_
(A BBBJ�����<H s �����E�D0�
AE8��Ą��F�D�D �m
ABBA
ABD��(���$��0$�0��tE�D�D d
AAEtFAX�|��FE�c
PM4x����F�D�D �Z
FBH�CB�����^Y��̆�b],��$��jE�C
D��L����
A@�d���B�B�E �D(�A0�G@l
0D(A BBBD0T����B�G�D �G@b
 AABF<������F�B�B �A(�A0��
(D BBBAd����6F�B�B �B(�A0�A8�DPB
8C0A(B BBBH�
8D0A(B BBBGH0����F�E�B �B(�D0�A8�G@�
8C0A(B BBBC\|�h��EF�A�A �|
DDLa
DDOG
FBEP
EGHF
FBJ4��X��qE�A�D a
DAHa
FAE����(����2HV
BH
EH����HI`��7E�[
PF����HI����2HS
MI8�����F�K�A �A(�G��
(A ABBF��Џ�QHH8����F�N�G �D(�G�J
(A ABBA$H�|��'E�C�G IIAPp�����B�B�E �D(�A0�G�W�H�L�A�|
0A(A BBBKL��0���F�K�E �B(�A0�A8�J��
8A0A(B BBBCX�����F�B�E �E(�D0�D8�D�K�B�F�A�z
8A0A(B BBBJ(p�$��+F�D�D �UABH��(���F�B�E �E(�D0�D8�D�v
8A0A(B BBBB(������E�A�G r
DAD0�`��RF�A�A �DP
 AABF(H����tE�G b
DN_
AEHt����F�B�B �B(�D0�F8�D`�
8A0A(B BBBG ��T��fE�D S
AC4������x�A�D �XABH���P ���8�X���F�A�A ��
AEPK
AEFX����!KNLp���XB�B�B �E(�A0�A8�D�v
8A0A(B BBBG��$��[E�\
Of��d��8E�P�����HI@�����B�B�B �A(�C0�D@J
0A(A BBBH���� l�آ��E�G@U
AF0��D���F�A�A �DPG
 AABIL������F�B�B �E(�A0�A8�G�
8A0A(B BBBK0�0���E�D k
CId
CIOA0H�����M�H�A ��
FPL|�X���DP�
G��,��{8�����2B�D�J �~
ABG�
FBG$������A�v
IL
Dd4����A�M�G |
CAKZ
CABHH����4B�B�B �B(�A0�A8�D`v
8A0A(B BBBBH�����KB�B�B �B(�A0�A8�D`�
8A0A(B BBBJ8������B�L�D �C(�G0F
(A ABBH@����B�B�B �A(�A0�D@
0A(A BBBH(`�����B�H�D �t
ABK@��H���A�H�G J
CABZ
CABZ
CAB4����;B�H�D ��
ABHlAE$����7A�G�G bDA@0���B�E�I �D(�D0�D@~
0A(A BBBF,t����A�C
B�E�E�H��
I0�����BB�A�A �D0p
 AABDH������B�B�B �B(�A0�A8�DPv
8A0A(B BBBBd$�P��"X�E�B �F(�D0�A8�DP�8A0A(B BBBA������AP������T������,����WB�D�D �B
ABA8��H��oB�E�D �D(�D0N
(A ABBA,��|��jB�D�D �U
ABA,(����WB�D�D �B
ABA,X����XB�D�D �C
ABA(����VB�D�D �_
ABD0��P��0A�C�G M
AAFDFA<��L���B�E�E �G(�G0�]
(C BBBH(����C4<�����A�A�N v
AAHo
AAGt�������L���O���4��v<������B�B�B �A(�A0�G
(A BBBJD�� ���B�E�E �E(�D0�F8�D@z8A0A(B BBBL<�����B�J�I �B(�H0�G8�J�i
8A0A(B BBBEL�����B�E�E �B(�A0�A8�G��
8A0A(B BBBAd�����1B�B�B �B(�A0�A8�DP{
8C0A(B BBBK�
8K0D(B BBBILD����xB�B�B �B(�A0�A8�D�S
8A0A(B BBBA@�����pB�J�D �D0m
 AABKT
 AABAL�����pB�B�E �B(�A0�A8�G��
8A0A(B BBBE8(���'B�D�A �D(�G@A
(A ABBGHd���GB�B�B �B(�A0�A8�Dpn
8A0A(B BBBJ\����F�B�D �D(�J0V(A ABBJ����H0����x
(G� A�B�B�L�t�$�p�(8�l�HE�D�G \
AABd���!J�L�����aJ�H�4�����O�D�I �ABF���C �����P	�����	����	�2\U8��	��F�E�D �C(�G@�
(A ABBDP��
�	d��
�.E�h���
�DE�~���
�h��T�iE�t
Ge����9E�N ^CH����;B�B�B �B(�A0�A8�Dpd
8A0A(B BBBDL<���>	F�B�E �J(�A0�A8�J�}
8A0A(B BBBA����H����cF�B�D �I(�J0[
(A ABBHD(M ABBl�����F�E�E �E(�D0�D8�LPQXM`OXAPH
8A0A(B BBBG[
8A0A(B BBBA\���p�������0����FE�D�G W
AAGQCA0�� �AE�D�G T
AAJGHAH�4 �qF�E�G �J(�G0b
(D ABBBR(I ABB\L�h ��F�E�E �G(�J0�n
(A BBBJQ
(A BBBHW(A BBB��� �+<��� �dK�E�A �A(�H0@(A ABBA����4�� �RF�B�D �A(�G0w(A ABBH8�!�aF�B�A �A(�D0r
(D ABBGD(D DBB(��@!�mF�D�C �w
ABI,���!�rF�D�D �@
ABG���!�H���!��F�H�H �E(�D0�A8�KP|
8A0A(B BBBA@�T"�THT��"��F�B�H �I(�D0�D8�J`�
8A0A(B BBBE��T#�x���$�
���$����$�!���$�
��$���$�
,��$�0V@��$�T��$�
h��$�|��$� (���$�~E�D�G P
AAF8��H%��F�A�A �b
ABCI
ABD���%�$��%�-( ��%�yE�G�H z
AAH(L�8&��E�D�H X
AAEx��&�UiR��4'�`��0'��O�E�B �D(�A0�[
(C BBBAE
(A BDBBC(A DBBA�����P�|'��O�E�B �E(�A0�A8�G@q
8C0A(B BBBGL������\\��'��F�B�B �E(�D0�D8�R@H
8A0A(B BBBED8F0A(B BBBD��((��F�B�E �E(�D0�A8�G`�8D0A(B BBB��(��`��A�$�`)�(H8�|-��F�I�B �B(�A0�A8�G��
8A0A(B BBBDL���0�GF�E�E �B(�A0�D8�J`P
8A0A(B BBBAH���3�%B�B�B �E(�A0�C8�J��
8A0A(B BBBAH ��4��B�K�E �E(�D0�A8�K��
8A0A(B BBBD(l�9�yA�I�G0`
AAAH��\9�#B�H�B �E(�A0�H8�G��
8A0A(B BBBD4��@?��A�D�J
AHD
AKG
VJ��@�	H0��@�L�E�B �E(�D0�A8�D`�
8A0A(B BBBC`|�xA�I�B�B �D(�A0�d
(A BBBCF
(F BBBFA
(K EBBCL��4B�WB�E�B �B(�A0�A8�M��
8A0A(B BBBEH0�DF��B�B�B �B(�A0�A8�G��
8A0A(B BBBF,|��Q�v|A�F
F���F���
A��H��MH 
A��|��=`�����F�E�B �A(�D0�\
(D BBBHA
(A BBBHs
(A BBBA@@�T��\J�E�D �D(�G0`
(A ABBDN������p����|��$E�^<�����qJ�C�G N
D�A�IS
AAK`��(����qJ�D�G NAAK�� �$��4� ��
DH���?F�E�E �D(�A0�J�
0A(A BBBB�����6F�E�E �B(�D0�D8�J�b
8A0A(B BBBH��J�X�A���L�K�A�|�M�T�A���L�L�B�$����HEB OTD�����F�E�E �E(�D0�D8�GPYXW`FXAP^
8D0A(B BBBJ��X��	��T���P���L��	�H���D���@��Y,����@����fT����Ah���JE�r
II��L��?$��x��0A�I�G \AA����BA�@����GDB�����DY(����_B�I�C �MAB$<�(��=E�D�G eFA,d�@���B�A�A ��
ABD`�����B�D�B �B(�A0�A8�D`e
8A0A(B BBBA\
8F0A(B BBBA`��\��B�B�B �B(�A0�A8�DP�
8A0A(B BBBHT
8F0A(B BBBA8\���#A�A�J���`�M�A�z
AAAzRx����$�ܽ�����9H����{B�B�B �B(�A0�D8�D`
8A0A(B BBBD(,�(��UB�D�I �{
ABAX�\���(l����dB�G�D �PDB��,��A�O ��0��eQ�iF�H�X�D�|���B�B�B �B(�A0�A8�DP�8A0A(B BBBH �����B�H�E �B(�A0�A8�G``
8A0A(B BBBAl�8��%H��T��&B�H�E �B(�A0�C8�GP{
8A0A(B BBBGt�8���B�B�B �B(�D0�D8�D@x
8A0A(B BBBJD
8M0F(B BBBID8C0A(B BBBdD�����B�B�B �E(�F0�D8�DpY
8A0A(B BBBD�
8M0G(B BBBEl�����FB�B�B �A(�D0�\
(A BBBBG
(O EHBK�
(D BBBHD(G BBB�����[�B�B �B(�A0�A8�Dp�8A0A(B BBBF������hp�������������Qp�������
8A0A(B BBBAX����B�J�B �B(�D0�A8�G���J�V�A�t
8A0A(B BBBF\�����B�F�B �B(�D0�A8�K�&
8A0A(B BBBDK�K�Q�A�Hh�<��WB�B�B �E(�D0�C8�I�Z
8A0A(B BBBAL��P�YB�B�B �B(�D0�A8�D�o
8A0A(B BBBF`�\�,X�@T�T`�&E�L
GMtp��|�FH0x
AP���mF�E�E �D(�I0�D@e
0A(A BBBBT0A(A BBBH����F�E�E �E(�I0�D8�DP�
8A0A(B BBBADp
�9E�s`�
�pH@b
A|�
�3QU��4��gO�A�G �sABC���A ���(�T��E�A�I0_
AAH ���E�G u
AF0D�9Q�gXLh��O�A�H �e
�A�B�HM
�A�B�HM
�A�B�HZABA������	���2E�l$��4E�I�G \AAd$�L�B�B �B(�A0�A8�F@�
8F0A(B BBBKD8C0A(B BBBH������(h���A�D�DP
AAF�`�2E�l���	`���jF�D�B �B(�A0�D8�G`�
8A0A(B BBBDe
8A0A(B BBBA((��\B�D�I �}
ABA(T��]A�I�G0D
AAA$���BE�E�G nAA(��(F�D�D �RAB� �	H��`F�E�E �E(�A0�A8�F`z
8A0A(B BBBG`40��F�B�B �B(�A0�A8�DP�
8A0A(B BBBHD
8F0A(B BBBEH���CB�B�B �E(�A0�A8�D�W
8A0A(B BBBF ���CH{
Em
K��
L���B�B�B �B(�A0�A8�G�y
8A0A(B BBBD<lh�aB�G�A �G0f
 AABE\ AAB4���5B�D�G �S
FDFAAB@���`B�D�D �G0e
 AABFT
 AABA4(���B�D�D �l
ABGe
ABHH`��B�B�B �B(�A0�A8�DP�
8C0A(B BBBB�����B�B�B �B(�A0�D8�G���O�I�A�V��
8A0A(B BBBE�L�I�A�V���Q�I�H�S���Q�I�H�V�LT2�"B�B�B �B(�D0�A8�D��
8A0A(B BBBH���8��B�B�E �E(�A0�D8�D��
8A0A(B BBBH�
�D�W�A�K�E�S�A�_�E�K�A�7�G�L�B�l<	�W�
(B�B�B �E(�A0�A8�J�z
8A0A(B BBBE'�B�K�A�|	�G�N�A�H�	��BB�B�E �E(�D0�C8�G`e
8A0A(B BBBEH�	����B�B�B �B(�A0�A8�D`�
8A0A(B BBBDLD
����F�B�E �E(�D0�D8�G�Y
8A0A(B BBBD�
p��4�
����
����
����
����
������ ���4���H���\���vt��������
���=��������B�L�E �B(�H0�G8�D`rhPpHxD�D�B�D�B�Y`D
8A0A(B BBBGfhHpAxA�B�B�D�B�p`i
8A0A(B BBBC�
hKpAxA�K�B�D�B�E$���CA�SK L(J0LA�,��E�WD�0���K�E�B �A(�A0��
(A BBBFD�����,
Ȇ�C4@
���B�I�A �A(�G0w(A ABBx
l��3dN�
���E�L�
���HL�
���+Hb�
���"E�\�
̇�HL(ԇ�CB�D�A �^
AEE(<���wA�E�D r
CAAhL��CD ~zRx� �Ƚ��X��	�T��aD\P�����B�A�A �D0�
 DABJ�
 DABCN
 DABA,���)@��T Ƚ�h��TDY
A�P��GM�a
A4����qq�D�G P
CAHLD�D�L�̊��B�B�B �B(�A0�A8�D��
8A0A(B BBBE(<���\<؍�B�E�D �D(�F0t
(A ABBAf
(A ABBDj
(A ABBAL�����B�H�D �C(�D0�
(A ABBEx
(H FIDM�����$��TE�D�F BAAp�Fƽ�0THOdX��wB�B�B �E(�A0�A8�DP�
8L0C(B BBBJ
8D0A(B BBBG`�4���F�B�B �D(�C0�P
(A FBBDf
(H GIDN\
(A BBBA$$���eE�A�D UDA4L��zF�B�D �C(�D0](D ABB4�0��zF�B�D �C(�D0](D ABB4�x��zF�B�D �C(�D0](D ABB8�����B�B�D �D(�G@Q
(A ABBFL0t��B�E�D �I(�G0L
(A ABBCT
(A ABBFL�4��BB�B�B �B(�A0�A8�D��
8A0A(B BBBEH�4��nB�B�B �E(�D0�A8�G�I
8A0A(B BBBF`X��
F�B�E �I(�D0�A8�G@|
8A0A(B BBBHd
8A0A(B BBBBP���tF�E�E �E(�D0�D8�GPgXQ`BhBpI8A0A(B BBB�0���,��8�(��!F�B�B �A(�A0�(A BEB8��8L���F�H�A �D(�G�}
(A ABBA����!E�T����HI����AMl���1HdH���~B�B�B �B(�A0�A8�GP�
8A0A(B BBBGL8<��F�B�B �E(�A0�A8�D��
8A0A(B BBBA����}E�p4�`��bF�B�A �C(�G0H(A ABBP����$B�B�B �B(�A0�A8�G� L�)�
8A0A(B BBBD$zRx��)������,Z���0l8��NF�A�D �I��
 AABKzRx�����$���"<� ��&F�B�A �A(�G��
(A ABBJ��(��E�OD��2E�]
FEd0��	x,��,E�X
KC4�<���B�A�C ��
ABJhAB �����E�M b
AK�p��=A�{P����A�G �
AJU
DGP
AG�
AKI
EJm
AJd���x���	����3E�m4����@F�E�D �C(�M0T(C ABB(���3F�D�K �ZAB�� HS$ �� HS<(�� HS\T0���F�B�B �B(�A0�A8�DP�
8D0D(B BBBHD8C0A(B BBB����	����(HX����-H^����.E�hH����F�E�D �A(�D0S
(A ABBCG(A ABB4`d��~F�A�A �d
ABAGAE�,[���L�����K�B�D �A(�D0Y
(A ABBKA(J� A�B�B�8�(���F�E�F �K(�DP�
(D ABBA88����F�E�F �K(�DP�
(D ABBA@t0���F�E�E �K(�F0�DP�
0D(A BBBA@�����F�E�L �F(�A0�DP�
0D(A BBBA@�H���F�E�L �F(�A0�DP�
0D(A BBBA@���&E�`\��p��=E�`
KL$�4��~E�U
FF
RA����=E�a
JL �����E�y
JL
D����
���)HY(���<���
P���-E�cl�������
����
����BE�|����#����(���jE�A�D E
AAAH���H�8���+Hb(P���E�A�G K
DAC|���9Hp����1He���BE�Z
AY�H��	�D��>�p��JH |
A ���$ ���_H0Q
A@ ���OH0A
A8\ (��{F�E�D �A(�GPU
(D ABBA� l��TH0F
A$� ���1E�G�G IGI$� ���1E�G�G IGI!���!���RH@D
A(4!0���E�D�GPv
AAH(`!����E�D�G`�
AAH(�!x���E�D�GPv
AAH(�!����E�D�G`�
AAH4�!���WF�E�G �L(�D0k(D ABB4"���WF�E�G �L(�D0k(D ABB8T"��YF�E�J �G(�G0�k(D BBB8�"4��YF�E�J �G(�G0�k(D BBB�"X��JH |
A�"���JH |
A #����E�N`o
AA(#,��<#8��s�P#���BK�B�B �B(�A0�A8�GPu
8A�0A�(B� B�B�B�GD
8D0A(B BBBG�������@P������h������CP�������#T��/Dfܭ����$X��0$T��$D$p��4X$|��MF�E�D �A(�D0r(A ABB�$���gY�]
JH�$���B�E�E �E(�A0�D8�Dp�
8A0A(B BBBGt����0%����B�A�A �G0w
 AABJ@%$��T% �� h%,��.E�h�%@��HI�%H��8�%D���F�B�A �A(�DP�
(A ABBB�%���GH y
A(&���&E�A�G@q
AAH(4&����E�A�G@m
AAD0`&����E�G�G k
CAF}FA�����`�&,��LF�B�B �B(�D0�A8�G`�
8A0A(B BBBEs
8F0A(B BBBA'��E�O('��
(<'���E�D�G0o
AAG@�ð��(|'����E�D�G0x
AAF�������'��HO(�' ���E�D�D0w
AAJ(���#(���9dI8,(��eF�L�A �A(�D@
(A ABBGx!߯��|(���(��H�(���5B�E�B �E(�D0�A8�D`D
8A0A(B BBBK0�(���B�D�A �I��
 AABD()|��$<)���/E�A�F `AAd)���4x)���eF�B�A �C(�R0}(D ABB(�)���A�C�G�r
AAA(�)H���B�E�A �l
ABA,*����B�D�G�-
ABC8*��SD`I
AzRx�`୽�i�*��VF�D�J ��*��VF�D�J ��*$�VF�D�J ��*d�nH0L
D�*��P8+���F�B�D �A(�DP�
(A ABBJ8L+h��F�B�A �C(�D@�
(A ABBD(�+	�1A�A�F `
CAA�+0	�jH|
LY�+�	�;�+�	�$E�ZL,�	��F�B�B �B(�A0�A8�I�
8A0A(B BBBBT,�OH_
ID�E����,0�[HPM
A�,t�	�,p��,l�K�,��-$�,��|Hz
FQ
GG
I-
�@H_
IK48-<
��F�H�A �G��
 AABEzRx�����$*���* �-���A�H �
AI@�-l�F�B�B �A(�A0�D@�
0A(A BBBF.H�A�V(.L�j<.��fDQ
A\X.���B�B�B �B(�A0�A8�D@g
8D0A(B BBBF\8C0A(B BBB�.\�GDN
AH�.���b�B�B �E(�A0�D8�D@�
8C0A(B BBBFH /D��F�E�E �B(�A0�A8�DP
8C0A(B BBBDLl/��0B�B�B �B(�A0�A8�G�
�
8A0A(B BBBA �/XF��A�MP~
ACH�/G�WB�E�E �B(�A0�D8�G��
8A0A(B BBBB,0H�@0$H��K��
D8\0�H��F�E�D �I(�D0A
(D ABBA�0,I��K��
A�0�I��0�I��K��
A$�0�J�]E�D�G0JAA1�J��K��
AX(1\K�^-F�B�B �B(�A0�A8�G��
8A0A(B BBBAO 
�T�T�s`����1Lx�3[�1xx�9�1�x�
�1�x��1�x�I�1�x�	2�x�/L$2y��B�E�D �D(�J0u
(A ABBDD
(G ABBHt2py�uH�2�y�BB�E�E �I(�D0�A8�G`�
8D0A(B BBBJH�2�z�2B�B�E �E(�H0�D8�GP�
8D0A(B BBBF8 3�{��B�B�A �A(�D0�
(A ABBFH\3�|��B�B�B �B(�A0�A8�Gp�
8A0A(B BBBCH�3̀��B�H�B �I(�G0�A8�G`
8D0A(B BBBD|�30��mB�B�E �E(�A0�D8�D`�
8A0A(B BBBI�
8A0A(B BBBHD
8F0A(B BBBEt4 ���E��
E(�4��1F�D�I �ZAB(�4���A�F�G o
AAA�4���	5���5���(5���<5���P5���d5���x5����5ȅ�E�M�5̅�#E�Y�5��:`�5��+F�B�E �E(�D0�A8�DPe
8A0A(B BBBF
8C0A(B BBBE`<6؆�+F�B�E �E(�D0�A8�DPe
8A0A(B BBBF
8C0A(B BBBEH�6���(F�B�B �E(�D0�A8�Gp�
8A0A(B BBBH4�6����E�I�G0h
AAAR
AAD@$70���F�D�D �G0w
 AABHR
 AABBHh7܊�@F�B�E �B(�D0�D8�Gp�
8A0A(B BBBKL�7Ќ�F�B�A �D(�G0�
(D ABBEM
(D ABBB(8���DE�I�D \
DAE08���	D8���	`X8����F�B�B �B(�A0�A8�D`Z
8A0A(B BBBJ�
8F0A(B BBBE�8��H�8��F�B�B �E(�A0�A8�G��
8A0A(B BBBBL9���NF�B�B �B(�A0�A8�D�
8A0A(B BBBDHl9����F�D�B �B(�A0�A8�D��
8C0A(B BBBGH�9,��kF�D�B �B(�A0�D8�Dp�
8A0A(B BBBH:P��c:���c,:��c@:d��cT:���Ph:���E�Q�:��1�:,��2�:X��?�:����:���k�:ܤ�	�:ؤ��x;T���F�B�H �J(�G0�K8�D@�
8A0A(B BBBHD
8M0A(B BBBF�
8G0A(B BBBL�;ئ�?Hvx�_���(�;���i�D�G mAA(�;p��#A�F�G`�
AAG(<t���A�I�L0�
AAA\<<8���B�E�E �E(�A0�A8�DPo
8D0A(B BBBEL8C0A(B BBB�<���T�<��AAG�<��>ON��<���+B�E�B �B(�E0�A8�J���T�D�G�[�i
8A0A(B BBBKh
�T�D�G�Y8�W�D�G�X�
�T�D�G�Yx
�T�D�G�Y8
�T�D�G�Yh
�T�D�G�YP�=����F�E�E �E(�D0�F8�I@lHTPEXB`I8A0A(B BBBP>����F�E�E �E(�D0�F8�I@lHTPEXB`I8A0A(B BBBl>8���>4����> ��I�>\��I�>����>���4dI�>���)J�XF�L?����F�B�B �A(�E0�j
(F BBBJt
(A DBEHT?@��0DO
A(p?T���E�D�D0�
AAD�?���+\N��?���B�B�E �E(�E0�D8�D@T
8F0A(B BBBB�
8A0D(B BBBAj
8F0A(B BBBAS8C0A(B BBBLH@L���G�E�A �D(�G0G
(C ABBID(F ABBA�����@���% �@���]E�z
AK
E�@���'E�a�@���A���A���8E�k0A��HK8HA���B�B�D �A(�G0l
(G ABBHX�A����B�H�A �G(�M0\
(D ABBDt
(D ABBKD(G ABBL�A���B�B�B �A(�A0�i
(C BBBFb
(D BBBD40B���xB�B�D �D(�D0^(A AEBhB���5E�R
IM�B���HQ�B���HI�B���	H�B���	B�B�B �B(�A0�A8�DP�
8D0A(B BBBG8C���	A�A�J�]�U�I�A�c
AAC TC���yHB
FI
WD$xC���xE�J {
AEfA�q����C0��4a�K�CT��AAK$�CX��6La
CKUc
MDp��+A�M
A0D攽�"AA[LDh���`D��bH�e
Cq�DT��AAK0�DX���B�A�D �G0c
 AABKL�D����B�E�B �B(�A0�D8�G�8
8A0A(B BBBA8 E����B�E�D �D(�FPP
(A ABBE\E���pE����E���DE�R
IX�E ��8A�S
D@�ED���D�D�F �P
AKFR
CBIW
FBA0F���SA�I�L N
FAEWDC8F����H I
GTF@��E�LpFD��(A�[�FX��)�Ft��)�F���3�F���\E�F
E(�F����A�G�D0�
AAH8G����B�E�A �A(�G@k
(A ABBGLPGt��9A�D�G @
AABf
AAHx
AAFvAAH�Gd��lB�B�B �B(�A0�A8�D`

8A0A(B BBBF@�G���B�B�B �A(�A0�D@�
0A(A BBBCL0HT���B�E�A �E(�G0I
(D ABBJ\
(D ABBK�H���QJ^H�H���F�B�B �B(�A0�A8�Dp�
8A0A(B BBBE(�Hp���A�D�G0�
AAD`I���B�E�E �B(�E0�A8�GP�
8A0A(B BBBG�
8A0A(B BBBF@tI����A�D�G a
DAFO
ADD[
DAH`�I��5B�B�B �B(�A0�D8�GPS
8D0A(B BBBDt
8J0D(B BBBNHJ���HB�B�B �E(�A0�D8�G@�
8A0A(B BBBE(hJ���gA�D�G0A
AAA`�J@��uB�B�B �E(�D0�E8�J@K
8A0A(B BBBE�
8F0A(B BBBE�J\��1(K����E�A�G }
AAD(8K\���r�J�J ^
I�A�JLdK����F�B�A �A(�G0o
(F ABBEH
(A ABBB�KP��$,�Kl��rF�D�D �G
ABH�\@���|L���dF�B�B �B(�D0�A8�GPR
8A0A(B BBBAe
8A0A(B BBBD
8D0D(B BBBD�L���$�L���JQ�x@�L��^B�F�B �A(�A0�G`�
0A(A BBBEM���H@e
CzRx�@	���HML��E�LdMP��RH@D
A �M���tA�G
HI
OH�M���B�D�B �B(�A0�A8�G�U
8A0A(B BBBF�M4�6A�P
AHNX��B�B�E �B(�E0�A8�D`�
8A0A(B BBBKXN�
�%H\pN�
�%H\<�N�
��B�B�B �D(�A0�z
(A BBBD(�N���A�D�D |
GAK@�N0�KB�B�E �D(�D0�G@�
0A(A BBBDL8O<
�kB�E�B �D(�D0��
(C BBBFF
(A BBBKL�O\��B�B�B �B(�A0�A8�G�
8A0A(B BBBG(�O��Wk�A�J TD�D�0P��wE�A�D ^
CADBCA8P<�TE�l
O(TP��2F�K�D �UAB$�P��CE�A�K hDA�P��!HQH�P��0F�B�B �B(�D0�A8�Dp�
8D0A(B BBBG$Q��3E�D�G \AA$4Q��3E�D�G \AA\Q��pQ��6E�Q
H(�Q�GE�A�D U
GDE�Q<�E�L�Q@�E�L�QD�RP�R\�$,Rh�5E�D�J [AATR��4U�Q�<pR��cB�B�B �A(�D0��
(A BBBH(�R��\A�D�G }
DAB$�R�BA�D�G iGAHS0��B�B�B �E(�D0�A8�GPX
8D0A(B BBBD\PS� �}B�E�D �A(�D0�
(A ABBG|
(D ABBC�
(D ABBG�S#�=^�L�d�S(#�bP�B�B �B(�D0�D8�DP�
8D0A(B BBBFx������XP������d4T0&��Q�B�B �B(�A0�D8�DP�
8A0A(B BBBD������XP������L�T�(��B�B�B �B(�A0�A8�D��
8A0A(B BBBH0�T+��F�A�A �O0�
 AABE$ U�+�2E�D�I VAD0HU�+��F�A�A �L0�
 AABE$|U(-�2E�D�I VAD0�U@-��F�A�A �L0�
 AABE$�U�.�2E�D�I VAD0V�.��F�A�A �L0~
 AABJ$4V`/�2E�D�I VAD\Vx/�1E�[
HD|V�/�E�L@�V�/�B�E�H �D(�D0�DP�
0A(A BBBG@�Vh1�?A�A�D �
DAGR
DAAi
AAE( Wd2�AE�D�DPZ
AAG(LW�3�E�A�G �
DADHxW|4��B�E�B �B(�D0�A8�DpK
8A0A(B BBBG�W�5�)E�R
ID�W�5�$L�W�5�/F�B�A �A(�D0#
(D ABBF�
(A ABBFHX�8�}4\XH9�BF�B�D �D(�G0T(G GBB0�X`9��E�E�J U
DABiAA�X�9�E�S�X�9�lV�^�l�Y :��|�jJ�P�$Y�:�8Y�:�0LY�:�@P�U�\hY�:��F�B�D �A(�D0�
(A ABBD|
(D ABBK�
(D ABBG�Y=�? �Y8=�zE�G0@
AC@Z�=�:F�E�B �D(�D0�D@�
0A(A BBBFHDZ�@��F�B�B �B(�A0�D8�G@@
8D0A(B BBBKH�ZB�gF�E�B �B(�A0�D8�GP�
8D0A(B BBBGH�Z(D��B�B�B �E(�D0�A8�DP�
8A0A(B BBBC([|I�<H_
IGH[�I�HI``[�I�#F�E�B �A(�A0��
(D BBBIf
(A BBBCa
(D BBBE�[pJ�	H�[lJ��B�B�E �B(�A0�D8�Gpm
8D0A(B BBBGL$\�L��B�B�D �D(�G0P
(F ABBJ\
(D ABBCHt\PM��B�B�B �B(�D0�D8�GP.
8A0A(B BBBA�\�N��\�N�<E�R
IT4�\O��E�A�G W
AAJm
AAA,]xO�E�T H]|O��Q�J
Ep
�HHl]8P��B�B�B �B(�A0�D8�JP�
8A0A(B BBBE�]�T�(�]�T��A�A�G i
AAD,�]U��E�F
H����H�*
KL(^|[��F�B�A �A(�K0U
(D ABBED
(I ABBF8x^�[��F�B�A �A(�K0L
(D ABBFH�^@\��F�B�B �B(�A0�A8�KPw
8D0A(B BBBC4_�\��E�A�G U
AADW
AAG(8_l]�E�d
GV
JI
G(d_P^��E�A�L0x
AAD(�_�^��E�A�L0�
AAE0�_�_�BF�A�A �L0�
 AABJ0�_�`�BF�A�A �L0�
 AABJH$`�a�7B�E�B �E(�A0�D8�D`�
8D0A(B BBBGHp`�d�wF�B�B �B(�D0�D8�DP3
8D0A(B BBBH0�`�f��F�A�A �G0i
 DABA$�`th�eE��
A?
B<a�j�
F�B�H �D(�A0��
(A BBBGXa�l�pE�L
Gxa�l�5Q�OH�L�am�>F�B�B �B(�A0�A8�D��
8A0A(B BBBCH�a�n�~F�B�B �A(�D0�K
(A BBBOA(F BBBL0b$o��F�B�A �A(�G@+
(D ABBKW
(D ABBH�b�s� E�S�b�s�DE�G vA(�b�s��A�D�D0Q
AAAL�bLt��F�B�B �E(�A0�A8�J�(
8A0A(B BBBCH8c�x�{F�B�E �E(�D0�A8�D@
8D0A(B BBBCL�c0{�VF�B�B �B(�A0�A8�G�4
8A0A(B BBBEH�c@~�{F�B�E �E(�D0�A8�D@
8D0A(B BBBCL dt���B�B�B �B(�A0�A8�G�
b
8A0A(B BBBCpd���d��(�d���>M�D�G �bAB(�d��;M�D�G �_ABL�d$���F�B�B �B(�A0�A8�G��
8A0A(B BBBG@@e����B�B�B �A(�D0�D@�
0D(A BBBG0�e ���F�A�A �G0�
 DABGH�e̒�:B�B�B �B(�D0�A8�DP�
8D0A(B BBBEf���aD x
DL f���B�B�B �E(�A0�A8�D��
8A0A(B BBBFpft���fp���fl��H�fh��F�B�B �B(�A0�A8�D`�
8A0A(B BBBH$�f<��*E�D�I IIAH gD��JF�B�B �B(�A0�A8�D`
8A0A(B BBBE$lgH��*E�D�I IIA8�gP��IF�B�A �A(�D@�
(A ABBC0�gd���F�A�A �D0�
 AABGHh���F�B�B �E(�D0�D8�D�@
8A0A(B BBBKPhT��&H]Dhhl���F�D�C �Y
ABGi
ABLi
CBE�h$��<H n
A�hH���H {
E0�h���	F�A�A �D@�
 AABAi��� 0i���8Di����B�D�A �a
ABE�
DBF�iT��YRY(�i���]F�D�D �h
ABA�i�KL�OE�P�(�i���A�Y
FU
KD
LD8jt��tF�E�A �A(�F0m
(G ABBLLj���	L`j����F�B�B �D(�A0�k
(A BBBGM
(A BBBE$�j��*E�D�I IIA�j��/E�X
KF�j,��k(��H S,$k0���F�A�D �s
JEKHTk���)F�B�B �B(�D0�D8�D@^
8D0A(B BBBE@�k���rF�B�B �D(�D0�I@�
0A(A BBBG8�k���F�B�D �D(�I@�
(A ABBE$ l���*E�D�D WDAHHl����B�B�E �E(�D0�D8�G@�
8D0A(B BBBJL�l0��nF�B�E �E(�D0�D8�G�U
8A0A(B BBBH�&^l��0�l<��}F�A�A �L@�
 AABA0,m���mF�I�A �D@�
 AABBH`mĿ��B�B�B �B(�A0�D8�Dp�
8A0A(B BBBK�m��)E�R
ID�m��<E�R
ITH�m8���B�B�B �E(�A0�A8�Dp
8A0A(B BBBG8n���DE�R
IXXn���<E�R
ITHxn����B�B�B �B(�A0�C8�D��
8A0A(B BBBA4�n0��TF�D�D �V
ABIVDE(�nX��<F�D�D �V
ABIL(ol��7F�B�B �B(�D0�C8�G��
8A0A(B BBBI(xo\��7M�G�C �\AB�op��;E�W
LK�o���;E�X
KK0�o���pE�A�G u
FDLQAA4p���vF�A�E �H
DBFKAB\Pp4���F�B�B �B(�A0�A8�KP�
8A0A(B BBBFD8P0A(B BBB�p���CE�_
LK�p���E�N@�p����B�E�E �G(�G0�GP�
0A(A BBBHH0qT���F�B�B �H(�A0�A8�Dp�
8A0A(B BBBHH|q����F�B�B �B(�D0�A8�Dp
8A0A(B BBBH0�q���A�C�G0O
DAAYDA�q���r���($r���jF�D�G0U
GBI(Pr$���E�D�D@Z
AAG$|r���*E�D�I IIA�r���Rz(�r���/F�D�D �SGB@�r���F�B�B �A(�D0�G@�
0A(A BBBC�l2f��H<s����F�B�B �B(�A0�A8�DP�
8D0A(B BBBC �s����E�{
H
E�s���TE�m
NOL�s���B�E�E �E(�A0�D8�G��
8A0A(B BBBKTt���bF�B�B �B(�A0�D8�DP\XJ`VXAPJ
8D0A(B BBBGtt���4�t���aF�A�D �j
DBE]AB$�t$��)E�D�G IJA�t,��E�Lu0��E�L u4��]z�P�(<ux���E�D�L@m
AADhu���5](|u��4F�A�D �eABH�u,��^B�B�B �E(�D0�C8�G`�
8D0A(B BBBHL�u@��w
B�B�B �E(�A0�C8�G�4
8D0A(B BBBIhDvp���F�B�B �E(�A0�D8�GPeXE`I8A0A(B BBBHPH
8G0D(B BBBE(�v���7F�D�G �bABh�v���(F�B�D �D(�J0�8H@T8A0N
(D ABBHK
(G ABBI_
(A ABBK$Hw���)E�D�G IJA$pw���1E�A�G TJA$�w���)E�D�G IJA$�w���1E�A�G TJA$�w���)E�D�G IJA$x��1E�A�G TJAL8x���F�B�B �B(�A0�E8�D�
8A0A(B BBBE(�x���IE�A�D W
GDE(�x���3F�D�D �XDD,�x���E�C
D��L���@
H y$���E�J@
AHH4y��3B�E�B �B(�A0�A8�G��
8A0A(B BBBF(�y��.F�D�F �OHB�y��@�y��7F�E�E �D(�A0�DpW
0A(A BBBHz��.E�G `A@$z��H\�K�A �D(�H@�
(D ABBGX����$hz��YE�f
EC
EF
A,�z$�E�C
F���F��U
G\�z�fF�E�A �D(�G0Z
(D ABBFC
(D ABBDG
(D ABBH8 {$
��F�A�A �V
ABGR
AEH\{�
�|p{�
�MF�B�B �B(�A0�D8�D`c
8F0A(B BBBI]
8A0A(B BBBIx
8A0A(B BBBF�{��GHX
PNX|��T�B�A �D(�G0Y(C ABBE����H0����q
(A ABBI4l|��lF�A�E �l
FBHXADH�|���O�A�D �l
CBKG
�A�B�FNFBJ���0�|d��r�A�A �M
ABDP���0$}���B�A�D �G0j
 AABD(X},�Wk�A�J TD�D��}`�/E�X
KFl�}p�O�F�A �A(�D0Q
(F ABBIV
(F ABBGD(C ABBD����H0����0~ �QE�G�G Z
CAODGA(H~L�Wk�A�J TD�D�Ht~��LF�B�E �E(�D0�D8�D��
8A0A(B BBBCd��Z��L�~p��F�B�B �A(�A0�M
(D EEOJV
(D EBBEL$��LF�B�B �E(�D0�D8�D��
8A0A(B BBBA� �Y��(����E�A�G0Q
AAHH�0�	F�B�B �F(�A0�A8�GP?
8D0A(B BBBK`�� �ON�B�E �E(�A0�D8�Gp�
8A0A(B BBBA�������Hp������8d��#�B�B�F �G(�G@�
(A ABBDH���$�F�B�B �B(�A0�C8�Dp�
8A0A(B BBBI8��(�F�B�D �A(�DP�
(A ABBG0(�l,�LE�D�G Y
GAODFAH\��,�"F�B�B �E(�D0�A8�G`�
8A0A(B BBBH\��l/�vF�E�A �D(�G0Z
(D ABBFG
(D ABBHS
(D ABBD0��0�bE�D�G j
DAAUGA8<��0�NF�B�A �D(�G`�
(A ABBD x��2�bE�G U
IF0��(3�7F�D�A �D@u
 AABHLЂ44��F�B�B �B(�A0�A8�G��
8A0A(B BBBH �t9��L4� :�F�B�B �B(�A0�A8�G��
8A0A(B BBBD ���<�gE�G0T
AA,��<=��F�A�A �l
ABI4؃�=�IE�C�G0g
GAJD
FAE��>�VVjL(�,?��F�B�B �A(�D0�{
(A BBBG^
(C EBBN$x��@�2E�D�G LJA���@�DE�l
G ���@�SE�^
E^
H(�4A�BF�D�G �Y
ABK<�XA��F�B�B �A(�A0�G
(A BBBF0L��A�F�A�A �D@{
 AABEL���B��F�B�B �A(�A0�s
(A BBBJX
(A BBBAЅ4C�)E�X
CD�DC�+Hb�\C�9a��C�?SI4��C�>SIL��C�	`��C��H@h
Hd9�R����4D�E�L ��8D��E�GPR
AA І�D��E�GPU
AF$�E�)E�D�G IJA<�E�F�I�B �H(�A0�o
(H IBBJ\��V�*p�W�	��W�'A�D�G �� W�cA�8��xW��B�B�A �A(�G0�
(D ABBA$���W�2A�D�D cDAH �X��B�B�B �B(�D0�A8�D`>
8D0A(B BBBD4l�XY��B�D�D �z
ABIc
ABJ(���Y�]B�A�A �
ABE���P��,(��Y�9B�D�A �bFEH��Y��B�B�B �B(�A0�D8�DPs
8D0A(B BBBGH\�H[�QB�B�B �B(�D0�A8�D@#
8D0A(B BBBG��\\�5���\�,E�_؉�\�,E�_H��\�F�E�E �E(�A0�A8�D@�
8D0A(B BBBE@�t]�CHT��]��F�B�B �D(�A0��
(A EBGA[(A EBGD��d^��r�A�D �L
�H�B�KACBB���P ���؛�N��D���^��r�A�D �L
�H�B�KACBB���P ���4�sN��PX�L_��N�B�B �A(�A0��
(C BBBBQ(F BBBC�����P���_��N�B�B �A(�A0��
(A BBBBQ(F BBBC�����L�D`��F�B�B �A(�A0��
(D BBBEN
(K DDEE4P��`��F�A�D �Q
ABANKIH��<a�'F�E�B �B(�D0�A8�D`�
8A0A(B BBBDHԌ d��F�B�E �A(�H0�U
(D BBBKA(G EBBH �td��F�B�B �A(�D0�d
(D BBBCm(D BBB<l��d�
F�B�B �A(�D0��
(D BBBE���e�E�THȍ�e��B�B�D �A(�D0�
(A ABBEG(E AEBH�Pf��F�B�A �D(�D0m
(D ABBI(D ABBH`��f�4F�B�B �E(�G0�A8�Gp�
8A0A(B BBBHH���i��F�E�B �B(�D0�A8�FPn
8A0A(B BBBF���J��H�Xk�OF�B�B �B(�G0�A8�Gp�
8A0A(B BBBB|X�\m��B�B�B �B(�D0�A8�DPH
8A0A(B BBBEs
8D0A(B BBBH+
8F0A(B BBBF(؏�r�]E�G j
AIN
AA��r�<O�Q
HL($��r��E�D�G0n
CAF(P��s��E�D�G0v
DAE |�8t�FA�G p
AG8��dt��F�B�D �A(�D0�
(A ABBEܐ�t�HI�u�!HQ�u�nE�w
D`(�lu��F�B�B �E(�A0�D8�F`�
8D0A(B BBBCW8I0H(B BBB8��w�jF�B�A �A(�GP
(A ABBKHȑ<x�F�B�B �B(�A0�D8�D`�
8A0A(B BBBG8�y��F�B�A �C(�G@q
(A ABBF@P��y�tF�B�B �A(�D0�D@&
0A(A BBBGH���z�6F�B�B �E(�A0�G8�DP
8A0A(B BBBH��}�	8��}��F�E�D �D(�J��
(A ABBA00�t~��F�D�D �J��
 AABA0d� �F�A�A �J��
 AABF8�����F�E�A �D(�G��
(A ABBA ԓЀ��E�G0~
AE\)�E���H��JHl
L��E��<<�h��vF�B�A �A(�J�
(A ABBD4'XE�������	4�����TE�A�F ]
AAED
MAE(ܔ����E�A�J��
AAA,�l���F�H�H �8
FPL8���JH}T�P��i h�����A�D0Y
AA(��8��A�D�DP�
AAF����̕��.H�4���B�E�B �E(�H0�D8�F@C
8H0D(B BBBI@,����B�B�E �D(�H0�G@�
0A(A BBBC8p�t���B�E�A �A(�F@�
(A ABBC��0C��AAA(Ȗ���E�G \
CELF�mC��8�l��%B�E�D �D(�G@�
(A ABBE8D�`���B�D�D �^
ABEP
ABA0��ԍ��B�A�A �D@J
 AABJH�_B�� ȗ|���A�G0C
AD8����
F�B�A �A(�D@p
(A ABBAH(�<��DF�B�B �B(�A0�A8�DpS
8A0A(B BBBA8t�@��{B�E�A �A(�DPb
(A ABBA,������B�I�D �M
AFM��� HT$����)E�D�G IJA �$��E�L<�(��6E�j X�L��qE�D C
AC0|�����F�A�A �D@|
 AABDD�n@��8ę ��TF�B�A �D(�DPW
(A ABBB8�D���F�B�A �A(�GP�
(A ABBG��?��8P�ĥ��F�K�D �D(�G`_
(A ABBK$��(��)E�D�G IJA��0��E�LК4��)E�S
HD�D��.�`��@�l��KE�A�G c
AAF�
DAKD
IAE\�x��)p���������7Hb
FF�����HI�����<a(���E�A�D0e
AAG��X���T��#$�p��#8����#L����#`�Ĩ�3t���#����#��(��0��D��04Ĝ`���F�A�A �w
DBKh
ABE��ة�]@�$��|F�B�B �A(�A0�DPu
0A(A BBBCP�<�� h�L��`E�G@M
AA �����lE�G@Y
AA��Ы�NH@E$ȝ�� E�D�D FJA����������HQ0�$��HQH�,��HQ`�4��HP$x�<��xE�A�L `DA�����E�P�����5kОĬ�	���������u@�(���F�B�B �D(�H0�GP�
0A(A BBBHP�Į�sPd�0���P�B�E �F(�A0�D8�FPr
8A0A(B BBBDe������<�����wL�E�E �D(�D0�P(A BBBA�����H�����F�B�B �B(�A0�A8�D`�
8A0A(B BBBAD�p��\�x��p�t��
��p����l����x��
��t��
Ԡp���|�����������
$����Y8�ܰ�:HfP���GE�Al�8��:Hf��`��KE�E�����:Hf�����KE�Eԡ������A@��8���B�E�E �D(�A0�NPp
0A(A BBBA @����_B�I�F �Dp(d���vA�A�D0Z
AAA0��4���B�A�A �G@e
 AABD$Ģг�'E�A�D UFA�س�
�Գ��г�	8(�̳��B�E�D �A(�D�J
(A ABBHd�@��8Oh|�h��2Ob�����3Oc�����?Ooģ��3Ocܣ��+Hb4� ���F�H�A �U
ABIMAB$,�x��KE�D�D {AAT����KDFl�ص� HO����>Dy����HM���� HW̤��RHz
FI�X�� HW�`��:E�t ����+HW8����:E�tT����+HWl�ض�.Hb����>Hu����&HX��0��+Hb̥H��E�Y�L��1H�h�p��E�S �t��%EAK<����@OaT����1DX
LHt�з�$E�T����$E�T�����E�QȦ���9Ha
GD���9E�h
CD�<��9E�h
CD(�\��!<�x��HQ0T����&B�F�D �D`�
 AABA��|��*EAD�����&E�`8������B�B�D �D(�G��
(A ABBF zRx������(2��4�к�9E�kP���	(d���4A�D�D W
AAA����E�V`����M�B�E �D(�D0�W
(C BBBDA
(C JBBFN
(G BBBEL���B�B�A �D(�G0[
(A ABBGO
(F ABBF(`�$��DE�A�DPX
AAD��H��	��D��	(��@��[E�A�J T
AAJ$�t��GE�A�D wDA(�����E�D�D@q
AAA04���>F�A�A �D0�
 AABH8h���F�B�D �D(�Fp�
(A ABBA@����AF�B�E �D(�A0�IP�
0A(A BBBD����qE�K
HX�\��\�h���F�E�D �A(�I0t
(A ABBEG
(D ABBHf
(D ABBA$|���0A�D�D aDA@����:F�A�A �j
ABK�
ABKBIB����H}
Kp8�|���B�B�D �J(�D@o
(A ABBAD����SD]
G@`�4���B�B�B �A(�D0�G`O
0A(A BBBG8�����F�A�K ��
CBBQ
FBA$����:E�D�F dAA<�����D�H�O �D(�N0�C
(A BBBIH���<A�l
A,d�0���F�D�D �S
ABDT������R�B�E �A(�I0�}
�(G� G�B�B�Nb�(A� B�B�B�����KA�(� ��_E�A�G |
HAF80�T��>F�B�D �A(�K0�
(D ABBH8l�X���F�B�D �A(�D0X
(D ABBFL��+��
8������F�E�G �D(�D0g
(D ABBF��_+��
<�H��6F�B�B �A(�A0�
(C BBBK(L�H���F�A�A ��DB(x����E�A�J �
DAA(�����QE�D�D V
DAH0���QE�A�J R
FAGTDD0���qB�A�D �D0p
 EFBHH8�L���B�E�H �H(�D0�A8�DPL
8D0A(B BBBG8�����9F�A�A �j
ABK�
ABI�����$HM
Aܰ���$HM
A4�����TD�A�A �M
ABJpAB00����bA�A�D m
DAHXDA(d�0���A�C�N \
CAF(�����0B�D�D �^AB ������A��
Bz
A<D�(��(�P��mE�A�G {
DAK( �����E�H�G F
DAA<L�����Q�E�D �E(�H0�(A ABBA����(�����TB�A�A �w
ABA$�����)E�D�G IJA����E�Y�����$E�^$����FE�D�D sDA0@���yE�A�G M
DAASDAt�P��UE�n
E(�����}F�D�G �|
ABH,������S�A�I a
FAK`��H�x��hB�B�B �E(�A0�A8�DpW
8A0A(B BBBF�@E&��(L�����E�D�D o
DAAx���,H_��$��(�� ���B�A�H �pAB�� �����N�o
C`�(���sE�F�K o
AAI4�p��)HR
AP����&HO
Al����$HM
A�����+HT
A�����/A�m0������A�H�J J
DANLCA�0��$HM
A�D��1E�]
A,�h��,@�t���r�A�A �_�D�B�p����1E�]
A����$HM
A�����A�M@wAHȶ����B�I�E �E(�A0�D8�GpE
8A0A(B BBBH8���tB�H�A �L
CBLA
ABD(P�T��pA�D�G0`
GAL$|����,A�D�G VDA(�����PA�D�G c
DAL@���B�A�D �G0@
 AABFd
 GABJ8�@���F�B�A �A(�D0x
(D ABBI(P����]F�A�A �JDB(|����CB�A�D �tABH�����	B�B�B �E(�D0�A8�Dpc
8A0A(B BBBGpE�!��0����#F�D�D �DP�
 AABA <����vE�K@_
AA(`����VF�A�A �CDB$����BE�D�D kDA$��@��7E�C�G eAA0ܹX��`E�A�D l
DAEVDAD����F�B�B �B(�D0�H8�N@�8D0A(B BBB8X�\���F�E�A �E(�Q0H
(D ABBM����� HW(�����VF�A�A �JAB`غ���tB�B�E �E(�A0�A8�G@�
8A0A(B BBBGT8J0A(B BBB@<����F�B�E �D(�A0�DP�0A(A BBB8������B�B�A �D(�G0{
(D ABBL8����0B�B�A �A(�DP�
(A ABBH,������F�A�D �S
ABG4(�\���E�A�D �
AAHO
AAG8`����F�B�A �A(�D@q
(A ABBK<�����F�B�B �A(�A0�g
(A BBBF$ܼ����E�H�D sAA����mHW
ID $�@��dE�K�M
AAzRx��� 5��(x�\���E�D�G@n
AAH����=��<��	̽8��+HT
A�L��KHf
A(����EE�D�N Z
DAA0����+HT
A8L�����F�J�D �H(�D0K
(D ABBA �����E�b
IS
E�����9E�sȾ��%HV���0���>E�J�G T
AADKAA(����<���	P���	d���	x����	���������ZE�T��8��	п4��
�X
EF�$��wH@i
A����!HX$����xH@j
A @���pE�I0[
AA d�P���A�G0A
AF(�����ZE�D�N0{
AAA ����|A�N`P
AHH�L��>B�B�B �E(�D0�A8�F`�
8A0A(B BBBD0$�@���B�B�D �DP)
 ABBFX���Kl��[n`��`��D�
HtK��@���}B�D�D �M
ABF^
ABGqAB$��<��G�i
H^�R�}L ����F�E�B �B(�D0�D8�J��
8A0A(B BBBALp�d��B�E�B �B(�D0�D8�G�u
8A0A(B BBBGH���|F�H�D �D(�D0z
(D ABBCR(D ABB(�8�7F�G�D �XDEH8�L��F�B�I �B(�H0�A8�G`i
8A0A(B BBBJ����HN(����AF�A�H �_AN���� HW����?Hg
IF������E�W0���bH0T
A L�(�pE�S0Q
AAp�t�!����!����5Hl<����E�D�D 
DAGP
AAFIDA��
�2E�T
A�8
�	 �4
�(H_H8�L
��F�E�B �B(�A0�D8�D`V
8A0A(B BBBH<�����B�E�D �A(�G��
(A ABBI��`�	��\�Xds�O���
���	 ����E�G Z
AI<���6E�G hAD\���F�A�A �o
ABFT
ABIH
ABE$����,E�D�J IJA����RH^
J0����7B�A�A �F0
 AABDL����B�B�B �B(�A0�A8�J�0
8A0A(B BBBA�"S��	��4�#$��P��E�J�
AH�� �=He
KDH��( ��B�E�E �D(�H0�
(F BBBEA(C BBB((�� ��B�A�D�s
ABCHT�#�gF�B�E �E(�A0�A8�Dp
8A0A(B BBBGU(��8��%��F�E�G �A(�D0G
(F ABBG,���%�iE�A�G�.
AAAzRx����$���T��'�_h��'�_|�((��H@
HkL���(�%B�B�B �B(�D0�A8�D�+
8A0A(B BBBJ:����T,�(�P,�/F�D�D �SGB@�T,�>E�\
E8\�x,�B�B�A �C(�G@^
(A ABBE��\-�H��X-��B�B�E �B(�A0�D8�GP
8A0A(B BBBE(���.��E�D�G S
FAF$� /�$KN0<�8/�/F�D�A �G@�
 AABEp�40�ME�Q
Jh ��d0�OE�D@s
AC���0�-aH���0��B�E�B �E(�A0�C8�G@�
8A0A(B BBBH8� 2�)B�B�D �D(�G@`
(A ABBGP�4�"HY<h�,4��E�D�D �
DAJO
FAJtFA���4�-H`��5�-H`T��5��F�E�E �A(�A0�G�
0A(A BBBE{�O�U�A� zRx�������(�
��h�l8�|�h8�,��d8��A�C
I������
HX�B
��,���;�	A�A�G�J
AAKzRx����$���*H8��D�F�B�B �E(�A0�A8�D`�
8A0A(B BBBK0��`F�BF�H�B �E(�A0�A8�DP<��|G��F�B�B �A(�D0�I
(A BBBA,���H�lE�A�I�k
AAD(�N�<�N�THh
HW\�XN�E�Qx�\N�HN��dN�8HW
A���N�	���N�,E�f4���N�xF�D�D �r
MBILMB��N�!E�[0��N�'E�aL�O�LB$d�@O�LE�H�F vAA��hO�8���O�>(���O�oH�D�G �y
DBN(��P�[F�D�D �yMB8�8P��F�E�E �D(�D0�\(A BBB,H�|P�eE�C�D��
AAEDx��T�;F�E�E �D(�D0�G�@
0A(A BBBID���V�F�E�B �A(�C0�I��
0A(A BBBA�|Z�&E�M
FI(��Z�LoX@��Z�T��Z�h��Z�.E�h���Z�IE�CD��[�
F�H�A ��
ABGQ
CBBA
FBA���[�PE�`
P�\�XE�h
P( �T\�0F�D�D �UDD8L�X\�GF�E�B �D(�D0�c(D BBB(��l\�3F�D�D �UGD���\�8���\�JF�E�B �D(�D0�f(D BBB��\�9E�o8 ��\�[F�B�B �A(�A0�<(H BBB\��h�'H[t�i�!H��i�}F�B�B �B(�A0�D8�G@�
8D0A(B BBBE4��Pj��E�D�D \
GAOD
AAJ��j� ��j�5HQ
GPH@��j��B�B�B �B(�D0�D8�DP|
8A0A(B BBBE��Xm�PE�F���m�/Hb���m����m�#0���m��E�P�K j
AADdNH�(n�VE�e
Fa<�hn�,Hc8T��n��F�I�A �V
ABG�
ABD8���o��F�E�D �A(�D0{
(D ABBH8��Xp�F�H�A �g
ABGL
AKH��,��
�(q�0�4q�$D�@q�FE�H�D rAA8l�hq��F�E�E �D(�I0�_(D BBB8���q�LF�E�D �I(�F0c(A ABB���q�����r�@��s�!AAK(��s�oD R
JD�0t�HH\�ht�GE�l
O4x��t��A�D�G ^
AADD
DAG��u�&AAD��(u��D t
H���u����u�;T b��u��A��
F84��y�@B�B�A �C(�G`?
(A ABBD8p��|�5B�B�D �D(�Gp�
(A ABBE���}�!H X,���}��B�A�A �@
AIH���~�BL��~�B�B�B �B(�D0�A8�J��
8A0A(B BBBGX�����u p����A�D \
AF8�����B�B�D �D(�D@y
(A ABBA������D X
D��(���4��BA�G xA �d��AA�\
A<����)H`T����EE�0p���RE�A�G _
CAHSAA����HL����AA�\
A��L���D X
D �����VvTN
JI�e&���,�8��9DR
JH�\��IHg
IP(h�����A�D�G0z
AAH@�� ��	B�D�D ��
ABAz
ABCeAB4����oF�A�D �J
DBEGAB�$��FE�h
A ,�X��MA��
CA
OP����sA�ql���AAK����+����jDf
NI
G��X��FpN�����!HQ$�����DA�D�G uAA�Г�E�Q$0�ԓ�3A�D�D dDA,X����B�A�D �G0s AAB��L��H�����JDZ
BiH������B�B�B �B(�A0�D8�G@�
8C0A(B BBBAH����A�A�D _
AAIq
DAJg
DADDDALT�����B�B�D �A(�D0v
(D ABBD4
(F DBBF��0���D Y
CD��������VA��
G�����H �
H���<DR
J[0���<DR
J[P�$��<DR
J[p�D��<DR
J[��d��<DW
E[�����<DW
E[�����!HQ�����&HV�Ԟ�~|eW<�8��iA�A�G m
IAHD
AABLDD(\�h���A�D�G@d
AAF8������B�B�A �A(�G`�
(A ABBA(������A�A�G@a
AADl��T��AB�E�E �E(�D0�D8�D�h�W�K�A�X
8A0A(B BBBFD�T�N�A�`�4��mH0_
A(|����A�D�G@�
AAD<��l��-B�B�A �C(�J�
(A ABBHH��\��sB�G�E �B(�A0�A8�Dp�
8A0A(B BBBJ,4�����A�C�G��
AAH<d� ��:B�B�A �D(�L��
(A ABBCH�� ���F�A�A �JPVX_`DhDpDxD�MP`
 AABA8��ı�!B�H�D �D(�G0s
(D ABBK(,����5F�D�A �TLE(X�̲�5F�D�A �TLE(����`E�A�G t
AAE0�����F�A�A �D0_
 AABI(�����}E�A�D0`
AAE0����F�A�A �D0{
 AABE0D����zE�A�G t
AAM`ADHx�̴��B�B�E �B(�A0�A8�Gp
8A0A(B BBBD(�� ��A�A�Gpc
AABzRx�p�� <���L ���B�B�B �B(�A0�D8�J��
8A0A(B BBBJ@p�����E�A�DPdXJ`DhDpDxD�IPW
AAF,��@���B�D�A ��
ABE@�����E�D�DPNXJ`DhDpDxD�MP`
AAD(����HI(@����_E�D�DPJ
AAADl���B�B�B �A(�A0�J�
0A(A BBBKX������B�B�B �A(�D0�D`ehJpDxD�D�D�M`H
0A(A BBBE0����nB�A�D �G`w
 AABG�D����B�F�B �B(�A0�A8�G���D�G�D�D�D�R��
8A0A(B BBBDd�G�D�D�D�D�N�@��(��*A�D�DPPXJ`DhDpDxD�MP`
AAF���%0$�0��TE�D�D c
AAFTFALX�\��VF�B�B �B(�A0�A8�G��
8A0A(B BBBH(��l��iE�D�D `
DAN0�����FE�D�D V
AAKSAA(����=E�D�D V
AAK(4����=E�D�D U
AAL(`����EE�D�D V
AAS(����EE�D�D V
AAS(��<��=E�D�D V
AAKH��P���F�B�B �B(�A0�A8�D`�
8D0A(B BBBFD0�����B�E�E �D(�G0�W8\@F8A0F
(A BBBBx�<��UE�\
WI��|��%E�LD�����QF�A�A ��
ABEp
ABEW
ABF<������E�D�D j
AAGT
DAGZMAx<�����B�B�B �A(�D0��8J@DHDPDXD`I0�
(A BBBG~
(A BBBCw8J@DHDPDXD`O0d��l���F�R�E �E(�D0�A8�D���G�D�D�D�D�Q�X
8A0A(B BBBCh ����	F�H�E �E(�A0�A8�G���~�D�D�D�D�I�a
8A0A(B BBBA(��h��_E�D�DPJ
AAA@������B�A�G �S
ABHn
ABGtABH������F�B�E �E(�A0�A8�G@0
8D0A(B BBBH(H����:F�D�D �\GDt����2fH������F�B�E �B(�D0�A8�DPR
8D0A(B BBBIL��p��xF�B�B �B(�D0�A8�G��
8A0A(B BBBFp$����0F�B�A �A(�D0�
(D ABBIL
(A DBBKL
(A DBBKr
(D ABBA(��\���E�D�D \
KAK(�����E�D�D h
DAF��D��$H[�\��$H[ �t��$H[8����$H[P����$H[h����$H[����$H[,����yE�D�D�
AAET��<��F�B�B �B(�D0�A8�DP�X_`LXAPW
8D0A(B BBBD ���4���H���(HS
A0d����F�A�A �G@�
 AABI$��L�,E�D�J IJA��T�LH C����qH0c
A(�����E�A�G@�
AAG4 ���F�A�A ��
ABCaDBX���>HNp���bE�d
g���9E�Y
JI��8�(��4�UE�D�GPs
AAK8��h��
F�N�A �A(�D0a
(A ABB(���<���
P���
d����x�L�(E�b��`�HQ4��h��A�D�D v
DAL]
DAN(����iA�G�D0Q
AAA8���B�B�D �G(�D@T
(A ABBC$L���aE�D�G0LCA0t���kF�D�D �D0a
 AABI$��,�A�F�D �AAL���
B�B�B �B(�A0�D8�G�'
8A0A(B BBBK4 ���aB�E�D �D(�D0G(A ABBX��&H ]p�$�$H [��<�1E�L ^A@��\�EB�B�B �A(�A0�GPE
0A(A BBBD�h��d��`�(�\�<�X�P�T�d�P�x�L���H���T� A�N
AI8��T��F�B�D �D(�F@]
(G ABBI����AAK8���PF�A�K �!
ABJD
AEAT�� �*HX
Ep�� �?Ha
GI
A��� �?Ha
GI
A(��!��E�H�D �
DAA<��!��F�I�B �A(�A0��
(D BBBAH�x"��B�E�B �E(�A0�C8�DPK
8C0A(B BBBC<h�$��B�B�E �A(�A0�i
(E BBBA$��|$�^M�U
F`�H�M4��$�eH�J�I W
F�A�GYFAA����$�)K�XE� $�%��A�S i
ABLH�l%�JB�H�E �B(�A0�A8�G�^
8A0A(B BBBF0��l7��A�F
B�E�E�E�D�4
H\��8�{B�B�B �B(�A0�A8�D��
8A0A(B BBBDo�H�c�F���$�(@�=�%A�A�D0�
AAF`l�>��B�B�E �D(�C0��
(A BBBGi
(A BBBHx
(A BBBIH�T@��F�B�A �A(�G0c
(D ABBCD(M ABB��@�-H`(4��@�KF�A�A �a
ABA`��@�0E�R
A|��@�,(��A��A�A�G t
AAA���A�OE�p
K,��A��F�D�A �\
DBK�B�	�B��H��
X<��B�%(P��B�aP�A�G {AAK��,|�(C��F�K�A �u
ABF ���C��E�J@k
AE�DD�tH@\
D��D�L��D�YH�0E��F�B�G �E(�A0�A8�G��
8A0A(B BBBEL`��G�YB�B�B �B(�D0�D8�G��
8A0A(B BBBK\���I��F�B�B �B(�A0�A8�G� I�!�
8A0A(B BBBEI�!U�!L�!A�!�M�;A�]
R\,�(M�B�I�B �B(�A0�D8�G�A
8A0A(B BBBJa�\�	I�A�����N�wF�B�E �E(�D0�A8�G���M�R�A�f�M�O�B�o�J�Q�B���M�P�A�Y
8A0A(B BBBKD�M�T�C�L,��S��F�B�L �B(�A0�F8�G�q
8A0A(B BBBA0|�hX��F�H�A �GP�
 AABA�=�ۼ�0�Y�F�A�A �G`�
 AABAzRx�`���$Tۼ�L,�Y�<F�B�B �D(�A0��
(A FBBEW
(A FBBF4|�Z�iF�E�I �K(�D0x(D ABBT��Z�F�E�B �E(�A0�D8�GPx
8A0A(B BBBHDXX`FXAP(�[��E�K�D0o
AAK@8,\�F�B�E �A(�A0�FP�
0A(A BBBG|�`�L��`��B�E�B �B(�A0�A8�D� 
8A0A(B BBBE\�Tc��F�B�B �B(�A0�A8�G�c�L�F�F�f��
8A0A(B BBBH$zRx��������,ټ�<|�e��P�A�D �G0� DABG���E0���\�(f�YF�B�B �E(�K0�A8�L��L�F�F�S��
8A0A(B BBBF0Wcؼ�L0k�fB�B�B �E(�A0�A8�G��
8A0A(B BBBH@�4r��B�B�E �D(�A0�F@K
0A(A BBBI(��r�NE�A�GP�
AAC ��s�QE�G ~
AA 0t�lE�L0T
AA(8|t��E�A�D0|
FACdu�WH I
A�Tu�	�Pu� HO
AL�Tu�@F�B�B �E(�A0�D8�D��
8A0A(B BBBG@Dw��F�E�E �D(�D0�JPg
0A(A BBBAD�w�X�w�l�w�(��w�vE�H�D ^AA�}��E������R�D��s����5D0�
KlԂ��R�H�B �B(�A0�G8�d
0A(B BBBEK0A(B BBBD������H8������(�4��<A�A�F y
DAJ(�H��_A�I�G@�
AAFD�|��B�E�B �B(�D0�A8�D@�8A0A(B BBBL T��hB�E�E �A(�E0�
(A BBBF@(A BBBpt��MH�����B�E�I �B(�A0�D8�D@�
8D0A(B BBBF8�d���B�G�A �D(�G0H
(D ABBJ@��1B�D�E �A(�A0�F@c
0D(A BBBGP��bd@��y4x����R�N�F �TDEE���N ���8����F�B�A �A(�DP
(A ABBD$�x��3E�D�D cAA(	����E�L�D@u
AAA,@	���K�A�D �mABA���Lp	d��8F�B�B �B(�A0�A8�M�
8A0A(B BBBBL�	T��F�F�B �B(�A0�A8�D�N
8A0A(B BBBBH
��F�E�B �E(�D0�D8�I`�
8A0A(B BBBG\
��p
���
���
ܼ��
ؼ��
���
��HO$�
��8E�A�D fFA��	(���	<���P��	d��x���
����
������	����	0�����B�D�D �G@I
 AABB$���cA�A�N PAA8���	L���	`��	t��	���"E�\���>E�x$�$��.E�A�D aAA�,��E�h��$
t��7A�D�D dDA8
���4E�Y
BSX
���E�Pt
���-E�c�
ľ��
о�(H_�
���
��DE�~�
(��$E� @��UE�L }
AA(|��E�VD���E�V`���E�X|��� KT����	H�����B�B�E �E(�D0�D8�Gp�
8A0A(B BBBJ8����F�E�A �D(�D0�
(C ABBIH0����B�E�E �E(�D0�D8�DPl
8D0A(B BBBJ4|���DF�D�D �M
CBHVCB4���eA�D�G j
AAHD
GAL0�H��EE�D�G M
CAGXCA d��(4p��|A�D�DPY
AAD`���"HY(x����A�G�D0K
AAG0�����A�D�D Q
DAA{DA����EE��0��E�S4��A�L,8��#MNDP��DQ�M
B$`���-E�D�G XCA$����TA�}
BD
LC,�����B�D�D ��
ABF ����TA�J B
AA(���:F�D�D �fCB$0���>A�D�D kDAX���	l���'A�D�G ,���9A�C
I�����
D,���1A�C
I�����
F�(��U{Yp��C0����B�A�A �G@y
 AABH4LH���F�D�D �S
CBJjABd�����N�B�D �D(�G0X(D� A�B�B�p0����P����H0����J(A ABB0�(��NI�A�G0WFAA��H0��D D��pJ�B�A �D(�G0W(F ABBF����H0����0hl��F�A�D �G0�
 AABG�X��~Hq����&����8����F�B�A �A(�Dp�
(A ABBH���QH C
A4��	H��CH u
A(d@���E�D�G0~
AAH����HI����yH S
E�@�������-H`�������HU���!0��!0D ���F�D�D �G@v
 AABAx���
��������@8�����F�B�A �A(�DP�
(A ABBCL�D���F�B�A �A(�F0g
(F ABBFR
(F ABBE(@����E�D�D@M
AADl��E�L���"HX�4��8E�Q
JW�T��.He�l��HP�t��HP@|��BF�B�B �A(�A0�D@h
0A(A BBBH8L���$F�B�A �D(�DP�
(A ABBG�|��0�x��.F�D�D �DPw
 AABC8�t��SF�B�A �F(�GP~
(A ABBF@����B�B�B �D(�D0�GP�
0A(A BBBD P����A�D �
AAt���lD J
B����GA�p
GN0����B�D�A �D0w
 AABJ����jW�r
GW��(���E�A�I0P
AAG(D����E�C�G0p
AAG(pT��yE�D�GP_
AAG(�����E�A�G@}
AAD �l���E�I u
AD������� ��� @(����F�B�B �D(�A0�GPd
0A(A BBBF4l���yE�A�I o
AAHY
AAE����	����:HQ O(H0I(���yE�A�G0E
DAI$`��+E�C�G WCA0,h���F�A�A �D0�
 AABC0`$��rE�D�G b
NAO_AA8�p��@F�B�A �A(�GP�
(A ABBB(�t���E�A�GP�
AAJ@�����@4���F�B�B �A(�A0�Dpx
0A(A BBBHT��� h���TA�G k
DI(�(��JE�A�G0x
AAI$�L��@E�A�G fGA8�d��rB�B�A �A(�G`�
(A ABBH���(0���A�A�D@J
AAFH\���B�E�B �B(�A0�A8�Dp�
8A0A(B BBBA$�꼼�L�8���B�B�B �E(�A0�A8�D�
8A0A(B BBBH@���F�B�E �A(�A0�D@�
0A(A BBBG4P���B�A�D �r
ABD�AB�l��	<�h���f�A�D B
AAADD�A�O ��$�����E�k
H`
H`( 0��3F�D�G �WDB0 D��E�PL H��	$` D��1E�D�D ^DA � \���E�T m
AI� ���3E�I `D$� ���F�E�D �A(�D00� ���F�G�D �G@�
 AABC((!l��NE�A�D \
JAE0T!���IE�D�G m
AAADCA@�!����Q�I�G l
N�H�MD
AAJIP�C�0�!���F�D�A �G0Z
 AABH$"���ME�G�G wAA(("��MJ�A�G jDAG��(T"���E�A�D@P
AAD0�"���GE�D�G \
GALDAA4�"��\F�H�D �A(�G0n(J ABB�����#��H#��\F�B�E �E(�D0�A8�DP�
8A0A(B BBBH`#��BH t
A<|#8���J�D�G Q
FACDCAH��H ��(�#���NF�G�D �[
ABE4�#��E�A�D p
DAAz
CAE( $����E�N�G0u
AAG4L$x��JF�D�A �g
DEEAFB8�$���&E�A�G@YHMPOXO`I@b
AAB0�$����A�GPZ
AEiX]`HhHpIP(�$ ��yE�A�G0E
DAI$ %t��,E�D�J IJAH%|��	H\%x���F�E�E �B(�A0�D8�DPe
8A0A(B BBBF8�%��`F�E�G �D(�D0X
(J ABBE�%�	�%�� KT&� $&��E�D@V
AHHH&��F�B�B �B(�A0�A8�GP_
8D0A(B BBBG0�&p�F�D�D �Dp~
 AABDH�&L�dB�E�B �E(�A0�D8�DP�
8A0A(B BBBIt'p��B�B�B �E(�D0�D8�G@t
8A0A(B BBBHQ
8A0A(B BBBEG8G0F(B BBBH�'��#F�B�B �B(�A0�A8�D`�
8A0A(B BBBA�'��HI4�'���B�D�D �_
ABDI
DEN((�<(�P($�d(0�x(<�<�(H�YA�D�G Z
AAHU
DAFDCA0�(h�+F�A�A �G@F
 AABG4)d	�jF�D�D �I
DBCAFB8)�	�HL)�	��B�E�E �E(�D0�C8�GP�
8A0A(B BBBA�),
��)8
��)D
��)P
�8�)\
�3F�B�A �A(�G0�
(D ABBB $*`�`E�T q
AA0H*��yF�H�A �G0�
 AABI8|*���F�B�A �D(�J0
(A ABBAL�*L
�bB�B�E �E(�D0�D8�G�
8A0A(B BBBA+l�%E�_$+��"E�\@+��%E�_@\+�� B�B�B �A(�A0�D@�
0A(A BBBA\�+���B�B�I �D(�D0�n
(A BBBFN
(A BBBKE(I BBB,��,��(,,��BK�F�D �
HDN(X,��:E�F�D HA�,���,���,���,��XL�G�,(�'HZ�,@�'HZ-X�9 -��f4-��FH-�"\-8�p-D��-@�	�-<��-8��-D��-P� �-\�,KN R.p�/KNC R$.��2KN C(C0R D.��5KNC C(C0R$h.��8KN C(C0C8C@R(�.��;KNC C(C0C8C@R(�.��>KN C(C0C8C@CHCPR,�.��AKNC C(C0C8C@CHCPR0/�DKN C(C0C8C@CHCPCXC`R4L/8�GKNC C(C0C8C@CHCPCXC`R�/P�>�/|��/���/��	�/���/|��/��0��$HJ Q,0��'HJC QL0��*HJ C(C0Q l0��-HJC C(C0Q$�0��0HJ C(C0C8C@Q(�0��3HJC C(C0C8C@Q(�0��6HJ C(C0C8C@CHCPQ,1�9HJC C(C0C8C@CHCPQ0@1�<HJ C(C0C8C@CHCPCXC`Q4t1 �?HJC C(C0C8C@CHCPCXC`Q4�1(�BHJ C(C0C8C@CHCPCXC`ChCpQ�1@��1<��2�� 2��42��H2��\2��
Hp2���B�E�E �B(�D0�H8�IP�
8A0A(B BBBD4�2X�_A�]B MBM
DDJ NAA4�2��WB�D�H �j
ABEA
DBI�,3���A�g
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HH
HHt�����$,4H�(A�G�G IGD,T4P�qB�F�G �F
ABH(�4��#B�D�D �UABL�4���A�A�D }
AAKe
AAID
DAGi
DAJH54��B�B�E �E(�D0�A8�D`�
8A0A(B BBBEL5�� KT$d5��,E�J�G IJAH�5���F�B�B �B(�A0�A8�DpY
8A0A(B BBBK�5,��5(�6$�EAD6�EAD886�gB�J�E �D(�D0�F(A BBBt6@�}8�6���B�E�A �D(�D@S
(A ABBG0�6 �AA�G�G O
GAJDGA`�6<�MB�E�E �D(�D0��
(K BBBKb
(A BBBGV
(A BBBK\7(��4p7 ��F�B�A �D(�D0�(C ABB0�7� �da�D�J T
FAFLFA(�7� �vA�A�J0~
AAD<8!��O�E�D �A(�G0t(C ABBD����H8�!�HN`8�!�
t8�!�	<�8�!��A�D�G(g0P(A J
DAEv
DAE �8�!��Q�J V
AF�⢼�9�"�(9�"�iE�F�G0O
AAAH@9�"��B�B�B �B(�A0�A8�G`i
8A0A(B BBBA�9($�E�O�9,$�HK�94$�bE�O
LA<�����"�9p$�E�T:t$�>E�h
C,:�$�E��
J(L:�%�mB�M�F �}
ABKx:�%�E�QL�:�%��F�B�B �B(�A0�C8�D�k
8A0A(B BBBA�:'��:'�;'� ;'�	4;'�	H;�&�EADd;�&�&H]4|;'�}F�E�D �A(�D0](F ABB$�;P'�UA�D�G CDA$�;�'�kE�A�G [AA<�'�S<(�E,<X(�A@<�(�ET<�(�pHgl<()�&E�\�<<)�6�<h*�AAD�<l*�)�<�*�!�<�*�:TM
AH�<�*�UF�D�D �K(N0G8G@FHCPCXC`ChCpF AABHH=�*�VF�D�D �L(C0K8J@GHFPCXC`ChCpF AAB@�=�*�OF�D�D �K(N0G8G@FHCPCXC`F AAB@�=�*�PF�D�D �L(C0K8J@GHFPCXC`F AAB<>+�IF�D�D �K(N0G8G@FHCPF AAB<\>+�JF�D�D �L(C0K8J@GHFPF AAB4�>(+�CF�D�D �K(N0G8G@I AAB4�>@+�DF�D�D �L(C0K8J@M AAB4?X+�;F�D�D �K(N0N(A AAB4D?`+�<F�D�D �L(G0U(A AAB(|?h+�5F�D�D �bAB(�?|+�1F�D�D �^AB(�?�+�-F�D�D �ZAB(@�+�)F�D�D �SDB(,@�+�&F�D�D �SAB$X@�+�#E�D�G IGA4�@�+�5F�E�D �C(�G0I(L ABB4�@�+�>F�E�D �D(�F0T(D GBB@�@�+�CB�E�H �D(�A0�JP�
0A(A BBBH��ʚ��HHA�,�B�E�E �B(�D0�D8�G@}
8D0A(B BBBI�A�,�9t(�A-�xA�G�G0x
AAG@�A`-�OB�G�G �Y
ABLA
ABLACB$Bl-��B�E�A �G(�G0@B�-�H`�g@\B.�dF�A�A �L
ABIe
ABHPAB�BD.�Xf�Q�Q��B�.�WDs
AU4�B�.��F�B�A �A(�G0f(D ABB4C/�WQ�G�G Y
C�K�JDAA,PCD/�VP�D�D �mFBC���$�Ct/�MA�D�G ~AA0�C�/�-F�A�A �D0
 AABA�C�0�HK�C�0�:(D�0��A�C�G0�
AAA84D`1��F�B�E �D(�A0��(A BBB,pD�1��Z�D�D �_
ABDH�DD2��F�E�A �D(�G0u
(C ABBD@(C ABB8�D�2��B�B�G �A(�F0�
(D ABBC4(E�4�yp�D�G b
FADDG�A�4`E�4��B�E�D �D(�G@�(M DBB�E�5�8�E�5��B�B�A �D(�D@k
(A ABBBD�E6��K�D�D ��
ABBA
CBJNABA���0F�6��(DFP7��A�A�G0|
DAFpF�7�'E�a0�F�7�"B�A�D �G0`
 AABF0�F�8��F�A�D �G0
 AABK�Fp9�-E�gG�9��yoH[�ꔼ�DG�9�eyf\G̔��
pG$:�ave�G����
4�Gh:��B�G�D �_
ABAv
ABG`�G�:��B�B�B �B(�A0�A8�G`�
8D0A(B BBBHL
8M0A(B BBBN8HL<�HLHX<��B�B�B �B(�A0�A8�Lp�
8D0A(B BBBA�����0�H�>�?A�D�G \
GAHDAA �H?��DDJ TJ,I�?�xZ�D�D �J
ABAP4I0@�*o�A�A �D0Z
 AABEh���F0���Z���R0����IB�!�I(B��I4B�%$�IPB�XE�cK QAR�I�B�$HWJ�B�%$J�B�6E�D�D cDA@J�B�kO�A�A �`Jᑼ�
tJC�AAD(�JC��A�A�D �
AAJ4�J�C��E�A�D {(E0A8D@IFAA  �JD�lHCK A(C0Q K\D�lHCK A(C0Q <K�D�lHCK A(C0Q `K�D�lHCK A(C0Q �K@E�lHCK A(C0Q �K�E�lHCK A(C0Q �K�E�lHCK A(C0Q �K$F�lHCK A(C0Q LpF�lHCK A(C0Q 8L�F�lHCK A(C0Q \LG�lHCK A(C0Q �LTG�lHCK A(C0Q �L�G�lHCK A(C0Q �L�G�lHCK A(C0Q �L8H�lHCK A(C0Q M�H�lHCK A(C0Q 4M�H�lHCK A(C0Q XMI�lHCK A(C0Q |MhI�hHK A(C0Q �M�I�hHK A(C0Q �MJ�hHK A(C0Q �MLJ�hHK A(C0Q N�J�hHK A(C0Q 0N�J�hHK A(C0Q(TN0K�sE�HO A(F0IF@�N�K��F�F�A �A(�D0u8E@AHRPI(F ABB@�NL��F�B�D �A(�D0�8B@JHDPI(F ABB8O�L�zB�K�A �|(E0A8G@I A
ABD4DO�M��B�B�A �D(�G0K8H@QHGPI00|OhN�B�J�B �B(�A0�F8�DP�OTO�%A�G�J L�OdO�MB�B�B �B(�D0�A8�G�P
8A0A(B BBBBL PdS��B�B�E �B(�A0�D8�D�
8A0A(B BBBE,pPW��E�C
M������
A8����	T�P�X�F�B�B �B(�D0�D8�K`�hNpBxC�P8F0A(B BBBE`TQ�Y��F�B�B �B(�D0�D8�K`�hOpBxR�M8F0A(B BBBE`dQ[��D�n
N��Њ��H�Ql[�9B�E�E �E(�A0�A8�G�L
8A0A(B BBBH\�x���	�QLc�YE�C�G L>M���,Rxc�@Rtc�
(TRpc�=E�A�G Z
AAG0�R�c�JE�A�J d(B0C8B@IDA�R�c�EAD�R�c�kbP�R�c��F�A�A ��
ABCd
DBFW
ABF@
OBG(<S�g��A�A�F@X
AAAhSLh�-Jb�Sdh�-Jb�S|h�-Jb�S�h�0Je�S�h��S�h�u�S$i�\Ht
D[��m���d$TPi��F�B�A �D(�D0s8M@W8A0_8J@U8A0D
(A ABBFt
(A ABBFH�T�j��F�B�B �B(�D0�A8�D`�
8A0A(B BBBE\����`�T�n��F�B�B �E(�D0�D8�DP�
8J0D(B BBBL`
8I0A(B BBBF�I���`dUq��F�B�E �E(�D0�A8�DP�
8M0A(B BBBN\
8G0A(B BBBL|�߆��`�U8s�xF�B�B �B(�A0�A8�G`b
8M0A(B BBBKx
8A0A(B BBBF@VTt�}TV�t�hV�t�|V�t�0�V�t�]E�D�K s(B0A8G@IAA�Vu��Vu���V�u�W�u�	W�u�	(W�u�	H<W�u��Q�A�G I
AADW
CAEDFAE��H ���C-���L�W�u�]	F�B�B �B(�A0�A8�D��
8A0A(B BBBFd�ׄ��X�~�	X�~�(X�~�H<X�~� F�E�B �B(�K0�A8�Lp�
8A0A(B BBBF�X́�(�Xȁ��E�A�J0F
AAH@�X,���F�E�E �D(�A0�DP�
0A(A BBBGY��NH @
A(Y��0<Y(���E�J�G h
AAHlGApY���cH r
F�Y؃�
8�Yԃ��F�B�D �D(�GP
(A ABBB�w����
8�Y$���B�B�B �A(�A0��(A BBB$,ZȊ�OE�I�K sAA<TZ���F�E�E �A(�D0��
(D BBBAH�Z����F�B�B �B(�A0�A8�GP�
8D0A(B BBBA8�Z���B�B�A �D(�GP�
(A ABBE,[���i�A�D �I�A�B�HL[���LF�B�B �E(�A0�A8�Dp�
8A0A(B BBBA$�[���.E�D�M IIA�[��	�[��!X�[���F�B�B �D(�D0�D@x
0D(A BBBG�
0D(A BBBG4D\`���B�A�A �S
ABF�AB|\��	H�\���B�B�E �E(�A0�A8�Gp�
8A0A(B BBBH�\8��7Di
CF@�\X��-B�E�E �D(�D0�DPF
0A(A BBBJ@@]D���A�C�F F
CADN
ACFT
CAH0�]���bE�D�D t
FAHJFA(�]ܘ��E�D�G �
AAE@�]���	F�B�B �A(�A0�G@v
0A(A BBBG�W�~��
H<^H���F�B�B �B(�D0�A8�Gp1
8A0A(B BBBE0�^���\A�D�M0g
AAEYAA�^���H�^����B�E�E �D(�G0�U
(A BBBEG(A BBB|_؟�kB�B�E �B(�A0�A8�DP�
8A0A(B BBBG�
8A0A(B BBBEO
8A0A(B BBBG(�_ȣ�gA�J�F@N
AAA�_��dH[�_d���_`��yJN`Ȥ�QH {
E(`��<`��P`��d`��x`���`��8�`���F�B�D �D(�DP�
(A ABBC�`ȥ� �`ĥ�gE�G @
ACa��	(a��3E�m$Da0���H^
JI
GO
I@�y{���a��<�a���E�O
DO
IH
PQ
OH
HH
HH0�{���a|��;Vdb���JHi
Abا�ME�b
I8b���Lbة��A�0db���B�D�D �GP
 AABGȠiz��0�bX��>E�D�G O
AAGDLA0�bd��>E�D�G O
AAGDLA`cp���F�B�E �E(�D0�D8�GPX
8J0A(B BBBLU
8P0A(B BBBJxc̬�@�cج�
F�E�B �A(�D0�D`�
0A(A BBBG �c����F�D�A �G@�cP��@EADdt��E� (d|���E�F
EOLd���kHbddP�� HW|dX��E�W�d\��
�dX��?�d���C$�d���:E�I�D eAA�dد� e��kE�G U
DA(4e0���E�A�G0w
AAA<`e����r�D�G �J
�D�B�KAABD���8�e���F�B�A �A(�DP�
(A ABBK(�e���?E�A�G V
DAHf���E�T,$f����F�A�A �g
ABFHTf ��hF�B�B �E(�D0�D8�D@�
8D0A(B BBBK�fD��X,�f����A�C
F���M��c
F|(/v��`�f���B�B�B �E(�A0�A8�D@G
8C0A(B BBBDd
8J0A(B BBBI\gx���D��
APxg���F�K�K �J(�E0�D8�DPeXE`HhJpP8F0A(B BBBT�g���hF�E�B �E(�D0�A8�DP�XJ`FhQpI8F0A(B BBBAP���t��
X8h����B�K�E �E(�D0�A8�G`DhHpXxI�V`x
8A0A(B BBBHD�h0���F�I�D �D(�R0N8M@BHAPR(A ABBA0�_Qt���h���,HK J(B0L8i���AB�H�B �D(�D0�a(A BBBLi����E�k
EHli8��4B�B�B �B(�A0�A8�D@�
8D0A(B BBBI$�i,��_E�D�D OAA<�id��cF�B�B �A(�A0�7
(A BBBA, j���:E�C
H����K��
HPj���ydj��8Hh|j8��8E�k�j\��5He�j���5E�h$�j���[E�C�G }FD �j���yH\
DF
BHk<��_HF
JF08k|���E�D�D ]
AALPFAlk���4Hc
E�k���$HW �k���E��
LA
A �nq��4�k���_E�D�G �
AABD
CAHDX:q�� $l����H�
Ci
E�q��\lH��EAD`xlL���B�B�B �D(�C0�
(A BBBJE
(A BBBDZ
(A BBBG�d�p���l���	m�����mX���B�D�D �<m����Q oTm���=E�lm���'EAD�m���#E��m���$HW�m���#�m��;HP
HV�m8��G0nt��1F�A�A �G@k
 AABB`4n���YB�E�B �E(�A0�A8�J���H�L�B�M��
8A0A(B BBBH���n��	�nh��)H�n����F�J�D �D(�J0j
(J ABBE|
(G DFBI�eqn��D o��-G�D�D ���A�B�^ ���i
�A�B�LX�n��4|o���dE�A�D �
AAEH
AAF�[�m��P�o���&k�G�G nA�A�W ��SJ�A�R ���
J�A�EP\vm��
 0p����A�GPh
AGLTp@���B�B�B �B(�A0�A8�G�l
8A0A(B BBBI0�p��UF�A�A �D��
 AABIzRx�����$�l��	0q��aB�B�B �B(�A0�A8�D@@q��8F�D�D �(`q��mF�D�D �u
ABJ,�q8�:A�A�G�
AAJ8�qH�WB�E�B �D(�D0�q(J BBB�ql�rh�aH@S
A(r��HB IDr��aH@S
A(`r�E�A�DP�
AAA �r��E�D@
AA$�r��A�G�
AK4�r��HF�E�D �D(�G0c(A ABB8s��F�E�D �D(�D@U
(A ABBA(LsH	�AE�D�G N
JAGxsl	�PHY
O8�s�	��B�B�A �D(�G�h
(A ABBBP
�i��-`�s �bB�E�E �E(�A0�C8�G���J�D�C�R��
8A0A(B BBBA��i��	\t�
$pt�:E�D�G cAAX�t,��F�E�E �B(�D0�D8�DPIXI`LhBpNPk
8A0A(B BBBG$�t��iN�G�H�`
HLu���O�B�B �B(�H0�D8�DP�8A0A(B BBBA������,lu���O�D�E ���A�B�\�u(��O�B�B �B(�A0�A8�G@~8A0A(B BBBJ������H@������H�u��%F�B�E �B(�A0�A8�DP8A0A(B BBBHv��2E�[
HE8hv��IF�B�D �A(�D0�
(A ABBI�v��%HV�v�� �v��=HdB A(D0I,�v�B�D�D ��
ABF$w��(8w��E�M�D D
DAA$dw` �JE�A�D sDD8�w� �MF�L�A �A(�D0
(A ABBA�w�"�0�w�"�F�A�A �DP|
 AABDx�#�D @
D\,xx$�Z	B�B�B �B(�A0�A8�G�
y�
B�
k�
A�
�
8A0A(B BBBI$zRx��
������,'e��	\�x<-��B�E�E �B(�A0�A8�J�.�Y�N�A�]
8A0A(B BBBI�2�d��(<y�1�FF�H�F �jABhy�1�VE�P�y2��y�1��y2��y2�oL�[�yh2�Odj,�y�2�	A�F
B�E�G��H��
F�;�c���l8z|;�F�B�E �E(�A0�A8�Gp�xH�A�H�NpD
8F0A(B BBBE�xJ�B�H�Ppl�z�=�NF�E�E �B(�A0�A8�Gp�xE�A�J�IpD
8F0A(B BBBG�xN�B�H�MpL{|?�1B�E�E �J(�D0�G8�G��
8A0A(B BBBE��c���`|{XA��B�B�E �E(�D0�A8�J��
8A0A(B BBBD��K�G�A�Q��{�E��{�E�H|�E�W	B�B�B �B(�A0�A8�Dpz
8A0A(B BBBF�*c���h|�N��pB�I�B �B(�A0�A8�G�T�K�`�A�.�K�]�A��
8A0A(B BBBA�I�F�A�R�@��b���}@��$}<��UE�G�
AE�@}t��B�G�B �B(�D0�A8�M�a
8A0A(B BBBFd�M�P�B�O���J�t�W�K�L�Q�O�I���}���RB�G�B �B(�A0�D8�S�[
8A0A(B BBBFv�M�P�B�O���E�k�D�e�L�Q�O�M�l�L�P�O�I�4d~`��yH[B OAD
GBB OAD
H �~���-HO
IBA I,�~���
E�H
D��E�I��1
H�@/a�����XH���B�B�B �B(�D0�A8�G��
8A0A(B BBBH���`��%0x���F�D�D �GPq
 AABAL�X��=B�E�B �E(�A0�D8�J��
8A0A(B BBBJ�H���T���\t`
'`��0@���F�D�D �D`�
 AABH0t�p��F�A�A �D`�
 AABH���_��0�����F�A�D �G`d
 AABFL���B�B�E �E(�A0�D8�J��
8A0A(B BBBF$zRx��������,_��H|�����B�B�B �B(�A0�A8�D@�
8J0D(B BBBEȁ,��%T܁H���F�J�B �A(�D0�M@j
0D(A EBBLU
0J(D HBBI4����H�&^��	@\�8���B�B�B �D(�A0�D��
0A(A BBBH zRx�������(�]��8؂���F�H�D �D(�J@}
(J DBBI$|z]��	�(����iB�B�B �B(�A0�D8�L�,�Z�W�[�E�J�P�I�S�`
8A0A(B BBBJD�F�J�K�R�0�����E�G T(H0G8B@I T
AAD�0��F�B�D �C(�G0W8K@DHBPI(A ABBC0$,����H J(H0G8B@ID 4T���E�D�F (J0E8B@IAAF $��X��H J(H0G8B@ID 8�����F�D�D �@(J0E8B@I A
ABD@��� F�A�A �F@�HKPEXB`X@T
 AABAȅc[��8H���� E�A�D@�HJPEXB`X@T
AADHG[��$�����2E�C
G���
JX����F�B�B �E(�A0�D8�D`hJpHxB�I`T
8A0A(B BBBH<����H Z(H0G8B@I D
He(J0D8B@I D
F\\����0B�E�B �B(�D0�D8�FpXxK�G�A�IpX
8A0A(B BBBA�����І���(����1F�D�C �VAF(����4F�D�C �[EB0<���4F�D�D �G`�
 AABK(p���TE�D�Gp�
AAJ�����f
B�E�B �B(�H0�D8�J�m�K�L�A�k
8A0A(B BBBE��B�D�B�I���E�I�A��0�X��7<4���F�J�D �A(�J�0
(A ABBAt�0
�	<��,
�F�K�A �A(�G�J
(A ABBA<Ȉ��B�E�D �D(�R�M
(A ABBDL����F�B�E �D(�C0�l
(A BBBIB
(A EBEA(X�|�6F�D�D �]AB����,����A�C
B�E�E�H�D�i
K@ȉ�}F�B�B �D(�D0�F@�
0A(A BBBF,�H�_A�C
B�I���K�w
G\<�x�4F�B�B �B(�D0�C8�I��
8A0A(B BBBBD�L�O�A���<V����D�(Ċ@�^E�A�D A
DAAX�t�~F�E�B �E(�A0�A8�G���Q�K�A�d
8A0A(B BBBHTL���&B�B�E �E(�D0�A8�Gp�x]�FxApT
8A0A(B BBBFh��p �
B�H�B �E(�A0�D8�J�{
8A0A(B BBBK,�B�]�A��
�B�G��T��,$�*�lA�C
F���E�D�
J(T�P-�1F�D�D �SAD(��d-�0F�D�D �SADD��h-�aF�I�E �D(�D0�\8Y@F8A0A(A BBBD��-�`F�I�E �D(�D0�[8Y@F8A0A(A BBBD<��-�F�E�E �D(�D0�[8C@P8A0A(A BBBL���-�zF�E�E �E(�D0�D8�G@rHIPP8A0A(B BBB,ԍ .�TE�A�G ](^0IAA$�P.�BE�W] FAA\,�x.�F�E�E �E(�D0�D8�G��
8A0A(B BBBC��M�O�A��lR�� ���1�A�J Q
AC@Ď2�WF�J�G �F(F0I(A C
ABEQGB�,2�H0J
F$��2�FH x
AX@��2�F�I�B �B(�A0�A8�Dp�xz�YxAp�
8A0A(B BBBD(��(A�E�D�G0|
AAALȏ�A�B�E�E �B(�A0�D8�G�9
8A0A(B BBBC�G�EH0w
AH4�@G�B�E�E �E(�D0�D8�Dp�
8A0A(B BBBK`���H�#F�B�E �E(�D0�D8�G@^
8A0A(B BBBGl
8O0D(B BBBIH�`I�oB�B�B �E(�D0�A8�D`�
8A0A(B BBBFx0��K�JB�B�B �B(�A0�D8�D@k
8A0A(B BBBJa
8H0D(D BBBIe8G0A(B BBB(��XL�2F�D�F �^AB(ؑlL�2F�D�F �^AB<��L�A�A�F0]
GAKH
AAFxFAD��L�$X��L�3E�D�M IKD���L����L�$���L�3E�D�M IKD�L�|E�oD�XO�B�E�D �G(�F@JHBPJHA@n
(A ABBE4��O�H��O��E��Hd�`R�F�B�B �B(�A0�A8�Dp�
8A0A(B BBBAT��T��F�B�B �B(�A0�A8�D`phLpNhH`l
8A0A(B BBBF0��V�`F�D�D �D0|
 AABA8<��V�F�E�E �D(�A0�b(A BBB8x�W��B�B�A �D(�GP*
(A ABBH���X�	Ȕ�X�E�O8��X�F�B�A �D(�D@f
(A ABBAL �DY�dF�E�E �E(�D0�C8�J�\
8A0A(B BBBD(p�d[�A�D�G0J
DAE\���[��B�B�E �F(�A0�A8�GP�
8A0A(B BBBHD8J0A(B BBB��H\�	0�D\��B�A�A �G@|
 AABED�]�	X��\�Ha�b�t�0]�(��,]�A�G�GPC
AAD���]�	@Ȗ�]��B�E�E �D(�D0�G`Y
0A(A BBBD�H^�	 �D^�@4�@^�3B�B�E �A(�A0�J@�
0A(A BBBEx�<`�	@��8`�3B�E�B �A(�A0�J@�
0A(A BBBEЗ4b�	$�0b�2E�C
G��A
H8�Hc��F�B�A �A(�D@�
(A ABBE8H��d�F�B�A �D(�D@f
(A ABBA8��Pe�F�E�E �A(�D0�b(A BBB,���e�E�C
D��E�K��
D zRx������(�G��\(�<g�$F�E�E �E(�D0�D8�G�
8A0A(B BBBG��J�O�A��G��4���j�zF�E�D �D(�G0R(D ABB8ԙ@k�QF�E�E �D(�D0�a(M BBBH�dk�F�E�E �E(�D0�A8�J�x
8A0A(B BBBJ0\��m�gB�D�A �G��
 AABHL���q��B�K�B �B(�A0�J8�D��
8A0A(B BBBGDF��
\��u�F�E�B �E(�A0�D8�J�a�M�S�A��
8A0A(B BBBK\T�0z�bF�E�B �B(�D0�D8�J�
8A0A(B BBBFf�P�S�A�H��@}�,B�B�E �E(�D0�D8�Gp�
8A0A(B BBBB|(.E��(��F�A�D ��GG@���T���	(h�|�fF�A�A �JJE$����JE�G�4
AGzRx��� nD��8����B�E�D �C(�F`W
(A ABBG(�,��<�8��(P�4��1F�D�D �UAF(|�H��4F�D�D �ZEBL��\��F�B�B �B(�A0�A8�F�^
8A0A(B BBBDT����F�B�B �B(�A0�D8�D@^HBPBXB`I8D0A(B BBBE@8P�t���F�B�D �A(�D0�
(D ABBI0��B������	����Ȟ���`ܞ���?F�B�E �E(�A0�D8�J�"
8A0A(B BBBCt�W�B�A�L�@�Ԋ�OdjX���l��������������� ����ԟ��E�Q���
(���WF�D�A �DAB\0�D��B�E�B �B(�A0�A8�DP�
8A0A(B BBBAD8F0A(B BBB$����EA�P�H fDA����̠��:H\
LI0�8��lA�K�L0o
AAGYAA0 �t��ME�D�N W
DAEODA$T����>E�A�G iAA|����kHw
Aj�����dRN8��P��B�I�A �A(�DP�
(A ABBAH��F�E�H �D(�G@x
(L HDBH(L HDBH<�X���B�E�E �B(�D0�D8�Fp�
8A0A(B BBBH��ܐ�:H\
LI�����-����lD E
G(آl��F�I�D ��AB4����F�B�I �D(�K0�(D ABB<����p(P���iF�D�A �UAG|�H��N�����6�����5Dp��ؓ�.V(У��fF�F�K �n
ABHL��8��eB�B�B �B(�A0�A8�D��
8A0A(B BBBA0L�X��F�D�C �D0e
 AABF<��ę�}F�B�B �A(�D0�B
(R BBBG����qHa
Gf
JH�d��B�B�B �B(�A0�A8�D`�
8D0A(B BBBH(,�ț�kP�rF�H�E
KJX��� l���E�G 
AD,�����A��
NE
KE
Kb
N8�;��Lԥ���UB�B�A �A(�G0p
(D ABBJ�
(D ABBG$����(HX<�؟� HS0T���B�H�A �D@z
 AABA(��L��A�D�GP{
AAG4����ZB�D�K �n
CBLAFB$���@E�D�F jAA$� ��CE�D�F mAA$<�H��E�p
Kj
VJd����ZHy
OI���� HW���������0ħ��[E�K�D U
AAEhAA��,���(��!HX0$�@��[E�K�D U
AAEhAAHX�l���F�B�B �B(�A0�A8�Dp|
8A0A(B BBBH����!HQ����"HR Ԩ ��E�DPy
AA �����E�K@k
AA ����E�DPv
AA@�d��-H`X�|��l�x����t�������(�����E�H�D �
FOKDԩp��F�B�B �A(�A0�G��
0A(A BBBD�ت�&HV4���)HYL���)HYd� ��LHn
JG��P��)HY��h��@Hf�����	HȪ���]F�E�D �C(�F0\
(K ABBLD(C ABB4����AF�E�D �C(�F0\(C ABBL����*HQ
GI$l�ȫ�wHZ
Fk
EQ
G�� ��*HQ
GI��0��*HQ
GIԫ@��*HQ
GI(�P��E�q
JF
Jq
O` ���I84� ��fH�A�D �e
�U�F�KDABA��� p�T��VH`
HI
GQ�����E�L@�����F�A�A �c
DBON
DKKDAB��4��L���B�B�E �E(�A0�D8�G�
8A0A(B BBBG\�H��!8p�d��B�P�D �A(�P�`
(A ABBC4��ȵ�F�D�K �G(�L0o(C ABB�0��2HeH��X��AF�L�B �L(�G0�A8�D@�
8A0A(B BBBH0H�\��vF�D�D �D0�
 AABB|����%E�S�����H`p K��L��!E�S`Ԯ`��F�B�B �B(�A0�A8�DP�
8C0A(B BBBFH8F0A(B BBB8���
$L���E�A�J qFAt�p��+E�_l������F�B�B �L(�A0�A8�J��
8A0A(B BBBH��B�K�A�q�A�M�A�$zRx��������,[1��	L<�����F�B�A �A(�D0�
(C ABBGD
(F ABBA0�1��
(��0���B�A�DPp
ABF��XL�Z
Jd0�4��E�D�D0h
FALuKA0$����E�D�D0k
FAIxKA(X����|E�D�D0l
CAK��P��1 ��|��lE�D a
HN�����)(��;F�A�A �oAB4�����RF�A�A �t
ABANAB4� ��+,H�<��YF�A�A �F0F AABH6/����X��2E�c
HA`��x��EB�E�I �A(�H0��
(A BBBIC
(A BBBFc
(D BBBK�d��/$��.��	\8�l��B�B�E �D(�D0�o
(D BBBFQ
(D BBBEA(P BBB�����3E�mF�-��0ȳ����F�A�D �D@�
 AABD���-��
D�D��F�B�B �D(�D0�G��
0A(A BBBD4X����E�H�D0e
AAHy
AAE@����|B�A�D �C
ABCT
ABIADBԴP��AAK8�T��lB�E�D �D(�F0x
(A ABBA,����@����t UX�m,��
@l����K�B�D �D(�G0Y
(A ABBEx����$��t��oA�X
G\
Dnص���Fn(����E�G Q
CHe
CH$����A�G�
AGH@�$���B�E�L �J(�A0�D8�D@E
8A0A(B BBBK(�����^B�D�G �q
ABE$�����DE�A�G qDA(���fF�D�A �WABH�X��-F�B�B �E(�A0�A8�DP�
8C0D(E DBBKX�<��$E�^t�P��$E�^��d��8��p��aF�E�E �K(�A0�y(A BBBD����nF�E�E �E(�D0�A8�D@{8G0A(B BBB(����)E�\D����(X����E�K�D G
FAF��P��E�T$��T��EE�D�D qAA(ȸ|��BF�D�K �bAB����+E�^����XE�z
A$,����6E�D�G _AA(T���E�K�D E
AAE8�����F�A�A �M
ABH]
AEG������8���mF�B�A �A(�D@^
(A ABBF0��'��	$4�0��'E�G�>
AE\�8��.H`
Ax�L����H��nE�
L�����2H`
E��BE�O
L\����2H`
E���1Q�_�8��2H`
E(8�\��E�A�G0�
AAId����2H`
E����.E�^
EA����2H`
E��8��.E�^
EAܻH��2H`
E��l��H�Q�p��2H`
E0����fQ�i
FZ�P����2H`
El���	����2H`
E���(���F�L�A �A(�D0�
(G DEKFA
(G DDIGW
(K DDBLu
(G GIDHb(C ABB ����;HZ
AG�$��P����2H`
El����;HZ
A\G^$�������2H`
E�����H}
KP
H�G$���H��2H`
E$�l��Hz
NQ
OL
EH�#��D����2H`
E`����;HZ
APH�#��H����F�E�D �G(�N0K
(A ABBKD(D ABBHܾX��F�B�B �E(�D0�K8�J`Z
8A0A(B BBBD(���?<�H��&HWT�`�� h�\��PE�F T
IH����������E������!4п4��F�J�D �A(�D0t(A ABB����VE�P$����JL�r
B@���(L�[\�(��
p�$��Y��p��RL�x
D�����)H`�����)H`H����rF�B�B �D(�I0�G�
0A(A BBBD���)$0�4��1E�A�G _CAX�L��fH X
AXt����F�E�D �D(�D0k
(F ABBCV
(A ABBDH(F ABB����HK����HK(����E�D�G@{
AAC$,�X��,E�A�D ZFA$T�`��.E�A�D ZED|�h��_H Q
A�����`H0R
A�����"E�X����"E�X����E�T4���MF�D�G �g
CBCIAB$@�4��AE�H�G gDAh�\��E�Y��`��bD0X
A�����$H[�����HV�����eD0[
A��(��$H[�@��HV�H��iH0[
A8����HOP����HN0h����F�K�A �G@�
 AABC(��8��@F�D�D �U
GBD8��L��WF�B�A �D(�G0\
(C ABBH0�p��F�D�D �N@a
 AABG$8���FE�M�D jDA$`���FE�M�D jDA��<����8��&H��T��F�B�A �D(�G0y
(A ABBEz
(F ABBC�����DHl
DG���HU4���HTL����QH0C
Ah�<��|�8��YD0O
A��|��!�����*E�d�����*E�d�����*E�d$���>E�H�D gDA$(���>E�H�D gDA0P���F�K�A �G@\
 AABG�����9A�Y
NI(�����E�D�GP�
AAF8�����JF�B�A �A(�G0�
(D ABBH(����E�H�G f
CAB(8�<���E�H�G h
JJH,d���F�H�A ��HI(��`��,B�D�A �TJB@��d���F�B�E �D(�D0�G`�
0A(A BBBB0��lF�A�D �D0�
 AABA@8�<�-F�E�B �A(�D0�DP	
0A(A BBBAL|�(�T�F�B�B �B(�A0�A8�J��
8A0A(B BBBA,��8��uE�H�D aAA`�����F�B�B �B(�A0�A8�G��G�D�D�i�
8A0A(B BBBJ�2���t�0��JE�=��`��%AA^��t��%AA^�����;

L�����F�E�I �I(�F0a
(F ABBAD
(C ABBAL4�0��-F�E�B �B(�A0�C8�G��
8A0A(B BBBA$���QE�A�D DAA��H�^������ �>H p
A��D��P��\�,�h�@�t�T���h���|���������������������������������0��D��X��l�(���4���@���L���X���d���p���|���� ���4���H���\���p�����������������������������$�$�0�8�<�L�H�`�T�t�`���l���x�����������������������(���<���P���d���x����������� ���,���8���D��P��\�,�X�@�d�T�p�
h�l�|�x���4�!��P�H y
G����H {
E��8	�zH |
D���	�b��	�~ �d
�^4��
�(H��
�&\��
�>p��C��P�3��|�����q��T�|4����A�A�D �
CAAG
AAA�d
�H y
G,��
�H {
EH�L�zH |
Dd���x������������������������������,�(�@�4�T�@�h�L�|�X���d���p���|�������������������0���D���X���l������������������$���0���<��H� �T�4�`�H�l�\�x�p����������������������������������$���8���L��`��t� ���,���8���D���P���\���h��t����(���<���P���d���x������������������������������,�(�@�4�T�@�h�L�|�X���d���p���|�������������������0���D���X���l������������������$���0���<��H� �T�4�`�H�l�\�x�p�����������������������}H��,�XF�E�D ��
ABFg
AECv
AED4�@,�UOaL��,�(K\Hd��,�F�E�B �B(�A0�D8�G`�
8C0A(B BBBH8���0�B�B�D �D(�G��
(A ABBA0���1�B�D�A �J�{
 DABA0 �2�B�D�A �J�l
 AABA$T�p2�KE�G�D qADH|��2�B�B�B �E(�A0�D8�D��
8A0A(B BBBA0��L3�B�D�A �J��
 DABA���3�AAK(��3�RE�D�G z
AAA(D�4�RE�D�G z
AAA(p�D4�RE�D�G z
AAA(��x4��A�D�GP�
AAEH��L5�B�B�B �B(�A0�C8�D@�
8D0A(B BBBJ0�6�F�I�A �G�i
 DABA0H�\6�F�I�A �G�i
 DABA|��6� HT(���6�E�I�G�f
FAA0��$7�F�I�A �G�i
 DABAH���7�SB�B�B �B(�A0�C8�DP�
8A0A(B BBBA0@��8�F�I�A �G�p
 DABA0t�9�F�I�A �G�p
 DABA��l9� HT(��t9�E�I�G�m
FAA0���9�F�I�A �G�p
 DABA8 �D:��F�B�I �A(�A0��(A BBBL\��:�B�B�B �E(�D0�A8�M�	
8A0A(B BBBHL���?�VB�B�B �E(�A0�A8�J�	
8A0A(B BBBF0���A�F�I�A �G�u
 DABA00�4B�F�I�A �G�n
 DABA0d��B�F�I�A �G�r
 DABA0��C�F�I�A �G�k
 DABAD��hC�|F�B�B �A(�C0�G�*
0A(A BBBI8��D��B�B�D �A(�J��
(D ABBA0P�DE�F�I�A �G�p
 DABA0���E�F�I�A �G�i
 DABA0��F��F�D�G �G0�
 AABF���F��E��
E8�hL�J�F�D W
AACO
AAG^��$H��L�OA�A�P nIA$p�M�7E�I�G _AA0��M�RE�I�G M
AADgAA0��HM�^Q�G�G M
AABkAA�tM�.Q�\(��M�SE�A�D j
DAG4H��Y�nB�A�D �@
ABFNMB���Y��X���^�S
Q�B�K �D(�G0}
(A ABBA[
(G� A�B�B�Lr	����4���h�2F�D�G �J
ABBJABp(��h��Q�B�D �D(�G0s
(I� A�B�B�E�
(I� A�B�B�Eq
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E|
(I� A�B�B�E�
(I� A�B�B�E
(I� A�B�B�E
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E+
(I� A�B�B�E�
(I� A�B�B�E`
(I� A�B�B�E�
(I� A�B�B�E`
(I� A�B�B�E�
(I� A�B�B�E
(I� A�B�B�Ek
(I� A�B�B�Ek
(I� A�B�B�E+
(I� A�B�B�EZ
(I� A�B�B�E+
(I� A�B�B�E[
(I� A�B�B�E�
(I� A�B�B�Eb
(I� A�B�B�E�
(I� A�B�B�Eb
(I� A�B�B�E�
(I� A�B�B�E
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�EQ
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E
(I� A�B�B�E 
(I� A�B�B�E|
(I� A�B�B�Ek
(I� A�B�B�Ek
(I� A�B�B�E+
(I� A�B�B�EZ
(I� A�B�B�E+
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�EM
(I� A�B�B�EM
(I� A�B�B�E
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�Ep
(I� A�B�B�E�
(I� A�B�B�E|
(I� A�B�B�EX
(I� A�B�B�E+
(I� A�B�B�E|
(I� A�B�B�E�
(I� A�B�B�Ed
(I� A�B�B�El
(I� A�B�B�El
(I� A�B�B�E
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E`
(I� A�B�B�E�
(I� A�B�B�E|
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E
(I� A�B�B�E;
(I� A�B�B�E
(I� A�B�B�E�
(I� A�B�B�Eq
(I� A�B�B�EL
(I� A�B�B�E<
(I� A�B�B�E
(I� A�B�B�E<
(I� A�B�B�E+
(I� A�B�B�Ek
(I� A�B�B�EV
(I� A�B�B�E;
(I� A�B�B�E�
(I� A�B�B�EZ
(I� A�B�B�E+
(I� A�B�B�E�
(I� A�B�B�Ek
(I� A�B�B�E+
(I� A�B�B�Ek
(I� A�B�B�EN
(I� A�B�B�E
(I� A�B�B�E�
(I� A�B�B�Ev
(I� A�B�B�E;
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E+
(I� A�B�B�E�
(I� A�B�B�EZ
(I� A�B�B�E+
(I� A�B�B�ED
(A ABBFQ
(I� A�B�B�I�
(I� A�B�B�E�
(I� A�B�B�E�
(I� A�B�B�E9
(I� A�B�B�EY
(I� A�B�B�EY
(I� A�B�B�E�
(I� A�B�B�E
(I� A�B�B�E�
(I� A�B�B�EF
(I� A�B�B�E�
(I� A�B�B�EA
(I� A�B�B�E�
(I� A�B�B�E|"����A0�������9�$���9�-E�D�J IHD$���9�-E�D�J IHD�:�	�:�(��9�<�:�	PP�:�%F�A�D �D0q
 CABJj
 FABEn
 FABA���:�	���:�	���:�%E�\���:����:�(E�_�;�,�;�	4@�;�F�I�A �A(�D0i(A ABB�x�l;��V�F�B �B(�D0�A8�DPi
8A0A(B BBBD������AP������D8D�0A�(B� B�B�B�|���<��	F�B�B �B(�A0�A8�D@�
8A0A(B BBBAe
8C0A(B BBBA�
8C0A(B BBBA|�F�8�� F�iB�E�E �A(�A0�s(F EIO��TF�dZM�B�B �E(�D0�D8�G`
8A0A(B BBBA"
8I�0H�(B� B�B�B�E^
8I�0H�(B� B�B�B�E
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Ey
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E`
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Ej
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E0
8I�0H�(B� B�B�B�E
8I�0H�(B� B�B�B�E[
8I�0H�(B� B�B�B�E

8I�0A�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E
8K�0C�(B� B�B�B�E�
8K�0C�(B� B�B�B�E2
8K�0C�(B� B�B�B�E
8K�0C�(B� B�B�B�E`
8I�0H�(B� B�B�B�E 
8I�0H�(B� B�B�B�E�
8I�0A�(B� B�B�B�E�
8I�0A�(B� B�B�B�Er
8I�0A�(B� B�B�B�E 
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E`
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Ej
8I�0H�(B� B�B�B�EW
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E9
8I�0A�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E@
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�EH
8I�0H�(B� B�B�B�ET
8I�0H�(B� B�B�B�EH
8I�0H�(B� B�B�B�E
8I�0H�(B� B�B�B�Ep
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Ej
8I�0H�(B� B�B�B�EK
8I�0H�(B� B�B�B�EL
8I�0H�(B� B�B�B�EP
8I�0H�(B� B�B�B�E�
8K�0F�(B� B�B�B�EK
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�EH
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�EV
8I�0H�(B� B�B�B�E

8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Ey
8I�0H�(B� B�B�B�Eh
8I�0H�(B� B�B�B�EH
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Er
8I�0A�(B� B�B�B�E
8I�0H�(B� B�B�B�E
8I�0A�(B� B�B�B�E�
8I�0H�(B� B�B�B�E

8I�0A�(B� B�B�B�E
8I�0H�(B� B�B�B�Ej
8I�0H�(B� B�B�B�E�
8K�0C�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8K�0C�(B� B�B�B�Ev
8I�0H�(B� B�B�B�E�
8I�0A�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0A�(B� B�B�B�E�
8I�0A�(B� B�B�B�EO
8I�0H�(B� B�B�B�E 
8I�0H�(B� B�B�B�E~
8I�0A�(B� B�B�B�E�
8I�0H�(B� B�B�B�E
8K�0C�(B� B�B�B�Eh
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Eb
8I�0H�(B� B�B�B�E�
8I�0A�(B� B�B�B�E�
8I�0A�(B� B�B�B�Ex
8I�0H�(B� B�B�B�E�
8I�0A�(B� B�B�B�E�
8I�0A�(B� B�B�B�E�
8I�0H�(B� B�B�B�E
8I�0H�(B� B�B�B�En
8I�0H�(B� B�B�B�En
8I�0H�(B� B�B�B�En
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�E�
8I�0H�(B� B�B�B�Ey
8I�0A�(B� B�B�B�E�
8I�0A�(B� B�B�B�E�
8I�0H�(B� B�B�B�E8
8I�0H�(B� B�B�B�E~
8I�0A�(B� B�B�B�EM
8I�0H�(B� B�B�B�E+
8I�0A�(B� B�B�B�E�������A`������ ����XE�H0D
AA��DQ�m
BC,��3D@D��B�A�D ��
ABHV
CBEA
FBG@�����B�B�B �A(�A0�Gp�
0A(A BBBF4�8��[B�A�D �@
ABFDAE$`���E�Gp�
AI,��%AA^H��%AA^8d0��nF�H�D �D(�G0~
(D ABBE8�d���B�B�A �A(�G0E
(D ABBE8����B�D�D �P
ABCQ
DBEDL��B�A�D �^
ABHD
FBLv
JBE�`��W/B�E�B �I(�D0�H8�GPT
8D0A(B BBBJ�
8G0A(B BBBE<
8A0A(B BBBF�
8G0A(B BBBJ
8D0A(B BBBEE	
8D0A(B BBBE�

8D0A(B BBBE<H|���B�H�H �A(�D0��
(A BBBA,���qF�G�D �W
ABA(�\��FF�D�D �k
ABE<����B�B�H �A(�D0��
(A BBBFH$`��F�H�E �E(�A0�G8�DP0
8A0A(B BBBA@p����F�E�M �D(�A0�G��
0A(A BBBAD�����F�E�M �D(�A0�G��
0A(A BBBA�8�����@$��#8��fG0Pt���B�A�A �D0�
 AABE����GB�B�A �A(�D0F
(D ABBG�
(E ABBJP
(D ABBOr
(A ABBHH
(J ABBIT
(K CDBHu
(G CEBJ
(L HBBE(D	���GE�H�K ]
AAIp	���%AA^�	���^ZF�	 ��M[H4�	���uj�F�A �D(�M0j(A ADB<�	���E�G a
DOc
ADe
EN}
AA`8
���xB�B�B �E(�D0�A8�G`�
8A0A(B BBBHL
8A0A(B BBBJ�
���,K��
B�
���E�p
KT@�
L���F�B�B �A(�A0�D`�
0A(A BBBH����Hj
A8����Hs
ETp��
hl��'E�^����-E�d����	����H����F�B�D �A(�G0X
(G CBBFD(A ABBL��F�B�B �E(�A0�D8�G�%
8A0A(B BBBFHd ��F�E�B �D(�A0�Z
(D EBBGA(A BBBH�d��F�E�B �D(�A0�Z
(D EBBGA(A BBB4����wF�E�A �A(�G0\(A ABB<4
��F�B�B �A(�C0��
(A BBBAt
��,�
��{F�A�A �G0g AABd�
,���O�E�E �E(�D0�D8�DPU
8A0A(B BBBG0������HP������H ��F�B�E �D(�A0�m
(D BBBGA(A BBBHl�F�B�B �A(�A0�I
(A BBBD\(G BBB�L��H�9M�jA��l�.E�dL���F�B�B �A(�A0�E
(D EBBJY
(A BBBAT �
l�,8�4�fF�B�B �A(�A0�R(A BBB�h�,���,�������� 4�4��,H��\H	�,pd	���	���	���	��
��
�%AA^�$
�$0
�<E�I�J aAA`�ѻ�(@4
�tE�C�G J
AAEl�
�eH^
A��
�>��8��N�A�A �_
ABFQCBB����x�9ZH���F�B�B �B(�A0�A8�DP�
8A0A(B BBBAHLH�F�H�B �E(�A0�A8�Dp�
8C0A(B BBBHH���F�E�E �B(�A0�D8�DpG
8D0A(B BBBAH���F�H�B �E(�A0�A8�Dp�
8C0A(B BBBE(0T�kE�D�D z
AAGH\��/B�E�B �B(�A0�A8�GP�
8A0A(B BBBD,�|�~�A�A �qABD���L����B�B�B �B(�A0�A8�J��
8A0A(B BBBF(|�%AA^<D��B�E�B �A(�A0�t
(A BBBJL��B�B�B �B(�D0�D8�G��
8A0A(B BBBAd��!�yF�B�B �B(�D0�D8�Gp�
8A0A(B BBBFH
8D0A(B BBBE<�%�P�&�bHd�&��F�B�B �B(�A0�D8�G`Q
8A0A(B BBBA��(���(�
��(���(�-(�(�?E�D�D oAA<,�(�b�E�E �D(�D0�r(D BBBH�����4l)�GF�I�D �i
ABAACB�0)�
8�,)�-F�B�A �D(�G0U
(A ABBA� *�sT�*�d$+�
<�*�
P�*�;\d +�x,+�@�8+�FF�B�B �I(�F0�G��
0A(A BBBEH�D,�RF�B�B �B(�I0�F8�G��
8A0A(B BBBF8X-�QL�A�A �k
�A�B�LAABD���X|-�6l�-�	��-���-�8��-�|�0.�%AA^H�D.�NF�B�B �B(�A0�A8�Dp$
8D0A(B BBBEL,H2��R�L�A �A(�D0U
(A ABBA�(C ABBB����|�2�0��3�YA�A�G {
FAEDCA0��3�iA�C�L H
FAADCA4��3��A�A�D d
AADF
FAC80�4��D`�hOpDxD�D�D�D�D�I`T
A8l(5�D`�hOpDxD�D�D�D�D�I`X
E8��6��D`�hOpDxD�D�D�D�D�I`T
A$��7�YA�J�D GAAx�7�8B�B�E �E(�D0�D8�FP�
8A0A(B BBBF�
8A0A(B BBBKD
8C0A(B BBBH<��ƻ�$��:�hA�A�G \AAH��:�kB�B�E �A(�D0�F
(A BBBEA(C BBB8;�B�H�G �D(�N��
(A ABBC$L�;�0\H
D]SW
At�<�rDGQ U�0=�4<�\=�MB�B�E �D(�D0��
(A BBBEP�l?�B�H�D �B
RFH^
ABOg
FBIS
NIN<8@�4dLT`@�8T`l�@�QDo
E0��@�B�A�D �G0s
 AABA0�(A�B�A�D �G0s
 AABA8��A�]B�A�A �s
DBCJ
ABCH,�B�^B�E�L �G(�D0�N
(A BBBE^(A BBB0x�B�gA�D�G j
AAHdAA(��B�%A�D�G ]
AAE��C�9�(D�9,TD�B�D�C �d
ABHL0�D�B�K�H �H(�A0�GP�XM`WXDPY
0A(A BBBAH��E�B�E�E �B(�A0�A8�D@}
8A0A(B BBBE8��E�iB�B�E �A(�A0�V(A BBBD ,F�-Q�N�G Y
AAGY
J�F�O0��A ��PP H��B�F�E �D(�D0�G���K�L�E�e
0A(A BBBAH� �H�HB�B�H �E(�A0�A8�FP�
8A0A(B BBBK� �I� !`J�RF�q
IDD�(!�J�s<!L�tE�mA�X!lL�%AA^<t!�L��T�A�D aAAD��P ��F
AAH�! M�pDm
A`�!tM��B�B�B �A(�A0�E
(A EBBIj
(D BBBDH
(D BBBF4"�N�%AA^8P"�N��B�D�A �S
ABCI
EBH�"�O�oDl
A�"�O�%AA^�"�O�FDb
A�"$P�%AA^�"8P�%AA^#LP�Qr,#�P�%AA^H#�P�%AA^d#�P�mN0|#Q�IA�C�L g
FABDCA�#4Q�%AA^�#HQ�+�#dQ�n\�#�Q�B�E�E �E(�A0�D8�D@J
8H0F(B BBBFD8A0A(B BBBT$�Q�=<h$R�N�D�G X
M�A�IDAAB��H ���$�R�3A�]
J$�$�R�>A�D�G oAA�$�R�SD%$S�B�B�B �B(�A0�A8�GP�8A0A(B BBBH%�S�ZVb8`%$T�{B�F�B �D(�A0�{
(A BBBG(�%hT�uB�A�D �k
ABK4�%�T�B�B�D �D(�G0n(A ABB$&U�VA�D�G GAA(&LU��yoXOFH&V�Yg(`&�V�RA�D�G s
AAG0�&�V�WA�J�T \
MAGDAAT�&�V�iJ�E�G �D(�G0�`
�(A� B�B�B�HA�(D� E�B�B�H'W�B�G�A �A(�N0B
(A ABBGY(A ABB8d'PW�kB�B�A �A(�D0{
(A ABBA(�'�W�WV�D�G ZAAC���'�W� DY\�'�W�B�E�E �D(�C0�F
(A BBBHu8Z@HHIPQ0A
(A BBBGPD(`X�nB�B�B �B(�A0�A8�G� I� D
8A0A(B BBBA0�(|Y�[A�P�D O
CAHfCA8�(�Y�-B�B�A �A(�GP�
(A ABBHH)�_�A�D�D y
AADa
AAMX
DAKTGA4T) `�cB�A�H �r
JBGHDB,�)X`�jB�D�A �O
ABG\�)�`�IB�B�I �D(�A0��
(A BBBJ\
(A BBBEI(A BBB0*�a�B�D�E �G0N
 FABG(P*b�f^�J _
O�JDA@|*Xb��B�A�D �G0V
 DABEe
 DABDL�*c�5B�D�H �y
YBNu
ABH
FEF-AB+�d�`A�w
A,+8e�fA�}
A(H+�e�{A�I�L {
AAA(t+�e�xB�I�C �
ABA(�+4f�{A�I�L {
AAA(�+�f�A�A�D E
AAA(�+�f�A�A�D E
AAA($,pg�A�A�D E
AAA(P,�g�A�A�D E
AAA(|,Xh�A�A�D E
AAA(�,�h�A�A�D N
AAA(�,@i�A�A�D N
AAA8-�i�B�J�D �I(�G0K
(A ABBA,<-j�B�I�D �O
ABA<l-xj�B�E�J �A(�I0�Z
(A BBBA<�-�j�B�E�J �A(�I0�Z
(A BBBA<�-Xk�B�E�E �I(�I0�P
(E BBBA<,.�k�B�E�E �I(�I0�P
(E BBBA8l.8l��B�E�D �D(�G@a
(A ABBC8�.�l�B�J�D �I(�G0S
(A ABBAH�.`m�B�J�E �J(�D0�D8�G@b
8A0A(B BBBAH0/�m�B�J�E �E(�D0�D8�L@S
8A0A(B BBBAX|/8n��B�B�B �B(�A0�A8�Dp�
8A0A(B BBBD`xP�RxAp(�/�p��A�H�L �
AAA,0`q�rB�D�I �E
ABI840�q��B�E�I �D(�D0�
(D ABBI(p0dr�A�I�L \
AAAL�0�r�B�B�B �B(�A0�A8�D�`
8A0A(B BBBH<�0�t��B�B�B �A(�A0�p
(A BBBA<,18u��B�B�B �A(�A0�p
(A BBBA<l1�u��B�B�B �A(�A0�p
(A BBBA,�1Xv�B�I�D �k
ABC,�1�v�B�A�A �m
ABAH2xw��B�B�J �E(�A0�I8�DPw
8A0A(B BBBA,X2�w��B�I�I �r
ABG(�2�x��A�I�L x
AAA<�2Py��B�B�E �A(�D0�q
(A BBBAH�2�y��B�J�E �E(�D0�I8�DP}
8A0A(B BBBA8@3tz��B�E�D �D(�F0�
(A ABBA8|3{��B�J�I �D(�D0�
(D ABBA<�3�{�B�H�E �D(�D0��
(A BBBD<�3,|��B�J�J �D(�D0�o
(A BBBDH84�|��B�E�E �J(�D0�H8�G@
8A0A(B BBBFH�4p}�B�J�E �E(�A0�I8�D`�
8A0A(B BBBA,�4D~��B�I�D �p
ABFH5�	B�E�G �E(�G0�D8�DP�
8A0A(B BBBAHL5��	B�E�G �E(�G0�D8�DP�
8A0A(B BBBA,�5����B�D�D �u
EBAH�5L��B�E�E �J(�D0�I8�D@�
8D0A(B BBBA86��0B�E�D �D(�D0�
(D ABBFHP6��B�E�E �E(�D0�D8�D@�
8A0A(B BBBH<�6؃�^B�E�E �D(�D0��
(A BBBG<�6���B�J�J �D(�A0��
(D BBBEH7؅�<B�J�E �E(�D0�I8�G@�
8A0A(B BBBC\h7̆�B�J�E �J(�A0�D8�D��
8A0A(B BBBJ��O�^�A�8�7���,B�B�A �A(�D0�
(D ABBFH8���%B�E�E �E(�D0�D8�G@�
8A0A(B BBBAHP8d��(B�E�E �E(�D0�D8�G@�
8A0A(B BBBAH�8H��2B�E�E �E(�D0�D8�G@�
8D0A(B BBBK8�8<��LB�B�A �A(�D0�
(D ABBGH$9P��BB�E�E �H(�F0�D8�G@�
8A0A(B BBBE8p9T��~B�E�D �D(�G0�
(A ABBB8�9���QB�J�D �D(�L0�
(A ABBBH�9���B�E�E �E(�D0�D8�D@�
8D0A(B BBBFH4:��B�B�E �E(�A0�D8�GpY
8A0A(B BBBAH�:t��B�J�J �E(�D0�D8�D@�
8D0A(B BBBGH�:Ȗ�EB�B�B �B(�A0�A8�DPt
8D0A(B BBBA8;̘�B�A�A �W
ABBL
ABALT;0���B�B�E �A(�A0�F
(C BBBF�
(A EBBFH�;К�B�B�B �E(�I0�A8�NP�
8A0A(B BBBF4�;T��.B�A�A �G�
 AABEx(<L��,B�B�B �B(�A0�A8�NP�
8A0A(B BBBH�
8A0A(B BBBCD
8S0A(B BBBE0�<��^A�A�G u
AAHSAAH�<,��qB�B�B �E(�A0�A8�G`Z
8D0A(B BBBE�$=`��B�B�E �D(�J�a
(A ABBBj�G�G�G�G�G�G�G�P���D�D�D�D�D�D�D�S�c
�D�D�D�D�D�D�D�EL�=���	B�B�E �B(�D0�A8�G�D
8A0A(B BBBKH >��IF�B�B �B(�D0�D8�Dp�
8A0A(B BBBF��ʣ��@�>��NB�B�B �A(�D0�G`a
0A(A BBBE��>���B�B�B �B(�A0�A8�D�m
8A0A(B BBBK�
8A0A(B BBBB�
8D0A(B BBBM�
8J0A(B BBBN�
8C0A(B BBBE�
8D0A(E BBBG�
8J0A(B BBBEH�?���.�B�B�B �B(�A0�A8�G�

8A0A(B BBBH��G�G�G�G�G�G�G�P���G�G�G�G�G�G�G�P���G�G�G�G�G�G�G�P�J%�G�G�G�G�G�G�G�P��
�G�G�G�G�G�G�G�P���J�W�B���C�]�A�u�C�^�A��
�h��@�^�MJ�yE�8A_��B�O�A �A(�Gp�
(A ABBE(PA�_�MI�C�N gAAE��(|A�_�UO�A�N gAAI��L�A`�BB�L�B �L(�A0�A8�G�X
8A0A(B BBBI@�Ac�B�B�B �A(�A0�Dp{
0A(A BBBAH<B�d�B�B�B �B(�A0�A8�D�q
8A0A(B BBBGh�B�e��B�E�B �E(�A0�A8�J��
8A0A(B BBBE��Y�G�A�s�O�]�B��0�J�Y�A�+�U�U�A�W	�B�K�B�F�J�]�A�;)�H�b�A���K�\�B���M�F�A���O�O�D�Z
�[�V�A�{�O�G�B���H�[�K� �B�O�B���X�O�E�w�A�M�A�H�C@$�B�B�E �B(�A0�A8�DPT
8D0A(B BBBFH@D�(�}B�E�B �B(�D0�C8�DP_
8D0A(B BBBF��D�*��B�B�B �B(�A0�A8�GPG
8C0A(B BBBD�
8A0A(B BBBI�
8A0A(B BBBC
8A0A(B BBBFL$E /�B�B�B �B(�D0�A8�G��
8A0A(B BBBE@tE�B�S	B�B�B �A(�C0�J��
0A(A BBBHL�E�K��B�B�B �B(�A0�A8�J��
8A0A(B BBBC$FLR�NA�K�G uDAL0FtR�B�B�B �B(�A0�A8�G�S
8A0A(B BBBB(�F�Y�A�A�GPt
AAAL�F�Z�B�E�B �B(�A0�A8�G�"
8A0A(B BBBHT�Fr��B�B�B �B(�A0�D8�G`chLpLhA`q
8D0A(B BBBBLTG�t�B�B�B �B(�A0�A8�G�D
8A0A(B BBBAH�Gp��B�E�E �B(�D0�H8�D�\
8A0A(B BBBDH�G���B�E�E �E(�D0�D8�Gps
8A0A(B BBBCH<H���B�B�E �B(�D0�D8�Fpu
8A0A(B BBBHL�H܏�rB�F�E �E(�A0�D8�N�7
8A0A(B BBBJL�H��{B�E�B �B(�G0�C8�D��
8A0A(B BBBEH(I<��B�E�A �A(�Gp�
(A ABBF�xM�PxApLtI��B�E�B �B(�D0�D8�G�B
8A0A(B BBBJ �I���g�w�Z�AG�8�I,��OB�E�E �D(�A0�|
(C BBBJ8$J@��,B�J�D �E(�JPx
(A ABBCH`J4��DB�I�B �E(�D0�A8�Gpp
8A0A(B BBBH(�J8��`A�D�G z
DAEH�Jl��KB�F�B �E(�E0�A8�G`y
8A0A(B BBBA�$Kp��36B�B�B �E(�A0�A8�G���E�O�B�k
8A0A(B BBBET�G�P�D�t�E�^�E��
�B�J����K��H�K��F�B�B �B(�A0�A8�Dp�
8A0A(B BBBA(LL��$<LH���E�A�N �AAdL��	DxL���F�E�E �E(�A0�D8�JP�8A0A(B BBB8�L��F�M�D �A(�G��
(D ABBA(�LH��oF�K�D �RAB@(M���F�E�M �A(�A0�J��
0A(A BBBAHlMX��F�B�E �M(�A0�A8�J��
8A0A(B BBBA@�M,��F�E�M �A(�A0�J��
0A(A BBBA<�M��;F�B�E �A(�D0��
(D BBBJ<N��CH[
AXN<��CH[
A4tNp��E�D�G U
AAII
FAH�N����NP���NH��v�N���vO ��O����,Ox��N@O���&TO��@hO��F�B�B �A(�A0�DpM
0A(A BBBK`�O��KF�H�B �B(�D0�A8�GP�
8C0A(B BBBF\
8G0A(B BBBLHP��>F�I�E �B(�A0�A8�G��
8A0A(B BBBEL\P��9F�H�E �H(�D0�A8�I��
8A0A(B BBBDL�P�	�gF�B�E �I(�A0�D8�G`
8D0A(B BBBH�P�
��Q��$Q��h8Q��LQ��`Q�CtQ@�H�Q|���Q8�5�Q`��Q\�s�Q���Q��<Ho`R��OX�B�B �B(�A0�A8�D`�
8A0A(B BBBDP������H`������pR��iV�KG�$�R8�dE�G�	�
AD$�R��E�r
I]
A�R�j�R`�dS��S��0Sd�+DS��N8XS���	B�A�D ��
ABDj
CBAL�SP �B�B�B �B(�A0�A8�G�D
8A0A(B BBBAX�S�"�B�H�A �A(�D0�8M@V8A0H
(C ABBDX
(F ABBE0@T�#�,B�D�D �D`
 AABK tT�$��A��
AF
J0�T�%�B�F�D �G0
 AABH�T(�wZ\�T�(�#X�T�(�4B�E�E �E(�D0�A8�Dp
8A0A(B BBBH�xW�LxApPTU�*��B�B�B �B(�A0�A8�DP�XF`[XAPI8A0A(B BBB��U+�x B�D�B �B(�A0�A8�G��
8A0A(B BBBD@�K�E�D�B�G�G�I�n���K�S�D�B�G�G�I�n��	�G�f�B���R�\�B��Q�\�A�0xV�J��E�F
B�I���I�
E<�VhQ�M�B�E �H(�G0��
(D BBBK�NT���W4R�W0R�(W,R�<W8R�TW0R�=HZ
FPtWPR�^,�W�R�F�G�A �b
ABEGNU� ���di YS�2��g�2`�v�2 ���2����2���2P;��2 ���2p���2;	��2 
��2�ո2��ܸ2@�
�20e�2����2P��2���2����`�N�2P�Z�2@�k�20��2��t�2���2����2����2p�ü2��	ؼ2��
�2����2@��2`�
 �2��6�2�I�2��c�2��}�2����20���2����Ľ2`���������p�ѽ2������������]
3����!h
3�0�`�����P���6�$p7�#�"�!p����� � �������� ������������������������������4P���P���������������������������������������q
3p���������#
�5�3@^
�=
�/
�]
f!3�0
�<
/
p/
P�
�#3�
�#3О
�#3@�
�#3p�
�#3����P�
�
D"3�%3��
#@T
3!�.3������������.3����������� �N/3����������@�#`����������������@�������������� ���и���������l.3@�����������#X.30���������p�#�13`�����������#�.3�33��������#@@=�=3���=3`J�=3�����=3P?�������� ?#�P3�6�P3�6Ǎ3@4#3P6�5 4�54�P36z+3P5Q3�5Q3�5}O3p3�6P3�603D_3��������#���^3�&_3��_3��#_3`�1_3$*X3��A_3��I_3�V_3��	d_3��
k_3�y_3�$�_3`�
�_30��_3��_3���������lG�3����h~3!�'�W�	B�3`S�3@fe�3���� �3����������`�%�3@%�%%#h�3���������0���!U�6U�6��A�!3������3}`x0x�|!�3Py y`w�3�{�}�w��3��3�����4�3�9�3��>�3�S�3��c�3������3�3h�3
��3��3
(�30��3 F��3PD�3�D�3�0"�3p0(�3@D.�3@0:�3�^@�3�C	F�3�4
L�3�CR�3P:X�30C
^�3�9d�3�9j�30>p�3�Bv�3�B|�3 B��309��3�]��3�A��3�3��3�8��3�A��3�<��3�3��2�=��3�A��30A��3A��3�@ ��3P@!��3�?"��3�?#��3`?$��3@?%�3�>&�3p8'�3`=(�38) �3 =*'�3�7+.�307,5�3�6-<�3P6.C�30/J�3�<0Q�361X�3�52_�3P3�2�`4f�3@<5m�3 <6t�3�;7{�3�;8��3P;9��3�::��3�:;��3p5<��3`=��3�>��3�^?��3�4@��3�A�_3�B��3@IC��3�D��3�E��3F��3G��3 H��30I��3@J��3PK�3PIL�3`M�_3pN�3�O�3�P�3�Q#�3`IR*�3�S1�3pIT8�3�U?�3�VF�3�WM�3�IXT�3�IY�_3�IZ[�3�I[b�3�I\i�3�I]p�3�I^w�3�I_~�3�`��3a��3b��3Jc�_3 d��3Je��30f��3@g��3 Jh��3Pi��3`j��30Jk��3@Jl��3PJm��3pn��3`Jo��3pJp��3�q��3�Jr��3�Js�3�Jt
�3�Ju�3�v�3�Jw�3�Jx&�3�Jy-�3�z4�3�J{;�3K|B�3K}I�3 K~P�30KW�3@K�^�3PK�e�3`K�l�3pK�s�3�K�z�3�K���3�K���3pH���3�K���3�K���3�K���3�K���3����3����3�K���3����3L���3L���3 L���30L���3@L���3PL���3`L���3����3pL��3��
�3��3��3�H�"�3�H�)�3�L�0�3�L�7�3�L�>�3�H�E�3�L�L�3�L�S�3 �Z�30�a�3�L�h�3I�o�3�L�v�3�L�}�3@���3M���3�H���3�/���3�/���3�/���3P/���3 /���3�.���3�.���3�.���3`.���30.���3P���3.���3�-���3�-���3p-���3@-��3-�	�3�,��3�,��3�,��3P,�%�3 ,�,�3�+�3�3�+�:�3�+�A�3`+�H�30+�O�3+�V�3�*�]�3�*�d�3p*�k�3@*�r�3*�y�3�)���3�)���3�)���3P)���3 )���3�(���3�(���3�(���3`(���30(���3(���3�'���3�'���3p'���3@'���3'���3�&���3�&���3�&���3P&��3 &��3�%��3�%��3�%�!�3`%�(�30%�/�3%�6�3�$�=�3�$�D�3p$�K�3@$�R�3$�Y�3�#�`�3�#�g�3�#�n�3P#�u�3 #�|�3�"���3�"���3�"���3`"���30"���3"���3�!���3�!���3p!���3@!���3!���3p���3M���3���3 M��30M��3@M��3PM��3`M�3pM�3�M�3�M�3�M	�3�M
$�3�M+�3�M2�3�M
9�3�M@�3NG�3NN�3 NU�30N\�3@Nc�3PNj�3`Nq�3pNx�3�N�3�N��3�H��3�N��3���3�N��3�N��3�N��3�N��3�N ��3O!��3O"��3 O#��30O$��3@O%��3PO&��3`O'��3pO(��3�O)��3�O*�3�O+�3�O,�3�O-�3�O. �3�O/'�3�O0.�3P15�3P2<�3 P3C�30P4J�3@P5Q�3PP6X�3`P7_�3pP8f�3�P9m�3�:t�3�P;{�3�P<��3�P=��3�P>��3�P?��3�P@��3�PA��3QB��3QC��3 QD��30QE��3@QF��3PQG��3`QH��3pQI��3�QJ��3�QK��3�QL��3�QM��3�QN�3�QO�3�QP�3�QQ�3RR�3RS#�3 RT*�30RU1�3@RV8�3PRW?�3`RXF�3pRYM�3�RZT�3�R[[�3�R\b�3�R]i�3�R^p�3�R_x�3�R`��3�Ra��3Sb��3�c��3Sd��3 Se��30Sf��3@Sg��3PSh��3�i��3�j��3`Sk��3pSl��3�Sm��3�Sn��3�So��3�Sp�3�q�3�Sr�3�Ss�3�St �3�Su(�3Tv0�3�w8�3Tx@�3 TyH�3zP�30T{X�3|`�3 }h�30~p�3@x�3P���3`���3p���3@T���3����3����3PT���3`T���3pT���3����3�T���3�T���3�T���3�T���3����3�T���3�T��3�T��3�T��3U��3U� �3��(�3 U�0�30U�8�3@U�@�3PU�H�3`U�P�3pU�X�3�U�`�3�U�h�3��p�3��x�3����3���3���3�U���3�U���3�U���3�U���3�U���3�U���3 ���30���3@���3P���3`���3p���3����3V��3���3���3V��3�� �3��(�3��0�3��8�3��@�3�H�3 V�P�30V�X�3@V�`�3PV�h�3`V�p�3pV�x�3�V���3�V���3�V���3�V���3�V���3�V���3�V���3�V���3W���3W���3 W���30W���3@W���3PW���3`W���3pW���3�W��3�W��3�W��3�W��3�W� �3�W�(�3�W�0�3�W�8�3X�@�3X�H�3 X�P�30X�X�3@X�`�3PX�h�3`X�p�3PG�x�3pX���3�X���3�X���3�X���3�X���3�X���3�X���3�X���3�X���3Y���3Y���3 Y���30Y���3@Y���3PY���3`Y���3pY��3�Y��3�Y��3�Y��3`H� �3�Y�(�3�G�0�3�8�3 �@�30�H�3�Y�P�3@�X�3P�`�3�Y�h�3�Y�p�3�Y�x�3Z��3Z��3 Z��30Z��3@Z��3H��3PZ��3`Z��3pZ��3�Z	��3�Z
��3�G��3�Z��30H
��3�Z��3`G��3�Z�3�Z�3�Z�3�Z�3[ �3[(�3`0�3p8�3�@�3�H�3 [P�30[X�3@[`�3P[h�3`[p�3p[x�3�[ ��3�[!��3�["��3�[#��3�[$��3�%��3�&��3�'��3�(��3�)��3�*��3+��3,��3 -��30.��3@/��3P0�3`1�3p2�3�3�3�4 �3�5(�3�60�3�78�3�8@�3�9H�3�:P�3;X�3<`�3 =h�30>p�3@?x�3P@��3`A��3pB��3�C��3�D��3�E��3�F��3�G��3�H��3�I��3�J��3K��3L��3 M��30N��3@O��3PP�3`Q�3pR�3�S�3�T �3�U(�3�V0�3�W8�3�X@�3�YH�3�ZP�3[X�3\`�3 ]h�30^p�3@_x�3P`��3`a��3pb��3�c��3�d��3�e��3�f��3�g��3�h��3�i��3�j��3 k��3 l��3  m��30 n��3@ o��3P p�3` q�3p r�3� s�3� t �3� u(�3� v0�3� w8�3�Gx@�3�[yH�3�[zP�3�[{X�3\|`�3\}h�3� ~p�3pGx�3 \���3� ���30\���3@\���3�G���3H���3�G���3�G���3�G���3P\���3� ���3`\���3p\���3�\���3@G���3!���3�\��30G��3@H��3 G��3G� �3G�(�3�F�0�3�\�8�3�\�@�3�\�H�3�\�P�3�\�X�3�\�`�3�G�h�3]�p�3]�x�3 H���3�H���3�H���3PH���3 ]���30]���3@]���3P]���3`]���3p]���3�]���3�]���3�]���3I���3 I���3�H���30I��3������].4��d.4p�k.4 �r.4�(�3p(y.4���.4p/�.4P<�.4P0	��2/
�.4��*�3��w�3@@
��3@���3�-�3�����#�:4p2�:4�0;4�	;4�;4P@;4@#;40#.;4P#<;4����Ё_?4�i?4pu?4����p����)3 ��T
3 ��3���5@���5���5�33��5��5��5��5��5�5�5�5'�5/�56�5A�5J�5T�5]�5f�5o�5y�5��5��5��5��5��5��5��5��5��5��5��5�5�5�5�5'�50�5:�5B�5I�5Q�5a�5u�5��5��5��5��5��5��5��5��5��5�5�5'�59�5M�5X�5i�5q�5��5��5��5��5��5��5��5A�5�5
�5�5�5-�5F�5Z�5t�5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5�5�5
�5�54�5�59�5�5��5��5A�5I�5M�5U�5Y�5^�5o�5��5��5��5��5��5��5��5��5��5��5��5��5��5
�5�5�5'�53�5@�5M�5V�5�5�5�5�=4�5�5�5�5 �5$�5(�5,�50�5^�54�58�5j�5<�5@�5D�5�J8H�5L�5P�5T�5X�5\�5q�5`�5h�5l�5t�5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5�5�5�51�5*�5.�52�5;�5E�5I�5S�5^�5c�5h�5v�5��5��5��5��5��5��5��5��5��5��5��5y�5��5��5��5��5�5
�5��5�5��5�5'�5-�56�5?�5M�5��5Z�5d�5��5��5l�5p�5z�5�5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5��5�5��5��5��5�,3��5�5
�5�5�5!�5'�5,�57�5@�5I�5P�5W�5_�5e�5n�5��5Q�5v�5~�5��5��5��5��5��5��5��5��5��5(�5��5��5�5�5<�58�5H�5X�5d�5m�5r�5v�5�5��5��5��5��5��5��5l�5��5��5��5��5��5��5��5��5�5�5��5��5��5�5
�5�5!�5,�5%�5<�5A�5G�5P�5[�5h�5m�5t�5��5��5��5��5�3��5��5��5��5��5��5��5��5��5��5�5�5�5$�5/�58�5@�5��5K�5�6S�5[�5�6c�5u�5��5��5n3H�5-�6��5��5��5��5��5��5��5��5��5��5,7�5�5�5�5�5$�5�30�5΅65�5�,4:�5I�5V�5d�5	�5u�5}�5��5�
7��5��5��5��5��5.�5��5��5��5]�5��5�5�5 �5+�56�5<�5��5��5D�5P�5[�5d�5q�5|�5��5��5��2��5��5��5��2��5��5��5��5��5��5�7�7��5��5x7{�5�T3@G�p�E�6PH��������PH#�6�Q�H H�Q!�[3�Q���������G�Q!��5��������������5��������#`b�6�q�6�b�6�b6`�6���3 ��30�#6���3@�	�3@�
56�b<6�bC6�b
J6�u��3�Q6`|X6�}��3Ч_6�f6��m6ut6�s�6�r86c�6 c�6��6����@d�6 z`c�q�6Pd�y@a���p�����4V1P�{{�zrz%zy�x{x.x�w!w�vY{Ey�vPw�gkgCgg�TH}�{�}�ee�d�c�b�a�m�lGdKc&bynKml�k�kWkkj�iQs+s;ro�pـe��hi!hXt�ids
h�UB��ota�V�^�\�[�S�Y{^�Z'vlu���_Y�_*_-`e[ a^!U�`�X2X�WGW�V�U�V�V�V�V�V�V�V��P���6��6�3f?6o?6i?6r?6y?6�3G6o?6f?6{?6pY6�Y6
�Y6�Y6 Z6XZ6�Z6
�Z6�Z68[6�[6�S6�[6�[6
\6
P\6�\6	�\6]6@]6�]6�]6
�]6 ^6`^6�^6�^6_6
X_6
x_6�_6
(`6``6�`6
�`6
�`6
8a6
�a6
�a6 b6
xb6�S6�b6�b6
c6`c6�c6�S6�c60d6pd6�d6�d6�=3�� �Q6p� P� @� ��!@�!�!��!5�6�"!�"P�#�&$��3 J$%�6����`�$Y�6��$f�6�$u�6������6^$��6��������#��6���������X$!��6�]$��������PX$!��6�]$��������@X$!��6`�$X$!�%а6��%۰6�%�6 �%�6@�%��6@�%�6�����T3�S%��������#��6@E&0&��6@�&��&��&��&��6 �&0�&��&��&!��6��&p�&`�&P�&!PK'`K'pK'�K'�K'�K'�K' L'PL'�L'�L'�L'0M'pM'�M'�M'��(�(��(��(��(;�(�(��(G�(+�(�(�(��(�(��(p�(+�(��(��(e�(��(U�(�(��(R�(��(�(�(��(W�(��(��(X�(�(��(]�(	�(��(;�(�(��(e�("�(��(M�(��(��(��(�(j�(��("�(S�(�(��(��(��( �(A�(��(��(-�(�)��(a�(�(�(��(��(��(�(h�(�(��(\�(��(q�(�)�)�)G)�)	)�)n	)�	)�)�
)()F
)�))�)��(j�(
))�)H)��(_
)��(��(�(��(r�(�(��(|�(:�(y�(�(��(��(��(,�(�(��(8�(�(p�(�(��(�(��(a�(�(��(��(V�(��(F�(��(��(C�(��(p�(�(��(H�(��(��(I�(��(��(N�(��(��(,�(��(��(V�(�(��(>�(��(��(��(��([�(��(�(D�(��(��(v�(��(�
)2�(��(z�(�(
)��(R�(�(��(t�(��(��(�(Y�(��(��(M�(��(b�(!)5)I)])q)N)b)�)�)�)�)�)�)�)�)�)��([�(�)))3)�(!�(��(��(�(��(c�(
�(��(m�(+�(0�'��'P�'�'p�'�'��' �'��'@�'Л'`�'�'��'�'��'0�'��'P�'�'p�'�'��' �'y�6�e'a'PO'�d'#��6�e'e'�e'�(�6�g'PN'�j'�e)�pc)M9302*��������p=*!��6 2*��������2*#��*w�6�*��6��*��6�*��6��*��6P�*��6 �*��6в*�6`�*�6�*	-�6p�*
D�6`�*Y�6Ц*t�6@�*
��6��*��6P�*�6��*�6�*�6��*0�6P�*�60�*X�6����,�6�*��������#��*��*�6�*��*��*��*#P�*��*�60�*�*м*`�*#�*7�*7H+7x+7�+7]"7�+7,7X,7�,7�,78-7x-7�-7.78.7h.7�.7�.7/7P/7�/7�/707(07X07�07�0717H17{"7�17��5�17�1727P27�"7�"7�27�27�2737@37p37�37�3747H47p�5p47�47�4757@57p57�57�57067`67�67�6777877p77�77�7787 �5@87�"7�"7p87��5�87#7��5�8797897"#7�97�970:7+�5P:7x:7�:7�:7�:7;7@;7h;7�;7�;7<78<7`<7�<7�<7(=7X=7=#7U#7�=7�=7�=7@>7x>7�>7�>7��5]�5s�5��54�5?7�5H�58?7`?7�?7m#7�?7��5@7@@7�@7�@7�@7��5A7�#7`A7�A7�A7�A7(�5�#7 �5�#70B7��5�#7hB7�B7��5�B7�B7C7@C7x�5xC7�C7�C7�#7��5��5�#7��5��5|�5�5��5D7�3HD7�D7�D7E7HE7�E7�E7�E7F7XF7�F7�F7�F7@]3��5(G7XG7�G7�G7H7V�5$7PH7�H7�H7�H7I7HI7�I7�I7J70J7`J7�J7�J7W�5�J7��5K7@K7xK7$7�K78$7�K7�K7Q$78L7��5xL7�L7�L7M7@M7pM7�M7�M7 N7XN7�N7�N7O7C�5�5@O7��5pO7�O7n$7�O7P78P7hP7P�5�P7�$7�P7��5Q7�$7XQ7�$7�Q7�Q7�Q7��5eR60R7`R7�R7�R7S78S7`S78�5�S7�5�S78T7�T7�T7U7HU7�U7�U7��5 V7�V7�$7�V7PW7(�5�W7�$7�W7X78X7��5%7%7pX7�X7Y7hY7�Y7�Y78Z7xZ7�Z7��5 �5�Z7a�5 [7X[7q64�[7�[7$�5\77%7@\7x\7T%7T%7�\70T6`�5]�5�\7]70�+��+ �+��+�P6��+��+P�+0�+��6��+��+P�+0�+�P6��+��+��+ �+�*3��+0�+�+��+�*3`�+��+��+��+�b7`�+��+��+��+�b7`�+��+��+��+�b7�+�+��+0�+c7��+��+��+ �+c7��+P�+p�+��+f7��+��+p�+��+f7��+��+P�+�+f7��+��+��+��+�e7`�+��+��+��+�e7`�+��+��+��+�e7�+��+��+��+nc7��+��+��+ �+-c7��+��+��+ �+@c7��+��+��+��+Mc70�+��+��+��+ac7��+��+��+��+}c7��+��+��+��+@f7��+��+��+��+�c7��+��+��+��+9f7��+��+��+��+yc7��+�+0�+P�+�c7��+0�+��+��+�f7��+P�+p�+��+�f7��+p�+P�+p�+�f7��+��+��+��+�f7��+��+�+0�+�f7��+��+��+�+�f7��+��+��+��+yf7��+�+0�+P�+rf7��+0�+��+��+kf7��+P�+p�+��+df7��+p�+P�+p�+]f7��+��+��+��+Vf7��+��+�+0�+Of7��+��+��+�+Hf7��+��+��+��+�c7��+�+0�+P�+�c7��+p�+��+��+�c7��+��+��+�+�g7��+0�+P�+p�+�c7��+��+��+��+�c7��+��+�+0�+�g7��+P�+p�+��+�c7��+��+�+�+d7��+��+��+��+d7��+�+0�+P�+3d7��+p�+��+��+?d7��+��+��+�+pg7��+0�+P�+p�+ad7��+��+��+��+md7��+��+�+0�+�d7��+P�+p�+��+�f7��+�+0�+P�+�d7��+0�+��+��+�f7��+P�+p�+��+�f7��+p�+P�+p�+�d7��+��+��+��+�d7��+0�+�+��+�g7��+��+�+0�+�f7��+��+��+�+�d7��+��+��+��+�d7��+�+0�+P�+�g7��+0�+��+��+�f7��+0�+�+��+�d7��+0�+�+��+�d7��+0�+�+��+�d7��+0�+�+��+�d7�+��+��+��+�d7�+��+��+��+e7��+P�+p�+��+/e70�+��+ �+��+�*30�+��+ �+��+Ae70�+��+ �+��+Me70�+��+ �+��+We7��+��+��+��+ee7��+�+0�+P�+?g7��+p�+��+��+2g7��+��+��+�+%g7��+0�+P�+p�+g7��+p�+P�+p�+g7��+��+��+��+�f7��+��+�+0�+�f7��+��+��+��+�f7��+p�+�+0�+Lg7�6"�6�7%�6(�6+�6.�6I	71�6�x>�a>`a>0a> _>�H>�3>�>�>@>�>�>��=`�=@�=@�= �=�=��=0a>�=��=��=��=�s=`o=�Z=�X=�H= H=�3= *=`$= $=@=�= _>`==@�=�= =�=@=�
==�= �<`�<`�<@�<`�<�<��<��<��<@�<�a>�3>�>@�<��<`�<��< �<��<��<�u<�]<�H<�0<0<�$<@	<`<�<�<`�;�;��;`�;��;@�;0�;�;��;�;`�;�;@�;��;@�;�;��;`�;�;��;��;@�;��;��;`�;@�;(�;�;��;��;`�;��;��;�;��;��;��;��;��;p�;`�;P�;0�;�;��;��;p�;X�;@�;�;��;��;��;��;@�; �;�;��;��;p�;@�; �;�;��;��;��;��;��;p�;P�;0�;�;�;��;��;��;`�;@�;(�;�;��;��;��;��;p�;X�;@�; �;�;��;��;��;��;p�;P�;@�; �;�;��;��;��;��;`�;@�;��;��;P�;0�;�;�;��;��;��;��;p�;`�;P�;@�; �;�;��;��;��;��;p�;P�; �;��;��;��;��;P�;0�;�;��;��;p�;X�;H�;8�;�;��;��;��;��;��;��;p�;@�; �;�;��;��;��;h�;X�;@�;(�;��;��;��;@>��;`�;��;@�;��;@�;�;��;�> �;`�;@�; �; �;��;@�;`�;@�;0�;�;��; �;��;��;`�; �;�;@�;�;��;��;��;`�;��;�;�;��;@�;��;��;��;��;�}; r;�e;Y;L;�>;�0;`";�;�;��:`�: �:�:��: �:�:�j:@U:@:�*:`:�9��9`�9�x>��9@�9`�;�9��9��9��9 �9��9��9@�=��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��;��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��;��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��;X�;��9��9p�9`�9P�9@�90�9 �9�9`�;�9��9��9��9@�;��9��9X�;��;��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9�;P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9��9��9��9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9�9�9�9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9�9�9�9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9�9�9п9��9��9��9��9��9p�9`�9P�9@�90�9 �9�9�9�9�9о9��9 �9��6�6`x? x?0i20i2@i2�i2��6�6$`x? x?��6߹6`x? x?��6��6`x? x?0i20i2@i2�i2�:4@�AP�!3��A��6 �AP�,4�A��3@�A�D"3 Ai�6�hAdB�6@YADd?4�TAP�=3�QAN3`AAp�3�>A��3�;Aʰ6�3A�0�6�,A �:4`*A<�3 'A<��3��?��/�3@�?$�}?`�?��}? �?$��6@~?��2!}
3! )S�3a�3(
6��������`� �i	6��������P����6!�P60R2��6�e2�P6�f2�f2�g2 h2�g2`g2@g2�h2��$�1�<�J�T�d�x�����
Ȳ2�ci�ci���o��7
s��5j���d���	���o���o����o�o|����o[H3j������� �0�@�P�`�p���������������� �0�@�P�`�p���������������� �0�@�P�`�p���������������� �0�@�P�`�p���������������� �0�@�P�`�p���������������� �0�@�P�`�p���������������� �0�@�P�`�p���������������� �0�@�P�`�p���������������� �0�@�P�`�p�������������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������		 	0	@	P	`	p	�	�	�	�	�	�	�	�	

 
0
@
P
`
p
�
�
�
�
�
�
�
�
 0@P`p�������� 0@P`p��������

 
0
@
P
`
p
�
�
�
�
�
�
�
�
 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������    0 @ P ` p � � � � � � � � !! !0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'' '0'@'P'`'p'�'�'�'�'�'�'�'�'(( (0(@(P(`(p(�(�(�(�(�(�(�(�()) )0)@)P)`)p)�)�)�)�)�)�)�)�)** *0*@*P*`*p*�*�*�*�*�*�*�*�*++ +0+@+P+`+p+�+�+�+�+�+�+�+�+,, ,0,@,P,`,p,�,�,�,�,�,�,�,�,-- -0-@-P-`-p-�-�-�-�-�-�-�-�-.. .0.@.P.`.p.�.�.�.�.�.�.�.�.// /0/@/P/`/p/�/�/�/�/�/�/�/�/00 000@0P0`0p0�0�0�0�0�0�0�0�011 101@1P1`1p1�1�1�1�1�1�1�1�122 202@2P2`2p2�2�2�2�2�2�2�2�233 303@3P3`3p3�3�3�3�3�3�3�3�344 404@4P4`4p4�4�4�4�4�4�4�4�455 505@5P5`5p5�5�5�5�5�5�5�5�566 606@6P6`6p6�6�6�6�6�6�6�6�677 707@7P7`7p7�7�7�7�7�7�7�7�788 808@8P8`8p8�8�8�8�8�8�8�8�899 909@9P9`9p9�9�9�9�9�9�9�9�9:: :0:@:P:`:p:�:�:�:�:�:�:�:�:;; ;0;@;P;`;p;�;�;�;�;�;�;�;�;<< <0<@<P<`<p<�<�<�<�<�<�<�<�<== =0=@=P=`=p=�=�=�=�=�=�=�=�=>> >0>@>P>`>p>�>�>�>�>�>�>�>�>?? ?0?@?P?`?p?�?�?�?�?�?�?�?�?@@ @0@@@P@`@p@�@�@�@�@�@�@�@�@AA A0A@APA`ApA�A�A�A�A�A�A�A�ABB B0B@BPB`BpB�B�B�B�B�B�B�B�BCC C0C@CPC`CpC�C�C�C�C�C�C�C�CDD D0D@DPD`DpD�D�D�D�D�D�D�D�DEE E0E@EPE`EpE�E�E�E�E�E�E�E�EFF F0F@FPF`FpF�F�F�F�F�F�F�F�FGG G0G@GPG`GpG�G�G�G�G�G�G�G�GHH H0H@HPH`HpH�H�H�H�H�H�H�H�HII I0I@IPI`IpI�I�I�I�I�I�I�I�IJJ J0J@JPJ`JpJ�J�J�J�J�J�J�J�JKK K0K@KPK`KpK�K�K�K�K�K�K�K�KLL L0L@LPL`LpL�L�L�L�L�L�L�L�LMM M0M@MPM`MpM�M�M�M�M�M�M�M�MNN N0N@NPN`NpN�N�N�N�N�N�N�N�NOO O0O@OPO`OpO�O�O�O�O�O�O�O�OPP P0P@PPP`PpP�P�P�P�P�P�P�P�PQQ Q0Q@QPQ`QpQ�Q�Q�Q�Q�Q�Q�Q�QRR R0R@RPR`RpR�R�R�R�R�R�R�R�RSS S0S@SPS`SpS�S�S�S�S�S�S�S�STT T0T@TPT`TpT�T�T�T�T�T�T�T�TUU U0U@UPU`UpU�U�U�U�U�U�U�U�UVV V0V@VPV`VpV�V�V�V�V�V�V�V�VWW W0W@WPW`WpW�W�W�W�W�W�W�W�WX`jp���2����������������'������?�������?�������?�������?{�G�z�?@ffffff�?333333�?�����$������������@�d�qj�qj0ik�lk"#.22...01 !.2222.
$%.	
	$%.&'.(). !..&'.().().,,...***4..((..Cstapsdt����A�yjrubyarray__create-4@$0 8@%rax -4@4(%rsp)Estapsdt����A�yjrubyarray__create-8@%rbx 8@%rax -4@4(%rsp)Estapsdt�s��A�yjrubyarray__create-8@%rbx 8@%rax -4@4(%rsp)=stapsdt����A�yjrubyraise8@%rax 8@%rbx -4@68(%rsp)/stapsdtp���A�yjrubygc__sweep__begin-stapsdtм��A�yjrubygc__sweep__end.stapsdt���A�yjrubygc__mark__begin,stapsdt���A�yjrubygc__mark__endBstapsdtXj��A�yjrubyhash__create-4@$0 8@%rax -4@4(%rsp)Bstapsdt�`��A�yjrubyload__entry8@%rdx 8@%rax -4@4(%rsp)Cstapsdta��A�yjrubyload__return8@%rdx 8@%rax -4@4(%rsp)Gstapsdt�g��A�yjrubyrequire__entry8@%rcx 8@%rax -4@108(%rsp)Nstapsdt�g��A�yjrubyfind__require__return8@%rcx 8@%rax -4@116(%rsp)Mstapsdt�g��A�yjrubyfind__require__entry8@%rcx 8@%rax -4@112(%rsp)HstapsdtNi��A�yjrubyrequire__return8@%rcx 8@%rax -4@120(%rsp)Wstapsdt/3��A�yjrubycmethod__return8@(%rsp) 8@8(%rsp) 8@16(%rsp) -4@24(%rsp)Estapsdt3��A�yjrubyobject__create8@%rax 8@%r13 -4@4(%rsp)Astapsdt���A�yjrubyparse__end8@200(%r14) -4@196(%r14)Cstapsdt���A�yjrubyparse__begin8@200(%r14) -4@196(%r14)Dstapsdt�"��A�yjrubystring__create-4@$0 8@%rax -4@4(%rsp)GstapsdtX;"��A�yjrubystring__create-8@%rbx 8@%rax -4@20(%rsp)Fstapsdtx<"��A�yjrubystring__create-8@%rbp 8@%rax -4@4(%rsp)Kstapsdt��"��A�yjrubystring__create-8@16(%rsi) 8@%rax -4@20(%rsp)JstapsdtH�"��A�yjrubystring__create-8@16(%rbp) 8@%rax -4@4(%rsp)Estapsdt�($��A�yjrubysymbol__create8@%rdx 8@%rax -4@4(%rsp)Estapsdt�+$��A�yjrubysymbol__create8@%rcx 8@%rax -4@4(%rsp)Ystapsdtua(��A�yjrubycmethod__entry8@48(%rsp) 8@56(%rsp) 8@64(%rsp) -4@72(%rsp)Zstapsdt�b(��A�yjrubycmethod__return8@48(%rsp) 8@56(%rsp) 8@64(%rsp) -4@72(%rsp)Wstapsdt�j(��A�yjrubycmethod__return8@(%rsp) 8@8(%rsp) 8@16(%rsp) -4@24(%rsp)Ustapsdt�j(��A�yjrubymethod__entry8@(%rsp) 8@8(%rsp) 8@16(%rsp) -4@24(%rsp)Vstapsdtk(��A�yjrubymethod__return8@(%rsp) 8@8(%rsp) 8@16(%rsp) -4@24(%rsp)Vstapsdt@k(��A�yjrubycmethod__entry8@(%rsp) 8@8(%rsp) 8@16(%rsp) -4@24(%rsp)Zstapsdt�y(��A�yjrubycmethod__return8@16(%rsp) 8@24(%rsp) 8@32(%rsp) -4@40(%rsp)Ystapsdt��(��A�yjrubymethod__return8@16(%rsp) 8@24(%rsp) 8@32(%rsp) -4@40(%rsp)Zstapsdt��(��A�yjrubycmethod__return8@32(%rsp) 8@40(%rsp) 8@48(%rsp) -4@56(%rsp)GstapsdtG&)��A�yjrubyarray__create-8@%rax 8@%rdx -4@240(%rsp)Estapsdt�')��A�yjrubyhash__create8@%rcx 8@%rdx -4@240(%rsp)EstapsdtJ))��A�yjrubyhash__create8@%rax 8@%rdx -4@240(%rsp)Gstapsdt�9)��A�yjrubyarray__create-8@%rax 8@%rdx -4@240(%rsp)Estapsdt�=)��A�yjrubyhash__create8@%rax 8@%rdx -4@240(%rsp)[stapsdtӐ)��A�yjrubycmethod__return8@80(%rsp) 8@88(%rsp) 8@96(%rsp) -4@104(%rsp)Zstapsdt�)��A�yjrubycmethod__entry8@80(%rsp) 8@88(%rsp) 8@96(%rsp) -4@104(%rsp)Fstapsdt<�)��A�yjrubyarray__create-8@%rax 8@%rdx -4@12(%rsp)GA$3a1��ղ2GA$3p1113`���2GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�ݰ2GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3a1@�2Ʋ2
GA*FORTIFY��F�2GA+GLIBCXX_ASSERTIONSGA*���GA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*GOW*�GA*cf_protection
GA*FORTIFY���2GA+GLIBCXX_ASSERTIONSGA*GOW*�/Y(Q$GA*���GA*GA!libruby.so.3.4.4-3.4.4-3.el8.x86_64.debug�F"!�7zXZ�ִF!t/���:�]?�E�h=��ڊ�2N��;?X�q�:@x���1N��o��!u�v���uH�'o�pB����M�\	+&���H��^ރ�5^��lSH�7��0�A�B�h��K
��V1����\�8��RV�|�ݸ����A��P��gb��nN�$������߄G�|�.�j� ������	YE���>e�:��@���o��
�!]�#6�#ǎ�K�Ή��BH%'c��_��I������%���ɞ�LH�b���vH�q�|F�]k���Cj�m����	6X^S���*�b�Q9�(��~��N�N�ŭF��V��p���5E:f�`g=t�FC����e��8�>
E�w�	
��I�
�W�G��)5!���A�>�OP#�彙��-?��c �e)�CfP�A��g���&2P��F���wY~Ŭ7�����c�N�5�ŵ�=+��Dl�
��{��	u���}����w�Y�=Q�g�OS�]7[��&�]�8��E�N�5�$�.^ޯL�oӜ���
(��m�'ʂ�@��.���yTJd:�ʃ��|Ls�V`H��#M����u�.�����E��x���L�%��nLvk�&���?����?m]	\�Q���=F5[G�l�[�|�GC&gZV�:0pa�[��>�繦�(,�G�(�"}�g$�e1�د�T��*�3:b�Bh�|�Ƨ�My�Ę����j��1�>ڂ�b�/��\Ø�mm�Qmc����s�J#�d�3����uY������Аmz�Ɉ�T{��}s5=���4�C �G˹��ku�?�.�!~ne�[���(�9ԩ��x�}�$=�
��q��Nl�	Vͣ����&�� ��ܰ�%����f��rC���B+W����Eݭ��V5-���33.�2�\{�3o�
��*)>��K��
r�yh�����up����4���>K��
}<c�M��_���4�}?�֍Va&��9��'��d[����I͢	�T�Zi`E���a��&c�פ&�Ϝ9������+^t^����~��1n�*'��n
�CV��=�����X�Q棠T9���INn������{V쇄G<�gE86����s !�J?\�6�<�Bդd���th>��@��P���؆0$��X=;f�9K�v�K���
��������w3
����{:r"#��y?��� J�
	��߽��Me�⦗ձJye��b�Y��N���0g9]�
W�h��ڠ�\}�\����ʷ�P"Vm�g�D�Z��u~/��%��z�8��m��|�dKO�"
�4��"���˚�~��^��O%k~�8��d�`^�A�E_�dO�Bi���
,�phD�08�E[`w��[�����X�`1K�a��й��7�n:�6|�P�؃�H/@�X��|@�#���m�$q�TkŏO���^Z$��l����7^���9TO����s	�o�ؾI˙�\�L����z~����8�����)���X�ϩ�0�xܠmvR=n����PА�WT~����~}rc�"z��'��v�+D��A��f�|���r�^��]�5�.�J�7׵��=�����	`���d��-�)�8�3B��|
�L��Ҽ*!L��͞P�3���7��+�[.��'3�_���Qk/J_�E���=�QR����	��n��)���oR%fEh��"�W$��^)��(m�0�+�*���J"���з%��I�)����V��ʣ
rJ޻H��z[���E���n�n��y�����G��K�gK��L�Ιo������斎Y�%�ѳ^Q���u��^j'���9e٬����g���^����n���l��[�8���2j�WI�Y��_�^H����%�	d��@�MCF�~���!��3���b{��[��nS>��l�!/BfM�,v�@y����b$�I�H�Z���7S2��s��K��rz��3�yIN���?t�{�U�m
z⟻O�4��ըEG}<AZ|XA}l��v����n�����p�נ!���X��?(A`G������U~:F�w������b�>��qq	P�\��,~��0\ot������<9���z�Xn	Ҍ����o-��6
���@Z��T1b��K�-9&1�T?��������r�U��(ᶚ*�헋�G�!�_e�}0�L��j�s#�>�=�O1yk�ߥ��|f��$��HT�6Ҁ�Åz��o����#32��,@��=
y��(�j�l�˒R��ya�,����C���ì�zj�jn�u�O<1�aP+�{=Q� �@��0.�6�7�7��n��dE�twj��3���i���};;:�������
��<�Ac��8��e��L��¯hC������Q��+��c�T��?�R�����U�N
�v|BAEDc�7�N��+��%$"_���;߹V��8��C�\������:���R
���28]
��=+�B&מ/7q�M{3�1p�Z�}�4�.J� n_|�{`W���20���A`����I�a[r�~.��5���[��v�ұq��)˱��f�0h������ĭ�|s ��F5��W���<%uԣ�EI�
q�i�-T���'C�JP��;�&P�<}yy�d�)\'5�)��
��y씝Z��6�3�ҩƒ��pIs6+w2�R���T�?�3�߬�i:=�!-l�1��<�n{.�;wX�r�`H�6�EH���JML�C���E��P���l��a~�0g�z�������}�/�m��$�s��Q���A��F�I�O&T�۸���1pTj}S�R���f7bl'�ּ���Bs�!��BJ��yF%
�Z�+p��C� C*�u�Ƒ*�y]2	$`�'���Z�st��4w�W��LP��ۋ�)l:�]Z�����YgE��ޜ�O~=4i�T�4�+���ܮ��Qw�d��x��A���5�+`������U�\� ���'5���8/M��r*
�:���=���f6��Bb9���6/u�"a�j!
&]��ho��d�l�Zz\�X�T�vb0��OϨ���H�圴!afv
�pF��Њ�<�8�-PA�}�����W*`L����
��M�v�l�2J���ޤ/Y��i�c`-�ֶ�F��w7�@�u �Z����?(����K�m\#������6��:pg5�y^8D^` �i�����������}
�P� �S�t��9�$�b�{)�o�Z��h��#�)�ú�G�!��H�L:dG�?R�v��u�M�$cC�p��ꂭ�6�+@��5$�E��'����`7{L�K�/��:(�����3Ǵ�[
��(�+|M�w�n"�Œ�a�z���)p?���5��#NJTy��+l
���5�<� �D�3Y��F X:F�e37Xg�E��ު�gL�_:Z7�t^�{��p�,�$���]A�)	V�g�PQ�=-�h�<D7���s���������G������XZ3劔���O��(@=�wWܒ>�YM8p
�~A���@DM�+b�ю'��O
Q(���g�
;wò�K1'ı��<,o6t��ԸS,���J�	�5w�*�q�\A��/����I����g�TL�H��>l�˷Ax��n�������z%���Lq��aX&��sR���^�d����nU�E��(IFM��O�SÇ����Z7�2V��
�sU�@��4��UxE�a�*\B��2����O���WB͋|�Wx.$�Q�,MӉrb�qF�'�7�务n�f��*�p83����ظ�:�m7&�k&��vF	8�XU8:������d�Eܾ���뮏�l7����T�o�YG�jZ(��^_��v8��(ztu�b�ckt��v�ϥ���!�7z
n1V5�#;۫�<8���x��G����a�xq4
��LT�8d��5����T5�9�N���yrKN��G�����ș�$�ƌl���`��3�ZmDB�F0A�	p"B�I���4"�V��콐��G���(�3�W�s,���:��lÉF|~��L�x��@l,�Ͷ�l�e;�a�Y���3O��`�,�Y�_A�T�Y뜃���4͈Y�'	��g�7ҵ���!��Q'x曁�A�����\J�����z�-O2��\��U���	�.-�%3;�F6��H-
6A�K�e
Vԍ��k'�RՓu��@gbCq�S�U<�Q���+ά�c 2!g���
�q��g*�Q� ����.�^ŗ��G*L�����xO�h<tR�����p��Q��S�b�INP���nL�v,�.]�n`�]��
"#~]���Do�J����WD�)Yh�I�1�#B��f�C�)�:T��A!~�H&W�Ǥo]�/��
b�l�g�[��6�	����M��وRPyy��D����GYy���8��s�G4��5��i-���Ba�ذ���a�����g��u8zM�z�.c^��N���B>�	�d߶���2q<V�<�T�0bނ �d�dٙ�}u�*м,�b�b�ĝ��C��u:�!�/��Q�/�l����.ϴ�9�x�u��Q�B�MݠG\!�0��s}L�%��|�Bv��쇚7��^^�ӍTL��#鷆&��h����^�Jf�#�s�H��-��]5�\HZG��}R�5���O0�LP�K&�2�̷�`��ߣ�š˘���.��n�'�d}����2t�F`�ų�S�{U���yA�2S�}�W�Juх���s�-fb.���k��>���OE��pU�B|Hz��BIS$��K
[��l�A�l)��g�A"�u�6�����0e?���s�Vc�r&�5+J�wH�w6�HgL'Cb_�~��#�ܱ
{o'�@t&D��D,/?���x��r�ڎ��v�^�z?fUBD(��"K=0�S���˾TveH�ؖ�&�
��Q���+B�v4����r&x����
.���ZZ0��?��=;��@U :a=o���,cf�8���]w
���o2�].�8����Q�x�.l�"}�"�Hb��'��~�b�U1ŝE�����
�0S-𪠮�&D�-��8�,�IA�u�k�k0�L���RA�#�K?�؊�[6��ڽ�1}�^��\t��a1��$�,s5Ng�J����ϳ�!Ԟgd�x��r��~,�u���n-
1c
���>e��A��2�8�q晛p�N}FW7o���/��dT"@��t^�	%xF��҄�e�w���u�Ҩ�="��I�y�ڎ ߞ�n����|U�օA3 �t�[yDG�m-�{��AS���[{�����*��>t�����@��՛�i٠��-}a�O�H���Q�`�w���xN�t�FjĔ�Z; 1U�.�j0 �
e�ֵ;��%�q�U�M��JU�41�0Wu�~g|�o��--�>g�0�	��6M�p�;�4��Wt�>�X�4&R})p���2����}�G�Ѷ�@����M�|Q���Un�wHn*lݬ՟�5MUwn/�A8��_��yl���T�N����@,�8I�l�좛ڟt�q�ni,��
��t��K�%�Bb�]�Q>�1��]���8I�S6(~�A�AU��V�[e�\_ܬ�U��C7$G����vBmh�e����mΥ��,�ӗh�ŧ	m��?�:R��9�҃��2�9M�
�j/���P�����Jy��C�q�z��Tn
6�J��텝���P�������2�&�M9�e��q��Xɍ��٠z%vٌ5im�m���2!r�.��9����fO6��/`:q��rʤ��O���L(�Q������4����z�9�Z�P\�t���Xri4���~}P�-D�(e#��E��.Q�R�b�>-f�oZ2ɀ2�-:��O�E,i�@�	M[f��8E�1�!��y�6h0GTe�In8pT�]��U�u]4�{>�`���6��$�Z"�4�ĖKҍ�b9t�>�d3��V�8[7;yz<���>�@�6gv�nIu�f\�㾖��6�Բ��"{��+[T��Ş��|=Yd�`i엃a'��k!��w�����U�4�>zrgY�Z/C�8_�4�B�>��LT�q'i�y�UԠce�1����y�$�G��\G���t�(�Q[_ż��4��^��JlV+/Ϻ��QԪ���[�
	t���t��P�y翕B���jt��9e�	�m���S�!s���k�l�C���۴��!DO��9;��y=��
)����x�f�k1�}��Խ��-m,!<��!Z<�p=��L����i�kc�5����c�pS�L2\K3����''�@i��z���n�П��t"���{�ྦ��?t8i%���a�3�6�����<	�K�S������=*�|;Wgk�U�.Ӓ���$˹N\ny�6���'�`��:�*��Rf��2m�Yq�D5�=���^���+�܈f�R���ݎ�}��_iM塚�LzL�%�E���79ݬvI�	�5E|$�SI��w���Ma���ʲ#:8w��c�FHN8/��
럶C����y�|:|X4�4_8�!+��I�-�3]P���Q�k+�^��~�y�ͯCP5ɰ.�������%��s�I��lq^�-\0�H�[w�˞K�zg4��=�~�>�L�Ж�C���1�!���ކ��!/��Y���:(����*BW1U:{6�����S���5Թ�0����T������u�[�p���0��
�%Q̭V˦�/	]�jЕq�ڳ��ܟw��[R�;#�<д�ca%�q��ݧ�԰��/+s��lJ|�'�r�r^6Z��>,�I��]�����"��Q�EN�_.B��O� ޕ�lBR�a	��@�	���sJ�wᷟLι�6�sF|����e�b˥���]Ӑ:�CUygL�
���:��\�Η2�#j~���A
�=�>᜖��e6������>e�"HJrA�}]��ރ����5���-U����^+�:;���8�*hJ��m�J"�UQ� 5lY���Un���Y���`L_��3������e�Yx&++�r^9��du
5@H���q��=����(In)���m�yo
�ը��P���E����:_�z-뛟;�~�x�S��H�7��>\��i���0�y�@�D���J9�BJ�,�~P5�')%]��#N�Q�l�2��k?��F�9
ܑ�-�^^�ա����N��(9Ī�<��`*���n���2��jK"�C�{���14�%�J�iuyu�N�`���	t��m�_zғ�I��+JO(Np��]�>�[#҇��AJF���}r�g
�܈!!uvl����:R��A)�_��DX�f��Db躻�A��&��#\���t��ר�)�_�u/ܥ�4���/Y����ii�u۫��H�/'��,��Ѝ�ǖi\i��G2?���-!����\:.]E��{��[e�]�nU!�^#)��3�(�u�5��6��`��з��o��bN����]`w<�c���y+�c�p.�*@�~p0Uw> *�����Gѥ��qǁ�l�5Jڲ��yoe�gϫ�,�*����L^��nUŕ��|	r����^V��s�!�~�hc���i	E6\�3�-��k2-�Y�s[	,,(���H�$����2�A��f�A��*Vɕ�>g��*�ŃU
�
o+���1�ya���	��������
�H3S��-�k2��ٛAVki�Ȃ�,dO��J��>��}��n'mk��"xM��T��xM�ȹfSs#3I��Y��:B@}�TC��4�!
��A��O�N�O��~u�?qB���Mk�l��4����{��f�Z�����US�,���6m��o�D[8���m��Q��j����
h��8D�(�'rW�|�=#p��z�"\����,��Y8+�����&:��o�����)ΥD���q�5l��d�8
TT�%탄)�:r�ah��:of4:�B�p��P��·�_�L-K.��:�cv�".]��
$�CɈO&���)3�~a郟ɬUfI��g����[\�#���bDB]��Z���e/;���/@�V`g�4�+Q'E���u���Xg)���G��r,���:S�r���ѽ�H��z�1���J��#��SH����8��?\����1��z)�׵V��7�x4s�����i#���ܝL큔�R�=[��5���	���!�O��m/Ή�'K�������'гaD��e�2XZvRCv����۹��C�]��ĺ��ݸ h�'��=���){3�����6��1�m-�>�_�w�N��y��<;�Ux���i�kϞ�~�m��გ�=j��"F��S�ݗ?��	~+�Wv����qT)Br����w�F�mz%�K}BY\ߠ���d
���|� ��jV^Y�Z�3Й9�+؉�s�c�P�+�{�f�g(����2C
1k�]rZ�/Fޟ}-8��%����=�$�M�Xd��1�n޾�D��r�4�X���+ʲc2�<��p
�Ri�t��k��b��f����.*��p#�kޣ���\�vx��-��5
>d`��|��C��QE�x�)�,j���!�b)$��ŵ�����f���I�)��\��o��;���wOi*�Y��Z�ᄹL~E�]v�{3�!	u�y��X�?s�i�ś��S%����
ﭥ�נ�T���z��`U���.q8�:�0��hX�B�����?X׳��s��o���v�?S�������Jm�l�Qnn���� y�+��;� w�/|^U�v@4b|�]K����N��`qo�W�:���tM�	������xc��5�W��:�x�������\��|q$>/��yC2��v��{"�}98j��Ѯ���E��|Vr�+&
q��6۟��\�dH���B���”wɪ��Ij�������NKN��#�3G��M~�s�Ta�#X�&�P��������g�7W��<lԃQd��Q� 'PAA�׋
�L�NN�>qz��J� �9��p�]:�����Y�C �C���r�eF����H�'�)�lX��6}��h����|�B]�,gi�FUXs�ӽe�g��ҋj��@��(j%R�		V(;Bِ����<�^U��w�eF�.�:�)�.�s�#wF��\��{ٶJ7y%�~�[�n�Bv��'D+�(�A��lT:��cƔK�Ԭ�'���@�S��4�&�P���k�&���Q{JfCCNJe�$+mP��Y:(D�?����)�q�h`��R�f<��#�; \8,���v'L��1�b8��%i���y (OM�r��x�Tb#|���ý��k�v\.ʚ��S�w��0��`�|
|V~#��K0�
%f�$w��h��S��)�j�Eǚ����qF����e�+mEV��l.Bg`�
�����t��h�v���l���łd6U^T����.�4z��<�]ª͸��+�T�w�!�D$
ӿBԦ'��+]3��|wI�'<�c���2�6[�l�k��K�覲WN�N��v������M������2�4[����ڝ?�te�n���p7kE�H<%�ɻ7�N:=4��A~����r�Q���K���߈Ml��=r�=qO�?/��p�Z�pt0K��|��!��*_yV�J,��:ʭ}���I~`q��w�;�5���!�0��$~���	��ν��
�<��Ҵ���s(�T�+DAKW�~4���7���x�l�$�4�"(�I9)0��h�b�7A��c?�貭�����?א
w�"
��'�����f7m���T�q�C�m�ܬ%4�
��
�������̓�Ң�ʃ־�/����'�)[��R�]��b9<�F�-�p9'����̳Z�l��+0��dܾVů6^�K�|��`���5uì'w|��s��bC�ۗ�KmGY�vC�$�����:�	���g1"\�H�'�g+�B����O�QOl��d�m�E��S�菉�SO�-�c����:9C|�q_k5����39b*���e�F6�p^t�cM7x�{�[w ߈�C@d���i%���v��8�E�@ziyfit����·F��#7d�ʯ��m���ÆӞ4������"�B��sx�N�2>�e�B��A;,F���t�~XiN3}2����#�5���ۆ%�22�Xگ�&Dqb>�9}���qhƽx��T���:�ey�>�2�0��=a���?�l�Ls�(,��(B���{�rI<v��v��6��_�,�⦟	�2�PL�r������d���$�iV��Ҏ�Vt�!e�&�t߀Q�#�I<b3<۾��&�9�1Դ������^�vK]krۥyFk,:V�p��F��=�����=m�g�����TA�z
�R�߹���:��K�ytj�!���4�8B�@�Bt&T�إE�{�:�j�"bd�w�� x�&�H�u�d��ߏ-�t�՛��^
�B%(�#����D���%x��`�B�y��*�{��:�jjF��B]}hڈ��i�!eq��׻_a�QKs6)?[����K-`Ճ_1���K0�/6$%��8+���=|]2�	���7��
,�$�a�hk�|�y<��)�Ei�� )�ړ`x�?v�J��T�lV.g���;<�6����;�����|��
��0� ��\���� �5�� ��>�&��s)��ÓV̰������2M��x�s'��
ŵ�g�V��R0�ח�?�}|�i�:}|�n�L��n�e��ƾ���g�	��Y��� r��SJ�9�E�6�H	��������O�ⶸ�m'�,�oU��@>�H�q�s�W����y	��n�-YX��\�Mԭ�E���E��=‰_}J^{���ndZ-c��=�mG��.�p?CC�x�±U	�R�����o�~i�����VC���f?�7r|>��"H��΋JieG�y�n ڶ��G��䤶h�:�8D�G�������X�=�d(j<�jI�u��L-[Mţ͍FïtNj=�Y'�O`V_	�'x��oC�#<s�m���E=5��&��8�����2��w���%(�$�)��:�����%V`�+�s!��A�%Fke19-(H�W�ꀘ^�Q4�+ܦ�&t����`M�avxE�*;���,q�4ݮ]xSGd��h�.8�l1
߆�gg���������f��B�&�A�J)�n����z����Z6�F�N��d��2c��:�U�_�+����5�l��RL9
�JzA�'z�*�k��n'al
坵�<�����{3̓�K�@�{��d��x�&���n�|G�_3����jgI��\��67ھt�{�nU�R%���m��FS���][J3�ЉPH\z�������e��cO��S�H�������.��:���:,��.[���T�h��I�,����6�KΩj�HƼH�X|~�a�4�S|A ?y�m����Pp^sK�%TI��ǯD�z4p��_�3�FI<-�Fhᣭ�|@��-n���j}�~%���Wꪼ[��r�M^7G���lB����Z��\�w�d�"����;7��-cF&�V��V
��%%e'2F������c�a���_>VhA7�򤖨������d�Oڑ@U,n,U�So�o�/Z��{tjȣ(`�L�
�n�v%�+��h5{����m�����c�FzP����=t��X�@��Q��B$��x�v��L�����l�A���x��Y�:����s%@����ƛ���%�l&��<�SR�G�hk��._��^.#�[ǯd�<\�A�#�ql������2d��5(O��">��DŽ�e�bР+h��ܚ��6o�q���*h!L����Ѣ�@Rj<,'`�Aܓ�p�3�
/x����"�7j��+�����B0� z
ɯ>�u�r���G2�����&q��\��W2�0Ğ�_����q=Z_����j\cX??�0gI���7ŸA���H��朴0OV�M�-?fl��g��H�f����;6��D�G���#1Q�l�mC�n���-=���_�ti�%՘D]��.����$�"�G����lV�� ~�*�@4C\�6�ij\���~�d��x�VO3���Ƚ�/iЄ��N�Wz�4�7�=��g\6)�ټ���	yuڒ�ng!3n�;٤k���$9d^o�i�d�L���R��V�� �����7�|���R�
F��D�K��U5�y����Sx��n��pZ���,��V)�1[:�����Ao�w�Q^�M�:�gSÃ���d.J+��c�Ȫ�+/4�����ϟ@���Q�V���d
�O+O�| Ġ�r�>�an॒��
P�w�p�$9�QT�7�8SS8���8yHI�]���xY`m��9J�҆1�!m�ǘO%K�~Œ������*[��1�C
)�ϠU�W��o��+)\���|��F�v�D5r�S�._�w���)_��F���%խ�'��Ԋ�ݨ���z�6�E�z\=�s��@�{�:-Z��Ke�V�+�ո!�����i~��2N�dn~��Sh;-[sH�4g�g�<�!�a�Bc�f@l˂�y�'����LY4����H0Y�
"-�?�Υ,t���.���@�n�����˕�J�S�$d�s��}�~�s������&XXK)����ܿ�-SV�jB��M{�<z�0���*Od*+AšX�J���*Q�Rd��|Fm���,�$),�HA�Z�E{�s.�4Ð>	�㧧�K_ibl�颻'�>�U�l�_Ya6�,z/�[R�ZL�yw��g�Bqp���H��GUшe�&BE^9	��/��T0��[��#�#O��������9�ˤxL`у��o
B�:��Wh{�c�b�����j-2	���k,�c��JΏ�kBhS��	�
a�N]�nd��"À�7�m�\[g�V�K8��4[�C�D׊��~�s�:�kE���P�0ŗ
����ָ�U�e�g�Re���^�~S�"�H���4�&�ί�^"�+���~�&��[O^��9kףA��Y�L���*��*�3���Q3j��d=.6�a���)�ɕ�2��<Q��ݎ&�%�
��U�<��4�RoH�����ֲ��6�y��n:wQP�|�B�&��C�ʰ٦6�2�8
�������}\$�o��F`��мU�Q��U�7�f0����w��<80��l-Sm�A3 ��T(���7�q�00
#�[y�q��|A�J"b�B���#�,���=P5'���nV/�KQH��G<��%.�ߝ�\��q،����GB\,Z��;�Y�-�8���:fܸ-+f���Ċ�H������ys��nG���r*=�/��{�t����{�˼'�L��9n�iFw�F��)���E0���lޚ-C�7��ݴp��#͒ZB��V�f+FzMg-�]�_]Ρ2�
Yj��nvюD�)tW�O2��:��~��+���_�������ik��a!�Ƽ�媄�q�8f��E��Z��F�h�
]M8�n��t�PTq�~�1�hc���4/Դ��b��R��'>��xw�#���7�D���Ƅ��f��c�p�}�#�3M��3��pɁr�#	�Y����QO�s�����^�I(��X��mNW?p��[�?K���s�(w��wԷ��oQV�c�Rn>���c�9Z�O_@�`�C���L�>ͽ�֟�m�\�Z�e�K ��LT��;M~H�\g��C���B�S��j/Kl�D�h��dߕ���Ú��&���o+ݐ�""'�Y�׫y�+��1�tp�˷ n4�b[�l�����@=J�+F��w/�2�[�,��\'f�C��w�`���p���_�������r�>f�v�=��-DO�J�eѩ��B?�b���.#�Y��A�5�]r��t6F��+�535�Y'&�cj���$ps�?��/E�y���:Iٓ��6b��md9�^hڎ��.T�Q�T`4O��i�,S�ʵ"��!2,���a�A�̏mLu��	��<ԇ����'Hg%�V�á����r����\�BEL@��u��ԇ0il�S��K�
�؊�[ ��4'9�z�*aVRP��B��V�7�AF-:Nn&����x���JӉӠ`�m^�σqx��L!���rĜ� �U��+�o� �)G;C}���'�_�C�ajB�X�X�u0�0�s�I��u
�Zi��D�_3 K�2��˃��^V�?�o�Xy��� ��m�JV���Ҍ�����]����^�j���4Y�_�|�O�L�>ο�!��L�٬8��
;TE�wڛ��V�.a�Ss�x���*!�z��욓[����%����J��`�.��\}������@k�RKj�e8u3x��Λm�^��;�5L�S�x�P�]2.W	�ܾ16=�'A7�pc%F���A=��f�ۜlN�W+')ǶW:�����p�
�����h!n�7ޝ(o��4�=��Ef�3a�T�R}
�kp�t�cC�+x3�8�z�L�GYA)Aq<@č�vQD��ʪZ����.)��	艉�依���ժ	0�b�z �*�ʲD;OK���Vl+��GI�*>Z�5�B4�DC@�q�ʒ�qp���'
=Z)�>�c���LFc����o�yTM�{颾/w�o��8�K�
߲t|��%�?��3_6?�35-F�R�Lk����'�l�Y�pzQ�J��I�(6FR Z*� ����ƆP.�S~�C`?Y�q3��zS�A��W�2���7���fp2Res/���[��?�i�5X�QwwR�"���S��精�&�/��3/s�۹���.a�~���s
~���€�˷���`��.SY�`����'������cb�\`��G|�0�mN�O��OV.	P����+�n�H�!��ė� T�TY�q����Э}���.T<׉��nؠ��s�x�q�I�(�8sT�k�\=>>�f�٪�Ԓ@l汶:$	@�3PI�-jO����Y�2�V�^@����d�lʭ�P�pp$�eC�N��_1{��K�<X��	�ꮢ���͓���5�5v�o����y�Ǧ4�-���
�\����ٜ�J �7M�{���{�`O��*e�+���i|�Eota�l���		6U�RZ�-��@pA��hdR��v��������K(z���KCL{\���/��\��S�fȺ~��5`İU]�+H!�r���z_"5,
�H
�#d��bIH�K��G;)}��o<�U͏G��^ɑ ��m˕� l��б�T��K!���B���P�pr��
shv���a<��
?��xF
V�}/�ڼȭl����c=��!��Lə2��.�]7[�*�i��-�q�cq`��Y���ng� �"�a=�K�������s���~�fS��ٴ!�rT��,&/:T.��!2��l^œ��a��Ŷx�1;�t��#ev�&�r(=��9�+�����市z:�@��Mc���6�)�p4s���?�?<$�eN�+v	]˼�귖���T��BL�;�J��)��&`�1��,��5m���m���HjM��o��\xs�=�bZ`d��/|��%�o���C�s���ok=�Ax�(oDi�X��08���!�`�	D�K��H$H�u�ߋC�:��R?U6�b���hh�ȱ
Z��e"���V�I�L�
���n2j����M=M��7��L$΍s��)���D��n�c��K%C/���N�Wɚ�4x��g�%����Amjj��ʝ8�1m�9��j6�N�-`4�R��֤��ÈdN��`�\�9�Kh&d,�L$������y�-!B�W��ħѻ���i���k��U�<48c�0��,m�%��5�Uka�Z�i#�{F.����Z@����u�8�紁�����x��B:�`o11ĝB�{9�P9=m�ۭ�n(<�Z�
�i0N�*�8$�_��׺�=$�ɲ�,k���� 2m��B}��W��r$���pYn�FE�CF��
�@��x����
����\�H���~]~�ʾ��h��k������q}�cJbI�vP�?9�a(6���]Z�%3�J��H���A�4�*�}q���xO@��x��w�I��,<�	�xnW(c��kZB:�b*��Ȟ��.��U՞V�1��_FN�Ԧ��{$��9LxaOW�7x�9y�=À�9�_��7RC�g�aӃ~
0訰��%H?M!D��nqu��?���J��
:�!r� ]��h����C=F�U�5�ߣ��e�?��, �
,Pي�pky�����u��ᬋ�a����Wrg����%L��S�-��j��Q׺�ٺ�e�]�+L�Y[�9���yR#9��S5X�~jA�?���>����	Ȼ�l��t��
v��U
:��Y���dB�~a�<���Mm�sn�ǫc�ol3�,^�(����F���O��kd��4noX�`1O��q��W�=M���z�i�gk�wD������A�䄪2�R91I���#0�.�q5����8	���0n�C���B��1�2O ѡ*$�`��׫�/F�5���H�ܿ7�"Z�ib�(��@-7��x��*�I*"*��4k�-?+,>�H�e_�!F3�s-�)��t�cf�L��&+�K��#��� ��2�:�8�Z���T�Ang���<�j�X+:�@�U
nE���-7��L9=]`S�/̓}u�����|�!)%ֽY�w�Ri~��k��Kǻo�<��R.p�U�������+�'���3IC�g.^�\�f�k4�9���w��0���P���D/�?D2X�0���-�����5GSq�"�~�	A�]h�'͝�Wo:*@�;�=O1=ӫn�Vu�d�d4���.i_�y���'}��B���"IzW�[�4#QW���k�4LqFa�o���푁(�}�@���Y��ñ�7pbU�وE�@�>�Ԑ�����
�@	@���n�6ޯo��?zW��է�}2�f���
f7���q��=i����M9�g�Z΁����S#]�(!�74i!��nu�@E�����,!�'5u� �|@�r��i�\.��8��<�y�e��j��[�NQgj�<M����J�0�qҌ;�2�f'c/t��4�i��5k|��V�<|a ƚ�ceol9��}�n@������Sjpi���c(�K	>���S�S�����|�'�B�)�ā ����s�P��<0?�j�!���	jpk����3+���a�i����ņ��"��B)�ܾ�Cܣ�WZ�*������{�e˫`�#[-��$%Zl���1�񑽪���"O�i����y
~�ބ��D������l��ґ�\�P�ʾN�
FQ�����a����ߗ�4���N�̈́O�����
Ь��"GZ�]2��ڟO�s�v2y�h0g�JF���$�(�l��4��6�	�{��>�Z�f�B��|pD��WT�X0�7���<�Z�|���K�²�pӡ9T�:�ޗ��4�U��
�2���.]�'���@a��Ա~T�Bb��a�|l]dD����K�9B�0~q}g�)4�
d�w��_&�C��2�qIY���|D7oX�"K��q)�.��'��)W�R�۰&��7N�}�=�Q�Fɏ'��is�g�C�e~�t��ٰ0p���yI�<�07��57\G��0��߼���x��老!l�{��c���]5;��'Uz�9T^"����$uEw�5y	�ҡ�2=w�^E���l�r�j�l(�W�E��F�<��4ƶi�z���>�!��S�VkYh��ѷ?�p`�H�Q/Ϛs��F��ξs8��E�lBӌ̥���Љ�*c�2F �XJ���0X�K1���z1�ܙ}TJQg3G辈��;1�{☈(���7��q�٣�=�`-�T�f���!�e�n��&��ɒ�w�lf�����d_�!����������a�z��!*�qM�c��j�?|�g�?����Y��P�yٯ�e#AQ�H7�,�,/\�����'�]����iv�oT+��e�wD��N֒�K�GӜ|PyfKn���(k���jp3�I��7Ճ�!"�`/>c!c^;�7u�o�n���3�Q~+��S�z6~��=��d=��bM�nm���z�w��]5���j�@U#�z�S��ҋv���ȈmW���"^;���~���"H�0)����h� R��=��`�‚҇r�G2V3F�
�H����ʼi#�)Zk����1x/�S����y�C|Ȱ�C���9��>'�A1rr��:�꽾(�@N�>�z?�S��X`߫���O����Zux�P�VGW�W��؍i{=/�Y��1=��;��x��gS�]U�q�`?�sSo�t�=�4K��A��v���aU0��,��4�I�z%�8f��]
ZN�JTɒz1��
�@�}�j{�t�:�[=�i�N��6h�N�I4K�B�E��`����V�+�#�nb��unFu�Z���~ˑ�1ŵj�
5� �O!��Mt�H���z�)�Od�͛��q�&Ҫ%�;�h[@*�~���bmߞ?�yBJ�tFn%KGY8�!�����\w;����Np��|���T�f�b<��c >-�Ω""R��:�4u5��M��qm�6����ty�A&�D	x��J��Dk$��o��Dt�[AU������z\,>��)��^��\7P�6����H�~g.$��N�1��i�N�;��
�&���&ٝD�Wn��P5Yv��:	�7-e�;��CKŝ�KS�ٟ�?��5����KғLJ�x�zo���.���I�5����&}D�BU�4��c�+,�����g�h}(`�����°U��?�� �4v ���=-���S�Sw(���!�C�ٌZ%�*0��?ӇǶ�m.���n���&kkE0Yv%�F>�ܪ�]�@����_� Bԡ'��|	kG8Q�cq��L���XMZ�:�k�Y &]��l,W�6���[2��@J���0�^tf?�tMD�y˩>d}@tw��F��ez�����,`A��}�nR�j���ዠ�C^o�
ʔ~�Sh=7�������j�4����jۯ��u��ލePD��c�TA��}�l7JG���:e��)�˶��?��R�D֙V��6E'aKh��Qs��dO�8�ף�_�!������ņ	��,)�r>��f�A���[a����:jIοG��@>S�h�Ѿa�|`"�чTE0��"�{��C���g�5�[$�p\rZ�JR���5#$���/����m��O��(\���4��d�}�媈�!��`��M��\EZڜ=-M��j�2�:���JN��7����h(��\�VW(
��k&���6��me}�o���9m�*wA<C&�v}�<�IP$+.��O.��~��6@�2Ff�m���GY4YgRU��l������!Ĝ�f�A@�wQ;P��?(H_������8O�
�I��+�I5�\��ib��S�붅��19����k�SH���K�p��d�v��t�= �K��	z$j�W���A��g�T��t��W;����woy�k�^�A�m"��}o�$ߎO�
�9;�s���0}a�;�^������L�D��;�ϔ�(c—�m�_�U�<��S�)y���5��f��S*.fCr�p��<Zl~Ċ���GJ��� ż��W���m����ɣOd��af��噈�T��y*pb3ğ{��kk�<(d��D�!��;6w���Y�'/��6�Ҍ�y�K2ާ�r�}�>Xf�.��^�ҡ����t,TM~�(��U*��I���:Q��ޑ���>J�:�_�[L�-h��S/��u=�×��-���dR�X&�N�v\��u��c)�+|������#�':<~ȤO�Гr��)cS�~m���b�J��
���rT�t�w�I'p�r�jb��JQ骟�z��&�4C}跣���	
������-���L��1@����J�i�QI����s���^��>���ȕ�-Z]��SJ�^�Ȉ�����+��{&	��������@O��e	@�.[I�a�h:���QL��M�$��*���c�_�C< �Im�4y�pf%��̕o(:�T����z�/G�(�r,�h}Ufv,�Յ)[R�2Nt�_���:U�]�o0������CA
�Q�(�I1�[N�e-(�!��ǿ�\4_\ǫ6*Fwr�ؒ����Q����~�)C��3w��F��������n��<�]����/o�گ5�dE?��9؏v�V}�"%��=;�E�aT#f����:���SY��b�6�k�Z��Km�~$�(�c�V�W���Pt��h
v.,أ�����s�ͭ׺T���#	.�/.7
a�ο�>���z^�ߧ��)��O�L<�
�_�̔��2\�����li�"�)F�C|?��	}C�CQ-\��N�y�o
�w'��p�1����D���Fc��6/�!�����V��ml0���pJ �Y��՝ �S�R�%�n�֕������S+|sj¯$ҫ-����R�W�e.4V�.1�#�;S"ǃ˰�ԣ��i�ܻX������8�6�^)G�=���T��wpy�q�/+��}���5�Q�����0���Ƙ����p��F~�Yr�W�j�|`����C(w��YP'&�Ƶ���uUG����z����P���=�K�-��Z���0M�ǻ0�y00�$�΂s��j�G�KW �[��3O�|���.a���6>Z�{�_�4���RX�˺���wf�q�r�y9��z[a�Jvw�gƏ��m��|���0d9�.��eJ�gmUI]o=�ݕn�
�8lw�CO���[������7�W��fr�?��J�9���W�����$@t����#LƄ���7w*�f�x�?)��L�"e���t>�-�>0Gl�a3�ȏ ��M3�G��EG�u�s�[@��8�ڒs�V$��|c�<v��5���k�48Je-p3���L�V�W,&ށ���<�������W��I��W�釛�~
���I��@��5����=�"���B�����:Ie�@�`�m��xΝ�g�;��DG��Ny�R֋d-�5��#���3��,����J�Wc�Z��x_0>�Rs�4��J���~�t�Z�����z��H!����1`!�	f�:W
�h�����{��O�-|L��F�K16RI:�6G�>Dnw���O�{���^z^��^N��۫a�:6�KV����u�1���&
*�-0|��X��:��@�dXw��Z�d|�y�����ɯ ��`��=���J��	K�[��Z��Z��^�
;��ك3�
�C�5�:�'��@�SE�[q��Q��yU,0l���OpF��*���̿��!�K�\��/�+S�Ȱ�x|c��9��
i�ȧ�8���!b-��B޻)>�GI��g�޿��
ay��6��;�i�^Č{��X? �RD�����` T�{�E�w˘��n��=m�*&Ha��}pm�Ʌ����
��_5fz(Pc��`�:4�����	� ����`�H//s�j�
��=�q8�#
�_��ŋ�+FU���U�O�D��}��)<'�2l.1��	r\QR���y�Nk�ɒ�}*e�đKlJ-I
1u�WV{�ĸ��X�Q����ə�|��7�#�sʱ��($�G��D��#jb�\0!�F��V
ڎ��Jʳ�^�?n���i��$����WUMq4���������y��UW=_�:�E�,���ov{n��;�5�‚F�޿�_��E(vM�&�H��z���yPum9���K���K,�WˡR�ͼx��;[���� ��I?����+o]�����L�=!�P��B���@DI&�ޯ��́�r��-H��;�,*ҩ$�~{�=]c�П��P�SR-��Н7�3�
��f �Z@^6���E�~���|��y��׺���	�8m����W]�Z/h��4e �1��#
���/�3���_a��W��@���C�g�o�#4i�z�
�^�ف�˦T���آ�p/h���x�鲰��jfe57�NA��ÃLW�EH ��ޯ�B��nԹ�B�~�U=2Ic�s�5Z.�عҊ�
�ڊ�s�,�zC`�)�J�Ϭ��F���!FЗԁ~z���+�6�ɟ�y��U�]M	0ָ1�e��R�&r�B���f���G2�kL�ZG���F����|̬�UA����°⎪m��淣�	�n����,K���`���jۛ�P�����}�(�^b�C�f������D7�M�.;
�J�'�U�H~zK-�9��Z��h!�nFX:��
��QJ�(�N��5�i�Q�i�6}e:!T+h+]�����'M促���	T&���{F�=\tؑ$"0�AsO���=��pbE�|
,��$�Vr@bՏ�13'��n�Cg�o�����l��S1R���n���b�Fh��8`/�0"ڄ��8�ڊ�8NK~X�;�4�m:�מ�a[(���@��&p��[��`��s�������bY<D���TQ�mGYv�/�_��%j5���*~�x��̟��h)vq�L���qUP_��ϛ�>F
�A�8k
��%ˣ���C�K��}��j!KA�ߓ1�>�h
�FT����X�L>�p�����ϙM��:�rධ�J�fP�J��.�]�Wn�_ț4(YmR�K��|����C[\�g$��2�Z�3b�!��|)��p�a�"Er����B[��F2��ハ�j��S{��j��
�D�-W+��G'8�$lO��՟���V�Oɉӱ4�wة߉�_��g} M"X�b�8��E&�EB�l4<� �K���1��M���ɠm�� �c��$�p9H��4]~/����ÒAt	y&���t��Ֆ$R�����Z��F�c�C8
��NԿ�&0�Z�C$(J.A�Jn���}�uA@�1�k9n�
�� W\'�T��)Û��G��X7ٯ�(���"_�5(3X�)Q�&��{�?�(����>;�33��+��DHh��b�**���q(*�I����lT�ߜ�$m�L���a���W�`�*|m�FG��>&2�i
�$Z~Ƶ} =^��Dȩá�D��,�:%Ly��0���g��[���ɂ���yNa(vN�D��������ª��Pε�=�En<)�?�/lQ���c�S�/�;�K�
%���� @��3���C�hf��Q��w�0��{R���H��]��i��BT3Gx���
<n��:M��&0u
�П�묿<l�S�Éa�Ғ+��y*�z
)a��	?����^NRbE���'I�<@�(��A��Lq����9S-�m���D�Pwv�`��J�
Z8q��Dd��6����T������m�//@У�ej�b�LjO��I�w�e�pk���?��KS��A|ԋ�&�80��5�v��_������Q%��07]z#bu+�~<b���|�\��Gy@�*��+�"�Pr��5�/�7�^��j���q{���i�ĝ�)��0�bS�aC��z_�s���J�v�mm�hD.��Ҭs�$��8�����N�(ҡ�]q�Q�~�i�む5�3RYI	�r��x4Dr�+��`�Dcw�_�������
��D&�w{�y�b�<��;z��>S<l�_�HGe�	mSAin���AN�
����-=�ϸW��?]$��_��|Ř�C��#����z�������]X������̓a��"JD��~	W���=	b�EVݞ��?�`2D�L��G�ۣw
�e�,��5(*��^�7�x��e�w��l�cɡ�$>'�KЙ�1�Gk9}Sw����e�Q��!�
���*��t���-H�%���jcn���W���~����V��-0���?6+�� ���L����*�/��twK&DI
8M��ۮ�qY��N���.��z��N�G���+���d��Q+��7|N�l�$��#z��[td�iZ��K���Z�:�G���$�)Oeog9�y��뤈:0E�=Q���
�G��F�^��\

������ru�n��9t�s��UWز1���oܜ���c��>�W7�E	����to)�'�IGNɲ-�:�'�\�8���Q�X��o��ǹ@>P2ޑ����Z]�j923�$���?�.E��E
��„�=h�Qaɛ��'�f�v3k#���
�'�n0k^�̪
�y6)N�,�Zd[tW�w7��H�M�hR)��Ӷ���+2���
�wr�9G�	���y�2����%��&�~sT���o�����3m�n���ʦ�Ο��ڶ�� F�@�{m�㻙/nO=�b)���T�d��
7
P��?��
-�*�<���(��>����:B�1u'��]4O\m�j!fe^�=>��߆�Kyᴀ_�7"�N-pW� ����Ȫ惰%]��Ƈ�{o�K�ߘ���<�UD�i��
�j]��	p�ni�-R��{�`����CŅ��k�~�����[�����5��ܶ�g7s��A>|h�U��h�w�T�3����cD5`k�h8�97{*A��AA7��/�{C��/:��r�p�����㖂�a1��G�NMW�O
�=������.K��^���[5ğe�n��f�amXUƬ��k���woi�y^z`�E+V�o[��Q��b'C9@YW��*x\���Q�ٳXa���c���-��N��d!���7�냥��]r�5�2�ә��n[��Wl�b��ʟT��j]�hߎ׸�.5^-�MG�W,�33mt�δ�"ĻnS��B�f����vZ��>M����G�Z�y��m\�#��������-T%�@�ש��3y���s��$��S=4,��Љ�dq��=�=rD
��
WPq��*�N��t�[�!��DN���`�!]`���	i��U���0ť��,!�K,�ֵkE�V�V�ugDo�,m�4�̧�6‰۴�\�kȷ�bMyWf!@w�6:z2!�t�fD.�<��h�y�r��	~�,�`�s;�}N7��J��$~�Q�\qU��_�L��W~-[F��4��j=$�b��8^>k�f�/�~���Qߢ�J��V����>Gw��S���Fg��X%�%ʀ�z�Ŀt�֞��
X[C��>��MF��m�n�>͗�k��O��)|n�Zz��RL�,lJފ�*YV���a���]y$*m�<���|֪E!01����K-{���Иj���qZ�r)���VW�������!E�h����׽��#;��d��/���r�"fB���N�|c�m=��W`I
�e�S��֊�������zֆ�t����p1�j��y�
��rV��p��sd?��`r�(��N���h��X���Dm����N:��s��Y�!�A�O�)�u�� �W�d���4Qd�${|�k�|Rk��Rb�L�R�;�Ͳtc�Xj��y@�d��d�Z�8u�����+^����&�K��#�(Q��aS�ͬ!'ou6K�Δ��|�z}��f������8Uts��g@�n�	��()}Pri��~f���m{�Z�<���.��u�AG������_�/���!�R2����Tlw���~+���&��v����Z�߁3$�wӢ�F�U�����$�B�����<��U��!�V��ד8��5�a��g�����WsX�X�\&��k+GFpC��Z�_�9���z.������.o>p��d�:���1%c�ާ�z��?-e7�.��_/�>E��V,�=`�ضE(H6
"V4{�����9�B�Κ5�	�{խ?�..a@b�yT���R���ݟ��s�K�v�Q@;_Djnz��%d:�
j���d(+TS�O��n-DHo�6�Y���{�_�𼱉�/��1�~��Rb�D���V�-�D5�>�f�H ����6f1�O���	��pVRedZ%cdrno�^�Ϝ�M"�Ȟ���qY�J�� Q�x��AޏL����=纭�r�JR����t��,���!Tu�,���yx�-n�-�k�>��b݃Z (�6w;�G��s��4<��\����ҖZߧG*�5�ѡ��~`C���F�?���ܐ���}��)��|�����_C�X0*�Z]v8倫��-4�:�s��s^
7�K�b	���e�%0;E���,Q�*,����-l�T��&�T��&l
XuCK�~�M�`��J4W��g��.�����R)X���n�N��N���0�5@��!��d0A�bVd�N2|�#��7z��r��vd�g�Q���xr�
�d'�J����Yl�d�\u���oJ��y';z���9���*�Դ�
�Π�ƶH�\��U�Ġ��x�pN����l�v�+��o:�
9e(�B�Ja)��R�U>d�?-)���m��sY@�1r���8c��s�[��`	T�`rz����G�z�6�U&G�u�d�nU�*n�7c-}���F�=��{���T��]ɑ����C��u�
t��ˬn�o�ث�7
��z����Os���u} U�y�.l	�隷��7"G��}!��X�i�������O�Ioq��ncY8
@�|���ہ���|��3r���H�<8wZ��b*��\��VD
�$���6�����ȇ�㊌޹��(&�頟�r�钎A�z�;��#�>��bo˳�a��c��=��P]��uIFz�w�B����WTC6V�)�Qww��K�N���L��o_�k<�0g�������|c�(�{�:t��g���ir��+������O~U6νP�΍��@<kTV���Ma4$�灌�r��$y����H�!�v�\:I4�$����L�d�ѫ���T��RKfn�����~؝�3�t�L�w9S�,��C\0]}���غ���+|؇�Ft[
�
h��8�[��=��b>b?"�'-�`]�G���YB��滯C�fؕ�9�=�v
�3/H%‘�Ꮄ�8��H���Ĕ�A��ў���G|�J��	訾쵫J��`����A�Ջ�q`4-���!��s�x靉ݵ� ����x����,�Ğ[�@��+�b�#)6��՝DP�?��Ҙ�N�J�g;0��S��q/)1� �,qJ�\�F�^��W"�G>0�VR�`��!f��"5�5Cr�kk#�M��"@��K�B���'���x�dŎ.ҳ�����8`���w�0/{�IØ+"T���5�E��(f�K��_
�i	�1�����玌<�hS�h3�<jK}��ĴR��<i�5n'���-�<% 6/���y4�j�lD�ʴ�A��y3���
A��Z֢���ӝMN&*6!&�Zm����9��Y��$~	G��T �:>�G|MQe�W"x��14����KFb(��8N:O��֪[ZE�sNWV����f��P洊�شm��>�Γ�W�6=��5�x��iZ۽� �#�H%討�[�_���8ˋL�����s��@�&� ��>��aF!$�]�w�{V1�>��P�%�KH �K�4l��`L9E��ަ�/�_�ڲ�D�g��{7�m!�"���=�r
�ҫC^(mi4V[����v1Sl�>e���"�^�~I�J�f��eS��m�����P�`��4���0[ూ��%�',F4%[6`���ً�a���3F1�w��KLܞaTG������h�[p#�[�#N��,���~� 5Z67�f�
|Oe���)��U�=��i��lm,�Z���)1X�-�7ѭ�Ώb��dL��� 5s�#���6T�A��U*MS',����v�F��v�BM���/4�K�,�]�$M~���TǤz-�v�#�T@�R=��Q�kΟ���E�뿵��8�����1�����������1��:FGF[ ]#Ta
t<g����5�^���#��q�k�����i�w��a3�ɭe��œ��y#�c�˄4k+�K������h���x��Oc�DW{�o]��6_�)���b$~��ͼ&
ܧ\��Y�id�dƅ'ʿ-^��g�c��������S���t����
(_�t�6,=�w��NL�R��c}�U8q���,�oƜ暵h�
�Az��Pq&T✍j��h�{,�����9W�2�AY��Kb�DB�$\�l�`�K�Vy,�0܂�_���΀.)�����T���F��n�r�����}�/l�FRy�k��׉ڼq��,��Y9ሢ��tJ�'�I�+�χ���,QQ<D���$Pbo�
�!A����*��F�42
y�gP������b�t8��.������L�X�=T>S��X�
]){Y��(#/������0^KC��ʥ�����`�Em�8��z�e����.$1=_�-6��ݬ�hi�����{U��j�H��kL'���y.�&,A`1�I~Zve���f��]kA�Ni��Iۮ�����0��907-!�-�㕋��̱b_re'Ch���a^�sR�Sp�;&$�di����s9cQs����s@���6�L�� 7Qi��\�2/t������;��0��G���oH��k���)
��H��}����1�	�ߘX\��zQd`臟`��HJ*7��>G�4��b�0����Q�����(��va羼�uBz"r]��\���=��/�Fl�b��0�_���<�j�MW�[Kik!�����?�>k~�U�"s����_V�#�(]�m+�3C�0�z��M����hl�(()���Y�=vC���7{iS�\��ɲCn�7Ć���.�ߖ��Ԅ��E\lKjA�AvS�� �P�O�݊@K4F5K�+���z�-�$N�K��ƻ=Z%v]B��~ӭ���7�(������1h��ZZ� �V�r$����u���>���<�	���_r��O���j��;��'�§�L�L6�U�Ta���8�cּ
9�CG"�+g�i�$���쾩	++A�Wk����A������5D*����E��N V���1�$lh(�
�5���a\��瑹<�~���P*Z�;1���D�!��t�q�Jb��QИn��hD��)⼮3͎m|��ʚ7�h�Tm�|~7>$�>��H�X�:'��k�t&$�䍂�uqI�X$A��t�
�Tk��&�w�񩒂VT"4^��"��_~q���
�K�Z�3���K���ً�!
%�������2��o�@>S���B?U`dţgo��@_ U"���-�}��x)� �-��Ȫe��t�F���llK"�s0��SD�'8��ni�*��
M2�˛��elW���ߣm�/.z�$�	Qa�M+�W�>��C�o�՚"�`�D򜿄`���ic��3}mh�WA����Q`J���I����p_=���/�*�[kW���
��z�/0ڿ��}�UCqČ:��?�AA����.�}m��0����#���RٴY5�5?�r$WA:OJc�Y��џ
Z�sX�4m��+% &g���%t�g���Q��{P��/�E��д
^[$���Co����Mz��EK��[��w|�M��&���;_Z~��qDŽ�d~��H�"�a�t1�/�dL�/ރ���^�Ե�0��4�!YX�bN�Z���ؓDg�#1v�Q�tzr9�OϢ\jx�a���ܥ�E���C�Φ����c|ǷSl趹i�32�}�^�G`g�Lo�z1���H��xY
z0�����.��G��X��7��;Ҝ�K�V�}���lI�c\I���N_x�c�ru�	����d��s��C����
�l~A@�
��j���r��o/��T������G�o���o�	�[,�M����7c,��*�p����&�y$ɓ�~ߘh0�~=5NY/�3�q��ylfh[Nx2����uD��Nx�w�V���QS��7�����هG�_)nD�x�_���'J֬���@�ev
�E%h5s�T���w����ʅ㶫�I"��h���DhQ�3͆�-�q6|,-n-��<^��J�h���"D�;��/��
�p��R$<�z��Ckh�c��J.ۊ�NP���"J#�XP������0��歛����5~ZӞ�#���`�O]��(�s|1�oiB�t��)�����E���v�(���������p�
��^w��9���C�=Y�w^L��N����-�]g*�V���!.��D�h�Ἓ�3d���A^E�r�^�Q�������^Y(k�=S��?�}F�7E鼥�]d��t����L�����[IW�`�\��ƻ�[ȸߣ�%�2��}�F�ǮϘܯ��;�dB���,��4><)�W��K&] ����˧�Tn�\��9;e�m����"��@3r���m΂�`[4� �����.y�� h��o���3�~<�C���6bN��{���x	�ze��f3�}��^��AZ	i�v~���(v]k����ճM,IQ:���܄��d�T��iY��3?��̓�,O��ًg��yR�w�XY�|�B�0����=/��d
7m{4��?�l���RJ%�(r��NT�E7Y�A^�
�
:�P����߀[]*C��N/!,�Qi��T��E�'k�F0-�0����i"���z�`������?��(�{^d�o!�G�.1|���濲��y+YQyΜ@s��m�[�3��/n��)�*��O;L(���2���L)"�?p�R�o
n��[�\O�Uxט�+&�ej�R�Z�*�9MJ)+U�R��Vyy�`a��#E��X�s���l���[�����r&���t��~%lO�TYy�d��W�_OT5���XL�����|D���t�|�|l���,�r[/d[�Ww7�ʏӽ�	Z8I˿;�_>����F$MoE���؀<ρ���eA7�(i��2���������!u��}�)��=���g⣸�qt<h$�O�x�/�$�3��|��<�~D"y�'�nnj5�ƀ�Ĝ\͍O�B��i1����(���Q��~�ܾb,��j�~g3�y@�?�\	"e!+����xh,i`�-�"!����jz�
��������R~qsI�ș .W��A�uAt�8K��ڙ��a��_a��>� I-s7��5���,�k90O��a��wr۰I�o�\�{Y�&˪���}�
��Ͷq�Ьۛ��ү��n����6��pGY����}�=G�x�HP��E��DžVc���ؑ�����y���+7ԋ���f��z�ZZ�
x��Mw��'��#�t;8"ЯkS�u��3单4���Õu<l��E��w&�#�k�"t\��]�����xh��F[fv��N�X*�ybk���Vt��'��g���a��m�*LՊ�8TF:�&'	������`��/���;�1�?��Q��S�`��WhBs���"�\;�n�9��?~5��=�%���&��7��_F�(��S���a�R��	��% ����:��V���weY�G��S`FDu��
�!�t�-�.q>���Oz���f?O����f� �et�NT��z���\=��B��S���\>샑VY��'��I&�W��f����-u}c��.�}��X8�0`
�D���[T��@�h��
�vg��ۆ�����./��p�_zb-ΧV�1��֓�!�4%L=�|R�D�qM!f�o$����s�
��E�m�l���5m�c4=���l�jFl��"W����!`�b�|V�[��B��4���O3�=����IO&�Bj��o��f�eIC�ɝ����+��[����(If���U�Z��ug��5KE-v��n�<نT�5{�t��?�0B�a����-����O؁p�=�d�wx'2�(��x)��;�"=xN��j��尮D6��UgS޹(�H�shp��߄Mv���s�@�,�8�L���ʾ�K@�S��p��h�Q
r�Z�
�1l��I�Z}/=	�&�'^/+xP����hǴ�c��P���a���{^M�V-��^���!T��"����{%�5�^w*.)w�
�ł��D�]aغr�*�BeM���{7U+��`r!�S�-��m��
l�O�I���Z�����V(��u���He	O�~&T̬�-�]$P�Q�	��	������E"�?�)��8܄�@ �d��DJ^vu��t�Ep�J."�C@"8�V�+�!Ԥ[����膻=�՜�c]�+P80���� b�i�Ro
�9pL�b���cf�H�{�k���P�+`��Ե*�L�x�h�5X��wj���V�M�پDf��B�9�E�����O&��ǡ��f/���Z�'
�Y/�m�5����K���Z���K.���"^��\,��c!7
�m��P��pތ�P��I���M_�'�g<�	�@"R�!�.��9X���+�!���0KV�5�|ܦ�f�1���&u1���}?���*\�jϭ}��.9���t*;
HJ�lM��G�fz�`V$rRr E�b#������9��<?I��1�u2�po2y=�?��>���!��t�4�������S
>oӳa��p�]lD�ݷ�)w��:e�М5��-'{�ۑC�sϵ4��Ymn���E��&�;9�8uF�.��bI8�=�[:��l�e(=�G��z�"���i����ը������͍'-�Ч6��
i�]>��
�8=�{�B�|%�G�v�/����g�{�W��D�E�:W~��
��(f^��R�$�HI�+F�`�����F��e�����‚�y�I���/ ����>s�b��O&�}�Qej�P�T+�tgV'ds��7 ���Pl���g�!26��.}�w�l$��g_q^MZ�fb���9�8����{'�QX��4́�i!�
�J�֔L	�\��>h�{�'��>GS ���[  ��
$�F�,����>Н�m:�.�]�r�S�!�B��+����^q��	a�JC�<���}�WA3���rA3�ɝ7�<�����3���u"٪�R��|��\7��M��:��\�p�8�5Y�=t��E��<\#��;Y�1;1��!�PA�L��K�8���j�^��J�����N.z=F��V��x�������q�Z��v�q4#\��SV�؊H�T6cK{�Iv\3��E��\3'cEL: ��O��K�Gk��HlT��c�b�J��6�>�CK�)m0m,p��'�ƻ0@���pCB���K��71?���7#�5��AWџOt��D
"��"��n���(K]�څ���w�ĸN�u��h�M1�{|������p�1�>q&�wYc
��9���;G��N�	����<�f-�G|H(~O��t��k;��E��g:m��*e-�@����cd���&NJJ-R�LWU��L'�\)��Յ��ƕF~��чJ��J��VX����O�I>��A���g��E@?ݤ���0��4���9��=�a�C����l���?�������kڒ�9˽��)��=�J�(`%?c�1�#�LA\9��<N�N�.n��t\0�[����ͫ�+�� %Z|Q�s�g�8�S'������.�/h����8�O�G��G��pW꽉f���o@"-��9ທ�
�瀼��(��Ĭ�-�cu\���aQ�X�)a�f�k�}b��B�{�[��
E�|�.��_A�*�0k!��:y^�[�*����<�W�o����nY��Ij�0�&�1��.�V�P�ya,�ǡ���IIp�̾2�6Cޑ<|��%�D����m�Q,Vkמ�1�cLj����5%)Ν�&��H߁���%�5z$c�i|�b�#�y�CB<������"�	J	Q
��[
T�u����c�s���RhCI~D��q3�X)~�R�#"���B��ͥp��F�� /~�Ô�+N�2�Gp,.*>E������>������DǸ��T풝���M�
�{�����R�#�����j8�dI��^���
�Օ
?�Es��Qm��28�T�r�+�T�j���Z�@L�_�<e8ٍF�N��6��`����+���[�\E3���ď����(D�p(����vIS���y�Y�z��ͣ�8���{��b0��߈;ث��<������>�9X!�q�Zâ� �c�Al-�$�����v���9w-�鱞�6ּ���w�gS����j@�s��%��խp�Ƃ�r��[<���Z���w���ѸʄF׫5,�\|��)���.���7���-w"�ٟ쿇������>2f�$���"����G\E�;կ�ա�M�p]/���t�O�{�p��������"!��]�M�#(��Vb�|�P/�>/��H��1:�e���P�R��m�1�����k��$��G�)7�-�ƀW�F�:t3[!;6��&��Ъ���?��@ػu�\�������NɈ��\>)���S��2>�9��b���_hU�<1�.>�m�rڶ�� ��C�p�C�;�c+���~�[�y����ɚDT*X+�IW��B����J�SY�������)�,�:�6��b"����t�L�#�%�跅Z'�S��DM=?�]J�b>����5��@�E�b�7q(�$��}�q�`����/f�D�����Pp�g�Xe	933Ms�f��U����Icȸ��B|T�JY��{�6�o�a*�޵~h�UA��I�l��{D��j:Lc��%J���EJ��q�x�ɢ'�Lߵ�c5]�����- Cv<Ou�g6N�b����4�yc��ߗ$<E�B�D�L ��ï��s��A�޲�Kp���*�?b<u"v����͏i�(zf���*�ӵY��L7����5U!��ͯ���ș�g緇�������/Mg���9Cikȿo?!�
	G�˪	 4��mP9&���g�L���`J�})��Wn=w[���.�#$�q��
*�,�﫺�78r���ve����Xv��k+zg۫ ����:�����i�9�H�Y��[xr�F��鈴 S��'�g�p x�.	�@�Kr��0T��N��in�����o�؜�����0�~���><�B��z���)��~��m�.8AL�*��0h����b8�jBN�>x,�P�p3��iD�g�+��f�eR���^��ʊ��Z�L1�Ͻ�;܁��m;�"?K����b��d�-Hz�Z�!j�|����1������'��Ϝ/"�J��r�q�P�b�?�+�%����nh�q� ��q2a�g������B:�z�b����/�T�9=\���e���F@bt,>�U"�d�ښ�<������T%�Ձʕ$��O㯸as�c�*��H��j<؊\#`�Z>R�!���#H��X{�aQ}�t��ϘSLX]t�"vn"osN��'���D��.E�F�A$�eh�>}F�u�����UqLϚ�1!
 r�	�R�I�\O��[�������@SG�0?�N؁�	;���xAi��6��
b�t�UIo�ڭ��Q/=ۑ]��]7�hx������M
*'f�ܒq��k#�������
C��GySǷ"���,S��;�gL��*�0�u���1(�����I�~��0��A��y������ǽ��Y⻟wx�f�ht���ZwL�
�M�[�g����6��rq&�޿�p�p�_�G��
u��m��w�6G6f��S��!6p�\1�ΪE����ʗ-��@��Ja�BW{~O�L\ރ�Yg� @��~��N)�6D1v��;� u�dT�!�ҍamK^b��H�-���^�\��l0 ���x�-
�4\T�19�t��%��?$��1:�<��B�����s�~�=��ul޶+��.�l}thcSS(O��qN)��1/�S���l�Y%��Ta��]\9�r~"��b��[^~[��C��K��$o�V�}��۱�z.{��*��O
���9Oڋ��,[���Yw/"�U����b���Gg�ц6ߏ���><UC+p\�d�}Ԛ�|q���3\�H	�7K�wO���usT�A!�q��26��I"���rP�4�������T5|YF��p;�#�n�[^뢣9E��Gi����c��xT�+���V�L�q��Z~���ט!�e�1Gp-9��>D��aLӂ����6�2+���QuΒNj����8��&�nK��xK�Igf��k�F>5n=��⢺H���ej��_�%8��k�Š0����{if�}#M�/I|��<iph��0�0�`M�����Oe�h&���N�C���e3�^�&���
�FR^L۳��
�X_x&�7��E��H
�u�lm�j#g�|
C�1}h�:�+א���W���DÁ��%P=�X�s���q[^>�PV�w���|��5�8K�t|	gI��t��<j"�&$���ƫ �c����/ˇ�Q$	��_�;nޫ8se+�R����0��n/�Zh�@fg%��~��l�DՃ�s�ݦ�9��ð]P�HƖ>��꒻�vx�ǔ���O�/�/Ip�$X6��j~�t�w���̆]54�r���ZL�\,jlמgfh�GF(�b�a<F�R�Q��[�A��I�p[c�Zo>�Sc|u�fذY�9ٖ{�U*Z�<��y�Z:���oҾ��Sx����CHi���5�������?3�c�?���*
��H�@!1b�؊�ᜓ��u��9:�Y(�^.L���Pw��.KH��R��.T]�`j^rtY�Pi(t�G��I�S�G�k��c"V�;rt�~��
�U�����j*����N��
�֩���7�w��P
��bJ��nPp�o���+?c�8S�z��!!<���%�N��'7Ȅ�*e�V��J���ˌ��,��qn@y��J��LH�E`̟,zN�3��^3e}�&����	
�T�pN�< e� H3�b�a��xq���?��k�v`�2�@/�3?����l0�(�X�E�U�#]��e����)��Z��ڤ�̢�!d	~>�`��_�dr���@@�)��)!����U����V���������S��}i���wpJ�S�����>?Ej[dl?� �i삙�=Q���W	�5�-�ÇUrX��O�N3b��0g��EP
R$+ۣ
���ccL3�j�
F�5�8����gbj7s��_�}�s�ܨ6���JuZ˯���u�<��P�-PF�O�S�ycJ��ǂ�J���酈Ԯz��n�w�x�l�?�׼f��Q�0DM�>��a91N�ZB�L/�sH�0	����$��Œ��Sz5���na1fEH3Z�J�ä�O��Hw�(�x9E��KL�`䀰5@"ѲR�[�81���ȡ̟�t������i���
Xd�1Y��(�F:�	SX�?�y����N7�¤�Lѣ����<R��Na����At�
"��
{r�&l��م��
T2�Pc�&��W�MZ��:3H�bZ�}����0Kd�o��Q�i�8qoDWreG8V��x�V
k5DK0��vN�1��OKtw�~e���ְ�������=~��׊��gh@Q"��{K���`�0~8%�-=W&��r��^�:$r�0`��ذ�Є<����|=5@�GC�m�4��lI5}����lR{[����r7�@����Dp�-���Y`�z�'�_����:�(pڤ����
ID����UB&
�c�����_t�H�b ?��Ny
����F�ӛ��(�|��M>`�}]a��?n��c簽��+k�R)��y�2��{�|Kᦿf�%j�8ڙk�eu�tvx��.���)�A�Ϣ4%u�đ���GZA�����4<5�`�'���xi �RO���
o�7�rtA���
��M1>~?*Y�X�E�x�HU~;�9��|���i���)r�$=]��1m��g6�R����g�V��TF
OEm:6�I>�7R7U_�%��8J��m�?��CUɸ3w%�y(h�P��"����[����9�����	��D��wYZbuLwt�O7y����w�	2���N���V��6k��mV+�sV��&��6�X��>;'%�n����ǔ�a<;�NP߅�v�m8��g�w3Sh_��O��u,�\��q6ZA�Z4�Z>�G	p
�d��b��O�	��O�|�Kb��N�$����(
V� �1;�|=:
�m��;������1�⇄or����F^Ƙ��czQ�'5\ڡ��˟
�F+��"�
@��Wx�$歷ڃ�'n��œ�L&w`���s&>~��i�L�m	�3�KZ��i���9��<���i�����%�_�r�Ms�0�F9.�G��><�r�:x��C�H���,}+�L�e���P�%N�/�Y>�����_�Gw�d�Ci��l�Ӗ��5�t���b�e�H�6�'5+j����m|VΙ���� ͦ���#Ɐ�e�7�ޝ�����0�u��Sڠ�I�ܧ�����ly��9�
aD���l��V�i��Ų��å�;�~�B�FKT��}/3+��	��Kd�0�gNi٩����d���"]�n:#P���l���5�!')g���ZS�I�Ϋ�Ⱦ��]�dA�G1�ϓ@�`�9��c!�Z�",�M��^/���M��Ǣ;^�	kU
+�����#pKz�DP�U����zӫ�K�?�0�Z�BZ�=���x����k��1�:���3g�%&>C=]����!��Xy)���^n���~��(��J�8I#|]B��0�6�U��卤�>f��h�� "�d�,���׻�W�j�sE��
��ځ�F}���V��/X�5�3��[�2�W�٥�u��w�Ȃ��`�JxR���n����Ǣ!a�y�*r�v.�k���1E��n)#��0��,$xE�7˻�^gX�cJ���PSѻ�pQN��r�Z���I��	�z�R8	A��NJ�aS|���C��h��������;���I�O*z�6qHj߈����`���%���Ӝ��f	s
��	��`12�y�9�т#+��h�3/��O�_8��맪��c�����B֨+��JĂ�e�Pn���R�Դ�3�m7�8W�ۚ�H�dyŵo��S�χ*v�b�J�US7O�I�1+2ƃ�CR��֔�.�H<�ǔ|-�VE��ݯ������@���tL:{ɰ�s��wI�r�J"yk^6��KfiKŚ7�]����WR1{���=�"8�':U��^'a;���D�+|�[dž��чH|+���Q�D.��CLk&�ީ��3EY�,|fk�@�����Ͻ��-�����ִ�Z%��\�d�|��F�%�3<��`�+�D���G�%(���6��SWX.���>�� x��
=$�((��Q��ذ�Xy�c�q/G�F�v7�NWv+���fj�Eqy���GO�
h���
8q@�<2��WfP���eD��Br+`����Oĝh�yYZ��*�tT7#�F,X}����bRe�Yb�:+x�}����7H=�E����Mg�#ߣ��������(�{#c�K��<"	1`ch���lKV�.+
��Q��o�������4f���K���L�W��%���8����ʌ����f��1%s�I���U��MlK�$��#�{_�I*�{e����3��[��iݎ����1�s��K��4��1�/l��`��Im�3��#����]q�q����σ����N´�
��r�7�O���B�j��G�0~Ț��� �$2��p��s��|�/��v���;��7�4�p�K7�<
QΈ�$�UĄ�JM��!
������3�`�l���\#���
'��էP��J���Z��B	��/��͟�@۳?�R]�����l�"7��J\�1B����Ў"j<�Vt.eN��CL���eۻ�j�Ad�J;�ﰝ,M6Z���u��A�Y�c8<r��p�;�(��O摸e����f�ڒ��޾�mӅ����a�G:B?��f8s57JDw[+��QZ�����0x[�y��1xw��d۵N�Y��ʯ,˃t���VQD#��L��x��U��B5�u8��yw�E`6��[H�W�砋-���ۂ���+����^���w�G`'J�IՂ t��S+��B�H�]�P�j@�8X۟F!=ɽDH/�
h8`������~�53G����y�n
D��l�`���1Z�1�סIu����zS�v��a��LÙ�*R�x�^A<�pD���)m��i�W��g�D^{�H�ׯ�3&r^m��c��S���y�>��+![K�<�Y&aE��	�,Qճ���bw�O�v`���������sS�G*A��F'9=�p�3g�ا{���6*��Mj�_���s��P�g j���v�`��ӭQG`�x��4;iZX�1B��t���}�,QP�[���F�	��l�{��e�7u�H����|Af��Q�OSf�A��a�pd�B&��6��?0��ż�0�0��<?�^.�s�>Y���X���ܞ;����"�m�e�`q
k7�����)��o�RW1��#e��NLP�e���!�K̗g���s0fv��<���N���lL6�~}Nm����^��`&���*Ɛ��jq��Y(R@��i�w�UegXRYrD�b�$,s˙K�6]�E��
?鋤�/hL�W���6�*��`��>�Y:g�8G�yܦ�<8�;�{��gl[�&����4�!4����`�H��5e�p�r�А�����u
�٩hL}H�ɞ��%^�mˌ?\ŌR�.R�x0�Q�([̔�
j"�2�Uu����J$R�0K�K�v"Oe�	��"�s����
�KI����{�1���V-ӄ=�J���Lɪ����F�+�E���gk�켬J2��zD8�
�u��r�8?�Z�.�t=�F]�"vAo����5�V���H���E[����BC�V�n�D�ç;�K���%9N�{[����J9��π��!k�.��N���u�ށ������"��LF��y�8#�T�cy�!Z��X���R6�=Y�e(�F����ݚ夥���h�-���GàܥF��P*�����(,�1Tm�0]����3iP@�&��ȀH8m��:L�s8��$���::'�,U;J��$yV60}l��3�J�p�I�$�T�\k�X�Ze|2
�G�G��@N�5�xv�KD4�0��\v	t�[��Y���
�-X_�w����eJ��*��#'т)t1!���(�sΝܿO��������G6�'ʗkm�S%��eLI�ǯ��Ra������gD���3���_m�z�����ͺ��0���f�>�J@�РOJ5���I8�2pA����!9�Ƣ�@M0߀.���%5�Ѿ�
u��jRI1犗tS��m��Ḯ�,�=���;\��+���fa.%��8����Ʈf�PD�v�?l|d{��q�y\QO��&��B�=o�L9������;U�����$��n#������o�|��t�RZ���ؠ����$����Xg5jW��CE�C�1X۵�1`A+�q.�u�u�0��'hԥc_��HZd�Q�4&\�P�o{�s2(dT���^�I5�H�_F+Iw�<�l�C	�¯S�c��q �v9{[j��iAT�=F�s�0�K��f�+
Xbwl�©-�L������#�
KYJJ#o|`?���(�Jc�y��g{�i���O�!�$
�����D���V�G��X+�llH�򒇗�e��Xx&et_�Q�1�H��{�YR�ț	��;#]��:X��R���OҞ���f���"e�v��;y�4�s\���@�F�

�,�z"����V��.]L;G�14����@մ��c��S��������IU��}/U�d�'\�$�5
:�͛�x�j �8���q`F��5Ω�v�D>�-נhP4j��W�USK�,�����M�2�"7Q��էI:�91�w�#)0��n4��@�xo��=sÉ]��|����D�����j@:r)SX
730eB��
>�~	D�2���U�����;5v��v �;����%�Iy��j�M�WQ��&)K'�,������(���b���C��>�:2�%K6'P�<�OɊlȨ���;��/(�rY�J��Q��t#�js���5Qq�֪���|���l4~:U�V��Xu�z.өk���m��{���+� ;���7r��t�"��zW�k�G1�k��$��!
�LK�>� �"�]���]/yaH����	�K"����#�-��`,�$�}Bt�!R�|�~
`�Jd��'RB�����1}�kr��Ւ]�^
l �ҥ�^���<XG���
KO��]�N-ߤkێM�D�ۙR��D�n�PQwT�e���4��($첖�#�78�S�V��m\��^�G�v��i݉�>w���=����M�/¥+8�Iu	=���N�$L�g�<���i�Ȝ��7�d��/�xǘ�m)�n��F�x�uK{��I ���Ȏy�Ŧãm��\gk��V�L���t���Y�_�i�xt�H�/)�2��L�QV�/F��/Ԝ0�Ay����Ȝ(	�A�(!��n���DM%/�Т~��Ϗ��vpN#��[��F�KYWq�=^ݹA�~D��D��$��"M�$@��cF`�I���>��K���I��i�M<���R��+�2� �N��z?,���qS�we��q
�\�j�!۹lu"jǨ�4`�����%jxS~��F�|��3>ѿ���nY���*�f<܉s��.zh��P��
�{�����(��ht���v(�
��6����G2�X��19뻜3Ue܈� �W�e��:̑�m� Y�<�B�k�(*j^�g`
�yil�A�q�����eB�)73����~��31�B���g����8|�����!��i��`���ufy=�ap)n��{׸&(Xut
۩t?��䶌��MԾғԞl(D�f��u���_'h�h�J[���XU+�A��������H&wu�DcL�ZMH��q["�2���EZ�~�f�Mz�`�c��s���,G��>!VjMQ�ɚ,"�W9�!�Ӝ��+ꓕ�BL|��P�S�-i
5a"�W�}�W��j�?�#���[*�K���=Y�V�h��(�_OA�R��s'�)f��R�t���m-��
Gd�~�����4B��h�^�2.<'����GueVM�"{m�X�Y��6ߦ�^��(v}�I�a�
�S�yK�r�k%+E���Tb����]3�R�Z١��{�����"Qh�����n%�B�@��&�ₘ\�Z�Í*�Z��ջ�2/�oy!��ᢄ�;?ōǰ�Uv���,㬏7w�;�T�Q��\�M����hB��
�zM˪��c<Yf��m��lWʟ�9L$�ni�t9���	D�#���u��)q��	���)��͌	��dZ#J�Nְ�R☛y�w���e7��eW�*�_���u7��5�)����e:�;��H�H�X_Y����5��G��Q6��M<ֲI�De�Н�u.!q��)�C%."Q�I�����:�4,�2�P9j�Wݤ�9>(Nv����{���%Pq\�,`���Q�#�q�b!oK\��dA@�e�����	S|ԗ6"lp��*�qK��$���(FAOM(���z̙s������$~�Uw٭4-b��JM|��i�^�z*?Ig��ٳ�<�Z��a�
�L�Щ�w1��PY�]����g~tp���Z�Z0�n	�~s����Ld#��|���)�{�Q��x���ZT��<.H����tR��{��M���q눤2�CW9�m����[���C���;��X̵k�Z*h�"JI�Kz�U�X���f�j#w,�|seزU�{z�|�H���؄�ZYK	ur��-Њς�7H�",����D��X[JP����Ҍ�f
O:I�C�.����4[�t�4k��
�nֿ�z`�f������nQ��y�4;���܋�J)g�󏂗�
r����lQA��l���|@̧Y�y���EOI����T�.եsȎ����7�@!�88�iD�qV�;��'�}�F!�#)-�Iܰi?��K��Lt
7���_�w��E�Rs�E��lc��w��m��Hs��z:�`[��,��<��Ԡ�Cx�=�u:�'+B���@��Ld�`��~1��(_�Z�_ٲ�<@XQ>�iQW�Gd�{�Hb;�b"�C��^�E�%�� 3@|�f������m���:�С��h�;�Z�a/	���X�S����ɻ��">d���P��m
�<��t?S:$4�A{�x��F�e �Z�[T��;�N��F%c�*��5��gɄ��г�
gX-�����F$���YK��b�x��`��m��.I<��`���6��x��B�������̫�t�
L,�[���#�ٜtH��l��0����}D��4����Β<l�c�����ő��MIě�-b��R��)����,]_R�oyfxn�;϶!k7�H���G�8�\g'@Q�Ѻ%;5��\@�TV�O������c=#�t*I�.�Q�b�;�nw�V?x����A�g� i�v �c$4rj��PN1�+߉<�g��ͥ���D�QY����;��a��v�.>��'�:�U�Eu�<���O>���Yn	�����'3;"�g���i:o�\1ݲ�㮾X-y(~��7U�!՘^��^�mم�5z���p>ҙ4E���@����9��1�Y��sJ!̼�g�#�,ǖ(�=��p�cW�4M�Fq��
�b�
���5�,�ɡ�.N������2sb
�����:+(�s�t�lf$����2�m}�&�	}ṓ��[���,I�4�$r��Ac��˒��>v���~�����v�qb�Lt7�l�־��-���Ʈk���)n��9O���)���)��O/�r��u�w֤����)�Aϴ0͍W3��7�J�$]ɤ�좩��vb�-,�&�?�z+��ė��}o��@\j����~���,�;E��ի*���ȴ��؈�n�.ᔟ��kR?yj�>�y֏��
O�_
��7\���;�iZ<4F�ϙޮ�v�)��E;�XR�%���K=��w�~���^���vw�Co���ߟ��5���72�(���
���9O��/�H:U0V.�!G!s7}�hH���JXE��\]2#�u��!���ꩌ5]D�X�ceV��m}OSCB�|j��/�J�tbƒ6@�gX�x	�%Q`�ꡀ��
۴h�ȿ䰨�1Z
�ʦ�I a�m%=Ӌb�J���91�޽�^XG�I�ia�t�[_خ�ç��q���x'�Y��Ζu\�!a�ٯ44Q'4-��-]�;��t=
Ȥ�E~C'R�(�]��ę��n�<46�70�]��E�'���[����X��FA�:��R���Hz�?p���};��>�v���P��Q��'�N�:N���vm�;U�l�p=��حJ���Ļ�-�1'�{?�J���w�FD���Z�[���&s����$�ݾ+.��L=��}����.�l�7��c�`����H	H��k����B���K����.{&��б憿e��m�m-���C�N�'�n�۴8:~�(J �CM����3���1N�L-�=�/�R���`�s��Z�Dłe���l;F�(O��	�fk�qSc�#�K���	��f�f<g6��ܮ�DXזc���=ݰ�C@U�H�
�[A���^���������j�O��eC����q�A���(����44����	b�����v����(0�&�${���x�qiL����!3�Jf��k^H�	�SYu7S�H
q��=����/F�+FJ�j��O�h��FH9ub�*��]G����*᤾&K^����"�\��	�x�Ǜij�q�s��"s�J[{�2��Cs��'(8)���#QT'y����A���Nv�|��#𑗬�^��wL�E�J�q6��o�`.$
#a��.~���/�Mg��g$,�l.>�p�
�ӥ�&nd�i����v���9��{^�������\���=_b+ �G�<���k��l�}�^��-$j	�]Xp�J��#Q�9P�
{^�wq�V̸bm&m�L�)G��az�<d��[`�׽;s�����R�M���s�
�lr���b<P����r�c�0�OE&��s`q��MV����Aԉ�N�R�w&y/b
"~���%B�wRZ�9�Č7U���(y�0���D_�4�F��C�[�{X=�����*G&��Fc�ZZ!�PJ?�q�9A�Mx�K��p���tu�`&g
�khȡ=X�!��h�F|QW,���N��cq�:Gq�Qz�/��e����
�r�kL��o�v��֨�~X����̘����ߘ���`ſ{�\��R :/%Pac]�c�%Z����1kb�1�_Z��%�+�X�E���_���Զl;y]FXqTuf�U���{��+/��ѫ�_��e�@��ǘRr;T��(�ե�j�;���FF�yLC��m�����<�.������ �6u;�(Ѹ�к
��P�@�����,d���[8�!o��Ȫ
4F{/��&����zbeձ��Vh4N�"_�
����pҗ�h�4�e$�^�9#A�$+i����GaK�-�2��0�F��.�$GLo��D.9%�I�l!-k��<%~�Ĉ���uT��ZL �#�kˣG��g6E)���X�����0T?���+S/�F�{��|O��z0�����f}�v��U]P���]zX[�U���ƾ0�c��ǡ�:�g:/��l�C#R�]�9I���K�(ޥ���v��aƝ�UI��S=I�)p�OL�_���t�$;���3`'�#�фb��ns
v�Iy�?ʋi�/>O
�M�z��x8��4��k���y����!Nt�	p����b�]h��	ȌL��rjǞ1�k��T��8�m�騍{��f���'y��k��~�3����Ĩ�1}<���*��HP�Z�����T�۾IY����8��,xWM��#���x��'�'�*1�ؚ�˶���K׵q�1��Al]�0�.+�H�/+��v�0O�A�OS!	-:�����ĵ̙�e\Wwi��*� e�	���I�mPCGq;软��5����Ɔ|X���(�N�`@|���y�"kx��P��<C	
���ë^���,�]ىo�;FMs���5��	��/<����=pw�"�qX��{��˕N��ǃ$�
*�iT�I��=�	��aTy(����A�Ep{�aV]��X���TW�=[�<^xwѕ��ÅK���Prl�0Y�)���Q�Y��(�̗��.\�Wr~b���H5�^Kn הm�NR��=o�!�}�#E�����6�ӏ�+���z���k��A��- ����V5�.���g���Rj%M��
9��E:X�XlF���Sd9DwT�� ޙ�
�/zEf��F���x����k��
��Q+nϔ�8Yx�=Q��"�j�٬6�<kI�[�>�F��R[�ɡ�1��@��3&ԛ��g+���d�-� �`RIj����[fE'7����{�U�#�G��X��C\�μ6-�u� A�c�y���܋h�\%p�'.�0�Ԍ�r���3�����������]��Į�/�`4<��
"���Ω�ʻ�3�M��t����S:`�	N�z�46�[�������N �X�W�Z��kS�-�^�w1�6Յ�c��~�15�K���+{o�ʭ�6�>/�]�q��]{�s��x��Z�VY��l�oH�?�0��jl���d��B�8���e��c��O��L��7�C��"�g��u���<x�ҏߴ�k������L9�<�.E@�z�#�Z��f�*>���	��t�%;��zx�;���`�s�t��N��S r���D��:;��
�M�W�ez��.�k##J�S,��l�V���q2�:��*f���z0H���l�r>���d�{H��s	�r��-I*T����w�;1&�
+��p�@	%8B��.�D�7��`.�
�K�̐���b:WE�"w u�*�ŕl�A�(
��ޔ��5
�
T���-r��Gs�4�jZm�(dC�w	=%�,M��8N�D��a
�62w�O"`��mB���K�J�S���ħ�[�������-K㙜j��9�
�����<�Aם{�K��}�F����.�x�G^�wl�F�պ��sF�u4�j��qv}U�<���+;$�����\�Ȼb8��~LŌtң��\{!^
�6`�M���4�pD�`�sx;DŽm(:�˨>"6�}�K;�ya>������_����D���#�<F����۹?�,#(C�$2ݑ2p��|�~�_.��Φﺡ9^x�_��غ��������]���3��0'��f��JZZ��qG�u��ɿi�Y髨����$�!��v�u��~�=k�n�H����c2͸�K���9��ӹH	ȅ���h$�#��
��GT�Jo���Ch���v�YKp�>�e*1�˭��W��Üb@�<!����n$M2;�4~��%P�P�o�I�鼢���¦Ն�hip�
�W�U��W�"�A�n���	��[%+F�Q�Iw9"໴���2��c�B����m���e�����ؖ�^i
)��3ZWVŵ�IM�m��\z��_��{�o�(@8޴_�𡂪E�Bj3���ax�2|#������r�f��H*�7D��XR.7���.���]dW|���_;c�v�w[,]w�yh���a����.��

!���d����x��G*O�Ä4��	N�k�0OusFϹ���h���ɮق��
^vf�Õ��u��$'�O�1Z��V��>~����M7�"�?���e�v���b����*����m�#m� ʭ���L��èĠKw����r���S��T�h��}�S���)!?���9��q0`�am+�`�s�{�q�Jq��ـ��H�s�?�ԩ�ϐy�������1T
���eY%�����_Y=+k�K��FU�J��iS!d�v����3�
/y8��C��[h|���~[�e9�5�
�S�����y���ӻ����ue�P
�x��G�o�C�@�aF����~蔐IG�L^%�p��������扤��s2��hѱT�{gxGi��K�#JA�*�O� j����|�܄O��[�ƫ�����Es��A�~�e�~ڛ��7�n%Kvo
X��v�C^Y�s���gk��:YX!�QE6���b)�C�7��!�!���s%��F�~�3
��z�
��uG�
�������)�i+�a�hKj<� 'G+q�DI�pӞ��ǰ����.c>K'~�u�w$�r?g�?�"���'��b�ʼ�}���sp��;�F�
��o�G��17 4� ��]��¸��I!;�k�MbѮNX�'O��t���J�ѓ�5~�,=x�'��-��� .ʯr�r����!�LB�K��
?t�"N^|��4o���{{Mc�>���|o��Pq�W��.0Sϸ7����xq��B1�pu�Z-�ھGF+mԎD��w.64��Rݸ3��� %�T�������K���Ț=�LNr2QQ8ɯ�~�R�8�Y�N�Y�e���r���X@@�6���@�M�_=�1��+�n�4�����H�S�j�Fypv�c����G����}G_�K��+�dL��虃��$��u��R�V���A���������q���W�s���bh�\�I~ �=齗�t�i���������n����]@����ꈠ�%���+�����N���[�Y�_�+!����>:�G�{e�K��%��,�?�ϑ�s�~/alѯ��i���!��:W#
��݊[i��y�fm����o�@�(�:�?.UK?��
S�)˭6�����>�9x�n��r����xO:g���ʦ����lS�'�2<�.��}\���-��ث��dl=4F0�-�d�Mf�><r�qP�Z��B�M��ӎp��{�0����(0��A`ʾ��n��!��ɌVB@뼏V�[9&]��6�y�
w��H_@��#[��aq��t04g@����&��c�O�@ꊱ���LV[D��g�eJ.�/������\;�����&UOq�ٻ+w�q�"f@�Z�ǝ0�����cη��-�GrW�t�Q�D�pk%�B]}}g�:�,�Ps��p�X喻_)�/�5�A,�69�Xt�ڦ���.㝉���
-Ϯ��C}��>�s[()y��]�t��,���p�_��w�����d�wf���X��a҉��߰�܄�4����9�e���ӤS<�ɳ�V�JH�������k6^\�o0�G�Jxe�&ն�h���͚���5�Ȯ 
�[j{d�9o8��wD=�l��Зt_��>��a2��u/����"������p2�^91��>��m�QR�>��aNR����6���-�թ:Z��f<F��Ě��j��Q��cM;|���HȪ��2�H�?���Rfg�|U�!=g��A���2Xr�Y���F�<^��dZwLKm	;gϞ~�Gj��(�Z-��^:��9���cjDF>��2�e[>�p�0���ΜZ|��$y�t���]�ez��������,W�`,Ac�}�i�GQ�XL�^�8P��/K�ݭ��QG��x��ꠂ�MEֹ;x�LJ�2c�R�r�`���%�O1�Ă&�rčA�L��CK?%��A:�,H�>O2�]&V�," ��?AO���N���U�yl���#��{U����Td��e1�.���-��`ߞP?�ol�@^����	�Mj���hw����2-�Oxmb�U~G��,sBT��:�M�(\�_[�c|�Ʉh�D	(�i �p�:�,Wz�ѢN��`�쯸�Q$��ɛҤ� (��URYg�Ļm�2���xx��N���ʼ����k�yl*\qʆ9ـW��:a�OH���wՊ*�vY���)�Y�G�����0�%��29�x�=�p�k�Y�7��_b��AϢr$���|}�J�����0���S��60���n�|�yy+N�a=I�����i�Z��*�%e��OKۤ�\������vnp��-����"76�8�~�]�M'^Ŀ7�s-�i�I��l[�����E���igݥ�F��y�0i\k�Ov��x~SK�"Qv16&/��M���C:7�N�_#�nu�W�\����¯�̦/��f��uŵ��'p�s8�E톐�%78u�av�^컠��^���ߒ�/�u~$>?��{Yd$7�t�盅�zh�#l��q��r�gH;"����-��R{�Q����w%��h���t�1>�����Hh�D�94Mpe%4��N}���\��/hzM�@d�omE)���jo/w98�ϴlpYFS���gr��
j�f�B�hI�S�*(d\�y�Q_ua֔o�J����S���兯3�����z7����X�i��QET�D��L*�6v�(�I�#��],z���8�f�֛4f����q{)K����I�|�r 
��W��)�=�1�|ZR
�^%}�����~������:�ɼYs���O�aXiy���Q��Pr�oVB��$(�0a}�H\���8Rq�ב�VY0�O��J�6l�
�a�,����{��{��X�c��u2,�mlP���W!�ݲ-�/��XӔ-��Uv�
�W��aS����C�,�W �*X?ŋ��F�7�d�Ë���V�'����i��:�G���ѫ����%)�Az�k��-����y�m����7�I4��Q#GT���9v��(�,��`L�>�H~�G0����� ��J:Y��oU����,�]��'�'2���'�
���=�<�m|9��\��햂X@Oa�<��|���0��z�7��l�U���Ă���d"�>���Q�qE�&�*��e������Z
iJ�����/ħ��y��I>^�c���H;<;�8�"
�pf܄L�GW�������G��l9�6����jO�K�/`K�aߝ��@�+;�Z Vz��^PwX�-�Eu�.����B�rEzihȳ�G�/��C9�����z�(��T�7]� �Y��0��f`���%O��Nܾ�P��M���g�p;�����W���1�]h�a�/9n�����Knp���|qlƆ
�6v�XX����(kClfM�����:�ȝ
z�\��uw�V��F��=W6u�{�i�� ɩ��'����Eɯ�,od�2�|���x2�7�E`X�d �X��4�=���ޭY����b��u��fІ��|z�c�у	?Vx@�-���Հ��0���_\oE����j���1�誃3j���[��*�R>ǹ�T�W�
D�N���_��l_���Q�;�/Pq�&��k&B�v�0@k�B2C�"�1�
K��2G�5������ф��֒�jp�SH���2-�.�M��L-X'D��
@�
F�fxV�m���
�� N_�E�Ϥ�E�z��vie�H�����K�,�m$
����3q�ȦL�=R����[q�Àb<���Q���lvS�ha��*�l;s6�c����Q[���7�m\�A
ν놽î(�,�K��ʙ��h�ė��ʘzAښ�ѸWO�N(�ʜ�dq�b�j����~!���r�c����̅?\��O4��#	S�ZC���N��w�s�P�P@Hͺ��=��)�����JhL+~��YRI���p¯��(4Dϫt�m��'ˮ�����S�^O9�o-�P:��ի�|��3�yLM0Tb+�^T����]7�4��7��j3S�T�7W��������ukf�7۟���A=�xW>��{3|�a�,�T���֋��Ϫz��C�s����{\[&�����_�R��,L!�S�B{%�]�iE���P�Z��i�.���~kr/ �=4U.t�$���/Q?�ӧ.�Wt�0����B
ݛ�k$��u���
��b�4�{�bl��Q��m�B�r��M�k+���	���|8L�-��(�=�o�>pW�������f�b��d����6�B�=�G�P/���ʫ
ݨeM=��Xܖ�&��S}�m��t"�~3\�G�� ��{H�/����:+��"�!�ty��
:�W�[ƥuH��qm����#�8؜�t��,g�"av�;��.�4";!,�(�����Ȗ��	�yp}�����!!�4��=,����O(|&�����_�J`@��R�8V|;�jс���AA�;آiU��|�(_�W�dՐ�71��l9(:U��`2����R���A�����9�2�2�/�����\Җ�	-;-(�p��OW��ӡr^~
�4�`�Զ4u|P���<��&��Q�t��3�p�B�7��- �Òz�Ca��j@5��4ړ������H^7٬l�LE�q��/���Q}�XM��ڻ6�� ���v=����Z���e��V5����'��b�v�f$�������S7�<���lnK�a�D���|�3��.�i�i�̰�e�+��F������6�'�oC�e\g�Q��$5
5�U���=L�����PY���Z�T���&h�e@��Q��2n��z��D��[���a�MG�s�DZӯ@0�����k�L�"'��NCb䗠�i�υB�����K��v*='�a���C��KO��E ;��w���
���?X�M�����%��| ��2^����߇��yԍ:�;Y N�3�i��b-9������h}��w����D�����%�ޖÃ�9�w����.Ca��>Jir7N]����
ǧ�R.'�ό�F�ļ��1=#w�Bږc�*��ہyQ���hv��փ\͈<MV��2��c�����1���~${�4sҝ�F�Ī���{e��U�ى!��*��κ��H}#)>�~�v�?K����ؐQhL���Y�atBg,9�.Ī��R�D��W����pC&�bɯrom"
'A�]J�6%d;Fㅗ�d⅜�^Eڏ���ԍ��O8oa�D�i�W.z�����r�IA]�n-�:sF(��HG���G��a�1��Ns#��U=1?�i{SZ�J���F�"%�0P�f��p<2���x�ӎ֐U����A�\���+����fs�iK���#{�A��@.��j��n��0�Υ	v��Txǝ,XA���4&���k��6SD�]id];���s�.��KA#��/2��\�˼�B#.�[� �:�=���/y���H5�@segܐf���b�u2Ѳ��6�(�G��jfJT�*�d��Oσ}�,v\Qh�T�B<��&=�?�͋Ys�ō�MXc6�����+Yd��m	;��E<GZh�#���+I�z�k5<��q����9d��N%`��x�6>�t�x�����u�S��3|����e��'1*�e���uwUS����
�y07ݳ�+
Y���8�(�%SmEN����Y~��6�=[)i��h�v��/�Щ�/Ʉ��0hX��݃t	&G��V�o���(�Η:��|�����h�5��0m::r�3,��{�9$y�K$���Q(��:���ʂ��<��W�"�@����99�|��Qc�уr"�iiǪf�ֈ���h_�5?�y�vd��Y�TA�=1�����[�ݕ6T����#��c��x���Nkl����4�P=���Oz���=�J�;j�=�U�K̙}<F��!r���7>�ihYk5&�{�����W���[��J ��(_œE�T|�i�]�<�+���j�� P�E�ZLq��AE���}z�Lo�e'�ʦX�d��e��.�J��)i�jAU����C�ޚ���V���1������̤�њ=�Ÿ�rr9QV��~�i�0�*�ǂ6���j6vј��U0K&�j=�Z��ؖC��B���C4Oӳ���j27Cu&����w�yA���཈�6���=�MK���,�3��l����oh��<@��
��_�C�v�@�Pԡ��
t�"�/+�h�
,���!
�x�����D qɫ���P��5�������|c�=z$�C�v@�:�}�/1�"]��E��s%�������lR�J�PȀSVM��;����T�:U7��2ДB怣L�?�67U�����*�¦��+UpJ�73���0��B�eH(2��
�Hb���cvĹ=���M�h	�#i"K&����pr��(9͗x`����;�T"�����Iv+�AeU�]Z#���R��S{G�py��noP�Q!p�>7�e��K��d�M���}8�SnP������7����FM�	`���W&�6@^j`#=�,o1�QXں����\�M��͘�V�&s,��iZ�:d֫llۿ���.�N�Cs���F��J�#h��XS~|
��?�i�أ�y�X�H��%W�l,����/�E�U��P(D*߉�m��i|��2�N��(tC]&��`�����s�+,��2v'ϟx��R�O��P�*
4�a/� ��2a웫�JL��t��~�!�rgyO�-��!�?�! ��g*7s�]�FP�fCP�t��a2\M�h�]��H}����O��2��m�(�n`P�֮*>�~��-:������^�|���G���CN�?�a��+c����5�2��Uv�N��Bh�����O��r�ڳenڃd܀�$>*�O����>���"&h
�I�q�!W�KCl�m�wD,e�mF/��%�t�.TW�ۂ���Dg\b�k�.�-�4+����7��l�x6�<e����Gӿy��Y����̠D��� �s�DZTe�]ᶎ��~�X�'d�j�5z�p�y9=�����V��a�`ۼg���t7T�~P�����@�Ï�#)��̨H���]g	
�dv6¸�,R�o�(
�v	30��P���s��QA<��s�`�q9��U��-B�/Z+k.�<c�X`+��F��-x���E��!U�iTږ7��CG[�{z��g"���Ҫ�sx�k�-C��~�/l�:���%�|�.�;�e��̀i��1P����N��l�d���B�P����Ef3ߤ0�X���i�Q�IZ�l���4�6*`�lA����en�Y�o.��N�!(�+�s'7Qg>�p�1�3�[�!�g�6� �w�t,���:p�a|kж��#[>���ұ���?����exN|MF���Yυ%�8�8�@� #���1��Y��L�'׮Zh}���!�Ĥu��{Ul��G����d�����~�A|^��mx"a.&�(�+�^��N�P�l�XY(���.���C��"Qhp�Z]�
#�J��.����?ܰ�Y_��B�a��s���>#�NE�툻&(c��NCV8�vm��-'nTL\�d��r�7D
�f$/=�tB���r=��Ky/sRA��������*�>4�Ĩ�;�6�=��/�yUk��h芆��h�����4���Lh�iY>m�2Ĭ�q���̌d/1���?D,�$�q�.J�?�R��?ie�p�il�3`B Q��D�y���hM�������|�eOH��!��,�p�
2L7q��I�2I�@	�sKRhH���m��e���^(�i��Ǔ���-�lǙ�ĝ����o��ȯק�q���˥د��w�	�uWH�{�:K������/����V��ؐ�,(��c`�Q���$�'��1�5P�u�'����Gx���.g�A�C�U�����ñ��|9Cm@�^Ů��s�����t���M��h͘���I��Kd��b���fѥ�˝;�R$濄��"b���mQ�ZSМ2��G�70��)��#�P���k�3a����r:�h�l��
K�D�.\}rm6�ܦ�i$=��G��HX �~%��A+Tcg^������Ro��N��+A�Zp�h�3��q�h��cf4�Y��鲴�u���ٜ�vp0.ߛ�I�8G`◧j�@�(HP���б�W�[��⏐���&��G�{bl�"�$,�=��8��q_�N~
�m�S���;�+9D��΁w�nBQg�NR!c�����s����기����;��P�*�k�A
O���̵��_�ۨ�_�0�,��Ac�ޙ�V�_@�?zU�:��8�Tjݙ����?�Tshh\�n�yn��y���C��|�y�$�'J��\�R�"�#e5�KO`�ޤ�f���CK�.�E=�¹{��E��\�ѓ<�W����"2dI��/��j�����n�J��\�w<�iO��,��L6�O�eJ������'d�Od$Bn�i��5*����=QZ�Ч�G�'�>^�Vr��Su�E�Q������{%]�>v~�K���Y��n��
xC����d�"��d�J�,�B�[�	�K��ݘ<μX^��]���;Y��O��}�,�k���]4f��ܼx�M.��?+��ه�u\#��n��˜�wr`�_����u��z����VD�����k	��h����o�%[I#��er݇j�Q7���ҁ��Rb����G�D@�DJ�vd�vǵa�☳�[������)V��qQɁ�i�˧�������*�}M��:l�
���Bc���p���[�,c��G�O0|�[y,�KA��l���ʾ��Ĥ�Ty4���0sF3ة`6��ô��R^������*}?�Hd�`ث�X�j���9<�I��A��H�W��`n�$�nФ�A����9UA�T��F�1���
��n���p��Cڂ��T�e�I(~��i��K3�Rbj�M!��SD�L��SnkzHb�Ǻ�6?<t�s0��r�lk��ޘ
)_.ʼti����tt)��>~4�e|�~���5���[	G���G½���{�a,����¿՝m4m�t�G�nޝ����8e��.=�B�D�@��'!��"�yǕ�Sw��E��̵�0J�=�H3�j�c:��4�c�Z�C˾I���bO6_1�bC*|y�%-%��Bܼs�ӌ�i������)e�	r�J�(�z�?��������_�9�T/��g�5�	�8y�1��[�ru}�;�f棾fz�%�:u坢��gSs�Z֌�.O��ģJ2B�t��ź�x�a_u���Yϧ���q�c๟��!��.
D�>eY0�k��/���w�=��b7[	>!��`����@J�0
�~?'
o_No�����8R�PY�wM���g)Ha�j�g��1�?��� `rk�0�`k�8�㘝��3�"�wM������ᤨ�'{�!|�g�m��gf�Z��A�j��B�<�I쨜5��2��y�ך�[J�Utz��V��v����f��I ���X[IKF�~n}1?KA�D�N�.�i��R�A�I��9�qT��iX���	��&G�6ή�«���MV��s��w�\�׎\0�A��p��+\F�L���P5����<D��\ĦA�cyhw�c�DU�M�D[#��g��m�)1����?���.���k�&���o7��7v�)���]Rއ�Õs"��P��3L��
3Ց�,�(� 84�N�d�����|�yO����X���Ke�B٢+��zvoD��#�s��S��6��pV��`������q���7S����sB�Ƴ��Tg�K[N&A��.ш"X>LT�Vk�
Aw�B��vf�U�-�=���L/DP�aA;p,�L.��?-�s�T,i�$�ށ���
�Y?�>fg��t��h$΅�>���g\�c�>�|��_�㖠���ޤ?V9q����d��Y��3W��"�D��i浙bc�YӷO���&�	���ĜG�Z"��}Tȿs�`$�I*�uo�"�c����}r���H|(�R�ùc���zW�?��(p�B�+N4jKLm~�"M��}s�Pk�<��9 w
G{�x(}�\����r��na��;�(�ظ�N�c����VN�`�M���O�8Kx����θ=u&8�C7�*V;�2CNbD��\��Ψ��������N;u�&�m�T�W�
2ݠ���`xNtA/l���|��3
��a
Xs0��F(��:hڌ\-ޗ0����
F�$6�x_�"�頀�����a@��D�Y�빻�.�w\�uDt=��O�h�
iZ8E0R�`��YOqaj��ڀT)�|`|�#\�cR�N'c$��M�3�LBݝRY�-X��r*�l��,�uƷ�F�FU�>
�C.M���g���aQ�N�R0�89b�����Ѹ���R��|f��R8Q�9$�a*'�����
�hu�]�G{#^��:dE��Q-�E�$F/~����MA�h�3��[Y°p�w\,�Q��iz����i{+Ű��u�E����[����m�����/��<�Yx@��>t%�O���+��H����>�*�ѝ�r,˸�2Q(^r�4{�H�|��<cp}�9kp���-�(6�]��?��c݄i�B:�W��Ǘ�gɷ,3�ٝf�-�!{���e8�Rŏ~�[S��qc6��"�.�ƙ�J�xM��3E����VT�{�N�ui��r[��͌\x�U�r3�9}�}�Qr#�_��e�_���y�Ǖw��o�߶���Iv�F����@n�t8ׯ��F��?t3�TL\�N��8#��'{�Q�愉i�JO�PXgA�&�1�1����V���c2����m�Q��4��&~!�jd+��vKNkZ�N\�J�1*%�G�4_߫t�_�������!oPՓ�z����Y�4�d_����CbuoդZ���d�[��@x���
���%�D7�m���h�N^�N5�D�^u#�<6s^��1�D�ȵu)��g���[Ɖ;��z�h�Ae�>`���z�:�cFI��m���(B��/WN~*#���`�1���{�ݲ�ӵ��$Y<ۚ��|����O9>	>��Y��o��qz~�t������m�fف5��`h�6�\�@�A���?s�ދ8ȳ)Y/��[�n��Z;�lt.g=#0��1�<��
"�Vƞ�k���L��!N��]�.��CSՁq�&��CK�=��� ��
��iI��\ݳ�;�z
y"q�f��N�
N8
̯�/�="�N8�f�?Qc0��l+�y�#�V|�*R#,]/���6���lx�CV�A�W.��aE�l�D�ģF������<D%�wi��"o̴�%��5*\��LH8b���f!�jN�45�-ĝIA�Z��,y�xK�&E�ڃ�#�p�h#�I��R\���|�CŞH��3�O~�S!v�����J\kp�r�uː/
�3'�����@� �3s�g�R!�P(��&�:�)s�gm��O7�jw\1�|L�ww�H��|+f��I
k^]����"��,B�*d��ߘ�1�I֦��d.�;����ذu.�n�����\-Q�Sz��z�s�JD�
���^��
{��ev�=s�����4_�z�9׭����Z�	5J���М�-k���]��ۢj��v�
L��R~�HP�D\�7��y�Ӽq�;'�C0����(��A��֢nq�n
��u�<�a|d�'>�RϬ�S[��u��^��Q0�5��1�e�R�Nh�
��^�M�X�A~�,폺�i	�2$��ܖU��rI���[S�~=W.��ý7	 ���[�&�{�t�'Xx�pi��R��J;;��G�v^ϚjȐS�Ѓ������ҕ>�����J�^
�
��)U�����$��!�>�h�|�t��ٟ�ݨ���hr\���V��?~��,��dy1]6Y��~��#t�?m����t���vo�6r�i���~/z��e�8Pe��BZ������W��Lb�2�~ �����ނ`V$�R<��n9�0��w����$�EƁk�
�O����� ^�;�Ǻ��#�J�(H��k�l��%߻n7��/V]�j��LO�炏����U��o�禊ޓa`r#h8Zr�ǢH��50�F.Jl�rm�&�5"Q$�V�W��E1vD��PIX�	z�gˈN#�J������G97��W:����!49�e���ב�/K�k��ɫ�?\\7�j��6�����F�K5:�*���R'�$��?�@�������0 ��[@r��Fр�l��A��|߾�My�:h��C�w���q�r�`��&;��I-(H�(�)�ӽ�,�\
R����
���X,.�?��#7����}��fȟ��q��
v]�� *�kG�j?ߒ�6��Ղ�=P�b^�A�R�7�;�ct���q��{��v��v.�(ҧ�sa�w�T����Hu�lp��A�{���y0b��iH�r�bc�,wq�"�*�ˁڀ�v����O0�:��5XN`�4��'z�G��K�>3��6#F@�2���d���u�V�����`�v/[N���Z������٢�2�p��O��8�LƬ|�j̷�7��8`q�4q9n���M�N���4�e�%)��W�G��9�r�)�H�J�$QKF��
�z�ɳ��w8 �Vg���BͿ�܌W}��~���5u�<ecpS��vܪ���A[K��x3�O?k�J3�%�U���fDžHG�����υ/׾A8 (�fCR�_R�aaB�f����(�N�svy��&7��8*�W�8ʙ�K�?�<�йp�Q7rXV+�N�m�_��n�����ӷ���/�K��$�1��n���՝?��8���^��<'&q��<�`������Z��'�$�Us��`��i)�]S<�{�`�9;� "@:ɠ�< `+
��!���^8'	��0�n
������Ƴ<��X�/���F|��.�c�,E�I�Wc��t�,��,�NY����_t���9�-�>
�����Pҁ��`�ۯ�4Q�������˶R�b�>���9��i��3D�J���~�Î���l���/��8�%�BQ�'}�˥�Pb������d�F졚G�N!=�e�M�}H�,W��]�1x��T��+@���h��ל�A���F<��VA&�Bz�AY�%j���F��wF�tB����W�#���7�.�Ư%v�w*�x�x�>�!,zk�y�()ڢ��7!kgW�R�Ov�n*N/�-��Q�P!�6�릍�E i|�
.<�֩V9��T-��&�;�c泥�����m���γ�9�7| �s� �u�]�^I����8/��T=�PpR�]�_wp�F�C�(�5
߉�_'3Z�Q��V�h�����N�A�i�h�]nQ;�M��&�����ڽ&}:X�,k�(�K�|�/��o����4���٤3
�����YYZt'�s�x~���p�o �D\�o��,^YO�׹ޠ��t��F"&	��6~J�w[��!�&���x�<N�(��^���qtffrN4��Ƚ
�J��@#q6��q�)�/19�S߿�L�Ň	����\.��0�ٖ9k^bl��,��|\;Y� ��nh�R�w��j,�?

"�K_~Ŧc;i˿�r,[����-N��(�h�ٮ�9#/n��Rc�4�ƜP�e���h~��*�V�jmJ��-��G@J�����#v�C�s����BsDR�B�J�ꞏ��-/$VO�T#A�V�
'!G=
�wvdD�����K6�Q*��=���U�r&����|�r��@���T2@��l���	P�b\�\ճ�DJ4yx��RuSk��-�M��__�P�ԷWH�H�vA��HnT)�zCJ��X8����B�u�
B$�J
�7��v̩����A����h��
��[XN,iųJ��	����m�r�p2�O?�nX���JQ*�_	|b�����vK���E����6��Ve���^��^�Wvפ�,*��\�VF�/Ӿrj�gE�9����Љ)�̻Y疪��]�{ch��{M�����7#�]pU&��o8�dA�|��N`͠ΰ lW?�S�$&;�j�K���w�]/�UY�HV2�}����(�w��b/�X�u��2 BZoI����	W�D�"��T��1�l���wh�(7[������H�K#��z��B���22�ڍ"'��\Χ�{�l��ݺ�[��.=�h�-�Z�O��}�%�6
H2_�J���#�s7�I�g��-�uq�/�ߐ�5�lj�D�q�t��˶(�5��K��Z!�9H&�=a��$eO��@��Kƥy"q}~AZM����#�x�&��~��.�.t<F��.Ee��~�
O�S�}8Z�Z�G�8"�E�o��j��C_�hO�%��l�r$��_
���_@Y���_�B�V)���DS���d�f#s������M����{H�B�x;��ZZ�].@�HAY#}����EB�L>���mG�a� �r��#w0�ސ��:���;�^CIs\P�^�¼�v�V(��q�����v����ܣ�\8ɷ�~�!�d�
U�{�E�WW(K)�I���[Y.l�ϸ�&N�NO�P8�l��ͯ���o��9N�.��ʖL�a<&^�$�Knm�[:�5zހm?$�f�H�Xu�2ϳ���*���ln�z
N��F�X�+祄����b���(ž)��պm��4Հ17��ޣ�
@�ދ���� -%�y
��JҽC׵�m
X2
v��A·�o�i���C��[�[�	��H�?���6.B��yk�BU-��l��&C�'�Ɩ;�ft3��|s���ЉB�;����YV����CY����:W,mbLD�+�`8I�
���������_�p���p8�ZK���f�ա��W�a�8�z��!�dA"�2C36"��B���t,�~�2N�}��c�D+
�RN�b�v A�s�;|�Ȏ�E�P<��璵�-�dI�M,ѹ������F"s����s;	�ʺ
��3p>�cz�:�Q�(_���,}�:��Kn��zV�3`v�>O8l��5�̌:�o�:�J��f�n�H=�Q0mܔ��a͇�J�ay��&(�ņO:0W�����U>r�j`G�7J�<��ݴ��|~�'�_�>�����BvG)���<���N�i�$͢ ��-�J]�.a{�{�x��W@��	�O�r����,i��
wqd��8]/�v�O����JoÌy�m#M��G�C�^�`Ԩ������	��`����X�_�o��ƊSN@_�A�$�'k�N�
=����z׹e��sU4�r
�ӄ�]��:��kV.�bSQ�6�S�y�*�L{���P���LL
��M�\k0Nc�J���0+�
�:*��9iW��#*��=���)���J��vz�c;a���%�m+rJc+Z"v�c�QU$Sa�;f�Z�`�{������6�Eŗ��s�T�zxioV�]ޠ\�Pm9���=0d{=�f��o5�P�x<4�6P��9C$U���"�,=���:��u��XC�cLv��׭�ۖ"����s���BR*�HZ����x��K>���b:���2�î&�O*Ou���9���C���{���6�׋�aAb�Ʋ
�Y�#��#!�+�6^���:9�줱�"��a!�Nj{�Q�������c��T�E��OE+��i;1�}s���כ�q�;����2ˢ���Q��/�({� ����O/yc�Gg9P�n|'���6���rLv_}�D��s���M?��A'<ډ�s�O��&
�v���З^4�a�A�����|bpv�!�M/b�ث����ũ�*�q��v�5�CJಌ��@�����7F_"l�˧g2��o��dF���[ʼn��2jG�n7:�6N�k�&�_@Ұ6l-Л3�B~W��c��_R5�þ߽��p�Ulg��_�ޣ�E�x�0��e�"r�v�^��B�'��>�Rh跄�6��G~"Z�3��t=�a7��4�E�,D7p)�K$b'����9��x����r�#����w'oUe7�柮·�{㸙&i��Ā>��k.�ɩ�J�*W(���I"�y=��=e��ce�����s���lq��Ȳ?�fs!������B$_�NOv's	�����6���D��	🃋�qe�1�+n��.	Zx�2D��4`�^��,�&�M~߇�p��yH�G��Y廥�� )�ρ�N[�����ν�U9%�H�v��>K�a�E.��%_u����z��J��9{U�.AG���@
<�����b�C�\�h��-�V>�-+HB�����
���	�8Jͫ�}�A`��_�Ǻ�����	�a�Mm�d �`��X;#�`�@�}�We�H@��
�k���^��J47�r?���#��l��Lb�0�N���b+gK�>�� 9J,D%��T�p�Z �z<���GؙF�5�uh���<�d�@��vߏ4����
��P�>����D��&��6B�/��m���'0y�e%⚆����h�җ����Ss��+���&�`ܼ���@�S_^�������4�\�pAֈo�6�ؕF�7�`6�%���������CmW�sa����j$#Z���3{�B H�֙!R�]��唚!���t��V�qD�g�0��]�?�פx�c�ʡ�f�6w�m3F	��65[�:u��F��m��k3�:
5���
�0�-���
Z��и�^{ZD�ܜ|V�N"C���:�GJ������W���L��6��u�����}�c��a]������@��y��h������4~�"�N�
e*�����q��Bt[:`�夽L��1Q�GۨsF���:c�A���D���
+���̵���:Z��F���?�
��5}5�(�r�k(�P���~�y���He~��L
�)>kk�&�ir�(A�j�y96r���&%S#n�4��V�e�iw�L��>�b(���P'm�m.(,R�;4J(O�`v��H�a��&���:��{UOi�"kAd��{�w��%����&�5�TWi�B>�IG�mު�/TR*�ܙq���#�}�1v���5*�M~y�&v;F0^ x���a�5��;#�0tz��z�%DU�j�в�[�����^)Xe,���R�=BB�7�)@>�sW_$p�
ϰ�G��X��J��bO��a����=53�*-(��x���‘Dg���ꯇp^l�T�	k��f�j�V�XRJ������n�#_�Md�년�6^�i��&�d�(�m����$��ٝ��o�-Q�lv����-D����(0�
$�h���̯���v�*���g�pR(j�E��w�b��o��%�X3��2��aG�-'&ʜx�x�P��ka�"e���<�܆h���P���\Rq��򁶭�[7�Tߵ�n��O}%yB��S.j�F�e�4���0�k�,�:�9Ō��G`^����I����\dE숏��O+z��p�$'�b�zh�WM�C��4�����"W�����ˈ�_�kX}n�@Ѝh�
���I���T3�,�-�x���"!b��_��ywi�mn����f_S�Yi�e��g{��1
����a� ��.�N��y�G�N�7t�[8�l����Pb���MqȦ��c�C�:�pÑĎΫ�,b��*|�6��,S�zM<_D(s�H
�/"^��-I�`k�Q�šE�gn퇐e���#�dCNz��紵�mld�Q�Q���t��|?��B�<���R��&�4aF���f�1§�t�T4i����փrTq?2�k�c�+�㋁e����T��hB
��}T����@�+���`����UG�/L�E��9s|\qs�q߲5<,j)�4U��=Ŵ��4w<ڒ�xt�M�X��t�J��0Z`,̑����[4�I��~$��B�r��)���ǔ�C��}��H
���Xvf~Q�<|	��j�=i��"�H�-W0b�P����7>e��9./�����#
M�3���9�@��Ϟ�{ߴK�Wy��*�����)$���f�͜x�*d�ʐ��1�/u��_�6�k��>U��&:���3���3��N`%&�l�8�]	��4�v�+3����)z�M�E`�[��2� q�V�4�lY�l�:Ka�A�����(����"��4���nn
�;e)��|1I�k�vvP����H�$U�ܣ'�%����D�ɦw�^�l�p���ElOMY��5M�[O��)-/v[$�Eb�:?OV�º	��L���TC�n�{V[�d��茂��Kǣ��?8�Ϭ�	Ydv�c��V���)��.��2y� �/��ﷇ/�s3!��I�����Tq����K�!Zw9J}��Rna�&�!Uc��}�nxxՋ�PN��l˛ ��m�g�e����O��>'ӭu	g��]G��g󘅐\~�����oM�r=(/4iN6���j8�C@u�ή�_W�%^��-Cb]M7h]�%'uJ�����Q��c����?}GXhL�xÇ��}#�?���5�U s!��Ã�#���ٯ���^nf[���_�"�[E�e`oJs�
A�k֦d��Fҙ��~YWH�y�e?!������"�Y�.��'�$%{���&mp'RfZ]���bQhCX,$��Nh��`R�����?�mM�ɐ�
:���O���0�p��A�'�n����op�]�h�̢_dQ�HѨ�,QU���(������qC������4�ywVYT��}萻�f����~X���)���,��з�UQ�Y+�����#�Qh]���eʾ8E~O��j�"�ד|����s��B5حf�����&��L�D;g�0�S{570=3{����"�������Ⓔ0��,���u(KWM�~�r4�u�)
�Z7N;�!�—]\�"�	���!�[�`/�⼵���7C7�ZNA�g�cU���sp^���"�r���3��r�6�҇�GDU��3��(���e�gxX�[K�Cx�A?3�&vң����}p����!���p�E"@�
<,F�'Яy/�|4�s�Я6��I<�.�Vl��:$��X�?u05H������OT
�AN$��̍?�!.���s!��^_��%�\8`��	�qZ-U���_���s"b0�h���IE��I�xM��\��q�tG�Ǣ���3i��~�1'WbO�"�-f=�%@G���U�f!�pz�n�0��}�J�}c?;�8�����J�B�x�B�:�>m�-�6���2���͂�+��$�Z�ϝ�Q}�O�)۪�������Ճ���Ԑ�(F��>S����3���3g��
�s�3�Dgf����ƚ;��"3n~̢�es$js�c�M_E'W�%��czM@.�B�{(Sj���mx3��X% �M)���k{]��k�V�^�e�(O��R0��u���MgnTn�B.�ލ�N2���u�~����<<0r�R}��qɅ�j��"���ȄC5f�̆�p� ��W��A�����:byTt}��9HJ��Xߴ��
��S�z:bJM܆�I���*rr�,v�ۚ��]�1J�&�&���@���_��_&�,lb7�B�x�!����o��ߚ�}"�Y���@�z}���S�������I��V_�.����,���B��4`z���8���s�P����I}�c�JW�枫)egGL��p�'�!�<k��\����3��x���EB���p�8�s�
m�Z�
���Gk�:U�%K��5^mm}�X� ε ��l�t�E�\no��v�H�� �6�D,`��Q���fI�h��_%"m��j�c�k���8P����(�`�?0Δ�>��.��l�O_��5�`x��5M6̳�Q��W
�R�#H�,|y��H��<'�(Йo�ZӜ�$����z�0��;O�^�������X�T���yfn�]��G8O)U��'_��Ws����`��8��N�>��8�)���fCrS����	�}��:�.�c�{�g Բ���2#�C�0�Ķt/t5ۓ�!�~��A�$,�|�I�=�Pgo-�_�c�fosr��Ma�($�1�Q.�Gy��o���.k��AI�����ϋ+�>��kj\���,�? �D��^^S[gO}�f1��sŭ61u���t����A��i����=vdL�u�4���T���ڗ�^O�w�O���&�Gw��!�$r'�S]R�n6��������7<X#�w�[��⒉�W�yh���ތ�ٮ+t�h�䦌���ԃ���
�@��^d�|�!�$�[? nH=-ʿ�%������I���jI�޽��G1
8�1��K�K_kڔ]��$1� �f�O��sG
�R���i�y����\���Jvt������t����ce�T�3r#�+�
�k�*T�?�#����3m�O+�D�ڣ���y8�%L���)���߰)إO�����O:��k�S�Oba�oT�>o�7�l�q	N�Z韩[�6�2�C(�C[�z�{��2���R/ZcU,�v���i��:���U��t�Y��!����Tj�#(ۮk_���%��OtS*�Z���u�.g⣙W�ш/˵
Ro�Ƌ��̸.�G(Eɕ.<��c7�g��d�G�q�_+����r\��[�^��„U���W���"�x�����e�h@'H��Z�31�u��b�J��й"q8^ � ?��*
IAN��Ri�Y��&��S�x�Z��V_��~Iu8L��Up ��0Sk8vDnJ���JF��RѲ�Bz�C��h��L�x�`�������9������}@cS.{pvl��j�	�c%n�ē�Iz\R�B%ٖ[���8 C�Y��6�P�ӸE�G��u�$ŐIk��%�>M��;�DX߱_U*a2edվ	�Y���C��Gf.uX+���C;�G
����o��g=1|�=?�TN�:~�
�3G�<�7��B&�B*�y���Ճ�,�,^u�rca�?P	�N%�8�v}�Y����(��NR�����t��?�(�b�|��:с�$d��2ʬ%�u\����Ա~%D�=��p���a+��~]��DI0���;Lh�u�>`$���ڟ`�ԏQ)�����Ұ�_r^����	+Ï��.�Tfn�d[a)N�75T�a�`m�>Q��0��K���wbI�_&&�Zo�L��}��B<!��mT�P���-��n�2F���ݓyT�@�Az	�~z�����?���SY�B%W7f#�$��?1�{�nNϓp׭Т��!Q5�'OO�����FwCA4FU� )�$�sa@DHS�!�$o�Rh�dz���epQ!d��G��6����	V��� �PȺ�����m� �@�2�r������s���t3� \�4L]�T��w2����?��'p��s�^�D��f�ۅ
"8��l;'\@4Gj�6��s����'�
}�?��胴{qb��g�f��E�|�k�z��P��-�yoВ���xT�^��_�����<?F�8�҂j{p���$�K���6��X��kw@��۵9�Q2�K��R�eDBR�W���z��O7sB.NJ��E�=�@��t�s^͋]�''ł��!TQ�r��)Т+V��n�"|+��h���H�%����)��v�Xz���0CK�̙�{�!��#��|�
�Ӝ��ݏ����OW�	>�E&J����+`���a�71��E�Ư�Rv���{�}g��4�wۿšKA�}#�9��/Um2�Zj̼���?��p���j����^�1+G�R�gx�
{&����y��C2��?��?�k�C����k��S��L*�7/>���<����в.Z3��_��(Kq�%�8�`�D`�࣋��s����[�Q��؂آ���Ѧ��X�-�"�ÃS����OJ�#�=�T��=H<]`�e�@�Q��߇H����2��ܘã�����d¹�{r�N��NR�}G`P�[~4�ix[��U��C�}F>���lE�R���?�E��Y�f�w��&���9u|��
N���4Zu�RCR���}@��V��e��@T�ɀQXx"�5�7*L0�X=�;�uz�7��1���yłW���i�8��!a%h���;ޛ1�Z!\����Ϊ��)H$�&�I=2�u�b����Q�#B�XuY���
����V�A���\�/��x��o�,Y����3�/T���H)�O�v���༞��D팏���,_���F���L�}�:�'�����/R�æj󮁉�Wx�U_@Cں�5�ۃs��ʖW�4qᏪp��B��w��G�V�}�*تw7ؕX#,��u�ƪv�޻Ɫ��F�(�b���6�ư�-�tNo90m,s9��� rTr��ER@���[��e��I'S���{��>]T��L�{���~����2Rqo����#O(�Dk�P�o܄��+E�)p�6�H���?�0�RN�y�R�3�e��O7�Q��>T�A�X�H��Zqi���9�5�^\�C��`��{)��"j"����0[�p��"���vC��sRT���'����	��/�Pzn\ʣ���l=��FT(c���_����E����`vL�߫A����f�xu`k��up��@*q�KӼj��D
�!�c?�~1�����n�����3S�������1Xyl��͈q�C��J�)+/�p�C˱GJ%S�T��\�z'G�<J��e�2qϞ���d��n�zI�Xs?sa��x��&Ɩo���@N������~.+���T+��%DX\�Y��:T��1��71�&�aAk.��.zOͣ2h�S��ؖC�������	�v�]6�U��p$�?���U_W��g\�K�‹X���s���oX�����S�x�{!'$IZ�,ś.L�}�/n9�(b����AQȲhtv���N���,��S���J��E�Q�<��K��o���U��Q	��S/#G�8-��;�a��n�:��I�(��CY)T�\�-��Tٞ?
q���ָ%��6m5Bvg@Wp�~���<!�h���1���a6������:ږ{]��6�ir͈�e�E|��Q��m� �4c�mH?Ig��nI�q�d:pw����V��Ic	dX�TC�c/��W¤������15'/6���t���+D��C���$K���[�c�c��{?�7x���$C��̏w�D�.��ɑ���o��0ɑ��xa��6R�i��BV����D1bwxd�StdA�/�^�}��]�D/h�#A�^Mq��ʮ�2b!�\�8	5��Q��������Æ>�(v��
b�CK��Dfs����<k�W)fu܉:��G����wR�cF�&�O�b
�s�/p�;�
n;bt|�{���������V���h"g�����~�����_OX�j8�o�=�ɒ��,�^.c�pR�����o��*�}�C�,�C���X��g���ǒ��:�B�7$
�B��}���R�r�ɈlҴm��g��6KD�>𙔓��NNV�D���S�P�3_`
�����Z
��;[�n�D�f�wQkc�<�#�Q��c�ȐE�c�A�y?�3�|�Y����zW�1�]W��S&Q���)j�2��2�/�sE��I���H�PW�Â�M�O
��
hJX0��7���[�+���̷!��p�}U�iH>�2|�r��:��C�8$bH�'�GaiJQj�^��Ȑ4M��;1@��D��J�nB55����]f1�Q���JgDd;e��/:�Rg?����#�~�`��K�V��>�x!�h:�{5#�ι�)�飹k*��˯�G�~ŗܒcq-��8x�Pd��T�>���&�:hT������2�����;�ݴµ�jӉ�D�u,���@�
��ѩ��jBh��{Z|N;S$V4��S���f��[�j��;/]
�b���?�+���^p#�A5��I��EzK�Mw�+����y0.��Z$�j�^���j�����N]#!
읉�=Gn���&jXh���2��F��$�ڿ��$�Sz�T��Z��jR����BGd�auV����>HNl,
�W�4����DV"�����ᠱϻ��'vO�F|��Z��+�c�|X�J*�*?
�
�q
���t�?!�bcU��::�=���N��`�t�F����QQYCo�hL���ØȜKdKܔ���њ(�1j�C���D���
���"�+�VZ��=�G��\%h���M��g�+5'���ד23?_�.E|`k4Gf��2�RY{{�*��R��]n�^��G���Um���`�� &"�ȳ�����h������}UJ�9��S�O�����k\�}�/c�Hl�.쿑V&���N�h��ń����sԗ�ּH-/ck�S|�uMW�����Z�C`!�F�z�D�;_�'I�r�/�WRѺ��D�������i}���'S氫Œ�Q$��CJd`ii���_����(Kk��B$e��7.�)˵48E=ۭV���ۨ�� ���ZnB3�"w��k��U�c�@x��Ǝ1��+�&N뗌z�� ��#�O��[~d臦SIJ�c�ٙrL�O�FGi�4"4WBM�[�xM0��׬4��̑	����W;�ҽ�h�z��z�:�_�\���4�����`���Z����I�˺�r���pF(P�M/Q�VK4/���(�T!^&<�m�5�D��Z��.3�'�T�!p�}(r��mf>��
���ˢ�`�Z�P�ǘ�U[“t!=�<<��k(��ر8o��K����R�B�za�:�o~�d�}ؔ`�X�&?hx�TUx/��T�K����P�m}et�4Ýlަ���n���vq;��
x�|=�_�x�u�d��:��1a�7=<
/�J�gW�׹㦷r�3P6[տ7u%�� :�=��x�"e�X��I�����t܌1G�IgD��¡���O���2� ����`1�([Q'��c뙾
��-��Zq��(�^%�˒i���fX9ʮ�d9�xOP~��!O7�<��L`�r9#�4O�c�Q=���
ƺ���#ne�-B]vl���>�S�g`��Π�W,�€u~|�9�$��H���/9[�d�^]�WƇ�������|���?�4K�+�mg`�M
��A��#i~~$[�p���nܗ�T���9����(.-|\W�_iPR��d9��M�+,���#��B�R��#��Xջ�ԯ?['A��*b�)9����!O��@���!R�������*%�j?Ӥ&>:x��F؊B_���@a�u�:)˯�g�b(�l���h$��KJ+J�JO��~t�C��RX���tt�A(�^���g�'.�}E;�2$b*Dj�)|���|a$���/z*��߻����`�&Rï���Z�x��ݐ�7-�f��Q[yɮշ.��Wq'���q���-�j9+V�t�0ݔĝKIv���{YO�����#[�E��p^0<��n�<tn��U�:����ÿ�[�>�=�U�0��12`�sa�I<(K72w����?�z���^:_�u���L�~ό������� ���+O�H_pwy��	��J�&���E�����"ُ��)W�>���7 ��k�|��[�M�:?5)��{�ÝH������e�����T�q�aR�P�q�ܘߓ(uW��x�h�%D9�H�k(�=����ܩb_�9U�j3�y"P���� t�oRf��K�����5ٖ&�����������S#j�:g�צy�>��N9�J�È�1�8n��ͨ� ��eL�+`�34�ǣP̝��~���J�F5�62Y�y쐸/�/��^^�>�	{�����y�N6����!G���N�u\������3ΞW�r
���/�A���*1 <�V6�f�83�@Zd�.���x����:S	����* �!�`������ZU��U 9R�2���+�C?�1#R }K�"�pJ}���7��C��I��O��S6
�{/�<���X�q��/��f:�(����Tq���	�!6�a��*�]"W����#�&2�<��=\@�@MM�"y͔�r�
����GH�*�h�4Ib����=��y[O`�k J$.��gn)�s�~����8�{�4���5�X�G)�vDw��			B�%\�*�ʂ�Vj�ԃ���<�G�My�7�ax!25:���0�oAϏ�d+���\��'���l�L�)��n=�k��U��:	���9��8�=�!R;K�F�ׁ&��Jr�w��z�"7�{�O����-��%�c�ri�v`奎4.����>��K[��:�¼������$ֱ
ʠCQ)���H"<'4*�q��~��T��P���q�����~Ұ���4,�F�&S�&Q�`%�2�g$nڠ�lA~���&�y�����B�j8j�a���&��yP��Z�k�Cf'�4���>`zd���:W`�45k�;U
b���y%�OYo s��L�)q�\�Q��U�6Gc�Co ��K�D���_��	{i.�4����~x(��y;�d{2g{�K`v��--��;���Kz�X`X �V�����[*�ޮ��ƐM���| ���ty�R���eS�l����(盵������$��b@�l�k��ß��3`R�X�����EvJ�zc�@%�S<	��L�J ��
	�Q����:�:3˖�#
K8;|����A��1�\��x��Ӣ�ç��/�Fr�+'�x�m[���!Ց"t�f��X(��Љ�W�]Im�����'#��w�J{��@w��ϝ�t7�R���~�̀f
j�5#@˺l�(�S%�R���P�s7�{�E��I௔WyaY�)6�I���]���a�~�k��,���D����PR}���hH�!���Z�D����n̶P�ެd�{���C�?�*�.]�u����`G�N(��QJ��=�T'TP��_i�`-~K��"F������dA�t�^6�]8U5��LV�E�
8��!Z��B����3/���	��_����(f�{�T�i��c��y���zR��A9=���$	���G�����w��+����oۯg����o�J�~�v`7�Ix"����7CϪ(��Kpq���hnVJ���s	ccu�ך�ha�*n&�X$ǟʬ���{�xw����n������o��69W=�s�o�W��=S~���!�'���3mKgucB�	�)?��Q��8�Y#��
�VT+~�w��B�6�Ơ�M�/�>��.0'���%F�k��j�����ŗ��\�����pf�XJ�����V��G�|-j�ƅM�4�Ae��B\؜)\���A@�n�
����@�إ�h>��K������ǚ���F1��$�����i>� �bjUB�[8Rg��3�t-���(z��zН:j�j�@�Sf������ز'#��G����V)�Q�,S��t���!�i��ӂ�Bպ[�=\K�:�,���V�Ny��qݠ��n��	l�&ޒ�&4
���l'�f����e�E�Q�R���6ԫu�����9���F�}V��lz��z�?�czg�u�H/�ͬ�J�F�=���f��_�9#��[UB�<(��ܑqB�Qբk��,�=�ݔ}�P�!�&�D�]��Z,�F���W��f���묮�1s��s�|����;<�ģ�@�j�P7�y��~&�Anq����_�`#[?�����y�EL��gN,�t�d�z���	W��?!N�a��9�}�����XƑ-w(�=�,�S���l
��Ҏ(��K*�m��Ɯ�?�}�P/���DZ�Tʎ����:�v��{��T���F9��9�~w����	�ou�S�gڅ�7��'6I6^m,t�rQ�J���m�d׭	�b�7��C`��]p�Ƴ�SK.ëZdC�R�Ֆ�;
͐3_��C��꜍m@=��`A�W�n6X�%����#���h�I
=R\��Tc�6�r�T���F�η��ٟ����%����i<h�Z�s��8�X����n6&@�ֹ����P�J�-N7DJ���G��x(�d��3��S����"�8Xe�A�-��(S�S�P�J�f�>Kz�/;(�Q��1�˯M�&����rgPջȷ�ùp��v��{U�v�����16UMz¢<������hk��p�	|wq��ed	�i�a=�u��+%�j%��h�Q��;Z�QQ��t�d,��m��1|z��\�-��t�[�VK8��ts�H۴��
f��G��F�[��?n{ZΪB�6M��r��9��k���fLU��Db~�����&7G����2�a��:���w��4W���"�����.��Y?Rtkޣ�����7��n=��n��#���\�&�ه
��-E�&�w
K���k@1�W�qk{"~�<��S��<VmÔɈI�Z�V죦k�J|Bh]<�@�L9�<mXnY>�d�y�u�q�}�5�Ab��6���'�
p���cܠ6�a��ˣD�ݳ��l��3*)4�WF�2`+Bd���Y��|n\Ȓ�W�|���3���r���6�d�;D��|U�@RSA\z�O(s(iG\�]�]:�����}InD/y�1~4��E��s�����j��-k�7%�ܴ�9z��.CDFjJ#eeը�c�����W�����LTG��9q�Ċ�o��!�G/$�v�
�C��.-U�[�&�#�x5�����4��GSa2I�ug�1:�,���	9b�\��+�k��:%w��#��T!�������}p��CQ��z�V�^T��_�6��-ZT�*!0�F��jP��I�!�X�-��'Y&�Yg��۽�6�"��E��(��|���'4k{�8A�����G����մ��YT-gk���^i5pƾ����tq�br씍�OK{q�w]������&�����I�7MOXq2O
U�lۤe�K?	��v�û=�ӶD�g�s�`�
��^�$Osk.�-Tq6��+}���6�~�Oe��a'�J���M�L�!��H��ʝ��-#����-6<�5Yu$��`�(&���N%�Ʈ�ߟ�3���qG
�e�I��l�uz��/�"斓_��¦�Hی��|��c��g�y����Wc�z(�7i��-��o�m])o.S���r�9�qwWAI����/��:9X^���?��;��vƒ(|�?r�����F���a�	;U��Jw�|����B�vu_R_^
��t�5b��&�7ͪЮ6̑�^	��_~�r7��?���s��m�,'U2�o8��Y�w��xD1�?|f����o�7�.��ӺcTɦ�Y�,�o�4>�vs!X	B����]�� -f(��SoX�3J�c���m��Z�61�.�j3{zRx�`8M�+���+�ϸ���7^��W�}՞��"nt�h�n���$W�
�.�e��"�SH�L���@Q:�mfie�э�����\PJ�BHz����D���L���ŸF�f��Y��!2�@���+t^�q�e�J݄��Ly�����kO(��"�!�Z�xYjK<���R��l�9Q�^��hB�?�=�}g��~�7ca XJKrkc|���(�ڊJ����"�+�/L�@c3�\���0>U?�&���C:T}��JX��G�Ln��5W Q�!�aѠɯ�)Xp(�i�P��1P̳�7�S��dK�E�Ћ���$[�
,�EB�����
���-%%cT�Ɠ��x�V�y���1�q�%ŏ���miv�fzod��Q�='K��2��\Y����I�r����g�R��]���"<�\��p�9^�)0Y�]�5����J���O��(�]R�ƘFˆ��K��y��x-	�P�W;�o��z�`/��� ����K�;��뼯�������d�Z��uI��̻�}��I
�fo{�??�V�3��߿0�ms��?��?��(�~`R�}�Scple˸����L�-kyt�t��F٫���
:=��2�8b�֌.��
�<�!d<-j>�(��;j"<v�<ĥd��rgI�d
V��d�����8*��o���ŘM���h�u}�^���ǩ�5v~�?���#k?��R�Ϊ�E���?�[2��PnU�q\X�\F����ֱ�!�	T0,����z��/��9|QD�R��O�����~}�(DO�u���G�[��H:�6����ߧ����+|v����R{Ƭ`?'�/�G��ʜ0Ԟ
],�*�t�'�0ޱq^��}�n��$P���#.��ۀ�!��{A�)"��p�ODi��JO'�xy��:���O�)����xr̯!
���m,O��0�:/�>�|�c��A�ʟ�>��c_Th��J��7-�w)�RN'ez]��c:
��U$�����/&�D#?���[+A��U�ؑ6\��'���׸�����\�M��
}XK�-T�G��^uBYE �(���7���4�jA'�b�]}[�
;�5��%؎Th�ܒ$}�fH�yiX�ڭ+�\J�Տ�B��&�g�}'_:U�MD�I@�
n�5tS@�G
W���gzWdk��|��Ԉ��ZqNk�L��R�J؋R
z4r����ꕨ�)M�J�&D0�ɵ#�=Ƭ$��k��[�;�����U�?����F���+����3��c8�[�J���C�c�vq�(�|S��ߖN�QV{5�0L}�s��G2�/���е�}�H��䝯��^
���U��Yhe��2����霷�T/3�=l�&���ʥ���\��l��d��ޣd}PV"��΀X����a�\�#�G��Һ�R�o�D�!�+
ep�Nf�P�n3�-�;�z��`��`(������~P�E�uRv�`�����TD�ȳ_S�b����S���>F%�6�����	
";�P׫(
��r�B�W@u��!�I�o08���(l�r���	��*���-���;Q�u>�"����j��#�0x��0�2c[$�B�>I)
^�
W.#qQ[V��Ѥ�����x����E � �.�'��H��X�,�Z���s_��=L�{�$X��p���K#�ue���E
J�[�����(c�Ɍ���|�d�7'���G(��B�e�a���ϴ����
z����QN���4_���;��	�{��h$�fb%[�HHb�+��
'#��kUA۩���+�4������Q���G7.���U�v���w����pG½E����5��K��<��rnA��%��:!�5uמ�<�Z��١�:ZB���Z��gq@ۿ�0rrI��`}Ţ�v���������d{f<x��?;�u�N��m%��&����b_�>��)�I��-Q]�E����b�6"t�D��-9��g?Js�ڹT&I�g�<,�\��c�K��$UY��vՔ�Mh�ˉC�`���p������><��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.stapsdt.base.eh_frame_hdr.eh_frame.note.gnu.property.tbss.init_array.fini_array.data.rel.ro.dynamic.got.data.probes.bss.note.stapsdt.gnu.build.attributes.gnu_debuglink.gnu_debugdatapp$���o��|4(77��0��s�8���o|�|��E���o���T����^B�d�d��h����c����`anXXPaw`�`�f�-}Ȳ2Ȳ2
��2�2�( ���A��A���A��Ad+�CC�W��^I�^I ��ci�cI��ci�cI��ci�cI�didIH� �H3jH3Jp��5j�5J8:�pjpJ�	 �yj�yJ,zj�yJ�: �yJ�ȴ�ȉJ�4��J0C��J0D��KRPK*J[3lib64/gems/ruby/io-console-0.8.0/gem.build_completenu�[���PK*J[6�]xpxp.lib64/gems/ruby/io-console-0.8.0/io/console.sonuȯ��ELF>�%@xi@8	@ZZ pZpZ pZ �� �Z�Z �Z   888$$�Y�Y�Y  S�td�Y�Y�Y  P�td8N8N8NQ�tdR�tdpZpZ pZ ��GNU�	��j짮}�@�K�bP�[�H!@[]_BE���|�qX/D�o�����=8s�/� ����D�/���W�p���\�yM��UI7� ����!1�Q������FA"R"hj�`z��cW�3������, k"�F"r�����` Rh` �` d�E���J�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddatacfmakerawrb_data_typed_object_zallocrb_default_rsrb_io_writerb_funcallvrb_io_descriptorisattyttyname_rrb_errno_ptrrb_str_new_staticrb_str_resizerb_str_capacitystrlenrb_str_to_interned_strrb_interned_str_cstrrb_sprintfrb_syserr_new_strrb_exc_raise__stack_chk_failtcsetattrrb_num2uintrb_io_get_write_iorb_str_new_cstrrb_io_flushrb_io_getbyterb_ary_newrb_ary_pushrb_str_newtcgetattrrb_io_pathtcflushrb_Arrayioctlrb_eArgErrorrb_raiserb_string_value_cstrrb_ensurerb_stdinrb_stderrrb_error_arityrb_jump_tagrb_protectrb_syserr_failrb_io_getsrb_yieldrb_str_catfrb_convert_typerb_assoc_newrb_cIOrb_cFilerb_ractor_local_storage_value_lookuprb_ractor_local_storage_value_setrb_id2symrb_check_idrb_keyword_given_prb_funcallv_kwrb_io_closed_prb_unexpected_typerb_obj_freezerb_cloexec_openrb_io_open_descriptorrb_io_closerb_fix2intrb_num2intrb_check_funcallrb_get_kwargsrb_funcallv_publicrb_hash_duprb_ary_resizerb_ary_ptr_use_startrb_ary_ptr_use_endrb_obj_classInitVM_consolerb_f_notimplementrb_define_module_underrb_cObjectrb_define_class_underrb_define_constrb_define_alloc_funcrb_undef_methodInit_consolerb_ext_ractor_saferb_ractor_local_storage_value_newkeyrb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_startGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64� ui	��ii
�ui	�pZ 0&xZ �%�Z �Z �Z �M�_ �_ 
�_ 
�_ �_ $�_ *�_ +�_ 8�_ A�_ P�_ S�_ T�_ U�_ Z ] (] 0] 8] @] H] P] X] 	`] h] p] x] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �] �]  ^ !^ "^ #^ % ^ &(^ '0^ (8^ )@^ ,H^ -P^ .X^ /`^ 0h^ 1p^ 2x^ 3�^ 4�^ 5�^ 6�^ 7�^ 9�^ :�^ ;�^ <�^ =�^ >�^ ?�^ @�^ B�^ C�^ D�^ E_ F_ G_ H_ ^ _ I(_ J0_ K8_ L@_ MH_ NP_ OX_ Q`_ Rh_ Up_ Vx_ W�_ X�_ Y��H��H�!D H��t��H����5ZA �%[A ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM���������%u< D���%m< D���%e< D���%]< D���%U< D���%M< D���%E< D���%=< D���%5< D���%-< D���%%< D���%< D���%< D���%
< D���%< D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%�; D���%}; D���%u; D���%m; D���%e; D���%]; D���%U; D���%M; D���%E; D���%=; D���%5; D���%-; D���%%; D���%; D���%; D���%
; D���%; D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%�: D���%}: D���%u: D���%m: D���%e: D���%]: D���%U: D���%M: D���%E: D���%=: D���%5: D���%-: D���%%: D���%: D���%: D���%
: DH�=y: H�r: H9�tH��9 H��t	�����H�=I: H�5B: H)�H��H��H��?H�H�tH��9 H��t��fD�����=: u+UH�=�9 H��tH�=n4 �����d�����9 ]������w������H�"�O{�H	�����g�����H��H�wH�� ff.�@��UH��H�54 SH��H����H�����t�HxH��H��[]�D�`�H��H��[]�f.���ATI��H�5�3 UH��S���L��H�5�3 H������o�oHK�oP S H�P0H�S0�@8�C8H��[]A\�D��UH��SH��H������C��ωCH��t.�U��x�S�U��x�S�U��t���CH�H	H��[]����H��2 �<���ff.�SH��2 H��<�k���foH�P foKJfoS R H�K0H�J0�K8�J8[�ff.���H��7 H�0���ff.�f���H�58 1�1����ff.������H��H�58 H�׉��f���fD��H�5�7 1�1��L���ff.����AVAUATUSH��dH�%(H��$1��E�����A���{�������H��D��H������������D� A��"���1����H��L�p�,��k���D� A��"��H�4H�����?��H�����M��H�E tL�eH������L��D��H��H��������u�L���O���H��H�����H�����H��$dH3%(uTH��[]A\A]A^�f�H�������fD��D��H�=�!1����D��H���}���H���u�����U��SH��H���
�{����8u&1�H�ډ��*�����u�H���[]�f.�H��1�[]����SH��H�����H�=?!�p1��_���H��H���t���H��[�ff.�@��ATI��UH��H��S�:���L��H���/����SH�=� �p1�����H��H��� ���H��[]A\����AUATUSH��H��(dH�%(H�D$1�H���~H��u)��H�L$dH3%(�4H��([]A\A]�@@��u�H���H��u�H��D�nH�t$���H�t$H��H���D���H��H���y���H������
�E1�H�����H��7�s���H���{���H=��_������1�I��DH���X���H��t+H���
�����;tE�PЃ�	w-�T�H�ߍlP��-���H��u�H��L����������E��t#A9�uE1�롐Hc�L��H�t-1��^����@Hc�L��D$H�t-�D���H�|$��������ff.���AUI��ATUSH��H��XdH�%(H�D$H1�I���t���L��lj������uM�D$I�����u7��D$L����6�����t+H�T$HdH3%(H��u9H��X[]A\A]�@��x�D$����H�ߋ(��H�Ɖ��^���H���V��������ATUSH��H��PdH�%(H�D$H1�I������L��lj������u@L���H�"�L${�H	$�����tH�T$HdH3%(H��u*H��P[]A\����H�ߋ(�z�H�Ɖ����H������3���ATUSH���@���H��A���%�H���-������t0��A9�t)1�D���'��u,������uH��[]A\��D�����t��b�H�ߋ(���H�Ɖ��.���H���&���fD��AWAVAUATUSH��H��H��dH�%(H�D$1��3�H��� ��H����H�J�H��������H��L�8L�h�A�H��uL�`H�hH���3�H���;�H�$A��1�I��tL�����f�$1�I��tL�����f�D$1�I��tL�����f�D$1�H��tH����f�D$H��1��TD���K��uYH�L$dH3%(H��ugH��[]A\A]A^A_�DH�PH�J�H������u	H�@ ����H�_0 H�5HH�81��^����H�ߋ(�o�H�Ɖ���H�����(��H��H�5u0 �dH�%(H�D$1�H��/ H��H�H�$���H�D$dH3%(uH������SH��dH�%(H�D$1�H�H��tH��H��H�$��H�4$H����H�D$dH3%(uH��[��|�ff.����AUATA��USH������H��I��H���X�H��H9�tXA��uH��L���_���H���7�H��H��H�J���H�=#��H��tH��H�D$����H�D$H��[]A\A]�H��. H9(u�H��. H�됺1����@��S��H������H�=p1ƃ�S)�1��}�H��[H�����AUI��ATI��U��SH��H��XdH�%(H�D$H1���1���uDH�C0�oL���oK�oS H�D$0�C8H��)$H��)L$)T$ �D$8A��H�މ��.�����H�T$HdH3%(��uH��X[]A\A]���f.�AWM��AVI��AUE1�ATUH��SH��H�t$H�T$dH�%(H��$�1��D$,����������0H����H����A�ă��u0�D$,����A��|$,������������@H�D$0�����H�D$H�t$L��L��D��H��<�������A����D$,��D9�A��A!�H�t$H�|$H�T$,��I�ǃ��tH���
�9���E���f���H�����H�����D9��M���H�t$lD���������8����f�H��$�dH3%(L���bH�ĸ[]A\A]A^A_�@��H�D$0L��L��H�Ɖ�H�D$��������H���D$,�L�H���T�A�ă���	9�����D�l$,E��tnH���.�9�tA�E1����@H�t$�������u���D�(�D$,����1�D����fD�c�D�(����D��E1����DE1�����;��T$,E1�A�����D�(���r�����������A�����E1�A��q���fDH�D$0H�D$H�t$���Z������]������D�(�D$,����E���M����L�����D�l$,E���i���H���)�9������E1�A�E1����H�5�* E1�H�
[�H�������H�5�* E1�H�
;�H��������H�5�* E1�H�
��H�����AUATI��H�=sU��1�S��H���A�I�Ņ�t&����L����H�51��)ƒ�A1��d���t$�؉�H�5�L����1Ã�C��)�1��<�L��L����H��L��[]A\A]��ff.�@��SH��H��H�
�H�����H��� t%H����H��u3H��H�PH�0H��[�D�@H�xuH�@ H��[H�PH�0�%�H�~) H�5PH�81��}�ff.�f�UH��SH�����H���x�H�Ɖ���H����fD��SH���3�H���;��H�5�����H��xH��[�H�����fD��ATUH��SH��H��PdH�%(H�D$H1����H�5�# H��A���w�H��D���o)$�oH)L$�oP )T$ H�P0H�T$0�@8�D$8���tH�L$HdH3%(H��uH��P[]A\�H������S���UH��SH��XdH�%(H�D$H1�H���K�H�މ��q���u&H�=N( H�����H�T$HdH3%(uH��X[]�H��������f.���SH��H��PdH�%(H�D$H1����H�������u)�D$��H��H�H�Ѓ�H�T$HdH3%(uH��P[�H��� ����{�ff.���SH���s�H���{��������uH��[�H������ff.���SH���C�1����J���uH��[�H�����f���SH��H��dH�%(H�D$1����H����H��T��1��f���u.�D$H�t�$H�|�J�H�L$dH3%(uH��[�H���,��������AUATU��SH��(dH�%(H�D$1�H�D$���xI��I���C1�H�"& L9 u
H�F& L� H�=T& H�t$�����u6H��ulH�D$H����H�L$dH3%(�"H��([]A\A]�@H�|$H��t@����@H�=�% ����H�D$H���%H�=& �Y�H9�u	����H�\$H����I�EH�|$H�D$�J�I��H���N��I���"�E1�L���L��H��A�����1���@H���H���X����[�H������G�����f.�H��������H��uW�H���"�f��H�=���H���7�1ҾH�=�H����������������u�H���H���B���뒐�H�=f�?�H�����1ҾH�=KH���q���x�E1�A�H�ىƺL����H�=[$ H��H�D$�N�H�D$����@L�%a$ ���@H�|$H���I�����H�=$ ����.�����1�������H��E1�A��ƺL����H�=�# H��H�D$���H�\$����ff.�@��SH��H����t ����t
��H����H��[������f���SH��H����t ����t��H����[�H��[�fD����f���SH��H����t�{���uH��[�f�����t��H��1��;���H��[�fD��SH��H����t�;���uH��[�f��K���t��H��1����H��[�fD��SH��H����t����uH��[�f�����t��H��1�����H��[�@��SH��H����t����uH��[�f������t��H��1����y���H��[�@��SH����w]H��uH��H��H����H�5@" 1�1�H����H��H��H���H�=��C�H��tH��H�D$��H�D$H��[ú1���f�H��tzATI��U��SH��@��uXH��u#H�\! H��L��H�5J
H�81��U�D@��u�H���H��
u�H�����H�‰�9�r�[]A\����H����fD1��ff.�f���SH��H��H����T���H�=���1���H��H����H��[�@��S�H�����H�ߺ��,�H��[����SH��H��H������H�=���1��4�H��H���I�H��[�@AUATU��SH��H��8dH�%(H�D$(1����Q���1�L�D$�H�5;  ������^H�|$L�d$1�H�H�l$ �CH��H���H����L��H���H���}H��tv5H��uG�CH��DH�L$(dH3%(�6H��8[]A\A]ÐH��u�CH�����H��$t�H�K H��H�5i
H�81��G��L��H�L$��*H�D$�`�H�Ǩ�����CH���H���D@��uj��L��H��H���H���"����DHc�A��L�l������uOA9������D��1�����f.�1����f����f����f���fDL������H��롃�1��f��A����AT1��USH��1�H��0dH�%(H�D$(1�H�L$����H�T$H��H�\$I��H���H�
P�H�D$H�5t�H�-H�D$ ���H��tH�èt/��H�t$(dH34%(H����H��0[]A\�H�H�ƒ�H��u�� ��H�{u�H�S H�BH��t��u�H�H�΃�H��u�H�xu�H�p�� tH�p�>Ru�L�"H�j�H���l�L�����H��I���	��H��H�����A�T$�H��Hc�H�TH��f��H���~���U�H��Hc�H�TH�P�G������f�H��H�S��H���F������������AUATUH��1�SH��hdH�%(H�D$X1�H�L$H�\$�>���H��I�����H�މ�A������u8L��H����H��D���\���tH�T$XdH3%(H��u,H��h[]A\A]�����H���K��H�Ɖ����H�������@��SH��1�H�� dH�%(H�D$1�H�L$���H�5� H��H��I��H�
!����H�T$dH3%(uH�� [�������SH��1�H�� dH�%(H�D$1�H�L$�8���H��H�
��H��I��H�5���l�H�T$dH3%(uH�� [��A�����ATI��H�5� UH��S��H��H��`dH�%(H�D$X1�����H�L$��L���oH�\$)D$�oH)L$ �oP )T$0H�P0H�T$@�@81҉D$H���H��H����H���G��H��H����H�L$XdH3%(u	H��`[]A\����ff.���AUI��H�50 ATA��H��USH��H��(dH�%(H�D$1��
��1�H�L$L��D��H�����H��H����H�T$dH3%(uH��(H��[]A\A]�������U�����H���H�5SH��H�� H�;����H�;�����H����H�5����H�;1�H���H�5����H�;1�H���H�5��y��H�;�����H����H�5��^��H�;�H���H�5��C��H�;1�H�g�H�5��+��H�;1�H���H�5����H�;�H�$�H�5w���H�;1�H�,�H�5m����H�;1�H���H�5\����H�;�H�)�H�5I���H�;1�H���H�5:���H�;1�H�)�H�5*�}��H�;1�H�Q�H�5�e��H�;1�H�9�H�5�M��H�;�H���H�5��2��H�;1�H�����H�5����H�;�H�+�H�5����H�;�H�����H�5�����H�;�H���H�5�����H�;�H�����H�5����H�;�H���H�5����H�;�H���H�5t�x��H�;�H�����H�5e�]��H�;�H�n���H�5U�B��H�;�H���H�5G�'��H�;�H���H�5;���H�;1�H�`���H�53����H�-� H�;�H�5%H������H�;H��1�H�5����H�;�����H�S�H�5���H�;1�H�[��H�5���H�;�����H��H�5����H�;H�5���������H����H�5�H��H���G�������H��H�H�H�5��,��H�� H�;H�5�H�����H�=�H�H ����H���s��H�=4 H�5�H���m��H�= H�5������H�= H�5e����H�=� �H����H�5Q���H�=� �H�E��H�5��y��H�=� �����H�����H�5��Z��H�=� H�������[H����H�5~]�5��D��H���������H�=�H�K ���H�=�H�� ����H�=�H�e ����H�=�H�J ���H�=�H�/ ���H�=�H�4 ���H�=H�� ���H�=qH�� �q��H�=cH�� �^��H�� H�������H��H���ttyname_r(%d)[%dG[%d;%dH[%d%cto_aryArrayexpected 2D coordinate/dev/ttywrong %s mode: %liscreen erase[%dJline erase[%dKrawraw!cookedcooked!getchecho=echo?console_modeconsole_mode=noechowinsizewinsize=iflushioflushbeepgotocursorcursor=cursor_upcursor_downcursor_leftcursor_rightgoto_columnerase_lineerase_screenscroll_forwardscroll_backwardclear_screenpressed?check_winsize_changedgetpassttynameconsolegeneric_readableConsoleMode0.8.0VERSIONinitializeinitialize_copygetcgetschomp!closemintimeintr__send__console-modewrong number of arguments (given %ld, expected 2 or 4)true or false expected as intr: %li;?x�� h��H��`(��t8���X����������h��$���8���T���h��|8���X���������H��8���d(�������x���@������8�����$��`�������������$H�Hx�h���X�����8�x�$��@(�d(��h��������(�	h�8	��X	(�|	��	���	(��	h�
h�@
��t
�����
����
h����
(���,����hh����zRx�$P���FJw�?:*3$"D���\���p���	����0����FE�K�G V
DAFHDA(����[F�K�D �BAB$���XE�D�G EAA <��4H��BA�@P|��d���x�������@����`F�B�B �A(�A0�G��
0A(A BBBJ0����IA�C�G c
FAKDCA���1E�k(4��HF�D�G �sAB8`,���F�B�A �A(�GP|
(A ABBE8�����F�E�A �A(�G�a
(A ABBE0�����F�A�A �Gpc
 AABA,`���F�A�A �I
ABDH<���xF�B�B �B(�A0�A8�JP�
8A0A(B BBBF����PD F
A �(��TA�D H
AA8�d���F�B�D �A(�D@m
(A ABBD���/C�d8 ����B�E�D �C(�G�u
(A ABBAL\P���B�E�E �E(�A0�D8�G�T
8A0A(B BBBE������4�$��B�B�K �E(�F0i(D ABB  ���E�B
IO
LD��*A�D�D d�:E�l
A0�,��F�A�D �Gpy
 AABA(���fE�D�DpI
AAA ���eE�G`J
AA(�2E�d
A L�'E�Y
A <`�yE�G ^
AA8`���F�B�A �C(�DP�
(A ABBE���7E�b
I���7E�d
G���:E�X
CY���:E�X
CY�<E�X
C[4(�<E�X
C[ TH�wE�D `
AA0x���H�D�C �U
ABIP�����<E�v�$�)E�c�8�<E�v8\��B�B�A �C(�G`�
(A ABBB0< ��F�H�A �IP�
 AABD8p|��F�B�A �F(�D�l
(A ABBA ���_E�I0J
AA �,�_E�I0J
AA0�h��F�K�D �I��
 AABA8(	��yF�L�G �A(�GPI
(D ABBA(d	8��E�T�D �FO�	���H�GNU�0&�%�Z �M��������!m|����
tKpZ xZ ���o`��
�] P8��	���o���o8���o�ox���o�Z ���� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������    0 @ P ` p � � GA$3a1��KGA$3p1113@&rKGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@&Y&GA+GLIBCXX_ASSERTIONSconsole.so-3.4.4-3.el8.x86_64.debug1����7zXZ�ִF!t/��?�]?�E�h=��ڊ�2N���R~ ��X�͠V9$�Ⲕ�]�.��\��,
��i�4Z���0��0	
�3_�e���&٦>�]ao�`ƒ�sG��|��>o�$�ȱ��HI�)yi������bӵ�rj�y?�p2���Vw���m~�Ϥ\	���R��
�.�>h7z��zaq#�Y���A��5=z?��0���.�PE|2�o�]W�.���]�$e�󡀝:��w�șP~�)xtj=���v�w»�k	��/�C�~^_��K�^����	��~�� ��h�G�=�ﺴ\���Qv'oe��Qs�3��Y���;�c@b�Mu�f�;=hh����iF�S�)��K~;l�n�-�T��(��z�QH{x�xH+�FI�
��9h����moE|]4����-���Vx0cn��A�~�W�FD
�H?/a>�����I����'��6ã1�*�蹔����`9|�}lTś����X�T��Y�g�"Y��X��Ϲ]��>4�g�.h-����{����:��������4$cG`��a�Lq7�O��$D�>�i��4�&���&�t���Ebkt��O�F�cR�>��' |�U�#����f�3���W��9O32�]��퐦�Ae.�R먴C�ן����B8nn*9�Ȧ�[*�BB@�?���̃���'�o�4+i&	����'�WZ7��}�F�Y�������|�����W��;+^hܐ��E��gt�{�FW!�5�>��s�Z#��"r�D�I�)X�Hlv#F?��q�_�ߢ�RQ
3^
���3N7jyC��>Ş�Q������ƫ�T��S��4���B��޲��<8p���	]�
G�
��)���0f\�<����iIv�ݭ�C����K���J�j��*ڱ�;-�6���C���>���1k�N����1��f�vz��M`?��1�?4a���5&,|��ڳ���h�)��Q���ǺX~�߿��@v��IJ��蛉�a�&'�ݜ�_h8�E���<
K�o)��.N�
B���a��٥��8�ڳqʺU�R,���q2�gUÁ��H�Nn����).i���i�t��i�}H8^bg0�@��oD{�ٵ����CO��
��A*�4��.���M���`8�z�	��	:�H��xS5��d��|�>���n/���Z�]<^�c6����5���uΧK�Q�h���^�!ps��t5�B�2�~$̬��W`q�]�ZR㑋��Z��]�^�|�#�=�ſl�h.ɞ�/?��$�O�����I�7��耼ߔZ+hW!V����T[X&2z��^T��5��8@_�z���3e����ߌ�4 …�?vM�9 ��B����^���Aف�Q�(\[~hʉ�><7�HH�RH��ܣ�4 pJH��I���%��0��@��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(��	0���8���oxx�E���o88PT���^B88Ph��c���n� � �w�%�%�%}tKtK
��K�K��8N8N�@P@P�	��Y�Y �pZ pZ�xZ xZ��Z �Zh ��Z �Z �] ]��` `h�h```HHb(pb�Th"PK*J[.lib64/gems/ruby/psych-5.2.2/gem.build_completenu�[���PK*J[���S����$lib64/gems/ruby/psych-5.2.2/psych.sonuȯ��ELF>p,@�z@8	@�a�a �i�i �i `P hjhj hj 00888$$xaxaxa  S�tdxaxaxa  P�tdXXX��Q�tdR�td�i�i �i `pGNU��8/o�m9g�9�Rx�]�$_� B��HH	�_gjx�
BE��"a��j������
��|�S��E6
Z�qXH���8����<iU| �zg;��_?p}��Sy76��,Q�,� N�Y8�SF"���}~�TY�""k������i^x������, ��A��F"���)+*G�f��>rp ��T��pR���p ��p �p ��-X�PUZ��p p ��p 4�p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeyaml_get_versionrb_ary_new_from_values__stack_chk_failInit_psychrb_ext_ractor_saferb_define_modulemPsychInit_psych_parserInit_psych_emitterInit_psych_to_rubyInit_psych_yaml_treerb_define_singleton_methodrb_check_typeddatayaml_emitter_deleteruby_xfreeyaml_emitter_set_canonicalrb_ensurerb_data_typed_object_zallocyaml_emitter_initializeyaml_emitter_set_unicodeyaml_emitter_set_indentyaml_emitter_emitrb_eRuntimeErrorrb_raiseyaml_mapping_end_event_initializeyaml_sequence_end_event_initializeyaml_document_end_event_initializeyaml_stream_end_event_initializerb_fix2intrb_num2intyaml_emitter_set_widthyaml_stream_start_event_initializerb_unexpected_typerb_attr_getrb_utf8_encodingrb_enc_str_newrb_funcallvyaml_alias_event_initializerb_str_export_to_encrb_string_value_cstryaml_mapping_start_event_initializeyaml_sequence_start_event_initializerb_string_value_ptryaml_scalar_event_initializeyaml_document_start_event_initializerb_ary_entryruby_xcallocrb_string_valuerb_ivar_setyaml_emitter_set_outputrb_error_arityrb_cObjectrb_define_class_undercPsychEmitterrb_define_alloc_funcrb_internrb_define_methodyaml_parser_deleterb_funcallv_publicmemcpyrb_ull2inumyaml_parser_initializerb_intern2cPsychParserrb_const_get_atrb_class_new_instancerb_utf8_encindexrb_default_internal_encodingrb_respond_torb_ascii8bit_encindexrb_usascii_encindexrb_enc_find_indexyaml_parser_set_encodingyaml_parser_set_inputrb_enc_get_indexyaml_parser_set_input_stringyaml_parser_parserb_protectrb_str_new_cstrrb_enc_associate_indexyaml_event_deleterb_jump_tagrb_str_newrb_ary_newrb_ary_new_from_argsrb_to_encoding_indexrb_ary_pushrb_eNoMemErrorrb_exc_raiserb_const_getrb_usascii_str_new_cstrrb_define_constrb_requirerb_define_private_methodrb_path_to_classrb_obj_allocrb_iv_setrb_define_module_undercPsychVisitorsToRubycPsychVisitorsYamlTreelibruby.so.3.4libyaml-0.so.2libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby34/lib64ui	$���0ii
;�i @-�i -�i �i �i �V�i �. j W0j 0A�o 
�o 
�o j�o (�o h�o c�o d�o k�o J�o O�o S�o U�l �l �l �l �l �l �l �l �l 	�l m m m m  m (m 0m _8m @m Hm Pm Xm `m hm pm xm g�m a�m �m �m �m �m �m  �m !�m "�m #�m b�m $�m %�m &�m '�m )n *n +n ,n - n .(n /0n 08n 1@n 2Hn 3Pn 4Xn 5`n 6hn 7pn 8xn 9�n :�n ;�n <�n =�n >�n ?�n @�n A�n B�n C�n D�n E�n F�n G�n H�n Io Ko Lo Mo N o P(o Q0o R8o T@o UHo VPo WXo X`o Yho Zpo [xo \�o ]�o ^��H��H��N H��t��H����5�K �%�K ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1�������%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%}E D���%uE D���%mE D���%eE D���%]E D���%UE D���%ME D���%EE D���%=E D���%5E D���%-E D���%%E D���%E D���%E D���%
E D���%E D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%}D D���%uD D���%mD D���%eD D���%]D D���%UD D���%MD D���%ED D���%=D D���%5D D���%-D D���%%D D���%D D���%D D���%
D D���%D D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%}C D���%uC D���%mC D���%eC D���%]C D���%UC D���%MC D���%EC D���%=C D���%5C D���%-C D���%%C D���%C D���H���?���f.�DH�=iC H�bC H9�tH��B H��t	�����H�=9C H�52C H)�H��H��H��?H�H�tH��B H��t��fD�����=�B u+UH�=�B H��tH�=~< ����d�����B ]������w������H��8dH�%(H�D$(1�H�T$H�t$H�|$���HcD$H�t$�H�DH�D$HcD$H�DH�D$HcD$H�DH�D$ ���H�L$(dH3%(uH��8��N���ff.���H�������H�=�'�b���H��A 1�H�5�'H��H�H�5����@�����������!���H���������H��H�5q; �|���Hc��H��H�D�ff.���H��H�5A; �L���Hc��H��H�D�ff.���H��H�5; �����x|H�H��H�Ѓ��f.���SH������H��[���f.���H��H� �o����H���D��SH��H�5�: ���1�H��H��@������H��[�D��H��8dH�%(H�D$(1�H�t$H��H�<$H�=5
H�T$H�y���H�L$H��H�D$ ��H�T$(dH3%(uH��8��y���f���UH�: ��SH���%���H��H�h �@uH�h H������H�����H�����H��H��[]��SH��������t[�H��? H�SH�5�%H�81����D��ATH�5s9 USH��H��pdH�%(H�D$h1�H���b���H��I�����H��L�����H�T$hdH3%(uH��pH��[]A\��{���ff.���ATH�59 USH��H��pdH�%(H�D$h1�H����H��I�����H��L������H�T$hdH3%(uH��pH��[]A\�����ff.���ATUH��H�5�8 SH��H��pdH�%(H�D$h1����1�H��H��@��I��H�����H��L�����H�T$hdH3%(uH��pH��[]A\����ff.�@��ATH�58 USH��H��pdH�%(H�D$h1�H������H��I���W���H��L���,���H�T$hdH3%(uH��pH��[]A\�����ff.���USH��H�5�7 H�����H��H���t������H���=���H��H��[]��{�����f���USH��H�5P7 H���W���H��H���t������H���-���H��H��[]��+�����f���ATUH��SH��H�5�6 H��pdH�%(H�D$h1����������H��I��H���[���H�߉����H��L������H��H�T$hdH3%(u	H��p[]A\���D��ATI��UH��SH��H�5�< dH�%(H�D$1���H�����L��H��H����H��H��H�5�< H�$���H�Ǩt"���H�\$dH3%(uH��[]A\�@�����\�ff.����ATUSH��H�ĀH�t$H�5�5 dH�%(H�D$x1����H�|$I��H��u:1�H�l$H���S���H��L�����H��H�T$xdH3%(u`H��[]A\�@H��t@��t
��c���H���H��u���H�|$H�����H�D$H��t�H�|$�m�H���u�������AWAVAUI��ATUH��SL��H��H�t$H�5�4 H�$dH�%(H�D$x1����I���5�H�|$I��H����H�<$H����H�߃�����E1�M���A��E1�H�<$tH�����I��1�H�|$t
H�|$��H��L�l$L��A��D��L����L��L�����H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_�f�H��tF@��u@H���H��u4L���a�H�߃�H�$�H����|����C����H��t@��t
����H���H��u�L����H�D$�����D��AWAVAUATI��UH��SL��H��H�t$H�$dH�%(H�D$x1����H�|$I��H����H�<$H����H��H�5:3 �E�H�߃�I�����1�E1�M���A��E1�H�<$tH���C�I��1�H�|$t
H�|$�,�H��L�d$L��A��D��L�����L��L������H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_��H��t>@��u8H���H��u,L�����H�$�,������E���fDH��t@��t
��K�H���H��u�L����H�D$������D��AWAVM��AUM��ATUH��SH��H�t$(H�5�1 H��$�H�T$ H�L$dH�%(H��$�1����H�|$(H��u����@��u�I��H���H��u���H�|$(H��I�����H�|$ H�D$(H��t$H��t�@��u�H���H��u�L����H�D$ H�|$H��t,H��t�@���v���H���H���f���L����H�D$H�|$(���H�߃�I������M����H�D$(A��E1�M��A��1�H�|$E��L�@t!H�|$L�D$D�L$��L�D$D�L$H��1�H�|$ t+H�|$ L�D$H�T$D�L$���L�D$H�T$D�L$H��L�l$0SL��AVL�����XL��ZL�����H��H��$�dH3%(u!H�Ĩ[]A\A]A^A_�D�;��)��������AWH�50 AVAUATUSH��H���H�?L�kdH�%(H��$�1�H�CL�cH�|$H�D$���H�D$M��u�L����f�A��u�I�EH�ƒ�H��u�� ��H����H����I�������H�S E1�H�l$PI�EE1�H�|$A���� ��H����H��H�t$H�L��HN�H���K�H�|$H���n���H�D$H��$�dH3%(��H���[]A\A]A^A_�I�EH���b���1�L����L��I����L��A��H��uU���H����D$HtU�7�D$LI������"������H��A��t8�L���{�I�E�(�������H����D$Hu��b��I�<$H����H��u��� ��H����H�<$�E1���H�<$I��H�C ��I�D$H�L$@L�l$0M��H�D$(H�D$PI��H�D$ H�\$8L��I��H��� t0H����L9��(H�D$(J�<�H��u)����L9k��H�C J�<�H��t�@��u�H�H�ƃ�H��u�� ��H���~��H�wH�GH�t$@H�@L��I��I��H�D$P�	�H�l$ H����H�|$@L����H�|$PL��H�D$@�m�L��H�D$P�@�H��I�F��4�I�F�L;,$����H�\$8L�l$0H�S �k���H�~VH�G H�0H�t$@�f����I�D$H�$H���v����H�\$8L�l$0H�l$PH�S ����H��H�l$P����H�|2 H�5zH�81�����fD��AWAVAUI��ATUH��H�56, S��H��H���7�����I��L�e��u;H�5t2 L��L����L��L��H�5d�����H��L��[]A\A]A^A_�D����H�]H�52 1�1�H����H�52 1�1�H��I�����H�5�1 1�1�H��H�����L��A��H��u@��L�����q�H���t9�����L����1�H��L��@�����0�������f��;��ź���������SH�=��H�5+H��H��0 H��H��#�H��H�5H����H��0 H�5��H��H��H�H�;�����H�Y���H�5���H�;�H�~�H�5���H�;1�H�V�H�5����H�;�H���H�5����H�;�H���H�5���H�;�H����H�5���H�;�H�j���H�5��~�H�;1�H���H�5��f�H�;�H���H�5u�K�H�;1�H�?�H�5k�3�H�;�H���H�5\��H�;1�H�l�H�5J��H�;�H���H�59���H�;1�H�	�H�5,���H�;�H���H�5��H�;1�H���H�5��H�;�H���H�5��H�=�3�H�=�H�M/ � �H�=�H�2/ �
�H�=�H�/ ��H�=xH��. ���[H��. �f.�@��SH���s�H��[�*�f.���H�5=/ 1�1���ff.����H�5-/ 1�1���ff.����H�5�. 1�1��l�ff.����H�5�. 1�1��L�ff.����H��H�5�. �dH�%(H�D$1�H�GH�?H��H�$�	�H�T$dH3%(uH�����ff.�@��H��H�5I. �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH�����ff.�@��H��H�5. �dH�%(H�D$1�H�GH�?H��H�$�I�H�T$dH3%(uH����?�ff.�@��H�OH�5a- H�?����@��H�OH�5Q- H�?���@��H�OH�59- H�?���@��H�OH�51- H�?��d�@��H�OH�5�, H�?��D�@��ATI��UH��SH��H�� dH�%(H�D$1�H��������?H9�w|H�DH�5�, H�L$�H��H�D$�)�H�H�D$H��t!H�|$�}�H�T$L��H��H�RH��6�H�t$dH34%(�uH�� []A\��H������|������ff.���SH��% ���z�H��H�x �@uH�x �4�H��[�ff.�@��UH�5t% SH��(dH�%(H�D$1��
�H��H�x+ H��u$H�-@�H���#�H�T+ H��t�H��H��* H�8��H���H��H��������?H9�wtH�D?H���H�$H��������?H9�wmH�D?H���H�D$H��������?H9�w=H�D?H��H��H�D$�c�H�L$dH3%(u*H��([]�@��느�{��f��k���d�@��AWI��AVAUATUSH��H��XH�T$XH�L$PH�|$8dH�%(H��$H1��D$d�V��D$��H�5$ H��H�D$ ��H��H���~�H����H�5o* H�|$X�������H��) L�d$XH��u%H�{D�H����H��) H��t�1�1�H��L���x�H���B�i����2�9\$�E9��=H�=1����9�tH�=%���1�9�@�ƍ4vH��L�d$X����H�T$XH�5����H�����fDH�|$X�n�H�D$XH�=�H�D$h�x�H�=����j�H�|$hA����9D$�O	9��e	A9��M	��H�|$hH����H�T$hH�D$hH�T$pH�T$h�H��H�D$X�:��H�D$XH�PH�pH� tH�pH�����H��������?H�D$pH�D$H�D$dH�D$f.��E����H�t$H����������H��$�H9���L�d?H��$�H9���L�t?H��$�H9���L�l?H��$�H9���H�D?H�T$H��$�H�=�L��$�L��$�L��$�L��$�H��$���|$p
���D$pH�
�Hc�H�>���H�|$xH�����M��t$H��I����H�t$ H���nL��A���H��$�I��H��t$�
��t$H��I����H�t$ L�����I�ă�$�Hc�$�L��$H��$H�L��$H�=|���H��H�TL��$ ��H��$0H�T$H��$(@���H�|$���|$d���5������H�T$L��H�=�����H�|$xH�����E��t$H��I����H�t$ H����L��A��
�H��$�I��H��t$���t$H��I����H�t$ L������I�ă�$�Hc�$�L��$H��$H�L��$H�=����H��H�TL��$ ��H��$0H�T$H��$(����H��$�H��$����t$H��I����H�t$ H���L���6��H�|$xI��H�����0���t$H��I������H�t$ L�����H��$�I��H���E����t$H��I�����H�t$ L������I�Ń�$�Hc�$�L��$H��$H�L��$H�=����H��H�L	L��$ ����$�L��$(H�H��$0H�T$H��H��$@��H��$8����@H�|$xA�H��t,�C���t$H��I������H�D$ H��tL��H�����I��L��$H��$H�T$H�=����L��$�c�����|$x�L��$HE�H��$H�T$H�=����H��$�$���@�+��I��H�D$xH����HcPHc�H�tH�T1��
��H�D$0L��$�M����H�D$0���$�L��$L��$ H��$H�=V���H��$�HE�H�T$H��$(���H�T$L��H�=!����H�|$����|$d���q���H��$HdH3%(H�D$8�H��X[]A\A]A^A_��HcD$xL��$H��$H�=��H�T$H�DH��$���DH�T$L��H�=������@H�T$L��H�=�����H������������9\$���������f����H��$�I��H9���������H��$�I��H9���������H��$�I��H9������������A�H��$�A�H�����������t$H��I���W��H�|$ ��������fDA�H��$�A�H���}����^���t$H��I�����H�|$ �]����H���fDH�|$xA�H��t�#���t$H��I������H��$�A�H���!�������t$H��I���������@H��$�I9��h���H�l$@H�l$ L�|$HI��������t$H��I���\��H��t|L��H���|��I�|$�I��H��t)�u���t$H��H�D$(�$��H�T$(H��H���D��H��L���1�I������L��H������M9�tNI�<$H���q���A�I�|$�H��t�����t$H��H�D$(���H��H�T$(t��f.�H�l$@L�|$H�j�����K��H�D$0�I���A�A�����H��$�H��t�����t$A�H��I���I�����H�D$h�����H�D$h�����H�D$h�����E��u"H�� H�H�����H������H������H�EHL�`H�EPH�XH� H��u L�-��L������H�� H��t�H��H�w H�8�?��I��H�D$PH��$H��������?I9���K�D$H��$H��������?H9���H�DH��$ H�}H��������?H9���H�D?H�}H��$(�H��t�x��H�}8H��$0�H��t�]��H��$8H�. H��u H��H�����H� H��t�H��$�H��L������H����������l���H�������;���L��������������H� SH�5�H�H�3 H�8�k��H�, H�5��H��H����H�;�H�5d�^��H�;�H�5T�J��H�;�H�5E�6��H�;�H�59�"��H�=5�v��H�;�H���H�5-�{��H�;1�H�o�H�5#���H�=���H�=H�Y ���H�=���H�=�H�2 ���H�=�H� �r��H�=�H�� �_��H�=�H�� �L��H�=�H�� �9��H�=tH�� �&��H�=hH�� ���H�=dH�u ���H�=^H�Z ����H�=YH�? ����H�=CH�$ ����[H� �f.�@��H�����@��UH��H��SH�����H��H�59H��H���f��H��H��[]�ff.����ATH�=US���H�-� H�5�H��H��H�U�/��H��H�5�I�����H�UH�5�H��H�����H��H�5�H�����H�� �H�5�H��H�H�5����p��[L��]�H����H�5�A\�Q�����SH�=`���H�5aH�����H�5[H��H� H��H��t��H��H�5fH���b��H� H�[���H��H���Psychlibyaml_version%stag tuple must be of length 2HandlerEmitterinitializestart_streamend_streamstart_documentend_documentscalarstart_sequenceend_sequencestart_mappingend_mappingaliascanonicalcanonical=indentationindentation=line_widthline_width=iowritePsych/emitterMarkexternal_encodingUTF-16LEUTF-16BESyntaxErrornewParserANYUTF8UTF16LEUTF16BEpsych/syntax_error_native_parsemarkreadpathemptyevent_locationPsych/parser,�����������L�$�L�4�D�D���mesgClassLoaderVisitorsVisitorToRubybuild_exceptionpath2classYAMLTree;�3��������h���H�����8��8h��P���h�����������8���������8��0���d���������X��,���X(����������(��t������ h�p���(��H��h�����0��D(�`��|�����(��H��h�����X�0��L��xh����H����X��������$	H���P	zRx�$���FJw�?:*3$"D����\@���H@t
Ax���XHK����%HW���%HW�(��&HW�@��E�L�D��HRL��+E�e,`��gH@Y
A$H���XE�M�D |DAp���+A�M
A0���eF�H�A �G�B
 DABA0�<��eF�H�A �G�B
 DABA0�x��qF�A�K �G�K
 DABA0(���eF�H�A �G�B
 DABA(\��GE�A�N c
DAD(�$��GE�A�N c
DAD0�H��{F�A�D �N�X
 AABAzRx�����$���0`���F�D�D �D0m
 AABE0P����F�A�A �G�`
 AABEH�h��{F�B�B �E(�A0�D8�J��
8A0A(B BBBCH����{F�B�B �B(�D0�D8�J��
8A0A(B BBBH\����F�B�E �E(�A0�D8�G���E�I�D�e
8A0A(B BBBFL|p���F�I�B �B(�A0�A8�J�
8A0A(B BBBAH����8F�B�B �E(�A0�K8�I@A
8D0A(B BBBF���rE�e4H�E�LPL�dX�xd��p��|�QH C
A���QH C
A��QH C
A�H�T�`�0l�Dx�0X���F�D�D �G@�
 AABI� �1E�k(�D�E�H�D@�
AAEL�8��F�E�B �B(�A0�A8�J��
8A0A(B BBBI$���L��DX�$XT�4E�G�D ^DA(�l�F�H�A ��DU���ZE�TGNU�@--�i �V�.W0A����E� 
�U�i �i ���o`��
[�l � X�	���o���o���o�o<���ohj � !! !0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&GA$3a1� �UGA$3p1113p,�UGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113@.OUGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYP-\TGA+GLIBCXX_ASSERTIONS
GA*FORTIFY@.�UGA+GLIBCXX_ASSERTIONSpsych.so-3.4.4-3.el8.x86_64.debug/%J��7zXZ�ִF!t/��O�]?�E�h=��ڊ�2N�$����[^��)X!h�մBM����s�	�H��XR/�]�Ma ?����[޶���>"�e�8�����L��w"P��7:�Ķ�#5u�OP�~.m�}	�AԄ]Q�'gauO�
��s'�O��'q�S�f��,�w�آZL���ߵ�^6�s�+B�@z��ٹ`w{���UY��7�!ڌ���h'xr~?-f���=�=��/Y�%0q��/��\�+Nj�Ғ���3_a� -�f�D[����9��b
�a}���V��,p�MߩYQ���ś`t�=�2�muN��脙3��\�SE�Tw�]
���^K^��pMP]���=�EQy������G�P��_���]�����K�Xh0��"�Y�6/�zIui
�Qo���F�b���O��vbT�dLGr?�qC�k�|nͬ�ރw[��
pXF0�jNg��X)e#lP��$BC ���Awi�{��=MP2u�uHr\�����J)s�;�[���^~ό�1V�[e�<�]&��6��a0*���}�S�ƙ��E�]Ų��*�~�W"w8]�79t:p��B���<��o�*�$��,ך�Q&�R��N���J&F�*��s�˰٦hs{i>}��½�ی�.J)���Q�����s�U(�ȃ�m�]�a
-���uB�4���E4����� k�`Q��9^��wC#rw|N�iW�e���>0��`MR����G��L9�������{�t`7\������a���T����Ⱦ�E��B��:��9-S8	-׾ψ5�i�U�c�p��]2�V�e{��b4���&��Q9�戯�"g���aq�	[�9y��E��=k�l�Pb�C�h]�$�Z��<]��y�"�P�戳�Es\��8Ҭx�54��Ŀׯ�+މ$�=��k.�uy��75G���&�ݍ��-�L���2�
���W.l
`gC�KBRsԁR�V�@�L���aG��Ki{]kU�F�`��*��8�ƃ�#��c�@4�o�˼Wю߰߂+�~q^@0]v2�le�*OO
��a�@NA��_�(\؂;��X��DZ/"~�C��J�yov�N����R��~ӆ�L�0��a�ж�Ud�_�I�h$3��41~5�qV|J�:
��pIE��ř�����9��:�߰uй��m���(�^K^�xo�H=�k�L���Bi�)�1��L���q�Tvh��	�(Aq�N��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o```(�� 
0��[8���o<<�E���o@TXX�^B  �h� � c� � �n�&�&�wp,p,:)}�U�U
��U�UI�XX���Y�Y��xaxa ��i �i��i �i��i �i� �hj hj0��l �lX�p �o���p`�ol\t(�t�y"PK*J[3lib64/gems/ruby/bigdecimal-3.1.8/gem.build_completenu�[���PK*J[���(�(�.lib64/gems/ruby/bigdecimal-3.1.8/bigdecimal.sonuȯ��ELF>�2@�@8	@0�0� ��!�!P� șș!ș!  888$$���  S�td���  P�tdXiXiXiLLQ�tdR�td��!�!GNU��l�����k�B����0y�@j�  y~�BE��|��X��=��|mt2���؁�9�wxGI�qXu���ũ��.��v	F���S� @�1�	�IR����\�g��Q�L�J�~�����xq�o
����j- V��*����Bsg�"�!�'�""�^�����8���bu:8�����9L, �D"7~�*[F"�nZ��(�@�!1h�!�`��
�p�!�P;��`�!U�!��s��@�!Y0QV:P%�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegOne_ABCED9B4_CE73__00400511F31Druby_snprintfruby_xfreerb_thread_currentrb_thread_local_asetrb_inspectrb_str_duprb_str_catrb_exc_new_strrb_exc_raiserb_obj_classrb_class_nameruby_xreallocrb_obj_freeze_inlinerb_cBigDecimalrb_data_typed_object_wrapruby_xcalloc__stack_chk_failrb_check_typeddatarb_thread_local_arefrb_num2ullrb_ull2inumrb_yieldrb_protectrb_jump_tagstrlenmemmoverb_num2ushortrb_fatalrb_eFloatDomainErrorrb_raisememsetrb_warnmemcpyrb_bugrb_id2symrb_hash_lookup2rb_check_string_typestrncasecmprb_sym2strrb_eArgErrorruby_malloc_size_overflowrb_sym2idrb_error_arityrb_num2intrb_fix2intrb_eTypeErrorbigdecimal_parse_special_stringstrncmprb_str_tmp_newrb_str_resizerb_str_new_cstrrb_absint_sizerb_big_cmprb_num2ulongrb_num2longrb_big2strrb_float_valueBigDecimal_dtoa__memcpy_chkrb_cstr_to_inumrb_cFalseClass__memset_chkrb_cFloatrb_cNilClassrb_cSymbolrb_cIntegerrb_cTrueClassrb_typeddata_is_kind_ofrb_assoc_newrb_ll2inumrb_str_newsqrtrb_errno_ptrruby_strtodrb_float_newrb_ary_new_caparb_ary_pushrb_intern2rb_funcallvrb_Rationalrb_usascii_str_newrb_string_value_cstrrb_memhashrb_category_warnrb_num_coerce_cmprb_num_coerce_reloprb_num_coerce_binrb_rational_numrb_rational_denrb_eZeroDivErrorrb_check_convert_typerb_complex_imagrb_complex_realrb_keyword_given_prb_opts_exception_prb_to_intrb_hash_duprb_big_signrb_num2llrb_thread_check_intsInit_bigdecimalrb_ext_ractor_saferb_cNumericrb_define_classrb_undef_alloc_funcrb_undef_methodrb_str_new_staticrb_define_constrb_gc_register_mark_objectrb_define_modulerb_mBigMathrb_eMathDomainErrorroundrb_dbl2bigrb_big_packrb_define_methodrb_define_global_functionrb_define_singleton_methodruby_xmallocBigDecimal_strtodstrchrldexpBigDecimal_hdtoalibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5/opt/alt/ruby34/lib64�P����ti	�ii
�ui	�yui	��!�4��!P4�!�! �!7X8�!6XP�!�Th�!�W��!cV��!�7��!�48�!`�!P�!	X�!`�!~h�!p�!x�!��!z��!&��!��!;��!=��!@��!J��!V��!fȟ!iП!j؟!n�!r�!w�!�!�!�! �!(�!0�!8�!@�!
H�!P�!X�!
`�!h�!p�!x�!��!��!��!��!��!��!��!��!��!Ȝ!М! ؜!!�!"�!#�!$��!%�!'�!(�!)�!* �!+(�!,0�!-8�!.@�!/H�!0P�!1X�!2`�!3h�!4p�!5x�!���!6��!7��!8��!9��!:��!<��!>��!?��!Aȝ!BН!C؝!D�!E�!F�!G��!H�!I�!K�!L�!M �!N(�!O0�!P8�!Q@�!RH�!SP�!TX�!U`�!Wh�!}p�!Xx�!Y��!Z��![��!\��!]��!^��!_��!`��!a��!bȞ!cО!d؞!e�!g�!h�!k��!l�!m�!o�!p�!q �!r(�!s0�!t8�!u@�!vH�!x��H��H�1z!H��t��H����5jv!�%kv!��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q�������%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%}o!D���%uo!D���%mo!D���%eo!D���%]o!D���%Uo!D���%Mo!D���%Eo!D���%=o!D���%5o!D���%-o!D���%%o!D���%o!D���%o!D���%
o!D���%o!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%}n!D���%un!D���%mn!D���%en!D���%]n!D���%Un!D���%Mn!D���%En!D���%=n!D���%5n!D���%-n!D���%%n!D���%n!D���%n!D���%
n!D���%n!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%}m!D���%um!D���%mm!D���%em!D���%]m!D���%Um!D���%Mm!D���%Em!D���%=m!D���%5m!D���%-m!D���%%m!D���%m!D���%m!D���%
m!D���%m!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%}l!DH�=�&1�H�T$H�L$�8���H�L$H�T$��H�=�'1������UH�5�(SH���H��dH�%(H�D$1��
���H�ߺH���LPH��H�Hk}	H�$H��������?H9�w	H�H�_��P���H��H��������?Hk}	H9�wH�H����,���H��H�D$dH3%(t����H��H��[]���H�=�(1��8���H�%f.�@H�=Yl!H�Rl!H9�tH�^k!H��t	�����H�=)l!H�5"l!H)�H��H��H��?H�H�tH��k!H��t��fD�����=�k!u+UH�=zk!H��tH�=�d!����d�����k!]������w������H�GH��(�ff.�@���!�fD��H�����B f���*f����f�����f����f�����L�Bf�H�M��t6�J$f���H*��Y
�0�X�I��v�J(f���H*��Y
�0�X�H�RH��H�f��fW�0�����H�1�H���H�Y0H��H��f��8j!f. 0ztH��i!��^0�j!�1�H��H�0H��H��H��/H������H��f�H��I��H���W f��t%f��twf������z1�f���t)H���@H�B!L��1�����H���Df��ub��������H�L��1���������tk��uA�+I��H�^!L��1��}����H���H��L��1��_�����T���DH��L��1��?�����4���DA� I���fDH�hL��1����������DH�CL�����������H��t���f��ff.�@US��H��H�-j!����H��H�TH��[H��]���DSH��H��t@��t7H���	���H������!H�5�!H���-���H��H������H���
���H���2���H�������U�(SH��H�4�$H��H��HD�H��t6H�/�6���H�XH��tH�E H��H�(H�D$�i���H�D$H��[]�D����H�XH��[]��H��tS�G �Pf��w�I� H��s�DH�W�>FH�D�u�H�OH�D�H��xH9�s�H)�H��H��@��f�H��H��H��H)�H��ff.�@AVH�W`!1�AUATUSH��H�� dH�%(H�D$1�H�1f!H�8��I��H���-H���ɚ;�H���D$H�SZ��/�DH�D$H��	H��H��H��H��Hi�ʚ;H)�H��tu��1�L�l$1�H�SZ��/�DL��QH��L�vH��H��	H��H��I��H��H��I��H��D��H��Hi�ʚ;)Љ�H���ɚ;��L��L���f.�H��H��H��H��	H��H��H��H��H��H��H��H��H��Hi�ʚ;H)Љ…�u	H���ɚ;w�H���ɚ;�~H���8���fD�(������H�@H�@H�@f�p �X$L; uI;D$ tI�D$ L��L� ����H�|$dH3<%(L���NH�� []A\A]A^�DH��(�L�H������H�s�L�pH�x$L�pI��f�H K�L�H�h����H�H�P$��L�D�L�D�L�@,I��L)��H)�����F�����1҉׃�L�9M�89�r��+������(�����H�@H�@H�@�@$f�x ���@@��uK��������������(�����H�@H�@H�hf�P �������L��L������w��H��x����fDSH������H�5 ]!H��H���U�����f�P H��[��SH�e!���H��H���8�H��t"�tH�[�f�H��[���H��d!��H��H����1�[�H�WUH���8��8��H��SH��H��H��H��@��u
H��H��[]��k���H��t�H�PH��H��H��H��H9�HG�H��H��[]�ATUSH���4���H��H��������?H9�w*L�dH�6d!��L��H��H�����H��[]A\�H���0�I����ff.���USH��dH�%(H�D$1����H�T$�H�=�a!H����H��H���]����|$��uH�L$dH3%(H��uH��[]��V����AWI��AVI��AUATUD��SH��H��8H�L$(D��H�|$H�t$������/f�{ �<����L�T$��uA�+M���@H�D$I��L�PA�0M����A�B.I����H�D$M�rI��H�@H�D$ H����L���M��H�D$A�����I��H�D$H�t$A�	���l�$�!D��1��؉�A����A����H��t	�9�r։�1�L��L����H�|H��1���H�L9�w*I�I)�1��L��L��1�H�V���H�|$(��H��8[]A\A]A^A_�f�A�-M�������ِH�D$H�D$H9D$ �*���L��M��I��H�|$H�G�w$H������w ����������H�����9�r�L�D$I�~�I9��O���A�~�0�D���K�>�fD��0�4���H��H��H�G��H)�I9�u�����@H�D$� M����������H�\$H���5�H��H��������������1�1�L�t$(I�>(�7<.tC���<E����H��L�jI9�r3I9������H���L�������<-w�I��L�jr��L�j1���H��H�{H��H��H)�H������ 1��f.�SH��`!�c�H��H����H��tH��[��f�H�i`!�4��H��H����1�[���USH��dH�%(H�D$1����H�T$�H�=^!������H������|$��uH�L$dH3%(H��uH��[]������f�ATA��UH��S���/���f�� tE��t$H�H��r$H��H�=�1����f��u�[1�]A\�@H��]!H��H�5�H�81��u�DH�OL�1H��~;H��~'I�@H����H��������H�H��H����L�G��DH��y�I�@H����H�AH��v�H��H�H��H���f� �G$H�G��f�w 1�H�5�����M����H��������H�I��H���N���fDf� ~1��G$H�Gf�W 1�H�5�����fD������G$H�Gf�G ��fDM��~#H��������H�I��H���
����'���DH��H�I��H���������f.�H��H�I��H��������:���f������f�O ���f��O �Af��w#�]H��s���G$1�H�G�f�H�W�f.�H�B�D�D�$E��u2H��H��u��G$H�Gf��~f�1�f�W �f.��w$H�W��urU1�SH���H��H�u�L�$��t�H��tH)�H��H��H�W�����uH��[]�f������f�G 1��H�CH�t�(H�{$H������ʸ�ff.�f�AWI��AVI��AUM��ATI��UH��SH��L�D$�Y���I�WH�|$P�E$H�L$XI�^H�uI+_L�M9VMCV��H�~�L�D$I9���H��I�uH���8��8��H��I�FH��H;EsRI�$I�OH�EH�4H9���H�KH9���H)�H�H�I�H�H9���A�D� H�L$XM�U��/@I�<$H9�r�A�D� H�L$P�뛐I�I�FI��I�$M�UI�FL�UH��H�E������H�����HD�H��H��[]A\A]A^A_�DI�M�U��I�����M�U���AW1�AVAUATUSH��(H�L�w0H�O(H�GL�kL�g H�oL�H�{$H�L$J��H�D$���M����H�L$�<-��H�D$1�<+u	I���I9���H�I�1�I���������y@L��H�H��H���NH��I��H��	��L�H��M��H�L��A��0Mc�M)�I9���H�H�H�H��/H���DH9��WH��I9���H��H��u�H�E1�1���H��E1�A�<-�F�D$1�<+��I���8��8��E1�H��A��1�G�L	�f�L�4L��H��?I��M1�I)�L��I��H��H��H��I��H9��gE���1�H��H9�vK@�D�$H��w-H9�v(1���A�7H��H���DHЉD�$H��wH9�w�H��H9���1�L�D$M��tADH��w-I9�v(�t�$��<�A�4H��H���t~Љt�$H��wI9�w�I9���I9���L�jH��w#H���B$f.���H���H��	u�B$L��I��?L�kH��H�r�q�qH��1�L)�|$��H�S������f�C ����H��(�[]A\A]A^A_�fDH��I9��21��$���@H��1�I9�������\�@H���_����I�U��8����H�������f.�H��~[L��H�H��H�����������H�L$A�A�I��H�<-�����fDH���D$��������f.�H��H�H��H������H9����A�<70��H��H9�s��u�M��t"��tH�L$1��<0��H��I9�v��u�����umE��~h�|$�C$H�C���f�s 1�H�56
������k���DI���H�D$���������1�H�L$M���x����|$�C$H�CuB�f�S ����@H�L$A�H��r���@H�L$E1�H��]���������f�C ����f.������f�K �=���f�H�L$A�H��H������D�@�F f�����R f����f���@��f��A��D	�f��tef���t_@����������L���f����A��G$1�H�5H�GfD�G ����D@��tS������t���f����f��~N��1��G$1�H�5�H�Gf�O ��R���f�������tbf���_���f�������G$H�Gf�w 1�H�5�
�����D��f.��Hf�����d���f�f����f�����Df������<���f.��Jf�����$����f��~Lf��~L��G$H�Gf�W �a���f�f��~f��������f���$�������f��~�������G$H�Gf�G ����ff.�f�SH��H��uH�GH�p�H��tHH���A$�P�Q$���ɚ;veH�����D�$�P�T�$H�����ɚ;vA-�ɚ;�D�(H���uھH���%��t�C$�H�C[�H���f�H������[ÐAWA��AVAUA��ATUSH��HH�GL�$�I���L��L�_H�r�q�qH��L��H��?H)�1�I��H�T$I9��y�D�$A�H�JH��L���$H��H��I��H)�H�D$8I)�L��H)�H�D$M����E1�1��f��؍�H���L9�|�k�d1҉D$�$��A��1������D$$D������H���������A)�I9�vT�t�$��K���	���i�ʚ;9����K�#D�t�$���	����i�ʚ;9���H��I9�wً$1�1�J�|$L�D$0�t$H�D$L�L$(�$H���������fA��L�L$(L�D$0wiH�:E��Jc�H�>��@f� �G$H�G�NA�1�fD� H��H[]A\A]A^A_�D�$E��t1�f�} ���DM����1�D��H���I9�}�ɚ;�nM����f�} H�E�E$H�E�7�f�M H��H�EM��tYH���8��8��L��H��H��HUH��I)�t8�U$1ɾ�KfD��ҁ��ɚ;v��	H�E����H��I9�uۉU$H��H�[]A\A]A^A_�@�F�f������L�_1�M������G$I��L�\$�A��E1�A��$H�D$8H�D$�t���fDH�D$1�J�|$L�$L�D$H����������fA��L�$L�D$�����H��E��Jc�H�>��D�����f�U ����f�B�\�$H��������D$$A��w�B���D�\$$E���4���@��M���-����f.�A��������@B�D�$H�t$H���Z����O���DA�����1�fD�w ���fDD�4$�D$$E1��D$
����<$�������f�} ������D�,$E��������Y����A���N����x����t$$���<���H�|$8u1M���d���B�D� �������Q���A�������8��������؃������#���ff.�D�W$E��tWH�GA�����H��H��L��I)�D��A����A��	w	�D�щ�I��A�����	w�I�P������f�1��ff.�f��G �Pf��w�IH�����H��s��F �Pf��vSH�WH�NH�GH9FHCFH9�t�H��H)�H)�HH�H�s�H��1ҿH�5���H��H��f��IH�����H��s��ff.�f��G f��tf��tAf���t#�f.�@�ֿH�5�[�@�ֿH�5@�C�@�ֿH�5�+�ff.�SH��L!����H��H�����H��tH��[�y��f�H��L!����H��H���t���[�ff.�f�ATUH��SH���a�H��I�������tbM��tMH��t@H��H���8��8��I�T$H��H��1�H��H9�w&�O���[L��H����]A\���DH�]�f�1�[]A\�f��������f�AVA��AUI��ATA��UH��S���L��H�����I�����u5E��t0f��w*H��Hc�H�>��f�A����vf�} x []A\A]A^��A����v�f�} ~�H��L�����[H��]A\A]A^��DA���E�#w��DA���d�w��DA���E�#w�A��e�A����w�A��t���A����w��j���f.�AVAUATUS�F H��f����A��f����f������Pf����H�VL�nH��H�$H�v$H�W�D���f����AOą���L9o�LFo���������L�o�N�4�f�G�L���n��A��
t)L9m��L�1ҋM$M��t�U L��H���C���L�kK�D�[]A\A]A^ÐD���C$��f��H�CDN�E��~@�1�f�s []A\A]A^�@�G$1�H�G1�f�{ []A\A]A^�������1�f�K �D���G$��f��H�GDN�E��~0��f�W �S���D1�H�����L�k�6���D�����f�G ��#���ff.�f�ATI��UH��S�Ӻ
�:���H��v��L��[H��]A\����f�[1�]A\�f��N$��tyH�FH��~pH�V�N H9�ssH)�H�GH�GH9�HG�1�f����������H�Wf�G H�FH��tH��H�H��L���L�$A�L�$H��H9�u����f�����fD�G$H�Gf��~�f�W �f������f�G �fDAWE1�I��AVAUATI�̹UH��SH��H��X�F$H�FfD�V L��H�T$@L�������A�W A�L$ �r�A��f�����f���f���bf���b��E$H�Ef�E H�|$@A�D$ f� �f������C$H�Cf�S f�H�EH��H��X[]A\A]A^A_�f����I�D$H�D$HH����H�EH�|$@H�D$0H�wH�CH�D$H9��o���C$H����H�V��DH�ȋL� �L�$H�HH9�u�H�D$H9T$v�H���D� H9�u�1�H�|$0H�T$0�@@H���D� H9�u�A�D$$H�D$8Hi�ʚ;H�|$HH�D$ H�D$v(A�D$(H�D$8HD$ 1�H�t$ H�|$H��H�H�D$H�D$H�t$0H��H9�HG�H�D$H����H�D$HA�I�SZ��/�DH�<�L�p�H�|$(f�J��I�uH�<�G$����Hi�ʚ;D�_(L�H9D$ ��H9D$��H9t$0�%1�H�t$8D
(M�L$M�I��L;L$����H�|$(L��B�L�$E1�H��L��L��M��GfD��ʚ;F�D)�L�$H���L�$E��tD9�se��ʚ;D)�A��L�$L��H)�I9�r\A�t� 1�I��H���ɚ;vH��H��	H��I��H���Љ�Hi�ʚ;H)։�H9�r�)�A��fDL��D)�E1�H)��L�$I9�s�D)��L�$B�D�$J�T� =�ɚ;v-ʚ;H���B�B���B=�ɚ;w�L;l$�����H�D$0�H��H�EH�D$@H�@H�E�����_H��X1�[]A\A]A^A_�DI��L;l$�B����1�H�t$D
$I��I�D$M�L����L�\$HI�UI��v<�,A9|$,�B���r,M��K�<+I��O����E�T�$D9T�$����w	H��H9�u�I�D$L�P�O�LL9L$���L)�L��1�M���&fDʚ;�D)��D�$H��L��H)�L9�w A�|� �D�$D�7D9�r�)�1�)���fDH�A$���A$���f���bf���bA��E$H�EfD�E 1�H�5����H�H��X[H�]A\A]A^A_�I�t$H��H�����������H�|$@A�D$ f� �Nf������������f�E H���
�H�D$L�|$@H�߾H�CI�GH�C�:����,���1�fA� H����������f�C ������f�������������E$H�Ef�u ���A�|$$����I�|$�����L�|$@1�f��H���T�L������fA� �x���������C$H�Cf�K �|���f�������������E$H�Ef�} ���E1��E$1ҿH�EH�5�fD�M ���H��-���f������f�������������������A�D$$H�D$8Hi�ʚ;H�|$HH�D$ �������DH���USH��H��H�=A!�!��H�ߺ$H���q��H��H���H��tt����H����H�����H��H����H�UH��H�X�� tH�XH�@H��u?�H�5`�H���+�������H��[]��H��[]��DH�����H�5)�H��������tv�H�5�H��������ukH���[]�f.��;����-���H�H�у�H��uH���x��H���#���H��H������H��������@���H��H�>!H��H�5R�H�81�����AWAVAUA��ATI��UH��SH��H��HdH�%(H�D$81������Ƀ��u�1҅�tOA�T$ �M �r�A��f���uef�����C$H�Cf���tA��fD�[ @H�\$8dH3%(H���qH��H[]A\A]A^A_�f.�f���_E1�A���H�EA��G�t6�I9D$���*M�D$H�}I9�H��IF�H��t5�E$A9D$$�|��1��f�D�\�$E9\�$wd��H��H9�u�I9�wP��A��1�f��M���@���f��NǍDp���u+A��C$�	H�CfD�S ����@M��1�f��A���E1�f��fD�K A��H�L$ G�|?�E��E�|G�H�D$fE����PL��H��H��H�D$ PL�L$@L�D$8�/�_AX�D$H����L�D$(I������L$L$H�|$ H�t$0�L$M��t3J�H9�r�f�J�H9���I��H��B�T�$�T�$M��u�H9��dI��I)�I�H���D�$I9�u�1�H����H��I��A�D�$B�D�$1�H��tnJ�L� H���f��1�H��H��tKH��AD�$=�ɚ;v�-ʚ;����DD���f��DN�A����v���fD�k ��{���I)�M��tBD� 1�fA����������f�C H�C1�H��t�T� �L$1�H���i�H�CH���,���@PH��H��L��H�D$ PL�L$@L�D$8���Y^�D$H����!L�D$(I�����t$�L$�9�r)�1҉t$H�|$ J�4H�L$0H9��nM��tMA�ʚ;A���fDJ�4A�H9���I��D��H��B+T�$D)҉T�$M��uѺH��H9�v'H��A�ʚ;D��H��H��)к�D�$H9�r�E1�H9���@H��tFH��H)�L��H���@)�1�A�t�$H��t"H��A�t�$9�s�ɚ;���f�H)�H��t)T� M9���1�fA�} E�����D�D��1�A����������f�C �E���D��H��H����H�CH���}���DI��L���p���D�L��H����H�CH���K���vfDH��H��A�D�$�D�$H9�r�M�������L��L��H��H��L�<�L��M�I��!@)кʚ;D)�A�D�$H����A�D� H��D�L�$E�D9�r�)�1�D)����8E1��H��H��A�T�$�T�$H9�r�M���H��L�L� L��L)�M�T�1��f.�A�1�I��H��t*A�T� H��T�$�=�ɚ;v�-ʚ;A����DL)�L)�I���B���f.�L)�L)����DfA�|$ ~w�f�S ���f��L��H�����p����L��H�������H��H9����������D���_����y���f.������f�C �,���I��1���������H����USH��H��H�v���H�sH��H�pH�CH�EH�CH�E�C f�E �C"f�E"H��H��>u1H��H��u
H��H��[]�H�}$H�s$�#��H��H��[]ÿ�O��ff.�@��ATUSH��dH�%(H�D$1����H�T$�H�=�5!�����H���Ã���wHL�%�7!���H�TL��H���l���|$��u0H�L$dH3%(H��uH��[]A\���{����t�����ff.�@SH��@��tH��ta@��u[H���H��uO�H���0��H�Y6!1�H��@H9tC��H����u�H�05!H��H�5v�H�81���@H������Ѓ���w�[�Hc�[H���D
�f.���U��SH����~H�>��t �����������fD�@��uU�(���ń�uU=�T�b�H��tH�����Ѓ������@���H��H�\H��[]�fD�#���ń�t��x��H��t�H��t
H����@��t��%����H����E������?��@��t��%����H����E�������@��t��%����H����E���������t��%���H����E��i������H����H�\H��[]�f�H�-Q5!��H�\����H��H��H�����H��H��[]�H�U3!H�5��H�81�����H�^���H��2!H�5��H�81����ff.�ATI��H���US����H��H��H�4�$�(HD�����1�L��f�P H��H�s,!H�h�@$H�@H�@�ÿ��H;uH9X tH�X H��H����H��[]A\ÐAUI��H��ATA����USH���u���H��H��H�4�$�(HD����H��H�h�@$H�@A��uH�f�P 1�H��+!L���.���H;uH9X tH�X H��H����H��H��[]A\A]�fD�����f�C �D��ATI��US���n��H��������?H9�wOH�l��x]uH��[]A\�@��uJI�<$H��t�@��u3������x?Hc�����H��[]A\�f.�H���H��H����+���˺1����+��H�<1!H�5��H�81�����AW�AVAUATUH��SH��H��HH�t$������hH�D$�U �@ �Hf�������Jf������H�|$H�H�|$H���UL�eI����H�|$L9��H�D$N�< H�CI��H��H�|$ H9��sH�EH��H�CH�D$H�p��������H�D$8H�D$f�} �@ ��f������������f�C N�,�1�H�{$L��轾��H�|$ L�{�sI�D$�L�t$ N�L+ E1�H�D$(H�D$I�SZ��/�DA��KH��H�D$I�G�H�D$0�M�~�L9l$�L�\$(L��H+|$H�D$I9���H�t$L�D�$�f�H��I��L9���A��t�$H��H��H��	H��I��H��H���ʉ�Hi�ʚ;H)�A1���ɚ;v���	��A����
i�ʚ;)�A�1��t�M��t�AA�L����A�A�=�ɚ;w%�z���f.��L�$щL�$���ɚ;�Z������	��A���i�ʚ;)��L�$H��H���u�H��I��L9��7���fDI��M��I��L9l$ ����H�|$8�H�����H�|$8�H���4�H�����H�D$8H�@H��H[]H��A\A]A^A_�f���Wf���W��C$�H�Cf�K H��H[]A\A]A^A_�1�K�<�����H��I��H�4�$�(HD����I��L�p�@$L��H�@�fA�E H�EI�EH�D$H�p�
�����HL���-���H��H1�[]A\A]A^A_�L��I��H�D$H��H�l$H�D$����H�|$�$�����H������1�f��H��H���T���H�\$8����@�}$�p���H�}�e���f��H�t$H�����ҍT���H�\$8����f�������������C$�H�Cf�S H��H[]A\A]A^A_�H�D$0L)�L9l$(rL��I��H+|$���f�M��1����f�������������:���1�H����H�\$8��H�\$8L�������AVH�5��E1�AUATL�%u%!UH��M��S�H��H��������t)I��I��I����I�]I�uH��H������u�H�T�
��t@����	��v�� u�H���
��u�(��v���K�vA�T�H�@�@$H�@��t(��t�����f�P �f�1�[]A\A]A^þf�p ��1�f�H ��f�AWAVA��AUI��H��H��$!ATI��1�USH��D�D$�L$dH�%(H��$�1��)���I��M����A�$L��ƒ�	��wH����ƒ�	��v� t�H������H��H��tRL;}uI9o tI�o L��L�}趺��H��$�dH3%(H����H�Ĩ[]A\A]A^A_�f.�H���8��8��I�EH�D$H��H���;#H�T$(�H��H������H�x�c���H�0H�D$0L�HH�t$ �� tL�H��P�A�����<-������؉D$ H�CL�l$8�H�VE1�I�<1D�l$I�>��%D��0��	��H���I��I�<1H��L�R������E��u�ȃ�	��v,< t(<_u�M������t�<9wI��r�E�����L��M��E1�H�D$�K�TH�t$(�I���8��8��H��L�L$8I��L�\$L�D$H��H��HE�L�bI9�LB�J�4�$踻���|$ L�D$H��L�`L�\$L�L$8�@$H�@���f�H H�D$H�T$\H�t$`�D$\H�=1��H�l$`L�L$hL�D$pH�\$xL��$�L��$�H��$�� ����D$\����H�|$01�蘶��L;}��������f�����H������H���8��8��H�PH��H��H�D$(H��H��H9�HF�H�T$(���H�D$1�E1�H�D$H�D$@H�D$8�E���{M���L$���tM��tH�|$�[H���Rf��|$����L���
���H�5�H��H�t'!H�81��B���f�H���D$ 1��d���fDI�EH�D$H�D$J�4�$�H���8��8��H��(H��M��HD�I���ع���H��L�p�@$H�@f�p L;}�#����$���f.�J�����.��H�D$E1�H�D$8����D��!���H��H�H!�H�T$@�xI�JH�FH�M�,H�D$@�A�E��+���aI�JH��H��I�<11�L�l$HD�T$I�Ո��tKE��u�Ѓ�	���g< �_<_����0��	�5H���DI��I�<1H�����u�L�l$�����fD�����f�P ����f.�H�D$1�H�D$@��Ѓ�	��v< u J�LfD�H���Ѓ�	��v�< t������E������L�l$@H�\$8M�L�����DL�l$@H�\$8M�L����H�FE1��L$H��H�D$8�I�<1���tA��uD��A��	A��vy< tu<_tL��0��	��H���DI��I�<1H�����u�H�D$1�H�D$H�D$@����M����D�TD��A��0A��	v�E�����H�\$8�M��H�D$L��!����L�l$8E���������DM��t�T�Ѓ�0��	�A���L�l$L�l$HE�������H�\$8�L�����DH�D$1��T���H�t$@���H�D$H�I���(���E���M����3���L�l$H�I�ʾ����H�\$8L�l$�L�l$HL��R����n���H���&����|$\�
���ff.�f�USH��H��(dH�%(H�D$1���t2H��H�跿��H��H�L$dH3%(H����H��([]�fDH�t$H���s���H�߾H��賯��H���۵����xH��wAH�����H���1���H���@�|$H��H��wH��葳��H���)���H���m�����
H���3���H�D$H�pH� tH�pH�xH�2"!A��H�H��
����H�T$H�T$H�H�5!H�T$H���:���1�H������������fDAWAVAUATA��UH��SH��H��XdH�%(H�D$H1�贳��f.��zf(�fT
~�f.
6���f��f.�zVuT�$�H�"!�^�f/�wH��!!@H�L$HdH3%(H���jH��X[]A\A]A^A_�f.�H�����H��vPE���=��f/x�H��!!vH��H�5�!�0���1�H������@H�y!!���1�H��L�D$��@��H�L$H�T$�L�d$ �*���H�\$�L��H��H)øH��O�Lc�L���N���H���f����L$����K�4,9��H���8��8��)�Lc�H�00000000L��H��H��H��L��H)‰Ѓ��F�����t�0��I�\L��1Ҿ
�D H������H���8��8��H��H��H��L��H��H��H��H��H�,���H�5�!H��H�����L$H�h���B��������f�P �4���@E���p���H����H��!H�H��!H�5��H�81�茬��@H���8��8��)�H�00000000Hc�H��H��H��H��H)�H�H	���������t�0���H�D$P1�L��
J�(�D�����9��8H�NjD$�H������)�Hc�����f���Ͼ9��8)�ߍK���|$����Hc�D�)lj����Lc�K�\5���)�Hc�H)�L�<�M��I)�E���L��I�<�0H���W���L��1Ҿ
B�D< �R���H���q���f.�H��!�%���@L�F��H�>I��H�|�L)ƍ1��������1��ƃ�I�<09�r�����H�~��H�H��H�L�H)��2�����������1�A����J�9�r����f����9��8K�<,�0������)�Hc�H�,�H��L)��r���L��1Ҿ
�D, 1��l���H�����K�<4L��L��L�L$蠮���L��L��0�{���L�L$������0000�D�0000�����0000�D�0000���f�D�00������f�D�00�����
���H�+!H�5��H�81�����u	H�S�@���H��tH��tF��u2��tH�!H�����H��!H�����H��!H����H��!H����H��!H�����H���H���H��HD�E1���H�1!SA���H��H���H��tH��H��1�����H�[�D�[�f�ATU��SH��H��dH�%(H��$�1�H��H�����HH�H��u2����1�H��$�dH3%(��H�Ġ[]A\�D@��u"H�������w�H�m�Hc�H�>��H��H���H��t�H��$t�@����@��t�H�߉��S���H�5,!H��H���a����l���@H�߉��.AH�5!H��H���<����G����H�5�!H��聨��������H�5�!H���
�������D�
H��蓪��H�HH�$H�xH�q
H� tH�x���?���H��H��H�D$H�5}!H��H�$豩�����@L�d$H�پ�1�H�L��H�m��'���L������H�51!H��H���f����q���H��!H��H�8�_����:���f.�UH�պSH��H�����H��dH�%(H�D$1����I��H�H�$A�@ ��f��w�]H��r5I�@H���hA�L� H�p���t���H�~�A�L�$��uCH��H��u�H��tH�H��tH�EH�D$dH3%(��H��[]��E�H$E���xA�	A������DA��D��A��A���A��	w���R��A�����E1�A������9�t�*fD�Љ�A������9�u��A��A�����	w�I�PH��xc�	tMc�L)�H��tH9���H�L�H�H�H���"���I�PH����1�H9�}
H)�Mc�H��L)�H�E���f.�H��H��H��H)�1�H��	������E�H$H�x�A�L� H��E�����A�	�����H��H���t���H��Mc�H�I��M)�H9�IL��X����H��Mc�H�L)��k���E�H$H��H��E�������A�	���E1�����ӥ����SH�� dH�%(H�D$1�H�T$H�t$�x���H�|$H�@H�xDH�\?H�@H�|$H�x;H�|?H�����H�L$dH3%(u(H�� [���ˣ��H���fD軣��H����1������H��1�dH�%(H�D$1�H������H�<$H�@H�xH�D?H�L$dH3%(u
H��Ð�[������Ԥ��@��H��1�dH�%(H�D$1�H���~���H�<$H�@H�xH�D?H�L$dH3%(u
H��Ð������t���@��USH��HdH�%(H�L$81Ʌ�x��v
�1��Q����H��H������H���	���H�5��H��H�H��H�D$���1�H�p2�D���H�D$H�\$H� �}H��H�T$H�EH��H�rH��H���1��w���H��诣��H�T$E1�1�H�4H��H�RH)�����H��芣��H�|$H�����H�D$H�L$8dH3%(uH��H[]ÐH�[�~����b���f����H��H������'����P 1�f��tf��t�f���tH���fD1�H���f����H��H����������P �f��t1�f�����H�D��H���D��H���H��������f�x H�H��������H���H������g���H�@ H��H�D����H���H������7����H$��tPH�@H�<�H����w"H��������̺�H��H��H��H��H9�w�H�@H�H�D?yH��造���H���fD��S�H�����H��@dH�%(H�D$81����H�5R�H��H�H��H�D$蜬��1�H�����H�D$H�D$H�PH�D$H�pH� tH�pH��E1�1��ѱ��H�D$H�xH� tH�x�F���H�|$H��蹡��H�D$H�L$8dH3%(uH��@[��)���f���S�H�����H������@ ��f����HD�H��[�ff.���H���H���������@ ����f��H�H�����ff.���U�H�����SH��8dH�%(H�D$(1��U�����H��H�H�$H�EH��H�"!H�H�8����H��H��H�H��H�D$���1�H�����H�H�L$(dH3%(uH��8[]��������U�H�����SH��8dH�%(H�D$(1������H��H�H�$H�EH��H��!H�H�8�G��1ɺH��H��H�H��H�D$�*��1�H�����H�H�L$(dH3%(uH��8[]��a������AW�AVAUATUSH��H�����H��xdH�%(H�D$h1��
���H��H�H�D$@H�EH��L�$���zH�H���1H��H��!L��L9�HC�H�8�w��H��H�H�D$H�E �ƒ�f����f�����f���6� H�}�uH�CH9EA�(H��I��LCe1�H�<P蠭���H��H�4�$I��ID��D���A�1�fD�H I��L�h�@$H�@H�@K��I�<DH��I����H��H�4�$I��ID����A�H�t$0H��L�hH�|$8I��L�k�@$H�@H�@fD�P ���L�t$0�D$8H�r�q�qL��L��H��L��H��?H��H�9��8��8H��H)�H�L$0H)�H�I��H9�t)�D$8���H��I���^�I��?I�I��D$8f���Q�f.���f.��=f(�fT��f.���3f.���f/�f(�wfW���
g�f/����]�E1�f.��^�I��f/�s�L�K1�H�{$�T$(L�D$ J���D$�d$L�L$�_����D$f��L�L$�d$L�D$ f/��T$(��M����1���I9����Y�f���H,ȉʉL�$H���H*��\�f/�w�I9��hf/�L�H������i�YºL�Kf�S L�C�H,ȋT�$1�H���������H��H�����1�H���F��H�H�L$hdH3%(��H��x[]A\A]A^A_�H���x���H���y���1��C$1ҿ H�CH�5T�f�k �x����fD�A�����C$H�Cf�K Ls�I��IF�K�T�H�CH��H��dI�G�dHN�E1�H�D$�fDH�CH��H��L��L��I�G�w�������H��L��L������H�5�
!L��L�����A�G ��f���tT�H��L��L������L��H���q��I��L;t$}&H�CH�I9��v���L�kL���n���f.��C L�kL����f��1�)�f�C ��L������e���D�}$�����H�}�v���A��C$H�CH�CfD�[ �$���@f/��C$H�C���f�{ ���f�1�f/�I�A��������Y�f�S 1�L�KL�C�H,�M�����������E1��C$1ҿ H�CH�5,�fD�c �f��������
��E1����f/��a����Y�I��f/�w��K���D�����f�s ����f.�E1��C$H�CfD�C ���1����H��
!H�5��H�81�赗��谘���d$����f���d$�_���fD��U�H�����SH��8dH�%(H�D$(1��E���H��H�H�$H�EH��H�
!H�H�8�����H��H��H�H��H�D$�����C 1�H�߉�f��1�)�f�C 萾��H�H�L$(dH3%(uH��8[]�������U�H�����SH��8dH�%(H�D$(1���H�t$H�|$H��H�H��H�D$ �Ȟ�����H�D$H==��H=����H�5��H���S���1�H��虛��H�D$H�D$H�hH� tH�hH�D$E1�1�H��H��H�P腧��谖��1�H�������D$蕖���D$�8"u*f.2��|f(�fT
��f/
H�w&fD�{���H�L$(dH3%(��H��8[]�1�H�5���轪��f�{ xn����9������D$�%�����~���f.�1�H�5o���m���f�{ f��n����������a���@�p��˙���K����������U�H�����SH��8dH�%(H�D$(1������H��H�H�$H�EH��H��!H�H�8�W�������H��H��H�H��H�D$茾��1�H���"���H�H�L$(dH3%(uH��8[]��s�����AW�H�����AVAUATUSH��XdH�%(H�D$H1���H�5ɾH��H�H��H�D$ ����1�H���Y���H�0H�xH�D$H�<$H�t$�� tH�@H�$H�D$H�@H���E f����f���!f����7�Pf����!f����H��H�<$H���1��J���H�$��<-���M$L�d<N�LD���H�EH��H����w%H��������̺�H��H��H��H��H9�w��k���L��H��H���ݗ��L�t$H��L���͗��H�<$��L��H���i����H��謗��H�tH�@H�yH���P���H��H��腗��H��H�|$HdH3<%(�8H��X[]A\A]A^A_��H�4$I��f����H�EH�D$H����H�l$�1�I���H�D$A�	A���l�$�.f�H��1�I��H���������H��I��I��I��A��tCH��t
�L9�r�H��1�L��L��I��H��H��1�蝑��L���Ւ��1�I��fDH��H9\$�i���H�l$A��0A�����DI��A�A��0t�H�$��<-����L�4$M�fL���m���L��L��H��H��蜕��A�A�H�����������膓��L��H��H�����H�\$H��H�����H�<$����H��H��脒���H���Ǖ����0���DH��H�<$H��蕐���F���L�~�-�L���@H��H�<$H��1��k�������fDH��H�<$H�)�1��K������fDH��H�<$H�r�1��+��������q������AW�H�����AVAUI��ATE1�USH��dH�%(H�D$1����H��H��跷��f�} �M$A��1�O�d$���t3H�EH��H����w"H��������̺�H��H��H��H��H9�w�L���e���H� �H��L�pH��!I��M�nM)�H��u#H�-���H���c���H�l!H��t�L��1�1�H�����H��I��I����M����K�D?H�$H�!H��u#H�Z��H������H��!H��t�H��H�ƿ蒑���*L��H��H�$�y����H���|���H�L$dH3%(��H��[]A\A]A^A_�f�H�@ ���I)�K�D-H�$H�u!H��u!H�����H���S���H�T!H��t�H��H�ƿ���L��H������f���f�H���*H��L�$$跐��I�������*���f.���AW�H�����AVAUATI��USH��HdH�%(H�D$81�����H��H�H��H�D$�b����M$��t[H�EH��H����w%H��������̺�H��H��H��H��H9�w�H��~ H��	J1�f�} ��H�D�H��H�D	��H�|$8dH3<%(�%H��H[]A\A]A^A_��L������H� �H�@ L�pH��!H��u L�%"��L���Ӓ��H��!H��t�1�1�L��H���h���M�vI��L�d$I��M)�f�} �sM����K�D?H�D$H�a!H��u%H���D�H���c���H�<!H��t�L��H�ƿ��L��L��*H�D$�؎��H�ƒ�H��t!H�����������H���H�������H�� H�5��H�81�����H������I)�K�D6H�D$H��� H��u H����H��裑��H��� H��t�L��H�ƿ�2���H�D$H�^� H��u*H���f.��H���S���H�4� H��t�L��H��L����������L���*H��H�D$����躍��I���g����-���ff.�f���AUI��ATUH��S��1�H��8dH�%(H�D$(1�胛�����hI����H��H���������H��H�H�$H�EH��H�{� H�H�8�@��L��H��H�H�D$����1ɺH��H������1�H������H�D$(dH3%(��H�;H��8[]A\A]�+�������I�}@�����܊��I��H��H���������H��H�H�$H�EH��H�� H�H�8���L��H��H�H�D$�d���IcͺH��H���a���1�H���G���H�H�L$(dH3%(u/H��8[]A\A]�f�苏��I���Z����1���腍���p�����AUI��ATUH��S��1�H��8dH�%(H�D$(1��ә�����hI����H��H����������H��H�H�$H�EH��H�� H�H�8���L��H��H�H�D$�m���1ɺH��H���k���1�H���Q���H�D$(dH3%(��H�;H��8[]A\A]�{�������I�}@�����,���I��H��H������E����H��H�H�$H�EH��H�� H�H�8����L��H��H�H�D$贘��IcͺH��H��豳��1�H��藯��H�H�L$(dH3%(u/H��8[]A\A]�f��ۍ��I���Z����1����Ջ�������AUI��ATUH��S��1�H��8dH�%(H�D$(1��#������hI����H��H������N����H��H�H�$H�EH��H�� H�H�8����L��H��H�H�D$轗��1ɺH��H��軲��1�H��衮��H�D$(dH3%(��H�;H��8[]A\A]��������I�}@�����|���I��H��H����������H��H�H�$H�EH��H�b� H�H�8�'��L��H��H�H�D$����IcͺH��H������1�H�����H�H�L$(dH3%(u/H��8[]A\A]�f��+���I���Z����1����%���������AWI��AVAUATI��US��H��HdH�%(H�D$81�������L���	I�<$���JM�d$�9��%����@�����J���Lc�M��tA��uI�$��H����L�����A��1�����H�����L��I���2����H��H�H�D$H�EH��H��� H�H�8����L��H��H�H�D$蠕��A��L��H��H��螰��1�H��脬��H�H�L$8dH3%(�^H��H[]A\A]A^A_�fDH�D$A�1��B����H�����L��I���{����I��H�H�D$I�D$H��H�F� H�H�8���L��H��H�H�D$���H�L$��L��H�����E���>���1�H���«��H�D$8dH3%(��H�;H��H[]A\A]A^A_����H��t;@��t<@��t/���E1�H�A��H�D$����D�ˉ���,���fD�k�����H���H��u��X���E1�A���-���L���E���A�������1���菇���z����A����f.���AWAVAUATUH��H�����S��H�׺H��hdH�%(H�D$X1����I��H�H�D$0�����H�5��L��E1�1�H�D$(�ߎ��H��1�����H�D$ H�D$ L�hH� tL�hH�D$ ����H�PE��H��L��L������L��萃��H�|$ H������H�D$ H�L$XdH3%(�$H��h[]A\A]A^A_�H�}H�|$(���^H���=H�����\@���'�2�������Hc�E1�H�5��L��1�����H��H������H�D.�1�H��H�t����H�XD��L��L��H���[������+���fA�|$ ��A����L��A���
M�L$M�t$M���TH��M����M����H������H��	A���<E��t@� H��������G0H��H��H�A1�H��H��H����H�������H�C�H��t�H�W�0H��H��H��t����軁������fDH���O���A�E-I�}H���6���H���H�������H�|$(軀��H��� �4E1���+u$H�PA�H���DH�L�H�lJ�H�H�����b����ʍq���v� t��0��	v΃�߀�F�>���H�5y�L���C���H���;���H��������0H��������G.H��H��M�������H��H���i���H��	���4@� M���L����G0H��H��H�B1�H��H��t.H���(���L�C�H��u��u�H�G�0L��H��H��u�H��u�I��u�H��M���H�D-L�t$E1�A�����H�D$I�F�L�l$I��M��G�D�$A��M��u	E�������S@H��uk� M����D��1�H��H������0�G�H�A1�H��H��D��1����A��A�����	����E��uM9�w	E���H��tsL�S�H��u�D��1�L��H������0�G�H��t��DH������A�E I�}H�����H����A�E+I�}H������H�PA�H�����L�l$����A������1�A���A��D��H��A���A9�r��H��tK��1�H)�H�L$H��H)�A��	����I��t+I��L9|$�����L�l$�l���@�1������H���k����.H��H��H���I���H��tdK��1�H�L$H��H)��U���I������H��������.H��H��H�G��I9�������.����H���H��1��}�����1ɾ��U����Q~��H�r� H�5إH�81��9}��f���U�H�����SH��dH�%(H�D$1�����H��H�H�] H�$H��tPH���tJH��x-H��������?H!�H�L$dH3%(H�DuAH��[]�@H��H	���f�H�EH�}$H�4��{~��H1�H]��}}��ff.�f���H���H�����dH�%(H�D$1��'��H��p H�$�Vf��w�]H��r<H�PH����L� H�r���t�2f.�H�V��L�$��u,H��H��u�H�t$dH34%(�H���fD�x$����A�	A������	��׉�A��A�����	w�Mcȅ�����A�����A������9���1���Љ�A������9�u�ȃ�A�����	w�Hc�H�<�L)�H)�H�@H�xH�D?�8����H�D$dH3%(uIH���z���
����x$�L� H�օ��*���A�	�J���1�떋x$H�օ��
���A�	�5����{��f.���USH��H��H��8dH�%(H�D$(1�H���H����H��t;@��u5H���H��tiH��u#H�C �H�@H�4��-��H�8H�|$��H��������H�8H�|$H�D$(dH3%(uYH��8H��[]�}��f�1������1�H��H�H��H�$�p���H�D$(dH3%(uH�}H��8H��[]�N}���z��f�AVAUI��ATI��H�����U��S�ӺH��0dH�%(H�D$(1��Y��I��H�H�$M���A��u(I�$��������H�^�Hc�H�>��@L��H���H����I��$��A����A����1�1�L������H�H�T$H�T$A�V f�����H f����f��@��f���@��	�f���yf����o@����f���_��*��"����H����Hc�H�>��DH�5A� L����x����u%D��*��"��H�9���Hc�H�>��1�H�����L�����H�H�T$H�T$A�V f���2������*tf.�1�H�L$(dH3%(�AH��0[]A\A]A^�DI�F1�L��H�4����H�H�T$����f�H��� H�ɠH����f��H���S}��H�t� H��t��f�H�i� H���H����f��H���}��H�<� H��t��aDH�1� H�\�H��uD�H����|��H�� H��t�H��L��L���z��H�������������H��H�L$(dH3%(�H��0L��L��H��[]A\A]A^�6{��fDH��� H��u%H���D�H���K|��H��� H��t�H�L$(dH3%(��H��0L��L��H��[]A\A]A^�Qy�����)�@��EЅ�������*��H�؀�"�#}��H�
����Hc�H�>��D�q�z��f�����f���3f���^f����H�xI9~���f��������*��"��|��H�����Hc�H�>����f���D��*��"�~|��H�����Hc�H�>��1����f�f����f���������*��"�<|��H�G���Hc�H�>��fD�����fDH������������f�H��������f�H����������H��D�H�B���f.�f���
����d���f���*��"��{��H�5���Hc�H�>��1��f���������*��"�q{��H�����Hc�H�>��f������*��"�H{��H�����Hc�H�>��L�HM�FM9�L��IF�H��t*A�v$9p$r�w61��@D�T�$E9T�$w�r H��H9�u�M9��L���f���:�������f��������*��"��z��H����Hc�H�>���t����*��"��z��H�i���Hc�H�>��H���}���ff.����G���f����>���f����L���f����<���f����=�r���f����*�b���f���AU�I��ATUSH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H����H����1�H�����H�����I��M����I�$��H�D$I�D$HEH��H�D� H�H�8�	���L��H��H��H�H��H�D$�P���1�H���֙��H�H�L$(dH3%(��H��8[]A\A]�@���_���H���H��t+H���I���H�E�H��H�4�����I���@���@�1�H�����I���%���f�H�D$(dH3%(uH��8H��L��*[]A\A]�v���r�����AUATI��UH��SH��(dH�%(H�D$1�����H��H�H����u2H�D$dH3%(��H��(L��H��[]A\A]����f�1�詁��L��H��I�����L��H��萁��H��H���������H��H�H�$�ݘ��H��H�����O���1�H���U���H�EH�L$dH3%(u!H��([]A\A]�fDH���t��H���3����q��H��� H�5F�H�81��sp����AU�I��ATUSH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H���H��u\1�H�����H������I��M���_I�$fA�|$ H�D$tf�} u^H�EH�L$(dH3%(�XH��8[]A\A]���u�H���H����H��u�H�E�H��H�4��p��I���L��H���m���I��H���ttH��H�9� ��H�H�8��H��H�H�D$M��umf�} �C$H�C~~�f�S �_�1�H������I������f���
�H��� H�8肯��H��H�H�D$�����L��H��H����1�H���J���H�����f������f�C ��DH�D$(dH3%(uH��8H��L��-[]A\A]�r���qo�����AUATI��UH��SH��(dH�%(H�D$1�����H��H�H����u2H�D$dH3%(��H��(L��H��[]A\A]���f�1��~��L��H��I���{���L��H���p~��H��H��������H��H�H�$轕��H��H�����/���1�H���5���H�EH�L$dH3%(u!H��([]A\A]�fDH���hq��H���3����kn��H��� H�5&�H�81��Sm����AU�I��ATUSH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H���H��u\1�H�����H������I��M���_I�$fA�|$ H�D$tf�} u^H�EH�L$(dH3%(�XH��8[]A\A]���u�H���H����H��u�H�E�H��H�4��P��I���L��H���M���I��H���ttH��H�� ��H�H�8�Ԭ��H��H�H�D$M��umf�} �C$H�C~~�f�S �_�1�H������I������f���
�H��� H�8�b���H��H�H�D$�L��H��H���Ԡ��1�H���*���H�����f������f�C ��DH�D$(dH3%(uH��8H��L��+[]A\A]��o���Ql�����AUATI��UH��SH��(dH�%(H�D$1�����H��H�H����u2H�D$dH3%(��H��(L��H��[]A\A]���f�1��i{��L��H��I���{���L��H���P{��H��H��������H��H�H�$蝒��H��H��������1�H������H�EH�L$dH3%(u!H��([]A\A]�fDH���Hn��H���3����Kk��H�l� H�5�H�81��3j����AW�AVAUI��ATUSH��H�����H��xdH�%(H�D$h1�����H��H�H�D$H�؃�H���H����1�H�����H�����I��M���6I�$H�{� H�D$A�D$ H�;f����f�����I�D$HE��L�4�L��O�t6����H�;L��1�I��H��H�D$ ���H�;L��1�I��H��H�D$(�˩��H�;L��1�I��H��L�D$H�D$0詩��H��L��L��I��H�L��H�D$8荕��I�EH�;��H�,�H�H���m���H�;�H��I��H��L�$H�D$@�I���L�$1ɺH��H�L��L��H�D$H�(���L��H���]���L�D$L��H��L��L�$�f���L�$L��L���L������1�L���Տ��I�H�L$hdH3%(�
H��x[]A\A]A^A_�����<���H���H��t+H���&���H�E�H��H�4��ľ��I������@�1�H��詾��I����������I���I���H��@$H�@H�T$ �f�P �5���@H�a� H��u%H�-��D�	H���+m��H�<� H��t�H��H��L���k��H�������1�1�辎��H�%�h��ff.�@AWAVAUATUH��SH��HdH�%(H�D$81�H���u9�����H�L$8dH3%(�cH��H[]A\A]A^A_�f�H���Hl��H���P���I��H��������?H9��BH�\H���]k��H��H���x����H�H���"�%1���v��L�5� H�S��I��I�>�Φ��L��H�����I��H�H�D$���I��H�H�D$H���H����H��H��t@����f�H��購��I�T$I�>�H��H�H�D$ H�EH�DI�UH9�H�JHF�1�H�T�	H��4���H��L��H�H��H�T$(L������L���v���n���H��L�������1�L�����I�E�q���DH���Pj��H������H��L�����D���H�E��H���/���H���HN�����DH�L$H��H��L��H�$�-H��uXH��� H��H��uD�H���j��H��� H��t�H��H��L���i�����@H���xh��H������H�$1�H������H�;�J������`e��H��u:H�\� H�H�r� H�53�H�81��9d��H�Z� H�5�H�81��!d��@��uH�W��H��tH��t?@��u*@��tH��� H��H��� H��H�� H��H��� H��y���H��� H��j���ff.�AWAVI��AUI��ATI��USH��H�5c� H��xdH�%(H�D$h1��e��H�5C� H��H��H�H�D$ ��c����u,���3H��t���H�؃�H����DH�5�� H���c��1҅�u+H�L$hdH3%(H���H��x[]A\A]A^A_�DH�5�� H����d��I��H�H�D$(�E f����A�W f����f����f������Jf������f���gf����]��f����1�L��H�t$�9���1�H��H�t$�*���L�d$L9d$� LMd$��M�I�� LB�H��� H�8I�T$輢��K�T$1ɾH��H�H�D$0H��� H�8薢��L��H��H��I��H�L��H�D$8�z���H�C��H��H��� H�8�Y���1ɺH��I��H�L��L�L$H�D$@�7���L�L$L��L��L��脣�������L��H��H��衖���C L�L$��f���tf�} A�G �?f���?M�M�I�����DH���H��
��H���Ȱ��H�����H��� H�5�� H���
c��H�5�� H��I�E�b���I����f.�f��t�f���t��Jf����uH��� H�5�H�81��`��f�f��~kf��~kH�=� H�5X� �b��I�EH�=�� H�5A� �|b���I��D����H�ڃ�H����H�ߺ1��)���H�������f��~�H�=�� H�5�� �(b��I�E�f�f�������I�qL��L�L$�vk��L�L$�����H�
� I��I�AL��L��I�D$���L��H��賆����H��H�~� H�H�8�C���L���H��H��H�H��H�D$H赔��M�e�I�.�Y���@H��� �[���@H������H������H�EH�ߺH�4��'���H������H�=�� H�5�� �%a���I�EI�.����_��ff.�@��UH��SH��H��8dH�%(H�D$(1�H�L$H��H�$H�D$����H��u-�%H��H���c��H�L$(dH3%(u5H��8[]�fDH�$H�\$1�H�H��H�D$H�H�D$���H���S_����ATUH��SH��H��@dH�%(H�D$81�H�L$H��H�$H�D$�`���H��u[H��� L�%>�H��u!��L���c��H��� H��t�H��H��H���Ib��H�L$8dH3%(uJH��@[]A\�H�$H�\$1�H�H��H�D$H�H�D$����H�+H�$1�H������H�;H���a����j^��f.���AVAUI��ATUSH��H�5� I��H��pdH�%(H�D$h1��;_��H�5�� H��H��H�H�D$@�]����u-���pE1�H��t���SH�؃�H����I��H�5�� L���A]�����	L��H�5�� ��^��1�L��H��I��H�H�D$H�r���1�L��H�t$�c���H�$H9\$� HM\$L�-H� �H�I�}H�� HB�1�H�S���I�}H�T1�I��H��H�D$P�ٜ��L��H��L��H��H�H��H�D$X轈��I�$A�v$H�D$H�H�D$I�H�D$ ���x1�L���~���I�$H�L$hdH3%(��H��p[]A\A]A^�f��/H��L���0`��H��u��b��DH���H��
uDH���<���I�����@�C$1�L��Hi�ʚ;H��I�T$A�T� 1����K����^���fDH�ڃ�H��u�1�H���%���I���M���DH��t�H���5���H�E�H��H�4����I�������[��fD��AWAVAUATUSH��HdH�%(H�D$81���~oI��H���u_H�L$H��H��L��H�$��H��tWH�$1�H���!���H�;�i��f�H�L$8dH3%(uiH��H[]A\A]A^A_Ð��tY���\^��@H�Y� H�-T�H��uD�H����_��H�4� H��t�H��H��L���^����[��H�nH���5���@���:H�H���>uH��L���q����L���@1��Qj��L�5�� H�U��I��I�>�A���L��H�����I��H�H�D$�b���I��H�H�D$H�؃�H��tH��H��t��uH���H��u
H���HN�H�ߺ����I�T$I�>�H��H�H�D$ H�CH�DI�UH9�H�JHF�1�H�T�	H�虙��H��L��H�H��H�T$(L��者��L���hi���Ӏ��H��L�����E��1�L���K���I�E�2���f�H���\��H�����H��� H�5[�H�81��X�����AWAVAUATUSH��HdH�%(H�D$81����=H��H����g���%L�fM��A���}L��H�H����8I���kM����I�M�����1��|h��I�T$�L�5�� �I��I�>�k���H��H�����I��H�H�D$茮��H��H�H�D$H�؃�H��tL��H��t��uH���H��u
I���IN�H�ߺ�B���H�UI�>�H��H�H�D$ H�CH�DI�UH9�H�JHF�1�H�T�	H��ė��H��L��H�H��H�T$(H��諃��L���g���~��L��L�����p}��1�L���v~��I�E�H��H���u���H�L$8dH3%(��H��H[]A\A]A^A_�f�L���Z���|���H�L$H��H��H��H�$���H��uOH��� L�%�H��u�L���3\��H�t� H��t�H��H��H����Z���o���L���,Z��I���2���H�$1�H���}��H�;����D������Z���W��H�&� H�5�~H�81���U��ff.�f�ATI��U��SH��H�� dH�%(H�D$1�H��wB���H��t1�����H�L$dH3%(��H�� []A\��H�5A� H����U����tuH�5.� H��I�����\W��H�� 1�H��H�	� H�8�qU��H��1�H��脑��H��H;(uH;E tH�] H��H�+�7X��1�H���|��H��Y���D����H��ubH�
2~H�2~�H���wZ��H��t�uH���H���O������H���>Y��H�5DŽH��H�-� H�81��T����t#H�؃�H��u���L��H���R������DH���H��
u,H���������CV��1�H���{��H������H�ڃ�H��t�H��t�H��t8H��tJH������H�\$H�|$��S����L��H���\����;������L��H�����"���fDH����U��H��uVH�5�� H�L$�H��H�D$�	V��H�����������t=H���V����L��H���������H�D$�b����u1H�����tW��tD��
u�H�]� H�5�H�81��$S��@H��H���H���d���H��$�Z�����R���H�������r���H���X���t�H���a������S��H�|H��t H�|H��tH��H�|�HE�H�?� H�5`�H�81��R��ff.���AUATUS��H���������kV��Hc�H��L�d��T�����uL�e��u.��V��H�����A��H��D��L��[]A\A]�-���DH�m��u���UV��H��A����U��H�ètCH��H�y�E��uRH���[]A\A]�fDL���HQ��H�ǃ��m����;����H���R����t�H���,S��H���b���H��� H�5?zH�81��lQ��ff.����AWAVAUATUH��H��SH��H���H�T$HdH�%(H��$�1����H�H�|$H�|$��	H���
��u'H���������H�J�Hc�H�>��@H��H���H����H��$����������H���sU��f(�fT
G�f.
���lf��1�f/��…���H�t$���@���1�H��H����w��H�H��$�dH3%(��H���[]A\A]A^A_���R��H�D$���H�5ڼ H���rP������H�� H��H�8�[���H�t$1�H��豦��H��t�H��@ H�\$H�\$f�D$>H��H�\$f����H�m� �H�8蠏��1�H��H���w��H�L�C H�\$@A�@ ��f�����L��H�L$XI��I�܋p$�H�L$0H���������A�x$���@@H�@H��H����w"��f.�H��H��H��H��H9�r�t7I�@��H��H��H�����$@H��H��H��H��H9�w�H)�H��L�l$H��?H1�H)�I)��P��M���7I����H�t$L��A�!�r��I��H�@H���L�d-I����A����M��I�M�����VL��L�����I��L��L��H�����M�D$ I��A�@ ��f�����I�G A�x$�p$������1Ʌ����EO��L�l$H�t$L������I��H�@L���L���5M��I��H�@H��3���H���M��I��I���-���H�L$0H�T$PL��L��H�D$P��H����H�t� H��u$��H�=^v�S��H�P� H��t�L��H��L���Q��I�����f.���1�1�H������1���1�H�����H���ѣ������@1�L�D$(�l]��L�D$(��H�D$ H��� I�PH�8�U���L���H�����I��H�H�D$`�v���L�D$(I��H�H�D$hL���H��tL��M��t A��uI�$��H��u
I���IN�L��L�D$(� ���I�V�I��H�H�D$pI�D$H�DI�UH9�H�JHF�1�H�T�	H�վ H�H�8蚌��L��L��H�H��H�T$xL���x��H�|$ �g\����s��L�D$(L����L���?r��1�L���Es��M�e�|���@L���O��I���K����L�d$P1�L���s��I�<$�X���I���@���L�|$@f�|$>��I�G �p$��tIH�@��H���������H��H��H�����zf.�H��H��H��H��H9�w�H)L$H�@H�\$H���H�DH�t$HL���H�D$H���������O�l-�?���fDH)����H�y� H�T$�1�H�8�5�����@$H��H�@f�p H�\$X1�H��H��q��H�����H�C �P f��tDf���t>f���w���H�� H�T$1ɾH�8�Ȋ��1�H���@$H�@f�H �����H�|$�|I������H��H�t$X�H�D$X�\���H�5�� H��H����K��L�t$H�5�� H��L����K��I9�uXH�C �H�\$f�P ��H�\$HH��tG��t$H�H���	��H�|$@L��������H���KM��H����H��H��諅��H�C �H�|$@H�L$XH�T$PL��H�D$P�u�H���vH�-� H�(rH��u�H����N��H�
� H��t�H�|$@H��L���`M�����1��dY��H�S��I��H��� H�8�T���H�|$@�H�����H��H�H��$��p���I��H�H��$�L����H��tH��M��tA��uI���H��u
H���HN�L���"���I�U�I��H�H��$�I�FH�DH�UH9�H�JHF�1�H�T�	H�պ H�H�8蚈��L��H��H�H��H��$�L���~t��L���fX����o��H��H�����Cn��1�H���Io��H�E�`���H)D$���H�\$P1�H���'o��H�;�o����:���H��� H�5�wH�81��rG��H��� H�5-pH�81��ZG���UH��D��AT�USH��dH�%(H�D$1���F���H�=�p��L���H�=�pH�� ��L���H�=�pH�� �L��f�f.-� H�ƻ ����1���(��V���H��H�4�$H��HD��L���1��f�P H�X�@$H�@H�@H��� �V���H��H�4�$H��HD��:L���H�=�of�H H�XH�@H�G� H�@�@$e�H�Ѹ H�0�L��H�Ҹ �����H�5v�H�=�oH��gI��H�;�J��H�H����H�Ը H�8H�5�oH���
K��H�;�H��1H�5fo�oI��H�;�����H�Ѓ��H�5o�TI��H�;�����H�ņ��H�5o�9I��H�;1�H�mM��H�5*o�!I��H�;�H�"0H�5o�I��H�;1�H��Y��H�5o��H��H�;1�H����H�5o��H��H�;1�H��U��H�5�n�H���H�=�n�E��H�;H�5�nH���J��H�;��5wH�5�n�J��H�;��H�5�n�J��H�;�H�5�n�oJ��H�;�H�5�n�[J��H�;�	H�5�n�GJ��H�;�H�5�n�3J��H�;�!H�5�n�J��H�;�H�5�n�J��H�;�H�5�n�I��H�;�H�5�n��I��H�;�H�5�n��I��H�;�	H�5�n�I��H�;�H�5�n�I��H�;�
H�5�n�I��H�;�H�5�n�I��H�;�H�5�n�kI��H�;�H�5�n�WI��H�;H�����H�5~n�AI��H�;�H�5}n�-I��H�;H�����H�5|n�I��H�;�H�5}n�I��H�;H�����H�5~n��H��H�=�n�F��H�H��H�$�m�H��I���rD��H�=�kL�%<� �F��H�H��H�$�;�H��I���@D��H�=/nL�%� �MF��H�H��H�$�	�H��I���D��H�;L��H�5�lL�%� �EH��H�=Nj�	F��H�H��H�$���H��I����C��H�=4mL�%�� ��E��H�H��H�$��H��H���C��H�;H��H�5�mH�-t� ��G��H�;1�H�8H��H�5pm�E��H�;1�H�����H�5�j�E��H�;1�H�����H�5Pm�gE��H�;1�H�˜��H�5.m�OE��H�;1�H���H�5&m�7E��H�;�H���H�5 m�E��H�;�H����H�5	m�E��H�;�H����H�5�l��D��H�;�����H�'�H�5*j��D��H�;1�H����H�5�l�D��H�;�����H�����H�5�l�D��H�;1�H�����H�5�i�D��H�;1�H�����H�5�l�hD��H�;1�H�,���H�5rl�PD��H�;1�H����H�5_l�8D��H�;�H���H�5Jl�D��H�;�H����H�51l�D��H�;1�H�VH��H�5l��C��H�;1�H����H�5l��C��H�;�H����H�5i�C��H�;�H���H�5�k�C��H�;�����H�M�H�5�k�C��H�;�H���H�5�k�fC��H�;�H���H�5�k�KC��H�;�H�L��H�5�h�0C��H�;�H��H�5�h�C��H�;1�H��{��H�5Ck�B��H�;1�H��{��H�51k��B��H�;1�H�9���H�5k��B��H�;1�H�q���H�5
k�B��H�;�H�����H�5�j�B��H�;1�H���H�5�j�B��H�;�����H�����H�5�j�gB��H�;1�H�����H�5�j�OB��H�;�����H�����H�5�j�4B��H�;�����H�����H�5�j�B��H�;�����H�
H�5vj�A��H�;�H��(H�5?g��A��H�;�H����H�5-g��A��H�;�H����H�5,j�A��H�;�H����H�5j�A��H�;�H����H�5�i�wA��H�;�H�h��H�5�i�\A��H�;�H�=��H�5�f�AA��H�;�H���H�5�f�&A��H�;�H����H�5tf�A��H�;1�H�_���H�5i��@��H�;1�H����H�5di��@��H�;�H�\��H�5Ri�@��H�;1�H����H�5Ai�@��H�;1�H�l���H�51i�@��H�;1�H�$���H�5"i�x@��H�;1�H�ܚ��H�5i�`@��H�;1�H�����H�5�h�H@��H�;1�H����H�5�h�0@��H�;�����H�A���H�5�h�@��H�;�����H�֘��H�5�h�?��H�=�h�^A��H�׮ �H���H��H�5�hH���?��H�;�H�zH�5�h�?���H�=h�A���H�=vh�� H�� �A���H�=Jh�� H�� �oA���	H�=3h�� H�կ �PA���H�=�g�կ H�Ư �1A���H�=}g�Ư H��� �A���	H�=�g��� H��� ��@���H�=�g��� H��� ��@���H�=qg��� H��� �@���H�=�g��� H�{� �@���H�=}g�{� H�l� �w@���H�=xf�l� H�]� �X@���H�=�f�G@���H�=6gH�L� �/@��H�8� H�D$dH3%(��H��[]A\�H�� ��^us�m� �N���uH�x�:�H��t:H��tD�u<tLH��� H�8��DH�� H�8��f�H��� H�8���H��� H�8���H�Ѭ H�8����:��ff.����AWH��AVAUATUSH��H��H�|$8H�T$(dH�<%(H��$�1��uDH��t�uH�D$(H�H�D$��H��
�H�B� H�5�eH�81��	9��f�L�d$(I�M����H������u#H��������LH�tqHc�H�>��H��H���H����H��$�����*��tuH���]=��f��1Ҹf.�f(�fT"r��E�1�f/���f.�q��f.���f/���
����
�1�H���
���H��H�����H�A� H��H�8�.C��H�|$(�:��I������H�5Ť H���]8����t�H�k 1��M �Af��������f��@��f���@��	�f�����Ʌ��\
@���S
H�l� 1�L��H�8�*x��H��H�D$x�1�H��H��C$H�Cf�S ��^��H�H��$�dH3%(��
H��[]A\A]A^A_����H����6��H���=��1�H�H����H��?	���H�� H�5�gH�81���6��f.�H���x<��H��$��H��HDŽ$��<�t	H����	�%9��H�����u��L��H���m���H���[���1�f.����1����H��1�H���H��?	��W���1�H�����H���(���H������1�H����]��H��� �H�]H�8�.v��1�I��H���]��I�E�A�H�5�b�H�D$HH��� H��}��1�I��H���e]��I�EI�L$H�L$H�D$PH�@I�L�d$0�H�D	�M$H�D$@H�D$ ����H�EH�<�H�|$ H����w.H��������̺��H��H��H��H��H9�w�H�|$ H�D$ H���(L��$�H�ؾH��L��H�b1���4��H�ާ �L��A��H�l$@H��|��1�I��H���q\��I�4$H��H���B��H��H�t$HH���R��H�t$HH��L�t$@I���]��H��I���A����I�M������L��H�����I��H�T$@L��L������M�L$ L�d$`H�D$XA�A L�d$h��f���� L��L��H�@H��������̋p$E�A$���^�H�@H��H����w"��f.�H��H��H��H��H9�w�E��t6I�A��H��H��I�����#H��H��H��H��L9�w�H)�H��L�|$H��?H1�H)�I)�M���lH��H�T$@H�|$XL�lI����L��A�!����I��H����H��L�,hI����A����I�M��M���v��L��L�����H��H�|$`H�t$hH�����H��H�D$`H�D$hL�H A�A ��f�����H�G E�A$�p$�������1�E������L�|$H�T$@H��L��H�|$XL�t$0L�lL�|$���I��M����H�D$L�tH�������L����1��I��I������H�L$xH�T$pL��L��H�D$p�u��H����H�-� L�5([H��u"f��L����7��H�� H��t�L��H��L���Y6��H�������H�@L��L�|$M�4�%���I��M���7���L���!1��I���I���f�1��B��I�W��H�D$H�?� H�8�r���H�����L��I��H�H��$��%���I��H�H��$�L���H��tL��M��t A��uI�E��H��u
I���IN�L��L�L$�ч��L�L$�I��H�H��$�I�QI�EH�DI�VH9�H�JHF�1�H�T�	H�� H�H�8�Dq��L�L$L��L��H�H��H��$�L���#]��H�|$�	A���tX��L��L������V��1�L����W��I�6�R���@L���84��I���!���L�l$p1�L���W��I�}����H������L��DH�t$P���H�|$ H�D$`�4H�T$HH�T$xH�T$HH�T$PH�T$xH�T$PH�T$@H�T$xH�T$@H�T$XH�T$xH�T$XH�T$`H�T$xH�T$`H�T$hH�T$xH�T$h�D���fDH)����H�|$�/������H�L$xH�T$pH��L��H�D$p���H���mH�k� H�-fXH��u ��H���5��H�D� H��t�L��H��H���3��I�����H�D$ �4���1��?��I�V��I��H��� H�8�|o��L��H�����H��H�H��$�蚅��I��H�H��$�H�؃�H����L��H��t	����H�ߺ�^���I�T$�H��H�H��$�H�CH�DH�UH9�H�JHF�1�H�T�	H�� H�H�8��n��H��H��H�H��H��$�L���Z��L���>���V��L��H�����~T��1�H���U��L�e�u���H���H���P���I���IN��>���H�T$(H�|$8��5�H�\$ H��H�@H���H�|�H������d���1�H��H���U��H�3H���\���H�|$`H������H�D$`�X�����1����H�� 1�L��H�8��m��H��H�D$xH�1��C$1�f�C H��H�C�T��H����L����0��I���Z���H�\$p1�H���nT��H�;趞��I���X���H�|$ �D,��H���'����7/�����	�������DH��� H�5[UH�81��,���-��1�1�1�1�1���H�}� H�5�\H�81��\,��H�}� H�5�\H�81��D,��@��AWAVAUATUSH��xdH�%(H�D$h1����I��L�6��uk�H�����L���ׂ��H��H�H�D$@H�CA�H�,�f�{ L�=�d�M��uGL���_0��H�5�\H��H�N� H�81��+��@�������/���L���H�D$��I�������w�Ic�L�>���L����0��H���GH�5 � H�L$8�H��H�D$8�-��H������������~L��H��?A��u<I���H��
�ML���H��t
H����	L���/��f��1�f/�������jH�D$A�A���G�C E1���f�����L��A�H��?����H�|$�BL��H���H��tI��$t	M���[H�5/� H�L$8�L��H�D$8�,��H������������s�H��H�Ԝ H�8�j��H��H��1��Q��H��h�H�5�� L���A*��������H�t$0L��H�D$0螣���=L��H�����H������}
L���j���I�����f�I�������I�������I��$�����A�������A�������L���.���D$�[)���L$f.�������bf/�vWf/
�brM�H,�L�t�2���fD�tLH��H���H�������H��$�����������H���������f(���)��I������H������y��t�
�L���L���c-��I��H������H������v������
��H��L������D$I��H��H�I��HE��C ��f�����@M��A���x���H�|$�zL���H����L���,��f��1�f/����O���DH��� �H��H�8�Lh��H���@$H�@1�f�C H�\$01�H��H��O��H�H�L$hdH3%(�H��x[]A\A]A^A_�@E1��C ��f����4���H�|$�8�D$I������������
��I������sH�D$���O��
��C f����f����}M���PH�|$��I���H��
��L������I��H���<H�5u� H�L$8�L��H�D$8��(��H�������������L�l$8��<L��H�D$8L���(��L���H�������L��H��?H��u;I���H��
�BL���H��t
H���oL���*��f��1�f/�������f�{ �����I�����
��H�t$0�L���N)��H�D$0H�Ѓ���������H������~���f�H���H��tI��$t
A����H�5G� H�L$8�L��H�D$8��'��H��������������L����*��I���T���H���*��������H���|������H�|$���L��H���H��tI��$tA��u>H�5�� H�L$8�L��H�D$8�;'��H���������������L��� ���L��H�H��������L���e)��H����H�L$�����H�D$H�H���y���L���)��H����H�L$�`���H�D$H�H���J����DI������3�����
������f�L���D$H���H��tI��$t
A����H�5�� H�L$8�L��H�D$8�9&��H����������������H�n� H��H�8�c�����I�1�I�����E���I���H��
��L���H���v���H���l���H�L$8��<L��H�D$8�%��H������������H�D$L��H�������[���L���(������H���J�������L��L�L$�'��������H�L�L$H���u���L���[(����e���H�H���X����q����H�i� 1�H��H�8�'c��f�{ H��x6A��E$H�EfD�u H�l$01�H��H�E��I��H�E����M����H�|$��L��H���H��tI��$tL��H�H�Ѓ���u�A������E$H�EfD�} �1�I��������L���~'��������H��������#���M��I��<�IE�H�
|� H�9f���@L�D$����'b��L�D$H�I��HcD$H�T�@�C �Pf�����M����f���xM���!	A�A�G$I�GfE�W I����1�L���H��I����H�L$8��<L��H�D$8�n#��H�������������L���� ��H����&���������H��� 1�H��H�8�Ga��f�{ H������I���H��
����I�����
�
H�t$0�L���$��H�D$0H�Ѓ��E����M��A����H�|$�\L���H���vL����$��f��1�f/������Qf�{ ���M���<H�|$�LL��H���H����I��$��L��H�H�Ѓ�H��� H�:�����H������L���b��H���%�������H�D$���I�H�D$(A�G ��f��������H�@L�mH��YL�%� H�3O�l-L��I�<$��H��I�?H��L��臭��H��H�@H��H�T-I�<$H�����H�T$(H�T$0H�T$(�]���f���Af����f���������H�{��M�����7H�D$����I��I�G1�L�D$H�|��.���(�H��H�4�$I��HD��N$��1�L�pI���@$H�@�fA�E K��H�|	�^.���(�H��H�4�$H�D$HD��#��H�T$H��L���@$I��H�P�f�P �H�@��G��H�l$���H��L���G��H�|$����H��L��L��L��H�L$�_���L��L���jG��H�L$H�	H;D$v�L��L��L��H)L$�W_���L��L���7G��H�|$�p���H�|$���L������L������I�������A�G f�����f������f���������D��H��L�����>�����I���H��
�VL���H�������H�������H�L$8��<L��H�D$8���H����������n���L��H������L��H��?�W����A�G$I�GI�GfA�O ����A�G �1���I��H�E�L��HD�1��r��I�����D$I����M�~ ���H���r��H�����L���b��L�%�� H�3H��I�<$�L�L��H���A��I�����H��� H���H�8�=\��f�{ H����M��uLH�|$�=H��� H�5xLH�81��f��fDH�CH��L�D$�H��H�H�����H�|$�L��H���H���HI��$�>L��H�H�Ѓ����*A��E$H�EfD�m 1�H���oB��H�E�W�M���d���L��A�G$H��I�G��	�M���Q���r�fA� �h���E1�A�G$I�GfE�G �U����L���8��H���` �����F����u"H������@��t0��
�����H���H�����I��$���A���|�L��H�H����������#���H��� H�8�H��������M����A���~���A�����A�G$I�GfE�O �y���H�|$�������f������L��H��?H��u;I���H��
��L���H��t
H���=L�����f��1�f/������]�H�� H���H�8�Y��H��I�����
�k�H�t$0L�����H�T$0H�҃����6f�{ ����A������E$H�EfD�e ����H�|$��I���H��
��I�����
�����H�t$0�L�����H�D$0H�Ѓ�������E����P�����H�����L���$o���D$H�H�@H��H�T$HH��!����A�G$I�GfA�_ ����L����������H�H�����L�������z�H�H���m��!�fDH�D$����H�{������{$���fA�G f�{ A�G$I�GI�G�I���A���?���fA�G ���3���D���-�fA�w ����I���H��
�����I�����
u<H�t$0�L�����H�D$0H�Ѓ���������L��H�H�Ѓ��G����������@A�������A�����A�G$I�GfE�_ ���f�{ ���������u�L��H�H�҃����L���<L��H�D$8����H����������w�H�z� L��L��L����B���L��L���$@������fA�G ����fA�G �����L���<L��H�D$8�y��H�������������L�����H������������L�����H����������L�f�H��L���yl��H��H�H�D$@I�����A��tL��H���L���h��H�����[��ff.���H��H���H�t$H�t$���H���ff.����UH��SH��8H�t$H�|$dH�%(H�D$(1����������H����:����0��	��1��@H����:t��0��	��Hc�H��H�Q���u�H�S�H��	�H��HG�A�H��H���L\��H��H�H�D$H��v"H���8��8��H��H��H��H9UvH��H�U1�H����;��H�EH�t$(dH34%(uDH��8[]�H��A��1�H����[��H��H�H�D$�H��� H�5)EH�81���������f���SH��H��H�|$H�t$���H��A�1�H��1��[��H�øH��t
1�H���);��H�H��[�1�����u������u�������u�������u������x��� ��@D��ff.��1���t��uP��tU����f��u�����u������u������u������u����u� Ð��D�����ff.�f�H��(L�WdH�%(H�D$1�HcGM��E�A�M�Y�D����� ��)‰��
����M9�sTA�Q���tR��D�lj�A��)����A��I�A�D	�����?H�� I9�s
A�A����	�H�����H!�H	��1҅�urD�ǁ��?H�� H	�H�|$�D$H�D$dH3%(u_H��(�f.��D��1�)�����?H�� M9�sA�Q���HA��A	�L	���D�lj�1�����?H�� �[����{��ff.��ND�WA9���AWL�F1�AVAUATU�i�Lc�SH�_I��O�$0I�A�$E�D�HD��A��D$�E9���A��M��I��E1�1��I��A�S�E�
I��I��L�I�Չ�H�I�� I)�L��E�J�H�� H�у�M9�s�E�E���	I�V�H9�s$E�V�E��t�DD�
E��uH����H9�r�o�NA��A9���Hc�H��H�L��f�H9�sH��H���291t�rp��H�މD$�1��I��A�H��H��H�H)�H�ЉV�H�� ��M9�s�Hc�H���2��u*H�B�H9�v�J���t����uH����H9�r�o�D$�[]A\A]A^A_�@�w����D$�[]A\A]A^A_�1��DD�W�NA9��&�����fDUS��H������H��� Hc�H��H��t8H�4�H�H���H�H��H9�u�H�:H���H�>H9���H��H��u�ٽH�5�� ��H�
݄ �E�H�H�<�'I��H��I���H�>H���H��� H��H9�t:H��H��H)�H��L�H= vЉٽ��E�H�H�<�'H�����H�‰Z�jH�BH��H��[]�fDUH���SH��H��(�D$dH�%(H�D$1������D$I��fH~�fH~�f~D$H�� ������։ρ���EωL$����H�|$����u_�T$A�Q�T$E1���A�QA��A��E�A����������U�5)‰H�\$dH3%(L����H��([]�D�T$� )�����L$	�A�I����T$�DH�|$�^����T$A�A�A�� A�Q���w���-2�EIc�A�|�����A��A)�D��f����D��@AWI��AVAUATI��USH��LcoLcvE9�|D��I��Mc�I��Lc�C�.1�A9\$@��A|$�W���Hc�L�XI�,�L��I9�s@�H��H9�w�I�I��N�,�K�4�L9�r�^f.�I��I9�vKH��D�W�E��t�L��M��E1ɐI��A�P�D�1H��I��L�L�I�щQ�I�� L9�w�D�	I��I9�w���~�u�H�U���t�H���
��u��u�XH��[]A\A]A^A_��AVI��AUI��ATUH�nSHcFH�_D�gA)���H��H�H��
@H9��H��H���89:t���A�}����IcU1�D�`H�pI��L��IcVH�|��
�L��H���S�H��L�VH)ʋM�H)�H��A��A�R�H�� ��H9�w�I9�v;L��H��@H���V�H��H)�H��A�ӉW�H�� ��I9�w�I�q�H)�H��L�E��uf�H���A����t�D�@[]A\A]A^�DA��,���H��H��A�H��L��M��I�������1��)���H�@[]A\A]A^��H��t4HcWH�5� ��~�)f�HcWH��H��H��H�<�H9�u��fD�+��ff.�AUHc�1�ATUHc�SH��H��D�g��D�H��H�H�ʼnD�H��H�� A9��H��tD9c~&Icĉl�A�D$�CH��H��[]A\A]�f��C�x�E���H�sH�xI��HcCH�����H��L������Icĉl�A�D$�C�ff.�f�AV��AUI��ATUS��H��������M��tNH�-�~ H����M��E1��@�t.H�}H��t;H����t�L��H������L��I������M��u�H��L��[]A\A]A^�fDH��H������H��H�L���H�}I��H��t��=���L������H�^CH��4�1��j���I���>���f������H��H�qH�E1�H�E�H�-�} H������H��H�D$����H�D$H������ff.�@AWA��AVA��A��AUATUH��SH��D�e�E�E�A�\$9�~����9���z���I��H�xE��~#A�O�H��H�D�f�H���B�H9�u�H�|�HcEH�uL��A��ta� E1�D)�fD�D��H��H����D	‰W�D�F�A��I9�w�E��D�DE�E�eH������H��L��[]A\A]A^A_�D�I9�vץI9�w���f.���AWI��AVAUM��ATUSH��H�t$dH�%(H�D$x1����H��@�A�u@��-�7@��Hc�H�>��A�u�D$ @������I��E1�@��0�@��L��σ�/����9��1�E1�E1��*C�4�D�tq�H���A���Ήσ�/����9�VA��~�A��Ӎ��TQ��ʐ�D$ f�H�D$H��tL�8�D$ ��tfW�?H�D$xdH3%(��H�Ĉ[]A\A]A^A_ÐA�u�D$ @��� ���f�H�D$H��t�L�8��I��A�u@��-����D�D$ E1�@��0���A�u����<X�^A�]��t���H�=�A����H��t�I����0�	f�H�-lA�������>�$I���D$�"�A��L������T$H���YH)�f��I��E�u�����H*��Y��YFA�X$�$�T$E��u��$��M��������1�E1�E1�D��.���p�NЃ�	����L�PE���(
L�Ѓ�0�}�D)�@�H���8��0t��1�����Y��0I�¾�\$8C��I��D�4O1���	�A�uI��@��0t�@����A��`���D���@��E���D$8E��I��1��p@��+�M@��-�H��1ۍ~Ѓ�	��L��1�E������+\$8E��I�lj\$$E���@D��f�A����H*�AN�f�$A��	���A�H�5�>f��H��H*��Y��X��$A����D��)�D$$�D$�����D$��tH�H�v>�<$�Y<��<$�d$��r�D$=4�x�����}�$�1�H�=�=fD�t
�Y׾�Hc�H����u�fH~�@��HD$H�$H��=��H�$H�؉�H�� -PH�� H	�H�$�Y$fH~�f�$H�� ��%�=�|��
=�|�H���������D$H�$�$�\$�@H���0��0t�~�1��J����x�n�H�pD�W�A��	w@f�D�D�H��B�lG��>D�G�A��	v�H��H)�H���'��N�H���݅�D��������$�\$A�P�9��81������A��	~����9��D�D$(���A��	D�D$(H��D�p�@��I��
A�	E9�}2E�H�H��E)�O�t
f�I��A�U��
H�ǃ�0����M9�u�H��D�d$8�L$$1�L�|$XA)��DI�I��D$(H�CH�D$@H�D$lH�D$PH�D$hD�d$8H�D$H�{�5�H�t$@H�xI��HcCH�����H�t$PH�|$H�D$��I����H��H�H�E�D$h���	�L$8D�|$(D�,�L$l+D$�43�����|�6)ȋ|$A�LD�A9�D�<��AN�D9�AODž�~)�A)�A)ŋt$8��~3H��L$<�m���L��H��H����L��H�D$0�B���H�D$0�L$<I�ƅ�~
L�����x���I�ƋD$$��~�t$(L���!���I��E��~L��D���N���I��E��~H��D���;���H��L��L���m�HcU�x�HI���@9��IH�4�L�@I�0H�t5�f.�I9��OH��H���9t��M��L�|$X����H�������H�D$�~H�$H�� A��%�=��cE�]E��u	���QL��D�D$$�o���D�D$$I��HcEA�U)…��>H��I�MH�H�T�fDH9���H��H���:98t���D�L$E���ED��%�=��2=p�S
�H�P9�\$H�$�~$�Y�fH~�f�$H���$
L���`�L���X�H���P�H���H�L���@��$���fDA	�����I��f��g����D$$��t��b�|$$��	D�‹\$$�%)�D)�ډT$9��8����H��8�$D)�Hc�)��Y�Hc��Y�����D�D$8E��1��D$$I������D$8D��1Ƀ�߃�Eu#��f�	�D	�����E��I��A�����@E��1�A�������H��A�w��DM�u	A�D$�L�t$(M�l
H�D$0H��D��f�I��A�V��
H�ǃ�0�G�M9�u�A��H�L$0H��H�D$(L�l�2����I��E�uA��0t�A��H�=V8���H������f���5������$�T$A��.��E�eE������E��H�=	8�D$D���[����D$H�������I�����T$�	H�-�7�D$D����E���[	A��H���T$�����T$H���	H)�f��E�eI�����H*��Y��Y�7�X$f.T$�$z�u��D$M��H�-N7�D$�	E�fI��A��H��M�����H��u��D$A���A��P����A�U�,)׉։�����1�)ȃ���I�����0��	���A��1�D�����	w<��I���DF�A�uA��NЁ�/~܃�	w�I��A�U��0��	v�������D�D$8D��1Ƀ���<��A�zI�BD�W�A��	�-���I�����|$$����D�d$8H�q5�$A)�Ic��^����D$�؉ƒ�tHc�H�
E5�<$�^<��<$���D$�?����|$f����t$�j�$���E�H�}41�@��t	�Y�H���u��fH~�HD$H�$��t9H�� �k�����)��~������4���7H��4H�$�<$f�f.��|$�����$�����$�"���fD���H�t$pL���L$<�a�H�t$tH��fI~��D$0�I�A�W+U��T$p+T$t��fH~��L$0�L$<��L���D��H�� �H�� H	�H�D$0�~L$0�^���4f/��I�����
2H��?H�<$H�� �����������|$��t^���wV��4f/�r0�,��
�1��t��f���H*�f(���ufW�1fH~�H�׉�H�� ���)�H�� H	��d$H�$�$fH~�H�� �����@H�� H�$�$�Y��X�fH~�f�$H�� H���9�u�t$���
L�����L�����H�����L������,$�l$���DD�|$(D�l$8A)����fD�Y
p3f(���ufW�0fH~����fDfH~����H�� ��)�H��H�� H	�H�t$0�~D$0�M���@M��L�|$X����H�$H�ȉ�H�� ����������t2�|$fH~�H�� %�-@H�� H�$�X<$�|$f�<$��T$���<����g������PH�� I���<$H�$�$L	�H�<$H�� �$�������H�� H�$�$�Y��X�fH~�f�$H�� �ׁ�������|v`H��������H9T$��H�$�U���f�H�������H�T$H����H����H���
4/�8������PD�$H��H�� I	�L�$����,�f��*��\ȅ���H�������H�$����1f/������M��L�|$X�-���D��.f/����Y
N1f(�fW�.����DE��1��D$81���E1�1�E1�1��D$81����� 1f/��|���f/
1�#����i���1����M��f��A��0����"H��H�$�$��E���/���A���A��P�G����f���x0�
x0�����$������\$fH~�H�� %�-@H�� H�$�\$f.S-�\$f�$�r����l���H�$���"�����D$���HcT$$H��.�$�Y��Z��N����0�4����FL$8�����41�N��G�4���E�9�����~�������䍂P�$�D$H�� H	�H�$�4$�t$��A�UI�����5���1���D�������%�-
��H�� H	�H�$�4$�t$�f���fDH�������H�D$�����H�$H�� I���P�A��0����I��E�e��A��0t�E�����E������T$�����.����D$E�e�D�����������D$�[�M��L�|$X����"H��H�$�#�D�T$�����E��t������w���k)���9��A���%�H�� H�$�$�\$�V���M��L�|$X����H�$�������H�����!�H!�H	�H�$�L����� ����!�H�� H�$�5������ƃ�L����fD1Ƀ���������G��f.���AWf(�AVAUATUSH��x�|$�t$H�T$(L�D$0dH�%(H�D$h1�fH~�f�D$H�� �Å�����f(�%�=��=f�f.���f(�H�t$`H�|$d�L$ �T$�&����T$�L$ ��H����fH~�fH~Ћt$`E1�H�� ������H���?H�� H	�f��H�D$�D$f��*��Y
�,�\�,�Y�,�X�,�X�f/��D,��1��)�D�p�A����Ic�H�5E+��f/���A���D$L�D$8E����E��� D�d$ E��D$�D$��	�����~	��1ۉD$�|$�����D$�D$H�������y�D$D$ ��D$\�����D$@O�����Hc��D$X�v��e���H�D$(����H�\$0A�0I��fD�H��tH�@H�H�t$hdH34%(L����H��x[]A\A]A^A_Ð���fH~��H�؉�H�� H	‰�%�H�T$�T$=�����H�D$(fH~��'H�������H�����	�I�nH�)I���I�D�
H��H�����u�H�\$0H���7����5���@�D$L�D$8E���F���A�A)�D�t$8E1�E���5����P�|$�D$H���D$���9�D$\�x���D$@Hc��D$X�T$P��I��"\$X��
�D$ �T$P����
�É�H��(�����Љ�������f(��^�)H�5e(��t���t�Y��H���u��^��|$L��t�
�&f/���f�ɋL$@�*��Y��X
�)fH~�fH~�H�� ��-@H�� H	…����t$ �|$@�,�f��H�T$�W�Hc�L�
(�\$I�_�A$ыT$H�*ȃ�0�\����(�
�(A��^��\�f/�w{�-&f(��\�f/���
���D�G��%�(I�T�f(��\�f/���
H9���Y�f��H���Y��,��*؃�0�C��\�f/�v��F�D$ �{f��D$��T$���|$ I�NjD$d���T$�q������D$�\$@�\$\�D$X�D$P3E��u	�6+D$`�\$8�A�������D$HI��H�I�E�t$8��~E��~D9���AO�)�)�A)Ɖt$8�t$��t7�D$H���v	L����H��H��I������H��H�D$�s�H�D$H�ſ�q��H��H�D$H�H�GE���B�|$XtH�������H�D$�V
�D����� )ƒ���)�T$8�Aօ�~
H����7�H��E��~H�|$D���"�H�D$�D$L����H�\$HcC9E�}H��H�uH�H�T��H9��_H��H���9t��K�D$ H��1Ҿ
�X����H�ŋD$H�����D$\�����D$@L��D�d$@L�t$��H��1Ҿ
�i��H��L��H��H���G����0�C�D�EE��u
�}����D)�A9��A��E1��H���!�H�t$H�ŋUHcF)…��0
H��H�MH�H�T�
�H9���H��H���290t��S��n
�

f.��t$`�T$d�2�� ��� )�f~���f��A��H*�fH~�fH~�H�� �����H�� H	��I���@D��D)d$8��D�d$ E1�D$����D��V��aH�#I���N�f��
H��H�����u�H�t$0H���J���H��B���f��D$L�D$8E���W�������f��@)���f~������	������D$H���f���A*�f.�z�����A����������@D�t$@E���bD�\$H�D$ E�������D$8���L�l$E����	�D$@M��L�|$@��I�\I��H�\$8�H�t$L�����E�g�ōX0IcEA)���H��I�OH�I�T�fDH9���H��H���:98t�A���H�t$H�|$�����P���$
A�����HcPE�GA)�u>H��I�wH�H�L�f�H9���H��H���99:t�E�A��H��D�D$H���E��D�D$H���|$�eE���xI��A�^�L;t$8��L��1Ҿ
���1Ҿ
L��I��L;l$������H�|$1Ҿ
I������H�D$���fDH��D�D$H�c���|$D�D$H�F	�D$����E���9	D	��a����l$L��L�|$@A��D�MI�^E��u
�}��E�����H���H��H�t$H�ŋUHcF)…��R	H��H�MH�H�T��H9��L	H��H���290t�riA��9����D�d$A��1�PfDH�t$H�|$�	���H���!���H���f���|$��A��L��I�^L�|$@A��9�<A��E�&M��L�l$��fDH�t$H�|$���D�PE�������A������K��I��H�D$����f���*��Y��X
!fH~�fH~�H�� ��-@H�� H	�fD�\� H�T$�L$f/��;fW
�f/����D$Pf�T$�|$ �D$d������HcD$ H�8�‹D$�����D$@�����5�Y
u A�H�D$f/L$��D$ I�_A�1H�|$���M��tL������H������H�D$(�t$ ��0H�D$0H���c�H��[�f��|$�\$H��	ڈT$X��������\$8E1�����f.��D$P������D$8A��x���D��T$ H�7�ډփ������Y��H�5�f(�1��@��t	�Y����H���u�@���a���f(��X���D������|$XH�D$��E1�H�t$�F�D$X��H��|������ )‰����D�D$����������\$@����H�|$1Ҿ�����UH��H�D$Hc@)…���H��H�MH�H�T�H9��[H��H���9t��G�$���fDf(¸�V�f��t$H���$��H�����@�D$X��D$\�D$@�D$���Y�f�f.�����L��fD��
�f(��X�f/�w�\�f/����D$P��	������C��t$ �DL9��j�B�H��H�S�<9t���h���f(¸��H�������H�t$H���H���H��H�� ���6�����A��E��A��#�������H�D$E1�D$L���؉D$ ����L����(��I������H�D$H�� ��u����HcT$ f(�f��I�_H����H�փ��^��t$ �,�f��*���0A��Y��\�f.���D$@�����D$@�%���I�L�fDH9����Y�f�H��f(��^��,�f��*��P0�S��Y��\�f.�z������H�À{�0H�C�t��y�A����$����G�H���%I�|�D�C�H��H9�������Y�f��f��H���,��*ȃ�0�\�f.�z�������@�S��oL9��(�P�H��H�C���9t�|$P��t��t
���DH�|$�F��M���O���M���>���M9��5���L���#���(���fD�S�H��H�C���0t��A�9�9M��L�l$��������t$ �x����t$@������|$\���?����%���f�ɋ\$ �*��Yčs��Y��X
�fH~�fH~�H�� ��-@H�� H	��3�A��D$��D	�������.���f�H�D$E1��=���A�1�D$ ��A�}�H��I�uH�xH��IcEH�����H���_��H�D$����A�0L���C��D$ ���A��L��M��H�\$8L�|$@L�l$��A���S��U������L��1Ҿ
���I�ŋD$\���"�D$@����X�f/����A�H�������D$�������D$\�$�D��A��I�^��L��L�|$@A��9�B�����1��DO�E�&M��L�l$����H�ljl$A��L��L�|$@���A����E���1����l$L��A��L�|$@�uI�^����������������fD�D$\�\$ �D$@����f(���	�f.�H�������������������A��%�������D���f��D$����t��D$\����A������������h����������T$f��D$ I�Of(��^��,�f��*��P0A��Y��\�f.�{'�|$@�m���H�������<)‰��o���H������ff.�@��AWI��AVAUM��ATfI~�UHc�SH��H��(dH�%(H�D$1�fH~�H�� �����f(�fT
�f.
���f.���f.J�DL��H��4����L�d$�T$�Y�fH~�fI~�H��4-A��������}Lc�Hc��p��L��U�H�� ��
�b��N�0H�HE����1L9������fDH��EM��tI�mH�\$dH3%(�H��([]A\A]A^A_�D-�A����d����A����������<L��E��N�0�1H�� �
h���	�H�� I	�L�L$�D$�X��\�fH~�fA~�H�� ���)�A��H�H��L9��1������H���������4;@�q�D��A����	�L9�u؅������x0����
�H�Հ|(�0H�U�t�����D%���E���H�� I	�M�����A�����	�����nH�
��IH����1H��H��@�2@��u�M���|���I�U�s���A�����������A���i���0f�M���8���H�PI�U�+��������A������0���aH�
��NH���@�1H��H��@�2@��u��[����;���4������!�����H��H���-Infinity 0.0+0.0-0.0%lue%zd%sExponent underflowExponent overflowexponent overflowComputation results to 'NaN'Divide by zeroinvalid rounding mode (%li)argument must be positiveprecision too large.%zu:negative precisionsqrt of negative valuesqrt of 'NaN'(Not a Number)-0to_i**divF<=>>=<=remainderdivided by 0divmodniltruefalseto_strStringBigDecimal.exception_modeBigDecimal.rounding_modeBigDecimal.precision_limitBigDecimalnewinterpret_looselydouble_fig_loadsave_exception_modesave_rounding_modesave_limit3.1.8VERSIONBASEEXCEPTION_ALLEXCEPTION_NaNEXCEPTION_INFINITYEXCEPTION_UNDERFLOWEXCEPTION_OVERFLOWEXCEPTION_ZERODIVIDEROUND_MODEROUND_UPROUND_DOWNROUND_HALF_UPROUND_HALF_DOWNROUND_CEILINGROUND_FLOORROUND_HALF_EVENSIGN_NaNSIGN_POSITIVE_ZEROSIGN_NEGATIVE_ZEROSIGN_POSITIVE_FINITESIGN_NEGATIVE_FINITESIGN_POSITIVE_INFINITESIGN_NEGATIVE_INFINITE+0+InfinityNANprecsprecision_scalen_significant_digitsaddsubmulthashto_sto_intto_rsplit+-+@-@/quo%moduloclonedupto_fabssqrtfixroundfracfloorceilpower===eql?<nonzero?coerceinspectexponentsignnan?infinite?truncate_dumpBigMathexploghalf_uphalf_downhalf_evendefaultbankerceilinghalfprecision must be an Integer21E%ld can't be coerced into BigDecimalConversion from String to BigDecimal overflow (last few digits discarded).Computation results to 'Infinity'Computation results to '-Infinity'Computation results in 'NaN' (Not a Number)Computation results in 'Infinity'Computation results in '-Infinity'ERROR(VpDivd): space for remainder too small.second argument must be true or falsefirst argument for BigDecimal.mode invalidinvalid value for BigDecimal(): "%li"can't omit precision for a %li.BigDecimal to Float conversionBigDecimal#precs is deprecated and will be removed in the future; use BigDecimal#precision instead.Undefined operation in BigDecimalCmp()can't convert %s into BigDecimalUnable to make a BigDecimal from non-zero imaginary numbercan't convert %li into BigDecimalZero or negative precision for expComplex argument for BigMath.logZero or negative argument for logwrong argument type %li (expected scalar Numeric)a non-integral exponent for a negative baseload failed: invalid character in the marshaled string(��(�����t����������_�����(����������������������%��F%��F%��F%��F%��F%��@&��F%��&��F%��F%���%��F%��F%��F%��F%��F%���&���T���U���U���U���U���U���U���U��pU���U���U��V���U���U���U���U���U���U���X������������������������������������������������������U���U���V���������������������������V���������������U��tV���W���W���W���W���W���W���W���W���W���W���W���W���W���W���W���W���W��<V���U��<V���W���W���W���W���W���W���W���W���U���W���W���W���W��dU���W������������������������������������������������������W���W���T���������������������������W���������������U��+W������������������������������������U���S���S�������������������S����������U��XV��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��z��pS��pS���T��z��z��z��z��z��z��z��z���T��z��z��z��z��pS��V������������������������������������������������������S���R���R���������������������������R���������������S���U��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��XR��sS��XR��b��b��b��b��b��b��b��b��sS��b��b��b��b��sS���T������������������������������������������������������R���Q���Q���������������������������Q���������������R��(T��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��J��@Q��@Q��[R��J��J��J��J��J��J��J��J��[R��J��J��J��J��@Q��0U������������������������������������������������������Q���P���P���������������������������P���������������Q���S��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��(P��CQ��(P��2��2��2��2��2��2��2��2��CQ��2��2��2��2��CQ���v���w���w���w���w���w���z���w���w���w���w���w���w���w���w���w���w���z������њ��њ��њ��њ��њ��#���њ��X���њ����t���њ��њ��њ��њ��њ��������E���E���E���E���E�������E���,���E���E�������E���E���E���E���E������������&�.>�C��]r2<��������?e��A��C��������������X���X���X���X���X���X���X���X���@���@���@���@���@���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���@���X���X���X���X���X���X���X���X���X���X������X���0���}NaNInfinity��ؗ�Ҝ<3���#�I9=��D��2�����[%Co�d(h��7y�ACn����F��?�O8M20�Hw�Z<�s�Ou�?$@Y@@�@��@j�@��.A�cA�חAe��A _�B�vH7B��mB@�0�B�ļ�B4&�kC��7y�AC�؅W4vC�Ngm��C=�`�X�C@��x�DP����KD��M��D0123456789abcdef0123456789ABCDEF��7y�AC��?�?@�����A�5�����?5�5�?�5�����?�?aCoc���?��`�(��?�y�PD�?<�s�Ou$@@@`;L�(���h����x����������pb��hp���H���h���x�����������(�� H��4x��\���tH����������(�����D���xH������������<x��h��������������,8��X�������L	H�`	��x	X��	���	H��	H�8
���
8��
���
�������������`����tH����������
h��D
���p
����
X���
8
��|(�����H��4����8���(������(��$���@���\� ���H!����!����!����!���h"��8#��4x#��P�#��hX$����$����+��x,��<H.��h�.����2���85��088��|�9����;��H=��l�?���(F�� �F��L�H����I����O��|�O���P���P���(P���8P���HP����Q��D�R����T���V��4X���(Y���H\��$�_��phd���e����e��hh����j���xm��8�p��l�q���|��؉��@��������8����x���$ȯ��H(���\����p������������$���P8������������������8����|�������� ��h zRx�$�����FJw�?:*3$"D@����\���p���
��������N$����IDo
EZ
Fd
D���$���+A�A�G PID��XA�0(\��hA�F�O0z
AAFMAA\���q@p��B�K�B �A(�A0�GP�
0A(A BBBF����9Q�g$���`A�e
JD
L_0�<��]E�N�G P
DAAgDA(,h��UB�A�A �}
ABD(X���oE�A�D0X
AAAH�����B�E�E �B(�A0�D8�GpR
8A0A(B BBBJ����PA�a
N_(����nE�A�D0W
AAA(��kB�D�D �|
CBEHL���4\�����C�D xAAC��L ��a��H����mB�E�E �E(�D0�D8�DP 
8D0A(B BBBFH����F�D�B �B(�A0�A8�D`�
8F0A(B BBBG zRx�`������(���'d���x����A��
DVd����B�E�B �E(�A0�A8�D��
8A0A(B BBBA�
8F0A(B BBBE��c���]W,h�e@��SA�a
Nb8`��B�A�D �K
JBJK
ABJL�X��B�E�E �D(�D0�M
(A BBBH\
(D BBBJ`���B�B�B �A(�A0��
(A BBBBl
(A BBBEX
(A BBBI4PT�7B�D�D �Y
DBGACB�\��|��B�H�B �B(�I0�D8�G��
8A0A(B BBBA�
8C0A(B BBBF<
8A0C(B BBBA$zRx��������,���HX\��K�A�G �
AAHD
A�A�J~FAK��H ��l���B�B�B �E(�D0�D8�G��
8A0A(B BBBK�O�P�B�u�O�P�A�@�4(<�A�A�G N
DADQ
DAA0`��F�A�A �D0w
 AABI��A��
DD@����E�C�D {
IAG�
LACf
DAA(�����B�L�A �|AB8$	�����B�H�G �A(�D0z
(D ABBG4`	��F�D�A �e
ABEj
ABK��	l����B�G�B �B(�A0�D8�G��
8A0A(F BBBAs
8A0A(B BBBAy
8C0A(B BBBA�
8A0A(B BBBD<0
�����F�L�B �H(�G0��
(A BBBAHp
d����B�B�E �O(�F0�A8�G��
8A0A(B BBBK(�
���:A�A�G@~
AAGH�
���B�B�B �B(�D0�D8�G��
8A0A(B BBBK4P
��W`�j
FF0T�
���B�A�C �J�N
 AABF(�L��]A�I�N0�
AAH �����E�D0m
AI����\H F
B�@��\H F
B(���E�A�D`�
AAB<h��GMl
GF\���;Mmt���)H]����(HZ����zHc
EI �P���E�PP�
AA����2E�l
 ��2Hf(
H���E�M�DPz
AAA(H
����E�M�DP�
AAALt
0���F�G�B �B(�A0�A8�N��
8A0A(B BBBA(�
����E�M�DP�
AAA(�
4���E�M�DP
AAA(����E�M�DP
AAALHL���F�N�B �B(�A0�A8�D��
8A0A(B BBBHH����FF�N�B �E(�D0�A8�DPx
8A0A(B BBBJH�"���F�N�B �B(�D0�A8�D��
8A0A(B BBBIL0�$���F�E�A �D(�H`�
(A ABBH�
(A ABBJL�&���F�E�A �D(�H`�
(A ABBH�
(A ABBJL�t'���F�E�A �D(�H`�
(A ABBH�
(A ABBJd �(���F�E�B �B(�D0�A8�F�
8A0A(B BBBG�
8A0A(B BBBMH�+��'F�B�B �B(�A0�K8�N��
8A0A(B BBBD(�1���E�M�D0[
AAE �1���H �
G�
E$$5����E�H�L0�DA4L3���E�A�JP�
DANx
DAEp��3��5B�B�E �K(�C0�K`�
0A(A BBBF
0J(A BBBKI
0J(A BBBF zRx�`�����(�0d9��D`9��X\9��lX9���T9���P9��L�L9��F�J�A �A(�N`�
(A ABBEt
(L ABBEL�|:��F�B�D �D(�DPB
(G ABBNs
(A ABBGLHL;���F�J�A �A(�N`�
(A ABBD4
(L ABBEL��<��F�B�D �D(�DPB
(G ABBNs
(A ABBGL��=���F�J�A �A(�N`�
(A ABBD4
(L ABBEL8|?��F�B�D �D(�DPB
(G ABBNs
(A ABBGL�L@��F�G�B �E(�A0�A8�N��
8A0A(B BBBHH�C��UB�B�B �B(�A0�D8�D�{
8A0A(B BBBJH$0F���B�B�E �E(�D0�A8�N��
8A0A(B BBBF(p�J���E�D�GPW
AAG0�K���F�A�D �G`�
 AABAD��K��jF�B�E �A(�A0�Q�n
0A(A BBBJ zRx�������(��
HP�M��hF�B�B �B(�A0�A8�D�r
8A0A(B BBBBL��O���F�B�B �B(�A0�A8�D��
8A0A(B BBBC0�8R��RB�D�C �G@L
 AABHL dU��F�B�A �A(�F0R
(G ABBJv
(F ABBGLp4V��
F�B�B �B(�A0�G8�J�
8A0A(B BBBH0��_���
F�F�A �D0�
 AABDL��m��<
F�E�B �B(�A0�A8�J�)
8A0A(B BBBALD�z���F�B�B �B(�A0�A8�D��
8A0A(B BBBE� ���$H [(�8���>E�D�DP�
AAA �L���PE�G BA�x���R��s$0���5D0�
Kl@T����R�H�B �B(�A0�G8�d
0A(B BBBEK0A(B BBBD������H8������$������A�A�F �DA(�����\A�I�G@�
AAFD����B�E�B �B(�D0�A8�D@�8A0A(B BBBLL����hB�E�E �A(�E0�
(A BBBF@(A BBB�����E8���B�G�A �D(�G0H
(D ABBJ@�x���1B�D�E �A(�A0�F@c
0D(A BBBGH0t����B�E�I �B(�A0�D8�D@�
8D0A(B BBBFL|(����F�E�B �E(�A0�A8�G�
8A0A(B BBBBL�ر���F�F�B �B(�A0�A8�D�N
8A0A(B BBBBHh��VF�E�B �E(�F0�D8�G`
8A0A(B BBBFGNU��4P4�!7X6X	�T	�����WcV�7�4!jy���X%
�T�!��!���o`�
��!�	h��	���o���o���o�o���oș!�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'' '0'@'P'`'p'�'�'�'�'�'�'�'�'(( (0(@(P(`(p(�(�(�(�(�(�(�(�()) )0)@)P)`)p)�)�)�)�)�)�)�)�)** *0*@*P*`*p*�*�*�*�*�*�*�*�*++ +0+@+P+`+p+�+�+�+�+�+�+�+�+,, ,@�@�?`�!GA$3a1X%�TGA$3p1113�2�TGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�4�TGA+GLIBCXX_ASSERTIONSbigdecimal.so-3.4.4-3.el8.x86_64.debug��kx�7zXZ�ִF!t/��#g�]?�E�h=��ڊ�2N�`�@� ��(��^��\�B��O�2S��M	�W=�'����8g�wV�#}��Z�9 ��Y�f=q���gG�(�l�B����y�y���Ar�i�$F�D[6��ҿV`��M�V*θ�Eg��8	J���;[W�R�=�K4��l[�R�7S��H.�c��W=TN�ZW���)4��sۍ�~�"AK��v+���2��Y����d���EzʭJ��l�����:0j����Gg||f�x:�H;GYBy�f;''���Jq������?��qQ��E���~\<t�rW�L�d����T?��y�6j_>�+O޸�xsdp�"V�C�L��28*���H���Sd�6����mb�}�ޛ��e9�w_u�SR\���d����J�`����e�����>��S�SA�p�
�TΌ�>�W?@�2ݩ���h(@�+��̠����&����⃫�U�k�_�N�b�6�#�L
�6Y]e���x�pW6_�"�����۟�D����(�� xc�'j-erx>v@P�����dҔj)�X"�[�]��4�S���%̚��f�g�I%�0�1�pBr���%+I�4ԅ��t��z0-D��O���a�2���j���,��_)(�O6'�Y[�!M��k2+�JK���3.1��v�g��0�b`�h�*M?	EA�
���&��*=����%�CucR� �O7�KĹ(�)�
[��.��cޠ��ȼ�ɉ�S(Ŕ�6�fSW>Oʃ�ٚ{�RUR�H��sg;C����鈦�â��0�U��hS�M�R�B�� ս/�Y��@8��j�2I57���#6�dCm�����r�`X���	�tMڦ�WqC|�D��C���g
h
[m��RXϸ4زTőA���/tB�E�2����}�i���u��h3(�D�[�t�~���2�q�f+5�'�<�e�"p6�t��%Gv���D��B�z�T�xI��%�7�eU� �a
h��`��C�})g'�N�8�H�L�1YV�ϒ������PGIQ�h��4�S&_������^��ĤIY~�R�=
��R���nTt!��;��B�9/n�|����'��Z��=1�5A��i,bHv�R��y	���H!�so�
<`�nn��ҧ��v!�Ǫ��L�(>8������k`I��B���E��s�;{�V�C�y@�ž�6X���Zqx���ёڟP�b\�Z
Z;���5|!k��g���B���K�J��wc��f��`��LrWI��[�����X��ӟ�&��>���Xg��׳w�E!�M�I�S�ǭy��j#��w��4��L��4�*%8�0��S��[\��1|j��3%��y�#����L��ک|1`W���p�"d�ɹև�c\W%�-��S��l��B���`�A���(B��yH^X�d����G�e�L)L����IU|��������^���3�s��0��_�@�qM�ϖ��v��c���޼�k�X\,s�`&�	���Ό�����5�E0��!8��o��I��N�,�&�e�E���6H��,5����u}�*�p/��]��w�8�� ���U潽(��<Kl�>�����?+i62;�4.�J��m&��pr�{{keZ�\h2��� ��F�$�eg�6��/����!�{�.]]�Zne�)���b��x�Y��DM�Ъ�\lb]z�v�;G+>8!�ꆂ�!����&�1��M��|^;��Xѫ�Wb~��P�t�:k#�|h�E%{*u��

��(Z2��}u�1�	����>�}a%
Ნ�cI��^�����'R��X�j��~Ic�˲��y��k�F�_�d�ڊY�ƌg2D��0�}p���6	B�.�|��4Zk������!��r�	tj&�p��r_��(������7�K2�}�{�|1-��r˾R�w;	x�8�����M��%j65�����<�i'����i����q�T,���.��Ȝ����9�\ezr���e�0���FgO��%j}����Ϥ��X���U����䖹k�Ч�>�4���6��Ue��4�{�0Y����?�])�<,@��~�P%28A>N�֫Z�|����c�i��(m�$K�WR�ŭ"�s������wB���>e
o��.��
f���Fޫ�t��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``P(��`0�8���oE���opT���^Bhh�	hX%X%c�%�%�n0,0,�w�2�2�!}�T�T
��T�T� �XiXiL��m�mh��� ��!����!����!�� �ș!ș ��!���!�@�@�!@�0 �p�a@�H
��,��	��(PK*J[-lib64/gems/ruby/json-2.9.1/gem.build_completenu�[���PK*J[G��h�h�0lib64/gems/ruby/json-2.9.1/json/ext/generator.sonuȯ��ELF>� @h�@8	@@r@r �z�z �z 0 H{H{ H{   888$$ r r r  S�td r r r  P�td�c�c�c��Q�tdR�td�z�z �z 0GNU�Һ�%ֿg�Z3Y,<���#M�@$�MOPBE���|�qX�t�)�m�> C�O����-����a�Cp)�U� �G���"�;S��`
v"�"���$#�S]4�~"1������, �1F"d��
V�r8�� � �� ^Sh	__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_funcallv__stack_chk_failrb_hash_newrb_obj_classrb_class_namerb_hash_asetrb_str_new_staticrb_utf8_str_new_staticrb_warnrb_exc_new_strrb_intern2rb_ivar_setrb_exc_raiserb_vsprintfrb_check_typeddataruby_xfreerb_gc_locationrb_gc_mark_movablerb_call_superrb_data_typed_object_zallocrb_error_arityruby_xrealloc2ruby_xmalloc2memcpyrb_utf8_str_newrb_io_writerb_str_freezerb_obj_is_kind_ofrb_cHashrb_class_new_instancerb_string_value_ptrrb_float_valuerb_eArgErrorrb_raiserb_io_flushrb_rescuerb_unexpected_typerb_str_new_frozenrb_gc_writebarrierrb_hash_size_numrb_hash_foreachrb_hash_arefrb_enc_str_coderangerb_enc_get_indexrb_str_duprb_enc_associate_indexrb_respond_torb_cFloatrb_cArrayrb_cStringrb_cSymbolrb_convert_typerb_sym2strInit_generatorrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_global_variablerb_path2classrb_cObjectrb_define_class_underrb_define_alloc_funcrb_define_aliasrb_internrb_const_getrb_id2symrb_usascii_encindexrb_utf8_encindexrb_ascii8bit_encindexrb_define_methodrb_define_private_methodrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby34/lib64�ui	���ii
�z �!�z �!�z �z { `{ �'{ `'{ �! { p'� � � � � � � 2� A� C� D� L�} �} �} �} �} �} 	�} 
�} �} �} 
�} �} �} �} �} �} ~ ~ ~ ~  ~ (~ 0~ 8~ @~ H~  P~ !X~ "`~ #h~ $p~ %x~ &�~ '�~ (�~ )�~ *�~ +�~ ,�~ -�~ .�~ /�~ 0�~ 1�~ 3�~ 4�~ 5�~ 6�~ 7 8 9 : ;  <( =0 >8 ?@ @H BP DX E` Fh Gp Hx I� J� K��H��H�ag H��t��H����5�d �%�d ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA���������%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%}` D���%u` D���%m` D���%e` D���%]` D���%U` D���%M` D���%E` D���%=` D���%5` D���%-` D���%%` D���%` D���%` D���%
` D���%` D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%}_ D���%u_ D���%m_ D���%e_ D���%]_ D���%U_ D���%M_ D���%E_ D���%=_ D���%5_ D���%-_ D���%%_ D���%_ D���%_ D���%
_ D���%_ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D��S1�H��H�=O?�Z���H��[����H��������H���s���H�=�?1�L���"����f.�H�=�^ H��^ H9�tH�V^ H��t	�����H�=�^ H�5�^ H)�H��H��H��?H�H�tH�M^ H��t��fD�����=e^ u+UH�=2^ H��tH�=.Y ����d����=^ ]������w�������H�fD��H��H��H�OH�WH��H�?�P �H���f.���H��H�5a^ �dH�%(H�D$1�H��^ H��H�$���H�T$dH3%(uH������ff.�@��ATUH��SH��dH�%(H�D$1�����H��H����H�����H�5�] 1�1�H�=/^ I������L��H��H���1����H�=�9�p���H��H��H�5�] H�$����H�=F<H�����H��H��H�����H�T$dH3%(uH��H��[]A\��"���f�ATUH��H�=�] S���H��H��\ H��u'L�%
9��L�����H�t\ H��t�H��H��H�����H������SH��H��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$�H���$H�D$H�D$ �D$0H�D$�5���H��H�����f.���H��H�5�V �L���H�@8H��H�D�ff.���SH��H�5aV ����H�ڹH�H�����HD�H�P0�[�ff.���H��H�5!V ����H�@0H��H�D�ff.���SH��H�5�U ���H������@A�[�f.���H��H�5�U �|����xAH�H��H�Ѓ��f.���SH��H�5�U �L���H������@@�[�f.���H��H�5aU �����x@H�H��H�Ѓ��f.���H��H�51U ���H�x(H�H��H�Ѓ��f���SH��H�5U ���H������@C�[�f.���H��H�5�T ����xCH�H��H�Ѓ��f.���SH��H�5�T �\���H������@B�[�f.���H��H�5qT �,����xBH�H��H�Ѓ��f.���SH��H�5AT ���H�ڹH�H�����HD�H�P(�[�ff.���H��H�5T ���H�@(H��H�D�ff.���PXH��H�H�x ���uH��uH���L���H�t$�b���H�t$��ff.����G������SH��H�?����H�{H���H�{H�C���H�{H�C����H�{ H�C����H�C [����SH��H�?���H�{���H�{���H�{���H�{ [���ff.���S�H�� H�t$H�|$H�L$H�5tX dH�%(H�D$1�H��X H�D$���H�t$�H���9���H�T$dH3%(u	H�� H��[���ff.���H�uR H���H���H�P �@uH�P H�B(dH�B8H���@PX�1�H���^���ff.�����w�H�=�3����P�������w�H�=�3���P�������w�H�=i3���P���ATUH��S�?H��L�g t�L�����H�C H�k[]A\��H������H�S�H�C H��t�L��H����H�k[]A\�ff.��UH��SH��H��H�(uEH�} tfH�MH�UH��H)�H9�sEH��H�H��H)�H9�r�H9�s/H��H��[]�?����H��?w:��?�$���H9]v�H��[]��H�}��B�H�MH�E H�M�H�wH� ���H�}(H���[�H�E뭐H��H�=c21��>�H��H����f���H��H�5aP ��H�@ H��tH���fDH���f���H��H�51P ���H�@H��tH���fDH���f���H��H�5P ��H�@H��tH���fDH���O���ff.�@��H��H�5�O �|�H�@H��tH���fDH������ff.�@��H��H�5�O �<�H�H��tH����H������ff.�@��UH��SH��H��H��H��dH�%(H�D$1��E�H��t H�T$dH3%(H��ubH��[]�fDH��S H��H�0��H��t)H��H��H�$H�5�T ��H���f�H��T 1�1���H�����fDH��t;ATI��UH��SH��H�H�CH)�H9�w&H{ H��L����Hk[]A\�fD��H��H�����H�{���SL��4I���������H�� dH�%(H�D$1�H��H��H��?L�KH��H1�H)���M��H��M�A�I��H��H��H�H)�A�H��A�@H��u�H��yA�-M�A�H�SH�sL)�H)�����H�D$dH3%(uH�� [��	�f�UH��SH��(H�t$H�\$H��dH�%(H�D$1���H�T$H�\$H�RH��H��H�L$���H�D$dH3%(uH��([]���ff.���ATI��H��UH��SH��H�����m@1�1�H�5�R H���D$���@��u"�D$f(�fT
O5f.
W5wf.�zH��L��H��[]A\����H��H�5E.H��1��H����SH��H��H�5JR 1�1��i�H��[H������ff.�f���H�΃�tH�����@�fD��ATUH��SH9�tvI��H�5&L ���H�5L L��H�����H��tX�o�oHK�oP S �oX0[0H�P@H�S@H�H�H�PH�SH�PH�SH�PH�@ H�SH�C H��[]A\�H�{P H�5`-H�81��j�f.���H��P ATUH��SH��H��u'L�%C-��L�����H�dP H��t�H��H��1�1��0�H��H����DSH��H��H�{(H�wH� tA��H�{(H������H�{ H�C��uH��uIH�{(��H�C(H��[�fD����H�{ ��u�H��t�H�D$�j�H�D$H��[���S�밐AUI��H�5�J ATI��UH��SH��H��xdH�%(H��$h1��(�H������H��H�H8HDںf�D$4H�=,�H��H�\$XH�\$0HD�H�T$`�D$DH�T$PH�2���H�L$8H���D$0H�D$HH�$H�l$H�D$L�l$L�d$ �<�H�����H��$hdH3<%(uH��x[]A\A]���ff.���UH��H��SH��H�����H��H�5zI H���2�H��H��[]����S��w1H�ӸuH�H�=2O H�����H��1�[H��	H����������S��w1H�ӸuH�H�=�N H�����H��1�[H����H���E��������S��w1H�ӸuH�H�=�N H���j���H��1�[H�M���H�������`�����S��w1H�ӸuH�H�=rN H���*���H��1�[H�=H������� �����S��w1H�ӸuH�H�=2N H�����H��1�[H�mH����������SH��H�5H ��������H�H��~H�X8�[�H��uP��P�@��u�H���H��u�H�u1��@�[�ff.���ATUH��H�5�G SH���V�I��H�����uH�@ [�]A\��H���x���I�D$ H��tܨu�H��H���o�[�]A\�D��ATUH��H�5/G SH�����I��H�����uH�@[�]A\��H������I�D$H��tܨu�H��H����[�]A\�D��ATUH��H�5�F SH���v�I��H�����uH�@[�]A\��H�����I�D$H��tܨu�H��H����[�]A\�D��ATUH��H�5OF SH����I��H�����uH�@[�]A\��H���(���I�D$H��tܨu�H��H����[�]A\�D��ATUH��H�5�E SH����I��H�����uH�[�]A\�f�H�����I�$H��tܨu�H��H����[�]A\�fD��UH��S��H��H�����H��u�H�������u�H���H��u�H��H���H��[]����ff.�f�USH��H��H��u�H���u�D@��u�H���H��u�H��H���#�H��uH��[]��H��H��H��H�5�[]�����ATf�I��USH��H��dH�%(H��$�1�)�$�)�$�)D$`)D$pHDŽ$�HDŽ$�dHDŽ$�H�������D$4�D$DH������tH�\$X�H�l$`�f��H�l$`1�H���H�\$XHD�H��H�D$8H��$�H��H�D$PH�\$0H��H���H�=���D$0H�D$HH�$H�D$H�l$L�d$H�D$ ���H���W���H��$�dH3%(uOH��[]A\��H�l$`H��H���0���f�H��$��D$DD$4H������&�����������UH��H�5C SH��H�����H�����tH��H������H��H��[]�fD��SH��H��dH�%(H�D$1�H��u�H���"�f�@��u�H���H��u߾H�=�&���H��H�����H�=�#H������H��H��H�5H H�$�C�H�T$dH3%(uH��[������H9=�G SH��H����H9=�G ��H9=|G ��H9=gG ��H9=RG ��H9==G �7H9=(G �ZH9=G ��H9=�F �PH9=�F �sH9=�F �VH9=�F �IH9=�F uH������BC�H��H��u?H�C1�[��H��H��uOH�1�[��H��H����H�C��DH���0����fDH��H��u_H�C1�[��H�������fDH��H��uH�C �{���fDH�������fDH������BA�U����H������fDH��H�H�����HD�H�C(�����H������@���H������B@���H��H�H�����HD�H�C0�����H�������CB����@����H�H�������H�J8������AT1�UH��H�5�E S��H��1������x=I��u/�M��tA��u
I�$��H��t*�L���-�DH�u��tͺ1�������H�=�E �D�[L��]1�H�H��A\���ff.����AWAVI��AUATUH��SH��H��XH�dH�%(H�D$H1�H������H���/9ID t7D�%<D D9�t+;-D ��H��H��H�r�H�=��V�H��I�FI9F�BI�V H���"I�F��=�"= �K�}A�EB�����\uH�\$(L�CH�&L�-%�\uH�D$>LD�1�f�L$<f�T$Ff�t$BH� tL�CL�cE1�1�M��t]L�. H�
3 L�T$<L�
 A�H��A�T���ZH��I9�w�M9�sL��K�48L��L)��Z�f.�H�D$(H�D$0H�D$(I�FI9F�SI�V �"I�FH�D$HdH3%(�W
H��X[]A\A]A^A_��}BL�%$�\u�\uH�%H�\$(H�kLD�1�f�t$<H�D$>f�L$Ff�|$BH� tH�kL�k1�1�M���O���H�D$<L�='H�D$�4@<\��H�5��L���l�H��f�H��L9�tX�LH�ZA�<H��t�H9���<��~r<"��~H</u��H�5�L����H��H��L9�u�DH9������H)�L��H�H���������<
u4H�5c�L�����H���`���<	�<
��<���00H�t$L��f�T$>�ƒ���A���A��D$A�T$@��o�H�������H)�L��H�L$�N��D$<�
���H�5��L���-�H������D������u"A�|�@��@���@��@��t���;H��r����H�5^�L�����H���d���@H�5D�L����H���D���@H�5*�L����H���$���@H�5��L���l�H������@H����������I9��OL�{@���)��@��"�9~o@��/��@��\���D$�H�5�L�T$L�D$f�L��L�����L�D$�D$L�\H�
aL�
BL�T$�F���@@��
u@�D$�H�50L�T$L�D$�fD@��	�@��
��@���B����D$L����00L��L�D$��f�D$>L���L�T$�T$@�)�T$A��,�L�T$H�
�L��L�
�L�D$�D$����L���C�I�F���f.��L���#�I�F���f.�H���h��D��H�����H��I���r��=��L���?������A�\uL�kA�\uL��H�� H�\$(LD�E1�fD�L$<H�D$>fD�D$FfD�\$BH� tL�kH�KE1�1�H������H�D$<M��L��M��H�D$L��I��H���H��A�TH�kA�I�ׄ�uwI9�w�H��L��I��L9������L)�K�tH��H�����h���A�t@�����@��������I9��L�T$L�{�H�5,�D$L�D$���f�<�XL9���A���V�A��"�!��A��/�%�H�5�A��\��H��H�L$��I��H�L$L������fDH��K�48L��L�T$L)��D$L�D$���L�T$�D$L�
CH�
TL�AL�D$�h����= �.����5����H�5A��
�[���D��A���00���f�|$>H�t$��A��D$@C�;�D$A�#���f�A��	�YA��
�>A��u��H�5����D�Ճ�<t�Ճ�<tA���<AD�D��I�|��H������47��?	���A9��L9��fL�L�D$�����f��A��H�t$H���A���H�L$A��D$>�����A��D$?�����A��D$@C�;�D$A�P�L�D$H�L$L��L���P�����D$�H�5�L�T$L�D$�!����L�T$�L�ވD$L�D$����DL�κL��L�T$�D$L��L�D$���L�D$�D$L�
:L�?H�
DL�T$�0���fD�D$�H�5L�T$L�D$�����D$�H�5L�T$L�D$�q�����D$�H�5�L�T$L�D$�Q�������H��H�L$��f%��D$Dd��
f-$f��(��f����A�43@�t$>��f����A�43@�t$?�փ�A�f�����T$A��A�43f����@�t$@H�t$A��T$E�ƒ�f��A���A��D$G�T$F���L�D$H�L$L�L�����L)�H��K�tH�L$H���g�L��H�L$���H��H��K�t�D$L)�H�L$�:��D$H�L$L���h����H�5����H�5�����H�5{�����H�5m����H�5b���H�5]H��1��������I9�rWL�T$L�{�H�5A�D$L�D$���H��K�48L��L�T$L)��D$L�D$�n�L�T$�D$L�D$����H��K�48L��L�T$L)��D$L�D$�:�L�T$�D$L�D$�u���fD��AUI��ATI��UH��SH��H��(dH�%(H�D$1�H�B(H�R0H�JH�M0H��t	H9��>L�����H����H�CH9C�	H�S H�5�L���{H��H�CL�,$�D$�~��L�e0H�uM�l$�L�m0H��u`H�CH9C��H�S �}H�CH�D$dH3%(��H��([]A\A]�fD�H�5�H���$�H�m0�DH��� �H�uH��t�M��~�A��E1��
f�H�uH��A�����E9�u��^���fD�H����H�C�P���f.��H������H�C���H�U0H�=7 H�5;1��������ff.����AVAUATUH��SH��dH�%(H�D$1�H���H��H����H���I��I��������H�؃�H����A�|$C�NH�5R6 H��������I�EH���EH��H��H�$H�56 �J��H�����H�����@�H�5���H�D$dH3%(��H��[]A\A]A^�fDH�H�Q������wnH�
/Hc�H�>��D�H�5g�/��D�H�5Z���DH��H��H��b��n���DH�14 H;tt@A�|$C���H�5H��1����H�5)5 1�1�H���E��H����������H���H�����H��L��L��H�������fDH��L��L��H���������f�H��H���e����H��3 H;�X���H��L��L��H���������f.�H�y3 H;�(���H��L��L��H���o�k���f.�H�13 H;�����H��L��L��H�����;���f.������H���H�������H��H�����	����H�=4 ���H�5. H��I������I��I�E�oA$�oHAL$�oP AT$ �oX0A\$0H�@@I�D$@M�uI�4$M�eH��t@��uL������I�t$H��t@��uL�����I�t$H��t@��uL�����I�t$H��t@��uL�����I�t$ H��t@��uL���y��I�E�������H�$2 H����ff.����AWAVI��AUI��ATI��USH��H��(H�B(H�R0H�zH�T$H�|$I�}0H��t	H9��MI�$�� ��I�D$H����I�FI9F��I�V �[I�u I�FH����D$E1����D$�S�H����I9�}SM����I�uH����I�D$I�$ uI�D$ J��L��H��L��I���4���I�$�� u�I�D$I9�|�H�D$I�u I�E0H���;I�FI9F�
I�V �]I�FH��([]A\A]A^A_ÐH����H������L���H�5�,��I�m0H��([]A\A]A^A_��I�FI9FtfI�V �,I�u I�FH������L������I�uH���	����H�|$�����1��I�uL�������;l$u�����fD�L������I�F�DL������t����L�����I�F�A���f��L�����I�F����f.�L���H��I�uH�������H�D$H�������A��1��I�uL�������A9�u����I�U0H�=j0 H�5�1��T��@��AWH��I��AVAUATI��USH��L�*�RI�mI�]L�u0���SH�uH���nH�uH���yH����H�
UH�S�H������L�5�. H�HI9��H��H��L��H���x�H�uH���{H�CH9C�UH�S �:H�uH�CH���cL��H��L��H�����A�D$H��1�[]A\A]A^A_��u\H�����u1L�5. H�HI9�l���H�5&/ 1�1�H���B���G���D������H������L�5�- �%���H��H���H�����H��$��������<�����H�SH9S��H�K �,H�uH�CH�������H��H�$�4��H�$�}���M���~���D�t$E1��	DH�uH��H�$A�����D9t$H�$u��K���@�H�����H�C���f�H�������x���H��������H��H��L��H�������B���f.�H�<$�H�����H�SH�$����f���U�SH�����H�=%
����H�=�	����H�5
H��H��- ����H�5
H������H�=�- H������H�=�	�D��H�=e- H�f- ����H�=�	�%��H��H�5H�<- H��+ H����H�5���H��H�4- �?��H�=(- �H����H�5�	� ��H�=	- �����H����H�5�	����H��	H�=�, H������H�=�, �H���H�5i	�<��H�=�, �H�y��H�5U	���H�=�, 1�H�
��H�5I	���H�=z, �H���H�51	�b��H�=[, 1�H����H�5	�F��H�=?, �H����H�5	�'��H�= , 1�H���H�5����H�=, �H�8��H�5�����H�=�+ 1�H����H�5�����H�=�+ �H����H�5����H�=�+ 1�H�A��H�5����H�=�+ �H����H�5��v��H�=o+ 1�H�f��H�5��Z��H�=S+ �H���H�5n�;��H�=4+ 1�H����H�5_���H�=+ 1�H����H�5O���H�=�* �H�P��H�5=����H�=�* H�H�50���H�=�* H�H�5#���H�=�* H��H�5���H�=�* 1�H����H�5	�z��H�=s* 1�H����H�5��^��H�=W* �H�K��H�5��?��H�=8* 1�H����H�5��#��H�=* 1�H����H�5����H�=* �H�d��H�5�����H�=�) 1�H���H�5�����H�=�) �H����H�5����H�=�) 1�H�}��H�5u���H�=�) �H���H�5\�r��H�=k) 1�H����H�5G�V��H�=O) �H�3��H�5>�7��H�=0) �H����H�56���H�=) �H�e��H�5�	��H��H�5���H�5H��H����������H���H�5H�����H��H�5����������H�R��H�5�H�����H��H�5���������H����H�5�H���i��H��H�5���������H�~��H�5�H���?��H��H�5��`�������H���H�5XH�����H��H�5T�6���H�
��H�5OH��H�����H�����H����H�5
����H�����H�N��H�5���1�H��H�6��H�5���H��H�5����H����H�5H��H�f' �i��H��H�5���������H�~��H�5�H���?��H��H�5��`�������H�4��H�5XH�����H��H�5��6�������H����H�5.H������H�=�& �?��H�=�����H�=�H�����H��H���	��H�=�H��& ���H�=�H�p& ���H�=PH�U& �p��H�=CH�:& �]��H�=.H�& �J��H�="H�& �7��H�=H��% �$��H�=
H��% ���H�=�H��% ���H������H�=�H��% ����H�����H�=�H�m% ����H�����H�=�H�J% ���H�����H�=�H�'% ���H���j��H�=�H�% �w��H���O��H�=_H��$ �\��H���4��H�=NH��$ �A��H�����H�=!H��$ �&��H�����H�=H�x$ ���H������H�=GH�U$ ��H������H�=RH�2$ ����H�����H�=`H�$ ���H�����H��# �V����# �����# ���H�=���# H��[]�����H��H���C*@invalid_objectnullfalsetrue%li not allowed in JSONunallocated JSON::Statemessage\"\\\/\b\f\n\r\t0123456789abcdef\u2028\u2029nesting of %ld is too deep{}[]to_sStringjson/commonExtGeneratorJSON::GeneratorErrorJSON::NestingErrorfrom_stateinitialize_configureinitialize_copyindentindent=spacespace=space_beforespace_before=object_nlobject_nl=array_nlarray_nl=max_nestingmax_nesting=script_safescript_safe?script_safe=escape_slashescape_slash?escape_slash=strictstrict?strict=check_circular?allow_nan?allow_nan=ascii_only?ascii_only=depthdepth=buffer_initial_lengthbuffer_initial_length=_generateGeneratorMethodsObjectto_jsonHashArrayIntegerFloatincludedto_json_rawto_json_raw_objectExtendjson_createTrueClassFalseClassNilClassUTF_8Encodingnewunpackcreate_idextendencodeallow_nanascii_onlyjson/ext/generator/stateJSON/Generator/StateThe json gem extension was loaded with the stdlib ruby code. You should upgrade rubygems with `gem update --system`JSON.generate: UTF-8 string passed as BINARY, this will raise an encoding error in json 3.0source sequence is illegal/malformed utf-8(�0�8����8���0123456789��������������;�Qش�������(���lC���
T���\e���
H����X���������8������������������8����h�������,���D����`(��xX������������������X�����,���H���\(��xh�������(���H���h��������(��`��������(���X���������0��P���|(�������H�����8��T(��h����8���������� 	��H	H��d	����	����	���	H���	x�� 
���8
(��p
����
���
x�����PH��x����H������8��0X��p������(
X�d
8��
��h�XzRx�$ ���0FJw�?:*3$"D(��� \P���
pL���&H]�d���QH C
A0������F�A�D �D0�
 DABA�����E�U�(���_B�A�K �h����A�M�0����"HTH���5E�od8���"HT|P���&E�`�d���&HW�|���&E�`�����&HW�����'HX�����&E�`Խ��&HW0��&E�`L���&HWd���5E�o�<���"HT�T���5EAD �x���	�t���IE�C�����5E�k ̾��uE�I0]
DA$(���<Ol<P���AAKXT��� [l`��� [�l��� [4�x���dB�A�D �b
ABDpAB4������A�D�G {
DAL^
AAH8���DR@���.HY
GD<P���.HY
GD\`���1HY
GD|����1HY
GD�����1HX
HD(������E�D�M0q
AAG4�D���YG�D�D �gABG���H ���  l����A�U0�
AA(D����eA�D�D@T
AAA0p<���F�G�D �G0M
 GABE����#A�Z����,�����F�A�D �
ABA8��[M�A�D �($x���A�G H
AGg
AH8P����B�L�D �D(�J��
(A ABBA$����8E�K�G [DA����@E�g
O����@E�g
O���@E�g
O$��@E�g
O$H��@E�g
O@l��0E�jzRx�� /����P��5FJ4�x��kF�A�K �]
FBIbFB4����kF�A�K �]
FBIbFB4���kF�A�K �]
FBIbFB4L ��kF�A�K �]
FBIbFB4�X��jF�A�K �\
FBJaFB$����SE�D�I rIA0����hA�A�G }
AAHDNA4	���F�H�A �J�*
 AABI$P	\��:E�K�G ]DA x	t���E�G �
AA(�	��L��
HO
Ix
Hp�(�	����F�C�K �iDNL
T���F�B�E �B(�A0�D8�G��
8A0A(B BBBD$zRx��������,I���8�
x���F�E�D �D(�GP�
(A ABBG@�
����F�B�B �A(�D0�D@�
0A(A BBBG`����F�B�E �E(�D0�A8�G`
8A0A(B BBBBm
8A0A(B BBBIHx���~F�H�B �B(�D0�A8�DP�
8C0A(B BBBD(��h	E�F�D R	AAGNU��!�!�z `�'`'�!p'!����'H
h\�z �z ���o`0
�
=h} 0P�	���o���o���o�on���oH{ �������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��GA$3a1Hu\GA$3p1113� h\GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*cf_protection� � GA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*GOW*�
GA*FORTIFY� �!GA+GLIBCXX_ASSERTIONSGA*� � GA*GA*GA!generator.so-3.4.4-3.el8.x86_64.debug-��7zXZ�ִF!t/��'�]?�E�h=��ڊ�2N�?�� ��(��^��\�B����^i�t��آb�H��
G{���hA���D�<O����1PxҬ'p&�ʈ!�v��(-�dsCi�T��"PIǰ��U���N1�ia����x��I�mK�Pǡ��Mhw���hdu6c�x�]JmijɇaE�\�_�{c	�,�1��⌌� 1�ʋ��
����كST���9���{$�(�9|�(H�f�	�:@�/���Qm�����/ 
��\z�q��G�{�w%��?b�+'P�
�eѨmQH�[������o���4.Sx�>_9q|W-X|ӽ�	CTW�uT��6��-�C�����b�d~�&���$��(�MZ3�G �7�mTn�%ł迾�T��3�<\|�p{�|�p�kN������6u]"-k���Y2M)	d�T�c��<
q��
5A�>XH�����DW�O<��l민��^rƝŋ��UZ�cK�k��b2d���\t��픀�"�X69�+���d��I+���v��:04M�~�?b	A
#�4��*Ё�RbaM���1K��0FȄ��!H���W�=7��B�F�c37�"�ʹ�̺��� ,C�y2OJ��l�ޞ�0�l�ߚ��!� s���&jP�ۀ�H�E�،�/ʻd]i�EJ�~��M�qM9�:��G�][���_�V�_��$@�e�Y��l���n��I^noޗ�9��S>��t�Y>	��޻5�.�S��WNJ��&m��ep*�U�+gp�])�����g	��t��Z�Mu�i�F�
&zm���ػJy��v�_��̎	�"F��4�T���ճ^�Mlo�D�#[>�!���ߜ	+4HI*���7_x1n�<Ϧw�B��G�iN!�:U��"�
���7׹uM�!
$�5��1r̾)�=_�R�H�t�:�CޅG��}��L	kE��{����I�����a5a��\�����ޖ�j��'��mH>�\����l��k
�s�vJ}���`��5̨��9<dϠ�u��Q4�������Yvz㌐���-#C�d�{Ϡ~��
�F��Bw�Pw_T@e���D6uR8�>Ls���5d
/����	���yD�:آ�08�yM�L���S��xC���W�Cڦ|��Z��>�*ȵ��<<�i�(�Ң�k��I.|-��L(R�򤄕7݇�Y�O*?��;��z�ٔ�h��F�R��|q8H�]��|�?�C�RD1�����p�t��mܬ�~�1�j�W�+��0F�Щ��Uun��)�F<>*
�刷_wX
7�u
b�,�4>�8�Z�h<qI�۔�4�.��Z'a[��3Ve?�C��h��KE�p�D�ϟ4�I͉���F�*s�����Q�۳
�o�#�#��ŭ�@�i��/�қ�g.nQZ���	h�ކ]pn^wp��7�Y��[Lߡ��9�v2S��(!��1��{���m��{r'���*qY��<�EmT��LP��!����ď`�g,��a��'w]����MG�S�͎�G��b/��BG.�sPV��[����s�g_�'��QG������)O@Kꤻ�d���#�.�s5l,��5U��1�tI�v"٪�x�[ O��~T��K�x`D#D�i�
\���ݓ���
�:
b)���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���00
0
=8���onn�E���o@TPP�^B0hHHcpp0n�� w� � �;}h\h\
��\�\ ��c�c��0f0f�� r r ��z �z��z �z��z �zh �H{ H{ �h} h}��� ���`�P8�,d��@�"PK*J[�1@�@�-lib64/gems/ruby/json-2.9.1/json/ext/parser.sonuȯ��ELF>#@@�@8	@ v v PzPz Pz �� ({({ ({   888$$vvv  S�tdvvv  P�td�o�o�o��Q�tdR�tdPzPz Pz ��GNUwP&��Uu���S�_"�,Q�@ �QTBE���|ŷ|!�qX�0�tG� ��,�yEH;�kc#���V�h�S�S �" 0c�U"����r��"�"i]j`��9}���7>��, ���F"�
���U�� 1� � [�%� __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_fix2intmemmoveruby_malloc_size_overflow__ctype_b_locrb_sym2strmemchrrb_enc_interned_strrb_str_internmemcmprb_data_typed_object_zallocruby_xfreerb_gc_markstrnlenrb_path2classrb_enc_raiserb_funcallvrb_ary_entryrb_ary_push__stack_chk_failrb_check_typeddatarb_str_duprb_eTypeErrorrb_raiserb_unexpected_typerb_hash_size_numrb_hash_foreachrb_string_valuerb_enc_get_indexrb_eArgErrorrb_enc_associate_indexrb_error_arityruby_xrealloc2ruby_xmalloc2memcpyrb_utf8_str_newrb_io_writerb_ary_new_caparb_str_buf_newrb_str_set_lenrb_str_freezerb_obj_freeze_inlinerb_ary_new_from_valuesrb_hash_new_caparb_hash_bulk_insertrb_str_new_cstrrb_class_new_instancerb_cstr_to_dblrb_float_newrb_respond_torb_ll2inumrb_hash_arefrb_cstr2inumrb_class_namestrrchrrb_str_substrrb_path_to_classrb_sym2idrb_mKernelrb_category_warnInit_parserrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_cObjectrb_define_class_underrb_gc_register_mark_objectrb_define_alloc_funcrb_internrb_const_getrb_global_variablerb_id2symrb_ascii8bit_encindexrb_utf8_encindexrb_utf8_encodingrb_define_methodrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.3GLIBC_2.14GLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64ii
6���@ui	Kii
WPz �#Xz �#`z `z �z a�z �(�z P(�z p$�z �a�z �(�z �.�z �#� � � � $� E� F� H� I`} h} p} x} �} �} 	�} 
�} �} �} 
�} �} �} �} �} �} �} �} �} �} ~ ~ ~ ~  ~ (~ 0~ 8~ @~  H~ !P~ "X~ #`~ %h~ &p~ 'x~ (�~ )�~ *�~ +�~ ,�~ -�~ .�~ /�~ 0�~ 1�~ 2�~ 3�~ 4�~ 5�~ 6�~ 7�~ 8 9 : ; <  =( >0 ?8 @@ AH BP CX D` Gh Ip Jx K� L� M� N� O� P��H��H�	f H��t��H����5zc �%{c ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a�������%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%�^ D���%}^ D���%u^ D���%m^ D���%e^ D���%]^ D���%U^ D���%M^ D���%E^ D���%=^ D���%5^ D���%-^ D���%%^ D���%^ D���%^ D���%
^ D���%^ D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%�] D���%}] D���%u] D���%m] D���%e] D���%]] D���%U] D���%M] D���%E] D���%=] D���%5] D���%-] D���%%] D���%] D���%] D���%
] D���%] D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ D���%�\ DH�5�K�1�L�D$�X���L�D$�(-f.�@H�=�\ H��\ H9�tH�f\ H��t	�����H�=�\ H�5�\ H)�H��H��H��?H�H�tH�=\ H��t��fD�����=U\ u+UH�=*\ H��tH�=�V ����d����-\ ]������w������H�GH�� �ff.�@�H�
�I���x>�W���x2��	��W���x!��	��W���x��	��f.�����f.���H�G`H�Ð��H9=�[ ��H9=�[ ��H9=�[ ��H9=�[ ��H9=�[ ��H9=l[ �H9=W[ �)H9=B[ ��H9=-[ �/H9=[ �;H9=3[ u/H���AH�����Ƃ�����H��������1���1�H�����u5�B|1���H����������H��������1���H��H��H�T$�G���H�T$�B|1�H����H���������{���DH������HD�H�r0�]����H������HD�H�r �=����H������HD�H�r(�����H������HD�H�r8���H������HD�H�r@����f�������DATUS�)�H�H��H��=u4Hc�I��H��H��H��H�4H�|����L�d�[]A\�H�ƿ�,���ff.��AWAVAUATUSH��H��7�H��H��H�4$I������H�H��DP��E�'A����E1��f�D�kE9�7C�\%�Hc�M�t�L�������H�P)�H9����te�D�c�E9�~�L�4$H��\�L$L�����H��u{H��X L��H���A���H������A�?>I���L$1�L��L������É����H��L��[]A\A]A^A_�@H�pH� tH�pH�<$H���3������]���@E1��1�1��Z���f.���H�eR H�����g���H�P �@uH�P H�BPH���ff.����SH��H�h�CH��uH��uH��[�/�����#���H��[����f.���H�~5UH��S1�H��f.�H�EH�<�H������H9]�H��[]�f��ff.�@��UH��SH��H�?����H�} ����H�}(����H�}0���H�}8���H�}@���H�����������~%1�fDH��ݐH������Hc��H9��H��[]�ff.��UH��SH�� H��H��8dH�%(H�D$(1��'���H�� t#H�=�5�E���H�=VV H��H��H��1�����o�oK�D$ H��)$)L$�f���AUATUS�H��dH�%(H�D$1�H��$t&I��H�5�V H��I��1�1�L������H�����u#1�H�L$dH3%(��uIH��[]A\A]�@1�L����H��H��H�5<V H�$����H�����t�L��L���X������UH�5HP H��SH���+���H�E H��tH�xH�����H��H��[]���@H��[]�f���H��H�5�O ���H�8H��t	H���K���H��T H�5?4H�81���AUATUSH��(H�t$dH�%(H�D$1�H�?��H��H��H�GP�G|dH����H��t��t�H���!����H���H��u�H���l�H��tOH��H�5���H�����������t'H�{ u H�5�T H�=*U 1�1��a�H�C DL�d$L����H�H��H������H��tfD�-�S A9�ujL��H�l$��H�D$H�PH�SH�PH� u+H�SH�H�D$dH3%(��H��([]A\A]�DH�P��f�H������fD;�S tXH�YT H�5�S H��H�L$�H�D$��H���a�������#���H�S H�5U4H�81����H���h�D��H���
���H������H��R H�5`2H�81��������ATI��H�5PM UH��S��H����S���w#���uI�T$I�4$H�����H��[]A\ú������DAWAVAUATUSH��H��7�I��H��H�t$I������H�H��DP��E�}A����1��	��KA9�|-B�9E���Hc�I�l�H�EA)�I9�t{E��t\�D�{�A9�}�L�|$L��\L�����H���}H��Q L��L����A�}>H��1�E��H��L����É�����H��H��[]A\A]A^A_��H�uH�E tH�uH�|$L��L$��L$A���V����1��E1�1��W���f���H��tSH��H����H��[����ff.�@AUATI��UH��SH��H��H�WH�wH9�} H�GL�$�H�CH��[]A\A]���?t+H�,6H��H�����H�kH�SH�C��1�� H�L$H�}K �(�H�L$�@L�h uL�h H�E�L�)�oAE�oKAMH�CH�<I�}��H�sA�EI�EH��H��H��=u&H��uI�UL���'���H�sH����I�E�߿���@ATUH��S�?H��L�g t�L����H�C H�k[]A\��H���s�H�S�H�C H��t�L��H����H�k[]A\�ff.��UH��SH��H��H�(uEH�} tfH�MH�UH��H)�H9�sEH��H�H��H)�H9�r�H9�s/H��H��[]�?����H��?w:��?�$���H9]v�H��[]��H�}���H�MH�E H�M�H�wH� ��H�}(H���{�H�E뭐H��t;ATI��UH��SH��H�H�CH)�H9�w&H{ H��L����Hk[]A\�fD��H��H�����H�{���AWI��AVI��AUATUSH��H��hdH�%(H�D$X1�H�wH9��L1�>"��A���t_M�`@I�����tR�� �I�6I��H�����H�5���L��L�����L�����H���������	u
H�C�@1�H�L$XdH3%(��	H��h[]A\A]A^A_�I��I��L9��@A�E<"��<\uOM�}L9���A�E<u�5<��M�oL9��
A�G<"�[<\t�M����f.�<w�L��1���f�I�H�5�M H�L$HH��H�T$H��?�I�� ��������fDH��L��M���H)�A�����A���A�@x����t+I���H��H��L�D$�d�L�D$H��u.f.�H��L H��H��L�D$�9�H����L�D$I�L��A����v���M�`@I������e����	����D����H���I����H�L H��H��L�D$���L�D$��H��M��H���I#��I)�A���H�D$ �2�D$L��\H��L�D$��L�D$H��H���L��L�D$���5�K H��H�D$�l�L�\$L�D$I�CI� H�D$��H�L$I9���L�t$8I��I��L��L�|$L�\$(L�D$0��L9��L��}\L�mu�L9�vI��M)���M��E<f�� <\��<b�p<"�XM���<r�x��<t��<uu�H�D$H��I9��yH�}��A��%�=���H�D$L�mH��I9��8�}\�H�=#+���}u��H�}L�m�E�D��A��
%���E�҃�����A	�A	�D�оH�|$T�����D$TD�����?�Ȁ�D$UD��A��?��A�ʀ��?D�T$W�Ȁ�D$V�)D<n�����H�=?)��f��H�=4)A��t1��ƒ��A�D9�r�M�uI�M���b���f.��H�=�(�f��H�=�(�f��H�=�(�f��H�=�(�f�L��L��L�����,���D�H�=�(�c����L��L�\$(M��L�D$0I��L��L�t$8I9�vI)��WL�H+L$L��L�D$H��L�\$����L$L�\$L�D$���H�|$ ��M�L���7���DA�@xA����D$�J�D$�������I���L��H��L�D$�����D$L�D$I��M��u����DI�MH9���A�E<@����0<	��I�MH9���A�E<@����0<	�yI�MH9���A�E<@����0<	�TM�}L9��^A�E<@�w��0<	�?���L��1��a���f�I�CH�D$�6���f�L�mA����D�T$T�H�|$T���fDI���H��H��L�D$��L�D$H����������fD�T$��t0I���L��H��L�D$����D$L�D$I�����@L��\H��L�D$����D$L�D$H��H���6���H��F L��H��L�D$�{�L�D$I��L��L�D$�C�L�D$I�����fD<F�m�����a<�b���H��1��2���<F�r�����a<�g�����<F������a<�t�����<F������a<������|����H��H��L�D$�0�L�D$���fDA�����A�����A����������D$T?�H�|$T����DL��H�F L�D$��1�1�H��H�����L�D$I�����H��L��H��L�D$(L�\$���L�D$(L�\$H������fDH�ӽ����H�ӽ����D��A��?���A�ʀH�|$T��D�T$U�D$T�i���H�|$ u�D$t~H��D L��H��L�D$���t$L�D$I�Å��;����.���H�ӽ���D�оH�|$T�����D$TD��A��?��A�ʀ��?D�T$V�Ȁ�D$U���I�����L��H��L�D$��L�D$I������H�ӽ�%���H�ӽ����H�ӽ����H�ӽ����Z�L��H�=�%��L��H�=�%�|�ff.��AWAVI��AUATI��USH��hdH�%(H�D$X1�H9�tGH��H��H��%�M�A�<n���Hc�H�>��fDH�EH9�t�}n��D��A���u21�H�t$XdH34%(H����H��h[]A\A]A^A_�f.�I�<$����DH��DH��H9��a���뙃�0��	w��H�EH9���	H�5�"H���������A�����H�5�C H�]	M���M���I�4$��DA�F|E�HA9�������H�=�C D��H�5*"1��?��H�EH9�����}r���H�EH9������}u����H�EH9�������}e�����H�]I�$M����M����N�H�EH9��{����}u�q���H�EH9��d����}l�Z���H�EH9��M����}l�C���H�]I�$M����M������H�EH9������M��*tZ��/t�����8
�7���H��H9�u�����f�H��H�hH9�������@<*t�</����H��DH��H9�������8*u���@A�F|A�FxE�h���{A9��rH�=�A D��H�5� 1����f.�H�EH9��C����}a�9���H�EH9��,����}l�"���H�EH9������}s����H�EH9�������}e��I�$H�]M���1�M����H�EH9������}a�����H�EH9�������}N�����A�����H�5�@ H�]M���M���I�4$�4DH��L��H��L����M���M���H��H���I�4$A�����I���L��L�����,���@��
�v������^��������I���H�AH�D$H9���}[��H��H�5#L�zL9����z�G�<n����Hc�H�>���0@��	��DH�D$8H�D$H�L$E��H��L��H�D$8L�����H����H��L�@L9���f�P��,�G�� �/� ��/�o��]�NI���H�YH+\$I�V0H����H�|$H�AL�D$H�4�H���o�L�D$I�$I���H)XL��I�4$M���A�nxM���H���v����A���H���l���H������I�4$�[���fDI���M���M���H��H�@H�D$H9�t:L�BL9�t1�B<"�e��<
t< ��L��L�BL9�u��I�4$�o������
�7L������A���tGM�xL9�tfA�@<��<	�_<
��L��H�=����
����~�M��M�xL9�t�A�P�B�<nw�H�=�"��Hc�H�>��fD</�(<}�I���I�V(H�XH+\$H����H��L�D$H����H��H��I���H�L$H�PH�@H)�H�4�H���
��H�L$L�D$I���I�$H)XA����'L��I�4$H��HD�������	f�������M����L�@L9�t*�@<*tO</t��f�A�8
�����I��L9�u�I�����DI��L9�t�A�<*t�</�X����I��L9�t�A�8*u����<
�hM���B����H�EH9��#����}f����H�EH9������}i����H�EH9�������}n���H�EH9������}i����H�EH9������}t�����H�EH9�������}y�����A�����H�5�; H�]M���M���I�4$�5���fDI�nM���M���H9��-����E<-�<0���Pπ��
���I��I��L9���A���.�C	�
��Et	��e�I�@H�D$H9�����A�@<+t<-uI�@H�D$H9������A�@��0<	�����H�D$H�D$H9�t"�<E�����<e�x���<.���0<	v�H�D$I�^8H��H����H�T$I�FXI�~HH�|$H)���I�FXI9F`��
I�Vh�I�~hI�FXH��������H�|$H��H�L$8�H�D$8����I�$H��H�D$H��L�@�H��H��IE����@��
�:���@������L�����M��1����L�zL9�����B<*tC</����I��L9�����A�?
u��I��L9������A�<*t�</t��I��L9������A�?*u���M�xL9�����A�@<*tE</�n���DI��L9��\���A�?
u��n���I��L9��D���A�<*t�</�Q���I��L9��$���A�?*u���L��H��L��L��AƆ�D�L$���AƆ�D�L$H�������I�4$L��L��H�D$I���D�L$��H�D$D�L$L�GH��H�PH9��J����H�� ������/����:�uH�rH9������J�A�<n�f��Ic�L�>���0��	���E��L��H��L��D�L$��D�L$H������H��L�@L9�������P������	����
�����A���tL��L�@L9�u��y���I��fDI��L9��c���A�<,t2��<
t�< t݃�	<v��A���f�<
t��	<�)���L��I��L9������B< t�~�<"�G���</u�L�BL9�������B<*t6</t���A�8
t�I��L9�u�����I��L9�����A�<*t�</t�I��L9������A�8*u��Ҁ�
������������H���d���1�1�L�D$���L�D$H�D$ I���H�PH�HH)�H��L��~xH�C�H��H��H��L�H�D$(H�D$@H�D$DI�I�BL�D$H�L$H�|$ L�T$H�5f6 H�T$@�H�D$H����L�T$L�D$I��L9T$(u�I���H�t$ I�4$��H�rH9������B<*t<</t����>
����H��H9�u����H��H9�������<*t�</���H��H9��r����>*u�����
��H��������2������D��	<�"����0����L�BL9������B<*tK</t�
���f�A�8
���I��L9�u����I��L9�����A�<*t�</�����I��L9������A�8*u���< �X���</�I�Pހ�Y�H�=5��Hc�H�>��I���M��H�YH+\$�z���H��L�BL9�t1�R��.������E�d�����e�[�����0��	�+���L��H)�H���E<-�H��1�L9�sR1��D���0H��H��H�H�<HI9�w�@��tH��H�@H��H���H�tI�4$I�@����1�����	���E�������H�PH9�������@<*tC</t�z���f��:
����H��H9�u��a���H��H9��T����<*t�</���DH��H9��3����:*u���@��������H��I�$�+���DL�EL9�����U��0����1����������-����0��	����������-����{�����
������+�`�� ������f.�H�5�2 H���������I�F8H��2 I�vH�D$����1�1�L�D$����L�D$I��I���H�PH�HH)�H��~`L�<�H�H��H�D$H�D$@H�D$f�I�H�L$�L��H�592 L�D$I��H�D$@����L;|$L�D$u�I���M�,$��</��<}�j��`���I�PH9����A�@��0<	���L�BL9����B<E�����<e�����<.����0<	��L����M�xL9����A�@<*��</���I��L9����A�?
u�����L�D$�K��L�D$H���B������g���H�UI9����E�����I�@H9����A�P��*�f��/t��8
�9���H��H9�u���I�~(I�v L�D$I�<$�tH�t$@H�L$@�H�5�0 �i��L�D$H�����H�D$@H�D$@�H�5�0 H�=�0 H��L�D$H�D$�+��H�5�0 1�1�H��H�����L�D$H������A�A�������I�$H�L$�H��H�5^0 L�D$H�D$@����L�D$I�$��I�~8H�5�/ ��������I�F8H��/ I�vH�D$�H���H�|$����I�FX�\������I�GH9���A�*I��u�I��L9����A�<*�1t���fD��,����/�"��}�%����L��������L�D$���I�~8H��t@��uH���H���ZH�D$I�v1���I�FXI�^HH��H��L�D$���I�FXI9F`L�D$��I�FXI�Vh�
L�D$�I�~hI�FX�{��L�D$H��I�$���A����Q��6���I���f�A�8*tI��L9�u��D�I��L9��7�A�<*t�</����������1��7���</������A�������L�@L9�����@<*~ </���I��L9����A�8
u��?������L��I��L9�����x*u�I��L9����A�<*��t�������H��L�@H� tL�@�:L��L�D$���H����L�D$H�P�1�H��H�D$ L)�L�D$�d��H�����H�L$ L�D$H��H�SH�D$H�qL)�H)��7��H���o��H������I�vH�����0��	����;��H�����L�D$�$���H�T, H��H�H�D$�I����</��������H�\$�/�<,���L�D$���0f��	�����H��H�=����<,����X���AT�SUSH���dH�%(H��$�1�H�|$0L�d$0H�D$�H�L������H�\$8H�l$@H��$�H��$�H��$�f�H��H�D$(H�H�D$D$HDŽ$��D$xHDŽ$��D$$�D$H�D$�H��$�H9��z��A�<n���Hc�H�>���0��	��E1�H�L$H��H��L����H���9H�����
t��	����H��H�XH9����P�� t�/u�H�XH9����@<*tt</��1�E1�H��$�H��������H��$�dH34%(H�D$��H���[]A\�fDH��H9��{�<*t�</�]���@H��H9���;*u���@�;
�8���H��H9�u�A�H��$�H������A��	��H9���!��P���H��H��H9������A��H9�A�
�������H�CH9����K��*tR��/tH�����D�8
t�H��H9�u�H��A�	�\���H��H�XH9����@<*t�</�l���H�ؐH��H9�t}�8*u��π�
�������F���E1�����fDA����DH��$�H���i���A�
���H��H�=��E��DA����A����H��A����A����H��A�������ff.���AUH�5�" ATUSH��HdH�%(H��$81�H�D$���H�8�:I��H�@Pf�H�;I�\$I�l$�@HH��$0I�D$hH�D$0H�D$(H�H�D$D$I�D$`�D$$�D$H�D$�I��$�H9����A�<n���Hc�H�>���0��	�
�E1�H�L$H��H��L���z�H���AH�����
t��	����H��H�XH9����P�� t�/u�H�XH9����@<*tt</��1�E1�I��$�H��������H��$8dH34%(H�D$��H��H[]A\A]�@H��H9����<*t�</�]���@H��H9��#�;*u���@�;
�8���H��H9�u�A�I��$�H������A��	��H9���!��P���H��H��H9������A���H9�A�
�������H�CH9����K��*tR��/tH������D�8
t�H��H9�u�H��A�	�T���H��H�XH9����@<*t�</�d���H�ؐH��H9�t}�8*u��π�
�����>���E1�����fDA����DI��$�H���a���A�
���H��H�=����DA����A����H��A����A����H��A����H��$ H�5GH�81�������fD��S��a��H�=����H�=��	��H�5�H��H��% ���H�T$ H�5�H��H��*��H�=iH�t% �g��H��H�]% ���H�=Y% H�5j�����H�=F% �����H�b��H�54�f��H�='% 1�H�����H�5#�J��H�=% 1�H����H�5
�.��H�=�$ �H����H�5����H�=����H�=�$ H���4��H��H��$ �E��H�=v����H�=�$ H���
��H��H�h$ ���H�=����H�=x$ H������H��H�6$ ����H�=B$ ����H�=q�y��H�=kH���*��H��H�����H�=ZH�	$ �L��H�����H�=KH�n# �1��H������H�=:H�K# ���H������H�=4H�(# ���H�����H�=)H�# ����H�����H�=H��" ����H���}��H�=H��" ���H���b��H�=�H��" ���H���G��H�=�H�y" �t��H���,��H�=�H�V" �Y��H�����H�=�H�3" �>��H�����H�=�H�" �#��H�=�H��" ���H�=�H��" ���H�=�H�" ���H�=�����H�=�H�H" ����H�=�H�=" ���H�=}H�" ���H�=mH��! ���H�=]H��! ����H�=NH��! �l���H�=GH��! �Y���H�=7H��! �F���H�! �
���! 迿���	! �D���[H��  ���H��H���JSON::ParserErroruninitialized instancealready initialized instance
\"	
nesting of %d is too deepunexpected token at '%s'-Infinityjson/commonJSONExtJSON::NestingErrorinitializeparsesourceNaNMinusInfinityUTF_8Encodingmax_nestingallow_nanallow_trailing_commasymbolize_namesfreezecreate_additionscreate_idobject_classarray_classdecimal_classmatch_stringjson_creatable?json_createchrmatchdeep_const_get[]=[]<<newtry_convert-@encodeJSON/Parseroptions :symbolize_names and :create_additions cannot be  used in conjunctionincomplete unicode character escape sequence at '%s'incomplete surrogate pair at '%s'JSON::Ext::Parser/rvalue_stack���X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X�����X����X��X��X��X��X��X��X��X��X��X�����X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X��X�����X��X��X��X��X��X��X��X��X��X��X��X�����X��X��X��X��X��X��X��X��X��X�� ��X��X��X��X��X��X��X�����X��X��X��X��X��x��X��X��X��X��X��X��@��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������F��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��F��8��j��8��8��8��8��8��8��8��8��8��8��j��8����8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��j��8��8��8��8��j��8��8��8��8��8��8��8��8��8��8��8��8��j��8��8��8��8��8��8��8��8��8��8��j��8��8��8��8��8��8��8��j��8��8��8��8��8��j��8��8��8��8��8��8��j����q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q���q�,�q�q�q�q�q�q�q�q�q�q�,�q�D�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�q�,�q�q�q�q�,�q�q�q�q�q�q�q�q�q�q�q�q�,�q�q�q�q�q�q�q�q�q�q�,�q�q�q�q�q�q�q�,�q�q�q�q�q�,�q�q�q�q�q�q�,������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x���x���x�x�x�x�x�x�x�x�x�x���x��x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x�x���x�x�x�x���x�x�x�x�x�x�x�x�x�x�x�x���x�x�x�x�x�x�x�x�x�x���x�x�x�x�x�x�x���x�x�x�x�x���x�x�x�x�x�x�����L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L���L�\�L�L�L�L�L�L�L�L�L�L�\�L���L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�\�L�L�L�L�\�L�L�L�L�L�L�L�L�L�L�L�L�\�L�L�L�L�L�L�L�L�L�L�\�L�L�L�L�L�L�L�\�L�L�L�L�L�\�L�L�L�L�L�L�\�������������������������������������������������	�������

��������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������JSON.load implicit support for `create_additions: true` is deprecated and will be removed in 3.0, use JSON.unsafe_load or explicitly pass `create_additions: true`;�L�����<|����l���T����h��|��������L��������$̸��<���\\�������\�������\���@����\����������,���\���,|���h����������|��\l������\zRx�$0����FJw�?:*3$"D�����\���p���V�h����d���� [(�8���TB�A�A �
ABAH�l���6B�B�B �B(�A0�A8�DP�
8D0A(B BBBE,`���4OdD����6E�W
LI(d����AL�D�F eAAC��$�̶���E�D�D tAA�4���nA�D�OP8������F�B�A �A(�I@R
(A ABBE0����GA�K�D b
DAIDAAH���=HX
E8d8����B�B�A �A(�DP2
(A ABBF(�����[F�K�D �q
ABAH�0���.B�B�B �B(�A0�A8�DP�
8D0A(B BBBI���!J�P�84(���B�B�D �D(�G@^
(A ABBI4p���dB�A�D �b
ABDpAB4�D����A�D�G {
DAL^
AAH4�̼��YG�D�D �gABG���H ���H�d
B�E�E �B(�A0�A8�G��
8A0A(B BBBDHd���B�B�E �B(�D0�A8�D��
8A0A(B BBBK$zRx��������,����"4�����F�F�A �G��
 AABG<$���F�I�A �A(�G��
(A ABBEd8��E��GNU��#�#`z a�(P(p$�a�(�.�#��a�
_Pz Xz ���o`�
�
wH} ���	���o���o����o�o���o({ �� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`GA$3a1�%_GA$3p1113#_GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�#_GA+GLIBCXX_ASSERTIONSparser.so-3.4.4-3.el8.x86_64.debug_���7zXZ�ִF!t/��~]?�E�h=��ڊ�2N�t���h?��!Upv��W(BzÑ'Deh]�E�03j:��#3��a%ŴD��q=*����H�|g�4z�W?"L����Ie�<��
�~�su��vex��d�"����bR�c��O�2���8�yT+~��'��0��V`]7�F]|���(����g"�O��b�#]�B�r�[���eA�Z�H���ֱ��^T��p�	�#��/�W�����	%rh�>t��BelH��J�|��Ζi���8�6.�`����x
BJW�e��.m�3��������F�
_�<�d�(�o��'�݌c�-���A�ƊGeng�f,�|[[Cg��i�F��zd>�Q �1�����.2�K$���İr��\[-U�(v�?���臕��5��ָ����NC�2���fy+G�͐gd�ݴ.�"�.r[-�e���%Ͱ�bri*ڙp'~YBaH��7����~ӕ��f�
gVB�x� zW����Aӆa��`�IA8���D�ޔG��.��Z��%�K�c��nX��?![<h���ڣ�S�������q�(���{����a+�52��1A���q�fN�
�p�o��`濩�-��'�<n^��	�qH>�Hy+V�)�q��V���K�9���ld'U�?o�X���_.@k宿�$2$F��.n�x��'��d_|"���@���Ÿ���&��ə?ESÌkm&>�@�b�u���j�+�)��- ?�z�[S��#&ا-?�Qڊ�A�Δ6U
���P^����������?�gG�|X+�]my��,!���2��E<i[g
a�E�j*��yaS�B��'�%�FNdO6�K�n�9���R`��
�_l*�6zO��N�:`J
�tI�*��j3���/ְË���r�&h��f����a��G?�'rC[;����]q������S�H�"[��H����KA�� ��Lj�鿆���w��YX�=
���g`��+<�_�K�=K�$��}"�*8�B�k/\"
�c�����߈� }'�6��@���u�qF^�]r��%��L��遤�mmͤ�0�\ܓ*̾E��>�N�)1�洑�u}R2�mʶi�	�$����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0�
�
w8���o�E���o��PT�^B���h��c���npp�w##<}__
�@_@_C ��o�o���p�p��vv �Pz Pz�Xz Xz�`z `z� �({ ({ �H} H}��� ���`�H0�(X���"PK*J[
Q�`?`?lib64/ruby/rbconfig/sizeof.sonuȯ��ELF>P	@`8@8	@X'X' 8-8- 8- �� P-P- P-   888$$8'8'8'  S�td8'8'8'  P�td`&`&`&,,Q�tdR�td8-8- 8- ��GNU��"����!Ԁ
Aq�@�l��L 
BE��h)��|���qX� � ����m, F"~a-0 U
�@0 ��40 __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_sizeofrb_hash_newrb_define_modulerb_define_constrb_usascii_str_new_staticrb_hash_asetrb_obj_freeze_inlineInit_limitsrb_ull2inumrb_ll2inumrb_float_newlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64#ui	E8- 
@- �	H- H- �/ �/ �/ 
�/ �/ �/ �/ �/ �/ �/ �/ �/ 	�/ �/ �/ 
��H��H�( H��t��H����5�' �%�' ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A�������%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& DH�=�& H��& H9�tH�v& H��t	�����H�=y& H�5r& H)�H��H��H��?H�H�tH�E& H��t��fD�����=5& u+UH�="& H��tH�=f# �9����d����
& ]������w������S�&���H�=�H�����H��H�5�H������H�=�����	H��H���d����H�=��s����H��H���C����H�=��R����H��H���"����	H�=`�1����H��H�������H�=I�����!H��H������H�=1����H��H������H�=�����H��H������H�=�����	H��H���}����H�=�����H��H���\����H�=��k����H��H���;����H�=��J����H��H�������H�=��)����H��H������	H�=k�����H��H�������H�=T����H��H������H�=:�����H��H������H�=����H��H���u����H�=����H��H���T����H�=��c����H��H���3����H�=��B����	H��H�������H�=��!����	H��H�����H�=������H��H�������H�=l�����H��H������H�=U����!H��H������	H�=3����!H��H���m����H�=�|����H��H���L����	H�=��[����H��H���+����H�=��:����H��H���
����H�=������H��H������
H�=�����H��H�������
H�=������	H��H������
H�=�����H��H������H�=~����H��H���e����H�=i�t����H��H���D����H�=U�S����H��H���#����H�=A�2����H��H�������H�=-�����H��H������H�=���	H��H������H�=�����	H��H������H�=�����	H��H���~����	H�=�����H��H���]����H�=��l����H��H���<����H�=��K����H��H�������H�=��*����!H��H������H�=o�	����H��H�������H�=b����!H��H������H�=<�����AH��H������H�=�����!H��H���v����
H�=����!H��H���U����
H�=��d����	H��H���4����
H�=��C����H��H�������H�=��"����!H��H�����	H�=�����H�ߺ!H������H������[�����USH���1���H�=�H����H��H�5tH�������
H�=g���H��H��������H���j����
H�=L�y���H��H��H���D����H�=2�S�����H��H���#����H�=�2���H�����H��H�������	H�=�������H��H�������	H�=����H�����H��H������	H�=�������H��H������	H�=���������H��H���z����	H�=����H��H�����H���T����H�=}�c������H��H���3����H�=R�B���H����H��H�������	H�=8�������H��H������H�=*��������H��H�������H�=����H��H�����H������H�=����H��H�����H�����H������������H�=�H������H��H��H���Q���H���"����H�=�H���N���H��H��H��� ���H������T����	H�=WH��� ���H��H��H�����H���������#����	H�=;H�����H��H��H����H����	H�=�H����H��H��H����H��������
H�=�H����H��H��H���b�H�=��q��H��H���A�H�=��P�H�����H��H����	H�=��-��H��H����H�=����H��H�����H�=Q���H�����H��H����H�==����H��H����
H�=;���H��H���w�
H�=��H�����H��H���T�H�=�
�c��H��H���3�	H�=�
�B���H��H����	H�=�
�!�H����H��H�����
H�=�
����H��H�����H�=�
�����H��H����H�=s
��H����H��H����H�=`
����H��H���i�H����������H�=Q
H���f�H��H��H���8�H���	�H�=
H���5�H��H��H����H������;�H�=�H����H��H��H�����	H�=��������H��H����	H�=����H��H�����H����
H�=���H��H�����H���l�H�=��{�����H��H���K�H�=f�Z�H��H�����H���%�H�=P�4�H��H�����H����H���������0�H�=<H����H��H��H�����H����H�=�H�����H��H��H����H��������H�=�H����H��H��H���o�H����������	H�=�H���l�H��H��H���>�H����	H�=�H���;�H��H��H���
�H������A�
H�=fH���
�H��H��H�����H����������H�=QH�����H��H��H����H�����H�=H����H��H��H���}�H��������H�=�
H���}�H��H��H���O�H�����������H�=�
H���L�H��H��H����H������H�=�
H����H��H��H�����H������!��H�=�
H�����H��H��H����H������������
H�=l
H����H��H��H����H���_��
H�=/
H����H��H��H���]�H��������H�=
H���]�H��H��H���/�H���������`��
H�=�	H���,�H��H��H����H������
H�=�	H����H��H��H�����H��������H�=�	H�����H��H��H����H���������H�=q	H����H��H��H���q�H�����������H�=I	H���n�H��H��H���@�H�����H�=$	H���=�H��H��H�����	H�=	���H��H������
H�=����H��H������H�=�����H��H�����H�=����1H��H�����H�=����kH��H���j��
H�=��y���H��H���I��H�=��X��
H��H���(��H�=p�7��H��H�����H�=N���%H��H������H�=6��H�����H��H������H�= ���H�����H��H�����H�=���H�����H��H���}��H�=���H�·���H��H���Z��H�=��i�H�›���H��H���7��H�=��F�H��{��H��H�����H�=��#��H��H������H�=����H��H������H�=f�����H��H�����H�=R���MH��H�����H�=A���iH��H���o��H�=�~���&H��H���N��H�=�]��H��H���-��H�=��<��#H��H�����H�=����+H��H������H�=����+H��H������H�=�����H��H�����H�=����H��H�����H�=y���H��H���g������H�=\H���f�H��H��H���8����[��H�=5H���7�H��H��H���	��q�,��H�=H����H��H��H������J���H�=�H�����H��H��H�����#����H�=�H����H��H��H���|������H�=�H���{�H��H��H���M����p��H�=zH���L�H��H��H�������A��H�=XH����H��H��H�����H��H��[]�����H��H���RbConfigSIZEOFintshortlong long__int128off_tvoid*floattime_tclock_tptrdiff_tdev_tuint8_tuint16_tuint32_tuint64_tuint128_tuintptr_tssize_tint_least8_tint_least16_tint_least32_tint_least64_tint_fast8_tint_fast16_tint_fast32_tint_fast64_tintmax_tsig_atomic_twchar_twint_twctrans_twctype_t_Boollong doublefloat _Complexlong double _Complex__float128_Decimal32_Decimal64_Decimal128__float80LIMITSFIXNUM_MAXFIXNUM_MINSCHAR_MAXSCHAR_MINUCHAR_MAXWCHAR_MAXWCHAR_MINSHRT_MINUSHRT_MAXINT_MINUINT_MAXULONG_MAXLLONG_MINULLONG_MAXINT8_MINUINT8_MAXINT_LEAST8_MINUINT_LEAST8_MAXINT_FAST8_MINUINT_FAST8_MAXINT16_MINUINT16_MAXINT_LEAST16_MINUINT_LEAST16_MAXINT_FAST16_MINUINT_FAST16_MAXINT32_MINUINT32_MAXINT_LEAST32_MINUINT_LEAST32_MAXINT_FAST32_MINUINT_FAST32_MAXINT64_MINUINT64_MAXINT_LEAST64_MINUINT_LEAST64_MAXINT_FAST64_MINUINT_FAST64_MAXINTMAX_MINUINTMAX_MAXINTPTR_MINUINTPTR_MAXSIZE_MAXPTRDIFF_MAXPTRDIFF_MINFLT_RADIXFLT_ROUNDSFLT_EVAL_METHODFLT_MANT_DIGLDBL_MANT_DIGFLT_DIGLDBL_DIGFLT_MIN_EXPLDBL_MIN_EXPFLT_MIN_10_EXPLDBL_MIN_10_EXPFLT_MAX_EXPLDBL_MAX_EXPFLT_MAX_10_EXPLDBL_MAX_10_EXPFLT_DECIMAL_DIGLDBL_DECIMAL_DIGFLT_HAS_SUBNORMLDBL_HAS_SUBNORMFLT_MAXDBL_MAXFLT_EPSILONDBL_EPSILONFLT_MINDBL_MINFLT_TRUE_MINDBL_TRUE_MIN��G��������>�<8�6;,��H@�p������zRx�$0��FJw�?:*3$"D���\ ��E��(|���E�A�D �DAGNU�
�	H- �	#Q�
� 8- @- ���o``�
gp/ ��	���o���o����o�o����oP- � 0@P`p��GA$3a1�� GA$3p1113
�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113� GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignsizeof.so-3.4.4-3.el8.x86_64.debug�Կ��7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N�a�?Ӈ����Fl�FqB�0��y&u�z����'a@���lbXN����Ñ��7)8:-
!���\0Ep���*�����oQ4����#[��[_ɬ����^��D�qY�U��S�C'?e]�_!?mM|���!����`
.�=��[{1�T��ߋ�(�=Oz̐�O�%q3=�p������_�\g���(�FK�u���Z��x���A�ʕ���ƹ�z�E�mÈ=��Ĝ�K�Y%H�!Dk�%Ǝ�5�2�{�*g�V(/��{+�T�C��b�$�����AS2H���'�9X����%�B�O�D%W�!��G����B
�b�������u�U�}��Ĥ���N��C�r��P�ŕ'��q�texs�t5�i�co���e�g�����ڎON���:~�Yի�M�5��>�K
@|<9>��E�-o�鏤�j��bv�^�o�k�M�t�:}���^��m�4�NA<>XP�S�����Y0�0��>O's]���ꣅC�
S
W��q`h�4l-@�̒�P���.�.��F�͒�\I
k��>@2����
�AR���y�"R��`
��dV��S�l���$�;�4�	��w�[G�0�/�gș���e��~I�0�+�����
�S�����	�+hS���K~f�}p��+c�-������	�u[�N��6��0>�t�FDz�§�|���Mw�%����x�����B7{ۼQ�
0+�A��t횦��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(���0``g8���o��&E���o�� T�^B��h��c���n���wP	P	�}� � 
�� � p�`&`&,��&�&��8'8' �8- 8-�@- @-�H- H-�P- P- �p/ p/��0 0�0`0��3(�3D87"PK*J[%��hGhGlib64/ruby/openssl.sonuȯ��ELF>��@(@@8	@���� P�P�%P�%�4H> ����%��%@@888$$������  S�td������  P�td���44Q�tdR�tdP�P�%P�%�4�4GNUJ1�K?�/��*4E�	��J�a�
4 @E�H@` �H���+ B:X�9	@B�@@�&Gb(@ ;V(�, @%0 �"̀	A & �١HH� �@�`�@�K@���������������������������
"%&)*,/134789:<>ACEHLN�`��k�9Y��+agg��UF�X��V�`��
�
�/i�)&I���1���<�? ������Ns�K��l������!Fswx�u$.X�{�BE��gEӕ�e��t����t�
�I
P��0J��f��_�z?�KGk��,<�G�~�-)v���S�͙�����\�O\���%m@��|l�ј�]���G��)4�!I��c�qX5���T���Bг���`��|��И�ߕ�"v$.7�a�'�)��|T�+b�u3�-�VN��u$.S6�T���p�텄���m3��ǫ��/���-2���p���o�4���P=����l
!��\��X�-˭�14���I�@�|�v�2v�w$."���#I���0a�����6�,T�o�(48ѭd���7)4��IvvD���t�- Iv�"`��M��ij�E�8�D[H�o�����fbK�7�%v'�'�6�G
K,0.*R@h��B�gd
����V117�D�!-39w$EG1��"���/h�GdFJ?"[�4A�2� W</�I"6/B�;�_$3�Gr �%F;%%�EB�"-*)(�F�}*�'�&Y-E0�"� 5I%8��%� '��7�
���	�C��I�0��#(	�]GE(�8�
7�5d4�t�(���J�$�-�*�tI�N*-'	.�o6�HL�WLk.�!�DD:8E' �H�'�$
-�'�H%�5�5_#v(�1M8!G��!,�G�:���F"TN:�9�B��9g'�-��F�+>(`&�
�6b�2��A�@�?P�55�	Da76�>�(�TECA LB�5H)/c(�C@dg�
G��:�,�<���BQ#�^8�QK��B>�H��02 ��%,�#�.bN%�C8(<
HF�� �A�X�$�J;�1c)�(rN4��?{%
%C2�mHS
qu#�H}21'V(eW"��#UW�R7�:�K&�9�J@o�
/@3
�
6�]<�wKt!AE"5D[��0��
o��@W.���/"@�I#�F��:z)�"�t�4�I�:��l9l?�)��a
:+��'��D�'��G0Dr6�0�DjL8!_/��
i,*K��h�1�8*$H�!�")1><J�#\5|9}7.
�R%�8'�4�/�D�&�cI�>�*/7;9�8K>��FEn
��F
�<g	�9�C�4Y:�F�K��<�(��"�2� �i�	����8Ok-�C��?��1�)
B�' }3l@�#�(�	kN�E/6�? ;u+�2�� 5AB1��+��=�;<CC;B�$�0&+�f%+�D�+�4K �=�&A�A�\C�6hE5�� �
%Gb+oe^���EGd�k7�
"�BQ/D*�%�HJ$��,6L�.;K�:�
2[?�7s��,>�mJ����(�3:�3`A,r8w�?Ip�4TJ�>s	$
:	�&�m;�/?��-}
*�E+�^�0�c6�KA0VF:36&b�?2G�5�L+�F�,�:a�r�	6o$"��5,��J�"]
�-~6	AW	��>�I�
�9�C�=��10�8��A�^!�
�F@��A�
t"�*Q�.�5H�2��*�@��1�-[�A_�E�T9c1T,I
rF=�<#�/�,+%�.�A���+��8DI�=z�JD�4[  �VF�3H	�6=)�'|>�z�K�h>
L(]"#�D�-Q3�w5H�-v#|�;"!Y0 :v�J�C�+��
c3��;�2XHs�*�pE��I:QL35�'�,�
$�\@e0��$�*�'�0;q�G[�%�0�I//!H�<�&��)S�;�F�7�;�uC�(-�|#J(
�!?-!7oG(�1�	,2n:C�3xD6^R<�)�>8
6F�.�'��-2

��?)'��5�(I(KHh*�?#p1�-�)B?�,�)4��-�1��2�K.S�B�K�8�.GF ":�=1���H��R'�E@tB�.��qA9S2�-"-k2!�7	|?7E�5X69�@���<.B�b,1%:6�$B,z,<�*C.E�&�B�{��3&IO*�K'>
bDF./#��U �>�-�D�&�
3��	3��!�!�,�-8<*) �
��>L$E��, '"�A�@�9��18T!�Jd �n<��9�xF:A7�	m�D/4#$�K�!�/�6cBS;�3��&�6`&�%0!t� (&{*z/�@� b�� ��S�	�{5p�@�=p&�@�F�
�b�=@�a�%� >�B�QQ0�>�_����6C��@p�6�&�6�E��6�L&j���T\e��g�����	�������)�
�Zt
pe
�o?
p�8=0Uu�?�>e��ye;�&�?`?6�/��%H��R6�Y�$ �o� @&�&C@��%=�?]=pzV������L&"�%u�]-�T>I�]�L�&�?x&Bp�ej�&�&�t+���i� 8&�0
d� P&5$0 &�"���&4��i�/>��h6����0Lg~��m��T69�atp�K}N
��}����Po��=���&U�&��#`I! &�/h&�@���6�v~&0G�u �P�2X&pp6!&s�#�[����+�	� ��%H� H&�&���R�C�&K=�i.�%HZ&0&�=�m� w[�P�Q�+_4�#2 �io=����	��RVK�# i]p&p�t[0z6__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizedOSSLrb_str_newrb_yieldrb_string_value__stack_chk_failrb_ary_newERR_error_stringrb_str_new_cstrrb_ary_pushERR_get_errorFIPS_modeERR_get_error_line_dataERR_func_error_stringERR_lib_error_stringERR_reason_error_stringruby_snprintfrb_warnossl_protect_x509_ary2skossl_x509_ary2sk0rb_protectossl_x509_ary2skrb_jump_tagossl_x509_sk2aryOPENSSL_sk_numrb_ary_new_capaOPENSSL_sk_valueossl_x509_newstderrfwrite__fprintf_chkossl_x509crl_sk2aryossl_x509crl_newossl_x509name_sk2aryossl_x509name_newossl_str_newmemcpyrb_set_errinfoossl_buf2strCRYPTO_freeossl_bin2hexossl_pem_passwd_cbrb_block_given_pPEM_def_callbackrb_warningossl_to_derrb_funcallvossl_to_der_if_possiblerb_respond_toossl_clear_errorERR_clear_errorossl_make_errorERR_peek_last_error_line_datarb_exc_new_strrb_str_cat_cstrrb_str_catfrb_str_new_staticrb_str_catossl_raiserb_vsprintfrb_exc_raiserb_unexpected_typeOPENSSL_sk_new_nullrb_ary_entrycX509Certrb_obj_is_kind_ofDupX509CertPtrOPENSSL_sk_pushX509_freeOPENSSL_sk_pop_freeeOSSLErrorossl_pem_passwd_valueFIPS_mode_setrb_string_value_ptrCRYPTO_memcmprb_eArgErrorInit_opensslrb_ext_ractor_safeOPENSSL_init_sslmOSSLrb_global_variablerb_define_modulerb_define_constOpenSSL_versionrb_eStandardErrorrb_define_class_underrb_internInit_ossl_asn1Init_ossl_bnInit_ossl_cipherInit_ossl_configInit_ossl_digestInit_ossl_engineInit_ossl_hmacInit_ossl_kdfInit_ossl_ns_spkiInit_ossl_ocspInit_ossl_pkcs12Init_ossl_pkcs7Init_ossl_pkeyInit_ossl_providerInit_ossl_randInit_ossl_sslInit_ossl_tsInit_ossl_x509rb_eRuntimeErrorrb_raiserb_define_module_functionrb_define_singleton_methodrb_usascii_str_new_staticOBJ_obj2txtrb_str_resizerb_str_set_leneASN1Errorrb_out_of_intrb_string_value_cstrOBJ_txt2objrb_attr_getASN1_OBJECT_freeOBJ_txt2nidOBJ_nid2lnOBJ_nid2snrb_str_equalOBJ_createrb_num2intrb_fix2intrb_cFalseClassrb_hash_lookuprb_class_superclassrb_cFloatrb_cIntegerrb_cNilClassrb_cTrueClassrb_cSymbolASN1_object_sizeASN1_put_objectASN1_put_eocrb_convert_typerb_str_appendrb_intern2rb_funcallv_publicASN1_get_objectcASN1Datarb_ivar_setrb_int2bigd2i_ASN1_TIMEASN1_TIME_freed2i_ASN1_ENUMERATEDASN1_ENUMERATED_freed2i_ASN1_INTEGERASN1_INTEGER_freed2i_ASN1_NULLASN1_NULL_freed2i_ASN1_OBJECTOBJ_obj2nidd2i_ASN1_BIT_STRINGASN1_BIT_STRING_freeBIO_s_memBIO_newi2a_ASN1_OBJECTossl_membio2strrb_str_new_frozenasn1time_to_time__isoc99_sscanfrb_cTimerb_eTypeErrorossl_time_splitrb_Integerrb_num2longasn1str_to_strasn1integer_to_numASN1_INTEGER_to_BNossl_bn_newBN_freeASN1_ENUMERATED_to_BNnum_to_asn1integerossl_bn_value_ptrBN_to_ASN1_INTEGERASN1_GENERALIZEDTIME_adjCRYPTO_mallocASN1_TYPE_seti2d_ASN1_TYPEASN1_TYPE_freerb_str_drop_bytesASN1_BIT_STRING_newASN1_BIT_STRING_setASN1_STRING_newASN1_STRING_setASN1_STRING_freeASN1_NULL_newASN1_UTCTIME_adjrb_cArrayrb_id2symrb_define_module_undermASN1rb_ary_storerb_cObjectrb_define_aliasrb_hash_newrb_hash_asetrb_define_methodossl_obj2bioBIO_new_mem_bufBIO_ctrlBIO_freeBN_clear_freerb_check_typeddataBN_num_bitsBN_bn2binrb_memhashrb_free_tmp_bufferrb_alloc_tmp_bufferBN_CTX_freerb_data_typed_object_wrapBN_newcBNBN_dupBN_is_negativeBN_set_negativeBN_bn2hexrb_cstr_to_inumBN_is_zeroBN_is_oddBN_is_oneBN_cmpBN_bin2bnrb_absint_sizerb_integer_packrb_alloc_tmp_buffer_with_countrb_error_frozen_objectBN_copyrb_str_modifyBN_hex2bnBN_mpi2bnBN_dec2bnrb_error_arityBN_is_bit_setBN_get_flagsrb_obj_classBN_lshiftBN_rshiftBN_randBN_bn2decstrlenBN_bn2mpirb_assoc_newBN_set_flagsBN_set_bitBN_clear_bitBN_mask_bitsBN_generate_prime_exBN_rand_rangeBN_ucmpBN_subBN_addossl_bn_ctx_getrb_ractor_local_storage_ptrBN_CTX_newrb_ractor_local_storage_ptr_setBN_mod_inverseBN_is_prime_fasttest_exBN_gcdBN_mod_expBN_expBN_mod_sqrtBN_mod_sqrBN_mod_mulBN_mod_subBN_mod_addBN_divrb_ary_new_from_argsBN_sqrBN_mulrb_ractor_local_storage_ptr_newkeyrb_define_alloc_funcrb_singleton_classEVP_CIPHER_CTX_freeEVP_CIPHER_CTX_newEVP_get_cipherbynameEVP_CipherInit_exEVP_CIPHER_CTX_cipherEVP_CIPHER_flagsEVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_ctrlEVP_CipherUpdaterb_str_capacityrb_str_modify_expandrb_eRangeErrorossl_evp_get_digestbynameEVP_BytesToKeyOPENSSL_cleanseEVP_md5OBJ_NAME_do_all_sortedEVP_CIPHER_CTX_block_sizeEVP_CIPHER_nidEVP_CipherFinal_exrb_class_path__memcpy_chkEVP_CIPHER_CTX_copyEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_set_app_dataossl_evp_get_cipherbynameossl_cipher_newNCONF_freeNCONF_load_bioNCONF_newGetConfigOPENSSL_LH_doall_argrb_frame_this_funcrb_enumeratorize_with_sizerb_class2namerb_inspectNCONF_get_sectionNCONF_get_stringrb_obj_freezeBIO_new_filerb_mEnumerablerb_include_moduleCONF_get1_default_config_fileEVP_MD_CTX_freeEVP_MD_CTX_mdEVP_DigestInit_exEVP_MD_typeEVP_MD_block_sizeEVP_MD_sizeEVP_DigestFinal_exEVP_DigestUpdateEVP_MD_CTX_copyEVP_MD_CTX_newEVP_get_digestbynameossl_digest_newrb_path2classrb_define_private_methodENGINE_freeENGINE_get_cmd_defnsENGINE_ctrl_cmd_stringENGINE_load_public_keyossl_pkey_newENGINE_get_firstENGINE_up_refENGINE_get_nextENGINE_load_builtin_enginesOPENSSL_init_cryptoENGINE_by_idENGINE_initENGINE_ctrlENGINE_get_nameENGINE_get_idrb_sprintfENGINE_set_defaultENGINE_get_digestENGINE_get_cipherENGINE_finishENGINE_load_private_keyrb_undef_alloc_funcEVP_DigestSignFinalEVP_PKEY_new_raw_private_keyEVP_DigestSignInitEVP_PKEY_freeEVP_MD_CTX_pkey_ctxEVP_PKEY_CTX_get0_pkeyrb_keyword_given_prb_get_kwargsEVP_PKEY_CTX_new_idEVP_PKEY_derive_initEVP_PKEY_CTX_ctrlEVP_PKEY_deriveEVP_PKEY_CTX_freerb_hash_dupEVP_PBE_scryptrb_num2ulongPKCS5_PBKDF2_HMACNETSCAPE_SPKI_freei2d_NETSCAPE_SPKINETSCAPE_SPKI_b64_decoded2i_NETSCAPE_SPKIGetPKeyPtrossl_pkey_check_public_keyNETSCAPE_SPKI_verifyGetPrivPKeyPtrNETSCAPE_SPKI_signNETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_printNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_newi2d_OCSP_CERTIDOCSP_CERTID_freeOCSP_id_get0_infod2i_OCSP_CERTIDGetX509CertPtrOCSP_cert_to_idi2d_OCSP_SINGLERESPOCSP_SINGLERESP_freei2d_OCSP_BASICRESPOCSP_BASICRESP_freeOCSP_basic_add1_nonceOCSP_REQUEST_freed2i_OCSP_BASICRESPi2d_OCSP_RESPONSEOCSP_RESPONSE_freed2i_OCSP_RESPONSEi2d_OCSP_REQUESTOCSP_request_onereq_countOCSP_request_onereq_get0OCSP_onereq_get0_idOCSP_CERTID_dupOCSP_request_add0_idOCSP_request_add1_nonced2i_OCSP_REQUESTOCSP_id_issuer_cmpOCSP_id_cmpOCSP_resp_countOCSP_resp_get0OCSP_single_get0_statusOCSP_SINGLERESP_get0_idOCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_get_extossl_x509ext_newOCSP_resp_findOCSP_SINGLERESP_itASN1_item_dupOCSP_CERTID_newd2i_OCSP_SINGLERESPOCSP_SINGLERESP_newOCSP_copy_nonceOCSP_BASICRESP_newOCSP_response_get1_basicOCSP_response_statusOCSP_response_status_strOCSP_RESPONSE_newOCSP_check_nonceOCSP_REQUEST_newOCSP_BASICRESP_itOCSP_request_is_signedOCSP_response_createossl_x509_time_adjustX509_gmtime_adjrb_check_array_typecX509ExtOCSP_basic_add1_statusGetX509ExtPtrOCSP_SINGLERESP_add_extOCSP_check_validityGetX509StorePtrOCSP_request_verifyOCSP_basic_verifyOCSP_request_signOCSP_basic_signOCSP_REQUEST_itOCSP_RESPONSE_itPKCS12_freei2d_PKCS12d2i_PKCS12_bioERR_set_markPKCS12_parseERR_pop_to_markrb_iv_setPKCS12_newPKCS12_set_macPKCS12_created2i_PKCS12ASN1_duprb_attrPKCS7_freePKCS7_RECIP_INFO_freePKCS7_SIGNER_INFO_freei2d_PKCS7PKCS7_verifyERR_peek_errorrb_iv_getPKCS7_dataInitBIO_writeBIO_readPKCS7_dataFinalBIO_free_allPKCS7_content_newd2i_PKCS7_RECIP_INFOi2d_PKCS7_RECIP_INFOPKCS7_RECIP_INFO_newPKCS7_add_recipient_infod2i_PKCS7_SIGNER_INFOi2d_PKCS7_SIGNER_INFOEVP_PKEY_up_refPKCS7_get_signer_infoPKCS7_SIGNER_INFO_newPKCS7_add_signerd2i_PKCS7_bioPEM_read_bio_PKCS7SMIME_read_PKCS7PKCS7_RECIP_INFO_setPKCS7_get_signed_attributePKCS7_SIGNER_INFO_setPKCS7_print_ctxPEM_write_bio_PKCS7GetX509CRLPtrPKCS7_add_crlPKCS7_add_certificatePKCS7_set_cipherPKCS7_ctrlstrcmprb_sym2strPKCS7_set_typePKCS7_newPKCS7_dupOPENSSL_sk_poprb_block_callX509_CRL_freePKCS7_decryptPKCS7_encryptPKCS7_signSMIME_write_PKCS7ossl_pkcs7_newEVP_PKEY_base_idcECrb_obj_alloccRSAcDHcPKeycDSAossl_evp_pkey_typeEVP_PKEY_CTX_newEVP_PKEY_decrypt_initEVP_PKEY_decryptePKeyErrorrb_StringEVP_PKEY_CTX_ctrl_strEVP_PKEY_encrypt_initEVP_PKEY_encryptEVP_PKEY_derive_set_peerEVP_PKEY_sign_initEVP_PKEY_signEVP_PKEY_idEVP_PKEY_cmpEVP_PKEY_get_raw_public_keyEVP_PKEY_get_raw_private_keyi2d_PKCS8PrivateKey_bioPEM_write_bio_PKCS8PrivateKeyEVP_PKEY_print_privateEVP_PKEY_print_publicEVP_PKEY_print_paramsEVP_PKEY_CTX_get_app_datarb_thread_call_with_gvlrb_thread_check_intsEVP_PKEY_CTX_get_keygen_inforb_yield_values2ruby_malloc_size_overflowEVP_PKEY_keygenEVP_PKEY_paramgenrb_class_namerb_obj_is_instance_ofEVP_PKEY_asn1_find_strEVP_PKEY_asn1_get0_infoEVP_PKEY_new_raw_public_keyEVP_PKEY_keygen_initEVP_PKEY_CTX_set_app_dataEVP_PKEY_CTX_set_cbrb_thread_call_without_gvlEVP_PKEY_paramgen_initossl_pkey_read_genericd2i_PrivateKey_biod2i_PKCS8PrivateKey_biod2i_PUBKEY_bioPEM_read_bio_PrivateKeyPEM_read_bio_PUBKEYPEM_read_bio_ParametersEVP_PKEY_missing_parametersEVP_PKEY_get0EC_KEY_get0_public_keyRSA_get0_keyDSA_get0_keyDH_get0_keyEVP_PKEY_verify_recover_initEVP_PKEY_verify_recoverEVP_PKEY_verify_initEVP_PKEY_verifyEVP_DigestVerifyInitEVP_DigestVerifyEVP_DigestSignDupPKeyPtrossl_pkey_export_traditionali2d_PrivateKey_bioPEM_write_bio_PrivateKey_traditionalossl_pkey_export_spkiPEM_write_bio_PUBKEYi2d_PUBKEY_biomPKeyrb_undef_methodInit_ossl_rsaInit_ossl_dsaInit_ossl_dhInit_ossl_ecEVP_PKEY_get0_DHDH_get0_pqgDH_set0_keyDH_set0_pqgi2d_DHparamsPEM_write_bio_DHparamsDHparams_dupEVP_PKEY_newEVP_PKEY_assignDH_freeDH_newd2i_DHparamsASN1_d2i_bioEVP_PKEY_param_checkDH_get0_engineEVP_PKEY_get0_DSADSA_get0_pqgDSA_set0_keyDSA_set0_pqgd2i_DSAPrivateKeyi2d_DSAPrivateKeyDSA_freeDSA_newd2i_DSAPublicKeyPEM_ASN1_read_bioEC_GROUP_freeEC_POINT_clear_freeEC_POINT_is_on_curverb_obj_dupEC_POINT_dupEC_POINT_newEC_POINT_oct2pointEC_POINT_bn2pointEC_POINT_freeEC_POINT_addPEM_write_bio_ECPKParametersi2d_ECPKParametersASN1_i2d_bioEC_GROUP_duprb_sym2idEC_GROUP_new_curve_GFpPEM_read_bio_ECPKParametersd2i_ECPKParametersOBJ_sn2nidEC_GROUP_new_by_curve_nameEC_GROUP_set_asn1_flagEC_GROUP_set_point_conversion_formEVP_PKEY_get0_EC_KEYEC_KEY_get0_private_keyEVP_PKEY_checkEVP_PKEY_public_checkEC_KEY_set_public_keyEC_KEY_set_private_keyEC_KEY_set_groupEC_KEY_dupEC_KEY_freeEC_KEY_newEC_KEY_new_by_curve_nameEC_KEY_set_asn1_flagEC_KEY_set_conv_formEC_get_builtin_curvesEC_POINT_point2octEC_POINT_set_to_infinityEC_POINT_invertEC_POINT_make_affineEC_POINT_is_at_infinityECPKParameters_printEC_GROUP_get_degreeEC_GROUP_set_seedEC_GROUP_get_seed_lenEC_GROUP_get0_seedEC_GROUP_get_point_conversion_formEC_GROUP_get_asn1_flagEC_GROUP_get_curve_nameEC_GROUP_get_cofactorEC_GROUP_get_orderEC_GROUP_set_generatorEC_GROUP_cmpEC_POINT_cmpEC_KEY_generate_keyEC_POINT_mulrb_ary_hidden_newEC_POINTs_mulEC_GROUP_get0_generatorEC_KEY_get0_groupEVP_PKEY_get0_RSARSA_get0_factorsRSA_get0_crt_paramsRSA_set0_crt_paramsRSA_set0_factorsRSA_set0_keyd2i_RSAPrivateKeyi2d_RSAPrivateKeyRSA_freeRSA_newd2i_RSAPublicKey_bioPEM_read_bio_RSAPublicKeyRSA_pkey_ctx_ctrlEVP_DigestVerifyFinalEVP_PKEY_sizeRAND_statusRAND_bytesrb_num2dblRAND_addRAND_seedRAND_load_fileRAND_write_fileSSL_freeSSL_get_ex_datarb_gc_markossl_ssl_typeSSL_export_keying_materialSSL_get_peer_finishedSSL_get_finishedSSL_CIPHER_get_nameSSL_CIPHER_get_versionSSL_CIPHER_get_bitsSSL_get_rbiorb_io_taint_checkrb_io_check_closedrb_io_check_readablerb_io_check_writablerb_io_descriptorSSL_set_fdSSL_CTX_freeSSL_CTX_get_ex_dataSSL_CTX_ctrlSSL_get_ex_data_X509_STORE_CTX_idxX509_STORE_CTX_get_ex_dataossl_verify_cb_callSSL_is_serverX509_STORE_CTX_get_error_depthX509_STORE_CTX_set_errorcSSLSessionossl_ssl_session_typerb_during_gcSSL_SESSION_up_refSSL_CTX_get_security_levelSSL_CTX_get_ciphersSSL_CTX_get_optionsrb_uint2bigSSL_get0_next_proto_negotiatedSSL_get0_alpn_selectedSSL_ctrlSSL_get_client_CA_listSSL_set_sessionSSL_session_reusedSSL_pendingSSL_get_current_cipherSSL_get_versionSSL_get_peer_cert_chainSSL_get_peer_certificateSSL_get_certificateSSL_shutdownrb_errno_ptrrb_io_maybe_wait_writablerb_eIOTimeoutErrorrb_hash_lookup2rb_io_maybe_wait_readableSSL_writeSSL_get_errorrb_sys_failSSL_CTX_remove_sessionTLS_methodSSL_CTX_newSSL_CTX_set_ex_dataSSL_get_verify_resultX509_get_pubkeySSL_CTX_use_certificateSSL_CTX_use_PrivateKeySSL_state_stringrb_ruby_verbose_ptrSSL_state_string_longSSL_CTX_add_sessionstrncmpX509_STORE_CTX_get_current_certmSSLSSL_CTX_set_tmp_dh_callbackSSL_CTX_set_post_handshake_authSSL_CTX_set_cert_storeX509_STORE_up_refSSL_CTX_check_private_keySSL_CTX_add_client_CASSL_CTX_load_verify_locationsSSL_CTX_set_verifySSL_CTX_set_timeoutSSL_CTX_set_verify_depthSSL_CTX_set_next_protos_advertised_cbSSL_CTX_set_alpn_protosSSL_CTX_set_session_id_contextSSL_CTX_callback_ctrlSSL_CTX_set_alpn_select_cbSSL_CTX_set_next_proto_select_cbSSL_CTX_set_client_cert_cbSSL_CTX_sess_set_new_cbSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_remove_cbSSL_CTX_set_keylog_callbackSSL_get_servernameSSL_set_SSL_CTXSSL_CTX_flush_sessionsSSL_CTX_set_security_levelSSL_CTX_set_ciphersuitesSSL_CTX_set_cipher_listSSL_CTX_clear_optionsSSL_CTX_set_optionsSSL_newSSL_set_ex_dataSSL_set_info_callbackrb_call_superERR_peek_last_errorrb_const_getrb_rescue2X509_verify_cert_error_stringSSL_acceptSSL_connectrb_str_locktmpSSL_readrb_str_unlocktmprb_eof_errorCRYPTO_get_ex_new_indexrb_mWaitReadablerb_mWaitWritableInit_ossl_ssl_sessioncSSLSocketSSL_SESSION_freei2d_SSL_SESSIONd2i_SSL_SESSIONSSL_SESSION_newSSL_get1_sessionPEM_read_bio_SSL_SESSIONSSL_SESSION_printSSL_SESSION_get_idSSL_SESSION_get_timeoutSSL_SESSION_set_timeoutSSL_SESSION_get_protocol_versionSSL_SESSION_get_timeSSL_SESSION_set_timePEM_write_bio_SSL_SESSIONTS_REQ_freeTS_RESP_freed2i_TS_REQ_bioTS_TST_INFO_freed2i_TS_TST_INFO_bioTS_REQ_to_TS_VERIFY_CTXTS_RESP_get_tokenX509_up_refTS_VERIFY_CTS_set_certsTS_VERIFY_CTX_add_flagsTS_VERIFY_CTX_set_storeTS_RESP_verify_responseTS_VERIFY_CTX_freeTS_RESP_get_status_infoTS_STATUS_INFO_get0_failure_infoASN1_BIT_STRING_get_bitd2i_TS_RESP_bioTS_REQ_print_bioTS_REQ_get_msg_imprintTS_MSG_IMPRINT_get_msgTS_MSG_IMPRINT_get_algoi2d_TS_REQi2d_TS_TST_INFOi2d_TS_RESPTS_REQ_get_cert_reqTS_REQ_set_cert_reqTS_REQ_get_nonceTS_REQ_set_nonceTS_REQ_get_policy_idTS_REQ_set_policy_idTS_MSG_IMPRINT_set_msgX509_ALGOR_set0TS_REQ_get_versionTS_REQ_set_versionTS_REQ_newTS_TST_INFO_print_bioTS_TST_INFO_get_nonceTS_TST_INFO_get_orderingTS_TST_INFO_get_timeTS_TST_INFO_get_serialTS_TST_INFO_get_msg_imprintTS_TST_INFO_get_policy_idTS_TST_INFO_get_versionTS_TST_INFO_newTS_RESP_print_bioPKCS7_cert_from_signer_infoTS_RESP_get_tst_infoTS_TST_INFO_dupTS_STATUS_INFO_get0_textTS_STATUS_INFO_get0_statusTS_RESP_newTS_RESP_CTX_newTS_RESP_CTX_set_serial_cbTS_RESP_CTX_set_signer_certTS_RESP_CTX_set_signer_keyTS_RESP_CTX_set_def_policyTS_RESP_CTX_set_time_cbTS_RESP_CTX_add_mdTS_RESP_CTX_freeTS_RESP_CTX_set_certsTS_RESP_create_responseX509_time_adj_exmX509Init_ossl_x509attrInit_ossl_x509certInit_ossl_x509crlInit_ossl_x509extInit_ossl_x509nameInit_ossl_x509reqInit_ossl_x509revokedInit_ossl_x509storeX509_get_default_cert_areaX509_get_default_cert_dirX509_get_default_cert_fileX509_get_default_cert_dir_envX509_get_default_cert_file_envX509_get_default_private_dirX509_ATTRIBUTE_freei2d_X509_ATTRIBUTEd2i_ASN1_SET_ANYX509_ATTRIBUTE_countASN1_TYPE_getX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_set1_objectX509_ATTRIBUTE_dupX509_ATTRIBUTE_get0_typei2d_ASN1_SET_ANYOPENSSL_sk_freed2i_X509_ATTRIBUTEX509_ATTRIBUTE_newossl_x509attr_newcX509AttrGetX509AttrPtri2d_re_X509_tbsi2d_X509rb_ensureX509_newX509_cmpX509_add_extX509_get_ext_countX509_get_extX509_check_private_keyX509_verifyX509_signX509_set_pubkeyX509_set1_notAfterX509_get0_notAfterX509_set1_notBeforeX509_get0_notBeforeGetX509NamePtrX509_set_issuer_nameX509_get_issuer_nameX509_set_subject_nameX509_get_subject_nameX509_get_serialNumberX509_set_serialNumberX509_get0_tbs_sigalgX509_set_versionX509_get_versionX509_printPEM_write_bio_X509d2i_X509_bioPEM_read_bio_X509X509_delete_extX509_EXTENSION_freeX509_dupX509_CRL_get_REVOKEDossl_x509revoked_newX509_CRL_get0_signatureX509_CRL_newX509_CRL_add_extX509_CRL_get_ext_countX509_CRL_get_extX509_CRL_printPEM_write_bio_X509_CRLi2d_X509_CRL_bioX509_CRL_verifyX509_CRL_signDupX509RevokedPtrX509_CRL_add0_revokedX509_CRL_sortX509_REVOKED_freeX509_CRL_set1_nextUpdateX509_CRL_get0_nextUpdateX509_CRL_set1_lastUpdateX509_CRL_get0_lastUpdateX509_CRL_set_issuer_nameX509_CRL_get_issuerX509_CRL_set_versionX509_CRL_get_versiond2i_X509_CRL_bioPEM_read_bio_X509_CRLcX509RevX509_CRL_delete_extX509_CRL_dupi2d_X509_EXTENSIONX509_EXTENSION_get_objectX509_EXTENSION_get_dataASN1_OCTET_STRING_setOBJ_ln2nidX509V3_set_nconfX509V3_EXT_nconfX509_EXTENSION_newX509_EXTENSION_get_criticalX509V3_EXT_printASN1_STRING_printX509_EXTENSION_set_objectGetX509ReqPtrX509V3_set_ctxX509_EXTENSION_dupd2i_X509_EXTENSIONX509_EXTENSION_set_criticalX509_NAME_freei2d_X509_NAMEX509_NAME_entry_countX509_NAME_ENTRY_get_dataX509_NAME_get_entryX509_NAME_ENTRY_get_objecti2t_ASN1_OBJECTX509_NAME_print_exrb_utf8_encindexrb_enc_associate_indexrb_utf8_encodingrb_enc_sprintfX509_NAME_newX509_NAME_cmpX509_NAME_onelineX509_NAME_dupX509_NAME_hash_oldX509_NAME_hashd2i_X509_NAMEX509_NAME_add_entry_by_txtrb_mComparablerb_hash_set_ifnoneX509_REQ_freeX509_REQ_get0_signaturei2d_X509_REQX509_REQ_add1_attrX509_REQ_get_attr_countX509_REQ_get_attrX509_REQ_verifyX509_REQ_signX509_REQ_set_pubkeyX509_REQ_get_pubkeyX509_REQ_set_subject_nameX509_REQ_get_subject_nameX509_REQ_set_versionX509_REQ_printPEM_write_bio_X509_REQd2i_X509_REQ_bioPEM_read_bio_X509_REQX509_REQ_newX509_REQ_delete_attrX509_REQ_get_versionX509_REQ_dupi2d_X509_REVOKEDX509_REVOKED_add_extX509_REVOKED_get_ext_countX509_REVOKED_get_extX509_REVOKED_set_revocationDateX509_REVOKED_get0_revocationDateX509_REVOKED_set_serialNumberX509_REVOKED_get0_serialNumberX509_REVOKED_dupX509_REVOKED_delete_extX509_REVOKED_newX509_STORE_CTX_get0_untrustedX509_STORE_CTX_get0_certX509_STORE_CTX_freeX509_STORE_freeX509_STORE_get_ex_dataX509_STORE_CTX_initX509_STORE_CTX_get_errorX509_STORE_CTX_set_timeX509_STORE_CTX_set_flagsX509_STORE_CTX_get0_current_crlX509_STORE_CTX_get0_chainX509_STORE_CTX_set_ex_dataX509_verify_certX509_STORE_CTX_newX509_STORE_add_crlX509_STORE_add_certX509_STORE_set_default_pathsX509_LOOKUP_fileX509_STORE_add_lookupX509_LOOKUP_ctrlX509_LOOKUP_hash_dirX509_STORE_get0_paramX509_VERIFY_PARAM_set_timeX509_STORE_set_flagsX509_STORE_set_ex_dataX509_STORE_set_verify_cbX509_STORE_newrb_block_procX509_STORE_set_trustX509_STORE_set_purposeX509_STORE_CTX_set_purposeX509_STORE_CTX_set_trustX509_STORE_CTX_get0_storelibruby.so.3.4libssl.so.1.1libcrypto.so.1.1libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.3.4GLIBC_2.4GLIBC_2.7GLIBC_2.14GLIBC_2.2.5OPENSSL_1_1_1OPENSSL_1_1_0/opt/alt/ruby34/lib64		

	�L`ti	
�Lii
�Lii
M���Mui	M�L0m	%Mm3M�Lm%Mm3MP�%�X�%��`�%`�%��%d���%H&��%����%@&��%r���%8&��%z���%(&��%����% &��%����%�&��%����%�&��%���%���%�� �%��(�%0&0�%��@�%��H�%&P�%��`�%��p�%����%���%�&��%���%�&��%���%&��% ���%&��%0���%&��%:���%�&��%I���%�&��%S���%�&�%[��%�&�%k��%�& �%y�(�%�&0�%��8�%�&@�%��H�%�&P�%��`�%��h�%�&��%����%��%b���%@5@�%n�P�%�O��%w���%�[�%���% d`�%��p�%s��%����%@� �%$�0�%����%8���%���%P���%�@�%g�P�%0���%}���%0��%2��%��`�%��p�%����%���%�� �%�0�%����%����%����% ���% I@�%1�P�%I��%����%t���%y���%~���%����%���%���%��%�`�%��h�%��p�%p���%���%`� �%u0�%0
��%���%���%���%�@�%DP�%�5��%���%�@�%%�%�X`�%�p�%�p��%���%�l �%!0�%�}��%���%@���%���%p�@�%�H�%@�P�%���%���%p���%`�&�8
&@
&H
&P
&&X
&�`
&Nh
&,p
&dx
&j�
&k�
&q�
&A�
&w�
&��
&��
&��
&��
&��
&��
&��
&��
&��
&��
&��
&�&�&&	& &5(&0&�8&<@&/H&P&X&-`&�h&;p&�x&��&��&��&��&��&�&��&�&��&�&�&�&
�&?�&C�&D�&N&o&�&�&� &�(&�0&�8&>@&BH&7P&X&,`&5h&?p&�x&W�&_�&�&u�&~�&��&��&��&�&��&=�&��&��&�&0@�%H�%P�%X�%`�%h�%p�%x�%��%��%	��%1��%
��%��%��%���%
��%��%��%��%��%��%��%��%�%�%�%�% �%(�%0�%8�% @�%!H�%"P�%#X�%`�%$h�%%p�%'x�%(��%)��%*��%+��%,��%-��%.��%/��%0��%1��%2��%3��%4��%5��%6��%7��%8�%9�%:�%;�%< �%�(�%=0�%>8�%?@�%@H�%AP�%BX�%C`�%Dh�%Ep�%Fx�%G��%H��%I��%J��%K��%L��%M��%O��%P��%Q��%R��%S��%T��%U��%V��%W��%X�%Y�%Z�%[�%\ �%](�%^0�%_8�%`@�%aH�%bP�%cX�%e`�%fh�%*p�%gx�%h��%i��%j��%k��%l��%m��%n��%o��%p��%q��%r��%s��%t��%u��%v��%x��%y�%z�%{�%|�%} �%~(�%0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%��%���%���%���%���%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%C��%���%���%4�%�%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%�(�%0�%8�%@�%H�%P�%X�%`�%h�%p�%
x�%��%
��%��%��%��%��%��%H��%��%�%�%�%�%�%�%��%�%�%�%�% �% (�%!0�%"8�%#@�%$H�%%P�%&X�%'`�%(h�%)p�%*x�%+��%���% ��%,��%-��%.��%/��%0��%1��%2�%3�%��%4�%5�%6�%7��%8�%9�%:�%;�%< �%=(�%30�%>8�%?@�%@H�%AP�%BX�%C`�%Dh�%Ep�%Fx�%G��%H��%I��%J��%K��%L��%M��%N��%O��%:�%P�%Q�%R�%S�%T�%U��%V�%W�%X�%Y�%Z �%[(�%E0�%\8�%N@�%]H�%�P�%^X�%_`�%`h�%&p�%ax�%���%b��%c��%d��%e��%f��%g��%h��%i��%j�%k�%l�%m�%n�%�%o��%p�%q�%r�%s�%t �%u(�%v0�%w8�%x@�%yH�%zP�%{X�%|`�%}h�%~p�%x�%���%���%���%���%���%���%���%���%���%�%��%��%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%��%��%��%��%��%��%���%��%L�%��%��%� �%�(�%�0�%�8�%�@�%H�%P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%��%��%��%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%��%��%��%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%X�%�`�%�h�%�p�%�x�%���%��%���%��%��%��%��%��%��%�%�%�%	�%�%
�%��%�%
�%�%�% �%(�%0�%�8�%@�%H�%P�%X�%`�%h�%p�%x�%��%��%��%��%��% ��%!��%"��%#��%$�%%�%&�%'�%(�%)�%+��%*�%+�%,�%-�%' �%.(�%/0�%08�%1@�%2H�%�P�%3X�%4`�%5h�%6p�%7x�%8��%9��%:��%;��%<��%=��%>��%I��%@��%D�%A�%B�%E�%6�%F�%��%G&H&I&J&K &L(&M0&O8&P@&QH&�P&RX&S`&Th&Up&Vx&W�&X�&Y�&Z�&[�&\�&]�&^�&�&_�&`�&a�&b�&c�&d�&e�&f&g&h&i&j &k(&l0&�8&m@&nH&pP&qX&�`&�h&rp&sx&t�&u�&v�&w�&x�&y�&z�&{�&|�&}�&~�&�&��&��&��&��&�&�&�&�&� &�(&�0&�8&�@&�H&�P&�X&�`&�h&�p&�x&��&��&��&��&��&��&��&��&��&��&��&��&��&��&��&��&�&�&�&�&� &�(&�0&�8&�@&�H&�P&�X&�`&�h&�p&�x&��&��&��&��&��&��&��&��&��&��&��&>�&��&9�&��&��&�&�&�&�&� &�(&�0&�8&J@&�H&�P&�X&�`&�h&�p&�x&��&��&��&��&��&��&��&��&��&�&��&��&F�&�&��&��&�&�&�&�&� &M(&�0&�8&�@&�H&�P&�X&�`&�h&�p&�x&��&��&��&��&��&��&��&��&��&��&��&��&��&��&��&��&�&K&�&�&. &�(&0&8&@&H&P&X&`&h&p&	x&
�&�&�&
�&�&�&�&�&�&�&�&�&�&�&�&�&&&&& & (&!0&"8&#@&$H&%P&&X&'`&(h&%p&)x&*�&+�&-�&.�&"�&/�&0�&1�&2�&3�&4�&6�&7�&8�&9�&:�&8&;&<&=&> &?(&@0&A8&B@&CH&DP&EX&F`&Gh&Hp&Ix&J�&K�&L�&M�&N�&#�&O�&P�&Q�&R�&S�&T�&U�&V�&X�&Y�&Z	&[	&\	&]	&^ 	&`(	&a0	&�8	&b@	&�H	&cP	&dX	&e`	&fh	&gp	&@x	&h�	&i�	&j�	&
�	&k�	&l�	&m�	&n�	&o�	&p�	&q�	&2�	&r�	&s�	&t�	&v�	&w
&x
&y
&z
&{ 
&|(
&}0
&�8
&@
&�H
&�P
&�X
&�`
&�h
&�p
&�x
&��
&��
&��
&��
&��
&��
&��
&��
&��
&��
&$�
&��
&��
&��
&��
&��
&�&�&�&�&� &�(&�0&	8&@&�H&�P&�X&�`&�h&)p&�x&��&��&��&��&(�&��&��&��&��&G�&��&��&��&��&��&��&�&�&�&�&� &�(&�0&�8&�@&�H&�P&�X&�`&�h&�p&�x&��&��&��&��&��&��&��&��&��&��&��&��&��&��&��&��&�
&
&�
&�
&� 
&�(
&!0
&���H��H�9�$H��t��H����5��$�%��$��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h��������h�������h�������h������h������h������h������h������h��q����h��a����h	��Q����h
��A����h��1����h��!����h
������h������h�������h�������h�������h������h������h������h������h������h��q����h��a����h��Q����h��A����h��1����h��!����h������h������h�������h �������h!�������h"������h#������h$������h%������h&������h'��q����h(��a����h)��Q����h*��A����h+��1����h,��!����h-������h.������h/�������h0�������h1�������h2������h3������h4������h5������h6������h7��q����h8��a����h9��Q����h:��A����h;��1����h<��!����h=������h>������h?�������h@�������hA�������hB������hC������hD������hE������hF������hG��q����hH��a����hI��Q����hJ��A����hK��1����hL��!����hM������hN������hO�������hP�������hQ�������hR������hS������hT������hU������hV������hW��q����hX��a����hY��Q����hZ��A����h[��1����h\��!����h]������h^������h_�������h`�������ha�������hb������hc������hd������he������hf������hg��q����hh��a����hi��Q����hj��A����hk��1����hl��!����hm������hn������ho�������hp�������hq�������hr������hs������ht������hu������hv������hw��q����hx��a����hy��Q����hz��A����h{��1����h|��!����h}������h~������h�������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h����������%�s$D���%�s$D���%�s$D���%�s$D���%�s$D���%}s$D���%us$D���%ms$D���%es$D���%]s$D���%Us$D���%Ms$D���%Es$D���%=s$D���%5s$D���%-s$D���%%s$D���%s$D���%s$D���%
s$D���%s$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%�r$D���%}r$D���%ur$D���%mr$D���%er$D���%]r$D���%Ur$D���%Mr$D���%Er$D���%=r$D���%5r$D���%-r$D���%%r$D���%r$D���%r$D���%
r$D���%r$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%�q$D���%}q$D���%uq$D���%mq$D���%eq$D���%]q$D���%Uq$D���%Mq$D���%Eq$D���%=q$D���%5q$D���%-q$D���%%q$D���%q$D���%q$D���%
q$D���%q$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%�p$D���%}p$D���%up$D���%mp$D���%ep$D���%]p$D���%Up$D���%Mp$D���%Ep$D���%=p$D���%5p$D���%-p$D���%%p$D���%p$D���%p$D���%
p$D���%p$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%�o$D���%}o$D���%uo$D���%mo$D���%eo$D���%]o$D���%Uo$D���%Mo$D���%Eo$D���%=o$D���%5o$D���%-o$D���%%o$D���%o$D���%o$D���%
o$D���%o$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%�n$D���%}n$D���%un$D���%mn$D���%en$D���%]n$D���%Un$D���%Mn$D���%En$D���%=n$D���%5n$D���%-n$D���%%n$D���%n$D���%n$D���%
n$D���%n$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%�m$D���%}m$D���%um$D���%mm$D���%em$D���%]m$D���%Um$D���%Mm$D���%Em$D���%=m$D���%5m$D���%-m$D���%%m$D���%m$D���%m$D���%
m$D���%m$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%�l$D���%}l$D���%ul$D���%ml$D���%el$D���%]l$D���%Ul$D���%Ml$D���%El$D���%=l$D���%5l$D���%-l$D���%%l$D���%l$D���%l$D���%
l$D���%l$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%�k$D���%}k$D���%uk$D���%mk$D���%ek$D���%]k$D���%Uk$D���%Mk$D���%Ek$D���%=k$D���%5k$D���%-k$D���%%k$D���%k$D���%k$D���%
k$D���%k$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%�j$D���%}j$D���%uj$D���%mj$D���%ej$D���%]j$D���%Uj$D���%Mj$D���%Ej$D���%=j$D���%5j$D���%-j$D���%%j$D���%j$D���%j$D���%
j$D���%j$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%}i$D���%ui$D���%mi$D���%ei$D���%]i$D���%Ui$D���%Mi$D���%Ei$D���%=i$D���%5i$D���%-i$D���%%i$D���%i$D���%i$D���%
i$D���%i$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%}h$D���%uh$D���%mh$D���%eh$D���%]h$D���%Uh$D���%Mh$D���%Eh$D���%=h$D���%5h$D���%-h$D���%%h$D���%h$D���%h$D���%
h$D���%h$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%}g$D���%ug$D���%mg$D���%eg$D���%]g$D���%Ug$D���%Mg$D���%Eg$D���%=g$D���%5g$D���%-g$D���%%g$D���%g$D���%g$D���%
g$D���%g$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%}f$D���%uf$D���%mf$D���%ef$D���%]f$D���%Uf$D���%Mf$D���%Ef$D���%=f$D���%5f$D���%-f$D���%%f$D���%f$D���%f$D���%
f$D���%f$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%}e$D���%ue$D���%me$D���%ee$D���%]e$D���%Ue$D���%Me$D���%Ee$D���%=e$D���%5e$D���%-e$D���%%e$D���%e$D���%e$D���%
e$D���%e$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%}d$D���%ud$D���%md$D���%ed$D���%]d$D���%Ud$D���%Md$D���%Ed$D���%=d$D���%5d$D���%-d$D���%%d$D���%d$D���%d$D���%
d$D���%d$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%}c$D���%uc$D���%mc$D���%ec$D���%]c$D���%Uc$D���%Mc$D���%Ec$D���%=c$D���%5c$D���%-c$D���%%c$D���%c$D���%c$D���%
c$D���%c$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%}b$D���%ub$D���%mb$D���%eb$D���%]b$D���%Ub$D���%Mb$D���%Eb$D���%=b$D���%5b$D���%-b$D���%%b$D���%b$D���%b$D���%
b$D���%b$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%}a$D���%ua$D���%ma$D���%ea$D���%]a$D���%Ua$D���%Ma$D���%Ea$D���%=a$D���%5a$D���%-a$D���%%a$D���%a$D���%a$D���%
a$D���%a$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%}`$D���%u`$D���%m`$D���%e`$D���%]`$D���%U`$D���%M`$D���%E`$D���%=`$D���%5`$D���%-`$D���%%`$D���%`$D���%`$D���%
`$D���%`$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%}_$D���%u_$D���%m_$D���%e_$D���%]_$D���%U_$D���%M_$D���%E_$D���%=_$D���%5_$D���%-_$D���%%_$D���%_$D���%_$D���%
_$D���%_$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%}^$D���%u^$D���%m^$D���%e^$D���%]^$D���%U^$D���%M^$D���%E^$D���%=^$D���%5^$D���%-^$D���%%^$D���%^$D���%^$D���%
^$D���%^$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%}]$D���%u]$D���%m]$D���%e]$D���%]]$D���%U]$D���%M]$D���%E]$D���%=]$D���%5]$D���%-]$D���%%]$D���%]$D���%]$D���%
]$D���%]$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%}\$D���%u\$D���%m\$D���%e\$D���%]\$D���%U\$D���%M\$D���%E\$D���%=\$D���%5\$D���%-\$D���%%\$D���%\$D���%\$D���%
\$D���%\$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%}[$D���%u[$D���%m[$D���%e[$D���%][$D���%U[$D���%M[$D���%E[$D���%=[$D���%5[$D���%-[$D���%%[$D���%[$D���%[$D���%
[$D���%[$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%}Z$D���%uZ$D���%mZ$D���%eZ$D���%]Z$D���%UZ$D���%MZ$D���%EZ$D���%=Z$D���%5Z$D���%-Z$D���%%Z$D���%Z$D���%Z$D���%
Z$D���%Z$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%}Y$D���%uY$D���%mY$D���%eY$D���%]Y$D���%UY$D���%MY$D���%EY$D���%=Y$D���%5Y$D���%-Y$D���%%Y$D���%Y$D���%Y$D���%
Y$D���%Y$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%}X$D���%uX$D���%mX$D���%eX$D���%]X$D���%UX$D���%MX$D���%EX$D���%=X$D���%5X$D���%-X$D���%%X$D���%X$D���%X$D���%
X$D���%X$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%}W$D���%uW$D���%mW$D���%eW$D���%]W$D���%UW$D���%MW$D���%EW$D���%=W$D���%5W$D���%-W$D���%%W$D���%W$D���%W$D���%
W$D���%W$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%}V$D���%uV$D���%mV$D���%eV$D���%]V$D���%UV$D���%MV$D���%EV$D���%=V$D���%5V$D���%-V$D���%%V$D���%V$D���%V$D���%
V$D���%V$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%}U$D���%uU$D���%mU$D���%eU$D���%]U$D���%UU$D���%MU$D���%EU$D���%=U$D���%5U$D���%-U$D���%%U$D���%U$D���%U$D���%
U$D���%U$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%}T$D���%uT$D���%mT$D���%eT$D���%]T$D���%UT$D���%MT$D���%ET$D���%=T$D���%5T$D���%-T$D���%%T$D���%T$D���%T$D���%
T$D���%T$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$DM��L�$H��H�=wMD�M��MD�M��MD�1�L��L��� ���H�����L���{���H���s���H���k���H���c����^���H���V���H���N���L���F���L���>���H���6���H���.���L���&���H�<$����L������H���
���H������H�����H�����H�����H�����H���ݿ��H���տ��H���Ϳ��H���ſ��H��轿��H��赿��H�=�01��7����H��L��H�������tH�=�Y$H�5N-1��j���H��[]A\�H���j���H���b���L���Z����U����P����K���H���C���H���;���H���3���H���+���L���#���H�=�_1�����n�H�=�T$H��T$H9�tH�.T$H��t	�����H�=�T$H�5�T$H)�H��H��H��?H�H�tH�5T$H��t��fD�����=uT$u+UH�=R$H��tH�=�$�I���d����MT$]������w������H�]R$H�Ð��H��H��H��HE�H�
:R$H��ff.���H��1�����f���H��dH�%(H�D$1��3���H�$H��tH�����H�$H�T$dH3%(uH���������S���H����1�H�����H�����H��H���3����H��u�H��[�@��H���S����H�H��H�Ѓ��f�AW�f�L�=�AVAUATUSH��XdH�%(H��$H1�H�|$P)D$@L�t$,L�l$8L�d$(H�l$0�H�H�D$@H�$L��L��L��H���!��H��H��u)H��$HdH3%(��H��X[]A\A]A^A_�H���x���H��H�D$��H��H�D$����D$,L�T$I��L�\$�����H�|$8tDH�L$8H�<$�1�H�
3L�D$L�T$L�\$�ÿ��L�\$L�T$L�D$�o����:��H��H�D$8�ff.����H��H��H�=�O$���f.���H��dH�%(H�D$1�H�t$�D$����|$��uH�T$dH3%(u
H��������ff.�@��AUATUSH��H��t}H�����A�ą�xNHc�����I��E��t+1�@��H������H�����L��H�����D9�u�H��L��[]A\A]�DH�1O$H�8��H��[]A\A]����H�O$A�H�8u�H��O$��H�=\�H����H��	�H�=M��t���H�;A�`1�H�
@�H�@���Q��Y���@H�IO$��H�=��H��(���H���H�=�����H�;A�`1�H�
�H�������������AUATUSH��H��t}H���5��A�ą�xNHc��V��I��E��t+1�@��H������H�����L��H���x�D9�u�H��L��[]A\A]�DH��M$H�8��H��[]A\A]���H��M$A�H�8u�H�>N$��H�=�H�����H��	�H�=�����H�;A�a1�H�
�H�������Y���@H��M$��H�=��H����H���H�=�����H�;A�a1�H�
k�H�k���|��������AUATUSH��H��t}H������A�ą�xNHc�����I��E��t+1�@��H����;��H�����L��H����D9�u�H��L��[]A\A]�DH�QL$H�8��H��[]A\A]���H�1L$A�H�8u�H��L$��H�=|�H����H��	�H�=m����H�;A�b1�H�
`�H�`���q��Y���@H�iL$��H�=�H��H���H���H�=#��/���H�;A�b1�H�
��H�������������AUI��H�= ���ATI��UH��SH��dH�%(H�D$1�H�T$���H��H��t`�D$�E��uuM��tH�{H� u3L��L�����H�L$dH3%(H��uLH��[]A\A]�f.�H�{��f.��D$��t����9���������@��UHc�SH��H��dH�%(H�D$1�H�T$���H�ߺ�H�5�H���/��|$��uH�L$dH3%(H��uH��[]���������H��t<1�L�
��fD�A�ȃ�A��A�	E��G��LFD�FH��H9�u��f.���AWAVAUI��ATUHc�SH��dH�%(H�D$1�H������tH��u:H��I$H�8�������H�|$dH3<%(�H��[]A\A]A^A_Ð��u�H�H�ƒ�H��u�H�YH9�|�H�q�� tH�qH��L���;���������Y��������L�t$Lc�M�I��A��L��L��H�=������T$����H���K���H�XI9���H�pH� t�H�pH��L�������� ���@H�AI$��H�=�H�� �H��"�H�=<���H�;A��1�H�
�H��������������f.�1ɉډ�L���b�����D��H�=�1�������������h�������ff.����H��H�5�I$1�1�dH�%(H�D$1����H��H�$����H�$H�T$dH3%(uH����~��ff.���SH�5<I$H���L���uH��[�H��[������H�=G$H�8u����f.��;���ff.���ATUH��SH��H�� dH�%(H�D$1�H����1�H�L$H�T$1���H��u,H��H�����H�L$dH3%(��H�� []A\�@H����H�{I��u^M��H��H��LD�L���5���D$tH�T$H��tH�5)H��1��3�������@1�1��?���H���S�����H�5��H��������D��SH��H��H���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1��H��t1H��$�H���$H�D$H�D$ �D$0H�D$���H��H���|�H���T���@��AUATUH��SH��H��u�H�����DH����u�H���H��u��?���I��H��uO�f�H����H9�}NH��H��H����I��H�F$L��H�0���H��t3L���#��L��H���H�H�E�� u�H�EH9�|�H��L��[]A\A]�H�5�C$L���)��H�E$H�5��H�81��Q���H��D$1�H�81��>���ff.���H��H�|$H��t%H�|$�c��H�D$H�xH����H��H���H��D$�H�5�H�81��ӯ����SH��H�����t�����t.H��[Ð1������u�H�>D$H�5��H�81�药��D��^����u�H�D$H�5P�H�81��b���f���SH��H�|$H�$H�t$���H��H�����H�T$H�$H�RH9QuH��H��������H�H����[�H�EB$H�5~�H�81���@��U�SH����1�1���������H��B$H���<��H�=������H�D���H�5��H��H��b���� H�=&�衲��H�;H�5��H�����1��H��H�����H�;H�5��H���n��H�;�!  H�5���Z��H�;�H�5���F��H�;1�H���H�5�����H�;�H�/���H�5�����H�-�B$H���d��H��A$H�;H�5��H����H�=�A$H�EH��4��H�;1�H�h�H�5a��L��H�;�H�]�H�5L��1��H�;1�H���H�5;����H�=��
��H�NC$�!����<����g����������������n���)�����������Z����u��������F����H��[]�V���H�_B$H�5�H�81��>��f.�@���H�=���۰��ff.���AT�I��1�US�Y�H�pH��Hc�H9���H�{H� uiL������P������wWHc�H;s~5�hH��Hc��Z���H�{H� tH�{�L����j�����~4Hc�H���K���H��[]A\�H�{�H�A$H�5��H�81���H�A$H�5��H�81��ګ��f.�H��H�|$H�|$���H�D$H�xH� tH�x1��0��H��tH���fDH�D$H�xH� tH�x����H��u�H�|@$H�T$H�5�H�81��N���ff.���USH��H�5gB$dH�%(H�D$1����H���B���H�T$H�=V���H��H������H��H��蠷���|$��uH�L$dH3%(H��uH��[]��������@��H��H�5�A$dH�%(H�D$1����H��H�$��H�����Ǹ��t
���H�����H�T$dH3%(uH����v��fD��H��H�5yA$dH�%(H�D$1��,��H��H�$�@�H�����Ǹ��t
���H���0��H�T$dH3%(uH������fD��UH��SH��H��H��H�5NA$���H��uH��1�[]�H���h���H��H���]���H��H��[H��]錬��ff.����H��(H�|$H�T$H�t$H�L$��H�|$�u�H�|$�k�H�D$H�PH� tH�PH�D$H�pH� tH�pH�D$H�xH� tH�x������t
�H��(�H�>$1�H�81����H��H�5@$����H��t$H�Ǩu���H���f����H���H��=$H�5c�H�81�莨��ff.�SH��uJH��=$H�H��t0f.�H�=a?$H���!��H��u[H������H��H��uڸ����[�@��t*H��tWH��t]@��u?@��t`H�s;$H���fDH�_�f.�H�Ǩt	�$���[�f�����[�H��<$H��H�<$H��H�<$H��r���H�[<$H��c���AWA��AVAUI��ATU��SH��H��8dH�%(H�D$(1���t
�ҸE�H�5�>$H���Z��H���H;�>$�H;�>$�6H;w>$��H;b>$�F�D$�H���,���H�߉D$���M�e�D$Mc�M9��y�H�5>$H������H96>$�E1�E��A��A���|$����T$D���D�T$���D�T$�T$�ƉD$D�����1�Hc��c���D�T$D�\$H��H�@H� tH�CH�D$ D�D$D��D��H�D$ �L$H��H�D$�/���L$H�|$��E1�D�����I�uI�E tI�uH�|$ L���J���Lt$ E����H�L$(dH3%(H����H��8[]A\A]A^A_�fD�T$D�������1�Hc�蘸��H��H�@H� tH�CD�D$�L$H�|$ ��D��H�D$ H�|$�r��I�uI�E tI�uH�|$ L��裼��Lt$ E���Y���H�|$�{����J���fD�D$�����D$�����L�|$L���C���L���;����
���fD�D$@�������H��9$H�5p�H�81��֤��H��9$H�5��H�81�辤��ff.���AWAVI��AUATUSH��(H�5�;$dH�%(H�D$1�L�l$�z��H�5�;$L��H��H����E1����D$�W��H�
F��H�?�H���̰��1�1�H���P���I���ZH����I9�}yH�CJ�<�H�|$H��tH�5<$����H��uAH�|$����L��I��H�D$�.���H�t$L���A���H��� u�L;{} H�C �DH��� u@H�CH��L9�u<�T$L��L�����H�T$dH3%(u0H��([]A\A]A^A_�H�����H�x8$H�5Z�H�81��O����j��f.���H�m9$ATUH��S��H��u L�%D�L���S��H�D9$H��t�H�=;$H���H��[]A\���ff.�@��H�9$ATUH��S��H��u L�%�
�L������H��8$H��t�H�=�:$H���H��[]A\�/���ff.�@��H��8$ATUH��S��H��u L�%�
�L�����H��8$H��t�H�=@:$H���H��[]A\����ff.�@��H�e8$ATUH��S��H��u L�%$
�L���3��H�<8$H��t�H�=�9$H���H��[]A\�o���ff.�@��H��8$ATUH��S��H��u L�%��L������H�d8$H��t�H�=�8$H���H��[]A\����ff.�@��H�58$ATUH��S��H��u L�%d�L���s��H�8$H��t�H�=�8$H���H��[]A\鯿��ff.�@��H��7$ATUH��S��H��u L�%�L�����H��7$H��t�H�=�8$H���H��[]A\�O���ff.�@��H��6$ATUH��S��H��u L�%��L�����H��6$H��t�H�=P8$H���H��[]A\���ff.�@��H��6$ATUH��S��H��u L�%D�L���S��H�l6$H��t�H�=�7$H���H��[]A\鏾��ff.�@��H�=6$ATUH��S��H��u L�%�
�L������H�6$H��t�H�=�7$H���H��[]A\�/���ff.�@��H��5$ATUH��S��H��u L�%�
�L�����H��5$H��t�H�=7$H���H��[]A\�Ͻ��ff.�@��H��5$ATUH��S��H��u L�%$
�L���3��H�d5$H��t�H�=�6$H���H��[]A\�o���ff.�@��H�55$ATUH��S��H��u L�%�	�L������H�5$H��t�H�=H6$H���H��[]A\����ff.�@��H��4$ATUH��S��H��u L�%d	�L���s��H��4$H��t�H�=�5$H���H��[]A\鯼��ff.�@��H��4$ATUH��S��H��u L�%	�L�����H�\4$H��t�H�=x5$H���H��[]A\�O���ff.�@��H�-4$ATUH��S��H��u L�%��L�����H�4$H��t�H�=5$H���H��[]A\���ff.�@��H��3$ATUH��S��H��u L�%D�L���S��H��3$H��t�H�=�4$H���H��[]A\鏻��ff.�@��H�}3$ATUH��S��H��u L�%��L������H�T3$H��t�H�=@4$H���H��[]A\�/���ff.�@��H�%3$ATUH��S��H��u L�%��L�����H��2$H��t�H�=�3$H���H��[]A\�Ϻ��ff.�@��H��2$ATUH��S��H��u L�%$�L���3��H��2$H��t�H�=p3$H���H��[]A\�o���ff.�@��H�u2$ATUH��S��H��u L�%��L������H�L2$H��t�H�=3$H���H��[]A\����ff.�@��H�2$ATUH��S��H��u L�%d�L���s��H��1$H��t�H�=�2$H���H��[]A\鯹��ff.�@��H��1$ATUH��S��H��u L�%�L�����H��1$H��t�H�=82$H���H��[]A\�O���ff.�@AWH��AVAUATUH��SH��H��L�'H��L$8H�t$hH�L$\D�D$H�|$`I��H�T$ L�L$0dH�%(H��$�1�H�T$XH�D$(H�D$hL�d$`�;���H�L$`����
L�t$hI9���
A�ŋD$\����������u�@H�41$HD41$H�D$D��T$L)�� I�ωD$����D$���gA��t	M���z
H�D$H9�0$K�,7D�d$XH�;u
A���L�L���Q���H+H�\$Ic�H;�0$u
A���cH��$�H�DH��$�H�D$H��$�H�*/$H��u&H�BfD�H���K��H�/$H��t�H��H�-,$H��$��H�8耷��H��H�L$hL�l$(J�9I�H�D$0H�(H��tL�H9���	H�D$ L�(H��H��$�dH3%(�N	H�ĸ[]A\A]A^A_��H��/$H�D$����H��/$H�D$�x�����D$XL;L)��D$LH�D$(L�H�D$p�(���A��!H�u/$LD�H�D$L��M�����D$8E1��D$(H�D$xH�D$@H�D$pH�D$8�@H�|$H�����M���L�L$@D�D$L��H�ߋL$(H�T$8H�D$x����H��H�D$xI�I)�A��!u�H������u�H�5�.$H���t��H��.$H9�u�K�,'H�D$H9T$��@�|$L�5�|$LH��$���HcD$LHDŽ$�H�DH��$�H�D$H��$�H� -$H��u$H�@�H���#��H��,$H��t�H�=�.$H��$��H���[���H���諱��I��HcD$8L��H�t�V��H�D$ H�8H�@H��kH�t?L���.��H�@L��3K�t?L�����H�|$hH�@H���H�t?L�������|$L��H�H�փ������D$\H�5H-$�����tH�59-$��u�@H�54-$HD54-$L�����HcD$XL��H�t���L������L�t$h���K�,'H��,$H�D$H9T$�E���H��$�HcD$LH�DH��$�H�D$H��$�H�+$H��u#H��H�����H�\+$H��t�H��H�m($H��$��H�8���H��H�5.,$A��!��1�H���"��L�l$pH�L$h�'���E1�Ic�H�53�#H��H��H�LH���{���E����H��*$H��u"H��f��H������H��*$H��t�H�=�,$1�1�H��褿��H�����@A����H�
/�D��Hc�H�>��f.��H���c���<���fD��H�����L�����H��������˪��H�����L�)H��$�H�DH��$�H�D$HDŽ$�H��$�H��)$H��u$H��@�H������H��)$H��t�H��$��H��L���'���H��A�������H�5�*$K�T6H���������H�|$xH�t$xH��1��D$p�D���I��H����H�T$pH��H�=�	����L��H�D$�����|$pH�D$����fDH�H�
N*$E1�H�H�Ic�H9L$��������f.�H�|$xH�t$xH��1��D$p��I��H���RH�T$pH��H�=i�t���L��H�D$����|$pH�D$���v����a����H�|$xH�t$xH��1��D$p�ԙ��I��H����H�T$pH��H�=	����L��H�D$�����|$pH�D$�������@H���+�?�
���H�H��E1�H��H�;������H���p�?�g��]1�H�=U�E1��•��H�H�
�($���H�|$xH�t$x1�H�����H���H��E1��x���H��H�
�($�a���@H�|$xH�t$xH��1��<���I��H����H���8���A�Ņ���L���ŝ��D�����H���5�������H�|$xH�t$xH��1��<���I��H����L�pHc0I�}L���A��LE�袣��L��H�D$�E���H�H�D$H�
�'$����L�L���u������H�D$HDŽ$�#HDŽ$�H��$�H��&$H��u(H�|���H�����H�d&$H��t�H�=�'$H��$��H��軮��H�����H��$�H�D$HDŽ$�!H��$�H�&$HDŽ$�H��u H���H�����H��%$H��t�H�= '$H��$��H���;���H���v�������H�����I��H��t L��H���C��L������L���#����^���L������H�g$$1�H�81��C����^���H�O$$H�5M�H�81��&���H�7$$H�5��H�81�����H�$$H��H�5��H�81���H�$$H�50�H�81��ێ��H��#$H�5��H�81��Î����AWH��AVAUATUSH��HH�t$dH�%(H�D$81�H�D$ ����H�|$H�D$�ɡ��H���q���H�D$(H�PH� tH�PL�xH�T$1�L�<$�G���H��M��~IL�t$0L�l$ L�d$L��M��E1�1�H�D$0L��L���q�H��H������H�D$0I)�H�M���H�D$(H�D$0H�D$(H�$H��tL�D$ H9�u'I9�u"H�L$8dH3%(H��u.H��H[]A\A]A^A_�H��"$H�$H��H�5��H�81�莍��詮��f���SH��H��@H�t$dH�%(H�D$81�H�D$ H�D$(�ؚ��H�|$H�D$艠��H���1���H�D$H�PH� tH�PH�XH�T$H�|$1�H�T$(L�L$ E1�H���V�H�T$H�T$0H�T$H��tH�T$ L�D$(H9�uI9�uH�L$8dH3%(u!H��@[�H��!$H��H�5��H�81�蝌��踭�����SH��H��@H�t$dH�%(H�D$81�H�D$ H�D$(���H�|$H�D$號��H���A���H�D$H�PH� tH�PH�XH�T$H�|$1�H�T$(L�L$ A�H���c�H�D$H�D$0H�D$H��tH�T$ L�D$(H9�u I9�uH�L$8dH3%(�u!H��@[�H�� $H��H�5��H�81�襋�������Sf�H��H�Ā�WdH�%(H�D$x1�H��)$)D$)D$ H�D$0��t>����1�H�=��致���H�t$xdH34%(��H��[��H�pH�PH�HVH�PL�HL�@H�5Z�1�蘧��^_���=���^�D$��D�Hc$��D$H�T�LH�pH�PH�HVH�PL�HL�@H�5'�1��8���ZY�������Hc$�D$H�TH�H�T$hH�DH�D$@HcD$H�DH�D$HHcD$H�DH�D$PHcD$H�DH�D$XHcD$H�DH�D$`H�#!$H��u'H�����H���C���H�� $H��t�H��H�m$H�L$@�H�8������fDHc$l�D$H�T�B���f��$���@�$�D$�����親��H��$H�SH�5��H�81��j���H��$H�SH�5��H�81��N���ff.���釶�����AUATUH��SH��H��dH�%(H�D$1�觻��I�Ĩt`H��I��?H�W)QΠ�EH�H��H��H��
L)�Hi€QH)�Hc�H�H9��[���UH�D$dH3%(��H��[]A\A]�@H��$H�$�H��u%L�-9�D�L��賽��H�d$H��t�I��L��H��L���q���H�Ǩuj�5����EH�+$H�$�H��u'H�-����H���S���H��$H��t�L��H��L�������t H�H��"���D�����f�H���ؙ����������Hc7H�鐚����USH��H��tC1��
t1��H��H��tFH��褳��H��H���	���H��H��[]���3���H����H��$H�5�H�81��F���H��$1�H�81��3������7�����SH��H�|$H��t#H�|$H���o���H��H�����H��tH��[�H�$H�5[�H�81��ц��H�j$1�H�81�辆��ff.���AVAUATI��USH��@dH�%(H�D$81�������t;L�����H�5�$L����j���H�Ń��H�
����Hc�H�>��H�5y$L���9���H�|$0H�D$0�z���H��1�1�L���{��H�L$8dH3%(��H��@[]A\A]A^�f.�H�T$(H�t$0H��讛���T$(H�t$01�1�����I��H���0L�5	$�6H�5{�����H��H����f��L��H��E袵��1�H���h���Hc�H���.H�T$H��1�����T$H�D$0���KH�PH� tH�PH��H�t$ H�T$(H�T$ ����H��������H�|$0H�t$ H�GH� tH�GH)��!���H�L$H�T$I��H�t$H�|$(�������H+\$H�|$0H��諱�����fDH����H��6�H��H�5[�M��Ŭ��I��E��H��H������H��$H�5b�H�81��Z���f.�1�H��趞��L�5�$I���~����H�59$L���!���H�Ǩ������A��H�H�l$0H���H�|$0�C�������I��H���RH�D$0H�PHc�H9��j��H�pH� tH�pL��A���p���I�EMc�H���L	�L�5K$I�E����f�H�|$0H�l$0�і������I��H����H�D$0H�PHc�H9�����H�pH� tH�pL���2���L�5�$�}���fDH���q���I��H����L�5$�P���f�L���x���H��萑��I��H��tXH�UHc�H9��u��H�uH�E t�H�u�w����H�T$(H�t$0H���~����T$(H�t$01�1�茞��I��H������H��$1�H�81��}���DH�����L�51$I������蛉���E���H�g$H�5/�H�81��>���H���6���H�G$H�5>�H�81������9���H�*$H�5/�H�81�����H������|$���L��A���s���H��$H�5��H�81��́��H��$H�5_�H�81�赁��H��$H�5��H�81�蝁��ff.�f���SH�5�$H���|���H�}$H��H�2�J���H��u%H�5v$H���V���H�����uH��[���DH��[���H�H$H�5)�H�81�����ff.�@��AV�	H�=6�AUATL�%S�#UH�-�S1��#���H���+����H�=�H� $����H�������H�=�H��$���H������H�=��H��$�õ��H���˴���H�=��H��$裵��H��諴���H�=��H��$胵��H��苴��H�=���ߜ��H�=��H�Y$�̜��H�=��H�>$蹜��H�=��H�$覜��H�=�H�$蓜��H�=�H��$耜��H�5y�H��$H��$H�8�c���H�L$L�-=$H�5S�H��H�I�E诐��H��$I�}�H�57�H�H�������I�}�H���H�5����I�}�H�}�H�5�����,���I�}H�5��H��I���6���I�}�E��I�,$I���E<[t'H�TH������H������L��H��H��蝙��I�}H��H��u�H� $H�5��H��ɏ��H��$1�H�	���H��H�5�H�跤��H�I�}H�5o�蔏��1�H�����H�5��H��H��$腤��H�I�}H�5G��b���1�H����H�5��H��H�H$�S���I�}H�@$H�5��,���I�}�����H����H�5�H��$虘��I�}H�$H�5����I�}�����H����H�5��H��$�_���I�}H��$H�5��踎��I�}�����H���H�5��H�z$�%���I�}H��$H�5���~���I�}�����H�.��H�5o�H�8$���I�}H�X$H�5[��D���I�}�����H�t��H�5?�H��$豗��I�}H�$H�5-��
���I�}�����H����H�5�H��$�w���I�}H��$H�5���Ѝ��I�}�����H����H�5��H�r$�=���I�}H��$H�5��薍��I�}�����H����H�5��H�0$����I�}H�p$H�5���\���I�}�����H���H�5��H��$�ɖ��I�}H�6$H�5x��"���I�}�����H�2��H�5\�H��$菖��I�}H��$H�5M����I�}�����H�X��H�51�H�j$�U���I�}H��$H�5�讌��I�}�����H�~��H�5�H�($����I�}H��$H�5���t���I�}�����H����H�5��H��$���I�}H�N$H�5���:���I�}�����H����H�5��H��$觕��I�}H�$H�5������I�}�����H����H�5{�H�b$�m���I�}H��$H�5m��Ƌ��I�}�����H���H�5Q�H� $�3���I�}H��$H�5=�茋��I�}�����H�<��H�5!�H��$���I�}H�f$H�5��R���I�}�����H�b��H�5��H��$返��I�}H�,$H�5������I�}�����H����H�5��H�Z$腔��I�}H��$H�5���ފ��I�}�����H����H�5��H�$�K���I�}H��$H�5{�褊��I�}�����H����H�5_�H��$����I�}H�v$H�5J��j���I�}�����H����H�5.�H��$�ד��H�I�}H�5��4���I�}�����H���H�5��H�$術��H�=r$�H�^��H�5���|��H�=S$1�H�r��H�5�����H�=7$1�H����H�5���ʞ��H�=$1�H�J��H�5��讞��H�=�$H���H�5��贌��H�=�$H�n�H�5y�蚌��H�=�$�H�W��H�5���[���H�=<$1�H�K��H�5���?����*���H�5$�H��H��$�x��H�5�$�H�=�$�x��H�5�$�H�=�$��w��H�5�$�H�=�$��w��H�5�$�	H�=�$�w��H�5$�H�=�$�w��H�5�$�
H�=l$�w��H�5X$�H�=T$�ww��H�5($�H�=<$�_w��H�5�$�!H�=$$�Gw��H�5x$�#H�=$�/w��H�5�$�%H�=�
$�w��H�5�$�'H�=�
$�v��H�5�$�)H�=�
$��v��H�5x$�+H�=�
$��v��H�5X$�-H�=�
$�v��H�5$�/H�=|
$�v��H�5�
$�1H�=d
$�v��H�5$�3H�=L
$�ov��H�5�
$�5H�=4
$�Wv��H�5�
$�7H�=
$�?v��H�5�
$�9H�=
$�'v��H�5�
$�=H�=�$�v��I�}[H�5�H��$]A\A]A^�����USH��H��dH�%(H�D$1�H�?H�<$H��t@��ta�H���؈��H�$H�pHc�H9�����H�xH� ���y��H����H�$H�H�L$dH3%(��H��[]�H���H��u�H�M
$H�-�H��u��H���C���H�,
$H��t�H�<$1�1�H������H�$�N���fDH�x�l���H�h	$H�5��H�81��t���ҕ��f���U1ҾsSH��H��(dH�%(H�D$1�H�L$�Œ��H�D$H�T$H�xH�0����H��H���v���|$��uH�t$dH34%(H��uH��([]��*����U���D��H�������'������UH�5T�#H��AWAVAUATSH��dH�%(H�E�1�� ���H���%H��I������X��I��=���Lc�H��H�E�I�FH��H%�H)�H���H��H9�tH��H��$�H9�u����L�|$L�m�I���L��L������9���L��L���ݰ��H��x@H��������?H!�L������H�DH�M�dH3%(��H�e�[A\A]A^A_]�@H��H	��f�Lc�L�m�L��L���.|��I���k���fDH)�H�L��J���H�$H�5�H�81��r��L��肩��H�=�
$H�5�1��}r��蘓������י���PX1�1�H��H�=�
$�Jr��f.���S1�H���#��s��H������H��t	H�C H��[����f���UH�5T�#SH���:���H��tTH��H�$H�4�#1�H�8�s��H��H���w��H��H��t>H�E H���ۍ��1�H�߅�@��諁��H��H��[]�H�
$H�5�H�81��q��H�=�	$H�5�1��tq��@PXH�5��H��H��$H�81��Rq��f���UH�5��#SH���z���H��tCH��荔��H��H��tK��H���3���H�ߺ�H�5z�H������H��H��[]�H�[$H�52�H�81���p���u���D��H��H�5�#���H��tH���ϣ��H��H�H�D��.���ff.���H��H�5��#輆��H��t!H��菣���P��I�H����Hc�H�D�������H��H�5��#�|���H��tH�������H�H��H�Ѓ�����f���SH�5T�#�?���H��t1H��H��诪����t1�[��H������¸��u�1����T���@��H��H�5�#���H��tH��这����H�H��H�Ѓ������f���H��H�5��#謅��H��tH�������H�H��H�Ѓ������f���UH��SH��H��H��H�N$H�0���H��u	H��1�[]�H��H�5V�#�A���H��H��t4H�5B�#H���*���H��tH��H��蚕����u�H���[]��U���H�.$H�5�H�81��n��ff.�f�UH��AWAVAUI��ATSH��H��8dH�%(H�E�1�����I��H��?H�}�H�M�I�H��H��L1�H)��PH��H��H9�u�L����n��H��H���BM����H�u�dH34%(H���8H�e�[A\A]A^A_]�f�1�H��覇��I��H=����H=���H�@H��H�E�H��H%�H)�H���H��H9�����t	H)�H�L�H�E�L�|$H�E�I���E1�H��A�L��L���r���L��L��D��A���n��H�}�H���5���H��t[E�������H���*}������DH��H��$��b���H�PH�E�L��H��H��H�E��͛��I���g���H�=$H�5W�1���l�����H�=$H�5G�1�����fD��USH��(dH�%(H�D$1�����H�H��H�L$��t.����H�~@����s����H�L$�f��
H����H��t��tH���r���H�H�Ѓ�H��t��u�H�������H����H��#H��H�0�Ɨ��H�5/�#H��H�����������H�D$H���H�|$H�5�#���H����H�|$H����p��H���\DH�T$dH3%(H����H��([]�f.��K�����fD���O���H���H��
�?���H�5��#H���h���H�D$H���hH�|$H���m�����������H���7~��H�L$���D�#���H�D$H���#����~2��
tu����H�|$�Ҩ��H�|$H����|���������j����H�|$�֒��H�L$H�T$H�yHc�H9�������H���Ҧ��H�������&�H�|$�f���H�|$H���ɥ���������H�=j$1��#j��H�|$�f���H�L$H�T$H�yHc�H9��������H���j��H���a��������!������H��#��H�5g�H�81��i��H��#H�5�H�81��i��H��#H�5&�H�81��i��f�USH��H��H�-��#H�u�G���H��ub��u)H��t��t�H��H��[]�@H���H��
u�H�}1�H�w�#��j��1�H��H���u���H��tH�E H��H��[]�f�H��H��H��[]��~���ff.���UH��H�5!�#SH�����H��tNH��H���7���H��t#H�5��#H����~��H��tAH��H���R�����tH��1�[]�DH���[]�H��#H�5��H�81��\h��������UH�5��#SH���z~��H��t9H��H�S�#1�H�r�#H�8��i��H��H���_m��H��t&H�E H��H��[]�H�e�#H�5<�H�81���g��H�=$H�5E���g�����SH�5�#H���}��H��tH���σ��H�߅�t[���f�[�J����%���D��USH��H��H����t;�n��H��H�5��#H���}��H��t)��H���E�����H�H��H��[]���f��+���H����������UH��H�5q�#SH���W}��H��t9H���H��u'����H�߉���m��H��H�[]H�D�f.��n�����d���@��AUATUSH��H��H����tw��m��I��H�5��#H����|��H��H��tzH���О��H���#1�H���/h��I���g���H��H��tAD��H��H��衜����~'I�\$ H��L��[]A\A]�f.��+��I���H��辎��H�=g�#1�1��f��H���#H�5^�H�81��f��fD��AUATUSH��H��H����tw�"m��I��H�5(�#H���|��H��H��tzH������H�	�#1�H���_g��I��藞��H��H��tAD��H��H���at����~'I�\$ H��L��[]A\A]�f.��[~��I���H�����H�=��#1�1��Ne��H���#H�5��H�81��6e��fD��AV��AUATUS����I��H�����H�~����H�N�9���E1�uE1�H��A��@�����l����H�߃�u^��}��I��L��H���#1��Wf��I��菝��H��H��tsD���D��H��跀����~tI�\$ L��[]A\A]A^�f�1�E1�H�߃�t��k��I���f��;}�����{�������胃�����/���H�=]�#H�5Ҳ1��d��H��藌��H�=@�#H�5��1���c��f���ATUSH������uZH�5#�#H���z��H��H����H���e��H��H����H���m��Hc�H9��I���H��H�߉�[]A\���D���KH�>H�T$@��uy�T|��H�T$I��H�5��#H��D���y��H��H���A��tWA����A��
�e���A����H���r���H��H���[���H�=?�#1�1��b��fD�+j��H�T$I���H�����D�`��DI�1�A��Ic��u��H��H�pH� tH�pH���d���A9�u�H��H��[]A\�E��uH1�H����1�Hc�I���Wu��H��H�pH� tH�pH���ˍ��A9��L���H��H��[]A\�H��#��H�5�H�81��,b���1��p���H���#H�5`�H�81��b�����UH��SH��H��H��u+H��#H��H�0蹍��H�����tgH��H��H��[]�r��@��u*H�����
t8��t3��u�H��1�1����H����@H��H���H��t�H��$t�@��t�H����H���H���#H�5'�H�81��Ra��f���ATI��H�5��#USH���vw��H���|H��t��tH���kg��H�H��H�Ѓ�H��t��u�H��t;L��A��t"�-h����H���p��[�]A\�f��y����f���t�H����s����<�ff.����ATUSH��H��uH����f���@��u�H�H�Ѓ�H��t��u�H��H��tMH�5��#H���v��I��H��tJH���t�yg����L��������~*H��[]A\��y����f���t�H���Cs�����H�e�#H�5<�H�81���_��@��ATUSH��H��uH���f���@��u�H�H�Ѓ�H��t��u�H��H��tMH�5��#H����u��I��H��tJH���t�f����L���/����~*H��[]A\��Kx����f���t�H���r������H���#H�5|�H�81��$_��@��ATUSH��H��uH���Xe���@��u�H�H�Ѓ�H��t��u�H��H��tMH�5&�#H���u��I��H��tJH���t�e����L���d����~*H��[]A\��w����f���t�H����q�����H���#H�5��H�81��d^��@��USH��H��H��uH���d��fD@��u�H�H�Ѓ�H��t��u�H��tPH����t8�Se��H��H�5Y�#H���At��H��tJ��H��H���/�����~4H��H��[]Ð��v��H����fD��t�H��H�t$�p��H�t$��R�H��#H�5�H�81��]��f.���USH��H��H��uH����c��fD@��u�H�H�Ѓ�H��t��u�H��tPH����t8�d��H��H�5��#H���qs��H��tJ��H��H����k����~4H��H��[]Ð�u��H����fD��t�H��H�t$�.p��H�t$���H�K�#H�5"�H�81���\��f.���UH��H��#1�SH��H���#H�8�K^��H��H��t#H����a��H��tH�C H��H��[]���[�����H�=��#1��[\��ff.���UH��SH��H�?��H��t"H�5~�#H��H���cr��H��t#H�]H��[]�H�<�#H�5��H�81��[����fD��AWAVAUATUSH��XdH�%(H�D$H1�H��L�l$H�\$H�D$ H�D$H�D$(L�l$0H�\$8���RH�H�պH�$H�D$ L�@�!fDH��t
Lc�N��L�	��H��I9�tH�H9��H��t�H��H�I9�u�9���H�<$@�����t��E1�H�|$A��A��H�|$��E1�E1�H��H�Q�#1��\��H�����H��H����E1�M��L��D��D��H���?�����teH�] H��H�\$HdH3%(uuH��X[]A\A]A^A_�D��a���i���fDL��E1����H�|$I���k���H������I���[���H�����H�=��#1�1��NZ�����y���Z{��f.���ATUSH��H��H�|$H�t$���1�H�Y�#H��I���[��H�����H��t"L��H��H�������~%H�] H��H��[]A\�H�=�#H�5}�1��Y��H���B���H�=��#H�5��1��Y��ff.�f���USH��H��H�|$H�t$��~��H�5��#H��H���o��H��tH��H���BZ��H��H�[]H�D����ff.�@��USH��H��H�|$H�t$�~��H�5]�#H��H���Bo��H��tH��H�����H��H�[]H�D��o�ff.�@��AUATUSH��H��H�|$H�t$� ~��H�5��#H��I����n��H��tiH��H���ΐ��H�׻#1�H���-Z��I���e���H��H��t-L��H��H���_����~I�\$ H��L��[]A\A]�H���Ѐ��H�=y�#1�1��0X��H���#H�5p�H�81��X�����AUATUSH��H��H�|$H�t$�`}��H�59�#H��I���n��H��tiH��H������H��#1�H���mY��I��襐��H��H��t-L��H��H���j����~I�\$ H��L��[]A\A]�H������H�=��#1�1��pW��H���#H�5��H�81��XW�����USH��H��H�t$H��u	H���]���@��u�H�H�Ѓ�H��t��u�H��tHH9\$t1H�5R�#H���:m��H��H��t>H�|$�X|��H��H���\��H��tH��H��[]�fD��t�H���i����T�H��#H�5�H�81��V��ff.����H��H�=��#�L���H��tH���f��ˎ��H��tH�=��#H��H�D$�{��H�D$H���H���#H�5,�H�81��0V����ATUH��SH��H�|$H�t$�{��H�5[�#H��I���@l��H��tIH��H���0���1�H�7�#H���W��H�����1�L��H��H���X��H��t(H�E H��H��[]A\�H��#H�5�H�81��U���5�D��S��wCH�5ϸ#H���k��H��H��tM�z���E1�1��H��H����|����x��[H�H�Ѓ�ú1��t��H�=p�#H�5.�1��"U��H���#H�5b�H�81��
U��f.�����w1��`���P�1��3t����AUATUSH��H��H�|$H�t$�0z��H�5	�#H��I����j��H��tqH��H���ތ��H��#1�H���=V��I���u���H��H��t5舅��L��H��H��H����}����~I�\$ H��L��[]A\A]�H����|��H�=��#1�1��8T��H���#H�5x�H�81�� T����AVAUATUSH��H��H�|$H�t$H�$�jy��H��I���_y��H�58�#H��I���j��H��tvH��H���
���H��#1�H���lU��I��褌��H��H��t:跄��L��L��H��I��H���x����~I�\$ H��L��[]A\A]A^�H���|��H�=��#1�1��bS��H���#H�5��H�81��JS��f.���AUATUSH��H��H�|$H�t$�x��H�5i�#H��I���Ni��H��tqH��H���>���H�G�#1�H���T��I���Ջ��H��H��t5���L��H��H��H��������~I�\$ H��L��[]A\A]�H���8{��H�=��#1�1��R��H��#H�5ؠH�81��R����ATUH��SH��H�|$H�t$��w��H�5��#H��I���h��H��tIH��H��耊��1�H���#H����S��H���7���1�L��H��H���X��H��t(H�E H��H��[]A\�H�k�#H�5B�H�81���Q�����D��AUATUSH��H��H�|$H�t$�0w��H�5	�#H��I����g��H��tqH��H���މ��H��#1�H���=S��I���u���H��H��t5舂��L��H��H��H���s����~I�\$ H��L��[]A\A]�H����y��H�=��#1�1��8Q��H���#H�5x�H�81�� Q����AVAUATUSH��H��H�|$H�t$H�$�jv��H��I���_v��H�58�#H��I���g��H��tvH��H���
���H��#1�H���lR��I��褉��H��H��t:跁��L��L��H��I��H���d����~I�\$ H��L��[]A\A]A^�H���y��H�=��#1�1��bP��H���#H�5��H�81��JP��f.���AVAUATUSH��H��H�|$H�t$H�$�u��H��I���u��H�5X�#H��I���=f��H��tvH��H���-���H�6�#1�H���Q��I���Ĉ��H��H��t:�׀��L��L��H��I��H���3d����~I�\$ H��L��[]A\A]A^�H���"x��H�=��#1�1��O��H���#H�5H�81��jO��f.���AVAUATUSH��H��H�|$H�t$H�$�t��H��I���t��H�5x�#H��I���]e��H��tvH��H���M���H�V�#1�H���P��I�����H��H��t:���L��L��H��I��H���3b����~I�\$ H��L��[]A\A]A^�H���Bw��H�=��#1�1��N��H��#H�5�H�81��N��f.���AUATUSH��H��H�|$H�t$��s��H�5��#H��I���d��H��tsH��H���~���H���#1�H����O��I������H��H��t7�(��1�L��H��I��H��腊����~I�\$ H��L��[]A\A]�H���vv��H�=�#1�1���M��H�?�#H�5�H�81��M��ff.���AWAVAUATUSH��H��H�|$H�t$�r��H�5հ#H��I���c��H����H��I��覅��H���#1�H��H���O��H��H���#1�I����N��I���&���H��H��tc����H��H��t~�,~��L��L��H��I��H��舉����t)I�^ L��L���I�o 1��p��H��[]A\A]A^A_�H���cu��H���[u��H�=�#1�1��L��H�$�#H�5��H�81��L��H����ff.���ATH�5ӯ#USH���b��H��thH��H��詄��H���#1�H���N��I���@���H��H��t,�S}��H��H��H���U_����~
I�\$ L��[]A\�H���t��H�=U�#1�1��L��H�u�#H�5L�H�81���K��@��AUATUSH��H��H�|$H�t$�@q��H�5�#H��I���a��H��tqH��H�����H���#1�H���MM��I��腄��H��H��t5�|��L��H��H��H����o����~I�\$ H��L��[]A\A]�H����s��H�=��#1�1��HK��H���#H�5��H�81��0K����SH�=��#�OS��H�8�#H�5.�H�B�#H���#H�;H��\��H�;H�5~�H�'�#H�H�#H��[��H���#H�5���H��H���X��H�;�����H���H�5Ι��p��H�;�H�E�H�5���p��H�;�H�*�H�5��p��H�;1�H����H�5���p��H�;1�H�z��H�5���np��H�;1�H���H�5~��Vp��H�;1�H�
��H�5i��>p��H�;1�H�2�H�5T��&p��H�;�H���H�5=��p��H�;�H���H�5$���o��H�;�H�����H�55���o��H�;1�H�	���H�5��o��H�;�H����H�5+��o��H�;�H���H�5��o��H�;�H���H�5���lo��H�;�H���H�5���Qo��H�;�H��H�5|��6o��H�;�H����H�5i��o��H�;�H�\���H�5V��o��H�;�H�����H�5D���n��H�;�H���H�5,���n��H�;�H���H�5��n��H�;�H�@�H�5��n��H�;H�ݶH�5��\��H�;�H���H�5՗�cn��H�;�H����H�5���Hn��H�;1�H����H�5���0n��H�;�H���H�5���n��H�;H���H�5{��\��H�;1�H�s��H�5g���m��H�;1�H�+��H�5U���m��H�;1�H����H�5B��m��H�;1�H�k��H�5/��m��H�;�����H�0�H�5��$K��H�;�H��H�5%��	K��H�;�M��H��H�5�H���k[��H�;��L��H��H�5֖H���M[��H�;�����H���H�5ʖ�J��H�;�����H�C�H�5���l��H�;�����H���H�5����l��H�;�H���H�5���l��H�;�H���H�5���l��H�;�H����H�5}��l��H�;�H�,�H�5k��pl��H�;�H�a��H�5[��Ul��H�;�H��H�5C��:l��H�;�H���H�5+��l��H�;�H�P�H�5��l��H�;�H����H�5���k��H�;�H�Z�H�5���k��H�;�	H�5��r��H�;�����H���H�5ٕ�k��H�;1�H���H�5ƕ�k��H�;H���H�5���Y��H�;1�H���H�5���Yk��H�;�H��H�5��>k��H�;[�H���H�5s��"k��f����Gv�����ATUSH��H��H�|$H�t$���H�5k�#H��I����Z��H��uG�y��H��H��tH�C L���2r��H��tQE1�1�1�A�����H��H����V����u$H��H��[]A\�H���#H�5�H�81��LD��H�=��#1�1��<D��H���#H�T$H�5q�H�81��D��H���#1�H�81��D��ff.����H���#1��E��ff.���SH��H��H�|$H�t$�W��H�5n�#H���Y��H����H��H����i��H��躀��� uSH���+N����H�L$Hc�H;AuQL�AH� u>1�1�1�A�����H���U����u[H�D$H��[�f.�H����t���…�t��L�A�H�c�#H�5�H�81��C��H�{�#H�5ؓH�81��B��H�=K�#1�1���B��f.���UH��SH��H�|$H�t$�V��H�5m�#H���X��H����H��H����a��H�t$Hc�H;VuQH�NH� u>E1�1�1�A�����H���T����u\H�5��#H���xy��H�D$H��[]�@H�N뼉�H�y�#H�52�H�81��(B��H���#H�5�H�81��B��H�=a�#1�1��B����ATUH��SH��H�|$H�t$�2U��H�D$L�`H� tL�`H�XHc�H9��v���H��H�5b�#��W��H��H��t;H���g��H���~��� tOL��ھH���l}����t&H�D$H��[]A\�H���#H�50�H�81��RA��H�=��#H�5Y��?A��H�=��#H�5��1��*A��f.���AWAVAUATUSH��8dH�%(H�D$(1���~H�H��H�D$��t"H�FH�D$ ��t���`��DH�D$ H�5�#H���q��H�������H�|$��S��H�D$L�pH� �H�5-�#H��H�X�V��I��H���^H�������H9��cH�|$ H�k ��H��1��S��H�D$ L�hH� ��H�D$E1�H�D$�HcD$Hc�H��@I�I�H��~N�@K�t=L��L��H��@�H�T$HN�M��HD�A����d����u�H�=�#1�1��?��fDH�|$ L����S��H�D$ H�L$(dH3%(��H��8[]A\A]A^A_�L�p����L�h�5����H�|$ �R��L�l$ L���9s��H9�L���lR��H�D$ ���f�H��L��I+u�x��H�D$ ����H�p�#H�5͏H�81���>��H���#H��H�5~�H�81���>��H�=%�#H�5�1��>����_��f.���AWA��AVAUATUSH���dH�%(H��$�1�H�D$0H�|$ H�l$(H�D$PH�D$8H�|$@H�l$HH�D$XE���+H�H�ӺH�D$ H�D$@L�@�$f�H��t
Lc�N��L���H��L9�tH�HA9��H��t�H��H�L9�u�A9����9Q��E1�H�|$(�jH�|$0A�H���%H�|$8H���v�u��H�D$H�5U�#H����S��I��H���zH�D$ L�@Ic�I9��>}��H�HH� ��H�l$`L��H�L$L�D$�tc��UE��L��H��L�|$xAWL�D$ H�L$(H�t$�L��X1�ZA�����1�I��L��L���eO������@L���=���H���=��H�53�#H�ߺ�s���H��$�dH3%(��H���[]A\A]A^A_�H�H�<����@��tj��C��A�ą�����H���#H�5l�H�81���S��f�H���O��H�D$(H�xurL�hH� �q���L�h�h���f��_��H�D$�����U��딺�D���g[��H���#H�5݌H�81��;���]��H�=K�#1�1���;��H�=;�#H�5��1���;��D��S��V��H�5�H��H���_I��H��[�f.���SH�H���S��H��[H���Cp��PX1�1�H��H�=��#�j;��f.���SH�5�#H���Q��H��t!E1�1�1�1�A�����H���M����uH��[�H���#H�5�H�81��;�����f�PXH�5ˋH��H�\�#H�81���:��f���H��H�5��#�Q��H��tH���/m��H��H�H�D����ff.���H��H�5A�#��P��H��t#H���`��H���w���% HE�H����_���ff.�@��SH�5�#�P��H��tHH��H���O`��H���Gw��� uH���D��[Hc�H�D�fDH���k��HcЅ�t�H�D[����ff.�f���H��H�5��#�P��H��tH����X��H��H�H�D����ff.���H��H�5A�#��O��H��t#H���_��H���G[�����P:��H��H���Q���_���ff.�@��UH�5�#SH��dH�%(H�D$1��jO��H��tkH��H���k��1�Hc���K��H��H�pH� u@H�T$H���?����tRHct$H���M��H��H�L$dH3%(u-H��[]��H�p�H�#�#H�5��H�81��8���Y�������AWAVAUATUSH��dH�%(H�D$x1���x"H�Ӊ�t,H�H�D$��txH�FH�D$��ts�1��W��DH�5�#H��H�D$H�D$�WN��H����1�A��E1�1�1�H���JJ��1҃��H�=@�#1�1���7��H�D$H���p��H����M��H�=׊H��H��H��1��O<��H�|$�J��H�5N�#H����M��I��H���IH�|$��fo֋)D$ H�D$L�@Ic�I9��&w��H�HH� tH�HH�L$L�t$ L�$�Z��L��I���M]��jA�L��L��H��L�l$8AUL�D$H�L$�fF��X1�ZA��1�M��L��L���?I�����������H�5!�#H����m��H��H�L$xdH3%(uxH�Ĉ[]A\A]A^A_�H�|$��I��H�D$H�PH��~H�PH� tH�P�o
)L$ ����f�H�p)D$ H� tH�pH�|$ ���j�������aW��H���#H�5�H�81��)6��f���1����D����r���f���ATUSH��H��uH���8<���@��u�H�H�Ѓ�H��t��u�H��H��tMH9�t;H�5a�#H����K��I��H��tAH�5J�#H����K��H��tPH��L����[����u0H��[]A\�D��t�H���H��뤐�;j��I��H��t.H�C �H�=��#1�1��=5��H���#H�5�H�81��%5��H���#1�H�81��5��f���AWAVAUATUH��SH��(H�t$H�|$dH�%(H�D$1��,H��H�D$L�`H� tL�`H�5o�#H��H�X��J��I��H����H���Z��H���q��� ��L�|$A�@��Hc�H��@I�H��~>H��@L��L��L��HN�L��1�A���eY����u�H�=��#H�5�1��,4��@H�T$dH3%(H�D$u<H��([]A\A]A^A_�H�=U�#H�5~�1���3��H�X�#H�5��H�81���3����T��f���ATUH��H��SH���t:�:��I��H�5[�#H����I��H��t-D��H���cj����uH��[]A\�fD�kL��I������H���#H�57�H�81��Y3��f���ATUH��H��SH���t:�u:��I��H�5ۖ#H���cI��H��t-D��H���a����uH��[]A\�fD��K��I�����q���H�Z�#H�5��H�81���2��f���ATUH��H��SH��H��dH�%(H�D$1���tV��9��I��H�5G�#H����H��H��tN1�1�H�T$E��H���W����u0H�L$dH3%(H��uH��[]A\�D�;K��I����aS�����H���#H�5�H�81��$2��@��AUATUH��SH��H��H����tl�?9��I��H��H�5��#�-H��H��H��tH���W��H���n��� tS1�D��	H���m����t*Ic�H���]a��H��H��[]A\A]���J��I���H�=��#H�5Ղ�{1��H�=��#H�5��1��f1��H���#H�5,�H�81��N1��ff.���AVI��H��AUATUSH���tv�a8��I��H�5ǔ#L��Mc��LG��H��H����H���W��H���n��� tV1�D��H����l����t-H�5�#K�T$L����g��H��[]A\A]A^��I��I���H�=��#H�5x��0��H�=��#H�5
�1��~0��H���#H�5D�H�81��f0��fD��ATUS����H����H�5��#H���8a��H����A�H�5ѓ#H���YF��H��H����H���%V��H���m��� t}Ic�1���B��H��H�HH� u4D��H���k����t|H��[]A\�H���t�1��N��@H�H��H���Q���H�Ǩt��6��A���\���@�kH����H�=��#H�5ہ1��d/��H���#H�5*�H�81��L/��H�=��#H�5F��9/��f���H��H�5��#H�|$�Z��H��t*H�|$H�5��#�AE��H��t[H���U��H����H�|$�l��H�D$H�xH� tH�x�c\��H��u�H���#H�T$H�5�H�81��.��H�
�#H�5gH�81��.��f���UH��1�H��#SH��H�=��#�0��H���6c��H��t+H�C E1�1�1�A�����H��H���@����uH��H��[]�H���#1�H�81��.��H�=d�#1�1��.����H��H�Y�#H�5$�H�H��#H�8�>��H�q�#H�57H��H� �#H���>��H�=�#H�5��H���#�;��H�=��#�H�����H�5�|�S��H�=��#1�H���H�5�~�H��H�=��#�H�p�H�5n|�tS��H�=��#1�H���H�5�~�XS��H�=��#�����H����H�5���9S��H�=b�#�����H����H�5X��S��H�=C�#�����H�'�H�5W~�R��H�=$�#�����H���H�5,���R��H�=�#1�H�L�H�5+~�R��H�=��#1�H���H�5��R��H�=��#�H���H�5���R��H�=��#�H�2���H�5�}�fR��H�=��#�H�#�H�5�}�GR��H�=p�#�����H�����H�5�}�(R��H�=Q�#�H�����H�5�}�	R��H�=2�#1�H�)�H�5�}��Q��H�=�#�H����H�5z}��Q��H�=��#1�H���H�5g}�Q��H�=��#�H���H�5P}�Q��H�=��#�H�0���H�55}�tQ��H�=��#1�H���H�5!}�XQ��H�=��#1�H�8�H�5}�<Q��H�=e�#�H�����H�5�|�Q��H�=F�#�H�
���H�5�|�P���H�=�|�_���H�=�|H���#��_��H���#H���f����7V�����H�t�@AWAVAUATUSH��H��L�gL���<��H�;A���xB��I��E��~c1�fDL��޽�	8��H�xI��H��t�HB��H��I��H��t�2B��H��H��L���1����M��H���B)��A9�u�H��[]A\A]A^A_�ff.���H�t�@SH�?H����A��H�;[H���X^���SH��H��dH�%(H�D$1�H��H�$�����XM��H�߅�uA�|+��H�$H��~H�=��#H�5�}1��>)��fDH�=��#H�5�}1��#)���;+���vD��H�D$dH3%(uH��[��J��ff.���S1�H��#�*��1�H���C2��H��t	H�C H��[�H�=.�#H�5M}�(��f���H�t�@AWAVAUATUH��SH��L�gH�L���:���H�5}H��A���ic��H�uH���=N���H�5�|H���Ic��E��~yE1�H�-�|f.�D��L���6��H��H�pI��H��HD���M���H�5�wH���b��I�wH��H��HD�A����M���H�5�|H����b��E9�u�H��H�ߺ[H�5a|]A\A]A^A_�b��f���H��H�5��#��=��H��tH���H��#H�5 |H�81���>��f.���USH��H����U��H���M����t"H�}1�H�5�����`B��H��H��[]�fD�k5��H���c[��H��H��E1�[1�1�H��]��`��ff.���SH��dH�%(H�D$1��rU��1�1�H����*��H�{H��H�5���H�$��A��H�$H�L$dH3%(uH��[��G����SH��dH�%(H�D$1��U��H���jA��H�{H��H�5����H�$�A��H�$H�L$dH3%(uH��[��TG��@��ATUSH�����H��H���U^��H���E���H�=�zI���*��L��H��H����K���
H�5�zH����`��H���`��H��H���4:��H�ߺH�5��`��H��[]A\����AWAVAUATUSH��H�t$�$T��H���Z��H�|$I���c��H�D$H�pH� tH�pH���A?��I��H��tiH���7��A�ƅ�~B1����L����3��H�xH���G=��H�}I���;=��L��L��H���-%��D9�u�H��L��[]A\A]A^A_�fD�;@����f���SH��H�t$H�$�YS��H�|$H����b��H����b��H�D$1�H�xt
H�pH� u9H�$H�PH� tH�PH���G��H��t'H���<��H��[�f�H�p�f.��?��H���[���AUATUH��SH��H��dH�%(H�D$1��R��I��H�e�#H��u!L�%Vt��L���#Y��H�D�#H��t�1�1�H��H����N��H�$H��uH���*�����u�H�H�Ѓ�H��t��u�H��tAH����`��L��H�����H����U��H��H�L$dH3%(u"H��[]A\A]����t�H���6����\D��ff.����AUATI��UH��S��H��H��dH�%(H�D$1��Q����x3I��u!H�$M��tA��t.L���.)��fDH�EH�$��tں1����
B��DI�$H�Ѓ�H��t��u�H��t]H�<$t'H���`��H�5YwH���?S��H��tNH��L������L����T��L��H�L$dH3%(u#H��[]A\A]�f���t�L���s5����LC��H�=��#H�5�v�"��f���USH��H�t$����H��H���P��H�|$H���$_��H��H���I���H���1T��H��H��[]����AVAUATUS1����H��I������I���V��H���<DH����H9�}<H��L��H���5Z��L��H��I������L��H��H���!��I��� u�I�FH9�|�[H��]A\A]A^�ff.����SH���#H�5�uH�6�#H�H�;�+2��H�;H�5�uH�r�#H���#H��2��H�=\�#H�M�#H�f�#H�0�(��H�=?�#�H�����H�5*��$��H�= �#�H����H�5�u�`$��H��#H���hH���#H�8H���H�5ju�4��H�=Ը#H�5e����p.��H�=��#�����H�
���H�5[o�aF��H�=��#�H���H�5Go�BF��H�=��#�H�/���H�5�t�#F��H�=d�#�H�@���H�5�t�F��H�=E�#1�H�4���H�5�t��E��H�=)�#1�H�����H�5p��E��H�=
�#1�H�,���H�5�t�E��H�=�#1�H�@���H�5�t�E���o:��H��H���D)��Hc�H9��_����H���Y��H���Q��H�=��#H�5Rt[H���?L����uH�x���H��t2H��t<�u<tDH�U�#H�8�o���DH���#H�8�[����H�!�#H�8�K����H��#H�8�;����H�Y�#H�8�+�������T�����H���#1��. ��ff.���S�f9��H�5�H��H���+��H��[�f.���SH�H���_6��H��[H����R����UH�5��#H��SH���G4��H��t'H��H���5��1�H��H����*����u"H��H��[]�H�D�#H�5sH�81�����H�=<�#H�5Js1����ff.�PXH�5�rH��H���#H�81����f���H��H�5�#�3��H��t#H���4��H����/�����0��H��H���t5�����ff.�@��H��H�5��#�\3��H��tH���/4��H����*��H��H�H�D��V���fD��H��H�5Q�#�3��H��tH����3��H���)��H��H�H�D�����fD��UH�5�#SH����2��H��tKH��H���3��H���B)��1�Hc��X/��H��H�pH� u1�H���9����t(H��H��[]�H�p��H���#H�5�qH�81��2��H�=��#H�5�q���ff.�@��SH��H��H�|$H�t$�E/��H�5^�#H���&2��H��t7H�L$H�QH�qH� uH����Z����t-H��H��[�fDH�q��H��#H�5�pH�81����H�=�#H�5Jq���ff.�@��ATUSH��H��uH���!���@��u�H�H�Ѓ�H��t��u�H��H��tMH9�t:H�5�#H���Y1��I��H��tAH�5z#H���B1��H��taH��L���B*����tDH��[]A\�fD��t�H���.��뤐�+B��I��H�C H��u�H�=8�#H�5�p1����H�=#�#1����H��#H�5�oH�81����@��SH��H�|$H��t@��t'H�5�~#�0��H����H���j1��H��[�@H���H��u�H�|$�JX��H��H���;��H��u�1�H���5��H��H���4��������H����:��H��H�$�&��H�$H��u�H�J�#H�T$H�5>oH�81�����H�-�#H�5oH�81����ff.����USH��dH�%(H�D$1���~H��H���tH�VH�$��t���8��H�$H���P��H�<$H��tH���,��H�5�}#H���g/��H��tJ1�H��H���&����tZH�4$H��uH�L$dH3%(H��uPH��[]�DH������H�����3@��H�C H��u�H�=C�#H�5�n���H�=0�#H�5�n����9��ff.�@��UH��1�H��|#SH��H�=��#���H����?��H��tH�C 1�H��H���P%����tH��H��[]�H�=��#H�5n�/��H�=��#H�5n���ff.����H���H�=�pdH�%(H�D$1�����H�=�mH�$�M��H���H����B��H�=�m�a,��H�5�mH��H���#H�8�(��H�1�#H�5�mH��H��#H��(��H�=��#H�5���H��#�~%��H�=߯#1�H����H�5۝��1��H�=ï#�����H�����H�5Mf�S=��H�=��#�H�����H�59f�4=��H�=��#1�H����H�5nh�=��H�=i�#�H����H�5Is�<��H�=J�#H�6sH�5�f�*��H�=0�#1�H���H�5�l�'��H�=�#1�H�����H�5�l�<��H�=��#1�H�7���H�5�l�<��H�=ܮ#1�H����H�5���o<��H�D$dH3%(uH����E7��D����fD���9�����AUH�5�z#ATUSH���&,��H���+H����0��H��I���JH��H��H���������L�-�a�A�����H�=R����H��H��H�� �?J��H��L���4J��������e0��H�{H���-��H��H���J��H�{�u-��H��H���I���C��tBv ��u��H�=�k�:������u3�H�=pk����g���D�L������P���fD�H�=�s�����4���f�H��L��[]A\A]�H��#H�5�jH�81����f.���AUI��ATUH��H�5Jy#S��H��H��(dH�%(H�D$1��*��H������~#I��H�EH�D$��t-H�EH�D$���������j3��f.�H�D$1�H�|$�R��1�H��L��H���P����t;H�L$dH3%(L��u#H��([]A\A]�H�2�#H�5jH�81������4��H�==�#1����1�H��t�H�|$�Q��H������ATUSH�� dH�%(H�D$1�����I��tWH�H�T$����H�F�H�D$9���1�H��tH�|$�>Q��H��H�D$H��tpH�|$�&Q��H����H�D$1�1�H�D$H�5�w#L���)��H��tY1�H��H��H���A��H��t1H���)��H�L$dH3%(u'H�� []A\�1�벺1���1��H�=!�#1�����3��H��#H�5�hH�81��e��������fD��AVAUI��ATUS�<-��I���4A��H��tFH��L�5�v#DL��1�L������H��H���HB��H�] H��L���F��H���%��H��H��u�[L��]A\A]A^�ff.�f���H��dH�%(H�D$1���x8u*H�$�56���H�L$dH3%(u H���H�H�$��t�1��0���2��H��t�H���}O��L�$I�@I� tI�@�H�5�gH����€���t]�
H�5�gH����€�����H�ǹH�5�g�����uL1���x����tl��:���f.�1���T����u�H�=Q�#H�5<g1����1�L��H�=th��9������D1�������u�H�=	�#H�5�f�e��D��USH��H��H�l$H�t$H���aN��H��H�ڿ�a���H��H��t#1�����H��H�D$H�xH� tH�x�'��H��H��tTH�E �a6����u=H���H����tKL���#H��1�1Ҿ�y)���$+��H��H��[]�f.�H������H�=7�#1�1����H�='�#1�����PXH�5�eH��H�ܤ#H�81��b��f���ATH�5#t#UH��S�%��H��t<H��H���7��H��I���4��H��H���cG��L��H��[H��]H�=�e1�A\�.�������H��H�5�s#�,%��H��tH���7��H��H���'���N���ff.���H��H�5�s#��$��H��tH���o4��H��H����&������ff.���USH��H��H����t;���H��H�5,s#H���$��H��t)��H����:��H���[]�f��'��H��������PX1�1�H��H�=��#�
��f.���USH��H��H�|$H�t$�L��H����.��H��t<H���? ��H�5�r#H�߉��#��H��t;��H����+��H��t'H���R#��H��[]�H�T$H�='�#H�5Rd�
���^���H��#H�5�cH�81��f
��fD��USH��H��H�|$H�t$�dK��H����:��H��t<H���.��H�5�q#H�߉��^#��H��t;��H���+��H��t'H���0��H��[]�H�T$H�=��#H�5�c�������H�G�#H�5&cH�81�����fD��H��H�5�q#��"��H��tH�������t"�H���H���#H�5�bH�81��y���T���@��ATUSH�� dH�%(H�D$1����I��t_H�H�T$���<H�F�H�D$9���1�H��tH�|$�.J��H��H�D$H����H�|$�J��H���DH�D$1�1�H�D$H�5�p#L���"��H����1�H��H��H���-��H���|H���	��H��H��#H��u#H�yb�H���@��H���#H��t�H��H���wB��H��H�L$dH3%(u-H�� []A\�1��_����1��u*��H�=��#1�����2,��H�{�#H�5ZaH�81��
�������ff.���H��H�9�#H�5�bH�H��#H�8����H�Q�#H�5�aH��H�@�#H����H�=1�#H�"�#���H�=�#�����H�����H�5m_�6��H�=��#1�H�6�H�5Ya���H�=�#1�H���H�5Ea�
��H�=Ǣ#�H�����H�5.a��
��H�=��#1�H�?���H�5Le�#0��H�=��#1�H���H�5Ww�0��H�=p�#1�H����H�5�_��/��H�=T�#�H�H���H�5�`��/��H�=5�#�H�����H�5b�/��H�=�#�����H�����H�5�`�/��H�=��#�����H����H�5|`�o/��H�=ء#�H�����H�5m`�P/��H�=��#�����H�}�H�5Z`�1/��H�=��#1�H���H�5G`�/��H�=~�#1�H�u���H�5�]�.��H�=b�#�H�5`��5��H�=J�#�H�5`�5��H�=2�#�	H�5�_�5��H�=�#�H�5�_�5��H�=�#��H�5�_�q5��H�=�#�H�5�_�Y5��H�=Ҡ#���H�5�_�A5��H�=��#H���H�5�_�%5��D��UH�5$m#SH��hdH�%(H�D$X1�H�D$@���H��tH�l$H�T$H��H���2����uPH�D$1�H�4���H�T$H��H�pH� u%H�����H��H�L$XdH3%(u=H��h[]�H�p��H�=�#H�5f_1��M��H���#H�59_H�81��5���P(�����'=�����AUI��ATUH��SH��H�t$H�50l#�;��H����H�|$I���5��H�D$H�HHc�H9���F��H�PH� uS1��W� ��H��H��twL���>��L��I��1�H��1�����H�߃�u;�'��H��H��[]A\A]�f.�H�P�H�ӛ#H�5V^H�81��R����&��H�=�#H�5�^1��8��H�=ٞ#H�5P^1��#����UH�5Dk#SH��dH�%(H�D$1�H�$@�2��H��tc�@1�H���	��H��H�pH� u>H��H���0����uQH�4$H������H��H�L$dH3%(u-H��[]��H�p�H��#H�5v]H�81��r���&��H�=�#H�5q]1��X�����SH��H��H�|$H�t$���H�5^j#H���f��H��t7H�L$H�QH�qH� uH���#D����u,H��H��[�DH�q��H�S�#H�5�\H�81�����H�=s�#H�5]1����ff.�f���ATH�5�i#UH��S����H��t=H��H����.��H���%��H��I�����1�1�M��H��H�������u H��[]A\�H���#H�5C\H�81��?��H�=�#H�5t\1��*��f.���S1�H�Bi#���H���e+��H��t	H�C H��[�H�=��#H�5T\����@��ATUSH��H��uH���
���@��u�H�H�Ѓ�H��t��u�H��H��tMH9�t;H�5�h#H������I��H��t@H�5�h#H�����H��t,H��L�������u4H��[]A\�D��t�H������H���#H�5-[H�81��)��H�=ʛ#H�5�[1����@��SH���#H�5�[H��#H�H�;���H�;H�5�[H���#H�;�#H�����H�5����H��H�j�#����H�=^�#�H�����H�5�Q��(��H�=?�#�H�����H�5�Q�(��H�= �#1�H�����H�5�S�(��H�=�#�H�����H�5�^�l(��H�=�#H��^H�5XR�r��H�=˚#1�H��H�5�Z�6(��H�=��#1�H�����H�5Z�(��H�=��#H�lZH�5�V� ��H�=y�#H�RZ[H�5R���D��AWAVAUATUH��S��H��XdH�%(H�D$H1�H�=��#t������� ��f.��H�=oZ�6���H�=��H�l�#�w6���H�=�RH�\�#�_6���H�=�sH�L�#�G6��H�H�#��~�Hc�L�d��������"H�UH�T$���U���H�\$ 1ɺI��H�5�#�:��H�|$���H�D$L�pIc�I9���H������L�xI��Ic�I9��]@��H�{����I��H�@H��H�$H�H9��C@��H�D$0���H�H�D$H����H�|$8�7��H�t$1�H�D$���1��H���%��H��H����H���]4������L�L$E1��H�ߺ������f&������M�MI�E tM�ME����H�߾�����2&�����nH�D$L�HH� tL�HE���H�߾�����%�����SM�L$I�$ tM�L$D�$��H�߾������%�����9H�uH�E tH�uH�T$H���������/H�t$H���'��H���9��H��H�L$HdH3%(� H��X[]A\A]A^A_�f�L���X��H�ǃ������,����H������J���H�̑#H�5,WH�81�����H�=ė#H�50W1��f���H���8��H�=��#H�5'W1��I���H���q8��H�=��#H�5W1��,���H���T8��H�=m�#H�5W1�����H���78��H�=P�#H�5W1���H���8��H�=3�#H�5W1�����H���7��H�=�#H�5W1���������=��ff.���AWAVAUATUH��S��H��HdH�%(H�D$81�H�=a�#t�����������fD�H�=_V�2���H�=�EH��#�g2���H�=�qH��#�O2���H�=�kH���#�72���H�=QNH��#�2��H��#���i���Hc�L�d��������&H�UH�T$���=���H�\$1ɺI��H�5~�#��6��H�|$����H������H�|$I��I��I�@����H�l$ @���L�d$(H�A���I�H�\$0����H�H��1����I��L�@H� tL�@I�NI�VI� tI�VH�D$H�pH�xH� tH�xSI��APM��j�AT�K��H�� ����H�L$8dH3%(L����H��H[]A\A]A^A_�f�L���(��H�ǃ����������H���x
��H���6����K5��H�l$ I��@�������H���15��L�d$(H��A����L���5��I�����H�=h�#H�5vT�����'�����AVAUATUH��S��H��@dH�%(H�D$81�H�=��#t��y�������@�H�=�S��/���
H�=TH�d�#��/���H�=�KH�T�#�/���H�=mH�D�#�/��H�@�#��~�Hc�L�d���������"H�UH�T$���[���H�\$1ɺI��H�5�#�M4��H�|$�S
��H���K
��H�|$H��@�����$��H�|$ A��@�����
��H��H�|$(A���1��Hc�1�I�����H��H� ��L�HH�MHc�H9���9��H�UH�E tH�UL�D$I�pHc�H9��h9��I�xI� tI�xAQE��M��AU�+��ZY��txH�L$8dH3%(H��uxH��@[]A\A]A^��L���
��H�ǃ������2��������H�|$ A��@����������H���
���@L�H�+���H�=�#H�58R�������ff.�@��H��H���#H�5RH�8�2��H��#H�5	RH��H�‘#H��	��H�=��#�����H�O���H�5�QH���#����H�=��#�����H�����H�5�Q����H�=n�#H�������H�V���H�5�Q���f.����g�����UH�5d]#SH��dH�%(H�D$1��
��H����1�H��H���3��Hc�H��~r1��u
��H��H�@H� uMH��H��H�$�V3����~HH�4$H�CH� u1H)�H�����H��H�T$dH3%(u.H��[]�@H�C�f�H�C��H�=��#H�5�P1������0��H�y�#H�5�PH�81�������USH��(dH�%(H�D$1�����H��u!H�L$dH3%(H����H��([]�H�H�D$����H�|$��	��H�D$H�pHc�H9���6��H�xH� tH�x���H��H��tH�{ ����H�k ����H�D$H�PH� tH�PH�T$H�PH�t$1����H��H��u�H�=i�#1�1������1��D�����ff.�@PX1�1�H��H�=/�#����f.���SH��H��H�|$H�t$���H�5.[#H������H��tGH�L$H�QHc�H9���5��H�qH� uH�H�x�S����t-H�D$H��[�@H�q��H���#H�5�NH�81��2����M���ff.�f���SH�5�Z#�O��H����H�H�@Hc0��~H�x[����fDH�	�#H�8t1�1�[���H���#��H�=O9H��2��H���H�=vN�g2��H�;A��1�H�
vNH�39��D'���H�ۉ#H�5NH�81��Z�f.���UH��H�5�Y#SH���w
��H��t]H��H������H��H�����H��H���A����t��uH���[]�@�S��H��1�[]�H�=C�#H�5�M1����H�>�#H�5vMH�81���ff.�f���ATUH��SH��H���'��H��I����*��H�5Y#H��H���	��H��tH��L��H�������t H��[]A\�H�Lj#H�5�LH�81��F��a������ATUH��H�5�X#S�i	��H��t-H��H�����I��H�����L��H���c����t H��[]A\�H�`�#H�5�LH�81����H�=8�#H�5�L���ff.����H��H�5AX#����H��tH�����H��t$H��H�����H���#H�5/LH�81��v�������UH�5�W#SH�����H��t5H���0��H�����H��H��tJH��H�����H�߅�t#H��[]��!��H���#H�5�KH�81����#�H�=\�#1�1��������ff.���SH�5dW#���H��t/H���"��H��H��t7H�����Hc�H9���1��H�߉�[�,��H��#H�5<KH�81������ff.���S1�H��V#�
�H������H��t	H�C H��[��b���f���H��H�Q�#H�5XKH�8����H���#H�5KKH��H�z�#H��"��H�=k�#H�5oKH�M�#H�N�#H����H�5g���H��H�5�#���H�=)�#�����H����H�5�?����H�=
�#1�H�����H�5Y���H�=�#1�H�����H�5Y���H�=҉#H��XH�5�@���H�=��#1�H����H�5�J�k��H�=��#1�H�k���H�5aG�O��H�=��#�H����H�5NJ�0��H�=a�#�H�=���H�5�U���H�=B�#�H�~���H�5�P����H�=#�#1�H�����H�5J����H�=�#H���H����H�5�I�����UH�5dU#SH��dH�%(H�D$1����H����1�H��H���D���Hc�H��~r1����H��H�@H� uMH��H��H�$������~HH�4$H�CH� u1H)�H���&��H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=c�#1�1�������H��#H�5'IH�81���ff.�f���������SH�5dT#H��dH�%(H�D$1����H��tTI��H��1�1�1�����,��H����H��H��teH�4$H����)��H�߅�t8����H�T$dH3%(uH��[�H�k�#H�5tHH�81���������H�=y�#H�5vH1����H�=d�#H�5YH1���fD��AVAUATI��UH��H�5�S#S��H��H�� dH�%(H�D$1����H���9���I��H�}��u\���H�|$H�D$���H�D$H� ��H�PH�T$H�P1�H�t$����H��uhH�=��#H�5�G��DL�u���|H�m����� ��L��H��� ��1�I��H��tH���#$��H��L��H���E��H��taI�D$ L�����L��H�L$dH3%(uTH�� []A\A]A^�H�P�E����" ��L��H��� ��1�I��렺������H�=�#H�5G�<��W
��H���#H�5�FH�81���ff.�@��UH�5TR#SH��dH�%(H�D$1��*��H����1�H��H������Hc�H��~r1����H��H�@H� uMH��H��H�$�����~HH�4$H�CH� u1H)�H�����H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=�#1�1��J��e��H���#H�5�JH�81��-�ff.�f�����'�����UH�5�Q#SH��dH�%(H�D$1��*��H����1�H��H�����Hc�H��~r1����H��H�@H� uMH��H��H�$�f����~HH�4$H�CH� u1H)�H�����H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=�#1�1��J��e��H��#H�5EH�81��-�ff.�f���������SH��dH�%(H�D$1���x_H��uNH�$H�5�P#H�����H��t]�����1�H���c�����t7H�L$dH3%(H��u2H��[�fDH�H�$��t7�1�����H�=!�#1��z��
��H��~#H�5;DH�81��]�H���m���H�����H�5�O#H���|���H��t�H�$H�QHc�H9��F)��H�qH� tH�qH������B���D��������USH��(dH�%(H�D$1���x/H��uH�L$dH3%(H��u#H��([]�H�H�D$��t�1������	��H��t�H�55O#H�����H��H��tZH�|$���H�|$H�D$���H�D$H�PH� tH�PH�T$H�P1�H�t$�A��H��t)H�C H�������N���H��}#H�5�BH�81���H�=��#H�5�B�����UH�5�N#SH��dH�%(H�D$1��
���H����1�H��H���4��Hc�H��~r1����H��H�@H� uMH��H��H�$�����~HH�4$H�CH� u1H)�H�����H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=Ӏ#1�1��*��E��H��|#H�5�AH�81��
�ff.�f���������USH��(dH�%(H�D$1���x/H��uH�L$dH3%(H��u#H��([]�H�H�D$��t�1��������H��t�H�5�M#H�����H��H��tZH�|$��H�|$H�D$���H�D$H�PH� tH�PH�T$H�P1�H�t$��H��t)H�C H�������N���H��{#H�5�@H�81���H�=�#H�5�@�����UH�5TM#SH��dH�%(H�D$1��
���H����1�H��H�����Hc�H��~r1����H��H�@H� uMH��H��H�$���~HH�4$H�CH� u1H)�H�����H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=�~#1�1��*��E��H��z#H�5-@H�81��
�ff.�f���AWH�5cL#AVAUATUSH���"���H����H��H�����A�ą�~w����1�I��D��H������H�=~#1�H��J#I���F�L��I������H������H��t6I�F L��L����,��A9�u�H��L��[]A\A]A^A_�DA���H�=�}#1��:�H��y#H�5B?H�81��"�f���ATI��H�5�K#USH���F���H��t?H�5�I#L��H���/���H��trH���2���I��H��tMH��H����H��t H��[]A\�H�+y#H�5�>H�81���L����H�=;}#H�5�>1���H�=&}#H�5�>1��x�H��x#H�5�=H�81��`���SH��dH�%(H�D$1���x_H��uNH�$H�5�J#H���g���H��t]�����1�H������t7H�L$dH3%(H��u2H��[�fDH�H�$��t7�1��(��H�=q|#1��������H�.x#H�5�=H�81���H���m���H�����H�5J#H������H��t�H�$H�QHc�H9���"��H�qH� tH�qH������B���D��USH��(dH�%(H�D$1���x/H��uH�L$dH3%(H��u#H��([]�H�H�D$��t�1��G�����H��t�H�5UI#H������H��H��tZH�|$�[�H�|$H�D$����H�D$H�PH� tH�PH�T$H�P1�H�t$�1���H��t)H�C H��� 
���N���H��v#H�5�<H�81��c�H�=�z#H�5�<�P�PXH�5�;H��H��v#H�81��2�f���SH�5G#H��dH�%(H�D$1��K���H��tlH��I��1�1�1��
��H�$1��0�Hc����H��H�$H�sHcH� u,H�x�3���H��H�L$dH3%(uH��[�f.�H�s���E��������SH�5tF#H��dH�%(H�D$1����H��tl1�I��H��1�1��
��H�$1��0�Hc��#�H��H�$H�sHcH� u,H�x���H��H�L$dH3%(uH��[�f.�H�s����������H��H�5�E#dH�%(H�D$1�����H��t/1�1�1�I��H���f	��H�<$���H�T$dH3%(u
H����C������ff.���UH��H�5aE#SH�����H��t2H�5KE#H��H�����H��t3H��H�������H�H����[]�H��t#H�5�9H�81����������UH��H�5�D#SH���7���H��t2H�5�D#H��H��� ���H��t3H��H��� ���H�H����[]�H�)t#H�529H�81�����S���SH��H�=
x#1�H�|D#�7�H��tH�X [��'������AWH�5E#AVAUATUSH��xdH�%(H�D$h1���H�D$H�����/���H�|$H�D$8�����D$����H�D$`1�H�D$H�D$XH�D$ H�D$PH�D$(H�D$LH�D$0����9l$�oH�|$���W��H��H��t�L�D$H�L$ H��H�D$`H�T$(H�t$0H�D$XH�D$P���Lc�E��x�H���8��H�����I��H���A�_���L��I�����L��H���	��K�t$L�����HcD$LL��H�t����H�|$P�H��t�f
��H��L������H�|$X�H��t�G
��H��L�����H�|$`�H��t�(
��H��L���������H��I���}
��A�Ņ�~-E1�D��H��A�����H���y��L��H���N��E9�u�L��L�����;��H�|$8L���.��9l$�����H�T$hdH3%(H�D$8u'H��x[]A\A]A^A_�H��q#H�57H�81��(���C���H�=�u#1�1����PXH�5o;H��H�lq#H�81�����f�SH��H�=eu#1�H�,B#���H��tH�X [�������USH��H��H�5�A#H�����H���H��H�5AB#H�����H��H��tM�����H��H���Q����t,��H������H�=p#H���s�H��tJH��H��[]�P���H���[]�H��p#H�5�5H�81����H��p#H�5�5H�81����H�=�t#H�5^6�����PX1�1�H��H�=t#����f.���S1�H��@#�m��H�����H��t	H�C H��[����f���AUH�5�@#ATUSH�����H��tTH��H���6��Hc�I�����I��E��~(1ې��H����S���H���+��L��H�����A9�u�H��L��[]A\A]��������H��H�5a@#dH�%(H�D$1��<�H��t}E1�1�1�H��H�������xR��u8H�<$H��t#���H�L$dH3%(uH���f��������H�==s#H�5$51����H�=(s#H�5�41��z��H��n#H�5�8H�81��b��f�PXH�5�41�H��H�=�r#�E��D��H��H�5�?#�l�H��t!E1�1�1�1�H���&����x$H�H��H�D�H�on#H�5`8H�81��������f���H��H�5!?#dH�%(H�D$1���H��tP1�1�1�I��H�������x6H�<$H��t!����H�T$dH3%(uH��������������H��m#H�5�7H�81��O��ff.�@��H��H�5�>#dH�%(H�D$1��\�H��tPE1�1�1�H��H�������x5H�<$H��t �C��H�T$dH3%(uH���fD�������g���H�0m#H�5!7H�81����ff.�@��H��H�5�=#���H��tH���?��H�����H��H�������V���fD��USH��H��H��(H�t$dH�%(H�D$1����H�|$H�D$�w�H�5p=#H���X�H��taH��H�D$H�PH� uFH�T$H�P1�H�t$�i��H��tOH�C H�����H��H�L$dH3%(u+H��([]�fDH�P�H�l#H�56H�81�������H�=.p#H�502���f�PXH�5�11�H��H�=
p#�e��D��S1�H��<#���H���e���H��t	H�C H��[��B���f�PXH�5�0H��H��k#H�81����f���AVH�5�<#AUATUS�8�H��tH��H�����Hc�I���M�I��E��~BL�5�j#1�@��H���N��L��H�����H��t'H�ǃ����L��H���X
��A9�u�[L��]A\A]A^�H�= o#H�5�0�t���?���ff.�@��UH��H�5<#SH����H��t0H�5�<#H��H���p�H��t1H��H����H��H�[]H�D�H�{j#H�5�/H�81����H�cj#H�50H�81�����f���S1�H��;#�}��H���U��H��t	H�C H��[�����f���UH�5�;#SH�����H��tLH�=n#H��1�H�2;#�-��H��H������H��tH�E H��H��[]���H��H��[]�����@��H��H�5A;#�l�H��tH������H��H�H�D�����ff.���H��H�5;#�,�H��tH�����Hc��'��H��H�������fD��S1�H��:#�]��H���e��H��t	H�C H��[����f���UH��H�5�:#SH����H��t0H�5:#H��H����H��t1H��H�����H��H�[]H�D�H��h#H�5J.H�81��*�����D��S1�H��:#���H������H��t	H�C H��[�����f���ATUSH��H��uH���(���@��u�H�H�Ѓ�H��t��u�I��H��t]H�5V9#H�����H��H��tUH�5?9#L�����H��tAH�=�e#H����H��tEH�C H���B�H��[]A\�f.���t�H�����H��g#H�5-H�81��)�����@��H��H�5�9#�L�H��tH���	����H�H��H�Ѓ��H�Wg#H�5�,H�81�����fD��AUI��H��ATUH��SH����t\������H��t\H�5P8#H�����I��H��tX1�L��H��8#�/��L���H���B�H��t'H�E H��H��[]A\A]��C���H��u�E1��H�=�j#1��8��������H��H�5q7#dH�%(H�D$1��L�H��t<E1�1�1�H��H�t$�����xV��u<H�T$dH3%(HcD$H�DuH���H�4f#H�5%0H�81�������H�=Gj#H�5.,1����H�=2j#H�5,1����@��H��@��uJH��uH��1���H��t=H���f�@��u�H���H��
u��)�Hc�1��o����D�c�����,���ff.����AWAVI��AUATI��H�5�6#UH��SH��HH�L$H��$�L�D$(L�L$dH�%(H�D$81��D$4��H�D$H���)H�5�5#L�����H�D$ H����H������n��$H����H��E1�����H��L�h�=DH����I9�}^H�-]c#L��H�uJ�<�N�$��
���H���KI��H��� u�L;{}$H�-#c#H�C H�u�Ð�;���$H���}����<$�E1�E1�H�l$4H�t$H��H�=J�������t$4H�D$���|H��$�H�D$��H��$�H��H�=����i����L$4H�Ņ���H��M��D��UL�L$ �T$H�t$0H�|$(���I��XZM���1H����H�CE1�H�$�;f�H����I9���H�$J�<��c������L��H���������I��H��� u�L;k}aH�C ��H�|$@����H�|$��I��H�l$4H�t$(H�=3���H������|$4I�ą�����H�D$E1�1�fDH�|$�~��H���v��L���n���|$4����H�L$8dH3%(L����H��H[]A\A]A^A_�@H�D$1���c��I���W���H�|$���H�����L�����H�=�f#1�1�����fD1��g����1��Q���H�mH� t+H��J�<#���H��H�5E,H��H��a#H�81����H�[ ��H�b#H�5
'H�81����H��a#H�5I'H�81��k���V��������AUATUS��H��(dH�%(H�D$1�����I���������H�5s2#L���[�H����1�1�H�L$H��L�D$�
������H�t$H�|$Hc�Hc������u�1�1�H�\$dH3%(H����H��([]A\A]�DH�>����L�n�9�uV1�H��t
@��tA����ý����I���A���L��A��t������,���fD�;�������@�+�뽺1����{�H��`#H�5�*H�81����H�=�d#H�5{&1�������A��V���f���AVAUATUS��~|H�.L�f��ukH�5,2#H�����H��H����L��E1����I��H������H��L��L��H��H�����H�5�]#H����-������~l[]A\A]A^���t����@L�vH��H�5�1#�m�H��H��tTL�����I��I��t;L��A��t+�F��Lc��d���fD�S�[1�]A\A]A^�������E1��7���H�:_#H�5�$H�81����f���AVAUATUS��~|H�.L�f��ukH�5<0#H������H��H����L��E1�����I��H�����H��L��L��H��H���.�H�5�\#H�������~l[]A\A]A^���t���d�@L�vH��H�5�/#�=��H��H��tTL���m��I��I��t;L��A��t+���Lc��d���fD�#�[1�]A\A]A^������E1��7���H�
^#H�5g#H�81����f���AWAVAUATUSH��xdH�%(H�D$h1�H�D$H�D$@H�D$ H�D$HH�D$(H�D$PH�D$0H�D$XH�D$8H�D$`���ZH�H�ӹH�D$H�FH�D$ H�D$@L�@�"�H��t
Lc�N��L�
��H��I9�tH�P9��H��t�H��H�I9�u�9���H�5!/#H������I��H����H�|$1��A���H�|$ I�����H�|$0I��H��uvH�|$81�H��t����H��H�|$(H��unH��E1�I��L��L��M��L���{��H�5�Z#L����������H��H�\$hdH3%(umH��x[]A\A]A^A_�@��t*�5��Hc��w���DH�L$���H�L$I���@����Ժ��
�H�#\#H�5�!H�81������H�=6`#1�1����ff.�f���AWAVAUATUSH��xdH�%(H�D$h1�H�D$H�D$@H�D$ H�D$HH�D$(H�D$PH�D$0H�D$XH�D$8H�D$`���ZH�H�ӹH�D$H�FH�D$ H�D$@L�@�"�H��t
Lc�N��L�
��H��I9�tH�P9��H��t�H��H�I9�u�9���H�5a,#H������I��H����H�|$1��A���H�|$ I�����H�|$0I��H��uvH�|$81�H��t����H��H�|$(H��unH��E1�I��L��L��M��L�����H�5�X#L����������H��H�\$hdH3%(umH��x[]A\A]A^A_�@��t*�5��Hc��w���DH�L$���H�L$I���@����Ժ��
�H�#Z#H�5�H�81������H�=6^#1�1����ff.�f���ATUSH��H��uH������@��u�H�H�Ѓ�H��t��u�I��H��tMH�5&*#H���n��H��H��tEH�5*#L���W��H��t1H���Z��H��t<H�C H���	��H��[]A\Ð��t�H���#���H�JY#H�5SH�81�����H�=b]#H�5����fD��ATUSH��H��uH�������@��u�H�H�Ѓ�H��t��u�I��H��t]H�5�*#H�����H��H��tUH�5�*#L�����H��tAH�=�X#H���S��H��tEH�C H�����H��[]A\�f.���t�H���C���H�jX#H�5	H�81������d�@��ATUSH��H��uH������@��u�H�H�Ѓ�H��t��u�I��H��t]H�5�)#H������H��H��tUH�5�)#L�����H��tAH�=�U#H�����H��tEH�C H����H��[]A\�f.���t�H���s���H��W#H�5�H�81������@��ATUSH��H��uH���H���@��u�H�H�Ѓ�H��t��u�I��H��t]H�5(#H�����H��H��tUH�5�'#L������H��tAH�=SV#H�����H��tEH�C H���B���H��[]A\�f.���t�H������H��V#H�5� H�81��I������@��H�UU#SH�5�H�8����H��U#H�5�H��H��Z#H��%��H�fV#H�=�Z#H�5~IH��Z#H����H�5��H��H�hZ#����H�=\Z#�H����H�5����H�==Z#�����H�I��H�5���H�=Z#�����H���H�5?��H�=�Y#�H���H�5*��H�=�Y#�H���H�5�`�H�=�Y#1�H� ��H�5��D�H�=�Y#1�H���H�5��(�H�=�Y#�����H�e���H�5�%�	�H�=jY#�����H���H�5� ���H�=KY#1�H����H�50(���H�H�=<Y#H�5H����H���H�5jH��H��X#�6��H�=�X#H�5���s��H�=�X#�H�`���H�5i�d�H�=�X#�����H�1��H�5?�E�H�=�X#1�H���H�5��)�H�=�X#1�H���H�5��
�H�=fX#1�H��H�5����H�=JX#1�H����H�57'���H�H�=CX#H�5����H�5��H��H�X#���H�=�W#�H�v�H�5�
��H�=�W#�����H�W��H�5e
�k�H�=�W#�H���H�5?�L�H�=�W#�����H����H�5��-�H�=~W#�H���H�5��H�=_W#1�H�^��H�5N���H�=CW#1�H���H�5����H�='W#�H���H�5���H�=W#�����H��H�5X#��H�=�V#�����H���H�5��y�H�=�V#1�H�)��H�5�%�]�H�H�=�V#H�5h�7��H�5��H��H��V#�!��H�=zV#�H����H�5��H�=[V#�H�o�H�5����H�=<V#�����H�P�H�5���H�=V#1�H���H�5s��H�=V#1�H�8�H�5���H�=�U#1�H��H�5���H�=�U#1�H�`�H�5��d�H�=�U#1�H��H�5��H�H�=�U#1�H���H�5��,�H�=uU#1�H�L�H�5���H�=YU#1�H����H�5V$���H�H�=bU#H�5n����H�5��H��H�U#���H�=	U#�H����H�5�
��H�=�T#�����H����H�5�
��H�=�T#�H�7��H�5�)�k�H�=�T#�H����H�5��L�H�=�T#1�H���H�5��0�H�=qT#1�H�`��H�5���H�=UT#1�H����H�5���H�=9T#1�H�8��H�5����H�=T#1�H���H�5"#��H�=1T#�H�5���H�=T#�H�5%��H�=T#H�����H�5t�f�H�=�S#�H�5t�N�H�=�S#�H�5x�6�H�=�S#�H�5{��H�=�S#�H�5���H�=�S#�H�5d���H�=oS#�
H�5����H�=WS#�H�5���H�=?S#�H�58��H�='S#�H�5=��H�=S#�	H�5B�v�H�=�R#�
H�5D�^�H�=�R#�H�5I�F�H�=�R#�H�5L�.�H�=�R#�H�5<��H�=�R#�	H�5-��H�=R#�H�5���H�=gR#�!H�5���H�=OR#�AH�5���H�=7R#��H�5���H�=R#�H�5���H�=R#�H�5��n�H�=�Q#�H�5��V�H�=�Q#�H�5�>�H�=�Q#�H�5��&�H�=�Q#�H�5���H�=�Q#�H�5���H�=wQ#�H�5����H�=_Q#�H�5����H�=GQ#�[H�5y��f.���釻�����UH�54#SH��dH�%(H�D$1����H����1�H��H�����Hc�H��~r1����H��H�@H� uMH��H��H�$����~HH�4$H�CH� u1H)�H�����H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=cP#1�1�誶������H�L#H�5�H�81�荶��ff.�f�����������G������������AUATUSH��HdH�%(H�D$81�H�B �D$H�D$(H�D$0����H���oH�H�D$����H�FH�D$����E1�H��t
H�|$���I��H�|$��H�t$0H��H������H�D$0H��H�C �÷���>��H�|$0H�L$ L��H�T$L�D$(������V�ż��H�t$H����H�T$H�=�����6��T$I�Ņ��H�t$ H����H�T$H�=�������I�ċD$��u#H�t$(�H��tH�T$H�=}������H��H�|$ ���H�5TH#H�|$(��L��H�5LH���h��L��H�5?H���V��H��H��H�57�D���|$����H�L$8dH3%(H��utH��H[]A\A]�f.�H�t$ A�H���#���A��9���H�D$E1��r����A��;����1��t��H�=�M#H�5������,��������S1�H��#蝵��H���U���H��t	H�C H��[�H�=�M#1��ɳ��f���ATUSH��`dH�%(H�D$X1�H�D$ H�l$H�\$H�D$@H�D$(H�l$0H�\$8H�D$H����H��H�D$H�D$0L�H�@M��t
Lc�N��M���H��I9�tL�@9��M��t�H��I�I9�u�9��xH��t��tH���V���fDH�
H�ȃ�H��t��u�H���"H�5�#H�����I��H���6H�����H�|$tH�����H�|$ 1�H��t@�����ӹ����H�|$(1�H��t���H�L$H����H�yHc�A��H9����H� ttH�IL�T$I�RHc�H9��n�I�rI� tI�rH��A��L��P����ZY����H�\$XdH3%(��~H��`[]A\�fDE1�1�두H���f.�����3���fD������H��H�T$����H�T$���������H��F#H�5�H�81��y������H�=K#H�5��a������AWAVAUATUSH���dH�%(H��$�1�H�D$@L�T$0H��$�H�D$HL�d$8H��$�H�D$PH�l$XH��$�H�D$hH�\$`H��$�H�D$pH��$�H�D$xL��$�L��$�H��$�H��$�H��$����G1�L��H��$��
fDH�H��tL�L�H��H�� u�L�@0��H��t
Lc�N��L�
��H��I9�tH�P 9��H��t�H��H�I9�u�9���H�|$0�dH�D$ H�|$8H�$tL���#�H�$L�|$@E1�L�����L�d$HH�D$L����H�|$XH�D$�$E1�H�|$`��H�|$h�D$H����H�|$p�D$(H���7H�|$xH���J@����a���D$,����t	���H�=I#H�#1����H�l$PE1�H��H��tH���_��I�‹D$,E��M��P�D$0P�D$PAVH�t$ H�|$@H�L$8H�T$0L�T$(��H�� L�T$H�5WB#I��L�����M���|L�k H��L��H�5>�]��H��L��H�51�K��H��H��H�5,�9��H��H��$�dH3%(�8H���[]A\A]A^A_�D裵�����fD@����艵��H�|$x�D$(H��������D$,����f�@�����Q����D$�b����H����H�����A�ƅ��(���H�T$`H�A#H�5yH�81��ȭ���L�����H�D$ ���fDH����H����A�Ņ������H�T$X�fD�k���e���fD�[�������
����H�=G#1�1��G����b��Lc�H�x@#H�5�
M�H�8I�W1�� �����ATUSH��H��uH���X����@��u�H�H�Ѓ�H��t��u�I��H��t]H�5�#H�����H��H��tUH�5�#L�����H��tAH�5�@#H�=�A#H�����H��t>H�C H��蛰��H��[]A\���t�H��賿���H��A#H�5�H�81��Y���H�=F#H�5)
�F���fD��H��H��A#H�54
H�H�@@#H�8�8���H��@#H�5�H��H��E#H�����H�=�E#�����H�����H�5�H��E#袯��H�=�E#H�5����߹��H�=pE#�H�����H�5�����H�=��D��E1�1ɺH�=;E#H�����H�=����E1�1ɺH�=E#H�����H�=����E1�1ɺH�=�D#H���a��H�=�D#�����H���H�5<��B��H�=�D#1�H���H�5��&��H�=�D#�����H�#���H�5{���H�=�D#�!H�5�����H�=pD#H���H�5��������g�������7������'�����UH�5T#SH��dH�%(H�D$1����H����1�H��H�����Hc�H��~r1�����H��H�@H� uMH��H��H�$�v����~HH�4$H�CH� u1H)�H������H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=�C#1�1�誩������H�?#H�5�
H�81�荩��ff.�f���AWAVI��H�5^#AUATA��H��USH��H��8dH�%(H�D$(1��D$�~���H����A����I��I�.I�~A���7H�D$ 艻��I��H�|$ �D$�_H�|$ �(�I��H���sH�t$H������I�ƋD$������H���"���H��H����D�L$L��L��I��L��L���
���L��A��袪��H�5�;#L���3��E���s���H������H��tH���{���H��H�5	H���������H������H�5P	H��H�����A����HE�H�L$(dH3%(�H��8[]A\A]A^A_�DI�FH�D$ A�������M�vA��uj�>���I��I�������L��A��tH���H�|$ �D$�����H�5�H���d���H�D$ H�������E1�H�������E1�����K���붺�D�����H��<#H�5JH�81��/���L���G����|$���L���6���H�5:#L������H�=�@#1�1����H�=�@#H�51�������ff.�f���AWAVAUATUSH��H�$H��(H�t$H�5�#I��dH�%(H��$1��˼��H����H�xI���������H�|$H�l$��1�L��I������I��H��u�Q���H��L�����9�u9�H��L���O����Å��L��L���ޱ����t�H�5)L�����L�����L���������H��ulH��$dH3%(H�D$uOH��([]A\A]A^A_�f��L���c�����.���H�=�?#1�荥��H��:#H�5�H�81��u������H�=a?#1�1��`�����AWH�5C#AVAUATUSH��肻��H���H�xH���=�������H�C L�`M����L���K����Ņ���Hc��i���I�Ņ�tr1��;fDH�5i9#H�=�9#L���2���H����I�G L��L����w��9�t3��L��色��H�=�>#H��#1�I���A���I��M��u�����f�H��L��[]A\A]A^A_�fDH�{�o�����uH�C L�`0M���6���H��[]A\A]A^A_�6���H�='>#1��(���H��9#H�5+H�81�����H�=>#H�5N1����ff.���ATI��H�5�#USH������H��tQH�5�#L��H�����H����H�578#H�=�8#H������I��H��tMH��H��轥����u H��[]A\�H��8#H�5�H�81��h���L�����H�=Q=#H�5�1��K���H�=<=#H�5�1��6���H��8#H�5�H�81�����ff.�UH��H��SH��H�5�6#H�=F8#�Q���H��H��tH�}8H��t
�K��H�E8H�C8H��H��[]�f���AWH�5�#AVAUATUSH�����H���=H�����I��H����H��轴���Ņ��/Hc��ۭ��I�Ņ�td1��'L���H���H����I�G L��L������9�t9��L������H�=0<#H��
#1�I���ǣ��I��M��u��*����H��L��[]A\A]A^A_�fDH�	6#H�8tH��[]A\A]A^A_�ȼ��H��6#��H�=G�H��x��H��'�H�=��_��H�;A�61�H�
1H�+���<���H�=[;#1��\���H��6#H�5_H�81��D���H�=5;#H�5�1��/���ff.�@��ATI��H�5
#USH���F���H��t?H�5�	#L��H���/���H��trH������I��H��tMH��H���_����u H��[]A\�H�+6#H�5�H�81�誠��L���R��H�=�:#H�5�1�荠��H�=~:#H�5x1��x���H��5#H�5GH�81��`�����AUATUSH��L�b dH�%(H�D$1����H��u)H�L$dH3%(H����H��[]A\A]��H�H�$����H��耭��H��H�$�$��1�H��I���w��H��H��tLL�����H�} ��H�k L��耠��H�ߺH�5��<����H�5�H���(����R���1�1ҾL��買���ͺ��1�1�1�L���/���L��H���t���H��u�H��2#H�5aH�81��7�����1��t����?���H�����H�P2#H�5CH�81����ff.�@��ATH��#USH�� H�=�8#H�t$1�dH�%(H�D$1��j���H�|$H������H�t$H�D$H��I���$���L��H��詠��H��taH�} ttH�|$�H��t�)��H��H�k H�5��H�����H�5��H���߽��H��H�L$dH3%(uH�� []A\�H�=8#H�551������)���H���ў��H�=�7#H�5-1����ff.��PXH�5A�H��H�<3#H�81����f���H��H�5�#���H��t
H�xH���
������D��H��H�5�#輳��H��tH�@H�xH���v��������H��H�5�#茳��H��tH�@H�xH���F��H��2#H�5�H�81�����ff.���H��H�51#�<���H��tH�@H�8H���������f�PX1�1�H��H�=�6#�ʜ��f.���USH��H��H���[��H�5�#H��H���ٲ��H��tH��H��虻����t"H��H��[]�H��1#H�5�H�81��c����~���ff.���S1�H�r#���H���U��H��t	H�C H��[��B���f���H��H�5�#�L���H��t4�4H��蚬��H��t:�8t�H���fDH�xH���#��H�<1#H�5��H�81�軛������fD��AUATI��UH��SH��H��H�����L��I���6��H��I������H�5#H��H��話��H��t#H��L��L��H���s�����t&H��H��[]A\A]�H��0#H�5�H�81��)����D���@��S1�H��#轜��H���%��H��t	H�C H��[�����f���UH�5�#SH������H��t9H���
��H���5���H��H��tNH��1�1�H���~��H�߅�t#H��[]�\��H�0#H�5��H�81�脚��蟜��H�=p4#1�1��o������f.���UH�5D#SH��芰��H��t5H���}��H��襟��H��H��tJH��H��貯��H�߅�t#H��[]����H�y/#H�5�H�81��������H�=�3#1�1�������ff.�PXH�5�H��H�,/#H�81�貙��f�SH�5�#���H��t(H�xH��袳����t
��t1�[�@H�C [H�@�������H�����H��H��闩���SH�58#胯��H��t(H�xH���B�����t
��t1�[�@H�C [H�@��A������H�����H��H���G������ATI��H�5�#USH������H��t"L��H�����H��H���{�����t H��[]A\�H�.#H�5��H�81�藘�����f���H��H��H��두��ATI��H�5`#USH��覮��H��t"L��H�����H��H�������t H��[]A\�H��-#H�5B�H�81��'����B���f���H��H��H��두��UH��H�5�#SH���7���H��t$H��H������H��H�������t"H��H��[]�H�7-#H�5�H�81�趗���������SH�5�#�߭��H��t<H�xH��螱����t	1�[�D1�1ɾH���_���H�¸H��u�1������f���H��H�51#�|���H��t#1�1ҾH������H��H�H��H�Ѓ���?���ff.�@��SH��H�5�"�,���H��tBH��tH��u"1�H���H����1�贱��H��t2H��[�H�=�0#H�5��1�襖��H�,#H�5��H�81�荖��������AWAVAUATUSH��H�5X�"H��(dH�%(H�D$1�菬��H���FH��H�\$����H����H�|$�r���L�|$I�GM�gH�D$I� tM�gL�5��E1�f�L��H����������!�%����t������D�H�QHDʉ�@�H��L)�H9L$uL��L���#�����t_A��I��A��u�H�=�/#L��H�5�1��y���f����;���H���H���+���H��蟱��I��H�D$�%���f�Mc�H�5�H��K�@�t��f�����t?H��H�\$dH3%(u'H��([]A\A]A^A_�H�i*#H�5�H�81�����������ff.���S1�H���"�m���H���ՠ��H��t	H�C H��[�����f���ATUSH��H��uH���ؚ���@��u�H�H�Ѓ�H��t��u�H��H��tUH9�tDH�5A�"H��艪��I��H��tHH�5*�"H���r���H��t4H��赲��H��t?H�C L�����H��[]A\�@��t�H���;����H�b)#H�5��H�81�������ff.����ATI��UH��S�m���H����H��訛��H�����H��u�H�|-#H��u(H�����H�����H�T-#H��t�M��H��L�:���1�1�H������H��[]A\�fD��ATI��UH��S�}���H����H���x���H���0��H��u�H��,#H��u(H����H���#��H��,#H��t�M��H��L�:���1�1�H���>��H��[]A\�fD��H��H�51�"�ܨ��H��tH�@H�8H���G���H��'#H�5V�H�81��o���ff.�@��AV��AUATUS����H��H�>��t_L�f���H�n�9����,��E1�I��I��tL�����I��H����H������*������fD����E1�1�I��H�5��"H������I��H��tc���H������H��H��t>L��A��H��L��L��賠��H�߅�t[]A\A]A^�?�������辰��艓��H�=Z+#1�1��Y���H��&#H�5\�H�81��A�����+������a���1��Z��������ff.���AV��AUATUSH�� dH�%(H�L$1��D$���7H�VL�&H�T$���
H�~���7H�^�9��H�����{���1�I��H��tH�߃���迗����H�=�*#H�_�"1�����H�|$H�����L��H�t$I��苐��I�ċD$������L��L��L��謒��L��H��H�����8���H�k H�T$H��H�50�蠯��H�5i##L��豻��H��H�L$dH3%(��H�� []A\A]A^�D賨���?���H��"#H�5��H�81������������L��譑���|$�t���������萑��H�5�"#L���!���H�=R)#1�1��Q����l���ff.����AW��AVAUATUSH��(dH�%(H�L$1��D$���rH�VH�>H�^H�T$����A����H��I������I��E1�H�=�(#H���"1��q���H�|$H������H��I����L��H�t$�ڎ��I�ŋD$���E��H��L��L��L�����H����H�C H�T$H�5��H������H�5��H�����H���Z���H�5�!#L�����H��H�L$dH3%(��H��([]A\A]A^A_�DL�n������H�n ��uQ���H��I�����I��H����H���t%����A������E1������苦���ٺ����ج��H��蠏���|$�g���H��菏��H�5� #L��� ���H�=Q'#1�1��P����k���ff.���AUATUSH��dH�%(H�D$1����uH�����H�FH�$����H�V���KH����H�׃������A��H�$H����H�5��"H�����H��H���3E1�H�<$t(H�x覦������H�<$�)H�����I�����H���ڑ��H��H����D��L��H��H���M�������L���]���H�����H�L$dH3%(��H��[]A\A]�fDH�$H�$E1�H���3���H�5�H���Ȣ��H�$������ä�����fD1�1ɾH��触��D���@H��DE����������H��讍��L��覍��H�=w%#1�1��v���H�� #H�5y�H�81��^����y���E1��������SH�54�"����H����H�xH���:�����tUH�{�,�������H�{������tuH�{��������H�{�������[�f.�H��$#H��u%H�6�D�H�����H��$#H��t�H��[���fDH�Y$#H��u�H��D�	H��諿��H�4$#H��t�H��[馾��fDH�!$#H��u�H���D�	H���k���H��##H��t�H��[�f���fDH��##H���a���H���f��H���#���H��##H��t��3���f�H��##H���!���H���f��H�����H�\##H��t���H��#H�5��H�81��z���f.���UH��1�H�O�"SH��H�=c##���H��H���ӧ��H��tH�C H��H��[]�H�=!##H�5������ff.�f���SH�$#H�51�H�^#H�8H�����H��#H�5��H��H��"#H����H�=�"#�H���H�5m�H��"#�u���H�=�"#�����H�R���H�5R��V���H�=�"#�����H�3���H�5W��7���H�=p"#�����H�D���H�5������H�=m����E1�1ɺH�=;"#H���S���H�=[��Ǥ��H�= "#E1��H�ƺ�+���H�="#H�5�����H�=�!#�H�5�H�5�����H�=�!#�����H�V�H�5���ڭ��H�=�!#�H��H�5c�軭��H�=�!#1�H�+���H�5m�蟭��H�=x!#�H�\�H�5.�耭��H�=Y!#1�H���H�5��d���H�==!#1�H�t�H�5	��H���H�=!!#�H���H�5���)���H�=!#�H���H�5���
���H�=� #1�H�
�H�5�����H�=� #�H���H�5���Ϭ��H�=� #1�H�/�H�5��賬��H�=� #�H���H�5��蔬��H�=m #�H���H�5y��u���H�=N #1�H�%�H�5k��Y���H�=2 #�H�&�H�5-%�:���H�= #�H���H�5:�����H�=�#1�H�k�H�5$����H�=�#�H����H�5
����H�=�#H���H�5<����H�=�#�����H���H�5��觫��H�=�#�����H��H�5��舫��H�=a#1�H���H�5���l���H�=E#H���H�5���r���H�=+#1�H����H�5���6���H�=#1�H��H�50�����H�H�=�#H�57���H�=�#H�5/�H��H��#�ױ��H�=�#H�5���Ē��H�=�#�H���H�5��赪��H�=�#1�H���H�5;�虪��H�=j#1�H���H�5&��}���H�=N#1�H��H�5���a���H�H�=7#H�5���;���H�5��H��H�
#�%���H�=�#�H�2�H�5�����H�=�#1�H���H�5�����H�=�#1�H�*�H�5���ީ��H�=�#1�H���H�5!��©��H�=�#�H�5�蚰��H�=�#�H�5��肰��H�=k#�	H�5���j���H�=S#�H�5���R���H�=;#�!H�5`��:���H�=##�AH�5`��"���H�=#��H�5���
���H�=�#�H�5w���H�=�#�H�5f��گ��H�=�#�[H�5T��������O�����������H���H�=�dH�%(H�D$1�H�T$�2���HcD$H�L$dH3%(uH����S�����SH���c�����tF~$��tto=�uPH�#H�8�A���H�X [���u3H��#H�8�$���H�X [�fDH��#H�8�	���H�X [�H�!#H�8��H�X [�H�!#H�8�٠��H�X [���ATUH��S��H��H��@H�5�#dH�%(H�D$81�蠗��H������~I��H�EH�D$��t"���������x�����H�|$�a���1�L���G���H��H����H��������H����H�D$L�@H�HH� ��L�d$1�H��L���E�������H�t$H���2H�T$1��3���H�ŋD$����H�D$L�@H�HH� tH�HH�uH�E uLH��L�����H�߅����q���H�t$H���d���H��H�L$8dH3%(��H��@[]A\�@H�u�f.�H�H�0����H�T$H�t$ H�\$ H�=�H�l$(谭���T$�����H������|$裪��H���۹��H��#H�5��H�81����讠��H�m�j���H��#H�5��H�81��͖��H��蕹��H�n#H�57�H�81�譖��H���u���H�N#H�5��H�81��-��H�6#H�5X�H�81����D��ATI��1�UH��SH�� dH�%(H�D$1�觷���H��H��H�D$蒷��H�D$��tqH��u[H������H�|$H�D$�̼��H�|$H��迼��H��L��H�������~OH�L$dH3%(�u5H�� []A\����u�H���H��u�H��蟚��H�D$H�D$��^���H�G#H�L$H�53�H�T$H�81��~��ff.����ATUH��S��H��H��@H�5-#dH�%(H�D$81�� ���H������~I��H�EH�D$��t"�������������H�|$���1�L���dž��H��H����H����������H����H�D$L�@H�HH� ��L�d$1�H��L���U�������H�t$H���2H�T$1�賩��H�ŋD$����H�D$L�@H�HH� tH�HH�uH�E uLH��L����H�߅�����H�t$H�����H��H�L$8dH3%(��H��@[]A\�@H�u�f.�H�H�0����H�T$H�t$ H�\$ H�=zH�l$(�0����T$�����H���l����|$�#���H���[���H�4#H�5��H�81��|���.���H�m�j���H�n#H�5�H�81��M���H������H��#H�5�H�81��-���H�����H��#H�5(�H�81��{��H��#H�5��H�81��{��D��AUI��ATU��H��SH��(H��#dH�%(H�D$1�H��蛑��H�������I�}H��I���z���H��H����1�L���d���H��H���8H���p������`H��H��荒�����-L�d$1�H��L��裄������H�t$H����H�T$1��a���H�ŋD$����H�uH�E uLH��L���Y���H�߅�~l轴��H�t$H��谎��H��H�L$dH3%(��H��([]A\A]�fDH�u뮺���葙��H��#H�5S�H�81�艑��H���Q���H�*#H�5h�H�81��	z��H�#H�5[�H�81��Q���H�������|$�Ф��H��
#H�5�H�81���y��H����H��
#H�5J�H�81��y��H����H��
#H�5i�H�81��y��裚����AUATUH��S��H��H��HH�5�
#dH�%(H�D$81�莏��H��������I��H�EH�}H�D$���sA�1�H��t�p���H��H�|$�S���1�L���9���H��H����H����������H��t%E1�I���������H���K������fI��t,H�T$H�t$ H�\$ H�=�
L�l$(�m����T$����H�D$L�@H�HH� tH�HL�d$1�H��L����������H�t$H���H�T$1��Ӥ��H�ŋD$����H�D$L�@H�HH� tH�HH�uH�E tH�uH��L��蝶��H�߅�~d����H�t$H������H��H�L$8dH3%(��H��H[]A\A]�f������������H��辱���|$�u���H��譱��H��#H�5Q�H�81��ew��H��#H�5w�H�81�譎��H���u���H�N#H�5��H�81��-w��H���U���H�.#H�5�H�81��m����(���L�m���H�#H�5*�H�81���v��H������H��
#H�5��H�81���v�����ATI��UH�-�
#SH�����H��tXH��L��H���ӌ��H��H��tBH���3���H��A���(���A9�uBH��H���w����t��uF[�]A\�D[1�]A\�H��#H�5[�H�81�葍��H�Z#H�5��H�81��v��H�"
#H�5�H�81��v�����ATUSH��H�5%
#dH�%(H�D$1�����H����I��1�H��H��L��輱����u]H�4$1�茈��H��H�pH� u<L��H��葱����u2H�4$H��谉��H��H�L$dH3%(uCH��[]A\�@H�p�H�c	#H�5e�H�81��Bu��H��
#H�5T�H�81�芌���E���D��ATUSH��H�5E	#dH�%(H�D$1��8���H����I��1�H��H��L���<�����u]H�4$1�謇��H��H�pH� u<L��H��������u2H�4$H���Ј��H��H�L$dH3%(uCH��[]A\�@H�p�H��#H�5��H�81��bt��H��	#H�5t�H�81�誋���e���DAVAUA��ATI��H�5e#US��H���a���H�������H��ukA�E1��=���H���ey��H��H����E��ttH��L�
�#H��1�AVH��E1�L��褰��^_����H��[]A\A]A^�j���f.�I�<$����M�t$��ui�d���L��I���ً��I���o����H��L�

#1�L��AVE1�H��H���`u��ZY��u�H���bu��H�K#H�5��H�81��*s��f.��1����b���H�{#H�5$�H�81��Z���H�#H�5��H�81���r��H���t��H��#H�5�H�81���r��A��.������1��e���D����R���f���USH��H�5�#躈��H����H��詰��H����w��H��H����1�1�H��H���F�����tT1�1ҾH���p���苍��1�1�H��H��輚����t*1�1ҾH���F����a���1�1�H��H���s����uH��H��[]韡��H���s��H��#H�5Q�H�81��q��H��#H�5M�H�81��q��H�#H�5��H�81����ff.�@��H��#1��s��ff.���UH��SH��dH�%(H�D$1��ވ��H���@�u#�uC�H�L$dH3%(uKH��[]�H�T$H��H�=a�ܞ���D$��u�C�t��c�1�H�=_��Ju����t��C1�����f.���H�����H���f���U�����H��AWAVAUATI��SH��dH�%(H�E�1�����Hc�H��H��=��H����H��I��H����H��H%�H)�H���H��H9�tH��H��$�H9�u��ujL�l$E�w�I���E���(fDH�É�L��蛖��H�H�DI�D�H�CI9�u�L��D���+���H�U�dH3%(u.H�e�[A\A]A^A_]�DH)�H�L��D��n���詐��f���UH�oSH��H��H�?�CuH���N�����~*H�CH��[]��H��萤����~�Cu�H�;�ː1���ff.����USH��H��H�5D#�G���H����H��覡������o��H��H��t/��u:H�{�I|��H��H��H��H��[H�=b�1�]�L���@H��#H�8��@H��t2H��t<��u��tBH��#H�8�fDH�A#H�8�@H��#H�8�@H��#H�8�s����H��#H�8�c���H��#H�5S�H�81�艅��f���H�}#SH��H�0�	w��H��uH��[�H�(#H�5��H�81���m�����ATUSH��H�H��u��B���f�@��u�H���H��u�H��#L�#H�-��H��u%��H���â��H��#H��t�H�{M��L�Y�1�1�H���ݪ��[�]A\���H��H�5y#�|���H��tH���ߟ�����n��H��H���L���H��#H�5.�H�81��d���@��SH��H��H�=��H��dH�%(H�D$1�H�T$谚���T$��uH�L$dH3%(uH��[�H���:����|$著��輍��ff.����H��(H�$H�|$H�t$dH�%(H�D$1����H�����H�D$H�PHc�H9������H�pH� uk1��|��I��H��tr1�1�H�|$E1�1�虈��H�$H�HH�PH� uD�|$1���q��H��t\H���\v��H�L$dH3%(u?H��(��H�p�f.�H�P�H��"H�T$H�5W�H�81��k��踌��H���"H�5S�H�81��k����H��(H�$H�|$H�t$dH�%(H�D$1��~��H���~��H�D$H�PHc�H9��{���H�pH� uk1��{��I��H��tr1�1�H�|$E1�1�艇��H�$H�HH�PH� uD�|$1�蹄��H��t\H���Lu��H�L$dH3%(u?H��(��H�p�f.�H�P�H���"H�T$H�5G�H�81��j��訋��H���"H�5��H�81��pj��ATf�USH��`dH�%(H�D$X1�)D$ H�D$0��~H���H�D$��t���x���k���A�H�s�"H��H�2���H���gH�|$�=}��H�D$H�PHc�H9��#���H�pH� tH�pH�|$�=z��I��H���H�|$E1�1�1�1�����H�|$H��t�|���|$1�����H��H����H�߅��}��w������I��t,H�T$H�t$@H�\$@H�=d���L�d$H�����T$������H�\$ L�d$ ����D$4��	ЈD$4�y���L��H�߉��D$4����	ЈD$4�y��H�5����H��輀���D$4��L���I���H����H�|$(H�����s��H�L$XdH3%(�WH��`[]A\ÐH�5��"H�|$�~��H���81�H���q��H��H�����H�i�"H�5��H�81��Hh���L��H���L��H�=����跦���Y���f��D$0��uX��H��H�5��HD�H�
�"H�81���g�������������H������H��"H�5��H�81���g�������|$0袒��L�f���H���"H�T$H�5F�H�81��g��H���"H�5A�H�81��tg��H��蜡��H�u�"H�5|�H�81��Tg��H���|����|$�3����^���H���"H�5P�H�81��~��fD��1����D������f���UH��1�SH��H��艣��H��tH��[]�D1�1ҾH������"���1�H��H��H�[�"��i��H��u�1�1ҾH����~����1�H����g��H��u�1�1ҾH���~���΁��1�H��H��H��"�Z���H���m���1�1ҾH���~��蛁��1�1�1�H���u��H���@���H�߾1�1��S~���n���H��H��1�[]�n��ff.���USH��dH�%(H�D$1���~H�H�$��t��tc������f��H�����H��H���}��H��H���=|��H��H���g��H��t*H����o��H�L$dH3%(u
H��[]�H�^��s���H�\�"H�5x�H�81��;e��ff.���USH��H��(dH�%(H�D$1��k������H���~���H��H���3�������~@��t�=�uH���P���H��tIH�D$dH3%(��H��([]�D��u�1�H�T$H��H���am��H�<$tH�|$u�H���"H�5��H�81��jd��f.�1�H�t$H���Ai��H�|$u����1�H�t$H����g��H�|$�]�����>���H�'�"H�5X�H�81��d��fD��AVAUATI��US��H��H��@H�5�"dH�%(H�D$81��z��H��������H��I�D$M�,$H�D$���xA�H��E1�����I��tL�����I��H�|$��v��1�H���l��H��H����H��趜������M��t%E1�M���������H��載������I��t,H�T$H�t$ H�\$ H�=(���L�t$(�ސ���T$����H�D$L�@H�HH� tH�HL�d$1�H��L���vq������H�t$H�T$1��M���H�ŋD$����H�D$L�@H�HH� tH�HH�uH�E tH�uH��L���q��H�߅�~b苜��H�t$H���~v��H��H�L$8dH3%(uZH��@[]A\A]A^�fD��t_�����b���H���:����|$��H���)���H��"H�5v�H�81���a�����H�E�"H�5��H�81��$y��M�t$� ���H��"H�5��H�81��a��H���ʛ��H���"H�5��H�81��a��H��誛��H���"H�50�H�81��ba��f���AVAUATUH��S��H��H��@H�5y�"dH�%(H�D$81��lw��H������cI��H�EL�mH�D$H�EH�D$���8A�L��1��x���I��tL���:���H��H�|$�t��H�|$�t��1�L���i��H��H���H����~�����H��t%E1�I���������H���������I��t,H�T$H�t$ H�\$ H�=w�L�t$(�-����D$����H�D$L�@H�HH� tH�HH�D$H�PH�pH� tH�pH���o��H�߉��+��������u�G{��1�H�L$8dH3%(��H��@[]A\A]A^�@���������~��H���"H�5��H�81��_��H��趙��H���"H�5�H�81��n_��H��薙��H�o�"H�5�H�81��N_��H���v����|$�-���H�F�"H�5��H�81��%_���@���H���"H�52�H�81��hv��L�u�
���ff.�@��AUATUH��S��H��H��HH�5�"dH�%(H�D$81��t��H�������=I��H�EL�mH�D$H�EH�D$����L���
���I���E1�H�|$�q��H�|$�q��跅��H��H���1�H�t$M��L��H���l������H��t1H�D$H�T$H�t$ H�l$(H�=-�H�D$ ����D$����H�D$L�@H�HH� tH�HH�D$H�PH�pH� tH�pH���K]��H�߉�豓�������u�x��1�H�L$8dH3%(��H��H[]A\A]�@���������|��fDL��谔��I������H�Q�"H�5�H�81��0]��H���(���H�1�"H�5��H�81��]��H�������|$���H��"H�5��H�81���\���~��H�K�"H�5�H�81��*t��H�m�<������H��H�5��"��r��H��tH���H��"H�5��H�81���s��f.���ATH�5��"USH���r��H����H��H�v�"L�%E�H��u#f.��L���s���H�L�"H��t�H��H������H��tH�57�"H��������uH��[]A\�H�5�"1�1�H������H�����u�H��"H�5��H�81��%s��H�.�"H�5�H�81��
s��ff.�f���AUATUH��S��H��H��HdH�%(H�D$81�腏�����uI��H�EH�}H�D$���S�E1�H��t蠒��I��H�|$�n��莂��H��H����1�H�t$M��L��H���]s������H��t1H�D$H�T$H�t$ H�l$(H�=�H�D$ 躈���T$����H�D$L�@H�HH� tH�HL�d$1�H��L���^������H�t$H����H�T$1�� ���H�ŋD$����H�D$L�@H�HH� tH�HH�uH�E tH�uH��L���]��H�߅�~a�.���H�t$H���Qn��H��H�L$8dH3%(uyH��H[]A\A]����������6y��H���ޏ���|$�ń��H���͏��H���"H�5�H�81��Y��H��譏��H���"H�5��H�81��p���z��H���"H�5Y�H�81��xY��H���p���H�y�"H�5��H�81��XY��H�m����ff.�@��SH�5l�"�oo��H��tH��H��菈��H��[�H���"H�5,�H�81��bp��f���AVAUA��ATI��H�5!�"US��H���o��H��������H��uOA�E1����H���!^��H��H����E��t`H��H���Uy������H��[]A\A]A^�=���DI�<$����M�d$�9�ucH��t��2���L��I���p��I���f�H��L�
��"1�L��ATE1�H��H���@���ZY��u�H���2Z��H��"H�5�H�81��W���1����<w��H�U�"H�5��H�81��4o��H���"H�5b�H�81��W��H����Y��H���"H�5��H�81��W���A��+���ff.����ATA��H�5��"US�m��H��t}H��蜕��H����\��H��H��tMH��H��E��u�<|����tiH��[]A\���@�h����u�H���7Y��H� �"H�5/�H�81��V��H��"H�5��H�81���V��H�P�"H�5��H�81��/n��H����X��H���"H�5�H�81��V��ff.�@��1��uv��D����bv��f���UH�5��SH��H���"H�8�`��H���"H�-b�"H�5��H��H�H�E�\g��H�E�"H�}H�5m�H�H���"H��8g��H�y�"H�}�����H��H�5��H��p��H�}�����H���H�5/��p��H�}�����H���H�5Z��jp��H�}�H�*�H�5ҭ�Np��H�}�H���H�5Y��2p��H�;H�5���c��H�;1�H�G�H�5���{��H�;H�5���,`��H�;1�H���H�5T��d{��H�;1�H��H�5C��L{��H�;1�H���H�5J��4{��H�;�����H�U�H�5V��{��H�;�����H�*�H�5J��z��H�;1�H�2���H�5A���z��H�;1�H�
���H�57���z��H�;1�H�r��H�5ͺ�z��H�;1�H�z��H�5���z��H�;�H����H�5���z��H�;�����H�����H�5(��hz��H�;�����H�9���H�5Y��Mz��H�;�����H����H�5���2z��H�;�����H���H�5���z��H�;�����H���H�5e��y��H�;�����H�-��H�5���y��H�;�����H����H�5+���y��H�;�����H����H�5��y��H�=3��p��H���"胂���f���i���H��[]鮁��f.�@��USH��8H�5g�"dH�%(H�D$(1��Zi��H���CH��H���Fp�����LH���5W��H�L$H�T$H��H��H���k��H�T$ H�t$H���kV�����H�<$H����~���H�=o�H����V��H��H��H����R��H�|$�~���H�=��H���V��H��H��H���R��H�|$�~���H�=��H���nV��H��H��H���pR��H�|$�V~���H�=A�H���BV��H��H��H���DR��H�|$ �*~���H�=�H���V��H��H��H���R��H��H�L$(dH3%(uH��8[]�H�7�"H�5�H�81��i����r��H��"H�5��H�81��Q��f���AUI��ATU1�SH��H�t$H�$H��t
H�|$��v��H��1�H�<$tH���v��H��H�5~�"L���~g��I��H����H���jn����u|L���]U��I��H��tH���]V��H��H��t5H��tH���HV��H��H��t H��H��L���b�����teH��L��[]A\A]�H����p��1���p��H���"H�5"�H�81��P��H��"H�5��H�81��P��H���"H�5��H�81���g��H���p��H���yp��H�r�"H�5��H�81��QP�����AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$�u��I��1�H�|$t
H�|$�tu��H��1�H�|$t
H�|$�]u��H��H�5�"L���f��I��H����H���m������L���S��I��M��tL���T��I��H��tOH��tH����T��H��H��t<H��tH����T��H��H��t'H��H��L��L���#n����tqH�� L��[]A\A]A^�1�L���Uo��H���Mo��1��Fo��H�?�"H�5��H�81��O��H���"H�5�H�81��O��H�o�"H�5�H�81��Nf��L���n��H����n��H����n��H���"H�5��H�81��N��ff.���USH��H�5��"dH�%(H�D$1���d��H����H��H���k������H���R��1�H��H������Hc�H��~v1��)a��H��H�@H� uIH��H��H�$�����xLH�4$H�CH� u5H)�H���:b��H��H�T$dH3%(u-H��[]�H�C�f.�H�C��H�=�"1�1���M����n��H�.�"H�5��H�81��M��H��"H�5��H�81��d��D��USH��H�5��"�c��H��tzH��H���j����uRH���Q��H��蕋��H���R��H��H��t"H��H����p��H�߅�tH��[]��|���CO��H�=L�"1�1��M��H�|�"H�5
�H�81��L��H�d�"H�5
�H�81��Cd����ATI��UH��SH��0H���"dH�%(H�D$(1�H����b��H���uH��L����b��H��H���FH����i�����H���P��H��H���{���I��H����H��H�T$ H�t$��O��H�|$H��t2�Q��H�|$ H���Q��H��t]H�|$ tH��tPH��H��L��葇����a��H��H��tdL��H���Q����uOH�] H��H�L$(dH3%(u]H��0[]A\�H��H�D$��k��H�D$H����k��H�=��"H�5�1��K��H���(l��L���0���H�=��"H�5�1��{K���l��H�=��"H�5��1��aK��H���"H�5X�H�81��IK��H���"H�5[�H�81��b��H�Z�"H�5c�H�81��yb��f���AUI��ATUH��S��H��H��(H�5(�"dH�%(H�D$1��a��H���}���BuxH�D$I���w[��H��H����L����L���^`��H��H���H��H���O������I�] L��H�L$dH3%(�KH��([]A\A]�H�}H�|$������W��H�|$H�D$�j���H�5S�"H�=�"1�H��I���R��H��H���X���1�1ҾL���2b���Me��L���`��L��H���K��H����H���g�����B���H�߉D$�?j���D$���J��H�=��"H�5+�H��1���`��@�1�����h��H���j��H���
~��H�=��"H�5³1��UI��H�~�"H�5��H�81��`��H�=f�"H�5��1��(I��H�=Q�"H�5��1��I���.j��ff.�PXH�5��H��H�\�"H�81���H��f���SH��H�5�"dH�%(H�D$1��^��H��tIH��H����e����uVH����L��1�H��H���1L��H�<$H�H�Ѓ�H�L$dH3%(uH��[�H���"H�5�H�81��_���pi���K���ff.���SH��H�5h�"dH�%(H�D$1��[^��H��t_H��H���Ke����uJH���>L��H��1�H���K��H�<$H��t �t��H�L$dH3%(uH��[�D�����h�����H� �"H�5ɬH�81��^��ff.�@��SH��H�5��"dH�%(H�D$1��]��H��t_H��H���d����uJH���K��H��1�H����J��H�<$H��t �Ss��H�L$dH3%(uH��[�D����,h������H�p�"H�5�H�81��O^��ff.�@��SH��H�5�"dH�%(H�D$1��\��H��t_H��H����c����uJH����J��H��1�1�H���__��H�<$H��t�r��H�T$dH3%(uH��[�����|g���W���H���"H�5i�H�81��]��ff.�@��SH��H�5X�"dH�%(H�D$1��K\��H��t_H��H���;c����uJH���.J��H��1�1�H���^��H�<$H��t��q��H�L$dH3%(uH��[������f�����H��"H�5��H�81���\��ff.�@��SH��H�5��"dH�%(H�D$1��[��H��t_H��H���b����uJH���~I��H��1�1�H���]��H�<$H��t�Aq��H�T$dH3%(uH��[�����f�����H�`�"H�5	�H�81��?\��ff.�@��USH��H�5��"�Z��H��t<1�H����M��H��H��tBH����{��H�߉��~�����t��_��1�H��[]�H���"H�5��H�81��[��H�=��"H�5��1��LD��ff.����SH��H�5h�"dH�%(H�D$1��[Z��H��tgH��H���Ka����uRH���>H��1�H��H��H���G��H�<$t�H�L$dH3%(u;H��[�@H���@N��H��1�H��u������H��"H�5��H�81��Z���d��f���SH���"H�5*�H���"H�H�;�T��H�;H�5�H���"H���"H��kT��H���"�����H�(���H��H�5S�H��Vi��H�;�H�7���H�5@��;i��H�;1�H����H�5���#i��H�;1�H�����H�5���i��H�;1�H�?���H�5����h��H�;H�v�H�5M��V��H�;H�`�H�5���V��H�;1�H���H�5��h��H�;1�H�����H�50��h��H�;1�H����H�5��h��H�;1�H����H�5S��gh��H�;1�H�K���H�5|��Oh��H�;1�H�����H�5#��7h��H�;1�H�����H�5��h��H�;�H���H�5���h��H�;�H�5�H�5����g��H�;1�[H�l�H�5<���g����USH��8H�5��"dH�%(H�D$(1��W��H���CH��H���^����t�LH���@��H�L$H�T$H��H��H����I��H�T$ H�t$H���F���Fv��H�<$H���:m���H�=ϯH���&E��H��H��H���(A��H�|$�m���H�=��H���D��H��H��H���@��H�|$��l���H�=�H����D��H��H��H����@��H�|$�l���H�=��H���D��H��H��H���@��H�|$ �l���H�=}�H���vD��H��H��H���x@��H��H�L$(dH3%(uH��8[]�H���"H�5@�H�81��vW���1a��H�z�"H�5�H�81��?��f���AUI��ATU1�SH��H�t$H�$H��t
H�|$�4e��H��1�H�<$tH��� e��H��H�5��"L����U��I��H����H����\����tu|L���?��I��H��tH���D��H��H��t5H��tH���D��H��H��t H��H��L����>����teH��L��[]A\A]�H���8_��1��1_��H�*�"H�5��H�81��	?��H�r�"H�5کH�81���>��H�Z�"H�5�H�81��9V��H����^��H����^��H���"H�5��H�81��>�����AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$��c��I��1�H�|$t
H�|$��c��H��1�H�|$t
H�|$�c��H��H�5{�"L���{T��I��H����H���g[����t��L���=��I��M��tL���VC��I��H��tOH��tH���AC��H��H��t<H��tH���,C��H��H��t'H��H��L��L����S����tqH�� L��[]A\A]A^�1�L���]��H���]��1��]��H���"H�5��H�81��~=��H���"H�5O�H�81��f=��H���"H�5x�H�81��T��L���V]��H���N]��H���F]��H�?�"H�5'�H�81��=��ff.���ATI��UH��SH�3�"H���3S��H����H��L���S��H��H����H���Z����t��H���Z<��H�5��"H�=$�"H���W��I��H��tS�WR��H��H��t!L��tH���A����uH�] H��[]A\�H���\��L���l��H�=��"H�5\�1��I<��H�=��"H�5�1��4<��H���"H�5�H�81��<��H���"H�5.�H�81��dS��H�-�"H�56�H�81��LS��ff.����AUI��ATA��H��UH��SH��(H�5��"dH�%(H�D$1���Q��H����E���SuvH�D$H����o��I��H����H���=���,Q��H��H����L��tH���`@������H�] H�L$dH3%(H���H��([]A\A]ÐI�EH�D$A���5I�}A�����ZS��H�|$I���}H��H�|$H�D$�x��E1�E1�1�H�=��"H��H�5�H���j��I��H���8���1�1ҾH����R���U��H��L���@Q��H��I���<��M��tJL���W����tuWL�e �'���H����Z��L���j��H�=��"H�5X�1��E:���1�D���Y��H�=o�"H�5_�1��!:���<[��L��D$�Z���D$����:��H�=>�"H�5��H��1��MQ��H�=&�"H�5��1���9�������H���"H�5�H�81��Q��fDPXH�5��H��H��"H�81��9��f���SH��H�5��"dH�%(H�D$1��O��H��tIH��H���V����tuVH����8��1�H��H���1>��H�<$H�H�Ѓ�H�L$dH3%(uH��[�H���"H�5/�H�81��eP��� Z���K���ff.���SH��H�5�"dH�%(H�D$1��O��H��t_H��H���U����tuJH���N8��H��1�H���=��H�<$H��t �d��H�L$dH3%(uH��[�D����Y�����H���"H�5y�H�81��O��ff.�@��SH��H�5h�"dH�%(H�D$1��[N��H��t_H��H���KU����tuJH���7��H��1�H����<��H�<$H��t �d��H�L$dH3%(uH��[�D�����X������H� �"H�5ɜH�81��N��ff.�@��SH��H�5��"dH�%(H�D$1��M��H��t_H��H���T����tuJH����6��H��1�1�H����?��H�<$H��t�Qc��H�T$dH3%(uH��[�����,X���W���H�p�"H�5�H�81��ON��ff.�@��SH��H�5�"dH�%(H�D$1��L��H��t_H��H����S����tuJH���>6��H��1�1�H���??��H�<$H��t�b��H�L$dH3%(uH��[�����|W�����H���"H�5i�H�81��M��ff.�@��SH��H�5X�"dH�%(H�D$1��KL��H��t_H��H���;S����tuJH���5��H��1�1�H���>��H�<$H��t��a��H�T$dH3%(uH��[������V�����H��"H�5��H�81���L��ff.�@��UH��SH��H�5��"dH�%(H�D$1��K��H��tnH��H���R����tuYH����4��1�H��H���:��H�<$t.�H��1�1��a��H�L$dH3%(u9H��[]�fD�H����T�����4���H�M�"H�5��H�81��,L����U�����AUI��ATA��H��UH��SH��H�5��"dH�%(H�D$1���J��H��tnH��H���Q����tuYH���
4��1�H��H���P9��H�<$t11�H��L��D���9`��H�L$dH3%(u:H��[]A\A]�fD1�H���S�����g���H���"H�5)�H�81��_K���U��f.���UH��SH��H�5�"dH�%(H�D$1��J��H����H��H����P����t��H���B3��1�H��H���8��H�<$t�H�L$dH3%(uOH��[]�f�H���"H��u%H�S�D�H���h��H�|�"H��t�H��H���4d��H��t�1���ET���p���H���"H�52�H�81��hJ�����SH��"H�5A�H���"H�H�;�C��H�;H�5E�H�
�"H�+�"H���C��H�4�"�����H����H��H�5ÁH���X��H�;�H�w���H�5���X��H�;1�H����H�5��X��H�;1�H�g���H�5��{X��H�;�����H�|���H�5��`X��H�;H��H�5���jF��H�;H�͜H�5n��TF��H�;1�H�x���H�5~��X��H�;1�H�����H�5���X��H�;1�H���H�5ؗ��W��H�;1�H� ���H�5���W��H�;1�H�X���H�5���W��H�;1�H�����H�5���W��H�;�H���H�5-��W��H�;�H�Z�H�5��nW��H�;1�[H���H�5���UW��D���d������77�����UH�5��"H��SH���'G��H����H�5�"H��H����a��H�5՚"H���F��H��H��tK�a��H��H��H���4����t��uH���[]�DH��1�[]�H�=��"H�5�1��j0��H�=��"H�5՛1��U0��H�=��"H�5��1��@0����ATUH��H�5ߙ"SH���fF��H��uwH�5ʙ"H���RF��I��H����H�5G�"H���`��H���:��H�5��"H��H���F��H��tVH��L����d��H��t3H�C H�5�"H��H����f��H��[]A\�H�=�"H�5F�1��/��H�=��"H�5O��/��H�=��"H�5��o/��H�=��"H�5��1��Z/��f.���AUI��ATI��H�5�"US��H��H��dH�%(H�D$1��[E��H������~I�,$��t%I�T$H�$���x�����2N��f�H�5Q�"H��H�$�Z��H��t4H��L���y���H�L$dH3%(�oH��[]A\A]�f.�H�5��"H���D��I��H���D����H���"H�<$H�0�9Z��H��utH���A��L���?��H��H�����C_��H�4$I��H�NH�VH� tH�VH��L���l:������I�] H�5A�"H��L���e��L���-���fD��^��H��H���@S��H��1�L��H����6��H��H��u�H�=!�"H�5��1��-��H���h>��H��H��u�H�=��"H�5��1��{-��H�5��"H���LY��H������H���"H�5G�H�81��D��H�=��"H�5�1��D���QN��H�=��"H�5��1��-��H����3��H�=}�"H�5/�1��,��ff.�@��AVAUATI��USH��H��H�5�"dH�%(H�D$1��]��H�5g�"H��H�$��B��H����H�5K�"L��H����B��I��H����H�<$H�5��"�B��I��H����H�=��"�K��H��H��H�����H�5�"H���zB��I��H��t>�=]��L��H��L��I��L���F����u:H�L$dH3%(H��u"H��[]A\A]A^�H�=]�"H�5C�1���+���L��H�=C�"H�5�1���+��H�=>�"H�50�1��+����H�U�"1��N-��ff.���H���"1��.-��ff.�ATA��H�5t�"US�A��H��t~H���i��H���0��H��H��tQA��t"H��H���M��H�߃�u#[]A\��Z��fDH�=�"H��H���_�����-��H�=��"1�1���*��H�=h�"H�5*�1���*��H�=S�"H�5E�1���*��D����B���f���1��5���D��AWAVAUATI��H�5��"UH��S��H��H��hdH�%(H�D$X1��@��H����L�l$L�D$L�t$ L�|$(L�l$0L�D$8L�t$@L�|$H���zI�$�H�D$H�D$0H�p� DH��t
Hc�I�<�H�9��H��H9�tH�H9��H��t�H��H�H9�u�9����tC����H�|$@����H��t
@����H�ݼ"H�5��H�81��)��@H�5	�"H�|$�WU��H����H�|$H�5r�"�?��H����H���<5��H��H����H�] H��H�\$XdH3%(��H��h[]A\A]A^A_�H���H���b���L�D$�L[��L�D$H��L���\N��L��I���QN��L��I���FN��H97�"I���h��Y��L��L��L��H���@E��H��H���d���H�=�"H�59�1��(���L���e��1�1�1�H��I���D��H��H��t
L���*������1�1ҾL���@���C��H�5��"1�1�L���0��L��H���F*��H������L���5f��H���MT�����fC���������G4��H��H����H�Ǿ�7���H����;�����H��"H�5u�H�81��'��������F��H�=�"H�5��'��H�=	�"H�5�1��{'��H��"H�5��H�81��c'���~H��H���"H�5��H�81��F'��H�T$H�=��"H�5��1��,'��H�T$H�=��"H�5��1��'��f���UH��SH��H�54�"�7=��H����H��H���#D��=�ubH���\��H��H���I`��H��t7H���lX��H��tH��H��1�[1�]�R��H��H��[]�mF��H�=�"H�5��z&��H��"H�5=�H�81��b&��H�˻"H�5t�H�81��=��f.���AUI��ATA��H��UH��SH��H�5W�"�Z<��H����H��H���FC��=�ufH���[��H��H���l_��H��t;H���W��H��tH��H��L��D��[1�]A\A]�Q��H��H��1�[]A\A]�E��H�=5�"H�5&��%��H��"H�5\�H�81��%��H��"H�5��H�81���<��f���ATUH�-��"SH��H���;��H����H��H��I���o;��H��H����H���[B��=���H���Z��1�L��H���;.��H��H��trH���V��H��H��t#�X������H���^��[�]A\��;Z����t�H����^��H�=7�"H�5��1��$��H��"H�5��H�81���;��H�=
�"H�5��1��l$��H�չ"H�5/�H�81��T$��H���|^��H�=վ"H�5&�1��7$�����UH��SH��H�5T�"�W:��H����H��H���CA��=�uhH���Y��H��H��t3H�5��"H���:��H��tsH��H����8����uH��H��[]�D1�H���8����v�H�=2�"H�5��1��#��H���"H�5W�H�81��|#��H��"H�5��H�81���:��H�=ͽ"H�5���Q#�����USH��H�t$H�5r�"�u9��H����H��H���a@��=�u{H����X��H�|$H��u1�H���M#����w1H�D$H��[]�@H�|$�NH��H��H��H��� #����uH��t�H�=P�"H�5܏1��"��f���u�H�D$H��[]�H��"H�5b�H�81��"��H��"H�5��H�81���9��ff.�@��UH��SH��H�5��"�8��H��tKH��H���w?��=�uyH����W��H�51�"H��H���V8��H��tGH��H���&F����u"H��H��[]�H�`�"H�5	�H�81��?9��H�=h�"H�5�1���!��H�=C�"H�55��!��H� �"H�5z�H�81��!��ff.�@��ATI��UH��SH���"H���7��H����H��L���7��H��H����H���>��=�uxH����V��H���%��I��H��tK��6��H��H��t!L�⾘H���&����uH�] H��[]A\�L���f8��H�=�"H�5>�1��� ��H�=j�"H�5�1��� ��H�5�"H�5��H�81�� ��H��"H�5ƅH�81��7��H�ŵ"H�5ΊH�81���7��@USH��H�5��"H�|$�IL��H��tDH�|$H�5h�"�6��H��H��tt�@��H��H����H��H���OD����tiH��H��[]ÐH�|$�6^��H���NL����t`���Z��H��H��tAH�Ǿ�U��H�߾�$��H��H��[]�H�=P�"H�5B�1�����H���*7��H�=C�"1�1����H�=3�"H�5	�������ATI��U��H��SH��H�� H�5��"dH�%(H�D$1��5��H������i��I�<$H�|$����M�d$�9��?H����H�5��"��J��H����L���[7��H�|$H���~,��H�|$H�D$�\��H��H��I���5��L��H���� ��H����H���;��=�trH��D$�2?���D$���w��H�= �"H�5�H��1���5���H�D$�?��I��H�����4��H��H��tIL�⾘H���Q#����u4H�k H��H�L$dH3%(u}H�� []A\��w9��H�|$���I���H���>��L���h5��H�=��"H�5@�1������1����%=��H���"H�5�H�81��5��H�=F�"H�5/�1������>���A��i�����U1�1�H��AWAVAUATSH��(dH�%(H�E�1��sF��Lc�I��L9���]��L��H��H��<�H��H��H��H���H)�H��H9�tH��H��$�H9�u�%���H�\$L��H���H���F��H����L���R(��I��E��~zE�l$�I��I��J�+H�E�D�;����L�kI���(��L��I����4��L��H���RQ���M��tL���4��H��L��H���1Q��L��L���&Q��H;]�u�H�M�dH3%(L��uIH�e�[A\A]A^A_]��H)�H�L��#���L���/��H���"H�5��H�81����� =��SH���GN��H9P�"tH9?�"t%H9.�"u#�[�D�[�f��[�H��"H��H�5X�H�81����ff.���AVAUI��H�5.�"ATUSH���1��H����H�5��"H��H���WL��H�5`�"H���1��I��H����L���4���A���<L��E1�1�D��I��H��L����C��I��H��tTH��1���-��H���L��H�KI��H� u,M��D��H��L���C��H��t[H��[]A\A]A^�f.�H�K��H�=#�"H�5M�1����H�=�"H�5�1����H�=��"H�5߅1��{��H�=�"H�5��h�����UH�5�"SH��H���0��H��t@H�5��"H��H���0K��H�59�"H���a0��H��tDH��H���!!����uH��H��[]�H�=k�"H�5Q�1�����H�=V�"H�5��1�����H�=Q�"H�5C�����D��ATH�5c�"USH����/��H��tIH�5�"H��H���J��H�5��"H����/��I��H��tJ�J��H��L��H���I����uH��[]A\�H�=ij"H�5��1��F��H�=��"H�5�1��1��H�=��"H�5��1����ff.����ATH�5��"USH���9/��H��tBH�55�"H��H����I��H�5�"H���/��I��H���"Y��H�=@�"H�52�1����H�=�"H�5�1����ff.�f�PXH�5�1�H��H�=��"�u��D��UH�5�"H��SH���.��H��tmH�5��"H��H���@I��H�5I�"H���q.��H��tBH��H���A1����t��uH���[]�@H��1�[]�H�=h�"H�5�1������U���H�=N�"H�54�1�������UH�5ԁ"SH���-��H��t7H����U��H�����H��H��tIH��1�H����5��H�߅�t H��[]�>G��H�=��"H�5�1��i�����H�=ݱ"1�1��T��H�=ͱ"H�5��1��?��ff.�@��H��H�51�"�\-��H��tH���/5��H��H�H�D��n���ff.���SH��H�t$H�5�"�-��H��tGH�|$H���*��H�D$H�PH�pH� uH���&,��H�T$H9Bu&H��H��[�f�H�p��H�=�"H�5��1��u��H�=�"H�5q�1��`����UH�5d�"SH���,��H��tAH��H����;��H��H��t"H���5��H��H��[H��]�(��f�H���[]��o���ff.�@��UH��H�5�"SH���,��H��tH��H������H�߉���)��H��H��[]�����ff.���H��H�5�"��+��H��tgH���2����t*��tE��t0H�=�"��H�5��1��Y��f�H�=��"H���I��H�=��"H���I��H�=y�"H���pI�����ff.���USH��H�5"H���7+��H��t1H��H���u��-����H���$��H��H��[]�fD������,���ff.����H��H�5�~"��*��H��tH���2��H��H�H�D����ff.���H��H�5q~"�*��H��tH����1�����(��H��H���l,��������UH�54~"SH��dH�%(H�D$1��J*��H��tL1�H���@��H��H�$�_9��H���D��H��H��H���>����u5H�L$dH3%(H�$uH��[]�H�=2�"H�5$1�����4��H�=�"H�5��1����f.���UH�5�}"SH��dH�%(H�D$1��)��H��tL1�H���k?��H��H�$�8��H���GD��H��H��H��������u5H�L$dH3%(H�$uH��[]�H�=��"H�5t~1������4��H�=h�"H�5�1�����f.���AUATI��H�5�|"UH��SH��H�T$H�$��(��H��tSL��H�5H|"H����(��I��H��tcH�|$��7��H��I����7��L��L��H��H���"A����u#H��H��[]A\A]�H�=Ȭ"H�5�}1��:��H�=��"H�5q�1��%��H�=��"H�5t}1������UH��H�5|"SH��H���4(��H��u/H�5�{"H��� (��H��tCH������H��t#H�C H��H��[]�H�=9�"H�5�1����H�=$�"H�5�}���H�=�"H�5}���D��UH��H�5�{"SH���'��H��thH��H�5h{"H���'��H��H��tI�SB��H��H��H���uD����t��uH��1�[]�H���[]�H�=��"H�5�1�����j���H�=s�"H�5e|1�����D��ATI��UH��H�5�"S��A��H�5�"H��H���A��H��H���)���H��u[]A\��L��H�5>z"��&��I��H��teH��H�5'z"�&��H��H��tNH��H�5pz"�&��H��H��tL�^A��H��L��H��H����2����u[�]A\����u1[1�]A\�H�=��"H�5k{1����H�=��"H�5r{1�����H�=[�"H�5k~1�����ff.�f�PXH�5�|H��H�,�"H�81����f���SH�5ܣ"��%��H��t1H��H����,��=�u7H���0E��H���H��[H��H�H�Ѓ��H�Ҥ"H�5{tH�81��&���|���ff.����SH�5l�"�o%��H��t1H��H���_,��=�u7H���D��H���@��[H��H�H�Ѓ��H�b�"H�5tH�81��A&������ff.����SH�5��"�$��H��tAH��H����+��=�uGH���PD��H���H@��H��tH��[�:��f.��[�H��"H�5�sH�81��%�����ff.����ATUSH���-��H��I����H����#��H��H��t.H�꾘H���%����uI�\$ H�������t-L��[]A\�H���.��H���W%��H�=p�"H�5/{1���
��H�=[�"H�5X|�
��ff.�@��UH��AWAVA��H��AUATI��SH��H��xH�5Ч"dH�%(H�E�1��t>��H�5w"H��H�E��#��H����H�}�H�5]w"I���#��H�E�H����H�=��"�l,��H�u��H��H������H�5�v"H���I#��I��H���XE���=I�$H�E�A����I�|$H�}�A���?I�L$�H�M�A9��H��t�uH�H�у�H����H�}��2��1�H�}�I��tH�}���1��H��H�U��=��H�U�H�}�M��I��L��L����2������H�M�dH3%(H����H�e�[A\A]A^A_]�H�E��H�E��V���fDH��u��y$��f�@��u�H�H�΃�H��u�� ��H������ ��H��H����H��H9���1�H�=j}��4��H�U�H��� �
H����H��H��h���H�E��E��H��p���H��h���H��H�E�H��H��H��H���H���H)�H��H9�tH��H��$�H9�u��t	H)�H�L�H�T$H���H�}�H��x���tnE1�L�e��9H��J��L��H�E��L0��H��x���H�u�H��p���J��I���}?��L;u�}H�E�H� u�H�@ �H��h���H����H��H��H��H%�H�E�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�t$I���H�E�M�>E1�L�`�H��0�AH��J�<�H�5�s"�L ��K�D�H����I��M9�tH�E�H� u�H�@ ��E1�H�}�tH�}��?/��I����:��H��H�}�L��PH��h���M��L��L��x����3��ZH�}�Y���%�~@��H�}��u@���0���H�BH��I��H�E��B��L��h���H��p���I�����L�e�L��N�4�H��=��L��H�}�L��H���	8��H��x���M��� ���L��L�e�H��L��H����7��I������H�G�:���H�P����H��h���H��H�4�H��=����H��t�H��h���������D���'��H�=�"H�5�s1���������H�=��"H�5�s�n���Y?��H�}��P?��H�=ɢ"1�1��P���k)��H�}�����H�=��"H�5�s�*��H�c�"H�5�yH�81����f�UH��1�H�r"SH��H�=�"�	��H��H������H��tH�C H��H��[]�H�=M�"H�5$t����ATI��H�=,�"H�]q"UH��1�S�Q	��H��L��H���<��H��t&H�C H���r���H�5á"H��H���>��H��[]A\�H�=ѡ"H�5"s�U��D��SH�5Tq"���H��t)H��H���@��H��tH��H��[�^���fD�[��|�ff.����USH��H�5'�"�*��H��tYH��H���$��=�u_H���{<��H��H���@@��H��H��t H���P@��H��H��H��[]�����H���[]�H���"H�5�kH�81��������ff.�@��SH�5��"���H��tAH��H���#��=�uGH����;��H����?��H��tH��[�
���f.��[�H�r�"H�5kH�81��Q������ff.����UH��SH��H�5�"���H��t1H��H���"��=�uLH���X;��H��� ����u"H��H��[]�H���"H�5�jH�81�����H�=�"H�5�s1��d��H�͚"H�5'rH�81��L��ff.����UH�5�sSH��H�8�"H�1�"H�;H��6��H�;H�5�sH���"H�f�"H����H�-W�"H��"H�5�sH��H�UH�����H�UH�;H�5}sH�E�"����H�-Q�"H�=2�"H�5\NH��"H�U���H�UH�=�"H�5:NH���"���H�=-sH�מ"�!��H�=sH���"� ��H�=s�� ��H�=sH���"�� ��H�=�rH�z�"�� ��H�;�H�5�rH�W�"�"1��H�;�H�5�r�1��H�;1�H�R�H�5mq���H�;�H�w���H�5�r���H�;�����H��H�5�R��)��H�;�H��H�5�R�)��H�;1�H����H�5\s�)��H�;�H���H�5Wr�)��H�;1�H�v�H�5kZ�j)��H�;�H����H�5+r�O)��H�;1�H����H�5IZ�7)��H�;�H����H�5:]�)��H�;1�H���H�5�k�)��H�;1�H��H�5vm��(��H�;H�qkH�5�q���H�;H�QmH�5�q����H�;1�H�����H�5�q�(��H�;H��qH�5q���H�;1�H����H�5�q�z(��H�;�����H����H�5�l�_(��H�;H��lH�5�j�i��H�;1�H����H�5�j�1(��H�=��"H�5c�����H�=o�"�����H�;��H�5�P�'��H�=P�"�H���H�5�P��'��H�=1�"�H��H�58Q�'��H�=�"H�%QH�5$Q����H�=��"1�H����H�5�o�'��H�=ܛ"�H�x�H�5�o�l'��H�=��"1�H���H�5do�P'��H�=��"1�H���H�52o�4'��H�=��"1�H���H�52p�'��H�=i�"1�H�(�H�5!p�&��H�=M�"�H���H�5p��&��H�=.�"1�H���H�5�o�&��H�=�"�H���H�5�o�&��H�=�"1�H��H�5rn�&��H�=ך"�H�S�H�5�o�g&��H�=��"1�H���H�5�o�K&��H�=��"1�H�[��H�5�h�/&��H�=��"1�H�/��H�5uh�&��H�=d�"1�H��H�5
Z�%��H�=8�"H�5	����
��H�=%�"�����H�Q��H�5�N��%��H�=�"�H�B��H�5�N�%��H�=Yo���E1�1ɺH�=љ"H���1��H�=™"�H�^�H�5�N�b%��H�=��"H��NH�5�N�h��H�=��"1�H���H�5�n�,%��H�=m�"1�H����H�5�n�%��H�=Q�"1�H���H�5|n��$��H�=5�"1�H���H�5mn��$��H�=�"1�H�8�H�5Yn�$��H�=��"�H���H�5Kn�$��H�=ޘ"�H�j��H�5�j�~$��H�=��"�����H���H�5�M�_$��H�=n����H�d�"H��[]�DSH��PH�5<�"dH�%(H�D$H1��/��H����H��H���������H���z#��H�L$H�T$H��H��H�t$���H�T$(H�t$ H���-��H�L$@H�T$8H��H�t$0�9��1�H�|$t=H�|$t5H�|$t-H�|$ t%H�|$(tH�|$0tH�|$8t
1�H�|$@��f�H�L$HdH3%(uH��P[��E��H���"H�5/oH�81��
���H�v�"H�5bH�81��U��D��USH��XH�5�"dH�%(H�D$H1��
��H����H��H���������H���U"��H�L$H�T$H��H��H�t$�[��H��H�T$(H�t$ �,��H�L$@H�T$8H��H�t$0�8���}1��H�|$H���p(���H�=WFH���\��H��H��H���^���H�|$�D(���H�=GH���0��H��H��H���2���H�|$�(���H�=�JH�����H��H��H������H�|$ ��'���H�=�jH������H��H��H������H�|$(�'���H�=�aH�����H��H��H�����H�|$0�'���H�=�mH�����H��H��H�����H�|$8�h'���H�=lmH���T���H��H��H���V���H�|$@�<'���H�=EmH���(���H��H��H���*���H��H�L$HdH3%(uH��X[]�H�I�"H�5�_H�81��(������H�,�"H�5�lH�81����ff.���AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$����I��1�H�|$t
H�|$����H��1�H�|$t
H�|$���H��H�5k�"L���k��I��H����H���W������L�����I��M��tL���F���I��H��tOH��tH���1���H��H��t<H��tH������H��H��t'H��H��L��L��������tqH�� L��[]A\A]A^�1�L�����H�����1����H���"H�5�GH�81��n���H�׎"H�5xkH�81��V���H���"H�5h^H�81����L���F��H���>��H���6��H�/�"H�5RkH�81�����ff.���AUI��ATU1�SH��H�t$H�$H��t
H�|$�D��H��1�H�<$tH���0��H��H�5�"L������I��H����H��������u|L���=��I��H��tH������H��H��t5H��tH�����H��H��t H��H��L���b����teH��L��[]A\A]�H���H��1��A��H�:�"H�5�FH�81�����H���"H�5#jH�81�����H�j�"H�5]H�81��I��H������H������H��"H�5jH�81�������AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$���I��1�H�|$t
H�|$����H��1�H�|$t
H�|$����H��H�5��"L���
��I��H����H���w������L������I��M��tL���f���I��H��tOH��tH���Q���H��H��t<H��tH���<���H��H��t'H��H��L��L���s,����tqH�� L��[]A\A]A^�1�L������H�����1����H���"H�5EH�81����H���"H�5�hH�81��v���H�ߋ"H�5�[H�81��
��L���f��H���^��H���V��H�O�"H�5�hH�81��.���ff.���ATI��UH��SH�C�"H���C��H����H��L���/��H��H����H���������H���z��H�5��"H�=D�"H�����I��H��tK�g��H��H��t!L��H�������uH�] H��[]A\�L����0��H�=_�"H�5�g1��a���H�=J�"H�51V1��L���H���"H�5VgH�81��4���H���"H�5FZH�81��|��H�E�"H�5N_H�81��d��@��AUI��ATA��H��UH��SH��(H�5�"dH�%(H�D$1��
��H����E���NuvH�D$H����,��I��H����H������L
��H��H���%L��H��������H�] H�L$dH3%(H���H��([]A\A]ÐI�EH�D$A����I�}A�����z��H�|$I�����H�|$H�D$�>1��1�H��H���Q���I��H���L���1�1ҾH������/��1�1�1�H���&��I��H������1�1ҾH���������H��L���D
��H��I�����M����L�������uyL�e �����1�D�����H������L���.��H�=4�"H�5�e1��6��Q�������H�P�"H�5Y]H�81��o
��H�=��"H�5�e1���L��D$�~���D$�����H�=̍"H�5j]H��1��+
��H�=��"H�5�]1���fDPXH�5�dH��H��"H�81���f���SH�5��"���H��tH��H�������u'H������[�H�ć"H�5mWH�81��	�����ff.���SH��H�5X�"dH�%(H�D$1��K��H��t_H��H���;����uJH�����H��1�1�H���.��H�<$H��t����H�T$dH3%(uH��[�����������H��"H�5�VH�81�����ff.�@��SH��H�5��"dH�%(H�D$1����H��t_H��H�������uJH������H��1�1�H���_-��H�<$H��t�A��H�L$dH3%(uH��[��������G���H�`�"H�5	VH�81��?��ff.�@��SH��H�5��"dH�%(H�D$1�����H��t_H��H����
����uJH���>��H��1�1�H���,��H�<$H��t���H�T$dH3%(uH��[�����l�����H���"H�5YUH�81����ff.�@��SH��H�5H�"dH�%(H�D$1��;��H��t_H��H���+
����uJH�����H��1�H������H�<$H��t ����H�L$dH3%(uH��[�D���������H��"H�5�TH�81�����ff.�@��SH��H�5��"dH�%(H�D$1����H��t_H��H���{����uJH������H��1�H���1��H�<$H��t �3��H�L$dH3%(uH��[�D�������7���H�P�"H�5�SH�81��/��ff.�@��SH��H�5�"dH�%(H�D$1�����H��t_H��H��������uJH���.��H��1�1�H���?���H�<$H��t���H�T$dH3%(uH��[�����\�����H���"H�5ISH�81����ff.�@��SH��H�58�"dH�%(H�D$1��+��H��t_H��H�������uJH���~��H��1�1�H�����H�<$H��t����H�L$dH3%(uH��[�����������H��"H�5�RH�81�����ff.�@��SH��H�5��"dH�%(H�D$1��{��H��t_H��H���k
����uJH������H��1�1�H������H�<$H��t�!��H�T$dH3%(uH��[�����
���'���H�@�"H�5�QH�81����ff.�@��SH������tH�ڹ1�1�[�}��DH�߾[�Z��f.���ATI��U��H��SH���H���tH��L��[��1�]A\�1���H��1�[]A\���f���UH��SH��(H�5T�"dH�%(H�D$1��G��H����H��H���3	������H�����1�H�L$H�T$H����H�|$t&H�|$�tH�L$dH3%(ulH��([]�f�H�9�"H��u%H��BD�H��� ��H��"H��t�H��H���d���H��HE��H���"H�5gPH�81�����X�������AVAUI��ATUH��S��H��@dH�%(H�D$81�H�=�"t��N�����9
��f��H�=\]� ���	H�=W]H���"���H���"��~�Hc�M�d��o�����j��~�I�UM�eH�T$I�UH�T$���t���L�D$ 1ɺH�5;�"�$��H�'�"L�t$ H��u&H��\fD�H���k��H���"H��t�H��A������a��I9�t_H�Մ"L�t$ H��u$H��B@�H���#��H���"H��t�H��A��������I9�tH�|$ @���}���A��H�|$(�!��H�5�}"H��I������H��H����L���� ��H�|$I�����H�|$������H��H���@1�H�t$I��L��H��������"H�|$E1���������k�����H�|$E1�D����H�����H�|$1�M�����&�����H�D$H�PH�pH� tH�pH����'������H�D$H�PH�pH� tH�pH��� ����u,����H���o��1�H�L$8dH3%(uxH��@[]A\A]A^Ã�u6H���C�����@�s��~���fDL������H�����H���
��H�=��"1�1���H�f}"H�5MH�81��E����	����AWAVAUI��ATI��US��H��HdH�%(H�D$81�H�=n�"t��L����������H�=Z����	H�=ZH�,�"���H�(�"��~�Hc�I�l�������R��~�I�UI�mH�T$��u�L�D$ 1ɺH�5؁"�S!��H���"L�t$ H��u#H��Y�H���+��H���"H��t�H��A������!��I9�t_H�m�"L�t$ H��u$H�G?@�H������H�D�"H��t�H��A���������I9�tH�|$ @���u�`���A��H�|$(����L��I���h��H��I���M
��H��H�H�D$���H�|$I�����H�t$1�����H���}
��H��H���41�H�t$M��L��H���L������H�|$E1���������'�����H�|$E1�D���������H�|$1�M�����������H�D$H�PH�pH� tH�pH���$������H�uH�E tH�uH�T$H�������u]H�t$H���]���H���%��H��H�L$8dH3%(uMH��H[]A\A]A^A_��;����fDH������H�����H������H�=�"1�1����������SH��x"H�5TWH��y"H�H�;���H�;H�5�;H�z"H��x"H����H�y"�����H�h�H��H�5�3H��
��H�;�H�'�H�5p3�k
��H�;1�H���H�5�N�S
��H�;1�H���H�5�L�;
��H�;�����H�����H�5�N� 
��H�;H��NH�5zL�*���H�;H��NH�5.4����H�;1�H����H�5>L��	��H�;�����H�����H�5FV�	��H�;�����H�R���H�54V�	��H�;1�H�
���H�5v-�	��H�;1�H�B���H�5D.�v	��H�;1�H�z�H�5�1�^	��H�;1�H���H�5�Q�F	��H�;1�H���H�5I�.	��H�;1�H�"�H�5U�	��H�;1�H�Z�H�5U���H�;1�H���H�5�T����H�;�H���H�5wM����H�;�H���H�5IU���H�;�H���H�5:U���H�;1�[H�h�H�5�H�|��f.�f����f.����H���#���H�H��H�Ѓ��f���UH��SH����tF�9�1�Hc�����H��H�xH� tH�x���b���t2���tH��H��[]������H�=�|"H�5�T1���H�=�|"H�5mT��f���UH��SH��H��H�|$H�t$��H���i��H�D$H�pHc�H9���!��H�xH� tH�x�
��H��H��[]�@��H��H�|$H�t$�Y�H�D$H�pHc�H9���!��H�xH� tH�x���H�D$H���@��H��H�|$H�t$����H�����H���z����t
�H���H�=�{"1���ff.���H��H�|$H�t$���H���������t
�H���H�=C{"1�1��B�f���H��H�Qt"H�50SH�8���H��t"H�5!SH��H�
{"H��"�H�=�z"�H����H�5�MH��z"���H�=�z"�H�I���H�5�R�m���H�=�z"�H����H�5�R�N���H�=�z"�H����H�5�R�/���H�=xz"�H�\���H�5�R����H�=Yz"1�H� ���H�5�RH�������w�����H���5�z"����H��H���q������H�=�#��ff.���AUATUSH��(dH�%(H�D$1�����H�H��H�^H�D$����H�D$H�|$���H�5�q"H�����I��H���H���H�H��1��M�H��L�hH� ��H�|$��1�E1�1�H�D$L�@Ic�I9�����H�HH� ��VL��L��RH����ZY������H�\$dH3%(H����H��([]A\A]�H�NH�L$���&����������H�|$L�h�[���H�|$���H�D$L�HH� tL�HH�P��4���f.�H�H�G����H���h�H������H�=Iz"H�5�P1��;��H��r"H�5�PH�81��#���>���ff.���UH��AUATSH��H�5Xp"dH�%(H�E�1��$�H����H�u�1�H��H������I�ĸM��thI�D$H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$H��L��I���L�����L��L���5�H�M�dH3%(uH�e�[A\A]]��V���H��q"H�5�OH�81����ff.���UH��AUATSH��H�5Xo"dH�%(H�E�1��$�H����H�u�1�H��H�����I�ĸM��thI�D$H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�l$H��L��I���L���@��L��L���5�H�M�dH3%(uH�e�[A\A]]��V���H��p"H�5�NH�81����ff.�UH���SH��dH�%(H�D$1��]�H��H���b�H���
�H��H�����H�����H�����H��H���t��H�t$H���7��H��H�H�t�X��HcD$H��H�t�F��H�T$dH3%(u
H��H��[]�������UH��H��SH��H��H�5w"�A��H�HH� tH�HH�xH�Hc�H9������}H��1�[]ÐATH�5gm"UH��S�=�H��tH��H���}�H��t[�]A\�fDH�5�u"H����
��H��I����
��H�hH���B��H�����H���B��L���j��H�߉��`����u�H�=�v"H�5M�y��H��n"H�5�LH�81��a�����UH��SH��(H�5$u"H�?dH�%(H�D$1��4
��H�5u"H���%
��H��H��t0H�}�C�H�UH��H��H�5�u"H�D$H�$����H��H�T$dH3%(H��uH��([]����ff.�f���������H���5jt"���H��H���������H��k"1��.��ff.���USH��H�5�C"H����H���tH��H�H��1ɾ*�	��H��H��[]�H���8�H������USH��H�5@C"H���G�H���tH��H�H��1ɾ,�:	��H��H��[]�H�����H������H��H�5�B"��1ɺ��!H������H���ff.�U1�H��1�SH�����H�57t"1�1�H��I��L��H������H��H��[]�@��SH��H��H�=�/H��dH�%(H�D$1�H�T$����D$��uH�L$dH3%(u6H��[�f��5�r"H�����HcT$H�5�s"H��H�T�
�������ff.�f�ATI��H�=�UH��SH��H��0dH�%(H�D$(1�H�T$H�t$H�t$L�D$D�L$ �Z��H�‹D$��u?H�rH� u*H�RH�u�H�L$(dH3%(uFH��0[]A\��H�r��f��5�q"L������HcT$H�5�r"H��H�T�)
��������ff.�f���AVE��AUI��ATI��UH��H�5�q"SH��L������E��M��L��H��H��H��[]A\A]A^������AVE��AUI��ATI��UH��H�5�q"SH��L���v��E��M��L��H��H��H��[]A\A]A^������ATI��5
q"UH��S����1�H�=^H�����H��1�H��t<H�CH� uH�C H�8��I�$H� u%H�[ H�{�(��H�E�[]A\�f.�H����f.���AWAVAUATU��SH��H��dH�%(H�D$1��4��H�߉��*��5Pp"H��I���)��H�5Jp"H��I���g��H�5�p"H��I���U��H�5>p"L��I���C����tH�����u7H�ډ�L����
��A��H�L$dH3%(D��uH��[]A\A]A^A_�DL������u�H���\���A�ą�u�H�T$H��H�=6 ���HcT$��uH��t��>H��1��c��w���H�5p"H�TL���
���n�������ATA��U��SH��@�5Eo"dH�%(H�D$81����H�=�H�T$D�d$$H�D$H��H�p"H�t$�l$(H�D$�D$ �	��H��HcD$��u-1�H��t�Q��H�L$8dH3%(u)H��@[]A\��H�5�o"H�TH���	��1��������U1�1�SH��H��(H�wH�?dH�%(H�D$1�����H��tRH�H�5so"H��H��H�$HcSH�TH�T$HcSH�TH�T$����H�����H��H����9Ct1�H�L$dH3%(uH��([]�f�H�����F�fD��ATUH��SH��H��0dH�%(H�D$(1�H�f"�D$H�8ty�5�m"H�����H�T$H�t$H�l$H�=e���H��H�D$���HcD$��uH�D$(dH3%(��H��0[]A\�f�H�5an"H�TH�������f.�L�%Af"��H�=�I�$���I�$��H�=�D���I�<$�1�A��H�
�DH�������#����'����AVI��AUATI��U��SH��H��dH�%(H�D$1�H��d"�D$H�8���5�l"H���^����I�����L��H��H���S��Hc�L���h�H��H���=��H��H�T$H�=��I���H��HcD$����H�
f"H��H�0�G��H��tBH�5�d"H���s�H����A�$H�L$dH3%(��H��[]A\A]A^Ð1���@L�-�d"��H�=wI�M�
��I�M� �H�=BO�
��I�}�1�A�{H�
ZCH�S�i������@H�5al"H�TL�����1��S�����H��d"H�5
OH�81��X�����ATUH��SH��H��dH�%(H�D$1��D$������uwH�>c"H�8���5�j"H���.�I��H��d"H�8�,�H��H�����H�] ��C��L��H��H�����H��H���z��H�T$H��H�=k���H�D$dH3%(urH��[]A\�DL�%Yc"��H�=I�$�7��I�$�#�H�=N���I�<$�1�A�	H�
�AH����������?�ff.�@��ATUH��SH��H��dH�%(H�D$1�H�b"�D$H�8���5�i"H���w���I��H�uc"H�8��H��H����H�] ����L��H��H���N��H��H���C��H�T$H��H�=4�O���HcD$��u&1�H�L$dH3%(��H��[]A\��H�5j"H�TL���L����f.�L�%�a"��H�=�I�$��
��I�$� �H�=�L�
��I�<$�1�A��H�
�@H�{������������H��H�5�7"���H���d�H��H�H�D��ATUSH��H��dH�%(H�D$1�H��tH����t0H��H�$���H�L$dH3%(H�$��H��[]A\�H���H��u�1�1�L�%�?�,��H�$H��vH����H9�}�H��H�����H��t$�u H���H��u1�H�����f.�H���	��H�<$H����H��� t$H��H����H��H9�H���� u�H�C�f�H�SH��H9�~�H�<$�L���b��H����x����AUH�5s6"ATUSH���v�H����H��taH��H���^��Hc�I�����I��E��~01�f���H�������H�����L��H�����D9�u�H��L��[]A\A]�DH��[]A\A]��f���H��H�5�5"���1�1ɾ+H������H�@H�xH�DH���f�H��H���$�@��H��H�5�5"��1�1ɾ-H�����H�@H�xH�DH���f�H��H�����@��H��H�515"�<�H���T��H��������?H9�w
H�DH���H��H�����ff.��PXH�5y=1�H��H�=�f"���DPXH�5k=1�H��H�=zf"���DPXH�5�<H��H��^"H�81��b��f���H��(H�5�\"dH�%(H�D$1��|��H��t>H�t$H��H�T$����t$���t
H�|$����H�L$dH3%(u
H��(��t�����ff.�@��H��(H�51\"dH�%(H�D$1����H��t>H�t$H��H�T$�%��t$���t
H�|$�n��H�L$dH3%(u
H��(�����ff.�@��H��H�5�["dH�%(H�D$1��|��H��t@1�H��mH���5��H��tH�<$���H��H�t$dH34%(H��u
H����r����
�ff.�f�PX1�1�H��H�=�d"����f.���USH��H��H�t$H�5["����H��tN1�H�|$H��t
H�|$���H��1Ҿ7H����H��t8H�T$H�53c"H���{���H�D$H��[]�H��\"H�5�:H�81��7���R���f���H��H�5�Z"�\��H��tH�����H��H������~���ff.���UH��SH��H�5<Z"���H��t1H�5;["H��H�����H��tGH��H��������u"H��H��[]�H�
\"H�5�9H�81����H�=�c"H�5`:1��t��H��["H�5FH�81��\��ff.����H��H�5�Y"�|��H��tH��������H�H��H�Ѓ�����f���H��H�5aY"�<��H��tH���O��H��H�H�D��^���ff.���ATUSH��H��H�dH�%(H�D$1�Hc�H9��\�������w\I��H�t$@�l$L���|��H�sH� u/H��L���d���H�L$dH3%(u*H��[]A\�fDH�s��H�=3b"H�5DE1��%���@���H��H�5qX"�L��H��t)H���/���H��tH��H�����fD�H����Y���f���H��H�5!X"���H��tH�����H��H����������ff.���AUATUSH��H�5�W"���H��t}H������H��H��tYH�����Hc�I�����I��E��~+1�@��H������H����L��H�����D9�u�H��L��[]A\A]�DH��A�[L��]A\A]��o���ff.�@��USH��H�5/W"�
��H��tDH���m��H��H��t%H�����H��H�����H��H��[]���H��H��[]����ff.����H��H�5�V"���H��t)H����H��tH��H�����fD�H������f���SH�5tV"�O��H��t6H��H�����H��t
H��������w
�[�fD�;���[��O���ff.�@SH�����H�ދ8������t[�H��V"H�5�BH�81�����f.�1�H��t@��t�f�H���H��t�H��H�5
_"�$�;���H����H�����ff.�f�SH���'��H�ދ8�h����t[�H�[V"H�5|BH�81��Z��f.�AWI��AVAUATI��USH��(H�t$H�50U"���H����H��H���G��H����H�|$����H����H�5u]"L��H����H��I�����H�x����H�}Hclj|$H9��"������H�EH�D$H�t$H�E tH�u�T$H���2�H�5^"L��Lc�� �H����D��H���������~0��uKL���s�������M���"L����������u,K�D-H��([]A\A]A^A_����u�����uXH�=�]"H�5�41����H��(�[]A\A]A^A_�@L�������u/M����L���#������fD1���H��\"�n���H��\"�b���H�5�\"L��H�D$�0����k��H�L$H�π�t7�9�������H�=�\"H�5�@�?��H�HU"H�5-3H�81��ǿ��������������fD��AUATUS��H������������Hc�I��H��L�l��E������u��u�H�uH��L��[]A\A]�a����L������H�ƒ�u��ff.���1��5���D��AUI��ATUSH��(H�_D�gdH�%(H�D$1�����I�H�D$L9�s,DH�k�H��H��H����H�|$H���~�I9�w�H�5�["I�}�H�L$��H�|$H�D$����H�D$H�PH��H���wH�L$dH3%(u H��([]A\A]�H�=X["H�5?1��J����e��D��U��SH��H��dH�%(H�D$1�������t��uH�D$dH3%(uZH��[]�@�5�Y"H����H�5�Y"H��H�$���H�58Z"H�����H��t�H�5�Z"H��H����������@��USH��H�5�("H������H�5�Q"H��H�����H��t#H��H���������HE�H��[]�H��R"H�5�<H�81��5���D��USH��H��H�5M("H���T��H��H�����1ҾH��H���G�H��t
H��H��[]�������U1�H�("SH���x���H���p��H���H��H��t6H��1ɺ�!H�����H�] H��H�ߋ5TX"���H��H��[]�H�=vY"H�5n01��h������H��H�5�O"���H��t3H����H�@H�xH�DH���fDH��H��������ff.�@��AWA��H��AVAUATI��H�5'"USH��H�����A��~:H��M�,$M�t$A��uH�D$H��u0H������A������D������@��u�H�H�Ѓ�H��t���u�H����L����L��I���Z�L��I���_��I��H������M���%L��L���@�������E1�A��t^L��H��������L��H��� ����M��t1�L��XH���!�H��tBH��H��[]A\A]A^A_�f.�H�|$����I��듐���:���H�������-���H�5�M"L���;�H�=tW"H�5�.1��f���H�5�M"L����H�=PW"H�5�.1��B���H�5�M"L�����H�=,W"H�5D.1�����H�WM"H�5.H�81��f��H�?M"H�5�:H�81��N��I�D$H�D$�*���ff.�@��USH��H�5M"���H��tfH��H����H������H�����H�8uH��H��[]�f.��H�5�H���l�H���$��H��H���9��H��H��[]����f.���H��H�|$H��u����@@��u�H���H��u�1����H�5 U"H����H��tH�5�U"H�L$�H����H���@��USH��H�5�T"H�|$��H�5�T"H����H����H�5uU"H�L$�H����H��H��t�t�H������f.�H���H��u�1�H���
�H��H������H�����H��H���7�H��H��1�����H��[]�ff.���USH��H�5 #"H���'��H�5PL"H��H�����H��t#H��H���5�������HE�H��[]�H�M"H�5G7H�81�蕷��DAWAVAUATUSH��H�|$H���@���1H����H�|$L�-�!"1����L�d$H�=�+I�,$M�t$M�|$L���� H��tI�t$L���8����t(��I�����|I�}L��H��u�L�������u�Hc�H�R!"H���DH��[]A\A]A^A_�@��t@���X����fDH���H��
tT@��u~����H�D$�/����H��I"L��H�5�*H�81�����DH��1�[]A\A]A^A_���;��H��[]A\A]A^A_�@�s���H��[]A\A]A^A_�@H���x���������ATUH��SH��H�5+!"�6��H��I���[���H����Q���1�HcӾ{L�����H��t!1�Hcվ|L����H��t[�]A\�H�=�R"H�5*蔵��H�=�R"H�5%*聵�����ATUH��SH�Q"H��u%L�%*f��L����H��H��P"H��t�H�5Q"H���5�H��1�1�H���F�H��H��P"H��u H�-�)�H���C�H��P"H��t�H��1�[1�]H��A\��@��USH��H�|$H��u��B��f�@��u�H���H��u�1�H�73�`�H��H��O"H��u��H�����H��O"H��t�1�1�H��H�����H��tH�5;Q"H�L$�H���i��H��[]�f���USH��H�|$H��u����f�@��u�H���H��u�1�H��2��H��H�O"H��u��H���#�H��N"H��t�1�1�H��H������H��tH�5�P"H�L$�H������H��[]�f���UH��SH��(dH�%(H�D$1�����H�������5:O"H����H�5/O"H���W�H�����tH��H���D��H�����H�\$H�$H�4N"H��u H��'�H���S�H�N"H��t�H��H��F"H��H�8�
��H�T$dH3%(u"H��([]�fD1�H�=�3����������fD��AUATUSH��dH�%(H�D$1�H��t	H��@��t$�H�L$dH3%(�b
H��[]A\A]�H�H�ƒ�H��t��u�H�5u"H���}��H�5���H��H���[��H����H�5�N"H����H�$H��tH���}��H��I��H������L���W��H�50N"H�����H��H�$H��tNH��L"H��u,L�%���L�����H��L"H��t�H�<$I��L�Y�1�1�H����H�5�M"H��E1��k�H�$H��tH���	�I��H�5�M"H���G�H�$H��tKH���E�I��M��t;H��t6L��H���
����9	L��H���:����L	H���������)	H�5[M"H�����H�$H��t7H��t�uH�H�у�H���
H���e�H��H���
������H�53M"H����H�$H���I��L����H�5M"H��I���h�H�$H����L��1�H��tL��H���������H�5�L"H���.�1�H�$H��tH�Ǩ�?�R�����H��H�F���a�H�5BL"H�����H�������H�5L"H�����H�$H��t���H�H��H�����H�50L"H����H�$H��tH�Ǩ���ζ����H�����H�5�K"H���u�H�$H��t=H������H�5$L"H��H���q�H��H�5���H���?��H�`C"H�8��H�5?K"H����H������cH�5K"H����H�$H��tJH���b��H�PHc�H9����H�pH� tH�pH���Y������H��B"H�8�`H�5�J"H�����H������UH�����H�5�J"H���~��H�$H��t=H�����H�$H�PHc�H9���H�pH� tH�pH�������HH�5`J"H���(��H�������H�5=J"H���
��H�������H�5J"H������H�������H�5�I"H������H�$H��t%H�v���5H��艽��H��A"H�8��H�5�I"H�����H�����������H�5	J"H���q��H�$H���&���E1�I��L���u�H��L	����f.�H��H�5F��H��讳��H�OA"H�8�����L�%�A"��H�=��I�$���I�$��H�=_.��I�<$�1�A��H�
 H�x�����$���f�H��H�5��H���^�H��@"H�8�z���L�%^A"��H�=�I�$�<�I�$��H�=�!�"�I�<$�1�A��H�
�H����������f�H�5���H���A���&���@H�5���H���y��H�@"H�8���L�%�@"��H�=g�I�$��I�$��H�=�-�}�I�<$�1�A��H�
JH�C��Y�����@H�5y��H�����H��?"H�8�D���L�%1@"��H�=��I�$��I�$��H�=�,��I�<$�1�A��H�
�H����������@H�5���H���I��H�
?"H�8��L�%�?"��H�=W�I�$��I�$�!�H�=�,�m�I�<$�1�A��H�
:H�3��I�����@H�5I��H���Q��H��>"H�8����H�!?"��H�=��H���H���H�=����H�;A��1�H�
�H���������b���������P���fD�������fDH����H������E1��>H����I9������H��J�<��;��H��H���������\H�$I��H��� u�L;`�����H�@ ���L�%!>"��H�=��I�$��I�$��H�=����I�<$�1�A��H�
�H�������<���@L�%�="��H�=g�I�$��I�$�$�H�=�*�}�I�<$�1�A��H�
JH�C��Y������@L�%Q="��H�=��I�$�/�I�$� �H�=�)��I�<$�1�A��H�
�H����������H�=E"H�5!�	����$��H�=�D"H�5[1����H�=�D"H�5y)�ܧ��H�=�D"H�5��ɧ��H�=�D"H�5�趧��H�=�D"H�5�裧��H�=�D"H�5�萧����AU1�ATUSH��H��dH�%(H�D$1��(���H�����5%C"H��H�����H�5C"H��I���<��H�5-C"H���-��H��I���R���L��H�����L��H��H�5�C"H�$���H�5�C"H��H������H��u-H��ubH�T$dH3%(�ueH��[]A\A]��H����H�5�"H�����H��H������H��t1H�5bB"H��L������H��9"H�5�(H�81��e������H�=YC"H�5��M���ff.�f���AUATUSH����xFI��u9H�5R"H���Z���I��1��0���H��L���%��H��L��[]A\A]��H�.��t�1��,��H�5"L���
���I��H��t�H�=9"H��H�0貮��H��tmH�.A"H��u*H��f.��H������H�A"H��t�1�1�H��H������tH�H���L���f�H���X���H���3���H�y8"H�5�H�81��(������AUH�5C"ATUSH���F���H�����1�1ɾH��H���:��H�@H��'L�dH�K@"H��u'L�-���	L������H�$@"H��t�H������L��H��H��蹤��1�1ɾH������H�@H��eL�dH��?"H��u%L�->D�L���{��H��?"H��t�H���w��L��H��H���I���1�1ɾH���X��H�@H���L�dH�Y?"H��u%L�-�D�L�����H�4?"H��t�H�����L��H��H���٣��1�1ɾH������H�@H��eL�dH��>"H��u%L�-YD�L�����H��>"H��t�H�����L��H��H���i���1�1ɾH���x��H�@H���L�dH�i>"H��u%L�-�D�L���+��H�D>"H��t�H���'��L��H��H�����1�1ɾH�����H�@H��eL�dH��="H��u%L�-�D�L�����H��="H��t�H�����L��H��H��艢��1�1ɾH�����H�@H���L�dH�y="H��u%L�-)D�L���K��H�T="H��t�H���G��L��H��H������1�1ɾH���(��H�@H��eL�dH�="H��u%L�-�D�
L������H��<"H��t�H������L��H��H��詡��1�1ɾH�����H�@H���L�dH��<"H��u%L�-gD�L���k��H�d<"H��t�H���g��L��H��H���9���1�1ɾH���H��H�@H��eL�dH�<"H��u%L�-�D�L�����H��;"H��t�H�����L��H��H���ɠ��1�1ɾH������H�@H���L�dH��;"H��u%L�-�D�
L�����H�t;"H��t�H�����L��H��H���Y���1�1ɾH���h��H�@H�xiH�lH�%;"H��u!L�%;��L���#��H�;"H��t�H�����H��H��H����H��H��[]A\A]�H���h���I������H���X���H���H���H���I������H���8���I�����H���(���I������H������I�����H������I������H�����I�����H�����I������H���ص��I�����H���ȵ��I������H��踵��I�������USH��H��H��uH���&���fD@��u�H�H�Ѓ�H��t��u�H��H��tMH��H�5�	"�޴��H��H��@��t"�ͥ����H���s���H��H��[]�f��[�����f���t�H��蓱��뤐��USH��H��dH�%(H�D$1�H��uH���v���fD@��u�H�H�Ѓ�H��t��u�H��H��t]H��t5H���o��H�5	"H��H�$����H��H������H��H���V����t6H�L$dH3%(H��uH��[]����t�H���Ӱ���謾��H�=�:"H�5��y���f���USH��H��dH�%(H�D$1�H��uH��薣��fD@��u�H�H�Ѓ�H��t��u�H��H��t]H��t5H�����H�58"H��H�$�<���H��H�����H��H���F����t6H�L$dH3%(H��uH��[]����t�H������̽��H�=�9"H�5
虜��f���SH��H��H�t$H��u
H���¢��f�@��u�H�H�Ѓ�H��t��u�H��tXH��H�5v"聲��H�|$H���T��H�D$H�HH� tH�H1Ҿ\H���_��H��t!H�D$H��[����t�H���+�������@��ATUSH��H��uH�������@��u�H�H�Ѓ�H��t��u�H��H��t]H�5�"H���α��H��I�����L��H���(��H��tB@��tH��H�L���Ρ��H��[]A\�fDH���8��H������t�H���s���딐L��T�蓡��H��[]A\�ff.���ATUSH��H��uH���H����@��u�H�H�Ѓ�H��t��u�H��H��tUH�5�"H�����H��I���S���H��H�����H�߃�uJ�۞��1ҾL��H������H��tH��[]A\�@��t�H��諭���H�=b7"H�5��V���葷�����*���H�=C7"H�5�H��1�蒱��f���AVAUI��ATUH��S��H��H��H�5n-"dH�%(H�D$1��9���H��������L�e����L�u����H�5�"L�����H�5�5"L��L��H������L�����H�35"H��u'H�>��	H�����H�5"H��t�H��L���t������M��tA��u
I�$��H��td�L��跱���H��4"H�FH��u�H���P��H��4"H��t�H�=�5"1�1�H�����I������f�H�5�4"L��L������H��趡��H��H����I�E �5|4"L��H��腡��H�5^��H���֤��1�1��ݮ��L��H�L$dH3%(��H��[]A\A]A^�f�H��3"H�$H��u%H��D�	H���s��H��3"H��t�H��H��L���4����������N���H�=�4"H�5�1����H�=�4"1�1��ٗ����@AWI��AVI��AUATI��USH��H�5�4"H�T$�����H�5�*"L���ԭ��H����H�5d3"L��H���y��H�$H��A��H�5@4"L����^��I��H���=�����H���ߦ���Ã��T����&���������G���������YH�����I��H��2"H��u#H�-�
�H�����H��2"H��t�H��H�-,"H�8�}���I��H�k2"H��u'H�-y
��H������H�D2"H��t�H��L���<���E1�1�L��I��H�Z���H�=��1��<���H���T�����H�

H�=C3"D�H���A��H�5�HE�H��1�AUAVUH�T$(����fD�����L���������M����H�<$����k���L���X������M����H�<$����D���f�����������H�����H��I�����H������M��I��H��LD�M��LD��İ��L��H�=1�L�����I���?����H�|$膾��L�%�1"H��L��[]A\A]A^A_�L�%�1"���o���L��A��t�A��������������N��H�W*"H�5<H�81��֔��������ATUH��S����/u>A�H��蟺��H�5*"[L��H��H�|]A\����f�Hc�L�d��S�����u1�1����ij��@L������I�ă�t���ff.���SH���3���H�5�)"H��1�H�[�Z���f.���ATUH��S����/u>A�H�����H�5�("[L��H��H��
]A\����f�Hc�L�d�裕����u1�1�������@L���X���I�ă�t���ff.���SH��胹��H�5L("H��1�H�m
[���f.�AWAVA��AUATI��UH��S��H��(dH�%(H�D$1���t#���������w������~�L�>��tH�FH�D$��u�A��fDH�D$A�H�5B&"H������H��H���H���V���H����L��A����蛫��H�|$A��Lc���L��1��o���H�D$E����H�5Z."H���r��H�|$H�D$����H�D$H�pH� tH�pD��H���"���H�5/"H��D$�/��I��H�����t$H��趡�����H�
"��Hc�H�>��f.��+���H�|$A��Lc��@���H�|$����H�|$H�GL9�|I���E���2���H�|$1��ץ��L�|$H�T$dH3%(L����H��([]A\A]A^A_�@L��H)��m�������Hc�A�L�|��������M�<$����I�D$H�D$������7���H�|$���L��������d����1�����+���H���H�|$踐��������t�1��&���fDE����H�|$荐��L���5�����EL�=N-"����E����H�|$�]���L��������	L�=&-"�����H�|$�6���Hct$H�|$臤��L�|$���DH�D$�Q���f.�L���Ȥ��I�Ń����������H�|$�F������H�|$�������H�|$跏��H�=�,"H�5�1��ҏ�����H�=�,"H�5g����H�#%"H�5H�81�袏��H�5s,"H��������L��A��t軖�����d��������Z��������������f���1�����D��U�H�=1SH���e���H�= H��+"�M��E1�E1�1�H�1�1�H��+"�����*"����E1�E1�1�1�H���ř����*"����H��""H�5H�8�Q���H�:#"H��""H�5C�H��H�H�螟��H�;H�5�H��H�j+"腟��H�$"H��H�D+"H�2�<���H�;H�B+"H�5��V���H��""H��H�
+"H�2�
������H�-y#"H�;H�5�H�U����H�5��H��H��*"����H�=�*"H�5
�赘���H�=���H�=�*"E1���H���ؿ���H�=�����H�=�*"E1���H��諿���	H�=����H�=[*"E1���H���~����H�=4�}��H�=.*"E1���H���Q����H�=�P��H�=*"E1���H���$����H�=]�#��H�=�)"E1���H������H�=�
���H�=�)"E1���H���ʾ���H�=�
����H�=z)"E1���H��蝾���H�=�
���H�=M)"E1���H���p����H�=F�o���H�= )"E1���H���C����
H�=�	�B���H�=�("E1���H�������H�=-
����H�=�("E1���H������H�=
���H�=�("E1���H��輽���H�=�	���H�=l("E1���H��菽���H�=�	���H�=?("E1���H���b����H�=�	�a���H�=("E1���H���5����H�=�	�4���H�=�'"E1���H�������H�=	����H�=�'"E1���H���ۼ���
H�=s	�ڿ��H�=�'"E1���H��讼���
H�=7	譿��H�=^'"E1���H��聼���H�=(	耿��H�=1'"E1���H���T����H�=	�S���H�='"E1���H���'����	H�=	�&���H�=�&"E1��H�ƺ���H�=�&"H�1H�5Y����H�=�&"H�VH�5K���H�=�&"�H�s��H�59�g���H�=h&"1�H����H�5��苯��H�=L&"�H���H�5�l���H�=-&"�H���H�5�M���H�=&"�H���H�5��.���H�=�%"�H�[�H�5�����H�=�%"1�H����H�5���H�=�%"�H���H�5��Ԯ��H�=�%"1�H�İ��H�5�踮��H�=y%"�����H�u��H�5��虮��H�=Z%"1�H����H�5��}���H�=>%"H�uH�5t胜��H�=$%"�H�5c�;���H�=%"�H�5]�#���H�=�$"�H�5Z����H�=�$"�H�5W��H�=�$"�H�5R�۴��H�=�$"�H�5�
�ô��H�=�$"�H�5�
諴��H�=|$"�H�5&蓴��H�=d$"�H�`��H�5!脭��H�=E$"�H����H�5�e���H�=&$"1�H�ż��H�5�I���H�=
$"�H���H�5���*���H�=�#"1�H�:���H�5�����H�=�#"�H�[���H�5����H�=�#"1�H���H�5��Ӭ��H�=�#"�����H�P�H�5�贬��H�=u#"1�H�d���H�5��蘬��H�=Y#"�H�u�H�5���y���H�UH�;H�5���V���H�-/"H�5����H��H�E�<���H�}�����H���H�5*��0���H�}H�5%��А��H�}1�H�C�H�5�����H�}�����H���H�5/����H�}1�H�^�H�5���ҫ��H�}�����H���H�5�趫��H�}�����H�&���H�5��蚫��H�}�����H�����H�5��>���H�}�H���H�5��b���H�}�����H�r��H�5�����H�}1�H���H�5����H�}1�H�����H�56����H�}1�H�����H�5�����H�}1�H�.���H�5�����H�}1�H�տ��H�5���ɪ��H�}1�H�l���H�5��谪��H�}1�H����H�5|�藪��H�}1�H�J���H�5B��~���H�}1�H��H�51��e���H�}�H�5���H�5%��I���H�}1�H����H�5��0���H�}1�H�ü��H�5����H�}�H����H�5����H�}1�H�����H�5����H�}1�H�����H�5��ɩ��H�}1�H�,���H�5�谩��H�}1�H�����H�5��藩��H�}�����H�g���H�5��{���H�}1�H�޹��H�5���b���H�;�H�5���>���H�;�H�5|��*���H�;�H�5t�����H�;�	H�5|�����H�;H�5��H�����H�;�	H�5i��կ��H�;�!H�5n����H�;��H�5l�譯��H�;�H�5r�虯��H�;�H�5�腯��H�;��H�5^��q���H�;�H�5��]���H�;�H�5C��I���H�;�H�5��5���H�;�H�5-��!���H�;� H�50��
���H�;�@H�57����H�;�H�58����H�;�H�56��Ѯ��H�;�H�5.�轮��H�;� H�5&�詮��H�;�H�5 �蕮��H�;�@H�5�聮��H�;��H�5��m���H�;�H�5��Y���H�;��H�5��E���H�;H�5!�H��,���H�;�H�5�����H�;�H�5 �����H�;�H�5���H�;�H�5��ܭ��H�;�H�5���ȭ��H�;�H�5�购��H�;�H�5�蠭��H�;�H�5�茭��H�;�H�5��x���H�;�H�5��d���H�;�H�5��P���H�;�H�5��<���H�;�H�5��(���H�;�H�5�����H�;�H�5�����H�;�H�5����H�;�H�5��ج��H�;�H�5��Ĭ��H�;�H�5�谬��H�;�H�5�蜬��H�;�H�5�般��H�;�H�5��t���H�;�	H�5��`����	H�=��o���H���w����
H�=��H��"�O���H���W����
H�=��H��"�/���H���7����H�=��H�|"�����H�=��H��"����H�=��H�l"�߳���H�=x�H�L"�dz���H�=l�H�"诳���H�=]�H��"藳���H�=N�H��"�����
H�=C�H��"�g����H�=9�H��"�O����
H�=2�H�t"�7����H�=%�H�T"�����H�=�H�4"�����H�=7�H�"����H�=��H��"�ײ���H�=�H��"迲���H�=�H��"觲���H�=�H��"菲���H�=�H�t"�w����H�=�H�T"�_����H�=�H�4"�G����H�=��H�"�/����H�=��H��"�����H�=��H��"����H�=��H��"����H�=��H��"�ϱ���H�=��H�t"跱���
H�=��H�T"蟱���H�=��H�4"臱���H�=l�H�"�o����	H�=]�H��"�W���H��"H��[]�H�r"H�5%�H�81���{��H�Z"H�59�H�81���{��f���采�����USH��H�5"dH�%(H�D$1��ڑ��H����1�H��H�������~nHc�1��V���H��H�@H� tH�CH��H��H�$賁��H�4$H�CH� u*H)�H���g���H��H�T$dH3%(u?H��[]�DH�C��H�=#"H�5\�1��z��H�f"H�5��H�81���z��������ATUSH��H� H�t$��H��"H��H�|$H�0譃��H��uHH�|$�޷��H�5�"H�=�
"1�H��I����H��H��t[L���|��H�k H��H��[]A\�H�5�
"H�|$菐��H����H���n���H��H��u�H�=G"H�5��1��!z���1�1ҾL���O����j���1�1�1�L���L���L��H���|��H���u���H�!
"H�5W�H�81���y��H�=�"H�5��1��y��H�$"H�5	�H�81��y����H�"1��>{��ff.���USH��H�5�
"誏��H��t5H��蝷��H����~��H��H��tOH��H��肙��H�߅�t#H��[]��H��"H�5�H�81��y���3{��H�=$"H�5��1��x��H�="H�5z�1���x��f�PXH�5�H��H�<"H�81���x��f���H��H�5!
"dH�%(H�D$1��D$�Ԏ��H��t.H�t$H��蒐���t$H���V���H�T$dH3%(u
H����|����w������H��H�5�"�|���H��t3H���w��H�@H�xH�DH���fDH��H���Ď������ff.�@��ATUH��SH��H�5K"����H��t6I���t!H�H��L��軩��[H��]A\�_����H��谉��H�������fD��AUATI��USH��H�-�"dH�%(H�D$1�H��蠍��H����H��L��H��艍��H��H��tuH��H���F���H�t$H��I���6���H��I���˘��H������9�t1�H�L$dH3%(u*H��[]A\A]Ë$;T$u�L��L��蜣����H�����������H�0"H�5a�H�81��v��ff.�@��ATUSH��H��uH����|���@��u�H�H�Ѓ�H��t��u�H��H��tMH�5�
"H��L�c 芌��H��tWH�5^"H�=�	"H��菐��H��t)H�C L���ށ��H��[]A\�fD��t�H���C����H�="H�5����u��H�W"H�5��H�81���u��fD��SH��H�50
"dH�%(H�D$1����H����H�����H�ǸH��t`H�@H�xnH�D?H�$H�v"H��u"H��f��H��蓪��H�T"H��t�H��H��"H��H�8�M���H�T$dH3%(uH��[���ˋ����$�������ff.�@��AUATUH��SH��H��H�5E	"����H����I��H�="H��H�0�}��H��u-��tpH�H��L����y��H��H��[]A\A]����H��"H��u%L�-��D�L��蛩��H�d"H��t�H��1�1�H���`���H���u�H���@���H����F���fD��USH��H�5"�J���H��t5H���=���H���ey��H��H��tOH��H���B|��H�߅�t#H��[]鐣��H�9	"H�5j�H�81��s����u��H�=�"H�5;�1��s��H�=�"H�5�1��s��f���H��"SH�56�H�H�S"H�8�{���H��"H�	"H�5�H��H�H��X���H�;H�5����H�?"�B���H�;�H�3���H�51��7���H�;�H�X���H�5!�����H�;�H�M���H�5~�����H�;1�H�����H�55����H�;�H�����H�5Z��Θ��H�;1�H�B���H�5�趘��H�;�H�����H�5$�蛘��H�;1�H�����H�5��胘��H�;1�H�����H�5���k���H�;1�H����H�5���S���H�;1�[H�����H�5P��:���f.���H�H�Ð��H�H��H��f������������������gv���������ATI��UH��1�SH��dH�%(H�D$1��Յ��|Hc�1��<���H��H�@H� uLH�$H��L��Յ�~RH�4$H�CH� u;H)�H���P���H��H�T$dH3%(u8H��[]A\�@H�C�f.�H�C�H�=�"H�5��1���p������USH��(dH�%(H�D$1�H�B H�D$��xzH��u$H�L$dH3%(H����H��([]�fDH�H�D$��uDH���}��H�|$H�D$蜭��H�t$H��H���<���H��H�D$�_r��H�D$H��tH�C 닺1��s���H�C H�=�
"H�5���p���#������'y�����USH��H��(H�t$dH�%(H�D$1�H�G H��H�D$�M}��H�|$H�D$���H�t$H��H���>}��H��H�D$�q��H�D$H��tH�C H��H�T$dH3%(u"H��([]�H�C H�=

"H�5��No���i���f���AWAVAUATUSH��(H�$dH�%(H�D$1����rL�&H�n���Y�H�<$H�5A�!�,���I��H����L��H�5��!����I��H����H���=���1�L��H�D$�^���I��H����H���H�t$H����n��I�ċD$����L���d���H��H����1��4@H�E ��H�x�1|��L��H��I��������L����谤��H�E H�x�c���9�|�L��L��蔉���L���Gt��H�t$L�����L��L���O���1�L������L��軥������H�L$dH3%(H�$��H��([]A\A]A^A_�@�����������z��I��H������L���W���H�= "H�5��1��bm��f�H�5�"L������L���)���H�=�
"H�5��1��4m��H�=�
"H�5y�1��m���:���H�^����H�z"H�5��H�81��l��H�b"H�5��H�81���l��H�=�
"H�5�1���l��L��褤���|$諗��L��蓤��H�5"L���d���H�=M
"H�5��1��l��ff.�@��SH�5��!诂��H���H��讅��H���m��H��H��t>1�H���$�����tH��	"[���H��������tH��	"[�fD�[�f��H���ӕ����tH�`	"[�fD�H��賕����tH�8	"[�fD�H��蓕����tH�	"[�fD�H���s�����tH��"[�fD�H���S�����t	H��"[þH���9�����t!H��"[�H��"H�5*�H�81��4k��H�=�"H�5��1��k��ff.�@��USH��H��(H�t$dH�%(H�D$1�H�G H��H�D$�mx��H�|$H�D$����H�t$H��H�����H��H�D$��l��H�D$H��tH�C H��H�T$dH3%(u"H��([]�H�C H�=*"H�5���nj��艋��f�H��H�|$H�|$�}��H�D$H�xH� tH�x1����H��tH���fDH�D$H�xH� tH�x�萅��H��u�H��!H�5s�H�81���i�����w����PX1�1�H��H�=o"�i��f.���UH�5T�!SH������H��t5H���ͧ��H���n��H��H��tJH��H���r���H�߅�t#H��[]� ���H��!H�5Z�H�81��Hi���ck��H�=�"1�1��3i���^���ff.�PXH�5�H��H�|�!H�81��i��f���H��H�5��!�,��H��t H���oz��H�����Hc0H�xH���{�����f���UH�5d�!SH����~��H��tEH��H���*z��H��H����r��H�8藂����tPH��若�����t-H�5��!H��H��[]����H��!H�5Z�H�81��Hh��H�=�"H�5��1��3h��H�=�"H�5}�� h��PXH�5��H��H�|�!H�81��h��f���H��H�5��!�,~��H��tH�5��!H��H���D������ff.�@PXH�5��H��H��!H�81��g��f���H��H�5��!��}��H��tH�5 �!H��H��������ff.�@��H��H�5�!�}��H��tH�������H�H��H�Ѓ���	���f���SH��H�5��!�L}��H��t1�H�����H��@���2���H��[��������H��H�5��!�}��H��t)H���o���H��tH��H��龢��fD�H����y���f���ATUH��H�5/�!S�|��H��t11�H��H���׀��H��H��I���Ɉ��L����?l����t H��[]A\�H���!H�5=�H�81��+f���V���fDUSH��H���"�����t����f��H��[H��]�)~��f��+���H���Sk��H��H��tH��H��蠡��H��~ H��[]�~���H�=g"H�5��1��e����g��H�=M"H�5:�1��e��ff.�@��SH�5$�!�{��H��t1H��H���m��H��tH���m��[H���)���f��[�����@��H��H�5��!�\{��H��tH���v��H���go��H�8H����������fD��ATUH��H�5��!S�{��H��t/H��H���i���H��H��I���~��L����aq����t H��[]A\�H��!H�5��H�81��d��H�=6"H�5�1��xd�����SH��H��H�|$H�t$�w��H�5��!H���z��H��tGH����u��H�L$H�QHc�H9���H�qH� uH���o�����t)H�D$H��[�H�q��H�c�!H�5��H�81���c��H�=�"H�5����c��ff.�@��ATUH��H�5_�!S��y��H��t<H��H���9���H��I���u��H����m��1ɺL��H���w����t
H��[]A\��C���L���p��H�="H�5�1��Fc��fD��H��H�5��!�ly��H��t3H���߈��H�@H�xH�DH���fDH��H���y������ff.�@��ATI��USH���t=H��H�H��xjH�5k�!L����x��H��t>H��H���t����tH��[]A\��H���t��H���H�=,"H�5_��pb��H��!H�5j�H�81��Xb��H�="H�5�1��Cb����U1�H���!SH����c��H����v��H��t+H�E H�þH���gs��H�߾�:���H��H��[]�����ff.���UH�5��!SH���
x��H��t5H�����H���%g��H��H��tJH��H������H�߅�t#H��[]�P���H���!H�5*�H�81��xa���c��H�=�!1�1��ca�����ff.���H��H�51�!�|w��H��t)H���?n��H��tH��H���.���fD�H������f���H��H�5��!�,w��H��tH���j����H�H��H�Ѓ�����f���H��H�5��!��v��H��tH���/p��H��H������n���ff.���H��H�5a�!�v��H��tH���_}��H��H���c����.���ff.���H��H�5!�!�lv��H��t H���_y��H���'���Hc0H�xH����r�����f���H��H�5��!�,v��H��tH���y��H���7j��H�8H��������fD��H��H�5��!��u��H��tH��蟞��H��H���s����n���ff.���H��H�5a�!�u��H��t3H������H�@H�xH�DH���fDH��H����u������ff.�@��S1�H��!�`��H����|��H��t	H�C H��[��"���f���UH�54�!SH���u��H��t5H���
���H���5d��H��H��tJH��H�����H�߅�t#H��[]�`���H�	�!H�5~�H�81��^���`��H�=,�!1�1��s^����ff.���SH�5��!�t��H��tAH���2���H��H��t*H�@ 1�H�x �l��H��H���a��H��tH��[��y��f��[��D���@��UH�5D�!SH���*t��H��tTH�����H��H��t5H�=f�!1�H���!�p_��H��H��蕏��H��t7H�C H��H��[]�f��H��H��[]�H���!H�5o�H�81��y]����@��H��H�5��!�s��H��t)H���?���H��tH��H���N���fD�H����i���f���ATUSH���x��H�5Y�!H��I���>s��H��tUH��1��?v��H���׊��H��H��u'�1D��H����j��H���3���L��H���x���H����n��9�|�L��[]A\����ff.�@��H��H�5��!�r��H��tH���u��H���7z��H��H���k�����fD��S1�H���!��]��H���n��H��t	H�C H��[��R�f���AWAVI��H�^�!AUI��ATUH��SH��1�H��XH�=��!dH�%(H�D$H1��D$,H�D$8�|]��L��I���q���H��H�$�ŏ��H�5^�!L��H�D$��q��H���2I��H��!H���H��uf��	H��賐��H���!H��t�H��H���\���H��H���!H��H�0�Gd��H����H�w�!H��u#L�5���L���[���H�T�!H��t�1�1�H��H��� �����xH�H�D$@H�!�!H��u%H�4�D�H������H���!H��t�H��H��贋��H���B1�H���u��H�D$8H��!H��u(H�����H��賏��H���!H��t�H��H���\���L��H�D$H�����b��H��H���QE1��i��H��H����H�5�H��H�T$8�a���H�4$H���Ս������H��!H��u��H�=]�����H��!H��t�H��H���Ȋ��H��H���!H��H�$H�0菅��H�$H��H�D$,H�$�qH�t$H������H�|$tL����a��H����L���a��H��tL���a��H��H���s���H�T$@H�5W�H���s��H�X�!H��u$L�=��@�L���[���H�4�!H��t�H��H��1�����I��H��!L��H�0�̈́��H��uQ�H����H9���H��L��H��聑��H�$H�=��H��莆���T$,����H��H������I��� u�I�G�f�H���j���~���H�-��E1�1�H�|$8�J^��L���e��H���Jr��H���rp��H�=�!H���s���H���K]��H��H���]X���t$,��uUH��H��H�D$�5e��H�T$H�5i�!H��豃���S���@H�D$,H�t$H�=��H��诅���|$,I�ƅ������A�H�|$8�]��L���Xd��H���q���|$,���$H�L$HdH3%(L���H��X[]A\A]A^A_�fDH�-x�E1�1����H�-9����@H�$H�==�!L���
����L$,H�D$0���\���H�$H�t$0H�=<����H�ŋD$,���8���H��H���=���H��I���Y��M��tI�8r��M�l$ ����fD�_��H��H���~���E1�H�-���D����H�-���0���H�-U��$����L��H��蕏������[����w��H���!H�5`�H�81��NV��ff.���S�H�=���j���H���r����H�=��H���!�J���H���R����H�=��H�o�!�*���H���2����H�=��H�G�!�
���H�������H�=��H��!���H�����H�={�H���!�ʊ��H���҉���H�=p�H���!誊��H��貉���H�=g�H���!芊��H��蒉��H�5[�H���!H�M�!H�8��^��H���!H�5A�H��H���!H��%f��H�f�!H�=��!H�5c�H���!H��f��H�5����H��H�p�!��b��H�=d�!�H���H�5֣��z��H�=E�!1�H����H�5��z��H�=)�!1�H��H�5���z��H�=
�!1�H�D���H�5���z��H�=��!1�H����H�5���lz��H�=��!1�H�,���H�5w��Pz��H�=��!1�H�����H�5f��4z��H�=��!1�H�T�H�5z��z��H�=��!1�H���H�5��y��H�=e�!�����H�y�H�5���y��H�H�=[�!H�5���d��H�5p�H��H��!�a��H�=�!�H�~�H�5���y��H�=��!1�H���H�52��vy��H�=��!1�H�v�H�5���Zy��H�=��!1�H��H�5	��>y��H�=��!1�H���H�5d��"y��H�=��!1�H�b�H�53��y��H�=g�!1�H��H�5
���x��H�=K�!1�H���H�5 ���x��H�=/�!1�H�>�H�5W��x��H�=�!1�H�r�H�5���x��H�=��!1�H�v�H�5���zx��H�H�=��!H�5���Tc��H�5��H��H���!�>`��H�=��!�����H�;�H�5)��/x��H�=��!�H��H�5k��x��H�=��!1�H���H�5����w��H�=e�!�H���H�59���w��H�=F�!1�H�e�H�5���w��H�=*�!�H��H�5	��w��H�=�!1�H�Z�H�5���~w��H�=��!�H�K�H�5���_w��H�=��!1�H���H�5���Cw��H�=��!�H�p�H�5���$w��H�=��!1�H��H�5���w��H�=y�!�H���H�5{���v��H�=Z�!1�H�I�H�5o���v��H�=>�!1�H���H�5��v��H�="�!1�H���H�5���v��H�=��!�H�5/��m}��H�=��!�H�5��U}��H�=��!�H�5��=}��H�=��!�H�5��%}��H�=��!�	H�5���
}��H�=��!�H�5���|��H�H�=��!H�5����`���H�=?�H�<�!���H�=0�!E1���H��軁���H�=��躄��H�=�!E1���H��莁���
H�=��荄��H�=��!E1���H���a����H�=s��`���H�=��!E1���H���4����H�=r��3���H�=|�!�E1��H������H�=`�![�H���H�5����t�����UH��H��SH��(dH�%(H�D$1�H�\$H�T$H���Nd���t$H��1�H���y��H�L$dH3%(uH��([]��qo�����H�e�!SH�5��H�8��W��H�n�!H��&����QX���܅���g����Rr���Z���Ho����p��H�;�H�5R��{��H�;�H�5C��z��H�;�H�5����z��H�;�H�5-���z��H�;�	H�5���z��H�;�H�5���z��H�;�
H�5���z��H�;�H�5���z��H�;�H�5���oz��H�;�H�5��[z��H�;�H�5��Gz��H�;�H�5��3z��H�;�H�5��z��H�;�H�5���z��H�;�H�5���y��H�;�H�5����y��H�;�!H�5����y��H�;�#H�5���y��H�;�%H�5���y��H�;�'H�5���y��H�;�)H�5���y��H�;�+H�5��ky��H�;�-H�5q��Wy��H�;�/H�5w��Cy��H�;�1H�5v��/y��H�;�3H�5s��y��H�;�5H�5z��y��H�;�7H�5|���x��H�;�9H�5}���x��H�;�;H�5}���x��H�;�=H�5���x��H�;�?H�5h��x��H�;�AH�5x��x��H�;�CH�5h��{x��H�;�EH�5t��gx��H�;�GH�5W��Sx��H�;�IH�5t��?x��H�;�KH�5J��+x��H�;�MH�5t��x��H�;�OH�5���x��H�;�QH�5����w��H�;�SH�5���w��H�;�UH�5����w��H�;�WH�5���w��H�;�YH�5��w��H�;�[H�5���w��H�;�]H�5���ww��H�;�_H�5���cw��H�;�aH�5��Ow��H�;�cH�5��;w��H�;�eH�5D��'w��H�;�gH�5P��w��H�;�iH�5d��v��H�;�kH�5����v��H�;�mH�5d���v��H�;�oH�5����v��H�;�qH�5���v��H�;�sH�5H��v��H�;�uH�5���v��H�;�wH�5@��sv��H�;�yH�5���_v��H�;�{H�5H��Kv��H�;�}H�5���7v��H�;�H�5���#v��H�;��H�5���v��H�;��H�5���u��H�;��H�5����u��H�;��H�5����u��H�;��H�5���u��H�;��H�5���u��H�;��H�5���u��H�;��H�5���u��H�;��H�5���ou��H�;��H�5���[u��H�;��H�5���Gu��H�;��H�5���3u��H�;�H�5���u��H�;�	H�5���u��H�;�H�5���t��H�;�!H�5����t��H�;�AH�5����t��H�;��H�5���t��H�;�H�5���t��H�;�H�5���t��H�;�H�5���t��H�;�H�5���kt��H�;�H�5���Wt��H�;� H�5���Ct��H�;�@H�5���/t��H�;��H�5���t��H�;�H�5���t��H�;�H�5����s��H�;�H�5����s��H�;�H�5����s��H�;�H�5���s��H�;� H�5���s��H�;�@H�5���s��H�;�H�5���{s��H�;�H�5���gs��H�;�H�5���Ss��H�;�	H�5���?s��H�;�H�5���+s��H�;�
H�5���s��H�;�H�5���s��H�;�H�5����r��H�;�H�5����r��H�;�H�5����r��H�;�H�5���r��H�;�H�5���r��H�;�	H�5���r��H�;�H�5���wr��H�;�
H�5���cr��H�;�H�5���Or��H�;�H�5���;r����l��H���>]��H�;H�5��H���r���{��H���]��H�;H�5��H���q���b��H���]��H�;H�5z�H����q���y\��H����\��H�;H�5m�H���q���f��H����\��H�;H�5c�H���q����]��H���\��H�;H�5Z�[H���q�����'q�����UH�5T�!SH��dH�%(H�D$1��jZ��H����1�H��H���tp����~vHc�1���V��H��H�@H� uNH��H��H�$�Gp����~IH�4$H�CH� u2H)�H���W��H��H�T$dH3%(u*H��[]�DH�C�f�H�C��H�=k�!1�1��C���d��H���!H�5��H�81��mC��ff.�f���AWAVI��H�5^�!AUATUSH��H��dH�%(H�D$1��lY��H����H�-T�!L��I��H�u��n��H���VL���|o��H�PH� ��H�$H�PH��1��N��H��H���L���U������1�A������4��H���P��L�xH���i��D��L��L�����[��������H���T��9�|�H�5��!H���$n��L��H�L$dH3%(��H��[]A\A]A^A_�fDH�P�D����L���`e��A�����1�1�H��1��<}��I��H����H�C L��M���n���/���H�5u�!H���m��H�=��!H�5p�1���A��H�=��!H�5��1��A����b��L��H�]��y��H�5+�H��H���!H��H�81��A��H���!H�5��H�81��lA��H�5��!H���m��H�=.�!H�5��1��HA�����UH�5D�!SH���jW��H��tZH���]d��H��H���"[����u.�I��H���qF��H��H��tFH��H���|��H��H��[]�p�����A��H��[H��]�X��H�4�!H�5(�H�81��@��H�=��!1�1��@����USH��H�t$H�5��!��V��H��tBH�|$H���~��1�H���[��H��H��tUH��H���e��H�߅�t)�L��H�D$H��[]�H���!H�5��H�81��&@����L��H�=��!H�5��1��@��H�=��!1�1��?��ff.����ATUSH��H��uH���(F���@��u�H�H�Ѓ�H��t��u�I��H��tMH�5��!H����U��H��H��tEH�5��!L����U��H��t1H���Zc��H��t<H�C H���9l��H��[]A\Ð��t�H���R���H���!H�5��H�81��9?��H�=
�!H�5��&?��fD��AUH�5#�!ATUSH��(dH�%(H�D$1��6U��H���sI���5L��H��H���JL���a{��A��~'1����L����Ct��H��H���Xx��A9�u�1�H���9`������Hc�1��gQ��H��H�@H� ��H�t$H��H�D$�`������H�t$H�CH� ��H)�H���hR��H���0S��H���!H�\$H��u(H����H���Cs��H���!H��t�H��H���!�H�L$H�8�h��H�T$dH3%(uiH��([]A\A]�H�C�t����H�C�4���H���R��H�=p�!1�1��=��H�=`�!H�5i�1��z=��H���!H�5��H�81��b=���}^��ff.�f���AUATI��UH��H�5J�!S��H��H��8dH�%(H�D$(1��[S��H�D$H���i���KH�}H�|$�������0H���!L�mH�|$ H��u&H���fD�H���q��H�|�!H��t�H�l$ �H��L��H���g��H�P�!L�l$ H��u'H�s���H���q��H�$�!H��t�H��H��L���lg��H�L$(dH3%(L����H��8[]A\A]�f.��I��H�|$H�D$�\O��H�D$H� t>H�PH�T$H�PH�t$H�|$�Rt��H�T$I�T$ H��u�H�=��!1���;��DH�P�����Z����\��H�
�!H�5�H�81��;��ff.����S1�H���!�=��H���o��H��t	H�C H��[�H�=(�!1��I;��f���UH��H�A�!1�SH��H���!H�8��<��H��H��t#H����^��H��tH�C H��H��[]���{o����H�=��!1���:��ff.���H��H�5ѧ!�P��H��tH���H��!H�5�H�81��:��f.���SH�$�!H�5x�H���!H�H�;�K��H�;H�5k�H�2�!H���!H��kK��H���!H�5����H��H��RH��H�;�����H����H�5A��G`��H�;�H����H�51��,`��H�;�H�M���H�5���`��H�;1�H�����H�5��_��H�;�H�Z���H�5����_��H�;1�H�����H�5����_��H�;1�[H�9���H�5��_��f.����gA�����H��H��OA���H���D��UH�5��!SH��dH�%(H�D$1��ZO��H����1�H��H���TD����~vHc�1���K��H��H�@H� uNH��H��H�$�'D����~IH�4$H�CH� u2H)�H����L��H��H�T$dH3%(u/H��[]�DH�C�f�H�C��H�=c�!H�5��1��u8���Y��H���!H�5��H�81��X8�����H���c:���H���f���UH�5��!SH��dH�%(H�D$1��JN��H����1�H��H����G��Hc�H��~r1���J��H��H�@H� uMH��H��H�$�G����~HH�4$H�CH� u1H)�H����K��H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=S�!1�1��j7���X��H���!H�5��H�81��M7��ff.�f���H��H�|$H�t$�it��H����H�=�H��H����R��H���ff.�PX1�1�H��H�=��!��6��f.���S1�H�B�!�}8��H���Y��H��t	H�C H��[����f�PXH�5��H��H��!H�81��6��f���UH��H�5�!SH���L��H��t[H��H���!H��H�0�=b��H��uH��1�[]��H�5��!H���yL��H��t5H��H���S���¸��u�H��[]�H���!H�5[�H�81��5���J���f.���UH��H�5Q�!SH���L��H��t)H��H���K�������H��H���gG����t"H��H��[]�H��!H�5��H�81��5�����ff.����AUH�5�!ATUSH���K��H��tpH��I����l���Ņ�xPHc��@��I�Ņ�t-1����L�����H��H���t��L��H����i��9�u�H��L��[]A\A]�fDH��[]A\A]��O���<���ff.����USH��H��H����h��H�54�!H��H���J��H��t5H��H���F�����tH��H��[]�fD��O��H��1�H��[]�����f.���UH��H�5ѡ!SH���J��H��tXH��H����X��H��H����[��H��H���\����t��uH���[]�@�sO��H��1�[]�H�=��!1�1��3���E���D��AUATE1�UH��SH��H��H����g��I��H��tH��� k��I��H�5&�!H����I��H��t L��L��H���3����t&H��H��[]A\A]�H���!H�5��H�81��q3���l���ff.����ATUH��H�5��!S�I��H��t-H��H����W��I��H���Z��L��H���sc����t H��[]A\�H���!H�5[�H�81��2��H�=��!H�5l���2��ff.����H��H�5A�!�I��H��tH����B��H��t$H��H���=��H��!H�5��H�81��2��������ATUH��H�5�!S�H��H��t/H��1�H���`��H��H��I����N��L��t�M8��H��[]A\�����;8��H�=�!H�5��1��&2��fD��H��H�5��!�LH��H��tH���>��H��t$H��H���>_��H�W�!H�52�H�81���1���������ATUH��H�5/�!S�G��H��t/H��1�H���7`��H��H��I���yj��L��t�7��H��[]A\������{7��H�=T�!H�5
�1��f1��fD��H��H�5��!�G��H��tH���?n��H��t$H��H���~^��H���!H�5r�H�81��1���������UH��H�5q�!SH���7G��H��t$H��H���J��H��H���<����t"H��H��[]�H�7�!H�5�H�81��0��������H��H�5�!��F��H��tH���Y��H��t$H��H���>U��H���!H�5��H�81��f0���a������UH��H�5��!SH���F��H��t$H��H����I��H��H���C����t"H��H��[]�H���!H�5b�H�81��0���������H��H�5a�!�,F��H��tH����V��H��t$H��H���T��H�7�!H�5�H�81��/��������UH��H�5�!SH����E��H��t+H��H���WN��H��H����I��H��H���L��H��H��[]����f���H��H�5��!�E��H��tH���N��H��H���Ck���~���ff.���AWAVAUATUSH��H�����H��I�����H��I�����H��I���5���H��I������H��H���g��H��M��M��AWL��H��H��H�=3�1��<N��H��[]A\A]A^A_�ff.�f���UH�5�!SH���D��H��t=H���l��H����3��H��H��tRH���S��H��H�0�j��H�߅�t#H��[]�]��H���!H�5|�H�81�� .���;0��H�=��!1�1��.������fD��ATI��USH���t=H��H�H��x\H�5K�!L���D��H��t0H��H���SP����tH��[]A\��H���?��H������H��!H�5��H�81��-��H�=_�!H�5L�1��q-�����H��H�5њ!�C��H��t3H���e��H�@H�xH�DH���fDH��H����C���o���ff.�@��UH�5t�!SH���:C��H��t5H���-k��H���U2��H��H��tJH��H����T��H�߅�t#H��[]�\��H�)�!H�5�H�81��,����.��H�=|�!1�1��,�����ff.���UH�5�!SH���B��H��t5H���j��H����1��H��H��tJH��H���2i��H�߅�t#H��[]��[��H���!H�5t�H�81��,���3.��H�=��!1�1��,����ff.���AUATUSH��H��(dH�%(H�D$1�H��u
H���2��f���u�H�H�Ѓ�H��t��u݉�L�c H��������u%H�L$dH3%(H����H��([]A\A]�H�>H�|$������8��H�|$H�D$�h��1�H��I���S��H��H��t>L���F-��H�k L���3�������p���H��H�t$�:>��H�t$�Y���1�1ҾL���C���:F��1�1�1�L���9��L��H����,��H��u�H�=��!H�5^�1��*����1�����I���K��ff.�f���AU1�ATUH��SH��(dH�%(H�D$1���R��H��tSH��H���H�=�H�$H��H�D$�E��H�$H��t(H�T$dH3%(H���3H��([]A\A]Ð�[E��1�1ҾH���*B���EE��1�1�1�H���9��H����I��H�d�H�=�H�$L��L��H�D$L�-C��nE��H�$�&�L��L��L��H�$H�=�H�D$�BE��1�1�1�H���8��H��u��;��%���lt`1�1ҾH���A����tg�f;��H��u]H�������D�K;��%���lt1�<;��H��u3H�=��!H�5�1���(��f��KD���f��;D������I��H�=��!1�1���(��@��AWAVAUATUH��SH��H��u�H���A��f�@��u�H�H�ƒ�H��u�I��1�L�e�;H����H9�}TL�5u�!L��I�6H�<�L�<��&T��H����H�EH���� u�H;]}L�5;�!H�E I�6��f.�H�5y�!L���A>��H��H����H���]_��Lc�M��~D1�H���R��H���F��I��u�E1�L�e�7�H����I9�}<L��J�<���<�������H��H���@9����tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=�_��H��H�5ɆH��H�_�!H�81��%'��H�=��!H�5پ�'��H�m �H�u�!H�5P�H�81���&��@��ATUSH��H��uH���(-���@��u�H�H�Ѓ�H��t��u�H��H��tUH9�tDH�5�!H����<��I��H��tHH�5��!H����<��H��t4H���1��H��t?H�C L���d.��H��[]A\�@��t�H���9���H���!H�5��H�81��1&���,�ff.����UH��H���!1�SH��H�[�!H�8�'��H��H��t#H���1��H��tH�C H��H��[]���H�������@��SH�?H��t"H�{�A��H�;H���^Z���[���@��H���fD��H��H�5�!�;��H��tH���H�˺!H�5��H�81��J%��f.���SH�5��!�o;��H��tH��H���[��H��[�H���!H�5^�H�81��%��f���SH���!H�5��H�&�!H�H�;�5��H�;H�5��H���!H�+�!H���5��H��!�H�h�H��H�5�yH��f(��H�;H�5���2��H�;�����H�����H�5�s�J��H�;�H�m���H�5�s�J��H�;1�H��H�5ˌ�iJ��H�;1�H�����H�5���QJ��H�;H���H�5ut�[8��H�;1�H���H�59~�#J��H�;1�H�w���H�5ǝ�J��H�;�H����H�5K���I��H�;1�H�$���H�5����I��H�;1�H�<�H�5i��I��H�;�H���H�5z��I��H�;1�H�i�H�5j��I��H�;�H���H�5W��rI��H�;1�H���H�5��ZI��H�;�H��H�5-��?I��H�;1�H���H�5��'I��H�;�H��H�5
��I��H�;1�H���H�5���H��H�;�H�%�H�5���H��H�;1�H���H�5�y�H��H�;�H�"�H�5�|�H��H�;�H�w�H�5K��H��H�;�H���H�5|��pH��H�;�H�Q�H�5+��UH��H�;1�H���H�5�~�=H��H�;�H�>���H�5D��"H��H�;�H���H�55��H��H�;1�H���H�5�v��G��H�;�H� �H�5Qq��G��H�;1�[H�W�H�5���G��f.������$�����AUH�53�!ATUSH���7��H����H��I����J��H���z3���Ņ�xTHc��,��I�Ņ�t11�L���J���ރ�H����.��H���� ��L��H���U��9�u�H��L��[]A\A]�fDH��!H�8tH��[]A\A]��;��@H���!��H�=?eH��p^��H��
�H�=���W^��H�;A�1�H�
��H�#e��4S���H�˵!H�5Y�H�81��J ��f.���UH�5�!SH��dH�%(H�D$1��Z6��H��tlH���M^��H���u%��H��H��tDH��1�H����"��H�$H��H�0�[��H�߅�t�O��H�L$dH3%(u4H��[]���!��H�=��!1�1����H��!H�5��H�81�����@��ff.��PX1�1�H��H�=W�!�j��f.���S1�H�"�!� ��H���uX��H��t	H�C H��[����f���UH��H�5�!SH���W5��H��t)H��H���W4�������H��H����<����t"H��H��[]�H�R�!H�5�H�81������L���ff.����AUH�5��!ATUSH����4��H����H��I����*���Ņ�xLHc���)��I�Ņ�t)1���L����[]��H���C]��L��H���S��9�u�H��L��[]A\A]�fDH�a�!H�8tH��[]A\A]�$9��@H��!��H�=�bH���[��H���H�=#��[��H�;A��1�H�
��H��b��P���H�+�!H�5��H�81����f.���UH�5d�!SH����3��H��t5H���[��H����"��H��H��tJH��H����T��H�߅�t#H��[]�M��H���!H�5G�H�81��8���S��H�=�!1�1��#�����ff.���UH�5Ԋ!SH���:3��H��t5H���-[��H���U"��H��H��tJH��H����*��H�߅�t#H��[]�L��H�)�!H�5��H�81��������H�=��!1�1��������ff.���UH�5D�!SH���2��H��t5H���Z��H����!��H��H��tJH��H���R��H�߅�t#H��[]��K��H���!H�5'�H�81�����3��H�=�!1�1�����~���ff.�PXH�5�H��H�L�!H�81�����f���UH��H�5��!SH���1��H��tXH��H���G@��H��H���,C��H��H���<����t��uH���[]�@��6��H��1�[]�H�=K�!1�1��Z���e���D��AUI��H�5�!ATI��USH��H���m1��H��t>L��H���-O��1�I��I��tL���jR��H��L��H���<%����t&H��H��[]A\A]�H�S�!H�5�H�81������M���ff.�f���ATUH��H�5�!S��0��H��t-H��H���YX��H��H��I����'����tH�����H��[]A\����L���T��H�=K�!H�5��1��U��D��ATUH��H�5�!S�y0��H��t/H��1�H���H��H��H��I���M��L��t�
 ��H��[]A\��������H�=ܷ!H�5G�1�����fD��H��H�5��!�0��H��t)H���S��H��tH��H���F��fD�H������f���ATUH��H�5O�!S�/��H��t/H��1�H���G��H��H��I���97��L��t�M��H��[]A\��P����;��H�=�!H�5��1��&��fD��H��H�5�!�L/��H��t)H���7��H��tH��H���>F��fD�H������f���UH��H�5��!SH���.��H��t$H��H���G2��H��H����J����t"H��H��[]�H���!H�5��H�81��v�������H��H�51�!�.��H��tH���'��H��H���=���N���ff.���ATI��USH���t=H��H�H��x\H�5ۅ!L���C.��H��t0H��H���c$����tH��[]A\��H����)��H����N���H�7�!H�5ŰH�81����H�=��!H�5|�1�������H��H�5a�!��-��H��t3H���1��H�@H�xH�DH���fDH��H���.���_���ff.�@��AUATUSH��H��(dH�%(H�D$1�H��u
H���b��f���u�H�H�Ѓ�H��t��u݉�L�c H��������u%H�L$dH3%(H����H��([]A\A]�H�>H�|$�����2$��H�|$H�D$��S��1�H��I���62��H��H��t>L�����H�k L�����������p���H��H�t$�)��H�t$�Y���1�1ҾL���o.���1��1�1�1�L����D��L��H���1��H��u�H�=�!H�5��1������1����25���6��ff.�f���AWAVAUATUH��SH��H��u�H���).��f�@��u�H�H�ƒ�H��u�I��1�L�e�;H����H9�}TL�5��!L��I�6H�<�L�<��6A��H����H�EH���� u�H;]}L�5k�!H�E I�6��f.�H�5�!L���Q+��H��H����H���>��I��H��u
�H���O��L���P��H��u�E1�L�e�0f�H����I9�}<L��J�<��xR��H��H��I���
"����tqI��H�E�� u�L;m}H�E ��DH��� ��H��H��[]A\A]A^A_�I�H�E tIH��J�|=�L��H��H�5�sH��H�o�!H�81��5��L���MN��H�=�!H�5c�1����H�m �H�{�!H�5	�H�81����f.���AWAVAUATUH��SH��H��u�H���I,��f�@��u�H�H�ƒ�H��u�I��1�L�e�;H����H9�}TL�5��!L��I�6H�<�L�<��V?��H����H�EH���� u�H;]}L�5k�!H�E I�6��f.�H�5	�!L���q)��H��H����H���M��Lc�M��~D1�H�����H����1��I��u�E1�L�e�7�H����I9�}<L��J�<�� (�������H��H���0����tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=�J��H��H�5�qH��H���!H�81��U��H�=6�!H�5��B��H�m �H���!H�53�H�81��$��@��ATUSH��H��uH���X���@��u�H�H�Ѓ�H��t��u�H��H��t]H9�tGH�5�!H���	(��I��H��tPH�5�!H����'��H��t<H������H��H��tDL�����H�k H��[]A\�f���t�H���$���H�ڦ!H�5h�H�81��Y�����@��H��H�5!�|'��H��tH���H���!H�5)�H�81����f.���UH��H��~!1�SH��H�=�!���H��H��tH�����H��tH�C H��H��[]���I����H�=��!1������SH�D�!H�5N�H�֥!H�H�;�!��H�;H�5��H�b�!H�ۥ!H��!��H�5�H��H�J�!�u��H�=>�!�����H����H�5`_�f6��H�=�!�H����H�5L_�G6��H�=�!1�H�g���H�5��+6��H�=�!�H�����H�5g��6��H�=ŭ!1�H���H�5����5��H�=��!1�H�@���H�5vl��5��H�=��!�H�����H�5���5��H�=n�!1�H�U���H�5(��5��H�=R�!�H����H�5��z5��H�=3�!1�H�Z���H�5�k�^5��H�=�!�H���H�5��?5��H�=��!1�H���H�5�j�#5��H�=ܬ!�H����H�5���5��H�=��!�H��H�5����4��H�=��!�H�R�H�5�t��4��H�=�!�H���H�5�o�4��H�=`�!1�H���H�5�v�4��H�=D�!1�H�;�H�5�v�o4��H�=(�!H��vH�5�^�u"��H�=�!1�H�u�H�5Oh�94��H�=�!1�H�9�H�5�j�4��H�=֫!�H���H�5 ��3��H�=��![�H���H�5���3��f.�@���w,�����UH�5|!SH��dH�%(H�D$1��#��H����1�H��H���:��Hc�H��~r1��% ��H��H�@H� uMH��H��H�$�f:����xHH�4$H�CH� u1H)�H���6!��H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=�!1�1�������-��H�.�!H�5��H�81����ff.�f���UH�5${!SH����"��H��tZH���"��H��H���&����u.�J��H������H��H��tFH��H���H��H��H��[]�<�����
��H��[H��]�[$��H���!H�5#�H�81����H�=�!1�1������SH��H�t$H�5{z!�&"��H��tgH�|$H���d��H�|$H�D$���H���
7��H�L$H�QHc�H9��}L��H�qH� uH���cF����t-H�D$H��[�@H�q��H��!H�5r�H�81��b��H�=k�!H�5r��O��ff.�@��AUATUSH��(dH�%(H�D$1����.H�I��H�$H�FH�D$���
H�|$�C��H���I��H��H���p>��H�=�_���I�"��H�t$H��H�D$�*��H�|$��H��H�5�x!L���� ��H��H��� H���!H�y!1�H�8�-��L��H�5��E1�I���H!��H��tH���8��I��L��H���H��H�T$H�JH� tH�JH��H��L��� ��H�C0H����I�E L��H�L$dH3%(��H��([]A\A]Ð��t���,)��H�^H�|$���H������H��H����G��H��H���==����u#H��H�=ӣH�C^HD�����1ۉ��_
��H�����*��H�ޞ!H�5��H�81��]	��H�L$H�$H�5��H�=V�!�A	������gH�5���;B��ff.�PX1�1�H��H�=�!�
	��f.���S1�H��w!�
��H���E'��H��t	H�C H��[����f���H��H�5Qw!���H��tH�������H�H��H�Ѓ��H��!H�5��H�81����fD��H��H�5w!���H��tH���3��H��t(Hc0H�xH���*��H���!H�5B�H�81��2���
���ff.�f���UH�5�v!SH���J��H��tcH���=F��H���e
��H��H��tF1�1�H��H���NC����tH��H��[]�7��@H���3��H��H������H��H��[]�g7�����H��!H�5��H�81����f.���USH��H�t$H�5�u!���H��tBH�|$H���sE��1�H����"��H��H��tUH��H�����H�߅�t)����H�D$H��[]�H���!H�5�H�81�������H�=
�!H�5`�1�����H�=��!H�5?�1������PXH�5U�H��H�,�!H�81����f���ATI��USH��H�5�t!����H��t)H��L��H�5�H���&��H���E��H�E H��[]A\������ATI��USH��H�5{t!���H��t)H��L��H�5��H����%��H���D	��H�EH��[]A\��C�����ATI��USH��H�5+t!�6��H��t)H��L��H�5��H���|%��H���9��H�EH��[]A\�����ATI��USH��H�5�s!����H��t)H��L��H�5F�H���,%��H���49��H�EH��[]A\������SH��H��PdH�%(H�D$H1�H�D$H��H�D$(H�D$H�D$0H�D$H�T$ H�D$8����H�D$ 1�L�@ �'f�H��t
Lc�N��L�
��H��I9�tH�9��H��t�H��H�I9�u�9�udH�4$H��tH������H�t$H��tH�����H�t$H��tH���=���H�t$H��tH������H��H�\$HdH3%(uH��P[ú1��#���%����U1�H��r!SH������x�8H�5��H���o,��H��t9H��H��E1�E1�1�1�1��<��H�] H��H�5>��#��H��H��[]�H�Z�!H�5��H�81�����f���ATUSH��H��uH���
���@��u�H�H�Ѓ�H��t��u�I��H��tMH�5r!H�����H��H��tEH�5�q!L�����H��t1H���Z=��H��t<H�C H���)"��H��[]A\Ð��t�H���s���H���!H�5)�H�81����H�="�!H�5����fD��AVAUATI��H�5|q!UH��S��H��H��0dH�%(H�D$(1��	��H�D$H��������I�<$H�|$��ue�0��H�|$H�D$����H�D$H� �oH�PH�T$H�PH�t$H�|$���H�T$H�U H����H�=Z�!1��C��M�t$���<M�l$���H�%�!H�|$ H��u$L�%��@�L���;7��H���!H��t�L�d$ �H��H��L���,��H�П!L�t$ H��u'L�5����L����6��H���!H��t�L��H��H���,����t'H�L$(dH3%(H����H��0[]A\A]A^�H�Q�!L�l$ H��u(H�7���	H���s6��H�$�!H��t�L��H��H���4,���f�H�P��������F ��A������"��H�O�!H�5ޚH�81�����ff.���SH��H�5Ao!����H��t1�H�����H��@�����H��[�H���!H�5��H�81��u��D��UH��H��n!1�SH��H�k�!H�8���H��H��t#H���;:��H��tH�C H��H��[]���{����H�="�!1����ff.���H��H�5�n!�,��H��tH���H�K�!H�5ڙH�81�����f.���UH�5��SH��H��!H�A�!H�;H����H�-��!H�;H�5��H���!H�U���H�5���H��H�|�!�
��H�=p�!�����H����H�5jN�p%��H�=�����E1�1ɺH�=;�!H���K1��H�=�����E1�1ɺH�=�!H���&1��H�=|����E1�1ɺH�=�!H���1��H�=R��u��E1�1ɺH�=̜!H����0��H�=��P��H�=��!E1��H�ƺ�0��H�=��!�H�����H�5���$��H�=v�!�H�B���H�5x��v$��H�=W�!�H����H�5n��W$��H�=8�!�H�d���H�5`��8$��H�=�!�����H���H�5F��$��H�UH�;H�5>����H��!H�5��H��H�����H�;�����H�����H�5�L��#��H�;�H����H�5�L�#��H�;�H�����H�5`��#��H�;�H�]�H�5J��#��H�;�H�����H�5*��f#��H�;1�H���H�5>H�N#��H�;1�H���H�5"E�6#��H�;1�H�z�H�5`��#��H�;1�H��H�5R��#��H�;H��1�[H�5�H�5Ke]��"������',�����UH�5�k!SH��dH�%(H�D$1����H����1�H��H���9��Hc�H��~r1��5��H��H�@H� uMH��H��H�$��8����~HH�4$H�CH� u1H)�H���F��H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=;�!1�1��������H�>�!H�5~�H�81����ff.�f���AWH�5�j!AVAUATUSH��(dH�%(H��$1����H����H��I���2��A�Ņ���Hc�����H�D$E����1�L�d$�TfDL���`��I��H�������HcPH��H�l���H��L���H��1�����H�|$H���/��A9�ty��L�����H��H����H���$���L��H����������L���<.�����l������}���H������I���`���DH���!H�8t8�v��H�D$H��$dH3%(H�D$��H��([]A\A]A^A_�H��!��H�=�>H���7��H���H�=ߕ��7��H�;A�f1�H�
ڕH��>��,���g���H�=3�!1�1�����H�=#�!1�����H�-�!H�5m�H�81���������ATI��H�5�h!US����H��tnH���7��H�����H��H��tF1�L��H��H��������xM��u��tH��[]A\�)��H���_���H�=��!H�5#�1��*���H�={�!1�1�����H���!H�5ÔH�81�����f���S��Q���H������H�߉��_���H��[�f.���USH��H�����H��H����0��H����,��H��H��H��H��[H�5��1�]�./��ff.���S1�H�bg!����H���E��H��t	H�C H��[�H�=��!1��I���f�PXH�5�H��H���!H�81��"���f�UH��H�5g!SH���K��H��t(H�5�f!H��H���4��H��t)H��H��H��[]����H�G�!H�5��H�81�����������UH��SH��H��H��H�5�!�#��H��uH��1�[]�H��H���e����¸��u�H��[]���UH��SH��H��H��H�5��!�1#���H��t$H��H������H�������x��H�H��H��H��H��[]�f���SH��������t"H�6H��t@��tcH��H�H��[�;���H�5�e!H���	
��H��tj1�1�H���� ��H��H��tnH�����Hc�H9��y7��H��H�߉�[�0��DH��H�T$�k0��H�T$H��H��[H�������1����H�Ë!H�5�H�81��B���H�=��!H�5F�1��-���ff.�f���ATUSH��H��uH���X����@��u�H�H�Ѓ�H��t��u�I��H��tMH�5�d!H�����H��H��tEH�5�d!L�����H��t1H���J��H��t<H�C H���%��H��[]A\Ð��t�H�������H��!H�5*�H�81��i���H�=��!H�5��V���fD��H��H�51d!�|��H��t3H���'��H��������?H9�wH�DH���fDH��H���$#�����ff.�@��H��H�5�c!���H��t3H������H��������?H9�wH�DH���fDH��H����"���_���ff.�@��AVAUATI��H�5lc!UH��S��H��H�� dH�%(H�D$1��
��H�$H����������M�4$����M�l$���cL�����I��H����I����L��H��1�����I��H��!H��u$H��H@�H���)��H��!H��t�M��L�51�1�H��L���&1��H�L$dH3%(H����H�� []A\A]A^�L�����I��H��ui�L�����H�|$H�D$���H�D$H�PH� tH�PH�T$H�PH�t$H�����H�$H�U H���v���H�=m�!1���fDH�1�!H��u%H�'�D�H���#(��H��!H��t�H�=0�!H�����I������1������H��!H�5[�H�81������D��AWAVAUATI��UH��S��H��XdH�%(H�D$H1�H�=��!t��L���������H�={��o'���H�=WCH�\�!�W'��H�X�!��~�Hc�L�l�������"��~�H�UH�T$H�UH�T$ ����L�D$0�1�H�5��!�+��H�|$��/��H�|$ H�$����H�D$H�-�!H�D$(H�!H��u&H���fD�H���&��H���!H��t�H�=��!H����H��H�L$(�H���[��H��H�|$0�����H��$t@���>�Y�����H�|$8E1�H��$t@����:���A��H�5�_!L���(��I��H���$H�T$ L�zIc�I9���1��H�JH� tH�JH���H�L$�����H�L$H����A��E��AVH�t$L����ZY����H�t$HdH34%(L����H��X[]A\A]A^A_�H�m�����1�L�D$0�H�5p�!�k*��H�|$�A.��H�|$ H�$�c��H�������b���@����H�L$�V�����������fD�������fDL����e��H����������H�!�!H�5a�H�81���H�=�!H�5݋��ff.�f���AUATUSH��H��8dH�%(H�D$(1�H��u�H������D@��u�H���H��u�H��1�H����'��H��I����'��1�H��I����'���H��H��H�D$�'���H��H�D$�'��H�D$ H��t:H�t$L���8����H�L$(dH3%(��H��8[]A\A]�@H�5�!H�L$�L��H�l$���H�D$ H��u�H���!H��u$H�ʊ@�H���#��H�l�!H��t�H�=��!H����H�D$ �T����I��f���UH��H�]!1�SH��H�=c�!��H��H��tH�����H��tH�C H��H��[]������H�="�!1������H��H�5�\!����H��tH���H��!H�5K�H�81���f.���SH�=�B�
��H���!H�5ۉH���!H��!H�;H��h���H�;H�5�H���!H���!H��H���H�i�!H��H�w�!H�2��H�=h�!H�5������H�=U�!�����H�Y���H�5<�
��H�=6�!�H�����H�5�;����H�=�!�����H����H�5(�����H�=��!�����H�|���H�5�<���H�=ي!1�H�p�H�5�����H�=��!1�H���H�5oA�x��H�=��!1�H���H�5'4�\��H�=��!�H���H�5�Z�=��H�=f�!H��ZH�5�;�C��H�=L�!�H� �H�5{;���H�=-�!1�H����H�5V^����H�=�!1�H�X���H�57�����H�=��!1�H���H�5T���H�=ى!�H�5Ӈ���� ���H��H���C����H�=�C�b��'H��H���b��H�=Ň�A��'H��H���A��H�=�� ��'H��H��� ��H�=�����'H��H�����H�=z�����-H��H������H�=\����-H��H�����H�=K���H�ߺ-H����H�=ň!H��H�5���v��H�=��!�H�5`{�^��H�=��!�/"H�5��F��H�=�!�?H�5��.��H�=g�!�
H[H�5����D���������UH�5$Y!SH��dH�%(H�D$1����H��tlH����'��H����H��H��tDH��1�H�����H�$H��H�0�Q%��H�߅�t�5��H�L$dH3%(u4H��[]��y�H�=��!1�1��I�H��~!H�5>�H�81��1��L
��ff.����UH�5dX!SH��dH�%(H�D$1��:���H����1�H��H���D��Hc�H��~r1����H��H�@H� uMH��H��H�$�����~HH�4$H�CH� u1H)�H������H��H�T$dH3%(u)H��[]�@H�C�f�H�C��H�=ˆ!1�1��Z��u	��H��}!H�5J�H�81��=�ff.�f�PX1�1�H��H�=��!��f.���UH��H�5QW!SH���7���H��t$H��H���W��H��H���,
����t"H��H��[]�H�7}!H�5ÄH�81���������AUH�5�V!ATUSH������H����H��I������Ņ�xLHc����I�Ņ�t)1���L����k�H���3��L��H�����9�u�H��L��[]A\A]�fDH�Q{!H�8tH��[]A\A]���@H��{!��H�=�+H��$��H���H�=��$��H�;A�j1�H�
�H�s+�����H�|!H�5��H�81���f.���UH��H�5�U!SH�����H��tXH��H�����H��H����
��H��H���1����t��uH���[]�@���H��1�[]�H�=��!1�1���H��{!H�5�H�81���f���AUI��H�5@U!ATI��USH��H������H��t>L��H������1�I��I��tL�����H��L��H������t&H��H��[]A\A]�H�{!H�5��H�81����M���ff.�f���ATUH��H�5�T!S���H��t-H��H����	��I��H������L��H������t H��[]A\�H��z!H�5�H�81���H�=p�!H�5+���ff.����H��H�51T!����H��tH����H��t$H��H���.�H�'z!H�5��H�81����q������UH��H�5�S!SH������H��t$H��H������H��H���\����t"H��H��[]�H��y!H�5S�H�81��F��������H��H�5�S!�l���H��tH����H��t$H��H������H�wy!H�5�H�81���������ATI��USH���t=H��H�H��xjH�5S!L������H��t>H��H��������tH��[]A\��H�����H���H�=�!H�5À��H��x!H�5u�H�81��h�H�=Ɂ!H�5.i1��S���UH�5�R!SH���z���H��t5H���m!��H����H��H��tJH��H����H�߅�t#H��[]���H�ix!H�5�H�81������H�=D�!1�1�������ff.���UH�5R!SH�����H��t5H���� ��H����H��H��tJH��H���r�H�߅�t#H��[]�0��H��w!H�5eH�81��X��s�H�=��!1�1��C�����ff.���AUATUSH��H��(dH�%(H�D$1�H��u
H���R�f���u�H�H�Ѓ�H��t��u݉�L�c H��������u%H�L$dH3%(H����H��([]A\A]�H�>H�|$�����"�H�|$H�D$����1�H��I�����H��H��t>L����H�k L���:��������p���H��H�t$�z�H�t$�Y���1�1ҾL���_����z���1�1�1�L���	��L��H���!�H��u�H�=]!H�5A~1������1����"������ff.�f���S1�H�P!�]�H�����H��t	H�C H��[��b���f���AWAVAUATUH��SH��H��u�H�����f�@��u�H�H�ƒ�H��u�I��1�L�e�;H����H9�}TL�5�u!L��I�6H�<�L�<����H����H�EH���� u�H;]}L�5{u!H�E I�6��f.�H�5)O!L������H��H����H����Lc�M��~D1�H������H���n��I��u�E1�L�e�2�H����I9�}<L��J�<����H��H�������tlI��H�E�� u�L;m}H�E ���H��H��[]A\A]A^A_�I�H�E t?H��J�|=�S��H��H�5�>H��H�/t!H�81����H�=V}!H�5P|����H�m �H�Et!H�5�{H�81�����@��H��H�5N!���H��t3H�����H�@H�xH�DH���fDH��H���4���H��s!H�5i{H�81��\��ff.����ATUSH��H��uH�����@��u�H�H�Ѓ�H��t��u�H��H��t]H9�tGH�5QM!H���9�I��H��tPH�5:M!H���"�H��t<H���e�H��H��tDL�����H�k H��[]A\�f���t�H������H�
s!H�5�zH�81�����T���@��H��H�5�L!��H��tH���H��r!H�5WzH�81��J��f.���SH��q!H�5�zH�fr!H�H�;�;�H�;H�5�eH�r{!H�kr!H���H�54���H��H�Z{!��H�=N{!�����H�����H�5�+���H�=/{!�H�c���H�5�+����H�={!1�H����H�5+E���H�=�z!1�H�[�H�5E���H�=�z!H��DH�5�,��H�=�z!1�H�����H�56�i��H�=�z!1�H�i���H�5	V�M��H�=�z!�H����H�5�c�.��H�=gz!1�H�����H�5�s���H�=Kz!�H�/���H�5�s����H�=,z!1�H���H�5�s����H�=z!1�H�����H�5�2���H�=�y!�H����H�5�5���H�=�y!�H�Y���H�5=A�}��H�=�y!�H���H�5j<�^��H�=�y!1�H�n�H�5�x�B��H�={y!�H�o���H�5�x�#��H�=\y![�H���H�5xx�����H�������������UH�5TJ!SH��dH�%(H�D$1����H����1�H��H�������~vHc�1��F�H��H�@H� uNH��H��H�$�W����~IH�4$H�CH� u2H)�H���W�H��H�T$dH3%(u/H��[]�DH�C�f�H�C��H�=kx!H�5�w1���������H�Io!H�5�wH�81��������UH��H�5aI!SH�����H��t)H��H����������H��H������t"H��H��[]�H��n!H�5*wH�81��a��H�=�w!1��S����AUH�5�H!ATUSH���v�H����H��I������xLHc���I��t)1���L�����H������L��H���
��9�u�H��L��[]A\A]�fDH��l!H�8tH��[]A\A]��@H��m!��H�=/H��`��H���H�=�q�G��H�;A��1�H�
MvH���$���H��m!H�5vH�81��:��f.�PXH�5�uH��H��m!H�81����f���ATUH��H�5�G!S�9�H��t/H��1�H���w��H��H��I�����L��t����H��[]A\�������H�=,v!H�5v1����fD��H��H�5AG!���H��t)H���o���H��tH��H�����fD�H����)���f���ATUH��H�5�F!S�y�H��t/1�H��H����H��H��I�����L��t���H��[]A\���������H�=lu!H�5�t1�����fD��H��H�5�F!��H��tH������H��H�������~���ff.���ATUSH��H��uH�������@��u�H�H�Ѓ�H��t��u�I��H��tMH�5F!H����H��H��tEH�5�E!L���w�H��t1H���*�H��t<H�C H���9��H��[]A\Ð��t�H���C��H�jk!H�5�sH�81�����H�=Zt!H�5�s����fD��AWAVAUATUH��SH��H��u�H���)�f�@��u�H�H�ƒ�H��u�I��1�L�e�;H����H9�}TL�5�i!L��I�6H�<�L�<��6��H����H�EH���� u�H;]}L�5Ki!H�E I�6��f.�H�5�D!L���Q�H��H����H������Lc�M��~D1�H�����H����I��u�E1�L�e�7�H����I9�}<L��J�<��������H��H���0���tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=���H��H�5�3H��H�oi!H�81��5��H�=�r!H�5Qr�"��H�m �H��i!H�5�qH�81����@��S1�H��C!���H�����H��t	H�C H��[�H�=Hr!1�����f���UH��H�aC!1�SH��H��h!H�8�K��H��H��t#H����H��tH�C H��H��[]�������H�=�q!1��[��ff.���H��H�5�B!�|�H��tH���/�H��tH���H��h!H�5�pH�81��
��H�=~q!1����ff.�@��SH��g!H�5qH�h!H�H�;���H�;H�5
qH�2q!H�h!H����H��g!H�5����H��H���H�;�����H�����H�5�!���H�;�H����H�5�!���H�;1�H�p���H�5/�t���H�;�H���H�5.j�Y���H�;1�H�}���H�5�5�A���H�;�H��H�5�V�&���H�;1�H�����H�5�.����H�;�H�����H�5j��H�;�H��H�5j����H�;1�[H���H�5!:���f.�D��SH��H�=p!1�H�xA!���H��tH�X [�H��f!H�5�oH�81��@����SH���c���H��tH���V���H�5�d!H������H���O��H��tH���B��H�����H��[�����H���5�o!�}�H��H���1�������W�����H���5bo!�M��H��H���������AWAVAUATUSH��(dH�%(H�D$1���~%I��H���t/H�n����L�f�9�t ����fD�A�H�5>@!L���f�I��H���9H�5�@!H���K�I��H���E1�H��tH��H�D$�i�L�D$I��I����L��H�t$L�D$���L�D$I�ċD$����L��L��L��L�����ueH�5�MH���l�H�5�ML��H����H��H�5�ML����L��H�L$dH3%(uH��([]A\A]A^A_�fDE1���V�L���.��H�5�b!L������H�=�m!H�5�m1��
��L������|$���H�bd!H�5�mH�81�����H�Jd!H�5ymH�81������A��`���f�PXH�5MmH��H�d!H�81����f���H��H�5�>!��H��tH�����H��H�H�D����ff.���ATI��H��UH��S�����t6H�H��H�59>!L���a�H��t)H��H��1����H��[]A\��H����H�����>���ff.���USH��H�5�=!H����H��t1H��H���u����H���X�H��H��[]�fD����������ff.����ATUH��SH���t-I��I�H�5p=!H����H��t L��H���x�H��[]A\�H���H��I�����~���ff.���H��H�5!=!�L�H��t)H����H��tH��H�����fD�H����)���f���H��H�5�<!��H��tH�����H��H�������ff.���H��H�5�<!��H��tH������H��H�H�D����ff.���H��H�5Q<!�|�H��tH�����Hc����H��H���K��f���fD��H��H�5<!�<�H��t)H����H��tH��H���.�fD�H�������f���UH�5�;!H��SH�����H��teH�5�IH��H���p��5>j!H��H�����H�������t��uH���[]�f���H��1�[]�H�=�i!H�53j1��=��������S1�H�2;!����H������H��t	H�C H��[�H�=�i!H�5�i����@��USH��H��H���
��H�5D;!H��H���	�H��tH��H���9����u"H��H��[]�H�`!H�5]iH�81����H�=#i!H�5�i1��}��ff.�f���USH��H��H������H�5�:!H��H����H��tH��H�������u"H��H��[]�H��_!H�5�hH�81����H�=�h!H�5*i1����ff.�f���H��H�5Q:!��H��tH�������u"�H���H�)_!H�5shH�81����H�=9h!H�5�h1������ATUH��SH��H�t$H�5�9!���H��tNH�|$H���~��I���f�H��H����H��tVE1��L��H�������u$H��H��[]A\�H��^!H�5�gH�81����H�=�g!H�5dh1�����H�=�g!H�59h����ff.�f���ATUH��SH��H�t$H�5%9!����H��tNH�|$H�����I�����H��H�����H��tVE1��L��H���>����u$H��H��[]A\�H��]!H�5gH�81��E��H�=�f!H�5�g1��0��H�=�f!H�5yg���ff.�f�PXH�5�fH��H�l]!H�81�����f���USH��H�5P8!H�����H��t?H���Z��H��H���_����tH�H��H���M��H��H��[]�H�����H�����~���ff.���ATUH��SH���t-I��I�H�5�7!H�����H��t L��H���x���H��[]A\�H���H��I��������ff.���ATI��USH��H�5{7!�F��H��t.H��L��H�5EH�����5�e!H��H����H��[]A\����ff.���ATH�5#7!A��H��USH������H��tlH��E�����H��H�5��#��H�߾�V���H�ߺH�5�e��H�ߺH�5�'���H�ߺH�5�e���H��[]A\�����ff.�f���S1�H��6!���H���U�H��t	H�C H��[�H�=�d!H�5�e����@��USH��H��(dH�%(H�D$1�H�GH�$H�GH�D$H�;d!H��u'H�-�<��H������H�d!H��t�H�;�H��H����H�T$dH3%(uH��([]��p���ATUSH�� dH�%(H�D$1���~H��H���t���[���]�D�H�D$H�c!H�,$H�T$H��u"H�0f��H������H�Tc!H��t�H�=`c!H��H�����I��������H�5�BH���q��H��H�5�BL����H��b!H��u$H��%@�H�����H��b!H��t�1�1�H��L���`�L��H�����H�5�cH��H�����L������H�5R%H��H����L����H�5�cH��H����H��H�L$dH3%(uH�� []A\��;����5������H�V������ATUH��H��SH���t2����I��H�5�3!H������H��t D��H���S�H��[]A\��S��I�����I���f���ATUH��H��SH���t2�u��I��H�5�3!H���c��H��t D��H������H��[]A\�����I�������f���ATUH��H��SH���t2���I��H�5�2!H�����H��t D��H�����H��[]A\����I�������f���ATUH��H��SH���t2���I��H�5{2!H�����H��t D��H���#�H��[]A\��3��I������f���AVAUATUSH��@dH�%(H�D$81���H����I��L�t$H����L��L��H�=j�����T$I�Ņ�����H�t$ L��H�l$ H�H�=���L�l$0H�Ѓ�H�D$(��H�ËD$��urI�E H��tNL�����t"1�H�L$8dH3%(uAH��@[]A\A]A^��L��D$����D$��f�1�L���������J������H�=)b1�����q��������H�=�a1�����b�����ATU��SH��5�_!H���u��H��tH�ډ�[H��]A\�����D�%a_!H���)��H��D���>�H��uɉ�[]A\�f���H��H�5�0!���H��tH���H��U!H�5%_H�81��Z���f.���UE1�E1�1�SH��_1��H���+����^!���\E1�E1�1�1�H��_������^!���KH�-U!H��T!H�5�_H�;H�����H�-5U!H�;H�5�_H�T^!H�U����H�=�=H�M^!�P��E1�1ɺH�=7^!H����H�=_�+��E1�1ɺH�=^!H����H�=� ���E1�1ɺH�=�]!H���m�H�=�^����E1�1ɺH�=�]!H���H�H�=�]!H�5���%��H�=�]!�����H�2���H�5��H�=�]!H�5���H�=t]!�H�����H�5�^���H�=U]!�H�!���H�5�^���H�=6]!�H�2���H�5�^��H�=]!�H�����H�5�^��H�=�\!�H�T���H�5�B�h�H�=�\!�H�U���H�5U^�I�H�=�\!�H�v�H�5?^�*�H�=�\!1�H���H�5(]��H�=\!�H�[�H�5�\���H�=`\!�H���H�5�\���H�=A\!�����H�=���H�5���H�UH�;H�5�]���H�57�H��H��[!�x��H�=�[!�����H���H�5c�i�H�=�[!H�5[���H�=�[!1�H�V�H�5F�:�H�=�[!1�H���H�5�\��H�=�[!1�H�N�H�5o\��H�=k[!�H���H�5]���H�=L[!1�H�S�H�5����H�=0[!1�H���H�5�\��H�=[!1�H���H�5�\��H�=�Z!1�H�/�H�5�\�s�H�=�Z!�H���H�5I\�T�H�=�Z!�H�!���H�51\�5�H�=�Z!�H�b���H�5\��H�=Z!H���[H�~�H�5~@]���H�ZP!H�5�\H�81�詻��H�BP!H�5}[H�81�葻����H��H���(null)OSSL_DEBUG: empty sk!ossl.c [%s:%d]
items in sk < -1???0123456789abcdefTurning on FIPS mode failedTurning off FIPS mode failedOPENSSL_init_sslOpenSSLfixed_length_secure_compareOPENSSL_VERSIONOPENSSL_LIBRARY_VERSIONOPENSSL_VERSION_NUMBEROPENSSL_FIPSfips_modefips_mode=OpenSSLErrordebugdebug=errorserror on stack: error:%08lX:%s:%s:%s%spassed data is not valid String???password must not be longer than %d bytesobject in array not of class ##type##inputs must be of equal lengthOpenSSL 1.1.1k  FIPS 25 Mar 2021h'��('���&��8(���(���'���'���(���(���(��h&���(���(���(���(���(���(���(���(���(���(���(���(���%���%��~6��$4���4���4��D5���5��\6��~6��~6��~6���4��~6��D5��~6��~6��~6���5���5��D5��D5��D5��D5��D5��6���2��D5��D5��D5��D5��~6��D5��OBJ_obj2txtinvalid OBJECT ID %litag number not specifiedinvalid tag classto_aArrayillegal EOC octets in valuevalue is too shortinvalid length for BOOLEANinvalid BOOLEAN%2d%2d%2d%2d%2d%2dZbad UTCTIME format: "%s"%4d%2d%2d%2d%2d%2dZunknown time formatutc/%ASN1_INTEGER is NULL!ossl_asn1.cnil expectedunsupported ASN.1 typeASN1_TYPE alloc failurei2d_ASN1_TYPEASN1_get_objectEOCUNIVERSALCONTEXT_SPECIFICAPPLICATIONPRIVATEIMPLICIT@value@tag@tagging@tag_class@indefinite_length@unused_bitsASN1ASN1Errortraversedecodedecode_allUNIVERSAL_TAG_NAMEASN1DataPrimitiveConstructiveBooleanIntegerEnumeratedBitStringOctetStringUTF8StringNumericStringPrintableStringT61StringVideotexStringIA5StringGraphicStringISO64StringGeneralStringUniversalStringBMPStringNullObjectIdUTCTimeGeneralizedTimeSequenceSetEndOfContentregistersnlnoidshort_namelong_nameCLASS_TAG_MAPINTEGERBIT_STRINGOCTET_STRINGNULLOBJECT_DESCRIPTOREXTERNALREALENUMERATEDEMBEDDED_PDVUTF8STRINGRELATIVE_OID[UNIVERSAL 14][UNIVERSAL 15]SEQUENCESETNUMERICSTRINGPRINTABLESTRINGT61STRINGVIDEOTEXSTRINGIA5STRINGUTCTIMEGENERALIZEDTIMEGRAPHICSTRINGISO64STRINGGENERALSTRINGUNIVERSALSTRINGCHARACTER_STRINGBMPSTRINGexplicit tagging of unknown tagindefinite length for primitive valueType mismatch. Bytes read: %ld Bytes available: %ldType mismatch. Total bytes read: %ld Bytes available: %ld Offset: %ldbad GENERALIZEDTIME format: "%s"Can't convert nil into IntegerCan't convert nil into Booleanunused_bits for a bitstring value must be in the range 0 to 7indefinite length form cannot be used with primitive encodingBIO_new_mem_bufBN wasn't initialized!BN_bn2binBN_dupossl_bn.cBN_bin2bnbignum too longinvalid argumentinvalid radix %dBN_newBN_randDon't know how to coerceBN_rand_rangeCannot init BN_CTXBN_is_prime_fasttest_exBNErrorinitializeinitialize_copynum_bytesnum_bits+@-@abs+-mod_addmod_submod_mulmod_sqrmod_sqrt**mod_expgcd<=>ucmpeql?===zero?one?odd?negative?pseudo_randpseudo_rand_rangegenerate_primeprime?prime_fasttest?set_bit!clear_bit!bit_set?mask_bits!<<>>lshift!rshift!get_flagsset_flagsCONSTTIMEto_sto_ito_intto_bnmod_inverseOpenSSL/BNCannot convert into OpenSSL::BNCipher already initialized!Cipher not initialized!iv must be %d byteskey must be %d bytesunable to set AEAD tagkey not setcipher does not support AEADunable to set IV lengthCipherErrorciphersresetpkcs5_keyivgenfinalauth_data=auth_tag=auth_tagauth_tag_len=authenticated?key_len=key_leniv=iv_len=iv_lenblock_sizepadding=ccm_data_len=auth_tag_lenkey_setOpenSSL/Cipherunsupported cipher algorithm (%li)authentication tag not supported by this cipherdata too big to make output buffer: %ld bytessalt must be an 8-octet stringiterations must be a positive integerarguments for %li#encrypt and %li#decrypt were deprecated; use %li#pkcs5_keyivgen to derive key and IVAEAD not supported by this ciphercouldn't set additional authenticated dataunable to set authentication tag lengthretrieving the authentication tag failedunsupported cipher algorithm: %liOpenSSL for Rubywrong config formaterror in line %ldNCONF_newNone[  ]
CONF is not initialized#< sections=rbBIO_new_fileConfigConfigErrorparse_configloadget_value[]sectionseachinspectDEFAULT_CONFIG_FILEOpenSSL/CONFDigest CTX wasn't initialized!Unsupported digest algorithm (%li).Digest initialization failed.EVP_DigestFinal_exEVP_DigestUpdateEVP_MD_CTX_newDigest initialization failedrequireDigest::ClassDigestErrorfinishdigest_lengthblock_lengthOpenSSL/DigestENGINE wasn't initialized.NUMERICNO_INPUTdynamicOPENSSL_init_cryptocryptodevopenssl#<%li id="%s" name="%s">no such digest `%li'no such cipher `%li'privateEngineErrorcleanupenginesby_idcipherload_private_keyload_public_keyset_defaultctrl_cmdcmdsMETHOD_RSAMETHOD_DSAMETHOD_DHMETHOD_RANDMETHOD_CIPHERSMETHOD_DIGESTSMETHOD_ALLMETHOD_NONEOpenSSL/Engineno such builtin loader for `%li'HMAC wasn't initializedEVP_DigestSignFinalEVP_PKEY_new_raw_private_keyEVP_DigestSignInitEVP_DigestSignUpdateEVP_MD_CTXEVP_MD_CTX_copyHMACErrorhexdigestOpenSSL/HMAClength must be non-negativeEVP_PKEY_CTX_new_idEVP_PKEY_derive_initEVP_PKEY_CTX_set_hkdf_mdEVP_PKEY_CTX_set_hkdf_saltEVP_PKEY_CTX_set_hkdf_keyEVP_PKEY_CTX_set_hkdf_infoEVP_PKEY_deriveEVP_PBE_scryptiterationsPKCS5_PBKDF2_HMACKDFKDFErrorpbkdf2_hmachkdfSPKI wasn't initialized!i2d_NETSCAPE_SPKIChallenge.length <= 0?ossl_ns_spki.cNETSCAPE_SPKI_verifyNETSCAPE_SPKI_set_pubkeyNetscapeSPKIErrorto_textpublic_key=challengechallenge=OpenSSL/NETSCAPE_SPKICert ID wasn't initialized!BIO_newi2a_ASN1_OBJECTd2i_OCSP_CERTIDOCSP_cert_to_idResponse wasn't initialized!d2i_OCSP_BASICRESPd2i_OCSP_RESPONSERequest wasn't initialized!OCSP_CERTID_dupOCSP_request_add0_idd2i_OCSP_REQUESTASN1_item_dupOCSP_single_get0_statuscertificate is not revokedd2i_OCSP_SINGLERESPOCSPOCSPErroradd_noncecheck_nonceadd_certidsigned?createstatus_stringbasicBasicResponsecopy_nonceadd_statusresponsesfind_responseSingleResponsecheck_validitycert_statusthis_updatenext_updaterevocation_timerevocation_reasonextensionsCertificateIdcmp_issuerserialissuer_name_hashissuer_key_hashhash_algorithmRESPONSE_STATUS_INTERNALERRORREVOKED_STATUS_NOSTATUSRESPONSE_STATUS_SIGREQUIREDRESPONSE_STATUS_SUCCESSFULRESPONSE_STATUS_TRYLATERREVOKED_STATUS_CACOMPROMISEREVOKED_STATUS_KEYCOMPROMISEREVOKED_STATUS_REMOVEFROMCRLREVOKED_STATUS_SUPERSEDEDRESPONSE_STATUS_UNAUTHORIZEDREVOKED_STATUS_UNSPECIFIEDNOCERTSNOINTERNNOSIGSNOCHAINNOVERIFYNOEXPLICITNOCASIGNNODELEGATEDNOCHECKSTRUSTOTHERNOTIMEV_CERTSTATUS_GOODV_CERTSTATUS_REVOKEDV_CERTSTATUS_UNKNOWNV_RESPID_NAMEV_RESPID_KEYOpenSSL/OCSP/CERTIDOpenSSL/OCSP/SINGLERESPOpenSSL/OCSP/BASICRESPOpenSSL/OCSP/RESPONSEOpenSSL/OCSP/REQUESTSingleResponse wasn't initialized!wrong argument (%li)! (Expected kind of %li)RESPONSE_STATUS_MALFORMEDREQUESTREVOKED_STATUS_AFFILIATIONCHANGEDREVOKED_STATUS_CERTIFICATEHOLDREVOKED_STATUS_CESSATIONOFOPERATIONPKCS12 wasn't initialized.PKCS12_parse@key@certificate@ca_certsPKCS12_set_macUnknown PBE algorithm %liUnknown key usage type %liASN1_dupPKCS12ErrorKEY_EXKEY_SIGOpenSSL/PKCS12PKCS7 wasn't initialized.@dataPKCS7_verify@error_stringNegative number of recipient!PKCS7ri wasn't initialized.PKCS7_RECIP_INFO_dupPKCS7_add_recipient_infoossl_pkcs7.cNegative number of signers!PKCS7si wasn't initialized.PKCS7_SIGNER_INFO_dupPKCS7_add_signerCould not parse the PKCS7No content in PKCS7must specify a booleanunknown type "%li"signedencryptedenvelopedsignedAndEnvelopedPKCS7_dupPKCS7Errorread_smimewrite_smimetype=detached=detacheddetached?cipher=signersadd_recipientrecipientsadd_certificatecertificates=certificatescrls=crlsadd_dataSignerInfoSignersigned_timeRecipientInfoenc_keyTEXTDETACHEDBINARYNOATTRNOSMIMECAPOpenSSL/PKCS7/RECIP_INFOOpenSSL/PKCS7/SIGNER_INFOOpenSSL/PKCS7OpenSSL::PKCS7#get_signer_info == NULL!cipher must be specified. Before version 3.3, the default cipher was RC2-40-CBC.signeddatasignedAndEnvelopedenvelopedencrypteddigestPKEY wasn't initialized!EVP_PKEY_CTX_newEVP_PKEY_decrypt_initEVP_PKEY_decryptEVP_PKEY_encrypt_initEVP_PKEY_encryptEVP_PKEY_derive_set_peerEVP_PKEY_sign_initEVP_PKEY_CTX_set_signature_mdEVP_PKEY_signsignature would be too largeEVP_PKEY_eqEVP_PKEY_get_raw_public_keyEVP_PKEY_get_raw_private_keyi2d_PKCS8PrivateKey_bioPEM_write_bio_PKCS8PrivateKeyEVP_PKEY_print_params#<%li:%p oid=%s>algorithm %li not foundEVP_PKEY_new_raw_public_keyEVP_PKEY_paramgenEVP_PKEY_keygenEVP_PKEY_paramgen_initEVP_PKEY_keygen_initCould not parse PKeyparameters missingpublic key missingEVP_PKEY_verify_recover_initEVP_PKEY_verify_recoverEVP_PKEY_verify_initEVP_PKEY_verifyEVP_DigestVerifyInitEVP_DigestVerifyprivate key is neededEVP_DigestSigni2d_PrivateKey_bioi2d_PUBKEY_bioPEM_write_bio_PUBKEYPKeyErrorgenerate_parametersprivate_to_derprivate_to_pempublic_to_derpublic_to_pemcompare?sign_rawverify_rawprivate?OpenSSL/EVP_PKEYdecrypted data would be too largeEVP_PKEY_CTX_ctrl_str(ctx, %+li, %+li)encrypted data would be too largederived key would be too largecannot match different PKey typesOpenSSL::PKey::PKey can't be instantiated directlyPEM_write_bio_PrivateKey_traditionalTHIS IS NOT A DH!pub_keypriv_keyDH_set0_keyDH_set0_pqgpkey already initializedDHparams_dupEVP_PKEY_assign_DHDH_newcould not parse pkeyincorrect pkey type: %sDHErrorpublic?exportparams_ok?set_pqgset_keyTHIS IS NOT A DSA!DSA_set0_keyDSA_set0_pqgEVP_PKEY_assign_DSADSA_newDSA PUBLIC KEYNeither PUB key nor PRIV keyDSAErrorEC_POINT is not initializedEC_GROUP is not initializedEC_POINT_is_on_curveEC::Point already initializedEC_POINT_dupEC_POINT already initializedinvalid second argumentEC_POINT_newEC_POINT_bn2pointEC_POINT_oct2pointEC_POINT_addBIO_new(BIO_s_mem())EC_GROUP_dupunknown curve name (%li)unable to create curve (%li)EC_GROUP_new_by_GF*wrong number of argumentsTHIS IS NOT A EC PKEY!EVP_PKEY_checkEVP_PKEY_public_checkEC_KEY_set_public_keyEC_KEY_set_private_keyEC_KEY_set_groupEC_KEY_dupEVP_PKEY_assign_EC_KEYinvalid curve nameEC_KEY_newEC_get_builtin_curvesEC_POINT_point2octEC_POINT_set_to_infinityEC_POINT_invertEC_POINT_make_affineEC_POINT_is_at_infinityEC_GROUP_set_seedEC_GROUP_get_cofactorEC_GROUP_get_orderEC_GROUP_set_generatorEC::Group already initializedEC_GROUP_cmpEC_POINT_cmpEC_KEY_generate_keyECErrorECGroupPointGFpGF2muncompressedhybridNAMED_CURVEEXPLICIT_CURVEgenerategroup=private_key=private_key?public_key?generate_key!check_keycurve_nameasn1_flagasn1_flag=point_conversion_formpoint_conversion_form=seed=degreeinfinity?on_curve?make_affine!invert!set_to_infinity!to_octet_string@groupOpenSSL/EC_POINTOpenSSL/ec_groupEC_GROUP is already initializedunknown symbol, must be :GFp or :GF2munknown argument, must be :GFp or :GF2mcan't export - no public key setunsupported point conversion form %+li (expected :compressed, :uncompressed, or :hybrid)OpenSSL::PKey::EC::Point#make_affine! is deprecatedunsupported point conversion form: %d, this module should be updatedbns must be 1 longer than points; see the documentationOpenSSL::PKey::EC::Point#mul(ary, ary) is deprecated; use #mul(bn) form insteadTHIS IS NOT A RSA!dmp1dmq1iqmpRSA_set0_crt_paramsRSA_set0_factorsRSA_set0_keyEVP_PKEY_assign_RSARSA_newsalt_lengthmgf1_hashautomaxRSAErrorsign_pssverify_pssset_factorsset_crt_paramsRAND_bytesRAND_bytes is not supportedRandomRandomErrorrandom_addload_random_filewrite_random_filerandom_bytesstatus?SSL is not initializedSSL_export_keying_materialSSL_set_fdSSL keylog callback enteredossl_ssl.c:write would blockread would blockSSL_set_sessionSSL_writeSSL_CTX_newpublic key mismatchSSL_CTX_use_certificateSSL_CTX_use_PrivateKeySSL_CTX_set0_chainSSL2unrecognized version %+liSSL_CTX_set_min_proto_versionSSL_CTX_set_max_proto_versionremote_addressinspect_sockaddrverify_certificate_identitySSL_CTX_check_private_keySSL_CTX_add_client_CASSL_CTX_load_verify_locationsSSL NPN select callback addedSSL_CTX_set_alpn_protosSSL ALPN values addedSSL keylog callback addedSSL_set_SSL_CTXarg must be Time or nilcache_numconnect_goodconnect_renegotiateaccept_goodaccept_renegotiatecache_hitscb_hitscache_missescache_fulltimeoutsSSL_CTX_set_ciphersuitesSSL_CTX_set_cipher_listSSL_CTX_set_tmp_dhSSL already initializednonblock= SYSCALL: %s (%s)ErrnoSystemCallErrorSSL_acceptSSL_connectSSL_readcallcallback_stateossl_ssl_ex_ptr_idxSSL_get_ex_new_indexossl_sslctx_ex_ptr_idxSSL_CTX_get_ex_new_indexSSLErrorWaitReadableSSLErrorWaitWritableSSLContextssl_timeoutssl_timeout=set_minmax_proto_versionciphers=ciphersuites=tmp_dh=ecdh_curves=security_levelsecurity_level=enable_fallback_scsvsetupfreezeSESSION_CACHE_OFFSESSION_CACHE_CLIENTSESSION_CACHE_SERVERSESSION_CACHE_BOTHSESSION_CACHE_NO_AUTO_CLEARSESSION_CACHE_NO_INTERNALsession_addsession_removesession_cache_modesession_cache_mode=session_cache_sizesession_cache_size=session_cache_statsflush_sessionsoptionsoptions=SSLSocketconnect_nonblockaccept_nonblocksysreadsysread_nonblocksyswritesyswrite_nonblockstoppeer_certpeer_cert_chainssl_versionpendingsession_reused?session=verify_resulthostname=peer_finished_messagetmp_keyalpn_protocolnpn_protocolVERIFY_NONEVERIFY_PEERVERIFY_FAIL_IF_NO_PEER_CERTVERIFY_CLIENT_ONCEOP_ALLOP_LEGACY_SERVER_CONNECTOP_TLSEXT_PADDINGOP_SAFARI_ECDHE_ECDSA_BUGOP_ALLOW_NO_DHE_KEXOP_NO_TICKETOP_NO_COMPRESSIONOP_NO_ENCRYPT_THEN_MACOP_ENABLE_MIDDLEBOX_COMPATOP_PRIORITIZE_CHACHAOP_NO_ANTI_REPLAYOP_NO_SSLv3OP_NO_TLSv1OP_NO_TLSv1_1OP_NO_TLSv1_2OP_NO_TLSv1_3OP_CIPHER_SERVER_PREFERENCEOP_TLS_ROLLBACK_BUGOP_NO_RENEGOTIATIONOP_CRYPTOPRO_TLSEXT_BUGOP_MICROSOFT_SESS_ID_BUGOP_NETSCAPE_CHALLENGE_BUGOP_MICROSOFT_BIG_SSLV3_BUFFEROP_MSIE_SSLV2_RSA_PADDINGOP_SSLEAY_080_CLIENT_DH_BUGOP_TLS_D5_BUGOP_TLS_BLOCK_PADDING_BUGOP_SINGLE_ECDH_USEOP_SINGLE_DH_USEOP_EPHEMERAL_RSAOP_NO_SSLv2OP_PKCS1_CHECK_1OP_PKCS1_CHECK_2OP_NETSCAPE_CA_DN_BUGSSL2_VERSIONSSL3_VERSIONTLS1_VERSIONTLS1_1_VERSIONTLS1_2_VERSIONTLS1_3_VERSIONexceptionwait_readablewait_writabletmp_dh_callbacknpn_protocols_encoded@cert_store@ca_file@ca_path@verify_mode@verify_depth@verify_callback@client_ca@renegotiation_cb@cert@extra_chain_cert@client_cert_cb@timeout@session_id_context@session_get_cb@session_new_cb@session_remove_cb@npn_select_cb@npn_protocols@alpn_protocols@alpn_select_cb@servername_cb@verify_hostname@keylog_cb@io@context@hostnameSSL3TLS1TLS1_1TLS1_2TLS1_3OpenSSL/SSLOpenSSL/SSL/CTXSSL SESSION get callback enteredSSL Session wasn't initialized.SSL SESSION remove callback enteredSSL SESSION new callback enteredAdvertised protocol must have length 1..255Timed out while waiting to become writable!Timed out while waiting to become readable!SSL session is not started yetSelected protocol name must have length 1..255certificate does not contain public keyverify_hostname requires hostname to be setSSL NPN advertise callback addedSSL ALPN select callback addedSSL_CTX_set_session_id_contextSSL SESSION get callback addedSSL SESSION new callback addedSSL SESSION remove callback addedSSL TLSEXT servername callback addedservername_cb must return an OpenSSL::SSL::SSLContext object or nilinvalid pkey type %s (expected DH)%s%s returned=%d errno=%d peeraddr=%li state=%s%liSESSION_CACHE_NO_INTERNAL_LOOKUPSESSION_CACHE_NO_INTERNAL_STOREOP_DONT_INSERT_EMPTY_FRAGMENTSOP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONOP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONOP_NETSCAPE_REUSE_CIPHER_CHANGE_BUGOP_SSLREF2_REUSE_CERT_TYPE_BUGOP_NETSCAPE_DEMO_CIPHER_CHANGE_BUGt���D��������SSL Session already initializedi2d_SSL_SESSIONno session availableunknown typeBIO_s_mem()SSL_SESSION_print()SessionErrortime=OpenSSL/SSL/SessionError when encoding to DERTS_RESP wasn't initialized.TS_REQ wasn't initialized.sk_X509_new_nullTS_RESP_get_tokensk_X509_pushTS_RESP_verify_responseUnrecognized failure info.invalid OBJECT IDTS_REQ_set_policy_idTS_MSG_IMPRINT_set_msgX509_ALGOR_set0version must be >= 0!TS_REQ_set_versionMemory allocation failed.@serial_number must be set.@gen_time must be a Time.@gen_time@serial_number@default_policy_id@additional_certs@allowed_digestsBAD_ALGBAD_REQUESTBAD_DATA_FORMATTIME_NOT_AVAILABLEUNACCEPTED_POLICYUNACCEPTED_EXTENSIONADD_INFO_NOT_AVAILABLESYSTEM_FAILURETimestampTimestampErrorfailure_infostatus_texttoken_infotsa_certificatemessage_imprintorderingversion=algorithm=message_imprint=policy_id=nonce=cert_requested=cert_requested?GRANTEDGRANTED_WITH_MODSREJECTIONWAITINGREVOCATION_WARNINGREVOCATION_NOTIFICATIONcreate_timestampOpenSSL/Timestamp/TokenInfoOpenSSL/Timestamp/ResponseOpenSSL/Timestamp/RequestError when decoding the timestamp requestError when decoding the timestamp token infoError when creating the verification context.Error when decoding the timestamp responseMessage imprint missing algorithmMessage imprint missing hashed messageTS_TST_INFO wasn't initialized.Error during response generationCertificate does not contain the timestamping extensionNo policy id in the request and no default policy setV_OKV_ERR_UNSPECIFIEDV_ERR_UNABLE_TO_GET_CRLV_ERR_CERT_SIGNATURE_FAILUREV_ERR_CRL_SIGNATURE_FAILUREV_ERR_CERT_NOT_YET_VALIDV_ERR_CERT_HAS_EXPIREDV_ERR_CRL_NOT_YET_VALIDV_ERR_CRL_HAS_EXPIREDV_ERR_OUT_OF_MEMV_ERR_CERT_CHAIN_TOO_LONGV_ERR_CERT_REVOKEDV_ERR_INVALID_CAV_ERR_PATH_LENGTH_EXCEEDEDV_ERR_INVALID_PURPOSEV_ERR_CERT_UNTRUSTEDV_ERR_CERT_REJECTEDV_ERR_SUBJECT_ISSUER_MISMATCHV_ERR_AKID_SKID_MISMATCHV_ERR_KEYUSAGE_NO_CERTSIGNV_ERR_KEYUSAGE_NO_CRL_SIGNV_ERR_INVALID_NON_CAV_ERR_INVALID_EXTENSIONV_ERR_NO_EXPLICIT_POLICYV_ERR_DIFFERENT_CRL_SCOPEV_ERR_UNNESTED_RESOURCEV_ERR_PERMITTED_VIOLATIONV_ERR_EXCLUDED_VIOLATIONV_ERR_SUBTREE_MINMAXV_ERR_UNSUPPORTED_NAME_SYNTAXV_ERR_PATH_LOOPV_ERR_SUITE_B_INVALID_VERSIONV_ERR_SUITE_B_INVALID_CURVEV_ERR_SUITE_B_LOS_NOT_ALLOWEDV_ERR_HOSTNAME_MISMATCHV_ERR_EMAIL_MISMATCHV_ERR_IP_ADDRESS_MISMATCHV_ERR_DANE_NO_MATCHV_ERR_EE_KEY_TOO_SMALLV_ERR_CA_KEY_TOO_SMALLV_ERR_CA_MD_TOO_WEAKV_ERR_INVALID_CALLV_ERR_STORE_LOOKUPV_ERR_NO_VALID_SCTSV_ERR_OCSP_VERIFY_NEEDEDV_ERR_OCSP_VERIFY_FAILEDV_ERR_OCSP_CERT_UNKNOWNV_FLAG_USE_CHECK_TIMEV_FLAG_CRL_CHECKV_FLAG_CRL_CHECK_ALLV_FLAG_IGNORE_CRITICALV_FLAG_X509_STRICTV_FLAG_ALLOW_PROXY_CERTSV_FLAG_POLICY_CHECKV_FLAG_EXPLICIT_POLICYV_FLAG_INHIBIT_ANYV_FLAG_INHIBIT_MAPV_FLAG_NOTIFY_POLICYV_FLAG_EXTENDED_CRL_SUPPORTV_FLAG_USE_DELTASV_FLAG_CHECK_SS_SIGNATUREV_FLAG_TRUSTED_FIRSTV_FLAG_SUITEB_128_LOS_ONLYV_FLAG_SUITEB_192_LOSV_FLAG_SUITEB_128_LOSV_FLAG_PARTIAL_CHAINV_FLAG_NO_ALT_CHAINSV_FLAG_NO_CHECK_TIMEPURPOSE_SSL_CLIENTPURPOSE_SSL_SERVERPURPOSE_NS_SSL_SERVERPURPOSE_SMIME_SIGNPURPOSE_SMIME_ENCRYPTPURPOSE_CRL_SIGNPURPOSE_ANYPURPOSE_OCSP_HELPERPURPOSE_TIMESTAMP_SIGNTRUST_COMPATTRUST_SSL_CLIENTTRUST_SSL_SERVERTRUST_EMAILTRUST_OBJECT_SIGNTRUST_OCSP_SIGNTRUST_OCSP_REQUESTTRUST_TSADEFAULT_CERT_AREADEFAULT_CERT_DIRDEFAULT_CERT_FILEDEFAULT_CERT_DIR_ENVDEFAULT_CERT_FILE_ENVDEFAULT_PRIVATE_DIRV_ERR_UNABLE_TO_GET_ISSUER_CERTV_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATUREV_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATUREV_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEYV_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELDV_ERR_ERROR_IN_CERT_NOT_AFTER_FIELDV_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELDV_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELDV_ERR_DEPTH_ZERO_SELF_SIGNED_CERTV_ERR_SELF_SIGNED_CERT_IN_CHAINV_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLYV_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATUREV_ERR_AKID_ISSUER_SERIAL_MISMATCHV_ERR_UNABLE_TO_GET_CRL_ISSUERV_ERR_UNHANDLED_CRITICAL_EXTENSIONV_ERR_UNHANDLED_CRITICAL_CRL_EXTENSIONV_ERR_PROXY_PATH_LENGTH_EXCEEDEDV_ERR_KEYUSAGE_NO_DIGITAL_SIGNATUREV_ERR_PROXY_CERTIFICATES_NOT_ALLOWEDV_ERR_INVALID_POLICY_EXTENSIONV_ERR_UNSUPPORTED_EXTENSION_FEATUREV_ERR_APPLICATION_VERIFICATIONV_ERR_UNSUPPORTED_CONSTRAINT_TYPEV_ERR_UNSUPPORTED_CONSTRAINT_SYNTAXV_ERR_CRL_PATH_VALIDATION_ERRORV_ERR_SUITE_B_INVALID_ALGORITHMV_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHMV_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256V_ERR_PROXY_SUBJECT_NAME_VIOLATIONATTR wasn't initialized!X509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_set1_objectX509_ATTRIBUTE_dupsk_newoid=value=AttributeErrorAttributeOpenSSL/X509/ATTRIBUTEattribute value must be ASN1::SetCERT wasn't initialized!i2d_re_X509_tbsX509_set_pubkeyX509_set_notAfterX509_set_notBeforePEM_read_bio_X509X509_add_extCertificateErrorCertificatesignature_algorithmserial=subjectsubject=issuer=not_beforenot_before=not_afternot_after=extensions=add_extensiontbs_bytesOpenSSL/X509#<%li: subject=%+li, issuer=%+li, serial=%+li, not_before=%+li, not_after=%+li>Could not detect format of certificate data!CRL wasn't initialized!num < 0???ossl_x509crl.ccount < 0???X509_CRL_add0_revokedX509_CRL_set_nextUpdateX509_CRL_set_lastUpdatePEM_read_bio_X509_CRLX509_CRL_add_extCRLErrorlast_updatelast_update=next_update=revoked=add_revokedOpenSSL/X509/CRLEXT wasn't initialized!ASN1_OCTET_STRING_setcritical,@config%li = %liossl_x509ext.cOBJ_txt2objX509_EXTENSION_set_object@crl@subject_request@subject_certificate@issuer_certificateCTX wasn't allocated!X509_EXTENSION_dupcritical=ExtensionErrorExtensionFactoryissuer_certificate=subject_certificate=subject_request=crl=create_extExtensionvalue_dercritical?OpenSSL/X509/EXTENSIONOpenSSL/X509/EXTENSION/FactoryName wasn't initialized.name entries < 0!ossl_x509name.cX509_NAME_print_ex#<%li %li>X509_NAME_onelineX509_NAME_dupOBJECT_TYPE_TEMPLATElocX509_NAME_add_entry_by_txtDEFAULT_OBJECT_TYPENameErroradd_entryto_utf8hash_oldcountryNamednQualifierDCdomainComponentemailAddressRFC2253ONELINEMULTILINEOpenSSL/X509/NAMEReq wasn't initialized!ossl_x509req.cX509_REQ_set_pubkeyX509_REQ_set_versionPEM_read_bio_X509_REQX509_REQ_add1_attrRequestErrorattributesattributes=add_attributeOpenSSL/X509/REQREV wasn't initialized!i2d_X509_REVOKEDossl_x509revoked.cX509_REVOKED_set_serialNumberX509_REVOKED_dupX509_REVOKED_add_extRevokedErrorRevokedOpenSSL/X509/REVX509_REVOKED_set_revocationDateSTORE_CTX wasn't initialized!STORE_CTX is out of scope!STORE wasn't initialized!X509_STORE_CTX_initX509_verify_certX509_STORE_CTX_newX509_STORE_add_crlX509_STORE_add_certX509_STORE_set_default_pathsX509_STORE_add_lookupX509_LOOKUP_load_fileX509_LOOKUP_add_dir@error@chainX509_STORE_newstctx_ex_verify_cb_idxstore_ex_verify_cb_idxX509_STORE_get_ex_new_indexStoreErrorStoreverify_callback=flags=purpose=trust=add_pathadd_fileStoreContexterror=error_depthcurrent_certcurrent_crlOpenSSL/X509/STORE_CTXOpenSSL/X509/STOREOpenSSL::X509::Store.new does not take any argumentsStoreContext initialization failureexception in verify_callback is ignoredX509_STORE_CTX_get_ex_new_index;4���P^��x�����-���\#5����$=����*E����+M����,U���D/Z����1b���H9j���0:r���<z����A����\G�����H�����I����4J�����JÞ���K˞��lMӞ���N۞���X���f���f�g�����s����tF���T~N����~V����^���|�c����h���܈m����u���X�}������������������� �h����x������������������H���h��������Ȣ���(��������$ ���t x���� H���!����,!���@!�����!X����!�����!�����!����"x���,"x���h"خ���"H����"�����"ر���"����#ز��p#h����#���#X����#ȴ���#(���$$ȵ��@$(���`$����$����%h���\%Ȼ���%(����%�����%��&H���8&����d&����&h����&Ⱦ���&(���'����@'��l'H����'�����'����'h���(���H((��t(����(����(H���(���$)��P)����)(���)��*��4*h��x*x���*����*���+x��<+���P+���t+���+���,��P,���,x��,���,��-8�,-H�@-h�\-��x-8��-X��-���-�.X�$.��@.��\.(�x.h��.��.��.(���X/����/X����/���0���$0x���P0���|0�����0x����0����41�����1X����1���2���H2����x2H���2���2���3X��,3���X3x���3���3x��4���44���p4X���4���4x���4	��,5�	��H5�	��\5�
���5h���5(��6���L6�
���6h���6H��7(��T7����7���7���8x��H8���h8���|8����8����8����8���9���\9����9�"��D:#��`:(#��|:H#���:�#���:�#���:$���:X$��;�$��,;%��H;X%��d;&���;�(��,<�(��@<�(��T<�)���<�*���<X+���<�+��(=�,��\=h-���=H.���=x/��>(0��$>�0��P>4��p>(4���>�4���>5���>�5��?�5��(?7��x?H7���?�7���?8���?x8��@9��<@�9���@x:���@x;���@�<��,A�<��TAx=���A@���A@���A8@��Bh@��$B�@��@BA��lB(A���BxA���B�A���B�A���B�B��C8C��,C(D��\CE���CF���C�F���C�H���C�H��D�H�� DJ��\D(K���DXL���D�L��EHN��$E(O��PEHO��lE�O���E�O���E(P���E�P���E�P��FHQ��DF�Q��pF8R���F�S���F�V���FxW��G�W�� G�X��pGXY���G�Y���G�Z���G�Z��H�[��<H�\��XHa���H�c��HIf���I�f���I�f���I�g��J�h��HJ�h��dJ�i���JXj���J�j��Khk��DK�k��pK8l���K�l���K8m���Khm��L(o�� Lp��LL(p��`L�p���L�r���L�s���L�s��M�t��4M�t��HM�u���M�u���M�v���M�w���M�w��N�x��,N�y��XN�z���NH{���NX|��OX}��8Ox}��TO~��xO�~���O(���O����O���P8���,P����|P�����P���P�����P؃��Q���$Q����`QH���|Qh����Qȅ���Qh����Q����QH���R(���4RH���PRx���lR�����RH����Rȉ���R����Sh���HS����dS���S����S�����S�����S����T،��0Tx���lT(����T�����TH���Uȓ��@U�����U(����U(���0V(����V�����Vț���V����Wh���@W(���`W8���tW(����W8����WH����WX����W����X��4XH����X����Yh���DY���`Y���tY(����Y8����Y(����Yط��ZH���dZ�����Z�����Z�� [�����[H����[�����[���$\��@\���\\H���x\�����\����\���\X���\���]���4]���p]����]H���]����]���^8��$^X��<^���`^���x^���^(���^����^����^���$_X��@_���\_(��|_����_���_���`h��@`���l`H���`����`h��ah��XaX���a8���a����a��b��$b(��8bx��Tb���b����b���b�$c(�`c���c���c��dh�@d���d��d��d(��dH�e��,e�De(�te���e���e���eX�f��0f�Tf(�f8��f����g����,g����@g����tgx����g�����gH���h����Th����h(���h���hh��i���4i(���i���i���i(���ih��j
��,jX��hj����j���j���k���8k���tk����kh���k���k����kx�� l(��Dl���hlh���l���l���l���m���@m�!���m�"���m�$���m%��n�%��0nh&��Tn'��xn�'���nx(���n()���n�)��o�*��Lo�+��xo�-���o�-���o�-���oh.���oX/��(p�1��dp�2���p3���p83���p�3���p�3��q4��$q�7��tqh8���qH9���qx:��,rX;��XrH<���r=���r(>���r?��$sA��Xs�B���sC���sHD��,t�D��Xt�E���tF���t8F���t�F��uxG��Du�G��`uHH���u�H���uI���u�I��v�I��<v8J��XvxJ��tv(K���v�K���v�L��w(M��4w�M��lw�N���w�N���whO���w�O��xXP��,x�P��\x�V���x�V���xXW���x�W��yHX��@y�X��dyhY���y�`���y�a���yd��z�e��Tz�f���z�h���z�i��{�k��@{l��\{xl��x{(m���{�m���{�n���{8o��|�o��,|�p��P|Hq��t|�q���|8r���|xr���|xs��}�v��`}�y���}h|���}x|���}�|��~(}��,~�}��h~�}���~(~���~h~���~h��x�����,���@���������������H���8�������H������������������8���(�����T�؆���������X����������������T�X�������������؋��@�����l�������X�������������L�(���d�X����������H��������$���D����`�(���|�H�����ȕ����H���ЅȖ������x���4�����P�X���|�������ؘ����������ؙ������8�Ț����8�������������(��� �x���8�����T������x���,�����@�h���|������x���ԉȡ���H���,�����L�ؤ����h���Њإ�����������<�����Ћ(����ȩ��,�h���T����|������������h���4�����p�������X���؍8������0����T������x�����������\�X�����������Џ8���H��8�X��L�h��`�����������А��(����D���`�X�|������ȑ����4���X�����(�����������������0��D��X�����������̓h���(�D����H����ܔ����������8�����T���p���������������ԕ����H��������(����D����d�������(���Ȗx���������8���4���l�h����������h��������X���@�����`���|�(�����h���������И���(��������(�����D�H��p������8��̙�������X��8����T�h���������X���H���X���H��H�h������̛��������(�X!��d�(#����h#�����#���$���8%�� �H%��4�h%��L�X&��x�x&����h'�����'��ԝ�'����'���(��(��(��`�()�����)��ܞ8*����*��L�H+�����+����,��П�,�����,���H-��D��-��`��-����H.�����.��Ԡ�.���H/����/��8�0�����0����81����1���(2��,��2��X�(4�����5��Т�7����8��L��8��x�(9����h9�����9��̣(=���8=����h>��L�(?��x�H?����x?�����?��ܤA��,��A��X�(B�����B�����B��̥XC����C��@�XD��l��D����E�����E����E���8F��0�xF��L�G��x�hG�����H��ԧ�J�� ��L��l�XM�����M�����M���Q���Q���R��@��R��x�hS����hU����U����U����U��8�(V��T��V��p�(W�����W��Ԫ�W���HX����X��H��X��t�8Y����HZ��ī�Z����[�� ��]��d�8^�����^�����^��Ȭ�a����b����b��8�e�����e�����e��ԭ(f����hf����f��4��f��`�8g�����g�����h���Xi��8��i��X�j��x�l����(o��0��p��l��p����(q�����t��а�t����u���xv��<��v��X��v����x��Ա�x���8y��H��y��t�z����hz�����z��زX{����{��0�x|��\��}����~��������X��� �(���P�h���l�؃����������������ܴX����x���X�����t������X�����ȇ�������؈��8�����������X���̶�����(����h���$�����@�؍��X���l����������з����X����Ȑ��4�(���`�������ؑ�������ȸX����������� �x���X�����t�8���������̹����ؕ�������P�����l�(���������ĺ�������4�Ș��P�X���|�������X���ܻ��������4�x���`����������ܼX�����zRx�$����@FJw�?:*3$"D�?���?\Ё��ṕ��"������MH 
A����<E�v�<���HOH�D���4B�R�B �B(�A0�A8�G�t
8A0A(B BBBA$zRx��������,`~��5p��������QH ~
AL�L���iF�B�A �A(�D0S
(D ABBFU
(A ABBEL�l���iF�B�A �A(�D0S
(D ABBFU
(A ABBEL@����iF�B�A �A(�D0S
(D ABBFU
(A ABBE8������F�L�D �D(�D@a
(A ABBK(�@���mE�D�G0P
AAA�����FH�����F�B�B �E(�A0�D8�DPL
8A0A(B BBBBXd���RH D
At����)E�W
DD�����%0�ԉ���F�A�D �G@U
 AABE������E�M�8�D����F�B�A �D(�D0�
(D ABBA4���]H h
HG
ATH���nE�Y
B p����lE�D F
DA,���E�F�D �
AAE�؎��,����F�K�A ��
ABDzRx� ���$�z��<`����D u
G(Xԏ��|E�A�D0e
AAA�(���jH \
A�|���jH \
A0�А��TE�D�J U
CADWDD������H0�
A����RDb
JI
A(,�����A�K
DM
CF
AHXt����B�E�B �E(�A0�C8�Gp�
8A0A(B BBBG zRx�p������(1y��H���fF�B�E �B(�A0�A8�D` 
8A0A(B BBBA((���QM�A�D �wAB(T8���QM�A�D �wAB(�l���QM�A�D �wAB(�����QM�A�D �wAB(�Ԗ��QM�A�D �wAB(���QM�A�D �wAB(0<���QM�A�D �wAB(\p���QM�A�D �wAB(�����QM�A�D �wAB(�ؗ��QM�A�D �wAB(����QM�A�D �wAB(	@���QM�A�D �wAB(8	t���QM�A�D �wAB(d	����QM�A�D �wAB(�	ܘ��QM�A�D �wAB(�	���QM�A�D �wAB(�	D���QM�A�D �wAB(
x���QM�A�D �wAB(@
����QM�A�D �wAB(l
��QM�A�D �wAB(�
���QM�A�D �wAB(�
H���QM�A�D �wAB(�
|���QM�A�D �wABL�����B�E�B �B(�A0�D8�J��
8A0A(B BBBHHl@���7F�E�B �B(�A0�A8�D��
8A0A(B BBBA �4����E�GP�
AA �����E�GP�
AA@̨��RE�K�f
AII�E�[�A��E�[�A�D��	8X��oF�B�A �D(�G@q
(A ABBEzRx�@����$Ms�����(���}E�A�D q
DAH
4���	 
0���bE�D l
AA@@
|���F�B�B �D(�A0�Dp�
0A(A BBBK zRx�p�����(ar�� �
 ���qE�A
JD
E8�
|���PF�N�B �H(�H0�(O BBB(����E�A�G0}
AADzRx�0�� �q��(xD���{E�H�G@Z
AAA����������	(������E�J
M������
E����	���AAH(���.E�c
A(D����E�H�D X
DAAp����AAK(�����{E�H�D G
DAA���2H]
H����?Hf
L�,���7Hc
GP���LE�c
H(����7Hc
GD����7Hc
G4`����E�D�J X
CAA~
FAA,�4����A�C
F���F���
J(����.E�A�D@9
AAKzRx�@�� 	o��@$����A�A�G m
DAEx
DACG
DAA4h$���E�K�D B
CAFD
FAA(�|��E�H�D }
DAA ����;E�d
GA
E(����_E�A�J u
DAF( ��\E�K�D h
CAP8HT���F�B�A �A(�J0h
(D ABBK8�����F�B�A �A(�J0h
(D ABBK<�|��>F�D�B �A(�A0��
(A BBBCP|���F�A�A �D0Q
 FABJ�
 DABAE
 DABAzRx�0���$�l��(�����E�D�G c
GAE,�h���F�K�A �\
FBJ,�����F�A�A �q
ABD,x���F�A�A �q
ABD,D���F�A�A �q
ABD(t����E�A�G0l
DAB(�<���E�A�G0l
DAB(����eE�M�D l
DAI(�$��ZE�D�D m
AAAL$X���F�B�B �B(�A0�A8�D�.
8A0A(B BBBF0t����F�A�A �G0J
 DABA(�4��QE�A�G0u
CAF(�h��QE�A�G0u
CAF8����F�B�A �A(�G@m
(D ABBA8< ���F�B�A �A(�G@m
(D ABBA(x����E�A�G0o
DAG�8��`H U
Cg
A0�x���F�A�D �D0g
 DABA�����E�~
JX��Q8(d���F�B�A �A(�G@u
(D ABBA@d����F�B�B �A(�A0�G@�
0D(A BBBA8�����F�B�A �A(�G@u
(D ABBA0����F�A�D �D0g
 DABA8t���F�B�A �A(�G@u
(D ABBA@T����F�B�B �A(�A0�G@�
0D(A BBBA@�����F�B�B �A(�A0�G@�
0D(A BBBA@�0���F�B�B �A(�A0�G@�
0D(A BBBA8 ����F�B�A �A(�G@w
(D ABBAH\`��F�B�B �B(�A0�A8�GP�
8A0A(B BBBA,�4���F�H�A �Y
ABA8�����F�B�A �A(�G@u
(D ABBA(��>E�!4H�	0HD��F�A�A �G0e
 DABA|�� ����E�G �
AK(����E�D�D0�
AAE0����F�A�D �D0�
 AABA�e��H($�fF�B�B �B(�A0�A8�Dp�
8A0A(B BBBD\tH��F�E�B �B(�A0�A8�G�E�P�U�C�p
8A0A(B BBBA$zRx��������,2d����&E�`,��E�PH��AAHd��WE�t
A���AAK���2H]
H��AHs
A �H�cE�t
OU
A���2H]
H��AHl
H(0���E�H�D0t
AAI\\��gB�B�B �B(�A0�A8�G�T�V�P�C�K
8A0A(B BBBA$zRx��������,Rb���T�P�, L��F�A�A �
ABFHP�>F�B�B �B(�A0�D8�D`�
8A0A(B BBBA(��wF�A�G �x
ABG(�T�wF�A�G �x
ABG0����F�A�G �G0a
 AABF8($��F�B�A �D(�J0`
(D ABBH<d���F�H�B �A(�A0�s
(A BBBD,�h�'F�A�A ��
ABA�h�H x
H(���}E�M�D ~
DAA P�gH^< ����	DP �����R�B�B �B(�A0�A8�G@�8A0A(B BBB� ���(Q�O� � (����A�G �
AA� ����>E�e
AL� ���R�B�B �B(�A0�D8�D@�8I�0H�(B� B�B�B�D!����6HU
A0`!����eE�A�G g
DAGQGH �!��`E�D P
AA �!$���\E�D L
AA(�!`����F�A�A �|ABH"����F�B�B �B(�A0�A8�DP�
8D0A(B BBBG(T"H����E�D l
AJYF8�"�����F�B�A �D(�G@�
(A ABBI8�"����F�B�D �D(�I@�
(A ABBJ$�"d���IE�A�D0yDA8 #�����F�B�B �A(�A0�m(D BBB\#���E�
OzRx�� �\���# ���	�#����#(���&E�`�#<���E�P($@���rE�K�D k
DAA8$����AAKT$����AHl
Hp$���:He
H�$�:He
H(�$����E�H�D I
DAA �$�����E�G I
DG,�$���F�A�A �~
ABG (%����E�D q
AE(L%���E�A�D0�
AAF(x%d��tE�M�D r
DAA�%����H �
A�%���
�%���	8�%���fF�I�A �A(�D0/
(D ABBA8(&���	F�E�A �K(�IP�
(A ABBA0d&���*F�A�A �D@�
 AABA8�&���sF�B�E �A(�A0�Y(D BBB�&���kH |
D(�&	���E�A�G0�
DAK'�	��AAK(8'�	��]F�H�D �r
DKEd'
��2H]
H�',
��2H]
H(�'P
��_E�A�J o
FAJ�'�
��AAH(�'�
���E�A�G0U
AAA((�
���E�A�G0U
AAA<(p��LHf
A0X(����F�A�A �D@$
 AABD�(
���H�(�(����E�H�D��
AAD�(d��	8�(`���F�E�A �D(�D@�
(D ABBK�W��(<)���E�H�D0t
AAI h)����E�G J
DF,�)0���F�H�D �C
ABA�)���<E�c
A,�)����F�A�A �
ABF*T��[E�JL$*���F�B�B �B(�A0�D8�F��
8A0A(B BBBJ$zRx��������,�U��`�*���F�B�B �B(�A0�D8�F���E�E�B�I�c
8A0A(B BBBJP+X��QF�B�B �A(�D0�Fp�xH�FxAp[
0A(A BBBH��T��|+P���H��+���	(�+����E�H�D0�
AAE(�+���E�A�D@x
AADwT��,x��AAH 0,|���E�G ^
AEzRx� � T�� �,����E�h
KR
F4�,t���E�K�D x
FAEI
CAA,�,���oF�A�D �C
ABA(- ��tF�A�K �s
ABA<-p ��OHe
E(X-� ���E�H�D x
AAE�-!��bE�{
E(
�R���-H!��.E�c
A�-\!���H�(�-#���E�H�D0�
AAE.�#��	 ,.�#���E�K l
AA@P.l$���F�B�B �D(�K0�IP
0A(A BBBD(�.�%���E�H�D0�
AAE�.�&��	(�.�&���E�H�D0�
AAE/L'��	 /H'��E�D _
AG�WQ��L/ (��	(`/(��E�A�D@p
AAD(�/�(���E�H�D0�
AAE�/�)��	(�/�)��E�A�D@p
AAD(�/�*���E�H�D0�
AAEH$0H+���F�I�B �B(�A0�A8�D@�
8D0A(B BBBF,p0�+���F�K�A �H
ABA �0l,��E�D _
AGt�O��(�0D-��E�A�D@p
AAD1.��AAK  1.���E�K t
AK D1�.���E�K t
AKh1/��bH O
A(�1h/��mE�K�D v
DAA(�1�/��mE�K�D v
DAA�1�/��)A�b
AL�10��]F�I�B �B(�A0�A8�D�
8A0A(B BBBAH22��AAKd22��)A�b
A4�2,2���E�A�Q _
DAED
FAA�2�2��AAH�2�2��.E�c
A8�2�2��xF�I�A �A(�D0T
(D ABBA,3 3���H ^
JH3�3��AAMd3�3��WHl
F�34���H X
H�3�4���H Y
G�35��:He
H(�385���E�A�J@�
AAG4�5��AAM4�5��.E�c
A846��AAK<T46���F�I�B �A(�A0�k
(D BBBA(�4x6��~E�K�D p
CAF�4�6��.E�c
A4�4�6��lE�H�D z
DAHI
DAA57��2H]
H05<7��:He
HL5`7��.E�c
A(h5t7��kE�K�D p
CAF�5�7��.E�c
A,�5�7���F�A�A ��
ABK�5l8��JHc
G8�5�8���F�H�A �D(�D0T
(D ABBD869���H \
AT6�9��dH^
J\p6�9���F�B�E �B(�K0�D8�D�x�G�\�A�
8A0A(B BBBE8�6<=��wF�B�A �A(�FP�
(A ABBFL7�>��'F�B�B �A(�A0�q
(A BBBDf
(C BBBIL\7`?��'F�B�B �A(�A0�q
(A BBBDf
(C BBBIL�7@@���F�B�B �B(�A0�A8�D�c
8A0A(B BBBAL�7�A���F�B�B �B(�A0�A8�D�c
8A0A(B BBBA,L8�C���F�A�A ��
ABB,|8@D���F�A�A ��
ABK,�8�D���F�A�A ��
ABK,�8�E���F�A�A ��
ABK9 F���	L��	,9�O��	(@9�O���E�H�D0�
AAEl9�P��	�9|P��	�9xP��	8�9tP��IF�B�A �A(�Dp�
(A ABBK�9�R��7E�c
AD:�R��_F�A�A �D���G�F�A�e
 AABGzRx�����$7F��`|:�T��@F�B�B �B(�A0�A8�G�*�E�E�B�b�{
8A0A(B BBBF,�:lX���F�A�A ��
ABD;Y���H�,;�Z��	@;�Z��	T;�Z��	(h;�Z���E�H�D0�
AAEH�;X[���F�B�L �B(�G0�A8�Gpk
8A0A(B BBBFL�;�]��pF�B�B �B(�A0�A8�G� I� �
8A0A(B BBBC`0<�^��eF�I�B �B(�A0�A8�D@�
8D0A(B BBBGc
8A0A(B BBBE,�<�_���F�K�A �Z
ABA$�<�`��GA�G�D uDA`�<�`���F�I�B �B(�A0�A8�D@�
8D0A(B BBBGQ
8A0A(B BBBE,P=�a���F�K�A �H
ABA8�=�b��aF�B�A �A(�D@|
(A ABBH0�=�c��F�H�A �D@�
 AABA�=�d��AAK>�d��+HY
E(>�d��/H]
ED>�d��BH]
E`>�d��.H\
E|>e��AAH(�>e��bE�A�J o
DAA�>Xe��.E�c
A�>le��jHq
GH
E8?�e���F�B�D �D(�J0K
(D ABBA<?f��.E�c
A(X?$f���E�H�D |
AAE(�?�f���E�H�D x
AAE�?�f��AAK �?�f��?A�j
EE
E�?g��HI @g��?A�j
EE
E,@0g��HI(D@8g��^F�K�A �k
ABAp@lg��(�@hg��^F�K�A �k
ABA�@�g��(�@�g��_E�K�D h
DAA�@�g��WE�e
FAh��AHm
G(ADh��xE�@
AHHA�h���F�B�B �B(�A0�A8�N`Y
8A0A(B BBBA�Aj��.E�c
A,�Aj���F�A�A ��
ABE(�A�j���F�D�D �xAB(B k���F�D�D �xAB8B�k��AH\
E<TB�k��BF�D�B �A(�A0��
(A BBBE@�B�l���F�D�B �A(�A0�DP(
0A(A BBBFH�BTn���F�D�B �B(�A0�A8�D`
8A0A(B BBBF8$Cp���F�B�A �A(�D@
(A ABBG,`C�q���E�p
Ku
Ku
Ku
K(�Cls��SE�M�D d
DAA�C�s��oE�^�C�y��	�C�y��	D�y��MH 
A0 Dz���E�o
DY
GT
DT
DT0TD�z��{F�A�D �I`c
 AABE0�D�|���F�F�D �D@�
 AABH0�D�}��{F�A�D �I`c
 AABE8�D���
F�E�A �F(�DP
(A ABBG8,E�����F�B�A �D(�Ip�
(A ABBC8hED����F�D�H �P
FBFA
CBA0�EȄ���F�A�A �D0�
 AABE0�Et����F�A�A �D0�
 AABETF ����B�B�E �K(�A0�K8N@O8A0L
(A BBBOt8N@O8A0dFX���xFT���(�FP���E�A�D �
DAE�F4���(�F@����E�D�D0}
AAD�F����HN,G����E�H
H����H��
F(@G����TE�E�G ]
AAH(lG���E�A�G ~
JJI�G����9L�T
A(�G؊���F�A�A �|FB�G<���LHd
H �Gp���dE�Q v
AA H����H0�
HzRx�0S8��hH����H0�
HL+8��4�Hd���JB�E�A �D��
 AABB��7���Hh����Hd���0I`���E�F�G N
AAF�FA(@I<����E�A�D0�
AAA(lIБ��*E�A�G@s
AAF@�IԒ���F�B�B �D(�A0�Ip�
0A(A BBBG@�I0���aF�B�B �A(�D0�Ip{
0A(A BBBE8 J\���/F�B�A �D(�IpW
(A ABBE\JP���6HU
A,xJt����F�H�A �r
ABD8�J$���QF�B�A �D(�Ip�
(A ABBD�JH���>E�`
AHKl���tF�B�E �K(�A0�^
(A BBBJ|8N@O8A0(LK�����F�K�A �z
ABIxKT����KP���(�KL���2E�H�D AA(�K`����E�A�DPe
AAA8�K��?F�E�A �C(�D@�
(D ABBA@4L���F�E�B �D(�A0�DP�
0D(A BBBA(xLD���E�A�D0�
AAA(�L8����E�A�D W
AAE0�L�����F�D�D �DP�
 AABA8MX���F�E�A �D(�IP�
(A ABBD@M,���AAK \M0����E�D h
AA �M�����E�D h
AF �M8����E�D h
AF �M��E�D j
AD �MP����E�D j
AD Nܬ���E�D j
AD(4Nh����E�A�D J
AAA `Ṋ���E�D i
AE�NX����E��(�N(����E�A�DPe
AAA8�N����?F�E�A �C(�D@�
(D ABBA@O�����F�E�B �D(�A0�DP�
0D(A BBBA,PO���$F�D�D ��
ABA8�O���*F�E�G �D(�DP�
(A ABBB�O���AAK �O����E�D h
AA �O�����E�D h
AF  P����E�D h
AF DP�����E�D j
AD hP$����E�D j
AD �P�����E�D j
AD(�P<����E�D�D0r
AAG8�P��F�E�G �D(�D@q
(A ABBG(Qd����E�D�D0n
AACDQ(����E��dQ��	xQ��	4�Q���E�K�D W
FAFD
CAA,�Qh����F�A�K ��
ABA8�Q(���QF�E�K �A(�I@�
(A ABBK@0RL���@F�B�B �D(�A0�G@�
0A(A BBBAtRH���RT��(�R`���B�K�A �|
ABK�R����R���L�R����F�B�B �B(�K0�D8�I�[
8A0A(B BBBA4@S���E�D�D P
KCED
IAELxS����F�E�G �D(�D0P
(J CBBED
(F ABBE,�SD��)F�A�H ��
FBD(�SD���E�D�D `
DAF4$T����E�A�D0W
AAEF
AAA(\T����E�D�D V
DAA,�TT��F�D�D ��
ABA4�T4���A�A�D0S
DABC
DAA0�T����F�D�F �G@X
 AABA,$U����E�G
M�����7
H$zRx�������,C+��$�U���bA�i
FF
JF
A<�U$��(F�B�L �A(�A0��
(A BBBK(�U���E�H�G D
DAA,$V����F�H�A �R
ABATV��sF�H�A �pQS*��CAB�VL��AAM4�VP���E�K�D H
FAED
CAA(�V����E�H�D z
AAEW,��2H]
H ,WP���E�D P
DC4PW���aE�H�D i
DDND
FAA(�W���BE�K�D c
DAA$�W���HS
EK
EK
E(�W���TE�A�N h
DAGX���2H]
H$X���9Hd
H(@X����E�H�D0c
AAA(lX����E�H�D0c
AAA8�X���F�B�K �D(�D@\
(D ABBA(�X����E�K�G s
DAA4Y����E�K�D D
CADD
FAAD8YT��F�D�K �h
ABH`
FBHF
CBA�Y��AAK�Y ��dE�t
N�Yt��dE�t
N �Y���tE�|
OF
A,�Y$���F�A�A �M
ABA,(Z����E�C
D��J��D�j
D(XZ��OA�M�D d
DAA(�Z(��kB�R�F �z
ABA �Zl��DE�h
KF
A4�Z����E�A�D J
GALD
FAA [��tE�|
OF
A(0[\���E�D�D |
DAA,\[���+E�H�D AA �[��A�D`�
AA(�[��EE�A�Dp
AAA@�[���F�E�B �D(�A0�DP�
0D(A BBBA8 \L�?F�E�A �C(�D@�
(D ABBA@\\P��F�E�B �D(�A0�DP�
0D(A BBBA,�\��F�D�D ��
ABA8�\��JF�E�G �D(�DP�
(A ABBB]��AAK(]��RE�o
A D]��E�D j
AD h]��E�D j
AD �]�E�D j
AD �]��E�D h
AF �](�E�D h
AF �]��E�D j
AD ^@�E�D j
AD @^��E�D j
ADd^X���6E�Y
JI4�^x���>F�D�F �S
EBFFAB(�^�����E�D�D@~
AAC@�^T���PF�B�E �A(�D0�Fp�
0A(A BBBAL,_`��� F�B�B �E(�D0�A8�F��
8A0A(B BBBD|_0���tE�\�_�����_����HO(�_�����E�D�D ~
DAH$�_�\E�D�G0FDA�Q� ��4`���LH CzRx� � ��x`$���BH k
A�`X���>H e
A�`|���H��``��	�`\��HO�`d��Dap���F�B�A �A(�DP�XG`IXAPg
(A ABBAzRx�P����$���$�a����E�C
I����
A$�a����E�C
I����
A(�a����A�I�D0�
DAA$b��OE�G�G wCAzRx� �� ���(\b���B�H�D �[
FBG(�b����E�D�D@~
AAA�b���	�b���HO�b���(�b��ME�A�N f
DAA( c,��ME�A�N f
DAALcP��2Hi$dcx��<A�H�D iDA �c����E�Q v
AC0�c����B�K�D �GPd
 AABH8�c���IF�E�E �D(�K0�^(A BBB8 d���IF�E�E �D(�K0�^(A BBB,\d����F�J�D �^
ABKH�d ��0F�B�B �B(�A0�C8�GP�
8A0A(B BBBF0�d���F�D�C �D`�
 AABI(e����E�E�G@�
AAC08e	��F�A�D �GPw
 AABC@le
���F�E�B �D(�C0�G@�
0A(A BBBB0�el��1F�A�D �G0�
 AABF0�ex��YF�A�D �G0�
 AABHf�
��(HX00f�
��(B�A�A �G0E
 AABDHdf����F�I�A �A(�D0d
(D ABBFD(A ABB�f��LHu
CG�f<��LHu
CG�fl��DHl
DGg���AAM,g���AAMHg���AAKdg���qH0^
A�g��qH0^
A�gp��sH `
A�g���AAH(�g����E�A�G0a
AAAh<��2H]
H(h`���E�D�D |
DAAHh���7Hc
Gdh���2H]
H0�h���F�A�A �G0v
 AABGdUs���h���GHe
KI
A�h���2H]
HLi����F�B�A �A(�D0k
(D ABBFD
(G DBBA4Ti8��dE�A�D x
DAII
DAA�ip��GHe
KI
A �i���QE�t
GK
A�i���6A�\
A�i��Cd[j8��6A�\
A` j\��:B�E�B �B(�D0�A8�D`
8A0A(B BBBIl
8F0A(B BBBE zRx�`������(���8�j��rF�B�A �A(�F0A
(D ABBF�jD��8k@���F�E�A �A(�DP�
(A ABBA(Hk����E�C�G0r
AAE(tkX��kE�A�N |
AAA(�k���ME�A�Q k
DAA(�k���xE�J�D J
DAA�k��QHq
GG
EHlT��!F�H�B �B(�K0�A8�GP
8D0A(B BBBK4dl8���E�A�D v
DAKk
DAA�l���lH c$�l����E�A�D0�AA(�l���kE�A�N |
AAA�m���B�B�B �B(�A0�A8�DP�
8A0A(B BBBDd
8C0A(B BBBHI
8A0A(B BBBEI
8A0A(B BBBE,�m����F�A�D �U
FBA(�m ���F�A�D ��CE$�m����E�A�D0�AA$ n���E�A�D0�AA(Hn����E�D�D@�
AAG8tnH�� F�B�A �A(�D@{
(A ABBA b���8�n*��CF�D�A �A(�G@�
(A ABBH8o,+��F�B�A �A(�D0q
(D ABBH8<o,��0F�I�A �A(�D0N
(D ABBD(xo2���E�A�G d
DAJ(�ox2���E�A�G0�
AAI(�o,3���E�A�G0�
AAI �o�3���E�G �
AH4 pl4���F�A�A �~
ABGqAB,Xp5���F�A�A ��
ABE@�p�5��\F�B�E �A(�D0�I@�
0A(A BBBJX�p�7���B�E�E �B(�D0�A8�DP�
XD`BhApP�
8D0A(B BBBA((qt:��rF�A�D �^
NBGTq�:��&E�\(pq�:��rF�A�D �^
NBG�q0;��&E�\H�qD;��
B�B�E �B(�D0�D8�F`�
8A0A(B BBBEr?��r?��,,r?��gE�M�D 
AAA\r@R��	(pr<R���E�A�D0�
AAF0�r�R��=F�A�A �D0i
 DABD�r�S��(�rT���E�A�D 
AAEs|T��AAK,s�T��iH V
AHs�T��QHq
GG
E(hsU��ZF�A�D �k
DBL8�sHU���F�B�D �A(�D@�
(A ABBA,�s�U���F�A�A �~
ABG t�V���E�D �
AH8$tXW���F�B�A �D(�G0F
(D ABBM(`t�W���E�A�D 
AAE�t`X��vL�W�t�Y���t�Y���t�Y��	�t�Y��	�t�Y��	u�Y��	0$u�Y���B�D�F �D0w
 AABE(XuDZ���E�A�D@}
AAG�u�Z��	(�u�Z���E�A�G@w
AAAH�uh[���F�B�B �B(�A0�A8�D`w
8A0A(B BBBELv�]��aE�C
HY
GF
JY
GY
GY
GY
GY
AY
A(`v�^���E�A�G@w
AAA�v�_��}D u
G�v�_��	�v�_��AAH(�v�_���E�H�D x
AAEwH`��AAK wL`��>Hl
E(<wp`���E�H�D E
DAEhw�`��AAK�w�`��1H_
E�wa��AAK�wa��1H_
E�w4a��7Hc
G�wXa��8E�m
Ax|a��GHe
KI
A(0x�a��jF�A�K �w
ABA4\x�a���A�A�G T
ADNk
AAE �xXb��LE�j
QF
A�x�b��:Hh
E(�x�b��xF�A�K �u
ABA y�b���E�G b
AA�L��,8ytc��zF�A�K �B
ABAhy�c��QHq
GG
E(�yd���F�D�A �z
ABH(�yxd��UE�J�D w
DAA(�y�d���E�H�D x
AAEze��GHe
KI
A,z@e��7Hc
GHzde��2H]
Hdz�e��2H]
H�z�e��>Hl
E�z�e��:Hh
E�z�e��2H]
H�zf��QHq
GG
E�zXf��.E�c
A({lf���E�H�D x
AAE <{�f��\E�D
GF
A4`{g���E�H�D G
DACI
DAA�{dg��GHe
KI
A,�{�g���F�A�A �p
ABA�{�g��:He
H|h��.E�c
AL |,h���F�B�L �E(�A0�D8�I��
8A0A(B BBBGp|�m���E�l(�|0u��_E�G�D@G
AAA�|du���	L��	�|8��	(�|4���E�H�D0�
AAFH}���F�B�L �B(�A0�A8�GP�
8A0A(B BBBG4`}́���E�H�D E
DAEK
ADE(�}4����E�A�D0U
AAA,�}�����F�A�A ��
ABB8�}X����F�I�A �A(�DPD
(A ABBA80~���F�B�D �K(�I`�
(A ABBKl~����7E�c
A(�~����eE�M�D l
DAI�~��6HU
A�~���E���~���	���HR(����E�H�D0�
AAFD؈��HN(\���E�H�D0�
AAE�����5H l�̉��AAH�Љ��.E�c
A���AAK4����E�K�D h
CAHn
AAA(,�P���dE�K�D m
DAALX������F�I�A �A(�D0[
(D ABBGD
(A ABBE4����fE�A�J t
DAGI
FAA4����{E�K�D x
FAEI
CAA8�d����F�B�D �D(�J0C
(D ABBA(T�����tF�A�K �s
ABA�����OHe
E(��@���jF�A�K �u
ABAȁ����OHe
E(�����jF�A�K �u
ABA�����OHe
E(,�0���_E�K�D h
DAAX�d���OHe
E(t�����_E�K�D h
DAA��̍��OHe
E(�����NE�K�D o
DAA�$���2H]
HL�H����F�B�B �B(�A0�A8�G@@HHP[8A0A(B BBB(T������E�H�D @
AAE(�����F�D�A �z
ABH��P���QHq
GG
E(̃�����E�H�D x
AAE(����E�H�D x
AAE8$�X���cF�B�A �A(�GPm
(A ABBD8`������F�D�A �D(�DPe
(A ABBBH������F�B�B �B(�A0�D8�D@?
8D0A(B BBBA,������F�A�A ��
ABE(�4���\E�M�D l
DAID�h���:E�c
H`�����6HU
A|�����>E�`
A��ԕ��uE�]��8���	Lȅ4���&F�I�A �A(�D0k
(D ABBGQ
(A ABBI(�����E�H�D0n
AAAD�����AAH`�����.E�c
A(|�����dE�K�D m
DAAL�����F�I�A �A(�D0[
(D ABBGQ
(A ABBI(��ԛ���E�H�D x
AAE($�8����E�H�D x
AAE(P������E�H�D x
AAE|����AAK4�����{E�K�D x
FAEI
CAA8ЇL����F�L�D �A(�G0~
(D ABBA(�����kF�A�K �s
ABA(8���jF�A�K �u
ABAd�(���GHe
KI
A(��X���jF�A�K �u
ABA������GHe
KI
A(Ј̞��_E�K�D h
DAA�����2H]
H(�$����F�D�A �z
ABHD�����QHq
GG
E8d�ȟ��cF�B�A �A(�GPm
(A ABBDH�������F�B�B �B(�A0�D8�D@?
8D0A(B BBBAH������F�B�B �B(�A0�D8�D@?
8D0A(B BBBA,8�����F�A�A ��
ABJh�����6HU
A(��ؤ��]E�M�D i
DAD�����E��̊���	(������E�H�D0�
AAE4������E�H�D E
DAEK
ADE D�(����E�D q
AE_���8|������F�B�A �A(�DP:
(A ABBB��t���̋����AAH�����.E�c
A�����JHc
G �̫��SHi
E4<�����E�H�D y
DAIW
DAE(t�x����E�A�D0U
AAA������AAK(�����MF�D�A �y
ABA(�$���MF�D�A �y
ABA(�H���MF�D�A �y
ABA(@�l���MF�D�A �y
ABA l�����E�G`�
AA(��|����E�J�D V
DAA,�����F�A�A ��
ABB@�����2F�B�B �K(�D0�I`r
0A(A BBBD0�|���KE�m
A(L�����eE�M�D l
DAIx��6HU
A,�����E�H�D �COĎ����	(؎��E�H�D0�
AAEL�����	F�I�B �B(�A0�A8�G�F
8A0A(B BBBA,T�x����B�K�A �C
ABE����&E�`$������BE�A�G \JJȏ$���7E�c
A�H���AAK(�L���_A�K�D e
GAE0,�����ME�D�J U
CADZAA$`�����WE�D�J ~DA4��Ը���E�D `
GH@
FJV
DHpd��,Ԑx����F�A�A ��
ABB����QHq
GG
E$�X���QHq
GG
E@D������F�B�B �K(�D0�IP�
0A(A BBBA\��T���F�B�B �B(�D0�D8�F���J�N�A�c
8A0A(B BBBAxgi�8���WF�B�A �A(�G`�
(A ABBE(8����]E�M�D i
DADd�H���6HU
A��l����E�z�����	(������E�H�D0n
AAA(ܒp���E�H�D0�
AAE�4��AAH($�8��_E�K�D h
DAALP�l��F�I�A �A(�D0[
(D ABBGQ
(A ABBI4��<���E�K�D x
FAEI
CAA8ؓ����F�L�D �A(�G0~
(D ABBA(����tF�A�K �s
ABA@�<��OHe
E(\�p��_E�K�D h
DAA�����OHe
E(������F�D�A �z
ABH(ДL���E�H�D x
AAE(������E�H�D x
AAE8(���cF�B�A �A(�GPm
(A ABBDd�H��.E�c
AH��\���F�B�B �B(�A0�D8�D@?
8D0A(B BBBA̕���dHq
GG
E,�0���F�A�A ��
ABJ����6HU
A8����mE�PT�H��h�D��	(|�@���E�H�D0�
AAF(����mE�K�D m
DAALԖH��F�I�A �A(�D0[
(D ABBGQ
(A ABBI$���AAK(@���jF�A�K �u
ABAl�`��GHe
KI
A(�����jF�A�K �u
ABA�����2H]
H,ԗ����F�A�A ��
ABBH�����F�B�B �B(�A0�D8�D@?
8D0A(B BBBAP���7E�c
A(l�@��eE�M�D l
DAI�����QHb
A�����aE�IԘ��@E�b
A�<��OE�E�p��HO$�x��	8�t��HOHP�|���F�B�B �B(�A0�A8�D`=
8A0A(B BBBG�� ��AAK��$��2H]
H(ԙH��bF�G�D �t
ABH(����TE�A�N h
DAG(,����RF�A�D �q
ABAX����GHe
KI
Ax�$��2H]
H��H��2H]
H��l��:He
H̚���GHe
KI
A4�����E�K�D B
FACI
CAA$���<E�c
A(@�<��sE�A�J p
DAA(l����sE�A�J p
DAA�����]Hg
A0��(���F�A�D �D0\
 DABA0�����F�A�D �D0\
 DABA�@��AAK(8�D��bE�A�N s
DAD(d����RF�A�D �q
ABA(�����RF�D�A �~
ABA,������F�N�A �u
ABA�m��L��<E�c
A(�p���E�A�G@{
AAA0H�����F�A�A �D@l
 AABD(|�@��WF�A�G �s
ABD(��t��WF�A�G �s
ABD(ԝ���WF�A�G �s
ABD(����WF�A�G �s
ABD@,��@F�B�B �A(�A0�Dp�
0A(A BBBD4p��^F�A�C �\
DBLbAB��4�6HU
A(ĞX��E�I�R U
FOEGNU����`�%d�H&��@&r�8&z�(&�� &���&���&��������0&����&��������&��&�& �&0�&:��&I��&S��&[��&k��&y��&���&���&�����&��!b�@5!n��O!w��[!�� d!��s!��@�!$���!8��!P��!g�0�!}�0�!2���!����!���!���!����! � I!1�I!��t�y�~���������!����p�!�`�!u0
!��!��!D�5!��@!%�X!��p!��l!!�}!�@�!�p�!�@��!�p�`�!�L�L�L�L�L�LAMh9
��P�%X�%���o`�mH
WM(�%�_��h�	���o���o�����o�o����o���%�9�9�9�9�9�9:: :0:@:P:`:p:�:�:�:�:�:�:�:�:;; ;0;@;P;`;p;�;�;�;�;�;�;�;�;<< <0<@<P<`<p<�<�<�<�<�<�<�<�<== =0=@=P=`=p=�=�=�=�=�=�=�=�=>> >0>@>P>`>p>�>�>�>�>�>�>�>�>?? ?0?@?P?`?p?�?�?�?�?�?�?�?�?@@ @0@@@P@`@p@�@�@�@�@�@�@�@�@AA A0A@APA`ApA�A�A�A�A�A�A�A�ABB B0B@BPB`BpB�B�B�B�B�B�B�B�BCC C0C@CPC`CpC�C�C�C�C�C�C�C�CDD D0D@DPD`DpD�D�D�D�D�D�D�D�DEE E0E@EPE`EpE�E�E�E�E�E�E�E�EFF F0F@FPF`FpF�F�F�F�F�F�F�F�FGG G0G@GPG`GpG�G�G�G�G�G�G�G�GHH H0H@HPH`HpH�H�H�H�H�H�H�H�HII I0I@IPI`IpI�I�I�I�I�I�I�I�IJJ J0J@JPJ`JpJ�J�J�J�J�J�J�J�JKK K0K@KPK`KpK�K�K�K�K�K�K�K�KLL L0L@LPL`LpL�L�L�L�L�L�L�L�LMM M0M@MPM`MpM�M�M�M�M�M�M�M�MNN N0N@NPN`NpN�N�N�N�N�N�N�N�NOO O0O@OPO`OpO�O�O�O�O�O�O�O�OPP P0P@PPP`PpP�P�P�P�P�P�P�P�PQQ Q0Q@QPQ`QpQ�Q�Q�Q�Q�Q�Q�Q�QRR R0R@RPR`RpR�R�R�R�R�R�R�R�RSS S0S@SPS`SpS�S�S�S�S�S�S�S�STT T0T@TPT`TpT�T�T�T�T�T�T�T�TUU U0U@UPU`UpU�U�U�U�U�U�U�U�UVV V0V@VPV`VpV�V�V�V�V�V�V�V�VWW W0W@WPW`WpW�W�W�W�W�W�W�W�WXX X0X@XPX`XpX�X�X�X�X�X�X�X�XYY Y0Y@YPY`YpY�Y�Y�Y�Y�Y�Y�Y�YZZ Z0Z@ZPZ`ZpZ�Z�Z�Z�Z�Z�Z�Z�Z[[ [0[@[P[`[p[�[�[�[�[�[�[�[�[\\ \0\@\P\`\p\�\�\�\�\�\�\�\�\]] ]0]@]P]`]p]�]�]�]�]�]�]�]�]^^ ^0^@^P^`^p^�^�^�^�^�^�^�^�^__ _0_@_P_`_p_�_�_�_�_�_�_�_�_`` `0`@`P```p`�`�`�`�`�`�`�`�`aa a0a@aPa`apa�a�a�a�a�a�a�a�abb b0b@bPb`bpb�b�b�b�b�b�b�b�bcc c0c@cPc`cpc�c�c�c�c�c�c�c�cdd d0d@dPd`dpd�d�d�d�d�d�d�d�dee e0e@ePe`epe�e�e�e�e�e�e�e�eff f0f@fPf`fpf�f�f�f�f�f�f�f�fgg g0g@gPg`gpg�g�g�g�g�g�g�g�ghh h0h@hPh`hph�h�h�h�h�h�h�h�hii i0i@iPi`ipi�i�i�i�i�i�i�i�ijj j0j@jPj`jpj�j�j�j�j�j�j�j�jkk k0k@kPk`kpk�k�k�k�k�k�k�k�kll l0l@lPl`lpl�l�l�l�l�l�l�l�lmm m0m@mPm`mpm�m�m�m�m�m�m�m�mnn n0n@nPn`npn�n�n�n�n�n�n�n�noo o0o@oPo`opo�o�o�o�o�o�o�o�opp p0p@pPp`ppp�p�p�p�p�p�p�p�pqq q0q@qPq`qpq�q�q�q�q�q�q�q�qrr r0r@rPr`rpr�r�r�r�r�r�r�r�rss s0s@sPs`sps�s�s�s�s�s�s�s�stt t0t@tPt`tpt�t�t�t�t�t�t�t�tuu u0u@uPu`upu�u�u�u�u�u�u�u�uvv v0v@vPv`vpv�v�v�v�v�v�v�v�vww w0w@wPw`wpw�w�w�w�w�w�w�w�wxx x0x@xPx`xpx�x�x�x�x�x�x�x�xyy y0y@yPy`ypy�y�GA$3a1h9��GA$3p1113����GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113`���GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�h�GA+GLIBCXX_ASSERTIONS
GA*FORTIFY`���GA+GLIBCXX_ASSERTIONSopenssl.so-3.4.4-3.el8.x86_64.debug�F���7zXZ�ִF!t/���*]?�E�h=��ڊ�2N���r��U�v4��鞐5<׳�M�].�j����M�j4�	*�;���ؑ�p����݋a���n.�y?Q����
%�5!�1���I�����C�HT9�eF�`ȗ�YV�gaև���'�xs�ީ�w�7.��y�`�O8�ۦZs����(��l�1��A6�* Û�:"'U}w�#�S[#;tS\6W9ږyG	�C�h[Y�,��4!]��Q��.�,�����GSʞ6#9ἳ��}�����;���u&n�,�~g��|eע��h5ܝ�Y��\�\Pf�}?�{=G�<���T���;%n�f����%��ђ�#0g����Q�����f��BF�|��=�n��Gul�jU^I
'_�ݪ'�K<��5f&����L���i�R�
秤� �#H&�Y�1z*f��W��A!�m�$r��WLo��c�#��om��yu�n;LR�B�ؖO$������+?�����5��!~	��3T�Ɂ�ڹ�z�z��)�PR2#�Դ��N��ȓ���3X�(c��2�9��Z�K4Uݳڟ��s8`�0��W4��K��>R10s�!�t�Q`����8�\hV� ?�2@)�R��1NJ�K�9!s��:#���<P��tC�3��`0di��Δ��F��M��oo��ɫ���<�'��kZ���K���Ͽإx�Ͻ���⧱�,e�J�*E�'7�f��7d�4	ŏ�ԃT]'���i�]�$�d1��r!ت F���JnГ��Me�!Z�ի˶�2�gXu制5��$�.5�*k�W��j�(s4�)I��	\7>��K��Qs`nq=�~���'Z��ɶn���%ɏ��%��V�"NrL�΍%n
��G��L&��ƣ�0IR��v��D��|]���&g�r�P�NJ��$�.�0!��N��&Ɖ�{2�T&@ޛ�7q����'롵��L"3}�p-&Oʼn�F"�mn
�Br��,��V����떃����4I|2���@��N��;H���y,��r�"1��w�����0��O>V�2 #������A��	'��~��Ԁ[�t���3�cX�Il�c]����RE�����1������Hv%-2����.��B�I����C���DRb�.��]�I*{�N��S֜HգXHd2}��M�D[��:�`�-4I�
�G��&�
��!�o�NK�ׇ�f �Te�u��a��M�bҧJ�2�s��k/��Y����Ҁ��-T�fz�l�b/&�3����ڛ�$�]���\�kYd����A��k��^��S}�Ѡ�0�}��"x��>��mh�'�+\C��P	��f@��ܡ����w����Y�:�������}N���j�pQΐȐ/B��6��U�C�@�U���LN��l��[*+L�/W:+����57,�kv{�_q�[%"�إo?�X��n-��ۣ�j}���^#a��6	����rx�Ҳd�qa�I�;Yt`�/YWB�:�Վ1%���T��{X��܍Y̌��B��u��M�#�:��ǩ�C��uo�N}�$�J��\A����wm�l�k�7/��H��c8�p˪<�y��1��_~����O���
���U�T�S�zg@b*���w�C�j 92!˥x3�	���[�'��9kĎe�[�kP-��Zc�bV�L�����eU�ĝמ:X�)ecZ�����͹�g� ݈�i�FWp���Ú�$�U�t��*�J���l5�sL��/�Y�+e��5��5��-��P��#���W��E�OG�Q4��(>{�9�Q��%a/�c]0y��M�'��h{ؚ��6?b3I���C2��C���.���ѱ坽Sx=o�|K���7�;N�5V���Oe����T8�N|��z�U�
llGG�`̄�PG!>��U` �}"��=�8�͎x:1n�"��҆|��'`t�oy�Yt����O�ξ�f�H�…(��@S#u��{���a�3��o4����3Y�V��չ�p �ⱦ�,��l!�V��җ��
�y�ߨS8�� QZ��V�6�!�X�)Ġ+��q��������3dt���e�Wp�Z�tI*Ei:����ݗ���0�ס~|h��͏�������s���*��v��[�" �U�@�L�݅��o���\?����E��1z�2�[z�W�:�Bđ�j�b��$��Ko%Xף���}�����!��e#M��<V�f��	�aY���B�jn��=��Y�ៃPA��S��~ǟ*:�\Y�[m�2x�W�|N1
���˭)��"�"�n�)0�l��
]���i�I\!!�
&�r��Y��w�Axy�P�#I\��n.H�+HH:�3�fd���el�X�J��
��wA���Q�A���a�lx���i֛ň���W�9z�s/�{��ϩ�#��ʇ����8N�Bk>_@lU<����V�Y*X<�)�z�ˏ��ۃO�4*�Ɲ��/��|�Z�_����!+BU)"��,�þ`:�yp��5�"P7���Ql\!s��%l�����mk��&�/0-U�i|C�0�~�8j���Ԅ�9[Z�/�|����QF��A����g���gP�rݘ��]Yn���t��?8�#gl7v����B���ߡ�[(P����3s��Y��w@h�AT�1�����K6+2�����v,w��*�
M��<���k˘���E!�\�A�s����É���A�S��|����	ۄ���8
�����Bv#Y&MJTx���!BX���
h����n�����.(+ �3c,��S�`�&r�h2�[��g������3o*�����+��77�5�*u�əf�]�+�]��dn�1<8Y��IH{ڲ�|@OO�{�e�$E6�t��*�4�Bsa,$F�g�,d�X������z�x9ꘚ�"zPѸ<I^��l����8���K�6p�,�(O��EL��'�w�
7l�ֳ����L���K�C�h�l���hL���(��!�CBʫ�b	J����w�l%������Ǎ_�t�>>��#U�fס���f�J�����
��^/�Nߵ齚Qw��Nj�[)��z����¢�Wfg*���z�NoQ�р�۾_J���S�b��E�~�왒��r�q����[>��`��	1�	��!�&_���X��s�P�DWw�u@�V~�t�i/.B�؊�����Z�2�m�=����k��=��Fi��3�~��i��k(��1祂�h3��!lv��r�@�:�/h�?G�ڧ̎�!�l��.y�b���-x7� z��
[�s
� ��_�E2��
?q�����	��|9�T>�,��{�fޕ���~E�����~E��S��W�6�6�}GƩYǷ1^	�\���X|�M�ƛ�,�-Ys ����ρ�w��,>�?A_�6��hk@`>p}��Cz)d
�Y^�vR���G⩖n)^��b\j���
d�[�	b�%l֮�}]6�}�uS�<9̩��ju3���D��qU� o��^�d���R�/���_�jU�S	Gt��A{"_�Zzf�*F�>��GB�h�I������DX�s��ZC�%sBS���
�8�rE��%
N�nakbލ'1��#4Q‚�櫁� �5U�|��2�#��E�f�����M��Όķ@�P]�ds,|ͿX'Z���*9��	V��qꡋ�!��{����ʾ#pp��דԏ	�|���Y�g���P �Ͻh���g��~�.!8h�ڥ>�|g�l�Ʊ�x�9ݟ�=؅�Y��1��7��*���ļ���;��̻~a����K�Z�kXܫ�������>Fݭ�C�Aj���QɈ[�/�8� n�p��ʻ@���"m��&�n�
U�1���V���e��V��],�Q���\��3uۿ�,D��\1��e�%YmvQ�Ud��ib�kإ��;�.�T�V&1R<jDw�j̴��Z��RA&�n�vPsd�����rbL�Y�/�������_01��^�x	�[f����^���$Gd(l����~/@{��O��\��>w�e�u�/��[H���>�l՜�#�l-F%���c4�G,#���3d�g�q҅�zx\E�`wu�)g�ҡ�G��!��d�a�(�/2���]y��^�f��r�`��>(FO�����|a�d�.�f�B�_vI�l���ԛ3~V��6�/�	�_ZSaH_�e�FiR$�A��GK�T�RH��̪С����]U��OrS��K9�}��(l�^�}�HQ*�BL�MAsO;�sQ�{*VӀ-����q�4�65U(��_�ͪ��%�^�>�=��Q�~=�3kcn�NX�3�I1Au�m&��
n��-���ɭ,c�]�u`�ðI�����{��!ZZ�7+�����Y��?�@n�[���ut{{;U�s7ø��b�c�z�;w]0�v �ޣ�h�F(��1�g���eO��F��+����x��G�n����}�L81��,|�ۃ��4">=���#�XjA��*6z�����f�����T�R_��
I�<
�QrZ�����=��Ԡm s̡����4��L�,?~ϐ"���N��{V�
#( �H���G�{ɶY�1w�"�ǂE

9�gxؕec�u�W����\CF
�rl*���:f�r��xѮ�K
�Ċ�Η�r"X����l�NwN-��o���
���~��{�10_�&��u���M�lv�(hg�j�1>q[R�(�=/�um��B����B-
�_o�(�ڐ6`Rh-��8v�h��}���E�I���Ӂ�,O���ʯ��X1�W*=�$Df$��9,!�.]�TH91f;��zk�_[� �w�u�l����{��{�X�#�X��bd�u�9�Emzl{�4&�T7�G?Vr>���-4�I��m,�J��3H�iE�d�9��X1������^�[zv7��'�8����m����N�n�k��B?��/kx�����	�,�������<ܤ�ECMd@7�+���}�nz��!֮-�ۇUkY�s���ђ/��!=r��+l�9yŝ���}��\O�%����̶��EN�u�YZ:g��`�6�4�����P�W�,�z
����MR#a�����#,�c��O��V�?8�n�(��_�|�#�����?\�To�Q|	�
�X�Qe��US�J�$�4��g��(`[A��EA��Z�!���X} D��F�����1�$�ʭ�-�mR���L֑+�w"ǣ���;⩓�3�~���6Qmꮇs�={��J���/�G������G_x��_�^ۮ)+�<R��I���ӿ&Q��*QE�TYV8k��.��
�t�y�H�;��|��s�W0%���1?��;���ɜ�ky�֙�Q�[4i��\(����Y>�����k/.\�<ypX
j0Ѣ� �������[���b+V٪՘�It<�da��13c��y��tg�l

�!��k�����=*w�T�l��B��W�Y�YF=�N�;���~����k�C�������`	�AW�9�Z4��޳tq�ߔy*	�~�����#�B@S�>"o]�^T{��E5����+�|Y���
�ت�l�2π��*`�On�����g���3�v`���j<��,Q�W��!{�mLV�8��D
G�L�k�,5\ȴ��]?�����m���C�7J�4ʅ%$�����vf�KX}&��vl���>�Ʒ˯莇��H��G�Gw
��j��e}��>��Lݴ�aϵ��u�XEf��:��%�V���PX�ԡ�:�&=d��B��-��~,� ����`�1��s���`(Aw�Ӂ�Fi�ɋ��f<a89�	����Qw�XU�o�������v'Hbz�L�=�����S�@X�x9L�lO��O�h��%�=�em	��>Vf�ٱrhc��f
K5��[b�k�̚?����K���N�S��nw0t��:�3���
�Qw%X
�����-�� ~Йƭ7��ݓ�M�0��z�D~v����@��$n�
��Ug,z+�;��t�ݟ�	uTflr��O1��g��j��q^��Y�����AJ�$>���ǭ�^\l�L������C�{�sK�P��%��q}L
��6�p��J��K[Q�}��FG����ڱ��
�p)8�%�1��$.��4�����$q~�o�
����Ůʅ���Z�����Y{o����H5��(���E��g<��L>�I�����`�
L�ԟx�R#���K����B-����
v�xʮ)��~N1�W�D���)�k2�d����22o��)�Q�/�{g�װ��l]�A��?�
	į�e�����&
 �~8�	G���RTv��	�Ra�PJ�9�m"�W��G�2q����;��5|,z��C���(���;E��q���$��8(K7�����|�2�]�C<�i��>ǿ�������H���}=4?~j��]"-��[n�y��	+�Ď?��W�(��e�aθm����i��5V.�!���S��-�9�X��,O�����w�Z���UEj����Bhoy����-��Pɂu١�����}ΐ�>M7*����������:���*���8�`-l+s
����{�_Ջ�э����ɛ�[ԍL�M*�� q'�!҈1�/������V4��ߤ���x�Y���?��q٘/�E=}�*�����U
Jzz�ε&���	�PJųJg�v?/�u�5
d�"��� �]�4��9y�=M��{O�h�'�z��dıg�`��C�N�-����+p���k;Σ��+ ػ��؋��K�#���Y{�ő�Вi+�)7Xk�F��ǵ��d'R3z"l	�'���lq�/�������K��I���G_���ػ*$١�1�F+���&��O!^��cvy��\��{��!&'ϟC�"�&�Vl&��W�rD�����1�̦�"�=���%�J�[�e��+]n.
7wp(Y�ᣘ���
YMf)'��'���pZ�e�W�� �V(3Fg������Dl?�:	~�/���+�r���'��{~�0d�Sl������٣�U�M���&�C�YW�8Ig���}1�T�Sx���N�y������D8�t��˦N�H����(��o���֜����wn`��&�+B���G�Eޒm��٩��g�ҍ�ilh�ȿ3@���`:P�D����	�g�Mx*O[���;H�^��IR8QC�(�G%��&����rx/L9ks�4���@�{k�Z�})��`�ǿX��B���d�D*�%�����,g��������Z��S�G:ɇq�n"C�ч�v��5~��9=���-���z��@�{Π�%?%�t�v�H~ʪ@�*{���8�hz�{0����w�ϕt���tBW��3�Ś�i�K�ft�]#fo�F�C�/28Yo,���\!�ԅ��Y2+X;-!,�:��^�bށs��;ty_bQ���+�Dm�
b%1�-17��ɲ��Vo��N��(�j���c
�C'�J,`���q��4mu��ܢ��a� �ڞ��YҘ�_E���u�y�.�>x>G�JV��{f�;��t�n�8�ćRwz�.w�4&!��l��1]�.����ƃ��M�1r�h!�MwG��N��h/��:�K)�V�;�-���q^Qw���qc�����H�I����kʌ.H�@H*�0H=�pj�f��P���98�1�m���?x�>�ϔ�
��VC�+c"�x2������L�q/n���Ȣ����o=}:��Y2��`�/R>��N%���̨GO�ϩ�>f�7�4qF���܄m0�"r��Qga���ۊ��'̞���$�
�ۏ����Ҝ�ל��hu�J�����?�1��[�~a�zvW�X�2Bă���0����
?Ǘ4PS�F�?ͤ���p��
a����&qK��N�w�,��ي��5b�O�L�ǔy�#�} a��-_3ae�]�%�>��d��ej�&}�}r�8ڼ�}Z�����ي����O(��Z�����+dmѻa����Qi�)(�o��؟?@h����ij��r��KG�Y[C�M���L�G�[��}݇q���
�6F�$	�(�9���^��!S�ya�Fiq��Z(�h��%@rP�qDe�7b!��oӲjT�#�p0MW1�U��*��-b8�T�u�:kW�V���(����PF5Ү��:��⧥;����<:��UG���y����u�h킸����*����T���?�gt#�ʓmc7(���0���MxA�'S�.=C'
q%+����W�)i�������rs�N=���99#�>�DgjI�z�UZS��Ö�a{\"[F���V�5�X�z���a�7*�3춎��I�A8�q*�O��4��_����L��񞅱�{��}m��zP��e1�;7��p/5�
�TV����8�($�SR��{��p�j
���|��G�\��@'�e�5�$l�.6J)��G�LG�l���f�'�\h�eiQ��ˋy��!XޞJ���S�.����"ɝ������t�SW�]b�$Ijjx5�9<u4c���@F��i�Er�+5�X��y�
�IUp!��zi5zX�<���ū�jO��(�
���k����l�+2�;#E�7��j3�$lc�b�#)�C�T��5	6�E̛|�>Շ��Hk�J�	k)zMma)��T����񲭱��[�!dm �G��n����􄺝�K��w�u����a戀!��)�$�RiFȀ��	�j~�դ�z��"�<<�X�t��)J�L���H�'-�&�G���x?��k�.�/��d&4�M�?_��w#\5���Eu�t�QuK5���am;~f��w	6�n&�/��i�`��JZ�x�}�c���,���jD4���Rc�H"GL����k���]lG���9�k��Eк�4��A�4{\֭�5����Ih��y7z�όŹ�Ӛ�Ȉ�1=�B��(�j"r��~�+�r������31*ٴ4�@�(7j��*3ઇ�a���UJz����@���
#��
���<�P���o�ý�G���q�k�!2ķb�GW2����,�3�O�*v�KJ@4��ƕ�r�j�
|���m�'����zT!�|�職h����W� �%�\2� |z	��!o>gs>��}�z鲵�U�":Ūoε&���X�fT�w����OHPbh$���]���ͲR��y�\�������v���O���=.��k��>���;�X{�F9c�YdW�0*��bH��OVEtI��L�xV��܉!R܊X׃AS%e:�X�˻t=��ޅw�l���S��kQ�Jk4�NxH�[��@�rD�f�.��!dA��S��x�w����|��}\����N|�N��I�tzi�&j�ؐu���K�,i��e8��d�կb�`;&�p[��N|�#u���L|,�Q}�����.�]d��Vʑ_Pp.e�}�u��/]�7�}��2�?h����hU�Y��I��D�/�-��Tl�Q,h�K��f�WMFY�W<�wXp��vta�|�:p!�ĞȔ��{��`��ԅϲ�J#jd�vb�
|5�����lQ��͉'�$^�ls��H;b��%���h�N��A��M\?�„�٠����QJ�ޑ�`�4���P{�9n@�p���{�"
C{'Ue����[�Մ�!���P�CB��z �p��Z��z,Jܨ����v�Ծu��‰�
g�뺩�
3���sߘ���ǍpԺ�I�0Sw	��$��t�~O��0���-~�bq&q��U1ܾ:��X��6���d��o8�Eܜlm7O�i�!�E��E�YQʀ��}]�1�+���.�&�P�O1�#l7��~(�4�tHg�dZ+�������B�nN|	 �2l��dC+�{Gic�d>�op��nE����a��]�3{T�b����?Ӧ��+�vw��8n+�oH��4�mjML�H��r�r؞O�Q�.
��թ�o$�E�{��:!huC��L D�7*!��D�ќ�!j�֘��{�̈́����-����$��Ͷ��&�3�A�9�hO0�{A��s�9SUv�3UB@oe�IuZ� 5Xs�/
 \�lQxs��y�]G~���oh�R�
(A���O��N���
eg/K�ߎ�q!��()9�o?0q�ꋙ1�6��><�?��5d��b�`���1{�ŕCv VU�	x�|u�41����V�f>P\�6?�� �-��Yk��/ *,�Xv����9�	���Y��c�%��xwRv
�FE�17^�e��ޘ�Q~N%�$5j�
������Gr	0+F�}C�C׍��o��[t�X���)��e/��p��!S�WT�Έ'�`%�Y=oP1:�
�$�`Fy�軛�w�Vn݅�DR�lꙮ/fH'��C�f�Pٽ_����S27Z���5�qB�d?��NE|�����T�������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``�(HHhg0�m�mWM8���o���E���o�����Th�h�^B�����_hh9h9c�9�9@n�y�y�?w����}����
������\ ���4��9�9������ �P�%P��X�%X��`�%`�� ���%��@�(�%(��"�&� &x	 ��fl
|(�X*�>(PK*J[X![Ā.�.lib64/ruby/monitor.sonuȯ��ELF> @�'@8	@88 PP P �� �� �   888$$  S�td  P�td�����Q�tdR�tdPP P ��GNUѦ���P�l�;�
���c܃��@0!BE������|�qX��D ��]���`o s'�U��"�M�, 4�F"d�  {�"    __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_gc_markrb_check_typeddatarb_fiber_currentrb_gc_writebarrierrb_num2longrb_ensurerb_int2big__stack_chk_failrb_mutex_locked_prb_yield_values2rb_mutex_lockrb_mutex_trylockrb_data_typed_object_zallocrb_mutex_newrb_eThreadErrorrb_raiserb_mutex_unlockrb_bugrb_intern2rb_funcallvInit_monitorrb_ext_ractor_saferb_cObjectrb_define_classrb_define_alloc_funcrb_define_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64ui	'ii
3P �X �` ` � �� � �� � � 
� � �       ( 0 	8 
@ H P X ` h p x � � � � � � � � ��H��H�� H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q�������%U D���%M D���%E D���%= D���%5 D���%- D���%% D���% D���% D���%
 D���% D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� DH�=
1����f�H�=� H�� H9�tH�v H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�M H��t��fD�����=U u+UH�=2 H��tH�=� �����d����- ]������w��������fD��SH��H��_���H�{[�U���D��UH�5T SH��H��H�?���H�����H�;H�EH��t�t$H�{@��t,H��H�}H��[]��H���p���H�{@��u�����H�ǸH�}H��[]�ff.���ATI��H�5� UH��SH��H��0dH�%(H�D$(1��?���H�8H�@H�H�@H�xNH�D?H��H����H�=HH�$H��L�d$H�l$H�D$����H�L$(dH3%(uH��0[]A\�@�K�������@��SH�5 ���H�xH���S���H��u1�[�f.�H�[���H�¸H9�t�1���fD��H��H�5�
 �\���H�xH�����ff.�@��1�1������ATH�5�
 UH��S����L�`H���-���I9�uH�H��H��[]A\�@H�{�G�������H�CH��t�t�H��[]A\�H��H��������ff.���SH���c���H��H��[H��H�=>����i���f���ATH�5�	 UH��S�Y���L�`H���m���I9�t8H�{����H��u
[]A\�D�K���H�CH��u"�H��[]A\�H�H������u�H��H�������ff.�@��UH�4	 �SH�����H��H�h �@uH�h ����H�EH��t�t"H�EH��H�EH��[]��H��H���E�������SH�5� �_���H�X�v���H9�u�[�H� H�55H�81�����f���SH�����H�5| H������H�0H������H��H�0t�[��H�@H�x�o����[�����f.���UH�5 SH��H��(H�?dH�%(H�D$1����H�@H�$H�CH�D$H�d H��u H�-��H���C���H�D H��t�H�{�H��H���S����H��HE�H�T$dH3%(uH��([]����f.���S����H��
 H�= H�0����H�5���H��H���y���H��1�H�]���H�5��1���H��1�H�����H�5�����H��1�H�m���H�5�����H��1�H���H�5����H��1�H�����H�5�����H��1�H���H�5����H��1�H�}���H�5����H��[�H�����H�5������H��H���current fiber not ownermonitor_exit: count:%dwaitMonitortry_enterexitsynchronizemon_locked?mon_check_ownermon_owned?wait_for_condmonitor;�`������p����@���P���p���0���d���������0����@����������4����l����@������������`���DzRx�$��FJw�?:*3$"D����\8���
p4���E�Q0�8����E�H�G z
AAHgAA0������F�K�D �GP{
 AABE����JE�`
KD���!HT(\���
4<X����F�H�D �f
ABEi
ABDt����'E�O4�����F�H�D �e
ABF\
ABA(����mE�M�D 
AAI�`���>E�`
A����XE�r
IWzRx�� x���`����(t�����E�H�G@�
AAA�����E��GNU���` ����������!���=�
P X ���o`��
S� @�	� 	���o���o`���o�o���o�  0@P`p��������

 
0
@
P
`
p
�
�
GA$3a1�GA$3p1113 GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�GA+GLIBCXX_ASSERTIONSmonitor.so-3.4.4-3.el8.x86_64.debug���7zXZ�ִF!t/��W�]?�E�h=��ڊ�2N�.�g�i��N���������Sp���R�0զ�w��,~�(�᱋�o2&����m�=%�*��
*�ю|�jц'n����A����QxW��1�fA�	=��ͨ�}�7�?�+ꓯ԰8�s��c�g9B����{1�\tO�?�)��ѺK����b��)�?J̞�C�~�G�>3x_@K� ���81��H�ǂJ~�[a4�+tcH�T�kUQ�|(/���	�����vώ�6�`,`x���#��uc���(��s�ß�
caK�&H=�٧�>ZG�/ _���	K�[X]C E��Y%�F�C�E�)�jR��f턶`cA��t��'m�i0�;�0�*�ʒU
�2bA��Q%"?v?�9�`�v���;�$�)R�t	�J�Ɉ�y�� �•��]�%����\~r��9�"e�k0Cϴ�S�'
�����H�KzC)������
�"We.흒�C����qt���9�@;הOI� �vfVj���.U[�y�=�o�T�B�)uI��+��pt����
��t����T|#�����l��cVe$�&Gv�O`�a�~��e�|?*���b�������1>/�gl'��Ĩ��W��˙hlh�OG
.�G.�U��$��Dpb���ܱ��^G%c,�&�@��꛵N�/�bA5`��m��:��xx���'	���&-����ypP0S�El�,���l A���� �'�MV����n{	��J�k�k�����\z�'��m^U _�Οߟ@Gr�zKw��<��{�r�Ψ���	��ѫ�\��R~����1-'k��>���M%����V�:=���?C���ǾO�d�x��Q�;�\����3)�u0804�ݯ?��#ktV�Җ���03�M`�lN�Ҿd!���v��'yV�7i)�]%�� ��㥱�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��00��S8���oDE���o``0T�� ^B�	�	@h��c�n�
�
�w  �}
�2������XX�� �P P�X X�` `h �� � �� ��  �� `�H8"(`"�\&"PK*J[�Ä�����lib64/ruby/pathname.sonuȯ��ELF>�@�y@8	@0k0k �k�k �k p� �k�k �k   888$$kkk  S�tdkkk  P�td�[�[�[��Q�tdR�td�k�k �k ppGNU��0*|�|D��s��sA�G�BC�b CEBE���|�qXF�qwIs�6�n�� ��z$���F��,1`d��!�V�6� e��"�}UD�"�"�nkU9����T, ���F"(w������%p 8@r ,p ``O�	F J?__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_cFalseClassrb_class_new_instancerb_cFloatrb_cIntegerrb_cNilClassrb_cTrueClassrb_cSymbolrb_cFilerb_funcallv__stack_chk_failrb_cDirrb_ivar_getrb_eTypeErrorrb_raiserb_mErrnorb_const_get_atrb_rescue2rb_mFileTestrb_obj_classrb_block_callrb_block_given_prb_yieldrb_error_arityrb_cIOrb_convert_typerb_ary_storerb_hash_newrb_id2symrb_hash_asetrb_funcallv_kwrb_block_call_kwrb_keyword_given_prb_string_valuerb_enc_getruby_enc_find_extnamerb_str_subseqrb_str_appendrb_obj_classnamerb_sprintfrb_obj_duprb_str_hashrb_call_superrb_str_freezerb_check_funcallmemchrrb_ivar_setrb_eArgErrorrb_frame_this_funcrb_enumeratorize_with_sizerb_obj_is_kind_ofrb_str_equalrb_unexpected_typerb_ary_entryrb_ary_new_from_argsInitVM_pathnamerb_internInit_pathnamerb_ext_ractor_saferb_cObjectrb_define_classrb_undef_methodrb_define_methodrb_define_global_functionrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64ui	=ii
I�k P�k �k �k po xo �o �o �o �o �o �o  �o #�o $�o -�o 5�o 6�o 7�o 8�o :�o @�o A�m �m �m �m n 	n 
n n 
 n (n 0n 8n @n Hn Pn Xn `n hn pn xn �n �n �n �n �n !�n "�n %�n &�n '�n (�n )�n *�n +�n ,�n .�n /o Go 0o 1o 2 o 3(o 40o 98o :@o ;Ho <Po =Xo >`o ?ho B��H��H�aZ H��t��H����5zX �%{X ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1���������%UU D���%MU D���%EU D���%=U D���%5U D���%-U D���%%U D���%U D���%U D���%
U D���%U D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%}T D���%uT D���%mT D���%eT D���%]T D���%UT D���%MT D���%ET D���%=T D���%5T D���%-T D���%%T D���%T D���%T D���%
T D���%T D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S DH�=YT H�RT H9�tH��S H��t	�����H�=)T H�5"T H)�H��H��H��?H�H�tH��S H��t��fD�����=�S u+UH�=�S H��tH�=nO ����d�����S ]������w������H��H��H�t$H��u+H�DS H�
H��U H9�tH�t$����H���uH�N��fDH��t*H��t4�u<t<H��R H�
�H��R H�
�@H��R H�
�@H��R H�
�@H��R H�
�p������H��H�5!S �dH�%(H�D$1�H��R H�<$H��H�8�v���H�T$dH3%(uH������ff.����H��H�5�R �dH�%(H�D$1�H�=R H�<$H��H�8����H�T$dH3%(uH����,���ff.����SH��1�1�H��H�5yS dH�%(H�D$1�H��Q H�8���H��H�ڿH�$�6���H�L$dH3%(uH��[����ff.�H��H�5�S �0���H��t�tH�Q H�5�:H�81��/����H���H��u�H������UH��SH��H�Q H�5�S H�8�m���H��H�����H��I��E1�H��H��[1�H�8���H�=����]���ff.���H��dH�%(H�D$1��3���H�5�Q �H��H�$H��P H�8���H�T$dH3%(uH���������ATUSH��dH�%(H�D$1�H������L�%P H��H�5CR �H��H�$I�<$�&���H�,$H�ٺH�5R H�����t+H�P H�8���H�T$dH3%(uH��[]A\�I�<$������������H��dH�%(H�D$1��3���H�5�O �H��H�$H�qO H�8���H�T$dH3%(uH���������H��dH�%(H�D$1�����H�5�O �H��H�$H�O H�8�1���H�T$dH3%(uH����G������H��dH�%(H�D$1��s���H�5TO �H��H�$H��N H�8����H�T$dH3%(uH���������H��dH�%(H�D$1�����H�5�N �H��H�$H�QN H�8�q���H�T$dH3%(uH���������H��dH�%(H�D$1����H�5�N �H��H�$H��M H�8����H�T$dH3%(uH����'������H��dH�%(H�D$1��S���H�5�N �H��H�$H��M H�8���H�T$dH3%(uH����������H��dH�%(H�D$1���H�5DN �H��H�$H�1M H�8�Q���H�T$dH3%(uH����g������H��dH�%(H�D$1����H�5�M �H��H�$H��L H�8��H�T$dH3%(uH����������H��dH�%(H�D$1��3���H�5�M �H��H�$H�qL H�8���H�T$dH3%(uH���������H��dH�%(H�D$1�����H�54M �H��H�$H�L H�8�1���H�T$dH3%(uH����G������H��dH�%(H�D$1��s���H�5M �H��H�$H��K H�8����H�T$dH3%(uH���������H��dH�%(H�D$1�����H�5�K �H��H�$H�QK H�8�q���H�T$dH3%(uH��������H��dH�%(H�D$1����H�5\L �H��H�$H��J H�8����H�T$dH3%(uH����'����H��dH�%(H�D$1��S���H�5L �H��H�$H��J H�8��H�T$dH3%(uH���������H��dH�%(H�D$1���H�5<K �H��H�$H�1J H�8�Q�H�T$dH3%(uH����g����H��dH�%(H�D$1����H�5LK �H��H�$H��I H�8���H�T$dH3%(uH��������H��dH�%(H�D$1��3���H�5lK �H��H�$H�qI H�8��H�T$dH3%(uH��������H��dH�%(H�D$1�����H�5TK �H��H�$H�I H�8�1�H�T$dH3%(uH����G����H��dH�%(H�D$1��s���H�5|J �H��H�$H��H H�8���H�T$dH3%(uH���������H��dH�%(H�D$1�����H�5dJ �H��H�$H�QH H�8�q�H�T$dH3%(uH��������H��dH�%(H�D$1����H�5J �H��H�$H��G H�8��H�T$dH3%(uH����'����H��dH�%(H�D$1��S���H�5�I �H��H�$H��G H�8��H�T$dH3%(uH���������H��dH�%(H�D$1���H�5�I �H��H�$H�1G H�8�Q�H�T$dH3%(uH����g����H��dH�%(H�D$1����H�5<I �H��H�$H��F H�8���H�T$dH3%(uH��������H��dH�%(H�D$1��3���H�5tH �H��H�$H��F H�8��H�T$dH3%(uH��������H��(dH�%(H�D$1�H�4$H�T$���H�5�G H��H�D$H�gF H�8�'�H�L$dH3%(uH��(��=�ff.�f���H��(dH�%(H�D$1�H�4$H�T$�Z�H�5KF H��H�D$H��E H�8��H�L$dH3%(uH��(����ff.�f���SH��H�� dH�%(H�D$1����H�5�E �H��H�$H��E H�\$H�8�H�H�T$dH3%(uH�� [��]�ff.�f���H��(dH�%(H�D$1�H�4$��H�5�E �H��H�D$H�E H�8���H�T$dH3%(uH��(����f���H��dH�%(H�D$1��#�H�5F �H��H�$H��D H�8��H�T$dH3%(uH��������H��dH�%(H�D$1����H�5�D �H��H�$H�aD H�8�!�H�T$dH3%(uH����7����SH��H�� dH�%(H�D$1��_�H�5�D �H��H�$H��C H�\$H�8��H�T$dH3%(uH�� [����ff.�f���H��(dH�%(H�D$1�H�4$���H�5�D �H��H�D$H��C H�8�L�H�T$dH3%(uH��(��b�f���H��dH�%(H�D$1���H�5�D �H��H�$H�1C H�8���H�T$dH3%(uH��������H��(dH�%(H�D$1�H�4$H�T$�*�H�5#D H��H�D$H��B H�8��H�L$dH3%(uH��(���ff.�f���H��(dH�%(H�D$1�H�4$H�T$��H�5KD H��H�D$H�WB H�8��H�L$dH3%(uH��(��-�ff.�f���H��(dH�%(H�D$1�H�4$�O�H�5PC �H��H�D$H��A H�8��H�T$dH3%(uH��(����f���H��(dH�%(H�D$1�H�4$���H�5�C �H��H�D$H��A H�8�L�H�T$dH3%(uH��(��b�f���H��dH�%(H�D$1���H�5dB �H��H�$H�1A H�8���H�T$dH3%(uH��������H��dH�%(H�D$1��3�H�5�B �H��H�$H��@ H�8��H�T$dH3%(uH��������H��dH�%(H�D$1����H�5�B �H��H�$H�q@ H�8�1�H�T$dH3%(uH����G����H��dH�%(H�D$1��s�H�5LB �H��H�$H�@ H�8���H�T$dH3%(uH���������SH��H�� dH�%(H�D$1���H�L$�H�5~A H�D$H�D$H��? H�8�e�H��H�D$�H�H�t$�H�����H�T$dH3%(uH�� [��[�ff.���SH��H�� dH�%(H�D$1���H�L$�H�5@ H�D$H�? H�8���H��H�D$��H�t$�H���K�H�T$dH3%(uH�� [������H��dH�%(H�D$1���E1�E1��H�$H��> H��H�5�? H�8��H�T$dH3%(uH����q����ATI��U��H��SH��H��dH�%(H�D$1���H�$�[���tWH�5�> H�<$E1ɉ�E1�L���,�H�$H�����H��H���`�H�L$dH3%(u+H��[]A\��H�5Y> H�<$L�����H�$�����H��H��+dH�%(H�T$1�H��H�<$H���\�H����H�T$dH3%(uH����j�f.���H��H��H�|$H�t$���H���9�H���@����f.���UH��S��H��H��(dH�%(H�D$1��I���xwuCH�$H��< H��H�5	> H�8��H�t$dH34%(uQH��([]�f.���u-H�$H��< H��H�UH�5�= H�8H�T$��P�뭺1�������k�ff.���ATI��UH��S��H��H��0dH�%(H�D$(1���H�D$����ueH�D$H�L$�H�< H�5�= H�8���H��H�D$��H�t$�H���A�H�L$(dH3%(u>H��0[]A\����uI�$H�D$H�L$H�T$�닺1�������ff.���ATI��UH��S��H��H��0dH�%(H�D$(1���H�D$����ueH�D$H�L$�H�7; H�5H= H�8���H��H�D$���H�t$�H���a�H�L$(dH3%(u>H��0[]A\����uI�$H�D$H�L$H�T$�닺1����3���ff.���UH��S��H��H��(dH�%(H�D$1��������H�U��tX��u|H�MH�5�; H�D$H�T: H�$�H�L$H��H�8��H�t$dH34%(uJH��([]�f�H�D$H�: H��H�5�; H�$�H�8��뷺����V�������UH��S��H��H��(dH�%(H�D$1���H�$��x"t/H�EH�D$��tkH�U�H�T$9�t!�1�������H�D$H�D$H�9 H�5�9 H��SH�8��H�t$dH34%(uH��([]��&����f.���UH��S��H��H��(dH�%(H�D$1��9�H�$��x"t/H�EH�D$��tkH�U�H�T$9�t!�1����1��H�D$H�D$H��8 H�5�: H��SH�8�R�H�t$dH34%(uH��([]��f����f.���USH��8dH�%(H�D$(1���xzH��um�H���p�H�L$�H�5�8 H�D$H�8 H�\$H�8���H��H�D$��H�t$�H���7�H�L$(dH3%(uH��8[]�H���t��1��,������USH��8dH�%(H�D$(1���xzH��um�H����H�L$�H�578 H�D$H�[7 H�\$H�8��H��H�D$��H�t$�H����H�L$(dH3%(uH��8[]�H���t��1��|�������AUATUSH��H��(dH�%(H�D$1�L�d$��H��1�I����H�L$�H�5g8 H�D$H��6 H�8�c�H�
��H��H���8��H���CH����H9�}LH�EH��L��L��H�D$���H��H��H��H��H�D$��H�E�� u�H;]}	H�E �H�L$dH3%(H��uH��([]A\A]����D��AUATUSH��8dH�%(H�D$(1����xH�I��H�D$���H�FH�D$���R�/�L��H�D$ ���H�=�7 H���c�H�|$ H��H���c����H�L$����H�B5 H�5�6 A�1ۺL�l$H�8�Y��H�
��H��H������H���Mf�H����H9���H�EH��L��L��+H�D$���H��H��H��H���L�H�E�� u�H;]}MH�E ��H�D$���f�H��H�}4 �M��jH�5�5 L�����H�8���H��XZH�L$(dH3%(H��uH��8[]A\A]ú������>��ff.���AUATUS��H��8dH�%(H�D$(1�����H�I��H�D$����H�FH�D$���pH�V�H�T$ 9��I���������j��H�L$H���څ�H�55 M��L�<�������PH�v3 H�8���H��XZH�L$(dH3%(H���H��8[]A\A]��H�D$H�D$ �a�����z�������E1���H�L$��H�	3 H�5�4 L�l$A��1�H�8�'��H�
j�H�eH�����H���K�H����H9��O���H�EH��L��L��H�D$���H��H��H��H��H�D$���H�E�� u�H;]����H�E 뷺�������������^��ff.���ATI��US��H��H��PdH�%(H�D$H1�H�l$ �r�H�}H�D$ H�EH�D$H�EH�<$H�D$����H��E1�H�P�&�H��t
Mc�O��L�A��H��H9�tH�8D9��H��t�H��H�H9�u�D9����������uJ�E��E1�H��څ�H��1 H�5�2 A��H�8���H�L$HdH3%(uVH��P[]A\�����H��H��څ�H�5Y2 ��E1�E1���PH�-1 H�8�-��ZY먺1���������fD��ATI��US��H��H��PdH�%(H�D$H1�H�l$ �"��H�}H�D$ H�EH�D$H�EH�<$H�D$����H��E1�H�P�&�H��t
Mc�O��L�A��H��H9�tH�8D9��H��t�H��H�H9�u�D9�uC���E1�H��S��H�K0 H�5L2 A��H�8�P��H�L$HdH3%(uH��P[]A\ú1���������@��ATI��US��H��H��PdH�%(H�D$H1�H�l$ �"��H�}H�D$ H�EH�D$H�EH�<$H�D$����H��E1�H�P�&�H��t
Mc�O��L�A��H��H9�tH�8D9��H��t�H��H�H9�u�D9�uC���E1�H��S��H�K/ H�5\/ A��H�8�P��H�L$HdH3%(uH��P[]A\ú1���������@��ATI��US��H��H��PdH�%(H�D$H1�H�l$ �"��H�}H�D$ H�EH�D$H�EH�<$H�D$����H��E1�H�P�&�H��t
Mc�O��L�A��H��H9�tH�8D9��H��t�H��H�H9�u�D9�uC���E1�H��S��H�K. H�5,/ A��H�8�P��H�L$HdH3%(uH��P[]A\ú1���������@��ATI��US��H��H��PdH�%(H�D$H1�H�l$ �"��H�}H�D$ H�EH�D$H�EH�<$H�D$����H��E1�H�P�&�H��t
Mc�O��L�A��H��H9�tH�8D9��H��t�H��H�H9�u�D9�uC���E1�H��S��H�K- H�5D. A��H�8�P��H�L$HdH3%(uH��P[]A\ú1���������@��ATI��US��H��H��PdH�%(H�D$H1�H�l$ �"��H�}H�D$ H�EH�D$H�EH�<$H�D$����H��E1�H�P�&�H��t
Mc�O��L�A��H��H9�tH�8D9��H��t�H��H�H9�u�D9����q������uJ���E1�H��څ�H�<, H�5�- A��H�8�A��H�L$HdH3%(uVH��P[]A\�����H��H��څ�H�5i- ��E1�E1���PH��+ H�8����ZY먺1����;�����fD��ATUH��SH��0H�t$dH�%(H�D$(1�����H�|$H�����L�cH� tL�cH�CH��H�D$ �(��H�t$ L��H�����H��tsH�L$ H��L)�H�H��H��L)�H��HL�1�H���i��H�t$H��H�D$����H�����H�t$�H���M��H�L$(dH3%(uH��0[]A\�@H�S�����D��USH��H������H��H������H��H��H�=H��[1�]���f���H������H��H��������H�����H������H��xH��������?H��H!�H�D��H��H��H	�H�DÐ��S1�H��1��_��H���G��H�����H��[�f.���UH��SH��H��dH�%(H�D$1�H��t
@����H�5
* 1�1�H�����H��H��$HE�H�$���H�$H�H�SH�{�� uj1�����H��uiH�����H�5�+ H��H��H�$���H��H�L$dH3%(u3H��[]�f�H�H�ƒ�H���l���H�$H�SH�{�� t�H�{����H��( H�5uH�81����f���SH��H��dH�%(H�D$1�������t[H�����H��H�$�g��H�5 * H��L�f�I��H�t( �H�8���H�T$dH3%(u0H��[�f��K��H���3��E1�1�1�H��H���Q����:��f.���UH��SH��H��H��H�5^* ����H����H���K��H��H���@��H�SH� tH�SH�HH� ��L�CL�HI�I�I9�v[I9�vVH���B�H���q�</t21�@��/t@��9�t�@��@��H�4�����H��H��[]��1�@��/u�I9�w��I9�w�L9�H�H��H��[]H���f�H�H�i������UH��SH��H��H��H�5^) ���H��uH��1�[]�H���H��H��H���=��H��H��H��[]�L��ff.����UH��SH��(dH�%(H�D$1����H�L$�H�55' H�D$H��& H�8�Y��H��H��u�H�����@�u�H���H��u�1�H���6���H��H�$�%��H��H�D$���H��H�����H��H�$����H�t$�H���j��H�4$�H��H�D$1��2��H�T$dH3%(uH��([]�����fD��H��H�=%�|��H�=SH��' �i��H�=HH��% �V��H�==H��' �C��H�=0H��' �0��H�=&H��' ���H�=H�w' �
��H�=
H�T' ���H�=H�9' ����H�=�H�' ����H�=�H�' ���H�=yH��& ���H�=mH��& ���H�=�H��& ���H�=�H��& �r��H�=�H�|& �_��H�=�H�a& �L��H�=�H�F& �9��H�=�H�+& �&��H�=�H�& ���H�=�H��% ���H�=uH��% ����H�=nH��% ����H�=cH��% ����H�=VH��% ���H�=KH�n% ���H�=@H�S% ���H�=3H�8% �{��H�=&H�% �h��H�=H�% �U��H�=H��$ �B��H�=H��$ �/��H�=?H��$ ���H�=�
H��$ �	��H�=�
H�{$ ���H�=�
H�`$ ����H�=�
H�E$ ����H�=<H�*$ ���H�=p
H�$ ���H�=�
H��# ���H�=�H��# ���H�=H��# �q��H�=X
H��# �^��H�=T
H��# �K��H�=K
H�m# �8��H�=A
H�R# �%��H�=:
H�7# ���H�=0
H�# ���H�=$
H�# ����H�=
H��" ����H�=
H��" ����H�=
H��" ���H�=�H��" ���H�=�H�z" ���H�=�H�_" �z��H�=CH�D" �g��H�=�H�)" �T��H�=�H�" �A��H�=[
H��! �.��H�=�H��! ���H�=�H��! ���H�=yH��! ���H�=oH�! ����H�=�H�d! ����H�=PH�I! ���H�=MH�.! ���H�=@H�! ���H�=7H��  ���H�=�
H��  �p��H�= H��  �]��H��  H����H�������I��H�  H�=�H�0����H�w���H�5�H��H��" ���H�=�" 1�H�!���H�5��u��H�=f" �H���H�5��V��H�=G" �H����H�5��7��H�=(" �H�����H�5i���H�=	" �H�����H�5O���H�=�! 1�H�9���H�57����H�=�! 1�H���H�5 ���H�=�! 1�H���H�5����H�=�! 1�H���H�5�
���H�=z! �����H���H�5B
�j��H�=[! �H�W�H�5�
�K��H�=<! �����H�H�H�5�	�,��H�=! �����H�y�H�5�	�
��H�=�  �����H���H�5b
����H�=�  �����H���H�5I����H�=�  �����H�\�H�5'���H�=�  �����H�M�H�5	���H�=�  �����H�.�H�5��r��H�=c  �����H��H�5��S��H�=D  �����H� �H�5	�4��H�=%  1�H����H�5{���H�=	  1�H���H�5����H�=� 1�H����H�5�����H�=� 1�H� ��H�5����H�=� �H����H�5����H�=� �H�"��H�5����H�=w �H����H�5��g��H�=X �H���H�5��H��H�=9 �����H�E�H�54�)��H�= �����H�&�H�5��
��H�=� 1�H�J��H�5	����H�=� �H����H�5V����H�=� �����H��H�5����H�=� 1�H���H�5���H�=� �H���H�5�u��H�=f 1�H����H�5��Y��H�=J 1�H�	��H�5��=��H�=. �H����H�5����H�= �H����H�5����H�=� �H�l��H�5+����H�=� �H����H�5���H�=� �����H����H�5���H�=� 1�H�b��H�5<���H�=w 1�H�&��H�5g�j��H�=[ �����H����H�5<�K��H�=< 1�H��H�5��/��H�=  1�H�o��H�5����H�= 1�H����H�5����H�=� 1�H�w��H�5�����H�=� 1�H����H�5����H�=� 1�H���H�5����H�=� 1�H���H�5����H�=x 1�H����H�5�k��H�=\ 1�H���H�5T�O��H�=@ 1�H����H�5��3��H�=$ 1�H���H�5����H�= 1�H����H�5*���H�=� 1�H���H�5�����H�=� 1�H����H�5�����H�=� 1�H�#��H�5
���H�=� 1�H����H�5:���H�=| 1�H�+��H�5�o��H�=` 1�H����H�5
�S��H�=D 1�H�3��H�5��7��H�=( 1�H����H�5����H�= 1�H�;��H�5����H�=� 1�H����H�5�����H�=� 1�H�C��H�5�����H�=� 1�H����H�5����H�=� 1�H�K��H�5����H�=� 1�H����H�51�s��H�=d �����H���H�5{�d��H�=E 1�H����H�5Y�H��H�=) 1�H����H�5��,��H�=
 �����H���H�5$���H�=� 1�H���H�5����H�=� �����H�^��H�5����H�=� 1�H�b��H�5G���H�=� 1�H�v��H�5,���H�={ 1�H�J�H�5�n���H�=_ 1�H����H�5H�R���H�=C 1�H����H�5��6���H�=' H�5������H�57��H�==H��������H��H���unexpected @pathto_aryArray#<%s:%li>pathname contains null byteto_pathENOTDIRatimebasenamebasebinreadbinwritebirthtimeblockdev?chardev?ctimedirectory?dirnameempty?entriesexecutable?executable_real?exist?expand_pathextnamefile?fnmatchforeachftypegetwdglobgrpowned?lchmodlchownlstatlutimemkdirmtimepipe?readable_real?readlinesreadlinkrealdirpathrealpathrenamermdirsetgid?setuid?sizesize?socket?splitsticky?subsymlink?sysopentruncateunlinkworld_readable?world_writable?writable_real?zero?Pathnameinitializefreeze===eql?<=>hashto_sinspectsub_exteach_linefnmatch?make_linkmake_symlinkpwdopendireach_entrydelete=~;�XT��������d���$���@t���\���xD�����������T������,T��H���d���t�������4����������T��(���D��`t��|����4�����������T�����$��@t��\���x4�����������T������4�� ���D��`d��|����4�����������d�����,4��H���d����T��������������$��	���8	4��l	����	����	����	����	t��
T��H
$��t
����
����
T���
��$��`���������0��d��������
D�@
4�t
t��
���
���
��
���@��x$��$��d��zRx�$h���0FJw�?:*3$"Dp��� \8����H v
Bx̽��TH F
A����TH F
A �T���eE�K N
AA�����IDD$�ؾ��UE�D�D eMQ���YH K
A00T����F�A�A �D0|
 AABDd����YH K
A����YH K
A�H���YH K
A�����YH K
A����YH K
A����YH K
AX���YH K
A(����YH K
AD��YH K
A`$��YH K
A|h��YH K
A����YH K
A����YH K
A�4��YH K
A�x��YH K
A���YH K
A$��YH K
A@D��YH K
A\���YH K
Ax���YH K
A���YH K
A�T��YH K
A����YH K
A����YH K
A ��YH K
A d��cH0U
A<���cH0U
A X��cE�G0P
AA|X��^H0P
A����YH K
A����YH K
A �$��cE�G0P
AA�p��^H0P
A���YH K
A,���cH0U
AHL��cH0U
Ad���^H0P
A����^H0P
A�(��YH K
A�l��YH K
A����YH K
A����YH K
A 8���E�G0r
AA 0����E�G0m
AAT��_H Q
A0pD���F�D�F �G0m
 AABH����VH H
A���,H c���(����E�D�I@Q
AAK0����F�D�D �IP|
 AABI0LX���F�D�D �IP|
 AABI(����E�D�I@r
AAJ(�����E�D�I@�
AAA(�<���E�D�I@�
AAA(����E�A�DP�
AAA(0T���E�A�DP�
AAA8\����F�B�A �A(�GP�
(A ABBAD�����F�B�A �A(�D`FhQpZhA`W
(A ABBAD����F�B�A �A(�F`oh\pShA`[
(A ABBH<(	���JF�D�A �Ip�
 AABIIx[�PxAp0h	����F�D�A �Ip�
 AABA0�	����F�D�A �Ip�
 AABA0�	T���F�D�A �Ip�
 AABA0
 ���F�D�A �Ip�
 AABA<8
���JF�D�A �Ip�
 AABIIx[�PxAp0x
����F�A�D �DP�
 AABE$�
���7E�A�G TNC�
���HI�
���OH`
PN��&E�`((���E�D�G0�
AAC T����E�G i
AJ4x|���E�D�J �
DAId
EAF0�D��TE�D�J U
CADWGA(�p���E�D�D@�
AAAD��?H6,h��	H�	GNU�P�k �S0
<Y�k �k ���o`X	�
i�m ����	���o���oX���o�o�
���o�k `p�������� 0@P`p�������� 0@P`p�������� 0@P`pGA$3a10IYGA$3p1113`9YGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY`GA+GLIBCXX_ASSERTIONSpathname.so-3.4.4-3.el8.x86_64.debug�?�7zXZ�ִF!t/���]?�E�h=��ڊ�2N�Hu% ���Pff��<��"����8L���Y�mH�U9A�-����;Oҁ*�4i1B�JT=i��8"��s
C-N��=���k�
x+�#��4C�z��1��y��Q�[F�����+����i�p���X>��)I�nw��)���y3]�U"��!�̙�9�X#�t�,0m9�>w���eΝ�E�	�#צ�;*Vj��7�gK7�iO#8��G[$��#��%�Ty~C��c�uy�-z�邖2�kLe�!�5��k�#�7��nL�i��彘ZjPe.\
��L�����҅�lM&g�W�J���Q�@%��yO��X�a�t���h`��[�'y')��9����!�Rm�/FR0[�k��r�Q�
��� �38=Z]�A�ty�hoHߢ�2j��ߏ��p�=.B}�Vq]Xvʐ��`�e.�q�������GN~���l��̠��	i�Q�Q&KoA�h�ءBu.�Y��̧�_kX�1W��ل!`��֮xt��:w즄%#�p|&+>a�}� 3��rؤ������)�o�@��׫y$��2w#9Үca��l���uG
2�[�U�	%�.'��ݦ�@h��&5`G�h@����\S�Z_LGM��!�j�[ܑ������]kN�I/�"G����T/��I�ۗt�	kU�Q��i��$;C�Jj5��� Ǔ¢ްV�P��D��vu-i� n�+�f�qʗ��-ō��y�GKG ;6��:$�X��M�o�o%W��K������x.����ۄ��^K�����W��}��(�2?ܦ���IKϸDI�(,�2~K���U}Y�z1D���]}F���zè\�1�SoHӪ��#L���0@�~�~fcE�e�3�l�ch����e��B���r9{)Qשj����bu%=;�9�����K
l=��%_�uy�/���ڧ?��`8��Xֶ��›лJ�����8�w�c�Y�oY~Q@�
܎�6��O��!%��^�2X�|~޽��(z�[�
�
3L͍���T3��M!��@��M�&���j8��sV�2>�Z1i*@	�TJ|�d��ـ!��&��Yvo�·��]W��šuг|������_���D4�\w��@#g
��T\���ʘV��bsl�u��|���H��JRR��U䉘�����T�M��(�>)�^�;��5菶�Y>��LZvPS�q�Yj��u����*IQE��*�ǰ$v癳����D$nk�+ܵ<�k�S ���?�9��܄̹�	��"�Rm:�t�H����k��=Rc�)�N:lp�x������ڰ7��c��Í5~/��O�[<X�P���=_GG�׈���m>.�����p+mP�KF�Y4ʳ����~Im��x�L�ȏz:��"z���g-��׼���e��M���X�&8���]��K���4�����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(���0X	X	i8���o�
�
�E���oXX0T���^B���h00cPP0n�� w���=}<Y<Y
�2IYIY���[�[���^�^H�kk ��k �k��k �k��k �k��k �k ��m �m8�p p@�@r`pHHr,tr$�x"PK*J[��7X-X-lib64/ruby/date_core.sonuȯ��ELF>0?@&@8	@���� ��#�#8� X	X	#X	#  888$$p�p�p�  S�tdp�p�p�  P�td������		Q�tdR�td��#�#ppGNU�j��E�z:�<��Id�� @D�D���BE��N�#�YN���|�@����b�/EC�2��,O�qX[,��x��jד#�l�����p������( $�>/��?���3w���/au��t��
G��_���/�`���U�
J��h�� *����f"�oA<*��U""�M
���M���Uz�NF�����	F, #�Y�F"s�������.�"fgJ�I�#�00z�`2-\(%#��;����3���0-��L	P�#��.�r�tI��1za�?__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddatarb_funcallv__stack_chk_failstrlenrb_errno_ptrdate_strftimeruby_xmallocruby_xfreerb_sys_failrb_fix2intrb_num2intrb_intern2rb_id2symrb_hash_deleterb_hash_arefrb_hash_asetrb_ary_new_caparb_usascii_str_new_cstrrb_obj_freezerb_ary_pushrb_ary_freezerb_gc_markrb_rational_denrb_rational_numrb_eTypeErrorrb_raiserb_cNumericrb_obj_is_kind_ofrb_error_arityrb_usascii_str_newruby_snprintfrb_str_appendrb_num2longrb_num2dblrb_warningrb_string_valuerb_enc_getrb_enc_dummy_prb_eArgErrorrb_hash_newdate__strptimerb_enc_copyrb_error_frozen_objectrb_str_modifymemchrrb_str_new_staticrb_str_catrb_str_newrb_data_typed_object_zallocrb_gc_writebarrierrb_obj_classrb_float_newrb_usascii_encodingrb_enc_sprintfrb_usascii_str_new_staticrb_rational_newrb_cTimerb_num2ullrb_keyword_given_pdate__jisx0301rb_hash_dupdate__httpdatedate__rfc2822date__xmlschemadate__rfc3339date__iso8601date__parserb_memhashrb_float_valueroundrb_cRationaldate_zone_to_diffrb_unexpected_typerb_ary_new_from_argsrb_copy_generic_ivartzsetlocaltime_rclock_gettimerb_int2bigruby_xreallocrb_marshal_loadrb_sym2idrb_gc_register_mark_objectrb_num_coerce_cmpmodfrb_cmpintrb_block_given_prb_yieldrb_frame_this_funcrb_enumeratorize_with_sizeInit_date_corerb_ext_ractor_saferb_cObjectrb_define_classrb_define_class_underrb_mComparablerb_include_modulerb_define_constrb_define_alloc_funcrb_cFalseClassrb_undef_methodrb_cFloatrb_cIntegerrb_cNilClassrb_cTrueClassrb_cSymbolrb_define_methodrb_define_private_methodrb_define_singleton_methodrb_st_locale_insensitive_strncasecmp__ctype_b_locrb_reg_newrb_reg_nth_matchrb_str_to_inummemcpyrb_cstr_to_inumrb_free_tmp_bufferrb_alloc_tmp_buffer_with_countruby_strtoulruby_scan_digitsrb_int_positive_powrb_str_subseqrb_backref_getrb_match_busyrb_str_duprb_backref_setstrchrstrspnmemmovememsetrb_str_formatrb_string_value_cstrstrlcpyrb_internrb_uint2biglibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.3GLIBC_2.14GLIBC_2.4GLIBC_2.17GLIBC_2.2.5/opt/alt/ruby34/lib64?`ii
a���kii
v����ui	�%ui	��#�?�#�?�#�#�#��#���#p��#@��#��#��#@��#�#�#��#��#� #��(#��0#p}8# ~@#�pH#w`#g{h#@Vx#pA�#�~�#�~�#�~�#�~�#q~�#�~�#�~�#�~	#�~	#�~	#�~	#�~ 	#(~(	#/~0	#6~8	#>~@	#H~H	#Q~P	#X~ #~(#~0#~8#~@#~H# ~P#$~`#(~h#/~p#6~x#>~�#H~�#Q~�#X~�#a~�#e~�#i~�#m~�#q~�#u~�#y~�#}~�#�~�#�~�#�~#�~(#�~0#�~8#�~@#�~H#q~P#�~X#�~`#�~h#�~p#�~x#�~�#�~p#x#�#�#�#�#�#�#B�#L�#Z�#n�#o�#q�#s�#w�#|�#��#�#�#�#�#�#�#�#	�#
�#�#
�#��#�##### #(#0#8#@#H#�P#X#`#�h# p#!x#"�##�#$�#%�#&�#'�#(�#)�#*�#+�#,�#-�#.�#/�#0�#1�#2
#3
#4
#5
#6 
#7(
#�0
#88
#9@
#:H
#;P
#<X
#=`
#>h
#�p
#?x
#@�
#A�
#C�
#D�
#E�
#F�
#G�
#H�
#I�
#J�
#K�
#M�
#N�
#O�
#P�
#��
#Q#R#S#T#U #V(#W0#X8#Y@#[H#�P#\X#�`#]h#^p#_x#`�#a�#b�#c�#d�#e�#f�#g�#h�#i�#j�#k�#l�#m�#p�#��#�#r#s#t#u #v(#x0#y8#z@#{H#}P#~X#`#�h#���H��H��"H��t��H����5��"�%��"��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1�������%�"D���%
�"D���%�"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"DH�=��"H���"H9�tH�.�"H��t	�����H�=a�"H�5Z�"H)�H��H��H��?H�H�tH�5�"H��t��fD�����=�"u+UH�="�"H��tH�=��"����d������"]������w�����G��H��F<��H�B<��HЉ91�A�0A���w��;w��;v1��@���u�1�	����fD�7@��u>�G�����i��ƒ�?����?k�<��+G x ������=QOƒ��G�7�f��Q��f�D�A�����G�wUS�������w ����������QO��ų��A���A����A����D�[���D�2�����A��E��E)�E)�A��Ai�)Ɖ�]��A��%>	������)�k�<��A)�D	�D	�	ʉW�fD�ƀQ�t���D�����%���H�H���H��0�fD��H��������fD��SH��H�5��"���H�H���"H�C[�ff.��H��dH�%(H�D$1�@��t@��u0H�4$H�5��"H�����H�T$dH3%(u!H���H�H���H9�HE�������f�H��dH�%(H�D$1�@��t@��u0H�4$H���<���H�T$dH3%(u#H���DH�H���H9�HN������f��������~%�?f���5�>�*��^�>f(�fT�f(�f.�v3�H,�f���=�>fU��H*�f(����f(�fT��\�fV���>f(��Y�f(�fT�f.�v5�H,�f��fU��Dt>�H*�f(���fAT��\�f(�fVՁ�lf���-S>�*��Y
O>�\�f(��X�f(�fT�f.�v5�H,�f��fU��D>�H*�f(���f(�fAT��\�fVʃ�f��f(��*��Y�=f(�fT�f.�v3�H,�f���=�=fU��H*�f(����f(�fT��\�fV��X�f�Ҹ�*��X��X��\
�=f/�v�\�1�A��,��Ðf���*�f/����56=�~->�V=�>=f(��X�f(��\
R=�^�f(�fT�f.�v5�H,�f��fU��D�<�H*�f(���f(�fAT��\�fV��Y�f(�f(�fT�f.�v5�H,�f��fU��D�<�H*�f(���f(�fAT��\�fV�f(���<f(��\�f(��^�f(�fT�f.�v8�H,�f��fU��D
@<�H*�fD(��D�f(�fET��A\�fV��Y�f(�f(�f(�fT�f.�v3�H,�f���=�;fU��H*�f(����fT��\�fV�f(��\��
<f/�f(�r#�\�;�\
�;�,���,���,‰��\��\
�;��f��\
�;�~-P<�5h;f(��^�;f(�f(�fT�f.�v3�H,�f��%A;fU��H*�f(����fT��\�f(�fV��;f(��Y�f(�fT�f.�v3�H,�f��=�:fU��H*�f(����f(�fT��\�fV؃�f���*��X��\����ff.�AWAVAUATUS��H��HH�L$L��$�L�D$ �D$dH�%(H�D$81��F
��H؍C���whH�D$4��A��M��H�D$��xz�DL$L��D��މ�M��fA(�����L�\$ L�T$H�t$A�<$L��L�����9l$4uA9���1�H�T$8dH3%(��H��H[]A\A]A^A_�A�H�D$0�T$,E��I����A��A��t�H��L��D��M��AWL�D$ �މ��D$���ZY��t�D�l$,A�<$H�L$ H�T$D�H�t$�D$������9l$4�Z���H�D$9�M���H�D$ D�(����E9+�4����-������AWA��AVI��AUI��ATUS�H��(�D$L�d$H�l$dH�%(H�D$1��
f�����t/H��H���M��AU�D$M��D������ZY��tθH�L$dH3%(uH��([]A\A]A^A_���DAUM��ATI��U��S��H��(dH�%(H�D$1�H�T$H�t$�D$�'����|$�L$��xp����$I��������)�)Љ�)ƒ�)�f��)�ǍD=��*�A�$1�f/���A�EH�D$dH3%(u9H��([]A\A]�fD���%I�$�щ���)�������)�)ȍP���ff.�AVA��AUM��ATM��U��S��H�� dH�%(H�D$1�H�T$H�t$�D$�2����D$�L$�p��D)�|k�J�%I�$����)�������)�)��ʍ�)�f�)�T�1���*�A�$f/���A�EH�D$dH3%(u8H�� []A\A]A^ù����)Ѻ%I�$����)�������)�)ȍP���UH��I��fD(�S��H��(dH�%(H�D$1�H�L$H�T$����H�T$H�t$A�8fA(��7���+\$���]H�D$dH3%(uH��([]����AUI��A��fD(�ATL��A��UL��SH��H��(dH�%(H�D$1�H�L$H�T$���H�T$H�t$A�9fA(�����D$�p��D)��|x�J�%I�$����)�������)�)���)�B�L"��x}�Ⱥ�$I������4
��)ƍ�)�)��3�MH�D$dH3%(��H��([]A\A]�@�����)Ѻ%I�$����)�������)�)ȍP)�B�L"��y��Ѻ�$I��ȉ������)ֺ%I�$��ȃ�)�������)�)ȍH�c����F�fDAWf(�A��AVM��AUATA��U��S�Ӄ�H��HL�L$L��$�L��$�dH�%(H�D$81���H�D$(H�H�$����f(�M��M���L$D��ډ�D������L�D$L��D���L$H�$A�}f(�����1�D9|$(t)H�t$8dH34%(��H��H[]A\A]A^A_�fDA9.u�H�D$9������@�ʍL�L$$�L�D$4L�\$�D$�4����L$H�$D��<�H�L$,)�f(�L�D$0|$4�g���1�D9|$(�L$L�\$�V����l$,��������AWfD(�AVI��AUATA����UH��SH��H��H�D$H�L$,H�T$(dH�%(H�D$81�H�t$$����D�l$$L�T$4L�L$0M��L��fA(ºE�}�L�T$D��L�L$�j����D$0L�L$L�T$D9���E�>D��)��Ⱥ%I�$��)��������MA�����A���%I�$D���D��)�������)�D��)…ҸDЉH�D$8dH3%(��H��H[]A\A]A^A_�f��D$L��M��D������E�.D��+L$0�W����Ѻ�$I��������)щMA����W���������%I�$D)����)�������)�)ȍP�P����<�ff.��AWf(�M��AVI��AUATA��U��S�Ӄ�H��HdH�4%(H�t$81���H��$�L�l$(Hڅ���I��L�ɉ�L�L$f(���D���L$����L�L$L��L���L$L��A�9f(�����1�D9d$(t*H�t$8dH34%(��H��H[]A\A]A^A_��A9.u�1�A9���ǐH�L$4���L�D$$H�D$L�L$�D$�D����L$H�L$0L��<�H�T$,)�f(�|$4�+���D9d$(�L$L�L$H�D$t1��S���D�l$,������f.�AVI��AUATI��UH��SH�H�����H��u1�[]A\A]A^ÐI����H�}L��L����d���H��u�H�E�8tPI��
��DH�H���U�L��L��H��H�EH�����H��u�H�}���I9�w�L���R�f����8"�f����H��@��t��H���@��H���ff.�H�H��u8UH��SH��H��@H����H��H����H�EH��t�H��[]�D�ff.�@AWH�5&AVAUATUSH��H�=U�"H��(dH�%(H�D$1��|���H���t�H��H�����H��u+H�L$dH3%(H����H��([]A\A]A^A_�DH�5�'H�=��"I���"���H�l$H����H��H����H��tL��H���+H�D$��I��H�5X%H�=��"H�D$�����H��L��H���X�H��L��%I��H�D$��7�H�5%H�=1�"H�D$!I���x���H��L��H����H��L��%H�D$H�D$!���H�5�$H�=��"H�D$yI���#���H��L��H����H��L��%I��H�D$y��H�5`$H�=y�"H�D$I������H��L��H���]�H��L���%I��H�D$�<�H���+�{JI��L�l$��H�5T&H�=��"H���g���H���_�H��H��H���!�H�5�#H�=��"�>���H���6�H�T$H��H����H�5�#H�=��"����H����L��H��H�����H�5n%H�=g�"���H�����L��H��H����H�5R#H�=6�"���H����L��H��H���{��C������AUATUH��SH��L�,�H����I��@H�;�H��t�N�H��H����H��L��H���$�L9�u�L�����H��L��[]A\A]�f���SH��H���t	�z�H�{([�p��H��t<@��t0H��t:H��tDH��$tN�@��u@����D�ÐH����f���f.���f.���f.�AWf(�AVAUATA��UH��S��H��HH�L$dH�%(H�D$81�����L�t$4L�l$0L�|$$f(�L��H��D���$��Ef�L���$H�L$L���D��*��E1�f/�f(�����}���1�D;d$$t)H�\$8dH3%(��H��H[]A\A]A^A_�fD1�9\$0����DH�D$(A�L�t$4H�D$H�D$,L�l$0H�D$�f�A��A��taH��L��f(�D���t$L�L$(M��D���L$��ZY���$t�\$(L�|$$f(�L���L���$����D;d$$t
1��-���fD�$�\$0������DSH��H��t@��t	H��[�@H���H��u�H������t�H�H��u�H��[��ff.�PXH�59 H��H���"H�81����f�H���"SH��H�0��H�����t[�H�l�"H��H�5 H�81������PX�1�H���^�ff.�ATI��USH��H�t$H�l$ H�|$H�\$0H��dH�%(H��$�1�H�\$�.�H��H�|$L�����H�T$H�T$H�|$H��H�T$����H�|$H��H9�t�0�H��$�dH3%(H��uH�Ġ[]A\��i��f���H��H�=.�=���ff.�f�����f.���H��H�=�
���ff.�f���H��H�=����ff.�f�����f.���H��H�=����ff.�f�ATI��USH��0dH�%(H�D$(1�H���D$SH�T%H:%M:%H�$H�]	H��~H��H��H��1�����H�HË�%L��H���E���H�T$(dH3%(u	H��0[]A\��7�����USH����wSH�Ӹu
H��t8H�H��H���B���H��H�=�H�����H��H��[H��]����H������1���f����f.���H������H����H��dH�%(H�D$1�@��t6H��H�xH���A��0H9�Hi��QH�D�+�H�_c�nt��H9�}�H���*H�$�����H�t$dH34%(uH������ff.��H��dH�%(H�D$1�@��t6H��H�xH����H9�Hi�ʚ;H�D�+�H�A���H9�}�H���*H�$�5w�V��H�t$dH34%(uH����|��ff.����USH������H�����H���"H�߽3*FH�0�k��H�����u+H��1�[]�H�k�"H�nH��H�0�D��H�����t�@H���P��f.�zbf(�fT
N%f.
�$w�
�$f/�w>f/�$w4�H��t�H��[]�f.���t�������@1�H�=��J���H��u��G���f.�AVAUATUS��H�� dH�%(H�D$1���~H�H��H�D$��t&H�FH�D$��t!�����_���H�D$H�|$����H�|$����xuH���]����tH�b�"H�5s H�81��q���H�D$H� �6L�`L�h���6H�����I���M�L��H��L��I��L��H���V��H���<H�5�H�=6�"��H�����H��H���f��H�5�H�=�"I���`�H���X��H��H���=��H��I��t6H�t$L�����H�5TH�=��"�$�H�����L��H��H������H��t6H�t$H���{��H�5H�=}�"���H������H��H��H�����H�L$dH3%(H����H�� []A\A]A^�fDL�`L�h������H�|$�-��H�|$����xt-H�֯"H�5H�81�����D��f�H�������u�H�D$H� tH�hL�p�g���f�H�h�����D��H�7�p�����H�/�`�����ATUSH��H��uH���H���@��u�H�H�Ѓ�H��t��u�I��H��t}L9�t?H�5��"H�����H�5��"L��H�������€u �E�uj�o e�ohmH��[]A\Ð�E����oM�oPU�oX H��] []A\�@���z���H������m���f.��ʀ�UH�PH�U�PH�E�@�U�P�@H�E(�E�U�E�h���H�*�"H�5�H�81��9��f�AWAVAUATUSH��dH�%(H��$�1�L�l$0L�l$���I���1H�D$H���@��H�D$H�XH� �RH�hL�t$ L��L���v��1�H��H�����H����1�1�H�����I��H9���L�|$L��H��L����H�t$L��H���"��H�����H�|$H�4L9�tH�t$�B��L�l$H�t$H9�v3�>H��t�f��;��H��H9�u�H��L��H)����H�t$L������L��H��$�dH3%(��H�Ĩ[]A\A]A^A_��H�H�D$����H�|$����H�|$����xt&H�n�"H�5�H�81��}��DH�X���H���7����u�H�D$H�XH� �������H9������H��L��H)�����H9�������#���H�|$L��H����H�|$H������H�|$I��L9�����������1��|���7�����H�
�����H�
����F
��A��H�1��V���ws��xw@���������Q������)�1�iҐ9���H�Hc�H�H��H��H�H��E�ɋ�B�TDH�E��~NA9�I�1�E��fD��A��A��@��tTD�к��Q��1���iҐA)�A������1��D�����Q������)¸k�d9��8����S��������Q������)¸k�d9��0�������AWA��AVA��H��"AUE��ATI�� UD��SH��(�D$���H��H�X �@uH�X M����L���t*L�cH����H��L��H�T$����H�T$�nfDI�$��H��u�L��H�T$H�L$�a��H�L$H�T$�t�H�H��u�L��H�T$�-��H�T$H��I��H�CtH�����{����H�C�D$`��A��f��A	�D�s�ZL$$�K�H��D�{D�kH��([]A\A]A^A_�f�AWE��AVA��AUATI��0UL��SH��(�T$H���"�D$����I��H�X �@uH�X M���L�����L�cH����L��L������D$D�s�CH����H�C(�D$`�L$xf��D�{ �ZL$�K�C��$������$�	ȋL$p��	ȋL$h��	ȉC��$���H��(L��[]A\A]A^A_�I�$��H���R���L��H�L$���H�L$��8���H�H���+���L�����I��H�CH��tH���������H�C�D$D�s�CH������I��A��t#H�k(M���
���H��L��������fDH�E��H��u�H���#���t�H�H��u�H�����H��H�C(H�������I��A���D��H����1�1�jE1�A��jjjjjj���H��H�fD��UH�5��"SH�����H���uZH���v1�1�jH�=�"E1�E1���i���H�5b�"H��XZH���u���o�oSPH��H��[]�H�=��"�<���H�5%�"H��H���:���o�oc`�ok �@h H�@(�S�
����PH��H��[]�f�SH��dH�%(H�D$1�H��u>H�5G�"H��H�$�J��H��H�T$dH3%(H��u~H��[�fDH����u H�����tE��t)��
t��f�H��H���H��t�H��$t�@��t�H�H��Hۃ�������t�H��HD��o��������AUf��I��ATI��U���SHc�H�\H��dH�%(H�D$1�f/ȸ��HF����H��t(I�]H�D$dH3%(uQH��[]A\A]�f�L�$$I��H�|-�L��*�"��L���+H��H�$�	��I�E��>��ff.�ATI��UH��SHc�H�� dH�%(H�D$1��J���H�TH��t I�$H�D$dH3%(uLH�� []A\�H�T$H�L$��*�K�qH�l$�}��H�L$��+H���f��I�$����ff.�AUI��ATI��USH��H��dH�%(H�D$1�H�6�"H�$K�qH��u"H�-�f��H�����H��"H��t�H��H�ߺH��H������I�EH���U���H��uHH���%H��H�$K�q���H���{��A�$H�D$dH3%(uH��[]A\A]�@H���P��A�$�����DSH��H�� �GdH�%(H�D$1�(�T
�.
vP�Z��s�{H�L$L�D$��������������D$��CH�D$dH3%(u}H�� [�f�H��g���H��uRH�{@��tH��x5�{�"�f�H�L$��<H�D$���H��t��N�"�U����f��ZC�F������ff.�f�SH��H�� �GdH�%(H�D$1�(�T
�.
vP�Z��{H�T$H�L$H�t$����D$�T$��C�D$����	ЉCH�D$dH3%(uvH�� [�f�H��g���H��uRH�{@��tH��x5�{�"�f�H�L$��<H�D$���H��t��N�"�U����f��ZC�F������ff.�f�ATUSH��H�� �GdH�%(H�D$1�(�T
�.
�Q�Z��s�{H�L$L�D$��������������;@��tj�sD�C ������?D�L$����?��i�k�<��D)��=Q����A���D�K�;H�D$dH3%(�XH�� []A\Ð�CD�C ���E���A��D[��A������A��QDO�D�غų��E���A����D�������%>���B�4	��������A��E)�Ei�E)�D��E���D���D��)�k�<��A)���D)�D	��	�	ЉƉC����H��_���H��uzH�{@��t8H��xU�s�"���fDA������A�ÀQ�-���@H�L$��<H�D$�{��H��t��&�"�4���f�f��ZC�������ff.�f�����€t��SH��t�C [��1��D����C [�ff.�SH��H����ƒ���u]��t)��H�C�f���Z��KH��[�f��D$�E�����D$��t����H�C��f.���tLH���D$�����D$H�C��u��f���Z��SH��[�f������f��D$�����D$�ff.�f�ATH�5g�"UH��SH�� �D$�s��H��H���������H��E1�E1�j�1�1ҾH����H�5�"H��XZH���&���o�oSH�pPH��t@��uH���/��H�l$H�|$H�5Ε"�����D$H���k���H�D$H�� []A\�D�S��H�����H�5��"H��H������oI���ocH�p`�ok h H��t@��tI�t$(H���q����^���H�����I�t$(H���S����@���ff.�f����t�"���ff.�@���\�"����ff.�@�����_���ff.�@�����?���ff.�@��S��xhH��tR��u^H�>����f.�z.f(�fT
�f.
Cw1�
Af/�w
f/;vH�=e1������(H��[����1��S����H��H�5�"�,����€t��tf��Z@H�����fDH��H�D$����H�D$f��Z@H�����@�SH���ƒ���u��t�C[����u������C[�f������C[�fDATI��USH��H��dH�%(H�D$1���ƒ���ug�����kH�C�������$���H�CH��t�uH��L���j��;kt�#�H�D$dH3%(��H��[]A\�D�����kH�C���y���-H��H��H�$�n���s��%��S��$��t���fDH���+H��H�$�3���k%��E����H������kH�C�������H���-H��H�$�����K��%��S���f�H���X����+������ff.����tzUSH��H���t]�[ �؉����1Ã�)Ã�+�a���ų��H��A�����H�lj�H�5����i�)É�[A��1�A�Љ�]A���p��������f��H�=��o��ff.�@��H���S���H��H��H� tH�BH���f.���H��H�5!�"�<��H��H������USH��H��(dH�%(H�D$1������o�GG ��=Q������C(�T
'.
@vn�Z�H�L$H�T$��H�t$�����D$�L$�S��C�D$����	ȉу�?	ȉс����	�	ЉCH�D$dH3%(��H��([]�H�{�w�H��ubH�{@��t(H��xE���"�l���fD���B����H�L$��<H�D$���H��t��N�"�'����f��ZC�������ff.�f�USH��H��dH�%(H�D$1���ƒ���ul�����C�k(�T
�	.
�	vY�Z�f(�fT
�	f.
9	wof��1��*�f/���H�t$dH34%(��H��[]���u��g����DH�{�G�H���~H�{@��tDH��x^�W�"�D1�f.N�"���E��f����2���fDH���<H�$�V���H��t���"����@f��ZC�
����m���ff.�f���H��H�5a�"�|���H�������H�H�����fD��H��H�51�"�L���H���d�����H�H��H�Ѓ����SH�5�"H�� dH�%(H�D$1�����H�Ë��u2�t>�C����H�L$dH3%(H�H�D��H�� [�@�u�H�������f��C(�T
�.
v@�Z��{H�T$H�L$H�t$����D$�T$�C�D$�����	ЉC�p���H�{�o�H��uJH�{@��tH��x-���"띐H�L$��<H�D$賿��H��t��^�"�m����f��ZC�^����ͽ��ff.�f���SH�5Č"H�� dH�%(H�D$1��˾��H�Ë��u2�t>�C����H�L$dH3%(H�H�D��H�� [�@�u�H���T�����f��C(�T
�.
�v@�Z��{H�T$H�L$H�t$�M���D$�T$�C�D$�����	ЉC�p���H�{�/�H��uJH�{@��tH��x-�C�"띐H�L$��<H�D$�s���H��t���"�m����f��ZC�^���荼��ff.�f�USH��H��dH�%(H�D$1����u1H�o�ti�sH��H����H�$H�L$dH3%(uQH��[]èt��H�o�…�u�H���g��D�����H�k�ƒ���u��f.�H���8��������USH��H��(dH�%(H�D$1�H�l$H�D${J�0���H���-H���[���H�������uH�L$dH3%(uIH��([]��H��H�D$�S��HcSH�D$��t�H�TH��+H��H�T$������0�����ATUSH��H��dH�%(H�D$1��,������H��H�x|H�����MbH9�}Hi��H�l����H�[(H����H���|I���/H��L��H�$���c���H��L���+H�$�J���H���>DH�V-���H9�}��H���*H��H�$�����H����o���H�t$dH34%(H��u	H��[]A\��&���fD��AWH�5#�"AVAUATUH��SH���/���H��H��贽��I�Ƌ��ukf���ZK�L$E1�A�E1�H���H���H���`���AWE��I��AU�D$H��L��H��H�5���膸��H��([]A\A]A^A_���t,f���ZS�T$�t>D�{ H��L�k(�I���D�c�H�����f���Z[�\$���S����u�H���s�D�{ ��u��<���D��SH��H�� dH�%(H�D$1���ƒ���u)��t5�C����H�t$dH34%(��H�� [�f���u������D�G(�T
.
*v@�Z��{H�T$H�L$H�t$����D$�T$��C�D$����	ЉC�y���H���H��uJH�{@��tH��x-���"띐H�L$��<H�D$�ӹ��H��t��~�"�m����f��ZC�^������ff.�f���SH��H�� dH�%(H�D$1���ƒ���u)��t5�C����H�t$dH34%(��H�� [�f���u������D�G(�T
�.
�v@�Z��{H�T$H�L$H�t$�}���D$�T$��C�D$����	ЉC�y���H��_�H��uJH�{@��tH��x-�s�"띐H�L$��<H�D$裸��H��t��N�"�m����f��ZC�^���轶��ff.�f�USH��H��dH�%(H�D$1���ujH��"H�$�H��u'H�-���H���û��H��"H��t�H��H��H������H�T$dH3%(uH��[]�D��H���ۻ��������@��H��H�5�"�,������€t��tHc@ H�|H���)���f�H��H�D$��H�D$Hc@ H�|��USH��H��H�5 �"dH�%(H�D$1���ucH�ď"H�4$H��u$H�-�@�H���ú��H���"H��t�H��H��H������H�T$dH3%(uH��[]�DH�����������f�ATUSH��H�� dH�%(H�D$1������g����tH��������H��H�H9��H�L$��*H��H�D$H�D$�a���H�L$��-H���J����H���=���H��H�t$dH34%(H����H�� []A\�f.�����H�ǁ���H���ul���H��H�L$��+H�D$�۵��H��A���tL�c(L���A�H��u�L���D���H��H�L$��+H�D$蘵��H���V���H��踺���C-��t�H�H�H�x�t���H�<�������^���H������葳�����H��H�5��"謴��H��H���`�����UH�5t�"S�H��(dH�%(H�D$1��u�����u H�L$dH3%(H����H��([]�f�H��H�D$����H�D$�P Pxf��������QOѽ��tH�h(Hc�H�|�,���H��H����H��u�H������H��H�L$��+H�D$�h���H���`����€Q�蓲����ATH�5��"USH��dH�%(H�D$1�蘳��H��H�������tH��$�H�H9�}_H��H�$>I���H���-H������H���շ��H���u?H�T$dH3%(H����H��[]A\�DH�������薷��H���t�H��趸��HcC��uNA���tL�c(L�����H��u�L�����H��H���+H�$�A���H���l���f�H�|���H��H���+H�$�
���H����C���USH��H��dH�%(H�D$1���ujH�+�"H�$�5wH��u'H�-p���H���S���H���"H��t�H��H��H��蔲��H�T$dH3%(uH��[]�D��5wH���k�����褰��@�����tH�G(H���F���fD��H��H�5�"蜱�����tH�x(H������D��ATUSH��H�� dH�%(H�D$1���ƒ���uFL�g����HckL���N�H��t9H�D-H�L$dH3%(�NH�� []A\������L�g�f�H��������t�<�H�T$��L����H�D$�fD�C(�T
��.
�vp�Z��{H�T$H�L$H��藺���D$�T$Hc,$�����	Љk�C�/���D�;��L�c�ƒ�������������H�������H�{�G��H��uRH�{@��tH��x5�[�"�j���fDH�L$��<H�D$胰��H��t��.�"�5����f��ZC�&���蝮��ff.�f���H��H�5�}"謯��H��H��� �����D�A���u1�ËGA��������S�_����_ ����������QO؉غų��A���A����A�������D���>D������	�A��E��E)�Ei�D)ۉ�A������[��)�k�<��A)�D��D)�D	��	�	ЉG����?�fD����?Ð�ÀQ�h���D��D�A���u1�ËGA��������S�_����_ ����������QO؉غų��A���A����A�������D���>D������	�A��E��E)�Ei�D)ۉ�A������[��)�k�<��A)�D��D)�D	��	�	ЉG�����fD����Ð�ÀQ�h���D��D�A���u1�ËGA��������SD�W����DW ��A������A��QDO�D�кų��E���A����������A��%>D�F��ʉ�A��	Ѻ����D��E)�D)�A��i�A)�D��D���D���D��)�k�<��)É�[	�D	�	ЉG��?�D��?�@A�€Q�d���ff.����UH�5�z"SH��HH�|$dH�%(H�D$81��Ŭ��H��H���������H���*���H��H�D$ ��H��H�H�DH�D$(�I�H�H�DH�D$0H�N�"H��u*H���f.��H��胰��H�$�"H��t�H��H�M�"H�L$ �H�8軬��H�T$H�T$H�T$H�L$8dH3%(u=H��H[]�D�8�"H�|$�^�H�5�y"H��H���ܫ��H�l$H������蚪��f.���SH�5�y"诫��D�A���u�[��H�Nj@A���������_����_ ����������QO؉غų��A���A����A�������D���>D������	�A��E��E)�Ei�D)ۉ�A�������)�k�<��A)�D��D)�D	��	�	ЉG��[��H�D���ÀQ�j���ff.�f���SH�5�x"诪��D�A���u�[��H�Nj@A���������_����_ ����������QO؉غų��A���A����A�������D���>D������	�A��E��E)�Ei�D)ۉ�A�������)�k�<��A)�D��D)�D	��	�	ЉG��[��?H�D���ÀQ�j���ff.�f���SH�5�w"诩��D�A���u�[��H�Nj@A��������D�W����DW ��A������A��QDO�D�кų��E���A����A������D���%�F���>�����A��	�D��D)�i�A)�D��D���D���D��)�k�<��)�D��D)�	��	�	ЉG��?[H�D�f�A�€Q�f���@ATUSH��H�|$H��tsH�|$H���0���H�D$L�`H��taH�ڀ"H��u&H�-��fD�H��蛬��H���"H��t�H���G���H��H���,���H��t�t"H�I9�w$H��[]A\Ð����f�H���x�����H��H�\}"L��H�5�H�81��h������ATUS������������Hc�H��L�d��0������u'��u�H�]H�����H��[]A\����f.�L��舤��H�ƃ�u��ff.���ATUS���������a����Hc�H��L�d�谧�����u'��u�H�]H���f���H��[]A\麧��f.�L������H�ƃ�u��ff.���ATUS������������Hc�H��L�d��0������u'��u�H�]H�����H��[]A\�*���f.�L��舣��H�ƃ�u��ff.���ATUS���������a����Hc�H��L�d�谦�����u'��u�H�]H���f���H��[]A\�ʩ��f.�L������H�ƃ�u��ff.���ATUS������������Hc�H��L�d��0������u'��u�H�]H�����H��[]A\���f.�L��舢��H�ƃ�u��ff.���ATUS���������a����Hc�H��L�d�谥�����u'��u�H�]H���f���H��[]A\�ڨ��f.�L������H�ƃ�u��ff.�ATUS��H��dH�%(H�D$1��������Ѧ���Hc�H��L�d�� ������u_H�}H�<$��tH�m��u�������H������H�<$�]����xt7H��y"H�5��H�81�迡���L���@���H�ƃ�u��a���H���h�����u����H�<$HD�H��輥��H�L$dH3%(u	H��[]A\�辢��ff.���������SH�5�q"H��0dH�%(H�D$(1�諣��H�Ë��t���H�SH�$��tn���HcSH�T$1Ҩ�uwH�T$���tH�C(H�� H�D$�"���H��xeH��������?H!�H�L$(dH3%(H�D��H��0[Ð�u�H���4��HcS�H�T$1Ҩ�t�H��踨��HcS�x����H��H	��f�H������H�SH�$���(����@H������������l���ff.��AUATUH��SH��H��(dH�%(H�D$1�����H����H�D$H��{"H��u"L�%��f��L���c���H�l{"H��t�L�l$�H��H��L��蟢��L��H�߾%I��H�D$�~���H�EH�T$dH3%(L���:H��([]A\A]����tSH�C�H����M���H������@������7���H���]����D$�����L$f.�����tL�
���H�����
t-����H���,�������H�H�������H���H��
t?H��z"H��u!L�%Z���L���3���H�dz"H��t�H��1�1�H���x���H��H�EI�����D���i���H��菣���D$�4����L$f.��F����n����;����d���@��AUH�5cn"ATUSH��HdH�%(H�D$81��f���H��H���{��������C(�T
������.
����f���ZȨ���{L�l$,L�d$(H�l$$f(�H�L$L�D$ ���.����C(�T
�.
8����Z��D$L��L��H��x�蹩���|$,�R1��P�.
��v/f���ZȨ�j���H���L$�I���L$�Q���fDH�{�o��H����H�{@���0H���M�
w~"���u�������C(�TZ�.s���Z��{L�l$,L�d$(�L$H�l$$L��L��H������|$$�L$�{�D$(�T$,�����	ЉC����ƒ���t�����K������u�Ⱥ��Q������)�k�d9�u!�Ⱥ��Q������)�iҐ9�������H�t$8dH34%(��H��H[]A\A]����u�H���D���x����H�L$0��<H�D$0苞��H��������
2}"���DH�{����H��urH�{@��txH������|"���f�����������Q���iҐ)ց���'���1��%���@f���ZK�3���f.�f��ZC���f�H�L$0��<H�D$0�Ý��H���k����j|"�O���DH�������d���H�{�L$�	���L$H��uH�{@��tLH��xu�|"����f�f��ZC���f��Ⱥ��Q������)�k�d9��F������DH�L$0��<�L$H�D$0�����L$H��t���{"�T����(����AVAUL�-��ATA�UH��SH��H��H��ulH�=q"H��H�0����H����L��H�=wz"��H��1�1�H��胜��L�5Tq"H��H��I�6�ޝ��H��uGE���`E1�H��t������H������X�����iL�5�p"H���ʼ��I�6H��I���|���H����L���;���H�ètL���<����tH�H�H����H�5��H�=�y"�%���1�1�L��H��趛��L��H��H���x���H���bH�=V�蓘���QfDH��H���H�������H��$����������������H��蓝�����f(�����Y�f/�wef/�w_f(��L$�����L$�,�f��*��Ef.�z�t01�H�=������f�H��訜���ud@1�H��[]A\A]A^Ð�������H�H�CH��vH��u�iۀQ��]H��[]A\A]A^�f����������f�H�H���QH���w��EH���[]A\A]A^��L����d���H�H���QH=��N����]H���[]A\A]A^�f�H��u�H��螛��虷��f���u�H���H��u��	���f.���AWH�5g"AVAUATUH��SH������H�Ë��t��nf��ZC蠛���I��€�����	HcC L�lH��L�s(脞��HcCL�|��‰ƃ��������>HcSH�T��t��	H��H�sL��M��ATM��1�����ZYH��tN@��uHH�UH�у�H��t8��t3H��H��H�D$�ؖ��H�D$H��t�uH�H�у�H��t��H�H��[]A\A]A^A_�fD��A�A�A���tF�HcS�Ɓ��:���@H������HcC �L�l�€�����A�A���u�H�������H��������H��H�T$�C��H�T$���f��{����Ɓ����ff.��AWf��AVAUATI��UH��S���H��dH�%(H�D$1�f/ȸ��HF�@��tH������?H��H�H9���I���+H�$�$L��L�|�U���L�<$I��H�Gu"H��u#H���H���˚��H�$u"H��t�L��L��H������I�$H�����H��tkL���Ú��-h�EH�D$dH3%(��H��[]A\A]A^A_��HhH��xMH�H��H�tH��I�4$HEʍ����]�DL��L���%L�<$�w���I���t����H��H�H��H��H)�H�DH�K�H��臔�����ATUSH��pdH�%(H�D$h1����PH��tW���BH�>薓��f.�f(�z*fT��f.�w2��f/�w
f/
�vH�=6�1����@�
��H�\$(�L$H���%����L$H������L$���H�t$0H��蝒���L$H�����D$@H�T$H�t$ ���D�d$<�L$�X�D$DlH�H�|�e���H��A��E��j��s"1�H��L$,H�t$0�^���H�5Wb"H��XZH���j����L$H��f(�����H��H�L$hdH3%(uH��p[]A\ú1��@������H�=������H�=��������SH��H��H�� dH�%(H�D$1�H�i"H�0���H����������H�T$H�t$H���|����L$��xl��t?�Ⱥ��Q������)�iҐ)у�H���H�|$dH3<%(��H�� [Ð�Ⱥ��Q������)¸k�d9�t��������t/����Q����iҐ)ֺ���HD��D�Ⱥ��Q������)¸k�d9��b����趑��H��g"H���H�5d�H�81��7������SH��H��H�� dH�%(H�D$1�H��g"H�0蒔��H�����tG���H�T$H�t$H���0����T$1�����H��?H��?��H�L$dH3%(u%H�� [�H�,g"H��H�5��H�81�蔏�����ff.�@��AUATUSH��H��(dH�%(H�D$1�H�pp"H��u$H�-��@�H�����H�Lp"H��t�1�1�H��H���@���I��H�&p"H��u*H�-�f.��H��賕��H��o"H��t�1�1�H��H�����H�����H��H��o"H��u*L�-��f.��L���c���H��o"H��t�1�1�H��H��訑��H���p������H�T$L��H�t$H�����H��A��A��j�p"1ҋL$H�t$ H�==p"註��H�5�^"H��XZH��贐���|�H���4��H��H�L$dH3%(uH��([]A\A]��Q����AWf(�I��I��AVAUM��ATM��U��S��H��HfT
��H��$�L��$�L��$�H�$dH�%(H�D$81�f.
����@���H���
Oo"H�H=-��H=����
$o"f��f.���fDf(�L��L��L���L$�x����L$f��f/��T�C
��H؍C����cA�$1�Hc˃���H�H�H��H��H�H�I�����T(H���(9�� A�]�A�.H�$A�uM��f(�A�<$���g����f�f(�f��f.��>����8���L��L�\$�D$L�T$�P���H��L���AW�D$��M���L�L$4�~���ZY�Å���L�\$HcD$$L�T$H�$H�|L��L�$L�T$�ٿ��L�$I�;蝽��L�T$H����A��\���u���H�t$(L��L�������+fDA�<$��M��L�������L$������1�H�L$8dH3%(����H��H[]A\A]A^A_�fDH�L$�H�L$0�<�D$H�D$0H�|$�c���L�T$�D$H���
m"L�\$��������DA�.�_���L�����A�$�d����Z���f.�ATI��H��UH��SH��H��@dH�%(H�D$81��w���H�߃��D$��蠑��H�������荑��H�L$(H����L��H�T$,RH�T$0RH�T$4R�D$(��L�L$8L�D$4�v���H�� ���t�t$ H�|$(H�T$0�v���H�T$0H�t$8dH34%(H��u(H��@[]A\�D�����y���fD�����V����a����AWf(�I��AVM��AUM��ATI��U��SH��H��8fT
��dH�%(H�D$(1�f.
���@���-H���
zk"H�H=-��H=����
Ok"f.
��{sDf(�L��L��H���L$���L$��L��A�<$L��f(��-�����H�L$(dH3%(����H��8[]A\A]A^A_�fDf(�f.
l�z�u�H���D$����D$��L��H�T$���˧���Ņ�t�HcD$L��L��H�|萼��I�?�X���H��usA�E����u���H�t$L��H������K���fDH�L$ ��<�D$H�D$ �}����
-j"�D$H���:�������H���(���A�$��芉��f.���AVAUATUS��H�� dH�%(H�D$1�����L�&L�n����A�H�-�_"L��H�u�\���H�������H�uL���D���H����������3*FL��LD����L�����:���f.���f(�fT
4�f.
��w�
��f/�w|f/��wrH�L$H�T$��L��L�L$L�D$�4�����H�H�Ѓ��(fD��tR����誋��f.�1�H�L$dH3%(u.H�� []A\A]A^ÐH�=d�1���f��w���L�v�������ff.�AWf(�I��I��AVM��AUA��ATA��USL��H��HfT
D�H��$�L��$�H��$�H�$dH�%(H�D$81�f.
����@���xH���

h"H�H=-��H=����
�g"f.
r���@L��f(�L��H���L$�8�H���;D��U�L$D��M��L�L$L��f(���A��XZH�\$8dH3%(D���DH��H[]A\A]A^A_�fDf(�f.
��z�u�L��L�\$�D$L�T$�X���H��D��M��U�D$��L��D��L�L$4�u���^_A�ą�t�L�\$HcD$$L�T$H�$H�|L��L�$L�T$���L�$I�;觶��L�T$H�����M�f���u���H�t$(H��L���"�����DH�L$�H�L$0�<�D$H�D$0H�|$軇��L�T$�D$H���
]f"L�\$����[���DL���X�������輅��ff.����AWAVAUATUS��H��8dH�%(H�D$(1���� L�&L�nL�v���A�H�-�["L��H�u膈��H�������H�uL���n���H�������H�uL���V���H����������3*FL��LD����L�������L�����B���f.���f(�fT
<�f.
��w �
��f/���f/����H�L$ H�����H�D$$L��PH�D$(PH�D$,PL�L$0L�D$,�q���H�� ��H�H�Ѓ��!���tK����蒇��f�1�H�T$(dH3%(u/H��8[]A\A]A^A_�H�=S�1����f��f���L�~����
���f.�AVI��AUATI��L��UH��SH��H��PdH�%(H�D$H1�� ���H�߃��D$��I���H���A�����5���L��A�������!����D$fT����f.a���A����L���
�c"H�H=-��H=����
�c"f.
;���DH�T$H�t$0f(�L���L$��H�D$(D���P��H�D$,P�L$�|$(f(�L�L$0L�D$,蜖��ZY����H�\$8�t$$H�|$0H��茴��H�D$8H�L$HdH3%(�mH��P[]A\A]A^�fD�L$f.
���T����N���L�����H�T$(D���R��H�T$4R�D$��L�L$0L�D$,����_AX�¸���{���HcD$,H�T$$H�t$0H�|艴��H�|$0�O���H�����t$(����u�v�H�\$8H�T$L��H���������@�k���L��A�����&����W����!���f��K������fDH�L$@��<L��H�D$@�@����
�a"H������'���f.�L��H�\$8����D$�}���f.�������1����AWAVAUATI��USH��H��XdH�%(H�D$H1�H�e\"H��u)H�-��f��H���C���H�<\"H��t�H�����H��H���Ԁ��H��H��t+H�T$HdH3%(H���YH��X[]A\A]A^A_�DH�5C�H�=�["蝙��H��蕄��H��H���z���I��H��t3H�5[�H�=�["�n���H���f���H��H���K���I��H����H�5�H�=h["�;���H���3���H��H������I��H��t_H�5��H�=1["����H������H��H������I��H��t0H�5��H�=�Z"�ݘ��H���Ճ��H��H�����H���H�5X�H�=�Z"識��H��襃��H��H�����I��H���5H�5+�H�=Z"�z���H���r���H��H���W��I��H���
H�5�H�=<Z"�G���H���?���H��H���$��I��H���H�5ҿH�=�Y"����H������H��H����~��I��H��t0H�5��H�=�Y"���H���݂��H��H����~��H���8H�5a�H�=�Y"赗��H��譂��H��H���~��H���H�L$@��-H��H�D$8H�D$@����H�L$8��%H�����I��H���p���H�5��H�=�X"�8���H���0���H��H���~��I��H���=���H�5�H�=�X"����H�����H��H����}��H���
���M��L��L��H�����H�����f.�L����|��L���D$�z����D$H�L$H�T$(L�L$$L�D$ ��L������0����t$ H�|$(H�T$0����H�D$0H������H���y���@H�5�H�=:X"�=���H���5���H��H���}��I��H������L���E|��L���D$�ו��L��A���̕��H�L$(H��L��H�T$,��RH�T$0RH�T$4R�D$(D��L�L$8L�D$4��H�� ���^����t$ H�|$(H�T$0�U���H�D$0H���:����7����H�5(�H�=JW"�}���H���u���H��H���Z|��H�����������H�5�H�=RW"�E���H���=���H��H���"|��I��H������H���=���H���LE�����@H�5��H�=�V"���H������H��H����{��I��H���
����H���8���H���LE�����L��L��L��H���/�H���9�������M��L��L��H���Z���H����������F{��fD��AWAVAUATUSH��H�T$dH�%(H��$�1������]�
���$1�H�t$@�,z�������H�D$@H�D$8�}��H�t$PH�|$8�y��H�����D$dD�d$PH�\$xD�l$\��l�D$`D�t$XD�|$TH�l$H��A��<�D$�;DD�H���QH=���Hc�H�T$,H�t$0�l�H�|	�:��T$,H�@��Z"H���L�D-H��A��1�jATAWAVAU�D$@PRH�t$p1�H�|$H�<���H��@H�5I"H��H���{���$H��虱��H��H��$�dH3%(��H�Ę[]A\A]A^A_�D��uWH�>��x���$����H�=u�1��L$1��<x���L$�
���H���D$�T$�~w���D$�T$I���&����1��|��H�=��d~��H�=Թ�X~���#y����AWAVAUATUS��H��HdH�%(H�D$81����L�&L�nL�v����A�H�-O"L��H�u�{��H�������H�uL����{��H�������H�uL����{��H����������3*FL��LD��f���L�����\���L�����w��f.�f(���fT��f.,����&�f/���f/
�wwA����L��f(�H�H=-��H=�~x�
bX"�`���8�����{��fD1�H�T$8dH3%(�H��H[]A\A]A^A_�H�=Ϸ1��]v��f���r���f(�f��f/���H�L$(H�����H�D$,L��PH�D$0PH�D$4PL�L$8L�D$4��H�� ��H�H�Ѓ��n���H�L$0��<L���L$H�D$0��x���L$H��f(��	����
sW"�f�����H�T$H�t$(L������|$H�L$��L�D$��赡����H�H�Ѓ�����v��L�~����fD��AWAVAUATUH��H�5�E"SH��H��HdH�%(H�D$81��w��H��uH����t�����u�H�I��H�Ѓ�H��t��u�H��t6H��t@��uH�EH�ƒ�H��t+H�4L"H�5�H�81��t����t�H���w��뻐�� ��H����H����H���H����H�EH�H�xH�T$(蝎���D$$H�EH�E uH�E H�x�~���A��H�EH�E uH�E H�x L�`�\���A��H�EH�E ��H�x(�t���$A��uwE��u^L���v���H��tQE��uLH�|$(�B���I�FH��t�uH��H���jt���D$$f��I�F�Z,$A�A�F�An�xf�L���0��u��H�C I��H�|$(���I�FH��t��1�D$$E�nL��A�F轓��I�F(H��t���E�~ f��I�F�Z$A���AVH�EH�ƒ�H��t*��t%H��H���t��H�H�ƒ�H��t��H�DH�L$8dH3%(H����H��H[]A\A]A^A_�f.�H�EH����H���8H����H�E ����DH�E �p����H�AT"H����H�EL� L�hH�@H�$H�D$0H�D$H�L$L��H�T$0�+��6u��H�L$��%H�D$0H��I���u��H�5d�H�=�M"I���]���1�1�L��H����t��L��H�D$葕��H�L$��%H�D$0H��I���t��H�5�H�=HM"I������1�1�L��H���t��L��H�D$�̕��L��I���1���H�5[�H�=M"I���ˋ��1�1�L��H���\t��L��H��I���{��H���uH�|$H�T$$H�t$(���H�|$�W���L��A���L���H�<$A���q���$A��Q�A����I����5wvA���Q=���$f.�z6f(�fT_�f.ߺ������ٺf/�wf/
Ӻ�����H�=��1��p���%���$$�l���DH�1R"H���OH�E ���fDH��H����p����H��H����p�����H�L$��<L��H�D$0�s��H������H�L$H�5�Q"�L��H�D$0�5w��r��H���������H�=����o���z����H�=ݱ1�E1��o������f�H�T$0H�EH�8H�L$0��-H�L$�{r��I��H�EH�E uH�E H�@H��H�$H��F"H�0�s��H��u#��P"H�$����t��P"�Ht��H�$H��P"A����f�H�T$0H�E �k���H�[F"H�5g�H�81���n���%p��H�=�P"H�55�1��n����UH��H��SH���r��H��H������H��H��H��[]�?���ff.�@��UH�5�>"SH��hH�|$dH�%(H�D$X1���p��H��H���������H���:���H��H�D$ 蝷��H��H�H�DH�D$(�Y����H�H�DH�D$0����.H�T$8�����H�T$@���tH�{(����H�D$�����H�L$�+�p���H�D$H��€t���HcC H�DH�D$PH��N"H��u"H��f��H���t��H��N"H��t�H��H��D"H�L$ �H�8�Kp��H�T$H�T$H�T$H�t$XdH34%(��H��h[]ÐH���u���C��?H�|�7����H���u���C����?H�T���DH���hu���C����H�T�����hN"H�|$莦��H�5�<"H��H���o��H�l$H���=����H������HcC H�D�����m��ff.�f���H��<"H��� ��r��H�P �@uH�P H�H�BH�BdTJ�BH���fDS�H���ƒ���u�����C[�@�����{ �t!{�C����x^��Q[������D�S�����i��у�?����?k�<�ʉ�)�x7��Q~	��Q����K��C��y���[�f�����C�m������Q���D�ۡ����\���@��H���#������|.�H�%I�$H������)�������)‰�)��D������%I�$H��)�����)�������)�)ȃ��f���H��������|6�H�%I�$����)�������)‰�)к��D�H���������%I�$)�����)�������)к)ȃ���D�H�����H��H�5�:"�l��H���d���H��H�H�D����H��H�5a:"�|l��H�������|?�H�%I�$����)�������)�)��ʃ���HE�H���D������%I�$)�����)�������)�)ȍP�D��H��H�5�9"��k��H���d������|?�H�%I�$����)�������)�)��ʃ���HE�H���D������%I�$)�����)�������)�)ȍP�D��H��H�5A9"�\k��H���������|?�H�%I�$����)�������)�)��ʃ���HE�H���D������%I�$)�����)�������)�)ȍP�D��H��H�5�8"��j��H���D������|?�H�%I�$����)�������)�)��ʃ���HE�H���D������%I�$)�����)�������)�)ȍP�D��H��H�5!8"�<j��H��������|?�H�%I�$����)�������)�)��ʃ���HE�H���D������%I�$)�����)�������)�)ȍP�D��H��H�5�7"�i��H���$������|?�H�%I�$����)�������)�)��ʃ���HE�H���D������%I�$)�����)�������)�)ȍP�D��H��H�57"�i��H��������|7�H�%I�$����)�������)�)��ʃ�H�H�����D������%I�$)�����)�������)�)ȍP��H�H����Ð��H��H�5q6"�h��H���������|7�H�%I�$H������)�������)�)���Hc�H�D�fD������%I�$H��)�����)�������)�)ȍPHc�H�D�f�USH��H��dH�%(H�D$1����t�t=H�kH���a���H���H���t���H�$H�L$dH3%(uH��[]�f��{�����tf��@��H��H�5q5"dH�%(H�D$1��|g��H�$1*FH���\����H��-H����g��H�T$dH3%(uH����
f��ff.�f���H��H�55"dH�%(H�D$1��g��H�$>IH������H��-H���wg��H�T$dH3%(uH����e��ff.�f���H��H�5�4"�f��H��H�������AVH�5s4"AUATUSH��H��0dH�%(H�D$(1��qf��H��H�����H��I���K����u7H�=��H������H�T$(dH3%(��H��0[]A\A]A^��H���xj��H�H='�$~�H=��$~6H=*%~nH=�X%~vH=�%�R��A�HA��DM�LM��A�MA�KL��H���j��H��D��Lc�H���1�M)��b��H���B���f�A�TA�w�f�A�SA����=d��ff.�f���USH����wKH�Ӹu
H��t0H�H��H���B���H��H�����H��H��[H��]��e��fDH���f���ɺ1��
g��f.�AWAVAUATUSH��H��hH�|$dH�%(H�D$X1�H�C:"H����H�H�$E1�H�D$�� ��f�H����I9��xH��J��H� ��H��L�x1�E1�M�g�4�H����I9�}4L��J�4�H���c��H����I����H�I��� u�M;o}I�G ��H9,$}	L�t$H�,$H�z9"I��H��� �Z���L;p}H�@ J��H� �d���H�@ �_���H�<$�{H�@ H�L$H��H� ��H��L�8�I���}L�`I�$�� ��I�D$�H9$�XH�=�>"H�5���C{��H���;f��I9��
H�={>"H�5c��{��H���f��I9��<I�D$E1�H�$�`H����I9���H�$N�4�H��L����a��H���qH���OL��I����e��1�1�H��H���Nc��L��H��H���pc��I�$�� u�M;l$�*I�D$ �H�50�H�=W="�rz��H���je��H��H���Oa��H����H�5�H�=="�Bz��H���:e��H��H���a��H��u+H�5¡H�=�<"�z��H���e���H��H����b��H�=�<"H�5s���y��H����d��L9���H�KA"�D$� 
��
H�T$H�H�H9��|H���}H�5y�H�=$<"�y��H���d��H��H���l`��H��uFH�5_/"H���wa��H���_���H�56�H�=�;"H���Iy��H���Ad��H��H��H���b��H�5��H�=�;"�y��H���d��H��H���_��H���H�5z�H�=b;"��x��H����c��H��H����_��H����H�5A�H�=";"�x��H���c��H��H���_��H�5�H����H�=�:"�x��H���c��H��H���j_���t,H��wKH�L$XdH3%(H���H��h[]A\A]A^A_�H�L$P��>H��H�D$Pw��`��H��t�H�5��H�=_:"�x��H���
c���wH��H����`���H��H�<$�B������H�=5:"��w��H����b���H��H���`���K���H�@ �%���H�5#�H�=="�w��H���b��H�5�H�=�<"I���w��H���yb��H�5�H�=�<"I���cw��H���[b��H�5�H�=�<"I���Ew��H���=b��H�5�H�=w<"I���'w��H���b��H�5��H�=Q<"H���	w��H���b��H��M��M��AWH��L��H��1��^��ZYH���f]����H��1��^��H���J]��H�5+�H�=�;"H�D$8�v��H���a��H�5�H�=�;"I���v��H���|a��H�5�H�=�;"I���fv��H���^a��H�5��H�=p;"I���Hv��H���@a��H�5�H�=J;"I���*v��H���"a��H�5��H�=$;"H���v��H���a��H��M��M��AWL��H��H�ƿ1��]��^_H���i\����H��1��]��H���M\��H�5.�H�=�:"I���u��H���`��H�5�H�=�:"H���u��H���`��H�5��H�=k:"I���ku��H���c`��H�5��H�=E:"I���Mu��H���E`��H�5�H�=:"H�$�.u��H���&`��H�5ʜH�=�9"I���u��H���`��H��L��M��UH�L$H��M��1��\��AXAYH���j[����H��1��\��H���N[��H�5/�H�=�9"H�D$0�t��H���_��H�5�H�=`9"H���t��H���_��H�5��H�=:9"I���jt��H���b_��H�5��H�=9"H�$�Kt��H���C_��H�5�H�=�8"I���-t��H���%_��H�5��H�=�8"I���t��H���_��H��M��L��UL�D$L��H�ƿ1��[��AZA[H���iZ��H�5��H�=s8"H����s��H���^��H��H��1��i[��H���1Z��H�5�H�=38"H�$�s��H���^��H�5��H�=8"H���ls��H���d^��H�5ٙH�=�7"H�D$�Ls��H���D^��H�5ݚH�=�7"I���.s��H���&^��H�5њH�=�7"I���s��H���^��H�5�H�=r7"I����r��H����]��H��M��L��UL�L$L��H�ƿ1��Z��]A\H���MY��H�5h�H�=7"H���r��H���]��H��H��1��MZ��H���Y��H�5��H�=�6"H�D$�mr��H���e]��H�5ߘH�=�6"H���Or��H���G]��H�5��H�=�6"I���1r��H���)]��H�5™H�=k6"I���r��H���]��I��L��L��H�ƿ1��Y��H���{X��H�5��H�=%6"H����q��H����\��H��H��1��{Y��H���CX��H�5$�H�=�5"H�D$�q��H���\��H�5
�H�=�5"H���}q��H���u\��H�5�H�=�5"H�D$ �]q��H���U\��H�5�H�=o5"I���?q��H���7\��H�5՘H�=I5"I���!q��H���\��H�5��H�=#5"I���q��H���[��H��M��L��UL�L$0L��H�ƿ1��X��A]A^H���]W��H�5��H�=�4"H���p��H���[��H��H��1��]X��H���%W��H�5�H�=�4"I���p��H���w[��H�5�H�=i4"H���ap��H���Y[��H�5ΖH�=C4"H�D$(�Ap��H���9[��H�5ǗH�=4"I���#p��H���[��H�5��H�=�3"I���p��H���Z��H�5ךH�=�3"H�D$ ��o��H����Z��H��M��L��UL�L$8H�ƿH�T$01��yW��ZYH���?V��H�5�H�=y3"H���o��H���Z��H��H��1��?W��H���V��H�5�H�=93"I���ao��H���YZ��H�5ӕH�=3"H���Co��H���;Z��H�5��H�=�2"I���%o��H���Z��H�5��H�=�2"H�D$(�o��H���Y��H�5יH�=�2"H�D$ ��n��H����Y��H�L$(I��M��H�T$ H�ƿ1��~V��H���FU��H�5�H�=P2"H���n��H���Y��H��H��1��FV��H���U��H�5U�H�=2"I���hn��H���`Y���H��1��V��H����T����H��1��U��H���T��H�5��H�=�1"H���n��H���Y��H�5��H�=�1"H�D$(�m��H����X��H�5d�H�=i1"H�D$ ��m��H����X��H�L$(H�T$ �H��1��vU��H���>T��H�5*�H�= 1"H�D$ �m��H���X��H�T$ �H��1��:U��H���T��L�T$8M��M��H��L��H��AR1�AWL�\$@AS�t$�t$(�t$@�T��H��0H���S��H��H��*"�pT��H��*"�k�H�5��H�=n/"�m��H���W���H��H���U����H�5Y�H�=N/"��l��H����W���H��H���U����H�����C�H�|$H�L$P�H�5*4"H�D$P�(U��H���O����H��3"1�1��ʾ��H����H�5�H�=�/"�Ol��H���GW��H��H���,S��H����H�5��H�=\/"�l��H���W��H��H���R��H�5��H�=./"H�������k��H����V���H��H���T�����H�=�."H�5���k��H���V��I9���I�D$E1�H�$�`H����I9��RH�$N�4�H��L���mR��H���5H���L��I���V��1�1�H��H����S��L��H��H���T��I�$�� u�M;l$��I�D$ �H�5��H�=�."�k��H���
V��H��H����Q��H���H�5��H�=G."��j��H����U��H��H���Q��H�5b�H�=."H��������H�=�-"H�5D��j��H���U��I9��H�=o-"H�52��{j��H���sU��I9���I�D$E1�H�$�`H����I9����H�$N�4�H��L���)Q��H�����H���VL��I���IU��1�1�H��H���R��L��H��H����R��I�$�� u�M;l$�c�I�D$ �H�Z1"1�1��1���H�5�"H��H����Q��H���G���H�5��H�=-"I���i��H���T��L��H��H���[R�����H�5�H�=�,"�si��H���kT���H��H���+R���$���H��0"1�1�覻��H������H�5ܐH�=P,"�+i��H���#T��H��H���P��H��t[H�5��H�=,"�h��H���S��H��H����O��H�5��H�=�+"H���������H�H0"1�1�����H�����H�5U�H�=�+"�h��H���S���H��H���\Q���u���H�0"1�1��׺��H�5�H�=a+"H���ah��H���YS��H��H���>O��H��H�D$H��H�L$PH���-H�D$P��P��H�L$H��+H���P��H�5�"H���P��H����H�5ΐH�=�*"I����g��H����R��L��H��H���P�����H�=*"H�5p��g��H���R��I9����I�D$E1�H�$�XH����I9���H�$N�4�H��L���aN��H��usH��tXL��I���R��1�1�H��H����O��L��H��H���P��I�$�� u�M;l$}4I�D$ �H��."1�1��u���H���k�H��."1�1��]���H���H�5��H�=�)"��f��H����Q��H��H����M��H��txH�5e�H�=f)"�f��H���Q��H��H���M��H�����H�55�H�=.)"���H�54�H�=S)"�vf��H���nQ���H��H���.O�����4M��H�5�H�=�("�Af��H���9Q���H��H���N���X���@AWAVAUATI��USH��H��8H�<$H��dH�%(H�D$(1�� L��f.��vf(�fT
�f.
��w �
��f/��Nf/���@H���|H�5}�H�=,"�e��H���P��H��H���pL��H���fH���e��H�<$H����L��H��H�����I��I���H�5��H�=!+"�4e��L�t$ L�|$H���"P��H��H���L��H����d��H�5��H�=�*"�D$�d��H����O��H��H����K��H���d��H�5R�H�=�*"����d��H���O��H��H���K��H���}d���T$H�L$��M��M�����R�����}il$H�5�kD$<H�=B*"�l$ �gd��H���_O��H��H���DK��H�D$H��t
H���n��H�D$H�5��H�=�)"�%d��H���O��H��1�H���K��H����L��L��L���H}��D�l$������QcL���J��H����A��jD��jjjjjjL�D$HH�t$`H�|$@��w��H��@H�L$(dH3%(��H��8[]A\A]A^A_�fDA����Q�@H�=t�1�A�3*F�H������H���c���Í��Q=��m)��(���fDA���ŀQ�6���f�H�5��H�=b)"�b��H���M��H��H����I��H���j���H�5��H�=*)"��b��H����M��H��H���I��H���:���H�5:�H�=�("�b��H���M��H��H���zI��H���
���H�5�H�=�("�mb��H���eM��H��H���JI��H������H�5މH�=�("�=b��H���5M��H��H���I��H�5��H�=T("I���b��H���M��H��H����H��H�5یH�=#("H����a��H����L��H��H����H��L��L��H��H���W���H�5<�H�=�'"I���a��H���L��H��H���H��H���:H�5�H�=�'"�a��H���yL��H��H���^H��H����H�5ՉH�=^'"�Qa��H���IL��H��H���.H��H�5��H��t~H�="'"�%a��H���L��H��H���H���yH���uP��H�������H�5m�H�=�&"��`��H����K���wH��H���I���{���@H�=��1�1��XF�����H�=�&"�`��H���K���H��H���_I���9���H�5�H�=�&"�w`��H���oK���H��H���/I�����H�5φH�=l&"�G`��H���?K���H��H���H�����H�=�'"H�5i�1��E����F��H�=y'"H�5O��}E��ff.�f���ATUSH��H��PdH�%(H�D$H1�H�D$H�T$H�D$8H�D$H�T$0H�D$@���H�D$01�L�@�$fDH��t
Lc�N��L�
��H��I9�tH�9��H��t�H��H�I9�u�9�����td������twH�l$H�D$L�d$H�t$ �L�d$ H�\�H�D$(�j��H��H��H�����H�\$HdH3%(ubH��P[]A\ÐL�d$�H�=��E���3*F��H�=��E��I����f.�H�D$L�d$�ʺ1��H���sE����AVAUATI��US��H�� dH�%(H�D$1���w����H�=���E��A�3*F1�H��H��L��@��H�$��H�l$�D���L��L��H�����H�L$dH3%(ukH�� []A\A]A^�f�Hc�I���L�t��[F����u'I�E��t�M�m��t��1�����G���L���B��H�Ń�u��?����vD��fD��AVAUATI��US��H�� dH�%(H�D$1���w����H�=���D��A�3*F1�H��H��L��@��H�$��H�l$�ĝ��L��L��H�����H�L$dH3%(ukH�� []A\A]A^�f�Hc�I���L�t��[E����u'I�E��t�M�m��t��1�����F���L���A��H�Ń�u��?����vC��fD��AVAUATI��US��H�� dH�%(H�D$1���w����H�=ȉ�C��A�3*F1�H��H��L��@��H�$��H�l$�D���L��L��H�����H�L$dH3%(ukH�� []A\A]A^�f�Hc�I���L�t��[D����u'I�E��t�M�m��t��1�����E���L���@��H�Ń�u��?����vB��fD��AVAUATI��US��H�� dH�%(H�D$1���w����H�=���B��A�3*F1�H��H��L��@��H�$��H�l$�Ĝ��L��L��H����H�L$dH3%(ukH�� []A\A]A^�f�Hc�I���L�t��[C����u'I�E��t�M�m��t��1�����D���L���?��H�Ń�u��?����vA��fD��AVAUATI��US��H�� dH�%(H�D$1���w����H�=���A��A�3*F1�H��H��L��@��H�$��H�l$�D���L��L��H����H�L$dH3%(ukH�� []A\A]A^�f�Hc�I���L�t��[B����u'I�E��t�M�m��t��1�����C���L���>��H�Ń�u��?����v@��fD��AVAUATI��US��H�� dH�%(H�D$1���w����H�=���@��A�3*F1�H��H��L��@��H�$��H�l$�ě��L��L��H����H�L$dH3%(ukH�� []A\A]A^�f�Hc�I���L�t��[A����u'I�E��t�M�m��t��1�����B���L���=��H�Ń�u��?����v?��fD��AVAUI��ATI��U��SH��pdH�%(H�D$h1�H�D$H��H�D$HH�D$H�D$PH�D$H�\$@H�D$X�����JA�H�D$@H��1�H�x�%fDH��tLc�O�D�L���H��H9�tH�9��H��t�H��H�H9�u�L�t$9���������������H�\$H�T$H�$1�I��H�t$ H�T$(@��H�D$ ��L�t$0襚��H��L��H���W�H�\$hdH3%(��H��p[]A\A]A^�fDHc�L�t���?��������L�����@<��I�������H�=n��=����3*F�U���H�T$H�$��DH�$�ۺ1����@���=���ATUH��SH��H�5�"H��dH�%(H�D$1��>��H��I��H��"H�0�@��H����H�5"H���@��H��u4H��"H��H���?��H�T$dH3%(��H��[]A\�DH�5H�=b"�-V��H��1�1�H���>��L��H������t��u3H��H��H�$H�5|"�>���DL�������t��t�H�H�H9�t1��c���D��T����<�����ATUSH��H��@dH�%(H�D$81�����C�ŋ���+�-Å),$T�.-Յ���Z�f(��~��f(���fT�f.�vf��f/��[f���*��\�f/
'��A���t+�u'H���$�*q���~2��$���Df���ZKfT�f.���f/
����H��胂��H�߉�詃��Lc���������C1Ҩ��H�H�H��H��L�,����{fDH�{�k��H���&H�{@����H������"�������H���D$�Gp���D$��@H�T$,H�t$(����L���D$,H�t$8dH34%(��H��@[]A\�fDH��蘁��H�߉�辂��Lc���������K���������Ⱥ��Q������)�iҐ9�����H�H�H��I�H�ρB,����a���@�5��)4$T�.5�������Z������f���ZK����f.���_���H����w���R�������������Q���iҐ)�1ҁ�����S�����Ⱥ��Q������)�k�d�9������$����H�L$0��<H�D$0�;��H���+�����"�&���D�Ⱥ��Q������)�k�d�9�������E���f��ZC���f��C(<$T�.=}�vk�Z��{H�L$,H�T$(H�t$$�D���D$(�T$,�L$$�����	ЉK�C�(���fD��,���H���v������H����l������H�{�h��H��u"H�{@��t(H��xE��"�o���fDf��ZC�[���f�H�L$0��<H�D$0��9��H��t���"�*����8��ff.����H��H�5"�9��H���T���H��H�H�D��U��SH��H��8�GdH�%(H�D$(1�(�T
�.
/�vM�Z�H���D$�;���D$��H�L$��H�T$L�D$��I���D$H�t$(dH34%(uwH��8[]�f�H��g��H��uRH�{@��tH��x5��"�f�H�L$ ��<H�D$ ��8��H��t��n"�X����f��ZC�I�����6��ff.�f������f���1����D��SH��H��0�GdH�%(H�D$(1�(�T
�.
�vL�Z�H���D$����D$H�T$H�L$��H�t$�nK���D$H�T$(dH3%(uxH��0[�@H��gf��H��uRH�{@��tH��x5�{"�f�H�L$ ��<H�D$ �7��H��t��N"�Y����f��ZC�J����5��ff.�f���H��H�5�"��6��H�����H��H�H�D����AUATUSH��H��8dH�%(H�D$(1������L�g�W�
�~T�.
�~��f��Z�H���D$L�l$�����D$H�T$L���H�t$�J��L��Hcl$�2e��H��t]H�D-H�L$(dH3%(�1H��8[]A\A]�f�����GL�g(�T~..~vt�Z��g���H����s����}��t��|L���L���we��H�D$�u���DH�{�d��H��u/H�{@��t8H��xU��"����fDL���`d��H��t�f��ZC���DH�L$ ��<H�D$ �5��H��t��V"���f���q���SL�c�
*}(�(�T�������_����3��ff.���H��H�5�"�4��H��H������ATH�5s"US�4��H���udH���H|1�1�jH�=�"E1�E1���;_��Y^H�52"H��I���G4���oH��H���oSP����EL��[]A\ÐH����{1�1�jH�=w"E1�E1����^��H�5�"I��XZL����3��H�sH��H�pH��t@��tE�C�CH�߉E�C�E�E�C%��E��E����eu����EL��[]A\�DL���1���ff.�AWAVA��AUATUH��SH��H����7��H�5-"H��I���B3��I��H���
H��t��uH�H�ƒ�H��t,H���5��H�5�xH��H��"H�81��i0��f�1��f�H����H9��IH�CL�<�L9=�"��L9=�"��L9=�"��L9=�"��L9=�"�
E��tAL9=�"��L9=v"�hL9=a"�;L9=L"��L9=7"�H�H���� �Q���H;k��H�C L�<�L9=P"�W���L��芀��L��L��H���2��L9=%"�A���L����x��L��L��H�H�T�2��L9=�"�'���L���w��L��L��H�H�T�n2��L9=�"�
���L�����L��L��H�H�T�G2��L9=�"��L������������p�%I�$����)�������)�)Ɖ�Hc�L��L��H�T��1�����DH�����H�5Q"L��H����1��L���w��H�5/"L��H�H�T�1��L���v��H�5	"L��H�H�T�1��L���
�H�5�"L��H�H�T�t1��L���,������s�H�%I�$����)�������)�)���Hc�H�5�"L��H�T�(1��E�����A�$�tL���k6��A�D$����H�TH�5D"L����0���A�$�tL���86��A�D$����?H�TH�5	"L���0���A�$�tL���6��A�D$��?H�TH�5�"L���0���A�$�tI�|$(�C}��H�5�"L��H���a0��L���yk��H�5�"L��H���G0��H��L��[]A\A]A^A_�D�A�$�tI�|$(��|��L��L��H���0��L9=5"�����L���k��L��L��H����/�����@�A�$���L��L����/������A�$���L��L���/���x����A�$�uDL��L���/���O���@������%I�$)Ɖ���)�������)�)�P�M���f�L���4��A�D$����H�T�fDL���4��A�D$��?H�T�F���fDL���h4��A�D$����?H�T�C���������%I�$)�����)�������)�)ȍP���f�������f���1��u���D��AVAUI��ATUSH��H��H��H�50
"dH�%(H�D$1��/��H��tFH�5�!L���-��H�5p�!H��I���-��L��H���k��H��A���k��E���…���8�t0H��L���u�H�L$dH3%(��H��[]A\A]A^�@L��L���g��H��H���zg��A�$��t�uL����i��fD�EI�\$��uTL��L�m�h���H��A���]������tA��u@H��H��L�,$H�52"�E-��H��tA9�t31��O���@�u�H���di���f�H�I�L9�t�1��)���fD������9+��f���AWAVAUATUSH��H��8dH�%(H�D$(1�H�"H��u(H�-�n��H���C0��H��
"H��t�1�1�H��H���,��H�$H��
"H��u!H�-bk��H���0��H��
"H��t�1�1�H��H���H,��H���0��I��H�f
"H��u*H�-kf.��H���/��H�<
"H��t�1�1�H��H���+��H���/��I��H�
"H��u*H�-�if.��H���c/��H��	"H��t�1�1�H��H���+��H���p/��I��H��	"H��u*H�-kif.��H���/��H��	"H��t�1�1�H��H���X+��H��� /��I��H�^	"H��u*H�-kf.��H����.��H�4	"H��t�1�1�H��H���+���;H����.����<E�H��"H��u&f��H�=�j�o.��H��"H��t�1�1�H��H���*��H����K��H�D$H��"H��u �
H�=hj�'.��H��"H��t�1�1�H��H���l*��H���4.��H�<$H�T$��qH�t$ H���v���H��A��1�j��"1�UH�=	"AWAVAUAT�D$TPL�D$HH�t$`�U��H��@H�5R�!H��H���g)���/qH����_��H��H�L$(dH3%(uH��8[]A\A]A^A_��(��AUATI��U��H�5��!SH���)��L��H����&�+��H����V��H�5�!H��I����(��H�sI��H�pH�����CI�D$(I�D$�CA�D$�C�AD$A�D$�C%�A�D$��A�$L�l$H�|$H�5_�!�z(���H������uB�C������i�����?����?k�<��+C ��������=QO����C�H�C�€�����k H�D$H��[]A\A]�@@������L���&��������k*��H����U��H�5��!H��I���'���oI���oSH�pP�o[ X H��t@��tVI�t$(H�������@�����L���%����������W���fDH���x[��������Q����fDL���h%���fD��H��1���H�=�gH�D$H�t$H����E�����SH��dH�%(H�D$1���x;H��u.�D$��H�����H�L$dH3%(udH��[�fDH���t�1��(��@H�t$H���D$�3�����t�|$�f�H�=%f1��D$��#�����#%����AWAVA�AUL�-�eATI��H�5
�!UH��SH��HdH�%(H�D$81��&��H��L����A����
���%���C�������t
�u	H���b���M��L�sI���I��$�H=H�qvOL��I��?L��H�L$0H�#\=�.����+H��L�H��L)�I��H�D�Mi�%�H�D$0�%��I��M)�H��M����	�q_��A�ŋf��ZCA��A��A�����@	H���$�'��H��D��E1�AT�D$E1�1�L��H����O��A\A]DH�L$8dH3%(�7H��H[]A\A]A^A_�D�����'��f�A�f/��~L�d$ L���#���T$ �%�lf(��5�kf(��^�lf(�f(�fT�f.��Uf�f.������,�f��A��*��$$�Y"lL��f(��6#���Y.l�D,d$ �!���,�H�L�tA����=L���S��H����L�t$0���tH�{(L�l$0�+�L���R$���H��I���+��H���YH�D$0�5wA��L���+L���$��I�Ƌ%�E���T���B�$f�H��f.��&� �k]��A��L���PR��H��������L�{E���������D$f��ZC1��hfDH��!L��H�0��$��H���=L��H�=��!��:��L��1�1�H���W#��I��H�%�!L��H�0�$��H����A��uKM���{A���@I�$����
t,���SL���S%����LH�H���?fDL��� &��I��L���%>����
�A���A����L�l$0M����H�5�`H�=��!H�D$0K�q�9��L��L��H���"��L��L���%I��H�D$0K�q�d"��H���,&��H��A��E���B��[��A��L���P��H��������	��L�sf���ZCA��H���$�$��H��E1�E1�AU�D$1�D��L��H���/L��[]�P��������L�s(E���H����&��D�c���f��H,�f���5WhfU�f��H*�f(����fT��\�f(�fV�f.��x���H�|$(�\$����H�5�`H�=��!�$�8���D$(I���I#��1�1�L��H���!���$f��\$�Y
{hI���,��*��4$�$���fDL�l$0��<H�D$0L���� ��H������H�5�`H�=�!�8��1�1�L��H��� ��H�5n^H�=�!H�D$0K�qI����7��L��L��H���k ��L��L��%I��H�D$0K�q�J ��H���$��H�56`H�=��!I���7��L��1�1�H��A��� ��H��I��E��������Y��A��=	A��$������L��L���+H�D$0A��%�����I���~���fWxgA������o���DI��L��H�L$0�+H�#\=�.���L��M��H��I��?L��N�$*�I��L)�M)�Mi�%�H�D�H�D$0�U��M)�I��M��$$��P���f�E���7	E1�����L�|$0���t���H�{H�L$0��+���I��E����L���iM��H���t|������"�S �����ƒ����T$�of���tH����#��DcE���A��Q������$$�X%EeA��Q�$$�p���@��‰��������T$����������f��ZC����[ H���$�! ��H��A��M��t$D��D��H��VL��jjjjjj�D$@�oI��H��@�^���fDI���'I���I��$�A���	L�������$����$f.����������@L�t$0���t��eH�{�L��+�_��I�Ƌ����f���ZCA�Ņ��*����SD�K H���D$L�{(�[�T$D�$���H��M��L��AU�T$H�ljу�?Q���������?Q��RD��jjj�D$PD�L$@�PH��H��@�?�����KV��f�f���*��X$f/���f/d���D,������SD�K H���D$L�{(�[�T$D�$�\��H��M��L��AT�T$H�ljу�?Q���������?Q��RD��jjj�D$PD�L$@�G��H��@�����U��A���A��$�����L��H�L$0��+H�D$0A��%�����I�����fD�������L�l$0��<L��H�D$0L������D$H���H�5LYH�=��!H�D$0K�q�2��L��L��H���L��L��L��%I��H�D$0K�q�+��H�5�XH�==�!H�D$0I���l2��L��L��H�����H�����L��L���%H�D$�$H�D$0����L���*H�D$0�H�����H�5~XH�=��!H�D$0I����1��L��L��H���{��H���C��L��L���%H�D$A��H�D$0�M��L���*H�D$0�5wH���/���|$�I���
L���H��H���%����L�s(E����H���"��D�cD�$H��E�����iS���$L���NH��H��������LL�kE�������A��f��ZC1�H���D$���H��A��M��AWD��L��H��jjjjjj�D$H�T$@��D��H��@����$$fW%aH�57YA��H�=r�!�$$�0��L��1�1�H�����I�������L�s����A�E������D���@A��tjI����5w���A��L��H�D$0�5w�-��fD���L�{�����<$�\=K_A�ĀQ�<$�v�f�H�5Y�!L��L��H�D$0�5w�P��H���3��u���f�$r��A��H��f��ZC�$�"��H��E1�E1�AT�D$1�D��L��H���PB��AYAZ�o��L��H�L$0��+�$H�D$0�����$�\6_I���$���fDH���8K��D�[ E���3����A��A��rA���€�M������D���H���K���7���H�5cWH�=��!�.��L��1�1�H���M���D$����I������DL��H�L$0��-H�D$0A��%����I���+�f�L��H�L$0��-�$H�D$0�����$�XF^I���&���fDL��L���-H�D$0A��%����I���N�H���J���f��ZC���<���1��@���fDH���$��I���$� ����H���R���.���H���xR������!���f�H���XR���s���H���HR�����M��u�L�����fDA��u�I�$��H��u��4�L�|$0���t��7H�{L���+���I��E��uVL���D��H��tI����>���K ���+A��A���A����zf��ZC��P�[ ����A��A���A����u�����N��$�e�<$$��B���L��L���+H�D$0����,$%�I������L�t$0���tH�{(�+L�������H��I�����H����H�D$0�5wA��L���+L�����I�Ƌ%�E��uS��������u������L�k���A�E���a���E����A��Q�K����$A��Q�;�����t�H���M��Dc��H�5TH�=�!�d+��1�1�L��H�����H�5�SD�d$H�=��!I�NjD$A��؉$�.+��L��1�1�H�����I�����A��t<I����5w����A��L��H�D$0�5w�-���,$A�ĀQ���H�5^�!L��L��H�D$0�5w�U��H�������$r��A��H��f��ZC�D$�+��H��L��E1�AT�D$H��E1��T$1��X=��^_�y�H���D$�F���D$���H���pF���f��ZC���t���1��,���fDL��L���-H�D$0����$%�I�����H����N������H���N�����H���F���{ �����A��A��rA�������������H����E������x����/����AWAVI��AUATUS��H��dH�%(H��$�1�H�D$PH�T$HH��$�H�D$XH��$�H�D$`H��$�H�D$hH��$�H�D$pH��$�H�D$xH��$�H��$�H��$�H��$�����H��$�1�H�x@�H��t
Lc�N��L���H��H9�tH�9��H��t�H��H�H9�u�9����D$$��� H�
YV��Hc�H�>��D�PX�\$H�|$xH�t$$�t�����H�l$pH�5�PH���.��@����	H��tP@���f
H�E�H���t:H�����t1@��t+H�������D$�
���L$f.��	�H�a�!HDŽ$�H��u!L�%9N��L������H�4�!H��t�L��$��H��H��L���,��H��L���%I��HDŽ$����HDŽ$��H��H��$�H���!H��u.H�-�NfD�H���k��H���!H��t�H��$�L��H��L�����H��$�H����&��H��$�A���>��H����f��*�f/#�!��	L��$����%�V�D$��E1��D$A��d$�L�l$HH�5UQL����,��H��$�H����L��H�T$LRH�T$PRH�T$HR�D$(��L�L$LL�D$H����H�� ���	�t$�|$H�L$4D��L�L$<L�D$8��������L$4�����t$8i��|$<D�L$$�T$@Dk�<D��D)���=Q�����H��A�j	WL��VQ1�jjj�D$HH��$��9��H��@L��H���<��H���WH��H��$�dH3%(�uH��[]A\A]A^A_�� U�D$E1���D$A��\$@H�\$PH�5�LH���t+��H����$�����u���D�=�T�D$E1�A��D$�|$f�H�l$XH�5SLH���+��H��H��$��j��H���d$��H��$����;��H���d������xL��$��N���fD�58TE1��D$A��t$H�l$`H�5�JH���*��@����H��tN@����H�E�H���t8H�����t/@��t)H�������D$�v	���L$f.���fDH�)�!HDŽ$�H��u!L�-)J��L������H���!H��t�L��$��H��H��L�����H��L���%H�D$HDŽ$����HDŽ$�1H��H��$�H���!H��u,H�-uJ@�H���[��H�l�!H��t�H��$�L��H�����H�l$H��$�H���"��H��$��D$��9��H����������L��$���f��-�RE1�A��l$H�l$hH�5CKH���(��@���FH��tN@���+H�E�H���t8H�����t/@��t)H���)
���D$�����L$f.���fDH���!HDŽ$�H��u)L�-�Hf��L���3��H�\�!H��t�L��$��H��H��L���l
��H��L���%H�D$HDŽ$��F
��HDŽ$�AH��H��$�H���!H��u,H�-�H@�H���
��H���!H��t�H��$�L��H����	��H�l$H��$�H���!��H��$��D$�A8��H���������L��$����f��%�P�d$���DH��$����f.�f(��D$z2fTQf.�P�K����}Pf/�wf/wP�/���H�=�G1��+���5cP�t$������-HPE1��D$��D$�A�I��1���l$�������l����H��L�����H��������4���H����
���D$����L$f.���������H�E��H��
tAH�?�!H��u#L�-G�L������H��!H��t�H��1�1�H���0��H��HDŽ$�����N���H���!H��u#L�-�F�L�����H���!H��t�H��1�1�H������H��HDŽ$����@H��$�L���+�D$4HDŽ$�����L$4I����fDA��<������H�@�!H��u$L�%F@�L����
��H��!H��t�H��1�1�H���0��H��HDŽ$����H�E����
��������V���H���K	��������H�H���v����f���H�E����
t"��u3H���	��������H�H�����H�E��H��
���������������H�������D$�q���L$f.������t����f.�H�E����
t"��u3H�����������H�H�������H�E��H��
���������������H���K���D$�����L$f.��p���t��i���f�H�=E�D$$��������S����L����1����.��H�=w�!H�5ME�{��H�=d�!H�5�E�h��������AWAVAUATI��U��H��SH��dH�%(H��$1��2��H�5��!H��I���������H�T$pH��H�D$hH��$�H�T$xH��$�H��$�H��$�H��$�H��$�H��$�H��$�H��$�H��$�H��$�H��$�H��$�����H��$�1�H�y@�$fDH��t
Hc�I�4�H�0��H��H9�tH�9��H��t�H��H�H9�u�9��t�D$D����	H�
�I��Hc�H�>��D�=hK�|$H��$�H�t$D�0g�����XL�%��!L��$�I�4$L���]��H�������A���M��tRA���(I�E�H���t<I�����t3A��t-L�������D$����L$f.��bf.�H�a�!HDŽ$�H��u!L�=9A��L������H�4�!H��t�H��$��H��L��H�L$ �*��H�L$ L���%I��HDŽ$����HDŽ$��H��H��$�H���!H��u2L�-�Af.��L���c��H���!H��t�H��$�H�L$ �H�����H��$�L����H���nL���^��H��$��D$��0��H���4f��*�f/�!��L��$��t��=xI�l$(A��D$L�%��!�D$�D$ �|$f�L�l$hI�4$L���_��H������O�D$fTuIf.�H��A����
L���j�!H�H=-~H=�~�G�!f��f/��eH��$�H����L��H�D$lPH�D$pPH�D$hP�D$(�T$HL�L$lL�D$h�=p��H�� ���j�T$�t$H�L$TL�L$\�|$ L�D$X������BD�l$TE��A����t$XAi�D�L$\�L$DD�D$`k�<E�ˉ�A���D�)��6	=Q����A�H��$�H����H���H�D$��H�kH�|$�	A��E���E�ˋD$HD�CA�����Cf��L���C�D$L�ZT$D�S �L$P��H�C(����	��SA	�E	�D	�S�.��H���H��$dH3%(L���Y
H��[]A\A]A^A_���-(G�D$A��D$L�%S�!�D$ �D$(�l$DH�l$pI�4$H�����H������'
H����_�R�����{����%�F�D$A��D$L�%��!�D$ �d$DL�l$xI�4$L�����H�������L��H��$���[��H�Ǩ������H��$��D$(�r-��H���9������L��$��#����=F�D$A��D$L�%3�!�|$L��$�I�4$L�����H������"A���+M��tNA����I�E�H���t8I�����t/A��t)L������D$ �.����L$ f.��>fDH���!HDŽ$�H��u�H�=�;���H���!H��t�H��$��H��L��H�L$ ����H�L$ L���%H�D$(HDŽ$����HDŽ$�1H��H��$�H�H�!H��u,L�--<@�L�����H�$�!H��t�H��$�H�L$ �H���M���H��$�H�D$(��H����	H�|$(�
���H��$��D$ �+��H���������C
L��$����f.��=(D�D$A�L�%[�!�|$L��$�I�4$L���)���H������S
A����M��tNA����I�E�H���t8I�����t/A��t)L������D$�V����L$f.��	fDH��!HDŽ$�H��u%��H�=�9���H���!H��t�H��$��H��L��H�L$ ���H�L$ L���%H�D$HDŽ$�����HDŽ$�AH��H��$�H�x�!H��u,L�-M:@�L���3���H�T�!H��t�H��$�H�L$ �H���m���H��$�H�D$��H����H�|$�*���H��$��D$�)��H����������cL��$��u���f.��=HB�|$���DH��$��{���f.�f(��D$z2fTsBf.�A�������Af/�wf/5�A�����H�=
91�����%�A�d$�f������A�D$�A��D$I��1���D$�D$ �D$(�f����D$f��f/�������tAH�T$PH��$�L���7b���T$(�|$P��H�L$TL�D$X�#������T$�t$H�L$\L�L$d�|$ L�D$`��������|$\��H��$�H���I��A����H�kM��uH��L���!����D$D�Cf��L��H�C(�Zd$�C �D$P�c�C�D$T�T$X����	ЋT$\D$d��	ЋT$`H����	ЉC�'��H����L��L���)��I�������H�E��H���I���H��D�L$0�t$(�L$ D�D$�T$<D�\$8D�T$4����D�D$�L$ ��t$(D�L$0����H�D�T$4D�\$8H���T$<���H��D�L$8�t$4�L$0D�D$(�T$ D�\$D�T$���D�T$D�\$H��H��H�C�T$ D�D$(�L$0�t$4D�L$8�������H�D$���D����������@������fDH�C�p���H�E��H���R���H���/�����B���H�H���5���H������H��H�CH���1���I��A������fDA�������H�C����H��L��D�D$����D�T$DD�d$T�T$XD�\$\D�D$����HDŽ$�L�������
����A��X���DH��$���<L��HDŽ$�������!H���R����E���@HDŽ$�L������}����I�E����
t,����L������s���H�H���f���fDI�E��H��
�gH�H�!H��u �H�=5���H�(�!H��t�1�1�H��L���<���HDŽ$�H�D$(����������L���O����D$ ����L$ f.������f������f�I�E����
t,����L��������k���H�H���^���fDI�E��H��
�'H�h�!H��u �H�=54����H�H�!H��t�1�1�H��L���\���HDŽ$�H�D$����������L���o����D$���L$f.������f������f�L���H��$��+�D$THDŽ$����D�l$TI��E����f�HDŽ$�L���|����)��I�E����
t$��uoL����������H�H�����f�I�E��H��
�H�53H�=)�!���1�1�L��H���=�HDŽ$�I�ǃ���fD�����L���O����D$����L$f.��t�t��m�DL���H��$��+�D$\HDŽ$���I�����f�H�=�2�D$D�����L�l$(�B���fDL�l$���fDHDŽ$�L�l$����f.���������DHDŽ$�M����@������DM���\���HDŽ$�L�l$(����f.��s�����1����W�H�=��!H�5v2��H�=��!H�5�2�����H��!H�5�2H�81��t�H��4H���!H�5�0H�81��U�H�w4��H��4��H�80��H�i2��H�H2����AWAVI��AUATUS��H���dH�%(H��$�1�H�D$HH�T$@H��$�H�D$PH��$�H�D$XH��$�H�D$`H��$�H�D$hH��$�H�D$pH��$�H��$�����
H��$�1�H�x8�H��t
Lc�N��L���H��H9�tH�9��H��t�H��H�H9�u�9���
�D$$���`H�
�6��Hc�H�>��D�p8�\$H�|$hH�t$$�;T�����
H�l$`H�51H������@����H��tP@���t	H�E�H���t:H�����t1@��t+H�����D$���L$f.��c�H���!HDŽ$�H��u!L�%Y.��L����H�T�!H��t�L��$��H��H��L���L�H��L���%I��HDŽ$��(�HDŽ$��H��H�D$xH���!H��u&H�-�.��H����H���!H��t�H�|$xL��H��L�����H�D$xH������H�|$xA���5��H���\f��*�f/T�!��L�d$x��@��6A��E1�1��D$A��\$@H�\$@H�5�1H���
��H�L$(L�L$<D��H���D$H��$�L�D$8�b�����W�t$H�L$,L�L$4��L�D$0D�������2�L$,���Z�t$0i��|$4D�L$$�T$8Dk�<D��D)��	=Q�����H��A�j	WL��VQ1�jjj�D$HH��$����H��@L��H�����H����H��H��$�dH3%(��H���[]A\A]A^A_��=x5�D$E1�1�A��|$�L�l$HH�5-L������L��H�t$x��J��H�����H�|$xA���b��H���y������,L�d$x�f���fD�-�4E1�A��l$H�l$XH�5�-H���e��@����H��tN@����H�E�H���t8H�����t/@��t)H�����D$�>��L$f.��nfDH��!HDŽ$�H��u)L�-�*f��L����H���!H��t�L��$��H��H��L�����H��L���%H�D$HDŽ$���HDŽ$�AH��H�D$xH�c�!H��u,H�-8+��H����H�<�!H��t�H�|$xL��H���Z�H�l$H�D$xH���x��H�|$x�D$���H��u����L�d$xH�l$PH�5�)H����	��@����H��tL@���H�E�H���t6H�����t-@��t'H�����D$���L$f.���@H�q�!HDŽ$�H��u)L�-q)f��L���#�H�<�!H��t�L��$��H��H��L���\�H��L���%H�D$HDŽ$��6�HDŽ$�1H��H�D$xH���!H��u,H�-�)��H����H���!H��t�H�|$xL��H�����H�l$H�D$xH�����H�|$x���<��H����������L�d$x����%�1�d$�z���D�5�1E1��D$A��t$�=���@H�|$p���f.�f(��D$z2fT�1f.^1�����X1f/�wf/R1���H�=x(1����->1�l$�����%(1E1��D$1�A�A�H��1���d$�q���D�����H��L������H���.���������H������D$�q��L$f.�����������H�E��H��
t%H�5
(H�=%�!���H��1�1�H���9�H��H�D$x�X��������H���W��D$���L$f.����������H�E��H��
tDH���!H��u&L�-�'fD�L���c�H���!H��t�H��1�1�H����H��H�D$x�G����H��$�L���+�D$,HDŽ$��b��L$,I���l���fDA���������H��!H��u$L�%�&@�L����H��!H��t�H��1�1�H����H��H�D$x�%����H�E����
�p������2���H���������H�H��������E���H�E����
��������l���H�������L���H�H���?����|���H�E����
t"��u3H����������H�H�������H�E��H��
���1����������H���]��D$���L$f.��b���t��[���H�=&�D$$��������~�������@������H�=��!H�5d&���1����$�H�=m�!H�5�&�q����ff.����AWAVAUATI��US��H���dH�%(H��$�1�H�D$@H�T$8H��$�H�D$HH��$�H�D$PH��$�H�D$XH��$�H�D$`H��$�H��$�����	H��$�1�H�x0�#DH��t
Lc�N��L���H��H9�tH�9��H��t�H��H�H9�u�9��=	�D$$���`H�
)+��Hc�H�>��D��,�\$H�|$XH�t$$�H������H�l$PH�5M%H�����@���xH��tH@����H�E�H���t2H�����t)@��t#H���K��D$����L$f.���H�D$xH�Ƚ!H��u$L�-�"@�L���c�H���!H��t�L�|$x�H��H��L����H��L����%I��H�D$x�~�H�D$x�H��H�D$hH�F�!H��u/H�-#f.��H�����H��!H��t�H�|$hL���H��L����H�D$hH���B���H�|$hA�����H���Lf��*�f/��!��H�l$h�@E1�E1�E1���=+�|$@H�D$8H�5�#H��H�D$�o��H�D$H�t$hH���m@��H�|$hH�D$���H��u���H�l$hH�L$(L�L$0D��D��L�D$,D���.�����|$(��H�|$H�T$4H�t$p�����t$,�L$(�|$0D�L$$i��T$4Dk�<D��D)���=Q�����H��A�j	WL��VQ1�jjj�D$HH��$��@��H��@H��H���1��H���H��H��$�dH3%(�CH���[]A\A]A^A_�@�5�)E1�E1���t$L�|$@H�5/ L�����A����L�������
�V���o���H�5�H�=к!H�D$x�b���H�L$xL���H��H�L$���H�L$�L���%H�D$H�D$x���H�5e H�=m�!H�D$x1H�D$h����H�L$H�|$h�H����L�|$H�D$hL�����H�|$hA������H�����������H�l$h����-�(E1��l$L�t$HH�5D!L�����A���M��tOA����I�F�H���t9I�����t0A��t*L���*��D$�����L$f.��X�H�D$xH���!H��u$L�=�@�L���;�H�d�!H��t�L�|$x�H��L��L���w�L��L����%H�D$H�D$x�T�H�D$xAH��H�D$hH��!H��u%L�5��L�����H��!H��t�H�|$hL���H����L�t$H�D$hL��� ���H�|$hA���c��H���{������sH�l$h�h�����%�&�d$�R���DH�|$`�.��f.�f(��D$z2fT&'f.�&������&f/�wf/�&���H�=�1��N���%�&�d$����E1�E1�E1���b&H�D$�\$���fD�������;��D$�����L$f.����������M��tA��uI���H��
t%H�5uH�=��!����L��1�1�H�����I��H�D$h����H��H��襷��H�������������L�����D$�Q���L$f.�����������I���H��
t%H�5�H�=	�!���L��1�1�H�����I��H�D$h��������H�׶!H��u#L�-��L����H���!H��t�H��1�1�H������H��H�D$h������l���fDH��H�L$x��+�D$(H�D$x�x��H���5���I�����
����������L�����������H�H���s������H�E����
t"��u3H���m����%���H�H������H�E��H��
���-����������H���!���D$�����L$f.�����t���������������H�H����������f�H�=��D$$�|�������2�������1�������H�='�!H�5U�+�����H�=�!H�5��������x u�H���9���f�H�6��t�P����f���H��1�1�����AWAVAUI��H�5,�!ATA��H��UH��SH��dH�%(H��$�1�� ������H��H�D$0H�T$(H�D$hH�D$8H�D$pH�D$@H�T$`H�D$xE����H�D$`1�H�p �%fDH��tHc�I�|�H�:��H��H9�tH�A9��H��t�H��H�H9�u�A9��4A������A����A����H�|$@���f.�f(��$z2fTy"f.�!����!f/�wf/�!��H�=1�����=�!�<$�|�A���.��!A�A��$L�l$(H�5��D$L�������D$f.e!��$f��f/��TH�L$PH��D��D��H�D$,L��PH�D$0PH�D$4P�D$ L�L$8L�D$4��H��H�� ���1H�|$P�5���H�CH��t��d�D$ f��L���Z$�[�C�D$�C�D$�T$�����	ЉC���H���DH��$�dH3%(H����H�Ę[]A\A]A^A_�f��� f.h A�A�A�I��1���$���A����L�����!H�H=-����H=��������!f��f/������fD�  H�T$H�t$PL����@���|$D��D��H�L$ L�D$$��������H�|$P���H�CH��t��*�D$f��L���Z,$�k�C�D$ �T$$H�����	ЉC����H�������H��L���O���H�������=X�<$L�l$8H�5L������H�t$HL����4��H����H�|$HA���]��H��u0f��A*�f/�!���$L�t$HfTO�D�$fT;A�L�d$0H�5��D$L���K���L�����D$A������DH��H��������H��H�����������xA�A��$�DH�L$X��<L��H�D$X������!H�����������1�D���[��H�=��!H�5�1����H��!H�5�H�81����H�=w�!H�5M�{������fD��UH��� S��H��H�ƣ!H������H�H �@uH�H H�H���H��H�AH�AdTJ�AH��[]�>���ff.���AVAUATUH��S��H��dH�%(H��$�1�H�D$8H�T$0H�D$hH�D$@H�D$pH�D$HH�T$`H�D$x���	H�D$`1�H�x �&�H��t
Lc�N��L���H��H9�tH�9��H��t�H��H�H9�u�9������������i����H�|$H����f.�f(��D$z2fT�f.N�>�Hf/�wf/B�"H�=h1�����=.�|$������
A�A��L$H�>�!L�d$0H�0L�����H������H�L$XH��D���H�D$4L��PH�D$8PH�D$<P�D$(L�L$@L�D$<�J��H�� ����H��E1�E1�1�j�D$H��T$8H�t$h���L��H��XZ���H����H��$�dH34%(H���fH�Đ[]A\A]A^Ð�(�\$L�d$@H�5�L����H�t$PL���0��H�����H�|$PA���,��H����f��*�f/K�!��L�l$P��-�A��A�I��1���l$���D�%�A��A�I��1���d$���DH��L���5���H����DA�H�\$8H�5�H����H�������"�����5A�A��t$뺺1����.��H�=w�!H�5��{������H�=_�!H�55�c��H�ܦ!H��H�5qH�81��D��@��AUATUH��S��H��xdH�%(H�D$h1�H�D$0H�T$(H�D$XH�D$8H�T$PH�D$`����H�D$P1�H�x�(f.�H��t
Lc�N��L���H��H9�tH�9��H��t�H��H�H9�u�9��2�������/������A�A�H��1���T$H�L$H�T$HD��H���D$L�L$$L�D$ �@D������H��E1�E1�1�j�D$H��T$0H�t$X���L��H��XZ���H����H�t$hdH34%(H����H��x[]A\A]��0A�A��\$H�_�!H�\$(H�0H���7��H������6���H��!H��H�5�H�81��|��@H��L��譩��H���h���DH�|$8���f.�f(��D$��fT�f.zw �xf/���f/
n��L�d$0H�5L�����H�t$@L����,��H���7�H�|$@A���z���H��u5f��*�f/��!wzL�d$@���f��%�d$�A�����DH�=1�����-��l$�_����1������H�=J�!H�5 �N�����H�=2�!H�5`�6��fD��AUATUS��H��8dH�%(H�D$(1�����I����H�.����H�~�9��������1�\$H�l�!H��H�0�I��H������}H��H�t$�+��H�|$I���3���H���f��*�f/R�!�hH�l$�D���A��T$H�T$H�t$ L���
���H��E1�E1�j�D$1�L��T$$H�t$0���H��H��XZ���H����H�L$(dH3%(H����H��8[]A\A]����f.�f(��D$z2fT�f.�����f/�wf/
�����H�=1�����%��d$���������fDH��H��蕦��H���K����1����������F���H���!H��
H�5>H�81�����l��H�=��!H�5#
���f���AWAVAUATUSH��H�5H�!H��H�|$8dH�%(H�D$x1��G��H�\$`H��H��H�D$(�"��H��H�D$p��H�H�DH�D$h���H�T$p�*H��H�T$0H�Ǻ���H�L$h��+H���l��H�L$`��+H���U��H�è��H��H��FH��H��?H��������*H��H�H)�H�H�pH�H�t$H��H)��A�D$H�\$(H���)��A�ŋ���Lf���ZK�L$ H�D$PL�d$@H�D$L��L�|$HE��L�t$DH�\$XI��H�l$L��A��E����H��M��M��D��SAUUH�L$0�D$@�t$,H�|$8�a:��H�� ��t��t$@H�|$PH���h���H�|$(�b��H�L$0H�|$X��-H�D$p�0��H�|$8H���C���H�T$xdH3%(�$H�Ĉ[]A\A]A^A_�DH��������*H��H��H��H��H��?H�H)�H���������H�D�H�D$H��H��H��H�RH��H)�H�H���fD���H�D$(f���ZP�T$ ����H�5IH�=ڢ!H�D$p��L�t$0�H��H��L���D��L��H�߾%H�D$H�D$p�!��H���������D$����H�|$(����f���H�=Ǩ!H�5�	�����&��fD��SH��dH�%(H�D$1���xSH�ӸuA�H��*H��H�$���H��H�����H�T$dH3%(uH��[�H���t��{����fD����x u�H���9���f�H�6��t�P�B�f���H���!ATUH��SH��H�0H�����H��tRH�|�!L�%�H��u!��L�����H�T�!H��t�H��H��1�1�����[H��]H��A\���H��!H�5�H�81�������SH��dH�%(H�D$1���xSH�ӸuA�H��*H��H�$�\��H��H���!���H�T$dH3%(uH��[�H���t��;��f��fD����x u�H������f�H�6��t�P��f���AWAVAUATUH��SH��H��H��H�5��!dH�%(H�D$1��)��H���@H��u{H�,�!H��H�0�	��H����H�5�H�=�!����H��1�1�H���n��H��H��胠��H��H�T$dH3%(H����H��[]A\A]A^A_�f.���t+H��H���H���o���H��$�e�����u.��ug�V����H�����
�a���vG���V������2���H�@H�H��H��H9���H�t?H���ԟ��H���L���@����H������fWO���H��H��蟟��H�������H�5��!H������H��H�5��!I�����H�Ë����H�CH�$A�E���~I�}I��E1�L��-���L��I�����H�߉����)�A�E���A����aL�$�A�E��
L���-���I���x��$�~&L��L���+H�$��%����I��E����A��Q~
��A��QA���TL��H���L��L���+H�$�5wA���/��I��L�����H�������E���eL���}�H����H��t��uH���H���z���H�߾����H���e���DI�}(������z���L�������m�����N���H�������A���H�����D+c�������L�C(�L�$A�E������두L���x��E�e�O����L��L���-H�$��%����I�����DL���<L��H�$����H�������H�5ˢ!L��L��H�$�5w����H���������D��A�ĀQ�;����Mc�K�|$�#��H��L���+H�$�z��H���m���f�Hc�H�|-�^��H��L���+H�$�E��H���/���DL�����H��L���+H�$���H�������L���*L��H�$K�q����H�������;���H������H=�ɚ;�����L��L���-H�$�5wA�����I���o����F����������x u�H�����f�H�6��t�P�r�f���AVAUATUH��SH��H��H�� H�5 �!dH�%(H�D$1����H�5t�!H��H���(���H�5\�!H��I���q���I��A�$�u	���6H�57�!H���O���H�5(�!H��I���=���L��H��I�����L��H�����A�$����A�EI�\$����I�m��t
@���<L�t$�H��H�l$H�5S�!L���c���H����A�$�ƒ��������!A�EA�\$�ƒ���������A�E9������H�L$dH3%(�H�� []A\A]A^���8���L�������+�����1���L�������$���L���@���L��A���5���E���…���8������L��H���W���L��H���L���A�$��t�uL������A�EI�\$����I�m��t
@����L�t$�H��H�l$H�5�!L������H��t~L�����L������9�������f��[���H��I��H�f�!H�0�F���H����H�5��!H���.���H����H���!H��H���3������fDL���<H��H�l$�~���H���d���H������]���f�������L������
���A�$��-E1�A�E�����H��H������H������H��H���F��H��u����@H�5.�H�=r�!�E��H��1�1�H���־��L��H�����H�l$H�èt'@��t!H�H��H)�H�������DH�5��!H�L$�H������H��H��H������H�H�D�Y���D���5���L������(���H�H�H9��������������fDL���P��H�\$H�Ũt4��t/H�H��H)�H����������H��H�B�����H�5ٜ!H�L$�H���ǽ��H��H��H���I���H�H�D���D��Q���L�������D���L�����A�ED9��d���A�E%�A�$�tI�l$(���4���I�](�0���DH�H�H9��+��������%���fDL��������L��������L���8��E�D$A�E��h���1��m����,�����|���f���UH��SH��H��H��H�5��!�1���H��uH��1�[]�H��H���E���H��[H��]�����ATI��UH�����SL��H��H�t$�m�����u�G�H��証��H��H���m���H��H�t$H������H��������y�H��L��[]A\�D�˹��H���s���H�L$L��E1��H�����H��I��[]L��A\�ff.����UH��SH��H��H�t$�ƾ����u�@H������H�߾�˔��H��H�t$H���;���H���c�����~�H��H��[]�D�+���H���ӽ��H�L$H��E1��H���K���H��H��[H��]�ff.���AVAUATA��USH��dH�%(H�D$1����WI��H��L�6��uT���������蠸��H���H���E1�L��D��H��H���Ľ��H�L$dH3%(��H��[]A\A]A^�H�n����衽����t�H�$@��ugH�5��!�H��H���x����H��H�������xdtGI���L��襺��L��H���j���I��L��L������H��������~�H���T���H��H�H���uH���c���H���[�����f�I���L���@���L��H������I��L��L���w���H��蟽����y�H����������D���,���ff.��AVAUATI��H��UH��SH��H�� dH�%(H�D$1�����f.���f(�fT
�f.
}w �
{f/���f/q��H���EH�5`�H�=�!�v��H���n���H��H���S���H����H�����L��H���fS��H��H����5��H����H�T$H�t$H���o�H���G���H��1�E1�j�T$E1�L��H�t$ ���ZYH�L$dH3%(��H�� []A\A]A^�DH�=�1��3*F�]����%����H�5C�H�=:�!���H��蕺��H��H���z���H���'���H�5Z�H�=�!�m��H���e���H��H���J���H�������H�я!H��u%L�-�D�L���k���H���!H��t�H������H��H�����H�������H�5��H�=t�!����H�����H��H���̵��H���y���H�5`�H�=<�!���H��跹��H��H��蜵��H�56�H�=�!I�����H��莹��H��H���s���H�5]�H�=ݎ!I���m��H���e���H��H���J���H��L��L��H����(���	���H�=��!H�5��1�诳���
���f.���ATUSH��H��PdH�%(H�D$H1�H�D$H�T$H�D$8H�D$H�T$0H�D$@���H�D$01�L�@�$fDH��t
Lc�N��L�
��H��I9�tH�9��H��t�H��H�I9�u�9�����td������twH�l$H�D$L�d$H�t$ �L�d$ H���H�D$(���H��H��H���:���H�\$HdH3%(ubH��P[]A\ÐL�d$�H�=I��ʳ���3*F��H�=�诳��I����f.�H�D$L�d$�ʺ1����裳����AVAUATUH��S��H�� dH�%(H�D$1���w��A��H�=`��:���A�3*FH�$�I��t
L�d$�H��H���p��L��H��H���B���H�L$dH3%(uoH�� []A\A]A^�DHc�I��A�L�t�芴����u.I�E������M�m���x����1������fDL�����I�ă�u��8���螲��ff.���AVAUATUH��S��H�� dH�%(H�D$1���w��A��H�=��*���A�3*FH�$�I��t
L�d$�H��H������L��H��H���2���H�L$dH3%(uoH�� []A\A]A^�DHc�I��A�L�t��z�����u.I�E������M�m���x����1������fDL���Я��I�ă�u��8���莱��ff.���AVAUATUH��S��H�� dH�%(H�D$1���w��A��H�=�����A�3*FH�$�I��t
L�d$�H��H���P��L��H��H���"���H�L$dH3%(uoH�� []A\A]A^�DHc�I��A�L�t��j�����u.I�E������M�m���x����1����޳��fDL�����I�ă�u��8����~���ff.���AVAUATUH��S��H�� dH�%(H�D$1���w��A��H�=0��
���A�3*FH�$�I��t
L�d$�H��H���
��L��H��H������H�L$dH3%(uoH�� []A\A]A^�DHc�I��A�L�t��Z�����u.I�E������M�m���x����1����β��fDL��谭��I�ă�u��8����n���ff.���AVAUATUH��S��H�� dH�%(H�D$1���w��A��H�=�����A�3*FH�$�I��t
L�d$�H��H���0
��L��H��H������H�L$dH3%(uoH�� []A\A]A^�DHc�I��A�L�t��J�����u.I�E������M�m���x����1���辱��fDL��蠬��I�ă�u��8����^���ff.���AVAUATUH��S��H�� dH�%(H�D$1���w��A��H�=����A�3*FH�$�I��t
L�d$�H��H���	��L��H��H����H�L$dH3%(uoH�� []A\A]A^�DHc�I��A�L�t��:�����u.I�E������M�m���x����1���记��fDL��萫��I�ă�u��8����N���ff.���AVAUI��ATI��U��SH��pdH�%(H�D$h1�H�D$H��H�D$HH�D$H�D$PH�D$H�\$@H�D$X�����jA�H�D$@H��1�H�x�%fDH��tLc�O�D�L���H��H9�tH�9��H��t�H��H�H9�u�L�t$9��	������������H�\$H�T$H�$H�D$ �H�T$(I��t
L�t$0�H�t$ �r��H��L��H���D�H�\$hdH3%(��H��p[]A\A]A^�Hc�L�t�蓭��������L��������I�������H�=��蟫��H�$H�D$�H�D$3*F�3*F�?���f.�H�T$H�$��DH�$뿺1���謮���g������S�H��")�藩���H�=H�薰���H�=;�H��!�~����H�=&�H�Ë!�f����H�=�H���!�N����H�=��H���!�6���H������H�=��H�#�!����H���ή���H�=\�H���!���H��议���H�=B�H�ˊ!�֯��H��莮���H�=+�H���!趯��H���n����H�=��H���!薯��H���N����H�=��H�[�!�v���H���.����H�=��H�3�!�V���H�������H�=��H��!�6���H������H�=�H��!����H���έ����H���!�X���H��!H��H��!��H�=��!���H���H�=�H�ى!H���H�É!H�|!H�0����H��!H�5R�H��H�̉!H��t���H�=��!H���!H��!H�0�g���H�5Ѐ!�
�v��H�=��!H�5�H���P���H�5)�!�
�O��H�=h�!H�5��H���)���H�5�!��(��H�=A�!H�5��H������H�5[!����H�=�!H�5��H���ۭ��H�=�!�3*FH�5���í��H�=�!�
HH�5��諭�����!����H�=Lj!H�5n�H��舭�����!���H�=��!H�5R�H���e���H�=��!H�5G:���R���H�={�!�����H�_��H�5'�質��H�=\�!�����H�0��H�5�蔪��H�==�!�����H�q.��H�5��u���H�=�!�����H�R.��H�5���V���H�=��!�����H��!��H�5���7���H�=�!�H����H�5������H�=��!�H�5��H�5�����H�=��!�H���H�5���ک��H�=��!�����H�G��H�5��軩��H�=d�!�����H���H�5�蜩��H�=E�!�����H����H�5���}���H�=&�!�����H���H�5���^���H�=�!�����H����H�5��?���H�=�!�����H�\��H�5��� ���H�=Ɇ!�����H��H�5������H�=��!�����H�N��H�5�����H�=��!�����H�����H�5���è��H�=l�!�����H����H�5��褨��H�=M�!�����H�Q���H�5r�腨��H�=.�!�����H����H�5[��f���H�=�!�����H����H�5=��G���H�=�!�����H���H�5&��(���H�=х!�����H���H�5��	���H�=��!�����H�F���H�5�����H�=��!�����H�'���H�5���˧��H�=t�!�����H�H�H�5��謧��H�=U�!�����H�)�H�5��荧��H�=6�!�����H�J���H�5���n���H�=�!�����H���H�5j��O���H�=��!�����H�����H�5T��0���H�=ل!�����H���H�56�����H�=��!�����H����H�5 ��Ҧ��H�=��!�H���H�5�賦��H�=|�!1�H�C�H�5��藦��H�=`�!1�H�'�H�5���{���H�=D�!1�H�>��H�5���_���H�=(�!1�H�=��H�5���C���H�=�!1�H��<��H�5�'���H�=�!1�H���H�5A�����H�=ԃ!1�H�+k��H�5�����H�=��!1�H�O�H�5���ӥ��H�=��!1�H�3�H�5��跥��H�=��!1�H���H�5��蛥��H�=d�!1�H���H�5}�����H�=H�!1�H�/�H�5���c���H�=,�!1�H��n��H�5G��G���H�=�!1�H��l��H�5%��+���H�=�!1�H��6��H�5�����H�=؂!1�H��:��H�5����H�=��!1�H�:��H�5R��פ��H�=��!1�H�g9��H�5>�軤��H�=��!1�H��8��H�5*�蟤��H�=h�!1�H�8��H�5�胤��H�=L�!1�H�c7��H�5��g���H�=0�!1�H��6��H�5���K���H�=�!1�H�6��H�5���/���H�=��!1�H�����H�5��裣��H�=܁!1�H�����H�5��臣��H�=��!1�H�g���H�5���k���H�=��!1�H�K���H�5���O���H�=��!1�H�/���H�5���3���H�=l�!1�H���H�5B�臣��H�=P�!1�H�G�H�5.��k���H�=4�!1�H�+��H�5.��O���H�=�!1�H�_��H�5��3���H�=��!�����H����H�5������H�=݀!1�H����H�5�����H�=��!1�H�H��H�5���ܢ��H�=��!1�H���H�5�����H�=��!1�H����H�5��褢��H�=m�!�H��z��H�5|�腢��H�=N�!�H�r��H�5o��f���H�=/�!�����H���H�5@��G���H�=�!�����H����H�5*��(���H�=�!1�H���H�5�����H�=�!1�H����H�5���H�=�!�H����H�5���ѡ��H�=�!�H�~��H�5��財��H�={!�����H�/��H�5��蓡��H�=\!�����H�P��H�5���t���H�==!�����H�q��H�5���U���H�=!�����H����H�5q��6���H�=�~!�����H���H�5\�����H�=�~!�H��H�5B����H�=�~!�H�E�H�5(��٠��H�=�~!�H�V��H�5��躠��H�=�~!�H�'q��H�5��蛠��H�=d~!�H���H�5���|���H�=E~!1�H�����H�5���`���H�=)~!1�H� ���H�5���D���H�=
~!1�H�D�H�5���(���H�=�}!�����H���H�5z��	���H�=�}!1�H�����H�5g����H�=�}!1�H�ݽ��H�5M��џ��H�=�}!1�H�����H�5��赟��H�=~}!1�H�����H�5��號��H�=b}!1�H�����H�5���}���H�=F}!1�H�����H�5���a���H�=*}!1�H�����H�5x��E���H�=}!1�H�ev��H�5d��)���H�=�|!1�H��6��H�5R��
���H�=�|!�H�jo��H�5p����H�=�|!1�H���H�5e��Ҟ��H�=�|!�H�O%��H�5S�賞��H�=||!�H��+��H�5;�贞��H�5]|!H�=.�聡��H�5���H��H�8|!����H�=,|!�����H�ȶ��H�5��l���H�=
|!�����H���H�5���M���H�=�{!�����H�����H�5���.���H�=�{!�����H�k���H�5d�����H�=�{!�����H�����H�5Y���H��{!H���XH�Qq!H�8H�5���z���H�=k{!�����H����H�5A�諝��H�=L{!�����H�����H�5g�茝��H�=-{!�����H��S��H�5I��m���H�={!�����H��Z��H�54��N���H�=�z!�����H��Y��H�5��/���H�=�z!�����H��X��H�5�����H�=�z!�����H��W��H�5����H�=�z!�����H�~V��H�5���Ҝ��H�=sz!�����H�_V��H�5��賜��H�=Tz!�����H�@U��H�5��蔜��H�=5z!�����H�!T��H�5���u���H�=z!1�H���H�5
��9���H�=�y!1�H���H�5������H�=�y!1�H���H�5�����H�=�y!1�H���H�5�����H�=�y!1�H�u�H�5���ɛ��H�=�y!1�H�i�H�5��譛��H�=ny!1�H�M�H�5K�葛��H�=Ry!1�H���H�5J��u���H�=6y!1�H�u��H�5���Y���H�=y!�����H��r��H�5��:���H�=�x!1�H�j���H�5������H�=�x!�����H���H�5p����H�=�x!�����H���H�5�����H�=�x!�����H�͹��H�5�����H�=�x!�����H����H�5��袚��H�=cx!�����H��3��H�5��胚��H�=Dx!�H��j��H�5���d���H��m!1�H�ğ��H�5�H�;�E���H�;1�H����H�5
��-���H�;1�H�!l��H�5������H�=�w!1�H�u�H�5�����H�=�w!1�H�i���H�5���ݙ��H�=�w!1�H�]��H�5�����H�=�w!1�H�'��H�5z�襙��H�=fw!1�H�Uc��H�5f�艙��H�=Jw!1�[H����H�5Q��l���@�uH�x���H��t2H��t<�u<tDH��l!H�8����DH��l!H�8�k����H��l!H�8�[����H��l!H�8�K����H��l!H�8�;����AVI��AUL�oATUH�-�SL�'1�A�� fDL��M��tI�v�H���O�����t��H����u׉�[]A\A]A^�@AVI��AUL�oATUH�-�SL�'1�A�� fDL��M��tI�v�H��������tH����u׻
��[]A\A]A^�ff.�@AWAVAUI��ATI��H��USH��H���!���Lc�I9�}Y��L)�蟚��L�8A�D�A�DG t>L�L��L��H���m�����u)H��I����F�H��A�DG t��L9�u��fD1�H����[]A\A]A^A_�ff.�f�H9�s?UH��SH��H)�H������H��H�1��DH��H9�t�T�DQu�H��[]�1��f�USH��H�_H����H���ř��L�M1�H�}L�1�A�� �D��/u��H��H9�tNH��M��tH�M�4A��A��H��A�4rf��AE�A��A��f��AE���-t��.u�H����H9�u�H��[]�f����H��1�[]�ff.�@S�j���H��H���ߓ��H�����H��[�f���USH��H��H�,x!H��u H�-���H��賘��H�x!H��t�H���_���H�ߺH������H���[]�AUATI��UH��SH��H��dH�%(H�D$1�H��v!H�<$H��u&L�-~�fD�L���3���H��v!H��t�H��H��H���t���H��1�H��t
L��ոH�T$dH3%(uH��[]A\A]�����ff.�@��ATUSH��H����h���H���0���H�H�lH��y!H��u&L�%��fD�L��胗��H��y!H��t�H���/���H��H��H����[�]A\����ATUSH��H������1Ҿ
H���)���H��H�7x!H��u#L�%���L������H�x!H��t�H��试��H��H��H���q���[�]A\����ATUSH��H����h���H�����H�H�lH��w!H��u&L�%��fD�L��胖��H��w!H��t�H���/���H��H��H����[�]A\����ATUSH��H������1Ҿ
H���)���H��H�'w!H��u#L�%h��L������H�w!H��t�H��诔��H��H��H���q���[�]A\����ATUSH��H����h���1Ҿ
H��詎��H��H��v!H��u#L�%���L��胕��H��v!H��t�H���/���H��H��H����[�]A\����ATUSH��H������1Ҿ
H���)���H��H��v!H��u#L�%r��L������H�dv!H��t�H��诓��H��H��H���q���[�]A\��USH��H��dH�%(H�D$1�H�@s!H�$�H��u$H�-P�@�H��苔��H�s!H��t�H��H��H��H���ɐ��H��u4H�$��H��+H��觐��H�T$dH3%(uH��[]�H�$�������USH��H��H�dH�%(H�D$1�H�@H���H�D?H�$H�hr!H��u$H�-�@�H���Ó��H�Dr!H��t�H��H�ƿ����1Ҿ
H��H��萌��H��H�����H�T$dH3%(uH��[]�fD�#����s������f���AUATUH��SH��H���H���ߌ��H��I���ό��L��1Ҿ
H���
���I��H�;t!H��u'L�-����L�����H�t!H��t�H��菑��L��H��H���Q���H��1Ҿ
貋��H��H��s!H��u$L�%��@�L��苒��H��s!H��t�H���7���H��H��H�����H���[]A\A]�f���AVAUATUH��SH��H���H��dH�%(H�D$1��͋��H��I��轋��H��I��譋��H��I��蝋��H��I�FI� tI�F����H��,wH���H�BH�TL��H�$�
1�襊��H���+H����I��H�s!H��u*L�5�f.��L���c���H��r!H��t�H������L��H��H���э��L��1Ҿ
�2���I��H��r!H��u$L�-m�@�L������H��r!H��t�H��跏��L��H��H���y���H��1Ҿ
�ډ��H��H�Xr!H��u$L�%�@�L��賐��H�4r!H��t�H���_���H��H��H���!����H�L$dH3%(u
H��[]A\A]A^��
���f.���AUATUH��H��SH���H�����H�޿I���߉��L��1Ҿ
H������I��H�cq!H��u'L�-X���L����H�<q!H��t�H��蟎��L��H��H���a���H��uH���[]A\A]�1Ҿ
H��詈��I��H��p!H��u#H����H��胏��H��p!H��t�H���/���L��H��H����H���[]A\A]Ð��AUATUH��H��SH���H���߈��H�޿I���ψ��H��I��ufH��1Ҿ
����H��H�Up!H��u!L�%F���L�����H�4p!H��t�H��菍��H��H��H���Q���H���[]A\A]Ð1Ҿ
L��衇��I��H��o!H��u#L�%���L���{���H��o!H��t�H���'���L��H��H������>���@AWI��AVM��AUI��ATUSH��H��8H�$dH�%(H�D$(1�H�;p!H�|$H��u*H�-B�f.��H����H�p!H��t�H�l$H�ߺH��H���/���H��1�H���+H�D$H��o!H��u$L�%��@�L��蓍��H��o!H��t�H��H��H���ԉ��H�D$I��H�qo!H��u!@�H�=���G���H�Po!H��t�H��H��H��舉��L�d$���H�H��A����I�H�@L)�H���H�DH�D$H��n!L�|$ H��u L�%��L���Ì��H��n!H��t�H��H��L������H�4$H��A�ָH�L$(dH3%(uRH��8[]A\A]A^A_�fDH���(���H��A���P���L��H�T$����H�T$I���9����H������F����Ά��ff.���AUI��ATUH��S�H��XdH�%(H�D$H1�I��@��L��薅��I��H��H��u�H�|$�N�H�L�dH��g!H��u$H��@�H��裋��H�|g!H��t�H���O���L��H��H������H�|$�W�H�L�dH�Ag!H��u%H���D�H���K���H�g!H��t�H�����L��H��H��蹇��H�|$1Ҿ
����I��H��f!H��u"H�W�f��H����H��f!H��t�H��蟉��L��H��H���a���H�|$ 1Ҿ
���I��H�~f!H��u*H���f.��H��蓊��H�Tf!H��t�H���?���L��H��H������H�|$(1Ҿ
�`���I��H�f!H��u*H���f.��H���3���H��e!H��t�H���߈��L��H��H��衆��H�|$01Ҿ
����I��H��e!H��u*H�"�f.��H���Ӊ��H��e!H��t�H������L��H��H���A���H�|$81Ҿ
蠂��I��H�Fe!H��u*H�+�f.��H���s���H�e!H��t�H������L��H��H������H�L$HdH3%(uH��X[]A\A]��̃��ff.����AVAUATUH��H��SH���豂��H�޿I��衂��H�޿I��葂��H��I��up1Ҿ
L���Ɂ��I��H�7j!H��u#L�-��L��裈��H�j!H��t�H���O���L��H��H������H��us[�]A\A]A^�D1Ҿ
L���Y���I��H��i!H��u#L�%���L���3���H��i!H��t�H���߆��L��H��H��衄���4���@1Ҿ
H�����I��H�_i!H��u#H�B��H���Ӈ��H�<i!H��t�H������L��H��H���A���[�]A\A]A^���AUI��ATUH��S�H��XdH�%(H�D$H1�I��@��L������I��H��H��	u�H�|$���H�L�dH��c!H��u$H���@�H���#���H��c!H��t�H���υ��L��H��H��葃��H�|$1Ҿ
����I��H�^c!H��u*H�/�f.��H���Æ��H�4c!H��t�H���o���L��H��H���1���H�|$�w�H�L�dH��b!H��u%H��D�H���k���H��b!H��t�H������L��H��H���ق��H�|$ 1Ҿ
�8��I��H��b!H��u"H���f��H������H�tb!H��t�H��迄��L��H��H��聂��H�|$(1Ҿ
��~��I��H�6b!H��u*H��f.��H��賅��H�b!H��t�H���_���L��H��H���!���H�|$01Ҿ
�~��I��H��a!H��u*H���f.��H���S���H��a!H��t�H�����L��H��H�����H�|$81Ҿ
� ~��I��H�fa!H��u*H�B�f.��H����H�<a!H��t�H��蟃��L��H��H���a���H�a!L�d$@H��u)H���f��H��裄��H��`!H��t�H���O���L��H��H������H��`!H��u&H���fD�H���[���H��`!H��t�H�������H��H���ǀ���H�L$HdH3%(uH��X[]A\A]��~��f���AWAVAUATI��H��USH���H��(dH�%(H�D$1��}��H�޿H���{}��H����H�=�W!�H��e!H�l$H��u#H����H��苃��H�|e!H��t�L�|$H�=cW!�H��L������H��1�H���tH�޿�|��1Ҿ
H���8|��H�޿H�D$��|��I��H���yH�޿�|��I��H���GH�޿�|��H��H����H�xH�@H��^H�D?H�D$H��d!H��u%��H�=��蟂��H��d!H��t�L���H�ƿ��~��H��1Ҿ
I���l{��L��H�����H��H�޿�|��H��H����H�%d!H��u!H�m���H���#���H�d!H��t�H���π��H�T$L��H���~��I���-I�����H��u`H�L$dH3%(�fH��([]A\A]A^A_�D1Ҿ
H���z��I������1Ҿ
H���z��I���p���f�H�Ic!H��u%H���D�H���[���H�$c!H��t�H������H��L��H����}����O����H��b!H��u%H�M�D�H������H��b!H��t�H�����L��L��H���q}���H�����M���DH��b!H��u%H���D�H��裀��H�|b!H��t�H���O��L��L��H���}��I��������J���f�H�|$@����H�|$�z��H���Ⱥ���*�����)R���)�H�CH� tH�C��J���<PD�Hc�H�DH�D$�����H��H��a!H��u*L�-κf.��L������H��a!H��t�H���~��H��L��H���A|��H�=�S!����ZH�=����H�vS!��������H�������+x������z�����AUI��ATUH��S�H��hdH�%(H�D$X1�L�d$f���L����x��I��H��H��	u�H�|$��H�L�dH�8[!H��u$H�T�@�H����~��H�[!H��t�H���}��L��H��H���Q{��H�|$ 1Ҿ
�w��I��H��Z!H��u*H��f.��H���~��H��Z!H��t�H���/}��L��H��H����z��H�|$(�7�H�L�dH�qZ!H��u%H���D�H���+~��H�LZ!H��t�H����|��L��H��H���z��H�|$01Ҿ
�v��H�D$I��H�Z!H��u)H���f��H����}��H��Y!H��t�L�l$�H��L��L���y��H���&H��Y!H��u#H�$��H���s}��H�|Y!H��t�H���|��L��H��H����y��H�|$81Ҿ
�@v��I��H�>Y!H��u*H�f�f.��H���}��H�Y!H��t�H���{��L��H��H���y��H�|$@1Ҿ
��u��I��H��X!H��u*H��f.��H���|��H��X!H��t�H���_{��L��H��H���!y��H�|$H1Ҿ
�u��I��H�nX!H��u*H���f.��H���S|��H�DX!H��t�H���z��L��H��H���x��H�X!L�d$PH��u)H���f��H���|��H��W!H��t�H���z��L��H��H���qx��H��W!H��u&H��fD�H���{��H��W!H��t�H���gz���H��H���'x���H�L$XdH3%(uwH��h[]A\A]��H�D$�H�xW!H��u$H��@�H���C{��H�TW!H��t�L��H��L���w��H�������L���C�I���u����u��fDUH��AWI��AVI��AUATI��SH��H��8D�E�dH�%(H�E�1�H�E�H��t	���bH�{\!H��u'L�-v���L���z��H�T\!H��t�H��1�1�H����v��H��I���-H��t
I���aI�t$L��H� �6H�PH�H9�v~D�*A�Eը���H�u�H�U��=z��H�U�H�u�H��H��H9�tKD�*A�Eը��gB�Dit�H9�v.���+���LI��H��H�U����H�U�H�4�>��H����H�CH� tH�C�8'�HH�{�=H��L��M��I��I���u�L��I�t$I�$ ��I�T$�:'tH����H�PH�H9��^D�"A�D$ը��}H�u�H�U��8y��H�U�H�u�H��!H��H9��#D�"A�D$ը��BB�Dat�H9�����+���#H�U�A�H��H�U����H�U�H��H��LC�H+M�H�qH����+H�AH��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����L�D$L�e�I���H�u�L��H��H�M���t��H�M�1Ҿ
H����q��L��H�E�� v��H��Y!H��u%L�%��D�L����w��H��Y!H��t�H���v��H�U�L��H���Ht���E���tJH�bY!H��u&L�%һfD�L���w��H�<Y!H��t�H���7v���L��H���s��I���LM�fI�NI� tI�NI�H�M�I9��'�Sw��H�M�H��f.�H��L9����DBt�I9���L��H��H�M�����H�M�H�pI��H�����H�@H��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����L�D$L�e�I���H��L��L���6s��1Ҿ
B�0H���ro��L��I���wt��H�X!H��u$L�%��@�L���3v��H��W!H��t�H����t��L��L��H���r��H����H�sL�sH� tL�sI�6L9����v��H��I��I9���A��DBt�L9���H��L�����H�pH��H�����H�@H��H�E�H��H%�H)�H���H��H9���H��H��$���H���H�������I������I��u8M��H���y����u����OI��A��a���f�H�P�����I��L��H�sH��H��~L��A�I��H�����f�H��~H� ��H�S�:'�&I����I��L��A����fDA�|$'t`H��ZH�����M�����I����A�L�����DI������H�H��H�s��� H�����H�P�����L��M��A�I�������H��u��}�A����:���I��������@�U�A�������I���`���H���������fD��t	H)�H�L�H�L$L�e�H���H��H��L���<p��1Ҿ
�H���yl��L��H���~q��H��T!H��u#L�%���L���;s��H��T!H��t�H����q��H��L��H���o��I��tBH��T!H��u H�O��H����r��H��T!H��t�H���q��L��L��H���ao��H�E�dH3%(�cH�e�[A\A]A^A_]��H�U�E1�H�������I��H�����@H�H��H�sL��� �7����H�QL�e�H�M�H��L���r��H�M�I������@L)�L��M���Zq��I���f���f�H�PL�e�H�M�H��L���Hr��H�M�I���x���@H�PL�e�H��L���$r��H���R���@�{'����L��A�I��H���t���I��A���7���H)�H�L��V���H)�H�L����L��A�I��H���5���A�L�����L��A��T����k��fD��AVAUATI��H��USH�����j��H�޿I����j��H�޿I���j��H�޿H���j��L��H������E1�H�H�TH��tH�EH�E u0�E1����<BA��L��H��L�����[�]A\A]A^�DH�E��f���AVAUATI��H��USH����1j��H�޿I���!j��H�޿I���j��H�޿H���j��L��H���&��E1�H�H�TH��tH�EH�E u0�E1����<BA��L��H��L������[�]A\A]A^�DH�E��f���AUATUH��H��SH���H���i��H�޿I���oi��H�޿I���_i��L��L��H��H��E1���H���[]A\A]�ff.����f.����w������AUATUH��H��SH���H����h��H�޿I����h��H�޿I����h��L��H������L��H��H��H�E1�H�T��H���[]A\A]�ff.����AUATUH��H��SH���H���oh��H�޿I���_h��H�޿I���Oh��L��H���t��L��H��H��H�E1�H�T�|�H���[]A\A]�ff.����AVAUATUSH��H���H��dH�%(H�D$1���g��H��H�~M!H��u*L�%V�f.��L���n��H�TM!H��t�H���l��H��H���h��H��uvH�M!H��u#L�% ��L���m��H��L!H��t�H���gl��H��H���Lh��H����H�L$dH3%(���H��[]A\A]A^�@H��L!H��u%L�%��D�L���Cm��H��L!H��t�H����k��H��H����g��H���<���1Ҿ
H���f��H�$I��H�AL!H��u%L�%��D�L����l��H�L!H��t�I��H��L��L���i��H������H��K!H�$?H��u%L�5F�D�L���l��H��K!H��t�L��H��L����h��H���}���H��K!H��u(L�%����L���3l��H�dK!H��t�H����j��L��H��H���h���.���@H�)K!H��u%L�%1�D�L����k��H�K!H��t�H���j��H��H���tf��H���(���1Ҿ
H���d��H�$I��H��J!H��u%H�-A�D�H���{k��H��J!H��t�I��H��L��L���g��H�������H�aJ!H�$1H��u%H�-�D�H���#k��H�4J!H��t�L��H��L���dg��H���i���H�J!H��u(H�-$���H����j��H��I!H��t�H���i��L��H��H���Ag�������Ge�����AWAVAUATUH�oSH��xH�_H�|$(dH�%(H�D$h1�H� tH�oH���H��H���������H�I��H���H��I)�L���������H�L��E1�H)�H��~h�3j��I��H��L�+L�H��1�1��D��H��H�T1�I9�t�>A�Dx t�H���I9�u�H9���H����H����H��~$�H�5	�H���f������H��H��D�}A�A�Gը���H�D$(H�D$@H�D$(H�L$hdH3%(L���5H��x[]A\A]A^A_�f.�H���L��H��E1��k���������H�L��A�H)����H��H��I�U�H���<����ƒ���H�
j���Hc�H�>��fDH�(�H��H��E1�����������H�A�H)��~���H��L�t$8�
H��L���e��H�|$8I���<:����H��<,��I���+H�H��H��H�|$8H)�H����H�t$@H�L$@�
L�D$4��f��H�L$8H�T$@H�H�L$8H9�v�91ɨ����59�|@��9����H��H��H��A��-uI��H��Mi�H����H��uH��H�L�L�d�H�����H�5�H���d������������I���FH���
L��H�|$8�d��H��H��;�#H�D$8�8:��H��E1�H��H)�H���z�H�)��O�LH���DHhH���k�E���H�
~�A��Jc����/���L�5��I�A26�������L��L����c��������C�<.�����H�
1�E��B�D���E�H�L�d�$���@H����O�H��O�H��G���H�i����H�Y��6���@�OH�E��H��DA����D1�1�H�|$P�2DL�L�h��t<H��A� N�/I��A�1�H��L9����D�I��L��C�DP t����f�L����1�E1�H��EMi�I�M�L��H��A��-LD�O�d�����H�D$@��;���DH��L�t$@�
H���A�L��L�T$I)�H�D$ H�D$4L��I��L�\$H�D$�c��L�\$L�D$L��
�I��J�|��c��H��L�T$I��vL��H��L)�H���3������
Hc���_��K�T-H�|H��H�T$H�e��H�L$H��+H���a��H��I���Gc��H���-���L���%d��I������L+d$ L�D$L��
J�|%�H�D$�'c��L�\$I���W���H�x�
L��H�|$8�da��I��H��;�����H��H��H)�H���g����^��ff.�@��AWAVAUATUH��H��SH���H��HdH�%(H�D$81��{]��H�޿I���k]��H�޿H�D$�Y]��H�޿H�D$�G]��H�޿I���7]��H�D$ H�D$H�XH� tH�XL�hH�D$I����H�
�Jc�H�>���H���n
I���d
B�D+�������B�D+��DP�H�H�DH�D$H��C!H��u&L�=.�fD�L����b��H�|C!H��t�H���a��H�T$H��H���O_��B�D+�������B�D+��DP�H�H�DH�D$H�-C!H��u)L�=ʜf��L���sb��H�C!H��t�H���a��H�T$H��H����^��B�D+�������B�D+��DP�H�H�DH�D$H��B!H��u)L�=U�f��L���b��H��B!H��t�H���`��H�T$H��H���o^��B�D+�������B�D+��DP�H�H�DH�D$H�=B!H��u)L�=��f��L���a��H�B!H��t�H���?`��H�T$H��H���]��I��	��B�D+�������B�D+��DP�H�H�DH�D$H��A!H��u'L�=����L���a��H��A!H��t�H����_��H�T$H��H���]��I������������C�DP�I��tI�VI� tI�V���ـ:-D�H�L�lH�$A!H��u'H�A��H���`��H�A!H��t��H���8_��L��H��H���\��H�D$H�T$H�T$(H�T$H����L�hH� tL�hH�XI���H���S���H��T�AA�D�������A�D��DP�H�L�|H��?!H��u L�5��L����_��H��?!H��t�H���^��L��H��H���A\��H��~jA�D�������A�D��DP�H�L�|H�6?!H��u*L�5��f.��L���c_��H�?!H��t�H���^��L��H��H����[��H��ukA�E������A�E�DP�H�L�lH��>!H��u$H�H�@�H���^��H��>!H��t�H���]��L��H��H���i[��f�H�D$H�D$(H�D$I����H�@I�|$H���H�D?H�D$0H�>!H��u"H���f��H���s^��H��=!H��t�H�L$0�H�ƿ�Z��L��1Ҿ
H���>W��H��H���^��I��H��=!H��u%H�b�D�H���^��H��=!H��t�H���\��L��H��H���yZ��H�\$ H��twL�cH� ��H�>=!L�kH��u&L�5��fD�L���]��H�=!H��t�H���O\��H��H��H���Z��A�<$[��H�D$ H�D$(H�D$ H�L$8dH3%(���H��H[]A\A]A^A_��L�c�b����H���N������H��T�<���A�E������A�E�DP�H�L�|H��<!H��u%L�5�D�L����\��H�d<!H��t�H���w[��L��H��H���9Y��H��~bA�E������A�E�DP�H�L�|H�<!H��u$L�5��@�L���c\��H��;!H��t�H���[��L��H��H����X��H���g���A�E������A�E�DP�H�L�lH��;!H������H�<�@�H����[��H�|;!H��t���f�I��I�\$�:H��L����W��H�|$ H����H�pL��H��L)�H)�H)�H���^[��H�|$ H�ھI���I[��H�D$ H��:!H��u!H�U���H���c[��H��:!H��t�H���Z��L��H��H����W��H�|$ �gY��I��H��:!H��u!H�a���H���[��H�t:!H��t�H���Y��L��H��H���W���v���@�S���D���fD��������S�TJ�Hc�L�lI��t
H����H��;!H���H��������H���Z��H�t;!H��t���f�I��t
H����
1�1�@���H���TJ�H��u�H�T:!Hc�L�lH�������H�~�@�H���Z��H�$:!H��t����f�I��t
H���p��������C�DP�I��tI�VI� ����ـ:-D�H�L�tH��9!H��u#L�-D��L���Y��H��9!H��t�H���?X��L��H��H���V���1�f.����H���TJ�H��u�H�49!Hc�L�lH�������H���@�H���Y��H�9!H��t����f.�I��t
H�����L�-7��������C�DP�H�L�tH��9!H��u@�L���X��H��9!H��t�H���_W��L��H��H���!U���C�������C�DP�H�L�lH�H9!H�����H����H���SX��H�$9!H��t�����f�I��t
H������������C�DP�I��tI�VI� �W���ـ:-D�H�L�tH��8!H��u#L�-���L����W��H��8!H��t�H���V��L��H��H���AT���C�������C�DP�H�L�tH�@8!H��u$L�-Ւ@�L���sW��H�8!H��t�H���V��L��H��H����S���C�������C�DP�H�L�lH��7!H�������H�u��H���W��H��7!H��t����f�I��t
H���`E1�1���B�+I���DP�I��u�I��tI�VI� �����ـ:-D�H�L�|H�k6!H��u'L�58���L���V��H�D6!H��t�H���/U��L��H��H����R��1����B�+I���DP�I��u�H�L�lH��5!H�������H�~�@�H���V��H��5!H��t����f�L���U��I���V��A�T$H��DP�gL�l$ �I���D1�1�@���H���TJ�H��u�I��tI�FI� ����ـ8-D�H��5!Hc�L�|H��u'L�5���L���[U��H��5!H��t�H���T��L��H��H����Q���C�������C�DP�H�L�|H�p5!H��u$L�5]�@�L���T��H�L5!H��t�H���S��L��H��H���iQ���C�������C�DP�H�L�|H�5!H��u$L�5�@�L���T��H��4!H��t�H���GS��L��H��H���	Q��I��	�6�C�������C	�DP�H�L�|H��4!H��u"L�5~�f��L���3T��H�t4!H��t�H����R��L��H��H���P��I�����C
�������C�DP�H�L�|H�&4!H��u*L�5�f.��L����S��H��3!H��t�H���oR��L��H��H���1P��I��ub�C�������C
�DP�H�L�lH��3!H��u&H���fD�H���[S��H��3!H��t�H���R��L��H��H����O��H�b3!H��u&H�u�fD�H���S��H�<3!H��t�H���Q��1�H��H���O��H�D$���I�F�C����I�V�����I�V���I�V�����C�������C�DP�H�L�tH�O3!H��u#L�-���L���cR��H�,3!H��t�H���Q��L��H��H����N���C�������C�DP�H�L�tH��2!H��u$L�-U�@�L���R��H��2!H��t�H���P��L��H��H���qN����������C�DP�H�L�lH��2!H���8�H����H���Q��H�\2!H��t���f��C�������C�DP�H�L�tH�W1!H��u#L�-���L���SQ��H�41!H��t�H���O��L��H��H���M���C�������C�DP�H�L�tH��0!H��u$L�-E�@�L����P��H��0!H��t�H���O��L��H��H���aM���C�������C�DP�H�L�tH��0!H��u$L�-�@�L���P��H�d0!H��t�H���?O��L��H��H���M�����0H�L�lH�-0!H�����H���D�H���;P��H�0!H��t���f.��C�������C�DP�H�L�tH��0!H��u#L�-+��L����O��H��0!H��t�H���N��L��H��H���QL����������C�DP�H�L�lH��0!H����H�҉��H���O��H�d0!H��t����f��C�������C�DP�H�L�tH�w/!H��u#L�-{��L���3O��H�T/!H��t�H����M��L��H��H���K�����0H�L�lH�/!H���t�H�.�D�H����N��H��.!H��t��J�f.�H��/!H���0�H��f��H���N��H��/!H��t���f��C�������C�DP�H�L�tH�o.!H��u#L�-���L���CN��H�L.!H��t�H����L��L��H��H���J���C�������C�DP�H�L�tH�.!H��u$L�-5�@�L����M��H��-!H��t�H���L��L��H��H���QJ�����0H�L�lH��-!H���$�H�هD�H���M��H��-!H��t���f.��H�=Ƌ��G��L��H����I��H�D$ ���I�����1�1�@���H���TJ�H��u�I��tI�FI� tI�F��ـ8-D�H�k-!Hc�L�lH��u'H�����H����L��H�<-!H��t�H���K��L��H��H���AI��H�-!H�������H��f.��H���L��H��,!H��t��k����
G��ff.�f���AVAUI��ATI��US�H�ĀdH�%(H�D$x1�H��f���L����E��H�D�H��H��u�H�\$H���H�|$H���H�sH� tH�sH�-U��H��������ZH�|$H��uWH�sH� tH�s�H����€�1�����@H�L$xdH3%(�H��[]A\A]A^��1Ҿ
�\D��H��H�J*!H��u&H���fD�H���3K��H�$*!H��t�H����I��H��L��H���G��H�|$PH���1Ҿ
�C��H��H��)!H��u H���H����J��H��)!H��t�H���I��H��L��H���AG��H�|$X1Ҿ
�C��H��H�N)!H��u*H�˄f.��H���sJ��H�$)!H��t�H���I��L��H��H����F��H�|$`H��tU1Ҿ
�:C��H��H��(!H��u$H�\�@�H���J��H��(!H��t�H���H��H��L��H���F��H�|$hH��tM���H��H�(!H��u#H���H���I��H�\(!H��t�H���gH��H��L��H���)F��H�l$p�H�������H�(!H��u"H�V�f��H���cI��H��'!H��t�H���H��H��L��H����E��H���iG��H��H��'!H��u#H�c��H���I��H��'!H��t�H���G��H��L��H���E����W����1Ҿ
��A��I��H��'!H��u&H�-�fD�H���H��H��'!H��t�H���WG��L��L��H���E��H�sH� ��������1Ҿ
H���aA��H�{I���QH�L'!H��u L�%��L���3H��H�,'!H��t�H����F��L��L��H���D��H�|$H���C������DH�|$(H���)H�l$@H����H�|$81Ҿ
��@��I��H��&!H��u#H���H���G��H�|&!H��t�H���OF��L��L��H���D��H��1Ҿ
�r@��H��H�@&!H��u$H���@�H���KG��H�&!H��t�H���E��H��L��H���C��H�\$0H���	���1Ҿ
H���@��H�{H���sH��%!H������H�Q�fD�H����F��H��%!H��t����f�1Ҿ
�?��H��H��%!H��u&H���fD�H���F��H�t%!H��t�H���7E��H��L��H���B��H�\$ H���I���1Ҿ
H���K?��H�{H����H�%!H������H�DŽfD�H���F��H��$!H��t�����H���*���I�����H�|$HH������1Ҿ
��>��H��H��$!H�������H��D�H���E��H�l$!H��t��s���H���°��H���M���H��貰��H���}����@��D��AVAUI��ATI��US�H��dH�%(H��$�1�H��@��L����>��H�D�H��H��u�H�|$H���`H�|$(H����H�|$0H���pH�l$HH���'H�|$@1Ҿ
��=��I��H�#!H��u$H�!�@�H���D��H��"!H��t�H���WC��L��L��H���A��H��1Ҿ
�z=��H��H��"!H��u$H��@�H���SD��H��"!H��t�H���B��H��L��H���@��H�\$81Ҿ
H���=��H�{H���mH�@"!H��u+H�g@�H����C��H�"!H��t��H���B��H��L��H���R@��H�|$hH���1Ҿ
�<��H��H��!!H��u!H��}��H���C��H��!!H��t�H���/B��H��L��H����?��H�|$p1Ҿ
�P<��H��H�V!!H��u*H�{}f.��H���#C��H�,!!H��t�H����A��L��H��H���?��H�|$xH��tU1Ҿ
��;��H��H�� !H��u$H�@�H����B��H�� !H��t�H���oA��H��L��H���1?��H��$�H��tR�n���H��H�� !H��u(H��|��H���cB��H�\ !H��t�H���A��H��L��H����>��H��$��H����H� !H��u'H��|��H���B��H��!H��t�H���@��H��L��H���q>��H���	@��H��H��!H��u#H�~�H���A��H��!H��t�H���_@��H��L��H���!>���H��$�dH3%(��H�Ġ[]A\A]A^�D1Ҿ
�T:��H��H��!H��u&H��|fD�H���+A��H��!H��t�H����?��H��L��H���=��H�\$ 1Ҿ
H���9��H�{H����H�8!H�������H�q�H����@��H�!H��t�����f�1Ҿ
�9��H��H�!H��u&H��{fD�H���{@��H��!H��t�H���'?��H��L��H����<��H�\$H�sH� tH�sH�-���H���������H�|$H�GH� tH�G�8-u:H�sH� tH�s�H����€�1��������N���f.�1Ҿ
��8��H��H�"!H������H��zf.��H���?��H��!H��t����1Ҿ
�v8��H��H��!H�������H��z@�H���K?��H��!H��t��b���H���b���H���C���1Ҿ
H���8��H�{I����H�v!H��u*L�%�}f.��L����>��H�L!H��t�H���=��L��L��H���Q;�����H�l$XH��ucH�|$`H�����1Ҿ
�7��H��H��!H�������H��y�H���o>��H��!H��t����H��膩��I���A���H�|$P1Ҿ
�=7��I��H�c!H��u'H��y��H���>��H�<!H��t�H���<��L��L��H���:��H��1Ҿ
��6��H��H�!H�������H�'y��H���=��H��!H��t�����H���ʨ��H������-8��ff.�f���AUI��ATUH��S�H��HdH�%(H�D$81�I���L���6��I��H��H��u�H�|$1Ҿ
�+6��I��H�	!H��u%H�QwD�H���=��H��!H��t�H���;��L��H��H���q9��H�|$1Ҿ
��5��I��H��!H��u*H��vf.��H���<��H�|!H��t�H���O;��H��L��H���9��H�|$H��uFH�|$ H����L�d$(I����H�L$8dH3%(��sH��H[]A\A]�@1Ҿ
�$5��I��H��!H��u&H�FxfD�H���;��H��!H��t�H���:��H��L��H���i8��H�|$ H���c���襧��I��H��!H��u'H��u��H���;��H�d!H��t�H���G:��L��H��H���	8��L�d$(I������H�+!H��u'H�;v��H���C;��H�!H��t�H����9��L��H��H���7��L���I9��I��H��!H��u#H�Cw�H����:��H��!H��t�H���9��L��H��H���a7���t����g5�����AUI��ATUH��S�H��XdH�%(H�D$H1�I��@��L���64��I��H��H��	u�H�|$1Ҿ
�g3��I��H�!H��u!H��x��H���C:��H��!H��t�H����8��L��H��H���6��H�|$1Ҿ
�3��I��H��!H��u*H�Kuf.��H����9��H��!H��t�H���8��L��H��H���Q6��H�|$1Ҿ
�2��I��H�N!H��u*H��tf.��H���9��H�$!H��t�H���/8��L��H��H����5��H�|$ 1Ҿ
�P2��I��H��!H��u*H�vsf.��H���#9��H��!H��t�H����7��L��H��H���5��H�|$(1Ҿ
��1��I��H�~!H��u*H�sf.��H����8��H�T!H��t�H���o7��L��H��H���15��H�|$01Ҿ
�1��I��H�!H��u*H��tf.��H���c8��H��!H��t�H���7��L��H��H����4��H��!L�d$@H��u)H�
sf��H���8��H��!H��t�H���6��L��H��H���4��L���6��I��H�_!H��u#H�t�H����7��H�<!H��t�H���o6��H��L��H���14��H�|$8H��u&H�L$HdH3%(�ubH��X[]A\A]�fD�K���I��H��!H��u%H��qD�H���C7��H��!H��t�H����5��L��H��H���3����1��f.���AUI��ATUH��S�H��XdH�%(H�D$H1�I��@��L���0��I��H��H��	u�H�|$1Ҿ
�/��I��H�!H��u!H�Bu��H���6��H��!H��t�H���?5��H��L��H���3��H�|$H����H�|$H����H�|$ H���2H�|$(H����H�|$0H����H�|$8H���%L�d$@I���vH�L$HdH3%(���H��X[]A\A]�@1Ҿ
��.��I��H�2!H��u&H�qfD�H���5��H�!H��t�H���W4��H��L��H���2��H�|$H���'���1Ҿ
�n.��I��H��!H��u(H��p��H���C5��H��!H��t�H����3��H��L��H���1��H�|$ H������1Ҿ
�.��I��H�T!H��u H�,o�H����4��H�4!H��t�H���3��H��L��H���Q1��H�|$(H���}���1Ҿ
�-��I��H��!H��u H��n�H���4��H��!H��t�H���/3��H��L��H����0��H�|$0H���,���1Ҿ
�F-��I��H��!H��u H�hp�H���#4��H�d!H��t�H����2��H��L��H���0��H�|$8H�������͟��I��H�#!H��u'H�n��H����3��H��!H��t�H���o2��L��H��H���10��L�d$@I�������H��!H��u'H�cn��H���k3��H��!H��t�H���2��L��H��H����/��L���q1��I��H�g!H��u#H�ko�H���3��H�D!H��t�H����1��L��H��H���/������-��ff.�@��AUI��ATUH��S�H��HdH�%(H�D$81�I���L���Z,��I��H��H��u�H�|$1Ҿ
�+��I��H��!H��u%H��lD�H���c2��H��!H��t�H���1��L��H��H����.��H�|$1Ҿ
�0+��I��H�F!H��u*H�[lf.��H���2��H�!H��t�H���0��H��L��H���q.��H�|$H��uFH�|$ H����L�d$(I����H�L$8dH3%(��sH��H[]A\A]�@1Ҿ
�*��I��H��!H��u&H��mfD�H���[1��H�l!H��t�H���0��H��L��H����-��H�|$ H���c�������I��H�+!H��u'H�Tk��H���0��H�!H��t�H���/��L��H��H���i-��L�d$(I������H��
!H��u'H��k��H���0��H��
!H��t�H���O/��L��H��H���-��L���.��I��H�o
!H��u#H��l�H���S0��H�L
!H��t�H���.��L��H��H���,���t�����*�����AUI��ATUH��S�H��8dH�%(H�D$(1�I���L���)��I��H��H��u�H�|$H��uQH�|$H����H�|$H���L�d$ I���RH�L$(dH3%(���H��8[]A\A]�1Ҿ
�t(��I��H�b!H��u&H��jfD�H���K/��H�<!H��t�H���-��H��L��H���+��H�|$H���X���1Ҿ
�(��I��H��!H��u(H�Mj��H����.��H��!H��t�H���-��H��L��H���Q+��H�|$H�������1Ҿ
�'��I��H��!H��u H��i�H���.��H�d!H��t�H���/-��L��H��H����*��L�d$ I�������H�+!H��u'H�#i��H���+.��H�!H��t�H����,��L��H��H���*��L���1,��I��H��
!H��u#H�+j�H����-��H��
!H��t�H���,��L��H��H���I*�������O(��ff.�@��AUI��ATUH��S�H��hdH�%(H�D$X1�L�d$f���L���'��I��H��H��	u�H�|$H����H�|$ 1Ҿ
�8&��I��H��	!H��u"H�whf��H���-��H��	!H��t�H���+��L��H��H���)��H�|$(�Ǒ��H�L�dH��	!H��u%H�hD�H���,��H�t	!H��t�H���g+��L��H��H���))��H�\$01Ҿ
H���%��H�{I����H�(	!H��u$H�k@�H���S,��H�	!H��t�H���*��L��H��H���(��H�|$81Ҿ
� %��I��H��!H��u*H�Fff.��H����+��H��!H��t�H���*��L��H��H���a(��H�|$@1Ҿ
�$��I��H�^!H��u*H��ef.��H���+��H�4!H��t�H���?*��H��L��H���(��H�|$HH���*H��!L�d$PH��u*H�.ff.��H���3+��H��!H��t�H����)��L��H��H���'��L���9)��I��H��!H��u#H�3g�H����*��H�l!H��t�H���)��L��H��H���Q'���H�L$XdH3%(�[H��h[]A\A]�D����H�L�dH�U!H��u)H��ef��H���c*��H�,!H��t�H���)��L��H��H����&����@1Ҿ
�,#��I��H��!H��u&H�NffD�H���*��H��!H��t�H���(��L��H��H���q&���z���@H�D$eH�P!H��u$H�pf@�H���)��H�,!H��t�H�\$�H��L��H����%��H��u*H�D$�L��H�ٺ�+��%��I�����@H�D$�����#�����AUI��ATUH��S�H��xdH�%(H�D$h1�L�d$f���L���"��I��H��H��
u�H�D$��H��t%H�PH� ������H��,��H�|$ H�T$�
1��!��H�L$��+H���$��I��H�4!H��u H�!g�H���s(��H�!H��t�H���'��L��H��H����$��H�|$(1Ҿ
�@!��I��H��!H��u*H�{cf.��H���(��H��!H��t�H���&��L��H��H���$��H�|$01Ҿ
�� ��I��H�n!H��u*H�cf.��H���'��H�D!H��t�H���_&��H��L��H���!$��H�|$8H���jH�|$PH���L�d$XI��uXH�L$hdH3%(��SH��x[]A\A]�@H�P����H��,�e���H�lH�BH�T�O���f�H�y!H��u%H��aD�H����&��H�T!H��t�H���%��L��H��H���Y#��L����$��I��H�!H��u#H��b�H���&��H��!H��t�H���G%��L��H��H���	#������@�K���I��H��!H��u%H��`D�H���C&��H��!H��t�H����$��L��H��H���"�����@1Ҿ
���I��H��!H��u&H�2`fD�H����%��H�l!H��t�H���$��H��L��H���Q"��H�|$@H��tU1Ҿ
���I��H�(!H��u$H��_@�H���%��H�!H��t�H���/$��L��H��H����!��H�|$HH������1Ҿ
�F��I��H��!H��u H�ha�H���#%��H��!H��t�H����#��L��H��H���!���z���������AWAVI��AUATUSH��H��(dH�%(H�D$1��3$��H��I���( ��H�=�� �ZH���B"���H�=iH��H��� H�$���H�D$H�g!H��u#H��h�H���[$��H�D!H��t�I��H��H��L��� ���$��H��H�!H��u&L�=mhfD�L���$��H��!H��t�H���"��H��L��H���y ��H���!�����9��9�ƒ����{�ƒ������ƒ�
��
���ƒ����)
�ƒ�����
�ƒ�
��
��
�����=��MDH�9!H��u%H�-�gD�H���;#��H�!H��t�H����!��H��H���<"��H������(H��!H��u%H�-LgD�H����"��H��!H��t�H���!��H��H����!��H�������H��!H��u%H�-�]D�H���"��H��!H��t�H���G!��H��H���,��H��H��tIH��!H��u L�-�^�L���S"��H��!H��t�H��� ��H��H������H����L������H��H�L$dH3%(��H��([]A\A]A^A_�@H��!H��u%H�-P]D�H����!��H�l!H��t�H��� ��H��H���d��H��H���H�!H��u$H�-5`@�H���!��H��!H��t�H���/ ��H��H�����H��H�������H��!H�$H��u$L�5�]@�L���+!��H��!H��t�L��H��H���l��H���C���H�\!H�$�H��u(L�5�]��L���� ��H�,!H��t�L��H��H�����H�����H��!H�$�H��u L�5D]�L��� ��H��!H��t�L��H��H������H���rL���+H��H�$����I��H��!H��u(H�-�^��H��� ��H�\!H��t�H�����L��H��H������,���@H��!H��u%H�-@[D�H������H��!H��t�H���o��H��H���T��I��H���_H�P!H��u$H�-%^@�H���s��H�,!H��t�H�����H��H�����I��H���7���H��!H�$H��u$H�-�[@�H�����H��!H��t�L��1�1�H���`��L���+H���K��I��H��!H��u%H�-v]D�H������H�l!H��t�H���o��L��H��H���1�����@L�5�� I����	�H�=�b���L��H��H��L�V���H������H��薄���ƒ��������L�5)� I����	�H�=�b���H��L��H��L�Ƭ��H��辏������fDH���8�����������L�5!� I���w	�H�=Ab�F��H��L��H��L�V���H���^����I���f�L�5�� I�����H�=�a���H��H��L��L�����H������H��螃�����f�1ҾH�="q�=���H�>� ����L�5�� I����	�H�=�a���H��L��H��L�.���H��覎�������H���&��������v���L�5� I���=�H�=/a�4��H��H��L��L�ă��H���L���H���Ԃ������L�5)� I���g�H�=�`����H��L��H��L�6���H��������F���L�5�� I����	�H�=�`���H��L��H��L�Ć��H��輍��������L�5�� I����	�H�=]`�b��H��L��H��L�����H���z���������L�5K� I���w
�H�=`� ��H��L��H��L�0���H���8����������H�=� ��
H�=�� ��
H��� H�,$H��u%L�5�_D�L���;��H�t� H��t�H�=�� L��H���x��H����	H�=~� ��
H�=h� ��
H�� H�,$H��u#L�5_�L������H�� H��t�H�=0� L��H�����H���
H���ր�������L�5�� I�����H�=�^����H��L��H��L����H���������L���H��脀�������H�� H�$H��u%H�-xVD�H�����H�� H��t�L��1�1�H���P��L���+H���;��I��H��� H��u%H�-0UD�H�����H�t� H��t�H���_��L��H��H���!�����@H�� H�$H��u%L�5!VD�L���[��H�� H��t�L��H��H�����H�������H��� H�$�H��u(L�5�U��L�����H��� H��t�L��H��H���D��H���4���H�\� H�$�H��u L�5tU�L�����H�4� H��t�L��H��H������H����L���+H��H�$�����I��H�� H��u(H�-�S��H���C��H��� H��t�H������L��H��H������u���@L�5i� I����H�=q\�v��H��L��H��L�����H��莉��������H���~������L�5� I���
�H�=\�$��H��L��H��L�����H���<�������L�5Y� I�����H�=�[����H��L��H��L�����H��������>���H���v}���n�L�5� I���_�H�=�[���H��L��H��L����H��覈�������H���&}���ƒ�
��
�1��L�5�� I���'�H�=)[�.��H��L��H��L�N���H���F����������H����|���ƒ�������L�51� I����H�=�Z����H��L��H��L�ަ��H��������.���L�5�� I�����H�=�Z���H��L��H��L����H��複�������H���$|���F��L�5�� I�����H�=1Z�6��H��L��H��L�&���H���N����������H����{����f�L�5)� I�����H�=�Y����H��L��H��L�ޥ��H��������>���H���v{����H���X��I��H�N� H��u"H�-RQf��H�����H�,� H��t�H�����L��H��H���q����@��)H�=wh��{��I��H��� �$�����H�=/g�{��I��H��� ������H�=ga�r{��I��H��� �����H�=a�J{��I��H��� �d������H�=we�"{��I��H�� ������'H�=�b�z��I��H��� �t���1ҾH�=�a��z��I��H�3� �I���fD1Ҿ#H�=d�z��I��H�{� ����fD��H�=�c�z��I��H�H� �����6H�=a�Zz��I��H��� �,�����SH�=c�2z��I��H��� ������.H�=?b�
z��I��H��� �4�����H�=g`��y��I��H�0� ������*H�=�a�y��I��H�`� �<�����jH�=�_�y��I��H��� �������H�=�b�jy��I��H�@� �����	H�=�`�By��I��H��� �����SH�=�a�y��I��H��� ���1ҾH�=}`�x��I��H��� ���L���+H��H�$��,��I��H�
� H�����H�-SPf��H�����H��� H��t���L���+H��H�$���
��I��H��� H���+���H�-�L�H���K��H��� H��t�����1ҾH�=�_�'x��I��H��� �g���L�5�� �H�={U���L��}��H��H��L��H��蘂�����������1ҾH�=�^��w��H�A� �X���1ҾH�=�^�w��H�*� �+���L�5� �H�=U���L��z��H��H��L��H���������e�����1ҾH�=J^�Mw��H��� �O���1Ҿ
H�=;^�.w��H��� �"����
��ff.�f���ATI��US�p��H��H���e���@��H�5!� H��H����H�
u��H��L���Jw����tH���~��H��[]A\�fDH�5�� H����H�
(��H��L���
w����u�H�5�� H����H�
���H��L����v����u�H�5{� H����H��L��H�
����v��H���
��H��[]A\�����H�='[�v��H��H�@� �'������H�=Z��u��H��H�� �<����L�H�=�Y��u��H��H��� �;����H�H�=Y�u��H��H��� �:���ff.���ATI��US��
��H��H����	�����H�5q� H��H��t(H��L��H�
����u��H���	��H��[]A\�fD�a�H�=X�u��H��H� � �fD��ATI��US�`
��H��H���U	���0��H�5�� H��H����H�
���H��L���:u����tH���n	��H��[]A\�fDH�5�� H��tsH�
���H��L���u����u�H�5v� H��txH��L��H�
C����t��H���	��H��[]A\�fD�k�H�=�V�2t��H��H�8� �W����A�H�=V�
t��H��H�� �h����C�H�=�U��s��H��H��� �c�����ATI��US�0��H��H���%���
��H�5�� H��H��t(H��L��H�
����t��H���F��H��[]A\�fD���H�=7T�bs��H��H�P� �fD��ATI��US���H��H��������H�5� H��H����H�
u���H��L���s����tH�����H��[]A\�fDH�5�� H��tsH�
|���H��L���Qs����u�H�5�� H��txH��L��H�
����.s��H���f��H��[]A\�fD���H�=�R�r��H��H�h� �W������H�=�Q�Zr��H��H�8� �h������H�=Q�2r��H��H�� �c�����ATI��US�
��H��H���u���P��H�5�� H��H��t8H�
��H��L���^r����uL���b
��H��H�����H��[]A\���|�H�=�O�q��H��H�p� �fDAWH��AVAUATUSH��H�|$H�t$dH�<%(H�|$x1�H���H��H���I��H����H�|$���%H�����H���H�|$H�D$H�H��H�D$�����L�a�L9��nH�L$PL�|$I��L�t$(H�L$0�)f�A�M��I��I��A�E��tYM9��0<%u��D$ A�SL��1�A�����H�
0{L�m��z��H�L{��Hc4�H�>��L�|$f.�L;|$��D�k���"1�H�|$xdH3<%(��H�Ĉ[]A\A]A^A_�E��U��puP�T$ H�t$0�
L��L�\$8����H=���w�H9D$H�
�zL�\$8r�A��H�D$P�L�h�L���6���I��L��L)�H���dM�]���f.�H���(��H��H;D$�j����4���I���L9|$�0���� ���L��A�H+D$����H�5zL��L�\$8��@�(��L�\$8I��I�D�8zH�D$H�j���L�h�H�L$(L�\$@L�L$8H�AH�9���L�L$8L�\$@Hc�H��H��?H��H1�H)�H���������ٻ�ك�I���<M���VI���I�����H��o^M<+	H��H��H��H��H��H��Hi�H9����QA�F�D9�L�H�D$L9������QL)�Hc�H��H9�������|$  u?9�~;H�t$)�1�L��KH��xL��L�L$ L)����������H�L�L$ ��I�I�_�+H��yH�ݸ-H��A�H�t$H��H��L�L$ I��o^M<+	H��H)�I��1�H��I��I��H�7x������X���Mi�L�L$ H�L�<I����L)�u���QH���������H��L�L$ H��H��M��I���H�t$A�:M�w��1�H�IAL��L)����������H�H��M�<L��H��L)�H��H)�������L�L$ I����H�t$A�:I�_1�H��@H��H)�����������L�l$HH�L�<M�]�����t���H�|$(H�GH�?�PH���0H��}A�\$8�H��H��yL�P��f.�Mc�D$8�*H�D$L9�����L)�H��H9���H��L��L��H�L$ �����\$8H�L$ �����JL���tI���Y���@A��ƒ�a��w��_A�I��L9�u���H�|$(H�GH�?��G������H�D��I��H��?��E��Nи��A��DE��D$ <0��H��u����H�t$D��L)�1�L���T���������@H�I�L�]���H�|$(H�GH�?�PPE��H��uA���DN���DE��D$ <0t H�eu��u�}HH�QuHD�fDH�t$D��L)�1�L���������{������H�L$(H�AH�9�PPA������
�@�A��DO�E��H��t�DN���DE��D$ <0t�H��t��u��}IH��tHD��r�����L��	E�E��DN�H�D$L9������L)�Ic�H�D$@H��H�L$ H9����H�\$(H�CH�;D��PhI��A����H�|$`H�l$HD��H�|$8H��@H�ٺ�*H��H�D$`�5w��	�7�����ډ�I��H�l$H��t@��H��H���u�H�L$8H��L�Ǻ�*H�D$`���I��H�D$`H�l� H��u-L�D$HH��<�H���S��H�D� H��t�L�D$HH�L$8�H��L�����H�\$ L�]L���M
H�H�t$@L��D��I��H�=s1�I��L�\$ ����L�\$ �&���H�|$(H�GH�?�PXA��E���DN���DE��D$ <0tH��r�������H��r����U����������H�=(sL�\$@�T$8�C����T$8L�\$@H�
sH����������@H�D$`�H�5H� H��u#�H�=d;�'��H�(� H��t�H��H�L$(H�t$@H�AH�9�H�|$`H�t$@�H�|$8H��H���F�����E���DN���DE�H�I���D$ <0����H��q����H�t$H�L$(H��qL��L)����H���=������*
f�������Mc�I9������K�H;\$�����I)�L��H��K�<M���7����L$ � ��D���L��L��I���g���L�]�L����\$8��p���P�mH�\$(H�CH�;�PPL��s���I�CLM��]�����t���H�|$(H�GH�?�P�����9	H��}B�\$8�H��H�]sL�P����L��L�\$8����L�\$8H��H�������\$8���H�|$(H�GH�?�PxE���D��Nʃ�������uHc�H�DH�\$(H�D$`H�CH�;�PxH�D$h�D$ <0���H�==p�����d���H�\$`H��H�޿���H�\$H�|$0H�D$P����L)�L��H��H�����H9��;����L����U�� ��������H��L�\$@�T$8�I����T$8L�\$@H�
pH����������f.�H�t$H�L$(H��8L��L)���H�������f��������Mc�I9������K�H;\$���I)�L��H��K�<M������|$ � @��D�@�����H�t$H�L$(H�oL��L)��"�H���d���0���I�L��f��1����a��w��_@�9H��H9�u����H�L$(H�AH�9�PpE���D��Nʃ�������uHc�H�DH�\$(H�D$`H�CH�;�PpH�D$h�D$ <0�����H�=Kn������H�D$u
A���	L9����L)�H�����A�	L�]I����H�L$(H�AH�9�P0���A��uE��AO��D$ <0��H��m����H�t$L)����H�t$H�L$(H��mL��L)����H���������I�L���1����a��w��_@�9H��H9�u����H�L$(H�AH�9�PH���A���^����R���H�t$H�L$(H�9mL��L)��N�H�����������I�L��D�1����a��w��_@�9H��H9�u�����E������p�����U��H�D$A��~	���PL9���L)�H����A�%L�]I����H�t$H�L$(H��lL��L)���H�����������I�L����1����a��w��_@�9H��H9�u�����E���#��p����U��E�����p����U�D$  ���H�t$H�L$(H�%5L��L)���H���G���c���I�L��@�1����a��w��_@�9H��H9�u��7���H�L$(H�AH�9�PE��H��kA���DN���DE��D$ <0����H�^k���
����}dH�FkHD����H�D$`�H�L$(�}gH�AH�9���H��H�D$`��%H������H�Ǩ����������H�|$(H�GH�?�PE��A������H�L$(H�AH�9�P�����H�D$u
A����L9���L)�H�����A�
L�]I���v�H�t$H�L$(H��jL��L)���H��������������Mc�I9����K�H;\$���I)�H��L��K�<M�������T$ � ��D������H�|$(H�GH�?�P(����H�t$H�L$(H�jL��L)���H���<����X���I�L����1����a��w��_@�9H��H9�u��/���H�|$(H�GH�?��U�C�P@A��E����D$ DN���DE�<0�Z����d���H�|$(H�GH�?�P`������t���H�|$(H�GH�?���I��H���J����e�E�������p������U���H�t$H�L$(H�iL��L)���H���@����r���I�L��D�1����a��w��_@�9H��H9�u��E����D$8I������D$ L9����H�D$L�\$HL9����L)�H��L9�����\$ I)ʸ L��L��L��H�L$@��D�I����1�H�L$@L�\$H��L��A��ƒ�A��w�� A�I��L9�u���H��g������E�H�I���D$ <0tcH��g��tXH�t$L)����\$8�L�e3���H�t$��1�H�M1L��L)��������H�I�L�l$HM�]�a�H�Xg��U��7�A��L�E���DN���uMc�K�TH�D$h�D$ H�T$`<0�������E���DN���uMc�K�DL�5�� H�D$`H�D$X�M��u'H��/@�H���{���H�t� H��t�I��H�\$(H�CH�;�H�L$X�L��H����H�D$h�D$ <0�H�H�=wf���4��H�t$8H���8������.��P H���%����P8A������P ���������\$8���H�L$ �L�\$HH�=�eH�D$hH�T	H�T$`�"�H�t$8�H���`�H�|$0H�D$P��H�T$@L��I��H����L�\$H��L9���L)�Ic�H��H9�����L$ � A�V�L��Hc�M�|���D����r�����L9����L)�Ic�H��H9�����|$ � A�V�Hc�@��D�@��L��M�|��)��}���L9��{�L)�Ic�H��H9��h��|$ � A�V�Hc�@��D�@��L��M�|���������
������I�L��fD�1����a��w��_@�9H��H9�u��E���I�L����1����a��w��_@�9H��H9�u���I�L����1����a��w��_@�9H��H9�u����H�=*d���H���������H��H��H��H��H��H��H)�H��H��H9�t#�QA�F�D9�L�H�D$L9��F��Q�-��QA�F�D9�L�H�D$L9��#��Q�
��QA�F����H�D$`H�D$8�����L�l$HE1�I����ff.������ATUSH���4��H�(��DMu1���%t[]A\�fDD�cA��EtEA��Ot?1�E��t�A��H�=ef��H�¸H��u�E��B�Def������D�c�f�H�H��u8UH��SH��H��@H����H��H���e�H�EH��t�H��[]�D�ff.�@ATLc�UH��SHc�H��dH�%(H�D$1���uzH�DH���<H��H��H�$�Y�1�H��t"H�L$dH3%(��uYH��[]A\��K�D$�H��H��>H�$��1�H������H�����9���1�A9���!���"�f�UH��AVAUATSH��dH�%(H�E�1�H����H���7I���FЃ�	��I��H������A���0��	��H��H9��JH9�u�H��H��@��L��1��@�2��0H��H��Hc�H�<FH��L)�H9�r�1�I9�tH�@H�x,H�D?I�EH��H�}�dH3<%(�H�e�[A\A]A^]��I����H��H��H��@�p���H�sH�E�H�����H�CH��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�L$L�u�H���H��H��L����1Ҿ
�H�����L��I�E���H������H�����1�����H�SL�u�H��L�����H��렻����1��AWAVAUATUSH��hL�D$dH�%(H�D$X1�H����H��I��H��I���s��E1�E1�H�H�$H���Q�Ff.�M9��_<%��B8D=�I��I��M9�vaH�$B�3H�H���Q�� t�M9�w�9�I��M9���B�D=�DA u��@B�3H���Q�� t�I��M9�w�H�|$XdH3<%(L���5#H��h[]A\A]A^A_�F�D3H�
_E��A�A�I�V<U�rH�5Ib��Hc�H�>��@M���I��J�<3����L��J�|=H�T$HL)���������H����H�5�aH�=�� �h����H����H�|$�H���f�E1��(���fDH��� H��u�H�uaD�H����H��� H��t��H��� H��u�H�Baf��H���s�H�|� H��t��r���L��1�H�l$(A�L)�L�),H�\$0H��H�D$J�D=L��H�D$ �\$L;D$�gH�t$ L��H��L�D$8��L�D$8���EH�l$(H�\$0�dI�FB�t3I9���@��:�wI�FB�t3I9��n@��:�dB�t3�@��z����H�H�D�DE��I������L��1�A�H�l$(L)�L��*H�\$0H��H�D$J�D=L��H�D$ L�d$8M�ԉ\$H;l$�&H�t$ H��L���;����I��H�\$0H�l$(L�d$8�*I��J�<3����L��J�|=H�T$HL)�������]���H����I�H�D$HH�D$H��� H��u �H�=�_��H��� H��t�H���S�H�T$H�|$H�����p���L��L�D$J�|=�L)�H��[����H�D$H�� H��u*f.��H�=�^�/�H��� H��t�H�����H�|$H����H���+���L|$I�����F�L3E��t>E��H��H�T$ D��D�L$D�D$��D�D$D�L$H�
X[H��H�T$ ����B�3���L��L�D$J�|=�L)�H�$���H�D$H�� H���J���f.��H�=^�O�H��� H��t�����B�|=%�I��I������L��L�D$J�|=�L)�H��Z�t���H�D$H� � H��������H�=�]���H��� H��t����L��L�D$J�|=�L)�H��]����H�D$H�q� H���p����H�=D]��H�P� H��t��N���L��H�T$HJ�|=�L)�����H����H�|$H1��I�������kH�D$HH�D$H��� H���D�H�=d#��H��� H��t���L��L�D$J�|=�L)�H�"Y�=���H�D$H�q� H���������H�=d\��H�H� H��t��n���L��H�T$HJ�|=�L)���H����H�|$H1��cI��������0H�D$HH�D$H��� H��u&f��H�=�%��H��� H��t�H�����H�T$H�|$H����H�b� H��u"D�H�=�[���H�@� H��t�H����H�|$H���f�H���.I�����J�|=�? ��L��H�T$H�L)�����H���rH�|$H��I�� ������H�D$HH�D$H��� H���>fD�H�=�!�'�H��� H��t��L��L�D$J�|=�L)�H�p*�e���H�D$H��� H��������H�=�Z���H�p� H��t����L��L�D$J�|=�L)�H�W�
���H�D$H��� H���h�����H�=4Z�o�H��� H��t��>���J�|=�?-��L��H�T$HH��������L)���H���4I�H�D$HH�D$H�A� H����H�=4��H� � H��t���L��H�T$HJ�|=�L)��T�H����H�|$H��I��t���*H�D$HH�D$H��� H����f��H�=���H�p� H��t��nL��H�T$HJ�|=�L)����H���oH�|$H�n�I������uH�D$HH�D$H�#� H���f��H�=^��H�� H��t���L��H�T$HJ�|=�L)��T�H���H�|$H��I��t����H�D$HH�D$H�K� H����f��H�=���H�(� H��t��nL��H�T$HJ�|=�L)����H���MH�|$H1��cI������H�D$HH�D$H��� H��u&f��H�=o��H�p� H��t�H����H�T$H�|$H���i��H�B� H��u"D�H�=�W��H� � H��t�H���c�H�|$H���F��H�����H�D$P�H��� H��u�H�=�f�H��� H��t�H�|$HH�L$P�H�����H��H���H��'H�D$H��� H��u�H�=�V��H�l� H��t�H����H�T$H�|$H���}���<���J�|=�? ��L��H�T$H�L)��E�H���H�|$H1��I��h����H�D$HH�D$H��� H����fD�H�=��o�H��� H��t��^L��H�T$HJ�|=�L)����H����H�|$H1��<I�������H�D$HH�D$H�N� H���D�H�=,���H�(� H��t���L��L�D$J�|=�L)�H�-R�-�H�D$H��� H���������H�=TU��H��� H��t��^���L��H�T$HJ�|=�L)�D�D$���D�D$H����H�|$H1��5I�D�D$��D�D$����A��UH�=�H�T$HH��HE�H�T$�V��fDH��I�����H�T$H�|$H���r�����L��H�T$HJ�|=�L)��C�H���/H�|$H�5�I��c����CH�D$HH�D$H�j� H��u�D�H�=��o��H�H� H��t��^���L��L�D$J�|=�L)�H��P��H�D$H��� H��������H�=�S���H��� H��t����N�D=�D$A��PՁ�u<-��I����N�D=�D��D$I��L�D$J�<3��L��H�T$HL�D$L)�����H��������L���
�H����Iǃ|$��4H�D$HH�D$H��� H�����@�H�=��G��H�� H��t���H�=>� �l���H��H�D$���L��J�|=L)�����H�D$PH�R� H��u"D�H�="����H�0� H��t�H�|$P�H��H�|$(H��H�=DZ ���H�D$ H���f
H�ƿ�F��H�D$PH�D$H�� H��u!@�H�=�!�g��H��� H��t�H�L$(H�|$ �H�����H�|$H�D$(�e��H�T$(H�D$ ���b	H��H�I�H�Z� H��u"D�H�=����H�8� H��t�H�����H�T$H�|$H���a��H�
� H��u"D�H�=����H�� H��t�H��I���W��H�T$ H�|$H�����H�|$�;���j�F�L3E�����E��H�="QH�T$ D��D�L$D�D$���D�D$D�L$H�
�MH��H�T$ ����v�L��L�D$J�|=�L)�H���o�H�D$H�� H�����f.��H�=�P����H��� H��t���N�T=�D$A��PՁ�u<-��I����N�T=�D��D$I��L�T$J�<3D�D$ �R�L��L�T$L)����cD�D$ �	�L��H�T$HA��LHE���H�D$H���CL|$�|$���H��������?H�|$H9��H�D?H�D$PH�ܿ H��u$��H�=����H��� H��t�H�L$P�H�ƿ���H�|$HH�����H�D$H�{� H�����f��H�=����H�X� H��t����L��H�T$HJ�|=�L)����H����H�|$H1��;I������qH�D$HH�D$H�� H������D�H�=E���H��� H��t����J�|=�?-�*L��H�T$HH��������L)��F�H���.H�|$HIǾ����H�D$H�� H�������fD�H�=����H�� H��t��n���L��L�D$J�|=�L)�H��J��H�D$H��� H������H�=�M���H�x� H��t����L��L)�H���	
B�D=���<P�-<A��1�B�D=<.�����<M�;Hc�I��H�DH�D$H�2� H�������f��H�=nM���H�� H��t��~���J�|=�? �0L��H�T$H�L)����H���|H�|$H��I������(H�D$HH�D$H�B� H������f��H�=@���H�� H��t����B�|=%��	I�GI9���I9��ZD8L�OI����H�|$vrH�t$ �H�������u\H�l$(H�\$0A��D$Mǃ�H�H�DH�D$H�m� H���d���@�H�=��O��H�H� H��t��>���H��H���lH�9� H�,�H�����I�����H�|$voH�t$ �L�������uYH�l$(H�\$0A�L�d$8HcD$M�H�DH�D$H�ټ H��������H�=���H��� H��t����H��H����H��� L�$�L���
��H���+�H�����������H����	I�H�D$HH�D$H�ٻ H������H�=��/��H��� H��t����L����H�������H�5�JH�=�� ��DH���������a�H����H�5�JH�=�� ���D�����I��L��H�T$HH��������L)�J�|=��H����I�H�� H��u�H�=��j��H�ӹ H��t�H�|$H1�1�H�����H��H�D$H���I��L��H�T$H�L)�J�|=��H������H�5�IH�=C� �v����I��L��H�T$H�L)�J�|=�b�H����H�5�IH�=#� �6�����I��L��H�T$H�L)�J�|=�"�H���"�H�5RIH�=S� �����I��L��H�T$HH��������L)�J�|=���H���[I�H�z� H��u�H�=��4��H�]� H��t�H�|$H1�1�H���w��H�D$H�D$H���I��I�����H�T$HL��H���������e�H�D$H�������H�5�HH�=�� ���@H���x�����H��� H�eHH������H�����H��� H��t���H�D$P�H�ֶ H��u�H�=�X��H��� H��t�H�|$HH�L$P�H�����H��H���H��'H�D$H�{� H����H�=�G���H�Z� H��t����H�|$�������H����B�|=.��I��B�D=������H�=�H���H��H��� ���H�=�� ����^�H�o� H��u�H�=��i��H�R� H��t�H�|$H1�1�H�����H�D$H�%���H�ӵ H��u�H�=��%��H��� H��t�H�|$H1�1�H���h��H�D$H�D$H��H�*� H�����H��F�H������H�� H��t����H��� H�vFH������H�����H��� H��t���H�� H�����H�8F�H���k��H�ܵ H��t��j�������H��� H���F�H��E�H���"��H�k� H��t��!�H�� H����H��E�H������H�� H��t����H�� H�����H��E�H�����H�ɵ H��t���H��� H�YEH������H�����H��� H��t���H��� H�$EH���k��H���N��H�_� H��t��M�H�|$����H�d� H���3�H��D�H�����H�@� H��t���H�� H�����H��D�H������H�[� H��t����H��� H�����H�rD�H�����H�^� H��t���H�� H�����H�=D�H���p��H�� H��t��o�H�(� H���_�H�D�H���;��H�� H��t��:�H�S� H���*�H��C�H�����H�/� H��t���H��� H�����H��C�H������H�j� H��t����H��� H�����H�iC�H�����H�m� H��t���H�t� H�����H�4C�H���g��H�P� H��t��f�H�g� H���V�H��B�H���2��H�C� H��t��1�H�:� H���!�H��B�H�����H�� H��t���H��� H�����H��B�H������H�y� H��t����H��� H�����H�`B�H�����H��� H��t���H�{� H�����H�+B�H���^��H�W� H��t��]�H�5BH�=/� �=�H�� H���:�H��A�H�����H�Dz H��t���H�5�AH�=�� �b�����H�.� H������H��A�H������H�
� H��t�����H�5qAH�=�� ������H�� H������H�IA�H���|��H��� H��t��{��H�5$AH�=�� �[��H�9� H���X��H�A�H���4��H�� H��t��3��H�5�@H�=�� ������H�,� H�����H��@�H������H�� H��t�����H�5�@H�=�� �3������H��� H������H�g@�H�����H�c� H��t����H��� H������H�2@�H���e��H�n� H��t��d��H�Ͱ H���T��H��?�H���0��H��� H��t��/��H��� H�����H��?�H�����H�t� H��t����H�5�?H�=ܯ ����H�5�?H�=i� ����H��� H������H�m?�H�����H�a� H��t����H�� H������H�8?�H���k��H�� H��t��j�����H�5?H�=߮ ����M��ff.�f���AUATI��UH��SL��H��dH�%(H�D$1��t��H9��H�\� H��u(H�-�>��H������H�4� H��t�H�����H��H���d���H��t)H�L$dH3%(H����H��[]A\A]��H�ٯ H��u%H�-A>D�H���[��H��� H��t�H�����H��H���\��I��H����H��� H��u$H�-�@�H�����H�\� H��t�H�����H��H�����H��H���gH� � H��u$H�-m@�H�����H��� H��t�H���g��H��H���L��H��H����H��� H��u$H�-V=@�H���k��H��� H��t�H�����H��H���l��I��H��tEH�l� H��u H�-l�H���#��H�L� H��t�H������H��H�����H��unH���M���fDH��I�<H)����I��H�G� H��u#H�-��H�����H�$� H��t�H���g��L��H��H���)�����@H���%H��H��H�$����H���+H��L�$$���I��H�u� H��u!H�-}��H���3��H�T� H��t�H������L��H��H�����H���`���f�I��L���*L��H�$��@��L��H��+H�$�'��I��H��� H��u!H�-R��H�����H�ܬ H��t�H���O��L��H��H��������@I���*L��L��H�$����L��H��+H�$���I��H��� H��u)H�-�f��H�����H�\� H��t�H�����L��H��H������
��������H��H���secondsdivhourminsec_fractionexpected numericinvalid %s (not numeric)%Y-%m-%d%a %b %e %H:%M:%S %Y%Y-%m-%dT%H:%M:%S%:z%a, %-d %b %Y %T %z.%%%ldNinvalid start is ignoredzoneleftover%FT%T%z%F%c%02d:%02dquolocallimitto_ifraction of offset is ignoredto_rroundlocaltimemonmdayydaycwdaycweekcwyearwnum0wnum1clock_gettimeinvalid offset is ignoredexpected an arrayfloorinvalid day fractioninvalid sizenew%c%02ld.%%m.%%dcommercialcivilordinalinvalid date-4712-01-01T00:00:00+00:00subsecutc_offset%a, %d %b %Y %T GMT-@secondinvalid fractionminuteDateTime expectedDate expectedajd-4712-01-01<=><=>=DateErrorABBR_MONTHNAMESABBR_DAYNAMESITALYENGLANDJULIANGREGORIANvalid_jd?valid_ordinal?valid_civil?valid_date?valid_commercial?julian_leap?gregorian_leap?today_strptime_parse_iso8601_rfc3339_xmlschema_rfc2822_rfc822_httpdate_jisx0301initializeinitialize_copyamjdday_fractionsunday?monday?tuesday?wednesday?thursday?friday?saturday?julian?gregorian?new_startitalyenglandjuliangregorian+next_dayprev_daynextsucc>><<next_monthprev_monthnext_yearprev_yearstepuptodownto===eql?hashto_sinspectstrftimeasctimedeconstruct_keysmarshal_dumpmarshal_loadDateTimenowsecond_fractionnew_offsetto_timeto_dateto_datetimeSunMonTueWedThuFriSatSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanFebMarAprMayJunJulAugSepOctNovDecJanuaryFebruaryMarchAprilJuneJulyAugustSeptemberOctoberNovemberDecemberstring should have ASCII compatible encodingformat should have ASCII compatible encodingcannot load complex into simple#<%li: %li ((%+lij,%ds,%+lin),%+ds,%.0fj)>string length (%zu) exceeds the limit %zuMon, 01 Jan -4712 00:00:00 GMTMon, 1 Jan -4712 00:00:00 +0000wrong argument type %li (expected Array or nil)����������@���Э������0�������H���,���l�������4���ܻ����������|������������H����������P��(��0�������������������%:z;Zx����0N<[y����1OY@0C�?�?@�v@aTR'��>@З@@�}<A���@fffff�^@*@l�@k�@���������AA���BA���AA�BA��@���v@J�q�Ae��A���������������_bcmatch**beginend[]=_compstandarddaylightdstgmtutc-- gsub!0U�� U��PT��U���T���T���T���T���T���Z���Z��t`���`��Lb��La��c��Ld��X���Z��X���Z��X���Z��X���K��w�K��w\A\s*([mtshr])?(\d{2})\.(\d{2})\.(\d{2})(?:t(?:(\d{2}):(\d{2})(?::(\d{2})(?:[,.](\d*))?)?(z|[-+]\d{2}(?::?\d{2})?)?)?)?\s*\z\A\s*(sun|mon|tue|wed|thu|fri|sat)\s+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s+(\d{1,2})\s+(\d{2}):(\d{2}):(\d{2})\s+(\d{4})\s*\z\A\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*,\s+(\d{2})\s*-\s*(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s*-\s*(\d{2})\s+(\d{2}):(\d{2}):(\d{2})\s+(gmt)\s*\z\A\s*(sun|mon|tue|wed|thu|fri|sat)\s*,\s+(\d{2})\s+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s+(-?\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+(gmt)\s*\z\A\s*(?:(sun|mon|tue|wed|thu|fri|sat)\s*,\s+)?(\d{1,2})\s+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s+(-?\d{2,})\s+(\d{2}):(\d{2})(?::(\d{2}))?\s*([-+]\d{4}|ut|gmt|e[sd]t|c[sd]t|m[sd]t|p[sd]t|[a-ik-z])\s*\z\A\s*(?:--(\d{2})(?:-(\d{2}))?|---(\d{2}))(z|[-+]\d{2}:\d{2})?\s*\z\A\s*(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(z|[-+]\d{2}:\d{2})?\s*\z\A\s*(-?\d{4,})(?:-(\d{2})(?:-(\d{2}))?)?(?:t(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?)?(z|[-+]\d{2}:\d{2})?\s*\z\A\s*(-?\d{4})-(\d{2})-(\d{2})(?:t|\s)(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(z|[-+]\d{2}:\d{2})\s*\z\A\s*(\d{2})(\d{2})(?:(\d{2})(?:[,.](\d+))?(z|[-+]\d{2}(\d{2})?)?)?\s*\z\A\s*(\d{2}):(\d{2})(?::(\d{2})(?:[,.](\d+))?(z|[-+]\d{2}(:?\d{2})?)?)?\s*\z\A\s*(?:([-+]?(?:\d{4}|\d{2})|--)(\d{2}|-)(\d{2})|([-+]?(?:\d{4}|\d{2}))(\d{3})|-(\d{3})|(\d{4}|\d{2})w(\d{2})(\d)|-w(\d{2})(\d)|-w-(\d))(?:t?(\d{2})(\d{2})(?:(\d{2})(?:[,.](\d+))?)?(z|[-+]\d{2}(?:\d{2})?)?)?\s*\z\A\s*(?:([-+]?\d{2,}|-)-(\d{2})?(?:-(\d{2}))?|([-+]?\d{2,})?-(\d{3})|(\d{4}|\d{2})?-w(\d{2})-(\d)|-w-(\d))(?:t(\d{2}):(\d{2})(?::(\d{2})(?:[,.](\d+))?)?(z|[-+]\d{2}(?::?\d{2})?)?)?\s*\z\A\s*(\d{1,2})\s*\z\b(bc\b|bce\b|b\.c\.|b\.c\.e\.)([-+]?)((?<!\d)\d{2,14})(?:\s*t?\s*(\d{2,6})?(?:[,.](\d*))?)?(?:\s*(z\b|[-+]\d{1,4}\b|\[[-+]?\d[^\]]*\]))?((?<!\d)\d+)(st|nd|rd|th)\b\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\S*'(\d+)\b\b-(\d{3})\b\d-\d{3}\b\b(\d{2}|\d{4})-(\d{3})\b[,.](\d{2}|\d{4})-\d{3}\b--(\d{2})(\d{2})?\b--(\d{2})?-(\d{2})\b-w-(\d)\b\b(\d{2}|\d{4})?-?w(\d{2})(?:-?(\d))?\b('?-?(?<!\d)\d+)\.\s*('?\d+)\.\s*('?-?\d+)('?-?(?<!\d)\d+)/\s*('?\d+)(?:\D\s*('?-?\d+))?\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[^-/.]*-('?-?\d+)(?:-('?-?\d+))?('?-?(?<!\d)\d+)-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[^-/.]*-('?-?\d+)\b([mtshr])(\d+)\.(\d+)\.(\d+)('?[-+]?(?<!\d)\d+)-(\d+)-('?-?\d+)\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[^-\d\s']*\s*('?\d+)[^-\d\s']*(?:\s*+,?\s*+(c(?:e|\.e\.)|b(?:ce|\.c\.e\.)|a(?:d|\.d\.)|b(?:c|\.c\.))?\s*('?-?\d+))?('?(?<!\d)\d+)[^-\d\s]*\s*(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[^-\d\s']*(?:\s*(?:\b(c(?:e|\.e\.)|b(?:ce|\.c\.e\.)|a(?:d|\.d\.)|b(?:c|\.c\.))(?!(?<!\.)[a-z]))?\s*('?-?\d+(?:(?:st|nd|rd|th)\b)?))?\A(\d+)h?(?:\s*:?\s*(\d+)m?(?:\s*:?\s*(\d+)(?:[,.](\d+))?s?)?)?(?:\s*([ap])(?:m\b|\.m\.))?((?<!\d)\d+\s*(?:(?::\s*\d+(?:\s*:\s*\d+(?:[,.]\d*)?)?|h(?:\s*\d+m?(?:\s*\d+s?)?)?)(?:\s*[ap](?:m\b|\.m\.))?|[ap](?:m\b|\.m\.)))(?:\s*((?:gmt|utc?)?[-+]\d+(?:[,.:]\d+(?::\d+)?)?|(?-i:[[:alpha:].\s]+)(?:standard|daylight)\stime\b|(?-i:[[:alpha:]]+)(?:\sdst)?\b))?\b(sun|mon|tue|wed|thu|fri|sat)[^-/\d\s]*[^-+',./:@[:alnum:]\[\]]+lllllllllllllllllllllllllllllllllllllllllllllllllFllllllllll'��F�J�u�0X}�\6$
0�;r�m'��F�J�u�0X}�\6$
0�;r�mh	5����lUllllll6$
0�;r�mh	5����lUlllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll����������Pe�������������`T
pb�����������PF�������"��'��- 1��60*;0*����?����D����J����N����V��X���\����`0*bh[f����j os@8u z ����~�p������������0*�����������PF�`T����������������0*� ������������p��~��p����`T�� �`s���PF�PF�����������~��������`T�XM��p������PF ���������������� ����(��-����1����5��:��?���C��H��M����������\pba81f�pk�~q0*t��v`Tz�����h[�`s�����������@8������������ ��������{�L�������@8�����PF�����x����@8��~�`T�H?������������pb����������������������������#�~(��,pb05ж:p�����������BPe��������������E����HPFR��W�P[��`H?��������l������npbpH?u�pz�~��@8�pb�pb���������ж�������������~�������81�0*��p��������������\��PF�����@W��������p����@8�~ ����ж �p&��+Pe������/XM����5���;������?��DJ`s��O��S@W��\��a�~g������w`T|������������0*������������������������������������PF�`T��p��������p����������pb��p�������������p�����������pbp�������ж`s���������@8.�p0A���N0*S@8W0*^@8f������k`Tp`s��u�P{Pe��������������`s���0*����������~��p� �h[�ж�����PF���������pb�PF�������������p�����`T�������������������������"p���'PF+����- 1����6�p;�~A@8����EPF����I ����������������V�p����Z��^�����������c@8����h������qpbv�p��������|����������������@W���p��������`s������������������PF�`T�@8��~����������������p���� ���������������������`T������~�����������������������������pb����������������������������������������������������������������������� ���������p�������������������������������������������������������������������&ж*Pe����������0������������������������;��?@W��������������D����������I����������������������������M�~����S ������������]0*��������b`T��������r����������v�����������������������������PF������������������������������������������������������������������������p����0*����������������������p�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������oxzqomstomsstpaepetpmstpettpetsteetaesteesteateasteasstpsteasternmastestcmmtmetmestcetdcestcatcastmagtmagstmstmskcotcstaqttfartfntfetbanatanastbntiphtatzp6mewtfstahstmawtzp5botbstpwtpontiotistawstmhtmezoratmeszchstpmdtcentralaedtactectacsteadtbrtchutbrstcen. australiadavtirstirktirkstbtnbttmountaincctwlfwtmsdwetwestwatwastwaktnstacwstchastcistaztcltazstclstmartzp4jstcentral asiaafte. south americacentral americaictpgtnrtmexicoawdtegtcxtegstphotalaskanntwtwest asiaacdtnptlhstafghanistankgirdtchotchostgmtgetnovtnovstfjtufjstpystnctkstkostgstirane. africawadtte. australiaschadttmtcidstaoemytwest pacificmutwitsastsaktnew zealandtotchinatostsstindiawarstsbtazotazosttahtnztdatelinenzsttokyocentral pacificqyztatlanticnftuttrtwftsrtpdtlhdtadtedtpktalmtwitawgtakstwgstkratkrastmid-atlanticmdtlintmalay peninsulacdtswtse asiavtongacktvetcaucasuscentral europehcentral europeannewfoundlandarabsctarabicarabianddutvosthastnepalnutfktfksthstidttltw. australiaegyptmyanmarnzdtgftuztnorth asiamvtgaltnfdtcvtnorth asia eastkgtaus centralpacificcanada centralpacific saazoresgamttftrfleakdtulatulastrettjtsouth africasgtndtrottsamttasmaniahovthovstgytyhadtsa westernhawaiianuytuystyektyekstkuytyaktyakstystjerusalemsri lankayakutskwibaus easterngiltus mountainvlatvlastgtbtaipeisretcape verdetktsamoasa pacificvutidlwfijiutckoreae. europesyotn. central asiatvtw. central africaekaterinburgvladivostokyaptus easternsa easternhdtrussianhktromancew. europeydtidlegreenwichgreenlandjanfebmaraprmayjunjulaugsepoctnovdecsunmontuewedthufrisat%0*ld%*ld%0*d%*d%m/%d/%y%H:%M%I:%M:%S %p%H:%M:%S%e-%^b-%Y%*s%.*ld%a %b %e %H:%M:%S %Z %YcCxXyYdeHkIlmMSuUVwWy:j���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m�������m�������m���m���m���m���m�����m���A���m���m������!���!���!���!���!���!���!���!���!���х��m���m���m���m���m���m���o���c���������������G���։��R���m���m�������H�����������"���Ԏ��b���&���������v���������G���:���m���m���m���h���_���m���o���c������ٓ��ٓ��m���:���c���m�������։��R�����������m���"���m�����������1���l����������6���:�����AMPMJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberSundayMondayTuesdayWednesdayThursdayFridaySaturdayCDdeFGgHIjkLlMmNQRrSsTUuVvWwXxYy_faildeHImMSuUVwWy_cent_merid%e-%b-%Yҡ��"���"���"���"���"�����"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���������������������p���͝��(�������"���"���R�������R����������"�����������2�������3��������������ڬ��"���"���"���"���"���"������������m���m���"�����������"�������(�������"�������"������"���R�����������"���J�������"�������ڬ��\A((?:gmt|utc?)?[-+]\d+(?:[,.:]\d+(?::\d+)?)?|(?-i:[[:alpha:].\s]+)(?:standard|daylight)\s+time\b|(?-i:[[:alpha:]]+)(?:\s+dst)?\b);	!z��,	��T	l���l	�����	����	���	����	����	,����	\���
̌��4
<���P
����d
����x
<����
ܓ��,̔��h�����,����������`��������������4
��T
<����
L����
����ܠ�� \���4���<����\�������������l���<����P����d����xܤ���������������������(,���<<���P̦��l\����\����ܪ��������,<���h���������������ܯ������<���,��������ܴ������T<���������������L���@����dl���������ܽ�����������<��� ����@���`\��������|����������� ��Ll��x�����������L���������H���|�������������D��`����<���\���<�����8,��dL��x|���<���\���<����$��H<��t<���<���<��������D��t�����������4�h,�|l��l����������L�@��<����|�|���xl����L��� ����L ���� ���!���|!����!�
��T",
���"���#���0#,��`#|��x#L���#����#<���#l���#���$���4$��P$���l$<���$����$\���$����$\��%���,%<��H%\��`%����% ���%�6���&�<��$'\>��X'\?���'\@���'\A��$(\B��h(\C���(\D���(F��8)<G��l)�K���)�K���)�L���)M���)M��*N��0*LN��H*<P���*\P���*�Q���*�V��<+W��P+W��d+�X���+�[��,�]��T,�]��l,�^���,\s���-���D.L����.���/\����/�����/�����/����0l���D0,����0<����0|���D1�����1,����1\����1��2l���42����H2����2,���2����2��� 3���`3L���3����3���(4,��\4<���4L���4\��(5l��l5|���5����5l��<6��\6��6|��6�7l�H7,�|7L�7��7\�7��(8\�T8��8\�8���8\�9���09���\9����9����9���$:���`:����:���:���<;��|;�	���;,��<���8<���x<<���<����<���=���=L��P=����=����=,%��>�<��l>�C���>�K���>lN��4?R��t?LV���?Y���?�[��,@�_��l@<d���@y���@�z��4A,{��dA\|���A�|���A~��B�~��<B�����B����B�����B���B����0C����\C�����CzRx�$�p���FJw�?:*3$"D�x���\����Jp4���W(������T�A�
lxP���$����0����,���
�(���$E�^<���nD H
D$����nD F
F@���T�����Xh,����B�B�B �B(�A0�A8�F��
8A0A(B BBBDf�K�U�A�T�`����B�E�E �E(�A0�A8�I`phJpWhA`]
8A0A(B BBBA8�����B�E�D �C(�FP�
(A ABBG@X\����B�E�E �D(�C0�FP�
0A(A BBBA(����oA�L�F@T
AAA8�L���ZB�M�G �D(�GP�
(A ABBEHp���_B�I�E �B(�D0�C8�I��
8A0A(B BBBGHP�����B�G�E �B(�G0�D8�G��
8A0A(B BBBCH���VB�I�E �B(�D0�C8�I��
8A0A(B BBBH8������B�E�B �D(�D0�V
(A BBBB$����"DO
EI(D����AI�D�G dAAF��Hp����B�I�B �B(�A0�A8�N`I
8A0A(B BBBF4�x���gB�B�A �D(�K0I(D ABB����� E�V����v\$ ����B�F�B �B(�D0�D8�F��
8A0A(B BBBGF�N�\�A��P���BA�R
Ee�����AAK�����8H�T
A�����AAK0������B�D�A �G��
 AABA,(���@4���T0���h<���|H����D���0�P����B�D�A �DPt
 AABA(�����nE�A�D z
DDL���,��@���D z
A\X����D z
A4x̖���E�A�D w
CAAm
AAK@�����{B�B�B �A(�A0�FP�
0A(A BBBG�Й��̙��8ș��7F�A�A ��
ABBh
ABELX̚��YB�B�B �B(�A0�A8�G�M
8A0A(B BBBH�ܜ���؜���Ԝ��D���'B�E�L �E(�I0�D8�D`�8A0A(B BBBH,	Ȟ���B�E�E �B(�I0�D8�D`�
8D0A(B BBBD(x	\���:HN P(B0B8B@BHBPI<�	p����E�H�D Q(N0b(A \
DADYDA �	����A�D K
AG8
�����B�I�D �F(�L@
(A ABBJ0D
@����B�D�D �G@w
 AABD8x
�����B�E�D �A(�G@�
(A ABBE �
P����A�G0m
AJ �
,����A�G0t
AC0�
���#B�A�A �G@�
 AABB 0���2O�IH�H�I(T ����A�G m
AJl
AC<�ԧ��CB�H�D �D@cHHPdHA@\
 AABF�����������������}E�g
E0t���\H e
K_$P����:C�T
IM
CI0x̩��rB�D�A �G0x
 AABF0�����G�A�G i
d�K�IP�������&H]����� HP(
����CA�A�G@�
AAA(<
Ȭ��CA�A�G0�
AADh
��*H^�
���-H^ �
���3E�K0J
AE �
8���3E�K0J
AE(�
T����A�A�G0D
AAA(Ȱ���E�A�G@Y
AAH08L���
F�A�A �G0�
 AABAPl(���F�I�B �B(�A0�D8�DPFXH`d8A0A(B BBBHP ���#E�G0@
AC ��#E�G0@
AC(�����A�A�G0w
AAF4p���]H j
N(P�����A�A�G0w
AAF0|(���B�A�A �G@�
 AABK�t��� HP(�|����E�H�I@u
AAC0�0���MF�H�A �D0�
 AABF((L����A�A�G0w
AAFT����h̹��+H^0����F�A�A �G@U
 AABH�p��� HP �x����c�wn�H� �4����c�wn�H� ��c��S�H�(8����&E�H�D`�
AAF d�����E�[
H�
P ������E�[
H�
P �x����E�[
H�
O0�T����B�A�A �D0�
 AABB,�rF�A�A �F
ABO,4@��rF�A�A �F
ABO,d���rF�A�A �F
ABO,����rF�A�A �F
ABO,�0��rF�A�A �F
ABO,����rF�A�A �F
ABO0$���B�A�A �F0�
 AABAX���	 l���4E�K@�
AB8�����B�B�A �D(�GP�
(A ABBI8����8F�I�A �A(�Dp<
(A ABBI����B�B�I �G(�D0�G@�
0A(A BBBBn
0A(A BBBJj
0F(A BBBIi
0F(A BBBJT�(���F�I�B �B(�A0�D8�DP�XL`PXAPW
8A0A(B BBBGH�����B�F�B �B(�D0�D8�IP�
8A0A(B BBBID0���F�A�A �D��H�f�A�q
 AABA x\��IE�J0�
AB �����E�J0l
AAD����F�B�A �A(�GPXH`jXAPo
(A ABBA\\���B�L�B �E(�D0�C8�F�r�G�X�A��
8A0A(B BBBG@h����B�G�D �G`HhKpFxF�[`x
 AABFH�����B�I�E �E(�D0�C8�Gp�
8A0A(B BBBG@�<��eF�B�B �A(�A0�FP$
0A(A BBBBh<h��TB�L�E �E(�D0�A8�G���F�a�A�[
8A0A(B BBBGl�G�Y�A�\�\���F�B�B �B(�A0�A8�Fp�xM�F�F�SpC
8A0A(B BBBA`����B�E�B �G(�D0�G���H�^�A�{
0A(A BBBGm�H�X�B�`l��B�B�B �B(�D0�A8�G�|
8A0A(B BBBF��K�F�F�\�p���F�B�B �B(�A0�A8�G�	�G�B�B�B�B�E�A�U�@
8A0A(B BBBF`DP�zF�B�B �B(�A0�A8�F�V
8A0A(B BBBAr�M�F�F�S�L�l��F�B�B �B(�A0�K8�G�l
8A0A(B BBBK$���1E�G�D TGA, ��#E�H�D�[
AABP��JOz(h���A�Z
Eb
NM
C���nHV
bN���H|
Dw�P�(HX�h�HR
F��HR
F$P����HR
F@����HR
F\8����HR
Fx�����HR
F� ����HG
Is������He
kN(����lA�A�G0K
AAJD���cH U
A����cH U
A8�� HP@P�3F�I�B �A(�A0�G`V
0A(A BBBH(��fE�A�D s
DDK��4����B�B�B �B(�A0�A8�G�z
8A0A(B BBBAM�H�V�A���H�V�A���G�Y�B���G�Y�B���G�X�B���G�Y�B���G�Z�A�`�D�G�D�D�D�I�l���#B�B�B �B(�D0�A8�Gp5xG�E�B�B�B�B�B�XpX
8A0A(B BBBG0���]F�A�A �Gp�
 AABB@H����F�B�B �D(�A0�FPy
0A(A BBBJ@�����F�B�B �D(�A0�FPy
0A(A BBBJ@�t���F�B�B �D(�A0�FPy
0A(A BBBJ@0���F�B�B �D(�A0�FPy
0A(A BBBJ@X����F�B�B �D(�A0�FPy
0A(A BBBJ@�����F�B�B �D(�A0�FPy
0A(A BBBJD�d���F�B�E �D(�C0�D�
0A(A BBBG0( ���B�A�D �N0q
 AABF0\ ����F�A�A �G`�
 AABG� $"��(HX(� <"���A�C�GPp
AAC� #��� #�� � #���E�G@n
AE !�#��(HX88!�#���F�B�A �A(�G`�
(A ABBJt!�%�� HPP�!�%��"F�H�A �Q(N0X(A t
ABBD(N0b(A Z
ABFH�!�&��nB�B�E �B(�A0�D8�G@�
8D0A(B BBBF,"�+��@"�+��@T"�+��wF�B�E �A(�A0�J@�
0A(A BBBEl�"�,��0F�B�B �B(�A0�A8�Gp�xG�K�I�B�B�B�E�Spy
8A0A(B BBBA8#�/���B�B�D �J(�D@
(A ABBED#p1��)H \ \#�1���E�D 
AG(�#2���F�B�H �I(�K0�D8�D��H�X�B�]
8A0A(B BBBFc�H�W�A���T�E�B�B�B�B�B�O���H�M�O�C�E�B�B�T�t�H�M�O�C�E�B�B�T���H�K�B�B�B�B�B�S�:�H�X�B���H�X�A���$�E���F�B�E �B(�A0�A8�I��K�F�F�[�v�H�A�D�A�D�B�B�W�u
8A0A(B BBBD`4%�Q��8F�B�B �B(�D0�F8�G���K�F�F�]�F
8A0A(B BBBIp�%�d���F�B�E �B(�A0�A8�I�v�H�A�D�A�D�B�B�W�u
8A0A(B BBBDp&�o��M
F�B�B �B(�D0�A8�I�}�H�A�D�A�D�B�B�W�u
8A0A(B BBBE�&�y��.i�&�y��
`�&�y��ZF�B�B �L(�G0�D8�G���O�F�F�Y��
8A0A(B BBBC$'�~��bE�I�P }AAh4' ���F�B�B �A(�D0�I�w�N�F�F�Y�L�J�^�A�o
0A(A BBBBH�'t���
F�B�A �D(�F���J�^�A�i
(A ABBDD�'8���7F�B�A �A(�F`�hHp`hA`i
(A ABBA`4(0���*F�B�B �B(�A0�A8�Q�Z�J�B�A�]�e
8A0A(B BBBF �(����zE�D Z
AD�(X���.i,�(t����M�A�D �W
DEE )Ԋ��zE�D Z
AD$)0���.iH8)L���_F�B�B �B(�A0�D8�JP�
8A0A(B BBBK�)`���.i@�)|���~F�B�B �A(�D0�JPS
0A(A BBBD0�)����IE�D�J U
CADOAD<*ԕ���F�D�H �G0J
 DABFi DAE0P*D����E�D�G0E
DAFiDD@�*�����F�B�B �D(�A0�D@q
0A(A BBBAL�*����B�B�B �G(�D0�GP�XG`UXAPX
0A(A BBBF0+����]F�A�A �Gp�
 AABB@L+ț��F�B�B �A(�D0�FP}
0A(A BBBF@�+����F�B�B �A(�D0�FP}
0A(A BBBF@�+`���F�B�B �A(�D0�FP}
0A(A BBBF@,,���F�B�B �A(�D0�FP}
0A(A BBBF@\,����F�B�B �A(�D0�FP}
0A(A BBBF@�,ğ��F�B�B �A(�D0�FP}
0A(A BBBFD�,�����F�B�E �D(�C0�D�
0A(A BBBD,-(���?E��
W8L-H���\B�E�F �A(�H0�~(A BBB8�-l���aB�E�F �A(�H0�C(A BBBD�-�����B�B�B �E(�G0�A8�G@l8C0A(B BBB(.����GF�D�J mAAA��08.����A�A�D �
AACLCAl.����A�\$�.����]E�A�G HFA8�.���B�B�D �D(�G@�
(A ABBA(�.X���yF�A�A �hFB(/����yF�A�A �hFB(D/���yF�A�A �hFB(p/T���yF�A�A �hFB(�/����yF�A�A �hFB(�/����yF�A�A �hFB(�/P����A�A�G0�
AAA( 0Ի���A�A�G0�
AAG4L0x����F�B�A �D(�O0�(F ABB@�0@����F�B�B �A(�D0�O@�
0A(A BBBAH�0��F�B�A �G(�L0}
(F ABBD[(F ABB81�����F�B�A �G(�L0w
(F ABBBHP1t���"B�E�E �E(�A0�A8�Gp�
8A0A(B BBBG<�1X���F�E�A �D(�I��
(A ABBAL�1��}F�B�B �A(�G0��
(F BBBF�(F BBB<,2H���F�E�A �D(�I�i
(A ABBAHl2����F�B�B �B(�G0�A8�L`(
8A0A(B BBBF<�2���ZF�E�A �D(�I��
(A ABBH,�2���	A�C
B�E�G��D�:
H<(3����F�B�B �G(�A0��
(F BBBF<h3���F�B�B �G(�A0��
(F BBBF4�3|��eF�B�A �G(�L0}(F ABB�3����3���	44���tF�B�A �G(�L0L(F ABB4@4���tF�B�A �G(�L0L(F ABB@x4<���F�B�B �A(�A0�O@�
0A(A BBBEL�4���F�B�B �B(�A0�E8�D�E
8A0A(B BBBKL5��F�B�B �B(�A0�G8�L��
8A0A(B BBBH@\5X����F�B�E �D(�A0�I��
0A(A BBBHD�5���F�B�E �D(�A0�L��
0A(A BBBF8�5����F�E�A �D(�Ip,
(A ABBE<$60���F�E�A �D(�I�*
(A ABBG<d6���!F�E�A �D(�I�
(A ABBE8�6����F�E�A �D(�Ip,
(A ABBE8�6��qF�E�A �D(�I`�
(A ABBA<7X��XF�E�A �D(�I��
(A ABBF<\7x��IF�E�A �D(�I��
(A ABBEH�7�#���F�B�E �B(�A0�A8�G`�
8A0A(B BBBE8�78���F�D�A �K
ABG}
ABH,$8p9��zF�D�A �C
ABG8T8�9��-F�D�A �K
ABGN
ABG,�8�:��zF�D�A �C
ABG8�8;��-F�D�A �K
ABGN
ABG,�8�;���F�D�A �R
ABHL,9X<��UB�E�B �B(�A0�A8�G�T
8A0A(B BBBA|9hT��	(�9`T���B�A�A �b
ABG(�9�T��AI�D�G dAAF��0�9�T���B�D�D �G0S
 AABH( :tU���A�C
K�����
AHL:8W��S$B�B�B �B(�A0�A8�D��
8A0A(B BBBA8�:L{��IF�B�D �D(�G@�
(A ABBHGNU��?�?�#���p�@���@������������p} ~�pwg{@V��������pA!�~�~�~�~q~�~�~�~�~�~�~�~(~/~6~>~H~Q~X~%/?��/
�x�#�#���o``�
�x#��#�0		���o���o0���o�o���oQX	#�/�/�/�/�/00 000@0P0`0p0�0�0�0�0�0�0�0�011 101@1P1`1p1�1�1�1�1�1�1�1�122 202@2P2`2p2�2�2�2�2�2�2�2�233 303@3P3`3p3�3�3�3�3�3�3�3�344 404@4P4`4p4�4�4�4�4�4�4�4�455 505@5P5`5p5�5�5�5�5�5�5�5�566 606@6P6`6p6�6�6�6�6�6�6�6�677 707@7P7`7~~~~~ ~$~(~/~6~>~H~Q~X~a~e~i~m~q~u~y~}~�~�~�~�~�~�~�~�~q~�~�~�~�~�~�~�~GA$3a1�/�xGA$3p1113�?�LGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p11130��xGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�?MGA+GLIBCXX_ASSERTIONSdate_core.so-3.4.4-3.el8.x86_64.debug��7zXZ�ִF!t/��:_
�]?�E�h=��ڊ�2N��O�*�,H��j��ϊ���}j{KC�05�{cR��Y���F���7ì(@�o�Hذ�G�ཋ�5w�!�)����ĥ��:�?�(���N��
�T%�R飕���WÏ�^�gЖ{��f������$�|G�,��h�<�4�s����j�ʀ���T�w/��k):�ܓv�a�������-z�ɪ_�G��I�X�Ѫjg4�R��@�WX
uY�+ٗ����d��k~�K���(��< >vMoPX#0[a�Cz�
`��8�p�t��j���S�H��vS*�i�w�l0�M��^.��Q���0��}bzId�8�2M�*�R�Y�m�V�vWY�&uB�ǻ7Wo�B㠂�~ݝ�w�(�,N����S��3�^Qj�#�:�G���$4s�a���qPTpW�y�e���j���A`�u�L8��1�̥c�p�6h|���jB��Je�*|�;e<��>����r+;.shȥ�/_H{e����B�r��kB�~�V�=� ÃcH]߄c��yPA��/�;b������^
�5���g�j..���h�?�s��^�Q�%�+�x�.
��[���vw,�i����ay�}%�:�'�5Bc���ғ}$�E�h/b�H�In&]��}�?�}	{��T �m2{O�n-��l�D����v���J���A�2a����<�1C8���Up_C~pJD�vx}��R�6�96xp�^U���ߵ{���*y�3f`Q�a�n"{���vE�F��n���-KpAI�̹�W��ɐ�����mʴ1vf	2�-�gJB%�h��h�>ñ�1�ྯ���Ѝg��+#~d+��fv�'��k�����;�VF/�̂��>��!t���{&�s�����.!Ũ�V�]0��F�,=�lf
�I�i	ʈk�	��ߝ��s��O�U��Sd��dO�����������K\tո��
aPx�-k)�$}�/i�U)C$/i�+��m�R�#u�����?���$]�Q���s`7�b�L�@�Pz|�5���h�����W��ҳ� ����lFE�%x���F%,_̿����#�B�YYY5�㚼�5gr3c`�F{]w,�6w+$��'%���Π����G�9�j���/P���9=�w�Uz�Q�*�|��=Ó�C��h��-?٥�DV�ywf��a=�_/�9�^�~��.L$�`����$����_�Vgx��Δ�=�����~{����/�q[�L?݈�cB��V���
������RCl�\'�v0͈�	���ױ��ܗ)�Q���k>�z�ՔV����f�ù�d�Z8p'��ъ]9�Q�#}Ȅ��|��D-��$�9Y��̦D3���=*h�Y��y�Y�.�c�,:<H<�����"�}�hw�	���\��{+��M|}��t����4B,���*��+"�P�$��!\t/R�%�Y��r���s�Ƿ_�|])C�G��h�p�fʟ>��$EJOUV�1�:=C����^����XE��4v���n,փz��^{��hQ��:;qT�@�q��ۋQ������@��,���Ҫ.7�Y!�fd�����l�J��G�L7�!h�2��\�J�qr�`���O�Ј����u#@J�'�~���α�	���p���e�����J����:��2IӜ8�*�t2j��;/�F�W	��$lo#�M��
2��k�F�_U
��<6��-J2$�a��x��Q[�
V�S;�PM�݀tfs,�1 J�M��O>Fݞc�!�e��
�P��Hc
_�=�W.U���g_{��B��u������2b&pBRҷ�����;F�rp6.�f+0!��y�V\se�����2�I��^e��ᱯ�o���#��15�˳�̼�y3��{0�p�1�#$���/;b�x��V���>8�u��H1aNqi�6�8|f�Nܘ�µO�4�+KV�|��
5��ƍ��9'2Js�.����5P��h�����^�r�+Ud5�E�I�����h!���t�"M��5�`)]H5��~+(7ʋ�&@��2p������Z&�|��/��k,�D��J]fo���L�l�f\�1qE
�Kb�a[:^���S���g[U�̚���`k\����ٶ�E����ڦ�g�^{������yn�#�ɽ�^>�3F?����NY�]J�=�t���(�o�. ds_b�Eܸ���!��x�q��X��t4��O�
�m0p�̥��k��r��AH�zLF8��9�2�:Qhn��Z��c;�ڕ��4�4��D���7����-�˽��b�_e��)j���J�];�l�hӄ^B�+�__2��O�c�����!��?�$����Hl�W��>��i�	���G�fAsq���	��”e�⩞ݻ�����>�qGp~"�	7�F���d{��r��M����K{aS�3�/��ĀL��N��G�jc;>u=��o��aoS��F;�gso�R�:�S&ty;4����NcbF>2�՜P�̦�U&�����*�����R��H`�?��&��\e�ɘ*D�(�t`d�/74��f�u�󟱌٦�ڮW�p�ę�,�oM�G'v�ܱ+���{�E<�6H3��x��d�x4�97~���
� l����@@�Q3�@�����v���,,'��mծ�X��\�ܦP�ď���'$Iͫ��
c�`u���80������q�3���h��|�5/����",&?7�Gh�j6�yژ39 bݎ�Z�u����Q����M֓_�g�P#�������lK�YtuF<��K�������+P����0�H��o��Q�W��R�$Ȭ��E��!�,6y���e�^��g�а�$�O�w{��q����糺�6�7�1N�(�
��*J۹��{;��|/����K�7G�O�ђ
��n����<�`�n>ʸ��'@;�7�3di�W:$���f��'�\�|����p:�О�[\�is�E�m�]0Fi�1�F��a��!
� �[�P�-mT}���e�5�ʘ%�{N�\'���ߍ4{&�<���B d�ڕ��%Z�b���Ť�6�@PΉ�Na���b6�
&�~�saO71��_�x0���܆�}��*�u*P-)	-d���v0@h���f|�`��⊠[��bE�S>d0�u"3C�4�_���@竧���$�|?�B�NP)ȱ�TD*��
����/��5��W�u�#.(M^�=g�4X�,k_�w�U��:�9ct?a_`Ius*[�1���Ơ-c_X���"z7���z�qE6ԋk!J�C�T'w,i\�1c�n#7�N=�{�����jk�.�J�r-�� ER;�&4���ި�uN�p�����Z�~a��.�z�|�(3S�wP�>�J}�	;`��t7�-V��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``d(���
0``�8���o"E���o00�T��0	^B�#�#�h�/�/c�/�/�np7p7�w0?0?�9}�x�x
��x�x�< �����	������:�p�p� ��#���#���#�� �X	#X	 �x#x��#� ��#�`�(%c�
�,�
�$(PK*J[4���X>X>lib64/ruby/pty.sonuȯ��ELF>`@X7@8	@�+�+ �+�+ �+ �� �+�+ �+   888$$`+`+`+  S�td`+`+`+  P�td�(�(�(llQ�tdR�td�+�+ �+ ��GNUk�%Cਥ�2!����03�F�@  FHIBE���|�qXu�U��� �5cU��%���L���h���4*��n S�r��b�!�Xp"�"�4�"f|����I|�, zF"�Z)�H����0 w 0 �0 @'�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_ary_entryrb_io_closesigemptysetposix_openptrb_fd_fix_cloexecsigactiongrantptunlockptptsname_rrb_cloexec_openrb_update_max_fdchmod__stack_chk_failrb_eRuntimeErrorrb_raiserb_error_arityrb_num2intrb_waitpidrb_last_status_getrb_fix2intkillrb_sprintfrb_exc_new_strrb_iv_setrb_exc_raiserb_detach_processrb_gcrb_obj_freezerb_cIOrb_io_open_descriptorrb_str_new_cstrrb_cFilerb_assoc_newrb_block_given_prb_yieldrb_ensurerb_execarg_newrb_execarg_getrb_execarg_parent_startrb_fork_async_signal_saferb_execarg_parent_endrb_cloexec_duprb_ary_new_caparb_ary_storerb_errno_ptrrb_sys_failgetenvrb_jump_taggetpwnamgetloginsetsidioctldup2getuidseteuidrb_exec_async_signal_safestrlcpyrb_intern2rb_ivar_getInit_ptyrb_define_modulerb_define_class_underrb_define_methodrb_define_module_functionrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_startGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64� ui	��ii
ui	��+ �+ ��+ �+ �/ �/ �/  �/ (�/ 6�/ ;�/ =�/ D�- �- �- �- �- �- . . 	. 
.  . (. 
0. 8. @. H. P. X. `. h. p. x. �. �. �. �. �. �. �. �. !�. "�. #�. $�. %�. &�. '�. )�. */ +/ ,/ -/ . / /(/ 00/ 18/ 2@/ 3H/ 4P/ 5X/ 7`/ 8h/ 9p/ :x/ <�/ =�/ >�/ ?�/ @�/ A�/ B�/ C�/ E��H��H�I H��t��H����5* �%+ ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=���������%E D���%= D���%5 D���%- D���%% D���% D���% D���%
 D���% D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%} D���%u D���%m D���%e D���%] D���%U D���%M D���%E D���%= D���%5 D���%- D���%% D���% D���% D���%
 D���% D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%} D���%u D���%m D���%e D���%] DH�=� H�� H9�tH�F H��t	�����H�=i H�5b H)�H��H��H��?H�H�tH�- H��t��fD�����=% u+UH�=
 H��tH�=�
 ����d����� ]������w������UH��S1�H��H��H�����H��t!�uH���H��uH���Y���f�H��t�H��H���z���H��u�H��u�H���[]�AWA��AVI��AUATE��USH��XH�<$H�|$H�t$dH�%(H��$H1�H�D$DŽ$��\��������������H�l$L��$�����L��H�������������c���1�L�����td�������tb��������tV�L�����o����Ņ�uAE��ut1ҾL���%���A�Ń��t%�����H�$�H�D$D�(�fD����������E��uI�����H��$HdH3%(��u*H��X[]A\A]A^A_þ�L���3�������v�����C���H�� H�5�H�81��{���ff.���U��SH��dH�%(H�L$1Ʌ�~
H�>��t��tz�������f��@��uM���H�t$�������ō@��v5H�����u9�7���H�L$dH3%(��H��[]�@�s���뱐���H�^똀|$H�5"t1����|���H�5��H�HE�Hc�H�=1�����H�= H������H�����H��H�5�H���N���H���&����������SH���H���dH�%(H�D$1�H�t$�����~�{����H�L$dH3%(�uH��[����fDAUE1�A��ATI��UH��SH��H��������uH��[]A\A]����H��D��L��H��H��A�[]A\A]���f.���U�SH��8dH�%(H�D$(1�H�\$H�t$H��H�|$�j���H��H�=�1����H���1����t$E1�A�H��H�r
 �+H�8���H��H���R���H������t$E1�A�H��H�[
 �;H�8����H��H������H��������uH�T$(dH3%(H��u*H��8[]�DH�=� H��H��H�,������H�����=���ff.�f���AUATUSH��dH�%(H��$�1��D$����1ɺH�l$P���L�d$`H�\$0H��H�D$@����H�|$@H�D$H���H�t$1�H��H�|$�����D$M��H��H�|$A� �H�l$8�D$0�D$H�53�D$`�D$4���A�Ņ���|$H������H�|$@�c����D$D�l$,H�\$ �D$(H��H�D$@����H���l���H�� �t$(E1�A�H���H��H�;�5����|$(I���i��������H�;E1�H��A����������H���x���1�L��H��H�����H��H�����HcD$,�H��H�T�q�����������H��$�dH3%(H���H�Ę[]A\A]�@�#����|$������|$���H�|$@�E���������|$��uF�|$`H�=IE�����H�=�D�H��tOH�����H�t$�H�D$����+���H�=a
 H��H�L$(H����������/���H�=����H��t/H���w���H��tH�@(H��u�f�H�m�u���@����H��t����_�H�=k������AVAUI��ATI��UH��SD�7�_���D����1ҾT��1���1����/����#������*��������u#H�}[L��L��]A\A]A^�;����A���L��L��H�5��-���[�����]A\A]A^�ff.�@��USH��H��H�D	 H��u H�-P�H���3���H�$	 H��t�H��H��H��[]��fD��H��H�=T��������H��H�5@H��H�� �
���H�=� �����H����H�5���H�=� �����H�����H�5��H�=� 1�H�|���H�5��p�H�I H�=r H�5�H��S���1�H�����H�5cH�T H��H��� ���H��H���can't get Master/Slave devicestoppedchangedexitedpty - %s: %ldstatusmasterpty:%s/bin/shfork failedSHELLUSERdup()seteuid()PTYgetptyspawncheckopenChildExited;h�����������������<����h����t��������d���D$����t����zRx�$x��FJw�?:*3$"D@��$\��mE�D�L PFAL�����B�E�E �B(�D0�A8�G�+
8A0A(B BBBA(�P���E�C�D0�
AAE D���ZE�L B
AAH$����VB�H�D �D(�G0M
(A ABBDI(S ABB(p����E�F�DP�
AAF<�x����F�B�A �A(�G��
(A ABBEH�����F�B�E �D(�D0�^
(G BBBH\(F BBB$(����JE�A�G pGAP�����H�GNU���+ ����p
�'�+ �+ ���o`�	�
(�- ���	���o���oH���o�o�
���o�+ ������ 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`pGA$3a1p�'GA$3p1113 �'GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA+GLIBCXX_ASSERTIONS �
GA*FORTIFYpty.so-3.4.4-3.el8.x86_64.debugq;U��7zXZ�ִF!t/����]?�E�h=��ڊ�2N��Tt�L�nu�S[�r>:B��8���Gd�%%���~`���r&�,�����Î�	%���� ��}zK�Zrg�;3��b� �誷q�aqg���6�1}8g�-n�������
/U.���U��$�>&� �/F�~M_�����<�Y���`�����(�J�6�#��.U+3I�U�::�Q[��2�&��A�x�p���1Fl�e�i���	�#D�3���;%+���Ӿ[�������mߏ��t�G�$�rp�ڧ�ƙR@�6d�ϴ��KL�լ��5�T�e�pYZ����$y	���m=�ES� ?��7�=�2d[k�U�����o�]*�
hcY���z�qC!��orC�/�_��p}�d`!nw!JXRR~�� HA�:J�`X/�&��W�Ӕ6;��-#:]Cؗh0�W���6����8���]�8�?��8O�����"�r#�+��"���_2�T��A;�Oa3�;S����"��N.��w�NkW�ӧ�kq�������*	X�B�]5�c��9�D���{Fj/��3�[X���`����;���*oȫ9uJ.�S�Z��k����f��I����t�D^~�3A���Z��c����1��:i�E]�C�T�� �O=��[`�0A(S �c�����v���k����â�e#eR�8�*�}��;����DT�����{��0����GP��!�v��Y9b�)*OIaKI)��U=��]d`�JM4�%�Ge`�8k~X~���ڙ��M�}���_��c
_)�K�`�qot�����<�a�ߕ7�SNk�;rm�7�VW��ǰ�������9�*��i(K���T�����ys���t�Enu�3���^UԤ��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0�	�	(8���o�
�
�E���oHHPT��^B���hppc���n���w``p
}�'�'
�2�'�'���(�(l��(�(h�`+`+ ��+ �+��+ �+��+ �+��+ �+ ��- �-H�0 0 � 0`0HH2$l2�46"PK*J[�A:w�L�Llib64/ruby/socket.sonuȯ��ELF>��@hE@8	@�� � � #� #� �!�!#�!#  888$$���  S�td���  P�td������LLQ�tdR�td� � #� #GNU쒒�8�����'�F�?�l����
� � ��P�
�JP��H�h�H��1�@%D!GAD(`� $��
�H5�EB�E "� �WH F�"C$�   	p��8��
"#$%&()*,-/12345679:;?@ABCEHKMNOPRSUWZ\]^_`acfghijklmoqrsuvwxy{|~���7u~KU�cuw2��M���<H�G�{tz�t�g�Y�B�`<���l�>�.3��W�y��RH�As�9T�h�jK�N������~�a��z�����p;F`n�xv��
:�ӊOL4�a�	��@m�L�
�������d\�%�q�����*������ �P��iNJK�uD}�����`�
��U#&p% �k��B��if\K�U��/y�cQ��	��W��t+/Ze���B�2�RaSFj-q)篷����3�>3�D�n����VK��,�,��93��L���]�F��j,��E� 9/�qX:|�y���K%ѓ����6���إ����[)�c�'i'�i�PG��n%oy׫/ȷ�0`O����-x��ү�?k4@kw��q%R��4��0����M2M��|�Qvf$�[��9�g�!;6�'蘵Yi��CE��g<��D(h����L�1�G�,�\��V�
L]����H�UNnqzNȟ�H�=�@�ց�ͳxb����aCMP�kd�u��VW
~���
�O(0Z����
S��
K�,4} �=n���ff�S�
�j]=Cx�^��B���/0+�2A�
t�Z
x
�����k;hp
�^
�
�C
���
��?�.��#�0
��������5s�.�	�.���hK��%EOHR��� >O4����L\\�"L�U�^��

�@�m��A�
C�-��]������	"s"K���t����
zq����8(�M�mt�#�;
���\l
�A"
��T
�, ()�
�uq5F"��`x3
�l6��(�:�p2#*�������
p�.���9�U�����`���P��pUA�`�Q`�QK�&F���	`���Q���Q���7%0���Ц& �Mk�<p�;��i�~`70�X2#��>��\v@���@A�0��� ���P��/�2#�	E	`Q��2#kPU����Uh2#9�m�D �i^	�Qa��A ��G
��Y��Q��zb2��&��TY���'�@Q���
	�Q�P2#a�2#w���
0�Q�`A�	`�2@������9\��{5�n
`d
����l��)�
�|V���+�`2#�@7������� ��0#�����
������[`zl ���P}*tЎ�_piX�P�/��7u
��EJ�2#��2#�0�R� 7�	����u��""`�������x2#N���0����2#�`�[`�z��2#L�W�	�Q9p�-�(@{��Ap�
@�#�0#�@�W�_���	R��&�P�5��2#w	 Q�	 7�0#�
Pb�`�m��7�y���
 �"+	QXБK`�Vq�}~��E��2#� Q__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_io_blocking_regionaccept4rb_attr_getrb_string_valuerb_str_modify_expandrb_str_modifyrb_str_newrsock_raise_resolution_errorgai_strerrorrb_sprintfrb_eResolutionrb_class_new_instancerb_ivar_setrb_exc_raiserb_errno_ptrrb_syserr_failrsock_init_sockrb_update_max_fdrb_io_make_open_filerb_io_ascii8bit_binmodersock_do_not_reverse_lookuprb_io_synchronizedrsock_sendto_blockingsendtorsock_send_blockingrsock_is_dgramgetsockopt__stack_chk_failrsock_s_recvfromrb_fix2intrb_num2intrb_io_taint_checkrb_io_check_closedrb_io_read_pendingrb_io_maybe_wait_readablerb_str_locktmprb_str_unlocktmprb_ensurerb_str_set_lenrsock_unixaddrrb_assoc_newrsock_io_socket_addrinforsock_ipaddrrb_error_arityrb_eIOErrorrb_raiserb_bugrsock_s_recvfrom_nonblockrb_readwrite_syserr_failrsock_read_nonblockmemmoverecvrb_num2longrb_eof_errorrb_syserr_fail_path_inrsock_write_nonblockrb_obj_as_stringrb_io_get_write_iorb_io_check_writablerb_io_flushrsock_socketrb_fd_fix_cloexecrb_gc_for_fdrsock_connectrb_io_descriptorrb_io_waitrb_eIOTimeoutErrorrsock_make_fd_nonblockfcntlrsock_s_accept_nonblockrb_io_set_nonblockrb_obj_allocrsock_s_acceptrb_gcrsock_getfamilygetsocknamersock_init_socket_initrb_eStandardErrorrb_define_classrb_eSocketrb_cSocketrb_define_class_underrsock_init_ipsocketrsock_init_tcpsocketrsock_init_tcpserverrsock_init_sockssocketrsock_init_udpsocketrsock_init_unixsocketrsock_init_unixserverrsock_init_sockoptrsock_init_ancdatarsock_init_addrinforsock_init_sockifaddrrsock_init_socket_constantsrb_intern2rb_internrb_id2symrb_cAddrinforb_cUNIXServerrb_cUNIXSocketrb_cUDPSocketrb_cTCPServerrb_cTCPSocketrb_cIPSocketrb_cBasicSocketrb_define_methodrsock_family_to_intmemcmprsock_socktype_to_intrsock_ip_level_to_intrsock_so_optname_to_intrsock_ip_optname_to_intrsock_ipv6_optname_to_intrsock_tcp_optname_to_intrsock_shutdown_how_to_intrsock_scm_optname_to_intrsock_unknown_level_to_intrsock_udp_optname_to_intrb_check_string_typerb_sym2strrsock_ipproto_to_intrsock_intern_familyrb_st_lookuprsock_intern_family_noprefixrsock_intern_protocol_familyrsock_intern_socktypersock_intern_ipprotorsock_intern_iplevelrsock_intern_so_optnamersock_intern_ip_optnamersock_intern_ipv6_optnamersock_intern_tcp_optnamersock_intern_udp_optnamersock_intern_scm_optnamersock_intern_local_optnamersock_family_argrsock_socktype_argrsock_level_argrsock_optname_argrsock_cmsg_type_argrsock_shutdown_how_argrb_define_module_underrb_define_constrb_st_init_numtablerb_st_insertrsock_bsock_sendrsock_sockaddr_string_valuerb_str_new_frozenrb_io_maybe_wait_writablerb_ll2inumrb_out_of_intrsock_sockopt_newrsock_sys_fail_pathshutdownrb_eArgErrorrb_io_closegetpeernamersock_fd_socket_addrinfo__fxstatrb_reserved_fd_psetsockoptrb_funcallvrsock_init_basicsocketrb_cIOrb_undef_methodrsock_bsock_sendmsgrsock_bsock_sendmsg_nonblockrsock_bsock_recvmsgrsock_bsock_recvmsg_nonblockrb_define_private_methodrb_define_singleton_methodrb_rescuerb_ary_entryrb_yieldsocket_s_tcp_fast_fallbackrb_ivar_getsocket_s_tcp_fast_fallback_setrsock_addrinforb_freeaddrinforb_string_value_cstrgetservbyportrb_str_new_cstrrb_eRangeErrorgetservbynameruby_strtoulrb_warngethostbyaddrrb_ary_newrb_ary_pushrsock_make_hostentrb_str_new_staticgethostnamestrlenrb_str_resizersock_addrinfo_newgetifaddrsfreeifaddrsrsock_sockaddr_string_value_ptrrsock_unixpath_strrb_eTypeErrorrb_check_sockaddr_string_typerb_getnameinforb_check_array_typersock_getaddrinfostrcmp__memcpy_chkrsock_make_ipaddrrsock_unix_sockaddr_lenrsock_sock_listenrsock_sock_s_socketpairrb_block_given_prb_ary_ptr_use_startrb_gc_writebarrierrb_ary_ptr_use_endrsock_revlookup_flagrsock_syserr_fail_host_portrb_syserr_fail_strrb_exc_new_strrsock_sys_fail_host_portrsock_syserr_fail_pathrsock_syserr_fail_raddrinforsock_addrinfo_inspect_sockaddrrsock_syserr_fail_sockaddrrsock_sys_fail_sockaddrrsock_sys_fail_raddrinforsock_syserr_fail_raddrinfo_or_sockaddrrsock_sys_fail_raddrinfo_or_sockaddrrsock_sockaddr_string_value_with_addrinfobindrsock_sockaddr_lenrsock_sockaddr_objInit_socketrb_ext_ractor_safegetenvrb_nativethread_lock_lockrb_nativethread_lock_unlockrb_fd_termfree_fast_fallback_getaddrinfo_sharedfree_fast_fallback_getaddrinfo_entryclock_gettimerb_call_superrb_id2strrb_str_subseqrb_str_catrb_str_appendrb_str_cat_cstrpiperb_nativethread_lock_initializeruby_strdupfork_safe_do_fast_fallback_getaddrinforaddrinfo_pthread_createpthread_detachrb_hash_arefrb_fd_zerorb_fd_setrb_thread_fd_selectrb_fd_issetrb_time_intervalrb_float_newrb_cObjectrb_const_getreadreallocrsock_init_inetsockhost_strport_strinet_ptonrb_fd_initrb_unexpected_typerb_sym2idrb_id2namerb_io_moderb_keyword_given_prb_get_kwargsrb_hash_duprsock_fd_familyrsock_freeaddrinforsock_recvmsgrb_str_duprb_obj_freezerb_obj_is_kind_ofrb_io_wait_writablerb_io_wait_readablerb_maygvl_fd_fix_cloexecrsock_discard_cmsg_resourcersock_init_unixsockrb_get_pathrb_protectrb_jump_tagif_indextonameruby_snprintfrb_str_catfrb_to_intinet_ntoprb_obj_classnamerb_str_dumprb_cSockOptrb_check_to_integerrb_ary_new_from_valuesrb_time_nano_newrb_time_newrb_num2uintrb_str_tmp_frozen_acquirerb_str_tmp_newmemsetrb_check_convert_typerb_thread_call_without_gvlrb_str_tmp_frozen_releasememcpyrb_str_buf_newlocaltime_rstrftimerb_cStringrb_obj_revealrb_num2ullrb_io_fdopenrb_obj_freeze_inlinerb_native_cond_signalrb_native_cond_waitrb_native_cond_destroyrb_nativethread_lock_destroyrb_thread_prevent_forkrb_data_typed_object_wraprb_gc_markrb_check_typeddatastrspnruby_xcallocruby_xmallocruby_xfreerb_thread_check_intsrb_native_cond_initializerb_thread_call_without_gvl2strtolrb_ary_storerb_cIntegerrb_ary_new_capagethostbynamerb_fiber_scheduler_currentstrcpyrb_fiber_scheduler_address_resolverb_convert_typerb_str_equalrsock_inspect_sockaddrrb_typeddata_is_kind_ofsigemptysetsigaddsetpthread_sigmasknanosleepwriterb_define_alloc_funcrb_cSockIfaddrif_nametoindexrb_cFalseClassrb_class_namerb_cFloatrb_cNilClassrb_cTrueClassrb_cSymbolrb_undef_alloc_funclibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_startGLIBC_2.2.5GLIBC_2.3GLIBC_2.14GLIBC_2.3.4GLIBC_2.10GLIBC_2.4GLIBC_2.17/opt/alt/ruby34/lib64		� ui	��ii
	���
ti	���!ii
,���6ui	�� #� #��!#!# !#�(!#`G8!#�C�!#o��!#`��!#�-#2�-#�-#l�-#W.#.#.#.#C .#"(.#&0.#*8.#v@.#KH.#P.#xX.#8`.#<h.#"p.#3x.#|�.#t�.#�.#&�.##�.#<�.#F�.#@�.#z�.#��.#��.#��.#]�.#�.#>�.#��.#/#6/#(/#�/#1 /#4(/#{0/#q8/#G@/#0H/#DP/#TX/#z`/#�h/#�p/#'x/#U�/# �/#`�/#I�/#Q�/#!�/#�/#��/#��/#��/#�/#��/#.�/#V�/#��/#�$#$#$#$# $#($#0$#8$#	@$#
H$#P$#X$#
`$#hh$#p$#x$#�$#A�$#_�$#�$#�$#�$#�$#�$#�$#��$#�$#�$#o�$#�$#�$#�$#%#%#%#%# %#?(%# 0%#!8%##@%#;H%#$P%#%X%#X`%#'h%#(p%#)x%#�%#�%#s�%#+�%#,�%#-�%#.�%#/�%#0�%#K�%#�%#1�%#2�%#*�%#P�%#w�%#&#3&#4&#5&# &#6(&#70&#98&#:@&#;H&#EP&#SX&#=`&#>h&#?p&#@x&#A�&#B�&#C�&#+�&#D�&#�&#E�&#F�&#G�&#Y�&#H�&#I�&#J�&#K�&#L�&#M�&#N'#O'#}'#O'#$ '#('#P0'#Q8'#R@'#
H'#SP'#TX'#`'#Uh'#p'#Vx'#W�'#X�'#Y�'#Z�'#[�'#,�'#\�'#�'#]�'#^�'#_�'#`�'#a�'#<�'#p�'#b�'#c(#d(#e(#f(#g (#h((#i0(#B8(#j@(#RH(#kP(#FX(#m`(#lh(#mp(#nx(#o�(#p�(#q�(#r�(#s�(#t�(#u�(#v�(#w�(#x�(#y�(#=�(#{�(#|�(#f�(#}�(#~)#)#�)#�)#
 )#�()#�0)#8)#�@)#�H)#�P)#�X)#�`)#�h)#�p)#�x)#��)#/�)#u�)#��)#��)#��)#��)#��)#7�)#��)#��)#��)#��)#��)#��)#>�)#*#�*#�*#[*#� *#�(*#�0*#�8*#�@*#�H*#�P*#X*#�`*#�h*#�p*#�x*#�*#��*#��*#��*#��*#(�*#��*#��*#��*#��*#��*#��*#��*#��*#��*#��*#�+#^+#�+#�+#� +#�(+#�0+#�8+#�@+#�H+#P+#�X+#�`+#yh+#8p+#�x+#��+#��+#��+#��+#-�+#a�+#��+#��+#n�+#d�+#��+#��+#�+#��+#�+#\�+#�,#�,#b,#L,#5 ,#�(,#�0,#�8,#�@,#�H,#�P,#�X,#�`,#	h,#gp,#:x,#�,#J�,#j�,#��,#��,#��,#�,#)�,#��,#��,#��,#��,#��,#��,#��,#%�,#M-#�-#�-#�-#� -#N(-#�0-#�8-#�@-#�H-#�P-#iX-#�`-#�h-#�p-#�x-#��-#��-#��-#��-#��-#��-#��-#��-#r�-#e�-#��-#��-#���H��H��"H��t��H����5ڶ"�%۶"��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h��������h�������h�������h������h������h������h������h������h��q����h��a����h	��Q����h
��A����h��1����h��!����h
������h������h�������h�������h�������h������h������h������h������h������h��q����h��a����h��Q����h��A����h��1����h��!����h������h������h�������h �������h!�������h"������h#������h$������h%������h&������h'��q����h(��a����h)��Q����h*��A����h+��1����h,��!����h-������h.������h/�������h0�������h1�������h2������h3������h4������h5������h6������h7��q����h8��a����h9��Q����h:��A����h;��1�����%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݢ"D���%բ"D���%͢"D���%Ţ"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݡ"D���%ա"D���%͡"D���%š"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݠ"D���%ՠ"D���%͠"D���%Š"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݟ"D���%՟"D���%͟"D���%ş"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݞ"D���%՞"D���%͞"D���%Ş"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݝ"D���%՝"D���%͝"D���%ŝ"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݜ"D���%՜"D���%͜"D���%Ŝ"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݛ"D���%՛"D���%͛"D���%ś"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݚ"D���%՚"D���%͚"D���%Ś"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D���%5�"D���%-�"D���%%�"D���%�"D���%�"D���%
�"D���%�"D���%��"D���%��"D���%�"D���%�"D���%ݙ"D���%ՙ"D���%͙"D���%ř"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%��"D���%}�"D���%u�"D���%m�"D���%e�"D���%]�"D���%U�"D���%M�"D���%E�"D���%=�"D�+�H���#���AUATUH��S��H�==*H��(dH�%(H�D$1��T�����~CH�EH�D$��tH�EH�D$��t�%H�D$H�|$���H�|$H��t�o��(��������H�D$H�x������H�T$H�rHc�H9�tH���l��"
H�zsH�z������H��H��uH�ș"H�5�&H�81������H�;H�����H��H���|�����H��H��I���i���L�cM��uHcsH��H�H���N���L�c�I�<$H��t��J���L��I��H���+�����I�<$H��tHcsI���s���H��H��������H�L$dH3%(H��t���H��([]A\A]���SH�=�(H��1�����H��1ҾA����H��H���[H�����H���8�H���0�H���(�H��� �H������SH�=�*H��1��b���H��1ҾA����H��H�>G[H���E���H�����������H����L����H�=�"H�ژ"H9�tH�֖"H��t	�����H�=��"H�5��"H)�H��H��H��?H�H�tH�5�"H��t��fD�����=��"u+UH�=B�"H��tH�=N�"�����d����]�"]������w������H��H�?H�5��f.���UL�O L�G(SH��H��H�G�o �OH�WH�pH� tH�p�{�t���H���t9k v�k H��[]�ff.�@��H���WH�w�?�:���H��H��H��t+U�SH��H���*�����t9+v�+H��[]�@�1���@��H��H�WH�w�?���H��H��f���H�5E�"���SH��H��H�|$H��t=H�|$���H�|$H�GH9�~H)�H���*�H�D$H��[���S���1��I���H��[���UH��SHc�H��dH�%(H�D$1����t`����H��H�=j	H��H��1���H��H�$�a�H�b�"H��H��J�H�5s�"H�TH��H���C���H������F��8��t�H��������ATA��UH����S���H���c���H��D�`H���@#���H�V�"���t�KH���q�H��[]A\�f���H�GD�OL�G�OH�PH�pH� tH�p�?������H�G�OH�PH�pH� tH�p�?���f���H�����dH�%(H�D$1�H��L�D$�D$�����t1��<$��H�T$dH3%(uH�����H�5��8�����ff.���AW��AVAUATA��USH��HdH�%(H��$81Ʌ��TI��H�����H�z���IH�j�9��'H���a@���R���H�߃��D$�V��Lc�H��L���"���L��H���'�H�hH����H���s��������EH�l$L�=���L�l$(L�l$�D$�D$0H�\$ �%�yc����L���8����`H���R�H���
�L��H��L��H���"��H��H��u�H��H�D$���H�t$����H���{�A����E��t$A��uv�t$0I�}(�i���H��H����H��H��$8dH3%(H��� H��H[]A\A]A^A_�@�H�߃��D$������������DA�����T$0I�u(L���v�H��H���{�H���{�����n���fD�t$0�����t%�UI�}(���"�H��H���7�H���7���H�߾�"�H���"����u�H�5n�8�������v�����H�ؑ"H�5$H�81��_���S�����	�H�=�1���ff.���AWI��H��AVAUE��ATI��USH��H��HL�D$dH�%(H��$81����D$,�c���L��A�����c���Lc�H�߃�@L���Y���L���l$H���Z�H�hH�����H��������EH��D$����D$,H�s�D$H� ��L�t$0�L$�|$L��L�L$,M����I��H������D$9D$,v�D$,M������L;ctL��H�����A����E��t'A��� �T$,L��L���F�H��H���K�H��H��$8dH3%(H����H��H[]A\A]A^A_�@H�s�9����H�������i����멐�{�L��A����������g����f��+��8��usH�|$uXH�-�"�h����D$,�������I����U��L�����i�H���.������H�m�"H�5�H�81����H���1��1�H�5��5�H�=�1��'����AWAVI��AUATI��UH��SH��@���H��H�L��H���*���H��I���/�H�hH�����H����M�D$I�$ usD�}PE��~xMc�HcuLHuDL9���L��L�����D}LD)}PM;l$t'L���\�L��L�����M��uM����A�H��L��[]A\A]A^A_�D�}PM�D$E����}�@H��L���7�H��xbM�l$L9�t�I���Lc�L��L���2�]LI��)]PM���e����fDH���0�H������1�L���&��d�����+��0��u)M��uL�%0�"�F�����H�D�1��{�H�U H�=P��ff.���AUATI��USH��H��H��t
@���}H����H��H����H��I����H�XH����H���{��C<��~L����H�UH�uH�E uJ�{�@��H��H�DH��x@H��[]A\A]�DH�H����H���p����v����H�u�f.����0��uM��u"H��"H��[]A\A]�H�S H�="�
�H�$���G����AU��A��ATA��U��SH����Ã��t(���q���x����H����[]A\A]�f��k��8����t�D���D����Ã��tƉ��%���y�H����[]A\A]�@��AVAUA��ATM��UH��SH��H��0dH�%(H�D$(1���H��H�l$�D$D�l$���H�hH���]�H��H�T$H�5��)��Ņ�x#H�L$(dH3%(���MH��0[]A\A]A^������t~r��Ut��su�H��L�t$L�l$�v�M��L����lj��D$�%���x&�D$�H���w5�H�੡t&�1��T$�������^�������T����DL��H��� �H����H�Ǩu`����x�M��L������D$����x��D$1�U��3��������������c�������@���f���j������;�����r��������*����K�H�d�"H�5��H�81��s����S1�����
�����t����߉�1�������t[��	��H�5u��8���ff.���AVM��AUI��ATI��H��UH��SH�����{L��H�����x+�lj��"�L���Z����[]H��A\A]A^��������8��Gt��gt��tH�5����fDM��u[H�s�"]A\A]A^É�H��1�������AWI��H��AVI��AUATUH��SH��H��8dH�%(H�D$(1�L�l$���L�`L���y�A�D$H�\$ H�l$1�D$@L��H�5v�L���.�H�Å�yW�������w+���H���t���������fD�L�����Q���ta1��f��ljD$���M��u0HcD$H�DH�L$(dH3%(u8H��8[]A\A]A^A_��L��������H���^���H�5����������f���SH��H�� �WdH�%(H��$1��D$���t'���@tV�
���tI��� t<�{1�H�T$H�t$f�D$�����1���x�D$f��tXf��
tBf��t$@H��$dH3%(uCH�� [�@�K ���f.��K��
�f��K@�����ff.�f���H��H�1�"H�=��H�0�R�H��"H�5|�H�H��H�?�"H�8�_�H���"1�H�5g�H��H�H�b��
��H�������������$����������������������
H�=
���H�=�H�R�"�=�H���U�H�=��H�?�"�"�H���:�H��"H���f.�@��H����
UH�
�H��SH��H��Hc�H�>��DH�AF_NETLIH9�]H�PF_NETLIH9�
�����H��[]�fDH�AF_APPLEH9�H�PF_APPLEH9�BH�AF_BLUETH9�oH�PF_BLUETH9u��{OOTHu��E1��@f�?IBu��EH��1�[]Ðf�?IP��f�;SN��f�;MA�'f�;KE�f�;RD�nf�;LL��f�;CA�\	f�;AL�v	f�;KC��	f�;XD�����{P�����1��E,���f.��?INET�D�?UNIX���?AX25���?ISDN�X�?MPLS���?TIPC������E1����f.��?AF_I��;PF_I���;INET�L�;LOCA��;ROUT���;PPPO���;VSOC�2����{K�(���1��E(����@�?AF_I���;PF_I�H�;AF_S���;PF_S���;AF_M�Q�;PF_M���;AF_K���;PF_K�A�;AF_R�[�;PF_R���;AF_L�]�H�5��H���������M�H�5�H����������H�5�H��������g�H�5��H��������Y�H�5��H���h�����=�H�5��H���L�����/�H�5�H���0������H�5j�H���������H�5U�H���������H�5��H�����������H�5��H����������H�54�H��������B����E�;����?AF_I�t�;PF_I��;AF_U���;PF_U��;AF_A���;PF_A���;AF_I�n�;PF_I�F�;AF_M���;PF_M���;AF_T���H�5��H�������������H�5�H���������z���@�E1��m���f�H�AF_INET6H9��H�PF_INET6H9�zH�AF_LOCALH9�WH�PF_LOCALH9�DH�AF_ROUTEH9t�H��H9t�H�AF_PPPOXH9��H�PF_PPPOXH9�mH�AF_VSOCKH9tH�PF_VSOCKH9������E(1����fDH�AF_UNSPEH9�=H�PF_UNSPEH9��H�AF_DECneH9�wH�PF_DECneH9�DH�AF_PACKEH9��H�PF_PACKEH9�H�APPLETALH9�+H�BLUETOOTH9�����{H�����b���f�f�{NI����{X����f.��E1�����f��E
1����f�f�NE������T�v���f.��E1����f�f�{NI�h����{X�^�����f�{NA�h����E1��Q���fD�{OOTH��������fD�{X����1��E-�����{6�����1��E
������{t�����E1������TALK����E1����Df�NK������/�����X�)���1������f�PX�p����E1��q���fD�B���������C������E1��C���f�{X2�8����{5�.���f��E1�����f�f�{NE����{T����e���Df�{NK����o�����{B�f����H���f��{C�<����k����f�{PX������+�����{A�4���1��E����{TALK��������f�{SD������{N�|����E"1��U���f.��{L����a�����{Y���1��E�#�����{t����������f�{NA�������f�{PL�����{S�����E1������{S�����1��E����{T�h����E1�����{E�M���1��E���f�{AX������E-1��t����E1��f����{X����1��E�N����{C����1��E�6���f�{X2�7����{5�-������{T�����X���f�{AX�-����y����{K��������f�{EY�����E1������{N�����1��E���������À{G�����1��E&���f�{SD������{N���������f�{EY�����대{M�J���1��E)�T���f�{DS������E1��:���f�{LC������E1�� ���f�{DS�q�����f�{PL�C����{S�9�������f�{IP�4����{C�*����9����E1�����E&1����E)1����E���E���E,1�����H��H��w4H�
��Hc�H�>��H�SOCK_NONH9u�BLOCu
�K��������H�SOCK_SEQH9u�PACKu�f�ETu��1���f�?RA��f�?RDu��Mu��1����?DGRAu��Mu��1��?STRE���?PACK�j���f�ET�^������?CLOE�F���f�XE�:����C�0����1��DH�SOCK_RAWH9��H�SOCK_RDMH9�R���H�NONBLOCKH9����1��fDH�SEQPACKEH9�����T��������fDH�SOCK_DGRH9�����f�AM���������@H�SOCK_STRH9tyH�SOCK_PACH9�h���f�KE�\����
T�R����
1���H�SOCK_CLOH9�/����EXEC�"�������W�Y����1��Df�EA�{����
M�q����1�Ðf�AM�`�����f���H��wnH�
��Hc�H�>��Df�?TC�Ef�?EG�
f�?PU�_f�?UD��f�?ID��f�?ES��f�?RAu�W�8D������f�H�IPPROTO_H9u�ICMPu�f�V6u�1��:��H�IPPROTO_H9�=H�IPPROTO_H9�RH�IPPROTO_H9u��ROUTu�f�INu��G�x����f�?IP��f�?TP�Bf�?AH�O����31��fD�?ICMP���?IGMP��?IPV6���?NONE�����;1����?SOCK�<�?ICMP���f�V6��������H�SOL_SOCKH9�H�IPPROTO_H9�BH�IPPROTO_H9��H�IPPROTO_H9�����f�AH�x���1��3��H�IPPROTO_H9�eH�IPPROTO_H9��H�IPPROTO_H9�oH�IPPROTO_H9��H�IPPROTO_H9��H�IPPROTO_H9��H�IPPROTO_H9���f�RA�����
W����1����@H�IPPROTO_H9��H�IPPROTO_H9�BH�IPPROTO_H9��H�IPPROTO_H9�t����NONE�g���1��;�fDH�IPPROTO_H3H�FRAGMENTH3wH�������H	��1���1��,��?DSTO�t�?HOPOtl�?ROUT����f�IN���G���1��+�f�H�FRAGMENTH9�����,1��@f�ET������1��f�PTu��Su��1�Ðf�EG�:����
P�0���1��Ðf�IP�������f��IGMP�����1���f.��P����@�1����1����P�����1���Df�TC������
P������ځICMP����1���f.�f�ET�������f�PT������S�v���1��<�f��DSTO�����f�PT������S��������HOPO�����f�PT������S�����1���@�)1���f�TP�m���1����IPV6�d���1��)�f.��P�����1���Df�PU������
P�{����ڀP�r���1���Df�UD�h����
P�^����ڀP�M���1���f�ID�P����
P�F����߀P�-���1��2�f�ES�8����
P�.�����f.���H��H����UH�
��H��SH��H��Hc�H�>��H�ITY_ENCRH3WH�SO_SECURH3H	�uH�YPTION_NH9G�$�����H��[]�H�_ENCRYPTH3WH�SECURITYH3H	�uH�ION_NETWH9G��
������DH�_ENCRYPTH3WH�SECURITYH3H	�uH�ION_TRANH9G�&	������{���f�H�_AUTHENTH3WH�SECURITYH3H	�u
�ICAT�S
������B���f�H�ITY_AUTHH3WH�SO_SECURH3H	�uH�ENTICATIH9G����������f�H�T_ERR_QUH3WH�SO_SELECH3H	�uf�EU��
H�ING_NAPIH3SH�SO_INCOMH3H	�uf�{_I�-��������fDH�ACING_RAH3WH�SO_MAX_PH3H	�uf�TE�U������[���f�H�XTENSIONH3WH�SO_BPF_EH3H	�u
�S�F������%���@H�H_FILTERH3GH�SO_ATTACH3H	��T1��E���fDH�SO_BINDTH9�UH�SO_TIMESH9��
H�SO_INCOMH9��H�MAX_PACIH9�j��������f.�H�SO_PEERSH9�
	H�SO_PASSSH9�H�ACCEPTCOH9��H�GET_FILTH9�c
������3���f.�H�SO_SNDBUH9�eH�SO_RCVBUH9�

H�SO_LINGEH9�WH�SO_DOMAIH9��H�REUSEADDH9��
H�REUSEPORH9��
H�DONTROUTH9�gH�BROADCASH9��H�KEEPALIVH9�
H�OOBINLINH9�R�	H�5}�H����������	H�5��H����������E.�'���fDH�SO_DEBUGH9��H�SO_ERRORH9��	H�SO_NOFCSH9�gH�NO_CHECKH9��H�PRIORITYH9��H�PASSCREDH9�
H�PEERCREDH9�R
H�RCVLOWATH9��
H�SNDLOWATH9�H�RCVTIMEOH9�bH�SNDTIMEOH9��H�PEERNAMEH9��H�PROTOCOLH9��H�RXQ_OVFLH9��H�PEEK_OFFH9���*1����fD�?SO_T��;SO_M���;PEER��	�;PASS���������fDH�SO_SNDBUH9��H�SO_RCVBUH9��H�SO_TIMESH9�	H�SO_WIFI_H9�
H�SO_LOCK_H9��
H�BPF_EXTEH9�=������5���@H�SO_ACCEPH9�EH�SO_GET_FH9��H�ATTACH_FH9�dH�DETACH_FH9��	���������f�H�SO_REUSEH9�}H�SO_REUSEH9�BH�SO_DONTRH9�iH�SO_BROADH9��	H�SO_KEEPAH9��
H�SO_OOBINH9��
H�SO_TIMESH9�/H�SO_BUSY_H9�eH�BINDTODEH9��H�TIMESTAMH9���H�5�H����������E1��f.�H�SO_NO_CHH9��H�SO_PRIORH9�*H�SO_PASSCH9��H�SO_PEERCH9�	H�SO_RCVLOH9�a	H�SO_SNDLOH9��	H�SO_RCVTIH9��	H�SO_SNDTIH9�Q
H�SO_PEERNH9��
H�SO_PROTOH9�7�H�5�H��������K�H�5�H��������#�H�5��H��������k�H�5y�H���j�����C�H�5��H���N�����K�H�5��H���2�����#�H�5R�H��������/�E,�[���f��?SNDB��;RCVB���;LING���;DOMA�����������fD�?TYPE�T�?MARK���E$1���f.�H�ITY_ENCRH3WH�SO_SECURH3H	�u!H�RANSPORTH3WH�YPTION_TH3GH	�tg��������D�?DEBU���;ERRO���;NOFC��������k���f�������_����SPOR�����T������E1��3����{NG_R�����f�{AT�}����{E�s����E/1������{NSIO�����f�{NS������E01�����f�f�YP����E����f.��E1����f�H�SO_DETACH3H	��j1��E���@�ODEV�����f�IC������E�����1���Q����f�UF��1���0����f�EC�G����
K�=���1������D�FFOR�V���f�CE�J���1�� ���f��TCON������N�����1����@�F�����1�����G����1����f��1��l�f�EC���1���P���ADDR�v���1���/�fDH�RR_QUEUEH3WH�SELECT_EH3H	�tAH�_NAPI_IDH3O�����H�INCOMINGH3H	�����E81����E����E-1���f�{UF�l���1��E��fDf�{IT�����{
Y�����1��E�u�@�{PORT�����1��E�V�Df�{AR�l����{K�b����5���D�{TAMP�a���f�{IN�U����{G�K���1��E%����{F���1��E�����{R�N���1��E����{FFOR�!���f�{CE����1��E!��f��{ILTE�q����{R�g����E1��d��1��W�fDf�{EC���1��E"�7�f�OR�f�K�\��E1���f�ON���E1���f�IO���N����ځETWO���f�RK����f�{NN�j�1��E��{S�-���1��E+��{ILTE������{R���������f�{ER�7���1��E
�^�{TAMP����f�{NS����1��E#�7�{OUTE�����1��E��f�{RE�`����{
D�V���1��E��f�{SE�����{C����1��E���{ING_��f�{CP��{U��1��E1��f.��{R���1��E
���+1��t�{D������f�{IN�0���1��E'�K�{STAT����f�{US����1��E)�$�{ILTE�2����{R�(���1��E���{N��1��E'����1����f�{ER���1��E��f�{SE���{C���1��E"���{CAST����1��E��f�{RE�����{
D����1��E�]��{FILT���f�{ER���1��E,�6��1��)�f�{WA������{
T�����1��E���{R�1�1��E����{LIVE�f���1��E	����{T��1��E���{LINE�F���1��E
���1���f�{WA�����{
T����1��E�n�f�{ME������{
O��1��E�J��1��=��{E���1��E�%��{TAMP���1��E�
��������f�{ME������{
O�����1��E����{POLL���1��E.���1����{T��1��E��f�{AM�R����{
E�H���1��E�x���À{E���1��E	�\��1��O��{VICE��1��E�4��{PING��1��E%���{E���1��E
���1����f�{CO���{
L���1��E&����E*����E(���E���1����1����(1����&1��x��E!�l��E �`��E)�T��E#�H����@����8����0����(�ff.�@��H��H����H�
��Hc�H�>��DH�CAST_LOOH3OH�IP_MULTIH3H	��DH�EMBERSHIH3OH�IP_ADD_MH3H	�u
�P�H�CK_SOURCH3OH�IP_UNBLOH3H	�u
�E��������f.�H�LT_MULTIH3OH�IP_DEFAUH3H	���H�SOURCE_MH3OH�IP_DROP_H3H	�u�H�EMBERSHIH9Gu��Pu��(1��Df�?TO�]f�?TT�
f�?MT�g����U�]����1��@�?IP_T���?IP_T��	�?IP_M�t
�?MINT� ���f�TL����1����?OPTI���?HDRI���?RETO�
�?RECV�(�?PKTI���?RECV�P�?RECV�q�?PASS�����f�SE������C�����1���f�H�RECVOPTSH9�H�FREEBINDH9��H�MSFILTERH9�G����)1��fDH�IP_MINTTH9�%����L��������fDH�IP_OPTIOH9�}H�IP_HDRINH9�JH�IP_RETOPH9��H�IP_RECVTH9��	H�IP_PKTINH9�R
H�IP_RECVEH9��
H�IP_RECVTH9�3H�IP_PASSSH9�MH�PKTOPTIOH9�e���f�NS�Y���1��	�H�IP_RECVOH9��H�IP_FREEBH9�BH�IP_MSFILH9��H�RECVRETOH9��	H�XFRM_POLH9��	H�TRANSPARH9�
H�PMTUDISCH9����f�_D������
O�����1���@H�MULTICASH9��H�ROUTER_AH9��H�MTU_DISCH9�?H�IPSEC_POH9�jH�BLOCK_SOH9�I����URCE�<���1��&�H�IP_PKTOPH9�eH�MULTICASH9��H�PMTUDISCH9��H�PMTUDISCH9����_WAN�����T����1���@H�IP_RECVRH9��H�IP_XFRM_H9��H�IP_TRANSH9�H�IP_PMTUDH9��H�MULTICASH9�tH�ADD_MEMBH9�%H�UNBLOCK_H9�;����SOUR�.���f�CE�"���1��%�f�H�MEMBERSHH3OH�IP_DROP_H3H	���H�EMBERSHIH3OH�IP_MAX_MH3H	�����f�PS�������H�CAST_TTLH3OH�IP_MULTIH3H	��CH�ISC_DONTH3GH�IP_PMTUDH3H	���1����H�IP_MULTIH9�5H�IP_ROUTEH9��H�IP_MTU_DH9�H�IP_IPSECH9�0H�IP_BLOCKH9��H�DROP_MEMH9�GH�MAX_MEMBH9�����ERSH����f�IP������S������1���H�MULTICASH3OH�DEFAULT_H3H	���H�RCE_MEMBH3OH�DROP_SOUH3H	��X����ERSH�K���f�IP�?������f.�H�MULTICASH3OH�DEFAULT_H3H	��lH�CE_MEMBEH3OH�ADD_SOURH3H	�����RSHI�����P�����'1���H�LT_MULTIH3OH�IP_DEFAUH3H	���H�OURCE_MEH3OH�IP_ADD_SH3H	��x���H�MBERSHIPH9G�d����f��T_TT�I����L�?���1��!�H�CAST_LOOH9G�`����P�V����1��f��P�����1��"�Df�IP�����$1���T_LO�W���f�OP�K����DH�CAST_TTLH9G�����f.��T_TT������L�}����b���@f�NS�w���1����1���f�ON�P����S�F�����f�PT������
S���1���S����������CAST�����f�_I������F�����1�� �@�ETOP�&���f�TS����1���fD�TION������S������C���@�T_IF������f�f�OS�0����M�����R_AL�)���f�ER�����T����1���@f�NC�<����L�2���1���f��POLI�i���f�CY�]���1���fDf�IN������
D�����1���f�H�ISC_WANTH3GH�Ƹ����H	������f�CL������m�����LERT������1���fD�1����L����1��Df�TL������f.��OVER�����1��
�f.��_DON�����T�������@f�TS�
����1��f�PT����S�������Df�TU������J�����ISCO�t���f�VE�h����R�^����U�����PARE����f�NT����1���fDf�TE�%����
R����1��)ÁERSH����f�IP����1��#�f�TL�7���1��ÁLICY�����1��Á_POL����f�IC������Y��������f�TT���L���띁ISC_����f�DO��������f�PT�j����
S�`����{���f�FO�����1��Á_SOU�D���f�RC�8����E�.������f�f�NF�H�O�>��f�IC�����
Y��������T_LO����f�OP�s�������f�EN����
T�����]���f�RR�
���1��ÁBERS�����f�HI������P���������f�ER���R����f�OS���1��
�f�TO���S�y���f�EC�����f.���H��H��wOH�
��Hc�H�>��H�IPV6_JOIH9�-H�IPV6_RECH9u�VTCLuf�ASu
�S��������DH�TICAST_HH3OH�IPV6_MULH3H	���f�OP���S�~1���D�?RTHDu��Ru�1��9�f��?V6ON���?TCLA�u���f�SS�i����
��?DSTO�|�?HOPO�x�?NEXT�l�?PATH���?PKTI�0�?RECV����f�ER�	����R�����1���f�H�CHECKSUMH9��H�DONTFRAGH9��H�HOPLIMITH9������41��fDH�RECVRTHDH9������R������?fDH�IPV6_RTHH9�UH�JOIN_GROH9�
H�RECVTCLAH9�D���f�SS�8���1��B�f�H�IPV6_V6OH9��H�IPV6_TCLH9��H�LEAVE_GRH9��H�RECVDSTOH9��H�RECVHOPOH9��H�RECVPKTIH9��H�RECVPATHH9�����f�MT������
U�����1��<�@H�IPV6_RECH9�H�MULTICASH9��H�MULTICASH9�L����T_LO�?���f�OP�3���1���DH�IPV6_DSTH9�}H�IPV6_HOPH9��H�IPV6_NEXH9�?H�IPV6_PATH9�wH�IPV6_PKTH9��H�IPV6_RECH9�H�MTU_DISCH9� H�MULTICASH9�H�UNICAST_H9�BH�RECVHOPLH9��H�RTHDRDSTH9��SH�5��H�Ӻ���������[�f�H�VE_GROUPH3OH�IPV6_LEAH3H	��H�VDSTOPTSH3GH�IPV6_RECH3H	���1��:��H�IPV6_CHEH9�EH�IPV6_DONH9�"H�IPV6_HOPH9������LIMI������T�����1��4��H�_DISCOVEH3OH�IPV6_MTUH3H	�uX�RuR1���f�H�TICAST_LH3OH�IPV6_MULH3H	�����f�OO�
����P���������H�TICAST_IH3OH�IPV6_MULH3H	���H�CAST_HOPH3OH�IPV6_UNIH3H	�u
�S��H�VHOPLIMIH3OH�IPV6_RECH3H	�u
�T��H�DRDSTOPTH3OH�IPV6_RTHH3H	�u
�S��H�DR_TYPE_H3OH�IPV6_RTHH3H	��7����0�-���1����f�OU�����
P����1��Ð�F����1���D�1���f�PT�x����S�n���1��;�f�f�LY� ���1����OPTS�v�����f��CKSU������M�����1��ÁVRTH����f�DR����1��8�fDf�NL�����
Y�����y���Df�DR������e�����N_GR����f�OU������P�����1���@f�PT�|����S�r���1��6�T_HO�A���f�PS�5�������f��TFRA�����G����1��>�f�AS�Z����
S�P���1��CÐf�UP����b�����OPTS�)����l���fDH�VHOPOPTSH3GH	�u1��5�@�>1���H�VPKTINFOH3GH	�u<1��1�@f�HO������P�~���1��	Ð�THOP�������H�VPATHMTUH3w�����H	����f�MT�H����U�>���1��=ÁHMTU�|�����f�PT�f����
S�\����S����HOPS�����1���f�PT�H����
S�>�������INFO�4���1��2�f�NF�����O������߁IMIT�e���1��3�f�NF������
O�������VERR�������OPTS�5���1��7ÁOVER���������T_IF�����i�����[�f.���H��H��w<H�
��Hc�H�>��H�TCP_THINH9u�_DUPuf�ACu
�K��������H�IE_TRANSH3OH�TCP_COOKH3H	�uځACTIu�f�ONuɀSu��1��H�_LINEAR_H3OH�TCP_THINH3H	�u�H�TIMEOUTSH9Gu��1����?CORK���?INFO�b����1����?MAXS���?MD5S�(�?SYNC���?REPA�"���f�IR����1����?NODE���?KEEP�h�?LING���f�ER�����2����1���DH�TCP_CORKH9��H�TCP_INFOH9�:���H�KEEPIDLEH9��H�QUICKACKH9�'H�FASTOPENH9�c����1��H�TCP_MAXSH9�mH�TCP_MD5SH9�
H�TCP_SYNCH9��H�TCP_REPAH9��H�CONGESTIH9�����f�ON���1��
�@H�TCP_NODEH9��H�TCP_KEEPH9�H�TCP_LINGH9�?H�THIN_DUPH9�����f�AC������
K�����1���DH�KEEPINTVH9�-H�QUEUE_SEH9�H�TIMESTAMH9�9����P�/���1���@H�TCP_KEEPH9��H�TCP_QUICH9�H�TCP_FASTH9�/H�DEFER_ACH9�H�WINDOW_CH9��H�REPAIR_QH9��H�USER_TIMH9������EOUT������1��DH�TCP_KEEPH9��H�TCP_QUEUH9��H�TCP_TIMEH9�I����STAM�<����P�2������H�TCP_CONGH9��H�REPAIR_OH9�����PTIO�����f�NS����@H�R_ACCEPTH3OH�TCP_DEFEH3H	���H�OW_CLAMPH3OH�TCP_WINDH3H	��0�
1���H�RANSACTIH3OH�COOKIE_TH3H	��f���f�ON�Z����S�P�������H�EAR_TIMEH3OH�THIN_LINH3H	��&����OUTS�������f.�H�IR_OPTIOH3OH�TCP_REPAH3H	����f�NS�����1�ÁCEPT����	1�Ð�1����INTV�.����L�$���1��ÁIDLE�n���1���f.��ESTI�F���f�ON�:����]���f�f�EG�����1����L�����@f�LA�����Y����1���f�f�LA�����
Y�������f�EG������f��E_SE�a����Q�W���1���f�CN����
T����1��Ðf�CN������T��������H�IR_QUEUEH3OH�TCP_REPAH3H	�uf�1����Q����x����f�IG���1���f�IG������f.��KACK��1���H�_TIMEOUTH3w�����H�TCP_USERH3H	��+���ÁOPEN����1����1�Ðf�NT�m���1���f�NT�H�����f.�f�ER������
2����������1��f�IR�,��������LAMP�e�������UEUE�f����������H��tf~$H��t>H��	uH�SHUT_RDWH9ty������H��u�f�?RDtYf�?WRu��1���?SHUTt0�?SHUTu�f�_Wu��Ru��ԁ?RDWRu��1���f�_RuȀDu��1�Ð�Ru������H��H��
wRH�
�Hc�H�>��H�TIMESTAMH9��H�CREDENTIH9�2H�WIFI_STAH9��������f.�H�SCM_TIMEH9u�STAMu؀Pu���DH�SCM_TIMEH9�uH�SCM_CREDH9��H�SCM_WIFIH9u��_STAu�f�TUu��S�x����)1����?RIGH�\���f�TS�P����H�SCM_TIMEH3H�STAMPINGH3wH�������H	��!����%1��H�TIMESTAMH9������P���1��f.�H�SCM_RIGHH9����f�TS������1���H�TIMESTAMH9������PING������o���f�TU�|����
S�r������Df�PN�/����
S�%����#1��f��STAM�~���f�PN�r����S�h������ENTI�i���f�AL�]����S�S����1��@f�AL�����
S���������H��tH��
uH�SOL_SOCKH9t)�������?SOCKu�f�ETu��1���f�ETu���ff.���H��t&H��u(H�UDP_CORKH9u�1����?CORKt�����f�ATI��UH��SH��H��dH�%(H�D$1�@����H��uX1��)���H����H�XH� tH�XH�T$H�pH��Ճ��tz�D$H�L$dH3%(uaH��[]A\�fD@��t"H���ʌ��H��u���t/H��跛���DH���H��u�H��茔���x����H��訌����a���H��6"H��L��H�5-�H�81�胉����H��wnH�
�Hc�H�>��Df�?TC�f�?EG��f�?PU�/f�?UD�Tf�?ID�yf�?ES��f�?RAu�W�xD������f�H�IPPROTO_H9u�ICMPu�f�V6u���H�IPPROTO_H9��H�IPPROTO_H9�BH�IPPROTO_H9u��ROUTu�f�INu��G�������f�?IP��f�?TP�"f�?AH�W����31��fD�?ICMP�$�?IGMP���?IPV6���?NONE�����;1����?ICMP�����f�V6��1��:���?DSTO�L�?HOPO���?ROUT�����f�IN������G�����1��+�DH�FRAGMENTH9������,1��@H�IPPROTO_H9��H�IPPROTO_H9��H�IPPROTO_H9�?���f�AH�3���1��3�f�H�IPPROTO_H9�mH�IPPROTO_H9�JH�IPPROTO_H9��H�IPPROTO_H9�H�IPPROTO_H9�4H�IPPROTO_H9�LH�IPPROTO_H9�����f�RA������
W�����1����@H�IPPROTO_H9��H�IPPROTO_H9��H�IPPROTO_H9�H�IPPROTO_H9�4����NONE�'���1��;�fDH�IPPROTO_H3H�FRAGMENTH3wH�������H	���1��,�f�PT�����S�����1��f�f�EG������
P�����1���IGMP�1���1���f.�f�TP����1����P�����@�1����1����P����1���D�1����DSTO�>���f�PT�2����S�(���1��<�@f�IP�g��������ICMP�F���1���f�f�TC������
P�}����g���Df�PT������S��������HOPO�����f�PT������S�����1���@�)1����IPV6����1��)�f.��P����1���Df�PU������
P����ڀP�����1���Df�UD�����
P�����ڀP�}���1���f�ID������
P������߀P�]���1��2�f�ES������
P�������f.���H��Hc�H�=�1"dH�%(H�D$1�H���V���H�$��u1�H�L$dH3%(H��uH���迆��ff.�@��H��Hc�H�=&1"dH�%(H�D$1�H�����H�$��u1�H�L$dH3%(H��uH����_���ff.�@��H��Hc�H�=�0"dH�%(H�D$1�H��薐��H�$��u1�H�L$dH3%(H��uH������ff.�@��H��Hc�H�=V0"dH�%(H�D$1�H���6���H�$��u1�H�L$dH3%(H��uH���蟅��ff.�@��H��Hc�H�=�/"dH�%(H�D$1�H���֏��H�$��u1�H�L$dH3%(H��uH����?���ff.�@��H��Hc�H�=�/"dH�%(H�D$1�H���v���H�$��u1�H�L$dH3%(H��uH����߄��ff.�@��H��Hc�H�=/"dH�%(H�D$1�H������H�$��u1�H�L$dH3%(H��uH�������ff.�@��H��Hc�H�=�."dH�%(H�D$1�H��趎��H�$��u1�H�L$dH3%(H��uH�������ff.�@��H��Hc�H�=N."dH�%(H�D$1�H���V���H�$��u1�H�L$dH3%(H��uH���迃��ff.�@��H��Hc�H�=�-"dH�%(H�D$1�H�����H�$��u1�H�L$dH3%(H��uH����_���ff.�@��H��Hc�H�=~-"dH�%(H�D$1�H��薍��H�$��u1�H�L$dH3%(H��uH������ff.�@��H��Hc�H�=-"dH�%(H�D$1�H���6���H�$��u1�H�L$dH3%(H��uH���蟂��ff.�@��H��Hc�H�=�,"dH�%(H�D$1�H���֌��H�$��u1�H�L$dH3%(H��uH����?���ff.�@��H�5+"H������f���H�5�*"H�����f�����H��H�����uH�5;*"H����H�5�+"H���y�f�����H��H�Ѓ�u��)w8H�
����Hc�H�>��D��uH�5�*"H�5�H��H���!�H�Ǩt�t���H����胀��H���fDH�5a*"H��H��H�����fDH�5I)"H��H��H����fDH�5�)"H�ʪH��H����fDH�5)"H���H��H���~�ff.�����H��H�Ѓ�u��)w8H�
i���Hc�H�>��D��uH�5�("H���H��H���!�H�Ǩt�t���H�������H���fDH�5a)"H�~�H��H�����fDH�5I("H���H��H����fDH�5�("H�[�H��H����fDH�5("H��H��H���~�ff.���H�5%)"H�G��Y�f���SH�("H�5@�H�;�E���H�;�H�5s�H��)"�*���H�=�)"�H�5T�����H�;�H�55����H�=�)"�H�5����H�;�H�5ԩ�Ҍ��H�=�)"�H�5��躌��H�;�	H�5��覌��H�=g)"�	H�5��莌��H�;�H�5��z���H�=;)"�H�5מ�b���H�;�H�5���N���H�=)"�H�5���6���H�;�H�5���"���H�=�("�H�5q��
���H�;�H�5P����H�=�("�H�58��ދ��H�;�H�5{��ʋ��H�=�("�H�5c�貋��H�;�H�5Y�螋��H�=_("�H�5A�膋��H�;�H�5Ü�r���H�=3("�H�5���Z���H�;�H�5���F���H�=("�H�5���.���H�;�H�5.�����H�=�'"�H�5�����H�;�H�5����H�=�'"�H�5��֊��H�;�H�5#��Š��H�=�'"�H�5�誊��H�;�H�5��薊��H�=W'"�H�5��~���H�;�H�5ۛ�j���H�=+'"�H�5Û�R���H�;�H�5���>���H�=�&"�H�5���&���H�;�	H�5ך����H�=�&"�	H�5�����H�;�	H�5�����H�=�&"�	H�5���Ή��H�;�H�5��躉��H�={&"�H�5��袉��H�;�H�5��莉��H�=O&"�H�5���v���H�;�H�5���b���H�=#&"�H�5p��J���H�;�H�5e��6���H�=�%"�H�5M�����H�;�-H�5ݙ�
���H�=�%"�-H�5ř��H�;�-H�5���ވ��H�=�%"�-H�5���ƈ��H�;�H�5w�貈��H�=s%"�H�5_�蚈��H�;�H�5U�膈��H�=G%"�H�5=��n���H�;�!H�5���Z���H�=%"�!H�5z��B���H�;�!H�5o��.���H�=�$"�!H�5W�����H�;�EH�5������H�=�$"�EH�5k����H�;�EH�5_��և��H�=�$"�EH�5G�辇��H�;�[H�5��誇��H�=k$"�[H�5s�蒇��H�;�[H�5f��~���H�=?$"�[H�5N��f���H�;�#H�5+��R���H�=$"�#H�5��:���H�;�#H�5	��&���H�=�#"�#H�5�����H�;�H�5����H�=�#"�H�5ї���H�;�H�5ė�Ά��H�=�#"�H�5��趆��H�;�!H�5��袆��H�=c#"�!H�5w�芆��H�;�!H�5n��v���H�=7#"�!H�5V��^���H�;�+H�5G��J���H�=#"�+H�5/��2���H�;�+H�5"�����H�=�""�+H�5
�����H�;�1H�5<���H�=�""�1H�5$��څ��H�;�1H�5��ƅ��H�=�""�1H�5�讅��H�;�5H�5��蚅��H�=[""�5H�5��肅��H�;�5H�5���n���H�=/""�5H�5h��V���H�;�7H�5���B���H�=""�7H�5��*���H�;�7H�5Օ����H�=�!"�7H�5�����H�;�9H�5{����H�=�!"�9H�5c��҄��H�;�9H�5W�辄��H�=!"�9H�5?�覄��H�;�;H�5��蒄��H�=S!"�;H�5���z���H�;�;H�5���f���H�='!"�;H�5n��N���H�;�=H�5ە�:���H�=� "�=H�5Õ�"���H�;�=H�5������H�=� "�=H�5�����H�;�?H�5�����H�=� "�?H�5��ʃ��H�;�?H�5�趃��H�=w "�?H�5ȕ螃��H�;�MH�5��芃��H�=K "�MH�5���r���H�;�MH�5���^���H�= "�MH�5t��F���H�;�QH�5���2���H�=�"�QH�5v�����H�;�QH�5k�����H�=�"�QH�5S����H�;�SH�5��ڂ��H�=�"�SH�5���‚��H�;�SH�5�讂��H�=o"�SH�5ғ薂��H�;�YH�5œ肂��H�=C"�YH�5���j���H�;�YH�5���V���H�="�YH�5���>���H�;�H�5���*���H�=�"�H�5������H�;�H�5t����H�=�"�H�5\����H�;�	H�5Q��ҁ��H�=�"�	H�59�躁��H�;�H�53�要��H�=g"�H�5�莁��H�;�AH�5��z���H�=;"�AH�5���b���H�;�H�5��N���H�="�H�5՞�6���H�;�H�5̞�"���H�=�"�H�5���
���H�;��H�5�����H�=�"��H�5���ހ��H�;�!H�5���ʀ��H�=�"�!H�5u�貀��H�;�H�5k�螀��H�=_"�H�5S�膀��H�;�H�5G��r���H�=3"�H�5/��Z���H�;�H�5#��F���H�="�H�5��.���H�;� H�5�����H�=�"� H�5�����H�;�@H�5ߝ����H�=�"�@H�5ǝ����H�;��H�5������H�=�"��H�5�����H�;�H�5�����H�=W"�H�5���~��H�;�@H�5~��j��H�=+"�@H�5f��R��H�;�H�5‘�>��H�=�"�H�5���&��H�;�H�53����H�=�"�H�5��~��H�;�
H�5���~��H�=�"�
H�5����~��H�;�#H�5��~��H�={"�#H�5Ҝ�~��H�;�H�5��~��H�=O"�H�5��v~��H�;�H�5f��b~��H�=#"�H�5N��J~��H�;�H�5G��6~��H�=�"�H�5/��~��H�;�
H�5���
~��H�=�"�
H�5����}��H�;�H�5����}��H�=�"�H�5����}��H�;�H�5z��}��H�=s"�H�5b��}��H�;�#H�5Z��}��H�=G"�#H�5B��n}��H�;�-H�5:��Z}��H�="�-H�5"��B}��H�;�;H�5ȏ�.}��H�=�"�;H�5���}��H�;�gH�5���}��H�=�"�gH�5����|��H�;�yH�5���|��H�=�"�yH�5��|��H�;�eH�5���|��H�=k"�eH�5~��|��H�;�YH�5���~|��H�=?"�YH�5ݏ�f|��H�;�H�5���R|��H�="�H�5���:|��H�;�uH�5^��&|��H�=�"�uH�5F��|��H�;�SH�5��{��H�=�"�SH�5���{��H�;�wH�5����{��H�=�"�wH�5��{��H�;�WH�5	��{��H�=c"�WH�5��{��H�;��H�5n��v{��H�=7"��H�5V��^{��H�;�H�5���J{��H�="�H�5j��2{��H�;�'H�5f��{��H�=�"�'H�5N��{��H�;�H�5N���z��H�=�"�H�56���z��H�;H�52�H������z��H�=�"H�����H�5��z��H�;��H�5��z��H�=Q"��H�5��xz��H�;H�5�H���_z��H�= "H��H�5ʘ�Bz��H�;H�5ϘH���)z��H�=�"H��H�5���z��H�;H�5��H�����y��H�=�"H���H�5����y��H�;H�5��H������y��H�=~"H�����H�5i��y��H�;�	H�5ԏ�y��H�=M"�	H�5���ty��H�;�H�5���`y��H�=!"�H�5���Hy��H�;�H�5]��4y��H�=�"�H�5E��y��H�;�H�58��y��H�=�"�H�5 ���x��H�;�
H�5|���x��H�=�"�
H�5d���x��H�;�H�5���x��H�=q"�H�5j��x��H�;�H�5��x��H�=E"�H�5ʎ�lx��H�;�+H�5���Xx��H�="�+H�5~��@x��H�;�H�5���,x��H�=�"�H�5}��x��H�;�AH�5��x��H�=�"�AH�5����w��H�;�CH�52���w��H�=�"�CH�5��w��H�;�EH�59��w��H�=i"�EH�5!��w��H�;�GH�5��|w��H�=="�GH�5��dw��H�;�IH�5��Pw��H�="�IH�5���8w��H�;�H�5��$w��H�=�"�H�5���w��H�;�H�5��v��H�=�"�H�5����v��H�;�)H�5����v��H�=�"�)H�5���v��H�;�H�5���v��H�=a"�H�5���v��H�;�H�5��tv��H�=5"�H�5Ќ�\v��H�;�H�5��Hv��H�=	"�H�5��0v��H�;�H�5J��v��H�=�"�H�52��v��H�;�H�5o���u��H�=�"�H�5W���u��H�;�H�5N���u��H�=�"�H�56��u��H�;�H�5ϋ�u��H�=Y"�H�5���u��H�;�H�5��lu��H�=-"�H�5��Tu��H�;�!H�5~��@u��H�="�!H�5f��(u��H�;�#H�5���u��H�=�"�#H�5݋�t��H�;�%H�5}���t��H�=�"�%H�5e���t��H�;�'H�5���t��H�=}"�'H�5���t��H�;�H�5���t��H�=Q"�H�5��xt��H�;�H�5��dt��H�=%"�H�5̋�Lt��H�;�H�57��8t��H�=�"�H�5�� t��H�;�KH�5���t��H�=�"�KH�5����s��H�;�MH�5.���s��H�=�"�MH�5���s��H�;�OH�5���s��H�=u"�OH�5���s��H�;�QH�5���s��H�=I"�QH�5���ps��H�;�SH�5��\s��H�="�SH�5���Ds��H�;�UH�5��0s��H�=�"�UH�5��s��H�;�WH�5��s��H�=�"�WH�5ґ��r��H�;�YH�5ё��r��H�=�"�YH�5���r��H�;�[H�5���r��H�=m"�[H�5���r��H�;�]H�5���r��H�=A"�]H�5���hr��H�;�_H�5���Tr��H�="�_H�5t��<r��H�;�aH�5y��(r��H�=�"�aH�5a��r��H�;�H�5\��q��H�=�"�H�5D���q��H�;�H�5>���q��H�=�"�H�5&��q��H�;�H�5 ��q��H�=e"�H�5��q��H�;�H�5ޅ�xq��H�=9"�H�5ƅ�`q��H�;�H�5���Lq��H�=
"�H�5���4q��H�;�H�5��� q��H�=�
"�H�5���q��H�;�	H�5y���p��H�=�
"�	H�5a���p��H�;�H�5H���p��H�=�
"�H�50��p��H�;�
H�5)��p��H�=]
"�
H�5��p��H�;�H�5��pp��H�=1
"�H�5��Xp��H�;�H�5��Dp��H�=
"�H�5΃�,p��H�;�AH�5��p��H�=�"�AH�5��p��H�;�CH�5���o��H�=�"�CH�5̈́��o��H�;�H�5Z��o��H�=�"�H�5B��o��H�;�H�5;��o��H�=U"�H�5#��|o��H�;�H�5>��ho��H�=)"�H�5&��Po��H�;�H�5��<o��H�=�"�H�5��$o��H�;�H�5���o��H�=�"�H�5���n��H�;�!H�5҂��n��H�=�"�!H�5����n��H�;�#H�5���n��H�=y"�#H�5���n��H�;�%H�5���n��H�=M"�%H�5z��tn��H�;�'H�5r��`n��H�=!"�'H�5Z��Hn��H�;�)H�5R��4n��H�=�
"�)H�5:��n��H�;�+H�52��n��H�=�
"�+H�5���m��H�;�=H�5����m��H�=�
"�=H�5����m��H�;�-H�5���m��H�=q
"�-H�5l��m��H�;�/H�5Y��m��H�=E
"�/H�5A��lm��H�;�1H�5
��Xm��H�=
"�1H�5���@m��H�;�3H�5a��,m��H�=�	"�3H�5I��m��H�;�5H�5e��m��H�=�	"�5H�5M���l��H�;�7H�5J���l��H�=�	"�7H�52��l��H�;�5H�5���l��H�=i	"�5H�5l��l��H�;�9H�5���|l��H�==	"�9H�5���dl��H�;�;H�5��Pl��H�=	"�;H�5��8l��H�;�GH�5,��$l��H�=�"�GH�5��l��H�;�?H�5��k��H�=�"�?H�5���k��H�;�EH�5���k��H�=�"�EH�5�k��H�;�IH�50�k��H�=a"�IH�5�k��H�;�KH�5���tk��H�=5"�KH�5���\k��H�;�MH�5��Hk��H�=	"�MH�5r�0k��H�;�OH�5�~�k��H�=�"�OH�5�~�k��H�;�QH�5>��j��H�=�"�QH�5&��j��H�;�SH�5���j��H�=�"�SH�5��j��H�]"�UH�5�~H�;�j��H�=R"�UH�5�~�yj��H�;�WH�5��ej��H�=&"�WH�5ۉ�Mj��H�;�YH�5_�9j��H�=�"�YH�5G�!j��H�;�[H�5��
j��H�=�"�[H�5��i��H�;�]H�5�~��i��H�=�"�]H�5�~��i��H�;�_H�5N�i��H�=v"�_H�56�i��H�;�aH�5�i��H�=J"�aH�5�~�qi��H�;�cH�5�~�]i��H�="�cH�5�~�Ei��H�;�qH�5�~�1i��H�=�"�qH�5�~�i��H�;�H�57��i��H�=�"�H�5���h��H�;�H�5߂��h��H�=�"�H�5ǂ�h��H�;�H�5D��h��H�=n"�H�5,��h��H�;�H�5G��h��H�=B"�H�5/��ih��H�;�H�5���Uh��H�="�H�5݇�=h��H�;�
H�5g��)h��H�=�"�
H�5O��h��H�;�	H�5S��g��H�=�"�	H�5;���g��H�;�H�5N���g��H�=�"�H�56��g��H�;�H�5��g��H�=f"�H�5ׁ�g��H�;�H�5���yg��H�=:"�H�5r��ag��H�;�H�5���Mg��H�="�H�5���5g��H�;�H�5=��!g��H�=�"�H�5%��	g��H�;�H�5́�f��H�=�"�H�5����f��H�;�/H�59���f��H�=�"�/H�5!��f��H�;�H�5D��f��H�=^"�H�5,��f��H�;�H�5���qf��H�=2"�H�5v��Yf��H�;�+H�5Ѐ�Ef��H�="�+H�5���-f��H�;�'H�5@��f��H�=�"�'H�5(��f��H�;�-H�5����e��H�=�"�-H�5߀��e��H�;�)H�5���e��H�=�"�)H�5���e��H�;�#H�5K��e��H�=V"�#H�53��}e��H�;�!H�5���ie��H�=*"�!H�5���Qe��H�;�1H�5��=e��H�=�"�1H�5��%e��H�;�%H�5
��e��H�=�"�%H�5��d��H�;�H�5����d��H�=�"�H�5v���d��H�;H����H�5i��d��H�=x"H����H�5O��d��H�;H�����H�5H��d��H�=H"H�����H�5.��md��H�;H�����H�5"��Wd��H�="H�����H�5��=d��H�;H�����H�5���'d��H�=�"H�����H�5��
d��H�;H�����H�5؃�c��H�=�"H�����H�5����c��H�;H����H�5����c��H�=�"H����H�5���c��H�;H�����H�5���c��H�=X"H�����H�5t��}c��H�;H�����H�5i��gc��H�=("H�����H�5O��Mc��H�;H����H�5D��7c��H�=��!H����H�5*��c��H�;H���H�5!��c��H�=�!H���H�5���b��H�;H���H�5����b��H�=��!H���H�5��b��H�;H����H�5ڂ�b��H�=h�!H����H�5���b��H�;�H�5���yb��H�=:�!�H�5���ab��H�;�H�5���Mb��H�=�!�H�5~��5b��H�;�	H�5w��!b��H�=�!�	H�5_��	b��H�;�H�5Z��a��H�=��!�H�5B���a��H�;�!H�5=���a��H�=��!�!H�5%��a��H�;�AH�5��a��H�=^�!�AH�5��a��H�;�H�5���qa��H�=2�!�H�5��Ya��H�;�H�5ځ�Ea��H�=�!�H�5�-a��H�;�AH�5���a��H�=�!�AH�5���a��H�;�	H�5����`��H�=��!�	H�5����`��H�;�H�5v��`��H�=��!�H�5^��`��H�;�H�5Y��`��H�=V�!�H�5A��}`��H�;�H�59��i`��H�=*�!�H�5!��Q`��H�;�!H�5��=`��H�=��!�!H�5��%`��H�;�H�5_{�`��H�=�!�H�5G{�_��H�;�H�5;{��_��H�=��!�H�5#{��_��H�;�H�5{�_��H�=z�!�H�5�z�_��H�;�)H�5�x�_��H�=N�!�)H�5rx�u_��H�;�+H�5~x�a_��H�="�!�+H�5fx�I_��H�;�/H�5�x�5_��H�=��!�/H�5�x�_��H�;�%H�5�x�	_��H�=�!�%H�5�x��^��H�;�#H�5ax��^��H�=��!�#H�5Ix��^��H�;�'H�5�x�^��H�=r�!�'H�5�x�^��H�;�!H�5x�^��H�=F�!�!H�5x�m^��H�;�5H�5�v�Y^��H�=�!�5H�5�v�A^��H�;�H�5�v�-^��H�=�!�H�5�v�^��H�;�}H�5�v�^��H�=�!�}H�5�v��]��H�;�wH�5Kv��]��H�=��!�wH�53v�]��H�;�iH�5�v�]��H�=j�!�iH�5qv�]��H�;�mH�5v�}]��H�=>�!�mH�5�u�e]��H�;�H�5�u�Q]��H�=�!�H�5�u�9]��H�;�{H�5�u�%]��H�=�!�{H�5�u�
]��H�;�eH�5�u�\��H�=��!�eH�5�u��\��H�;�uH�5�u��\��H�=��!�uH�5�u�\��H�;�3H�5Xu�\��H�=b�!�3H�5@u�\��H�;�gH�5v�u\��H�=6�!�gH�5v�]\��H�;�kH�5�u�I\��H�=
�!�kH�5pu�1\��H�;�cH�5mu�\��H�=�!�cH�5Uu�\��H�;�qH�5�t��[��H�=��!�qH�5�t��[��H�;��H�5�t��[��H�=��!��H�5�t�[��H�;�sH�5�s�[��H�=Z�!�sH�5�s�[��H�;�oH�5'u�m[��H�=.�!�oH�5u�U[��H�;�H�5
u�A[��H�=�!�H�5�t�)[��H�;�yH�5vt�[��H�=�!�yH�5^t�Z��H�;��H�5Ss��Z��H�=��!��H�5;s��Z��H�;�!H�5�{�Z��H�=~�!�!H�5�{�Z��H�;�]H�5�{�Z��H�=R�!�]H�5q{�yZ��H�;�!H�5n{�eZ��H�=&�!�!H�5V{�MZ��H�;�!H�5K{�9Z��H�=��!�!H�53{�!Z��H�;�H�5+{�
Z��H�=�!�H�5{�Y��H�;�H�5ܑ��Y��H�=��!�H�5đ��Y��H�;�;H�5u�Y��H�=v�!�;H�5u�Y��H�;�GH�5�t�Y��H�=J�!�GH�5�t�qY��H�;�KH�5u�]Y��H�=�!�KH�5�t�EY��H���!�H�5�tH�;�*Y��H�=�!�H�5�t�Y��H�;�SH�5�t�X��H�=��!�SH�5|t��X��H�;�H�5�y��X��H�=��!�H�5�y�X��H�;��H�5�y�X��H�=g�!��H�5�y�X��H�;�H�5�y�zX��H�=;�!�H�5�y�bX��H�;�	H�5�y�NX��H�=�!�	H�5�y�6X��H�;�H�5}y�"X��H�=��!�H�5ey�
X��H�;�H�5]y�W��H�=��!�H�5Ey��W��H�;�H�5>y��W��H�=��!�H�5&y�W��H�;� H�5y�W��H�=_�!� H�5y�W��H�;�H�5�x�rW��H�=3�!�H�5�x�ZW��H�;�AH�5�x�FW��H�=�!�AH�5�x�.W��H�;�!H�5�x�W��H�=��!�!H�5�x�W��H�;�@H�5�x��V��H�=��!�@H�5�x��V��H�;�H�5�x��V��H�=��!�H�5lx�V��H�;��H�5dx�V��H�=W�!��H�5Lx�~V��H�;�H�5Dx�jV��H�=+�!�H�5,x�RV��H�;�H�5"x�>V��H�=��!�H�5
x�&V���qI���H�=SgH���!�U��H�=��!�,H���B���H�=g��U��H�=��!�)H����B���H�=s�U��H�=x�!�(H���B���H�=�f�U��H�=S�!�&H���B���H�=�g�eU��H�=.�!�H���aB���H�=�f�@U��H�=	�!�H���<B���H�=Df�U��H�=��!�H���B���H�=�f�T��H�=��!�H����A���H�=�e��T��H�=��!�H����A���H�=�e�T��H�=u�!�H���A���H�=�q�T��H�=P�!�H���A���H�=oe�bT��H�=+�!�H���^A���
H�=:f�=T��H�=�!�H���9A���H�=e�T��H�=��!�H���A���	H�=�e��S��H�=��!�H����@���H�=�d��S��H�=��!�-H����@���H�=:e�S��H�=r�!�"H���@���H�=�p�S��H�=M�!�H���@���	H�=4e�_S��H�=(�!�H���[@���H�=d�:S��H�=�!�H���6@���H�=Kp�S��H�=��!�H���@���H�=e��R��H�=��!�H����?���H�=�c��R��H�=��!�H����?���H�='d�R��H�=o�!�H���?���H�=�c�R��H�=J�!�H���}?���H�=�o�\R��H�=%�!�
H���X?���H�=�c�7R��H�=�!�H���3?���	H�=�c�R��H�=��!1�H���?���\E���H�=>cH���!��Q��H�=��!�,H����>���H�=c�Q��H�=��!�)H���>���H�=o�Q��H�=[�!�(H���>���H�=�b�uQ��H�=6�!�&H���q>���H�=}c�PQ��H�=�!�H���L>���H�=�b�+Q��H�=��!�H���'>���H�=/b�Q��H�=��!�H���>���H�=�b��P��H�=��!�H����=���H�=�a�P��H�=}�!�H���=���H�=�a�P��H�=X�!�H���=���H�=�m�rP��H�=3�!�H���n=���H�=Za�MP��H�=�!�H���I=���
H�=%b�(P��H�=��!�H���$=���H�=a�P��H�=��!�H���<���	H�=�a��O��H�=��!�H����<���H�=�`�O��H�=z�!�-H���<���H�=%a�O��H�=U�!�"H���<���H�=�l�oO��H�=0�!�H���k<���	H�=a�JO��H�=�!�H���F<���H�=`�%O��H�=��!�H���!<���H�=6l�O��H�=��!�H���;���H�=�`��N��H�=��!�H����;���H�=�_�N��H�=w�!�H���;���H�=`�N��H�=R�!�H���;���H�=�_�lN��H�=-�!�H���h;���H�=kk�GN��H�=�!�
H���C;���H�=�_�"N��H�=��!�H���;���	H�=�_�M��H�=��!1�H���:���H�=1_��M��H�=��!�,H����:���H�=�^�M��H�=w�!�)H���:���H�=k�M��H�=R�!�(H���:���H�=�^�lM��H�=-�!�&H���h:���	H�=w_�GM��H�=�!�H���C:���H�=�^�"M��H�=��!�H���:���H�=)^�L��H�=��!�H���9���H�=|^��L��H�=��!�H����9���H�=]�L��H�=t�!�H���9���H�=�]�L��H�=O�!�H���9���H�=�i�iL��H�=*�!�H���e9���H�=T]�DL��H�=�!�H���@9���H�=^�L��H�=��!�H���9���H�=�\�K��H�=��!�H���8���H�=b^��K��H�=��!�H����8���H�=�\�K��H�=q�!�-H���8���H�=]�K��H�=L�!�"H���8���H�=�h�fK��H�='�!�H���b8���H�=]�AK��H�=�!�H���=8���H�=\�K��H�=��!�H���8���H�=0h�J��H�=��!�H����7���	H�=�\��J��H�=��!�H����7���H�=�[�J��H�=n�!�H���7���H�=\�J��H�=I�!�H���7���H�=�[�cJ��H�=$�!�H���_7���H�=eg�>J��H�=��!�
H���:7���H�=}[�J��H�=��!�H���7���H�=�[��I��H�=��!1�H����6���>=���H�='[H���!��I��H�=�!�,H����6���H�=�Z�I��H�=Z�!�)H���6���H�=�f�|I��H�=5�!�(H���x6���H�=�Z�WI��H�=�!�&H���S6���H�=l[�2I��H�=��!�H���.6���H�=�Z�
I��H�=��!�H���	6���H�=Z��H��H�=��!�H����5���H�=lZ��H��H�=|�!�H���5���H�=mY�H��H�=W�!�H���5���H�=�Y�yH��H�=2�!�H���u5���H�=�e�TH��H�=
�!�H���P5���H�=CY�/H��H�=��!�H���+5���
H�=Z�
H��H�=��!�H���5���H�=�X��G��H�=��!�H����4���	H�=�Y�G��H�=y�!�H���4���H�=�X�G��H�=T�!�-H���4���H�=Y�vG��H�=/�!�"H���r4���H�=�d�QG��H�=
�!�H���M4���	H�=Y�,G��H�=��!�H���(4���H�=�W�G��H�=��!�H���4���H�=!d��F��H�=��!�H����3���H�=�X�F��H�=v�!�H���3���H�=tW�F��H�=Q�!�H���3���H�=�W�sF��H�=,�!�H���o3���H�=�W�NF��H�=�!�H���J3���H�=Vc�)F��H�=��!�
H���%3���H�=mW�F��H�=��!�H���3���	H�=�W��E��H�=��!1�H����2���)9���H�="XH�n�!�E��H�=b�!�H���2���
H�=X�E��H�==�!�H���2���H�=�W�gE��H�=�!�
H���c2���H�=�W�BE��H�=��!�H���>2���H�=8b�E��H�=��!�H���2���H�=
b�D��H�=��!�H����1���
H�=W��D��H�=��!�H����1���H�=W�D��H�=_�!�H���1���7���H�=�WH�2�!�}D��H�=&�!��H���y1���H�=�W�XD��H�=�!�+H���T1���H�=nW�3D��H�=��!�;H���/1���H�=<W�D��H�=��!�)H���
1���H�=1W��C��H�=��!�:H����0���H�=+W��C��H�=m�!1�H����0���H�=)W�C��H�=K�!�,H���0���H�=yV�}C��H�=&�!�2H���y0���H�=�V�XC��H�=�!�<H���T0���
H�=�U�3C��H�=��!�3H���/0���
H�=�U�C��H�=��!�H���
0���H�=�U��B��H�=��!�H����/���H�=�U��B��H�=m�!�H���/���H�=wU�B��H�=H�!�H���/���H�=FU�zB��H�=#�!�H���v/���H�=U�UB��H�=��!�H���Q/���H�=QU�0B��H�=��!�H���,/���H�=U�B��H�=��!�H���/���
H�=�T��A��H�=��!1�H����.���05���H�=�TH�e�!�A��H�=Y�!��H���.���H�=
U�A��H�=4�!�+H���.���H�=�T�nA��H�=�!�;H���j.���H�=wT�IA��H�=��!�)H���E.���H�=lT�$A��H�=��!�:H��� .���H�=fT�@��H�=��!1�H���-���H�=dT��@��H�=~�!�,H����-���H�=�S�@��H�=Y�!�2H���-���H�=�S�@��H�=4�!�<H���-���
H�=#S�n@��H�=�!�3H���j-���
H�=�R�I@��H�=��!�H���E-���H�=S�$@��H�=��!�H��� -���H�=�R�?��H�=��!�H���,���H�=�R��?��H�={�!�H����,���H�=�R�?��H�=V�!�H���,���H�=PR�?��H�=1�!�H���,���H�=�R�k?��H�=�!�H���g,���H�=ZR�F?��H�=��!�H���B,���
H�=�Q�!?��H�=��!1�H��� ,���
H�=�Q�>��H�=��!�H���+���H�=�[��>��H�={�!��H����+���H�=4R�>��H�=V�!�+H���+���H�=�Q�>��H�=1�!�;H���+���H�=�Q�k>��H�=�!�)H���g+���H�=�Q�F>��H�=��!�:H���B+���H�=yW�!>��H�=��!1�H��� +���H�=�Q�=��H�=��!�,H���*���H�=�P��=��H�={�!�2H����*���H�=�W�=��H�=V�!�<H���*���H�=MP�=��H�=1�!�3H���*���H�=P�k=��H�=�!�H���g*���H�=>P�F=��H�=��!�H���B*���H�=�z�!=��H�=��!�H���*���H�=�O�<��H�=��!�H���)���H�=�O��<��H�=x�!�H����)���H�=z�<��H�=S�!�H���)���H�=�O�<��H�=.�!�H���)���H�=�O�h<��H�=	�!�H���d)���H�=T�C<��H�=��!1�H���B)���H�=Hm�!<��H�=��!�H���)���h/���H�=�QH���!��;��H�=��!�8H����(���H�=0Q��;��H�=d�!�1H����(���H�==Q�;��H�=?�!�0H���(���H�=*Q�;��H�=�!�/H���}(���H�=-P�\;��H�=��!�.H���X(���H�=�P�7;��H�=��!�-H���3(���H�=HP�;��H�=��!�,H���(���H�=�Z��:��H�=��!�+H����'���H�=2O��:��H�=a�!�*H����'���H�=�O�:��H�=<�!�)H���'���H�=�N�~:��H�=�!�(H���z'���	H�=N�Y:��H�=��!�'H���U'���H�=�N�4:��H�=��!�&H���0'���H�=dO�:��H�=��!�%H���'���H�=�M��9��H�=��!�$H����&���
H�=�M��9��H�=^�!�"H���&���
H�=pM�9��H�=9�!�H���&���H�=�N�{9��H�=�!�#H���w&���H�=N�V9��H�=��!�H���R&���H�=wM�19��H�=��!�H���-&���
H�=�M�9��H�=��!�H���&���H�=mN��8��H�=��!�H����%���H�=7N��8��H�=[�!�H���%���H�=�M�8��H�=6�!�H���%���H�==^�x8��H�=�!�H���t%��� H�=8^�S8��H�=��!�H���O%���H�=N�.8��H�=��!�H���*%���
H�=�L�	8��H�=��!�H���%���H�=L��7��H�=}�!�H����$���H�=�K�7��H�=X�!�H���$���H�=�K�7��H�=3�!�H���$���H�=�K�u7��H�=�!�H���q$���H�=ZK�P7��H�=��!�H���L$���H�=)K�+7��H�=��!�H���'$���	H�=�J�7��H�=��!�
H���$���H�=�J��6��H�=z�!�H����#���H�=�J�6��H�=U�!�H���#���H�=NK�6��H�=0�!�
H���#���H�=K�r6��H�=�!�	H���n#���H�=VK�M6��H�=��!�!H���I#���H�="K�(6��H�=��!� H���$#���	H�=�I�6��H�=��!�H���"���	H�=�I��5��H�=w�!�H����"���H�=VJ�5��H�=R�!�H���"���H�=$J�5��H�=-�!�H���"���H�=U�o5��H�=�!�H���k"���H�=�H�J5��H�=��!�H���F"���H�=�I�%5��H�=��!�H���!"���H�=vI�5��H�=��!�H���!���H�=gT��4��H�=t�!�H����!���H�=�J�4��H�=O�!�8H���!���H�=�I�4��H�=*�!�1H���!���H�=J�l4��H�=�!�0H���h!���H�=�I�G4��H�=��!�/H���C!���	H�=�H�"4��H�=��!�.H���!���H�=�I�3��H�=��!�-H��� ���H�=I��3��H�=q�!�,H���� ���H�=TS�3��H�=L�!�+H��� ���H�=�G�3��H�='�!�*H��� ���H�=O�i3��H�=�!�)H���e ���H�=�G�D3��H�=��!�(H���@ ���H�=�F�3��H�=��!�'H��� ���H�=OG�2��H�=��!�&H������H�=�N��2��H�=n�!�%H�������H�=SF�2��H�=I�!�$H������H�=iF�2��H�=$�!�"H������H�=9F�f2��H�=��!�H���b���H�=�M�A2��H�=��!�#H���=���	H�=�M�2��H�=��!�H������H�=@F�1��H�=��!�H�������
H�=�F��1��H�=k�!�H�������
H�=6G�1��H�=F�!�H������
H�=G�1��H�=!�!�H������H�=�F�c1��H�=��!�H���_���H�==G�>1��H�=��!�H���:���H�=4G�1��H�=��!�H������H�=�F��0��H�=��!�H�������
H�=�E��0��H�=h�!�H�������H�=�D�0��H�=C�!�H������H�=�D�0��H�=�!�H������H�=�D�`0��H�=��!�H���\���H�=TD�;0��H�=��!�H���7���H�=#D�0��H�=��!�H������H�=�C��/��H�=��!�H�������H�=�C��/��H�=e�!�
H�������H�=�C�/��H�=@�!�H������H�=kC�/��H�=�!�H���~���	H�=D�]/��H�=��!�
H���Y���	H�=�C�8/��H�=��!�	H���4���H�=D�/��H�=��!�!H������H�=�C��.��H�=��!� H�������H�=~B��.��H�=b�!�H�������H�=OB�.��H�==�!�H������	H�=�O�.��H�=�!�H���{���	H�=�K�Z.��H�=��!�H���V���H�=�M�5.��H�=��!�H���1���H�=NN�.��H�=��!�H������	H�=qB��-��H�=��!�H�������	H�=?B��-��H�=_�!�H�������H�=O�-��H�=:�!�H������� ���H�=?DH�
�!�p-��H�=�!�)H���l���H�=�E�K-��H�=��!�(H���G���H�=<E�&-��H�=��!�'H���"���H�=_D�-��H�=��!�&H������H�=�D��,��H�=m�!�%H�������H�=�C�,��H�=H�!�H������H�="D�,��H�=#�!�H������H�=�C�m,��H�=��!1�H���l���H�=KC�K,��H�=��!�H���G���
H�=�B�&,��H�=��!�H���"���H�=�B�,��H�=��!�H������H�=*C��+��H�=m�!�H�������H�=sB�+��H�=H�!�H������H�=�A�+��H�=#�!�H������
H�=B�m+��H�=��!�
H���i���
H�=�A�H+��H�=��!�H���D���H�=aB�#+��H�=��!�
H������
H�=�A�*��H�=��!�	H������
H�=]A��*��H�=j�!�H�������H�=�A�*��H�=E�!�H������H�=yB�*��H�= �!�H������H�=�B�j*��H�=��!�H���f���H�=BB�E*��H�=��!�H���A���H�=�A� *��H�=��!�$H������H�=�A�)��H�=��!�#H������H�=wA��)��H�=g�!�"H�������H�=A�)��H�=B�!�!H������H�=�@�)��H�=�!� H������
H�=�?�g)��H�=��!�H���c���	H�=�?�B)��H�=��!�H���>���
H�=�?�)��H�=��!�H������H�=�?�(��H�=��!�H�������H�=�?��(��H�=d�!�H�������H�=�>�(��H�=?�!�H������H�=�>�(��H�=�!�H������
H�=�>�d(��H�=��!�H���`���
H�=�>�?(��H�=��!�H���;���H�=�>�(��H�=��!�)H������H�=A@�'��H�=��!�(H�������H�=�?��'��H�=a�!�'H�������H�=u?�'��H�=<�!�&H������H�=N?�'��H�=�!�%H������H�=s>�a'��H�=��!�H���]���
H�=�>�<'��H�=��!�H���8���
H�=�>�'��H�=��!1�H������H�=�=�&��H�=��!�H�������H�=�:��&��H�=a�!�H�������H�=�=�&��H�=<�!�H������H�=�=�&��H�=�!�H������H�= =�a&��H�=��!�H���]���H�=�?�<&��H�=��!�H���8���H�=�<�&��H�=��!�
H������H�=�>��%��H�=��!�H�������H�=T?��%��H�=^�!�
H�������
H�=<�%��H�=9�!�	H������H�=�>�%��H�=�!�H������H�=�<�^%��H�=�!�H���Z���H�=&=�9%��H�=�!�H���5���H�=F=�%��H�=��!�H������H�=�<��$��H�=��!�H�������H�=�<��$��H�=[�!�$H�������H�=[<�$��H�=6�!�#H������H�=�>�$��H�=�!�"H���|���
H�=�;�[$��H�=�!�!H���W���H�=�=�6$��H�=�!� H���2���H�=�:�$��H�=��!�H���
���H�==:��#��H�=}�!�H�������H�=�:��#��H�=X�!�H�������H�=�:�#��H�=3�!�H������H�=0:�}#��H�=�!�H���y���H�=�9�X#��H�=�!�H���T���H�=�9�3#��H�=Ŀ!�H���/���H�=t9�#��H�=��!�H���
���H�=�9��"��H�=z�!�H�������0���H�=9;H�M�!�"��H�=A�!�CH������H�=<�"��H�=�!�<H������H�=J<�n"��H�=��!1�H���m���H�=<�L"��H�=վ!�7H���H���
H�=�:�'"��H�=��!�9H���#���H�=;�"��H�=��!�BH������H�=�:��!��H�=f�!�8H�������H�=;�!��H�=A�!�1H������H�=�:�!��H�=�!�5H������H�=&;�n!��H�=��!�3H���j���H�=:�I!��H�=ҽ!�H���E���H�=b:�$!��H�=��!�:H��� ���H�=�9� ��H�=��!�2H���
���H�=�9�� ��H�=c�!�=H����
���H�=U9� ��H�=>�!�	H���
���H�=#9� ��H�=�!�6H���
���
H�=[9�k ��H�=�!�4H���g
���H�=�8�F ��H�=ϼ!�;H���B
���
H�=9�! ��H�=��!�>H���
���
H�=�8���H�=��!�H������H�=E8����H�=`�!�H�������H�=X9���H�=;�!�H������H�=�9���H�=�!�H������H�=�8�h��H�=�!�H���d���H�=19�C��H�=̻!�H���?���H�=�8���H�=��!�H������H�=&8���H�=��!�H������H�=�7����H�=]�!�H�������H�=�7���H�=8�!�CH������H�=8���H�=�!�<H������H�=F8�e��H�=�!1�H���d���H�=8�C��H�=̺!�7H���?���H�=%7���H�=��!�9H������
H�=7���H�=��!�BH���
���	H�=�6����H�=]�!�8H����
���H�=7���H�=8�!�1H���
���H�=�6���H�=�!�5H���
���H�="7�e��H�=�!�3H���a
���H�=6�@��H�=ɹ!�H���<
���H�=^6���H�=��!�:H���
���H�=_6���H�=�!�2H����	���H�=K6����H�=Z�!�=H����	���H�=Q5���H�=5�!�	H���	���H�=�5���H�=�!�6H���	���H�=#6�b��H�=�!�4H���^	���H�=6�=��H�=Ƹ!�;H���9	���H�=�4���H�=��!�>H���	���H�=�4����H�=|�!�H�������H�=A4����H�=W�!�H�������H�=T5���H�=2�!�H������H�=�5���H�=
�!�H������H�=�4�_��H�=�!�H���[���H�=-5�:��H�=÷!�H���6���H�=�4���H�=��!�H������H�="4����H�=y�!�H�������
H�=�3����H�=T�!�H����������H�=�5H�'�!���H�=�!�H������
H�=5�u��H�=��!�H���q���H�=�5�P��H�=Ѷ!�H���L���H�=�4�+��H�=��!�H���'���H�=�4���H�=��!�H������H�=�4����H�=b�!�H�������
H�=�3���H�==�!�H������
H�=24���H�=�!�H������H�=�4�r��H�=�!�H���n���H�=4�M��H�=ε!�
H���I���H�=�3�(��H�=��!�H���$���H�=�3���H�=��!�
H������
H�=
3����H�=_�!�H�������H�=,3���H�=:�!�H������
H�=�2���H�=�!�H������H�=�2�o��H�=�!�H���k���
H�=�2�J��H�=˴!�H���F���H�=�2�%��H�=��!�H���!���H�=N2���H�=��!�H������H�=�7����H�=\�!�H�������H�=�2���H�=7�!�	H������H�=87���H�=�!�H������
H�=�1�l��H�=�!�H���h���H�=�1�G��H�=ȳ!�H���C���H�=/2�"��H�=��!�H������	H�=y2���H�=~�!�H������H�=!2����H�=Y�!�H�������H�=}1���H�=4�!�H������H�=�1���H�=�!�H������H�=�1�i��H�=�!�H���e���H�=0�D��H�=Ų!�H���@���	H�=�0���H�=��!�H������H�=+1���H�={�!�H������
H�=�0����H�=V�!�
H�������H�=�3���H�=1�!�H������H�=v0���H�=�!�
H������H�=�/�f��H�=�!�H���b���H�=�/�A��H�=±!�H���=���H�=A/���H�=��!�H������H�=U/���H�=x�!�H�������	H�=c/����H�=S�!�H�������H�=/���H�=.�!�H������H�=�.���H�=	�!�H������H�=�-�c��H�=�!�H���_���H�=/�>��H�=��!�	H���:���H�=�3���H�=��!�H������H�=.����H�=u�!�H�������H�=.����H�=P�!�H����������H�=^3H�#�!���H�=�!�H������H�=$3�y��H�=�!�H���u������H�=�.H�ů!�H��H�=��!�)H���D���H�=�.�#��H�=��!�H������H�=�.���H�=o�!�%H������H�=_.����H�=J�!�#H�������
H�=,.���H�=%�!�H������
H�=�J���H�=�!�H������H�=.�j��H�=ۮ!�)H���f����H�=�-�E��H�=��!�H���A����H�=�-� ��H�=��!�%H�������H�=�-���H�=l�!�#H������	H�=R-����H�=G�!�H�������H�=�I���H�="�!�H��������[H��!�f.�D��H�%�!�����HE��f���H��1�H��!H��������
�@��ATI��UH��S�]	��H�XH����	���CI�����t���CH��[]A\����CH��[]A\�f���S�	��H�XH���	���C[H��7H��?���f.���AWAVAUATUSH��HdH�%(H�D$81����GH�I��L�~H�D$���H�D$H�l$H�}���H�|$�RH�|$���H�|$����H�D$H�PH� �H�xH�T$ Hc�H9������|$(L�-ث!L�5X6L���1��H�XH�������CL��A���D$���\���D$�"fD����L��8�\�������H��L��H���V��H��x�H�@H�xzH�DH�L$8dH3%(��H��H[]A\A]A^A_�f.�H�FH�D$���������
�������R���fDH�P����H���`����fDL�5Z5L�-�!����@��L���8�����!�����E1���
��@����1�H��H������ff.���UH��AWAVI��AUI��ATSH��dH�%(H�E�1����L�`L���E��L���-��L��lj����L��߉�A������E�A��H��H9�tH��H��$�H9�u�H��H��$L��L�|$����I���L�E�D��A�|$L��D�������x9�u�L�����D��D���H������H�M�dH3%(u H�e�[A\A]A^A_]�I�t$ H�=4�u	�������U��SH����x
H��tH�>��tG�1�������D�H�����H�hH���'���}���������t6H���[]�H��t������Ã�v�H�#�!H�5D5H�81�����]���H�5u3�8����ff.�@��UH��SH�����H�XH������Ct$�{��O����c�H���[]��H��H��[]����f.���UH��SH�����H�XH���B���{1�����C�t��CH���[]��H��H��[]�j��f.�PXH���u���H�5�2�8������USH��(dH�%(H��$1��D$H�l$���H�XH������{H�T$H��������xM�T$��w2�{H���7���H��$dH3%(u(H��([]�f.��D$���<�������PXH�����H�5�1�8�'������USH��(dH�%(H��$1��D$H�l$�>��H�XH�������{H�T$H�������xM�T$��w2�{H���g���H��$dH3%(u(H��([]�f.��D$���<����������SH�� dH�%(H�D$1��D$���H�XH���.���{H�L$L�D$���b�����t-�D$H�t�D$H�|���H�T$dH3%(uH�� [��[���H�5�0�8�����8������USH��(dH�%(H��$1��D$H�l$����H�XH������{H�T$H�������xE�t$��w*H���J��H��$dH3%(u#H��([]�D�D$����$������ff.�@��USH��(dH�%(H��$1��D$H�l$�>��H�XH�������{H�T$H�������xE�t$��w*H�����H��$dH3%(u#H��([]�D�D$����D�������ff.�@��UH��H��SH��dH�%(H��$�1��������H��H��޿�
�������D$%�=�u_�������uTH��������H�����H��H���:��H�x����H��H��$�dH3%(u)H�Ĩ[]Ð�[���H���z���H�5�.�	����������H�5b.�8���f.���AVAUATUH��SH��H�� dH�%(H�D$1����q���?H�FL�&L�nH�D$���&H���w���H�XH�����H������L��lj��G���L����A���X���H�|$A��H��uc�D$�L�t$H������{A��L��D��D���������H�L$dH3%(���H�� []A\A]A^��@��u2H�����t���tr��u5�D$�L�t$�f�H��tH��t�H��$t@��u8H�|$�~���H�D$L�pH� tL�pH�hHc�H9��/�������{���L�t$�D$�����H��!H��u%L�%�!D�L������H�Ģ!H��t�H�;1�1�H���@���I��H���!H��u*L�-�,f.��L�����H�t�!H��t�H�;1�1�H�����I��H�N�!H��u"L�5A,f��L���S��H�,�!H��t�H�;1�1�H�����H�D$�����i��������H�s H�=�+����f.���H�5�!SH�=�+H�0���H�>�!H�5�+H��H����H�;1�H�@�H�5�+���H�;�H�E�H�5�+�y���H�;�H�����H�5�+�^���H�;1�H���H�5�+�&���H�;1�H�j���H�5�+����H�;�����H�����H�5�+��H�;�����H�����H�5z+����H�;�H�Y���H�5j+���H�;1�H�����H�5]+���H�;1�H���H�5Q+���H�;1�H�1���H�5E+�u���H�;1�H�i���H�58+�]���H�;1�H�����H�5.+�E���H�;H���!�����H�5"+�*���H�;�����H���H�5+����H�;1�H�S�H�5E*���H�;�H���H�5@*����H�;�H�-�H�5�*�q���H�;H�G�!�H�5�*�V���H�;H���!�H�5�*�;���H�;H��!�H�5�*� ���H�;H��!�H�5�*����H�;H�c�!�H�5�*���H�;[�H���!H�5x*����f.�@��H��1�H�=�1��i���f���S�H����H�=�!H��[H��H������$���@��H���!H�0H���!H�8�����H�u�!SH��H��H�0H���!H�8���H��[�����f��tf��
u#H����O���H����:��R��H��!H�5�)H�81����ff.���UH��E1�1�S1�H���g�H��H��pH�x���H��H���Z���H��H��[]���ATUSH��dH�%(H�D$1���~H���t H�VH�$��t���<���@H�$H��H��t^��H����u`H�<$L�%)tH���U�I��f��L�������H��thH�8���H�L$dH3%(uKH��[]A\�DH�����H���H��H��(H��H�
�:H�5+HN�H�
�!H�81����V�H���!L���H�5+H�81��y�f���USH��(dH�%(H�D$1���~H�H�$��t&H�FH�D$��t!������f�H�D$H��H����H�|$t
H�|$��H��H��'�+�H�|$H��t
H�|$��H��H��H����H��t+�@f����H�L$dH3%(H�DuBH��([]�@1�H�t$H���)���H�T$�:t�H�x�!H��H��H�5l'H�81��a���ff.����AT�1�US���H��L�`�%fD����8��t��$uUH��H��H��	���L��H�E tH�}H�������x�H�}H�E tH�}�5�H��H���*�H��[]A\�H�5�&��fD��A�����������H��H����������UH��1�SH��(dH�%(H��$1�H�l$H�L$�D$H���Q�T$H��H��H����H��H�����H��$dH3%(u
H��([]����f���UH��SH��(dH�%(H��$1�H��!H�l$H�L$H���D$H�8���T$H��H��H����H��H������H��$dH3%(u
H��([]��:�f.���ATI��USH�� dH�%(H��$1��D$H�l$���H�XH���}���H��L�D$H��H�c�!L��H�8��H��<t"H��uD�T$H��H���U�H��H���Z���H��H��$dH3%(H��u#H�� []A\�D�u�H���H��u����i�f�H��tkH���f��tVv<�f��
t�f��u�w��H��A�E1�1�j���H���@f���n�E���D����f.���USH��dH�%(H�D$1�H��H�$�������tt��H�$H��H��u�?fDH�H��t-H�{H��t����f��u�����H��H�����H�H��u�H�$H�����H��H�T$dH3%(uH��[]��H�H�5�#�8����%�D��H��H�|$H�t$���H�T$H�rH��~f�8uKH��nw%H����H���H���!H�5S#H�81��	�H���!H��nH�53&H�81����H�b�!H�5.#H�81�������AWAVAUATUSH��H�$H��XdH�%(H��$H1���~H���t ���h���h����E1�H���E�H��H����H�PH���H�pH� �&H���*1�L�T$@L��$@L��$@H��L��AUA�M���L���w�AXAY�����$���4$��4$���4$H�=i"��E���DH����H����f�)D$)D$ )D$0H��� ��H�PH�����,H�@ H�XH�8H�hH�����D$1�A�������D$1�H��t�}�H�T$1�H��H�߉D$L��$@L��$@���H��M��L��H�D$H��A��pH�xAU�l�Y_�ƅ��lH�$L��$@H��$@H�H�X(H��t^H���sH�{H��AUA�M������XZ���H��L��������L��L��������H�[(H��u�H�<$��L���A�L��H���6�H��H����H��$HdH3%(�EH��X[]A\A]A^A_�f�H�pH������L�T$@�L����H�uI��Hc�H9����������f�H����H��t~rH���A���H�X�U���H��H�8H�hH�X�A���H�@ ��H�<$�L�H���!H�5#H�81��t��t$�;��t$H�<$��t$��t$�q���H�Ȓ!H�5�"H�81��7�H��!H�5�H�81���H�~H�������@��t
���A���������H���!H�5lH�81������f.���SH��H�|$H�t$�X�H��H�D$H�pH��~>���f��uJHc�H9�����H������SH��f����H�|���H��[�H��!H�5�H�81��P�H�ɑ!H�5"H�81��8����USH��H��H���!H��u H�-��H�����H�t�!H��t�H��H��1�1�[H��]���f���USH��H�t$H�|$H�l$dH�%(H��$�1��\�1�H�}�H�D$H�Ef�H��f�D$H�\$H�SH��lw]H�sH� u7H��u;H����H�����H��$�dH3%(uCH�Ę[]�H�sH��t�H�}�l���H���!�lH�5� H�81�����D��USH��H��H����t;��H��H���{�H�XH�����{������xH���[]�D��H�����a�H�59�8�����AU��ATUSH����~`I��H�>L�n��uL��L�������A��H�����D��������xhH��L���[]A\A]�)�f���t�������f.�H�^H��t��!�L����W�A���u�H��������H�5r�8��f���AV��AUATUSH��dH�%(H�L$1Ƀ�~I��H�>H�n��t���������P���H��A�������H���!�H�Á�I���D��L����V������$L����H�lj����\$L��H���z���H����H��H���U�H���}����H�L$dH3%(H����H��[]A\A]A^�H�^H���C������H��A��������?���H����H���:�����;��8�t���u@�+�H�5�8��DH��H��H�k�H�=�����H���R����L��ډ�D���A����������f���AWAVAUATUSH��dH�%(H��$�1�H�D$H�D$pH�D$H�D$xH�D$H��$�H�D$ H��$�H�D$(H��$�H�D$0H��$�H�D$8H��$����aH��H�D$H�FH�D$H�D$pL�@(�$f�H��t
Lc�N��L�
��H��I9�tH�P9��H��t�H��H�I9�u�9���H�|$f�1�)D$@)D$P)D$`H��t�+�H�|$ �D$DH��t	�W��D$HH�|$(H���<H�|$0H���KH�|$8H���ZH�ϊ!��D$H�t$H�|$H�T$@1��C�D�l$I��H���m�}�I�I��H����fDH�{�sD�����H�{ H��H��t2�(�H��I���m�L�xM��tA��uL��H���C�H���;��HcCH��H�t���HcCH��H�t���HcCH��H�t��H��L����H�[(H���h���L���x�L��H��$�dH3%(��H�ĸ[]A\A]A^A_�@@��tR�]�H�|$0�D$LH�������@��tD�?�H�|$8�D$@H�������H�t$������������D�+��f���뺺������H���!H�5H�81�����ff.�f���S1���H�=����H�ƃ�nt�����H���!H�8���H���%�D��ATI��UH��SH���Z��L��H��H�ދ8��f.���S��H��t��t�����H���H��u�H�=.1��>���H���4��@��UH��SH��H������H��H�ދ8��ff.���UH��S��H��H����H��H�=�H��1������H������ff.���UA�H��E1�S�Ή�1�H��1�H��j�(�ZH��YH�‰����f���ATA��UH��SH���:��D��H��H�ދ8�j�f.���UH��SH��H�����H��H�ދ8��ff.���S��H��H�T$H��tH���b�H�|$H�4$��H�D$H�4$H� H�HH�PtH�P������ff.�@��ATI��UH��SH���z��L��H��H�ދ8�Z�f.���SH��H�� H�t$H�|$H�t$dH�%(H�D$1���H����H�XH����H�D$H�PHc�H9����H�pH� u*�{����x)H�L$dH3%(�uH�� [�H�p�����H�T$H�t$H�=����ff.�@��SH��H�� H�t$H�|$H�t$dH�%(H�D$1����H�|$���H�PH�D$Hc�H9����H�pH� u41�A�H�������x+H�\$dH3%(H�H�DuH�� [�H�p�����H�T$H�t$H�=.����ff.�@��UH��SH��H��(H�t$H�|$H�t$dH�%(H�D$1���H�|$����H��H�D$�u�H�XH���	�H�����H�D$H�PHc�H9����H�pH� u/�{�����x3H�H�DH�L$dH3%(uJH��([]�DH�p�{����y�����8��stH��u"��ju��H��u$H���!�����H�L$H�T$H�5���H��s��A�����H��tO�f��t&v,�f��
t�f��u�G���fD��f�f���n�E��fD1��D��������U��SH���������H�;�!H�=�H�0��H���!H���H�=b����H��t"H�ƹH�=��������H���H�=D�y�H��!H�;H��H�H����H�;�����H�R�H�5I��H�;�H���H�5���H�;�H�����H�5���H�;�H��H�5���H�;H�S�!�H�5���H�;1�H�N�H�5���H�;�H���H�5���H�;1�H���H�5��O�H�;�����H�`�H�5��4�H�;�H�5�H�5�����H�-!H�;�����H�5{H����H�;H�����H�5g��H�;1�H�H�H�5T���H�;�H�z�H�5E���H�;�����H���H�58��H�;�����H���H�5+��H�;�����H���H�5��H�;�����H����H�5�e�H�;�����H�&�H�5��J�H�;�H��H�5��/�H�;�H���H�5���H�;�H���H�5���H�;�H���H�5����H�;�H���H�5����H�;�H���H�5s��H�;1�H��H�5n��H�;1�H���!H�5c�x�H�q�!H�;�H�5K�]�H�=�����H�����H�b�!H��[]�f.�����~^;u6E1���Ic�D9�~��D����H����9��H��������D�H��L��I��A��I9�t
H��9T��t�����f.���SH��H� H��t
�
�H�C H�{8H��t
���H�C8H�{H��t
����H�C�[�ff.���AW�AVAUATUH��SH��8D�g@H�wdH�%(H�D$(1�H�GPH��D$$A���D$1�H�D$�D$A��A���M��H�E A��t+H�}(H�u0H��uH��tE1��1�� ��H�E8H�E L�0M���@H�D$$1�H�U8E1��D$I��H�D$H��tAH�H��tA�~H��9xu
�19{t)H�[(H��u�I�N(H����I��H��u�DA�~1�A�VA�v���A�ʼnD$$���FH�}������I��H�EA���BH����H�L$D��A����D$$�����SH�sD��L�-}�����D$�D$$��yI�5��L��D�H�ED�D$���D�D$M�v(M���:H�U8��f��D$$L�-���x�1�A�VA��I�vL�D$��L��L�-����D$$��x�H�EI��t'�|$t L�������������D$$����H�L$(dH3%(L����H��8[]A\A]A^A_�f��[��L�-=D��4���@H�L$D��A����D$$���A�VI�vD��L�-C����D$$�;����L$$��xPA�~H���*����D$$��xcH�EA��B����T$$L���y�|$xEH�UH�MD������L�������L����t��H�5l
������q��1�E1��H�U(H�M0���AVAUATUH��SH�� dH�%(H�D$1�H���H� H�D$H��t
�#��H�E H�}8H��t
�
��H�E8������t�e��H�D$H�����8����������H�xH�D$�$���up1���~ H�L�xH��t�iu�D�H��9��H�|$�GH���X��_�����}p��~�t$���a�}p~�L$���/������1�L�t$I���c�H��9��~VH���D�$�E��x�M��L��D���$�D$�����$����D��H���V��9���H���tH����(��H���tH������H���H��t���HDž�H�t$dH34%(�uH�� []A\A]A^�@�D������l���fD����H�D$�m���f�H�|$�F�������H���������������f.�H�}x���������ff.�f���ATH��1�E1�U��SH��dH�%(H��$1�I�����H��H��PH��H��u3H�������L���1��H��$dH3%(u!H��[]A\�f�H�p�L���/����X��������H��H�������H��(�dH�%(H�D$1�H�������xH�L$dH3%(H�$H�T$uH��(����H�5G
�8�z������D��AUATUSH��H�$H��(1�dH�%(H��$1�H��1�����D$H��H�EH��t�x��y,H��$dH3%(H���KH��([]A\A]�@H�l$H�T$H�������x��|$���H��t�H�����H�SI��1�H��~ H�CH� tH�C�D�<>��1�H��1��D$L��$�n���H�5I	H��H�����L��H��L��$���H��L��M��j�t$�H��A��Q��ZY��t+�|$����H�t$�H��������f��H��H�5��|��L��H���a��H�ߺH�5��]��L��H���B���H���#������f���UH��AWI��AVAUATSH��HdH�%(H�E�1�H�GH��DžT���H����H�GHH�� ���H�GPH������H���H��@���HcGpH��H��H%�H)�H���H��H9�tH��H��$�H9�u����H������(I��H��`���H��h����c��H����H��H�H(�����H��H9�u�I���ALJ�����H������A�GpH�������������H�}������L������]�E�1Ҿ��H�����1�������!����H������1���������H���A�p�@��]�A����HE����I���H����H�x�<��I���I�GX�H��tH�����I���H�AI�G`H��tH���v��I���H�AIcGp�P�Q����H��@���M��A�@H��H��0���1�@Hc�H�@J�1I��L�vH��I�T�xHc�J�4�I��H���H��H���I)�L��H9�tH��H��$�H9�u�%�t	H)�H�L�I�GhE�OtH��f�L��H�[E�H��H�D�PI�D�L�@@ L�PJ��I��L�H��H��0����o�o^Hǀ��of PPX``pA��@H�H@ǀ�Hǀ�ǀ�uGH�5�s!L���V�����I�}H��I��hI������IcGpL��9���I��������@���u�H��@���H�H��8�����H��u�A�8
H�H�
�HD�H��8���H�u!H��uf��H�=�����H��t!H��t�H���;��H��@���H���<��H��H��(���t<H��8�������H�����H��(���H��H���	���H��HD�I�T�xH�BXH��t!H��u$��H�=M�O��H�`t!H��t�H�����H��@���H�����H��tYH��8���H��(����c��H���{��H��(���H��H���y��H��t&I�L�xH��H��8�������W��H��8����A`I�T�x�>���H�� �����H�����H�E�H�E�Dž���H�E�HDž(���HDž@���H��������L���E1�Dž��Dž����8���H�E�Dž���Dž0���HDž����HDž ���Dž����
Dž���HDž���Dž����H������f.�H��@�����H�� ���L	���M����	I�L$I�4$H+�����Hi��H�����H9���H)��Ⱥ�Mb��H��`�����H��`�����)�Hc�H��h���I���H��H����`��E���E����E1�M���L���>��A�p~��H���L���	����H����AA9�DN�H���I��L��1�D���"����T�������H��H������H��H�����M��t6I�D$I�$H��H!�H���t!H9��PHi��H9�|H9ָLD�H�� ���H��tFH�CH�H��H!�H���t3H������H9��Hi��H9����|H9ѸHE�H�� �����T��������~@E���E���$	�������u��H���L���������������DžT���D�����E������L������RI�Gx�XP���7�P���<��8����������������������H�bD����D�0���HD����E1䉝L����������0���H�����HDž����fDH��@����b���H��(�����
H��(�����H�� ���L	�H��@�����H��T���H�� ���������
��H��@����H��(����-H��(���I��H�@(H��(���I�G8H����L�(M��t(A�~A9}u�fDA9}�~M�m(M��u�H��@����w���H��(����i���E���HDž ���E����fDH������t}H������H�0H�HH�����H���t~H�������]H������H�H�@H���t\H���tVH9��1�4H��H��H+�����HDž(���HDž@�������H������H��tH�H�@H���tH���u�HDž(���HDž@���D��L���E����D��8���1�E������1�H��@�����H��(���H��@�������H��(���E���H��@���H��E�������HDž`���H��`���HDžh���P����f�H��(�������H��@����:H��@���I��H�@(H��@���I�G8H���
���A�VA�vA�~�����É�T����������H��@���Dž0���������H��H������n���H��(����`���A���HDž ��������������������������FI�WI�O�����H�5_������A�VA�v�C���Å���H�� ���A����DžT����豿�����IA�UI�u�������������T�������H��@����`1�����ʿ�����B��u����߉�1�調�����"A�VI�v���C��A�N��T����������������8s�P���H������������H�����F��H���H��@���Dž0���H��������H��(�������A���HDž ������p������������HDž ����R���f.��������L���D��8���E���$���I����HP��8��������P����
��L�������
����������������D�0���D������8���HDž������0���H��HD����E1䉕���H���������H��ʚ;H��H+�����:���f�E1�L��H�����E1�H���E��M��I��I��$�B�<���xA9�H��DL��q���I��E9�$��L��M��E��H�����I��E������A������fD������6���@H��(��������A������������������u���H������H����觻��H�E�H������H�U�H������H������H�H�QH�����H�����f��f��H*��H*��^E��X����I��I�?���/��A�VI�vM��I�GH��1�H���������T����!���@E1�������T���HDž ����������蒽��D�E�����T��������T����l���DH�� ����n���H�� ���H�HH�H��H+������4���Ic��I���;��������H�����H��S㥛� A���H�����H����&�.H��H��H��?H��H��H)�H������H�H�E�Hi�ʚ;H)�H��H��H��H��?H�E�H�� ���H���H�����H��H��H)�H��@���H�M�����H��(�����HDž@����H���f.�H��\���E1�H���L������H�����H��X���H�����I���L���M��D�����H������Sf���X������?D���Z���I���H�����D���D�D��X���Dž0���A���I��D9���I���F�$�E��x�H��D�������t�L�����H������D��Dž\�����F�����T������X����c���D��D�0踾��H��@���Dž0����m���H��(����_���A���L���D�����L���������������������^HDž����HDž ����k���DL���L������D��������?���H��@���HDž����HDž �������H��(����
H��@���H������H�� ��������k����ߋ�����輽��H���H��@���Dž0���H���������H��(�������A���HDž ������f���������������I�O0I�W(H�Ƌ�����J��f.���8���1ۅ��
�����Dž����	���A�������H������H��t4H�H�@H��H!�H���t!H������H9�#Hi��H9����|H9�t������������H������H��t4H�H�@H��H!�H���t!H������H9�Hi��H9����|H9�t���l���H��d!H���H��u��H�����H��d!H��t�H��H��a!H�8���I��H��d!H��u'H�����	H���[��H�\d!H��t�H��L������H�5a�H��1�賵���~����8����p���H�5#��8��f�H�����H������H�]�D�����H����H����&�.H��H��H��H��?H��H)�H��S㥛� L�,0Hi�ʚ;H)�H��H��?H��H��H)�H�����f���H����H���}���H��~x�D��E�<1��<2�O��L�����uŋ�8�����t���������H�����L��p���L��p���DžL���H��x���Dž8����x����t��Y����8t
�O����8u��E���D������Dž������f�I�Wx�B��tu���tp��8������z��������������ۉ�L���HDž����DE�D�0�����0���H�/�HD����E1�D�����H������D�f�H�B@H��@�����8������qDžL�������I����B��tr��L��������������������ۉ�8���HDž����DE�D�0�����0���H���HD����E1�D�����H�������@H�B@H��(�����L������,�����L���D�����E1�HDž�����������8����M�DžL���������8������DDž0���A��H���Dž��DžL���H������d���@Dž0���A��H���Dž8���Dž��H������,���H�@@D��L���H��(���E��tw��L���E1�HDž�����������8����0�H�@@D��8���H��@���E����DžL������H�������Dž0���Dž��H�����H�����H������DžL���L��p���Dž8���H����H����&�.H��H��H��H��?H��H)�H�Hi�ʚ;H��p���H��S㥛� H)�H��H��?H��H��H)�H��x����T�D�����E���uH�������>�H������H�H�@H��H!�H����=�����I���H�����D��D���
��I�GH���hH�M�dH3%(�dH�e�[A\A]A^A_]�H��������Dž0���Dž��DžL���H������o��8���E1�HDž�����������L����n�H9����H+�����HDž(���HDž@������I�GhI�wE1��ALJ�����I�ILJ����蠳��I�G ��
�[���.HDž(���DžL���HDž@���HDž����DžH���������H�� ���贯��H������H��H��S㥛� H�4H�����H��H�����H��?H��H��H)�H�H��?B~.H��4�ׂ�CH��H��H��H��H��H��?H)�H�Hi�@BH)�H�u�H�M����D�����E���.�I�O0I�W(�aH���������DH������A�����^�����n�H)�H�L���A���DžL���H�HDž@���H��(�������DžL���H�HDž(���H��@������I�?���j���I�G���������
Hc�����H��L�,�L���к��H����I���J�T(�J�(�����H��H9�u�Ic����H������uyH�����H�E�H�E�H������H��������蛰��H�5$��8�����������������������I�WI�O��0������������H��������H������荭��H������H��H�4H�����H��H�����H��?H��H��H)�H�H��?B~.H��4�ׂ�CH��H��H��H��H��H��?H)�H�Hi�@BH)�H������H�u�H�M�H������H�E�H�� ���H���H�������������xyI�WI�OH�����������߷��I�W(I�O0�	���������xI�WI�O�����H�5��请��I�W(I�O0��I�W(I�O0���3���H�5���8赬������I�W(I�O0녋�8���D�����E1�HDž�����������L�����f.��ۮ��H�5h��8�]����Ȯ��H�5Z��8�J���f.������H�=��O���H��(���H������H�� �����耮��H�5��8�����m���H�5���8���ff.�@��UI��M��H��AWAVL��p���AUI��ATI��SH��H��dH�%(H�E�1�E��uH�E ������H�EL��H����L��H�=��L��p���H������H�EHDžx���L������H������HDž����L������L������HDž����D������H�������V���H�]�dH3%(�IH�e�[A\A]A^A_]�@L��l���H��P���L��H������L��D��D���L��H���Džl����s���L�� H��H������H��X�������H��X���L��P���H��8���L��H���D��D�����L�����H��X����
D��D���L��L��H���L��P����[���L��P���L��H�����D��D��������H��X���L����)���L��P���L��H�����D��D���u�Z���f.�L�����I��u
I����E1�1�L�ֹL��D��D���L��H���L��P������1�1�L��P���I��H�L��H���D��D���H�������u�x
uA���
D��u�xuA���DH�@(H��u�Ic�L�<�1�I�~ ��H�H�EH��H����L�����H��H�����H�EHDž���H�� ���H��X���L����H��(���H��8���L������H��0�����l���L�������D���I�GH��H%�L�����H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�L$H��H����t�����t�4�H��8���H�E(I���D��@���H�������F���I����:���L��L��H����H�=F���1���H������f�A���
E1�A����E1��������D��H��tFH��t0H��tSH��@��tE@��t3���������@���@1��DH���H��u�����H;�U!tH;U!u"��[����[�H���ۦ��H�5��H��H�T!H�81�萦����UH��SH��(dH�%(H��$1��D$��~aH��H�t$H�8������tMH��H�\$����H�T$H�މ������x@�T$�t$H���m���H��$dH3%(u0H��([]�H���ث��%�D$�踨��H�5���8�:���蕩��D��UH��SH��(dH�%(H��$1��D$��~aH��H�t$H�8�Q�����tMH��H�\$�P���H�T$H�މ�聴����x@�T$�t$H��譤��H��$dH3%(u0H��([]�H������%�D$����H�5+��8�z����ը��D��H��Q!SH�=��H�0�5���H�&R!1�H����H��H�5��H�����H�;�����H��H�5�����H�;�����H����H�5n��ݰ��H�;�����H����H�5"��°��H�;�H�C��H�5A��ǰ��H�;H�5h�訴���H�=,��ǵ���H�=�H��R!诵��[H��R!�fD���w������AWAVAUATI��UH��S��H��HdH�%(H�D$81�H�=�R!t��������賰��H��R!H��u%L�-�D�L������H�|R!H��t�H�xR!H�aR!H��u%L�-��D�L�����H�<R!H��t�H�HR!H�!R!H��u%L�-��D�
L��諴��H��Q!H��t�H�R!H��Q!H��u%L�-��D�L���s���H��Q!H��t�H��Q!������Hc�A�L�t�腪�����U�����L�uL�}����L�U���FH�m�9������I������H��N!L�T$H�$H�0H��N!H�8蟩���L�T$H�$H��HD�RE1�L��I��PL��L��L��SAU�
���H�� H�L$8dH3%(��H��H[]A\A]A^A_�fDA��I���`���1ҹL��L�$L�D$H�5�P!�ܱ��L�l$H�\$�H�T$(H�D$ I��$L�$LD�H��$HD�H��$HD�H��$����H���:������fDL�����=���I�����������������H�mN!SH�=��H�0�e���H��M!�H�z���H�5��H��H��`���H�;[�����H���H�5g��$���@��H����~AH��I��H����u)jA��L��jA�jj萧��H��(���t���t���H��H�P�ff.���H��(H��1�dH�%(H��$1�H�L$H�T$�D$�F���H��$dH3<%(uH��(��֣��fD��H��(H��dH�%(H��$1�H��L!H�L$H�T$�D$H�8�ަ��H��$dH3<%(uH��(��n���ff.���UH��SH��(dH�%(H��$1��D$� ���H�XH��贩��H��H�L$H��H��K!L�D$H�8���H��$dH3%(u
H��([]������H��K!SH�=��H�0�E���H�nK!1�H���H��H�5�H��#���H�;�H�4���H�5L�踨��H�;1�H�L���H�5F���H�;�����H�����H�5��ժ��H�;[�H�mJ!H�5��鹪��f����f.����A�������AWAVAUATUSH��H��H�/H��耨��H�CL� M����L�sL�-]K!�L�}�נ����8L��������tT�EL��L��H��CI�D$H�C A�D$�C(���H��x�H�@H�x;H��H�D[]A\A]A^A_��M�d$(M��u�H��1�[]A\A]A^A_�DH��H��[]A\A]A^A_�:���f.���ATUH��SH�ĀdH�%(H�D$x1��G����H�D$H�\$ H�D$XH�D$H�KH�D$`H�D$H�L$PH�D$h����1��	@H�LPH��tL�L�H��H�� u���H�{�{���H���s���H�xH�|$ ����H�D$ H�|$�@�D$0@��uv號���D$4H�D$ �x�8���L�d$H�l$E1����L��H������H��I!H��H�=���H��H�D$(���H��tAH�T$xdH3%(uH��[]A\�D����눐苦�����ԟ�������L��H��H�=���3�����UH��SH��H��(dH�%(H�D$1�H�<$H�D$莥�����g���E1��H���H���R���H��H!H��H�=H��H�D$�$���H��tH�L$dH3%(�uH��([]�H��H��H�=X�葛������ff.����UH��SH��H��(dH�%(H�D$1�H�<$H�D$�ޤ����跩��E1��H���H��袞��H�;H!H��H�=�H��H�D$�t�����tH�L$dH3%(�uH��([]�H��H��H�=������]���ff.�f���USH��H��H�?�+���H�hH��迤��H�CH�H��t,�SH�s�}�ħ����x�H��[]�@H�[(H��u�1�����USH��H�GH�H��tBH���DH�[(H��t/�SH�s1�A�H�}������x�H���[]��H��1�[]�ff.�@��S��x8H��u"�1Ҿ�Q�����x*H�߉�[颧��f���uH�>�Ú�����Һ1��c����>���H�5��8�����H��F!SH�=�H�0腫��H�E!�����H�r���H��H�5��H��`���H�;�H����H�5b��E���H�;�H����H�5b��*���H�;�����H�{���H�5�����H�;[�H�_���H�5\�飢����H��H���WH�H�0A�1�����H��H�����H��(dH�%(H�D$1���xUuB��H��H�L$H�$H�D$�I���H�L$dH3%(u&H��(�@H���t�H�N��t��1���辛��ff.���H�w�?1��Ϡ��ff.�@��H�w�?1��_���ff.�@�����H��H����������USH��dH�%(H��$�1��D$nH�l$����H�XH��袡���{H�T$H���ҙ����x=�t$��nw%H�����H��$�dH3%(u)H�Ę[]��D$n�n��H�s H�=���A���謚��ff.����USH��dH�%(H��$�1��D$nH�l$�^���H�XH�����{H�T$H��袥����x=�t$��nw%H���M���H��$�dH3%(u)H�Ę[]��D$n�n��H�s H�=P�董�����ff.����USH��dH�%(H��$�1�軟��H�XH���O���H�{ H��t%�p���H��$�dH3%(u]H�Ę[]�H�l$�{H�T$�D$nH���ä����x4�t$��nv
�D$n�nH���!���H�����H��H�C ��;���H�s H�=z�転��ff.���ATI��USH��H��H��dH�%(H��$�1�H��A!H�0����H������=H�������L��I��诞��H�XH���C���f�H��$��l$`H�D$@H�D$@H�-���H�D$H�D$PH�D$(H�D$d�D$tH�D$X�CH�D$�D$Ƅ$�H�D$HH�D$ H�D$0�D$8H�D$P�$�f.��<$�؛����tXL��H��H���f������t�H��$�dH3%(�u=H�Đ[]A\�DH��谝��H�XH���D����k���H�s H�=���,���藗��H��?!H�5��H�81�迓��ff.�@��AWAVAUATUSH���H�T$dH�%(H��$�1����t�KH�.@!H�H�D$ H�D$(H��$�E1�H�l$0H�D$H��$�L��$�H�D$H�|$E��A���Ϝ��H�XH���c���H�D$DŽ$�����H�D$8H�D$HH�D$�D$@H�D$XH�H��$��CL��$�HDŽ$�H�D$PH�D$`�D$hHDŽ$��D$0�&fDA��u	E�����|$0�P�������H��H�5n���H��膜�����uY����D�0A��Zu�A��uĿA���?������H�H�D$ �������H�FH�D$(��������1����H�T$`H��w0A���)�A���������A���Ҝ�������$������$����H���4H���GH��$��UHc�$���L�d-覠�������H�|$ t^H�`@!H��u H�-���H��跢��H�@@!H��t�H�L$(�H�|$ H��L�d$pH��H�L$xH�L$pEډ����I��H��$�dH3%(L����H���[]A\A]A^A_�H�S H�5��D���:���H��=!�H�5��H�81�蝐����H��=!�H�5�H�81��~���H�w=!���H�5!�H�81��_���H�X=!�H�5D�H�81��B���H�;=!�H�5��H�81��%���H�}1�芒��H�=!��$��H�5��H�81����豓�����AWAVAUA��ATI��USH��H���dH�%(H��$�1�H��t
@��� H��蘎��H��H�l$@�1�H�D$BH�}H�Ef�H��f�L$@H�SH��l��H�sH� �H���H�����1Ҿ��D$���A�ƅ��qL����-���H��I���˜��L�xL���V���E�����D$H�T$H�t$ H�l$ H�=3���L�d$0�D$(����T$���"����H��$�dH3%(L����H���[]A\A]A^A_�DH�H�ƒ�H������H�{����H�S�� tH�S�:���������H�sH����H�}�l�Ŗ������T$H��D��葛����x%��D���`�����xvH���$���I�G �:����Ð��L��(虙��H��H�5�����X���蓑��H�L;!�lH�5��H�81�趍��H��H�=e����L���O����|$�����a���L��(�7���H��H�5,������fD��1�����D��H�5:!SH�=$�H�0腟��H�f:!�H����H��H�5��H��`���H�;1�H���H�5���H���H�;1�H����H�5���0���H�;1�H�T���H�5������H�;�����H����H�5]����H�;�H�N���H�5�����H�;�����H���H�5v��ǘ��H�;�����H���H�5)��̘��H�;[�����H���H�5�鰘����H��H��1�dH�%(H��$�1�H�L$H�T$�D$n�&���H��$�dH3<%(uH�Ę�趏��fD��H��H��dH�%(H��$�1�H��8!H�L$H�T$�D$nH�8辒��H��$�dH3<%(uH�Ę��N���ff.���UH��SH��dH�%(H��$�1�����H�XH��蜕��H��H�L$H��H�b8!L�D$�D$nH�8�Ŋ��H��$�dH3%(u
H�Ę[]��Î�����钙��f���H�
8!SH�=�H�0����H�V7!�H����H��H�56�H���H�;1�H�����H�51��ؖ��H�;�H�	���H�5��m���H�;1�H�!���H�5��襖��H�;[�H�=6!H�5��鉖��f�SHc߉��H��uH�D[�@H��[����ff.�@AUI��ATI��U��S��H��(dH�%(H�D$1�H��H���Q���H��t<I��H�
�L��1�H���0�̈��H�L$dH3%(u*H��([]A\A]ÐA��L��H���L��01�蔈�����=���ff.�f�H�t	1��fDH��H�GH� tH�G�H��1�H�5���X����H���ff.�H�t	1��fDH��H�GH� tH�GH�H�HH��1�H�50������H���f���USH��H��H��7!H��u H�-��H���#���H��7!H��t�H��H��H��[]�֔��fD��USH��H��dH�%(H�D$1�H�|7!H��u H�-���H���Ù��H�\7!H��t�H��H���|���H��H�$�Ѝ��H�$H�T$dH3%(uH��[]������H��dH�%(H�D$1��c���H��H�$臍��H�$H�HH��tIH��ulH�PH� u.�����HE�H�t$dH34%(u8H����H�P��f�H�PH� tH�P�:��HE������H�3!�H�5l�H�81��:���f.���H��dH�%(H�D$1����H��H�$跌��H�$H�HH��u7H�PH� u$H�t$dH34%(�H�Du/H����H�P��H�k2!�H�5�H�81�襆���`�����H��dH�%(H�D$1�����H��H�$�'���H�$H�HH��u7H�PH� u$H�t$dH34%(HcH�Du/H����H�P��H��1!�H�5G�H�81������Љ����ATUH��SH��H�25!dH�%(H�D$1�H�4$H��u-L�%;�f.��L���C���H��H��4!H��t�H���,����H��H��H��虍��H�T$dH3%(u	H��[]A\��;���ff.�H��dH�%(H�D$1�����H�Ǩt0�+���H�|$��D$�x���H�T$dH3%(uH����������Ԉ��@USH��H��H�(4!H��u$H�-K�@�H���c���H�4!H��t�H��H������H�Ǩt蠖��H��[]�f�談��H��[]�@��H�����H��H�H�D��USH��H��H��3!H��u$H�-�@�H���ӕ��H�|3!H��t�H��H��茐��H�Ǩt����H��[]�f�����H��[]�@��H�����H��H�H�D����ATUSH���`���H�߉�����H��A���K�����uqA��
ukH�HH��uDH�PH� u1H�1���t���tHc�H�|H�� []H�tA\���@H�P��H�/!�H�5��H�81��U���H��.!H�5��H�81��=���ff.�f���AVAUI��ATI��USH��H��H��L�D$�J���L��Hc��蝄��L���H�l-Lc�D��訋��H�|$Lc�苈��H�,2!H��u(L�5)���L���3���H�2!H��t�H��H��K�l-H���T���H��1!H��u!L�-����L����H��1!H��t�H��H��K�l$H������H��1!H��u!L�%����L��賓��H�t1!H��t�H��H��H���ٓ��H�R1!H�l$H��u!L�%`���L���s���H�,1!H��t�H��H��H��虓��H��H��[]A\A]A^�f���ATUSH�����H�ǨtA脓��I��H������H�߉�������"�…�����t"A��uH��[]A\����fD�c���I���H�-!H�5(�H�81��F���fD��ATUSH���`���H�ǨtA����I��H�����H�߉������!�…�����t"A��uH��[]A\�N���fD���I���H��,!H�5��H�81��ƀ��fDUSH��dH�%(H��$�1�H�t%H��$�dH3%(��H�Ę[]�@H��H�GH� ux�oH�l$ H��.H��
)$�@�D$��~��H��tZH��H�5T�H��1��F���H�l$P�t$H�=��H�����H��H�������\���f�H�G�f.��H�5H�H��輄���腃��DATUSH��`dH�%(H�D$X1�H�t!H�L$XdH3%(�H��`[]A\�@H��H�GH� ��H�L�d$H�l$�H��H�T$�@L��D$��}��H����L��H�5O�H��1��A���H�u�L���}��H��tVL��H�5 �H��1�����H�l$ �t$H�=s�H�����H��H��诅����$���DH�G�K����H�5�H��������H�5�H���t����^����:���f.�ATUSH��H��0H�WdH�%(H�D$(1�H��t;1�H��t#H�L$(dH3%(��H��0[]A\�fD�[�����f�H�GH� tH�GH�L�d$H�l$�L��H��H�D$�x|��H��tSL��H�5��H��1��߁��H�u�L���I|��H��tDL��H�5��H��1�谁����C���fD�H�5�H���\����f.�H�5ͿH���q�����
���f.���AWAVAUATUSH��H��dH�%(H��$�1��@�H�Ǩ�e���I��H��E���r���H�H�|�Ǝ��H��H������H�H�|诎��H��I���D�H�|$hH�D$h�e���H���݈��H�=A�H��1�蜈��D��H���q|��H����H���|��H�5��H��H��1�茀������A���D�����2��H�5��H��1��W���1�D��H�5ԾH���C���A����A��
��H�5@��H�����H�|$h�1��H��H��膄���H�5��H���€��H��H��$�dH3%(��
H�ĸ[]A\A]A^A_�fD�~��I�����1�D��H�5p�H�����������H�ߺH�5��O���D�����H���nD��H�5�H��1��Z��A���!���H�]�E��Jc�H�>��@����H������H�5��H��1���������n�����)��H�5�'!D����<t!H���������y���H���H���i���H���h���H�5��H��H��1��~��A���a���f.���t[��)�����K���A�� A���=���H���Jc�H�>��H���`z��H�5M�H��H��1��<~���"����A��uzf.�H�|$hH�������������fDH���z��H�5��H��H��1���}������A��A��
�����H�g�Jc�H�>��f�A���w���H�T$hL�jI��g�d���H�BH� tH�B�H��hD�`D�x,D�p0�L$^�H�L$]�H�L$_�H�L$�H�L$�H�L$(�H�L$D�H�L$@�H�L$$�H �L$<�H$�L$4�H(�L$,�H4�L$�H8�L$�H<�L$8�H@�L$0�HD�L$�HH�L$�HL�L$L�HP�L$P�HT�L$H�HX�L$ �H\�L$�H`�@d�L$X�D$T����H�
|���Hc�H�>�������H�51%!D���!����@H��1�H�5����e|��D���M���H��t(H���`x��H�5M�H��H��1��<|�������D��H�5��H��1��|������H�5!$!D��������@Ic�H�D����H�5$!D���y����@H�|$hH�������fDH�|$hH���������fDH�|$hH������{���fDH�D$hH�x�I���H�PH� tH�P�*���.�����H�5�H��H��1��H{���=���H�D$hH�x����H�PH� tH�P�*���f���H���bH���w��H�5�H��H��1���z�����@H�D$hH�x�����H�PH� tH�PH�*���\���:��H�5[�H��1��z��H��H�5O�H��1�H�� �z���}���H�D$hH�x�A���H�PH� tH�P�JD�BH��1��H�5
��Ez���H�5�H���{���&���H�|$hH�GH���H�����H���'������H�D$hH�x����H�PH� tH�P�H�5��H��1���y������H�D$hH�x�����H�HH� tH�HH�l$p�1H�=��H���b�H��H���G|���|����H�5��H���>z��@����H�]�Hc�H�>��H�5�H���z���T$^H�54�H��1��)y���T$]H��1�H�5)��y���T$_H��1�H�5��x���H�5�H���y���=A����A����A���XA���(A����A�� ����=��E���������D$���CD�D$H�5�H��A��Mb���H�и��i�@BA)�1��Ux���D$D�D$H��H�5�����H�����i�@BA)�1��$x���T$(H��1�H�5���x���T$DH��1�H�5���w���T$@H��1�H�5����w���T$$H��1�H�5x���w���T$<H��1�H�5n��w���T$4H��1�H�5b��w���T$,H��1�H�5Y��w��D��H�5g�H��A���H�G���i��A)�1�E���bw��D��E��H��A��H�5/���H�1���i��A)�1��3w���D$D�D$H��H�5�A���H����i��A)�1��w���D$D�D$H��H�5ηA���H����i��A)�1���v���T$8H��1�H�5۷�v���T$0H��1�H�5Ϸ�v���D$D�D$H��H�5����H�����i�@BA)�1��tv���D$D�D$H��H�5϶���H�����i�@BA)�1��Cv���T$LH��1�H�5x��.v���T$PH��1�H�5t��v���T$HH��1�H�5l��v���T$ H��1�H�5b���u���D$D�D$H��H�5J����H�N���i�@BA)�1��u���T$XH��1�H�55��u���T$T1�H��H�5.��u��I��h�����A�U�H�5&�H��1��uu���j����
H�5(�H���,v�������H�5��H���v������H�5ԴH���u������H�5��H����u�������
H�5{�H����u������H�5R�H���u���l����H�5'�H���u���S����
H�5�H���}u���:����H�5ֳH���du���!����H�5��H���Ku�������H�5��H���2u������H�5Y�H���u�������H�50�H���u������H�5�H����t�����H�5��H��1��t�����A��H�5T�H��1���s���Q���H�
5�H��1�A���H�5���s��1��,����H�
�H��1�A���H�5߳�s���,���H�
ڳH��1�A��H�5���xs���,���H�
��H��1�A��H�5���Rs���,���H�
��H��1�A��H�5m��,s���,�R���H�
L�H��1�A��H�5G��s���,�"���H�GH� tH�G�H�l$pH�t$d�H���D$d�Im��H��t}H��H�5��H��1��r�����H�5�H��1��r����@��H�5|�H��1��~r���:����H�5�H���5s������H�5��H���s������H�5��H���s���(���q��f���AUATLc�UHc�SHc�H��H�!H�L$H�8�Uq��H�|$I���xs��L�D$K�L$L��H�T-H�t�|�H��L��[]A\A]�ff.���H��H�����"1�H��H����w�����H��H������!1�H��H�����v�����UH��H�5��SH��H��H��dH�%(H�D$1�H�$�w��H��uc1�H�������H�߃��$tD�~��H���D$�}��1��
�H���Rv��H�L$dH3%(u)H��[]��o��뺐H�Ǩt	�d~���f��{o����4p��@��AUH��M��ATI��UH��SH��dH�%(H�D$1��m��H��lj���m��L��߉Ɖ���t��H�|$�A��1�I��������D$�E|��D����H���u��H�L$dH3%(uH��[]A\A]��o��fD��AUH��M��ATI��UH��SH��dH�%(H�D$1���l��H��lj��5m��L��߉Ɖ��Gt��L��A���<x��H��uGH���on��H�|$��D$�{����D���H����t��H�\$dH3%(uMH��[]A\A]�f��t�t�H���}���fDH�H�у�H��u�H�x~�H�H�� tH�H���n��ff.���AUH��M��ATI��UH��SH���l��H��lj��Ul��L��߉Ɖ��gs��L��A���,�H��D����H��[]A\A]�#t����H�E!SH�5P�H�H��!H�8��{��H��!�H��H��H�5��H��vv��H�;1�H�Z�H�5���^v��H�;1�H��H�5���Fv��H�;1�H�Z�H�5J��.v��H�;1�H�b�H�5:��v��H�;1�H���H�5���u��H�;�H����H�5���v��H�;1�H���H�5o���u��H�;�H�����H�5_���u��H�;1�H�4�H�5G��u��H�;�H����H�51��u��H�;1�H�1�H�5��eu��H�;�H���H�5��ju��H�;1�H��H�5��2u��H�;�H�����H�5׮�7u��H�;1�H���H�5���t��H�;�H� ���H�5���u��H�;1�H���H�5����t��H�;�H�m�H�5׷�t��H�;1�[H����H�5��t������WH�w�?��h��ff.�SHc߉��H��uH�D[�@H��[�v��ff.�@UH��H��SH��H���Lk��H��H��H��[H��]��l���AUH�GATUSH��L�/I�H9�r8I9�r3I��H�_�f�I9�r�{�H��H����v���{��m��I9�s�H��[]A\A]�@USH��H��H��!H��u$H�-��@�H����x��H��!H��t�H��H���|s��H�Ǩt�y��H��[]�f��j��H��[]�@��H�����H��H�H�D��USH��H��H�X!H��u$H�-A�@�H���3x��H�4!H��t�H��H����r��H�Ǩt�px��H��[]�f��{i��H��[]�@��H�����H��H�H�D��USH��H��H��!H��u$H�-��@�H���w��H��!H��t�H��H���\r��H�Ǩt��w��H��[]�f���h��H��[]�@��H�����H��H�H�D����AUI��ATUH��SH��H���4���H���A���7g��D��L��Ɖ��o��H��A�����9�t1�H��[]A\A]�@H�������¸A9�u���f���USH��H��dH�%(H�D$1�H��!H��u H�-��H���v��H�l!H��t�H��H���Lq��H��H�$�j��H�$H�T$dH3%(uH��[]��h����H���s���H�HH��uH�PH� tH�PHcH��H�D�H�D!�H�5��H�81��~d��ff.�AVAUATI��UH��SH���z���L��A�����L��A����A��)utA��2unH�xugH�PH� uT�o
f�)M�B�
�E1�CH�Cf�Cf��EfoU%��S=��u�E�C[]A\A]A^ÐH�P�H�s!H�5��H�81��c��f���H��XdH�%(H�D$H1�H�T$ H�������D$H�L$HdH3%(u
H�DH��X��(g�����SH��PdH�%(H�D$H1�H�\$ H��H������H��1�E1�j�
A�H�߾�r��ZYH�L$HdH3%(uH��P[��f�����SH��`dH�%(H�D$X1�H�\$0H�t$H���U���H��E1�1�jA��
H�߾�2r���H�D$�D$0H�DH�D$XZH���t��H�L$XdH3%(uH��`[��%f��D��AUATUSH��H��8dH�%(H�D$(1��Z���H�߉����H��A����������A����H�x��H�PH� ���D�j�H��Rf�$1�H��E1�1�A��H�D$
H��T$��E
f�Ej�5q���E1�1�f�t$�H��I��A��D�l$H�$�p��H�TL�d$ H�T$(H�D$0_�AXH�t$�hs��H�L$(dH3%(u1H��8[]A\A]�DH�P�(���H��!H�51�H�81��a����d��f���USH��H������H�߉������uI��uDH�K!H�-�H��u ��H���3r��H�$!H��t�H��H��H��[]��l��H�?!H�5ЪH�81��~`��ff.���ATUSH�����H��A������H�߉����A���ƒ�u'��t#H�xtTH��!H�5��H�81��`��@��#u߄�t�H�xu�H�PH� tH�PH�:H�r�;n��H��t�[]A\�H�PH� tH�PH�:H�r��n���֐��AVAUI��ATI��USH��H��H��L�D$��`��L��Hc���-a��L���H�l-Lc�D���xi��H�|$Lc��e��H�!H��u(L�5����L����p��H��!H��t�H��H��K�l-H����p��H��!H��u!L�-����L���p��H��!H��t�H��H��K�l$H���p��H��!H��u!L�%8���L���Cp��H�d!H��t�H��H��H���ip��H�B!H�l$H��u!L�%���L���p��H�!H��t�H��H��H���)p��H��H��[]A\A]A^�f�AUATLc�UHc�SHc�H��H�=!H�L$�a��H�|$I����c��L�D$K�L$L��H�T-H�t�C���H��L��[]A\A]�D��AUH��I��ATM��UH��SH��dH�%(H�D$1��_��H��lj��U_��L��߉Ɖ��g��L��A��A��tK�vo��H�|$��D$��m��D����H���$���H�L$dH3%(uH��[]A\A]�f��K`����a��@��SH��H��`H�t$H�|$dH�%(H�D$X1��E`��H���`��H�T$f��D$ )D$H�z)D$0H�D$@�D$H��H�JH� uq�o	H�q��I)L$0H�t$@�L$Hf��
ur�oT$8H�|$��D$ )T$��l���2�)�
H���"���H�\$XdH3%(u(H��`[�@H�J�H��	!H�5ܦH�81��:\���_��H��	!H�5g�H�81��\��ff.�f���SH��@dH�%(H�D$81����@H�H�^H�$���H�D$H���^��H���a_��H�|$H���:H�$H�D$�D$f�H�xH�D$)D$ �$H�PH� ��H�H�RH�D$ H�T$(f���@H�� f�\$�D$H�D$)D$ H�x�H�PH� ��H�H�RH�D$ H�T$(f����H�� H�|$��D$�0k��1���H�����H�L$8dH3%(ugH��@[�fDH�FH�D$���������g���H�P�����H�P�]����H�|$�]��H�$���� ^��H��!H�5�H�81��HZ��H��!H�5Z�H�81��0Z��H��!H�5�H�81��Z��H��!H�5h�H�81��Z��AWAVAUATUSH���H�t$HH�T$H�L$@L�D$8L�L$ dH�%(H��$�1�H�D$X�ec��L�pL���c��L����g��H�|$H�$�D_��H�|$H�:i��H�l$8I��H��t
@�����~_��H�H�D$8H�ف� ��H����Hc�A��H9���m������H�hH��uH�h 1��`��H�D$XE���$�C�L�t$(H�D�L�|$0H�D$H��$�I���,H����H����1�L����Z���L��I����Z���L��I���Z��H��$��$L����@Z��L���߉�A���b��L��L�t$A���1^��H��$�H�|$XH�PL�oH��H��H�ZI�t�\��H�D$XH�xH� tH�xJ�/H��1�H���]��D��$�H��H��$�D��$�H�@��H��$�fo�$�	H��$�H�PH�pH� tH�pH����H��H;l$��H�]H�
4��H�D�H����h��I��H����H��� �����I�E���H�]H��H�ڃ�H�������H�ف� ����H�X�����H��$�H�|$1�H��t@���!�i���ŋ�$ ���@��E�H�|$@t
H�|$@�7Z��L��L�d$`�Ja��I�GH�$H�D$pH�D$�<fD��$ ����M�.�Y����8L����W������L���`��H�D$@f�H�C0))C)C H��t0H�PH� tH�PH�xH��$�Hc�H9��k����$�HDŽ$�H�$L��$�I� tI�GH�D$`I�GH�D$hH�D$XH��t4H�PH� tH�PH�xH��$�Hc�H9���j����H��$�L���/`��A�FH�t$1�H�����H�=v�H�\$x�D$p�l$t�tU��H�������H�T$XH�$H�T$pH�|$HL��H�T$X�zV��H�$H�@H��sH�DH��$�dH3%(��H���[]A\A]A^A_�DH�yH���S^��H;l$�d���L�t$(L�|$0H�\$H�D$8H��$�H�D$8���f�H��!H��u!@�H�=a��_f��H��!H��t�1�1�H��H����\��I��H��!H��u"D�H�=��f��H�`!H��t�1�1�H��H���\��I��H�:!H��u"D�H�=Ì��e��H�!H��t�1�1�H��H���D\��H��$������V���8��u]H�|$ uaH��!���H�|$�W�������H����R�����H��$�����H�_!H�5 �H�81���S���V���8H�5���T��H�6����W���`W����AWAVAUATU��SH��H��(dH�%(H�D$1��Y��I�Ņ���H�3H��tQI��A��uHH���H��u<H��D�e�N�4�L���b��L9�t;H�3H��t@��uH�H����H��t�DH��� H�5��H�81��R��Hc�N�$�H�l$H���/\��H��I�EH�D$�<�H�D$J�<8I���n\��L�pL���]��A�FH��H�ߺ�D$�W��M9�t%I�E u�I�E �DHc�H����[��H�ÐH�ٺ���	�H��H��!H��u#H�w��H���c��H��!H��t�L��H��H����c��H��H�L$dH3%(uH��([]A\A]A^A_��U��f���AVAUATUSH��H��dH�%(H��$�1��R�H��A�����H�߉��]�H��A���R�H��I����]��H�=+�H��1��]��D��H���[Q��H���2H���Q��H�5��H��H��1��vU�����*D��������H�5�H��1��KU��1�D��H�5ęH���7U��A���A��
�H�54��H����U��L���'T��H��H���|Y���H�5ɞH���U��H��H��$�dH3%(�xH�İ[]A\A]A^�fD���q`��H���8��H�52�H��1��T�������>������)��H�5U� D����<t!H���
��������H���H�������H����Z��H�5
�H��H��1��$T��A�����f.�������)����A��2����I�~����I�FI� tI�F�oH�l$pH�t$P�.H��
D�`)L$P�0N��H����H��H�5��H��1��S��H�l$`D��H����[��H����H��H�5t�H��1��fS���e����1�D��H�5 �H���LS��������H�ߺH�5���S��D���a��H����D��H�5��H��1��
S��A������A���hA��#����I�~�����I�FI� tI�F�oL�d$H��H�l$pL��)$��N��L��H�� H�=��[��H�L$H��H��H�5B�1��}R���|����H���xN��H�5e�H��H��1��TR������H���PN��H�5=�H��H��1��,R�������A����I�~���I�FI� tI�FH�H�l$pL�d$�I�t$�H�T$�@H��D$�JL��H���WH��H�5��H��1��Q���|$H����Y��H���H��H�5��H��1��Q��I�t$�H����K��H����H��H�5^�H��1��PQ���O�������H�5� D���������@A�������I�FH���������1�M�fL��I� tI�F�(H�5W�H��1�H����P��I9n�����DH�5� D���i��O���@Ic�H�D�K���H�5�� D���A��'���@I�~�Z���I�FI� tI�FH�L�d$L�hH��L��H�l$pH�$�|L��L��H�� H�ܔ�Y��L��H��H��H�5ٔ1��P������f�I�~���I�FI� tI�F�H�H��H�5��D�@1���O���H�5��H���P������D��H�5��H���O�����H�5��H���{�����H�5y�H���g�����T$H�5U�H���oO�����H�5��H���;������N�����H��A�j��H���fD��H��j��H���ff.����U��@SH��H���n�W��H���t9kv�kH��[]����WH�w�?�S��ff.���AUATUSH��H�_(H��vnH�w H��H��tbI�I��H�L9muH��H����I�t$ H�EH��H�ڃ�H��H��v%I�L$(H�H)�H9�wH)�H9�w
H��H��H�u�H��[]A\A]�ff.�@AWAVAUATUSH��H��	H�|$XH�t$@H�L$8L�D$`L�L$hdH�%(H��$x	1�H�D$xH�D$H��tH���"H�H�D$H�D$H�D$8H��t���H�H�D$H�߃����@[����$�	�ƒ�@��H�|$XD�H�|$8A��H�|$@���T$LA	���R��E��L�hL���kS��L���#Z������H��$p�\$L�D$H�H�D$H��$�L��$�H�D$(H�D$�H�D$ H��$�H�D$0�H���{H�t$H���M��L�uH�E tL�uH�|$xH���`H�t$��L��H�D$xH�PH� tH�PH�|$1��f�AD$�H�H�D$(H�|$I�D$,A�D$4H��$�H�D$H��$�L��H��$�H�D$ H��$�H��$��؃�E��DŽ$�E�L��$�HDŽ$��R��A�EH�t$01�H�����H�=��L��$���$���$��SG��H��H���wH���tyE����H�|$@��H�|$8�D�|$LA9�����L���D��E1����I��H�������H�|$�N��H������H�|$�vN��H�D$x���@��$�	���M�u�I����8L���T�����A�I���8�L$H���+��t	��Z��U���D$H���fDH;�$��&���H�|$�H�d$H�|$8����L�������H��������$���1�H�L$H���~����;�$�vo�T$H���R��u����f.�L��H�D$P�J��H�t$P���u���A���H���8������H�|$h�rL�5�� �wH�|$��H�d$H�D$�H�D$ �)���fDL����O������H����H����I��H�w� H��H�0�TG����$�Hc�$�H��$�H��$�H�|$XH�\�J���H��$�H��$�H��$�H��H�D$�,W��L��I���AS��H��$��D$H����H����H��$�H���vH�H����H�L$`L�t$L�,H�-�H��H�L$ H�H�{I9�IB�H��H)���T���S�s�|$H���,�H�|$ I��H��FH9CuL��H�����H�|$L���%S��H�H��$�H��H�ك�H��H����H�$�H)�H9���H)�H9���H��H��H���H�H���?���H��� H�5��H�81���C��fD��$��E���D���b���f�L����S��H���<���H�|$8��H��H�߃�H�D$� ����F������H�|$@�H��H�D$�����L�t$H�D$xH��$�H�D$xH��$x	dH3%(L����H�Ĉ	[]A\A]A^A_�H9C������I��I��H��� H��u ��H���kT��H�|� H��t�L��H��L���T��H�H�H��H�D$0H�CI9���H9���H�\$8L�cL�l$(�E�l$�H�T$�L��D���M�������D���Q��D���M����$�%�=���D��1Ҿ�/J��I��H��� H��u�H���S��H��� H��t�H��L��I���XN��L��H��I����P��H;\$0wH9\$(�P���H�\$8L�l$(L���L��������L������2D������H��� H�8�.E��D��H���O��I���_���H�5`���A��H��� H�5��H�81��wA��H��� H�5ɊH�81��_A���E��H����1��E��H��� H�5j�H�81��/A��H��� H�5��H�81��A�����H��A�j���H���fD��H��j���H���ff.����H��H��� H�5K�H�H��� H�8�R���H���H�5yH��H�c� ��L��H�=W� 1�H���H�53�L��H�=;� 1�H�Z��H�5���L��H�=� 1�H����H�5�m�rL��H�=� 1�H�B��H�5�m�VL��H�=�� 1�H����H�5^x�:L��H�=�� �H�'��H�5��L��H�=�� �H���H�5���L��H�=�� 1�H����H�5����K��H�=q� �����H���H�5����K��H�=R� 1�H�q��H�5���K��H�=6� 1�H����H�5���K��H�=� �����H�&�H�5��K��H�=�� 1�H����H�5ň�NK��H�=�� �H���H�5���OK��H�=�� 1�H����H�5���K��H�=�� 1�H�c��H�5���J��H�=�� 1�H����H�5|���J��H�='`�_F��H���wM��H�=!`H�a� �DF��H���\M��H�E� H������ �fD��UH�oHSH��H��H���WF���C@H�{p�'N��H��H��[]��<��f���UH�o`SH��H��H���F���CXH�����M��H��H��[]�<��fD��ATUH�oHSH��H����E���s<��u+�K@��u$L�cp�D�C@��uH��L���^D���S<��t�H���?<��[1�]A\����ATUH�o`SH��H���yE���sT��u+�KX��u$L����	f��CX��uH��L���C���ST��t�H����;��[1�]A\��SH��H�p�K��H�{H��?��H��[�!<�����AUATUSH��H�kHH���G�wH�W�OD�O(L�G PH�?�MC��A��XZ�?��H��D� ��D���K@D�k0D�c4��tI�C8H����C8t�F;��H��1�[]A\A]�f��+;��H���S���H��1�[]A\A]�fD�C<H�{p�@L���ff.�SH��H����J��H�{`�?��H��[�>;��ff.���H��H�=�]D��ff.�f���AUH�O@H�WATUSH��H��H�wH�?�{L�����>��D�(�����L�c`L���C���CX�kHD�kL��tNH�{@H��t�pM���CPL����CPt�-:��H��1�[]A\A]��:��H���#���H��1�[]A\A]�fD�CTH����-K�����=���8�����D��k�����H��� 1���;��ff.���SH��H�?�pE��H�{[�fE��fDPXH�5��H��H�<� H�81��:��f�PXH�5��H��H�L� H�81��:��f���H��H�5Q� �@��H��t�pH�x H���J�����f���H��H�5!� ��@��H��t|H�x"H�H �PH��H)�9�rJf�x uCH�H9�sR�x�uLH���
��x�u:H��H9�u�H)�x6H��lMH���-J��DH��� H�5߅H�81���9��H��������H��� �H�5��H�81��9��H��� H��lH�5��H�81��9��f�H��H�5E� ��?��H��tH��1��zvf�z 
uH�B(H������ff.���H�����H��1�H��t�:�tH�����R�����HD�H�����H���s���H��1�H��t�:�tH�����R�����HD�H�����H���3���H��1�H��t�:�tH�����R�����HD�H�����H����H��1�H��t�:�tH�����R�����HD�H�����H�����H��1�H��t�:�tH�����R�����HD�H�����H���s���H��1�H��t%�:��u�r��u�J��u�Bȃ�H�H�Ѓ�H���ff.�@��H���#���H��1�H��t�2��u�J��u�z���HD�H������H�����1�H��t���<H҃�H��H���fD��H�����1�H��t�%��=���HD�H��H���ff.�@��H���s���1�H��t�%��=���HD�H��H���ff.�@��H���3���1�H��t�8��HD�H��H������H������H��1�H��t$�:��u�r��u�J��u�z�HD�H�����H������H��1�H��t�:��u�r��u�J��u
�zH���H���fDSH��H�5�� �<��H��t H��1��zvf�z u�B$ȉ�[��&���fD��H��dH�%(H�D$1�H�t$���1҅�t�D$%�=�HD�H�L$dH3%(H��uH����49��@��H��dH�%(H�D$1�H�t$�>���1҅�t�D$%�=�HD�H�L$dH3%(H��uH�����8��@��H��dH�%(H�D$1�H�t$����1Ʌ�t2�T$��%�=
t>��%�=�t0f1Ҹ����HD�H��H�L$dH3%(uH���fD����L8��ff.����H��H�5A� ��:��H��t|�P��v\�H �΃�f��uMf��t*f��
uA��uY�@"H��f����H�D�f.���t�H�� H�5m�H�81��4��H��� H�5�H�81���3���6���H��� H�5`�H�81���3��ff.���H��H�5�� �,:��H��t$H��1��zv�R ��f���HD�H�������ff.���H��H�51� ��9��H��tH��1��zvf�z �HD�H������@��H��H�5�� �9��H��tH��1��zvf�z 
�HD�H����D���@��H��H�5�� �\9��H��tH��1��zvf�z �HD�H�������@��H��H�5q� �9��H��t	H�@H�������f���H��H�5A� ��8��H��tHc@H��H�D����@��H��H�5� �8��H��tHc@H��H�D��t���@��H��H�5�� �8��H��tHc@H��H�D��D���@��H��H�5�� �\8��H��tH�¸�zv	�B H�DH�������fDAWAVAUATUSH��XH�L$dH�%(H�D$H1�H��t1H��I��H��H���L��H�5�}�'8��L��I���4��I9�t/�����H�T$HdH3%(��H��X[]A\A]A^A_����3���
1�L����;��I����3��D�E��u�I����w�H����D�ED�eD�mE��@��A��
��@�A����A��t	E���`���H��H�5}�h7��H��H���3��H9��=���H�T$,H�޿�:�����#���H�S�E1�fA��H�K�E��t*D9ct$H��H9�u�M����H�D$L�81����E�����CA9�t��uǾ0��A���H����8���t$,��EH�@H�
���p�s�@f�fD�p�uD��L�}(I��u�EH�EH�E �O����0��9A���H���\8���t$,��EH�@�p�sf�H�
,��u�s�@fD�p���DH�5�{H��E1�E1���5��H��H���2��H9��h���H�T$0H�޿
�8��A�Ņ���E1��]DH�50{H��D�D$A���5��H��H�D$�42��H9D$D�D$�����H�T$0H�޿
D�D$�-8��D�D$������H�y�E1�fA��H�K�E��t(D9ct"H��H9�u��!���@E1��s���A�����E�����CD9�t��uɾ0���?���H���6���
foT$0�E
f�0�sf�H�
ԀfD�p@H�@�uD��PL�}(I��u�EH�EH�E �M����0��`?���H���6���sfoL$0f�
@H�
^�H�@�u�sf�8HfD�p�E
��.1��ff.���ATI��US�GH���u3H��tH���.?��[L��]A\�2��f�H�{H�k(�2��H��H���2��H��u�[L��]A\�2�����H���:���H���f���AUI��ATI��UH��S�H��1�H��L��L���d,����u��u�H��[]A\A]�ff.�@��AWAVI��AUM��ATA��UI��$�SH��hH�|$HD�d$$H�T$8L�D$@dH�%(H�L$X1�H�D$L�H�D$L�H�D$H�D$P�D$0H�D$(�fA�G0A�O4�D$4�L$0��u$H�|$8t	M����1�H�|$@t	M����A�G8H�߃�A�G8��*��L�����0�����H�|$�6��I��H���<I���I�?M����D$$M�wI�_HM�o(H��A�GH�D$I�G8L�A�G@I�GH�D$L�I�G ��$�A�G��2��I�p�0��H�|$(L��H�5:��9���Ņ��H�|$P�+��L��L��H���H�=-��1��H���3��A�O<������A�W@������A�G8A�G@H�߃�A�G8����r)����.��������D$0�\$4�����`-���L$0��DH�t$HL���3������fD�c9��H�|$�95��I��H�������������afDI�w H�|$@L���O3���B���f.�I�wH�|$8L���/3������f.���,��L�������,��������H�L$XdH3%(��uH��h[]A\A]A^A_��-��ff.�@H��E1�E1�j�+��ZY��uH��É�H�=(d�9��fDH��(1�A�dH�%(H�D$1�H��fD�$H�D$f�HH��H���@
�|$H�����H�D$dH3%(uH��(���,�����AWH�5�� AVAUATUSH��dH�%(H��$�1��\/��H���xL�h"H�h I��1�L��H)�A9F�^A�~�}-��H���H��A���5��A�~H�$����A�~���2�؃�����*��H���H���5����M�>I��I�FH�D$��(��H����H���_5��H�D$L�T$`H��$�H��A�vjM�йH��A� H��L�T$(�u)��ZY��L�T$��L����3��H��H����3��H��H���83��H�D$(H�$H�t$ �H�L$L�d$8H�D$0H�D$H�L$ L�l$@H�D$HL�|$P�9��H��$�dH3%(�7H�Ę[]A\A]A^A_��A�^ ���fDI�F��M�>H�D$��'��H��H���~�T4��H�D$����A�FH�I9�sZ�}�uTL���
��}�uBH��I9�u�L)�L��A��7�������;0��H����H����3��I���,���f�H����H��� ��H�5]sH�81��&��H��� A�VH�5�rH�81��u&��H�n� ��H�5sH�81��[&����H�O� A�VH�5�rH�81��:&���)����H�=�`�5��A���H�� A�VH�5�rH�81��&����AUATI��H�5�� US��H��H��dH�%(H��$1��H,��H��������H�����}u��I��u�H�} L��$H��L��A�SM���&��ZY����L���V1��L��H���K1��H��H���0��H��$dH3%(uaH��[]A\A]��I�<$��t�1����2���\�1�H���R���@��t��6�����@���fD��'�����.����(����H�=k_�I4��f���SH�5�� H��H��dH�%(H�D$1��+��H��tc�xvE�@ ��f��u8H��H�ڿH�$�h���1�H���^&��H�L$dH3%(u#H��[�H�A� H�5TpH�81��0$���{���'��fD��SH�5�� H��H�� dH�%(H�D$1��x*��H�����x���@ ��f��uvH��H�t$�H�D$����H��H���%��H�|$H�D$��"��1��
H���,���H��H�H�T�K5��H��H�L$dH3%(u#H�� [�H�[� H�5noH�81��J#�����'��ATUSH��H��@H�t$dH�%(H��$81�H��t7H�l$L�d$0H���rH�zj�L��A� I���h$��ZY���H��t	����H�|$�H����@��tG@�����4������H�|$H�����l4��H�5�oH�߉�1��&���@H���H��u�H�|$H���%�!��H��H�5skH��1��\&��H���t,��@H��$8dH3%(H���[H��@[]A\�f.�H���H��� ���H���h.��H�|$H��H������H��t�H���	,����H��t;��u6H�H�ƒ�H��u'H�s�� tH�sL���)�����HD��L�d$M�������A��t\A�������H��1��
�S*��H�|$H���&3��9��`���H�D$�R����k ��H�=QjH��1��-��H���;���f�I�$H�ƒ�H��u�I�t$�� tI�t$H���(�����u������2��H�=�m��1���,��H������v$��fDAWAVAUATUH��S��H��dH�%(H��$1�H��|1I��L�o�?f���uH�
�r��I��Hc�H�>��fD�H�5!mH���,%��H��$dH3%(��H��[]A\A]A^A_�H�5DH����$��H�5WmH������&��H�5^H���&���D��H��H�5�q1���#���H�5cmH���$���g����H�5�BH���|$���K����I�M��I9����x���L�����x���H��L9�u�I��M)�����L��I9������!<]�a�H�5BH���#��L�%blfDI��A�V�1�L��H���
#��I9�u�������A�T$1�H�5ZkH����"������A�T$1�H�5�kH���"������A�T$1�H�5~kH���"�����8A�T$H�5`kH��1��"��A�T$f���҅��;A�������D��H��1�H�5�o�H"��������/��H�5�oH��1��$"����������H��unA�$H�5�kH���!�����DH���{����H��H9������A�|$/t�H�5�jH���"��L��L��H���y"���H���@H�����H�5@kH��H��1��!���#����H��H�5:j�4"��H��H�5%j� "��H��H�5j�"��H��H�5�i�!���H�5�iH����!������H��H���E1�jH��E1�D��L���F��ZY����A�L$f��tAf��H��H�5�i1���H��� ��A���P���A�W�H�5�iH��1�� ���6���f�H��H���E#����E1�����3#��A�T$1�H��H�5�if�����U ������H�5]ZH��I���"��A�|$L���}(��H���LL��H�5oH��1�� ��A��	��H�5ZH���"��A�T$1�H��H�5@i����A��
tsH�5�YH���"��A�D$
����<��<� <�1<����H�5iH��1����A�D$��A9�uA��uHA9��h������H�5xYH���"��A���J���A�T$1�H�5�hH���7��A����H�5>YH����!���H�5�hH������A�D$H��H��H9���A�_�E1�L�5gfDM��H�5WH��IE��!��C�T,H��1�H�5�gI�����D9�w�A�D$���'���@�H�5�gH���T���#�����H�5�gH���4�������H�5#gH�����A�T$f���҅�����fDH�5gH��1�������f.��ڸ����������H�5�KH������V����A�T$H�5gH����������	H�5eLH���{�������H�5	gH���b�������	H�5oLH���I������	H�5�fH���0�����������H�=�S�(���H�5fH�����H��H�5�e�����H�5�eH������������S�H��dH�%(H��$1�H��H����H���$��H��$dH3%(u	H��[��H�����AUATUSH��H�|$H����H��� H��H��I��H�0�+%��H����H�|$�x��H�t$H� L�nu6H��M��t6�><��L��M9���H��� !��B�+H��[]A\A]�H�vM��u�1�L��H���Z�H��t�MH��H��[]A\A]�H�|$�V��L��H�މ���'�H��u���H��1�[]A\A]�I��tZI���l���H�<broadcaH9�Y���f�~st�M����~
>�C���L��H�޿�������H���i����h���f��><any�����~>�����.���H��� H�5eH�81����ff.�f���AVAUATUSH��L�/L�gdH�%(H��$1�H�GH�����H�{ H��H����"��H��H���w%��L�k M��tL������H=v~1����I��L��H���I%��HcCH��H�t�8%����sH�{A��H��H���%��H�[(H��u�H��$dH3%(H����H��[]A\A]A^��L���H��I��H���n������M�mI��M���c���I�}H���V���f.��!��I��L��H���$��I�}H��u��*���fDL��H��1ɺ���H�������9��f���ATUSH��H�|$H����I��H��H��@��uFH�|$�|��H�t$H� L�fu"H��L9�vmM��uTB�#H��H��[]A\�H�v��f�H��H�	cH��H��H�1����H��M��t�A�$H��[]A\�DL��H�������1��H�-� L��H�5�bH�81����f���AWAVI��AUA��ATI��USH�ӺH��dH�%(H��$�1�H�l$8H�t$p�D$8H���]��H�t$PH��L��� I�����H�$E��t�s�����D$8	H�L$@H��H�4$L���G���uK����I���@H�D$@I�H��$�dH3%(L����H�Ę[]A\A]A^A_����H��tM��t�+����E1�H�D$HL�4$�D$H�D$D�,$�!fD�#��L���+�����E���T��M��tL�����H���I��M��t
L�����L�dL�����I��H����M����I���L��I�}�_��M���VI�|-L��I�}�E���o�oKI�E@I�m`�oS I�EPH��A�EXAEAM AU0�D��I����H��H�|$L��H�5y���� ��A���H�|$H�O��L��L��H�B��H�=�������H���^��A�MT��u~A�UXA���uA�EXA�EPH���A�EP����������B��E��������D$D�,$����E��������I���@H�D$@I�����A�UHA�EL�$�D$��u�I�E@A��H�D$@�t���@I�E���I�E����k ��L���C��I��H���L���A�����M��tL�����A�|�
��D��H�=5M� ��f�H��H�������8�����H�D$H�
H�D$HH�����H�D$HH�������8�����C���D���L��A����������~����V����L��H���D$<�!��I��H��$��H���FL�0A�� �H�@H�D$H�|$�!H�D$HE1�L�|$(E1�H�D$H�D$<M��H�D$H��$�H�D$ �0������L�|$H�@I��L�8I��L;l$��L��L������H�L$H�t$ �H������H�L$H�4$H��H���
����u���t�I�G(H��tf�I��I�G(H��u�H�D$HI�G(I���fDH�y� H�5�aH�81��h���I��A��L�t$��fDL�|$(M����a����A���������D�����L$��'�������ff.�AVf�I��AUI��ATI��UL��SL��H��@dH�%(H�D$81�)$)D$)D$ H��tH������D$I��tL���#���D$H��uAH��uR�L$pH��L��L���A��H��thH�L$8dH3%(uSH��@[]A\A]A^��H���t(�+ ���D$H��t�H�߃�t� ���$���#���֐���������H�
� H�5HH�81��
��ff.����AWAVAUATI��USH��H�5�� H��dH�%(H��$�1��6��H���zH�
!VH�6HH�߾�B��H�l$(1�H��H�����H��H�D$(�#��H�D$(H�pH�xH� �H�T$���������H���9��H��H�D$(����H�D$(H�pH�xH� ��H�T$����������H������H�D$(H���C�D$ �H������H�D$(H���o�D$$�H�����I��H�D$(H��t
H���D��L�l$(�H�����I��H�D$(H��t
H�����L�t$(�H���Z���|$H�D$(�ZH�
�TH��F�H�������H��H�����H��1�H�����HcT$ Hct$$H��A�	H��H�LHcT$$jL�D6H��H�T����ZYH��H�D�xL��M����H��1��{��� ��L��D�T$$D�L$ H�D�D$H��H�@I�D$ �kL��D�CD�KD�SL�kL�3H��$�dH3%(�;H�ĸ[]A\A]A^A_�@H�x�����H�x�����L��$�H�p�L��L��L�$���H������ ����A��D�T$$D�L$ H��H�D�D$H�@L�$I�D$ �zE���#���H�x ��H���H��H�D$(H�pH�xH� tH�xH�T$ ������������H�� H�5�XH�81��S
��H������D$���u-H�D$(H�pH�xH� tH�xH�T$$�������X���H��� H�5}XH�81��	���H�\$01��H�D$2H�{H�Cf��H�H��f�t$0�j��H�D$(H�PH��l��H�pH� �H���H��$�foD$0�� foL$@foT$P�nA�nH��$��$�fo\$`fod$p)�$�fo�$���$��$�)�$�)�$�)�$�)�$�)�$�f��$���D�T$$D�L$ L��$�H�D�D$H��H�x H�@I�D$ �L��L��D�L$D�D$D�$�.��D�L$D�D$D�$����H�pH�����H�{�l�������H�� H�5�VH�81��P��H��� H�5uVH�81��8���c��H�ܳ H�5mZH�81��������H�� �lH�5#YH�81����f���H��8f�dH�%(H�D$(1�)D$�D$��x#H�t$H�T$������u�|$v	�D$�f�1�H�L$(dH3%(uH��8��D��@��H��Hf�dH�%(H�D$81�H��D$�@,�T$H�‰L$�@D�$���H�T$8dH3%(uH��H���
��ff.���AWA��AVAUATU��SH��H��8�?dH�%(H��$(1��h��H��tcH��L�d$ ���H���>��I�ƅ�td�L��D��H��L��$ H��A�jM���
��ZY������H�=A���D�3H�=�T1�L�d$ �Z��I�ƅ�u�H��E1�E1��jL��D��H�����AXAY���q���L��L��$ ���H��D��H��jA�M��L��H���s��^_���f���L������H��H��HD��@L�����H��H��1��
L�����H��L�4$H�H�l$H�DH�\$H�D$���H��$(dH3%(uH��8[]A\A]A^A_��"	��f���H����H�H�H9�s+�x�u%H����x�uH��H9�u�H)�x�g���H��H)�y�1�H�=@�Z��f.���S����H�=�'H���2��H��[H���F��fD��H�GH��tSH�WH� u.�:u2�����H��H9�w9Hc�H9��T����H����H�W�:tθn�f���H�� H�5�VH�81��R��f�AUA��ATUSH��H��H�t$H�|$dH�%(H��$�1���	��H�l$H�UH��l�TL�d$1�H�u�H�D$I�|$I�D$f�H��f�D$H�E ujH��unH���]��=���un�C�CD�k�CH�CH�H��$�dH3%(��H�Ę[]A\A]�DH�uH��t�I�|$�l�����fDH�K ��s/�uc��t�A�$�S ��q�����A�t�f�t��_���DH�T$H�{(H��H�S ��I�t�H�t�H)�L��H)�����H��'���DA�$�S ��A�t��t������t��H�-� �lH�5�@H�81��������f���ATUS����~gH�.��uZH�� H�<� 1�H�8�B��� �I��������H��H�H��H�@I�D$ ����L��[]A\����t�������H�~�H��t��v�����u���ff.�@��AWAVAUI��H�5�� ATA��H��UH��SH��dH�%(H��$�1�� ��H����� �L�|$(�#��L�|$`H��H�H�@H�E H�D$0H�D$hH�D$8H�D$pH�D$@H�D$xE���/I�E�H�D$(H�D$`H�p�$�H��tHc�I�|�H�9��H��H9�tH�HA9��H��t�H��H�H9�u�A9���H�|$0E1�H��t�
��Lc�H�|$8E1�H��t�4��Lc�H�|$@�$H���[H�|$(����I��H���\1�H��L�|$H�u��L��H�D$H���H�D$HH�pH�xH� ��H�T$$�������;�D$$���~��
ty�����L�����H�|$XH�D$X���H�t$X�H�����H��$�dH3%(H���H�Ę[]A\A]A^A_�fDH�x�i�����L������L��I�����L��H�D$P���L��A��H�D$X���j��H�H�|$PH�DH�D$t
H�|$P���H�|$XO�l-����H�D$PH�D$Hc$L�|E��uLct$$K�D6H��M��L��L�t$`H�D$ A�	H��jH�t$ L�����L��I��XZH�t$����H�$H���TI�$A�H�x H��t�
��H��I������L�����L��I���v��H�|$I���i��I��I�$D�@A����E���H�$D�CL��D�KD�kD�{L�sH�����N���@��tz����$���DL������H�D$(H�pH� u^L�`Ic�I9�����A���1M��u\�$D�cD�sD�k�CH�CH�����fD����f�H�p�f.��{���,���fDH�{ �L������DI�$H�t$H�|$�%��H�$���@H�pD��H�{ �L�L$D�D$����L�L$D�D$����H�#� H�5OKH�81�������D����	��L���8���H�5�KH��H�� H�81�����H��� H�5OH�81�����������ff.���H��(H��dH�%(H�D$1�H�T$H�٩ H�<$H�=��H�t$H�����H�T$dH3%(uH��(�������AWAVA��H�� AUA��ATM��U��1�SH��H��� H�|$H�8D�D$��� �I���
����D�D$H�H�@I�G wXH�Å�u0H�D$P�kD�sH�L��D�kD�CL�cH��[]A\A]A^A_�H�t$��H�x �D�D$���D�D$����f���H��(H�5A� dH�%(H�D$1�����H����H�¸�z��f�z 
uzD�J(E��uqD�B,E��uh�J0����t��uY�J4Ƀ�vOH��1��H��H�D$
�f�G�B4f�L$D�B�G
L�J�D$�J�2��U
��^_H�t$dH34%(uH��(��f��������AVAUATUS��H�ĀdH�%(H�D$x1�H��H�D$@H�D$H�D$HH�D$H�D$PH�D$H�D$XH�D$ H�D$`H�D$(H�D$hH�D$0H�D$p���������DHc�H��L�d���������s��~�H�EH�T$@A�L�J H�$H�EH�D$�!@H��tIc�H�t�H�1A��H��I9�tH�JD9��H��t�H��H�I9�u�H�|$0D9��Y���1�L�D$8�H�5t� �	��H�|$8$u	H�D$8H�$H�l$H��jL�L$8L�D$0H�L$(H��H��H�T$ �8�^H��_H�H��I������I���-���I�I��H��tUf�H�{ �H��t����H��H���2��H��D�C�KI��S�sH�{AU�c��ZL��YH�����H�[(H��u�L���u��L��H�t$xdH34%(u%H��[]A\A]A^�DL����e���H���z����8����ATI��A�H��U�I��H��SH��j�J�H��Y^H�H��L������L�I��I�z H��t���H��H���S��L�H��A�RI�zI��E�BA�JA�rAT�~��H��H��XZ���H��[]A\�f���SH������D���H�5}� H��H���"���H��t
H�@H��[��ۼ��ff.���H���
H�ֺ������H���#H�ֺ�������SH�Ӆ�t���H��[�f.�H�ߺH�5�E���H��[��SH��H�5ŕ �p���H��t�pH��H�x [�K���&���fD��S1�H��H�=�1�
���H��[H��뱐��ATH�5s� I��USH��dH�%(H�D$1�����H����L��H�����H�=/EH��1��`��L��H��H���R���D�cE�����{�K�C A9��>��{�����������U���-�S��t$���G���H�����SH�5�DH��1����H�CH��t H��H�$����H�5�HH��H��1�����H�H��t H��H�$���H�5�DH��H��1�����H�5tCH���c���H��H�L$dH3%(��H��[]A\��{��u�S���S����_�����t�E1�f����H�����SH�5�CH��1��.����S���)���E��������
���DD�����H����H������H�5�GH��H��1�����C����C��tA����r����H�5sCH���~������f�H����H�5�GH��H��1�����Q�����SH�5CH��1��d����C����@�C��tA������H�5�BH������/���f�H���(�H�5GH��H��1����������A�������������UH�5�� SH��H��H�/H�������uH���E���H�H��[]�H����H���ff.���ATI��USH�/H��H�H�5!� H���)�����uH�����H�[]A\�DH��蘸��H��H�I�,$����H�[]A\Ð��SH���3���H�H�BH� tH�B[�ff.�f���SH�5�� H����H�߅�u
[����[�"���f���ATE1�UH��S��H��dH�%(H�D$1��D$��rD�&H��L�D$���������t;H��E1�D��A�j�L$��H������ZYH�T$dH3%(uH��[]A\����H�5��8�q�����ff.����ATUSH��uH��� H�5�1H�81����H���@��u5H�����tJ��t��
u�@��tb�����H��[��]A\��DH��H���H��t�H��$t�@��t���D�#���L�`L�����A�|$��H��[]A\�d�@�K��H��[��]A\�K�ff.���SH�H��H�x���H�H�@H�x���H�;H�GH�����H�;��H�[���SH�H��H�x@H��t���H�H�@@H�[���SH��dH�%(H��$�1�H�\$ H�GHH�<$H��H�D$�'���H�߾
����H��1�1��.�H�D$H�$H�pH�xH�J@H��萾���Å���H�$H�HXH��~IH��H�|$1�H��S㥛� H��H��H��?H��H)�H�T$Hi��H)�Hi�@BH�L$�d�H�$�P`��tH�x@��H��t���H�$H�@@H�D$H�x����H�$�:
�Z����1�D$H�D$�8������rH�x�N��J��u*�h���+�H�<$�tH������D�hu*���H�|$t��tH�|$���
����1�H��$�dH3%(��H�İ[�f���1�H�<$t�H���:�����H�t$���H��x\H�$H�D$�#���fDH�D$H�$H�pH�xH�J@H���J����Ã���I����J�8�����D��4���f.��+�H�$��BP�BH�D$�����ff.����H��H�=r������ff.�f���H��� SH��u(H��,��H���c���H�̝ H��t�H�ȝ H��� H�=�<H�0���H�C� H�5����H��H����H�;�����H���H�5	&����H�;1�H����H�57,���H�;1�H��� H�5p<���H�;�����H���H�5G)���H�;�H�\���H�5K<���H�;�H�����H�5'�e���H�;�H�����H�5�,�J���H�;�����H�K�H�5�;�/���H�;1�H�Ӻ��H�5�;���H�;1�H�����H�5�;����H�;1�H�C���H�5�:����H�;1�H�����H�5�:���H�;1�H�����H�5�;���H�;1�H�[���H�5�;����H�;1�H����H�5z;�g���H�;1�H�����H�5h;�O���H�;1�H�C���H�5V;�7���H�;1�H����H�5B;����H�;1�H���H�54;����H�;1�H�;���H�5';���H�;1�H�����H�5;����H�;1�H����H�5
;���H�;1�H�����H�5;���H�;1�H����H�5�:���H�;1�H�����H�5�:�w���H�;1�H�k���H�5�:�_���H�;1�H����H�5�:�G���H�;1�H�����H�5�:�/���H�;1�H�s���H�5�:����H�;1�H����H�5�:���H�;1�H�����H�5�:���H�;1�H�[���H�5�:����H�;1�H����H�5�:���H�;1�H�����H�5�:���H�;1�H�S���H�5�:���H�;1�H�����H�5�:�o���H�;1�H���H�5�:�W���H�;1�H�����H�5�:�?���H�;1�H�c���H�5�:�'���H�;1�H�K���H�5�/����H�;�����H����H�5V$��H�;1�H�����H�5I:����H�;[�H����H�5::�������@���PHE��f���AWAVAUATUSH��dH�%(H�D$1�H���V����$H�$E1�H��u�@E��H�E�|$H��u�H�y� 1�Mc�1�H�#� H�8���L��H��I��H����H�$H�pH��D�xH��fD�(��H��H�P�H�D9�u�I�v L�����L��H��I���k�����tFL�k1�L�5�� f�H�� L��L��H��I��H�8�3�L���H���%���A9��H�L$dH3%(L��uH��[]A\A]A^A_�fD�#�I����������H�52"�8�V�fD��S���H�H��H�\��+t[�DH�{���H��[�>�ff.�H��H�5Ն � �H��tH���H�?� H�5�:H�81��~�ff.���S���H�X�CtH�{(H��t����H�{([���B���f��[�f���S�v���H�X�CtH�{(H��t���H�{([������f��[�f���S�6���H�XH�{ H��t��H�{ [�������[�f���S���H�XH�{H��t�d�H�{[������[�f���H�����H�@�@H��H�D�f���S���H�XH�{����t	��[H�D�H��� H�SH�5'9H�81�����H���S���H�@H�xH�����f���ATI��US�0����H�=�8H�h��H��M���?H�В H�8�p�H��H���E��H�5�#H����H�uH���e��E���JH�}t+�H�5�#H���O�H�}�&�H�}H�ډ���H�} t+�	H�5
9H����H�} ���H�} H�ډ���E�t5H�}(td�H�5�8H�����H�}(��H�}(H�ډ��M�E�t2H�}(t+�	H�5�8H����H�}(��H�}(H�ډ���H�ߺH�5�2��H��[]A\��A��u
I�|$���I����I����A���A����H�� H�8���f�A��H�^"��6A���A����A����A���nA��@�<A��
A����A�� ��A���nA���9A���A����A�� ��A��@uiA���u8M�������L��H�557H��1��{�����fDH��� H�8����H�5�6H��1�I�����H�H�I6��H�5�6H��1�I����� �H�!6�s���@H�5�6H��1�I������H��5�B���@H�5e6H��1�I������H��5�
���@H�556H��1�I������H��5����@H�56H��1�I������H��5���@H�5�5H��1�I�����X�H�Y5�n���@H�5�5H��1�I����3�H�45�<����H�5j5H��1�I������H�	5����@H�5:5H��1�A�����H��4�����H�55H��1�I����H��4����H�5�4H��1�I�����H��4�q����H�5�4H��1�I���k�H�l4�?����H�5o4H��1�I���C�H�D4�
����H�5;4H��1�I����H�4�����H�54H��1�I�����H��3����H�Ɍ H�8����H�I� H�8����H�9� H�8�������UH�5|4SH��H�-�� H�A� H�}H����H�֍ H��H��C�H�;1�H�W���H�5�{�H�;1�H����H�5�
�c�H�;1�H����H�5�)�K�H�;1�H�����H�5�3�3�H�;1�H�7���H�5�)��H�;1�H����H�5�3��H�;1�H�����H�5�3���H�;1�H�/���H�5�3���H�}H��1�[H�!���H�5�]�����H��H���%s: %sgetsockopt(SO_TYPE)recv for buffered IOrecvfrom(2)recvfrom for buffered IOrecvfrom(2) would blockread would blockwrite would blockConnect timed out!fnctl(2)accept(2) would blockaccept(2)SocketErrorResolutionErrorerror_codewait_readablewait_writablersock_s_recvfrom called with bad valuersock_s_recvfrom_nonblock called with bad valuersock_write_nonblockrsock_read_nonblockAF_IBPF_IBAF_IPXPF_IPXAF_SNAPF_SNAAF_MAXPF_MAXAF_KEYPF_KEYAF_RDSPF_RDSAF_LLCPF_LLCAF_CANPF_CANAF_ALGPF_ALGAF_KCMPF_KCMAF_XDPPF_XDPAF_INETPF_INETAF_UNIXPF_UNIXAF_AX25PF_AX25AF_ISDNPF_ISDNAF_MPLSPF_MPLSAF_TIPCPF_TIPCAF_UNSPECPF_UNSPECAF_DECnetPF_DECnetAF_PACKETPF_PACKETAF_NETLINKPF_NETLINKAF_APPLETALKPF_APPLETALKAF_BLUETOOTHPF_BLUETOOTHSOCK_DGRAMSOCK_STREAMSOCK_PACKETSOCK_CLOEXECSOCK_NONBLOCKSOCK_SEQPACKETSOL_SOCKETIPPROTO_IPIPPROTO_TPIPPROTO_AHIPPROTO_TCPIPPROTO_EGPIPPROTO_PUPIPPROTO_UDPIPPROTO_IDPIPPROTO_ESPIPPROTO_RAWIPPROTO_ICMPIPPROTO_IGMPIPPROTO_IPV6IPPROTO_NONEIPPROTO_ICMPV6IPPROTO_DSTOPTSIPPROTO_HOPOPTSIPPROTO_ROUTINGIPPROTO_FRAGMENTSO_TYPESO_MARKSO_SNDBUFSO_RCVBUFSO_LINGERSO_DOMAINSO_PEERSECSO_PASSSECSO_NO_CHECKSO_PRIORITYSO_PASSCREDSO_PEERCREDSO_RCVLOWATSO_SNDLOWATSO_RCVTIMEOSO_SNDTIMEOSO_PEERNAMESO_PROTOCOLSO_RXQ_OVFLSO_PEEK_OFFSO_REUSEADDRSO_REUSEPORTSO_DONTROUTESO_BROADCASTSO_KEEPALIVESO_OOBINLINESO_TIMESTAMPSO_BUSY_POLLSO_ACCEPTCONNSO_GET_FILTERSO_SNDBUFFORCESO_RCVBUFFORCESO_TIMESTAMPNSSO_WIFI_STATUSSO_LOCK_FILTERSO_BINDTODEVICESO_TIMESTAMPINGSO_INCOMING_CPUSO_ATTACH_FILTERSO_DETACH_FILTERSO_BPF_EXTENSIONSSO_MAX_PACING_RATESO_SELECT_ERR_QUEUESO_INCOMING_NAPI_IDSO_SECURITY_AUTHENTICATIONSECURITY_ENCRYPTION_NETWORKSECURITY_ENCRYPTION_TRANSPORTIP_TOSIP_TTLIP_MTUIP_MINTTLIP_OPTIONSIP_HDRINCLIP_RETOPTSIP_RECVTTLIP_PKTINFOIP_RECVERRIP_RECVTOSIP_PASSSECIP_RECVOPTSIP_FREEBINDIP_MSFILTERIP_PKTOPTIONSIP_RECVRETOPTSIP_XFRM_POLICYIP_TRANSPARENTIP_PMTUDISC_DOIP_MULTICAST_IFIP_ROUTER_ALERTIP_MTU_DISCOVERIP_IPSEC_POLICYIP_BLOCK_SOURCEIP_MULTICAST_TTLIP_PMTUDISC_DONTIP_PMTUDISC_WANTIP_MULTICAST_LOOPIP_ADD_MEMBERSHIPIP_UNBLOCK_SOURCEIP_DROP_MEMBERSHIPIP_MAX_MEMBERSHIPSIP_DEFAULT_MULTICAST_TTLIP_ADD_SOURCE_MEMBERSHIPIP_DEFAULT_MULTICAST_LOOPIP_DROP_SOURCE_MEMBERSHIPIPV6_RTHDRIPV6_V6ONLYIPV6_TCLASSIPV6_DSTOPTSIPV6_HOPOPTSIPV6_NEXTHOPIPV6_PATHMTUIPV6_PKTINFOIPV6_RECVERRIPV6_CHECKSUMIPV6_DONTFRAGIPV6_HOPLIMITIPV6_RECVRTHDRIPV6_JOIN_GROUPIPV6_RECVTCLASSIPV6_LEAVE_GROUPIPV6_RECVDSTOPTSIPV6_RECVHOPOPTSIPV6_RECVPKTINFOIPV6_RECVPATHMTUIPV6_MTU_DISCOVERIPV6_MULTICAST_IFIPV6_UNICAST_HOPSIPV6_RECVHOPLIMITIPV6_RTHDRDSTOPTSIPV6_RTHDR_TYPE_0IPV6_MULTICAST_HOPSIPV6_MULTICAST_LOOPTCP_MAXSEGTCP_MD5SIGTCP_SYNCNTTCP_REPAIRTCP_NODELAYTCP_KEEPCNTTCP_LINGER2TCP_KEEPIDLETCP_QUICKACKTCP_FASTOPENTCP_KEEPINTVLTCP_QUEUE_SEQTCP_TIMESTAMPTCP_CONGESTIONTCP_THIN_DUPACKTCP_DEFER_ACCEPTTCP_WINDOW_CLAMPTCP_REPAIR_QUEUETCP_USER_TIMEOUTTCP_REPAIR_OPTIONSTCP_COOKIE_TRANSACTIONSTCP_THIN_LINEAR_TIMEOUTSSHUT_RDSHUT_WRSHUT_RDWRSCM_TIMESTAMPSCM_TIMESTAMPNSSCM_CREDENTIALSSCM_WIFI_STATUSSCM_TIMESTAMPINGunknown socket domainunknown socket typeunknown protocol levelunknown IP level option nameunknown TCP level option nameunknown UDP level option nameunknown UNIX control messageunknown IP control messageunknown IPv6 control messageunknown TCP control messageunknown UDP control messageunknown shutdown argumentConstantsSOCK_RAWSOCK_RDMAF_INET6PF_INET6AF_LOCALPF_LOCALAF_ROUTEPF_ROUTEAF_PPPOXPF_PPPOXAF_VSOCKPF_VSOCKMSG_OOBMSG_PEEKMSG_DONTROUTEMSG_EORMSG_TRUNCMSG_CTRUNCMSG_WAITALLMSG_DONTWAITMSG_PROXYMSG_FINMSG_SYNMSG_CONFIRMMSG_RSTMSG_ERRQUEUEMSG_NOSIGNALMSG_MOREMSG_FASTOPENSOL_IPSOL_TCPSOL_UDPIPPORT_RESERVEDIPPORT_USERRESERVEDINADDR_ANYINADDR_BROADCASTINADDR_LOOPBACKINADDR_UNSPEC_GROUPINADDR_ALLHOSTS_GROUPINADDR_MAX_LOCAL_GROUPINADDR_NONEMCAST_JOIN_GROUPMCAST_BLOCK_SOURCEMCAST_UNBLOCK_SOURCEMCAST_LEAVE_GROUPMCAST_JOIN_SOURCE_GROUPMCAST_LEAVE_SOURCE_GROUPMCAST_MSFILTERMCAST_EXCLUDEMCAST_INCLUDESO_DEBUGSO_ERRORSO_NOFCSTCP_CORKTCP_INFOUDP_CORKEAI_ADDRFAMILYEAI_AGAINEAI_BADFLAGSEAI_FAILEAI_FAMILYEAI_MEMORYEAI_NODATAEAI_NONAMEEAI_OVERFLOWEAI_SERVICEEAI_SOCKTYPEEAI_SYSTEMAI_PASSIVEAI_CANONNAMEAI_NUMERICHOSTAI_NUMERICSERVAI_ALLAI_ADDRCONFIGAI_V4MAPPEDNI_MAXHOSTNI_MAXSERVNI_NOFQDNNI_NUMERICHOSTNI_NAMEREQDNI_NUMERICSERVNI_DGRAMINET_ADDRSTRLENINET6_ADDRSTRLENIFNAMSIZIF_NAMESIZESOMAXCONNIFF_ALLMULTIIFF_AUTOMEDIAIFF_BROADCASTIFF_DEBUGIFF_DYNAMICIFF_LOOPBACKIFF_MASTERIFF_MULTICASTIFF_NOARPIFF_NOTRAILERSIFF_POINTOPOINTIFF_PORTSELIFF_PROMISCIFF_RUNNINGIFF_SLAVEIFF_UP��� ���8������(�������x���H����������t��6�������������\�������������D��������<��T��l��������������������D��������������T����� ��`���
��������0��������������
���
��`
��(
���	��P��P��P��@	��P��P���	�����P��	�����P�����D��������|�����L��������|��$ ��� ��!��t"��"��T���!���������#��,#�����$�����+��0+��`+���+��,��@,���,���-���.��8-���*���.��H/���*���*��5��~4��,5��t5���5��7��$6���6��\7���7��T8��T4���8��~4��t9���8��49��~4��~4���4���4���=��0=��0=�� >��P>���<���>��@=��0=��h=���=��LA��LA���A���@��B��LA��DB��lB���B��LA���B��$C���C��LA��TA��|A��4D���L��UL��pL��pL��pL��pL���L��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL���L��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL��pL���L��PM���L���L���L���L���L��0M���L���L���L���L���L���L���L���L���L���L��M���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L���L��SO_SECURITY_ENCRYPTION_NETWORKSO_SECURITY_ENCRYPTION_TRANSPORTunknown socket level option nameunknown IPv6 level option namesendto(2)send(2)getsockopt(2)shutdown(2)getpeername(2)getsockname(2)getsockopt(SO_PEERCRED)fstat(2)not a socket file descriptoroptnamedatasetsockopt(2)BasicSocketinitializedo_not_reverse_lookupdo_not_reverse_lookup=for_fdclose_readclose_writeshutdownsetsockoptgetsockoptgetsocknamegetpeernamegetpeereidlocal_addressremote_addresssendrecv__recv_nonblock__read_nonblock__write_nonblock__sendmsg__sendmsg_nonblock__recvmsg__recvmsg_nonblock`how' should be either :SHUT_RD, :SHUT_WR, :SHUT_RDWRunknown socket family:%dsmalltcpno such service %s/%shost not foundgethostname(3)getifaddrstoo short sockaddrnot an AF_UNIX sockaddrsockaddr length too bigexpecting String or Arraygetnameinfocloselisten(2)socket(2)socketpair(2)%s for %+li port % li%s for % li%s for %libind(2)connect(2)connect(2) would blockRUBY_TCP_NO_FAST_FALLBACKtcp_fast_fallbackconnect__connect_nonblockbindlisten__accept_nonblocksysacceptrecvfrom__recvfrom_nonblocksocketpairgethostnamegethostbynamegethostbyaddrgetservbynamegetservbyportgetaddrinfounpack_sockaddr_inunpack_sockaddr_unip_address_listtcp_fast_fallback=integer %ld too %s to convert into `int16_t'no such service for port %d/%sSocket.gethostbyaddr is deprecated; use Addrinfo#getnameinfo instead.Socket.gethostbyname is deprecated; use Addrinfo.getaddrinfo instead.too long sockaddr_un - %ld longer than %darray size should be 3 or 4, %ld givensockaddr resolved to multiple nodenamenot an AF_INET/AF_INET6 sockaddrtoo long unix socket path (%zu bytes given but %zu bytes max)clock_gettime(2), ipv6getaddrinfo(3)malloc(3)pipe(2)fcntl(2)calloc(3)delayerrorrealloc(3)select(2)ErrnoETIMEDOUTuser specified timeoutIPSocketinspectpeeraddrgetaddressnumericinvalid reverse_lookup flag: :%s��.ATCPSocket.gethostbyname is deprecated; use Addrinfo.getaddrinfo instead.resolv_timeoutconnect_timeouttest_mode_settingsTCPSocketTCPServersocket(2) - udpUDPSocketsendmsg(2)recvmsg(2)UNIXSocketsend_iorecv_ioneither IO nor file descriptorfile descriptor was not passed (msg_controllen=%d smaller than sizeof(struct cmsghdr)=%d)file descriptor was not passed (cmsg_level=%d, %d expected)file descriptor was not passed (cmsg_type=%d, %d expected)file descriptor was not passed (msg_controllen=%d smaller than CMSG_LEN(sizeof(int))=%d)file descriptor was not passed (msg_controllen=%d bigger than CMSG_SPACE(sizeof(int))=%d)file descriptor was not passed (cmsg_len=%d, %d expected)too long unix socket path (%ldbytes given but %dbytes max)UNIXServer%s%s%s%u %ld.%06ldseclinger socket option expected invalid-address interface: ifindex:#<%s: SOCKET optname:%d level:%d %s (%d) off on on(%d) %dsec pid=%u euid=%u egid=%u (ucred) %u state=ESTABLISHED state=SYN_SENT state=SYN_RECV state=FIN_WAIT1 state=FIN_WAIT2 state=TIME_WAIT state=CLOSED state=CLOSE_WAIT state=LAST_ACK state=LISTEN state=CLOSING state=%u ca_state=Open ca_state=Disorder ca_state=CWR ca_state=Recovery ca_state=Loss ca_state=%u retransmits=%u probes=%u backoff=%u optionsTIMESTAMPS%c%sSACKWSCALEECNECN_SEENSYN_DATA%c%u rto=%s%u.%06us ato= snd_mss=%u rcv_mss=%u unacked=%u sacked=%u lost=%u retrans=%u fackets=%u last_data_sent=%s%u.%03us last_ack_sent= last_data_recv= last_ack_recv= pmtu=%u rcv_ssthresh=%u rtt= rttvar= snd_ssthresh=%u snd_cwnd=%u advmss=%u reordering=%u rcv_rtt= rcv_space=%u total_retrans=%u (%u bytes too long)to_intOptionbyteboollingeripv4_multicast_ttlipv4_multicast_loopto_ssize differ.  expected as sizeof(int)=%d but %ldsize differ.  expected as sizeof(char)=%d but %ldsize differ.  expected as sizeof(struct linger)=%d but %ldipv4_multicast_loop socket option expectedipv4_multicast_ttl socket option expected�<���>���>���A��dA���>���>���>���>���>���>���<���<��B���<���<���<��lB���>���>��A��A���<���<���<���<���<���<���<���<���>��DB��P>��P>���@���@��<>���B��<>��ZB���@���@��-<��-<��-<��-<��<>��H��H���G���G���G���G���G��oG��VG��=G��$G���B���F���F���F���B���F��unix_rightsaddr is not AF_INET6 sockaddraddr is not AF_INET sockaddrto_arysendmsg(2) would blockIO expected cmsg_type:%d cmsg_level:%d%Y-%m-%d %H:%M:%S %s.%06ld %s.%09ld pid=%u uid=%u gid=%u ifindex:%d spec_dst:invalid-address spec_dst:%srecvmsg for buffered IOrecvmsg(2) would blockmax data length too biginvalid fd in SCM_RIGHTSAncillaryDatacmsg_is?timestampip_pktinfoipv6_pktinfoipv6_pktinfo_addripv6_pktinfo_ifindexIPV6_PKTINFO ancillary data expectedIP_PKTINFO ancillary data expectedSCM_RIGHTS ancillary data expectedtimestamp ancillary data expectedaddr size different to AF_INET6 sockaddraddr size different to AF_INET sockaddrspec_dat size different to AF_INET sockaddrspec_dst is not AF_INET sockaddran element of controls should be 3-elements arraymax control message length too biginvalid control message (cmsg_len == 0)sockaddr string too biguninitialized socket addressneed AF_UNIX addressneed IPv4 or IPv6 address01234567890123456789abcdefABCDEF.:0123456789.unknown protocol family: %dunknown socktype: %dunknown IP protocol: %dunknown protocol: %dunknown address family: %dtoo-short-sockaddr.?:?.%d[%s]:%d(sockaddr %d bytes too long)too-short-AF_UNIX-sockaddrempty-path-AF_UNIX-sockaddrUNIX :%02x[protocol=%difindex=%dhatype=%dOTHERHOSTOUTGOINGpkttype=%dhalen=%dhwaddr]unknown address family %d%s address format unknown<any><broadcast>hostname too long (%zu)%ldservice name too long (%zu)unexpected address familyunexpected protocol familyunexpected socktypeunexpected protocolunknown:%dunknown address family: %sempty-sockaddr#<%s:  PF_???(%d) TCP UDP SOCK_???(%d) UNKNOWN_PROTOCOL(%d) (%s)Addrinfoinspect_sockaddripunixafamilypfamilycanonnameipv4?ipv6?unix?ip?ip_unpackip_addressip_portipv4_private?ipv4_loopback?ipv4_multicast?ipv6_unspecified?ipv6_loopback?ipv6_multicast?ipv6_linklocal?ipv6_sitelocal?ipv6_unique_local?ipv6_v4mapped?ipv6_v4compat?ipv6_mc_nodelocal?ipv6_mc_linklocal?ipv6_mc_sitelocal?ipv6_mc_orglocal?ipv6_mc_global?ipv6_to_ipv4unix_pathto_sockaddrmarshal_dumpmarshal_loadsocket/addrinfotoo short AF_UNIX address: %zu bytes given for minimum %zu bytes.too long AF_UNIX path (%zu bytes given but %zu bytes max)unexpected sockaddr size for IPv4unexpected sockaddr size for IPv6 (%d bytes for %d bytes sockaddr_in)too-short-AF_INET6-sockaddr %d bytes(%d bytes for %d bytes sockaddr_ll)newline at the end of hostnamealready initialized socket addressLinux abstract socket too longЍ�������x���x���x���x���x���x���x���P���x���x���x���x���x���x���`���uninitialized ifaddrinvalid interface name: %s,#<%sUP%sBROADCAST%sDEBUG%sLOOPBACK%sPOINTOPOINT%sRUNNING%sNOARP%sPROMISC%sNOTRAILERS%sALLMULTI%sMASTER%sSLAVE%sMULTICAST%sPORTSEL%sAUTOMEDIA%sDYNAMIC%s%#llx netmask= broadcast= dstaddr=Ifaddrflagsnetmaskbroadaddrdstaddrsocket/ifaddr;Lh����h`���� ����%���L-���|Ϳ����������$ ����(���40����8���p!{���<1�����>�����?`���������������@��(`��@p��T���|p����������0������
���\
���
����
���Hp���`�������`��D������������p����,@�@����| ���0���p��� ���� ���!��P!��P"��P�(��d�(���@)����)���*���`*����*�� +��(�+��D�+��`@,��|�,���-���`-����-����-����-���.��H�/���0������������`�������4p������������������`���D����x ����@�������������<`���`��������������P���`���� ����P����p�������������@���`���P����� ���0���P���,�X`����0���������p����$������8���`����P��� ������8����0���`�������������P��@���`�������@��������H����@���P������p�����(0��t����@���`�� ��� ��p P��� ���� @��� ��(!���T!����!����!�
��"�
�� "`��H"���d"0���"����"`
���"p
���"�
���"p��l#����#����#@���#���($��\$p��x$ ���$P���$����$���$ ���$@��%���4%���`%p���% ���%���&`��d&p��x&����&����&P ���&� ���&� ��'�!��0'�!��P'`"���'�"���'#���'P#���'�#��(�$��,(0%��H(�%��d(`&���(�&���(0'���(P'��)�'��4)�'��L)�(��|)*���)�*���)+�� *,��L*`-���*�.���*�=��+@>��<+p>��T+�>��l+`?���+@���+�@��,PA��H,�C��h,�C��|,�C���,D���,`D���,�D��0-�D��H-`E��|-�E���-�E���-F���-�F��.G��H.`G��d. H���.pH���.�H���.pI�� /�J��h/`K���/L���/�M��0�M��@0�N��|0�O���0�Q���00X��P1�Y���1�`���1�`��2�`��2a��D20a��X2�a���2�j���2�j���2k��3pm��83�m��L3�m��t3n���3`n���3�n���3�n��4�o��h4�o���4�o���4�p���4�p���4q��5 q��45@q��P5pq��l5Pr���5�r���5�r���5s���5Ps��6�s��$6�s��D6 t��\6`t��t6�t���6�t���6u���6@u���6�u���6�u��7v�� 7`v��<7�v��X7Pw��t7x���7`x���7�x���7�x���7 y��8Py��8�y��88�y��T8�y��p8 z���8p~���8�~��9�~��(9@��`9 ����9P����9�����9Ѕ��P:����:�����:�����: ���,;��;P����;��<`���T<@����<М���<��(=���=P����=�����=p���@>Ц��T>���p>�����>@����>�$? ����?�����?P���(@0���P@`����@����@P���Ap���,A����@Aд��`A���|A ����A����A`����A����0B�LB ���lBй���B�����B�C ���(C����PC����dCP���Cp���C����C ��D`��D���<D���\D ��|D`���D����D����D����D@��EzRx�$ ����FJw�?:*3$"DȞ���\����$p����QE�I�G yAA��HR(�����<F�F�G VAAE������HS����$���]A�G w
AHSA0L����E�D�G0(P̶��WF�D�F �CAB|���/����'�8���uH T
AL������F�D�B �B(�D0�A8�G��
8A0A(B BBBEL<���iF�H�B �E(�D0�A8�J�U
8A0A(B BBBEH`\����F�B�E �B(�D0�D8�D@�
8D0A(B BBBDL�����F�B�D �A(�G0�
(A ABBFL
(A ABBAH������F�K�D �C(�D0b
(C ABBJs(C ABB@HԾ���F�B�E �D(�D0�G`k
0A(A BBBA�����EE�l
AL������F�E�E �G(�D0�n
(A EBBMn
(H BBBAH����7F�H�E �B(�A0�D8�Gp�
8A0A(B BBBH D���E�J��
AEh����H�D�����O�K�G ~
AAGr
CAB�	��F ���P��n����V8����AS�K�G H
AAA���D ��0��$D����

�cC���Dlp��9������8
�������R���>0�,���B�D�D �G0l
 AABG���&��QH C
A4X��QH C
AP���QH C
Al���QH C
A�$��QH C
A�h��QH C
A����QH C
A����QH C
A�4��QH C
Ax��QH C
A0���QH C
AL��QH C
AhD��QH C
A������������78�����K
FP
HI
GU
KU
KU
KU8�����K
FP
HI
GU
KU
KU
KU8T��L`���{E��{l�������4�(���NF�D�D �g
ABHJAB�@���&E�UL�T����F�B�B �B(�A0�A8�D�9
8A0A(B BBBK$zRx��������,l���t	�����	����,�	����E�C
D��E�J���
A(�	�����E�C�D P
FAA0�	���VE�D�D l
FAHDDA0,
@���VE�D�D l
FAHDDA`
l���AAD(|
p����E�A�G�v
AAK�
�AAD(�
�����E�A�G�v
AAK �
|����E�D0u
AA(�����E�A�G�s
AAF(@|����E�A�G�s
AAF(l����E�G�G��
AAB@����F�B�B �A(�D0�GP�
0A(A BBBH zRx�P�����(Ѧ�����L�~4x���H����,E�Xd����x����)L�\�����Rw$����@E�I�F fDA0����F�A�A �D0�
 AABF(
���E�A�D@�
AAE80
�����F�B�A �D(�MP(A ABBl

���CE�v,�
�����F�H�A �{
ABA�
����
���(�
���~E�F�G�d
AAA(p����E�D�G�n
AAA08Ԧ���F�D�A �G��
 AABF lp���vIlM IE`(�̧���E�A�D0�
AAA�`����H v
A��Ԩ���F�B�B �B(�A0�A8�G� L�1��1E�1X�1B�1��1b�1F�1A�1n�1L�1V�1A�1|
8A0A(B BBBC$zRx��1������,8��� �����E�D ]
AAzRx� � ��$�`���NE�A�G pHD(�����E�A�G��
AAD(@L���mE�A�J s
FAF8l�����F�D�A �A(�D0G
(F ABBN@�$����F�D�B �A(�A0�D@�
0A(A BBBAL�����F�B�B �B(�A0�A8�G�T
8A0A(B BBBE<`���;E�T����&F�D�D �t����<E������"E�D�G ��5E�D�I $��7E�M�O(B0F(D ����&F�D�D ����"E�D�G 4(���QE�F Pl���&F�D�D � p|����E�G0
ADzRx�0� ��� ����E�G0
ADX��(�p���E�D�G@�
AAFzRx�@�� ����X4���[l����	(�|����E�K�D �AA����f�\���RE�LH�����`F�G�B �B(�A0�D8�DpB
8A0A(B BBBJ@(����cF�B�B �A(�D0�DP�
0A(A BBBE0l���F�I�K �G�X
 AABC�L����X���[D0~
AP������F�B�A �A(�G� I� [
(A ABBE�� H� X� A� ,$����E�C
B�Q�����
A,T���+E�I
D��I�E�D��
E(����V�Z�h�o
IL
A(�<��E�D�G�}
AAA(����E�D�G�}
AAAd��L��$����CE�v@�	`T��F�B�B �B(�D0�D8�F���J�J�B�I�X
8A0A(B BBBG���\L�x$���eHYP H(B0ID��ZK�I
AT�bK�Q
A(4��}E�D�G�e
AAA`���L��|�����t����F�B�B �B(�A0�A8�G@�
8F0A(B BBBHN
8C0A(B BBBFD8D0A(B BBB4 ��mF�A�D �D�
 AABF(X4��E�D�G@z
AAA(����E�D�G@y
AAA(�<�]E�A�G |
AAE0�p�aE�A�D 
FAHDCA��`E�d
G,���L��L��)K[d���H0S
E�����$�(�0��E�A�G�p
AAA(����E�A�G�p
AAA(8��E�A�G�M
AAD4@��F�D�A �M�6
 AABFLxT�F�B�B �B(�A0�A8�G��
8A0A(B BBBAL����zF�B�B �E(�D0�A8�J�2
8A0A(B BBBF�,�L��L��ZK�I
Ah$���bK�Q
A(�x���}E�D�G�e
AAA���������L���X���!A�R
ED8h����B�E�D �C(�FPT
(A ABBB@���BTmX���GTr$p<���JE�A�G pGA(�d����E�A�G0k
AAA������H h
H�l����H X
H����H X
H0T����F�A�D �D0|
 AABAL����\D H
D0h���lA�A�G K
AAJIAA�@���HI0�H���lA�A�G K
AAJIAA�����HI,�����F�A�A �_
AGI@0���gF�B�E �D(�A0�J@?0D(A BBB,tH��zF�A�A �B
ABK,����zF�A�A �B
ABK(�����A�A�G�x
AAE0���FB�A�A �D�o
 AABE04���&B�A�A �GPz
 AABGLh���7F�B�B �B(�A0�A8�J�w
8A0A(B BBBG4����bF�B�D �D(�G@A(D ABB����(KP ��(KP(  ,���E�K�J0x
AAD8L ����F�H�D �D(�D@t
(A ABBA8� $���F�H�D �D(�D@}
(A ABBC4� ���]F�H�D �D(�D0n(K ABB� ��(L�	!��0!��!A�R
ED$P!,��(A�G�G IGD4x!4��\B�F�A �A(�D0G(A ABB0�!\��lA�A�G K
AAJIAA�!���HI0�!���lA�A�G K
AAJIAA0"���HI0H"���lA�A�G K
AAJIAA|" ��HI8�"(��nF�E�A �D(�G0v
(A ABBE(�"\���E�A�G0k
AAA�"���RHg
F<#����B�B�B �D(�D0��
(A BBBBX#t��HH`z
A,t#���iE�D`dhGpYhA`T
AA,�#����E�DpfxG�qxAp\
AAD�#H��^F�B�A �A(�G`shrpQhG`^
(A ABBF($`���E�A�G P
GAE,H$����F�A�A ��
ABA@x$D��gF�B�E �D(�A0�J@?0D(A BBB4�$p��[B�B�D �D(�G@~(D ABB8�$����F�H�D �D(�D@v
(A ABBJ 0%��#E�Gp�
AE T%��E�DP?
AGLx%!��`B�B�B �B(�A0�A8�G��
8A0A(B BBBF$zRx��������,7���H&�&���F�B�B �B(�A0�C8�G`�
8A0A(B BBBADP&<(���F�B�B �A(�A0�J�3
0A(A BBBG�&�.��HH I�&�.��HB I$�&�.��0E�G�G ZAA�&�.��4'�.���F�B�A �A(�D0|(A ABBLD'8/���B�B�B �B(�A0�A8�J��
8A0A(B BBBA�'�7��HH I�'�7��HB I�'�7��pHg�'0:��
$(,:��7E�E�J YDA$((D:��:E�E�J \DA(P(\:��XF�A�E �FCB(|(�:��XF�A�E �FCB�(�:��A�YT�(�:���F�B�A �A(�K8V@L8A0v
(C ABBJQ
(C ABBG)0;��"A�\8)D;��LL)P;���F�J�A �A(�G0^
(C ABBAQ
(C ABBG�)�;���)�;��E�P�)�;��AAK�)�;��AAK*�;��.H\
E *�;���Hf
J<*�<��5Dk
AX*�<��@HX
HWx*=��@HX
HW�*$=��@HX
HW�*D=��@HX
HW�*d=��@HX
HW�*�=��AHx+�=��9Hp(+�=��*Ha@+�=��1HhX+$>��1Hhp+L>��(H_�+d>��@Hw�+�>��:Hq�+�>��:A�s
A�+�>��\H N
A�+?��\H N
A,`?���H i
G(,�?���HA
WD,x@��BHt
A`,�@��<Hn
A|,�@��<Hn
A�,�@��<Hn
A�,A��'HY
A�,,A��,HY
F�,@A��,HY
F-TA��,HY
F$-hA��:Hl
AH@-�A��BB�B�B �B(�A0�A8�D�h
8A0A(B BBBH4�-�E��YF�D�A �X
DBG^DB�-�E��HN4�-�E��AF�E�D �D(�I0^(A ABBL.�E���F�B�E �E(�D0�I8�D��
8A0A(B BBBA d.hH��*DH FAH
A�.tH��iD0_
A\�.�H��F�I�B �B(�A0�A8�G�	��	F�	_�	A�	�
8A0A(B BBBHL/xK��7F�B�K �A(�L�V�J�I�A�@
(A ABBH T/hL���E�N c
AA x/�L���E�N0�
AA@�/�M���B�A�A �J�k�I�W�A��
 AABK\�/�O���B�B�B �B(�A0�D8�I�|
8A0A(B BBBD/�J�R�A� @0\W��XE�L�@
AA\d0�W���F�B�A �A(�D@{
(A ABBAc
(D ABBDd
(C ABBD@�0�X��wF�B�B �A(�A0�G��
0A(A BBBI@1Z���F�A�A �D0T
 AABDv
 AABFHL1�Z���F�B�E �E(�D0�A8�O��
8A0A(B BBBD@�1�_��B�I�E �D(�D0�Gpy
0A(A BBBH\�1�`���F�B�B �B(�D0�A8�Q���U�S�A��
8A0A(B BBBE<2Pf��lH@^
AX2�f��bHPT
A|t2�f���F�E�B �B(�A0�C8�J�V�H�I�A�|�M�P�B�\�H�Z�A�
8A0A(B BBBA�2(h��V3th��*E�]$3�h��~hXfzRx���8l3�h���B�E�A �A(�J��
(A ABBF,�3Dj���F�A�A �]
ABH\�3�j��%F�B�B �L(�G0�D8�G��
8A0A(B BBBG��[�T�A�$zRx��������,��t4Xo��YH0K
AH�4�o���F�B�L �E(�D0�E8�DPt
8A0A(B BBBD$�4 p���H0w8r@K8A0W
Ad5�p��(F�B�B �A(�A0�F�5�B�`�D�E�V�F�D�p
0A(A BBBF@l5�r���B�M�L �D(B0I(A y(Y0L(A IAB�5�r��EE�z
A�50s���5<s���5Hs��9E�P
KX6hs��*A�_
E06|s��E�U0L6�s���F�K�A �D0B
 AABD(�6<v��EE�H�G ^
AAD4�6`v��_F�D�A �l
ABF[AB�6�v��#E�]7�v��.E�W
LA< 7�v���F�D�D �F0A8N@O8A0T
 AABA@`7w���F�A�A �Q
CBJ|
ABIKCB�7�w��ME�G�7�w��-E�g$�7�w��tE�G��
AJ8Hz��8Tz���L�l48�~��HH8�~��jF�B�B �B(�A0�A8�DP%
8A0A(B BBBG�8���2E�U
FM�8���2DU
A�8<���7E�b
IF�8\���7E�b
IF9|���7E�\
OF09����7E�\
OFP9����HPh9��@E�Y
F�9��HQ,�9�_F�D�A �Y
ABI$�9 ���E�H�D �COGNU���!#�`G���������Co�`�����A�l
ܢ� #� #���o`(+
W�##�HO(H 	���o���o�G���o�o�D���o	�!# m0m@mPm`mpm�m�m�m�m�m�m�m�mnn n0n@nPn`npn�n�n�n�n�n�n�n�noo o0o@oPo`opo�o�o�o�o�o�o�o�opp p0p@pPp`ppp�p�p�p�p�p�p�p�pqq q0q@qPq`qpq�q�q�q�q�q�q�q�qrr r0r@rPr`rpr�r�r�r�r�r�r�r�rss s0s@sPs`sps�s�s�s�s�s�s�s�stt t0t@tPt`tpt�t�t�t�t�t�t�t�tuu u0u@uPu`upu�u�u�u�u�u�u�u�uvv v0v@vPv`vpv�v�v�v�v�v�v�v�vww w0w@wPw`wpw�w�w�w�w�w�w�w�wxx x0x@xPx`xpx�x�x�x�x�x�x�x�xyy y0y@yPy`ypy�y�y�y�y�y�y�y�yzz z0z@zPz`zpz�z�z�z�z�z�z�z�z{{ {0{@{P{`{p{�{�{�{�{�{�{�{�{|| |0|@|P|`|p|�|�|�|�|�|�|�|�|}} }0}@}P}`}p}�}�}�}�}�}�}�}�}~~ ~0~@~P~`~p~�~�~�~�~�~�~�~�~ 0@P`p���������� �0�@�P�`�p�����������ЀGA$3a1�l�GA$3p1113���GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113 �ܢGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSGA*GOW*�����GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY ��GA+GLIBCXX_ASSERTIONSGA*����GA*GA*GA!socket.so-3.4.4-3.el8.x86_64.debug��2�7zXZ�ִF!t/��B�`]?�E�h=��ڊ�2N�I�0� ��H���L�xe+F�c���|�>jI�p1��w��3i������g`g&(u=z�P:/��\7��q�@�>�W���܄#��>}��j/+XPU��L��)\��Q<��
-A��zc����zNZ���h��`�'K�V�LH��"M
�j���H
���ȋ�s|xq��DQ�C�/bV���g��Y;�@њ��?���h[��%��/�B��@B����Th�\g�w��{ݸD�y� ��H�r�{_�����{_JQ?OV��9�J<Zb�O��S���b
b�\Ԭb�d�?g�GF�&��]��n���ȑ׆�"�0"�z���Z��㢀b,��4��-2�֤������on��!�)�ǖȴ��u�8���~����Hg�F��a������bG��
d�Ep�m9�N����E�R�~��T-���p&XR���������%OBi`ve�d���g�<g�>%��1ˮ��I�]��'���\�{�W�bj򪞘:�$���hH�ץ2�A�_��>j7U�����l����kW}\��8q(g�p���3i>Ϫ�|����Q>e�Z��	��*�&b��G-�'~4F�̵�	�_|���T�E���cMF���"��h(.�<��7_
���q�G+�.ީ?�ʴ�~�q����{����Y{�♞����J+�(OB�)���G�`�j��5Xl���V�)
�3)�T������?I&:/��hÖh����'�Z���qMQ���_��qc���W,f�^�+���b�6��_h�mb-�ɼ���
����Rs"H��./1%�5���٠�)���u]/
�d�
�&�A�/���Xo�㗃5g���v�U���R�&�7�z�M��sN���+%h苀�;��9ޠb���am9,�>�ȶ�H�|yᥨ]:��[�T�"�5���H�`��j�{+��Q��Bkľ�p�/;�nD���j�6��>����Ϲ��9oH��w��`����@��}5�:oi(��wR�|�'� �r�m�r�z�R�[�w���iA|���FJ(�2���B���4��p�σ8�<��WE�,�b��_^��2�x�[\Ĝ.){{�ie�\�;0�\\��"���;���% ���i���������I���T[��ѺS1�� Щ�ⳕ���:��fE>�	H�Z����?��w�%L��rtnVe�>aE�Ը�C�ux��4G9q�vOR@����8#~,U.�(n��6�hD��{Y�pOp ����1G��N}i��V~ow1�B�0a!�>'�Ω���
c������z�~�Tv�	Uc�-Xڤ[H�>�<���R��>j˨�D>Mg�w�������&�*���6�GC��X�����XK�
gAD��>���)K�`|�"x��	c��,�8!/�&���T�h*�/��kX^o��щ�v��B���!����u�Lj9����^|3<��E�U�$�b�����*
Өf�	Ɖ�ysE��{����6�q`}55E��8��we��*�x� um�
L����et�s|�^�~=��@A��̰����%YyU�5���f�n��P]5�٩T�9`�Yz�ߋh�K���R'��k��.��4S����J$1��V����Z]r�Ua=�������`���#�?�5�ٙ"�%�y?}Eu�7�����,8��6��.��}��+Z��V�A�m�/,�f5X��>!l�8�6T��fwv��r@,~���EFy��p�P���t&��&j5�AQ��	?	�5b��a9~�:�W`�|���Y�c2¼��mXKM��D�^���c��oZ�:��3g�H���j��
R�����j�s{+�,/"ALj�lW#xHō�e��]����!�� ��|!�tYĞ��kV�Uc����֯�q|���O5�B?ܨ��U@wVpo'ӡ���\�R�;~ۥ�	N�Vu;\���2�H�^(h�P-�����L�)��x��
��k���g��/?Ş�E�e�/1�S�#� �E�W�I����^_ӌ()=��X�����I�n�zϵ��t�����-+`NW�:�	��C�w�v��rB8�z��7��}�(n^�/�^z.PKv��kÉ3�A$(�ԑ7-��6���T+XhY˯���ٌy�}/����֐Ҧ&���|��
7B��>�����͋/7�-l^S��EH��Å�2=/��i#��(z���YFع��R�Wũ�ԓ�*���Lj�SV���f�gO��(�;"l�z9���xO�tf}k~N�e����;�7�p5�E�n��@`���{B�1��;g採4�;E��q��q�W�|��R|q��K���VT�J?�}RD���
�W�o��� HH�����Lo6��c�"s��m,~�Dg%6�>��0_����p���l�{yb��N���0N�9̒�S�3 ��H��]E���j�=�U/:�/�"@�~�c���K�Z�^u���Q�Q�Y�Z�
(E����&m䭬b�~ʯ���&R��A�����*��N�LV��'RW��sȫRMc���ށ-����{o����(?��/�G@r��w�C�g*�@������4�ܱo�~6�@W��nӷ����Չ���
���$�&��r,�����B鑢�]P��D�T�9�*'zc�s�[ծ��
f��.ў
C��;��\,��#�Ѐ�Q��Z/�kJYo4�h��Td�νZ������<֏��m��	�$�
�W���'��냹}~�:�]�r\���T�i�&��5ہơc��V@A���]���kTn�����t�-N�P)c��2������Ù[tߞ�ֺjp�,�zobK$��H
�ʊ\[U|il������j0uDm።2�eO�.3+���u.�=�0s�D7`�uc�U��c9��AI���]�s��%
PP�q�RO=�)-m��2��`��=�s"��IT�k'�ʽ�J���1�o���4�A���t�ō��B�\,�@�I���>��R� ���34s��~�����r���d���D�������F_y�K��=2ֹ)5A昩aw�1�bf����!�b'K��ЏQ{ѻ�g�'M���%��ݡ�#��-/n�=��yZP��2w��xG�8��	�P:�&�13��`|f�����Q��W�/@g��u|8�R� �{}J��zp9�D�t����	{��ب^�Jw$
�Z�@W�X���=�_�3��8��bP�dh�*chTW\�I[>	Ё=���;��Kck�ʑm��	�sl�v�y�s�	�5@�cZS-Wak��.NM~}��Uu�z �����B�h�0�T͗ޏr��0ϩ�TG�)e�r�.�-����sם)~h�,��E$Z>�Xɳ��ksa�K���Z77��0�Z��,?fE"�0ӌ׵���h�˼��������t{���۲�ـs�Ւ��Ʒ�]j�A�
D|*����F6�\�ǽ]F��+9�ݮ�h��g���>�)����l��se����jag�5�q��!�;�;�� o (#+����^�"���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``�($0(+(+W8���o�D�DE���o�G�G�T(H(H ^BHOHO�h�l�lcmm�n���w����<}ܢܢ
����3�����L������9��� �� #� �� #� �!#!� ��!#�! ��##�#�0#0� 0#0� ��2c0t
x5(�5�@D(PK*J[�߽�C�Clib64/ruby/rbconfig.rbnu�[���# encoding: ascii-8bit
# frozen-string-literal: false
#
# The module storing Ruby interpreter configurations on building.
#
# This file was created by mkconfig.rb when ruby was built.  It contains
# build information for ruby which is used e.g. by mkmf to build
# compatible native extensions.  Any changes made to this file will be
# lost the next time ruby is built.

module RbConfig
  RUBY_VERSION.start_with?("3.4.") or
    raise "ruby lib version (3.4.4) doesn't match executable version (#{RUBY_VERSION})"

  # Ruby installed directory.
  TOPDIR = File.dirname(__FILE__).chomp!("/lib64/ruby")
  # DESTDIR on make install.
  DESTDIR = '' unless defined? DESTDIR
  # The hash configurations stored.
  CONFIG = {}
  CONFIG["DESTDIR"] = DESTDIR
  CONFIG["MAJOR"] = "3"
  CONFIG["MINOR"] = "4"
  CONFIG["TEENY"] = "4"
  CONFIG["PATCHLEVEL"] = "34"
  CONFIG["INSTALL"] = '/usr/bin/install -c'
  CONFIG["EXEEXT"] = ""
  CONFIG["prefix"] = (((TOPDIR && TOPDIR.empty?) ? nil : TOPDIR) || DESTDIR + "/opt/alt/ruby34")
  CONFIG["ruby_install_name"] = "$(RUBY_BASE_NAME)"
  CONFIG["RUBY_INSTALL_NAME"] = "$(RUBY_BASE_NAME)"
  CONFIG["RUBY_SO_NAME"] = "$(RUBY_BASE_NAME)"
  CONFIG["exec"] = "exec"
  CONFIG["ruby_pc"] = "ruby.pc"
  CONFIG["CC_WRAPPER"] = ""
  CONFIG["PACKAGE"] = "ruby"
  CONFIG["BUILTIN_TRANSSRCS"] = " enc/trans/newline.c"
  CONFIG["MKMF_VERBOSE"] = "0"
  CONFIG["MANTYPE"] = "doc"
  CONFIG["vendorarchhdrdir"] = "$(vendorhdrdir)/$(arch)"
  CONFIG["sitearchhdrdir"] = "$(sitehdrdir)/$(arch)"
  CONFIG["rubyarchhdrdir"] = "$(DESTDIR)/opt/alt/ruby34/include"
  CONFIG["vendorhdrdir"] = "$(rubyhdrdir)/vendor_ruby"
  CONFIG["sitehdrdir"] = "$(rubyhdrdir)/site_ruby"
  CONFIG["rubyhdrdir"] = "$(DESTDIR)/opt/alt/ruby34/include"
  CONFIG["RUBY_SEARCH_PATH"] = ""
  CONFIG["UNIVERSAL_INTS"] = ""
  CONFIG["UNIVERSAL_ARCHNAMES"] = ""
  CONFIG["configure_args"] = " '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/opt/alt/ruby34' '--exec-prefix=/opt/alt/ruby34' '--bindir=/opt/alt/ruby34/bin' '--sbindir=/opt/alt/ruby34/sbin' '--sysconfdir=/etc' '--datadir=/opt/alt/ruby34/share' '--includedir=/opt/alt/ruby34/include' '--libdir=/opt/alt/ruby34/lib64' '--libexecdir=/opt/alt/ruby34/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/opt/alt/ruby34/share/man' '--infodir=/opt/alt/ruby34/share/info' '--with-rubylibprefix=/opt/alt/ruby34/share/ruby' '--with-archlibdir=/opt/alt/ruby34/lib64' '--with-rubyarchprefix=/opt/alt/ruby34/lib64/ruby' '--with-sitedir=/opt/alt/ruby34/share/ruby/site_ruby' '--with-sitearchdir=/opt/alt/ruby34/lib64/ruby/site_ruby' '--with-vendordir=/opt/alt/ruby34/share/ruby/vendor_ruby' '--with-vendorarchdir=/opt/alt/ruby34/lib64/ruby/vendor_ruby' '--with-rubyhdrdir=/opt/alt/ruby34/include' '--with-rubyarchhdrdir=/opt/alt/ruby34/include' '--with-sitearchhdrdir=$$(sitehdrdir)/$$(arch)' '--with-vendorarchhdrdir=$$(vendorhdrdir)/$$(arch)' '--with-rubygemsdir=/opt/alt/ruby34/share/rubygems' '--with-ruby-pc=ruby.pc' '--with-compress-debug-sections=no' '--enable-shared' '--with-ruby-version=' '--enable-multiarch' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'"
  CONFIG["CONFIGURE"] = "configure"
  CONFIG["rubygemsdir"] = "$(DESTDIR)/opt/alt/ruby34/share/rubygems"
  CONFIG["vendorarchdir"] = "$(DESTDIR)/opt/alt/ruby34/lib64/ruby/vendor_ruby"
  CONFIG["vendorlibdir"] = "$(vendordir)"
  CONFIG["vendordir"] = "$(DESTDIR)/opt/alt/ruby34/share/ruby/vendor_ruby"
  CONFIG["sitearchdir"] = "$(DESTDIR)/opt/alt/ruby34/lib64/ruby/site_ruby"
  CONFIG["sitelibdir"] = "$(sitedir)"
  CONFIG["sitedir"] = "$(DESTDIR)/opt/alt/ruby34/share/ruby/site_ruby"
  CONFIG["rubyarchdir"] = "$(rubyarchprefix)"
  CONFIG["rubylibdir"] = "$(rubylibprefix)"
  CONFIG["ruby_version_dir_name"] = ""
  CONFIG["ruby_version"] = "3.4.0"
  CONFIG["sitearch"] = "$(arch)"
  CONFIG["arch"] = "x86_64-linux"
  CONFIG["sitearchincludedir"] = "$(includedir)/$(sitearch)"
  CONFIG["archincludedir"] = "$(includedir)/$(arch)"
  CONFIG["sitearchlibdir"] = "$(libdir)/$(sitearch)"
  CONFIG["archlibdir"] = "$(DESTDIR)/opt/alt/ruby34/lib64"
  CONFIG["libdirname"] = "archlibdir"
  CONFIG["RUBY_EXEC_PREFIX"] = "/opt/alt/ruby34"
  CONFIG["RUBY_LIB_VERSION"] = "3.4.0"
  CONFIG["RUBY_LIB_VERSION_STYLE"] = "3\t/* full */"
  CONFIG["RI_BASE_NAME"] = "ri"
  CONFIG["ridir"] = "$(datarootdir)/$(RI_BASE_NAME)"
  CONFIG["rubysitearchprefix"] = "$(sitearchlibdir)/$(RUBY_BASE_NAME)"
  CONFIG["rubyarchprefix"] = "/opt/alt/ruby34/lib64/ruby"
  CONFIG["MAKEFILES"] = "Makefile GNUmakefile"
  CONFIG["USE_LLVM_WINDRES"] = ""
  CONFIG["PLATFORM_DIR"] = ""
  CONFIG["COROUTINE_TYPE"] = "amd64"
  CONFIG["THREAD_MODEL"] = "pthread"
  CONFIG["SYMBOL_PREFIX"] = ""
  CONFIG["EXPORT_PREFIX"] = ""
  CONFIG["COMMON_HEADERS"] = ""
  CONFIG["COMMON_MACROS"] = ""
  CONFIG["COMMON_LIBS"] = ""
  CONFIG["MAINLIBS"] = "-lz -lrt -lrt -lgmp -ldl -lcrypt -lm -lpthread "
  CONFIG["ENABLE_SHARED"] = "yes"
  CONFIG["DLDSHARED"] = "$(CC) -shared"
  CONFIG["DLDLIBS"] = "-lc"
  CONFIG["SOLIBS"] = "$(MAINLIBS)"
  CONFIG["LIBRUBYARG_SHARED"] = "-Wl,-rpath,$(archlibdir) -L$(archlibdir) -l$(RUBY_SO_NAME)"
  CONFIG["LIBRUBYARG_STATIC"] = "-Wl,-rpath,$(archlibdir) -L$(archlibdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS)"
  CONFIG["LIBRUBYARG"] = "$(LIBRUBYARG_SHARED)"
  CONFIG["LIBRUBY"] = "$(LIBRUBY_SO)"
  CONFIG["LIBRUBY_ALIASES"] = "$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)"
  CONFIG["LIBRUBY_SONAME"] = "lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_API_VERSION)"
  CONFIG["LIBRUBY_SO"] = "lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)"
  CONFIG["LIBRUBY_A"] = "lib$(RUBY_SO_NAME)-static.a"
  CONFIG["RUBYW_INSTALL_NAME"] = ""
  CONFIG["rubyw_install_name"] = ""
  CONFIG["EXTDLDFLAGS"] = ""
  CONFIG["EXTLDFLAGS"] = ""
  CONFIG["hardenflags"] = "-fstack-protector-strong -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
  CONFIG["strict_warnflags"] = ""
  CONFIG["warnflags"] = "-Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wmisleading-indentation -Wundef"
  CONFIG["debugflags"] = "-ggdb3"
  CONFIG["optflags"] = "-O3 -fno-fast-math"
  CONFIG["NULLCMD"] = ":"
  CONFIG["ENABLE_DEBUG_ENV"] = ""
  CONFIG["DLNOBJ"] = "dln.o"
  CONFIG["RJIT_SUPPORT"] = "yes"
  CONFIG["YJIT_OBJ"] = ""
  CONFIG["YJIT_LIBS"] = ""
  CONFIG["CARGO_BUILD_ARGS"] = ""
  CONFIG["YJIT_SUPPORT"] = "no"
  CONFIG["CARGO"] = ""
  CONFIG["RUSTC"] = "no"
  CONFIG["INSTALL_STATIC_LIBRARY"] = "no"
  CONFIG["modular_gc_dir"] = ""
  CONFIG["EXECUTABLE_EXTS"] = ""
  CONFIG["ARCHFILE"] = ""
  CONFIG["LIBRUBY_RELATIVE"] = "no"
  CONFIG["EXTOUT"] = ".ext"
  CONFIG["PREP"] = "miniruby$(EXEEXT)"
  CONFIG["CROSS_COMPILING"] = "no"
  CONFIG["TEST_RUNNABLE"] = "yes"
  CONFIG["rubylibprefix"] = "$(exec_prefix)/share/ruby"
  CONFIG["setup"] = "Setup"
  CONFIG["SOEXT"] = "so"
  CONFIG["TRY_LINK"] = ""
  CONFIG["PRELOADENV"] = "LD_PRELOAD"
  CONFIG["LIBPATHENV"] = "LD_LIBRARY_PATH"
  CONFIG["RPATHFLAG"] = "-Wl,-rpath,%1$-s"
  CONFIG["LIBPATHFLAG"] = "-L%1$-s"
  CONFIG["LINK_SO"] = "\n$(POSTLINK)"
  CONFIG["ADDITIONAL_DLDFLAGS"] = ""
  CONFIG["ENCSTATIC"] = ""
  CONFIG["EXTSTATIC"] = ""
  CONFIG["ASMEXT"] = "S"
  CONFIG["LIBEXT"] = "a"
  CONFIG["DLEXT"] = "so"
  CONFIG["LDSHAREDXX"] = "$(CXX) -shared"
  CONFIG["LDSHARED"] = "$(CC) -shared"
  CONFIG["CCDLFLAGS"] = "-fPIC"
  CONFIG["STATIC"] = ""
  CONFIG["ARCH_FLAG"] = "-m64"
  CONFIG["DLDFLAGS"] = "-Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld"
  CONFIG["ALLOCA"] = ""
  CONFIG["dsymutil"] = ""
  CONFIG["codesign"] = ""
  CONFIG["cleanlibs"] = ""
  CONFIG["POSTLINK"] = ":"
  CONFIG["incflags"] = ""
  CONFIG["WERRORFLAG"] = "-Werror"
  CONFIG["RUBY_DEVEL"] = ""
  CONFIG["CHDIR"] = "cd -P"
  CONFIG["RMALL"] = "rm -fr"
  CONFIG["RMDIRS"] = "rmdir --ignore-fail-on-non-empty -p"
  CONFIG["RMDIR"] = "rmdir --ignore-fail-on-non-empty"
  CONFIG["CP"] = "cp"
  CONFIG["RM"] = "rm -f"
  CONFIG["PKG_CONFIG"] = ""
  CONFIG["DOXYGEN"] = ""
  CONFIG["DOT"] = ""
  CONFIG["MKDIR_P"] = "/usr/bin/mkdir -p"
  CONFIG["INSTALL_DATA"] = "$(INSTALL) -m 644"
  CONFIG["INSTALL_SCRIPT"] = "$(INSTALL)"
  CONFIG["INSTALL_PROGRAM"] = "$(INSTALL)"
  CONFIG["SET_MAKE"] = ""
  CONFIG["LN_S"] = "ln -s"
  CONFIG["DLLWRAP"] = ""
  CONFIG["WINDRES"] = ""
  CONFIG["ARFLAGS"] = "rcD "
  CONFIG["try_header"] = ""
  CONFIG["CC_VERSION_MESSAGE"] = "gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-26)\nCopyright (C) 2018 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions.  There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  CONFIG["CC_VERSION"] = "$(CC) --version"
  CONFIG["CSRCFLAG"] = ""
  CONFIG["COUTFLAG"] = "-o "
  CONFIG["OUTFLAG"] = "-o "
  CONFIG["CPPOUTFILE"] = "-o conftest.i"
  CONFIG["GNU_LD"] = "yes"
  CONFIG["GCC"] = "yes"
  CONFIG["EGREP"] = "/usr/bin/grep -E"
  CONFIG["GREP"] = "/usr/bin/grep"
  CONFIG["CPP"] = "$(CC) -E"
  CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection"
  CONFIG["OBJEXT"] = "o"
  CONFIG["CPPFLAGS"] = " $(DEFS) $(cppflags)"
  CONFIG["LDFLAGS"] = "-L. -Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed"
  CONFIG["CFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC"
  CONFIG["STRIP"] = "strip -S -x"
  CONFIG["RANLIB"] = "gcc-ranlib"
  CONFIG["OBJDUMP"] = "objdump"
  CONFIG["OBJCOPY"] = "objcopy"
  CONFIG["NM"] = "gcc-nm"
  CONFIG["LD"] = "ld"
  CONFIG["CXX"] = "g++"
  CONFIG["AS"] = "as"
  CONFIG["AR"] = "gcc-ar"
  CONFIG["CC"] = "gcc"
  CONFIG["wasmoptflags"] = ""
  CONFIG["WASMOPT"] = ""
  CONFIG["config_target"] = "x86_64-redhat-linux-gnu"
  CONFIG["target_os"] = "linux"
  CONFIG["target_vendor"] = "redhat"
  CONFIG["target_cpu"] = "x86_64"
  CONFIG["target"] = "$(target_cpu)-$(target_vendor)-$(target_os)"
  CONFIG["host_os"] = "$(target_os)"
  CONFIG["host_vendor"] = "$(target_vendor)"
  CONFIG["host_cpu"] = "$(target_cpu)"
  CONFIG["host"] = "$(target)"
  CONFIG["build_os"] = "linux-gnu"
  CONFIG["build_vendor"] = "redhat"
  CONFIG["build_cpu"] = "x86_64"
  CONFIG["build"] = "x86_64-redhat-linux-gnu"
  CONFIG["RUBY_VERSION_NAME"] = "$(RUBY_BASE_NAME)-$(ruby_version_dir_name)"
  CONFIG["RUBYW_BASE_NAME"] = "rubyw"
  CONFIG["RUBY_BASE_NAME"] = "ruby"
  CONFIG["RUBY_PROGRAM_VERSION"] = "$(MAJOR).$(MINOR).$(TEENY)"
  CONFIG["RUBY_API_VERSION"] = "$(MAJOR).$(MINOR)"
  CONFIG["HAVE_GIT"] = "yes"
  CONFIG["GIT"] = "git"
  CONFIG["cxxflags"] = ""
  CONFIG["cppflags"] = ""
  CONFIG["cflags"] = "$(hardenflags)  $(optflags) $(debugflags) $(warnflags)"
  CONFIG["MAKEDIRS"] = "/usr/bin/mkdir -p"
  CONFIG["target_alias"] = ""
  CONFIG["host_alias"] = "$(target_alias)"
  CONFIG["build_alias"] = "x86_64-redhat-linux-gnu"
  CONFIG["LIBS"] = "-lm -lpthread "
  CONFIG["ECHO_T"] = ""
  CONFIG["ECHO_N"] = "-n"
  CONFIG["ECHO_C"] = ""
  CONFIG["DEFS"] = ""
  CONFIG["mandir"] = "$(DESTDIR)/opt/alt/ruby34/share/man"
  CONFIG["localedir"] = "$(datarootdir)/locale"
  CONFIG["libdir"] = "$(exec_prefix)/lib64"
  CONFIG["psdir"] = "$(docdir)"
  CONFIG["pdfdir"] = "$(docdir)"
  CONFIG["dvidir"] = "$(docdir)"
  CONFIG["htmldir"] = "$(docdir)"
  CONFIG["infodir"] = "$(DESTDIR)/opt/alt/ruby34/share/info"
  CONFIG["docdir"] = "$(datarootdir)/doc/$(PACKAGE)"
  CONFIG["oldincludedir"] = "/usr/include"
  CONFIG["includedir"] = "$(exec_prefix)/include"
  CONFIG["localstatedir"] = "$(DESTDIR)/var"
  CONFIG["sharedstatedir"] = "$(DESTDIR)/var/lib"
  CONFIG["sysconfdir"] = "$(DESTDIR)/etc"
  CONFIG["datadir"] = "$(DESTDIR)/opt/alt/ruby34/share"
  CONFIG["datarootdir"] = "$(prefix)/share"
  CONFIG["libexecdir"] = "$(DESTDIR)/opt/alt/ruby34/libexec"
  CONFIG["sbindir"] = "$(DESTDIR)/opt/alt/ruby34/sbin"
  CONFIG["bindir"] = "$(exec_prefix)/bin"
  CONFIG["exec_prefix"] = "$(DESTDIR)/opt/alt/ruby34"
  CONFIG["PACKAGE_URL"] = ""
  CONFIG["PACKAGE_BUGREPORT"] = ""
  CONFIG["PACKAGE_STRING"] = ""
  CONFIG["PACKAGE_VERSION"] = ""
  CONFIG["PACKAGE_TARNAME"] = ""
  CONFIG["PACKAGE_NAME"] = ""
  CONFIG["PATH_SEPARATOR"] = ":"
  CONFIG["SHELL"] = "/bin/sh"
  CONFIG["UNICODE_VERSION"] = "15.0.0"
  CONFIG["UNICODE_EMOJI_VERSION"] = "15.0"
  CONFIG["platform"] = "$(arch)"
  CONFIG["archdir"] = "$(rubyarchdir)"
  CONFIG["topdir"] = File.dirname(__FILE__)
  # Almost same with CONFIG. MAKEFILE_CONFIG has other variable
  # reference like below.
  #
  #   MAKEFILE_CONFIG["bindir"] = "$(exec_prefix)/bin"
  #
  # The values of this constant is used for creating Makefile.
  #
  #   require 'rbconfig'
  #
  #   print <<-END_OF_MAKEFILE
  #   prefix = #{RbConfig::MAKEFILE_CONFIG['prefix']}
  #   exec_prefix = #{RbConfig::MAKEFILE_CONFIG['exec_prefix']}
  #   bindir = #{RbConfig::MAKEFILE_CONFIG['bindir']}
  #   END_OF_MAKEFILE
  #
  #   => prefix = /usr/local
  #      exec_prefix = $(prefix)
  #      bindir = $(exec_prefix)/bin  MAKEFILE_CONFIG = {}
  #
  # RbConfig.expand is used for resolving references like above in rbconfig.
  #
  #   require 'rbconfig'
  #   p RbConfig.expand(RbConfig::MAKEFILE_CONFIG["bindir"])
  #   # => "/usr/local/bin"
  MAKEFILE_CONFIG = {}
  CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}

  # call-seq:
  #
  #   RbConfig.expand(val)         -> string
  #   RbConfig.expand(val, config) -> string
  #
  # expands variable with given +val+ value.
  #
  #   RbConfig.expand("$(bindir)") # => /home/foobar/all-ruby/ruby19x/bin
  def RbConfig::expand(val, config = CONFIG)
    newval = val.gsub(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) {
      var = $&
      if !(v = $1 || $2)
	'$'
      elsif key = config[v = v[/\A[^:]+(?=(?::(.*?)=(.*))?\z)/]]
	pat, sub = $1, $2
	config[v] = false
	config[v] = RbConfig::expand(key, config)
	key = key.gsub(/#{Regexp.quote(pat)}(?=\s|\z)/n) {sub} if pat
	key
      else
	var
      end
    }
    val.replace(newval) unless newval == val
    val
  end
  CONFIG.each_value do |val|
    RbConfig::expand(val)
  end

  # call-seq:
  #
  #   RbConfig.fire_update!(key, val)               -> array
  #   RbConfig.fire_update!(key, val, mkconf, conf) -> array
  #
  # updates +key+ in +mkconf+ with +val+, and all values depending on
  # the +key+ in +mkconf+.
  #
  #   RbConfig::MAKEFILE_CONFIG.values_at("CC", "LDSHARED") # => ["gcc", "$(CC) -shared"]
  #   RbConfig::CONFIG.values_at("CC", "LDSHARED")          # => ["gcc", "gcc -shared"]
  #   RbConfig.fire_update!("CC", "gcc-8")                  # => ["CC", "LDSHARED"]
  #   RbConfig::MAKEFILE_CONFIG.values_at("CC", "LDSHARED") # => ["gcc-8", "$(CC) -shared"]
  #   RbConfig::CONFIG.values_at("CC", "LDSHARED")          # => ["gcc-8", "gcc-8 -shared"]
  #
  # returns updated keys list, or +nil+ if nothing changed.
  def RbConfig.fire_update!(key, val, mkconf = MAKEFILE_CONFIG, conf = CONFIG) # :nodoc:
    return if mkconf[key] == val
    mkconf[key] = val
    keys = [key]
    deps = []
    begin
      re = Regexp.new("\\$\\((?:%1$s)\\)|\\$\\{(?:%1$s)\\}" % keys.join('|'))
      deps |= keys
      keys.clear
      mkconf.each {|k,v| keys << k if re =~ v}
    end until keys.empty?
    deps.each {|k| conf[k] = mkconf[k].dup}
    deps.each {|k| expand(conf[k])}
    deps
  end

  # call-seq:
  #
  #   RbConfig.ruby -> path
  #
  # returns the absolute pathname of the ruby command.
  def RbConfig.ruby
    File.join(
      RbConfig::CONFIG["bindir"],
      RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]
    )
  end
end
CROSS_COMPILING = nil unless defined? CROSS_COMPILING
PK*J[��Ą0O0Olib64/ruby/digest.sonuȯ��ELF> @0H@8	@�2�2 0;0; 0; �0 << <   888$$�2�2�2  S�td�2�2�2  P�td�,�,�,Q�tdR�td0;0; 0; ��GNU�QO��P6�ꛌMf�.r��%7�F"	7:;BE���|���qX���RYR	����� Z���p)��?��JyI% �0�"iM^"�"^>o"����(���, U�F"�S1��@ `@ l�%%�@ � &�=�)�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_class_superclassrb_ivar_definedrb_ivar_getrb_typeddata_is_kind_ofrb_eRuntimeErrorrb_raiserb_eTypeErrorrb_obj_classrb_ull2inumrb_check_typeddatarb_string_value__stack_chk_failrb_usascii_str_newrb_funcallvrb_obj_clonerb_error_arityrb_obj_classnamerb_obj_is_kind_ofrb_check_string_typerb_str_cmprb_int2bigrb_str_newrb_data_typed_object_zallocrb_eNotImpErrorrb_obj_allocrb_obj_call_initrb_eArgErrorrb_error_frozen_objectmemcpyrb_str_modifystrlenrb_str_buf_newrb_str_catrb_str_cat_cstrrb_str_buf_appendrb_digest_wrap_metadatarb_data_typed_object_wraprb_obj_freezeInitVM_digestrb_define_modulerb_ext_ractor_saferb_define_module_underrb_cObjectrb_define_class_underrb_include_modulerb_define_alloc_funcInit_digestrb_internrb_intern2rb_define_methodrb_define_module_functionrb_define_private_methodrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/alt/ruby34/lib64����ii
ui	0; �8; �@; @; `; Q,�; �,�? �? �? 	�? �? �? )�? .�? 0�? 1@> H> P> X> `> h> p> 
x> �> �> 
�> �> �> �> �> �> �> �> �> �> ;�> �> �> �> ? ? ? ?   ? !(? "0? #8? $@? %H? &P? 'X? (`? *h? +p? ,x? -�? /�? 1�? 2�? 3�? 4�? 5�? 6��H��H��, H��t��H����5�* �%�* ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.���������%( D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%�' D���%}' D���%u' D���%m' D���%e' D���%]' D���%U' D���%M' D���%E' D���%=' D���%5' D���%-' D���%%' D���%' D���%' D���%
' D���%' D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& DH�=�& H��& H9�tH��& H��t	�����H�=�& H�5�& H)�H��H��H��?H�H�tH�m& H��t��fD�����=e& u+UH�=R& H��tH�=�! �	����d����=& ]������w������H����ATUSH��tvH��H���fDH�����H��H��tWH�5�% H�����H��t�H�5�% H������H�5}! H��I���B�����t>I�D$ H��t4�8uh[]A\�f.�H�i% H�5�H�81������H�!% H�8H9�tH��H��H�51����DH��H�5�1����H�% H�5!H�81�����ff.�@��H���C���H�����H�xH��������?H9�wH�D?H���fDH������ff.�@��H����H�����H�xH��������?H9�wH�D?H���fDH������ff.�@��AUATUSH��H��(H�t$H�l$dH�%(H�D$1����H���(���H�5� H��I���V���H��I���+���H�D$I�M(H�PH�pH� tH�pL���H�l$H�D$H��H�L$dH3%(uH��([]A\A]����ff.�ATUSH�� H�|$H�\$H��dH�%(H�D$1����H�D$L�`H� tL�`H�hH��������?H9��1�H�t-�=���H�xH� u`H��t71�L��f�A��΃�@��A���A�40�LW@�4WH��H9�u�H�\$H�T$H�\$dH3%(u(H�� []A\ÐH�x�H��" H�5TH�81��2������ff.�f���H����@��H����H��H�5�" H�׉�����H��H������fD��H�5�" 1�1����ff.����H�5m" 1�1�����ff.����U1�1�SH��H��H�5P" ���H�5T" 1�1�H��H�����H��H��[]�?���ff.�@��U1�1�SH��H��H�5" �S���H�5" 1�1�H��H���=���H��H��[]���S���H�5�! 1�1�H��H������H��[�ff.���USH��dH�%(H�D$1�����H��uIH�-z! H���J���1�1�H��H�����H��H���p���H�\$dH3%(�|H��[]�D��u_H�.H�59! 1�1�H���u���H��H�ߺH�5! H�,$�Z���H�5�  1�1�H���G���H�5�  1�1�H��H���1����t����1�����k���ff.���USH��dH�%(H�D$1�����H��uAH�-�  H���Z���1�1�H��H������H��H�\$dH3%(H��u}H��[]�fD��u_H�.H�5Q  1�1�H�����H��H�ߺH�5+  H�,$�r���H�5  1�1�H���_���H�5  1�1�H��H���I����|����1��������SH���w���H��H�5,H��H�s H�81����f���PXH�5H�����f.���PXH�5
H�����f.���PXH�5�
H���z���f.���PXH�5�
H���Z���f.���UH��SH��H��H��(H�56 dH�%(H�D$1�����H��tsH�5� 1�1�H���8���H��H�D$�K���H�D$H��t(H�|$���H�|$���H�|$H�t$H�GH9FtH1�H�L$dH3%(uFH��([]��H��1�1����H��1�1�H�D$���H�D$�@�[�����u������ff.���H��H��1�1�dH�%(H�D$1��\���H��H�$���H�$H�xH�@H�x!H�D?H�L$dH3%(uH����������l�ff.��PXH�5R	H��H�\ H�81����f���USH��H�����H���F���H��H�5� H���t�H��U ��u
H��H��[]����f.���ATUSH���P���H�����H��H�5^ H���&�H�u1�I���x���H��H�E0H�sH� tH�sL���L��U ��uH��[]A\��#�����USH��H9=� t7H�����H��H�� H�pH���O���H��H�x �U ��u"H��H��[]�H�7 H�5�H�81������f���ATUSH�� dH�%(H�D$1���~rH�I�ԉ�H��H��H�$��L����H�U�s�H�D$H�|$��H�$H�|$H�L$H�5� �H�D$�G�H�L$dH3%(u!H�� []A\�H�� H�5�H�81����a���AUATUSH��H��H9���H��uH����f�@��u�H�H�Ѓ�H��t��u�H��H��tmH���u�H������H��I���b�H���
���I��L9�uNH��H�5h �3�H�5\ H��H���!�I�T$H��H���q�H��H��[]A\A]���t�����H�u H�5�H�81���ff.����ATUH��S�`�H��I���5�H�xE��H�5|H��H���e�L��H����H�ߺH�5Z�F�H��1�1����H��H����H�ߺH�52��H��[]A\���H��H��H�� 1��w�H��H�����ff.���H��H�=��L�H� ��H�= �H���H�5���H�=� H�5��)�H�]���H�5:H��H�� �G�H�=� �H�4���H�5{�(�H�=� 1�H�����H�5����H�=u 1�H�����H�5����H�=Y 1�H��H�5*���H�== 1�H�d���H�5���H�=! �H����H�5���H�= 1�H�	���H�5��}�H�=� 1�H����H�5��a�H�=� �����H����H�5��B�H�=� 1�H�b���H�5��&�H�=� �����H�����H�5z��H�=p 1�H����H�5h���H�=T 1�H�����H�5W���H�=8 1�H�_���H�5���H�= 1�H�C���H�5$��H�x H�= H�5H��z�1�H�q�H�5�H��H�� �[�H�5� H�=� ���H�=� �����H����H�5��9�H�=� �����H���H�5}��H�k H�=t H�5����H�5Y���H��H�? �j�H�=3 �H�W���H�5c��H�= 1�H�[���H�5{��H�=� �H�<�H�5i��H�=� �H��H�5��a�H�=� 1�H�Q���H�5'��H�=� 1�H���H�5�)�H�=� 1�H�)�H�5�H���	�f���H��H�=��|�H�=�H�6 �i�H�=�H� �V�H�=0H� �C�H�=H�� �0�H�=�H�� ���H�=;H�� ��H�� H�������H��H���%li::metadata is not initialized properly%li(%li)::metadata is not initialized properlyIncompatible digest API versionDigest::Base cannot be directly inherited in RubyDigest::Base is an abstract classdigest string too long%s does not implement %s()block_lengthresetfinishupdateDigest initialization failed.no data givendifferent algorithms#<: >DigesthexencodeInstance<<digest_length==inspectnewhexdigesthexdigest!to_ssizeClassinitializeBaseinitialize_copydigest/metadata0123456789abcdef;"p�8p�` �x0��0����������8��l�������P������,��X�������� ��@�0���8����T���p �����������������,����h0����`���� ����zRx�$0�FJw�?:*3$"D��\��,p���B�A�A �n
ABK�l�AHi
GD���AHi
GD8����F�B�A �A(�GP�
(A ABBA0@��B�A�A �D@�
 AABBP�d�*HZ| ��,�$�8�AE�E�G fDA$�`�=E�E�G fDA�x�%E�_(���E�A�D0^
AAF(<P��E�A�D0U
AAGh�'A���EAK� �EAK�$�EAK�(�EAK(�,��E�D�J@�
AAH��tH X
H8T�AAK(TX�FE�A�G n
DAA,�|�mF�A�A �\
ABA(���gE�A�D z
DAA0��F�A�A �D@�
 AABA8|��F�B�A �A(�G0�
(D ABBD(L0�F�A�D �~ABx��%HU���H��P����H�GNU���@; Q,��������!�,����)
|*0; 8; ���o`X�
?(> h�X
P	���o���o
���o�o����o< @P`p�������� 0@P`p�������� 0@P`p�������� GA$3a1�*GA$3p1113�{*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSdigest.so-3.4.4-3.el8.x86_64.debug0,�I�7zXZ�ִF!t/��w\]?�E�h=��ڊ�2N�.�C���	�Y]@�F@��Q@)�!���z�H��sIYN�i2�T���b�_�=|c
�^ �8#��FsRS�Wh��n����,�7����1�s�7�}�w�mio(�5 �/Y��Y����[Ae��Aj^��"�(���B>\�M+ܬ���3�!��й�@C�[�����@��9�x�:
a��?�v�	ϼ�=�LRȿ{�Z1D�<Z�\���>l��J�0ĭ�(*�ѐC��g"�4CQ��Dl�(���Z�pn*�np|��2*eצث�|Qt�Ŷ�D�W��	/	4���xm(�:{˛R��>	ug9�0�1���z.�˺���/aBtz��1X��$�]���˹^0;�'-<)=w���'=�C��D�٩�K(.:����=�=�eS�ŗ���i2v���V-}�:��d�%��mX��u-;�����4�1�k��Y����?��ƪ#���C��B��d���^�O:�*~�S�Se�3�����9�`���q�kx{GP[9r3��=�a��B3�-���T�^qy�vL��T�
�a�IvMq~��"�V$?XC�����~(}�@Nm�
j�6d��f�Mn�:�=��2����)~b�����"D���f?���^1_ED��Y��&��X�Y�S%��Ő��!��S��v���9�ւ�
߯\Ԩ��7S�Ր�4�H,�|#㏁�5N�����ߡ�i�|��V�HA�̱z,#��8���9o�z��b�W���!����b=+�6�kOo��@�lT_�����S~�4B����q�PȦ���di�"���@�
��5�'<��1W��N=���o{)涸)��IXw�f^,u��jX��6��E>|�
�]�fi�����N�2 Q�ق�o��D	cv
!*��aT�z[����T�X���e)��<��O�[em0��^�4n���7&85�MM>u�������$5���
���Eٸ�>p��Z�|�t��%��||����H�)���ļ!�w=�?��h1p0���fn���1�W�+"z�*�B��|�(�M�#S	U�Jy�'�xK�o!�B��&r�u��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``<(���0XX?8���o��zE���o

@TX
X
P^B��hhc00n00�w  [}|*|*
��*�*0��,�,��-�-���2�2 �0; 0;�8; 8;�@; @;� �< < �(> (>��@ @`�`@`@HHB(pB�G"PK*J[�f� o olib64/ruby/etc.sonuȯ��ELF>p@ h@8	@�S�S p[p[ p[ �� �[�[ �[   888$$�S�S�S  S�td�S�S�S  P�tdMMM,,Q�tdR�tdp[p[ p[ ��GNU�Vu�K� 0^~D=�LYH�D0HJBE���|��U��qXUb��>��� +���>b>�O�^�`3zg	+�� �����E"����"�"��r�"��}iQ��, ��F"�rt&��f;` N ` 5`,)B` __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeendgrentsetgrentrb_ary_newrb_locale_str_new_cstrrb_ary_pushrb_str_new_cstrrb_struct_newrb_yieldgetgrentendpwentsetpwentrb_filesystem_str_new_cstrrb_sys_failgetpwentsched_getaffinityrb_errno_ptrruby_xcallocruby_xfree__sched_cpucount__stack_chk_failunamerb_hash_newrb_intern2rb_id2symrb_hash_asetrb_filesystem_str_newrb_string_value_cstrgetgrnamrb_eArgErrorrb_raisegetgidgetgrgidrb_num2uintrb_error_aritygetpwnamgetuidgetpwuidgetloginrb_locale_encodingstrlenrb_external_str_new_with_encgetenvrb_eRuntimeErrorrb_ensurerb_frame_this_funcrb_enumeratorize_with_sizerb_block_given_psysconfrb_int2bigrb_fix2intconfstrrb_alloc_tmp_buffer_with_countrb_num2intrb_bugrb_io_descriptorfpathconfInit_etcrb_ext_ractor_saferb_define_modulerb_str_new_staticrb_define_constrb_cIOrb_struct_define_underrb_mEnumerablerb_extend_objectrb_define_methodrb_define_module_functionrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.3.4GLIBC_2.4GLIBC_2.6GLIBC_2.2.5/opt/alt/ruby34/lib641ti	Sii
_ii
iui	sp[ 0x[ ��[ �[ �_ 	�_ #�_ ,�_ 8�_ <�_ >�_ ?�_ @�] �] �] �] �] �] �] �] ^ 
^ ^ ^ 
 ^ (^ 0^ 8^ @^ H^ P^ X^ `^ h^ p^ x^ �^ �^ �^ �^ �^ �^ �^  �^ !�^ "�^ $�^ %�^ &�^ '�^ (�^ )�^ *_ +_ -_ ._ / _ 0(_ 10_ 28_ 3@_ 4H_ 5P_ 6X_ 7`_ 9h_ :p_ ;x_ =�_ @�_ A�_ B�_ C�_ D�_ E�_ F�_ G��H��H�yI H��t��H����5JG �%KG ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?�������%EC D���%=C D���%5C D���%-C D���%%C D���%C D���%C D���%
C D���%C D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%}B D���%uB D���%mB D���%eB D���%]B D���%UB D���%MB D���%EB D���%=B D���%5B D���%-B D���%%B D���%B D���%B D���%
B D���%B D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%�A D���%}A D���%uA D���%mA D���%eA D���%]A D���%UA D���%MA DH�=,1����f�H�=yA H�rA H9�tH�&A H��t	�����H�=IA H�5BA H)�H��H��H��?H�H�tH�A H��t��fD�����=A u+UH�=�@ H��tH�=n< �����d�����@ ]������w������H���#����H���f���H���s����H���f�AVAUATI��US���I�\$H��H�;H��t���H��H��H������H�;H��u�I�|$H�1A�D$H��L�lHD��"���I�<$I��H��HD��o���H�=@ [I��L��]L��A\H��A]1�A^���ff.�f���H�������H���H���H���@������H��u�H���ff.����H�����H��tH��H������f��H���fD��H���3����H���f���H������H���f�AWAVAUATUSH��H����H��H�(H�-H��HD�����H�{ I��H��HD����H�{I��H��HD��9���H�{I�ƋCH��L�D�CHD�L�D$H�LH�$���H�;I��H��HD����H��M��L��jH�=�> H��1�AUATL�D$(H�L$ ����H��8[]A\A]A^A_�H�=��U���D��H�������H������H���������H��u�H���ff.����H�����H��tH��H������f��H���fD��H�=����AW��AVAUATA�	U�@SH��dH�%(H��$1�I��L���H��0�L��H��1��c���A�ƅ���E��c����8uY�A��tQHc�H��?H��H��H���v�H�޿�l���H��1�H��I������A�ƅ�t]L���-���E��~��H��$dH3%(D��uBH��[]A\A]A^A_��L��H���%���A���U���DL��H���
���A����c�����ATUSH��dH�%(H��$�1�H��H���������1����H��H���j����H�=I���f���H�����L��H��H�����H�{A�7����H�=�I���3���H�����L��H��H���}���H��������H�=�I�����H�����L��H��H���G���H��������H�=�I������H���O���L��H��H������H������H�=aH�����H������H��H��H������H��H��$�dH3%(uH�Đ[]A\�H�=��=���������H���dH�%(H�D$1�H�|$�D$/tmp�D$�<���H�T$dH3%(uH������f���H��H�|$H�t$���H���Q���H��t
H���4���H���H��: H�T$H�5|H�81��b���f���S��x8u%�@����É��g���H��t/H��[���f���uH�>�����Ѻ1����H�,: ��H�5-H�81���f���H��H�|$H�t$���H���A���H��t
H������H���H��9 H�T$H�5�H�81���f���S��x8u%����É�����H��t/H��[�y���f���uH�>�3������Ѻ1�����H�l9 ��H�5�H�81��9�f���USH���A���H��H��t)�4�H��H�����H��H��H��H��[]����DH�=[��H��H��u�H���[]���H���c�1���8 ��u
�H���H��8 H�5H�81���@1�����8 ��u1�H�����1�H�=������PH�f8 H�5�H�81��M�ff.�f�SH����H�����H��E1�1�1�H��[����ff.����SH��������t�j���H��[�DH��[�f.���H��������u��H��tH��H���i���f������H��Ð1�����7 ��u1�H�d1�H�=[������PH�v7 H�5H�81��]�ff.�f���SH���C�����t���H��[�DH��[������H����1��G7 ��u
�H���H��6 H�5�H�81����@��H������u��H��tH��H�����f������H��Ð��H�������tH�H��H�D�f����T���H���t)H�@H�xH�DH���@H��H����H�=�`���UH��H��AUATSH��dH�%(H�E�1����)�l�H���d�ߺ�A���L��P���L����H��H=���H=�w^H�@H��HDžH���H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�d$I����H�PH��H���H��H�����I����H��L��D����m�H9����H��H��t,L���D�H�M�dH3%(u:H�e�[A\A]]�f.��[���u���fD�s�H��������H�=����f.���H����St;��H�������9�H���t;H�@H�xH�D[�D��H����fDH��[��������u�[�H�=4�Z�f.���UH��H��SH����tK�v�H���n�H������މ��g�H���tAH�@H�x"H��H�D[]�fD�[�H���fDH��H��[]�b�f������uH���[]�H�=���ff.�f���U�SH���<�H�=l�0�H�=_H�����H��H�5�H���z�H�ߺ/H�5<�f�H�ߺ1H�5:�R�H�ߺ3H�51�>�H�ߺH�53�*�H�ߺ�H�5*��H�ߺIH�5$��H�ߺKH�5���H�ߺMH�5���H�ߺOH�5���H�ߺH�5��H�ߺH�5��H�ߺQH�5��H�ߺ5H�5�v�H�ߺUH�5�b�H�ߺiH�5��N�H�ߺyH�5��:�H�ߺWH�5��&�H�ߺ�H�5���H�ߺH�5���H�ߺ�H�5����H�ߺ�H�5����H�ߺ7H�5����H�ߺ9H�5���H�ߺ	H�5���H�ߺ	H�5���H�ߺH�5��r�H�ߺH�5��^�H�ߺH�5��J�H�ߺH�5��6�H�ߺH�5��"�H�ߺ�H�5���H�ߺH�5���H�ߺ!H�5����H�ߺ#H�5����H�ߺ%H�5���H�ߺ'H�5���H�ߺ)H�5���H�ߺ+H�5���H�ߺH�5��n�H�ߺH�5��Z�H�ߺ�H�5��F�H�ߺ3H�5��2�H�ߺH�5���H�ߺ7H�5��
�H�ߺH�5���H�ߺ+H�5{���H�ߺ-H�5u���H�ߺ;H�5z��H�ߺ?H�5o��H�ߺ5H�5d��H�ߺAH�5^�~�H�ߺ�H�5]�j�H�ߺH�5X�V�H�ߺ�H�5W�B�H�ߺ�H�5\�.�H�ߺH�5a��H�ߺ�H�5_��H�ߺ�H�5b���H�ߺ�H�5e���H�ߺ�H�5o���H�ߺ�H�5t��H�ߺ�H�5~��H�ߺ�H�5���H�ߺCH�5��z�H�ߺ�H�5��f�H�ߺIH�5��R�H�ߺH�5��>�H�ߺkH�5x�*�H�ߺmH�5m��H�ߺ�H�5o��H�ߺoH�5s���H�ߺqH�5p���H�ߺ�H�5i���H�ߺ�H�5g��H�ߺ�H�5d��H�ߺKH�5h��H�ߺ;H�5l�v�H�ߺ�H�5c�b�H�ߺ�H�5a�N�H�ߺ�H�5`�:�H�ߺ�H�5]�&�H�ߺaH�5\��H�ߺcH�5Z��H�ߺeH�5Y���H�ߺgH�5V���H�ߺ_H�5U���H�ߺaH�5M��H�ߺ�H�5D��H�ߺcH�5?��H�ߺeH�59�r�H�ߺiH�53�^�H�ߺQH�5.�J�H�ߺSH�5#�6�H�ߺ_H�5#�"�H�ߺUH�5#��H�ߺWH�5��H�ߺYH�5���H�ߺgH�5���H�ߺ�H�5��H�ߺ]H�5��H�ߺ=H�5���H�ߺ=H�5���H�ߺ�H�5�n�H�ߺ�H�5��Z�H�ߺ�H�5��F�H�ߺ�H�5��2�H�ߺYH�5���H�ߺ?H�5��
�H�ߺAH�5���H�ߺCH�5����H�ߺEH�5����H�ߺH�5���H�ߺ[H�5���H�ߺGH�5���H�ߺ�H�5��~�H�ߺ
H�5��j�H�ߺ�H�5��V�H�ߺ�H�5��B�H�ߺH�5��.�H�ߺH�5���H�ߺ�H�5���H�ߺ�H�5����H�ߺ�H�5����H�ߺ�H�5����H�ߺ�H�5���H�ߺ�H�5���H�ߺ�H�5���H�ߺ�H�5��z�H�ߺH�5��f�H�ߺ�H�5�R�H�ߺ�H�5#�>�H�ߺ�H�5T�*�H�ߺ�H�5��H�ߺ�H�5'��H�ߺ�H�55���H�ߺ�H�5?���H�ߺ�H�5���H�ߺ�H�55��H�ߺ�H�5��H�ߺ�H�5��H�ߺ�H�5�v�H�ߺH�5�b�H�ߺ�H�5�N�H�ߺ�H�5�:�H�ߺ�H�5#�&�H�ߺ�H�5���H�ߺ�H�5��H�ߺ�H�5'���H�ߺ�H�5����H�ߺ�H�5����H�ߺ�H�5��H�ߺ�H�5���H�ߺ�H�5��H�ߺ�H�5�r�H�ߺ�H�5��^�H�ߺH�5�J�H�ߺ�H�5��6�H�ߺH�5��"�H�ߺH�5���H�ߺH�5���H�ߺH�5����H�ߺH�5����H�ߺH�5y��H�ߺH�5r��H�ߺ	H�5j��H�ߺH�5b��H�ߺ)H�5Z�n�H�ߺ%H�5T�Z�H�ߺH�5R�F�H�ߺH�5T�2�H�ߺ!H�5U��H�ߺ#H�5V�
�H�ߺ'H�5T��H�ߺ
H�5O���H�ߺH�5O���H�ߺH�5G��H�ߺH�5?��H�ߺH�57��H�ߺH�5.�~�1�H��H���H�5!��H�߹����H�g�H�5��H�߹H���H�5���1�H��H���H�5��h�H��1�H�|�H�5��P�1�H��H���H�5��8�1�H��H���H�5Z� �H�߹����H��H�5���H�߹H���H�5����1�H��H�^�H�5����1�H��H���H�5s��1�H��H�~�H�5d��1�H��H���H�5U��1�H��H�.�H�5F�r�1�H��H���H�59�Z�1�H��H�.�H�5��B�H�߹H���H�5��'�H�߹H�H�H�5n��H�e# �H�9�H�5`H�8��1�H��H���H�5�
���H��
jL�
c
PH��
L�'
H��PH��
H�
�PH��H�5�
1��+��H�-�" H�� H��H�# H�u����H�=# 1�H�m�H�5Y
��H��H��1�jL�
G
L��H�
fH�}H�5/
���H�uZH��YH��" �y��H�=�" H��1�[H�D�H�5�]�����H��H���/etc/passwd/etcunamesysnamenodenamereleaseversionmachinecan't find group for %lican't find group for %dcan't find user for %lican't find user for %dUSERunexpected group_blockingparallel group iterationparallel passwd iterationunexpected passwd_blockingsysconf(_SC_NPROCESSORS_ONLN)confstrsysconffpathconfEtc1.4.5SC_AIO_LISTIO_MAXSC_AIO_MAXSC_AIO_PRIO_DELTA_MAXSC_ARG_MAXSC_ATEXIT_MAXSC_BC_BASE_MAXSC_BC_DIM_MAXSC_BC_SCALE_MAXSC_BC_STRING_MAXSC_CHILD_MAXSC_CLK_TCKSC_COLL_WEIGHTS_MAXSC_DELAYTIMER_MAXSC_EXPR_NEST_MAXSC_HOST_NAME_MAXSC_IOV_MAXSC_LINE_MAXSC_LOGIN_NAME_MAXSC_NGROUPS_MAXSC_GETGR_R_SIZE_MAXSC_GETPW_R_SIZE_MAXSC_MQ_OPEN_MAXSC_MQ_PRIO_MAXSC_OPEN_MAXSC_ADVISORY_INFOSC_BARRIERSSC_ASYNCHRONOUS_IOSC_CLOCK_SELECTIONSC_CPUTIMESC_FSYNCSC_IPV6SC_JOB_CONTROLSC_MAPPED_FILESSC_MEMLOCKSC_MEMLOCK_RANGESC_MEMORY_PROTECTIONSC_MESSAGE_PASSINGSC_MONOTONIC_CLOCKSC_PRIORITIZED_IOSC_PRIORITY_SCHEDULINGSC_RAW_SOCKETSSC_READER_WRITER_LOCKSSC_REALTIME_SIGNALSSC_REGEXPSC_SAVED_IDSSC_SEMAPHORESSC_SHARED_MEMORY_OBJECTSSC_SHELLSC_SPAWNSC_SPIN_LOCKSSC_SPORADIC_SERVERSC_SS_REPL_MAXSC_SYNCHRONIZED_IOSC_THREAD_ATTR_STACKADDRSC_THREAD_ATTR_STACKSIZESC_THREAD_CPUTIMESC_THREAD_PRIO_INHERITSC_THREAD_PRIO_PROTECTSC_THREAD_PRIORITY_SCHEDULINGSC_THREAD_PROCESS_SHAREDSC_THREAD_ROBUST_PRIO_INHERITSC_THREAD_ROBUST_PRIO_PROTECTSC_THREAD_SAFE_FUNCTIONSSC_THREAD_SPORADIC_SERVERSC_THREADSSC_TIMEOUTSSC_TIMERSSC_TRACESC_TRACE_EVENT_FILTERSC_TRACE_EVENT_NAME_MAXSC_TRACE_INHERITSC_TRACE_LOGSC_TRACE_NAME_MAXSC_TRACE_SYS_MAXSC_TRACE_USER_EVENT_MAXSC_TYPED_MEMORY_OBJECTSSC_VERSIONSC_V7_ILP32_OFF32SC_V7_ILP32_OFFBIGSC_V7_LP64_OFF64SC_V7_LPBIG_OFFBIGSC_V6_ILP32_OFF32SC_V6_ILP32_OFFBIGSC_V6_LP64_OFF64SC_V6_LPBIG_OFFBIGSC_2_C_BINDSC_2_C_DEVSC_2_CHAR_TERMSC_2_FORT_DEVSC_2_FORT_RUNSC_2_LOCALEDEFSC_2_PBSSC_2_PBS_ACCOUNTINGSC_2_PBS_CHECKPOINTSC_2_PBS_LOCATESC_2_PBS_MESSAGESC_2_PBS_TRACKSC_2_SW_DEVSC_2_UPESC_2_VERSIONSC_PAGE_SIZESC_PAGESIZESC_THREAD_KEYS_MAXSC_THREAD_STACK_MINSC_THREAD_THREADS_MAXSC_RE_DUP_MAXSC_RTSIG_MAXSC_SEM_NSEMS_MAXSC_SEM_VALUE_MAXSC_SIGQUEUE_MAXSC_STREAM_MAXSC_SYMLOOP_MAXSC_TIMER_MAXSC_TTY_NAME_MAXSC_TZNAME_MAXSC_XOPEN_CRYPTSC_XOPEN_ENH_I18NSC_XOPEN_REALTIMESC_XOPEN_REALTIME_THREADSSC_XOPEN_SHMSC_XOPEN_STREAMSSC_XOPEN_UNIXSC_XOPEN_VERSIONSC_PHYS_PAGESSC_AVPHYS_PAGESSC_NPROCESSORS_CONFSC_NPROCESSORS_ONLNCS_PATHCS_POSIX_V7_ILP32_OFF32_LIBSCS_POSIX_V7_ILP32_OFFBIG_LIBSCS_POSIX_V7_LP64_OFF64_CFLAGSCS_POSIX_V7_LP64_OFF64_LIBSCS_POSIX_V7_LPBIG_OFFBIG_LIBSCS_V7_ENVCS_POSIX_V6_ILP32_OFF32_LIBSCS_POSIX_V6_ILP32_OFFBIG_LIBSCS_POSIX_V6_LP64_OFF64_CFLAGSCS_POSIX_V6_LP64_OFF64_LIBSCS_POSIX_V6_LPBIG_OFFBIG_LIBSCS_V6_ENVCS_GNU_LIBC_VERSIONCS_GNU_LIBPTHREAD_VERSIONPC_FILESIZEBITSPC_LINK_MAXPC_MAX_CANONPC_MAX_INPUTPC_NAME_MAXPC_PATH_MAXPC_PIPE_BUFPC_2_SYMLINKSPC_ALLOC_SIZE_MINPC_REC_INCR_XFER_SIZEPC_REC_MAX_XFER_SIZEPC_REC_MIN_XFER_SIZEPC_REC_XFER_ALIGNPC_SYMLINK_MAXPC_CHOWN_RESTRICTEDPC_NO_TRUNCPC_VDISABLEPC_ASYNC_IOPC_PRIO_IOPC_SYNC_IOgetlogingetpwuidgetpwnamsetpwentendpwentgetpwentgetgrgidgetgrnamgroupsetgrentendgrentgetgrentsysconfdirsystmpdirnprocessorsPasswdshellgecoseachmemGrouprequired buffer size for confstr() changed dynamically.SC_THREAD_DESTRUCTOR_ITERATIONSCS_POSIX_V7_ILP32_OFF32_CFLAGSCS_POSIX_V7_ILP32_OFF32_LDFLAGSCS_POSIX_V7_ILP32_OFFBIG_CFLAGSCS_POSIX_V7_ILP32_OFFBIG_LDFLAGSCS_POSIX_V7_LP64_OFF64_LDFLAGSCS_POSIX_V7_LPBIG_OFFBIG_CFLAGSCS_POSIX_V7_LPBIG_OFFBIG_LDFLAGSCS_POSIX_V7_WIDTH_RESTRICTED_ENVSCS_POSIX_V6_ILP32_OFF32_CFLAGSCS_POSIX_V6_ILP32_OFF32_LDFLAGSCS_POSIX_V6_ILP32_OFFBIG_CFLAGSCS_POSIX_V6_ILP32_OFFBIG_LDFLAGSCS_POSIX_V6_LP64_OFF64_LDFLAGSCS_POSIX_V6_LPBIG_OFFBIG_CFLAGSCS_POSIX_V6_LPBIG_OFFBIG_LDFLAGSCS_POSIX_V6_WIDTH_RESTRICTED_ENVS;,$P��H`��p`���0���P���p������P�����,���D���\����������� ��@��L�������`������� ���������D0��`���t�������� ���p���������  ��@���h�������P��8zRx�$��FJw�?:*3$"D���\���HNt���HN8�����B�B�B �D(�A0�n(G EED���4Hk�<��*HQ
GIL��HNT��HNT0\���B�B�B �B(�A0�A8�DP�XH`NhBpS8A0A(B BBBAP����4Hk���*HQ
GI���H���B�G�B �B(�G0�F8�G��
8A0A(B BBBI4 ���xF�A�A �G�S
 AABAX4��NH @
Ath��NH h
A����gE�]
N����NH h
A�$��gE�]
N0�x��`E�A�D a
JAJXFA���<H[
A4���CkH��$A�^d��&E�U
FD�(��?HZ
NN�H��Ck����)E�U
FD����<H[
A����?HZ
NN$���pHP
Hs
EG
E(< ��vE�F
L���
K zRx�����(���$�<���K�w
FT
LQ
A@�����E�G�D B
FAGT
DAGO
FAA@��)E�F�D 8(H0R8O@` s(G0m(D WCOGNU�0��[ !1@
�=p[ x[ ���o`�	�
��] @8	���o���o����o�oN���o�[ p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`GA$3a1@�=GA$3p1113p�=GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@�=GA+GLIBCXX_ASSERTIONSetc.so-3.4.4-3.el8.x86_64.debug�@n��7zXZ�ִF!t/���L]?�E�h=��ڊ�2N�$`g\��@�דPh�!h�մBM���W�9�0N{�y&~��'{Z!e�>���h��:ЩƂ:p�4�ۿx��\�E�
��(�$��;-��i�Lʚ��pw
�O�I�Π
K
n2�
`	�9dOM������j��э�08�� ە����Mv>;�;B��$�ʯg���2`�cg�z-����PQ�1�?*��p4�R�),FS�g�r"�1�R��^�^i`�+y�ş���#�h����K�d
0S"5u}�<@��Q�RJS�-�y=�K_�v��WT%���f�[���'�M��:��y!��rG\9�)�SZ����"e*�Օ��r25	��LYp��0���Q�)^�|��G�"�O>��R����'k"���ut���H���̼��DgmwV�L�I�d�\(�|:Ͽu�)6�8Ĵ�YY�z=zF��MS��/(�]m�^IlQ7�j>�)������U;�e�6�<ޔ�������@�܂��t7��t~��C�&�5mׂ`M��v��n��6w�35����0J^U��#Ư$�Or�.��9�jHգ�z&�u��-����ޥB���?�a�nk^-T`�źW�y���Ͷ�I�\��E���Tiiێ'\\�-e�=r���dh�0J֓]Uj��h&��f^B�o<�+����2 ��Xt/�
�}��|�t+�ߌ��O�t�(�
x��^���SsYn��`l���xm8q��T��E{7�|�o�7�i����q�,q-;m	N�i�<ZA�J��h�Z���2�4��_f��d0<-�m��4���n��
�Z%Y}�s�Q{t����j�cZ�t*�.}�1��"���Q���-L27��	
�CD�d*K�ް��o�]�8���1a��5��ėZɅϓvڿ�Ԉt�?�>s��@o�p�{�.ȡgȲr�1g�u���
��i��YY�kF�x�pԂ1���.�0]�b�^=3x?��Z[�}X?�����"�r�6"�K��R:����g,�+@�k����q;y�a����$�a��!��R�pJUJ�8�4��'o|$(�B�މUq�� �D6��%�k���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(�� 0�	�	�8���oNN�E���o��PT88^B@@h@@c``nppwpp}�=�=
�2�=�=p�MM,�@N@NP��S�S �p[ p[�x[ x[��[ �[��[ �[ ��] �]X�` ` � ```HHb$lb��f"PK*J[�]"�����lib64/ruby/objspace.sonuȯ��ELF>�7@��@8	@���� ���� �� P	 ���� ��   888$$h�h�h�  S�tdh�h�h�  P�td�����Q�tdR�td���� �� PPGNU�ܡ��ˮ{z�n�}Q�4�����@`� 8	���4~ȺBE��t�Fٻ�|�qXf-7߬���{��/�3h+~7 �>g��Y������#Po'�_b����,f���
����M�.�I
�4�O��u� DIq����������Q|2 �"e��9���y"\VU�B��s�Wg���v, =c������F"�F���:��p�~c	� E�C	,	��  	� e�C+�[�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_st_lookup__stack_chk_failrb_ull2inumrb_str_new_cstrfwriterb_st_foreach__fprintf_chkrb_sym2strruby_xfreerb_cObjectrb_data_typed_object_zallocrb_gc_register_mark_objectrb_st_init_numtablerb_st_init_strtablerb_st_clearrb_gc_pointer_to_heap_prb_gc_locationrb_gc_disable_no_restrb_st_insertrb_gc_enablerb_st_memsizerb_st_free_tablerb_gc_markrb_tracepoint_disablerb_tracepoint_enablerb_tracepoint_newrb_bug_reporter_addrb_st_get_keyruby_xmallocstrncpyrb_st_add_directrb_yieldrb_ensurerb_eRuntimeErrorrb_raiserb_st_updaterb_st_deleterb_tracearg_from_tracepointrb_tracearg_objectrb_tracearg_pathrb_tracearg_linenorb_tracearg_method_idrb_tracearg_defined_classrb_class_path_cachedrb_num2intrb_gc_countrb_fix2intobjspace_lookup_allocation_infoInit_object_tracingrb_define_module_functionrb_obj_idrb_obj_memsize_ofrb_ident_hash_newrb_objspace_reachable_objects_from_rootrb_hash_foreachrb_ary_newrb_hash_asetrb_ary_pushrb_hash_lookuprb_objspace_garbage_object_prb_objspace_internal_object_prb_data_typed_object_wraprb_bugrb_id2symrb_hash_arefrb_hash_newrb_eTypeErrorrb_error_arityrb_objspace_each_objectsrb_intern2rb_asan_poisoned_object_prb_asan_unpoison_objectrb_asan_poison_objectrb_objspace_data_type_namerb_internrb_cFloatrb_cIntegerrb_cNilClassrb_cTrueClassrb_cSymbolrb_typeddata_is_kind_ofrb_eArgErrorrb_obj_hiderb_objspace_reachable_objects_fromrb_obj_is_kind_ofrb_cFalseClassrb_sym_immortal_countrb_sprintfInit_objspacerb_const_getrb_define_class_underrb_undef_alloc_funcInit_objspace_dumprb_define_methodrb_str_catmemmovefflushrb_io_get_iorb_io_get_write_iorb_io_flushrb_io_taint_checkrb_io_check_closedrb_io_stdio_filerb_num2ullrb_shape_each_shaperuby_snprintfrb_eIOErrormemcpyruby_hexdigitsstrlenrb_str_capacityrb_enc_from_indexrb_enc_dummy_prb_enc_get_indexrb_shape_idrb_shape_depthrb_shape_edges_countrb_shape_memsizerb_shape_get_shape_idrb_obj_frozen_prb_class_get_superclassrb_obj_gc_flagsrb_id2namerb_float_valuerb_ascii8bit_encindexrb_imemo_namerb_shape_obj_too_complexrb_st_table_sizerb_mod_namerb_shape_get_shape_by_idrb_class_realrb_gc_obj_slot_sizelibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.3.4GLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/alt/ruby34/lib64	ti	1	���=	ii
H	ui	R	�� `8��  8�� �� � �� �=� �=�� P=� @@� (�H� �EX� @Ex� �� �� �� �� �� �� F�� G�� U�� `ȯ lЯ rد s� t� y� |�� ��� ȫ Ы ث � � � �� 	� 
� � � 
 � (� 0� 8� @� H� �P� X� `� h� p� x� �� �� ��  �� !�� "�� #�� $�� %�� &Ȭ 'Ь (ج )� *� +� ,�� -� .� /� 0� 1 � 2(� 30� 48� 5@� 6H� 7P� 8X� 9`� :h� ;p� <x� =�� >�� ?�� @�� A�� ��� B�� C�� D�� Eȭ HЭ Iح J� K� L� M�� N� O� P� Q� R � S(� T0� V8� W@� XH� YP� ZX� [`� \h� ]p� ^x� _�� a�� b�� c�� d�� e�� f�� g�� h�� iȮ jЮ kخ m� n� o� p�� q� �� u� v� w � x(� z0� {8� |@� }H� ~P� X� �`� �h� �p� ���H��H�1� H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv��������%�{ D���%�{ D���%�{ D���%�{ D���%�{ D���%}{ D���%u{ D���%m{ D���%e{ D���%]{ D���%U{ D���%M{ D���%E{ D���%={ D���%5{ D���%-{ D���%%{ D���%{ D���%{ D���%
{ D���%{ D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%�z D���%}z D���%uz D���%mz D���%ez D���%]z D���%Uz D���%Mz D���%Ez D���%=z D���%5z D���%-z D���%%z D���%z D���%z D���%
z D���%z D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%�y D���%}y D���%uy D���%my D���%ey D���%]y D���%Uy D���%My D���%Ey D���%=y D���%5y D���%-y D���%%y D���%y D���%y D���%
y D���%y D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%�x D���%}x D���%ux D���%mx D���%ex D���%]x D���%Ux D���%Mx D���%Ex D���%=x D���%5x D���%-x D���%%x D���%x D���%x D���%
x D���%x D���%�w D���%�w DH�=aI1������1�H�=�K���H�=Q1����@H�=Ix H�Bx H9�tH��w H��t	�����H�=x H�5x H)�H��H��H��?H�H�tH��w H��t��fD�����=�w u+UH�=�w H��tH�=~p ����d�����w ]������w������H�1��fDH��H�
�w dH�%(H�D$1�H��tH��H�yH������1Ʌ�tH�$H�T$dH3%(H��uH������f.���H��H�����H��tH�@0H���f��H���fD��H��H���`���H��tH�@ H��H�D�D�H���ff.���H��H��� ���H��t3H�x8H��������?H9�wH�D?H���fDH�������H���ff.���H��H�����H��tH�x(H��tH������f��H���fD��H��H�����H��tH�xH��tH������f��H���fD��SH��H���&�H�=�D����H��u H��tH�xH��H�5%����H�ٺ$�[H�=�D����fD��UL�iEH��H��SH�eEH��H��H���L�N���H�BELD�1����H�K(H����H�:E�H��1��z���H�KL�C H��H�0EH�EH��HD�1��N���H�{0H��u$H���H�=�D����H��1�[]�f��k���H�HH� tH�HH��D�H��1����f�H�KH��DH��1�������W������H������1�H���ff.����H��H����1�H���f�H�)t H��t�H��s S�0H��l H�8����H�P �@uH�P H��H��s �g���H��s ��s ��CH�CH�C����H�CH��s ��H�C H��s [�ff.�@��S�V���1�H�5-���H�xH�����H�{�X���H�{ 1�H�5�����H�{ �=����[�fD��AUATI��UH��SH��H�����tHH�����1�H9�uH����[]A\A]�@����H��I�����L��H��H�����M��u�H�H���[��]A\A]�fD��USH��H��H��z���H�{ H���n���H��H�D0[]�f���SH��H�1�H�5+������H�{��H�{ 1�H�5����H�{ ��H��[��f���SH��H����H�{[���D��S���H�Ë��~�����uH�{H��u#H�{H��u
�[���[�@�s��֐��S���H�Ë�P���~�[ÐH�{H��t���H�{���[�f�H��H�6����1�H�پ H�CH�7��H�{H�C�����>q SH���4q ��tH��[�[���H�=A���1��
q �`���H��[�7����AUATU1�SH��dH�%(H�D$1�H��t=H��I��I��H��H���{�����tGH�$H��L��H�P���H��H��L�����H�,$H�L$dH3%(H��uAH��[]A\A]�@I�}�g�L��H��H��H����H��L��B�D-����	�f���SH���c���H�=�o H��[H�����������H�H��t#H��H��H�5����� �����u
H�����H��o H�5?H�81��W��ATUH��SH��H��dH�%(H�D$1�I��L���G���H�$H��t5H��H���H��H����H�D$dH3%(u+H��[]A\�fDH��1�L��H�,$��H�<$����������ATUSH��H�� dH�%(H�D$1���H����H�D$��H�T$H�ŋC��tKH�{H�t$���u!H��t,H�D$dH3%(ukH�� []A\�H�D$�H��u����͐H�{H�t$�B���t�L�d$H�{ I�t$H��t	���H�{ I�t$(H��t���L�������@��AWAVAUATUSH��H��(dH�%(H�D$1���I��H����L��H���`�L��I����L��I���Z�L��H�$��I��I�������I�VI�vI� �YH�{ ���H�D$I�����tsL��E1���ukI�$I��H�у�H��tXI�ƀ�uPL�����H�����t@H�PH�pH� tH�pH�{ �^���I���f�H�D$H�����u�E1�H�{H�T$H��������L�d$H�{ I�t$M��H��t	�H���H�{ I�t$(H��t�5���H�EL��A��A�I�GH�EI�GH�D$I�GuT�G�H�M�w(I�G H�$I�G0��H�{L��H��I�G8��H�D$dH3%(uBH��([]A\A]A^A_�fD���몐I�v�����@�F�I��I���V�����fD�������S1�H��H����H�5F<��H��1�H�7���H�5h;�{�H��1�H����H�5/<�c�H��1�H�G���H�5X;�K�H��1�H�o���H�5`;�3�H�߹H�����H�5<��H�߹H���H�5�;��H�߹H����H�5�;���H�߹H�#�H�5�;���H��[�H�w�H�5�;��f.����H���H��t��H�G �uH��f�H�F�f.���H� �C���������UH��SH��H����H�U��H�H��[]�f��������SH��0dH�%(H�D$(1���H��H�=�H�D$H��H�$�c�H��H�5)H���q�H�L$(dH3%(u	H��0H��[������AUI��ATI��UH��SH�����L��H�5JH��H����H��L��H����H��1�[]A\A]�@��H��H��H�׺�x�1�H��Ð��H��H���`�1�H���f���AUATUH��SH��H��H9ztfH�z�=�H�CI�����H�;L��H�CI�����H�����H�;L��L����H���/���uH9+tH9ku H��[]A\A]�DL�b��f.�H�������uH��H��H��L��[]A\A]��@H�=�i H��H��a ��H����ff.�f���H�H�ƒ�H��t�@UH��H��i S��H��H��H�<��X�H��H��H���J��H��uH��H��H��[]��fDH������H�H�T��@S����u
[�o����usH�H��t3��u.H�H�Ѓ�H��uH��t�ƀu,H����H��u)H��[�H�)g H�5�8H�81��@�H�S(H��t�H��H��H�5������H��[ú1����@���W������SH�� dH�%(H�D$1��2���H�=zh H��tEH�����H��H�\$H�=�H�$�V�H��H�T$dH3%(�dH�� [�f��	H�=>8���
H�=78H�h ���
H�=*8H��g ����H�=8H��g ����H�=8H��g ���
H�=
8H��g ���
H�=�7H��g ���
H�=�7H��g �g��H�=�7H��g �O��	H�=�7H��g �7��H�=�7H�|g ���H�=�7H�lg ���H�=�7H�\g ����H�=�7H�Lg ���H�Hg �f����f�fD��SH�� dH�%(H�D$1��b���H��H�=8H��H��H�$H�\$��H�T$dH3%(u	H�� H��[���f���H9�tgAVI��AUI��ATI��USH��H�����1�H��H����H�;tI�uH��A�UH��tH���m�L�L9�u�[1�]A\A]A^�f.�1��ff.�f���H���H��t��UH��SH��H�_H��tFH��H���{��H��uH��H��H��[]�?��H������H�H�T��@��H�H6H��HD�H����H����H������H��H����H��������?H9�wH�DH����H��H�����@H�����tw@��t1H����H����@��ug@����H�&c H���H���H��tH�GH��tH����H��H�=�d H��\ �Z�f.���f.�H�c H��@H��b H��@H��b H��@H�c H��@��SH��H�51\ H���9���tH�[ H��uH��b H�5�4H�81��d�@��u�H���H��wӸH��t�H�{[����fD��UH��SH��H������tH��[]�H�}H����H��u�H�}�H���-�H���U���uH�}H��H��[]���H�=Ac H��H�W[ ��H����ff.�f���SH�� dH�%(H�D$1��H��tRH��@��uIH�5
[ H������tH�[ �h�H����H�$��H��H�5
���H��H�D$��H�D$H�L$dH3%(uH�� [��@���H��8dH�%(H�D$(1�H�$H�D$��SH��H�=���H�D$H�t$H��H�D$�^�H�<$H��������?H9�wCH�D?H�L$(dH3%(u5H��8ÐH�H�D$��t������1����������ff.����UH��SH��H������uH�uH��uH����HEH��[]�H����H��t�H���s�HE��ff.�f���SH��H�5�Y H������tH�[ H��uH��_ H�8[�L���@��t+H��t]H��tg��uB��tmH��_ [H�8����DH���H��tH�{[����f��[�f�H��_ H�8�@H�I_ H�8�@H�Q_ H�8�o����H��_ H�8�_������AUATUSH��8dH�%(H�D$(1�H�$H�D$�<���H���d�H�=
���H�t$H��H��H�D$H��H�D$�\��H�<$H��������?H9���L�d?H�9_ H��u%L�-'1D�L����H�_ H��t�H�����H��L��H����H�|$H��������?H9��aL�d?H��^ H��u)L�-�0f��L����H��^ H��t�H���_�H��L��H���1�H��H+|$H��������?H9���L�d?H�Z^ H��u&L�-n0fD�L���;�H�4^ H��t�H����L��H��H�����H��������?H9�wzH�l-H��] H��u"L�%)0f��L�����H��] H��t�H����H��H��H���q�H��H�L$(dH3%(uKH��8[]A\A]���I���c���H���x�H���{����k�I�������[�I��������ff.�S�����H�
�1��Hc�H�>��H�I] H�70H��uD�H����H�$] H��t�H��[���fDH�] H��/H��u�D�H�����H��\ H��t��DH��\ H��/H��u�D�H����H��\ H��t��DH��\ H�w/H���j���f��H���S�H�|\ H��t��C���f�H�q\ H�//H���*���f��H����H�D\ H��t�����f�H�9\ H��.H�����f��H�����H�\ H��t�����f�H�\ H��.H�������f��H����H��[ H��t����f�H��[ H�U.H���j���f��H���S�H��[ H��t��C���f�H��[ H�
.H���*���f��H����H�d[ H��t�����f�H�Y[ H��-H�����f��H�����H�,[ H��t�����f�H�![ H��-H�������f��H����H��Z H��t����f�H��Z H�5-H���j���f��
H���S�H��Z H��t��C���f�H��Z H��,H���*���f��	H����H��Z H��t�����f�H�yZ H��,H�����f��H�����H�LZ H��t�����f�H�AZ H�\,H�������f��H����H�Z H��t����f�H�	Z H�,H���j���f��H���S�H��Y H��t��C���f�H��Y H��+H���*���f��H����H��Y H��t�����f�H��Y H��+H�����f��H������H�lY H��t�����f�H�aY H�<+H�������f��H�����H�4Y H��t����f�H�)Y H��*H���j���f��H���S��H��X H��t��C���f�H��X H��*H���*���f��H�����H��X H��t�����f�H��X H�b*H�����f��H������H��X H��t�����f�H��X H�*H�������f��H�����H�TX H��t����f�H�IX H��)H���j���f��H���S��H�X H��t��C���f�H�X H��)H���*���f��H�����H��W H��t�����f�H��W H�@)H�����f��H������H��W H��t�����f�H��W H�������H��(f��H�����H�tW H��t����f���SH�_ H�;������H������H��H�=�)[H��1��/��ff.�@��H�G H�8������ff.�f���AWAVAUATUSH��(dH�%(H��$1�H�l$��H��I��H��H�H��H9�u�H���H��1�E1�H�=Z�H�$I��������?H�l$����
H��H�� t=H�|�t���7���H�|�I��I�L9���H�T?L��L��H�����H�� u�H��������?I9���K�l-H�*U H��u&H��(fD�H�����H�U H��t�H������H��L��H�����L��H��$dH3%(u3H��([]A\A]A^A_Ð���H���U���L�����H���o����K��ff.���UH�=�'SH������H�-�S H��H�}����H�+�H�5�'H��H�����H�߹����H���H�5�'���H�߹����H����H�5�'���H�߹����H�d�H�5�'�h��H�߹����H�Y�H�5�'�M��H�߹����H��H�5�'�2��H�߹����H�3�H�5�'���H�߹H�x�H�5~'���H��1�H���H�5}'����H�߹H���H�5~'�����H��H�*�H�5u'���H�UH�5w'H���+��H��H�!T ���H�=T 1�H����H�5_'���H�=�S 1�H�����H�5H'����H�=�S 1�H���H�54'����H���0��H��H��[]���f�H�W`H��tOATUSH�OH��H��t'L�gh�L������H�S`H9�w-H�C`[]A\�H�H��t�H�sh�����@��H)�I�4L��H�����H�k`���SH���w���H�{H��t����H�CH��uH�[�ff.�AVAUI��ATM��UH��SH��H�7�gH�H�G`H��t
@����H�����H�����H�CH������H�{���L�pL���
��L���E��H�CH�CI��u�KHH�����tV�CL@��tYH�H�kPL��H��tA��tSL��H�H�CX[]A\A]A^�H���H���b���H�CH�s�f��CL��H�����H���L���x��H�CX[]A\A]A^�ff.���USH��H�$H��x�
dH�%(H��$h1�H��H��H��I��1��H��H�����H�����u+H���S���H��$hdH3%(u!H��x[]�fDH��H�=
���������f.�UH��SH��H��H�G`H�PH���w+H�|hH��1�H�%�8��H�HC`H��[]��C���H�C`H�PH���v�H��O H�5�$H�81��J��f.�UH��SH��H��H�G`H�PH���w+H�|hH��1�H�����H�HC`H��[]�����H�C`H�PH���v�H�O H�5L$H�81�����f.�U��SH��H��H�G`H�PH���w,H�|h��H�$1���:��H�HC`H��[]�D�C���H�C`H�PH���v�H��N H�5�#H�81��J��f.�UH��SH��H��H�G`H�PH���w+H�|hH��1�H��#���H�HC`H��[]�����H�C`H�PH���v�H�N H�5L#H�81�����f.�H��t{UH��SH��H��H�G`H�H���wH�|hH�����Hk`H��[]�fDH�t$�F���H�C`H�t$H�TH���v�H��M H�5�"H�81��G����ff.�@H��(dH�%(H�D$1�I���D$"I�@H��t!H�
�L @H��H����H����u��@�xH�p�I�P�@�0H)��@�"����H�D$dH3%(uH��(�����@��H9~0tNU�H��SH��H�5?"H��H�{@t�H�5�H�����H��H���8���H�C@H��[]�@����USH��H�$H��xdH�%(H��$h1�I��H��
H��L���H�L��H������D$L��tHH�|$Pt@H�����ujH��H�=����H���(���H��$hdH3%(uQH��x[]�H��H�=N�9���D$Ht��H�5%!H������H�����t�H��H�=��������ff.�@��ATI��UH��SH�B H��H9���H��t"��t�H�5� H���h���H�C H9���H��t��t]�H�5� H���A���H�����H��H��H���+����H�5� H������L��H�����H�k �KH[]A\���H�5*��f.�AUH�U �ATA�USH��L�khH��H�`�D$I)�L�L������L$Hc�I9�vHk`H��[]A\A]��H�{`H�D=H=�w/�f(��H)�H��L����Hk`H��[]A\A]�H������H�{`�L$H�D=H=�v�H�J H�5KH�81�����f�AW�AVAUATI��H�5, UM�l$H��SH������I�$ tM�l$E1�I�|$L�uhK��������	����
�o�H�5H���{���I��M;|$}QC�\=���~���"������\������H�5�H��I���#���M;|$|�H��H��[H�5K]A\A]A^A_���f.������H�5dH�������W������
���H�5NH������.���fD�H�5#H�����������H�5�H���l��������H�5�H���L���������H�5�H���,�������H�}`��wWH�GH=�����L�H��1���^��H�HE`�k����H�5fH�������O����H�GH=�w�\=hH�E`�/����H���(���H�}`H�GH=�v�H�yG H�5�H�81��0��H����H�}`H�GH=��M�����f�U�
H��SH��H�5�H���3���H�sH���'���H��� tO%0H=0tBH���Z��H�SH9�t5H�5��
H�����H���5��H��H���Z���f.�H�SH��tgH�H������H��te�P���xuJH��������u>H�H��0tPH��u'H��H�5�
�s���H��H��H��[]�b���f�H��[]�f�H���x�����@H�KH�S�� u+H��~��:x�H�BH��
H���x�x�H9�u���H�S��f���ATUH��SH���]��A��L9cXv[]A\���H�5�H������H��H���I����H�5�H�����L��H�������}���
H�5�H���|���H���d��H��H������H�5eH���U����}�	���EH�@Hc�H�>��fD�
H�5rH�������
H�5{H������H�����H��H���u����H�5_H�����H���	��H��H���N���H��[]�H�5
A\���fD�H�5�H������{�����H�5�H���|����
H�5�H���h���L�eL���|��H���4��H�����t|H��H���A���� ���@�H�5DH���$���������H�5eH����������H�ߺH�5�����uH���Y��D���@�
H��H�5����L��H��H��I���AF�� ����H�5�H������k����AWAVAUATUH��SH��H��HdH�%(H�D$81��G��H��uB�H�5�H���>���fDH�D$8dH3%(��H��H[]A\A]A^A_�DI��A��tWH���
H���
@����H���H���q@�����H�5VH�����f�I��H�EH�k(H�C@��H����H����H�EH�C0�CL��tM���6���H�CPI9D$8�'���H9k�����H�5H���A�H��H�����
H�5�H���"�H�E������
H�Hc�H�>��1��w���f��H�5H����������H�5]@H����H�5�H����H���l���
H�51H��A����D��H����H�5H���f�H�s8H�����H�{0�
H�����H���7
H�uH�����w_H�
�Hc�H�>��fDH�5�H�ߺ�����H����H�����H����H�{0�9f�H��H�5��H������H�{@��	M����I�|$tC�
H�5�H����M�t$L���a��L��H��H���s�H�5�H���_�I�|$ ��	I�|$0H�������	H�5�H�ߺ�-�I�t$8H����H���H���I��H���$	I��0H��L�����I��H�����H��M�|$�L��H�5B����H�5H����H�}���H�����H�}I�����L��H��H����H�5�H���}�M9�t�H�5�H���d�I��H��M9�u��H�5�H���C�H�5�H���/���f.��H�5H����H�����H����H�53H���������L�uM������H�ߺH�5���A�vH��������fDH�5+�	H����H�u�����	H����H����H�EH�ƒ�H���������@�����H�ߺH�5��D�H�uH������c���H�5��H����H�u�� �,	H����H����H�E�� �	H��H����H����H����	H��������� ���H�5�H���������� �4	H��tL�� t�H�5�H���z�H�uH���H��u ���tH�5�H���N�H�u��0H��0�(	H��H�������'��H�UH����9�t{�H��H�5R��H�UH������H����	���H�x迾��H�UI��H������H���t	�`��L��H��H�p���H�5�H�����H�5�H����H�E%0=�	��= ��=0u�H�5�H���I�f��H�5wH���,�H�E%0H=0�G����H�5�H�����.���fDH��蠿��H�������H�5�H�����H���{���H��H���P�����H�5�H����H�}H������H���l���H�}I��H��������L��H��H���k��H�5�H���W�H�EH�����������j���H�EL�pM���Y����H�5H����L���-���H�����H�������H��H�����L�uM������H�ߺH�5����L��H���R����DH��萿��H��H���U�����H�EH��H��������H�5tH���z�H�EL�0L���K���L��H��H���]��H�5�H���I��t���@�� t�H�5BH���$�H�ߺ
H�5 ��H���������)H�}����H�߉��m�H��������
����H�5�H�������@�H�5������H�5�������H�5������H�5������H�5������H�5��w�����H�5��_�����H�5c�G�����H�5R�/�����H�5K������H�5������H�5������H�5�������H�5������H�58�����H�5(�����H�5�o�����H�5�W�����H�5�
�?�����H�5�
�'�����H�5�
������H�5�
�����H�5U
������H�5F
������H�56
����H���p���H���x����H�5�
������
H�5�
H���$�H�s0H����H���`���H�������H�5�
H��������fDH�ߺH�5O
���L��H���I����@�H�5�H��������{���H�ߺH�5�I����L��H���y��3���@H�ߺ	H�5��\�I�t$ H��������f.�H��H��H��2���D�H�5�H����H�����H��H�����H�5�H���������H�5eH�������������H�5�H�����f���fDH��蘶��I��H����H�5V
H�ߺ	�w�L��H���l�H�EH�ƒ�H������ ��H�5�
H���;��f�fD�H�5�H����H���ĸ��H��H����� �@H�u(�z����H�U�����H�u����H�}H�� �*����@����@���I��I�� M�����H�5�H����L��謺��H���d���H�������H��H���m���H�5rH���T�H�uH������H���k���e����H�5_H����H�EH�����8����H�5<H��������H������H�����I��H������k����H�5�M�~H����I� tM�~L��芵��L��H��H�����H�5�	H���������H�5�
H���o��*����H�5�
H���V�����H���y������}���H���j������F����
H��H�5X	��L��H��H��I���AF������H�59	H���������
H��H�5	���L��H��H��I���AF����:��H�5�H�������L�u���胴����H9�tgAVI��AUATI��UH��SH��H���H���1�H��I���+���L�e8�EHuH�;tH��H����M��tH�����L�L9�u�[1�]A\A]A^�1��ff.�f���ATUSH��H�$H��p�
dH�%(H��$h1�H��H��I��H���H�H��t@��tV��L��H��A�����H��H��� �H�����H��$hdH3%(u$H��p[]A\�f�H������H�D$8��L���ff.����S�H��H�,���H�5�	���H�߹H���H�5�	�Ŷ��H�߹H�f�H�5�	誶��H��1�1�[魲����H��H���== object_allocations_reporter: START
== object_allocations_reporter: END
hash modified during iterationtrace_object_allocations_starttrace_object_allocations_cleartrace_object_allocations_debug_startObjectTracing/allocation_info_tracerlivedead-- %p (%s F: %p, C: %sC: %p@%s:%lu (%s))
trace_object_allocationstrace_object_allocations_stopallocation_sourcefileallocation_sourcelineallocation_class_pathallocation_method_idallocation_generationreachable_object_from_root_i: category should insert at onceObjectSpace::InternalObjectWrappernon-hash givenimemo_envimemo_crefimemo_svarimemo_throw_dataimemo_ifuncimemo_memoimemo_mentimemo_iseqimemo_tmpbufimemo_astimemo_parser_strtermimemo_callinfoimemo_callcacheimemo_constcacheunknownclass or module is expectedimmortal_dynamic_symbolimmortal_static_symbolimmortal_symbolT_NONET_OBJECTT_CLASST_MODULET_FLOATT_STRINGT_REGEXPT_ARRAYT_HASHT_STRUCTT_BIGNUMT_FILET_DATAT_MATCHT_COMPLEXT_RATIONALT_NILT_TRUET_FALSET_SYMBOLT_FIXNUMT_UNDEFT_IMEMOT_NODET_ICLASST_MOVEDT_ZOMBIEtype2sym: unknown type (%d)#<InternalObject:%p %li>TOTALObjectSpacememsize_ofmemsize_of_allcount_objects_sizecount_symbolscount_nodescount_tdata_objectscount_imemo_objectsreachable_objects_fromreachable_objects_from_rootinternal_class_ofinternal_super_ofInternalObjectWrappertypeinspectinternal_object_id������T����������T����������T����������T�����������T�������������T����������d��full buffer%ld%d%zu]}
{"type":"ROOT", "root":"", "references":[%#g\\\"\u0000\b\t\f\n\r\u007f\u00%02x, "bytesize":, "capacity":{"address":, "type":"SHAPE", "id":, "parent_id":, "depth":, "shape_type":"ROOT""IVAR","edge_name":"ID_INTERNAL()""FROZEN""T_OBJECT""OBJ_TOO_COMPLEX", "edges":, "memsize":UNKNOWNfalsenull, "type":", "shape_id":, "slot_size":, "class":, "frozen":true, "imemo_type":", "mid":, "called_id":, "receiver_class":, "embedded":true, "fstring":true, "shared":true, "encoding":", "coderange":"7bitvalidbroken, "broken":true, "size":, "default":, "length":, "superclass":, "variation_count":, "name":, "real_class_name":", "struct":", "value":", "ivars":, "too_complex_shape":true, "fd":], "file":", "line":, "method":, "generation":, "flags":{{"type":"SYMBOL", "value":{}, "singleton":true, "chilled":true_dump_dump_all_dump_shapes[objspace] unexpected shape type��p�P����������<�T�l���|������������$����4�L�d�,�t�D�������\������1�4�\��T�����D�����������������������������������������|�1�;�U�����,��������p����<������������� ����<,���\l���|̯�������L�������������(ܱ��@����X����t���l���������� ���<\���`ܴ���,�����������l�������Lܷ���������������L���\���$l���8����`����t����l������������������������������������	��4	l���t	���	L���	���	����	��(
���L
l��h
����
����
������P��l,�������������8<��T\�������|��
���,
|��X
����
����
���
l���
\��,��\�����������,|��l����(��`zRx�$؛���FJw�?:*3$"D0���p\x���
pt���VD L
A�����*HU
CI�ȫ��2HU
KI ���RHi
GD
LI�$���:HZ
NID���:HZ
NI0d���ZE�I(L����E�N�Q �
CACx����HK�����HN������X�x� ���JE�DH�T���zF�B�D �D(�G0\
(C ABBEl(F CBB$,����.E�A�G YFAT����GE�}pĮ��E�Q �Ȯ��OE�o
DK
E ��xE�Y
B]
C�P���IK�U
H\8������B�B�A �C(�D@i
(A ABBE0���)E�SL���IQWI0hL����B�A�D �G0O
 AABG0������F�A�A �G@a
 AABDH�T���
F�B�B �B(�A0�A8�G`�
8A0A(B BBBG���	0���E��L���6`4���
t0���	$�,���'E�D�G TAA�4���	 �0���mE�D@Z
DA4�|���LF�E�D �D(�D0l(C ABB ����HV8����HNLP�����F�B�A �D(�G0`
(A ABBF`
(J ABBIzRx�0����$$���(����|Y�L�J f
G�A�K$T����A�K
L|
Dw
A(̵��	 <ȵ���E�D0\
AJ `t���^E�D0K
DA<�����sK�E�E �D(�A0�B(C BBBK�����(���Y�D�D c
G�A�L�d���<H`
HG�����$@���jE�`4@�����E�D�G M
AAAw
DAL x���E�D0�
AA�X����H@v
B(�����SE�D�G b
AAD,�0����E�j
Ic
MQ
GF
J8�RF�B�A �A(�D`�
(A ABBDP��A�T
KzRx�� f����t��1E�b����L����uF�B�B �B(�A0�A8�G�/
8A0A(B BBBB( 	����E�H�D �DA8L	���xK�A�A �o
ABAX���H ����	���%A�cL�	���B�B�E �D(�D0��
(A BBBAM(A BBB,�	����E�A�G� I�!a
AAG($
 ��vA�D�G v
AAD(P
t��vA�D�G v
AAD(|
���vA�C�G u
AAF(�
��vA�D�G v
AAD,�
p���F�D�G0f
AAG@�����|D0r
A( 4��YK�I�N oAAE��,Lh���E�A�G� I�!|
AAD,|(���F�D�D ��
ABHH�����B�N�G �A(�K@n
(A ABBIy
(A ABBAH�L���B�G�B �B(�K0�I8�D@�
8I0H(B BBBO4D���NA�I�N �
GAGD
AAJ8|���yF�A�D �R
ABH
ANKzRx� ���$*���H�����B�B�B �B(�A0�D8�G�L
8A0A(B BBBF<8
|�sK�E�B �D(�D0�L(C BBBA�����4x
���F�A�A �G� I�!z
 AABJ�
D�cE�YGNU�`8 8�� ��=�=P=@(��E@E���	^	h(
�~�� �� ���o`��
t	�� (@��	���o���oP���o�o4���o�� �(�(�(�(�(�()) )0)@)P)`)p)�)�)�)�)�)�)�)�)** *0*@*P*`*p*�*�*�*�*�*�*�*�*++ +0+@+P+`+p+�+�+�+�+�+�+�+�+,, ,0,@,P,`,p,�,�,�,�,�,�,�,�,-- -0-@-P-`-p-�-�-�-�-�-�-�-�-.. .0.@.P.`.p.�.�.�.�.�.�.�.�.// /0/@/P/`/p/�/�/�/�/�/�/�/�/0GA$3a1h(GA$3p1113�7�~GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�Dn]GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYp8�DGA+GLIBCXX_ASSERTIONS
GA*FORTIFY�D�~GA+GLIBCXX_ASSERTIONSobjspace.so-3.4.4-3.el8.x86_64.debug�d��7zXZ�ִF!t/��?�]?�E�h=��ڊ�2N��
�^ ��X���r9$�Ⲕ�]�.���r'"F,E�<���HډEJ�$����ɮ- �&v��Ş�7O�����L��Ǜ$rS�o�}��|��K`�Y��5�=>�@O�yFF,�b�C�"�.C�h{;Q5)�G���PO��v�"�ӵ��2w�Dt������ȅ,���AZ����z4�GG��:^�t���P�`&�m�`CG������u��Rr�m�aqT�6���T,1yj��<ֻ%�����hKV[S���eBdu���wBr�b��^zA��:�V<,��j"�s)�VBy�e��;���H�#���%��xWe*@�� ��@�VÁu\Z�=��\�PED���r�T�l���R�g�%��&�T۝���[dX>3q<)*$$|�d`"���s�
���s��B�F/`��
>�	ZI�6>䲔�^80�!�w��I�^c���d����<(��[J<A�LH�ls��	�x���Q���Qr-�|l ���X'�f�|�T(r%�3]V��|��O�0�aw:��0��|��C�tg/<��n�&G�!փLh"�q��Ɉ,��¼���Xɫ�1�U�J���DH�2���޺��U�Ƀh��
"V.X�N��
߈�ӄ/�פKy�p�W���V�ūJe�֍��}Q�}
N��s��[&���Z
sR��8�?����ג>��pi#��>«��1 *���#���
3Tv{�
�@�A��W|�~/i�摩�)E�ASRw�1�⇺�A#m�Gd]��#{�q]�㖅7��NE�R�	�-��/��Kz�P���]�'k3!ˇ\�ك�CG��z� ��]������c�t�l^�A�[���B�t�-�x!
C��5
T�
�5%�2���r��gŒ��`Z�&��Ш�x#��߮�{��	���M���˨�:�fPD��k��a���)9�=T��M<4��<"׿�w�_
|͛��ȉ*jn���������7i)�X�nフ�úN��JK�ʑ���c/}�G��+���։ˮr�m̰�˅M��{� 	���m2���K;Ԉ�/%T#���Ou�AgR��+~��$
�����a��T���;5�Ŕ��i���%|��-�@��[��꨿Iy������;��=i�)���� +��>���J��:�64=���^�X|z�6�fV\���5<���غ5h��-����$�N�k#��rK�4<��;��O�9m)�����.��K���YA�a���?Y��Io�I�1�yu aS}�r�I���Kx@ɿ��p��FF���[7~�G�b��=�#� ������;�W���ؘlm�U����z�
�C݂#ӦuR��+dM�"�0�c.�Z3�#��9U��I,GJq����#:�w��F�K���N?��[Gd�(6����)%��
D� �[�n�
DKs��k�_�|ZȔ�r�{3G!�JFQ&�KLC�lK�߫o������3]��~��ϓ�ԕVϡ>�L�QI�]��
r�ߧ5��`�lO�y�}G��$H	��y����NS{��.rL�����r�:�����--[�a��ΐ3Z56V���Z�fDz��V���@
��@k�2�����렩�|z���k{��ܐ���k0�L�rn7�
�6Y�ڷ��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``@(�� 
0��t	8���o44E���oPPPT���^B@@(hh(h(c�(�(�n00pw�7�7sG}�~�~
��
����������
�h�h� ��� ����� ����� ��� ��� �� ��� ��X�� �� ���`�ll�,�����"PK*J[���OOlib64/ruby/coverage.sonuȯ��ELF>0@�G@8	@�-�- 8<8< 8< �x P<P< P<   888$$�-�-�-  S�td�-�-�-  P�tdp)p)p)��Q�tdR�td8<8< 8< ��GNUuIZ���F?�L bQ��+�D0A+/0BE���q?���|�Gp��qX�"��M!{� ��_���m.���x ��w�"=��">qT���, LF"f�aU@@ �`&S�@ �P`G@ ��B__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_hash_newrb_ary_new_from_valuesrb_hash_asetrb_hash_foreach__stack_chk_failrb_coverage_resumerb_resume_coveragesrb_eRuntimeErrorrb_raiserb_coverage_suspendrb_suspend_coveragesrb_get_coveragesrb_gc_writebarrier_unprotectrb_hash_freezerb_objspace_each_objectsrb_intern2rb_id2symrb_asan_poison_objectrb_asan_poisoned_object_prb_asan_unpoison_objectrb_resolve_me_locationrb_hash_arefrb_bugrb_sym2idrb_clear_coveragesrb_reset_coveragesrb_convert_typerb_hash_lookuprb_error_arityrb_warnrb_ary_duprb_ary_freezerb_internrb_ident_hash_newrb_obj_hiderb_set_coveragesInit_coveragerb_define_modulerb_global_variablerb_define_module_functionrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib646ui	Xii
d8< @< �H< H< �? �? 0�? �? .�? !�? $�? &�> �> �> �> �> �> �> �> 	�> 
�> 0�> �> �> 
�> �> ? ? ? ?  ? (? 0? 8? @? H? P? .X? `? h? p? x? �?  �? "�? #�? %�? &�? '�? (�? )�? *��H��H��/ H��t��H����5R. �%S. ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�������%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%}+ D���%u+ D���%m+ D���%e+ D���%]+ D���%U+ D���%M+ D���%E+ D���%=+ D���%5+ D���%-+ D���%%+ D���%+ D���%+ D���%
+ D���%+ D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* D���%�* DH�=�1������H�5�����	f.�f�H�=�* H��* H9�tH�N* H��t	�����H�=q* H�5j* H)�H��H��H��?H�H�tH�5* H��t��fD�����=-* u+UH�=* H��tH�=V& ����d����* ]������w�������=�* ��HE��fD��AWAVAUATUSH��H��XdH�%(H�D$H1�H� ��H��H�H�F(L�fL�~L�vL�n H�L$H�$���H�L$H�t$�H��HcL�d$ H�L$�HH�DL�|$(�H�D$L�t$0L�l$8�3���H�{H��H�����H�kH�<$H��H�5B����1�H�T$HdH3%(uH��X[]A\A]A^A_�@H�v �E�������f.���USH��H��HdH�%(H�D$81�H� ��H��H�V(H�CL�L�NL�FH�~H�H�N H� tkH��H�,�HcH�|$ H��H�L$(�PH�DL�$�L�L$L�D$H�D$�<���H�{H��H�����1�H�L$8dH3%(u$H��H[]�@H�@ �f.�H�v �U����2���f���H��H��H�=�' ����1�H���ff.�f���H���N( ��t��t1�D�����1( H���H�a' H�5�H�81��X���H�I' H�5�H�81��@�����H���=�' u�������' H���H�' H�5�H�81����ff.���SH��dH�%(H�D$1����H�����H�$H�����t^H�����H�$H�5jH������S' u)H�<$����H�$H�L$dH3%(u5H��[�fDH��H�=�1�����H�P& H�5QH�81��G������f�����& S��tH������u{H��& H��H��u�H������H��& H��t�H��[�~���fDH��& H��H��u�D�	H������H�d& H��t�H��[�>���fD�[ÐH�I& H��u�H�UD�H���{���H�$& H��t�H��[���fD��AWAVAUATUSH���dH�%(H��$�1�H�H�D$H9��H��I��L�t$PI��L�=�
�H��tL����M�I9���L�����1�L��H�����M��t�A��u�I�EH�ƒ�H��u�H������u�H�L% H��u ��L�����H�,% H��t�H������L��L��H�D$���L9��k���I�U H��t��uH���H����L�D$XH�T$ I��L�D$�4���H�t$hH�|$pH�D$`H�t$0H�t$PH�|$8H�|$H�D$(�z���H�������H�t$H���c���H�D$I�EH�x �q���H�=�# L��H�D$H�=���H�L$(H�t$0�L�D$H�T$ H�D$@L�L$HH��$�H�L$8H��$�H��$�L��$�H��$�H��$�L��$����H�|$H��H�D$����H�L$@L�D$H��teH�H��trH�H�H��������?H9�~dH��������H�|$L�������@1�H��$�dH3%(u8H���[]A\A]A^A_�H��H��H���HD��H�T	�H�H�P����������UH��SH���N���H��H��" H��u(H�-���H���s���H��" H��t�H9���H��" H��u#H�-;�
H���;���H�l" H��t�H9���H�O" H��u#H�-�H������H�," H��t�H9�tzH�" H��u'H�-�
��H������H��! H��t�H9�tBH��! H��u*H�-�
��H�����H��H��! H��t�1�H9�u
D�H��[]�ff.�����" AVAUATUS��������H��uYH���A���I���)���H�=2! H���8�=�! �I�6���[L��]H�! A\��! A]A^�D���"H��H�
�	H��	�H�8���H��H�/! H��u#L�%�	�L�����H�! H��t�H������H��H����H��I��H��  A��H��u&L�5�	fD�L���C���H��  H��t�H����H��H�����H��H��H���%���I��H��u	E����H��uVM������[L��]A\A]A^�f.��H�5�����=�  �����H���
�����1������H�=� H��t��H�5�����v��H�u H�5vH�81��l�H�=�1��>��Y�H�=b H������+�����AWAVAUI��ATI��USH��H��8dH�%(H�D$(1��� ��ukH� uRH�^ H�;��H��H���+�H��L��L����1�H�L$(dH3%(��H��8[]A\A]A^A_��H���f.����H�ŋJ �t\H�SH� uH�S H�:�L�5iH�ZLE���H��I����L�����H�����L��H��H����� ���H� �H��H�[H�CH� uH�C L�0�$�%�H�D$H� ��H��H�CL��H��H�5�H�D$��H�M L�t$H��u$H��@�H����H�$ H��t�H����L��H��H���Y�+ ��������I��H�� H��u H�/�H���C�H�� H��t�H����L��H��H�����1���@H�[ ����H�[ � ����Z�f.����� ATUS���������u6H�� ��H�������9d ��[�]A\�@����H�� H�.H��H��u"f��H���c�H�� H��t�H�ǻ���H9�u}�P�H�I ��H������v����S�H��H���(�� � �;�H��H����۸�� D�H�� ��H����[�]�� A\�H��H�
��H����H��H� H��u'H����H����H�� H��t�H��1���H��H����H�����H�� ��H��u&L�%DfD�L���3�H�� H��t�H����H��H�����ڃ�H�����H�Z E�H��u#L�%��L�����H�4 H��t�H���_�H��H���d��ڃ�H�����H� E�H��u#L�%��
L����H�� H��t�H����H��H����H�����t��um��	H�� H��u!L�%X��L���C�H�� H��t�H����H��H������ڃ�H�����E�������:����1����:�H�� H�5<H�81����H�� H�5\H�81����H�� H�5�H�81���f���SH�����H������[�@��SH�=��?��H����H�5�H��H����H�߹����H�b���H�5���H�߹����H�����H�5��H� H��1�H�5m��H�� H��1�H�5\�k�H�߹����H�����H�5N�P�H��1�H���H�51�8�H��1�H�|�H�5%� �H��1�H���H�5��H�=� [�����H��H���coverage measurement is not set up yetcoverage measurement is already runningcoverage measurement is not runningcoverage measurement is not enabledcoverage measurement is already setupcannot enable lines and oneshot_lines simultaneouslycannot change the measuring target during coverage measurementidlesuspendedrunningmethodsT_ICLASSoneshot_linesbranchesevalto_hashHashstopstop implies clearallCoveragesupported?setupstartresumesuspendpeek_resultstaterunning?;����@�������X������`������@�����@� �,�� ����@���l����������zRx�$���FJw�?:*3$"DP��\��Hp���F�B�B �B(�A0�A8�G��
8A0A(B BBBE(�h��E�A�G`�
AAE��#HZ4�`Hg
Ax�BHa
A 8���E�D o
AG(\8��K�B
Ku
KF
BuL����F�B�B �B(�A0�A8�G�_
8A0A(B BBBA$zRx��������,�(�DE�D�D 4AAL@4�L�B�B �A(�A0�I
(D MLBF�
(D BBBK zRx�0�����(n�H���FF�B�B �E(�D0�A8�Gpb
8A0A(B BBBI8���>L�A�A �}
FBE�
FLDP���E�Vl���E��GNU��H< 
&6n
h'8< @< ���o`8�
�p> �@P�	���o���o ���o�o�
���oP< 0@P`p�������� 0@P`p�������� 0@P`p���GA$3a1u'GA$3p11130e'GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY e'GA+GLIBCXX_ASSERTIONScoverage.so-3.4.4-3.el8.x86_64.debug�F�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�����$��H���?����t�I �K�#c��(ns�8���͑�U%Œ��\ʼ�D�w���L��W�a o�Ul�����+}l_$ozgG�?�/[�����O����(T�i6�JN%�^�M�z9�
��IM*V��(���*��-�vsd���Z!مq��V��a�u9f�V]r�k��s�L=^��6�O-�Lm_���0koU�@�2�ծ_����	g0T�=�@�]����qٱ���!cm.oe��J�́��qpEh�x�44�*.�z�x�9ĸ��ޗa֯������).w?�3WA��[���l[��)�wQf�Y&loV�{�-c�$t�<��n��ͻ�g���k*U��ڪ�N��w�p.�(
�[kS{�e�v�[	 Ʊ�\�e��[��7�)>+&�x��O��k��1��*tDv�%���J���
{�#����ll�>/˞ⅣccB<���,U�m�q�r�¾9�Y�ՎOal�?�E���(c����2�d��X�k�A��-�<�Ă
��I���I�{��˭��Ͳ��p�y}p�0d3o�,4hoSG#�ս������}�>#w�\<ռ��)ʡ$��F���6�N�7��;5)���Ԅ��5e!z�
�[�RqZ�V_�s����}N��k�
<�:#�'d
O
g0
0��v�5q*l�r�[^��W%���I"m|�R[���m�?PU���T���S萇JZ��T{N�F�|�ǻ5��iRXHT��m0L�r	�~���}TK��Q�:��A4
﵅/�>bguP �`X��-mQ�'к�5�lu&H=�mG�WlxM�^�Ҋ���_|��$��ոh��1�F??P�h�Ǝ���}'}<g�̙��{�ؚ2�Z�<苑�q�_fi�D�T=��*d��o�j])r6��傜%�<��5�������2,�ٌ�0]A~3�h3
��̙�+Y�@��
TB��@`X�%��!��Az��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``<(���088�8���o�
�
bE���o  0TPP�^B@@�hc  �n���w005}h'h'
�2x'x'��p)p)��**���-�- �8< 8<�@< @<�H< H<�P< P< �p> p>��@ @�@ @���@`@H
PB,|B$�F(PK*J[Φ����lib64/ruby/stringio.sonuȯ��ELF>@,@��@8	@ y y �y�y �y  h HzHz Hz   888$$yyy  S�tdyyy  P�td�i�i�iddQ�tdR�td�y�y �y  0GNU��M�+bڄ��_�����l�@ Alo��1�BE���|�qX`�v\�xEm JZ��5���4T0
?�*����M"s�����\���iAUeo:�� 	�rO���&�Qo"�"C���j���v���� ���{*��, a�-�F"�h������]��� �8� �� __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_keyword_given_prb_intern2rb_funcallv_kwrb_eof_errorruby_xfreerb_gc_markrb_enc_find_indexrb_enc_from_indexrb_enc_associate_indexrb_utf8_encindexrb_io_extract_modeencrb_string_valuerb_enc_getrb_str_resizerb_gc_writebarrierrb_default_external_encodingrb_enc_str_new_staticrb_hash_duprb_error_arityrb_syserr_fail__stack_chk_failrb_check_typeddatarb_call_superruby_xmallocrb_class_new_instance_kwrb_block_given_prb_yieldrb_ensurerb_obj_as_stringrb_warnrb_data_typed_object_wraprb_io_taint_checkrb_eIOErrorrb_raiserb_enc_from_encodingrb_num2longrb_uint2bigrb_ascii8bit_encodingrb_enc_associaterb_find_encodingrb_str_new_staticrb_str_appendrb_notimplementrb_convert_typerb_int2bigrb_usascii_encodingrb_str_conv_encrb_str_buf_appendrb_str_modifymemmoverb_enc_str_buf_catmemsetrb_enc_checkrb_eArgErrorrb_enc_mbclenrb_str_subseqrb_enc_copymemcpyrb_hash_lookup2onigenc_get_right_adjust_char_headmemchrmemcmprb_rsrb_get_kwargsrb_check_string_typerb_enc_str_coderangerb_str_buf_cat_asciirb_enc_dummy_prb_lastline_setrb_ary_newrb_ary_pushrb_str_modify_expandrb_str_set_lenrb_num2intrb_enc_codelenrb_fix2intrb_enc_uint_chrrb_enc_codepoint_lenrb_frame_this_funcrb_id2symrb_enumeratorize_with_sizerb_io_writerb_sprintfrb_syserr_fail_strrb_funcallvrb_str_newrb_str_substrInit_stringiorb_ext_ractor_saferb_cObjectrb_define_classrb_define_constrb_mEnumerablerb_include_modulerb_define_alloc_funcrb_cIOrb_define_module_underrb_io_addstrrb_io_printrb_io_printfrb_io_putsrb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64�����ui	�ii
��y �,�y �,�y �y z �ez �-z �-z -p x 
� � � � !� "� 2� :� ;� D� `� a� b� d� e�| �| �| �| �| �| �| �| �| 	�| �| 
�| �| �| �| �| } } } }  } (} 0} 8} @} H} P} X}  `} #h} $p} %x} &�} '�} (�} )�} *�} +�} ,�} -�} .�} /�} 0�} 1�} 3�} 4�} 5�} 6�} 7~ 8~ 9~ ;~ < ~ =(~ >0~ ?8~ @@~ AH~ BP~ CX~ E`~ Fh~ Gp~ Hx~ I�~ J�~ K�~ L�~ M�~ N�~ O�~ P�~ Q�~ R�~ S�~ T�~ U�~ V�~ W�~ X�~ Y Z [ \ ]  ^( _0 c8 e@ fH gP hX i` jh k��H��H�Q_ H��t��H����5�[ �%�[ ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]���������%V D���%
V D���%V D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%�U D���%}U D���%uU D���%mU D���%eU D���%]U D���%UU D���%MU D���%EU D���%=U D���%5U D���%-U D���%%U D���%U D���%U D���%
U D���%U D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%�T D���%}T D���%uT D���%mT D���%eT D���%]T D���%UT D���%MT D���%ET D���%=T D���%5T D���%-T D���%%T D���%T D���%T D���%
T D���%T D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%�S D���%}S D���%uS D���%mS D���%eS D���%]S D���%US D���%MS D���%ES D���%=S D���%5S D���%-S DH�=�S H��S H9�tH�S H��t	�����H�=�S H�5�S H)�H��H��H��?H�H�tH�-S H��t��fD�����=ES u+UH�="S H��tH�=M ����d����S ]������w�������(�fD����fD��AVAUE1�ATI��U��SH�������H��R A��H��u#L�579�L�����H��R H��t�E��L���H��H�����H��t	[]A\A]A^��h�������G$���G$��~�fD�����H�?����@AUATUSH��H��H�H�HH�PH� tH�PH��~.�<���v9<���<�uH��t�z���D1�H�kH��H��[]A\A]�@��u�H��~ހzu؀z�uҀz�u�H�=�6A��2���A���E��t�D������H��Ic�H�C�C t�H�;D������fDH���v����z��l���H�=e6A�����A���DH���F����z��<���H���2����z��(����;���A�A���e���DH��~�zu�ztH�=	6A��d���A���4���H�=�5A��J���A������f�AVAUATI��U��SH��H��PdH�%(H�D$H1������G�1�H�L$H�|$1�L�L$ L�C H�D$H�D$���H�|$��H�|$���H�|$H�����C H��F������UH�;H���a����H�D$ H�C�C H�CH�C�����H��I	$L��H�t$HdH34%(��H��P[]A\A]A^�f.�Hc�I��L�t��������#I�EH�D$���8I�EH�D$���1�H�L$H�|$L�L$ L�C ����H�|$���H�|$u�K H�������H�|$H������fD�3���H�C����f.�H������C ����H�|$��������C �������D1����H�|$H�;H�������@���x���H��L�����h���fD���H�=r41�H�����H��H�D$�%���DL�����H�ƒ���������1����y���H�D$����1��
���
���f.���AUI��H�5�G ATA��H��UH��SH�����H��H��t*1�1�����H��H��H��L��[D��]A\A]���fD�(���H��H�H�@H�@H�H�C H�] ���ATI��UH��S���k���1ɉ�L��H�����'���H��������uH��[]A\�H�=�L H��H��[H��]A\�s�����ATI��U��SH�������u����1�H��L��[��]��A\���H���r�H�=5H��H��1��n�����ff.����H��F 1���ff.�H���'���H�5pF H���(���H��tH���H�'L H�5�1H�81��&�fD��H������H���f���H�����1�H���ff.����SH���s���H��[�ff.���H���S����H���f���H���3���H�@H�@�H���f���H�������H���f���SH�����H��[�ff.���SH�������H�tH�C �@ ����H���[���SH������H�tH�C �@ ����H���[���SH���c����H�tH�C �@ ����H���[���SH���3���H�#�����[�D��H������H�H���ff.���S���H��H���;���H��tH�{[����@�[Ð��H������H�xH��t
H�����H�H��t�H���o�H��H�������AUATI��UH��S��H��H���r�����~I�Ń�t��������,�@�H�}H��H�@����I�$��I�D$ �@ ��H��t5��tOH�H��tWH��uXI�EH�PH��������H)�H9��H�H��xwI�mH���[]A\A]�fDH����H��H��u�I�U뱐H��t�H�5�.��
�f.��K�H���D���H��H H�5F.H�81���1�����H�]����fD��USH��H���.���H���tH��H�H�EH��H��[]�f�H�����H�EH��H��[]�f.���H�����H�H��t2H�xH��������?H9�wH�D?H���DH������H���ff.���USH��H���~���H����H�EH�t
H�S �B uH��H��[]�DH�}H����H��H��[]�f.���AVAUATI��UH��S��H��H��@dH�%(H�D$81��������������I��Hc�L�t��x��utH�m��t��u�fDH��tzH����H��t}I�}I�EH��tI�$tI�T$ �B ��H�L$8dH3%(L����H��@[]A\A]A^�f�L���h����{����N���f.����f��H�=",��H��H�����H��H�|$1�L�L$L�D$�H�D$�!�H�D$�:����H�����M����^�ff.���PXH��H�������f���UH��SH��H�t$���H��H�����c �H�|$�p�H�t$H�H�CH�C%H�3H��������C H��t@��tH�D$H��[]�f.�H����H�D$H��[]�ff.����SH����H��` �H��[���ATH�
�*H��*USH��H����J�H9�t^H��H�����H�5#? H��I�����H��t
�H$�Q��P$��~VI�4$L�c H��u1H�H����H�H�E%H	�H�A�D$$H��[]A\��@��u�H���:���H����I�4$L�c H��t���f���H������H�xH�@H�xH�D?H���fDH�������H������H�xH�@H�xH�D?H���fDH���w��SH�����H�tH�S �B t[�H��C H�5w)H�81���f.�PXH�5q)H��H��C H�81���f�AWAVAUATUSH��8H�t$dH�%(H�D$(1��x���H����H�|$I��H��t
@������H�kH�D$H����H�|$��I��H9��I9����I��H9��H�|$H��L���b�M9�H�t$��M9�I������tL9�H�t$��M�fL�t$M����f.�H�;H��t
H���H�O�C @��H�KI9��/M9��&L���~��f�H���H������H�kH������H�;H��t��H��H�������E1�H�L$(dH3%(L���IH��8[]A\A]A^A_�L�t$M�fM���>�����@H�SH9��S���H��������H)�I9��	H��t
H���J�4"H9�|y�t�H�D$H�pH� tH�pH�H�xH� tH�xH{L����H�D$H�D$ H�D$Lc�0���fDI�vI� tI�vH��L�������f�H�L$H�T$�a�H�T$H�L$H9�~!H�H)�H�xH� tH�xH�1��q�H�;�@���f�H����H�t$H��������������H��@ H�5�&H�81���@����~pAU�G�ATL�l�I��U1�SH��H��fDH��H�s�L������H�L9�u�H�@H�xH��H�D-[]A\A]ÐH��H��[]A\A]��fD��f�SH����H�tH�S �B t[�H��? H�5�%H�81����f.���H�����H�H��t(H�HH;J}@H�rH� u#H�QH�P�H�TH��H���f.�H�r��f.��H��H�����H���C���H�H��t"H�J�H9H�HL�H���������AUATUSH�����L�`H��M��tqH�+L�kH��tmH�uI9�}dH�}H�E u=H�L��L����L��H��Hc�HS���L��H��H����H��H��[]A\A]ÐH�}�f.�H�8H��uH���H��[]A\A]�@���I���b�����SH����@ tH�#�����[�H�8> H�5�&H�81��7����SH�����@ tH�#�����[�H��= H�5�&H�81������USH��H���~�H���tH��H�H��xH�EH��H��[]�DH��� ���1�����f���ATUSH�����H�(��tXH�H��x]1�H��t@L�eH��H�����L9�~'H��H�}L)�H�E tH�}L�1����[]A\�H����H���H�5'#��2�f�H�GH)�H9�HN�H��
H��1�1����USH��H�����H��H��H����H��H��[]�f.���ATI��US��H��H��dH�%(H�D$1��w���H�$H��t?��t�����1������@I�D$H�$H��tH�����H�<$��I�$H��t^����H�H���.H�<$��H�EH����H�UH�@H9���H����H)�A�H9�HO��7@L�EI����I�XH�uH9���H�<$H)�E1�H����H�����H�EH�pH� tH�pH�$H�xH� tH�xH����E����H�PHUH�L$dH3%(�MH��[]A\�@H��t1��s����@H����H�EA�H�XH+]�H��HO��N���H�]H����H�<$1�H������H�<$H����H�$�`����H�MH����H��L������:���H�uH����H�$�"���HuH���,�H�$����H�����H���.�����H�uL�EH���fD1��Q�H��H�$�c���DL����H�uL�EH���e����L���x�H�������+�H��9 H��H�5 H�81������AUATUS��H���������;�Hc�H��I��L�l������u1������L��H������H��H��teH��H��[]A\A]�@L������I��t\��t	��t���I��t�L��H������H��H��u�H�59 �$L����H��t��8�����o����6���1��/���ff.�AWAVI��AUI��ATUSH��HL�~L�gdH�%(H��$81�L�H�M����H����I�~H�AH9���H�YH� tH�YH�,H�M��~/H)�L9�v'I�~H����H��J�#H��L�$���L�$H��I����I�JH���.I��I)�H����A�E�D$/��L�H9���I����|L9��sM�ZI� tM�ZH�D$0H��$0DH�H��H9�u�L�A�L��L��M��tDH���r�H�D�0H��u�M9�~pM��DM����H��L��F�,L��L)�H)�L�G:,t�}DH���T2�8�gH�P�H9�u�H��x�D$/�HE�L�$J�,#I�vI�>L��L��������H��H9����;
t�I��H��
L��H�$L)���H�$H��H����H9�@��@ ���L�`L9�v�x
tH�pH9�v��x
u��x
u��x�
�"H��H�����f.�1�A�E��H��I�vI�>L��H)�H)��K���I�H�JH� tH�JH)�I�FI�nH��$8dH3<%(�eH��H[]A\A]A^A_�f�H��u
���H��L�$�d��I�L�$I���6���DH9��d����}�
�Z���H�U��H9��H���1��}�
��H���6���f�I�D$H9���A�<$
��A�|$
u�I�L9�v�A�<$
u˸��@I�BI� ���0L��H��H�$�]��H������H�hI��I)�A�E�����H9�H�$s
�x�
�HD�I)������A�EtL��H)���HE�L��I�>H)�H)�H�GH� tH�GH��L��L��H)�����_���f.�I�B�X����H��L�$���L�$H���&����L�,L9��K���I�L�l$ I��% H�D$I�BH�D$�I��H�D$ I�D
H9�����H�|$H�t$tI�rH��L��L�T$H�$�C��H�$L�T$��u�H�l$ I��I)�D$/�������NT�0M9��J������DI������I�B�y�������f.�AWAVI��AUATA��UH��SH��8H�|$dH�%(H�D$(1������+A�H�)3 A�I�����H�H�\$H�D$H�8t
H����H�]L�}�e�I��tPH�=M3 �?1�L�D$ �L��H�513 �t��E��t"H�D$ 1�H��$t	H��������E��	ЈEH�L$(dH3%(H����H��8[]A\A]A^A_�H����H��t@��uH���H����}��H��H���H�D$H�D$I�����H�8�&���H������M�6H��M���>L9�H�\$H�T$�����H������H�\$H�T$=�RH��1 H;��L��1�1����H�50H��H�D$�~��H�\$���@�H�=����H��1 ���Hc�M��A�I�\��������uvI�?H�|$A������M�A���;E1�H��A��u!I��t+A����I�H�\$����@H�|$����I��u�H�\$I���������H������I��A���u������fDH�D$H�8H�������H�T$�d��H�T$I�������E1�I��������H�{�����A�~�����L��H�T$���H�T$���]����y���L�����H�\$I���.���H�����L�|$A��tI�H�%0 H�H�\$����L�����I���ߺ1�D�����H�50 H�JH�52I�VH�81�����G�����AUI��ATA��H��USH��8dH�%(H�D$(1�H�l$��M��D��H��H�pH��H������H�xu@H�H��tH�SH��tN1�1��5��H�L$(dH3%(uBH��8[]A\A]�f.�H��H�����H��H�D$�H��H�D$뼐H������H����~��ff.���AUI��ATA��H��USH��(dH�%(H�D$1�H�����M��D��H��H�pH��H���I���H�xtL���I����H��L�����H��H������H��u�H�L$dH3%(L��u#H��([]A\A]�H��. H�5�H�81�������f�AWI��AVAUATI��UH��SH��H��L�.H�GL��H)�I9���H��H��M��H�T$IH�H�$I)�L���/��H�$H��J�40L�s�;��H� H�$H�T$u9L��1�H��x=H��L��ID�H�����I�H���[]A\A]A^A_�fDL�s1�L��H��y�L)�K�<&K�4.H���O��L���f.�H��~%H��H�D$H�$���L��H�����H�D$H�$L�sH� tL�sL9�L��L)�I�<�R����L)�I�<1�������H��(H�NH�t$dH�%(H�D$1�H��~2L�1�L9�t
H�VH� u7H�wL���{���H�D$H�D$H�D$H�D$dH3%(uH��(��H�V�����D��AVAUATUSH��0H�t$dH�%(H�D$(1��v�H��H�H����H����IH�|$H��t@���H����H�|$����H�D$H�xtVH�;���H�|$H�����I��H9�������H9���H�|$L��H���w��H�D$H��H�������H�T$(dH3%(��H��0[]A\A]A^�f.�@���Z���H���H��
�J������I��H�;���D��H��I���8���Ņ�~VL�t$L��D��L��A�T$0H�;Hc�H�sL�������m�������I���fDH�t$�7����a���|�L��D��������AUATUSH��H��dH�%(H�D$1���������H�����H�hH����L�d$H����H�I��H��tDH�xH�rH9�~7H� uNH��H�H�H��L���)��HcT$IU��H�|�$���f�H��H�L$dH3%(u_H��[]A\A]�f�H�RH������H���s��E1�1�1�H��H��������H�8H���>������H���1����9��f�SH�����H�����H��E1�1�1�H��[���ff.����SH�������u�%DH���P��H���x�H��u�H��[�DH��[�f���SH���S����tOH���W�H�H��t6H�HH;J},H�rH� tH�rH�QH�P�H�|�����H��[�H��[�'������AVI��AUA��H��ATI��USH�� dH�%(H�D$1����H�������tcH��H�sM��D��H��H������H�xu�mf�H���X��H��H����H��u�H�L$dH3%(L��u:H�� []A\A]A^���+��H�����L��E1�L��D��H�����I������H�N( H�5�H�81��=��ff.�f���ATI��U��H��SH��������u-I�4$H��uH��[]A\��fD@��u�H���H��u�H���~��H��L��[��H��]A\�J��f.���AUATUS��H�����������Hc�H��I��L�l�������u!��u�H�uH��L��[]A\A]�V��fDL�������u�륐��AWAVAUATUSH����~jI��H�.L�n��uR�I��I�@����A����M��I�M���-u:H����H��H��[]A\A]A^A_�fD���>���@��M���L����I��H�H�@I9��H����L)�H��L9�LN�L������(��H��H���M��I�EH�pH� tH�pL�H�{H� tH�{L�������G����L�����I������H�����I�����H��1�H�=9[]A\A]A^A_������I�}H��L��[L��]H��A\A]A^A_��H��% H��H�5.H�81����L��H�=J1������H���V�����H�^�c������USH��H��H��% H��u H�-��H���c��H�|% H��t�1�1�H��H�����H��tH��[]��F��fD��USH��H��H�D% H��u H�-V�H�����H�$% H��t�1�1�H��H���8��H��tH��[]�����fD��AVAUE1�ATI��U��SH��������H��$ A��H��u#L�5�
�L�����H��$ H��t�E��L���H��H�����H��t	[]A\A]A^��h�����ATI��USH��H��dH�%(H�D$1��)�H��H�H��t
H���H��t[��tf��tQH���)���D$H�}t�H�|$�_��H��L���4�H�L$dH3%(H��uGH��[]A\��H������fDH���H��u�H��t�1��H������H�����������SH��0H�t$dH�%(H�D$(1���H��H�H��tAH�����H�|$H��t*@��uVH��u?H�|$���H�t$H������H�T$(dH3%(�urH��0[�D@��u�H���H��
u�H�L$ ��&H�D$ ����H�Ǩt*�����D$H�;H�T$H�s����f��k����������ff.�@��AT�US���H��! H�=�H�0�x���H�=^H���$��H��H�5RH���"��H��! H��H�0�@��H�5i��H���A��H���������R��H��H�5H������H�߹����H����H�5���H�߹����H�V��H�5����H�߹����H����H�5����H�߹H� ��H�5����H�߹����H����H�5��y��1�H��H����H�5��a��H�߹H���H�5��F��1�H��H����H�5|�.��H�߹H�?��H�5h���1�H��H����H�5X���1�H��H���H�5H����1�H��H�g�H�56����1�H��H��H�5)���1�H��H����H�5���1�H��H�O��H�5
���H��1�H���H�5�k��1�H��H���H�5��S��1�H��H���H�5��;��H�߹����H����H�5�� ��1�H��H����H�5����1�H��H�L��H�5�����1�H��H�4��H�5�����H�߹H���H�5����1�H��H����H�5n���H�߹����H�f��H�5Z���1�H��H�~��H�5-�r��H�߹H�C��H�5,�W��1�H��H����H�5�?��H�߹����H����H�5�$��H�߹����H�����H�5��	��1�H��H�-���H�5�����1�H��H���H�5�����1�H��H�m�H�5����1�H��H�E��H�5����H�߹H���H�5����H�߹H����H�5��s��1�H��H�G��H�5v�[��H�߹����H���H�5B�@��H�߹����H���H�5H�%��H�߹����H��H�5{�
��H�߹����H�k���H�5����H�߹����H���H�5P����H�߹H�E���H�5����1�H��H�m��H�5����1�H��H�U��H�5����1�H��H���H�5��q��1�H��H���H�5��Y��1�H��H����H�5��A��1�H��H����H�5�)��H�߹H�:��H�5b���1�H��H����H�5S���1�H��H����H�5M����H�߹����H����H�5D����1�H��H���H�59���L�%D H�5:I�<$����1�H����H�52H��H���y��1�H��H�
���H�5�a��H�����H�R���H�5�F��H�����H�7��H�5��+��H�����H���H�5���������H��H���H�5����H��H�����I�<$H�5��:��H�C �H�5�H��H�����H�= H�����H�5����H� H�����H�5����H�� H�����H�5|�k��H�� H��H�5f�P�������H��H�A�H�5T�5��H��H���:��H�=L�.��H�����[]H� A\���H��H���UTF-16BEUTF-32LEUTF-16LEUTF-32BEuninitialized streamclosed streaminvalid whencer:to_strioStringIOnot opened for writingnot modifiable stringstring size too bignot opened for readingnegative lengthnegative length %ld given
chompgets3.1.2VERSIONMAX_LENGTHnewinitializeinitialize_copyreopenstring=linenolineno=binmodecloseclose_readclose_writeclosed?closed_read?closed_write?eofeof?fcntlflushfsyncpospos=rewindseeksync=telleacheach_lineeach_byteeach_chareach_codepointungetcungetbytereadlinespreadputcisattytty?pidfilenosizetruncateexternal_encodinginternal_encodingset_encodingset_encoding_by_bomgeneric_readablereadcharreadbytereadlinesysreadreadpartialread_nonblockgeneric_writable<<printprintfputssyswritewrite_nonblockexception%li::new() does not take block; use %li::open() insteadclosing non-duplex IO for writingclosing non-duplex IO for readingencoding mismatch: %s IO with %s RSinvalid limit: 0 for readlinesinvalid limit: 0 for each_linenegative string size (or size too big): %lipread: Invalid offset argument: %li;dKȶ��������X���h���x������(��<(��P����h������X��D���p�������8���X���x������������4��P8��lh������������������H�����T����H���������$8��@���t�����������H��������8�������X������	��,	���|	���	H���	����	(��
x��8
X��l
H���
���
(�D��������x�$�h8��h������
�D
x�|
���
��4�`x��������$zRx�$@����FJw�?:*3$"D����\����
p����
<�����xF�B�E �D(�C0�W
(A BBBA��������8�����B�B�A �A(�G0U
(D ABBE@($���B�B�B �D(�C0�G��
0A(A BBBK8l����F�L�G �D(�D0Z
(J DBBK4����]F�D�D �k
ABDNHB(���TF�D�C �\
CEE@�� L��:D]
A<p��HNTx��HKl���E�L����HN����'H^����HN����E�L����0E�j���0E�j$���0E�j@���E�U\���HLt���/E�Z
IF���=HR
FU8�(��JF�B�D �D(�I0�
(F ABBG0�<��FE�A�G [
DACPDA $X��RHj
FD
LI0H���VE�A�G h
DAFPDA@|���bF�B�B �D(�D0�Ip�
0A(A BBBC����EAD0�����E�D�D0f
AAKQAA\��E�W,,`���F�O�A �w
ABH\��9Ha
GD| ��9Ha
GD�@��6A�\
A�d��AAKH�h���B�B�B �B(�A0�A8�Dpw
8A0A(B BBBAL ��~J�E�I �C(�G0q
(F ABBBD(D� A�B�B�p<��6A�\
A�`��mH}
KY����?Hh
HL�����F�B�A �A(�D0g
(D ABBB]
(I ABBED��9E�[
A4h��9E�[
A(P���NE�A�G `
DAF,|����F�A�A �a
ABD$���Fa�A�G WDA0�8���F�D�A �I0c
 AABE8����F�B�A �A(�F0R
(D ABBELD���6B�B�E �E(�A0�A8�G��
8A0A(B BBBCH�����B�B�E �B(�D0�D8�Dp�
8A0A(B BBBA8�����F�E�G �A(�D`h
(A ABBK8	p���F�E�G �A(�DP|
(A ABBAHX	���@B�E�B �B(�D0�D8�GP�
8F0A(B BBBG�	���{D0d
H@�	L���F�B�B �A(�A0�D`�
0A(A BBBK8
���F�B�A �A(�G@�
(A ABBC@
���$A�^\
���>E�m
FD|
���iE�W
DD@�
��F�E�H �D(�A0�DPt
0A(A BBBH4�
��fF�D�F �Z
ABKaFB8��oF�B�A �A(�F0|
(D ABBKxT(��F�B�B �B(�A0�A8�D@R
8D0A(B BBBG�
8J0A(B BBBEM
8D0D(E BBBE(�|�ZE�A�G E
AAA(���ZE�A�G E
AAA<(��xF�B�E �D(�C0�W
(A BBBA0h$��F�D�A �G0�
 AABI ���E�D@�
AF(����F�F�A �nAIGNU��,�,�y �e�-�--!����P 
e�y �y ���o`
�
h| ��X(	���o���o���o�o6���oHz � � � � � � � � !! !0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&GA$3a1P %eGA$3p1113-eGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY-
-GA+GLIBCXX_ASSERTIONSstringio.so-3.4.4-3.el8.x86_64.debug���#�7zXZ�ִF!t/����]?�E�h=��ڊ�2N����h�(>j��'����ӧ��nl
1�H4LTp&�[L7�\'3���&�R���)��砠��h<��>]�x�<��8��V��>׍6�>��R�t=U��ڙ�(�\Y7��Z�,C� �H#f�G���mEy�n�3+9n��u&�߽����������O��`61z��-3���O߻�a�	�t�ZH
B���P�X4�"�.�L�s�)�m���ѷ%��W^���U���ȉ�����P��Ff��9��
�٭?F������'�C@D��ٰ�o��l�^�KZa߃$�%ז}pI?3���hid�?��P�~������.�#���pO�O�L����wW��(�o��ry`�Q��Bѱp���i6h�јD�ezi��W��v1Q�$;iV�P�i�ꇝ�b�M��H|ϵZ����:��s��M��d�:�k5�kBֹn�g�~��/��I��U�U~ĄH%qI��K�{Ԟ���1hl��%�f\����~;G�Md�8d�cvX]b�I>�f�|a^��Y[����%BP��('#N�p��S������*}��JPM��������\pim�V��ZA3�wM�"$�ǯД
/��m^
$����j��R-�
��\q�\$�8�w^ş������x}+um��E��v�� �y�c�k
��he��C" Q��G9����|X[8�^�:ɋx�@���J�R.�x�z:�1���Vyp�E�)�m�
���ϳ��e�:�^�2���E��1�t'�0>+�P=>d=���%+Va:S;	T%�}�����{�W;v����L(Kͅ:�Y��x�/'���+g-c��c� 8�����4�mM��P���!%-̡4U�Ph�����%�`|����kF�ꫳ����ڒ��0)m��Y�B.�S�	�I���n�?�_�;���A�����,X�”�5�4�2�A��S k)�m���l��J�Ҧ�݃_���B���5��zM�V:�*��>��Z�zu/��)���-���h��
4�;t�{}>���������d�`蛇⬷@�w@�d�Y�k]?�'WqX��f��T�{j�#�$�@�AL	�y �ό�2?5��۠�7Z4-Y�z��=}(�C��~V>�e`3�AF����3l��y9�\@��B��Ć�77H�\5�w�3X롛f)X�/'I^�H�
���ԜV��r�Y�5@�%#m*h��.iS��T�'�
۶'o*}A^��d�(�R���M'{�!�>jM�T3���u<l�aD��m�hږ�����oL[;��(���|d��W/5ۉlRtܹ��#�L�ȏKi�Ú��Q+De�������	#TF����S'�ih`}���{��j�@{z�u��\7�)M��S*��	�:�ݍG$���|������1�+��K
V�!�[&SGf<�`��`kv�\�����(:��!-/l��1���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���
0

8���o66�E���o@TXX(^B���hP P cp p �n`&`&�w@,@,�8}ee
�2(e(e���i�id�ll��yy ��y �y��y �y��y �yh �Hz Hz �h| h|��� �8�8�`�H8�,d���"PK*J[3@����lib64/ruby/strscan.sonuȯ��ELF>P"@z@8	@�[�[ �j�j �j 8� (k(k (k   888$$�[�[�[  S�td�[�[�[  P�td�N�N�NDDQ�tdR�td�j�j �j 8PGNU~(EL�y��,j��P���Q�@`QTV`TdBE���|�qXv�f� h����`=I���R2�2|#AzUB���s���t �"����?��`h�"��"���Y$�[�O�m��, J��F"�+�k��	��B�p !0p p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddataonig_region_memsizeonig_region_freeruby_xfreerb_gc_markrb_str_newrb_enc_copyrb_ary_new_caparb_ary_pushrb_eArgErrorrb_raiseonig_region_clearonig_region_setrb_warningrb_enc_getrb_enc_mbclenrb_string_valuerb_enc_checkrb_enc_get_indexrb_num2intrb_fix2intrb_int2bigrb_eRangeErrorrb_reg_region_copy__stack_chk_failrb_memerrorrb_data_typed_object_zalloconig_region_initonig_searchrb_hash_newonig_foreach_namerb_num2longonig_name_to_backref_numberrb_sym2strrb_eIndexErrorrb_enc_raiserb_out_of_intrb_hash_asetrb_enc_strlenrb_str_appendrb_error_arityrb_check_hash_typerb_intern2rb_get_kwargsrb_cstr2inumrb_free_tmp_bufferrb_alloc_tmp_buffer_with_countmemcpyrb_must_asciicompatrb_str_catrb_str_dumprb_str_new_staticrb_obj_classrb_sprintfmemcmprb_reg_onig_matchrb_memsearchInit_strscanrb_ext_ractor_saferb_internrb_usascii_encindexrb_utf8_encindexrb_ascii8bit_encindexrb_cObjectrb_define_classrb_eStandardErrorrb_define_class_underrb_const_definedrb_obj_freezerb_const_setrb_define_alloc_funcrb_aliasrb_requirerb_define_methodrb_define_private_methodrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64���&ui	1ii
=�j #�j �"�j �j �j �L�j �#�j �#�j `#�o �o �o #�o &�o 9�o E�o F�o H�o I`m hm pm xm �m �m �m 	�m 
�m �m �m 
�m �m �m �m �m �m �m �m �m n n n n  n (n 0n 8n @n Hn  Pn !Xn "`n $hn %pn 'xn (�n )�n *�n +�n ,�n -�n .�n /�n 0�n 1�n 2�n 3�n 4�n 5�n 6�n 7�n 8o :o ;o <o = o >(o ?0o @8o A@o BHo CPo DXo G`o Iho Jpo Kxo L�o M�o N�o O�o P��H��H��V H��t��H����5
T �%T ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�������%�O D���%}O D���%uO D���%mO D���%eO D���%]O D���%UO D���%MO D���%EO D���%=O D���%5O D���%-O D���%%O D���%O D���%O D���%
O D���%O D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%�N D���%}N D���%uN D���%mN D���%eN D���%]N D���%UN D���%MN D���%EN D���%=N D���%5N D���%-N D���%%N D���%N D���%N D���%
N D���%N D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%�M D���%}M D���%uM D���%mM D���%eM D���%]M D���%UM D���%MM D�+���L�����H�=�M H��M H9�tH�&M H��t	�����H�=iM H�5bM H)�H��H��H��?H�H�tH�
M H��t��fD�����=%M u+UH�=�L H��tH�=�G �����d�����L ]������w������H������H��H�5�G �����x@H�H��H�Ѓ��f.���H��H�� ���H��H��0�fD��S1�H��H� �}���H��[�T���@��SH��H�����H�{8[�u���DU�SH��H�OH�AH9�5H9�HO�H�AH)�H� u1H��H�<0H�����H�sH��H���3���H��H��[]�f�H�A��f.�U�SH��L�GI�HH9�5H)�I�@H9�HO�I� u1H��H�<0H���B���H�sH��H������H��H��[]�f�I�@��f.���AUH�53F ATUSH�����H�x��H��A��twHcx$H�����I�ă�~c�C��L�,�f�H�E(�H�H���t&H�E0�}@H�H�EuH�H�H��H�����H��L��H������L9�u�H��L��[]A\A]�H�yJ H�5%H�81����UH�o SH��H��H�������{@H�KtH�SH��H��1�[]�}���D+KH��H��1�[1�]�c�����SH�5E ���H�HH��t|H��H�H�SH��H�H;Q}^H��H�SH��H��H�SH��c���H�C0�{@H�uH�sH�C(H��[H�H0����H�C(H��[H�0�x�����[�H�zI H�5$H�81�������S1�H��H�=$���H��[�1������SH�5DD ���H�xH����H��H� �H�GH9C�����H�KH�yH� tH�yH�qH��H�H{�?���H�SH�KH��H�H�RH�KH)�H9�HO�H�H�H�S�P���H�C0�{@H�uH�sH�C(H��[H�H0�|���@H�C(H��[H�0�h�����[�H�jH H�5�"H�81�������SH��H�t$H�5KC ����H�|$H���Y���H�D$H�CH�#�H�CH��[�ff.�ATUH��SH�H��H����A��H��tCH�UH������H��t D9�u[]A\�fDH��H��[]A\�Q����H���H�����fD�;���A���fD��UH��H�5�B SH������H�x��H���H��u1���H�SH�H�RH��x1H9�WH�CH��H�D[]���k���H�SH�H�RH��y�H�H��x#H9�H�@H�CH�y�H��[]���H��F H�5##H�81��	���H��F H�5c!H�81������UH��SH��(H�t$H�5�A dH�%(H�D$1��"���H�|$H�5�A H������H9�tBH�H�p H�{ H�H�PH�SH�PH�SH�PH�S���������H�D$H�D$H�D$H�L$dH3%(H��uH��([]�������UH�A �HSH������H��H�X �@uH�X H�#�H�{ �G�H�CH��H�C8H��[]�ff.�f���H��H�qI���Q@H�IH�FH� t,H�vH�H��HD�H��I��H��j�[���H���fDH��H�H��HD���ff.�PXH�5�H��H�4E H�81��R�f���UH�5$@ H��SH��(dH�%(H�D$1���H�xtJH��H�,$�D���H�K8H�D$H��tH�yH��H�5��b���H�D$H�T$dH3%(uH��([]��a����l�ff.����H��H�5�? ��H�PH��tH�HH�R�H9�}H)�H�DH�������ff.���S1�H��H�=/�j�H��[�@��H��H�5!? ��H�xtH�¸�t	HcB$H�DH������D��H��H�5�> �\�H�xtH����HE�H����l���ff.����H��H�5�> ��H�PH��tH�J�H9H�HL�H����"���f���H��H�5a> ���H�PH��tH�J�H9H�HL�H������f���S1�H��H�=O�J�H��[�@��H��H�5> �|�H�PH��tPH�JH� u=H�pH�BH�H�<1H�¸H9�w�H��t�|1�
�HE�H���@H�J��M���ff.�f���SH�5�= H����H�xtH���t,H�HH��H�H�HH��[�H�JB H�5�H�81��a�H�=zB H�5�1��L�ff.����H��H�5= ��H�PH��t8H�H�H;J}H�BH� u�H�DH����H�B���u���D��H��H�5�< �,�H�xtH�@H��H�D��B���f���H��H�5�< ��H�@H��tH����������SH�5T< H�����H�PH��tH�RH� �H�PH��[�����ff.����S1�H��H�=��:�H��[�@��SH�5�; H���l�H�xtH�@H� �H��[�����ff.�@��H��H�5�; �,�H�PH��tL�t=H�H0�x@H�RH�1H�HtH��H���\�@H�H��H���I�f��H����������H��H�5A; ��H�xtG�t8H�P(�x@H�HH�t1�H��H�����H�1�H��H�������H������f���H��H�5�: �L�H�xtO�t@H�P0H�p(�x@H�HH�H�6tH��H���|�@H�H�H��H���f�fD�H����!������UH�5d: SH�����H��H�@H��tDH�sH�PH9�}H��H��[]��f�1�H�=���H�sH��H���s�H��H��[]����@��AUATUSH��H�5�9 H���c�H�x�|H��t#H��u3H�����HcU$H����H���H���[]A\A]�D��t;H��H��H����H���H��$�H�����u���H�������H�E8����t�L�kL�cH� ��H����H�M K�,L��H��H�E8H�x�G�����HcU$H�H9��C���H�U(H�4�H����1���H�U0�}@H��H�EtDH��H��[]A\A]��f.���u+H����H���R���L�c�e����H�H��H�ڃ�f.�H�������H��H����H�M= H�5�H�81��d�Ic�I9����H�!= M��D��H��H��H�01��W����AUH)�A��ATUL��SH��H����I��E��~IA�E�L�l�HcH�}H��H�t����L9�u�H�}L��H����H��1�[]A\A]�f.����f���AULc�H��ATI��USH��H�5s7 H�����H�xtP��t8L����H��M��~(N�,�DH�3L��H���1���H��H����L9�u�H��H��[]A\A]����ff.���USH��H�5�6 H���g�H�PH��tnH���tUH�H�uH�RH9�}H)�H��H9�HO�H��[]��D1�H�=~�j�H�uH��H�����H��H��[]ÐH����H�UH�������f.���U1�H��SH��H�=CH���r�H��H��H��[]�1������H��H�5!6 ��H�xtN�t0H�P0H�@(H�:H+8H�@H�x#H�D?H���f��H���fDH�����r���f���SH�5�5 �/�H�pH��t[H�H��H�H�H��H�H;N}.H�FH� u,�H��H�OH��H�OH�H�\���H��[�fDH�F����D��SH�545 ��H�xH��t^H����H�KH�yH� u,H�sH��H����H�@H�xH�D[��H�y��f.�H��[���r�f���USH��H��H�t$H�5�4 �"�H�xt%H��H�|$��H�}H�t$�p�H��H��[]��!���AUATI��UH��H�5Z4 S��H��H��(dH�%(H�D$1�����~I��H�EH�$��t���������-�D����H��H��u=A�E@H����H�$I�EL��H�L$dH3%(��H��([]A\A]�fDH��8 H��H��uD�H����H��8 H��t�1�H�t$L�D$H��H�D$�)�H�T$1�H��$t
H�������A�E@�Y���H�}�=�����ff.�UH��AWI��AVA��AUATI��H�qSH��H��dH�%(H�E�1�H�����H�AH��H�E�H��H%�H)�H���H��H9�tH��H��$�H9�u����H�L$L�m�H���I�H�pH� tH�pH��ue�H��D���F�L��I����I$L��H�M�dH3%(u[H�e�[A\A]A^A_]�fDH�QL�m�H��L���l�H����H��I4$H���!�H���@H)�H�L��O�����D��H��H�5�1 �\�H�xH���9H�H� �H��H����;�6 t-;�6 t%;�6 tH�D$���H�D$H�xH��L�G�� ��H�PH�H)�I�H����A���+������H�qH9�|xH9���A�4D��A��0A��	v��߃�A@��wpH�H�P�A�4���0��	va��߃�A��vVH�pH�x�H�����L�G�\����A�4@��0u�A�|xu�H���l���@�H���fDH��H9���H��5 H�5H�81���ff.�f�H�WH9�~SH�H)�H��H�w�� H��~=H��uxH�<��
��H�5~H��H���#�H��[��f.�H��tH�wH�<H�����H��H��[���1�H�=���f.�H�w�f.���AVH�5�/ AUATUH��S�%�H�xH���OH��H�@H;G�H����H����1�1���H�S1�I��H�CH�pH� tH�pH�L���A�L�����H�sH�{I�����H��I��H�CH�[L�`��M��M��H��L��[H��]H�=�A\1�A]A^��D1��q���H��I��H�CH�[L�`�:�M��H��[L��]H��A\H�=+A]1�A^�h���H�=��?��I��H�CH�H�����f.�H�����[H�=�]H��A\1�A]A^���H����[H�=�]H��A\1�A]A^������H�qI���Q@H�IH�FH� t H�vH�H��HD�H��E1����DH��H�H��HD�H��E1����D��H��H�5�- �,�H�xH���
H�H� �H��H����;�2 t-;�2 t%;�2 tH�D$��H�D$H�xH��L�G�� ��H�pH�OH)�I�H����A�8�WՁ�����M�A�9��0��	waH�H�pH9�~iA�1��0��	v�VfDA�4��0��	wCH��H9�u�H�pH�x�
H�����@L�G�l�����H���fDH����H��1 H�5H�81����ff.��AWAVAUA��ATA��UD��SH��H�t$H�5M, ���H�pH����H��H� �H�@H9F�EH�|$H����H�|$�-�H�{H�t$H�GH+CH;F�
���R���H�D$H�hH�pH� tH�pH�CH�xH� tH�xH{H���z�����L�s L���V�1�1�1�L�����H�K0�����{@�iH�CH�S(H�H�H�)H�sH�H�sE��tH�H�CH�H)�H�DE���ZH���}�H��[]A\A]A^A_�fD@�������H���H�������H����H�{8H��H�'�L�C HD��J��H�����H�K0H�s�S@H�H�sE����H����[���H�H�C��@�#��H�sH�{I��H�NH�VH)�H� tH�VL�L$H�I�qI�yI� ������H��H���teH�D$L�s L��L�x����1�1�1�L���b�����J���L��{@H�K0�����H�)H�sH�H�sE��t5H��E���D����H��[]A\A]A^A_�@���w���H��u����I�y�T���H��. H�5!	H�81����ff.�@��H��������H���������E1������f.���E1��1�����ff.�f���E1�1�1������E1�1ɺ���ff.�f���E1����z���f.���H������A���H������������G������A��1��*���f.���A�1�1��
���ff.�f���A�1ɺ���f.���A����������U�SH�����H�=�	����H�=�	H�������\���.- �A���- ���H��, H�=�	�- H�3�*��H��, H�5k	H��H��, H����H�;H��H��, ��������H�=Q	�/��H��H���d��H�=@	�H��H�=�, H��H������H�=%	���H��H���*��H�=	���H�=o, H��H������H�=], H�5�����H�=J, �����H���H�5��
��H�=+, �H��H�5�����H�=, 1�H����H�5����H�=�+ 1�H���H�5��c��H�=�+ 1�H�#�H�5��G��H�=�+ 1�H�G�H�5}�+��H�=�+ 1�H���H�5g���H�=�+ �H���H�5O����H�=a+ �H�M�H�58����H�=B+ �H�.�H�5 ���H�=#+ 1�H��H�5���H�=+ �H��H�5��w��H�=�* 1�H�W�H�5��[��H�=�* 1�H���H�5��?��H�=�* �H���H�5�� ��H�=�* �H���H�5@���H�=r* �H�����H�5q����H�=S* �H�o���H�5W����H�=4* �H�0���H�5?���H�=* �H���H�5&���H�=�) �H�����H�5�f��H�=�) �H�c���H�5��G��H�=�) �H�4���H�5��(��H�=�) �H�����H�5��	��H�=z) �H�����H�5�����H�=[) 1�H����H�5�����H�=?) 1�H����H�5����H�=#) 1�H�b��H�5����H�=) 1�H���H�5q�z��H�=�( �H���H�5\�[��H�=�( 1�H�[�H�5E�?��H�=�( �H���H�50� ��H�=�( 1�H�����H�5�T��H�=u( 1�H�4�H�5�8��H�=Y( 1�H�x�H�5	����H�==( 1�H���H�5����H�=����H�=�H�����H�=( H��H���S��H�=�' 1�H�3�H�5��g��H�=�' 1�H�W�H�5��K��H�=�' 1�H���H�5��/��H�=�' 1�H�_�H�5����H�=�' 1�H�S�H�5n���H�=h' 1�H���H�5Z����H�=L' �H���H�5H���H�=-' 1�H���H�5/���H�=' 1�H��H�5���H�=�& 1�H�t�H�5��h��H�=�& 1�H�H��H�5.�L��H�=�& �����H���H�5��-��H�=�& 1�H���H�5����H�=�& 1�H���H�5����H�=f& 1�H���H�5�����H�=J& 1�H�9�H�5����H�=.& 1�H�-��H�5o���H�=& 1�H���H�5a���H��H�=`[]�#��H��% H�;H���>�������H��H���uninitialized StringScanner objectStringScanner#getbyte is obsolete; use #get_byte insteadStringScanner#restsize is obsolete; use #rest_size insteadStringScanner#empty? is obsolete; use #eos? insteadunscan failed: previous match record not existStringScanner#clear is obsolete; use #terminate insteadundefined group name reference: %.*sStringScanner#peep is obsolete; use #peek insteadindex out of rangefixed_anchor...#<%li (uninitialized)>#<%li fin>#<%li %ld/%ld @ %li>#<%li %ld/%ld %li @ %li>ScanErrorbytesliceStringScanner3.1.2Version$Id$Idinitializeinitialize_copymust_C_versionresetterminateclearstringstring=concat<<pos=charpospointerpointer=skipmatch?checkscan_fullscan_untilskip_untilexist?check_untilsearch_fullgetchget_bytegetbytescan_bytepeekpeek_bytepeepscan_base10_integerscan_base16_integerunscanbeginning_of_line?bol?eos?empty?rest?matched?matchedmatched_size[]pre_matchpost_matchvalues_atrestrest_sizerestsizeinspectfixed_anchor?named_capturesstrscan/strscan;DG���`(������0����x�����������������������H���t�������������,���X(��x����h�����Dx��l�����������������H��(���D���`��|(����������x���������$�@8�\x�x���X�����8�((�����8�$	��\	��	x��	���	x��	��
�X
H��
���
x��
�Dx�X��|������� 8�4X�H��\��p�����zRx�$0���FJw�?:*3$"D����\���p���&HW����HM����E�R����E�Q(����fA�F�D F
DAJ(8��fA�F�D F
DAJ80|���F�I�A �A(�D0�
(D ABBA0l��MA�E�J W
FAJGFC(�,���E�a
RH
PF
A����E�U(�����E��
OH
PF
Ax��BE�D wA44���jB�A�D �o
ABGG
ABF4l����E�K�D |
FAIx
AAE(�x���E�D�D@�
AAAzRx�@�� p��$���SE�M�D zAA(��bHpH IGHT��AAK(dX���E�K�D@c
AAA����BHt
A����E�U����;Hm
A���4Hf
A<��>Hp
A`��>Hp
A8���E�UT���sH[
Ep���dE�q
A�@��[H
I����.H[
F����(HZ
A����4E�i
A����E�U���1E�f
A$4���oHw
IJ
NI
A$\@��gHr
FL
LI
A$����oHw
IM
KI
A4����lE�H�D c
DAGa
DAAL����F�B�A �A(�N0
(F ABBF�
(D ABBOzRx�0����$
��8ht��wF�H�A �D(�G0C
(C ABBK8�����F�H�D �A(�N0R
(D ABBA4����E�A�N x
AAJa
DAB$t��/E�F�N IGA$@|��nH~
JI
GD
Eh���{E�d
G �$��~E�S
HT
E(����OE�A�G0w
DAA8����5F�B�D �K(�IP�
(A ABBG,���;A�C
B�E�G��H��
G D���sH 
Ey
G$h��J�G
�O\�d�l����F�I�B �A(�D0��
(D IDBJe
(D EIDMy
(H EDBLI(H EDB	��[ 	�DH �
IY
Gd8	D��B�B�B �E(�D0�D8�DP0
8A0A(B BBBGA
8A0A(B BBBE�	��&�	���	���	���	��
�)
$�,
0�@
<�T
H�(h
T��E�F�D p
HAHGNU�#�"�j �L�#�#`#���G
XJ�j �j ���o`�
�
]Hm �X��	���o���o����o�o����o(k P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�����GA$3a1eJGA$3p1113P"WJGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY #WJGA+GLIBCXX_ASSERTIONSstrscan.so-3.4.4-3.el8.x86_64.debugV>�l�7zXZ�ִF!t/���O]?�E�h=��ڊ�2N�af;Fem�y}h��L\&����9_�K2Xnh�oh@��։���K?��}�L�\�]T2�PS�L�l��y^)����̨�`J���X��=j~3��#�m
Ì����!���7��;��5p`�K��U��%��$�ܘ����ľު��Mk��BAUI�j�����)Uu�\��<�㔔n!�L�HF��,_>�j��;��z"Zcqq�5��[
AÎi�S�M�\
f�*_ud�c�ܬ���v�Ύh7iW@8�������00A���cO�gl�"�{S�;A<��H��u�e���\0���d�q,�?Z{d4�/��l�ݺHE0(��
~k	c[�b��݃�4g��s�ј���vE�����>�h�-I�u�&*��(����aw�ں�^7�LY�N�C��M�;G%�˱�e��PL�]ߏj_�ZV<zk0�������h���I'��p����5:�3���V�O��K�\"Ќ
�x��7���#܊��V�s��Di2SZ��[(�9 ��X�$�jU��K�K?c�;͎y$��6|c�+Z"��B�ʿ��uI����@����h*�·��a��������`0m/��#��2$HZ��`:*[#�t%P�'�鬃F�OFP���h�e�$��Y��?�(���硉>�r�ղp
�A[���QC��-4�
�26Y�A�ҕ*��Ĕ��:��h�ө�d�HZ_�6|4�P�%9��%@EO����kf�0,�A/Ĭ9�nS�v��z��p�'^Xx�UW��a��{zP����4�#8s�m�s�@�v���W[,F��U�h�W��oH`����1�b�77��>�S�\��W�W3�l}��fpQ�@m�e���r�k����B}*����O��|��^7�n��4�
)$��C`^Z����D�w�ֵ�J5�h�r���y��`Yq&��I1��NN�m�h�?�Doo�sk��4�h@3���R~2�S]1E�v�l>F�L���]8�b+��S��\�D�*B�j�ɂ�p�S�����cn��M�E
_�=dJ�
\L�=[�h;��ʧ��n�A�>�4�Lߘ������\Ơ����5��3Q��7t��Sz(�QU��l%���^^�:BQ7�_�lxG�}����	:�Qh�������>��%�>f+��J�L�U�P�G%0���
T�+��?-qCc�O��n@��������%�c��n�Ϛ1��|LBO������P���Ѳ�C�H�Y�D%�m>)U7���8@�L����%�9Ddc��虌7��5++�+Q����o���>�w��xCD�;�$!{(�/=/]Z'Wi�0�j"����ǎn�@�`&���M6�����ɞ\�6`��=�}`�L@���z3e0�J�.�Y� 2�{)�/���$���t���Q�:(�mm�k<��~,,-s���i�†t40rS��6��Bg����Zt!j��}���z��x�AB���1�h�!G���:e�	��T�<��Ε��DJ�B�=ؤDC���.��u��k���P���y��t��9�jZ���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0�
�
]8���o���E���o��@T���^BXX�hc@@�n���wP"P"(}XJXJ
�2hJhJ>��N�ND��P�P�
��[�[ ��j �j��j �j��j �jh �(k (k �Hm Hm��p �o0�0p`�oH0r(Xr��x"PK*J[Yx�����lib64/ruby/fiddle.sonuȯ��ELF>PB@H�@8	@P�P� ���� �� 
� h�h� h� @@888$$0�0�0�  S�td0�0�0�  P�td8�8�8���Q�tdR�td���� �� 

GNU�n������j�`�w����� ��$
@(ԸDU
!�2@������������������oE��O� �>=~@��v�M�w��6���ĸ�qX�d�>Ĭ
����9��|���}9ҝ���BE��@��
��Z0�2��<�ݯF��p��`�e�Gc[29u.�Ƴ�eL_����V�4Vᥧ� }C+��+�q��c��� R�)��A	��:
zBl�����M�ic
������"��oj2	#+j
A�V
 �t
�	a"[�	
��L
�
����	nM�	�n"�U�"���b�	�4���}��"�)
���	�	]I�E
�v�Y>��	E��, 		���F"��4!\�AU1�&� [�T	x� P� ~0w��^	3`� ����q�XG�
� {[�� HH�vW�
�� ���"t � H`O��
� ��_m_h� t	�� ����p� �0~U� ^?j�X	,X� 2	� 3P~JH� `�W����`^ 	�� __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeffi_raw_sizemunmapruby_xfreeclosure_data_typerb_check_typeddatarb_int2bigrb_eArgErrorrb_raiserb_rescue__stack_chk_failrb_exc_raiserb_data_typed_object_zallocmmaprb_unexpected_typeruby_xcallocrb_ary_new_caparb_fiddle_type_ensurerb_ary_pushrb_fix2intrb_fiddle_int_to_ffi_typerb_num2intrb_obj_freeze_inlinerb_iv_setffi_prep_cifffi_prep_closuremprotectrb_error_arityrb_eRuntimeErrorrb_sys_failrb_out_of_intrb_iv_getrb_ary_hidden_newrb_intern2mFiddlerb_const_getrb_funcallvrb_str_new_cstrrb_float_newrb_uint2bigrb_ull2inumrb_ll2inumrb_string_value_cstrrb_num2dblrb_num2longrb_num2uintrb_num2ulongrb_num2ullrb_num2llruby_thread_has_gvl_prb_thread_call_with_gvlInit_fiddle_closurerb_cObjectrb_define_class_undercFiddleClosurerb_define_alloc_funcrb_define_methodrb_check_string_typerb_to_intrb_sym2idrb_to_symbolffi_type_uint64ffi_type_pointerffi_type_uint8ffi_type_sint32ffi_type_floatffi_type_doubleffi_type_voidffi_type_sint16ffi_type_sint64ffi_type_uint16ffi_type_sint8ffi_type_uint32rb_fiddle_value_to_genericrb_Integerrb_fiddle_generic_to_valuerb_fiddle_freerb_fiddle_ptr2valueruby_xreallocInit_fiddlerb_define_modulerb_eStandardErrorrb_eFiddleErrorrb_const_definedrb_eFiddleDLErrorrb_define_module_underrb_define_constrb_str_new_staticInit_fiddle_functionInit_fiddle_handleInit_fiddle_pointerInit_fiddle_pinnedInit_fiddle_memory_viewrb_const_removerb_define_module_functionffi_callfunction_data_typerb_keyword_given_prb_get_kwargsrb_str_to_interned_strrb_eTypeErrorrb_hash_duprb_cFalseClassrb_ary_duprb_ary_newrb_cFloatrb_errno_ptrrb_free_tmp_bufferrb_thread_call_without_gvlrb_alloc_tmp_bufferffi_prep_cif_varrb_cIntegerrb_cTrueClassrb_cSymbolrb_ary_new_from_valuesrb_fiddle_new_functioncFiddleFunctionrb_class_new_instancedlclosedlerrordlsymrb_fiddle_ptr_new_wrapdlopenrb_block_given_prb_yieldrb_ensurerb_cHandledlinforb_define_singleton_methodrb_gc_markrb_ascii8bit_encodingrb_enc_str_new_staticrb_ivar_setrb_obj_freezerb_memory_view_getrb_memory_view_releaserb_memory_view_get_item_pointerrb_memory_view_extract_item_membersrb_alloc_tmp_buffer_with_countrb_memory_view_parse_item_formatrb_eIndexErrorruby_malloc_size_overflowrb_cMemoryViewrb_gc_writebarrierrb_eFiddleClearedReferenceErrorrb_cPinnedrb_cPointerrb_memory_view_init_as_byte_arrayrb_string_value_ptrmemcpyrb_str_newrb_obj_classrb_sprintfrb_cIOrb_obj_is_kind_ofrb_io_taint_checkrb_io_check_closedrb_io_stdio_filerb_cStringrb_check_funcallruby_xmallocmemsetrb_internrb_memory_view_registerlibruby.so.3.4libdl.so.2libffi.so.6libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.3.3GLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby34/lib64�
0si	�
ui	�
�
���ui	�
ii
�� 0C�� �B� �  � �0� `C8� @C�� ����  h�� h�� ��� px�� �w@� ۪H� �P� ��X� ���� ���� ��� ��� ��� @� � j�(� P�0�  �8� ���� �� �� ��� 
�� ��� �� �� �� �� �� �� �� �� �� �� #� & � *(� .0� �8� 1@� �H� �P� �X� 7`� 9h� :p� =x� >�� ��� ��� J�� M�� ��� `�� c�� r�� ��� z�� {�� |�� �� ��� ��� ��� �� �� ��� �� �� �� �� 	� � � �� 
 � �(� 0� 8� �@� H� P� X� `� h� p� x� �� ��  �� !�� ��� "�� #�� $�� %�� '�� (�� )�� +�� ,�� -�� /�� 0� 2� 3� �� � � 4(� 50� 68� 8@� ;H� <P� ?X� @`� Ah� Bp� Cx� D�� E�� F�� G�� H�� I�� K�� ��� ��� L�� N�� O�� P�� Q�� R�� S�� T� U� V� W� X � Y(� Z0� [8� \@� ]H� ^P� _X� a`� �h� �p� bx� d�� e�� f�� g�� h�� i�� j�� k�� l�� m�� n�� o�� p�� q�� s�� t�� u� v� w� x� y � }(� ~0� �8� �@� �H� �P� �X� �`� �h� �p� �x� ��� ��� ��� ���H��H��� H��t��H����5ʗ �%˗ ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A�������%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݏ D���%Տ D���%͏ D���%ŏ D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݎ D���%Վ D���%͎ D���%Ŏ D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݍ D���%Ս D���%͍ D���%ō D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%݌ D���%Ռ D���%͌ D���%Ō D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� DH�|$�������H�����H�����H�%�H�=�� H�z� H9�tH�&� H��t	�����H�=Q� H�5J� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=� �i����d����� ]������w������H��H�����H��H��x�fD��SH��H��0���H�{8H��t���H��[�����H��H�5�� �L���H��H�H�����ff.�f���SH�5�� H������H��tH������H�C �[���SH�5T� H�����H��t%H�8H�@H�x
H�D?[�fD[���H��� H��H�5^H�81��������H��(dH�%(H�D$1�H�t$H��H�$H��H�2�|$H�=��2���H�L$dH3%(uH��(��h������UH��SH��H��H�H�x ���H�H��H�@ �q������U�@SH��H�Z� ���H��H�h �@uH�h E1�A������"1���0���H�EH��H��[]����AWAVAUI��ATUSH��8H�G�����H�H�hH�L$ ��tBH�@H�D$����H��tH���uH�UH�Ѓ�H��t#�H���N���fDH�D$��D�� ��H����H�T$H�T$Hc‰T$,H9��^���H�5W� I�}���L�|$�I��A�Hc�����L��I�D$8����I��E����H�D$��H��H�$H�EH�D$�KDH�D$H�<���L��I��H���,���L��A��t3���M�|$8������I�H��I�H9$t"H�E u�H�E �f��+�����f�HcT$,I�D$8L��I�l$H���!���H�|$ �'���I�}H�5y[H��H�$�`���I�}L��H�5f[�M���H�$I�\$M�t$8����H��������W���H�|$�T$@�����$H�D$�����$H�L$M���H�������I�MH��H�lH���4�I�$�H�߾0�������������I�EH��8[]A\A]A^A_�f�H�EH�D$���f�H�|$�$H�D$���H�L$�$�b����H������%������d�����H��� H�5NZH�81���H�=SZ�N���H�o� ��H�5GZH�81����@��AWH�5ZI��AVAUATUSH��XdH�%(H�D$H1�H�GH��H��H�D$��H��H�5�YH�����H�}H�D$�� �)H����Hc�A��H9��}����^���H�D$(H�:� H��u&H��YfD�H�����H�� H��t�H��H�� H�8�e���H�D$E��~1�L�%�Yf�H�EH�E uH�E H�<�L�,�@���x����ƒ����%Ic�L�>��I�G�J�(�8�HE�H�|$(���H��A9��H�l$(H�E �9H�m H�F� H��u"H��Xf��H������H�$� H��t�H�|$H��D��H���t�H�D$0H�D$(H�D$8H�|$H�D$(@���!����ƒ�����H�
YHc�H�>��DI�GJ�(H�8�X�H�|$(H���+����1���fDI�GJ�(����H�|$(H����������DI�Gf�J�(�Z����H�|$(H�����������I�GJ�(H�8H�@H��rH�t?����I�GJ�(H�8H�@H�y���H���z���f�I�GH�|$(J�(HcH�t�V����\����I�GH�|$(J�(H�H�t�5����;���I�GH�|$(J�(H�H�t��������I�GJ�(H�8H�@H���H�D?H�D$@H�a� H��u!@�H�=�V���H�@� H��t�H�|$H�L$@�H����H�|$(H�������f�A������I�GH�|$(J�(�H�t�f��l����I�GH�|$(J�(�H�t�F��L����I�GH�|$(J�(�H�t�'��-���f�I�GJ�(H�8H��������?H9��P����m�H�����DI�GJ�(H�8H��������?H9�� ����
�H������D�����fDH�}�����H������H�|$0I�_@����H�H�;1�H�L$HdH3%(��H��X[]A\A]A^A_�f�H�|$��������{�H���4����;��9���1�I�GH�D$0������H��I�_H�|$0�q�H��{���H�|$0I�_�����d���H�|$0��I�Gf���Z���E���H�|$0I�_@���,����K�H���"���H�|$0@�������I�WH�H�����H�|$0@����H�I�GH�8���H�|$0��I�W��H�����H�|$0I�_@����������H�����H�|$0I�_@����������H��������q���H�� H�5TH�81����s�H���l�����H���M���H�߀ H�5�SH�81��f��!����H��8dH�%(H�D$(1�H�<$H�t$H�T$H�L$����t$H���4���H�D$(dH3%(uH��8��H��H�=���������f���H�e SH�5tSH�H�� H�8�+�H�� H�5M���H��H��R�H�;�����H���H�5;S�7�H�;1�H�+�H�5.S��H�;1�H���H�57\��H�;1�[H���H�5S���f.�@��AWAVAUATUSH��H��@��t_H��u-1���H���LH�ĈH��[]A\A]A^A_���@���H���H����H��H���H���%�>�H�-SH�D$pH�;� H�$H��uf��H����H�� H��t�H�$H�� H�D$H��u(H�-�R�H�����H�� H��t�H�D$H�� H�D$H��u'H�-�Rf��H����H�� H��t�H�D$H�� H�D$H��u/H�-bRf.��H���S�H�T H��t�H�D$H�; H�D$ H��u/H�-�Zf.��H����H� H��t�H�D$ H��~ H�D$(H��u/H�-�Qf.��H�����H��~ H��t�H�D$(H��~ H�D$0H��u/H�-�Qf.��	H����H�|~ H��t�H�D$0H�c~ H�D$8H��u/H�-rQf.��H���S�H�4~ H��t�H�D$8H�~ H�D$@H��u/H�-9Qf.��H����H��} H��t�H�D$@H��} H�D$HH��u/H�-Qf.��H�����H��} H��t�H�D$HH��} H�D$PH��u/H�-�Pf.��H����H�\} H��t�H�D$PH�C} H�D$XH��u/H�-�Pf.��H���S�H�} H��t�H�D$XH��| H�D$`H��u/H�-WPf.��H����H��| H��t�H�D$`H��| H�D$hH��u/H�-]Tf.��H�����H��| H��t�H�D$hH�-k| H��u*L�%�O��L����H�D| H��t�H��L�%-| M��u,L�-�Of��L���c�H�| H��t�I��L�-�{ M��u$L�5�O��L���3�H��{ H��t�I��L�5�{ M��u$L�=ZO��	L����H��{ H��t�I��L�=}{ M��u(��H�=(O���H�X{ H��t�I��H�
A{ H��u$@�	H�=�N��H� { H��t�H��H�	{ H��u.H�L$x��H�=�N�g�H��z H��t�H�L$xH�T$pH�4$H9��tH�t$H9���H�t$H9��hH�t$H9��jH�t$ H9��lH�t$(H9��H�t$0H9��`H�t$8H9��"H�t$@H9��$H�t$HH9��&H�t$PH9���H�|$XH9��:H�t$`H9��LH�|$hH9��HH9��IL9��L9�@��L9�@��@�uyL9�ttH9���H9�������`H���S�H��H��t"f.�H����H��<���H��t@������H�����fD1��}���f��H�Ĉ[]A\A]A^A_�f����f����f���f��	�f��
�f���f���{���fDH������i���@��[�����Q�����G���f������y��1�����H�
�L��Hc�H�>����u|H�]w �@H��w ����u|H�-w �@��t|H��v �@H�w ��H��v ��H�qv ����tH�=w �@H��v ��H��v ��H�av ��H��v �PH�8w ��H�5�KH�81���ff.�f����������GS���H�
�KH��Hc�H�>��H�H�ƒ�H����H���H�W�� tH�W��[�fDH������[�@H�>@����H�H�;[�H�>@��u����H����DH�>���[�@H�>��f�[�H�>���[�@H�>����@H�H�[��H�>H����@���"���@�����[����H�>@�����>��@H�>@�����&���Y����H�>@�������&�H������fDH�>@���������H�����fDH�>�0�f���Z��[�f�H�>���[�f�H�>u:H�[Ð�[������@�K�����fD�;������@H���X�������H���c���H���X����H��t ��H�55IH�81��Y�f���H��H�t$H�t$�i�H���@��ATUH��SH�� dH�%(H�D$1�@��tk���H�5�t ��H��u$L�%TG��L���S�H��H��t H��t�H��s H�8���SI�ă��KH�
IHc�H�>��D�+��f�@��H�H�Ѓ�H�\$dH3%(�H�� []A\�H��������?H9���H�D-��fDH��������?H9�v�H�������H�D-H�����H!�H�E��H�D-%��H�@�m���DH�D-%�H�@�U���D��F���fDH�@H��5H�D-H�D$H�|s H��u H��E�H�����H�\s H��t�H�L$�H��L��������DH��H�D-����f.�H��H�D-���f�Hc�H�D-���H�@H������H���e�����H�@H������H���u���`����l$fnD$�Z��
��H����H�l$�D$����+����H������H�����
���DH�������H����������H��q ��H�5-FH�81��Q�����ff.����������H��H����tH��8���H���fD����H������H����@��tH��H���H�������UH��SH��@��t=H��H�@��tBH��H�H�����H�@H�x4H��H�D[]��H���X��H��@��u�H���w��H���f�H��H��[]���f���H��@��t*H�����H�@H�xH�DH���@H��� ��H����H��H���\��ff.����H�@H�x
H�D6��H���(�����ATH�=WEUS�l�H��o H�Vo H�5DEH��H�H����H�-�n H�EH�q H��u#L�%E�L�����H��p H��t�H�;H����������H�UH�;H�5�D��H�o H�;H�5�DH�����H�5�DH��H���y��H�5�EH���e��H�5�EH���Q�H�����H�5�EH���;��H�5�EH���'�H�����H�5�EH�����	H�5�EH����H�����H�5~EH������H�5�EH�����H�����H�5lEH�����
H�5wEH����H�����H�5`EH�����H�5mEH����H�����H�5VEH���i��H�5aEH���U�H�����H�5JEH���?��	H�5VEH���+�H�����H�5?EH�����H�5KEH����H�����H�54EH�������H�50EH�������H�5)EH�������H�5�BH������H�5^EH�����H�����H�5EH������H�5�DH���q���H�5�DH���]���H�5�DH���I��H�����H�5�DH���3���H�5�DH�����H�;�H�5WB���H�;�H�5OB���H�;�H�5FB����H�;�	H�5>B����H�;�H�54B���H�;�H�5+B���H�;�H�5'B���H�;�H�5 B���H�;�	H�5B�k��H�;�H�5B�W��H�;�	H�5B�C��H�;�H�5B�/��H�;�H�5�A���H�;�H�5�A���H�;�H�5�A����H�;�H�5�A����H�;�H�5�A����H�;�H�5�A���H�;1�H�5�A���H�;�H�5�A���H�;�H�5�A�~��H�;�H�5�A�j��H�;�H�5�A�V��H�;�H�5�A�B��H�;�	H�5�A�.��H�;�	H�5�A���H�;�H�5�A���H�;�H�5�A����H�;�H�5�A����H�;�H�5�A����H�;�H�5�A���H�;�H�5�A���H�;�H�5�A���H�;�H�5{A�z��H�;�	H�5wA�f��H�;�	H�5rA�R��H�;�H�5nA�>��H�;�H�5iA�*��H�;�	H�5eA���H�;�H�5^A���H�;�H�5XA����H�;�H�5RA����H�;�H�5MA����H�;�H�5JA���H�;�H�5FA���H�;�H�5CA���H�;�H�5CA�v��H�=�h H�@H��|H�T?H�;H�5!A�H���H�=A�W��H�;H�5AH���%��H�;�H�����H�5A�Z��H�;H��h �H�5�@�?��H�;�H����H�5�@�$��H�;�H�u���H�5�@�	��H�;H��g �H�5�D����H�;�)H�5�@���H�;�H�5�@�v��H�;�	H�5�@�b��H�;�IH�5�@�N�������d�����������[]A\���@H�9i H��u%L�%@=D�L������H�i H��t�H�;H������+�������H���|�����H�����H��H�� �f.���SH��H�H��t�:��H��[�1�����H��H�WH�OH�wH�?�t��1�H���ff.�f���H�}f � ���ff.���AWAVA��AUATUSH��hdH�%(H�D$X1�����D�����DHc�H��I��A�H�l��w�����wA��~�H�CL�;H�kH�D$A���W�f.�L��H�5�>L��E1��+��I��t_H�=�g ��L��L�D$@�1�H�5�g ���L�l$@I��$��M��tA����fDL�t$H�I��$LD�L��H�5l>L�����L��H�5`>L�����L������H�D$ ��H�D$H��t*H�߃��2�-��H�����H�H!�H��H�D$H�|$���H�Ǩtc�����Hc��d��H��uc�H������f�I�E��H���7���L�����I���'����H�[A��������>���D�[����Hc����H��t�H���H�D$(u�H�EH�ƒ�H��u��� �&H��H�ǃ�A��H�DH�D$0�Z��I��E���NA�F�1ۉD$<H�D$H�EH�D$�Q@H�D$H�<����H�ǨtY���I��A��	tYD���e��Ic�L��H�t�e��H�CH;\$��H��A��H�E u�H�E H�<����H�Ǩu��m��I��A��	u�D9t$<��L���q��H�T$ H�5�<L�����L��H�5�<L�����H�T$0H�5�<L�����H�T$H�5�<L�����H�D$(�DH���8��H�@H�����H����������������fDL������H�T$ H�5�;L�����L��H�5�;L�����H�T$0H�5�;L������H�T$H�5�;L������H�T$(H�5�;L������H�5Wb L���G��H�@L��H�L$XdH3%(��H��h[]A\A]A^A_�f�H�MHc�A��H9��l��������H��a H�;H�5�;H�81��6��fDA��]���D�H�=�:����H�=�:H��c �g��H��c ���H��A���|��I���u���H�]b H��H�5s;H�81�����t��@��Uf�H��AWAVAUATSH��H��H��H�����t���H��H��X���H�5_:dH�%(H�E�1�)E�)E�H�E����H�5V:H��H��0������H�5#:H��H�E��v��I��H��b H��u H�s4�H���s��H��b H��t�H��H��` H�8�%��H��H���H�5�9H��@���H�����H��H�5�9H�E����I�H��(����� �JH����HcÉ�l���H9�������H�E�������9�t����a��t������`H�5` H��H���������t���H�}�H�E��QLc���H�x�D��t�����p���Hc�p���J�4;H��H�����H��H��H�E�H��H���H)�H���H9�tH��H��$�H9�u�%���H�D$H���H��`���H�E�H�� ���H��`�����t���H��H�E����1��p������#H�E�E1��E�1�H��8���H�E�HDžx���H��P����|@H�E�H��`���D��H��P���N�< L���O��H�u�H�E�H9�tH��x����4H��x����H��H�E��E���N�< �E�I��9�t����n��p���9��`I�FI� uI�F J�< �~��H��X���I��1�9�l������Hc�H��H�E�A���B���H����H����H��^ H�H9�@���tqH�E�H�	` H��u!@�H�=�1���H��_ H��t�H��8���H��@����H���@��H��x���H�E��vH��x���H���?��H�E�H���3��H�E����f.�9�t�������t���+�l��������l�����p�����H�5=] H��H����)��H�E�H�xH��t���H�E�H�@L������I��9�t�������t���Hc�l���H��X�����H)�L�$у�H�L�l��6f�����I��D��Mc�I���I��K�t?L���L��M9��+I�<$���H�Ǩu��n��I���f��+��H�u�H��x������H�E�����fD��0H���.��<�cH��[ H��
����Lcm�H�E�J��H�H��0�����H�H��H�u�H��(���������H�M�H�}�H�U�����u��HcH�DH�E�H��] H��u&H�75fD�H���S��H��] H��t�H��H��[ H��8����H�8����H�� ����m��H��H���H�5�4����H�u�H�����H�M�dH3%(��H�e�[A\A]A^A_]�@H�P����I�^����H�u�1�H�=+�1���������H��0������H������@H�E�H��H�� �������H��`����S����H)�H�L��)���L���:��I�Ƌ�t�����p���H��H���H�5�3���H���}��������D��p����H��x���A�D$Lc�L�����I��E��t{��p���E1�I�VH��`���L��P���H��M���H��I��@H��I� uI�F J�<8������h��K�D=I��M9�u�Hc�p���H��`���L��P���I�D�H�}�H�}�H��������p���M���L��x���H�}��������������L��E�����H�U��E�H�5�2H�B��H��Y H�81����@����H��x���H�E��u���H��Y H�����H��Y H�����H�U�H��8���������H��x���H�}�M�苕p����������S���H��Y H������t������/����t�����p���H�LX ��p���H��1H�5P2H�81�������t�����������Hc�t���H��X������H�5�2H��H�*Y H�81������p��������@����H��(dH�%(H�D$1�H��X H�T$H�<$�H�H�t$H������H�L$dH3%(uH��(�����f���H��W SH�5Z1H�H��W H�8�[��H�$X �H�5>1H��H��]��H�;�H�5,1�I��H�;H�5���Z��H�;�����H�����H�5#+�?��H�;[�����H���H�5'+�#������fD��H��H�5�N ����xH�H��H�Ѓ��f.���H��H�5�N �����@�H���ff.���H��H�5�N ����@�H���ff.���SH��H�?H��t�S��t�C��uH��[����f��[��H��[����f�USH��H��H�|$H�t$�H��H��� ��H��H�����H���
��H���HD�H��[]�f.���H��H�5�M ����H�8H�@H�x
H�D?H���H���w������H��H������\���H��t/H�@H�xH�DH���fDH��H���,���@�H���ff.���SH�54M H���<��H��E1�1�H�81�[���f���ATUSH��dH�%(H�D$1�����I����H�$�1�H�����H��H����L��H�5�L ���H�8H��H��t�P��t�@���DH�+H�C��������H�L$dH3%(��)H��[]A\�f.�H�H�$���H�n�9�����ub1�H����H������M����H���S��H��H���7������H���)���H��H�/T H�5n.H�81��>���fDH��uB�1����fDH�=1T L��H�_L���G�������f�������y���@H��訿���H�����H��萿��H���H��t��>����k������1������e��������fD��H��H��S H�
K �H�8���H�P �@uH�P H�H�BH���ff.���H��H�5�J dH�%(H�D$1����H��H�$H�8�����u'H�$H��tH�x�^��H�L$dH3%(u%H����t��H�5�-H��H��R H�81�蹾���t���@��SH�54J �?����P��tH�8H���=���C��u�[�H�TR H�5m-H�81��c������H�5},H��H�-R H�81��C�����SH��H�5�I �̿���P��tDH�8H���z���H��t-H�@H�xH�D[��H��[�O�����[�H��Q H�5�+H�81��ɽ��f�SH������H��t#H�@H�xH�D[�@H��[���H�hQ H��H�5�+H�81��t���@��H��������SH��H�5�H ����P��tH�8H��[�y���H�Q H�5T+H�81��!������H��P ATH�5Y+I�����USH�H��P H�8�Q��H�:Q H�5S���H��H��x��H�;�H�Y���H�5+���H�;�H�����H�5�*�r���H�;�H�#���H�5�#�W���H�;���H��H�@ H��L� �@����H�;H��H�5�*����H�;���H��H�@ H��H��@�߾��H�;H��H�5x)���H�;�H�5x*���H�;�H�5p*�u��H�;�H�5f*�a��H�;D��H�T���H�5l#�h���H�;1�H�l���H�5_#�P���H�;1�H��H�5&*�8���H�;1�H����H�54*� ���H�;�H����H�5�)����H�;�H�����H�5�"���H�;�H�����H�5�)�Ͼ��H�;1�H���H�5�)跾��H�;1�H�����H�5�)蟾��H�;1�H�����H�5�)臾��H�;1�[H�j���]H�5�)A\�k���f.����H�GxH��H��HG�ff.���H��H�5�F �,���H�H��t
�xH�H�҃�H��H���ff.���H��H�5AF ���H�H���@��H�?�4���@��ATH�5F UH��S蹻��H�8tkH�XL�`�V���H��L��H���x���H��H��O H��u"L�%t)f��L���C���H��O H��t�H��H��H���i���H��[]A\靺��DE1�1�떐��AVH�5�E AUATUS�(���H�(H��tlH�xXI��t]L�h@L���I���H��M��~NI�@1��H�t?H��H��菾��I9�t'I�D$XH�<�H��L�y�贸��H������[H��]A\A]A^����AVH�5�D AUATUS舺��H�(H��tlH�xPI��t]L�h@L��詺��H��M��~NI�@1��H�t?H��H�����I9�t'I�D$PH�<�H��L�y�����H������[H��]A\A]A^����AVH�5CD AUATUS���H�(H��tlH�xHI��t]L�h@L���	���H��M��~NI�@1��H�t?H��H���O���I9�t'I�D$HH�<�H��L�y��t���H������[H��]A\A]A^����H��H�5�C �L���H�H��tH�x@H�@H�xH�T?H��H���H���������H��H�5QC ���H�H��tH�x(H�@H�xH�T?H��H���H��鷶�����H��H�5C 謸��H�H��tH�xH�@H�xH�T?H��H���H���g������H��H�5�B �\���H�8tH�x H��t
H������@�H���fD��USH��H�5pB H������1�H��H��H���׸����tH���[]�H��J H�EH��H�5�%H�81��4���@��H�B H�����g���H�P �@uH�P H�H�BH�BpH�BxH���D��SH�5�A �o���H�8t8H��H������H�{pH�H�CH��t���H�CpH�Cx�[�f.���UH��AWAVAUI��H�5XA ATS��H��H��8dH�%(H�E�1����I��H�H����M�t$@Hc�L9���H�E�I����J��H��H��H%�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�|$H�E�I���H�E��fDL��L���E���H�}�H���Y���I�|$ H����I�t$pH����I�T$xH���и��H�M�dH3%(��H�e�[A\A]A^A_]�fDH��H�4�H��=��H�E�H��H��H��H�E�����I��1�M���]���DH�I�<�H��I9��D���I�|�@��u��d���H�����H�M�I�T$xI�t$p����H��x"I�t$p�9���fD�H�D�3����^���I�L$ H��G H�5{#H�U�H�81�H)��z���H��G L���H�5/#H�81��]�����#�����ATUH��SH��H��dH�%(H�D$1�H�I H��u#L�%;"�L���{���H��H H��t�H��H��H��H�,$����H�=�F H�����H��H������H�T$dH3%(u	H��[]A\��q������SH�?H��t2���H�{pH�H�CH��t蠳��H�CpH�CxH��[釳�����H��E SH�5q!H�H��E H�8蛸��H�,F H�5����H��H��·��H�;�H����H�5;!�׵��H�;�H�h���H�5�茵��H�;1�H����H�5!�t���H�;1�H�h���H�5� �\���H�;1�H�����H�5� �D���H�;1�H�����H�5� �,���H�;1�H�����H�5� ����H�;1�H�����H�5� ���H�;1�H�����H�5� ���H�;1�H����H�5� �̴��H�;1�H� ���H�5� 贴��H�;1�H�h���H�5{ 蜴��H�;�����H�m���H�5Q聴��H�;1�[H�����H�5S �h��������fD��H��H�5�< �<���H�8H�H�����ff.�f���SH�5�< H������H�H��[���H�?H��u��K���ff.���UH��SH��H�5}< H���ı��H�H��t��tH��H��[]�DH��H���M���H��H��[]���H�5< H����'���H�P �@uH�P H�H���ff.�f���H��H�5�; �<���H�H��tH���H��C H�5�H�81��w������UH�5�SH��H�-C H��B H�}H�襵��H��C H�5G���H��H��̴��H�;�H����H�5�豲��H�;1�H�U���H�5F虲��H�;1�H�m���H�52聲��H�;1�H�%���H�5 �i���H�B H�}H�5H�����H��B H�H��[]�f.�@��H�GH��0���H�E; H���0跴��H�P �@uH�P H�H�BH�B�BH���f���SH��H�?H��tH�CH��t�{u�C��H��[�"���f���SH��H� H��uH�{(H��u[�@�۰��H�{(H��t�[�̰��ff.��AWI��AVI��H�: AUM��ATM��USH��H�t$�0���L�T$�@H��H�X uH�X L�L�{�CL�sL�c M��tA��t4L�k(M��tA��tH��H��[]A\A]A^A_�L��H���}�����L��H���m����ff.���H��H�5�9 蜮��H�8tH�x��H���f�1���ff.����H��H�5�9 �\���H�8H�H�����ff.�f���H��H�5a9 �,���E1�E1�1�H��H�*@ 1�H�8H�����ff.����H��H�5!9 ���E1�E1�1�H�1�H�0H��? H�8H���i���f���H��H�5�8 謭��H�H���@��H��H�5�8 茭���xH�H��H�Ѓ��f.���H��H�5�8 �\���H�8H��tH�PH��t�xu�@�ҸH���D��UH��H�5Q8 SH��H������H�H�������H�HH���z���H��H��A��j���H���[]�ff.���USH��H����H�o tH��H�H�EH��H��[]�fDH�����H�EH��H��[]�f.���H�G H�xH�@H�x
H�D?��������H��H�5q7 �<���H�8H�@H�x
H�D?H���H���ש�����ATUSH��H��H�|$H�T$�Ҭ��H��H�D$L�`��t!H�H��L��H��萬��H�D$H��[]A\�f�H�����H������ATUH��H�5�6 S��H��蔫��H�8������I��H�}��u&@���|H�I�$[]A\H�8H�D�fD��uhH�]H��H�@��t��t#I�<$H��[H�H�]A\�P����[���H���u�H���K���I�<$[H��H�]A\�(�����+���H���z��������b���H�= H�5�H�81�����f.���USH��H����t&H�H���t+H�H��H��H��[]鯮���H��谩��H���u�H��蠩��H��H��[H��]����ff.�@��AVH�5c5 AUATUH��S�%���H��L�pL�hH��L� 蟭��M��M��H��L��[H��]H�=�A\1�A]A^�ʫ��f.���ATI��H�55 US��H���ĩ����xOH��uH�}H�p[]A\�ڭ��f.���u*I�<$@��u�|���H�}[Hc�]A\鬭��@裮����1�������UH�5�4 SH���J���H�xH��tQH�@H�x2H�l?����H��H���Ȭ��H��H��H��[�]�b���f�軦��H����fDH���[]�@��AWAVAUATU��SH��(H�T$dH�%(H�D$1�H�D$��~"H���t2L�n����L�v�9�t$���������A�A�H�������H9�HD٨��H�I�ă���A����I�E1���u,I���	L���ª��I9�MD�L�t$���H�I��M��tYH�|$H�53 ���H�8H��H��tH�@H��t��H�] H��t	����H�t$H�u(H��t@��tfL�eL�mL�}H�T$dH3%(��~H��([]A\A]A^A_�f�E1�E1��m���DH��蘦��I������L��蘩��I������H�|$����@H�|$H���ӥ���d���H���V�������H�D$���������A��b���ff.���ATUSH��H��H��H�o9 H�t$H�0�:���H�����tjH�|$蘧��H�hH���̧��H�����E1�E1�1�1�H��H��8 H�8����H��H��tH�E H�X ��uH��H������H��H��[]A\�@H�18 H�|$H�0质��H��I��t#H�|$����H�\$E1�E1�1�H�S�fDH�5Q: H�|$1�1��é��H��H��$t:H��7 H��H�0�X���H���w���H�8 H�5yH�81������H�|$�V���H9D$IDܨt)H�H��H��7 E1�E1�1�1�H�8����H�����f�H��訤��H����H�i7 SH��H�0�ͧ��H��uH��u1�[�fDH��H�5^0 �)���[H��H��6 H�5H�81��l���ff.����ATI��USH�����H��I�D$ L�`��t,H�H��6 H��I�1�H)�E1�[E1�H�8]A\�T���@H�����H������ATI��USH���-���H��I�D$ L�`��t,H�H��6 L��E1�E1�H�tH)�1�[H�8]A\���H��蘦��H������AUATUH��H�5]/ S��H��H��dH�%(H�D$1�����H�8�����dI��H�}L�e����H�MH�$���?H��H�@����A����I�H�<$H��t
@����H��5 H�0����H����H�4$@����H�I�}L��H��.���L�$$H�T$dH3%(L����H��[]A\A]��H��H�$H�@��ttL���4���I�U��H���H���b���H�����H���{�����+���H��A���"���L������I������H������H���A���fD��H���fDH�<$�?���H��������������衡��H��4 H�5RH�81��ɠ��f���UH��SH��H��H��H�V4 H�0辤��H��u	1�H��[]�H������H��H�����H9�u߸�ڐ��UH��SH��H��H��H�4 H�0�n����H��t.H���|���H��H���q����H)�H��t����H������H��H��[]�ff.����ATI��H�5�, US��H��脡����xUH��uH�8[]A\�?������u8I�<$@��u�D���H�}[Hc�]A\�t���@�k���H�}[Hc�]A\�[����1���譣��ff.�f���USH��H�50, H�����H��H��tNH��薣���H9�HD�H�](�tH�H�EH���[]��H����H�EH���[]�H�@(1�H�EH���[]�fD��AUATUSH��dH�%(H�D$1�H�$����I��H���uw��oH�I��L��1��Ϡ��1�L��H��貟��E1�E1�1�L��L��H����I���d�������H�L$dH3%(L���iH��[]A\A]�f.����$I��H�^I����H����H���S����H9�HD�H�$���H�H��L������L��1�H������L��E1�E1�H��L��H����I��H��tH�@ H�X(��uH��L�����蔣�����0���H����H�D$dH3%(��H�=�1 H��L��L��[H���]A\A]錞��@H���0���I���#����H������I�����H�����H���+���H�$�j������$���H�}1 H�5nH�81��ܜ��藝�����H�u0 M��I��H��H��H��H�8���ff.���UH�=SH��語��H�-;0 H�5�H�e2 H��/ H�}H��¢��H�0 H�5��H��H����H�;�����H�Z���H�5����H�;�H����H�5�
���H�;�H����H�5h�ȟ��H�;�H���H�5�譟��H�;�H�^�H�5�蒟��H�;�����H�s�H�5K�G���H�;�H�(���H�5Q�,���H�;1�H���H�5D����H�;1�H���H�5'���H�;1�H�P�H�5����H�;1�H���H�5��̞��H�;1�H�p�H�5�贞��H�;1�H���H�5�蜞��H�;1�H���H�5�脞��H�;1�H�x�H�5��l���H�;1�H� �H�5�T���H�;1�H��H�5��<���H�;1�H���H�5o�$���H�;�����H�u���H�5�	�	���H�;�����H��H�5?���H�;1�H���H�5.�֝��H�;�H�����H�5軝��H�;�H�L���H�5蠝��H�;�H�1���H�5�
腝��H�;�H����H�5�
�j���H�;�H�[���H�5�
�O���H�;�����H���H�5�4���H�;�����H���H�5�
����H�;1�H���H�5�����H�;�H�"�H�5Z
���H�;H�5�% 臛��H�;1�1�E1�E1�1��c�H�}H��H�5)
[H��]銟����H��H���already freed: %+li@ctype@argserror prepping CIF %dmprotecterror prepping closure %dPointer[]closure args: %dcallclosure retval: %dClosureinitializeto_ifreed?fiddle/closure����h���H���(��������������x���X���8����������������h�������@���p����������ݪ��ݪ��ݪ��r���©������������������}�������^���G���r���1������voidvoidpcharshortlong_longint8_tint16_tint32_tint64_tfloatdoubleconst_stringssize_tptrdiff_tuintptr_tboolunknown type %d��������������������������̳��ܳ��D���������������Դ�����������y����������<���l�����������ĵ��������y����������D���d���������������9���Է����L���d���t�����������ĸ����9����������FiddleDLErrorTypesVOIDVARIADICALIGN_VOIDPALIGN_CHARALIGN_SHORTALIGN_INTALIGN_LONGALIGN_LONG_LONGALIGN_INT8_TALIGN_INT16_TALIGN_INT32_TALIGN_INT64_TALIGN_FLOATALIGN_DOUBLEALIGN_SIZE_TALIGN_SSIZE_TALIGN_PTRDIFF_TALIGN_INTPTR_TALIGN_UINTPTR_TALIGN_BOOLWINDOWSSIZEOF_VOIDPSIZEOF_CHARSIZEOF_UCHARSIZEOF_SHORTSIZEOF_USHORTSIZEOF_INTSIZEOF_UINTSIZEOF_LONGSIZEOF_ULONGSIZEOF_LONG_LONGSIZEOF_ULONG_LONGSIZEOF_INT8_TSIZEOF_UINT8_TSIZEOF_INT16_TSIZEOF_UINT16_TSIZEOF_INT32_TSIZEOF_UINT32_TSIZEOF_INT64_TSIZEOF_UINT64_TSIZEOF_FLOATSIZEOF_DOUBLESIZEOF_SIZE_TSIZEOF_SSIZE_TSIZEOF_PTRDIFF_TSIZEOF_INTPTR_TSIZEOF_UINTPTR_TSIZEOF_CONST_STRINGSIZEOF_BOOLRUBY_FREEx86_64-linuxBUILD_RUBY_PLATFORMdlwrapdlunwrapmallocreallocQtrueQfalseQnilQundef@closure@name@need_gvlargument types@is_variadic@ptr@argument_types@return_type@abithe number of argumentserror creating CIF %dlast_error=FunctionDEFAULTSTDCALLfiddle/function%s is so large that it can cause integer overflow (%d)Fiddle::TYPE_VARIADIC must be the last argument type: %livariadic arguments must be type and value pairs: %li%sclosed handleunknown symbol "%li"Handlesymsym_defined?NEXTRTLD_GLOBALRTLD_LAZYRTLD_NOWto_ptrfile_namedisable_closeenable_closeclose_enabled?fiddle/handlecould not get handle file name: %sdlclose() called too many timesnewMemoryViewexportreleaseobjbyte_sizereadonly?formatitem_sizendimshapestridessub_offsetsto_sfiddle/memory_viewUnable to get a memory view from %+liwrong number of index (%d for %zd)Unable to recognize item format at %zd in "%s"`ref` called on a cleared objectPinnedrefclearcleared?ClearedReferenceErrorfiddle/pinnedNULL pointer dereferenceFiddle::Pointer was expectedreadwritefree=call_freeto_intto_value+@-@null?to_strinspect<=>==eql?+-[]=size=NULLfiddle/pointer#<%li:%p ptr=%p size=%ld free=%p>to_ptr should return a Fiddle::Pointer objecta free function must be supplied to Fiddle::Pointer.malloc when it is called with a block;�x�����h�������"���'���P	/����	7�������((���@X���\����t���������x������������(��������((���Dآ��`X����h����x����ȭ��H��`ذ������(����H����ȱ��(���0X���DȺ��x�������8����X����h���d	����	����	���
���
���4
��L
8��d
x���
����
���
h���
������@���Xh��t����X��������������X��8x��L���d���|����x���������8
X��t
����
����
H���
����
��� 8��8���T����h�������X���h��������8���L(���h�������������������(X�H��H��x���������H�(��@���8��h�����4�xx�����X� ��T���X������$x�PX���������$8�dH�x��zRx�$�����FJw�?:*3$"DP����\ؑ��HMt��-E�c��#HW����0E�j � ���YE�l
GA
E�\���XH0J
A����/E�D�G $$����YE�F�D DDAHL��F�B�B �E(�A0�A8�Dpg
8A0A(B BBBJ zRx�p������(����
L������F�L�B �B(�A0�A8�D��
8A0A(B BBBJ$zRx��������,���\����nH@H
Hxܛ���L��d�p���~F�B�B �B(�A0�A8�J�c
8D0A(B BBBH|
8A0A(B BBBJ����������	P(|���GH�Q
GK
ET
Dc
EL
DK
EW
I�
CM
CN
B|x���H S0������F�A�D �D@�
 AABD�<���	�8���?HY
GV�X��� 0d���~E�D�D s
FAIdDAD����THk
EWd�(0x���mF�H�A ��
ABI�H���HI�P���E�U�T���#HZ�l���Lx���F�B�E �B(�A0�A8�D�'
8A0A(B BBBJ$zRx��������,ϋ��,�����0	E�G
I�����.
E$zRx�������,k�������WH0I
A ����L�y<����
P����&HWh����%H\�����%H\����>E�]
NI$���FA�A�G0zAA����9Hg
AD 4���RHi
GG
II$p���'E�]0@�����F�A�A �D0�
 AABKt@��EH|�x���H ^
A����mE�o
A$�@��wE�{
HD
LF
A ����LA�b
ED
E���
$���?E�]
E(@���UM�O�A �"HIl���$��2Hi�L��HS�T��,�P���F�H�D �i
ABJ8�����F�I�B �A(�A0�{(D BBB80	���F�I�B �A(�A0�{(D BBB8l	x���F�I�B �A(�A0�{(D BBB�	���IHt
DD�	��IHt
DD�	<��IHt
DD
l��:H_
II((
���\E�A�N ]
FAAT
���KO{l
���VE�P,�
<��-E�C
F���M��
G0�
<���F�A�D �G0�
 AABA�
���IE�����L�y$`��
8\��#HWPt�� E�Zlx��0����ME�D�N V
DAFODA����3Oc����9HX
A(�����E�H�D �AA���
(���GOw@���.E�d\���4E�V
EOH|���B�E�L �E(�D0�A8�DPV
8D0A(B BBBD�l��4H^
J����#HW����4Hg
���7Hj,
���HSD
��&HW\
��;Hr$t
@��RE�K�G sFAzRx� �� ����
0�
H��FE�A�G W
DAGPDAd��-���9Hg
AD04���]F�A�A �G0z
 AABC@h����F�A�K �z
ABQb
GBEZ
GBM0����aE�A�G W
GAL\DD8����VF�I�B �A(�D0�h(D IDB4���}F�K�A �\
ABOY
DBI0T0��|E�H�D {
GFGTFAH�|���F�B�B �B(�A0�C8�D`O
8A0A(B BBBC0�0��}F�A�A �J0z
 DABE |��TH�Y
GP
D(,���]F�D�A �s
GBI(X���]F�D�A �w
DBH8� ���F�B�A �K(�I@�
(A ABBI(����OE�D�J Z
AAA$����dE�D�J KDA@0���F�K�A �W
ABLY
DBIJ
DBE<X|���E�A�N u
FAHP
FAARFAL����	F�B�A �A(�D@�
(A ABBK�
(G HBBI����"(�����E�H�D tHDGNU�0C�B� �`C@C!�� hh!�px�w ۪�����!�������������!��@�j�P� ���!�
�
�
�
�
�
�2
H��� �� ���o`�X
1�� �8'� �	���o���o8 ���o�o����oh� �233 303@3P3`3p3�3�3�3�3�3�3�3�344 404@4P4`4p4�4�4�4�4�4�4�4�455 505@5P5`5p5�5�5�5�5�5�5�5�566 606@6P6`6p6�6�6�6�6�6�6�6�677 707@7P7`7p7�7�7�7�7�7�7�7�788 808@8P8`8p8�8�8�8�8�8�8�8�899 909@9P9`9p9�9�9�9�9�9�9�9�9:: :0:@:P:`:p:�:�:GA$3a1�2U�GA$3p1113PB��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113PF�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@C͌GA+GLIBCXX_ASSERTIONS
GA*FORTIFYP��GA+GLIBCXX_ASSERTIONSfiddle.so-3.4.4-3.el8.x86_64.debug���7zXZ�ִF!t/��!oC]?�E�h=��ڊ�2N�a�h��]���I�9J��6����*z�?s����;a�
�}�߀*��Xy3d#�=F6��Q��M������#�[�>^�+�J�2[�I��%��lǯ1�B�fW��yOż�E�
CDa����r��~�u��4|�/g�	࣑��!�������e�����+���l�;�?��h�2R1���Bx|�N�l�!��p���%c�P_���Hc�n�O/\v� +��&m� 
�u����h3�0�|:��w۹���m���M��%V�=qT�܀��:����R�*�K�O^��́-�K������I�pe�G)@��Xan�hԻ؀�ۥ�D��w�~��i� )�
���)�������/E�c�q'C��u��gi�}I��_Y�B�_�\N���G̻�hԋ��|�}t���C�����)�T���t��pީ=4y���ْ�xE�R�:Ն�=pT��"Y-�	οX��K�Zۺyf�K�����$�m�G	���_ôԵ?��]xi�&���V�@��`�S�o��i2u=OQ)S�>�T@�#긁�vt�	��!u�'��k�#`զuO&��V�8k��g�����U޻��Ȕ���Y�Ļ���>�&=%}XMI�J߭��9�*��?�)x�w`S�f����/�����y��G�f�tl���&�Ȣ���JPC�Ci�"�
����@��K���%{�F2��⑇�n۶h�\�_^��~���P��c~�A:����](��G��}�e��V1�@z�<0裞:��q"����j.:a#h8��&�HU`��\ְ�|P�UG�"8�%hL��4�\���K��қ���V34A�n�/B�h��wY>���Y|k��v��/%^Ĕ/�������t-�����16�M#��k�0�e���Z��v�0cu�El���
��0�)Gf�s�� ,�6D�S��~O��x{���P�mڵ�jNmn�7>P�83�0�Q?�%D���~���w�]C��лxhYט�ƺ�EX#�}f��~[#���EB��<���B��&�̹,�db�
�K��pR��<Y�)�	ty=D{��2��FG��b&ޅ�Y��[5@(�*)j�5�r���=+�i�Nr1e�{��u6!:j�@� _(��f11�~�C���>9B��a����2�뻝Jǯ���<��Մ�
���Lg����ƽ�1�����W���'Z��$S��N�kk�q��ޅ��m��D��ۖ������"��Ia�I����|?DnV�1tHv���O��|�m�xn���z��,D�Z��O��hÆo��3�Iq9p��ۂ�ȥC:6s̱;����t.��gfi˪�Ɋ����&n�����u'1�R�}�5�3�$
��GŻөm��Kx0TT���T�(Zo��Y07����V3;8}ÊĤ냐��k����'���#% ��ܥ��():�#z��̽dR6\�bye#뇄rm15���1V��g�J���Df��;������Wړ��<�A��>ș
�k��zM&TҔ	��m�${�mJV�9�s�Jj�*��	U/�;)�Sb��SѾ��0�A��|Yp�~J~b��	�#��Qf���^
��wj��:�{�[8�����J�0\'�U�̱�1��|�J��;��G`��po@Uґ���/vV�7�t
R�K�X��ۄ@��o)tK�,I?��_|jiz<�c���l^p�!�?o�����=$�;�����+����wO�s
sgc5+E��v�Q�Z����$�&��cG{�$�<NUe��R��y��BO�uj��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``�(XXP0��18���o��\E���o8 8 pT� � �^B8'8'�h�2�2c�2�2�n�:�:�wPBPB�_}H�H�
�X�X��
�8�8�����(�0�0� ��� ����� ���� �h �h� h�@��� ��X�� ��� �����`�l
t�(��� �(PK*J[E&�ƨ�lib64/ruby/continuation.sonuȯ��ELF>P@�@8	@(( x
x
 x
 �� �
�
 �
   888$$  S�td  P�tdhhh$$Q�tdR�tdx
x
 x
 ��GNU���P�-�1���I�˓ ��� 	BE���|�qX�4 o , gF"� � � UP__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_continuationrb_warnruby_Init_Continuation_bodylibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�x
  �
 ��
 �
 � � � � � � � ��H��H�
 H��t��H����5�	 �%�	 ��h�������h��������h��������%�	 D���%�	 D���%�	 D��PH�=�1�����Z����H�=�	 H��	 H9�tH�V	 H��t	�����H�=Y	 H�5R	 H)�H��H��H��?H�H�tH�%	 H��t��fD�����=	 u+UH�=	 H��tH�=� �9����d����� ]������w�����H��H���callcc is obsolete; use Fiber instead;$x���@����h���zRx�$0���@FJw�?:*3$"DH���0\`���EOGNU� ��
 ������
,x
 �
 ���o`��
�� Hx��	���o���o����o�o����o�
 �GA$3a1�)GA$3p1113PiGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3a1,9continuation.so-3.4.4-3.el8.x86_64.debug�6VK�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N�a�a��D��B/:qaİ�t��qO�{JB��)�;��5'993����b�wa2Ø��^�<��#][�5rӱ�i��j��F��
�% �z,���lYa�HZ🫾���A��sb���F�Mn�I��ͯ����rF{�ݡ���]B�lD���|�c�y؍F�]����_u\fH�g�М���+i�f�u��ۑ��F�m�6�N�t
sӶ���Ï��֐;pk��b��&c��
�NL�a3��%�)MA�Mx�a�ʝ�g;�8T�����xp����OQ���C0T��$_�wy�شo���_���n�[.�7�;���dO���D)*��	Ə�!z�4]�������<�x�n�$�PF����Wb������Ҥ�d�)�C���
����ҚY?NBj���K'P:�|_IS̗U4�޶�#��'���og�c�S	������
Ź��|Ɩ�X�����L�B�t���S��x�0-�|o1\�]M�"���7M��*�%T�Y��s���B�.ƅC֑{|�d0����@Z\�<�i���=ܼ(f�aYL�!yz<�"�MW`�^�������c�Nb� ^�dU�:��E�v�ca�z����τ?��5[�O�o8���QϲG\��ad=s�7���.>�D�K,1��|UMO�U\��īj}p[�����٨S��V�m�U"
7��(C�O%D�$�]	9BZ���"ʆ�L䷱��B�m��7hH+��1~���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0���8���o��E���o�� T���^BxxHh��c��@n  0wPP�},,
�2@@(�hh$���t� �x
 x
��
 �
��
 �
��
 �
 �� �P� �`0L4�"PK*J[Π5�-�-lib64/ruby/erb/escape.sonuȯ��ELF>P@�&@8	@@@   � (( (   888$$     S�td     P�td   44Q�tdR�td  ��GNUnY�g���I*3>s,�۠V/�B BE���|�qX	-	 ������� UM"�+, F"Bh�  �   �   �__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_free_tmp_bufferrb_alloc_tmp_buffer_with_countrb_str_newrb_enc_getrb_enc_associateruby_malloc_size_overflow__stack_chk_failrb_convert_typerb_enc_dummy_prb_funcallvInit_escaperb_cObjectrb_define_classrb_define_module_underrb_intern2rb_define_module_functionlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64�ui	�ii
�  �    � � � 
� � ` h p x � � � 	� � � 
� � � � � ��H��H�� H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h���������%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� DH�=� H�� H9�tH�n H��t	�����H�=y H�5r H)�H��H��H��?H�H�tH�E H��t��fD�����=5 u+UH�=" H��tH�=> �)����d����
 ]������w����UH��AUATSH��L�WdH�%(H�E�1�H�TUUUUUUI9���K�4RH��H�H����FH��H��H�E�H��H���H)�H���H9�tH��H��$�H9�u�%��QH�D$L�e�H���H�SH� tH�SN�I9��VI��L�
L�f.�A�I��I9�tKH���r�H��A�4�@��t�D��I�t�A��s`A����E��t�A�A����M�I9�u�I)�M9��}L�����H��H�]�dH3%(��H�e�[A\A]]�@H�I�D��H�|�I�|�I�xL��H��H)�H)�D���H�됐H�VL�e�H��L���|���L�S���L��H���%���H��I�����L��L��H������Z����H)�H�L����f��A�D��t�A�t�����f.�E1�����D���t�fA�t����L���X����C�����SH��H��dH�%(H�D$1�H��t@��tYH��H�
_�H�X����H��H�������xuMH��������uAH���Y���H�T$dH3%(uJH��[�H���H��u�H������xt�fDH�5 H�= H��H�$������z���f.���SH�� H�=�H�3����H�5�H������H�����H�5�H���{���H�3H�=�����H�� H�� H��u"H�yf��
H�����H�d H��t�H�` [���H��H���to_sStringERBEscapehtml_escapeCGIescapeHTML&quot;&amp;&#39;&lt;&gt;;4@�P@�x��0��������zRx�$��FJw�?:*3$"D���(\X�=A�C
I���N
E �l����E�G o
AD�����E��GNU��  gv���@	
�  ���o`��
�H h��	���o���o����o�o����o( p	�	�	�	�	�	�	�	�	

 
0
@
P
GA$3a1@	�GA$3p1113�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYMGA+GLIBCXX_ASSERTIONSescape.so-3.4.4-3.el8.x86_64.debugJ�:!�7zXZ�ִF!t/��]?�E�h=��ڊ�2N�a�Ӈ�Z��q���}�k�E��PU��P�Q%	�G
�׫��)F���*���`�ǂ
C����=y�~R:DSpU���S"t\ߌ�J�IQv�*HK��.��6����.=��~�M.�B�5C�a���V��9D|�$��͇,EF��y�Eq��Ez�*��k��)�Y��������zOn1���8�b�a�
�8��s��xj�x�^|d��_,�M��3�ɥ��������䠘�"�Z:5�?�M���ݮ�=�/RH�'zͿ�8+3nW��\r=�PZ�YZ�T� I��\��E�7([���/cB�^�2^>��r��۠twU���-�a���o��h5�!D��pD~�A��W�g��ᲛB�NEy�0B=����XMV =W�庩�A¸����D���r�F@�#����_΅A����x�)�\�jr
K�X��\u�e�t:��7Ț���Q ��Td�A
�̊��N4�t�
�n\�›����ŒX�Wij��pW�q�c:�q��-�U�A�?>
T�++�I^�Sl��`	��j�9� ����APZ3m�څ�a�
�9Ùb̬���׫�җ'��t-�����7�
ޛw;� �E3������[�f����܃�'���ȍ,�t�W��@I�P"�$�H�ѓ�3��8�
쾬8G�/L^6������Aw���5z�x�3�p�"Q0��Q�m�p��;���j�ý3�DdI�am�Qa>ר^١w$�>��v�aa)�<��^X��t��*���}��`�R&Nc������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��@0���8���o��0E���o��0T�^B��hh@	@	c`	`	n`
`
�wPPb}��
���@ �  4�XX��   � � �   �( ( �H H��    �  ` HH"(p"`�%"PK*J[�r\����lib64/ruby/ripper.sonuȯ��ELF>�@��@8	@H�H� P�P�%P�%� h�h�%h�%  888$$(�(�(�  S�td(�(�(�  P�td������LLQ�tdR�tdP�P�%P�%��GNU�Lӗ�$�aF�r���%��@�,� P`�x1$B(�#
�5*i���������������������������D�E|6�`�?Y4|6�`}�re�}�1�&�Od5��"5�1\.���mE���Jl��Ll����]߼͗�G�st��ʹ)Yz��{)l���֏&�����Q�a�3��"�y�qXT��|:�I��l���&����BE��d���N����7��h������4�o�enV{$�
�
��
�!/e��� B�}1PF�TM=��&��
�����,�e|H��
���7��
\7J�
��>����	��/
�gLas�
�z��
0��� h�
2
��"$)�
8�����[���z�"��" J���	�
�(e
M
�T���Ur�m���z
F�\
E:, ���[`M�F"�
�
k��c��
u����\?U���l��"���Xp]��[7��]�	@^>
P_	�`�Gu
`_� [u	
0_
�	 _
�
�_��]AP]o��s|	0^�@�%��]EH�%	^�	P^�
 ](@]v��%P8�%~��DP�%D	^��])�0��	�]1�%�0�%"
@_		�W�n/���t�]:8�%c	 ^���X__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeripper_init_eventids1rb_intern2ripper_parser_idsripper_init_eventids1_tablerb_hash_newrb_define_constrb_id2symrb_hash_asetripper_init_eventids2_tableripper_init_eventids2ripper_token2eventidrb_eRuntimeErrorrb_raiseruby_global_name_punct_bitsrb_parser_printfstrlenripper_compile_errorruby_xrealloc2rb_str_new_mutable_parser_stringrb_parser_string_freerb_funcallv__stack_chk_failruby_xfreerb_ast_newnoderb_node_initrb_usascii_str_newrb_intern3ruby_xmalloc2ruby_node_namerb_bugrb_reg_named_capture_assign_iter_implmemcmpstrcmprb_errinforb_reg_fragment_setencrb_str_new_parser_stringrb_parser_reg_compilerb_attr_getrb_set_errinforb_parser_local_definedrb_parser_dvar_defined_refrb_usascii_str_new_staticid_warningid_warnrb_enc_str_newrb_parser_st_locale_insensitive_strcasecmprb_id2strrb_ascii8bit_encodingrb_enc_precise_mbclenrb_parser_set_location_from_strterm_heredocrb_parser_fatalrb_parser_show_bitstackrb_memcicmprb_sprintfrb_enc_find_indexrb_enc_from_indexrb_enc_dummy_prb_eArgErrorrb_make_backtracerb_ary_unshiftrb_make_exceptionruby_show_error_linerb_ast_freerb_exc_raisestrncmpruby_xmallocrb_parser_set_locationruby_xreallocrb_ruby_verbose_ptrrb_st_lookuprb_st_insertrb_st_init_tablerb_node_imaginary_literal_valrb_node_integer_literal_valrb_node_float_literal_valrb_node_rational_literal_valrb_st_free_tablerb_id2namememmoverb_yytnamerrrb_str_to_parser_stringrb_str_new_staticrb_parser_internal_idruby_strduprb_parser_trace_lex_staterb_st_init_table_with_sizerb_st_deleterb_node_encoding_valrb_node_str_string_valrb_node_regx_string_valrb_node_sym_string_valrb_node_line_lineno_valrb_node_file_path_valrb_node_set_typerb_id_attrsetmemcpyrb_out_of_intrb_ast_new_local_tablerb_ast_resize_latest_local_tableruby_malloc_size_overflowruby_xcallocrb_usascii_encodingrb_utf8_encodingrb_ast_delete_noderipper_parser_markrb_gc_markripper_parser_freeripper_parser_memsizerb_ruby_parser_get_yydebugrb_ruby_parser_set_valuerb_ruby_parser_error_prb_ruby_parser_debug_outputrb_ruby_parser_set_debug_outputrb_ruby_parser_parsing_threadrb_ruby_parser_set_parsing_threadrb_ruby_parser_ripper_initializerb_ruby_parser_resultrb_ruby_parser_encrb_ruby_parser_ruby_sourcefile_stringrb_ruby_parser_ruby_sourcelinerb_ruby_parser_lex_staterb_ruby_ripper_dedent_stringrb_ruby_ripper_initialized_prb_ruby_ripper_parser_initializerb_ary_newrb_ractor_stdoutrb_ruby_ripper_columnrb_ruby_ripper_token_lenrb_ruby_ripper_lex_lastlinerb_ruby_ripper_lex_state_namerb_parser_lex_state_namerb_ruby_ripper_parser_allocateripper_errorruby_scan_hexrb_enc_codelenruby_scan_octruby_strtodrb_errno_ptrrb_enc_str_new_staticrb_st_init_numtableripper_yyparserb_parser_set_location_of_nonerb_ary_entryrb_ary_poprb_ary_pushrb_enc_symname_typerb_ary_new_from_valuesid_assocrb_ary_concatrb_parser_reg_fragment_checkrb_intern_strrb_str_coderange_scan_restartablerb_parser_st_locale_insensitive_strncasecmprb_sym2idrb_reserved_wordrb_str_resizerb_str_newrb_enc_getonig_foreach_nameruby_scan_digitsrb_ruby_ripper_parse0rb_ast_newripper_valuerb_parser_lex_get_strid_getsrb_funcallv_publicrb_obj_classrb_eTypeErrorrb_io_getsrb_data_typed_object_zallocrb_check_typeddatarb_ruby_parser_set_yydebugrb_ruby_parser_encodingrb_enc_from_encodingrb_ruby_parser_end_seen_prb_str_subseqrb_int2bigrb_respond_torb_string_value_cstrrb_str_new_frozenrb_fix2intrb_obj_freeze_inlinerb_string_valuerb_num2intrb_error_arityrb_thread_currentrb_ensurerb_num2uintrb_str_replacerb_vsprintfInitVM_ripperrb_cObjectrb_define_classrb_define_alloc_funcInit_ripperrb_define_methodrb_define_private_methodrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/alt/ruby34/lib64'���Iii
Tui	^P�%��X�%@�`�%`�%��% ���%0���%hZ��%����%���%fZ��%��ȸ%�и%�`ظ%@��%�`�%���%�`�%�� �%�`(�%�Y0�%�`8�%�`@�%�`H�%aP�%	aX�%a`�%ah�%(ap�%3ax�%;a��%Ba��%Ma��%Va��%`a��%ia��%ra��%{a��%�a��%�aȹ%�aй%�aع%�a�%�a�%�a�%�a��%�a�%�a�%�a�%b�%b �%b(�%"b0�%+b8�%3b@�%<bH�%FbP�%NbX�%Ub`�%]bh�%mbp�%�bx�%�b��%�b��%�b��%�b��%�b��%�b��%�b��%�b��%�b��%cȺ%*cк%3cغ%Ec�%Yc�%dc�%uc��%}c�%�c�%�c�%�c�%�c �%�c(�%�c0�%�c8�%
d@�%dH�%%dP�%)dX�%5d`�%Edh�%^dp�%rdx�%�d��%�d��%�d��%�d��%�d��%�d��%�d��%�d��%�d��%�dȻ%�dл%�dػ%�d�%�d�%�d�%�d��%�d�%�d�%e�%e�%e �%e(�%e0�% e8�%%e@�%6eH�%LeP�%QeX�%Ue`�%]eh�%aep�%eex�%ie��%qe��%ue��%}e��%�e��%�e��%�e��%�e��%�e��%�eȼ%�eм%�eؼ%�e�%f�%f�%%f��%,f�%9f�%Af�%Lf�%Xf �%af(�%mf0�%uf8�%�f@�%�fH�%�fP�%�fX�%�f`�%�fh�%�fp�%�fx�%�f��%�f��%�f��%�f��%�f��%�f��%�f��%�f��%�f��%�fȽ%�fн%�fؽ%�f�%g�%g�%g��%�g�%g�%g�%g�%g �%g(�% g0�%m8�%$g@�%,gH�%��P�%0gX�%=g`�%Jgh�%Tgp�%]gx�%hg��%tg��%xg��%)���%|g��%Ag��%Ng��%�g��%�g��%�gȾ%�gо%�gؾ%��%�g�%�g�%�g��%�g�%�h�%�g�%�g�%�g �%�g(�%�g0�%�g8�%h@�%hH�%hP�%hX�%��`�%)hh�%7hp�%:�x�%/h��%Gh��%Lh��%Wh��%bh��%lh��%vh��%�h��%n��%�hȿ%�hп%�hؿ%�h�%�h�%�h�%o��%�h�%�n�%�h�%�h�%�h �%�h(�%�h0�%�h8�%wn@�%�hH�%iP�%8nX�%'n`�%ih�%ip�%ix�%i��%o��%,i��%'i��%:i��%Di��%Mi��%Ri��%Zi��%_i�%di�%hi�%li�%qi�%vi�%{i��%�i�%�j�%�i�%�i�%�i �%�i(�%�i0�%�i8�%�i@�%�iH�%�iP�%�iX�%�i`�%�ih�%�ip�%�ix�%�i��%�i��%�i��%j��%
j��%j��%j��%&h��%#j��%+j�%4j�%<j�%Cj�%Oj�%Wj�%cj��%pj�%uj�%zj�%�j�%(� �%�j(�%�j0�%�j8�%�j@�%�jH�%�jP�%�jX�%k`�%6�h�%kp�%kx�%k��%k��%"k��%����%'k��%2k��%>k��%�i��%Ck��%Nk��%;h��%Zk��%^k��%ik��%mk��%uk��%�k�%�k�%k�%�k�%�k �%�k(�%�k0�%�k8�%�k@�%�kH�%�kP�%�kX�%�k`�%�kh�%�kp�%�kx�%�k��%�k��%l��%l��%l��%%l��%,l��%8l��%>l��%Gl��%Ol��%Tl��%_l��%hl��%sl��%�l��%�l�%�l�%�l�%�l�%�l �%�l(�%�l0�%�l8�%�l@�%�YH�%�lP�%k^X�%�l`�%�lh�%�lp�%mx�%m��%^m��%%m��%/m��%h���%�m��%4m��%@m��%]m��%dm��%�m��%Rm��%xm��%�m��%�m��%�m��%���%�m�%�m�%�m�%�m �%�m(�%�0�%�\8�%�m@�%�mH�%�mP�%�mX�%�m`�%�mh�%�mp�%�mx�%����%
n��%����%n��%n��%%n��%6n��%Cn��%Mn��%Qn��%�j��%^n��%nn��%�n��%�h��%n���%�n�%�n�%�n�%�n�%�n �%�n(�%Yn0�%�j8�%�n@�%�nH�%�nP�%�nX�%�n`�%
oh�%op�%ox�%&o��%0o��%5o��%@o��%Go��%Mo��%Wo��%bo��%mo��%zo��%�o��%����%����%����%�o��%EY��%7g�%�W �%��(�%��0�%��8�%����%��%
��%��%���%R��%���%^��%���%���%���%���%���%���%���%���%��%���%��%��%��%��%��%��%	��%
��%��%�%�%�% �%�(�%0�%�8�%�@�%H�%P�%X�%�`�%h�%p�%x�%��%��%��%��%���%��%���%���%��%��%���%���%��% ��%!��%���%"�%#�%$�%%�%& �%'(�%(0�%)8�%*@�%+H�%,P�%-X�%.`�%/h�%0p�%1x�%���%���%2��%3��%4��%5��%6��%7��%���%8��%9��%:��%;��%<��%=��%>��%?�%@�%A�%B�%C �%D(�%�0�%E8�%F@�%GH�%HP�%IX�%J`�%Kh�%Lp�%�x�%���%M��%N��%���%���%O��%P��%Q��%S��%T��%U��%V��%W��%X��%���%Y��%Z�%[�%\�%]�%_ �%`(�%a0�%b8�%c@�%dH�%�P�%eX�%�`�%fh�%gp�%hx�%i��%j��%k��%l��%���%m��%n��%o��%p��%q��%r��%s��%t��%u��%v��%w��%x�%y�%��%z�%� �%{(�%|0�%}8�%~@�%H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���H��H�h%H��t��H����5�a%�%�a%��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h�������%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%�U%D���%}U%D���%uU%D���%mU%D���%eU%D���%]U%D���%UU%D���%MU%D���%EU%D���%=U%D���%5U%D���%-U%D���%%U%D���%U%D���%U%D���%
U%D���%U%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%�T%D���%}T%D���%uT%D���%mT%D���%eT%D���%]T%D���%UT%D���%MT%D���%ET%D���%=T%D���%5T%D���%-T%D���%%T%D���%T%D���%T%D���%
T%D���%T%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%�S%D���%}S%D���%uS%D���%mS%D���%eS%D���%]S%D���%US%D���%MS%D���%ES%D���%=S%D���%5S%D���%-S%D���%%S%D���%S%D���%S%D���%
S%D���%S%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%�R%D���%}R%D���%uR%D���%mR%D���%eR%D���%]R%D���%UR%D���%MR%D���%ER%D���%=R%D���%5R%D���%-R%D���%%R%D���%R%D���%R%D���%
R%D���%R%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%�Q%D���%}Q%D���%uQ%D���%mQ%D���%eQ%D���%]Q%D���%UQ%D���%MQ%D���%EQ%D���%=Q%D���%5Q%D���%-Q%D���%%Q%D���%Q%D���%Q%D���%
Q%D���%Q%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%�P%D���%}P%D���%uP%D���%mP%D���%eP%D���%]P%D���%UP%D���%MP%D���%EP%D���%=P%D���%5P%D���%-P%D���%%P%D���%P%D���%P%D���%
P%DH�%H�=��1��h���H��H�=��1��W����b�H�=#�1��D����O��J�H�%H�=)P%H�"P%H9�tH��O%H��t	�����H�=�O%H�5�O%H)�H��H��H��?H�H�tH��O%H��t��fD�����=�O%u+UH�=�O%H��tH�=�7%����d�����O%]������w������S�H�=?c���H�O%�H�=0cH������H�=#cH�C�����H�=cH�C����H�=cH�C����
H�=cH�C ����H�=�bH�C(�v����H�=�bH�C0�a����H�=�bH�C8�L����H�=�bH�C@�7����H�=�bH�CH�"����H�=�bH�CP�
����H�=�bH�CX����H�=�bH�C`����	H�=�bH�Ch�����	H�=�bH�Cp����H�=�bH�Cx����H�=�bH�������H�=�bH����t����H�=�bH����\����H�=�bH����D����H�=�bH����,����	H�=�bH��������H�=ubH�������H�=jbH�������H�=^bH��������H�=RbH�������H�=IbH�������H�=:bH�������H�=*bH����l����H�=bH����T����H�=bH����<����
H�=bH����$����H�=�aH�������H�=�aH�����H�=�aH�������H�=�aH�������H�=�aH�� ����
H�=�aH��(����H�=�aH��0�|����H�=�aH��8�d����H�=�aH��@�L����H�=�aH��H�4����H�=�aH��P�����H�=zaH��X�����H�=jaH��`����	H�=[aH��h�����H�=MaH��p����H�=GaH��x����H�=8aH�������	H�=)aH����t����H�=aH����\����H�=
aH����D����H�=�`H����,����	H�=�`H��������H�=�`H�������	H�=�`H�������H�=�`H��������H�=�`H�������H�=�`H�������	H�=�`H�������H�=�`H����l����
H�=�`H����T����H�=z`H����<����H�=t`H����$����H�=p`H�������H�=d`H�����H�=]`H�������H�=V`H�������
H�=J`H�� ����	H�=@`H��(����H�=2`H��0�|����H�=&`H��8�d����H�=`H��@�L����H�=`H��H�4����H�=`H��P�����
H�=`H��X�����H�=�_H��`����H�=�_H��h�����H�=�_H��p����	H�=�_H��x����H�=�_H�������H�=�_H����t����
H�=�_H����\����H�=�_H����D����H�=�_H����,����
H�=�_H��������
H�=�_H�������H�=�_H�������
H�=y_H��������H�=o_H�������
H�=i_H�������	H�=__H�������
H�=Q_H����l����
H�=G_H����T����H�==_H����<����	H�=._H����$����
H�= _H�������	H�=_H�����H�=_H�����H�=�^H�����
H�=�^H�� ��H�=�^H��(��H�=�^H��0�|�H�=�^H��8�d�H�=�^H��@�L�H�=�^H��H�4�H�=�^H��P��	H�=�^H��X��H�=�^H��`���H�=�^H��h���H�=�^H��p��H�=�^H��x��H�=�^H�����H�=�^H����t�H�=s^H����\�	H�=d^H����D�
H�=V^H����,�H�=L^H�����H�==^H�����H�=2^H������H�='^H������
H�=^H�����H�=^H�����H�=^H�����H�=�]H����l�H�=�]H����T�H�=�]H����<�H�=�]H����$�H�=�]H����H�=�]H�����H�=�]H�����H�=�]H�����H�=�]H�� ��H�=�]H��(��H�=�]H��0�|�	H�=w]H��8�d�	H�=i]H��@�L�H��H[���UH��SH�����H��H�5?]H��H���9�H�=PV��H���P��H��H�����H�=�����H���'��H��H������H�=V��H�����H��H�����H�=�U��H������H��H�����H�=�U�d�H�����H��H���\��
H�=�U�;�H�����H��H���3��
H�=�U��H���Z��H��H���
��	H�=�U���H���1��H��H������H�=dU��H�����H��H�����H�=GU��H������H��H�����
H�=0U�n�H�����H��H���f��H�=U�E�H�����H��H���=��H�=�T��H���d��H��H�����H�=�T���H���;��H��H������H�=�T���H�����	H��H������H�=�T��H������H��H�����H�=�T�x�H�����H��H���p��	H�=kT�O�H�����H��H���G��H�=OT�&�H���n��H��H�����H�=5T��H���E��H��H�����H�=#T���H�����H��H������H�=����H������H��H�����H�=�S��H������H��H���z��	H�=�S�Y�H�����H��H���Q��H�=�S�0�H���x��H��H���(��H�=�S��H���O��	H��H�����H�=~����H���&��H��H������H�=K���H�����H��H�����H�=~S��H������H��H�����H�=u��c�H�����H��H���[��H�=Y��:�H�����H��H���2��H�=�R��H���Y��H��H���	��H�=|����H���0��H��H������H�=�R��H�����	H��H�����H�=�R��H������H��H�����H�={R�m�H�����H��H���e��	H�=dR�D�H�����H��H���<��H�=K���H���c��H��H�����H�=Y����H���:��H��H������H�=R���H�����H��H�����H�=����H������H��H�����H�=�Q�w�H�����H��H���o��H�=�Q�N�H�����H��H���F��H�=�Q�%�H���m��H��H�����H�=����H���D��H��H������H�=9����H�����H��H������H�=X���H������H��H�����H�=Q��H������H��H���y��H�=�P�X�H�����H��H���P��H�=�N�/�H���w��H��H���'��H�=�P��H���N��	H��H�����H�=�����H���%��H��H������H�=O��H�����H��H�����H�=UP��H������H��H�����H�=>P�b�H�����H��H���Z��H�=-��9�H�����H��H���1��H�=�O��H���X��H��H�����H�=�O���H���/��H��H������H�=�O��H�����H��H�����H�=�O��H������H��H�����H�=�O�l�H�����H��H���d��
H�=aO�C�H�����H��H���;��H�=IO��H���b��H��H�����H�=+O���H���9��H��H������H�=O���H�����H��H�����H�=�N��H������H��H�����
H�=�N�v�H�����H��H���n��
H�=�N�M�H�����H��H���E��H�=�N�$�H���l��H��H�����
H�=�N��H���C��H��H������H�=�����H�����H��H������H�=[N��H������H��H�����
H�=>N��H������H��H���x��H�=&N�W�H�����H��H���O��H�=	N�.�H���v��H��H���&��H�=����H���M��H��H������
H�=�M���H���$��H��H�������H�=�M��H�����H��H������H�=�M��H������H��H������H�=�M�a�H�����H��H���Y���H�=pM�8�H�����H��H���0���H�=�I��H���W��H��H������H�=1M���H���.��H��H�������H�=M��H�����H��H������H�=�L��H������H��H������H�=�L�k�H�����H��H���c���
H�=�L�B�H�����H��H���:���
H�=�L��H���a��H��H������H�=�����H���8��H��H�������
H�=pL���H�����H��H������H�=UL��H������H��H������
H�=>L�u�H�����H��H���m���H�=���L�H�����	H��H���D���
H�=L�#�H���k��H��H������
H�=�K��H���B��H��H�������H�=�K���H�����H��H�������H�=���H�������H��H������H�=�K��H�������H��H���w���H�=qK�V�H������H��H���N���	H�=RK�-�H���u���H��H���%���	H�=6K��H���L���H��H������
H�=K���H���#���H��H�������
H�=�J��H������H��H������H�=�J��H�������H��H������H�=�J�`�H������H��H���X���H�=�J�7�H������H��H���/���H�=���H���V���H��H������H�=�J����H���-���H��H�������H�=�����H������H��H������H�=IJ���H�������H��H������H�=2J�j��H������H��H���b���H�=J�A��H������H��H���9���H�=�I���H���`���H��H������
H�=�I����H���7���H��H�������H�=�I����H������H��H������H�=�I���H�������H��H������H�=m��t��H������H��H���l���
H�=qI�K��H������H��H���C���H�=,��"��H���j���H��H������	H�=6I���H���A���H��H�������	H�=I����H������H��H�������	H�=�H���H�������H��H������H�=�H�~��H�������H��H���v���H�=�H�U��H������H��H���M���	H�=�H�,��H���t���H��H���$���H�=[����H���K���H��H������H�=������H���"���H��H�������	H�=GH���H������H��H������H�=+H���H�������H��H������H�=H�_��H������H��H���W���	H�=�G�6��H���~���H��H���.���	H�=�G�
��H���U���H��H������H�=�G����H���,���H��H�������H�=�G���H������H��H������H�=�G���H�������H��H������H�=&��i��H������H��H���a���H�=OG�@��H������H��H���8���H�=0G���H���_��H��H�ߺ[H��]�	��f���UH��SH���~��H��H�5GH��H�������H�=>I���H������H��H������H�=
I���H�������H��H������H�=�F�f��H������H��H���^���H�=�F�=��H������H��H���5���H�=�A���H���\���H��H������H�=B����H���3���H��H�������H�=,F����H���
���H��H������H�=F���H�������H��H������H�=�G�p��H������H��H���h���
H�=xG�G��H������H��H���?���
H�=gG���H���f���H��H������H�=pE���H���=���H��H�������H�=VE����H������H��H�������H�=<E���H�������H��H������H�=E�z��H�������H��H���r���H�=�D�Q��H������H��H���I���H�=�F�(��H���p���H��H��� ���H�=kF���H���G���H��H������H�=�D����H������H��H�������
H�=�E���H������H��H������	H�=AD���H�������H��H���|���H�=%D�[��H������H��H���S���H�=D�2��H���z���H��H���*���H�=���	��H���Q���H��H������H�=�����H���(���H��H�������	H�=�D���H������H��H������H�=mC���H�������H��H������H�=NC�e��H������H��H���]���H�=1C�<��H������H��H���4���H�=3D���H���[���H��H������H�=������H���2���H��H�������H�=�B���H���	���H��H������H�=0C���H�������H��H������
H�=�B�o��H������H��H���g���H�=
C�F��H������H��H���>���H�=2B���H���e���H��H������H�=B����H���<���H��H�������
H�=�B����H������H��H�������
H�=�B���H�������H��H������H�=�A�y��H������H��H���q���	H�=�A�P��H������H��H���H���H�=~B�'��H���o���H��H������H�=@A���H���F���H��H������H�=}A����H������H��H�������H�=�A���H�������H��H������H�=�A���H�������H��H���{���H�=�@�Z��H������H��H���R���H�=�@�1��H���y���H��H���)���H�=v@���H���P���H��H������	H�=\@����H���'���H��H�������	H�=m@���H�����H��H�ߺ[H��]������H���
H�=�>�w���H�=�>H��#%�_���H�=�>H��#%�G���H�=�>H��#%�/���H�=�>H��#%����H�=~>H��#%����H�=u>H��#%�����	H�=l>H��#%�����H�=^>H�t#%����H�=O>H�d#%����H�=?>H�T#%����H�=0>H�D#%�o���H�=%>H�4#%�W���H�=>H�$#%�?���H�=>H�#%�'���	H�=�=H�#%����H�=�=H��"%����	H�=�=H��"%�����H�=�=H��"%�����H�=�=H��"%����	H�=�=H��"%����	H�=�=H��"%����H�=�=H��"%�g���	H�=~=H��"%�O���H�=p=H�t"%�7���	H�=e=H�d"%����H�=W=H�T"%����H�=N=H�D"%�����H�=I=H�4"%�����H�=@=H�$"%����
H�=5=H�"%����H�=+=H�"%����H�=#=H��!%�w���H�==H��!%�_���H�==H��!%�G���
H�==H��!%�/���
H�=�<H��!%����H�=�<H��!%����H�=�<H��!%�����
H�=�<H��!%�����
H�=�<H�t!%����
H�=�<H�d!%����
H�=�<H�T!%����
H�=�<H�D!%�o���	H�=�<H�4!%�W���
H�=�<H�$!%�?���H�=�<H�!%�'���H�=p<H�!%����H�=g<H�� %����
H�=^<H�� %�����H�=Q<H�� %����H�� %H���ff.�����iwHc�H�Z<�Bf��u��H�� %�@H��%H��PH��%��H�5�;H�81�����f��B��~Y��E1�A�L�L������� EE�H��I9�t���	u��H������	I9�u�H��GD�GH�W�H�E1���GH�WD�G�f�H�WPL�GX1�H�rL9�s�
��@����{����$t�f��J��-���A߃�]w4�Q�΅ҍBI�����1����H�)�H�5�%�4��]��r��Qи]��	vj��w]��_tX��߃�A���%]��H��WhH�wP��h��\���J��@u�H�JI9��O����J�@�]�f��ff.�@H��~1���|�*tIH��H9�}���*t��-t�H��H9�|�1��fDH�PH9�}�|-t H����f.��|�-u�H�D��|�-u�H�D�H��tcSH�H��H������+��DwEH��<Hc�H�>��@H�_ �H��tf�H�{ �����tH�[0H��u�[�1�[�@��f�AU1�ATI��H�5p�UH��SH��H��H���L���L9�w0I)�I��N�lcL�%O�D�L��H��1�H������L9�u�H��H��H�5ҫ1�[]A\A]���ff.��SH���W��H��t2H�4H�߸fDH���H��H��H�H�H9�u�[�D�[�f�H���v@��t�H���������w����1�H�5ں�-��ff.�f���H��1�H�5�����ff.�H���H�P H�H(H��H	�u	1��fDH��L�3�H��t0H�
H���1�H�5��H������H���f.�H��L�����@H���H�P81�H��u�DH��H�
H���H�5s�H���Z���H���D������H���A�0���9�|NUSH����9�����H����H��Hc��o���D���H���H��A)�[]Mc�L�ÐMc�L��f�Hc��H����H���@�4���9��}�fD�SH������H���Hc���H���[��AVAUATUSH��H��H��dH�%(H�D$1�H��t~��D�����L�c`���Hc�HCHH�C`�H���H��H��I���V�����/��H��pH��L�4$�H�����D���H���HǃL�c`H�D$dH3%(u
H��[]A\A]A^�腿��DH�H��L�FH�H�@H�JL�RH�P8�VI�H�HHL�PXD�NL�L�M)�H�L�H�PP���H�H`����V�����htH�@@��h��"���f�AT��@�rUH��SL���H�� �׽���rH��H���׿��H�C L��H�[(H���[]A\�ff.��U�8H���S�@H��H�� �|����@H��H���|���H�UH��€t	�H�H�UH��%��oEHc�H��CH	‹EH��CH�E H�C(H�C H��H�C0H�E H��[]��SH��H�� @�t$H�|$�dH�%(H�D$1�����H��%H�L$H��pH�D$H�r0����H�\$dH3%(uH�� �[�莽��ff.�USH��H��H���Hc��H������H��H�H��H�(�l��H���H��H��[]�ff.�SH���H��LJ�H��t>���
[����<H��ǃ�<�t���H���[�LJ�<��<�_���H����fDH�H�����A�wH�7Hc�H�>��DH�F �SH���H����qtH�����rt
���-���H��H��1�H�5���i��1�[�DH�H�����A�wH��6Hc�H�>��DH�F(�SH���H����qtH�����rt
��轼��H��H��1�H�5f����1�[�DH�H�����A�wVH�
o6H�V(Hc�H�>��f���������������SH��H����qtH����rt
������H��H��H�5�1�[�P��H�H�����A�!w6H��5Hc�H�>��DH�F0�1��DH�F(�H�F �SH�d�H����qtH�c���rt
��蕻��H��H��1�H�5������1�[�ff.�f���H�H�����PŃ�4�0H�
�5Hc�H�>��DH� �����HcG�H�G H�xH�PH���H׸H���2H��H��H�H�H9�u��fDH�G H�xH�PH����H׸H���2H��H��H�H�H9�u��fDH�G �H�G H�xH�PH����H׸H���2H��H��H�H�H9�u��fDH�G H�xH�PH��tGH׸�H���2H��H��H�H�H9�u��R������H�=�H��1��m���D��f���H��L��I�IH��A�q H)�H��M�IH�8L�@�d���H���ff.�@H�WH�FH9Gu*H9Vu$H��H�vH��������H�����fD��f���H9�t_USH��H�H�H��H������9��E�SŃ�4�H�
�4Hc�H�>���H�v H� H��[]�]���D1��D��N(9O(u'H�v H� �6����������@�F9G����H��[]�D��N(9O(u�H�v H� �6�����������@�H�N(H9O(u��N09O0u�����H�O(H9N(u����H�N(H9O(u�H�N0H9O0�w���뎐H�F H9G �����a������6�����H���,���H��H�=�H��1��x����������*���fDAUATA��UH��SH��H�����D��H��H��I��跾����u3H������D��H��H��譽��H��H��t4H��H��[]A\A]�fDH�UH�5ŰH��H�J��1��վ���苴����
H���>���L��I����L��H��1�H�5+�蟾���ff.�f��G��~+H�?H;7t-�H��H���H��H9t�t
��H9�u�1����ø�ff.�H��H���I��H�pH�L�HH��t1L�FI��I��w�DI�@H��vFI��H�IM��tM�IM��u�1�H��vL��H���N������E�H���L��I��f�H��trH��wDI��vyL��L����������M��@��M����@��t<��t8I�H�H�D�I��H��ÐL��H�������¸��t�����H���H��`L��H�����1��Z���ff.�U1Ҿ�H��S�H��������u��H�5��H��1����H����[]�fDH��dH�%(H�D$1�H�$H��tH�H������t@��tH�D$dH3%(uFH���fDH�v H���Ĵ����t�H�$H��t�H�(?��H�v H���$�����t�H�$H��u���0���AVAUE1�ATL�%$1UH��SH��H��dH�%(H�D$1�H����H�H������.w$Ic�L�>��f�H��H�C0H��u�H�[ H��u�E1��1H�S(H���+H�H�������H�z(u�M��LD�H�L$dH3%(L���SH��[]A\A]A^�fDH�s(H��t�H�{0t�H��� ���H��t�M��H�[0LD��k���H�s H�[(H���W���H�����H���F����x����H�s H���;���H������H���*���L�s(M��LD�M��t-I�H������uKI�v0H�����H����M�v8M��u�H�[0H�����������H��H��E1��������DH�5j�H��1�E1�蔺��������H�=4��'���H��pH��H�$H�5%H�0�u������E1��s����#�������t!�� tT��	t/��
t;}������1��1���
u��1������PH�������fD�����DH�H�H����H�H��H	�H��H���7���H�H��H������u:H�G H��u�/f.�H�P H��tH��H�H��H������t�ɀH��H����fDI��H�?I��H��v����¸��t�I�x1�H��v�L������������S�9H��H��dH�%(H�D$1���iH�=�萵��H��pH��H�$H��	%H�0�޲��H�D$dH3%(uH��[�胰��AUI���ATI��UH��H�=_�SH��H��(dH�%(H�D$1�����L��H�$�
���H�UL��H��螮��H��H�D$��H�UH��H��肮��I�}H��H�D$H��%H�0�2���H�\$dH3%(uH��(�����[]A\A]��ͯ��ff.�f�ATI��UH��S�H��<Tt
~:<ft:<tuH�5��H���S�����t?H��pH���H��[L��]A\��f�<Fu�H�5w�H��������u�[]A\�@[�]A\�fD��SH���s�����x��i����	Ј�i[����ATI��UH��SH��H�� H�OHH�wPdH�%(H�D$1�H9�s�< �;<	�3<#uwA�$�H���)�H��H��H����H���H���H�H����H�5��L���&���������H��WD�+H�=Ĩ����H��H�$����H���H��H��葬��H��pH��H�D$H��%H�0�>���H�D$dH3%(��H�� []A\ÐH�5�L��葮����t}H�5�L���~�������H��pH���L��H�������H��H9���������fDH�5B�L���1�����u���H��� ��H�W���D��H���@��H�:������H`�&�������ff.�@ATUSH��PdH�%(H�D$H1���i��H��H����I��H�wHH��L��H��A���G��D$9C���CD$���D$9C��}
A�����/H�=8��S���L��H�D$ �F���H���L��H���Ԫ��L�#H�D$(L���$���H���L��H��貪��H�L$ �H��pH�D$0HcCH�DH�D$8H�'%H�0�O����H�D$HdH3%(u	H��P[]A\����f.�H���װ��H��1�H��tH�BH� u�8_����H���f�H�B��f.�SH��H��tH�H������Ot ��+tH��[�fDH�{0u�H�[ ��1�H�5?��z���H�H������ff.�H�H������Ot�H�51�1��B���f�ATI��UH�,7SH���m���L9�tdH9�r�I�H��H9�t?�;y�f�L��H��H���"�����~0H�H�H9�tvf��;x�H��H9�u�[�]A\�[�]A\�[�]A\�H9�r��DH��H9�t׀;y����SH��H�WH�wH��K����[��SH��H��H���H�sX艪����~[�H���H��H�5s�H�P1��G��������[�SH�GPH��H�p������~Hc�H��HSP[�ff.�USH��H��dH�%(H�D$1�H��t
�A�s�H�{`H�sXH���H)������fH�����H��pH��H�,$�H���ī��H�CH�SH��H�p�`���H�CXH�CPH�C`H�D$dH3%(uH��[]��H����SH��H�?H��t�O���H��[�F���fDUH��SH��H���H�XH��t'H�HH�ڋq9s�|H�RH�PH��wVfDH�8H�WH�H��v���H���H�xH�WH�PH��vH��[]�g����H��[]�f�H���H���H�����1�H�5���
���H���H�PH�RH�PH���m����ff.�ATUH��SL���H��I�$�f����H���H�H��tH��H9�u�[]A\����L�g����L����fDUH��SH��H�H��vDH�_����H��H��w�H�}H��v@H�_�_���H��H��w�H�}H��v@H�_�?���H��H��w�H��H��[]鈨���USH��H��H���H�GH�oH��tH�W�J9Hu7�R���H���H���H��H�����h u1H�kxH��[]�fDH��H�5&�1�菤��H����fD��:H�1�H��蜨��H�sxH��H�sx��h t�H��H�߹�:[H��]�n���ff.���UH��SH��H��(dH�%(H�D$1���hx7�����x����h����	Ј�hH�D$dH3%(u[H��([]þ H�=|����H��H�$���H���H��H���q���H��pH��H�D$H��$H�0������ץ�����AUATI��USH��H��H��~.�|�-H�j�L�j�t/A�|�-L��tDH��H��H��[]A\A]�A�u���fDJ�<.�H�5�胨����u���DM�l��H�5ˆL���_�����t��H�5��L���G�����u�H��u��H�5��L���)�����H��H���^����H�H�w H������6uH�=g�1��/����H�=j�1�����f.�UH��SH��H��8dH�%(H�D$(1����E<'w1H�C"��Hc�H�>��fDH�50�H���!������EH��衩�����5���2����xH��u1H���1�����u%H���H�D$(dH3%(�H��8[]�H�uH�=�1��V���H�D$H�
�$H�H�D$�ݦ�����H���H�=DžH�D$ 1�����H�|$ H���0���H�t$���H�S`L�C8H��H��H�CH���H��H)‰$�T$H�SP�L$H)‰T$H��赣��H�� ���H��Hǃ �֨��fDH�5������@H�5�����@H�5����H��H�=�1��c���H�D$������@����h��x�@������9��t�DH������ATI��H��H��UH��SH���8�����uLH�I;$s3��у�	��v&�� t!��w!�[]H��A\������@�[]A\�fD[1�]A\ÐATH��USH��H��1�H)�H9�|9E��H9�s�~�
t[H)�H��H��譟��1҅�uE��t
H9�w&D1�H9���[��]A\�f�H��H9�t?��ƒ�	��v� t���H�F�H9�v�~�
tH��1�H)�H9��H����H���H�F���ff.�f�ATI��UH��SH��� �i���H�sHH��L� I��H���L��I�C����L���[]A\�ff.�f�ATU��SH��H��H�wPH�`dH�%(H�D$1�H9�rmtRH���H)��u�����I���K���H��pH��L�$$�H��� ���H�sH��H���A���H�CPH���H�C`H�D$dH3%(u!H��[]A\�H���$H�5��H�81����茠��ff.��UH���SH���]�����H��H�H�C���H�kH�H��H��[]�ff.��USH��H��H�/H�}���H�EH�+H�}���H�EH�+H�}H��t�v���H�EH�+H�EH��[]�@ATI��US�7�������H��H�WH�GH;WtH�JH�KL�$�H��[]A\�f�H�,H�ҹHD�H9�}�H�oH�4�H������H�SH�CH9�~�H���H��H��H�CH9�u��f�UH��SH��H��H��tH�>H�����G�v=H����qtH����rt�П��H��H�5��H��1�����H��H��[]�f���Hu�H���H��t�H�P(H�r H�p(H��H��[]�DH�5ހ1��¦���ATUH��S�T����@L� �w���1�H��H���I��H�C���1�H����H�C H�C1�H�C(H�C0H�C8M��u9H�CH���H�4H�����h u*H�exH���[]A\�f.�1��y������^:H�.�H��謟��H�ExH�4H�ux��h t�H��_:H��胟��H���[]A\��H��v*UH��SH��H��HcvH�;st*�V�SH�,�H��[]ÐH��1�H�54�������H�ljsHc��Ӝ��HcsH��f.�UH��SH��H������H���H��H��H�p�i���H���H�pH��tHc��H��H��[]�D���@H��[]�f�UH��SH��H�����H���H��H��H�0H��[]����@USH��8dH�%(H�D$(1�H��t$H��H���H��tH�H��H������;��4v!H�D$(dH3%(��H��8[]�fDH�H��s�H��t*H�T$蠡����u<H���Hc��H������@H�=��$����H��H�������KH�=ԗ蟠��H�L$�H��pH�D$H�H��H�H�DH�D$HcD$H�DH�D$ H���$H�0�ȝ���"����~���ff.�AUH���$I��H�5�}ATI��Hc�UH��S��H�����H��H��H��}H��}HM�1�脙��A�L$A�$1�E�L$E�D$H�5�}H���`���1�H�5�}H���O���M��tj�����w_H�8Hc�H�>��I�EH����@:H��t;H�8H�5{H������qtH�0{��rt�d���H��H�5P{H��1����H��H��H�5�|1�[]A\A]�Ř��DI�}�W���H�5��H��H��1�裘���I�EH�����9H��t�H�8H��zH������qtH��z��rt�ך��H��H�5�zH��1��S����n���I�EH����`9H���W���H�8H�QzH������qtH�Lz��rt耚��H��H�5lzH��1��������I�EH����	9H������H�8H��yH������qtH��y��rt�)���H��H�5zH��1�襗�����I�EH�����8H�������H�8H��yH������qtH��y��rt�ҙ��H��H�5�yH��1��N����i���I�EH����[8H���R���H�8H�LyH������qtH�Gy��rt�{���H��H�5gyH��1��������I�EH����8H�������H�8H��xH������qtH��x��rt�$���H��H�5yH��1�蠖�����I�EH�����7H�������H�8H��xH������qtH��x��rt�͘��H��H�5�xH��1��I����d���I�EH����V7H���M���H�8H�GxH������qtH�Bx��rt�v���H��H�5bxH��1����
���I�EH�����6H�������H�8H��wH������qtH��w��rt����H��H�5xH��1�蛕�����I�EH�����6H�������H�8H��wH������qtH��w��rt�ȗ��H��H�5�wH��1��D����_���I�EH����Q6H���H���H�8H�BwH������qtH�=w��rt�q���H��H�5]wH��1��������I�EH�����5H����H�8H��vH������qtH��v��rt����H��H�5wH��1�薔�����I�EH�����5H�������H�8H��vH������qtH��v��rt�Ö��H��H�5�vH��1��?����Z���I�EH����L5H���C���H�8H�=vH������qtH�8v��rt�l���H��H�5XvH��1��������I�EH�����4H�����H�8H��uH������qtH��u��rt����H��H�5vH��1�葓�����I�EH�����4H�������H�8H��uH������qtH��u��rt辕��H��H�5�uH��1��:����U���I�EH����G4H���>���H�8H�8uH������qtH�3u��rt�g���H��H�5SuH��1�������I�EH�����3H�����H�8H��tH������qtH��t��rt����H��H�5�tH��1�茒�����I�EH�����3H�������H�8H��tH������qtH��t��rt蹔��H��H�5�tH��1��5����P���I�EH����B3H���9���H�8H�3tH������qtH�.t��rt�b���H��H�5NtH��1��ޑ�����I�EH�����2H�����H�8H��sH������qtH��s��rt����H��H�5�sH��1�臑�����I�EH�����2H�������H�8H��sH������qtH��s��rt贓��H��H�5�sH��1��0����K���I�EH����=2H���4���H�8H�.sH������qtH�)s��rt�]���H��H�5IsH��1��ِ����I�EH�����1H������H�8H��rH������qtH��r��rt����H��H�5�rH��1�肐�����I�EH�����1H�������H�8H��rH������qtH�{r��rt诒��H��H�5�rH��1��+����F���I�EH����81H���/���H�8H�)rH������qtH�$r��rt�X���H��H�5DrH��1��ԏ�����I�EH�����0H������H�8H��qH������qtH��q��rt����H��H�5�qH��1��}������I�EH�����0H�������H�8H�{qH������qtH�vq��rt誑��H��H�5�qH��1��&����A���I�EH����30H���*���H�8H�$qH������qtH�q��rt�S���H��H�5?qH��1��ώ�����I�EH�����/H������H�8H��pH������qtH��p��rt���H��H�5�pH��1��x������I�EH�����/H���|���H�8H�vpH������qtH�qp��rt襐��H��H�5�pH��1��!����<���I�EH����./H���%���H�8H�pH������qtH�p��rt�N���H��H�5:pH��1��ʍ�����I�EH�����.H�����H�8H��oH������qtH��o��rt���H��H�5�oH��1��s�����I�EH�����.H���w�H�8H�qoH������qtH�lo��rt蠏��H��H�5�oH��1������7�I�EH����).H��� �H�8H�oH������qtH�o��rt�I���H��H�55oH��1��Ō�����I�EH�����-H�����H�8H��nH������qtH��n��rt��H��H�5�nH��1��n�����I�EH����{-H���r�H�8H�lnH������qtH�gn��rt蛎��H��H�5�nH��1������2�I�EH����$-H����H�8H�nH������qtH�n��rt�D���H��H�50nH��1�������I�EH�����,H�����H�8H��mH������qtH��m��rt���H��H�5�mH��1��i�����I�EH����v,H���m�H�8H�gmH������qtH�bm��rt薍��H��H�5�mH��1������-�I�EH����,H����H�8H�mH������qtH�m��rt�?���H��H�5+mH��1�車�����I�EH�����+H�����H�8H��lH������qtH��l��rt���H��H�5�lH��1��d�����I�EH����q+H���h�H�8H�blH������qtH�]l��rt葌��H��H�5}lH��1��
����(�I�EH����+H����H�8H�lH������qtH�l��rt�:���H��H�5&lH��1�趉�����I�EH�����*H�����H�8H��kH������qtH��k��rt���H��H�5�kH��1��_����z�I�EH����l*H���c�H�8H�]kH������qtH�Xk��rt茋��H��H�5xkH��1������#�I�EH����*H����H�8H�kH������qtH�k��rt�5���H��H�5!kH��1�豈�����I�EH�����)H�����H�8H��jH������qtH��j��rt�ފ��H��H�5�jH��1��Z����u�I�EH����g)H���^�H�8H�XjH������qtH�Sj��rt臊��H��H�5sjH��1�������I�EH����)H����H�8H�jH������qtH��i��rt�0���H��H�5jH��1�謇�����I�EH�����(H�����H�8H��iH������qtH��i��rt�ى��H��H�5�iH��1��U����p�I�EH����b(H���Y�H�8H�SiH������qtH�Ni��rt肉��H��H�5niH��1������I�EH����(H����H�8H��hH������qtH��h��rt�+���H��H�5iH��1�视�����I�EH�����'H�����H�8H��hH������qtH��h��rt�Ԉ��H��H�5�hH��1��P����k�I�EH����]'H���T�H�8H�NhH������qtH�Ih��rt�}���H��H�5ihH��1������I�EH����'H�����H�8H��gH������qtH��g��rt�&���H��H�5hH��1�袅����I�EH�����&H�����H�8H��gH������qtH��g��rt�χ��H��H�5�gH��1��K����f�I�EH����X&H���O�H�8H�IgH������qtH�Dg��rt�x���H��H�5dgH��1�����I�EH����&H�����H�8H��fH������qtH��f��rt�!���H��H�5
gH��1�蝄����I�EH�����%H�����H�8H��fH������qtH��f��rt�ʆ��H��H�5�fH��1��F����a�I�EH����S%H���J�H�8H�DfH������qtH�?f��rt�s���H��H�5_fH��1�����
�I�EH�����$H�����H�8H��eH������qtH��e��rt����H��H�5fH��1�蘃����I�EH�����$H�����H�8H��eH������qtH��e��rt�Ņ��H��H�5�eH��1��A����\�I�EH����N$H���E�H�8H�?eH������qtH�:e��rt�n���H��H�5ZeH��1������I�EH�����#H�����H�8H��dH������qtH��d��rt����H��H�5eH��1�蓂����I�EH�����#H�����H�8H��dH������qtH��d��rt���H��H�5�dH��1��<����W�I�EH����I#H���@�H�8H�:dH������qtH�5d��rt�i���H��H�5UdH��1������I�EH�����"H�����H�8H��cH������qtH��c��rt����H��H�5�cH��1�莁����I�EH�����"H�����H�8H��cH������qtH��c��rt軃��H��H�5�cH��1��7����R�I�EH����D"H���;�H�8H�5cH������qtH�0c��rt�d���H��H�5PcH��1������I�EH�����!H�����H�8H��bH������qtH��b��rt�
���H��H�5�bH��1�艀����I�EH�����!H�����H�8H��bH������qtH��b��rt趂��H��H�5�bH��1��2����M�I�EH����?!H���6�H�8H�0bH������qtH�+b��rt�_���H��H�5KbH��1�������I�EH����� H�����H�8H��aH������qtH��a��rt����H��H�5�aH��1������I�EH����� H�����H�8H��aH������qtH�}a��rt豁��H��H�5�aH��1��-���H�I�EH����: H���1�H�8H�+aH������qtH�&a��rt�Z���H��H�5FaH��1���~�����I�EH�����H�����H�8H��`H������qtH��`��rt����H��H�5�`H��1��~����I�EH�����H�����H�8H�}`H������qtH�x`��rt謀��H��H�5�`H��1��(~���C�I�EH����5H���,�H�8H�&`H������qtH�!`��rt�U���H��H�5A`H��1���}�����I�EH�����H�����H�8H��_H������qtH��_��rt���H��H�5�_H��1��z}����I�EH�����H���~�H�8H�x_H������qtH�s_��rt���H��H�5�_H��1��#}���>�I�EH����0H���'�H�8H�!_H������qtH�_��rt�P��H��H�5<_H��1���|�����I�EH�����H�����H�8H��^H������qtH��^��rt�~��H��H�5�^H��1��u|����I�EH�����H���y�H�8H�s^H������qtH�n^��rt�~��H��H�5�^H��1��|���9�I�EH����+H���"�H�8H�^H������qtH�^��rt�K~��H��H�57^H��1���{�����I�EH�����H�����H�8H��]H������qtH��]��rt��}��H��H�5�]H��1��p{����I�EH����}H���t�H�8H�n]H������qtH�i]��rt�}��H��H�5�]H��1��{���4�I�EH����&H����H�8H�]H������qtH�]��rt�F}��H��H�52]H��1���z�����I�EH�����H�����H�8H��\H������qtH��\��rt��|��H��H�5�\H��1��kz����I�EH����xH���o�H�8H�i\H������qtH�d\��rt�|��H��H�5�\H��1��z���/�I�EH����!H����H�8H�\H������qtH�
\��rt�A|��H��H�5-\H��1��y�����I�EH�����H�����H�8H��[H������qtH��[��rt��{��H��H�5�[H��1��fy����I�EH����sH���j�H�8H�d[H������qtH�_[��rt�{��H��H�5[H��1��y���*�I�EH����H����H�8H�
[H������qtH�[��rt�<{��H��H�5([H��1��x������I�EH�����H������H�8H��ZH������qtH��Z��rt��z��H��H�5�ZH��1��ax���|��I�EH����nH���e��H�8H�_ZH������qtH�ZZ��rt�z��H��H�5zZH��1��
x���%��I�EH����H�����H�8H�ZH������qtH�Z��rt�7z��H��H�5#ZH��1��w������I�EH�����H������H�8H��YH������qtH��Y��rt��y��H��H�5�YH��1��\w���w��I�EH����iH���`��H�8H�ZYH������qtH�UY��rt�y��H��H�5uYH��1��w��� ��I�EH����H���	��H�8H�YH������qtH��X��rt�2y��H��H�5YH��1��v������I�EH�����H������H�8H��XH������qtH��X��rt��x��H��H�5�XH��1��Wv���r��I�EH����dH���[��H�8H�UXH������qtH�PX��rt�x��H��H�5pXH��1��v�����I�EH����
H�����H�8H��WH������qtH��W��rt�-x��H��H�5XH��1��u������I�EH�����H������H�8H��WH������qtH��W��rt��w��H��H�5�WH��1��Ru���m��I�EH����_H���V��H�8H�PWH������qtH�KW��rt�w��H��H�5kWH��1��t�����I�EH����H������H�8H��VH������qtH��V��rt�(w��H��H�5WH��1��t�����I�EH�����H������H�8H��VH������qtH��V��rt��v��H��H�5�VH��1��Mt���h��I�EH����ZH���Q��H�8H�KVH������qtH�FV��rt�zv��H��H�5fVH��1��s�����I�EH����H������H�8H��UH������qtH��U��rt�#v��H��H�5VH��1��s�����I�}H�H������<������=����>�����r��H�5�WH��H��1��Rs���m��I�EH�5�VH��H�P 1��4s���O��I�EH�5hVH��H�P 1��s���1��I�}H�H������<�
�x��=����>����-r��H�5WH��H��1���r������I�}H�H������<���R��=����>������q��H�5�VH��H��1��|r�����I�}H�H������<������=����>�h���q��H�5mVH��H��1��/r���J��I�EH����<H���3��H�8H�-TH������qtH�(T��rt�\t��H��H�5HTH��1���q������I�EH�����H������H�8H��SH������qtH��S��rt�t��H��H�5�SH��1��q�����I�EH�����H������H�8H�SH������qtH�zS��rt�s��H��H�5�SH��1��*q���E��I�EH����7H���.��H�8H�(SH������qtH�#S��rt�Ws��H��H�5CSH��1���p������I�EH�����H������H�8H��RH������qtH��R��rt�s��H��H�5�RH��1��|p�����I�EH�����H������H�8H�zRH������qtH�uR��rt�r��H��H�5�RH��1��%p���@��I�EH����2H���)��H�8H�#RH������qtH�R��rt�Rr��H��H�5>RH��1���o������I�EH�����H������H�8H��QH������qtH��Q��rt�q��H��H�5�QH��1��wo�����I�EH�����H���{��H�8H�uQH������qtH�pQ��rt�q��H��H�5�QH��1�� o���;��I�EH����-H���$��H�8H�QH������qtH�Q��rt�Mq��H��H�59QH��1���n������I�EH�����H������H�8H��PH������qtH��P��rt�p��H��H�5�PH��1��rn�����I�EH����H���v��H�8H�pPH������qtH�kP��rt�p��H��H�5�PH��1��n���6��I�EH����(H�����H�8H�PH������qtH�P��rt�Hp��H��H�54PH��1���m������I�EH�����H������H�8H��OH������qtH��O��rt��o��H��H�5�OH��1��mm�����I�EH����zH���q��H�8H�kOH������qtH�fO��rt�o��H��H�5�OH��1��m���1��I�EH����#H�����H�8H�OH������qtH�O��rt�Co��H��H�5/OH��1��l������I�EH�����
H������H�8H��NH������qtH��N��rt��n��H��H�5�NH��1��hl�����I�EH����u
H���l��H�8H�fNH������qtH�aN��rt�n��H��H�5�NH��1��l���,��I�EH����
H�����H�8H�NH������qtH�
N��rt�>n��H��H�5*NH��1��k������I�}H�H������<�T��
��=����>������j��H�5�OH��H��1��mk�����I�EH����zH���q��H�8H�kMH������qtH�fM��rt�m��H��H�5�MH��1��k���1��I�EH����#H�����H�8H�MH������qtH�M��rt�Cm��H��H�5/MH��1��j������I�EH�����H������H�8H��LH������qtH��L��rt��l��H��H�5�LH��1��hj�����I�}H�H������<�����=��
��>�T���i��H�5YNH��H��1��j���6��I�EH����(H�����H�8H�LH������qtH�L��rt�Hl��H��H�54LH��1���i������I�EH�����
H������H�8H��KH������qtH��K��rt��k��H��H�5�KH��1��mi�����I�EH����z
H���q��H�8H�kKH������qtH�fK��rt�k��H��H�5�KH��1��i���1��I�EH����#
H�����H�8H�KH������qtH�K��rt�Ck��H��H�5/KH��1��h������I�EH�����	H������H�8H��JH������qtH��J��rt��j��H��H�5�JH��1��hh�����I�EH����u	H���l��H�8H�fJH������qtH�aJ��rt�j��H��H�5�JH��1��h���,��I�EH����	H�����H�8H�JH������qtH�
J��rt�>j��H��H�5*JH��1��g������I�EH�����H������H�8H��IH������qtH��I��rt��i��H��H�5�IH��1��cg���~��I�EH����pH���g��H�8H�aIH������qtH�\I��rt�i��H��H�5|IH��1��g���'��I�EH����H�����H�8H�
IH������qtH�I��rt�9i��H��H�5%IH��1��f������I�EH�����H������H�8H��HH������qtH��H��rt��h��H��H�5�HH��1��^f���y��I�EH����kH���b��H�8H�\HH������qtH�WH��rt�h��H��H�5wHH��1��f���"��I�EH����H�����H�8H�HH������qtH�H��rt�4h��H��H�5 HH��1��e������I�EH�����H������H�8H��GH������qtH��G��rt��g��H��H�5�GH��1��Ye���t��I�EH����fH���]��H�8H�WGH������qtH�RG��rt�g��H��H�5rGH��1��e�����I�EH����H�����H�8H�GH������qtH��F��rt�/g��H��H�5GH��1��d������I�EH�����H������H�8H��FH������qtH��F��rt��f��H��H�5�FH��1��Td���o��I�EH����aH���X��H�8H�RFH������qtH�MF��rt�f��H��H�5mFH��1��c�����I�EH����
H�����H�8H��EH������qtH��E��rt�*f��H��H�5FH��1��c�����I�EH�����H������H�8H��EH������qtH��E��rt��e��H��H�5�EH��1��Oc���j��I�EH����\H���S��H�8H�MEH������qtH�HE��rt�|e��H��H�5hEH��1��b�����I�EH����H������H�8H��DH������qtH��D��rt�%e��H��H�5EH��1��b�����I�EH�����H������H�8H��DH������qtH��D��rt��d��H��H�5�DH��1��Jb���e��I�EH����WH���N��H�8H�HDH������qtH�CD��rt�wd��H��H�5cDH��1���a�����I�EH����H������H�8H��CH������qtH��C��rt� d��H��H�5DH��1��a�����I�EH�����H������H�8H��CH������qtH��C��rt��c��H��H�5�CH��1��Ea���`��I�EH����RH���I��H�8H�CCH������qtH�>C��rt�rc��H��H�5^CH��1���`���	��I�EH�����H������H�8H��BH������qtH��B��rt�c��H��H�5CH��1��`�����I�EH�����H������H�8H��BH������qtH��B��rt��b��H��H�5�BH��1��@`���[��I�EH����MH���D��H�8H�>BH������qtH�9B��rt�mb��H��H�5YBH��1���_�����I�EH�����H������H�8H��AH������qtH��A��rt�b��H��H�5BH��1��_�����I�EH�����H������H�8H��AH������qtH��A��rt�a��H��H�5�AH��1��;_���V��I�EH���tLH���C��H�8H�=AH������qtH�8A��rt�la��H��H�5XAH��1���^�����H�5CH��1���^��������;�����g��H�5�BH��H��1��^��������;�����ug��H�5�BH��H��1��^�������;�����Ng��H�5�BH��H��1��Z^���u����;�l���'g��H�5qBH��H��1��3^���N����;�E���g��H�5JBH��H��1��^���'����;�����f��H�5#BH��H��1���]������[_��H�5BH��H��1���]�������=_��H�5�AH��H��1��]�������of��H�5�AH��H��1��]������Qf��H�5�AH��H��1��m]�������^��H�5�AH��H��1��O]���j����^��H�5oAH��H��1��1]���L���e��H�5QAH��H��1��]���.����e��H�53AH��H��1��\������k^��H�5AH��H��1���\�������M^��H�5�@H��H��1��\�������e��H�5�@H��H��1��\������ae��H�5�@H��H��1��}\������AUATI��US��H��A��h u?���t���tH��[]A\A]�@I�<$H��v�H��[]A\A]�_^���L��I��1�H��H�5J@L���[��L���H��L�����H�5�FH��1���[���ff.�ATI��UH��SH��H�� dH�%(H�D$1��
[��H�������M����I�$H���ƒ���F������%��JwnH�T�Hc�H�>��f�L�%�?f��*H�=4Y�a��L��H�$�\��H�L��H���5[��H�}H��H�D$H���$H�0��^��H�D$dH3%(��H�� []A\��M�d$ M��t�I�$H���K���f�L�% ?�d���@L�%?�T���@L�%=�D���@L�%�<�4���@I�|$(H�G�H��i�h���H�z�Hc�H�>��@L�%�>���@L�%�>���@L�%�?����@L�%�?����@L�%�?���@�Y��I��H��������[��L�%.>����ATUH��SH���1Y��H�����tNH��tIH�H������u:H�{0t/L���H��p�H�S H��L�����H�[0H�{0u�H�[ H��[]A\�f�ATUSH�WL�OH��������1�1��2DA��	������9���A�ZH��9�~0H9�~+E�A�‰�M�A�� u���A�ZH��9���Lc�M��H)�I��L��H��L���_��I�T$H���*c��H9��!c��A�<$vH9�|(I�D$I�l$�(��[]A\����u���[]A\�A�$��1����ATI��UH��SH���H��H�PL�H���L�BE1�I��w�f.�M�@I��v~1�I��v.L��L���C�����t��L���2���������f.���M�IA	�M��u�I��vkL��L��������t\��L�����������tFE��ua[]A\�@I��u�H��`L��H���\����tH��`��H����[������뷐H��H��H�5�;[1�]A\�a���H��H��H�5�U[1�]A\�`��E1��O���AWAVAUATI��USH��HHcJH�|$H�t$dH�%(H�D$81������H��L$ H�H��&�P�������^�׸�i>�߅�I�)ָ����O�9��3�:Hc�H�N�1�Hc�H�=bH)�H�H�H��@H��9�~8�G9�u�t�f�<A�t��HcՃ��D�$H��9���HcL$ �����E�D$�������D$A�.H��T��tA�2H�zT�����D$H�l$ L�-љ$��L�t���I9��WHcMI��H��I�T�1�L���V��L�L9�}ո����H�\$8dH3%(��H��H[]A\A]A^A_�D�D$$�����D$A�H��9�e���fDA�&H�kT���I����D$A�
H��9�H�I)�M���)���f.�H�?���D$�sH��9H�t$1�L�=Ԙ$L�.��I��H����A�E��tF�S<%u�su�;L$}�HcD� L��L��D�qH��I���U��Ic�I��A�E��u�fD1�����f�H�t$H9|@��l���fDA�*H�CS�U���HcL$ ����H�D$H���������H�H9�H�D$}H��������H�������a����U��H����Q����AUA��ATI�̹UH��SH��H�� �lT��D��H��H���nV���Ao$H�CIc$%�H��H	�H���(�P��(�CH��H��[]A\A]�ff.�ATH��I��(U�eH��S�d���L��H��H���VV��H�C H��[]A\�f.�AUH��H����ATI��UH��SH��(dH�%(H�D$1�H�D$H���#H�5��Hc�H�>��f��(�o���H��H���H�C H�|$dH3<%(H���H��([]A\A]�fD�(�^���H��H�@ �@� �_�y���H���@� �`�a���H���@� �a�I���H���q����� �m�1���H���Y���f�L���I�����(�nH�����L��H��H����T��H�C ����fDI����cD������TH���Hc�H�>���(�5H�����H��L�` ����f��(�4H���~���H��L�` ���f��(�2H���^���H��L�` ���f��(�3H���>���H��L�` �b���f�H���H�@H����H�x��H�\$L��H��H�L$H����R��H�L$����I���v=L��H��-���w,H��H�L$�t���H�L$��ugH��H�L$�ΐ��H�L$��uQH�D$H��tH�(?�(�1H�����H��L�` ����L���V��H�5�OH��H��1��Z��1��}���D1�1�H�L$�Q��H�L$I������DH�\$H��L��H��H�L$耛��H�L$����H���H�BH��vvH�@I�����H����L��H����������QH�3�$H��u1H�N6��H��H�L$�X��H�L$H��H���$t�I9����(�'H���j���H��L�` ���H�D$H��tH�(?�(�0H���=���H��L�` �a���1�H�5�3H��H�L$��X��H���H�L$H�@H��v�H�@H���6����w���H���H�H���c���H�z�X���H�X0H���a��8��zH��@�L��@�(�1H�����H��L�` H���H�x8�����H�X8���L�*I�������I�}�������8����������9�~��8A�E9�~,���L��H��H�L$����Hc�����A�EH�L$9��H��H�L$詍��H�L$�������H��H�L$����������H�L$�(�1H�����H��L�` H���H�x0����H�X0�����)O��H��H�L$�V��H���H��H��@H��H�6�`���H�L$���H�H���H��1�H�5�L1�H���V���p���H�5�1H��1���V���Z���f.�AWAVAUATM��UH��SH��8dH�%(H�D$(1�H����H��I��I���ő���oCI��)D$I����KI�����I�N�8�+H�����H�T$L��H��L�p H�@(H�@0H�D$�?���L��8H��$I���g���L�D$H��H��L�p H��L�h(L�@0����fAo$H�KIc$%�H��H	�H�H��H�L$(dH3%(��H��8[]A\A]A^A_�f�L��� �l�����@L��H��H��蚑��H�L��H��fAo$%�SIc$H��H	�H�T$H��j���L��0H��!I�����L�h H�X(�`���DL��H��H���2���H�L��H��fAo$%�[Ic$H��H	�H�T$H�����L��0H��"I���*���L�h H�X(����L���AWAVAUATE��U��SH��H��8dH�%(H�D$(1��Ѓ��������lL�l$H��L����P��H�����O��L�3L��8�=H��I�����H�{`H�sP�h,H����<L�x H)��@(D�`0I��lJ��H������h ���Ch��H�L$(dH3%(��H��8[]A\A]A^A_����@��;�L��<�4���L�d$L���O��H����O��L�+L��0�;H��I������H�{`H�sP�h,H����:L�p H)��@(I�E�I��H������h �:���D�sh��#�H���M������fD�D$L�l$H��L���PO��H����dN��L��8H�߾>I��L�;�)����L$H�{`�h,H�sP�=L�p H����@(H)�D�`0�H4I���H��H������D1���;���D$�l���@H�l$H���N��H�����M��H��L�#�0�<H��I�Ž;��H�{`H�sPL�h H����@(H)�I�$�iH��H��������I���AWAVAUATI��UH��SH��H��HdH�%(H�D$81�H���H�F(H�=U�$I��H��H��?H�H��N��H��H��0H�D$H�$H�D$H�D$�(�H��0H�t$L���<F��H��0M��M����I�V0H����M�~ L�j0M��LD�I�H������;��4w�H�H��s�H�$H�t$L�|$�XF����t�H�=
G�2�M��I�?H�D$ H�����G�4�EH�
]�Hc�H�>����KI��Hǃ0L��0�-H����H�h H�@(H�L$8dH3%(��H��H[]A\A]A^A_�@L���`N��H�D$(I�H�L$ �H��pH��H�H�DH�D$0H�0�$H�0�XJ�����L���HO���fDL����G���fDL���O���fDL���E���fDL���xF���s���L����N���c���L���HI���S���L����H���C���L���hM���3����NH��H�=(H��1��E���hG���AWI��AVAUI���GATUSH��H��(H�$�pH�L$H�
�'L�D$��f�I��@ @0@@@P@`��i��L�xHL�hPM���H����M��H�D$H���H�(1�M���:E1�H�<$A��E�4��h �U�UA9���D)�UH�EHc�M��L�<�L��f.�I�v H���4���M�v(I�W�H���LE�H��M��u��fDH�t$H���s���H�<$��H�|$t
H�t$H���S���H�L$�(�1H���|�H�$H�H I�D$XH��(L��[]A\A]A^A_�DH�<$A��H�<$t�뮐M�7I��M�m(M���l���I�u H������I�u H��I���a���H���u�L�uH���ȐHcUH�EH�D�H��H�D$�������H�4$H��蔨���'����E��I��H�
�(H�ߺ�8H�5}(1��C������Hh�(����D��H�5nCH��1��B���U�i���@AVH��AUATUH��S��H��tH��EډX0[]A\A]A^�@H�GHL�o`1�E1�L�gP1�1�Lc��I)�I)��I���H�D�pD�pI����D�hI	�D�`L�0�@H����ATUH��SL�H��I��A��A��Mt4A��O�A��L���0�L��H�X H�h([]A\�@H�H������+u�L�f(�8�+�v�H�@(H�u(H�h0H�M0H�VL�` H�P(H��H��tH�Q(H�U(H�U�LH��H�PH�C(��K��H����H�H������+�U���H�V(H�H������+�>���H�J0H��H��tH�A(H�M(HJ(H�h0H�E0H��tuH�H(H�B0H�H(H�EH�BH��H�S(�����H�v H��t���H�C H��[]A\�fD�8�+��H�h H�@(H�@0H�C H������H���H�B0H�h(�f�H�H������+uL�H��I��A��A��NtMA��+t�2���f�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H��t;H�q(H�H0H�q(H�RH�P�fDH�F L�I��A��A��+u��f�H�H0H�Q(��fDAUM��ATI��UH��SH��H��H���tH����H��H��L��L��8�g�q�H�h H�X(H�@0H��[]A\A]�fDATH�JUH��SH��t`H�F0H��I��H��tL�`(H�C(�8�+��H�@0H�h H�@(I�D$0H�S0H�B(H�EH�CH��[]A\���8�+���H�h H�@(H�@0��ff.�AUATI��UH��SH��H���H�H��H������LtM~3��M����OuTH�v ���H�C H�@H�CH��H��[]A\A]�f���+u*H��[]A\A]���@H�v(H�H������+��H��0�M��H�X L�`(H��[]A\A]�@L�n(�8�+I�M���L��H��L�h H��H�@(H�@0�o���H�߾LH�C(H�@H�C�fH��H��H��[]A\A]��H�J�+�8�}�L�` H�@(H�@0����@����H�C(H�@H�CH������USH��H��H��tHH�H������|9H�̓�~;��gu,H�v0�]����oMH�C0KH�HcU%�H��H	�H�H��H��[]�蛃���oEC��H�I��H������NuL�F I�H������+t���fDL���H����UH���+SH�Ӻ8H���u�H�S(H�h H�@(H�@0H��t8H�r(H�P0H�NH�r0H�H(H��H��tH�N(H�J(H�RH�PH�C(H��[]ÐH�C(H��[]�DH��t[AUA��I�պ@ATA��I��L��UD��SH��#H�����H��H�X H��I��L�`(L�h0�h8螌��H��[L��]A\A]�L�ɺ �l��ff.�AWAVI��AUI��ATI��USH��(I�dH�%(H�D$1�I�AH�$H�D$H����H�H��������H�Z H��u��H�C H��tH��H�H������t�I��@�L��L�����L��L��H�@ H�ź8H�@(H�X0H�@8I�H�$��L�h H�h(H�@0H�t$dH34%(uH��([]A\A]A^A_�H���v���1��o����=���AVAUI��ATI��UH��SH��dH�%(H�D$1�H�H������u|L�v(H��I�F H�H������.H��@H����H�EH������uvH�E(I�n0H�C(H�EH�CH��H�t$dH34%(��H��[]A\A]A^�fDH�N�8���H��L�h I��H�C(H�@0L���^����H�M�8�L���r�H�h H��H�@(H�@0�`���f.��H�=0�@��I��$pH��H�$H���$H�0��=���	����;��f�AUI�պ8ATI��UL��SL��H��H�L$0H���t7�$���L�h L�`(H�h0HcH���H��H	�H�H��[]A\A]þ(��L�h L�`(H�h0���AVI��AUI��ATUH��SH��L�d$HM���}L��M��uUH��H��L��L��ATL�L$P�<���I�$I�T$H�C(H�KH�SY^H��tH��H������H��H��[]A\A]A^�DL��H�L$L�$�O���L�$H�L$�@H��ATL�L$P����H��XZH��u�H��H��[]A\A]A^�fDAUI��ATI��USH��H�H����H���H��������������tN~$������_uI�$H��[]A\A]���u�H�[ I�$��t-H��t(H��H���H�{0H�C(�L�c(H��H���m���H��[]A\A]�fD��+������u�H�C(L�` H�X ��u�H���0����f����a���L�c(H�[(���p�����DH�C(H�S0H��tsL�c(H��tZL��L��L�c0����H�[0���8����DL�c H�[ ���!����fDH�C(H�S0H��u�H�����L�c0H����H�Å������H��u����fDH�S H��t!L�c H��t(L��L��L�c(�?���H�[(����H������L�c(H��H���:���fDH�
�� �_���I�$�S���f�SH��H��t*�H�H������t��uH9[(u	H�[ H��u�H�Ѿc�(�k�H�X [�DUH��SH��H��H��tH�H������Ot H��H��(�/�+�H�X H��[]�H�5�21�H�T$�?��H�T$��fDAVM��AUI��ATM��UH�պxSH�L$0H�� ���H���H��H�X L�p(L�h0L�`8�@@H�D$8�oH�D$@AD�oH�D$HIT�oQdH��tH��H���`���[H��]A\A]A^�@AWI��AVM��AUATI��USH��8dH�%(H�D$(1�H����H��H��H��H�VHE�I�;L�L$H�T$H�L$�8H�@H�D$��HcUL�L$H��L�` H�h(H��L�h0H�%�H	�M��H�tVL�ɺ0�L����H�X H��L�p(L��H��苄��H�t$(dH34%(H��u\H��8[]A\A]A^A_�H��fDH����M��uH��u�1��f.�L�ɺ0��N�H��L�` L�p(M��t����5���SH�H��~%�?t�H�CH�C�H��[�fDt�H����5��H�C��DAWI���0AVAUI��H��ATI�Ժ(UH��SH�����L��(H��H�@ *�0I�����L��8H��H�@ ��+H���t��H��H��H�@ H��H�@(H�@0��L��(H��0H�$�5��L��HH��H�@ &�OH�D$���L�D$fo�H�À`0�H�@ L�@(@4M��tbL��L��L��H����I�ǀK0H�4$L��H���s�L��L��H��H����H��t�PH�C �@�S�CH��H��[]A\A]A^A_�L��8�NH���s��fo
[I��L�p H(�ff.��H����H��������AWAVAUATI��UH��SH)�H��H��H�NL�nH9�wpJ�)I9�wgM��I)�L9�|aN�t-�H��I�v�3��L�sH�CI���tN�$8J�<(H��L���6��H�CL�sB�0H��H��[]A\A]A^A_�fDL9�}#1�H�5��=;��H��1�[]A\A]A^A_�@N�t-�H��I�v�2��L�sH�C��1��ff.�f�AWI��AVAUI��ATU�SH��H��(H�~L�ft�.M9��6E�������}����H�|$`tH�T$`D�
M9�����A������������E1�H����A��H����H�5�0L��1�H�L$�::��H�L$��D�L$L�D$H�L$�\3��D�L$H�L$L�D$A��u	L9��N�+���G���H��D�L$L�D$H�L$�=���D�L$L�D$��H�L$�����L��H��L��L�D$H�L$�h���L�D$H�L$A��������^���fD��uDH�|$`un@E1���uqH������L��H��L���Z���L�cH��D�3H��([]A\A]A^A_ÐE��u�L��H��L��L�D$H�L$���H�|$`H�L$A��L�D$t�����d�����uE��A�������M���u���fD���l���A�A�A��EG��S���@E1��G����E1�H�|$`�0���H�D$`�� ����A�����I�HI�T$L��1�H�5�.�k8��ff.�AUATUSH��dH�%(H�D$1��H����H�FI��H��H��L�BH��tOM��tJL9���H�JH����H�~�|D�.E���������A��tp��tkL�CH�EH�PI�HH�5|.1�L���7��H������H������1��H�t$dH34%(��H��[]A\A]ÐD�
E��u#H���Є��D�E��uH�����A��L�CH�KD�L$H��H�SH��H�D$L��P�G����D$�X�Z��H���x���A��� ���H���h���������.��ff.�AWI��AVAUATUSH������D$����H���4H�H��L�v I��H��H������+��L�<$L��E1�uTM��t`L��L��H���#�������H�C(H�$H�[0H�Y0H����H�C(H�H������+tmI�$M�t$ ��t��t$L�����M��u�H�H������+t��@tH��L��[]A\A]A^A_�H�S0H��t���H�H������+u�H�$M��H��L�c M��t9I�$E1�H��H������?��w��p���M��t�I�M��M�v ����@M���g����E1��k����H�H�D$H������@�K����?H���k5���9���fDUH��SH��H��H�OPH��H)�H�OPH��t]H�W`H)�H��~<H��I��E1�H��j�������H�{PH+{HZ��Hc�YH9���5�����AH���hl��H�CPH�C`H�߾A�c���HkPH��[]��AWI��AVI��AUATUSH��H���H�4$H�H�@H�L$H�����ZE1�A��H����E���I�� D����-��Hc�H��H��H��H��=�H����E��~VI���A�M�L�H�@H�L�@M����I��L�I��vL��L���Xu����uHcÃ�L�\�L��M9�u�D9�|\H�L$L���81����H�$H�h L�p(H�H0H��[]A\A]A^A_�f�1�H��v0D�hE�d����f.�I�� ����1��H���D1��@I���H�}H�H�0�j.���	�����,��ff.�ATI��UH��SH��H��H�T$H����H�H��������H�J H��u�H�A H��tH��H�H������t�H�t$L��H�L$�C�H�T$H��H��L����HcKH�H����H	�H�L$H�H��tH�1H��H������t��tH��[]A\��Hc��H��H	�H�1H��[]A\�H���o���1��h���ff.�f�ATUSH��H����2��� I�����1��H�{�H����1��H��H�EM��tH��u�H��H�][]A\�@H��L��H����,��H�]H��H���[]A\��ATI��UH��SH����h ��I9���H��H����H�V��H����H�N�L�1Ҁ�
���1Ҁ�
up9��uL��H+CHH9�t�AH���h��H��H����H��H��L��L)�����H��H+{H��Hc�H9���1����H�k`[]A\�Hc�9��t���L�OPH�GXH����L�G`���H�5�'L)�PM)�1�L+GH��&��XZ���1�1��W���H��H��H���H;Ft�>t�H�F���L��H+{H��Hc�H9���0���������ATUSH�o@H��H�G@H��txH�WXH���H�s`�qH���I��������~?ǃ���H�U���H�EH�k8H�H�CPH�SXH�CHH�C`1�[]A\�fD��������h�H�WXH9WH��H�s H�������H��SH��H����H�S(���H�BH9B}sH�C0H�PH�JH�}H�HH�l��u
�(������H��$H�5h
H�81��'$����z�
�q���fD��h�����H�SP� ���L�$J�<��)��H�S0�L�`H�@H�H�1�H�C0�^���D��i�H�SX�~����H�SX늸�������SH��H�WPH;WXs"��huH�@wH�rH�sP�<
t[ÐH��������u,H�SP��fD�
H;sXsڀz
u�H���
H�SP[ø����[ÐAUM��ATA��UH��SH�����A��H���H�htH��H��[]A\A]��H���{����t��)��L9�u���'��H9�t���&���H�C�ff.�AVAUI��ATI��1�USH��L���1��/���H��L��8L�p�@H����}��L��H��H�h H��H�@(H�@0[]A\A]A^��AWAVAUI��ATI��UH��SH��H��H�H������Ctw�����~
��?t@��@tCI�$H������@���C��I�݃�?t~H��L��[]A\A]A^A_�@��e��H��H��L��H��H��[]A\A]A^A_�d�@H��������H�Å��I�$H������@�_��C���?tI���@��@�'H�C0H���ZH�@(H�P H��tNH�H������?u?H�r I��I�T$ H���z���
H�� L���##��� ���fD��?�L��H��H��I�������f�M�t$ ��?�M������@��H�C0H���cH�@(H�P H����H�H������?��H�r H��L������tdI�t$ H��I���l)��I�D$ I�D$(H�S0H��HC(I�D$0H����H������H�R(H�B0I�D$0H�P(H�C0H�P(���DH�� H��E1��"��H�� L���"������f�M�L$0L��(H��?M�|$(L�L$����L��8H��L�p �+H�$���L�L$L�$H��L�x(L�H0H�K0L�@ H��tH�Q(L{(H�B0H�P0H���H�J(H�S0H�J(H�@I��H�CI�D$ �b���H��������?�8���H�s ���fDM�t$ M���Z���f.�I������H������H��H����b��H��H�@(����DH�s L��H����������I�t$ H��M���'��H�C H�� H��I�D$ H�C � �����@H�C0�U����H�S0H�B(���AUATA��USH��H��H�GPH�p��sv����xW��D��H���`��L�kP�u�Hc�I�D-H�CP��D��H��[]A\A]�DH���`_��H��t�H��L��H����#����������ɐAVE1�AUE1�ATE1�UH�-)�SH��� c��H�KP�:f.���n������s�@��u��A�A�uH��H9KX����h��H�{@��L�AL�CP�1L�lj�@��
�D�F�A��v��F�����E	���h�H�KPH9KHs
��
�8Hc����t>H���H�5&H������H��H�3L�����HN�1��w'��D��[]��A\D	�A]A^�D��e��A�A�e����fDH����������H�KP�������o�����A������A�A�s�����E	�L;CX�����y
�����H�yL����DA� ���D�F���w�D���tA	��m���H����]��H�{P�\������
�����H��H�{P���E	����f�AUATA�����U��SH��H����H���1������tcH�CPH;CX����h����H�{@��H�pH�sP�(@��
����tI���tH�SP��h�H�B�H�CPH;CHw1�H��[]A\A]�fD�z�
u�z�
u�H��H�SP��f�H���L�kP�
A�}�H��PX���B���A�E�<_�5������,����y���f�H���H�����u?H�CP��h�A���@�
H;sX�C����x
�9���H���
H�CP�'���D����h����fDAUATE1�U��SH��H��L�oPL��H;CX�}��hutH�{@wmH�pH�sP���
�}���t	��i����ru@��u.���Ѓ�߃�A����L�kPE1�H��D��[]A\A]�A����H��H;CXr�H���H��u�H�CPH�pH�sP���
�����H;sXs�x
t`H�SP��h�H�B�H�CPH;CHv��z�
u��z�
�����H��H�SP�y���f.���_�_����DA	�1��m���fDH��H�CP�fD��SH��H����|��H��p�p��H��x�d��H����X��H����L��H����@��H����4��H����(��H��[���ff.���AUATI��USH��H�� H��t���I��$0H��t���I��$�H��t�
��I��$�H��t>DH�_��r��H��H��u�I��$�H��t(f.�H�GI��$����I��$�H��u�I�\$(H��t?�H�{L�+~1�@H�t�L��H���� ��H;k|�H��L���n��M��u�I��$�H��t����I��$�H��w)I�|$�?��L��I�D$H��[]A\A]�$��@�����f���Hc��H���H�H��t!H�JH��@H��tHcIH��H�RH��u�Ð����h�����ff.���H��p�@����i����ff.�@��H���@��H���@��H����@��H����@��H�wH�W ��h�H���L���D�������H��x�@��H����@��H����@������D���Gh����H����邽��f���1�H� ��Ð��SH����hHLJ��Gp�������E����hH�C0H�C(ǃ(HǃHǃxHǃ�Hǃ�Hǃ�H�@H�@H��i��Hǃ�H�������H���&��Hǃ�H���[�f���H�G`H+GH���H�GPH+G`���H�G8�����G���������]��ff.�f�����i�@ATI��UH��SH��H��H�� dH�%(H�D$1�����H���H��H���u��H��o$H��H��pH�$H����L�d$���H��H���_��H�L$dH3%(uH�� H��[]A\����ff.�AUI��ATI��UH��SH����H�uB��L��H��@�þ������H�@ H�@(L�`0�X8H��[]A\A]�H���H�5����H�����H�ff.�f���AUATUH��SH��H��tZI��H����H��H����H�5L�Hc�H�>��f�H�5�f�H���H��H�L$�l���H�L$H���H��H�� �l[]A\A]��@H�5���H�5���H�52���H�56���H�5;��t���@H�5Z��d���@H������؃�����H���Hc�H�>��@H��0��N���H�X L�`(H��[]A\A]�H��0��&���H�X L�`(H��[]A\A]�H��0����H�X L�`(H��[]A\A]�D��HH�5&�A�������H��A���@�蹾��A��H�X L�`(H�@0D�h8H��[]A\A]�fDH���H�GH���H�x���8��~H���vH��H����������H��H�L$�b��H�L$����1�H��H�����H�L$��uz1�H��H���z]��H�L$��tTH��0����H�X L�`(H��[]A\A]�@H��H�L$�[��H�5�H��H��1��g��H�L$���H��H���v��H�L$H��0�苽��H�X L�`(H��[]A\A]��1�H��H��H�L$��\��H�L$���P���H��H��H�L$�u��H�L$�6��������H��1�H�L$H�50����H�L$�����AUI��ATI��UH��SH�����H��H��At
H��1�H��u3L��H��8�j�μ��H�@ L�h(H�X0H��[]A\A]�1��)���H���@UH��SH��H��H��dH�%(H�D$1�����H���H��H���j��H��j$H��pH��H�$H�������H���\��H�L$dH3%(u	H��1�[]����ff.�AWI��AVA��AUE1�ATUSH��H��(H�PdH�%(H�D$1�H��A���5�H�T$H���c��L�cPH�t$H����H�CI�L�cPH��t�8u�xt(H���������9��%���=���E����H�$���<�|$�C���|$H�$H��I�H��t	H9���I�/H��A�H�$����H�߉��xO��H�$H��H�Ɖ�U0f�H�L$dH3%(D����H��([]A\A]A^A_�f.�Hc�H��A��O��H��t�L��H��H��H)������H�sXH�T$H)��/��L�cPH�t$H����H�CI�L�cPH��t	�8��H�F�H���
L���������6��L��H��H��H)���H�5��f���H��A���N����������L��H��E1�H)�H���O�H�5�H���@����AH���#n������fD�x�V����G���f����L��H��H��H)���H�5��H������AH����m���y���f�H�PH�5v�H��1�����V���fD�;��1�H��E1�H����H�5b�H������AH���om��H�|$A���������ff.�AWI��AVA��AUATA��UH��SH�����^H�MPH�uXH9�s�9{t4H��D��L��H�������uH�EPH�E`H��[]A\A]A^A_��E��tH�E�x����h��H�}@��H�AH�EPD�)A��
�3H9��fD��J���v�� u
H��H�EPH9�u�}��A9���H�D$E���1�D��L��H���������H�UXH�]P�H9�w{A�����H�|$�������H�=��H�|$��}��A9�tnH�D$H�=��H9�HE�H�\$�y���f��\�VL���uH���IL�����@��H���v	�� �BH��A��H�]PH9��X����#��H��1�H�����H��H�5a��w���H��H��A[]A\A]A^A_�Lk��@D��H����K������������+���fDH���X�����H�MPH�uX�F����{H���K��H�EPH�MXH�PH�UPH9�w/����f�H����H�EPH�MXH�PH�UPH9�������p@��}t]A9��������\u�H��H9�v�H���K��H�EPH�PH�UP�p�H9�����y
A�
����H�AA�
H�EP����}H����J��H�EP�3���H�D$H��t<L�%кL9�t0H�EP�AH���
j��H�EPH�]PL��H��H�E`����H�EPH�E`E��uVH�EPH;EXs[��huRH�}@wKH�PH�UP�8
�����H;UX������x
�����H��H�EP���f.��}H���J���H�������s���H�EP�H�EPH�uXA�����A����L���H�|$�4����;���ff.�@UH��H���SH��H��H�P�c
��H�UH��tHSPH��[]��H����H������H��H�5�����H�߾A��h��H��1�[]�ff.�@AVAUI��ATA��USH��H��0H�PdH�%(H�D$(1�H;{X�5��h�(H�{@�H�GH�CP�/��@��
�f��0��H��L�k���Ic�L�>��fDA���DH;CX����h��H�{@��H�PH�SP���
�=H�Ѐ�-�H;SX�z��h�mH�{@�bH�BH�CP�*@��
����\����3�U�������������@�̀�H�T$(dH3%(����H��0[]A\A]A^�DH��������H�{P�����H;CXs��huH�{@vH���J���H�CPu(H�PH�SP���
�CH�Ѐ�-uD����bL)�H���H��1�H������H�5�H�������AH���f���2���f���&���fD�����fD� ����fD����fD����fDH�t$H������H�|$�ŸD����fD�
���fD�
���fD����fD�	�~���fD�
H;CX�i����
�_���H���
H�{P�M���D��h�H�{PH9{Hs	�?
�H�T$������H�D$HCP�����H;CX����h��H�{@��H�pH�sP��р�
����\tC��?�������B����<���v���m�́����fDH9sXv�@<U��<u��D��L��H�߃�����%����Q����H�������u\H�CP�U���H;SXs
�x
�VH�������
���H��H�{P����H�������H�CP�l������H���x[��H�CP�u���H;sX�H��^$D��
A����L�(���Յ����$H�=F�
��H��pH�L$L��H�D$L�d$�f���q���H�=*�Hc��������H�
^$D��L�d��L�)�� u����t�'H�=P�H�����H9CXv�B<U��<u��D��L��H�߃�������������H���������H�SP����x
��H��D��
A��H�CPH�h]$��L�(�����h�4H�{@�)H�FH�CP�>
�
���H;CX�����~
�����H�FH�CP���H�
	�Lc4�E���%����� u
A�����$H�=�M����H��pI��H�L$H�D$H��\$�L�t$H�0��������!H�=��7���H��H�CP�^����$H�=1��5��H��pH�L$L��H�D$L�d$������H;CXs
�z
���
A�r�@���H������H�CP��H��������d���H�sP�������H��[$�'H�=�M�I��L� ���H�L$�H��pL��H�D$L�t$�������H���
A�nH�SP���ff.��AWAVI��AUATM��US��H��XL�GP�t$L��$��T$L�L$dH�%(H�D$H1�����D$ ����1�D$H�D$@H�D$(�BfDI�$A�ǀ�iH�L$I�EH�H���|H9��k�|$ �PM�FPM9FX��A��h��I�~@��I�PI�VPE�8A��
��A�����~I���I���D���bO����t�D$A9���&��t	A9��H���D;|$���T$I�NP��A��#u���\A��\���A�����H�L$I�EH�H���pH9�����D��L�����������A�������L����������M�FP�����D$����	��vA�� ��f.�1�A��
@��D��L����?�����fD1���@I�U1���M����I�$H����H��I�$�:���D�D$�*���A�G���v
A�� ����H�A�A��h�I�FPI;FHv�y�
u�y�
uH��I�NPI�EH��tH�\$H�H�\$HdH3%(D���sH��X[]A\A]A^A_�f�A�
I;VX�
���A�x
����I��A�
M�FP���f�H�JH�PH�5e�1�L�����M�FP�D$ ���f�I9NX��A��h��I�~@��H�qI�vP�<
��<\��<u��<
�2D��A����������\L���?>������f.�I9NX������<$@��<@��@���<{��1�A�#����f.�I�U����L���T$0����T$0�������I�NPH�qI�vP�<
�7���I;vXs�y
th�D$�$�
A�
���p���A��h�I�NPI9NHs�9
u�y�
uH��I�NP�D$��I�FP1�L��H�P���A������H��I�NPD�D$�����t"� ���A����������|$
������\L���A�
��<���������8�\L��1�A�u��<������fD�l$�������\L��1��<�����I�VPA��h�H�B�I�FPI9FH�)����z�
�����z�
����H��I�VP������A�
�Z���D���D$�����A�W��� wH�H���rD9|$����$<Y����H�=����Hc�H�>��I�FPA��h�H�P�I�VPI;VH�z����x�
�p����x�
�f���H��I�FP�Y���f��L$�T$L��L������M�FP�U���A������&����|$
��A��h�I�NPI9NH�I9NX�FA��h�8I�~@H���*L�GM�FP�<
�<7v<0�.<
��I�EH������H�|$H�H9�������|$ �����I�~`H�5h�L�D$ H�OL��I�NPH�JH�P1����L�D$ �D$ M�FP�v���<x�iH�t$(L�����H�L$@H���<����qL��H�L$8M�~PHc�H�T$0��9��H�T$0H�L$8H���cM�FP�?����9
����y�
����H��I�NP����D;|$�������t	A9������\L���:��I�FPA��h�L�@�M�FPM;FH������x�
������x�
�����L�@�M�FP����\L���9���W���A�
���A��h�I�NPI9NHs	�9
��H�Q�1�L���:�L��A����8���\xf�D������
�A����A��
�T
7�P҃�B�T:7�PM�FP���H�A�A��h�A�#I�FPI;FH��������L��H�L$0���H�L$0����I�~P���I�~PH�T$(�H�L$0���L�|$@H�L$0M��tRM�FPA�wL��Hc�M�H�T$0M�FPL�D$8�8��H�T$0L�D$8H���4���Ic�H��H��I�4�r���M�FP�a���I�VPI���L��A�����H)�����H�5��L����I�FPI�F`��D���\L��� 8��D��L���8��M�FP����A�
M;FXsӀ
u�L�GM�FP���Hc�H�����H��H)�L�����M�FP�����y�
�:���H��I�NP�-����`���SH�58�H��� �H�CPH;CXs�8_t!H��E1��
1Ҿ:[鉫��f���hu/H�{@w(H�PH�SP�8
u�H;SXs��x
u�H��H�CP�DH��������u�H�CP��fDAWAVA��AUATUSH��H��8dH�%(H�D$(1����h ���ChH���_:��A�FՃ���E1�A��0���D$1�E1�L�=݃A�F҃�7�Ic�L�>��f.�E����E��H�CPH;CX���h��H�{@��H�xH�{PD�0H��A��
u�L�CHH;{X���x
��H�H��hH���fDH�KPE�������mH;KX����h��H�{@��H�qH�sPD�)D��A��
�h��+��t
A�EЃ�	�dD��H��A����5��D��H���5��A�EՃ�DE�H�CPH;CX�����H��������H�CP����D��H��E1��B5�����DE���/�D$H�KP	���H9KX����h��H�{@�}H�qH�sP�)H��@��
���UЃ�	�����H��A��E1�.�D$�4����H��1��4���&���f.�A���t:H�KPL�CHH�A���h��H�CP@��hI9�s�y�
u�y�
uH��H�KPE���WHc��H����E������H��A�<���������Ũ�D�D$1ɉ�D��H������H�T$(dH3%(��H��8[]A\A]A^A_�DH;CXs��huH�{@vH���r�����	H�CPH�PH�SP�0@��
�Y
�F�E1�	v�F���v�F���w,fD��_���FЃ�	�����߃�A����H�KP��h�H�A�H�CPH;CHv
�y�
��	Hc��H����9����E���z�D$1�E1�D��H�5��H��1�����������H�SPA��H;SX�)��h�H�{@�H�BH�CPD�2A��
��D���߀�X�������B�3D���߃�D�$A��_t��O��A�FЃ���E1�A��_�3A�FЃ�	wfA��7��D��H��E1��*2��H�CPH;CX����h��H�{@��H�pH�sPD�0A��
u�A�
H;sXs
�x
�
Hc��9���E����A�Fȃ��JD���߃�E��A��.��A���t#H�CP��h�H�P�H�SPH;SHv
�x�
��	Hc��H����(H�߾���E1��
H�߉¾:�L����/�����wh�X&��n��/���f�D��H���1��H�KPH;KX�w��h�jH�{@�_H�AH�CPD�1A��
�����H;CXs
�y
�`E1�1��D$E1��
���@H���H�����0	H�SP�����H���(��H�KP���o���H�A�L�CH1�E1��D$��h����H������H�KP���S���H�A�L�CHE1���h���DH���1�A�;������8"�����H�=���e���L���H�D$L���Q�H���L��H�����H�L$�H��pH�D$H�JI$H�0���U���n���f.�H���(������H�KP����H;sXs
�y
��H�CP��hL�CHH�H���@��hH�KPL9�v
�x�
�vH��E1����@H;sXs
�y
����hL�CHH�KP��@��hI9�s
�x�
�[H�A�1��D$E1��;���f�H��E1��.��H�CPH;CX����h��H�{@��H�xH�{P�0@��
�����H;{X�����x
����H��H�CP���f�H;CX����h��H�{@��H�xH�{P�H����
����E1�~Ѓ�	wj��_��FЃ�	�H��E1���-��H�CPH;CX�z��h�mH�{@�bH�xH�{P�0H��@��
u�H;{Xs
�x
�3��h�H�CPH9CHs
�y�
��Hc��H����9���0E���M�������H;CX�c��h�VH�{@�KH�xH�{P�H����
����E1�~Ѓ�vq��h�H�CPH9CHs
�y�
��Hc��H����9����E�������H�߾�z��E1��H�߉¾:賠�����fD��_��FЃ��|H��E1��x,��H�CPH;CX�M��h�@H�{@�5H�xH�{P�0H��@��
u�H;{X�+����x
�!���H�HH������fDE���Hc��9���H�KP��h�H�q�H�sPH;sHv
�y�
��H����E�������H�߾�|��E1��H�߉¾:赟�����E���=���A�_����H;CX����h��H�{@��H�PH�SPD�0A��
�_A�F�<	���Hc��H����H���~��!���H����������H�CP����E����H�KPH�A���H������������H�CP�R���A�
H;CX�
����z
����H��A�
H�SP���Hc��H����;���`���H�߾�I��E1��H�߉¾:肞���e���E1�H�5�H����������hL�CHH�A�H�CP��@��hL9�v
�y�
�H�KPH�A����H������������H�CP���A�_����E���QH�KPH�A��D���H���������H�CP����0H��E1��)�����y�
�t���H��H�KP�g���H���F������H�CP�W���H��H�KP�(���A�_���H�AH���a���H���	��������H�CP���H;SXs
�x
��E1������y�
�8���H��H�KP�+���E1�H;{X��������H�CP��h�H�H�H�KPH;KH�����x�
�����x�
����H��1��D$E1�H�CP���@H���`������`���H�CP�5���A�_����y�
����H��H�KP����x�
�����H�H�1�H��E1��D$���H��L�CHE1�1��D$E1���h��E1�H;{X������z����y�
�<���H��H�KP�/����y�
����H��H�KP����H;SX������x
�����H��H�CP���H��A�
H�CP���Hc��H�����J����x�
�����H�H�E1�H���	�x�
����H��H�CP����H��H�CP�4���H�HH�����A�������Hc��Hc�A9��b���E�������!�Hc��H����;���L�������Hc��H����;����������ff.�ATUH��SH���H��H�GH��vUH�xtN�96��A�ą�tbH���t)H���v��uH���c;����uH�5x�H�����A�D��[]A\�f�1�H��H����0����t�H���u���@1�H��H���S���u1�H��H����0����t�H���H��H��H�p�(I��H���H�pH��t�Hc��H��H��?�I���u���ff.�@H������������H��sHc�H�>��@H����*H�=���X��H�����1�H���H����.H�=E��(��H����+H�=U����H����$H�=������H����&H�=u�����ATUSH�����;tH��H���d��[1�]A\�D;Fu�HcNH�GHL�g`H�oPH�H�O`HcNH��H�H�GP�)��H��t�L�c`1�H�kP[]A\�DAUATUSH��H���H��tS@��tBI��H��L�-�H�[ H��t,H�H�sH������t4��tW��t:H���L���3���H�m(H�E H��[]A\A]�@L��L���
����H�
�L�������H�
�L������t���ff.���V@��HH�N8f���f%�	ЋV0f��HH�����8H��t:H�H(��~"H�P H�@ H�P0H�@8����H�@0��fDH�H0H��u��DH���U1�SH��H��H�H������O����L����M���+t�0H�H������+u
H�V H�v0H��u�H��tH�H������-t(H����H��H�uH��H�}�[]���fDH�z(u�H�rH��H�3�����@H�V(�f�H�v(H��t�H�H������M�]�����f�H�n(H�v H������H�H������L�,����H��[]��ff.�@AWM��AVI��AUI��ATM��UH��H��SH��H�����H�����Ao'H�cIc%�H��H	�H�H�L$@���L�����fo��H��H�h L�h(H�X0L�`8@@H�D$H�oH�D$PIP�oH�D$XQ`�oYpH��tH��H���t0��H��H��[]A\A]A^A_�f�L��� �,L���k���H���b���ATI��UH��SH���tuH���v����tdH���H��tvA�$H�KD�KA�D$D�CL�H���A9�uA9�tWAR��H�5��1�APH��L�y���XZH��[]A\��H���L��H�����H���H��u�[]A\�D�H�=/�L���������t��ATUH��SH��H���H��t*I��1�����u<H���H��[1�]A\�������H��1�H���H��[]A\���L��H��H�4�[]A\���f.�H���twATI��UH��SH��H���v@��t+H���1�H�������t.[L��H���H��]A\���H���h4����t�[]A\��H���H��1�[]A\����ff.�@ATI��UH��SH�^ ���tL��tH����[L��H��H��]A\�͊��DL��H��H�y�����H���1�1�������@H���(5���fDATI��UH��SH�:H��H������?t$��@u7�fH����H��L��[H��]A\逝��H��H�RH���A���H����@H�ſ��qtH�ǿ��rt���H��H�5��H��1��7��DAUATI��UH��SH��H����H�H��H������?����@u<H�߾f��foEH�CHcU%�H��H	�H�H��H��[]A\A]�f�H�Ѿ+�8���H��L��8H�X �fI��H�@(H�@0�҈��H�@ H�@(L�h0H��[]A\A]�H��[]A\A]�!����H���1�1��0��H��H��L��[H��]A\A]����H��L�T$ A�AhtH�����*H��t}�F(H�v0A�A0I�q M��tQA�@(A�A4I�@0I�A(I�@ �AoI�A8I�Q`I�A�ah�AAIc%�I�I@H��H	�I�L��H���DA�A41�I�A(�@A�A0�fDI�qH� �L�L$���L�L$H��L���ff.�SH����(��H�ƸH��u
[��H��H��H����=���1�[�f�AWAVM��AUM��ATI��UH��SH��H��H���
tzH���tqH�����H��tH�H��������L��@�L������AoH�X H�h(@0IcH���H��H	�H�H��[]A\A]A^A_�fDH��L������H��tH�H������t1L��@�L���|����AoH�X H�h(H0�f�I���I�H����9�uM��M�x(M��u�L�D$L��@t\�L�������AoL�D$L�x H�h(P0H�IcI�@(��H��H	�H�I�EH�CH��H��[]A\A]A^A_�D�L���Å���AoL�D$L�x H�h(X0�ff.�AWI��AVM��AUI��ATI��UH��SH��L�L$���L��H������I�L$H��8�+�W���L�L$�8H��L�` �%H��H�@(L��H�@0�&���IcH�L�h H��L�x(��H�X0H	�H�H��[]A\A]A^A_�DAVAUATUSH��dH�%(H�D$1�H���kH�I��H��I��H�����#�����;t>A�L��H��L���EH�L$dH3%(�(H��[]A\A]A^�@I��$��H�=���������H��4$H��u-L�5�f.��L����H��H��4$H��t�L��(�2L�����L��8L��H�X �+I�����L��8L��L�p �$H��H�@(H�@0跃��H�h H�@(�H�X0�
���f��H�=0�����I��$pH��H�$H�2$H�0�<�������1���������@AWAVAUATUSH��H��dH�%(H�D$1�H����H�A��H��I��E��H���ƒ���F�����P�����owYH�
fHc�H�>��A����A��u8�H�=�����H��H�$H�41$H��pH�0�m��DH�L$dH3%(H����H��[]A\A]A^A_�f�H�^ H��t�H�H�����P��[���H��H�����H��tJH��H�����H���>����t3�.H�=V��y��H��pH��H�$H��0$H�0����H�H�������A����A���4����H�=�����H��H�$H�H0$H��pH�0�i�����@H����H�=������tCA����A��u3�H�=e����H��H�$H��/$H��pH�0����8H���������DH����H�=�������tCA���A��u3�H�=��9��H��H�$H�N/$H��pH�0���L��(�2H��袀��L��8H��H�@ 7�9I��肀��H�X H��L�`(H�@0����f.�A���>A��������H�=���w���E�������H�s L��H���0���H�s(L��H��H�C ����H�C(H�H������Z�7��[�U����]H������C���H�s E��L��D��H���r���H�C �!���f�H�s A�L��H���F���H�s(L��H��H�C A���(���H�C(�����L�{(E1�E��t
E1�I9�A��I�w L��D��H����I�G �����H�=��[�����H�=6��C�����H�=���/�����H�=к�����H�=���i����\H���r�������8���AVAUI�պATI��UL��A�SH��H���)���H��H��8�I���a~��L�p H��L�h(L�`0[]A\A]A^�E"��DAWI��AVM��AUATUL��A�SH��H��H��L�l$PL�d$XH�T$����H��H��h�H�$��}���AoL�$L�T$L�x0H��@8�AoML�@ HH�Ao$L�P(PXH��[]A\A]A^A_�!��AVM��AUI��ATI��UH��SH����L��8H��%�o}��Ic$H�H�X H��L�h(��H�@0H	�H�[]A\A]A^�ff.�@��AWAVAUATUSH��H�$H���fo��dH�%(H��$�1�H��$PI��)�$0H�D$`H��$HDŽ$���h ����H��$0L��1�L��$�	H��H�D$0H��$����M��L�d$@M��fo-j�H�l$8I��H��$�fo�$0H�D$HI��E��$hH�D$()�$�	H�D$ �DŽ$��D$����)l$p)�$�)�$��\$A�� ���D$A�� fA���H�t$ H�\$(H�6H�T�I9��*L��H)�H�H�JH�L$H��'���H='�'HN�H�,H�T$ H�DH��H�|���H���r�L�|$H��H��H��H���O�4?N�,�I��L���7��H�t$8L��H�H�D$PH�����H�L$ H�t$@L��L�|$(H�D�H��H�D$���H�D$HH�L$PH9�tH��H�L$8���H�L$8H�D$H�\$(N�|1�N�t-�L�l�A��$h ��H�D$ H�DA�I9����H�D$H�l$8H�L$(H�D$@�D$=��g�Lc�H�2�B�X�D$=�����>�|$���D�L$E�����|$���|$j���
A��$h ��
D�D$�=h>w;H�H�ڔ�B9�u*H���B���/�������ۉ\$�H��B�X�D$����HcD$H��H����,�H�L$X)�@�l$hH��l$I��H��$������I��$���Hc����I�UE��$hI��$�H��I��H��$HI��L��L�D$PH��I�DH��$@fo�$@)�$�A�� �KH�L$XH�W�H�5h�L���H�D$�P�1�������L�D$P���D$I�LH����K�l�L��$���L��$�H��L��$�I��H�D$PK�GI��H��I��D��H�50�L��1��|��K�~L��H��L��I��H��I���<C�2��H�5�L��1��H��L;|$Pu�L��$�L��$�L��$��|$�k�D$H�]Hc�H�>��fDE��$hI�UH��$@H��$Hfo�$@)�$�A�� ���D$=�!H�
�hHc�H�>��H��$@I�6L��H���bx��H��$H���/I�H�����H�ك�H������H��DubH�����I��$�H�@H��v2H�xt+H���vH��H��-���v&1�H��L���	����u1�H��L���x�������I��$�H��H��$����H�X%$H��I��$p�H��$�H������E��$hI��$�A�� ��H�D$hH��I)�H�H��I)�H�[�L��I)�H�D$�D$L�l$P��~Z1�L�5�D�l$���A9�t0I��$����A��$h t�H��L��L��1������A9�u�A��$h �	
I��$�I��$�L�u���H�L$XH���H��$fo�$@A�7IDŽ$�H�EH�D$PL�hPH�D$�H��-�H��B�h>wHc�H�5H�f;V�VH����B�D$E��$hI��A�� �T����T$1�H�5��L���3���D$E��$hA�� fA��6���H�|$(L��L������!���L�\$XI�t$L��A��$hL�|$L�\$L�t$P����L�\$I��$tL�\$1�L���	
��L�\$@1��D$A��$h �w���H�5��L��1�L�\$���L�\$�W����A��$h �H��$I�\$HDŽ$I�$H�D$0I�D$H���M�D$P�;M�D$`�I��$�H�SHDŽ$(H��$ H�C�K!HP�CH�T$XH�D$�ȃ� �L$h����$��D$PM;D$X��
A��$h��
I�|$@��
I�PI�T$PA���
�#�I�|$HH�GI9D$P���D$h��I��$�L��$�1�D�|$PL��$�L�t$XL��$�I��L�\$P�f.��C�<
�T
<
uH��A��$�����
H����H��L��H��L��L)�诔��I9\$X��I�D$XI�D$PA��$����˪L���b�������I�D$PH�PI�T$P�8
�3
I�t$XI�|$HE��L��H�L$��%�����4�I�D$8I�\$XL�@I9��:���A��$����N���ADŽ$�H���B���H��$ H��L��L)�H�T$�ʝ��H�T$H���H�PI9\$X�)����H�ʰH��L��趓���
����HcD$�=j�CD��$�E���Nfo�$0��$���$0��$4)�$�uD�D$E���C
���l$L��A��H�\$(fDH�!�B�X=����t��=h>wH�H�
"�f�<A��L9��^�E�oMH��L��M��D�mI��I���D$H�F�H�=�H��B�4X)�$��h��I��$��l��A��$h uM��`����H��H�5��L��1����M�A��$h �1���L��L��H��D�\$�&��Lc\$����@H�
1D�AE���,���fo�$0I�FD��I��l$H�D$H��$)�$�I�FH��$8M�uA�mA�]I�EA��$h �Z�I��$��D�D$M�����D�D$L�t$DŽ$�D�D$����D$L��M��I��L��I�ƋD$���t,�=j�H�L$0H��$M��H�=̮�$g��A��h �FH��H�ɮH�D$M9�t6fDI�UH�D$L��M��H��I��I���4PH��H����f��M9�u�L;|$HtL�����H��$H;|$`t����H��$�dH3%(�D$�{�H���[]A\A]A^A_�A�t$hL�|$L�t$PL�\$X@�����M;T$X�7�A��$h�(�I�|$@��I�D$PH�PI�T$P�(@��
��I��$�L�D$P�	��L�\$L�T$H��PXL�T$L�\$��L�D$P�c�L��L�\$PL�D$XL�T$���L�T$I��$�L��L��L�T$H��$(�R��L�D$X�
Hc�I��$�A�xL�D$H��PXL�T$L�\$P��uL�D$A�@<_t��vL�I;\$X����\�!�I�D$PI;D$X��	���u��	�ڄ���	L��L�\$�����L���'���L�\$��������I��$�Ic�$�1�L�\$�M��$�H��$(Ic�$�I��$����H��$PL��H��H��H�L$���H�L$I�,$L��(�?�m��I�|$`I�t$PH�X I��$�H�EH)����H��I��$����L�\$A��$h I��$���}
I��$A�D$h��	�>L��L�\$�� ���D$>L�\$DHcD$H���,A��$h �)�1�H���L��L�\$H�5u��,���H�T$0L���H��$�E&��H�5תL��1�����L�\$���f.�I��$�H�5��L��1��׿�������D$L��M��M��M��L�|$(f�HcD$H�4��4���D��$�H���4E�������H�D$0L��L�\$H��$PH��$��$XH��H��$`H��$H��H��L��$PH�D$�g��L�\$�����H��������	H�t$0L��L�\$�L$�����L$L�\$�����fo�$0��$0��$4)�$��5���f�E��$h��$�������$�A�� �/H��$A�� I�nfo�$0I�FM�uAm�QI��$�I��$�M��I�������\$IDŽ$��D$�������DH�9�B�X�D$���X����|$������t$�%���H�T$ L��1�H�L$(H�5����H�L$(��H�a�H�5�L��1����H�L$XH��sH��$@H��$H��H�D$�<HL���#��H�5R�L��1�����H�D$hD�T$H��I)�H�H��I)�L��I)�L�l$PE������=�DL��L��L���������DH�5��1������j�D�C�k�D$�CHDŽ$(�D$PI��$�H��$ �����@���~�E��$hA�� ��͢A�D$hI�|$��L�\$�^�����L�\$I�D$���B�D$�I��$���t$L��L�\$���L�\$���fDH�5�L��1�L�\$�2���L�\$����A��$h�D$hDŽ$�M�D$P��L�|$A�\$h��L�t$P��$�����{���ȀL�\$X��A��$h��$��ɉ�$�A��M;D$X��A��$h��I�|$@��M�PM�T$PA�(A��@��
��	@��~�$H�eHc�H�>��f.�H�L$0M��H��$H�=�L�\$�^���D$����L�\$���DH����P�D$��H��$H�t$0L������L�\$���M;D$X���A��$h���I�|$@���I�HI�L$PA���
��������B����Q��� �H���@��9T$���L$X��1�H��H�5��L���R���H�T$0L���H��$�k ��H�5��L��1��*���E��$h���I��$�H�5��L��1��������L��L�\$葓��L�\$���?M�D$P�2�f.�H�C�I9�t
�{�
���A��$������L��M��$��
H��H9��9��L��L���	����u��"�I9�r���f�I;T$X���x
���H��I�D$P��fo�$0��$0�D$��$4)�$���L�\$X��L��L�|$L�t$PL�\$����L�\$�D$I��$�����D�T$E���-�t$L��L�\$�,��L�\$�_�L�|$L��$�L��$�L��$�I��$�ݡI�t$PI�|$`H��H)�H�D$H��~@�D$h�ԡL�\$H��H��E1�I��$jL��L��$0H�L$(����XZL�\$�AL��L�\$�z���L�\$I�D$XL��L�\$I�D$PI�D$H�p�%���H�L$X�T$1�H�5k�L�����I�D$PL�\$A��$h I�D$`����A�D$h�D$Z�>���L��L�\$������#L�\$�?H��$(L�|$H��$ L�|$XL��$�I��L��$�D��$�L��$��
f�I��$�I��E1�1�H���
D��L��H��$(AV�B���A[[�������
�-�I�D$PI;D$X��A��$h��I�|$@��H�HI�L$P�0@��
�ڙL�����E��$�E���?�I�D$PI;D$X��A��$h��I�|$@��H�HI�L$P���
���I�t$XI�|$HL��D�D$PH�L$������N���������A��$h�I�T$PH�B�I�D$PI;D$H�����z�
�����z�
�����H��I�T$P���L��蚏������I�D$P����L��耏��������I�D$P�F���L���f��������M�D$P�%���A��$���8I�t$XD�D$PL�\$H�L$H�T$X����L�\$�����L���"
��L�\$I�D$L��L�\$H�p�w���I�D$PL�\$A��$h I�D$`��٦A�D$h�D$Z���H��$H;|$`tL�\$�ɳ��L�\$H��$L�\$蒺��H��$H���H�t$L��H��H���]��H��$L�\$�������%@�D$X��9T$���L��L�\$h�T$���@��L�\$ht
�T$��#��A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�3�L�\$H��L�C��H��$0L��P�L$`�T$(L��$0�>���AXAY���L�\$uCA��$ht8�|$X�����L�\$@�����H�5��L��1�虽��L�\$�K�I��$�Ic�$���L�\$�M��$�H��$ Ic�$�I��$��]���H��$PL��H��H��H�L$肹��H�L$I�,$L��(�?�g_��I�|$`I�t$PH�X I��$�H�EH)��E���H��I��$�����H��$ 1�L��I��$��{����D$AL�\$���H�L$XH�=�H�5N�L���H�D$�P�1��Ѳ����L��H�D$`M��H�t$0H�H�L��M��HDŽ$�H��$���H�t$0H���L��M���o��L�|$(�D$��ADŽ$����L��L��$����L��$��D$A��$����tA;�$�}A��$�ADŽ$������l$��������#L��L�\$���M�D$PM;D$XL�\$���A��$h��I�|$@�s�I�@I�D$PA���
�����
I;D$X����A�x
�����I�@�
I�D$P���M;T$X�*�A��$iuL�����H��QfDA��$huLI�|$@wDI�@I�D$PA���
�G�������� ���H��H�����M�D$PM;D$Xr�L��葊�����M�D$P�A�t$hL�|$L�t$PL�\$X�ƀ���A��$h �׷A�D$h�D$~�$�L�|$L�t$P�L�\$XA��$h �9�A�D$hA��$h�D$;���L�|$L�t$PL�\$XM;T$X���A��$h���I�|$@���I�T$PH�rI�t$P���<
�C���:���A�D$h����#�ֺ��"����'�H��(�L�\$�j���L�\$H�@�@'I�D$��A��$h ��A�D$h�D$R��I�t$xL�|$E��$hL�t$PH��L�\$XI�t$xA�� �j�I��$�H��A�� I��$�����A�D$hA�l$l�D$]��M;T$X���A��$h���I�|$@���I�D$PH�PI�T$P��\$��
�Z��|$
���DL���&���D$hM�D$PA�\$h��A�t$hL�|$L�t$PL�\$XA�D$l�ƀ�A��D$K��Au7��%=t)�D$[@��0t��%D$h���$K�D$E��$h�A�� ��A�D$hI�D$xH�4I�t$xA�� �ͿI��$�A�� H�4I��$��w��+H�͑L��L�\$�F���L�\$�T�L�|$L�t$PL�\$XM;T$X��A��$h���I�|$@��I�D$PH�PI�T$P�(@��
�8�M�D$`L��L�\$���@L���M���@L�\$�D$6�w���������A��$h �4�A�D$h���t7A��$h�]�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���H��$PL��L�\$����|$6L�\$���H�5G�L��1�L�\$�h���L�\$I�$H�!�A��$h �8�A�D$h��A�t$hL�|$L�t$PL�\$X��%�������A��$h �^�A�D$hM�D$PM;D$X�%�A��$h��I�|$@�
�I�PI�T$PA�<
�{���=�e���>��I�D$P�D$>A��$h�H�P�I�T$PI;T$H�L��x�
�B��x�
�8�H��I�D$P�*�f�I�D$HH��I9���I�\$X�H�ԟL��H���R
������I�D$X�bL��H�-#I�D$P���I�D$XI�D$P�.I�T$P�cL��A��$h�H�B�I�D$PI�D$XI�D$P�r��I�D$PI;D$X��A��$h���I�|$@��H�xI�|$P���
�]���=u��H��H���	�����u���I�D$X�dL��I�D$P�
��M�D$PA�\$h���D��L�t$PL�|$L�\$XM;T$X���A��$h�y�I�|$@�m�I�L$PH�qI�t$P�<
����*�����=��A��$h�I�L$PH�q�I�t$PI;t$Hv
�y�
����L$hA�\$h����0t���j��D$N��Au(�ށ���t��u�����D$*��%�������A��$h ��A�D$h��I�t$xL�|$E��$hL�t$PH��L�\$XI�t$xA�� ���I��$�H��A�� I��$��=��A�D$hA�l$l�D$)��A�D$hL�|$�D$HL�t$PL�\$X�A���������T$h�D$(��t~�D$I�0ur����tb�D$(�tVA�D$lA9D$ptJ�[H�=k�L�\$H��$���I��$pH��H��$�H��$H�0�:���L�\$I�D$xA�D$lE��$hH�4I�t$xA�� ���I��$�A�� H�4I��$��J��A�D$h��A�D$hL�|$L�t$PL�\$X�t��$��@u
1ۨ0����(�L�\$�Y����D$SL�\$H�'�XH�HI�D$I�D$PH��I�D$`��L�|$L�t$PL�\$XM;T$X��A��$h���I�|$@��I�D$PH�PI�T$P�0�t$@��
���|$<�ʞA�t$h�ƀ�r��A��$h ����|$=A�D$h���|$<���|$�t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$<�0�L�|$L�t$PL�\$XA�D$tA�D$lA9D$p�K�A�t$h����@��:�=�@������D$MA��$h���A��$h�� �z�E��$hA�D$hI�D$xA�D$lH�4I�t$xA�� �[�I��$�A�� H�4I��$��r���+H�ȉL��L�\$�A���L�\$�O�A�t$hL�|$L�t$PL�\$X@�ƀ�&��������$����V�� A��$h ���A�D$h�D$`���A�D$tL�|$�D$[L�t$PL�\$X�P�A�T$t�����E��$hI�t$xH��I�t$xA�� �z�I��$�H��A�� I��$����A�D$hA�l$l�D$}�j�L�|$L�t$PL�\$XM;T$X�`�E��$hA���M�I�|$@�A�I�D$PH�PI�T$P�0�t$@��
����|$|�"��|$=�]�A�t$h��%����%���A�� ����|$�A�D$ht(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
����D$|��A�t$h���Au��1�%=�øA��$h ��A�D$hM�D$PM;D$X���A��$h���I�|$@���I�@I�D$PA���
�����.���I�L$HM�D$PA��$h�L9��D���0��	���I�D$PH�P�H9����X��.L�������Ã�0��	�ؗH�5��L��葒���A��$h ���M�D$PA�D$h��M�D$`�?�L�|$L�t$PL�\$XM;T$X��A��$h��I�|$@���I�D$PH�PI�T$P�(@��
�P�A�t$h�ƀ�~�A��$h ���A�D$h��@���A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$-���D��L�t$PL�|$L�\$XM;T$X��A��$h��I�|$@��I�L$PH�qI�t$P�<
�����&�V���=�N���.�r�A��$h�I�L$PH�q�I�t$PI;t$Hv
�y�
�6��L$hA�\$h����0t���z���A���ށ����ե��u���c��D$&��%�������A��$h �[�A�D$h��A�D$hL�|$L�t$PL�\$X�A�k�%=�[�L��L�D$L�\$�N|��L�\$L�D$��=�����D�L$hA�t$hA��@��0t	E�������t	��s�X���%�������A��$h �:�A�D$h����}�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�-������E������E���v	�� �<��D$%��L�|$L�t$P�L�\$XA��$h ���M�D$`L��A�D$hL�\$�V�M�D$PM;D$XL�\$��A��$h��I�|$@���I�PI�T$PA�(@��
���E�<]�v�H�
)K��Hc�H�>��A��$h��$�I�l$X����	�H��A��$hI�D$`L)�H��$�H�����H��L������I��H�����H��H��H)����H���{�DŽ$�L)�H�X�H��~mH�D$E1�M��L��$��A����c���;wH��H��H��H��u����	��v	�� �5�I��H��u�L��$�I�l$XH��$�I�l$P�aL��I�D$`����DŽ$�A��$h��$�A�\$h����	�A��$h�Á���������$������DŽ$�M�D$P�J�I�|$HL�|$L�t$PL�\$XH�GI9���L��L�\$�D�L�\$A�_A�D$h�L�ۉD$A����D��L��C��N~�������I�D$PI;D$X�w�A��$h���e�I�|$@�Y�H�HI�L$PD�A��
�l�����I��A��!���A��?���A��=��A���t)M�D$PA��$h�I�@�I�D$PI;D$HvA�x�
����D$7Ic�$�I��$��A�\$h��t
��$�u��0tM�D$PI�D$XI9�s
A�8:���@��t	�������q�{���$����5�� A��$h �6�A�D$hL��L�\$P�w��|$7L�\$PH������D$������|$3����I��$�H�@H����H�x��1�H��L��L�\$��L�\$����A��$h ����A�D$h�D$3�G���A�D$hL�|$L�t$PL�\$X�A���%=���M;T$X�a�A��$h�R�I�|$@�F�I�D$PH�PI�T$P�(@��
�����=�o�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D�D$hA�t$hA��@��0t	E�������%�������A��$h �4���A�D$h��E���
��E����7��� �.��H�=��L�\$H��$����H��#H��I��$p�H��$�H��pHDŽ$�/�4����D$/L�\$����f�L�|$L�t$P�L�\$XA��$h ���A�D$h�D$,���L�|$L�t$PL�\$XM;T$X��A��$h�
�I�|$@���I�D$PH�PI�T$P�(@��
���A�t$h�ƀ�p�A��$h ��A�D$h��@�k�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�Y��D$+����L�|$L�t$PL�\$XM;T$X�:�E��$hA���'�I�|$@��I�D$PH�PI�T$P���
����=�ѳA�t$h��%�������A�� �?�A�D$h���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
����D$^� ��A�D$hL�|$L�t$PL�\$X�t��$��@u
1ۨ0����(�L�\$������D$SL�\$H�"�XH�HI�D$I�D$PH��I�D$`���L�|$L�t$PL�\$XM;T$X�͘E��$hA�����I�|$@���I�D$PH�PI�T$P���
�A�A�t$h�ƀ���A�� ��#�A�D$h��@t?��=����~������t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���D$!����A��$h�.���H�5v�L��1����M�D$PA�\$hM�D$`�`��I;T$X�a�E��$hA���N�I�|$@�B�I�D$PH�PI�T$P�(@��
�F�A���k�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���_�$L��L�\$�z����L���p��L�\$L��L�\$����D$5L�\$�����$L��L�\$�:��L�\$���L���6A��$hu?I�|$@w7I�@I�D$PA�0@��
����FЃ�	���L������M�D$PM;D$Xr�L���o�������M�D$P벽0�$L��L�\$���L�\$��L��L�\$�y��L�\$�������A��$h ���A�D$hI��$��@Ic�$�I��$�L�\$����L�\$��L�\$�p�I��$�1�L��A��$�H�5L����I�$L�\$�D$5H�!������m���@�l$H��$PL��H��L�\$���H��(L��7I�$��@���l$I�|$`I�t$PI��$�H�h H�H)�轔���D$@L�\$I��$�����$L��L�\$�q���-L���d��M�D$PM;D$XL�\$�R�E��$hA���?�I�|$@�3�I�@I�D$PA���
�a�A�����A��$hI�T$P��H�J�A��$hI�L$PI;L$Hv
�z�
�'����D$$A��$hI�D$PH�P�I�T$PI;T$H�I���x�
�?���x�
�5��H��I�D$P�'���A��$HA�V�H��$@L��I�6H��$�����	�H��A��$H�\��I��$�H�����H��$�`���H���#H��I��$p�H��$�H��0���E��$hI��$��g��I�V�I�M�E�L��$@L��蟷��I��$�H�����H��$H�����H��H�����H���Β��H�/�#�H��$�I��$pH��$�HDŽ$��H���H��H��$��G���E��$hI��$����I�V�I�M�E�L��$@L����I��$�H�����H��$H���2���H��H�����H��� ���H���#�H��$�I��$pH��$�HDŽ$��H���H��H��$�處��E��$hI��$����I�I�v�M�E�L��$@L����I��$�H�����H��$H��脑��H��H�����H���r���H���#�H��$�I��$pH��$�HDŽ$��H���H��H��$����E��$hI��$��]��I�I�v�M�E�L��$@L���E���I��$�H�����H��$H���֐��H��H�����H���Đ��H�%�#�H��$�I��$pH��$�HDŽ$��H���H��H��$��=���E��$hI��$����I�6I�M�~L��L��$@H��$�蓾��I��$�H�����H��$�'���H���#H��I��$p�H��$�H���HDŽ$�~谓��E��$hI��$��"��I�6I�]�H��tA�L��1�L���[���H��H��L��$@�!L����I��$�H�����H��$�H��$�|���H���#H��I��$p�H��$�H���HDŽ$�!����E��$hI��$��w��I�I�v�M�E�L��$@L���_���I��$�H�����H��$H����H��H�����H���ގ��H�?�#�H��$�I��$pH��$�HDŽ$��H���H��H��$��W���E��$hI��$�����I�~�I�.A�E�H��H��H�|$L��D$P迲��L��H��贲��H��H�����H�H��$�H������F���H�H������D�����E�x�H��$@�8�9L��H����9��H��H�D$H�i(H�A H�A0H�HcT$P%�H��H	�H�I��$�H�����H��$H��覍��H��H�����H��蔍��H���#�H��$�I��$pH��$�HDŽ$��H���H��H��$��
���E��$hI��$����I�I�v�M�E�L��$@L���g���I��$�H�����H��$H�����H��H�����H�����H�G�#�H��$�I��$pH��$�HDŽ$��H���H��H��$��_���E��$hI��$�����I�I�v�M�E�L��$@L��蹲��I��$�H�����H��$H���J���H��H�����H���8���H���#�H��$�I��$pH��$�HDŽ$��H���H��H��$�豏��E��$hI��$��#���I�I�v�M�E�L��$@L������I��$�H�����H��$H��蜋��H��H�����H��芋��H���#�H��$�I��$pH��$�HDŽ$��H���H��H��$�����E��$hI��$��u���I�6L��H��$@�z���A�U�A�E�L��H��$P�_I�.��$P��$X� ��$T��$\��6��H�ٺ0L��[H�D$�6��L�D$I��$�H�����H�h(H��$�L�@ H��$莊��H���#H��I��$p�H��$�H��PHDŽ$�����E��$hI��$�鉿��I�6L��H��$@莮��A�U�A�E�L��H��$P�_I�.��$P��$X� ��$T��$\��5��H�ٺ0L��ZH�D$��5��L�D$I��$�H�����H�h(H��$�L�@ H��$袉��H��#H��I��$p�H��$�H��HHDŽ$��+���E��$hI��$�靾��I�v�L��H��$@衭��A�UA�EL��H��$P�_��$P��$X� ��$T��$\��4��M�F�H��L��0�[H��L�D$��4��L�D$I��$�H�����H�h(H��$�L�@ H��$豈��H��#H��I��$p�H��$�H��PHDŽ$��:���E��$hI��$�鬽��I�v�L��H��$@谬��A�UA�EL��H��$P�_��$P��$X� ��$T��$\�4��M�F�H��L��0�ZH��L�D$��3��L�D$I��$�H�����H�h(H��$�L�@ H��$���H�!�#H��I��$p�H��$�H��HHDŽ$��I���E��$hI��$�黼��I�v�L��H��$@迫��I�6L��贫��M�F�H��L��0�[I�.L�D$�#3��L�D$I��$�H�����H�h(L�@ H��H��$����H��H�����H�����H�V�#�H��$�I��$pH��$�H��$�H��PH���z���E��$hI��$����I�v�L��H��$@��I�6L�����M�F�H��L��0�ZI�.L�D$�T2��L�D$I��$�H�����H�h(L�@ H��H��$�8���H��H�����H���&���H���#�H��$�I��$pH��$�H��$�H��HH��諉��E��$hI��$�����I�~�H��$@�T�H�ٺ L��lH��$��1��I��$�H�����H��$H��舅��H��H�����H���v���H��H�����H�D$P�b���H���#�I��$pH��$�H��$�H���H��H�D$���L�L$H��L�T$PH��hI��$p�H��$�L��$�L��$�謈��L��$�H��H���I��$pH��$�L��$��x���L��I��$�踎��E��$h���A�E�A�M�L��A�U�A�u�I�^�I�n�$\I���$P�Y��$TH��$P��$X�(H�D$�40��E�F�H��L��H�X H�L$L��$@H���G��I��$�H�����H��$H������H��H�����H����H��H�����H�D$P�܃��H�=�#�I��$pH��$�H��$�H���H��H�D$�d���L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��&���E��$hI��$�阸��A�E�A�M�L��A�U�A�u�I�^�$\I�I�n؉�$P�X��$TH��$P��$X�0H�\$PI�^�H�D$��.��E�F�L��H�L$H�h H�T$PH��L��$@H�X(�E��I��$�H�����H��$H��詂��H��H�����H��$�蒂��H��H�����H��耂��H��H�����H�D$P�l���H���#H��$�H��$�I��$pH��$�H�D$H��H��$�H�����L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$�覅��E��$hI��$�����I�E�M�F�I�N�L��I�v�M�PI�E�PI�E���PH��$XS�K��I��$�H�����H��$(H�� H���y���H��H�����H��$��b���H��H�����H��$��K���H��H�����H���9���H��H�����H�D$P�%���H���#H��$�H��$�H��$�I��$pH�D$H��$�H���H��$�H��H��$��荄��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��O���E��$hI��$����I�E�M�F�I�N�L��I�V�I�v�PI�E�PI�E�M�PH��$XS�6J��I��$�H�����H��$(H�� H���#���H��H�����H��$�����H��H�����H��$����H��H�����H������H��H�����H�D$P����H�0�#H��$�H��$�H��$�I��$pH�D$H��$�H���H��$�H��H��$���7���L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$����E��$hI��$��k���I�E�M�F�I�N�L��I�V�I�v�PI�E�PI�E�M�PH��$XS��H��I��$�H�����H��$(H�� H����~��H��H�����H��$��~��H��H�����H��$��~��H��H�����H���~��H��H�����H�D$P�y~��H���#H��$�H��$�H��$�I��$pH�D$H��$�H���H��$�H��H��$�����L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$�裁��E��$hI��$�����I�E�I�N�I�V�M�M�I�v�M�PI�E�PI�E�L��PH��$XS�:���I��$�H�����H��$(H�� H���w}��H��H�����H��$��`}��H��H�����H���N}��H��H�����H�D$P�:}��H���#H��$�H��$�I��$pH��$�H�D$H�s(H��$�H��赀��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��w���E��$hI��$����I�V�I�L��L��$@I�v��V/��I��$�H�����H��$H���g|��H��H�����H�D$�S|��H��H�����H���A|��H���#H�T$H��$�I��$pH��$�H��$�H��hH��$�H�����E��$hI��$��+���I�H��$@I�v�L��H���y=��I��$�H�����H��$H���{��H��H�����H���{��H���#�H��$�I��$pH��$�H��$�H�sxH��� ��E��$hI��$�钰��E��$hHDŽ$`�x���E��$hHDŽ$��^���E��$hHDŽ$��D���E��$hHDŽ$��*���E��$hHDŽ$�����E��$hHDŽ$~���E��$hHDŽ$!�ܯ��E��$hHDŽ$O�¯��E��$hHDŽ$�騯��E��$hHDŽ$%鎯��E��$hHDŽ$/�t���E��$hHDŽ$*�Z���E��$hHDŽ$*�@���E��$hHDŽ$-�&���E��$hHDŽ$+����E��$hHDŽ$���E��$hHDŽ$��خ��E��$hHDŽ$�龮��E��$hHDŽ$�餮��E��$hHDŽ$<銮��E��$hHDŽ$��p���E��$hHDŽ$>�V���E��$hHDŽ$��<���E��$hHDŽ$��"���E��$hHDŽ$�����E��$hHDŽ$����E��$hHDŽ$��ԭ��E��$hHDŽ$&麭��E��$hHDŽ$^頭��E��$hHDŽ$|醭��I�UI�F�I�6H�PH�x ����I��$�H�����H���x��H�����H��H���w��H��H���r��E��$hI��$��$���E��$h��A�� �u�A�D$h����I��8�TL��H��$@H��H�D$�#��� �H���������H��H�@H�@�ۀ���H�t$H��H�CH�����H�] H�E(H�E0����I��$�H��$H�����H��$��
w��H��H��$��Հ��E��$hI��$��'���I�>H��$@H��$��G}��H��L��H���)#��I��$�H�����H��$�v��H���#H��I��$p�H��$�H��h�2z��E��$hI��$�餫��E��$h�A�� �еA�D$hI�H��$�w���M�F�0L��I�.H��$@�XH��L�D$�!��L�D$I��$�H�����H�h(L�@ H��H��$��u��H��H�����H����u��H�)�#�H��$�I��$pH��$�H��$�H��H���My��E��$hI��$�鿪��I�6I�M�L��L��$@H��$�裣��I��$�H�����H��$�7u��H���#H��I��$p�H��$�H���HDŽ$���x��E��$hI��$��2���I�v�I�M�EຆH��$@L��I������I��I�M�L�纅H������I��$�H�����H��$H���t��H��H�����H���t��H���#�I��$pH��$�H��$�H���H��HDŽ$��H��$��w��H���H��I��$p�H��$�HDŽ$����w��E��$hI��$��:���I�I�v�M�E�L��$@L���"���I��$�H�����H��$H���s��H��H�����H���s��H��#�H��$�I��$pH��$�HDŽ$��H���H��H��$��w��E��$hI��$�錨��I�I�v�M�E�%L��$@L���t���I��$�H�����H��$H���s��H��H�����H����r��H�T�#�H��$�I��$pH��$�HDŽ$�%H���H��H��$��lv��E��$hI��$��ާ��I�I�v�M�E�/L��$@L���Ƙ��I��$�H�����H��$H���Wr��H��H�����H���Er��H���#�H��$�I��$pH��$�HDŽ$�/H���H��H��$��u��E��$hI��$��0���I�I�v�M�E�*L��$@L������I��$�H�����H��$H���q��H��H�����H���q��H���#�H��$�I��$pH��$�HDŽ$�*H���H��H��$��u��E��$hI��$�邦��I�I�v�M�E�-L��$@L���j���I��$�H�����H��$H���p��H��H�����H����p��H�J�#�H��$�I��$pH��$�HDŽ$�-H���H��H��$��bt��E��$hI��$��ԥ��I�I�v�M�E�+L��$@L��輖��I��$�H�����H��$H���Mp��H��H�����H���;p��H���#�H��$�I��$pH��$�HDŽ$�+H���H��H��$��s��E��$hI��$��&���I�I�v�M�E�&L��$@L������I��$�H�����H��$H���o��H��H�����H���o��H���#�H��$�I��$pH��$�HDŽ$�&H���H��H��$��s��E��$hI��$��x���I�I�v�M�E�^L��$@L���`���I��$�H�����H��$H����n��H��H�����H����n��H�@�#�H��$�I��$pH��$�HDŽ$�^H���H��H��$��Xr��E��$hI��$��ʣ��I�I�v�M�E�|L��$@L��貔��I��$�H�����H��$H���Cn��H��H�����H���1n��H���#�H��$�I��$pH��$�HDŽ$�|H���H��H��$��q��E��$hI��$�����I�6I�M�L��L��$@H��$�����I��$�H�����H��$�m��H���#H��I��$p�H��$�H���HDŽ$���q��E��$hI��$�鏢��I�I�v�M�E�L��$@L���w���I��$�H�����H��$H���m��H��H�����H���l��H�W�#�H��$�I��$pH��$�HDŽ$��H���H��H��$��op��E��$hI��$����I��$�H�����H���l��H��H�����H���pl��H���#�I��$pH��$�H��$�H��H��H��$�H��$@��o��M�F�H��L��I��$��0�XI�.L�D$����L�D$H��L��H�h(H��L�@ ��V��E��$hH��$����I�V�I�L��L��$@I�v��*��I��$�H�����H��$H���k��H��H�����H�D$�k��H��H�����H���sk��H���#H�T$H��$�I��$pH��$�H��$�H���H��$�H����n��E��$hI��$��]���I�I�v�L��L��$@�9*��I��$�H�����H��$H����j��H��H�����H�D$��j��H��H�����H���j��H��#H�T$H��$�I��$pH��$�H��$�H���H��$�H���,n��E��$hI��$�鞟��I�V�I�L��L��$@I�v��{)��I��$�H�����H��$H���j��H��H�����H�D$�j��H��H�����H���i��H�W�#H�T$H��$�I��$pH��$�H��$�H���H��$�H���nm��E��$hI��$����I�n�M�F�L��H��$@H��L�D$���H�ٺ8L��g�S��L�D$I��$�H�����H�h0L�@ H��H�@(�H��$�/i��H��H�����H���i��H�~�#�H��$�I��$pH��$�H��$�H�s(H���l��E��$hI��$�����I��$�H�����H��$��h��H��#H��I��$p�H��$�H���H��$@�@l��I�6H��1�I��$�L����S��E��$hH��$隝��I��$�H�����H��$��6h��H���#H��I��$p�H��$�H���H��$@��k��I�6H��1�I��$�L���[S��E��$hH��$����I�>H��$@H��$��M��H�ٺ L��lH�D$���I��$�H�����H��$�g��H��#H��I��$p�H��$�H����k��L�D$H��H���I��$pH��$�L��$���j��L��I��$��+q��E��$h�U���I�.�(�YL��H��$@H������I��$�H�����H�h H��$�H��$��f��H�&�#H��I��$p�H��$�H����Zj��E��$hI��$��̛��I��$�H������pf��I��$��"H�=�H���Df��H���#�I��$pH��$�H��$�H���H��H��$���i��L��I��$��p��E��$h�C���I�>H��$@H��$��s��H�ٺ L��lH�D$���I��$�H�����H��$�e��H��#H��I��$p�H��$�H����Bi��L�D$H��H���I��$pH��$�L��$��i��L��I��$��Qo��E��$h�{���I��$�H�����H��$��e��H�x�#H��I��$p�H��$�H���H��$@�h��I�.H�ٺ(I��$��YL�����H��L��H�h H���O��E��$hH��$���I�.�0�XL��H��$@H���l��I��$�H�����H�h(H��$�H�@ H��$�Ld��H���#H��I��$p�H��$�H�� ��g��E��$hI��$��S���I��$�H�����H��$���c��H�P�#H��I��$p�H��$�H���H��$@�|g��I�.H�ٺ(I��$��YL�����H��L��H�h H���jN��E��$hH��$鼘��I��$�H�����H���]c��H��H�����H���Kc��H���#�I��$pH��$�H��$�H��H��H��$�H��$@��f��M�F�H��L��I��$��0�XI�.L�D$����L�D$H��L��H�h(H��L�@ �M��E��$hH��$���I�~���=�I�V�I�L��L��$@I�v���!��I��$�H�����H��$H���fb��H��H�����H�D$�Rb��H��H�����H���@b��H���#H�T$H��$�I��$pH��$�H��$�H���H��$�H���e��E��$hI��$��*���I�F�H���R�H�Hc�$@fo�$@��H��H	�hH�I��$�H�����H��$H��$��a��H��#H��I��$p�H��$�H�sh�!e��E��$hI��$�铖��I�F�H����H�Hc�$@fo�$@��H��H	�`H�I��$�H�����H��$H��$���`��H�S�#H��I��$p�H��$�H�sh�d��E��$hI��$����A�E�A�M�L��A�U�A�u�I�^�I�n�$\I���$P�Y��$TH��$P��$X�(H�D$�N��E�F�H��L��H�X H�L$L��$@H���#��I��$�H�����H��$H���`��H��H�����H���
`��H��H�����H�D$P�_��H�W�#�I��$pH��$�H��$�H���H��H�D$�~c��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��@c��E��$hI��$�鲔��E��$hI��$@IDŽ$@H��$鈔��E��$hI��$�H�x H�P(�ݚH�@(H�@0H�@8H��$�C���E��$hA��$8ADŽ$8��$����I�M��1�1�L��H��$�����I��$�H�����H��$�^��H��HDŽ$�HDŽ$�H��$��Oh��E��$hI��$�顓��I�V�I�M�E�1�L���d��I��$�H�����H��$H���%^��H�����H��H���^��H��$��H��$�H��H��$�HDŽ$���g��E��$hI��$�����I�I�v�M�E�1�L������I��$�H�����H��$H���]��H�����H��H���]��H��$��H��$�H��H��$�HDŽ$��5g��E��$hI��$�釒��I�V�I�M�E�L��I�v��H��I��$�H�����H��$H���	]��H�����H��H�D$�\��H�����H��H����\��H�T$�H��$�H��$�H��$�H��H��$��f��E��$hI��$����I�V�H��t:I�H�AH�BH�B(H��u�{f�H��H�qH�pH�p(H��u�H�H(I��$�H�����H��$H���9\��H�����H��H���'\��H��H���c��E��$hI��$��N���I�I��$�H�����H��$�H��$��[��H��H��$��e��E��$hI��$����E��$hA��$HA�V���	�A�� A��$HI�F�H��$��'zA��$hA�D$hH�����I��$���A��$h�E[��A��I��$��}���I�L��H��$�H���u��H��L���Ŀ��I�I��$�H�����H��$�Z��H�V�#H��I��$p�H��$�H����^��E��$hI��$������L��H��$��O���H��#H��I��$p�HDŽ$�H���HDŽ$��$^��E��$hI��$�閏��I�L��H��$�H���(t��H��L���ݾ��I�I��$�H�����H��$�Z��H�o�#H��I��$p�H��$�H����]��E��$hI��$�����H�.�#I��$p�H��$�HDŽ$�H��H��`�V]��E��$hI��$��Ȏ��A��$HI�6L��H��$@H��H�������D��H��H��t$H�ٺ0�JL���-��H�@(H�h H��H��$I��$�H��$��HDŽ$�H��H��$���b��E��$hI��$��'���A��$HH��$@I�v�L��I�H���,D��H��H��t$H�ٺ0�JL�����H�@(H�h H��I��$�H�����H��$H��$��lX��I��$�H��H��$�H��$��'b��E��$hI��$��y���A��$HI�6L��H��$@H��H������{C��H��H��t$H�ٺ0�JL������H�@(H�h H��H��$I��$�H��$��HDŽ$�H��H��$��a��E��$hI��$��،��A��$HH��$@I�v�L��I�H����B��H��H��t$H�ٺ0�JL���@��H�@(H�h H��I��$�H�����H��$H��$��W��I��$�H��H��$�H��$���`��E��$hI��$��*���I�6L��H��$�q��H��H���a�1�L���i���I��$�H������V��ADŽ$8����E��$hI��$�A��$H��‹��I�I�^�H�P0H�C0H��$�C(H��tH���"uH��L������I��$ I�6H�C0�2W��I��$�H�����H���V��H�����H��H���	V��H��H���~]��E��$hI��$��0���E��$h�A�� ��tA�D$hA��$H�����I�6L���z��I�E��$hH��$���E��$hHDŽ$IDŽ$�黊��E��$hI�I��$�D�L$H�����H��$�FU��D�L$I��$��{����&L��H��$��ι��H��#H��I��$p�HDŽ$&H���HDŽ$��X��E��$hI��$�����I�L��H��$�H���n��H��L���\���I�I��$�H�����H��$�T��H��#H��I��$p�H��$�H����"X��E��$hI��$�锉���*L��H��$����H���#H��I��$p�HDŽ$*H���HDŽ$��W��E��$hI��$��.���I��$�H�����H��$���S��H��H��$��]��E��$hI��$����I�6L���D���I�E��$hH��$�È��I�6L��H��$�Xn��H��H���ZrADŽ$8����E��$h銈��I��$�H�����HDŽ$�"S��I��$��*H�=>H���R��H�g�#�I��$pH��$�H��$�H��xH��H��$��V��L��I��$���\��E��$h���A��$HI�v�H���
]��H�������UH�J H����UH��H�H��������u�H�B(H�H H��u���\��fDL����Z��L��H��I�E�H��H��$PH��$X�ֶ��I��$�H�@H���
MH�x��LI�n�H��$P�(L��1����H�X H�E(H�
�3�8�HL�����I�V�I��$�H�����H�X H��$�H�P0�@(H��$�Q��H��#H��I��$p�H��$�H��(�$U��E��$hI��$�閆��I��$�H�����H��$��2Q��H��H��$��Z��E��$hI��$��O���I��8�HL��H�
�2����I��$�H�����H�X �@(H�@0H��$�P��E��$hI��$����I�F�I��$�H�����H��$�H��$�~P��H�ߪ#H��I��$p�H��$�H����T��E��$hI��$�酅��I�.�8�+L��H��$@H���
���I��$�H�����H�h H�@(H�@0H��$��O��H�N�#1�1�I��$pH��H�s`�S��H�s@�H��$�I��$pH��$�H��$�H���]S��E��$hI��$��τ��E��$hHDŽ$IDŽ$�驄��E��$hI�I��$�D�L$H�����H��$�4O��D�L$I��$��i���H����&L���}���L��(L��0H��$@���H�ٺHL��H�@ &�OH�����E��$h�`0��AoUH�@ H�h(P4H��$IDŽ$��܃��I�v�I�]�I�M�H��tA�1�L���w��H��H��L��$@�!L���|��I��$�H�����H��$�H��$�4N��H���#H��I��$p�H��$�H���HDŽ$��
�Q��E��$hI��$��/���A��$HA�V�H��$@L��I�v�H��$�����	�H��A��$H����I��$�H�����H��$�M��H��#H��I��$p�H��$�H��0�#Q��E��$hI��$�镂��H��$@�(�/L��H��� ���H���#1�1�H�@ I��$pH��@H��$�P��E��$hI��$��3���H��$@�(�/L��H��H��$����H�'�#1�1�H�@ I��$pH�s`H��$�ZP��H���H��I��$p�H��$��6P��H��8H��I��$p�H��$��P��E��$hI��$�鄁��H��$@I�v�L��H��$�H�����I��$�H�����H��$�L��H�b�#H��I��$p�H��$�H����O��H��8H��I��$p�H��$��rO��E��$hI��$����H��$@�8�.L��H���o���H��#1�1��AoEH�@ H��I��$pH��$@(�O��E��$hI��$��x���H��$@I�v�L��H��$�H�����I��$�H�����H�@(H��$��J��H�N�#H��I��$p�H��$�H����N��E��$hI��$�����I�F�H�����H�Hc�$@fo�$@��H��H	�PH�I��$�H�����H��$H��$��SJ��H���#H��I��$p�H��$�H�sh��M��E��$hI��$��]��I�.�(�YL��H��$@H�����I��$�H�����H�h H��$�H��$��I��H�.�#H��I��$p�H��$�H����bM��E��$hI��$���~��M�F�0L��I�.H��$@�XH��L�D$�S���L�D$I��$�H�����H�h(L�@ H��H��$�7I��H��H�����H���%I��H���#�H��$�I��$pH��$�H��$�H��H���L��E��$hI��$��~��I�n�H�EH������^uH�E H��$@�8�L��H����I��$�H�����H�h H��$�H�@(H�@0H��$�gH��H�Ȣ#H��I��$p�H��$�H����K��E��$hI��$��n}��I�V�H�H������^uH�B I��$�H�����H��$H��$���G��H�H�#H��I��$p�H��$�H����|K��E��$hI��$���|��E��$h�A�� ��nA�D$h��|��E��$hI��$�H��A�� I��$��qmI�n�H��t H�UH��H�������jm���amH��$@�(�L��H����IcM�I��$�H�����H�H�h H��$�H��H��$��H	�H���F��H�:�#H��I��$p�H��$�H����nJ��E��$hI��$���{��E��$hI��$�A�� H�4H�H�I��$�H�D$�ƈ���1H�#*L���I��E��$h�{��I�.�0�&L��H��$@H����I��$�H�����H�h H��$�H�@(H��$��E��H�T�#H��I��$p�H��$�H����I��H�s`1�1�I��$pH�D$�nI��L�D$H��H���I��$pH��$�L��$��=I��E��$hI��$��z��E��$hA��$H��z��E��$hHDŽ$AIDŽ$�A�rz��E��$hHDŽ$����IDŽ$��Lz��I��$�H�����H��$@��D��I�6H��1�I��$�L���@0��L��H��H��$�}���E��$h�y��M�M�N�0L��H��$@�KH��L�D$PL�L$�q�L�L$H��L��L�D$P�8�H��L�H L�@(�G�I��$�H�����H�h0H�@ H��H�@(H��$�$D��H��H�����H���D��H�s�#1�1�I��$pH�D$H�� �G��H���I��$pH��$�H��$�H��H��$��zG��L�D$H��H��I��$pH��$�L��$��IG��E��$hI��$��x��I�.�8�L��H��$@H���C�I��$�H�����H�h0H�@ H�@(H��$�#C��H���#1�1�I��$pH��H�� �F��H��$��H��I��$pH��$�H��$�H���F��E��$hI��$��w��M�M�N�0L��H��$@�KH��L�D$PL�L$�y�L�L$H��L��L�D$P�8�H��L�H L�@(M�F�L�D$�F�L�D$I��$�H�����H�h0L�@ H��H�@(H��$�"B��H��H�����H�D$P�B��H��H�����H���A��H�]�#H�T$PH��$�I��$pH��$�H�D$H��H��$�H���wE��L�D$H��H��I��$pH��$�L��$��FE��E��$hI��$��v��M�F�8L��I�.H��$@�H��L�D$�7�L�D$I��$�H�����H�h0L�@ H��H�@(H��$�A��H��H�����H���A��H�b�#�H��$�I��$pH��$�H��$�H��H���D��E��$hI��$��u��I�.�8�L��H��$@H����I��$�H�����H�h H�@(H�@0H��$�`@��E��$hI��$��u��I�I�v�L������I��$�H�����H��$H���@��H��H�����H���
@��H�k�#�H��$�I��$pH��$�H��$�H��H���C��E��$hI��$��u��I�.�8�+L��H��$@H����I��$�H�����H�h H�@(H�@0H��$�i?��H�ʙ#1�1�I��$pH��H�� �C��H��$��H��I��$pH��$�H��$�H����B��E��$hI��$��Et��I�F�I��$�H�����H��$�H��$��>��H�6�#H��I��$p�H��$�H��(�jB��E��$hI��$���s��I�6H��$@1�L��H����)��L��H��H��$�)���E��$h�s��I�I��$�H�����H��$�H��$�4>��H���#H��I��$p�H��$�H��`��A��E��$hI��$��;s��I�v�I�H��tI�V�L��$@H��L��� k��I�v�H��$H��t
H��tH��肍��I��$�H�����H���=��H��H�����H�D$�=��H��H�����H���u=��H�֗#H�T$H��$�I��$pH��$�H��$�H��hH��$�H����@��E��$hI��$��_r��A��$H	�]dE��$h�Br��A��$I�Q=E��$h�%r��I��$�I�^�H��t��>��I��$�I�F�H�����I��$�H��$�<��E��$hI��$���q��I�F��(L��I�.H��$@�CI�D$H���P�IcMI��$�H�����H�H�h H��$�H��H��$��H	�H��!<��H���#H��I��$p�H��$�H��@�?��E��$hI��$��(q��E��$hI�D$I�D$H��$�A�� ��aA�D$h��p��E��$hI��$�H�����D�L$�;��D�L$I��$��p��H��$@�(�L��H���F�H���#1�1�H�@ I��$pH�� H��$��>��H���1�1�I��$pH����>��H��$��H��I��$pH��$�H��$�H���>��E��$hI��$��
p��I�v�L��H��$��E��$h��o��I�V�M�1�L��I�v�L��$@���I��$�H�����H��$H���d:��H��H�����H�D$�P:��H��H�����H���>:��H���#H�T$H��$�I��$pH��$�HDŽ$�H���H��$�H��H��$��=��E��$hI��$��o��I�I�v�L��L��$@���I��$�H�����H��$H���9��H��H�����H���9��H��#�H��$�I��$pH��$�H��$�H��H���=��E��$hI��$��~n��I�~���|kI�V�I�L��L��$@I�v��M���I��$�H�����H��$H����8��H��H�����H�D$��8��H��H�����H����8��H�)�#H�T$H��$�I��$pH��$�H��$�H���H��$�H���@<��E��$hI��$��m��I�n�M�F�L��H��$@H��L�D$��U��H�ٺ8L��g�%�L�D$I��$�H�����H�h0L�@ H��H�@(�H��$�8��H��H�����H����7��H�P�#�H��$�I��$pH��$�H��$�H�s(H���w;��E��$hI��$���l��I��$�H�����H��$��7��H��#H��I��$p�H��$�H���H��$@�;��I�6H��1�I��$�L���"��E��$hH��$�ll��I��$�H�����H��$��7��H�i�#H��I��$p�H��$�H���H��$@�:��I�6H��1�I��$�L���-"��E��$hH��$��k��I�I�v�L���8���I��$�H�����H��$H���y6��H��H�����H���g6��H�Ȑ#�H��$�I��$pH��$�H��$�H��H����9��E��$hI��$��^k��I�.�8�+L��H��$@H�����I��$�H�����H�h H�@(H�@0H��$��5��H�'�#1�1�I��$pH��H�� �d9��H��$��H��I��$pH��$�H��$�H���09��E��$hI��$��j��I�V�I�v�L�����I��$�H�����H��$H���+5��H��H�����H���5��H�z�#�H��$�I��$pH��$�H��$�H��H���8��E��$hI��$��j��I�^�I�M�8L��+��I��$�H�����H�X H�@(H�@0H��$�~4��H�ߎ#1�1�I��$pH��H�� �8��H��$��H��I��$pH��$�H��$�H����7��E��$hI��$��Zi��I�F�I��$�H�����H��$�H��$��3��H�K�#H��I��$p�H��$�H��(�7��E��$hI��$���h��M��0�KL��H��$@H��L�L$�t��L�L$H��L��I������8�H��L�H(L�@ �H��I�����I��$�H�h0L��H��$�H�@ H�@(H��$�3��H�~�#1�1�I��$pH�D$H�� �6��H��H��I��$p�H��$�HDŽ$��6��L�D$H��H��I��$pH��$�L��$��X6��E��$hI��$���g��H��$@�8�L��H��H��$��M��H���#1�1�H�@ I��$pH�@(H�� H�@0����H��$��5��H��H��I��$p�H��$�HDŽ$��5��E��$hI��$�� g��M�M�N�0L��H��$@�KH��L�D$PL�L$���L�L$H��L��L�D$P�8�H��L�H L�@(�p��I��$�H�����H�h0H�@ H��H�@(H��$�M1��H��H�����H���;1��H���#1�1�I��$pH�D$H�� ��4��H���I��$pH��$�H��$�H��H��$��4��L�D$H��H��I��$pH��$�L��$��r4��E��$hI��$���e��I�.�8�L��H��$@H���l��I��$�H�����H�h0H�@ H�@(H��$�L0��H���#1�1�I��$pH��H�� ��3��H��$��H��I��$pH��$�H��$�H���3��E��$hI��$��(e��M��0�KL��H��$@H��L�L$���L�L$H��L��I������8�H��L�@ L�H(M�N�L�L$�v��L�L$I��$�H�����H�h0L�H H��H�@(H��$�R/��I�����H��L��H���=/��H���#�I��$pH��$�H��$�H��H��H�D$HDŽ$��2��L�D$H��H��I��$pH��$�L��$��2��E��$hI��$��c��H��$@I�n��8L��H�پ���I��$�H�����H�h H��$�H�@(H�@0����H��$�Y.��H���#H��I��$p�H��$�H��HDŽ$���1��E��$hI��$��Tc��M�M�N�0L��H��$@�KH��L�D$PL�L$����L�L$H��L��L�D$P�8�H��L�H L�@(M�F�L�D$���L�D$I��$�H�����H�h0L�@ H��H�@(H��$�w-��H��H�����H�D$P�c-��H��H�����H���Q-��H���#H�T$PH��$�I��$pH��$�H�D$H��H��$�H����0��L�D$H��H��I��$pH��$�L��$��0��E��$hI��$��
b��M�F�8L��I�.H��$@�H��L�D$���L�D$I��$�H�����H�h0L�@ H��H�@(H��$�h,��H��H�����H���V,��H���#�H��$�I��$pH��$�H��$�H��H����/��E��$hI��$��Ma��I�v�I�L��H��$@��H�ٺ8L��H������I��$�H�����H�h H�@(H��H�@0H��$�+��H��H�����H���+��H��#�H��$�I��$pH��$�H��$�H��H���/��E��$hI��$��`��I�.�8�L��H��$@H�����I��$�H�����H�h H�@(H�@0H��$��*��E��$hI��$��"`��M�F�H��$@�8L��H�پ+L�D$���L�D$H��L��H�@(�8�H��L�@ H�@0�s��I��$�H�����H�h H��$�H�@(H�@0H��$�K*��H���#H��I��$p�H��$�H��(��-��E��$hI��$��R_��I�F�I��$�H�����H��$�H��$��)��H�C�#H��I��$p�H��$�H��(�w-��E��$hI��$���^��I�6L��H��$@�n��H�ٺ@L��H���f���AoU�L��H�h(H��H��$�H�@ P0荋��I��$�H�����H��$�1)��H���#H��I��$p�H��$�H��X��,��E��$hI��$��8^��I�6L��H��$@�~��H�ٺ@L��H������Ao}�L��H�h(H��H��$�H�@ x0�܊��I��$�H�����H��$�(��H��#H��I��$p�H��$�H����,��E��$hI��$��]��I�6L��H��$@�~��H�ٺ8L��.H������Aou�I��$�H�����H�h H��$�p(H��$��'��H�C�#H��I��$p�H��$�H���w+��E��$hI��$���\��I�6H��$@L��H����I�6H��$H��t
H��tH���>w��I��$�H�����H��$��R'��H���#H��I��$p�H��$�H��8��*��E��$hI��$��Y\���)�(L��I�.H��$@H������I�6H�h H��$H��tH���v��I��$�H�����H��$��&��H��#H��I��$p�H��$�H��X�N*��E��$hI��$��[��M�N�A�u�E1�L��A�M�I�UH��$@I�A �p���HI�N�H�PI�IcU�%�H��H	�I�V�I�I�E�SP�~�I��$�H��$^H�����_H���%��H��H�����H��$���%��H��H�����H�D$P��%��H��H�����H���%��H�!�#H��$�H��$�H�T$PI��$pH�D$H��$�H��H��$�H��H��$��HDŽ$��)��L�D$H��H��I��$pH��$�L��$���(��E��$hI��$��`Z��I�E�I�N�I�V�L��H��$@M�F�M���SP�N�I��$�H�����H��$AXH��AY��$��H��H�����H��$��$��H��H�����H��$��$��H��H�����H�D$P�$��H��H�����H���w$��H��~#H��$�H��$�H�T$PL��$�H��$�H�D$H��I��$pH��$�H��H��$��L��$���'��L�D$H��H��I��$pH��$�L��$��'��E��$hI��$��Y��I�E�I�N�I�V�E1�H��$@M���L��SP��I��$�H�����H��$AZH��A[�#��H��H�����H�D$P�k#��H��H�����H�D$�W#��H��H�����H���E#��H�L$PH��}#H��$�H�T$I��$pH��$�H��$�H��H��$�H��H��$���&��E��$hI��$��"X��I�E�M�F�I�N�L��H��$@I�V�I�v�SM�P��I��$�H�����H��$]H��X�"��H��H�����H��$��y"��H��H�����H��$��b"��H��H�����H�D$P�N"��H��H�����H���<"��H��|#H��$�H��$�H�T$PL��$�H��$�H�D$H��I��$pH��$�H��H��$��L��$��%��L�D$H��H��I��$pH��$�L��$��f%��E��$hI��$���V��I�E�I�N�I�V�E1�H��$@I�v�M�L��SP���I��$�H�����H��$XH��Z�G!��H��H�����H�D$P�3!��H��H�����H�D$�!��H��H�����H���
!��H�L$PH�i{#H��$�H�T$I��$pH��$�H��$�H��H��$�H��H��$���x$��E��$hI��$���U��I�>I�F�tH��tH��L����v��I�F�I�v�I�>H��$@H�F(H��$HH�w(H�WH�GH��$� p��I�U�I�F�H�����I��$�H�PH���- ��H��H�����H�D$P� ��H��H�����H��� ��H�hz#H�T$PH��$�I��$pH��$�H�D$H��H��$�H���#��L�D$H��H��I��$pH��$�L��$��Q#��E��$hI��$���T��I�UI�I�F�H�����I��$�H�H(H�PH��H��$�I��H��H�����H���7��H��y#�H��$�I��$pH��$�H��$�H��H���"��E��$hI��$��.T��I�.�0�&L��H��$@H�����I��$�H�����H�h H�@(H��$���E��$hI��$���S��E��$hI�V�A�}�D�L$A�u�I�MH�B H��$�xI��$��pH�����H�HH�IcM�%�H��H	�H��*��D�L$I��$��_S��H��I�V�I�N�M�M�H��$HI�v�M�L��S���I��$�H��$YH��^H���������H��H�����H��$����H��H�����H�D$P���H��H�����H�����H��w#H��$�H��$�H�T$PI��$pH�D$H��$�H���H��$�H��H��$��� ��L�D$H��H���I��$pH��$�L��$��� ��E��$hI��$��=R��E��$hI�F�I��$�D�L$H�����H��$����D�L$I��$��Q��E��$hI�t$xH�o�H�D$H��A�� I�t$x��^���m
H�k�L������E��$h�Q��E��$hI�t$xH�!�A�� H�D$H�t6I�t$x��^���m
H�	L���t��E��$h�^Q��H��$@� �lL��H������E��$hH��$�+Q��I�6L���8@��I�E��$hH��$�Q��E��$hA�� ���MA�D$hI��$�I�n�H�x H�P(��MH�@(M��QL��H�@0M�N�H��$@H�@8A��$8H��H�U8�8L�E(�E0H��$L�D$PL�L$���L�L$L�D$PH�����I��$�H�@0L�H L�@(H��H�E ����H�����H��H�D$����H�����H��H������H�T$�H��$�H��$�H��$�H��H��$��y$��E��$hI��$���O��E��$h��A�� ��LA�D$h�O��I��$�I�n�H�x H�P(��9H�@(M��PL��H�@0H��$@H�@8A��$8H��H�U8�0L�E(�E0L�D$H��$����L�D$I��$�H�����H�@(L�@ H�E ����E��$hI��$��N��I�6L����X��L���||��A��$HE��$hf%w���fA��$HI�H��$�N��I�V�I�M�E��
L��$@L����=��I��$�H�����H��$H���+��H��H�����H�����H�zs#�H��$�I��$pH��$�HDŽ$��
H���H��H��$����E��$hI��$��N��A��$HA�V�L��f��f%�	�fA��$HA�U�I�EA�M�I�v艔$T��$PH��$X��<��I�H��u�f�H�C H��tH��H�H������t�H��$P�@�L�����M�F�8L��H�X0�H��H��$@H�@ H��H�@(H�@8L�D$����L�D$I��$�H�����H�h(L�@ H��H�@0H��$���H��H�����H�����H�r#�H��$�I��$pH��$�H��$�H���H���%��E��$hI��$��L��I�6L���;��I�E��$hH��$�sL��I�6I�]�H��tA�L��1�L���?��H��H��L��$@�!L���AE��I��$�H�����H��$�H��$����H�.q#H��I��$p�H��$�H���HDŽ$��
�V��E��$hI��$���K��A�V�M��I�M�M�E�A��$HL��f��f%�	�fA��$HI�I�v����I��$�H�����H��$H���%��H��H�����H�����H�tp#�H��$�I��$pH��$�H��$�H���H�����E��$hI��$��
K��I�~�H��$@�Ar��H�ٺ L��lH��$����I��$�H�����H��$H���u��H��H�����H���c��H��H�����H�D$P�O��H��o#�I��$pH��$�H��$�H���H��H�D$����L�L$H��L�T$PH��hI��$p�H��$�L��$�L��$����L��$�H��H���I��$pH��$�L��$��e��L��I��$����E��$h��I��I�F�I�U�L��H��$@H��$�H�p(��3��I�v�L���W1��I�v�I�H��L�����I�V�fo�$@H�����I�I��$�H�R H�B0zH��$�
��H�nn#�H��I��$pH��$�H���HDŽ$�HDŽ$�HDŽ$��~��I��$�H�����I��$�H��H�L$PH��$����H�L$PH�����H�D$H���y��H�|$1�H��$��e��H�|$�H��$��N��H�|$�H�D$P�:��H��$�L�D$PH��$�L��$�H��$�H��8I��$pH��$�H��H��$��L��$�L��$����L��I��$���l��E��$h�H��I�F�I�U�L��H��$@H��$�H�p(�'2��I�v�L���/��I�v�I�H��L����I�V�fo�$@H�����I�I��$�H�R H�B(rH��$�A��H��l#�H��I��$pH��$�H���HDŽ$�HDŽ$�HDŽ$����I��$�H�����I��$�H��H�L$PH��$�����H�L$PH�����H�D$H�����H��$�H��L�D$H��(I��$pH��$�H��$��L��$��,��L��I��$��|k��E��$h�F��I�v�L���5��E��$h�|F��I�6I�]�H��tA�L��1�L���9��H��H��L��$@�!L���J?��I��$�H�����H��$�H��$����H�7k#H��I��$p�H��$�H���HDŽ$�!�_��E��$hI��$���E��I�6I�]�H��tA�L��1�L���
9��H��H��L��$@�!L���>��I��$�H�����H��$�H��$�+��H��j#H��I��$p�H��$�H���HDŽ$��
���E��$hI��$��&E��I�V�I�M�E��
L��$@L���^4��I��$�H�����H��$H�����H��H�����H�����H��i#�H��$�I��$pH��$�HDŽ$��
H���H��H��$����E��$hI��$��xD��I�v�L���3��E��$h�^D��I��$�I�^�H��t� ��I��$�I��$�I�^����A�V�L��L��A��$HI��$����I���	к8A��$H虺��M�FкPL��H�X H��$@�H��H�@(H��H�@0L�D$�\���L�D$foT$pH�����H�h(I��$�L�@ P0H��P@H��$�2��H��H�����H��$�H�D$���H�wh#H��I��$p�H��$�H���HDŽ$�HDŽ$����L�D$H��H���I��$pH��$�L��$��b��E��$hI��$���B��I��$�I�^�H��t���I��$�I��$�I�^��}��A�V�L��L��A��$HI��$��a����	к A��$H����L�� L��`H�D$P���M�L��8�L��H��L�L$�ظ��L�L$L�D$PL��H�X(�P�H��L�H H��$@L�@0M�F�H��L�D$虸��L�D$fo|�H�����H�h(I��$�L�@ P0H��P@H��$�m��H��H�����H��$�H�D$�Q��H��f#H��I��$p�H��$�H���HDŽ$�HDŽ$�����L�D$H��H���I��$pH��$�L��$����E��$hI��$��A��H�(f#I��$p1�1�HDŽ$H��x�\��E��$hI��$���@��I�M��1�1�L��H��$����I��$�H�����H��$�P��H��HDŽ$�HDŽ$�H��$����E��$hI��$��U@��I�V�I�M�E�1�L�����I��$�H�����H��$H����
��H�����H��H����
��H��$��H��$�H��H��$�HDŽ$��v��E��$hI��$���?��I�I�v�M�E�1�L�����I��$�H�����H��$H���L
��H�����H��H���:
��H��$��H��$�H��H��$�HDŽ$�����E��$hI��$��;?��I�V�I�M�E�L��I�v����I��$�H�����H��$H���	��H�����H��H�D$�	��H�����H��H���	��H�T$�H��$�H��$�H��$�H��H��$��E��E��$hI��$��>��I�V�H��t6I�H�AH�BH�B(H��u
�%DH��H�qH�pH�p(H��u�H�H(I��$�H�����H��$H������H�����H��H������H��H���T��E��$hI��$��>��I�I��$�H�����H��$�H��$���H��H��$��b��E��$hI��$��=��I�H��$@I�v�L��H�����I��$�H�����H��$H���3��H��H�����H���!��H��b#�H��$�I��$pH��$�H��$�H�sxH�����E��$hI��$��=��H��$@� �lL��H��観��E��$hH��$��<��I�H��$@I�v�L��H���6��I��$�H�����H��$H���g��H��H�����H���U��H��a#�H��$�I��$pH��$�H��$�H���H����
��E��$hI��$��L<��A��$HA�V�f%�f��	�fA��$HA�U�I�EA�M�I���$T��$PH��$XH��u�!fDH�C H��tH��H�H������t�L��$P�@�L��L��L�D$�c���L�D$�8L��H�X0H��I�^�H�@ L��H�@(H�@8I�I�E�H��$P����I�v�L��H�X H��$@H��H�h(H��H�@0I�F����I��$�H�����H��$H������H��H�����H�D$����H��H�����H�����H�`#�I��$pH��$�H��$�H���H��H��$��9	��L�D$H��H���I��$pH��$�L��$��	��E��$hI��$��z:��I�H��$@I�v�L��H������I��$�H�����H��$H�����H��H�����H������H�H_#�H��$�I��$pH��$�H��$�H�sxH���o��E��$hI��$���9��fo�$@I�I�v��HhH�p`H�����H�@ H�ʃ�H�@(H��=�HhHc�$@H��?I��$�@��*H��H�@0H�P@H�H��H�@8��H	�H�H��$���H��H�����H�D$P���1�H��H������H�߾H�D$����H�߾H������H�L$PH�$^#H��$�H�T$I��$pH��$�HDŽ$�H���H��$�H��H��$��HDŽ$�HDŽ$�H��$����E��$hI��$��8��H��M�F�I�N�1�H��$HI�V�M�L��S�&��I��$�H�����H��$]H��X����H��H�����H��$�����H��H�����H��$�����H��H�����H�D$P���1�H��H�����H�߾H�����H�߾H�D$���H�L$PH��\#H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$����E��$hI��$��27��H��I�N�I�V�E1�H��$HM�1�L��S�E%��I��$�H�����H��$XH��Z���H��H�����H��$����H��H�����H�D$P�y��1�H��H���l��H�߾H�D$�Z��H�߾H���J��H�L$PH��[#H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$����E��$hI��$��5��H��I�v�M�E1�H��$H1�1�L��S�$��I��$�H��$YH��^H������s��H��H�����H�D$P�_��1�H��H���R��H�߾H�D$�@��H�߾H���0��H�L$PH��Z#H��$�H�T$I��$pH��$�HDŽ$�H���H��$�H��H��$��HDŽ$�HDŽ$�H��$��w��E��$hI��$���4��H��I�N�M�F�1�H��$HI�v�M�L��S�"��I��$�H�����H��$_H��AX�Y���H��H�����H��$��B���H��H�����H��$��+���H��H�����H�D$P����1�H��H���
���H�߾H�����H�߾H�D$���H�L$PH�DY#H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$��'��E��$hI��$��3��M��1�1�1�L���`���H��I�v�I�H��$E1�1�I��H��$HL��S�!��I��$�H�����H��$AYH��AZ��H��H�����H������H�@X#�H��$�I��$pH��$�HDŽ$�H���H��H��$�HDŽ$�HDŽ$�HDŽ$�HDŽ$��(��E��$hI��$��2��H��I�N�I�v�E1�H��$HM�1�L��S� ��I��$�H�����H��$A[H��]����H��H�����H��$���H��H�����H�D$P���1�H��H������H�߾H�D$���H�߾H�����H�L$PH�
W#H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$���E��$hI��$��f1��H��M�F�I�V�1�H��$HI�v�M�L��S�x��I��$�H�����H��$XH��Z����H��H�����H��$����H��H�����H��$����H��H�����H�D$P���1�H��H�����H�߾H���x���H�߾H�D$�f���H�L$PH��U#H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$����E��$hI��$��0��H��I�V�I�v�E1�H��$HM�1�L��S�*��I��$�H��$YH��^H��������H��H�����H��$��r���H��H�����H�D$P�^���1�H��H���Q���H�߾H�D$�?���H�߾H���/���H�L$PH��T#H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$��r���E��$hI��$���.��H��I�N�I�V�L��H��$HM�F�I�v�SM�����I��$�H�����H��$_H��AX�R���H��H�����H��$��;���H��H�����H��$��$���H��H�����H��$��
���H��H�����H�����1�H��H�����H�߾H�D$P����H�߾H�D$����H�T$PH�&S#H��$�H�L$L��$�H��$�H��$�L��$�L��$�H��$��H���I��$pH��$�H��L��$�L��$�L��$�����E��$hI��$��w-��H��I�N�I�V�E1�H��$HI�v�M�L��S���I��$�H�����H��$AYH��AZ���H��H�����H��$�����H��H�����H��$����H��H�����H�D$P���1�H��H�����H�߾H�����H�߾H�D$�t���H�L$PH��Q#H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$����E��$hI��$��%,��M��1�1�1�L��H��$����H��HDŽ$�H��$HDŽ$�HDŽ$��k��E��$hI��$��+��E��$hI�I��$�D�L$H�����H��$�H���D�L$I��$��}+��I�I�V�H�AH�BH�B(H��u��H��H�qH�pH�p(H��u�H�H(I��$�H�����H��$H������H�����H��H������H��H���<���E��$hI��$���*��I�I��$�H�����H��$�H��$����H��H��$��J���E��$hI��$��*��A��$HH��$@I�v�L��I�H����H�ٺ0L��IH���	���I��$�H�����H�h H��$�H�@(H��$���I��$�H��H��$�H��$����E��$hI��$��)��E��$hHDŽ$IDŽ$���)��A��$H�I�F�H�����I��$�ADŽ$8����H��$H���P�H��H�����H���>�H��N#�H��$�I��$pH��$�H��$�H���H������E��$hI��$��5)��A��$H�I��$�H�����H��$�ADŽ$8����HDŽ$��H�N#H��I��$p�H�D$H���HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$���L�D$H��H���I��$pH��$�L��$�����E��$hI��$��5(��A��$h��A��$hA���(��fo�$@I�H������HhH�@ H�@(H�ʃ�H�@0H��=�HhHc�$@H��?H�@8I��$���*H��H�@`H�P@H�@��H	�H�H��$�F�1�H��H���9�H�߾H�D$�'�H�߾H����H�xL#H�T$H��$�I��$pH��$�HDŽ$�H���H��H��$��HDŽ$�HDŽ$�HDŽ$�H��$��_���E��$hI��$���&��H��M�F�I�N�1�H��$HM�1�L��S����I��$�H��$^H�����_H���D�H��H�����H��$��-�H��H�����H�D$P��1�H��H����H�߾H�D$��H�߾H�����H�L$PH�FK#H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��HDŽ$�L��$�H��$��-�E��$hI��$��%��H��I�N�M�1�H��$HE1�1�L��S���I��$�H�����H��$AXH��AY��H��H�����H�D$P��1�H��H�����H�߾H�D$���H�߾H�����H�L$PH�*J#H��$�H�T$I��$pH��$�HDŽ$�H���H��$�H��H��$��HDŽ$�HDŽ$�H��$���E��$hI��$��$��H��M�F�I�V�1�H��$HM�1�L��S���I��$�H�����H��$AZH��A[��H��H�����H��$����H��H�����H�D$P���1�H��H����H�߾H�D$��H�߾H����H�L$PH��H#H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$����E��$hI��$��S#��I�H��t.H���v	���
H���i�H�5��L��H��1��u���I��$�H�������E��$hI��$���"��I��$�H�����H����H�����H��H����H��H����E��$hI��$��"��I��$�H�����H��$��E�H��H��$�����E��$hI��$��b"��E��$hI��$�H�����D�L$HDŽ$���D�L$I��$��!"��E��$hHDŽ$�"��1�L�����I�n�H��tH�EH��������'M�M��tL��A�L��L�����I��H��$@�X�	L��H��L�L$�B���L�L$�AoU�fo�H�h(L�H H�@0H��$P8@HI��$�H�����H����H��H�����H����H�WF#�H��$�I��$pH��$�H��$�H���H���{�E��$hI��$��� ��I�V�H��u�%f.�H�B H��tH��H�H������t�I�6H����%H�B�L��M�M�1�PPL��$P���I�6H��$_AXH��t
H��tH���:��I��$�H�����H����H��H�����H����H�bE#�H��$�I��$pH��$�H��$�H���H����E��$hI��$����I�V�H��u� DH�B H��tH��H�H������t�I�6H����*L��$@1�L�����I�6H��$H��t
H��tH���:��I��$�H�����H���3�H��H�����H���!�H��D#�H��$�I��$pH��$�H��$�H���H����E��$hI��$����I�6L��H��$@���I�I�v�H��L���[���I��$�H�����H��$H����H��H�����H���z�H��C#�H��$�I��$pH��$�H��$�H���H����E��$hI��$��q��E��$h��A�� �'$A�D$h�O��E��$hA�D�L$H�����I��$���$fA��$H����D�L$I��$����E��$hI��$�IDŽ$�H��$����E��$hI�H��$����H��L��L���8��E��$h���E��$hI�H��$���I�>H����� 8��I�v�H����H��tH��L��蓬��I��$�H�����H��$H�����H��H�����H�����H�CB#�H��$�I��$pH��$�H��$�H��H���g�E��$hI��$�����I�H��tH���q7��I��$�H�����H��$�e�H��A#1�1�I��$pH��H�� ��H��$��H��I��$pH��$�H��$�H�����E��$hI��$��A��H��$@� �lL��H���̒��I��$�H�����H��$��I��$��)H�=�H����H�A#�I��$pH��$�H��$�H�sH��H��$��,�L��I��$��l�E��$h���I�H��$N�H��$@Ƅ$N$H�@ ��$O�n�M�F�H��L��@�SH��L�D$���L�D$�AoU�H�����I��$�H�h(L�@ P0H��H��$���H��H�����H����H�@#�H��$�I��$pH��$�H��$�H���H���:�E��$hI��$����M�F��@L��I�.H��$@�SH��L�D$�+���L�D$�Ao}�H�����I��$�H�h(L�@ x0H��H��$��H��H�����H�����H�T?#�H��$�I��$pH��$�H��$�H���H���x�E��$hI��$�����M�F�@L��I�.H��$@�RH��L�D$�i���L�D$�AoE�H�����I��$�H�h(L�@ @0H��H��$�C�H��H�����H���1�H��>#�H��$�I��$pH��$�H��$�H�sH����E��$hI��$��+��I�I�U�H�����H��$�I��$�H�P�AoE�H��$@(��H�>#H��I��$p�H��$�H����?�E��$hI��$����A��$HA�V�f%�f��	�fA��$HA�U�I�EA�M�I���$T��$PH��$XH��u�H�C H��tH��H�H������t�H��$P�@�L���ӎ��I�n�I��H�@ H�@(H�X0H�@8H��u�%f�H�E H��tH��H�EH������t�H��$@�8�L��H��L�D$�b���L�D$I��$�H�����H�h L�@(H��H�@0H��$�>�H��H�����H���,�H��<#�H��$�I��$pH��$�H��$�H���H����E��$hI��$��#��1�L������I�n�H��tH�EH�������X�M�M��tL��A�L��L���3
��I��H��$@�X�
L��H��L�L$�^���L�L$�AoU�fo�$�H�h(L�H H�@0H��$P8@HI��$�H�����H���#�H��H�����H����H�r;#�H��$�I��$pH��$�H��$�H���H����E��$hI��$����H��$�A��$H��I�F�M�N��81�H��$@L��I��$�A�F�H��L�L$A��$H�^���L�L$H��L��(�dH�D$L�H(H�@ H�@0�+���L�D$I��$�H�����H��$L�@ ��H�w:#H��I��$p�H��$�H�s��E��$hI��$�� ��I�6L��H��$@�%��A�U�A�E�L��H��$P�_I�.��$P��$X� ��$T��$\�t���H�ٺ0L��ZH�D$�Z���L�D$I��$�H�����H�h(H��$�L�@ H��$�9��H��9#H��I��$p�H��$�H��HHDŽ$����E��$hI��$��4��I�H��$@I�v�L��H���r���I��$�H�����H��$H�����H��H�����H�����H�9#�H��$�I��$pH��$�H��$�H�sPH���)�E��$hI��$����I�6L��H��$@� C��I�I�v�H��L���N���I��$�H�����H��$H�����H��H�����H�����H�^8#�H��$�I��$pH��$�H��$�H�s@H����E��$hI��$����I�.�8�NL��H��$@H�������AoE�I��$�H�����H�h @(H��$�e��H��7#1�1�I��$pH��H�s`��H�sP�H��$�I��$pH��$�H��$�H�����E��$hI��$��G��I�6L��H��$@��A��H��I�.�8�+L���Ĉ��I��$�H�����H�h H�@(H�@0H��$���H�7#1�1�I��$pH��H�s`�E�H�s@�H��$�I��$pH��$�H��$�H����E��$hI��$����A�F�A��$8I��$@I�v�A��$8I�F�I��$@�����H�����I�v�H��$@I�L��H���װ��H�ٺ0L��H��过��I��$�H�����H�h H�@(H��H��$���H��H�����H�����H��5#�H��$�I��$pH��$�H��$�H��@H�����I��$�I��$�H��I��$�A��$h ��I�F�I�V�A��$8I��$�I��$�H����H�P(����H�P H�@ H�P0H�@8I�v�L���4��E��$h���I��$��	<��H��$I��$�H�4H�n�I��$�H�D$A��$h �����	H�@�L�����E��$h���A�F�A��$8I��$@I�v�A��$8I�F�I��$@�����H�����I�v�H��$@I�L��H�����H�ٺ0L��H�����I��$�H�����H�h H�@(H��H��$����H��H�����H�����H�4#�H��$�I��$pH��$�H��$�H���H���9��I�V�A��$8I��$�I�F�I��$�I��$�H���E�H�P(���K�H�P H�@ H�P0H�@8I�v�L���X2��E��$h�R��I��$��M:��E��$hH��$�/��I�v�I�H��tH����H��$@H��L��H���\���I��$�H�����H��$H�����H��H�����H�����H��2#�H��$�I��$pH��$�H��$�H��0H�����E��$hI��$��
��A�V�L��A��$HH��$�f��f%�	�fA��$HI�v�H��$�}��I��$pI��$�H����{��I��$�H���������H�12#H��I��$p�H��$�H��p�e��E��$hI��$�����E��$hI�I��$�D�L$H�����H��$�b��D�L$I��$����I�H�����H�H������C��I��$�H�����H��$���E��$hI��$��F��E��$hI�H�H��H������NuH�J H�H������+�^�H��$���I�.�8�+L��H��$@H��茂��I��$�H�����H�h H��$�H�@(H�@0H��$�d��H��H��$��/�E��$hI��$����E��$hI�I��$�D�L$H�����H��$���D�L$I��$��A��M�F�@L��I�.H��$@�H��L�D$���L�D$�Ao}�H�����I��$�H�h(L�@ x0H��H��$���H��H�����H�����H��/#�H��$�I��$pH��$�HDŽ$�|H���H��H��$����E��$hI��$��s
��H��$@I�n�8L��H�پ+���I�L��H�h H��H�@(H�@0舔��H��L��H���z���I��$�H�����H��$H�����H��H�����H��$�H�D$���H�/#H��.#H�L$I��$pH��$�H�H���H��$�H��H��H��H��$���
��E��$hI��$��	��I�I��$�H�����H�@ H��$���1�H��H�����H�߾H������H�T.#�H��$�I��$pH��$�HDŽ$�H���H��H��$��l��E��$hI��$�����I�I��$�H�����H�@ H��$�o��1�H��H���b��H�߾H�D$�P��H�߾H���@��H��-#H�T$H��$�I��$pH��$�HDŽ$�H�spH��$�H��H��$����E��$hI��$��!��I�I��$�H�����H�@ H��$���1�H��H�����H�߾H�D$���H�߾H�����H��,#H�T$H��$�I��$pH��$�HDŽ$�H���H��$�H��H��$�����E��$hI��$��a��I�.I�v�H�E H��tH��$@H��L��H���O���I�E�I��$�H�����H��$H�EH������H��H�����H�����1�H��H������H��H��$�����H��H�D$���H��H��$�H�D$P�O�H��� �H��H��H��$�H��$��F��H��$�H�D$H��+#H��H��$�I��$p�HDŽ$�H��$�H�spH�D$PH��$����E��$hI��$��"��H��$@�i�@L��H���|��I�v�H��H�@(H�@0����H�@8H��$H�@ H��tH��H��L���ے��I��$�H��$H�����H��$��W��H��H��$��"��H��*#H��I��$p�HDŽ$�H�spH��$�HDŽ$�HDŽ$����E��$hI��$��(��I�6H�����H���I�V�1�L��PM�M�PL��$P�a���I�6H��$Y_H��t
H��tH���b��I��$�H�����H���{��H��H�����H���i��H��)#�H��$�I��$pH��$�H��$�H���H������E��$hI��$��`��I�6H�����I�V�L��$@1�L���F���I�6H��$H��t
H��tH�����I��$�H�����H������H��H�����H�����H�)#�H��$�I��$pH��$�H��$�H���H���5��E��$hI��$����M�M�N�8L��H��$@�I�n�H��L�D$PL�L$�z��L�L$L�D$PH�����I��$�H�h(L�H L�@0H��H��$���H��H�����H�D$����H��H�����H������H�3(#H�T$H��$�I��$pH��$�H��$�H���H��$�H���J��E��$hI��$����I��$�I�^�H��t�~��I��$�I��$�I�^��e��A�V�A��$HI��$�E��$h����	�A��$H�Y��E��$hA��$HA�� ��$��k�A�D$hA��$hA��$H��A��$hA�����E��$hI��$�IDŽ$�H��$����I��$�H��$���E��$hI��$����M�M�N�L��H��$@�XI�n�H��L�D$PL�L$�)x���Aom�L�L$L�D$PI�v�H�h(h8�Aou�L�H L�@0pHH��$H��tH������I��$�H�����H������H��H�����H�D$����H��H�����H�����H�&#H�T$H��$�I��$pH��$�H��$�H���H��$�H���1��E��$hI��$����I��$�I�^�H��t�e��I�F�I�V�I��$�H�����I��$�H�P I�U�H��H��$H�P�
��H��H�����H�����1�H��H������H�߾H�D$����H�:%#H�T$H��$�I��$pH��$�H��$�H���H��$�H���Q��E��$hI��$�����I��$�I�^�H��t���I�F�I�V�I��$�H�����I��$�H�P I�U�H��H��$H�P�*��H��H�����H�D$P���1�H��H���	��H�߾H�D$���H�߾H������H�L$PH�C$#H��$�H�T$I��$pH��$�H��$�H���H��$�H��H��$���R��E��$hI��$�����I��$�I�^�H��t���I�F�I�V�I��$�H�����I��$�H�P I�U�H��H��$H�P�+��H��H�����H�D$P���1�H��H���
��H�߾H�D$���H�߾H������H�L$PH�D##H��$�H�T$I��$pH��$�H��$�H�spH��$�H��H��$���V��E��$hI��$�����H��$@�@�iL��H��H��$��Kt��I�V�I��$�H�����H�@(H�P H�@0H�@8H��$���H��"#H��I��$p�H��$�HDŽ$�H�spHDŽ$�HDŽ$����E��$hI��$�����I��$�I�^�H��t����I�F�I�V�I��$�H�����I��$�H�P I�U�H��H��$H�P�l��H��H�����H���Z��1�H��H���M��H�߾H�D$�;��H��!#H�T$H��$�I��$pH��$�H��$�H���H��$�H�����E��$hI��$��%���I��$�I�^�H��t����I�F�I�V�I��$�H�����I��$�H�P I�U�H��H��$H�P���H��H�����H�D$P�x��1�H��H���k��H�߾H�D$�Y��H�߾H���I��H�L$PH�� #H��$�H�T$I��$pH��$�H��$�H���H��$�H��H��$�����E��$hI��$��&���I��$�I�^�H��t����I�F�I�V�I��$�H�����I��$�H�P I�U�H��H��$H�P���H��H�����H�D$P�y��1�H��H���l��H�߾H�D$�Z��H�߾H���J��H�L$PH��#H��$�H�T$I��$pH��$�H��$�H�spH��$�H��H��$�����E��$hI��$��*���E��$hI�I��$�D�L$H�����H��$���D�L$I��$����H��$@�@�iL��H��H��$��mp��H��#H��I��$pH�@(�H�@0H�spH�@8H�@ H��$HDŽ$�HDŽ$�HDŽ$�HDŽ$�����E��$hI��$��7���I�F�I��$�H�����H�@ H��$����1�H��H�����H�߾H�D$���H�߾H�����H��#H�T$H��$�I��$pH��$�HDŽ$�H���H��$�H��H��$����E��$hI��$��v���I�F�I��$�H�����H�@ H��$���1�H��H�����H�߾H�D$����H�߾H������H�8#H�T$H��$�I��$pH��$�HDŽ$�H�spH��$�H��H��$��F��E��$hI��$����H��$@�@�iL��H��H��$��;n��I�V�I��$�H�����H�@(H�P H�@0H�@8H��$���H�p#H��I��$p�H��$�HDŽ$�H�spHDŽ$�HDŽ$����E��$hI��$����I��$�I�^�H��t���A��$HA�V�I��$�H�����I��$�����	�A��$HI�F�H�@ H��$�I���1�H��H���<���H�߾H���,���H��#�H��$�I��$pH��$�HDŽ$�H���H��H��$����E��$hI��$�����E��$hA��$H�����H��$@�8�jL��H��H��$��l��H��#H��I��$pH�@(�H�@0H���H�@ H��$HDŽ$�HDŽ$�HDŽ$�����E��$hI��$��^���H��I�N�I�V�M�M�H��$HM���L��S�ͅ��IcM�I��$�H�����H�H��$H��H�߁�H	�H�XZ赿��H��H�����H��$�螿��H��H�����H�D$P芿��H��H�����H���x���H��#H��$�H��$�H�T$PI��$pH�D$H��$�H���H��$�H��H��$������L�D$H��H���I��$pH��$�L��$����E��$hI��$��$�M�I������L�T$PH��I�N�L��H��$HI�V�I�v�M�M�SM�肄��IcM�I��$�H�H��$H��H�߁�H	�H�Y^H������j���H��H�����H�D$�V���H��H�����H���D���H��#H�T$H��$�I��$pH��$�H��$�H���H��$�H�����L�T$PI��$�M����I��$�H��H�D$�н��H�T$H���H��I��$pH��$�H��$���_���E��$hI��$����I�UI�I�F�H�����I��$�H�H(H�PH��H��$�W���H��H�����H���E���H��#�I��$pH��$�H��$�H���H��H�D$����L�D$H��H���I��$pH��$�L��$����E��$hI��$���I�E�I�N�I�V�L��H��$@M�F�I�v�SM�P���I��$�H�����H��$_H��AX�{���H��H�����H��$��d���H��H�����H��$��M���H��H�����H�D$P�9���H��H�����H���'���H��#H��$�H��$�H�T$PL��$�H��$�H�D$H��I��$pH��$�H��H��$��L��$�肿��L�D$H��H��I��$pH��$�L��$��Q���E��$hI��$����I�~���H�I�E�M�F�I�N�L��H��$@I�V�I�v�SM�P见��I��$�H�����H��$AYH��AZ�$���H��H�����H�D$P����H��H�����H�D$���H��H�����H�����H�L$PH�F#H��$�H�T$I��$pH��$�H��$�H��H��$�H��H��$���U���I�>I��$��M�I��$�H��H�D$�m���H�T$H��H��I��$pH��$�H��$�����E��$hI��$��n�M�I����b�L�T$PH��I�N�L��H��$HI�V�I�v�M�M�SM�����I��$�H�����H��$A[H��]�ʹ��H��H�����H�D$趹��H��H�����H��褹��H�#H�T$H��$�I��$pH��$�H��$�H���H��$�H������L�T$PI��$�M�����I��$�H��H�D$�0���H�T$H���H��I��$pH��$�H��$��迼��E��$hI��$��1�I�v�H�H������/���I�L������H��tH��tH��L������I�>I�v�H��$HH��$@H�w(H�WH�GH��$H��t�M��I��$�H�����H���f���H��H�����H���T���H��#�H��$�I��$pH��$�H��$�H��H���ٻ��E��$hI��$��K�E��$hI�V�A�}�D�L$A�u�I�MH�B H��$�xI��$��pH�����H�HH�IcM�%�H��H	�H�襷��D�L$I��$����E��$hI�F�I��$�D�L$H�����H��$�d���D�L$I��$���E��$hH��$@H��$HI�D$PI�D$`�q�I��$�H��t.L��M��H��H�56��r��H�CH��I��$�莹��I�F�I��$�H�����H��$�ζ��E��$hI��$���E��$hA��$H�I��H0��u�P4��uH�x@uH�x`�~�ADŽ$8����H��$��A��$H�I�F�H�����H��$�ADŽ$8����I��$�H��$�-���H��#H��I��$p�H��$�H����¹��E��$hI��$��4�E��$hA�F�A��$8I��$�I��$@A�D$pA�F�H��A�� A��$8I�F�I��$�I��$@I�F�I��$��m�I�v���-�H���$�A�U�A�M�I�v�L��H��$PI�E��$TI���$PH��H��$X�(���H��(L��H�þh�a��H�IcMH�����H�X H����H��$H	�IcM�H�H�H��I��$���H	�H��H�I�U�H�P�Ǵ��H��H�����H��赴��H�#�H��$�I��$pH��$�H��$�H���H���:���I�V�A��$8I��$�I��$�H�����H�P(���m�H�P H�@ H�P0H�@8I�v�L���e
��E��$h�_�E��$hI��$�A�� H�4H��iI��$�H�D$�E����EH���L��� ���E��$h�
�A��$itL��H�5ٝL�����I��$�����E��$hH��$���E��$hI�V�A�}�D�L$A�u�I�MH�B H��$�xI��$��pH�����H�HH�IcM�%�H��H	�H��$���D�L$I��$��Y�E��$hI�V�A�}�D�L$A�u�I�MH�B H��$�xI��$��pH�����H�HH�IcM�%�H��H	�H�賲��D�L$I��$����M�F�$L��I�n�H��$@�8H��L�D$�f^��L�D$I�v�H�@(�L�@ H�h0H��$H��tH�����I��$�H�����H���1���H��H�����H������H��#�H��$�I��$pH��$�H��$�H�s H��觵��E��$hI��$���H��$@� �*L��H���]��H�#1�1�I��$pH��$H��H�M���E��$hI��$���I�.�(�)L��H��$@H���G]��I��$�H�����H�h H��$�H��$�/���H��#H��I��$p�H��$�H��X�Ĵ��E��$hI��$��6�H��I�V�M�M�M�H��$H��
��L��S�v��IcM�I��$�H�����H�H��$H��H�߁�H	�H�AXAY芰��H��H�����H�D$P�v���H��H�����H���d���H��
#H�T$PH��$�I��$pH��$�H�D$H���H��H��$��HDŽ$��
�ӳ��L�D$H��H���I��$pH��$�L��$�袳��E��$hI��$���H��I�V�I�v�M�M�H��$HM���
L��S�u��IcM�I��$�H�����H�H��$H��H�߁�H	�H�AZA[�i���H��H�����H�D$P�U���H��H�����H���C���H��	#H�T$PH��$�I��$pH��$�H�D$H���H��H��$��HDŽ$��
貲��L�D$H��H���I��$pH��$�L��$�聲��E��$hI��$����H��I�V�I�M��H��$HE1���L��S�dt��I��$�H�����H��$]H��X�c���H��H�����H�D$�O���H��H�����H���=���H��#H�T$H��$�I��$pH��$�H��$�H���H��$�H��赱��E��$hI��$��'�M��0�-L��H��$@H��L�D$�Y��L�D$H��L��H�@(�8�jH��L�@ �Y��I��$�H�����H�h(H��$�H�@ H�@0H��$�Y���H��HDŽ$�H��$�����E��$hI��$��j�I�I�n�0L��H��$@�-H��H�D$��X��H�T$H��L��H�h H��H�@(躛��I��$�H�����H��$H��軬��H�����H��H��詬��H��$��H��$�H��H��$��d���E��$hI��$���I�.�8�+L��H��$@H���>X��I��$�H�����H�h H��$�H�@(H�@0H��$����H��H��$����E��$hI��$��3�I�F�I�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H�����H�q(H�H0H�q(H�RI��$�H�����H��$H�PH��舫��H�����H��H���v���H��H���;���E��$hI��$���H��#I��$p�H��$�HDŽ$H��H���HDŽ$��Ү��E��$hI��$��D�I�v�I�H��tH���s�H��$@H��L��H���q���I��$�H�����H��$H��貪��H��H�����H��蠪��H�#�H��$�I��$pH��$�H��$�H��H���%���E��$hI��$����H��#I��$p1�1�HDŽ$H��x���E��$hI��$��V��I�F�H�����H�Hc�$@fo�$@��H��H	�@H�I��$�H�����H��$H��$�赩��H�#H��I��$p�H��$�H�sh�M���E��$hI��$����I�v�H�H������C��H��I�v�L���1��I��$�H�����H��$H���2���H��H�����H��� ���H��#�H��$�I��$pH��$�H��$�H��pH��襬��E��$hI��$����I�F�H���V�H�Hc�$@fo�$@��H��H	�PH�I��$�H�����H��$H��$��v���H��#H��I��$p�H��$�H�sh����E��$hI��$����I�v�H�H������C���H��I�v�L���g��I��$�H�����H��$H����H��H�����H�����H�B#�H��$�I��$pH��$�H��$�H��H���f���E��$hI��$�����I�v�L���4z��H��H�����H�H������?�u���@���H��$@�8�+L��H���/S��H�ٺ8L��H�h �BH�@(H�@0H�D$�S��L�D$H�@ H��H�@(L�@0I��$�H�����H��$H��$��Ѧ��Ic�$�H�*#I��$���~OH�H���I��$pH��$�H��H��H��$�H��$���;���ADŽ$�I��$�I��$�H��(H��I��$pH��$����E��$hI��$��m��I��$�H���������H�r#1�1�I��$pH��H��诩��H��$��H��I��$pH��$�H��$�H���{���E��$hI��$�����H�#I��$p1�1�HDŽ$H���:���E��$hI��$����A�I�n��D$H���<�H�EH������?�����@��H��$@�8�+L��H���Q��1�1�H�h I��$�H�@(H�@0H��$��i|��H�ٺ8L��H�h�@�H�D$P�P��L�L$PL��$�H�@(H��L�H L�@0�EH���H���H�EH�u Hc�$@fo�$@%�H��}H	ЋT$H�E��H�E(H��tH�
��L���l���H�]0H�����L�t$PI��L��$�I���f.�E1�M�m0M�����I�U H�H������?t��@u�H�z0u�H�Z �T$H�
b�L��H�����M��������I�F H���הH��L9�tH�p H��L����t�����x�H���Ro��I�E0I�u I��$ I�F0�y���I��$ L��M���f����D���I�v�L���v��H��$H��t(H�Hc�$@fo�$@��H��H	�PH�I��$�H�����H��$�����Ic�$�H�]�"I��$���~OH�H���I��$pH��$�H��H��H��$�H��$���n���ADŽ$�I��$�I��$�H��PH��I��$pH��$��.���E��$hI��$����M�F�0L��I�.H��$@�XH��L�D$�N��L�D$I��$�H�����H�h(L�@ H��H��$����H��H�����H����H�R�"�H��$�I��$pH��$�H��$�H��H���v���E��$hI��$�����I�.�(�YL��H��$@H���pM��I��$�H�����H�h H��$�H��$�X���H���"H��I��$p�H��$�H������E��$hI��$��_��H��$@I�n��8L��H�پ��L��I��$�H�����H�h H��$�H�@(H�@0H��$� ��H�#�"H��I��$p�H��$�H����W���E��$hI��$�����H��$@I�6L��H���M��H��$H�����I��$�H�����H��$��>���H���"H��I��$p�H��$�H����ӣ��E��$hI��$��E��H��$@I�6L��H���L��H��H�����H�H������0���j�I��$�H�����H��$H��$�衟��H��"H��I��$p�H��$�H����6���E��$hI��$����H��$@I�6L��H���K��H��$H�����I��$�H�����H��$�����H�~�"H��I��$p�H��$�H���貢��E��$hI��$��$��I�6L��H��$@�)��A�U�A�E�L��H��$P�_I�.��$P��$X� ��$T��$\�xJ��H�ٺ0L��[H�D$�^J��L�D$I��$�H�����H�h(H��$�L�@ H��$�=���H���"H��I��$p�H��$�H��PHDŽ$��ơ��E��$hI��$��8��I�~�t+I�]к �bL��H���I��I�v�H��L��H���n_��M�M�N��L��M�V�H��$@�@I�n�H��L��$�L�L$PL�T$�pI��L�T$L�L$PL��$�I�v�H��H�h(L�P L�H0L�@8H��$H�������I��$�H�����H���*���H��H�����H�D$P����H��H�����H�D$����H��H�����H����H�L$PH�L�"H��$�H�T$I��$pH��$�H��$�H���H��$�H��H��$���[���E��$hI��$�����H��$@I�6L��H��$�H���I��I��$�H�����H��$�K���H���"H��I��$p�H��$�H������E��$hI��$��R��I�6L��L��H��$��Լ��I��$�H��������H�A�"H��I��$p�H��$�H���H��$@�m���I�6H��1�I��$�L������E��$hH��$����I�I��$�H�����H��$�H��$�X���H���"H��I��$p�H��$�H������E��$hI��$��_��A�U�I�EA�M�I�v���$T��$PH��$XH���a�H�H������?�N�H��$PH���L��莶��I��$�1�1��=���H���e���H��$I��$�H�����艚��E��$hI��$����I�6L��L���ź��I�H��tH=�v�tH��L��L������I�6L��L��H��$@�	���I�6H��1�L��艅��I�>H�D$茠��H��L��H���nF��H�ٺ8L��+H����E��H�T$L��H�h H��H��$�H�@(H�@0�ZY��I��$�H�����H��$螙��H��HDŽ$�H��$��]���E��$hI��$����I�.�@�iL��I�����H��$@H��H��ID��)E��I��$�I�����H�h0L��H��$�H�@ H�@(H�@8H��$���H��HDŽ$�H��$�HDŽ$�詢��E��$hI��$����I�F�I�V�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H���ɺH�q(H�H0H�q(H�RI��$�H�����H��$H�PH���O���H�����H��H���=���H��H������E��$hI��$��d��E��$hI�F�H��$�J��I�n�M��@L��M�V�H��$@�iI�����H��H��L�L$PID�L�T$�C��L�T$L�L$PH�����I��$�H�h0L�H8L�P(H��H�@ H��$腗��H�����H��H�D$�q���I�����H��H��L���\���H�T$�H��$�H��$�H��$�H��H��$��
���E��$hI��$��\��I�.M�N��@L��H��$@I������iH��H��L�L$ID���B��L�L$I��$�H�����H�h0L�H(H��H�@ H�@8H��$衖��I�����H��H��L��茖��H��$��H��$�H��H��$�HDŽ$��;���E��$hI��$����I�n�I�H�M0H��H��tH�Q(H�H(HM(H�B0H�P0H���i�H�J(H�U0H�J(H�@H��$@�@L��H�پiH�E��A��H�����H�h(I��$�H�@ H�@0H��H�@8H��$評��H��H�����H��$�H��菕��H��H���T���H��HDŽ$�H��$�HDŽ$��7���E��$hI��$����I�.�@�iL��H��$@H���A��H�����I��$�H�h(H��$�H�p0H�@ H�@8H��$���H��HDŽ$�H��$�HDŽ$�蘞��E��$hI��$�����M��8�+L��H��$@H��L�D$�m@��L�D$H��L��H�@(�@�iH��L�@ H�@0�<@��I��$�H�����H�h(H��$�H�@ H�@0H�@8H��$����H��H��$��ם��H��HDŽ$�H��$�HDŽ$�誝��E��$hI��$����M�N�I�.�@L��I�����M�V�kH��$@M��H��MD�H��L�T$PID�L�L$�]?��L�L$L�T$PH�����I��$�H�h8L�H(L�P0H��H�@ H��$�0���H�����H��H�D$����I�����H��H��L������H�T$�H��$�H��$�H��$�H��H��$�赜��E��$hI��$����I�n�M��@L��H��$@I������iH��H��L�L$ID��x>��L�L$I��$�H�����H�h0L�H8H��H�@ H�@(H��$�L���I�����H��H��L���7���H��$��H��$�H��H��$�HDŽ$����E��$hI��$��8��I�6L��L��H��$�躲��I��$�H������Ƒ��H�'�"H��I��$p�H��$�H���H��$@�S���I�6H��1�I��$�L����|��E��$hH��$���I�v�L��H��$@豵��I�6L��覵��M�F�H��L��0�ZI�.L�D$�=��L�D$I��$�H�����H�h(L�@ H��H��$���H��H�����H�����H�H�"�H��$�I��$pH��$�H��$�H��HH���l���E��$hI��$�����H���"I��$p�H��$�HDŽ$AH��H���HDŽ$�A����E��$hI��$����E��$hHDŽ$�k��E��$hHDŽ$IDŽ$��E��I�v�L��H��$@�I���A�UA�EL��H��$P�_��$P��$X� ��$T��$\�;��M�F�H��L��0�ZH��L�D$�z;��L�D$I��$�H�����H�h(H��$�L�@ H��$�Y���H���"H��I��$p�H��$�H��HHDŽ$����E��$hI��$��T��I�v�L��H��$@�X���I�6L���M���M�F�H��L��0�[I�.L�D$�:��L�D$I��$�H�����H�h(L�@ H��H��$蠎��H��H�����H��莎��H���"�H��$�I��$pH��$�H��$�H��PH������E��$hI��$����I�v�L��H��$@色��A�UA�EL��H��$P�_��$P��$X� ��$T��$\��9��M�F�H��L��0�[H��L�D$�9��L�D$I��$�H�����H�h(H��$�L�@ H��$虍��H���"H��I��$p�H��$�H��PHDŽ$��"���E��$hI��$����I�F�I�H�p0H��H��tH�N(H�r(Hp(H�Q0H�J0H�����H�q(H�H0H�q(H�RI��$�H�����H��$H�PH�����H�����H��H���׌��H��H���L���E��$hI��$����I��$�H�����H��$�蚌��H��H��$��e���E��$hI��$�����0�-L��I�.H��$@H���?8��H��H��L��H�@ H��H��$�H�@(�{��I��$�H�����H��$�
���H������H��H��$�H��$��ŕ��E��$hI��$�����M�F�H��$@�0L��H�پ-L�D$�7��L�D$H��L��H�@(�8�jH��L�@ �p7��I��$�H�����H�h(H��$�H�@ H�@0H��$�H���H��HDŽ$�H��$�����E��$hI��$��Y���I�]�I�v�L��H���^���I�I�~�H�D$�m���H��L��H��$@H���G7��H�ٺ8L��+H���6��H�T$L��H�h H��H�@(H�@0�;J��I��$�H�����H��$H���|���H�����H��H���j���H��$��H��$�H��H��$��%���E��$hI��$��w���I�v�L��H��$@����I�V�I�v�H��L���`��I�V�fo�$@H�����I��$�I�F�H�R H��H�B(zH��$�̉��H��H�����H�D$踉��H��H�����H��覉��H��"H�T$H��$�I��$pH��$�H��$�H��(H��$�H������L��I��$��n�E��$h鈾��E��$hHDŽ$�n���M�F�I�V�1�L��H��$@H��L�D$��]��H�ٺ0L��H�žV��4��L�D$H�UIcMI�~�H�h(L�@ ��E�E�H��H��$H	�H�UIc�H��t"H�H��H��������IcЃ��	�H�H��I��$�H�������H��H	�H��b���H��H�����H���P���H���"�I��$pH��$�H��$�H��0H��H��$��Ջ��L��I��$��%�A�v�A�N�A��$IA��$HE��$h�������	�	�A��$IA�V��`	�A��$H���A��$H��A��$H����A��$IL���d�E��$h龼��M�F�I�V�1�L��H��$@H��L�D$�D\��H�ٺ0L��H�žW�,3��H�UIcML�D$I�~�H�h(��H��H��$I�v�H	�L�@ H�UH���i�H�H��H�������9����0�H���A�I��$�H�����H��辆��H��H�����H��謆��H�
�"�I��$pH��$�H��$�H��H��H��$��1���L��I��$���A�V�A��$HE��$h�у�����	�A�N�	�A��$I�����	�A��$IA�VЃ�`	�A��$H�K���M�F�M�N�1�L��H��$@I�V�H��L�D$PL�L$��Z��H�ٺ8L��H�žU�1��L�D$PH�UIcML�L$H�h(L�@0��E�E�H��I�~�L�H H	�H��$H�UIc�H��t"H�H��H�������ŦIcЃ����H�H��I��$�H�������H��H	�H��-���H��H�����H�D$����H��H�����H������H�h�"H�T$H��$�I��$pH��$�H��$�H���H��H��$������L��I��$�����A�v�A�N�A��$IA��$HE��$h�������	�	�A��$IA�V؃�`	�A��$H飹��A��$H��A��$H���A��$IL����E��$h�h���A��$HL��A��$I�ȃ�����A��$H�������	�A��$I��E��$h����I�F�L��I�m�I��$��8���H�
�e�8L��HH�D$�/��H��(L��H�@ �1H���@(H�@0�[/��I��$ �H��H�D$PH�D$H�A �x���H��H��$�H�D$H�FM�N�I�H�������F���������H�T$PL��L�����I�F��C(H�D$H�C0I��1�1�1�L���<��H��E1�H��UH�L$I��1�L���8���M�N��81�H�D$`L��L�L$[]H��$@H���~.��L�L$H��L��H��L�D$P�H��$�L�M(�0L�E0M�F�H�E L�D$�?.��L�D$I�v�H�h L�@(H��$H��tH�����I��$�H�����H������H��H�����H�D$���H��H�����H�����H�M�"H�T$H��$�I��$pH��$�H��$�H���H��$�H���d���E��$hI��$��ֶ��M�F�PL��I�n�H��$@�H��L�D$�T-���Aom�L�D$H�����I��$�H�h(h0�AouL�@ H��p@H��$�$���H��H�����H������H�s�"�H��$�I��$pH��$�H��$�H���H��藄��E��$hI��$��	���I��$�H��t�ς��I�F�PL��I�n�H��$@�I��$�H���r,���AoU�I��$�H�����H�h(H��$�P0�AoEH�@ @@H��$�>���H���"H��I��$p�H��$�H���HDŽ$��ǃ��E��$hI��$��9���E��$hI��$�IDŽ$�H��$����I��$�H���ۿI�F�M�F�L��H��$@�PI�n�I��$�H��L�D$�o+���Aou�L�D$I�v�H�h(p0�Ao}L�@ x@H��$H��tH�����I��$�H�����H���.��H��H�����H�����H�}�"�H��$�I��$pH��$�H��$�H���H��衂��E��$hI��$�����E��$hI��$�IDŽ$�H��$���I�F�M�N�I�M�I�n�I��$�M��tL��A��L������I��H��$@�
�XL��H��L�L$�9*���AoU�L�L$I�v�H�h(P8�AoEL�H H�@0@HH��$H��tH������I��$�H�����H����}��H��H�����H����}��H�?�"�H��$�I��$pH��$�H��$�H���H���c���E��$hI��$��ղ��I�F�M�N�I�M�I�n�I��$�M��tL��A��L�����I��H��$@�	�XL��H��L�L$�%)���Aou�L�L$I�v�H�h(p8�Ao}L�H H�@0xHH��$H��tH������I��$�H�����H����|��H��H�����H����|��H�+�"�H��$�I��$pH��$�H��$�H���H���O���E��$hI��$����I�v�I�F�H��t(I�M�I�V�AUM�M�QL��H��L��$P���I�v�ZYH��$H��t
H��tH�����I��$�H�����H���|��H��H�����H�D$�{��H��H�����H����{��H�N�"H�T$H��$�I��$pH��$�H��$�H���H��$�H���e��E��$hI��$��װ��I�v�I�F�H��tI�V�L��$@H��L��軨��I�v�H��$H��t
H��tH�����I��$�H�����H���6{��H��H�����H�D$�"{��H��H�����H���{��H�q�"H�T$H��$�I��$pH��$�H��$�H���H��$�H���~��E��$hI��$����I�I�v�L����H��tH��tH��L������I�I�N�H�����H��$HI��$�H�H(H��$@H�PH��H�HH��$�Lz��H��H�����H���:z��H���"�H��$�I��$pH��$�H��$�H��H���}��E��$hI��$��1���I�I�N�H�����H��$HI��$�H�H(H��$@H�PH��H�HH��$�y��H��H�����H���y��H���"�I��$pH��$�H��$�H���H��H�D$P�}��H�s`1�1�I��$pH�D$�}��L�L$H��H���I��$pH��$�L��$���|��L�D$PH��H��I��$pH��$�L��$��|��E��$hI��$�����I�m� I�]�L��H��_�$��H��tA�H��1�H��L���3���H�ٺ!H��L��L��$@H��$����H���"H��I��$p�H��$H���HDŽ$��
HDŽ$���{��E��$hI��$��_���I�.�8�NL��H��$@H����#���Ao}�I��$�H�����H�h x(H��$��w��H�.�"1�1�I��$pH��H��H�k{��H��$��H��@I��$pH��$�H��$�H���7{��E��$hI��$�马��I�H��$@I�v�L��H����5��I��$�H�����H��$H���(w��H��H�����H���w��H�w�"�I��$pH��$�H��$�H��PH��H�D$�z��L�D$H��H��@I��$pH��$�L��$��mz��E��$hI��$��߫��I�H��$@I�v�L��H���8��I��$�H�����H��$H���^v��H��H�����H���Lv��H���"�I��$pH��$�H��$�H��PH��H�D$��y��L�D$H��H��8I��$pH��$�L��$��y��E��$hI��$�����H�1`�*L���)��L��(L��0H��$@�!��H�ٺ8L��H�@ *�NH���l!���AouE��$hH�h p(H��$IDŽ$�锪��I�.�8�NL��H��$@H���!���AoE�I��$�H�����H�h @(H��$�u��E��$hI��$��4���I�H��$@I�v�L��H��H�P �n3��I��$�H�����H��$H���t��H��H�����H���t��H���"�H��$�I��$pH��$�H��$�H�sPH���%x��E��$hI��$�闩��I�H��$@I�v�L��H���U6��I��$�H�����H��$H���t��H��H�����H���t��H�e�"�H��$�I��$pH��$�H��$�H�s@H���w��E��$hI��$����I�I��$�H�����H��$�s��H���"1�1�I��$pH��H�s`�8w��H�sP�H��$�I��$pH��$�H��$�H���w��E��$hI��$��y���A��$itH��$@H�5�gL��H�����A��$HE��$h��$fA��$H��,���A��$itH��$@H�54gL��H�����A��$HE��$h��$fA��$H��ߧ��I�H��$A��$i��wE��$h鷧��A��$i��mE��$h隧��I�H��$A��$i�,qE��$h�r���E��$hHDŽ$>�X���I�D$PI�L$XH9���H�P���#����
u+�ڿH9��οH���B���
�����#����p���vՃ� t�I��$��L��L��$@H�5Bf���E��$h�Ʀ��I��$�H���jmH�u�H�=�e������KmH��$@�H��L��I��H�5[���H�EI�t$HH��H��$PH��$hH��ZH��$P�����$d�c�E��$h�(���I��$�1�L��L��$@H�5ge�/��E��$h���I��$��L��L��$@H�5�Z���A��$HE��$h��$鸥��I�I�~�H��$@H�D$��v��I�U�L��H�����H�ٺ8L��+H��� ��H�T$L��H�h H��H�@(H�@0�/��I��$�H�����H��$H����o��H��H�����H����o��H�<�"�H��$�I��$pH��$�H��$�H���H���`s��E��$hI��$��Ҥ��I�I�n�8L��H��$@�+H��H�D$�Q��H�T$L��H�h H��H�@(H�@0��.��I��$�H�����H��$H���o��H��H�����H���o��H�m�"�H��$�I��$pH��$�H��$�H���H���r��E��$hI��$�����I�F�I�H���7�H��tPH�x tH�z �(�H�H0H���[�H�I(H�r(Hp(H�Q0H�J0H����H�q(H�H0H�q(H�RH�PI��$�H�����H��$H���7n��H�����H��H���%n��H��H���u��E��$hI��$��L���I�E�M�F�I�N�L��I�V�I�v�PI�E�PI�E�M�PH��$XS�7��I��$�H�����H��$(H�� H���m��H��H�����H��$��m��H��H�����H��$��m��H��H�����H���nm��H��H�����H�D$P�Zm��H���"H��$�H��$�H��$�I��$pH�D$H��$�H���H��$�H��H��$����p��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��p��E��$hI��$����I�E�M�F�I�N�L��I�V�I�v�PI�E�PI�E�M�PH��$XS�k6��I��$�H�����H��$(H�� H���Xl��H��H�����H��$��Al��H��H�����H��$��*l��H��H�����H���l��H��H�����H�D$P�l��H�e�"H��$�H��$�H��$�I��$pH�D$H��$�H���H��$�H��H��$���lo��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��.o��E��$hI��$�頠��I�E�I�N�I�V�M�M�I�v�M�PI�E�PI�E�L��PH��$XS�ʼn��I��$�H�����H��$(H�� H���k��H��H�����H��$���j��H��H�����H����j��H��H�����H�D$P��j��H�&�"H��$�H��$�I��$pH��$�H�D$H�s(H��$�H���@n��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��n��E��$hI��$��t���I�V�I�L��L��$@I�v�����I��$�H�����H��$H����i��H��H�����H�D$��i��H��H�����H����i��H�-�"H�T$H��$�I��$pH��$�H��$�H��hH��$�H���Dm��E��$hI��$�鶞��I��$�H�����HDŽ$�Ni��I��$��+H�=�H���"i��H���"�I��$pH��$�H��$�H��xH��H��$��l��L��I��$��r��E��$h�!���I��$�H�����HDŽ$�h��I��$��.H�=UH���h��H���"�I��$pH��$�H��$�H��xH��H��$��"l��L��I��$��br��E��$h錝��I��$�H�����HDŽ$�$h��I��$��$H�=H���g��H�i�"�I��$pH��$�H��$�H��xH��H��$��k��L��I��$���q��E��$h���H��"I��$p1�1�HDŽ$�H�sX�Gk��E��$hI��$�鹜��M��1�1�1�L��H��$��x!��H���"�HhH�@0�Ao}H�@8H�ʃ�H�@ H���H��=�HhH��?xIcM��*H�@(H�P@H�H��H�@`��H��$H	�H��H�I��$p�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$��4j��E��$hI��$�馛��fo�$@I�H������HhH�@ H�@(H�ʃ�H�@0H��=�HhHc�$@H��?H�@8I��$���*H��H�@`H�P@H�@��H	�H�H��$��e��1�H��H����e��H�߾H�D$�e��H�߾H���e��H��"H�T$H��$�I��$pH��$�HDŽ$�H���H��H��$��HDŽ$�HDŽ$�HDŽ$�H��$���h��E��$hI��$��^���H��M�F�I�N�1�H��$HM�1�L��S�r���I��$�H�����H��$A[H��]��d��H��H�����H��$��d��H��H�����H�D$P�d��1�H��H���d��H�߾H�D$�d��H�߾H���vd��H�L$PH�Ҿ"H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��HDŽ$�L��$�H��$��g��E��$hI��$��+���H��I�N�M�E1�H��$H1�1�L��S�@���I��$�H�����H��$XH��Z�c��H��H�����H�D$P�c��1�H��H���~c��H�߾H�D$�lc��H�߾H���\c��H�L$PH���"H��$�H�T$I��$pH��$�HDŽ$�H���H��$�H��H��$��HDŽ$�HDŽ$�H��$��f��E��$hI��$�����H��M�F�I�V�1�H��$HM�1�L��S�)���I��$�H��$YH��^H������b��H��H�����H��$��qb��H��H�����H�D$P�]b��1�H��H���Pb��H�߾H�D$�>b��H�߾H���.b��H�L$PH���"H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$��qe��E��$hI��$����fo�$@I�I�v��HhH�p`H�����H�@ H�ʃ�H�@(H��=�HhHc�$@H��?I��$�@��*H��H�@0H�P@H�H��H�@8��H	�H�H��$�
a��H��H�����H�D$P�`��1�H��H����`��H�߾H�D$��`��H�߾H����`��H�L$PH�&�"H��$�H�T$I��$pH��$�HDŽ$�H���H��$�H��H��$��HDŽ$�HDŽ$�H��$��d��E��$hI��$�郕��H��I�N�I�V�1�H��$HM�F�M�L��S蕃��I��$�H�����H��$_H��AX��_��H��H�����H��$���_��H��H�����H��$���_��H��H�����H�D$P�_��1�H��H���_��H�߾H���_��H�߾H�D$�_��H�L$PH�޹"H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$��b��E��$hI��$��3���H��I�N�I�V�E1�H��$HM�1�L��S�F���I��$�H�����H��$AYH��AZ�^��H��H�����H��$��^��H��H�����H�D$P�x^��1�H��H���k^��H�߾H�D$�Y^��H�߾H���I^��H�L$PH���"H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$��a��E��$hI��$����H��I�v�M�E1�H��$H1�1�L��S����I��$�H�����H��$A[H��]�q]��H��H�����H�D$P�]]��1�H��H���P]��H�߾H�D$�>]��H�߾H���.]��H�L$PH���"H��$�H�T$I��$pH��$�HDŽ$�H���H��$�H��H��$��HDŽ$�HDŽ$�H��$��u`��E��$hI��$����H��M�F�I�N�1�H��$HI�v�M�L��S���I��$�H�����H��$XH��Z�X\��H��H�����H��$��A\��H��H�����H��$��*\��H��H�����H�D$P�\��1�H��H���	\��H�߾H���[��H�߾H�D$��[��H�L$PH�C�"H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$��&_��E��$hI��$�阐��H��I�N�I�v�E1�H��$HM�1�L��S�~��I��$�H��$YH��^H������
[��H��H�����H��$���Z��H��H�����H�D$P��Z��1�H��H����Z��H�߾H�D$�Z��H�߾H���Z��H�L$PH��"H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$���]��E��$hI��$��e���H��I�V�M�F�1�H��$HI�v�M�L��S�w}��I��$�H�����H��$_H��AX��Y��H��H�����H��$��Y��H��H�����H��$��Y��H��H�����H�D$P�Y��1�H��H���Y��H�߾H���vY��H�߾H�D$�dY��H�L$PH���"H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$��\��E��$hI��$�����H��I�V�I�v�E1�H��$HM�1�L��S�(|��I��$�H�����H��$AYH��AZ�X��H��H�����H��$��nX��H��H�����H�D$P�ZX��1�H��H���MX��H�߾H�D$�;X��H�߾H���+X��H�L$PH���"H��$�H�T$L��$�H��$�HDŽ$�H���I��$pH��$�H��H��$��L��$�HDŽ$�H��$��n[��E��$hI��$����H��M�F�I�N�L��H��$HI�V�I�v�SM���z��I��$�H�����H��$A[H��]�NW��H��H�����H��$��7W��H��H�����H��$�� W��H��H�����H��$��	W��H��H�����H���V��1�H��H����V��H�߾H�D$P��V��H�߾H�D$��V��H�T$PH�"�"H��$�H�L$L��$�H��$�H��$�L��$�L��$�H��$��H���I��$pH��$�H��L��$�L��$�L��$��Z��E��$hI��$��s���H��I�N�I�V�E1�H��$HI�v�M�L��S�y��I��$�H�����H��$XH��Z��U��H��H�����H��$���U��H��H�����H��$��U��H��H�����H�D$P�U��1�H��H���U��H�߾H���U��H�߾H�D$�rU��H�L$PH�ί"H��$�H�T$L��$�H��$�HDŽ$�L��$�H���H��$�H��I��$pH��$��L��$�L��$�H��$��X��E��$hI��$��#���M��1�1�1�L��H��$�����H��HDŽ$�H��$HDŽ$�HDŽ$��i^��E��$hI��$�黉��E��$hI�I��$�D�L$H�����H��$�FT��D�L$I��$��{���I�I�V�H�AH�BH�B(H��u骬fDH��H�qH�pH�p(H��u�H�H(I��$�H�����H��$H����S��H�����H��H����S��H��H���<[��E��$hI��$����I�I��$�H�����H��$�H��$�S��H��H��$��J]��E��$hI��$�霈��A��$HH��$@I�v�L��I�H���>��H�ٺ0L��IH���	���I��$�H�����H�h H��$�H�@(H��$��R��I��$�H��H��$�H��$��\��E��$hI��$����A�D$pA�T$l9�����x��9����*L��I��-�����L��� ����&L��������L������M��&H��1�L��H��$��Y��H������HhI��$�H��$�R��H��HDŽ$�H��$�HDŽ$���[��E��$hI��$�����I�H��tH��趡��I��$�H�����H��$�Q��H��"1�1�I��$pH��H�� �HU��H��$��H��I��$pH��$�H��$�H���U��E��$hI��$�醆��H��$@�(�L��H������H���"1�1�H�@ I��$pH�� H��$�T��H���1�1�I��$pH���T��H��$��H��I��$pH��$�H��$�H���cT��E��$hI��$��Յ��I�v�L��H��$�y���E��$h鳅��E��$hA��$HA�F�f%�f=���f����D����	�fA��$H�r���I�N�I�V�L��L��$@M�I�v����I��$�H�����H��$H����O��H��H�����H�D$P��O��H��H�����H�D$��O��H��H�����H���O��H�L$PH��"H��$�H�T$I��$pH��$�H��$�H���H��$�H��H��$���S��E��$hI��$�鏄��E��$hA��$HA�F�f%�f=���f����D����	�fA��$H�N���I�~��x�A��$HA�F�E��$hf%�f=���f���������	�fA��$H����I�F�L��I�n�H��$@�(I��$�H���~���I��$PH�h H��tH��L������H�ٺ(�L��I��$PH��$��=���I��$�H�����H�@ H��$�)N��H���"H��I��$p�H��$�H�3��Q��E��$hI��$��4���A��$i�zIE��$h����I�6L���$r��I�E��$hH��$��A��$Hu4A��$Hf����<� ���,tH�&7L��L���<i��H��$@� �L��H���?���H���"1�1�I��$pH��$H�����P��E��$hI��$��Z���H�5cWL��1��V��E��$h�;���I��$�H���˚L��$@�H��L��H�5c��3���H�CH��I��$��OO��E��$h���I��$��L��L��$@H�5G6���A��$HE��$h��$A��$Hf%��fA��$H鐁��A��$i�HE��$h�s���H��$@A��$itH��H�5�@L������HH�پqL�����A��$HE��$hH�@8�@0�P@H�@ H�@(H��$A��$H��A��$i��FE��$h�Ӏ��A��$i��JE��$h鶀��H��$@�@�L��H��H��$��9����AomL��H�@(H��H�@ h0�d���H���"1�1�I��$pH��$H�s`�N��H��XH��I��$p�H��$��N��E��$hI��$�����I�H��$A��$i��EE��$h����I�D$PI�L$XH9��\�H�P���#�L���
u)�B��H9��8�H���B���
�'���#���p���vՃ� t�A��$itH��$@H�5e>L��H������I��$�H����D�]E�����E��$h�7��H��$@�@�L��H�������AouL��H�@ H��p0���H��"1�1�I��$pH��$H����NM��E��$hI��$��~��I�v�L��H��$@�df��I�V�I�v�H��L������I�V�fo�$@H�����I��$�I�F�H�R H��H�B0RH��$�I��H��H�����H���I��H��H�����H��$���H��H��1�H��$���H��H��H�D$P��H��H��H��$�H�D$�H��L�L$PL�D$H��"H��$�H��$�H��$�I��$pL��$�H��8H��$�H��H��$��L��$��	L��L��I��$��Y���E��$h�s}��E��$hDŽ$��Z}��H��$@�@�L��H��H��$�����AoEL��H�@(H��H�@ @0����H�)�"1�1�I��$pH��$H�s`�dK��H���H��I��$p�H��$��@K��E��$hI��$��|��L����������HDŽ$E��$h�|��I�F�I��$�H�����H��$�H��$�G��H�y�"H��I��$p�H��$�H�s8�J��E��$hI��$��"|��H�;�"I��$p1�1�HDŽ$H��8�oJ��E��$hI��$���{��I�V�I�v�L���ih��I��$�H�����H��$H���jF��H��H�����H���XF��H���"�H��$�I��$pH��$�H��$�H���H����I��E��$hI��$��O{��H�h�"I��$p1�1�HDŽ$H����I��E��$hI��$��{��I�V�I�v�L���V��I��$�H�����H��$H���E��H��H�����H���E��H��"�H��$�I��$pH��$�H��$�H���H���
I��E��$hI��$��|z��H���"I��$p1�1�HDŽ$H�����H��E��$hI��$��;z��I�H���FkI��$XH��$@H��L��1�H��H��$����I��$�H�����I��$X�D��H��"H��I��$p�H��$�H����8H��L��I��$x舞��E��$h�y���A�D$hL���(���L�����E��$h�zy��I�>H���|j����I�v�H���ZjH��tH��L�����I��$�H�����H��$H����C��H��H�����H����C��H�4�"�H��$�I��$pH��$�H��$�H��H���XG��E��$hI��$���x��H��"I��$p1�1�HDŽ$H����G��E��$hI��$��x��I�v�I�H��tH���ziH��$@H��L��H�����I��$�H�����H��$H���B��H��H�����H����B��H�F�"�H��$�I��$pH��$�H��$�H�� H���jF��E��$hI��$���w��H���"I��$p1�1�HDŽ$H��0�)F��E��$hI��$��w��I�v�I�H��tH���$hH��$@H��L��H������I��$�H�����H��$H���	B��H��H�����H���A��H�X�"�H��$�I��$pH��$�H��$�H��(H���|E��E��$hI��$���v��M�F�I�.M���S�H���=�I�H������?�D���@tPH��$@�8�@L��H��L�D$�C�L�D$L��H�@ H��H�@(L��H�@0����I��H��L��L�����H��$I��$�H�����H���@��H��H�����H����@��H�G�"�H��$�I��$pH��$�H��$�H���H���kD��E��$hI��$���u��L���
���E��$hH��$�u��E��$hI�I��$�D�L$H�����H��$�J@��D�L$I��$��u���L���j\��I�E��$hH��$�Yu��E��$hDŽ$�I�D$PI�D$`�6u��H��$@H�B*��L���B�H�ٺ(L��0��H�ٺ8L��H�@ ��+H����H��L��H��$�H�@ H��H�@(H�@0����H�Й"H��I��$p�H��$H���HDŽ$��B��E��$hI��$��jt���8�+L��I�.H��$@H�����H��L��H��$�H�@ H��H�@(H�@0�t���I��$�H�����H��$�>��H��"H��I��$p�H��$�H����MB��E��$hI��$��s��A�E�A�u�L��H��$PA�U�A�Mԉ�$PI�v�$\I���$XH�ꉌ$TH�D$�`��H��8L��+H����H�T$L��H�X H��H�@(H�@0���I��$�H�����H��$H����=��H��H�����H���=��H� �"�I��$pH��$�H��$�H��XH��H�D$�GA��L�D$H��H���I��$pH��$�L��$��A��E��$hI��$��r��H��$@I�6L��H�����H��H����I�>�C��L��L��H���x�H�ٺ8L��+H�D$���L�D$H��L��H�@(H��H��$�L�@ H�@0�_���I��$�H�����H��$�<��H��"H��I��$p�H��$�H���HDŽ$��,@��E��$hI��$��q��I�v�H�����I�]�L��H�����8H��L��+H����I�H�h H�@(H�@0H��$H��t�HH�B �@�J�BH��I��$�H�����H��$H����;��H��H�����H���;��H��"1�1�I��$pH�D$PH�s`�Y?��H����I��$pH��$�H��$�H��H�D$�(?��L�L$H�s@H��I��$p�H��$�L��$��>��L�D$PH�sHH��I��$p�H��$�L��$���>��E��$hI��$��>p��I�I�V�H����H��t�JH�P �R�H�PI��$�H�����H��$H���:��H��H�����H���:��H��"�H��$�I��$pH��$�H��$�H�sHH���(>��E��$hI��$��o��I�6L��H��$@�^��H��I�.�8�+L����I��$�H�����H�h H�@(H�@0H��$�9��H�X�"1�1�I��$pH��H�s`�=��H�s@�H��$�I��$pH��$�H��$�H���g=��E��$hI��$���n��I�F�H��t>I�]�H��L��H����H�ٺ8L��+H���N�H�h H�@(H�@0I��$�H�����H��$�.9��H���"1�1�I��$pH��H�s`��<��H����I��$pH��$�H��$�H��H�D$�<��L�D$H�s@H��I��$p�H��$�L��$��p<��E��$hI��$���m��I�v�H���YVI�U�L��H��$@��I�v�H��L��H�����I��$�H�����H��$H���H8��H��H�����H��$�H�D$�,8��H���"H��I��$p�H��$�H����;��L�D$H�s@H��I��$p�H��$�L��$��;��E��$hI��$��m��E��$hI�F�H��$��l��E��$hI�H�����H��HD�H��$��l��L��������THDŽ$E��$h�l��E��$hI��$�H��|$MI��$��7�A�� ��I�I��$�D�L$H�����H��$�6��D�L$I��$��/l��I�F�I��$�H�����H��$�H��$�6��H� �"H��I��$p�H��$�H����T:��I��$��A��$h �MTA�D$hA��$hA��$H���A��$hA���k��A��$H�1�1�1�M�E�L��H��$��K�H���"�HhH�@0�Aou�H�@8H�ʃ�H�@ H���H��=�HhH��?pIcM��*H�@(H�P@H�H��H�@`��H��$H	�H��H�I��$p�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$�HDŽ$��9��E��$hI��$��yj��E��$hA��$Hf%��fA��$HA���$�Ij��E��$hA��$HA���$�(j��E��$hA��$H��$�j��� H�=�>H��$��:��I�~�H��$��;��I��$pH��H��$�H��"H�0�28��I�V�I�M�E�I�v�L��$@L���Z��I��$�H�����H��$H���44��H��H�����H�D$� 4��I�V�H�}�"H�L$I��$pH��$�H��H���H��H��$�H��H��$���7��E��$hI��$��i��I�V�I�M�E�L��I�v�L��$@��Y��I��$�H�����H��$H���3��H��H�����H���n3��I�V�H�ˍ"H��$�I��$pH��$�H��$�H��H���H��H��H��$����6��E��$hI��$��Qh��E��$hHDŽ$��7h��E��$hHDŽ$��h��E��$hHDŽ$<�h��I�F�H��tCI�U�H��L���C�H��$@�8L��H�پ+H���s��H�h H�@(H�@0I��$�H�����H��$�S2��H���"1�1�I��$pH��H�s`��5��H����I��$pH��$�H��$�H��H�D$��5��L�D$H�s@H��I��$p�H��$�L��$��5��E��$hI��$��g��I�v�H���uOI�U�L��H��$@�>�I�v�H��L��H�����I��$�H�����H��$H���m1��H��H�����H��$�H�D$�Q1��H���"H��I��$p�H��$�H�����4��L�D$H�s@H��I��$p�H��$�L��$��4��E��$hI��$��*f��E��$hI�F�H��$�f��I�H�H��$H������<t��/��=t��>u�B(I��$�H�����H��$��{0��H�܊"H��I��$p�H��$�H���HDŽ$���4��E��$hI��$��ve��E��$hA�� ���|A�D$hH��$@I�v�L��H��H��$��bR��I��$�H�����H��$��/��H�7�"H��I��$p�H��$�H��X�k3��E��$hI��$���d��I�F�I�U�L��H��$@H��$�H�p(�O��I�v�L���eL��I�v�I�H��L������I�V�fo�$@H�����I�I��$�H�R H�B0rH��$�/��H�|�"�H��I��$pH��$�H���HDŽ$�HDŽ$�HDŽ$��2��I��$�H�����I��$�H��H�L$PH��$��.��H�L$PH�����H�D$H���.��H�|$1�H��$��s.��H�|$�H��$��\.��H�|$�H�D$P�H.��H��$�L�D$PH��$�L��$�H��$�H��8I��$pH��$�H��H��$��L��$�L��$��1��L��I��$����E��$h�c��E��$hHDŽ$#�b��E��$hHDŽ$"��b��E��$hHDŽ$ ��b��E��$hHDŽ$!�b��E��$hHDŽ$0�b��E��$hHDŽ$1�ub��E��$hHDŽ$2�[b��E��$hI�t$xH��I�t$xA�� �ExI��$�H��I��$�A�� �cxI�F�A�� I�D$A�F��3xA�D$hA�F�ADŽ$�����I�n�A�D$tA�F�A��$�H��tH�E$H�EH������?��w��Ct$H��$@�(�CL��H���D��H�h H��I��$�H�����H��$H��$��),��H���"H��I��$p�H��$�H��H�/��E��$hI��$��0a��E��$hA��$�ADŽ$���$�a��E��$hA�� ���vA�D$hI�>�2��H����vH��$@H��L��H��H��$�����I��$�H�����H��$�W+��H���"H��I��$p�H��$�H��`��.��H��hH��I��$p�H��$���.��E��$hI��$��:`��H��$@I�6L��H�����H��$H���zvI��$�H�����H��$��*��H��"H��I��$p�H��$�H����D.��E��$hI��$��_��E��$hA�D$tA�D$t��$�_��E��$hI��$�H�4I��$�A�� ��vI�D$xH�4I�t$xA�� ��vI�D$I�D$H��$�A�� �gwA�D$h�%_��E��$hA�� ���uA�D$hA��$h��A��$hA����^��I��$�H�����H��$��)��H��"H��I��$p�H��$�H���H��$@�-��I�6H��1�I��$�L�����E��$hH��$�o^��H��$@I�6L��H�����H��$H����vI��$�H�����H��$���(��H�E�"H��I��$p�H��$�H����y,��E��$hI��$���]��A�V�M��I�M�M�E�A��$HL��f��f%�	�fA��$HI�I�v����I��$�H�����H��$H���H(��H��H�����H���6(��H���"�H��$�I��$pH��$�H��$�H���H���+��E��$hI��$��-]��E��$hHDŽ$IDŽ$��]��E��$hI�F�I��$�D�L$H�����H��$�'��D�L$I��$���\��I��$�H�����H��$��b'��H�Á"H��I��$p�H��$�H���H��$@��*��I�6H��1�I��$�L�����E��$hH��$�I\��I�v�L���UK��I�v�I�H��tI�V�L��$@H��L���"T��I�v�H��$H��t
H��tH���v��I��$�H�����H���&��H��H�����H�D$�&��H��H�����H���w&��H�؀"H�T$H��$�I��$pH��$�H��$�H���H��$�H����)��E��$hI��$��a[��E��$hA��$HA�t$hA��$H��$���A�� ��rA�D$h�"[��I�F�I�U�L��H��$@H��$�H�p(�FE��I�v�L���B��I�v�I�H��L������I�V�fo�$@H�����I�I��$�H�R H�B(BH��$�`%��H��"�H��I��$pH��$�H���HDŽ$�HDŽ$�HDŽ$���(��I��$�H�����I��$�H��H�L$PH��$���$��H�L$PH�����H�D$H����$��H��$�H��L�D$H��(I��$pH��$�H��$��L��$��K(��L��I��$��~��E��$h�Y��I�6I�]�H��tA�L��1�L����L��H��H��L��$@�!L���R��I��$�H�����H��$�H��$�$��H�p~"H��I��$p�H��$�H���HDŽ$��
�'��E��$hI��$��
Y��E��$hI�H��$��X��A�E�A�M�L��A�U�A�u�I�^�$\I�I�n؉�$P�X��$TH��$P��$X�0H�\$PI�^�H�D$�:��E�F�L��H�L$H�h H�T$PH��L��$@H�X(��I��$�H�����H��$H���#��H��H�����H��$���"��H��H�����H����"��H��H�����H�D$P��"��H�&}"H��$�H��$�I��$pH��$�H�D$H��H��$�H���=&��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��%��E��$hI��$��qW���H�OL��I�.H��$@H�����H������`0��Ao}�H�@ I��$�H�h(x4H��$��!��E��$hI��$��W��I�E�M�F�I�N�L��I�v�M�PI�E�PI�E���PH��$XS�y�I��$�H�����H��$(H�� H���f!��H��H�����H��$��O!��H��H�����H��$��8!��H��H�����H���&!��H��H�����H�D$P�!��H�s{"H��$�H��$�H��$�I��$pH�D$H��$�H���H��$�H��H��$���z$��L�L$PH��L�D$H��hI��$p�H��$�L��$�L��$��<$��E��$hI��$��U��I��$�H������R ��H��z"1�1�I��$pH��H�s`��#��H�sH�H��$�I��$pH��$�H��$�H����#��E��$hI��$��4U��I�v�H���-mI�U�L��H��$@�k��I�v�H��L��H�����I�H��$H����lH��t�HH�B �@�J�BI��$�H�����H��$H���q��H��H�����H�D$P�]��H��H�����H���K��H��y"�I��$pH��$�H��$�H���H��H�D$��"��L�L$PH�s@H��I��$p�H��$�L��$��"��L�D$H�sHH��I��$p�H��$�L��$��w"��E��$hI��$���S��E��$h�D$=I��=H����(����[��I��$�H�H��A�� I��$��'dH��H�D$�`��A�V�L��A��$Hf��f%�	�fA��$HI�v��lB��I�I�v�M��I�M�M�E�L���R�I��$�H�����H��$H������H��H�����H�����H�"x"�H��$�I��$pH��$�H��$�H���H���F!��E��$hI��$��R��I�6L����A��I�E��$hH��$�R��I�6L���A��I�E��$hH��$�pR���L��M��M���\j���
I;L$X�f���x
�f��H���
I�D$P�e���
I;L$X�Bf���x
�8f��H���
I�D$P�%f���c����9T$������!��A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��I�T$PI�t$`�C"L��L�\$�W��D$ L�\$�_��L���D$M��M��M��L�|$(�>X��H����T��L��$�L��$�L��$�L�\$PH��$PL��L�\$H��H�L$��!��H�L$I�$L��(�?���I�|$`I�t$PH�h I��$�H�H)����H��I��$��i��H��$ 1�L��I��$�����D$AL�\$��^��L��$�L��$�L��$�L�\$PL��L�\$P��r��I�D$L��H�p�2]��I�D$P�(�I�D$`�$����$�L��H��$PI�D$H��I��$��΀H�@�PH�L$�� ��M�$H�L$L��(�?L�D$���L�D$I�|$`H�h I�t$PI�I��$�H)����H��I��$��Y��I��$�L�\$P�D$A��]��M;D$X��E��$hA����I�|$@��I�@I�D$PA�8
�N]��I;D$X�C]��A�x
�8]��I�@I�D$P�*]��fDA�t$h�*"�L��L�\$���L�\$�
]��1�H�FL��D�D$H�5����HcD$H�t$L��H�
���<AL�����1�H�5EL���t��D�D$A��$h �DU��H�5aL��1��O��D�D$�)U��A�t$h��#�L���n��L�\$�\a��L��L�\$��L�\$���YM�D$P�A^��L���D$M��M��M��I���U��H�{�R��������K����t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��I�T$PI�t$`�<"L��L�\$���D$ L�\$�[���
I;T$X��P��A�x
��P��I�@�
I�D$P�P����
uK��A��$hu@I�|$@w8I�pI�t$PA���
tO�B���v	�� ����
��M�D$PM;D$Xr�L��L�\$X�L$�t�L$L�\$X���`M�D$P�I;t$Xs�A�x
u�I�@I�D$P��@���
�c����9T$�������H�|H�������������@�����9T$���������L��L�\$h�T$X�L$�[��@���L$�T$XL�\$ht	��#���L$X�����b���b��L�������oI�D$P�k��I;D$X��A��$i��e��L���ng���e���AL��L�\$�w��L�\$�x^��H��$ L�\$H��$PDŽ$P���L�\$��$Pt I��$�L�\$�$��L�\$H9���I�|$`��]��A�x
�\���I��M�D$PA��$h�I�D$PH�P�I�T$PI;T$H�3g���x�
�)g���x�
�g��H��I�D$P�g��@L�|$L��$�L��$�L��$���\uADŽ$�����Ic�$�I��$�L�\$M��$���$�H��$ �Q�L�\$H�����I�D$XL�|$L��$�L��$�L��$�I�D$P�A�x
��c��I��M�D$P��v��L�|$L��$�L��$�L��$�A��$h�a\���_��L��$�Ic�$�I��$�M��$���$�H��$ L�|$L��$�L�\$L��$���L�\$H���v���I;L$XsA�x
�$����������%@�D$X���|$
�~2L��L�\$��X��L�\$��_��L��L�\$���L�\$E��$h���oW��M�D$P������������$����s
A��$H��;DŽ$�M�D$PA�\$h�'X��I�|$L�\$���@��L�\$I�D$����@tI�D$PI�T$XH9�s	�8:�2T�A��$h ��A�D$h�D$Z�V��I;|$X�*h���x
� h��H��I�D$P�h��f�H�5AL��1����L�\$�a_����"�FDL��$�H���I��H����?A�<;w�H�>H��sڃ�$���>L��$�L��H���2;�E�ƒ�	��v�� u#H��H��H���>��у�	��v� t�L��$�I�l$XA��$h����s���@������A9�$���s��I�|$PH�r�H��H)�H����s���W�B�<5��!��Hc�H�>��H����H����H����H���H���H���L�wA��H�50������tL���I��I�^H9��Os��A�V�Ѓ�	��v�< t�E���#A<=t<:�'s��I��A��fDH�{�����L��L�\$h�T$��U��@��L�\$h��\���T$��#��\���L$X�L$XL��L�\$h��M��L�\$h���D$��T���#L�\$�#R��L�����L$XL�\$�������x�
��\��H��I�D$P�\��H�5�L��1�L�\$���I�|$����D$ZL�\$I�D$�PT��L�\$PH��L��L��$�L��$�L��$�L�\$���L�\$��W��H�{���L$X���H�{�-������M���A�	��;wH��H��H��H����^����	��v�� tI��H��u��q��@L��H��H���wq����у�	��v� t�8:t9��$����H���I���q���p���	��v	�� �����H��$�H��H�HH��H��$�H��u��
q��M;T$X��A��$h��I�|$@��I�D$PH�PI�T$P�(@��
�}6�E����
L��L�\$L�D$���
��I��$���H��PXL�\$���d	I�D$PL�D$�@����M	����m�D$)��(t�D$]��[��	��IM�D$`��/�4H���Hc�H�>��M���j��A�� ���A�D$h�w����t	A��$h�A��$h �}g���_*�L��L�\$���L�\$�\g��A�t$h��#�L�����L�\$�Y����=��i��A�[!��%=�I!�D$h��@��0�D$t���� �A��$h �iA�D$h�����hA��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��h���Bt���|$�7t���E����+t���� �"t���H�=t�L�\$H��$�����H��g"H��I��$p�H��$�H��pHDŽ$�+����D$+L�\$�P��@��=��(��>�(��A����%=���D$h��@��0�D$t���q�A��$h �nfA�D$h����@fA��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��(���+j���|$� j���E����j���� �j���H�=I�L�\$H��$��
��H��f"H��I��$p�H��$�H��pHDŽ$�-�����D$-L�\$�yO���I�\$XE1��H�H�L�\$H���k��L�\$����m��I�\$P�gL��A��$h�l��L�\$��B��M�D$PM;D$Xs
A�8=�Wn��D��L��L�\$P�gL���D$4L�\$P�vn���.L���(��H�5�L������#h��I�\$8D�t$hM�D$PM;D$X��A��$h��I�|$@��I�@I�D$PA�(@��
�ED�E�<%��H�
����Hc�H�>��D�t$hA��$h�M�D$PM9D$Hs
A�8
��@�|$h��[���DL���j��M�D$PA�\$hM�D$`��N���`L��D�t$h��K��I�D$P1�I;D$Xs1Ҁ8.��@��&��8�uJA��$h�H�P�I�T$PI;T$Hv
�x�
��?�DL���j��M�D$PA�\$h�_N��A�����L�|$L�t$PL�\$XI�D$8I�t$L��L�\$A��$�I�D$@H�CI�D$HHCI�D$XI�\$8I�D$PI�D$`����L�\$A��$h���A��$h�� ��BA�D$h�D$
�M��L��������?M�D$P�U���L��L�\$��L�\$����a���D$�����b��D�A��$h �PBA�D$h�D$`�L���(�L�\$����D$TL�\$H�@�@`I�D$�`L��L��L�\$�+��D$�L�\$��>�=L����t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�%>�D$��L���Z*�L��L�\$���L�\$�[a��A�D$h��&a���0t%D$h�a��H��I+D$HH�D$I;T$X��@A��$h��@I�|$@��@I�D$PH�PI�T$PD�A��
��@A��-�L@A��~�@�D$P1�A��'��?A��`�q?A��"��>A��$h��:A��t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�]@���C`��A��$h�I�D$PH�P�I�T$PI;T$H�!`���x�
�`���x�
�
`��H��I�D$P�_���*�L��L�\$�L��L�\$�W���L��L�\$�U�L�\$��=��.��t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�7=�D$��5J���x�
��H��I�D$P���`L����f���{�A��$h �tVA�D$h�D$`��I���E���������� �z����-L��L�\$��I��L�\$���[����A��$h �xYA�D$h����4A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�*Y�E��D$i��	�SI���D$��FI�����t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�N-I�t$PL��L�\$�\��L�\$����<��H�ID$PH�5��L�����L�\$�<���s�E�������EЃ�	�������s�����(�*,��[��;��Q�D$}��{�����D$>��<�
����\$1�����I�n�H��$P�(L��0�ذ��H�X H�E(���H��$@H�5��L��H���d��E��$h�9��H��$@H�5�L��H���d��E��$h��9��H��$@H�5�L��H���ad��E��$h�9��H��$@H�5��L��H���9d��E��$h�9��L�����H���*(��H��$@H�5�L��H���d��E��$h�K9��L��$@1�H��L��H�5���WX��E��$h�!9��L��L�D$L�\$�G��L�\$L�D$����H�5�
L��1�L�\$�?
��L�\$�:��L���
�����iT��L�|$L�t$PL�\$X�D$\��F��f��Q+H�1�L��L�\$���L�\$A��$h ��S��A�t$h�R+�L���<��L�\$�S���P+H���L��L�\$�I��L�\$E��$h�jS����+H���L��L�\$���L�\$A��$h ��Z��A�t$h��+�L������L�\$�mZ����+H�i�L��L�\$����L�\$E��$h�Z��A�t$h��(�L��L�\$�p��L�\$�U��H�5g
L��1�����L�\$�hU��L��L�\$���L�\$����EM�D$P��U���u*��L��L�\$���L�\$�U���K���L��L�\$�P��L�\$���	CM�D$P��a����*�L��L�\$������@L�\$A�D$h��g���D$���D��H�����H�5�L��H��1����I��$�H��H��$��M��H��["H��I��$p�H��$�H�������E��$hI��$��T6��H��$@H�5R�L��H����`��E��$h�,6��H��$@H�5�L��H���`��E��$h�6����;������H���H��Hc�H��H	�H�H���\P���y��H��$PL����"��H�����H���'��H��$�e��H�}0L�t$PL��$����D$�\I��$�H�����H��$H�����H��H�����H�����H�dZ"�H��$�I��$pH��$�H��$�H���H�����E��$hI��$��4���x�
�5�H��I�D$P�'�I��$�H�@H���}H�x�rE��$h�4��H��$H����4���(��DL��L�\$����L�\$����E��$h�*g��������2H���J+H���L��L�\$�U��L�\$A��$h ��U��A�t$h�K+�L�����L�\$�zU���I+H���L��L�\$���L�\$E��$h�,U���|$K�*�I��$�H��I��$�A�� ��I��$�H�H��I��$�A�� �qI��$�H��H�D$H�A�� I��$���@����H���L���k��E��$h�U3���
�O�I�$L�����L������BL��H�I��$��^���L�\$A��$h ��A�D$h�D$B�A��H�D$H�x H���lo��H��t*H�EH��H������F�H�H������E��H�M�8�+L���D���H��$@�8L��H�h H�پ$H�@(H�@0H��$�����L��$�H��H�D$H�H�A(�H�A HcD$P��L�A0H��H	�H��o������+��D��H�
�Hc�H�>��H�rL��H���{��I�F�I��$�H�����H��$�H��$���H��V"H��I��$p�H��$�H������E��$hI��$��1��L��� ��덍H������� @��@��mZ����:�$,I�l$PH�EI9D$X�,�}��'t<��"t7I��$�L�\$�
H��PXL�\$��u�E<_t	����+A�\$h�D$P�6Z���A��$h ��(A�D$hL��L�\$����L�\$��=��+���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�c(�D$��>��L��L�\$�T$����T$L�\$����X���L$hA�\$h����0t���+���LY����*�‰�L��L�\$����L�\$�Y��A�t$h�"�L��L�\$���L�\$��DŽ$�M���[��H��$@H�5��L��H���{Z��E��$h��/��L�\$�S���H;�$ L�\$���L�\$�6���I�|$`L�\$H��$ �A����@���|$
����H�{�4�����s��Z+H���L��L�\$�G���L�\$A��$h ��T��A�t$h�[+�L�����L�\$�T���Y+H���L��L�\$���L�\$E��$h�ZT���`L����Y��M�D$PA�\$h�=��A�t$h�(�L��L�D$L�\$�y���L�D$L�\$�-Y��A�8
��U���x�
��U��H��I�D$P�U��L��������/RM�D$P�EU���"+�L�������T����+�L��L�\$����L�\$�H��L��L�\$�	��L�\$���t-��@t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��:�A��$h �NNA�D$h�D$~��;��H=���;�����;���D$��\���D$3�;��L��L�\$���L�\$����\��D�D$hA�t$hA��@��0t	E��������\��D�(�L�\$�d���D$UL�\$H�@�@/I�D$�&;����*��L��L�\$����L�\$�/S��A�t$h�;+�L������WT���E������� ���A���Q\���/L��L�\$��:���(������D$UL�\$H�@�@/I�D$�:��L��L�\$���L�\$����9E��$h�]��L��L�\$�k��L�\$����\��A�t$h���ƀ�y���A��$h ��9A�D$h���%]���\���*�L��L�\$���L�\$�^��I�L$PD�L$P�
I��$��y�H�L$H��PXD�L$P���uX��H�L$�A�<_�dX�����[X����X��L��������/A��$hI�D$P�X��A�D$h0u��	��wH���Hc����;RA��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�vQ�A��$h ��DA�D$h�?L��I��$L�\$��D��U��L�\$�D$?��4���� �v�����fDA�t$h��+�L��L�\$�d���L�\$�D��H�>	H���E��A��$h�I�T$PH�J�I�L$PI;L$Hv
�z�
��;��u�|$h��;�A��$h �e<A�D$h�D$:�-8��L��L�\$�8��L�\$���bD��A�D$h��D����u��|$ht��H�=p�L�\$H��$����H��N"H��I��$p�H��$�H��pHDŽ$�:���L�\$�F����A�t$h��%=t��Au@��0��;�|$h��;�A��$h ��
A�D$h�D$E�B7��A�t$h��+�L��L�\$����L�\$�`M��L�\$���	2��L��L�D$PL�\$L�T$���L�T$L�\$��L�D$P��0��1�H�52�L��L�\$����L�\$I��$��*���c*���A��$h ������E'�L��L�\$�=���L�\$�g���A�t$h��(��L��L�\$����L�\$�E���@L���3��L������D$8L�\$���`E��L��L�D$L�\$�5��L�\$L�D$����D��M�D$`L���L�\$��6���@L���Q3���D$6L�\$�E���L��L�\$���L�\$��]��:A�l$l�A��$h ��8A�D$hL��L�\$�a���D$�L�\$��=�s5����t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�c;�D$��95��I�\$PL�\$�
I��$��{�H��PXL�\$��u�C�<_t	���hD���EЃ�	��7A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��7H��$PL��L�\$�=����|$6L�\$�	!��H�5!�L��1�L�\$����L�\$I�$H�!�A��$h �ZD��A�t$h��(�L��L�\$����L�\$�4D����L�w��	��v	�� ����E1������+��L��L�\$���L�\$�W��I�@��
I�D$P1��������A�� ���BA�D$hL��L�\$���L�\$��=�?B���t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�tD����A��$h�I�D$PH�P�I�T$PI;T$H��K���x�
��K���x�
��K��H��I�D$P�<3��@L��L�\$�T$����T$L�\$��=�6A����BA��$h�I�L$PH�q�I�t$PI;t$Hv
�y�
�2A�L$hA�\$h����0t���CB�D$O��A�|E���ށ����hE����u����>�D$��KE���+�L��L�\$�&��@L�\$A�D$h�^L���D$��N2��L��L�\$�Y��L�\$����K��A�t$h���ƀ�����A��$h ��BA�D$h���'L���K���L��L�\$���L�\$���
?E��$h�I����+H�1�L��L�\$��L�\$E��$h�@����+�L��L�\$�=�L�\$E��$h�?��L��L�\$�T$�y���T$L�\$���qC���L$hA�\$h����0t��uK���C��f.��
*�‰�L��L�\$���L�\$��C���H������� @��@��}C���"H�=��L�\$H��$���I��$pH��H��$�H��G"H�0��A�\$hL�\$�D$N�YC���D$��0���E��������� �����+L��L�\$�w0��L�\$�������A��$h ��;A�D$h����9�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
��;�EЃ�	�V�+L��L�\$�2���L�\$�D$�Z3��L��L�\$����L�\$���vM�D$P�i:��H���L���è��H����6��L��賨��H�����A�D$h�M�D$P��N��I�D$XI9�sA��у῀�>��N����=�$A�=L��L�\$P�,���D$3L�\$P��N���D$/�,/����+��L��L�\$D�D$���L�\$D�D$�P���D$/�.��A�t$h��+�L��L�\$��L�\$�+Q���A��$h ��N���6)���L��L�\$P�[�L�\$P�N��������A��$h ��N���=)���L��L�\$P��L�\$P�eN��L��L�\$�!��L�\$��=������A��$h�I�T$PH�J�I�L$PI;L$Hv
�z�
����u�|$h���D$���-��E��$h�A�� �A�D$h�D$L�D���D$^��C���D${��C���D$��-��I��$�L�D$�
��H��PX��uL�D$A�<_t	����R��L�\$XL��L�|$D�t$L�t$PL�\$�,.��L�\$D�L$��K����+H���L��L�\$��L�\$E��$h�yC���A��$h �M���:)���L��L�\$P��L�\$P��L����+�L��L�\$�p�L�\$E��$h�����c+�L��L�\$�F�L�\$�0���I�$H���A��$h u*A�D$h�D$F�W,���z�
�C���H��I�T$P�5���A�t$h�k*�L�����L�\$븁�u�|$hu'�D$��,���P���v�� u
�D$���+���
H�=*�L�\$H��$���H��B"H��I��$p�H��$�H��pHDŽ$������D$�L�\$�+���OH���L���X��z2��H�P0H���������H�@0������!0��H�@0�3��H�P0H���m3���l3��A��$�I��$�L�\$P���L�\$PH��H���A�l$h@�ŀ���pA��$h �PA�t$h@��t	A��$h�Cf=t0��
uf;Ct�A��$h uYA�D$h�C�D$�.��A�D$lA9D$p��A��$h udA�D$xuOA��$�t7�� ������D$�C*���+)�L��L�\$���L�\$��D$�*���D$�*��I�t$x�")L��L�\$H������A�D$xL�\$uKA��$h �j���I��$��#)H���L����L�\$�D���A�D$p�����D$�)���D$�)����)��L��L�\$�*�L�\$������A��$h ��A�D$hIc�$�I��$�I�,$L�\$��Ic�$�I��$�H�E��H���F�L�\$I��$��C�D$�r,��A�\$h��H���x�
�AJ��H��I�D$P�3J���)���L��L�\$�q�L�\$�]���I�$A�� H�^�u?A�D$h�D$F�(���
I;T$X��K���x
��K��H���
I�D$P��K��A�t$h��+�L��L�\$��L�\$란x�
�L��H���D$^I�D$P�(��I������A��$h uTA�D$hA�T$pI�$�D$Q�A�D$lA�D$p��'��I�$H�-�A��$h u0A�D$h�D$F�'���+�L��L�\$�L�L�\$뎹+�L��L�\$�.�L�\$벀x�
�Y��H��I�D$P�K��A��$hA���mF��H��L�������������H��L���H��H��$PH��L��HDŽ$P��������H��$PH�������H�(?���H���y�H���Y��H���R���I�F��I���M�H�m M��tL��A�L��L������I��H��$@�X�
L��H��L�L$�����Aou�L�L$fo�$�H�h(L�H H�@0p8xHH��$���A�t$h�"�L�����L�\$��H��$@I�U�1�L��H��H��$�觮��I��$�H�����H��$�{�H��<"H��I��$p�H��$�H�s8��E��$hI��$����I�F�騰��I�F��ĩ��A�t$h���L���4�闫��H�{�
���L��L�\$h�T$X�L$�:&���L$�T$XL�\$h���H��$@�(�FL��H��諍��H�h H���{�H��$@�0�:L��H��肍��H��H�h H�D$H�A(�S��H�U H�������H������I�u�H��L��� ����~��A�t$h���L���T�齅��H�����A�t$h�E�L���0�E��$h�2���I��$�H�����H�R;"�I��$pH��$�H��$�H��xH��H��$��v�L��I��$����E���H�H0H�H �N��H�u �T$L����*���=�A�t$h�G�L�����y��HDŽ$�y��HDŽ$���H��$�H��$��H����H������H��$�����H���K��H���L��L������E��$h�/����H���L���#�E��$h�m���H���L����E��$h�*��
I;T$X��G���x
��G��H���
I�D$P�G��E��$h���G��H��8�+L��L��$��8���H��8L��L��$�H�@(�H�@0L�H H��$����H�T$PH��L��L��$�H�@(H��H�@0L�@ 萠��H�C0��[��H��(�
L��貊��H�L$PI�v�L��H��H�H H���W���H�C0�[��IcЁ�H��H��H	�H��,Y��IcЁ�H��H��H	�H���U��H�H0H�Q(�KQ��H�PH��L���|������I��$�1�1�趵���(�?L��H�XH��$@H���H�����H�h ����H�H0H�Q(�G2���H�=~��5�I��$pH��H��$�H�V8"H�0�~�����H�H0H�Q(�6E��H�U0H�B(�G�����A�U�I�EL��H��$PA�M�$TH�����$PH��$X�1�����U��A�U�A�u�L��A�M�A�E���$PH��$P��$XH�<���$T��$\�����X���(�L�\$���L$L�\$�D$T�@�H�XI�D$�@ ���(�L�\$�D��L$L�\$�D$W�@@�H�XI�D$� ��I�v�H���I?��I�v�H���<?���<?��H�ٺ �lL���X���H��$�<��I�>���H�5��L��H��1�����u<��H�ٺ �lL������H���X<���(�L�\$���L$L�\$A��$h �@�H�XI�D$����A�D$h�D$R�0���(�L�\$�4��L$L�\$�D$U�@�H�XI�D$�����(�L�\$���L$L�\$�D$V�@
@�H�XI�D$����ݾ(�L�\$���L$L�\$�D$S�@�H�hI�D$�z���(�L�\$�~��L$L�\$�D$X�@
@�H�XI�D$�>��H�5��L��L�\$���L�\$�����(�L�\$�$��L$L�\$�D$S�@�H�XI�D$�����(�L�\$����L$L�\$�D$Y�@@�H�XI�D$���A�t$h��'��L��L�\$�D��L�\$�@���H�����A�t$h�!�L�����E��$h�;����6H���L���)���v���IcE؁�H��H	�H�E酒��H��鮕��H��锖��I�F�靕��H�H������u�]H�B H��tH��H�H������t�I��$pI��$��p}��I�I��$XH���m���H��t&L��违��H���X���H�R0H�z0u�H�R H��u��H���:���M�D$`�D$)����
I;T$X�����x
����H��M�D$`1�I�D$P�D$
���A�t$h�<�L������E��$h����H���L��L���i�E��$h��
��fo�$PE��$h}fo�$`U�
���x�
����H��I�D$P���I�$H���A��$h u&A�D$h�D$F���L�|$L�t$PL�\$X�8��A�t$h�|*�L�����L�\$뼍@����7���� ��6�����������A������H��$�H�D$M)�H����L��H��L��$�L��$��{��H�D$L��$�L��$�H�H��$��� �)H�xM���*H�D$L�@L��K�M��~�8-u�_H��H9�u�H�x"H��$�H��$�H��$�L��M��M��L��$�M��H��$�L��L��H�(H���s����uB�|%t@H��$�H�
�"H��$�H9�u�M��H��$�I��L��$�H��$���H��$�M��I��H��$�M��H��$�L��$�H�@M)�H��tL��L��L���I��M����L��L��L��$��(��I� I�~L��$�tI�~M����H��$�I�VI�D$`H��$�I�D$PH��$�H�@I� tI�VH��$�L��H�1��M��tvM)�L��L�����I�~I� tI�~M���)H�0"I��$pH��$��L��$�H���H�D$H��$��%��H����6��I���S6��I��$�L��L��L)��.��I���M��t=H�D$H�xL��L��L��$�����L��$�H�D$H�H��$��� �����H�D$L�@���I��$�L��L��L��$����L��$�H�D$�L��I��H��$�1�L��I�����I��$�L��L�����I���s���L��L���N���c���L��L���>������L��$�L��$�H��$�H�>�H�������H��H���v����E<;�j����ڍP�����2���� ��2���H�=��L�\$H��$��,��H�M."H��I��$p�H��$�H��pHDŽ$�&�u��A�\$hL�\$�D$&�$2��L��$���$�uhL��L������H�H0H�Q(�e��H���e��H�r0H�H������+��d��H�v H�H������-��d��H�V H����d���d��H���d��L��$�L��1��[���A�t$h��*�L��L�\$���L�\$�P���x�
����H���D$�I�D$P�4��L��L�\$�?���L�\$��u&E��$h�;���x�
��;��H��I�D$P��;��A��$h��;����I�\$PL�\$�
I��$��{�H��PXL�\$���>�C�<_�2���)���q;���D;��L��L�\$蠫��L�\$����E��$hM�D$P�=��L������D$5L�\$�N���z�
��=��H��I�T$P�=��A�t$h�y(�L������L�\$�;���
I;T$X��:���x
��:��H���
I�D$P�:��A��$h��b=����I�l$PL�\$�
I��$��}�H��PXL�\$���*�E�<_��������<��A��$h�=���$L��L�\$�����_L������L�\$�
;���
I;D$X��<��A�x
��<��I�@�
I�D$P�q<��H��I���H��sI��L9�vA��PӀ�2v��߃�A<v�L��H��L��H)��&,��H��H������I�\$`H��M�t$PH�pH� tH�pL���-��H��1��+��I�l$X�1����H�5��L��1����L�\$�����L��L�\$蕰��L�\$���\9������"H�=�L�\$H��$��$��I��$pH��H��$�H�-*"H�0�m��A�\$hL�\$�D$P�.���y�
��-��H��I�L$P�-��I�$H���A��$h u?A�D$h�D$F����
I;t$X�M-���y
�C-��H���
I�L$P�0-��A�t$h��*�L���-��L�\$�L�hH����@M��<"u0���H��L��H�Z�L�xH�����@<"��<\u�H��I�G��I�$H�&�A��$h u?A�D$h�D$F����I�$H���A��$h u5A�D$h�D$����A�t$h��*�L��L�\$�Y��L�\$�A�t$h��*�L��L�\$�6��L�\$��s�����$�H�Z�I�o��H��$�H��������&���M���?���H�H0H�H �A���A�t$h�Z
�L����������I�u�H�Y�L���i��l���A�t$h�V
��L�����E��$h������'��L��L�\$D�L$�v��L�\$D�L$�,���x�
��,��H��I�D$P�,��I�$H�%�A��$h uA�D$h�D$F�i��A�t$h��'�L���
��L�\$��I�L$PI��$�L��$��
D��$��y�H�L$XH��PXL��$���uH�L$X�A�<_t��D��$�����L�\$X�؃�L��A��H�CPH��H�p��#�����r��H��H�HCP菧��������h��H�CPI��L�\$X��h�H�P�H�SPH;SHv
�x�
�2�S1�I�T$PH�D$ID$HH)�Hc�H)¸����H�T$H9��3�eL��L�\$h�L$X�,��I�D$X�(�I�D$P�-��H�L$L�\$hADŽ$�A��$��H�H�L$I�D$�H�L$X�P�H I�L$8@�h!H�HI�D$PI�D$`�D$PA��$��۸IÉD$�"��L�CPH����
A�x�L��$�H��PX�������L��$�A�@�<_��������{������D��L�\$XI�܉��#���x�
����H���S1�I�D$P���I��L�\$X�S1����H�5�L��L�\$h�L$X���L�\$h�L$X����x�
����H���D$�I�D$P��
���x�
����H��I�D$P���A�x�
�k���I��M�D$P�]����D$
I;T$X��"���x
��"��H���D$
I�D$P�"��D��L�|$L�t$PL�\$X��tf�DL��L�\$�*��I�D$XL�\$I�D$P���x�
��"��H���D$<I�D$P�
���x�
����H���D$�I�D$P����I�D$XI�D$P颿��M�D$`�D$]��I��$�H��HDŽ$�E��H��#"�I��$pH��$�H��$�H��xH��H��$�����L��I��$��
���2r��H��$@� �,L��H����t���\~�����S�\$D��H�D$�.A��$hu/I�|$@w'I�@I�D$PA���
tJ9�t8��
tuM�D$PM;D$Xr�L��L�\$X���L�\$X��utM�D$P뼃��T됋\$��F���A�ً\$I;D$XsA�x
tA��
u��!���I�@I�D$PA��
t�H�5b�L��L�\$���R���L�\$���A�ً\$A��u�뷻S����L��L�\$X� �
���H�D$L�\$XA���D$P����ȿ��L��L�\$X� ���H�D$L�\$XA���D$P雿��A�
I;T$Xs�x
t�D$P1�闿��H��A�
I�D$P��L��L�\$P���L�\$P������A���x�
�����H��I�D$P鋿��A�t$h��)�L��L�\$���L�\$�D�����*�L��L�\$���L�\$鏽��I;D$X�����A�x
�����I�@L�|$L�t$PL�\$XI�D$P郼����*� L��L�\$���L�\$�� ��H�]�L��L���=��x��H�-�L��L���&���x��H�]H����H�;H�5������tE��$h�k���E��$h�]���I�D$`I�T$HH�H�HcCH�DH9�v=��փ�	��v@�� u`H��H9�v!��փ�	��v�@�� t�E��$h����H9�uE��$h�E���E��$h����E��$h����E��$h���HDŽ$�=���H�8�L������!�H�@0�Y�H�P0H���0��/��-H�=��H��$��f��I��$pH��H��$�H�o"H�0����z��A�t$h�-��L������E��$h���M�H�m M��tL��A�L��L���@�I��H��$@�X�	L��H��L�L$�kp���Aou�L�L$fo=H�H�h(L�H H�@0p8xHH��$�$��H�H0H�H �e��E��$h�p���I�F����H�5E�L��1�����S��H�xH�w
��H�xP�l
��H�xX�a
���h
��E��$h����I����E��$h���I��	��H�u �T$L����
���0�I��$ �D����DH��H�����H�U�€tH��H�UH�H���ouHc�%�H��sH	‹EH��CH�E H�C �D$�C(H�E H������I��$�1�1�胚���T$L��H�XH��H��$@�H�D$P�-
��H�ٺ0L��D�n��L�D$PH��L�@ �D$�E(�{���BH���R��fo�$@mH�EHc�$@%�H��H	�H�E���H�����H��$@� �,L��H���?n�����H�VL���n���H������H�VL���Z���H�����H��$@� �_L��H��L�t$PL��$���m��H������AH�����fo�$@E�<���I��$�1�1��@����(�AL��H�XH��$@�H��H�D$�m��L�D$H��L�@ ���H��$@� �,L��H���Vm���_��H��$@� �,L��H���4m���f������H��$�H������H��$@�8�9L��H���l��H��H�D$H�i(H��$�H�A H�A0H��H�L$L��$P�v���H�}H��$PH�5	��H��$XH�$���HDŽ$`H��$hH��$p�#��H��$`H�L$H��tH�@0H�A0�2��A�t$h���L���}��E��$h�J��A�t$h����L���X��E��$h�fH�������@���|$���L��L�\$h�L$�M���L$L�\$h�L$X�}��HDŽ$�������@��E��$h�
���E��$h��A��$h �K{��A�t$h���L������4{��H�HH9�v
�x:�����L��L�\$詚���L�\$A��$h ��A�D$h�D$_���A��$h���U�I�L$HI�D$P������ ��A��$h�H�P�I�T$PH9�s
�x�
����H�5��L��1�L�\$�w��L�\$I�$�D$5H�!�"��A��$huO��I�\$PL�\$�
I��$��{�H��PXL�\$����(���C�<_�|(�����s(������1���H�5��L��1�L�\$����L�\$�n����x�
�G���H��I�D$P�9����x�
��$��H���D$+I�D$P�p���x�
�l��H��I�D$P�^��I�$H�/�A��$h u?A�D$h�D$F�+���
I;T$X�T"���x
�J"��H���
I�D$P�7"��A�t$h��+�L��L�\$���L�\$란x�
�,��H���D$|I�D$P���I;T$Xs�x
t@A�t$h�
�ƀ�߮��A��$h uHA�D$h�n#��E��$h����#��A�t$hH���
I�D$P�ƀ������
����
��*�L��L�\$���L�\$A�D$h����D$��
��I;T$X����A�x
����I�@I�D$P�s���D$>����I�ۉ�A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
������%��Ic�$�I��$�H��$PL��$(H��L�\$�A��$��
�p�I��$�Hc�H�x�����$(L�\$��A��H=���?��H��L��L�\$D�D$���H�ٺ(L��6I�,$�g��HcT$I�|$`I�t$PH�P I��$�H�EH)��g����D$?L�\$I��$������x�
����H��I�D$P����1H�=��L�\$H��$��w���M��$�H��I��$�H��$�1�L���L��H��H��H�p����I��$pH��H��$�H�c"H�0苾��E1�L�\$���
I;T$XsA�x
t5A��$h�<������A�t$h�"�L��蠾��L�\$�&���I�@�
I�D$P뻀x�
��"��H���D$!I�D$P���H�ٺ �lL���!f��H��$������H��L���`���E��$h�J���L��L�\$�3���L�\$�����L��L�\$����L�\$�7����x�
�c��H��I�D$P�U���D$������D$�����A�t$h��+�L��覽��L�\$�I���x�
�l��H��I�D$P�^��I;T$Xs
�x
�sM�D$`L��
L�\$����@L������D$6L�\$����P����&���� ����s���z�
����H��I�T$P�����
I;t$Xs
�z
��A�D$h������H��	H������A��$h�I�D$PH�P�I�T$PI;T$H�����x�
�����x�
����H��I�D$P���A�t$h�m+�L��L�\$�v���L�\$�u��H���
I�T$P�d���I�$H���A��$h u9A�D$h�D$��t���H�P�1�L��L�\$良��L������L�\$�\����g+�L��L�\$���L�\$멸���?���L��L�\$���舻��1Ƀ�L��H��$(H��$(H���x���L�\$�����t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
���A��$h ��A�D$h�D$[����|$ L�|$L�t$PL�\$X���D$D�l����>L��L�\$�"����D$>L�\$�X���H��M�D$`L��
I�D$PL�\$�����@L������D$6L�\$�:	��A�t$h��+�L��L�\$襺��L�\$�>����x�
����H���D$�I�D$P�����x�
����H��I�D$P��A�t$h��'�L��L�\$�G���L�\$�]����L$�Q�����A��$h�I�D$PI9D$H�~����8
�u����x�
�k���H���D$\I�D$P�3���H��$@I�v�I�U�L��H�����I��$�H�����H��$H��葵��H��H�����H������H��"�I��$pH��$�H��$�H�s@H��H��$�����H�s8H��I��$p�H��$����E��$hI��$��X�H�ٺ �lL����`��H����w��I��$�1�1��r����L���A�t$h�\�L���������H��L�����H���a����=H���L�����E��$h陇��A�t$h�@��L��蘸��鴇���>H�D�L��请��E��$h�{���H�ٺ �lL���,`��H��$�d���A�t$h���L���8����N�����H��L���O���E��$h��|��A�� ��I��$�H��I��$�A�� ��I��$�H�I��$�A�� ��|����H�k�L�����E��$h�m|���-H�\�L���Ƕ��E��$h�]����,H�'�L��襶��E��$h�#���A�t$h�p�L���P�����������L���<���E��$h�*�����H�ߕL���J���E��$h�"�����H���L���(���E��$h���H����w��I���v��H���"���I�F���I�ۉ�I;D$X�*���A�x
����I�@I�D$P����A�t$h�1�L��艶��E��$h�t���H�ٺ �lL���6^��H��$�9���H��$@� �,L��H���^���Q��E��$h�Q��0H�=��H��$��@���I��$pH��H��$�H�I"H�0艵���@������	���u����� �l���L��釡��I;T$XrzI��$L�|$�D$
L�t$PL�\$X�z������H�ٺ �lL���M]��H��$��L��$�4p��H��$�'p��L��L����I���o���x
u�H��I�D$P���A�t$h��*�L��L�\$����L�\$����x�
�?��H��I�D$P�1����L�\$�A���A�t$h�V'�L��L�\$�ƴ��L�\$���P����f����� �]����H�=�L�\$H��$�話��H��
"H��I��$p�H��$�H��pHDŽ$����A�\$hL�\$�D$��I����*�L��L�\$�$���L�\$�k����P�������� ����H�=|�L�\$H��$�����H�(
"H��I��$p�H��$�H��pHDŽ$�*�P���A�\$hL�\$�D$*����y�
�K��H��I�L$P�=���D$����E��$h�
���
I;t$X�����y
����H���
I�L$P������ulE��tg�H�='�L�\$H��$��3���H�T	"H��I��$p�H��$�H��pHDŽ$�%�|����D$%L�\$���D$%���D$%��A�x�
�n��I�@�I�D$P�`��I�$H���A��$h u*A�D$h�D$F��y�
�ľ��H��I�L$P鶾��A�t$h��)�L��L�\$�6���L�\$�I�$H���A��$h u8A�D$h�D$F�J�A�t$h��*�L��L�\$���L�\$�N���A�t$h��*�L��L�\$���L�\$��L$hA�\$h����0�!����������#H�=o�L�\$H��$�譳��I��$pH��H��$�H��"H�0���A�\$hL�\$�D$O�M���H������� @��@�������A�
I;L$X�����x
�y��H��A�
I�D$P�e���x�
�̦��H��I�D$P龦��A�t$h�+�L��L�\$���L�\$�b����x�
� 
��H���D$-I�D$P���I;T$Xs
�x
��A�t$h�
�ƀ�*���A��$h umA�D$h�	��I�$A�� H�|���A�D$h�D$F�s��D$
I;T$X�d���x
�Z��H���D$
I�D$P�D���
�+�L��L�\$�ܯ��L�\$A�D$h�����x�
�����H��I�D$P�t���A�t$hH���
I�D$P�ƀ�P����
鷼��A�t$h��*�L��L�\$�p���L�\$�)���I�PH9�vA�x:�l���A��$h ��A�D$hM;D$XswA��$hulI�|$@wdI�@I�D$PA�8
t<L��L�\$����D$9L�\$�9�I�PH9���
��A�x>�~
��鿾��I;D$Xs�A�x
u�I�@I�D$P�L��L�\$����L�\$��u�M�D$P�|�����(���L��L�\$肮��M�D$PL�\$�5����3)� ��L��L�\$P�Z���L�\$P�
��A�t$h��+�L��L�\$�4���L�\$錱��L�\$XL��L�|$L�t$PL�\$�.���L�\$��.�A��$HuVA�D$h�t
��$�u@�0u<A�|$l��I�D$PI�L$XH9�vCH���P���
t6��#t1�r���v� t��l�A��$h urA�D$h�D$�����$H�=�L�\$H��$�華��I��$pH��H��$�H��"H�0�ج��L�\$�������D$�e�A�t$h�&+�L��L�\$����L�\$�h���A�t$hL�|$L�t$PL�\$X��%�������A��$h ��A�D$hL��L�\$�Ѓ��L�\$��=t^��~tL��>t:��t(A��$h�I�D$PH�P�I�T$PI;T$Hv
�x�
�]�D$=���D$G���D$���L���`���L�\$��=t6��t$A��$h�I�D$PH�P�I�T$PI;T$Hv�x�
t8�D$��H��D$��;��?*��L��L�\$�߫��L�\$�����x�
u�H���D$�I�D$P��H�5��L��1��ؖ���-U��H��L��L���A���qX��H���hS��L�\$XL��1�L�|$H�5>�L�t$PL�\$�߰��L�\$�B��I�ۉ�����
I;D$XsA�x
��I�D$PI�L$HA��$h�H�p�I�t$PH9�s
�x�
�����I�$L�|$L�t$PL�\$XH�.�A��$h t!A�t$h�@+�L��L�\$��L�\$A�D$h�D$.�����u�|$�����D$-���A�t$h�+�L��L�\$�p���L�\$�l���A�t$h�E)�L��L�\$�J���L�\$�/
��1�H��L��L�\$�n�L�\$����	��H���������������H��H��-�����	��釭����t$A��$h�I�D$PH�P�I�T$PI;T$Hv�x�
t�������D$���x�
u�H��I�D$P��I���
M�D$P�Z���I�$H�*�A��$h u*A�D$h�D$F���x�
�h���H��I�D$P�Z���A�t$h��)�L��L�\$�-���L�\$볁�u�|$�P����D$+�N�A�t$h��*�L��L�\$���L�\$黖��I�$H�+�A��$h uA�D$h�D$F����*�L��L�\$蜨��L�\$��H�{�T$�g�����_����K�镋����閌���x�
�����H��I�D$P�r���A�t$h�{+��L��L�\$�6���L�\$�O�(�L�\$�x���L�\$H�@�@"I�D$�	�
I;T$X�!��x
��H���
I�D$P���"H�=A�L�\$H����H��$�H��I��$pH��$�H��H���!�H��$�H�0����L�\$�g���I��$��;L�\$�
L�T$H��PXL�T$L�\$��u�<_t	���3��|$hL������L�T$L��M��H��H���
�������H�H�H;]Xs%H����;�
H��PX��u��<_tƒ�w�L�T$M��[H�=i�L�\$I��L�T$�ߨ��L�T$H���H��$�H��$�L)�L��Hc�H��H�H��H��$��C���I��$pH��H��$�H��!H�0���L�\$�:���M�����I��H��H��L�\$�#���<��L�\$�"���x�
�����H���D$=I�D$P�:�f���USH��H��H�GPH;GX���h��H�@��H�PH�SP�(@��
�0�à��H�������i�ƒ�	Ј�i@��#��@�����H�CPH�PH9SXv
�8��,@H�P���h�H�SPH;SHw[H�C8H�@H����ϥ��H��H�� ���H�� ����Hǃ HǃXHǃPH��[]�@�x�
u��x�
u�H��H�CP�f�H���(z������H�CP����H�CPH;CX�J����8!�A�����h@�5���DH�CP�'����H;SXs�x
uH��H�CP@�{���H�������i�ƒ�	Ј�iH�CP����fD�x��������H���H�CPH��H�CPH�CHH�C`��������H�������i�ƒ�	Ј�i���ff.���H��p�@��H�?H��t�/����1��D��SH��H�?H��t�۝��H��[����f���H�H��t,SH��H���x����C��t��wH�{[钤��f�[�fD�����W������H�]�!SH��H��1�1�H�0�B���H��tLH��t�uH���H��uH��H��[黡��H������H�5�H��H��!H�81��u���D1�[�ff.����SH��H��耧��H��tH��H��[�^���fD1�[�@��UH�$�!� SH��腧��H��H�h �@uH�h 菞��H��H�EH����H��H��[]�fDU��H�5��!SH���<���H�@��uH��H��[]�f.�H���Ȟ����u�H�m�!H�5.�H�81�茜��ff.����H��1����H�������H�H��H�Ѓ�����SH��1��a���H��H���֝��H��[Ð��H��1��A���H��H��酤��D��SH��1��!���1�H�����@��H���̡��H��[����H��1���H�������H�H��H�Ѓ�����H��1����H��蹣��H��H��靣��ff.�f���H��1����H��詤����H�H��H�Ѓ�����AT�US�^���H��H���#���H��t=H���U���H��H���ʞ��H��I��蟟��H���ם��[L��H��H��]A\�E���D[�]A\�fD��S���H��H��趛��H��tH��踣��H�H�D[�ff.�@��S����H��H���v���H��tH��踝��H�H�D[�ff.�@��H����n���H��H���"���f���S��Q���H��H������H��tH���H���H�@H�x	H�D[�f�H��[駙�����H��1������H���$����H���f.���S1�����H��H���ٙ��H��[�@�����AWAVAUI��ATUH��1�S��H��H��(dH�%(H�D$1����H�5e�!L��I���ʝ������H�}I��H�|$���H�EH�D$����L�m�9���H��t@��uH�H����H���dH�}�!H�0�-������H�\$A�FI�^L�5��H�|$��H�|$藘��H�|$�M���H�D$L�����H�l$L�}H�E tL�}E1�I��tL��A�����^���D�H�H��M��H��L��L��膝���H�L$dH3%(��H��([]A\A]A^A_�fDH�D$A����@L�������H�=�H��贗��H��H�D$�G����:���f�H�|$I�^�›��H�D$A�FI�FI�FL�5������D蓙���0���fDA�FI�^L�5%��������������A��=����
���f.���S�H�� H�|$dH�%(H�D$1��H���H��H���
���H��tWH�����H���g���H9�t"H���!H�5��H�81����f.�H���!H�5äH�81��Ȗ�������H��H������H�t$H�����H�=���H���u���H�T$H�T$H�T$H�L$dH3%(uH�� [�����ff.���ATUSH��H��H�|$H�t$�2���H���ژ��L�d$1�H��L���H�����1�H��H��處��H��Hc��ޘ��L��H���c���H��1�����H��H�D[]A\�ff.���H��H����t軠��1�H�����.���fD裗��1�H��������fD��ATUH��H��SH���H�T$@H�L$HL�D$PL�L$X��t:)D$`)L$p)�$�)�$�)�$�)�$�)�$�)�$�dH�%(H�D$(1�H��$H�t$�D$H�D$H�D$0�D$0H�D$ 踟��H���!H�D$H��u#L�%��
L���S���H��H�q�!H��t�H���,���H�L$�H��H��藙��H���ߟ��H�D$(dH3%(uH���[]A\��.���ff.���H���!SH�=z�H�0襟���H�=m�H�����H��H�5a�H���Ϟ��H��H�5�����P���H�߹����H�q���H�5<��E���1�H��H�����H�5/��-���1�H��H�����H�5�����1�H��H�i���H�5����1�H��H����H�5�����1�H��H�����H�5��͚��1�H��H�1���H�5�x赚��1�H��H���H�5¡蝚��1�H��H�����H�5�y腚��1�H��H�Y���H�5���m���H�߹H����H�5���R���1�H��H����H�5z��:���H�߹H�����H�5l�����1�H��H�S���H�5b�����H�߹H�X���H�5N�����H�߹H�=���H�53�����H��H�����H�5&��֙��H�ߺH�5!�����H�ߺH�5����H�ߺ	H�5��ڜ��H�ߺH�5��Ɯ��H�ߺ!H�5��貜��H�ߺAH�5�螜��H�ߺ�H�5�芜��H�ߺH�5ܠ�v���H�ߺH�5Ӡ�b���H�ߺH�5Ƞ�N���H�ߺH�5���:���H�ߺH�5���&���H�ߺ H�5������H�ߺH�5�����H�ߺ�H�5�����H�ߺaH�5���֛��H�ߺH�5���›��H�ߺH�5��讛��H��趑��H��[�m���ff.�f���H��賗���^����H�=Q��M���H���!�H�=>�H��2���H�S�!�H�=+�H�����H��!�H�=�H����H�%�!H�H��鉚����H��H���on_BEGINon_ENDon_aliason_alias_erroron_arefon_aref_fieldon_arg_ambiguouson_arg_parenon_args_addon_args_add_blockon_args_add_staron_args_forwardon_args_newon_arrayon_aryptnon_assignon_assign_erroron_assoc_newon_assoc_splaton_assoclist_from_argson_bare_assoc_hashon_beginon_binaryon_block_varon_blockargon_bodystmton_brace_blockon_breakon_callon_caseon_classon_class_name_erroron_commandon_command_callon_const_path_fieldon_const_path_refon_const_refon_defon_definedon_defson_do_blockon_dot2on_dot3on_dyna_symbolon_elseon_elsifon_ensureon_excessed_commaon_fcallon_fieldon_fndptnon_foron_hashon_heredoc_dedenton_hshptnon_ifon_if_modon_ifopon_inon_kwrest_paramon_lambdaon_magic_commenton_massignon_method_add_argon_method_add_blockon_mlhs_addon_mlhs_add_poston_mlhs_add_staron_mlhs_newon_mlhs_parenon_moduleon_mrhs_addon_mrhs_add_staron_mrhs_newon_mrhs_new_from_argson_nexton_nokw_paramon_opassignon_operator_ambiguouson_param_erroron_paramson_parenon_parse_erroron_programon_qsymbols_addon_qsymbols_newon_qwords_addon_qwords_newon_redoon_regexp_addon_regexp_literalon_regexp_newon_rescueon_rescue_modon_rest_paramon_retryon_returnon_return0on_sclasson_stmts_addon_stmts_newon_string_addon_string_concaton_string_contenton_string_dvaron_string_embexpron_string_literalon_superon_symbolon_symbol_literalon_symbols_addon_symbols_newon_top_const_fieldon_top_const_refon_unaryon_undefon_unlesson_unless_modon_untilon_until_modon_var_aliason_var_fieldon_var_refon_vcallon_void_stmton_whenon_whileon_while_modon_word_addon_word_newon_words_addon_words_newon_xstring_addon_xstring_literalon_xstring_newon_yieldon_yield0on_zsuperPARSER_EVENT_TABLESCANNER_EVENT_TABLEon_backrefon_backtickon_commaon_conston_cvaron_embexpr_begon_embexpr_endon_embvaron_floaton_gvaron_identon_imaginaryon_inton_ivaron_kwon_lbraceon_lbracketon_lparenon_nlon_opon_periodon_rbraceon_rbracketon_rparenon_semicolonon_symbegon_tstring_begon_tstring_contenton_tstring_endon_words_begon_qwords_begon_qsymbols_begon_symbols_begon_words_sepon_rationalon_regexp_begon_regexp_endon_labelon_label_endon_tlambdaon_tlambegon_ignored_nlon_commenton_embdoc_begon_embdocon_embdoc_endon_spon_heredoc_begon_heredoc_endon___end__on_CHAR[Ripper FATAL] unknown token %d�	�������������������	y��������������������������qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqQQIi!)aAY��!q�������yy���9��	����1)9A1IQYaiy���P��f��@��p��p��p��p��p��p��p��p��p��p��p��p��p��f��f��f��f��f��p��p��p��p��f��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��f��f��f��p��p��p��f��p��p��p��p��p��p��p��f��f��f��������������������L��L��L��L��L��L��L�����������������������,��,��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��$��$��4��,��$��<��,��D��D��D��,��,��4��4��4��4��L��N��N��N��N�����N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N��N�����N��N��N��N��N��N��N��D���������������0��p��c��c��c��c�����c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��c��p��c��c��c��c��c��c��c�����p��P��4����������4��4��<��4��4��4��4��4��4��4��c��c��c��c��(�����4�����(��(��\��\��\��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��4��c����� ��������������������������������������������������������������������������������������������� ������������������@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�K������
��<
�����������f�� � �@�@� �@�@�@�@� � � � � � � � � � � � � � � � � � � � � �@�@� �@� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �	�����R�������� � �M�� �������H�� ���� � ����C����� ����>�� � �@���� �9����� � ����4��������/��������*�����|���%������w��� ���@�r���@����m��� �@�@�h������@�c��� � � ��������^����������Y������ �����T�����������O�����������J��� � � � � � � � � ��� � � ���E� ��� � ��� � � � � � � � � � � � �@����;����6�@� � ���1�@�����,���~�'�@�@�@� ���@� � ����o� ����j�� ��� �e����`� � � � �	���_������Z���� � ���� �U�����K��������F��i��d��
�����@�@�@�@����<��������s ��t�"�y����������������������� ����W	���	��
��\
���
��
��a�������������F��������A����� � � � � ����2�����@�7��������@�@�@�A�������� �F���������
�� �� ��-�����n����� ��@�@�@�@������@������ �@�@� �@� �@�@���� �P��������@�@�@�@�@�@� � � � � � �_�������������������������+��+��+��+�����+��+��+��������X��X��X��X��X��X��������X��X��������������������������������������h��h��x���������������������������X����������������X��X��X���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#���#���#���#��t$��t$��t$��t$��t$��t$��t$��t$��t$��t$��t$��t$��$��4$��d#���$���%���$���%���%���%���$���%���%���%��x$���%��X$��T/��d/��t/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/���/��/�� a��0a��@a��Pa��pa��pa��pa��pa��pa��pa��pa��pa��pa��pa��pa��pa��`a���`��a��$b���b���a���b���b���b��|a���b���b���b���a���b��Ta��o��o��o��o��o��o��o��o��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m���m��`m��`m��`m��`m��`m��`m��`m��`m��`m���l��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`m��`n��pn���m��`m��@n���n��`m��`m��`m��`m��`m��`m��`m���n��`m��`m��`m���n��Pn���n��`m��0n��`m���n���x��Vt��Vt��Vt��Vt���x���x���x��Vt��Vt���x��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt���x���x��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt���x���x��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt��Vt���x���x���}��4~���}���}���}���}���}���}���}���}���}���}��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~���|��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��4~��D|��4~��4~��4~��4~��4~���|��d���Ԍ��t���Ԍ��Ԍ��Ԍ������Ԍ��Ԍ��Ԍ������Ԍ��D���H���x���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H������H���H���H���0���0���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���������������������H���H������P���ț��H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H���H�����������H���H���H���H���H���H���H���H���H�����������H���H���H���H���H���H������������n���n���|���=*��n���n���������Z���*���.���.���.��u ��* �����������4��n4���3��������ֆ����������s���)����������̉����7���M�����������q���U���Nj��p���n���`����i��,h���g��n���]g���f����������,���K��sM��|��u\���Z��nY��n����X��n���n���X���W��tV��n���n����U��R_���^���]���]��`��`���a��n����U���T���T��qS��MS��S���R��|R��;R��n���n���n���Q���P��JP���O���N���M��VL��eK��J���H��H���G���F��@F���E��n���&E��n���VD���C��+C��kB��$A��~@��P?���>��X=���<���;��n���;��h:���9��9���8��8���7���6���5��\5��������%��[�����a����������]������	��5	�����n���#���
�����n���n���n������n���Q���n���v���T�������������������p���V���<���"�����������������������l���R���8����������������h�N�4�����n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���M��c�
��`�����[��������������������H���������>���F�������\�������R���U�n�������������V�������m�������x��/H��VI���?��nK��n����F���J�����[<��A<��'<��r;��m:��P:��/:���9���Q��n���N>��q=��u<���Q���P���'���'���7��n����7��n���n���s7���6���5���4��:4���2��DO���N���P���7��M�� �����������z�����D�����c���n���n�������������n���n���n���n���n���n���n���n���n���n����(���(���'���'��
'��\&���%��%���$��$���#���"��E"���!��I!��� ��e���G���n���~�n��������e�i�?�o���`���-�����
�n����n����%��'���#��A%���!��a!��D!���$���#��j$�������������L�������#���"���#���"�����P������� ���="��"��62��2��n���n���n���n���n���n���=1��n����0��n���n����0��30��w/���.���.���-��y,���+���*��,*��*��n����)���)��n���rf���e��=e���d��#d���c��ic���y���y���x���x��Sx��w���u��at��s���q���p���o��yn��Fm���k���j������~���}��_|��n���C|��C{���z���z�����ρ������%���W���5��������n������D���Ƹ��x������n�������-���G���
�������j�������T����������d���B�������_��������������&���Д��j����1�������ݐ��D���Ţ��n���n�������p����������Ѡ��n���n���n������P���n���V������W�����������n������n���7���n�������N���n���n���R���S���s���������������գ���������A�������a�������x���S2�������������.��n�����}�����q��|��@�����n���E�������Q���a���z�������n��������
�����n������n������$�3����n���n���n���X���T��n���n���n���n���n���n���n���n������n���&��3����������������@��n���t���2���n�������n�������n���n���n�����n���n���I������������n���n���a��n�����������4��"��n����������
��n���N
��n����)��j)��))���(��V(���,���,���+���+���-���3��P3���2���D���D��HC��B��n���n���>D��n���n���n���qC��n���n���?��n���h>��n���n���n���n���n���n���n���n���n���n����A���A���A��gA���A���A��B��h���	F���E���G��n���n���SE��qG��KG��n����8��I8��n���I��|��*��������d�����^�����������������U�������c����������z��E������
��c��M��
��������������W��������n���������)�����������N��������Q�����n���n���c�����|��n���n���������n���n���c�����������s��H�����n������J��u�����������1���0��0��B/��n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���n���/��߷��n���'���� ��� ���~����� ��� ���K�����������"��j"��C"�������������v��8(��(��e'��G{���z���z��^z��Nz��$z���y���y��6~��t}���|���{���~��(x��3w��v������o����� ���y���]���[��8[�� ���[��lZ����������*�����/?��A��$��P��QN��M�� ���XL�� ��� ����K���K��J�� ��� ���nI���R��OR���Q���Q���S���S��LU�� ���)I��wH��^H��"G���F���F��{F��-F���E�� ��� ��� ����D��YD���C��aC��6B��HA���?��
?���=��`<���;��7;���:���9��79�� ����8�� ����7���7���6��6���4��&4���2��<2��1��V0��//�� ����.��.��~-���,��1,���+��7+��n*���)��)��*��d�������������	���@�������������?����������T��� ������<����� ��� ��� ����� ����� ���������o�U�;�!������������k�Q�7�������������g�M�3������������ ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� �����7����_�����>����4��e��t�����������L����B������a����V����� ���O���������W��������q�������g����� ���;���<��C3��?�� ���5:��k>����0���/���/��/��.��.���-���-��hE�� ����1��1��0���E���D�����n��\+�� ���>+�� ��� ���$+��>*��G)���(���'���&���B��rB��@D���+���@��������Z�����"�������� ��� ���A�w��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ������I��]��;�������L�����,�����<��������������D��
��� ���&� ���I�_�K�7������J���}��������b��'����� ������ ���`�����j�����-��	�����:��M������i�A�����������0��7��'��Z����������%���%�� ��� ��� ��� ��� ��� ����$�� ���}$�� ��� ���D$���#��#���"��("��h!��! ��e��)�������� ������z�� ���Z���Y���X��XX���W��RW��W���m��2m���l��ll���k���j��<i��	h���f���e���d��7c��!b���`���_��H^���s���r��Oq��p�� ����o���n��Pn��3n���u��wu��-u���t��v��������w�����ʮ������n���)������� ���O���ު��������]������S�������¢��-��������a������8���Я��_���Ή��x����������م��)���������m��� ��� ���B���!���Е��d���y��� ��� ��� ����������� ���������������B������� ������� ���ߌ�� ����������� ��� ��������������X���\���]���}���h���������6������+��� ����%��6�������������� ������%��q����$��������� �����j�����������	��i��"��������e�� ������Y�������� ���B�� ���s����������� ��� ��� ��������� ��� ��� ��� ��� ��� ��� ��� ���x�� ���������W������8�������S����� �������� ���R��� ������� ��� ��� ������� ��� ����w���H���t��� ��� ���	��� ���3�����������ܷ��ʸ�� �������a������ ������ �����������?������ ��D �����V��2!��9'��'��O&���8��s8���6���5�� ��� ����7�� ��� ��� ���"7�� ��� ����2�� ���2�� ��� ��� ��� ��� ��� ��� ��� ��� ��� ���f5��L5��25��5���5���5���5������9��49��Z;�� ��� ���9��";���:�� ����,���+�� ����<��-�����=�����������*�����2�����n���
�����@��
��������9��"��������F���������������g���)�����������j������ ���]��9�����������^�����H���
���	��X	�� ��� ���	�����$�� ��� ��������� ��� ������
��n
��H
��
�����+�� ���2������N�h�%��a$���#���"�� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ����"������ ���������^������������^���������������������������������������������������������������������^����������������������I���Ƚ����@���1��� ���_���B���٬��ѫ��U��� ���i���P�������?���?���?���?���?���?���?���?���?���?������ĥ��ݮ��������x�����������������������������������������������������������������������������������������>���զ�����^�����������������������������������������������������������������������������������������~�������~���Ƚ��Ƚ��F���Ƚ��F���R���R���F���F���Ƚ��R���Ƚ��ѿ��Ƚ��Ƚ���������������������������������Ƚ��Ƚ��Ƚ��Ƚ��Ƚ��Ƚ��Ƚ��F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���Ƚ��F���F���L���R���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���F���Ƚ���@��4b��4b���@��4b��4b��4b��4b��4b���@���@��4b��4b���@��4b���@��4b��4b��4b��4b���@���@��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b��4b���@���@��4b��4b���@��4b���@��4b��4b��4b��4b���@���@��"w��^w��^w��^w��^w��^w��^w��^w���v��^w��^w��^w��^w��^w���v��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w��^w���w��^w��^w��^w��^w��^w��^w��^w��|w��lv��v��^w��^w��^w��\u�� u��=G��HG��=G��=G��=G��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��HG��=G��HG��HG��{F��HG��HG���F��HG��HG��HG��HG��HG��HG��HG���F��T��T���T���T���T���T���T���T���T���T���T���T���T���T���T���T��T��T��T��T��T��T��T��T���T��T��T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T���T��T��T���T���T���T���T���T���T��T��T��T��tnvfrsMultiple codepoints at single character literalformal argument cannot be a class variableformal argument cannot be a global variableformal argument cannot be an instance variableformal argument cannot be a constantclass/module name must be CONSTANTcan't make alias for the number variables		���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	

 !!""###############$$%%&&''(()*+,-.//01023333444444444556789::::;<<=>?@ABBCCCDDDDDDEFFGGHIJJJJJJJJJJJJJKJJJLLLLLLMMNNOPPQQRSSSSTTUUVVWWXYYZZZZZZZZZZ[[[[[[[[[[\]]^___``aaabbccddefffghijjklmmnnopqqrstuvvwwxxyyzz{|{}~{���������������������������������������������������������������������������������������������������������������������������������������������� !"#$'-./0123456789;<=>?@ALM[\cfgijlopqrstuvw�����������������������������.34defghikloprstu�������������	

 !"#$%&'-./0123458LMNOPQRSTWX]^_`lm����������������������':cflmnq��������������������������6������� ������8/f����������������.c����������,�x��xyz�jjjj����������()*+,%&�����������52��fl��NOPQRSTUVWXYZ_`e�������������Eab������������c������48_c�������!"#$12348��������b��5gdd��8���x���e���b��dd��\�����������6@A�����b�d����������������8�����b��)Bxz{{xx{C{�mvqwN�����������46789:N\flmn��X�������������������������67k�899��������������������������������458�������458�����
������8b���48���b����Eb���48����d}��������48�48�������������8����������48�48*}|xn{BxxnBx���fl������������"44��4'���������)�7)
Dl��������c����������??�dd������dd������
��;�A48�48����48����������������'�dd�dd��������+~���j{jjj���������������������,,*�*��,�8,�,b��==���7��d���	`�
��l�:?;��������52���d���������������������++l�����48�48>>�������������a������=����/�����������������48:[\cfijlq�.DEFGJNOPSTUVWXYZ[\]^_dehilpsu��D��eb�	
c��l��>�-y�������$%�$[[8�>ELMNOR��>�4x4f�e����EYZb��HI4c���������;<CD�&|0� !#&��������E�EPR����}�\LPJQRqUY[[�>�>�LOSLOS8b�����()��1������"&��"c��"���K���x������48�48`c@��4'(����� ����!�8b�QSQPR������"�"�"�"48"��AB(����""�""�"j8F;45a:FP:�[�
%��^-UaiL�U`PB�aE��3CPbcd45:�8Re8 PHDL4gD�=����LHMBPxU�?@A�fv�
xebcde67%&a4567���M}�l������LM7��
b
>d���fe+��B
45d�B��6�xO���]^��a�E�d�4�8	
��_��28����f��xbyfD*x����
�*�_���
�����%
��%��
�������EFGH_�����������������#���9��%�����'G��`���;$_>����������CL�<��e������C�e���^������_`����`���v^x�|�_���N��
��_��
���
�����B������B
 �"_EFGHdJK�|��d%l���(�q-��(��d��dd����d�����z{1������z{�}�'(��������������Nd��4��d8�������������dB�d����
���C���
����8���O���O����)������dE��*x,z{��A�MD��:R����B�eE��ab����ON�s.�p�d�F�|�J�����+s-d2d|Rm�%&q������BE�E�����d�������������������b+��bl�)N������nE_<�l�v"����|�������M6�4�Rab"��@A��_�l���Eb�4E����M��u�T�Pu��E�E���ba�cb��EE�����E�EFt8babEE�BE�BCabbD���abab���N�����b�abE����A���������K��N�D�xGz{Nabz{���67�9E�(�E�@AE.�0k2E4��013��.l0i2b4EEbabD�8Gab���E������B����.b02�4�Fb��45��8������E���C���d�|AE�������UK��xdz{]^YZabcdZf��ab��B�4�6789:	��B�d����!���B����N����()E�.���\�/&'����	f�x�z{dmn���abx�z{�}E+4�Sx�z{'(�4+����Z[��E2
�ab<���	�m�������,���ab,S�W��Z[���_��������E,w8mz�p�,��u��x����E���ab����B���%W��Z[4�^�N�abE��+,����m��p�E�C�EFGH�JKe	�ab��4���x�z{�}ab_`�����������a�4�������el��
X��8�STw��z���:�������������8���4N6789:i
�l�E���4�679���N�����mn���\ab��W����f�9���lmn;<=>�
��f����45��N�����C���Cbd�Y)�������4�6789�!"#$�v]^�la�f123�*[Q);<=>?�'(��+��N$��fm�el���<����_`AB��DE$����������M��O����R����opqrstuvw��_������4��6789:0��2��4�������u����x�������N��E������������������������������f��������lmn�����������������������N������������"������_`����������������!"#$4��6789��?@AB��1234H����8����;<=>?����������C��EFGH�JK��������f]����[\b()*+,c��_fNij��l����opqrstuvw_`��������4��6789:���������������9��������N��D�FG����4�6789������������4f6789��mn���45����4�6789:������C������������������������N�����������������]^��\a��������f�����f�������lmn��4��6789:���������'(����+���������������N����������<���������������������������f����������lmn�����������������_����������AB��DE�������������M�����uR�x��������	������������������������������������������~�����������������������������������������������������������������!"#$����S������W����Z[1234������8����;<=>?���m����p�����C��EFGH��JK����������������[\����������c��_f����ij��l���opqrstuvw�����������������������������������������������������������9!"�����������)*������������������������������������������������������������������D��FG�����������������\]��_`��������������
������������������������������������������������������������������������������������������������������������������������������45��������NOPQRSTUCWX����������_`AB��DE��'(����+��M���]^R��a��������f����<������������������������������������������������������_��������������	����������������������u��x������������������������������������������������������������������������������������������������������������W����Z[��������������������������������m��p����~45����8�����������������������������������������������������U��������������������bcd���������������������������������C��EFGH��JK��������D��FG��������������������_������������9��������������������������������������������45����8������������������������������������
�����������U��������������������bcd���������������������,�����������������������������������������������������������NOPQRSTUVWXYZ�������_`%���������������������������������������������������C��������	����������������������������_`������������������������'(����+����AB��DE������������M��<����R�����������������������������W����Z[��������������%��_��������������m����p������������������u���x����C����������������������������������������_`�������������������������������������������������������������������������������������������������������������������������'(���+��������������������������������<��7�����������B��E������������
��O����R������������������_�����������������������������������������u����x��D��FG���459�8�������������������������������������������U����������������������bcd���������������������������������B���E����������������O����R����������������������������������������������'(���+�������������������������<�����������������������������������������������������������_��������������������������459��8����u	��x���������D���G������������������U��������������������bcde��������������%����������	
����
��������������������W��CZ[��%&��()*+,������������m����p������_`�����������DE�����������������������������D��G���������ab�������������������������������������y����������������������������������45������9�������������	�����������������������������������������%����b�����������������������������������8������
��C������������������������M��S����RW����Z[����_`�������������������m����p������45��������������������������������	������B��E������������������O���R������������������������������������������������������������������������������������������������S������W��Z[������������������������������m���p�����������������������������������������������C�����

������������������������������������_������������(���������������������'(����+��:����B����E�������������<��O��������������������������������������������������������_����������������������������������C����u����x��
��D����G���������������������_�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������B���E��������'(����+R�����������������������������<�����������������������������������������������D���G���9_������������	���������������������\u����x��������'(����+�������������������������<����B����E�����������������������R������������������S������W��_Z[���������������������������������m��up��x�����������������������������������������������������������������������������������������������������������������������������������	D����G����������������������������������������������9�������������������������������������������������������������������������������������S����
W����Z[������������������������������m����p���������������������9�������������D����G�����������������������������������������������������������������������������/012������67���������������������CD����������	�������������������������������������������������f���������������������������������������������������������������
���������������������S������W����Z[�����������������������������m����p���	
����
��������������	����������������%&��()*+,���������������������������������������DE��������������NOPQRSTUVWXYZ��������_`ab����eW����Z[k��������������������������y���m����p������������������������������������������������
����������������������������������������defgh����klmnopqr��t����wxyz{|}~������������������������������������������������������������������������������������������������������������������������������������������
�������������������������	
����
���������������������������%&��()*+,�������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de����8����k����������A����D��������y����|M��������R�������������������������������������������������������������������������������������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A�������������������LM��������������������������[\��������
��c����fg��ij��l����opqrstuvw��y����������(��������������������������������:�����������������������������������������������������X����������������������������������������NOPQRSTUVWXYZ��������_`��������e�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	
���������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM\������������������������[\������������c����fg��ij��l����opqrstuvw��y���������������������������������������������������������������������������������������������������� !"#$����'���������-./0123456789��;<=>?@A������NOPQRSTLMWX������������_`������[\������������c����fg��ij��l����opqrstuvw����������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw����������������������������	
����
���������������������������%&��()*+,������NOPQRSTUVWXYZ��������_`��DE����������������NOPQRSTUVWXYZ��������_`ab��de���������k����������������y����|���������������������������������������������������������	
����
��������������������������������%&��()*+,������NOPQRSTUVWXYZ��������_`��DE����������������NOPQRSTUVWXYZ��������_`ab��de���������k����������������y����|����������������������������������������������������������	
����
������������������������������%&��()*+,������NOPQRSTUVWXYZ��������_`��DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k����������������y����|����������������������������������������������������������	
����
������������������������������%&��()*+,������NOPQRST����WX������������_`��DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k����������������y����|����������������������������������������������������������	
����
��������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k��������������������������y����|�����������������������������������������������������������	
����
��������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k��������������������������y����������������������������������������������������������������	
����
����������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de����������k��������������������������y����������������������������������������������������������������	
����
����������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab����e����������k��������������������������y�����������������������������������������������������������������	
,����������������������������������������%&��()*+,NOPQRSTUVWXYZ��������_`��������DE����������������NOPQRSTUVWXYZ��������_`ab��de���������������������������y����������������������������������������������������������������	
������������������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de��������������������������������������y�����������������������������������������������������������������	
��������������������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de��������������������������������������y�����������������������������������������������������������������	
��������������������������������������������%&��()*+,����������������������������������������������DE����������������NOPQRSTUVWXYZ��������_`ab��de��������������������������������������y�����������������������������������������������������������	
���������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
�������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
�������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
�������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
���������������� !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw�������������������������������������������������������������������	
������������������ !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������
������������������ !"#$����'����������-./0123456789��;<=>?@A����D��������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw����������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������� !"#$����'����������-./0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw���������������������������������������������������������������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw�������������������������������������������������������������������������������	

������ !"#$%&'����������-./0123456789������������������������������������LMNOPQRST����WX��������]^_`����������������������lm������������������������������������������������������������������������������������	

������ !"#$%&'����������-./0123456789������������������������������������LMNOPQRST����WX��������]^_`����������������������lm�����������������������������������������������������������������������������������	

������ !"#$%&'����������-./0123456��8��������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����p�����������������������������������������������������������������������������	

������ !"#$%&'����������-./012345����8��������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����p�����������������������������������������������������������������������������	

������ !"#$%&'����������-./012345����8��������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$���'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$���'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw�������������������������������������������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw���������������������������������������������������������������� !"#$����'����������-.��0123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lmnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��lm��opqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij����mnopqrstuvw������������������������������� !"#$����'������������.����123456789:;<=>?@A��������������������LM��������������������������[\������������c����fg��ij����m��opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��l����opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A��������������������LM��������������������������[\������������c����fg��ij��������opqrstuvw������������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��l����opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��l����opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A����������������������������������������������������������_������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij��������opqrstuvw����������������������������� !"#$����'������������.����123456789��;<=>?@A������������������������������������������������������������������c����fg��ij!"#$opqrstuvw������1234������8��:;<=>?���������������������������N������������������������[\������������c����f����ij��lm��opqrstuvw������������!"#$������45����8�������1234�����8����;<=>?LMNOPQRST����WX��������]^_`������������[\������lm��c����f����ij��������opqrstuvw��������������������������45���8�����������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm����������������������������������������������������������������������45����8������������������������������������LMNOPQRST����WX��������]^_`����������������������lm�����������������������������������������������������������������������������������������)C3�2BCI/�������|�����a��.�)�.��Bu��<W�)))����,���(���V�	����r~r�5DS;5�,�89:���c������� |�JK!���{�R/P����L78t�r���QQ���u��|���W���rr���z66<y��	V��x������Trr���|���w�_����v����z���{��{�Nr�rsL|�4��u�_��d��Bt��6�x��
��'St�����?�u�f$@)����V�y�������}�RU6J��~�>>I��s|yZ?y|�QQ�@��|�'�d,����U�S���)&A{��������K~������������������?{�rIr�@{�B���r�r���,����P��������x���T��x�d{t�����>t�u�v��z�w�u����y�����y����z��]������^��
W���>��;�>>�b_z]`|}~��{u���|��z�)���qr���y��{v�w���������z��f[V�s6���5��U{5������a��z,�������t�`����{���v��_�w��v����w�>��z��)���z�u�;��z�?�)��O@u~�����OO&o����o���	�����6�y�,#D%���1�3Q-�22r��r�$�ghjk�A*+'��JK�w��������`�{Q����������{z����t�w�+zg��[�)`�v��[��tdW}�^l.z�(��O������$+�.#���%��
�h��
�����),���2�a��5O�^� .�]�OO�5�s)|���b.�&Mn[�p��qr^��v�]���.9�\���vv��������-[���,�Z�c�,L5
��\��y�������&���������Z����Y����{������A��������&����O��Y�Y���P�$%�'c��b�b�D-.c��Q�H�X�����[�������c����b���c�c���X�X�Y����{������z������[[��*r�r��������������c��&���X�X���*&)����������������u��� !"^#*y���r~���NN#�� !�������*�$�����w��%����'(����
���b�|��)��NN��NTV(��)z���2U9Yb�b�N��TVs��<�[���v�x��e������oo��������N�&B����[���������b��N��N�[����)������NNN�NN�*NN����d��������&}�����[��������SVi��l������)�����[*{���������$zz{|}~����)e����ij&�&[��"��[[��N��(NN�� &�# !"�����������Y$%P'��#uv�.�'(0PP��$�!���2���%4N9��&'(()*+�)���&&&PP�E����[��00�P��)��*�P*��� !t�PP��Pp&[P ![R+>L�<()*+,00��0��d}"�R����z�0qr�[�[:���*9:;<=>?@A0 !"?@Bz{|}~00$#H[[000�00P00�%[�&'(�PPPPdP/1358�)qr*P*� !CDFG !$I%()*+,wxyz{|}~PPPPP0PP00�M'(REFGHI)P*d*+,-9:;<=>?@Aqr !"fPP/0PPP$ff#[��[P !yz{|}~% !��'(Pff� !"��fPFF)#���ff$ff�%P&'( !"[�PFFF[#)P*FP[%&'([[FPPPPP)FP*F[fFFFFFFF0ffffPfPPfPPPXPP�[[[ !$%()*+,P[[Pfffffff�F'(FF)f*+,-[9:;<=>?@A[�ff/fff$F��f�����f[PPPf����[fgfggP�GGf�PfPPPPggPPdefghijkgmnPqrffffGGGfPggfggGPPPuvwxyz{|}~PGffPffGffGffGGGGGGGfLfgPPPggPggP�gLL&Pg&PGGG&&&Pggggggg�fffgGPPPP��-gggggfPg-fLff���ffgff�fgLfLdefghijklmnopgqr&fffgHHfLgftguvwxyz{|}~�L&HHHgggg�gHgLLL�fff-HffggHgH�fgggHHHHHggHHf�-fLIIgg&���LLfffIIfIIHLHHLMf&LI�IIggg-MMHL'LIIIIIII�L�'LL'''JJg�L�&g-gggg�gg���JJgJIII��Jg&�gggJMgI+JgJL-LMJJJmJJ+JJM�����'����������gMgg-�������LLggLLM'L��gLJ�JJ�W��g��MLMMg�LLL�LWWJ���L���gggg+��M��g�'�&LLLM+M��LL���MM'LMWLY&�WMM��W��MLMM��&�+KKWML�'���W��KKK��WK+�WW'��K�KK�MM�KKKKK�KK�W�+��WLLWMMMMMMWKW]KK+LLLML�MMMMMMWWKLM��W�LLMMMLLLLLLLM���'MMMMMMMM��MMMMMMM���MLLLM'�WWLM'MMM�MWMW����WWW�
��=>W����������WWW����WW��������������������W����=W���������������������������W����������������������W��TUVWXYZ[\]^_`bcdefghijkl�������������������������������������������������������������������������������������������\������������x�������������������������������������������SS���S�SS	
��
S !"#$%&'()*+,-.�/012�3456789:;<=>?@A��c�BCD��Sdefghijklmnopqrs����SSSSt�uvwxyz{|}~��SSSS��S"S���S������	
������
�� !"#$%&'()*+,-.��/0�123456789:;<=>?@A��BCD�����	

� !"#$%&'()*+,-.d����ij/0��qr123456789:;<=>?@Auvwxyz{|}~BCD����	

 !"#$%&'()*+,-./0123456789:;<=>?@Ac�c�c�c�c�c�c�c�BCDc���c�c�c�c�c�c�c�c�c�c�defghijklmnopqrc�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�tc�uvwxyz{|}~c�c��c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�c�b�c�c�c�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�defghijklmnopqrb�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�tb�uvwxyz{|}~b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b�b���b�b�b���������������������������������������defghijklmn��qr������������������������������������������uvwxyz{|}~������������������������������������������������������������������������������������defghijmnqr������������������������������������������uvwxyz{|}~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������]������v�����������������������#��������������������������������������������������������������������������������������������������������������������������������������������������������������������defghijklmnopqr��������������������������������������!��tuvwxyz{|}~���x�����������������������������������������������������������������������������������������������������������!����x���������������������������������������������������������������������������������������������������������"����v�����������������������#�������������������������������������������������������������������������������"����v�����������������������#���������������	
�
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
��
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
��
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
�
� !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	
�
 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD����	

 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD���	

 !"#$%&'()*+,-.�/0123456789:;<=>?@ABCD��	

 !"#$%&'()*+,-./012356789:;<=>?@ABCD���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD���	
��
 !"#$%&'()*+,-./012��5679:;<=>?@ABCD?@�������������������������������������������$%�'��������������������������������������������������������������������������$%�'��������������������������������������������������������������������������������������������:��������������������������������������������������������������������������:���������������������������������������������������������������������������������������	

�" !"#$%&'()*+,-.#�5679:;<=>?@A	

$%�" !"#$%&'()*+,-.#�5679:;<=>?@A	

$O� !"#$%&'�()*+,-./012��567���9:�<=>?@AB�D	
�
 !"#$%&'()*+,-./012��5679:;<=>?@ABCD	
�
 !"#$%&'()*+,-./0123456789:;<=>?@A�	

BCD !"#$%&'()*+,-./012��5679:;<=>?@A	

BCD� !"#$%&'�()*+,-./012��567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./01���567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./01���567���9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567��9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567��9:�<=>?@A	

B�D� !"#$%&'�()*+,-./012��567�9:�<=>?@A	

B�D� !"#$%&'()*+,-./012��567
9:;<=>?@A	

B�D� !"#$%&'()*+,-./012�567
9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567�9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567�9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567
9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��567\9:;<=>?@A	

B�D� !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D� !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D !"#$%&'()*+,-./012��5679:;<=>?@A	

BCD� !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D� !"#$%&'()*+,-./012�5679:;<=>?@A	

B�DZ !"#$%&'()*+,-./012��5679:;<=>?@A	

B�D�" !"#$%&'()*+,-.#_567`9:;<=>?@A	

$�" !"#$%&'()*+,-.�456789:;<=>?@A	

$�" !�#$%�'()*+,-.���5679:;<=>?@A	

$�" !�#$%�'()*+,-.��5679:;<=>?@A	

$�" !"#$%&'()*+,-.#_5679:;<=>?@A	

$�" !"#$%&'()*+,-.��5679:;<=>?@A	

$�" !"#$%&'()*+,-.��5679:;<=>?@A !$%&()*+,$#'()*+,-'9:.<=>?@Amno/ !$$%()*+,���������������'(��)*+,9:;<=>?@A������������wx/y��$������������������������������n���������������������������������x���������������������������������n���������������������������������n���������������������������������x��������������������������������?n@�������������������������������BxC�������������������������������HnI��������������������������������x���������������������������������n���������������������������������x��������������������������������n�������������������������������	x
�������������������������������6n7��������������������������������x���������������������������������AEFGZ�}~��H�J��KaS��N�����NOIQRSTU�V�������p�X�Y��q,������v�Z��=�GE�BE	\]^_`abcdeX[�W:��
�5�������+��������mn��i.bh��\ijYFGJK�;���
>=�1�34��5�wxy78�{9:;<=,?@ABCDE��TXklmnop7qr
�stuvwx045��j�ekyz1{|}~�����F�MNOP-}/0�1234�6789�:;<=>?@�������t����'���������������r��������d��������sa�R����Y	������������~��e����\�
u�����������������
��]�������i�����9�p������������������������h��������������������������������������������������b��������������\�����[��������h������6������������+�����*��	���_������m���������
�������l�1�������	�������������������������/�V�������j
����E������������j����������������������Y��:�
�	����&������a��N���A�����$��?���I���0���8���0������/���G����������������7.���{|}�vwxy��2����<<������������c��s�}}�
(-��BV2UgkuK�NRRW2aW_CDbdEFlGrIvHxJa��`����KLZ����������������������������������������������������������������������������!���~��=�5}��-8e19��L�f�b=<vw��WZ���T<iP<<<�<��qz{|�����imys{�F��r��t���[�^���wolI��G	QPh����L������Lp����������ML�d<c
`e��T<�4.7/�<)<(3<]E <RhU V���yt������~fg�h�j	"#$%CD�����������������<�����������������\�<mx���	
���<�����������2�<���2��fTRn����lN<Y��2�:6;��<���#*%,\
SjQ<r�<����kouqw�&���<���������9����<7:
�8�������=)?,>vpA/?!8�*L����_�*'�]&O��S�de��S<�����<<X�X0!�9���<0�<<6�z�����npzt|'<����������������su�Y�BnT��`
^�X����T�i�j��q�O��$+[�����������>=@��<��5�4�a2�3�YZ[�bc��gk�m�������;A+@"�PV5�<�)}OJ�	%.14:;0<
ABCFGHIJLKMN8H1�]�_�o<��������<��DE�T<"<(QR/3?@��7\��L������������<��������<, #6<%&*}2-=>U
<<<<<<T^�������������$SS<��W���<������������T�!<&'+��������S���������������������������'��������������;+;+������������������y&$�������������C����������������`1`1`1`1�3"�"-.C(���%������;;;;�1`1�������H��K--����W�
��64��(�������*�*�����$�4$5�5B%;+���������9����������������������������������>���V��������������������������������������������������������������������������������������������������������������������������������������������������������������=������������L`1��"`1`1`1��`1--���%���������*<�T������+��;+�����)R2������q#����������W�����Q��M��3"���HI����N�����f����6tt����p����������I����������������������'��*�*�*�*��R2R2��������������������������������3"�(�����`1`1`1`1`1����`1`1`1`1`1`1`1`1��`1����`1`1`1`1`1`1`1`1`1`1�����7;+�7��K||�*�!�!����E�����zNYd��*������������q5�������������/��1)�������=������������7���������`1-,����a8;+�8�����-��`1������C����������'����`1='9�8��$�����9��-����.�������8����Q��6�9;+�9�������������������������Z�a`1����
$����������I*��������������������4����������b��i����v������0��x`1�������������2��2��s���������.6���/��Q����_y����II���++H&&QQQ�����}�������^�������������(h ���&*oP:;+�:������8������;;+y;R2�������������D3D3'��`1�3�3`1���������TMQ`1`1�����,���-������R2%��PD3��������6Q�b��������F��;����F;��Q���4~������8�������������`1�������������������%%���%����������������`1����=����Q63����E�m������V|����������������-,�������������w���s������������|/���&������!��*"b���C�'������
��������`1���������������C�����������������������������4������_b���������������2���������������/��Q��������;;+?<����`1D3D3
������D3D3����n0s�������!�*��������`1��Q������������������������3`1`1��`1`1���-������������������������%`1`1����`1I*I*D3`1+e�J7J7%����������D3�����������O�������|�������06�����������`1�����\���%%--����%������NN������������1��1������'��2���7��������n������(��������������������������6|�����!����!�`1���J7��#����������������
$�������������7����5��4������G���*�����7�7yNN���J7J7�����d~��������������|�CH��
$���bZ����[f0]7��^���������ycq��������������t���������������������������<;+=w��������*�*���R����������v��7�������\�����7�����7�O�������������q�u�����������a���������b�������������h=����������������\��\�����\��u����7������������������\��������������������������
$&--27?HOU[fqz������������������������







#
"
0
/
<
?
K
U
T
b
g
m
m
m
t
u
x
y
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�

&+27>>CHNSY^ckkpuz������������������������������������������������������������������������������������������	#)/6=CIOUZ_dinsx}������������������������%,348=DIRWamntuvz�����������������''''''''()*0/<<BHMRW]bglqw|����������������#"53DBQV[`ov}��������������
!"#&'*+56=>AFMRY^chmtz����������������������������������!&,27>D=^enut�����������������"'-4>?BCEPM]^abhpqw}������������������������
"',/3:?FNT[\cjoty��������������������������������!&-BEJNQVY`cdguvw~���������������������������+37*JKNSVWZjknvw��������������������������������������#(-27<AFKPV]hqz���������������� !$*27>DCijqs������������������������������H�KIJ����������E��������F�������YZ[\LMNO_`TSPQRWX]^bUVa	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDGcdefghijklmnopqrstuvwxyz{|}~�����������������Stack now %douterNODE_DEF_TEMPNODE_EXITSunexpected node: %sunexpected node: %s, %sunexpected ...empty expressionunexpected nodeinvalid value for %s: %snoneexperimental_copyexperimental_everythinginvalid multibyte char (%s)cmdarg_stack(pop)cond_stack(pop)unixdosutf8-macCan't set variable $%ldCan't set variable $%clocaleexternalinternalfilesystemunknown encoding name: %s%li:%d%s is not ASCII compatiblelex.pcur < lex.ptokunexpected null nodecmdarg_stack(push)cond_stack(push)tokennterm%s %s (%d.%d-%d.%d: %+liNODE_SPECIAL%s a variabledefined?a constanta literal::selfno anonymous %s parametersyntax errorsyntax error, unexpected %sordinary parameter is definedvtargsvtable_pop:%d: %s(%p), %d
statement not reachedstring sizes too biginvalid source encodingunknown regexp option%s - %*sdynamic constant assignmentCan't assign to nilCan't assign to trueCan't assign to falseCan't assign to __FILE__Can't assign to __LINE__Can't assign to __ENCODING__invalid Unicode codepointUTF-8 mixed within %s sourceinvalid Unicode escapeunterminated Unicode escapeinvalid hex escape%s mixed within %s sourceInvalid octal digittrailing '%c' in numberFloat %s out of rangeduplicated argument nameInvalid breakInvalid nextInvalid redoduplicated key nameduplicated variable nameinvalid symbolunexpected node as symbol: %s... after rest argumentvoid value expression-einteger literal in flip-flop$.string literal in conditionstring literal in flip-flopregex literal in conditionregex literal in flip-flopsymbol literal in conditionsymbol literal in flip-flopStarting parse
Entering state %d
Stack size increased to %ld
Reading a token
argument prefixhere documentincomplete character syntaxunary operatorsymbol literalregexp literalunknown type of %stringstring literalcond_stackcmdarg_stackNow at end of input.
Next token isShiftingafter-shift: %+li
   $%d = END in method; use at_exitInvalid retry without rescueInvalid retry after elseInvalid retry after ensureInvalid yieldinvalid local variable - %li->}block given to yield%li: no such local variablekeyword rest-> $$ =after-reduce pop: %+li
after-reduce push: %+li
Error: discardingError: poppingafter-pop-stack pop: %+li
after-shift-error-token:
nesting too deepCleanup: discarding lookaheadCleanup: poppingfrozen_string_literalshareable_constant_valuewarn_indent"end-of-input""invalid token""'class'""'module'""'def'""'undef'""'begin'""'rescue'""'ensure'""'end'""'if'""'unless'""'then'""'elsif'""'else'""'case'""'when'""'while'""'until'""'for'""'break'""'next'""'redo'""'retry'""'in'""'do'""'do' for condition""'do' for block""'do' for lambda""'return'""'yield'""'super'""'self'""'nil'""'true'""'false'""'and'""'or'""'not'""'if' modifier""'unless' modifier""'while' modifier""'until' modifier""'rescue' modifier""'alias'""'defined?'""'BEGIN'""'END'""'__LINE__'""'__FILE__'""'__ENCODING__'""local variable or method""method""global variable""instance variable""constant""class variable""label""integer literal""float literal""rational literal""imaginary literal""char literal""numbered reference""back reference""literal content"tREGEXP_END"dummy end"'.'"backslash""escaped space""escaped horizontal tab""escaped form feed""escaped carriage return""escaped vertical tab""unary+""unary-""**""<=>""==""===""!="">=""<=""&&""||""=~""!~""..""...""(..""(...""[]""[]=""<<"">>""&.""::"":: at EXPR_BEG""operator-assignment""=>""(""( arg"")""[""{""{ arg""*""**arg""&""->""symbol literal""string literal""backtick literal""regexp literal""word list""verbatim word list""symbol list""verbatim symbol list""terminator""'}'""'#{'"tSTRING_DVARtLAMBEGtLABEL_ENDtIGNORED_NLtCOMMENTtEMBDOC_BEGtEMBDOCtEMBDOC_ENDtHEREDOC_BEGtHEREDOC_ENDk__END__tLOWEST'=''?'':''>''<''|''^''&''+''-''*''/''%'tUMINUS_NUM'!''~'tLAST_TOKEN'{''}''['',''`''('')'']'';'$accept$@1option_termstop_compstmttop_stmtstop_stmtblock_openbegin_block$@2$@3$@4stmt_or_begin$@5allow_exitsk_END$@6command_asgnendless_commandoption_'\n'command_rhs$@7$@8def_namedefn_head$@9defs_headexpr_value$@10$@11expr_value_doblock_commandcmd_brace_blockmlhsmlhs_innermlhs_basicmlhs_itemmlhs_headmlhs_postmlhs_nodecnamecpathfnamefitemundef_list$@12reswordsendless_argreloprel_exprlex_ctxtbegin_definedafter_rescuearef_argsarg_rhsopt_call_args$@13command_argsopt_block_argarg_splatmrhs_argmrhsprimary$@14$@15@16@17$@18$@19$@20$@21$@22k_begink_ifk_unlessk_whilek_untilk_casek_fork_classk_modulek_defk_dok_do_blockk_rescuek_ensurek_whenk_elsek_elsifk_endk_returnk_yieldthenif_tailopt_elsefor_varf_margf_marg_listf_margsf_rest_margf_any_kwrest$@23f_eqf_kwarg_f_block_kwf_opt_primary_valuef_optarg_primary_valueopt_args_tail_block_args_tailopt_block_paramblock_param_defopt_bv_declbv_declsmax_numparamit_id@24$@25f_larglistlambda_body$@26block_callmethod_call@27brace_body@28do_bodycase_argsp_pvtblp_pktblp_in_kwarg$@29p_case_bodyp_casesp_top_exprp_top_expr_bodyp_asp_altp_lparenp_lbracketp_expr_basic$@30p_argsp_args_headp_args_tailp_findp_restp_args_postp_argp_kwargsp_kwargp_kwp_kw_labelp_kwrestp_kwnorestp_any_kwrestp_valuep_primitivep_variablep_var_refp_expr_refp_constopt_rescueexc_listexc_varopt_ensurestringsstring1xstringregexpnonempty_list_' 'words_tWORDS_BEG_word_listwordsymbol_listwords_tQWORDS_BEG_qword_listqwordswords_tQSYMBOLS_BEG_qsym_listqsymbolsxstring_contentsregexp_contents@31@32@33@34string_dendssymdsymsimple_numericnonlocal_varuser_variablekeyword_variablevar_lhs$@35superclassf_opt_paren_argsf_paren_argsf_arglist@36f_kwarg_f_kwf_opt_arg_valuef_optarg_arg_valueopt_args_tail_args_tailf_bad_argf_norm_argf_arg_asgnf_arg_itemf_argf_labelkwrest_markf_no_kwargf_kwrestrestarg_markf_rest_argblkarg_markopt_f_block_argsingleton$@37assoc_listassocsassocoperationoperation2operation3dot_or_coloncall_opcall_op2trailer_%d is reserved for numbered parameternumbered parameter is already used in
%s:%d: %s block here'it' is already used in
%s:%d: current block hereget_nd_vid: unexpected node: %sget_nd_value: unexpected node: %sset_nd_value: unexpected node: %sget_nd_args: unexpected node: %sregexp encoding option '%c' differs from source encoding '%s'encountered \r in middle of line, treated as a mere space'%s' is ignored unless in comment-only linemismatched indentations at '%s' with '%s' at %dblock argument should not be givenboth block arg and actual block givenlocal->used->pos != local->vars->pos'%s' is ignored after any tokensunexpected rb_parser_ary_data_type: %dadd_block_exit: unexpected node: %svtable_add: vtable is not allocated (%p)'when' clause on line %d duplicates 'when' clause on line %d and is ignoredpossibly useless use of %s in void contextprobable buffer overflow: %ld for %ldanonymous %s parameter is also used within blocksyntax error, unexpected %s, expecting %s or %s or %s or %ssyntax error, unexpected %s, expecting %s or %s or %ssyntax error, unexpected %s, expecting %s or %ssyntax error, unexpected %s, expecting %snumbered parameter is already used in
%s:%d: current block hereidentifier %li is not valid to getkey %+li is duplicated and overwritten on line %dvtable_pop: unreachable (%d < %d)incompatible character encodings: %s and %snegative string size (or size too big)string literal encodings differ (%s / %s)negative string size (or size too big): %ldadd_delayed_token:%d (%d: %td|%td|%td)
Can't change the value of selfCan't assign to numbered parameter _%didentifier %li is not valid to setinvalid Unicode codepoint (too large)invalid character syntax; use \M-\%cinvalid character syntax; use \C-\M-\%cinvalid character syntax; use \%cinvalid character syntax; use \M-\C-\%cinvalid character syntax; use \C-\%cInvalid escape character syntaxnumeric literal without digitsformal argument cannot be a constantformal argument cannot be an instance variableformal argument cannot be a global variableformal argument cannot be a class variableformal argument must be local variablekeyword arg given in index assignmentblock arg given in index assignmentsetter method cannot be defined in an endless method definitiontoken position mismatch: %d:%d:%s expected but %d:%d:%sfound '= literal' in conditional, should be ==can't find string "%.*s" anywhere before EOFunterminated list meets end of fileunterminated regexp meets end of fileunterminated string meets end of file'**' interpreted as argument prefix'*' interpreted as argument prefixunterminated here document identifiertoo long here document identifierinvalid character syntax; use ?\%c'?' just followed by '%.*s' is interpreted as a conditional operator, put a space after '?''&' interpreted as argument prefixunexpected fraction part after numeric literalno .<digit> floating literal anymore; put 0 before dotparentheses after method name is interpreted as an argument list, not a decomposed argumentunterminated quoted string meets end of file'%s' is too big for a number variable, always nil'$' without identifiers is not allowed as a global variable name'$%c' is not allowed as a global variable name'%.*s' is not allowed as a global variable name'@' without identifiers is not allowed as an instance variable name'@@' without identifiers is not allowed as a class variable name'@%c' is not allowed as an instance variable name'@@%c' is not allowed as a class variable nameInvalid char '\x%02X' in expressionReducing stack by rule %d (line %d):
else without rescue is uselessBEGIN is permitted only at toplevel&. inside multiple assignment destinationcomparison '%s' after comparisonclass definition in method bodymodule definition in method bodysyntax error, unexpected end-of-inputInvalid return in class/module bodykey must be valid as local variablessymbol literal with interpolation is not allowedunexpected ... in lambda argumentcan't define singleton method for literals'if' at the end of line without an expression'elsif' at the end of line without an expression... at EOL, should be parenthesized?embedded document meets end of filewords_tSYMBOLS_BEG_symbol_listgets returned %li (expected String or nil)method called for uninitialized objectRipper#parse is not multithread-safe(ripper)Ripper#parse is not reentrantcompile_errorRipper0.1.0Versioninitializeparsecolumnfilenamelinenostateend_seen?yydebugyydebug=debug_outputdebug_output=error?dedent_stringlex_state_nameEXPR_BEGEXPR_ENDEXPR_ENDARGEXPR_ENDFNEXPR_ARGEXPR_CMDARGEXPR_MIDEXPR_FNAMEEXPR_DOTEXPR_CLASSEXPR_LABELEXPR_LABELEDEXPR_FITEMEXPR_VALUEEXPR_BEG_ANYEXPR_ARG_ANYEXPR_END_ANYEXPR_NONEwarnwarninggets=>ripper;H���d������
���|������������
���`0�����	�������T(��4-��4�-��L.��`/��t�/���0����0����0��	1��	41��,	�1��H	�1��`	d2���	�2���	�3���	4��
t4��,
5��T
�5��x
�5���
d6���
�6���
D7���
�7��t8��4�9��P$:��ld:����;����<���<��>��DT>��l�>����@���dA����A����A��
$B��0
�B��T
TC���
�C���
D���
F��$4G��XtG��t�G����G����H����H���H��($I��D�I��p�I����J���4K����K���L��PDM��|$N���dN���$P���TP���P��P�Q����Q����R����R��4S��0�S���tT���tU���U��4DV��htV����W�����������D����x��������D���<���������D����d���,t���x4�����������`�����4����԰���4���4Ա��dD���������t���L������t����Tĸ���Ժ��$���,����X����T���������4���HD�������D��H����������D���������$���TD��|����4���$��X ���� ���� $��!d��L!���h!$���!d���!����!����!����!���"���"���0"���D"$��X"4��l"D���"T���"d���"t���"����"����"d��#t��#���(#���<#���P#���d#���x#t���#���#t��$���$t��$��H%���%$��%��$&����t&D����&����&���'d
��$'�
��\'����'���'4���'$��4(���|(t���(��)t��4)��`)���)����)4��*���t*����*4��+���L+D���+����+T ��,�O��t0�Q���0�Q���0R���04R���0tR��1�R��1S��<14S��\1�S���1�S���1T���14T���1TT���1�T��2�T��02�T��H2U��`2�U���2�U���2V���2$V���2tV��3�V�� 3�V��<3Y���3Z���3�Z���3�Z���3�[��44t_��P4zRx�$����FJw�?:*3$"DP��\(����E��(x���GE�D�D (ID(���XE�D�D 9ID�4 ���H���$��W}@%��w�%���,�&��} @'��nF�V
DCE�4dP'��tB�D�K �D(�J0~(M ABB��'��GA�y
FF��'��3��'���(��ldq
KT(��@\c(|(��wc�A�D {DAH��D�(��Ys�e@`)���B�B�B �A(�A0�G@�
0A(A BBBA��)��~(�*��TB�P�D �zAB$�@*���A�N�I }AA �*��rA�G0^
FA$0+��EA�A�G vDA X<+��zA�f
Id
D|�+��kq�y��+��kq�y�@,���i�r���,���I�y�8-��nK]�.��1HN Z$�.��>XV<<�.��zJ�A�D MA�A�R ��x
AAF8|0���B�B�D �D(�G0}
(D ABBG��0��B,��0��Dl
A]
Bg
AN
E$��1��:A�K�I `CA$�1���D E
G@@T2��
B�B�E �H(�D0�G@�
0A(A BBBG� 4��k�|4����4��Z���
��4��= ��4��mA�L Y
AA885���B�J�D �K(�GP�
(F ABBA@H�5��zB�D�D �y
DBGX
ABEAFB��5��(E�b0�6���F�D�D �G@
 AABB0��7��&B�A�A �Dp
 AABA�8��6Di
C,�8��RA�`
GH<9��D\H9���B�D�E �T
FBAA
FBAA
FBA��9��A�W��9��@A�[
Ab��9��"A�`(��9���A�A�G0�
AAA(\:��A�T4D`:���A�D�D i
AALD
AAJ(|;��ZB�A�D �v
ABH$�<;��xA�D�D eDA4��;���A�A�G N
AAGLIH(	,<���E�D�G@M
AAA84	�<���F�B�D �A(�G0g
(D ABBDp	d=��6(�	�=���A�D�GP�
AAD�	$?��0@�	@?��oB�J�D �r
AEPF
ABGACB,
l?���B�D�A �J
CBJ(8
�?��CB�D�D �uAB0d
 @���B�A�C �G0�
 AABA$�
�@��DA�I�D pDA$�
�@��LA�A�G @AA(�
�@���B�D�A �l
ABJzRx� ���$J�4H<A���A�D�G L
DACe
DAF4��A���B�A�D ��
ABKUAB0�lB��fG�D�G ZAAB��X ��0��B��WA�D�G v
DAIDAA$ �B��,A�D�G YAA(H�B��"A�A�DPQ
AAG8t�C��X=B�S�G �D(�F0�
(M ABBJH�����B�B�D �A(�F0^
(A ABBEN
(A ABBL0�X����B�D�D �G@�
 AABI(0
���nB�A�D �cAB8\
X����B�A�A ��
ABIG
ABA���D�
���@B�D�D ��
ABEF
CBMN
CBEL�
���?B�B�B �B(�D0�A8�D��
8A0A(B BBBF4D�rB�E�I �D(�D0P(D ABB(|8���6B�L�I �[AB8�L���B�L�D �D(�DPq
(A ABBGH�0���B�B�B �B(�D0�D8�Dp�
8A0A(B BBBCH0��B�B�B �B(�D0�C8�Gp�
8A0A(B BBBDL|h���xB�B�B �B(�D0�D8�G�b
8A0A(B BBBEH�����\B�E�B �J(�A0�A8�G`I
8D0A(B BBBF8����|B�E�B �A(�D0�V
(A BBBEHT��K�A�D �@
ABE�
ABGp���D ����D����4���ZB�E�D �D(�G0}(A ABB,������B�E�D �Y
ABIph���iB�B�D �D(�D0G
(A ABBCI
(A ABBIu
(A ABBEV
(D ABBI(�d���pA�A�G Q
DAA�����80�Ԛ��{A�I�L V
AABHAA8 ���rG�N�K �D(�L0f(A DBBA����H@d���B�B�E �E(�D0�A8�D`�
8A0A(B BBBA@�8���^B�B�E �D(�D0�D@�
0A(A BBBG8�T���xB�J�D �D(�G0~
(A ABBAh�����B�E�E �A(�D0�D@ZHKP`HA@T
0D(A BBBFdHBPNHA@I0D(A BBBLx����B�E�D �A(�D0N
(A ABBDK
(A ABBG�����KA�I(��ZA�D�G0q
AAA8$����B�E�E �D(�I0�h(D BBBHLx���9B�E�E �B(�D0�A8�Dp�
8A0A(B BBBA�l���KA�h
GH������B�J�B �H(�I0�D8�DP 
8D0A(B BBBDh��[�B�B �B(�D0�D8�J@i
8D0A(B BBBGW
8C0A(B BBBEh������Hl�����B�E�B �E(�A0�F8�G`�
8A0A(B BBBBD�̥��bB�B�A �A(�D@�
(A ABBBtHPPLHF@H��B�E�B �B(�A0�A8�DP�
8D0A(B BBBD0LH����A�D�G g(K0T(J yAAzRx� �� ��H������B�E�E �B(�A0�A8�DP�
8A0A(B BBBJ@�ȩ���B�D�D �G0�
 AABHW
 AABA4@����yB�A�A �L
ABE]ABh*��8�����yB�D�D ��
ABAd(W0O(A ����
,����B�A�A �r
ABG$x���oA�m
Bw
AF84����rB�E�D �D(�D0\
(D ABBH8p���mB�B�E �F(�A0�Q(A BBB`�8����B�B�B �E(�D0�D8�GPL
8D0A(B BBBEL
8J0A(B BBBI8ı��B�B�D �A(�G0|
(A ABBF<L���'B�E�E �D(�H0�
(A EEBF8�����JB�B�G �C(�G0v
(A ABBG8����:B�B�D �C(�G0q
(D ABBD���uE�k8 t���7F�B�D �A(�D0
(A ABBI\x���?p���������������������������������������)�$����8����L����`����t���������������E���\���
�X���
�T���	�P���	L���X���00T����B�D�D �J@q
 DABA8d�����B�E�D �D(�D0C
(A ABBD�����oF�B�A �D(�D@c
(N ABBI�
(A ABBD^
(A ABBD^
(A ABBDK
(A ABBG�
(A ABBEY
(A ABBI8Lػ��lB�E�D �D(�K0|
(A ABBD(�����A�D�J0i
CAAH�p���B�E�E �E(�A0�A8�G`
8A0A(B BBBK`4���B�E�E �B(�D0�D8�DP|
8A0A(B BBBH�
8I0A(B BBBI0d���qA�L�G Z
AAHtCA@�<��dB�B�E �D(�A0�G`E
0A(A BBBFL�h�� 
B�B�E �B(�D0�A8�F��
8A0A(B BBBJ,8���A�q
NHH���5B�B�E �B(�A0�A8�Gp
8A0A(B BBBF,����B�A�D �c
ABC�p��TK4�8�kB�A�A �Y
CBFAB8 p��B�B�A �A(�D0c
(A ABBEP ��{8d `�J�C�G i
O�A�KrAAD��H� D��B�E�E �E(�D0�G8�G@�
8D0A(B BBBCD� ���B�D�D �Q(M0P(A D
ABH_
ABF@4!p�vB�A�D �h
CBLU
ABHNABDx!���K�D�D �h
�N�B�EM
ABHM�A�B�(�!��jB�D�D �X
JBJ(�!8��B�D�D �k
DBEl"��B�B�D �D(�D0T
(D ABBCV
(A ABBDD
(A ABBFT(G DBB�"<��D ~
FF�"��7A�V
IV`�"��B�B�E �E(�D0�D8�GPr
8A0A(B BBBG�
8D0A(B BBBFD,#h��B�E�E �E(�D0�D8�DP�8A0A(B BBB@t#���B�B�B �A(�A0�D@g
0A(A BBBEH�#,��B�B�B �B(�A0�A8�GP�
8A0A(B BBBC8$��[B�B�J �D(�J0�s(A BBBD@$��B�E�E �B(�A0�J8�JPk8A0A(B BBB8�$�aB�E�E �D(�D0�E(A BBB(�$@�n/F�B�B �B(�A0�A8�G� L�.
8A0A(B BBBA�
�.P�.V�.A�.�.U�.G�.A�.��.R�.W�.B�.�2�.E�.J�.I�.`�. �.E�.H�.I�.`�. �.E�.H�.I�.`�. �.E�.H�.I�.`�.[W�.A�.V�.H�.�.A�.^�.E�.(�.A�.^�.E�.��.D�.]�.D�.'�.A�.]�.D�.9�._�.V�.D�.��.]�.]�.D�.�.\�.]�.D�.��.Z�.V�.D�.��.]�.]�.E�."�.c�.^�.E�.��.\�.^�.D�.��.]�.]�.D�.�.\�.V�.D�.��.\�.`�.E�.,�.^�.^�.E�.e�.[�.V�.H�.��.Z�.^�.E�.��.[�.^�.E�.��.A�.Y�.B�.y�.E�.Y�.A�.��.`�.w�.A�.��.\�.s�.A�.��.D�.]�.E�.0�.D�.^�.E�.�.\�.a�.D�.��.a�.x�.B�.��.`�.x�.B�.��.^�.]�.D�.�+�.G�.k�.A�.<�.E�.X�.A�.X�.E�.H�.I�.`�. �.E�.H�.I�.`�. �.E�.H�.I�.`�.��.[�.^�.D�.��.Z�.]�.D�.��.[�.V�.D�.]�.]�.]�.E�.�.\�.^�.E�.��.Z�.^�.D�.��.]�.]�.D�.�.\�.V�.D�.��.]�.]�.E�.�.\�.^�.E�.��.\�.a�.D�.,�.^�.]�.D�.B4�.E�.J�.I�.`�.$zRx��.������,���
(,)H��E�A�G �
AAEX)<!��l)8!���)D!��E�T �)H!��9M�\
�GAG��)d!��	�)`!��tL�t
Hk�)�!��,E�X
KC$*�!��JE�M�D nDA(<*�!��TA�J�D Q
DAKh*,"��(HY�*D"��E�Y�*H"��HK�*P"��)E�c�*d"��(HY�*|"��#HS+�"��(HY4+�"��jF�F�A �}
JBJAFBP+�"��1E�kl+#��1E�k�+,#��HN�+4#��IE�x
CD�+d#��&H]�+|#�� E�VH�+�#��FF�B�B �E(�A0�F8�I`H
8A0A(B BBBG @,�%���E�I0�
AA,d,P&��uF�A�A �G0\ FAB�,�&��:HS
MK4�,�&��"F�A�G �G�
 AABA�,�'��sL�b-+���HzGNU���@�`�% �0�hZ���fZ����`@��`���`���`�Y�`�`�`a	aaa(a3a;aBaMaVa`aiara{a�a�a�a�a�a�a�a�a�a�a�abbb"b+b3b<bFbNbUb]bmb�b�b�b�b�b�b�b�b�b�bc*c3cEcYcdcuc}c�c�c�c�c�c�c�c
dd%d)d5dEd^drd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�deeeee e%e6eLeQeUe]eaeeeieqeue}e�e�e�e�e�e�e�e�e�eff%f,f9fAfLfXfafmfuf�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�f�fggg�gggggg gm$g,g��0g=gJgTg]ghgtgxg)�|gAgNg�g�g�g�g�g��g�g�g�g�h�g�g�g�g�g�ghhhh��)h7h:�/hGhLhWhbhlhvh�hn�h�h�h�h�h�ho�h�n�h�h�h�h�h�hwn�hi8n'niiiio,i'i:iDiMiRiZi_idihiliqivi{i�i�j�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�ij
jjj&h#j+j4j<jCjOjWjcjpjujzj�j(��j�j�j�j�j�j�jk6�kkkk"k��'k2k>k�iCkNk;hZk^kikmkuk�k�kk�k�k�k�k�k�k�k�k�k�k�k�k�k�k�klll%l,l8l>lGlOlTl_lhlsl�l�l�l�l�l�l�l�l�l�l�Y�lk^�l�l�lmm^m%m/mh��m4m@m]mdm�mRmxm�m�m�m���m�m�m�m�m��\�m�m�m�m�m�m�m�m��
n��nn%n6nCnMnQn�j^nnn�n�hn��n�n�n�n�n�nYn�j�n�n�n�n�n
ooo&o0o5o@oGoMoWobomozo�o�������oEY7g�W���������
'j�g
��P�%X�%���o`X�
���%��U�(-	���o���ox(���o�o�&���o�h�%�g�g�g�ghh h0h@hPh`hph�h�h�h�h�h�h�h�hii i0i@iPi`ipi�i�i�i�i�i�i�i�ijj j0j@jPj`jpj�j�j�j�j�j�j�j�jkk k0k@kPk`kpk�k�k�k�k�k�k�k�kll l0l@lPl`lpl�l�l�l�l�l�l�l�lmm m0m@mPm`mpm�m�m�m�m�m�m�m�mnn n0n@nPn`npn�n�n�n�n�n�n�n�noo o0o@oPo`opo�o�o�o�o�o�o�o�opp p0p@pPp`ppp�p�p�p�p�p�p�p�pqq q0q@qPq`qpq�q�q�q�q�q�q�q�qrr r0r@rPr`rpr�r�r�r�r�r�r�r�rss s0s@sPs`sps�s�sGA$3a1�g��GA$3p1113���GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113����GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY����GA+GLIBCXX_ASSERTIONS
GA*FORTIFY����GA+GLIBCXX_ASSERTIONSripper.so-3.4.4-3.el8.x86_64.debug�P�7zXZ�ִF!t/��0��]?�E�h=��ڊ�2N����� ��d1Dg�@l��Y�#,�D�%�+���{��]-	/�t�UB�b7���p�a.1�tYN��^����H���x�!ɨ��5� 6���]��j��Ly�4<��ڤ��O����Tl
P�ޜ�ݫԗz$3L�3b�T'�q���VC� >Rsn\R�3v�{Â�����N�!��YQ�m�����_����[��W]��7��Q����G��^�_1R���4��[:��{��>�Z��4h%�+r�,�x���a��z�=�p�q���8����g���@ѯG�'��(��Vێ,�f�6�z���Di�.ǿ`�H�f���8�@#L�4Ɗv)PGVa�򭮳B������C�u=ԝ�`G҂�nZ��h/�ۙC�������o�}�k�Z�`!{�h��Oa!�VZ�J�뱾���:�cp��{�4GYB��V��
���#F�[R�[���u�
nԽG��z0��q!�v��8��HP�Dx<�#��B�b(�ŒL���f
�3]W�B�V�v`̊�y�c�~��ŒTI��uǑ�
�R2�UomX:��`�lCqQz�����[����w�
��xɀ���,�*G�Χу�`;V[!���]5U1�ާ���ᒴ���(��c��,��m���E=G_ȣxmq�xmG��&��RF��_��)��3�
"�J!��c޹�w0�|Cly�-r��������e�t?���ZAD�|ͽ�C�Hd�-3G���E��T�F�5��f�v��M�'�Z�Y���(/�l&�a��}v�j���pP���
���WB���|Fl��Me��]x�8"�����^�����ʡ�Db3R��e�V�T��h+[�(�;�����J%jHv;�k�G����#_�Q2���X5{WAٹ��J��p��'hx
(	��u='�=Î��?Hb��{����UF�nx�X�ti���}�B�j)��2J��ET���fD|[x��--��D�FDh:�#��w0&�>����'���E�o���5�L�����H�U{��r�_ʷ���&�>6�v��铍����!�~�O#� vn���kP5!Tנ��MwpE^ǧ�TppUxth�IBWP�
j��>�X�w5?��Q_�!�:
��N"�1�y����Sݰ�y��QH���x�A��d��y�!�
f���՟�Pfp7�K���9W�kP���*����>�'�"�(�f�=�ԧ��h�E�99�8R3��k�b	Ǘ�
���գ��c���3������1��0�W���Rt�F� �/�̋��Iz�&V4S:��{W1۹�Bp��4�>���U�خ>�oc��W�S�RK���rU�|�<�,�\F�M,8�ϤE�����h��B�:���H�5jXv՝��y�ւ7�5&��i�+���c���֤��x����a��sJ�ą=�,���$W���H�-�R(?�~��J�;ϗ^).�3��IL�Sp7g�V��z~
)��T³2���S)��}48���a��X^<l��Z�o̵X�6hلs�!��͜#���^��>�x0RC�ӱؔه_h�{,�zQm�p���$oB��0�dwN%���ӵ���n�5�P1����vN����2gd�Z� �Lw����O&��3����.F���(<�Lr9ԥw
ܸ�j[�:��������[%Q3�fX��
PFA[��1�4�Z{�K��fǘ��ͮ���8�yOp$`$\�p5Z�X�bi�'#�fQ�/J��S1���d�"�~��V���ި�L�̄4�'=s("���Ta)Do���݋��lv8d%���G3A����HP���!9�G^�~�����54���nV�=H�L��x��6#eㄯ+vV�v�\�8��e��A���[�39�5��w"�cͺ�����_�ٗA�Z��$.a&���F~(7��J�l|k��. �����Q��x��a����E��lZZh���mp%R�x@�H���;V ��[dv��)�6�~=%>t=�G��F����a�M����+fP&�02�P����)�x�Xa��1|�>:���3�
�D��pz&�1��q�!�{h�
�̙�4��_g�7op=�9I&O�<_�Ϊf������6�U�'ar���묤���i.V���x���%�h�_d��g��y{U�ׅ�ϊ�j$6��\�V�`Ƚ-���F��9o����M�5+��?ׇ�٦U����B�\�3/��.��E�@"��0P�hqa���'�0Cx#�H����S�r���|�ү}�=�޹�np�~��@��,�F�XF��U[}��s���ҁ��W	�p
��1g_؎2��h[��Q$��2����v@R4��aPl2�����E~r����|��_�K7��z�qB��ź*F��Ѣ�V��<���c &�<.�����˫o4�l
��|� �bi�L���Ȅ��Vw�
��|����Ln���w)F��'�����B08�4]�>�U�o
�[6X��ҩ�$��I�7�|�\$4��>#����f�9��:|�
��֨o_s@�O�(=���d���b��^�(���tD�����%�(f䉸�c��YJ��?����5�mw(�z�O�'d���/A�F���#~��0��F�G�5��OX?�L��]E���=�����r陴��d���<7GI3խ�wN��%��j�d�k?j8��>�`�o����4R]=����c:�@�6��Z�f�z��Ȳ��q��?s0����c֍���N��C� Ӆ2:lM%ц�LS�T[3*�N@�w"�%�|7�ʔ��O~~'�&�
m��'T�i��_߿�e#��g��r�T$ׁ���:j�H@;��x������6�=��l0��x��i���J{�4π?+Y�<���P��/���ʔ[�&�
f?r�w�0��j
�b���(r�R�����B���y�A�$�hG�цk$��F���u��O�:7R&����W��պ���D��b�[��XV�ԫ�����&�PE��4���؛E%��YΖ�Mk�X��	���O�%��d�j)a����5]�
���M�鵷�����Tw�һR�d�M08*�>u.
S��hk+�oH<>�)ԛ379�{���aX
v���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``t(���0XX�8���o�&�&�E���ox(x(@T�(�(-^B�U�U�h�g�gc�g�g�n�s�s�w��7d}����
�����۟ �����L��� -�(�(� �P�%P��X�%X��`�%`� �h�%h� ���%��x��%�P �P�e�ll�(���t�"PK*J[lib64/gems/ruby/json-2.9.1/jsonnuȯ��PK*J[G4�)�?�?lib64/ruby/digest/rmd160.sonuȯ��ELF>p@�8@8	@�'�' �,�, �, 0@ 8-8- 8-   888$$�'�'�'  S�td�'�'�'  P�td8&8&8&DDQ�tdR�td�,�, �, 00GNU�$㭝� N������!��T*�BE�����b�&��|
����qX]��픹� aG�X @l��, �F"�z�0 ��<U0��0 %0
2�0 �p"*
�$ __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_rmd160rb_requirerb_path2classrb_intern2rb_const_getrb_define_class_underrb_iv_setrb_ext_resolve_symbolrb_eLoadErrorrb_raiserb_Digest_RMD160_Initrb_Digest_RMD160_Updaterb_Digest_RMD160_Finishrb_Digest_RMD160_Transformmemcpy__stack_chk_failmemsetlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64�����ui	�ii
��,  �, ��, �,  - (- 0- �/ �/ �/ �/ �/ p/ x/ �/ �/ �/ �/ 	�/ 
�/ �/ 
�/ �/ �/ �/ ��H��H�A& H��t��H����5�% �%�% ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!�������%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%}$ D���%u$ D���%m$ D���%e$ DH�=�$ H��$ H9�tH�N$ H��t	�����H�=Y$ H�5R$ H)�H��H��H��?H�H�tH�%$ H��t��fD�����=$ u+UH�=$ H��tH�=�  �)����d�����# ]������w������SH�=��o���H�=�����H�=�H�����H��H�����H��H�5mH������H��H��# H��t#H�=l  ��H��H�5Y[H���W����H�53H�=D�]���H�># H��u�H�
# H�53H�81����f���H�#Eg�����GH�H��ܺ�vT2H�G�����H�G��G\�@��D�GD3GAWD3G�OAVAUD�wATD�oU�oA��
S�A��
D�^�_D1�E��D�VD�~ �D$�D�A�C�2D�l$�A��DGD1�E1�A��
݋^��o�A1�A���
A�E1ĉ\$ȋ^A��D��E�D1�E���A1�B�+��D��D�1�A��ыV��D�A��
�T$�A�E1��
D��A��1�A1��
D�D�F���D�D$�D�E��A1�A���
A�nA1�A��E�A�l$�E1�D�|$�D�n$E�E��A��
A1�A��	A�l
D�l$�A�D�E��E1�E��A�E1�A��D��A�D1�E���(�n(��
�A��
�E1�A��
D��A��1�E1���
ЋV,��D��T$�F�,D��1�A����
F�*A1�D�n0A��D��E�E�D1�E��A��
D�D�f4A1���D�D�d$�E�E��A1�A��E�D�f8E1�A��A�D�d$�D�E��E1�D�D�f<D����	��
�1�D�A��
1�A���
�t$�E1���D�B���y�ZE��A!�A��E1�A��
A�ƋD$�A��1�AЍ��y�ZD!�1��D��E��A��
A1��D�F��8�y�ZD��!�A��1�E1�D�E���y�Z���D��!�A����
D1�A1�
D�D���y�Z��
�D��!�A���
1�A1�D�D�|$��D�G���y�ZE��A!�A1�E�E��4�y�ZA��	A���
1�E��D!�A1�1�D�E���y�Z���D��!�A��1�D�E��
�y�Z���A��
E1���
D��A��!�A1�
D1�D�D�|$���E���y�ZD��!�A���
1�A1�D�D�|$��D�G���y�ZE��A!�A1�E�D�|$�A��A�E��7�y�Z���
1�E��D!�A1�1�D�D�|$��	�E���y�ZD��!�1�A��
D�D�|$��E���y�Z���
D1�A��!�A1�
D1�D�D�|$��E���y�ZD��!�A���
1�A1�D�D�|$��
D�G���y�ZE��A!�A1�E�E��2���nA��A���
��E��D	�A��1�D�D�����n���D��	�A��
1�D�D�|$�
�E�����n���
��A��	�A���
D1�D�D�����n���D��	�A���
1�A��D�D�|$��D�G�����nE��A	�A1�E�E��4���nA��A���
��E��D	�A��1�D�D�|$��	�E�����nD��	�1�D�E�����nA��
��
ȉ��
��A��	�A���
D1�D�D�|$���E�����nD��	�A���
1�A��D�D�|$��D�G�����nE��A	�A1�E�D�|$�A��A�E��7���n���
��E��D	�A��1�D�D�|$��
�E�����nD��	�1�D�D�|$��E�����n��A��
��A����
	�A���
D1�D�D�|$��E�����nD��	�A���
1�A��D�D�|$��D�G�����nE��A	�A1�E�E��5���nA��A���
��E��D	�1�D�E��ܼ����A1�D��!�D1�D�D�|$���E��ܼ���A��
1�D!�1��
D�D�|$��E��ܼ���1�A��!�1��
D�F��ܼ���D�A1�E��A!�A1��
E�D�|$�A��A�E��7ܼ���D1�E��!�1��
D�D�|$���E��ܼ�A1�D��!�D1�D�E��
ܼ�A��
��ȉ�1�D!�1��
D�D��ܼ���	щ�1�A��!�1��
D�D�|$��D�G��ܼ�A1�E��A!�A1��
E�E��2ܼ�A��	A��D1�!�1��
D�D�|$���E��ܼ�D��1�!�D1�A��
D�E��ܼ���ȉ�1�A��D!�1��
D�D�|$��E��ܼ�A1�D��A��!�1��
D�A�NjD$��D�F��ܼ�A1�D��D!�1��
D�D�D$���E��0ܼ���1�A��!�1�D�D�D$����
D�G��8ܼ�A1�E��A!�A1���
E�D��N�S�A��Aȉ���	��
D1�A��D�D�|$�A���	�E��N�S�D��D	�A��
1�E��D�D�|$�A����E��N�S�D��	��
A��1�D�D�|$���E��7N�S����	֋T$�1�D���D�A��
F��N�S�E��A��D��A��	�A��
A��
N�S�1�D�E����D���	��
1�A����D$�A���D�F��8N�S�D��A��	�A��
B��N�S�1�D�E��A���
D�E��A	��
A1�A��AЋT$�A��A��A�2N�S�D��	�D1���C��;N�S���
��A��D�A��E��E	�A��
A1�E��A�A��A��D��A�	�A��
N�S���
D1�ȋL$��
�1N�S����D	�A��
1�E��΋L$�A���D�F��N�S�D��	���
1�A��D�D�D$�A����E��N�S�D��	�1�D��F�:E��A��C��<N�S�A��
D�D$�D�L$�A��D��D�	�D1�D�G����
�4A�ϋW�t$��t$䍌N�S��t$̉L$��OB��拢P�w��A	ȋL$�D3GA���拢PD��A��DG��	�D1���	w�T$�D�OB��
拢PD�L$�D���D	�A��
1�D����ҋD$��		��
D�B��0拢PA��1�A���D��D�t$��	��
D�G��拢PA��1�A��D�D�t$��
D�G��拢PE��D�L$�A	�A1�E�D�t$��
A��A�E��6拢P���	��
D1�D�D��拢P��Ή���D	�A��
1�D�D�t$��E��拢PD���	��
1�D�E��拢P��‰��	��
1�D�G��拢P��D�A��A��A	�A1�E�D�t$�A��A��
E��6拢P���	��
D1�D�E��拢P��Ή���D	�A��
1�D�D��拢P���D���	��
1�D�E��拢P��‰��	��
1�D�G��拢P��D�A��A��A	��
A1�E�E��1$�M\A��A��D1�!�1��
D�D�t$��	�E��$�M\D��1�!�D1�A��
D�E��$�M\��
щ�1�D!�1��
D�D�t$���E��$�M\��1�!�1��
D�D�t$��D�G��$�M\A��A1�A!�A1�E�D�t$�A����
A�E��6$�M\��D1�!�1��
D�D�t$���E��$�M\D��1�!�D1�A��
D�D��$�M\��	щ�1�D!�1��
D�D�t$���E��$�M\��1�!�1��
D�G��$�M\��D�A��A1�A!�A1��
E�D�t$�A��A�E��6$�M\��D1�!�1��
D�E��
$�M\���D��1�!�D1�A��
D�D��$�M\��щ�1�D!�1��
D�D�t$���E��$�M\��1�A��!�1�D�D���
G��$�M\A1�E��A��A!�A1��
E�D�D$�A��
A�A��0$�M\E1�E��A!�A1���
A�D��A��
A����A�A���>pmD	�1�΋L$��	֍��>pmD��A��
��	�D1�щ����A���>pm	�D1�‰����D��
G��2�>pm	�A���
1�A���
D�D�t$��D�G���>pmE��A	�A1�E�D�t$�A��A�E��6�>pm���
��D	�1�D�D�t$���E���>pmD��A��
��	�1�D�D�t$���E���>pm���
��	�D1�D�D�t$���E���>pm���A��	�A���
1��
D�D�t$��D�G���>pmE��D�L$�A	�A1�E�E��5�>pmA��
A���
��D	�1�D�D�t$���E���>pmD��A��
��	�1�D�D���>pm��щ��
��	�D1�D�D�t$��
�E���>pm���	�1�D�F���>pm��
��
D�A���
A��A	�A1�E�E��1�>pmA��A���
��D	�1�D�D�t$���E���vmzD��A��
1�!�1�D�D�t$���E���vmz���
D1�!�D1�D�D���vmz��‰�1�!�1�
D�G���vmz��D�A���
A1�A!�A1�E�E��2�vmzA��A���
1�D!�1�D�D�t$���E���vmzD��A��
1�!�1�D�E���vmz��щ�D1�!�D1�D�D�t$���E���vmz��
��1�
!�1�D�D�t$��D�G���vmzA���
A1�A!�A1�E�E��5�vmzA��A���
1�D!�1�D�D�t$��	�E���vmzD��A��
1�!�1�D�E���vmzD�L$�щ�D1�!�D1�D�D�t$��
��	�E���vmz���
1�!�1�D�D�t$��D�G���vmzA���
A1�A!�A1�E�D��5�vmzA��A���
1�D!�1�D�E��	�vmz���D��A��
1�!�1�D��AՉ��
D1�A�A�։�A1�1�
E�A��A�D1�A�A��E�A�D��A��
1͉�D��D1�D1�A��
A���A��A�ދ\$�D1�D���D1��	���D�D�\$�1����A��
D1�D�Dl$��
���1�1���
Aʼn�A��E�Dd$�D1�D��A��
A�1�A��E�DD$�D1�A�D��A��
A��D1�A�t$�D1��D����L$�D1�A��
1�щ��
��
D1�D�Dl$�1�AՉ��
A��1�E�E�D1�D��A��
A�1�A��E�DD$�D1�A�D��A��D1�A�D�D1�D���D���
�A��
L$�A��
D1�
A��A��D��A��
DWA1��AɋOD	�A��D�E�A1�Dl$���GE1�EʼnOD�A��D��G�G�AċD$�A�E�1�T$�[D�g��]A�B�D�O�A\A]A^A_�ff.���AWI��f�AVI�OAUATI��USH��xH�t$dH�%(H�D$h1��G)D$ )D$0H��L�)D$@D�H�� G�W�\)D$PJ�'H�L$H��?w7H�L�����Eg\H�D$hdH3%(��H��x[]A\A]A^A_�DL�l$A�@H�\$ A)�H|$L��L��M)����AooH��L���Aow,�Ao<)l$ �AooL)t$0)|$@)l$P���L�d$I��tU1�M���H��L����L��o�oP�oX �o`0)L$ )T$0)\$@)d$P���EH��L9�r����I�H�\$H�l$��L���?A�G\��rXH�UH�\$I�W��H�sH�L�H��H�L�H)��H)݃��������1҉у�H�|
H�<9�r�������u/��������UA�W�D$������T�H�L$f�T��t����UH�L$A�W�T��T��[����&�fD��AT�?UH��SH��1�H��PdH�%(H�D$H1��G\I���D�)�H�|����oM�oU,�o]<�oeL�}\7)$)T$)\$ )d$0��UL��H������D$8�E��	ЉD$<�'�1�H��t1���H�T��
��
�l�
���L����TH��H��u�H�t$HdH34%(�u5H��P[]A\ÐL��H�����f�H�D$0)$)D$)D$ �V�������H��H���digestDigestBaseRMD160rb_digest_wrap_metadatadigest.sorb_digest_wrap_metadata not found;D��`h�����������8���h���dzRx�$ ��FJw�?:*3$"D���\P��E�l
O|��<@��2N�I�B �F(�E0�H8��0H(O BBBH����*F�I�F �B(�D0�A8�D�x
8A0A(B BBBF0 ���� F�F�D �Ip�
 AABBGNU� ��, @`_nx���	
�%�, �, ���o`�
�X/ 8`X	���o���o���o�o����o8- �	�	�	

 
0
@
P
`
p
�
�
GA$3a1�	�%GA$3p11130�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113��%GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�,
GA+GLIBCXX_ASSERTIONSrmd160.so-3.4.4-3.el8.x86_64.debugD��7zXZ�ִF!t/��
�
]?�E�h=��ڊ�2N�$#�@�O_~�o�Y��9��+�0��Nr4�$Dk
%��Wj��ܯ-��(��h�C]�	�*%����}�����c��X/AS��1����z���Y)�Q�@�kXkc^_t�ޓg�?&3ټE���S	f�@;oY�"�xGO��dp�`U��m�p{04�t+���6�pNv��\��w�����Rq��P�u���E��$�V�R�%
�Jb<�t;�@�B"�����2a�Ҏ�~�|@_��τ�2зf�]�
~h�C��̓e�`*o���s��l��Rp8O.ԁ�g�;x�H��`���A�7c���H�*�Q�KLN㈰�xH��5܋RϦ]U��k�Z�ЕRI�b��0ώ�]qfR ����l|�����ryh�9�0y4�n���M��m&��Q@ڛ��t���U�q)�U��*��]5/݁�FW�x�2v��3:=bʮ����e�Q�dT/�26�u�
.���m�zr�0�O8Fd��j��#Y�>@b�R��]�
?�d���`T�}��vE���'k`�C�I�d��k����s��[p�?�i6��B�񧃧8׶Z��:e
l1�$x�Bn��&�d�Nk��j�]&��4�<�{�g�a�JY=O#��D����$�Ə�p>�C
��Ŧ�7�a�X3����l\�`�z���`!�>�\?Äm�9S��\g��6�F��ɀ��J�+��a�}UT	��@X��w���O�� �0��t!�S�`Y�}+�U�Վ�l����8��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``D(��X0�8���o��2E���o@TXX^B``8h�	�	c�	�	�n�
�
�wppP}�%�%
�2�%�%h�8&8&D��&�&T��'�' ��, �,��, �,��, �,X �8- 8- �X/ X/��0 0�0`04(D4P�7"PK*J[���O�Olib64/ruby/digest/sha2.sonuȯ��ELF>�@�H@8	@0202 �;�; �; @ �<�< �<   888$$222  S�td222  P�td---��Q�tdR�td�;�; �; 0GNU��ύOH��7�$�~~�zȤA�
�D!�j�LI "%DM(--�I�k�xY�qX��|s\2&��"6�BE��b{Y��7��e���~���\&�˨I�ܝR���FVkY�'��.{c ��U ���, �F"�v�%�%~�0�*�!��k�@ �@ S`&qUP%w� ��@ kPD��8k�&���� ~
$q;P&	�����<l����'w@�$�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_eLoadErrorrb_raiseInit_sha2rb_intern2rb_requirerb_path2classrb_const_getrb_define_class_underrb_ivar_setrb_ext_resolve_symbolrb_Digest_SHA512_Initrb_Digest_SHA512_Updaterb_Digest_SHA512_Finishrb_Digest_SHA384_Initrb_Digest_SHA384_Updaterb_Digest_SHA384_Finishrb_Digest_SHA256_Initrb_Digest_SHA256_Updaterb_Digest_SHA256_Finishrb_Digest_SHA256_Transformmemcpyrb_Digest_SHA256_End__stack_chk_failrb_Digest_SHA256_Datarb_Digest_SHA512_Transformrb_Digest_SHA512_Lastrb_Digest_SHA512_Endrb_Digest_SHA512_Datarb_Digest_SHA384_Endrb_Digest_SHA384_Datalibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby34/lib64�ui	�����ii
��; ��; @�; �;  < (< 0< `< h<  p< �< �< "�< �? �? �? �? 
�? �> �> "? %? ? ?  ? (?  0? 8? @? !H? P? X? `? h? p? 	x? �? �? �? �? �? �? 
�? �? ��H��H�a1 H��t��H����5Z0 �%[0 ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q�������%�. D���%�. D���%�. D���%�. D���%�. D���%�. D���%�. D���%}. D���%u. D���%m. D���%e. D���%]. D���%U. D���%M. D���%E. D���%=. D���%5. D���%-. D���%%. D���%. D���%. D���%
. D���%. D���%�- D���%�- D���%�- DH�=). H�". H9�tH��- H��t	�����H�=�- H�5�- H)�H��H��H��?H�H�tH��- H��t��fD�����=�- u+UH�=�- H��tH�=~) �����d�����- ]������w����PXH�5�H��H�$- H�81����f���AU�H�=�ATUSH�����H�=�I�����H�=������H�=�H�����H��H���'���H�5kH��H��H�����I��H��, H����H�=H) ��L��L��H���x���H��H�5RH���F���I��H��, H����H�=�( ��L��L��H���<���H��H��H�5�
���H��H�h, H���H�=P( ��H��L��H��H��[]A\A]���fDH�5�H�=����H�, H���>�������H�5{H�=��]���H��+ H���J�����H�5SH�=d�5���H��+ H���^������1�H��t8fo
}fo�f�H�G G(�WG8GHGX�ff.����AWH��L�TAVA��/�BAUATUH�o(SD�I��D�_D�x�XD�hH�|$�D�`��@H�l$�D$��%DE�0A��D�d$�D��E��E��A��I����A�҉ىډ؋>����D!�H��1ʉ��A�9��I��1ʉ��D!�1��D$��D����
D���!�A�D���C�<71�D���
1�D��1�D!�1��H��D�L9��e����l$�L�xH�l$�D�d$��D$�i���,@A�D�\$�I��E��D�l$�A��A��D��D$��D��D�aD���D�L�D��D��A������1�q��D1�D�L$�D�D�E��D��A��
A����
D1�A�΃�	A����D1�A��N�t�A!�AD���Ɖ�����A�61�����1�����D!�D1�E�����Ή��t$��
t$�1ȉ�E!�A�
1�D��D1�!�D1���A��@����H�D$�0PDPDXDHxXDh[]A\A]A^A_����H���3AVAUI��ATI��USH�G H��H����?��H�o(I��H��?�0I�E�H��L�t@�oH��L��H��@E�oK�M�oS�U �o[�]0���I�D$ L9�u�A��?M����[]A\A]A^�f.��@)‰���H�|(I9�����rzH�L�GI��I��H�H�D�H�D�L)�I)�׃��r��1��ƃ�M�2M�09�r��IT$ I�l$(H�I)�H��L��I������I��?�����U������������t�����t��D�f�D��DD��A��sWA������tA��U�tA�T�f�T�I��Ml$ []A\A]A^ÐL��I���D���Ml$ []A\A]A^�fDI�H�uH��H�ED��I�T�H�T�H)�A�D-I)���r���1҉у�I�<H�<9�r�놋��D��D����A��UA�T��T��a���@��ATUSH��H����H�G H��L�g(H��H��H�H�W ��?���P���D(���8����@��L��H�����f�C(I�D$0AD$AD$ H�S H�S`L��H���c���1���ʉ�TH��H�� u�H�{H�1�H��H�C`H)��Kh���H��[]A\�f�G(AD$AD$ I�D$0�G(����f��8H�L(1�)Ѓ�s]������W������L�����1�f�D��>���@�@��)�H�t(�������1������9�r����fDH�q��H�H�D�H��H)�ȃ��������1҉у�H�<9�r���������D����f���UH��SH��8dH�%(H�D$(1�H��tfH��H���3���H��H��L�C H�=�
f��H��H�������������J��B�L9�u��E@H�E@H�\$(dH3%(u7H��8[]�H�WH�H��H��H�G`H)�H��H�׃�h���H�1�������AUI��ATI��UH��SH��xdH�%(H�D$h1�H��H����L��L��H���P�H��H�����H�L$hdH3%(uH��x[]A\A]��e�D��H��1�H��tofo�fo
�H�GPH�Xfo�fo�H�Gp��G�O�W�_�H��)����1����H�H�BH�H�B@�f���AWH��L��AVI�"�(ט/�BAUATUH�oPSL�I��L�_L�xH�X L�h(H�|$�L�`0H�H�@8H�l$�H�D$�H���%@M�0I��L�d$�L��M��M��I��I��H��I��H��H��H��H�>H��H��L!�H��H1�H��H�I�9H��I��H1�H��H��L!�H1�H�D$�H�L��H�H��L��H�H!�I�L��H��K�<7H1�L��H��H1�L��H1�L!�H1�H�H�5L�L9��I���L�xH�l$�H��J�i��H�l$�L�d$�H�D$��+I�L�\$�I��M��L�l$�I��I��D��H�D$�H��H��L��D�aD���L�L�L��L��I��H��H��H1�q��L1�L�L$�L�D�M��L��I��I��H��L1�A�΃�	A����L1�I��N�t�I!�IHD�H��H�H��H��H��I�6H1�H��H��H1�H��H��L!�L1�M��H�H��H�H��H��Ht$�H��Ht$�H1�H��M!�I�H��H1�L��L1�H!�L1�H�H�A��P���H�D$�H0HPLPLXLH Hx(HX0Lh8[]A\A]A^A_�ff.���H���sAVAUI��ATI��USH�O@H��H��H������H�oPI��H���uI�E�H��L���D�oH��L��E�oKM�oS U �o[0]0�oc@e@�okPmP�os`u`�o{p}p�F�I�D$@HI�D$@H=�wI�D$HH��L9�u�A��M����[]A\A]A^�f���)‰�A��H�DPM9�����ryH�H�xH��H�J�L�J�L�H)��H)Ɖ�����H�I�L$@��H�I�T$@sI�D$HI�l$PL�M)�L��H��I����I�������[���fD��������t�����t�B�L�fB�L�H�O@��D��A��sgA��������I��Ml$@M�l$@�����I�D$H[]A\A]A^�f.�L��H��I����Ml$@M�l$@��������I�H�}L��H��H�ED��I�T�H�T�H)�A�L-H)���H��v���A��E���f���A�D�f�D
��V�����B�L�B�L�H�O@���A��EA�D��D
��+������UH�oPSH��H��H�G@H�WHH��H��H�H�WHH�H�w@�����P���DP���pvj����H��H�����H�}H��1�H��H�CPH)�H�Ev��~���H�H�SHH�s@H���H��H��H���H��[]���pH�LP)Ѓ�rwH�y��H�H�D�H��H)�������1��H�H�SHH�s@�f.�H�GPH�XH��1�H�G`H��H)���p���H��CP��\���fD�����t���t���1�f�t��f.���H�LP1�)Ѓ�s-�����������������1�f�D����@H�q��H�H�D�H��H)�ȃ���������1҉у�H�<9�r��p���fD����D��������D��@���ff.���USH��H��H��t(H���F�1�@H�H�H�H�TH��H��@u�H�{H�1�Hǃ�H��H)�������H�H���[]�ff.�@��UH��SH��XdH�%(H�D$H1�H��tlH��H�����H��H��L�C@H�=�f��H��H�������������J��B�L9�u�ƅ�H���H�\$HdH3%(u=H��X[]�H�WH�H��HLJ�H��H)�H��H�ׁ�����H�1���7����AUI��ATI��UH��SH���dH�%(H��$�1�H��H����L��L��H���Z�H��H����H��$�dH3%(uH���[]A\A]���f���H��1�H��tofo:fo
BH�GPH�Xfo>foFH�Gp��G�O�W�_�H��)����1����H�H�BH�H�B@�f��������USH��H��H��t(H�����1�@H�H�H�H�TH��H��0u�H�{H�1�Hǃ�H��H)�������H�H���[]�ff.�@��UH��SH��HdH�%(H�D$81�H��tfH��H���c�H��H��L�C0H�=�f��H��H�������������J��B�L9�u��E`H�E`H�\$8dH3%(u=H��H[]�H�WH�H��HLJ�H��H)�H��H�ׁ�����H�1�����ff.�f���AUI��ATI��UH��SH���dH�%(H��$�1�H��H�����L��L��H����H��H����H��$�dH3%(uH���[]A\A]��Y���H��H���rb_digest_wrap_metadata not founddigestDigestBaseSHA256rb_digest_wrap_metadatadigest.soSHA384SHA5120123456789abcdefɼ�g�	j;�ʄ��g�+���r�n<�6_:�O�т�RQl>+�h�k�A��كy!~��[؞�]����|6*)�b�p0ZY�9Y���/1��g&3gXh�J�����d
.ۤO��H�G"�(ט/�B�e�#�D7q/;M�����ۉ��۵�8�H�[�V9����Y�O���?��m��^�B���ؾopE[����N��1$���}Uo�{�t]�r��;��ހ5�%�ܛ�&i�t��J�i���%O8�G��Ռ�Ɲ�e��w̡$u+Yo,�-��n��tJ�A�ܩ�\�S�ڈ�v��f�RQ>�2�-m�1�?!���'����Y��=���%�
�G���o��Qc�pn
g))�/�F�
�'&�&\8!.�*�Z�m,M߳��
8S�c��Ts
e��w<�
jv��G.�;5��,r�d�L�迢0B�Kf�����p�K�0�T�Ql�R�����eU$��* qW�5�ѻ2p�j��Ҹ��S�AQl7���LwH'�H�ᵼ�4cZ�ų9ˊA�J��Ns�cwOʜ[�����o.h���]t`/Coc�xr��xȄ�9dnj(c#����齂��lP�yƲ����+Sr��xqƜa&��>'��!Ǹ������}��x�n�O}��or�g���Ȣ�}c
�
���?G5q�}#�w�(�$�@{��2���
��<L
��gC�B>˾��L*~e��)Y��:�o�_XGJ�Dlg�	j��g�r�n<:�O�RQ�h��ك��[�/�B�D7q����۵�[�V9��Y��?��^����[���1$�}Ut]�r��ހ�ܛt�i��G��Ɲ�̡$o,�-��tJܩ�\ڈ�vRQ>�m�1��'��Y����G���Qc�g))�
�'8!.�m,M
8STs
e�
jv.��,r��迢Kf�p�K£Ql���$�օ5�p�j��l7LwH'���4�9J��NOʜ[�o.htoc�xxȄnj�����lP������xq�;����0�����4P�p������ �@��p��� �����0�0�����������P������TP���h`���|��������zRx�$���FJw�?:*3$"D(��\p�AAK8xt��F�N�A �A(�D0�
(J ABBK���D@��8F�L�H �B(�A0�E8�0A(B BBBt�<O�B�E �D(�A0��
(A BBBK������H0�����_
(A BBBBR
(A BBBG,����F�A�A ��
ABD(�x��E�D�DPx
AAA8��kF�E�D �D(�D�H
(A ABBA@�~@0���F�L�L �B(�A0�E8�U0A(B BBBdt���O�B�E �D(�A0��
(A BBBJ������H0�����f
(A BBBK(�@�E�E�G �
AAH$4�qE�A�G \FA(0���E�D�Dp~
AAA8\0�wF�E�D �D(�G�Q
(A ABBA�t�~���	$���qE�A�G \FA(�4����E�D�D`x
AAA8���wF�E�D �D(�G�Q
(A ABBAGNU��@�; @��0�� @h����`
((�; �; ���o`� 
�> p�X
�	���o���o
���o�o�	���o�< ������� 0@P`p�������� GA$3a1`5(GA$3p1113�MGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113P'(GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSsha2.so-3.4.4-3.el8.x86_64.debug���5�7zXZ�ִF!t/��o1]?�E�h=��ڊ�2N�`q�� ��/4��'�'ܰ�%P<��0�$��X��5ͮ1z
Fp�+�h�l�m�rl�t�2����F�d�֭��ϵ\?1i��Q5��3RZ�<��c�K���j��D�ZQum;����N�fr�R�n�+#���+X�"����XWP���"x��m���7P���9O�OG�g}Λ���z����sA��D}��-���Eh�m?C��kT�ܬ.�B����uV�Q�w(�C�/��c��Ů.Ӥp3��5]%t8�;��>�2�JI���.�����|Oȫa���3h[��}��Ý��ƫ�Ϳ7A���-{l�*ش=u�
۾���K��˼�rI�@߳�e�P�S��	.�ڔ�� �Z��0!���@M�Y�]�H���y5៻���nu��m�9�,��?��|��O�nH�B	!�Mv�y�1�c�����2��SO�>Yf�dZt�+� �j���7�ӧ�S�K4M*��!��GB\YM�6W��k�q_�I�~�VE��q+�d�"�J����Ҋ�D���V��V�*��3l��S�c���1v����u�H6��TV�/:�6e�!�E��^kd��=
�qx^�ꕪ$�����W�
I���ف����A�ئ�s����0�Y
#>p��&�<�`n.4�|N�1E?A�v9�>ף��_	ҹ��v -��5�P�c�f��V1T�=���	o��"���-���(
��,D`��	YH��|�%�x�&�~S�Uh�{��a~h�s�����?'�Ol6�@GH+����������`9r��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``�(  �0��8���o�	�	LE���o

@TX
X
�^B��ph``c���n00�w��W}((((
�@(@(� �--���-�-P�22 ��; �;��; �;��; �;� ��< �< ��> �>�@ �?�@`�?D(,Dt�G"PK*J[�ݧN�/�/lib64/ruby/digest/md5.sonuȯ��ELF>�
@�(@8	@ �� � (@ 88 8   888$$���  S�td���  P�td   DDQ�tdR�td�� � (0GNU;���u,�7
�_���	i�|�F!A��B�BE��^�U��|�qX�?Tw}��S� ^� *i��, �F"�w�p-d  U��w  k  ���p�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_md5rb_requirerb_path2classrb_intern2rb_const_getrb_define_class_underrb_iv_setrb_ext_resolve_symbolrb_eLoadErrorrb_raiserb_Digest_MD5_Initrb_Digest_MD5_Updaterb_Digest_MD5_Finish__stack_chk_failmemcpylibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby34/lib64Zui	|����ii
�� �� @� �   ( 0 � � � � � 
p x � � � � 	� 
� � � 
� � ��H��H�� H��t��H����5 �% ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1�������%U D���%M D���%E D���%= D���%5 D���%- D���%% D���% D���% D���%
 D���% D���%� DH�=) H�" H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=~ �9����d����� ]������w������SH�=�����H�=�����H�=�H�����H��H�����H��H�5�H������H��H�  H��t#H�= ��H��H�5�[H���W����H�5`H�=q�m���H�� H��u�H�� H�5cH�81�����f�AWAVAUATUSH��D�OdH�%(H��$�1��G�D$8�G�D$,�G�D$0@��t,�o�oN�oV �o^0H�t$@)D$@)L$P)T$`)\$p�\$0D�t$,E��D�ʋL$8D�>��E1�D�nD1�D�|$<D!�D�l$1�D��x�j׋F�NE�A��A�Í�V���L$E�D�\$4E!�D1�D��E1�A�B��1�p $D�vA��E�C���ν�D�t$D�vD!�D1�E��D1�‰�n��D‰l$!�A1�D1�F���|��n �D��D�f��
�l$ �D�d$!�D1�G��*ƇGD�f$D�A���A1�D�d$$�A!�A1�A��F0�D�n4E�A��A��A1�D�l$(A�E!�A1�A���F�AЉ�A��D1�E�D!�1ʍ�
ؘ�i�n(�D���
D1�D�!�D1�G����D�D�f0�D����1��!�D1�F���[��D�A��A1���D��D�V,!�1�A����\�D�A����A1��A!�A1�A��"�kAЉ�A��
1�A�D!�1�A��
�q��D�n8‰��D1�D�!�1�A���Cy��D����1��!�D1�ً^<���1��F��!�I!�1�A��b%�D�\$D�A���
�A1�A!�A��@�@�D�\$A1�AЉ�A��A�D1�!�A��
QZ^&1��D����	D�1�!�A��7�Ƕ�D�|$D1�ȉ���1�D!�G��]/�1�����1�!֍�SD1�D�A����A1�A!������A1�AЉ�A��	A�D1�!�A�����D�|$$D�\$1��D����D�1�!�A��7���!D�|$ D1�ȉ���1�D!�G���7�1�����1�!�A���
��D�\$(1�D�A���	�A1�A!�A���ZEA1�AЉ�A��A�D1�!�A����D�\$1��D����D�1�!�A��3���D�\$4D1�ȉ���1�D!�G���og1����	�1�!�A���L*�1�D�A����A1�E��A��E!�A1�AЋT$A��A�B9����E1�D1�ANjD$ A��EǍ���q�D��D1�D1��A��2"a�mD����D�1�1����C��8��G��;D꾤D�|$D�\$�1���A�����KD�|$(��	1��1�D�A��A��`K����A1��A1�AЉ�p���A��1�A�D1�ʉ�A��7�~�(D�|$<��D1�D�1��D��G���'���	1��1�Ɖ�A���0��D�\$��1��1�D�A��A���D�\$$��A1��A1�AЉ�A��39���D�\$A��1�A�D1�щ�A������	D1�D�1��D��F���|����1�1�Ɖ�A��eV��D�\$4��1��1�A���A��D")�D�|$A��1�A�D1����A��6��*CD�t$��	��D�	�D1��D��G���#��D�l$�����	�1���A��
9���D�l$��
���	�1�D�A��A���Y[e��A���A	�A1�Aȉ�A�����D�t$ A����A�D	�1����5}�����D�	�D1��D��G���]��D�\$��
���	�1���A��O~�oD�t$8�����	�1�D�A������,���A���A	�A1�Aȉ�A��C�D�l$(A����A�D	�1����A��5�N��
��D�	�D1��D��G���~S������	�1�։�A��
5�:������	�1�D�A��A�����*D�\$$��A���A	�A1�D�A��A��3�ӆ�
A���A	�A1�D�E����D�G�	�A�1���A�D$,L$0D�O�G�OH��$�dH3%(uH�Ę[]A\A]A^A_�����ff.�@��H�#Eg����H�H�GH��ܺ�vT2H�G����H����AVAUATI��H��UH��B��S�?H���U���E��?uTI��I��?��I�D$�H��L�l@f�H��H��H��@�A���L9�u�A��?M����[]A\A]A^�fD��M�4<I��@vt�@H�uH)�H�>����������t����t��D�D�fD�D�fDN�d'�H��H����I��?�O���I���v���fD��L�mL��L���I��@�X���L��H���|����H����[H�}L��]L��A\A]A^�I�f�H�L�HI��I��H���L�D�L�D�L)�I)�Ѓ���O�����1�A�ȃ�O�O�9�r��3�������D�D�D�D�����ff.���ATUH��SH��H��dH�%(H�D$1�I��H��H��������A�H��H��u܋�7H�5H���)Ѓ�?H�P��L��H����1�H��H�����T���TH��H��u�H�t$dH34%(�u	H��[]A\�����H��H���digestDigestBaseMD5rb_digest_wrap_metadatadigest.sorb_digest_wrap_metadata not found�;D �`��p�0�P�������$P����zRx�$���FJw�?:*3$"D`�\��E�l
OL|h�B�B�B �B(�A0�A8�G��
8A0A(B BBBA�8���-h�T����O�B�B �H(�L0�[
(A BBBGx�����H0�����q
�(H� E�B�B�N0L�����F�A�D �G0�
 AABAGNU��@� @X1@JZ�	
8� � ���o`��
�X  ��	���o���o����o�o|���o8 P	`	p	�	�	�	�	�	�	�	�	
GA$3a1	EGA$3p1113�GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113P8GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYPaGA+GLIBCXX_ASSERTIONSmd5.so-3.4.4-3.el8.x86_64.debugcfz�7zXZ�ִF!t/��]?�E�h=��ڊ�2N�`]�. ��Uf�G?*��5�*u��wι�6�=ce��;mb��ۨ�p�G��LU����N�t�U,hO�c��(m�`b7U8ג��}�vb��I-M�:��X�E�ދ#��s��e�Z�gȖ�6�@n���/#��r�X�ㅾ�uZ��֤8�W�_	'S�,o�����<vQس�P��?��6:���Rx��]ә��<Ϫ��|rF�-;����M9f��yy]ߖD1/P��cuS�
fc��Ĉ/bX�L*��ϛ�hbj"����ˉ�u
)���A|�P�B�
#�>y�m����ÙC �F��W��{�Y�0�T�w��Y��ؐ�s5��x�Q߰
�{�*��9�X�߄�T���k�-���d�k:&갠�4?Jˎg�i��}G��:�r%8���3�1G.U�9�|�,�iY90���IIh�0�G0A�!����OJ��{��Fg��Bt15��o�E}`�K�V-{�b2�!��0��M�f���N�R�eX��&,j������Z��%o��oT�.!���vV���;R>�����-�X�0!q]g�#R�!wx�Q�^~��-�ƋlK��]!�o�<�R]�����5��S�eHf�{A4"]��ʳ.��]S�P�QEMI��3�>�A���y����!�$\�ߥ��|����{w�8LV�	Ie�/���E1��A��Sc�0�GV!�3zE���#�+�2ԇho7���b�q��C�8�c��WJ�}��LjK}�̌Xj.�����c,��3nl��e�#ڶ����������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``@(��(0���8���o||.E���o��@T��^B�� h		c@	@	�n

�w�
�
h}88
�``� �  D�hh���� �� ��� ��� �X �8 8 �X X��  �� `�$$8$`�'"PK*J[1'�?�?lib64/ruby/digest/sha1.sonuȯ��ELF>@@�8@8	@`#`# �,�, �, 0@ 8-8- 8-   888$$@#@#@#  S�td@#@#@#  P�td�!�!�!DDQ�tdR�td�,�, �, 00GNU&=�ۦ�!9o1�.[���]&b�D��$h���BE��D�b4��|�Z�W�qXEV��8�� _=� 6j��, �F"�x�@5�0  	�0 ����0 U��s__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_sha1rb_requirerb_path2classrb_intern2rb_const_getrb_define_class_underrb_iv_setrb_ext_resolve_symbolrb_eLoadErrorrb_raiserb_Digest_SHA1_Initrb_Digest_SHA1_Updaterb_Digest_SHA1_Finishrb_Digest_SHA1_Transformmemcpy__stack_chk_faillibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby34/lib64wui	�����ii
��, ��, ��, �,  - (- 0- �/ �/ �/ �/ �/ 
p/ x/ �/ �/ �/ �/ 	�/ 
�/ �/ �/ �/ 
�/ �/ ��H��H�q& H��t��H����5�% �%�% ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!�������%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ D���%�$ DH�=�$ H��$ H9�tH�~$ H��t	�����H�=�$ H�5�$ H)�H��H��H��?H�H�tH�U$ H��t��fD�����=E$ u+UH�=2$ H��tH�=! �9����d����$ ]������w������SH�=$�o���H�=����H�=H�����H��H�����H��H�5�H������H��H��# H��t#H�=�  ��H��H�5�[H���G����H�5�H�=��m���H�n# H��u�H�:# H�5�H�81����f���AWI��AVAUATUS�~$D�VD�N�A���~,D�E��D�f�NA�ω|$��~0D�͋VD�nA�A�A���~4D�ND�t$��F �^(A�D�T$��E�Aɉ|$��~8�v<ˉ\$�D�L$�A���Ήt$�A�s��ˉ\$�E�KA͉�A�sL�\$�ȉ�A�sA�ۉ|$�A��D��D�\$�1�D�t$�!�D��A��1�D��E�ډ\$�A��>�y�ZA��E���D��G��4�y�ZD�t$�D1�D�D�t$�!�D1�D�L$�A��9�y�ZA���A��D�A��D��A��D1�!��D1�F���y�ZD�A��A��D�E��A1�A!���E1�F��
�y�ZE�A��A��E�A��A1�A!�A1�A��5�y�ZE�E��A����E�A��A1�E!�A��A1�A��>�y�ZD�t$�A�D���A��D1�D!�A��1�A���y�ZD�t$��D����D��D1�D!�A��D1�F���y�Z߉���D��D1�!��D1�G���y�ZD�A��A��D�E��A1�A!���E1�G���y�ZD�t$�E�A��A��E�A��A1�A!��A1�A��6�y�ZD�t$�E�E��A��E�A��A1�E!�A��A1�A��>�y�ZD�t$�A�D���A��D1�D!�A��1�A���y�ZD�t$��D����D��D1�D!�D1�G���y�ZD�t$�߉���A��D��E1�D1�A1�1�!��D1�G���y�ZD�t$�D�A��A��E1�D�E��A�A1�A!���E1�G���y�ZE�A��A��E�A��A1�A!��A1�E�E��A��E�A��E1�D3L$�A�D��A��A1ٍ�5�y�Z�l$�E!�A1�A��D1�A1�3L$�3T$�A�D��D1�3T$����1�A�t$��‰T$�D1�A��3t$�E1���E!ԍ�>�y�ZA��A1܍��y�ZD��A�D���A�D��D1�D!�A��D1�F�����n�T$��D����D1͉�D1��D�A���D��E��1�E1�A��D��A��E1�1�A��A1��A��G�����nD�D�T$�D�D�l$�A1�E1�E��A1�A1�A��E��A��A1�G��
���nA��E�A���E�E1�A��D3L$�D3L$�A1݋T$�A�A1�G��!���nE�1�E���A��D1�D3|$�E�D1�A���A1�E1�8���nA��A�D���A��|$�D1�A��D1�E1���E1�A�������nA�D���Aߋ\$�1�1�D1��É�D��D1덬*���n�T$��T$�D1��D�����3T$�A����1�1ʼn�D����D1�D1�F��2���n�T$��T$�A��3T$�A����A�l$�1�1���D����D1�1�F��*���n�T$���A�D����A�l$�3l$�D1�3l$��ʼn�D��1�F��"���n�T$�D1�A��D�E��A��A�l$�D1�A1�D1�3l$�A1�D3D$���A����D1�F��:���n�T$�D1�A��D�E��A��D�D�|$�D3|$�E1�D3|$�A��D��E��E1���n�T$�E1�A��D�A��A��D�E��E��E1�G��7���nA1��E�A��A��E�D�t$�A1�A1�D3t$�D1�3L$�A��D1�D��E���A1�T$�F��*���n�T$�A1��E�1�E��3t$�3t$�A��D1�3T$���E�3T$�A����1�G��&���nD1�A��D�E��A��D�A�̉�D1�A��,���nD1�A�������D����D1�E1�D3\$�1����nE1��ډ�A1�D3T$���E1�A1��D��E��A����A1�A1�F�����n���\$�E�A�Ӌ\$�A��E�E��A��A1�D�\$�G��+���nE��A1�A��E�D�\$���E�E1�A1�A�E��A��A1�A��5���nD�l$�E1�D�1�A��E��D1�3D$�A���D�A��D��D	�D�l$�A��D��A��A!�D!�D	�E��
ܼ�D�l$���D��D1�3|$�3|$���lj�A����D!��D	�D�L$�D!�	�A��ܼ�D�L$������D1��D1�3\$����	�׉�F��ܼ���D!�!�	�D�A��A��A�D��D�l$�D1�D1�3T$��‰T$���	‰׉��!�!�	��|$�F��ܼ��|$�D�E��D1�A��A�1�D��3|$�	���A����D��A��!�!�D�L$�A��1ܼ�	�D�L$�D���D����E1�D��E��E1�D	�E!�A��A1�!�E��A	�A��A��ܼ���A���T$�AËD$�D1�1�3D$����D!�A�����D	�D�L$�D!�	�A��	ܼ�D�L$�D��‹D$���D1��D��1�3D$�	��D��D!���!�|$�F��ܼ�	ȋL$�D�E1�A��A��D1�A��A��D�l$�D1�D�E!�A�ȉ�E��A��A�D	�A��D��!�D��D1�3T$�A	�C��ܼ�A��3T$�A�A��A�҉|$�E�A��A��E	�D�T$�D��A��E!�D!�E��E��A	�A��2ܼ�A���t$�A�E�A��D��1�A��D��A��D��A1�D3T$�A��D	�A1���D��A��D!�D!�	�C��ܼ�D�\$��D��E1�E��D	��E!�A1�D!�A��A��D��D�d$Љ�	�C��;ܼ�A��D	�׉�E1�D3|$���D3|$�D!�׉�A��D!�G��ܼ���	�D��D�A��A��A�3t$�3t$�D1���A����	Ɖ�����!�D!͉�D��	�C��.ܼ�D�l$����D��D1�3L$��!�D1�A��D��A��	�A�ĉʉ�D�d$�!��	�C��ܼ�D�L$�A��֋T$�E!��D1�3T$�D1��щ�D	��!��L$�A	ԍ�ܼ����A��A1݉�AċD$���l$�!�D1�D1��A�ʼn��	�D�l$�D!�	�A��=ܼ�D��D�l$��D��1�3|$��3|$��D����	�A����D��D�L$�A��!�!�	�C��ܼ�A���A��D�A��E1�E��A��E1�D3L$�D����E	�D��A�ȉ\$���!�E!�A	���ܼ��‹\$�A���AЉ�1�D1�3T$��‰Չ�	ʉl$��׉��D!�!�	���5ܼ��l$�D���D���1���D1�3|$�1�A����D1�A���|$�B��'�b�A��D�d$��D1�D�A��A�ً\$�E1�D3L$�E1�A�A1��A��	�b�D�L$�D�L$�A͉�E1�A͉�1�3L$�3L$���D��1��ʼnύ��bʉl$�1����D��NjD$�D1�A��3D$��A1�B���b�E1�A��A��A�A����E�D1�A��3L$�3L$��E1�D�ō��b�E��L$�1����D��A1���D��D�D$��D��D1�D�L$�D1�3T$�3T$�A���‰T$č�2�bʉ����D��D1�A1�D1�A1�A�A��D��C��)�b�A1�A���A�A��1�E�E��A��E1�A1�D��E1�A1ȋL$�A�A��8�bʋ|$�A�A1����D1�A��3|$�A���A1�A��B��'�b�E1�D��D�d$��A�A��A�D��E1�D1�3t$�E��E��D1�E1�A����E1ݍ�.�bʋl$�E1�A�D��1�3L$���D1�A�����bʋ\$�A�D���AՋT$�A��1�3\$�D1�E��1�1�E1���1�E1�A��F���b���F���b�E�E��A��E�E��E1�D��E1��E�A��A�l$�3l$�D�\$�A1�D��A1�D1�A��D1�A��G��;�b�D�E��A��D�D�|$�D3|$�E1�E��A1�E1�A�E1�G��1�b�E�A��A��E�E��D�T$�D3T$�E1�A��D1�E����E1�A1�F��+�b��E�E��A��E�D�D$�D3D$�D1�E��A1�A1�A��E��D�D$�C��#�b�E1�E��A��A��|$�A��E�1�1�D1�D3D$�3D$���D1�1�A��7�bʉ�1�E��D1���\$�A1�A��D1�A�����
�b�D��A��D�D1�B���b�D��D1�A��A��D�D1�A���DT$�D�A��A1����L$�A��H�D$�t$�A�Dl$�D�0�H�pD�PD�h[]A\A]A^A_�ff.�f���H�#Eg�����GH�H��ܺ�vT2H�G�����H�G��ff.���AWI���AVI��AUATI��USH���G‰WsL��H��W���W����?��M�lL�H��?w"H��L��L��L��[]A\A]A^A_��fD�@)É݃�sz������tA�$A�U����M�nL���D$L������D$��)�I9�w�f���I�4,L�����C�[@L9�r�I�I)��Z���@I�$I�uM��H��I�UI�T,�I�T-�I)�M)�A�A��A���q���A��1҉у�I�<H�<D9�r��T����I�I)���A�$A�UA�T,�A�T-��+���A�T,�fA�T-�����ff.�f���AUATUH��SH��H��dH�%(H�D$1�I��f�1�H�������H�����T�����A�H��H��uպH�5!H���q��E%�=�t)L�-�L��H���H��E%�=�u�L��H���)�H��t(1�f�H�‰�H���ыT�������H��H��u�H�t$dH34%(�uH��[]A\A]��w���H��H���digestDigestBaseSHA1rb_digest_wrap_metadatadigest.sorb_digest_wrap_metadata not found�;@��\���d��$��������t���`zRx�$���FJw�?:*3$"DH��\���E�l
O@|`�sF�E�B �B(�A0�A8�X0A(B BBB�����5H�����F�H�E �B(�D0�A8�DPt
8J0A(B BBBK8 ���	F�B�A �D(�G@�
(A ABBAGNU����, @\N]gw�h	
!�, �, ���o`��
�X/ 80(	���o���o����o�o����o8- �	�	�	�	�	�	

 
0
@
P
`
GA$3a1h	)!GA$3p1113�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�!GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�3GA+GLIBCXX_ASSERTIONSsha1.so-3.4.4-3.el8.x86_64.debug,����7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N������
,�r�,0xUQ�Ź�!�$ٺ��1	�yMO�)>�5q8���`�=yhH��ul�VD�����VH�s�[*���>�#Bh%��Oū)*����Qτ+P�D��QZEvs=#a�����/S$k�GL�!r�n�ހ���]σ�C�'Psb��vfVuҦ2��X��T��U�Ž쟌�;�܎8��`)6�5��Y��OVwD�{��ݢ!�����B��JJ�zmpTzA@0'��-�-w��;�s��FAt��
s�1����b�;��*ߤ�����Q�&q��)��8��ƻ�����JG} �C�Tx�`��T�a/�~Uu�G+_)$}ӻ��f��\�d�W��O���9��4Tp9�Y��R��]�r�6_�����̭����^��U;���D���y�eT�^]�`���0P=_c��i7�������NohnB,�j�{8ݲ�n�8��u�~Ⳇ�m9yǂ�d�2��*�4!���m?1��5q=o�̠�p�D�wda��m��h2��' �-���sm5IX�O�L�����޻in�€(������v~޾�؞+ΰl3��cџ�r�W�%�����r��Ÿ�ЃZzZ+N�w:�b�v%�d�����٘��)�{o	���d�v՞�ZEO����Ĝ�h�~50���Gh8����r�2��Ծ7��W�������A�y�%����P�ol\�ı�)��	�a�{{%J���Pİvg�%+!2��]�9�jMZ��9�Q^9���秱�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``D(��@0���8���o��0E���o��@T((^B008hh	h	c�	�	�np
p
�w@@�}!!
�0!0!l��!�!D��!�!\�@#@# ��, �,��, �,��, �,X �8- 8- �X/ X/��0 0�0`04(D4T�7"PK*J[
�%�..!lib64/ruby/digest/bubblebabble.sonuȯ��ELF>`
@'@8	@��      �� 88 8   888$$���  S�td���  P�tdXXXDDQ�tdR�td     ��GNUN{����!`���E��t���@ BE��\1A���|�qX� �U�� ��""��"pe, F"�\  ��o  c  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_string_valuerb_str_newrb_eRuntimeErrorrb_raiserb_funcallvInit_bubblebabblerb_requirerb_path2classrb_intern2rb_const_getrb_internrb_define_methodrb_define_module_functionrb_define_singleton_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64Rui	t  ( �
0 0 � � � 
� � p x � � � � � 	� 
� � � � � ��H��H�I H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!�������%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%} D���%u DH�=� H�� H9�tH�^ H��t	�����H�=i H�5b H)�H��H��H��?H�H�tH�5 H��t��fD�����=% u+UH�= H��tH�=> �I����d����� ]������w����AWAVAUATUSH��(H�|$H�|$�s���H�D$H�hH� tH�hH��������*L�`L��H��H9���H�t@1����H�H�D$H�\$H�XH�$H�D$ �_H�$�xM����H�$M��A�E1�I��H��I���������H�pL�ZI)��~f�I��L��I�<6H��B�D
��F�-�����A��V�H�ƒ�A��V�I�A��D��A)�H���8��8��Mc�I�I��H��H��H��L��H��H)�M9���F�l
D��@��@��H�H��I��H��H�RH�H)��;L����F�D�����A��F�H��I��H��H�H��I��H��H�RH�H)��;�F�M9��
���I��A�ExH�D$H��([]A\A]A^A_ÐH�@H�$���H��L�GH�wI��L�oH��H�RH�H)���H�$�;I�B�x�3�A��A��a�e���H�s H�5tH�81��
���f.���H��H�5i 1�1��(���H��H���l���ff.����H����H��H�54 H�׉���H��H���6���fD��H���$���@��ATH�=�US���H�=����H�=�����H�=�H������H��H�������H�=�H����H��H�����H�߹H�w���I��H�5����L�����H�)���H�5��]���H��1�H���H�5n�5���H�=E���[]H�8 A\���H��H���digest string too longdigestDigestInstanceClassbubblebabblebcdfghklmnprstvzxaeiouy;DX���`8��������8����h�����������0zRx�$��FJw�?:*3$"D�����H\ ���fB�B�B �B(�A0�A8�D`�
8A0A(B BBBB�D���$HT�\���*HZ�t���(�p����F�H�A ��AIGNU��
0 )8BR��
�  ( ���o`��
�X 8P��	���o���op���o�o>���o8 ����		 	0	@	P	`	p	�	GA$3a1��GA$3p1113 �GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY �
GA+GLIBCXX_ASSERTIONSbubblebabble.so-3.4.4-3.el8.x86_64.debug��A�7zXZ�ִF!t/���9]?�E�h=��ڊ�2N��J��[r4�5�ܹE��&-��p2<_�F�ݯɶ	�NՉ@��c�y.!��#~�8/F�E�R62Y�YF��u��e	�W���3�ٜ��|���C�O�|�ӻ�;A�1�i��I�N`
��w��K���� S�8�?�ȃ�2�K4�},#��3p2�����D�2���46���Ci8�$2q��>��'f���Edԍ ����B�#�.;���U��&������I�����Gg�s�V�6���;4���g��<����:ᗐA��ױN��K<1�8v����G��k�׺�Ե~�/Ѯ�WCE����=���ʨS�T�#t�"OKD���Y�?p0o��63Ƈ��b^_�Ɵh�
���	(wZ��+�����ϲ�쳝�/-;��Mg~}��|Yv�s�xͥ�A��Ս"�������K���n��t�Ti*�TNO\�t��D�)��4����ط�����Se�W��>W}{�灀���`���U�vڙn�?�
�e�����h��݇�����YQ�T-�x�/�5���ujS�oG�:-�#��O"vk��s]j·��a��, �����+���k�-J���SHA��|��D%��Ց�͚���wDxK\�L�S*f{v��-W��}B�ꝿ�`��!u��=��;��a�F�Ģ8,Y�8#I��
���ا��vs{e����j��*F;"U^�����U���t� >�d���$E�s]��%��{�_8�>s1z0�����p�<]G�{�d	�Ԡѝ��N,��Ϡ7�W-�'���2��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0���8���o>>,E���opp T���^BPP8h��c���n�	�	�w`
`
s}��
���g�XXD������ �   �( (�0 0�8 8 �X X��   � ` HH"0x"|�%"PK*J[��U�xxlib64/ruby/fcntl.sonuȯ��ELF>�@x@8	@XX p
p
 p
 �� �
�
 �
   888$$888  S�td888  P�td�
�
�
$$Q�tdR�tdp
p
 p
 ��GNU�jid|�8�Ĉ�/%��,u�� �
BE���|�qXϫ� q `, F"�� � � Up,__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_fcntlrb_define_modulerb_str_new_staticrb_define_constlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�p
 `x
  �
 �
 � � � � � � � � ��H��H��	 H��t��H����5�	 �%�	 ��h�������h��������h�������h��������%E	 D���%=	 D���%5	 D���%-	 DH�=I	 H�B	 H9�tH�	 H��t	�����H�=	 H�5	 H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=> �I����d����� ]������w������SH�=-����H�="H������H��H�5H�����H�ߺH�5���H�ߺH�5�����H�ߺH�5����H�ߺH�5����H�ߺH�5����H�ߺ	H�5����H�ߺ
H�5��m���H�ߺH�5��Y���H�ߺH�5��E���H�ߺH�5��1���H�ߺH�5�����H�ߺH�5��	���H�ߺH�5{���H�ߺH�5t���H�ߺ�H�5m����H�ߺH�5a���H�ߺH�5T���H�ߺH�5I���H�ߺH�5=�}���H�ߺH�52�i���H�ߺH�5)�U���H�ߺH�5�A���H�ߺH�5�-���H�ߺH�5����H��[�H�5�������H��H���Fcntl1.2.0VERSIONF_DUPFDF_GETFDF_GETLKF_SETFDF_GETFLF_SETFLF_SETLKF_SETLKWFD_CLOEXECF_RDLCKF_UNLCKF_WRLCKF_SETPIPE_SZF_GETPIPE_SZO_CREATO_EXCLO_NOCTTYO_TRUNCO_APPENDO_NONBLOCKO_NDELAYO_RDONLYO_RDWRO_WRONLYO_ACCMODE; ����<���d���|zRx�$@���PFJw�?:*3$"Dh���@\P���,E�GNU�` �
 ������
�	p
 x
 ���o`��
� `���	���o���o����o�o����o�
 0@P`GA$3a1��	GA$3p1113p�	GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignfcntl.so-3.4.4-3.el8.x86_64.debug L��7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N����n ���OY��=9"P�Sᾞ��L��K�}Z���#��b� ߵ-��B����EBհ������5F��x��S�Y�2�)�~��~*~9��L�k��i��Ő=���/��M�K4����·
���3�����:�F{�=�(���n�?���4Fdy�}�p�R����􎰊v%D:&���z^����^2��d;w��F��x���>��m�&_�y�43��:������a�?�������A�@����9�ێ/�%3=�F��ֻiS�8�I0�����o�Os7p�6�[6δ��(��s��h�p�[��8��3D��&�x���>�h5xs�ob�ч���Φ)'�|�=rR��k����ƃ4�᰷ƞ�V1�ӭ�>��_���d!�J�}��FtC�վm�5�k�	/4|>\�c\���G"���M�Lr�0�H�WY��_p�:br�%���
)urߙ��ؑ�q�!~��[�_��a`����}r&C�`�����e ���ސ�`�Dcx�c�u�I�n1���\��:�ڄ;�
>�W�at����0�B��$�oD�$�Š6dI�^������+���'{_�?�fpy�>�;�4�K��
�$TPwK4~�WU��c�u������QA�󓍼���?�ŧ��X&J{DUG�w����M�pz�ټ�t�ll�,�4�/]?pe�&�-f�&�cǤh|��cQ�w��JIA�f���V�e��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(�� 0��8���o��E���o�� T���^B��`h��c  Pnpp@w���}�	�	
�2�	�	���
�
$��
�
x�88 �p
 p
�x
 x
��
 �
��
 �
 �� �X� �`��( 4T"PK*J[�G4��lib64/ruby/zlib.sonuȯ��ELF>pA@��@8	@���� p�p� p� x�	 ���� �� 00888$$������  S�td������  P�tdȻȻȻ��Q�tdR�tdp�p� p� x�GNU��ٯ(I�$�����9����@ ���BE���|�qX)hV_��4*��i $	��G	����!E� ���:��z	�w�Q���O	�g	�qU��gY�K��m	
����7}qXlR���  �f/���<	?|T����x������'\	o	"6��	"=T�L�E���_�b��	"��u����}XH�1�/	��2G�bi, ���"���F"�Jt	��
�9@-��	� 
�� �	� *��n__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_ensurerb_rescuerb_block_given_p__stack_chk_failrb_jump_tagrb_cStringrb_obj_revealrb_str_new_staticrb_yieldrb_str_capacityrb_str_modify_expandrb_str_catrb_str_buf_newrb_obj_hiderb_str_unlocktmprb_str_locktmprb_nogvlrb_mutex_newcrc32_zrb_default_external_encodingruby_xfreeruby_xmalloc2rb_exc_new_cstrrb_exc_raiserb_sys_failrb_sprintfrb_exc_new_strzErrorrb_string_valueinflateInit2_rb_str_resizerb_warningtimerb_error_arityrb_check_hash_typerb_get_kwargsrb_fix2intdeflateInit2_rb_check_typeddatarb_funcallvrb_uint2inumrb_gc_markmemcpymemmoverb_str_set_lenrb_str_newrb_enc_dummy_prb_str_conv_enc_optsrb_econv_str_convertrb_enc_associaterb_io_extract_encoding_optionrb_econv_prepare_optsrb_econv_open_optsrb_data_typed_object_zallocrb_protectrb_keyword_given_prb_class_new_instance_kwrb_io_closerb_respond_torb_check_convert_typerb_eIOErrorrb_rescue2rb_cIOrb_obj_is_kind_ofrb_num2ulongrb_ivar_getadler32_zrb_hash_asetrb_hash_newrb_ivar_setinflateInit_deflateInit_get_crc_tablerb_ary_new_caparb_ary_pushcrc32_combinerb_num2longrb_uint2bigadler32_combinezlibVersionrb_str_new_cstrrb_str_resurrectrb_eNoMethodErrorrb_eEOFErrorrb_raiserb_str_subseqrb_eArgErroronigenc_get_left_adjust_char_headrb_enc_precise_mbclenrb_str_modifyrb_enc_mbclenrb_enc_str_new_staticrb_econv_convertrb_econv_check_errorrb_enc_from_encodingrb_int2inumrb_econv_closerb_ascii8bit_encodingrb_enc_getrb_str_conv_encrb_obj_as_stringrb_ull2inumrb_str_duprb_time_newinflateSetDictionaryrb_out_of_intrb_hash_arefinflateSyncPointinflateSyncrb_mutex_synchronizedeflateSetDictionarydeflateParamsdeflateCopyrb_rsmemchrmemcmprb_check_string_typerb_eRuntimeErrorrb_ary_newrb_lastline_setrb_num2intrb_frame_this_funcrb_id2symrb_enumeratorize_with_sizerb_file_open_strrb_str_to_strrb_Integerrb_num2uintrb_hash_duprb_call_superrb_attr_getrb_str_inspectrb_str_appendrb_unexpected_typerb_intern2rb_int2bigrb_errinfoInit_zlibrb_ext_ractor_saferb_define_modulerb_internrb_eStandardErrorrb_define_class_underrb_define_constrb_cObjectrb_undef_alloc_funcrb_define_alloc_funcrb_define_attrrb_mEnumerablerb_include_modulerb_io_addstrrb_io_printfrb_io_printrb_io_putsinflateResetinflateEndinflatedeflateResetdeflateEnddeflaterb_define_methodrb_define_module_functionrb_define_singleton_methodlibruby.so.3.4libz.so.1libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.2.5GLIBC_2.4ZLIB_1.2.9ZLIB_1.2.2/opt/alt/ruby34/lib64�	@���

ui	
ii
!
�	��'+
��'6
p� 0Bx� �A�� �� �� 0��� �T�� �I�� �B� 7�� �T� `I� �BP� �X� T`� p� ,x� e�� .8� @� 
H� P� X� `� #h� $p� <x� M�� N�� a�� m�� u�� v�� {�� ��� ��� ��� ��� ��� ��� ��� �� �� �� �� �� � � � 	� 
 � (� 0� 8� @� H� P� X� `� h� p� x� �� �� �� ��  �� !�� "�� %�� &�� '�� (�� )�� *�� +�� -�� /�� 0� 1� 2� 3� 4 � 5(� 60� 78� 8@� 9H� :P� ;X� =`� >h� ?p� @x� A�� B�� C�� D�� E�� F�� G�� H�� I�� J�� K�� L�� N�� O�� P�� Q�� R� S� U� V� W � X(� Y0� Z8� [@� \H� ]P� ^X� _`� `h� bp� cx� d�� f�� g�� h�� i�� j�� k�� l�� m�� n�� o�� p�� q�� r�� s�� t�� w� x� y� z� | � }(� ~0� 8� �@� �H� �P� �X� �`� �h� �p� �x� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� �� �� �� �� � � �(� �0� ���H��H�ɿ H��t��H����5�� �%�� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!�������%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݱ D���%ձ D���%ͱ D���%ű D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݰ D���%հ D���%Ͱ D���%Ű D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݯ D���%կ D���%ͯ D���%ů D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݮ D���%ծ D���%ͮ D���%Ů D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݭ D���%խ D���%ͭ D���%ŭ DH�����H�����H�=y� H�r� H9�tH��� H��t	�����H�=I� H�5B� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=ڭ H��tH�=n� �y����d����ݭ ]������w������H��H��wH�x H����PH��H��ff.�f����G�@��H�H� ���ff.�@�����fD����fD��H������H������H��t�@H��H��H��H�H��	H�=�$����H��t�@H��H��H��H�H�l	H�=%/�����H���1�H�=k������fDH��8dH�%(H�D$(1�H�<$H�t$H�T$�L$H�D$�t<H��H�=�8H�����D$$H���O����|$ ��u+H�D$(dH3%(uH��8�f��k�����������l�������USH��H���tRH�kH��t`H�� t)H�CH�C8�C@�tVH��H��[]�@H�� H��H�0�f���H��������u�H�kH��u�1�1����H��H��������t�H����������SH�GH�H�PH�pH� tH�pH�߹���H�߹1�H�5
p�|���H��[������SH�GH�H�PH�pH� tH�pH�߹�B���H��[����f�AUATUSH��H��H�oH����L�mH��I���F���L)�L��H=�?v8�C@@I�D$I�$ tI�D$H�H�C8H��1�[]A\A]�f�L��H��?L�H�I��I���~OH������I����@AN�L�c�s@I�T$됐���H=�?vH�%A��c����H�������@AUI��ATI��USH��H��H�oH����H���W�H�UL�H9�|[�S@��D)�D9�B‰C@L��L��H���W�H�CH� H�PuH��H�H�C8H��[]A\A]�H�@��f.�H��L������C@H�k��H������L��L��H�CH�����H�{H�GH� tH�GH�C8�C@H��[]A\A]����S�H��H��dH�%(H�D$1����H��$�G0�D$����H�H�D$dH3%(uH��[����f�H�GH��t.SH�pH�PH� tH�pH���x���H�C[�fD����H��H�H�x��H���f���SH�H��H�x���H��H��[A�H�h���H�=1������ff.��ATI��UH��SH��H�H�GH�G���H�1�1�H�CH�D1�H�C`H��H�ChH�L���H�CpH�CPH�C �C(H�C8�C@Hǃ�H���Hǃ�Hǃ�Hǃ����H���H���ǃ�Hǃ��D���Hǃ�H���Hǃ�ǃ�Hǃ�Hǃ[]A\�f���H����@��SH���tH���H� �PH��[�l�ff.������f.���������S��H�����K����H�qpHc�H�>��H�=� �{�H���P���H�=�� �d���H�=�� �V���H�=�� �H���H�=�� �:��H�=�� �,��H���r���H�=�� ���H��H�=�i��1���H�=r� H���2��u����H�H���<�����SH�� H�t$H�|$H�\$dH�%(H��$1��]�H��H�5�� H���W���H�{ �pH�Ai���m��uQH�D$H��H�J���H��H�=`JH�L$HDŽ$�$H�D$ ���H��$dH3%(uH�� [�H�t$`���l������SH��H�� H������uCH�{H�H�CH�C8�C@H��tH�tH�C[�f�1�[��H�sP�����ff.�f�SH��thH���uAH�{H��tH�thH�CH���H�{ �P��uWH��[��H�=�n1��2�H���*�����1�H�=/n���[�1��a��H�sP���T���@��H��S�����S�H��1�H�H�5_h����H�����H��[� ����������USH��H��(dH�%(H�D$1�H���@���H���t��H��H���������t��	��҉D$�������H�߈T$H�t$�
�D$f�L$�D$@�l$����H���H��t1H�PH�pH� ��H������H�5�lH�����H���H��t-H�PH�pH� u;H���s����H�5�lH���_���H�H�D$dH3%(u;H��([]ÐH�p�f.�H�p�r����1���H�������8����AUATUSH��H�H�oH���s���L�eM��~6L�mH�E ul���L��L����1�L��L��H���H�����H����H��Hǃ�Hǃ�Hǃ�H��[]A\A]�8����L�m�f.���AUATUS��H��hdH�%(H��$X1���������DHc�H��H�|��`�H���fH�� �H�ǃ�H��$0L��$@H��$0H�ՠ H��$81���L��$@�L��$HI��$LD�I��$LD���c���H�EH�D$���Q���H�|$H�\$ �X�H�5�� H�����H���R��������I��t
L���_�Ɖ�$�E1�I��tL���E��$�A��jp���H�{ H��cA�P�H�ZY����H�D$H��H��$@H���H�=���H�L$ H��$@H��$H��H��$XdH3%(u}H��h[]A\A]�@H�EH�D$���X���H�|$H�\$ �_�H�5�� H�����H���Y��������E1�DŽ$������&���H�߉D$����D$H�t$p������P���UH�5�� SH��H���7�H�5H� 1�1�H���H���
�H��1�H�!H��H�5�b���H���[]�f���H��H�51� ���H��H�����H��H�5� ���H����HE�H����ATUS��xLI��u?H�58� H�����H��H�} �pH�2b�c���uLH�ML��[]A\�f�H���t�1��|�H�5� L���-��H��H��t�H�������H�uP���h������AVAUATUSH��H��PdH�%(H�D$H1�H�D$H��H�D$(H�D$H�D$0H�D$H�T$ H�D$8���
H�D$ 1�L�@ � f�H��t
Lc�N��L�
��H��I9�tH�9��H��t�H��H�I9�u�9���H��H�5� E1��O�H�|$H��H��t�,�A��H�|$A�H��t��A��H�|$A�H��t��A��H�<$�����H��t�����H��`jpD��H�} P�E��E�����ZY��u6H�MH��H�\$HdH3%(uH��P[]A\A]A^ú1������H�uP�����f���H��H�5!� �l�H��H������H��H�5� �L�H���H��H�H��������H��H�5ѓ ��H�P�H��t	HcBH�DH���ff.�@��H��H�5�� ����x@H������SH��H����H�{���H�{[���ff.����SH��H�����H�����H�����H�����H�����H��[�s�AVAUI��ATI��U1�SH�GH��H��tH�hL9���H���A�$�1L�pH� tL�pH��H���U�H�{H� ��H��L��1��g�1�K�4.L���I�I�|$H���,�I�l$H�E H�EL�mtH�EL�H��I�D$8���H��L)�H��HEº@H=@HO�A�D$@H��[]A\A]A^�L�pH� tL�pL��H��tVH����H�{H� u)L��L����L)�H���F���H�{�+����H�{��f�[L��]A\A]A^��L����H��������u�I�D$���ff.�f�AUATI��USH��H��H���H��tWL���M��tH������u,���H���H��L��L���H��[]A\A]��L��L���`�I��H���L�����H��L��[]A\A]�SH��H��H�t$H��tH��H���1�H����5�H���tJH�|$H�t$�\�H���H�L$���H�rH���H�z���t�H���H�D$H���H��[�ff.�ATI��H�� UH���S��H��H�x �@uH�x L��H���9�H��[]A\Ð��H���H�5N� �ff.����H���H�5N� �ff.��ATH�Ǐ I��US�x�H��H�X �@uH�X H�H�CH�C��H�CPH�CH��H�C`H���H�ChH��H�C �C(H�C8�C@L���H�kp[]A\����H�5�� �P���ATI��UH��S��H��0dH�%(H�D$(1���t\�|$H�=�H�t$H�t$H�T$ H�T$�D$��H�ËD$��uh����uAH�|$(dH3<%(H��u^H��0[]A\���1ɉ�L��H������H������t�H�=� H��H��H��<�b�H���H�}���|$�+���fD��1�����D��SH���C�1�H�SH�s���;[���|�ff.����AWAVAUI��ATUH��S��H�������L�&A�H�5g� L���
�H�þ�������E1�H��tH��������A��jp���H�{ H��YA�P���ZY���H�L��H��L����o���H�5�� L��������H��L��[]A\A]A^A_�fDHc�H�
<YH�=YH�|����I��H������L�e������L�}��tH�m��t�����P��H�5T� L�����H��I�����L�����������H�Q� E1�1�L��H�=u���L�1��K��.���fDL�e�t���H�sP����ff.��AUATUSH��(dH�%(H�D$1����PH����H�H�$���CH�^���*H���,����H���H����H�W� H��L�d$L�l$H�0�:�H��u.�L�����H�D$H�PH�pH� tH�p���H��H�5h� H�<$L��H�D$@���H�D$H��u��f�H�$1�1�1���H��H�����H�L$dH3%(u}H��([]A\A]�f.�H���x��H�$H������@H�����H�$H�PH�pH� tH�p���H��둺1��R�H��t1�1�1���H�$H����������1��V���ff.����USH��H��H�t$H�5g� �"��H�t$�H�	� H������H�T$H��H������H��H��[]�ff.�@��H��� �����H��� ������SH�5T� �/���H���G�H�5� H��H����H��[���SH���H�t$H�|$H�\$dH�%(H��$�1����H�D$H�D$H�D$ ���H�{ �pH�5�UH�D$(H��H�D$pH���H�D$xH��� HDŽ$�H�D$`H�D$0�D$8H�D$H�D$PH��$������uUH�D$H��H��$�H���H�=��H�L$H��$�H��$�����H��$�dH3%(uH���[�H�t$`���`����ff.���USH���dH�%(H��$�1���~H�H�D$��t���������������H�|$H�l$�L��H�D$H�D$H�D$ �,��H�} �p��H�D$(H���H�TH�D$pH�B�H�D$xH�V� HDŽ$�H�D$`H�D$0�D$8H�D$H�D$PH��$������uuH�D$H��H��$�H�'�H�=p�H�L$H��$�H��$��e��H��$�dH3%(u$H���[]�H�~H������u�������y��H�t$`�����ff.�f���ATUS����H�����L��H��@�;H���m��H��H���b��L9�u�H��[]A\�D��ATUH��SH��tEH�I��@��tJH���tRH�H��L��H���h��H��������?H9�wI[H�D]A\��H�����I��@��u�H�����H���u�H�����H���f.�[H��]A\���@��ATUH��SH��tEH�I��@��tJH���tRH�H��L��H������H��������?H9�wI[H�D]A\��H��� ��I��@��u�H�����H���u�H�����H���f.�[H��]A\����@��H���S��H��H���7���UH��H��H��SH�����H�}H��H��t���H�5�� H��H���X��H���`��H��(H�?dH�%(H�D$1�H��� H�<$H�=8H�t$H��H��H�D$H��jL�H�� L�1����ZYH�T$dH3%(uH��(����f�ATUH��SH��H�� dH�%(H�D$1�L�d$D���H���H���@���H�D$H��teH�PH��~(H�pH� tH�p�H�����L�d$H�D$H�CH��t�H�@H��~�H�L$dH3%(u=H�� []A\���tH�S1�H��t�H�B��H�=*� H�5�O1�������ff.�@H��~SH�H��tH���j��f.�ATI��UH��H��SH���k��H��L��H�EH���9��H�}[]A\�l��@��AUI��ATUH��SH��H��(dH�%(H�D$1�H���$H�G��L�d$�0@L�d$H�T$H�pH�PH� tH�pH�{�8���H�CH��tL;h~8H���H�����H�D$H��u�1�H�L$dH3%(uAH��([]A\A]Ð���f�H��t
H;p�e���H�=ъ H�5�N1�������fDH�H��tWUSH��H��H�xH�PtH9�|nH�H��[]�H�xH� tH�xH)�H��H��1�H����������H����H�;H�����H�;H��H��[]���@H)�H���e��H�H��[]�ff.�ATH��USH��H��E���H�{��tCH�SH�BH� u,D� �h�H�C0����L9��u<�CHH9�u[]A\ÐH�B��H�5�� H��M����H�=p� H�5)T1��b��H�=c� H�5�S1��M��ff.�f�H�H�ƒ�H��uAH�WH��tH�zu0SH����t7H�{H��t
[�'����[�f���f.�����H�{H��u���f.���H��H�5� ���H��H���`�����H��tH�WH��tH�zu��t��f�H����r����H����ATUH��SH��H�����tBI��H�H����t�EDL��H���5���H���u-H�CH��t�H�@H9��H9�HN�H��[]A\�f.�H�CH��t	H�@H��u�H�������u�L��H��H�D$���H�D$�H�;� H��H�5�KH�81����ff.�@AUATI��UH��SH��H�GH�XH� tH�XI��H��tLhI��$�H�T+�L��H������H��H)�H��H9�H��H��[]A\A]�f.�I��$�L��H���M�����|��~�H��H�H�[]A\A]�@�кL��Hc�H��{���H��~��@UH��SH��H�t$H��t\H�|$���p��H�D$H�P��t#H�pH� u(��H�����H��[]�DH��~�H�pH� t�H�p����1�H�5�J�]��H��[]�fD��SH���WH�wH�?�Y���H�;[���UH��SH��H�H��t.H�� H��H�0�\��H�EH��H��[]�f.�1�1����H����f���H��H�5q} ���H��H�x�f�UH��SH��H��H�H��tJ�E@H9�u
H��[]�����H�EH� H�PubH��H�H�E8�����H9�HO؉]@H��[]ÐH������H�EH�PH� tH�PH�U8�����H��H9�HOډ]@H��[]����f�H�@�f.�AVAUI��ATI��UH��SH�_H��tuH���-��H��H�[H9�~aL�wH� tL�wK�<&H��L���1��L��L��L���#��H�}J�4#����E@��t��L9�LF�Le8D)�E@[]A\A]A^�H��L�����H�}H�_�ff.���SH��H��dH�%(H�D$1�H�te�t(H�����H�D$dH3%(��H��[�fD������t�H�{H����H�GH=�?%�@H)�H�������������@�D$� tkH��H�=т H�T$���� u2H�CH�߾@�����|$���Q������@�@댐H�{�G��H�{1�����f.�H�A� H�0���H�{��&��fDH�JH�H9�H)�H��DUH)�L�BSH��H� tL�BH���?H��H��I�4���H�EH�H��[]��ATUSH��f�H�CH��tH�xu�t
[]A\�D�H������ѐH�pH� tH�pH���L���1��DH��H9P~�<
uhH��u�H������L��H��H�������f.��u��H������H�CH��t�H�xt�H�pH� t�H�p�f.�Hc�H�ߺ��[L��H��H��]A\���ff.�ATUH��SH���A���H��xlu"1�H��tRH��I������L��[]A\��H��H��H����I��H��t�H���H���H���+���L��[]A\�[1�]A\���DA�H��t�1�H���z����AUATUSH��H��(dH�%(H�D$1�H���Lc`H��t!��@�H�����H����H�k1�H��tH�EL9�|�H���L���tH����������H�uH�}H�E tH�}H�L���E���H��Hc����H��t_H��H����H��H�L$dH3%(H���H��([]A\A]��H�kH��tH�}�X�����u�H�������f�L��
1��A��H��H�CL�`H� tL�`L�d$L��H��tHPL�mH�E tL�mH���H�L$A�M�E
H�t$L�l$���H������H�t$H�ߺL)���H���H���H������H�t$H��L)����������ff.�@SH��dH�%(H�D$1�H�GH��tH�xH�D$dH3%(ufH��[�@H���h��H���H��H�5�~ �H�$�����t�H���H�5�~ �����t�H���H�5�~ 1�1��f����o��ff.�@ATI��UH��SH��H�tJH����t0���H��L���O��H�H��L��H���H��H����� ��H��[]A\��@�[���f���SH��H�t/�1�H�5jBH������H�����H������[�f������f�H��H�5�t ����tH���H�=�} H�5�A1��a�����H������H���H���#����H�������H�����H��tH�PH� u�H�DH��ÐH�P��f.���AUI��ATUH��S��H��H���B�����xI��tH�}��t~�1������f��1�H�5KAL�����L�����I��$�H�5�| �����uH��L��[]A\A]�@I��$�H�5�| 1�1��P��H��L��[]A\A]�H��t��7������t��ff.�@��H�����H�x0H���V��fD��H���c���H�xHH�@H��tH�@H9�v
H)�H��H�D?�H)�H�������SH���#���H�H�����t�ʀH�H��[�@��H�H��[�ff.�f���H������H�%�HE�H���ff.�f���S���H��u)fDH�CH��tH�xu(�H���:��t�H�S�H��t	H�zt1�[�ff.���USH���Q���H��H���H����Hǃ�Hǃ�H��Hǃ�H��[]���H������Hc��H��H�D�f���H�����Hc��H��H�D�f���H������Hc��H��H�D�f���H�����H���H���s����H�����H���H������H���c���H��H��������SH�� dH�%(H�D$1��2���H��H�x0H�@H��tHxH�����H�5�y H��H����H�$H�D$�}��H�����H�1�1�1����H���ǃ�H���Hǃ�H��t4�i��H���H������H�pH���H�x����H���H�T$dH3%(�uH�� [����f.���AWAVAUATA��H��USH��H��(dH�%(H�D$1�� ���E���H��A�D$�L�l$E1�L�t��i�k��I9���H�|$L������H�|$L��H���q��H�D$H�PH�pH� tH�pH�����H�D$L�l$L`H�D$L9�tGH��H�{�H�|$H��t@��uH���H��t
���H�D$L���M���Y���H�D$�f�H��������?I9�v1L���I��H�L$dH3%(u0H��([]A\A]A^A_�f.�K�D$��f������@��H�����H���H��u�H���@H���O��ff.�@��H�����H���H��u�H���@H�����ff.�@��H���c���1�H���H���Q���PXH�5;;H��H�<v H�81��¿��f���H���s���H��tH�������H��H�5Un ����tH���H�=w H�5�:1��q������ATUH��S��H�������xI��tH�}��t3�1�������L��1�H�5�:�B��[L��]A\����H��t��������u�[L��]A\���f���UH��SH��H���;���H��1�H����H��H��[]�@��S�����1�H�5Q:H��H�����H��[�D��@��H�����H������H��Ð��H������H�������H��Ð��H������H���HE�H���ff.�@��H���s���H���H���S����H���S���Hc@xH��H�D�D��H���3���H�xHH�����fD��H������H�x0H�����fD��USH��H�����H��H�����H��Hc����H��H��[]�ff.���USH��H��dH�%(H�D$1����H��H�$H�����H�$H�PHc�H9��K��H�pH� u.H�} ������u,H�L$dH3%(H��uH��[]��H�p�����H�uP���:��f.���AWAVAUATUSH��8L�'H�wdH�%(H�D$(1��GH�W�D$I�$�@��H��@I�|$H��I�$I�D$H�D$u	H����M�t$L���]�L���5�I��H��H�D$���I�H�$I�FH�$ ��H�L$A�|$@I�D$ �����H9AHNAA�D$(�����S�L�;1�L�l$$�-@L��L��H�=���D$$�>����D$$�S��������E�O@H��H�=9��H��H���D�$�F���I�1�D�$I�Ɖ�H��tH�wE+O@L����A���oE��t
A����EA�w@��u@A�O(��uH�Aj I9��t(�S$���E���L������S���[����C ���I������kE1����I�|$H��tH��I�D$A�T$(A�����������M�|$pM����H�5Br L�����I��$�I���ʾ��L��H��菻��H���VH��L������S�j���f��|$�B����9A�D$@�����A���A���I�$�7���DI�t$ H�|$���T���@��u��C1�����fDI�A�H��H��I�����1��1���A�T$(A�����������H�D$H��u/H�L$(dH3%(���H��8[]A\A]A^A_��1�H���ֺ����I�F�?���A�|$@H��4A�D$(I�D$ H�D$���>���L������1���I�t$ H�|$�$��e���I�t$P���s��A������H�=Lp H�5y41���������S�6���H�x H��芼����t
��u1�[�D�[�H�sP�����fD��AUATUSH��H�t$���H�|$H���K���H�D$H�hL�`H� tL�`H�CH��t]H�PH� ��H�S �����H9PH�{ HNP�S(�X���A�Ņ���H�{H��tH�tdH�CA�����H��~)�����L�c H�{ H9�HO�k(�	�����t=�����1�H��[]A\A]��H�P�i����1��������S(H�s H�{���뷐H�S�C(L�kL��H�rH)����H��L��L���h�����H�sPD�����H�sP��������U��H��SH��H��(dH�%(H�D$1��i���H��l$H�5�H�xH�$H�\$蹶��H�L$dH3%(uH��([]��ݷ��ff.�f���ATUH��S��H��H�� dH�%(H�D$1������~PI��H�E��u?L�$$H�D$1�I�|$H��H�5=��D$�4���H�L$dH3%(u>H�� []A\���t����肻��H�}H�D$1�L�$$H��t�������!������USH��H��dH�%(H�D$1��N���H��H�$H��请��H�$H�PHc�H9�����H�pH� u.H�} �ż����u,H�L$dH3%(H��uH��[]��H�p��蕶��H�uP������f.���AWAVAUI��ATA�����USH��H�����H��I��tL���<���A��E1�H��tH���(���A��L�u D��D��]@L��蠷��+]@���uCL�=�6�1�L������H����H�}H�wH��^���D��D��L���]@�]���+]@���tŅ�u$H�}H_H���1���H���[]A\A]A^A_�H�uP�����f���ATI��UH��H�5<c S膶��H��H�����H9�t7H�p H�{ H���ֹ����uZH�EH��u8H�CH�EH��uH�CH�EH�L��[]A\��H��������fDH������H�CH�EH��t���1����_��ff.�@UH��SH��H��H���u@H��H������H���t�H�CH��tH�xu$��to1�H��tWH�����H��H��[]�DH���(���H��H��t�H���H���H���I�H��H��H��[]����H��1�[]�#���H��H���5��AWAVAUATI��US��H��H��HdH�%(H�D$81��e�H��H����@�D$����H��h I�����H�H�D$(H����L�`M����H��A����H�A.�D$H�$�@�E�F�H�����H�]1�H��tH�CL9�|�L�sH� ��M���1�H��tH�CI9�~6�E�5�H���8��H�]L�CH� tL�CL��L)�M�4�T$���%H�$M��A��E1��0H��tL�SM9���D ؈D$�8L��L��L)�H�����I��H����L��L)�I�I����H�4$L��L��L�L$���L�L$���}M�qI��1�H���!���� ���@~GI�<$H�|$(��u0H����H���I���H�x������f����;�����F���fDH� ��H�@�D$H�$�]���fDH�D$(H�PH� tH�PH;$t
L9`��H�$M��A���0H�������E1�L��L��D�\$L)�L�T$H��軲��I��H�������L�T$M9�D�\$E����M�z���DH��tH�{~����L��H���t�H�L$8dH3%(�VH��H[]A\A]A^A_ÐM9��D$�|$~,�|$t%1�H��tH�CI9�|�EuL��H���8��I�ǃ���L��H����H��H��te�D$��uMH�D$(H�D$0H��H��H�D$(�����Z���fDL�s�����H���D$H�$����H�����fD�����fD���H��tH�D$(I������H���M������H�e L�l$(H�H�D$(I��u5H�������I���������M�l$I���}���H��t
H�|$(�}���A����I�M����H�D$(H������M���I����L��H�����H���6����|$~*L9�|%�EtH�UH��tH�ztH��H�����I�źL��H������H��H�����H���H���H�����H��H���G���������L������I���8����1�1�跮�����H�3d H�5^)H�81�読��赮��M9�M���D$���D��AUA��ATI��UH��SH���d���H����H��H��譳��H��L��D���/���H��u�H��H��[]A\A]�ff.���H������H��tH��H�D$�Ь��H�D$H���fD��ATUH��S��H���[���xfI��tBH�}��tfH�m�9�uKH��t+@��t8軴��Hc�H��xL[H��L��]A\��@�[H��L��]A\���@�c����ƺ1����ñ�����H��b H��H�5�'H�81��L���ff.��SH���Ǭ��H��菲��H��E1�1�1�H��[����ff.����ATA��UH��SH�������u�,@H���X���H��H��D�����H��u�H��[]A\�@H��[]A\�|���ff.����SH��裲����u�DH������H���H�H��u�[�H��[�7������S�F���H��u�{�H��H���
���H��[����SH���3�����u�-DH��萮��H����H����H��u�[��H��[������H���S�H�����H��tH������ff.���ATU��S��~.H��H�5^&I��H�;�m���L��H�މ�H��[]A\�$������ǯ���PXH�5 &1�H��H�=ra �U���D��AUI��ATUSH����H�ugL��I���6���H������H��H�PH�hH� u:1�H���P���H��tH)�H��H���]���I��$�H��L��[]A\A]��H�h��U���D��AUI��ATUSH����H�ugL��I��覭��H��莮��H��H�PH�hH� u:1�H�����H��tH)�H��H���ͪ��I��$�H��L��[]A\A]��H�h�����D��UH��SH����H�u.H��H���z���H������H���H���H��H��[]��r���f�ATE1�USH��H�� dH�%(H�D$1�H�l$�OH�����G��H�D$H��ttH�SH�l$L�bH�T$H�pH�PH� tH�pH�{�|��H�CH�PH�xL)�H� tH�xL�1�薪��H��t�H�L$dH3%(uH�� []A\�H�=9_ H�5
#1���������ff.�AU��
ATUSH��H���T�����MH�SH�BH� ���8�/�x��%�P�����P����]�� �*���6�P��������҃�	����HL�c�
L��H����@	������@��u]@�������H�CH��tH�x�]H��[]A\A]�f.�H�B�0����ǃ��y������H���>�����NH�CH�PH� �D�*H�ߺI��L���	�����L��L������@���I�����H����������H���z���H�SH�zH� tH�zH)�H��I������I�uL��H������������H���y������H������H�SH�zH� tH�zH)�H��H��趬��H�uL��H����#�����fDH��H�߹1�[1�]A\A]齯��DH�P����H�5�\ H�{H�P!����H�=�\ H�5] �e���H�=v\ H�5�'1��P���H�=a\ H�5(!1��;���H�=L\ H�5e'1��&���H�=7\ H�5('1��������AWAVAUI��H�5\S ATI��US��H��H������������"���f�H��Hc�A�M�|�蚧����uv��u�H�} �pH�{��I�]裪������H�MH��H����w���L��H���L��H�5�[ H��蝧����u9H��L��[]A\A]A^A_��L���أ��I�ƃ��v����D����H��Z E1�1�L��H�=Ż��L�1�蛦���H�uP���^���ff.���USH��H������H���v���H���H���H��H������tH�{t,H�߾���H��H��[]�H�=�Z H�5o1��u���H�=~Z H�5�1��`���USH��H��H������H�5sZ Hǃ�Hǃ�H��Hǃ��Z�����uH��[]��H�51Z H��H��1�[1�]���ff.�@��SH�54Q ��ڤ���tH��H����V���H��[Ð��H��H�5Q 謤���u�H���DH��� ����H���fD��U1�H��1�SH���:���H�5sY H��H���(���H��tNH��H�CH��H�p�蟣���H�5H��諣��H���C���H��H���X����H�5H��脣��H��H��[]�f.�SH��H��H�t$H��t]H�|$蓣��H�D$H�PH��~%H�pH� u,�H��軫��H��[�D�K(��t�H�pH� t�H�p��fD�1�H�5�}���H��[����AVAUATUSH�� �_L�'dH�%(H�D$1�H�o����I�$� ��H���A�I�D$I�$����H�uH�t$����A�$��H��thH�|$薢��H�D$H�PH�pH� tH�pL��脭��1�A�$ ��L�����H�L$dH3%(�bH�� []A\A]A^�fDL��������fDHc�H�|�苡��I��H����L�t$�1�H��M��H�5�W ���ݦ��H�D$H���H��u~I�$� ��A�����L������L��萪��A�$�F���L��H�D$����H�D$�/���fD1�衠������@I�$� ���������L���X���I��H���m���A�$ tI9D$�n���I�EH=�?~!L���U���1�L���ˣ��I�$ M�l$�A����@L��H)�茣���պ����i����$���@��UH��SH��H�t$�Y��H��tQH�|$uH��H��[]��H�|$螠��H�D$H�PH�pH� tH�pH��茫��H��H��[]�f�H�t$H������t�H���Ƭ��H��H��[]�ff.����USH��H������H��H���t�N������H��H��[]�fD�������H��H��[]���H��1�H�H�5RU ��H�OH�?�����H��u�H��薣��fD�u�H���H��u�H���ff.���USH��H��dH�%(H�D$1����H��H��uFH���n���H�t$�H��D$���H����H�L$dH3%(uKH��[]�@��t��t�H���>����@H�H�ƒ�H��u�H�{~�H�S�� tH�S������ff.���ATUSH�� H�t$dH�%(H�D$1�@�����@��H�l$H��H��萞��L���M��t4菞��I9�t*H�|$L������H�|$L��H��號��H�D$�f�H�D$L�`H�pH� tH�pL��H���k��L��H�l$H�D$�H�L$dH3%(uH�� []A\�@�c������,���ff.����AWA��AVAUATUSH��(H�4$H�T$dH�%(H�D$1��G�����H�$E1�L� @H��R H��u!@�H�=��G���H��R H��t�H�$H�|$D��H��臞��H���������M���&H�������H���y�H�PH�pH� tH�pL���̜��H��1�1��0�H�	R H��u!@�H�=询��H��Q H��t�1�1�H��L������|H�H��H�5?I H�����H�����H��I������I����H��Q H��u'H�-���H���3���H�dQ H��t�1�1�H��L���x�����@H�H)�H�@H��7H�DH�D$H�Q H��u��H�=I�ϡ��H��P H��t�H�L$�H��L������H��P H��u#H�-�H��苡��H��P H��t�1�1�H��L���М���tLH�H9������軠�����LE�H�\$dH3%(L����H��([]A\A]A^A_�f.�H��蘞���fDH��舞��H���z���H��1�1��D������1�1��/���I�������H���H������H��舘��������T�������ff.�@��ATI��U��H��S�K����~H��I�<$��t���I����������@��u5耙��Lc�M���%H��t.H��t
@�����H���"���f��k�����f�M��u'�fDH�SH��tH�zu$H��H���T��H���t�H�CH��toH�xthH��L��H���ͳ��H���H���H��H������H��[]A\�H�E��H���\���M��u�H��1��<���H��[]A\�@[1�]1�A\飘����t(H��t
1�H������H�N H�5�H�81�膗��H��H�������I�l$����H�N L��H�5�H�81��T���@��USH��H��H��M H�(�t���H��H���i���H��t&1�H�{H�;H�K��H�5�N ������H��u�H��[]�f�H��u�H��莜��fD�u�H���H��u���fD��ATU��S��~.H��H�5�I��H�;�m���L��H�މ�H��[]A\�$�������Ǜ�����USH��H��dH�%(H�D$1����H��H��u>H������H�t$�H��D$����H��H�L$dH3%(uMH��[]�fD��t��t�H������@H�H�ƒ�H��u�H�{~�H�S�� tH�S���Ӗ����AU�ATUSH���X���H�=��l���H�=�H���}���H��H�5�H�,M H��K H����H��H�5�H��H��L ���H��L H��H�5�H��L �ǜ��H��L H��H�5nH��L 誜��H��L H��H�5[H�zL 荜��H��L H��H�5JH�eL �p���H�qL H��H�56H�8L �S���H�TL H��H�5"H�L �6���H�7L H��H�5H��K ����1�H��H�����H�5H��K �*���H�߹����H�����H�5�����H�߹H���H�5���H�߹����H�����H�5��ٙ��H�߹H�
���H�5�辙��1�H��H�����H�5�覙���H�=��Ŕ��H��H�5�H���s����H�=�袔��H��H�5~H���P���L�-�I H�5uH��I�U����H��H���K���1�H��H�����H�5S�#���H��H����H�5B����H��1�H����H�55��1�H��H�d��H�5&�ؗ��1�H��H�,��H�5���1�H��H����H�5	託��1�H��H����H�5�萗��1�H��H�t��H�5��x���1�H��H�\��H�5��`���1�H��H�D���H�5��H���1�H��H�,���H�5��0���1�H��H����H�5�����1�H��H����H�5�����1�H��H����H�5����1�H��H�\��H�5v�Ж��1�H��H�D��H�5e踖��1�H��H�|���H�5[蠖��H�ߺH�5V�|���H�ߺH�5I�h���H�ߺH�5;�T���H�ߺH�5m�@���H��H��H�5���������H�����H�5
H��I���P��������H��H�q���H�5��5���L��H�5˰�����L�����H�7���H�5��ە��L��H�|��H�5����L�����H�1��H�5�襕��L��H����H�5�芕��L�����H�K��H�5y�o���L��H�0��H�5d�T����L��H�u��H�5P�9���H��H��H�5M����H�;���H�5=H��H���9����H��H����H�5����H��H�5Դ���ϖ��H�����H�����H�5�
�Ĕ��H��H�%���H�5�
詔��H�����H����H�5�
莔��H��H���H�5z
�s���H��H���H�5�
�X���1�H��H����H�5�
�@����H��H���H�5<
�%���H�ߺH�5g
����H�ߺH�5b
���H�ߺH�5Y
�ٖ��H��H�����H�5T
�Ö��H�ߺH�5T
诖��H�ߺH�5I
蛖��H�ߺH�5B
臖��H�ߺ	H�52
�s���H�ߺH�5$
�_���H�ߺH�5!
�K���H�ߺH�5
�7���H�ߺH�5
�#���H�ߺH�5
����H�ߺH�5
���H�ߺH�5�����	H�5�H���ӕ��H�=�����H�=�H�YE ��H�=�H��E ���H�=�H�+E �ΐ��H�=�H�E 軐��H�=H��D 訐��H�=�H��D 蕐��H�=�H��D 肐��I�UH��H�5tH��D ����H�	E H�5wH��I�����1ɺH�5;H��H�_D �b���H�=SD 1�H���H�5$���H�7D L��H�5蠔��H�!D L��H�5	H�D 胔��H�D L��H�5�H��C �f���L��H��H�5�H��C �M���L��H��H�5�I���8���H��H�.C H��H�0�#��������H����L��H�5��h���L���@���1�L��H�D��H�5�����L��1�H���H�5�����1�L��H�4��H�5q���1�L��H����H�5_�А��1�L��H����H�5M踐��1�L��H����H�5=蠐��1�L��H�T��H�5/舐��1�H��H���H�5�p���H��H�1�H�5�U���L��H�V�H�5�
�:���L��H���H�5�
����L��H��H�5�
����1�L��H�X�H�5����1�L��H�0��H�5z�ԏ��1�L��H�H���H�5C輏��1�H��H����H�5}
褏��1�H��H����H�5i
茏��1�L��H�@��H�5��t���L��H����H�5;
�Y���H��1�H����H�5��A���1�L��H�U��H�5x�)���1�H��H�]��H�5�	����1�L��H�%��H�5�	��������L��H�j�H�5�	����L��H�5��运��L�����H�����H�5�贎��L�����H����H�5�虎��L�����H����H�5��~���L��H�?�H�5U	�c���H��? L��H�5O�H���H��? L�����H�5$	�-���H��? L�����H�5	����H�K? L�����H�5����H�����H�h��H�5����������H��H���H�5���H��H�5����袏��H�����H���H�5�藍��1�H��H����H�5�����1�H��H��H�5|�g���H�����H����H�5d�L���H�����H���H�5N�1���1�H��H�e��H�5]����1�H��H�
��H�5L����H��1�H�E��H�5���1�H��H�]��H�5��ь��1�H��H�U��H�5�蹌��1�H��H����H�5�行��H��H���H�5�膌��H��H���H�5��k���H�����H�l��H�5��P���H�����H���H�5��5���H�����H�V��H�5{����H�����H�;��H�5e���H�����H����H�5T���1�H��H�����H�5F�̋��H�߹����H�����H�5=����H��H�"���H�5'�Ƌ��H�ߺH�5�r���H�ߺH�5�^���H�ߺH�5�J���H�ߺH�5��6���H�ߺH�5��"���H�ߺH�5�����H�ߺ
H�5����H�ߺH�5����H�ߺH�5��ҍ��H�ߺH�5�辍��H�ߺ	H�5�認��H�ߺH�5�薍��H�ߺH�5�肍��H�ߺH�5��n���H�ߺH�5z�Z�����H�5sH���F���H�=��z���H�=cH�t< �g���H�=YH�Y< �T���H��< H��[]A\A]���H��H���unknown zlib error %d: %s1.2.11pathto_hashHashunexpected end of fileunexpected end of stringfooter is not foundnegative length %ld givenclosed gzip streamend of file reachedstream is not readyzlib stream is in progress

rs modifiedrbheader is already writtennot in gzip formatunknown flags 0x%02x, input=>newposlengthpos=sizewbZlib@dictionariesStreamEndNeedDictDataErrorStreamErrorMemErrorBufErrorVersionErrorInProgressErrorzlib_versionadler32adler32_combinecrc32crc32_combinecrc_table3.2.1ZLIB_VERSIONZStreamavail_outavail_out=avail_intotal_intotal_outdata_typeadlerfinished?stream_end?closed?ended?closeendresetfinishflush_next_inflush_next_outBINARYASCIITEXTDeflatedeflateinitializeinitialize_copy<<flushparamsset_dictionaryInflateinflateadd_dictionarysyncsync_point?NO_COMPRESSIONBEST_SPEEDBEST_COMPRESSIONDEFAULT_COMPRESSIONFILTEREDHUFFMAN_ONLYRLEFIXEDDEFAULT_STRATEGYMAX_WBITSDEF_MEM_LEVELMAX_MEM_LEVELNO_FLUSHSYNC_FLUSHFULL_FLUSHFINISHwritereadreadpartialseek@inputGzipFileinspectNoFooterCRCErrorLengthErrorGzipWriterGzipReaderwrapto_iocrcmtimelevelos_codeorig_namecommentlinenolineno=mtime=orig_name=comment=eofeof?sync=tellopenputcprintfprintputszcatrewindunusedreadcharreadbyteeach_byteeach_charungetcungetbytegetsreadlineeacheach_linereadlinesexternal_encodinggzipgunzipOS_CODEOS_MSDOSOS_AMIGAOS_VMSOS_UNIXOS_ATARIOS_OS2OS_MACOSOS_TOPS20OS_WIN32OS_VMCMSOS_ZSYSTEMOS_CPMOS_QDOSOS_RISCOSOS_UNKNOWNstrategybuffergzfilezstream��������̏��ڏ�������������������attempt to close uninitialized zstream; ignored.attempt to close unfinished zstream; reset forced.invalid compressed data -- crc errorinvalid compressed data -- length errordeflateParams() returned Z_BUF_ERRORunsupported compression method %dmulti-part gzip file is not supportedencrypted gzip file is not supported;���s����|������������ x�����������,؆��@��T����h����H����x���������(����؈��(��� h���<X���xX����������������X���8����d����xȍ���؍��������������������	����@	����T	ؐ��p	���	X����	����	8���<
����d
����|
���
�����
���(���4X���L����d����|���8����Ț��X���P��p(����H����h�����������
����8
���L
8���h
�����
�����
���$���8(���LX���h�����(����x�������$����\ئ��t����������������ة��X�����8��������ث��(���0����d�����H����h�������0خ��H�����8����h����ȱ��ز��Px����x����(��������$��@���\8���t�����X����x������������8(���P����lع������������8����X����x�������$����H�����8����x�������������ؽ��$���@����x������������(����X���x�������4����Lؿ��d������������4���XH�������h�����4��������X������DH��|x���8���h������$��D8��`�����������(������ H��\����x���h�����X�����������������(��Hh������X�� ��� x�D h�x ��� (�!��8!�d!���!zRx�$0n���FJw�?:*3$"D�v���\p���#HXt��������������
�����
�����HO�����0�����0Ȁ��Ԁ���D@i
C(4H����A�A�G u
DAE`́��ME�C|���7E�m8�$����B�B�A �A(�G0Q
(C ABBJH�؂���B�E�D �A(�G0f
(A ABBAn(A ABB  ����WA�L C
AADȃ��9K�fG�`��HUx�4E�V(����.B�D�D � AB��������$E�Z�,���(���
$����A� 0܅���E�G��
AA T����cA�L
CC
E xԆ���A�F
It
D�P���
�L���0E�f�`���	(�\���hA�A�G@#
AAB8�����F�B�A �A(�D0
(A ABBMLH���0F�B�A �A(�I�$�\�F�A�[
(A ABBE$��^E�H�G BFA�,��� HW�4���/Hf,�L����F�A�A �B
ABCT ����wF�B�B �A(�A0�G��H�Q�A�`
0A(A BBBAx�� HP���)H]����1Hh�,��� HS�4���$E�Z�H���ME�CL|����B�B�E �D(�C0��
(A BBBDa
(D BBBEH`�����B�B�D �A(�G0B
(A ABBHf(D ABB�����A�G {A(�p���?B�K�I �eAB���������( �����B�P�A ��ABL���0`����B�D�D �FPk
 AABA����������$E�WT�Ȑ���F�B�B �E(�A0�D8�F@VH\PFHA@y
8D0A(B BBBG80����B�B�A �A(�DP
(A ABBK$X����QE�A�G0~DA�ܓ���ؓ���ԓ��0E�j$���5E�G�
AA,�����E�A�G�H
AAA(	`���KF�A�A �AB4H	�����F�A�D �}
FBHyDB4�	���F�A�D �}
FBHyDB�	T���HI�	\���@A�J�D $�	|���wD0u8N@U8A0T
A0
ԗ���B�A�D �G@�
 AABI(L
����Yb�D�G �_�A�B�8x
���B�E�A �D(�GP�
(A ABBBL�
x����J�A�G [
AAAp��H ��Z
D�A�IRAA,ؙ���B�I�A �O
ABB$4X���va�S
�LFJ�P�\���� HPt����HtS0���B�A�D �D0V
 AABKL������B�B�D �D(�D0O
(A ABBK`
(F ABBE0�����A�D�D0
AAFwAADX��� E�V(`\���NA�D�D g
DAK�����HP@������A�D�G V
AADt
AABw
AAG<���B�B�E �D(�D0�t
(A BBBD (
d���*E�G |
AG$L
p���XY�H�D pAA4t
����B�A�A �c
ABF�JB@�
�����B�A�D �f
ABHq
ABDA
CBJ8�
ܟ���B�B�A �A(�GP�
(A ABBH ,�����A�D u
AE,P,���gB�D�D �J
ABI�l���GE�x
C�����/DU
A�����HP�����FHv
BL���F�E�A �D(�I0a
(D ABBE\
(D ABBA<p���HMTx���=Hc
FGt����3E�^
EJ�����#HZ���UE�O$����ME�A�D @AA�<���HPD���HP L���HP8T���HPP\���HPhd���HI �l����E�D0�
AAH�H���\F�B�B �B(�G0�A8�G`
8A0A(B BBBK�\���1H[
ED|���1H[
ED0����HRH����AAKd����HO
A�����/DU
A4�����wF�A�D �D
DBERDB$����,E�D�G VDA����,E�b$���HV0,���HVH4���!HX`L���HPxT���HM�\���HM�d���HM$�l���2E�A�G _DA(������E�A�G0i
AAHzRx�0�� �l��HDȧ���F�B�B �B(�A0�A8�Dp,
8A0A(B BBBH �\���:E�]
FF
A8�x���iF�B�A �A(�D@�
(A ABBH(�����cE�F�G@I
AAA0��F�A�D �I@\
 AABD(Pl����E�A�G0i
AAHl�k��H�̭���F�B�B �E(�G0�A8�G@�
8F0A(B BBBA,�`����F�D�K �P
ABH@���A�D�G I
DAFk
GAMD
CAHLP\����B�B�B �B(�D0�A8�I�
8A0A(B BBBB4�����UF�E�D �D(�D0t(D ABB�Ĵ��*H a8�ܴ���F�A�D �C
GBIF
GBI,`���$A�^4Ht���TF�D�D �r
ABEDAB�����9E�j
AD�����(E�b��IE�r
ID����%HW
A(����IF�A�C �j
ABE$8���AAM8@<����F�E�A �A(�D0^
(D ABBH8|�����F�E�A �A(�D0^
(D ABBH(���NE�D�D v
DAA0�����B�D�A �G@�
 AABAL�����B�L�A �A(�G0�
(A ABBKL
(K CBBJHhT���"F�B�B �L(�D0�A8�I@�
8D0A(B BBBH(�8����E�A�G C
DAA0�����qA�A�G E
AAHKFCػ��/E�i0��:HZ
FQ$P����E�H�D oDA(xt����A�G A
AFwA@�ؼ��<F�B�B �A(�A0�DP�
0A(A BBBG<�Ծ���E�D�D0^
DAHp
DAC^DA0(4���ME�A�G _
DAGODA\P���UHL(t�����E�A�G0\
AAE0�,����F�A�A �D@�
 AABEH���F�E�B �B(�A0�A8�D`f
8A0A(B BBBKD ����F�D�F ��
ABAd
ABEA
CDE(h���E�A�G N
AAC(�x��IF�A�C �j
ABE(�����E�A�G0R
AAG8� ��nF�G�A �A(�D0T(A ABBGNU�0B�A�� 0��T�I�B7��T`I�B�	�	�	�	�	A
�/
�p� x� ���o`��
W
�� 8
h"��	���o���oP���o�o����o�� �/�/�/00 000@0P0`0p0�0�0�0�0�0�0�0�011 101@1P1`1p1�1�1�1�1�1�1�1�122 202@2P2`2p2�2�2�2�2�2�2�2�233 303@3P3`3p3�3�3�3�3�3�3�3�344 404@4P4`4p4�4�4�4�4�4�4�4�455 505@5P5`5p5�5�5�5�5�5�5�5�566 606@6P6`6p6�6�6�6�6�6�6�6�677 707@7P7`7p7�7�7�7�7�7�7�7�788 808@8P8`8p8�8�8GA$3a1�/��GA$3p1113pA�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@B�GA+GLIBCXX_ASSERTIONSzlib.so-3.4.4-3.el8.x86_64.debug#�6�7zXZ�ִF!t/��,�	�]?�E�h=��ڊ�2N�$мe���-�1�AW�}���\�ߋ��w����lLj	�v��>��;�s11���+/s�NJ+O�\q�*/��9a���
�rX*,#��@1v��>�W�D��s�w�6�I�A�Rv���ݣB3l3kwM��\�J���&Qk��l�O�Ӧ����t ;$����ʼ/�6���M��HW���{�N3�Ǿ�����\��a�[2!�Ѓnml&���7A��d'�zyO�%P��j@��O�7���mN�P������hB{@-lX�(H��1[��|�������URh��(8��V��]v���5��Zu9tT�ŷ��Y���6e�y4�طQl��`����[Ps�
<��L0�a�f)(A�����>�?��K�������Բ
gtjq�y�J����E�p�|�����9��8V��Ac�	��I���|@�
�xS������>��9B��iϬ�p���]�(�B~���t�\��$�*�Ɗ�[������<d23�����M��6����Gol!!)�+��J���C۴�7C,j�л�B���7� �&L�n���<�2o���%��@�"<X�0�d[G�pNm�׼��2��w�n�aFQ����+T����C�bXӮ�4�LZR �ֹ�ܸ5wmX8L��:�x<Z��=�Uvx����S1��^�
��bV��V����D�R�Z����A�!�o�.6��F���C�Z���z�Ы�r4�E��r_���;��&i���g�D[*�^T�s\[�L�X�#r��|�&�cvV���d9�a#oį)@&�J�_vjHF,�D�/'VK~u~�Y�1�q?
`������a[u�"�B�dm���yo�`o7ߣ9�1\8�Rx��Hʮ�L�k%-ΘmM;�nL�sQU$�3ze�gm�O���Օ1u;�R�P�K�K��H�hҜ�lc����+�\��$t����&�3`�I����~�$�o1~��ӂ�w�n��zW�D�����7�$*�eWX1���z\T��l��ٲRk@��H�&��9�La`��~[X����W�1���yQ�(Tɓpj����J��dQ}w ���b�J;C�O�pʎ]�_RtsrB�%T^$�TUܽ�d�9�?��]K�%��ୀji�;��K�RA��0��?fM����D\�&�{g:V	�ꀒ�8:�Vt�`;�
N`�&���LI.�"O�k�a���E
�Ž��Z� TZ���$Δ��_�A���F��8Fb�!�5]�\�.�&��$-D��3Z֭�Ӗ��4�=G���bo��Pj�}���X'S��PP��SV��#�@+(;�cPoQځ���J�f�[4j�\�я�&sM����%��L�F. �Ͷ����ۦC��X=�_��j)Z���XC7�V��\��q5�ɔ~ݶ�g��M7	N���i2�`M�n�H�3����"B�����uY7�P>]��a�W1��fk^��5u�`�j8�~M^j��M�E#$͇�`���w������1��[J�8�l�&ɻ��㜻��E�,�*�	������$�ef�Ar�o����͐u���1���|�;K䘚���~��Ι���-��U�9��>1���0Ez���#}\ަ�p3Κ��2ܥ�&�)�'ď:�}�F\
^�(F��?t��R`�9i�nre�
�w��Lk�+�p�Ƅ��sԝM!���ml�Oa�i�W=���k�	l��R����&����T�E��k{��#�YN���`ԴI88��5~�+��-��˻7�v�<�
���ڣh4C�Т�B�-�rw�g�1֐#�|54�(�OUa�n�,��c�����[۪׾�m�
��`�y���$���2�(�#��F;����Ғ�d�;O$�F@i̳-�m#��P��]]��xz��e�Ԯ,�R+"�#l1b��#�Kh���fT0�)��Zɾ�F}:DEq�8����_>��(eW����6^�V��s'�}[qX�&�P������Yf���	b�yG�I�O�����#o��=7��Kv��]W�.=�I�X`��G�E�&���/�#i3��/����`�K
��;,��w��l�ݹ2y�4��Zl�+q\���^�TYݮ�b�Q�m�rN��q�G�xD��1`�i,7�X���u=����<}E�-q^Z�QR#D�|�.�����s'}1u^e�iuW�98SDt�o���vN�]��T,X?�T���H� /B�����W�Ś�M��[�Pz��Z�nXjw~/�l��c-�J,E�W!.>�X�$���O0�)V�F.�Q�4ZB�f���B�
����ʶ;�%��D�f�<c ?���j��g�]�ԣM��|0¨�f���Eg2�x�(�h��Ka�g�EU����^�!,�wY�@�-��iٷ��Xl�[��̥7j/w/J�Q�����A�HB`�rܛ���ࡤĝ�gv��Y����E��l�_��Y�6nu��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0��W
8���o��VE���oPPpT���^Bh"h"8
h�/�/c�/�/�n�8�8�wpApA~r}��
�����ȻȻ��p�p�(����� �p� p��x� x���� �� ��� ��0��� ��0�� ������`��H0�(X�,
��"PK*J[�Ö` . .lib64/ruby/io/nonblock.sonuȯ��ELF>�
@ '@8	@��   �� 00 0   888$$xxx  S�tdxxx  P�td�
�
�
TTQ�tdR�td  ��GNU�J$��� �����8j�l��@ �BE���|�qX�0�� U��� x�g�"�, F"[O  b  V  �@
e__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizefcntlrb_sys_failrb_io_descriptorrb_yieldrb_ensure__stack_chk_failrb_error_arityrb_io_taint_checkrb_io_check_closedrb_io_set_nonblockInit_nonblockrb_ext_ractor_saferb_cIOrb_define_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.4GLIBC_2.2.5/opt/alt/ruby34/lib64Eii
gui	q 0  �
( ( � � � � � � h p x � � � � 	� 
� � 
� � � ��H��H�! H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!�������%� D���%� D���%� D���%� D���%� D���%� D���%} D���%u D���%m D���%e D���%] D���%U D���%M DH�=y H�r H9�tH�6 H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�= �I����d����� ]������w����H����1���n������tH���1��
���ff.�f���H���w�?����H���@H��1��� ������tH���1����ff.�@��H���S��������H��H��4H��?���ff.����AUI��ATI��U��H��SH��dH�%(H�D$1������Å�\���e����$�D$��uy���Ɖ����H�=� H��L��H�������H�T$dH3%(uNH��[]A\A]�f���u:I�m�������$H��D$H��u���t����@L���H���������1��������USH��H��H�����t*�%���H�hH���9���H����H��H��[]�������lj��r�����t܀�������H��H��[]����S��a���H�� 1�H�a���H�5OH�;����H�;�H�S���H�5;���H�;[�����H�W���H�5)�����H��H���nonblock?nonblock=nonblock;P	����l����l������������������������Pl����zRx�$�����FJw�?:*3$"D@����\����#DW
Ax���HS����!DU
A���$HP8�����F�E�D �F(�D@g
(A ABBJ0����iE�A�G f
DAHcDA4��eE�HGNU�0�
( +5E}�
�
   ���o`��
�P 8p��	���o���oh���o�o<���o0 ��		 	0	@	P	`	p	�	�	�	GA$3a1��
GA$3p1113@�
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSnonblock.so-3.4.4-3.el8.x86_64.debug���7zXZ�ִF!t/���D]?�E�h=��ڊ�2N����. �䢄��'�'ܰ�%P<���Lz#�@�X�7��rl�e>ɰ���s�Ee9�B� X(����U�'�K!�šF!6nXM�6��;x9&�&7w���aƂ�n����D��ō�Boh����j������{�Z�oRʾ��b�Nтw缵j��p7���W�}e7����3�K۫F�H��C1Z�t����@�ԴR~l�KoC�Gi��J����:�h�cH� ۼm�ط^�6�"��Nc�ÿBQng}��������w�A]}v�,{:��q�4�0���U��fJ!�fն��Kf�����
�[�@C]I�g~zy�P�b��7uR�v����
����Aj���7i�ݚ��;V&d6���Ɗ�]�򤘶�Su ��~�2()��@���z��IsZ��!w��Hw���z
�}��-�^��ɡ[�a����q�\~M�M ��D�N
D�`��++�������	۾]�
�.�॒�t�����;�$������c݋���"�V��;ږ"U��F �ʹE���虮(��~^���x�|Op�	���Q���!�k~����;N�q�W}��3�Hn�o0���i�kF��1�I����0���Mfs�f�*4�e7��JcN9�
��y�e6n���mBY2�#p6���'�qZDH��6U�%�Z���Dz��m3Cd	[�@I�d����f�Ou�T�1��jv)�!L(�0�_�\X�J/u���>\�'v'��1����jM?�"�E�G~��B��;�H��d�lCUо9=��EzaB���Ks�;��Z��A+��}�P-�O
t��V!6���FD�S��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0���8���o<<,E���ohh0T���^Bpp8h��c���n�	�	�w�
�
%}�
�

�2�
�
��
�
T�((P�xx � �   �( (�0 0 �P P��   � ` HH",t"��%"PK*J[j���-�-lib64/ruby/io/wait.sonuȯ��ELF>p
@�&@8	@�
�
      �� 88 8   888$$�
�
�
  S�td�
�
�
  P�td���44Q�tdR�td     ��GNU�p��P-$��@L�`8���`"BE���|�qXM�V� ���z U�g�", �F"�S  f  Z  �`G__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_io_taint_checkrb_io_check_closedrb_io_check_readablerb_io_read_pendingrb_io_descriptorioctl__stack_chk_failrb_io_waitrb_fix2intrb_num2intInit_waitrb_ext_ractor_saferb_cIOrb_define_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64Iui	kii
w   ( �
0 0 � � � � � p x � � � � � 	� 
� � 
� � � ��H��H�9 H��t��H����5� �%� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!�������%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%� D���%} D���%u D���%m D���%e DH�=� H�� H9�tH�N H��t	�����H�=Y H�5R H)�H��H��H��?H�H�tH�% H��t��fD�����= u+UH�= H��tH�=. �I����d����� ]������w������UH��SH��dH�%(H�D$1����H�XH�����H���z���H��������~H�H�DH�L$dH3%(u=H��[]�H���h���H�T$�T��1��%����¸��u�HcT$��~�H�D����D��UH��SH������H�XH���"���H�����H���B������u6��H�������H�����tH�Ǩt#�.�����HE�H��H��[]�f��[�����f���S��1���H�r 1�H�����H�5/H�;���H�;1�[H�5���H�5�����H��H���nreadready?;0����L���tl�������������zRx�$�����FJw�?:*3$"D`����(\����E�D�D0P
AAA(�L����E�D�D d
DAJ�����GE�oGNU� �
0  /9I��
�  ( ���o`��
�X 8`��	���o���op���o�o@���o8 ���		 	0	@	P	`	p	�	�	GA$3a1��GA$3p11130�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0�GA+GLIBCXX_ASSERTIONSwait.so-3.4.4-3.el8.x86_64.debug�,E�7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N�$ �$����F��bɿ>H���7�W�?�0˗����ܰN��21'咁�Z���p+�A���N)�������p���ԍ�w1A�3H��ʖ��WV�S�=*fpUr�)��&�IV���v��1�#��'w҄W_������ډ�.��ZA<���P��e	���5�Gk{�rl�񺼈�͇�rG�a(h:�~���r����'��m�Q���B��`���S8��Pv���.p���dR�w)��
�l���6G��J(��/F���خ.��x�9
��ߵ���`�e�xUb���B���R*T��_�OjI��3��y)�Y�q�隊v��"��2V�Z'�&�}��iD	~v�~��KN>�g!��<�%�~SX��)����v'}���B�,�$3p�w�.�
��׋�.�&�#��,�}n�=~5�;�W��E�Q0�M�f؜����f��((�pp%e�G?��H�X3��.��5R/N��*��C��	^G�"�ȍ_`�gA`B޾��8�J��t�uDk�"�U/&W������3�ؐ��.wHb���i<��y ��v͏b?���8`NO�:�������j*��$
��I�Yᬟt��(Ҽ�c�	%���A<��?��c�zY-�������{���-į"�4f��o�}yaMp����n��3�0�����#v�poLr}�2��_��1�-^5���nz�R_�q �,3A��l���*<x�
��y��\���ު޴��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0���8���o@@,E���opp0T���^B``8h��c���n�	�	�wp
p
7}��
�2��
���4������
�
 �   �( (�0 0�8 8 �X X��   � ` HH"(p"P�%"PK*J[g�
�(.(.lib64/ruby/enc/iso_8859_5.sonuȯ��ELF>�
@('@8	@�� �� � 08 �� �   888$$���  S�td���  P�td���LLQ�tdR�td�� � 00GNU��F��,��$3Xx��{�g-�@ BE���|4,\�qX "U���� �Ee��, F"?  R  ��F  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_5rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib645ui	W� 0� �
� �  �8 @@ �H `X px � 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������H�H�2����H��ff.�@��1����w��H�����x����ff.�f���AUD�H��ATL�%�UH�-�S�2A��@tUG�,A��H��D�P�E��A���A���EE�L�L9�sVI9�sQM�ZL�A�A��A��F�\mfA��u�A��@t�A�� t����E�Z�A��A�� ��EF��D[H)�]D�A\A]���H��I��I��1�QH�5����.���H��������I��I�ѿ.1�H�5V������H�5E H�=�����H��H���ISO-8859-5��������������������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�0�0�0�0�0��0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;Lp���h������������ ��������� 0���4zRx�$���PFJw�?:*3$"D(���@\���!p,���#0�H����F�H�H �H(�� DEB����)HI W�����GNU�0�
� �@�`p�%5c�	
�� � ���o`��
y� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@aGA+GLIBCXX_ASSERTIONSiso_8859_5.so-3.4.4-3.el8.x86_64.debugp:��7zXZ�ִF!t/��N]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz/Bb
�𢱇	�>��f>�w�j���c*MY�ü*D�������	��K?�<�{7*���'�yF?ډm�Z�T\o�2M�P����r�g,6�UOs��hR���]��hr��N�W��Z�}	�:U�t.),�t�x���,)�o�*a����~*[���u����@�n}i��H�ꦎ
���D�G[�U���y0��@{���׫;^,�@�t(��8����'^��L0k5\��7o#%��q}��T#t��s���=���_H��.h�����7�%R�44	�fɈ���t�J˺��y
��?��6�J*�G�̘x�υC��,,n�n:ml������[�b���^�3jf9:�����8�/�Cꂓm�
OK&f�p.j*�	e�V
B�SL�(!Q��_�|��7�.���F"��
���)+?ii���� �o�/�ה|�`��X��j��>IJG�㷻���M�tx�l���L�!��0�MT4~��,E5{�iwީ�S�@}*9�+*�r76ΪuQI���A�Zh�"Kܴ�5��n5ܥK�W�d�G���0���Xߑ>D��V�G'���a���ea�t�2D�"��̅𧫢��@��/
%���}i4�@I��pN4/��m�<�7\��KF_,	:r��t	�[lu���ݴ ���2	�M@U����e-X��w2�袚β?Bd�o�l�'*d�)BPI�Z���P�Y	��s�\�*����/yU/e7�F�j���n��/�V�4$�M�e),BhH
Su�%t�ߦ��$�@�|��Z�>����
l�����m��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��y8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
G}��
���� ���L������� �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[2��yX>X>lib64/ruby/enc/cesu_8.sonuȯ��ELF>0
@X7@8	@ �,�, �, @X h-h- h-   888$$���  S�td���  P�td```llQ�tdR�td�,�, �, @PGNU4&�6կ�_M�%歇����@  �BE���|�qX�r �a�� U��, CF"v�0 �0 �0 �__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_unicode_ctype_code_rangeonigenc_unicode_get_case_fold_codes_by_strOnigEncAsciiToLowerCaseTableonigenc_unicode_mbc_case_foldInit_cesu_8rb_enc_registeronigenc_unicode_apply_all_case_foldonigenc_unicode_property_name_to_ctypeonigenc_unicode_is_code_ctypeonigenc_always_true_is_allowed_reverse_matchonigenc_unicode_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��, �
�, �
�, �, �, �
�, @�, p- �- �
- @- �
(- �
@- `
H- 0 - 0- 
8- P- X- 	�/ �/ �/ �/ �/ 
�/ �/ �/ �/ 
�/ ��H��H�a& H��t��H����5
& �%& ��h�������h��������h�������h�������h��������%�% D���%�% D���%�% D���%�% D���%�% DH�=�% H��% H9�tH�~% H��t	�����H�=�% H�5�% H)�H��H��H��?H�H�tH�U% H��t��fD�����=U% u+UH�=2% H��tH�=�! �I����d����-% ]������w������D�H�
aJ�����H�WH9����WH��H�H�����H�GH9����GH��H�H�����H�WH9����WH��H�H���xyH�WH9����WH��H�H�����H�WH9����WH��H�������<��D��f.���������D��f�1�������D@����������D���f�H�YB�����f����������������H�1B���������t�A���ø���������������D�ø����ø�������1�H9�s1��?
���ff.�����W��������~Y��tt��uW�W���G�������?��	��O	��G��
��?�����%�	�	����D�у�t��р��v�1Ҁ���ƒ����W���G�������?��	�	‰��@�W������?	ʉ������H�����ff.�����L��I��H��H���������H�M�����xH� " ���H���I��H��H��L�����ff.�f�����ǀ���t6������t)�����t�����v���%�-������ǀ���t*�����t,����������v8���t	�����@�>�Ð��H�F�������?H���π@�x�)�Ð�������
����F����ƒ�?���Ȁ��?�FH�F�ʀ�V������?�ʀ�V��������?�����π����?��ʀH�F�V@�8H��)�øo����ff.���H��H9�v?�����u4H���@H���J�H�B�A��A��A���A��H9�A��E��u�H9�r�@H)�H��u��p�������	��
��7u��H�H������u�H9�r
�H9�sH���
�΃�@���t�H��H)�H��u��r�������	��
��6HD��ff.�f���H�5� H�=������H��H���CESU-8�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;l ����������0��� �@�,��@��T��h��|zRx�$��`FJw�?:*3$"D��P\��}p,��8���������C�H�H�����`��,�GNU��
�
�, �
@p��
@�
�
`
0�����`	
(�, �, ���o``�
�/ x��(	���o���o����o�ot���o
h- �	�	�	�	�	GA$3a1`	5GA$3p1113�
'GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA+GLIBCXX_ASSERTIONS�
m
GA*FORTIFYcesu_8.so-3.4.4-3.el8.x86_64.debug�J(`�7zXZ�ִF!t/���]?�E�h=��ڊ�2N�����$�/(����fj��Bi|����rq�q���j.4Y4Oūx�̂h�[�G0�4EdG���o��2h��U�ń	��%aa_���?���l浆�� �QqBv~�|�sڔ��!q�tQ]�s�Nu�u�aZ"����>a�ش�W�٫�V�l���ĝ�����>/uW9��Ei0	¶���x�ݵ�yyn,:�����ֹ+��S��#�1��¶Ż��X�e:�����w9��/�"�Ytݕ�C�D��9�۝��Ku�QUe֨���Zr�n�(OF���]�Q�E�^\��퍊��"|�ఴ�MT,�ͫ:=��T2�偳�8|�1�e�%��s���g��	��l��H|%%�#B3z9�:�tuE�}:Q��@!�o��Md�$�.�@��Zb��n֔�T����y)9��� �W%��Op`t��_@�H�cw3�D�R"�[���QvY�/}EN}r�L]H�ŭ�F0�{}��
�3e��i��p��	�iwk����o7��{��#I���7	;�3�W�{qsD��upO���1܂3�t�*�R�<�ߙ�"�����b�rfZ����U��;���F�����%�Vġ�#V��4UM8>3̪ΐI�z�F̀P�,f =��}�Z�3���%�N��	�4Y�j|#�j;lZpԦk�]S�U��"�0�\X��*��O� F�g�[��;C�C��6������}5�. �ӭ��2�e\E�Oj;�2��\�q9�y��3�3-6*�G��B�7f�f��#�B �	��c��aI�L�R����n�����ٽ��厰�����6Q�p�YfIxrw�c6��j�{�%�x��d�=�"Ϲ=�ż;���6���ߵ��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0``8���ott&E���o�� T��(^B��xh`	`	c�	�	`n�	�	Pw0
0
�}((
�@@  �``l���$��� ��, �,��, �,��, �,� �h- h- ��/ �/h�0 �/�0`�/H82(`2�06"PK*J[��%�@.@.lib64/ruby/enc/utf_32be.sonuȯ��ELF>
@@'@8	@HH �� � 8X hh h   888$$(((  S�td(((  P�td���ddQ�tdR�td�� � 8PGNU��S!M��
�.tD� �ꆶ��@ �BE���'᩻�|�qX ��� h���B, $F"U�  ���  �  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_unicode_get_case_fold_codes_by_stronigenc_unicode_mbc_case_foldOnigEncAsciiToLowerCaseTableInit_utf_32berb_enc_registeronigenc_unicode_apply_all_case_foldonigenc_unicode_property_name_to_ctypeonigenc_unicode_is_code_ctypeonigenc_utf16_32_get_ctype_code_rangeonigenc_always_false_is_allowed_reverse_matchonigenc_unicode_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�� �
� p
� � � � �� � �
 �
  `( @H   0 	8 @ 
P X � � � � � 
� � � 
� ��H��H�i H��t��H����5 �% ��h�������h��������h�������h��������%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�} H��t��fD�����=� u+UH�=Z H��tH�=. �I����d����] ]������w��������W����W����W����ff.�f�����fD��ϸ�>�f���H��H9�vH��H)�H��H��?H��>Hʃ�H)�H)��fD����L��I��H��H���������H�A��L�ǀxx�xu�xu�8tI��H��H��D���+���1��Af�H�( �@��A�H����H�W1�H9�v�
t�f.��u�u�1��?���ff.���H9�rWH)�H��~^��G����G����G�����(����� ��1���������D���f�������f.��F��ff.����H�5U H�=�9�����H��H���UTF-32BE;d�������������@����P����`������������$���8P���L���`zRx�$8���PFJw�?:*3$"D`���@\H���#pd���
�`����\���*�x��������]����5�����t�h���GNU��
p
� ���
�
`@����P	
�� � ���o``�
� `��(	���o���o����o�o|���oh �	�	�	�	GA$3a1P	�GA$3p1113�
�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA+GLIBCXX_ASSERTIONS�
�

GA*FORTIFYutf_32be.so-3.4.4-3.el8.x86_64.debugHJ�7zXZ�ִF!t/��7]?�E�h=��ڊ�2N�sdV�ٕ��1����!�6�tm�3C<�3�[:��Td��,.w��3���U�d����:��'Dw�b�n� bt]Yxİ8QD �����
�[.;Pl��l)e��9�
կe�Lz�G�1��-��m��#y�l�!�S�E�թ�9��
��D����o��p�����̱��Q��A0�D���֖��30V4F���@�K��:�h
���Yz��F�2 ���Z�(�y�B_/B�^��~~�^�*C�[7��d�Y���z*��+��5�q֏�/�% ,"F?�Lsƻ���%j|]U�lٳ��ø����:p��+�?�g��f���R+ �(�nZ�Ȝ�0F�vp��ؔeC�Ee,`q��	��^w�z�}q+V[�C~by�zB��`�;�0�`��MG��H��
�C�e�+�?���-]$��}�$���-�D}|�'T�����Fn�g=��L�Aץ��ݶZU)�g�H�w��G�G�0X̴�4��K�Pi�|�zS�P�m�-gh���W���h)�/Z��FƎ/�C{�Я�h�
r���9����vi����g�	�OX!�KV�������9��������</<�I9ȪF���@��_�ʿ^�gPW�������tN���q';�'Ng�a����Xa��V����;�f~�<�ٷJ�j6�A�I��"�v���a�4�r����X\��e�Y�s?q����_iJV[�O�fA]RM*r��L��3��@6�7a�+����=�!�ؕ��%QMX[a.t��z��������z
�n��C��`�-�:�s���U!]�Ŵ�j6p��~F��Y�)�HC7-L�f���~�=�����ȍ�����B�ȱ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0``8���o||&E���o�� T��(^B��`hP	P	cp	p	Pn�	�	@w

�}��
�2��	���d�

�(( �� ��� ��� �� �h h �� �`�  �� `�H0",\"�&"PK*J[�L0.0.lib64/ruby/enc/iso_8859_16.sonuȯ��ELF>�
@0'@8	@ �� � 08 �� �   888$$���  S�td���  P�td���LLQ�tdR�td�� � 00GNUk�+���^�H۟\�y�A�B @BE���|�qXg��� #U���� �Ff��, F"@  S  G  ��__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_16rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib646ui	X� 0� �
� �  8 �@ PH  X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�)���x����ff.�f���AWD�H��AVAUA��ATL�%�UH�-�S�L�L9�swI9�srM�ZL�A�L�XA�ځ���%A��F�t}fA��tTA��@tKE��L��G�<I��A���A��H��@E�E��t�A���L�L9�r�[H)�]D�A\A]A^A_�A��@��A�� ��E��A���A��E�΁���!����E�JMA�������2����&����F����#����EL��A�� I��E��H���6���fDL��E��I��A���H������A�� t/E���SL�XA��A���t=�@sE��L�����fDA��u/M��E��I��A���L��A���������@SE��L���A����E���sA�sH��A���A�����DL��A��I��E��H���k���M������L��A��I��E��H���I���L��A��I��E��H���4���M��E��I��L��A���������M��E��I��L��A���������M��E��I��L��A�����������H��I��I�ѺQH�5����)���H���@����I��I�ѿ)�H�5����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5% H�=�i�����H��H���ISO-8859-16����������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4�0�4���4��0��4��4��0�4���4�0�4����0�0�0��4�0�4�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;Lp���h������������������� ���4P���HzRx�$���PFJw�?:*3$"D(���@\���#Dp,����F�H�B �H(�H0�H8��
0D(E BBBA�����,HL W�����"����B����GNU�0�
� �P @p
&6d�	
�� � ���o`��
z� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_16.so-3.4.4-3.el8.x86_64.debug�t�t�7zXZ�ִF!t/��U]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz1�+IW��dUq�� ���F7/�xUI�ڐujm�΃f-b��G��ŀ�2"F�c�{�[�W1IX���p5�t���Խ�
�E�ֈَ��a�Z�vy��|�ܜ"��P���9\9�Lb���"�X���I<bS��Fɂ��o�D��ʜ�&���X�1e�j�g�R5�`�t�y0������Q��m3�a��Fw�ۋ��/V��c5 ���ѫ���mh\#z77†�*�{�)�ӹ�Gft7��q"B�R���>�l�b���i�\C�7��/����ĩ��E��N��QV	�P��B�ͥ��
�BUZV��5��>p,х��@���M�*I-]>|)��Kq������7ā͚a��̆V�ahN�n��N�ܖ�l��1���g�E\
��K�`ְ����m�wilM�9��&�M.w>څyf��Z�:�F�
��w����:��;��\��j�@�&�\��~�
�!��_�?�H�As�ϝ%��x�#"7�&�n�c�	��7T�b��16-���;84&�f���OF�_a�g������|<��`��Q3��m=�A�D�^hݳO��
,U2 |ٱ�L�k�j?�r�<���X�j�j����^@��qα��8�e�_��}��L���U��:a�o�(��'�`��q���\�{��؎�����N�����=uuF�~v�Mɵ$lj���.W
��'@<.�cG�����͐m���CG��

!�4;�\�5�:F��-���>n�>����!.����j�b)�+���j�29�m�[�,xC���m|k��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��z8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
g}��
�� ���L������ �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[AF.N0.0.lib64/ruby/enc/iso_8859_2.sonuȯ��ELF>�
@0'@8	@�� �� � 08 �� �   888$$���  S�td���  P�td���LLQ�tdR�td�� � 00GNUw@����1'D��>�3���@ BE���|0,\�qX "U���� �Ee��, F"?  R  ��
F  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_2rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib645ui	W� 0� �
� �   8 �
@ `
H 0
X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�)���x����ff.�f���AVD�H��AUATL�%�UH�-�SL�L9�swI9�srM�ZL�A�L�XA�ځ����A��F�lufA��tTA��@tKE��L��G�4I��A���A��H��@E�E��t�A���L�L9�r�[H)�]D�A\A]A^�f�A��@tBA�� t9E�΁�A���A��E�̓���L��A��I��E��H���@L��E��I��A���H���x���A�� t/E���SL�XA��A���t=�@sE��L���N���fDA��u/M��E��I��A���L��A����������@SE��L������E���sA�sH��A���A�����DL��A�� I��E��H��������H��I��I�ѺQH�5����(���H���@����I��I�ѿ(�H�5�����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5 H�=.�Y�����H��H���ISO-8859-2��������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4��4��4�4���4�4�4�4��4�4��0��0��0�0���0�0�0�0��0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;Lp���h����������������������,`���@zRx�$���PFJw�?:*3$"D(���@\���#<p,����F�H�B �H(�H0��
(D EBBC�����,HL W�����"����B����GNU�0�
�  �
`
0
@p%5c�	
�
� � ���o`��
y� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	GA$3p1113@�
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_2.so-3.4.4-3.el8.x86_64.debug���7zXZ�ִF!t/��V]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz0�42�#KϹ����|��^�#m9�*䲴@��etY��_C
����}����m `�Ln��&��x�V��/l���>�C���~�H�<Z����e�T�}�e��NUeK�b�\�ǖ�Ex�fն*y
Ly�\�7�1ԧ�ڳ��#r�6�^�i�����W};k����P���7��b��*s����xh\�߱�W����	�q̓x��wn��K��/W�{�����K���Mh�* �'��Jy����'������Q啟�!=�ڱ�9�-���O���s��T:��p�V�q�@OKx�_vo�`�����,+��˃�q%|�S2��/~x2<��xl�1X\‰ð��^�<
:��)5�z��%�娩���l�jс�K�F ��q���}�w9���N�Y��d��)K4�E�{'���`G����P1�f_\NX[*i[z+d����mK(����:��w���6�I��0s�$�O��
�Q�ؘN��p���A���T1LO�1Ҧ�~sT��Z��\�{��P����b�|{�O�{�0��Lz^�
�0��	U��h��͈�W���oh�xn�{���O��$��_�L���
8��J��{O�3&
[����zS�œ����S�z�Rӯ�K����nֽ-�)��/�k$y/��p�1ީ�r�H��Hk�ABC/T`�Y9�T��W��V��P4�2
*�8�,Ք�������*[T�l��<�1�7k�)����߻q��06���ˁb+��Tq&����)��G�����w���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��y8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
w}�
�

�  ` ���L������ �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[���i0.0.lib64/ruby/enc/iso_8859_4.sonuȯ��ELF>�
@0'@8	@XX �� � 08 �� �   888$$888  S�td888  P�td���LLQ�tdR�td�� � 00GNU(�g�0I1K�M�ɱ�.���@ 	2,\BE���|�qX "U���� �Ee��, F"�P?  R  F  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_4rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib645ui	W� 0� �
� �  �8 @ �
H �
X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�����x����ff.�f���AVD�H��AUL�-[ATL�%RUSL�L9�svI9�sqM�ZL�A�L�XA�ځ����A��C�,tf��tVA��@tMD��L��G�T5I�Á��A��H��fDE���t�A���L�L9�r�[H)�]D�A\A]A^��������@��A�� ��E��A���D��D��`���A��A�������
L��A��I��E��H���p����A�� tGE���SL�XA��A���t}�@sE��L���=���fDL��D��I�Á��H�������A��uWM��D��I�Á��L��A������f.�M��D��I�Á��L��A����������@SE��L���Q����D���sA�sH�����A�����fDL��A�� I��E��H���{���M��E��I��L��A������a���f���H��I��I�ѺQH�5����(�y���H���@����I��I�ѿ(�H�5��n���ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5� H�=�����H��H���ISO-8859-4��������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4�0�4��4�4���4�4�4�4��4���0��0��0�0���0�0�0�0�4�0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;L���h`����`��������������� ���,p���@zRx�$����PFJw�?:*3$"D���@\����#<p���'F�H�I �H(�A0�
(D EBBD�����,HL W����"���B�(���GNU�0�
� ��
�
@p%5c�	
h� � ���o`��
y� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	uGA$3p1113@gGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_4.so-3.4.4-3.el8.x86_64.debugce��7zXZ�ִF!t/��S]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz'�Їx/.�{�wZ��\]&䈁\	p��=v*<�u�9�����7ws����ΰ;b�ۄt+����`��,<�eI�;?���Z�p�Ȏ���*�����L�E��`
��W�]�Tv���
����O���{z�w8�����D;Θ
^�P���.F��G<����rE+A��s��[%খ/���D-p�I~�|�UG��W8���ϢS��Z���B�A
�*�(�(<�����b�#�#�U�]5�B���
zV�)Wؘ����3{�~�%
���)G'W+—�J�HA�rq�q�v����� ��f�,*�v!__�N�+�A�u,�mJ���
�j����D�4(i4(�.�f��RD���r.~���Ǘ�7���4�a ��-�7�m�;~�"�nTM���|���,Hw�&�]������3`����z�U)aƚ`̞�h(�x���7S�O���<��Kv�v�>�l<��`�K�51�0,���������^�bV��&0V!J�=+9(�W1gI�w��5��g�#Y|I�14�,�=�K֞��Cm�'�)�zb3��۷=�c�Se��7�ڙ�cl���ٷ<{`r}x��4�ŚQ����i���i\]C�|ƒ-Z4#��u�S�
x�X<���7��&?NRWU�SC1�8�s�M�
�q
��87y�;�p�mZ���a�c�G���_��|���B�u��>�"�����n+l�Z>��G�^-s�U�	�%�ё/�r�"�㬽��]�Ʈ֬`�Jē�����/�|�J�4=:k��f�>L�����2�R��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��y8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}hh
���` ���L�00�88 �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[Bn��@.@.lib64/ruby/enc/windows_1251.sonuȯ��ELF>�
@@'@8	@@@ �� � 08 �� �   888$$     S�td     P�td���LLQ�tdR�td�� � 00GNU6ٜ��Հp;��Tb�z��@ BE���|�qX��� $U���� �Gg��, F"A  T  H  �P
__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_windows_1251rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib647ui	Y� 0� �
� �  �
8 @@ 0
H 
X px � 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������H�H�r����H��ff.�@��1����w��H�9���x����ff.�f���AWD�H��AVA�����AUA�ATL�%�UH�-�S�2A��@tZG�<A��H��D�P�E��A���A���EE�L�L9���I9���M�ZL�E�E��E��B�\}��u�A���t\��@t�A�� t�A�[�A����vfA�� �����vZA�Z^��vaA���tgA���tiA��A���ED��P���A������B���D[H)�]D�A\A]A^A_��A�� �����I��s�A������A��������A�������ff.���H��I��I��1�QH�5����!����H��������I��I�ѿ!1�H�5V�������H�5� H�=�����H��H���Windows-1251������������������������������������������������������������������@@@@@@@@@�B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@�4�4��0������4��4�4�4�4�0��������0��0�0�0�0��4�0�4��4���4��4�����4���4�0�0�1���0�0��0�4�0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;L0���h������������������@���p���4����HzRx�$����PFJw�?:*3$"D��@\���!p��#D����UF�H�H �H(�H0�H8��
0D(E BBBH� ���)HI W�4����@���GNU�0�
� �
@0

p�'7e�	
h
� � ���o`��
{� `h	X	���o���o8���o�o���o	� 

 
0
GA$3a1�	u
GA$3p1113@g
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@aGA+GLIBCXX_ASSERTIONSwindows_1251.so-3.4.4-3.el8.x86_64.debug��l�7zXZ�ִF!t/���]]?�E�h=��ڊ�2N����. ��Z���'�'ܰ�%P<���Lz�CKD��mh�vA]�W�ad1&��L�OI;ρ?�n=E~Ng&9j�g�������)�P���I��<��Z"j�$�� זM�F��>'�zK"̹��q܌�6�_g�~:���7��ʑ�r���O���U�;ݔ�
�QGprO���#��l�.�h5���3͵�(���n�v��넔;�w�nŠ�Tɲ�y3v~���ο@^���Y`�
#�Xj�y��l���)OR!F�僩�(���m�x�)C�p�
ԯ�>��	�86;�]!�ݳp�6>�>��OX��@��*&�����ɟR�9~��,a	_<'A�m�+���^8��_�7O 6-b^�	���͉�
k_�y+׀k*��*+����a�	1À���$W�j�q�U�,ARvH%yJ��y�l=4ٳ�3%=_	L�1&-.�m��;����?�v|�����Iyg�����V�!�фٹڽu���
������m�[$*�2#�����Ԋ��X%��Μvt`=s&���-'ފ5K�k'��a��\�-��W�R�����n��.S���a�nRf�{׫��j��X� �������U����~G�x`������y�)�a_vR"~lm:�f��X� �k�7��vLBV�o�L��FB�jc�q�Z��a٢O��᚛>�!Tz2R�m�/<�:��0�Q���q�A2vqܟƖ��9��\Cl�x�p��o����B���%�fϰ"�UL��F��������2o�A���oz���~2YB`o���@'��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��{8���o*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}h
h

��
�
@ ���L��   �� ��� ��� �� �� � �� �X�   � ` HH"0x"�&"PK*J[h<��>�>lib64/ruby/enc/windows_31j.sonuȯ��ELF>p@�7@8	@� �  P,P, P, �� H-H- H-   888$$� � �   S�td� � �   P�td��Q�tdR�tdP,P, P, ��GNU=T���Q���W��Ҭ2���b��@!�BE��пeL��|�qXU gSc +����, F"�0 B0�0 �0 __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeOnigEncodingASCIIonigenc_with_ascii_strnicmponigenc_minimum_property_name_to_ctypeonigenc_apply_all_case_fold_with_mapOnigEncAsciiToLowerCaseTableonigenc_ascii_get_case_fold_codes_by_stronig_is_in_code_rangeOnigEncAsciiCtypeTableInit_windows_31jrb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�P,  X, �`, `, �, H�,  �, ��, ��, p�, P�, 0�, `�, ��, p�, ��, - P- �- p
- � -  
(- �0- 
�, 8- �/ �/ �/ �/ �/ 	�/ 
�/ �/ �/ �/ �/ 
�/ �/ �/ ��H��H�a% H��t��H����5�$ �%�$ ��h�������h��������h�������h�������h�������h�������h��������%u$ D���%m$ D���%e$ D���%]$ D���%U$ D���%M$ D���%E$ DH�=�$ H��$ H9�tH�6$ H��t	�����H�=Y$ H�5R$ H)�H��H��H��?H�H�tH�$ H��t��fD�����=$ u+UH�=�# H��tH�=^  �Y����d�����# ]������w�������H�"H�
��x)L�GL9�t0�OH��HЀ<������D@��fD��������D��f�H�y
��������L��I�H�Ѕ�x$L�OL9�tH���L��<9�u
L9�v�����H�FH����t��H��H�F�.@�:H)��ff.����H���<����������v7������wH�B H��H�1���������f.�������f.���I��AWI��AVI)�AUE��I��ATI�F�UH��SH��H�����6�EH�
���1H���D���wkL�
4��M�$YE��xXH�AI�A2$���uBH�=�! J�T5L��H��������u'C�<4u L�
�A�DYH��[]A\A]A^A_�@H��L��H��L��[]A\A]A^A_���@����I��I�ѿS1�H�5�����������wHc�H�z�p�������E������w@��H�U
�<8�%n�����øo���Í��}����v%��a|����v���{������ v�@�G �@�G!�@1ҁ�N��D0����H�>���xH��  ���H��H��I��L��I��H���D������m���I�RL���t
��A�
H��I�RL)҈��Hc�I�fD��ATI��A��I��UL��L��SH��L��H���������A�2H����H�2����I�zH9���A�rH��HЀ<0�@��@���tv���������}����vM��A|���������{���������{������9�tl[]A�C�A�3A\A�C��Q�9�u�[�]A�3A�CA\A�S�1����@�ƍt6��o���fDI��H��D��[L��]L��A\���[1�]A\�f�H�I	�4����0�����Q��9��\���1�������T��k���@��H��H9���D�H�
�B�<t9�N�L�
�H�F�A�<���H�L�@�A�<�~L��H9�u�D�L�H�HK�<��x1H9�t<H���PLǀ<�u@H�HH9�rH)�H��H�1�fDH�P����HE���H�YB����Hc�H���H�H��H�������w��v:����������	��������w0H�� H��H�����H�� �����x����������f.���H�5� H�=������H��H���Windows-31J













































































































������
�"hanlatingreekhiraganakatakanacyrillic@�`�p������������փAZaz`�y�����W�W���r�����@���@���\�K�����@�~����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`���a���b���c���d���e���f���g���h���i���j���k���l���m���n���o���p���q���r���s���t���u���v���w���x���y�����������������ƒ��Ã��ă��Ń��ƃ��ǃ��ȃ��Ƀ��ʃ��˃��̃��̓��΃��σ��Ѓ��у��҃��Ӄ��ԃ��Ճ��փ@�p�A�q�B�r�C�s�D�t�E�u�F�v�G�w�H�x�I�y�J�z�K�{�L�|�M�}�N�~�O���P���Q���R���S���T���U���V���W���X���Y���Z���[���\���]���^���_���`���;������0��������$ �8p�LP�p����������P��d0�xzRx�$���FJw�?:*3$"D(�p\@�]p��?���%������F\���I�E�E �H(�E0�D8�D@�
8A0A(B BBBED8J0A(B BBB ��4��PH��H\ �jPp|�lF�J�G ��
ANLH
FMEb
DEEA
CBJ�����T�f���GNU� �`, H ��pP0`�p�P�p
� 
�
�����X

HP, X, ���o`x�
h/ ��	��	���o���o����o�o����oH- �
�
�
�
�
�
�
GA$3a1X
UGA$3p11130GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0�GA+GLIBCXX_ASSERTIONSwindows_31j.so-3.4.4-3.el8.x86_64.debugy��7zXZ�ִF!t/����]?�E�h=��ڊ�2N�$#�@��I(ቀb)ml�z�e�)b�Pt9���Յ���s�G���ݜ���/0NnJ���b��V5����
�N~w�b�L_��9̰ӈ.f���Uw�Bl�#�'C��,���l�O�mC�=���Kt��s(@���*ɚ��K�mp�'ٿ�~.m��?3�jI� ��J[�Yh��R�|������$�ѿ��~�|�"�o9�B�\+P��	&*�p�"P��"9�"����@�p��&Ǥ����\`�h��%O�ȟH.s�!���4��1C㌝]�﹨��uQ^��K0��e�)�\`�T��QPhTyH���ț;{�w��hhZb<I��H\9��|��G�����y2\�4����(G���Z֏��:�Qz��'�icЈ�"I���Ɏ��\�$�_B��cZ6���>2��U���-���#X�7���K��l�P��;.6X�:K�‹B��J%b3l�F5�`����eq%��iK�7E��5�,�|X�v2�b�5~M�߁��a�Uo4�s+l��z�`�<I��
	��[�m���~�f��R"̀���PE�r�}���mD`��B�C���30��s��)�5�֬�z$*0Ի�#�x~�M�8�wl�rw~���4����	�8�[�k�V�|8c��N�ך�y&v��<hP����/�WW®��L��C=���-y'�\1�(m�\�oR{�j7�e#�bGه���,�)`0��@�J�ki售�6�sY�a��w;O�&�0ΐ��l�#l63@�O���?�����H-꾎���.�q߇&���/�n/'��4�8�O�%��Vb.C�����ȓF4v	���)+��39�:��^0�Ӵ,��%��	��7�ac�)'ˮ8<��R���ct2�z@��+�%B���r�1å��,>9<=��\�}���f��}��[�>Lk��Ӈf��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0xx8���o��(E���o�� T���^B�	�	�hX
X
c�
�
�npwpp�}HH
�``� ������� �  �P, P,�X, X,�`, `,� �H- H- �h/ h/��0 �/�0`�/H82,d2h6"PK*J[]–��-�-lib64/ruby/enc/iso_8859_6.sonuȯ��ELF>�
@�&@8	@�� �� �  8 �� �   888$$xxx  S�tdxxx  P�td�
�
�
,,Q�tdR�td�� �  0GNU��xgC�6��t�/\��m���@ !BE���|�qX5,\"� ���e� u�{0R�, F"}  �  �  Up__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_iso_8859_6rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_ascii_mbc_case_foldonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchonigenc_single_byte_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64sui	�� 0� �
� �  �X @ 
   ( 0 8 @ H P 
` h p x � � 	� � � � ��H��H�� H��t��H����5z �%{ ��h�������h���������%U D���%M DH�=y H�r H9�tH�6 H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�i���x����ff.�f���H�5� H�=������H��H���ISO-8859-6@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@�������0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0;,p���H����p����������zRx�$ ���0FJw�?:*3$"D(��� \�#p���GNU�0�
� �@JYcs�

�� � ���o`��
�� 0�	�	���o���o����o�ox���o� @
P
GA$3a1
�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_6.so-3.4.4-3.el8.x86_64.debugKj��7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N����. ����I����a;�[�$���Il��@��g�&Q�1(@m����y�O��%�z�o�a������o�=���������*���c�:7<��)R��G�(!��������/(c3�QN����P�^R�?��.FE���UO���,��Rmo͸����3 l�7!$:�]�=v���,v.�R�[[���.㝓Kb�[H�T���P��1l�BV����ﰋ����-޶l�J�-�ڷhFc��4T��m%���t�;b�2<9G:*x�Z3C�I�Y3�=۩=p�4:���Tl����������;:N�M"|D��F5�:J�g�>
��\0rnB¥|�H�=��g���N���<���d��r�&>�,�}Һ��kL��WHg���~R]�)� v�lB�.3��)�]�[l����C{e�6�^��@
�W������:cR�祸�$`R���wۂ^y�,p#���~u��:ރ =�䰪���X������4��r���>(�	r�V�
�5�|����E_-cU��u&��¾t��rC-�ߵ��*�JX������Q�����0aߢ����ޝވB7u�[�����)�`S��KSc���[t��MU�j�i�������:ߴ=��Ot	�ّEv	ƀY�c�C�bK��1~�>CZo�$y������X0Q�
���G�E��w���
W�}��X�9�>�l����g������Bv@����u*�/�bшi�}�������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��(0���8���oxx.E���o�� T��^B�	�	0h

c0
0
0n`
`
 w�
�
}��
���  ��
�
,��
�
��xx �� ��� ��� �� �� � �� �H�  �� `�H8",d"T�%"PK*J[)�� . .lib64/ruby/enc/koi8_r.sonuȯ��ELF>�
@ '@8	@�� �� � 08 �� �   888$$���  S�td���  P�td���DDQ�tdR�td�� � 00GNU}��}lo��ܶ�M��W[�@ BE��X���|�qX� U���� �Aa��, F"c  �0v  j  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_koi8_rrb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchonigenc_single_byte_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64Yui	{� p� 0� �  `8 �@ H �X �  	  ( 0 P 
` h p x � � 
� � � � � � ��H��H�� H��t��H����5z �%{ ��h�������h��������h�������h��������%5 D���%- D���%% D���% DH�=9 H�2 H9�tH� H��t	�����H�=	 H�5 H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=� �Y����d����� ]������w������H�H�����H��ff.�@��1����w��H�����x����ff.�f���H��I��I��1�QH�5����!�|���H��������I��I�ѿ!1�H�5V�q������H�5� H�=�I�����H��H���KOI8-R������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@������������������������������������0����������������4�������������0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������������������������������������������������������������������������;D����`����������@����p���������zRx�$(���PFJw�?:*3$"DP���@\8���!pT���#�p���)HI W����������GNU�p0� `���0?IY�

H� � ���o`��
�� `�	�	���o���ox���o�oF���o� @
P
`
p
GA$3a1
UGA$3p1113�GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSkoi8_r.so-3.4.4-3.el8.x86_64.debug��#�7zXZ�ִF!t/��wF]?�E�h=��ڊ�2N���. �����ة�� A���J���W�V?�Ъ��e닆����lr���}x%^����$��D�f�S�\�����P�EM;'�5�gy�%h�~2���X�Z�x�"G�E¨(#k�2x�-
���(�B���������;�'ıH�N�	6A�|��(��B"��q�@���AQ�$HB�!
 �@Hq�j�A#צsZ��O�(�a�z����%S�o�31��v��O��Ӕ�"��w����I�#���
u16�P:(��0��Av����!C��;\�p	���*�(B�y���\�Q��z����T���93�;�~�X��;�� }K|�W9�?�f�\dhU����~a:Ε`QH\*��o�u�R�s65m��,�����FG?^��
:��������
T�e�(���z�GgT
��>qto����5e%��u�y�M�tb�E/=<����<{q��rCt�l8���T3�h-85��O�R@��.�	�Q�����g{�C>��,f��D�F�G�Q�dz�>T�������rNV�E���5��۔B[���W����Ξ���k���.��}�YP�#A�҂c�<;��]�o��4}=�~����.�Yu�>����\%�L�@&��͍�
a�?�0HA�t񔮼�@�d�eI!�	> �n��+�@;*9�W��آ�
����@&_���
��~��.J�_�ȴ0bS�r�j�F�q��>���!l���>��rL��%X|).��Y��u�:�Q�Ǽ�4�-&
b-��堒��ƕJ_�6`s�u�F~�������wA��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0���8���oFF,E���oxx T��^B�	�	`h

c0
0
Pn�
�
@w�
�
�}HH
�``@ ���D������� �� ��� ��� �� �� � �� �X�   � ` HH"(p"��%"PK*J[7[@�0.0.lib64/ruby/enc/windows_1254.sonuȯ��ELF>�
@0'@8	@�� �� � 08 �� �   888$$���  S�td���  P�td   LLQ�tdR�td�� � 00GNU�T��a2�bm�4w@ xٲ�@ @BE���|����qX $U���� �Gg��, F"A  T  ��H  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_windows_1254rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib647ui	Y� 0� �
� �  8 �@ PH  X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�����x����ff.�f���AWD�H��AVI���AUL�-�ATUSL�I9���L9���M�ZL�A�L�XA�ځ����A��C�lef��tuA��@tlE��D��A�������I��H�E��F�#L��I��H���E����m���L�A���I9��f���[H)�]D�A\A]A^A_ÐE�b}A��7w^M��sXL��D��I�Á��H���@A�� ��E���SL�XA��A������@sE��L���y���fD��@t�A�� t�E��D��A�������i�������E��A��A���t�����L��A��I��E��H������@A��u7M��D��I�Á��L��A��������f.��@SE��L���9����D���sA�sH�����A�����fDM��A��I��E��L��A�i�y���A������n���M��A��I��E��L��A�����O���A�I�D���M��E��I��L�����tL��A�� I��E��H������M��E��I��L��A���������f���H��I��I�ѺQH�5�������H���@����I��I�ѿ�H�5����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5% H�=�i�����H��H���Windows-1254������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@�4�4�0�0�4�����������0�����������0�����0������4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������������������������������������������������������������������i�������������������������������;L���h ���� ����P�������0��� `���4����HzRx�$`���PFJw�?:*3$"D����@\p���#Dp�����F�H�L �I(�A0�A8��
0D(E BBBB��,HL W����"�$���B�`���GNU�0�
� �P @p'7e�	
�� � ���o`��
{� `h	X	���o���o8���o�o���o	� 

 
0
GA$3a1�	�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSwindows_1254.so-3.4.4-3.el8.x86_64.debug�fI�7zXZ�ִF!t/��S]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz#��
��o��-�Aujڧ%���
��6`���}W�-R��hT�I†o(XC��e�ӽlrA�A�x�IP��	v�<�`�Hϻ	������|�qT.��öCE�[���R��;�R���:��B��C�1����+g��W���A)_i����“���f�z�Q��
҇}���Ȳ��_����RS}�8}'"���0���J��Nn4����3ƕ�-by�%���aF�����a@x�\��hB���4�)��O�)��ɾ\����Dgu#���e0��h�h�dֵIj��ɦ,�`�\�a��.��Ѐ%��iי'����k.<G���)W�y@ʳ "*���U!���u���Y�Z�I�e`��<�]�bN�j�ڭ�8�����$�|dhOC�c�H���.���$#��{O{��-J�mo�EAv�yD�����RH#��~�@��iA�D%�9�ۡm,$�%���"�I{�"�4;s0� ���F1���ف��uw��X�u�%��
�
t1�௥W~2�-�ra��!�b�?��
F�N�L�7P뼥�Y�3ʏ��?2�!A�W=�d�LŠ�Cv�N>�C`�.��*X�PQ��y���LF���2�/A����^�!������R��4��h�7��&\④�N���2ӲQHUA+�>�^XV��#������W��6S���C��r7W��|��d�]�'a*
ɿ�8ILc|L���jL�˕q}N�h�2qe@�g
}f-���>O~�Jt�uy0P�}�e�j����
�bD�Mt�	ⲝ�*��2�R��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��{8���o*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
g}��
�  �  L�pp��� �� ��� ��� �� �� � �� �X�   � ` HH"0x"�&"PK*J[�xXx-x-lib64/ruby/enc/encdb.sonuȯ��ELF>p@x&@8	@�� `` ` �� xx x   888$$hhh  S�tdhhh  P�td���$$Q�tdR�td`` ` ��GNU�M��V��Q?yw“E0cx�
�@0

BE��j���|�qX ��` �q, F"�  U0��  �  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_encdbrb_encdb_declarerb_encdb_aliasrb_encdb_replicaterb_enc_set_baserb_encdb_dummylibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�`  h �p p � � � � 	� � � � � � 	��H��H�Y H��t��H����5� �%� ��h�������h��������h�������h�������h�������h��������%� D���%� D���%� D���%} D���%u D���%m DH�=� H�� H9�tH�V H��t	�����H�=Y H�5R H)�H��H��H��?H�H�tH�% H��t��fD�����= u+UH�= H��tH�=n �Y����d����� ]������w������H��H�=����H�=����H�=�����H�=�����H�=����H�=����H�=}���H�=x���H�=r���H�=q���H�=l�t���H�=g�h���H�=b�\���H�=^�P���H�=V�D���H�=U�8���H�=T�,���H�=S� ���H�=R����H�=Q����H�=P���H�=O��H�=N���H�=M����H�=M����H�=M���H�=M���H�=M���H�=M���H�=M���H�=H���H�=C�x���H�=A�l���H�=>�`���H�=;�T���H�=8�H���H�=5�<���H�=5�0���H�=6�$���H�=7����H�=8����H�=9����H�=:��H�5�	H�=4����H�5{	H�=(���H�5H�=����H�5U	H�=���H�5H�=���H�5/	H�=�
�r���H�5�
H�=�
���H�5		H�=�
�L���H�5�
H�=�
�i���H�5�H�=�
�&���H�5�
H�=�
�C���H�5�H�=�
����H�5�
H�=�
���H�5�H�=�
����H�5�
H�=�
����H�5qH�=y
���H�5m
H�=m
����H�5KH�=`
���H�5T
H�=T
���H�5%H�=G
�h���H�5;
H�=;
���H�5�H�=.
�B���H�5"
H�="
�_���H�5�H�=
����H�5	
H�=	
�9���H�5�H�=�	���H�5�	H�=�	����H�5�H�=�	����H�5�	H�=�	���H�5gH�=�	���H�5�	H�=�	����H�5AH�=�	���H�5�	H�=�	���H�5H�=�	�^���H�5�	H�=�	�{���H�5�H�=�	�8���H�5�H�=z	�%���H�5�H�=s	����H�5�H�=l	���H�5�H�=e	���H�5�H�=[	����H�5�H�=S	����H�5pH�=I	���H�5]H�=A	���H�5JH�=6	���H�57H�=.	�z���H�5>H�=&	�g���H�5+H�=)�t���H�5H�=	�q���H�5
H�=	�.���H�5�H�=��;���H�=����H�5�H�=��,���H�5�H�=����H�5�H�=�����H�5�H�=�����H�5�H�=����H�5�H�=����H�5�H�=����H�5�H�=����H�5sH�=����H�5gH�=����H�5MH�=��>���H�5~H�=~�[���H�5kH�=r�H���H�5XH�=e����H�5H�=Z�"���H�=�����H�5�H�=A����H�5�H�=9���H�5-H�=4����H�5�H�=-���H�5�H�="���H�5�H�=���H�5�H�=���H�5�H�=�~���H�5�H�=��k���H�5}H�=��X���H�5uH�=��E���H�5bH�=�����H�5�H�=�����H�5GH�=�����H�5?H�=����H�5,H�=����H�5�H�=�����H�5H�=����H�5	H�=����H�5H�=����H�5�H�=��W���H�5�H�=��D���H�5{H�=��a���H�5�H�=s�N���H�5�H�=k�;���H�5�H�=c�(���H�5�H�=[����H�5�H�=S����H�5�H�=F���H�5:H�=?����H�5gH�=c����H�5TH�="���H�5AH�=���H�=�W���H�5
H�=	���H�5	H�=��q���H�5�H�=��.���H�5�H�=��K���H�5�H�=��8���H�=����H�=����H�5�H�=��
���H�5�H�=���H�5�H�=����H�5�H�=����H�5�H�=���H�5�H�=���H�5{H�=���H�5tH�=|��H�5nH�=p�u�H�5hH�=d�b�H�5bH�=X�O�H�5\H�=L�<�H�5VH�=@�)�H�5�H�=4���H�5�H�=-���H�5�H�=&��H�5�H�=��H�5�H�=��H�5}H�=��H�5<H�=	�t�H�5qH�=H���]���H��H���ASCII-8BITUTF-8US-ASCIIBig5Big5-HKSCSBig5-UAOCESU-8CP949Emacs-MuleEUC-JPEUC-KREUC-TWGB18030GBKISO-8859-1ISO-8859-2ISO-8859-3ISO-8859-4ISO-8859-5ISO-8859-6ISO-8859-7ISO-8859-8ISO-8859-9ISO-8859-10ISO-8859-11ISO-8859-13ISO-8859-14ISO-8859-15ISO-8859-16KOI8-RKOI8-UShift_JISUTF-16BEUTF-16LEUTF-32BEUTF-32LEWindows-31JWindows-1250Windows-1251Windows-1252Windows-1253Windows-1254Windows-1257BINARYIBM437CP437IBM720CP720IBM737CP737IBM775CP775CP850IBM850IBM852CP852IBM855CP855IBM857CP857IBM860CP860IBM861CP861IBM862CP862IBM863CP863IBM864CP864IBM865CP865IBM866CP866IBM869CP869Windows-1258CP1258GB1988macCentEuromacCroatianmacCyrillicmacGreekmacIcelandmacRomanmacRomaniamacThaimacTurkishmacUkraineCP950Big5-HKSCS:2008CP951IBM037ebcdic-cp-usstateless-ISO-2022-JPeucJPeucJP-mseuc-jp-msCP51932EUC-JIS-2004EUC-JISX0213eucKReucTWGB2312EUC-CNeucCNGB12345CP936ISO2022-JPISO-2022-JP-2ISO2022-JP2CP50220CP50221ISO8859-1ISO8859-2ISO8859-3ISO8859-4ISO8859-5ISO8859-6Windows-1256CP1256ISO8859-7ISO8859-8Windows-1255CP1255ISO8859-9ISO8859-10ISO8859-11TIS-620Windows-874CP874ISO8859-13ISO8859-14ISO8859-15ISO8859-16CP878MacJapaneseMacJapanANSI_X3.4-1968646UTF-7CP65000CP65001UTF8-MACUTF-8-MACUTF-8-HFSUTF-16UTF-32UCS-2BEUCS-4BEUCS-4LECP932csWindows31JSJISPCKCP1250CP1251CP1252CP1253CP1254CP1257UTF8-DoCoMoSJIS-DoCoMoUTF8-KDDISJIS-KDDIstateless-ISO-2022-JP-KDDIUTF8-SoftBankSJIS-SoftBank; ��<D�dd�|zRx�$��pFJw�?:*3$"D��`\���H�GNU� �p ����	�
�` h ���o`��
� ��H�	���o���o(���o�o���ox �����GA$3a1��GA$3p11130�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignencdb.so-3.4.4-3.el8.x86_64.debug���K�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N�$������Ph�!h�մBM���W�9��h,~Z����f�g�]DW�q��uW�V���S6�X�L�풞�f��I�#p$��Ս��2zm�;��I���Ip~�e
����_�Ή�Zwp��I���ŋ7�I��3$`cl��w֢�%Q���0(d�:�N�贻#)���5��ay��F���|��?�l^Q�u�R�]��Nf�M�_�̪S�o�6��\��j������y�f�����q*A[F��M1��}E0g��5��$f(�dȥ&�)N"2
ä��^�t��;<Q��v���K���T�j�$詝�Q�^����gsT�㔜9�=sz,��P�c�"jRX<V�l�Ͷʗ�D�;t�.u���K`䮎Pz<�*ƘιP��m徬����VBblʫpPFԶ�`e����X�16�G�����.����3r%p����]� ��+BG����H�\IQ�>as�=�ՙ�
��`)󷓡}��2�04�D:&Ȗ?���!<G*ݚN��w#rl�[u�eZ���o��
!NJ�{�k���Q���1s�`]DWM��˷u���k����M��\S�J�jWB�hid��HmWᴚ����U
"<�������7�:LY4���_K�k�Yv��Oy1��lh2և��촄��L�ɳ�.�>�ע�3����!hh�j6��rrF]�z�\~�Q
�-Y�8G�f�����V�e��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��P0��8���oE���o(( THH�^B���h��c��pn`wppS}��
�2������$���x�hh �` `�h h�p p�x x �� �h�   � ` ��!( "4T%"PK*J[���H.H.lib64/ruby/enc/cp949.sonuȯ��ELF>@H'@8	@XX �� � HX hh h   888$$888  S�td888  P�td���\\Q�tdR�td�� � HPGNU;B�$�~b���{����(d�@" BE���|P�e�qX ���o�� Ue�<, ��F"    �p
  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_mb2_is_code_ctypeonigenc_mbn_mbc_case_foldonigenc_mb2_code_to_mbconigenc_mbn_mbc_to_codeonigenc_mbclenInit_cp949rb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_mb2_code_to_mbclenonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� �� p� � � �� �
 � � `8 @H �P  �    ( 
0 
@ X � � � � � � � � � 	� � ��H��H�� H��t��H����5z �%{ ��h�������h��������h�������h�������h�������h�������h��������% D���%� D���%� D���%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=j H��tH�=. �Y����d����] ]������w�������H��H�
��x)L�GL9�t0�OH��HЀ<������D@��fD��������D��f�H����������H���<����������H�׉���~���ff.�����L��I��H��H����7��������H��H����
���ff.�f���H��H��H��H���+���ff.���USH��H��H9�vq�L��A�<t4�F�L�
�H�^�A�<��jD�C�L�C�A�<�~L��H9�u�H��H��HcA9Au*H�H9�HF�H9�rH��H)�H��H�0H��H��[]�H��H��H���2���H�H���H���fD��H�5e H�=�9�����H��H���CP949��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;\
P���x��������`�����������������������0����\zRx�$��FJw�?:*3$"D(���p\@���]p������������������������(�����E�A�G z
DADL���GNU��p� ��
��`@� ����(�	
�
� � ���o`��
>� �H	8	���o���o���o�o����oh  
0
@
P
`
p
�
GA$3a1�	�
GA$3p1113��
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�GA+GLIBCXX_ASSERTIONScp949.so-3.4.4-3.el8.x86_64.debug�7ɕ�7zXZ�ִF!t/���{]?�E�h=��ڊ�2N�sk��ٕy1� @�	�S�V$�:����rD�R"y�t�ܖ@d�DfaߌUy}�_�Ȼ�ZW�XTY�~t����'AW>r2;�s|#3�}�Ib�1]+�%�mpH�
!Ab
a�Ϊ��5o^�K���=�H�=���^�!o6��i5��ڨe�\c����3q��A�tf�}|����Z�Nξ�f^jr��b��
��3I~��-�+_��)LDq�!A��T�h蜝Mܺ>[t炮�(�q�p=���8���^%�I�xI�"�o6���gn�0�y�����x����W�,[~F���ky��H�Ƌ�N�R��͢��.�G��
��P�5�楻�]v�X6���*�:�]|�Y�y��ٍ"Wb�O��c��߁�'h�� ���/��R�(�A��>��5��LF���q�ֶ��3���҇
,�1�u=W[@m�@:m'�*��F�Xg�8i
��V����loo�e"$x(��3{]�?��/!lMK�ȭ��
���ɋ�"<��ƕ�Y]���AM���ly�B��>����v�D�2^�oɠ��~��G�+'�HP�\�s�R�C�h��n�yksS��I�a�~�u�{���9`�=W_�A�j;eμ��N1<��+�~�[��6��ރ����,azH����E`��<eb�X�mLW�pC���kV�w3��Ϸ���͢>�җ���'2��[�x�Q��²��D�\�C��]��I���\�aB:g�K`����~�>CI�Bb�ě�).��N�Ҁ4O""[��)�S�񜨊�,w�r�8tg�O-���B&�:ͽUj��8<� n��1]]/h��jetȕ�4��D����UV�\�`�ֻ+J�p������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0��>8���o��,E���o T88^BH	H	�h�	�	c

�n�
�
pw�}�
�

��
�
  ���\�  �88 �� ��� ��� �� �h h �� �p�  �� `�H@"(h"�$&"PK*J[{"
$ . .lib64/ruby/enc/koi8_u.sonuȯ��ELF>�
@ '@8	@�� �� � 08 �� �   888$$���  S�td���  P�td���DDQ�tdR�td�� � 00GNUCU��� �8c壹 ��P��,M�@ BE���|�X��qX� U���� �Aa��, F"c  v  �0j  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_koi8_urb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchonigenc_single_byte_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64Yui	{� p� 0� �  `8 �@ H �X �  	  ( 0 P 
` h p x � � 
� � � � � � ��H��H�� H��t��H����5z �%{ ��h�������h��������h�������h��������%5 D���%- D���%% D���% DH�=9 H�2 H9�tH� H��t	�����H�=	 H�5 H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=� �Y����d����� ]������w������H�H�2����H��ff.�@��1����w��H�����x����ff.�f���H��I��I��1�QH�5����%�|���H��������I��I�ѿ%1�H�5V�q������H�5� H�=�I�����H��H���KOI8-U��������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@������������������������������������0�0��0�0������0������4�4��4�4������4���0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������������������������������������������������������������������������;Dp���`������������ ����P����p����zRx�$���PFJw�?:*3$"D0���@\���!p4���#�P���)HI W�d����p���GNU�p0� `���0?IY�

H� � ���o`��
�� `�	�	���o���ox���o�oF���o� @
P
`
p
GA$3a1
UGA$3p1113�GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSkoi8_u.so-3.4.4-3.el8.x86_64.debug�0��7zXZ�ִF!t/��wF]?�E�h=��ڊ�2N���. �����ة�� A���J���W�x3�x6[��^�ءo,`��u�a�Ӓ�߾7.�ߙ���v����?P-��\K\��޷�b�.�#�]}���~SE��8��X�O����.��fWZ	ĩ�:���l��ْ�r@Na�~^?�@�kvXﴊ�1�W������i�\�54CW�V~!&��1���7�5�t{����Nj�G�&�4�|���o��f�g	��j}\\^��ٖ���(7�m�㝔��
��$����^��ğlH�W�!���������sk��<��F��W&t���]���%DIQ��I�o�ɼB��o�j,��&��L"�w~6zy�� ?���������Yh�iX�������?
DRИ�����>�j41w^\3f��:NO�1"�x����C&�L�<Xn!���^��{�&�;M��t_�>\1��������œ"p�O��)�.����������/@r��*�md+�>c}���أPd�;�;m���VbC.S�u4/�R�}Sň?�(BQ\���L�*�JD.a�x��S�D�?�X>N0luV�#]�����;�a��U�f�
�r'����D�mx6�~��:��׽�����2��E2�(��&�3���@9�r�铑����yq�2����f�2�ѶSh�U�,*q���	��,k
���!nR�F=|�|bU��VW,�1>�0�e��N�J�!����"�@4j3�!�{�N0��JF�x!0/|�����x:	�(���(̔�6@�IJ}��6�{����q�������wA��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0���8���oFF,E���oxx T��^B�	�	`h

c0
0
Pn�
�
@w�
�
�}HH
�``` ���D����� �� ��� ��� �� �� � �� �X�   � ` HH"(p"��%"PK*J[���>H.H.lib64/ruby/enc/euc_tw.sonuȯ��ELF>@H'@8	@�� �� � HX hh h   888$$xxx  S�tdxxx  P�td\\Q�tdR�td�� � HPGNU��wy�M�˘�z�_K՘��@ �BE���|�qXV5	 ���oU�� f=, ��F"      ��
__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_mb4_is_code_ctypeonigenc_mbn_mbc_case_foldonigenc_mb4_code_to_mbconigenc_mbn_mbc_to_codeonigenc_mbclenInit_euc_twrb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_mb4_code_to_mbclenonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� �� p� � � �� �
 
 � �8 �H  
P �� 	   ( 
0 @ X � � 
� � � � � � � � � ��H��H�� H��t��H����5z �%{ ��h�������h��������h�������h�������h�������h�������h��������% D���%� D���%� D���%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=j H��tH�=. �Y����d����] ]������w�������H�2H�
��xiL�GL9��|�OH��H�H���xXH�OH9��|�OH��H�H���xWH�OH9�teH���OH�1��<
����D���D��������D��f���������D@��f�H��������������������ø����ø�������1��?~�������H�׉������ff.�����L��I��H��H������������H��H������ff.�f���H��H��H��H������ff.���USH��H��H9�vM���_<]v	�f�H9�sH�����_<]v�H��H��HcA9Au.H�H9�HF�H9�rH��H)�H��H�0H��H��[]��H��H��H����H�H���ff.���H�5% H�=�	�����H��H���EUC-TW���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;\
�x��������������������������� ���0����\zRx�$��FJw�?:*3$"D��p\����p����
�����������������(����E�A�G V
DAHL���GNU��p� ��

��� 
�����)�	
�
� � ���o`��
?� �H	8	���o���o���o�o����oh  
0
@
P
`
p
�
GA$3a1�	�
GA$3p1113��
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSeuc_tw.so-3.4.4-3.el8.x86_64.debug�c��7zXZ�ִF!t/���|]?�E�h=��ڊ�2N�sk��ٕy1� @�	�S�V$�:��� 	(ՓBC��ޘ�uH���Q�k}մ����wF>�S:�a�7�E�a��El_x�1���YE2FD����%`�)�'�&[�<�%�Y��h�#�l,�i�}nZ7
�N�bn�ϭ��I���6�*.���Y倦�_ۍ�M0��
�K��@9pzp��9�O��[_Ͳb�a"���-���Zm�\�?hYGian�[�R�AB����,e�9���K��m�G0�V�4L�8g�J����N��Y��H���j✠���qU���nV�r�������~��x�1(�d:~�+Q��ui�`��:N�ZL;^��@�}k&.���զ}�|u���ىI��6��I>�a����P$}�%1�~剢hG����M��u+�w�m]{�7�%��k�G��|�n.e'���(�Rkݲ�s}�[띳.���|37G8^I���~�*�ˇ����P�R�I�����(̕��S8i�x����I8ϳ���{�#���]��v���������JR=��Rr+�pX�R�;�j�1�`_v�P6��&��+��=����u�++8H���6p����K>J6���O<�=Byv����|�1Ǔ�e��S���[�M���P�E�%�+�A�<;x-��Nn4
��e�qND��i/j�O���0�:w�:T��&P|e��V���D�g�3��H�m
�V2l�TH�d2'~�޹��{

Q��#I���i���^ּD2)�,3��®x���<$�j�z�Q�tf_l5�~��P�:vUe��LI�6��zl���B�qj�8��T�*Y�{x�|뱍d�Y����F�ja�Y5j.�ky���!���U�ip��xU�TQ��N���g����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0��?8���o��,E���o T88^BH	H	�h�	�	c

�n�
�
pw�}�
�

��
�
  �\�``�xx �� ��� ��� �� �h h �� �p�  �� `�H@"(h"�$&"PK*J[��h>h>lib64/ruby/enc/big5.sonuȯ��ELF>0@h7@8	@H$H$ p+p+ p+ �� h-h- h-   888$$($($($  S�td($($($  P�td@"@"@"||Q�tdR�tdp+p+ p+ ��GNU�F��!DZ�v[��z>�B����@ �BE���|;�V ���qX�1
V ���o� U�7Y, ��F"!0 40 ����(0 ��__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_mb2_is_code_ctypeonigenc_mbn_mbc_case_foldonigenc_mb2_code_to_mbconigenc_mbn_mbc_to_codeonigenc_mbclenInit_big5rb_enc_registerInit_big5_hkscsInit_big5_uaoonigenc_is_mbc_newline_0x0aonigenc_mb2_code_to_mbclenonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64ui	9p+ �x+ ��+ �+ �+ ��+ 0�+ ��+ ��+ p�+ P, �, 0@, PH, %`, �p, �x, p�, P�, ��, 0�, ��,  - �- �- p8- PH- �P- 0�+ X, �, �+ h, - �+ �,  - �+ 
�, 
(- 
�+ 
�, 
0- 
, �, @- , �, X- �/ �/ �/ �/ �/ �/ �/ �/ �/ 	�/ �/ ��H��H��" H��t��H����5J" �%K" ��h�������h��������h�������h�������h�������h�������h��������%�! D���%�! D���%�! D���%�! D���%�! D���%�! D���%�! DH�=�! H��! H9�tH��! H��t	�����H�=�! H�5�! H)�H��H��H��?H�H�tH�]! H��t��fD�����=U! u+UH�=:! H��tH�=� �Y����d����-! ]������w�������H�BH��H���x&L�GL9�t-�OH��HЀ<������D@����������D��f�H����������H��H��H����x*L�GL9�t9�OH��HЀ<������D@�����������D��f.�H��
��������H�rH��H����x*L�GL9�t9�OH��HЀ<������D@�����������D��f.�H���������H��<����������H�׉�����ff.�����L��I��H��H����W��������H��H����-���ff.�f���H��H��H��H���K���ff.���USH��H��H9����L�PA�<tQL�L�
O���L�8
H�-1	��A�<�����u$L��L9�tL�C��C�M9�u߃|�����t�H��H��HcA9Au)H�H9�HF�H9�rH��H)�H��H�0H��H��[]�f�H��H��H���2���H�H���ff.���H�55 H�=n�9���f���H�5u H�=S����f���H�5� H�=>�����H��H���Big5Big5-HKSCSBig5-UAO��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;|���������������(0�<P�Pp�d��x`��������zRx�$`��FJw�?:*3$"D��p\��]p�m�x�m��������������(���E�A�G �
DAC(��<��P��GNU����+ �0��pP�0P%��pP�0� ��pP�0��E

�p+ x+ ���o`��
[�/ �p��	���o���op���o�o<���oh- P
`
p
�
�
�
�
GA$3a1
GA$3p1113��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�MGA+GLIBCXX_ASSERTIONSbig5.so-3.4.4-3.el8.x86_64.debug��l�7zXZ�ִF!t/����]?�E�h=��ڊ�2N����$�;�;9>��� z��ܹ�2��� �����L�0a��5<���(���2��na�tP���э�06���"|��:�/D��q�9���X
�+�������!�)�c"�~���/��'⻿S-]�^߅�g��=ܢDKO��#uA�f޻Z��hw:d����?�%��*�Eq`�J�K����Z�0��=����Ϥ�RH_����i�POcF��̬b8 5�AL�F[)��5x�o{
4�G�.z�G�%m_'�o��xW���W�Ț��٦���(��0²��^m�!��*�V���x\�
n��{Pѱ��>6��M�̈́;DK�n���r'd��ow���(����M���^��;AVtYZ�]?��Z@�<����@j�@5%�m�	!�껞����8��h��
-J��e�>m׫ſ�*N}���L�_�[?o�%nU�s��4�+�e�� �<F�X��,r�_B�v�4����>�٥x5tM����j����0�k1��L*�n�&!T	��%�����S��r�{�m��_��T�a�z6%Z�YC/�Z
����mO��؞�ߵ�ia��P�^�"^v��<X�eE�	�LSfB�0�"�@KЗ"�$�C��NT�����q7�N�_���ލ	|W�+����1�]E�7�������2?z�ڒ@�`��G3KY;D�u}��[^]�BrC���	������0
�&r�C�f����S�}�٫�NʽtW��3@=
�}��K�K��2�Ҽ��":3�����ݠ�ŬSRdւB�E�����Naҩ�٠\������qk`3���|�tXu��m��>�
o��mSˑ��~oNc*}���h���v �$x�V��z�$e��2m��Uk���t����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``<(��@0��[8���o<<0E���opp T���^Bpp�h

c@
@
�n�
�
pw00�}��
�    �@"@"|��"�"d�($($ �p+ p+�x+ x+��+ �+� �h- h- ��/ �/p�0 �/�0`�/H@2(h2�@6"PK*J[ٙ�P.P.lib64/ruby/enc/euc_kr.sonuȯ��ELF>@P'@8	@88 �� � HX hh h   888$$  S�td  P�td���\\Q�tdR�td�� � HPGNU2@��@ި�'���ƫ?Qˆ�@(BE���|�T5	�qX ���o�� Uf=, ��F"    �@
  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_mb2_is_code_ctypeonigenc_mbn_mbc_case_foldonigenc_mb2_code_to_mbconigenc_mbn_mbc_to_codeonigenc_mbclenInit_euc_krrb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_mb2_code_to_mbclenonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� �� p� � � �� �
 � p P8 0H �P  �    ( 
0 
@ X � � � � � � � � � 	� � ��H��H�� H��t��H����5z �%{ ��h�������h��������h�������h�������h�������h�������h��������% D���%� D���%� D���%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=j H��tH�=. �Y����d����] ]������w�������H��H�
��x)L�GL9�t0�OH��HЀ<������D@��fD��������D��f�H���������1��?~�������H�׉�����ff.�����L��I��H��H����G��������H��H�������ff.�f���H��H��H��H���;���ff.���USH��H��H9�vM���_<]v	�f�H9�sH�����_<]v�H��H��HcA9Au.H�H9�HF�H9�rH��H)�H��H�0H��H��[]��H��H��H���b���H�H���ff.���H�5� H�=.�i�����H��H���EUC-KR����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;\
p���x�� ��������������������������0����\zRx�$��FJw�?:*3$"DH���p\`���]p����
�������������������(�����E�A�G V
DAH<���GNU��p� ��
�pP0� ����)�	
X
� � ���o`��
?� �H	8	���o���o���o�o����oh  
0
@
P
`
p
�
GA$3a1�	e
GA$3p1113�W
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�GA+GLIBCXX_ASSERTIONSeuc_kr.so-3.4.4-3.el8.x86_64.debug4��(�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�sk��ٕy1� @�	�S�V$�:��ݓx���˛�mUv⡦�+�@b��C�{�<i`�@rN��j��b�����N0���$~ID��$a�kғ
(�-a ϺQ-��1������`F��x��?�v^��>^"��c��,����l�����4�d��Ź�M$�����
1���ʞ��b��k�:./�>�#�3�qN޽-m�s.:��9�ns���J���5�����_L��<�JaID��#b�s����N���	C�����$��O�9�Z�f�Q[:��1�ڌP�0�g��C��T~�ٵ�hLu�~��rP�7����FHg�(6H����'q͜*B���H\��N�9�?"��%��b��t�H�tRV�̱�d�7}��?Z�*�@��ڜ�0�\�]r�u#0L,Q���M!�˥a��k��<�WN�Ib�?��^4+�.��KEb������	�PJ��F��F
x?F�`������}�ԹIO�ó�D‚w%�|�||D!�}���\{+�un3>���u���Kj��F��]V:<*�$�]���\'��~���,��G	��>���Tmf�8������[�!�iV�r�v����g��`D��P�vh�n���Cf�xA��P�>�a$�{�=�I��In��$�8�&D$�z/��8;|�����C�I�Z����9M{���
�=O��g�[2�@S�D|E�]�lƸ��$q�?f,��f\UX�����"�����>+&�9�&�2�"s�p�\ϣ�K��T@�osX��RY
�V���������S�s�(�D��	K^�7H��n��N���&|�%��/�-$>�}�����1ݽ�ae��S��zY�ı�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0��?8���o��,E���o T88^BH	H	�h�	�	c

�n�
�
pwW}X
X

��
�
  ���\�� �� ��� ��� �� �h h �� �p�  �� `�H@"(h"�,&"PK*J[6*H�@.@.lib64/ruby/enc/gb18030.sonuȯ��ELF>�
@@'@8	@�� �� � @X hh h   888$$���  S�td���  P�td@@@\\Q�tdR�td�� � @PGNU������o��KQ�6�B�Ce�@ @(BE���|�qX�9� v���oU�� O&, �F"�    �  ��__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_mb4_is_code_ctypeonigenc_mbn_mbc_case_foldonigenc_mb4_code_to_mbconigenc_mbclenInit_gb18030rb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_mb4_code_to_mbclenonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� P� � � � `�   � ` @8  H 0P � 	   ( 
0 @ X � � 
� � � � � � � � ��H��H�! H��t��H����5� �%� ��h�������h��������h�������h�������h�������h��������%U D���%M D���%E D���%= D���%5 D���%- DH�=Y H�R H9�tH� H��t	�����H�=) H�5" H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=� �Y����d����� ]������w�������H��H���xiH�OH9����OH��H�H���xpH�OH9�t{�OH��H�H���x;H�OH9�tXH���OH�1��<
����D���f���������D��f������������������������D@�ø����ø�����ff.���H��H9���H��H�
�
�2�41@������@���U@����H��H9��3L�G��2�41@��t��@��ylH��L9�u���H��H9��8�2�41@���@��~7@���H��H9�w �2�41@�����S@����H���D@��t�H��H9��(����DH��H9���L�G��2�41@����@��~�@����H��H9����2�41@��x�@����@��u�H��H9��c�2�41@��x@���e���@��t�H��H9�v���f.�H��H9��*L�G��2�41@����@������@����H��H9�w%�2�41@������@��y	H��I9�u�H����@�������_����H��L9�����f�@����H��H9����2�41@��x]@�������@��uMH��H9��v����2�41@��x$@���`���@��uH��H9�v��f.�H��I9�u��8���f�H��H9�v��fDH��H9������f�H��H9��	����2�41@����@�����@����H��H9����2�41@����@�������H��I9�u��@@��u�H��H9�������2�41@��x�@�������@��u�H��H9��`�2�41@��x@���`���@��t�H��L9�u��fDH��I9��0����4���fDH��H9������f.�H��L9��������fDH��H9������2�41@��x�@�������@��u�H��H9�w�2�41@����@����H���D@����H��H9�������2�41@��x�@�������@��u�H��H9�w��2�41@��x@��~�@��t�H��I9�u�뗐@���P���H��H9��������H��I9�����f�H��I9��=����T���fDH��H9��A����2�41@����@���'���@����H��H9������2�41@�������@�������H��I9�u����@��u�H��H9������2�41@��x�@�������@��u�H��H9��w����2�41@��x@���a���@��t�H��I9�u��M���f.�H��I9��(����d��������������H�2�<����������H�׉���>���ff.�����L��I��H��H������������H��H�������ff.�f���UH��SH��H���r9ruH�H9�s3H�{��~*H9�v%H���
DH9�vH���J���ȍJ)�9��H��[]�fDH���X������뱐��H�5�	 H�=�y�����H��H���GB18030������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;\
��x� ��������������� ���@���0����\zRx�$�pFJw�?:*3$"DX�`\`��p����������������(����oE�D�G G
AAGL���GNU�P� ` �`@ 0�����	
� � ���o`��
(� �		���o���o����o�o����oh �	�	

 
0
GA$3a1�	GA$3p1113`GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY`"GA+GLIBCXX_ASSERTIONSgb18030.so-3.4.4-3.el8.x86_64.debug!��
�7zXZ�ִF!t/���w]?�E�h=��ڊ�2N�HC�.�>&ԞL��$�;�P�G�"�x�Y�ڠ�Xe2����%����ٹ���'����K���Q�Q3Ԛh,	�;�P@��^O�~��u�����g����~�9�_ڎIa�1A�!SR�����mo�/0|=�*9�H40;@�a�~7x�߄�V��t�.��?�\�hj��M�齉��OH>f��@}�3J�e�1ßrg۸FhHVNqD�rj����A.;āq0�Ix$�~�]��=��춓şȩ��f��5z}HbJy���}_]B���b�&�鹏��΍[93��r��������k�G���[������;�iڷ�~� ���4��"��e��eB�%!˯$vN�~�����TKjN��͂ކ���o��1/A������X$�CU�͚��j	:���a�=�_�"��Q��z90���oȓ����T ?�k�
Q@p+B�U����T�7����H�YIe���������(��h�p72�����Ϛ��P�L �@�xRpr��4#����1��Z���㛃	":� �XVx~���)5�t�z<9�f֬�-��H������E�xo�!kXB�EJ���º�?�}�T��\^�Xw�~ӳ�~���'on+�'�4jE�ǜP�:K
y��R���#�*E���g�hY��:��J��zB�X�A����t����?�m�A7Kl�0$^�{�,i�HU��X:E�%D������Z&P�n���#L�gPFkuL�\�+ڜ�\v�=�g:[�4.x�?ҢX���N��A؍�>-���rR�Ʋҩu�6���O�V��C?�h��wF%ir	艦���(�>|,m���а�䵽����aTf��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��(8���o��*E���o�� T^B		�h�	�	c�	�	pn@
@
`w�
�
g}
�    �@@\������ �� ��� ��� �� �h h �� �h�  �� `�H8"(`"�&"PK*J[%7�@.@.lib64/ruby/enc/gbk.sonuȯ��ELF>@@'@8	@XX �� � HX hh h   888$$888  S�td888  P�td���\\Q�tdR�td�� � HPGNU$�5Y�?�7��SH_�?y��P BE���|͸U��qX ���o�� Uc�:, ��F"    �p
	  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_mb2_is_code_ctypeonigenc_mbn_mbc_case_foldonigenc_mb2_code_to_mbconigenc_mbn_mbc_to_codeonigenc_mbclenInit_gbkrb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_mb2_code_to_mbclenonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� �� p� � � �� �
 � � `8 @H �P  �    ( 
0 
@ X � � � � � � � � � 	� � ��H��H�� H��t��H����5z �%{ ��h�������h��������h�������h�������h�������h�������h��������% D���%� D���%� D���%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=j H��tH�=. �Y����d����] ]������w�������H��H�
��x)L�GL9�t0�OH��HЀ<������D@��fD��������D��f�H����������H���<����������H�׉���~���ff.�����L��I��H��H����7��������H��H����
���ff.�f���H��H��H��H���+���ff.���USH��H��H9�vq�L��A�<t4�F�L�
�H�^�A�<��jD�C�L�C�A�<�~L��H9�u�H��H��HcA9Au*H�H9�HF�H9�rH��H)�H��H�0H��H��[]�H��H��H���2���H�H���H���fD��H�5e H�=�9�����H��H���GBK��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;\
P���x��������`�����������������������0����\zRx�$��FJw�?:*3$"D(���p\@���]p������������������������(�����E�A�G z
DADL���GNU��p� ��
��`@� ����&�	
�
� � ���o`��
<� �@	0	���o���o���o�o����oh  
0
@
P
`
p
�
GA$3a1�	�
GA$3p1113��
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�GA+GLIBCXX_ASSERTIONSgbk.so-3.4.4-3.el8.x86_64.debug©��7zXZ�ִF!t/���t]?�E�h=��ڊ�2N�sk��ٕua�N��L�-	ynSk��g�C&�bt!Nj��U�P��!5mY���="�'��[	%�fͿ8����`8{}��]p�&�_���֑^�7~�>�����M��;W�D����!mv3yP�S��K
����^���8�e�x��k]��^��0��=�J����^��{����Y����G�G�I�E���^׼8d��EYh�����7��q��:��}տ����gd�*u}�f+�T�?~^���.��1��r	���s�]0�j�~.[�k�6W�#��آPE8����%����!���9S���^�-�n�a�5�	��<�;�+��?>���.�q��3�a��Q'���,����Q�C>��w�\�hX�GF�qƉ=��/J�9�ڢ4V�?D����.ޘ�"�*��Âm�M<�)v�*��ev2^��Y?�o�*�	]�|�̎��86��^8P��E�3�+L�BΔ\��_�jAȪ��jhQo��\�{�>'���$�j��7���h�0���'4�K�b3�����f��dޢ���*��}ׂ���Y���ju�%ş���U{J���雇=i���e�[IH�aX&�Q&��
��Uէ�=�Yh'n�`a�<�����M���:»}��Iy$�^6}�q%�lepޛӶ��#�0�(\Z�m��Ւ+�e
׎hv+��2Y�א?��H�0�n_N_X�'o�w{�"]HMX_�J�q�0�@c$Ly�@��,��@J
)��!$���/��=�}�l��S�36�2=���i1{6<*�)�
cA�5p�a.��E�!�0�;]c^���Rl�s{���˝�_{�G��p���o����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0��<8���o��,E���o T00^B@	@	�h�	�	c

�n�
�
pw�}�
�

��
�
  ���\�  �88 �� ��� ��� �� �h h �� �p�  �� `�H@"$d"�&"PK*J[��P^@.@.lib64/ruby/enc/windows_1250.sonuȯ��ELF>�
@@'@8	@XX �� � 08 �� �   888$$888  S�td888  P�td���LLQ�tdR�td�� � 00GNU�h�O[��}^,�dr�ۍGR�r�@ BE�쪞ٻ�|�qX $U���� �Gg��, F"A  �PT  H  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_windows_1250rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib647ui	Y� 0� �
� �  �8 @@  H �
X px � 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������H�H������H��ff.�@��1����w��H�Y���x����ff.�f���AVD�H��AUATL�%)UH�-!SL�L9�swI9�srM�ZH�XL�E�E��A�����E��F�lufA��tSA��@tJE��I��G�4H��A���A��L��D�E��t�A���L�L9�r�[H)�]D�A\A]A^�f�A�����A��@��A�� ��E��A���A��E��A����A����6A��A��5�
I��A��H��E��L���`����A�� tGE���SL�XA��A���t}�@sE��L���.���fDI��E��H��A���L������A��uWI��E��H��A���L��A�������f�I��E��H��A���L��A��������f��@SE��L���A����E���sA�sH��A���A�����DI��E��H��L��A������i����I��A�� H��E��L���S���I��E��H��L��A������9������H��I��I�ѺQH�5����(�)���H���@����I��I�ѿ(�H�5c����ff.���H�5� H�=�����H��H���Windows-1250��������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4�4�4�4�4�0�0�0�0�0����4��4�����4�����4����0��0����0�0��4��0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;L���h`����`�����������������@���,p���@zRx�$����PFJw�?:*3$"D���@\����!p���#<���OF�H�B �H(�H0��
(D EBBC�����,HL W����"�(���GNU�0�
� �@ �
p�'7e�	
h� � ���o`��
{� `h	X	���o���o8���o�o���o	� 

 
0
GA$3a1�	uGA$3p1113@gGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@aGA+GLIBCXX_ASSERTIONSwindows_1250.so-3.4.4-3.el8.x86_64.debug�M�j�7zXZ�ִF!t/���`]?�E�h=��ڊ�2N����. ��Z���'�'ܰ�%P<���Lz'�Їx/.��?}���%�uXU�bM
��'������YW,�^i�;H	|;�.�}�x��v���
B��_x����(�����Çi����Q
�O��7XOҼ�A�b�C�z��Wb��PBy�G9Z%�	U��6��8�Y<��4�����]
�eh����`�_�~�����j�&�`'�\������W//�&�nۼ����T�62D�ϢC�$����y�a��5B�� �~�����V��R̂m�LJ]u��"Ug'a�:������Ὑ�1j�;x�8�d C1�S�<�=�M�½B/�w����Ґͬ��ډ�RM���(�h|�9!��E��g:!�1nhɡk�zo�@�������Iv��uՖ�V��lfh������G��9a����sW����39m�7`5�������ٕ�E�{��
�?%�Gi�UI0�����/�ҭ�p\(�᲏9��A$P ~��mռќe���&���]���j��b�B�w��2{+%c�D�� �$�`��3v:,���VaO(O�h���;�ܒ�s����³ZaY���a3܎���ί�r�k�����G���xV
�2V�.�~�\����c
rk��i�#��Vv�ى���t_yc\�l���iO/���)���=3:ҹ<�9[�=��ՊO��9�d��ɒ�1���:��x���`��e�AmD�b�T@4��u�I��ԩ|S���ѽ�%Xh>�fh��R��
;x�6�j�`Z#y�`��<�b�6
�
���l��qsCI'n�
=��L�G����5�G����9��w��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��{8���o*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}hh
���` ���L�00�88 �� ��� ��� �� �� � �� �X�   � ` HH"0x"�&"PK*J[���8.8.lib64/ruby/enc/windows_1252.sonuȯ��ELF>�
@8'@8	@   �� � 08 �� �   888$$  S�td  P�td���LLQ�tdR�td�� � 00GNU���3�	KR@E$	�&���;��@ BE���|�qX��� $U���� �Gg��, F"A  T  H  �0__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_windows_1252rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib647ui	Y� 0� �
� �  `8 @@ H �
X px � 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������H�H�R����H��ff.�@��1����w��H����x����ff.�f���AWD�H��AVAUL�-�ATI���UH�-�S@L�L9�stI9�soM�YL�A�L�XA�ف����A��F�t}fA��tTA��@tKE��L��G�L=I��A���A��H��E�E��t�A���L�L9�r�[H)�]D�A\A]A^A_�E�y}A��7w^M��sXL��E��I��A���H���A�� ��E���SL�XA��A������@sE��L���{���fDA��@t�A�� t�E��A���E��E��A��A��A���������������L��A�� I��E��H�������A��u7M��E��I��A���L��A��������f��@SE��L���a����E���sA�sH��A���A�����DL��A��I��E��H�����M��E��I��L��A������q���ff.����H��I��I�ѺQH�5����"�I���H���@����I��I�ѿ"�H�5c�>���ff.���H�5� H�=�	�����H��H���Windows-1252��������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4�4�4�0�0�0�4�����������0�����������0�����0������4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;LP���h������������������0���`���4����HzRx�$��PFJw�?:*3$"D���@\�!p���#D�(���$F�H�B �I(�K0�H8��
0D(E BBBD����,HL W�$���"�@���GNU�0�
� `@�
p�'7e�	
H� � ���o`��
{� `h	X	���o���o8���o�o���o	� 

 
0
GA$3a1�	UGA$3p1113@GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@aGA+GLIBCXX_ASSERTIONSwindows_1252.so-3.4.4-3.el8.x86_64.debug�%�7zXZ�ִF!t/���Y]?�E�h=��ڊ�2N����. ��Z���'�'ܰ�%P<���Lzb
��yO�k��7C*�Ǥy_%���=�-F@��e� �,��y��4HȒ/�y�b{�>���
���<�W�նo�
{�S
�ֳcY)��.��%C��6�X����؞��#jb��l�U֫�D�n�y��rx5Vp|��^�3����=^S�>B#З_�y�?h�ƾ����N��'t;V����

17|��]_B��70�@r���"���/��?�bߚm6A:��F/Q��_eW��9�k�qU��>�N�.�3퇑�I��n`���$��N�5.<�&傽8`�R��r�fs���w����(a;�V�j�\�eC,��o�!�i��$23_�j1t��-n�C�4˶�r�cL(�:�h�&'�U^�s��N����:��^�`O�ݝn�<�T7�0.n�"�k�����LK,�7f0_bH�gl��W]B#�$��.LT�B����� ;�����'ֺ�̿ѡ��q�F.H�_Xm��{��=���dm��9�w��J�A�M���H8��0�w,M�Û�ע��ż!��䆵�-<Zs0��(�T�HK[�����q	nb
��t�6�_�����?��� L�����=D�*��/DN���2�?��6ti�3@�ك^@ع&�3�۫r>����3A����v�����[�v���4�7��5�t��t�]P���Vx˄B��c����(��w�mk�4gfr����L�����e���s�MP�$~�N9�g��aZ��X�+�i�M8V����!�4d,�wG)ۗ�d�r�Ti�+��R����)�X:��N
[��N����P��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��{8���o*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}HH
�``@ ���L���� �� ��� ��� �� �� � �� �X�   � ` HH"0x"�&"PK*J[�.a�0.0.lib64/ruby/enc/iso_8859_14.sonuȯ��ELF>�
@0'@8	@ �� � 08 �� �   888$$���  S�td���  P�td���LLQ�tdR�td�� � 00GNU��/�0��@�•��(���B BE���|�qXe��� #U���� �Ff��, F"@  S  G  ��__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_14rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib646ui	X� 0� �
� �  8 �@ PH  X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�)���x����ff.�f���AWD�H��AVL�5�AUATL�%�USfDL�L9�svI9�sqM�ZL�A�L�XA�ځ���MA��C�,lf��t^A��@tUD��L��G�.I�Á��A��H���E���t�A���L�L9�r�[H)�]D�A\A]A^A_�f���@��A�� ��E��E�j^A���A��D��A��w$A�	�
M��sL��A��I��E��H���{�����������6��������JE��A��A����$����L��A�� I��E��H������fDL��D��I�Á��H�����f�A�� t/E���SL�XA��A���t=�@sE��L������fDA��u/M��D��I�Á��L��A�������f��@SE��L�������D���sA�sH�����A���^���fDM��E��I��L��A������A���M��E��I��L��A������*���M��E��I��L��A���������L��A��I��E��H�����M��E��I��L��A�����������H��I��I�ѺQH�5����,���H���@����I��I�ѿ,�H�5����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5% H�=�i�����H��H���ISO-8859-14����������������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4�0��4�0�4��4��4�0�4���4�4�0�4�0�4�0��4�0�0�0�4�0�4�0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;Lp���h������������������� ���4P���HzRx�$���PFJw�?:*3$"D(���@\���#Dp,����F�H�I �B(�H0�A8��
0D(E BBBJ�����,HL W�����"����B����GNU�0�
� �P @p
&6d�	
�� � ���o`��
z� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_14.so-3.4.4-3.el8.x86_64.debug��u�7zXZ�ִF!t/��U]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz1�+IW��dUq�� ���F7/�xUI�ڐujm�΃f-b��G��ŀ�2"F�c�{�[�W1IX���p5�t���Խ�
�E�ֈَ��a�Z�w�t�`w�18�5ղZE����ppi�6v+�lc�5[��mWM�
�GǪ�8a#�Ca���~8��b�M��_ɕt�4�G8�?�M9	w�����95�E#�R��U����
@/�8�_�	xWߧD2x�g8��k�eS�@:M�O��S!��_O�R���o��q�����2n2Śj�|d���nǚ�}_�g"tN��B����/��Je��E5:<�޶�z��Rvw�Y�@͢���31��t��6�yLP;۠�������9㏞�k��2A�J�_���aA��?�a����w,]4w�)[֨���N�_}�uADjU���z]�s�F�]��8���M�y��T�;j�e]xө1�����hch
�֓�m\s>0�E�B����@l�1l��'�Y��+HM����1���Y��D^��n,%�t�Eq�n:
=�W"�HB:3#��R����Vo����Y�)���SP�'J��Wz&�S�,�XW�Z�h�i�fʧ\��=��M�r�j'�{���Juh{�4�)��D���s���$��[FV�6�R^%F�&���c�Ǘb�O�gㄫ��H�����\��P�!���*�q<t��ɤ�@�W�a�B�m�I�^θ����N�5��I��f�%Wa�o�waZ���2c�v�����)<ګ���(�^��_� �c��2�<ۄ&����m|k��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��z8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
g}��
�� ���L������ �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[,ͅ[0.0.lib64/ruby/enc/iso_8859_3.sonuȯ��ELF>�
@0'@8	@�� �� � 08 �� �   888$$���  S�td���  P�td```LLQ�tdR�td�� � 00GNU�o�7(�gD>-	���ſ���@ BE���|�qX3,\ "U���� �Ee��, F"?  R  F  ��__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_3rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib645ui	W� 0� �
� �   8 �@ pH @X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�	���x����ff.�f���AWD�H��AVAUATL�%�UH�-�SfDL�I9���L9���M�YH�XL�E�	E��A�����A����GE��F�lufA����A��@��E��E��A��A���A��I��I��G�4H��E��L��fDD�E���\���L�A���I9��U���[H)�]D�A\A]A^A_�A�� ��E���SL�XA��A������@sE��L���f�A��@tZA�� tQE��E��A��A���A��i��A����FA��A���I��A��H��E��L���0���I��E��H��A���L�������I��E��H��A�����A���L����f�A��u7I��E��H��A����A���L������f��@SE��L�������E���sA�sH��A���A�����DI��A��H��E��L��A������i���A�I�^���fDI��A��H��E��L��A�i�9���A������.���fDI��A�� H��E��L������I��E��H��A�IL�����f���H��I��I�ѺQH�5����"����H���@����I��I�ѿ"�H�5�����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5 H�=�I�����H��H���ISO-8859-3��������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4����4���4�4�4�4��4��0����0�0���0�0�0�0��0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������������������������������i��������������������������������������������������������������������������������;L����h��������������� @���4����HzRx�$ ���PFJw�?:*3$"DH���@\0���#DpL����F�H�B �B(�H0�H8��
0D(E BBBA����,HL W���"����B�@���GNU�0�
�  �p@@p%5c�	
� � ���o`��
y� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	GA$3p1113@GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_3.so-3.4.4-3.el8.x86_64.debug��7zXZ�ִF!t/��R]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���L?��i�D����h�ܡ;�膁>bӠ̠�e��һ�
�H햚31��W}�#�en&��瘄����f������q�Up���B#r6���;��! �}쀱ס3����<�xݾ��ryكӢ��zKϴ�/����Z/4���5וe
�`\��@��𰩩Y��6�
�D���5t�,���6Sm�^�@��LJn[�,�5?�S����� �0#��xǟ�Ͱ��,TqF*�/e��OF�`�>֝�|t~��*4]��d�	�(���tP�d���e�l}Cy��`~�4	!����5��A�1�{��?d�.�S��{Ǚ��u�����i2�\ +� �d!�V�xn���v�`��ZE�4��]"�90�C���H0{C�7���,���s��]�\tst�>�)R^br!�fXm���
1zT}�
�/�	:CJ�/�DH,�
N�nes2ۤ�c�c��)rT����8匢[ݙ:�H�ːvl�[����}���zd����ѯ%�>��B�^t+I�5Y"}�ä�*n"�vW/(xh����,��A�SSo&�t�g(hF(�X����S��ϓ��2MU�M�qc}+}\�����s�e�&8Wˬη��>&�Zn����1��A0����V����>��R�����.�1酀V�:=��9���}|�}x�o�E�eу����<Z��V���'���Gq�x��&�(���L�����x�΄S�Y|���"�EK�������g���F����%�ܐ���4��,Ȕ">�e��l��������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��y8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}
�  @ �``L������ �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[���lib64/ruby/enc/gb2312.sonuȯ��ELF>�@X@8	@ �
�
 �
 x� �
�
 �
   888$$XXX  S�tdXXX  P�tdxxx$$Q�tdR�td�
�
 �
 xxGNU4���?�&�$z+�v>Ԙ����P BE���|�qX)3l  , F"� � � U@__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_gb2312libruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��
 0�
 ��
 �
 � � � � � ��H��H��
 H��t��H����5r
 �%s
 ��h��������%]
 DH�=y
 H�r
 H9�tH�F
 H��t	�����H�=I
 H�5B
 H)�H��H��H��?H�H�tH�
 H��t��fD�����=
 u+UH�=�	 H��tH�=� �Y����d�����	 ]������w���������H��H���GNU�;$���@����h����zRx�$���� FJw�?:*3$"D����\@���0��
 apz��0
H�
 �
 ���o`p�
�� p�	���o���oP���o�o>���o�
 `GA$3a10UGA$3p1113@EGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realigngb2312.so-3.4.4-3.el8.x86_64.debug����7zXZ�ִF!t/��
O�]?�E�h=��ڊ�2N��x�~ ��W��'�'�W愨�}���
[�3�2���!y>�'A/{�$�I�T���BN���ɼ(�|�	@�Y�
�B}�z�uH��B�C�7ţ\؎oNh6��g���I�y1a!zF*�5�bv��Mw�f].��4��0u�dEs}��r�9�$:g�����yB`�&%}@۝��Q�e.�zج
l����Ȝ	������{U�s�@ϟ�A�n��c���[2�"�4s	��ʕ<?��?�	+b��6m�:8��0YB8��KN�	���J�V����$B˱��=��=h��a-��/�ɧ�	�z�W\k`,��`9�%
�*c���@_�}�|(��B�K��M6I��L�� �ӂ
�&ĸ0"B����Z�3���Z:�m�PW'(m��jC,��Aj�ۃ3(p���3s+���A���@�����&�u @}+k{�a�vy�~-ԇxҠ��9_)i.�B����~|���\n�����@ܙJ�P���1��;t�%�1�A���e�{Ζ��<Z2{�=p�(B�� x
�u
�G���K.;b�jZ3�����xwC%�&)��^�ݍ�H[r��'+E�&C��q��l�T�ӧ�a��k�
|���1?���:�Ŭ�)/]�G�/#&�P��V ���G�4�Ӝ���4WDL]��t�U��b��g��+�ܧ=v�da����`��Y�)�<��9h���>����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.note.gnu.property.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0pp�8���o>>E���oPP Tpp�^Bh00cPP nppw���}HH
�XX �xx$���p��
 �
��
 �
��
 �
��
 �
 �� �@� �`���( <PK*J[�qO�0.0.lib64/ruby/enc/iso_8859_7.sonuȯ��ELF>�
@0'@8	@PP �� � 08 �� �   888$$000  S�td000  P�td���LLQ�tdR�td�� � 00GNUuV�f�-��R�t��O���@ ABE���|7,\�qX "U���� �Ee��, F"?  R  �p
F  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_7rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib645ui	W� 0� �
� �  �
8 @@ P
H  
X px � 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������H�H������H��ff.�@��1����w��H�Y���x����ff.�f���AUD�H��ATUH�-*SH�"�ME��F�$kfA����A��@t{F�T-A��fDH��D�P�E��A���A���EE�L�L9���I9���M�ZL�E�E��A���u�A�� t~A��A������E��A���A���t�A��@t�A�� �x���A��A���tpE��#���A��vsA���tsA��E�b�A�� A��EF��6���fDA��A������A��A������[H)�]D�A\A]�A��������DA��%����A���������@��H��I��I��1�QH�5����"���H��������I��I�ѿ"1�H�5V�����H�5� H�=������H��H���ISO-8859-7��������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@�������������������4��4�4�4��4��4�4�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������������������������������ܷ��߻��������������������������������������������������������������;L���h`����`��������������@���p���$����8zRx�$����PFJw�?:*3$"D���@\����!p���#4���|F�H�A �H(�2
 DEBD�0���)HI W�D����P���GNU�0�
� �
@P
 
p�%5c�	
�
� � ���o`��
y� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	�
GA$3p1113@�
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@aGA+GLIBCXX_ASSERTIONSiso_8859_7.so-3.4.4-3.el8.x86_64.debug��hU�7zXZ�ִF!t/��R]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz��
riZG��!�	���Y�>;�%�s)e� 7�"#��Q1,��M��#=Nn�n�k���C�,��'
5m(b(����8�RWV<�6�i��ݦƶ�C���-�Z��O°��Ùp\�.=�[���{�&�#.�+�|T���� ��Q)
a?'ʔv6U��9/C�m�|��ch�N��w�LBޥ�9�Ύ}���ޏ]’/W�-S���3��|�>n��c��(����}� hj�:7�:��陱�(�y�V/��Aό���9�"��5`��׌m��	���b�j��YS�&�x�o+잼��˔R¨q��\_B�\Q�:�7p�$^���ߛ��l�n�����E>�|볋eh�=�x�b
�1"Q�:ɫ̛��y���$���"S������%�:EI"��>,�8<�/c-�b�[|a
xP�t���q�R��O�T�׉��T�������^J�9�,�kx$�dH�Z����f�Nw�Zu�j�[�{D6��O�63�`<r��6(xz.�։�bߝ�5�K�Z�-��ٸ%�|�-�
әG>L�͚P�%�])��r�"�I1#����1*���A�m�J&V�ISm%�t�/�e�
�U��bvL�:/J�����*,�A�P	�{0�j�-ta�΅AF.`��#�V���(	ą��r_U�7p��z�0�q��]�7��T��I�W�"Lj��	�{zoo��&�W����Ά߱��m�U���u�N�.�f���G1��b�P�~	��������^�Ŋm����9#�։쑋{��������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��y8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
}�
�

��
�
@ ���L�00�00 �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[/�p��>�>lib64/ruby/enc/shift_jis.sonuȯ��ELF>p@�7@8	@� �  P,P, P, �� H-H- H-   888$$� � �   S�td� � �   P�td��Q�tdR�tdP,P, P, ��GNU!9��C����ĩ�L�4{��^�@0	%��BE���|�qXU gQa +����, }F"B0�0 �0 �0 __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeOnigEncodingASCIIonigenc_with_ascii_strnicmponigenc_minimum_property_name_to_ctypeonigenc_apply_all_case_fold_with_mapOnigEncAsciiToLowerCaseTableonigenc_ascii_get_case_fold_codes_by_stronig_is_in_code_rangeOnigEncAsciiCtypeTableInit_shift_jisrb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�P,  X, �`, `, �, H�,  �, ��, ��, p�, P�, 0�, `�, ��, p�, ��, - P- �- p
- � -  
(- �0- 
�, 8- �/ �/ �/ �/ �/ 	�/ 
�/ �/ �/ �/ �/ 
�/ �/ �/ ��H��H�a% H��t��H����5�$ �%�$ ��h�������h��������h�������h�������h�������h�������h��������%u$ D���%m$ D���%e$ D���%]$ D���%U$ D���%M$ D���%E$ DH�=�$ H��$ H9�tH�6$ H��t	�����H�=Y$ H�5R$ H)�H��H��H��?H�H�tH�$ H��t��fD�����=$ u+UH�=�# H��tH�=^  �Y����d�����# ]������w�������H�"H�
��x)L�GL9�t0�OH��HЀ<������D@��fD��������D��f�H�y
��������L��I�H�Ѕ�x$L�OL9�tH���L��<9�u
L9�v�����H�FH����t��H��H�F�.@�:H)��ff.����H���<����������v7������wH�B H��H�1���������f.�������f.���I��AWI��AVI)�AUE��I��ATI�F�UH��SH��H�����6�EH�
���1H���D���wkL�
4��M�$YE��xXH�AI�A2$���uBH�=�! J�T5L��H��������u'C�<4u L�
�A�DYH��[]A\A]A^A_�@H��L��H��L��[]A\A]A^A_���@����I��I�ѿS1�H�5�����������wHc�H�z�p�������E������w@��H�U
�<8�%n�����øo���Í��}����v%��a|����v���{������ v�@�G �@�G!�@1ҁ�N��D0����H�>���xH��  ���H��H��I��L��I��H���D������m���I�RL���t
��A�
H��I�RL)҈��Hc�I�fD��ATI��A��I��UL��L��SH��L��H���������A�2H����H�2����I�zH9���A�rH��HЀ<0�@��@���tv���������}����vM��A|���������{���������{������9�tl[]A�C�A�3A\A�C��Q�9�u�[�]A�3A�CA\A�S�1����@�ƍt6��o���fDI��H��D��[L��]L��A\���[1�]A\�f�H�I	�4����0�����Q��9��\���1�������T��k���@��H��H9���D�H�
�B�<t9�N�L�
�H�F�A�<���H�L�@�A�<�~L��H9�u�D�L�H�HK�<��x1H9�t<H���PLǀ<�u@H�HH9�rH)�H��H�1�fDH�P����HE���H�YB����Hc�H���H�H��H�������w��v:����������	��������w0H�� H��H�����H�� �����x����������f.���H�5� H�=������H��H���Shift_JIS













































































































������
�"hanlatingreekhiraganakatakanacyrillic@�`�p������������փAZaz`�y�����W�W���r�����@�������@�~����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`���a���b���c���d���e���f���g���h���i���j���k���l���m���n���o���p���q���r���s���t���u���v���w���x���y�����������������ƒ��Ã��ă��Ń��ƃ��ǃ��ȃ��Ƀ��ʃ��˃��̃��̓��΃��σ��Ѓ��у��҃��Ӄ��ԃ��Ճ��փ@�p�A�q�B�r�C�s�D�t�E�u�F�v�G�w�H�x�I�y�J�z�K�{�L�|�M�}�N�~�O���P���Q���R���S���T���U���V���W���X���Y���Z���[���\���]���^���_���`���;������0��������$ �8p�LP�p����������P��d0�xzRx�$���FJw�?:*3$"D(�p\@�]p��?���%������F\���I�E�E �H(�E0�D8�D@�
8A0A(B BBBED8J0A(B BBB ��4��PH��H\ �jPp|�lF�J�G ��
ANLH
FMEb
DEEA
CBJ�����T�f���GNU� �`, H ��pP0`�p�P�p
� 
�
�����X

HP, X, ���o`x�
h/ ��	��	���o���o����o�o~���oH- �
�
�
�
�
�
�
GA$3a1X
UGA$3p11130GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0�GA+GLIBCXX_ASSERTIONSshift_jis.so-3.4.4-3.el8.x86_64.debug��^�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�$#�@��I(ቀb)ml�z�e�)b�Pt9���Յ���s�G���ݜ���/0NnJ���b��V5����
�N~w�b�L_��9̰ӈ.f���Uw�Bl�#�'C��,���l�O�mC�=���Kn~(	���RY#"E1�ў:e�\n��H=�x2��˅5X�(�~��Ih�4���R ���r��o<y�7^2Vv[y>���R�=
b����?2��G��)G�
�ܻ-��4M�;��;��u��K��-ȸ��wj���c�nd�����xeϝeH���G+�K�Fe��
���\��g���̨�\���Fj>U��6?yS���y�O�;�&�'��W�J�����G���".^�vM	����1=�q�:<�ʼn�Ư/�m�9��u5��iӍ�XCǟ����f9�h�"x��t��l�oU����ԕ�:f$�\G���O��8E�na�Q5���5T2�G��م?�������k�C������0��Y����
�Α��bxF<�F����<�m�y�;}�K�n�y�>q�T��rPr�}��w���a��~�־�
S�]|��0D�cb]=&yϞ��#�}�^U��%�\��')����sy�ɨ�� �����?0�G����M�Z?�4�s��V�g=����f�H���	�i�B����h翶�2dd����~���O&������^�i0�Hjmx@S�J��~�r����ZD\��@\z"2s�X��ZP徾x�����$=��w{_f�̔�m�hb�,��F!�z�^�d}�	5H�;�Lş��X?��X�`�
�t��)lY ��{�W�u�U���
]H/à*���	��$�ۄ<�m-�����Ă��-HWmtZ-L1��F�B��a�j���.��=����ff��@|���W�����o>�VI�SE##l������ۭ��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0xx8���o~~(E���o�� T���^B�	�	�hX
X
c�
�
�npwpp�}HH
�``� ������� �  �P, P,�X, X,�`, `,� �H- H- �h/ h/��0 �/�0`�/H82,d2h6"PK*J[�p�E�-�-lib64/ruby/enc/trans/cesu_8.sonuȯ��ELF>�@�&@8	@�
�
   �� �� �   888$$�
�
�
  S�td�
�
�
  P�td���44Q�tdR�td  ��GNU�=[��� Ī|���b0q�@  �	BE���|�qX�r a , F"�  �  �  U�$__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_cesu_8rb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� � P    @ �H �X 
h 	� � �� �� 
 	X �� � � � � � ��H��H�Q H��t��H����5 �% ��h�������h���������%� D���%� DH�= H� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=z H��tH�=� �Y����d����} ]������w�������F�V����
%��	��V��?	��V����	������������?�ʀ�Q�ƒ�?���Ȁ��?�A��ʀ�Q�f�����V�������%	��V��?	��V���A����	�-����ʠ�Q���
��?�ʀ�Q�ƒ�?���Ȁ���A��ʰ�Q����H��H�=A ����H�=� H��������H��H���UTF-8CESU-8B(0d8@vHPX`yh t�|�8������ �����������������������;0����L���t��������������zRx�$@���0FJw�?:*3$"DH��� \���npl���x����$HWGNU��P  ���
�	>���
�	>�x����p
�  ���o`��
�� 0@��	���o���o����o�on���o
� ��GA$3a1p�GA$3p1113��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�GA+GLIBCXX_ASSERTIONScesu_8.so-3.4.4-3.el8.x86_64.debugAoS�7zXZ�ִF!t/��]?�E�h=��ڊ�2N����������1��1ս*u��wι�%h.{iq��X-�`�qC0��]���}�2�臙�[Ί��r#�b��s-Q~\���q,��v�M̝s;��0�\7��U���'�!���>�L��(�)�^�m�4�:n���
�g/�r�qb�z�C��@���]��l��������߭�;�����򔕬M%Ar9��ZX��X"��Q�h�Lu��Vkn�W������2Ӵ�b���+���I1P3F�D�'��p��]��.�\?j뫇����مGC��I��� �5iM뫖��6�/�kQ������PTؠz�o ��위ܳ�柖E�Z���4��!q^���T���A��4��Цt_8�(kД���QE�{�"�"&mW-��d(���s^�����Xh&�,�ЋHH�hO�v�_��W����mzA*�>5|@�.�؋������C�A\�ϱ�m��-�	�K.�=�: �n�O	1[���Ҧ.	�K��(��*��<�*�z�CS�
��,\��$vfՖ��%o�f�"_�Lr��@��f�R��*w�A��}�;�����f��EW�N�ӹ4p:��Ʀ⏐+�m'6.1$t膉(	�ձ�Vؽ��~S�Ƀ�q(�5Qa��/�A��bc]��$��й��˴I�k��k��<^���qOj\ r���ܢX�Ӱ}Pz�N_��;��I���Òk���̧j��x�t[⮆|"Iܷ-��d�,f�<�z/;�Yd���2�N������t]���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T���^B@@0hppc��0n�� w���}��
��� ���4�0
0
���
�
 � � �   ` �� � �� �H�  �� `�H0"(X"\�%"PK*J[�CIh-h-lib64/ruby/enc/trans/ebcdic.sonuȯ��ELF>�@h&@8	@     �� �� �   888$$  S�td  P�tdddd$$Q�tdR�td  ��GNU��5����<}��@(�c��ѩ��@$	BE���|S���qX a , F"�  �  Up$�  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_ebcdicrb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� `      @ �H �X `h �� �� �� ` �� � � � � � ��H��H�� H��t��H����5B �%C ��h�������h���������% D���% DH�=I H�B H9�tH�� H��t	�����H�= H�5 H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=� �Y����d����� ]������w������H��H�=a ����H�=� H�������H��H���ISO-8859-1IBM037�	��������������
���������������� ����������.<(+|&���������!$*);�-/���������,%_>?���������`:#@'="�abcdefghi�������jklmnopqr�������~stuvwxyz������^��������[]����{ABCDEFGHI������}JKLMNOPQR������\�STUVWXYZ������0123456789������7-./%<=2&?'@Z{[lP}M]\Nk`Ka����������z^L~no|������������������������������my���������������������������O�� !"#$()*+,	
01345689:;>�A�J���j�����_������������������debfcg�htqrsxuvw�i�������������YDEBFCG�HTQRSXUVW�I������p���������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������������������������������������������������������; ����<,���d���|zRx�$����0FJw�?:*3$"D���� \����$HWGNU�`   ��p`�����`��x����@
�  ���o`��
�� 0�h	���o���o����o�on���o� p�GA$3a1@�GA$3p1113p�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignebcdic.so-3.4.4-3.el8.x86_64.debug��j�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N����n ���OY��=9"P�Sᾞ�e��U��|b��_��!�NU}�
�#�κ���qқ��}o�Byċ���B���N	�ҫ<~�:�)�
�ɤ���iZq���Ua��W��
������_
����9q^��Aj���MС�����(eR��L���r�[���Ùb >g�-P�&x���uq�B��>�
NE���I��iQ�N�m�J��.�?���D���&�b*�W3�9Ia;������s�T���N[3�{�4��ao8��(&���c��D����w@{*k��Ƴ�)�w��U�^�E�ZY"�e�k2�Ug�5�YJ���L� :#������[���x}�Ԫ���ӣ��l�;a��DtlQ����ޞ�}�)N(b���M@y^��^~�o�DaQ'�;+e���9NQ��)���@���3*�&&#z��2���M0R�E9�d���h��ݿ���LJ�p{i���⭭����.�'C\���z]՘!�n�]Ꝁ
���p(X:Mϥ\��k�����5Y�+��Z���3pV�>�_K(��t rh��9�l��k܍$&�:W�f��=�a~֚���b���RJjg��
���������I�nڙ�-.!�.�M}k�N|k[�Lf��@1��hܽ8���֔���U����7~VM�Ghs��<�?K���9
6	lx�F���֨bOP�o�N����aR.��h��/����G�ڱ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T��h^B0h@@c``0n�� w���}��
���� �dd$���t� � � �   ` �� � �� �H�  �� `���!("8@%"PK*J[:m��-�-lib64/ruby/enc/trans/escape.sonuȯ��ELF>�@�&@8	@XX �� � 8 �� �   888$$888  S�td888  P�tdHHH<<Q�tdR�td�� � 0GNU@H�V缤]Xvt>�N�p/�B 	BE���|�qX	-	 a , F"�  �  �  U	<__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_escaperb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�� �� @� �  �	 `	  
( �	P �X �x �� �� �	� o	�  
� �	@ �	H �	X  
h �	� �	� �	�  
 �	� � � � � � ��H��H�a H��t��H����5" �%# ��h�������h���������%� D���%� DH�=) H�" H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=� H��tH�=~ �Y����d����� ]������w�������1��fD���?�u�H����A�"���ff.�����?�u�"�H���"��ff.�@��H��H�=� ���H�=% ���H�=y ���H�=� H���t�����H��H���xml_attr_quotexml_attr_content_escapexml_text_escapeamp_escape�@�@��у���@Q���у($H�&amp;�&lt;&gt;�&quot;&apos;�;<8���Xh����H����X��������������zRx�$���0FJw�?:*3$"D�� \����
p����$�����!����<HoGNU��@� �	`	L 
&�	�����	o	@ 
&�	�	�	  
&�	�	�	 
&�	x����`
<	� � ���o`��
�� 00��	���o���o����o�on���o� ��GA$3a1`I	GA$3p1113�<	GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSescape.so-3.4.4-3.el8.x86_64.debug�@�O�7zXZ�ִF!t/��G%]?�E�h=��ڊ�2N�`T�^ ���вOY��=9"P�S��
S�m���0G�Y�ְ+޵B/|����A,�bw��`�"�:��lx}�&�/>��C��'�[%`�dRs�+z�5�]Y�5�j����
 F�lX[�V[W[ڴ�o�����㡛(��!��9���S�)���/-o���~?0r��F�H��1�~������9�)ï�"#^<i�1;��l*�A\���@�i5Y�o�Q۸'��$�c3�-;�]\c�R���0j76p�c��Mrg���߼����8�7��f>��&����l�c���� e�b��Kig�B
��؏i�:����@��m��]5G(D;]in�i��ԛA�5S�
)�ā���o��=�,�m�v�گ'��)z!V�|>g>����s�
�o��B嶴9�>�bA�6�	��3�G�bB�ꁹ\��*9�Y��FQ����[�a��ڥ�o��틪;q���%)����eD�F����}���-��Hh��f��Z���*���Y�&�7�[��D�{�T)�Z%��_VL=�"�1�G���
U�29ń��8�:����T�X
�M,�A������9����O�:ޭ	�{ǃ���%7/í(�h��+�S�~����	=��шe��z���F������u��*�`
�`ȱ��2r(�щ(�o_R��t��5�����Mor��ky�anJ�r���������U�S���Z�R�������>!��z=1��8��	�Q��(-���W^�����pd0��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T���^B000h``c��0n�� w��l}<	<	
�`	`	� �HH<�����88 �� ��� ��� �� �� � �� �H�  �� `�H0"(X"h�%"PK*J[!��;x�x�#lib64/ruby/enc/trans/single_byte.sonuȯ��ELF>0/@x�@8	@8s8s �x�x!�x!XGxG ����!��!  888$$sss  S�tdsss  P�td|r|r|r$$Q�tdR�td�x�x!�x!XGpGGNU���h��H����C�~���` 	BE���|�qXM�e� f , F"��!��!��!U�/4__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_single_byterb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��x!�/�x!�/�x!�x!�x!@5�x!F5�x!��x!`7`y!F5hy!@5xy!��y!`7z!@5z!L5z!�(z!`7�z!L5�z!@5�z!��z!`7@{!@5H{!R5X{!�h{!`7�{!R5�{!@5�{!�|!`7�|!@5�|!X5�|!��|!`7 }!X5(}!@58}!�H}!`7�}!@5�}!`5�}!��}!`7`~!`5h~!@5x~!��~!`7!@5!g5!�(!`7�!g5�!@5�!��!`7@�!@5H�!n5X�!�h�!`7�!n5�!@5��!��!`7��!@5��!y5��!���!`7 �!y5(�!@58�!�H�!`7��!@5Ȃ!�5؂!��!`7`�!�5h�!@5x�!���!`7�!@5�!�5�!�(�!`7��!�5��!@5��!�Ȅ!`7@�!@5H�!�5X�!�h�!`7�!�5�!@5��!��!`7��!@5��!�5��!���!`7 �!�5(�!@58�!�H�!`7��!@5ȇ!�5؇!��!`7`�!�5h�!@5x�!���!`7�!@5�!�5�!�(�!`7��!�5��!@5��!�ȉ!`7@�!@5H�!�5X�!�h�!`7�!�5�!@5��!��!`7��!@5��!�5��!���!`7 �!�5(�!@58�!�H�!`7��!@5Ȍ!�5،!��!`7`�!�5h�!@5x�!���!`7�!@5�!�5�!�(�!`7��!�5��!@5��!�Ȏ!`7@�!@5H�!�5X�!�h�!`7�!�5�!@5��!��!`7��!@5��!�5��!���!`7 �!�5(�!@58�!�H�!`7��!@5ȑ!�5ؑ!��!`7`�!�5h�!@5x�!���!`7�!@5�!�5�!�(�!`7��!�5��!@5��!�ȓ!`7@�!@5H�!�5X�!�h�!`7�!�5�!@5��!��!`7��!@5��!6��!���!`7 �!6(�!@58�!�H�!`7��!@5Ȗ!
6ؖ!��!`7`�!
6h�!@5x�!���!`7�!@5�!6�!�(�!`7��!6��!@5��!�Ș!`7@�!@5H�!6X�!�h�!`7�!6�!@5��!��!`7��!@5��!6��!���!`7 �!6(�!@58�!�H�!`7��!@5ț!&6؛!��!`7`�!&6h�!@5x�!���!`7�!@5�!-6�!�(�!`7��!-6��!@5��!�ȝ!`7@�!@5H�!:6X�!�h�!`7�!:6�!@5��!��!`7��!@5��!G6��!���!`7 �!G6(�!@58�!�H�!`7��!@5Ƞ!T6ؠ!��!`7`�!T6h�!@5x�!���!`7�!@5�!a6�!�(�!`7��!a6��!@5��!�Ȣ!`7@�!@5H�!n6X�!�h�!`7�!n6�!@5��!��!`7��!@5��!{6��!���!`7 �!{6(�!@58�!�H�!`7��!@5ȥ!�6إ!��!`7`�!�6h�!@5x�!���!`7�!@5�!�6�!�(�!`7��!�6��!@5��!�ȧ!`7@�!@5H�!�6X�!�h�!`7�!�6�!@5��!��!`7��!@5��!�6��!���!`7 �!�6(�!@58�!�H�!`7��!@5Ȫ!�6ت!��!`7`�!�6h�!@5x�!���!`7�!@5�!�6�!�(�!`7��!�6��!@5��!�Ȭ!`7@�!@5H�!�6X�!�h�!`7�!�6�!@5��!��!`7��!@5��!�6��!���!`7 �!�6(�!@58�!�H�!`7��!@5ȯ!�6د!��!`7`�!�6h�!@5x�!���!`7�!@5�!�6�!�(�!`7��!�6��!@5��!�ȱ!`7@�!@5H�!�6X�!�h�!`7�!�6�!@5��!��!`7��!@5��!
7��!���!`7 �!
7(�!@58�!�H�!`7��!@5ȴ!7ش!��!`7`�!7h�!@5x�!���!`7�!@5�! 7�!�(�!`7��! 7��!@5��!�ȶ!`7@�!@5H�!+7X�!�h�!`7�!+7�!@5��!��!`7��!@5��!67��!���!`7 �!67(�!@58�!�H�!`7��!@5ȹ!A7ع!��!`7`�!A7h�!@5x�!���!`7�!@5�!L7�!�(�!`7��!L7��!@5��!�Ȼ!`7@�!@5H�!W7X�!�h�!`7�!W7�!@5��!��!`7ȿ!п!ؿ!�!��!��!��H��H��!H��t��H����5!�%Ð!��h�������h���������%��!D���%��!DH�=ɐ!H�!H9�tH�~�!H��t	�����H�=��!H�5��!H)�H��H��H��?H�H�tH�M�!H��t��fD�����=U�!u+UH�=*�!H��tH�=�H!�Y����d����-�!]������w������H��H�=�!����H�=5�!����H�=��!��H�=݊!���H�=1�!����H�=��!����H�=و!����H�=-�!���H�=��!���H�=Ն!���H�=)�!���H�=}�!���H�=ф!�|���H�=%�!�p���H�=y�!�d���H�=͂!�X���H�=!�!�L���H�=u�!�@���H�=ɀ!�4���H�=�!�(���H�=q!����H�=�~!����H�=~!����H�=m}!���H�=�|!���H�=|!���H�=i{!����H�=�z!����H�=z!���H�=ey!���H�=�x!���H�=
x!���H�=aw!���H�=�v!���H�=	v!�t���H�=]u!�h���H�=�t!�\���H�=t!�P���H�=Ys!�D���H�=�r!�8���H�=r!�,���H�=Uq!� ���H�=�p!����H�=�o!����H�=Qo!���H�=�n!��H�=�m!���H�=Mm!����H�=�l!����H�=�k!���H�=Ik!���H�=�j!���H�=�i!���H�=Ei!���H�=�h!���H�=�g!�x���H�=Ag!�l���H�=�f!�`���H�=�e!�T���H�==e!�H���H�=�d!�<���H�=�c!�0���H�=9c!�$���H�=�b!����H�=�a!����H�=5a!����H�=�`!��H�=�_!���H�=1_!����H�=�^!����H�=�]!����H�=-]!���H�=�\!���H�=�[!���H�=)[!���H�=}Z!���H�=�Y!�|���H�=%Y!�p���H�=yX!�d���H�=�W!�X���H�=!W!�L���H�=uV!�@���H�=�U!�4���H�=U!�(���H�=qT!����H�=�S!����H�=S!����H�=mR!���H�=�Q!���H�=Q!���H�=iP!����H�=�O!����H�=O!���H�=eN!���H�=�M!���H�=
M!���H�=aL!���H�=�K!���H�=	K!�t���H�=]J!�h���H�=�I!�\���H�=I!�P���H�=YH!�D���H�=�G!�8���H�=G!�,���H�=UF!� ���H�=�E!����H�=�D!����H�=QD!���H�=�C!H�������H��H���UTF-8CP855CP852CP850TIS-620KOI8-RKOI8-UMACUKRAINEMACTURKISHMACROMANIAMACROMANMACICELANDMACGREEKMACCYRILLICMACCROATIANIBM869IBM866IBM865IBM864IBM863IBM862IBM861IBM860IBM857IBM855IBM852IBM775IBM737IBM720IBM437WINDOWS-1257WINDOWS-1256WINDOWS-1255WINDOWS-1254WINDOWS-1253WINDOWS-1252WINDOWS-1251WINDOWS-1250WINDOWS-874ISO-8859-16ISO-8859-15ISO-8859-14ISO-8859-13ISO-8859-11ISO-8859-10ISO-8859-9ISO-8859-8ISO-8859-7ISO-8859-6ISO-8859-5ISO-8859-4ISO-8859-3ISO-8859-2ISO-8859-1ASCII-8BITUS-ASCII	�� � � 0@�@:@(08HPXL`	C�€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿE�����������������������������������������������������������������G�����������������������������������������������������������������G���(08HPX��€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙E����������������������������������	��������	���������������������������������	��������������������<	��������������������������������F�	������,	�4�$	H	(08HPX�P	€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤	Ĥ§¨İŞĞĴ­Ż°ħ²³´µĥ·¸ışğĵ½żÀÁÂÄĊĈÇÈÉÊËÌÍÎÏÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâäċĉçèéêëìíîïñòóôġö÷ĝùúûüŭŝ˙��	���������������������������������	������������������	��������������������������������������������	L	������������������G	
	���������	p
	���	�
D
h
�
�
(08HPX��
€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙E�
���������������������������������	��������
	�������������������������������������O
���	��������������������������
\	���������������������
�	���8�T�0L(08HPX�T€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџE����������������������������������	��W�	���������������������������������������������������������������<����������������	���������������D	���_�4<�(0�8HPX��€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ 	¤،­؛؟ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيًٌٍَُِّْ�
0���������������������������������	����	������������������������������(�������������������	� �(08HPX`€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­	―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώW@���������������������������������	���������������YD	��	���������������������������������������������������������(���������������		���ad	����x��� \(0�8HPX'�€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ 	¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾‗אבגדהוזחטיךכלםמןנסעףפץצקרשת‎‏����������������������������������	��������������������������� p 	��bp!	�����������������������������!	����""( "h!�!�!(0,"8HPXj4"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿEp"����������������	������������������������������������������a|$	�����t%	����%�l%�%�%(08HPX'�%€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸE�%���������������������������������	�����'	���������������������������������������������`�(��	��������������������������
\)	��������������������)	��0*<*(D*�(T)�)(*(0P*8HPX&X*€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู	฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛�*���������������������������������	�,	�����������������������������������������������������������a-����������������������������	�..�.��.-�.08HPX�.€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’E�.���������������������������������	������������������������0	���������������������@�1��	�����������������������<2	��������������������������2	����343(<3�142�23(0H38HPX&P3€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿE�3���������������������������������	������H�5����������������	�������������������������������������������H6	�����@7	����� `7	������P �7��	������� �7������	� �7	��!8�7�7�78X!8@687X7|7(4808HPX�!<8€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿE|8������������������������������������	���������������������"�:	��������"x;	�#�;�;W#�;p;��;(0�;8HPX�#�;€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿE<���������������������������������	����������$>���	��������������������������������������������$�>	������������%�?	���������������������V%�?	�����%8@	���%X@h@�;�p@�>�?�?0@P@(0�@8HPX&�@€	…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛'�@	�(`B	��������W(tB	�#�B�B�B��BlB�.0�B8HPX�(�B€	‚„…†‡‰Š‹ŚŤŽŹ‘’“”•–—™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙�)C	�������������������*E	��������������������XE	��������������������������������F�E	������HF	����������������*lF	�+�F�F�B�FX+�FPE4�E@FdF(0�F8HPX�+�FЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—	™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяE,G	����������������,8I	����������������������������������������������������������������I����������������	����������������J	���,K	�#,K	��-@K�F8KPKX+XK|I�JK$K(0lK8HPXW-tK€	‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿN.�K	��������������������������������P/�M	��������"@N	��/lN	���/�N8N�dNxN�N(0�F8HPX0�N€	‚ƒ„…†‡‰‹‘’“”•–—™› ΅Ά£¤¥¦§¨©«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ
1�N	���������������������2�P	���������������������������������������������������������Q	����������������Q2�QDR�B�FX+LRQxN�Q\(0`R8HPX�2hR€	‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ�3�R	��������4�T8Nl%�%�TxN�N(0�F8HPX�4�T€	‚ƒ„…†‡ˆ‰‹‘’“”•–—˜™› ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״אבגדהוזחטיךכלםמןנסעףפץצקרשת‎‏�5U	������������������������������6�V	����������������	7LW����	��������������������������������K7�W	������������������7<X	���7�X�X�X�FX+�X	��������������������������������������������8�X����	����������������������S8(Y YdY�8lYDW�!xN�N�W4X(0�X8|YHPX�8�Y€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ےE�Y	�����������������������������9�[	���������������:\\	��R:�\�:,K	�������������������������������\�������������������	���:L]	��������;�]	��Z;�]	��������������������;�]L^�B�FX+T^T\�\�\xN�\D]�]�]�](0h^8HPX�;p^€	‚„…†‡‰‹¨ˇ¸‘’“”•–—™›¯˛ ¢£¤¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙�<�^	����������������������������=�`	��� aa42�234a(0�F8HPX�+<aÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ E�a	������������������>�c	�����������������������������������[>�c	��/�d	���������>�d�	����>�d	�!?�d	�c?�d	�����?e	�����?,e	���)@Le�	����������k@he	������������������������������@�e�	���������@(f�de$eDe`e�e fTf1A\f�cxd�d�d�d(0�f8HPXsA�f	éâàçêëèïîّْô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡ًٌٍَُِ≈°∙·√ⁿ²■ jB�f	���������lC�h	�������������C�h	���������������������������C4i�������������������	�i	��2Dj	��tD j�dj0j�e fTf�D8j�h,i�ij(0Xj8HPX�D`jΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ E�j	������E�l	�1F�l	����������������������������������������������������sF�l���������������	�m	����Fn�dj$n�e fTf�D,n�l�l�mn(0Ln8HPX�FTnĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ E�n	������������������������G�p	���������������������@q��	�����������������������pq	��������������������������q	����Pr	�0Hpr	�����������rH�rhr|r�e�rTf�H�rqhq�qHr(0�r8HPX&�rÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ E$s	������������H0u	��������������������������������lu	���������������������u	��������������������������������FXv	�������v�	������8Iw�e�r0wzI8wdu�uPv�vw(0Lw8HPX�+TwђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ E�w	�������I�y	����������������������������������������������������������������y����������������	����������������z	�\{h{�e�r0w�Ip{�y�zT{(0�{8HPX��{ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ	ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ×ÚÛÙìÿ¯´­±¾¶§÷¸°¨·¹³²■ @J�{	��������������������������������P/�}����������������	������������������������������������������a`~	�����X	���xX~Pp�(0Lw8HPX&�ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ E�	�����������������BK܁����	�����������������������������������K0�	���K؂�de$eDe��e fTf1A�(�Ђ�d�d(0�8HPX�F �ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ E`�	��������������Ll�	���������������������������������������JL����X��d�d�d(0�f8HPXsA`�אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ E��	���������L��	������������������������������c؈�d�d�dT�(0�f8HPX�L\�ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ E��	������������������������M���	�����������������������������N�	�IN�����d$eDe`e�e fTf�N������d�d�d(0�8HPXsA�°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ	ﻻﻼﹳ ­ﺂ£¤ﺄ€ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�N,�	���������������O,�	��bt�	�P��	��:��	���SP���	������������PЏ	�#�	����P$�	�Q@��	����������k@T�	��[Q���8�L������Q��	���Q̐������	����������������������������!R�	�������������������������������������cR|�ܐt���R �l�������ȏ�(0Đ84�HPX�R<�ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ E��	�����������������S��	������������������������������������� T�ܔ���d�d�d(0�f8HPXsA��АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ E̕	����bTؗ	�����������������������������������������������������T������������������	�����Tؘ�d8�j�e fTf(U@��И0�(0\�8HPX�d�	Ά·¬¦‘’Έ―ΉΊΪΌΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ jU��	����������������lV��	���������������������������������������������������������ܛ���������������	̜	���a�,��e�r0w�V4�ԛĜ�(0L�8HPX�VT�ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊	©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸ÊæˇE��	������������������������W������������������	����������������������������������������)X�	�������kX��	�������X$�	��/L�	�����X`��	(��	��������������1Y��	�_ܡ	��sY�	��������Y�	�����Y4�	�9ZT�ԡ��,�L�`�{Zh����D�X�x���(0��8HPX�Z��АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤Eܢ	���������������[�	�1F0�	���������������������������������������������������������������D�����������������	���������������L�	�����������[Ԧ	��-�	����8\$���<�L�z\D�(�<�X�D�̦(0\�8HPX�\d�Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ	E��	�������������������]��	����������������������]�	�7^p�	���������������������������������������������������������y^�����������������	x�	�����������^ī	�+����L��^��h�|�p���(0$�8HPX?_,�ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ	ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇEp�	������������������������6`|������������������������	����������������������������������������G�	�x`��	����`�	���������`(��	(X�	�����������>al�	��������Y������̰L�`�{Z԰��� �X�P�d�(0�8HPX�Z��ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ	ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇEH�����������������	������������������������������������������aT�	����������������*H�����̰L�`�{Z��	���a��̴#Դ�@�� �X�P�d�(0��8�HPXb�ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ	ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇE8�������	������������������������������������������������bD�	���=c(�	�������cD�� �<�h�X�P�d�(0��8HPX�Zp�ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ	ÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ�c��	������������������������dĺ	�����0�	�����eP�	�������������Get����̰L�`��e��(�@�H�l�X�P�d�(0Ի8HPX�ZܻАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤E(�	��������������e4�	���,x�	���
f������L�z\��p�<�X�D�̦��(0ľ8HPXOf̾─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪE�	�����Fg �1F�d	�����������������������������������������������������gL�����������������	�����g,�	���,��	��2D��	����F��	���K���	����������k@��	���������������������h,��	���������@��������$�����Nh��<�D�$�����(0��8HPX�h��─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪE0�	��������������������������������������������������i<�����������������	��i�	������������������������������@d�������$�����Nh��<�D��\�(0�8HPXj�	กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛kP��.08HPXL��ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ E��	��������������������������������P/������������������������������������������������������������������G��	�x`��	�IN�����e�r0w�V��|������d(0��8HPXl���������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���	

 !"#$%&'()*+,-./0123456789:;<=>?@�			
��	

 !"""#""$%""""&""'"""(""")"""""""��	

 ��	

��	

 !���												
		
�	

 !"#$%&'()*+,-.&/0123456789:;<=&>?@A&BCDEFGHIJKLM&NOPQRSTUVWXYZ[\]^_&`abcdefghijk&lmnopqrstuvwxyz��	

 !""#$""%&""""'""(")*+,"-.""""/""��	

 !"#$%&'()*+,-./0��	

��	����	

 !"""#""$%""""&"'(""")"""*"""""""��	

 !"#$%&��	

��	

����	

 !""""""#"""""$""""""""""""""""""��	

 !"#$%&'()*+,-./0123456789:;<=>?��	

�����	
�	

 !"""#"""""""$%"""""""""""""&"""'"()*+,-./0123456789:;<=>?@A"""""BCDEFGHIJKLMNOPQRST"""""""""""""��	

 !"""#""""""""$""""""""""""""""""��	

��	

�	


�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR/STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/��	

 !""#""$%&'"()*""+,-."""/"""0"1""����	

 !"#$%&'()*+,-./0123456789��	

�������	

�	

 !"#$%&'()*+,-./0123456789:;<=>?""""""""""""""""""""""""""""""""@ABCDEFGHIJKLMNOPQRSTUVWXYZ[""\]"��	

 !"#$%&'()*"+,-./0123456789":;<="����	

�����	
��	

 !"#$%&'()*+,-./0123456789:;�����	
��	

 !""""""#"""""$""%""""""&""""""""��	

 !"#$%&'()*+,-.��	

���	

�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxy\\\\��	

 !"""""""""""""""""""""""""""""""��	

 !"#$%&'()*+,-./0123456789:;<��	

���	��	

 !"#$%"&'"(")*+,"-./0"123"4"5678"��	

��	

��	

����	

 !""#"""$"%"""&'"""""""("""""""""��	

 !"#$%&'()*+,-./0123456789:;��������	�������											
		
��	

 !"#$%&%'%()*+,-./012%345%678%%%9�������	
��	

 !""""""#"$"%"&""'("""")*"""+""""��	

 !"#$%&'()*+,-./��	

��	

�����	
												


�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab����	�			
�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|��	

��	

�����	
												


��	

�����	

�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|��	

 !�����	
												


�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop��	

��	

�	

�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz���	













�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk��	

��	

��	

 !"#$%��	

����	

��	

���	












��	

��	

������	

��	����	

�	













�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu��	

��	

��	

 !"#$��	��������������	
��	

��	
��	�	
												


�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy��	
��	

��	

�������	

������	

 !"#$%&'()*+,-./012345���	

��	

����	
����	
���������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgVhijklmnopqVrstuvwxyz{|}~��	

��	

 !"#$%&'����	

��	

 !"#$%&'(��	�	













��	

��	

����	�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}��	

������	

������������	

 !"#��	

 !"#$%&���	












��	

��	

 !"#$%&����	

 !"#$%&'()*+,-./012345��	

���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx��	

���	
��	

��	

 !"#$%&'()*+,-./0123456789��������	

�����������	

��	

��	
�����	
												


��	

��	

����	

 !"#$%&'()*+,-./0123456789:��	
���	
												


��	

������	��	
��	

 !"#$%&'()*+,-./0123456789:���	

��	

 !"#$%&'()*+,-./0123456�����	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuqvwxyz{|}~��	

����	

����	

���	













����	

 !"#$%&'()*+,-./012345��	

��	

���	
												


��	

 !"#$%&'()*+,-./012��	

�	

�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX�	

; d���<����dt���|zRx�$ ���0FJw�?:*3$"D(��� \�4H'GNU��/�/�x!@5F5�{��l`7�3F5@5�y��l`7�3@5L5�w��l`7�3L5@5(u��l`7�3@5R5���l`7�3R5@5����l`7�3@5X5����l`7�3X5@5����l`7�3@5`5H���l`7�3`5@54���l`7�3@5g5(���l`7�3g5@5���l`7�3@5n5���l`7�3n5@5,���l`7�3@5y5 ���l`7�3y5@5����l`7�3@5�5����l`7�3�5@5<���l`7�3@5�50���l`7�3�5@5L���l`7�3@5�5@���l`7�3�5@5t���l`7�3@5�5h���l`7�3�5@5����l`7�3@5�5����l`7�3�5@5���l`7�3@5�5Ԣ��l`7�3�5@5����l`7�3@5�5����l`7�3�5@5����l`7�3@5�5����l`7�3�5@5З��l`7�3@5�5ĕ��l`7�3�5@5����l`7�3@5�5����l`7�3�5@5$���l`7�3@5�5$���l`7�3�5@5����l`7�3@5�5����l`7�3�5@5����l`7�3@5�5����l`7�3�5@5d���l`7�3@5�5X���l`7�3�5@5ԁ��l`7�3@5�5���l`7�3�5@5�}��l`7�3@56�{��l`7�36@5�y��l`7�3@5
6�w��l`7�3
6@5(u��l`7�3@56s��l`7�36@5�p��l`7�3@56�n��l`7�36@5�l��l`7�3@56�j��l`7�36@5�h��l`7�3@5&6�f��l`7�3&6@5�c��l`7�3@5-6xa��l`7�3-6@5�`��l`7�3@5:6�^��l`7�3:6@5�[��l`7�3@5G6�Y��l`7�3G6@5�V��l`7�3@5T6U��l`7�3T6@5�T��l`7�3@5a6�R��l`7�3a6@5�P��l`7�3@5n6�N��l`7�3n6@5�M��l`7�3@5{6�K��l`7�3{6@50I��l`7�3@5�6$G��l`7�3�6@5�D��l`7�3@5�6�B��l`7�3�6@5XB��l`7�3@5�6�@��l`7�3�6@5>��l`7�3@5�6<��l`7�3�6@5�:��l`7�3@5�6t8��l`7�3�6@5�5��l`7�3@5�6�3��l`7�3�6@5�0��l`7�3@5�6�.��l`7�3�6@5�,��l`7�3@5�6�*��l`7�3�6@5�'��l`7�3@5�6�%��l`7�3�6@5t$��l`7�3@5�6h"��l`7�3�6@5h ��l`7�3@5�6���l`7�3�6@5<��l`7�3@5
78��l`7�3
7@5���l`7�3@57(��l`7�37@5���l`7�3@5 7���l`7�3 7@5���l`7�3@5+7�
��l`7�3+7@5|��l`7�3@567�	��l`7�367@5���l`7�3@5A7���l`7�3A7@5���l`7�3@5L7���l`7�3L7@5���l`7�3@5W7���l`7�3W7@5��l`7�3}�����.
$5�x!�x!���o`��
���!0�.��)	���o���o����o�or���o���!�./GA$3a1�.15GA$3p1113�/$5GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignsingle_byte.so-3.4.4-3.el8.x86_64.debugwQ�7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N�������Wf]@�s�T
��s��,Z����5>Ax�]��9Q+),+ꌅ�鉚8Ǫ�� S�/h`Y}�芨{7a	�H��8_�ї�v�����R~(Vi�ה�m�4u1u۽�d��>P�l�޶-�_���ޠֽ�^㡁n���gH�Up��Q�����!7=/�E/����Y��ɨ)@Li}b't��s��U�x�*���XAP�����s�$�2�T���%.�	)-E+���}�4�r:
�Qk��,�όv����t���v�uqN&�1m�F�Ũ���}W\N��
�'����1��b����J�#�ώwe^n1I�}cR�"R<d�K!54F�a5%^4:�j#�~��g�!o1���M�P������--\��F�2��1'�S�bɶ%�����w����$j���JfH������莿W���*����':+F��+���:ƽ2�N�+[�_c�>��Tא�bdw@c���쇒a�?x,�J�
i�-*G���F!*�!�'hԪ�B�j���Y�XH�{������L����<��N韫�&x���F�J,:0q�J	�Q��i]G�]XC�>V��Mca�z�e���/m�z��QᏑ�J[
D�C=�xt�H��&�+D�^�ws�T��������� � �F�Id �`�x'&���"#S.��%��#_X���p�9ү*V��Lb�K-y��+PȐ�Ǎ�u� �<�hMG#���U���"�1{D�������h(��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���orrE���o�� T���)^B�.�.0h�.�.c�.�.0n// w0/0/�}$5$5
�@5@5;= �|r|r$��r�rx�ss ��x!�x��x!�x��x!�x�D ���!�� ���!��H��!���a���,�HT�"PK*J[���up�p�lib64/ruby/enc/trans/big5.sonuȯ��ELF>�	@p�@8	@H�H� ��(�(�� ����(��(  888$$(�(�(�  S�td(�(�(�  P�td������$$Q�tdR�td��(�(��GNU�g��&KZ�gp��������@ �	BE���|�qX�1
V _ , F"��(��(��(Up
�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_big5rb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��(`
�( 
 �( �(@�( H�(&X�(@�h�(`��(&��( ��(@��(`��( ��(/��(@���(` �(/(�( 8�(@�H�(`��( ��(5��(@���(``�(5h�( x�(@���(`�( �(@�(@�(�(`��(@��( ��(@���(`@�( H�(FX�(@�h�(`��(F��( ��(@��(`��(��(��(��(��(��(��H��H���(H��t��H����5B�(�%C�(��h�������h���������%�(D���%�(DH�=I�(H�B�(H9�tH���(H��t	�����H�=�(H�5�(H)�H��H��H��?H�H�tH���(H��t��fD�����=��(u+UH�=��(H��tH�=޼(�Y����d������(]������w������H��H�=a�(����H�=��(����H�=	�(��H�=]�(���H�=��(����H�=�(����H�=Y�(����H�=��(���H�=�(���H�=U�(H�������H��H���UTF-8Big5-UAOCP951Big5-HKSCSCP950Big5	 ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/�\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv��wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ	€�一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙��世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全�	共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣��作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠�杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵��咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊�昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附��陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷�拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄��耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪�哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓��浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃�"虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀��$娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺�'毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼��)莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠�,婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋��.溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁�1詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼��3媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督�6睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊��8辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇�;愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬��=罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜�@劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃��B瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞�E輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡��G濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚�J錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬��L瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁�O駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦��Q鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類�T願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴��V護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒�Y讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲��[�^��`乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋�c汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇��e杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢�h坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲��j泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏�m哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺��o柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀�r穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱��t唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤�w毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐��y笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐�|酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏��~崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉��淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟���耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪��釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔���惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞��湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥���罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺��軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆���媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼��毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓���稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤��觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠���凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉��榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓���禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻��裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘���噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒��澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟���膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧��踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮���噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸��澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘���蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌��錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎���檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞��蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜���鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶��璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧���蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰��徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕���譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲��嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿���鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥��蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚���糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾��讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚���纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓����	�����"�$'�),�.1�36�8;�=@�BE�GJ�LO�QT�VY�[^�`c�eh�jm�or�tw�y|�~���������������������������������������������������������C��	�����X���PD�	�����8��	������������
X�	�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�jL���k�l	�m�n�o�p�q�r�s�,�P��`��`�	�V�X���������L�K�E�������x�	��4��	�J���Kv��	�����������������������	����������������� �	�A������������������������<P�	����������~��	������������w	�x�z�{�|�}�u�t�s�r�q��	�����������������������������������������������������������~�������������ZD�	�b�c�d�e�f�g�h�i�p�o�n�m�l�k�j���v�y���������������	�������������������(�	����
\���	��Lt���P������H���������� �T�l�������@�B�C��	�q�r�m�n�u�v�y�z�i�j�E�e�f�������������������������	�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������	T�	��T	��	�U�V�P�Q�R�T�	�	�W�S�����O�	4�L�P����,�P�
X��@�B	�C�E�V�T�W�U�F���O�M�����B�A�@�C���������X���P���c��˱�Y���D�d\
|�	�@�D�[�G�\���E�G�F���������A�A�E�^�]�������K�
�	��ܱܲ�F�����G�H�_�����Q�����������E�`���������������F�G��ܳ���H�
x������R����	�����T�S�������J�K�L�M�I�P�j�f�i�Q�a�h�N�O�H�e�g��ɰ����ɺɮ��ɲ������"�ɱ��ɵ	ɹɶɳ��������ɫ������ɻɸɯ��ɬ��ɴɷɭ�f�B���g���D�����[�����`�hd��	�d�������G�]˽���C�������b�^�����Z���e�E�H���@�F���c�A�i�\���_�a��˿������������˹��˸˼�������˳˵�����X�˶������˻˴��˷��˺	������������������˾˲����������V�J�����I�Q�]�������K�8������Y�P�X��	�����T�����[�N�W�M�������U�R���Z�����O�\�S�L�H������������������������*��P��p����P�0�����l����	���������������������������[��������������������������������������������������������������c�W	���\�b���U���Y�R���V�����g�Q���f���X���S�O�]�P�N�Z�`�a���[�^�M�_���d���L�T�e�����������������	�^�W���_�U�X���Y���]�S�R���������Q�\�Z�T���V����ܷ��ܽ�����ܺ��������ܿ��ܴ��ܵ2
H�	ܾܼܸ��ܶ��ܻ��ܹ�������������������������������������������������������������t
����	���������������������������������������v��w������u������x�_�������������l�k���I�
���a��	���S�R���������J�I�K�������^�Y���Z���\�[�`�]���^�J�������K�������@�L���������
����	�N�T�U�A�j�`�_���������U���a���������V�Bɼ�M�N�k������:<�	�������������������h�a���@������L�Z�������B���Y�W�X��|���M�N	�b������ɾ�Z�k�Fɿ�D�Eɽ�G�C�l���m�n�P�O�S�Q�R�����������������������8�	���c�����h���d�g�f�e�b�����������������������������i�k�j�l�������������������������A�B�����Z	�@�A�B�D�����C�������������O�\�[�H��U�V�T�W�o�p������B�����l���k	�i�j�����n���m�����������������������C�D��E������y���U�c���V������	�]�^�I�q�����m�������c�b�P���_���C�l�`���K�J��X���o���E��������������������Q	�d���������c�b�m�����������n���R���e�d�r���W�g�f�L�M�s�Y�Z�������o���\�	�D�����t�u���������p�p�������d���e�F���F���X�hJ�	���S�e�������������q����O�f�j�y�t�o�n�u�s�l�z�m�i�x�w�v�k�r�q�{�p�t�	�S�Y�U�[���X�N�Q�T�P�W�Z�O�R�V�\�~�{�g�|�[�]�u�pʥ�}�_�aʤ�h�x�t�v�\�m�v�s�d�n�o�w�l�j�k�qʡ�^���rʣ�f�c	�z�bʦ�e�i�`ʢ�y�����O�����������P�������I�K�M�������L�E�A���D�I�R������C����	�F�H�����Q�M���S�J���G�B�@���N�H��K��x���t���}���r��C���O���y�E�B�w����J�|�L��R���s�~�{�@���F�G�z���v	�u��D�N�D��������@������������������B�C���A���C��@�	���F�����B����@�Gԡ�E�D�������������A�w��ԧ�����|��Ԣ���v�{�z����ԥԨ�s����ԩ��	�����~��Ԧ��Ԫ�tԤ���u�x�}���������������y����ԣ�����q�r�j�����u���x�����q������	���n�������v���{�o�f�s�m���y�������������z�l�r�t�h�w���g�������i���������p����Z0���	�������������������������������������������������������������������_�������������U�Q�K�����T�����N�P	�S�������I�����L���J�O���H�������M�R���G�M�G�D�G�S�T�J�B�L��R�F�I�H�H�C�E�K����A��	�k������O�N�P����@�E����B�����A�����������C�������D�@�Q���F�������� p��{���������}���~	����z���|��P�������`�����V��������Q��A�Y�@�X�W�Z����b$���������	�����m�o�n�������������I�}�|�_�^���]���yʩʨ�w�zʧ�x�����T����	�H�I�E�FԬ����ԫ���|�������������I�H�G�k�g�Y�n�o�b�f���d�c���e�a�`�������h��}ʪ	ʫ��ʭ�{ʮʬ�~�������|ʯ�Y��[�Z�@�X�W��������������V��\�A(��	���U���T�Z���X�^�U�Y�[�]�W�V�Q�R�������S�\���P�S�R�W�N�Q�P�Tj��	�X�G�J�O�U�I�J��Ժ�V�M�H�LԱ�����ԯԽ��Կ�����ԴԼ����ԾԹԲئ԰��Է����ԭ��Ե�0�Գ����	������ԻԶ�K��Ը��������Ԯءتة��آ����ؤ��بأإ�}��زرخ�������Kث����ح�~ذدس��ج��	ا���������������������������������������������������������]���c���_�f�W�����\0��U�[�d��	���Z�`�e�V���^�b�h�X�a���g�Y�Y�K�W�V�M�R�N�Q�\���[�J�P�Z�O�L�X�M���O�J���LrX	���N���P���I�K�����������������S�R����a�b�c�B�[�������h�����_���������i�S�	�Zʰ�B�`�Y�L����i�~�p�g�h�]���������j�������[�����q���i�j������ʱ	�a�C�_�`�^�Z���������a�b���M�N�O����ش���������j�]��������k�������l�o�����n����8@���q�p�m�k��	����ʶʹʸ������ʵʳ������ʴʻʷ������ʲʺ���g�o�O�H�p�S�D�K�f�E�d�L�P�cz��Q�J	�M�r�i�T�R�n�l�I�k�G�F�j�h�q�m�e�N�����o���g�c�s�b���l�������p���V�v�d�f�m�q�u�r�k�n�h���j�i�t�����e��	���\�b�[�`�P�U�_�\�a�Q�[�T�R�c�S�W�X�Z�Y�]�^�d�����������@��������������	�C�������D���������������������B�������������A�������������������@ػظ��ؽ���B@	���������������G�C��ض����A�D����غطعؾؼ�E��ؿ�ص���B�@�C��D�@��F������������A���A	���������B����E�n�������z�p�v�k�y�x�|�u���t���m���{���o�r�w�q�l�s�U�a�X�W�Z�\���_�V�T��	�]�[�Y�_�^�c�^�`�b�`�W�V�U�X�Q�R�Z�S���\�[�T�����������Y�����������������T����\�\	�]�C�������������l�m�n�������r�s���������s�U�u�t�V���]�e���E�G���F���}�������^�pH		�r���s�v�t�u�w����ʼ��ʽ�W�X�v�x�z�w�{�y�����������f�w�h�g�c�_�`�b�d�a�f�e�J��	�����I	�H�G�K�F�����I�����K���H�J���H�I�J�����~����������������f���g�e�d�]�������d�_�o�x�l
	���i�g�N�M�L�L�M�������p�\���t���y�|�K�q����ʾʿ�����N�L���r�����u������,����	�Y�~���Z�}���x�������j�h�k�i�j�^���P�Q�O����h�i�a�����������K���s�w�v�z��������P�	���������������������������h�b�]���e�c�\�i�l�g�`���f���a�d�[�_�k�����^�j������	ΫΤΪΣΥ�}�{άΩ�y��ΧΨΦ�|�z��΢�~Ρέ�o�n�l�k�n�p�o�s�q�pή�r�m�l�m�0
�q�r	�S�R����T��X�A�Z�V�^�[��U����C��W�B�\���]��Y�D�@�������Q�������������������
��������	���R���O���O���P���������S�V�N�P�U�T�C���R�D�M�Q�������X����	����������e�g�k�h�c�b�l�j�j�m�d�i�k�f�a�f�`�e�^�h�d�i�c�_�g�j�b�����������,��	�r��D�E�`���������r�q�������t�{�������_�u���������t�W�v�w�x����ί�S�y�]��	�����x�|���������n�����m���o��������γΰαβδ���t�s�v�u�b�F�a�c�`�U�E��V��	�W���T�Z�\�E�[�Y�X������������q�o�m�p�n�l���m�k�l�n�����������n��z���~���}���F�������X`$�y	�z��������������������������θ����ηιζκ���y�u�w�w�x�x�vε�G�J�K�H�g�f�d�e�I�h��	�Z�[�\�]�_�a�H�G�Y�`�^�������������p�s��r�t�q�t�u�o�s�s�q�p�r�o�f�F�G�����U�������{����	��������λ�����|���I�}�����������������q�r�s�����p����μ�z�z�y�i�L�j�M�]&p�b	�����u�v���t���s���tν�k���J�U�������{�m�C�n�l�^����v�L�������������w�v��h�����u	��ξ�������������}�|�{�O�o�r�p�N�u�q�P�t�s���a�_�`��K�d�L�c�w�x��w�����u�����@���H�I	�����{���������������������������x���������y���������������������������������|x�@�������4���0��������T���l���x�8����(����h���`����(���P�8��|��T	�	d
$�|(
�
�$����h�t$.,��	̢̯�~̮̩����̪̭��̬������̣�|̥��̰��̦����̨�����{����������̧�z̫���}̡̤��ο�p8��ѡ������������	������������������~�}���|���������������~���������������������v��ѤѦ	Ѩ�����SѬѣ�x�Q����Ѯ�Rѥ��ѩ��ѫ��Ѫѭѧ���yѢ�w�z�U�^�d�|���e�`����V�����~�T�b���e�I	�c��������]��a�{��d��Y�b�W�X�����[���_���\���f�c��Z�}�k�o�@�Q�m�D�q�e�F�S�i�l�G�H�N6`�s�T	�J�O�C�^�U�r�A�P�]�p�N�M�t�E��j�B�K�M�R�g�L�P�h�\���p�h���l�n�k�[�j�_���Z�@x(�q��	�X�i�m���O�f�g�A�W�Y�V�o�������}���G�F���|���E���C�D����z�n�������{�����������H�y�B�z����������	�~�y�~���x�������������x����v���}�����w������������|�{����z������~�������	�|�����y�{�����������}�������������V�������������������������g�j�i�h�a�J�b�A�������t>d����	���������|��������������̱����ѯ�����u�r�`�a�t�v�u�����I����������W������̲�������������	Ѱ�����v�Q���~���}������������������������������������������������������������������������	��������������������������������������̷̾����̳̺̼̿��̴̻��̸���̽����̶�� �	������������̹������������̵�����������������������A�����@����ѱ���C�������������������B��F T�����E��	����������������Ѳ�D����������Ѿ����Ѵ�����f���ѷ��Ѻ���}ѽ�����  ��ѿ��ѸѵѶ��������Ѽѻ������������	����ѳ��������g���������y�u�rզ�����w����ա�����{�j� � ��գ�i����բ	�s�����h�xե�q���tդ���R���o�������x�n�l�~�������w�|�����������p���m�z�v�T�S�k�d!x!�z	�j�Y�g�w�}�k�n�|�\�m�l�~�U�y�����i�_���p�h�q�����f�e�c�]����ѹ�Vݷ�W�{���y�����X�o�x�`�[���a�^��N!@"	�p�|ݱݶݪ�lݻ�i�z�{�b�kݤ�n�oݥݲݸ�j�dݣ�}ݺݨݩ�~ݴݫݵݭ�e���h�fݹݰݬݡ�Sݯ�mݧݦ�g�c���!#ݳݮ	ݢ���������Q�����L�K�����������O���b�����R��������T�����������������N���P�U�����!�#	����J������������������������Z��������M������������������������������"�$	�������������������������������������������������������������Y��X�^���\�]�����Z��V"P%�k��	�����[�B�E�F�D�G�l�C�N�d�M�L�K�c�e���������������u�������������������r��������������F�"&	�����G������������է�������������v���������u�x���s�w�t�qݼ�V�����������������"�&���������H	���y����ݽ���������������z�{�r��W������������H���|���s������_���������I��#�'	����������������ը�����}�~ݾ�Y�X�����J�I�O�^�J�������������������������������^#L(��	�����������@��������������������������������P�M�����S�K���N�Q���L��O�R�������������#)	����������������������լ��իխ������ժծ��թ����٧٢������٥٨��������٦��٣١���#�)٤	�yݿ�v�w�u������{��������x�t�z���\����Z�[������������������������������$$p*�	��������������������������`�n�K�m�Q�R�f�P���������������������T����������f$$+��٩	�|���������B�A������������կ���������z���a�g�����������������������������������$�+	�����C���G�B�E���������@�A���A�@�F���D�������W���C�M�N�F�X�H���S���I���������V���Q�O�$�,	�����������J�P�D�������R�����U���E�L�����T�G�K���[�\�i�V�L�b�J�[�E�e�R��A,%T-�D��Q�a�`�F�X	��_�`�c�Z�K�S�f�Y�a�m�V�X�C�j�c�]�@�l�g�I�k�P�H�d�\�T�^�b�G�Z�Y�O�_�U�W��h���]�N�M�B�^�W�Un%�-	�����������������������������������������������������������������%�.��������������	������������������������մյչ����վս�����հ�����������%l/��������	����ձ���������ղ��������������ճ����������պ������ռ��շջ��ն������տ�����4&0	������������ٽ����������٫����ٳ������٭��������ٻ��ٶ��������ٰٵٯ������ٱ��ٺ����ٷٴ������������v&�0	٬����ټپ����٪����ٲٹ���ٸ��������ٮ���������������������������&�1������	��������������������������ո���������������������������������������~����ٿ�������������������&02	�������J�H�^�F�X�}�_�B�]�G�U�d�]�[�@�Z�o�Q�a�m�I�^�K�Y�g�D�k�a�M�C��W�h�`��e�S�f�E�P�L�N<'3	�`�_�n�O�b��T�c�l�j�A�V�i�b�R�\��������������������������������������������~'�3������	������������������������������������������������������������������������������'p4����	��������������������������������������������������������������������E((5���	�A���H���I������D�J����@�����G�������������C��F�B�c���h�i�b�������f�����e��D(�5	�g�d�������Q�N�W�V�T�O�r�P�q���S�p�X�R�M���o�L�V�U�U�h�Y�Z�T�X�S���W�������(�6��	�����������v�������������V���������������Y���d������������������������������(47	���������p�c�e�q�d���������������K�����j�Y�w�������B�Z�[�n��������k�������\
)�7��	�e�o�f�p�����������������������������f�g�h�����������������L���l�Z���_�q�g����������L)�8��	�i�j���������������`���C�H�r�����h�s�i�������j�B�A���C�@�@�A���������A�B�@�����k��)\9�����������	���M���[���������]�a�~����I�J�^���t�k�l�����D���������B���������r��ɡ��ɤ��ɣ�):�����Dɢ	����@���������������������E�������[�Y�L�Q�S�L�M�U�R�O�Q�V�Z�X�Z�K�M�\�T�W*�:�E�G�^�U�N�J�Y�V�H�I�C�O�P�[�]�P�N	�S���\�W�R�]�F�T�K�X�D�j�z��q�K�b�e�B����m�o��v�h�f�g�uT*�;�G�p���n�s��J	�u�y�c�I�M��O�@�l���k�}�r���u�x�|�A�F�~�w�i�_�d��`�N��������{���t��a���L�*l<�|ϡ	Ϥ�wϧϪϬ�t�v�{�I��ϥϭ�{�s�d�~Ϣ�x�z���}�}�pϨϫ�z���m���x��ϩ�o���^�H�|�w�v�n����ϣ�����y���q�����r�*4=Ϧ�y�~	�L���C�U�[�W�J�M�F�G�J���V�_�E���@�N�B�O�Y�D�h�H�����H�E�f�Z�g�a�S+>�b	�\�e�c�I�T�����A�G�`�F�Q�C�i�P�K���K���X�]�e�����R�P�G�����[���U��G�D����g\+�>��	��d�X�c�N�����O�I�E��@�Q�Y�B������D�^�F�\�������S�����H���F�J���h�b���_�]�f��a�R��`�A�E��W���V�T�L�K���C�+d?��	��M�A�Z������������I���������M�D����������J�C������U�V���H������������+X@���	���D��������������B��S�K���Q�����W���A����G�E�B���C�O�L�T���@�F�G�����F�E����P�N�R",A	���@�a�`�F���_�I�J���h���^�C�����R�H�K�c���j�b���W�������i���U�L�Y�e�����T�M�����P�Z�dd,�A�G�Q���[�����N���E�S�g�����V�l�X�f���O�������D	�]�\����}����n���w�m����q��s���u���,�B�S���}�o	������u�~���|�|�v�t���z�w�x����z��~���p��y�x�����{��t��������s���r�����{��y���,<C��	��v�D�N���M�Y���K�O���F���R�������T�C�^�����W�[�`�U�I���������L��H�_�����a���V��\*-D��	�J���E������A�Z�B�@���X��Q�P�]�G�����I���@���A��H�C��O��B�����D�F���E�D�J�G��F������l-�D�E�B���@��	������A�����N�C����Q�������S�Y�W�������Z�R���V�U�[�������T���������X�P��q����o���-�E��X ��\��L � p!8"#�#�$H%&�&�'D(�(�)h*+�+�,L-�-�.d/0�0�1(2�2�3h4 5�5�6,7�7�8T9:�:�;d<,=>�>\?P@�@�AxB4CD�D�ElF.tF����	����p���m��n�������s�r���x�_�e�y�\�v�s�g�w�t�^�a�b�c�f��]�u�d�h�`�]�j�`�k�h�_�\�^�b�e�d�g�[�i�c�-�G�f�i�a��������	���������x���������y�����������������W�e���l�����������A�^�_�b�_�`�a2.\H	�X�Z�U�R�T�����V���S�P���W�Q���Yϯϳ��϶����������ϲϱ��ϴϵϮ����ϰt.I	�w�x�y�P�L�n�v�{�Q�l�r�k�u�q�M�O�z�j�m�s�t�|�p�N�m�N�P�L�X�J�W�i�H�[�R�l�S�.�I�V	�Z�O�T�j�k�Y�M�I�[�Q�U�K�H�I�e�O�Y�b�X�L�`�^�_�J�c�\�Z�K�]�a�M�d�.LJ	�p�w�yޡ���k���z��ޢ���}�m�~�l���x��ޣ���q���|�o�v�r�n�������������u���N�{�s�t���:/�J����	��������������������g�d�p�j�l���f�n�m�k�q���h�o���c�e���b�r�i�J�Q�U�S�K�I|/�K�L�M�H�U�V�G�V�Q�O�L�P�N	�R�R�M�N�O�P�K�T�S�W�X�T�����\�b�`�������^�������a�]�_���w��t�u��v��/LL	��l��m�z�k�j�i�{�l�j�k���������������������y�����������������R�����n���b0M	Ϸ�}��������ϸϹ�f�Pޤ�������|���g�����B���e�d�c�`�����[ϺϽ��ϻ��ϼ��Ңҡ�~�S�]�^�o�\�_B0�M�R�p	�Q�k�j�h�i�lަޥީިާ�����������s�t���Y�Z�r�}�q�p�n�o���l������ɥ��ɦ�C�D�f�b�a�0|N���e�g�c�f�g�d	�_Ͼ�]�d�����e�a�b�\���^���c�`��������Ͽ��������Ҩҥҧ�X�W�UҤҩ�T�VҦ�g�04OңҪ	�b�f�e�n�y�h�c�m�t�s�a�d�u�r�q�`�i�p�w�T�v�s�V�u�o�q�t�r�U�x�S��ޭެު����1�Oޮ	ޫ������ްޯ�����������v���u�~�}�{�z�w�x�y�|��_�\�]�W�[�a�`�^�d�e�����c�y��x�~á�m�n�m����J1�P�z�����������Y�v�j��ɧ��	�E�l�j�k�h�h�i�m���k�g�j�f���i�������l�h������������������ү�����1lQ��	��������������������ҴҫҶҮҹҺҬҸҵҳҷ�_�]ұҭҰһҲ�^���Z�\�x�m�k�l�s�t�p�{�u�1,R�r�o	�y�n�w�z�q�y�[�x�w�v�|�~ڡ�`ڧکڢ�Zڦڥ�[�a�bڨ�X�}�{ڣ�z�_�|ڤڪ�Y�^�\�]�W��2�R޷��޻	ޱ޼޲޳޽޺޸޹޵޴޾��޶��������������������������������������������@�bR2�S�A�	�����������i�f�e�g�f�Z�c�X�\�[�d�h�Y�m���z�����j�h�k�n���l�g�B�E�u�@�o�Fâ�D�{�2LT�A�C�G�v	�tã�s�n�������������������nҼҽ�}޿�]ä�{�����o�`����Ҿҿ�~��ګ�����2U��	���������i�^�_�r�o�p�q�I�H�|�w����������������c�d�����F�j�i����ڬ���������k�l�n�m���r�p3�U�q	�������������`�d�c��b�a�����{�z�����f�eڮڭ��������������BZ3�V�j	�sæå�|���s�������o�p�t�����������������������h�i�����n�l�����k�j�e���3W�����m	���f�g��֢֡���|�~֤֣�}����ڶ�k�jڰ�hڳ�lڴ�mڱ�g�iڵڲگ�������������������������������������3�W����	�����������������������������������E�C�H�I��F��G����D�l�k�s�m�r�o�`�q�a�b�p�n 4�X	���t���w�u�v���M¡�N�}�O�~�L�P�Jç�xè�o�K�p�����~���}�����������n�o�����Gb4HY	�q�m��������֦���o��֥ڸ�qڷ�p���J�����x�Q�q�p�����u�p�r�����K�t�R�r���4�Y	���������������q�r�s��֧��ڹ���s�����������L�d�u�c�y���S�s���n�x�w���v���y���������������4�Z	�������������������������������������u�v����ְ���w�tֲ֪֭֮֩֫֬������֨��ֱ��֯��(5T[	ڼھںڻڿ���ڽ��t���������������C���������F���D�����E���A���B�������@��������j5\������������	�N���Q�O��M��P�}��~�v�z�y�w�f�g�e�x�{�|�h�@����{���A����|����z�~�}�U¤¥¢£�5�\	�T�{é�y�z�t�w�u�v��������������f�����������o�������x���u�G�B��|�x��͡�z�|�~�}�{���5�]	�����������������������������|������������ֹ�z�����������������y�������}���~�{06D^	��ֳֵֶַָֺ��ִֻ���v�������������������w�����x���������N���Qr6�^����	�����������M�L�H���O�P�������J�K��������������������������������I�������T��X�V�6�_	�������S�����U�R��������Y�����W�j����������l�i���k��F���E�C��D�����V�6<`	�G����Z�W¦�[�]�\�X�Y�ê�~��}���z�}�y�q�{�|�~�r�t�s���������������r��ͣ87�`����͢	�������������������������������������������������ּ��ֽ��־ֿ�������������R����Sz7�a	�T���A���������C�B�����@���������������m�H��I��_�^§�ë�š������ɨ�������V���r�7tb�q�p	ͤ���������������������������������������������������������78c�}	�������|�z���{���y�A����Z�����X�@�W�\�[�Y��I�H�D���G�F���^���_�[�]�Z@8�c�\	��p���E�r�q�n�o���J�����`ª¨©��íì����������H�sͥ����ͦ�@���8|d���	��������������������������~���D�]�^�C�B�J�����K�L�a�`������������s��K�8(e��	«¬�u�����A����������������E���M���v�����ͧ����9�e�B�C	�@�B���D�G�E�F�C����H�A������������������������������������������������������H9`f��	�������������������������������������a�P�S�G�L�F�c�J�H�b�O�N�K�M�I���R�_�Q�9g	�]���X���N�P���U�T�W���R�Q�����S���Y�[�V�O���i���\���b���c�e�����������9�g�`�h	�d�f�g�v�����j�������t��x�������Q�y����w��{���z������������O�������N�:Xh�������	����L�������P�M�����u�c�a�g°�e�d²�j±�k�h®�i�b¯­��f�l�òð���ñîïP:ió	�x������w�y����������������ţŢ�����������������X�Y�m�~��ͨ�E�F�D���G�:�i�H�I	�I�O�M���K�L�N�J�����������������������������V�d�T�e�U�f���a�^�`�����_�:�j	�����k�����a���������|�}���W�S�X�T�V�R�U³������z�{�A���@�������tͩ��;$k���L���J���������K�������Z���S�Y���R�X�V�����U���T���������Q�P�W������	����������������������������������������X;�k����������������	�������������������l������������������������������������h�]�_�a�e�[�;�l�Y�j	�`�d�\�X�W�b�Z�^�k�i�f�g�c�r���j�x�t���x���e�u�b�w�f�����v�p�����������c���q�����s�������;tm�h�g�d	�l�i�m���y���n�o�k�����p�y�u���r�v���l���t�����s�w���q���n�����z�r�m�����{���o<<n	�������~�������������������������������������������������������_���Y�i���a�]���d�g���\���e�������`�Z�h`<�n���c���^���b�[���f��	���n�t¹�w´µ�o�v�qº·�m¶�s�u¸�r�p�÷øôõ���ú�����ö���~�}��<�o��ġ	�����������������B�����������@�B���A�l�<�p	�����o������&=q	���j��»��Ģ���C��I���u�M�`�[�_�]���^�\����@�i�j�n�o�h�k�g�m�@�p�z�|���}��������������h=8q	�ù��D����������O���N�b�����a����������B�C�A�s�m�l�n�r�q�����~�������y�xû�ýü��������P���=�q�e���d�c	���������������������D�o�p�~�C�A�B�{�|�}�������������������k����z�{¼½�l����=�rTHI�IDJ�J�KDLM�MtN,O�O�PdQ$R�R�SDTU�UxVW�W|X@Y�Y�ZL[\�\�]<^�^x_4`�`�alb0c�ctd e�eXfg�gPhi�ixjk�k�llm4n�n�o�pqP�0q�q�r�s.�sģ��	���������Q�����A�R�S�@�B���T���f�������A���@��q����������������sͪ�C�U�h���g��.>�t	�C���B�D���F�G�E���t�u�E���D�����p�o�m�n�q�|¿¾��ťŤ��p>lu	��w���v�F��ɩ����ͫ�v�w�w�t�v�y�u�{�z�x�x����ͭ��������Ͱͬ�����|��ͯͮ���>�u	�[�G�H�]�W�Z�c�a�I�g�L�d�\�Y�I�b�D�e�V�_�F�K�`�O�M�X�J�^�N�E�f���������j�����l���k�i�n�����H�>�v�o�m��	���������N���E�G�H�P�L�J�M�Q�����F�O�����K�I�������Q�O��6?dw	�Jߡ���N�K�����P���M�G���L�������w�u�{�sߢ�x�r�{���}�v�~�|�~�y�x�y�}���|�t�z�����Lx?�w�H	�M����J��K����I�A�D���C���������@����B��������������������������������t�����x�z�w�?�x�v	�u�s�����r���y��������}�~���þ�Ĥ����EŦ�C�D�������R�N�{���������S�����P�T�U�V�O�������h�?ly���p��	�W���P���|����������R���Q��E����ߣ�R��ͱ�i�Q�r���������q�W�T�V�������S���U�X�Y�Z>@<zߦ	ߧߥߨ��ߤ�S�J�F�I�K�H�G���������������������ĥ���F�������}�}���X�[�A�J�K�M���N�@�z�L	ˢˣ�{ˡ�����|�z�y�}�~�~�jͶ��͵ͷ��ͼ��Ͳ���������͹Ϳ�ʹ����ͺ��������;͸��������ͽ��ͻ�����@�{ͳ	�����b�\�d�a�q�t�]�k�V�`�c�eТ�w�UС�Y�W�R�o�~�s�vХ�f�}�^�xФ�u�y�|�mУ�{�lA�|�p�_�Z�S�X�T�g�nӥ�[	�z�AӨ���vӣ�}ӲӪ�~ө�x�|ӵ��ӭӤ��ӳ�tӬ�����s������ӫ�����r�\Ӧ�zFA<}���{ӡ���uӯ	ӮӶ����ӴӰӧӢ�����w��ӱ���y�^�`�e�y�����]�����h�o�u�A�}	�b�i�@�w�r�����n�j�\���a�Y�����f�c���s���d�z�l�k�������Z�_�p�v�A�[�g�m���x�q�t���l�A�~�`���}۪ۧ���hۣ�i�w���s��	�t�]ۤ��ۡ�u۬�p��ۯ���n�z�����rۭ�k�d�o�c�a��ۥ�jۨ۩���������~���v�f���^ۢ۫�e��۰�qBD	�m�����|���x�����������y�g�{�bۦۮ�_�����U����ߵ�����������߿�����������ߪNB4�߲	������������������߶����߱����߫��߹߸��߼߾��������߰��ߴ����������������߻ߺ��߬����߭��߷���B܀	��߳߯��߮�`��������X����[��Y���������������������Z����]����a�U�B���^��	�W���V���T�c�\��������b���_���������s�t�g�f�b�����v�uߩ�_�c�]�p�a�w�Z�X�d�n�i��C\��O	�m��߽�[�R�U�{�\�S�Q�N���e�����`�h���x�|���W�k�o�T�y�����L���r�V�j�P�^�Y�����l�}�z�q�M���IVC��@�C	���E��A�G��������L�F��U�O��F����J�T���Q��D�H�B�V�S�P��������W���M�K�N�S�@�E�R�D��A���C����M�O�����Q�I���P�B����R�J�G��U��	����H�T�K������L��V��C�N����������~�������������������C���	���������������������������������������������������ÿ��������������������ħĩĦ����D����	��ĪĬ�ĭī��Ĩ���������������������������������J������K�I�G�H�L��������������^Dp���	���E�F�G�����O���hӸӷ�@�B�|�{�����������~�X�Z�Y���W���������������ЩЧЦ�i�k�jШ�D4�	���ӿ�A���FӼ����ӽ�C����ӻ��������H��Ӿ��ӹ�G�D����Ӻ�E�B�Lץ�Kר׫�H�F�~שקפ׬׭ׯװ�}�D��Eעס׮�Gף�I�Dצ�M	�Jת��ۿ۴����۽۱��۶��ۺ۸����۲۵��۳۾ۼ۷۹ۻ������������������$E��������������������������������	�������j�������e�������g�����h�������m�����������������i���l�����f�����dfEt���������	���������������k������������������������������������������d���EP�	�a�����k�g�e�`�o���\�h�i�_�^�l�b�]�c�n�[�m�j�������f���Y���]�Z�a�g�\�p���j�_�k�f�m�^�����`�n�X�l�E(���	�d�c�h�[�����b�i���e��������������������o���������������������������������������������,F����������	����������������������Įį�������B�E�A��C����D�Q�O�N�@�P�F�M���������������������Z�n������nFȌ��Ъ	������G�����lЫױ�N�����������������Ь��ЮЭ�m�����I�����������J�N���M�����F�����K�L��	�Pײ�U���T��׸�R��׳�S׿׻׽׷׾�O׺׹׵�׼״׶�Q����������������������F\�������	�����������������������������������������t�B�A��v�@���n�p���r�q����s�4G�	���o�������������������������������������u�p�|���w�y���q�u�x�����{�s�t�z�r�v���r�q���w�����s���tvGЏ	�u�x�����������������v������������������������������İ���I��K��H�JŨ�Rŧ�������H�I�K�J�P���G��	�n������������W�V������������C�F�E�D�������������y�{�z��������ı��T�S�Gh��[	��Я�o�����������C����A�@�B�����D�I�G�H�������}�|�}�����IJ�L�Uũ���L<H���	�q�rаб�p�T�R�Q�X�P�Y���V�S�W�U�O�_�Y���^�`�Z�[���X���]���\�D�F���E�������I~H������	�����C�������������B�����@���G�������A�����H���������������������������P�M�E�J���Q�����G�HX�	�O�K�N�L���F���L�x�{�N���M�}���O���K���y���|�z�~���w�������J����������������������I ���	�����������������������������������������������~�������������������������������������DIԔ������	���������������������������������~��������������������������������������������������I������A	�O���������������@�B�����C����������ķ������ĵ������ĸĴ��Ķij��@�N�M�P�Q�A�V�[�I��Ū	�X�W�Z�Y�C���B�@�A�������@�M�N�g�m����
J`�	�������R�P����LJė	�����D�D�����Z�a�T�S����������v�������b�������H���V�U�W�Q�R�����������������F�Eˤ�\�[�����J������I	�Y�Z�X������������������������G�����s�t�]�^�������h�f�c�g�e�d�J�����L�Q���S�R�U�����O�K�M���T�J���P�N��������	�������[�T�������S�U��������������������������������������������������������K���	������H�I���J��ĺĹ�R�B�S�\ūŬ�E�BTKh�	���j�i�\�]���������в�v�u���_���������KĚ���X	���W���V�_�b�`�a�e�^�f�c�d���V�������������������L�N�K�M���T�o���w���������l���k���K$�	������`����[�^���Y��l�]����������\�_��Z���h���o�n�����p���m���r�i�k���g�j�q���s�����[�a�YL��b	�X�]�c�`�_�^�W�\�Z������A�C�@���E�B��F��D��������������������������������������������\L�������	������������������E�������A�@��C�����B����������D�R���O�S���Q�����P���T���L��	ļľ��Ľ������Ļ�C�E�V�D�U�aŭ�`Ů�^�]�b�c�F�_���������\�Q�P�O�p�����n���`�������LX���	�U�������y�x�c���a���b�����m�������n�����C�A�E�F�L�H�J�B��I�K�D�G��b�@��a�c���u"M��w�v�{��	�x�t�y�z�����|�g�f�d�e���������M�N�I�J�����������K�L�H�@�������G��������������������������dM���	��������F�G�H���I�����X�Y�W�V�Z���������������X�Y�W�F�dů�e�H�G�M��	���d�@���������|�G���d�A�[˦�M(�	��������˥��������������������жд�|г���~�{���}����е�z�j�����g�n�i�����l����*Np�du�u�v\w�w�xdy4z�z�{�|4}�}�~<,�Ԁ��T��܃����h�,����l�H� ������T��ȏ��`����P��̔����X���P������`����ܛ����P������ �h��.��h�e���k���m�f	�����p�z�v���~�w�|�r�o�q�}���u�x�t�y���{�s���M�e�O�g�i�N�f�j�h�G��O�~lN(�	�P�E��J��C�B�M�L�K�I�N�}�D�F�H�������������������R�C�A�S�D�B�Q�P���O�������E�����������������N�������������������	�������������U�o�R�S�Q�T˪˧ˬ˨����˩��˫��������������������имй�N��	����лнп��о����к����������q����p�r�������������������з�������l�V���W�T���n�S2Oh��Y�X�k�\�R�[�P�Z�U�m	�������Q���R�����n�q�i�m���l�j�p�k�h�o�Y�H�J�V�W�U�Q�G�Z�T�F�I�X�������������K�L�M�]tO,��\��	���[�\�Z�fŰ�������u�t�@�A��s�����������_�a�]�`�o�^�p�s�U�T�S���s�u���������t�r�O��a�^�_�M�`�[�\�J	�K�]�L�����������������������������������O�P�N�R�����_���Q�^������Ŀ�����]�H�I�����Oܧ�C�]���q	�o�����V��������q�������B�x�v�z�D�y�w�C��������B����@����C������A���m�l:P���j�b�q�e�o�v�n�y	�u�c�i�w�h�x�z�k�r�s�w�u�t�f�r�v�t�s�d�g�p���������a��W�Y�e��Z�\�f|Pt��[	�d���b��^���c������`��������X�g�]������_�����������x����z��������P4���	�����������~������|���������y����{����w�v������}��R�Z�U���g�P���O�VQ��e�T�q�c�d�N��X�t�y�s���o�w�u�h�b�}�W�~	�x�m�k�f�n�{�j�z��S�v�|�r�l�Q��p�Y�i���������D���A�BQ���C���	�������B�@��������@������C�E���E�������������B��������A�����������D��������������Q��	�����������������������������������������������������������������������������������QL���	�����`�Y���T�c�[���e�U���_�������a���W�X�]�b�����j�g�k�^�Z�h�j�\���������d�f���i�S�VR��s	�c���q�a���l�h���r�b�e���t�m�p�������i�d�����`�������o���k�u��g�n���B���f����@�����JR����	���D������A��������C����������������a�f�O�h�I�d�j�N�J�K�`�g�M�e�L�_�c�b�^�R���i	ű�m�p�l�n�o�i�j�g�k�hŲų�K�M�L�N���J���������D���S�R�T�_�U�^�V�r�u�t�h�s�r�p�q�w�R4���������	S�	���D�x��vRS���	���{�E�F���}�z�y���|�{�~�����{�h�����������������������[���\�M�K���I�J�F�F�N�H�L�S0���	�������������������G��n�l�m������w�x��E�G�F���P�m�l�k�S�	��ɪ�X���V�Y�Wˮ����˰��˯˭����������������Tp���	�@�����������������������������E�����F�~�|�}�����I���H�K���J���������������G���}ZTزܣ	ܢ�������|�~ܡ���������������j�k���i�����������G�H�O�I�������o����A���G�L�T������ܤܦ��������ܥ�n�o�m���l��	����P�J���p�t��q���u��s�y�����B������ܨܧ�����s�p���r���q����T@���	��]��^�_��`�Q�N�K�P�S�L�R�O�M����������w�v��x�~��}�z��{�|�H�I���S�n�Q�R�oŴŵ�q U�	�E���G�����F�W���C�t���Q�R�D�a����S�����Mܩܫܪ�����u�v�������������bUܵ������������	���c�b��d�V�U�T�T���A�@������}���{�~�|�y�@�z����J�K�p�U��	ŷŶ�O�P�H���i�������������C�B���������q�r�����W�D�����X�A���L�M�T�U,��Q�������N����ܬ��	�z�|�������w�x�{�y��������g����e�[�����f�Y�Z�U�[�Y�X�V�Z�W(Vط	�E�J�F�I�����H�G�D�B�E�C����F��@��A����Q�N�O�P�r�V�U�t�sŸ���I�`�X����jV��	��ܭ������������h����G��B����V<��u�R�S	���t�s�u���������H�O������ܮ�������~������}�����V����	������������i���\��k�j���������l�a�_�^�]�`�\�K�^�]�_�N�L�M�R�K�Q�T�S�P�O�����J�H�I0W�	���C���D�X�W�U�T�����Y�vŹ�w�W�v�V�w���a�Y��rW̺	���P�U�������`�W�V�L�����������������������������������W<�	���������������������n�q�s�����r�������t�p���m�o�c�f�d�c�i�h�g�b�b�a�e�d�Z�^�[�]�\�Y�_�b�`�a�@�W��	���X�c���������M�����E�F������������`�^���]�c�a���\�Z�[���_���b�x�~�y�[��8X���Z�}�|�Y�{�X�z	�}���~�{Ż�x�|�����y�zź�R���S�������J�v�j���k���������z��zXX�	���������������l�u�e�j�m�f�d�k�X����N�	�f�d�e���\����ż�������b����I�������������h�v�w�������n�q�p�o�g�h�f�e�XD�	�g�O���P��������G���g�i�h����������Ž�T�U�V�K�c�����x�i������J�{���r�������������@Y�	�������z�y���i�����S�R�Q�^���]�����L�����������������������|�����������{�}�x�v��w�Y���s	�y�t�r�u��|�j�{�z�~�j�m�l�t�o�s�q�p�n�k�C�B�D�A�u�������������Y`��X��	���������W�U�T�������J�������K�����������������I�H���������l�o�VZ�	�m�s�q�k�v�j���r�n���u�t�����������`���������_ſ��������������������HZ���p��	������ž�Z�\�_�[�`�Y�W���]�����X�^���M�����������Z�\�[�y�x�w�z�s�t�����Z$�	��ܯ�����������������������������������Z����	�������}�����~��o��k����p������l��m�n���z�{�~�|�v�y��}�E���F[$���w��	����������Y���������������������Z���[�M�x�����O���P�������N������������������P[��������	�����������L�������}�{�������|�x���~���z���w���������y���������������a�������b�������d�������������[��	���c���������������������������������������������������i�n�d�g���k�r���e�o�s�j�c�m�l�q�p���h�b�f�N�O�a�������[l�����������������	���]�^�`�_�b�a�|�{�������x�|���}\T�	�������P�Q��X\����	����������G��������Q�S���R���������e�����c������������T�������������\����	�t����d�����H�u�����r���q��L�J�K�I���\�����������������f���v�w���d�}�uܰ�������\������	�x�R�e�~����������]�����g�����y������������������^������������������|�{�z����M]X������}	���f�������N������~�������������h�����������������i�j���������������T�������S�g�j�i�h��`]�	�s�e�����������t������]��أ��`�$��ԧ��l�,����x�D�����x�,���P�(��h�в��8��Եx�$�з��4����ĺ4�����P��<����X������������d�L�������P����$��],�&^`�	ơƢƣƤƥƦƧƨƩƪƫƬƭƮƯH^4�ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ����������������������������������������������������������������������������������������������.�����������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p.���q�r�s�t�u�v�w�x�y�z�{�|�}�~ǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ������������������������������������.���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S.���T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~ȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵ.��ȶȷȸȹȺȻȼȽȾȿ���������������������������������������������������������������������������������������������������������.�����������	�^��	�J��^��	�J�W�Y�[�_�`�c�d�g�h�k�l�o�p�s_��t�w�x�{�|	�������������\�M�N�O�Q�R�S�T�}�~�������������������������B�L�M�NP_`�	�I���C�H���]�^�����A���D�����������������������G�F�������H�I�����������������������������������������������������@���_�	���������������������������������������������@�A�B�C�a�U�b���_��	�F�G���D`��P�x����������������X�����|���X`��p��`������`��0�H�P�x�$�X�h�p���t���0xG�t �$�,���������`��p�����p�����p�����p�����p�����p�����p����p����p����p���p��	�p���p���p���p���p ��"�p%��'�p*��,�p/��h���h���h���h���h���h��h��h��h�h�	h�h�h�h�h �"h%��	�����"�$'�),�.1�36�8;�=@�BE�GJ�LO�QT�VY�[^�`c�eh�jm�or�tw�y|�~����������������������������������������������������������'h*�,h/�1�a�1	!�F�G�D|���Lca-R���X��23���g�P�M1o�b�3ACEIDNO��UYTsaceino��uytc`4	��Zc�4	�V�X�w�����������E���L�K�����������c�4	�A�B�X�������������������������c,5 d��	�[bd�5	�����������������������������������������������������������~�������������ZD�5	�������d86������	�dT6$5P������H�p5x5���5�06 �T�L6h6(ep6�@�B�C��	�q�r�m�n�u�v�y�z�i�j�E�e�f��������������������������je�6	�@�G�T�|�W���U���A���B���a�H�eD7	�@�G�T�|�����C�K�E�Q�����������g���������W�S�]�����N�I�����������e�7��������	S8�@�G�T�|�����C�K�E�Q�����������g���������W�S�]�������k�k�A�u�L�`�����g���W���U���k���v�����������]	0f<8<7P����78489,�P�rf9�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��.@9��������������������������������������������������������������������������������������������������������������������������������.L:�����������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b.X;�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������.d<���������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E.p=�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������.|>��������������������������������������������������������������������������������������������������������������������������������.�?�����������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h.�@�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������������������.�A���������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K.�B�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������.�C��������������������������������������������������������������������������������������������������������������������������������.�D�����������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n.�E�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������������������������������.�F���������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q.�G�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������.�H��������������������������������������������������������������������������������������������������������������������������������.J�����������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t.K�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������������������������������������������.L���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W.$M�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������.0N��������������������������������������������������������������������������������������������������������������������������������.<O�����������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z.HP�{�|�}�~������������������������������������������������������������������������������������������������������������������������.TQ���������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�].`R�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������������������.lS�������������������������������������������������������������������������������������������������������������������������������@.xT�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����.�U��������������������������������������������������������������������������������������������������������������������������������.�V���������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c.�W�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������������������������������.�X�������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F.�Y�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������.�Z��������������������������������������������������������������������������������������������������������������������������������.�[���������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i.�\�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������������������������������������������.�]�������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L.�^�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������.�_��������������������������������������������������������������������������������������������������������������������������������.a���������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o.b�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������������������������������������������������������. c�������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R.,d�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������.8e��������������������������������������������������������������������������������������������������������������������������������.Df���������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u.Pg�v�w�x�y�z�{�|�}�~��������������������������������������������������������������������������������������������������������������.\h�������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X.hi�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������.tj��������������������������������������������������������������������������������������������������������������������������������.�k���������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{.�l�|�}�~��������������������������������������������������������������������������������������������������������������������������.�m�������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^.�n�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������.�o�����������������������������������������������������������������������������������������������������������������������������@�A.�p�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������.�q��������������������������������������������������������������������������������������������������������������������������������.�r�������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d.�s�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������������������.�t�����������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G.�u�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������.w��������������������������������������������������������������������������������������������������������������������������������.x�������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j.y�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������������������������������.(z�����������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M.4{D:P;\<h=t>�?�@�A�B�C�D�E�F�G�H�IKLM(N4O@PLQXRdSpT|U�V�W�X�Y�Z�[�\�]�^�_abc$d0e<fHgTh`iljxk�l�m�n�o�p�q�r�s�t�u�vxy z,{8|.@|�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������.L}��������������������������������������������������������������������������������������������������������������������������������.X~�������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p.d�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������������������������������������������.p������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S.|��T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������.����������������������������������������������������������������������������������������������������������������������������������.���������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v.���w�x�y�z�{�|�}�~����������������������������������������������������������������������������������������������������������������.�������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y.���Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������.ć��������������������������������������������������������������������������������������������������������������������������������.Ј�������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|.܉�}�~����������������������������������������������������������������������������������������������������������������������������.������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_.��`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������.����������������������������������������������������������������������������������������������������������������������������@�A�B.��C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������.���������������������������������������������������������������������������������������������������������������������������������.$������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e.0��f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������������.<����������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H.H��I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������.T���������������������������������������������������������������������������������������������������������������������������������.`������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k.l��l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������������������������.x���������������������������������������������������������������������������������������������������ơƢƣƤƥƦƧƨƩƪƫƬƭƮƯ.���Z�����������y�t�������`�i��ù�����r�������O�_���T�d���Z������}�P����İ��þ��Y�����T	���N�����r�l�c��Ī�����S�|�O�L�S���w���f�������b��ŢŤ�c�U���p�S�����\�|���\�����������W������Ū�������������v���_��K�_���c�������������������H�B�Y�����G��	��³�}���q�y.���f�k�f���o�r�[�z�R���O�����e�~�����������	�m�p�����s���C�H�|�P�����G������î�y�O������̰���������a�s�F����§Ŀ���c�F���d������.���R���d���s�w���B���h�y���[�d��������������[�_�����X���v���Q�O�i�������d�z�g��	����������[�M�Zĩ�����L�O�{�������������������f���������}�v�}�������������J�	��������q�������t�������h�����}�]�b8g��	�I�����C�H�����]�^�����A���D�����������������������G�F�������H�I�����������������������������������������������������e�@�f�s��.H������������������������������������������������@�A�B�C�a�U�b��	�NzgT�P~\h�t�������������Ȉԉ�������(�4�@�L�X�d�p�|�����������������P���������@�X���L�ܟ���g�X4�4P�x��4$�X�h�p��689��0xG�t �$�,�D}��������g��䏰䰲䘃䖦䕸�m䵷䖳�n䳢p㮕䜶䝄䱇䱀Qq�r�suQv䱗�w䝏䗚䲅�x䴇䪤䚡z爥Q{�|�}晍囻	綕夝Q�㷴霴��寛т媤㘥�嫑宷峼杮薓Q�瑡璝�h�㇀㇁㇂㇃㇄Ѷ㇅�Q�㇆㇇��ѻ㇈�㇉㇊㇋㇌Q�㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ	ẾỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚǜüếềêɡ⏚⏛j����	攊丽滝鵎釟Q�撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮琑糼緍楆竉刧醌碸酞肼贋胶��肟黇䳍鷉鸌䰾���鸊Q�㗁溚舾甙䤑马骏龙禇����Q�两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅�j(��-唥	/Q0�1喐�2㧬4蹆Q5�6䁓�7睺9㨴䟕Q:�;�<擝>Q?�@�A撍蹾CQD�E�FHQI�J�KM䟴QN�O骲㩧�P㿭㔆RQS�T�U鵮頕䏙W撴哣QX�Y�Z㧻\Q]�^�_擪aQb蹨�c�df䠋Qg㿺塳�h�ikQl�m�n啹䂻䎺䪴pQq膪飵�r捹㧾�s跀嚡摼㹃uQv�w�xzQ{㦒㨆�|㕸�}噒Q���т㒼氽�Q���ч�Q���ь�羓Q���ё㗻�Q���і㾓�Q���ћ�Q���Ѡ�㿹Q�搲���kt��Q������Q���㨘���Q������Q���閪哌苄喹	��鰦骶�Q�煀腭胬尜��脴㞗卟��醶�Q�����㗝�㘉Q�嚯����Q�����Q���婔Q��垜Q	�
�
Q�㜃�Q��Q�墙剨㘚�箲孨䠀䬬鼧䧧鰟鮍Q嗻㗲嚉丨夂��靑!乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭Q"罒礻糹罓�#㓁�$耂肀&Q'卝衤见�(讠贝钅镸长门�)韦页风飞饣+鱼鸟黄歯龜丷Q,阝户钢�ņ倻淾�]龦㷉袏_灷峵䬠Q`㕙�a愢�b辧釶熑朙玺dQe㲋�f䬐磤琂冮�g䀉橣i䈣蘏Qj稪�k�l靕灍匤n鏴盙Qo龧矝亣俰傼丯众龨吴綋墒壐�p庒庙忂�q斋s椙橃Qt泿	爀�u玌㻛�v嬕璹讃xQy窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬�z�{䁱䊢娚顨杫䉶圽藖}芿Q~䲁�嵻р�龭龮宖龯曧繛湗秊㶈䓃Q���䎚䔶峕х諹屸㴒�嵸龲煗䕘Q���䱷㥸㑊ъ�諌侴Q�妿腬顖��弻�pD�я	�Q�䄂䚻��㼇龳є䃸㟖䛷�䅼Q���䕭㣔љ䕡䔛䶉䱻䵶䗪㿈�㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆Q�溻滢滚齿滨滩漤漴㵆��澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉ў䏁㗱������垾��焾�㙎榢Q�孴穉����穥穽�窻窰竂竃燑Q�䇊竚竝竪䇯咲��笋筕笩���箢筯莜Q���篐萡箒	��㶭�蒒篺簵Q�籄粃��粦晽��糉糇糦籴糳糵繧䔝�絝Q�璍綉綫焵綳����緤㴓緵�緥Q�����繮纒䌫鑬縧罀罁罇礶�駡羗Q�羣���䕜�䔃Q�翺��耈耝耯��耻耼聡Q�䦉���朥肧Q脇脚墰�汿�擧Q舘�橓�	䑺舩Q�
�俹蓢荢Q��Q芪椛�䇛�r0�蕋苐茚IQJ㛁�K�L艻苢茘NQO�P�QS㶿茝嗬莅䔋QT莬	菓㑾�U橗蕚㒖�VX葘QY葱㷓䓤檧葊�Z祘�[]Q^蓞莑䒠蒓蓤�_䉀�`䕃蔴嫲b䔧蕳䔖枿蘖Qc�d藁�e蘂gQh�i䕪蘨㙈�j号l虾蝱Qm蟮�n螱蟚蠏噡虬桖䘏衅衆�oqQr衞袜䙛袴袵揁装睷�s覇覊覧覼�t觧vQw誜瞓釾誐�x竩�y{䜓Q|煼謌謟�}�~謿譌譍誩�讐讛誯Q�䘕衏貛��у�㜥Q�賖��ш贒贃�賛灜贑Q�㻐ct��趩Ѽ�Q�㭼���竧躭躶軃鋔輙輭�Q�辥錃����辳䤪�Q���廸��迹�Q�����㦀�逷Q���遡���邨Q�郄��邮	酧㫰醩釄粬���鈎沟鉁鉢Q������Q���錬鍫���炏嫃Q���䥥鉄���Q�鍳鑛躼閅閦鐦閠濶䊹�����Q�䧟氜陻隖䅬隣��懚隶磵��隽双䦡�Q�����Q����霱虂霶䨏䔽䖅�灵孁霛Q靗孊�靟鐥僐�鞉鞟鞱鞾韀韒韠Q韮琜�韵�	䫑頴頳顋顦㬎Q
㵑��2v�飊颷飈飇䫿Q�喰飡飦飬鍸餹�䭲Q駵騌騻騐驘�㛄�髠髢Q髴䰎鬔鬭�倴鬴�㣃魐魀Q婅�鮎� 鰂鯿鰌"鷔Q#�$�%'Q(�)鵾鶃�*鸎梈鷄,Q-�.�/1鴹Q2�3麐麕麞麢䴴麪麯�4黁㭠㧥㴝伲㞾6鼂鼈䮖鐤Q7鼗	鼹嚟嚊齅馸�8韲葿齢齩竜龎爖䮾�9;煷Q<�=�>玞@QA禟�B�C鍩鏳E鋬鎁鏋QF�G爗㻫睲穃烐�HJ煾QK炣�L�M㻇OQP�Q㜢�RT㛡QU�V�W㜣Y坛QZ�[�\�x�Q���蔃ѐ	葕�Q���ѕ�Q�䓴��њ�柹㜳㰕㷧塬Q�栐䁗��џ�Q���哋嚞Ѥ嚒�Q���鏆ѩ鎜仸儫㠙�亼Q���佋侊Ѯ婨�Q�㦙��ѳ㐵伩�Q���諚Ѹ亘働儍侢伃�Q�佂倮偬傁俌俥偘僼湶��ѽ�浲Q���冨凃��䓝�Q���赺���剙劤Q�勡䙺熌�����Q�槑��㻞璙琔瑖玘䮎���叐㖄爏Q�喴��响��圝鉝雴鍦埝垍坿㘾壋媙�Q�����娬妸銏婾嫏娒�Q�����㛵洅瑃娡�xy��媁Q���鏠璌��焅䥲鐈�鎽㞠尞岞幞幈Q�����廍孏�Q�㜁��㛝��㛓脪�Q�����弌弎�Q�婫��孄蘔�衠恾�Q�忛㺸���Q懀��憙憘恵Q��
摱Q�㨩�
Q�挷�撶挱揑Q护�搻敫楲㯴�Q�唍�Q曎� �!㫠䆐#Q$�%�&(Q)磮�*�+-㑤Q.�/�0暎2晫䮓昰Q3�4晣�57昞Q8㣑�9�:㮙<Q=瓐㮖枏�>梶栞㯄檾㡣�?A樳橒櫉欅QB攑梘橌㯗橺歗�C�D鎠鋲FQG�`�銉�xz鑧涥漋Q{	�|㶏渄�}娽渊塇洤硂焻Q�烱牐犇犔��т兹�Q�瑺��ч�Q���㼆㺱ь�Q�悧㻳瓌琼鎇琷䒟��䕑疃㽣ё�㽘畕癳Q�㬙瑨��і�㫻㷍Q�㻿��ћ釺圲鍂�Q�僟��Ѡ睸�眎眏睻Q���㩞ѥ琸璛㺿�Q�䃈��Ѫ錇�砞碍碈磒珐祙Q���䄎蒖禥樭ѯ稺秴䅮�䄲鈵秱Q���Ѵ�Q�㖗啫㕰㚪��ѹ竢婙�Q���娍Ѿ磰娪�竾䇹籝籭䈑Q�����糍�Q�粎籼粮檲緜縇緓罎��"}����綗Q�䉪����柖�Q�埄�����翝笧Q�����笌�駦虅驣樜Q�㧢����騟�蒀Q���䓪脷䐂胆脉腂��飃�艢艥Q�葓��蘐��媆䅿�嬫Q�嫤��蚠���蠭Q�娂衮佅袇袿裦襥襍��襔���Q�����㺭蒣䛵䛏㟲訽訜Q�彍鈫��旔焩烄�鵭貟賩�妚矃姰䍮㛔踪躧Q�輰轊䋴汘澻��䢛潹溋�鯩㚵 邻	啱䤆醻鐄Q 䁢� 鐧�  蓥訫閙閧閗閖Q 瑅㻂� �	  㻧Q 随�
 �  㻌Q � � 琒瑫㻼靁 �\�桇䨝�F �G 	鍨I QJ �K �L 銺嬑譩䤼珹N 鞛靱餸QO 巁�P �Q 頟S 鋶QT 釥䓀�U �V X 飜QY 㼀鈪䤥萔餻饍�Z 㷽馛䭯馪驜�[ ] 檏騡嫾騯Q^ 䮐�_ 馼䮽䮗鍽塲�` 堢b Qc 硄�d �e 棅㵽鑘㤧慐g Qh 愇鱏鱓鱻鰵鰐魿鯏�i 鮟�j l 鴡䲮Qm 鸘䲰鴌�n �o q Qr 鶥蒽�s �t v 藼䔳Qw �x �y 萠藮{ Q| �} 秢�~ � 䤭Q� 㵢鏛銾鍈�� 碹鉷鑍俤㑀遤у 砽硔碶硋� Q� �� 㚚佲濚濙瀞吔ш 垻壳垊鴖埗焴㒯� 燫Q� �� э � Y���愌嫎娋䊼Q� 㜬䭻�� 鎻鎸ђ � 葲Q� �� ї � Q� 妔�� ќ 綨� Q� �� ѡ � 鋥珢㻩璴Q� �� 㻡Ѧ 櫘珳珻㻖� Q� �� ѫ � Q� �� 瑈Ѱ 炥� 銄珦鍟Q� 錱�� ѵ 鎆� Q� 䤵�� 煫Ѻ � 嚤Q� �� ѿ 唂秄� 緾Q� �� �� 䔮鐁㜊� Q� 妰�� �� � 媡㛢Q� 㚰鉟婹�� �� 鍴㳍� 䪖㦊僴㵩㵌Q� 煵䋻�� 渏�� 䓫浗� 灧沯㳖Q� �� 渂漌㵯�� 畑㚼㓈䚀㻚䡱姄鉮䤾轁� Q� 堒埈㛖�� 烾�� � Q� �� �� 梹楧� Q� �� �� � Q� �� �� 樚� Q� 萾䓟䓎�T��� �� � Q� 漗�� 茽� 菭� Q� �� 妉媂� 婡婱� Q� 㜭姯�� 㛇熎鎐暚�!婮娫!樫Q!�!�!!焝Q!�	!侰�
!峂!Q
!�!樌�!!炦焳Q!㶥泟�!�!繥姫崯㷳彜!Q!綤萦咅�!�!!坾Q!�!㿥�! !瀃Q!!嵰玏糓�"!�#!俈翧狍猐%!猸猹Q&!獁獈㺩�'!遬燵�(!珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発*!熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈Q+!礳栃礲䄃���䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀�,!総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑�-!訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿�T�鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯/!鵉鰺黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄Q0!�1!�2!椚铃妬4!塀铁㞹Q5!�6!�7!9!块煳Q:!�;!�<!呪>!Q?!咞�@!�A!C!QD!�E!惧�F!噺H!QI!�J!�K!M!QN!楕鰯螥�O!�P!R!QS!�T!�U!尠W!帋QX!�Y!�Z!朞\!Q]!�^!㙇�_!a!Qb!�c!卤蒭�d!f!Qg!讁�h!�i!k!Ql!乸炻�m!�n!���Q�!��!Ѣ!�!Q�!��!拃ѧ!�!熘桕Q�!槩㛈��!Ѭ!�!Q�!��!ѱ!苽�!Q�!��!覥Ѷ!辠�!鞸Q�!顇骽��!	ѻ!�!Q�!��!�!�!Q�!��!��!�!Q�!��!��!�!徱晈暿Q�!��!��!�!Q�!��!��!墵朎椘�!Q�!��!��!�!Q�!��!䣐䪸��!�!Q�!��!��!�!Q�!��!��!凒�!妟Q�!㮾��!��!�!垈Q�!㦛��!��!�!㝢Q�!譞��!�!�!Q�!爉��!�!奥�!Q�!�"軚�"劏圿煱"Q"�"�"喼"Q	"�
"㑳�"
"Q"䜘�"�""Q"�"偦㓻�""䝼Q"�"�""Q"垡煑�"�"遖!"Q""譢�#"�$"��T�嵛QV"	�W"�X"諪Z"Q["�\"�]"䯀_"Q`"�a"鑥�b"憕娧d"嚹Qe"�f"乪�g"陖涏i"㘘襷Qj"�k"�l"n"Qo"筂�p"�q"s"Qt"穅�u"騦�v"㙟x"Qy"禃�z"�{"崬}"Q~"䛐�"画补р"墶㜜�"Q�"��"㱔х"�"銁Q�"��"錰ъ"�"氹钟Q�"��"蠧裵я"�"Q�"溸��"є"㦤㚹䔿暶�"Q�"襃��"љ"囖䃟�"㦡Q�"��"ў"熭荦�"Q�"䲷��"ѣ"�"Q�"��"Ѩ"�"筃祾Q�"澵��"樃ѭ"厢�"鎿栶靝Q�"��"Ѳ"�"Q�"��"嶅ѷ"�"圕頣Q�"嶫��"斾槕叒Ѽ"�"㰑朶Q�"��"�"�"Q�"�����"�"Q�"��"�"�"㗊Q�"��"䣺揦�"砈鉕#䏲Q#䏟�#�##姸Q#	�#�	##Q#㷷�
#�#运犏嚋#Q#�#�##Q#�#�##Q#�#�##纟Q #�!#䲤镇�"#熢$#䶑递Q%#䶜�&#达嗁辺�'#边)#䔉繿潖檱仪㓤Q*#�+#㜺躀�,#.#Q/#�0#�1#3#㷫Q4#�5#�6#8#亚Q9#�:#嚿�;#踎孭=#Q>#揞�?#�@#攰嘭B#吚QC#㷆�D#䱽嘢嘞罉�E#奵G#蝰东QH#�I#�J#脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖L#㗎嘅嗱曱QM#㘭甴嗰喺咗啲�N#�O#廐Q#QR#�S#���#麫絚嗞Q�#抝靭咔賍燶酶揼掹揾啩��#鱲ш#冚㓟�#冧呍唞唓癦踭Q�#疱肶蠄螆裇膶萜��#䓬猄э#宐茋�#噻Q�#��#ђ#�#Q�#��#酰ї#鈈�#Q�#��#ќ#牦�#䝎Q�#��#ѡ#䃺鱝攟�#䣳Q�#��#Ѧ#�#	Q�#��#ѫ#�#熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥Q�#墚��#舭呋垪Ѱ#�#㩒Q�#獴��#䴉鯭ѵ#�#䱛Q�#��#Ѻ#葜�#Q�#��#ѿ#挮紥�#Q�#㨪逈勌㹴㙺䗩��#癀嫰��#硺�#墧䂿噼鮋嵴癔Q�#麅䳡㟻愙��#��#噝�#垧Q�#��#刴��#㖭鵼S���籖鬹埞Q$屓擓�$�$$蚭Q$�$�$	$	凾Q
$嶎霃�$麁遌笟鬂峑箣扨挵髿篏鬪籾籂粆鰕篼鬉鰛�$齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰椬叚鰊鴂䰻陁榀傦畆$駚剳酙隁酜酑Q$捿�$櫊嘑醎畺抅�$獏籰$Q$�$盖鮝个�$莾衂届槀坺刟巵从氱$伹咜哚劚趂㗾㗳歒酼龥鮗頮颴骺麨麄煺笔毺蠘罸嘠Q$蹷齓跔蹏鸜踁抂�$踨蹵竓�$稾磘泪詧瘇@���QM$鼦泎蟖痃�N$硓�O$贌狢獱謭猂瓱賫Q$蘯徺袠䒷	QR$�S$詾�T$惽癧髗鵄鍮鮏蟵賷猬霡鮰㗖犲䰇籑饊V$慙䰄麖慽坟慯抦戹㩜懢厪QW$捤栂㗒嵗�X$迚�Y$僙[$礆匲阸Q\$䁥矾糂�]$糚稭聦聣絍甅瓲覔舚朌聢�^$聛瓰脃眤覉`$畓Qa$螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦覩涹蟁�b$瓧㷛煶悤憜㳑恷罱�c$惩䭾删㰘e$Qf$�g$�h$j$Qk$�l$�m$o$峁Qp$�q$�r$t$Qu$�v$䕢嬟�w$齐麦y$t�L� ,、。.•;:?!︰…‥﹐、﹒·﹔﹕﹖﹗|–︱—︳	︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅‾_﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦∼∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂♁☉↑↓←→↖↗↙↘∥∣���	/\$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩卄ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv���wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ	k���讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲①②③④⑤⑥⑦⑧⑨⑩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广	彐彡攴疒辵¨ˆヽヾゝゞ々〆〇ー[]✽ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじ,��すずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶАБВГДЕЁЖЗИЙК�t�ЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя⇧↸↹㇏�k%乚�l%刂䒑龰冈龱n%	¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣ʃɐɛɔɵœøŋʊɪ���纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕	╘╧╛╓╥╖╟╫╢╙╨╜║■������%鋛�%Q�%蕌䊵珯况㙉��%��%鍄�%苮Q�%砼杄拟��%��%�%Q�%��%侫��%倈�%Q�%��%��%�%	Q�%徤��%��%滛�%儁㑺儎顬㝃萖Q�%��%兠��%兪�%Q�%��%��%�%Q�%��%宂蝽�%�%冲冸鴴凉减凑㳜凓Q�%决凢卂凭菍椾��%彻刋刦刼劵剗劔効勅簕蕂勠蘍�%�%啉滙Q�%�&�&匳&泋Q&栛珕恊㺪㣌�&燝䒢卭却�&卾&Q	&矦厓�
&厠厫厮玧�&㽙玜叁叅汉义埾叙㪫
&叠Q&�&叶�&吓灹唫晗浛呭&Q&啝咏咤䞦�&�&㶴&~�0��H&�I&啇䳭启琗喆喩	K&QL&䕒�M&暳�N&嘷曍P&暤暭噍噏磱囱鞇叾圀囯园QQ&㘣�R&坆�S&汮炋坂㚱U&埦QV&堃�W&�X&堦Z&塜墪㕡壠壜Q[&壻寿坃�\&�]&鏓㖡够梦㛃湙_&娤啓Q`&蔅姉�a&�b&d&Qe&姙�f&�g&i&浱Qj&�k&姹�l&媫婣㛦n&㜈媖瑥嫓Qo&�p&㶅�q&㜲s&広勐孶斈孼Qt&䀄䡝�u&寕慠�v&x&Qy&寳宝䴐尅�z&尓珎尔�{&}&屉䣝岅峩峯嶋Q~&�&崐崘嵆р&岺巗苼㠭�&Q�&��&芇㠶㯂帮檊幺х&�&厦亷厨Q�&帉廴��&a���廹廻㢠廼栾鐛弍�&Q�&㫞䢮��&强Ѿ&�&	Q�&彣鞽��&彲鍀��&徧嶶㵟�&Q�&��&��&釖�&Q�&怱暅��&㥣㷇㘹垐��&祱㹀悞悳�&Q�&��&璤僡媠慤萤慂��&�&憁凴Q�&憇宪��&��&懓�&Q�&懐㤲��&��&怣慜攞掋�&担Q�&拕��&捬��&㨗搸揸�&Q�&澊��&頔��&�&擡擥鑻㩦携㩗敍漖Q�&��&斅敭敟��&斵�&䬷旑䃘Q�&无旣忟��&昘��&�&晄Q�&��&晋�&晧�&晳Q�&��&�&�&Q�&矅��&馤朂�&'㬫槺Q'杧杢�'�'柗䓩栢湐鈼栁'Q'桝+���8'槡樋:'楳棃Q;'椁椀㴲㨁�<'㮀枬楡�='䋼椶榘㮡?'荣傐槹Q@'�A'橅�B'檝㯳枱櫈D'㰍欝QE'惞欵歴�F'溵�G'I'QJ'㝀吡�K'毡�L'毜氷N'QO'�P'汚舦汹�Q'䓅S'QT'�U'�V'X'㛥㳫QY'鮃�Z'�['羏样]'Q^'�_'涖浜湼漄�`'b'Qc'蔳�d'凇	萮�e'g'瑓Qh'秌湏媑�i'濸㜍澝�j'滺l'Qm'䕕鏰潄潜㵎潴�n'㴻澟�o'濓q'Qr'�s'�t'v'Qw'凟�x'�y'{'Q|'灋灾炧炁烌烕烖烟䄄㷨熴熖�}'焫煅媈煊岜�~'煏鍢�'焬Q�'��'у'熺�'炽爎"���鑂爕夑鑃爤鍁��'爮牀ѷ'梽牕牗㹕�'栍漽犂	猫Q�'��'䣭Ѽ'猨献珏玪�'Q�'珉瑉��'�'�'昣㛅Q�'��'��'珷琕椃�'琹Q�'㻗��'瑠��'瑇珤瑶莹瑬㜰瑴鏱樬璂䥓�'Q�'��'��'孆�'Q�'瓈��'甎甞��'�'寗Q�'鎅畍畊畧畮��'㼄��'疎瑝疞疴瘂瘬癑癏癯癶�'皐臯㟸Q�'��'皡皥皷盌��'葢�'Q�'��'眞眦着撯��'睘�'瞯Q�'��'��'矴�'Q�'棊碯磇磓隥礮��'磗礴碱��'辸袄�'Q�'��'禆褀椂禀��'禝�'礼禩渪Q�'㺨秆��'秔����� �l�ħ<���(�����p��X�ؽT���L���L���L��������D����x��	�����"�$'�),�.1�36�8;�=@�BE�GJ�LO�QT�VY�[l������eh�jm�or�tw�y|�~�������������������������������������������������������(����|��d��l�	�������X���P�`��Y�W	�]�[�f�a�_���j�h�o�m���s�q�w�u����{�y��&����V�g	�Z�l�\�n�ph��	��^�t��x���	�X�i�r�`�v�z�|�}�~���@�	��k������.�x�	��p���	������������������	���������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�\�]�^�_�`�a�b�c�d�e���f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u	�[6���	�c��x���e��	��(�P� �8���@�	�J���K����>�X�	��������������������ƵƶƷƸƹƺƻƼƽƾ��|�	�����������������w�x¤�	�v��	����F�(�	ơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴ��@�	�������������������������������������������������������������������������ZD��	�b�c�d�e�f�g�h�i�p�o�n�m�l�k�j�v�y������������ʥD	������	������������������������������������N��	�������������������� 	��ҦT��P���t��� �������8����<�T�l����L`�h�@�B�C��	�������q�r�m�n�u�v�y�z�i�j�E�e�f����������������������V��	���������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f.X�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z	���������{�|�}�~ǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻ��dǼǽǾǿ����������������������������������������������������������������������������������������������������	������ڧP�@�A�B�C�D�F�I�J�M�O�P�Q�R�T�U�y	�H	��^��	�w�����	���������h���Y��	���]������$��	�����S������f�	�n����<	�����K�p�����������T	�������z������,��	�������F���~�h���h����������n��	�j�\���^�p�����f�����	�����H�E�o�\���0	�������������e������4�\	�E�}�X�d�V�M�[�����Y����������v��	�W�����������������E�S�x���Q������l	�k���{��,	�`�K����<�L	�K������~�l	�d�i�g�����h���	���z��	�BD��	�f�����R�����	�m�n�����oȭ		�p�d��
�(	�`	�t�����t�������xL�D		���Z���H�}�}����x		�J�������G�����Q�		�������x�����k��		������T�
	�I���o�����~��
	���y�����{دD
	�������������D�h
�L	�K�����S����\��
	�������������]�����
	�a���R����
	��"�	�Vd�$	����������������8	�������I���d	���������Y������������*��	�������I���r�k���Pl��	���e�D�n���c���S�����y�j�]�c�i���	�p�D�j	�����M��2�X	���������d�o��t�|	�������������f�n�������a�����]���~���i������������b	���c�G����
	���u���r��:�8
	��|�\
��	�Z�������m������p
P\H@��P����,�P���4L���(T��$Dd����� 	<	p	�	�	�	
<
`
�
�
�
0\���<Pt�
0
T
h
�
��
	���]����B��	���M�W�������������	��������Ƶ�	�������J�~�	�D�����@������J�,	�F�����N�s��X	�����Hζ|	�K�U�N���_�Y����	���`R���t	�U�D���V���	�Y�[���E���Cַ	�����P�(	����Z�D	����\	�g����޸p	���v�Q�s�@�O ��	�z�d������b��	�����	���~�n�p�����S�^���\	���z�����]�����d���b���d�L(�	�������T�|�U���z������������j�d	�v�p�K�������T�����Q���D���	���C�G��	�X���Y0�	�B��������r�$	������H��	�]���E��`	���y���L8��	�����Lz��	�M�z�W�����	�������	�R���g@����	������	����Ľ,	�����J�D	�����V���IH�`	�������d�U�������|�M�����	�H�I�}���P�G̾�	�����U��	���X��P�	���A�Z�\�� 	���\����Կ@	���`�E�`	�X�c�I����X�|	�k�n�O�F�����	���u�����y�p�x�����J	��	�o�j�_�A����`��O	�N�U���y���W����0	���Y�s�������`	�����I�C&��	�[������h��	�X�F���	�V�x�{����@�B	�C���E�V�T�W�U�F���O�M�����B�A�@�C�����������O���������X�����P�r���c��˱ƿ���Y���D�d�F�.��	�@�D�[�G�\�����E�G�F���������A�{���A�E�^�]���W�������Kp��������ܱܲ��F������	���G�H�_�����Q�����~���������E���`���o�������������F�G��ܳ�����H���k����@�����R����	�����T�S���������J�K�L�M�I�P�j�f�i�Q�a�h�N�O�H�e�g��������ɰ����ɺɮ��ɲ�g��������ɱ��ɵ��ɹɶ	ɳ��������ɫ������ɻɸɯ���sɬ���Nɴɷ�O�xɭ�f�B�����g���D���������[�����`�h6��	�d�����������G�]�n˽���C�������b�^�����Z���e�E�H���@�F���c�A�i�\���_�a��˿��������������˹��˸˼�������˳˵����x��˶������˻˴��˷��˺�o��	����������������˾˲������������P�W�V�J�f�������I�Q�]���������K��x�����Y�P�X��	�������T�������[�N�W�M�������U�R���Z�����O�\�S�L�H�����������p���n�����������������l����8��$Pt���� <Th����\��@Xx����$<X|���8P�Xt���(X������8���p0>���	���������Y���������������������[�������������������������������������������������������c�����@�����c�W	���\�b���U���Y�R���V�����g�Q���s�f�����X���S�O�]�P�N�Z�`�a�����[�^�M�_�����d���L�T�e��������������������^�W	���_���U�X���Y�V���]�S�R���������Q�\�Z�T���V������ܷ��ܽ�����ܺ��������ܿ���qܴ��ܵ��	ܾܼܸ��ܶ��ܻ��ܹ������������������������������r��������������������������������������������F�����g�������������������������i	�����������������v��w������u�h������x�_�������������l�k���I��h �a��	���S�R���������J�I�K�������Q�^�Y���Z���\�[�`�o�]���^�J�������q�K�������@�R�L�������Z����D!��	�����NȢ�T�U�A�j�`�_�����������U�R�S���a�������U�������V�[�Bɼ�}���h�G�M�N�~�k�������"	���������������������������h�������a���@����������L�Z���T���������z�B���Y�W�X�����ON��"�M�N�}�b	��������ɾ�Z���k�Fɿ�D�Eɽ�G�C�l���m�����n�P�O�����S�Q�R����������������������������|#	���c�����h���d�g�f�e�b���������������������������o�����������i�k�j�l����������������������������@$�A�B�����Z	�@�A�B�D�����C���������������������O�\�[�U�H����V�U�V�T�W�o�p�����������%���l���k	���i�j�������q���n���m���������������������������C�D��E������y���U���c���V����V��%	�L�]�^�I�q�����m�������c�b�P���_���C�l�`���K�J��X�h�����}�o���E�������������W�����������&���Q���d����	�����c�b�m���X���������n���R�����a�e�d�r���������W���g�f�L�M�s�Y���Z�������o���������@'	�D�����t�u�����������p�p�����������d�����e�����z���F�������F�����X�h�(	���������S�e�����������Y���������Z�����q������O�f�j�y�t�o�n�u�s�l�z�m�i�x�w�v�k�r�����q�{�p�Y^��(	�S�Y�U�[���X�N�Q�T�P�W�Z�O�R�V�\�������~�{���g�|�[�]�u�p�m��ʥ�}�_�aʤ�h�x�t�v�\�m�D�v�s���d�u�n�o�w�l�j�k�qʡ�^��|)�rʣ�f�c	�z�bʦ�e�i�����V�`ʢ�y�����O�����������P�y�����������I�K�M�������L�E�A���D�I�R������l*�C����	�F���H�����Q�M���S���J���G���G�B�@�����N�����H��K������x���t���}���r��C���O���Z�y���E�B�w������J�|�L��$�0+�s�~�{�@���F�G�z���v	�]�Q���u����D���N�D�����y����@��������������������B�C���A���C�f� ,	�����F�����B����@�Gԡ���E�D������X��������W���A���A���w����ԧ�����|��Ԣ���v�{�z����ԥԨ�s�������,ԩ��	�����~���BԦ����Ԫ�tԤ���u�x�}�������������������y����ԣ���N���������j�q�r�j�������u���x���-���q������	�F���n�������v���{�o�F�f�s�m���y�������������z�l�r�t�h�w���g�G�������i���H���������p�S��������,�|.���~���������������������������������������������������������C��	�������������_�������R���������������U�Q���K�����Tn�\/���N�P	�S���������I�����L�����J�O���H�������M�R���������������G�M�G�D���G�S�T�J�B�L��R�O�F�I�H�H�C�E�K��P0�A����	�k������T�O�U�����N�_�P����@���E������B�����A�����������C�������D�@�Q���F�������j��������,1�{���������}���~	�����b����z���|�`��P�������^�������`�����V��������Q�l�~��A�Y�@�X�W�T�Z������4�2��������	�����m�o�n���������������I�}�|�_�^���]���[�yʩʨ�w�z�\ʧ�[�x�W�����T�e����v��2�Z�H�I�E�F	Ԭ����ԫ���|���������������I�H�G���k�g�Y�n�o�b�f���d�c���e�a���`�������������3�}ʪ�d�v	ʫ�`��ʭ�{ʮʬ�~�������|ʯ�������s�Y��[�Z�r�@�X�W��������������V����\�A������T4�	���U�������T���Z�g���X�^�U�Y�[�]�W�}�V�Q�R���������S�\���������o�P�S�R�W�N���Q�P�A�T<�5	�X�G�J�J�O�U���I�J��Ժ�V�M�H�L��Ա���B�����ԯԽ��Կ�g�����ԴԼ������ԾԹԲئ԰��Է����ԭ��Ե��~��5Գ�����i������ԻԶ�K��Ը������	����Ԯ��ءتة��آ�����}ؤ��ب�lأإ�}��زرخ�������Kث����ح�~ذد��س��ج���6��	�e�Nا�����������������������������������n���������������������T�������{���]���c���_�f�W�����\��7�U�[�d��	���Z�`�e�V���^�b�h�X�a�w���g���Y�����Y�K�W�V�M�R�N�Q�\�����[�o�J�P�Z�O���L�X�}�~�M���O�J���LD�\8	���N���P���I�K�������x�������������S�R���r��a�b�q�c�B�[�������h�����\�����_�����t�����i�S��49	���Z�]��ʰ�^���B�`�Y�L�B����i�~�p�g�h�]�h�{���������j�������[�����q���_�`�i�j�������9ʱ	�a�C�_�`�^�Z���������a�b���M�N�O����ش�����������j�]��������k���������l�o�����n����
��:���q�p�m�k��	�L����ʶʹʸ�����R��ʵʳ����������ʴʻʷ������ʲʺ�����g�o���O�H�p�S�D�K�t���f�E�d�L�P�c��L�l;�Q�J	�M���r�i�T�R���n�l�I�k�G�F�j�h�q�m�e�N�������o���g�c�s�b���l�������p���w�V�v�d�T���f�m�q�u�r�k�n�U���h���j�i�t����H<�e���~��	�\�b�B�[���`�P���U�_�\�a�Q�[���T�R�c�S�W���X���Z�Q�Y���\���]�^�d�����������@�L����@=�����������k�C�������D	�������������x�����������B�������������O�A�����������q�����e�����[���P�@ػ��ظ��ؽ�����B�>	�@�M�����r�������������G���C��ض��������A�D����غط�s��ع�oؾؼ�E����ؿ�ص���B�@�C��D�@��F���������T��>�A���A����	�������B����E�A���r���n�������z�p�v�k�y�x�|�u���t���w�m���{���o�r�w�q�l���x�s�U�a�X�W�Z�\���_�V�r�T���?	�]�[�Y�_�^�c�^�`�b���`�W�K�V�U���X�Q�R�Z�S���\���[�T�����������Y���u���������������T�������@�\��	�]�g�C�����������������T�l�m�n�������r�s���������s�U�u�t�V�a�����]�e�����E�G���F�H�����}���������^�p��A���r�y���s�v	�t�u�w����ʼ���gʽ�W�X���v�x�z�w�{�y���b�c�����������f�w�}�h�g�c�_�`�b�d�a�s�f�e�J\�lB�����I�k�H�G�K�F	�����I�����K���H�J�����H���I�J�m�����~����������������f���g�e�d�]���������d�_�o�x�u��8C	���i�g���N�M�L�L�M�������p�\���t�������y�|�]�L�K���q������ʾʿ�����N�L���r�����u��������D����	�Y�~���Z�}�������x�������j�h�D�k�i�j�^���P�Q���O����h�i�a�����������K���s�w�v���z��������"��D	�������������������������������d���h�M�b�]���e�c�\�i�l�g�`���f���a�d�[�_�k�����^�j������d��E	���hΫΤΪΣΥ�}�{άΩ�y�X��ΧΨ��Φ�|�z��΢�~Ρέ�s�o���n�l�k�n���p�o�s�H�q�pή�r�m�t�l�m��\F�q�r	�S�R����T����X�A�Z���V�^���[��U����C��W�B�\���]��Y�u�D�x�@�������Q�����������������`���� G��������	�����R�a���O���O���P�������b�����@�S�V�N�P�U�T�C���R�D���M�Q�������������*��G���	��������������Q�e�g�k�h�c�b�l�j�j�m�d�i�k�f�e�a�f�`�e���^�h�d�i�c�_�g�j�b�X�����f������l��H���T�r�	�D�E�`���������r�q�����������t�{�������_�u���������t�W�v�w�x������ί�S�y�]���I	�����x�|�������������u�n�����m���o��������γΰαβδ���t�s�v�u���b�F�a�c�`�U�E��@J�V���i�W���T	�O�Z�\�E�[�Y�X������������q�o�N�m�p�n�l���m�k�l�n�����������n��z���~���}���F���������X��2��J�y	�z�����e�����������������z�������{��θ����ηιζκ���y�u�w�w�x�x�vε�G�J�K�H�g�f�d�e�I�j�ht��K	�Z�[�\�]�_�a�H�G�Y�`�^�S���������������p�s��r�t�q�t�u�o�s�s�q�p�r�o�f�F�G�����U�������Y�@���A�C�{�����L	��������λ�����|�a�F�b���I�}�����������������q�r�s�k�����p����μ�z�z�y�i�L�j�M�L���]��|M�b	�����u�v���t�����s�������tν�k���J�z�U�����Q�����{�m�C�n�l�^����v�T�L���������������w�v��:�4N�����u�l	��ξ�������������}�|�{�O�o�r�p�N�u�q�P�t�s�a���W�a�_�`��K�d�L�c�p�w�x��w���Q���u�����@|�O�H�I�|������	�{�������������������������n���x�����������y�����������������������������������O���` <!"�"t#8$%�%x&8'(�(t)d*(+,�,�-t.T/H0$12�2�3L45�5�6�7T8,9�9�:d;@<8=�=�>�?�@�AdB0CD�D�ETFG�G�H�I8J�J�K�LtM,N�N�O�P.�P��	̢̯�~̮̩����̪̭��̬������̣�|̥��̰��̦����̨�������{����������̧�z̫���a�}̡̤��ο��f��Q��ѡ������������	��������������������~�}���|���������������~���������������������z���k�vB�hRѤѦ	Ѩ�����SѬѣ�x�Q����Ѯ�Rѥ��ѩ��ѫ��Ѫѭѧ�k���yѢ�w���h�z�U�^�d�m�|���e�`����V�����~�T�b��(S�e�I	�c��������]��a�{��d��Y�b�W�X���q���[���_���\�d���f�c����Z�}���a���k�o�@�Q�m�D�q�e�F�S�i�l�G�[�H�N���S�s�T	�J�O�C�^���U�r�A�P�@�]�p�N�M�t�E��j�B�K���M�R�g�L�P�M�h�\���p�h���l�n�~�k�[�j�_���r�Z�@��T�q���v	�X�i�m���O�f�g�A�W�Y�V�o���������}���G�n�F�����|���E�����C�D�t����z�n�������{�t�����������H�y�B�z�����q��J��U���y�~�y	�|�~���x�������������P�x�y�x������v���}�����w������������|�{����z�����u��v�~��������V�t�|����	�y�{�����������}���w�����������������y�V�������������������������g�j�i�h�a�J�b�A�������t��lW����	���������|��������������̱����ѯ�����u�r�`�a�t�v�u�����I���y��������W�������v��̲�����<X��������	Ѱ�����v�Q�����~���}�����������������������������������Z��������������������������������R�Y����������������������	�������z�����������������E���u��̷̾����̳̺̼̿��̴̻��̸���̽����̶�����Y	�����F������������̹������������̵�����������������������Q�{���A�����@����ѱ���C�������������������B�����Z�����E��	����������������Ѳ�D���������|��Ѿ����Ѵ���������f����[ѷ����Ѻ���}ѽ�����|[��ѿ��ѸѵѶ��������Ѽѻ������������	����ѳ��������|�g�����������y�u�rզ�����w����ա�������{�j��Z�0\��գ�i����բ	�s�����h���xե�q���tդ���R���o�������x�n�l�~�������w�|�����������p���m�z�v�T�S�L�k�d��]�z���j�Y�g�w�}�k�n�|�\�m�l�~�U�y�������i	�_���p�h�q�����f�e���c�]������ѹ�V�Jݷ�W�{���y�����X�o�x�`�[���a�^�������K�M���]	�p���|ݱݶݪ�lݻ�i�z�{�b�kݤ�n�oݥݲݸ�j�dݣ�}ݺݨݩ�~ݴݫݵݭ�e���h�fݹݰݬ��ݡ�Sݯ�mݧ��ݦ�����g�c�� ��^ݳݮ	ݢ���������Q�����L�K�������������O���b�����R��������T�������������������N���P�U������b��_	����J�������[����M���������������Z��������M������������������������x�������������l`�����������	����������������E�����������V�����������������������������������Y��X�^���\�]�����Z����8a�k��	�����[�B�E�C�F�D�G�l�C���N�d�M�L�K�c�e�������������������u���������������������r������������������F(�b	�����G��������������է�������������v�����������u�x���s�w�t���q��ݼ�V����������������j��b���������H���������g	�~�y����ݽ���������������z�{�r��W������������H���|���s��������_���������I�������c	����������������ը�����}���~ݾ���Y�X�����J�I�O���^�J��������������������������������������d��	�����������@������������������������������������P�M�����c�S�K���N�Q���L��O���R������������0�`e	�������������q���������d����������լ��իխ��������ժծ����թ������٧��٢������٥٨����������٦��٣١�v��r�0f٤	�y�bݿ�v�w�u������{������������x�t�z���Y�\����Z�R�[�������S�����������M�����������������r��g�	�������������P����������������`�n�K�m�Q�R�f���P�����������������������T�������������g��٩���|��	�������B���A�~��������������կ�R�����������z�����a�g������������������������������������8��h	�P�����C���G�B�E���������@�A���A�@�F���D�������������W�����C�u�M�N�F�X�H���S���I���������V���Q�Oz��i	�������������J�P�D���������R�����U���E�L�����T�G�K���Y���M�[�\�i�^�V�L�b�J�[�E�e�R��A�}��`j�D��Q�a�`�F�X	��_�`�c�Z�K�S�f�Y�a�m�V�X�G���C�j�c�]�@�l�g�I�k�P�H�d�\�T�^�b�G�Z�Y�O�_�U�W��h���]�N�M�B�P�^�W�h�U�� k�����}���i	�O�V���������������������������������������������������������������������������D@�l���������������@��������������������	�����J�����j��մյչ����վս�����հ�������������l��������������ձ�~��������	�ղ����������������ճ����������պ���|����ռ��շջ��ն������տ����������J���m	�E����������������ٽ����������٫����ٳ������٭��������ٻ��ٶ��������ٰٵٯ������ٱ��ٺ����ٷٴ�������������dn�H�G���j٬����ټپ������٪����ٲٹ���ٸ����	������������ٮ���������������Q����������������H�Ho��������������	������������������������ո���������������������N�����������������������~����ٿ�����D������������������p��	�����������J�H�^�F�X�}�_�B�]�R�G�U�d�]�[���@�Z�F�o�Q�a�m�I�^�K�Y�g�D�k�a�M�C����W�h�`��e�S�f�E�P�L�N��q���`�_�n�O	�b��T�c�l�j�A�V�i���b�R�����\�A�������������L�����������������������W��������������q�����������������������B�l��	�����������������������X�����������������������^�{�������������������������P��r����	�����Z��������������������������������[���������������������^�����������������������������E���s������A���H	�����I����p���D�J����@�������G����\����������C��F�e�B���c���h�i�����b���������f�����e������\t	�g�d�������_�����Q�N�W�V�T�O�r���c�P�q���S�p�X�R�M���o�L�V�U�U�h�Y�Z�T�X�S�����W�������Hu��	�������������v�������������V���������b�������Y���d����������e��������������������X�v	���������p�c�e�q�d�������������������K�����j�Y�w�������B�Z�[�n������f�����k���������\���v�����e�o�f	�p�����������������������������f�g�h�����������������L���l�Z���_�q�g�������������w����	�i�j���������������`���C�H�r�����h�s�i�����q���j�o�B�A���C�@���@�A���������A�B�@�������k��Px�����������	���M���[���������]�a�~����I�J�^�����t�k�l�����D���������B�����������r����ɡ�r������ɤ����ɣ`�$y�����Dɢ	������@������������������v������E�������[�Y�L�Q�S�L�M�U�b�R�O�Q�V�Z�X���Z�K�x�M�\�T�W����z�E�G�^�U�N�J�Y�V�H�I�C�O�P�[�]�P�N	�S���\�W�R�]�F�T�K�X�D�v�����j�z��q���K�b���e�B����m�o��v�h�f�g�u���z�G�p���n�s��J	�u�y���c�I�B�M��O�@�l���k�}�r���u�x�|�A�F�s�~�w�i�_�d��`�N����������{���t��a���L��&��{�|ϡ��Ϥ�w����ϧϪϬ�t�v�{�I��ϥϭ�{�s	�d�~Ϣ�x�z���}�}�pϨϫ�O�z�����m���x��ϩ�o���^�H�|�w�v�n����ϣ�����y���q�����rh��|Ϧ�y�~	�k���L���C�����U�[�W�J�M�F�G�J���V�_�E���@�N�B�O�Y�����D�h�H�����H�E�f�Z�g�a�S���}�b���\�e�c�I�T�����A�G�`�F�Q�C�Z�i�P�K���K�����X�]	���D�e�����R�P���G�����[���U����G�D����g��L~��	��d�X�c�N�����O�I�E��@�Q�Y�B������D�^�F�\�������S�����H���F�J���h�b���_�]�f��a�R��`�A�E��W���V�T�L�K���C�A.���	����J�M�M�������A�Z������������I���������M�D��������������J�C������U�V���H�����������p�����	���D��������������B������S�K���Q�������~�W���A����G�E�B���C�O�L�T���@�F�G�����F�E������P�N�R����Ԁ	�����@���a�`�F���_�I�J���h���^���C�����R�H�K�c���j�b���W�������i���U�L�Y�e���h���T���M�������P�Z�d�����G�Q���[�����N���E�S�g�����V�l�X�f���O�������D	�]�����d�\�G����������}����n���w�m����q����s���u��6����S���}�o��������u�~�E�����|	�|�v�t�����D�z�w�x����z��~�����p��y�x�����{��t��������s�����r�����{��P�y��x�`���	����v�D�N���M�Y���K���O���F�����R�������T�C�^�����W�[�`�U�I���������L����H�_�������a���V��\��\������J	���E������A���Z�B�@���X��Q�P�]�G���������I���@���A��H�C��O��B�����D�F���E�D�J���G��F������������0��E�B���@��	������A�����N�C������Q�����������S�Y�W�������Z�R���V�U�[�������T���������X�P������q����o��>��`R S�S�T�U�VdW4X�X�Y�Zt[(\�\�]�^�_d`0ab�b�c�dXe(fg�g�h�iXjkl�l�m\n@op�p�q�r�sTt@u�u�v�wHxyz�z�{�|�}D~�̀��|�X�T�(���.������	������p���m��n�������s�r���x�_�e�y�\�v�s�g�w���t�^�a�b�c�f��]�u�d�h�`���]�j�`�k�h�_�\�^�b�e�d�g�[�i�c����f�i�a��������	�����������g���x�����������y�������������������W�e���l�������������������A�^���_�G�b���_�`�a�������	���X�Z�U�R�T�����c�����V���S�P���W�Q���Yϯ�pϳ�����p�o��϶����������ϲϱ��ϴϵϮ���������l��ϰ�܉�^	���w�x�y�P�L�n���v�{�Q���l�r�k�u�����q�M�O�z�j�m�s���t�|�p�N�m�N�T�P�L���X�J�W�i�H�[�R�l���SF����V	�Z�O�F�T�j�k�Y�M�I�[�Q�U�K�H�I�e�O�c�Y�b�X�L�`�^�_�J�c�������\�Z�K�]�a�p�����M�d�Q�C��t��Z�p�w�yޡ�����k	�����z��ޢ�����}���m�~�l�����x��ޣ���q���|�o�v�r�n�������������u�~���N�{���s���������t�����������0�����	��������������W���Q���������I���g�d�p�j�l���f�n�v���m�k�q���h�o�����c�e���b�r���i���J�Q���U�S�K�I� ��L�M�H�U�V�G�V�Q�O�L�P�N	�R�R�M�S�N�O�P�K�T�S�W�X�T�������\�b�`�������^���������a�]�_�����I�w��t�u��v�N������l�	�m�z�k���j�i�{�����l�j�k�A���������������������D�_�����y�����������G���������R�����n���b����HϷ�}	��������ϸϹ�f�Pޤ�U�����K���L�|���g�������B���e�d�c�`�x�����[ϺϽ��ϻ��ϼ��Ңҡ�~�S�]�^�o�\�_�����R�p�Q	�Q�k�j�V�h�i�lަޥީ�aިާ�����W�������s�t���Y�Z�f�r�}�q�p�n�o���l��������ɥ��ɦ�i�C�D�f�b�a������e�g�c�f�g�d	�_Ͼ�]�d�������e�a�b�\���^���c�`�������I��Ͽ��������Ҩҥҧ�X�W�UҤҩ�T�VҦ�gV�d�ңҪ�L	�e�b�f�e�n�y�h���c�m�t�s�a�d�u�r�q�`�i�p�w�T�v�s�X�V�u�S�e�u�Y�o�q�t�r�U�x�S������ޭެު������,�ޮ��ޫ������	��ްޯ�������������v���u�~�}�{�z�w�x�y�|��_�\�]�W�[�a�`�^�d�e���J���c���y��x�~á�m�n�m��������z�����������Y�v�j��ɧ����	�E���l�j�k�h�h�i�����m�����k�g�j�f���i�������[���l�h�����������������S��ү��������	���������������^�����������Z��ҴҫҶ��ҮҹҺҬҸҵҳҷ�_�]���\ұ�tҭ�sҰһҲ�^���Z�\�F�d�x�m�k�h�l�N�s�e�t�p�{�u^����r�o�Z�y�n�w�z�q�y�[�x�w�v�|	�������i�~�E��ڡ�`��ڧ����کڢ�Zڦڥ�[�a�bڨ�X�}�{ڣ�z�_�|ڤڪ�Y�^�\�]�m���l�W�k������޷��޻��ޱ��޼�s�n�_޲޳��޽޺޸޹޵޴��޾����޶	���������������q�x�����������z�������w���������������y���u��]���@�b�����A��|��	���������D���i�f�e�g�f�Z���c���X�y�\�[�d�h�Y�q�m���z�����j�h�k�n���l�g�^�B�E�u�@���o�Fâ�D�{$����A�C�G�v	�t����ã�s�j�n�����������������������nҼҽ�}޿�]ä�{�������o�`�������M��Ҿҿ�~����ګ����f�����	�����������i�^�_���r�o�p�q�I�H�|�w��������������������c�d�����F�j�i����ڬ�����������m�k�l�n�m�{���r�p��T��q	�������������������������`�v�d�c��b�a���x���{�z�������f�eڮ����ڭ������������������B��8��j	�q�sæå�|���s�������������o�p�t�������������������������\�h�i�������n�l�����k�j�e��,��������m�D���f	�g����֢֡���|�~֤֣�}����ڶ�k�jڰ�h��ڳ�lڴ�mڱ�g�iڵڲگ������������������������������������n�����������	�����������������������������������E�C�H�I��F��G����D���l�k�s�m�r�o�`�q�a�b���p�n������	���t���w�u�v���������M��¡�N���}�O�~�L�P�Jç�xè�o�K�p�Y�\�����~���}�������w�������������n�o�����G��l�	�q�m��������֦���o��֥��ڸ�qڷ�p���J�������x���Q�q�p�����u�p�r�������K�t�R�r��4�H�	���������������q���r�s��֧�����kڹ���s�����������L�d�u�c�y���S�s���n�x�w���v���y��������������v���	���������������������������������������������u�v������ְ�����w�t��ֲ֪֭֮֩֫֬������֨��ֱ��֯����ȟ��	��ڼھںڻڿ���ڽ��t�����������������C���������F���D�����E���A���B�������������@�O��������������������������	�N���Q�O��M��P���}����~�v�z�y�w�f�g�e�x�{�|�h�@����{���A������|����z�~�}���U¤¥¢��£<�l�	�T���{��é�y�z���t�w�u�v��������������f�����n�������o���������x���u�G�B��|�x����͡�z�|�~�}�{����~�P�	���������L�������������������������|��������������ֹ�z�����������������y�������}���~�{���O����$�	�P����ֺ��ֳֵַ��ֶָ��ֻ��ִ�F�����v���������������������w�����x�����������N���Q������	�������������M�L���H���O�P�������J�K����������������������������������I���������������T��X�VD���	�������S�������U�R��������Y���������W�����j���������Y��l�i���k����F���V���E���C��D�����V��x�	�G������Z�W¦�[�]�\�X�Y�ê�~��}���z�}�y�q�{�|�~�r�t�s�����������������������������r��ͣ��`�����͢	���������������������������������h���������������������ּ��ֽ��־ֿ������i��������R������S
�,����T���r	�����A���������C�A�B�����@��B��������������������m�H����I��_�^§�ë�š������ɨ�������V���rL���q�p	��ͤ�����������������������������������������������������������������������������}	�������|�D�z���{���y�A����Z�����X�@�W�\�[�Y��I�H�c�D�������G�F�����^�����_�[�]���Z�����\	����j�p���I�E�r�q�n�o���J�����`ª¨©�L��íì������������H�sͥ����ͦ�M�@���|����	�s����������������G�������������~���D�]�^�C�B�J�����K�L�a�`�P������������s�O�I��KT�@����Q�R«¬	�u���������L�A������V�M���W���������������G���X�E���M���v�����ͧ������������B�C	�@�B���D�G�E�\�S�F�C����H�A���������������V�������������O���^���������������������������j����Ь��	�d�����������������������������������]�����a�P�P�S�G�L�F�c�J�Q�H�b�b�O�N�K�M�I���R�_�Q�R���	�]���X���N�P���U�T�W���R�Q�h�����S���Y�[�V�O���i���a�Y�\���b�����c���e����������\�d��`�h	�d���f�g�v�����j���]�f�����t��x�������Q�y����w��{���z��������������O����n��d���N�����������	����L�������P�M�����u�S���c�T�a�g°�e�d²�j±�k�h®�i�b¯­��f�l��pòð���ñîï���ó	�a�x�r������w�y���k�����@������������ţŢ�����������������X���Y�m���~���{ͨ�E�F�D�W�����_�G"����H�I	�s�I�O�b�M���K�L�N���J�������������X�������������u�����r���V�d�T�e�U�f�Z���a�^�`�����_d���	�������y���x�k�������a�����������|�}���W���S�X�T�V�R�U�z³�����\��z�{�A���|�@�}���������t��ͩ����T����L���J���������K�������Z���S�Y���R�X�V�����U���T���������Q�P�W������	��������������������������������������������(�����������������	���������������������B�l��������������������������������������h�]�_�a�e�[*���Y�j	�`�d�\�X�W���v�b�Z�^�k�i�f�g�c�g�r�B���j�x�t���x���e�}�u�b�U�w�f�������v�p�������������c���q�����s������l���h�g�d	�l�i�m���y���n�o���k�`�b�����a���p�y�u�����r�v���l���t���������s�w���q���n�����z�r�m�������{���o�c����е	���������~���������������������������������������������������������_���Y�i���a�]���d�g���\���e�������`�Z�h�������c���^���b�[���f��	���n�t¹�w´µ�o�v�qº·���m¶�s�u¸�r�p�v���÷øô��õ�����ú�����ö���~�}���2�����ġ	�������������������B�������������@�B���A�l�p�n�o�pt���	�q�r�s���	�t���u���o�������� �����	���j����»����Ģ�����C��I�������u�M�`�[�_�]���^�\����@�i�j�n�o�h�k�g�m�@���p�z�|���}����������������:�T�	�ù��D����������O�����N�b�������a������������B�C�A���s�m�l�n�r�q�����d�~�������y�e�xû�ýü��������P��|�<��e���d�c	���������������������D�o�p�N�~�C�A�B�{�|�}���������������������k����z�{¼��½�l�����$��ԉ��l�(��������\�$���ؓ��������x�L�0������d�@������d�H�����p�X�$�����t�8��Ȭ��\�������L� ���ȵ����|����L�4���.�ģ�������������Q��	�����A�R�S�@�B���T���f�������A�����@��h�q��i�����������k�����l���sͪ�C�U�h�������g����	�C���B�D���F�G�E���m�t�u�E�����D�������������p�o�m�n�q�|¿¾��ťŤ��B�����	��w���v�F��ɩ����ͫ�v�w�w�t�v�y�u�{�z�x�x������ͭ����������Ͱͬ�����|��ͯ�]�qͮ����������	�[�G�H�]�e�W�Z�c�a�I�g�L�d�\�Y�I�b�D�e�V�_�F�K�`�O�M�X�J�^�N�E�f�r�\���������j�����l�����k�i�n�����H�\��o�m����	���������f���t�v�w�y�N�����E�G���H�P�L�J�M�Q�����F�O���\���K�I�������_�c���Q�O���4�	�g�Jߡ���N���K�����P���M�G���L�������|�}�~�w�u�{�sߢ�x�r�{���}�v�~���[�|�~�y�x�y�}���|�t�z�������LJ���H	�M������J��K����I���A�D���C���������@����B��������������������������������a�����t�����x�z�w����v���u�s�����r�����y��	������}�~���þ�Ĥ����EŦ�C�D���������R�N�{���������S�������P���T�U�V�O�������h������p��	�W���P���|����������R���Q��E��������ߣ�R��ͱ�i�Q�r�w�������������q�W�T�V�������S���U�X�Y���Z���ߦ	ߧߥߨ��ߤ�S�J�F�I�K�H�G��������������������k�����lĥ���F�������}�}���X�[���A�J�J�v�H�K�M���NR�`��L	ˢˣ�{��ˡ�����|�z�y�}�~�~�jͶ��͵ͷ��ͼ��Ͳ�����������͹Ϳ���ʹ����ͺ��������;͸��������ͽ��ͻ��������<�ͳ	�����R���w�A�b�\�d�a�q�t�]���k�V�`�c�eТ�w�I�UС�Y�W�R�o�~�s�vХ�M�f�}�^�xФ�u�y�|�����mУ�{���T�l��� ��p�_�Z�S�X�T�g�nӥ�[	�h�z�AӨ���J�v�Bӣ�}�QӲӪ�~ө�x�|ӵ��ӭӤ��ӳ�tӬ�����s������ӫ�����r�\Ӧ�F�z������{ӡ���uӯ	ӮӶ����ӴӰӧӢ�����w��ӱ���y�����U���x�^�`�e�y�����]�����h�o�uZ���	�b�i�S�@�w�r�����n�j�\���a�Y�o�����f�c���s���d�z�l�c�k�������Z�_�p�v�A�[�g�m���V�x�q�t�v�����l��x��`���}۪ۧ���hۣ�i�w���s�����t�]	ۤ�X��ۡ�u۬�p��ۯ���n�z�����rۭ�k�d�o�c�a��ۥ�jۨ�H۩���������~���v�f���^ۢ۫�e��۰�q�D�	�m�������|���x�����������y�g�{�bۦ�e�l��ۮ�b���g�_�u�~�����U������ߵ�����������߿�������������ߪ �@�߲	�����������������f����߶����߱���n���E߫���`߹߸����߼߾������������߰��ߴ�����������������b�L߻ߺ��߬����߭��߷����b���_	����߳��߯��߮�`���m�q��������X����[��Y�������������������������Z����]����a�����U����^��	�W���V���T�c�\��������b���_�����������m�����r���s�t�g�f�b�����v�uߩ�_�c�]�p�a���w�Z�X�d�n�i������O	�m�B������߽�[�R�U�{�\�S�Q�N�����e�����`�h���x�|���W�k�o�T�y�����L���r�V�j�P�^�Y�����l�}�z�q���w���M���I(����@�C�����E��A�G�������@�D��L	�F����U�O��F����\�J�T�����Q��D�H�B�V�S�P��������W���M�����K�{�N�S�@�E�R�D��A��j������M�O�����Q�I���P�B����R�J�G��U��	�v����H���T�K������L��V��C�N����������~����������������������������������	����������������������������������������������ÿ����������������������ħĩĦ�������������	��ĪĬ�ĭī�����a�pĨ���h�~�����������������������������������J����P���K�I�G�H�L��������������0�t���	�����V�E�F�G�����O���hӸӷ�@�B�|�{�����������~�X�Z�Y���W�������������������ЩЧЦ�i�k�jШ��r�\�	���ӿ�A���FӼ����ӽ���C����ӻ��������H��Ӿ�y��ӹ�G�D����Ӻ�E�B�I�Lץ�K��ר׫�H�F�~שקפ׬׭ׯװ�}��(��Eעס׮�Gף�I�Dצ�M	�Jת��ۿ۴����۽۱��۶��ۺ۸����۲۵��۳۾ۼ۷۹ۻ�������������������������������	���������������k����������������������������������������������d���z8���	�a�����k�g�_�e�`�o�������\�h�i�_�^�l�b�]�c�n�[�m�j�������f�������Y���]�Z�a�g�\���p���j�_�k�f�m�^�����`�n�X�lz��������d�c�h�[��	���b�i���e�����������C��������������o��������������������������������a�����������������������������^����	��������������������Įį���������B�E�A��C����D�Q�O���N�@�P�F�M�|���������������������Z�n��������x���Ъ����������	��G�����lЫ��ױ�N���������������j��������|Ь��ЮЭ�m�������I�����������J�N���M����@�l����K�L����	���Pײ�U���T���E��׸�R��׳�S׿׻׽׷׾�����O׺�R׹׵�׼״׶�Q�������������������������������D�������	���`�������������������������������������������t�B�A��v�@���n�p�����r�q����s���� ������o	�������������������������������������u�p�|���w�y�����q�u�x�����{�s�t�z�r�v���r�q���w�����s���t��	�u�x�����������������������v��������������������������������İ�����I��K��H�JŨ�Rŧ�������]�H�I�K�J�P��H�����n����	��������������W���V��������������C�F�E�D�������X�����������y�{�z��������ı����T�S����[��	�y��Я�o�����������C����A�@�B�����D���I�G�H�������}�|�}�����IJ�L�Uũ���L�x���	�q�rаб�p�T�R�Q�X�P�Y���V�S�W�U�O�_���Y���^�`�Z�[�����X�����]���\�D�F�����E���������I(�����	�����C���������������B�����@���G�������A�����H�����������������������������P�M�E�J���Q�����X�GP��	�O�K�N�L���F���L�x�{�N�����M�}�����O���K�����y���|�z�~���w���������J�������������������������������	������������������������������������������|��������~���������E����������������������������������������	�����������������������������������~������������������������K������������������������������t�����A��	�O�������������������@�B�����C������������ķ��������ĵ�����L��ĸĴ��Ķij��@�N�M�P�Q�A�V�[Xh�Ū���X���W�Z�Y	�C���B�@�A�����������@�M�N�g���m�������z�L�	�{���	�����D�D�����Z�a�T�S������������v�������b�������H���V�U�W�Q�R�����������������F�Eˤ�\�[�����������I	�Y�Z�X������������������������G�������s���t�]�^�������h�f�c�g�e�d���J�����L�Q���S�R�U�����O�K�M���T`���P�N��������	�������[�H�T���������S���U�������������������������������������N��������������d�����������������	��������H�I���J�����HĺĹ�R�����B�S�\ūŬ���E�B�������	���j�i�\�]���������в�v�u���_����������&����X��	���W���V�_�b�`�a�e�^�f�c�d���V���������������������@�L�N�K�M���T�o���w���������l���k��hh���������	��`����[�^���Y��l�]������������\�_��Z���h���o�n�����p���m���r�i�k���g�j�q���s�����[�a�Y�4��b���X�]�c�`�_�^	�W�\�Z��������A�C�@���E�B��F��D���������������������������Z�������������������������������	����J�����������������E�������A�@��C�����B������������D�R���O�S�����Q���������P���T���\.���ļľ	��Ľ������Ļ�C�E�V�D�U�aŭ�`Ů�^�]�b�c�F�_���������\�Q�P�O�p�������n���`�H�����I��������p����	�U�J�������y�x���c���a���b�������m�������n���������C�A�E�F�L�H�J���B��I���K�D�G��b�@��a�c���u����w�v�{��	�x�t�y�z�����|�g�f�d�e���������M�N�I�L�J�����������K�L�H�@�������G�M������������������������������������������F�G�H�����I	�����X�Y�W�V�Z���������������X�x�Y�W�F�dů�e�H�G�|�}�~6h�	�]���d�@�Z���P���O�����|�G���d�A�T�[�������������C�E�}˦x�	����������˥�������������`����������������жд�|г���~�{���}����е�z�j�����g�n�[�i�����l����������T�,��������X�4������p�<�8�������������l�T� �����H�����p�d�<��������p� �������l�`�D��������������`�,����������`����T�.\��h�e���k���m�f	�������p�z�v���y�~�w�|�r�o�q�}���u�x�t�y���{�s���M�e�O�g�i���N�f�j�b�h�G��O�~�h�	�P�E����J��C�B�U�M�L�K�I�N�}�D�F�H�����������������e�������R�C�A�S���D�B�Q�P���O�������E����������������>0�������������������	�������������U�o�R�S�Q�T˪˧ˬ˨����˩��˫�h���l��������������������имй��	�����jлнп��о����к����������q����p�r�������������������з�������l�V���W�T���n�S����\��	���[�\�Z�fŰ�������u�t�@�A����s�����������������_�a�]�`�o�^�p�n�s�U�T�S���q�s�u�����J�����t�r�����a�^�_�M�`�[�\�J	�K�]�L���������������������������������������O�P�N�p�R�����_���Q�^������Ŀ���c���]�H���I����F���C�]���q�q�o����	�V��������q�������B�^�x�v�z�D�y�w�I�C����[�����B����@����C������P�A�����m���l�l��j�b�q�e�o�v�n�y�s�u�c	�i�w�u�h�x�z�k���r�s�w�u���t�f�r�v���t�s�d�g�p���c�����������a����W�Y�e����Z�\�f�L��[�w	���d���b��^���c������`������M���X���g�]��������x���_���������������x������z�������	4��������r������@����~���	�����|���������y����{����w�v������}��R�����Z�U���g�P���J�O�V����N	��e�T�q�c�d�N��X�t�y�s���o�w�u�h�b�}�W�~�K�x	�m�k�f�A�n�{�j�z��@�S�[�v�|�r�l�Q�A����p�Y�i���B�C�Y���������D���D�A��	��C����Q��	�������B�@��������@������C�E���E�������������B��������A�������������D�����v������������	���U�E���E�K����������������������������	���������������������t�����������������E�����������_���������������L���������z��
����������F���y�l�`�Y��	�T�c�[���X�e�U���_�������a���W�f�X�]�b�������j�g�k�^�Z�h�j�\���G�������d�f���i�S�V�I�H�J��V
��s	�c���q�d�a���l���h���r�b�e���t�y�m�p�������i�d�������`���C�����o���k�u��g�n���z���j���B���f����@������
�����	�����D��H�����A��������C���������K����E�M�������������a�f�O�h�N�I���d�j�N�J�K�`�g�M�e�L�_�c�b�O�^�
���i	�@�Cű�m�p�l�n�o�i�j�g���k�hŲų�Q�K�M�����L�N���J�����N�C�����D�����S�R�T�_�U�^�V�r�u�t�h�s�R���r�p�q�w����������	������^x�	�����������	�S��	�t�����D�x��v��$���	���{���E�F���}�z�y���|�{�~�����{�����h���������������T���������������P���[���\�M�K���I�J�F�F�N�H�Lf��	�������������������G��n�l�m������w�x��E�G�F���P�m�l�k���V��	����ɪ�X���V�Y�Wˮ����˰��˯˭�����W���������������t�����@������	���������������������Y�����E�����F�~�|�}�������I���H�K���J�����������������G���},
�ܣ��	ܢ�������|�~ܡ�����������������j�k�����i���������������G�H�O�I�������o������A���G���Ln
�����ܤܦ��������ܥ�n�o�m���l��	����P�J���p�t��q���u��s�y�����B������ܨܧ�������s�p���r���q����
���	��R�]��^�_��`�Q�N�K�P�S�L�R�O�M������������f�w�v��x�~��}�z��{�|�H�I�����S�k�n���Q�R�oŴŵ�q�
X�[���E���G	�����F�W�������C�f�t�����Q�R���D���a����S�����Mܩ�Fܫܪ�Q�����u�v�������������48������������	�X�����c�b��d�V�U�T�T��P��A�@��������}���{�~�|�y�@�z���]��z���\�J�|�K�R���pv��ŷ�^Ŷ�O�P�H���v�i	���������������C�B�����������q�r���������W�D���������X�A���L�M�T���Q�������N����ܬ��	�z�|�������w�x�{�y���t��������g���W��e���[�����f�Y���Z�U�[�����Y�X�V�Z�W��	�E�J�F�I���^���H�G���D�B�E�C����F����@��A����Q�N�O�P�r�V���U���t�sŸ�j���I�`�X������<�	��ܭ������������h�����B��b�G��B���~H	�u�R�S�i��	�t�D�C�s�A�u�������`�������I���H�O�J������ܮ�K�����d���~��������}������	��	������������i���f�\��k�j���������l�g�a�_�i�^�]�`�\�K�^�]�_�N�L�M�R�K�Q�T�S�P�O���j�R�M��f��J�H�IX
�{��k�	�C���D�l�X�W�g�U�T�����Y�v�w�W�v�V�w���l�a�Y���m��D4	���P�U���j�����`�W�V���L�����l�������������������������������w����	���������o���������������n�q�s�����r�������t���p���m�o�����c�f�d�c�U�i�h�g�b�b�a�e�d�Z�R�^�[�]�\�Y�_�b�`�a�@�T	���X�c��������S��M��U����E�F������]��q�����m��`�^���]�c�a�s���\�Z�[���_���b�x�~�T�q�y�[��
<
�Z�}�|�Y�{�X�z	�}���~�{Ż�x�|�����y�zź�R���V�S�����m���J�v�j�W���k���������z����L,	���������������j���l�W�u�e�j���m�f�_�d�k����N�	�f�d�e���\����ż�������b�]����I�[���\�����������h�v�w�������^�n�q�p�o�g�h�f�e�\�<	�g�W�O���P��e�������G���r�g�i�h�`����������Ž�T�U�V�K�c�����x�i��^���a���J�{���r�d����A������������i�������z�y��	�i�����S�R�Q�h�^���]�����L���������������������t���|�����������{�}�x�v��w��T��s�u�y��	�t�r�u������m�`�|�j�{�z�~���j�m���l���t�o�s�q�p�n�k�C�B�D�A�u�g���������������X��	���������W�U�T���������J�������K���v���������������I�H�������������w�x�l�o�V�p�T	�o�m�s�q�k�v���j�q���r���n���u�c�t�g�������z�������`�V���������_��ſ���������������~���������p��	��������ž�Z�\�_�[�`���Y�W�����]�����X�^�����M�����������Z�\�[�y�P�x�w�z�s�t��������\���	���������}�����~����o��k������p��������l��m�n���z�{�~�|�v���y��}���E���F����w���^�	�}�������H�����Y���������������������Z�����[�M�x�����O���P���s�������N�������������������z���X�������{�����������L������	�}�{���������|�x���~���z���w���������y�������������w�����a�������b�������d��������������"8�����c������	���������������������������s�����������������������i�n�d�g���k�r���e�o�s�j�c�m�l�q�p���h�b�f�N�O�a��������d,����������������	�����]���^�}�`�_�b�a�|�{���������x�|�����}���(	���������P�Q�������T��������������G�����	�����Q�S�����p�R�m���������e�������c�����������������A����������T���������������J*������t����	������d�����H�u�����r���q��L�J�K�I���\�������������������f�����v�w���d�}�u��ܰ��������l�������	�x�R���e�~����������]�������g�����y����������A�����������^������������������|�{�z������M�������}�������f�������N������~��	�������������i���h�������������������i�j�����������������T�������S�g�j�i�h������	�s���e�����������������t����������C�m�t��������������ȡȣ���H2�	����������t(�������|�d�D�,�������������p�������l��xP0���x@	�	P
,�L4
$�4���L��P��P0$ �����x(.0	��bd<	�I�����C�H�����]�^�����A���D�����������������������G�F�������H�I�������������������������������������������������������@�����P	�F�G�������D���XP�H�X���P|�|:�	�q�u|�	�v�H����	�����|���	�N�K�z�H�G��B 	�E�S���, 	�����r�H 	�G����d 	���}����J� 	�����{�� 	���_�T������ �y	�t� 	�u��R� 	�I���|�c�`�m�!�b	���k�j�8!	�T�s����X!	�B�v�eZx!	�l��!	�n����������!	�����u �!	�@bd�!	�v���{b�!	�m�������B���\�"	�����������D"	�{��(h"	����j�"	����"	�P4�"	��Ҧ�"	����"	�F�c0�"	����r#	���#	�f�,#	�S�b�@#	����8X#	����zp#	����#	���@�b������#	�����������r@ �#	�^�������\��� �#	���C������������� $	�����|����!@$	�_�����Y�k������H!d$	�D�J�����!�$	�d���������������M���W�C�D�!�$	�����T��"�$	��P"%	�������c���e�o�~�C���",%	�����������f�p�u�����"d%	���]�H���@�����v��#�%	���������w�d�gX#�%	�K�S���J�������#�%	���_�#(&	�������X������$@&	�a���}����`$l&���$ @ P�\ x � � � � !0!P!p!�!�!�!�!�!"<"`"x"�"�"�"�"�"�"#$#8#P#h#�#�#�#�#$8$\$�$�$�$%$%\%�%�%�% &8&d&�&�$�&	�B�y�z�$|'	�����~�D���|�q��&%�'	�������N��h%�'���c	�I���n�������Z�{�|�%�'	�������%((	�A�r��.&D(��	��p&`(	�r�&x(	�s�&�(	�_��6'�(	������x'�(	�����'�(	�|�E�n�V���K�'�(	����>()	�������(,)	���@�����(H)	�N�h�l��)h)	���j�tF)�)	�����A�)�)	�����)�)	��*�)	����N*�)	���������**	���*$*	������+8*������	�G�������a���������ZV+T*	�������G�f�U�+�*	���C���������������+�*	�d�������N�D��,�*	�����i���K���|����������������^, +	���������������U�,l+�t	�����������l���c���,�+	���������`�X�v������$-�+	���J�I�x����f-,	�U�V�Q���������D�U�c���-4,	���k���Q�-p,�W	�x���P,.�,	�L��n.�,	�@���.�,	�A���a�.�,	��4/�,	���|v/-	�B�/(-	�C�/<-	�y���D<0P-	���{�n~0l-	���y�^�0�-	���S����1�-	��������D1�-	�t�����1�-	�E�G�1.	�P�H
2.	�[�/0.	����L2D.	�L�2\.�'�'�' (<(X(p(�(�(�(�(�()$)@)`)�)�)�)�)P��)�)*0*L*�*�*�*+d+�+�+,,,h,�,�,�,�,�,- -4-H-d-�-�-�-�-�-.(.<.T.h.�2p.	�K���i3\/	��T3x/	���s�3�/	�Y�/�/	�������3�/	���*�/	�B��4�/	��P"0	�N�&0	���_\4(0	���@0	�N�O�P�4T0	���P�4p0	�s������"5�0	�������Xd5�0	�^�Y�u�5�0	��"��0	���p�q�5�0	�w���m*61	�]��l601	���A�6H1	�k�����6`1	�}���M���Q27|1	�����1	�����h�mt7�1	�g��1	���7�1	���l�R�7�1	�p�2	����:8,2	����|8D2	�S�U���8\2��	�V9x2	��B9�2	���W���Y�9�2	�[���]�9�2	�O��:�2	�{�BJ:�2	�P���P�:3	�`�E�F���:,3	�b�{���`���c;L3	�i�G��R;t3	�|�e�f�;�3	�r�z���;�3	���h�����w�g<�3	�Y���3	����Z<4	�i���<4	���Q�<44	�_ =L4	�jb=`4	�k���=t4P�p/�/�/�/�/�/�/0 080L0h0�0�0�0�0�01(1@1X1t1�1�1�1�1�12$2<2T2p2�2�2�2�2�23$3D3l3�3�3�3�3�34,4D4X4l4�4�=�4	�lҦl5	�N���m�g��(>�5	������j>�5	��T3�5	�����>�5	�F��5	���������>6	������������0? 6	�����������w��r?H6	�����Z�?t6	�T���Q�������?�6	������8@�6��	���nz@�6	�pb=�6	���o���@�{�������@7��	�Y�@47	���@�_@AL7	���h7	�v���A|7	���G�t�A�7	��������B�7	�F�O�I�uHB�7�\	�Q�y�K�B�7��	�X�_���B8	���|�C����C08	���MPCT8	�[�z�������X�Cl8	��B9�8	�������C�8	��������D�8	�����8	��XD�8	���9	�i�R���D 9	��T3<9	�nT3P9	��T	d9	�|���|�g���Dx9	���N���t������E�9��	����`E�9	�{���S�������X�y�{�E�9	�����E:	�b�������������H��&F0:	�������K����hFd:	�@���^�_���J�p�F�:	�g���:	�����c�H�F�:������	�����~.G�:��	�C���������H��pG;x5�5�5�5�5�56@6l6�6�6�6�6P��6,7D7`7t7�7�7�7�78(8L8d8�8�8�8�8�89949H9\9p9�9�9�9:(:\:�:�:�:�:;<;�GD;	�����J���K���G<	��6H@<	���Z������xHT<	���Y���Hx<	���[�����H�<��	���F����������������>I�<	�m�|�a�����I�<	���`�R�I=	�OJ0=	�n�m�d�S���xFJD=	���]���Z�P�Jl=	�����b���O�J�=	���R��K�=	�����k����NK�=	�������k�K�=	�Q�q�������K>	���L�jL8>	���a��VLT>	���D�����Lp>	�i�b���L�>	���UM�>	�w^M�>	��P"�>	�����M�>	�����M?	��6H?	�}"�0?	�f�Y��$ND?	�XfN`?	��D�t?	���T�N�?	�tXD�?	�����t���������N�?�~��	�}�o�a�����R�X�h��,O�?�����I��	�M���I���q����nO@	�n�����C�Y���f�}�o�F�m�����|�����e�~�X�w���OX@	�������������m�F���F�[�����g�O�@	���������������b���k�����N���g4PA	�����`���u�����{���j�^����������vPPA	�~���h�����[�������]�V�b���O���P�A��	���_���e�L���P�A	�[fNB	����,B	�m��@B	��<QTB	����~QhB	���s�Q�B	�t��R�B	�K^M�B	�U�iDR�B	���R�B	�v�R�B	���h
SC	��LSC	���S0C	�������������SDC	�{XDlC8<L<p<�<�<�<=(=<=d=�=�=�=�=>0>L>h>�>�>�>�>P��>�>?(?<?X?l?�?�?�?�?@P@�@�@HA�A�AB$B8BLB`BxB�B�B�B�B�B�BC(C<CdCxCT�C	��4tD	��TT�D	���T�D	�E�T�D	������U�D	�J������\U�D	�����UE	�Z�RE	���&,E	�o���U@E	�_����"VXE	��������dVtE	�������V�E	�ST3�E	�������V�E	���I����������*W�E	�������ylWF	�{�~���W,F	�F���WHF	�p�`F	����2XtF	����tX�F	�@���W���X�F	���X�F	���C�D�O:Y�F	������|Y�F	�o���J�YG	���70G	����ZDG	�N4\G	��BZpG	�`"��G	���������Z�G	�Q�Z�G	��b=�G	�����d[�G	���a�dJ[�G	�[�����[H	���lR4H	�s���[LH�u�q	�`\dH	�j�LR\�H	�R�7�H	�����\�H	�TLS�H	��<Q�H	���C�������\�H	����]I	��T3(I	��d�<I	�b��Z]PI�D�D�DP��D�D�DE$E8EPElE�E�E�E�EF$F@FXFlF�F�F�F�F�FG(G<GTGhG|G�G�G�G�G�GH,HDH\HxH�H�H�H�H�HI I4IHI`I�]hI	�}���]DJ	���� ^\J	�����W�wb^tJ	�����^�J	�m���V�@�^�J	������(_�J	���T�J	��������j_�J	���RK	�G��0K	�������_DK	�I�_`K	���L0`tK	�����`�Kr`�K	���p�`�K	�C�G���T���`�K	�ITT�K	�^�X�K	�^�\�K8aL	����za,L	���_�L�aDL	�����V�a`L	��@b|L	�T�b�L	�^���h�b�L	��BZ�L	���S�L	���a�_c�L	�M�[�iHcM	�cbd M	�����g�i�c4M	���TM	�e���chM	�T�ld�M	�n�]�sPd�M	�j�m���d�M	�M�������^���d�M	�L�u�����t�Ee�M	���j�N�x�UXe N��	�A�eDN	�\�*\N����	�M�f�e�epN�I���B	�z�����[f�N�M	���a`f�N	�K�������@�F�g�Z���f�N	�A���fO	�������L���U���o�}&g(O	���o����hg\O��	�V�����g|O	�^�l�����S���k�g�O	�����S�y.h�O	�o���x�B�Z�����aph�O	�OB9P	�s���h,P	�������hDP	�C��~Q`PTJlJ�JP��J�J�J�JK(K<KXKlK�K�K�K�K�KL$L<LXLtL�L�L�L�L�L�LM,MLM`MxM�M�M�M�MN<NTNhN�N�N�NO OTOtO�O�O�OP$P<PXPpP6ixP	��LShQ	���K�Jxi|Q	���������i�Q	���T�\�i�Q	�E�F�����`>j�Q	�H�G���j�Q	���R	�qJ(R	�E�<R��	�������p�jPR	��B9tR	�RTT�R	��T3�R	�Pk�R	�}��R	���R�R	����Fk�R	��b=S	��T	S	�����i���k,S	Ȥ�����A�kLS	������llS	��"��S	���L�`Nl�S	���X�l�S	�����l�S	��BZ�S	����m�S	����VmT	�qP",T	���m@T	�����mTT	��D�lT	����n�T	������^n�T	�p���s�n�T	�[���d�n�T	��b=�T	�h����������$oU	�A��fo(U	�l���o@U	��TTXU	�Z4lU	�H^��U	�JZc�U	�l =�U	�������n�o�U	�@������,p�U	���S�U	�j��npV	����(V	�|�<VtQ�Q�Q�Q�QRP� R4RHRlR�R�R�R�R�R�R�RS$SDSdS�S�S�S�S�S�ST$T8TLTdTxT�T�T�T�T�T U8UPUdUxU�U�U�U�U�UV V4VHV�pPV	�A���A�����p0W	��P"TW	�����b�N4qhW	���f��vq�W	�����W	���S���q�W	�@�A�E�q�W	�s���B<r�W	�a��~rX	��J$X	�����r8X	�C���D��sPX	�N����DspX	�E�s�X	�OTT�X	�G�����s�X	��XD�X	�^�c�W
t�X	�f4Y	����LtY�b	�g�����t,Y	�H���O�]�tLY	���k��lY	�\�iu�Y	�W�UTu�Y	���s�u�Y	�����K�������C���u�Y	�F�`�S���N�@v�Y��	�B�V�e�l�J�P�R���Z�I�G\v$Z	���x���`�N�V�vdZ	���a���]�����O�����@�v�Z	���}��������"w�Z��	�{���{�w���C�����������e��dw�Z	�}�e�����������H�w4[	�S�����]�_�_�n�]���wd[	���������i*x�[	���U�T�A�����z���G����������lx�[	���V�����f�G���������x\	�O���M�x<\	��b=X\	�N���\l\	������2y�\	����ty�\	�����r�z�y�\	�����y�\	�XZc�\LW`W�W�W�W�W�WP�XX0XHXhX�X�X�X�X�X�XY$YDYdY|Y�Y�Y�Y�YZ\Z�Z�Z�Z,[\[�[�[�[4\P\d\|\�\�\�\�\�\:z]	�F��]	�r���B�����Y|z�]�e	�����Y���z^	���[�\{,^	�~���^��B{H^	�`���{h^	�����{�^	��������|�^	��P"�^	�F�K�X�L�cJ|�^	���e�f�|�^	�Z�d�l�|_	���g}(_	�p"�@_	���RT_	�P6Hh_	���m|_	�h���t��R}�_	���Q���}�_	�w�d�v�i���j�}�_	�N�T�_	�k��~`	�l�2 `	�e�4`	�]�mZ~H`	�Z�``	�BҦt`	����`	�j�_�`	�n���~�`	���o�~�`	�� �`	����b�`	�r�2a	���q� a	�U�q�8a	�r��(�Pa	�t*ha	��j�|aP��]^$^@^`^x^�^�^�^�^_ _8_L_`_t_�_�_�_�_``,`@`X`l`�`�`�`�`�`�`aa0aHa`ata�a���a	�\"�<b	�����Pb	�w��������0�hb	�U�x���|r��b	�w�R�b	�u���v���I���b	�y�����b	����8��b	�u�R�E�����_��z�c	���w��@c	�V�Xc	�@�Zlc	��b=�c	��J�c	�x�z���c	���K@��c	�������c	�u�Z�c	��kdHbP�`b�b�b�b�b�bc8cPcdcxc�c�c�c�c�c�cdăd	�t���td�G	��H��d	�H�w���d	�R��d	�����z̄�d	��"��dP��d�d�d�d�d�d�ep�t'T/d5<lD<J`Q(W�]4bld eP�(e����8�P�p������$�X����h�P����Q��`�4p�,��`e�����heĀÁǍÀĒÉĚÈŌÓǑÒẾỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚǜüếềêɡ��e攊丽滝鵎釟撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮琑糼緍楆竉刧醌碸酞肼贋胶肟黇䳍鷉鸌䰾鸊㗁溚舾甙䤑马骏龙禇两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅�lh唥喐㧬蹆䁓睺㨴䟕擝撍蹾䟴骲㩧㿭㔆鵮頕䏙撴哣㧻擪蹨䠋㿺塳啹䂻䎺䪴膪飵捹㧾跀嚡摼㹃㦒㨆㕸噒㒼氽羓㗻㾓㿹搲��j㨘閪哌苄喹鰦骶煀腭胬尜脴㞗卟醶㗝㘉嚯婔垜㜃墙剨㘚箲孨䠀䬬鼧䧧鰟鮍嗻㗲嚉丨夂靑乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭罒礻糹罓㓁耂肀卝衤见讠贝钅镸长门韦页风飞饣鱼鸟黄歯龜丷阝户钢�lm倻淾㷉袏灷峵䬠㕙愢辧釶熑朙玺㲋䬐磤琂冮䀉橣䈣蘏稪靕灍匤鏴盙矝亣俰傼丯众吴綋墒壐庒庙忂斋椙橃泿爀玌㻛嬕璹讃窓篬糃繬苸薗袐躹迏蕟駠鈡䁱䊢娚顨杫䉶圽藖芿䲁嵻宖繛��o崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆溻滢滚齿滨滩漤漴㵆澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉䏁㗱�lr垾焾㙎榢孴穉穥穽窻窰竂竃燑䇊竚竝竪䇯咲笋筕笩箢筯莜篐萡箒㶭蒒篺簵籄粃粦晽糉糇糦籴糳糵繧䔝絝璍綉綫焵綳緤㴓緵緥繮纒䌫鑬縧罀罁罇礶駡羗羣䕜䔃翺耈耝耯耻耼聡䦉朥肧脇脚墰汿擧舘橓䑺舩俹蓢荢芪椛䇛��t蕋苐茚㛁艻苢茘㶿茝嗬莅䔋莬菓㑾橗蕚㒖葘葱㷓䓤檧葊祘蓞莑䒠蒓蓤䉀䕃蔴嫲䔧蕳䔖枿蘖藁蘂䕪蘨㙈号虾蝱蟮螱蟚蠏噡虬桖䘏衅衆衞袜䙛袴袵揁装睷覇覊覧覼觧誜瞓釾誐竩䜓煼謌謟謿譌譍誩讐讛誯䘕衏貛㜥賖贒贃賛灜贑㻐�lw趩㭼竧躭躶軃鋔輙輭辥錃辳䤪廸迹㦀逷遡邨郄邮酧㫰醩釄粬鈎沟鉁鉢錬鍫炏嫃䥥鉄鍳鑛躼閅閦鐦閠濶䊹䧟氜陻隖䅬隣懚隶磵隽双䦡霱虂霶䨏䔽䖅灵孁霛靗孊靟鐥僐鞉鞟鞱鞾韀韒韠韮琜韵䫑頴頳顋顦㬎㵑��y飊颷飈飇䫿喰飡飦飬鍸餹䭲駵騌騻騐驘㛄髠髢髴䰎鬔鬭倴鬴㣃魐魀婅鮎鰂鯿鰌鷔鵾鶃鸎梈鷄鴹麐麕麞麢䴴麪麯黁㭠㧥㴝伲㞾鼂鼈䮖鐤鼗鼹嚟嚊齅馸韲葿齢齩竜龎爖䮾煷玞禟鍩鏳鋬鎁鏋爗㻫睲穃烐煾炣㻇㜢㛡㜣坛�l|蔃葕䓴柹㜳㰕㷧塬栐䁗哋嚞嚒鏆鎜仸儫㠙亼佋侊婨㦙㐵伩諚亘働儍侢伃佂倮偬傁俌俥偘僼湶浲冨凃䓝赺剙劤勡䙺熌槑㻞璙琔瑖玘䮎叐㖄爏喴响圝鉝雴鍦埝垍坿㘾壋媙娬妸銏婾嫏娒㛵洅瑃娡��~媁鏠璌焅䥲鐈鎽㞠尞岞幞幈廍孏㜁㛝㛓脪弌弎婫孄蘔衠恾忛㺸懀憙憘恵摱㨩挷撶挱揑护搻敫楲㯴唍曎㫠䆐磮㑤暎晫䮓昰晣昞㣑㮙瓐㮖枏梶栞㯄檾㡣樳橒櫉欅攑梘橌㯗橺歗鎠鋲�l�銉鑧涥漋㶏渄娽渊塇洤硂焻烱牐犇犔兹瑺㼆㺱悧㻳瓌琼鎇琷䒟䕑疃㽣㽘畕癳㬙瑨㫻㷍㻿釺圲鍂僟睸眎眏睻㩞琸璛㺿䃈錇砞碍碈磒珐祙䄎蒖禥樭稺秴䅮䄲鈵秱㖗啫㕰㚪竢婙娍磰娪竾䇹籝籭䈑糍粎籼粮檲緜縇緓罎��綗䉪柖埄翝笧笌駦虅驣樜㧢騟蒀䓪脷䐂胆脉腂飃艢艥葓蘐媆䅿嬫嫤蚠蠭娂衮佅袇袿裦襥襍襔㺭蒣䛵䛏㟲訽訜彍鈫旔焩烄鵭貟賩妚矃姰䍮㛔踪躧輰轊䋴汘澻䢛潹溋鯩㚵邻啱䤆醻鐄䁢鐧蓥訫閙閧閗閖瑅㻂㻧随㻌琒瑫㻼靁�l�桇䨝鍨銺嬑譩䤼珹鞛靱餸巁頟鋶釥䓀飜㼀鈪䤥萔餻饍㷽馛䭯馪驜檏騡嫾騯䮐馼䮽䮗鍽塲堢硄棅㵽鑘㤧慐愇鱏鱓鱻鰵鰐魿鯏鮟鴡䲮鸘䲰鴌鶥蒽藼䔳萠藮秢䤭㵢鏛銾鍈碹鉷鑍俤㑀遤砽硔碶硋㚚佲濚濙瀞吔垻壳垊鴖埗焴㒯燫��愌嫎娋䊼㜬䭻鎻鎸葲妔綨鋥珢㻩璴㻡櫘珳珻㻖瑈炥銄珦鍟錱鎆䤵煫嚤唂秄緾䔮鐁㜊妰媡㛢㚰鉟婹鍴㳍䪖㦊僴㵩㵌煵䋻渏䓫浗灧沯㳖渂漌㵯畑㚼㓈䚀㻚䡱姄鉮䤾轁堒埈㛖烾梹楧樚萾䓟䓎�l�漗茽菭妉媂婡婱㜭姯㛇熎鎐暚婮娫樫焝侰峂樌炦焳㶥泟繥姫崯㷳彜綤萦咅坾㿥瀃嵰玏糓俈翧狍猐猸猹獁獈㺩遬燵珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈礳栃礲䄃��䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿�l�鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯鵉鰺黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄椚铃妬塀铁㞹块煳呪咞惧噺楕鰯螥尠帋朞㙇卤蒭讁乸炻��拃熘桕槩㛈苽覥辠鞸顇骽徱晈暿墵朎椘䣐䪸凒妟㮾垈㦛㝢譞爉奥軚劏圿煱喼㑳䜘偦㓻䝼垡煑遖譢�l�嵛諪䯀鑥憕娧嚹乪陖涏㘘襷筂穅騦㙟禃崬䛐画补墶㜜㱔銁錰氹钟蠧裵溸㦤㚹䔿暶襃囖䃟㦡熭荦䲷筃祾澵樃厢鎿栶靝嶅圕頣嶫斾槕叒㰑朶��㗊䣺揦砈鉕䏲䏟姸㷷运犏嚋纟䲤镇熢䶑递䶜达嗁辺边䔉繿潖檱仪㓤㜺躀㷫亚嚿踎孭揞攰嘭吚㷆䱽嘢嘞罉奵蝰东脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖㗎嘅嗱曱㘭甴嗰喺咗啲廐�l�麫絚嗞抝靭咔賍燶酶揼掹揾啩鱲冚㓟冧呍唞唓癦踭疱肶蠄螆裇膶萜䓬猄宐茋噻酰鈈牦䝎䃺鱝攟䣳熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥墚舭呋垪㩒獴䴉鯭䱛葜挮紥㨪逈勌㹴㙺䗩癀嫰硺䞶墧䂿噼鮋嵴癔麅䳡㟻愙噝垧刴㖭鵼��籖鬹埞屓擓蚭凾嶎霃麁遌笟鬂峑箣扨挵髿篏鬪籾籂粆鰕篼鬉鰛齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰椬叚鰊鴂䰻陁榀傦畆駚剳酙隁酜酑捿櫊嘑醎畺抅獏籰盖鮝个莾衂届槀坺刟巵从氱伹咜哚劚趂㗾㗳歒酼龥鮗頮颴骺麨麄煺笔毺蠘罸嘠蹷齓跔蹏鸜踁抂踨蹵竓稾磘泪詧瘇�l�鼦泎蟖痃硓贌狢獱謭猂瓱賫蘯徺袠䒷詾惽癧髗鵄鍮鮏蟵賷猬霡鮰㗖犲䰇籑饊慙䰄麖慽坟慯抦戹㩜懢厪捤栂㗒嵗迚僙礆匲阸䁥矾糂糚稭聦聣絍甅瓲覔舚朌聢聛瓰脃眤覉畓螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦覩涹蟁瓧㷛煶悤憜㳑恷罱惩䭾删㰘峁䕢嬟齐麦��讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲①②③④⑤⑥⑦⑧⑨⑩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广彐彡攴疒辵¨ˆヽヾゝゞ々〆〇ー[]✽ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじ�l�ЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя⇧↸↹乚刂冈¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣ʃɐɛɔɵœøŋʊɪ��纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯■�l�鋛蕌䊵珯况㙉鍄苮砼杄拟侫倈徤滛儁㑺儎顬㝃萖兠兪宂蝽冲冸鴴凉减凑㳜凓决凢卂凭菍椾彻刋刦刼劵剗劔効勅簕蕂勠蘍啉滙匳泋栛珕恊㺪㣌燝䒢卭却卾矦厓厠厫厮玧㽙玜叁叅汉义埾叙㪫叠叶吓灹唫晗浛呭啝咏咤䞦㶴��啇䳭启琗喆喩䕒暳嘷曍暤暭噍噏磱囱鞇叾圀囯园㘣坆汮炋坂㚱埦堃堦塜墪㕡壠壜壻寿坃鏓㖡够梦㛃湙娤啓蔅姉姙浱姹媫婣㛦㜈媖瑥嫓㶅㜲広勐孶斈孼䀄䡝寕慠寳宝䴐尅尓珎尔屉䣝岅峩峯嶋崐崘嵆岺巗苼㠭芇㠶㯂帮檊幺厦亷厨帉廴�l�廹廻㢠廼栾鐛弍㫞䢮强彣鞽彲鍀徧嶶㵟釖怱暅㥣㷇㘹垐祱㹀悞悳璤僡媠慤萤慂憁凴憇宪懓懐㤲怣慜攞掋担拕捬㨗搸揸澊頔擡擥鑻㩦携㩗敍漖斅敭敟斵䬷旑䃘无旣忟昘晄晋晧晳矅馤朂㬫槺杧杢柗䓩栢湐鈼栁桝��槡樋楳棃椁椀㴲㨁㮀枬楡䋼椶榘㮡荣傐槹橅檝㯳枱櫈㰍欝惞欵歴溵㝀吡毡毜氷汚舦汹䓅㛥㳫鮃羏样涖浜湼漄蔳凇萮瑓秌湏媑濸㜍澝滺䕕鏰潄潜㵎潴㴻澟濓凟灋灾炧炁烌烕烖烟䄄㷨熴熖焫煅媈煊岜煏鍢焬熺炽爎�l�鑂爕夑鑃爤鍁爮牀梽牕牗㹕栍漽犂猫䣭猨献珏玪珉瑉昣㛅珷琕椃琹㻗瑠瑇珤瑶莹瑬㜰瑴鏱樬璂䥓孆瓈甎甞寗鎅畍畊畧畮㼄疎瑝疞疴瘂瘬癑癏癯癶皐臯㟸皡皥皷盌葢眞眦着撯睘瞯矴棊碯磇磓隥礮磗礴碱辸袄禆褀椂禀禝礼禩渪㺨秆秔����h���h���h���dh�jdm�odr�tdw�yd|�~d��d��d��d��d��d��d��d���	�����"�$'�),�.1�36�8;�=@�BE�GJ�LO�QT�VY�[���d��eh�jm�or�tw�y|�~��������������������������������������������������������d��d��d��al�	!�F�G�D|����ca-R���X��23���g�P�M1o�bt��Y�WAC�]�[�fEIDN�a�_O��UYTs�j�hac�o�m��e�s�qin�w�uo����{�yu��yty�ܺ$5P���t��� �p5x5���5���< �T�L6h6�L`�����@�B�C��	�������q�r�m�n�u�v�y�z�i�j�E�e�f�����������������������������	�@�G�T�|�����C�K�E�Q�����������g���������W�S�]�����N�I�����������e����	�������h���Y?��	�����S������D�	�j�\���^�����f��Çh�	�����H�E�o�����	������G���	��T	ܽ	�f���������	�p�dˈ�	�I���o���~
�(��L	�����S����O�L�	�����I����t�	�����I���r�k���PӉ��	���e�D�n���c���S�����y�]�c�i�ľ	�������������f�n�������a�����]�����i��������W���b	���c����t���	�������m����ۊ����\H@��P��7�489,�P��<�`�L���������$DdԽ���� 	 �p	�	�	�	
D�`
�
l��
0\������Pt�l���T
h
�����	������_���	�������~���	�����@�������	�F�����s%��	���Hg�<�	�K�U�N���Y����T�	���T|�	�g�����	���v�Q�s�O-���	���n�p�����So���\	�z�������d���b���d�L���	�������T�|���z�����������0�	�v�p�K����������5�p�	��Zc��	���Z��	��������w�����	���	���y������	�������	�z��=�0�	�������H�	�������d�U���|�M����d�	���������	�o�j�_����E���	���y������	���s������ɐ��	�����C��	������M�4�	�x�{��P�˶������˻˴��˷��˺�o��	����������������˾˲������������P�W�V�J�f�����I�Q�]���������Kёh������4�L�t��� <��h������(�h���������X���(�@�\�$<X|����8P���t��������,�H�`��8���p��$�	���c�����h���d�g�f�e�b�������������������������o�����������i�k�j�l��������������������������U�(��rʣ�f�c	�z�bʦ�e�i���V�`ʢ�y�����O�����������P�y�����������I�K�M�������L�E�A���D�I�R����������������	�����m�o�n���������������I�}�|�_�^���]���[�yʩʨ�w�z�\ʧ�[�x�W�����T����ْ���	���U�������T���Z�g���X�^�U�Y�[�]�W�}�V�Q�R���������S�\�������o�P�S�R�W�N���Q�P�A�T�`�Գ�����i������ԻԶ�K��Ը������	����Ԯءتة��آ�����}ؤ��ب�lأإ�}��زرخ�������Kث����ح�~ذد��س��ج]���U�[�d��	���Z�`�e�V���^�b�h�X�a�w���g�Y�����Y�K�W�V�M�R�N�Q�\�����[�o�J�P�Z�O���L�X�}�~�M���O�J���L����	���Z�]��ʰ�^���B�`�Y�L�B����i�~�p�g�h�]�{���������j�������[�����q���_�`�i�j����������q�p�m�k��	�L����ʶʹʸ�����R��ʵʳ����������ʴʻʷ������ʲʺ�����g�o���O�H�p�S�D�K�t���f�E�d�L�P�c#�|�	�@�M�����r�������������G���C��ض��������A�D����غط�s��عؾؼ�E����ؿ�ص���B�@�C��D�@��F���������e�T��A���A����	�������B����E�A�����n�������z�p�v�k�y�x�|�u���t���w�m���{���o�r�w�q�l���x�s�U�a�X�W�Z�\���_�V�r�T��8����r�y���s�v	�t�u�w����ʼ���gʽ�W�X���v�x�z�w�{�y���b�c�����������f�w�}�h�g�c�_�`�b�d�a�f�e�J�$������I�k�H�G�K�F	�����I�����K���H�J�����H���I�J�����~����������������f���g�e�d�]���������d�_�o�x�u+�������	�Y�~���Z�}�������x�������j�h�D�k�i�j�^���P�Q���O����h�i�a�����������K���s�w�v�z��������m���	���hΫΤΪΣΥ�}�{άΩ�y�X��ΧΨΦ�|�z��΢�~Ρέ�s�o���n�l�k�n���p�o�s�H�q�pή�r�m�l�m������������	�����R�a���O���O���P�������b�����@�S�V�N�P�U�T�C���R�D���M�Q������������D�	��������λ�����|�a�F�b���I�}�����������������q�r�s�k�����p����μ�z�z�y�i�L�j�M�L�]3�����` <!"�"t#8$���%x&8'(�(t)d*��,�,�-t.T/H0$12�2X�L45��6��T8���9t�d;L�8=�=�>0���AdB�����D��TF<��G���I8J�J�K�LtM���N�O�P.��	���F������������̹������������̵�����������������������Q�{���A�����@����ѱ���C�������������������B��u���	�������������q������������������լ��իխ������ժծ����թ������٧��٢������٥٨����������٦��٣١�v�������	�������������P����������������`�n�K�m�Q�R�f�P�����������������������T������������p�	�P�����C���G�B�E���������@�A���A�@�F���D�������������W�����C�M�N�F�X�H���S���I���������V���Q�O;�,�	�����������J�P�D���������R�����U���E�L�����T�G�K���Y���M�[�\�i�^�V�L�b�J�[�E�e�R��A�}}��������������������������B�l��	�����������������������X���������������������^�{��������������������������������	���D��������������B������S�K���Q�����~�W���A����G�E�B���C�O�L�T���@�F�G�����F�E������P�N�R�����`R S�S�T�U�VdW4X�X�Y�Z��(\�\�]�^�_d`0ab�b�c�dXe(fh��g$��i����l�l�m\n@op�p�q�r��Tt@u�u�v�wHxyz�z�{�|�}D~�̀d�|�X�T�(���.l��f�i�a��������	�����������g���x�����������y�������������������W�e���l�����������������A�^���_�G�b���_�`�a����C�x��Z�p�w�yޡ�����k	�����z��ޢ�����}���m�~�l���x��ޣ���q���|�o�v�r�n�������������u�~���N�{���s���������t�����������`�����l�	�m�z�k���j�i�{�����l�j�k�A���������������������D�����y�����������G���������R�����n���bǘL���	�������������^�����������Z��ҴҫҶ��ҮҹҺҬҸҵҳҷ�_�]���\ұ�tҭ�sҰһҲ�^���Z�\�F�d�x�m�k�h�l�N�s�e�t�p�{�u	��޷��޻��ޱ��޼�s�n�_޲޳	޽޺޸޹޵޴��޾����޶���������������q�����������z�������w���������������y���u��]���@�bK���A��|��	���������D���i�f�e�g�f�Z���c���X�\�[�d�h�Y�q�m���z�����j�h�k�n���l�g�^�B�E�u�@���o�Fâ�D�{�����A�C�G�v	�t��ã�s�j�n�����������������������nҼҽ�}޿�]ä�{�������o�`�������M��Ҿҿ�~����ګ����ϙ���q�p	��ͤ������������������������������������������������������������������������}	�������|�D�z���{���y�A����Z�����X�@�W�\�[�Y��I�H�c�D�����G�F���^�����_�[�]���ZS�`��\	����j�p���I�E�r�q�n�o���J�����`ª¨©�L��íì����������H�sͥ����ͦ�M�@���� ����Q�R«¬	�u���������L�A������V�M���W���������������G���X�E���M���v�����ͧ������ך��	�]���X���N�P���U�T�W���R�Q�h�����S���Y�[�V�O���i���a�Y�\���b���c���e��������������`�h	�d�f�g�v�����j���]�f�����t��x�������Q�y����w��{���z��������������O����n��d���N�[�D��Y�j	�`�d�\�X�W���v�b�Z�^�k�i�f�g�c�r�B���j�x�t���x���e�}�u�b�U�w�f�������v�p�������������c���q�����s����������X���l�(�D������\�$���ؓ�����������0������d�@������d�H�����p�X�$���X���������\�<������L� ���������|����L�4���.��	�g�Jߡ���N���K�����P���M�G���L�������|�}�~�w�u�{�sߢ�x�r�{���}�v�~�[�|�~�y�x�y�}���|�t�z�������Lߛ��_	��߳��߯��߮�`���m�q��������X����[��Y�������������������������Z����]����a�����U!����O	�m�B����߽�[�R�U�{�\�S�Q�N�����e�����`�h���x�|���W�k�o�T�y�����L���r�V�j�P�^�Y�����l�}�z�q���w���M���Ic������M�O�����Q�I���P�B����R�J�G��U��	����H���T�K������L��V��C�N����������~��������������������������	��ĪĬ�ĭī�����a�pĨ�h�~�����������������������������������J����P���K�I�G�H�L���������������t����K�L����	���Pײ�U���T���E��׸�R��׳�S׿׻׽׷׾���O׺�R׹׵�׼״׶�Q�����������������������������)�X���	����������������������������������������|��������~���������E�����������������������������k�0�Ū���X���W�Z�Y	�C���B�@�A���������@�M�N�g���m�������z������T�,��������X�4������p�<�8�����������l�l�P� �����H�����p�d�<�(�������p� ��������`�D��������������`�,����������`����T�.��	�P�E��J��C�B�U�M�L�K�I�N�}�D�F�H�����������������e�������R�C�A�S���D�B�Q�P���O�������E��������������������j�b�q�e�o�v�n�y�s�u�c	�i�w�u�h�x�z�k���r�s�w�u�t�f�r�v���t�s�d�g�p���c�����������a����W�Y�e����Z�\�f1�|�����	�����D��H�����A��������C���������K����E�M�������������a�f�O�h�N�I�d�j�N�J�K�`�g�M�e�L�_�c�b�O�^s�`���	��R�]��^�_��`�Q�N�K�P�S�L�R�O�M������������f�w�v��x�~��}�z��{�|�H�I�����S�n���Q�R�oŴŵ�q��D��[���E���G	�����F�W�����C�f�t�����Q�R���D���a����S�����Mܩ�Fܫܪ�Q�����u�v��������������� �	�E�J�F�I���^���H�G���D�B�E�C����F��@��A����Q�N�O�P�r�V���U���t�sŸ�j���I�`�X������9���	�s���e�������������t���������{���(�t������|�d�D�X�����������<�p�������l��xP�����x���	P
,�L4
$�4���L��P��P0$ �����x�������Z�����������y���t�������`�i��ù�����r�������O�_���T�d���Z������}�P����İ��þ��Y�����T	���N�����r�l�c��Ī�����S�|�O�L�S���w��.�	�I�����C�H�����]�^�����A���D�����������������������G�F�������H�I�������������������������������������������������������@���s��.�P~\h�t�������������Ȉԉ�������(�4�@�L�X�d�p�|�����������������P��������@�X����ܟ|�g�Ժ���8�P�p�������4$�X����h�P���� ���p������p�,�D}���������丗丢丬乕乢亊亰仫仭仼伜侊俿偂偐偸僘僞僴儖兊兑兤兪内冐冝冦冨冩凇凖凛凬凼刋刔刕删别刹剏剱劐劒劔劜劯劵勐匀匇匤卆卟厓厰叝吣呐呑咊咝咣咴哐唣唿啌啓啝啬喞喩嗬嗵嘣噐噼嚊嚔嚠嚯囘圀坙坥坿垅垉垡垬垴埀埈埓埯塄塬墒墚墲墸壥壻夂夋夐夘夛璌璍璙璛璤璴璹瓈瓌瓐瓓畂畕畮疍疞痜瘬癏癑癳癴皥盙眎眏睘睲睷睸睺睻瞘瞯瞾矃矅矋矝矦矴砞砽硂硄硋硑�d�唖壷頴葛焔艶襖鴬鴎躯恢晦蛎撹鎌噛潅諌煉巌蝉騨箪贋饗尭繋頚倦捲鹸砿麹麺賎讃蒋醤穣撰巽庖聡楕竪瀦梼祷涜迩祢嚢蝿剥禄溌醗箆頬桝侭薮篭蝋倶植殖慎具真値置直槙惣拶呟鞄噌僅嘘虞夲奛奝奣奬妛姗姫娚媪嫐嫱嬶寉寳尓尜尞屓岙岜岺岻峁峵峺崕崘崾嵓嵜嵭嵳嵴嶌嶐嶹巐巓幇幤廏廐廪廰弉弌弑弡弴彁彅彑彜彦徃忰恊恠悋悦惞愑愠愡愼愽憘憷懴戓戝戞户��幺氐収伫低吴囱壮夹妆尬决冲灾见角贝车亚来仑两协届冈底抵东争状籼纠卧轧邸长门侠侣兖则劲却奂帅柢汹为纣红纪纫纥约纡胝苎计订讣贞负军轨闩韦页风飞俩们伥个伦仓冻刚剥员娱孙峡岛岘师库径挟时晋书泾浃乌狭狈亩砥秪纺纱纹纯纽纰级纭纳纸纷胁脉刍记讦讨讧讪讯训讫岂财贡轩轫钉针钊钋闪阵陕陉饥马骨伪伟侦侧务动区参哑问衔国坚垩执够娄妇专将�d�屉峥岗带帐张强从徕凄怅扫挂扪抡挣败启斛斩昼勖弃条枭杀氢凉浅渊泪沦净牵狰现产毕异众绊统绍绋绌细绅组终绁绂钵习荚茎莒庄苋处术衮觅规访讶诀讷许设讼讹贩责贯货贪贫轭软这连迳钗钓钏钒闭陈陆阴顶顷鱼鸟卤麦备伧伞凯剀创劳勋丧单哟唤乔围尧场报埚壶娲寻岚帧帏厕厩恶闷惬恻恼拣挥换扬枣栋栈钦残壳氯氩涌凑湮涡汤测浑涣无犹苏画痉发盗砚秆窗��笔笋绞结绒绝丝络给绚绖绛肃肾胀华莱苌虚视评词证诂诏诅诈诋诉诊诃贮贴贰贻贲费贺贵买贬贸贷轲轴轶进邮乡钞钮钙钠钧钝钤钣闵闰开闲间闳队阶阳韧项顺须饪饭饨饮饬冯驭乱债传仅倾伤偬铲势积汇吗呜呛园圆涂块坞埘茔奥妈爱忾怆恺损抢捣构晖晕旸会业极杨桢枫岁沟灭湿滑沧烦炼炀焕爷狮猾珲当盏睐睁雎碌节笕粤经绢绑绥绦义羡圣肠脚肿脑荤苇叶莴虞�d虏号蜈蚬补装诧该详试诗诘诙诣诚话诛诡询诠诟贼资贾贿赀赁赂赅较载轼轾农运达违过邹钴钳钹钸钾铀铅钩铂铃铉铋钜铍钿铆闸陨隽电预顽顿顼颁颂饲饴饱饰驰驮驯鸠侥侨匮厌尝呕叹喽啧哔团图尘垫堑寿梦夺奁妪实寝对屡崭岖币帼彻态惯恸惭惨搂掴掺畅荣枪滚渍汉满滞渐涨涟沪渔渗涤荧尔荦狱琐玛疟疡疯痪尽监硕祯祸种称洼窝笺筝绽绾综绰绫绿紧缀纲绮绸��绵纶维绪缁绶罚闻莅盖荪苍蚀诵语诬认诫误说诰诲诱诳诮宾赈赊赵赶辅辄轻远逊递铰银铜铭铢铬铨铵铣阂闺闽阁阀际颇领飒饺饼饵饷驳肮骰鸣鸢凤齐亿仪价侬侩俭剧刘剑刽厉唠嘴哗嘘喷啸叽墟坟坠堕娴婵妩娇娆宽审写层嶔帜废厨庙厮广弹庆虑忧怂悯惮愤怃挚扑捞拨挠抚掸揿敌数暂昵样桩枢标楼桨乐枞欧殇殴浆泼洁浇溃润涧浔热奖莹疮皑皱盘确码窑穷缔练纬�d缄缅缉编缘线缎缓缍缂缈缇骂罢胶肤莲荫蒋虾蜗卫谊谅谈谆诞请诸课诿谄调谁论诤谇诽谀竖赔赏赋贱账赌贤卖赐质赓践辉辆辍辈辇轮辎辋辊适迁邻郑邓锌锑销铺铐锄铝锐锉锋钡锂闾阅巩颉颌养饿馁驼驻驷驶驽驾驹驸骷闹鱿鲁鸩鸦麸齿俦傧侪幂剂吨哝嗳垦坛奋袅学导宪凭惫懔忆战拥挡挞据掳择捡担挝历晓晔昙桦横树椭桥机桡淀浓泽浊沣澦渑炽烧灯烫焖独玑瓯��	瘘卢瞒砖碛积颖稣窥笃筛缢缣萦缚县缟缜缙绉腻兴舱荡萧芜蚂萤裤亲觎谛谚谏讳谋谍谐谘诺谒谓讽谕谙谌谖赖辐辑输辏办选迟辽遗邺锭锯锰错钱钢锡录铮锥锦锟锢锱阎随险静腼颊颈频颔头颓颐馆饯馄馅骇骈骆骸骼鲍鸵鸪鸯鸭鸳龙龟优偿储励咛吓压埙婴嫔嬷尴屦屿嵘帮弥应恳戏击挤拧拟搁敛毙暧档检桧栉樯殓毡泞滨济涛滥涩潍营灿烛烩墙狞获环瑷痨疗矫磺矶�d篓粪镆糁缩绩缪缕缧绷缝总纵缫纤缥繦缦声聪联耸脓胆脸脍临举艰蔷蓟亏蝼蝈亵褛觊谜谤谦讲谎谣谢誊谧赚赛购赙趋辖辗毂辕舆还迈酝镀镁锚键锲锅锤锺锹锻锾锷阔阕阑闱隐隶虽韩颗飓骋骏鲜鲛鲔鲑鸿鸽点斋丛噜圹垒婶懑扩掷扰撵摆擞撷断槟柜槛柠欤归殡泻渖滤渎溅浏烬焘犷猎瓮疠睑础礼穑秽窜窍箫簧箪篑简粮织缮绕缭绣缯翘职聂脐膑旧萨蓝荠蛲蝉觐觞谟��谨谬谪赘蹒迹跸躯转辙迩医酱镑锁钨镍镇镐镒镉阖闯阗阙杂双雏鸡额颜题颚颛馏馊馈骑髁鲨鲤鲫鲧鹃鹅鹄垄坜宠庞庐惩怀懒拢旷橱椟榈橹潇濑沥濒泸烁牍犊兽獭玺琼畴瘪碍祷稳签茧绎绳绘罗缴膻艺薮药蚁蝇裆袄谱识谭谲讥谯赠赞跷辚轿辞边镜镝镞链镗镘镖镙锵镂铿錾关陇难雾韬韵类颠飕馒馑骛骗鲸鲳鲭鲷鹑鹉鹊鹌鹏丽麴劝咙嘤严宝悬忏拦搀胧榇澜潋炉珑矿�d砺矾砾窦竞筹篮辫缤继罂胪舰蔼蔺芦苹蕴蚝褴觉触议译谵赢赡趸释钟铙锈阐飘饶饥骞腾骚鳃鳅党龃龄俪嗫啭嚣属惧慑摄携斓樱栏棂歼烂牺镶璎癞缠续兰藓蛎览谴护誉赃踌跃跻轰辩镰镭铁铛铎镯镌响顾颢飨驱骠蓦骡髅鳍鳏莺鹤鹞龇龈啮俨傥呓孪巅峦弯摊权欢滩猡叠瘾癣笼籁聋脏袭衬读赎赝踯踬辔郦铸鉴霁鞑繮颤骄骁鳖鲢鳔鳗鹧鸥鼹龉龊龚恋挛搅瓒窃缨臢萝蛊��变逦逻镳铄靥显餍惊驿验髓髑鳝鳞鳜鸶嘱坝揽瘫癫羁蚕让谗谶艳赣酿雳灵霭颦骤鬓魇鲎鹰鹭硷盐鳌龌龋厅榄湾篱箩蛮观蹑衅钥颅馋髋黉滦瞩镊鞯驴骥缆谠躏酽钻銮锣鳄鲈黩凿鹦骊鹳鸾钺仂虍殒垧坻戋俣刭厍呙卺纨茇钇钆呗弪祓纾郏钌剐匦囵垭娅岽崃涞渌烃眦绀绐胫钎钐钕钍闫妫嵛恽桠枨沩浈畲砗绗菝觇讵诎诒贶贳轺轵轸逯郓鄄钫钬钛钯钭钪闶陧顸饫黹伛偻�d佥唢垲巯徭炜茕狲玮绨绠绡羟荭蛱诓诖诩诔诜趑辂辁邬铊铈钰钲钶锍铌钽钼颃颀凫黾偾唛嵝帻悫悭怄戬戗抟抠掼桤杩荥浒沤炝皲砀绻绲绯绺莳觋诶赇铱铒铑铕铟铫铯铪铷铖铥飑刿劢哓呒崂峤庑愦挢椠毵颍涝潢涠滗琏璁瘗缃缗缌缏缑荜蒌茑苁诹诼谂赕郸锒铗铽锓锊铤锆锇锔阆阃靓颏饽驵骀鲂鸨哒哕哙嫒峄怿殚浍烨猃狯碜窭縗缛蒇荨蒉荞莸芗蛳诨谑谔谝郐锩锬��锖锗铼锛锕锞钔阏阈阉阊阌阍鸲鸱哜帱恹摈泶猕甓瘅痫硗箦筚糨缡耧荟莶蛰裢觏谡诌谥跄锸锴铡锶阒饧鲒鲕鸸鸹鸺龀怼摅撸泺疖缋聩荩蟥虮讴谩赜贽辘邝镓铠锼镏蓥韪饩骐骒骓阋鲩鲠鹈鹁鹆厣呖垆槠栎氇泷潆祢缲缳罴舣蛏虿裣觑觯谮镛镟镪镆铩韫颡馐髂鲵鲶鲻鲱鹎鸫黼喾撄栊枥栌缱聍茏苈蕲蛴蝾铴镦镨镡镣镄镫铧镤铹阚颟馔驺骝骟骘鹗鹚鹜龆龅傩岿痈撺�d榉滠砻粝纩缬蔹赆镱闼飙骢骖骜鲥鳎鳐鹣鹘鹾冁娈灕攒瘿箨籴舻觌跹跞轹镔镬骣骅鳕鲣鲦鹨鸷龛栾椤蓠雠轳鳟鲟鹩鹬鹪鹫鹇灏簖谰髌笾粜缵脔蹿镧鲚趱躜酾谳颞颧骧鸬戆阄鲡鹂禸拔跋珐宫拐毁减禄吕潜袜郧兹戸抛挧掻揞揺撑擀擡擶攅攵敎敫斈旙昞昻昿晄晗晩晳暃暼暿曁曵曺曻朎朖朷杤杦枦枧枩査柽栀栁栅栞桊桒桕桙梍梹棏傈锨鲗椢椦Üü椶楡���苅苊苘茘茚茣荆荛荢荬荮莜莟莵莼菷萪葈葜葢蒄蒈蓜蓣蔸蕚薗薫藁蘓蘖∋蜕蝰蝽螋螨蟇蟐蠇蠎蠧袮∈袵袿裥裵褜褝襷觧訷説諚譛譱谫谺豼貎貮贒赉赍赱踈踺蹰躙躰躱軅軆軎軣輌轱轷辧迯逎逹遥邉郞鄕釖釛釞釡釥釶釼鈩鈬'鉙鉷鋭錺爫冂冖丷八儿朩氺厂疒肀衤丆⺗勹匕‡㐄凵屮囗亠冫⺀槇╎◘◙♂▶◄↕‼¶∀↨↔⌂�\ 亜悪圧囲医壱逸隠栄営駅謁円縁応欧殴桜奥穏仮価画灰会悔海絵壊懐拡殻覚学楽喝渇巻陥勧寛漢関歓観気帰戯犠虐旧急拠挙虚峡挟狭郷響暁勤謹区駆勲径茎恵掲渓経蛍軽継鶏撃県倹剣険圏検権顕験厳呉娯誤広港鉱号国黒穀砕済斎歳剤雑参桟惨賛残歯児辞湿実写舎捨釈寿収衆従渋獣縦粛処将称渉焼奨条状乗浄剰畳縄壌嬢譲醸触嘱寝尽図粋酔穂随髄枢数据��"瀬声斉静窃摂絶専浅戦践銭潜遷選繊禅疎壮争荘捜挿巣窓装僧層総騒増憎蔵贈臓属続堕対帯滞滝択沢濯単嘆団断弾遅昼鋳庁徴聴懲塚逓鉄点転伝電灯当党盗稲闘徳毒独読届難弐悩脳拝廃売梅博薄麦縛発髪抜浜敏敷侮払仏辺変歩舗簿包宝抱泡胞砲豊飽墨毎満脈黙訳薬躍与誉摇様謡曜来頼乱覧竜隆旅両猟緑涙塁礼励戻霊齢暦歴恋練錬炉労楼録湾弥亀曽姉宍嶋��\%樫椛喰粂込榊咲鴫雫椙揃駄凧栂辻働峠栃凪匂硲畑畠噺鋲塀柾俣杢籾匁俤俥凩叺哘囎圦圷圸垈垳垪垰埖塰墹壗屶岼峅岾嵶弖怺掵杁杣枡梺椥椨橺椣椡楾榁槝樮橲欟毟渕熕瓧瓲瓰瓱瓸甅畩癪硴竍竏竕竓竡竰笂簓簗粐粭糀糘綛縅繧纃纐膤艝萢蓙蘰蚫蛯袰裃裄褄躾軈轌辷迚逧遖錵錻鎹閊閖靹鞆鞐颪鮖鮗鮴鯏鯑鯒鯲鯱鰰鱇鱚鳰鵆鵤鶫乄呏挘鮱鱩鵇鵥鰯麿冴呪枠鮎��'邨冲㘭担勅枱响恒叁烱堃啟鈎着琼煊滙叠献裏碍羣綫踪鑛捬徧尅耻峯㦸煑賍韮塲婣罸嵗慯榘綉粮綳澁嫺墻牕癎輭銹鵞麯罇鷄贘决虬咤厦刦朶両却廹効咏廸妬怱牀脗瘻弍晋暨慤捏烟洤粧糉叙敍坂珏胆㕑欵碁双猫猪珉畊姹燄甎緜駡覩濶㩗擪㯭没湼畧塩刄憇携臯况凑汹够迹飱攷脉袴㨪躭羗騐紥櫈册刧脚厠厢汚氷舘喆廻凉碱鉢卭凃葱覇靭讐隣廼隷兎鰐昰x�X*鉕砈鍅鉳鍩釟釚硔硦碈碶磇磒磗Å⇋磤磮磰磱磵礲礳礶祘〓祙祱祾禃禆禇禑禙禟禥秢秱秴稪稺穅穥窼竂竉竛竩竾笌笧笩筂筃筕筯箲槞槹酶腚苷呋脲肽萘酞酰醌腈䐶腙肟啉吡哚吲喹咔硒硅硌蒽萜苄葻謭坋坅蟎噠嗪噻肼碸樌哌篐篬篺簕簛簵籄籭粎粸糃糦糭糳糵糹糼綋綗綤綨緍緐緓緥緽樒樢樰樶橥橳橸橼檩檪��,⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳鍄鎭鏆鏥鐚鐡鐾鑁鑓鑚钚钷铘铞铳锃锎锏锘锝锪锫锿镅镎镢镥镩镲閇閙閠閲陦隝隯隲霳霻靍靏靑靕靤靫靱鞒鞲韲頽顔颥飃飚飮餝餠饣馀馇馍馓馕馼駈駲骶髙髞鬏魉魲鮃鮟鮻鯣鯵鰀鰄鰛ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ®™�T/鱶➊➋➌➍➎➏➐➑➒➓鲅鲆鲇鲋鲐鲞鲮鲰鲲鲴鲺鲼鲽鳆鳇鳊鳋鳓鳘鳙鳢鳫鳬鴪鵈鵐鵺鷆鹋鹕鹛鹱麪麽黄黢黪鼈鼋鼍鼡齄齑龝﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩丄丯亁亇亣亷亼仸伨伩伷佂佅佋佲侢侰侽俈俌俰俲俹倃倈倴倻偘偦傁傐傼僐僟僡僼儍儫兠冮冸凒凢刅刴刼剙剨剹劤勌匧卂卝卽卾叅叐叒叾呭咅咓咞咹哣哯唍唘唥唨唫啇啹喐喴嗁嗗嗘嗻侴嘡∃噒☻��1噝⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇噡嚉嚋嚞嚡嚱嚹嚿囖囯圕圝圲圽圿坃⇔坾垊垍垐垜垻垾埄埞埾堒堢塇塜塟塳墧墪墰墵墶壋壐壠夅夑妉妔妚妟妰妸姄姯姰姸娂娋娍娒娡娤娧娪娫娬娽婅婔婙婡婨婫婮婱婹婾媁媂媆媈媑媙媠媡媫嫃嫎嫏嫓嫤嫰嫾嬍嬑嬕嬟嬫孁孄孆孊孏孨孴孶孼宂宐⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵㈲㈱檫�T4宖⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛寕寗尣岅岞峂崐崬崯嵈嵖嵰嵻嶅嶤嶫嶶巁巗帉幈庒庽弎彲徱忂忛忟怣恾惗愇愌愙愢慐慠憁憕憹懀懏懓懚抐挱⊃挷捹掋揁揢揦揻揾搇搲搸搻摚摱摼撍撯撴撶擝擥攊攑攟敟敭斆斵斾旑旔旣旿昘昣晣晫晽暅暒暚暤暭暳暶曍曎朂朌朙杄杫枏枤枿柖柗⊂栍栐栛栶桇桖梄梈梽棃棅椂椃椉椘楃楆楤楧楲榅榟榢槑槕槖騡騦騯櫁��6妿槡樃樚樜樬樭樳橃橅橌橓橗橣橴檂檊檏檙檧檱檵檾櫉櫔櫘櫶歗歺毜氜氱汘汮汵汿沯泋泟泿洂洅洆洦浗浛浱涁涏涥涱淾渂渄渏渘渪湐湙溚溵溸滛滺漄漋漌漖漗漴漽潖潹澊澝澟澻澾濓濙濸瀃灋灍灐灔灜灧灷灹炋炏炠炣炥炦炧烄烌烐烖ɪɛæʌɑɔʊɝəɚɜɡṃṉŊḻɵðʃʒʧʤãɯɸʇÇœɒgˋˏabdefhijklmnoprstuvwz�T9烵㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩烾焅焝焩焫焬焳焵焻焾煀煏煫煵煷煼煾熌熎熑熖熢熣熭熴熷熺燑燝燫爀爉爎爏爖爗爤媤爮⊆牗牜犔猄猐獁獴玌玏玘玜玞玧玪珕珡珢珤珦珯珳⊇珹珻琂琑琒琔琕琗琙琜琞琟琷琸琹瑃瑅瑇瑈瑉瑓瑖瑥瑫瑬瑴瑺璂厂广丨幺冖宀卩⺇匃☒艹䒑⺌⺊丶匚⺕└乚辶廴冈亅丿乛厶车纟讠贝鸟门钅阝扌氵亻忄灬⺮口櫢騻騼驘驜驣��;☎→←↑↓⇨⇦⇧⇩☞☜☛☟〖〗○✕✓囻☽夝晍爥✩✡☺☹屸♬♪嫑宷峼✉✂峕杮瑡璝罓薓❏嵸弻━┃骲髠鬔鬴鬹魀魐魿☼綕☁霴☂✈℻℡曧湗煗秊№腬諹顖☠♤♠♧♣♢♦♡♥櫤℞㏂㏘㎡㎥☑鮁鮋鮍鯝鯩鯭鯴鰟鰠鰦鱓鱝鱻鴌鴖↲欅9�T>賩賲贃贑贜赺趩跀踁踎蹆蹨蹱蹾躀躶躹躼軃軤軭軲輰轁轊辥辳辸迊迏逈逳逷遤遬醩醶釄釺鈈鈓鈡鈨鈫鈵鈼鉁鉘鉝鉟鉫鉮銁銄銉銏銱銺銿鋔鋛鋣鋥鋫鋬鋴鋶鋽錃錇錰錱鍀鍂鍃鍟鍢鍦鍨鍳鍴鍸鍽鎁鎄鎆鎇鎐鎜鎠鎸鎻鎽鎿鏋鏓鏛鏠鏰鏱鏳鏴鐁鐄鐈鐗鐛鐝鐤鐥鐦鐭鑂鑃鑍鑔鑘鑥鑧鑬鑹鑻镸閅閦閪陖陻隥雴霛霶靀靁靗鞇鞉鞛鞱鞽韀韂韒韠頔頕頣頳顨颷颹飇飊飠飡飬飵��@鴡鴴鴹鵉鵎鵭∷鵮鵼鶃鶓鶥∬鶽殁殱鱏麐鷀☯☰☷☳☴☵☲☶☱鷉鷔鷼鸊鸌鸎鸘鹻麅麢麬麱黁黆黇黱黸鼧餎餙餜餷饝饢馛馤馪馸駠駦駵騟緾縇繛繥繬缷罀罁罉罒羏羓羴翝翧翺耂耈耮耯耼肧脌脪脴腂腖膄膥臤艔艥艻芇芿苢苮苸苼苿茋茝茽荗莑莬菍菭萅萔萖萡萮萾葊葓葕葘葤葲葿蒀蒒蒓蒖蒣蒾蓞蓡蓢蓤蓸蔃蔅蔐蔳‐蕂蕌蕒蕟蕯蕰蕳藖藠藮藼蘍蘏蘔蘨虂虅虲�DC袜孭脷餸啲啫㗎啱喺嗱㗒嗰嘅嘢嘭噃嘞嚒糍吚吓咗曱甴呍嚤嚟擓挮揸攞乸毪氲氽汢沲淸温湶溂溆溻滟滢漑漤潴澑澵濳濵炻烀焏∂煕煳煺刣㑑迌ÀÈÌÒÙÁÍÓÚāēīōūǖÄËÏÖÜÆÇÑÃÕáéíóúǘäëïöüæçñãõǎěǐǒǔǚÅÉ熈ØÐỲÞߪ¡àèìòùǜå熘燗øðỳþÿº¿âêîôû燵ÂÊÎÔÛ¸¤ƒ��EwxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟␡€�DH讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲①②③④⑤⑥⑦⑧⑨⑩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ丶丿亅亠冂冖冫勹匸卩厶夊宀巛幺广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじ��JЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя⇧↸↹㇏乚刂䒑龰冈龱゛゜ゔヷヸヹヺ・。「」、・ヲァィゥェォャュョッーアイウエ¬¦'"㈱№℡オカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚�DM爲爼牦犂犏犟犭犱犸犾狍狛猤猯猸猹玽珎珱瑶璢甁甙産甼畄畉畍畭疂疃疉疬痖痩癀癍癔癨皀皃皐皷皹眍眞睃砘砜砹砼硇硖硺碵碹磆磙礇礰礴礻禀禝秃秡稆税穃穐竃竒竢竧竸笶筢筬筺筻箚箞箟箢箧篶簒簔籏籖籘粫糺絈絋絷緔緕緖緤繍繝繿纉纎纒绔绱缒缰罱羂羮翆耠耢耥耱聟聨肬��O肷冚吖吔㓟䱽拃哋喼肶冧唓舦唞嗞掹梘唂啩疴揼麄鈪裇悞嘥煅嫲劏噏瞓螆踭膶㗾燶蠄鎅癦鱲拎麖䦉糓軚麫擧芪杧浲礆秄罎蟮莾蘯覥䘏飈饀饍騌髗麘鼦伃伹伲侫偖倮傦僙儎僭儁凴刟剠剗劚勑勠勡凓凟畆凾匲匬匳厫厪龎呩咜叚櫊啳㗖嘑噍噔㗳坆坺坧堺埦埝塀堦壜妷姙尠峑峩嵆嶎巵帋帒帮幞�DR彍穽寃窻徤徺徼恷悤悳惽愰憜慙慽慜捿懢烕戹扨抅抂抦拕捤挵撐㩜晈晧朞栃枬柹梶椬椁椀棊楳榀椾榲槀榊槺槩檲橒檝欝歒毺㳑泎湏涹潄濚炁秌焴㷌煶爕牐犇猬犲狢猂獈猨獏獱斅瑝瑨甞畓畺皡盌眤眫䁥硓磓磘鵾碯慂禩鰺秔稭稾穉竝竚痃瘇瘂癧癯嘠詧鼗笟箒箣篏篼籂籑籝籰籾粆粃粬糇糂糚絍絚緵縧繮麕剳耝聢聣聦聛肦脃麁臈��T辠臶舚蝱螩螌麞蟁鸜蟖蟵蠏蠘蠭衂衅鰵衮袪袠抝襃襍煲衞苽䒷苐莅鴂齩萠蓚蒭䓻蕋蘂蘐揑覉覊覔鱅覼詾詉謌譃讁譌貭賫賷贌趂趦跔踨蹏蹷蹵躧輙轜鵄郄酑酜酙酧酼醎醻麨遖遌釾鉢銾鍫鍮鎺鐧閗閧阸隃隖隁隽霃霡霱靟鞟鞴鞸鞺鞾韈麿頟頮龥顇顋顦顬颴齚飜飦饂餹餻齓饊齅䭾駚竈骺骽鼂鬪鬭髢鬂髿䰇鬉䰄䰻鮏鮝鮰鰌鰕鰊鯿鰮胨胩胬脎�DW氹乪陁売祢栢脇埗䓪搵蔴䃟椚鰂疱菓煱樋橺髴瞹攰涖嘷朥樫絝遡亘粦笹奵㛇灿溋靝鋐坔㻙憙瑠焿礮媖鍈暎俽鍁㙔嵵瀞敻炍廍悧窰彣珷瑨疴魩½⅓⅔¼¾⅕⅖⅗⅘⅙⅚蚒蚠蚭蚲螥螱⅛⅜⅝⅞蟚衏衠袇袏袐裦裿褀褤襇襔襥覀覑訜訩訫訸訽⌒誐誔誜誩誯誴諪謟‰謿譍譞譢譩讛豑貛貟賔賖脒脱脶腟腭腽膓膪膸臁舩舭舮舾艢艪芈��Y�\��\�\�	\�\�\�\�T �"T%�'P*�,L/�1L4�6L9�;L>�@<C�E<H��J	�����"�$'�),�.1�36�8;�=@�BE�GJ�LO�QT�VY�[<M���O�eh�jm�or�tw�y|�~���������������������������������������������������������<R�T<W�Y<\�aD\	���������������X�����P��������������L^����������������������������������������������������������	������������������������������������������������������������������<��^	��������~��_	�����������_	��TT�_	������������������_	��������������������������D�,`	����������������p`	����������������ȥ�`�R,E	����~�`	����
��`P��`�`�`L�a	���V�X�����������L�K�E������������ a	�J���K���������R��Цpa	��������������������������������������������ƵƶƷƸƹƺƻƼƽƾ��a	�B�C�A�D�����������������w�xT�4b	�S�e�F�G�E�H��|b��	�y���k�_�A�������������������L�������Fا�b	�����r�����������c	����\�4c����������������������������������������������������������������	����Lc	�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�A�B�C�D�E�F�G�H�I�J�K�L�e�c�M�N�O�P�Q�R�S�T�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T������������������������������������������������������������������������.pd�������������������������������������������������������������������������������������@	�|e�w�}�x�~	�z�{���}�u�t�s�r�q"�8f	�������������������������������������������������������������~�������������Zd�|f	�b�c�d�e�f�g�h�i�p�o�n�m�l�k�j���v�y����������������$g	�������S������������������g	���������@�����O�N�M�P���U�V�]�[�X�Y�Z�\�W�^�]�����W*��g��	�������������������f�el�Ph	�l���k�U�T�\�[�����h	�wfN�h	�A�B�C�D�E�F�G�H�I�J��h��	������������2�ihaP����a,btb�b�b��,cDc�chdte0ftfg�g�gHh�h�h�hi0it�8i�@�B�C��	�������q�r�m�n�u�v�y�z�i�j�E�]�e�f�Q�R�������������������������i�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�zȳ	ȱȲ�����{�|�}�~ǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻ��@jǼǽǾǿ����������������������������������������������������������������������������������������������������ȴȵȶȷȸ������	.0k	�yfN<l	�A�B�C�D�E�F�G�H�I�J����:�Pl	�U�V�P�Q�R����|��l	���W�S�����O�����l	��4/�l	����l	�D�m	���$m	�H�L�����oB�8m	�B�\m	�}"�pm	�gbd�m	�^^M�m	���/�m	���a���m	����m	�|��m	��BZn	�q�&n8j\(k4l��P�Hl�l��l�l�lmm0mTmhm|m�m�m�m�m�m�mn nƭ(n	����n	�M��n	�� �n	���^��n	�J�gJ��n	��fNo	�}<Qo	���_0o	��������Do	�E�`o�@�B	�C�����E�V�T�W�U�F�����M�������B�A�@�@�C�������[�F�������A�U�����������X�B���P�����c��˱�Z�����Y���o�D�d���[��ήto	�@�D���[�G�\�������E�G�F���������C�������A�����A�E�^�]�t�p�D�����A�g�����a���K�hp������ܱܲ���F�����\�E���G�H�_�_	�����Q�����b���R���@���E���`�����������d���������F�G�F�]���bܳ�����H������R�q�����������������T�S����	���G���T���J�K�L�M�I�P�j�f���Q�a�h�N�O�H�e�g���G���H�T��ɰ����ɺɮ���������I�������qɱ��ɵ��ɹɶ	ɳ��������ɫ������ɻɸɯ���g���������J�~������ɷ���������������Cɭ�f�B�����g���D���������[�����`�h֯�r	�d�����������G�]��˽���D�������b�^�����Z���e�E�H���@�F���c�A�i�\���_�@�a��˿��������������˹��˸˼�������˳˵������s˶������˻˴��˷��˺�K��	����������������˾˲����������e�U���f�����������������}���J���������I�Q�]���������KZ��t�����Y�P�X��	�������T�������[�N�W�M�������U�R���Z�����O�\�S�L�H���_�`�������l�������������������������������{���L���uP��n�n�n�noo(o<oXolo`pq�q�r�s�t�u�vް�v��	�������������������������������[�������������������������������\������������������������������������������ ��v�c�W�M��	�\�b���U���Y�R���V�����N�g�Q�����f�����X���S�O�]�P�N�Z�`�a�����[�^�M�_�����d���L�T�e���������O�������e��b��w�����^�W	���_���U�X���Y�����]�S�R���������Q�\�Z�T���V��������������ܷ��ܽ�����ܺ��������ܿ����ܴ��ܵ���x	ܾܼܸ��ܶ��ܻ��ܹ��O������������������P�������Q������������Z�����������������R��������������������y������������������������������	�����������S�������v��w������u��������x�_�������������l�k����(��z�a��	���S�R���������T�J�I�K�����U�������g�^�Y�i�Z���\�[�`���]���^�V�J�������W�����������@���U�L��������������j�`{���T��	�X�L�N�X�T�U���A�j�Y�`�_�����������U���A�~�a�Z���a�������[�N�\�]�����V�����Bɼ�L�K�����M�N���k����������H|�`	���I�����^���[�������������h�������a�_���@�`��������L�Z�������L�a�R�c�a�����������������Y�W�X���b�������0}�M�N�}�b����������ɾ�Z�c�k���F	ɿ�D�Eɽ�d�e�G�C���h�����l���m���f�n�~�P�O�{���S�Q�R�g�����������������������h����������0�~�������c��	���h���d�g�f�e�b�i���������������������������������������v���������i�k�j�l�����j������������������������r��A�B�����Z	�@�A�B�D�����C�i�k���l���m�����������O�n���t�\�[�����H������U�V�T�W�o�p�o���i�����p����������������l���k	�D�i�j�������q�����n���U�����������������������~���h�C�D��E��������y���U���c���V��������r�^�S��	���^�s�I�q�����m�������c�b�����_�����l�`���K�J��X�t���������o�����E���������������K��������8����������d�����u�����c�b	�m���O�V�����������o�n�m���R�����v�e�d�A�r�����`���U�W���g�f�L�M�s�Y�j�Z���������o�������z���	�����m�������������t�u���w���������p�p�������������d���z�e���������F�����x�F�������X�h�O��|�	�H�������S�e�����Z���B�������������@�����q�y������O���j�y�t�o�n�u�s�l�z�m�i�x�w�v�k�r���A�q���b�{�p������D�	�S�Y�U�[���X�N�Q�T�P�W�Z�O�R�V�\���C���B���~�{�U�g�|�[�]�u�p���zʥ�}�_�a���h�x�t�v�\�m�Q�v�s���d�E�n�o�w�l�j�k�qʡ�^@�$��rʣ�f�c	�z�bʦ�e���i���Z�`���{�|�����y���������������������O�����������P�������������I�K�M�������L�E�A���D�I�R��������C����	�F���H�����}�Q�M���S���J���G�����B�@�W�����N�����~���H��K���y��x���t���}���r��C���O���F�y���E�B�w������J�|�L��ĵ��s�~�{�@���F�G�z���v	�J�����u��������������D���c�����O���N���D����������@��������������������B�C���A���C���	���Z�F�����B����@�Gԡ���E�D������R���@������f�U���A���������A���w����ԧ�����|��Ԣ���v�{�z����ԥԨ�s����H���ԩ��	�����~����Ԧ����Ԫ���tԤ���u�x�}���������������K���y����ԣ�����[���F���n���I�E���q�r�j���������u���x������q������	�����n�������v���{�o���f�s�m���y���������c�����z�l�r�t�h�w���g���������i���B���������p�I�����J���L������̶Ċ�������������������������������������������������������������V��	�������������_�������m�����M�K�����������U�Q���K�����T������N�P	�S�N�n�����I�����L�����J�O���H���������M�R�R�������O�����e�G�M�G�D�P�G�S�T�Q�J�B����R�]�F�I�H�H�C�E�KP����A���Q	�k���������O�j�����N���P����@�O���@�E���U���B�����A�����������C�������D�@�Q���F�����W�������������{���������}���~	�V���W����z���|�S����P�������X�\���Y�t�o�[�`�����V��������Q���Z��A�Y�@�X�W�[�Z�����\Է����������	�����m�o�n�������d�������]�����}�|�_�^���]�����o�yʩʨ�w�z��ʧ�^�x�F�C�����������T�V�������p����H�I�E�F	��Ԭ����ԫ���|�����������_�����I�H�G�`�k�g�Y�n���e�B�b�f���d�c���e�a�a�`���f�g�������b���cX�D��}ʪ���d	������ʭ�{��ʬ�~�������|ʯ�o���������o�R�������Y��[���Z���@�X�W��������������V�����\�A�f������	���U�n�����h���g���T�h�Z�i�����X�^�U�Y�[�]�W�j�V�Q�R���������S�\�������j���������k�B�i���P�S�R�W�N�k�Q�P�l�Tܸ����X�G�J�m	�O�U���I�J��Ժ�V�M���H�L�l�I������Ա���n�����ԯԽ��Կ�������ԴԼ������ԾԹԲئ԰��Է����ԭ��Ե�o��Գ�����J������ԻԶ�K��Ը������	�����pԮ��ءتة��آ�����qؤ��ب��أإ�}��زرخ�������Kث����ح�~ذد��س��ج`�ԓ�Y��	���rا�������������������������������y���s�����t���������������������m���b�u�]���c���_�f�W�����\�����U�[�d��	���Z�`�e�V���^�b�h�X�a�����g�^�Y�����Y�K�W���M�R�N�Q�\�v���[�w�J�P�Z�O�x�L���X�y�z���n�M�m�O�J���L���	���N���P���I�K�\�{�������|�������������o�S�R������a�b�}�c�B�[���������h���G���R�E�����_���A�����������i�S&�x�	���Z�z�~ʰ���������B�`�Y�L��������i�~�p���g�h���]�X�����������j�������[�����q�������i�j�H������h�`�ʱ���k	�a�C�_�`�^�Z�����������a�b�����M�N�O��������ش���������������j���]��������k���f�����l�o�����n������0����q�p�m�k���I��������	��ʶʹʸ��������ʵʳ������������ʴʻʷ������ʲʺ�����������g�o���O�H�p�S�D�K�����f�E�d�L�P�c�@���Q�J	�M���r�i�T�R���n�l�I�k�G�F�j�h�q�m�e�N���������o���g�c�s�b���l�������p�����V�v�d�����f�m�q�u�r�k�n�����h���j�i�t��.���e���������������U�\�b���[��	�`�P���U�_�\�a�Q�[���T�R�c�S�W���X���Z���Y�������]�^�������d�������������@����p���������������C�������D	�������������������������B���������������A�c���������������������������������@ػ��ظ��ؽ�����B���	�����������������������G���C��ض��x�����A�D����غط����ع�pؾؼ�E������ؿ�ص���B�@�C��D�@��F������������A���A����	�������B����E�������g�������n�������z�p�v�k�y�x�|�u���t�����m���{���o�r�w�q�l�����g�s�U�a�X�W�Z�\�l�_�V���T6�̝	�]�[�Y�_�^�c�^�`�b���`�W���V�U���X�Q�R�Z�S���\���[�T�������������Y�����������������������T����x�̞�\��	�]���C�������������������l�m�n�������r�s�����������s�U�u�t�V���������]�e�A���E�G���F�������}���������^�p�������r�����s�v	�t�u�w������ʼ����ʽ�W�X�@�v�x�z�w�{�y�������p�������������f�w�����h�g�c�_�`�b�d�a�h�f�e���Y�J���������I�C�H�G�K�F	�������I�����K���H�J���U�H�V�I�J�i�������~����������������f���g�e�d�]���������d�_�o���x�����f��>�l�	���G�i�g�[���N�M�L�L�M�������p�\���t�������y���|�������K���q�W������ʾʿ�J�Y���N�L�����r�����u����������\�������	�Y�~���Z�}�@�W���x�������j�h���k�i�j�^���P�Q�p�O������[�i���a���������������s�w�v�p�d�z����������½8�	�����X�����������������������������B�����������h�Y�b�]���e�c�\�i�l�g�`���f���a�d�[�_�k�����^�j���������q���s����	���Z���rΫΤΪΣΥ�}�{άΩ�y����ΧΨ�qΦ�|�z��΢�~Ρέ�P�����A���o���n�l�k�n�]�p�o�s���q�pή�r���m�i�l�mF���q�r����	�S�R����T��[�X�A�Z���V�^���[��U����C��W�B�\���]��Y�\���D�]�@�������Q�������������������������������	�����R�^���O���O���P���������_�e���������g�S�V�N�P�U�T�C���R���D�`�M�Q�����~�t��z���a����ʾ̦���	���b����������������e�g���h�c�b�l�j�j�m�d�i�k�f�c�a�f�`�e�d�^�h�d�i�c�_�g�j�b�e������������������f�r�	���D�E�`���S���������r���q�����g�����t�{�������_�W�u�����������t�C�W�v�w�x������ί�f�i�y�]N���	�������x�l�|���h�����������D�����n�����m���o����������γΰαβδ���C���t�s�v�u���g�o�P�b�F�a�c�`�h���U�E��\��V�����W���T	���i�Z�\�E�[�Y�X������������q�o���m�p�n�l�����m�k�l�n�����������n��z���~���}���F�@�������X��ҿ<��y�u�z���x	�������������������r���j�����Y�j������θ���q����ηιζκ���y�u�w�w�x�x�vε�G�J�K�H�g�f�d�e�I�k�h�$�	�Z�[���\�]�_�a�H�G�Y�`�^�������������������p�s��r�t�q�t�u�o�s�s�q�p�r�o���f�F�G�������U�����������������{��V���{���f�V����	λ�������|�����l�������I�}�����u�������������E���q�r�s�������p������μ���z�z�y���i�L�j�M���F�{�]�q����b��	�������u�v���t���A�s�����������t��ν�k���J���U�������������{�m�C�n�l�^����v�m�L���������������w�v���������u������ξ������������	�}�|�{���H�O�o�r�p�N�u�q�P�t�s�G���Z�a�_�`��K�D�L�c�n�w���v�x��w���H���u�����@�Ю�H�I�o��������	�{�������������������������p�N���x�q���������y��������������������������������������^����w�x�yxzX{@|(}~�܀����t�<������܉��������|�h�<�����̓����p�X�(������؜ĝĞ����d�T�0����Ħ����T�4������Ȯ����.���t�������k�J��	̢̯�~̮̩����̪̭��̬������̣�|̥��̰��̦����̨�r���t�{����������̧�z̫�����}̡̤��ο��v�K�t��������ѡ������������	�������������G��������~�}���|�������J���������~���������������������������K���Q���������s�v���ѤѦ	Ѩ�����SѬѣ�x�Q������Ѯ�Rѥ�Yѩ��ѫ��Ѫѭѧ�d���yѢ�w�L�����z���A�i���j���U�^�d�M�|���e�`����V�����~�T�b$�l��e�I	�c��������]��H�{��d��Y�b�W�X���t���[���_���\�����f�c����Z�}�q���s�����������k�o�@�Q�m�D�q�e�F�S�i�l�G�N�H�Nf�X��s�T	�J�O�C�^�u�U�r�A�P�v�]�p�N�M���t�E��j�B�K�w�M�R�g�L�P�����x�h�����\���p�h���l�n�O�k�[�j�_�������Z�@��P��q����	�X�i�m���O�f�g�A�W�Y���o�y�r�������}���G�R�F���T�|���E�z���C�D������z�n�������{�f�����������H�y�B�z�����S����0����{�~�y	���~���x���_���������|�x���t����Q�v���}�����w������������|�{����z��������}�~�������$��~�|����	�y�{�����������}�����]���u�����������������V�V�������������������������x���j�i�h�a�J�b�A�������t,������	�����������|��������������������̱�����m��ѯ���������u�r�`�a�t�v�u�I�����I���l����p�����W���������X����̲����n����������	Ѱ�����v�Q�����~���}���������������������������������������Y���M�K������������������������������������Թ�����[�����Z����������	�������������������������������W�j�n�o�N�������\��̷̾����̳̺̼̿��̴̻�Z̸���̽����̶������	���F������������̹������������̵�������]�������������������u�^�v���������������A�����@����ѱ���C�������������������B��4��������L��	����������������Ѳ�D�����������v�����������������O��������Ѿ����Ѵ���^�����f����_ѷ����Ѻ���}ѽ�����Vv�����ѿ��ѸѵѶ��������Ѽѻ������������	����ѳ��������U�����������^�g���������Y�y���rզ���]�w����ա�������{�j�U������գ�i����բ	�s�����h���xե�q���tդ���R���o�������x�n�l�~�������w�|�����������p���m�z�v�T�S�������w�����W�����p�k�d�����z���j�J�g�w�}�k�n�|�\�m�l�~�U�y���l���i	�_���p�h�q�����f�e���c�]������ѹ�V��ݷ�W�{���y�����X�o�x�`�[���a�^�_�������]�S����<�t�������	���p���|ݱݶݪ�lݻ�i�z�{�b�kݤ�n�oݥݲݸ�j�dݣ�}ݺݨݩ�~ݴݫݵݭ�e���h�fݹݰݬ��ݡ�Sݯ�mݧ��ݦ�t���g�c��~�x�ݳݮ�Eݢ�s�u�����R	�����������Q�����L�K�������������O���b�����R��������T�������������������N���P�U��������d�	��������J����������������������������Z��������M�����������������h��������������v�M������������H������������	����������������]�������������������������������������������������Y��X���^���\�]�����Z��D�0��k��	�������[�B�E���F�D�G�l�C���W�N�d�M�L�K�c�e�������`�����������u�������������������[�r�������������������F���	�����G������������������է���������������v�����������u�x���s�w�t���q��ݼ���V����������������������������H���������B	���y������ݽ�u�����������R���z�{�r��W����������S���H�����|���s��������_���������I����
���	����������������ը�����}���~ݾ���Y�X�������J�I�O���^�J������������������������������w������������L�����	�����������@��������������������������������������P�M�������S�K���N�Q���L��O���R���������������T�F������	�������������b���������Y����������������լ��իխ������ժծ����թ�K�c����٧��٢������٥٨����������٦��٣١��������٤�}�����y��ݿ�v�w�u������{�z	����������x�t�z�����\����Z�������������������������������������������������l����	��������������������������������n�K�m�Q�R�f���P�������������X�����������T����������������T�\���٩���|��	�������B���A����������������կ�������d�����z���^�a�g���������������{��������|�������������������0��Y�x�Y���������C��	�G�B�E���������@�A���A�@�F���D�������W�\�y���S�������r�W�����C�r�M�N�F�X�H���S���I���������V���Q�O�� �	�����������J�P�D���������R�����U���E�L�����T�G�K�������z���������������������f�X�[�\�i�E�V�L�b�J�[�E�e�R��A�����D��Q�a�`�F�X	��_�`�c�Z�K�S�f�Y�a�m�V�X�����C�j�c�]���l�g�I���m�P�H�d�\�T�^�b�G�Z�Y�O�_�U�W��h���]�N�M�B�g�^���W���Z�U\�������M�Q�H��	�����������������w���������������������������������E���������������������������������������������j�������������������������������������������������	���Q�|�����������q������������մյչ����վս�����հ����������������������������ձ������������	�ղ�������������X��ճ����������պ��������ռ��շջ��ն������տ������h���{�o��"�����	�x���������������l��ٽ������������٫����ٳ������٭��������ٻ��ٶ��������ٰٵٯ������ٱ��ٺ����ٷٴ������������d����k�j����٬����ټپ������٪����ٲٹ���ٸ����	�����I�O�A���y���������k�|���}ٮ�i�����������������������������o��������������������	�����������������������lո���������������������������������������������~����ٿ�����m�������������������b�������n�������n�������z�@�E	�J�H�^�F�X�}�_�B�]�g�G�U�d�]�[���@�Z���o�Q�a�m�I�^�K�Y�g�D�k�a�M�C��q�W�h�`��e�S�f�E�P�L�N*����r�`�_�n�O	�b����T�c�l�j�A�V�i���b�R�������������}�����A�������������u�����������������������~�t����������l����������B���������������T����	���������������������C���D���������������������������@�E�F�������v���G�����������������������t�����	�H���I����������J�����������w�K�������L���������������������M�������������������x�����N�����{�~�����E��t�����O�A���H	���P�I����Q���D�J����@�����R�G����x����������C��F�S�B�������c���h�i�T�v�b���U�����f�����e���V2�\�	���g�d���������W���Q�N�W�V�T�O�r�X�Y�P�q���S�p�X�R�M�������o�L�V�U�U�h�Y�Z�T�X�S�Z���W������t�P���	�������������v�������������V���������y�����������Y�������d����������������������������������	���������p�c�e�q�d�������z�l�������[���K�����j�Y�w�������B�Z�[���n��������������k���\���y���\�������N�e�o�f	�p���������������������������������������f�g�h�������������������L���l�Z�O���_���q�g�����_������:��������u�i�j���������������`�����C�H	�������e�h�s�i�������]�����j���B�A���C�@�b�@�A�����������A�B�@�{�����k�|�������������������M	���[�����A���]�a�~���n��I�J�^�^���t�k�l�Z�����D�����������B���������_�c�r����ɡ�����@��ɤ�d��ɣ���������Dɢ	��������@��������������`����������E�������e���[�Y�L�Q�S�L�M�U�a�R�O�Q�V�Z�X�b�Z�K�n�M�\�T�W�c����E�G�^�U�N�J�Y�V�H�I�C�O�P�[�]�P�N	�S���\�W�R�]�F�T�K�X�D�����k���u�~�_�������j�z��q�d�K�b�f�e�B����m�o��v�h�f�g�uB�t��G�p���n�s��J	�u�y�e�c�I�}�M��O�@�l���k�}�r���u�x�|�A���f�~���i�_�d��`�N�^��������{���t��a���T�����L�w���������g��l��|���hϤ�w�i�jϧϪϬ�t�v�{�I��ϥϭ�{�s	�d�~Ϣ�x�z���}�}�pϨϫ���z�k���m���x��ϩ�o���^�H�|�w�v�n����ϣ�����y���������rh�h�Ϧ�y�~�����\������	�������������t�����l�L���C�m���U�[�W�J�M�F�G�J���V�_�E���@�N�B�O�Y�n���D�h�H�Z���H�E�f�Z�g�a�S��`��b�o���e�c�I�T�����A�G�`���Q�C�p�i�P�K���K���\�X�]��	���q���������������q���������e�����R�P�r�G�����[���U����G�D����g�P���	��d�X�c�N�����O�I�E��@�Q�Y�B������D�^�F�\�������S�����H���F�J���h�b���_�]�f��a�R��`�A�E��W���V�g�T�L�K���C�sJ�L���	�t��u�M�d�����]���������v���������������w�A�Z������������I���������M�D�h�x����������J�C������U�V���H�������������H����	���D��������������B�~�y��S�K���Q�������z�W���A����G�E�B���C�O�L�T���@�F�G�����F�E����i�P�N�R���o����D���	�j�����k���@�j�x�a�`�F���_�I�J���h���^�{�C�����R�H�K�c���j�b���W�������i���U�L�Y�e���|���T�}�M���l���P�Z�d�(��G�Q���[�����N���E�S�g�����V�l�X�f���O�������D���]�P���~�\�i���m�A���n	�����{��������}����n���w�m����q����s���u��R���S���}�o��������u�~�������|	�o�|�v�t�������z�w�x����z��j���p�p��y�x�����{��t��������s�����r�����{����y�������	����P���|�����v�D�N���M�Y���K���O���F�����R�������T���^�����W�[�`�U�I���������L��q�H�_�������a���V��\������k�J	���E������A���Z�B�@���X�r��Q�P�]�G�����������I���@���A����C��O��B�����D�F���E�D�J�s�G��F��������������E�B���@��	������A�����N�C����}�����Q�����������S�Y�W�������Z�R���V�U�[�������T���l�����X�t�P�u������q����o��Z���|�d�P�H�(����ظ̹��������x�l�p�\�@�(����������x�d�T�(�������������������l�l�T�H������������l�d�`�X�H�D�@�<� ����������.������	������p���m��n�������s�r���x�_�e�y�\�v�s�g�w���t�^�a�b�c�f�n�]�u�d�h�`�@�]�j�`�k�h�_�\�^�b�e�d�g�[�i�c�����f�i�a��������	�������������v���x�����V�����y�������������������W�e���l�����������������W�A�^�_�_���b���_�`�a�M�����������X�Z�U�R�T	�������������V���S�P���W�Q���Y�E�vϯ��ϳ����������϶����������ϲϱ��ϴϵϮ�������v����ϰ�����w���z�����w�x�y�P	�L�n���v�{�Q���l�r�k�u�W���q�M�O�z���j�m�s���t�|�p�N���������������m�N�I�P�L�@�X�J�W�i�H�[�R�l�K�S ����V	�Z�O�L�T�j�k�Y�M�I�[�x�Q�U�D�����K���H�I�e�O�M�Y�b�X�L�`�^�_�J�c�N�O�P�\�Z�K�]�a�Q���R�M�d�S���T�vb����U�p�w�yޡ�f���k	�R�O�z��ޢ���V�}�_�m�~�l�z�����x��ޣ���q���|�o�v�r�n�������������u�W���N�{�S�s�{�X���Y�t�|��Z���[��h�����	������������\�]���^�������_�������g�d�p�j�l���f�n�`�a�m�k�q���h�o���b�c�e���b�r�c�i�d�J�Q�e�U�S�K�I��\��L�M�H�U���G�V�Q�O�L�P�N	�R�R�M�f�N�O�P�K���T�S�W�X�T�g�����\�b�`�������^�h�������a�]�_�����p�w��t�u��v�(�H��i��l�	�m�z�k�j�j�i�{�k�l�l�j�k���m�n�����������������o�Z�����y�����������q�����d���������R�����e�n���bj�,���Ϸ�}	��������ϸϹ�f�P��ޤ�������n���s�|���g���t���B���e�d�c�`�f�����[ϺϽ��ϻ��ϼ���aҢҡ�~�S�{�]�^�o�\�_����R�p�g	�Q�k�j���h�i���lަޥީ�hިާ�����u�������s�t���Y�Z�i�q�r�}�q�p�n�o���l�������jɥ��ɦ�k���C�D�]���l���f�b�m�a������e�g�c�f�g�d	���_Ͼ�]�d�n�����e�a�b�\���^���c�o�`������������Ͽ�����������������b���GҨҥҧ�X�W�UҤҩ�T�VҦ�g0��ңҪ�����v	�b�f�e�n�y���h�w�c�m�t�U�s�a�d�u�r�q�`�i�����p�w�p�T�v�s���V�������u�R�q�o�q�t�r�U�x�S���r�sޭެު����r��ޮ�xޫ������	��ްޯ�������������v���u�~�}�{�z�w�x�y�|����_�\�]�W�[�a�`�^���d�e�������c�y�y��x�~á�m�n�m��������z�����������Y�v�j��ɧ���z	�E�{���l�j�k�h�h�i�|���}�m�~���k�g�j�f���i�����������l�h�H���c��������������������ү�t����������	�����������������������u������ҴҫҶ��ҮҹҺҬҸҵҳҷ�_�]����ұ��ҭ��ҰһҲ�^���Z�\���v�����x�m�k���l���s���t�p�{�u8����r�o���y�n�w�z�q�y�[�x�w�v�|	�������������~����ڡ�`��ڧ����کڢ�Zڦڥ�[�a�bڨ�X�}�{ڣ�z�_�|ڤڪ�Y�^�\�]�������W����z���޷��޻��ޱ��޼������޲޳	޽޺޸޹޵޴��޾����޶���������������u�s���������������������������������������w��������@�b�����A������	�������������}�i�f�e�g�f�Z���c���X�t�\�[�d�h�x�Y���m���z�����j�h�k�n���l�g���B�E�u�@���o�Fâ�D�{�����A�C�G�v	�t��ã�s���n�������������������������nҼҽ�}޿�]ä�{�������o�`������������Ҿҿ�~����ګ����@�|����y��������	���i�^�_���r�o�p�q�V�H�|�w�����z��������������{�c�d�����F�j�i����ڬ���������Y�z�k�l�n�m���|���r�p��T�q	���}���������~�������������U���`���d�c��b�a���V���{�z���������f�eڮ����ڭ����������������������B��D�j	�����sæå���|���s���Q���������o�p�x���t�������������������������������������Q�h�i�\�����n�l�����k�j�e��������m�����f	�g������֢֡���|�~֤֣�}������ڶ�k�jڰ�h��ڳ�lڴ�mڱ�g�iڵڲگ�������X������������������������������������H���������	�W�������������������������������@�������E�C�H�I��F��G����D���T���l�k�s�m�r�o�`�q�a�b���p�n���X�����	���t���w�u�v�����o���M��¡�N���}�O�~�L�P�J�~ç�xè�o���K�p�v���������U�~���}���������������������n�o�����G������q�m����	������֦���o��֥����ڸ�qڷ�p���J�������x���Q�q�p�����u�p���w�r���������K�t�R�r����	���������������q���r�s���i����֧���I������ڹ���s�����������L�d�u�c�y���S�s���n�x�w���v���y��������������P��	�������������������������������������������������v������ְ�����w�t��ֲ֪֭֮֩֫֬������֨��ֱ��֯������M��	��ڼھںڻڿ���ڽ��t���������������������C���������F���D�����E���A���B�������������@��������������\������������	�N���Q�O��M��P�B�k�}����~�v�z�y�w�f�g�e�x�{�|�h�@��|���{���A������|����z�~�}�Z�U¤¥¢��£�8		�T���{��é�y�z���t�w�u�v��������������f�������������o���������x�����u�G�B��|�x������͡�z�|�~�}�{���A��X�$
�x������	�����A�����������������������C���������|��������������ֹ�z�����������������y�������}���~�{���@�B�����B�_����	����������ֳֵַ����ֶ��ֻ�������K�����Y���v�����������L���������w�����x�����T���h�������N���Q�������	�����������M�M�����H���O�P�������J�K�����D��������������������������������I�����������N�����T��X�V��	�������S���O�����U�R��������Y���P�����W�Q�����j���������T��l�i���k��U�F�V�W���E�X�C��������V`��
	�G��������Z�W¦�[�]�\�X�Y�ê�~��}���z�}�y�q�{�|�~�r�t�s���w�������Y�Z�����[�����������r��ͣ�������͢	���������������������������������\�^�����������������s�ּ��ֽ��־ֿ��������_�������p����R����`�S��l���T���a�w�P�b�c�A	���������C�d�B�����@��e���������f��������g�m�H����I��_�^§�ë�š���������������V���r&�X�q�p	����ͤ��������������������������������������h�������������������������i�j������������h�L�}	�������|���z���{���y���A����Z�����X�@�W�\�[�Y��G�I�H�k�D�����G�F�������^���l�_�[�]���Z����	������m�p�����E�r�q�n�o�S�������J�����`ª¨©�g�n��íì����������H�s��ͥ����ͦ�B�@��������	������������������������X���������~�������D�]�^�C�B�H�C�J�����K�L���a�`��������������s�D�o��K.�����p��«¬	�u���q���������A�������g������r�����D�������������������s�m�E���M�����v�������ͧ���t��p���B�C���I�@�B��	�D�G�E�A�u�F�C����H�A�@�����������������������������v���w�����������������������������d�������z�����	�x�y���������������������������������z�����[�J���a�P���S�G�L�F�c�J���H�b�{�O�N�K�M�I���R�_�Q�E��������p��	�]���X�z���N�P���U�T�W���R�Q�������S���Y�[���V�O�������i�������\�Z���Y�q�V�����b���c�|�e����������6�L�`�h	�d�f�g�v�����j���������@�����t��x�������Q�y����w��{���z��������F���p�������O�����������N�x�$�������	����L�������P�M�����u���������w���c���a�g°�e�d²�j±�k�h���i�b¯­��f�l���òð���ñî����ó�����x���	�����w�y��������������������������ţŢ�����������������X���Y�m���~���Zͨ�E�F�D���^���]�G����H�I�C���I�O��	�M���K���L�N�����J���������������{�C���������������c�����A���������V�d�T�e�U�f�����a�^�`�����_>�����C����	���������k�����T�a�������~���|�}�����W���S�X�T�V�R�U��³�\������z�{�A�����@�������������t��ͩ��������L���J���������K�������Z���S�Y���R�X�V�����U���T���������Q�P�W������	�����������������������������������������������������������������	���������������������������l���`����������������������������������[�F���h�]�_�a�e�[���Y�j	�`�d�\�X�W�h���b�Z�^�k�i�f�g�c���r�����d�����j�x�t���x���e���u�b���w�f�V�����v�p�������j�����c���q�����s������F�t�h�g�d	�l�i�m���y���n�o���k�\�����������������p�y�u�����r�v���l���t���������s�w���q���n�����z�r���������{���o���~��h	�M�������������~�����������������������������������������������������������_���Y�i���a�]���d�g���\���e�������`�Z�h��X ���c���^���b�[���f���O�Z����	�n�t¹�w´µ�o�v�qº·���m��¶�s�u¸�r�p���P���÷øô��õ�����ú�����ö���~�}����L!��ġ��	�����������������������B�������������@�B���A�l���_�v�q�p�N�t�u�����D�r�s���������������L�A�������������EN�L"���q�r���o�n�m���p�S�h�k�l�j���������D�C�����J�����H�I�K�G�E�B�i�J�K����	�����I�I�E�C�������{�����z���B�@�E�I���|�y����������<#���D�I���@�A���K�J�B	�y���H�F�������G���G�C���D�R�N���Q�J�P���]�K�L�H�O�Q�H���D�F�M�E�����������������|�������o��������@$�����J���j��	�t»����Ģ�����C��I���u���u���M�F�`�[�_�]���^�\�M����@�i�j�n�o�h�k�g���@���p�z���|���}�d���������������<%	�V���ù��D����������O�����N�b�������a������������L�B���A�U�s�m�l�n�r�q�������~�������y���xû�ýü��������P��V�8&�e���d�c	�����������������������D���o�p���~�C�A�B�{�|�}���������������������k����z�{¼��½�l�����,'��������`�T�@�$�����������������t�L<�����|T0	
�
���
�dPD���|hD�����l`P D!D"4#8$4%0&$'(.(ģ�������������Q��	�����A�R�S�@�B���T���f�������A�����@����q��������^�������������������sͪ�C�U�U�h�\�����g����()	���C���B�D���������F�G�E���T�t�u�E�����D���k�����������z�S���p�o�m�n�q�w�|¿¾��ťŤ���*��	��L�w���v�F��ɩ����ͫ�v�w�w�t�v�y�u�{�z�x�x��������ͭ�O��������������Ͱ�{�����|��ͯ�M�@ͮ�������M��^��*�N���[�G�H�]�W�W�Z�c�a	�I�g�L�d�\�Y�I�b�D�e�V�_�F�K�`�w���X�J�^�N�E�f�������K�������������j�����l�N���k�i�n�����H���+�o�m����	�����H���������Y�����������V�}�N�����E�G���H�P�L�J�M�Q�����F�O�������K�I���������������B�X���Q�O�����,	���Jߡ���N���K�����P���M�G���L�������������w�u�{���sߢ�x�r�{���}�v�~�����|�~�y�x�y�}���|�t�z�����T�����e�L$��-�H	�M������J��K����I�����A�D���C���������@����B����������������������������������n�������t�����x�z�wf�p.�v���u�s�����r�����y��	������}�~�b���þ�Ĥ����EŦ�C�D���������R�N�{���������S�������P�B�T�U�V�O�������h��X/���p��	�W���w�P���|������������R���Q��E�����C����ߣ�R��ͱ�i�Q���r�S���������������q�L�V�W�T�V�������S���U�[�X�Y���Z��@0ߦ	ߧߥߨ��ߤ�S�J�F�I�K�H�G�����������������������������ĥ�����F�������}�\�}���[�X�[�E�A�J�������K�M���N,�81�L	��ˢˣ�{����ˡ�����|�z�y�}�~�~�j��Ͷ��͵ͷ�Y��ͼ��Ͳ����������O͹Ϳ���ʹ����ͺ��������;͸��������ͽ��ͻ������n�$2ͳ���������@	�����A�y�Q�K�x���_�b�\�d�a�q�t�]�B�k�V�`�c�eТ�w���UС�Y�W�R�o�~�s�vХ���f�}�^�xФ�u�y�|�����PУ�{���]�l����3�p�_�Z�S�X�T�g��ӥ�[	���z�A�v�������FӨ���C�v�Dӣ�}��ӲӪ�~�Eө�x�|����ӭӤ��ӳ�tӬ�����s������ӫ�����r�\Ӧ���z��4���{ӡ���uӯ�FӮӶ����ӴӰӧӢ�����w��ӱ��	�y���T�u�G�����_���W�H�����s�������{�J�Q�I�M�J���^�`�e�y�����]�����h�o�u4�5	�b�i�H�@�w�r�����n�j�\���a�Y���w���f�c���s���d�z�l�K�k���L�����Z�_�p�v�A�[�g�m�����x�q�t�P�P�}���M�`���������N�����lv��5�`���}۪ۧ���hۣ�i�w���s�����t�]	ۤ�R��ۡ�u۬�p��ۯ�����z�����rۭ�k�d�o�c�a��ۥ�jۨ��۩���������~���v�f�O���^ۢ۫�e��۰�q���6	�m�������|���x�����������y�g�{�bۦ������ۮ�����c�����_�[���M�X�����P���U������ߵ�����������߿�������������ߪ���7߲	�������������Q��������߶����߱��������߫����߹߸�C�R߼߾�������S����߰��ߴ��������������������߻ߺ��߬����߭����߷����<��8��	���T߳���U���e��߯��߮�`��������������X����[��Y�����������������f�������Z����]����a�����U~��9�^��	�W���V���T�c�\��������b���_���������e���V�����^�l�����W�������s�t�g�f�b�����v�uߩ�_�c�]�p�a���w�Z�X�d�n�i�����:�O	�m������߽�[�R�U�{�\�S�Q�N�����e�����`�h���x�|���W�k�o�T�y�����L���r�V�j�P�^�Y�����l�}�z�q���L�`�]�X�F�N�M�M���I��;�@�C�����E��A�G�������h����L	�F����U�O��F����Y�J�T�����Q��D�H�B�V�S�P��������W���M�����K�����Q�N�S�@�E�R�D��A��D��<���M�O�����Q�I���P�B����R�J�G��U��	�v����H�Z�T�K������L��V��C�N����������~�[���~���������������������=��\���������	������������������������������������������������ÿ����������������������ħĩĦ���������>���j	��ĪĬ�ĭī�������kĨ�]���^�����������������������������������J����������K�I�G�H�L��������������
��?��	�������E�F�G���������@�r��Ӹӷ�@�B�|�{�R�����������~�X�Z�Y���W������x���}��������ЩЧЦ�i�k�jШ���S��L�|@�L���Z	���ӿ�A���FӼ����ӽ���C���Wӻ��������H�RӾ����ӹ�G�D����Ӻ�E�B���C���Lץ�K��ר׫�H�F�~שקפ׬׭ׯװ�}��\A�Eעס׮�Gף�I�Dצ�M���Jת���L����ۿ	۴����۽۱��۶��ۺ۸����۲۵��۳۾ۼ۷۹ۻ���r���a�N������������������������HB�����������������B������������	�������`�T�j�������e�������g�����h�������m�����������������i���l�����f�����d�4C��������	�����a�T���������������k���������������������������������a�E����������d���`�b���uT�D	�a�����k�g�l�e�`�o�c�G���\�h�i�_�^�l�b�]�c�n�[�m�j�������f�����d�F�Y���]�Z�a�g�\���p���j�_�k�f�m�^�����`�n�X�l��E���I�d�c�h�[���e���b�i���e	���f���������L��������������o�����������|���������������������M������������������F���������r�����g�������������h�N����	��Įį�����O���B�E�A��C����D�Q�O�i�N�@�P�F�M�P���������������������Z�n��������F��Ъ�Q�����u��	��G�����lЫ��ױ�N���������������[����������DЬ��ЮЭ�m�����|���I�����������J�N���M����\��G���K�L������	���Pײ�U���T������׸�R��׳�S׿׻׽׷׾���O׺�V׹׵�׼״׶�Q����j���������l�����������������m���H�����������E���c	������������S���������������������������b���\�n����t�B�A��v�@���n�p�o���r�q����s������I�����o	���������������������������������������u�c�p�q�p�|���w�y�����q�u�x�����{�s�t�z�r�v���r�S�q���w�����s���t"��J	�u�x�X�������������Y�������v�����F��������������������������İ�����I��K��H�JŨ�Rŧ�������r�H�I�K�J�P��H�K���n����	��������m�n���W���V�o���������`����C�F�E�D�������������������y�{�z���m������ı�q��T�Sd�tL�[�N�s	�~�}�S�����T�d�~�\�^�c�����OЯ�o�����������C������A�@�B�����U�s�I�G�H���������}�|�}�����IJ�L�Uũ���L��DM��	�q�rаб�p�T�R�Q�X�P�Y���V�S�W�U�O�_���Y���^�`�Z�[�����X�����]���\���D�F�t�����E���������I��0N����	�����C���s�����������B�����@���G�������A�����H�����������������������������P�M�E�J���Q�����r�GP�N	�O�K�N�L���F�����l�L�x�{�N�����M�}�����O���K�����y���|�z�����w���������J�u����������������������������*��O��	������������������Q�����������������������v��������~�������������������������������������������P���K��	����������t������������������������~���������������������������������������������������������l��Q����A�u	�O����������w��������@�B�����C�������w������ķ��������ĵ��������ĸĴ��Ķij�x����@�N�M�P�Q�A�V�[���RŪ�v�X�c�W�Z�Y	�C���B�@�A���������@�M�N�g���m�������y�z�{�P���������X�������V�����h�b�~�����������b���j������|S���V�W�^�T�Y��	�Z�\�]�[�e�U���X�W���O�R�I�P�J�K�L�N�P�S�O�Z�T�S�Q�R�M�c�G�H�F���Q�Q�O�N�X�R�T�V�U�W�S�M���[�\���g�����e�]�^2�dT�f�a���`�_�W�Y�d�X	�V�c�m�d�i�a�e���h�i���k�n�Y�f�l�`�_�e�������d�k�j�f�f�g�m�@���B�y�A�������x���������X�Z�����z���R�P����t�hU	�����D�D�����Z�a���S������������v�������b�������H���V�U�W�Q�R�����������������F�Eˤ�\�[���{����lV�����I	�Y�Z�X���������|����������������G�������s���t�]�^�������h�f�c�g�e�d�y�}�J�����L�Q���S�R�U�����O�K�M���T��@W�P�N��������	�������[�`�b�T���������S���U���������������������������������@���z��������A�����{�������������:�4X�	��B�����H�I�a�J���W�|ĺĹ�R�C�~�B�S�\ūŬ�v�E�B�D�P�|�}�������n�P�l���q�������h�p�_���a�k�c���`�f���j�i�d�e�b�U���W�X|�$Y�Y�Z�[���V�\�G���Z���[�j�m�����i�p	�r�h���o�C�q�n�o���������Z�Y�\���j�i�\�]�����������в�v�u�\�]�_�����E������$Z���X�}	���W���V�r�_�b�`�a�e�T�f�c�d���V����������������~����F�L�N�K�M���T���o���w�������[���l���k���[�G�������g��`���	���^���Y��l�]������������\�_��Z�^���h���o�n�����p���m���r�i�k���g�j�q���s�s���F�]�������[�a�YB��[�b�H�X�]�c�`�_�^���W�\	���Z�I������A�C�@���E�B��F��D�����������������������W�����m�����������������������������\�����	����J����������������t�D��E�������A�@��C�����B����������K�D�R���O�S���L���Q���������P���T���M�~���]�Nļľ	��Ľ������Ļ�C�E�V���U���aŭ�`Ů�^�]�b�c�F���_�����������\�Q�P�O�p�������n���`���I�������O�P���Q������^��	�U�R�������������y�x���c���a���b�������m�������n�����}���S�C�A�E�F�L�H�J�T�B��I�U�K�D�G��b�@��a�c�����uJ��_�w�v�{��	�x�t�y�z�����|���g�f�d�e���������M�N�I���J�����������K�L�H�@�������G�p�����V�������������������������`��W��������F�G�H���X�I�������X�Y�W�V�Z���������������X���Y�W�F�dů�e�H�G	�Q�a�������H���y�������k�n�l���m�����_���`�_�^�`�����a	�V�U�]�_�^�u�x�w�t�|�{�v�z�s�p�q�r���v�s�t���I�����d���@�A���Y���������G���|�G���d�A�Z�[�������[�����N�D�w�c˦��b	�~���������e�y˥�\���������]�b���������������x�����n�a�d���vжд�|г���~�{���r�}����е���z���j�����g�n�E�i�����l����R�|c*�*�+�,�-h.P/8001234�4�5�6�7�8�9�:�;�<�=�>�?t@TA@B,CDE�E�F�G�H�I�J�KlL<M(N�N�O�P�Q�RtS\T`UdV8W,XYZ[�[�\�]�^�_�`�a�btcld.td�h�e�}�k���m�f	�^�u�b�����p���z�v���c�z�~�w�|�r�o�q�}���u�x�t�y���{�s���A���M�e���g�i�_�N�f�j�`�F���B�G��O�~���e	�P�E��r�J��C�B���M�L�K�I�N�}�D�F�H���x���������������a�����a���R�C�A�S�b�D�B�Q�P���O�������M�N����������������hf������������������������	�����������U�o�R�S�Q�T��˪˧ˬ˨����˩��˫�@���W�o�����������������b�f�y��имй�Tg	������лнп��о������������к����������q������p�r�����������������������з�������l�{���V���W�T���n�SZ�4h�Y�X�k�\���[�P�Z�U�m	�������Q�����R�����n�q�i�m���l�j�p�k�h�o�Y�H�J�V�W�U�Q�G�Z�T�F�I�X�������������K�L�M�]�� i�\��	���[�\�Z�fŰ�������u�t�@�A����s�����������������z���_�a�]�`�o�^�p���s�U�T�S�����L�s�u�����������t�r�������]��j�a�^�_�M�`�[�\�J	�K�]�L�����������������y�����������������������f�O�P�N�c�R�����_���Q�^������Ŀ���d�����]�H���I���� �k�C�]���q�e�o�������V�\��������q����	���B���x�v�z�J���y�w���I���C����������B����@����C��������A���f���m���lb�l�j�b�q�e�o�v�n�y�g�u�c	�i�w�L�h�x�z�k�h�r�s�w�u�t�f�r�v�i�t�s�d�g�p�j���_�k�����������a�l��W�Y�e��m�Z�\�f���l�[�n	�{�d���b��^���c������`������@���X�o���g�]�p��q�������_����r���s��������C���x������z����������m���t���u������v����~��w	�����|���������y����{����w�v������}��R�K���x�Z�U���g�P�q�y�O�V���z(��n�e�T�q�c�d�N��X�t�y�s���o�w�u�h�b�}�W�~�{�x	�m�k�f�|�n�{�j�z��}�S�~�v�|�r�l�Q��������p�Y�i�X�t�������������D�����A�j��o�C�������	�������B�@��������@������C�E���E�������������B��������A�������������D�����������������������������p���|�����U�B�����y��������������������	�����������������������������������������D��������������������������������������
�q�����������s�����`�Y��	�N�c�[�����e�U���_�������a���W���X�]�b�������j�g�k�^�Z�h�j�\���V�������d�f���i�S�V���������������r�s	�c���q�W�a���l���h���r�b�e���t���m�p�������i�d�������`���������o���X�k�u��g�n�����������B���f����@�����0��s����	�����D��������A��������C��������������Y�������Z�����������a�f�O�h���I�d�j�N�J�K�`�g�M�e�L�_�c�b�[�^r��t�i�\����ű�m�p�l�n�o�i�j�g��	�k�hŲų�]���K�M���^�X�L�N���J�������������D�����S�R�T�_�U�^�V�r�u�t�h�s�����r�p�q�w��|u��������	�����������������������������F�����s�_���s�v�q�]�t�����x�w�v���u�O�n���������r���Z�~�[�h�g�s�\�`�j�i�����`�_�k�u��lv�l���o�p�D�m�v	�Y�q�X�r�^�t���������������a�^���f���b�����j�h�l�������j�������i�g�����d�����c���k�e���������B������8�lw���N���d���������_���������]�e�f�����������D�@�A�g�}�}�C	�h�E�������������������i�j���z�~�{�|�����i���k���h�����������kz�`x�{�|��	���l�B�Q�T�}���P�m���R�M�S���`���������������������n�����o�������p�����a�������H�q�C�|�����D�x��v�c��\y��	���{���E�r�F�����}�z�y���|�{�~�����{�����h�s���������t���k�������������������[���\�u�M�K���I�J�F�F�N�H�L��@z��	�������������������G��n�l�m��������w�x��E�G�F���P�m�l�k�d�����������V�z���|�~�}�y�����w���n�G�I�o��@�,{�q�p�m��������	�H�I�J���K�L���G�`���l�����U�W�X������ɪ���X���V�Y�Wˮ����˰��˯˭����������������������������|���B�@�����r������������������������	�������������E�����F�~�|�}���g�v���x�����I���H�K���J�������������������G���}��|ܣ��	ܢ�������|�~ܡ�������������������j�k�����i�������w��G��������G�H�O�I����x����y�o��������A���G�y���L��}����ܤܦ��������ܥ�n�o�m���l���[	������P�J���p�t��q���u��s�m�y������B�����H��ܨܧ���^�����s�p���r���������H��~��������]��^�_��`���Q	�N�K�P�S�L�R�O�M��������������w�v��x�~��}�z��{�|�`�H�I�����S�z���n���Q�R�o�{Ŵŵ�q��������E���G	�����F�W���|�}�~�C�����t�������Q�R�m�D���a������E�S�����M��ܩ��ܫܪ�������u�v���������������������������������������c	�b��d�������V�U�T�T�����A�@��������}���{�~�|�y�@�z�~������������J���K�����p�����ŷ��Ŷ�O�P�H�����i	���������������C�B�����������q�r�����������������a�W�D���������X�A���L�M�|P����Q�������N����ܬ��	�z�|�������w�x�{�y�����������[��g������e���[�����f�{�Y���Z�U�[���B�Y�X�V�Z�W������h�	�E�J�F�I�������H�G���D�B�E�C����F��������@��A����Q�N�O�P�r�V���U���t�sŸ�����I�`�X�������������������~�|���}�L��b�����a�{�w�t�s������	���������������F���_�`�a�^�]���������������a����ܭ��������������h����������G��B����D��u�R�S����	�t�����s���u�������u�����a�J�����������������H�O����������ܮ�������������~��������}����X�0���	������������i���G�p�\��k�j���������l�q�a�_�r���^�]���`�\�K�^�]�_�N�L�M�R�K�Q�T�S�P�O���s�D�������J�H�I���������	�C���D���X�W���U�T�����Y�vŹ�w�X�v�V�w���t�a�Y���u�����m�������������������������x�b�y�v�w����������	���������d�c�x���b���������������P�U���v�����`�W�V�w�L�����x�����������������������y�����������̈	�������K�J�������������������n�q�s�����r�������t���p���m�o�z���c�f�d�c�{�i�h�g�b�b�a�e�d���Z�|�^�[�]�\�Y�_�b�`�a�@`���	���X�c�����������M�����]�����E�F������}�����������U�`�^���]�c�a�����\�Z�[���_���b�x�~�����y�[�������Z�}�|�Y�{�X�z	�}���~�{Ż�x�|�����y�zź�R�����S���������J�v�j�����k���������z���������������z�����������������������I��������L	���c�����������J�����e�����L�����f���M���d�������K�b�b�������������|�������l�������j���m�����d�k&�����f��	�����f�d�e�y�y���\���Lż�K�����b����������I�������������������h�v�w�������W�n�q�p�o�g�h�f�e��h�h�	�g���O���P����������G�����g�i�h�c������������Ž�T�U�V�K�c�����x�i����������J�{���r�������������������@����������z�y���d�i�������S�R�Q���^��	�]�����L�������������������������|�������������{�}�x�v��w��� ��s���y��	�t�r�u����������|�j�{�z�~�����j�m���l���t�o�s�q�p�n�k�C�B�D�A�u��������������������.���X��	���������W�U�T�������������J�������K���������������������I�H���������������������l�o�V��p�����	�P���m�s�q�k�v���j�����r���n���u���t�����������������`�����������_������ſ�������S���������������������p��	���p������ž�Z�\�_�[�`�P�Y�W�����]�����X�^�������M�����������Z���\�[�y�x�x�w�z�@�s�t�����������`�	�����K�L�M���N���e�O���n���o���������P�p�������e�h�N�f�j�g���i���Q�R���S���T���������U���V�W6�4�	�g���h�X�Y�Z�[�j���O���P�\���d�����]�^�O�M�N�o�_��ܯ�������`�a������������������������������x�����	�a�������}�����~���H��o��k������p�����@��l��m�n��b�G�G��z�{�~�|�v�A�y��}�B�E���F��Ĕ��w����������c�C������	�D���d�Y���������������������Z�r���[�M�����x�����O���P�E�G�������N�������������e���H�����������������I�����������L������	���}�{�J�������|�x���~���z���w���������y�K�����������������a�������b�������d���������M����>����R���c���u���f�����^���������������������_����������������������	�i�n�d�g���k�r���e�o�s�j�c�m�l�q�p���h�b�f�N�O�a�`��������������������������	���a�]�b�^�c�`�_�b�a�|�{�����d���x�|�J���}�����\�~�}�������������������N�M�����P�h�p�q�r���������	�����k�m�l���u�������g���������h���R���i�����Q�������g�q�s�t�r�g�f�j�����^�����e�P�Q�S��t����������^�f������G�����	�Q���Q�S�����|�R�����������e�H�����c�g�������������k���h���s��i�����������`�a�����l����F4����j�t���m	�k�l��z�d�����H�u�������r���q����L�J�K�I���\�n�������������o�������f���m�v�w���d�}�u�n���������d��4�������	�x�R�p�e�~�q�r����������]�������g�����y�����s��������o���������^������������������|�{�z������M�(������}�t�����f�������N������~���u�����������������h�������������������i�j	�b���������������T�������S�g�j�i�h������s	�j�k�������������l�k�s���e���������������i�t�v���������ȡȣN�`fLg,hijk�k�l�m�n�o�p�q�r�s�ttudvdwXxTy8z${|�|�}�~�����|�`�D�<�(����Ĉ��������`�8�����|�X�,������������l�,�,� �����P�.���@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c	���	�G�H�I�K�O�P�Q�T�Y�`�a�b�@�	�h�q�t�u�w�y�{��������������	���������������@�EVĠ�F	�J�P�p�����	����������������	�����@�D�K�\�dH��i	�x��������^t�	���F�G���	�N�U�X�Y�e�i�k�l�p�r�s�����������	��	�S�b�	��������$(�	��������������������������������fH�	�����e���	��P"��	�� =Ȣ	���������E�F�ܢ�G�H	���	��������������������,�	��������������������nT�	�������	���������	���Z��	������4ԣ	������������������v�	�_�`�a�b�c�j�m�n�o�p�x�y�$��|	�����������������������������������������������������������d�	����������������<�	�S�T~�	�C�G�4�	�}��������L�	�� p�	�d���8�P�x�����@�l�������� �@�������Ԣ���L�������̣��\���,�D�h�|���D��	�z�|ȤȥȦȧȨȩȪȫȬȭȮȯȰ�0�	�����������������������������������������������������������|�	�J��w�x�y�z�{�|�}�~������������
	�	�I�����C�H�����]�^�����A���D�����������������������G�F�������H�I�������������������������������������������������������@�����P�	�����������������������������������������������A�B���a�U�b��ȹȺȻȼȽȾȿ����������������������������������������������L	X�������������������������������������������������������	�	\�	�F�G�������D�	�P�t���H�X���P�T���
��^�_�_�_�_$`P�h`�`�`$�X����h�a�i�n�v���� )xe��p�,�(�@������T
H�@�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_________________________________`_____________________________�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[����������	

 !"#$%&'(��	
����	

������	
��	��	

������	
��	

 !"#$%&��	

��	
������	

��	

��	

 !"#$%&����������	

 !"��	

��	

 !��	

 !"#$%&'()��	

 !"#$%��	

 !"#$%&'()*+,-./012345��	

 !"#$%&��	

 !"#$%&'()*��	��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()��	

��	

��	

 !"#$%��	

 !"#$%&'()��	

 !��	

 !"#$%&��	

 !"#$%��	

 !"#$%&��	

��	

 !"��	

 !"#$%&'()*+,-./0��	

 !"#$%&'(��	

 !"#$%&'()*+,-��	

 !"#$%&��	

 !"#$%&'(��	

 !"#$%��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*��	

 !"#$%&'()*��				

																 !"#$%				&'(	��	

 !"#��	

 !"#$%��	

 !"#$��	

 ��	

 !"#$%&'()��	

 !"#$%&'()*+,-./0��	

 !"#$%&'(��	

 !"#$%&'()*��	

 !"#$%&'��	

 ��	

 !"#$%&'()*��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./0123��	

 !��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*��	

 !"#$%&'()*��	

 !"#$%&'��	

 !"#$%&'()*+,-��	

 !"#$%��	

 !"#$%&'()*+��	

 !"#$%&'(��	

 !"#$%��	

 !"#$%&'()*+,-��	

 !"#$��	

 !"#$%&'()*+��	

 !"#$%&��	

 !"#$��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0��	

 !"#$%��	

 !"#$%&'(��	

 !"#$%&'()*+,-��	

 !"#$%&'()��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,��	
				
						 !"#$%&'	(												)��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./��	

 !"#$%&'()��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,��	

 !"#$%&'()*+��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*��	

 !"#$%&'()*+,-.��	

 !"#$%��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*��	

 !"#$%&'()*+,��	

 !"#$%&'()*��	

 !"#$%&'()*+,-��	

 !"#$%&'()��	

 !"#$%&'()*��	

 !"#$%&'()��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,��	

 !"#$%&��	

 !"#$%&'()*+,-./0123456��	

 !��	

 !"#$��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./0123��	

 !"��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-.��	

 !"#$%&'��	

 !"#$%&'()*+��	

 !"#$%&'��	

 !"#$%&'()*+,-��	

 !"#$%&��	

 !"#$%&'()*��	

 !"#$%&'()*��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	
	
			 	!	"#$	%&'()*+,-	.			/						��	

 !"#$%&'()*+,-./0123456��	

 !"#$%��	

 !"#$%&'(��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*��	

 !"#��	

 !"#$%&��	

 !"��	

 !"#$%&'()*��	

 !"#$%&'()*+��	








 !"


#$%
&'(
)


*+
,-./0��	

 !"#$%&��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-��	

 !"#$%&'(��	

 !"#$%&'()*+,-./0��	














 !



"#$%&'()
*+
,-��	

 !"#$%&'()*+��	

 !"#$%&'()*��	

 !"#$%&'()*��	

 !"#$%&'()*+,-��	

 !"#$%&'(��	

 !"#$%&'()*+,-./��	

 ��	

 !"#$%��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-.��	

 !"#$%&'��	

 !"#$%&��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+��	

 !"#$%&'()��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+��	

 !"#$%&'(��	

 !��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-��	

 !"#$%&'(��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-.��	

 !"#��	

 !"#$%&'(��	

 !"#$%&'(��	

 !"#$%&'()*+,��	

��	

 !"#$%&'()*��	

 !"#$%&'��	

 !"#$��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'��	

 !"#$%&��	

 !"#$%��	

 !"#$$$$$%&$'($)*+,-.$/0$12345678��		
			
							 !	"#$%&'(					)*+,-	.��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012��	

����	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+��	

 ��	

 !"#$%&��	

 !"#$%&'()*+,-./��	

 ��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./012��	

 !"#$%&'(��	

 !"#$%&'()*+,-��	

 !"��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*��	

 !"#$%&'()��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./��	

 !"#$%��	

 !"#$%&��	

 !"#$%&'(��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0��	

����	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0��	

��	

��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./012��	

 !"��	

��	

 !"#$%&'(��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./0��	











 



!"#$%&'(
)



*+,��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-��	
	
								 	!"#$%&'()*+,	-	./	012	��	

 !"#$%&'()*+,-.��	
	
														 	!"#$%	&'()*		+,-��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*��	

 !"#$%&'()*+������	

 !"#$%&'()*+,��	

��	

��	

 !"#$%&'()*��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$%&��	

 !"#$%&'(��	

 !"#$%&'(��	










 !
"
#
$%
&

'
()*
+



��	

 !"#$%&'(��	

��	

��	

 !"#$%&'()*+,-��	

��	

��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./01��	

 !"#$%��	

��	

 !"#$%&'��	

 !"#$%&'()*+,��	

 !"#$%&'()*+��	

 !��	

 !"#��	

 !"#$��	

 !"#$%&��	

��	

 !"#$%&'(��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234567��	
			
																																				����	

 !"#$%&'(��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123��	
��	

 !"#$%&'()*+,-./0123456789:;<=����	

��	






















































����	

��	

 !"#$%&��	

 !"#$%&'()*+,-./0123456789:;��	

����	

�����	

				�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��	

��				







����	

��	

����������	

��	

��	

��	

 !��	

 !"#$%&'()*+,-./01222222222222222��	��	

 !"#$%&'()*+,-./0123456789:;<=>?��	

 !"#$%&'()*+,-./01(23456789:;<=>?��	

 !��	

     !                           ��	

 !"##$%&'(###############)*##+,#-�	




@�	

 !"#$%&'()*+,-./0123456789:'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''𧉧𧲱𧳅𤊿𣘗𧍒𦺋𧃒𪍑𧱬𦬣𥩔𡩣𣸆𣽡𨮹𧯯𡵞𩺰𩥅@�	

 !"#$#%&'()*+,-./0123456789:;<=>?@#A#BCDEF####################################################################################𠄌𠃑𠃍𠃋𡿨𠃊𠄎@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������𪎩𡅅𧜵𠧧𩷶𧀎𪄳𨑬𡷊𠗐𢫦@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������𧶄𠱂𠴕𥄫𢳆𠍁𤶸𩓥𨂾𢰸𨅝𦧲𤷪𠵼𠾴𠳕𡃴𠺖𠰋𠽤𢲩𨉖𤓓𠵆𩩍𨃩𤺧𢳂𩗴𥋇𩟔𧣈𢵄𦂥𢵌𢯊𡁷𡁯𦛚𦜖𧦠𥁒𠱃𢆡𨭌𠜱𠆩𢶍𤗈𠓼𦂗𠽌𠶖𢩦𡂝𠶜𢝵𪘁𠸉𢫏𢳉𡃈𣧂𨊛𥹉𢃇𠼱𢲲𩜠𤸻𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜𡃏𢠃𢤹𥇣𠺌𠾍𠺪𠼰𠵇𡅏𠹌𠺫𠮩𠵈𡃀𡄽𢚖𠾭@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������������������𣏴𧘹𢯎𠵾𠵿𢱑𢱕𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊𩻃𧝞𢷮𦕲𨂽𠻺𠸏𠹷𠻻𤷫𠳖𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤𡀝𡀞𡃵𡃶𠸑𧚔𨋍𠾵𠹻𥅾𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼𥜽𥭴𣄽𡯁屮𠂆𤣩𦉪𦍋𦘒𦥑𧢲𨸏𩠐𠂇@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdEEEefghEijklmnopqrstuvwxyz{|}~E�������������������������𩱳𤅎𥇍𥴰𨨲𣊁𪄇𡦀𨜏𪊺𠩯𩥇𨫪𢁾𨧣𡶶𢜒𣏹𣱣𤔅𤨓𥲤𥚕𨶹𡐿𤥻𧄍𦵴𦬕𦾾𣉖𢞖𣬚𣕑𤃬𡸣𠆤𦱁𠈹𩣺𠮟𢇁𨥭𩁹𪆵𦱆𨚲𧏿𥒚𤬏𨧀𣽁𠌥𠻘@�	

 !"#$%&'()*+,-./*0123456789:;<=*>?@ABCDEFG*HIJKLMNO*PQRSTUVWXYZ[\]^_`abcdefg*hi*jklmnopqrstuvwxyz{|}~������������������������𣻗𦻓𥟠𨯩𥣡𩓙𥦬𦒍𥰁𥌎𥳾𥮴𦱿𥴠𥱥𥳁𤢂𤕸𦹄𦻖𤁗𦀩𡟹𨍭𦄡𦅚𦋐𦍑𡙡𠁨𣝦𨌺𦒉𪂇𦳃𢜔𦘦𣷣𦛨𨩈𢛶𦒘𤾸𡒊𡡞𤩥𤪕𠬍𦩒𣵾𡓽𦬊𤦧𣔰𡝳𣷸芳@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������𠸖𡞴𣅽𣕚𣺋𦶣𦬅𦮗𣗎𦶥𦻔𦹂𢻯𥯤𣲵𦮖𦹷𦹃𥲑𥳀𦺙𨘥𨘻𧂈𡖂𧃍䕫𡢢𧎚𪃸𢰧𧗠𣶹𧗤𧜏𨨥𧤤𧪽𧩙𧬺𣾏𧬸𥐰𥕥𤩺𡛟𧵔𧶏貫𧵓𧶘𧶽𡤐𤳉@�	

 !"#$%&'()*+,-./0123456789:.;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy.z{|}~��������������.�������������𨀂𡀔𤦊𨆼𧄌𨍥𨐒𪊟𠩐𨧞𨔽𣶻𣉢𪀔𨚼𨔁𢌥𦻗𨔼𧪾𨕬𨘋𨜓𨛦𨤳𡺉𥖹𨫆𣲛𨬌𥗛𠴱𨫡𨯫𨫢𨫥𨯬𨰹𨯿𢙺𨛘𡉼𣸮𦻕𨫠𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊𤫩𩇕𩇫𣂷𣂼𥑬𩐳𩐝𧥺𧅵𠘰𤅜𥜆𦴧𡛓𤨩𩡗𩤅𥜥𩂱𩯕𩬅𨘀𦦨𣁽𩴾𡡣𤉋𩹨𩾷𪆒𪆫𪃡𪄣𪇟𪄴𢅛𪆓𪈠𡤻𪈳𪂹𪊴𤍤𨰫𦶢𩂋𤥵𤦻𤧸𤍈𤩑𨯚𡣺𨥾𨸶𨩄𨥬𤒹𤑳𤏸𡟯𡢾𣖙𡢅𥐯𡟸𡛻𡠹𡝴𡣑𥽋𡛀𤨥𡏾𡊨@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������𡏆𡒶𣚦𤦔𧅥𣸱𥕜𣻻𧁒𣛮𩦝𦼦𡤢𣜿𤃡𤂋𤄏𦰡𦚱𠿟𠮨𠸍𨬓𤐶𠑥𠍿𥙑𠆫𠏋𠌊𠐔𠋀𨺳𠉵𠈌𤨎𣺊𣖕𣸹𣺿𡢄𣺉𠗠𠒣𠒒𠒑𨪜𠜎𠡳𤎌𠰠𤦬𡃤𠸝𤪼𤂍𤃉𠍅𠯆𨩆𡛺𡝯𡜐𥥆𡧳𡡡𤊕𥺃𨯗𠐓𡌃𨧻𡦖𡥼𣫮𡤃𡤄𡢠𡛾𨩇𡶺𣑲𨦨𡤧𡞫𡜻𧗽𢡠𢘫𢖯𢖾𩂈𦽳𠀾𠁆𢘛𢲛𢴇𤛔𩅍𤙥𢭪𢬢𣑐𩣪𢹸𪑛𤧣𢵧𢲡𣂎𣊭𤦉𣊫𣋠𡣙𩐿𣊉𣆳𥖄𨬢𥖏𡛼𥕛𥐥𣄃𡠪𣈴𣈏𣆂𤋉𦴤𧡰𡷫𣋒𣋡𥡲𣠺𣞼𣞢𣏾𤘪𣟕𤒇𡤒𣿀𣲚𨯪𨫋@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������������������𨀞𨧜𤧬𣽿𤀼𤌚𤉶𤞏𤜥𤪤𠗫𣻸𣙟𤩊𤤗𥿡𤫟𨰣𣼵𦷪𤳙𤴆𪗆𨫌𤦫𤦎𤩎𤧅𤣳𨫣𡡤𥈡𥇧𣈲𤚗𣞁𤣰𤪺𤫇𤪖𦆮𥖁𧝁𥛣𣻺𡛦𠵌𤦌𠊙𣶺𡝮𠇔𠰍𢛵𥪯𥪜𠉛𥯆𥮳𥺼𥺦𤧹𡞰𦉡𦅜𧭈𥺂𦭵𠤖𠁎𣗏𦐒𦏸𤥢𠠬𥫩𥵃𥸎𣐿𤧷𦖭𦖠𧄧𦳑𦞴𦩂𦩑𦶧𧈛𡡀𡢡𡣘蜨𣶏𧐢𥚃𧞅𧞄𨯵𨯙𨮜𨧹𩑈𤊄𡡅𧷜𤰉𢌡𡟚𤤯𨩋𨫼𨰝𨰻𨴴𤣿𤩂𤏪𣈥𨻧𨹦𨹥𤧭𤩸𣿮𩂰@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������������������𩂓𥟟𨦉𨰦𨬯𦎾𤈛𠼦𨯅𤪲𩓚𩗗𨭐𤩧𨭤𨩅𧬆𨭥𥣈𩣱𩥈𡌂𤦸𡓨𢜟𣶸𢞁𢥫𩸭𪇵𪃾𤄄𪆴𪃭𪃳𩤯𦸒𦿟𦮂𦶤𦺄𦷰𦸀𣟗𦁤𣖜𣙀𤧞𠊿𥕝𡝗𣇉𤥁𤆵𤆬𦱀𤾗𡞵𨩉𤒈𨧼𡣖𠼝𦳀𡐓𤋺𢰦𤏁𣶷𦝁𦅛𦂤𤦹𤦋𨧺𨭣𡢟𤪳𤨾𤪔𡟙𤩦𠎧𡐤𤧥𤤖𤥶𠓾𨫎𨨖𨯧𥗕𨪂𤥃𠳿𠘚𠯫𠲸𡟺𡛂𤩐𡡒𨫀𤦭𡢿𡢃𧒄𣵛𨪁𡡢𠪴𡎜𨈘𩃤𧹏𣿭𣸭𠏵𨰜𦯀𡑒𤍢𤩱𢿣𡊰𢎽𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟𣚭𦲷𦴦𦵑𦲂𦿞𧄉𡜺𦲀𧁓𡟛𡞳𡤅𤇼𡜼𤊥𤊓𣻹𧜶𤑛𤋊𤉙𨧡𦴨𤓎𧹍𤎽𤉖𡌄𤏩勇𤩏𤩝𡟟𣫺𣌀𠈔𠣕𠘙𡾞𪊶𩅛𨩙𩐠𧫴𥛶𧬘𤣲𤽜𥔵𠳏𧥧𡯂𠂔𠊷𠎠𠓗𠗕𠘕𠙶𡚺𠫂𠫍𠮿吆𠯋𠯻𠰻𠱓𠱥𠱼𠲍𠲵𠳝𠳭𠵯𠶲𠷈𠸄𠸎𠻗𠾐𠼭𠹳𠾼𡁜𡁏𡁶𡁻𡂈𡂖𡂿𡃓𡄯𡄻𡋣𡍵𡌶𡕷𡘙𡟃𡟇𡠭𡥪@�	

 !"#$%&'()*+,-./0123456"7"89":;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a"bcdefghijklmnopqrstuvwx"yz{|}~������"���������"��������𡨭𡩅𡰪𡱰𡲬𡻈𡻕𡼕𢁅𢉼𢏗𢏺𢜪𢡱𢥏𢥧𢦓𢫕𢫨𢬎𢬿𢱌𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞𧩹𣕧𣗳𤦺𣘚𣜖𠍆𣪧𧙗𥿢𣸑𣺹𧗾𢂚𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊𠘑𡺨𣳿𤐄𤓖𤙴𤜯𨗨𩧉𢇃𨭎𤠒𤣻𤨕𤫀𠱸𤺥𤾆𠝹𥀬𥊙𥐙𣽊𤪧𥑆𥑮𦭒𥔿𧘲𥕞𥕢𥕦𥟇𤤿𥡝𣏌𥤃𨥈𥪮𥮉𥰆𡶐𦄂𧰒𦆲𤾚𦐂𦑊@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������������𦯷𦒄𡤜𤧶𦒈𣿯𦔒𦖿𦚵𢜛𥟡晉𤔡𦛼𤤴𦲽𦞙𦡮𦐑𦡞𦣇𩃀𠨑𦤦𦤹𦧺𦨭𦑩𠀡𦨴𦭛𣔙𦮝𦲤𦶮𢖍𧁋𧇍𧊀𧊅𢅺𧊋𧋦𤧐𧑐𠻸𢤦𨑳𡞱𤨪𡠠𩲭𩢤𧟌𧡘𡘊𣜯𨃨𡏅𧧝𩆨𧂯𨦫𧧽𧨊𧬋𧵦𤅺𨀉𪋟𨌘𦸇𨅯𨀣𦦵𡏭𣈯𨁈𨰰𨂃𨥉𤦈𤪥𣾁𨂐𨃴𨄮𡾡𨅏@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������������������𨆉𨆯𨈚𨌆𨌯𨎊𨑨𨚪𨥖𨦸𨧧𨧨𨭆𨯔𨰉𨿅𩃬𩄐𩄼𩅞𤫊𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛𩻸𩼣𪊓𪋿𪗋𠲜𢒰𤪓𨬬𧢝𡟵𨀤𨭬𨮙𧨾𦚯𧙕𣲷𥘵𥥖𥺁𦉘𠹭𣺈𤲞𡟶𡡻𥱊𥌑𩶘𥻘𣵀𠿪𠵉𣚺𠺝𨋢𠱁𠲖𥅈𠹶𢱢@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJHKLMNOPQRSTUVWXYZ[\]^_`aHbcdefghijklmnopqrstuvwxyz{|}~������������H����H��������H�𠺢𡁵𢭃𢺳𠶧𦢊𡃁𤜆𦢓𢛴𧴯𤆣𧵳𦻐𧊶𡇙𣳼𪚩𠺬𠻹𡲢𤿂𧿹𠿫𢶠𤟠𩵼𠿬𠸊𧖣𠿭𦁈𡆇𤘘𤭮𥪕𠥹𢑥𩺬𣳾𩼰𤾩𩖞𩿞𣶶𧊲𦞳𣜠𣻷𣸬𠒎𠺶𧼮𪐴𣃚𤏲𡊩𤥣𩸆𧂮@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������𡝬𩓐𦌵𧅤𠴨𦴢𤫢𠵱𡼏𡷑𤤾𡝭𨺗𦴣𠏼𥰡𣳽𤤙𠳔𠇲𪙊𨍽𤩷@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������𨩚𪊲咢𤪻𡠻𦸅𢔛𦅙𣏵𨯂𨸹𡵆𠼻𥼚𧒆𦟌𦻑𤀑𨬭𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭𦆭𨨏𣙷𠃮𦡆𤼎𦍌𦉫@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_______________________________________________________________@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqnrnsntuvwxynnz{|}~�������������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiDDDjklmnopqrs𠃌𠂊𧘇@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������@�	

 !"#$%& '()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]^_`a bcdefghijklmnop qrstuvwxyz{|}~��������������������������𠕇𠗟𣿅𤥂𨧤𡧛𣳈𤤳𨦪𠊠𦮳𡌅𢓭𦴩𧪄𣘀𤪱𢔓𠍾𠎀𠍇𠐟𤦤𠒇𣎴𠯿𢃼𠋥𢔰𠖎𣈳𡦃𠖳𣲙𤪦𣜭𦬓𨫞𣾀𠥔𣿬𠯢𡜦𡛨𨚫𡖖𡘓𨪛𥝲𠮏𣿫𢶣𠱷𦭓𠵴𡜍𠻝𠵍@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV	WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������	�����	�����𨦼𢚘𡣗𤀺𤐵𡂴𣊊𨭦𡉏𤆥𦱾𡐖𡑔𤍣𤯵𡈼𪅐𤉸𡘾𡚒𠵎𦲁𦴪𡟜𡟻𡞲𦶦𡠨𡛕𦹅𤦩𦾡𢕔𡤑𡚸𧨎𠈄𡨴𥧌𠖥𡭄𡲥𦬨𡷹𡸷𡺤𤤁𢁉𢅳𤒼𠳓𡝱𨒂@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������𠇁弢𡌺𦢈𢏐𢑱𦹮𨨶𥉐𡽪𧃸𢙨𠊞𨨩𡡷𢞴𤦂𤦏𧩓慈𦻒𠙖𣾷𢡟𨮝𩥝𢦀𢣁𠄘𡝰𢸍𤧟𡎎𡟼𢸶𤂌𥜝𤨨𤨣𣁾𤥀𡠩𣐀𣇷𣇸𣆤𣆥𠹵𥇦𡸽𣈱𨗴𣇈𥌓𢣷𤎜𤨡𣟂𤇍𩃭𣏦𦶠@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVVWXVYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������V�������������𣑯𨫟𣗍𣘼𨩊𠏉𣙙𢄪𣜃𩆜𠤣𢟍𣫛𠎵𡥘𣭚𣻼𢒋𤣱𦭑𣶼𣶽𤆤𤤌𤤀𣳉𠴲𣇹𢒑𦴥𦶡𦷫𤥿𤂅𦹲𦽴𨬡𣸯𣾂𣁋𣸰𡒗𤀽𩅰𤅄𤂑𤅕𤀹𣿰𣾴𤄿𤅖𤅗𤅀𦇝𤉷𤍥𤋁𤑚𤨧𤨢𨯨@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������𥘅𤥴𣁄𤠣𨠫𨠄𠰺𦨮𤇢𡛧𤨤𤦷𤦍𤧻𤨦𠗃𢢭𨺲𤪌𤅟𤩹𨮏𨰃𡢞𡦈𨻙𡩋𨺬𤾂𤴓𦏵𦤑𦤎𦾟𥂝𥅽𡸜𥈠𣊬𨥤𨥨𡛁𡍶𤨒𥗠𧘌𨬫𦂃𢘜𥡗𧬹𧄦𩄍�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz����	

������	
��������	

 !"#$%&'()*+,-./012��	

����������	

��	
������	

��	

����	

��	
����	

��	

 ��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567888889:;8��	

������	��������	
����	

��	
����	
��	

��	

��������������������	
����	��������������	������������	
��	
��	

��������	

��������	��	

 !"#$%&'()*+,-./0123456789:;����	����������������������������������	��	

��	

��	

������������������������������	
������������������	������	������������	

 !"#$%&'()*+,-./��	

��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123456789��	
















 !"
#$%&'(
)*+
,
-��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01234567*89:;<=>?��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./01��	

 !"#$%��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+!,!!-./0!!123!456789:��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012345��	

							 !"	#$%&'(	)*+,-./	0		1234��	

 !"#$%&'()*��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0��		

				 !"#$%&'(	)*+,-.	/0	1	2				3��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*��	

 !"#$%&'(��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	
	
								 !"#$%&'(	)		*	+						,-��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./01234��	

	 !"#	$	%&'()*+,-./01	2			3					4��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,��	

		 !"#$%&'()*+	,	-./0	1234	56789	��	

 !"#$%&'()*+,-./01234567��	






 !"#$

%&'(
)*+
,-.
/0
12345��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-.��	

 !"#$%&'()��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./012��	

 !"#$$%$$&'$()$*+,-./$01$23456789��		
		
					 !"#$	%&'()*+					,-./0	1��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012345678��	

����	
��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	






 !"
#$%
&
'()*
+,-./
0
12345��	

 !"#$%&��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012��	

 !"#$%&'��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./��	

 !"#$%&'()��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456��	

����	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345678��	

��	

��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./01234��	
		
 !"#$%&'()*	+,	-.	/012	345	6789��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345��	

 !"#$%
&'





(
















��	

��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./0123456��	









 
!


"#$%&'()*
+

,
-./��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012345��	

						 	!"#$%&'()*+,-./01	234567	��	
	
					 !"#$%&'()		*	+,-./012		345��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��������	��	

 !"#$%&'()*+,-./012345��	

 ��	

��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01��	





 !
"#$%
&
'()*
+,-.
/01
2



��	

 !"#$%&'()*+,-./��	

��	

 !"#$%&'()��	

 !"#$%&'()*+,-./01234��	

 ��	

 !"��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()��	

��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<��	

																																	����	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456789:;��	

 ����	

 !"#$%&'()*+,-./0123456789:;<=>?������������������������������������������������������������������������������	����	����	

������	
��	
��	
������������	

 !"#$%&'()*+,-./012345678����	����	
��������������������������������������������	

����	
����	

��	��	
��	
����	
����������������������������������������	

 !"#$%&'()*+,-./012345678��������������������������������������������������������������������������������������	

 !"#$%&'()*+,-./012345����������������������	��������������������������������������	
����	
����������	��	

 !"#$%&'()*+,-./012������������	
����������������������������������������������	
��	
��	

��	

��	

��	

��	

��������������������������	

 !"#$%&'()*+,-./0123456789:��������������������������������������������������������������������������	

 !"#$%&'()*+,-./01234����������������������������������������������������������������������	
����	
����������	������	

 !"#$%&'()*+,-./0123456789����������������������������������������������������������	

 !"#$%&'()*+,-./012345����������������������������������������	����	

����	
����	

��	��	
����	

��	
������������	

 !"#$%&'()*+,-./��������������������������������������������������	

 !"#$%&'(������������������������	

������������	

�	

��				

 !"""#$%&'()*)��	

��	

 !"������	����������������	��	

��	

������	

 !"#$%&'()*+,-./0123456789:;<��������������������	
��	

��	������������	
����������������	
















 !"
#$
%&'
()*
+
,��	

 !"#$%&'()*+,-./012345*6*789:;<=>��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-��	

 !"#$%&'()��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./��		

					 !"#$%&'	()*+,-	./	0	1				2��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234567��	

			 !"#$%&'()*	+	,-./	0123	45678	��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123456789��	


 
!"#$
%&'()*+,-./01234

56
789:��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+��	

 !"#$%&'(��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456��	

��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-.��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?3�	

 @�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkllmnopqrstuvwxyz{|}~�����������������������������@�		

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������������������	

��	

 !"#$%&'()*+,-./0123456789:;<=>?������	��	

����	������	

��	
��	

 !��	

����	

��	����	

 !"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!��	

 !"#$%&'()*+,,,,,,,,,,,,,,,,,,,,,��	

��	

 !"#$%&'��	

��	

��	

��	

��	��	
����	

��	

 !"#��	

 !"#$%&'()*+,-./0123456789��	

������������	

��������	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'(��	

 !"#$%&'()*+,-./0123456��	






 !

"#$%&'(
)*+,-./01

234
5��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:��	





 
!"#$%&'()*+,
-./012
345
6
7��	

 !"#$%&'()*+,-./0123456789��	

��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-!!./012!345!6789:;<��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

			 !"#$%&	'()*+,	-./0123	4		5678��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

			 !"#$%&'()*	+,-./0	12	34567	89��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345678��	

							 !"#$%&'()*	+,	-./01234567��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<=>��	

 !"#$%&'()*+,-./012345678��	









 !"
#$%&'()*+,-./012345
6��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:;��	

	 !"#	$	%&'()*+,-./01	23456789:;<��	






 !"#$%&
'()*+,-
./0123456789��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'$()$*+,-.$/0$123456789:;<��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./01234��	

 !"#
$
%&'(
)*+
,-.
/0123456789:;��	

 !"#$%&'()*+,-./0123��	

	 !"#$%&'()*+,	-	./01	2345	6789:	��	

 !"#$%&'()*+,-./012345678��	




 
!"#$%

&'()
*+,
-./
01
23456��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:��	


 !"#$%
&'()*+,-./0123456
78
9:;<��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012345678��	



 !
"#$%&'()*+,
-./01
234567
89:��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

 !"#$$%$&'($)*$+,-./0$12$3456789:��	




 !

"#$%&'
()*+,-.
/01
23456
7��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,%-./012345678%9:;<=>��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789��	




 
!"#$%&'
(
)*+,
-./0123
45678��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456��	

			 !"#$%&		'(	)*+,-./0123456789:��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456789:;<=>��	


 !"#$%&'()*+,-./01234567
89:;<=>��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123��	



 !"#
$%&'()*
+,-./012
3456789:;��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*&+,-./0123456789:;<=>?��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345678��	







 !"#
$
%
&'()*+,-.
/012
345��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;��	

				 !"	#$%&'()*+,-./0123456789:	��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456789��	





 !"#$%&'()*+,-./0123
4567
89:��	

 !"#$%&'()*+,-./01234567��	




 !"#$
%
&'()*+
,-./
012345
678��	

 !"#$%&'()*+,-./0123456��	



 
!"
#$%&
'()*+,
-./0
123
456

��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./01234567��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'()*+,-./0123456789:;��	

 !"#$%&'!()!*+,-./!0123456789:;<=��	

	 !"#	$%	&'()*+	,	-./	012345		678��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-)./012)3456789:));<��	

 ��	

 !"#$%%%%%%%%%%%%%%%%%%%%%%%%%%%%��	

��	

��	
������������	

����	

������	
��	
��������	
��	

��	

��	��������	

 !"#��	

��	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!����	
�	

 ; �G��<H��d�H��|zRx�$�G��0FJw�?:*3$"D�G�� \`H���HwGNU�`
 
 �( &̪@�K`��& D^@�K`�� /\�@�K`��/ l�@�K`�� 5�e@�K`��5 X�@�K`�� @�@�K`��@ �3@�K`�� Fh�@�K`��F �@�K`��v����8	
�
�(�(���o`��
���(0	�h	���o���o����o�ol���o+��(p	�	GA$3a18	GA$3p1113p
�
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignbig5.so-3.4.4-3.el8.x86_64.debug���7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N����> ��zW��'�'ܰ�%P<���fƄ�{�@�g�Ϳ�ѳ���@�o>���yI��]/rGx���˻�j�e�QU���!/�P��rR�]���@R����^�<�A���5A�e��>s��](��P�qp��)&3�e75v�p�
�P���
�c�V
��s������.9	#XGl������4�M���1s7)3���__&���CYSV�𞚤�2�tYe�)}�D���	�\�Fl6�W���������/������F��h�!¨�$��@�G��בMѵy�"-���	��5f^�����x
X���<���Љ2L��!��%y����\P�Z��`�̋�p���̓�c��ſ���I���ܲ��j��92Awl�D%���|�6фq�[�,*&E�&�ﭩ��Q?�UѦ�����n�#�e�V�x7�WrĀV˜]#�fٜ����։��n�nVR�4��:_M_���,a�M�I�0�Et�>y�!�!,�f�g�@K�;	K�^;J�&�r$��)�%P��!��;1�H���!�u�9D�ř�p�8�K��*���|����1"g�6�3���&Qi��i����G|��K��J�������YOղ��{��[�,U�m��e�j���L�l@�����څoXj��d	��V�l�ݴS7�ύ̃�*���o�F�z�X�Y���Q7w{��E��*wݍϗ��;��&����2X��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ollE���o�� T��h^B		0h8	8	c`	`	0n�	�	 w�	�	D}�
�

�  k� �����$�����t�(�(� ��(���(�� �( �` ���(�� ���(��H��(����h�����(�DL�"PK*J[���&��lib64/ruby/enc/trans/gb18030.sonuȯ��ELF>@�@8	@ȪȪ ��"�"�� ����"��"  888$$������  S�td������  P�td������DDQ�tdR�td��"�"��GNU�
pK����K�r�Yg��@ @(	BE���|�qX�9� b , F"��"��"��"U0
$__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_gb18030rb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��"��"� �" �"@�"�
H�"�
X�" �h�"�
��"@ج"�	�"�
�"�
��" ��"�
X�"�x�"	ȯ"Я"د"�"��"��"��H��H�!�"H��t��H����5�"�%�"��h�������h���������%��"D���%��"DH�=�"H��"H9�tH���"H��t	�����H�=��"H�5��"H)�H��H��H��?H�H�tH�m�"H��t��fD�����=u�"u+UH�=J�"H��tH�=~�"�Y����d����M�"]������w��������V-���0i��i�81��V���{����P�F��������������?�ʀ�Q�ƒ�?���Ȁ��?�A��ʀ�QÐ����FA�����A�� �����%���	��F�v��?��	�	�����A��A���������A)�D�Ѓ�0�A��A���k�~)׺i�h��@�y��������������A���������)lj���0�@�y����p����H����V��tQ���B�Vk�~Ѝ��F�P)�-������A��ƒ�?���Ȁ��?A�@��ʀA�P�����)��]�f.�����VH����������	��V��?	��tg��n:������̉������r2���)���0��A�H�� ����k�~�J)Ɖ���A�p�������A�)����0A�H���	���f��fA�����H��H�=��"���H�=��"H�������H��H���UTF-8GB18030€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“4”•–—˜™š›œhžŸ ¡¢£¥¦©ª�«¬­®¯²³´µ¶�¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊË8ÌÍÎÏÐÑÒÓÔÕlÖØÙÚÛÜÝÞßâ�ãäåæçëîïðñ�ôõöøûýþÿĀĂ㥹ĆćĈĉĊċČ<čĎďĐđĒĔĕĖėpĘęĚĜĝĞğĠġĢ�ģĤĥĦħĨĩĪĬĭ�ĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁ@łŃŅņŇʼnŊŋŌŎtŏŐőŒœŔŕŖŗŘ�řŚśŜŝŞşŠšŢ�ţŤťŦŧŨũŪŬŭŮůŰűŲųŴŵŶŷDŸŹźŻżŽžſƀƁxƂƃƄƅƆƇƈƉƊƋ�ƌƍƎƏƐƑƒƓƔƕ�ƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩHƪƫƬƭƮƯưƱƲƳ|ƴƵƶƷƸƹƺƻƼƽ�ƾƿǀǁǂǃDŽDždžLJ�LjljNJNjnjǍǏǑǓǕǗǙǛǝǞǟǠǡǢǣLǤǥǦǧǨǩǪǫǬǭ�ǮǯǰDZDzdzǴǵǶǷ�ǸǺǻǼǽǾǿȀȁȂ�ȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖPȗȘșȚțȜȝȞȟȠ�ȡȢȣȤȥȦȧȨȩȪ�ȫȬȭȮȯȰȱȲȳȴ�ȵȶȷȸȹȺȻȼȽȾ ȿɀɁɂɃɄɅɆɇɈTɉɊɋɌɍɎɏɐɒɓ�ɔɕɖɗɘəɚɛɜɝ�ɞɟɠɢɣɤɥɦɧɨ�ɩɪɫɬɭɮɯɰɱɲ$	ɳɴɵɶɷɸɹɺɻɼX	ɽɾɿʀʁʂʃʄʅʆ�	ʇʈʉʊʋʌʍʎʏʐ�	ʑʒʓʔʕʖʗʘʙʚ�	ʛʜʝʞʟʠʡʢʣʤ(
ʥʦʧʨʩʪʫʬʭʮ\
ʯʰʱʲʳʴʵʶʷʸ�
ʹʺʻʼʽʾʿˀˁ˂�
˃˄˅ˆˈˌˍˎˏː�
ˑ˒˓˔˕˖˗˘˚˛,˜˝˞˟ˠˡˢˣˤ˥`˦˧˨˩˪˫ˬ˭ˮ˯�˰˱˲˳˴˵˶˷˸˹�˺˻˼˽˾˿̀́̂̃�̄̅̆̇̈̉̊̋̌̍0̖̗̎̏̐̑̒̓̔̕d̡̛̘̙̜̝̞̟̠̚�̢̧̨̣̤̥̦̩̪̫�̴̵̬̭̮̯̰̱̲̳
̶̷̸̹̺̻̼̽̾̿4
͇͈͉̀́͂̓̈́͆ͅh
͍͎͊͋͌͏͓͐͑͒�
͔͕͖͙͚͗͛͘͜͝�
ͣͤͥͦͧͨͩͪͫͬͭͮͯ͟͢͞͠͡Ͱͱ8Ͳͳʹ͵Ͷͷ͸͹ͺͻlͼͽ;Ϳ΀΁΂΃΄΅�Ά·ΈΉΊ΋Ό΍ΎΏ�ΐ΢ΪΫάέήίΰςϊϋόύώϏϐϑϒϓ<ϔϕϖϗϘϙϚϛϜϝpϞϟϠϡϢϣϤϥϦϧ�ϨϩϪϫϬϭϮϯϰϱ�ϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿЀЂЃЄЅІ@ЇЈЉЊЋЌЍЎЏѐtђѓєѕіїјљњћ�ќѝўџѠѡѢѣѤѥ�ѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹDѺѻѼѽѾѿҀҁ҂҃x҄҅҆҇҈҉ҊҋҌҍ�ҎҏҐґҒғҔҕҖҗ�ҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩҪҫHҬҭҮүҰұҲҳҴҵ|ҶҷҸҹҺһҼҽҾҿ�ӀӁӂӃӄӅӆӇӈӉ�ӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝLӞӟӠӡӢӣӤӥӦӧ�ӨөӪӫӬӭӮӯӰӱ�ӲӳӴӵӶӷӸӹӺӻ�ӼӽӾӿԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏPԐԑԒԓԔԕԖԗԘԙ�ԚԛԜԝԞԟԠԡԢԣ�ԤԥԦԧԨԩԪԫԬԭ�Ԯԯ԰ԱԲԳԴԵԶԷ ԸԹԺԻԼԽԾԿՀՁTՂՃՄՅՆՇՈՉՊՋ�ՌՍՎՏՐՑՒՓՔՕ�Ֆ՗՘ՙ՚՛՜՝՞՟�ՠաբգդեզէըթ$ժիլխծկհձղճXմյնշոչպջռս�վտրցւփքօֆև�ֈ։֊֋֌֍֎֏֐֑�֖֛֚֒֓֔֕֗֘֙(֢֣֤֥֜֝֞֟֠֡\֦֧֪֭֮֨֩֫֬֯�ְֱֲֳִֵֶַָֹ�ֺֻּֽ־ֿ׀ׁׂ׃�ׅׄ׆ׇ׈׉׊׋׌׍,׎׏אבגדהוזח`טיךכלםמןנס�עףפץצקרשת׫�׬׭׮ׯװױײ׳״׵�׶׷׸׹׺׻׼׽׾׿0؀؁؂؃؄؅؆؇؈؉d,`���0d��4h��8l��<p��@t��Dx��H|��L���	P	�	�	�	 
T
�
�
�
$X���(\���,
`
�
�
�
0d��4h��8l��<p��@t��Dx��H|��L���P��� T���$X���(\��؊؋،؍؎؏ؐؑؒؓ�ؘؙؚؔؕؖؗ؛؜؝�؞؟ؠءآأؤإئابةتثجحخدذر8زسشصضطظعغػlؼؽؾؿـفقكلم�نهوىيًٌٍَُ�ِّْٕٖٜٟٓٔٗ٘ٙٚٛٝٞ٠١٢٣<٤٥٦٧٨٩٪٫٬٭pٮٯٰٱٲٳٴٵٶٷ�ٸٹٺٻټٽپٿڀځ�ڂڃڄڅچڇڈډڊڋڌڍڎڏڐڑڒړڔڕ@ږڗژڙښڛڜڝڞڟtڠڡڢڣڤڥڦڧڨک�ڪګڬڭڮگڰڱڲڳ�ڴڵڶڷڸڹںڻڼڽھڿۀہۂۃۄۅۆۇDۈۉۊۋیۍێۏېۑxےۓ۔ەۖۗۘۙۚۛ�ۜ۝۞ۣ۟۠ۡۢۤۥ�ۦۧۨ۩۪ۭ۫۬ۮۯ ۰۱۲۳۴۵۶۷۸۹H ۺۻۼ۽۾ۿ܀܁܂܃| ܄܅܆܇܈܉܊܋܌܍� ܎܏ܐܑܒܓܔܕܖܗ� ܘܙܚܛܜܝܞܟܠܡ!ܢܣܤܥܦܧܨܩܪܫL!ܬܭܮܯܱܴܰܲܳܵ�!ܷܸܹܻܼܾܶܺܽܿ�!݂݄݆݈݀݁݃݅݇݉�!݊݋݌ݍݎݏݐݑݒݓ"ݔݕݖݗݘݙݚݛݜݝP"ݞݟݠݡݢݣݤݥݦݧ�"ݨݩݪݫݬݭݮݯݰݱ�"ݲݳݴݵݶݷݸݹݺݻ�"ݼݽݾݿހށނރބޅ #ކއވމފދތލގޏT#ސޑޒޓޔޕޖޗޘޙ�#ޚޛޜޝޞޟޠޡޢޣ�#ޤޥަާިީުޫެޭ�#ޮޯްޱ޲޳޴޵޶޷$$޸޹޺޻޼޽޾޿߀߁X$߂߃߄߅߆߇߈߉ߊߋ�$ߌߍߎߏߐߑߒߓߔߕ�$ߖߗߘߙߚߛߜߝߞߟ�$ߠߡߢߣߤߥߦߧߨߩ(%ߪ߲߫߬߭߮߯߰߱߳\%ߴߵ߶߷߸߹ߺ߻߼߽�%߾߿����%����%��0d��4h��8l��<p�� @ t � � !D!x!�!�!"H"|"�"�"#L#�#�#�#$P$�$�$�$ %T%�%�%�%�%��%�%$�&������������&������&���������'���('�����8'���L'�������\'�����t'�����'�~���'~���'~�r���'h���'h�d�`���'`���'`�_��(^�]�\�[�� (W�V�U�P�O�<(O�K�J�\(J�I�H�t(H�G���(G�E�A�(�(A�?�4�(?���(?�>�=�@�(=�<���(<��)<�;�L);��,);�:�X<):��P)�%�&' '0'D'T'l'�'�'�'�'�'�'�'((4(T(l(�(�(�(�(�(�())$)4)H)X)d`):�0���)0���*��*����$*���8*�������H*�����`*���t*������*��~���*~�}�{���*{���*{�w�L�*w���*w�u�t���*t��+t�s�r�� +r��8+X)�)**0*@*X*l*|*�*�*�*�*�*�*++0+@+H+r�q���+q�p�o�m���+@+�+�+��+m�l���+l���+l�k�j�i� ,h�f�e�@(,e�d��@,d��T,d�X�T�A�,d,A�?�6���,6���,6�5��8�,�޻��D�,��`���,`���,`�V�U�P�,U��-U�T��$-T��8-T�R��H-R�O��\-N��p-N�M���-M�L�J�I�\�-I���-H���-H�G�X�-G���-�+, ,8,L,\,x,�,�,�,�,�,�,--0-@-T-h-x-�-�-�-�-�-�-h�-��&�&�)�+�+`.5�4�,�*�&������������
�	��������������������ߐېՐѐϐΐ̐Ð����������������������������������������������������������������{�z�y�o�l�k�j�i�g�e�d�b�`�^�\�[�Z�Y�X�W�V�U�T�S��h.G�F�L0F��,0F�E��<0E�D�XP0D��d0D�C��t0C���0C�B�X�0B���0�-$040H0\0l0�0�0�0�0��0B�@���0@��1@�?�X1?��(1>��81>�=��H1=��\1=�<�4l1<���1<�;���1;���1�0�01 101@1T1d1x1�1�1�19�1;�:�X�1:��2:�9��29��(29�8��828��L2�1�12 202D2T2�\28�7�6�E�26���26�5�L�25���25�4���24���24�3���23��33�2��32��,32�1�4<30��P30�/��`3/�.��t3.���3T2�2�2�2�2�2�233$343H3X3l3�3�3Q�3.�-���3-���3-�,��4,�+�)�'��4'��84'�&�%�H4%��`4%�#�Lp4#���4#�"���4"���4"��X�4���4����4���4�3�34404@4X4h4|4�4�4�4�4�4�4�4�5���L5��`5�oiXp5oi��5�4X5h5|5�5]�5�5$�5�0�1|2�3D5�5�5������������������~�}�y�x�w�v�s�p�o�n�m�l�k�j�i�h�g�d�c�b�a�_�\�Y�X�W�V�U�S�R�P�O�N�M�L�K�I�H�E�D�C�B�A�@�=�<�;�9���5oiZ��6�Y�YL�6�YiYfY�	�6eYdY�7dYbY`Y�	$7`Y_YX<7^Y�P7^Y\Y�`7\Y�t7[Y��7�5�6�67747H7X7l7|7�7�	�7�7$�7�5�7�7z�y�x�w�u�r�q�p�o�m�n�l�k�h�d�b�a�`�_�\�[�Z�Y�X�W�S�Q�J�G�D�C�A�?�>�;�:�8�7�6�4�2�-�*�'�&�%�#�"� ���F
�7[YZY4�8ZY��8ZYYYL�8YY��8YYXY�9XY�9XYWY�,9WYVY�@9VY�T9VYRYQYOYNYd9NYKYIYFY#�9FY��9�7�8�8�899$989L9\9|9�9�9/�9FYDY2Y��92Y(Y$YYY�:Y�(:Y�X48:�X�L:�X�X�\:�X�p:	��:�9: :0:D:T:h:x:�:��:�:$�:�9�:�:_�^�]�[�Z�Y�X�V�U�S�M�H�E�D�B�@�:�9�8�7�5�4�2�1�0�*�)�$�#�!�����������������
�����������������������������;�:�:&�#�!� �������������	����������������������������ޏ܏ۏڏُ؏֏ЏϏΏʏɏǏÏ����������������������������������������������~�}�u�s�r�q�p�o�l�h�e�d�c�b�a�_�\�[�X�U�T�
�;�:���������������������{�q�p�n�j�d�b�`�_�]�\�[�Y�X�U�T�S�R�O�N�M�I�H�G�F�D�C�A�@�>�=�;�:�9�5�4�1�-�+�*�%� ���������������
��
����������������������
�=�:1�/�.�,�+�*�(�&�%�#�!� �����������
��
������������������������������>�:%�$�#�"�����������
����������������������������ߎގ܎ێَ؎֎ӎҎЎώΎ͎̎ɎȎǎƎĎÎŽ�������������������?�:������������������������ߎގݎ܎ڎَ؎׎֎ՎԎӎҎюЎ͎ˎʎɎǎƎÎ��������P�@�:�������������������ݎڎَ؎֎ԎӎҎώЎ̎ʎɎȎǎƎŎÎ��������������������������������������������������������������!�A�:֎ՎԎӎώΎ͎̎ʎɎȎǎƎŎÎŽ��������������������������������������B�:�����ݎێڎ؎׎֎ՎԎҎώ̎ʎɎȎǎ����������������������������������������������������������������������u�t�p�l�k�j�i�g�f�d�b�a�_�^�\�[�Y�W�V�O�M��<C�:�����������������������~�}�z�y�x�w�v�u�t�r�q�p�o�n�m�l�j�i�g�f�d�c�`�_�^�]�\�Z�Y�X�W�V�U��|D�:��������������������������}�{�z�y�v�s�m�k�i�h�f�c�b�`�_�]�\�[�Y�V�U�T�P�N�M�K�I�F�A�?�>�;�8�7�6�1�0�e@E�:q�o�l�k�j�i�h�g�e�d�]�\�Z�Y�X�W�V�T�S�Q�O�M�L�K�J�H�G�F�E�C�?�>�<�;�:�8�6�4�3�2�1�/�,�*�$�#�"�!������������
�	�������������������6F�LGTG$\GdG/�.�+�*�'�&�#�!�����������
��
����������������������������ߍލ܍ڍ؍׍֍ՍԍҍЍ̍ƍčÍ������������������������lGdG����������������ݍ܍ۍڍٍ؍֍ԍӍҍэЍύ΍ō����������������������������HdG�����ߍ׍֍ՍԍӍЍύ͍ʍƍč��������������������������������������������������������w�v�t�s�r�p�o�m�k�j�d�c�a�^�]�\�Z�Y�W�U�T�S�O�N�K�J�I�H�G�E�D�@�=�<�:�8�7�6�5��TIdGv�u�t�s�o�n�m�l�j�i�g�f�e�d�c�b�a�]�\�Z�X�V�T�S�Q�R�P�N�M�L�K�J�I�D�C�B�A�@�?�>�=�<�9�8�6�5�3�1�0�/�.�-�*�)�(�&�%�$�#�"�!�����z�JdG\�[�Z�Y�X�W�V�U�T�S�Q�N�L�K�I�H�F�E�D�C�A�@�?�=�;�:�8�7�6�5�4�3�1�/�.�-�,�*�)�(�&�%�$�#�"� �����������
�K�KdGE�C�B�A�?�>�=�<�:�7�6�5�3�2�0�/�.�-�*�)�(�'�&�$�#���������������
���	��������������������������LdG3�/�.�-�+�*�)�(�'�&�%�!� �������������
�	�������������������������������������ߌ݌׌ԌьЌόΌ͌̌ɌnjƌČÌ������������������������������������MdGیьЌό͌̌ˌɌȌnjƌŌŒ�����������������������������������������������������������������������������OdG֌ՌԌӌҌьΌ͌̌ˌʌƌŌÌŒ��������������������������������������������������������������������OdGیڌٌ،׌֌ՌԌӌьЌό͌Ȍnj`�PdG������������������������������ߌތ܌یڌٌ،ҌьЌό͌̌ˌʌɌȌŌČ������������������������������������1QdGތ׌֌ӌҌьЌόΌ̌ɌnjŌČŒ���������������������������������������������������������������~�{�z�y�x�v�u�r�q�p�l�k�j�f�d�a�]�[�Z�Y�X�W�V�T�R�Q�O�N�M�L�J�I�H�G�D�C�>�<�6�4�3�2�1�/�+�RdGj�i�h�f�d�b�a�`�^�]�\�[�Z�Y�W�V�U�R�P�O�M�L�K�I�F�E�D�C�B�A�@�?�=�;�9�8�7�6�5�4�3�1�0�.�-�+�*�)�(�'�&�%�$�#�!� �����������������SdGG�F�E�D�C�B�A�>�=�<�9�8�7�6�5�4�3�2�1�0�/�.�-�,�+�)�(�'�&�%�$�#�!��������������� �TdGQ�O�N�L�K�J�I�H�G�D�B�@�?�>�;�:�8�7�6�3�2�0�+�*�)�&�#�����u!�UdG[�Z�Y�U�R�Q�P�O�N�L�K�J�H�E�D�A�B�@�?�>�=�<�;�:�7�6�4�3�2�1�0�/�.�-�+�)�(�'�&�%�$�#�"�F"VdGa�`�_�^�]�\�[�Z�Y�X�V�Q�P�O�N�L�J�I�H�G�F�E�D�B�@�?�=�<�;�9�5�4�2�1�0�/�.�,�*�)�%�!� ������#�VdGqr��·ˉˇ¨������D~�����������±×÷�������������������������/�����j���������p�c�o�����������°�����¤��§���������#�%�K�M�;�=���_�b�a����#�WdG(�< �H�p�.�n��x����$�XdG�����%YdGQRW�y[&@YdG����q,'`YdG��ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ+αβγδεζηθικλμνξοπρστυφχψωC����O���TV�'�YdG12АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя:�(�ZdGˊˋ˙'�&���9�6���/�&�#����������������������x�n��āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ�ńňǹɡ����)�[dG�����������z�x�v�	kjm/� �oC�p[���]�V���			B���������p*�\dG[�Z�X�V�M�K�H�G�F�E�D�C�@�<�:�9�5�4�3�2�/�-�.�,�+�*�)�'�&��(A+H]dGŕĕÕ•������������������������������������������������������:),�]dG?�>�<�:�8�6�5�3�2�1�0�/�.�*�)�(�'�#�!� ����)�,`^dG������������������������������������~*�-�^dGD�C�A�@�?�>�=�<�;�8�7�6�5�3�0�+�*�(�&�%�$�#�"� ������������ +�.(_dG��������������������������������������������}�z�x�v�u�t�s�p�o�n�m�l�k�h�g�e�d�a�^�]�\�Y�X�W�T�S��+V/�_dG���������������ߗޗݗܗۗڗٗח֗՗ԗN�Zx׶s�ι��޹�T�e���%��t�xw�� ����������g������^�	�Ŏ3��T����q�l�Һ����W��а���Qw>���m��wj���Q��R���b�������E����f���Zv]�p��������E��?~��a�L�i���'�a��yb�̂������'0�`dGs�q�p�o�i�h�e�d�c�b�`�^�]�[�Z�Y�X�W�T�S�R�P�N�M�L�J�K�I�E�D�C�A�@�?�=�;���x��z�+v�����(�s��5���V���!�ގ��{�����Ů���_�Ō����������ŢU����p��~��F��������ȱC�ҙ�yp�İ
�1���Tyy(x�������~�5�4��ڧx�K�|�s[�����}�^���/���z�@�-��*�xvB��0�bdGژט՘ԘҘј͘˘ȘƘĘØ˜������������������������Ӛ#�ߜ������{��F�޽���{�v���q�������9vX�R���K�Ѹ����O�v����ҫ����k�o���R����~X�����w�1�<�ۯ�K�������'�����զک��@���0�L�����n�
��������-����P�����!��o��1���bwׄϑ�{J��zOx�ߝ�1�ddGQ�P�O�K�J�I�H�B�A�?�=�<�9�8�6�5�4�1�0�.�-�,�&�%�$�#�"�!� ��������^�|�b�|����A�[�p���� �}��u�:�dzu��F�>�
��5�)���Џ���N�Ʊ/�q{9�O�+�͗�f���y�j���۰A��H���>w�Ƚ؛̮��o����bw��UrM���s��4����*�r�״?�#�u�n�׃ė�m� ��d�����Ͽ�}�G�i��|#{2��{���2�fdG����������������������������������������������������������X��Ú��������´!�d���j��s����F���|��s�#�8��}.���s�,���¤�����ɓ������{ �w�ɝ�^���t���\�V�׻ÿ������6�C�Ȗ
�R��7�m���*�ёל ����������2�ή���}��(�������ù��s�J���ɴj����h�o�ǂk3�hdG*�)�(�'�&�#�"� ������������	����x�\�հb�G����ْ��s�\���åLJm�܌U���P�J�I���K�g����;�����z���d���#�7�P�N�C�v���/���v�Ѥ܃{����&����9���N�������ƒ��6{U��A�!�c��|2�������J�����$�&�]��}��b��Z�#���R�|����<4�jdG��������������������������������������������������������~�}�|�{��������&|�uq��������A�������>�����P���N~j���ڞ��Q��,�ˡ����A�o�`�}$����/�ә֜�����¼x��~Ҹ#���\�i�Q|�5�՝��N������>�(���������˼����v �H|-�ºr�e�n����n{�������޸~{çi�
5tldG�����������
�����������������h��@�L���N��ʨС����9��������g���Ĥ�؅�����C|֨h�����w��������~�ˑ`~^��|���Ɖ��'�����p��������p���S�I�����ֵ��-���ع/�َ�Ҁ}0����3�Ɩ'�������s�G�w�,�_���ҩ̚�����5|ndG���������������������������������}�|�{�y�x�w�u�t�s�r�q�n�m�j�*������r�����ń��t�S�	�V�3�9�#�_���'�����y�7�����p�.���'�B���Պ��:�$��6�N���|��ś(�P����g�g�C���+���4��:���s���J��{H�D��������������߲ٴ�x�K�s�}������W����������ݖ��Z�<��6TpdG��������������������������������������ߛכ֛՛ԛӛֿZ����a���1�x���6�������H�����8����
�Δפ
�,������� �)�����U���x���}���|�D������w��ǴȎu�����Ԯ\�8�1��2�N~���������[���l��������Bx�{��|�n����������b��!����V���-�-��7XrdGr�p�o�n�m�k�j�i�g�f�e�d�c�b�a�`�^�]�\�Z�Y�X�U��}0�#�u����~<������x��Ӽ���S����^����!���Y�h���F����(�M�ͬ܇=�����T�I�"�I�����8�p�����?�ǂ��a���jz����z��K��m���/���x���k���e��z��R�ʹA�[�6�����N�����o�����������~�#�*���Q8xtdG�������������ݜܜq�K�n���
��g����S�d�Ҫi�����ʍد�����]�����\�؉��P����ˣT�����?�i�p��zĠh���:���͸x���z�z���Y���B��k������=�k����o���ڟ�����(���z�г���~���������|�1�ӷ�ނŌu���������z����`�"9\vdGx�w�v�t�s�q�n�m�l�j�i�h�g�f�e�d�c�b�a��4���۪��||��������!�˱�X�������8�8�����������ӕ3�4�R���J�v��l�������ݴ�|�/�ܛ������U��*�q�B�������������V��Z��~�þ�����a�5�o�h�ݛ��#���4�o����i���������{�����1�ŅG����9 xdG���3�i�I�,�������������]�E���?�R�����:�_�d�����������m�1�������Ɇϣ���ܨ�E����C�j�O�F�C���2�ܷ%�E�ԡv�����%�O�~�c�]�j��֮���
�ɹ�8������<������B���Į��ĞƆ(�Ə�}���q�"��}��:�ydG������[���T�9���B�(����׻��՝�@�8� �P�'�?�P�)��Y�ѡӡ����˸@��"�̄u�C�_�k��n�ٶŚ��5���+�&������R����N����#�x��f��_�������������1�w����~������m��a���_�Q�����#�:�.����%�K�X������;�{dG<�=�;�:�����@���
���>�������,���=���}���[�������6�ΠT��������ѬV�@�ݚʵŴ�%���������w���"�Ǒ���"�V�y���R�}�z�(�0���o��%���7��a�F�����.�Ϻ�����j�9���'�������&��������8�_��1�L�}�����u�f<}dGٟ؟ןɟğ����������u�p�c�K�J�I�H�F�D��r��7���W�����7�ο�� �ۻ���]��C���F�V�ЙD���ʻâ��C������������֯��)�«�����X�e��c�Ş[���_��.���}�ׇb�R������B��K�\���|�$�D�5�]����'�Яު���C���`�����ն��e�>���k���k�i�%�7=�~dG�ߟޟݟ۟؟ן՟ԟӟҟџПϟΟ̟͟ɟȟǟƟğŸ����������������������Τ����������M��ŏ4�������N�r���a������0�D���/��9�
����q���&�����[�<�A�a��-�����'�����6�צ������������	�&���W����D��k�l�5�]����J�ޫ4�~�[�����ɩ������X���Z���6�>��dGS�Q�P�O�M�L�J�H�D�A�@�?�9�8�7�6�0�/�.�*�)�(�'�%�$� ����������T� �����̤��V���A�����D�Z�)�� �{���m�1�S�.�^�n���B���ۋ���V�[���m���5�:�ޱġ����\��S�X�*�f�+�_�����*������~�����/�8������W��W�%�F��a�x�c������y�D���$��\�]���ߛ����ʱ�>��dG��������������������������������������������������y�s�r�q�p�n�m�l�j�k�c�b�a�`�_�^�]�[�Z�Y�X�o��o�������t�����ǵȩތ6����k��r�c���)�9���M����"�t��)������!�ԋƋ����'��������g���.�h��ԑ����[�������
�������C������ע{��\�����K�L�՜z�׵*�+���=���P�̓���v�ȕ}��?��dG�����������������ڠ٠ؠנ֠ՠԠѠРϠΠ͠ˠǠƠŠĠ���y�����4�J��u�����˃������[���J�ں�K�������]���_���ȫQ�Q�s�����l�����
����M���}�o���
�������P�Ԍ��m�O�L���֡&�‹�������z���a�ג$����m�$�.�i�����h�Ʉ������o������k�I����t�{@ĆdGc�b�a�`�^�\�Z�Y�V�S�Q�P�O�N�L�J�G�F�B�?�8�7�6�5�4�3�2�1�0�/�.�����?�.�����L����.�����2��W�	���������������ܝ]�=��K�����������*�q�&�|�����j���ɬr�����v�,�
�����3�I���#�E���������p���s�B�'����9��U�w����k��A�߼����=��ݫ��x�G�k����LAȈdG͡ʡǡš¡�����������������������������������������������������~�}�|�s�r�p�o�m�l�i�g�d�c�b�^�[�Z�4�[���c�����^�4�ڨS�\�
�͋��ů@�"���������W�^�G�����A������i�X���4�v���z�Ԕ+�k�q�ɏ��?�e�ޠ�������^�g������������������ҵ�K�e����w�y���ѣ�������U�p�f������������۸,���u��I�e�BĊdG�������������ۡ١֡ԡӡҡСϡ̡͡ˡǡȡá������������������������������(�\�%�5��ؐ[�ޕ"���|�%�І��Z�L�F�e�w���a���f��V�^�'��~�|��q���H�7�W��j����)�������9���Ģ����H�&�������������U���]�����\�׷�j����j��]���n����7�������(�c���*���C�����շ�B�dGI�F�D�C�B�@�?�:�9�8�6�1�0�/�-�,�+�'�&�%�$�!� �������c����������\��ع:�ٰ����n�
�n��r�7�b���@��ם
�|��+��ұ������E�L����ҵ������ݎ��"���>��v���������m�D�>����?���P���ƞ��c�\�.�m���}���u�������ؑ��D����[�ܹǢ��.�������4��C0�dG����������������������������������������������������������z�6�I���u����4���B�0����������h�p������H�P�T�^��Ǥj�C���9�L�Αd���Z�	�9�i�x���/���}�u�y�����՞'�|����@���ُ������r����˥s�������T���!�����g���9����"���a�I�u�Ҳ/���ع�Ͳ������D$�dG4�3�2�1�0�/�.�-�+�$�#� �������������1���y���m�����"�˜k�3�d���������ˏ+�����Ͱ1�c�<�����{�������.���(���������T�����6���U�������%��������8�G���I�������X���5�%�O�H�H��˦
�P�z���r�D�5�T�
�u���ʉ������������m�=���ĹaE�dG������������������������������������C�b���G�,�t�����������f���q�E���z���0�����X������|��������<�2�����������L���B�����A�Ù:�
�ҝ��q�������h�������2�����%��
�T�`�=�C�^�Q�N����R�`�����=�������ݮ�=���êݵ̬������p�{���2F�dG>�=�<�;�:�9�8�7�6�5�1�0�/�.�-�+�{�O���Ωɧ������C�x���4�X�\�}�}���O�+���@�����J�¾ �����	�S�`������!���������#�ع5�*���Ħ��ǚ�V�%�w�V��S��I�%�����ƕ�A���_�����O�
�K��������z���˵|�ը�������������0���n���2�G��dGʤɤȤ����������������������������������������������������������������X���>�����c�W���P�3����ȖA���1�W�ˬе5��z������1���"���4�W�����f�n����+�@�����›��U����o�������]�P���)���������������;�n�������^�4�a����U�K�����O��L���������a�L�e���p������p����G��dG���������������
�	����������������������������)�����X���p���g�U���ݩ������~�k�������:�_��.�b�e�������F�L�����0�4����������Ӗ���ַ����&�+���)�d���J���s�(���q������:�0������u�H���������3��������}���G�J�����S�]�o��������ӗ{��H��dG�����������������������������~�}�|�{�z�y�w�v�t���*���������������R�#� ���y�G���
�ǘ��������"�3������.����˺�������=���w���%�����q���՗:�������c�����V�L�1�)�]����߶6�c�A�*�����}��{������9�l����������ĩ������M��j�>�.���vI��dG�����
��
�	������������������������������<�y��$���V�K��Z�T��U���l����������5����������b�
�������	�������x���Z�����N���9�c�$�{�6�Q�{���������׭��X��I�����8����љ�E���>���ߗ����g�S�,�!������Z�����~�n�����J�O�G�)�q�GJ��dG��������������������~�|�{�w�v�t�r�p�o�n�m�l�j�g�f�e�c�b�a�`���6�q���(��8�+���a��������ģ��9���!�P��������%�������t�����^���������$�	���������������� ���˥0���@����(�������b����L������v���*�ţT�^�������}�z�x�G�_����������t�����r���^��K|�dG������������������Q�r�5�
�y�������1� ���s�V�o�o�ٞ��J�5��������d���������y���ś���V�*���e�¶��ϯ/�?�&���g���E�����p����R�<���>�W��Y�
���Q�+�1���������<���2�פ��������}�	�3������������,�������e��Kx�dG������������������~�}�|�{�z�(���i�'�,�	�v��|�;�\�֡C�޺6��=�������J����������%���*��9�����>������������
����}�������y��ۥ�R�
���C��M�v���Я~�����^�������Y�W�������d�+�^���*�_�
�_�*�����3��O������B�l��L$�dG���$���ũ�1�0�k�����^���"�������P���k����Ѣݯp���O���
�*������������,�ס��X����O�g�p�њr����������O��R�C���!���R�w���ȱl�l������:���>�<�`�x�âb�o��ĥ����������O�`�������?��������M�dG����������r������Q���اI��� �k������0����ݼ����[�y���S���ܸ[�����ٸJ�����1��i������������*�����K��V�e�d���H���c�:����<�ѳ��������=���ھ���æZ�=�O�,���������3�����m���g���~������\Nt�dGS�R�q�Ҿɣڨ���o�n��������c�Z�ߵ[������D�p�)�n���N�������������ŲL�������D�ֺ����)����
�4������+�T�����������k�����
�2�d�A���I�+�D���;�����������פ��|�'�C���������H�2�ŧ����-O�dG�����ש̩ĩ����y�I���=� �	�s�������5���I�޹<�"��"������������W�P�������k���c�k�����n�w�|�A�t�F��}������i�����K���z����v�˚����:�ֶ����f������'���
�������&�`���[���|���s�������������I��M�O��dG����������������������������Z�����X������o�6�:�|��g���a�|�o�=�����ʵ���3���}����Z�N�%�1�_�O�����1�"����^�g�����������n�e�i���������������w�u�{�)�\�X�Z�L�J�\�����!������	����������������������������P8�dG����9�B�h�^�&�)�
����$�(������������������������g���������������@�|�k�y�t�W�I� ����������������������{�o��6���d�k����D�\�������ڭ��������F���5�{�F�6�ض�n����9�G�B�7�9��Q��dG)�&����������ܪ۪٪ת֪ժԪӪЪϪΪͪ˪ɪȪƪĪê����������������ڬ׬٬֬լԬҬЬͬʬƬŬì����������������������������������������n�^�����������������������}�y�t�s�`�\�S�;�U�R�Q�V�D�P�>�@�;�qRl�dGb�`�^�[�Y�X�U�T�S�R�M�L�K�I�H�G�F�C�A�?�>�<�;�:�8�7�5�4�/�-�,�+�*�(�&���˨֨ިͨڨب����Ǩʨ������������|��v�m�k���q��	������������������������
���k���{��(�L���������������y�����o�T�U�`�b�v�r�j�n�5�?�X�3��@�4�V�J������8��������BS�dGīë«���������������������������������������[���<�6�"���&�������1�.�-��$��,�#�!���
��������ط������'����%��·շ��ȷݷ��ڷƷ��ӷ������Q�������L���������������ķ����T�dGR�S�0�~�1�/�2��(������
�"�,���.������������з޷������ݷ���������������ͷ	���۷�q�}�u�w�^�K�Z�L�����p�d�O�N��������&��'�-��H�1�7�U����������ն���T��dG��٬άɬ�������������������������������������������������������������B�^�����C�U�6�;�'��`�2�*����!��1����(������޶�׶��������}�������|���j�f�i�����������{�^�*�������������������'���e�]�J�%�m�/�R�t�0�#�������� �����"�+�������������������o���_��U�dG�������
��
�	�����������������������������������ܬج׬����������������~�v���������J�����������������g�a�`�t���b�����;�*�H�O�]�(�@��������&���_�/�����
���1�8��������������������������^�9����������������V�dGu�s�r�q�m�l�k�h�f�c�b�a�`�_�^�\�[�Z�Y�W�V�U�T�S�a�C�%�j�n�����������*����0�����������������������������������1���������������x���{���s�}�����T�w�k�r�c�[�N�3��
�������������������������������WWܹdG�������߭ݭܭ׭ѭέ̭ͭ˭ȭŭí������������������a�U�F�@�>�<��%������
��������������������������������������h�������X�j�W�]�~���b�K�5�2�]��
�`�]�S�O�N�L�D�A�?�4�0�)�#�~���5�3�0�.�$�'�������������������(X|�dGQ�R�������z��������~�h�}�w�l�t�V�Z�Q�I�>�<�.�����ȧ����O�L�E�C�>�<�9�7�5�3�1�0�F�6�=�3�%�+�����}�������������������������������������������������������y�x�z����XL�	���TG���:�YľdGԾ�:��.��������
�������������������������������h�>��!����������ӫҫ̫ͫ˫ƫū��������������������������|���7�V�L�I�R�w�m�l�]�;���:������
������A� ���JZܾ�:������_�r���X�T���������v�U�u�o���W��<��
�P��R�7�Q�����������������������������W�x�\��j�D������� �:�����1�0���#��(��O��A����������������v�������e�b�d�y���w�z�$�[<��:-�,���������������������������l�q�X�J�)�&���������}�������o������ֳγٳճͳ����������������������~���j�{�r�z��c�[�W�R�X�Q�����������7�����t�����,�������x�����o�n�e�J�R��[���:˰ʰ�����������������������������y�x�����p�J�h�^�S�A�����C����������	�������������������������w�m�`�����t�b�a�`�\�_�]�Z�X�W�R�Q�O�N�L�K�J�I�H�Q�P�O�N�L��\��:i�h���������������������������������������������������������������X�T�����A�I�G�+�8�<�
��(�-�!�����j����1��������������������]\��:���������ȱ����������z�w�}��Y�?�E�H�(�3�#���$���
��������Ůf�`�V�m�M��1�O�G�#��H��!��6�K���������������������������������y���z���\�����|���}���������5�x�v�[���.���������_^l��:����������߱ұͱ̱˱t�������E�����.�g�A�`�F� �:�&��0�u���$���%�I�M�8�����
�	����������'���1���������_�������(�y�o���>�T���x�U�A�C�+�����X�T�K�R�F�A�9�y�x�u�t�s�r�p�o�m�j�0_���:k�g�U�N�C�?�=�;�:�8�7�6�0�-�+�*�$�!� �����������
����Ϲ�������������z���������������z�������B�������3�������������a�m���t�n�d�o�P�D�=�#�.���������������������������������y�I�����|�n�j�d�c�b�`�����E�`p��:������������������������������������������������������~�{�z�y�x�w�Y���������������������������������z�x�Y�D�c�_�\���R�����%����������	�������������������������������}�����������������l���r���|�j�{�����6�d�k�]��M�G�&���*�:��`0��:�������
���
�	����������������������v�d�c�Z�X�F�ϱα˱��g������Z������������������5��!�����������������������R�j�_���W���S�5���(�1�������������l���t�"�����������������������������}���t�j�f�W�K�@�#�%��a��:������������������������\�<�@�4�[�D�;�������E����������(�*������������������	��������������s�U�m���v�|�_�/�8�2�F�.�-������
���������������D�����������������������������������tb���:(�)�6�4�������������k�f�Y�]�a�O�9�3�*�V�N�Q�i�J�?�C�<�5�9�������6�3�5�4�0�.�1�-�'�!�#� �������������
���EcX��:ȴ�������������������������������������������������������������������������������������~�|�{�z�x�w�u�t����"�����������������d`��:/�.�-�,�+�*�)�������_�b�I�̯��-���
��������y�������{�}�y�x�z�v�t�s�r�q�p�n�k�j�h�g�c�a�]�b�?�>�=�4�8�*�%�"��+�-���
�������������������������������������dt��:����������}�]�x�{�\�p�n�`�k�^�d�W�G�R�K�>�;�����5�/�*�)��
��	��
��U�Q�I�?�>�<����
������������������������������q�]�N���)�(��������������������������������������o�{�t�r��e���:=�>��
��������X�R�;�:�*�0�/�1��!�$�����
�"�
���������������������������������������������������������������`���g�k���x�|�����r�������_�D�L�#��f@��:ݶ׶Ƕ¶������������������������������������������������������������������������������������������������z�x��t�s�������������������|���������������������w�v�]���u�h�\�g�i�K�6�&�3�C�9�H�;��(����������������Zg���:0�/�.�-�,�+�*�)�'�"������y�o�t�c�[�]���������_���z�y����s�q�l�h�g�d�Z�V�N�9�3�1�����^� �����G�{�4�)�+�*�'������	�
�����.�
����������������j�<�5���J�.�3�u�e�V�Z�;�����������������+hH��:����6�8�*�2�-� �,�(�����������������[�3�������\�M�����������������������������������������������������p�k�f�t�`�W�S�X�L�s�j�c�i�W�\�V������h���:[�\�������]�v�J���������������|�z�x�k�*�(�'�&���������������ܽ/������W���4���Z�G�E�C���B�@�?�>�:�8�7�6�5�4�2�,�*��i��:��������������ݸܸڸѸ͸ȸ������̸ʸɸǸƸĸ+�#�������������\�������������z�}�y�{�w�t�޼����t�v����ߺ�պٺ˺źº�������Y�U�S�M�
�D�C��������̶ö�����������j��:T�U�dtok���:���uok���:�����uok���:4�/�-�'�&�#������
���������������������Jv@l���:���������������������|�z�y�x�w�u�t�s�q�p�n�m�l�k�j�i�h�g�f��vmX��:����������������gbbb�a�a�w�m���:+b*b)b&b bbb�-2t�-�'(�-�&8&E&�-�-�"?#�"{"�!�"!���-�-2�-�-����(TO���-5������3t���|�0x�n<�0�6�8�;�=�>�?�@�A�B4CtD8EFDG�HLI�J�K�L�MO�O�PQR�S�T�UV�V�W�XY8YXYxY�Z�[�\@]�]X^�^ _�_�`|b�dxf�h�jlltnLpPrptTvx�yx{}�~x�|����������(������|�����|�t�p��إl����0��d���|�ص�Թt�D���4����T�d���h�(����P�X�l���8���@�����|�������P���4�<��oD������� ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P����`��p���������������� ��0��@������P��`��p�������������� ��0��@��P��`��p�pL������������� ��0��@��P��`��p������������ ��0��@��P��`��p�������������� ��0��@��P��`��p���������������� ��0��@��������P������`��p���������������� ����0������@����P��`��p�pX��������������� ��0��@��P��`��p������������ ��0��@��P����`��p������������ ����0��@��P��`��p������������ ��0��@��P��`��p�������������� ��0��@��P��`��p������������ ��0��@��P��`��p�pd��������������� ��0��@����P��`��p�������������� ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p�������������� ��0��@��P��`��p������������ ��0��@��P��`��p�pp������������� ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p�����������p|��� ��0��@��P��`��p������������ ��0��@��P����`����p���������������������� ����0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p�������������� ��0��@��P��`�p����p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p���������p������ ��0��@��P��`��p������������ ��0��@��P��`��p�������������� ��0��@��P��`��p������������ ����0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ �p����0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`�p����p������������ ��0����@���@�A��P��`��p������������ ��0��@��P��`��p�B������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P�p����`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p�€��p�������� ��0��@��P��`��p�À�Ð������ ��0��@��P��`��p�Ā�Đ������ ��0��@��P��`��p�ŀ�Ő������ ��0��@��P��`��p�ƀ�Ɛ������ ��0��@��P��`��p�ǀ�ǐ������ ��0��@��P��`��p�Ȁ�Ȑ������ ��0�p����@��P��`��p�ɀ�ɐ������ ��0��@��P��`��p�ʀ�ʐ������������������������������������������������������ ��0��@��P��`��p�ˀ�������������������������������p�������ː�������������������� ��0��@��P��`��p�̀�̐������ ��0��@��P��`��p�̀�͐������ ��0��@��P��`��p�΀�ΐ������ ��0��@��P��`��p�π�ϐ������ ��0��@��P��`��p�Ѐ�А������ ��0�p����@����P��`��p�р�ѐ������ ��0��@��P��`��p�Ҁ�������������������������������������������������������������������������������������������������p�����������������������������������Ґ�������� ��0��@��P��`��p�Ӏ�Ӑ������ ��0��@��P��`��p�Ԁ�Ԑ������ ��0��@��P��`��p�Հ�Ր������ ��0��@��P��`��p�ր�֐������ ��0��@��P�p���`��p�׀�א������ ��0��@��P��`��p�؀�ؐ������ ��0��@��P��`��p�ـ�ِ������ ��0��@��P��`��p�ڀ�ڐ������ ��0��@��P��`��p�ۀ�ې������ ��0��@��P��`��p�܀�ܐ������ ��0��@��P��`��p�݀�ݐ�p������� ��0��@��P��`��p�ހ�ސ������ ��0��@��P��`��p�߀�ߐ������ ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0�p���@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p�p$����������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������p0��� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p���������� ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P�p<���`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p������������ ��0��@��P��`��p�������pH������� ��0��@��P��`��p������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1�pT���A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q�p`�������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q�����������pl���!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q�px���a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q�������p��������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1�p����A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q�p��������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q������������!��1��A��Q��a��q�����������p���p�%�	q��p���C���'���&����������~������������������+q��p('��.���mq<�pL'������9���6������/�~��q\~���r�(�h��q�h�b�_�a�d���`�3r��p�'`���_���^���]�/�\���[�����&���W�#�V���U���������P���O���������K���J�ur�J���I���H���G�p�j�E�o���A�c�?��rx?���>�/�=��<����r��p,);���:�;s��pP):�p�0�H�}sH� ���s0�p*���pP��������t`������������M�K���=�;�������Ct|��%�#�~��}���{���w��t�w�����u��t��t���s���r�	u�p8+r��-q��-p�o��-�-m��-l��-k�j��-i��-h��-f�e�Ku@e��-d��u��pT,d���X��u�,4LT����p���(@HXt��08����v�����T���V�������x�������A�n�?��6�B�5�SvT5�W��v�W������޻���v�����[�]���w�����`�[w�p�,`���V� �U��w$�p-U���T��wL�p8-T���R���O���N�!xlN���M�z�L�x�J�v�I�cx��p�-I�(H��'G��x��p�-G��&F��x��p,0F�E&E�8&D�)y�pd0D�?#C�ky<C��"B��yT�p�0B��"�"@�{"?��yt�p(1?��!>�1z��p81>�!=�sz��p\1=��<��y��p�1<��;��z�p�1����<D\d�����,4Ldl���������z ;�:�9{��p2:�9�{{��p(29�28��{��pL28��7��6��{	6��5�A|,	�p�25��4�9{L	�p�24�(3�2��|l	�p,32�T1�O0��|�	0��/�}�	/��.�I}�	�p�3.�5-�,�+��}�	+��)��'��&��%���#��}
�p�4#�"��{X
"�����~p
�p�4�|�Q~�
�p�4����y�
�p`5����5���4�����������������,�����*���������&����������������������u�|��������������s�����}����b�g��������g��~�
��
�u�	�a�c����Z���Q���N�}��^�v�j���u���j�p���Z�_���J�G�}��z��N��y�X��m��%���~��<��W�g��.�i��C�_��,�
�%�H�����$��ߐ�F�L��ې���1�J�/��Ր9�����
�ѐ�5�ϐ6�ΐ�̐�����!����(��� �Ð��������������������������������	������������������������������������������������������YT
������������������������������������z�������������������~�����v�����h���������������������^����@������\���e�v�I���y�{���z�p�y�B�{�~�����������9�z�o�J���o�l���k�s�j�[�i�x�b�g�U�)�e�&�d�(�b�$�1��`��)�^�M��\�i�[�6�Z��Y�
�X��W��V��U��T��S�����=�0��9�������3�6�����������
� ������������%��������~���}�������y���x���w���v�������s�������p���o�n���m���l���k�a�������	$	<	D	\	d	�	�	�	�	�	�	
H
P
h
�
�
�
�
�
�
��L
8�|8��@k�l�����j���i���h���g�������d���c���b���a�����_�������\���Y�k�X�p�W���V���V�|�U���y�S�g�R�t�S�P�k�O���N�>�M�3�L�W�K�=�5�I�I�H�@��'�xu�E�'�D�k�C�b�B�J�A� �@����=�*�<��;����9�z�i��z��y���x���w�����u�����r���q���p���o���`o�����m�n�����l���k�����Z���h�^�������d�w���b�w�a���`�x�_�f�����\�P�[�P�Z�9�Y�}�X�:�W�W�6���k�S�C�8�Q�\�N�z�e�_�c�F�J�t�a�X�G�/��4�\�\�D�L�C�C�+�A�L�C�?��>�C��?�;��:�X��8�1�7���6�����4�G���2�3�@�B�*�:�-�8���$�*���9�7�'�q����&��%�����#���"��� ������_���^��]�����[��Z���Y���X�����V��U�����S������������M�������������H�������E���D�����B�����@�������������:�Ͽ9���8���7�����5���4�����2���1���0���b�n�p�����*���)�����T����v���$���#���Z�!�w�I�����k��{�w��u�����w��1����9��s��\��C�7�0�Z�X��k��L��J���
�
�E���*�G��'����H���%�	��>����������y����޽�����������������������������������������������X����ÿ�����������&�������#�����!��� ������������������c���y����������d��[��X�����������S�U��V���c�	�G���o��F��R��~�J�S�>�A�i�D���e�d���n���L���=�6�(�)���8�7�S��m�5��^��\�?�x���e�n�k��e��%�L�1���@�D��N��"����6�����ޏG��܏�ۏ
�ڏ��ُ���h؏4��֏���������Џ�Ϗ�Ώ������ʏ��ɏ���Ǐ��������Ï����������Һ���������������������������������Ä������Ƚ����������������������������������������������������������������������x�����z�����n�������u�����s���������������t���t�������y�����g�~�l�}�a�]�`�b�P�u�V�s�s�m�r�]�q�p�k�o�O�_�:�l�I�H�h�g�o�v�e�G��N�d�;�c�@�b�I�a��8�_�5�%�'�\�I�[�*� ��X�Z�(�U�T���/�8���&��1�7����������!��������������������޹���������-��{�
��ι�����������q���p�n�������j�����������d����b�����`���_�����]���˅l\���[�����Y���X�������U���T���S���R�����O�����N�n�M���p�n�p�I�j�H�a�G���F�����
�4D���C���w�A�}�@���N�>���=���C�;�:�^�9�4�H�C���5�K�4�O����1�%�$�-�0�_�+�*�*�O���%�.��9�%���[��� �^���������
�"����J�����?��9��'�����3�������� ����
������
��������������������������������������������������������ӆ4!�����1�����/���.�����,���+���*�����(���&���%���#���u�!��� �|������������!�����V�����{�x�}���s�w����:�x�r�T��k�
�B��c�
�W�|"
�[�T��(�O��N��M��3����������"�������
�������������	�����������������׻���������������ۇD#����������������%���$���#�y�"��������������������^���������#n��������h��{�X�[�]���y����
�~�O�y�m���p�P�X��7��J��v�o�G���r������n���j�@���b�`���_�l$����.� ��T�U��9�X��B�V��>��J�(�
���?��"�@����2��5�.��3��4�ߎ8�ގ��0%ގֿ׶܎�ێ��َ�؎���֎���ӎ�Ҏ
�ѸЎ�ώ��Ύ�͎��̎������Ɏ��Ȏ��%��ǎ��Ǝ¼��Ď��Î��Ž����˼�����������z�������}�������������%�t&��[����������������`�����<��z�6��L��g��&&�"��'��m����/������O�>����#������\'����ߎ��ގ�ݎ��܎����ڎ��َ�؎��׎��֎��Վ��'Վ��Ԏ��ӎ��Ҏ��ю��Ў������͎����ˎ��ʎ��Ɏ����ǎùƎ��x���Î|�������m���z�����������������-�0(��|�q���������}���������������_�j�R�w�i��f�����r��T��2�.��M��h�{��=��o��(�o�\�n�p�ݎ"�.�W�ڎ>�َe�؎/�/�֎^��ԎL�ӎ��ҎR���)�ώЎ�J���̎&���ʎ��Ɏ�Ȏ�ǎ��Ǝ���)Ǝ��Ŏ����Î
��������������������������������������������������`*��������������������������������������������º��������y���x���c�����5��*p���v�����h���^�������֎S�ՎJ�ԎD�ӎ'�A�u�C�ώΎn�w��+͎"�̎!��ʎ�Ɏ���Ȏ6�ǎ	�Ǝ��Ŏ���+Ŏ���Î�Ž���������������������������������������������@,������������������������=��,�����z������z�r��v�����w�_�i�<��g��t�R�U�m�8�ݎ0�\�ێ6�ڎr�t�؎`�׎w�֎c�Վo�Ԏ��,)�t�Ҏp�&��ώ^�G� �̎:�U�ʎR�Ɏ�Ȏ�ǎ:�8�D��L�&�����?�I�"�O�%�����)���������*�>���������'�/�����-��������,�
���������Ӽ�������������������������������Ҹ������������.��ع������������������������޸��þ������������|�������������r���������������k���������[�k���E�$/��^���u���t���������p�c�i���b�l�[�k���j���i�W�[�g���f�V���d�U�b�C�a�W�%�_�d����/^�`�f�\��[���Y���W�P�V��:�
��O��M� �����5������������������������1�ɍ�0�������������������~���}�������z���y��x���w��v���u��41u�v���t���״r���q���p���o���n���m���l�����j���i�����g���f�����d�M��1d���c���~�a�`�h�_�j�^�]�b�\�]�X�Z�W�Y�X���82X�K�W�5�V�2�U������ю�2��
�����������´������dz����������������������������а�������������2��ȱ����}�����{���z���y�������v�������s�������������m�ɴq�k�y���i���h�a�b�f���k�c�U�\3c���b�U���`�z�_�F�]�]�@�\�>�[�<�F�Y�N�A�m�V�#�U�Q�T�X�?�R�>�P�[���4F�N�"�M�]�C�K��=�I�Z��6�F�F�	�9�3�J�A�K�Z�?�	�>�,�'�+�;�%��I�8���7��6��=������1��0�ُ�40�q����o����οl��k���j���i���h���g�����e���d������X5����������]���\�İ��Z���Y���X���W���V���ʹT���S�����Q�����q�O�����M���L���K���J�m�|�H���G�]��5g�F���E���U�C�^�������?�g�>���c�<�A�;�v�:�X�x�8�}�w�6�J�6�4�`�3�]�2�Y�1�5�F�/����6p�m�S�,�)�o�*�O�K�N��5�L�$�S�#�"�"�D�!�#�&�A��?��O��4�����0����)����#����47����
��������
��%�#���	���������������������������������Ʊ�����������������ֵ#��7p�X����L(�P�p`���d,�x ,!�!t"�"<#�#d$(%�%l&�&T'�'((�(�)X*�*x+�+8,�,�,�-�./�/�0,1�102�2�2T34�4P5�5�6,7�7�8�p�8�������������/���.�������+���*�������'���&�������#�x���!����������������������\����e��9�[������a��z��}�����C�
�D�@��<�
�k�;����4�m���.�>�|�1��*�(���V���r���y�z�x�P����9���x:�����7�����!��
��=���������J�������I����G����=��������ߍ�ލ����܍�<;܍���ڍ׻�؍�׍
�֍��Սԍ����ҍ���Ѝ�����۰̍Ů��ۯ����ƍ����č͸Í������+�<�������������������������������������������r�������p�m��<���w��h��p��������_��E�����k�=��F��>��6����$=�[��`��!��������ݍ�܍�ۍ�ڍ��=ڍ�ٍ��؍���֍���ԍ��Ӎ�ҍ��э��3��=Ѝ��ύٴ΍����������������ɹō��ӷ�����������������������������z�������������g�������w�u�D>����������x�������{�o����q�l���v��o��T��o��5�D�ߍ7�^�4�z�.�p�>�L�׍f�֍w�Սx�ԍn�ӍK�H���?3�Ѝ �ύ_�>�͍<�H�	�ʍ���:�ƍ�3�č*�0�+����������9���G�����������������#���*����?��,�'�հ!���ۻ�����	���������������������������������������ʻ�����������������������������������������;�|@��̮Ǵ����������Ϻ������������������{���������������w�s�v����t���s���r���c�p���o�}�hAo�����m�c�W�k�k�j���q�^�|�����d�X�c�e���a���P�K�^���]�t�\�m�f�Z�e�Y�8�]�W�]�i�U���B=�T�U�S�N�I�b�R�O�1�N�J�5�e�K�*�J��I�Q�H�*�G���E�%�D�(��(�8�@�/�'�0�=�E�<��%�:���8�1�7�#�6�+�5���B5�v� �u�"�t��s�����o�
�n���m��l����j���i���˸g�ܷf���e���d���c���b���a���C��C�߲��]���\�����Z�����X�ή��V�����T���S�����Q�R�����P�����N�}�M�l�L���K�Y���HDJ���I�������Q���D�\�C���B�G�A�I�@���?�m�>�4�=���<�}���9�Ǖ�D9�A�8�o�a�6�"�5�+�[�3��_�1��0��/�
�.��-���2�*���)�.�(���&�%��$�	�hE��#��"���!��������������\���[���Z���Y�ҫX�K�F��W���V���U���T�~���S�v�o�Q�z�x���N�����L�a�K�~�����pFI�|�H�V�{�F�{�E���D�n�C�Y�^�A�j�@�N�?�p�A�=�g�6�;�i�:�D�?�8���7�H�6�~�5�s�4�ϖ�F4�4�3��^�1��E�/��.��-�-�,�V��*�=�)�)�(�B�4�&���%��$�	�#��"��	� �����������G�
�����������)������
������������ݴ����ٶ����
���������E�����C���B�S�4H��A�����?���>���=��<��г:�������7���6���5�����3���2�����0���/���.���-�����*���)���(����H(���'���&���y�$�t�#�^���m�p�n�o�����a��d�����o��N��^�8��j��(�P��D��9��ח�I�R��D��.�
�=��T����	�.��#�.�����������DJ�
�������������������������������ک����������[��J���3�������߼/��.���-�����+���*���)���(���'���&���%���u�����!��� �����������������(Kh����\��|��m�j��f����{�k����`��i��`�
�V���s���	�F��}�M�O��F��5�c��B�G��H���K���B�]�ߘ�K��!���,���1���e���6���]���O���6�#����V��!��5�:��������/����%����������!��L��ߌ�-�݌�ں����׌������Ԍ��ь�Ќ��ό��Ό��͌��̌ʵ����Ɍ���nj��ƌ��c�tM��Č��Ìڧ���������������������������ն������y������������������������������� N����������X�����g�������k�������P�I���\�~�����یy�z�I�W�|�}�?�<�ь��Ќx�ό1�v�͌��N͌0�̌\�ˌ)�a�ɌȌ[�nj�ƌ'�Ō�0�5�Œ=���%�����%���5���)�pO#���.���������!����������˱���������������������Ŵ����Ԯ������k��O��������������������������������t�������s���u���g���d���s����P��`���K���E�������F�|���A�֌M�ՌI�Ԍ:�ӌ��Ҍ.�ь,�0�8�Ό �͌�Q&�̌:�ˌ �ʌM�$�%�ƌ1�Ō)�'�Ì�Œ�L��������
���	������4�����������1��Q������������������د�����������������������զ����s�R��������������y���������������i��������������R������q���y���x�f���o�ی��ڌ_�ٌ}�،T�׌U�֌���R+�Ռ �Ԍ>�ӌC�A�ьЌ(�ό+��͌9�PS͌�p�S͌��������v�Ȍ��nj����d��c�������{��S�Z��X�Z��f�������F���N���^�O�u�w���n���s���<�Z����T�X�^��j�T��!�O�<��R��K����F��A��9��������3�ߌ&���tTތ���܌�ی�ڌ�ٌ�،�������Ҍ�ьǵЌ��ό��ͬ͌¾̌��ˌʌ��Ɍ��ȌA��TȌ������Ō��Č����׵����۸������������ҩ������������u�����������s�������z���q���������������UX�c�����������h�����R�����i���Y���ތP�|���H�E�o�q�׌S�֌w���ӌ4�Ҍ8�ьm�Ќl�όX�Όu�S�̌ŝXV̌U�?�J�ɌV�]�nja�/�ŌR�ČK�L�Œ�I������B���
������7����*�'���;������:�#���A��������
��������W���(���ع��������� ��ʨ������֨����
�����������������������������Ţ������������������I��W��֮��������������������ܹ���~�������{���z�Įy�r�x���v�v�u�u�ç��r�o�q�_�p�����\���l����Xl���k�X�j�e�]�m�T�f�t���d�U�l�W�a���L�]���@�[�Z�P�Y�R�X�Q�W�g�V�T�X�T�*�<�R�$�Q�#�}�O�7�N�͞tYN�4�M�k�L�j�T�J�*�I�:�H��G��K�D�*�C�.���
�&�>��&�<�D��������6���4���3��2��1����4Z$�/����.���+����j�
�i���h����f�����d���åb���a���`���^���]��\�¤[��Z��Y����W�Q��ZW�׷V���U�������R���P���O���عM���L���K�շ��I�������F���E���D���C���B�A���@�����?����[?�|���=�n�x�;�9���8���7�[�6�j�5�\�4�W�3�^�"�՟\\1��0��D�.�6�-�O��+�:�*�J�)�A�(�<�'�1�&�0�%���$�%�#� ��!�(� ��#��$�������\�2����������Ҫ������������������ޱ֯������G�ѤF���E�Y�l]E���D�ҵC���B���A�Я����>���=���<�����ʱ9���8���7�Ĺ6���5���4���3���^3�4���2���1�U�0�j�/�L�.�S�-��,�[�+�@�:�)���(�v�'�y�&�z�%�w�$�ݠ�^$�A�#�)�e�!�d�b�U����>��������������$_۪�������$�����������Q�����O�a��_p:4;�;�<=�=�=<>�>�?t@`AB�B�C@D�D`E�EhF�F|G,H�H�I<J�J K�K�LlMN�NhO�OxP�P|QR�R�RHS�S�S�SlT�T�UPVW�W�XlY,Z�Z�[T\�\d]^�^_�_�_�p�_O���N�����L���K�q�l�J����`J���I�X�H�J�G�|�l�z�D�N�Y�B�k�o�@�C�?�A�>�O�K�� a5�;�3�:��#�8�@�7��6���!�3�)�2���0��1�	�#��+��*�B�)����!�&�����#�'��a�����2�����������[��Z�ѬY�Ĥ����U�ع�ҵR���Q��P��O��N�i�,bN�����L���K���J�����H�������E���D�������A�B�|����bA���@���?�x�>���=�j�<�P�;�M�:�t�e�_�7�|�6�W�R�4�S�3�2�9�1��,c1��0�I�/��.�>�-�5�S�+�D�1�)�(�(�	�'��&��%�"�$�/��c$��#��"����a���`��_���^���]���\�q�d\���[�����Z�s�Y���X���t�V���y�o�����Q�o�P�f�O�����pdN�\���L�q�c�J�_�I�\�H�^�G�?�F���E�J�D�K�c�B���Q�@�}�?�y�|�=���<�%�;�V�{�9�n����d#�]�5�j�4�,�d�2�c�1�b�0�`�/�I�.���5�,��3�*�0�)���.�
�%�7��e%�'�&�$��!�� ����#����פ���[��Z��ܨX���V�ˡ˺������������M����K�����«H�y��eH���G�F���E���D���C���ߝ��@��������<�z�~�:�}�9�����t�w�5���4�t�3���2���l�h�/�d�k����f-�.�Z�V�,���+�Q�*�I�)�>�+�'�<�&�ŕ.�ĕ��lgĕq�Õ:�•_���a���I���G���"���F���<���8���4������+������&�-���(���1�ߜ��?��g!�������������
�С��������������������������?���dh?��>���ު<�ޫ��:���ݵ8��}�6���5�����3�2���1���0���/���.���������*���)�å�h)�Y�(�H�E�'�����?�#���B�!�3� �l���(����#����xi$���������������������
�����������G��i�����������������ů��ұ�����ַ����D���C���ɝA�����@j@�ھ?���>���=���<���;�����Ҳ8�˵7�6�Ͳ5���t�3�r�y���0�����������+���*�����(�k�i�&���%�˦�jf�$�[�#�a�"�]��� �Y�_��r����k�O����f�y��9��9��n��z�3��T�
�hk�*������N���P���/�?���>���=�&���K�+���8���	�4�G����<���+�*�����0�-�+��%����"�,��������O��k�����Ӛ��Ҿ��ٰ�����������
���ڞ��е�����������}������z�ˣx�����v�؛u�ҙt���s������l��לp���o���n�����m���l���k�����h�}�g���{�e�x�d�ɩ����a�����}�^�p�]�n�\���k�Y�r�X�]�W�d�`�ӧ�m\�T�^�S��T�W��R���K��G��6��>��;��n��C��Q�R���@n�b��7��E�:���J�ߗ�ޗ�ݗ
�ܗO�ۗ�ڗ���ٗ+�)�ח(�֗+�W��n՗�ԗs���q�޺p��o����ݼ�����i��h����e���d��c���b�ȫ��`�����^���]�߶��[�ɬZ�՝Y���@oY���X���W���T���S���R�����P�����N���M���L�r�q�J�K�����I���������E���D���C�ۨp|���A���@���?���=���B�;�ژE�6�Q�ט4�Q�՘��Ԙj�R�ҘA�ј�3����p�͘\�d�˘��"�Ș\�Ƙ�Ę�Ø�˜���C��������������������������_�$q�����Ú��ȩ���Ͱ�����Q��P��O�ϣ��֜��K���J���I���H��������q�����B���A����?���ݫ=���<�����9���8�6���5�4�������1���0�����.���-���,��������&���%��@rX�$���#���"�|�!�s� �v�����X�m�����_�~�=�U�@��o��k��%��r���F���]��� ��R������8���K�A���2�/���R���.���-��������=�4���-������$���g�xs������'���
����������������������������צ��Ġ���� t����������*���)���(���'���&�{�����#���"���t���� ���������������������=�����������{���@��J��}��;�u��t��-��tn�q�	�.�j��f������W���K���@���+��'�������o��u����������*���������������������������������ֺ�������͗��ԡ��¶��ڟ�����u����������������������~���}���|���{�����ė�������b��_��z����������v�s��I����
�-�+��@�n�5�R��!�5�Dw/�1��H� ��*��)��9���
�4����2�����7�+���7������L�
������	�
������6�w��w��Τ�����ܸ��ӡѡٸ���������������ә�����������ś��4x���}���|���{���ݮy���x���w�����u���t���s���r���q�����̚n���m�������j�����������������������x����|��v���������L�����W�����������w���v�T���u���h��i�g��]��j��m��\��"��=�tyi��]��)��K��`��C��H�C��2�ߛ6�9�/�;�3�G�כ*�֛՛&�ԛ�,zԛ(�ӛr�޹ڨp��o��n�̤m����k��j��i��g��f�âe��d��c���b���a����za�Ȗ`�����^�]���\�y�t���Z�o�Y�c�X�v��@{]�[�U��X��[�d��\�G�K��E��{��I�4���+��6���+�)�*�2��'���2��-������ݜ �ܜ��x����{x��w�
�v��	�t�*�s��q�����n���m��l���Πj���i���h���g���f�ɮd|f���e���̬d�Ğc���b���a����|�~���j�M�,}����<���5�����H}����<�ѯl}<�=�����}<�g�;���:�ٟU��}ٟ`�؟J�ןQ��P�A�O��N�
��L�������ɟ������
�ğ����������������}����"��ߵ��������՝���������������������ˬ����������ܛ������������ɓ���������������ֶ����ġٰ\~����ݛע������u���������p���������������������Ɩc���ϑv�ê�����������K���J�n�I��LI�t�H�s�F�����D���S��~�V�ߟ@�ޟQ�ݟN�j�۟J�d�|�؟L�ןC�u�՟?�ԟ<�ӟ9�ҟ]��ҟ5�џ_�П'�ϟ)�ΟD�͟D�̟ �8��ɟ1�ȟ
�ǟ�Ɵ�ğ�9�<�Ÿ,�*����������������������
�����������������S�����Q���P���O���ŎM���L����J�� �a�a$b�b$c�cdhd�dxe�e�fdg�g\h�hpi�i8j�j`k�k�lxm8n�n8o�o�pq�q8r�rpst�t�t�u�u�v<w�w,x�xly$z�z8{�{�{\|�|$}@}d}|}�}�}T~D�������p����ŞH�����ѳ��D������A���@���?���ݖ��������9���8���7���6���������0���/���.���o�����*���)�\�(�Z�#�Ȃ'�����%���$�q���[��� ����M��W�x����\�������*�e���(���T�Q���2�H���P���K����%������A���$�4��(����������G����5�����������B�����	���������/������������ْ��ގ��Ω����������������������ʵ������������y��ϯ�������s���r�׭q���p���֡n��܄n���m�ёl����j�k���ȱѣ����ضc���b���a���`���_���^�t�]�����[���Z�r�Y�[�X�+�������������]�d����V�S����^����������Z�����|��{������r��l��7�V�a�j�S�@�m�D�i�ڠk�٠d�ؠ�נH�֠]�ՠK�Ԡ!�����ѠM�Р��A�ϠG�Π	�͠�:�ˠ��������Ǡ
�Ơ*�Š&�Ġc�Џb���a��`�����^�Ų\��ŚZ���Y��t�����V�����ЯS�˥Q���P�˦O�ըN�����L�����J���G���F������z�B�y�i���?���q���s�j�8�q�7�6�3��7�l�6�W�5�h�4�g�3�d�2�q�1�Z�0�V�/�N�.�͡D�o�ʡ0�b�x�ǡ1�R�š.�%�-�u���¡O���,���1���$�_���@�#����!��������:�����'�����%�8�������
���������������������������8���������ݩ�������������ݯɧ��������ݚ���Δ�����ط����Ǥ��Ō�����ݷ~�շ}���ڷ|����|�������Ģ��ӷȷڷ·s�r�����p�Ʒo�m�طl���~�i�����g�o���ķd���c���b���������^�������[���Z���;�̊��������T��������������i�����q��������J��m�z�;�0�1�2�}�/�1�ۡI�(�١,�.�֡}���֡"�?�ԡ`�ӡ�ҡQ��С�ϡL�
�͡�̡�ˡ������ǡȡ�����á�1��������������8�	�������������%������������޷���ݷ��������з��ޠ��I�۷�ˑF�ͷD���C���C���B���Ħ@���?�����������:�9���8�����6�|���ĩǢ1���0���/�����-�C���-���,�}���+�w�u���q�'�e�&�A�%�p�$���l�!�V� �^��}�d���Z���������N���K�L����O���N���U���'���=���H���)������7���3�1�-���&���'�Ƕ�������!�������������������Йӕ�����������������������	�,���4��3�՜2�ߛ1���0���/�ն.���-�����+�~�������^�e���$�K���$�`�#�U�d��� �B�C���;��6��2��O��1�'�*��R����,�����(���!�����������������
�����5������������Ϸ��������������޶ܝ��׶���������>��=�����<���;���:���9���8�7�y�6�}�5�S�p�5�6�X�K�Z�W�m�1�R�0���/�v�.�R�-�r�;�ʤ:�ɤ3�Ȥe�0�1�/�^�3�*�����+�E�a���0�$�a�!���"���1��������<�����
�
����������������׸8�2�������*�������܌��������������������������������������������������������Ȓ���َ��������������������������������������������������������������������[�t��\���������T�
���	�h���������������|��x��~��|�k�r�g�����,���`������������D���_�����P����L�����������D������������������߹������������������#������������������~���}�����|�!�L�|��{���z���y�ƞ��w���v�����t�����z��x��c���a��_�x�
�{����q�
�v�	��x�~�V�U�K��|�Q��L�O���{���,���I���T���?�9�>������"�<���3�3���1��h��E�� ��E��;����F������������
�������������������������������ũ~���ם|���{�������w�v�����t�՞�r����p���o�n�)�H�n�Ȏm�����l����j�����g���f���e�����c���b���a�`���k������������^�����q���]���o���X��� ���o���#����������1���������#����������������������������~���}���|���{�1�Ę˥{�ڭz��]��s�X��i��0��������l�I���(�����������S�9�ęS���R�v�{�ܙR��@��4��������������"�����%����I����2�������(��	��,�-��ש
�'�!������.�ڨ����̩ا
��ڬ
��٬׬ĩ�֬��լ˜Ԭ��ҬʍLJЬ�ģ��ͬՊ����ʬ�������Ƭ��Ŭۥ�ì��ҝ������������ƉǑ��A����������������������פ�����������������ׄ��ţ����y�����y�̂��|���Əo���ȕ����������w�����������������j�������������[���}�����T���M�1��]��s�(�o��ž`��j��i��?�c����\��W�����Ԝ����I����)���æ��&�����ĥ������Ō����}�������ŧ��h�������������r�����������������0�����m���}���������_�o�����u�t���}�����V��W���I���n�g�w����Z�C�g�s��s����a�����f��u�3�V�P�p�ܪͿ̝ܪ9�۪e��٪*�c�תZ�֪V�ժ#�Ԫ��;�Ӫ'���Ъ��Ϫ�Ϊ��ͪ������˪���ɪ��Ȫ��#�ƪ��Ī�êb���`�����^������[�Y���X�������U���T���S���R������M�L�Q�$�L���K�����I�׃H���G���F�������C���A�����?���>���<���;���:�����8���7���ԟ����5���4�o�g���O�/���-�\�,�U�+�M�*�P�n�(�t�p�&�\�īëk�«f���R��h���`���`���i���W�X���S���M���L���9�����C���(������������ϹR�Y�d�R�S�����S��F���{����y�5�x�_�u�k�u�d�t�s�]�R�r�F����٬p�C�o��/�m�!�B�b�j�ά�_��ɬH�1�����<������ �1������5���4����.����������(�������ޕ
���,����-�$���֡���"����؅���؉����Ѣ��ŏ������ٳֳ��ճ܃Ԕ���γ������ͳ��ԑ���������a�������Ԅ��<��l����0��Ċ��0�܌�����$���$����h���0���l�$���D������@��P�����P�x�����ԙ������X�̜�(�ĝ���̟`��\�x���������p��›Ù��ǚ����ג����������������פ��ƒ�����������������������â��������ǂ������������
�������������
���	����������~�d��e�{��z���r�F���5���j���l�c���c�s���[���T��h�r��W�X��R��Q��>��/��A��U��V��R��Q��P�$���?~����D�����7��@�>��ܬ��;��جި׬'��׬*�u�ڨ֨s�بr��q��˨ͨɣm�l�k�ʨǨ܇h�����f���ס�c�b��a���`���_���^�����\�i�Ԧ\��[���Z��~Y�������W��V�|�U�v�T�����T�m�S��k��}�����n��������k�����p��g�C��8�6�<���h�߭2�_�ݭu�ܭ3�-�*�:�׭,�O�9�a�`�(�ѭ �h���Чέ�ͭ,�̭[�˭C���ȭ��6�ŭ.��í���������������������/������~���������ٞ������ń��Q�q��Q�R���h�R��{����|���/������7���������y�����-���,���ԩ,�-�W�˰���˰4�ʰ?��˰��ʰi�
�h���$�h�i�������H��Z���h��6�Z��5�3�4�����Z0�1���.���$�-�5�}+��{+�'��&�K�(��#�!��� ����{�&����G����0��{��ؐތȱ�����������Ȗۋ����ǘ
�������������Ɇś�{����������ɏ����������8��������|���љ��Ҁ����ؑƕ�������}����z���w�ӗ�����}��Ɔ���������qŅ�������������������������}t����������������~����y|��{��z�P�x�߱a�w�b�ұu�4�t�ͱc�̱|
���˱̱O�P�̱k�ԋӫΑҫg��yӖ�|��ͫ՗̫�˫Ƌ��Ԍ���ƫ�ūU���d���ǂ������N������������z����C�����?���=�����;��~:�����8���7���6������������0�������-�Zx��ԭ��+���*�p�|�n�T�q{��$�V�[�_�!��� ���d���yy���N~O���{�}�X�c�p��y��t��s�l�V�]������Y���`�
�Q���\���N�e���W���S�x���*���=���;���������������
���W�L�������������"����{��#{�����}��ܽ�������������������ׇ���x��������ߗ������������~�ނ����{�‹z���y���x���w��|��z��x��{���w���k����|����J�
�Y��P���|
�`~	�V�h�{��^��}�}�(��Qw�+�����#�����w��������)�����&���������(x������������_���������ݎ����Ů̄������њُ�������(���H�(�)�ȴ5�&|j�{�l�0�g�j�a�DQ|%�\�t�ZvA�r���]�4� ��B���
����*����+�����%�A����0�H|�6{���Ox������g�����}��ϱ��α��͋˱���|ˏ����ȧ޼����<���/���.��w-���,�����,�-�v�t�+�O�*�4�)�L�C|��,�U�+vL��E�~{E�C��E��xv>��n{-���<�O��9�L�N~7���5�bw��3���[�1�]�0�8��D�A�����������o�4�����=�����=�>���Ĵ>�ݶx�0�]�9�bw��׶9vB�b�<�a�R�`� �P�_�V�\�5�ش]�c�Ƕ1�Z�W�~X�¶W�>wT���
�R�U�Q���O�
�N����L��K�8�J�;�I���H�}�����������}��������w�8���������������������{��������������ߺ��ٺ��պ�������˚��0�˺/�ź.�º-���,���+���*�o�)����|'���l�'����~}�z�z�"�{�y��w��b��t��J����=�̶�����$���[���8�[�\����L�����^�G�E�d���)�E���C��B��s@��?��>��:�%��8�C�7�ݸ6�ܸ5�ڸ4��Ѹ2�͸����͸.�,�ȸ*�̸��ʸsɸ��Ǹ�Ƹ��ĸT����T�U��X�U��M�l�������������������4�Ʉ��||��̓/�����-�����'���&�}�{�k�#���y�z�x���xv��z�����t��~s��vr�b�q��p����n��k�
�j�\��h��g��c�jz�a�b���,�]�����3�1��(�����Y�U��S��M���D��C��D����3���.���%������U������z�������̯��z��І��˃��|��z�y�x��w���u���t��s��q���p���0�p�q������un���m��xl���k���j�ʉi�̶h�ög���f���������p������ĺ�������Z�����Ur�L�*���(�W�'��&��X�xD��Bx6��oi]�x��p�5`���̦x�ȧ���`�t�����̩���@�`�x�0����H�\�̭��D�دt������@�T���4�����,�����д0��d�Ķ�0�D�\�x��P�d�x����� ���(���D�p���Ļ�p̻Ļ�pؼ��ؼ�(�p��(:)���:)�)���)�p(��)~*E�8�~* +��L� +�p`� +�+��p��+dt���dt�p��dtuM���u�u�����u�pн�uJv���Jv�v���v�p��v�wU���w0x��,�0x�p@�0xq��P�qr�d���|��������Q���QR����R���о������������1���12<Znx�yq]�$�q+COTV:���T����Y�mop�Y��������MiY2tfYeYdYbY`Y_Y#���_Y2t^Y3t\Y[Ye���p�7��� �0�D�X�h�|�������Ƚؽ���$�8�H�\�t�������Ⱦܾ���L�|���������[YgbZYmq��ZYbYY���YYbXY+��XY�aWY�aVYm���VY+bRY*bQY)bOY&bNY bKYbIYbFY����p�9FY	�DY�������l���2Y	(Y	$Y	YY3����p(:Y��u���D�X�x��pL:�Xkj��X��������\�d��������0���8��pLG|��p����;����p��m���P�\�h�t��������������������������(�4�@�L�X�d�p�|����������L���9�`����м����t����������09	
��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0909��	

 !"#$%&'()*+,-./0123444444444444444444444444444444444444444444444444444444444444444444444444444��09090909090909090909090909090909��	

                     090909��	

0909��090909090909��	
























0�			



  !!!!!!"##########$$$$$$$%&'(()***+,---.////0001233455567889:::;<===>?@AAAAAAABBCCCCCDDEFGGHHHIJKLMNOOOOOPPQQQQQQRSTUUVWXXYYZZ[\\\\]^^^___`abcddeefffghhii��	


��	









09��09��	








09��	





































































��0�	



 !!!"##$%%%&'((((((((((()*++++,,,---./////0000122222222333333444444444555667777889999:::::::::::::::::::::;<==>>>>>???????@0909��	
0�				







  !!""##$$$$%%&'((()*+++++,,-...//0001234456666660909��	



































































































09��																																																																																										0�	

 !!""#$$###$%%&&&'())))**++++++++++,-.....///////00111111123333444555555555566677789::::;<<<=>>>>>>????@@@@@@@@@@@AAAAAAAABBBCCCCDEEEEF0�			










  !""#####""$%%&''()****+++++++,,,,---./////000112344455678999:;<=>???@ABBCDEFFGHIJJKKLMNNNNOPQQQQQRSTUUUUUUUUVWWXXYZ[\\\\]^_``abbbb0�	


 !"###$$$$%&'())*****++++,,,,,----..//0111111223455666788999::;<<<<<<<=========>?@ABCDDDDDEEEFFGGGHIIIIIJKLMNOOPPQRSSSSSTUUUU0�		




    !!!!!!!!!!!!!"""""""""##$$%&''''''())**+++,,---./00000000�		


 !"###$%%%&&&&&&&&&'''''''(())*++,,-...////////01111222334456667778999:::;;;<<<<=>>?????@@@@@AAAABBBBBBBB0�					

















 !!"""""#$$$$%%&''(((()*+,--../0�	

















  !!!!!!!"""####$$%&'''''())***++++++++++++,---./00111123333444556678889999999:;<<<<<===>>>>>??@@@@@@@@@@AAAABBBBBB0�							




















 !!""""""""#######0�			


         !""##$$$$$%&&&&&&&''())*++,,,,-../01222234555566667788899::;;<<<===>>>>?@ABBBBBBBCDDDDDDDEEEEFGGGGGHHHIIJJKLLLLLMMMMM0�	







     !!!!!!!!""""""""##$$$$$$$$$$$%%&'''''''''''())****+++++++++++++,,,,,,,,,,,,,,,,,,,,,,---...0�	






  !!!!!!!!!!!!!!!"#$%&&&'(()))*+,-..../////000001222233333330�	


    !!!"#$$%&&'((()*+++,-.../00122333344444456677777789999:::::;;<<=>>>???@@AABBCCDEEFFFGGHHIJ0�			




    !"###$%&&''())*+,---..////////000111112223345677777899:;;<<<<<====>???@@@@@AAAABBBBCCDEEEFFFFFFFFFFFFFFFFFFFGGGGGGG0�				




  !"""#$%%%%&'(((())*****+,,,-0�		




  !!"##$%&''''())))****++,,,,---.//01112233333344555567789999::::::::;<<<=>>>??@@@@AABBBBCDDDDEFGHHHIJJJJJJJKLMNOPPQQRSTUU0�	




 !""#$$$$$$$%&&&'''''(((((((()***++++++++++,,,,,,,-./////////00112222333334444556777789:;;;<==>>>>>>>?@AAAABB0�					








			





               !!!"""#$$$%&''())*+,-.////////001112333345566677777777899::0�	



 !!!!!"""#$$%%%&&&'(())))****++++,,,,,---------...../////0000111122222222222222222222222222344444444556666667889::;<<<0�	






 !"""""#$%%&&'())))****+,-.../01234456666666678888888888999:;<==>>>??@@ABBBBBBBBCDDDDEFGHIIJJJJJKKKLLLLLLLMMMMMMMNNNOOPQRSTUVVVVVV0�								





 !!!!"""#####$%&''''''''''''((())))))))**+++,,,,---.//0000000000000000011223340�			



    !!!!!!!!!!"##########$$$$$$$$$$$$%%%%%%&''''''())))*+++,,,,,,,-----..////////000000010�									







0�		

























  !"#####$$$$$$$$%%%&&&'((()))*******+++++,-.///0123334566777788999:;;;;;<<<=>0�		



 !!  "#$$%&&'()**++,,---.///000012233333345566778999:;;<=>?@AAAABCDEEFFGGHHHIIIIJJKKKLLLLLMMNNOOPQQRSSSSSTUVWWXXYYZZ[[[[[[\\\]]]0�				



  !!!!!!!!""""""""####$%&&'''((((((((((())***************+++,--.....///////0001122334556666789::;<<<====>>>???@ABCCDDDEFGGGGGG0�										



       !!!""#############$$$$%%%%%&&&&&&&&&&&''(())))))*++++++,,,,,,,-----------.////0�														












 0�			











     !!!!""""###$$$$$%%%%%%%&&&''''''()))*********++++++++++,,,,,0�	

  !!!!!"#$$%%%%%%%%%%%%&&&&&&&&&&&&'((()*******+++,,,,-.////0110�	

 !"#$%&'()*+,,--./012344567889:;<=>?@ABCDEFGHIIJK0�	












0�0�0�0�	

 !"#$%&'()*+,-./012345555555667788779999::;;<<=>==?????????0�	

 !"#$%%%%%%%%%%%%%%%&'()*+,-./0123456789:;<=>?@ABCDEFGGGGGGGGGGGGG0�	

 !"#$%&'()*+,-./0123456789:;<====>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????0�		

                                                                            !!!!!!!!!!!!!!!0�	






0�				









     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0�	

0�											






















0�	








   !!!!!"""##$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%0�	


 !!  !"""####$%&&&'())*++,,--.../00122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222220�			










 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_P`abcdefghijklmnopqrstuvw0�			





   !"""########$$$$$$$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdFefghijjklmnopqrstuvwxyz{|}~��0�						



 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx0�						


  !!!""!!!!!!!!!!!!########$$$$%%%%%%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����0�		

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh5ijklmnopqrstuvwxyz{0�				


 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv0�		




  !!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0�	

























 !"#$%&'()*+,-./0123456789:;<=>?@ABCDE6FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk7lmnopqrs0�		









 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0�	

    !!!"""###$$%%%&&&&&&&&'''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������0�			







 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv0�			




 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn0�		









 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr0�	











  !!!!!!""#$%&'()*+,-./0123456789:;<:=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\2]^_`abcdefghijklmnopqrstuvwxyz{|}~0�	




            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0�	



    !!!""#$%&'((()))))))))))))**+,,,-...../0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu1vwxyz{|}~�������������0�				

       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[?\;]^_`abcdefghijklmnopqrstuvwxyz{|0�	


 !!""##$$$$$%%&'(()**++++++++++,,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�����������������0�	







    !"###$%%%&&&'''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������0�	













 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0�				















 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvrwxyz0�									






















 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs0�			












 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq0�														



















 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn0�					



   !!""""#$%&'()*+,-./01234*56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��0�		



   !!!!!!!"""""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{p|}~0�		











 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw0�		

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{0�				







 !"#$%&'()*+,-./0123456789:;<=>?@A)BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|0�		



























 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh0�				








 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab0�	

 !"#$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`0�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefffff0�							









 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMMNOPQRSTUVWXY3Z[\]^_`abcdecfghijklm0�	

	 !"#$%&'()*+,-./01232456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ0�	



 !"##$%%&''()*+++,--.//011234567889:;<=>>???@A>ABBBCDEEFFGGHHIJKLMNOPQRSTUVWXYZ[\]^_`abcdedf0�			







            !!""#$%&'()*+,*-./*0-123456789:;<=>??@ABCDEFGHIJKLMNOPQRSTUVWXYZ[WW\]^_`_abcdefghijklmnopqrstuvwxyz{0�							














 !"#$%&'()*+,-./012345(67889:;+.<=>?@AB@CD8E9FDG=HIJHHK2ALMMGNOPQRSTUVWLX5YZ[\LY0�	

 !"#$%&!'()*+,,"-./012345667859:;<=>?1@ABCDBEFGHIJKLHMNOPQRST0�				


  !"#$%&'()*+,-&./0123456789:;<=>?@ABCBDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��0�	






 !"""##$$$%&'())**+,,-,./0123456789:;<=>?@ABCDDDEFGHDIJKLMNOPPQNELRSTUVWPXXYZ[\]^[[_``abcdeVfghijjklmnopqrstuvwx0�			



 !"#$%&'()*++,-./012332'45*677889:;<=>?@A=:*BCDEFBGHIFJKLMNOPPQRSTUVWXYZ[\]^_`abcdee0�			



 !"#$%&'()((*+(,-./01(23.4567889:;<=>?@ABCDEFEGHIJDKLMNOPQRSTUVWXYZ[\]^_`abccdefghijklmnopoq0�	

 !"#$%&'(()))*+,-./0123456789:;<=>?@ABCDEEFGHIJKLMNOKPQRSSTUV��0�	

 !"#$%&'()*+,,-.//0122223455566789:;<=>?@ABCCDEFGHIJKKLMJNOPQRSTQU0�	

	 !"#!$%&'()*+,-./01--234567879:;<=>?@ABCDEEFGHIJKLMNOPQRSTUVW0�	

 !"#$%&'()(*(+,-./01233.4566789:;<=>?@ABCDEFGHIJKLMNOPQRSTMUVWXXY0�	

 !"#$%&'()*(*%+,-./0123456789::;<=>>?@ABCCDEFFFGGHHIJKLMNOO0�		

    !!!!!"#$%&'()*+,-.-/012.345637489:;<=>=?@A0�	


 !"#$$$%&'()*+,-./012345-6789:;<=>?@=ABCDEFGHHIIJKLKMNOPQRHSTUVWMXYZ[\]^__`0�	









































 !""#$%&'()*+,-./01234567889:;<=>?@AB6CDEFGHAHIJKKLKMMNOOPQRSTTTUUVTUUVWXXYZ[0�	


   !"#$%&'(')*+,-./012344456789:;<=>?>@ABCDEFGHIJKLMNOOPQRRSTUVWWXXYZ[\]^^^____`abcdeefghijklm0�		


     !""#$%&'(')*+,-.///0123456789:;<=>?@ABCDEFDGHHHHIJKLMNOLPQRSTTUVWTXYZ[\]^_`abbcdeffghijklmnopqrst0�		


 !"""#$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJDKLMNOPQRSTUVWXYZ[\]]^_`abbcdefghijklmnopq0�																																															
























 !"#$%&''()*''+++,-./,0123345-6789:;:<=>?<@ABCDEDFGHIJKLLMNOPNNQRSTUVWXXYZ[\0�	

 !"#$%%%&'((&&)*+,,,--././..0122222334566666667778889:9;;;<==>>?0�																																						




 !!!"##$%&&'((()**+$+++,-..///000012202233333333345556789:;<=>?@AB0�	



 !"#$""%&&'(((())*+,-.../011111112324567897::;<=>?@ABCDEFDGHIJKLMNOPQRSTL0�	

 !"#$%&'()*+,-.,/01/23414567879:;:<=>?@ABCDEFGHIJJJKLMNOPQRSTUVWXY0�		


 !"#$%&''()*+,- ./0(102/3456789:;<=;>?@AABCD9E?FGHIJKLMNO0�	







 !"#$%&'()*+,-./0123456789:;<<=>?@AABCDEFGHIJKLMNJOPQRGSTQUVWRXYZ[[\]^_S_`^a]bcdefgghijkilm0�								




 !""#$%&'()*+,-./01233456789:;<==>?@@ABCD%E2FGHIJKLMNOPQRSTUVWXYZ[\]^_`aab0�		

 !"##$%&&' ())$*)#+*,-./0/1234567118829:;<9=>?@ABCDEFGHIJKL0�	


 !"#$%&'()*+,----./0111223344444455555677888888889999::::;;0�	




 !"#$%&'%()*+*,,-./.0123456789:;<=>=?@ABCDEEFGHHIJKLMNNNONOPQORSTUVWXYYZ0�0�	

0�	


                                                                                              0�						






0�	



	





 !"##
$%#&'()
*+,-./0122334567889:::;<=======>8??????????????????????????????????????????????????????????????????????????????????????????????�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��	

 !"#$%&'()*+,-./0123456789:;<=>?@������		















����										
������				

     !""��	







������������																


��																		



������										


������	

��	





����������������																																										��������������������	



            ����������������������																						
������	

 !"#$%&'()*++,-./0123456789:;��	

    !""#$$$$$$%&'())))))))))*+��	

 !"#$%&'((()*+,----.///0��	

 !"#$$%&'()***+,-./01233345678��	

 !"#$%&'()*+,-.//��	

 !""#$$%&''()*+,,,,-)./0��	

 !"!#$%&&&&&'((((((((()��	

 !"#$%&&&&'()***+,��	



 !"#$��	

 !"#$��	




��	

��	







��	




























��	

 !"#$%&'()*+,-./01233��		

 !!"#$%&'()*+++,-.//��	

 !!"#$%&'()*+,-.��	

 !"#$%&'(()**+,-./01234��	



 !!!!!!!!!!"#$��	







 ��				



��	

          !"#$$%&��	

 !"#$%&'()**+,-./0123456788889��	




    !"""""""#$$$$%&&&'��	


 !"#$%&'()*+,-./0123455��	

 !"##$%&'()*+,-./01234456789:;<��	

 !"#$$%&'((��	

  !"#$%&'()*+++,--./012��	

 !"##$%&&&'())))))*+,-./��	

 !!!"####$%&'��	




 !!"#$%&��	

 !"#$%&'())*��	
	

  !"#$%%%%%&"'��	

  !"#$$$%��	

��															







��	

  !"#��	








 !��	

 ! "#$%&&&'(()*+++,-...��	

   !"#$$$%&&&&&&&��		

 !"##$%%��	



��	



��			

��														

��	

 !"#$%%&''()*+,-...��	

 !"#$%&'''())��	

 !!"#$$%&&&&&&'()**+,��	

 ��		







 !!!!!"""��				

��	


��	


��	

��	

 !"#$%&&&&'(()**��	

 !"#$%%%&'(((()**+,-./01222345��	




 !""#��	




    !""""#$$%&&&'()*+,-.��	

 !"""""""#$%%%%&��		

 !"#$$$$%&'��						


��					




 ��		


��	







��	



 !"��	



 !!"#####$%&&''())��	


 ��	



 !!!!!"#####$%&'()*++++,-��		












��	

 !""#$%&'((((((()*+,---��	

   !"#$%&'''��	

  !"######$%&''''()**��	

 !"#$$%&&&'(()**+,-./��	


 !"#$$$%&&&&&'((((()*++,��		


 !"##$%%&'(()*+,-.��	




 !"#$%&'()))*++,-...��			

  !"#$%%&'(((((��	

��	


��	

��	

















��	

 !"#$$$$%&''()))))*+,��	


 !"#$$%&&'(()**+,-.��	

    !"""#$$$%&'()*+��	

 !"#$%&''()*+,-./012344445678��	


   !""#$$$$$$%&''())��	

  !""""#$%%&'((((��	

 !"#$%&''()**+,-./0123��	

 !"#$%%%%&'(��		

     !""#$%��	

��	

 !"###��	




��	

��	

 !"#$$%&&&&&&&&��	

 !"#$$$$$$$$%&&'())��	

   !""""#$%%&'''''��	

 !"#$$%&%'''''()*+��	


   !"#$%%&'''()��				

��	






��	


 !"#$$%&''''())*++��	


 !""#$%&'()*+,-,,,,)./0��	




 !"#$%&'(()*+,-.///////��	



 !"#$%%%%%%%%&'(��	

 !""#$%&��	

 !"########$%&'((((((((��			










��	




 !"""��	

��		

��	



 !!!"##!!��	






��						




��	

��					











��							



��	












��	




��	

 !!!"###$%%��	

   !"#$%&'())*++++,--��	





 !"#$%&''()))*+,��	


 !"#$%&'(()&*++++,-./0123��			

 !!" #$%&'()**+,-./01��	

 !"#$$$%&'()*+��	

	  !"###$%&&&&'(()*+++,---��	

 !"##$%&&'(()**+,,,,,,-��	




  !"#$$$%&'()*+++��	

 !"##$%&$$'&()))))��	

��	



 !"##$%&'((��	

      !!!!"####$%%%%%%��			










 !��	



��	













��											

��	
��	

��			

 !"#$%&&��													

 !!!"##��	

��													





��			

��	




��	





��			

  !"""#$%%%&&��	

��	

 !"#$%&&'()*+,---��	

 !!"##$%&''''()��								

��		




   !""#$%%%%��	



��				

 !"""""#$$$��	













��	

��	

��	

 !"#$%&'())*+��	

 ��	

 !"#$%&''())*+,,-./0��	




 !" ####$%&&'(((()**+,,-��	



 !""#$$!%&''()))*+,-��	
	
��		


��	

 !"#$%&&&'())*+,-��	

 !"#$%%%��								




��		

 !"��	

��			

  !"""#$$%&'''()*+��	

��	


 !"####$%%%%&'��				

��	





��	



 !"#####��	














��	



 !"#$$$$$$$%&&'()**��	

 !"#$��	


��	




   !"#####$%%%%%%%%%%%&��	

��	



 !"#$%%&'$(((()*+,-./0��	


 !!"#$%&'())*+��	

��				





 !"��			
						

��						


��	

 !��	

��	











������������	

 !!"#$��	


 !"#$%&'()*++,--./01234556789��		








     !"#$%&'(((((��	

    !""""#$��					


 ��	

 !!!!!!!"#$$$��	

 !""""""#$%&'()*++,-./0��	

��	






   !"#$%&'()*+),,-.."/0123��	

 !"#$%&'()*+,-.//��	


 !"#####$%��			

  !""""#$%&&'(��	

��	

��		

 !"#$%&'()**)+��			

 !��	

 !"#$%&'()*++,-.///012��	



    !"""#$%&&'(()*+*,----��	


 !"#$%&'()*+,-..��					

 !!!!!!!"#$$%&''��	


 !"#$%&'((��	




 !"#####$$%%%&''��	

	  ��	


��	

 ��	


��	


��	






��											

��	







��	














��	





��					






 !!!!!��	

 !!"#$$$%&&&&'(��	




    !""#$$%&&%'''())*+��				

 ��	



  !""��	




��	




��	








 !!!"#$��		




 !!!��	



 !""#$#%��					


��	






















����	




   !"""""""     ��������������		

 ��	

 !"#$$%&'()*+,-./0123456789:��	

 !"#$$%&''()**+,,-........��	








��	







����	

 !"#$��	

 !"#$%&&&'()**+,,-./0122222222��					











��	




   !"#$%%&'%(&))��	




  !" ��	





 ��	



������	

��	



    !!"#$$$$%&''''())*+++,-.��	





 !"#$%&'()**+,,,-./000122��	

 !"###$%%%%%%$&'((((())*+,,-./01��	


 !!!!!!!"#$��					

 !"#$%&'()(*+,-.//01��	





 !!!!"###$%%%%&'(��	

��	

 !"#$%&$'()*+,-...//0��	

��	










����������������������	

  !  "#$%&'''''())*+��							



 !"###$%&'()**+,��		

 !!"#$%&''() ***+,-./00��	

        !����	

��	




 !!"#$%&'(((()*+,-��	

 !"#$$$$$%&'()*++++++++��	



  !"��	


 !""""#$��			



 !!!!"#��	


��	





��					

����	

��	


 !""#$$$$$$$$$$$$$$$$$$$$$$$$��		







����	






��	

������	

��	


 !"""""""#$%%%%&'()'*+,,,��	





��	











��	



����������	

��	



��������	

��	

 !!!!!!!!!!"#��	









��	



 !"��	



����	

��������������������������������			��				��													











��				







����	

 !"##############################��������						




��	��	



















������	


�����	

 !"#$%&'()***+,-.///0;D(]��`X]���8^����^���h_����_����`���zRx�$�\��0FJw�?:*3$"D�\�� \�]��op�]�����^��v�_�����_��$HWGNU��� �"�
�
x� �v��
�p@�	�
�
D� �v��
�p�	y�����
T
�"�"���o`��
���"0p��	���o���o����o�on���o��"��GA$3a1�a
GA$3p1113�T
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�?GA+GLIBCXX_ASSERTIONSgb18030.so-3.4.4-3.el8.x86_64.debugP7���7zXZ�ִF!t/��_2]?�E�h=��ڊ�2N����ў1��k]ޕ.sT�/�UU�mS����,0t	�~�7^,I�~�Ѡ$-��ә�IY�?���^��X��?����ӺV���p���Q�f�<!?�{&�|@�Q���)`+��K�}�f�b:�-\\���P��⑆���9W<gTMq��T���0�[C&��;� _��_�^t �v��UƁ�����Pu��n	�5�Pc����w�I\7f�0TԈ �s8(
�S�Y��P#35`�Rq��ީ^c?����k;�neu3�)s>�J\�19�'��r�O�{�E�V��0��,(LGea�t��=l���ڣڨ�L��1�op�
፺�\�X��������'�Hvг;<�8�c�Aʑ����z�(��#,)vB��
�o�d�[�_[	���ُ�R�|��0p��� y�m�F�
s����m��?\��k�"B�>��ށ�λ��3���H(�At_]��e��uY0+b�t�vʓ)1����.~�E�����o^�=�Sɐ�4x�����¶��	b�!���+�֬��,��\
0Q(���l��A�����-&øKÇ��cq[�c4�ѧ�]�U����HI����:.��t�����,�31[���-�����0s��2�u,0�ִVB�r7*ˊs�p���A;V6����Y��&W&�n�w�^g��nLK�s���v���i�w����+�i�1lG�/�s~Ӯ���	lv:z8��h�U� e���\Z���}=��մ��HD��T�\���a�7MN�IԓQҭ����E����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T���^Bpp0h��c��0n�� wD}T
T

��
�
� �����D��������� ��"���"�� �" �` ���"�� ���"��H��"���b�H0�(X�t̵"PK*J[�u��h�h�lib64/ruby/enc/trans/gbk.sonuȯ��ELF>�@h�@8	@���� ��"�"�� ����"��"  888$$������  S�td������  P�td������$$Q�tdR�td��"�"��GNU*>T��W�X�SD��m��?�P 	BE���|͸U��qX ^ , F"��"��"Up$��"__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_gbkrb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��"`�"  �" �"@�"�H�"�X�"��h�"���"���"���"���"���"��"��"��"��"��"��H��H���"H��t��H����5B�"�%C�"��h�������h���������%�"D���%�"DH�=I�"H�B�"H9�tH���"H��t	�����H�=�"H�5�"H)�H��H��H��?H�H�tH���"H��t��fD�����=��"u+UH�=��"H��tH�=��"�Y����d������"]������w������H��H�=a�"����H�=��"H�������H��H���UTF-8GBK丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪乫乬乭乮乯乲乴乵乶乷乸乹乺乻乼乽乿亀亁亂亃亄亅亇亊亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂伃伄伅伆伇伈伋伌伒伓伔伕伖伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾伿佀佁佂佄佅佇佈佉佊佋佌佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢侤侫侭侰侱侲侳侴侶侷侸侹侺侻侼侽侾俀俁係俆俇俈俉俋俌俍俒俓俔俕俖俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倆倇倈倉倊個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸倹倻倽倿偀偁偂偄偅偆偉偊偋偍偐偑偒偓偔偖偗偘偙偛偝偞偟偠偡偢偣偤偦偧偨偩偪偫偭偮偯偰偱偲偳側偵偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠傡傢傤傦傪傫傭傮傯傰傱傳傴債傶傷傸傹傼傽傾傿僀僁僂僃僄僅僆僇僈僉僊僋僌働僎僐僑僒僓僔僕僗僘僙僛僜僝僞僟僠僡僢僣僤僥僨僩僪僫僯僰僱僲僴僶僷僸價僺僼僽僾僿儀儁儂儃億儅儈儉儊儌儍儎儏儐儑儓儔儕儖儗儘儙儚儛儜儝儞償儠儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾兂兇兊兌兎兏児兒兓兗兘兙兛兝兞兟兠兡兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦冧冨冩冪冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒凓凔凕凖凗凘凙凚凜凞凟凢凣凥処凧凨凩凪凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄剅剆則剈剉剋剎剏剒剓剕剗剘剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳剴創剶剷剸剹剺剻剼剾劀劃劄劅劆劇劉劊劋劌劍劎劏劑劒劔劕劖劗劘劙劚劜劤劥劦劧劮劯劰労劵劶劷劸効劺劻劼劽勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務勚勛勜勝勞勠勡勢勣勥勦勧勨勩勪勫勬勭勮勯勱勲勳勴勵勶勷勸勻勼勽匁匂匃匄匇匉匊匋匌匎	匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯匰匱匲匳匴匵匶匷匸匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏厐厑厒厓厔厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯厰厱厲厳厴厵厷厸厹厺厼厽厾叀參叄叅叆叇収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝呞呟呠呡呣呥呧呩呪呫呬呭呮呯呰呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠員哢哣哤哫哬哯哰哱哴哵哶哷哸哹哻哾唀唂唃唄唅唈唊唋唌唍唎唒唓唕唖唗唘唙唚唜唝唞唟唡唥唦唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋啌啍啎問啑啒啓啔啗啘啙啚啛啝啞啟啠啢啣啨啩啫啯啰啱啲啳啴啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠喡喢喣喤喥喦喨喩喪喫喬喭單喯喰喲喴営喸喺喼喿嗀嗁嗂嗃嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗嗘嗙嗚嗛嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸嗹嗺嗻嗼嗿嘂嘃嘄嘅嘆嘇嘊嘋嘍嘐嘑嘒嘓嘔嘕嘖嘗嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀噁噂噃噄噅噆噇噈噉噊噋噏噐噑噒噓噕噖噚噛噝噞噟噠噡噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽噾噿嚀嚁嚂嚃嚄嚇嚈嚉嚊嚋嚌嚍嚐嚑嚒嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚰嚱嚲嚳嚴嚵嚶嚸嚹嚺嚻嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囋囌囍囎囏囐囑囒囓囕囖囘囙囜団囥囦囧囨囩囪囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國圌圍圎圏圐圑園圓圔圕圖圗團圙圚圛圝圞圠圡圢圤圥圦圧圫圱圲圴圵圶圷圸圼圽圿坁坃坄坅坆坈坉坋坒坓坔坕坖坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀垁垇垈垉垊垍垎垏垐垑垔垕垖垗垘垙垚垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹垺垻垼垽垾垿埀埁埄埅埆埇埈埉埊埌埍埐埑埓埖埗埛埜埞埡埢埣埥埦埧埨埩埪埫埬埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥堦堧堨堩堫堬堭堮堯報堲堳場堶堷堸堹堺堻堼堽堾堿塀塁塂塃塅塆塇塈塉塊塋塎塏塐塒塓塕塖塗塙塚塛塜塝塟塠塡塢塣塤塦塧塨塩塪塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塿墂墄墆墇墈墊墋墌墍墎墏墐墑墔墕墖増墘墛墜墝墠墡墢墣墤墥墦墧墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墽墾墿壀壂壃壄壆壇壈壉壊壋壌壍壎壏壐壒壓壔壖壗壘壙壚壛壜壝壞壟壠壡壢壣壥壦壧壨壩壪壭壯壱売壴壵壷壸壺壻壼壽壾壿夀夁夃夅夆夈変夊夋夌夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻 夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛奜奝奞奟奡奣奤奦奧奨奩奪奫奬奭奮奯奰奱奲奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦妧妬妭妰妱妳妴妵妶妷妸妺妼妽妿姀姁姂姃姄姅姇姈姉姌姍姎姏姕姖姙姛姞姟姠姡姢姤姦姧姩姪姫姭姮姯姰姱姲姳姴姵姶姷姸姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪娫娬娭娮娯娰娳娵娷娸娹娺娻娽娾娿婁婂婃婄婅婇婈婋婌婍婎婏婐婑婒婓婔婖婗婘婙婛婜婝婞婟婠$婡婣婤婥婦婨婩婫婬婭婮婯婰婱婲婳婸婹婻婼婽婾媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媓媔媕媖媗媘媙媜媝媞媟媠媡媢媣媤媥媦媧媨媩媫媬媭媮媯媰媱媴媶媷媹媺媻媼媽媿嫀嫃嫄嫅嫆嫇嫈嫊嫋嫍嫎嫏嫐嫑嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬嫭嫮嫯嫰嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬸嬹嬺嬻嬼嬽嬾嬿孁孂孃孄孅孆孇(孈孉孊孋孌孍孎孏孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏寑寔寕寖寗寘寙寚寛寜寠寢寣實寧審寪寫寬寭寯寱寲寳寴寵寶寷寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧屨屩屪屫屬屭屰屲屳屴屵屶屷屸屻屼屽屾岀岃岄岅岆岇岉岊岋岎岏岒岓岕岝岞岟岠岡岤岥岦岧岨,!岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅峆峇峈峉峊峌峍峎峏峐峑峓峔峕峖峗峘峚峛峜峝峞峟峠峢峣峧峩峫峬峮峯峱峲峳峴峵島峷峸峹峺峼峽峾峿崀崁崄崅崈崉崊崋崌崍崏崐崑崒崓崕崗崘崙崚崜崝崟崠崡崢崣崥崨崪崫崬崯崰崱崲崳崵崶崷崸崹崺崻崼崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵙嵚嵜嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵪嵭嵮嵰嵱嵲嵳嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶚嶛嶜嶞嶟嶠0$嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶸嶹嶺嶻嶼嶽嶾嶿巀巁巂巃巄巆巇巈巉巊巋巌巎巏巐巑巒巓巔巕巖巗巘巙巚巜巟巠巣巤巪巬巭巰巵巶巸巹巺巻巼巿帀帄帇帉帊帋帍帎帒帓帗帞帟帠帡帢帣帤帥帨帩帪師帬帯帰帲帳帴帵帶帹帺帾帿幀幁幃幆幇幈幉幊幋幍幎幏幐幑幒幓幖幗幘幙幚幜幝幟幠幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨庩庪庫庬庮庯庰庱庲庴庺庻庼庽庿廀廁廂廃廄廅4'廆廇廈廋廌廍廎廏廐廔廕廗廘廙廚廜廝廞廟廠廡廢廣廤廥廦廧廩廫廬廭廮廯廰廱廲廳廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤弨弫弬弮弰弲弳弴張弶強弸弻弽弾弿彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢徣徤徥徦徧復徫徬徯徰徱徲徳徴徶徸徹徺徻徾徿忀忁忂忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇8*怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰怱怲怳怴怶怷怸怹怺怽怾恀恄恅恆恇恈恉恊恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽悾悿惀惁惂惃惄惇惈惉惌惍惎惏惐惒惓惔惖惗惙惛惞惡惢惣惤惥惪惱惲惵惷惸惻惼惽惾惿愂愃愄愅愇愊愋愌愐愑愒愓愔愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾慀慁慂慃慄慅慆<-慇慉態慍慏慐慒慓慔慖慗慘慙慚慛慜慞慟慠慡慣慤慥慦慩慪慫慬慭慮慯慱慲慳慴慶慸慹慺慻慼慽慾慿憀憁憂憃憄憅憆憇憈憉憊憌憍憏憐憑憒憓憕憖憗憘憙憚憛憜憞憟憠憡憢憣憤憥憦憪憫憭憮憯憰憱憲憳憴憵憶憸憹憺憻憼憽憿懀懁懃懄懅懆懇應懌懍懎懏懐懓懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懧懨懩懪懫懬懭懮懯懰懱懲懳懴懶懷懸懹懺懻懼懽懾戀戁戂戃戄戅戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸戹戺戻戼扂扄扅扆扊@0扏扐払扖扗扙扚扜扝扞扟扠扡扢扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋抌抍抎抏抐抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳挴挵挶挷挸挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖捗捘捙捚捛捜捝捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙掚掛掜掝掞掟採掤掦掫掯掱掲掵掶掹掻掽掿揀D3揁揂揃揅揇揈揊揋揌揑揓揔揕揗揘揙揚換揜揝揟揢揤揥揦揧揨揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆搇搈搉搊損搎搑搒搕搖搗搘搙搚搝搟搢搣搤搥搧搨搩搫搮搯搰搱搲搳搵搶搷搸搹搻搼搾摀摂摃摉摋摌摍摎摏摐摑摓摕摖摗摙摚摛摜摝摟摠摡摢摣摤摥摦摨摪摫摬摮摯摰摱摲摳摴摵摶摷摻摼摽摾摿撀撁撃撆撈撉撊撋撌撍撎撏撐撓撔撗撘撚撛撜撝撟撠撡撢撣撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆擇擈擉擊擋擌擏擑擓擔擕擖擙據H6擛擜擝擟擠擡擣擥擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攁攂攃攄攅攆攇攈攊攋攌攍攎攏攐攑攓攔攕攖攗攙攚攛攜攝攞攟攠攡攢攣攤攦攧攨攩攪攬攭攰攱攲攳攷攺攼攽敀敁敂敃敄敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數敹敺敻敼敽敾敿斀斁斂斃斄斅斆斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱斲斳斴斵斶斷斸斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘旙旚旛旜旝旞旟旡旣旤旪旫L9旲旳旴旵旸旹旻旼旽旾旿昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷昸昹昺昻昽昿晀時晄晅晆晇晈晉晊晍晎晐晑晘晙晛晜晝晞晠晢晣晥晧晩晪晫晬晭晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘暙暚暛暜暞暟暠暡暢暣暤暥暦暩暪暫暬暭暯暰暱暲暳暵暶暷暸暺暻暼暽暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曚曞曟曠曡曢曣曤曥曧曨曪曫曬曭曮曯曱曵曶書曺曻曽朁朂會P<朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠朡朢朣朤朥朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗杘杙杚杛杝杢杣杤杦杧杫杬杮東杴杶杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹枺枻枼枽枾枿柀柂柅柆柇柈柉柊柋柌柍柎柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵柶柷柸柹柺査柼柾栁栂栃栄栆栍栐栒栔栕栘栙栚栛栜栞栟栠栢栣栤栥栦栧栨栫栬栭栮栯栰栱栴栵栶栺栻栿桇桋桍桏桒桖桗桘桙桚桛T?桜桝桞桟桪桬桭桮桯桰桱桲桳桵桸桹桺桻桼桽桾桿梀梂梄梇梈梉梊梋梌梍梎梐梑梒梔梕梖梘梙梚梛梜條梞梟梠梡梣梤梥梩梪梫梬梮梱梲梴梶梷梸梹梺梻梼梽梾梿棁棃棄棅棆棇棈棊棌棎棏棐棑棓棔棖棗棙棛棜棝棞棟棡棢棤棥棦棧棨棩棪棫棬棭棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆椇椈椉椊椌椏椑椓椔椕椖椗椘椙椚椛検椝椞椡椢椣椥椦椧椨椩椪椫椬椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楕楖楘楙楛楜楟XB楡楢楤楥楧楨楩楪楬業楯楰楲楳楴極楶楺楻楽楾楿榁榃榅榊榋榌榎榏榐榑榒榓榖榗榙榚榝榞榟榠榡榢榣榤榥榦榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽榾榿槀槂槃槄槅槆槇槈槉構槍槏槑槒槓槕槖槗様槙槚槜槝槞槡槢槣槤槥槦槧槨槩槪槫槬槮槯槰槱槳槴槵槶槷槸槹槺槻槼槾樀樁樂樃樄樅樆樇樈樉樋樌樍樎樏樐樑樒樓樔樕樖標樚樛樜樝樞樠樢樣樤樥樦樧権樫樬樭樮樰樲樳樴樶樷樸樹樺樻樼樿橀橁橂橃橅橆橈橉橊橋橌橍橎橏橑橒橓橔橕橖橗橚\E橜橝橞機橠橢橣橤橦橧橨橩橪橫橬橭橮橯橰橲橳橴橵橶橷橸橺橻橽橾橿檁檂檃檅檆檇檈檉檊檋檌檍檏檒檓檔檕檖檘檙檚檛檜檝檞檟檡檢檣檤檥檦檧檨檪檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欥欦欨欩欪欫欬欭欮`H欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍歎歏歐歑歒歓歔歕歖歗歘歚歛歜歝歞歟歠歡歨歩歫歬歭歮歯歰歱歲歳歴歵歶歷歸歺歽歾歿殀殅殈殌殎殏殐殑殔殕殗殘殙殜殝殞殟殠殢殣殤殥殦殧殨殩殫殬殭殮殯殰殱殲殶殸殹殺殻殼殽殾毀毃毄毆毇毈毉毊毌毎毐毑毘毚毜毝毞毟毠毢毣毤毥毦毧毨毩毬毭毮毰毱毲毴毶毷毸毺毻毼毾毿氀氁氂氃氄氈氉氊氋氌氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋汌汍汎汏汑汒汓汖汘dK汙汚汢汣汥汦汧汫汬汭汮汯汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟洠洡洢洣洤洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽浾浿涀涁涃涄涆涇涊涋涍涏涐涒涖涗涘涙涚涜涢涥涬涭涰涱涳涴涶涷涹涺涻涼涽涾淁淂淃淈淉淊hN淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽淾淿渀渁渂渃渄渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵渶渷渹渻渼渽渾渿湀湁湂湅湆湇湈湉湊湋湌湏湐湑湒湕湗湙湚湜湝湞湠湡湢湣湤湥湦湧湨湩湪湬湭湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽満溁溂溄溇溈溊溋溌溍溎溑溒溓溔溕準溗溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪滫滬滭滮滯lQ滰滱滲滳滵滶滷滸滺滻滼滽滾滿漀漁漃漄漅漇漈漊漋漌漍漎漐漑漒漖漗漘漙漚漛漜漝漞漟漡漢漣漥漦漧漨漬漮漰漲漴漵漷漸漹漺漻漼漽漿潀潁潂潃潄潅潈潉潊潌潎潏潐潑潒潓潔潕潖潗潙潚潛潝潟潠潡潣潤潥潧潨潩潪潫潬潯潰潱潳潵潶潷潹潻潽潾潿澀澁澂澃澅澆澇澊澋澏澐澑澒澓澔澕澖澗澘澙澚澛澝澞澟澠澢澣澤澥澦澨澩澪澫澬澭澮澯澰澱澲澴澵澷澸澺澻澼澽澾澿濁濃濄濅濆濇濈濊濋濌濍濎濏濐濓濔濕濖濗濘濙濚濛濜濝濟濢濣濤濥pT濦濧濨濩濪濫濬濭濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀒瀓瀔瀕瀖瀗瀘瀙瀜瀝瀞瀟瀠瀡瀢瀤瀥瀦瀧瀨瀩瀪瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀶瀷瀸瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灍灎灐灑灒灓灔灕灖灗灘灙灚灛灜灝灟灠灡灢灣灤灥灦灧灨灩灪灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞炟炠炡炢炣炤炥炦炧炨炩炪炰炲炴炵炶為炾炿烄烅烆烇烉烋烌烍烎烏烐烑烒烓烔烕烖烗烚tW烜烝烞烠烡烢烣烥烪烮烰烱烲烳烴烵烶烸烺烻烼烾烿焀焁焂焃焄焅焆焇焈焋焌焍焎焏焑焒焔焗焛焜焝焞焟焠無焢焣焤焥焧焨焩焪焫焬焭焮焲焳焴焵焷焸焹焺焻焼焽焾焿煀煁煂煃煄煆煇煈煉煋煍煏煐煑煒煓煔煕煖煗煘煙煚煛煝煟煠煡煢煣煥煩煪煫煬煭煯煰煱煴煵煶煷煹煻煼煾煿熀熁熂熃熅熆熇熈熉熋熌熍熎熐熑熒熓熕熖熗熚熛熜熝熞熡熢熣熤熥熦熧熩熪熫熭熮熯熰熱熲熴熶熷熸熺熻熼熽熾熿燀燁燂燄燅燆燇燈燉燊燋燌燍燏燐燑燒燓xZ燖燗燘燙燚燛燜燝燞營燡燢燣燤燦燨燩燪燫燬燭燯燰燱燲燳燴燵燶燷燸燺燻燼燽燾燿爀爁爂爃爄爅爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚爛爜爞爟爠爡爢爣爤爥爦爧爩爫爭爮爯爲爳爴爺爼爾牀牁牂牃牄牅牆牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅犆犇犈犉犌犎犐犑犓犔犕犖犗犘犙犚犛犜犝犞犠犡犢犣犤犥犦犧犨犩犪犫犮犱犲犳犵犺犻犼犽犾犿狀狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛|]	 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓��`	ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ�b	!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�`c	ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんC�d	ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶDf	ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼︷︸︱︳︴��g	АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя��hˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▓▔▕▼▽◢◣◤◥☉⊕〒〝〞	āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑńňɡㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩG�i〡〢〣〤〥〦〧〨〩㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦	℡㈱‐ー゛゜ヽヾ〆ゝゞ﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡﹢﹣﹤﹥﹦﹨﹩﹪﹫〇─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋Pl狜狝狟狢狣狤狥狦狧狪狫狵狶狹狽狾狿猀猂猄猅猆猇猈猉猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀獁獂獃獄獅獆獇獈獉獊獋獌獎獏獑獓獔獕獖獘獙獚獛獜獝獞獟獡獢獣獤獥獦獧獨獩獪獫獮獰獱	��n獲獳獴獵獶獷獸獹獺獻獼獽獿玀玁玂玃玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣玤玥玦玧玨玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃珄珅珆珇珋珌珎珒珓珔珕珖珗珘珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳珴珵珶珷	�0p珸珹珺珻珼珽現珿琀琁琂琄琇琈琋琌琍琎琑琒琓琔琕琖琗琘琙琜琝琞琟琠琡琣琤琧琩琫琭琯琱琲琷琸琹琺琻琽琾琿瑀瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍瑎瑏瑐瑑瑒瑓瑔瑖瑘瑝瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑮瑯瑱瑲瑳瑴瑵瑸瑹瑺	��q瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑璒璓璔璕璖璗璘璙璚璛璝璟璠璡璢璣璤璥璦璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓓瓔瓕瓖瓗瓘瓙瓚瓛瓝瓟瓡瓥瓧瓨瓩瓪瓫瓬瓭瓰瓱瓲	�Ps瓳瓵瓸瓹瓺瓻瓼瓽瓾甀甁甂甃甅甆甇甈甉甊甋甌甎甐甒甔甕甖甗甛甝甞甠甡產産甤甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘畝畞畟畠畡畢畣畤畧畨畩畫畬畭畮畯異畱畳畵當畷畺畻畼畽畾疀疁疂疄疅疇	��t疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦疧疨疩疪疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄	�pv癅癆癇癈癉癊癋癎癏癐癑癒癓癕癗癘癙癚癛癝癟癠癡癢癤癥癦癧癨癩癪癬癭癮癰癱癲癳癴癵癶癷癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛皜皝皞皟皠皡皢皣皥皦皧皨皩皪皫皬皭皯皰皳皵皶皷皸皹皺皻皼皽皾盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥x盄盇盉盋盌盓盕盙盚盜盝盞盠盡盢監盤盦盧盨盩盪盫盬盭盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎眏眐眑眒眓眔眕眖眗眘眛眜眝眞眡眣眤眥眧眪眫眬眮眰眱眲眳眴眹眻眽眾眿睂睄睅睆睈睉睊睋睌睍睎睏睒睓睔睕睖睗睘睙睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳{睝睞睟睠睤睧睩睪睭睮睯睰睱睲睳睴睵睶睷睸睺睻睼瞁瞂瞃瞆瞇瞈瞉瞊瞋瞏瞐瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶瞷瞸瞹瞺瞼瞾矀矁矂矃矄矅矆矇矈矉矊矋矌矎矏矐矑矒矓矔矕矖矘矙矚矝矞矟矠矡矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖~矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃砄砅砆砇砈砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚硛硜硞硟硠硡硢硣硤硥硦硧硨硩硯硰硱硲硳硴硵硶硸硹硺硻硽硾硿碀碁碂碃场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨碩碪碫碬碭碮碯碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚磛磜磝磞磟磠磡磢磣磤磥磦磧磩磪磫磭磮磯磰磱磳磵磶磸磹磻磼磽磾磿礀礂礃礄礆礇礈礉礊礋礌础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�礍礎礏礐礑礒礔礕礖礗礘礙礚礛礜礝礟礠礡礢礣礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礵礶礷礸礹礽礿祂祃祄祅祇祊祋祌祍祎祏祐祑祒祔祕祘祙祡祣祤祦祩祪祫祬祮祰祱祲祳祴祵祶祹祻祼祽祾祿禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�禓禔禕禖禗禘禙禛禜禝禞禟禠禡禢禣禤禥禦禨禩禪禫禬禭禮禯禰禱禲禴禵禶禷禸禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙秚秛秜秝秞秠秡秢秥秨秪秬秮秱秲秳秴秵秶秷秹秺秼秾秿稁稄稅稇稈稉稊稌稏稐稑稒稓稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�稝稟稡稢稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稴稵稶稸稺稾穀穁穂穃穄穅穇穈穉穊穋穌積穎穏穐穒穓穔穕穖穘穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨穩穪穫穬穭穮穯穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�窣窤窧窩窪窫窮窯窰窱窲窴窵窶窷窸窹窺窻窼窽窾竀竁竂竃竄竅竆竇竈竉竊竌竍竎竏竐竑竒竓竔竕竗竘竚竛竜竝竡竢竤竧竨竩竪竫竬竮竰竱竲竳竴竵競竷竸竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹 �笯笰笲笴笵笶笷笹笻笽笿筀筁筂筃筄筆筈筊筍筎筓筕筗筙筜筞筟筡筣筤筥筦筧筨筩筪筫筬筭筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆箇箈箉箊箋箌箎箏箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹箺箻箼箽箾箿節篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈$�篅篈築篊篋篍篎篏篐篒篔篕篖篗篘篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲篳篴篵篶篸篹篺篻篽篿簀簁簂簃簄簅簆簈簉簊簍簎簐簑簒簓簔簕簗簘簙簚簛簜簝簞簠簡簢簣簤簥簨簩簫簬簭簮簯簰簱簲簳簴簵簶簷簹簺簻簼簽簾籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖(�籃籄籅籆籇籈籉籊籋籌籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲籵籶籷籸籹籺籾籿粀粁粂粃粄粅粆粇粈粊粋粌粍粎粏粐粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴粵粶粷粸粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕,�粿糀糂糃糄糆糉糋糎糏糐糑糒糓糔糘糚糛糝糞糡糢糣糤糥糦糧糩糪糫糬糭糮糰糱糲糳糴糵糶糷糹糺糼糽糾糿紀紁紂紃約紅紆紇紈紉紋紌納紎紏紐紑紒紓純紕紖紗紘紙級紛紜紝紞紟紡紣紤紥紦紨紩紪紬紭紮細紱紲紳紴紵紶肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件0�紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絯絰統絲絳絴絵絶絸絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸4�継続綛綜綝綞綟綠綡綢綣綤綥綧綨綩綪綫綬維綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻8�緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹縺縼總績縿繀繂繃繄繅繆繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀<�繞繟繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纜纝纞纮纴纻纼绖绤绬绹缊缐缞缷缹缻缼缽缾缿罀罁罃罆罇罈罉罊罋罌罍罎罏罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐@�罖罙罛罜罝罞罠罣罤罥罦罧罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂羃羄羅羆羇羈羉羋羍羏羐羑羒羓羕羖羗羘羙羛羜羠羢羣羥羦羨義羪羫羬羭羮羱羳羴羵羶羷羺羻羾翀翂翃翄翆翇翈翉翋翍翏翐翑習翓翖翗翙翚翛翜翝翞翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿D�翤翧翨翪翫翬翭翯翲翴翵翶翷翸翹翺翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫耬耭耮耯耰耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗聙聛聜聝聞聟聠聡聢聣聤聥聦聧聨聫聬聭聮聯聰聲聳聴聵聶職聸聹聺聻聼聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫H�聾肁肂肅肈肊肍肎肏肐肑肒肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇胈胉胊胋胏胐胑胒胓胔胕胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸L�腀腁腂腃腄腅腇腉腍腎腏腒腖腗腘腛腜腝腞腟腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃膄膅膆膇膉膋膌膍膎膐膒膓膔膕膖膗膙膚膞膟膠膡膢膤膥膧膩膫膬膭膮膯膰膱膲膴膵膶膷膸膹膼膽膾膿臄臅臇臈臉臋臍臎臏臐臑臒臓摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁P�臔臕臖臗臘臙臚臛臜臝臞臟臠臡臢臤臥臦臨臩臫臮臯臰臱臲臵臶臷臸臹臺臽臿舃與興舉舊舋舎舏舑舓舕舖舗舘舙舚舝舠舤舥舦舧舩舮舲舺舼舽舿艀艁艂艃艅艆艈艊艌艍艎艐艑艒艓艔艕艖艗艙艛艜艝艞艠艡艢艣艤艥艦艧艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗T�艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸苺苼苽苾苿茀茊茋茍茐茒茓茖茘茙茝茞茟茠茡茢茣茤茥茦茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐X�茾茿荁荂荄荅荈荊荋荌荍荎荓荕荖荗荘荙荝荢荰荱荲荳荴荵荶荹荺荾荿莀莁莂莃莄莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡莢莣莤莥莦莧莬莭莮莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠\�菮華菳菴菵菶菷菺菻菼菾菿萀萂萅萇萈萉萊萐萒萓萔萕萖萗萙萚萛萞萟萠萡萢萣萩萪萫萬萭萮萯萰萲萳萴萵萶萷萹萺萻萾萿葀葁葂葃葄葅葇葈葉葊葋葌葍葎葏葐葒葓葔葕葖葘葝葞葟葠葢葤葥葦葧葨葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁`�葽葾葿蒀蒁蒃蒄蒅蒆蒊蒍蒏蒐蒑蒒蒓蒔蒕蒖蒘蒚蒛蒝蒞蒟蒠蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗蓘蓙蓚蓛蓜蓞蓡蓢蓤蓧蓨蓩蓪蓫蓭蓮蓯蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳d�蔃蔄蔅蔆蔇蔈蔉蔊蔋蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢蔣蔤蔥蔦蔧蔨蔩蔪蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔾蔿蕀蕁蕂蕄蕅蕆蕇蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕蕗蕘蕚蕛蕜蕝蕟蕠蕡蕢蕣蕥蕦蕧蕩蕪蕫蕬蕭蕮蕯蕰蕱蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱h�薂薃薆薈薉薊薋薌薍薎薐薑薒薓薔薕薖薗薘薙薚薝薞薟薠薡薢薣薥薦薧薩薫薬薭薱薲薳薴薵薶薸薺薻薼薽薾薿藀藂藃藄藅藆藇藈藊藋藌藍藎藑藒藔藖藗藘藙藚藛藝藞藟藠藡藢藣藥藦藧藨藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔l�藹藺藼藽藾蘀蘁蘂蘃蘄蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘒蘓蘔蘕蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘨蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘹蘺蘻蘽蘾蘿虀虁虂虃虄虅虆虇虈虉虊虋虌虒虓處虖虗虘虙虛虜虝號虠虡虣虤虥虦虧虨虩虪獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃p�虭虯虰虲虳虴虵虶虷虸蚃蚄蚅蚆蚇蚈蚉蚎蚏蚐蚑蚒蚔蚖蚗蚘蚙蚚蚛蚞蚟蚠蚡蚢蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻蚼蚽蚾蚿蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威t�蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀蝁蝂蝃蝄蝅蝆蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚蝛蝜蝝蝞蝟蝡蝢蝦蝧蝨蝩蝪蝫蝬蝭蝯蝱蝲蝳蝵蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎螏螐螑螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺x�螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁蟂蟃蟄蟅蟇蟈蟉蟌蟍蟎蟏蟐蟔蟕蟖蟗蟘蟙蟚蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋蠌蠍蠎蠏蠐蠑蠒蠔蠗蠘蠙蠚蠜蠝蠞蠟蠠蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓|�蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠳蠴蠵蠶蠷蠸蠺蠻蠽蠾蠿衁衂衃衆衇衈衉衊衋衎衏衐衑衒術衕衖衘衚衛衜衝衞衟衠衦衧衪衭衯衱衳衴衵衶衸衹衺衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄��袬袮袯袰袲袳袴袵袶袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚裛補裝裞裠裡裦裧裩裪裫裬裭裮裯裲裵裶裷裺裻製裿褀褁褃褄褅褆複褈褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褠褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶��褸褹褺褻褼褽褾褿襀襂襃襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襠襡襢襣襤襥襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襼襽襾覀覂覄覅覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐��覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴觵觶觷觸觹觺觻觼觽觾觿訁訂訃訄訅訆計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉��訞訟訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訿詀詁詂詃詄詅詆詇詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詺詻詼詽詾詿誀浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧��誁誂誃誄誅誆誇誈誋誌認誎誏誐誑誒誔誕誖誗誘誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀諁諂諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政��諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣謤謥謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿譀譁譂譃譄譅帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑��譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠譡譢譣譤譥譧譨譩譪譫譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座	���谸谹谺谻谼谽谾谿豀豂豃豄豅豈豊豋豍豎豏豐豑豒豓豔豖豗豘豙豛豜豝豞豟豠豣豤豥豦豧豨豩豬豭豮豯豰豱豲豴豵豶豷豻豼豽豾豿貀貁貃貄貆貇貈貋貍貎貏貐貑貒貓貕貖貗貙貚貛貜貝貞貟負財貢貣貤貥貦貧貨販貪貫責貭亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝��貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼��贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸赹赺赻赼赽赾赿趀趂趃趆趇趈趉趌趍趎趏趐趒趓趕趖趗趘趙趚趛趜趝趞趠趡趢趤趥趦趧趨趩趪趫趬趭趮趯趰趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺��跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾跿踀踁踂踃踄踆踇踈踋踍踎踐踑踒踓踕踖踗踘踙踚踛踜踠踡踤踥踦踧踨踫踭踰踲踳踴踶踷踸踻踼踾踿蹃蹅蹆蹌蹍蹎蹏蹐蹓蹔蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝��蹳蹵蹷蹸蹹蹺蹻蹽蹾躀躂躃躄躆躈躉躊躋躌躍躎躑躒躓躕躖躗躘躙躚躛躝躟躠躡躢躣躤躥躦躧躨躩躪躭躮躰躱躳躴躵躶躷躸躹躻躼躽躾躿軀軁軂軃軄軅軆軇軈軉車軋軌軍軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥��軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠輡輢輣輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺��轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆迉迊迋迌迍迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�這逜連逤逥逧逨逩逪逫逬逰週進逳逴逷逹逺逽逿遀遃遅遆遈遉遊運遌過達違遖遙遚遜遝遞遟遠遡遤遦遧適遪遫遬遯遰遱遲遳遶遷選遹遺遻遼遾邁還邅邆邇邉邊邌邍邎邏邐邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄚鄛鄜鄝鄟鄠鄡鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄰鄲鄳鄴鄵鄶鄷鄸鄺鄻鄼鄽鄾鄿酀酁酂酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀醁醂醃醄醆醈醊醎醏醓醔醕醖醗醘醙醜醝醞醟醠醡醤醥醦醧醨醩醫醬醰醱醲醳醶醷醸醹醻醼醽醾醿釀釁釂釃釄釅釆釈釋釐釒釓釔釕釖釗釘釙釚釛針釞釟釠釡釢釣釤釥帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀鉁鉂鉃鉄鉅狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅銆銇銈銉銊銋銌銍銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�銨銩銪銫銬銭銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠鋡鋢鋣鋤鋥鋦鋧鋨鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈錉洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�鏎鏏鏐鏑鏒鏓鏔鏕鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑬鑭鑮鑯鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹� 锧锳锽镃镈镋镕镚镠镮镴镵長镸镹镺镻镼镽镾門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�#闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟闠闡闢闣闤闥闦闧闬闿阇阓阘阛阞阠阣阤阥阦阧阨阩阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗陘陙陚陜陝陞陠陣陥陦陫陭陮陯陰陱陳陸陹険陻陼陽陾陿隀隁隂隃隄隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�&隌階隑隒隓隕隖隚際隝隞隟隠隡隢隣隤隥隦隨隩險隫隬隭隮隯隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖雗雘雙雚雛雜雝雞雟雡離難雤雥雦雧雫雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗霘霙霚霛霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�)霡霢霣霤霥霦霧霨霩霫霬霮霯霱霳霴霵霶霷霺霻霼霽霿靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑靔靕靗靘靚靜靝靟靣靤靦靧靨靪靫靬靭靮靯靰靱靲靵靷靸靹靺靻靽靾靿鞀鞁鞂鞃鞄鞆鞇鞈鞉鞊鞌鞎鞏鞐鞓鞕鞖鞗鞙鞚鞛鞜鞝臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�,鞞鞟鞡鞢鞤鞥鞦鞧鞨鞩鞪鞬鞮鞰鞱鞳鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠韡韢韣韤韥韨韮韯韰韱韲韴韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須頉頊頋頌頍頎怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�/頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�2顯顰顱顲顳顴颋颎颒颕颙颣風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍飏飐飔飖飗飛飜飝飠飡飢飣飤飥飦飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�5餈餉養餋餌餎餏餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠餡餢餣餤餥餦餧館餩餪餫餬餭餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈饉饊饋饌饍饎饏饐饑饒饓饖饗饘饙饚饛饜饝饞饟饠饡饢饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�8馌馎馚馛馜馝馞馟馠馡馢馣馤馦馧馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�;駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�>驚驛驜驝驞驟驠驡驢驣驤驥驦驧驨驩驪驫驲骃骉骍骎骔骕骙骦骩骪骫骬骭骮骯骲骳骴骵骹骻骽骾骿髃髄髆髇髈髉髊髍髎髏髐髒體髕髖髗髙髚髛髜髝髞髠髢髣髤髥髧髨髩髪髬髮髰髱髲髳髴髵髶髷髸髺髼髽髾髿鬀鬁鬂鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�A鬇鬉鬊鬋鬌鬍鬎鬐鬑鬒鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬠鬡鬢鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬰鬱鬳鬴鬵鬶鬷鬸鬹鬺鬽鬾鬿魀魆魊魋魌魎魐魒魓魕魖魗魘魙魚魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤E魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜H鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋K鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾鲿鳀鳁鳂鳈鳉鳑鳒鳚鳛鳠鳡鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄N鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂	�Q鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢	��R鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂	�0T鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽麀麁麃麄麅麆麉麊麌麍麎麏麐麑麔麕麖麗麘麙麚麛麜麞麠麡麢麣麤麥麧麨麩麪	��U麫麬麭麮麯麰麱麲麳麵麶麷麹麺麼麿黀黁黂黃黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰黱黲黳黴黵黶黷黸黺黽黿鼀鼁鼂鼃鼄鼅鼆鼇鼈鼉鼊鼌鼏鼑鼒鼔鼕鼖鼘鼚鼛鼜鼝鼞鼟鼡鼣鼤鼥鼦鼧鼨鼩鼪鼫鼭鼮鼰鼱	�PW鼲鼳鼴鼵鼶鼸鼺鼼鼿齀齁齂齃齅齆齇齈齉齊齋齌齍齎齏齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸齹齺齻齼齽齾龁龂龍龎龏龐龑龒龓龔龕龖龗龘龜龝龞龡龢龣龤龥郎凉秊裏隣	��X兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩	KpZ€�	 $!($,'0*4-80<3@6D9H<L?PBTEXH\K`NdQhTlWpZt]x`bXc�d<f�g�h�iHl�n(p�qHs�thv�w�z~������� �$�(�,�0�4�8�<�@�D�H�L�P�T�X�\�`�d�h�l�p�t�x�|������������������������������������ �#�&�)�,�/�2�5�8�;�>�A�D�GKNQ�R(T�UHW�XhZ�Z	�Z	������������
�\	����������������������������O
�\	���������
<]	���������
\]	|]	����������������W�]	������]	�����@�A�B��]	�������������������������������������������������������������������������������]����	��������������_�^	����������������������������������������������������������������������������������������������������^��������������������������������	����_�]%
``	�\�C���D�����������E���������F��G
`	��
h`	���G�H���Y�
|`	��������������������������������������������
�`	���������I�J�K�LOa	�������M�������N���O�������������������������8a	�����P���������Q�R������a	�������S�a	��W�a	���������������������������������������������b��������������������������������������������������������	�xb���������������������������������������������������������������������������������������������������������������������������������b������������������������	�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w_d	�x�y�z�{�|�}�~������������������������������������d	�������������������De	������%xe��	��g�e``�]t`�`a0a�a�a�abpb�b�c�d<epe�e�e��e��������	���e���������������������������������������@�A�B�C�D�E�F�G�H�f	�������������������������������������������������������������������������������������������������������������������������������f����������������������������������������	�a�b�f�g��������������������������������������������������������������-�g��������������������������������������������������������������������������������������������������������������	�`�c�do�h	����������������������������������������������������������������������������i	���������������������Z�,j	�I5hj	�J�K�L�M�N�Ow|j	�P�Q�R�S�T��j�f�g�h�i$j�]`jtj�j�j��jһ���@���A�B�C���������آ�����Dؤ���Eר��ا��F����ҵ����˿ة�G�H�I���J�����Kɥح�L��Ѿ�����M�N���O���P���Qؼ�R����Ϊ��S����د�j�T�U�V���W���Xرô���Y֮��է�������Zƹ�����[���\�����]�^ؿ����Ҳϰ���_�`�a�b���c�d��e�f�g�h�i�j�����k���l�m�n�o�p�q�r�s�t�uǬ�vl�w�x�y�z�{�|���}����~����ء�������������������ب����Щ������ؽ�����������������Ķ������ͤ������������������������������������mʲ�����������������������������������������������������������Ǫ�������������������������������������������������������������� n����������������������������������������������������������ɡΰ������������������α�������������٣��������������������٤����,o��������������������������λ��ס��������������٢����������١������Ӷ�������������������������������٦��٥��������٬ٮ��٫ʹ8p������٩ֶ��������٨����������٪��٧����ٰ�����������������������������@����������٭�Aٯ�B�����C�D�E�F�G���H�I�J�K�L�M�N�O�P��Dq�Q�R�S����ٴ�T�U�V�W���X�Y�Z������ٸ�[�\�]�^�_�����`ٵ�aٷ����ٹ�b���cٶ�d�eٱ�fٲ��ٳ�g�h�������i���jٽ�k�l�m�nٺ�o���p�q�r���sPr�]lmn$o0p<qHrTs=\s�t�u�v�w�x�y�z�{�|�}�~��������ٿ��������������������������������������������������ٻ����پ������������������������ծ��ֵ�������s������������������������ټ����ƫ�����������������������ͣ��������������������������������������������������ż͵�����������������t����������������������������������������������������������������������������������������������������������������������ɵ���@�A�B�u�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q���R�S�T�U�V�W���X�Y�Z���[�\�]�^�_�`�a�b�c�d�e��ɮ�f�g�h�i�������j�k�l�m���n���o�p�q�r�sƧ�t�u�v�w�v�x�y�z�{�|�}�����~���������������������������������������������������������������������������������������������������������������wأ����Ԫ������������������������������������������������������������������������ȫ����������������������������������������������x������������������Ƚ����������������ð������ڢ����д����ũ����������ڣ��ԩڤ������������������������������ұ�����������������y������������׼ڡ���������������������������������@�A�B���C��D�E�����F�G���H�I�J�K�L�M���Nƾ�O�����P�Q���R�����S͹�����������T���z���������U�V�������W���X�Yۻ���Z�[�����\�]�^������������_���`�aɾ�b�c�d���e�f�g�����h���i�����j���k�l���m�n��ˢȯɲ�����o���p���{���������q�r�s�t�u�v��w��ǰ�x�y�����z�{���|���}�~��������������������������������ʣ���������������������������������������������|���������������������������������������������������������Ȱ��������۽�������������Ŭ��۾ۿ�����������������������������������~����������������������ѫ��������������������������������������ļ���������������������������������������������������������������������������������������������������@�A�B�Cذ�����D�����E�F���G�H�����Iϻ�J�K���L�M�N���O�P�Q���R�S�T�U�V�W�X�Y�Z�[ƥ�ҽ�\�]������^ʮ�_ǧ�`ئ�a��������b�c�d��Э�e����׿�f�������g�h���i���j��߲ռ��¬��±�k�����l���m��n�oشîӡΣ�p��ȴ���q��ж�r���s�t�u�v��(��w�x���y������z�{���|ѹ�����}�~������������������������������ԭ������������������������������������������������������ȥ��������4������������������������˫������������������ȡ����������������������������������߶ߵֻ����������̨߳ʷ������Ҷ��˾̾��߷��ߴ����@������������ߺ����������ͬ���������߸�����߹�������������������������������������������˱����֨���������������������������L�ѽ�������������������߻������������߼߽߾Ż߿��Ա����Ǻ����������������������������������������������ζ�����������������������X�����������������������զ������ӽ�������������������������������������@�����A������������ҧ���B���C���D�����E�F�G���H�I���J���K��d���Ʒ���L���M���������N�O���������������������P���Q�����R������Ӵ�S�T�U�V�W��Ŷ���������X�Y����Z�[�\�����]�^�_�`�a�b���c�����d�p��e���f�g�h�i�����j���k�l�m�n�o�������p�q���r�s�t�u�v�w���x�y�z�{���|�������}�~����������������Ψ���������������������������|�������������������������������������������������������������������ơɶ�������ž���������������������Х�����������������ι�������������������������������������������ϲ��������������������������������������������������������������������������������������������������ɤ������������������������������������������������������������������������������������������������@�A�����B�C���D�����E�F�G�H�I�J�K�L���M�N���O�P����Q�R�S�����T�U���V�W�X�Y�����Z�[�\����]���^˻�_�`���a��b�c�d�����e�f�g�h�i�j�k�l�m�n�o�p����ҭ�q�r�s�t�u���v�w�������x�y���z�{�|�}�~�������������ج�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ď��������������������������������������������������������������ض��������������������������԰������������Χ������������������ͼ��Џ������������Բ��Ȧ�����������������@�A�B�C�D�E�F�G�H�I��J�K��L�M�Nʥ�O�P�Q�R�������S�����������T�U���V�W�X�Y�Z�������[�\���]ܐַ�^���_�`�a�b���c�d���e��̮��������f�g�h�i�j���k�l��̳��������׹���m�n���o̹�p����ƺ���q���r��s�t�u���v�w�����x�y�z�����{�|�}��~������¢������������������������������������������������������������ԫ��������������������������������������������������������������������������������������������������������������������������������������������ܤ���������������������������ܣ�����ܥ�������������������ܡ��ܢ������ǵ��������������ܧ��������ܦ��ܩ�����������������������������������������������������������@�A��B�C�D�Eܨ�F�G�H�I�J�K�L����M�N�O���P�Q��R�S�T��U�V�W�X�Y��Z�[�\�]�^�_ܪ�`�a�b�c�d��ܫ�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u���v�ܯܬ�w���x��y�z�{ܭ�|�}�~������������Ĺ����������ǽܮ�������������������������ī����������������������������������������������$��������������������������������������������������������������������������������������ʿ����׳�������������������Ҽ������������0������������������������������������������Ϧ������������ҹ������������������������̫����ز������ʧ����ͷ�����������������@�A�B<��C��ۼ�D���E�F�������G���H�I�����J��K�L�����������M���N�O�P�Q�R���S���T�U���V�W�X�Y�Z�[�\�]�^�_�`�a�bŮū�c���d����e�f�g���h�iH��j������kױ�����l���m�n��o�p�q�r�����s�t���u���v�w�x�y��z�{�|�}�����~��������������������������������������������T�������������ķ�������ʼ���������������ί��������Ҧ����������������������������������������������������������������������`��������¦����������������������������������������������������������������������������������������Ȣ�����������������l�����������������������������������������������������������������@��A�B�C�D��E�F���G�H�I�J�K�L�M�N�OӤ������P�Q���R�S�T�U�x��V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�gý�h�i�j�k�l�m�n�����o�p�q�r�s�t�u�v�w�x�y�z�{�|��}�~������������ϱ������������������������������ɩ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�����H�������I������������Т�J���K�L��������ѧ�M�N�����Oث�P�Q�R�����S���T���U�V�W�X���Y�Z��[�\�����]��լ�^�������_�����`�a���b�c�d��e��f��������������ʵ�g�������������h�i�j�����k�l�m�n���o�p��������q����r�s�t���������u�v���w��������x�y�z�{���|�}�~������Ԣ��������������������į�����������������կ����������������������������������Ѱ����������������������������ξ����������С����������������������������������������������Ң��������������������������������ʬ���������β��̥��ƨ�����������������������ʺ���м������չ����������������������������������������������������ɽ���������������������������ئ�������������������������������������������������������������������������@�����A�B�C��D��E��F����G�H�I�J��K����L��M�N��O�P�Q�R�S�T��U�V�W�X�Y�Z��[�\�]�^�_�`���a�b�c�d�e�f�gϿ�h�i�����j���k��l�m���n�o���p�q�r�s�t�u�v�w�x�y���z�{�|�}��~��������������������������������������������������������������������������������������ո�������������������������������������������������������������Ƕ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U���V�W�X�Y�Z�[�\�]��^�_�`�a�b���c�d�e�f�g�h�iΡ�j�k�l�m�n�o�p�q�r�s�t�u�v���w�����x�yѲ���z�{�����������|���}�~������������������������������������ �����������˧����ʦ������ϣ����������������������������������������������֡����������ϯ��������������������������ñ����,�����������������������������������������Ļ�������������������������������������������������������ƽ������������������������8���������ׯ����������������������®������Ӧ�����������������������������������������������ͥ�������������������ӹ��������������D��������������@�A�B�����C�D�E�F�G�H�������I�J���K�L�M�N���O�P�Q�R�S�T�U�V�W�X�Y�Z���[���\�]�^�_�`�a�b�c�d���e��͢�f�g���h�i�j��إP��������Ū�k�l�m���n��߮�o�p�qʽ�r߱�s���t��u�����v�w���x�y�z�����{�|�}�~�����������������������������������������ǿ���������\������������������������������������������¼����������������������������ͮ������������������������Ӱ����������������������������h�����������������������������������ͽ���������������������������������������������ѭ������΢����������������������������������t�����������������������������������߯��������־�æ�������������������������������������������������������������������������������t�u�v�w�x�y�z�{�|�}� �,�8�D�P�\�h�t�������������ȏԐ�������(�4�@�L�X�d�p�|�����������ĥЦܧ�����$�0�<�H�T�`�l�x�������̬�������������@�A��B�C������D�Eŭ�F������G�H���I����˼�J�K����L�M�N������Թ�����O�P�Q���R�S�T�U�V���W�X�Y�Z�[����\�]����^�����_�`�a�b�c�d�e���f���g�h���i���j�kˡ�l�m�n���o�p��q�r�s�t������u�v�������������wϢǡ�x�y���z�{���|��������}����~���������������Ϥ�����������������������������������������������������������������������������������������������������������������������������������������������������ϧ���Ω������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ԸȻ���������������@���A��B���C��D�E���F�G�HĽ�I�J�K�L�M�N�O��P�Q�R�S��T�U�V�W�����X�Y�Z�[�\�]�^ο�_�`�a�b��c���d�e�f�g�h�i�j�kԼ�l�m�n�o�p�q�r�s�t�u�v���w�x��y�z�{�|�}��~������������������������������������������������������������������������������������������������и�������������������������������������������������������ų������������������������������������������������ܲ����������������������������Ϸ���������������ս�����������������������������������¾�����������������������������������������������������������������@�A���������B�C�D���E�F���G�H�I�J�K�L�M���N�OǤִ�P����ɨ��Ť�������Q�R���S�T���U�V��W�X���Y��������Z�[�\���]�^�_�`�����a�b�c�d�e�f����ץ�gͶ�������h�����i�j�k��������l�����m�n���o�p�̧�q�r�s�t���u�v�w���x�y�zĨ�{��Ѻ���|����}�~����������Ĵ����������������������������������׾����������������£����ӵ��š���������������������ȭ˩��������������ƴקʰ�����������������ָ�����������������������������������ֿ������̢Ю�������������������Ų�����������������������������ͦ����������(�����������ͱ������׽�����������������������������������������������������������������������������������������������������������4��������������������������������������������Ҵ����������������������̽�������������������������������°�����������������������@����@�A�B���C���D�E���F�G�H���������I���J�K�LҾ�M�N�O�P�Q�R�S���T�����U���V�W�X�Y�Z�����[�\���]�^�_�`���aԮ�b���c���d�e�f�g���h��L�����§�i�j���k�l�m�n�o���p�q�����r�s��ɦ�t�u�v�w�x�y����z���{���|�}�~����������������������������������������Я���������X���������������ҡ����̯������������������ˤ������ժ�������������������������������Ħ����������������������������ġߡ����������d��������������Ʋ�������������������������˺�����ߤ��������ײ����������������������������������׫������������ߢߣ��ߥ����������p�ߦ������������������������������ߧ������������ߨ������@�A�B���C�D�Eߪ�Fߩ�G���H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`|����a�b�c�d�e�f�g�h߫�i�j�k�l�m�n�o�p���q�r�s�t�u��v�w�x�y�z�{�|�}�~������߬����������������֧߭����������������������������������������������Ч���������������������������������������������������ɢ�����������������������������������������������������������������������������ի������������������������������б������������������������ն���������˹�������������������������ʩ������������������������������������������������������������������������������ּ������Ѯ��������@�A�B�Cʱ���D�E��F�G�H�I�J����K����L�M���N�O�P��Q���R����S�T�U������V�W�X��Y�Z�[���\��ӳ�]�^�_�`���a����b�c�d�e���f���g���h�i�������j�k�l�m�n���o���p���q���r���s�t�u�v�w�x�y�����z�{���|�}ɹ����������~���������������������������������������������������������������������������������������������Ͼ����������������������������ů����������������������������������������������ĺ������������������������������������������������������������������������������������������������������������������������������������Ի���ҷ���������������������������������@�A�B�C���������D���E�F���G�H�I˷���J���K�L�M��N���O���P�Q�R�S�T�U��Vľ�Wδĩ����X��Y���Z�[�����\�]�^�_���`�a���b�c��ɱ�d��Ȩ�e�f���g�ɼ�h�i��j���������k��l�m���n�o�p�q�r���s������t�u�v���w�x������y�z���{�����|����}���~���������������������������������������������������������������������ö����֦�����������������������ǹ���������������������������������������������������������������������������ij����Ⱦ�����������������������������������������������������������������������������������������������դ����ջ�������������������˨��������������������������У����������������������������������������������������������������������Φ�������������������ͩɣ���������������������@�A�B�C������������������׮�D��E�F�G�H�I�J�K�L��MͰ��N�O�P�Q�R�S�T�U$��V���W���X÷���Y�Z�[�\�]�^�_�`���a�b�c��d�e�f���g�h�i�j�k�l�m�n�o�p���q�r�s�������t�u�v�w���x��е�y�z���{���|�}�~��������������0�������������������������������������������������������������������������������������������ɭ�������������������������������<�������������������������ֲ׵��������������������������������������������������������������Ҭ����������������������������H����������������������������������������Ш����������������������@�A��B�C��D�E�F�G��H�I��J�K��L�M�N�O�P�����Q�R¥�S�T�UT���V���W��X������Y�Z�[���\�]�^�_�`�a�����b�c��d�e����f�g�h�i�j�k�l�m�n�o�ե�p�q��r��s�t�u��v�w���x�yȶ�z�{�|��}�~����`������������������������������������������������������������������������������������������������������������������������������l������������������������������������������������������������������ģ������������������������������ӣ����������������������������x���������������������������������������������������������@�A�B�C�D���E�F�G���H�I�J�K�L�M�N�O�P�Q�R���S�T�U�V�W�X�Y���Z�[���\�]�^��̴�_�`�aϭ�b�c�d�e�f�g�h�i�j���k�����l�m�n�o�p���q�r�s�t�u�v�w�x���y�z�{�|�}�~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ƿ����������ŷ���������������@�A�B��C�D�E�F��G����H�I�J���K���L�M�N��O�P�Ъ�QǸ�R�S���T�U�V�W�X�Y�Z�[�\�]�^�_��`�a�b�c�d�e�f�gֹ����������h�i���j�k�l�m�n�o�p�q�r�s�t�u�v�w���x����y�z�{���|���������}�����~ѳ������������������������ֳ���������������������������������������������������������Ź�������������������������������������������������ĸ��ÿ������ع�������������ë����������ձ�������������������������̺����������������������������������������������������������ص����å�����������������������������������������������������ˮ�����������������������֭͡����������������������������ϫ�����������������@�AѴ�������������B�C��D�E�F�������G�H�I�J�K̭�L���M���N���O�P���Q�R�S����T���U�������V�����W�����X�Y���Z�[�����\�]����^�_�`�aɳ�b���c�d�e���fû�g��Ž�������h����ĭ�i�����j�k�����l�m�n�o�����p������մ�����q�r�s�tй��u�v�wȪ���x���y�z�{���|�}���������~����������Ţ����������������ע�����������̩����Ӿ������������к��������������������������������������������������ϴ������������������������������������������������������������������Ǣ��������������dz����������������������Ũ����������������������������������������������������������ԡ��������������������������Ϳ����������������ӿ���������������������������������������������������ɬ����������������Һ�������������������������� �������������������������@�A�B�C���D�E�F�G���H�����I�J�K����L�����M�N���O���P�Q�R�S����T���U�V���W���X�Y�Z���[���\����]�^�_,��`�a�b�c�d���e�f�g�hԨ�i�������j�����k�l���m����n�o��p�q���r�s����t������u�v�w���x���yμ�z���{�|���}���~��������������������8�������������������������������������������������������տ����������������������������������������������������������������������ʪD���������������������������������Դ��������������������������������������������������Ϫ������������������������������������������P���������������������������������������������������������������������������������̲�������������@�A�B�C���D�E�F�G���H�I�J�K�L�M\��N�OƯ�P�Q�R���S�T��U�V�W�X�Y©�Z�[�\�������]�^�_�`�a�b�c�d�e�fĮ�g�h�i���j�k�l�m�����n���o���p��q���r�s���t�u�v�w�x�y�z��{h��|�}�~��������������������Ϋ����������������������������DZ��º����������������������������̶��������������������������������t����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G���H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W����������̼ؽ������ �,�8�D�P�\�h�t��������������������������(�4�@�L�X�d�p�|������������������������$�0�<�H�T�`�l�x��������X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h���i�j�k�l�m�n�o�p���q�r�s�t�u�v�w��x�y�z�{�|�}�~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������¯��������������������Ȳ���������������������������������������������̿��������������������ը������������������˸����������������������������������������������������@�A�B���C�D�E�F���G���������H�������Iϩ�J�K�L�M�N�O�P���Q���R�S�T���U�V��W�X�Y�Z�[�\�]�^�_�����`�a�b�c�d���e�f���g�����h�������i�j�k�l�m�n�o�p�q�r�s���t�u�v�w�x�y�z�{�������|�}�~��Ȼ�������������������������������������������������������������������������������ɷ����������ú������������������������������������������������ɿ�������������Ϩ��������������������Ѭ������������������������������������������������������������������������������������������������������ȼ�������������������������������������@�A�B�C�D�E�F�G�H�I���J�K�L�M���N���O�P�Q�R�S�T���U�V�W�X�Y�Z�[�\�]�^���_�`�a�b�c�d��e�f�g�h�i�j���k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������צ����������������������ү������س��ˬ������������������Ƭ����������������������������������ţ������IJ��ĵ������������������������������������ǣ�����������������Ϭ���������������������������������������������������������������������������������Ȯ������������������״���������������������������������������������������������������������������@�A��B�����C�D�E�F�G�H���I�J���ʨ�������K�L����M�����N�O�P(�Q��R��S�T�U�V�W�X��Y�Z�[���\�]�^�_��`�����a�b�c�������d�e���f�g��h�i�j����è��k���l�m��n�o���p�q�����r�s�t�u��Գ4�v�w�x�y�z�{�|�}�~�������������������������������������������������������������������̡��������@�A�B�C�D�E�F�G�H�I�J�K��L@	�M�N�O�P��Q�R���S���T��U�V���W�X���Y�Z�[�\���]�^�_�`���a�b�c���d�e���f�g�h�i�j�k���lõ�m�n�������o�����p�q�r���s�t�����u�v�w�xL
���y���z�{�|�}�~����ɺ������������������������������������������������������������������������������������������@�A�B�C�D�E�F�GX�H�I�J���K�����L�M�����N�O�P�Q���R�S�T�U�V�W�X�Y�Z���[�\�]�^�_�`��a�b���c��d��e��f��g��h�i��������j�k�l�m�n���o�p�qd�r��s�t�u�v�w�x�y�z�{�|�}�~�����������������������������ɪ����������������������������������������������������@�A�B��Cp
���D���E�F�G��H�I�J��K�L��M��N�O�P�Q�R�S�T�U�V�W�X��Y��Z�[�\�]�^�_�`�a����b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q��r�s�t�u�v|�w�x�y�z�{�|�}�~�������������������������������������������������ư��ȿ����������������������������@��Aƿ���B�C�D�E�F�G�H���I�J�K�L���M�N�O�P�Q�R�S�T��U��V��W��X�Y�Z�[��߰��\���]�^��_�`�a�b�c��d�e��˦�f������g����������h���i�����j����k�l���m���n�o�p�q���r�s��t�u����v�η�w�x�y�z���{�|�}�~��������������������������������������������������������������������������������������������@�A�B���C�D�E���F�����G���H�����I�����J�K���Lű�����M�������N�O�P�Q�R�����S��������ƣ�������T�U�����V�W�������X��Y�Z���������[֢Ӹ��Ȭ�\�]���^�_�`�a��b�������c���d�eʹ�f�gƦ�h�i�j�������k�������l�����m�n�o�p̵���q�r���s�t�u�v���w�x���y�z�������{���|��}�~����������������������������������������������������������̱��������������������ȳ���������������������@�A�B�C�D�E�F����G�H�I�J�K�L��M��N�O�P�Q�R��S��T�U�V�WѢ�X�Y�Z�[�\�]�^��_�`�a��b�c�d�e�f�g�h�i���j�k���l�����m��n�o���p���q������r�s���t�u��v�w���x��y�z���{�|��}�~�����������������������������������Ƥ��������������������������������������������@�����Aӯ�B���C�D���յ�������E���F�������G�Hʢ�I�J�K���L�M�N�O�P���Q�R�S�T�U�V�W�XĿ���Y��ä�Zֱ�[�\�]�����^�_���`���a��bʡ�c�d���e�f����ü�g���h���i�j�k�l�m�n�o�p�q�r�s�����t�u�v�w�����x���y�z�{��|գѣ�}�~������������������������������������������������������������������������������������������@�A�B�C˯����D���E��F�G�����H�I�J�K�L�M�N�O�P�Q�R�S���T�U�V�غ���W�X�Y�����Z�[�\�]�^�_��Ϲ�`�a���b�c�d�e�f�g�h�i�j�k�l�m���nޫ�o�pƳ�q���r����s˲�t�u�v��w�xͫ�y��z�{�|�}�~հ�������������������������������������������������������������ì������������ʸ����֪�@���A���B���������C�D�E�Fʯ�G�H��I��J�K�L�M��������ɰ�N�O�P�Q�R�S��T�U����V�W�X���Y���Zש���[���\���]���^�_�`���a�������b���c�d����e�f���g�h�i���j�k������������l���m$���n�o�p�q���r���s�t�u�v���w���x���y��z�{˶�����|�}�~���������������������������������Ӳ��ȷ����������������������������������0���������@�A�B���C���D�Eµ�����F�G���H���I�J�K�����L�������M�N���O���P���Q���R���S�T�U�V�W�X�Y�Z�����̼���[�\�]�^���_�`�a�b���c<�d���e�f�g���h�i�j�������k�l�m�n���o�p�q�����r�s�t���u�v�w�x�y�z�{�|�}�~��������ĥ����������������������������������������������H ���������������������������@�A�B�C�D�E���F�G�H�I�J�K�L�M�N�O���P�Q�R�S�T���U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c���d�e�f�g�hʾ�����i���jT!�����k�l�m�n���o�����p�q�r�s�t�u�v�w�x���y�z�����{�|������ף�������}���~�������Ʊ��������������������������������������������`"�������»���������������������������@�A�B�C�D�E�F��G�H�I�J�K�L�M�N�O�P�Q�R��S�T�U�V�W�X�Y�Z�[�\�]��^�_�`�a�b��خ���c�����dl#��˽�eͺ�f�g���h�i���j���k���l�m�n�����o�p��q�r���s�t�u�v�w�x���y�z�{����|�����}���~����������������������������������������x$ϡ�����������������������˰����������������������������@��A���B�C���D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R���S�T�U��V��W�������X���%�Y�Z�[�\�]�^���_�`�a�b�c�d�e�f�g�h��i�j�k�l�m���n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������������Ѩ���������������������&�ͻ����խ����������������������Ҥ���������������������������������@�A����B��C�D�E���F�G�H�I�J��K�L�M�N�O�P�Q�R�S�T�U���'�V�W�X�Y�Z�[�\�]�^�_�`���a�b�c�d�e�f�g�h�i�j��k�lվ�m�n�o�p�������q�r���sͯ��t�u�v�w�x�y���z���{�|�}�~�������������������������(����������������������������������Ц�����������������������������������������������������������@�A���B���C�D�E�F���G���H���I���J�)�K�L�M�N�O���P���Q���R�����S�T�����Ͳ�U���V���W���X��ɸ�Y���Z�[���\���]�^�_�`�a�b�c�d�e�f�g���h�i�����j�k���l���m���n���o�pǩ�q�*���r�s�t�u���v�w�x�y�z�{�|���}�~�������������������������������������������������������������������������������������������������+�����������@׭ƪ�A�B�C�D���E�F�G�H���I¨�J�K�L�M�N����O�P���Q�R�S���T�U�V���W�X�Y��Z�[�\���]�^���_�`�a�b�c���d�e�f�g��h��i�,�j�k�l�m�n�o�p���q�r�s���t�u��v�w�x�y�z�{��|�}�~�������������������������������������������������������������������������-�����@�A�B�C�D�E�F�G�H�I���J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�����o�p�q�r�s�t�������u�v�.�w�x�y�z�{�|�}�~��������������������������������ճ����������������������������������������������������������������������������@�/�A���B�C�D���E�����F���G�����H�I�J�K�L�M�N�������O���P�Q���R�S�����T�U�V�W�X�Y�Z���[�\�]�^�_�`Ŵ�a�b�c�d�e�f�g�h���i�jϵ�k�l�m�n1�o�p�q�r�s�t�u�v�w�x���y�z�{�|�}�~����������������������������������������������������������������������������@�A�B�C�D�E�F�G�H2�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v��w�x�y�z�{�|�}�~������������������ 3���������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L���M�N�O�P�Q�R�S���T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d,4�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������������������������������@�A�B�C�D85�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������D6�������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�aP7�b�c���d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{���|�}�~����������Լ��������γ������ɴ������������ֽ��������Ŧ���\8���������ϸ֯������������������������������Ѥ�������ͳ�����������������������������ά�����������������h9׺��������������������������������������Ե������������������������������ӧ��������������������������������ȱ����������t:�����������������������������������������@����A���B�C�D�E��F����G�H�I�J�K������L�M�N���O�P����Q��R�S�T�U��V�W�X�Y��Z�;�[��\�]�^�_�`�a�b�c���dǼ�e��f�g�h�i�j���k�l�m�n�o���p�q�������r���s�tȺ�u�v���w�x�y�z�{�|�}�����~����������������������������<������������������������������������������������������������������������@�����A�B���C�D�E�F���G�����H���I�J�K�L�M�N�O�����P�Q�R�=����������� ,8	D
P\h
t�����������(4@ L!X"d#p$|%�&�'�(�)�*�+�,�-�.�/123$405<6H7T8`9l:x;�<�=�>�>ҫ���S��������T�U�V�W����ˣ�X�Y���Z���[�������������\�]���^�_�`���a���b�c�������������d�e�f�g�h�i���j���k��Ү�����l�m���n���o���?�p�q����r�s��t�u�v����ְ��w�x�y�z��{���|�}�~Ƹ€��‚ƒ„…†‡ˆ‰Š‹ŒŽ���‘’“”�•–—˜™š›œžŸ �@��@��A�B�����C����D���E�����F�G�H�I�J�K��L�MФ�N���O��������P�����֫�Q�����R�S�T�������U�������V����W���X�Y���Z�[���\��������A��в��θ���]���^�_�`�a�b����̥�c�d�e�f�g�h�i�����j������ʤ�����k�l���m�nط���o��������������p�������������q���r���s���t�����u�v�B�w�x֬�y�z�{���|�}����~À������������ŧ�Á��Â��Ã��ÄÅÆ��ÇÈÉÊËÌÍÎÏÐÑÒÓ��ÔÕ��Ö����רÙ��Ú��ÛÜÝÞßƢà�C�@�A�B�C�D�E���F���G��Ҹ���H�I�J�����K��ǻ���L�M�N�����O�P�Q�R�S���T�U�V�W���X���Y���Z�[�\����]����^�_���`�a�b�c���������������D���d��e�f�g�h�i��j���k�l�m�n���o��p�q�r�s�t�u���v�w��Ĥϥ�x�y�z�{�|��}�~�Ā��ā�Ă㥹ĆćĈĉ��ĊċČčĎď���ĐđĒē�E�����ӷĔĕ��ĖėĘ�ę�ĚěĜĝĞğĠ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N���O�P�Q��R�S���T����U�V�W�X�Y����Z�[�\�]�^�_�����`��aGҨ���b������c�d�e�f�g�����h�i���j���k���l�m�n�o�p�q�˴�r�����s����t�u�v�w��x�������y������z������������{��|�}��~HŀŁłŃ�ńŅͧņ�Ň�ňʼnŊ�ŋŌōŎŏŐőŒ��œ�ŔŕŖŗ�ŘřŚśŜŝŞş�Š�@�A�B�C�������Dɫ����E�F�G�Hܳ���I�Jܴ��ܵI�K�L���Mܹ�N�O�P���Qܷ���R��ܺܶ�Sܻâ�T�U�V�Wܼ��ܽ�X�Y��֥�Z���[���\�]����«�^ܸ����ܾ������о����_�����`�a��ܿ���b�c�dѿ��e(J�f���g�h���i�jέ���k�������������lԷ����̦���m�����n�o�����p���������q���������r�s�t�uɻ�v�w�x���yӢ�z�{���|�}���~ƻƀ��ƁƂƃƄ4Kƅ��ï����é��������ƆƇ��ƈ����Ɖ��ƊƋ����ƌ�ƍƎ��ݢ��ƏƐƑƒƓƔƕƖƗƘ����ƙƚã���ƛ��Ɯ��Ɲ�������ƞ�����Ɵ��Ơ�@�A@L��B�C��D�E�����F���G�H�I�J�K���������L���M�N�O�P�Q�������R�������S������ӫݡݣݥ��ݤݦݧҩ�T�U�V�W�X�Y�Z��ݩ�[�\ݶݱݴ�]�^LM�_�`�a�b�cݰ���d�e���f�g�h�iɯ�j�k�l��ݮ�m�n�o�pݷ�q�r��ݯ�sݸ�tݬ�u�v�w�x�y�z�{ݹݳݭĪ�|�}�~ǀݨ����ݪݫǁݲ��ݵӨݺǂݻçǃDŽXN��ݼDždžLJ��Lj��ljNJ��Nj��njǍ��ǎǏǐǑ��ǒ��ǓݿǔǕǖ����Ǘ������ǘǙǚݾǛǜǝ����ǞǟǠ�@�A�������B�C�D�E�F�����G�H�I���J�KdO�Lݽ�M�����N���O�P�Q�R����Ƽή���S���T�U�V�W�X�Y��Z�[�\�����]�^�_�`�a�bөӪ������c�d�e�f�g�h�i�j���k�l�m�n�o�p���q�r�s�����t�upP�v�w�x�y�z�{���|�}�~ȀȁȂȃȄȅȆ��ȇȈȉȊȋ�Ȍ��������ȍȎȏȐ��ȑ��ȒȓȔȕȖ��ȗ������ȘșȚ��ț��Ȝ����ȝ��Ȟ��ȟȠ�@�A�B|Q�C�D���E�F�G�H�������I�����J���K�L�M�N�O�P�Q�R��S���T�U���V�W�X�Y���Z�[�\�]�^�_�`�a�b�c�d�e�f���g�h���i���j�k�l�������m�n���o���R�p���q�r���s�t�u�v�����w�x���y�z�����{���|�}���~ɀɁɂɃɄ��Ʌ����Ɇɇ�Ɉ���ɉɊɋɌɍ��Ɏɏɐ�ɑɒɓɔɕɖɗɘəɚɛޤɜɝޣ�Sɞɟɠ�@�A�B�C�D�E�F�G�H��I�J�K�L���M��N�O�P���Q�Rε�S�T�U�V��W���X�Y�Z�[�\�]�^�_�`�����a�b�c�d�e�f�g�h�i�jǾ���ޢ�����k�l�T�m�n�oެ�p�q�r�sަ�����t�u�v�w�x�y�z�{�|�}�~ޡʀʁޥʂʃʄʅީʆʇʈʉʊިʋʌʍާʎʏʐʑʒʓʔʕʖޭʗ��ʘʙʚʛ޳ުޮʜʝ��ʞ�Uʟʠ�@�A��޶�Bޱ�C�D�E�F�G�H�I޲�J�K�L�M�N�O�P�Q�R�S�TѦ޵�U�V�W�X�Y�Z�[ޯ�\�]�^ް�_н�`�a�b޴��޹�c�d�e�f�g�h޸�i޷�j�k�l�m�n�o�V�p޻�q�r�s�t�u�v�w���x�y�z�{�|�����}�~޺ˀźˁ˂˃˄˅ˆ޼ˇˈˉˊˋˌˍ��ˎˏːˑ��˒˓˔˕˖˗˘˙˚˛˜˝˞˟ˠ�@�A���B�C�D޽�W�E�F�G�H�I޿�J�K�L�M�N�O�P�Q�R�S�TĢ�U�V�W�X��Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h޾�i��j�k�l�m�n�o�p�q�r�s�t�u�v�wպ�x�y�z���{�|�}�X�~̀́̂̃̄̅̆̇̈̉̊̋���²Ű��̌̍�̎̏̐̑̒��̓̔̕��̖̗̘�̛̙̜̝̞̟̠̚����@��A�Bʭ�C�D�E�F�G�H�I�������Ϻ��Yʴ�����J�K�L�M�N�O�P�������Q�R�S�T�U��V���W�X�Y�Z�[�\���]�^�_�`�a����b�c�����d��e�f�������g�h������i�j�k���l�m�n�o�p�Z��q�r�s��t����u�������v�w���������x�y���z�{�|�����}���~̀����́͂̓̈́��͇͈͆ͅ��͉͊͋���͌����������͍͎͏��Ӽ͓͐͑͒��͔�[��͕����͖͗͘��������͙͚��͛͜͝͞����͟��͠��֩�@���A���B���C�D�������E���F�G�H���I�J�K�L���M�N���O�P���Q�R���S�T�U���V�W����]�X�Y�Z�[�\�]�^Ӭ�����_�`���aЫ�b�c�d�e��f�g�h���i��j�k�l�m�n�o���p�q����r�s�t�u�v�w�x�y���z���{�|�}���~��΀΁΂΃�������΄^΅Ά���·�ΈΉ�Ί΋��Ό��΍ΎΏΐΑ�ΒΓΔ�ΕΖΗΘΙΚΛ�ΜΝΞΟΠ�@�A�B��C�D����E��F�G�H��I��J�K�L�M���N�O��P�Q_��R�S�T�U�V��W�X�Y���Z�[�\�]�^����_�`�a�b�c�d�e��f�g�h�i��j�k�l�m��n�o�p�q��r�s�t��u�v�w�x�y�z�{�|�}�~зπρςσ�τ$`υφχ�ψωϊϋόύ�ώϏϐϑϒϓϔϕ�ϖ���ϗϘϙϚ�ϛϜϝϞϟ���Ϡ�@�A�B�C�D�E�F�G�H�I�J�K�L�M���N�O�P�Q�R�S��T�U��V�W�X0aѪ�Y�Z�[����\�]�^�_�`�a�����b�c�d�e�f�g���h�i���j���k�l�m�n�o�p�q�����������r�s�����t����u���v˥�w���x�y�z�{���|�}�~ЀЁ�����<bЂԬ��Ѓ���ЄЅ��ІЇ��Ј��ЉЊЋЌ̻ЍЎЏ��АБВГД��ЕЖЗИЙ��К��ЛМНОПР���@Ϯ�A�B�C���D�E�F�G�H���I�J�K�L���M�N�OHc�P�����Q�Rװ���S�T���U�V�W�X���Y�Z�[��\��ԣ�]�^��ȹ�_�`�a�b�c���d�e���������f�g���h�i�j�k�l�m�n�����o�����p�q�r�����s�t���u���vTd�w�x���y�z�{�|�}�~р��стуфх��ц����чшщъы������ьэюяѐ��ёђѓ��єѕії����јљњћ�ќѝў��џ��Ѡ�@�A�B�C�D�E�F�G`e�H���I�J���K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�����d�e�f�g�h�i���j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}���~Ҁҁ�lf҂Ҫ҃�҄҅��҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]xg�^�����_�������������������`�����������a�b�c���d�e�f���g���h���i�j�k�l���m�����n�o�p�q���r�s�t���u�v�w��x�y�z�{�|�}�~ӀӁӂӃӄ�h��ӅӆӇӈӉӊ��ӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟӠ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_���`�i�a�b�c�d�e�f�g�h��i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~ԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙղԚԛԜԝԞԟ�jԠ�@�A�B�C�D�E�F�G����H�I�J�K�L�M�N�O���P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�k�|�}�~ՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖ՗՘ՙ՚՛՜՝՞՟ՠ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�l�\�]�^�_�`�a�b��c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~րց��ւփքօֆևֈ։֊֋֌֍֎֏֐֑֖֚֒֓֔֕֗֘֙�m֛֜֝֞֟֠�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_���`�a�b�c�dƩ�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�n�x�y�z�{�|�}�~׀ׁׂ׃ׅׄ׆ׇ׈׉׊׋׌׍׎׏אבגדהוזחטڥ����������ڦڧ����ڨ�יѵ��Ѷ��ך����کڪ��ګ������כ���������o��֤ڬڭ���ʶלթ����ڮ����ڰگם��ڱڲڳ��ڴʫڵڶ����ڷ����ڸڹ��ѯ��ں������ڻڼמ������ڽ��ھ����ڿ˵��������ŵ�����������p��˭��������׻��̸ן��ı��������г����ν��������������������נ������лҥ����ǫ����á�����̷������������Ǵ�������@�A�B�C�D�E�F�G�q�H���I�J�K�L����M��N�O���P�Q�R�S�T�U�V�W���X�Y�Z�[���\�]�^�_�`�a�����b�c�d�e�f�g�h��ԥ�i�j�k�l�m�n�o���p�q�r�s�������t�u�v�w�x�r�y�z���{�|���}�~؀����؁ò؂؃؄؅؆؇؈��؉؊؋��،؍؎؏ؘؙؚؐؑؒؓؔؕؖؗ؛؜؝؞؟ؠ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Qt�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~ـفقكلمنهوىيًٌٍَُِّْuٕٖٜٟٓٔٗ٘ٙٚٛٝٞ٠�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�������O������������������̰ƶ����������������������ó�������������� v����¸�����������������������������P�Q���������R׸��׬��������S���Ӯ�����T����U�V�W���X��Y�Z���[�\�����������]�^�_�`�a�b�c�d,w�e���f�g�����h�i�j�kԽ��l�m�n�o�p���q�r���s�t�u�v�w�x�y�z�{�|���}�~ڀȤځڂڃڄڅچڇڈډڊڋڌڍ�ڎ��ſ��ڏڐ��ڑ��ڒ��ړֺ��8xڔڕږԾ��ڗ��ژڙښڛ����ڜ����ڝ��ڞڟڠ�@�����A�B�����C�������D�E�F�����G�H�I���J�������K�L·�M�N�O��P���Q�����������R���S�TDy�U�V�W�X�Y���Z�[�\��ӻ�]���^�_̤�`�a�b�c���d�e�f�g�h�i�j�k�������l�m�����n�o�p�q�r�����s���t�����u���v�w�x���y�z�{�����|�}���~ۀPz������ہ��ۂۃ�������̣ۄۅۆۇۈ����ۉۊۋیۍێ��ۏېۑےۓ۔ەۖۗۘۙۚ��ۛۜ��۝۞����۟����۠���@���A���B�C�D�E�F���G�H��\{�I���J�K�L���M���N�O�P�Q�R�S�T�����U�V�W���X�Y�Z�[�\�]�^���_���`�a�b�c�d�e�f�g�h�i�j�k�����l�m��n�o���p�q�r�s�t�u�v���w�x�y�z�{h|�|�}�~܀܁܂܃܄܅܆܇܈܉܊�܋܌܍܎܏ܐܑܒܓܔܕܖܗܘܙܚܛܜܝܞܟܠ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Zt}�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~݂݄݆݈݀݁݃݅݇݉݊݋݌ݍݎݏݐݑݒݓݔݕݖݗݘݙݚݛ�~ݜݝݞݟݠ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�������a��ת�����������������������������������b������������������c��������d����ԯϽշ��������e�����f�g�h���i�j�k�l�����m���n�o�p�q�����r�s�t�u��v�w���x�y�z�����{���|Ǩ���}�Ѹ�~���ހށނރބӭޅ����ކ������އވ����މ��ԶΥ����ފދ�ތ������ލ��������ގ����ޏ�ސޑ��ޒޓޔ������ޕޖޗ׷ޘޙ���@�A�B�C�D�E�FHI J,K8LDMPN\OhPtQ�R�S�T�U�V�W�X�Y�Z�[�\^_`(a4b@cLdXedfpg|h�i�j�k�l�m�n�o�p�q�rtuv$w0x<yHzT{`|l}x~�����������������������ޚޛѡѷ��ޜ��ޝ͸������ޞ;ޟ����ޠ�@ͨ���A�������������B�C�D���E�F�G�H�I�J�������K�L�M�N�O�����P���Q�R�����S���T���U�����V���W�X��Y�Z�[�\�]���^�����������_�`�a�����b�c���d�e�f�g�h�i��Dz�jң�k�l���m�n�o�p�����q�r�s�t�u�����v�w�x�y�z�{�|���}��Ȅ��~����߀߁߂߃��߄߅��߆߇߈߉ߊ��ߋ��ߌ��ߍ�ߎ�ߏ�ߐ�ߑߒߓ�����ߔߕ��ߖߗߘаߙ�ߚ����ۢ��ߛ�����ߜۡ�����ߝߞۥߟԅߠ���@�Aۧۤ�Bۨ�C�D���E�F�G��ۣۦ֣�H۩�I�J�Kۭ�L�M�Nۮ۬���O�P�Q��۫�R�S�T۪�����U�Vۯ�W���X۰�Y�Z�[�\���]�^�_���`�a�b�c��۱�d��e�f���g۲�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{���|�}�~�۴���۳۵�����������۷�۶�������۸����������۹��@ۺ�A�B������������C���D�E�F�G���H�I���J�K��̪�L�M����������N�O�P�����Q���Rͪ���������S����ø�������T�U�V���������W�X�Y�Z�[���\���]���^�������_�`�������a�b�c�d�e�f�g��ȩ�h�i�j�k�l�m�����n�o�p�q�r�s���t�u�������v�w�x�y�����z�{�|�}���~������������������������Ұ���������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y��Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m���n�o�p�q�r�s�t�u�v�w�x(��y�z�{�|�}�~������������������������������������@�A�B�C�D�E���F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V4��W�X�Y�Z�[�\�]�^���_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������������������@������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s���tL��u�v�w�x�y�z�{�|�}�~������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�SX��T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b���c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������d�����������������@�A�B�C�D�E�F�G���H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�pp��q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N���O|��P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z���{�|�}�~�����������������������������������������ǥ�����������������������������������������Կ����������������ť����Ǯ��ǯ�����������������������������������Ǧí������������������������������������ͭ����ա�ϳ���������������ҿ�����������������������������������п�����������������ê������������׶���@����������������������A�������������������B��������þ���C���������D����E������������������F���������G�����������H���������������������������I�����������J�K���L�M�N�O�P�Q�R�S�����T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������������Ě�������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[��������\����������������������բ������������]Л���������������^�����������������������_���������`�����a�����b���c�����d�e�f�g�h�i�j���k�l�m���n�o������������p�q�r�s�������t��ܜ���u���v����½¤�����wªİ���x�y���z�{�|�����}�~�������������Ժ������������������������������������������������¡��������@���A����B�C�D���E�F����϶�G�H���I�J�K�L�M�N�O�P�Q�R���S�T�U�V�W�X�Y�Z���[�\���]�^���_�`���a�b�������c�ȸ���d�e���������f���g�h��Ӻ�����i�j���k�l���m�n�o�p�q�r�s�t�u�v���w�x�y�z�{�|�}����ѩ�~�����������������������������������������ù�����������������������˪�ϼ���@�A�B�C�D�E�F�G�H���I�J���K�L���M¶�N�O�P�Q�R����S�T�U�V���W��X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�����j�k���l�m���n���o�p���q�������r�s���t�u�v���w�x�y�z�{�|�}�~���ѥ��������������������������Ь������������������������@�A���B�C���D�E�F�G�H�I�J���K���L���M�N���O���P�Q�R�S�T�U�V�W�X�Y�Z$��[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��Τ�������������������������������0�����������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p<��q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������@�A�B�C�D�Eҳ�������˳����������H�������Ԥ­����������F���G���Ƶ�H����Iӱ�����J�������������K����ȧ�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�cT��d�e�f�g�h�i�j�k�l�m�n�o�p�q���r�s����t��u�vƮ���w�x�y��ʳ�z�{�|�}�~����������������������������`����������@�A�B�C�D���E�F���G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c���d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�tl��u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������������x�����������������������@���A���������������ظ�����B�C�D�E�F�G�H�I�J�K�L��M�Nܰ�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e���f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������@�A�B�C�D�E���F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q��Ԧ��ѱ����R��¿��ʻ��������פ�����������������S�����������T�������U�V�����������W�X��ƭ���Yɧ�������������������Z����[�\�]�^�_�`�a�����b�c�d�e�������f���g���h�i�j���������k�l���m�n�o�p�q�����r�s�t�u���v���w�x�y�z���{�|�}�~������������������������������������������������������@���A�B�C�D�E�F���G�H�I���J�K�L�M�N�O�P�Q�R�S�T���U�V�W���X�Y�Z�[�\�]�^�_�`�a�b���c�dت�e�f�g�h�i�j�k�l����m�n�o̱�p�����������q�������r�s�t���uκ�v���w�xħ�y�z�{�|�}�~����������������������������������@�A�B�Cز�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c��d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������������������������������@�A�B�C���D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������³���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\ ��]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������,��������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|8��}�~�������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\D��]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������P��������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[��������\Ÿѻ�]�����Ѽ�^���_��ԧ�`��������a�b�����\��c��������������ȵ�����d�����e���f�g�h���i�����j�������k���l�m�n�o�����p�����������������q�rӥ���s���t�u�v�w�x�y�z�{�|�}��¹h��~������������������������������������´�����������������������������������������������@�A�B�C�D�E�F�G�H���I�J�K���L�M���N�����Ot��P�Q�R�S���T�U�V�W���X�Y�Z������[���\�]ǭ�^�_�`Ĭ�a�b�������c�����d���e�f���g���h�����i�j�k�l���m�n�o�p�q�r�s�t�u���v�����w���x���y�z�{�|�}�~��������������������ؾ������������ػ��ܱ�������������������������������������������������@�A�B�C�D���E���F���G�����H���I�J�K�L���M�N�O�P�Q�R�S�T�U�V�W����X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������ȣ����������������������������������������������������	����̅؆������ �,�8�D�P�\�h�t�������������țԜ�������(�4�@�L�X�d�p�|�����������ıвܳ�����$�0�<�H�T�`�l�x�������D��]L��`	���
`�	���t�	��%��	����g��	�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O���	�U����������������������������������������	�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������-P�	����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	o�	�����V���W������]l���������H������������`5����g���\4]T]t]�]�]�]�]�^�^�_�_``�e�j�s�����?��P�X��������y�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABC@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVVVVVVVVVVVWXYZ[\]^_`abcdefghijklmnopqVrsVtVVVVuvwxyz{|}~��������������������������VVVVVVVVVVVVVVVVVVVVV@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������������������@�	

�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����	

��������	������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

������	

��	��	

��	
������	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	




 !"#$%&'()*+,-./01











��	

��	
������	

��	

 !"#��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./01234567888889:;8��	

 !"#$%&��	
��������	
��	��	

 !"#$%&''''''''''''''''''''''''''����������	

��	

��	

 !"#$%&��	

                                 ����	
�����	

;$p��@���h����zRx�$(��0FJw�?:*3$"D0�� \���$HWGNU�`  �"������p������\��p���u����8
��"�"���o`��
���"0�h	���o���o����o�oj���o��"p�GA$3a18�GA$3p1113p�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realigngbk.so-3.4.4-3.el8.x86_64.debugQ�-�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N����n ���OY��=9"P�Sᾞ����P�I�Q�ۆ@��!���5�\���ݐT��ػ+�]\�wWN��jZ5s7���m��msQ��O��r�g[�H2D̐Q����dNC{e�Ĩt���lG�$�O�	�{p���#�7՜�}w�ؓ�����A��j��0��5<���Q���k�j�d.�x
��!��b�7��ؐI�;��/���5�� �+;�u>S�	���ټR���e���6:|��R���b�� �b�ꔭرE����Dz�j�����p(�#�7��1nj��ǔ Ɉ��Is���^��*��K|c���-K��Y}��1�T���*��1�Ml9���$+����z.d�6+�4�]n#�1�.N��x:o�~��(r�I4;.^w��CA:uP۳� m�q�H2����:�K��3f��g̓��b�.��=�(���	�#�u������#�ڇ#GTL�����j�gL�'d�<ڢ_"��z�B)�Sy���eQX!�Ld"Y[��9��;bT���-�/�P�&�pp���>a\��D%i:N,0�O�{5ʄϳ�2l�9���T$�~H�����!�,�Z8�6��
�w�&�5�o?�c�=�Ba��@PTmSj1���7C��1�fˣ���Aڶ=C��'�ۜ�{~�*�{E��En$�/4�N*�M@��'�y�
T�8�&��Dy���@�:�P����d}{��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ojjE���o�� T��h^B0h88c``0n�� w���}��
���0� �����$���t����� ��"���"�� �" �` ���"�� ���"��H��"����b�����$�@D�"PK*J[CR�>�-�- lib64/ruby/enc/trans/utf8_mac.sonuȯ��ELF>�@�&@8	@88 $$�� ��$�$  888$$  S�td  P�td���<<Q�tdR�td$$��GNU�י&�R�+ڏp�&[qmg�{�� �	BE���|·8��qX Ut , F"� $� $f $� $__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize__stack_chk_failInit_utf8_macrb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby34/lib64�ui	�ii
�$@$ $ $@$`H$iX$�8h$��$P�$P�$��$`�$i�$`�$�8$��$�$�$�$�$�$�$��H��H��$H��t��H����5�$�%�$��h�������h��������h��������%M$D���%E$D���%=$DH�=i$H�b$H9�tH�&$H��t	�����H�=9$H�52$H)�H��H��H��?H�H�tH��$H��t��fD�����=�$u+UH�=�$H��tH�=�$�Y����d�����$]������w������H�G1�Ð���W1�;Wt2f�Hcʃ�H��D������ʃ�)ʉWD�D��W;Wu�Ð�ff.�@��AWAVAUATUSH��D�GD�OdH�%(H�D$1�H����H���"E9�u I�ɺ��A��OL��Ic�A��L�HD�D�����A�A��A)�D�GF�T	�D�GD;Gu�L�@H�xI�H�PH��D�E�D�NF�D�FD�9�v@�4H�\$dH3%(��H��[]A\A]A^A_�1�E9�tBf�Ic�A��H��D�D�����A�A��A)�D�GD�L�D�GD�OE9�u�L�^E��L��L9�r�fDI��A�qMcɉwE�S�F�A��A��A��F�A��E)�D�OI9�u�D��D)ƒ��������)��&���E��1�A��A��C�4��D)�A��+Hc��47����L�%�H�-�-L�mM�t$I��G��F�|A8�wC84+s|1��K�Ic�A��H��D�D�����A�A��A)�D�GD�L1�HcWI�������u	D�OE9�u�H��m���H�1�H9�����L�^����f���I�D)�Hc�E�3C�4���L�E��L��A��u+��9�t$B�4A��A��A��Dރ�D)�Hc��47��������t	������L��A�H���ΈL$L��H���L$��uI��A�D�T$H�L$H�G1�I��@�1Lc�H����B�4��I9�w�W�|����@����r����f����D���@��H��H�=�$�<���H�=$H���,�����H��H���UTF8-MACUTF-8ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿBĀāĂ㥹ĆćĈĉĊċČčĎďĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĨĩĪīĬĭĮįİĴĵĶķĹĺĻļĽľ��ŃńŅņŇňŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž��ƠơƯư�ǍǎǏǐǑǒǓǔc�df�gi�jl�mo�pr�suQvǦǧǨǩǪǫ�wy�z�{ǰǴǵǸǹ}�~�Q���уJ�ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȞȟȦȧȨȩ������Ȯȯ���Ȳȳ�̀́̓�ʹ;z`��·Q������Q������Q�����������Q������Q�I��Q����Q����Q��Q� �!4�3�46Q7�8�9;Q<�=�>@QA�B�CEQF�G�HJQK�L�MOQP�Q�RTQU�V�WYQZ�[�\�h�n�oqQr�sxQ���ч�$��Q��$@Q��Ѳ��Q��ѹ��{\����Q���������Z�����Q���Q����+m>�?�A� �S
	<f�g�iQkmV	P�oQqs�tQ��шQ��	���Q��Ѣ��Q��ѩ��Q�4
���Q������Q���
�T����4Hl���/��Q\ḀḁḂḃḄḅḆḇ���ḊḋḌḍḎḏḐḑḒḓ������ḘḙḚḛ�ḞḟḠḡḢḣḤḥḦḧḨḩḪḫḬḭ�ḰḱḲḳḴḵḶḷ�ḺḻḼḽḾḿ�pṀṁṂṃṄṅṆṇṈṉṊṋ	�
�
��ṔṕṖṗṘṙṚṛ�ṞṟṠṡṢṣ���ṪṫṬṭṮṯṰṱṲṳṴṵṶṷ!�"$�%ṼṽṾṿ�|	ẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙ�7ẠạẢả�8Q:�;Q=�>Q@�AQC�DQF�GQI�JQL�MQO�PQR�SQUẸẹẺẻẼẽ�VQX��
Qj�kQm�nQp�qQs�tỈỉỊịỌọỎỏQv�wQy�zQ|�}QрQ�уQ�цQ�щQ�ьQ�яQ�ђỤụỦủQ�ѕQ�јQ�ћQ�ўQ�ѡỲỳỴỵỶỷỸỹg
�ѳ�Q��ѹ��Q����Q������Q�����Q������Q�������Q�����Q������Q�����Q������Q����Q����Q�	Q
�
�Q�|Q%�&�'�)Q+-�.0Q13�4�6Q8�9�:�<Q>@�A�CQE�FQHJ�KMQNP�Q�SQUW�XZQ[]�^�`Qbd�egQh�i�jlQmS|
р��ф�Q���э�ё��ѕ�Q���ў�Ѣ��Ѧ�Q���ѯ�ѳ��ѷ�Q������������Q�������������Q������Q���Q���Q���Q������ι�H��	�
�
Q��Q�QQQ �!�"Q$�%Q'�(�)�+Q-�.�/1�24Q5�6�7`9�:<�=?�@BQC´�Hht	�
|tt
@@H�eQgi�j�lQnp�q�sQuw�x�zQ|~���Q��ц��Q��э��TXѡ��Q��Ѩ��Q��ѯ��Q��E�Q������Q������Q������Q������Q������Q���h�p��Q��Q�Q�
Q
�Q�Q�Q�Q!�#Q&�(Q+�-Q0�2Q5�7Q:�<Q?�A�CF�HK�MP�RU�WZ�\_�ad�fi�kn�ps�ux�z}�����шQ�эQ�ђQ�ї��Q�ќQ�ѡQ�ѦQ�ѫQ�ѰQ�ѵQ�ѺQ�ѿQ���Q���Q���������������������������������
��Q�Q�Q�Q"�$Q'�)Q,�.Q1�3Q6���8Q;�=Q@�BQE�GQJ�LQO�QQT�V�X[�]`�be�gj�lo�qt�vy�{~������������������ѝQ�ѢQ�ѧQ�ѬQ�ѱQ�ѶQ�ѻQ��Q���Q���Q���Q�����Q���Q���Q����������������������
����!$�&Q(�*Q-�/Q2�4Q7�9Q<�>QA�CQF�HQK�MQP�RQU�WQZ�\Q_�aQd�fQi�k�mp�r��u�wz�|������������������������������ѲQ�ѷQ�ѼQ��Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q�������	�		�			�		���		�		�	 	�"	%	�'	*	�,	/	�1	4	�6	9	�;	Q=	�?	QB	�D	QG	�I	QL	�N	QQ	�S	QV	�X	Q[	�]	Q`	�b	Qe	�g	Qj	�l	Qo	�q	Qt	�v	Qy	�{	Q~	р	��	�	��	�	��	�	��	�	��	�	��	�	��	�	��	�	��	�	��	���	��	�	��	�	��	�	��	�	��	Q�	��	Q�	��	Q�	��	Q�	��	Q�	��	Q�	��	Q�	��	Q�	��	Q�	��	Q�	�	Q�	�	Q
�
Q
�
Q

�

�

�

�
!
�#
&
�(
+
�-
0
�2
5
�7
:
�<
?
�A
D
�F
I
�K
N
���P
QR
�T
QW
�Y
Q\
�^
Qa
�c
Qf
�h
Qk
�m
Qp
�r
Qu
�w
Qz
�|
Q
с
Q�
ц
Q�
ы
Q�
ѐ
Q�
ѕ
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
Q�
��
Q�
��
Q�
��
��Q�
��
Q�
�
Q�
�
Q�
�
Q�Q�	Q�Q�Q�Q�Q "�$'�),�.1�36�8;�=@�BE�GJ�LO�QT�VY�[^�`c�eQg�iQl�nQq�sQv�xQ{�}Q�тQ�чQ���ьQ�ёQ�іQ�ћQ�ѠQ�ѥQ�Ѫ��������������������������������������������Q��Q��Q��Q�Q�
Q
�Q�Q�Q�Q!�#Q&�(��Q+�-Q0�2Q57�9<�>A�CF�HK�MP�RU�WZ�\_�ad�fi�kn�ps�ux�zQ|�~Q�уQ�шQ�эQ�ђQ�їQ�ќQ�ѡQ�ѦQ�ѫQ�ѰQ�ѵQ�ѺQ�ѿ���������������������������������������
�

�
Q	
�
Q
�
Q
�
Q
�
Q
�
Q"
�$
Q'
�)
Q,
�.
Q1
�3
Q6
�8
Q;
�=
Q@
�B
QE
�G
QJ
L
�N
Q
�S
V
�X
[
�]
`
�b
e
��g
j
�l
o
�q
t
�v
y
�{
~
��
�
��
�
��
�
��
Q�
ѓ
Q�
ј
Q�
ѝ
Q�
Ѣ
Q�
ѧ
Q�
Ѭ
Q�
ѱ
Q�
Ѷ
Q�
ѻ
Q�
�
Q�
��
Q�
��
Q�
��
Q�
��
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
�
��
����
���Q� Q#�%Q(�*Q-�/Q2�4Q7�9Q<�>QA�CQF�HQK�MQP�RQU�WQZ�\Q_a�cf�hk�mp�ru�wz�|����������������������(��Q�ѨQ�ѭQ�ѲQ�ѷQ�ѼQ��Q���Q���Q���Q���Q���Q���Q���Q�������������������	���� �"%�'*�,/�0Q3�5Q8�:Q=�?�4 QB�DQG�IQL�NQQ�SQV�XQ[�]Q`�bQe�gQj�lQo�qQtv�x{�}������������������������������������Q�ѽQ���Q���Q���Q���Q���Q���Q��@!���������� , 8!D"�?L"Q���Q��Q��Q�Q�Q
�Q��� �"%�'*�,/�14�69�;>�@C�EH�JM�OR�TQV�XQ[�]Q`�bQe�gQj�lQo�qQt�vQy�{Q~рQ�хQ�ъQ���"яQ�єQ�љ��������������������������������������������Q���Q���Q���Q���Q��Q��Q�Q�Q�
Q�Q�Q�Q�!Q$&�(+��#�-0�25�7:�<?�AD�FI�KN�PS�UX�Z]�_b�dg�iQk�mQp�rQu�wQz�|QсQ�цQ�ыQ�ѐQ�ѕQ�њQ�џQ�ѤQ�ѩQ�Ѯ�������������������$��������������������������Q��Q��Q�Q�	Q�Q�Q�Q�Q �"Q%�'Q*�,Q/�1Q4�6Q9;�=@�BE�GJ�LO�QT�VY�[^�`c�eh��%�jm�or�tw�y|�~Q�тQ�чQ�ьQ�ёQ�іQ�ћQ�ѠQ�ѥQ�ѪQ�ѯQ�ѴQ�ѹQ�ѾQ�������������������������������������������&	�
Q
�Q�Q�Q�Q!�#Q&�(Q+�-Q0�2Q5�7Q:�<Q?�AQD�FQI�KQNP�RU�WZ�\_�ad�fi�kn�ps�ux�z}�������������Q�їQ�ќQ�ѡQ���'ѦQ�ѫQ�ѰQ�ѵQ�ѺQ�ѿQ���Q���Q���Q���Q����������������������������
�����Q"�$Q'�)Q,�.Q1�3Q6�8Q;�=Q@�B��(QE�GQJ�LQO�QQT�VQY�[Q^�`Qce�gj�lo�qt�vy�{~��������������������������Q�ѬQ�ѱQ�ѶQ�ѻQ��Q���Q���Q���Q���Q���Q���Q���)��Q���Q�����������������
����!$�&)�+.�03�4Q7�9Q<�>QA�CQF�HQK�MQP�RQU�WQZ�\Q_�aQd�fQi�kQn�pQs�uQxz�|��*��������������������������������������Q��Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q��Q��Q���	�����, �"%�'*�,/�14�69�;>�@C�EH�IQL�NQQ�SQV�XQ[�]Q`�bQe�gQj�lQo�qQt�vQy�{Q~рQ�хQ�ъQ������������������������������-��������������Q���Q���Q���Q���Q���Q���Q���Q��Q��Q�Q�Q�
Q�Q���!�#&�(+�-0�25�7:�<?�AD�FI�KN�PS�UX�Z� .]�^Qa�cQf�hQk�mQp�rQu�wQz�|QсQ�цQ�ыQ�ѐQ�ѕQ�њQ�џQ�������������������������������������������Q���Q���Q��Q��,/�Q��Q�Q�	Q�Q�Q�Q�Q �"Q%�'Q*�,�.1�36�8;�=@�BE�GJ�LO�QT�VY�[^�`c�eh�jm�or�sQv�xQ{�}Q�тQ�чQ�ьQ�ёQ�і�80Q�ћQ�ѠQ�ѥQ�ѪQ�ѯQ�ѴQ�������������������������������������������Q��Q�Q�
Q
�Q�Q�Q�Q!�#Q&�(Q+�-Q0�2Q5�D1�7Q:�<Q?�A�CF�HK�MP�RU�WZ�\_�ad�fi�kn�ps�ux�z}�����шQ�эQ�ђQ�їQ�ќQ�ѡQ�ѦQ�ѫQ�ѰQ�ѵQ�ѺQ�ѿQ���Q���Q������P2����������������������������
��Q�Q�Q�Q"�$Q'�)Q,�.Q1�3Q6�8Q;�=Q@�BQE�GQJ�LQO�QQT�V�X[�]`�be�gj�lo�q�\3t�vy�{~������������������ѝQ�ѢQ�ѧQ�ѬQ�ѱQ�ѶQ�ѻQ��Q���Q���Q���Q���Q���Q���Q����������������������
�h4����!$�&Q(�*Q-�/Q2�4Q7�9Q<�>QA�CQF�HQK�MQP�RQU�WQZ�\Q_�aQd�fQi�k�mp�ru�wz�|������������������������������t5�ѲQ�ѷQ�ѼQ��Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���Q���������	���� �"%�'*�,/�14�69�;Q=�?QB�DQG�IQL��6�NQQ�SQV�XQ[�]Q`�bQe�gQj�lQo�qQt�vQy�{Q~р��������������������������������������������Q���Q���Q���Q���Q���Q���Q�����7Q���Q���Q��Q��Q�Q�Q
����!�#&�(+�-0�25�7:�<?�AD�FI�KN�PQR�TQW�YQ\�^Qa�cQf�hQk�mQp�rQu�wQz�|QсQ�цQ���8ыQ�ѐQ�ѕ��������������������������������������������Q���Q���Q���Q���Q��Q��Q��Q�Q�	Q�Q�Q�Q�Q "�$'��9�),�.1�36�8;�=@�BE�GJ�LO�QT�VY�[^�`c�eQg�iQl�nQq�sQv�xQ{�}Q�тQ�чQ�ьQ�ёQ�іQ�ћQ�ѠQ�ѥQ�Ѫ�������������������:���������������������������Q��Q��Q��Q�Q�
Q
�Q�Q�Q�Q!�#Q&�(Q+�-Q0�2Q57�9<�>A�CF�HK�MP�RU�WZ�\_�ad��;�fi�kn�ps�ux�zQ|�~Q�уQ�шQ�эQ�ђQ�їQ�ќQ�ѡQ�ѦQ�ѫQ�ѰQ�ѵQ�ѺQ�ѿ�������������������������������������� � ��< � Q	 � Q � Q � Q � Q � Q" �$ Q' �) Q, �. Q1 �3 Q6 �8 Q; �= Q@ �B QE �G QJ L �N Q �S V �X [ �] ` �b e �g j �l o �q t �v y �{ ~ �� � �� � �� � �� Q� ѓ Q� ј Q� ѝ Q� ��=Ѣ Q� ѧ Q� Ѭ Q� ѱ Q� Ѷ Q� ѻ Q� � Q� �� Q� �� Q� �� Q� �� �� � �� � �� � �� � �� � �� � �� � �� � �� !�!!�!!�
!!�!!�!!�!Q!� !Q#!�%!Q(!�*!Q-!�/!Q2!�4!Q7!�9!Q<!�>!��>QA!�C!QF!�H!QK!�M!QP!�R!QU!�W!QZ!�\!Q_!a!�c!f!�h!k!�m!p!�r!u!�w!z!�|!!��!�!��!�!��!�!��!�!��!�!��!�!��!�!��!Q�!Ѩ!Q�!ѭ!Q�!Ѳ!Q�!ѷ!Q�!Ѽ!Q�!�!Q�!��!Q�!��!Q�!��!Q�!��!Q�!��!Q�!��?��!Q�!��!Q�!��!��!�!��!�!��!�!��!�!��!"�""�	""�""�""�""�" "�""%"�'"*"�,"/"�0"Q3"�5"Q8"�:"Q="�?"QB"�D"QG"�I"QL"�N"QQ"�S"QV"�X"Q["�]"Q`"�b"Qe"�g"Qj"�l"Qo"�q"Qt"v"�x"{"��@�}"�"��"�"��"�"��"�"��"�"��"�"��"�"��"�"��"�"��"�"��"�"��"�"��"Q�"ѽ"Q�"��"Q�"��"Q�"��"Q�"��"Q�"��"Q�"��"Q�"��"Q�"��"Q�"��"Q�"��"Q�"��"Q�"�"Q�"�"�##�##�
#
#�##�##�#�B#�#!#�##&#�(#+#�-#0#�2#5#�7#:#�<#?#�A#D#�E#QH#�J#QM#�O#QR#�T#QW#�Y#Q\#�^#Qa#�c#Qf#�h#Qk#�m#Qp#�r#Qu#�w#Qz#�|#Q#с#Q�#ц#Q�#�#��#�#��#�#��#�#��#�#��#�#��#�#��#�#��#�#��#�#�C��#�#��#�#��#�#��#�#��#Q�#��#Q�#��#Q�#��#Q�#��#Q�#��#Q�#��#Q�#��#Q�#�#Q�#�#Q�#�#Q$�$Q$�	$Q$�$Q$�$�$$�$$�$"$�$$'$�)$,$�.$1$�3$6$�8$;$�=$@$�B$E$�G$J$�L$O$�Q$T$�V$�DY$�Z$Q]$�_$Qb$�d$Qg$�i$Ql$�n$Qq$�s$Qv$�x$Q{$�}$Q�$т$Q�$ч$Q�$ь$Q�$ё$Q�$і$Q�$ћ$Q�$�$��$�$��$�$��$�$��$�$��$�$��$�$��$�$��$�$��$�$��$�$��$�$��$�$��$�$��$Q�$��$Q�$��$Q�$��$Q�$�(E�$Q�$�$Q�$�%Q%�%Q%�
%Q
%�%Q%�%Q%�%Q%�%Q!%�#%Q&%�(%�*%-%�/%2%�4%7%�9%<%�>%A%�C%F%�H%K%�M%P%�R%U%�W%Z%�\%_%�a%d%�f%i%�k%n%�o%Qr%�t%Qw%�y%Q|%�~%Q�%у%Q�%ш%Q�%э%Q�%ђ%�4FQ�%ї%Q�%ќ%Q�%ѡ%Q�%Ѧ%Q�%ѫ%Q�%Ѱ%Q�%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%Q�%�%Q�%�&Q&�&Q	&�&Q&�&Q&�&Q&�&Q&�&Q"&�$&Q'&�)&Q,&�.&Q1&�@G�3&Q6&�8&Q;&�=&�?&B&�D&G&�I&L&�N&Q&�S&V&�X&[&�]&`&�b&e&�g&j&�l&o&�q&t&�v&y&�{&~&��&�&ф&Q�&щ&Q�&ю&Q�&ѓ&Q�&ј&Q�&ѝ&Q�&Ѣ&Q�&ѧ&Q�&Ѭ&Q�&ѱ&Q�&Ѷ&Q�&ѻ&Q�&�&Q�&��&Q�&�&��&�&�LH��&�&��&�&��&�&��&�&��&�&��&�&��&�&��&�&��&�&��&'�''�''�
'Q'�'Q'�'Q'�'Q'� 'Q#'�%'Q('�*'Q-'�/'Q2'�4'Q7'�9'Q<'�>'QA'�C'QF'�H'QK'�M'QP'�R'�T'W'�Y'\'�^'a'�c'f'�h'k'�m'�XIp'�r'u'�w'z'�|''��'�'��'�'��'�'��'�'��'�'љ'Q�'ў'Q�'ѣ'Q�'Ѩ'Q�'ѭ'Q�'Ѳ'Q�'ѷ'Q�'Ѽ'Q�'�'Q�'��'Q�'��'Q�'��'Q�'��'Q�'��'Q�'�'��'�'��'�'��'�'��'�'��'�'��'�'��'(�((�	((�dJ�((�((�((�( (�"(Q$(�&(Q)(�+(Q.(�0(Q3(�5(Q8(�:(Q=(�?(QB(�D(QG(�I(QL(�N(QQ(�S(QV(�X(Q[(�](Q`(�b(Qe(�g(�i(l(�n(q(�s(v(�x({(�}(�(��(�(��(�(��(�(��(�(��(�(��(�(��(�(��(�(��(�pK�(Ѯ(Q�(ѳ(Q�(Ѹ(Q�(ѽ(Q�(��(Q�(��(Q�(��(Q�(��(Q�(��(Q�(��(Q�(��(Q�(��(Q�(��(Q�(��(Q�(�(��(�(��(�(�))�))�
)
)�))�))�))�)!)�#)&)�()+)�-)0)�2)5)�7)Q9)�;)Q>)�@)QC)�E)QH)�|L�J)QM)�O)QR)�T)QW)�Y)Q\)�^)Qa)�c)Qf)�h)Qk)�m)Qp)�r)Qu)�w)Qz)�|)�~)�)��)�)��)�)��)�)��)�)��)�)��)�)��)�)��)�)��)�)��)�)��)�)��)�)��)�)��)Q�)��)Q�)��)Q�)��)Q�)��)Q�)��)Q�)��)Q�)��)��MQ�)��)Q�)��)Q�)�)Q�)�)Q�)�)Q*�*Q*	*�**�**�**�**�*"*�$*'*�)*,*�.*1*�3*6*�8*;*�=*@*�B*E*�G*J*�L*QN*�P*QS*�U*QX*�Z*Q]*�_*Qb*�d*Qg*�i*Ql*�n*Qq*�s*Qv*�x*Q{*�}*Q�*т*Q�*��Nч*Q�*ь*Q�*ё*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*�*��*Q�*��*Q�*��*Q�*��*Q�*��*Q�*��*Q�*�*Q�*�*Q�*�+Q+�+Q+�
+Q
+�+Q+�+Q+�+Q++� +#+��O�%+(+�*+-+�/+2+�4+7+�9+<+�>+A+�C+F+�H+K+�M+P+�R+U+�W+Z+�\+_+�a+Qc+�e+Qh+�j+Qm+�o+Qr+�t+Qw+�y+Q|+�~+Q�+у+Q�+ш+Q�+э+Q�+ђ+Q�+ї+Q�+ќ+Q�+ѡ+Q�+Ѧ+��+�+��+�+��+�+��+�+��+�+��+��P�+��+�+��+�+��+�+��+�+��+�+��+�+��+�+��+�+��+Q�+��+Q�+�+Q�+�+Q�+�,Q,�,Q	,�,Q,�,Q,�,Q,�,Q,�,Q",�$,Q',�),Q,,�.,Q1,3,�5,8,�:,=,�?,B,�D,G,�I,L,�N,Q,�S,V,�X,[,�],`,��Q�b,e,�g,j,�l,o,�q,t,�v,Qx,�z,Q},�,Q�,ф,Q�,щ,Q�,ю,Q�,ѓ,Q�,ј,Q�,ѝ,Q�,Ѣ,Q�,ѧ,Q�,Ѭ,Q�,ѱ,Q�,Ѷ,Q�,ѻ,��,�,��,�,��,�,��,�,��,�,��,�,��,�,��,�,��,�,��,�,��,�,��,�,��,�,��,��R-�-Q-�-Q
-�-Q-�-Q-�-Q-�-Q-� -Q#-�%-Q(-�*-Q--�/-Q2-�4-Q7-�9-Q<-�>-QA-�C-QF-H-�J-M-�O-R-�T-W-�Y-\-�^-a-�c-f-�h-k-�m-p-�r-u-�w-z-�|--��-�-��-�-��-Q�-я-Q�-є-Q�-љ-Q�-��Sў-Q�-ѣ-Q�-Ѩ-Q�-ѭ-Q�-Ѳ-Q�-ѷ-Q�-Ѽ-Q�-�-Q�-��-Q�-��-Q�-��-��-�-��-�-��-�-��-�-��-�-��-�-��-�-��-�-��-�-��-.�..�	..�..�..�.Q.�.Q.�!.Q$.�&.Q).�+.Q..�0.Q3.�5.Q8.�:.��TQ=.�?.QB.�D.QG.�I.QL.�N.QQ.�S.QV.�X.Q[.].�_.b.�d.g.�i.l.�n.q.�s.v.�x.{.�}.�.��.�.��.�.��.�.��.�.��.�.��.�.��.Q�.Ѥ.Q�.ѩ.Q�.Ѯ.Q�.ѳ.Q�.Ѹ.Q�.ѽ.Q�.��.Q�.��.Q�.��.Q�.��.Q�.��.Q�.��U��.Q�.��.Q�.��.��.�.��.�.��.�.��.�.��.�.�//�//�
/
/�//�//�//�/!/�#/&/�(/+/�,/Q//�1/Q4/�6/Q9/�;/Q>/�@/QC/�E/QH/�J/QM/�O/QR/�T/QW/�Y/Q\/�^/Qa/�c/Qf/�h/Qk/�m/Qp/r/�t/w/��V�y/|/�~/�/��/�/��/�/��/�/��/�/��/�/��/�/��/�/��/�/��/�/��/�/��/Q�/ѹ/Q�/Ѿ/Q�/��/Q�/��/Q�/��/Q�/��/Q�/��/Q�/��/Q�/��/Q�/��/Q�/��/Q�/��/Q�/�/Q�/�/��/�/�00�0	0�00�00�0�X0�00�0"0�$0'0�)0,0�.010�3060�80;0�=0@0�A0QD0�F0QI0�K0QN0�P0QS0�U0QX0�Z0Q]0�_0Qb0�d0Qg0�i0Ql0�n0Qq0�s0Qv0�x0Q{0�}0Q�0т0Q�0�0��0�0��0�0��0�0��0�0��0�0��0�0��0�0��0�0��0�0�Y��0�0��0�0��0�0��0�0��0Q�0��0Q�0��0Q�0��0Q�0��0Q�0��0Q�0��0Q�0��0Q�0��0Q�0�0Q�0�0Q�0�1Q1�1Q1�
1Q
1�1�11�11�11� 1#1�%1(1�*1-1�/121�4171�91<1�>1A1�C1F1�H1K1�M1P1�R1�ZU1�V1QY1�[1Q^1�`1Qc1�e1Qh1�j1Qm1�o1Qr1�t1Qw1�y1Q|1�~1Q�1у1Q�1ш1Q�1э1Q�1ђ1Q�1ї1Q�1�1��1�1��1�1��1�1��1�1��1�1��1�1��1�1��1�1��1�1��1�1��1�1��1�1��1�1��1Q�1��1Q�1��1Q�1��1Q�1�$[��1Q�1�1Q�1�1Q�1�2Q2�2Q	2�2Q2�2Q2�2Q2�2Q2�2Q"2�$2�&2)2�+2.2�0232�5282�:2=2�?2B2�D2G2�I2L2�N2Q2�S2V2�X2[2�]2`2�b2e2�g2j2�k2Qn2�p2Qs2�u2Qx2�z2Q}2�2Q�2ф2Q�2щ2Q�2ю2�0\Q�2ѓ2Q�2ј2Q�2ѝ2Q�2Ѣ2Q�2ѧ2Q�2Ѭ2Q�2�2��2�2��2�2��2�2��2�2��2�2��2�2��2�2��2�2��2�2��2�2��2�2��2�2��2�2��2Q�2�2Q�2�2Q3�3Q3�3Q
3�3Q3�3Q3�3Q3�3Q3� 3Q#3�%3Q(3�*3Q-3�<]�/3Q23�43Q73�93�;3>3�@3C3�E3H3�J3M3�O3R3�T3W3�Y3\3�^3a3�c3f3�h3k3�m3p3�r3u3�w3z3�|33р3Q�3х3Q�3ъ3Q�3я3Q�3є3Q�3љ3Q�3ў3Q�3ѣ3Q�3Ѩ3Q�3ѭ3Q�3Ѳ3Q�3ѷ3Q�3Ѽ3Q�3�3Q�3�3��3�3�H^��3�3��3�3��3�3��3�3��3�3��3�3��3�3��3�3��3�3��3�3��34�44�	4Q4�
4Q4�4Q4�4Q4�4Q4�!4Q$4�&4Q)4�+4Q.4�04Q34�54Q84�:4Q=4�?4QB4�D4QG4�I4QL4�N4�P4S4�U4X4�Z4]4�_4b4�d4g4�i4�T_l4�n4q4�s4v4�x4{4�}4�4��4�4��4�4��4�4��4�4ѕ4Q�4њ4Q�4џ4Q�4Ѥ4Q�4ѩ4Q�4Ѯ4Q�4ѳ4Q�4Ѹ4Q�4ѽ4Q�4��4Q�4��4Q�4��4Q�4��4Q�4��4Q�4�4��4�4��4�4��4�4��4�4��4�4��4�4��4�4�55�55�``�
5
5�55�55�55�5Q 5�"5Q%5�'5Q*5�,5Q/5�15Q45�65Q95�;5Q>5�@5QC5�E5QH5�J5QM5�O5QR5�T5QW5�Y5Q\5�^5Qa5�c5�e5h5�j5m5�o5r5�t5w5�y5|5�~5�5��5�5��5�5��5�5��5�5��5�5��5�5��5�5��5�la�5Ѫ5Q�5ѯ5Q�5Ѵ5Q�5ѹ5Q�5Ѿ5Q�5��5Q�5��5Q�5��5Q�5��5Q�5��5Q�5��5Q�5��5Q�5��5Q�5��5Q�5�5��5�5��5�5��5�5�66�6	6�66�66�66�66�6"6�$6'6�)6,6�.616�36Q56�76Q:6�<6Q?6�A6QD6�xb�F6QI6�K6QN6�P6QS6�U6QX6�Z6Q]6�_6Qb6�d6Qg6�i6Ql6�n6Qq6�s6Qv6�x6�z6}6�6�6��6�6��6�6��6�6��6�6��6�6��6�6��6�6��6�6��6�6��6�6��6�6��6�6ѿ6Q�6��6Q�6��6Q�6��6Q�6��6Q�6��6Q�6��6Q�6��6��cQ�6��6Q�6��6Q�6��6Q�6�6Q�6�6Q�6�7Q77�7
7�77�77�77�77� 7#7�%7(7�*7-7�/727�4777�97<7�>7A7�C7F7�H7QJ7�L7QO7�Q7QT7�V7QY7�[7Q^7�`7Qc7�e7Qh7�j7Qm7�o7Qr7�t7Qw7�y7Q|7�~7Q�7��d�#�$�%�&�'�(�)�*,-.$/00<1H2T3`4l5x6�7�8�9�:�;�<�=�>�?�@�ACD E,F8GDHPI\JhKtL�M�N�O�P�Q�R�S�T�U�V�WYZ[(\4]@^L_X`dapb|c�d�e��eу7Q�7ш7Q�7э7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7�7��7Q�7��7Q�7��7Q�7��7Q�7��7Q�7��7Q�7��7Q�7�7Q�7�7Q�7�8Q8�8Q	8�8Q8�8Q8�8Q88�88��f�!8$8�&8)8�+8.8�0838�5888�:8=8�?8B8�D8G8�I8L8�N8Q8�S8V8�X8[8�]8Q_8�a8Qd8�f8Qi8�k8Qn8�p8Qs8�u8Qx8�z8Q}8�8Q�8ф8Q�8щ8Q�8ю8Q�8ѓ8Q�8ј8Q�8ѝ8Q�8Ѣ8��8�8��8�8��8�8��8�8��8�8��8��g�8��8�8��8�8��8�8��8�8��8�8��8�8��8�8��8�8��8Q�8��8Q�8��8Q�8�8Q�8�8Q9�9Q9�9Q
9�9Q9�9Q9�9Q9�9Q9� 9Q#9�%9Q(9�*9Q-9/9�1949�6999�;9>9�@9C9�E9H9�J9M9�O9R9�T9W9�Y9\9��h�^9a9�c9f9�h9k9�m9p9�r9Qt9�v9Qy9�{9Q~9р9Q�9х9Q�9ъ9Q�9я9Q�9є9Q�9љ9Q�9ў9Q�9ѣ9Q�9Ѩ9Q�9ѭ9Q�9Ѳ9Q�9ѷ9��9�9��9�9��9�9��9�9��9�9��9�9��9�9��9�9��9�9��9�9��9�9��9�9��9�9��9��i�9�9Q:�:Q:�:Q:�
:Q:�:Q:�:Q:�:Q:�!:Q$:�&:Q):�+:Q.:�0:Q3:�5:Q8:�::Q=:�?:QB:D:�F:I:�K:N:�P:S:�U:X:�Z:]:�_:b:�d:g:�i:l:�n:q:�s:v:�x:{:�}:�:��:�:��:Q�:ы:Q�:ѐ:Q�:ѕ:Q�:��jњ:Q�:џ:Q�:Ѥ:Q�:ѩ:Q�:Ѯ:Q�:ѳ:Q�:Ѹ:Q�:ѽ:Q�:��:Q�:��:Q�:��:��:�:��:�:��:�:��:�:��:�:��:�:��:�:��:�:��:�:��:�:�;;�;;�
;
;�;;�;Q;�;Q;�;Q ;�";Q%;�';Q*;�,;Q/;�1;Q4;�6;��kQ9;�;;Q>;�@;QC;�E;QH;�J;QM;�O;QR;�T;QW;Y;�[;^;�`;c;�e;h;�j;m;�o;r;�t;w;�y;|;�~;�;��;�;��;�;��;�;��;�;��;�;��;Q�;Ѡ;Q�;ѥ;Q�;Ѫ;Q�;ѯ;Q�;Ѵ;Q�;ѹ;Q�;Ѿ;Q�;��;Q�;��;Q�;��;Q�;��;Q�;��l��;Q�;��;Q�;��;��;�;��;�;��;�;��;�;��;�;��;�;�<<�<	<�<<�<<�<<�<<�<"<�$<'<�(<Q+<�-<Q0<�2<Q5<�7<Q:<�<<Q?<�A<QD<�F<QI<�K<QN<�P<QS<�U<QX<�Z<Q]<�_<Qb<�d<Qg<�i<Ql<n<�p<s<��m�u<x<�z<}<�<�<��<�<��<�<��<�<��<�<��<�<��<�<��<�<��<�<��<�<��<Q�<ѵ<Q�<Ѻ<Q�<ѿ<Q�<��<Q�<��<Q�<��<Q�<��<Q�<��<Q�<��<Q�<��<Q�<��<Q�<��<Q�<��<Q�<�<��<�<��<=�==�=
=�==�=�o=�==�==� =#=�%=(=�*=-=�/=2=�4=7=�9=<=�==Q@=�B=QE=�G=QJ=�L=QO=�Q=QT=�V=QY=�[=Q^=�`=Qc=�e=Qh=�j=Qm=�o=Qr=�t=Qw=�y=Q|=�~=Q�=�=��=�=��=�=��=�=��=�=��=�=��=�=��=�=��=�=��=�=�p��=�=��=�=��=�=��=�=��=Q�=��=Q�=��=Q�=��=Q�=��=Q�=��=Q�=��=Q�=��=Q�=��=Q�=��=Q�=�=Q�=�=Q�=�>Q>�>Q	>�>�
>>�>>�>>�>>�!>$>�&>)>�+>.>�0>3>�5>8>�:>=>�?>B>�D>G>�I>L>�N>� qQ>�R>QU>�W>QZ>�\>Q_>�a>Qd>�f>Qi>�k>Qn>�p>Qs>�u>Qx>�z>Q}>�>Q�>ф>Q�>щ>Q�>ю>Q�>ѓ>Q�>�>��>�>��>�>��>�>��>�>��>�>��>�>��>�>��>�>��>�>��>�>��>�>��>�>��>�>��>Q�>��>Q�>��>Q�>��>Q�>�,r��>Q�>��>Q�>�>Q�>�>Q?�?Q?�?Q
?�?Q?�?Q?�?Q?�?Q?� ?�"?%?�'?*?�,?/?�1?4?�6?9?�;?>?�@?C?�E?H?�J?M?�O?R?�T?W?�Y?\?�^?a?�c?f?�g?Qj?�l?Qo?�q?Qt?�v?Qy?�{?Q~?р?Q�?х?Q�?ъ?�8sQ�?я?Q�?є?Q�?љ?Q�?ў?Q�?ѣ?Q�?Ѩ?Q�?�?��?�?��?�?��?�?��?�?��?�?��?�?��?�?��?�?��?�?��?�?��?�?��?�?��?�?��?Q�?��?Q�?�?Q�?�?Q@�@Q@�@Q@�
@Q@�@Q@�@Q@�@Q@�!@Q$@�&@Q)@�Dt�+@Q.@�0@Q3@�5@�7@:@�<@?@�A@D@�F@I@�K@N@�P@S@�U@X@�Z@]@�_@b@�d@g@�i@l@�n@q@�s@v@�x@{@�|@Q@с@Q�@ц@Q�@ы@Q�@ѐ@Q�@ѕ@Q�@њ@Q�@џ@Q�@Ѥ@Q�@ѩ@Q�@Ѯ@Q�@ѳ@Q�@Ѹ@Q�@ѽ@Q�@�@��@�@�Pu��@�@��@�@��@�@��@�@��@�@��@�@��@�@��@�@��@�@��@�@��@�@�AA�AQA�	AQA�AQA�AQA�AQA�AQ A�"AQ%A�'AQ*A�,AQ/A�1AQ4A�6AQ9A�;AQ>A�@AQCA�EAQHA�JA�LAOA�QATA�VAYA�[A^A�`AcA�eA�\vhA�jAmA�oArA�tAwA�yA|A�~A�A��A�A��A�A��A�AёAQ�AіAQ�AћAQ�AѠAQ�AѥAQ�AѪAQ�AѯAQ�AѴAQ�AѹAQ�AѾAQ�A��AQ�A��AQ�A��AQ�A��AQ�A�A��A�A��A�A��A�A��A�A��A�A��A�A��A�A��A�A�BB�hw�B	B�BB�BB�BB�BQB�BQ!B�#BQ&B�(BQ+B�-BQ0B�2BQ5B�7BQ:B�<BQ?B�ABQDB�FBQIB�KBQNB�PBQSB�UBQXB�ZBQ]B�_B�aBdB�fBiB�kBnB�pBsB�uBxB�zB}B�B�B��B�B��B�B��B�B��B�B��B�B��B�B��B�tx�BѦBQ�BѫBQ�BѰBQ�BѵBQ�BѺBQ�BѿBQ�B��BQ�B��BQ�B��BQ�B��BQ�B��BQ�B��BQ�B��BQ�B��BQ�B�B��B�B��B�B��B�B��BC�CC�C
C�CC�CC�CC�CC� C#C�%C(C�*C-C�/CQ1C�3CQ6C�8CQ;C�=CQ@C��y�BCQEC�GCQJC�LCQOC�QCQTC�VCQYC�[CQ^C�`CQcC�eCQhC�jCQmC�oCQrC�tC�vCyC�{C~C��C�C��C�C��C�C��C�C��C�C��C�C��C�C��C�C��C�C��C�C��C�C��C�CѻCQ�C�CQ�C��CQ�C��CQ�C��CQ�C��CQ�C��CQ�C��C��zQ�C��CQ�C��CQ�C��CQ�C��CQ�C�CQ�C�CQ�CD�DD�DD�
DD�DD�DD�DD�!D$D�&D)D�+D.D�0D3D�5D8D�:D=D�?DBD�DDQFD�HDQKD�MDQPD�RDQUD�WDQZD�\DQ_D�aDQdD�fDQiD�kDQnD�pDQsD�uDQxD�zDQ}D��{�DQ�DфDQ�DщD��D�D��D�D��D�D��D�D��D�D��D�D��D�D��D�D��D�D��D�D��D�D��D�D��D�D��D�D��DQ�D��DQ�D��DQ�D��DQ�D��DQ�D��DQ�D��DQ�D��DQ�D�DQ�D�DQE�EQE�EQ
E�EQE�EQEE�EE��|�E E�"E%E�'E*E�,E/E�1E4E�6E9E�;E>E�@ECE�EEHE�JEME�OERE�TEWE�YEQ[E�]EQ`E�bEQeE�gEQjE�lEQoE�qEQtE�vEQyE�{EQ~EрEQ�EхEQ�EъEQ�EяEQ�EєEQ�EљEQ�EўE��E�E��E�E��E�E��E�E��E�E��E��}�E��E�E��E�E��E�E��E�E��E�E��E�E��E�E��E�E��EQ�E��EQ�E��EQ�E��EQ�E�EQ�E�EQF�FQF�FQF�
FQF�FQF�FQF�FQF�!FQ$F�&FQ)F+F�-F0F�2F5F�7F:F�<F?F�AFDF�FFIF�KFNF�PFSF�UFXF��~�ZF]F�_FbF�dFgF�iFlF�nFQpF�rFQuF�wFQzF�|FQFсFQ�FцFQ�FыFQ�FѐFQ�FѕFQ�FњFQ�FџFQ�FѤFQ�FѩFQ�FѮFQ�FѳF��F�F��F�F��F�F��F�F��F�F��F�F��F�F��F�F��F�F��F�F��F�F��F�F��F�F��F���F�FQ�F�FQG�GQG�	GQG�GQG�GQG�GQG�GQ G�"GQ%G�'GQ*G�,GQ/G�1GQ4G�6GQ9G�;GQ>G@G�BGEG�GGJG�LGOG�QGTG�VGYG�[G^G�`GcG�eGhG�jGmG�oGrG�tGwG�yG|G�~G�G��GQ�GчGQ�GьGQ�GёGQ�G�ԀіGQ�GћGQ�GѠGQ�GѥGQ�GѪGQ�GѯGQ�GѴGQ�GѹGQ�GѾGQ�G��GQ�G��G��G�G��G�G��G�G��G�G��G�G��G�G��G�G��G�G��G�G��G�G��G�G�HH�H	H�HH�HQH�HQH�HQH�HQ!H�#HQ&H�(HQ+H�-HQ0H�2H��Q5H�7HQ:H�<HQ?H�AHQDH�FHQIH�KHQNH�PHQSHUH�WHZH�\H_H�aHdH�fHiH�kHnH�pHsH�uHxH�zH}H�H�H��H�H��H�H��H�H��H�H��HQ�HќHQ�HѡHQ�HѦHQ�HѫHQ�HѰHQ�HѵHQ�HѺHQ�HѿHQ�H��HQ�H��HQ�H��HQ�H����HQ�H��HQ�H��H��H�H��H�H��H�H��H�H��H�H��H�H��HI�II�I
I�II�II�II�II� I#I�$IQ'I�)IQ,I�.IQ1I�3IQ6I�8IQ;I�=IQ@I�BIQEI�GIQJI�LIQOI�QIQTI�VIQYI�[IQ^I�`IQcI�eIQhIjI�lIoI����qItI�vIyI�{I~I��I�I��I�I��I�I��I�I��I�I��I�I��I�I��I�I��I�I��IQ�IѱIQ�IѶIQ�IѻIQ�I�IQ�I��IQ�I��IQ�I��IQ�I��IQ�I��IQ�I��IQ�I��IQ�I��IQ�I��IQ�I��I��I�I��I�I��IJ�JJ�JJ�
J��J�JJ�JJ�JJ�!J$J�&J)J�+J.J�0J3J�5J8J�9JQ<J�>JQAJ�CJQFJ�HJQKJ�MJQPJ�RJQUJ�WJQZJ�\JQ_J�aJQdJ�fJQiJ�kJQnJ�pJQsJ�uJQxJ�zJQ}JJ��J�J��J�J��J�J��J�J��J�J��J�J��J�J��J�J��J�J����J�J��J�J��J�J��J�J��JQ�J��JQ�J��JQ�J��JQ�J��JQ�J��JQ�J��JQ�J��JQ�J��JQ�J��JQ�J��JQ�J�JQ�J�JQK�KQK�K�	KK�KK�KK�KK�K K�"K%K�'K*K�,K/K�1K4K�6K9K�;K>K�@KCK�EKHK�JK��MK�NKQQK�SKQVK�XKQ[K�]KQ`K�bKQeK�gKQjK�lKQoK�qKQtK�vKQyK�{KQ~KрKQ�KхKQ�KъKQ�KяKQ�K�K��K�K��K�K��K�K��K�K��K�K��K�K��K�K��K�K��K�K��K�K��K�K��K�K��K�K��KQ�K��KQ�K��KQ�K��KQ�K�(���KQ�K��KQ�K��KQ�K�KQ�K�KQL�LQL�LQL�
LQL�LQL�LQL�L�L!L�#L&L�(L+L�-L0L�2L5L�7L:L�<L?L�ALDL�FLIL�KLNL�PLSL�ULXL�ZL]L�_LbL�cLQfL�hLQkL�mLQpL�rLQuL�wLQzL�|LQLсLQ�LцL�4�Q�LыLQ�LѐLQ�LѕLQ�LњLQ�LџLQ�LѤLQ�L�L��L�L��L�L��L�L��L�L��L�L��L�L��L�L��L�L��L�L��L�L��L�L��L�L��L�L��LQ�L��LQ�L�LQ�L�LQ�L�LQM�MQM�	MQM�MQM�MQM�MQM�MQ M�"MQ%M�@��'MQ*M�,MQ/M�1M�3M6M�8M;M�=M@M�BMEM�GMJM�LMOM�QMTM�VMYM�[M^M�`McM�eMhM�jMmM�oMrM�tMwM�xMQ{M�}MQ�MтMQ�MчMQ�MьMQ�MёMQ�MіMQ�MћMQ�MѠMQ�MѥMQ�MѪMQ�MѯMQ�MѴMQ�MѹMQ�M�M��M�M�L���M�M��M�M��M�M��M�M��M�M��M�M��M�M��M�M��M�M��M�M��M�M��M�M�NQN�NQN�
NQ
N�NQN�NQN�NQN�NQ!N�#NQ&N�(NQ+N�-NQ0N�2NQ5N�7NQ:N�<NQ?N�ANQDN�FN�HNKN�MNPN�RNUN�WNZN�\N_N�aN�X�dN�fNiN�kNnN�pNsN�uNxN�zN}N�N�N��N�N��N�NэNQ�NђNQ�NїNQ�NќNQ�NѡNQ�NѦNQ�NѫNQ�NѰNQ�NѵNQ�NѺNQ�NѿNQ�N��NQ�N��NQ�N��NQ�N�N��N�N��N�N��N�N��N�N��N�N��N�N��N�N��N�N��NO�d��OO�O
O�OO�OO�OQO�OQO�OQ"O�$OQ'O�)OQ,O�.OQ1O�3OQ6O�8OQ;O�=OQ@O�BOQEO�GOQJO�LOQOO�QOQTO�VOQYO�[O�]O`O�bOeO�gOjO�lOoO�qOtO�vOyO�{O~O��O�O��O�O��O�O��O�O��O�O��O�O��O�p��OѢOQ�OѧOQ�OѬOQ�OѱOQ�OѶOQ�OѻOQ�O�OQ�O��OQ�O��OQ�O��OQ�O��OQ�O��OQ�O��OQ�O��OQ�O�O��O�O��O�O��O�O��O�O��OP�PP�PP�
PP�PP�PP�PP�!P$P�&P)P�+PQ-P�/PQ2P�4PQ7P�9PQ<P�|��>PQAP�CPQFP�HPQKP�MPQPP�RPQUP�WPQZP�\PQ_P�aPQdP�fPQiP�kPQnP�pP�rPuP�wPzP�|PP��P�P��P�P��P�P��P�P��P�P��P�P��P�P��P�P��P�P��P�P��P�PѷPQ�PѼPQ�P�PQ�P��PQ�P��PQ�P��PQ�P��PQ�P��P���Q�P��PQ�P��PQ�P��PQ�P��PQ�P��PQ�P�PQ�P�P��PQ�QQ�	QQ�QQ�QQ�QQ�Q Q�"Q%Q�'Q*Q�,Q/Q�1Q4Q�6Q9Q�;Q>Q�@QQBQ�DQQGQ�IQQLQ�NQQQQ�SQQVQ�XQQ[Q�]QQ`Q�bQQeQ�gQQjQ�lQQoQ�qQQtQ�vQQyQ����{QQ~QрQQ�QхQ��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��Q�Q��QQ�Q��QQ�Q��QQ�Q��QQ�Q��QQ�Q��QQ�Q��QQ�Q��QQ�Q��QQ�Q�QQ�Q�QQR�RQR�RQR�
RQRR�RR����RR�R!R�#R&R�(R+R�-R0R�2R5R�7R:R�<R?R�ARDR�FRIR�KRNR�PRSR�URQWR�YRQ\R�^RQaR�cRQfR�hRQkR�mRQpR�rRQuR�wRQzR�|RQRсRQ�RцRQ�RыRQ�RѐRQ�RѕRQ�RњR��R�R��R�R��R�R��R�R��R�R��R����R��R�R��R�R��R�R��R�R��R�R��R�R��R�R��R�R��RQ�R��RQ�R��RQ�R��RQ�R�RQ�R�RQ�R�RQS�SQS�	SQS�SQS�SQS�SQS�SQ S�"SQ%S'S�)S,S�.S1S�3S6S�8S;S�=S@S�BSES�GSJS�LSOS�QSTS����VSYS�[S^S�`ScS�eShS�jSQlS�nSQqS�sSQvS�xSQ{S�}SQ�SтSQ�SчSQ�SьSQ�SёSQ�SіSQ�SћSQ�SѠSQ�SѥSQ�SѪSQ�SѯS��S�S��S�S��S�S��S�S��S�S��S�S��S�S��S�S��S�S��S�S��S�S��S�S��S�S��S�ĕ�S�SQ�S�SQ�S�TQT�TQT�
TQ
T�TQT�TQT�TQT�TQ!T�#TQ&T�(TQ+T�-TQ0T�2TQ5T�7TQ:T<T�>TAT�CTFT�HTKT�MTPT�RTUT�WTZT�\T_T�aTdT�fTiT�kTnT�pTsT�uTxT�zT}T�TQ�TуTQ�TшTQ�TэTQ�T�ЖђTQ�TїTQ�TќTQ�TѡTQ�TѦTQ�TѫTQ�TѰTQ�TѵTQ�TѺTQ�TѿTQ�T��T��T�T��T�T��T�T��T�T��T�T��T�T��T�T��T�T��T�T��T�T��T�T��TU�UU�U
U�UQU�UQU�UQU�UQU�UQ"U�$UQ'U�)UQ,U�.U�ܗQ1U�3UQ6U�8UQ;U�=UQ@U�BUQEU�GUQJU�LUQOUQU�SUVU�XU[U�]U`U�bUeU�gUjU�lUoU�qUtU�vUyU�{U~U��U�U��U�U��U�U��U�U��UQ�UјUQ�UѝUQ�UѢUQ�UѧUQ�UѬUQ�UѱUQ�UѶUQ�UѻUQ�U�UQ�U��UQ�U��UQ�U����UQ�U��UQ�U��U��U�U��U�U��U�U��U�U��U�U��U�U��U�U��UV�VV�VV�
VV�VV�VV�VV� VQ#V�%VQ(V�*VQ-V�/VQ2V�4VQ7V�9VQ<V�>VQAV�CVQFV�HVQKV�MVQPV�RVQUV�WVQZV�\VQ_V�aVQdVfV�hVkV���mVpV�rVuV�wVzV�|VV��V�V��V�V��V�V��V�V��V�V��V�V��V�V��V�V��VQ�VѭVQ�VѲVQ�VѷVQ�VѼVQ�V�VQ�V��VQ�V��VQ�V��VQ�V��VQ�V��VQ�V��VQ�V��VQ�V��VQ�V��V��V�V��V�V��V�V��VW�WW�	W��W�WW�WW�WW�W W�"W%W�'W*W�,W/W�1W4W�5WQ8W�:WQ=W�?WQBW�DWQGW�IWQLW�NWQQW�SWQVW�XWQ[W�]WQ`W�bWQeW�gWQjW�lWQoW�qWQtW�vWQyW{W�}W�W��W�W��W�W��W�W��W�W��W�W��W�W��W�W��W�W����W�W��W�W��W�W��W�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W��WQ�W�WQ�W�WQX�X�XX�
X
X�XX�XX�XX�X!X�#X&X�(X+X�-X0X�2X5X�7X:X�<X?X�AXDX�FX��IX�JXQMX�OXQRX�TXQWX�YXQ\X�^XQaX�cXQfX�hXQkX�mXQpX�rXQuX�wXQzX�|XQXсXQ�XцXQ�XыXQ�X�X��X�X��X�X��X�X��X�X��X�X��X�X��X�X��X�X��X�X��X�X��X�X��X�X��X�X��XQ�X��XQ�X��XQ�X��XQ�X�$���XQ�X��XQ�X��XQ�X�XQ�X�XQ�X�XQY�YQY�	YQY�YQY�YQY�Y�YY�Y"Y�$Y'Y�)Y,Y�.Y1Y�3Y6Y�8Y;Y�=Y@Y�BYEY�GYJY�LYOY�QYTY�VYYY�[Y^Y�_YQbY�dYQgY�iYQlY�nYQqY�sYQvY�xYQ{Y�}YQ�YтY�0�Q�YчYQ�YьYQ�YёYQ�YіYQ�YћYQ�YѠYQ�Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��Y�Y��YQ�Y��YQ�Y��YQ�Y�YQ�Y�YQ�Y�ZQZ�ZQZ�
ZQ
Z�ZQZ�ZQZ�ZQZ�ZQ!Z�<��#ZQ&Z�(ZQ+Z�-Z�/Z2Z�4Z7Z�9Z<Z�>ZAZ�CZFZ�HZKZ�MZPZ�RZUZ�WZZZ�\Z_Z�aZdZ�fZiZ�kZnZ�pZsZ�tZQwZ�yZQ|Z�~ZQ�ZуZQ�ZшZQ�ZэZQ�ZђZQ�ZїZQ�ZќZQ�ZѡZQ�ZѦZQ�ZѫZQ�ZѰZQ�ZѵZQ�Z�Z��Z�Z�H���Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��Z�Z��ZQ�Z�[Q[�[Q	[�[Q[�[Q[�[Q[�[Q[�[Q"[�$[Q'[�)[Q,[�.[Q1[�3[Q6[�8[Q;[�=[Q@[�B[�D[G[�I[L[�N[Q[�S[V[�X[[[�][�T�`[�b[e[�g[j[�l[o[�q[t[�v[y[�{[~[��[�[��[�[щ[Q�[ю[Q�[ѓ[Q�[ј[Q�[ѝ[Q�[Ѣ[Q�[ѧ[Q�[Ѭ[Q�[ѱ[Q�[Ѷ[Q�[ѻ[Q�[�[Q�[��[Q�[��[Q�[�[��[�[��[�[��[�[��[�[��[�[��[�[��[�[��[�[��[�[�`���[\�\\�\\�
\\�\Q\�\Q\�\Q\� \Q#\�%\Q(\�*\Q-\�/\Q2\�4\Q7\�9\Q<\�>\QA\�C\QF\�H\QK\�M\QP\�R\QU\�W\�Y\\\�^\a\�c\f\�h\k\�m\p\�r\u\�w\z\�|\\��\�\��\�\��\�\��\�\��\�\��\�l��\ў\Q�\ѣ\Q�\Ѩ\Q�\ѭ\Q�\Ѳ\Q�\ѷ\Q�\Ѽ\Q�\�\Q�\��\Q�\��\Q�\��\Q�\��\Q�\��\Q�\��\Q�\�\��\�\��\�\��\�\��\�\��\�\��\]�]]�	]]�]]�]]�]]�] ]�"]%]�']Q)]�+]Q.]�0]Q3]�5]Q8]�x��:]Q=]�?]QB]�D]QG]�I]QL]�N]QQ]�S]QV]�X]Q[]�]]Q`]�b]Qe]�g]Qj]�l]�n]q]�s]v]�x]{]�}]�]��]�]��]�]��]�]��]�]��]�]��]�]��]�]��]�]��]�]��]�]ѳ]Q�]Ѹ]Q�]ѽ]Q�]��]Q�]��]Q�]��]Q�]��]Q�]��]���Q�]��]Q�]��]Q�]��]Q�]��]Q�]��]Q�]��]Q�]�]��]�]�^^�^^�
^
^�^^�^^�^^�^!^�#^&^�(^+^�-^0^�2^5^�7^:^�<^Q>^�@^QC^�E^QH^�J^QM^�O^QR^�T^QW^�Y^Q\^�^^Qa^�c^Qf^�h^Qk^�m^Qp^�r^Qu^����w^Qz^�|^Q^с^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^�^��^Q�^��^Q�^��^Q�^��^Q�^��^Q�^��^Q�^��^Q�^��^Q�^��^Q�^�^Q�^�^Q�^�^Q_�_Q_�	_Q__�__����g�h�i�j�k�l�mopq$r0s<tHuTv`wlxxy�z�{�|�}�~�̀؁������ �,�8�D�P�\�h�t�������������Ȗԗ�������(�4�@�L�X�d�p�|�����������__�__�_"_�$_'_�)_,_�._1_�3_6_�8_;_�=_@_�B_E_�G_J_�L_O_�Q_QS_�U_QX_�Z_Q]_�__Qb_�d_Qg_�i_Ql_�n_Qq_�s_Qv_�x_Q{_�}_Q�_т_Q�_ч_Q�_ь_Q�_ё_Q�_і_��_�_��_�_��_�_��_�_��_�_��_����_��_�_��_�_��_�_��_�_��_�_��_�_��_�_��_�_��_Q�_��_Q�_��_Q�_��_Q�_��_Q�_�_Q�_�_Q�_�`Q`�`Q`�
`Q
`�`Q`�`Q`�`Q`�`Q!`#`�%`(`�*`-`�/`2`�4`7`�9`<`�>`A`�C`F`�H`K`�M`P`����R`U`�W`Z`�\`_`�a`d`�f`Qh`�j`Qm`�o`Qr`�t`Qw`�y`Q|`�~`Q�`у`Q�`ш`Q�`э`Q�`ђ`Q�`ї`Q�`ќ`Q�`ѡ`Q�`Ѧ`Q�`ѫ`��`�`��`�`��`�`��`�`��`�`��`�`��`�`��`�`��`�`��`�`��`�`��`�`��`�`��`�̬�`��`Q�`�`Q�`�`Q�`�aQa�aQ	a�aQa�aQa�aQa�aQa�aQ"a�$aQ'a�)aQ,a�.aQ1a�3aQ6a8a�:a=a�?aBa�DaGa�IaLa�NaQa�SaVa�Xa[a�]a`a�baea�gaja�laoa�qata�vaya�{aQ}a�aQ�aфaQ�aщaQ�a�حюaQ�aѓaQ�aјaQ�aѝaQ�aѢaQ�aѧaQ�aѬaQ�aѱaQ�aѶaQ�aѻaQ�a�a��a�a��a�a��a�a��a�a��a�a��a�a��a�a��a�a��a�a��a�a��a�a��a�a��ab�bb�bQ
b�bQb�bQb�bQb�bQb� bQ#b�%bQ(b�*b��Q-b�/bQ2b�4bQ7b�9bQ<b�>bQAb�CbQFb�HbQKbMb�ObRb�TbWb�Yb\b�^bab�cbfb�hbkb�mbpb�rbub�wbzb�|bb��b�b��b�b��b�b��bQ�bєbQ�bљbQ�bўbQ�bѣbQ�bѨbQ�bѭbQ�bѲbQ�bѷbQ�bѼbQ�b�bQ�b��bQ�b����bQ�b��bQ�b��b��b�b��b�b��b�b��b�b��b�b��b�b��b�b��b�b��bc�cc�	cc�cc�cc�cc�cQc�!cQ$c�&cQ)c�+cQ.c�0cQ3c�5cQ8c�:cQ=c�?cQBc�DcQGc�IcQLc�NcQQc�ScQVc�XcQ[c�]cQ`cbc�dcgc����iclc�ncqc�scvc�xc{c�}c�c��c�c��c�c��c�c��c�c��c�c��c�c��c�c��cQ�cѩcQ�cѮcQ�cѳcQ�cѸcQ�cѽcQ�c��cQ�c��cQ�c��cQ�c��cQ�c��cQ�c��cQ�c��cQ�c��cQ�c��c��c�c��c�c��c�c��c�c�dd�d��d�
d
d�dd�dd�dd�d!d�#d&d�(d+d�-d0d�1dQ4d�6dQ9d�;dQ>d�@dQCd�EdQHd�JdQMd�OdQRd�TdQWd�YdQ\d�^dQad�cdQfd�hdQkd�mdQpd�rdQudwd�yd|d�~d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d����d�d��d�d��d�d��d�d��dQ�dѾdQ�d��dQ�d��dQ�d��dQ�d��dQ�d��dQ�d��dQ�d��dQ�d��dQ�d��dQ�d��dQ�d�dQ�d�dQ�d�d�ee�e	e�ee�ee�ee�ee�e"e�$e'e�)e,e�.e1e�3e6e�8e;e�=e@e�Be� �Ee�FeQIe�KeQNe�PeQSe�UeQXe�ZeQ]e�_eQbe�deQge�ieQle�neQqe�seQve�xeQ{e�}eQ�eтeQ�eчeQ�e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��eQ�e��eQ�e��eQ�e��eQ�e�,���eQ�e��eQ�e��eQ�e��eQ�e�eQ�e�eQ�e�fQf�fQf�
fQ
f�fQf�f�ff�ff� f#f�%f(f�*f-f�/f2f�4f7f�9f<f�>fAf�CfFf�HfKf�MfPf�RfUf�WfZf�[fQ^f�`fQcf�efQhf�jfQmf�ofQrf�tfQwf�yfQ|f�~f�8�Q�fуfQ�fшfQ�fэfQ�fђfQ�fїfQ�fќfQ�f�f��f�f��f�f��f�f��f�f��f�f��f�f��f�f��f�f��f�f��f�f��f�f��f�f��f�f��fQ�f��fQ�f��fQ�f��fQ�f�fQ�f�fQ�f�gQg�gQ	g�gQg�gQg�gQg�gQg�D��gQ"g�$gQ'g�)g�+g.g�0g3g�5g8g�:g=g�?gBg�DgGg�IgLg�NgQg�SgVg�Xg[g�]g`g�bgeg�ggjg�lgog�pgQsg�ugQxg�zgQ}g�gQ�gфgQ�gщgQ�gюgQ�gѓgQ�gјgQ�gѝgQ�gѢgQ�gѧgQ�gѬgQ�gѱgQ�g�g��g�g�P���g�g��g�g��g�g��g�g��g�g��g�g��g�g��g�g��g�g��g�g��g�g��g�g��gQ�g�gQh�hQh�hQ
h�hQh�hQh�hQh�hQh� hQ#h�%hQ(h�*hQ-h�/hQ2h�4hQ7h�9hQ<h�>h�@hCh�EhHh�JhMh�OhRh�ThWh�Yh�\�\h�^hah�chfh�hhkh�mhph�rhuh�whzh�|hh��h�hхhQ�hъhQ�hяhQ�hєhQ�hљhQ�hўhQ�hѣhQ�hѨhQ�hѭhQ�hѲhQ�hѷhQ�hѼhQ�h�hQ�h��hQ�h�h��h�h��h�h��h�h��h�h��h�h��h�h��h�h��h�h��h�h�h���h�h��hi�ii�	ii�iQi�iQi�iQi�iQi�!iQ$i�&iQ)i�+iQ.i�0iQ3i�5iQ8i�:iQ=i�?iQBi�DiQGi�IiQLi�NiQQi�Si�UiXi�Zi]i�_ibi�digi�iili�niqi�sivi�xi{i�}i�i��i�i��i�i��i�i��i�i��i�t��iњiQ�iџiQ�iѤiQ�iѩiQ�iѮiQ�iѳiQ�iѸiQ�iѽiQ�i��iQ�i��iQ�i��iQ�i��iQ�i��iQ�i��iQ�i�i��i�i��i�i��i�i��i�i��i�i��i�i�jj�jj�
j
j�jj�jj�jj�j!j�#jQ%j�'jQ*j�,jQ/j�1jQ4j����6jQ9j�;jQ>j�@jQCj�EjQHj�JjQMj�OjQRj�TjQWj�YjQ\j�^jQaj�cjQfj�hj�jjmj�ojrj�tjwj�yj|j�~j�j��j�j��j�j��j�j��j�j��j�j��j�j��j�j��j�j��j�jѯjQ�jѴjQ�jѹjQ�jѾjQ�j��jQ�j��jQ�j��jQ�j��j���Q�j��jQ�j��jQ�j��jQ�j��jQ�j��jQ�j��jQ�j�j��j�j��j�j�kk�k	k�kk�kk�kk�kk�k"k�$k'k�)k,k�.k1k�3k6k�8kQ:k�<kQ?k�AkQDk�FkQIk�KkQNk�PkQSk�UkQXk�ZkQ]k�_kQbk�dkQgk�ikQlk�nkQqk����skQvk�xkQ{k�}k�k�k��k�k��k�k��k�k��k�k��k�k��k�k��k�k��k�k��k�k��k�k��k�k��k�k��k�k��kQ�k��kQ�k��kQ�k��kQ�k��kQ�k��kQ�k��kQ�k��kQ�k��kQ�k��kQ�k�kQ�k�kQ�k�lQl�lQl
l�ll����ll�ll�ll� l#l�%l(l�*l-l�/l2l�4l7l�9l<l�>lAl�ClFl�HlKl�MlQOl�QlQTl�VlQYl�[lQ^l�`lQcl�elQhl�jlQml�olQrl�tlQwl�ylQ|l�~lQ�lуlQ�lшlQ�lэlQ�lђl��l�l��l�l��l�l��l�l��l�l��l����l��l�l��l�l��l�l��l�l��l�l��l�l��l�l��l�l��lQ�l��lQ�l��lQ�l��lQ�l��lQ�l��lQ�l�lQ�l�lQ�l�mQm�mQ	m�mQm�mQm�mQm�mQmm�!m$m�&m)m�+m.m�0m3m�5m8m�:m=m�?mBm�DmGm�ImLm����NmQm�SmVm�Xm[m�]m`m�bmQdm�fmQim�kmQnm�pmQsm�umQxm�zmQ}m�mQ�mфmQ�mщmQ�mюmQ�mѓmQ�mјmQ�mѝmQ�mѢmQ�mѧm��m�m��m�m��m�m��m�m��m�m��m�m��m�m��m�m��m�m��m�m��m�m��m�m��m�m��m����m��mQ�m��mQ�m�mQ�m�mQn�nQn�nQ
n�nQn�nQn�nQn�nQn� nQ#n�%nQ(n�*nQ-n�/nQ2n4n�6n9n�;n>n�@nCn�EnHn�JnMn�OnRn�TnWn�Yn\n�^nan�cnfn�hnkn�mnpn�rnun�wnQyn�{nQ~nрnQ�nхnQ�n���ъnQ�nяnQ�nєnQ�nљnQ�nўnQ�nѣnQ�nѨnQ�nѭnQ�nѲnQ�nѷnQ�nѼn��n�n��n�n��n�n��n�n��n�n��n�n��n�n��n�n��n�n��n�n��n�n��n�n��n�n��no�oQo�oQo�
oQo�oQo�oQo�oQo�!oQ$o�&o���Q)o�+oQ.o�0oQ3o�5oQ8o�:oQ=o�?oQBo�DoQGoIo�KoNo�PoSo�UoXo�Zo]o�_obo�dogo�iolo�noqo�sovo�xo{o�}o�o��o�o��o�o��oQ�oѐoQ�oѕoQ�oњoQ�oџoQ�oѤoQ�oѩoQ�oѮoQ�oѳoQ�oѸoQ�oѽoQ�o��oQ�o�����oQ�o��oQ�o��o��o�o��o�o��o�o��o�o��o�o��o�o��o�o��o�o��o�o�pp�pp�
p
p�pp�pp�pQp�pQ p�"pQ%p�'pQ*p�,pQ/p�1pQ4p�6pQ9p�;pQ>p�@pQCp�EpQHp�JpQMp�OpQRp�TpQWp�YpQ\p^p�`pcp����ephp�jpmp�oprp�tpwp�yp|p�~p�p��p�p��p�p��p�p��p�p��p�p��p�p��pQ�pѥpQ�pѪpQ�pѯpQ�pѴpQ�pѹpQ�pѾpQ�p��pQ�p��pQ�p��pQ�p��pQ�p��pQ�p��pQ�p��pQ�p��p��p�p��p�p��p�p��p�p��p�p�q��q�q	q�qq�qq�qq�qq�q"q�$q'q�)q,q�-qQ0q�2qQ5q�7qQ:q�<qQ?q�AqQDq�FqQIq�KqQNq�PqQSq�UqQXq�ZqQ]q�_qQbq�dqQgq�iqQlq�nqQqqsq�uqxq�zq}q�q�q��q�q��q�q��q�q��q�q��q�q��q�q���q��q�q��q�q��q�q��q�q��qQ�q��qQ�q��qQ�q��qQ�q��qQ�q��qQ�q��qQ�q��qQ�q��qQ�q�qQ�q�qQ�q�qQr�rQr�	r�����ĬЭܮ�����$�0�<�H�T�`�l�x���������������������������1���Q%r�&r�'r)rQ*r,r�-r/rQ0r�1r�2r4rQ5r�6r�7r9rQ:r�;r�<r>rQ?rS�H�QrQRr�Sr�TrVrQWr�Xr�Yr[rQ\r�]r�^r`r�����������P����	 �(�0�8���@������X���,`�8T@P��"�f��@����H��P����������$��������������������������F��ÀÁÂÃĀĂȦÄẢÅǍȀȂẠḀĄ=�H���h���ḂḄḆk�����h���ĆĈĊČÇ������h���ḊĎḌḐḒḎ�����h� �ÈÉÊẼĒĔĖËẺĚȄȆẸȨĘḘḚ��0�x�h���Ḟ!�����h���ǴĜḠĞĠǦĢ$�����h���ĤḢḦȞḤḨḪM����h��ÌÍÎĨĪĬİÏỈǏȈȊỊĮḬ|� �`�h�h�Ĵ��x���h���ḰǨḲĶḴ������h���ĹĽḶĻḼḺ������h���ḾṀṂ����h��ǸŃÑṄŇṆŅṊṈ=�$�L�h�T�ÒÓÔÕŌŎȮÖỎŐǑȌȎƠỌǪq�d���h���ṔṖ������h���ŔṘŘȐȒṚŖṞ�����h��ŚŜṠŠṢȘŞ�� �@�h�H�ṪŤṬȚŢṰṮ�X�x�h���ÙÚÛŨŪŬÜỦŮŰǓȔȖƯỤṲŲṶṴ.�����h���ṼṾa����h��ẀẂŴẆẄẈ���8�h�@�ẊẌ��P�\�h�d�ỲÝŶỸȲẎŸỶỴ��t���h���ŹẐŻŽẒẔ������h���àáâãāăȧäảåǎȁȃạḁą=���,�h�4�ḃḅḇk�D�T�h�\�ćĉċčç��l���h���ḋďḍḑḓḏ������h���èéêẽēĕėëẻěȅȇẹȩęḙḛ�����h� �ḟ!�0�8�h�@�ǵĝḡğġǧģ$�P�p�h�x�ĥḣḧȟḥḩḫẖ�����h���ìíîĩīĭïỉǐȉȋịįḭ9����h��ĵǰl��$�h�,�ḱǩḳķḵ��<�T�h�\�ĺľḷļḽḻ��l���h���ḿṁṃ�����h���ǹńñṅňṇņṋṉ=�����h���òóôõōŏȯöỏőǒȍȏơọǫq��L�h�T�ṕṗ��d�p�h�x�ŕṙřȑȓṛŗṟ������h���śŝṡšṣșş������h���ṫẗťṭțţṱṯy��� �h�(�ùúûũūŭüủůűǔȕȗưụṳųṷṵ.�8���h���ṽṿa�����h���ẁẃŵẇẅẘẉ������h���ẋẍ�����h��ỳýŷỹȳẏÿỷẙỵ�� �L�h�T�źẑżžẓẕ��d���h���῭΅����῁������������������ẦẤẪẨ������h���Ǟ	���h��Ǻ�,�4�h�<�ǼǢ�L�X�h�`�Ḉ�p�x�h���ỀẾỄỂ������h���Ḯ�����h���ỒỐỖỔ������h���ṌȬṎ���h� �Ȫ	�0�8�h�@�Ǿ�P�X�h�`�ǛǗǕǙ�p���h���ầấẫẩ������h���ǟ	�����h���ǻ�����h���ǽǣ���h��ḉ�,�4�h�<�ềếễể��L�`�h�h�ḯ�x���h���ồốỗổ������h���ṍȭṏ�����h���ȫ	�����h���ǿ���h��ǜǘǖǚ�,�@�h�H��$�D�h��������(�H�h��������$�D�p��������$�P�.�X�ẰẮẴẲ������h���ằắẵẳ�����h��ḔḖ���(�h�0�ḕḗ��@�L�h�T����8�\�k�d�ṐṒ������h���ṑṓ������h���Ṥ!�����h���ṥ!�����h���Ṧ!���h��ṧ!�(�0�h�8�Ṹ�H�P�h�X�ṹ�h�p�h�x�Ṻ�����h���ṻ�����h���ẛ!�����h���������� �@�`�������������ỜỚỠỞỢ�� �8�h�@�ờớỡởợ��P�h�h�p�ỪỨỮỬỰ������h���ừứữửự������h���Ǯ������h���H�x����������Ǭ	� �(�h�0�ǭ	�@�H�h�P�8�X���`�Ǡ	�t�|�h���ǡ	�����h���Ḝ������h���ḝ������h���Ȱ	�����h��ȱ	���h�$����������,��4�ǯ��X�`�h�h�p��x�ᾺΆᾹᾸἈἉ���ᾼ(�����������ῈΈἘἙ+�����h���ῊΉἨἩ+���ῌ(��� ���(�ῚΊῙῘΪἸἹB�<�\�h�d�ῸΌὈὉ+�t���h���ῬY�����h���ῪΎῩῨΫὙ\�����h���ῺΏὨὩ+���ῼ(������ �ᾴ(�4�<�s�D�ῄ(�T�\�s�d�ὰάᾱᾰἀἁ�t�ᾶᾳv�����������ὲέἐἑ+�����h���ὴήἠἡ+���ῆῃv�������ὶίῑῐϊἰἱB�0�ῖ��X�P�`���h�ὸόὀὁ+�|���h�������4�l�������,�L�l�����(�t���|���ῤῥ������h��ὺύῡῠϋὐὑB��ῦ��<�4�D���L�ὼώὠὡ+�`�ῶῳv�|�t�������ῒ����ῗ������������ῢ����ῧ������������ῴ(���s��ϓϔ��,�8�h�@��X������$�H���P�Ї�x���h���ӐӒ������h���Ѓ�����h���ЀӖЁ������h���ӁӜ����h��Ӟ�(�0�h�8�ЍӢЙӤ��H�\�h�d�Ќ�t�|�h���Ӧ�����h���ӮЎӰӲ������h���Ӵ�����h���Ӹ���h��Ӭ� �(�h�0�ӑӓ��@�L�h�T�ѓ�d�l�h�t�ѐӗё������h���ӂӝ������h���ӟ�����h���ѝӣйӥ�����h��ќ��$�h�,�ӧ�<�D�h�L��������� �@�l����������8�\�|��������4�T���\�ӯўӱӳ������h���ӵ�����h���ӹ���h��ӭ�(�0�h�8�ї�H�P�h�X�Ѷ2�h�p�h�x�ѷ2�����h������ �@�`�����5���Ӛ�����h���ӛ�����h��Ӫ���h� �ӫ�0�8�h�@����(�H�j�P�آأإ~�l�|�����������ؤY���������ئY�����������������ۂY�������ۓY�� ���(�ۀY�8�@���H��0�P���X�ऩ��p�x�����������ऱ����������������ऴ�������������������������ো���ৌ��(� �0���8�D���L�T�!�\�ୋ��l�ୈୌ��|�t���������������!���ஔ���������������������ொ���ௌ�������$�0���8�ோ��H�P���X�`���h�@�p���x�ై����������������������ೀ����������������������ೊೇೈ������$�,���4�ೋ��D�L���T�\���d�<�l��t�ൊ����ൌ��������	���������ോ������
�����������������ේොෞ�� �(�(�0���8�ෝ+�H�P�(�X�`���h�@�p�.�x��d���������������4���ဦ������������J�����M���가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기P��X�(�`�h�J�p�까깨꺄꺠꺼께껴꼐꼬꽈꽤꾀꾜꾸꿔꿰뀌뀨끄끠끼P�����(�����J���나내냐냬너네녀녜노놔놰뇌뇨누눠눼뉘뉴느늬니P��X�(�`�h�J�p�다대댜댸더데뎌뎨도돠돼되됴두둬뒈뒤듀드듸디P�����(�����J���따때땨떄떠떼뗘뗴또똬뙈뙤뚀뚜뚸뛔뛰뜌뜨띄띠P��X�(�`�h�J�p�라래랴럐러레려례로롸뢔뢰료루뤄뤠뤼류르릐리P�����(�����J���마매먀먜머메며몌모뫄뫠뫼묘무뭐뭬뮈뮤므믜미P��X�(�`�h�J�p�바배뱌뱨버베벼볘보봐봬뵈뵤부붜붸뷔뷰브븨비P�����(�����J���빠빼뺘뺴뻐뻬뼈뼤뽀뽜뽸뾔뾰뿌뿨쀄쀠쀼쁘쁴삐P��X�(�`�h�J�p�사새샤섀서세셔셰소솨쇄쇠쇼수숴쉐쉬슈스싀시P����(���J��싸쌔쌰썌써쎄쎠쎼쏘쏴쐐쐬쑈쑤쒀쒜쒸쓔쓰씌씨P��X�(�`�h�J�p�아애야얘어에여예오와왜외요우워웨위유으의이P����(���J��자재쟈쟤저제져졔조좌좨죄죠주줘줴쥐쥬즈즤지P��X�(�`�h�J�p�짜째쨔쨰쩌쩨쪄쪠쪼쫘쫴쬐쬬쭈쭤쮀쮜쮸쯔쯰찌P����(���J��차채챠챼처체쳐쳬초촤쵀최쵸추춰췌취츄츠츼치P��X�(�`�h�J�p�카캐캬컈커케켜켸코콰쾌쾨쿄쿠쿼퀘퀴큐크킈키P����(���J��타태탸턔터테텨톄토톼퇘퇴툐투퉈퉤튀튜트틔티P��X�(�`�h�J�p�파패퍄퍠퍼페펴폐포퐈퐤푀표푸풔풰퓌퓨프픠피P����(���J��하해햐햬허헤혀혜호화홰회효후훠훼휘휴흐희히P��X�(�`�h�J�p�x���x���x���x���x���x���x���x���x���x�g���Ḹ	���h��ḹ	����h����|��Ṝ	�,�4�h�<�ṝ	�L�T�h�\�Ṩ!�l�t�h�|�ṩ!�����h���D�d���������ẬẶ����h��ậặ�����h��Ệ����h� �ệ��0�8�h�@���(�H���P�Ộ��l�t�h�|�ộ������h�����������ἂἄ����ἆᾀv�������ἃἅ����ἇᾁv������$�ᾂ(�8�@�s�H�ᾃ(�X�`�s�h�ᾄ(�x���s���ᾅ(�����s���ᾆ(�����s��ᾇ(���s��ἊἌ����Ἆᾈv������ �ἋἍ��4�Ἇᾉv�H�@�T���\�ᾊ(�p�x�s���ᾋ(�����s���ᾌ(�����s���ᾍ(���s��ᾎ(����s��ᾏ(���s� �ἒἔ��0�<�h�D�ἓἕ��T�`�h�h�ἚἜ��x���h���ἛἝ������h���ἢἤ����ἦᾐv�������ἣἥ����ἧᾑv���$ᾒ(�8@s�Hᾓ(�X`s�hᾔ(�x�s��ᾕ(���s��ᾖ(���s��ᾗ(���s��ἪἬ���Ἦᾘv��� ἫἭ��4Ἧᾙv�H@T��\ᾚ(�pxs��ᾛ(���s��ᾜ(���s��ᾝ(���s��ᾞ(���s�ᾟ(�s� ἲἴ��0ἶ��D<L��Tἳἵ��hἷ��|t����ἺἼ���Ἶ��������ἻἽ���Ἷ���������0�P�p�������,�h��������(�L�p������0Pp����,h����(`����ὂὄ����h��ὃὅ����h��ὊὌ��h�ὋὍ��(4h�<ὒὔ��Lὖ��`Xh��pὓὕ���ὗ��������ὛὝ���Ὗ��������ὢὤ���ὦᾠv���ὣὥ��0ὧᾡv�D<P��Xᾢ(�lts�|ᾣ(���s��ᾤ(���s��ᾥ(���s��ᾦ(���s��ᾧ(�s�ὪὬ��,Ὦᾨv�@8L��TὫὭ��hὯᾩv�|t����ᾪ(���s��ᾫ(���s��ᾬ(���s��ᾭ(�s�ᾮ(�$,s�4ᾯ(�DLs�Tᾲ(�dls�tῂ(���s��ῲ(���s���� D|��(d����$`����<\|�����ᾷ(�8@s�H῍῎��X῏��ldt��|P�.��ῇ(���s��ῷ(���s��῝῞���῟����	��	��	:�	���$���d����0�,	u�4	ゔ��h	p	��x	�	���	が���	�	���	�	���	ぎ���	�	���	�	���	ぐ���	
��

��
げ��(
0
��8
@
��H
ご��X
`
��h
p
��x
ざ���
�
���
�
���
じ���
�
���
�
���
ず���
�
���
��ぜ�� ��(0��8ぞ��HP��X`��hだ��x��������ぢ�����������づ�����������で���� ��(ど��8@��HP��Xばぱ��ht��|����びぴ�����������ぶぷ�����������べぺ��

��
 
��(
ぼぽ��8
D
��L
T
��\
�	�	�	 
P
�
�
�
@p��0`���0
d
��l
ゞ���
�
���
�
���
ヴ���
����ガ��,4��<D��Lギ��\d��lt��|グ�����������ゲ�����������ゴ���������ザ��$��,4��<ジ��LT��\d��lズ��|��������ゼ�����������ゾ�����������ダ����$��,�
$T���Dt��4��<ヂ��|��������ヅ�����������デ�����������ド����$��,バパ��<H��PX��`ビピ��p|�������ブプ�����������ベペ�����������ボポ���� (��0ヷ��@H��PX��`ヸ��px�������ヹ�����������ヺ�����������ヾ������ ��4h��8h���(�0�
tl]�t각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘b��같갚갛|�����J�$객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴b�4갵갶갷|��������J��갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐b��걑걒걓|�H@X��`lJ�t,�|���걕걖걗걘걙걚걛걜걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬b��걭걮걯|��� ,J�4걱걲걳건걵걶걷걸걹걺걻걼걽걾걿검겁겂것겄겅겆겇겈b�D겉겊겋|��������J��<����겍겎겏겐겑겒겓겔겕겖겗겘겙겚겛겜겝겞겟겠겡겢겣겤b�겥겦겧|�ld|����J��격겪겫견겭겮겯결겱겲겳겴겵겶겷겸겹겺겻겼경겾겿곀b��곁곂곃|�$��,8J�@�H��P곅곆곇곈곉곊곋곌곍곎곏곐곑곒곓곔곕곖곗곘곙곚곛곜b�d곝곞곟|��������J��곡곢곣곤곥곦곧골곩곪곫곬곭곮곯곰곱곲곳곴공곶곷곸b�곹곺곻|�xp�����J��곽곾곿관괁괂괃괄괅괆괇괈괉괊괋괌괍괎괏괐광괒괓괔b��괕괖괗|� 0��8DJ�L�T��\괙괚괛괜괝괞괟괠괡괢괣괤괥괦괧괨괩괪괫괬괭괮괯괰b�t괱괲괳|�������J�괵괶괷괸괹괺괻괼괽괾괿굀굁굂굃굄굅굆굇굈굉굊굋굌b�굍굎굏|��������J���5��굑굒굓굔굕굖굗굘굙굚굛굜굝굞굟굠굡굢굣굤굥굦굧굨b��굩굪굫|�D<T��\hJ�p국굮굯군굱굲굳굴굵굶굷굸굹굺굻굼굽굾굿궀궁궂궃궄b��궅궆궇|������J�x T�(궉궊궋권궍궎궏궐궑궒궓궔궕궖궗궘궙궚궛궜궝궞궟궠b�<궡궢궣|��������J��궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궷궸궹궺궻궼b��궽궾궿|�PH`��htJ�|��s��귁귂귃귄귅귆귇귈귉귊귋귌귍귎귏귐귑귒귓귔귕귖귗귘b��귙귚귛|���$0J�8귝귞귟균귡귢귣귤귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴b�H귵귶귷|��������J��극귺귻근귽귾귿글긁긂긃긄긅긆긇금급긊긋긌긍긎긏긐b��긑긒긓|�\ T l ��t � J�� @�� ��� 긕긖긗긘긙긚긛긜긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬b�� 긭긮긯|�!!,!��4!@!J�H!긱긲긳긴긵긶긷길긹긺긻긼긽긾긿김깁깂깃깄깅깆깇깈b�X!깉깊깋|��!�!�!���!�!J��!P!�!��"깍깎깏깐깑깒깓깔깕깖깗깘깙깚깛깜깝깞깟깠깡깢깣깤b�"깥깦깧|��"x"�"���"�"J��"깩깪깫깬깭깮깯깰깱깲깳깴깵깶깷깸깹깺깻깼깽깾깿꺀b��"꺁꺂꺃|�(# #8#��@#L#J�T#�"\#��d#꺅꺆꺇꺈꺉꺊꺋꺌꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜b�x#꺝꺞꺟|��#�#�#���#$J�$꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸b� $꺹꺺꺻|��$�$�$���$�$J��$꺽꺾꺿껀껁껂껃껄껅껆껇껈껉껊껋껌껍껎껏껐껑껒껓껔b��$껕껖껗|�4%,%D%��L%X%J�`%$�$h%��p%껙껚껛껜껝껞껟껠껡껢껣껤껥껦껧껨껩껪껫껬껭껮껯껰b��%껱껲껳|��%�%&��&&J� &껵껶껷껸껹껺껻껼껽껾껿꼀꼁꼂꼃꼄꼅꼆꼇꼈꼉꼊꼋꼌b�0&꼍꼎꼏|��&�&�&���&�&J��&(&�&5��&꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣꼤꼥꼦꼧꼨b��&꼩꼪꼫|�X'P'h'��p'|'J��'꼭꼮꼯꼰꼱꼲꼳꼴꼵꼶꼷꼸꼹꼺꼻꼼꼽꼾꼿꽀꽁꽂꽃꽄b��'꽅꽆꽇|�(�'(��($(J�,(�'4(T�<(꽉꽊꽋꽌꽍꽎꽏꽐꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽜꽝꽞꽟꽠b�P(꽡꽢꽣|��(�(�(���(�(J��(꽥꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽹꽺꽻꽼b��(꽽꽾꽿|�d)\)t)��|)�)J��)�(�)s��)꾁꾂꾃꾄꾅꾆꾇꾈꾉꾊꾋꾌꾍꾎꾏꾐꾑꾒꾓꾔꾕꾖꾗꾘b��)꾙꾚꾛|� **0*��8*D*J�L*꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴b�\*꾵꾶꾷|��*�*�*���*�*J��*꾹꾺꾻꾼꾽꾾꾿꿀꿁꿂꿃꿄꿅꿆꿇꿈꿉꿊꿋꿌꿍꿎꿏꿐b�+꿑꿒꿓|�p+h+�+���+�+J��+T*�*�+���+꿕꿖꿗꿘꿙꿚꿛꿜꿝꿞꿟꿠꿡꿢꿣꿤꿥꿦꿧꿨꿩꿪꿫꿬b��+꿭꿮꿯|�0,(,@,��H,T,J�\,꿱꿲꿳꿴꿵꿶꿷꿸꿹꿺꿻꿼꿽꿾꿿뀀뀁뀂뀃뀄뀅뀆뀇뀈b�l,뀉뀊뀋|��,�,�,���,�,J�-d,-��-��\l�4�� "p#�%�&H(�)�+ -��(-뀍뀎뀏뀐뀑뀒뀓뀔뀕뀖뀗뀘뀙뀚뀛뀜뀝뀞뀟뀠뀡뀢뀣뀤b�t-뀥뀦뀧|��-�-�-���-.J�.뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀b�.끁끂끃|��.�.�.���.�.J��..�.���.끅끆끇끈끉끊끋끌끍끎끏끐끑끒끓끔끕끖끗끘끙끚끛끜b��.끝끞끟|�D/</T/��\/h/J�p/끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸b��/끹끺끻|��/�/�/��00J�0끽끾끿낀낁낂낃낄낅낆낇낈낉낊낋낌낍낎낏낐낑낒낓낔b�(0낕낖낗|��0�0�0���0�0J��0x/ 0�0���0낙낚낛난낝낞낟날낡낢낣낤낥낦낧남납낪낫났낭낮낯낰b��0낱낲낳|�T1L1d1��l1x1J��1낵낶낷낸낹낺낻낼낽낾낿냀냁냂냃냄냅냆냇냈냉냊냋냌b��1냍냎냏|��1�12��2 2J�(2�1025�82냑냒냓냔냕냖냗냘냙냚냛냜냝냞냟냠냡냢냣냤냥냦냧냨b�L2냩냪냫|��2�2�2���2�2J��2냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄b��2넅넆넇|�`3X3p3��x3�3J��3�2�3T��3넉넊넋넌넍넎넏널넑넒넓넔넕넖넗넘넙넚넛넜넝넞넟넠b��3넡넢넣|�44,4��44@4J�H4넥넦넧넨넩넪넫넬넭넮넯넰넱넲넳넴넵넶넷넸넹넺넻넼b�X4넽넾넿|��4�4�4���4�4J��4P4�4s�5녁녂녃년녅녆녇녈녉녊녋녌녍녎녏념녑녒녓녔녕녖녗녘b�5녙녚녛|��5x5�5���5�5J��5녝녞녟녠녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴b��5녵녶녷|�(6 686��@6L6J�T6녹녺녻논녽녾녿놀놁놂놃놄놅놆놇놈놉놊놋놌농놎놏놐b�d6놑높놓|��6�6�6���6�6J��6�5\67��7놕놖놗놘놙놚놛놜놝놞놟놠놡놢놣놤놥놦놧놨놩놪놫놬b�$7놭놮놯|��7�7�7���7�7J��7놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈b��7뇉뇊뇋|�8808H8��P8\8J�d8�7l8��t8뇍뇎뇏뇐뇑뇒뇓뇔뇕뇖뇗뇘뇙뇚뇛뇜뇝뇞뇟뇠뇡뇢뇣뇤b��8뇥뇦뇧|��8�89��99J� 9뇩뇪뇫뇬뇭뇮뇯뇰뇱뇲뇳뇴뇵뇶뇷뇸뇹뇺뇻뇼뇽뇾뇿눀b�09눁눂눃|��9�9�9���9�9J��9(9�9���9눅눆눇눈눉눊눋눌눍눎눏눐눑눒눓눔눕눖눗눘눙눚눛눜b��9눝눞눟|�X:P:h:��p:|:J��:눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눴눵눶눷눸b��:눹눺눻|�;�:;��;$;J�,;눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔b�<;뉕뉖뉗|��;�;�;���;�;J��;�:4;�;���;뉙뉚뉛뉜뉝뉞뉟뉠뉡뉢뉣뉤뉥뉦뉧뉨뉩뉪뉫뉬뉭뉮뉯뉰b��;뉱뉲뉳|�h<`<x<���<�<J��<뉵뉶뉷뉸뉹뉺뉻뉼뉽뉾뉿늀늁늂늃늄늅늆늇늈늉늊늋늌b��<늍늎늏|�== =��(=4=J�<=�<D=5�L=늑늒늓는늕늖늗늘늙늚늛늜늝늞늟늠늡늢늣늤능늦늧늨b�`=늩늪늫|��=�=�=���=�=J��=늭늮늯늰늱늲늳늴늵늶늷늸늹늺늻늼늽늾늿닀닁닂닃닄b�>닅닆닇|�t>l>�>���>�>J��>>�>T��>닉닊닋닌닍닎닏닐닑닒닓닔닕닖닗님닙닚닛닜닝닞닟닠b��>닡닢닣|�0?(?@?��H?T?J�\?닥닦닧단닩닪닫달닭닮닯닰닱닲닳담답닶닷닸당닺닻닼b�l?닽닾닿|��?�?�?���?�?J�@d?@s�@댁댂댃댄댅댆댇댈댉댊댋댌댍댎댏댐댑댒댓댔댕댖댗댘b�(@댙댚댛|��@�@�@���@�@J��@댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴b��@댵댶댷|�<A4ALA��TA`AJ�hA댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐b�xA덑덒덓|��A�A�A���ABJ�B�@pAB�� B덕덖덗던덙덚덛덜덝덞덟덠덡덢덣덤덥덦덧덨덩덪덫덬b�8B덭덮덯|��B�B�B���B�BJ��B덱덲덳덴덵덶덷델덹덺덻덼덽덾덿뎀뎁뎂뎃뎄뎅뎆뎇뎈b��B뎉뎊뎋|�LCDC\C��dCpCJ�xC�B�C���C뎍뎎뎏뎐뎑뎒뎓뎔뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎠뎡뎢뎣뎤b��C뎥뎦뎧|�DDD�� D,DJ�4D뎩뎪뎫뎬뎭뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀b�DD돁돂돃|��D�D�D���D�DJ��D<D�D���D독돆돇돈돉돊돋돌돍돎돏돐돑돒돓돔돕돖돗돘동돚돛돜b�E돝돞돟|�lEdE|E���E�EJ��E돡돢돣돤돥돦돧돨돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸b��E돹돺돻|�FF$F��,F8FJ�@F돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됐됑됒됓됔b�PF됕됖됗|��F�F�F���F�FJ��F�EHF�F���F됙됚됛된됝됞됟될됡됢됣됤됥됦됧됨됩됪됫됬됭됮됯됰b�G됱됲됳|�|GtG�G���G�GJ��G됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄둅둆둇둈둉둊둋둌b��G둍둎둏|�$HH4H��<HHHJ�PH�GXH5�`H둑둒둓둔둕둖둗둘둙둚둛둜둝둞둟둠둡둢둣둤둥둦둧둨b�tH둩둪둫|��H�H�H���HIJ�I둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒀뒁뒂뒃뒄b�I뒅뒆뒇|��I�I�I���I�IJ��II�IT��I뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒝뒞뒟뒠b��I뒡뒢뒣|�DJ<JTJ��\JhJJ�pJ뒥뒦뒧뒨뒩뒪뒫뒬뒭뒮뒯뒰뒱뒲뒳뒴뒵뒶뒷뒸뒹뒺뒻뒼b��J뒽뒾뒿|��J�J�J��KKJ�KxJ Ks�(K듁듂듃듄듅듆듇듈듉듊듋듌듍듎듏듐듑듒듓듔듕듖듗듘b�<K듙듚듛|��K�K�K���K�KJ��K득듞듟든듡듢듣들듥듦듧듨듩듪듫듬듭듮듯듰등듲듳듴b��K듵듶듷|�PLHL`L��hLtLJ�|L듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐b��L딑딒딓|��L�LM��MMJ�$M�K�L,M��4M딕딖딗딘딙딚딛딜딝딞딟딠딡딢딣딤딥딦딧딨딩딪딫딬b�LM딭딮딯|��M�M�M���M�MJ��M딱딲딳딴딵딶딷딸딹딺딻딼딽딾딿땀땁땂땃땄땅땆땇땈b��M땉땊땋|�`NXNpN��xN�NJ��N�M�N���N땍땎땏땐땑땒땓땔땕땖땗땘땙땚땛땜땝땞땟땠땡땢땣땤b��N땥땦땧|�OO,O��4O@OJ�HO땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀b�XO떁떂떃|��O�O�O���O�OJ��OPO�O��P떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜b�P떝떞떟|��PxP�P���P�PJ��P떡떢떣떤떥떦떧떨떩떪떫떬떭떮떯떰떱떲떳떴떵떶떷떸b��P떹떺떻|�(Q Q8Q��@QLQJ�TQ떽떾떿뗀뗁뗂뗃뗄뗅뗆뗇뗈뗉뗊뗋뗌뗍뗎뗏뗐뗑뗒뗓뗔b�dQ뗕뗖뗗|��Q�Q�Q���Q�QJ��Q�P\QR��R뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗬뗭뗮뗯뗰b�$R뗱뗲뗳|��R�R�R���R�RJ��R뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿똀똁똂똃똄똅똆똇똈똉똊똋똌b��R똍똎똏|�8S0SHS��PS\SJ�dS�RlS5�tS똑똒똓똔똕똖똗똘똙똚똛똜똝똞똟똠똡똢똣똤똥똦똧똨b��S똩똪똫|��S�ST��TTJ� T똭똮똯똰똱똲똳똴똵똶똷똸똹똺똻똼똽똾똿뙀뙁뙂뙃뙄b�0T뙅뙆뙇|��T�T�T���T�TJ��T(T�TT��T뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠b��T뙡뙢뙣|�XUPUhU��pU|UJ��U뙥뙦뙧뙨뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼b��U뙽뙾뙿|�V�UV��V$VJ�,V�U4Vs�<V뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘b�PV뚙뚚뚛|��V�V�V���V�VJ��V뚝뚞뚟뚠뚡뚢뚣뚤뚥뚦뚧뚨뚩뚪뚫뚬뚭뚮뚯뚰뚱뚲뚳뚴b��V뚵뚶뚷|�dW\WtW��|W�WJ��W뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐b��W뛑뛒뛓|�XXX��$X0XJ�8X�V�W@X��HX뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬b�`X뛭뛮뛯|��X�X�X���X�XJ��X뛱뛲뛳뛴뛵뛶뛷뛸뛹뛺뛻뛼뛽뛾뛿뜀뜁뜂뜃뜄뜅뜆뜇뜈b�Y뜉뜊뜋|�tYlY�Y���Y�YJ��YY�Y���Y뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤b��Y뜥뜦뜧|�0Z(Z@Z��HZTZJ�\Z뜩뜪뜫뜬뜭뜮뜯뜰뜱뜲뜳뜴뜵뜶뜷뜸뜹뜺뜻뜼뜽뜾뜿띀b�lZ띁띂띃|��Z�Z�Z���Z�ZJ�[dZ[��[띅띆띇띈띉띊띋띌띍띎띏띐띑띒띓띔띕띖띗띘띙띚띛띜b�([띝띞띟|��[�[�[���[�[J��[띡띢띣띤띥띦띧띨띩띪띫띬띭띮띯띰띱띲띳띴띵띶띷띸b��[띹띺띻|�<\4\L\��T\`\J�h\락띾띿란랁랂랃랄랅랆랇랈랉랊랋람랍랎랏랐랑랒랓랔b�x\랕랖랗|��\�\�\���\]J�]�[p\]�� ]랙랚랛랜랝랞랟랠랡랢랣랤랥랦랧램랩랪랫랬랭랮랯랰b�8]랱랲랳|��]�]�]���]�]J��]략랶랷랸랹랺랻랼랽랾랿럀럁럂럃럄럅럆럇럈량럊럋럌b��]럍럎럏|�L^D^\^��d^p^J�x^�]�^5��^럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟럠럡럢럣럤럥럦럧럨b��^럩럪럫|�___�� _,_J�4_럭럮럯런럱럲럳럴럵럶럷럸럹럺럻럼럽럾럿렀렁렂렃렄b�D_렅렆렇|��_�_�_���_�_J��_<_�_T��_렉렊렋렌렍렎렏렐렑렒렓렔렕렖렗렘렙렚렛렜렝렞렟렠b�`렡렢렣|�l`d`|`���`�`J��`력렦렧련렩렪렫렬렭렮렯렰렱렲렳렴렵렶렷렸령렺렻렼b��`렽렾렿|�aa$a��,a8aJ�@a�`Has�Pa롁롂롃롄롅롆롇롈롉롊롋롌롍롎롏롐롑롒롓롔롕롖롗롘b�da롙롚롛|��a�a�a���a�aJ��a록롞롟론롡롢롣롤롥롦롧롨롩롪롫롬롭롮롯롰롱롲롳롴b�b롵롶롷|�xbpb�b���b�bJ��b롹롺롻롼롽롾롿뢀뢁뢂뢃뢄뢅뢆뢇뢈뢉뢊뢋뢌뢍뢎뢏뢐b��b뢑뢒뢓|� cc0c��8cDcJ�Lcb�bTc��\c뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟뢠뢡뢢뢣뢤뢥뢦뢧뢨뢩뢪뢫뢬b�tc뢭뢮뢯|��c�c�c���cdJ�d뢱뢲뢳뢴뢵뢶뢷뢸뢹뢺뢻뢼뢽뢾뢿룀룁룂룃룄룅룆룇룈b�d룉룊룋|��d�d�d���d�dJ��dd�d���d룍룎룏룐룑룒룓룔룕룖룗룘룙룚룛룜룝룞룟룠룡룢룣룤b��d룥룦룧|�De<eTe��\eheJ�pe룩룪룫룬룭룮룯룰룱룲룳룴룵룶룷룸룹룺룻룼룽룾룿뤀b��e뤁뤂뤃|��e�e�e��ffJ�fxe f��(f뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤘뤙뤚뤛뤜b�<f뤝뤞뤟|��f�f�f���f�fJ��f뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸b��f뤹뤺뤻|�PgHg`g��hgtgJ�|g뤽뤾뤿륀륁륂륃륄륅륆륇륈륉륊륋륌륍륎륏륐륑륒륓륔b��g륕륖륗|��g�gh��hhJ�$h�f�g,h��4h륙륚륛륜륝륞륟률륡륢륣륤륥륦륧륨륩륪륫륬륭륮륯륰b�Lh륱륲륳|��h�h�h���h�hJ��h륵륶륷른륹륺륻를륽륾륿릀릁릂릃름릅릆릇릈릉릊릋릌b��h릍릎릏|�`iXipi��xi�iJ��i�h�i5��i릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟릠릡릢릣릤릥릦릧릨b��i릩릪릫|�jj,j��4j@jJ�Hj릭릮릯린릱릲릳릴릵릶릷릸릹릺릻림립릾릿맀링맂맃맄b�Xj맅맆맇|��j�j�j���j�jJ��jPj�jT�k막맊맋만맍많맏말맑맒맓맔맕맖맗맘맙맚맛맜망맞맟맠b�k맡맢맣|��kxk�k���k�kJ��k맥맦맧맨맩맪맫맬맭맮맯맰맱맲맳맴맵맶맷맸맹맺맻맼b��k맽맾맿|�(l l8l��@lLlJ�Tl�k\ls�dl먁먂먃먄먅먆먇먈먉먊먋먌먍먎먏먐먑먒먓먔먕먖먗먘b�xl먙먚먛|��l�l�l���lmJ�m먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴b� m먵먶먷|��m�m�m���m�mJ��m먹먺먻먼먽먾먿멀멁멂멃멄멅멆멇멈멉멊멋멌멍멎멏멐b��m멑멒멓|�4n,nDn��LnXnJ�`nm�mhn��pn멕멖멗멘멙멚멛멜멝멞멟멠멡멢멣멤멥멦멧멨멩멪멫멬b��n멭멮멯|��n�no��ooJ� o멱멲멳면멵멶멷멸멹멺멻멼멽멾멿몀몁몂몃몄명몆몇몈b�0o몉몊몋|��o�o�o���o�oJ��o(o�o���o몍몎몏몐몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤b��o몥몦몧|�XpPphp��pp|pJ��p목몪몫몬몭몮몯몰몱몲몳몴몵몶몷몸몹몺못몼몽몾몿뫀b��p뫁뫂뫃|�q�pq��q$qJ�,q�p4q��<q뫅뫆뫇뫈뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫘뫙뫚뫛뫜b�Pq뫝뫞뫟|��q�q�q���q�qJ��q뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸b��q뫹뫺뫻|�dr\rtr��|r�rJ��r뫽뫾뫿묀묁묂묃묄묅묆묇묈묉묊묋묌묍묎묏묐묑묒묓묔b��r묕묖묗|�sss��$s0sJ�8s�q�r@s��Hs묙묚묛묜묝묞묟묠묡묢묣묤묥묦묧묨묩묪묫묬묭묮묯묰b�`s묱묲묳|��s�s�s���s�sJ��s묵묶묷문묹묺묻물묽묾묿뭀뭁뭂뭃뭄뭅뭆뭇뭈뭉뭊뭋뭌b�t뭍뭎뭏|�ttlt�t���t�tJ��tt�t5��t뭑뭒뭓뭔뭕뭖뭗뭘뭙뭚뭛뭜뭝뭞뭟뭠뭡뭢뭣뭤뭥뭦뭧뭨b��t뭩뭪뭫|�0u(u@u��HuTuJ�\u뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄b�lu뮅뮆뮇|��u�u�u���u�uJ�vduvT�v뮉뮊뮋뮌뮍뮎뮏뮐뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠b�(v뮡뮢뮣|��v�v�v���v�vJ��v뮥뮦뮧뮨뮩뮪뮫뮬뮭뮮뮯뮰뮱뮲뮳뮴뮵뮶뮷뮸뮹뮺뮻뮼b��v뮽뮾뮿|�<w4wLw��Tw`wJ�hw�vpws�xw믁믂믃믄믅믆믇믈믉믊믋믌믍믎믏믐믑믒믓믔믕믖믗믘b��w믙믚믛|��w�wx��xxJ�$x믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴b�4x믵믶믷|��x�x�x���x�xJ��x믹믺믻민믽믾믿밀밁밂밃밄밅밆밇밈밉밊밋밌밍밎및밐b��x밑밒밓|�Hy@yXy��`ylyJ�ty,x�x|y���y박밖밗반밙밚받발밝밞밟밠밡밢밣밤밥밦밧밨방밪밫밬b��y밭밮밯|�zzz�� z,zJ�4z백밲밳밴밵밶밷밸밹밺밻밼밽밾밿뱀뱁뱂뱃뱄뱅뱆뱇뱈b�Dz뱉뱊뱋|��z�z�z���z�zJ��z<z�z���z뱍뱎뱏뱐뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱝뱞뱟뱠뱡뱢뱣뱤b�{뱥뱦뱧|�l{d{|{���{�{J��{뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀b��{벁벂벃|�||$|��,|8|J�@|�{H|��P|벅벆벇번벉벊벋벌벍벎벏벐벑벒벓범법벖벗벘벙벚벛벜b�d|벝벞벟|��|�|�|���|�|J��|벡벢벣벤벥벦벧벨벩벪벫벬벭벮벯벰벱벲벳벴벵벶벷벸b�}벹벺벻|�x}p}�}���}�}J��}벽벾벿변볁볂볃별볅볆볇볈볉볊볋볌볍볎볏볐병볒볓볔b��}볕볖볗|� ~~0~��8~D~J�L~}�}T~��\~볙볚볛볜볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰b�t~볱볲볳|��~�~�~���~J�복볶볷본볹볺볻볼볽볾볿봀봁봂봃봄봅봆봇봈봉봊봋봌b�봍봎봏|��������J���5��봑봒봓봔봕봖봗봘봙봚봛봜봝봞봟봠봡봢봣봤봥봦봧봨b��봩봪봫|�D�<�T���\�h�J�p�봭봮봯봰봱봲봳봴봵봶봷봸봹봺봻봼봽봾봿뵀뵁뵂뵃뵄b���뵅뵆뵇|���������J��x� �T�(�뵉뵊뵋뵌뵍뵎뵏뵐뵑뵒뵓뵔뵕뵖뵗뵘뵙뵚뵛뵜뵝뵞뵟뵠b�<�뵡뵢뵣|�����������́J�ԁ뵥뵦뵧뵨뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼b��뵽뵾뵿|�P�H�`���h�t�J�|�܁��s���북붂붃분붅붆붇불붉붊붋붌붍붎붏붐붑붒붓붔붕붖붗붘b���붙붚붛|������$�0�J�8�붝붞붟붠붡붢붣붤붥붦붧붨붩붪붫붬붭붮붯붰붱붲붳붴b�H�붵붶붷|�����ă��̃؃J��붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐b��뷑뷒뷓|�\�T�l���t���J���@��������뷕뷖뷗뷘뷙뷚뷛뷜뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷩뷪뷫뷬b���뷭뷮뷯|���,���4�@�J�H�뷱뷲뷳뷴뷵뷶뷷뷸뷹뷺뷻뷼뷽뷾뷿븀븁븂븃븄븅븆븇븈b�X�븉븊븋|�ą��ԅ��܅�J��P������븍븎븏븐븑븒븓블븕븖븗븘븙븚븛븜븝븞븟븠븡븢븣븤b��븥븦븧|���x���������J���븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀b���빁빂빃|�(� �8���@�L�J�T���\���d�빅빆빇빈빉빊빋빌빍빎빏빐빑빒빓빔빕빖빗빘빙빚빛빜b�x�빝빞빟|��܇������J��빡빢빣빤빥빦빧빨빩빪빫빬빭빮빯빰빱빲빳빴빵빶빷빸b� �빹빺빻|�������������J���빽빾빿뺀뺁뺂뺃뺄뺅뺆뺇뺈뺉뺊뺋뺌뺍뺎뺏뺐뺑뺒뺓뺔b�Ȉ뺕뺖뺗|�4�,�D���L�X�J�`����h���p�뺙뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺨뺩뺪뺫뺬뺭뺮뺯뺰b���뺱뺲뺳|��������J� �뺵뺶뺷뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌b�0�뻍뻎뻏|�������������J�Ȋ(�Њ5�؊뻑뻒뻓뻔뻕뻖뻗뻘뻙뻚뻛뻜뻝뻞뻟뻠뻡뻢뻣뻤뻥뻦뻧뻨b��뻩뻪뻫|�X�P�h���p�|�J���뻭뻮뻯뻰뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼁뼂뼃뼄b���뼅뼆뼇|��������$�J�,���4�T�<�뼉뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼘뼙뼚뼛뼜뼝뼞뼟뼠b�P�뼡뼢뼣|�����̌��Ԍ�J��뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼b���뼽뼾뼿|�d�\�t���|���J������s���뽁뽂뽃뽄뽅뽆뽇뽈뽉뽊뽋뽌뽍뽎뽏뽐뽑뽒뽓뽔뽕뽖뽗뽘b���뽙뽚뽛|� ��0���8�D�J�L�뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴b�\�뽵뽶뽷|�Ȏ��؎����J��뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐b��뾑뾒뾓|�p�h���������J���T���������뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬b�ď뾭뾮뾯|�0�(�@���H�T�J�\�뾱뾲뾳뾴뾵뾶뾷뾸뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿅뿆뿇뿈b�l�뿉뿊뿋|�ؐА������J��d�����뿍뿎뿏뿐뿑뿒뿓뿔뿕뿖뿗뿘뿙뿚뿛뿜뿝뿞뿟뿠뿡뿢뿣뿤b�(�뿥뿦뿧|�������������J���뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀b�Б쀁쀂쀃|�<�4�L���T�`�J�h�ȑp���x��.�0D2�357�8�9�;X=�> @0B�C�DGlH�I4KDM�NPR�S�THVXX�Y [0]�^�_\alc�d4fDh�ikpl�n�oHqXs�t v�w�y�z\|l~�4������p����H����� ������쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜b���쀝쀞쀟|��������(�J�0�쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸b�@�쀹쀺쀻|���������ĔДJ�ؔ쀽쀾쀿쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁑쁒쁓쁔b��쁕쁖쁗|�T�L�d���l�x�J���8��������쁙쁚쁛쁜쁝쁞쁟쁠쁡쁢쁣쁤쁥쁦쁧쁨쁩쁪쁫쁬쁭쁮쁯쁰b���쁱쁲쁳|���$���,�8�J�@�쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌b�P�삍삎삏|�����̖��Ԗ�J��H��5���삑삒삓삔삕삖삗삘삙삚삛삜삝삞삟삠삡삢삣삤삥삦삧삨b��삩삪삫|�x�p���������J���삭삮삯산삱삲삳살삵삶삷삸삹삺삻삼삽삾삿샀상샂샃샄b���샅샆샇|� ��0���8�D�J�L���T�T�\�색샊샋샌샍샎샏샐샑샒샓샔샕샖샗샘샙샚샛샜생샞샟샠b�p�샡샢샣|�ܘԘ�����J��샥샦샧샨샩샪샫샬샭샮샯샰샱샲샳샴샵샶샷샸샹샺샻샼b��샽샾샿|���|���������J������s���섁섂섃섄섅섆섇섈섉섊섋섌섍섎섏섐섑섒섓섔섕섖섗섘b�ԙ섙섚섛|�@�8�P���X�d�J�l�석섞섟선섡섢섣설섥섦섧섨섩섪섫섬섭섮섯섰성섲섳섴b�|�섵섶섷|���������J��섹섺섻센섽섾섿셀셁셂셃셄셅셆셇셈셉셊셋셌셍셎셏셐b�$�셑셒셓|�������������J���t��ě��̛셕셖셗션셙셚셛셜셝셞셟셠셡셢셣셤셥셦셧셨셩셪셫셬b��셭셮셯|�P�H�`���h�t�J�|�셱셲셳셴셵셶셷셸셹셺셻셼셽셾셿솀솁솂솃솄솅솆솇솈b���솉솊솋|���������J�$���,���4�속솎솏손솑솒솓솔솕솖솗솘솙솚솛솜솝솞솟솠송솢솣솤b�H�솥솦솧|�����ĝ��̝؝J��솩솪솫솬솭솮솯솰솱솲솳솴솵솶솷솸솹솺솻솼솽솾솿쇀b��쇁쇂쇃|�\�T�l���t���J����������쇅쇆쇇쇈쇉쇊쇋쇌쇍쇎쇏쇐쇑쇒쇓쇔쇕쇖쇗쇘쇙쇚쇛쇜b���쇝쇞쇟|���(���0�<�J�D�쇡쇢쇣쇤쇥쇦쇧쇨쇩쇪쇫쇬쇭쇮쇯쇰쇱쇲쇳쇴쇵쇶쇷쇸b�T�쇹쇺쇻|�����П��؟�J��쇽쇾쇿숀숁숂숃숄숅숆숇숈숉숊숋숌숍숎숏숐숑숒숓숔b���숕숖숗|�h�`�x�������J���L��������숙숚숛순숝숞숟술숡숢숣숤숥숦숧숨숩숪숫숬숭숮숯숰b���숱숲숳|�(� �8���@�L�J�T�숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅쉆쉇쉈쉉쉊쉋쉌b�d�쉍쉎쉏|�Сȡ�����J���\��5��쉑쉒쉓쉔쉕쉖쉗쉘쉙쉚쉛쉜쉝쉞쉟쉠쉡쉢쉣쉤쉥쉦쉧쉨b� �쉩쉪쉫|�������������J���쉭쉮쉯쉰쉱쉲쉳쉴쉵쉶쉷쉸쉹쉺쉻쉼쉽쉾쉿슀슁슂슃슄b�Ȣ슅슆슇|�4�,�D���L�X�J�`���h�T�p�슉슊슋슌슍슎슏슐슑슒슓슔슕슖슗슘슙슚슛슜슝슞슟슠b���슡슢슣|��������J��슥슦슧슨슩슪슫슬슭슮슯슰슱슲슳슴습슶슷슸승슺슻슼b�,�슽슾슿|�������������J�Ĥ$�̤s�Ԥ싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘b��싙싚싛|�T�L�d���l�x�J���식싞싟신싡싢싣실싥싦싧싨싩싪싫심십싮싯싰싱싲싳싴b���싵싶싷|�������� �J�(�싹싺싻싼싽싾싿쌀쌁쌂쌃쌄쌅쌆쌇쌈쌉쌊쌋쌌쌍쌎쌏쌐b�8�쌑쌒쌓|�����������ȦJ�Ц��0�ئ���쌕쌖쌗쌘쌙쌚쌛쌜쌝쌞쌟쌠쌡쌢쌣쌤쌥쌦쌧쌨쌩쌪쌫쌬b���쌭쌮쌯|�d�\�t���|���J���쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썅썆썇썈b���썉썊썋|������$�0�J�8���@���H�썍썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤b�\�썥썦썧|�Ȩ��ب����J��썩썪썫썬썭썮썯썰썱썲썳썴썵썶썷썸썹썺썻썼썽썾썿쎀b��쎁쎂쎃|�p�h���������J�����������쎅쎆쎇쎈쎉쎊쎋쎌쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜b���쎝쎞쎟|�,�$�<���D�P�J�X�쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸b�h�쎹쎺쎻|�Ԫ̪������J��쎽쎾쎿쏀쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔b��쏕쏖쏗|�|�t���������J���`��������쏙쏚쏛쏜쏝쏞쏟쏠쏡쏢쏣쏤쏥쏦쏧쏨쏩쏪쏫쏬쏭쏮쏯쏰b�Ы쏱쏲쏳|�<�4�L���T�`�J�h�쏵쏶쏷쏸쏹쏺쏻쏼쏽쏾쏿쐀쐁쐂쐃쐄쐅쐆쐇쐈쐉쐊쐋쐌b�x�쐍쐎쐏|��ܬ������J��p��5� �쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚쐛쐜쐝쐞쐟쐠쐡쐢쐣쐤쐥쐦쐧쐨b�4�쐩쐪쐫|�����������ĭJ�̭쐭쐮쐯쐰쐱쐲쐳쐴쐵쐶쐷쐸쐹쐺쐻쐼쐽쐾쐿쑀쑁쑂쑃쑄b�ܭ쑅쑆쑇|�H�@�X���`�l�J�t�ԭ|�T���쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠b���쑡쑢쑣|��������(�J�0�쑥쑦쑧쑨쑩쑪쑫쑬쑭쑮쑯쑰쑱쑲쑳쑴쑵쑶쑷쑸쑹쑺쑻쑼b�@�쑽쑾쑿|���������įЯJ�د8��s��쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒔쒕쒖쒗쒘b���쒙쒚쒛|�h�`�x�������J���쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴b���쒵쒶쒷|��� ���(�4�J�<�쒹쒺쒻쒼쒽쒾쒿쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐b�L�쓑쓒쓓|�����ȱ��бܱJ����D�����쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟쓠쓡쓢쓣쓤쓥쓦쓧쓨쓩쓪쓫쓬b��쓭쓮쓯|�x�p���������J���쓱쓲쓳쓴쓵쓶쓷쓸쓹쓺쓻쓼쓽쓾쓿씀씁씂씃씄씅씆씇씈b���씉씊씋|� ��0���8�D�J�L���T���\�씍씎씏씐씑씒씓씔씕씖씗씘씙씚씛씜씝씞씟씠씡씢씣씤b�p�씥씦씧|�ܳԳ�����J��씩씪씫씬씭씮씯씰씱씲씳씴씵씶씷씸씹씺씻씼씽씾씿앀b��앁앂앃|���|���������J����������악앆앇안앉않앋알앍앎앏앐앑앒앓암압앖앗았앙앚앛앜b�Դ앝앞앟|�@�8�P���X�d�J�l�액앢앣앤앥앦앧앨앩앪앫앬앭앮앯앰앱앲앳앴앵앶앷앸b�|�앹앺앻|���������J��약앾앿얀얁얂얃얄얅얆얇얈얉얊얋얌얍얎얏얐양얒얓얔b�$�얕얖얗|�������������J���t��Ķ��̶얙얚얛얜얝얞얟얠얡얢얣얤얥얦얧얨얩얪얫얬얭얮얯얰b��얱얲얳|�P�H�`���h�t�J�|�억얶얷언얹얺얻얼얽얾얿엀엁엂엃엄업없엇었엉엊엋엌b���엍엎엏|���������J�$���,�5�4�엑엒엓엔엕엖엗엘엙엚엛엜엝엞엟엠엡엢엣엤엥엦엧엨b�H�엩엪엫|�����ĸ��̸ظJ��역엮엯연엱엲엳열엵엶엷엸엹엺엻염엽엾엿였영옂옃옄b��옅옆옇|�\�T�l���t���J������T���옉옊옋옌옍옎옏옐옑옒옓옔옕옖옗옘옙옚옛옜옝옞옟옠b���옡옢옣|���(���0�<�J�D�옥옦옧온옩옪옫올옭옮옯옰옱옲옳옴옵옶옷옸옹옺옻옼b�T�옽옾옿|�����к��غ�J��L��s���왁왂왃완왅왆왇왈왉왊왋왌왍왎왏왐왑왒왓왔왕왖왗왘b��왙왚왛|�|�t���������J���왝왞왟왠왡왢왣왤왥왦왧왨왩왪왫왬왭왮왯왰왱왲왳왴b���왵왶왷|�$��4���<�H�J�P�왹왺왻왼왽왾왿욀욁욂욃욄욅욆욇욈욉욊욋욌욍욎욏욐b�`�욑욒욓|�̼ļܼ����J�����X�����욕욖욗욘욙욚욛욜욝욞욟욠욡욢욣욤욥욦욧욨용욪욫욬b� �욭욮욯|�������������J���욱욲욳운욵욶욷울욹욺욻욼욽욾욿움웁웂웃웄웅웆웇웈b�Ƚ웉웊웋|�4�,�D���L�X�J�`���h���p�웍웎웏원웑웒웓월웕웖웗웘웙웚웛웜웝웞웟웠웡웢웣웤b���웥웦웧|��������J��웩웪웫웬웭웮웯웰웱웲웳웴웵웶웷웸웹웺웻웼웽웾웿윀b�,�윁윂윃|�������������J�Ŀ$�̿��Կ윅윆윇윈윉윊윋윌윍윎윏윐윑윒윓윔윕윖윗윘윙윚윛윜b��윝윞윟|�T�L�d���l�x�J���육윢윣윤윥윦윧율윩윪윫윬윭윮윯윰윱윲윳윴융윶윷윸b���윹윺윻|�������� �J�(�윽윾윿은읁읂읃을읅읆읇읈읉읊읋음읍읎읏읐응읒읓읔b�8�읕읖읗|������������J����0�����읙읚읛읜읝읞읟읠읡읢읣읤읥읦읧읨읩읪읫읬읭읮읯읰b���읱읲읳|�d�\�t���|���J���익읶읷인읹읺읻일읽읾읿잀잁잂잃임입잆잇있잉잊잋잌b���잍잎잏|������$�0�J�8���@�5�H�작잒잓잔잕잖잗잘잙잚잛잜잝잞잟잠잡잢잣잤장잦잧잨b�\�잩잪잫|�������������J���잭잮잯잰잱잲잳잴잵잶잷잸잹잺잻잼잽잾잿쟀쟁쟂쟃쟄b��쟅쟆쟇|�p�h���������J�������T���쟉쟊쟋쟌쟍쟎쟏쟐쟑쟒쟓쟔쟕쟖쟗쟘쟙쟚쟛쟜쟝쟞쟟쟠b���쟡쟢쟣|�,�$�<���D�P�J�X�쟥쟦쟧쟨쟩쟪쟫쟬쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺쟻쟼b�h�쟽쟾쟿|�������������J��`��s��적젂젃전젅젆젇절젉젊젋젌젍젎젏점접젒젓젔정젖젗젘b�$�젙젚젛|�������������J���젝젞젟젠젡젢젣젤젥젦젧젨젩젪젫젬젭젮젯젰젱젲젳젴b���젵젶젷|�8�0�H���P�\�J�d�젹젺젻젼젽젾젿졀졁졂졃졄졅졆졇졈졉졊졋졌졍졎졏졐b�t�졑졒졓|������������J����l�����졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬b�4�졭졮졯|�������������J���족졲졳존졵졶졷졸졹졺졻졼졽졾졿좀좁좂좃좄종좆좇좈b���좉좊좋|�H�@�X���`�l�J�t���|�����좍좎좏좐좑좒좓좔좕좖좗좘좙좚좛좜좝좞좟좠좡좢좣좤b���좥좦좧|��������(�J�0�좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좼좽좾좿죀b�@�죁죂죃|�������������J���8�������죅죆죇죈죉죊죋죌죍죎죏죐죑죒죓죔죕죖죗죘죙죚죛죜b���죝죞죟|�h�`�x�������J���죡죢죣죤죥죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죵죶죷죸b���죹죺죻|��� ���(�4�J�<�죽죾죿준줁줂줃줄줅줆줇줈줉줊줋줌줍줎줏줐중줒줓줔b�L�줕줖줗|�������������J�����D�������줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫줬줭줮줯줰b��줱줲줳|�x�p���������J���줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇쥈쥉쥊쥋쥌b���쥍쥎쥏|� ��0���8�D�J�L���T�5�\�쥑쥒쥓쥔쥕쥖쥗쥘쥙쥚쥛쥜쥝쥞쥟쥠쥡쥢쥣쥤쥥쥦쥧쥨b�p�쥩쥪쥫|������������J��쥭쥮쥯쥰쥱쥲쥳쥴쥵쥶쥷쥸쥹쥺쥻쥼쥽쥾쥿즀즁즂즃즄b��즅즆즇|���|���������J������T���즉즊즋즌즍즎즏즐즑즒즓즔즕즖즗즘즙즚즛즜증즞즟즠b���즡즢즣|�@�8�P���X�d�J�l�즥즦즧즨즩즪즫즬즭즮즯즰즱즲즳즴즵즶즷즸즹즺즻즼b�|�즽즾즿|�����������J��t��s�$�직짂짃진짅짆짇질짉짊짋짌짍짎짏짐집짒짓짔징짖짗짘b�8�짙짚짛|�������������J���짝짞짟짠짡짢짣짤짥짦짧짨짩짪짫짬짭짮짯짰짱짲짳짴b���짵짶짷|�L�D�\���d�p�J�x�짹짺짻짼짽짾짿쨀쨁쨂쨃쨄쨅쨆쨇쨈쨉쨊쨋쨌쨍쨎쨏쨐b���쨑쨒쨓|����������J� �����(���0�쨕쨖쨗쨘쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥쨦쨧쨨쨩쨪쨫쨬b�H�쨭쨮쨯|�������������J���쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆쩇쩈b���쩉쩊쩋|�\�T�l���t���J�����������쩍쩎쩏쩐쩑쩒쩓쩔쩕쩖쩗쩘쩙쩚쩛쩜쩝쩞쩟쩠쩡쩢쩣쩤b���쩥쩦쩧|���(���0�<�J�D�쩩쩪쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩽쩾쩿쪀b�T�쪁쪂쪃|�������������J���L�������쪅쪆쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪘쪙쪚쪛쪜b��쪝쪞쪟|�|�t���������J���쪡쪢쪣쪤쪥쪦쪧쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸b���쪹쪺쪻|�$��4���<�H�J�P�쪽쪾쪿쫀쫁쫂쫃쫄쫅쫆쫇쫈쫉쫊쫋쫌쫍쫎쫏쫐쫑쫒쫓쫔b�`�쫕쫖쫗|�������������J�����X�����쫙쫚쫛쫜쫝쫞쫟쫠쫡쫢쫣쫤쫥쫦쫧쫨쫩쫪쫫쫬쫭쫮쫯쫰b� �쫱쫲쫳|�������������J���쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬈쬉쬊쬋쬌b���쬍쬎쬏|�4�,�D���L�X�J�`���h�5�p�쬑쬒쬓쬔쬕쬖쬗쬘쬙쬚쬛쬜쬝쬞쬟쬠쬡쬢쬣쬤쬥쬦쬧쬨b���쬩쬪쬫|����������J��쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭁쭂쭃쭄b�,�쭅쭆쭇|�������������J���$���T���쭉쭊쭋쭌쭍쭎쭏쭐쭑쭒쭓쭔쭕쭖쭗쭘쭙쭚쭛쭜쭝쭞쭟쭠b���쭡쭢쭣|�T�L�d���l�x�J���쭥쭦쭧쭨쭩쭪쭫쭬쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭸쭹쭺쭻쭼b���쭽쭾쭿|��������� �J�(���0�s�8�쮁쮂쮃쮄쮅쮆쮇쮈쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘b�L�쮙쮚쮛|�������������J���쮝쮞쮟쮠쮡쮢쮣쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴b���쮵쮶쮷|�`�X�p���x���J���쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐b���쯑쯒쯓|������ �,�J�4�����<���D�쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟쯠쯡쯢쯣쯤쯥쯦쯧쯨쯩쯪쯫쯬b�\�쯭쯮쯯|�������������J���쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼쯽쯾쯿찀찁찂찃찄찅찆찇찈b��찉찊찋|�p�h���������J�����������찍찎찏찐찑찒찓찔찕찖찗찘찙찚찛찜찝찞찟찠찡찢찣찤b���찥찦찧|�,�$�<���D�P�J�X�착찪찫찬찭찮찯찰찱찲찳찴찵찶찷참찹찺찻찼창찾찿챀b�h�챁챂챃|�������������J��`�����책챆챇챈챉챊챋챌챍챎챏챐챑챒챓챔챕챖챗챘챙챚챛챜b�$�챝챞챟|�������������J���챡챢챣챤챥챦챧챨챩챪챫챬챭챮챯챰챱챲챳챴챵챶챷챸b���챹챺챻|�8�0�H���P�\�J�d�챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓첔b�t�첕첖첗|������������J����l�����척첚첛천첝첞첟철첡첢첣첤첥첦첧첨첩첪첫첬청첮첯첰b�4�첱첲첳|�������������J���첵첶첷첸첹첺첻첼첽첾첿쳀쳁쳂쳃쳄쳅쳆쳇쳈쳉쳊쳋쳌b���쳍쳎쳏|�H�@�X���`�l�J�t���|�5���쳑쳒쳓쳔쳕쳖쳗쳘쳙쳚쳛쳜쳝쳞쳟쳠쳡쳢쳣쳤쳥쳦쳧쳨b���쳩쳪쳫|��������(�J�0�쳭쳮쳯쳰쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽쳾쳿촀촁촂촃촄b�@�촅촆촇|�������������J���8���T���촉촊촋촌촍촎촏촐촑촒촓촔촕촖촗촘촙촚촛촜총촞촟촠b���촡촢촣|�h�`�x�������J���촥촦촧촨촩촪촫촬촭촮촯촰촱촲촳촴촵촶촷촸촹촺촻촼b���촽촾촿|��� ���(�4�J�<���D�s�L�쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘b�`�쵙쵚쵛|�������������J���쵝쵞쵟쵠쵡쵢쵣쵤쵥쵦쵧쵨쵩쵪쵫쵬쵭쵮쵯쵰쵱쵲쵳쵴b��쵵쵶쵷|�t�l���������J���쵹쵺쵻쵼쵽쵾쵿춀춁춂춃춄춅춆춇춈춉춊춋춌춍춎춏춐b���춑춒춓|���,���4�@�J�H����P���X�축춖춗춘춙춚춛출춝춞춟춠춡춢춣춤춥춦춧춨충춪춫춬b�p�춭춮춯|������������J��춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췄췅췆췇췈b��췉췊췋|���|���������J����������췍췎췏췐췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡췢췣췤b���췥췦췧|�@�8�P���X�d�J�l�췩췪췫췬췭췮췯췰췱췲췳췴췵췶췷췸췹췺췻췼췽췾췿츀b�|�츁츂츃|�����������J��t����$�츅츆츇츈츉츊츋츌츍츎츏츐츑츒츓츔츕츖츗츘츙츚츛츜b�8�츝츞츟|�������������J���측츢츣츤츥츦츧츨츩츪츫츬츭츮츯츰츱츲츳츴층츶츷츸b���츹츺츻|�L�D�\���d�p�J�x�츽츾츿칀칁칂칃칄칅칆칇칈칉칊칋칌칍칎칏칐칑칒칓칔b���칕칖칗|����������J� �����(���0�칙칚칛친칝칞칟칠칡칢칣칤칥칦칧침칩칪칫칬칭칮칯칰b�H�칱칲칳|�������������J���칵칶칷칸칹칺칻칼칽칾칿캀캁캂캃캄캅캆캇캈캉캊캋캌b���캍캎캏|�\�T�l���t���J�������5���캑캒캓캔캕캖캗캘캙캚캛캜캝캞캟캠캡캢캣캤캥캦캧캨b���캩캪캫|���(���0�<�J�D�캭캮캯캰캱캲캳캴캵캶캷캸캹캺캻캼캽캾캿컀컁컂컃컄b�T�컅컆컇|�������������J���L���T���컉컊컋컌컍컎컏컐컑컒컓컔컕컖컗컘컙컚컛컜컝컞컟컠b��컡컢컣|�|�t���������J���컥컦컧컨컩컪컫컬컭컮컯컰컱컲컳컴컵컶컷컸컹컺컻컼b���컽컾컿|�$��4���<�H�J�P���X�s�`�켁켂켃켄켅켆켇켈켉켊켋켌켍켎켏켐켑켒켓켔켕켖켗켘b�t�켙켚켛|������������J��켝켞켟켠켡켢켣켤켥켦켧켨켩켪켫켬켭켮켯켰켱켲켳켴b��켵켶켷|�������������J���켹켺켻켼켽켾켿콀콁콂콃콄콅콆콇콈콉콊콋콌콍콎콏콐b���콑콒콓|�0�(�@���H�T�J�\����d���l�콕콖콗콘콙콚콛콜콝콞콟콠콡콢콣콤콥콦콧콨콩콪콫콬b���콭콮콯|����������J��콱콲콳콴콵콶콷콸콹콺콻콼콽콾콿쾀쾁쾂쾃쾄쾅쾆쾇쾈b�,�쾉쾊쾋|�������������J��$�����쾍쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾡쾢쾣쾤b��쾥쾦쾧|�T�L�d���l�x�J���쾩쾪쾫쾬쾭쾮쾯쾰쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀b���쿁쿂쿃|�������� �J�(���0���8�쿅쿆쿇쿈쿉쿊쿋쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜b�L�쿝쿞쿟|����������J��쿡쿢쿣쿤쿥쿦쿧쿨쿩쿪쿫쿬쿭쿮쿯쿰쿱쿲쿳쿴쿵쿶쿷쿸b��쿹쿺쿻|�`�X�p���x���J���쿽쿾쿿퀀퀁퀂퀃퀄퀅퀆퀇퀈퀉퀊퀋퀌퀍퀎퀏퀐퀑퀒퀓퀔b���퀕퀖퀗|������ �,�J�4����<���D����h�̙ܛ@������|���T���ȫ,�����h�̴ܶ@�����|���T����,������h���0�@�����|���D�T����,�����X�h���0�@����l�|��D�T��\�퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬퀭퀮퀯퀰b�h�퀱퀲퀳|���������J��퀵퀶퀷퀸퀹퀺퀻퀼퀽퀾퀿큀큁큂큃큄큅큆큇큈큉큊큋큌b��큍큎큏|�|�t���������J������5���큑큒큓큔큕큖큗큘큙큚큛큜큝큞큟큠큡큢큣큤큥큦큧큨b��큩큪큫|�8�0�H���P�\�J�d�큭큮큯큰큱큲큳클큵큶큷큸큹큺큻큼큽큾큿킀킁킂킃킄b�t�킅킆킇|���������J��l��T��킉킊킋킌킍킎킏킐킑킒킓킔킕킖킗킘킙킚킛킜킝킞킟킠b�0�킡킢킣|�������������J��킥킦킧킨킩킪킫킬킭킮킯킰킱킲킳킴킵킶킷킸킹킺킻킼b��킽킾킿|�D�<�T���\�h�J�p��x�s���탁탂탃탄탅탆탇탈탉탊탋탌탍탎탏탐탑탒탓탔탕탖탗탘b���탙탚탛|��������$�J�,�택탞탟탠탡탢탣탤탥탦탧탨탩탪탫탬탭탮탯탰탱탲탳탴b�<�탵탶탷|������������J��탹탺탻탼탽탾탿턀턁턂턃턄턅턆턇턈턉턊턋턌턍턎턏턐b��턑턒턓|�PH`��htJ�|4������턕턖턗턘턙턚턛턜턝턞턟턠턡턢턣턤턥턦턧턨턩턪턫턬b��턭턮턯|� ��(4J�<턱턲턳턴턵턶턷털턹턺턻턼턽턾턿텀텁텂텃텄텅텆텇텈b�L텉텊텋|��������J��D����텍텎텏텐텑텒텓텔텕텖텗텘텙텚텛템텝텞텟텠텡텢텣텤b�텥텦텧|�tl�����J��텩텪텫텬텭텮텯텰텱텲텳텴텵텶텷텸텹텺텻텼텽텾텿톀b��톁톂톃|�,��4@J�H�P��X톅톆톇톈톉톊톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜b�l톝톞톟|��������J�톡톢톣톤톥톦톧톨톩톪톫톬톭톮톯톰톱톲톳톴통톶톷톸b�톹톺톻|��x�����J��톽톾톿퇀퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏퇐퇑퇒퇓퇔b��퇕퇖퇗|�( 8��@LJ�T�\��d퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪퇫퇬퇭퇮퇯퇰b�|퇱퇲퇳|������J�퇵퇶퇷퇸퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆툇툈툉툊툋툌b�$툍툎툏|��������J���5��툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨b��툩툪툫|�LD\��dpJ�x툭툮툯툰툱툲툳툴툵툶툷툸툹툺툻툼툽툾툿퉀퉁퉂퉃퉄b��퉅퉆퉇|�����J� �(T�0퉉퉊퉋퉌퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉜퉝퉞퉟퉠b�D퉡퉢퉣|��������J��퉥퉦퉧퉨퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼b��퉽퉾퉿|�X	P	h	��p	|	J��	��	s��	튁튂튃튄튅튆튇튈튉튊튋튌튍튎튏튐튑튒튓튔튕튖튗튘b��	튙튚튛|�

$
��,
8
J�@
튝튞튟튠튡튢튣튤튥튦튧튨튩튪튫튬튭튮튯튰튱튲튳튴b�P
튵튶튷|��
�
�
���
�
J��
특튺튻튼튽튾튿틀틁틂틃틄틅틆틇틈틉틊틋틌틍틎틏틐b��
틑틒틓|�d\t��|�J��H
�
����틕틖틗틘틙틚틛틜틝틞틟틠틡틢틣틤틥틦틧틨틩틪틫틬b��틭틮틯|�$4��<HJ�P틱틲틳틴틵틶틷틸틹틺틻틼틽틾틿팀팁팂팃팄팅팆팇팈b�`팉팊팋|��������J��X
��
팍팎팏판팑팒팓팔팕팖팗팘팙팚팛팜팝팞팟팠팡팢팣팤b�
팥팦팧|��
�
�
���
�
J��
팩팪팫팬팭팮팯팰팱팲팳팴팵팶팷팸팹팺팻팼팽팾팿퍀b��
퍁퍂퍃|�0(@��HTJ�\�
d��l퍅퍆퍇퍈퍉퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜b��퍝퍞퍟|������J�퍡퍢퍣퍤퍥퍦퍧퍨퍩퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸b�(퍹퍺퍻|��������J��퍽퍾퍿펀펁펂펃펄펅펆펇펈펉펊펋펌펍펎펏펐펑펒펓펔b��펕펖펗|�<4L��T`J�h �p��x펙펚펛펜펝펞펟펠펡펢펣펤펥펦펧펨펩펪펫펬펭펮펯펰b��펱펲펳|����� J�(펵펶펷편펹펺펻펼펽펾펿폀폁폂폃폄폅폆폇폈평폊폋폌b�8폍폎폏|��������J��0�5��폑폒폓폔폕폖폗폘폙폚폛폜폝폞폟폠폡폢폣폤폥폦폧폨b��폩폪폫|�`Xp��x�J��폭폮폯폰폱폲폳폴폵폶폷폸폹폺폻폼폽폾폿퐀퐁퐂퐃퐄b��퐅퐆퐇|��� ,J�4�<T�D퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖퐗퐘퐙퐚퐛퐜퐝퐞퐟퐠b�X퐡퐢퐣|��������J��퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷퐸퐹퐺퐻퐼b�퐽퐾퐿|�ld|����J����s��푁푂푃푄푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓푔푕푖푗푘b��푙푚푛|�( 8��@LJ�T푝푞푟푠푡푢푣푤푥푦푧푨푩푪푫푬푭푮푯푰푱푲푳푴b�d푵푶푷|��������J��푹푺푻푼푽푾푿풀풁풂풃풄풅풆풇품풉풊풋풌풍풎풏풐b�풑풒풓|�xp�����J��\����풕풖풗풘풙풚풛풜풝풞풟풠풡풢풣풤풥풦풧풨풩풪풫풬b��풭풮풯|�80H��P\J�d풱풲풳풴풵풶풷풸풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈b�t퓉퓊퓋|�������J�l��퓍퓎퓏퓐퓑퓒퓓퓔퓕퓖퓗퓘퓙퓚퓛퓜퓝퓞퓟퓠퓡퓢퓣퓤b�0퓥퓦퓧|��������J��퓩퓪퓫퓬퓭퓮퓯퓰퓱퓲퓳퓴퓵퓶퓷퓸퓹퓺퓻퓼퓽퓾퓿픀b��픁픂픃|�D<T��\hJ�p�x���픅픆픇픈픉픊픋플픍픎픏픐픑픒픓픔픕픖픗픘픙픚픛픜b��픝픞픟|����$J�,픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷픸b�<픹픺픻|��������J��픽픾픿핀핁핂핃필핅핆핇핈핉핊핋핌핍핎핏핐핑핒핓핔b��핕핖핗|�PH`��htJ�|4�����학핚핛한핝핞핟할핡핢핣핤핥핦핧함합핪핫핬항핮핯핰b��핱핲핳|� ��(4J�<핵핶핷핸핹핺핻핼핽핾핿햀햁햂햃햄햅햆햇했행햊햋햌b�L햍햎햏|��������J��D�5��햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤향햦햧햨b�햩햪햫|�tl�����J��햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄b��헅헆헇|�,��4@J�H�PT�X헉헊헋헌헍헎헏헐헑헒헓헔헕헖헗험헙헚헛헜헝헞헟헠b�l헡헢헣|��������J�헥헦헧헨헩헪헫헬헭헮헯헰헱헲헳헴헵헶헷헸헹헺헻헼b�헽헾헿|��x�����J���s��혁혂혃현혅혆혇혈혉혊혋혌혍혎혏혐협혒혓혔형혖혗혘b��혙혚혛|�< 4 L ��T ` J�h 혝혞혟혠혡혢혣혤혥혦혧혨혩혪혫혬혭혮혯혰혱혲혳혴b�x 혵혶혷|�� � � ��� !J�!혹혺혻혼혽혾혿홀홁홂홃홄홅홆홇홈홉홊홋홌홍홎홏홐b� !홑홒홓|��!�!�!���!�!J��!p !�!���!확홖홗환홙홚홛활홝홞홟홠홡홢홣홤홥홦홧홨황홪홫홬b��!홭홮홯|�L"D"\"��d"p"J�x"홱홲홳홴홵홶홷홸홹홺홻홼홽홾홿횀횁횂횃횄횅횆횇횈b��"횉횊횋|��"�"#��##J� #�"(#��0#획횎횏횐횑횒횓횔횕횖횗횘횙횚횛횜횝횞횟횠횡횢횣횤b�D#횥횦횧|��#�#�#���#�#J��#횩횪횫횬횭횮횯횰횱횲횳횴횵횶횷횸횹횺횻횼횽횾횿훀b��#훁훂훃|�X$P$h$��p$|$J��$�#�$���$훅훆훇훈훉훊훋훌훍훎훏훐훑훒훓훔훕훖훗훘훙훚훛훜b��$훝훞훟|�%%$%��,%8%J�@%훡훢훣훤훥훦훧훨훩훪훫훬훭훮훯훰훱훲훳훴훵훶훷훸b�P%훹훺훻|��%�%�%���%�%J��%훽훾훿휀휁휂휃휄휅휆휇휈휉휊휋휌휍휎휏휐휑휒휓휔b��%휕휖휗|�d&\&t&��|&�&J��&H%�%�&���&휙휚휛휜휝휞휟휠휡휢휣휤휥휦휧휨휩휪휫휬휭휮휯휰b��&휱휲휳|�$''4'��<'H'J�P'휵휶휷휸휹휺휻휼휽휾휿흀흁흂흃흄흅흆흇흈흉흊흋흌b�`'흍흎흏|��'�'�'���'�'J��'X'(5�(흑흒흓흔흕흖흗흘흙흚흛흜흝흞흟흠흡흢흣흤흥흦흧흨b�(흩흪흫|��(�(�(���(�(J��(흭흮흯흰흱흲흳흴흵흶흷흸흹흺흻흼흽흾흿힀힁힂힃힄b��(힅힆힇|�0)()@)��H)T)J�\)�(d)T�l)힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟힠b��)힡힢힣|��)�)�)��**J�* *�(*�(����dt�<�	�
x��P��(��d��!<#�$�&(x)0*��8*������(��������p��������\������P������H�l�����<�d�����(�H������4�d������\�������0��������\�������x���l�P�����p�����d�����h���`	�l-��`��*���*����	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456����	

 !"#$%&'()*+,ǕǖǗǘǙǚǛǜǞǟǠǡǢǣǬǭǮǯǺǻǼǽǾǿ��	

 !"#$%&'()*+,-ȪȫȬȭȰȱ��̈́��	

΅ΆΈΉΊΌΎΏΪΫάέήί��ϊϋόύώϓϔ��	
ЀЁЃЇЌЍЎЙй��	
ѐёѓїќѝўѶѷ��	

 !"#ӁӂӐӑӒӓӖӗӚӛӜӝӞӟӢӣӤӥӦӧӪӫӬӭӮӯӰӱӲӳӴӵӸӹ��آأؤإئ��ۀۂۓ��ऩऱऴ��	क़ख़ग़ज़ड़ढ़फ़य़��োৌড়ঢ়য়��ਲ਼ਸ਼��ਖ਼ਗ਼ਜ਼ਫ਼��ୈୋୌଡ଼ଢ଼��ஔ��ொோௌ��ై��ೀೇೈೊೋൊോൌ��ේොෝෞ��	
གྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀླྀ��ཱྀྒྷྜྷྡྷྦྷྫྷྐྵ��	

��ဦ��	

 !"#$%&'()*+,-./0123456789:;<=>?@ḈḉḔḕḖḗḜḝḮḯḸḹṌṍṎṏṐṑṒṓṜṝṤṥṦṧṨṩṸṹṺṻ��	

 !"#$%&'()*+,-./0123456789:;<ẛẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẾế��	

 !"#$%&'()*+,-./0123456789:;;;;;;ỀềỂểỄễỆệỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỨứỪừỬửỮữỰự��	

 !"#$%&'()*+,-./0123456789:;<=ἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏἐἑἒἓἔἕἘἙἚἛἜἝἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿ��	

 !"#$%&'()*+,-./0ὀὁὂὃὄὅὈὉὊὋὌὍὐὑὒὓὔὕὖὗὙὛὝὟὠὡὢὣὤὥὦὧὨὩὪὫὬὭὮὯὰὲὴὶὸὺὼ��	

 !"#$%&'()*+,-./0123456789:;6<6=6ᾀᾁᾂᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌᾍᾎᾏᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾞᾟᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯᾰᾱᾲᾳᾴᾶᾷᾸᾹᾺᾼ��	

 !"#$%&'()*+,-./0῁ῂῃῄῆῇῈῊῌ῍῎῏ῐῑῒΐῖῗῘῙῚ῝῞῟ῠῡῢΰῤῥῦῧῨῩῪῬ῭ῲῳῴῶῷῸῺῼ��	
��	

がぎぐげござじずぜぞだぢづでどばぱびぴぶぷべぺぼぽ��	

ゔゞガギグゲゴザジズゼゾ��	

ダヂヅデドバパビピブプベペボポヴヷヸヹヺヾ��가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓걔걕걖걗걘걙걚걛걜걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯거걱걲걳건걵걶걷걸걹걺걻걼걽걾걿검겁겂것겄겅겆겇겈겉겊겋게겍겎겏겐겑겒겓겔겕겖겗겘겙겚겛겜겝겞겟겠겡겢겣겤겥겦겧겨격겪겫견겭겮겯결겱겲겳겴겵겶겷겸겹겺겻겼경겾겿곀곁곂곃계곅곆곇곈곉곊곋곌곍곎곏곐곑곒곓곔곕곖곗곘곙곚곛곜곝곞곟고곡곢곣곤곥곦곧골곩곪곫곬곭곮곯곰곱곲곳곴공곶곷곸곹곺곻과곽곾곿관괁괂괃괄괅괆괇괈괉괊괋괌괍괎괏괐광괒괓괔괕괖괗괘괙괚괛괜괝괞괟괠괡괢괣괤괥괦괧괨괩괪괫괬괭괮괯괰괱괲괳괴괵괶괷괸괹괺괻괼괽괾괿굀굁굂굃굄굅굆굇굈굉굊굋굌굍굎굏교굑굒굓굔굕굖굗굘굙굚굛굜굝굞굟굠굡굢굣굤굥굦굧굨굩굪굫구국굮굯군굱굲굳굴굵굶굷굸굹굺굻굼굽굾굿궀궁궂궃궄궅궆궇궈궉궊궋권궍궎궏궐궑궒궓궔궕궖궗궘궙궚궛궜궝궞궟궠궡궢궣궤궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궷궸궹궺궻궼궽궾궿귀귁귂귃귄귅귆귇귈귉귊귋귌귍귎귏귐귑귒귓귔귕귖귗귘귙귚귛규귝귞귟균귡귢귣귤귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷그극귺귻근귽귾귿글긁긂긃긄긅긆긇금급긊긋긌긍긎긏긐긑긒긓긔긕긖긗긘긙긚긛긜긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯기긱긲긳긴긵긶긷길긹긺긻긼긽긾긿김깁깂깃깄깅깆깇깈깉깊깋까깍깎깏깐깑깒깓깔깕깖깗깘깙깚깛깜깝깞깟깠깡깢깣깤깥깦깧깨깩깪깫깬깭깮깯깰깱깲깳깴깵깶깷깸깹깺깻깼깽깾깿꺀꺁꺂꺃꺄꺅꺆꺇꺈꺉꺊꺋꺌꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺼꺽꺾꺿껀껁껂껃껄껅껆껇껈껉껊껋껌껍껎껏껐껑껒껓껔껕껖껗께껙껚껛껜껝껞껟껠껡껢껣껤껥껦껧껨껩껪껫껬껭껮껯껰껱껲껳껴껵껶껷껸껹껺껻껼껽껾껿꼀꼁꼂꼃꼄꼅꼆꼇꼈꼉꼊꼋꼌꼍꼎꼏꼐꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣꼤꼥꼦꼧꼨꼩꼪꼫꼬꼭꼮꼯꼰꼱꼲꼳꼴꼵꼶꼷꼸꼹꼺꼻꼼꼽꼾꼿꽀꽁꽂꽃꽄꽅꽆꽇꽈꽉꽊꽋꽌꽍꽎꽏꽐꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽜꽝꽞꽟꽠꽡꽢꽣꽤꽥꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽹꽺꽻꽼꽽꽾꽿꾀꾁꾂꾃꾄꾅꾆꾇꾈꾉꾊꾋꾌꾍꾎꾏꾐꾑꾒꾓꾔꾕꾖꾗꾘꾙꾚꾛꾜꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾸꾹꾺꾻꾼꾽꾾꾿꿀꿁꿂꿃꿄꿅꿆꿇꿈꿉꿊꿋꿌꿍꿎꿏꿐꿑꿒꿓꿔꿕꿖꿗꿘꿙꿚꿛꿜꿝꿞꿟꿠꿡꿢꿣꿤꿥꿦꿧꿨꿩꿪꿫꿬꿭꿮꿯꿰꿱꿲꿳꿴꿵꿶꿷꿸꿹꿺꿻꿼꿽꿾꿿��	

뀀뀁뀂뀃뀄뀅뀆뀇뀈뀉뀊뀋뀌뀍뀎뀏뀐뀑뀒뀓뀔뀕뀖뀗뀘뀙뀚뀛뀜뀝뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀨뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끄끅끆끇끈끉끊끋끌끍끎끏끐끑끒끓끔끕끖끗끘끙끚끛끜끝끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끼끽끾끿낀낁낂낃낄낅낆낇낈낉낊낋낌낍낎낏낐낑낒낓낔낕낖낗나낙낚낛난낝낞낟날낡낢낣낤낥낦낧남납낪낫났낭낮낯낰낱낲낳내낵낶낷낸낹낺낻낼낽낾낿냀냁냂냃냄냅냆냇냈냉냊냋냌냍냎냏냐냑냒냓냔냕냖냗냘냙냚냛냜냝냞냟냠냡냢냣냤냥냦냧냨냩냪냫냬냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇너넉넊넋넌넍넎넏널넑넒넓넔넕넖넗넘넙넚넛넜넝넞넟넠넡넢넣네넥넦넧넨넩넪넫넬넭넮넯넰넱넲넳넴넵넶넷넸넹넺넻넼넽넾넿녀녁녂녃년녅녆녇녈녉녊녋녌녍녎녏념녑녒녓녔녕녖녗녘녙녚녛녜녝녞녟녠녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷노녹녺녻논녽녾녿놀놁놂놃놄놅놆놇놈놉놊놋놌농놎놏놐놑높놓놔놕놖놗놘놙놚놛놜놝놞놟놠놡놢놣놤놥놦놧놨놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇌뇍뇎뇏뇐뇑뇒뇓뇔뇕뇖뇗뇘뇙뇚뇛뇜뇝뇞뇟뇠뇡뇢뇣뇤뇥뇦뇧뇨뇩뇪뇫뇬뇭뇮뇯뇰뇱뇲뇳뇴뇵뇶뇷뇸뇹뇺뇻뇼뇽뇾뇿눀눁눂눃누눅눆눇눈눉눊눋눌눍눎눏눐눑눒눓눔눕눖눗눘눙눚눛눜눝눞눟눠눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눴눵눶눷눸눹눺눻눼눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉘뉙뉚뉛뉜뉝뉞뉟뉠뉡뉢뉣뉤뉥뉦뉧뉨뉩뉪뉫뉬뉭뉮뉯뉰뉱뉲뉳뉴뉵뉶뉷뉸뉹뉺뉻뉼뉽뉾뉿늀늁늂늃늄늅늆늇늈늉늊늋늌늍늎늏느늑늒늓는늕늖늗늘늙늚늛늜늝늞늟늠늡늢늣늤능늦늧늨늩늪늫늬늭늮늯늰늱늲늳늴늵늶늷늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇니닉닊닋닌닍닎닏닐닑닒닓닔닕닖닗님닙닚닛닜닝닞닟닠닡닢닣다닥닦닧단닩닪닫달닭닮닯닰닱닲닳담답닶닷닸당닺닻닼닽닾닿대댁댂댃댄댅댆댇댈댉댊댋댌댍댎댏댐댑댒댓댔댕댖댗댘댙댚댛댜댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓더덕덖덗던덙덚덛덜덝덞덟덠덡덢덣덤덥덦덧덨덩덪덫덬덭덮덯데덱덲덳덴덵덶덷델덹덺덻덼덽덾덿뎀뎁뎂뎃뎄뎅뎆뎇뎈뎉뎊뎋뎌뎍뎎뎏뎐뎑뎒뎓뎔뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎠뎡뎢뎣뎤뎥뎦뎧뎨뎩뎪뎫뎬뎭뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃도독돆돇돈돉돊돋돌돍돎돏돐돑돒돓돔돕돖돗돘동돚돛돜돝돞돟돠돡돢돣돤돥돦돧돨돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돼돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됐됑됒됓됔됕됖됗되됙됚됛된됝됞됟될됡됢됣됤됥됦됧됨됩됪됫됬됭됮됯됰됱됲됳됴됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄둅둆둇둈둉둊둋둌둍둎둏두둑둒둓둔둕둖둗둘둙둚둛둜둝둞둟둠둡둢둣둤둥둦둧둨둩둪둫둬둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒀뒁뒂뒃뒄뒅뒆뒇뒈뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒝뒞뒟뒠뒡뒢뒣뒤뒥뒦뒧뒨뒩뒪뒫뒬뒭뒮뒯뒰뒱뒲뒳뒴뒵뒶뒷뒸뒹뒺뒻뒼뒽뒾뒿듀듁듂듃듄듅듆듇듈듉듊듋듌듍듎듏듐듑듒듓듔듕듖듗듘듙듚듛드득듞듟든듡듢듣들듥듦듧듨듩듪듫듬듭듮듯듰등듲듳듴듵듶듷듸듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓디딕딖딗딘딙딚딛딜딝딞딟딠딡딢딣딤딥딦딧딨딩딪딫딬딭딮딯따딱딲딳딴딵딶딷딸딹딺딻딼딽딾딿땀땁땂땃땄땅땆땇땈땉땊땋때땍땎땏땐땑땒땓땔땕땖땗땘땙땚땛땜땝땞땟땠땡땢땣땤땥땦땧땨땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떠떡떢떣떤떥떦떧떨떩떪떫떬떭떮떯떰떱떲떳떴떵떶떷떸떹떺떻떼떽떾떿뗀뗁뗂뗃뗄뗅뗆뗇뗈뗉뗊뗋뗌뗍뗎뗏뗐뗑뗒뗓뗔뗕뗖뗗뗘뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗬뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏또똑똒똓똔똕똖똗똘똙똚똛똜똝똞똟똠똡똢똣똤똥똦똧똨똩똪똫똬똭똮똯똰똱똲똳똴똵똶똷똸똹똺똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙈뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙤뙥뙦뙧뙨뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚜뚝뚞뚟뚠뚡뚢뚣뚤뚥뚦뚧뚨뚩뚪뚫뚬뚭뚮뚯뚰뚱뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛔뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛰뛱뛲뛳뛴뛵뛶뛷뛸뛹뛺뛻뛼뛽뛾뛿뜀뜁뜂뜃뜄뜅뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜨뜩뜪뜫뜬뜭뜮뜯뜰뜱뜲뜳뜴뜵뜶뜷뜸뜹뜺뜻뜼뜽뜾뜿띀띁띂띃띄띅띆띇띈띉띊띋띌띍띎띏띐띑띒띓띔띕띖띗띘띙띚띛띜띝띞띟띠띡띢띣띤띥띦띧띨띩띪띫띬띭띮띯띰띱띲띳띴띵띶띷띸띹띺띻라락띾띿란랁랂랃랄랅랆랇랈랉랊랋람랍랎랏랐랑랒랓랔랕랖랗래랙랚랛랜랝랞랟랠랡랢랣랤랥랦랧램랩랪랫랬랭랮랯랰랱랲랳랴략랶랷랸랹랺랻랼랽랾랿럀럁럂럃럄럅럆럇럈량럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟럠럡럢럣럤럥럦럧럨럩럪럫러럭럮럯런럱럲럳럴럵럶럷럸럹럺럻럼럽럾럿렀렁렂렃렄렅렆렇레렉렊렋렌렍렎렏렐렑렒렓렔렕렖렗렘렙렚렛렜렝렞렟렠렡렢렣려력렦렧련렩렪렫렬렭렮렯렰렱렲렳렴렵렶렷렸령렺렻렼렽렾렿례롁롂롃롄롅롆롇롈롉롊롋롌롍롎롏롐롑롒롓롔롕롖롗롘롙롚롛로록롞롟론롡롢롣롤롥롦롧롨롩롪롫롬롭롮롯롰롱롲롳롴롵롶롷롸롹롺롻롼롽롾롿뢀뢁뢂뢃뢄뢅뢆뢇뢈뢉뢊뢋뢌뢍뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟뢠뢡뢢뢣뢤뢥뢦뢧뢨뢩뢪뢫뢬뢭뢮뢯뢰뢱뢲뢳뢴뢵뢶뢷뢸뢹뢺뢻뢼뢽뢾뢿룀룁룂룃룄룅룆룇룈룉룊룋료룍룎룏룐룑룒룓룔룕룖룗룘룙룚룛룜룝룞룟룠룡룢룣룤룥룦룧루룩룪룫룬룭룮룯룰룱룲룳룴룵룶룷룸룹룺룻룼룽룾룿뤀뤁뤂뤃뤄뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤘뤙뤚뤛뤜뤝뤞뤟뤠뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤼뤽뤾뤿륀륁륂륃륄륅륆륇륈륉륊륋륌륍륎륏륐륑륒륓륔륕륖륗류륙륚륛륜륝륞륟률륡륢륣륤륥륦륧륨륩륪륫륬륭륮륯륰륱륲륳르륵륶륷른륹륺륻를륽륾륿릀릁릂릃름릅릆릇릈릉릊릋릌릍릎릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟릠릡릢릣릤릥릦릧릨릩릪릫리릭릮릯린릱릲릳릴릵릶릷릸릹릺릻림립릾릿맀링맂맃맄맅맆맇마막맊맋만맍많맏말맑맒맓맔맕맖맗맘맙맚맛맜망맞맟맠맡맢맣매맥맦맧맨맩맪맫맬맭맮맯맰맱맲맳맴맵맶맷맸맹맺맻맼맽맾맿먀먁먂먃먄먅먆먇먈먉먊먋먌먍먎먏먐먑먒먓먔먕먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷머먹먺먻먼먽먾먿멀멁멂멃멄멅멆멇멈멉멊멋멌멍멎멏멐멑멒멓메멕멖멗멘멙멚멛멜멝멞멟멠멡멢멣멤멥멦멧멨멩멪멫멬멭멮멯며멱멲멳면멵멶멷멸멹멺멻멼멽멾멿몀몁몂몃몄명몆몇몈몉몊몋몌몍몎몏몐몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧모목몪몫몬몭몮몯몰몱몲몳몴몵몶몷몸몹몺못몼몽몾몿뫀뫁뫂뫃뫄뫅뫆뫇뫈뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫘뫙뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫼뫽뫾뫿묀묁묂묃묄묅묆묇묈묉묊묋묌묍묎묏묐묑묒묓묔묕묖묗묘묙묚묛묜묝묞묟묠묡묢묣묤묥묦묧묨묩묪묫묬묭묮묯묰묱묲묳무묵묶묷문묹묺묻물묽묾묿뭀뭁뭂뭃뭄뭅뭆뭇뭈뭉뭊뭋뭌뭍뭎뭏뭐뭑뭒뭓뭔뭕뭖뭗뭘뭙뭚뭛뭜뭝뭞뭟뭠뭡뭢뭣뭤뭥뭦뭧뭨뭩뭪뭫뭬뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮈뮉뮊뮋뮌뮍뮎뮏뮐뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮤뮥뮦뮧뮨뮩뮪뮫뮬뮭뮮뮯뮰뮱뮲뮳뮴뮵뮶뮷뮸뮹뮺뮻뮼뮽뮾뮿므믁믂믃믄믅믆믇믈믉믊믋믌믍믎믏믐믑믒믓믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷미믹믺믻민믽믾믿밀밁밂밃밄밅밆밇밈밉밊밋밌밍밎및밐밑밒밓바박밖밗반밙밚받발밝밞밟밠밡밢밣밤밥밦밧밨방밪밫밬밭밮밯배백밲밳밴밵밶밷밸밹밺밻밼밽밾밿뱀뱁뱂뱃뱄뱅뱆뱇뱈뱉뱊뱋뱌뱍뱎뱏뱐뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱝뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃버벅벆벇번벉벊벋벌벍벎벏벐벑벒벓범법벖벗벘벙벚벛벜벝벞벟베벡벢벣벤벥벦벧벨벩벪벫벬벭벮벯벰벱벲벳벴벵벶벷벸벹벺벻벼벽벾벿변볁볂볃별볅볆볇볈볉볊볋볌볍볎볏볐병볒볓볔볕볖볗볘볙볚볛볜볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳보복볶볷본볹볺볻볼볽볾볿봀봁봂봃봄봅봆봇봈봉봊봋봌봍봎봏봐봑봒봓봔봕봖봗봘봙봚봛봜봝봞봟봠봡봢봣봤봥봦봧봨봩봪봫봬봭봮봯봰봱봲봳봴봵봶봷봸봹봺봻봼봽봾봿뵀뵁뵂뵃뵄뵅뵆뵇뵈뵉뵊뵋뵌뵍뵎뵏뵐뵑뵒뵓뵔뵕뵖뵗뵘뵙뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵤뵥뵦뵧뵨뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿부북붂붃분붅붆붇불붉붊붋붌붍붎붏붐붑붒붓붔붕붖붗붘붙붚붛붜붝붞붟붠붡붢붣붤붥붦붧붨붩붪붫붬붭붮붯붰붱붲붳붴붵붶붷붸붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑뷒뷓뷔뷕뷖뷗뷘뷙뷚뷛뷜뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷩뷪뷫뷬뷭뷮뷯뷰뷱뷲뷳뷴뷵뷶뷷뷸뷹뷺뷻뷼뷽뷾뷿븀븁븂븃븄븅븆븇븈븉븊븋브븍븎븏븐븑븒븓블븕븖븗븘븙븚븛븜븝븞븟븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃비빅빆빇빈빉빊빋빌빍빎빏빐빑빒빓빔빕빖빗빘빙빚빛빜빝빞빟빠빡빢빣빤빥빦빧빨빩빪빫빬빭빮빯빰빱빲빳빴빵빶빷빸빹빺빻빼빽빾빿뺀뺁뺂뺃뺄뺅뺆뺇뺈뺉뺊뺋뺌뺍뺎뺏뺐뺑뺒뺓뺔뺕뺖뺗뺘뺙뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺨뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻐뻑뻒뻓뻔뻕뻖뻗뻘뻙뻚뻛뻜뻝뻞뻟뻠뻡뻢뻣뻤뻥뻦뻧뻨뻩뻪뻫뻬뻭뻮뻯뻰뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼁뼂뼃뼄뼅뼆뼇뼈뼉뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼘뼙뼚뼛뼜뼝뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽀뽁뽂뽃뽄뽅뽆뽇뽈뽉뽊뽋뽌뽍뽎뽏뽐뽑뽒뽓뽔뽕뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾔뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾰뾱뾲뾳뾴뾵뾶뾷뾸뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿅뿆뿇뿈뿉뿊뿋뿌뿍뿎뿏뿐뿑뿒뿓뿔뿕뿖뿗뿘뿙뿚뿛뿜뿝뿞뿟뿠뿡뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀼쀽쀾쀿쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁑쁒쁓쁔쁕쁖쁗쁘쁙쁚쁛쁜쁝쁞쁟쁠쁡쁢쁣쁤쁥쁦쁧쁨쁩쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삐삑삒삓삔삕삖삗삘삙삚삛삜삝삞삟삠삡삢삣삤삥삦삧삨삩삪삫사삭삮삯산삱삲삳살삵삶삷삸삹삺삻삼삽삾삿샀상샂샃샄샅샆샇새색샊샋샌샍샎샏샐샑샒샓샔샕샖샗샘샙샚샛샜생샞샟샠샡샢샣샤샥샦샧샨샩샪샫샬샭샮샯샰샱샲샳샴샵샶샷샸샹샺샻샼샽샾샿섀섁섂섃섄섅섆섇섈섉섊섋섌섍섎섏섐섑섒섓섔섕섖섗섘섙섚섛서석섞섟선섡섢섣설섥섦섧섨섩섪섫섬섭섮섯섰성섲섳섴섵섶섷세섹섺섻센섽섾섿셀셁셂셃셄셅셆셇셈셉셊셋셌셍셎셏셐셑셒셓셔셕셖셗션셙셚셛셜셝셞셟셠셡셢셣셤셥셦셧셨셩셪셫셬셭셮셯셰셱셲셳셴셵셶셷셸셹셺셻셼셽셾셿솀솁솂솃솄솅솆솇솈솉솊솋소속솎솏손솑솒솓솔솕솖솗솘솙솚솛솜솝솞솟솠송솢솣솤솥솦솧솨솩솪솫솬솭솮솯솰솱솲솳솴솵솶솷솸솹솺솻솼솽솾솿쇀쇁쇂쇃쇄쇅쇆쇇쇈쇉쇊쇋쇌쇍쇎쇏쇐쇑쇒쇓쇔쇕쇖쇗쇘쇙쇚쇛쇜쇝쇞쇟쇠쇡쇢쇣쇤쇥쇦쇧쇨쇩쇪쇫쇬쇭쇮쇯쇰쇱쇲쇳쇴쇵쇶쇷쇸쇹쇺쇻쇼쇽쇾쇿숀숁숂숃숄숅숆숇숈숉숊숋숌숍숎숏숐숑숒숓숔숕숖숗수숙숚숛순숝숞숟술숡숢숣숤숥숦숧숨숩숪숫숬숭숮숯숰숱숲숳숴숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅쉆쉇쉈쉉쉊쉋쉌쉍쉎쉏쉐쉑쉒쉓쉔쉕쉖쉗쉘쉙쉚쉛쉜쉝쉞쉟쉠쉡쉢쉣쉤쉥쉦쉧쉨쉩쉪쉫쉬쉭쉮쉯쉰쉱쉲쉳쉴쉵쉶쉷쉸쉹쉺쉻쉼쉽쉾쉿슀슁슂슃슄슅슆슇슈슉슊슋슌슍슎슏슐슑슒슓슔슕슖슗슘슙슚슛슜슝슞슟슠슡슢슣스슥슦슧슨슩슪슫슬슭슮슯슰슱슲슳슴습슶슷슸승슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛시식싞싟신싡싢싣실싥싦싧싨싩싪싫심십싮싯싰싱싲싳싴싵싶싷싸싹싺싻싼싽싾싿쌀쌁쌂쌃쌄쌅쌆쌇쌈쌉쌊쌋쌌쌍쌎쌏쌐쌑쌒쌓쌔쌕쌖쌗쌘쌙쌚쌛쌜쌝쌞쌟쌠쌡쌢쌣쌤쌥쌦쌧쌨쌩쌪쌫쌬쌭쌮쌯쌰쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썅썆썇썈썉썊썋썌썍썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧써썩썪썫썬썭썮썯썰썱썲썳썴썵썶썷썸썹썺썻썼썽썾썿쎀쎁쎂쎃쎄쎅쎆쎇쎈쎉쎊쎋쎌쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏀쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏘쏙쏚쏛쏜쏝쏞쏟쏠쏡쏢쏣쏤쏥쏦쏧쏨쏩쏪쏫쏬쏭쏮쏯쏰쏱쏲쏳쏴쏵쏶쏷쏸쏹쏺쏻쏼쏽쏾쏿쐀쐁쐂쐃쐄쐅쐆쐇쐈쐉쐊쐋쐌쐍쐎쐏쐐쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚쐛쐜쐝쐞쐟쐠쐡쐢쐣쐤쐥쐦쐧쐨쐩쐪쐫쐬쐭쐮쐯쐰쐱쐲쐳쐴쐵쐶쐷쐸쐹쐺쐻쐼쐽쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑈쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑤쑥쑦쑧쑨쑩쑪쑫쑬쑭쑮쑯쑰쑱쑲쑳쑴쑵쑶쑷쑸쑹쑺쑻쑼쑽쑾쑿쒀쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒔쒕쒖쒗쒘쒙쒚쒛쒜쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒸쒹쒺쒻쒼쒽쒾쒿쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟쓠쓡쓢쓣쓤쓥쓦쓧쓨쓩쓪쓫쓬쓭쓮쓯쓰쓱쓲쓳쓴쓵쓶쓷쓸쓹쓺쓻쓼쓽쓾쓿씀씁씂씃씄씅씆씇씈씉씊씋씌씍씎씏씐씑씒씓씔씕씖씗씘씙씚씛씜씝씞씟씠씡씢씣씤씥씦씧씨씩씪씫씬씭씮씯씰씱씲씳씴씵씶씷씸씹씺씻씼씽씾씿앀앁앂앃아악앆앇안앉않앋알앍앎앏앐앑앒앓암압앖앗았앙앚앛앜앝앞앟애액앢앣앤앥앦앧앨앩앪앫앬앭앮앯앰앱앲앳앴앵앶앷앸앹앺앻야약앾앿얀얁얂얃얄얅얆얇얈얉얊얋얌얍얎얏얐양얒얓얔얕얖얗얘얙얚얛얜얝얞얟얠얡얢얣얤얥얦얧얨얩얪얫얬얭얮얯얰얱얲얳어억얶얷언얹얺얻얼얽얾얿엀엁엂엃엄업없엇었엉엊엋엌엍엎엏에엑엒엓엔엕엖엗엘엙엚엛엜엝엞엟엠엡엢엣엤엥엦엧엨엩엪엫여역엮엯연엱엲엳열엵엶엷엸엹엺엻염엽엾엿였영옂옃옄옅옆옇예옉옊옋옌옍옎옏옐옑옒옓옔옕옖옗옘옙옚옛옜옝옞옟옠옡옢옣오옥옦옧온옩옪옫올옭옮옯옰옱옲옳옴옵옶옷옸옹옺옻옼옽옾옿와왁왂왃완왅왆왇왈왉왊왋왌왍왎왏왐왑왒왓왔왕왖왗왘왙왚왛왜왝왞왟왠왡왢왣왤왥왦왧왨왩왪왫왬왭왮왯왰왱왲왳왴왵왶왷외왹왺왻왼왽왾왿욀욁욂욃욄욅욆욇욈욉욊욋욌욍욎욏욐욑욒욓요욕욖욗욘욙욚욛욜욝욞욟욠욡욢욣욤욥욦욧욨용욪욫욬욭욮욯우욱욲욳운욵욶욷울욹욺욻욼욽욾욿움웁웂웃웄웅웆웇웈웉웊웋워웍웎웏원웑웒웓월웕웖웗웘웙웚웛웜웝웞웟웠웡웢웣웤웥웦웧웨웩웪웫웬웭웮웯웰웱웲웳웴웵웶웷웸웹웺웻웼웽웾웿윀윁윂윃위윅윆윇윈윉윊윋윌윍윎윏윐윑윒윓윔윕윖윗윘윙윚윛윜윝윞윟유육윢윣윤윥윦윧율윩윪윫윬윭윮윯윰윱윲윳윴융윶윷윸윹윺윻으윽윾윿은읁읂읃을읅읆읇읈읉읊읋음읍읎읏읐응읒읓읔읕읖읗의읙읚읛읜읝읞읟읠읡읢읣읤읥읦읧읨읩읪읫읬읭읮읯읰읱읲읳이익읶읷인읹읺읻일읽읾읿잀잁잂잃임입잆잇있잉잊잋잌잍잎잏자작잒잓잔잕잖잗잘잙잚잛잜잝잞잟잠잡잢잣잤장잦잧잨잩잪잫재잭잮잯잰잱잲잳잴잵잶잷잸잹잺잻잼잽잾잿쟀쟁쟂쟃쟄쟅쟆쟇쟈쟉쟊쟋쟌쟍쟎쟏쟐쟑쟒쟓쟔쟕쟖쟗쟘쟙쟚쟛쟜쟝쟞쟟쟠쟡쟢쟣쟤쟥쟦쟧쟨쟩쟪쟫쟬쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺쟻쟼쟽쟾쟿저적젂젃전젅젆젇절젉젊젋젌젍젎젏점접젒젓젔정젖젗젘젙젚젛제젝젞젟젠젡젢젣젤젥젦젧젨젩젪젫젬젭젮젯젰젱젲젳젴젵젶젷져젹젺젻젼젽젾젿졀졁졂졃졄졅졆졇졈졉졊졋졌졍졎졏졐졑졒졓졔졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯조족졲졳존졵졶졷졸졹졺졻졼졽졾졿좀좁좂좃좄종좆좇좈좉좊좋좌좍좎좏좐좑좒좓좔좕좖좗좘좙좚좛좜좝좞좟좠좡좢좣좤좥좦좧좨좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좼좽좾좿죀죁죂죃죄죅죆죇죈죉죊죋죌죍죎죏죐죑죒죓죔죕죖죗죘죙죚죛죜죝죞죟죠죡죢죣죤죥죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죵죶죷죸죹죺죻주죽죾죿준줁줂줃줄줅줆줇줈줉줊줋줌줍줎줏줐중줒줓줔줕줖줗줘줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫줬줭줮줯줰줱줲줳줴줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇쥈쥉쥊쥋쥌쥍쥎쥏쥐쥑쥒쥓쥔쥕쥖쥗쥘쥙쥚쥛쥜쥝쥞쥟쥠쥡쥢쥣쥤쥥쥦쥧쥨쥩쥪쥫쥬쥭쥮쥯쥰쥱쥲쥳쥴쥵쥶쥷쥸쥹쥺쥻쥼쥽쥾쥿즀즁즂즃즄즅즆즇즈즉즊즋즌즍즎즏즐즑즒즓즔즕즖즗즘즙즚즛즜증즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿지직짂짃진짅짆짇질짉짊짋짌짍짎짏짐집짒짓짔징짖짗짘짙짚짛짜짝짞짟짠짡짢짣짤짥짦짧짨짩짪짫짬짭짮짯짰짱짲짳짴짵짶짷째짹짺짻짼짽짾짿쨀쨁쨂쨃쨄쨅쨆쨇쨈쨉쨊쨋쨌쨍쨎쨏쨐쨑쨒쨓쨔쨕쨖쨗쨘쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥쨦쨧쨨쨩쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆쩇쩈쩉쩊쩋쩌쩍쩎쩏쩐쩑쩒쩓쩔쩕쩖쩗쩘쩙쩚쩛쩜쩝쩞쩟쩠쩡쩢쩣쩤쩥쩦쩧쩨쩩쩪쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩽쩾쩿쪀쪁쪂쪃쪄쪅쪆쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪘쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪼쪽쪾쪿쫀쫁쫂쫃쫄쫅쫆쫇쫈쫉쫊쫋쫌쫍쫎쫏쫐쫑쫒쫓쫔쫕쫖쫗쫘쫙쫚쫛쫜쫝쫞쫟쫠쫡쫢쫣쫤쫥쫦쫧쫨쫩쫪쫫쫬쫭쫮쫯쫰쫱쫲쫳쫴쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬈쬉쬊쬋쬌쬍쬎쬏쬐쬑쬒쬓쬔쬕쬖쬗쬘쬙쬚쬛쬜쬝쬞쬟쬠쬡쬢쬣쬤쬥쬦쬧쬨쬩쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭁쭂쭃쭄쭅쭆쭇쭈쭉쭊쭋쭌쭍쭎쭏쭐쭑쭒쭓쭔쭕쭖쭗쭘쭙쭚쭛쭜쭝쭞쭟쭠쭡쭢쭣쭤쭥쭦쭧쭨쭩쭪쭫쭬쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭸쭹쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮜쮝쮞쮟쮠쮡쮢쮣쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮸쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯔쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟쯠쯡쯢쯣쯤쯥쯦쯧쯨쯩쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찌찍찎찏찐찑찒찓찔찕찖찗찘찙찚찛찜찝찞찟찠찡찢찣찤찥찦찧차착찪찫찬찭찮찯찰찱찲찳찴찵찶찷참찹찺찻찼창찾찿챀챁챂챃채책챆챇챈챉챊챋챌챍챎챏챐챑챒챓챔챕챖챗챘챙챚챛챜챝챞챟챠챡챢챣챤챥챦챧챨챩챪챫챬챭챮챯챰챱챲챳챴챵챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓첔첕첖첗처척첚첛천첝첞첟철첡첢첣첤첥첦첧첨첩첪첫첬청첮첯첰첱첲첳체첵첶첷첸첹첺첻첼첽첾첿쳀쳁쳂쳃쳄쳅쳆쳇쳈쳉쳊쳋쳌쳍쳎쳏쳐쳑쳒쳓쳔쳕쳖쳗쳘쳙쳚쳛쳜쳝쳞쳟쳠쳡쳢쳣쳤쳥쳦쳧쳨쳩쳪쳫쳬쳭쳮쳯쳰쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽쳾쳿촀촁촂촃촄촅촆촇초촉촊촋촌촍촎촏촐촑촒촓촔촕촖촗촘촙촚촛촜총촞촟촠촡촢촣촤촥촦촧촨촩촪촫촬촭촮촯촰촱촲촳촴촵촶촷촸촹촺촻촼촽촾촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛최쵝쵞쵟쵠쵡쵢쵣쵤쵥쵦쵧쵨쵩쵪쵫쵬쵭쵮쵯쵰쵱쵲쵳쵴쵵쵶쵷쵸쵹쵺쵻쵼쵽쵾쵿춀춁춂춃춄춅춆춇춈춉춊춋춌춍춎춏춐춑춒춓추축춖춗춘춙춚춛출춝춞춟춠춡춢춣춤춥춦춧춨충춪춫춬춭춮춯춰춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췄췅췆췇췈췉췊췋췌췍췎췏췐췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡췢췣췤췥췦췧취췩췪췫췬췭췮췯췰췱췲췳췴췵췶췷췸췹췺췻췼췽췾췿츀츁츂츃츄츅츆츇츈츉츊츋츌츍츎츏츐츑츒츓츔츕츖츗츘츙츚츛츜츝츞츟츠측츢츣츤츥츦츧츨츩츪츫츬츭츮츯츰츱츲츳츴층츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉칊칋칌칍칎칏칐칑칒칓칔칕칖칗치칙칚칛친칝칞칟칠칡칢칣칤칥칦칧침칩칪칫칬칭칮칯칰칱칲칳카칵칶칷칸칹칺칻칼칽칾칿캀캁캂캃캄캅캆캇캈캉캊캋캌캍캎캏캐캑캒캓캔캕캖캗캘캙캚캛캜캝캞캟캠캡캢캣캤캥캦캧캨캩캪캫캬캭캮캯캰캱캲캳캴캵캶캷캸캹캺캻캼캽캾캿컀컁컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕컖컗컘컙컚컛컜컝컞컟컠컡컢컣커컥컦컧컨컩컪컫컬컭컮컯컰컱컲컳컴컵컶컷컸컹컺컻컼컽컾컿케켁켂켃켄켅켆켇켈켉켊켋켌켍켎켏켐켑켒켓켔켕켖켗켘켙켚켛켜켝켞켟켠켡켢켣켤켥켦켧켨켩켪켫켬켭켮켯켰켱켲켳켴켵켶켷켸켹켺켻켼켽켾켿콀콁콂콃콄콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓코콕콖콗콘콙콚콛콜콝콞콟콠콡콢콣콤콥콦콧콨콩콪콫콬콭콮콯콰콱콲콳콴콵콶콷콸콹콺콻콼콽콾콿쾀쾁쾂쾃쾄쾅쾆쾇쾈쾉쾊쾋쾌쾍쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾡쾢쾣쾤쾥쾦쾧쾨쾩쾪쾫쾬쾭쾮쾯쾰쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿄쿅쿆쿇쿈쿉쿊쿋쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿠쿡쿢쿣쿤쿥쿦쿧쿨쿩쿪쿫쿬쿭쿮쿯쿰쿱쿲쿳쿴쿵쿶쿷쿸쿹쿺쿻쿼쿽쿾쿿퀀퀁퀂퀃퀄퀅퀆퀇퀈퀉퀊퀋퀌퀍퀎퀏퀐퀑퀒퀓퀔퀕퀖퀗퀘퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬퀭퀮퀯퀰퀱퀲퀳퀴퀵퀶퀷퀸퀹퀺퀻퀼퀽퀾퀿큀큁큂큃큄큅큆큇큈큉큊큋큌큍큎큏큐큑큒큓큔큕큖큗큘큙큚큛큜큝큞큟큠큡큢큣큤큥큦큧큨큩큪큫크큭큮큯큰큱큲큳클큵큶큷큸큹큺큻큼큽큾큿킀킁킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣키킥킦킧킨킩킪킫킬킭킮킯킰킱킲킳킴킵킶킷킸킹킺킻킼킽킾킿타탁탂탃탄탅탆탇탈탉탊탋탌탍탎탏탐탑탒탓탔탕탖탗탘탙탚탛태택탞탟탠탡탢탣탤탥탦탧탨탩탪탫탬탭탮탯탰탱탲탳탴탵탶탷탸탹탺탻탼탽탾탿턀턁턂턃턄턅턆턇턈턉턊턋턌턍턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯터턱턲턳턴턵턶턷털턹턺턻턼턽턾턿텀텁텂텃텄텅텆텇텈텉텊텋테텍텎텏텐텑텒텓텔텕텖텗텘텙텚텛템텝텞텟텠텡텢텣텤텥텦텧텨텩텪텫텬텭텮텯텰텱텲텳텴텵텶텷텸텹텺텻텼텽텾텿톀톁톂톃톄톅톆톇톈톉톊톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟토톡톢톣톤톥톦톧톨톩톪톫톬톭톮톯톰톱톲톳톴통톶톷톸톹톺톻톼톽톾톿퇀퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏퇐퇑퇒퇓퇔퇕퇖퇗퇘퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪퇫퇬퇭퇮퇯퇰퇱퇲퇳퇴퇵퇶퇷퇸퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆툇툈툉툊툋툌툍툎툏툐툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩툪툫투툭툮툯툰툱툲툳툴툵툶툷툸툹툺툻툼툽툾툿퉀퉁퉂퉃퉄퉅퉆퉇퉈퉉퉊퉋퉌퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉜퉝퉞퉟퉠퉡퉢퉣퉤퉥퉦퉧퉨퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튀튁튂튃튄튅튆튇튈튉튊튋튌튍튎튏튐튑튒튓튔튕튖튗튘튙튚튛튜튝튞튟튠튡튢튣튤튥튦튧튨튩튪튫튬튭튮튯튰튱튲튳튴튵튶튷트특튺튻튼튽튾튿틀틁틂틃틄틅틆틇틈틉틊틋틌틍틎틏틐틑틒틓틔틕틖틗틘틙틚틛틜틝틞틟틠틡틢틣틤틥틦틧틨틩틪틫틬틭틮틯티틱틲틳틴틵틶틷틸틹틺틻틼틽틾틿팀팁팂팃팄팅팆팇팈팉팊팋파팍팎팏판팑팒팓팔팕팖팗팘팙팚팛팜팝팞팟팠팡팢팣팤팥팦팧패팩팪팫팬팭팮팯팰팱팲팳팴팵팶팷팸팹팺팻팼팽팾팿퍀퍁퍂퍃퍄퍅퍆퍇퍈퍉퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍼퍽퍾퍿펀펁펂펃펄펅펆펇펈펉펊펋펌펍펎펏펐펑펒펓펔펕펖펗페펙펚펛펜펝펞펟펠펡펢펣펤펥펦펧펨펩펪펫펬펭펮펯펰펱펲펳펴펵펶펷편펹펺펻펼펽펾펿폀폁폂폃폄폅폆폇폈평폊폋폌폍폎폏폐폑폒폓폔폕폖폗폘폙폚폛폜폝폞폟폠폡폢폣폤폥폦폧폨폩폪폫포폭폮폯폰폱폲폳폴폵폶폷폸폹폺폻폼폽폾폿퐀퐁퐂퐃퐄퐅퐆퐇퐈퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖퐗퐘퐙퐚퐛퐜퐝퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷퐸퐹퐺퐻퐼퐽퐾퐿푀푁푂푃푄푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓푔푕푖푗푘푙푚푛표푝푞푟푠푡푢푣푤푥푦푧푨푩푪푫푬푭푮푯푰푱푲푳푴푵푶푷푸푹푺푻푼푽푾푿풀풁풂풃풄풅풆풇품풉풊풋풌풍풎풏풐풑풒풓풔풕풖풗풘풙풚풛풜풝풞풟풠풡풢풣풤풥풦풧풨풩풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓌퓍퓎퓏퓐퓑퓒퓓퓔퓕퓖퓗퓘퓙퓚퓛퓜퓝퓞퓟퓠퓡퓢퓣퓤퓥퓦퓧퓨퓩퓪퓫퓬퓭퓮퓯퓰퓱퓲퓳퓴퓵퓶퓷퓸퓹퓺퓻퓼퓽퓾퓿픀픁픂픃프픅픆픇픈픉픊픋플픍픎픏픐픑픒픓픔픕픖픗픘픙픚픛픜픝픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷픸픹픺픻피픽픾픿핀핁핂핃필핅핆핇핈핉핊핋핌핍핎핏핐핑핒핓핔핕핖핗하학핚핛한핝핞핟할핡핢핣핤핥핦핧함합핪핫핬항핮핯핰핱핲핳해핵핶핷핸핹핺핻핼핽핾핿햀햁햂햃햄햅햆햇했행햊햋햌햍햎햏햐햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤향햦햧햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇허헉헊헋헌헍헎헏헐헑헒헓헔헕헖헗험헙헚헛헜헝헞헟헠헡헢헣헤헥헦헧헨헩헪헫헬헭헮헯헰헱헲헳헴헵헶헷헸헹헺헻헼헽헾헿혀혁혂혃현혅혆혇혈혉혊혋혌혍혎혏혐협혒혓혔형혖혗혘혙혚혛혜혝혞혟혠혡혢혣혤혥혦혧혨혩혪혫혬혭혮혯혰혱혲혳혴혵혶혷호혹혺혻혼혽혾혿홀홁홂홃홄홅홆홇홈홉홊홋홌홍홎홏홐홑홒홓화확홖홗환홙홚홛활홝홞홟홠홡홢홣홤홥홦홧홨황홪홫홬홭홮홯홰홱홲홳홴홵홶홷홸홹홺홻홼홽홾홿횀횁횂횃횄횅횆횇횈횉횊횋회획횎횏횐횑횒횓횔횕횖횗횘횙횚횛횜횝횞횟횠횡횢횣횤횥횦횧효횩횪횫횬횭횮횯횰횱횲횳횴횵횶횷횸횹횺횻횼횽횾횿훀훁훂훃후훅훆훇훈훉훊훋훌훍훎훏훐훑훒훓훔훕훖훗훘훙훚훛훜훝훞훟훠훡훢훣훤훥훦훧훨훩훪훫훬훭훮훯훰훱훲훳훴훵훶훷훸훹훺훻훼훽훾훿휀휁휂휃휄휅휆휇휈휉휊휋휌휍휎휏휐휑휒휓휔휕휖휗휘휙휚휛휜휝휞휟휠휡휢휣휤휥휦휧휨휩휪휫휬휭휮휯휰휱휲휳휴휵휶휷휸휹휺휻휼휽휾휿흀흁흂흃흄흅흆흇흈흉흊흋흌흍흎흏흐흑흒흓흔흕흖흗흘흙흚흛흜흝흞흟흠흡흢흣흤흥흦흧흨흩흪흫희흭흮흯흰흱흲흳흴흵흶흷흸흹흺흻흼흽흾흿��	

 !"#$%%%%%%%%%%%%%%%%%%%%%%%%%%%%힀힁힂힃힄힅힆힇히힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟힠힡힢힣��	

 ��	

יִײַשׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּ��	

נּסּףּפּצּקּרּשּתּוֹבֿכֿפֿ�������	

�������	

����������	

��������	

����������	��	

����������	

��������	������	

��������	
��������������������	

������	
��������������������������������	

������������������	

����������������������������������������������������������������������	
������	

��	

������������	

 !"#$%&'(��	

������	
��������	

��	

��	

����	

������������������	

��	

A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI;8,���Tl���|\����l���������,���zRx�$���@FJw�?:*3$"D��0\����p����AH�����lF�B�B �B(�A0�A8�DP�
8A0A(B BBBA����$HWGNU�@ $`i@��8t����
PP�`i`���8t����	������
D$$���o`��
�$H���	���o���o����o�o����o�$0@PGA$3a1�QGA$3p1113PDGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYP_GA+GLIBCXX_ASSERTIONSutf8_mac.so-3.4.4-3.el8.x86_64.debugm�D;�7zXZ�ִF!t/��/0]?�E�h=��ڊ�2N����^ ���IJ�L~}��\y�&s�Q���E��NU��ߵݦzK��U�����N;��?�@��nj�K���=��CX���Ԉ�P�!U�ʮ�����U�t��8z�P�Q�KE��S4�
e|eX;��J�c;x�4�g\�n��
��D�/vm�!Q)t� ���QT2��	�Q����}{�,����[�������h
��u�a�p�gjlhhJ}2�������ԳP]J��JAH���7��p�Ax��М�5�L�O�|�p�}-��e��\m
@+�P�j�ٵ����L�@E�aH��N0JR�~.�t�m�cY����Zl��ՠ�RYICۖ����e5��ļa r��|;��BPR���D�!:;����
n��>\#8���h��9��r�����'|*_
7$��A4&�5�qT�BG4W�NDF|1�;¤C��6O��C�6O9�*���[����r��\���I�M�˶�Ͽ��f�˥Y\�6`‘T�T4��7�C����v'{#�~�c�>IQX�N2���nޓ_�l���l&4��x^w��T8��3�$3�Z(���|����A�Z9\^:�+�'c�M$�V�8ͧ����]�*�����
��w�:�,(0���AI�{����AY|��I���4�X���fTD�!ѯ˧_wQ�����'u��2�l��0�1�D+�z�4�Ѽ�|REe�y}ܾ�aE�I���7���V�=x��gЬN[�����5��j����#1=�/D�9��]�����r���9�d�z����,$�)�g�h��<�q"��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0��8���o��E���o��0T���^B��Hh��c  @n``0w���}DD
�``� ���<�00�� �$�$� $ ` ��$� ��$�P� $�� d�H8",d"p�%"PK*J[���h�h�)lib64/ruby/enc/trans/emoji_sjis_docomo.sonuȯ��ELF>�@h�@8	@�� ��!�!�� ����!��!  888$$ннн  S�tdннн  P�td4�4�4�$$Q�tdR�td��!�!��GNUE6�0�sA�SK�i5�s4�@!	BE���|�K>�qX l , F"��!��!U�$��!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_emoji_sjis_docomorb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��!p�!0 �! �!@�!�H�!�X�!�Rh�!���!���!���!�R�!���!��!��!��!��!��!��H��H�y�!H��t��H����52�!�%3�!��h�������h���������%
�!D���%�!DH�=9�!H�2�!H9�tH���!H��t	�����H�=	�!H�5�!H)�H��H��H��?H�H�tH���!H��t��fD�����=��!u+UH�=��!H��tH�=��!�Y����d������!]������w������H��H�=Q�!����H�=��!H�������H��H���UTF8-DOCOMOSJIS-DOCOMO 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓	∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯	0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん�\ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω~�АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюя─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂=�	�p①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ	㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪��	亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭z�	院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改9d魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄9`機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈9\掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向9X后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷9T察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周9P宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾9L拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線9H 繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只9D#叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓9@&邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入9<)如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美98,鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋94/法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒902諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯9,5蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕	弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲�(8僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨9|:咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩9x=奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏9t@廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛9pC戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼9lF曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣9hI檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌9dL漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱9`O瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬9\R磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆9XU紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋9TX隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈9P[蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞9L^襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊9Ha蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮9Dd錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰9@g顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈9<j鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙	�8m纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱9�n犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"v�q9�t9�w9�z9�}9��9��9��9��9��9��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯9��涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙9��髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	5��T��hx�	\XTPLHD@ <#8&4)0,,/(2$5 8t:p=l@hCdF`I\LXO。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚TRPULXH[D^@a<d8g4j0m�n�q�t�w�z�}������������������Ԙ�ܘ	���N���}�L���	Ț	�~��5
�w
p	�������������������������������������������������������������������������������
�����	���������������
��	�F�@�A�B�C�D�E�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�p�q�r�s�t�u�w�x�y�z�{�|�}�~����=���������������������������������	�vĜ���w
�	�]�\�e�f�g�h�����d�c���������0�	��������%x�	�T�U�V�W�X�Y�Z�[�\�]����������������g��	�����������	��������	�����������������������a��������������������-
0�	��������������o
��	�������������
Ȟ	���
�	�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S5���������	����������������������������������������������������wd�	������	��������������	������������=,�	����T���	���������l�p������(��������\����$�L�d������@�A�B�V	�X�Y�Z�q�r�s�t�u�v�w�x�y�z�����k�l����E�	�������������������������������������������������������������������������������������������������������������������������������L�����������������������������������������	�J�K�T�U�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�X��_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������	�E�[�R�SD�	������M@�	�����������\�	�e�i�`�c�a�k�j�d�l�f�n���	�_�m�b�g�h�~��������	�r�s�o�p�q�uU�	�t����D�P�<�8��T�x�����(��0�����	�������O�����s�^���N���������u���������L�������������O������h�	���T�v�V�����R�h����������������������]���T	�������\�����������]�������j�i�����������S�������������������������l�T��Y�m��	�����w�����������e�d�����t���W�����M�������������������C�N���O��	�P�������������x�����`���������L�Q�f����#��	���A�������Z���C�����R���]���������C�����������������ge�	�������T���������S�V�����U���������D�������N�����d�	�W�����E�r�W���������������������M�������C���o�U���������Z�Ԩ��L��x��\�̨P�+X�	�����q���{�����|���������[�����Y���l���������������`����m���X	�^���\�����������������������]�����������U����	���T���_�P�������b���B�������X�p�	�C���@�A�������l�D�a���E�H�F�m�G�I�`�K�J��3���V�M�N	���L���Q�P�O���R���S�D���U�T�W�V�Xu$��Y��	���Z�[���������b���[���e���Z�\�}���]�c���S�_�`�����Z�a���������T������b	�c���~�f���e���g���h�`�i�j�k�����d���n�l���m�y�o�p�q�~�u�s�t�r���v�����w�e� �	���x�y�y���������z����{�}�����}���f�~���M���������o����;Ȭ��	�n���������������Y���g�����������������������������h��}H�	�������������O�����U���������������������������n�����ȭ	�c�����������������h�������i���w�������[���J�������N@��j��	�u���E���������������k�������������������M��������������C���l����	�����m�������������k�����x�������n�����������C�������@����\	���������������������������P���m�����T�����K�����o���p�����������į	�����p���������������~�X�}�����q������	\�	�Q�������y�F�o�����f���������r���b�p���������@�����������������j�E�����i��K��	���h�e���g���D�����@���f���N�����i���������������z�����������\���	�C����������������������������������������	�����u���a���������t���B�����v�@���]���P���D���CD����i�A	���������E���N�F�G�����L�K�N�M�J�wS��	�S���O�H���I���S�B���Y�X�O�����P	���U���R���[�V�W�T�Z�Q�`�e�a�`��\	�f�P�x�h�A�^���b�[�������c�_���i�g�r�i���d���c��	�m�k���p�j�n�l�k�o�r�w�u�t[�	�Q���q�s���R�v�������}�{�|�~�`�	�\�X�x�y�����������������������	���d���������X����������!���������	�����������d���l�����c�������}��������c0���	�������������������������y�������\�n�����������	�����V�������B�y�����z�R��������	�������^�����C�_�����{����)T���	�����}�|�������������W���u�������|����k���x	������������������������������g�����������	�����Y�����h�������������U�����o���m�T�	��������������n�����������������1��	�����d���������������������������m�p�s��������������������s�	������������[�O���g�������������V���v�������������������	�����������t���_��z������������������������D�������z�@�D��	�A�@�����D�J�W�d�����B�E����W�i�F�������9��	�G�o�n���������K�L�I�W���H���P�����p{�	�����Q�O���R�P�N�P�M�����V�W���L��S�K	�k�U���X�w�Y�T�����	�}�Z�Q�[�_�\A к	���^���]���k�d�a���`�b�c�e�f� ��	���h�g�i���l���d�j�m�n� @��q	�o�p�q�r�E�s������t�u�y�F���G���v�w�w���x���y�z�{�}!|��~	�����F�����v�����G���@���������X�����q�����G���{���Q���������e�hI!���	���������������x������������Q���@�����������J���R����������������������!��	�������������������q��������������������������A�������K���s���A�!0�����	�����������r�����������W���j���w���������R����"��	������������Z���������x�������������Q"4�	����������������������������s���"��	�������������R������������������"�	�������������������������#0�	������������������������������Y#x�	������������������B�����H���I�������������b���J���F���#ȿ	�s�z���������������������t�����A���������X�#D���	���������y�����������������������N�����K�������c�H����$��	���L�������������X�M�{���x�����������N�fa$(�	�����p�����L�����f�@�C�D�B�_���F�E�A�G�H�I�L�J�K�M�����N�����U�O���$��	���P�M�Q���T���������U�|�����V���O�o����������W�X�^��������Y�J�e�$�	�Z�K�[���\�]�_���`�a�b�S�R�c�`�F����V���j�d���e�e�f�����i'%�������h�g�a��	�m�k�j�������l�k�]���p�o�n�q���r���z�s��������O�t�Ji%4�	�S�K���E�u�u�Y�Z���z����w�����y�O�x�v���|�%���h����|����@���8���8���T���T�ܱ<����X����X����(�����L����L����������D���Ⱥ�8�t����(���,���ؾ(�p���<��� ������,��� ��(�	�������{���|�������v���}�}�������������������%4�	�����������������P����������~�������p�����������������b��/&��	�������������������������������I���x���Y�����{������������q& �	�������f�����������������y���S������z�������������&�����D	���������������������������������������������& �	�������������Q���T���������������������d�S�����������������c���|7'��	�J������������������������e��������������y'(�	���������������������������������������������'����	�����������^�����������������@���A���B�C�Y�D�E�F�������[�'�����G	����������H�������K�I�L�J�M�����}���N�Q��?(|��Z	�O�V���P�c�}�R�S�W���T�R���e����������������Z�����(��	�c�S�]�d�_�f�b�a���[���Y�����U�X�S�����`�q���g���@�h�m�i���n�A���E�\�(`�	���k�w�l���g�������j�����U�����p�})��	���J�q�s�o�����{�������~�����x�����PG)L��v	�|���{���u�z�r�t�@�|�|�����T�y���T�����[�w�d�f���}�~���)����	���������`�����K�g����������������h�)$�	�������������r�������������g��
*��	�����E�������������O*��	�����T�����Q����P�������d�B���o�h�����*�	�i������������^���������F���C���[�����������������*`���	�������������������x�������������U����+��	��������q�~�����s�����������U���h�������G�~��W+4�	�������|���k�������l�������������������a�f�z�V�������{�+��	���������������������������������U���|���{���������+��	�V��������������������������f��t����������G����������E,��	�����W�����W���N��������������A���������i��������q_,�	�����������������g�������������b����\�A��������,��	���@�����B���C�j���D�F�G�H���g�X�I�J�������J���]�\���,���	�����L�������K�����L�N�]���M���N�O�������{�D�Q���p�S�V�U�����R%-��	�T�W���������������Z�m�X���Y�����[�\�����a�Y�t�^�������n�f�`����g-�	�f���]�c�b�����������}�g�e���d�_���k�i���g�m�s���-������	���u�A�t���^�����_���M�p�o�q�n�v�l�j�r�h�������������`�-�	�������h�����I�x�Z���z�����}���j���i��-.���{���j����	�y���|�~���K�����j�������V���O����������o.��	�����~���������[���������������������B���������������.h�	�����H�����������_���������I�����������X���������.���o��	�����������A����������������������������������������5/P�	�k���������^�����������������������|�������������O�y��w/��	���T���|���P�����Y���������������������/L�	��������\�����������l���������������������������/��	�������������������W�����������������~���������������M=0�	�����������k���@������������������0���h	���������@�w�������K�G���F�E�B�0��	���D�C�I�E�L���H�J�������M�Q�N18�	���O���R�S�T�U���������~�W�V�Y�\����E1��	�\�[�]���V�^���`�_�a�b�c�~���������c�������d�e���f�1���g	�i�h�w�}���c�j�l�B�k�m�n�o�p�q�s�r�t���i�u�E�k�v�a�1P���	�B�w�x�������y���������z�|�{�~�}2��	�����������C���������X�i����M2����`��	�����������������]�r�����������������D���2d�	�������������������B���������v���������������������������2��	���������������@�����������A�g���D�����������j3P�	���m�����������������k�^���F�������������hU3��	�����������l�����Y�_�Q�\�������C�Z���3 �	�������O�����������������U�t�������3x���	�������������i�����������W���������������[���~�����������Y��4��	�����������a�k���������������n�������Q�������������`����������]4X�	�������������X�����N�����������p���4����	���������������a�������������n���M�����48�	�������������������������������H�B������#5��	���Y�����R���A�������������������Q�@��e5��	�������N�I�������R�K���H���k�E�D�M�5T��G�F�L	���C���O�P���U�T�V�Y�b�S���W�5�������Q�Z	�X�]�[�^�a�Z���G�����\�`���_�J����d�h+6���������� �����t���X���D����x�����X���,����������|���������`���H���D��������0�|���H����\���H����p���P���0�����L�����`��h�	�f�����b�c�g�e�m�m�j�i�l���n���������o�q�pm6t�	���r���s�����D�������6��	���F�����u�t���x�Y�{�v�z�y�_���F�6�	���}�G��~�|�w�B�37`�	���������������R��u7��	���������������������������7��	���F��o���n���M���7(�	��R������������z����W���C��������;8l�	���������������������u���}8���	�������v��������������S�q�����������84�����	����]������������@9��	������������_���������������K���T��C9��	���������������A�������L�������P�Q�����9L�	�����������b�������l���C�������9��	�������������������D	:����	�����E�X�����H�F�����G���]������J����K:,�	�������I�������K�M�L�N���������i�����:��	���������l���������O�����������������:��	���P���Q�������;@�	����Z�@�Z�A���B�C�D�F�G�E�r�I�HS;t�	�R�K�J�L�M�O�N���Q�P���r�[�R���Y���S�p���T��c�R�b�\�j�������U�;��	�V�[�Y�X���E�W���������\�Z�{�����L�^���l�_�]���`�a�S�����f�c���b�E�;T�	�i�d�e�h�g�D�a�`�^�j�k�l�n�m�u�v���p�r�t�]�u�s��<��	�o�q�a���x�w�y�������z���|���{������s���}�~[<X�	��������������<��	���������������������������o����S�<��	�T��I�F�c����H�����W�U�V�X���������M!=��	��u�~�m�v��������X����������������������c=��	���������������^�����������������=l���	�Z�������������r�����������=��	�������������u������������������)>�	�����������������m�����Z��������k>`�	�������������\�u���m�C�j�v�{�>��	���]���^���d�������_���>��	���������V�����O���q���������������m��1?4�	������������A�@������C�Bs?��	���D�b�F�E�G�����I�H�`�������?���J�V	�_�F���S�P�O�c�L�N�j�_�M�K�I���[�����Q�R�?(��h��	�\�T�S�������d�f�T���U�W�X�H�Y�Z�[������9@���G��	�\�H���b�]���d�`�a���`�^���_����{@���H	�b���c�����B�d�e�t���g�f���i���l�j���m�k�e�@P���	���m�s�o���n�����n�p�q���r�n�t�����u���v���@��	�������w�����y�{�x�z�A�|�E���q�~��M�AA �	������}������g����������������v����h�G�j��[����^�|�����A|�	�������������J��}�y�����������A�	��M������������}����������������B|�	�������������Z������k����\�������IB�����	������z��������������U�������BP���	�����������������������������������B����	��������������������������������C�	���H���������������e�S�l��������������������������������QC\���	�������W�������������f�����������n���C���I	�@���g��C���[�R���B���h�������A�f�a�������F�����G�a�I�����H�CD�	�I���g�D�J�m�E�o�M�Q���L�U�n�i�����R���O�P���N�K�G�����WD��	�T�V�S�p���X���e�p�a�[�_�����Z�b�f�j�����\�o�d�Y�]�^����YDP�	�]������������q�g���c�h�j���m�i���������l���k�D�	�����n�u�o�v�r�����t�q�w�p�c�D�k�s��{�~�|��z�`���D<�	���}�x�@�q�J�r�D�U������y������J�����E��	�[����@���Z�������aE$�	�����Ep�	��s����������������r�u�����l������E��	��������r��������t��Q�A�`�������H'F��	���������K���������������������|��iFp����X����� �d���,�����D�����$�����8�l���L���P����x���d����X�����,����� �����H����t��t���H����T���<���H��4����h�����h������s�V	�l���������������k�������������������^���F�	�����������������������������������E�����W���F<�	�����������]�������I���������������b�����m�n�����x/G��	�����_�w�������������E�������������E�\qG�	�������e������r�����E�]���B�Gx�	�A��t���D�C�o�r�T�H�I���G���F�J�����B���G��N	�O�K�L�M�p�U�Q�����G�P�S�R�c�V�W�V�X�Z�^�[�Y�^7H(��\	�]���d�_�`�a���c�b�e�f�g�b���h�����L���v�i�j�P�kyH��	�l�m�n�o�����p���q���r���s�����C�w���M�t�q�u����w�������v�D�H��x	���z�y�|�{�}��~�����������F������H��	����������H�����m�c���F�|�����?I��	����������c�����������������p������IP�	�v����������s��������������������I���	����t�`��r���w��������xJ(�	����������������������GJt�	�����y�e������������p����������H����z������J�	���������G��������������������������J8	���{�t���������������������������K��������
K�	�������N�����f���������|����������OK�	���~���u���W�������������D�H�@������KH��	�������������U��������������K���@	��������B���}�C����~����n������J�P�QL��D	���N�F�H�R�G�K�����L�O�E�E�I�F�d�O��������V�TWLX	�m�S���U�W�X�[�Y���Z���M���\�a���`�L�	�A�b�h�]�_�^�P�A�d�c����e�f�L	�g���s�i�|�������j�k���l����Md	���q�r�m�\�n�a�o�p�z�t�w�s_M�	�u�v���x�`�u�a�{�^��|����}�~�g����������M��	�I���������w����������MX	���X����I����������������%N�	��Z���������gN�	������������I�a��NH	�����������y����������N���	�����O�s�����p�X���q�����t�����\����������������-O�	�����U����������������������������������oOX	���������������T��������������������������������O�	�������������J���A�������������O(	��������������A�@�C�B�D�P�E�F�G��5P|	�v�H���e�I�J���K�K���`�L�o�M�O���N�e�P�Q�R���S�T�UwP��V	�p�W�X�Y���G�Z�[�\�PL��	���]�v�u�`���_��P�^���L�a�b�����c�K�������i�d��f�����P�	�e�h�i�����g���]�f���r�m�w�����l�l�k�F�l�b�Y����j=Q		�o�p�n���_���F�s���a�U�v�����r�w���t�u��q�����N�����b���Qx		�z�x�k�����y�z���_�{������������~�|�@����}���������Q�	�d�y��	��������������u����w����T����R�
	���������������x����c��������ER�
�	�]�����Q������R`	�J���R�	�����L����������������^��S�	�����e�����L�������v�n�����������������������M���������\���fMS�����G���d	���������G���o���^�����������������q�������w���S�	��������������������������S,
	�������q������������NTp
	�����z������������UT�
	�����������������������������H���H�����T�
	�����x��������H����T<	����@�D�A��B�C�J�E���G�I�F�L�R�K�MU|	�N�Q�P�O�S�R���U�T�V�W�Y�X�g�Z���[�]�^]U�	�_�\�`���a�O�R����b���]�c�f���e�d�y�g�U0	�r�i���h�q�k�m���j�l�p�n�P�o�r�y���S�s�A�u�t�x�`�U�	�w���v�{�z�y�Q�|�}�~���D���#V�	�h�������������C�J�_��������HeVH	�I���v�}���������������R��q���������V�4����p��� �������H��� �l��0��@��P�\��P�@��P� t�D|�p	�	|
�
X����$
h
�
�
4t�(��@������	����t�����������r�������������������A����T�i������N��V	�����x����V�^�����������B�����������k���y���K����������J�I�������+W�������	�����W���M�������@mW`	���x�Y���S�����s�X���s�W�	������A���W�	�����U���z�����������|���������V�����y���_3X,	�����������������X������������������uX�����	�������������d������������B������j����������t�������������X�	�����b����������n������������X��	�S�����������������������������z���g;Y���	�e���C�L����������������K��}Y<	���N������������s�e�����I���|��Y�	���K������@�B������A�C����d���B����^�E�D�FZ�	��B���t���K���b�G�H�L�J�����I��CZ`	���O���������Z�M�N���L�P�Z�	�V���Y�X�L�Q�R�U�W�����Z�T�S���Z�	�^�_�`�]�\�����[�d�b���c�a���e	[<	�f�h�������g���s�i�l�j�k�m�o�p�q�t�r�u�wK[�	�v�[�	���[���	�x�M�y���z�J�[�������{�|�}�~����t�}������{����\	���������������S\�	���������h�j���\���	������~����������@�w���������A�������������z�\	�����G���@��K���u������������B��������������������]�����	�Y���W���������G������������J�������_������d[]��	���k������������������������I���P���������]�	���������������������������������r���������v���x���C�������]	���������������������f�������������!^�	���������������B���������C��c^�	�����������{�����a�����������z�����j���o����p����^8	�����z�{����������^����������@�B�A�^�	���C�D�E�F)_	�H�G�I�����H�Q�J�K���Z���������O��k_0	�L���M�{�a�`�N���O�P�R�S�U�Q�T�����V�W�X�Y�_�	�Z�\�[�^�a�]�_�`�b���_�	���c�d�����e�]�n�f�g�y���h1` 	�����w�������m�����l�j�k�i�w�n�o�p�q�s�r�xs`d	�t�v�R�u�����x���y���z��`��}	�|�~�{����������������` 	�����[�9a\ �	���������������������E������{a� 	��������������T���S�a� 	�@����������������D������a@!	�����������������L���N������Ab�!�	��������������I�����������~���������b�!��	���������������k�����������������h�������������V���bH"	�����L��������������c�"	�������������P����Ic�"	�����������������������������������c,#	�����D�C�E�L�@�A�����B���Q�J���F�K�c�#	�H�G�{�L�M�N�I���O���S�T�Rd�#	�Q�W�P�U�V�Y�X�[�\�]�h�Z�����^Qd($	���_�`�a�dt$	�b���c�d���d�$	�e�f�g�h�k�i�[�j���l���m���n�p�q�o������������e�$	���s�o�t�u�v�����w�������x�z�y�{�|�}�~�������Ye$%	���C����l���@��e�%	��V��������������������e�%	�����s�f,&�X��$��x�4��X��4����������0�(|�\� T x � 8!�!�!@"�"�"$#�#�# $l$�$�$%�%�%$&H&afP&�f��@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��X'�����������������������������������������������������������������d(����������������������������������������������������������������������������������������������������������������@�A�B�C�p)�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������|*���������������������������������������������������������������������+���������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G��,�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������-�������������������������������������������������������������������������.�������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K��/�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������0�����������������������������������������������������������������������������1�����������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O��2�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������3���������������������������������������������������������������������������������4���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�6�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������7���������������������������������������������������������������������������������������������������������������������������������8���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�$9�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������������������������������������������0:���������������������������������������������������������������������������������������������������������������������������������<;�������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�H<�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������������������������������������������������������T=���������������������������������������������������������������������������������������������������������������������������������`>�����������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�l?�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������������������������������x@����������������������������������������������������������������������������������������������������������������������������������A���������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c��B�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������������������C����������������������������������������������������������������������������������������������������������������������������������D������������������������������������������������	�f�E\(h)t*�+�,�-�.�/�0�1�2�3�4�5789(:4;@<L=X>d?p@|A�B�C�D�EF�g$F	��Ig�F	���g�F	�s�~���������B�Y�a�b�c�e�i�l�u���������������������g�F	�I�����������i�j���{�C�|�D�^�O�P�Q�R�S�T�U�V�W�X�F�G�������H���`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�m�_�n�O�Q�dG�M�����������������������������������������������������o�b�p�`	�������������������������������hpH��������������������������������	QhxI	������P����hJ��F�F\GhHpIJ(J�h0J(�i\Jw
\JIi\J��������� �(�ؠ`���,�l��H'P'�FTJdJlJtJ[i|J@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmmmmmmmmmmmnopqrstummmmmmmmvwxyz{|mmmmmmmmmmm}~������������mmmmmmm��������mmmm�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWWWWWWWXYZ[\]^_`abcdefghijklmnoWWWWWWWWpqrstuvwxyz{|}~��������WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW@�	

 !"""""""""""""""#$%&'()*+,-./0123456789:;<=>?@ABC"""""""""""""DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	

 !"#$%&'()*+,-./0123444444444444444444444444444444444444444444456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	
















































































































































































�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx��������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

����	

������	

��������	

��	

������������	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456788889:;<8������	
��	
������	
��	

 !��	

��	

 !"#$��	

 !��	

��	

��	

��	

��	��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'��	

��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$%&��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	
��	

��	

 !"��	

 !"#$%&��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

 !"��	

��	

 !��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

 !��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	
��	

��	

 ��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	
����	

��	

 !"#��	

��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'()��	

��	

��	��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

������	

��	

��	
��	

��	

 !��	

��	

��	

��	

��	

��	

��	

����	

��	

��	
��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	
��	
��	

��	

��	

��	

������	

��	

��	
��	

����	

 !"#$%&'()*+,-./0123456789:;<=����	

��	

������	

 !��	

  !"#$%&'()*+,-./0123456789:;<=>?��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!���������	




; <I��<lI��dLJ��|zRx�$�H��0FJw�?:*3$"DI�� \�I��$HWGNU�p0 �!���J�RRj��R�����RRj��R�����H
��!�!���o`��
���!0�h	���o���o����o�ox���o��!��GA$3a1H�GA$3p1113��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignemoji_sjis_docomo.so-3.4.4-3.el8.x86_64.debug��N�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N���n ��,J��,"k.��iC�Gd�(���	�U���w�:gR�Ӥ�)rV��I�J��3{��qB�pQZ�~dd������P��"Ola��1\a	�K�g"���"�����s�����M^lա�zKB�k��Aa��&�
���mZ#�^#�Q��H2�.&�\�7�Fq7J��P@M�s��D�*��A�眖O	ϗtO���h
���G~S���d�7��|(��+��z��y�x��z�l���J7v�o�q>�X�g���!�S�S$@+�p\��?\�>})�4�	a�^�\?E��$�c5������T=��;�p���z>,��U�jJ��:ڐI?����Z�j���ԋ�A���b?Ȫ��Ԃ�󙀿P ev9����J��dda�Y��$KBr��nj�$CPc���:wߨa <ge���g{��̯T�2q.��z�#�+�B�de��5���Za|���'w̟���j��0�&*�$�1��;�A��	h���'d��]ٰKE����1 ��_�t���f��{?���n�?.�Rm��V<��e��
1!��$�:���yUL�ū�^��V}����i1LM�9�*
�v�e����S�D2��.��2�O�^�?���T�(�Z�*7Jh���Dֆw�3�a:���KȰ�8󊫫=?��/��G���	��nlB����Ǟ�a�n�ҭ�3��ݲf�7������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���oxxE���o�� T��h^B0hHHcpp0n�� w���}��
���r� �4�4�$�X�X�t�нн ��!���!�� �! �` ���!�� ���!��H��!����a�����4�,@�"PK*J[j�Z��-�- lib64/ruby/enc/trans/japanese.sonuȯ��ELF>�@�&@8	@�
�
   �� �� �   888$$�
�
�
  S�td�
�
�
  P�td


44Q�tdR�td  ��GNUV�,�][M�o
͞zrDֶf�@ �BE���|�|��qX c , F"�  �  Up$�  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_japaneserb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� � P    @ �H �X �	h �� � �� �� �	 �X �� � � � � � ��H��H�Q H��t��H����5 �% ��h�������h���������%� D���%� DH�= H� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�� H��t��fD�����=� u+UH�=z H��tH�=� �Y����d����} ]������w��������~���t@����A�0������޺pAF�k������p�����~O�@�q�@�9�����H��tN��V=��p�Oƍra��x���@�9�@�q�f.��r`���~ލr�x���D����A��f���H��H�=a �<���H�=� H���,�����H��H���Shift_JISEUC-JP		``$`4,<�D�4�`h�p�����@��;4����P����x���������p����zRx�$8���0FJw�?:*3$"D@��� \���YpT���g�����$HWGNU��P  ����	�#��X�	�#�z����p
�  ���o`��
�� 0@��	���o���o����o�op���o
� ��GA$3a1p�GA$3p1113��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSjapanese.so-3.4.4-3.el8.x86_64.debug��w�7zXZ�ִF!t/��"]?�E�h=��ڊ�2N����������1��1ս*u��wι�%h/��q��X-�`�qC0��]���}�2�臙�[Ί��r#�b��sp�Ik�ZөY�R��z�W{�E���-�;���'[sO�Ϗޏ;|����El��A'DX�fPv���rXJHra���':*�	S#�-^
�j���s��V��J�#��ηd�y��K �Y!��A�cŹt|V�'�T��"A���а�^*1��t�<{uT^�S��R1r}7����[���Y��b�w�G�ެ�C��^����o����4?Y$s�.�g�5j�u|JLyD�ηY��Q+�rL���
Hm��-bnCTAK����?D�iG��m�'jb��$�ĥ�X+9�}�W��e����Q4k�K�q��ia�G�U��a\e("�D�l�G��He��!�`s��Ӱ/��q�o�pS�.)沈�� Y�+ɨK�	S��Pj;��l���*�x�Հk���>Ȃ^�@�����*u��,n?X�q*��qKU�jQ����t/�9=0���m�S��\�N�Ogr3z�p���]�����'�����xF;4�
�R��T^�4{_p>�� �����G��,�\�o�����1#D��n�:��MA[�/�8G��k��,C�(h�Y7u�Z���D�H�D�#��>DDf����
���4̺�%x �����ݩ*��D����d��U#D���9��
��<O����gso���O�뢵c���Y��HR���/�c�5XM��c��X���'O�C����Q��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���oppE���o�� T���^B@@0hppc��0n�� w���}��
���? �

4�8
8
���
�
 � � �   ` �� � �� �H�  �� `�H0",\"d�%"PK*J[��N�}�}$lib64/ruby/enc/trans/japanese_euc.sonuȯ��ELF>�@�v@8	@PaPa PhPh%Ph%�� �m�m%�m%  888$$0a0a0a  S�td0a0a0a  P�td�`�`�`$$Q�tdR�tdPhPh%Ph%��GNUg<����*����G���@ 	 BE���|Z�'��qX g , F"�p%�p%U�	l�p%__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_japanese_eucrb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�Ph%�	Xh%`	`h%`h%�h%@
�h%F
�h%���h%�
 i%@
(i%S
8i%��Hi%�
�i%@
�i%[
�i%���i%�
`j%@
hj%d
xj%���j%�
k%F
k%@
k%��(k%�
�k%S
�k%@
�k%���k%�
@l%[
Hl%@
Xl%��hl%�
�l%d
�l%@
�l%��m%�
�o%�o%�o%�o%�o%�o%��H��H�Ag%H��t��H����5g%�%g%��h�������h���������%�f%D���%�f%DH�=	g%H�g%H9�tH��f%H��t	�����H�=�f%H�5�f%H)�H��H��H��?H�H�tH��f%H��t��fD�����=�f%u+UH�=jf%H��tH�=�^%�Y����d����mf%]������w������H��H�=!c%����H�=ub%����H�=�a%��H�=a%���H�=q`%����H�=�_%����H�=_%����H�=m^%H�������H��H���UTF-8EUC-JIS-2004CP51932eucJP-msEUC-JP。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚		`	˘ˇ¸˙˝¯˛˚~΄΅¡¦¿ºª©®™¤№�	ΆΈΉΊΪΌΎΫΏάέήίϊΐόςύϋΰώ �	ЂЃЄЅІЇЈЉЊЋЌЎЏђѓєѕіїјљњћќўџ��ÆĐ	ĦIJŁĿŊØŒŦÞæđðħıijĸłŀʼnŋøœßŧþ�\ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ	ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ@�áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ	ġĥíìïîǐīįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż�@丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄�侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐(傒傓傔傖傛傜傞傟傠傡傢傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂�凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋0
匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿�咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒8
嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍嘎嘏嘐嘑嘒嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤囥囦囧囨囱囫园�囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭坮坯坰坱坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡@堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭�奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿H嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖寗寘寙寚寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩�屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤P巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪幫幬幭幮幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧�彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐忑忒忓忔忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷X悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐愑愒愓愔愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥�懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵`捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿�擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝h昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝� 杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮桯桰桱桲桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏p"棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲�#樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽x%歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖�&泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞�(湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊*濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔炕炖炗炘炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃焄焅焆焇焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠�+煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻-狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽�.珿琀琁琄琇琊琑琚琛琤琦琨琩琪琫琬琭琮琯琰琱琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆0甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹畺畻畼畽畾疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹�1瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢皣皤皥皦皧皨皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢3睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳�4碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞$6秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰�7笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙籚籛籜籝籞,9籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝�:綞綦綧綪綳綶綷綹緂緃緄緅緆緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭4<罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮�=胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆<?艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸�@荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓DB蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏蕐蕑蕒蕓蕖蕙蕜蕝蕞蕟蕠蕡蕢蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼�C藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠虡虢虣虤虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣LE蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃螄螅螆螇螈螉螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵�F蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊裋裌裍裎裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺TH襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔觕觖觗觘觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳�I誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂譃譄譅譆譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆\K貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢�L踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁dN轃轇轏轑轒轓轔轕轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃�O郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿lQ釂釃釅釓釔釗釙釚釞釤釥釩釪釬釭釮釯釰釱釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵鉶鉷鉸鉹鉻鉼鉽鉿銈銉銊銍銎銒銗�R銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿鋀鋁鋂鋃鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶tT鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉鏊鏋鏌鏍鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹�U镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂|W霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦Y頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱餲餳餴餵餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵�Z馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿鬀鬁鬂鬃\鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪魫魬魭魮魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸�]鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦鰧鰨鰩鰪鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻_鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵�`黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃齄齅齆齇齓齕齖齗齘齚齝齞齨齩齭齮齯齰齱齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥	`bx�T�8� �(
�0
�8�@�H�P�X�`� h"�#p%�&x(�)�+-�.0�13�46�7$9�:,<�=4?�@<B�CDE�FLH�ITK�L\N�OdQ�RlT�UtW�X|Z\�]_�`b,c�4c 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー—‐/\〜‖|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+−±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇Td◆□■△▲▽▼※〒→←↑↓〓	∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯ �e	0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz��fぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん	��gァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	@ iΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ	αβγδεζηθικλμνξοπρστυφχψω��jАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюяXk─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂	`pl亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭m院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応�n押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改p魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱�q粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄s機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京�t供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈v掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲�w検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向 y后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込�z此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷(|察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時�}次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周0宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償��勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾8�拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾��澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線@�繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎Ć臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只H�叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵̉帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓P�邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到Ԍ董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入X�如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦܏函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美`�鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服�福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋h�法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満�漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒p�諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃�痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯x�蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕	���弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲؜僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨\�辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨�咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉d�圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩�奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓l�屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏�廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚t�悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛��戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼|�據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼�曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍��棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣�檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾��沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌�漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼��燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱�瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰��癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬 �磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐��筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆(�紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺��罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋0�隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙��茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈8�蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙��蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞@�襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫��譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊H�蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸��遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮P�錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞��陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰X�顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷��髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈`�鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠��堯槇遙瑤凜熙	 h�Ld�e�f�gi�jPkhl�l|np�qs�tv�wy�z |�}(��0���8���@�ĉH�̌P�ԏX�ܒ`��h��p��МT�؟\��d��l��t���|������������� ���(���0���8���@���H���P���X���`������	˘ˇ¸˙˝¯˛˚~΄΅¡¦¿ºª©®™¤№���	ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡ�D�ⅢⅣⅤⅥⅦⅧⅨⅩ'"㈱№℡炻仼僴凬匇匤﨎咊坙﨏塚增寬峵嵓﨑德悅愠敎昻晥晴朗栁﨓﨔橫櫢淸淲瀨凞猪甁皂皞益礰礼神祥福竧靖精綠緖羽荢﨟薰蘒﨡蠇諸譿賴赶﨣﨤逸郞都鄕﨧﨨閒隆﨩霻靍靑飯飼館馞髙魲鶴黑����������� ���(���<��T�8� �(
�0
�8�@�H�P�X�`� h"�#p%�&x(�)�+-�.0�13�46�7$9�:,<�=4?�@<B�CDE�FLH�ITK�L\N�OdQ�RlT�UtW�X|Z\�]_�`b,c|������������� ���(��0� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇��◆□■△▲▽▼※〒→←↑↓〓	∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯ �①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ	㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪A	��D���L���T���\��d��x������gi�jPkhl�l<�|np�qs�tv�wy�z |�}(��0���8���@�ĉH�̌P�ԏX�ܒ`��h��p��МT�؟\��d��l��t���|������������� ���(���0���8���@���H���P���X���`�����D���L���T��\��d��	l�纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德�忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱l�犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚�釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"�
t�����gi�jPkhl�l<�|np�qs�tv�wy�z |�}(��0���8���@�ĉH�̌P�ԏX�ܒ`��h��p��МT�؟\��d��l��t���|������������� ���(���0���8���@���H���P���X���`���d��l���丂丏丒丩丫丮乀乇么乑㐆Q乚乩亝㐬㐮亹亻�亼仃仈仐仫仚仱仵伀伖佤伷伾佔佘�佷佸佺佽侂侅侒侚俦侲侾俅俋俏俒㑪俲倀倐倓倜倞倢㑨偂偆偎偓偗偣偦偪偰傣傈傒傓傕傖傜傪傱傺傻僄僇僳Q僎�	僔僙僡僩㒒T儈�
儗儛兠Q
关冃冋㒼冘冣冭㓇冼��凳凴刂划刖剕剜剬剷劄劂Q劘�劤劦劯劺劻勊㔟勑�勷匊匋匤匵匾卂Q卧卬卺厤厴�厷叀�㕝㕞叕叚㕣叴叵呕吤吨㕮呃呢呦呬咊咍咕咠咦咭咮咷咺咿哃哬哯哱哳唀唁唉�唼啁㖦啇啊㖨啠啡啤Q啽喂喈喑㗅嗒��喿嗉嗌嗑嗝㗚嗢 嗩嘨Q!嘇嘐嘰嘷㗴嘽嘿噀噇噞噠噭㘅嚈嚌嚕嚚嚝嚨嚭嚲囅囍囟囨囶囷�"圕圣�#圩%坅坆坌坍Q&坨坯坳坴坵坻�'�(垬垚垝垞垨埗*埌Q+�,埞埦埰㙊埸埻埽堄堞\堠堧堲堹�-塉塌塧墊墋墍墏墐墔墝墪墱/壃壍壢壳壴夅夆夋复夔夤Q0㚑夽㚙奆㚖�1奛奟�2奵奶奼妟妮妼姈姍姞姣姤姧姮4Q5㛏娌娍娗娧娭婕婥婺媋媜媟媠媢媱媳媵媺媿嫚嫜嫠嫥嫰嫮嫵嬀嬈嬗嬴嬭孌孒孨孯孼孿宁宄�6�宖宬㝡寀㝢寎寖㝬㝫寱寽㝵尃尩尰�7屟屣屧屨屩屰9Q:屼�;�<岈岊㟁>Q?岠岢岦岧�@岭岵�A峉CQD崆崐崫崝崠崤崦崱崹嵂㟨嵡嵪㟴嵰�E㟽嶈㠀嶒嶔嶗嶙嶰嶲嶴�F嶹巑巗巘巠H巤巩㠯帀㠶帒帕㡀帟帮帾幉㡜幖㡡幫幬幭d	幮QI庥庪庬庹庿廆廒廙�J廽弈弎弜�K弞彇彣彲彾徏徢徤徸忄㣺忇忋忒忓忔忢忮忯忳忼㤗怗怢怤㤚恌恿悊悕您M悰悱悾惈惙惛惮惲惵愐愒愓愙愞愺㥯慁慆慠慼QN憒憓憗憘憥憨憭�O懕懝懟懵�P戕戣戩扆扌扑扒扡扤扻扭扳�
抙抦拕R拽挃挍挐QS�T挲挵挻挼捁捄捎�U捙WQX捬掄掙�Y掔掽揷揔揕揜揠揫揬揲搉搞搥搩搯摚摛摝摳摽撇撑撝撟擋擌擕擗�Z擤擥擿攄㩮攏攔攖㩳攞攲敄敔敫敺斁斄斅斊斲斵斸斿旂旉旔㫖旲旹旼昄昈昡昪晅晑晎㫪\晗l晛晣Q]�^晪晫晬晭晻暀暐暒暙㬎暭暱暵㬚暿㬜曬㫗朁朅朒�_朙aQb杌杍杔杝�c�df杴杶Qg枒�h荣栐枰枲柃柈柒柙柛柰柷�ikQl栘栟栭�m栳栻栾桄桅桉桌桕桗㭷桫桮桺桼梂梐梖㭭梘梙梚梜梪梫梴梻棻�np﨓棃棅棌棏棖�
棙棤棥棬棷椃椇㮇㮈Qq椻㮍楆楩楬楲楺楿榒㮤榖榘榦榰榷榺榼槀槑槖�r�s樰uQv槣槮槯槳㯍槴槾樑樚樝�w樲樳樴樿橆橉橺橎橒橤�x橾檃檋㯰檑檟檡z檫檽櫆櫔櫐櫜櫝Q{�|櫬櫱櫲櫳櫽�}欋欏欐欑欗㰦欯歊歘歬歵歺殁t殛殮Q�殽殾毇毈毉毚毦毧毮毱氂氊氎氵氶氺��氿汍汛汭沄沉㳃沔沕沗沭泂泐㳒泖泚泜泩泬泭т洀洊洤洦洧汧洯洼浛浞浠浰涀涁涊涍涑涘�渗Q���ч涫涮涴淂洴淈淎淏淐淟淩淶渶渞渢渧㴑渲渼湈湉湋湌湏湑湓湔湗湣㴞�溓溧溴溿滃滊滙漵滫滹滻漊漌漘漥漶漼�潒潗潚潠潨澘潽澐澖澾澟澥澯㵤澵濈濉濚濞濩Q�濼瀀瀇瀊瀣��瀹瀺瀼灃灇灋㶚灔灥灩灬灮灶灾炁炆炕炗炻ь炟炱�烬烊烑烓烜焃焄焆焇焈焌㷀焯焱煐煊煓煞㷔熖熀熛熠熢熮熯|熳Q�燋燓燙燜爇㸅爫爫爴爸爹丬牂牓牗牣��牮牯牸牿犎ё犭犮犰犱狁㹠狌㹦㹨狳狺猇猒猘猙㺃猹猬猱猳猽獒㺔獫獬�獮獯獱獷玁玅玊玔玘玜玞玥玨玵玷玹玼玿珅珋珡珧珹琓珺琁琤琱琹瑓瑀瑃瑍瑒瑝瑱璁璅璈Q�璒璗璙璠璡璥璪璫璹璻璺瓖瓘瓞瓯瓫��瓺і甠甤甪㽗�甽甾畀畈畎畐畒畬畲畱畺畽畾疁Q�疌㽵疢㽷疰疷疿痀痆痏痓痝痟痠痧痬痮痱痹瘃瘘瘇瘏㾮��瘓瘛瘜ћ瘥瘨瘼瘳�㿉癁Q�癉癕㿗癮皕皜皡皠皧皨皯��盉Ѡ盨盬�眗眚眭眵�Q�䀹��ѥ睘睠睪�睲睼睽Q�䁘瞚瞟瞢瞤瞩矞矟矤矦矪矬䂓矰矴矻��砅砆砉砍砙砡砬硇硤硪Ѫ碊碔碤碝碞碟碻磈磌磎磕磠磡磦磹磺磻磾�礐礛礰礥礻祊祘祛䄅祧祲禔禕禖禛禡禩禴离秂秇秌种秖䅈Q���䅏稊稑稕稛稞䅣稭稸穇穌穖穙穜穟穠穧穪穵穸窂窊窐窣窬ѯ䆴窹窼窾䆿竌竑竧竨竴�Q�笇��笽笧笪笮笯笱䇦䇳筿筁䇮筕筹筤筦筩筳Ѵ䈇箐箑箛䈎箯箵箼篅篊�Q�篔篖篚篪篰簃簋簎簏簦籅籊籑籗籞籡籩籮籯籰��ѹ�粦Q�粶粷粿��糄Ѿ糈�糍�糗Q�糦糫��糵紃紉䋆紒紞���紽紾絀絇Q���䋖絙絚絪絰䋝絿��綆綈綌綗�綝綧綪綶綷緀緗緙緦緱緹䌂Q�縉縐縗縝縠縧縬繅繳繵繾纆纇䌫纑纘纚䍃缼缻缾罃罄罏㓁��罒��罡罣罤罭罽罾�羐养Q�羖羜羭��翃翏翣翥翯翲耂耊耈耎耑耖耤耬耰聃聦聱聵聻肙肜肤肧肸��胅胕胘胦�脍胵胻䏮脵脖脞䏰脤脧脬Q�脽䐈腩䐗膁䐜膄膅䐢膘膲臁臃臖臛��臤��臬�臽臿Q�舄��舙舡舢��舲舴舼艆艉艅�艋䑶艏䑺艗Q�艜艣��艹艹艹䒑艽艿芃芊芓芧芨�芲芴芺芼苢苨苷茇茈茌荔茛茝茰茼荄荗䒾荿䓔䒳莍莔莕莛莝菉菐菔菝菥菹萏萑萕��萗萹葊葏葑葒葙葚葜�葥葶葸葼蒁䔍蓜蒗蒦蒾䔈蓎蓏蓓Q�蓧蓪蓯蓰蓱蓺蓽蔌蔛蔤蔥蔫蔴蕏蕯䔥䕃蔾蕑蕓蕞蕡蕢��蕻蕽蕿薁薆薓薝薟���Q�薷薼藇藊藘藙藟藡藦藶蘀蘑蘞蘡蘤蘧��蘹蘼��虀蘒虓虖虯虷虺蚇蚉蚍蚑蚜蚝蚨﨡蚱蚳蛁蛃蛑蛕蛗蛣蛦䖸蜅蜇蜎蜐蜓蜙蜟蜡蜣蜱蜺蜾蝀蝃蝑蝘蝤蝥蝲蝼�Q�螧螉螋螓螠��䗥螾��蟁蟎蟵蟟�蟣蟥蟦蟪蟫蟭蠁蠃蠋蠓蠨�蠮蠲蠼䘏衊衘衟衤Q���衩�衯袠袼袽袾裀裒�裑裓裛裰裱䙁褁Q�褷��襂襅襉�䙥襢覀覉覐覟覰覷觖觘觫䚡觱觳觽觿䚯訑訔�訡訵訾詅詍詘誮誐誷誾諗諼Q�謊謅謍謜謟謭譃䜌譑譞譶譿讁讋讔讕讜讞谹��谽�豅豇豏豔  豗豩豭豳Q貓貒貙䝤貛貤賖賕賙�賰賱�贉贎赬趄趕趦跆跈跙跬踌䟽跽踆Q踔踖踡踢踧�䠖踶踹蹋蹔蹢蹬蹭蹯躘躞躮躳躵躶躻�	軑軔䡎軹輀輈輗輫轀轊轘Q辤辴辶辶�
迁迆﨤迊迍迓迕迠迱迵迻适逌逷�遃遄遝�!Q邅邌邐阝邡䢵邰邶郃郈�郜郟�郶郲鄀郫郾郿鄄鄆鄘鄜鄞鄷鄹鄺酆酇酗酙酡酤酴酹醅醎醨醮醳醶釃釄釚Q釬釮鈁鈊鈖鈗�鈳鉂鉇鉊鉎鉑鉖鉙鉠鉡鉥鉧鉨�鉼鉽鉿銉銍銗銙銟銧銫Q�銲銿鋀鋆鋎鋐鋗鋙鋥鋧錑�(#鋷鋹鋻錂錍錕錝錞錧錩Q �!鍇鍑鍗鍚鍫鍱鍳鎡�"$鎈鎋鎏鎞鏵Q%�&鏱鏁鏇鏜鏢鏧鐉鐏鐖鐗鏻鐲鐴鐻鑅�')鑭鑯镸镹閆閌閍Q*閫閴�+闈�,.阬阳阴Q/阼陁陡�0隂�1隚3䧧隩隯隳隺隽䧺Q4雘雚雝䨄霔霣䨩霶靁靇靕靗靛�$靪�5�6鞖鞚鞞鞢鞱鞲鞾韌韑韔韘韙韡韱頄頍頎頔頖䪼8頣頲頳頥顇顦颫颭颰Q9颷颸颻颼颿飂飇飋飠�:飡飣飥飪飰飱飳餈䬻�;餖餗=餚餛餜Q>餱餲餳餺餻餼饀饁饆饍饎饜饟饠馣馦馹馽馿駃駉駔駙駞�?駰駹駼騊騑騖騚騠0&騱騶驄驌驘䯂骯䯊骷䯒骹�@髆髐髒髕䯨髜髠髥髩鬃鬌鬐鬒鬖鬜鬫鬳鬽䰠魋魣魥魫魬魳魶魷鮦鮬鮱BQC鮲鮸鮾鯇鯳鯘鯝鯧鯪鯫鯯鯮�D鯺�E鯷G鰖鰘鰙鰚鰝鰢鰧鰩鰪QH鰱鰶鰷鱅鱜�I鱉鱊�J鱔鱘鱛鱝鱟鱩鱪鱫鱭鱮鱰鱲鱵鱺�'鳦鳲鴋鴂L鴑鴗鴘QM䳄�N鴲䳑鵂鵊鵟鵢�O鵩鵫Q鵳鵶鵷鵾鶄鶍鶙鶡鶿鶵鶹鶽鷃鷇鷉鷖鷚鷟鷠鷣鷴䴇鸊鸂鸍鸙鸜鸝鹻QR麀麅麛麨�S麽�T黟黧黮黿鼂䵷鼃鼗鼙鼯鼷鼺鼽齁齅齆齓齕齘V齝QW齩�X齭齰齵�Y	@8)�T�\	�
d�
l�t�|��� �! #�$(&�'0)�*l�*◆□■△▲▽▼※〒→←↑↓〓'"-~〳〴〵〻〼ヿゟ∈∋⊆⊇⊂⊃∪∩⊄⊅⊊⊋∉∅⌅⌆∧∨¬⇒⇔∀∃⊕⊖⊗∥∦⦅⦆〘〙〖〗∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬≢≃≅≈≶≷↔ʼn♯♭♪†‡¶♮♫♬♩◯+▷▶◁◀↗↘↖↙⇄⇨⇦⇧⇩⤴⤵0123456789⦿◉〽﹆﹅◦•ABCDEFGHIJKLMNOPQRSTUVWXYZ∓ℵℏ㏋ℓ℧abcdefghijklmnopqrstuvwxyz゠–⧺⧻�,ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ	@ .ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ♤♠♢♦♡♥♧♣αβγδεζηθικλμνξοπρστυφχψως⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾☖☗〠☎☀☁☂☃♨▱ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹ	ㇺㇻㇼㇽㇾㇿ�/АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌абвгдеёжзийклмнопрстуфхцчшщъыьэюяヷヸヹヺ⋚⋛⅓⅔⅕✓⌘␣⏎1─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿	◐◑◒◓‼⁇⁈⁉ǍǎǐḾḿǸǹǑǒǔǖǘǚǜ��2€ ¡¤¦©ª«­®¯²³·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀĪŪĒŌāīūēō�3Ą˘ŁĽŚŠŞŤŹŽŻą˛łľśˇšşťź˝žżŔĂĹĆČĘĚĎŃŇŐŘŮŰŢŕăĺćčęěďđńňőřůűţ˙ĈĜĤĴŜŬĉĝĥĵŝŭɱʋɾʃʒɬɮɹʈɖɳɽʂʐɻɭɟɲʝʎɡŋɰʁħʕt5ʔɦʘǂɓɗʄɠƓœŒɨʉɘɵəɜɞɐɯʊɤʌɔɑɒʍɥʢʡɕʑɺɧɚ	ǽὰάὲέ͡ˈˌːˑ̆‿̋́̄̀̏̌̂˥˦˧˨˩̥̬̹̜̟̠̩̯̈̽˞̴̤̰̼̝̞̘̙̪̺̻̃̚,�6❶❷❸❹❺❻❼❽❾❿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋺㋩㋥㋭㋬	⁑⁂�T8①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡Ⅻ	㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼∮∟⊿❖☞��9俱�㐂丨丯丰亍仡份仿伃伋你佈佉佖佟佪佬佾侊侔侗侮俉俠倁倂倎倘倧倮偀倻偁傔僌僲僐僦僧儆儃儋儞儵兊免兕兗㒵冝凃凊凞凢凮刁㓛刓刕剉剗剡劓勈勉勌勐勖勛勤勰勻匀匇匜卑卡卣卽厓厝厲吒吧呍咜呫呴呿咈咖咡�:咩哆哿唎唫唵啐啞喁喆喎喝喭嗎嘆嘈嘎嘻噉噶噦器噯噱噲嚙嚞嚩嚬嚳囉囊圊Q�圡圯圳圴坰坷坼垜﨏��垸埇埈埏埤埭埵埶埿堉塚塡塤塀塼墉增墨墩��壒壎壔壚壠壩夌虁奝奭妋妒妤姃姒姝娓娣婧婭婷婾媄媞媧嫄�嬙嬥剝�<蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕Q�孁孖孽宓寘寬尒尞尣尫㞍屢層屮��屺岏岟岣岪岺峋峐峒峴��㟢崍崧﨑嵆嵇嵓嵊嵭嶁嶠嶤嶧嶸巋吞>堯槇遙瑤凜熙噓巢帔帘幘幞庾廊廋廹开异弇弝弣弴弶弽彀彅彔彘彤彧彽徉徜徧徯徵德忉忞忡忩怍怔怘怳怵恇悔悝悞惋惔惕惝惸愜愫愰愷慨憍憎憼憹懲戢戾扃扖扚扯抅拄拖拼挊挘挹捃捥捼揥揭揵搐搔搢摹摑摠摭擎撾撿�?擄擊擐擷擻攢攩敏敧斝既昀昉昕昞昺昢昤昫昰昱昳曻晈晌�晙晚晡晥晳晷晸暍暑暠暲暻曆曈㬢曛曨曺朓朗朳杦杇杈杻极枓枘枛枻柹柀柗柼栁桒栝栬栱桛桲桵梅梣梥梲棈棐棨棭棰棱棼椊楉Q�椵楂楗楣楤楨榀﨔榥榭槏㮶A㯃槢槩槪槵槶樏樕��樻樾橅橐橖橛橫橳��檉檔檝檞檥櫤櫧㰏欄欛欞欬欵歆歖歠步歧歷殂殩殭殺每毖毗毿氅氐氳汙汜沪汴汶沅沆沘沜泻泆泔泠泫泮�洄洎洮洱洹洿浘浥海涂涇涉涔涪涬涿淄淖淚淛淝淼渚渴湄湜湞溫溱滁�B滇滎漐漚漢漪漯漳潑潙潞潡潢潾澈澌澍澔澠澧澶澼濇濊濹濰濵瀅瀆瀨灊灝灞灎灤灵炅炤炫炷烔烘烤焏焫焞焠焮焰煆煇煑煮煒煜煠煨凞熅熇熒燁熺燄燾爀爕牕牖㸿犍犛犾狀狻Q�猧猨猪獐獦獼玕玟玠玢玦玫珉珏珖珙珣珩D琇琊琚琛琢琦琨琪琫琬琮琯琰瑄瑆瑇瑋瑗瑢瑫瑭璆璇璉璘璜璟璣璐璦璨璩璵璿瓈瓉瓚瓿甁甗甯畯畹疒㽲痎痤瘀瘂瘈瘕瘖瘙瘞瘭瘵癃癋癤癥癭癯癱皁皛皝皞皦皪皶盅盌盎盔盦盱盼眊眙眴眶睆睍睎睜睟睢睺瞀瞔瞪矠砭���E硃硎硏硑硨确碑碰��碭磤磲礀磷礜礮礱礴社祉祅祆祈祐祖祜祝神祥祹禍禎福禘禱禸秈秊�秔秞秫秭稃穀稹穝穭突窅窠Q�窳窻竎竫竽笒笭笻筇筎筠筭筯筲箞節篗篙簁簱簞簠簳簶䉤��籙籭籹粏粔粠粼糕糙糝紇紈紓紝紣紱G絁絈絓絜絺綃綋綠綦緂緌緖緣練縨縈縑縕繁繇繒繡纊纍罇署羑羗羿翎翛翟翬翮翺者耔耦耵耷耼胊胗胠胳脘腊腠腧腨腭膻臊臏臗臭䑓䑛艠艴��芎芡芣芤芩芮芷芾芿苆苕苽苾茀茁荢茢茭茺荃荇荑荕荽莆莒莘莧莩莿菀菇菏�H菑菡菪萁萆萊著葈葟葰葳蒅蒞蒯蒴蒺蓀蓂�蔲蔞蔣蔯蕙蕤﨟薭蕺薌薏薢薰藋藎藭蘒藿蘄蘅蘐Q�蘘蘩蘸虗虛虜虢䖝虬虵蚘蚸蛺蛼蛽蜋蝱螇螈螬螭螵䗪蟖蟬蠆蠊蠐蠔蠟袘袪裊裎��裵褜褐褘褙褚褧褰褲褹襀覔視觔觥觶訒訕$J訢訷詇詎詝詡詵詹誧諐諟諴諶諸謁謹譆譔譙譩讝豉豨賓賡賴賸賾贈贒贛趯跎跑跗踠踣踽蹰蹻��軀䡄軺輞輭輶轔�辦辵迤迨迮逈逭逸邈邕邗邙邛邢邳邾郄郅郇郗郝郞郯郴都鄔鄕鄖鄢鄣鄧鄯鄱鄴鄽酈酛醃醞醬醱醼釗釻釤�K釥釭釱鈇鈐鈸鈹鈺鈼鉀鉃鉏鉸銈鋂鋋鋌鋓鋠鋿錄錟錡錥鍈鍉鍊鍤鍥鍪鍰鎛鎣鎺鏆鏞鏟鐄鏽鐳鑊鑣鑫鑱鑲閎閟閦閩閬閶閽闋闐闓䦰闚闞陘隄隆隝隤隥雒雞難雩雯霳霻靍靎靏靚靮靳鞕鞮鞺韁韉韞韛韴響頊頞頫頰頻顒顓顖,M顗顙顚類顥顬颺飈飧饘馞騂騃騤騭騮騸驊驎驒骶髁髃髎髖髹鬂鬈鬠䰗鬭魞魹魦魲魵鮄鮊鮏鮞鮧鯁鯎鯥鯸鯽鰀鰣鱁鱏鱐鱓鱣鱥鱷鴝鴞鵃鵇鵒鵣鵰鵼鶊鶖鷀鶬鶼鷗Q�鷧鸇鸕鹼麞麤麬麯麴麵黃黑鼐鼹齗龐龔龗龢姸屛幷瘦繫�N+�e�,.�/�j1�2�3l5�6L8�9�:x<�=|np�qs�tv�wy�z |�}(��0���8���@�ĉH�̌P�ԏX�ܒ`��h��p���?T�؟\��d��l��t���|������������� ���(���0���8���@���H���P���X���`�A�BD�EG�HJ�K$M�N,P�4P	��������������������������������������������������Q������������������������������������������������	������������������������������������������������������������������������������������������������������������������������������������������� R������������������������������������������������������������	���������������������������������������������������������������������������������������������������������������������S,S������������������������������������������	����������������������������������������������������������������������������������������������������������������������������������������������(T�	���������������������������������������������������4U	������������������[�U	�����������������������������������������������������������������������������������������������������������������������������������U������������������������������������	��V	�����������������������������������������������������������������������������������������������������������������������������������������!�V��������������������������������	�����������������������������������������c�W,U�|X�|X	��������������������������������X	����������	�X	��������KY	����� Y��	���������������������������������������8Y	���������������Y	����������S�Y	����Y��������	������������������������������������������������������Y	�����Z	������������[�Z	��������������Z	������Z��	��������![�X,U�XY0Y�Y�Y�Y�Y|Z�Z�Z�Z�Z [c([��������	�������������������������������������p[	�������������������������������������������������������������������������������������������������������������������������������[����������������������������������������	������������������������������������������������������������������������\��������������������������������������������������������������������������������������������������������������	��������)�]�[�\�]�^,Uk�^��������������	��������������ͿТ�������У������ʺ�����ξ�����������Ф��������������Х�����Ц��ð��ЧШ��^������Щǵ�����	���Ƿ����˳�����Ъ��Ы��������������֦����������������������������_��	ЬЭλͽ��Я�������в�������������������������где˴ж��������������μ���зий�����1D`����о���м	н������лкʩ�������¾п��������������������������������������������������������Ǥ���������s�`�����������	������������������Ȳ�����������������������������������ȼ��������������������������a���	�����â����������������������ͤ������������������;��������դ�����������������������������ʻ���������������������������db	�����������������������������������������������������������������������������ե����������η��������������������98c��������¥��������	�������������������������������¯���������������������������������������ɶ�����������������{�c,U�_<`�`�a\b0c�c�d��d������	��������������������������������������������������������������������������������������������������������������������d�����������	��������������������������������������������������������������������������������¦�������A�e����	�������������˵��������������������������������������������������������������ѣ�����������������tf���	Ѥ�����������ѡѢ���Ư������������������ѥ���ν������Ѧ������ѩ���ѧ�����������ѨѪ���������Ѭ���ѫ���������$g��Ѯѯ�����	���������ѭ�����������������ѲѱѰ��������ѳ��������������Ѵ���������ͥ�����������������������Ѷ������ѵѸѷѹ �gѺ�����������������������Ѽ���������	ѻ���ѽ����������������Ѿ�����������Ȭ��ϻ����ʼ¶��ŵ�����I �h��	�������������������������������������������������������������̽������������������������������������������������� li	���������������ο������������������������������������������������������������������������������ȡ��� Dj���������������ʬ����	��������������������������������Ƚ���������������������������������������!k	�������§������������������˶���������������������������������������������������������������Q!�k���	�����������έ���������������������������������������������������������Ңң��������ϫҥ�����������������Ҥ������!hl���Ҧ	�����ļ���ͦ��������ҧ�����������ư���Ҩ��̳��������ҩ��ҭ�����Ҫ�����ҫ����������������������Ү���ү������Ұұ�������!4m���������	��Ҳҳ���������ҵҷҶ������Ҹ���������ҹ������������������Һ�����������������������һ���Ҽ���ҽ���Ҿɤ�������������ƿ"nҿ�������	��������Ⱦ����������´������ñ��������������������������������������������¨������������������Y"�n	���������������������������������������������������������������������������������������������֛"�o���	�������������ͧ��ȿ�������������������������������������������������������á�������������������������������"Tp	�����������������Ʊ̾���������������������������������������������������������������ʭ������#(q��	Ϥ����������������������������������������������������������������̣�������������̿���a#�q�����	������������������������������������������������ӣ��������������ӡ�������Ӿ��������������������ӥ��Ӥ����#|r����Ӣ	�����������������Ӧ�����ӯӧӨ����������ӭӬ���ů���Ӯ���ӫ�������#Ds������	������������������������ө��Ӫ�����������Ӵͣ�����Ӻ������ӹӰ�����������'$�sӱ���	��Ӷ�����������ӳ�������������ӷӸ���������ӵӻ���������Ӳ��������������i$\tӽ����������	����������ӿ������������������������Ӽ�������������������������������������������$�t	�������������ԧ������������������������������������������������������������������$�u	���ò�����������������������������������������������������������������������������������/% v��������������	���������������������������������������������������������������������ʮ�����ȸq%�v��	���������������������������������������������ǹ�������������������������������������������%Tw��������	�����������������������������������������������������������������������������������������������������%�w����������	���ԡ����Ԣ���ԣ�������Ԥ���Ԧԥ������Ԩ��������������������ԩ�����������������������������Ԫԫԭ���������7&�xԮ	����������˷������Ԭԯ�������Գ��������ó������԰�����������������������������������������������Դy&�y	��������ԲԵ�����Զ���������������������������Է�������Թ���������Ժ���ԻԸ������&,zԱ	ԼԽ����������������Կ�Ծ�����Ǹ��������������������������������������������������������������&�z��	Ʋ��������������������������������������������������������������������������������?'`{ʽ��	��������������������������������ȹ�����������������������Ŷ��������������������'�{������	������������������������������������������������������������������������ʯ��������������'�|	�������������������������������������������������������������������������������������������������������(4}	�������������������������������ͼ������¿����������̴�������������ŷ�������������������������������������G(�}	��������������������������������������������������������������å�������ʳ����������������ա������������(�~	բǡ����ǥ������ի����������������̯֬գ���զ��������˸��������������է�������������������(|	���������ը������������������������լխժ����������������������թ��ɱ������������������������
)������	�����ղ���������հ������̼ճձ���կ��������ծ�������������������շո��O)��մϬ	��������������ն��������������չ�����������պյ���������������̻�)H�	�����������������ջɲ������������������������������������������ռ�ս����)��	��տ�����������վ�������������������������������������������������*8�������	����������������������������������������������������W*�������	��������������������������¸��������������������������¹��������֣�������������������ƙ* ������	��������������������������������������������������������������������ͨ���������������������������������������������������*̃��������������̩��	������������������������������������������������������ǫ����������������������������������+��	���������������º�������Ƴ��������������������������������������������������������������������Ǣ_+�����	������������֢֡���Ÿ���������°����������������������֤���֥�������������֧֨�������������+D�	���������֩�����֪���֫���������������������������̨֭�������������ֱ֯�����ְֳ֮�+��	ֲִ������������ֵ���ƽ����ֶֹֻ����������������ָ��ַ%,��	��������ּ������������ֽ��־�����������������������������������������g,��	����������������������������������ֿ����������������������������������������������,��	��������������������ֺ����������������������������������������������������������������,�	��������������������������������������������������������������������̦��������������ç��--�����	��������������������������ġ������������������������������������Ģ���������˹���o-H���	����������������������������������������������Ȩ��ʾ�������������������������ʿǯ������������ͩ����-����ģ	�������������������Ź�������������������������������������������������������-��	���������ϭ�������������������������ספץ���ף������קצע���רש���ת׭׫׬׮����ׯ����Ƕװ�5.<�	�����ױϮ���������ײ�׵Сб������׶��Ĥ��׷ʦ������������������������������������׸������׹���׿��������ĥ�����׺���ɫ��������w.����׻	���������׼��׽���׾�������������������״׳�������������ɧ�����ɷĦ�������������������������������������������.�������������	���������Χ���������������������������������������������������������������������ħ���Ű�����.��	�����ɬ��������������Ǧ�������������������˺˻����������������������������������������ح��������ǰ�����������������=/|��elfg�g�hdi<j�j�k`l,mn�n�oLp q�qtr<s�sTt�t�uv�vLw�w�x|y$z�zX{�{�|,}�}�~t���@���0����ă��x�<�����x����@�܊��4���܍��t�8�@�	�����������������������������������������������������������������������������������/L���������	����������������������������������������������������������������������©���������������/�	�����ء�����������ا���������إ��������أؤ����آ��������ͪ�������������ئ���Ǻ������������جذ�����ة�����خ���0��	��������د����������������������ث������ر������������������تب�������������ؽ�����ظ���صض�����عؼ������E0t�ط�����غ	ش�����������ؾؿ�����������������س���������������������ػ�������������������������������������������04�	�������������������������ز������������������������������������θ����������������������������������0��������ͫ������	�����������������������������������������������ʰ���ƴ����������������������������������1�������������	�������������������������������������������������������������������Ĩ���������������M1l�����	����������������������������������������١�����٢��������������٣���٤��٥٦٧������������˼�1���٨���������	���������������٩��������������ʧ��������٬���٪٭٫���ٮ���ʱ���������������ٯ���ٲ���1ܗ��	ٰٷ��ٱ����������������ٳٴٸ��ٵ������ȴ����������ڭ����������������ٻ����������2��	�����ôپ��������������ټ��ٺ����ٶ������ٹ���������������������������������������������������ٽU24�	������������������������������ĩ���������������������������������������������������2�	���������������ª����������������������������Ľ�������������������������������������������������DZ����������2����	����������������������������������������������������Ϋ��õ��������������������������������������������3@������	·��������������������������������ͬ������������������������������������������������]3�	��������»�������������������������������������������������������������������������؟3��	���������������������Ŧ��������������������������������������������������34�	����������������������������Dz������Ƶ���������ű��������������������������ڥ����������#4��	��ڧ���ڣڤ�����������������������ڢٿ������ڦڡګڬŧڮ��������ک�����������گ���ڨڳڲ���ڱ���ڴ���ڶ�����e4X�ڵ���	���ڹ���������������������ڷ������ڸ�����������ڻں�������ڼڰ��������ڽھ�ڿ������������������4�	��������������������������������������������������������������������Ũ�����������4̟	����������ʸ�������������������������������������������������������������������������������������+5d�	���������ι���������������²������������������������������ö�������������������������������������m5����	�������������������������������������������������¡�����¢�£�¤�¥���¦�����§�¨�©�ª���«���¬�­�®�������°�¯��ۦ�5С�±���������²�³	���´���µ�·���¶���¸�¹�º�»�¼�������½�¾�����������������������������������������������������������5�������	��������������������������������������������������Ī������������������˽���ۢ���������36x�����������ۡ	������������������ۣ��ۤ���������ۥۧ���ۨ���������۩������۪۫��������¿��������u6(���	����������ͭ�����۬�����Ŀۭϯ���˾���īۮ�������ۯ۰��̤�����۲������۴۷۶������۳�6ؤ	۵��۸�������������¼��������ۻ����۹«ۺ����ۼ۽���á���â���ã��ۿ�������ä���å���æ������6��	�ç�è���۾�����é�ê���ë�ì���í���î�ï���ð����������������ñ�ò�ó�����ô���������õ�ö�÷;7L��ù���ú�û��ü��	�ý�þɢ����˿���ÿ����������ͮ�����������������������������������������������ø������}7��	�����������������������������������������������������������������������������׿7������������������	���������������������������������������������ɰ������������������������������������������8P�	���������������������������������������������������������������������������������������������C8�	����ܲ�������������ġ�Ģ��ģܡܣ�Ĥܧ��ĥê�Ħ�ħ��ܫ�ܨ�Ĩܢ�ĩ�Ī�ī�Ĭ�ĭ��ܬ�Į�į���İ�ıܪ���IJ�ij�Ĵ�8ĩ���	ܦ���ĵ��Ķ�ķ̺��������ĸ�Ĺܥ�ĺ�Ļ�ļ��ܯ����ܱ�ܰܩ�ܭܮܿ�Ľ�ľ���Ŀܤ��ܻ��ܽ���8��	���������������ܸ�����ܾ�����ܵ����������������������������ܷ�����ܺ�������������ܼ��ܴܶܳ������ϰ��ܹ���	9@��������	������������ϱ���������������������������������������������������������������K9�	�������������������������������������������������������������������������������������9�������������	���������������������ɸ����������������������������������š�����Ţ������ţî�Ť�ť�9<�	���Ŧ�ŧ����Ũ�ũ���Ū�ū�Ŭ�ŭ�Ů�ů�����Ű�������ű��Ų�ų�Ŵ���ŵ���Ŷ��:�����ŷ	�Ÿ��Ź�ź�Ż�ż�����Žݡ�ž���ſ����������ݬ���ݨ�����������ݧ���ݦݣ���������S:��	��ݥݤ���������������ݪϦ���������ݭ��������ݩݫ������ȧݮ������������ݲݯ�����ܕ:$�	��������ݰ��������������������ݳݴ�����������ݶ�������������������������������ݸݷݺ�������������:��	ݽ���ݼݾ��������÷ݿ����������������������������������������������������������ơ��;X���	�Ƣ�����ƣ���������������Ƥ���ƥ���Ʀ�Ƨ�ƨ�Ʃ���ƪ�ƫ�����Ƭ�ƭ�Ʈ���Ư�������������ư�Ʊ�������Ʋ�Ƴ��[;���	�ƴ�Ƶ�����ƶ���Ʒ�����������Ƹ��ƹ�����ƺ�ƻ�Ƽ�ƽ�����ƾ���ƿ��������;ȱ	�������������������������̱�����������������������������������������������ɹ��������������;T������	������������������������������������������������Ƕ���������������������������������������!<�	������������������������������������������������������������������������ʨ�ޡ��������c<��	���������������������������ˡ���ޤ�ǡޢ�Ǣ��ǣˢ����ť�Ǥ���ǥޥ�Ǧ�ǧ�Ǩޣ����ǩ���Ǫ�<H�	�ǫ�Ǭ�ǭ��ް�Ǯ�ǯ�ǰޯ�DZ��ެ�Dz��ƶަ���dz�Ǵ�ǵ����ީ�Ƿ�Ǹ�ǹ��ޮޭިޫ�Ǻ���ǻު���Ǽ�<��	ή�����ǽ޶޴���Ǿ�ǿ��ޱ޳���������ϲ����������������޵���)=��	���޺�����Ͱ޷������޲���޸����������������������������޾���������������k=���	�������޿�������������������������������������������ø�����������������������������������ʥ�����޻��ź���=�����	�����������޽����޼�����������������������������������¬����������������������������=`�	��������������̫����������������������ù���������ȡ�Ȣͯ�ȣ���������Ȥ���ȥ�Ȧ����1>��	��Ȯ�ȧ�����Ȩ�����ȩί�����Ȫ�����ȫ���Ȭ�ȭ���Ȯ���ȯ����Ů�Ȱ���ȱs>���Ȳ�ȳ���ȴ����	�ȵ�ȶ���ȷ����ȸ�ȹ�Ⱥ�������������Ȼ��ȼ�Ƚ��ũߣ��Ⱦ�ȿ������>0�	��ɺ������������������ϳ��ߢ�����������������������������̡���������������������������ߡ��>̹	���������������������߯������ߪ������������������߳������߬Ĭߩ����ߦߥ߮������9?t�ߨߧ߭�����	ߤ���������������߰���߱�����������������������߶ߵ߷������������ߺ��������ߴ����߸��{?����߲ǻ	��߹������߾߼߿�ɡ���ɢ߻��Ǩ޹�ɣ�ɤ��߽���ɥ�߫�ɦ���ɧ���ɨ�ɩ���?�����l�,����d��ԗ��,����8�����,���P��ğ\��ȡ��p� �Ф��D����H������8�����4��|����P����L����@�������X����(�Ĺl�����D�L��ɪ��	�ɫ�ɬ�ɭ�����ɮ�������ɯ�������������ɰ�ɱ������ɲ�����ɳ�ɴ�ɵ�ɶ���?X�	�ɷ�ɸ�ɹ�ɺ�ɻ�ɼ������ɽ�ɾ���ɿ�������������������������������������A@�	���������ϧ����������������������������������ú������������������������@d�	����������������������������������������ˣ������@�	������������������������������ʲ��������̵������������������������A@�	���������������������������������������������������ʡ�������ʢ��IA���ʣ	���ʤ�ʥ�����ʦ���ʧ������ʨ�ʩ���ʪ�ʫ�����ʬ�ʭǮ�ʮ�ʯ���ʰ��ʱ�A<��ʲ�ʳ	dz�ʴ���ʵ�ʶ�����ʷ����ʸ���ʹ�ʺ�ʻ���������������ʼ�����ʽ��A���ʾ	��ʿ������������������������������������������������������������BT�����������	��������������������ĭ�������������������������̶�����ϴ��������ʪ�����������������������������������QB�����	���������������������������������������������������B��	������������������������������������������������������ì������ϵ���ˡ�B(�	�ˢ�ˣ�ˤ�˥���˦�˧�˨�˩�����˪�˫�������ˬ���˭�ˮ���˯�˰���ǭ�˱�����˲�˳���˴ͱͲ�˵�˶�˷����C��	�˸�����˹�����˺�˻�˼���˽�˾�˿�������������������������������������������������������YCt�������	�����������Ψ��������������������������������������������������������������������������������C���	��������������������������������������������������������������������������������������̡�C���̢�̣	���̤����̥ΰ�̦�̧�̨�̩��̪���̫�̬�̭�̮�̯�̰�̱�̲�̳�̴�̵����������̶����D\��̷��	�̸�̹�̺�̻�̼�̽�̾�̿�������������������������������������������������������������aD��������	�������������������������������������������������������������������������������������������������D��	������������������������������������ɻ�����������������������������������DD�	�����������͡���͢�ͣ����ż����ͤ�ͥ���ͦ����ͧ���ͨ�ͩ����ͪ��ͳ�����ͫ��Ҵ�ͬĮ����ͭ�ͮ�ͯ'E���Ͱ	�ͱ���Ͳ�ͳ��������ʹ���͵Ȫ�Ͷ���ͷα�������͸�͹ȫ�ͺɭ�ά����������ͻ���ͼ�����������ͽ�;�Ϳ���������iE��	����������������ɥ��������������������������������������������������������������������ϫE����������������������	�����������������������������������������Ρ������������������������������������������E,���������������	�������������������������������������������������������������������������������������Ρ���΢/F���Τ�Υ���Φ�Χ�Ψ�������Ω�Σ�Ϊ��	��Ϋ����ά��έ���ή�ί������ΰ�α�β��γ��δ��ȯ�����ɴqF����ε	�Ū�ζ�������η�θ�����ι����κ�λ�μ�ν�ξ�ο�������������������������������������F`�	����������������������������������������ݹ��������������������������������ľ���������������F������	��������������������������������������������̲��������������������������������������į��������7G����	����������������������������������������������ϡ�����Ϣ���ϣ���Ϥ�ϥ�Ϧ�ϧ�Ϩ���ϩ�Ϫ����yG���ϫ	�Ϭ���ϭ�Ϯ�����ϯ�ϰ�ϱ�ϲ���ϳ���ϴ���ϵ�϶�����Ϸ�ϸ���ϹƷ�Ϻ�����������ϻ���G(�	�ϼ���Ͻ���Ͼ�Ͽ��������̷���������������������������������û������������������������G��	���������������������������������������������������������ˤ������������?HT�	�������������������������������������������������β�������ȣ����������H��	�������������������������������������������������������������������������С��Т��У�HL�	�����Ф�Х�Ц���Ч�Ш����Щ�Ъ��Ы�Ь��Ю�Я�а�б�Э�в����г����д�е��з�и�й�к��лI���ж��	�м��н���о����п����������������������������������������������������GI�����	������������������������ʹ���������������������������Ǫ�����ɼ���������������������������I0�����	Ͻ������������ʡ���������������������������������������������ǩ����������������������I���������	���������������������������������ѡ��Ѣ�����ѣ������Ѥ�ѥ��Ѧ���ѧ�Ѩ���ѩ
J����	�Ѫ�ѫ�Ѭ���ѭ�Ѯ��ѯ�����Ѱ̭�ѱɣ�������Ѳ���ѳ�����Ѵ�ѵ�Ѷ�ѷ���Ѹ�ѹ�����Ѻ�ѻ���Ѽ�ѽ�Ѿ����������OJ8���	�����ѿ�������������������������������������������������������������������������������������������J��������������������	���������������������������������������������������������������������������J��	������������������Ω��������������������������ε������������Ƹ��������è��������ü����������ѿ���������������KL�	��������������������ū�������������������������������ҡ��Ң�����ң�ҤWK��ҥ�Ҧ	�ɮ�ҧȦ������Ҩȵ������ҩ����Ҫ�ҫ��Ҭ��ҭ�Ү��ү��Ұ���ұ�Ҳ���ҳ��K��	�Ҵ�����ҵ���Ҷ��ҷ�Ҹ���̧�ҹ������Һ���һ��Ҽ���ҽý�Ҿ���ҿ��Ȣ���������Ȥ�������������Kd�������	�����������������������������������������������������϶������������������������������L���������������	�������������������������������������������������������������������������������������������_L����	�����������������������������������������������ӡ�Ӣ�����ӣ�Ӥ���ӥ�Ӧ�ӧ�Ө�����ө�Ӫ�ӫ���L|�	�������Ӭ�ӭʴ��̰�Ӯ��γ�ӯ����Ǵ���Ӱ���ӱ���������Ӳ�����������ӳ�������Ӵ�ӵ���Ӷ�ӷ�Ӹ�����ӹ�L,���	���Ӻ���ӻ�Ӽ�ӽ���Ӿ���ӿ������������������������ʵ������������������������������%M����	���������������������Ǽ���ɳ�����������������������ʶ�������������������������������������������������������gM����������������������	������������������������������������������������������������������������������Mh�	��������������������������������³������ԡ������Ԣ�ԣ�Ԥ���������������ԥ����Ԧ�ԧ���Ԩ�þ������M0�	�ԩ�Ԫ�ԫ�Ԭ�ԭ������Ԯ�ԯ�԰���������Ա���Բ������������Դ���Ե�Զ�����Է�Ը���Թ���Ժ����Ի�Լ�Խ�Ծ��-N���Գ��	�����Կ����������������������������������������������˥�������������������������������������oN��	���������������������������������������������������������������������������������������������������Np�	��������������������������Ż��������������������������N$�	�������������������5O��	�������������������������������������������������������ȳ�ա����������բ�գ�դwO���ե	����������զ��է��ը�թ�ժ��ի�լ��խ���ծ�կ����հ�����ձ�ղ����ճ����մ���յ�O���ն��	�շ�����ո�����չ�պ�������ջ�ռ�����ս�վ���տ������������������������������������O4�ܽ\�ܾ8���4���L���� ���l����T�����<�������$�����X����x� ���L���D�����(�����0�����D����\����t�$�����`�(�����h����,U��x�,�������Ϸ	���������������������������������������������������������������������������������������������������������������ÿ�����=P�����	���������������ʹ������������������������������İ�����������ϸ��P��	���������ȥ����Ͼȩ�������ɪ����������������������������������������������������P8�	����������������������������������˦��������������֡��֢�֣ƹ�֤���֥�֦�ǽ�֧Q��	���֨������̮����֩�֪�֫�֬����֭�֮�֯��ְ�ֱ��ֲ��ֳæǾ�ִı�ֵ�ֶ�EQ|�	�ַ��ָ�ֹ��ֺ������ֻ������ּ��ֽ�־���ֿ��������������������IJʢ�����Q����������������	����������������������������ɨ��������������������������������ǿ�Q���	���������������������������¡����������������������������������������������������������������������������������������RP�����������	������ڪ�������������а��������������������������������������������������������������MR$���	����������ס�ע�ף�פ�ץ�������צ�����ק���ר�����ש�������ת���������׫�������׬�׭���׮�R���ׯ�װ	�ױ�ײ�׳�״�׵�����׶�׷���׸�׹�׺���׻�׼�����׽�׾�׿������������������������������������˧���������������������������R��	������������������������������������������������������������������������������������Sd����������������������������	�����������������������������������������������������������������US��	���������������������������ؾ�����������������������ء�آ�S���أ	�ؤ�إ��ئ����ا��ب��ة�ت��ث�ج��ح�خ�د������ذ�ر��ز���س���������ش�ص�SL��ض��	���ط�ظ�������ع�غ�ػ���ؼ�������ؽ�����ؿ���������ɩ��������������������T��	�����ƺ����������˨�������������������������������������������]T��	�������������������Ϊ����������������������������������ơ�����������������������������Ǭ�������������������������T�	������������������������������������������������������������������������������T��������	����������������������̬���������١�٢�٣˩ϡ�٤�٥�٦�٧���٨�٪�٫��٬��#U`���	�٭�ٮ���ٯ�ٰ�ٱ�ٲ��̢��������ٳ�ٴ����ٵ�ٶ�ٷ�ٸ���ٹ�ٺ�ٻ����ټ�٩�ٽ�پ¢�ٿ����eU����	�����������������������������������������������������������������Ƣ�������������������������קU������	����������������������������������������������������������������������������������������������������UX�	��������������������������������ƣ�������������������������ڡ+V$��ڢ	��ڣ�ڤ�������ڥ�ڦ�ڧ�ڨ�ک�ݱݢ�ڪ�ګ���ڬ�ڭ�ڮ���گ�ڰ�����ڱ�ڲ�ڳ�ڴ�ڵ��mV���ڶ����ڷ	�ڸ�������ڹ�ں�����ڻ�ڼ�ڽ�ھ��κ�ڿ������������������������������������������������VP�	���������������������������������������������������������������������������������������V�������	�����������������������������������������������������Ⱥ��������������������������������3W����	˪��������������������������������������������̪�����������ۡ���ۢ�ۣ�ۤ�ۥ�����ۦ�ۧ���ۨ�۩�۪��uW4��۫	�۬�ۭ��Ϲ��ۮ������ۯ��۰���۱��۲�۳������۴�۵�۶�ij��۷���W�	��۸�۹�ۺ�ۻ�ۼ�۽�۾�ۿ��ͻ�����������������������������������������������������������W������	�������������������������������������������������������������������������������;X �	��������������������������������������������������������������������������������ܡ���ܢ}X����ܣ���ܤ���ܥ��	�ܦ�ܧ�ܨ�ܩ��ާ�ܪ�ܫ�����ܬ�ܭ���ܮ���ܯ���ܰ�����ܱ�ܲ�������ܳɽ�ܴ�����ܵ�������ܶ�ܷ�������Xt��ܸ����	��������µ���ܹ���ܺ�ܻ�ܼ���ܽ�ܾ�����ܿ��������������������������Y<�������������	���������������΢�����������͵����������������Σ������������������������������������CY�	����������ʣ���������������˫����������������������������������������������������������������Y|�����������������	��������������������������������������������������������ݡ�ݢ�ݣ����Y$�	���ʤ����ݤ����ݥ���ݦ��ݧ�ݨ�������ݩ�ݪ�ݫ�ݬ��ݭ��������ݮ����ݯ�ݰ�ݱ�ݲ��ݳ��	Z��	���ݴ�ݵ�ݶ�ݷ�ݸ������ݹ����ݺ�ݻ�ݼ�ݽ�ݾ��ݿ��������KZ���	����������������Ƥ�����������������������������������������������ˬ�����������������������������������֍Z�����	���������������������������������ɾ���������������������������������������������������������������������������������Z����	��������������������ǧ������������������Ͷ����������������������������������ï�����ޡ�ޢ���ޣ���ޤĴ[�	���ޥ���ަ���ާ�ި�ީ���������ު���ޫ�ެ�ޭ��ޮ����ĵ�ޯ���ް��������������ޱ͡���޲�����޳�޴�޵�������޶��޷S[h������	ƥ�޸�޹���޿�޺�������޻�������������޼���޽�޾���������ɵ�����������������[4	�������������������������������������������������������������������������������������[�����	�������������������������������������������\�	ë��������������[\�	����Ʀ�������˭�����������������������������������������������������Ю����������ɿ�������\	�����ߡ���ߢ�����ߣ�ߤ�ߥ����ߦ�ߧ�ߨ�����������ߩ��������������������������������ߪ�߫��Ž�����\�����Ϩ�����߬�߭�����߮±�߯	�����߰����߲�߱�߳�������ߴ�����ߵ���������߶���߷���߸�߹�ߺ�߻�߼�߽���������߾�߿!]�	����������£����������������������������c]d	����������������������������������ʥ]�	��������Ķ�����������������������������������������������­��������������������]	���	�������������������������������������������������������������������������ϩ���������ķ�����������)^�		�����������������Ƨ����������������������������������������k^<
�����	������������������������������������������������������������^�
	������������������������������������������������������������������������������^�������	��������������������������������������ž��������������������������������������1_(���	�������������������������������������������������������������������������������������������������͢���������s_�����������������	����Ų�����������������������������������ᬵ_�
	����������������������ҡ�������ä�������������������é�_������	������������������������������������������������ų���������������������������������9`���0���t����H������\����D��������X�����P����H����,��x����l�4��t�������`,�|�,U��\�	�	4
�
x ��
�HP�������ƨ�������	���������Ʃ�������������������������®¤���Ϣ���������������������������������������ɯ����{`\	���������������ͷ�������������ƻã��������½����������������������Ŭ���������������������������������`8����������	��������������������͸����������������������������ˮ����������������š����`	����������������Ϻ�����������������������������������͹����������Aa���	������������������������������������������������Ţ���������������������������������҃a\	����������������������������������������������������������������������������������������������a�	��������������������������������������������Ȱ�������������������������������������������������������������b���������	������������Τ������������������ţ����������������������������������������������������������Ibh����	���������������������������������������������������������������������������������������������������������b@���	������Ŵ��������������������������������������������������������ȭ������������������������������������������������������b���	��Ƽ��������������������������ĸ���������������������������������������c���������	�������������������˯�������������������������������������������������������������������������Qcp���	�������������������������������������������������������������������ϣ���Ͽ����������������c0	��������������������������������������������������������������������������������������c�������	�����������������������������������������������������������d�	���������������������������ŭ���������������������������������������������������Yd(	����������������������������������������ƪ������������������������������������������d�	������������������������������������������������������������������������������������dd	������e	Ĺ������ae ��	����������������������������������������������������ȶ���������������������������������泣e@	��������������������������������Ʈ���������������������������e	������������������������������������������������������������'f�������	����������������������������������������������������������ƫ�Φ����������������if�	��������������δ���������������������������������������������������������������������������������Ȼ�f�����	ͺ�������������������������������������Υ������������ʷ��������������f� ��	�������������������������������������������̸��������Ϫ��۱������/g,!	�����������������������������������������������������������������������������������������qg�!�����	������������������������������������������������������������������������������������������������׳g�"	�����������������������������������������������������������������������������ǣ�������������������������������gD#	��ĺ������������������������������������������������������������Ƭ������������������������7h�#	�����������������������������������ſ����������������������yh�$	��������������������������ûhX%	�������������������������������������������Ҭݻ��������������˰���h�%	��������������������������������������������������������������������������������������������������?i(&�������	�������������������������������������������������i�&	�������������������������������������������������i\'	�����������������������������������������������������������������������������j�'	�������������������������������������������������������ƭ����������������Gjx(��������������	����������������������������������������������������j)	�����������������������������������������������j�)�����	������������������������������������������������������������������ȱ����ɦ���������������������
k�)�������������	��������������������������������������������ݵ������������������Ok�*	������̥�������������������������������������������������������ϥ������������������ёkh+���	����������������������������������ʫ���������������������������������������������������������������������k,����	����������������������������������������������������������������������������������l�,��	����������������������������������������������������������������������������������������������Wl�-	������������í��������������������������������������������������������������������������������������ؙlP.	Ļ�����ȷ���������˱�����������l�.	�������ƾ�����������������������������������������������������������������������m@/	�������������������������������������̹�������������˲���������������_m�/	���������������������������������������������������������췡m�0	������������������������������������������������������������������������m1	����������������������������������������%n�1	�������������������gn2�����������������	�������������������ϼ���������������������������������������������������������������������n42	���������������������������������������������������������������������������������������n�2	����������Ť������������������������������������������������������ɡ��������-o�3	����������������������������������������������������������������������������������������������������ooP4	ζ�����������������������������������������o50�T��`8��h(�� �\�,U8����x $!�!�"<#�#�$P%�% &�&T'�'p()|)�)�*`+,�,x-H.�.8/�/x01�1�1,2�2�3H45X5�o`55p|X	������������������������������������������������������������������������������������������������������������������������Wph6������������������������������������������������������������	���������������������������������������������������������������ph7����������������������������������������������������������������	�pl8	����q�8,U`7d8�89_q9�X�q49�49�q49R$S T$U,U�U�U�V�V�WtX�X�Xh[�^�dD�P���TX6`6,9<9D9L9�qT9	����������������������������������������r�9	����������������������������s:	�����������`s`:	������������������������������������������s�:��	���������������������������������������������s�:	������������&tP;	����������������������������������������htx;X:,U|:�:Y0YH;�Yp;�Y�;|Z�Z�Z�Z�Z [�t�;��������	���������������������������������������t(<	������.u�<	����������pu�<	�����������������������u�<	�������������������u=	������������6vD=	����xvl=�<�\�]�^,U�<�<=<=d=|=�v�=����о���м	н������лкʩ�������¾п��������������������������������������������������������Ǥ�����������v�=,U�_<`�`|>\b0c�c�d��>���	Ѥ�����������ѡѢ���Ư������������������ѥ���ν������Ѧ������ѩ���ѧ�����������ѨѪ�����������Ѭ���ѫ��������>w�>	���������������ο��������������������������������������������������������������������������������ȡ���wt?���������	��Ҳ��ҳ���������ҵҷҶ������Ҹ���������ҹ������������������Һ�������������������������һ���Ҽ���ҽ���Ҿɤ�������������ƿ�w4@�����	��������������������������������������������������ӣ��������������ӡ�������Ӿ��������������������ӥ��Ӥ���xAԮ	����������˷������Ԭԯ���������Գ��������ó������԰�����������������������������������������������ԴFx�A������	��������������������������������������������������������������������������ʯ��������������x�B��������������̩��	������������������������������������������������������ǫ�������������������������������������x4C	ֲִ������������ֵ���ƽ����ֶֹֻ������������������ָ��ַyD	������������������������������������ֿ����������������������������������������������Ny|D������������	���������Χ���������������������������������������������������������������������ħ�����Ű�����yE�elfgl?�hdi<j,@�k`l,mnA�oLp q�qtr�A�sTt�t�uv�vLw�w�x|y�B�zX{�{�|,C�}�~t���@���0����ă��D<����tDx�E��@�܊��4���܍���E8��E	�����ء�������������ا���������إ��������أؤ����آ��������ͪ�������������ئ���Ǻ������������جذ�����ة�����خ����y�Fط�����غ	ش�����������ؾؿ�����������������س�����������������������ػ������������������������������������������z�G	����������������������������������������������������������������������Ũ����������Vz�H���	�������������������������������������������������¡�����¢�£�¤�¥���¦�����§�¨�©�ª���«���¬�­�®�������°�¯�����ۦ�zI�±���������²�³	���´���µ�·���¶���¸�¹�º�»�¼�������½�¾��������������������������������������������������������������z�I	���������������������������������������������������������������������������������{�J	���Ŧ�ŧ����Ũ�ũ���Ū�ū�Ŭ�ŭ�Ů�ů�����Ű�������ű��Ų�ų����Ŵ���ŵ���Ŷ��^{`K	��ݥݤ���������������ݪϦ���������ݭ��������ݩݫ���������ȧݮ������������ݲݯ�����ܠ{�K��	�������޿�������������������������������������������ø��������������������������������������ʥ��������޻��ź����{|L����G,�xH��d��ԗ��,����8�����,���P��ğI�ȡ�I�J �Ф��D����XK�����8�����4���K�tLP����L����@�������@M���(�Ĺl�����D�HM�ɪ��	�ɫ�ɬ�ɭ�����ɮ�������ɯ�������������ɰ�ɱ���������ɲ�����ɳ�ɴ�ɵ�ɶ��$|TN	���������ϧ����������������������������������ú�������������������������f|�N	��������������͡���͢�ͣ����ż����ͤ�ͥ���ͦ����ͧ���ͨ�ͩ����ͪ��ͳ�����ͫ��Ҵ�ͬĮ����ͭ�ͮ�ͯ�|hO��ε����Ū�ζ�����	��η�θ�����ι����κ�λ�μ����ν�ξ�ο�������������������������������������|0P�ж��	�м��н���о����п�������������������������������������������������������,}�P	������������������Ω��������������������������ε������������Ƹ�����������è��������ü����������ѿ���������������n}�Q	��������������������������������³������ԡ���������Ԣ�ԣ�Ԥ���������������ԥ����Ԧ�ԧ���Ԩ�þ������}PR	�ԩ�Ԫ�ԫ�Ԭ�ԭ������Ԯ�ԯ�԰������������Ա���Բ������������Դ���Ե�Զ�����Է�Ը���Թ���Ժ����Ի�Լ�Խ�Ծ���} S�N\�`O8���4���L���� ���l����T�����<���(P��$�����X��P��x� ���L���D�����xQ����0�����D�HR��\����t�$�����`�(�S�Sh����,U��x�,����S�	���������������������������ؾ��������������������������ء�آ4~�T����	������������������������������������������������������������������������������������������������������v~tU	�����������������������������������������������������������������������������������ܡ���ܢ�~DV	���������������������������������������������������������������������������������������~�V����Ϩ�����߬�߭�����߮±�߯	�����߰����߲�߱�߳�������ߴ�����ߵ���������߶���߷���߸�߹�ߺ����߻�߼�߽���������߾�߿<�W	��������������������������������������~|X��0���t����H������\����lU�������X�����P�<V��H����,��x�����V4��t�������`,��W�,U��tX��X�	4
�
x ��
�H�X	����������������Ϻ��������������������������������������͹�����������Y��	���������������������������������������������������Ţ�����������������������������������tZ��	�������������������������������������������������������ȶ����������������������������������D�[��	�������������������������������������������̸��������Ϫ��۱������������[	���������������������������������������������������������������������������������������������Ȁ�\	��������������������������������������������������
�T]�����	��������������������������������������������������������������������ȱ����ɦ���������������������L��]	������̥�������������������������������������������������������ϥ��������������������ю��^	����������������������������������������������������������������������������������������Ё@_0�lZ[�`8��h(�� �\�,U8�[���x $!�\L]<#�#�$P%�% &�&T'�]p()|)�)�^`+8_�,x-H.�.8/�/x01�1�1,2�2�_H45X5�o�_���������������������������������������������������������������������������������������������������������������������������������`��������������������������������������������������������������������������������������������������������������������������������b��������������������������������������������������������������������������������������������������������������������������������c��������������������������������������������������������������������������������������������������������������������������������d��������������������������������������������������������������������������������������������������������������������������������(e��������������������������������������������������������������������������������������������������������������������������������4f��������������������������������������������������������������������������������������������������������������������������������@g��������������������������������������������������������������������������������������������������������������������������������Lh��������������������������������������������������������������������������������������������������������������������������������Xi��������������������������������������������������������������������������������������������������������������������������������dj��������������������������������������������������������������������������������������������������������������������������������pk��������������������������������������������������������������������������������������������������������������������������������|l���������������������������������������������������������������������������������������������������������������������������������m���������������������������������������������������������������������������������������������������������������������������������n�����������������������������������������������������������������������������������������������������������������������������������������������������o�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������q�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������r�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������s�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������u�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������v������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������x������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������y������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������z������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������${������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<}������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������H~������������������������������������������������������������������������	�T�acd e,f8gDhPi\jhktl�m�n�o�p�q�r�s�t�u�v�wyz{(|4}@~L�,UT��	��Ŗ�L�	���؂`�	�����������������������������������������������������������������������������������������t�	���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	��������������������������������������������������������������\��	����������������,UX�l������88��@�:$S T$U,U�U�U�V�V�WtX�X�X <�=�>�FLN�T�Y�``6D�d�<9D9L9"�l�	��������������	����[��	��������������������������������������������������������������������������������(�����	��������������߅Ԅ	��������������������������������������������������������������������������������������������������!����������������������������������	��c�܅	����������0�	�����������������������������������������sP�X:,UH���Y0YH;�Yp;�Y�;|Z�Z�Z�Z�Z [�t�����	�������������ͿТ����У������ʺ��ξ����Ф��Х��Ц��ð��ЧШ��	Щǵ��Ƿ����˳��Ъ��Ы��������֦�����)�����	ЬЭλͽ��Я����в����������������где˴ж��������������μзий��k������о	мн������лкʩ����¾п����������������������������Ǥ����������	�����������Ȳ�����������ȼ��������������	��â����������ͤ��������;��������դ��������ʻ��������1���	����������������������������������ե�������η��s���	��¥����������������¯������������������������ɶ������������l�,U������x��d����	��������������������������������������������������������� ���	����������������������������¦�������9����	�˵�������������ѣ�������{��	Ѥ��ѡѢƯ������ѥ��νѦѩѧ��ѨѪ��Ѭѫ����X���Ѯѯ	��ѭ��ѲѱѰ��ѳ��Ѵͥ��ѶѵѸѷѹ����Ѻ��	�����������������Ѽ������ѻѽ����Ѿ�������Ȭ��ϻ����ʼ¶��ŵ��A����	���������������������������������������̽������������������������������������	���������ο��������������������������������������ȡ��Ŋ`���	����ʬ��������������������Ƚ��������������������������	����§������������˶���������������������������I�`�	�����έ����������������������Ңң����ϫҥ��Ҥ����؏��Ҧ	��ļͦ��ҧ��ưҨ��̳����ҩ��ҭ��Ҫ��ҫ����ҮүҰұ������͋P������	��Ҳ��ҳҵҷҶҸ������ҹ������Һ����һҼҽҾɤ����ƿ�ؐҿ��	����������Ⱦ����´������ñ����������������������¨������������Q�\�	�����������������������������������������	����������ͧ��ȿ���������������������������á���������������������������ՌP�	��������������Ʊ̾���������������������������������ʭ����������	Ϥ����������������������̣����������̿Y�|���	�������������������ӣ����ӡ�Ӿ�����ӥ��Ӥ��ܓ����Ӣ	�����Ӧ��ӯӧӨ����ӭӬůӮӫ��ݍP�	������ө��Ӫ��Ӵͣ��ӺӹӰ�����ӱ	��Ӷ��ӳ����ӷӸӵӻӲ�����a���ӽ	����������ӿ���Ӽ�����������������������������D�	����ԧ�����������������������	ò��������������������������'���	��������������������ʮ��ȸi�@���	������������ǹ����������������������	��������������������������������Ȗ�	���ԡ�Ԣԣ����ԤԦԥԨ��ԩ��������Ԫԫԭ/�4�Ԯ	����˷Ԭԯ������Գ����ó԰��Դq���	��ԲԵ��ԶԷ����ԹԺ��ԻԸ���Ա	ԼԽ��������Կ�Ծ��Ǹ������������������0���	Ʋ��������������������������������7���ʽ��	��������������ȹ��������Ŷ����������y��	����������������������ʯ������������L�	��������������������������������������������������������������	������������ͼ������¿����̴����ŷ�������������������?�$�	�������������������������������������å�ʳ����ա������	բǡ����ǥի����̯֬գզ����˸��է��������Ò(�	ը������������լխժ����թ��ɱ���������	����ղհ̼ճձկ��ծ����շո��G��մϬ	��ն��չ��պյ̻��0�	��ջɲռ�ս˓h�	��տ��վ�������������������
���	����������������������O�؜��	����������������¸��������������������¹��֣�������������	�����������������������������������������ͨ��������������������Ӕ����	��������̩����������������������������������ǫ�������������������������$�	���������������º����Ƴ�������������������������������ǢW�Ȟ���	������������֢֡���Ÿ°�������֤֥����֧֨��X�	֩��֪֫��������̨֭����ֱ֯����ְֳ֮ە̟	ֲִֵƽ����ֶֹֻ������ָ��ַ�(�	��ּ������ֽ��־�������������_�x�	��������������ֿ��������������Ƞ	��������ֺ������������������������	����������������������������������������̦��������ç��%�`�	�����������ġ������������������Ģ������˹g�ܡ��	�������������������Ȩ��ʾ����ʿǯ������������ͩ�����@�	ģ�������������Ź������������������������	������ϭ����ספץף���קצערשת׭׫׬׮����ׯ����Ƕװ�-� �	��ױϮײ�׵Сб���׶��Ĥ��׷ʦ��������������׸׹׿����ĥ��׺ɫ��o���	׻��׼��׽׾�������״׳����ɧ����ɷĦ��������������������H�������������	������Χ������������������������������ħ��Ű�����̤	��ɬ��Ǧ����˺˻������������ح��ǰ��������5�\����P������X�؎X�ЏH�АT��H��t�ԓH����<����8�|���,����(����D������ ���ܛ(�`���М������P�ğ �p����X�ԡ8������@�ĤT�����	��������������������������������������������w�̦	��������������������������������������������©��������4�	��ء������ا���إ��أؤ�آ��ͪ����ئǺ������جذ��ة��خ����	��د����ث��ر��������تب�������ؽ����ظصض��عؼ=�@�ط��	غش��ؾؿ����س��������ػ����������������������	�������������ز���������������������������θ��������������������0�	ͫ�������������������ʰƴ�������������������	������������������������Ĩ���������������E�$��	������������������������١��٢��٣٤��٥٦٧������˼������٨	���������٩��ʧ��٬٪٭٫ٮʱ������ٯٲ��ɛ���	ٰٷ��ٱ����ٳٴٸ��ٵ������ȴ������ڭ����ٻ�������	��ôپ�����������ټ��ٺ����ٶٹ���������������������������������ٽM���	������������ĩ������������������������	ª����������Ľ�������������������DZќ���	����������������������Ϋ��õ���������������������������<���	·�����������ͬ��������������������U���	��»�����������������������������	���Ŧ������������ٝd�	�������Dz��Ƶű��������������ڥ����	��ڧڣڤ����ڢٿڦڡګڬŧڮ��ک��گڨڳڲڱڴڶ��]���ڵ	ڹڷڸ��ڻں�ڼڰ��ڽھ�ڿ����������l�	����������������������������������������Ũ�����̯	����ʸ����������������������������������������������#�8�	������ι������²���������������ö����������������e�����	���������������������������������������������������������ۦ��(�	���������������������������������������������������������	�����������������������Ī��������˽ۢ�����+�0�	�ۡ���ۣ��ۤ���ۥۧۨ۩������۪۫����������������m�����	����ͭ����۬��Ŀۭϯ˾īۮ��ۯ۰��̤�����۲����۴۷۶����۳���	۵۸�������¼����ۻ��۹«ۺ����ۼ۽����������ۿ������������������	���۾�����������������������������������������3�<�����	���ɢ����˿��������ͮ�������������������������������u���	����������������������������������������0�����������	����������������������������ɰ�������������	���������������������������������������������������;��	��ܲ�����������ܡܣܧ�ê��ܫ�ܨܢ��ܬ��ܪ��}�x����	ܦ���̺�������ܥ��ܯ����ܱ�ܰܩ�ܭܮܿ��ܤܻܽ�����	���ܸ��ܾ��ܵ������������ܷ��ܺ����ܼ��ܴܶܳϰ��ܹ�h�	����������ϱ��������������������������C��	�������������������������������������������������@�	�����������������ɸ������������������������������îǣ��	��������������������������������	�,���	�����ݡ�����ݬݨ��ݧݦݣK���	��ݥݤݪϦݭ��ݩݫ����ȧݮݲݯ��й	��ݰ��ݳݴ��ݶ����������ݸݷݺ������Ϥ�	ݽݼݾ��÷ݿ�������������������������������������t���	��������������������������������������������������S����	���������������������������������`�	����̱��������������ɹ������ץ�������	������������������������������������������	������������������������������������ʨ�ޡ��������[�h�	�����������ˡ�ޤ��ޢ�ˢ����ť��ޥޣ��������	����ްޯ��ެ��ƶަ������ީ��ޮޭިޫ��ު��ߦT�	ή����޶޴��ޱ޳����ϲ������������޵!���	޺����Ͱ޷޲޸��������������޾���c����	����޿������������������ø�������������������ʥ����޻��ź����d�	��������޽����޼����������������������������¬������������������	��̫��������ù����ͯ��������������)�|��	��Ȯ��������ί������������������Ů����k�п	��������������������������ũߣ������0�	��ɺ����ϳ��ߢ��������̡������ߡ����	������߯ߪ������߳߬Ĭߩ����ߦߥ߮1��ߨߧ߭	��ߤ��߰߱��߶ߵ߷ߺ��ߴ��߸s�@����߲ǻ	߹߾߼߿��߻��Ǩ޹��߽���߫������������,���8���(�������x����ܬ4����\����d�į0��� ���(������4���(�����p��`�ܷ8���$�x�ȹ�l��X����`��L����\��t�ȿ(����8������	��������������������������������������������	�������������������9�p�	��ϧ������������ú�������������{���	�������������ˣ������	����������ʲ��̵��������,�	�����������������������������������A�h�	�������������������Ǯ�������	��dz��������������������������������ū�	�������������������������t��	��������ĭ�������̶��ϴ��ʪ��������I�������	���������������������0�	�����������������������������ì��ϵ��ͬ��	���������������������ǭ������ͱͲ�������	������������������������������Q�@�	��Ψ����������������������	������������������������������������խ��	�������ΰ�������������������������$�	����������������������������������Y�|�	������������������	������ɻ�������������ݮ�	����������������ż�����������������ͳ������ҴĮ����`�	�����������Ȫ��α������ȫɭ�ά�������������������������a���	����������ɥ����������������������������������������	�������������������������Ρ�����������������������	��������������������������'�`�	��������������������������ȯ�����ɴi����	���Ū�����������������������������������	����������������ݹ��������������ľ��������	����������������̲�����������į��/����	��������������������������q�`�	������������������Ʒ����������������	��������̷������������û������������	��������������������ˤ������7�H�	��������β����ȣ������y���	����������������������������������������	���������������������,�	����������������������?�x����	������ʹ������������Ǫ��ɼ�������������	Ͻ������ʡ����������ǩ���������ó(�����	��������������������������������	�������̭ɣ������������������������������G�����	��������������������������������������������P�	��������������������������������������˴��	������������Ω����������������ε������������Ƹ����è����ü����ѿ������
��	��������������ū���������������O���	�ɮȦ�����ȵ��������������������	����������̧������������ý��Ȣ�Ȥӵ�����	��������������������϶�����������	����������������������������������W�D���	������������������������������������	������ʴ��̰��γ����Ǵ����������������������������������۶����	�������������ʵ�������������������t���	���������Ǽɳ�����������ʶ�������������������������_���	��������������������������������������������h�	�����³��������������������������������þ��������	�������������������������������������������%�h�	���������������������������˥�������������������g���	���������������������������������������������������H�	�������������Ż����������	����-��	����������������������ȳ���������o�$�	������������������������������������	��������������������������������������h�����$�`�����l���(�x���8������t����X���x���X��������X�����@�����$�p��� �����H�������x���<�����l���`���`���@����,U����X�`���Ϸ	������������������������������������ÿ��5�l�	������������ʹ���������������İ��������ϸ��w���	������ȥ�Ͼȩ����ɪ��������������������������������<�	�����������������˦��������ƹ���ǽ����	��������̮���������æǾı�=��	����������������������IJʢ�����`��	������������ɨ��������������ǿ�����	���������¡�����������������������������������0�	����������ڪ����������а�����������������������������������E�����	�����������������������������������������,�	��������������������������˧��������ɼ��	������������������������������������������	�������������������������������M�T��	���������������������������	���������������������ѽ�	�������������������������������ɩ������������d�	��ƺ����˨�������������������������U���	������Ϊ�������ơ��������������Ǭ���������(�	����������������������������������پ��	����������������̬��������˩ϡ����������	����̢���������������¢��]�8���	����������������������Ƣ������������	�����������������������������������	���������ƣ������������#�`�	��������ݱݢ����������e���	������������κ�����������������	���������������������������D�	�����������������������Ⱥ�����������������+�����	˪��������������������̪������������m���	��Ϲ����������������ij�����L�	�ͻ�������������	����������������3���	������������������������u�,���	��������ާ��������������������ɽ������������������|�	������������µ������������������������������	���������΢��͵����������Σ��������������������;�P�	����ʣ������˫���������������}���	���������������������������	���ʤ������������������������������p��	������������C�����	�������Ƥ�������������������ˬ��������������������	��������������ɾ��������������������������������������	�����������ǧ������Ͷ������������������������ï��������Ĵ	��	���������������������ĵ�����������������͡���������������K���������	ƥ�������������������������������ɵ���������	������������������������������������	����������������	ë��S�4�	�Ʀ�˭�����������Ю��ɿ����P�	������������������������������������������������������Ž������������Ϩ����	����±������������������������������������������@�	������£������������������[���	�������������������������	��Ķ��������­������D�	����������������������������ϩķ�����!�x�	������Ƨ��������c���	�����������������������	�����������������������l�	�������������������ž��������������)���	��������������������������������������͢�������k�$�	������������Ų��������������������	����������ҡ�������ä�����������é����	�����������������������ų���������������1�8���4����X���(���$�����L����\��� �����0�����X�����<�����D�����$�t���H����h��������������,�,UH���8����<�p����d��������0���������	ƨ�������Ʃ�������������������®¤���Ϣ������������ɯ�s���	���������ͷ����������ƻã�����½������������Ŭ����������������������H��������	�����͸��ˮ������š����	����Ϻ�����������͹����9�P�	�������Ţ����{���	���������������������������������������������	��������������Ȱ����������������������(�����	����������Τ��������������ţ������������������������������������A���	���������������������������������������	Ŵ�����������������������ȭ����������������l���	��Ƽ������������ĸ�����������	���˯����������������������������������I�$�	�����������������������������ϣ���Ͽ�������	������������������������������	��������������������H�	�����ŭ�������������Q���	�������ƪ�����������������	����������������������������������������� �	�����	ĹY�����	������������������������������������ȶ��������������������	����������������Ʈ����������(�	����������������l���	�����������������������������������ƫ�Φ����a���	��δ�������������������������������������������Ȼ��$�����	ͺ���������������������Υ��������ʷ���������������	�����������������������̸����Ϫ��۱��������'�4�	���������������������������������������������������������i���	��������������������������������������0�	��������������ǣ����������������	��ĺ������������������������������Ƭ����������/��	�����������������ſ������������q�D�	���������	�������������Ҭݻ��������˰�����	����������������������������7�	�������������y��	�����������������������������	��������������������������������������������	������������������ƭ����?�`��	�����������������������������������	���������������	����������������������ȱ�ɦ�������	�������������ݵ����G��	������̥���������ϥ��������	������ʫ�����������������������(�	������������������������������������
����	��������������������������������������������������O��	����í����������������X	Ļ��ȷ������˱�������	����ƾ����������������������������	�������������̹���˲�����W� 	������������������|	���������������������	�������	����������_�,	������������ϼ�������������������������������P	�������������������������������������������������������	����Ť����������ɡ��%�4	����������������������������g�l	ζ��������@���H����� �x��d������@�����x���,U�� �d������,���(����<�����x��X��|� |�P��t�$H�,d���o�	�����	��؂�	�����������������������������������������������������������������		�������������������������������������������������������������������������������������������������������������������������������		���������������
,U�	�	�
��8�
��
� �,Ū�ԅ(��X�X���=�Ħ�d����`6�
<9D9L9��	��������������������������������������������������������������h�����������������������������������������������������������������������������������������������������������������������������������������������������	������������������������������������������������$��	��������������������������������������������������������������������������������������f��
	����P	������������������������������d	����������������������������������������������������������������������,��	����������������������������������������n�H	�������������������������������������������	�������������������������������������������������������	��4����������������������	v��	�������	�����������,U��<�	��������������������������������������~�	������������x	����	����������������D��	���������������������������������������������������������	��������������������\	��������������
����	����������������������������������������������������L��	����������������������������8	����������������������������|	������	��������T��	���������������������������������	����	����X	���������������������������������������������������������������������������������������������l	������������������\�4����	��������������������������h��������	�����������������	����������������������������������"��	����@	����������������������d�T	�������	�����	����*��p��,U�T��0t���Pd�;,|Z�Z`��8L����l����������	����������������������������������������������������������������T����������������������������������������������	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	��������������������������������2��	������������������������������t�L	�������������������������������������������	�����������������������������������������������������	������:�l	�����������|��	�����־��	����������	��������B��	��Ȅ��	��������������	�������,	���������J�D	��ʌ�`	�����t	�����������	���R��	������������������	�����	�������������������	������Z����	��������0	�����L	������ �`	���b�x	�����ߤ��	������������	�����������(��	������j��	�����������������	����������	�����0�8	�����r�P	������h	����	���8�����	��z��	�������	���������	������@��	���������Ȃ�	�����,	�������@��\��,UD�<��d=<=d=�����$<Xl�����(DXp�����0H`x�����$8PH�X	���4 	����H 	���\ 	����p 	��������� 	����P�� 	��������Ȓ�� 	��������� 	����� 	�������!	������X�!	����4!	��������H!	�������������`!	����������`��!	������������!	������!	���������&��!	�����!	�����h�"	�������"	���R�0"	��������D"	������.�\"	���p�t"	������"	������"	�����"	�����6��"	���x��"	�����"	������#	������>�#	�����4#	����H#	�������������\#	�����F�|#	���������#	�����#	���Y��#��������	�����������Ϳ���Т�������У������ʺ��ξ�������Ф��������������Х��Ц��ð��ЧШ��#���	Щǵ��������Ƿ����˳�����Ъ��Ы�����������֦��������N��$��	ЬЭλͽ��Я������в�������������������где˴ж��������������μзий��������������$����о���м	н���������лкʩ�������¾п����������������������������������������Ǥ������%�����	�������������Ȳ��������������ȼ�����������������\&	��â��������������ͤ��������������;��������դ�������������������ʻ����������������������V��&	��������������������������������������������ե����������η��������'	��¥��������������������������¯����������������������������������ɶ���������(@ T h ,U| � � � � � !,!@!X!x!�!�!�!�!�!"("<"T"l"�"�"�"�"�"�"�"#,#@#T#t#�#�#�#�#�$�$�%T&�&|'(�(��(�������	����������������������������������������������������������������������������^�t)���������	��������������������������������������������¦��������� *�	����˵�������������������������������������ѣ���������������*	Ѥ��������ѡѢ��Ư��������������ѥ���νѦ���ѩѧ�������ѨѪ�����Ѭѫ��$� +��Ѯѯ����	�����ѭ����ѲѱѰ�����ѳ�������Ѵͥ����ѶѵѸѷѹf��+Ѻ��	�����������������Ѽ������ѻѽ�����������Ѿ�����Ȭ��ϻ�������ʼ¶��ŵ�������,,��	���������������������������������������������������̽��������������������������������������,	�������������ο������������������������������������������������ȡ��,��-�����������	ʬ����������������������������Ƚ������������������������n�,.	����§�����������������˶���������������������������������������������.	�����������έ�����������������������������Ңң�����ϫҥ��������Ҥ���X/	Ҧ��ļͦ���������ҧ�������ư��Ҩ��̳����ҩ��ҭ��Ҫ��ҫ������Үү���Ұұ��������4��/�����	��Ҳ��ҳ������ҵҷҶҸ������ҹ��������Һ�����һҼҽ���Ҿɤ�������ƿv��0ҿ�������	��������Ⱦ����´������ñ������������������������������¨�������������������(1	����������������������������������������������������1���	����������ͧ��ȿ�������������������������������á���������������������������������<�D2	��������������Ʊ̾��������������������������������������������ʭ������~��2��	Ϥ�����������������������������������������̣������������̿�����3��	�����������������������������������ӣ�������ӡ�������Ӿ�����������ӥ��Ӥ���4����Ӣ����	������Ӧ��ӯӧӨ�������ӭӬ������ů���Ӯӫ��D�4������	�����������ө��Ӫ����Ӵͣ��Ӻ��ӹӰ������45ӱ���	��Ӷ��������ӳ������ӷӸӵӻ��������Ӳ�������������5ӽ���������	���������ӿ��������Ӽ��������������������������������
6	����ԧ�������������������������������������������L�6	ò����������������������������������������������������Ď�6���	�������������������������������������������ʮ����ȸ�h7��	�������������������������������ǹ��������������������������7��������	�����������������������������������������������������TT8�	���ԡ���Ԣԣ����Ԥ���ԦԥԨ�������ԩ�����������������Ԫԫԭ��8Ԯ	����������˷������Ԭԯ����Գ��ó���԰�����������������������Դ�h9	��ԲԵ��Զ�����������Է����Թ���Ժ���ԻԸ���9Ա	ԼԽ�������������Կ�Ծ�����Ǹ��������������������������������������������\@:��	Ʋ������������������������������������������������������:ʽ��	��������������������ȹ���������������Ŷ�������������P;	���������������������������������������������������ʯ����������"�;	�������������������������������������������������������������������������������������dD<	���������������������������ͼ������¿����̴�������ŷ������������������������<	����������������������������������������å���ʳ����������ա�������=	բǡ����ǥ��ի������̯֬գ���զ����˸�����է���������*$>	��ը��������������������լխժ������������������թ��ɱ�����������l�>	����ղ������հ�����̼ճձկ����ծ����������շո���?մϬ	��ն�����չ�������պյ���������̻��?	�������ջɲ����������������������������ռ�ս���2�?	��տ����վ����������������������������������������t4@���	����������������������������������������@����	����������������������¸�����������������������¹�����֣������������������@�����	�������������������������������������������������ͨ�����������������������:�A���	��������̩����������������������������������������ǫ������������������������������|8B	������������������º����Ƴ�������������������������������������������Ǣ��B���	������������֢֡���Ÿ��°������������������������֤֥�������֧֨������C	������֩����֪֫������������������������̨֭����������ֱ֯����ְֳ֮B0D	ֲִ���������ֵƽ����ֶֹֻ������ָ��ַ��D	�����ּ�����������ֽ��־�����������������������������������E	�������������������ֿ��������������������	�E	������������ֺ����������������������������������������������J	�E	����������������������������������������������������������̦��������ç���	pF���	������������������ġ�������������������������Ģ������˹����	G��	���������������������������Ȩ��ʾ����������������ʿǯ��������������ͩ���
�G	�������������������������������������������������R
0H	���������ϭ��������ס���פץף���קצערשת׭׫׬׮����ׯ�����Ƕ���װ��
�H����ױϮ	����ײ�׵Сб������׶��Ĥ��׷ʦ��������������������׸׹׿���ĥ���׺ɫ����
TI�׻	����׼��׽׾���������״׳��������ɧ���ɷĦ�������������������������J������������	�������Χ��������������������������������������������ħ�������Ű����Z�J	�����ɬ����������Ǧ�������������˺˻�������������������������ح�����ǰ������������lK*�*+�+$,�,�-$.�.P/�/�0 1�1<2�2�34�4,5�56�6�6`7�7L8�8`9�98:�:H;�;<<�<�=>�>?|?�?,@�@�@�A0B�B�C(D�DE�E�EhFG�G(H�HLIJ�JdKLL	����������������������������������������������������������������M	�����������������������������������������������©��������� �M	��ء�����ا���إ�����أؤ�آ������ͪ����ئ���Ǻ������������جذ��ة��خ���b(N	��د���������ث����ر��������������تب����������ؽ�����ظ���صض����عؼ��Nط��	غش��ؾؿ�����������س��������������ػ�������������������������`O	�������������������ز������������������������������θ���������������������(
�O	ͫ�������������������������������ʰ���ƴ��������������������������j
�P	���������������������������������Ĩ�������������������
Q�	�������������������������١��٢����������٣٤��٥٦٧��������˼�
�Q��٨	�����������������٩��������ʧ������٬٪٭���٫���ٮ���ʱ��������������ٯٲ��0(R��	ٰٷ����ٱ����ٳٴٸ��ٵ���������ȴ�������ڭ����ٻ����r�R	����ôپ�����������ټ��ٺ����ٶ�����ٹ��������������������������������������ٽ�HS	�����������������������ĩ��������������������������������������S	��������ª�������������Ľ���������������������������DZ��8pT��	�������������������������������Ϋ��õ�����������������������������z�T��	·�����������������ͬ�������������������������������������������xU	�����»�������������������������������������������U	����Ŧ����������������������������@hV	�������������Dz���Ƶ���ű��������������ڥ�����V	��ڧ��ڣڤ�������������ڢٿ������ڦڡګڬŧڮ��������ک��گڨڳڲڱ��ڴ��ڶ������0Wڵ	���ڹ���������ڷڸ�������ڻں���ڼڰ�����ڽھ�ڿ���������W	�������������������������������������������������Ũ�������HTX	�������������ʸ����������������������������������������������������������������X	���������ι���������²������������������ö��������������������������pY��	���������������������������������������������������������������������������ۦ�Y	�������������������������������������������������������������������������������������������������P�Z�����	������������������������������Ī��������������˽���ۢ���������`[	�ۡ�������ۣ��ۤ�����ۥۧ��ۨ���۩������۪۫������������������[�����	�������ͭ��۬�������Ŀۭϯ���˾īۮ��ۯ۰��̤�����۲������۴۷۶����۳�\	۵۸�����������������¼�������ۻ�����۹«ۺ����ۼ۽����������ۿ�����������������������X$]	�����۾����������������������������������������������������������]����	���������ɢ����˿����������������ͮ���������������������������������������������d^	�����������������������������������������������������������������_����������������	����������������������������������������ɰ�������������������������`�_	�������������������������������������������������������������������������������������������8`	��������ܲ�����������������ܡܣ���ܧ����ê��ܫ�ܨ������ܢ���������ܬ���������ܪ���������`���	���ܦ��������̺�������ܥ��ܯ����ܱ�ܰܩ�ܭܮܿ����ܤܻ���ܽ��&�a	����������ܸ����ܾ��ܵ�������������������ܷ�����ܺ�������ܼ��ܴܶܳ���ϰ��ܹ���h,b������	���������ϱ���������������������������������������������������b�����	��������������������������������������������������������������������������������Xc	������������������������ɸ������������������������������������������������î�����.d	���������������������������������������������������������p�d��	������������������ݡ�����������������ݬ���ݨ��ݧݦݣ��� e	��ݥݤ������ݪϦ���ݭ��������ݩݫ����ȧݮ������������ݲݯ�����e	��ݰ��������������ݳݴ���������ݶ�����������������ݸݷݺ������6f	ݽ��ݼݾ�����÷ݿ����������������������������������������������������������x�f�����������	�����������������������������������������������������������4g��	�������������������������������������������������������g	��������������̱��������������������ɹ��������>Lh�����	������������������������������������������������������h	��������������������������������������������������������ʨ�ޡ���������<i	�������������������ˡ����ޤ���ޢ������ˢ����ť�����ޥ����������ޣ��������i���	�������ް��ޯ��ެ��ƶަ���������������ީ���������ޮ���ޭިޫ�������ު����F�j	ή������޶޴�����������ޱ޳������ϲ�������������޵�k��������	޺���������Ͱ���޷���޲��޸��������������������������޾�������k��	���������޿���������������������������������������ø��������������������ʥ�����޻��ź��l	��������޽����޼��������������������������������������¬�����������������������N�l	���������̫����������������������ù��������ͯ���������������dm�	��Ȯ����������ί��������������������������Ů������m	����������������������������������������ũߣ��������\n	��ɺ��������ϳ����ߢ����������������̡����������������ߡ�V�n	������������߯����ߪ��������������߳��߬Ĭߩ����ߦߥ߮�����loߨߧ߭	��ߤ������߰��߱������������߶ߵ߷����ߺ����ߴ����߸������o���߲ǻ	߹����������߾߼߿��������߻��Ǩ޹�����߽�����߫�������������|p�M N�NXO�O�PQ�Q R�R@S�ShT�TpU�U`V�V(W�WLX�XhY�Y�ZX[�[x\]�]\^_�_0`�`�a$b�bPc�c�de�ef�f,g�gDh�h4i�i|jk�kl�l\m�mTn�ndo�otpqq�����	���������������������������������������������������������^r	������������������������������������������������������������۠�r	��������ϧ�����������������������ú��������������������s	����������������������������������ˣ��$�s	��������������������������ʲ������̵������������������f�s	������������������������������������������������������Dt��	�������������������������������������Ǯ���������t	��dz������������������������������������������,0u��	������������������������������������n�u�	����������ĭ���������������̶��ϴ����ʪ����������������(v����	���������������������������������v��������	������������������������������ì�������ϵ��4w	�����������������������������������ǭ���������������ͱͲ����������v�w	��������������������������������������������������������x	��������Ψ���������������������������������������������������������������x��	��������������������������������������������������������< y	����������ΰ��������������������������������������������������~ �y�����	�������������������������������������������������������������� z	����������������������������������������������������������������!�z	������������������ɻ���������������������D!@{	������������������ż�����������������������ͳ������ҴĮ�������!�{��	�����������������Ȫ����α������ȫɭ�ά�����������������������������������������!`|	�������������ɥ�����������������������������������������������������
"$}���	���������������������������������������������Ρ�������������������������������������L"�}���������	����������������������������������������������������������������������"X~	����������������������������������������������������ȯ�����ɴ�"�~���	�Ū���������������������������������������������������������#�	��������������������������ݹ����������������������ľ�������T#,�	������������������������̲�������������������į���#Ȁ��	���������������������������������������������������#D���	��������������������������������Ʒ������������$��	��������̷��������������������������û��������������\$,�	�������������������������������������ˤ�������$��	�����������������������β������ȣ�����$�	�������������������������������������������������������������"%\�	����������������������������������������������������������d%�����	������������������������������������������%d����	�������������ʹ��������������������Ǫ�����ɼ�����������%Є����	Ͻ������ʡ��������������������������ǩ�������������������*&\��������	���������������������������������������������������l&���	�������������̭��ɣ�����������������������������������������&l���	���������������������������������������������������������������������&��	��������������������������������������������������������������2'��	������������Ω��������������������ε������������Ƹ������è����ü������ѿ��������t' �	������������������ū������������������������������������'Ј	����ɮ��Ȧ�������ȵ����������������������������������������������'\�	����������������̧���������������ý�����Ȣ����Ȥ���:(����	������������������������������������������϶���������|(������	������������������������������������������������������������(���	��������������������������������������������������������������������)��	������ʴ��̰����γ������Ǵ����������������������������������������������B)���	���������������������������ʵ�������������������������)����	�����������������Ǽɳ���������������ʶ��������������������������������������)@�����������������	����������������������������������������������*��	�����������������³�����������������������������������������������þ�����J*�����	�����������������������������������������������������������������*P�	��������������������������������������������������˥�����������������������*�	�������������������������������������������������������������������+|�	���������������������Ż����������������R+�	�������������+p�	����������������������������������������������ȳ����������������+��	���������������������������������������������,0�	�������������������������������������������������������������Z,���rs|s�s<t�t(u�u v�vw�wx�xy�yz�z8{�{X|}�}P~�~�$���<���$����T�؃\�ȄT��d�����ȈT���x��������8����H�؏t��h�,U��(���<�D���Ϸ�����������	��������������������������������������������������������������ÿ���,P�	���������������ʹ���������������������İ��������������ϸ���,�	������ȥ�Ͼȩ����ɪ��������������������������������������������� -l�	������������������������������˦���������������ƹ���������ǽb-�	��������̮�����������������������������æǾ���ı�����-|�	�����������������������������������IJʢ�����-�������������	�������������ɨ�������������������ǿ(.h���������	������������¡������������������������������������������������������j.�	�������������ڪ����������а�����������������������������������������������������.����	�����������������������������������������������������������������������������.4�	��������������������������������������������������������˧�����������������������0/̙	��������������������������������������������������������r/l��������������������	������������������������������������������/��	�����������������������������������������������/��	������������������������������������������������80������	����������������������������������������������������ɩ������������z0��	����ƺ��������˨�����������������������������������������0�	���������Ϊ���������������������������ơ�������������������Ǭ������������������0��	������������������������������������������������������@1(�������	��������������������̬������������������˩ϡ���������������������1����	�������̢��������������������������������������¢������1$���	����������������������������������������Ƣ�������������������2������	����������������������������������������������������������H20�	�������������������������������ƣ�����������������������2̠���	�������������������ݱݢ�����������������������������������2P������	����������������������κ����������������������������3ԡ	���������������������������������������������������������P3L�	�����������������������������������������Ⱥ���������������������������3����	˪����������������������������������������̪�������������������������������3L����	�����Ϲ���������������������������������ij������4ܣ	�����������ͻ���������������������������X4\�����	������������������������������������������������4��	���������������������������������������������������������4<���	�����������ާ�����������������������������ɽ����������������������5��	������������µ������������������������������������������`5H�������������	����΢�����������͵�������������Σ���������������������������5��	�������ʣ������˫���������������������������������5T�������������	��������������������������&6̧�����	�ʤ����������������������������������������������h6<��	��������������������������������������Ҫ6̨��	�������Ƥ��������������������������������ˬ������������������������6,�	������������������������ɾ�������������������������������������������.7ȩ	�����������ǧ���������Ͷ���������������������������ï������������Ĵp7\�	��������������������������ĵ�����������������͡���������������������7�������	ƥ����������������������������������������������ɵ����������7��	��������������������������������������������������68�����	������������������������������x8��	ë���������8�	����Ʀ������˭�������������������������Ю��������ɿ���8�	���������������������������������������������������������������������Ž����>9������Ϩ����	����±�������������������������������������������������������������9<�	������£���������������������������9ܮ	�����������������������:,�	�����Ķ����������������­����F:h�	����������������������������������������������ϩķ���������:��	������������Ƨ������������������������������������:(�	������������������������������������������;��	������������������������������������������N;���	�����������������������ž��������������������;�����	�����������������������������������������������������͢��������;����	���������������Ų���������������������<��	���������������ҡ�������ä�������������������éV<ܲ	������������������������������������������������ų���������������������������<H��d��t��`����,�ęd�����x���� ������(�ĠH�̡D���D�ԣT���4���@���L�ħ4�Ĩ$���T��|�����,U���4�Ԯ$�`��� �������x�Բ@�ܳ��������ƨ	������������Ʃ�������������������®¤���Ϣ�����������������ɯ��<�	���������������ͷ����������ƻã�����½�������������Ŭ��������������������=������������	�������������͸���������������ˮ��������������š��^=X�	����������������Ϻ�������������������������������͹��������������=����	������������������������������Ţ����������������������=l�	����������������������������������������������������������������������$>�	����������������������Ȱ����������������������������������������f>l�����	����������������Τ��������������ţ��������������������������������������������>�	��������������������������������������������������>����	�����Ŵ�������������������������������������������ȭ����������������������������,?���	��Ƽ������������������������ĸ����������������������n?�����	����������������˯��������������������������������������������?�	���������������������������������������������������ϣ���Ͽ����?��	�������������������������������������������������������4@�	��������������������������������������v@��	�����������ŭ����������������������������������@�	���������������������ƪ�����������������������@\�	������������������������������������������������������<AȽ	Ĺ������~A@���	�����������������������������������������������ȶ���������������������������������A\�	�������������������������Ʈ������������B�	������������������������������DBd�������	���������������������������������������ƫ�Φ�����B��	�������δ������������������������������������������������������������Ȼ����B<�����	ͺ����������������������������������Υ������������ʷ���������
C���	�����������������������������̸����Ϫ�����۱��������LC��	������������������������������������������������������������������������������C�	����������������������������������������������������������������C��	����������������������������������������ǣ�����������������D0�	��ĺ���������������������������������������������������������Ƭ������������������TD��	������������������������������ſ������������������DP�	��������������������������������D��	�����������������������������������������Ҭݻ�����������������˰��E�	��������������������������������������������������������������\E���������	��������������������������������E0�	������������������������������������������E��	�����������������������������������������������������������������"F��	�������������������������������������������ƭ������������dFh���	����������������������������������������������F��	����������������������FD�����	������������������������������������������������ȱ�ɦ��������*Gx�	������������������������������������������ݵ����������lG�	������̥����������������������������ϥ�����������������G��	����������ʫ����������������������������������������G����	�����������������������������������������������������������������������������2H����	����������������������������������������������������������������������������������������tH,�	���������í������������������������������������������������������������������������������H��	Ļ�����ȷ���������˱�����Ht�	�������ƾ���������������������������������������������:I��	����������������������������̹������������˲�������������������|I,�	�������������������������������������������������I����������	�������������������������������������������J4�	��������������������������BJ��	����������������J�������	�������������ϼ���������������������������������������������������J�	������������������������������������������������������������������K��	����������Ť�����������������������������ɡ�����JK<�	����������������������������������������������������������������K��	ζ��������������K$���P��d�طd���������������T���8���,UT��\���4�������(���H������(�����`���<�p�������$���l���$���,��������4����P��oX�	�������LX�	����x�	����RL��	���������������������������������������������������������������������L��������������������������������������������������������������������������������������������	�L4�	�������	����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,Up�����,�������89M �	��ZMX�	����������Ml�	����M��	��ƨ���	��� N��	���bN��	������	�������	������	����N�	����(�	����N<�	���R�P�	������(Od�	��ʊ�|�	��Ҁ���	���jO��	��٨���	���jO��	������	�������	���4��	�������O�	����O4�	�����H�d�,U��������������� �4�H�\�t���������������,�@�T�0P\�	�����rP��	��������޴P��	���������P�	�����8Q �	���zQ8�	���zQL�	������Q`�	����Qx�	������	��@R��	��ՂR��	����R��	������	�������	�����	���S�	���������HS,�	�����������ȊSH�	����Sh�	�����T|�	���PT��	���T��	�������,U�����0�D�X�p����������������$�@�`�t����������T��	����<�	�����P�	���PTd�	���Sx�	���U��	���XU��	��� N��	���R���	����U��	����������U��	���V�	������`V �	���4�8�,UH�\�p���������������0�D��VL�	����T��	���������V��	���&W��	���������������������hW��	�����������۪W�	����� �	���8�4�	�����H�	��zQ\�	����������Wp�	������	��������.X��	�����pX��	������X��	�������X��	�����	�����	��6Y,����	��xY@����	�YX�	���������Yl�	��6Y��,U���������,�@�T�h��������������$�8�P�d�����>Z��	�����	��͚��	������Z,�	��D�	�𳖂X�	���Zl�	��bN��	������	������	����[��	�����	�������	������F[��	���[�	���ZM(�,U�$�<�P�d�x�������������� �4��[<�	����\��	���M��	�򡖂��	����N\��	��PT��	��p���	�����	���\�	����\0�	���\D�	���]X�	��bNl�	����V]��	����]��	�������]��	���&W��	������^��	��4���	������	�������^^ �	������^<�	����X�	��؂l�	�������^��,U������������(�<�P�d�x�������������4�P�d�x���$_��	����f_�	����S$�	���S8�	���L�	���R`�p�`�	���R|�	���6Y��	�������	���jO��	�����ب_��	�������_��	���jO��	���PT�	�����$�	������,`8�	����P�	��Ė�d�	���Ux�	���jO����	���n`��	�������	����������`���0�,UD�X�l�t���������������0�H�\�p������������`��	��@RT�	������4ah�	���������va��	���a��	���N��	����������a��	�����<b��	������~b��	��•�	��֌�$�	���zQ8�	�������bL�	����d�	����Ux�	����S��	����a��	���Y���,U`�x�������������0�D�\�p���������c��	������Dc�	��Y�4�	����RH�	���U\�	����p�	���p���	����O��	��� N��	�������c��	�������c��	���������
d��	������������Ld�	�������d,�	�������dD�	����\\�	���������ep�	������Te��	��׸a��	���bN��	������	������e��	���N��	��� N�	���&W �	���U4�,U,�@�T�h�|������������$�<�T�h���������������,�@��eH�	������f��	����a��	���R���	�������	��ֺ��	����\$�	��ݸa8�	����RL�	���&W`�	���XUt�	������\f��	��ݤN��	�������	���������f��	����\��,U��������0�D�X�l��������������f��	������"gD�	����R\�	�����p�	���a��	���p���	���Y���	���bN��	������dg��	���&W��T�,Uh�|��������������g��X��4��������L����<�,��g4����
H\�,U@��x�̄�ԅ(��XL, l)MrH��P��X`6P�h�D9L9hp���	

 !"#$%&'()*+,-./0123456789:;<=>?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@����	

��	

��	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDDDDDDDDDDDDDDDDDDDDDDDDDDD��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDE��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0123456789:;<=>?��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTTTTTTTTTT��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWWWWWWW��	

 !"#$%&'()*+,-./01��	

 !"""""""""""""""#$%&'()*+,-./0123456789:;<=>?@ABC"""""""""""""��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!��	

 !"#$%&'()*+,-./01234444444444444444444444444444444444444444444���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOOPQRSTUVWXYZ[\]�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU𠂉𠂢𠂤𠆢𠈓𠌫𠎁𠍱𠏹𠑊𠔉𠗖𠘨𠝏𠠇𠠺𠢹𠥼𠦝𠫓𠬝𠵅𠷡𠺕𠹭𠹤𠽟𡈁𡉕𡉻𡉴𡋤𡋗𡋽𡌶𡍄𡏄𡑭𡗗𦰩𡙇𡜆𡝂𡧃𡱖𡴭𡵅𡵸𡵢𡶡𡶜𡶒𡶷𡷠𡸳𡼞𡽶𡿺𢅻𢌞𢎭𢛳𢡛𢢫𢦏𢪸𢭏𢭐𢭆𢰝𢮦𢰤𢷡𣇃𣇵𣆶𣍲𣏓𣏒𣏐𣏤𣏕𣏚𣏟𣑊𣑑𣑋𣑥𣓤𣕚𣖔𣘹𣙇𣘸𣘺𣜜𣜌𣝤𣟿𣟧𣠤𣠽𣪘𣱿𣴀𣵀𣷺𣷹𣷓𣽾𤂖𤄃𤇆𤇾𤎼𤘩𤚥𤢖𤩍𤭖𤭯𤰖𤴔𤸎𤸷𤹪𤺋𥁊𥁕𥄢𥆩𥇥𥇍𥈞𥉌𥐮𥓙𥖧𥞩𥞴𥧔𥫤𥫣𥫱𥮲𥱋𥱤𥸮𥹖𥹥𥹢𥻘𥻂𥻨𥼣𥽜𥿠𥿔𦀌𥿻𦀗𦁠𦃭𦉰𦊆𦍌𣴎𦐂𦙾𦚰𦜝𦣝𦣪𦥑𦥯𦧝𦨞𦩘𦪌𦪷𦱳𦳝𦹥𦾔𦿸𦿶𦿷𧄍𧄹𧏛𧏚𧏾𧐐𧑉𧘕𧘔𧘱𧚓𧜎𧜣𧝒𧦅𧪄𧮳𧮾𧯇𧲸𧶠𧸐𧾷𨂊𨂻𨊂𨋳𨐌𨑕𨕫𨗈𨗉𨛗𨛺𨥉𨥆𨥫𨦇𨦈𨦺𨦻𨨞𨨩𨩱𨩃𨪙𨫍𨫤𨫝𨯁𨯯𨴐𨵱𨷻𨸟𨸶𨺉𨻫𨼲𨿸𩊠𩊱𩒐𩗏𩙿𩛰𩜙𩝐𩣆𩩲𩷛𩸽𩸕𩺊𩹉𩻄𩻩𩻛𩿎𪀯𪀚𪃹𪂂𢈘𪎌𪐷𪗱𪘂𪘚𪚲��	

��	

 !"#$%&'()*+,-./0123456789:;<=>????????@ABCDEFGHIJKLMNOPQRSTU??��	

 !"#$%&'$$$$$$$$()*+,-./0123456789:;<$$=>?@ABCDEFGHIJKLMNOPQRST��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTTTTTTTTUV��	

 !"#$%&'()*+,-./0123456788888889:;<=>?@ABCDEFGHI888J8888KL888MN𠀋𡈽𡌛𡑮𡢽𠮟𡚴𡸴𣇄𣗄𣜿𣝣𣳾𤟱𥒎𥔎𥝱𥧄𥶡𦫿𦹀𧃴𧚄𨉷𨏍𪆐�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0123456789:;<=>����	

����	

 !"#$%&'()*+,-./0123456789��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?��	

����	

��������	

��������	

������������	

��	

��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456788889:;<8����	

 !"#$%&'()*+,-.��	

 !"��	

 !"#$%&'()*��	

 !"#$%&'()*+,-.��	

 !"#$%&'��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-.��	��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*��	

 !"#$%&'()��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,��	


















 !"
#$%&'()*


��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./��	

 !"#$%&��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*��	

 !"#$%��	

 !"#$%&'()*+,-./��	

 ��	

 ��	

 ��	

 !"#$%&'(��	

 ��	

 !"#��	

 !"#$��	

 !"#$��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./0��	

 !"#$%&'��	

 ��	

 !"#$%&'��	

 !"#$��	

 !"#��	

 !"#$%��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./��	

 !"#$%��	

 !"#$%&��	

��	

��	

��	

��	

��	

 !"#$%&'(��	

 !"#$%&'()*+,-./0123456��	
			
				 !"#	$		%&'(	)*+,	-	.		/01��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*��	

 !"��	

��	

��	

 ��	

 !"��	

 !"#$%&'��	

 !"#$��	

 !"#$%&'()*+,-��	

 !"#��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-.��	

 !"#$��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-��	

 !"#$%&'()*��	

 !"#$%&'()��	

 !"#$%&'()*+,-��	

 !"#$%&'()*��	

 !"#$%&��	

 !"#$%&'()*+,-��	

 !"��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-��	

 !"#$%��	

 !"��	

��	

 !"#$%&��	

 !"#$%&'()*+,-��	

 !"#$%&'()*��	

 !"#��	

 !"#$%&'()*+��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()��	

 !"#$%&'()��	

 !"#$%&'()*��	

 !"#$%&'()*+,-��	

 !"#$%&'()��	

 !"#$%&'()*+,-.��	

 !��	

 !"#$%&'()*+,��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*��	

 !"#$%&'()*+,-.��	

 !"#��	

 !"#$%��	

 !"#$%&'()*+,-��	

��	

 !"#$%��	

 ��	

 !"#$%&'��	

 !"#$%&'()��	

 !"#$%&'()*+,-��	

 ��	

 !"#��	

 !"#$%&'(��	

 !"#$%&'()��	

 !"#$%&'()*��	

 !"#$%&��	

��	

��	

 !"#$%&'()*+,-.��	

 !"#$%&'��	

 !"#$%��	

��	

 !"#$��	

 !"#$%&'��	

 !��	

 !"#$%&'(��	

 !"#$��	

 ��	

��	

��	

��	

��	

��	

��	

 !"#��	

 !"��	

 !"#$%&'()*+,-./��	

��	

 !"#$��	

 !"#$%&'()��	

 !"#$��	

 !"#$%��	

 !"#$%&'(��	

 !"#��	

 !"#$%&'��	

 !"#$%&'��	

 !"#$%&��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./01234��	

 !"#$%&��		
	
											 	!"#$%&'				()	*	+,��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,��	

 !"#$%&'()*��	

 !"#$%&'()*+��	

 !"#$%&'()*��	

 !"#$%&'��	

 !"��	

 !"#��	

��	

��	

 !"#$%&'(��	

 !"#$%&'��	

 !��	

 !"#$%&'()*��	

 !"#$%&'(��	

 !"#$%&'��	

 !"#$%&'()*+,��	

 !"#$%&'()*��	

 !"#$%&��	

 !"#$%&'()*+,-./0��	

 !"#$%&��	

 !"#$%&'��	

 !"#$%&'()*��	

 !"#$%&'(��	

 !"#$%&'()*+��	

 !"#$%&'()��	

 !"#$%&'()*+��	

 !"#$%&'(��	

 !"#$%&'()*+,-./0123��	









 !
"


#
$%&'
()
*+,-
.
/��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,��	

 !"#$%&'()*+��	

 !"#$%&'()*��	

��	��	

 !"#$%&'()*+��	

 !"#$%&'()*��	

 !"#$%��	

 !"#$%&'()*+,-./01��	

��	

 !"#$��	

 !"#$%&'��	

 ��	

 !"#��	

 !"#$%&'()��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-��	

 !"#$%&'(��	

 !"#$%&'()*+,-./012��	

 !"#$%&'��	


















 !"#$%&'()*
+,

��	

��	

 !"#$%&'��	

 !"#$��	

��	

 !"#$%&'()*+,-.��	

 !��	

 !"#$��	

 !"#$%&��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./0��	

 !"��	

 !"#��	

 !"#$%&��	

 !"��	

 !"#$%&'(��	

 !"#$%&'()*+,��	

 !��	

 !"#$%��	

 !"#$%&��	

 !"#$%&'()��	

 !"#$%&'()*+,-./��	

 !��	

 !"#$%&'()��	

 !"#$%&'��	

 !"#$%&'()*+��	

 !"#$%&'()*��	

��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0��	

 !"#$%��	

 !"#$%&'()��	

����	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./��	








 
!
"
#$
%&
'

(
)*
+,-./0��	

��	

��	

��	

 !"#$%&'()��	

 !"��	

 !"#$%&'()��	

 !"#$%&'��	

 !"#$��	

 !"#$%&'()*+,-./01��	
		
																																��	

��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()��	

 !"#��	

 !"#$%��	

 !"#$%&'��	

 !"#$%&'()*+,-.��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,��	

 !"#$%&'()*+,-./0��	

 !"#$%&'��	

 !"#$%&'()*+,-��	

 !"#$%&'()��	

 !"#$%&'(��	

 !"#$��	

 !"#$%��	

 !"#$��	

 !"#$%������	

 !"#$%&'()*+,-.��	

��	

��	

 !"#$%&'()*+��	

 !"#$%&'()*+,-./01��	

 !"#$%&'(��	

 !"#$%&��	

 !"#$%&'()*+,-.��	

 !"#$%&'()��	

 !"#$%&'()*��	

 !"#$%&'()*+,-./��	

 !"#��	

��	

��	

 !"#$%&'()*+,-��	

��	

��	

 !"#$%&'(��	

 !��	

��	

��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-./��	

 !"#$%&'��	

 !"#$%&'()*+,-��	

 !"#$%&'()��	

 !"#$%&'()*+,-./01��	

 !"#$%&'(��	

��	

 !"#$��	

 !"#$%&��	

 !"#��	

 !"#$%��	

��	��	

 !"#$%&'()*+,-��	

 !"#$%&'()*��	

 !"#$%&'��	

 !"#$%&'()*+,��	

��	

 !"#$%&'()*+,-./0123456789:;<=����	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./0123456789:;<=>��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!���������	

��	

��	

����	

��	

����	

��	

��	

������	
��	
������	
��	

 !"#$%&'()*+,-./��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-��	

 !"#$%&'()*+,-./0123456��	

 !"#$%&'()*+,-./0��	

 !"#$%&'(��	

 !"#$%&��	
			
				 !"#	$%	&'()	*+,-	.	/		012��	

��	

 !��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./012��	

 !"#$%&'()*+,-./��	

 !"#$��	

 !"#$%&'()*+,-./0123��	

 !"#$%&'()*+,-./0123��	

 !"��	

 ��	

 !��	

 !"#$%&'()*+,-./0��	

 !��	

��	

 !"#$%&'()*+,-./��	









 !
"

#$
%


&

'()*

+
,��	

 !"��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*+,-��	

��	

 !"#$%&'()*+,-./01��	

 !"#$%&'()*��	

 !"#$%&'()*��	








 
!
"
#$
%&
'
()
*+
,-./01��	

��	

 !"#$��	

 !"#$%&��	

 !"#$%&'()*+,-./��	

 !"#$%&'��	

 !"#$%&'()*+,-./0��	

��	

 !"#$%&'()*+,-./0��	

 !"#$%&'(��	

 !"#$%&'()*+��	

��	

������	

 !��	

  !"#$%&'()*+,-./0123456789:;<=>?�����	

������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

 !��	

��	

 !"#$��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'��	

��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$%&��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	
��	

��	

 !"��	

 !"#$%&��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

 !"��	

��	

 !��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

 !��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	
��	

��	

 ��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	
����	

��	

 !"#��	

��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'()��	

��	

��	��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

������	

��	

��	
��	

��	

 !��	

��	

��	

��	

��	

��	

��	

����	

��	

��	
��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	
��	
��	

��	

��	

��	

������	

��	

��	
��	

���	





��	

��	

 !"#��	

 !"#$%&'()*+,����	

��	

 !"#$��	

��	

��	

 ����	
��������	

������	��	

��	
����	

��	

��	

������	

����	

 !"#$%&'()*+,-./��	
��	

��	
��	

��	
��������	

��	

 !"#$��	

 !"#$%&'()*+,-./0123456789:;<=��	

��	

��	

��	

��������������������������������������������������������������������������������	

 !"#$%&'()*+,-./01234��������������������������������������������������������������������	

 !"#$%&'()*��	

��	

 !"#$%&'()��	

 !"#$%&'()��	

��	

 !"#$%&'()*��	

��	

 !"#$��	

 !"#$%&'()*+,-./01��	

 !"#$%&'(��	

��	

��	

 ��	

��	

 !"#$%&'(��	

 !"#$%&'()*+,��	

 !"#��	

 !"��	

 !"#��	

 !��	

 !"#$%&'��	

 !"#��	

 !"#$%&'()��	

��	

 !"#$%&'()*��	

 !"#$��	

��	

 !"#$%&��	

��	

��	

��	

 ��	

��	

��	

��	

��	

 ��	

��	

��	

��	

 !"#��	

��	

��	

��	

 !"#$%&'()��	

 !"#��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'��	

 !"#$%&'()*��	

 !"#$%&'��	

 !"#$��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$%&��	

��	

 !"#$%&'(��	

 !"#$%&'()*+,��	

 !"#$%&'��	

 !"#$%&'()*��	

 !"#$��	

��	

 ��	

 !"#$%��	

 !"#��	

 !��	

 !"#$%��	

��	

��	

 !"#��	

 !"#$%��	

��	

 !"#$%&'(��	

��	

��	

 !��	

��	

��	

��	

��	

 !"#$%&��	

��	

��	

 !"#$%��	

 ��	

 !"#$%&'��	

 !"#$%&'()*+,��	

 !"��	

 ��	

 !"#$%&��	

 !"#$%&'()*��	

 ��	

 !"#$%&'(��	

��	

 !"#$%&��	

 !"#$%&'()��	

 !"#$%&'()��	

 !"��	

 !"#$%&'��	

��	

 !"#$%&'��	

 !"#$%&'��	

��	

��	

��	

��	

 !"#$%��	

 !"#��	

��	

��	

��	

 !"#$%&'��	

 !"#$%��	

 !"#��	

��	

��	

 !"#$%&'()*��	

 !"#$%��	

��	

��	

��	

 ��	

��	

 ��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

 !"#��	

��	

 !"#$%&��	

 !"#$%&'()*+,-.��	

 ��	

 !"#$%&'��	

 !"#��	

 !"#$%��	

 !"#$��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

 ��	

 !"#$��	

 ��	

 !"#$%&'()��	

 ��	

 !"#$%&��	

��	

��	

��	

��	

 !"#$%��	

 !��	

 !"#$%&'()*+,��	




















 !
"#

$%

&
'��	

 !"#$%&'(��	

 !��	

 !"#$��	

 !��	

����	

 !"#��	

 ��	

��	

 !"#$%��	

��	

��	

��	

��	

��	

��	

 !"#$%��	

 !"#$%&��	

 !"#��	

 !"#$%��	

��	

 !"#��	

��	

��	

 !"��	

��	

 !"#$��	

��	

��	

��	

 !��	

 !"#$��	

��	

��	

��	

��	

 !��	

 !��	

��	

��	

��	

��	

 ��	

��	

 !"��	

��	

��	

 !��	

��	

 !"#$��	

 !"��	

 !��	

 !"#��	

��	

��	

����	

��	

 !"#$%&'(��	

 !"#$%��	

��	
��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

 !"#$��	

 !"#$%&'()��	

 !"#$%&'()*+��	

 !��	

��	

��	

 ��	

��	

 !"#$%&'��	

��	

 !"#��	

��	

��	

 ��	

��	

��	

��	

��	

����	

 !"#$%&'(��	

��	

��	

 !��	

 !"#$%&'()*��	

 !"#$��	

��	

 !"#$%��	

��	

��	

 !"#$%&'��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	
��	

 !"#��	

��	

��	

��	

 !"#$��	

 !"#$%&'(��	

 !"#$��	
��	

��	

 !"��	

��	

��	
����	

 !"#��	

 ��	

��	

��	
������	

 !��	

 !"#$%&'()*+,,,,,,,,,,,,,,,,,,,,,��	
������������������������	

������������������������������������	

��������������	

����������������������������	

������������	

��������������������������	

��������������	

����������������	

����������������������	

��������	

������	
��	
�	

   !; ���<<���d���|zRx�$ȧ��0FJw�?:*3$"DЧ�� \����lH_GNU��	`	`h%@
F
����i�
@�@
S
`��i�
@�@
[
���i�
@�@
d
�9��i�
@�F
@
�Q��i�
@�S
@
L��i�
@�[
@
���i�
@�d
@
����i�
@�~�����

Ph%Xh%���o`��
��o%0P��	���o���o����o�ot���o#�m%��GA$3a1�)
GA$3p1113�	
GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignjapanese_euc.so-3.4.4-3.el8.x86_64.debug=��W�7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N�	�g��qņ�T�;t.e�͂�9%2�ʜ�I��%���A���G��zw�m���2�4�C�%���p\��Ү�Dk���
���|b�s'�*���q��J�������p�BQ���|+₋��:|�2s��0�����N>���%h�3�X��oWl;�b�c!�#�G���Y��)��&�#s��8�\8�_�U'�I�|�`��t�}��j���>{��Ձ�^����2���jܳ;��#ٝ~;w?�ߍ0�/AUM �(MN]s��C��$ &͹y��B�ڠ
u\^׆&��kKӒ,���l�����_�W�5�!����o����ux�(����PwZ����� �z����������MXu�#��$��� %�V�U�wA�H�70@Y�g
��V���t��� �;hc`e�@-%���(߻솠I|o˭��uG:�P��z<��2-���5mm�P��y'g�1��'��!������Y���	Ң�/8L,�A�\w("|6 ��J���4�C�������/��\��[)��_�#��~3�0JK������B~
������z��L�#=f�x��Ҡt]zQr|؁<����\Fd �i����`���`�x!9^`L4^��	��yz�*��˂n!A������|sRE׃jV��ň@��)��퍖7�so��?e結�ΡѤ^�a��?��:8�����ya2�&F�TkA��8�pW�]�VL���aX-��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ottE���o�� T���^BPP0h��c��0n�� w��,}


�@
@
QV ��`�`$��`�`t�0a0a �Ph%Ph�Xh%Xh�`h%`h  ��m%�m ��o%�oH�p%�o�pe�o��q0rHXu"PK*J[��Kx=x=lib64/ruby/enc/trans/transdb.sonuȯ��ELF>�@x6@8	@� �  �-�- �- �� �-�- �-   888$$� � �   S�td� � �   P�td   $$Q�tdR�td�-�- �- ��GNUY8|ܹ�f<!nʌ���cc�@ 	BE���|�1n��qX b , F"�0 �0 U���0 __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_transdbrb_declare_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��- ��- `�- �- �/ �/ �/ �/ �/ �/ ��H��H�Y* H��t��H����5* �%* ��h�������h���������%�) D���%�) DH�=	* H�* H9�tH��) H��t	�����H�=�) H�5�) H)�H��H��H��?H�H�tH��) H��t��fD�����=�) u+UH�=�) H��tH�=' �Y����d����m) ]������w������H��H��H�5�H�=����H�tH�5xH�=k���H�ZH�5XH�=\����H�@H�5IH�=7���H�&H�5$H�=.���H�H�5H�=�|���H��H�5�H�=�b���H��H�5�H�=��H���H��H�5�H�=��.���H��H�5�H�=�����H��H�5�H�=����H��H�5�H�=g���H��H�5TH�=�����H�zH�5:H�={���H�`H�5aH�=���H�FH�5NH�=��x���H�CH�5CH�=G�^���H�)H�54H�="�D���H�(H�5'H�=*�*���H�H�5#H�=����H��H�5�H�=����H��H�5�H�=�����H��H�5�H�=�����H��H�56H�=����H��H�5�H�=����H�rH�5qH�=��t���H�XH�5�H�=f�Z���H�>H�5GH�=��@���H�$H�5#H�=��&���H�
H�5H�=�����H�H�5�H�=��H�H�5H�=�����H��H�5�H�=����H��H�5�H�=����H��H�5�H�=����H��H�5�H�=��p���H��H�5SH�=��V���H��H�5�H�=2�<���H��H�55H�=��"���H��H�5�H�=����H��H�5�H�=L���H��H�5�H�=2����H�zH�5�H�=���H�`H�5�H�=����H��H�5H�=~���H�jH�5kH�=��l���H�`H�5�H�=V�R���H�FH�5CH�=��8���H�4H�55H�=8����H�H�5%H�=����H�H�5H�=����H��H�5�H�=�����H��H�5�H�=����H��H�5�H�=����H��H�5�H�=����H�~H�5�H�=��h���H��H�5�H�=t�N���H��H�5aH�=��4���H��H�5�H�=@����H�nH�5�H�=m����H�TH�5tH�=+���H�:H�5ZH�=B����H� H�5�H�=9���H�H�5H�=���H��H�5�H�=�~���H��H�5�H�=�
�d���H��H�5�
H�=��J���H��H�5�
H�=��0���H��H�5sH�=�
����H��H�5�H�=�
���H��H�5�H�=i
���H�sH�5V
H�=l����H�YH�5`H�=5
���H�?H�5"
H�=?���H�PH�52H�=��z���H�6H�5*H�=��`���H�H�5H�=��F���H�H�5�H�=��,���H��H�5�H�=�����H��H�5�H�=���H��H�5lH�=�����H��H�5�H�=K����H��H�58H�=����H�yH�5uH�=���H�_H�5H�=q�v���H�EH�5^H�=��\���H�+H�5�H�=H�B���H�H�55H�=��(���H��
H�5�H�=����H��
H�5H�={��H��
H�5hH�=�
����H��
H�5�
H�=G���H��
H�54H�=�
���H�u
H�5�
H�=���H�[
H�5H�=�
�r���H�A
H�5�
H�=�
�X���H�'
H�5�
H�={
�>���H�

H�5h
H�=�
�$���H��H�5�
H�=R
�
���H��H�5?
H�=w
���H��H�5d
H�=)
���H��H�5
H�=C
��H��H�50
H�=
��H�qH�5�H�=
��H�WH�5�	H�=��n�H�=H�5�H�=�	�T�H�#H�5�	H�=��:�H�	H�5�H�=�	� �H��H�5�	H�=���H��H�5vH�=s	���H��H�5`	H�=a���H��H�5NH�=?	��H��H�5,	H�=9��H�mH�5&H�=	��H�SH�5�H�=�j�H�9H�5�H�=��P�H�H�5�H�=��6�H�H�5�H�=���H��
H�5�H�=���H��
H�5�H�=o���H��
H�5\H�=����H��
H�5�H�=;��H��
H�5(H�=u��H�i
H�5bH�=��H�O
H�5�H�=N�f�H�5
H�5;H�=��L�H�
H�5�H�='�2�H�
H�5H�=���H��	H�5�H�=��H��	H�5�
H�=k���H��	H�5XH�=�
���H��	H�5�
H�=7��H�	H�5$H�=�
��H�e	H�5�
H�=�|�H�K	H�5�H�=
�b�H�1	H�5l
H�=��H�H�	H�5�H�=R
�.�H��H�5?
H�=���H��H�5�H�=%
��H��H�5
H�=g���H��H�5TH�=�	���H��H�5�	H�=3��H�{H�5 H�=�	��H�aH�5�	H�=��x�H�GH�5�H�=�	�^�H�-H�5�	H�=��D�H�H�5�H�=q	�*�H��H�5^	H�=���H��H�5�H�=D	��H��H�51	H�=c���H��H�5PH�=	���H��H�5	H�=/��H�wH�5H�=���H�]H�5�H�=��t�H�CH�5�H�=��Z�H�)H�5�H�=��@�H�H�5�H�=��&�H��H�5}H�=���H��H�5�H�=c���H��H�5PH�=_���H��H�5LH�=6��H��H�5#H�=+��H�sH�5H�=��H�YH�5�H�=��p�H�?H�5�H�=��V�H�%H�5�H�=��<�H�H�5�H�=��"�H��H�5�H�=���H��H�5|H�=����H��H�5H�=[���H��H�5HH�=g��H��H�5TH�='��H�oH�5H�=>��H�UH�5+H�=��l�H�;H�5�H�=�R�H�!H�5H�=��8�H�H�5�H�=���H��H�5�H�=���H��H�5xH�=����H��H�5�H�=W���H��H�5DH�=���H��H�5H�=#��H�kH�5H�=f��H�QH�5SH�=��h�H�7H�5�H�=8�N�H�H�5%H�=��4�H�H�5�H�=
��H��H�5�H�=���H��H�5�H�=m���H��H�5ZH�=����H��H�5@H�=���H��H�5�H�=��H��H�5H�=��~�H�zH�5�H�=��d�H�`H�5�H�=n�J�H�FH�5[H�=��0�H�,H�5�H�=C��H�H�50H�=���H��H�5pH�=���H��H�5VH�=���H��H�5�H�=5��H��H�5�H��H�=����H��H���big5UTF-8Big5CP950Big5-HKSCSCP951Big5-UAOcesu_8CESU-8chineseGB2312GB12345ebcdicISO-8859-1IBM037emojiUTF8-KDDIUTF8-DoCoMoUTF8-SoftBankemoji_iso2022_kddistateless-ISO-2022-JP-KDDIemoji_sjis_docomoUTF8-DOCOMOSJIS-DOCOMOemoji_sjis_kddiSJIS-KDDIemoji_sjis_softbankSJIS-SoftBankamp_escapexml_text_escapexml_attr_content_escapexml_attr_quotegb18030GB18030gbkGBKiso2022stateless-ISO-2022-JPEUC-JPcp51932CP50220CP50221CP51932japaneseShift_JISjapanese_euceucJP-msEUC-JIS-2004japanese_sjisWindows-31JkoreanEUC-KRCP949universal_newlinecrlf_newlinecr_newlinesingle_byteUS-ASCIIASCII-8BITISO-8859-2ISO-8859-3ISO-8859-4ISO-8859-5ISO-8859-6ISO-8859-7ISO-8859-8ISO-8859-9ISO-8859-10ISO-8859-11ISO-8859-13ISO-8859-14ISO-8859-15ISO-8859-16WINDOWS-874WINDOWS-1250WINDOWS-1251WINDOWS-1252WINDOWS-1253WINDOWS-1254WINDOWS-1255WINDOWS-1256WINDOWS-1257IBM437IBM720IBM737IBM775IBM852IBM855IBM857IBM860IBM861IBM862IBM863IBM864IBM865IBM866IBM869MACCROATIANMACCYRILLICMACGREEKMACICELANDMACROMANMACROMANIAMACTURKISHMACUKRAINEKOI8-UKOI8-RTIS-620CP850CP852CP855utf8_macUTF8-MACutf_16_32UTF-16BEUTF-16LEUTF-32BEUTF-32LEUTF-16UTF-32;$��@��h���zRx�$H�0FJw�?:*3$"DP� \��H|GNU��`�- x�����
@�- �- ���o`��
��/ 0P��	���o���o����o�on���o�- ��GA$3a1�MGA$3p1113�@GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realigntransdb.so-3.4.4-3.el8.x86_64.debug�L�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N�	�7��qK�	�
ʈ9� LF ���wp�}�E���=cc���S�.(8�ٌw�U;��k��Ci3�@���_Y�ab-����FWCY�גx��6F����	۴2N1�͆�o
"h�w��(|�sZGUYG�`[x��Hk-�%�W8�-�NJN3��j��=�ۄ���{iVj"g����5-R�Y�ͽ�F�.n�Ơ���:����	;����zԙuLQ\��{&㠉�ώط�w�y�1EK^�c��@��#����[m��/FE�͊Q2�IO��r'F�+7���]K?
�K>�)���F�VT��v��OJf��D���=�tnAA��z�0pހ&�G^�B�}���2|;�Y�'���.�z��SHh~���€���tod�!pmܒ�[�<;������Ry��-F7�;p"Ҿ�
�^i5׸�0�v��7��c(�wYy	U�T�_c��a�����
��2ϟEZl%��I5]
X֑���g�VB(�w��*P4�˖���[ڭ>�G��u�|�R˾��-v'/`��v�H��Ϧ���y�v|ׅKw%��&'���{���<סVXj�n�!ؚ�J�_���o��^��z��x�z.�=��%υ�����CMqIj.��P`�!�F������V?y�`��e>�X,�[NY؞2
j�m4�������h��N.~�P)P���R��*���O�t)���װW�D]��� 	!*5�r��{���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T���^BPP0h��c��0n�� w��P}@@
�2MM��  $�8 8 x�� �  ��- �-��- �-��- �-��- �- ��/ �/H�0 0�0`0��1( 24T5"PK*J[�`x]x]%lib64/ruby/enc/trans/japanese_sjis.sonuȯ��ELF>p@xV@8	@�;�; �J�J"�J"8 �M�M"�M"  888$$h;h;h;  S�tdh;h;h;  P�td�:�:�:$$Q�tdR�td�J�J"�J"0GNU�:rF���D�l�e'xs5i�@"�	BE���|�qXwD"l h , F"�P"�P"�P"U0<__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_japanese_sjisrb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��J" �J"��J"�J"K"�K"�K"�(K"��K"��K"��K"��K"�@L"�HL"�XL"�hL"��L"��L"��L"�M"��O"�O"�O"�O"�O"�O"��H��H��H"H��t��H����5�H"�%�H"��h�������h���������%]H"D���%UH"DH�=�H"H��H"H9�tH�>H"H��t	�����H�=YH"H�5RH"H)�H��H��H��?H�H�tH�
H"H��t��fD�����=H"u+UH�=�G"H��tH�=�B"�Y����d�����G"]������w������H��H�=�D"����H�=�C"����H�=IC"��H�=�B"H�������H��H���UTF-8Windows-31JShift_JIS 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー—‐/\〜‖|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+−±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓	∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯	0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん�\ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω~�АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюя─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂=�	�p	亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭��院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改z
魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄z
機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈z掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向z�后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷z�察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周z�宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾z�拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線z�繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只z�!叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓z�$邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入z�'如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美z�*鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋z�-法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒z�0諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯z�3蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕	弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲9�6僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨z 9咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩z<奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏z?廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛zB戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼zE曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣zH檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌zK漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱zN瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬zQ磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆z�S紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋z�V隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈z�Y蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞z�\襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊z�_蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮z�b錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰z�e顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈z�h鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙	��kT��hx
��������!�$�'�*�-�0�3�69<?BEHK�M。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚�P�S�V�Y�\�_�b�e�h�ktm�|m 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓	∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯(o①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ	㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪��q纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱z�r犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"u�uz�xz�{z�~zȁzĄz��z��z��z��z��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯z��涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙z��髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	4	��|q��hx�r
��������!�$�'�*�-�0�3�69<?BEHK�M。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚�P�S�V�Y�\�_�b�e�h�ktm�u�x�{�~��������������������ܜ�	�	�������N�����}�L���
О	�~��4�vp	�������������������������������������������������������������������������������$�����	���������������П	�F�@�A�B�C�D�E�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�p�q�r�s�t�u�w�x�y�z�{�|�}�~����<���������������������������������	�v~ؠ��,�v,�	�]�\�a�e�f�g�h�����d�c���������D�	����$
��	��������f
��	�����
ȡ��	�����������|���������������������������
�	��������������,@�	����������nl�	�������������	�������������������������������������������������������	����4,�	������������vD�	�������������l�	���������	��������<���������ء8�d�����$�<�d�����ȣ~У�@�A�B�V	�X�Y�Z�q�r�s�t�u�v�w�x�y�z�����k�l�`��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�J�K�T�U�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^D���_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������	�E�[�R�S�x�x���p�l���t�����	�������O�����s�^���N���������u���������������������O������
��	���T�v�V�����R�h����������������������L ��T	�������\�����������]�������j�i�����������S�������������������������l�|��Y�m��	�����w�����������e�d�����t���W�����������������������C��	���������������x�����`���������L�f������	���A�������Z���C�������]���������C�����������������gT��	���������������������������D�������N�����t�	�W�����r���������������������M�������C���o�U���������Ԫ��t�����l�̪D�L�	�����q���{�����|���������������l���������������`����\|�	�����������������������������������U����	���T���P�������b���B�������X�L�	�C���@�A�������l�D���E�H�F�m�G�I�K�J��"���V�M�N	���L���Q�P�O���R���S�D���U�T�W�V�Xd��Y��	���Z�[�����������[���e���Z�\�}���]���S�_�`�����Z�a���������T���T��b	�c���~�f���e���g���h�`�i�j�k�������n�l���m�y�o�p�q�~�u�s�t�r���v�����w��	���x�y�y���������z����{�}�����}���~���M���������o����*����	�n���������������Y�������������������������������h��l�	�������������O�����U���������������������������n�������	�c�������������������������w���������J�������N���	���u���E���������������������������������M��������������2d�	���������������������k�����x�����������������C������t����\	���������������������������P���m�����T�����K�������p�����������\�	�������������������~�X�}������������	�Q�������y�F�o�����f�����������b�p���������@�����������������j�E�����i��:D�	���h�e���g���D�����@���f���N�����i���������������z����������|���	�C�������������������������������������l���	�������a�����������B�����@���]���P���D���C̳���i�A	���������E���N�F�G�����L�K�N�M�JB4�	�S���O�H���I���S�B���Y�X�O������P	���U���R���[�V�W�T�Z�Q�`�e�a�ش�\	�f�P�h�A�^���b�[�������c�_���i�g�r�i���d���c$�	�m�k���p�j�n�l�k�o�r�w�u�tJ��	�Q���q�s���R�v�������}�{�|�~�Ե	�\�X�x�y����������������������	���d���������X����������`���������	�����������d���l�����c�������}��������R����	�������������������������y�������\�n����������	�����V�������B�����R�������x�	�������^�����C�_������������	�����������������W���u�������|����Z��x	������������������������������g�����X�����	�����Y�����h�������������U�����o���m���	�������������n���������������� �	�����d���������������������������m�p�s��������������������b`�	�����������[�O���g�������������V���v������������������	�����������t���_�z���������������������D�������z�@�D�\�	�A�@�����D�J�W�d�����B�E���W�i�F������(Ժ	�G�o�n���������K�L�I�W���H���P�����pj0�	�����Q�O���R�P�N�P�M�����V�W������S�K	�k�U���X�w�Y�T���Ի	�}�Z�Q�[�_�\0�	���^���]���k�d�a���`�b�c�e�fr4�	���h�g�i���l���d�j�m�n�|��q	�o�p�q�r�E�s�����t�u�y�F���G���v�w�w���x���y�z�{�}����~	�����F�����v�����G���@���������X�����q�����G���{���Q���������e�h8 0�	���������������x�����������Q���@�����������J���R��������������������z Ľ	�������������������q�������������������������A�������K���s���A� \�����	�����������r�����������W���j���w���������R����� �	�����������Z���������x������������@!\�	���������������������������s���!��	�������������R�����������������!��	����������������������"H�	����������������������������H"��	�����������������B�����H���I�������������b���J���F���"�	�s�z���������������������t�����A���������X�"D���	���������y�����������������������N�����K�������c�H����#��	���L�������������X�M�{���x�����������N�fP#(�	�����p�����L�����f�@�C�D�B�_���F�E�A�G�H�I�L�J�K�M�����N�����U�O���#��	���P�M�Q���T���������U�|�����V���O�o���������W�X�^�������Y�J�e�#�	�Z�[���\�]�_���`�a�b�S�R�c�`�F���V���j�d���e�e�f�����i$�������h�g�a��	�m�k�j�������l�k�]���p�o�n�q���r���z�s�������O�t�JX$$�	�S�K���E�u�u�Y�Z���z���w�����y�O�x�v���|�$���D����L������x��\�ܰT��<�ܲd�ij,���д���̵�X����p�����P����X�ܹT�̺(���̻�,�t���(���T��T����@�|��<��� �����������	�������{���|�������v���}�}�������������������$�	�����������������P���������~�������p�����������������b��%��	�����������������������������I���x���Y�����{������������`%�	�������f���������������y���S�����z�������������%�����D	�����������������������������������������%��	�������������Q���T���������������������d�S�����������������c���|&&X�	�J�����������������������e��������������h&��	���������������������������������������������&H���	�����������^����������������@���A���B�C�Y�D�E�F�������[�&�����G	����������H�������K�I�L�J�M�����}���N�Q��.'4��Z	�O�V���P�c�}�R�S�W���T�R���e���������������Z����p'��	�c�S�]�d�_�f�b�a���[���Y�����U�X�S�����`�q���g���@�h�m�i���n�A���E�\�'�	���k�w�l���g�������j�����U�����p�}�'��	���J�q�s�o�����{�������~�����x�����P6(��v	�|���{���u�z�r�t�@�|�|�����T�y���T�����[�w�d�f���}�~��x(X���	���������`�����K�g���������������h�(��	�������������r�������������g���(0�	�����E������������>)|�	�����T�����Q���P�������d�B���o�h�����)��	�i�����������^���������F���C���[�����������������)���	�������������������x�������������U����*x�	�������q�~�����s�����������U���h�������G�~��F*��	�������|���k�������l�������������������a�f�z�V�������{�*@�	���������������������������������U���|���{���������*��	�V�����������������������f�t�����������������E+0�	�����W�����W���N�����������A���������i�������qN+��	�����������������g�����������b���\�A�������+�	���@�����B���C�j���D�F�G�H���g�X�I�J�������]�\���+l���	�����L�����K�����L�N�]���M���N�O�������{�D�Q���p�S�V�U�����R,��	�T�W���������������Z�m�X���Y�����[�\���a�Y�t�^�������n�f�`����V,h�	�f���]�c�b�����������}�g�e���d�_���k�i���g�m�s�,��	�����u�A�t���^�����_���M�p�o�q�n�v�l�j�r�h�������������`�,`�	�����h�����I�x�Z���z�����}���j���i��-���{���j��	�y���|�~���K���j�������V���O����������^-8�	�����~���������[���������������������B���������������-��	�������������_���������I�����������X���������-��o��	�����������A����������������������������������������$.��	�k���������^���������������������|�������������O�y��f.�	���T���|���P���Y���������������������.|�	��������\�����������l�������������������������.��	�������������������W�����������������~�������������M,/@�	���������k���@������������n/���h	���������@�w�������K�G���F�E�B�/��	���D�C�I�E�L���H�J���M�Q�N�/L�	���O���R�S�T�U���������~�W�V�Y�\����40��	�\�[�]���V�^���`�_�a�b�c�~���������c�������d�e���fv0���g	�i�h�w�}���c�j�l�B�k�m�n�o�p�q�s�r�t���i�u�E�k�v�a�0\���	�B�w�x�������y�������z�|�{�~�}�0��	�����������C���������X�i��<1$����`��	���������������]�r���������������D��~1h�	�����������������B���������v���������������������������1��	���������������@���������A�g���D�����������j2H�	�m�����������������k�^���F�������������hD2��	�����������l�����Y�_�Q�\�����C�Z���2�	�����O�������������U�t�������2d���	�����������i�����������W���������������[�~���������Y
3��	�����������a�k���������������n�������Q�����������`������L3(�	�������������X���N�����������p���3����	���������������a�������������n���M���3��	�������������������������������H�B������4T�	���Y�����R���A�������������������Q�@��T4��	�������N�I�������R�K���H���k�E�D�M�4��G�F�L	���C�O�P���U�T�V�Y�b�S�W�4d������Q�Z	�X�]�[�^�a�Z���G�����\�`���_�J��d�h5��|���|���P���@���,��������P���(�t����p���8���(����d���`���X���0����|���t���8�����D�����T����`���@����\��� �����L����\�����	�f�b�c�g�e�m�m�j�i�l���n�������o�q�p\5$�	���r���s�����D�������5|�	�F�����u�t�x�Y�{�v�z�y�_���5��	���}�G��~�|�w�B�"6��	������������R��d6,�	������������������������6`�	���F��o���n���M���6��	�R������������z����W���C�������*7��	���������������������u���l7X��	�������v��������������S�q�����������7������	����]�����������7�	������������_���������������K���T��28\�	���������������������L�������P�Q����t8��	�����������b�������l���������8�	�������������������8`���	�����X�����������]���������:9��	���������������������i����|9��	���������l�������������������������9$�	�����������:|�	����Z�@�Z�A���B�C�D�F�G�E�r�I�HB:��	�K�J�L�M�O�N���Q�P���r�[�R���Y���S�p���T�c�R�b�\�j�������U�:��	�V�[�Y�X���E�W���������\�Z�{�����L�^���l�_�]���`�a�����f�c���b�E�:��	�i�d�e�h�g�D�a�`�^�j�k�l�n�m�u�v���p�r�t�]�u�s��;�	�o�q�a���x�w�y�������z���|���{������s���}�~J;��	��������������;��	���������������������������o����S�;4��	��I�F�c����H�������������M<��	��u�~�m�v��������X����������������������R<�	���������������^�����������������<����	�������������r�����������<��	�������������u������������������= �	�����������������m�����Z��������Z=p�	�������������u���m�C�j�v�{�=��	�������d���������=�	���������V�����O���q���������������m�� >4�	������������A�@������C�Bb>��	���D�b�F�E�G�����I�H�������>���J�V	�_�F���S�P�O�c�L�N�j�_�M�K�I���[�����Q�R�>$��h��	�\�T�S�������T���U�W�X�H�Y�Z�[������(?���G��	�\�H���b�]���d�`�a���`�^���_����j?���H	�b���c�����B�d�e�t���g�f���i���l�j���m�k�e�?D���	���m�s�o���n�����n�p�q���r�n�t�����u���v���?��	�������w�����y�{�x�z�A�|�E���q�~��M�0@�	������}���������������������v����G��[����^�|����r@p�	�������������J��}�y�����������@�	��M������������}�����������������@d�	�������������Z���������\�������8A�����	������z��������������U������zA4���	�����������������������������������A����	���������������������������������A��	���H���������������e�S�l��������������������������������@B@���	�������W�������������f�����������n���B���I	�@���g��C���[�R���B���h�������A�f�a�������F�����G�a�I�����H�B(�	�I���g�D�J�E�o�M�Q���L�U�i�����R���O�P���N�K�G�����WC��	�T�V�S�p���X���e�a�[�_�����Z�b�f�j�����\�d�Y�]�^����HC,�	�]������������g���c�h�j���m�i���������l���k�C��	�����n�u�o�v�r�����t�q�w�p�c�D�k�s��{�~�|��z�`���C�	���}�x�@�q�J�D�U������y������J�����D��	�[������Z�������PD�	�����D8�	�����������������r�u�����l������DT�	��������r���������Q�A�`�������HE��	���������K���������������������|��XE0�t�����$�X�����P����T����X������t�����x��x���,����x����h�����,����������<����h���\���,�����8��� ���$����x��0��L���(������s�V	�l���������������k�������������������^���E��	�����������������������������������E�����W���E��	�����������]�������I���������������b�����m�n�����xFd�	�����_�w�������������E�������������E�\`F�	�������e������r�����E�]���B�F8�	�A��t���D�C�o�r�T�H�I���G���F�J�����B���F���N	�O�K�L�M�p�U�Q�����G�P�S�R�c�V�W�V�X�Z�^�[�Y�^&G��\	�]���d�_�`�a���c�b�e�f�g�b���h�����L���v�i�j�P�khGX�	�l�m�n�o�����p���q���r���s�����C�w���M�t�q�u����w�������v�D�G��x	���z�y�|�{�}��~�����������F������GT�	����������H�����m�c���F�|�����.H��	����������c�����������������p�����pH�	����������s��������������������H|��	����t�`��r����������H�	����������������������6I(�	�����e������������p����������H��������xI��	���������G��������������������������I�	���t���������������������������K���������I<�	�������N�����f������������������>J��	���~���u���W�������������H�@������J���	�������������U��������������J@��@	��������B���C�������n�����J�P�QK��D	���N�F�H�R�G�K�����L�O�E�E�I�F�d�O�������V�TFK�	�m�S���U�W�X�[�Y���Z���M���\�a���`�KX	�A�b�h�]�_�^�P�A�d�c����e�f�K�	�g���s�i�|�������j�k���l����L�	���q�r�m�\�n�a�o�p�z�t�w�sNL<	�u�v���x�`�u�a�{�^��|����}�~�g����������L��	�I���������w����������L�	���X����I����������������MD	��Z���������VM��	������������I�a��M�	����������y����������M$��	�����O�s�����p�X���q�����t�����\����������������Np	�����U����������������������������������^N�	���������������T�������������������������������ND	�������������J���������������N�	��������������A�@�C�B�D�P�E�F�G��$O	�v�H���e�I�J���K�K���`�L�o�M�O���N�e�P�Q�R���S�T�UfO\�V	�p�W�X�Y���G�Z�[�\�O���	���]�v�u�`���_�P�^���L�a�b�����c�K�������i�d�f�����O	�e�h�i�����g���]�f���r�m�w�����l�l�k�F�l�b�Y���j,P�	�o�p�n���_���F�s���a�U�v�����r�w���t�u�q�����N�����b��nP�	�z�x�k�����y�z���_�{�����������~�|�@����}��������Pl�d�y��	��������������u����w����T�����P�	��������������x����c�������4Q\	�	�]�����Q�����vQ�		�J���Q�		�����L����������������^���Q
	�����e�����L�������v�n�����������������������M���������\���f<Rp
�����G���d	���������G���o���^�����������������q�����w��~R	�������������������������R�	�������q�����������NS�	�����z������������DS�	�����������������������������H���H�����S0	�����x��������H����S�	����@�D�A��B�C�J�E���G�I�F�L�R�K�M
T�	�N�Q�P�O�S�R���U�T�V�W�Y�X�g�Z���[�]�^LT$
	�_�\�`���a�O�R���b���]�c�f���e�d�y�g�T�
	�r�i���h�q�k�m���j�l�p�n�P�o�r�y���S�s�A�u�t�x�`�T�
	�w���v�{�z�y�Q�|�}�~���D���UH	�h�������������C�J�_��������HTU�	�I���v�}���������������R��q���������U��\��0����P��L����t�� �x��4����8��P��4x�<��h�<��T�x�d�T	�	�	�
h
|��(��
x
�
@��LT����	����t�����������r�������������������A����T�i������N��U`	�����x����V�^�����������B�����������k���y��K����������J�I�������V�������	�����W���M�������@\V�	���x�Y��S�����s�X���s�V	����A���V@	�����U���z�����������|���������V�����y���_"Wh	�����������������X������������������dW�����	�������������d�����������B�����j�������t�����������W$	���b���������n���������W�	�S�������������������������z�g*X���	�e���L���������������K��lX(	��N������s�e������|�Xp	�K������@�B���A�C���d���B����^�E�D�F�X�	����t���K�b�G�H�L�J���I��2Y	���O�������Z�M�N���L�PtYL	�V�Y�X�L�Q�R�U�W���Z�T�S�Y�	�^�_�`�]�\�����[�d�b�c�a���e�Y�	�f�h���g���s�i�l�j�k�m�o�p�q�t�r�u�w:Z	�v|Zh	���Z|��	�x�M�y���z�J�[�����{�|�}�~����t�}������{����[�	���������������B[	���������h�j���[P��	������~����������@�w���������A�������������z�[�	�����G���@��K���u����������B������������������\����	�Y���W���������G������������J�������_������dJ\���	���k������������������������I�P�������\	�����������������������r���������v���x���C�������\�	���������������������f�������������]�	���������������B���������C��R]H	�����������{�����a�����������z�����j���o����p����]�	�����z�{��������^��������@�B�A�]	���C�D�E�F^\	�H�G�I�����H�Q�J�K���Z���������O��Z^�	�L���M�{�a�`�N���O�P�R�S�U�Q�T���V�W�X�Y�^�	�Z�\�[�^�a�]�_�`�b���^4	���c�d���e�]�n�f�g�y���h _l	�����w�������m�����l�j�k�i�w�n�o�p�q�s�r�xb_�	�t�v�R�u�����x���y���z��_�}	�|�~�{��������������_P	�����[�(`��	�����������������E������j`�	��������������T���S�`(	�@����������������D��`|	���������������L���N��0a��	��������������I�����������~��������ra	���������������k�����������������h�������������V���ap	�����L���������������a�	�������������P����8b 	����������������������������������zbP 	�����D�C�E�L�@�A�����B�Q�J�F�K�b� 	�H�G�{�L�M�N�I���O���S�T�R�b!	�Q�W�P�U�V�Y�X�[�\�]�h�Z�����^@cD!	�_�`�a�c�!	�b���c�d���c�!	�e�f�g�h�k�i�[�j���l���m���n�p�q�o������������d�!	���s�o�t�u�v���w�������x�z�y�{�|�}�~�������Hd<"	���C����l���@��d�"	��V��������������������d�"	�����s�e@#���8`��� h�D��`t��H|�x�@��Tx�,d�H�� t�h� H � � <!�!�!�!4"�"�"8#\#Ped#�e,�	�I���������i�j���{�C�D�^�O�P�Q�R�S�T�U�V�W�X�F�G�������H���`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�m�_�n�O�Q�el$�M�����������������������������������������������������o�b�p	��������������������������������el%��������������������������������	8fp&	�P��zf'�d%h&�&'�f'<��f8'v8'0g8'����ȟ��Р$�4�<����t�����X\$d$0'@'H'P'BgX'	���N���}�L��9h�'	�]�\�e�f�g�h�����d�c��������{h�'	���������h0(	�T�U�V�W�X�Y�Z�[�\�]�@�A�B�C�D�E�F�G�H�I�hP(��	�����������������������a��������������������Ai�(	�������������i)	�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�iD)((�H(�(��ء)d�<)���)$�<�d�����ȣj�)�@�A�B�V	�X�Y�Z�q�r�s�t�u�v�w�x�y�z�����k�l����Ij�)	�������j`*	�����������j|*	�e�i�`�c�a�k�j�d�l�f�nk�*	�_�m�b�g�h�~������Qk�*	�r�s�o�p�q�u�k+	�t���k8+X*��p�l��t*�*�*+0+H+lP+����	�������O�����s�^���N���������u���������h�������������O������Yl�+�Y�m��	�����w�����������e�d�����t���W�����i�������������������C�j�l,�k��	�l�������������x�����`���������L�m�f�����l�,	���A�������Z���C�����n���]���������C�����������������gm-	�������p���������o�r�����q���������D�������N����am�-	�W�����a�r�s���������������������M�������C���o�U���������v�m�-�,t���,-�-�-x.�.	�����q���{�����|���������w�����u���l���������������`�����m�.�t	�z���x�����������������������y�����������U'n0/��	���T���{�P�������b���B�������Xin�/	�C���@�A�������l�D�}���E�H�F�m�G�I�|�K�J���n�/�Y��	���Z�[���������~���[���e���Z�\�}���]�����S�_�`�����Z�a���������T���nL0�b	�c���~�f���e���g���h�`�i�j�k���������n�l���m�y�o�p�q�~�u�s�t�r���v�����w��/o�0	���x�y�y���������z����{�}�����}�����~���M���������o����qo�1��	�n���������������Y���������������������������������h���o2	�c�����������������������������w�������w���J�������N�o�2����	�u���E�����������������������������������M��������������7p3������	�������������������k�����x�������������������C������yp�3���\	���������������������������P���m�����T�����K���������p�����������p4	���������������������~�X�}�������������p�4	�Q�������y�F�o�����f�������������b�p���������@�����������������j�E�����i��?q5��	���������a�������������B�������@���]���P���D���C�q�5���i�A	���������E���N�F�G�����L�K�N�M�J���q 6�\	�f�P���h�A�^���b�[�������c�_���i�g�r�i���d���cr�6��	�����V�������B���������R������Gr�6	�������^�����C�_�����������r@7��	���������������������W���u�������|�����r�7	���������������n������������������
s�7	�������������[�O���g�������������V���v����������������Os88	�����������t���_���z���������������������������D�������z�@�D�s�8	�A�@�����D�J�W�d�����B�E�����W�i�F���������s<9�q	�o�p�q�r�E�s�������t�u�y�F���G���v�w�w���x���y�z�{�}t�9��	���������������x�������������Q���@�����������J���R����������������������Wt:	�������������������q���������������������������A�������K���s���A�t�:	�������������Z���������x���������������tP;	�����������������������������s��u�;	�������������R������������������_u�;	�����������������������������uL<	���������������������������������u�<	�������������������B�����H���I�������������b���J���F��%v�<	���P�M�Q���T���������U�|�����V���O�o�����������W�X�^���������Y�J�egv`=	�Z�g�[���\�]�_���`�a�b�S�R�c�`�F�����V���j�d���e�e�f�����i�v�=�����h�g�a��	�m�k�j�������l�k�]���p�o�n�q���r���z�s���������O�t�J�vx>	�S�K���E�u�u�Y�Z���z�����w�����y�O�x�v���|-w?(/�/�/D0L��0�12�2�3�34�45�5d�ij6x6д��6̵�X����p�87|7�7���08ܹ�849�9��̻�,�t���:���:H;T��;�;D<�<�<X=�� �����=p>?d?l?	�����������������P�����������~�������p�����������������b��owx@	���������������������������������I���x���Y�����{�������������w�@	�������f�������������������y���S�������z�������������w�A���D	������������������������������������������������5x�A	�J�������������������������e��������������wxtB��	�����������^������������������@���A���B�C�Y�D�E�F�������[�x�B�Z	�O�V���P�c�}�R�S�W���T�R���e�����������������Z�����x`C��	���������`�����K�g�����������������h=y�C	�����E��������������y4D	�����T�����Q�����P�������d�B���o�h�����ylD	�i�������������^���������F���C���[����������������z�D	���������q�~�����s�����������U���h�������G�~��Ez<E��	�V�����������������������������f���t�����������c�����������E�z�E	�����W�����W���N�����������������A���������i���������q�z4F	�����������������g���������������b�����\�A��������{�F	���@�����B���C�j���D�F�G�H���g�X�I�J�������f���]�\��M{$G��	�����L�������K�����L�N�]���M���N�O�������{�D�Q���p�S�V�U�����R�{�G	�T�W���������������Z�m�X���Y�����[�\�����a�Y�t�^�������n�f�`�����{,H	�f���]�c�b�����������}�g�e���d�_���k�i���g�m�s��|�H����	���u�A�t���^�����_���M�p�o�q�n�v�l�j�r�h�������������`U|,I	�������h�����I�x�Z���z�����}���j���i���|�I�{���j����	�y���|�~���K�����j�������V���O�����������|J	�����d�����������_���������I�����������X��������}�J	�k���������^�����������������������|�������������O�y��]}�J	���T���|���P�����Y���������������������}lK	��������\�����������l���������������������������}�K	�������������������W�����������������~���������������M#~8L	�����������k���@������������������e~�L	���D�C�I�E�L���H�J�������M�Q�N�~M��	�B�w�x�������y���������z�|�{�~�}�~TM	�����������C���������X�i����+�M���`��	�����������������]�r�����������������D��m�M	�������������������B���������v���������������������������\N	���������������@�����������A�g���D�����������j��N	���m�����������������k�^���F�������������h3�HO	�����������l�����Y�_�Q�\�������C�Z��u��O	�������O�������@�������A�U�t��������P��	�����������B�i�����������W���������������[�D�~�����C�����Y�E��XP	�����������a�k���������������n�������Q�H�����������`���F���I��;��P	�������������X�G���N�����������p��}�pQ��	���������������a�������������n���M���J���Q�G�F�L	���C�K�O�P���U�T�V�Y�b�S�L�W�$R�����Q�Z	�X�]�[�^�a�Z���G�����\�`���_�J�M��d�hC�xR|��@|A�AlB���B��XC���C����P���,Dt�dD�D4E���E��(�,F�FG�G$H�H$I�IJxJ��J��dK�K0L�LMD�LM��T����M�MTN�N@O�O�OPP�PhQ�QR���\�pR�R�R	�f�N�O�b�c�g�e�m�m�j�i�l���n�����P���o�q�p���S	�Q�F�����u�t�R�x�Y�{�v�z�y�_���bǂTT	�T��S�����������R��	��T	�V�W����������U��������������K��T	�Y�R������������z����W���C�������Z���8U����	����]�������[�����\σ�U	���������������]�������L�������P�Q������U	�����������b�������l���_������S�TV	�������������������`���V��	�����a�X�����d�b�����c���]������f����ׄ�V	�������e�������g�i�h�j���������i�����8W	���������l���������k����������������[��W	���l���m����������W	�n�K�J�L�M�O�N���Q�P���r�[�R���Y���S�p���T���c�R�b�\�j�������U߅ X	�V�[�Y�X���E�W���������\�Z�{�����L�^���l�_�]���`�a�o�����f�c���b�E!��X�	�p��I�F�c����H�����s�q�r�t���������Mc�@Y��	�v�������������r�������������Y	�������������x�u���m�C�j�v�{�Z	���y���z���d�������{��)�HZ	���D�b�F�E�G�����I�H�|������k��Z�h��	�\�T�S�����������T���U�W�X�H�Y�Z�[���������Z	������}�����������������������v������G����[����^�|�����4[	�������������Z�����������\�������1��[	�I���g�D�J���E�o�M�Q���L�U���i�����R���O�P���N�K�G�����Ws�8\	�T�V�S�p���X���e���a�[�_�����Z�b�f�j�����\���d�Y�]�^�������\	�]��������������g���c�h�j���m�i���������l���k��8]	���}�x�@�q�J���D�U������y������J�����9��]	�[����\���Z�������{�^	�������������������r�u�����l�������d^	��������r�����������Q�A�`�������H���^LT���T$��T0U���U����U��LV�V�V0W�W�WX���X8Yx���,����Yx����Yh���@Z|Z�����Z��,[<����h��[\���0\����8��� ����\0]�]x�^\^�L��^@_��H_	������������s�������������������A�T`�	����t�`��r����������������`	�������e������������p����������H����������Ŋa	�����t���������������������������K���������xa	�������N�����f��������������������I��a	���~���u���W�������������`�H�@�������0b��@	��������B�����C���������n�������J�P�Q͋�b�D	���N�F�H�R�G�K�����L�O�E�E�I�F�d�O���������V�T��b	������������y���������Q�`c	���������������T�����������������������������������c	�������������J���]������������Ռ d��	���]�v�u�`���_���P�^���L�a�b�����c�K�������i�d���f�����td	�e�h�i�����g���]�f���r�m�w�����l�l�k�F�l�b�Y�����jY��d	�o�p�n���_���F�s���a�U�v�����r�w���t�u���q�����N�����b������he	�z�x�k�����y�z���_�{�������������~�|�@����}���������ݍ�e	����������������x����c����������tf�����G���d	���������G���o���^�����������������q���������w��a��f	����������������������������dg	�������q�������������N��g	�_�\�`���a�O�R�����b���]�c�f���e�d�y�g'��g�\��0����P��L����t��`ax�pa4��a(b�b��bXc��4x�<���c�<dldT��d`e�elfT	�f�	�
h
\g�g�g(��
x
8h@��L@h	�����x����V�^�����������B�����������k���y����K����������J�I�������i�Li	���x�Y����S�����s�X���s���i	��������A���@j����	�������������d�������������B�������j�������������t��������������/�pj	�������b�����������n��������������q�k��	�S���������������������������������z�����g��\k��	�e���_�L�����������������K�����k	����N������������������s�e�����e����|��7�l	���K������@�B���������A�C�����d���B����^�E�D�Fy�xl	��^���t���K���b�G�H�L�J�����I�����l	���O���������Z�M�N���L�P��8m	�V���Y�X�L�Q�R�U�W�����Z�T�S��?�xm	�^�_�`�]�\�����[�d�b���c�a���e���m	�f�h�������g���s�i�l�j�k�m�o�p�q�t�r�u�wÒn��	�x�M�y���z�J�[�������{�|�}�~����t�}������{�����pn	�����G���@��K���u������������B��������������������G��n��	���k������������������������I���P�����������o	���������������������������������r���������v���x���C������˓�o	�����z�{����������^����������@�B�A
�|p	�L���M�{�a�`�N���O�P�R�S�U�Q�T�����V�W�X�YO��p	���c�d�����e�]�n�f�g�y���h��@q�}	�|�~�{���������������Ӕ�q�	�����������@���������E��������q	�@����������������D�B��AW�Dr	����C������������L���N�D���E���r�F	���������������k�����������������h�������������V��ە�r	�����D�C�E�L�@�A�����B�H�Q�J�G�F�K�hs	�J�_�`�a_��s	���s�o�t�u�v�K���w�������x�z�y�{�|�}�~����������s��i�8jhj�kTk�klpl�l0mpm�mnhnt���nH|xo�otp@���px�8qd|qH�q�<rt�r�rh`s H � �s<!�!�s�!4"Tt�"8#\#Pe\t�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�\u����������������������������������������������������������������hv����������������������������������������������������������������������������������������������������������������@�A�B�Ctw�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������x��������������������������������������������������������������������y���������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�z�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������{������������������������������������������������������������������������|�������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�}�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������~���������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O��P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S��T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W(��X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������4���������������������������������������������������������������������������������������������������������������������������������@��������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[L��\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������X���������������������������������������������������������������������������������������������������������������������������������d������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_p��`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������������������������������������������������|��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c���d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	���`vlwxx�y�z�{�|�}�~�؀������ �,�8�D�P�\�h�t����������� ��%�(�	��g���	����Ĕ	���������������X�^�u�}�~���������������������������������������I�ؔ	�I�W���������V�i�j���{�C�|�D�^�O�P�Q�R�S�T�U�V�W�X�F�G�������H���`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�m�_�n�O�Qh��M�����������������������������������������������������o�b�p�`	�������������������������������-�t�	�������P�U��o�|����Д`�l�t��&�������'��ȟ��Р$�4�<��)�+�.p@�SL`DiTud$��ȗ@'H'P'�З@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmmmmmmmmmmmnopqrstummmmmmmmvwxyz{|mmmmmmmmmmm}~������������mmmmmmm��������mmmm�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWWWWWWWXYZ[\]^_`abcdefghijklmnoWWWWWWWWpqrstuvwxyz{|}~��������WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW@�	

 !"""""""""""""""#$%&'()*+,-./0123456789:;<=>?@ABC"""""""""""""DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	

 !"#$%&'()*+,-./0123444444444444444444444444444444444444444444456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	
















































































































































































�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx��	
������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

��������	

��������	

������������	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456788889:;<8����	

 ��	

��	

 !"#$��	

��	

��	

��	

��	

��	��	

��	

��	

��	

��	

��	

 !"��	

 !"#$%��	

��	

��	

��	

��	

��	

��	

 !"��	

��	

 !"#$%��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	
��	

��	

 !"��	

 !"#��	

 ��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

 !"��	

 ��	

��	

 ��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

����	

��	

��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	
����	

��	

 !"#��	

��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'(��	

��	

����	

��	

��	

��	
��	

��	

��	
��	

��	

��	
��	

��	

��	

������	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

����	

��	

��	
��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	
��	
��	

��	

��	

��	

������	

��	

��	
��	

����	

 !"#$%&'()*+,-./0123456789:;<=����	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./0123456789:;<=>��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!���������	





����	

����	

��	

����	

��	

��	

������	
��	
������	
��	

 !��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$%&��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$%&��	

 !��	

��	

��	

��	

��	

��	

��	

 !"��	

��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

 ��	

��	

��	

��	

 !��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	
��	

��	

��	

��	
��	

 ��	

 !"��	

��	

��	

��	
��	

��	

��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

 !"#$%&'()��	

��	��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

����	

��	

��	

������	

 !��	

  !"#$%&'()*+,-./0123456789:;<=>?�����	




; T��<���dd��|zRx�$��0FJw�?:*3$"D�� \���<HoGNU� ��J"��4����f���'���f��Ȟ���f�� o���f����
l�J"�J"���o`��
��O"0��(	���o���o����o�ot���o�M"0@GA$3a1yGA$3p11130lGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignjapanese_sjis.so-3.4.4-3.el8.x86_64.debug�|�7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N�$����W��+�Mp�մBM���W�9���t���

Tu���u�oг���� �!�;Z�'~y�`�O@��#H�[��G�:�!�H7a�hЅ(}d]u(�O��Ӊ�u�z�L�O�}}�!�~u�EJ�Y�ߡ-���-O����Z�Z5�Z��(у���ct�
Eܖ0�/D���Υ�ֵ��}Ψ]5�@I��Գ��3����5��Z���zbT�JmYH�y��<�D�4]�E�.����dL��r�:�'�4�lҸ>y>�ٙ�e�/_6�0*�.�s���8���e��T"�e���#�Y�4��k�*W�
�U�!�p�t�U��).u
}�
��T#�!ߦ~9,�yO�l�+ׄ��=M

%I�Q�u�s�j8P��q<�oS��~���L�������$�lC��n7x0�soؑ���K�*�#?��P�{=�Aň��oYp	H�kΈF~��@/�O���O�й����r�;���,`��j�ᬙT�yi�]�cNm���e��u�����I����h� �VJ�h����/�[�-��|6e��:Ɂ���q�����k�u��^�}�QKE��lfD����Fd��!���d��#/�\�D�0���W���?���ڗT��=Q֐zkJĸ3Yjk̷_�F"}�a�?e��U�^��g`�����t7��~�������Ϟ�~���iW����;١DV�N�f�8��iP2zZ�u�b�(i]�dab��'�k�O��.�$��X%��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ottE���o�� T��(^B��0hc  0nPP wpp�}ll
���J2 ��:�:$��:�:t�h;h; ��J"�J��J"�J��J"�J� ��M"�M ��O"�OH�P"�O�Pb�O��Q0RDTU"PK*J[�a`�`�'lib64/ruby/enc/trans/emoji_sjis_kddi.sonuȯ��ELF>�@`�@8	@8�8� ��!�!�� ����!��!  888$$���  S�td���  P�tdx�x�x�$$Q�tdR�td��!�!��GNU�?L���F޴�(�>�L�@  �	BE���|�qX{�� j , F"��!��!��!U�$__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_emoji_sjis_kddirb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��!p�!0 �! �!@�!�H�!�X�!`bh�!���!���!���!`b�!���!��!��!��!��!��!��H��H�y�!H��t��H����52�!�%3�!��h�������h���������%
�!D���%�!DH�=9�!H�2�!H9�tH���!H��t	�����H�=	�!H�5�!H)�H��H��H��?H�H�tH���!H��t��fD�����=��!u+UH�=��!H��tH�=��!�Y����d������!]������w������H��H�=Q�!����H�=��!H�������H��H���UTF8-KDDISJIS-KDDI 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓	∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯	0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん�\ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω~�АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюя─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂=�	�p①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ	㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪��	亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭z�	院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改9d魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄9`機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈9\掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向9X后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷9T察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周9P宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾9L拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線9H 繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只9D#叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓9@&邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入9<)如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美98,鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋94/法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒902諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯9,5蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕	弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲�(8僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨9|:咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩9x=奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏9t@廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛9pC戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼9lF曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣9hI檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌9dL漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱9`O瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬9\R磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆9XU紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋9TX隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈9P[蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞9L^襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊9Ha蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮9Dd錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰9@g顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈9<j鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙	�8m纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱9�n犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"v�q9�t9�w9�z9�}9��9��9��9��9��9��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯9��涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙9��髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	5��T��hx�	\XTPLHD@ <#8&4)0,,/(2$5 8t:p=l@hCdF`I\LXO。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚TRPULXH[D^@a<d8g4j0m�n�q�t�w�z�}������������������Ԙ�ܘ	���N���}�L���	Ț	�~��5
�w
p	�������������������������������������������������������������������������������
�����	���������������
��	�F�@�A�B�C�D�E�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�p�q�r�s�t�u�w�x�y�z�{�|�}�~����=���������������������������������	�vĜ���w
�	�]�\�e�f�g�h�����d�c���������0�	��������%x�	�T�U�V�W�X�Y�Z�[�\�]����������������g��	�����������	��������	�����������������������a��������������������-
0�	��������������o
��	�������������
Ȟ	���
�	�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S5���������	����������������������������������������������������wd�	������	��������������	������������=,�	����T���	���������l�p������(��������\����$�L�d������@�A�B�V	�X�Y�Z�q�r�s�t�u�v�w�x�y�z�����k�l����E�	�������������������������������������������������������������������������������������������������������������������������������L�����������������������������������������	�J�K�T�U�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�X��_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������	�E�[�R�SD�	������M@�	�����������\�	�e�i�`�c�a�k�j�d�l�f�n���	�_�m�b�g�h�~��������	�r�s�o�p�q�uU�	�t����D�P�<�8��T�x�����(��0�����	�������O�����s�^���N���������u���������L�������������O������h�	���T�v�V�����R�h����������������������]���T	�������\�����������]�������j�i�����������S�������������������������l�T��Y�m��	�����w�����������e�d�����t���W�����M�������������������C�N���O��	�P�������������x�����`���������L�Q�f����#��	���A�������Z���C�����R���]���������C�����������������ge�	�������T���������S�V�����U���������D�������N�����d�	�W�����E�r�W���������������������M�������C���o�U���������Z�Ԩ��L��x��\�̨P�+X�	�����q���{�����|���������[�����Y���l���������������`����m���X	�^���\�����������������������]�����������U����	���T���_�P�������b���B�������X�p�	�C���@�A�������l�D�a���E�H�F�m�G�I�`�K�J��3���V�M�N	���L���Q�P�O���R���S�D���U�T�W�V�Xu$��Y��	���Z�[���������b���[���e���Z�\�}���]�c���S�_�`�����Z�a���������T������b	�c���~�f���e���g���h�`�i�j�k�����d���n�l���m�y�o�p�q�~�u�s�t�r���v�����w�e� �	���x�y�y���������z����{�}�����}���f�~���M���������o����;Ȭ��	�n���������������Y���g�����������������������������h��}H�	�������������O�����U���������������������������n�����ȭ	�c�����������������h�������i���w�������[���J�������N@��j��	�u���E���������������k�������������������M��������������C���l����	�����m�������������k�����x�������n�����������C�������@����\	���������������������������P���m�����T�����K�����o���p�����������į	�����p���������������~�X�}�����q������	\�	�Q�������y�F�o�����f���������r���b�p���������@�����������������j�E�����i��K��	���h�e���g���D�����@���f���N�����i���������������z�����������\���	�C����������������������������������������	�����u���a���������t���B�����v�@���]���P���D���CD����i�A	���������E���N�F�G�����L�K�N�M�J�wS��	�S���O�H���I���S�B���Y�X�O�����P	���U���R���[�V�W�T�Z�Q�`�e�a�`��\	�f�P�x�h�A�^���b�[�������c�_���i�g�r�i���d���c��	�m�k���p�j�n�l�k�o�r�w�u�t[�	�Q���q�s���R�v�������}�{�|�~�`�	�\�X�x�y�����������������������	���d���������X����������!���������	�����������d���l�����c�������}��������c0���	�������������������������y�������\�n�����������	�����V�������B�y�����z�R��������	�������^�����C�_�����{����)T���	�����}�|�������������W���u�������|����k���x	������������������������������g�����������	�����Y�����h�������������U�����o���m�T�	��������������n�����������������1��	�����d���������������������������m�p�s��������������������s�	������������[�O���g�������������V���v�������������������	�����������t���_��z������������������������D�������z�@�D��	�A�@�����D�J�W�d�����B�E����W�i�F�������9��	�G�o�n���������K�L�I�W���H���P�����p{�	�����Q�O���R�P�N�P�M�����V�W���L��S�K	�k�U���X�w�Y�T�����	�}�Z�Q�[�_�\A к	���^���]���k�d�a���`�b�c�e�f� ��	���h�g�i���l���d�j�m�n� @��q	�o�p�q�r�E�s������t�u�y�F���G���v�w�w���x���y�z�{�}!|��~	�����F�����v�����G���@���������X�����q�����G���{���Q���������e�hI!���	���������������x������������Q���@�����������J���R����������������������!��	�������������������q��������������������������A�������K���s���A�!0�����	�����������r�����������W���j���w���������R����"��	������������Z���������x�������������Q"4�	����������������������������s���"��	�������������R������������������"�	�������������������������#0�	������������������������������Y#x�	������������������B�����H���I�������������b���J���F���#ȿ	�s�z���������������������t�����A���������X�#D���	���������y�����������������������N�����K�������c�H����$��	���L�������������X�M�{���x�����������N�fa$(�	�����p�����L�����f�@�C�D�B�_���F�E�A�G�H�I�L�J�K�M�����N�����U�O���$��	���P�M�Q���T���������U�|�����V���O�o����������W�X�^��������Y�J�e�$�	�Z�K�[���\�]�_���`�a�b�S�R�c�`�F����V���j�d���e�e�f�����i'%�������h�g�a��	�m�k�j�������l�k�]���p�o�n�q���r���z�s��������O�t�Ji%4�	�S�K���E�u�u�Y�Z���z����w�����y�O�x�v���|�%���h����|����@���8���8���T���T�ܱ<����X����X����(�����L����L����������D���Ⱥ�8�t����(���,���ؾ(�p���<��� ������,��� ��(�	�������{���|�������v���}�}�������������������%4�	�����������������P����������~�������p�����������������b��/&��	�������������������������������I���x���Y�����{������������q& �	�������f�����������������y���S������z�������������&�����D	���������������������������������������������& �	�������������Q���T���������������������d�S�����������������c���|7'��	�J������������������������e��������������y'(�	���������������������������������������������'����	�����������^�����������������@���A���B�C�Y�D�E�F�������[�'�����G	����������H�������K�I�L�J�M�����}���N�Q��?(|��Z	�O�V���P�c�}�R�S�W���T�R���e����������������Z�����(��	�c�S�]�d�_�f�b�a���[���Y�����U�X�S�����`�q���g���@�h�m�i���n�A���E�\�(`�	���k�w�l���g�������j�����U�����p�})��	���J�q�s�o�����{�������~�����x�����PG)L��v	�|���{���u�z�r�t�@�|�|�����T�y���T�����[�w�d�f���}�~���)����	���������`�����K�g����������������h�)$�	�������������r�������������g��
*��	�����E�������������O*��	�����T�����Q����P�������d�B���o�h�����*�	�i������������^���������F���C���[�����������������*`���	�������������������x�������������U����+��	��������q�~�����s�����������U���h�������G�~��W+4�	�������|���k�������l�������������������a�f�z�V�������{�+��	���������������������������������U���|���{���������+��	�V��������������������������f��t����������G����������E,��	�����W�����W���N��������������A���������i��������q_,�	�����������������g�������������b����\�A��������,��	���@�����B���C�j���D�F�G�H���g�X�I�J�������J���]�\���,���	�����L�������K�����L�N�]���M���N�O�������{�D�Q���p�S�V�U�����R%-��	�T�W���������������Z�m�X���Y�����[�\�����a�Y�t�^�������n�f�`����g-�	�f���]�c�b�����������}�g�e���d�_���k�i���g�m�s���-������	���u�A�t���^�����_���M�p�o�q�n�v�l�j�r�h�������������`�-�	�������h�����I�x�Z���z�����}���j���i��-.���{���j����	�y���|�~���K�����j�������V���O����������o.��	�����~���������[���������������������B���������������.h�	�����H�����������_���������I�����������X���������.���o��	�����������A����������������������������������������5/P�	�k���������^�����������������������|�������������O�y��w/��	���T���|���P�����Y���������������������/L�	��������\�����������l���������������������������/��	�������������������W�����������������~���������������M=0�	�����������k���@������������������0���h	���������@�w�������K�G���F�E�B�0��	���D�C�I�E�L���H�J�������M�Q�N18�	���O���R�S�T�U���������~�W�V�Y�\����E1��	�\�[�]���V�^���`�_�a�b�c�~���������c�������d�e���f�1���g	�i�h�w�}���c�j�l�B�k�m�n�o�p�q�s�r�t���i�u�E�k�v�a�1P���	�B�w�x�������y���������z�|�{�~�}2��	�����������C���������X�i����M2����`��	�����������������]�r�����������������D���2d�	�������������������B���������v���������������������������2��	���������������@�����������A�g���D�����������j3P�	���m�����������������k�^���F�������������hU3��	�����������l�����Y�_�Q�\�������C�Z���3 �	�������O�����������������U�t�������3x���	�������������i�����������W���������������[���~�����������Y��4��	�����������a�k���������������n�������Q�������������`����������]4X�	�������������X�����N�����������p���4����	���������������a�������������n���M�����48�	�������������������������������H�B������#5��	���Y�����R���A�������������������Q�@��e5��	�������N�I�������R�K���H���k�E�D�M�5T��G�F�L	���C���O�P���U�T�V�Y�b�S���W�5�������Q�Z	�X�]�[�^�a�Z���G�����\�`���_�J����d�h+6���������� �����t���X���D����x�����X���,����������|���������`���H���D��������0�|���H����\���H����p���P���0�����L�����`��h�	�f�����b�c�g�e�m�m�j�i�l���n���������o�q�pm6t�	���r���s�����D�������6��	���F�����u�t���x�Y�{�v�z�y�_���F�6�	���}�G��~�|�w�B�37`�	���������������R��u7��	���������������������������7��	���F��o���n���M���7(�	��R������������z����W���C��������;8l�	���������������������u���}8���	�������v��������������S�q�����������84�����	����]������������@9��	������������_���������������K���T��C9��	���������������A�������L�������P�Q�����9L�	�����������b�������l���C�������9��	�������������������D	:����	�����E�X�����H�F�����G���]������J����K:,�	�������I�������K�M�L�N���������i�����:��	���������l���������O�����������������:��	���P���Q�������;@�	����Z�@�Z�A���B�C�D�F�G�E�r�I�HS;t�	�R�K�J�L�M�O�N���Q�P���r�[�R���Y���S�p���T��c�R�b�\�j�������U�;��	�V�[�Y�X���E�W���������\�Z�{�����L�^���l�_�]���`�a�S�����f�c���b�E�;T�	�i�d�e�h�g�D�a�`�^�j�k�l�n�m�u�v���p�r�t�]�u�s��<��	�o�q�a���x�w�y�������z���|���{������s���}�~[<X�	��������������<��	���������������������������o����S�<��	�T��I�F�c����H�����W�U�V�X���������M!=��	��u�~�m�v��������X����������������������c=��	���������������^�����������������=l���	�Z�������������r�����������=��	�������������u������������������)>�	�����������������m�����Z��������k>`�	�������������\�u���m�C�j�v�{�>��	���]���^���d�������_���>��	���������V�����O���q���������������m��1?4�	������������A�@������C�Bs?��	���D�b�F�E�G�����I�H�`�������?���J�V	�_�F���S�P�O�c�L�N�j�_�M�K�I���[�����Q�R�?(��h��	�\�T�S�������d�f�T���U�W�X�H�Y�Z�[������9@���G��	�\�H���b�]���d�`�a���`�^���_����{@���H	�b���c�����B�d�e�t���g�f���i���l�j���m�k�e�@P���	���m�s�o���n�����n�p�q���r�n�t�����u���v���@��	�������w�����y�{�x�z�A�|�E���q�~��M�AA �	������}������g����������������v����h�G�j��[����^�|�����A|�	�������������J��}�y�����������A�	��M������������}����������������B|�	�������������Z������k����\�������IB�����	������z��������������U�������BP���	�����������������������������������B����	��������������������������������C�	���H���������������e�S�l��������������������������������QC\���	�������W�������������f�����������n���C���I	�@���g��C���[�R���B���h�������A�f�a�������F�����G�a�I�����H�CD�	�I���g�D�J�m�E�o�M�Q���L�U�n�i�����R���O�P���N�K�G�����WD��	�T�V�S�p���X���e�p�a�[�_�����Z�b�f�j�����\�o�d�Y�]�^����YDP�	�]������������q�g���c�h�j���m�i���������l���k�D�	�����n�u�o�v�r�����t�q�w�p�c�D�k�s��{�~�|��z�`���D<�	���}�x�@�q�J�r�D�U������y������J�����E��	�[����@���Z�������aE$�	�����Ep�	��s����������������r�u�����l������E��	��������r��������t��Q�A�`�������H'F��	���������K���������������������|��iFp����X����� �d���,�����D�����$�����8�l���L���P����x���d����X�����,����� �����H����t��t���H����T���<���H��4����h�����h������s�V	�l���������������k�������������������^���F�	�����������������������������������E�����W���F<�	�����������]�������I���������������b�����m�n�����x/G��	�����_�w�������������E�������������E�\qG�	�������e������r�����E�]���B�Gx�	�A��t���D�C�o�r�T�H�I���G���F�J�����B���G��N	�O�K�L�M�p�U�Q�����G�P�S�R�c�V�W�V�X�Z�^�[�Y�^7H(��\	�]���d�_�`�a���c�b�e�f�g�b���h�����L���v�i�j�P�kyH��	�l�m�n�o�����p���q���r���s�����C�w���M�t�q�u����w�������v�D�H��x	���z�y�|�{�}��~�����������F������H��	����������H�����m�c���F�|�����?I��	����������c�����������������p������IP�	�v����������s��������������������I���	����t�`��r���w��������xJ(�	����������������������GJt�	�����y�e������������p����������H����z������J�	���������G��������������������������J8	���{�t���������������������������K��������
K�	�������N�����f���������|����������OK�	���~���u���W�������������D�H�@������KH��	�������������U��������������K���@	��������B���}�C����~����n������J�P�QL��D	���N�F�H�R�G�K�����L�O�E�E�I�F�d�O��������V�TWLX	�m�S���U�W�X�[�Y���Z���M���\�a���`�L�	�A�b�h�]�_�^�P�A�d�c����e�f�L	�g���s�i�|�������j�k���l����Md	���q�r�m�\�n�a�o�p�z�t�w�s_M�	�u�v���x�`�u�a�{�^��|����}�~�g����������M��	�I���������w����������MX	���X����I����������������%N�	��Z���������gN�	������������I�a��NH	�����������y����������N���	�����O�s�����p�X���q�����t�����\����������������-O�	�����U����������������������������������oOX	���������������T��������������������������������O�	�������������J���A�������������O(	��������������A�@�C�B�D�P�E�F�G��5P|	�v�H���e�I�J���K�K���`�L�o�M�O���N�e�P�Q�R���S�T�UwP��V	�p�W�X�Y���G�Z�[�\�PL��	���]�v�u�`���_��P�^���L�a�b�����c�K�������i�d��f�����P�	�e�h�i�����g���]�f���r�m�w�����l�l�k�F�l�b�Y����j=Q		�o�p�n���_���F�s���a�U�v�����r�w���t�u��q�����N�����b���Qx		�z�x�k�����y�z���_�{������������~�|�@����}���������Q�	�d�y��	��������������u����w����T����R�
	���������������x����c��������ER�
�	�]�����Q������R`	�J���R�	�����L����������������^��S�	�����e�����L�������v�n�����������������������M���������\���fMS�����G���d	���������G���o���^�����������������q�������w���S�	��������������������������S,
	�������q������������NTp
	�����z������������UT�
	�����������������������������H���H�����T�
	�����x��������H����T<	����@�D�A��B�C�J�E���G�I�F�L�R�K�MU|	�N�Q�P�O�S�R���U�T�V�W�Y�X�g�Z���[�]�^]U�	�_�\�`���a�O�R����b���]�c�f���e�d�y�g�U0	�r�i���h�q�k�m���j�l�p�n�P�o�r�y���S�s�A�u�t�x�`�U�	�w���v�{�z�y�Q�|�}�~���D���#V�	�h�������������C�J�_��������HeVH	�I���v�}���������������R��q���������V�4����p��� �������H��� �l��0��@��P�\��P�@��P� t�D|�p	�	|
�
X����$
h
�
�
4t�(��@������	����t�����������r�������������������A����T�i������N��V	�����x����V�^�����������B�����������k���y���K����������J�I�������+W�������	�����W���M�������@mW`	���x�Y���S�����s�X���s�W�	������A���W�	�����U���z�����������|���������V�����y���_3X,	�����������������X������������������uX�����	�������������d������������B������j����������t�������������X�	�����b����������n������������X��	�S�����������������������������z���g;Y���	�e���C�L����������������K��}Y<	���N������������s�e�����I���|��Y�	���K������@�B������A�C����d���B����^�E�D�FZ�	��B���t���K���b�G�H�L�J�����I��CZ`	���O���������Z�M�N���L�P�Z�	�V���Y�X�L�Q�R�U�W�����Z�T�S���Z�	�^�_�`�]�\�����[�d�b���c�a���e	[<	�f�h�������g���s�i�l�j�k�m�o�p�q�t�r�u�wK[�	�v�[�	���[���	�x�M�y���z�J�[�������{�|�}�~����t�}������{����\	���������������S\�	���������h�j���\���	������~����������@�w���������A�������������z�\	�����G���@��K���u������������B��������������������]�����	�Y���W���������G������������J�������_������d[]��	���k������������������������I���P���������]�	���������������������������������r���������v���x���C�������]	���������������������f�������������!^�	���������������B���������C��c^�	�����������{�����a�����������z�����j���o����p����^8	�����z�{����������^����������@�B�A�^�	���C�D�E�F)_	�H�G�I�����H�Q�J�K���Z���������O��k_0	�L���M�{�a�`�N���O�P�R�S�U�Q�T�����V�W�X�Y�_�	�Z�\�[�^�a�]�_�`�b���_�	���c�d�����e�]�n�f�g�y���h1` 	�����w�������m�����l�j�k�i�w�n�o�p�q�s�r�xs`d	�t�v�R�u�����x���y���z��`��}	�|�~�{����������������` 	�����[�9a\ �	���������������������E������{a� 	��������������T���S�a� 	�@����������������D������a@!	�����������������L���N������Ab�!�	��������������I�����������~���������b�!��	���������������k�����������������h�������������V���bH"	�����L��������������c�"	�������������P����Ic�"	�����������������������������������c,#	�����D�C�E�L�@�A�����B���Q�J���F�K�c�#	�H�G�{�L�M�N�I���O���S�T�Rd�#	�Q�W�P�U�V�Y�X�[�\�]�h�Z�����^Qd($	���_�`�a�dt$	�b���c�d���d�$	�e�f�g�h�k�i�[�j���l���m���n�p�q�o������������e�$	���s�o�t�u�v�����w�������x�z�y�{�|�}�~�������Ye$%	���C����l���@��e�%	��V��������������������e�%	�����s�f,&�X��$��x�4��X��4����������0�(|�\� T x � 8!�!�!@"�"�"$#�#�# $l$�$�$%�%�%$&H&afP&�f��@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��X'�����������������������������������������������������������������d(����������������������������������������������������������������������������������������������������������������@�A�B�C�p)�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������|*���������������������������������������������������������������������+���������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G��,�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������-�������������������������������������������������������������������������.�������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K��/�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������0�����������������������������������������������������������������������������1�����������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O��2�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������3���������������������������������������������������������������������������������4���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�6�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������7���������������������������������������������������������������������������������������������������������������������������������8���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�$9�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������������������������������������������0:���������������������������������������������������������������������������������������������������������������������������������<;�������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�H<�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������������������������������������������������������T=���������������������������������������������������������������������������������������������������������������������������������`>���������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�l?�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������������������������������x@����������������������������������������������������������������������������������������������������������������������������������A���������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c��B�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������������������C����������������������������������������������������������������������������������������������������������������������������������D������������������������������������������������	�f�E�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������������$F�����������������������������������������������������������������������������������0G�����������������������������������������������������������������������������������������������������������������@�A�B�C�<H�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������HI���������������	gTJ�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~	��J������������������������������������������������������������������K����������������������������������������������������������������������������������������������������������������	Ig�L�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~	��M��������������������	�g�N�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~	�(O���������������������������������������������������������������������������������������������������������������������������������4P��������������������������������������������������������������������������������������������������������������������������	Ig@Q\(h)t*�+�,�-�.�/�0�1�2�3�4�5789(:4;@<L=X>d?p@|A�B�C�D�EF�(G4H@ILJ�J�K�L�M�N O,P8Q<R�gDR�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~	�S���������������������������������������������������������������������������������������������������������������������������������T��������������������������������������������������������������������������������������������������������������������������	IgU	��hV	��Qh0V	�s�~���������B�Y�a�b�c�e�i�l�u���������������������hDV	�I�����������i�j���{�C�|�D�^�O�P�Q�R�S�T�U�V�W�X�F�G�������H���`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�m�_�n�O�Q��V�M�����������������������������������������������������o�b�p�`	��������������������������������h�W��������������������������������	i�X	������P���YixY�TUV(V<V�V�W�XpY�Y�i�Y(��i�Yw
�Yj�Y��������� �(�ؠ`���,�l��H'P'�R�Y�Y�Y�Y!j�Y@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmmmmmmmmmmmnopqrstummmmmmmmvwxyz{|mmmmmmmmmmm}~������������mmmmmmm��������mmmm�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWWWWWWWXYZ[\]^_`abcdefghijklmnoWWWWWWWWpqrstuvwxyz{|}~��������WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW@�	

 !"""""""""""""""#$%&'()*+,-./0123456789:;<=>?@ABC"""""""""""""DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	

 !"#$%&'()*+,-./0123444444444444444444444444444444444444444444456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	
















































































































































































�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx��������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

����	

������	

��������	

��	

������������	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456788889:;<8������	
��	
������	
��	

 !��	

��	

 !"#$��	

 !��	

��	

��	

��	

��	��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'��	

��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$%&��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	
��	

��	

 !"��	

 !"#$%&��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

 !"��	

��	

 !��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

 !��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	
��	

��	

 ��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	
����	

��	

 !"#��	

��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'()��	

��	

��	��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

������	

��	

��	
��	

��	

 !��	

��	

��	

��	

��	

��	

��	

����	

��	

��	
��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	
��	
��	

��	

��	

��	

������	

��	

��	
��	

����	

 !"#$%&'()*+,-./0123456789:;<=����	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>>>��	

��	

 !"#$%&'()*+,������	

 !��	

  !"#$%&'()*+,-./0123456789:;<=>?��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!����	
�����	




;$�8��@(9��h:���zRx�$�8��0FJw�?:*3$"D�8�� \�9��$HWGNU�p0 �!��\Z`bk��V����`bk��V�����H
��!�!���o`��
���!0�h	���o���o����o�ov���o��!��GA$3a1H�GA$3p1113��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignemoji_sjis_kddi.so-3.4.4-3.el8.x86_64.debug�0�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N���n ��,J��,"k.��iC�Gd�$�@�i����+[c/����Da�07�L�NL
��t��`���}�E>x-�?�]a-��OM�;��ĩ%	c���M�"��e��Ȧ^�N��U��X
�z��R#&ۃ.�ϏaӘBs�Ԙ�_����Ti�e��JG&ScX毧���1J�/����J%l5�X��8�2�d-�2/vG�ˣJ��l&L��3�Mh��7�yXye�o�ƞd���&�[0O�l`3$�K�Z����{����ZX���3���t�M��_>�oH:�6
'a��W���/��!��N7/�H}���,���\vj���p��c�@ar��V��/xHvM�&YCLbޢ�1D�=��43�ЇFqYG:�o�XtW��/X�7Z?T��8�.���m!�^/�z�y�S��J��������O
���@+i)�nC�HSYaU�Qy��%JnZޝ�q��s�)J�,鑌�w��>
p��h���6Q��0w
��:�	+�-�-[T���z�����j6�RQ3T���ie�`"�v���Iĸ>TEo2��
Zt�/��V���g�?��f�4�{E>"��b�s���T|̌��Z��	�\�P�
Z��M!��(W����Ӗ�
m� /���Ԛ�N�F�f�$	��b�کLE�1%V�uo�h�|[Z��}��K5��v�PB��sG�.�x!)�����(����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ovvE���o�� T��h^B0hHHcpp0n�� w���}��
����� �x�x�$�����t��� ��!���!�� �! �` ���!�� ���!��H��!����a�����0�,<�"PK*J[����*lib64/ruby/enc/trans/emoji_iso2022_kddi.sonuȯ��ELF>p@�@8	@ОО ЪЪ!Ъ!8 ����!��!  888$$������  S�td������  P�tdh�h�h�TTQ�tdR�tdЪЪ!Ъ!0GNU�Y_<1�5/� %�՚���|�@�!	BE���|�qXWw�[ m , F"��!��!��!U�
<__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_emoji_iso2022_kddirb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�Ъ! 	ت!��!�!�! �!*�!�5(�!`P�!0	X�!0	x�!@	��!�
��!�	��!�
��!*��! ��!�5ȫ!`�!0	��!0	�!
�!0
@�!;H�! X�!�5h�!`�! �!;��!�5�!`ȯ!Я!د!�!��!��!��H��H�ɧ!H��t��H����5��!�%��!��h�������h���������%]�!D���%U�!DH�=��!H���!H9�tH�>�!H��t	�����H�=Y�!H�5R�!H)�H��H��H��?H�H�tH�
�!H��t��fD�����=�!u+UH�=�!H��tH�=ޡ!�Y����d�����!]������w�������1��fD���H��tc�>�H��t;<tA�$�ABH�Q�fD���F����vH�BH)ȃ�@�r�f�<t޸$H�Q�A@f����DI�Ȅ�tA�(�ABL�AfD�	��I�@H)ȃ�A�����?��HD��f.����?�t���!<^H���9H���ff.�@���>t'�?���D����Ȁ�A�F�Ȁ�A��f��~(�T�t%��@t8��Bt1����1��f.���Bt1���Ju��1��fD�1��f���1��?t�(�FBf������H��H�=��!�l���H�=�!�`���H�=�!�T���H�==�!H���D�����H��H���stateless-ISO-2022-JP-KDDIUTF8-KDDI
$,��H�PXY`ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲�t夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯��涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰�|蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙�髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑N� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇��◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯\D0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz�$	ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん	(
ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ^�ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω��АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя��
─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂C�①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪eP亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭��院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応�,押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改��魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱�4粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄��機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京�<供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈��掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲�D検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向��后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込�L此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷��察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時�T!次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周��"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償�\$勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾��%拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾�d'澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線��(繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎�l*臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只��+叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵�t-帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓��.邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到�|0董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入�2如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦��3函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美�5鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服��6福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋�8法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満��9漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒�;諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃��<痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯� >蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕��?弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲�|@僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨�B辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨��C咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉�E圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩��F奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓�H屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏��I廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚�K悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛��L戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼� N據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼��O曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍�(Q棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣��R檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾�0T沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌��U漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼�8W燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱��X瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰�@Z癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬��[磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐�H]筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆��^紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺�P`罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋��a隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙�Xc茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈��d蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙�`f蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞��g襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫�hi譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊��j蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸�pl遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮��m錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞�xo陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰��p顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷��r髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈�t鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠��u堯槇遙瑤凜熙�w�0w��x�8z��{�@}��~赶﨣軏﨤逸遧郞都鄕鄧釚�H�釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"́�t�|�<	 
x��
�H�$�,�4�<�D�L!�"T$�%\'�(d*�+l-�.t0�1|35�68�9;�<>�?t@�A|CE�FH�IK�LN�O Q�R(T�U0W�X8Z�[@]�^H`�aPc�dXf�g`i�jhl�mpo�pxr�s�uw(w�x0z�{8}�~@�ā@�`H������	������������������aԄ	��������	��	���������������������������������������������������������������������������������������������������������������������'$�������	���������������������iЅ	����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	����؆�/,��,�	������������������������������������������QD�	��������������	���������������������������������������������������������������	������������	�	������Y	,����	������������������������������������������������������������������	D�	����������������������	��	������������������
܈	���a
�	�������������������������������������������������������������
�������������	�������������������������������������������������������������������������������
x�	������'�	������������������i�	�������������������@�	�������h����	������������/��������$�<���Ԉ���p����8�`�x���q��������������	����������������������������������������������������������	���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`�������������������������������������������������������������	���������������������������������������������������������������������������������������������������������7
l����������������������������������������������������������������������������������������������������������������������������������������������������������������������	������������y
X�	���������
T�	���������������
p�	���������������������������������?��	���������������������������Ў	��������������������	������,�X�d�P�L��h���Ȏ��$�<�GD������	���������������������Ϳ�Т�������У����������ʺ����ξ�������Ф����Х����Ц����ð����Ч�Ш�|�	�Щ�ǵ����Ƿ�������˳����Ъ����Ы�������������֦�������������	�Ь�Э�λ�ͽ����Я�������в�������������������������г�д�е�˴�ж����������������������μ�з�и�й���
h��������о	�м�н����������л�к�ʩ�������¾�п��������������������������������������������Ǥ���O�������	������������������Ȳ������������������ȼ���������������������	����â����������������ͤ�������������;�������������դ�������������ʻ���������������	����������������������������������������������������ե������������η���x�	����¥�������������������������¯�������������������������������������ɶ���������������W���`������p��d��l�	�����������������������������������������������������������������������������������������	���������������������������������������������¦��������������	���˵����������������������ѣ�����������_��	�Ѥ����ѡ�Ѣ�Ư����������ѥ����ν�Ѧ�ѩ�ѧ����Ѩ�Ѫ����Ѭ�ѫ��ȡԔ����Ѯ�ѯ	����ѭ����Ѳ�ѱ�Ѱ����ѳ����Ѵ�ͥ����Ѷ�ѵ�Ѹ�ѷ�ѹ�8��Ѻ���	���������������������������Ѽ����������ѻ�ѽ�������Ѿ�������������Ȭ����ϻ�������ʼ�¶����ŵ���%�����	������������������������������������������������������������̽������������������������������������������������g4�	���������������ο�����������������������������������������������������������ȡ���ܖ���	�������ʬ�������������������������������Ƚ��������������������������������������\�	�������§�������������������˶�������������������������������������������-ܗ	���������έ������������������������������������Ң�ң�������ϫ�ҥ����Ҥ���oT�����Ҧ	����ļ�ͦ����ҧ����ư�Ҩ����̳�������ҩ����ҭ����Ҫ����ҫ�������Ү�ү�Ұ�ұ��������ޱ̘��������	����Ҳ����ҳ�ҵ�ҷ�Ҷ�Ҹ����������ҹ����������Һ�������һ�Ҽ�ҽ�Ҿ�ɤ�������ƿ�T��ҿ���	�����������������Ⱦ�������´����������ñ����������������������������������¨������������������5ؙ	���������������������������������������������������������wp�	����������������ͧ����ȿ������������������������������������������á����������������������������������������ݹ̚	����������������������Ʊ�̾���������������������������������������������������ʭ���������p����	�Ϥ����������������������������������̣����������������̿=�����	�������������������������������ӣ��������ӡ���Ӿ���������ӥ����ӤX��������Ӣ	����������Ӧ����ӯ�ӧ�Ө�������ӭ�Ӭ�ů�Ӯ�ӫ���̜	����������ө����Ӫ����Ӵ�ͣ����Ӻ�ӹ�Ӱ���,��ӱ	����Ӷ����ӳ�������ӷ�Ӹ�ӵ�ӻ�Ӳ��������Et��ӽ	����������������ӿ������Ӽ����������������������������������������ć��	�������ԧ�������������������������������0�	�ò���������������������������������������t�	�������������������������������ʮ����ȸM�����	�������������������ǹ����������������������������	���������������������������������������������������D���	������ԡ���Ԣ�ԣ�������Ԥ�Ԧ�ԥ�Ԩ����ԩ�������������Ԫ�ԫ�ԭ���Ԯ	�������˷�Ԭ�ԯ����������Գ�������ó�԰����ԴU�	����Բ�Ե����Զ�Է�������Թ�Ժ����Ի�Ը�h��Ա	�Լ�Խ�������������Կ���Ծ����Ǹ������������������������������	�Ʋ���������������������������������������������������ʽ���	����������������������ȹ�������������Ŷ���������������]h�	����������������������������������ʯ����������������ȡ	�����������������������������������������������������������������������������������������	�������������������ͼ����������¿�������̴�������ŷ�����������������������������#��	�������������������������������������������������������������å���ʳ�������ա���e�	�բ�ǡ�������ǥ�ի�������̯�֬�գ�զ�������˸����է���������������	�ը�������������������լ�խ�ժ�������թ����ɱ�����������	�������ղ�հ�̼�ճ�ձ�կ����ծ�������շ�ո���+`��մ�Ϭ	����ն����չ����պ�յ�̻m��	����ջ�ɲ�ռ���ս��	����տ����վ�������������������������������	���������������������������������3T����	�������������������������¸�������������������������������¹����֣������������u�����	���������������������������������������������������������������ͨ�����������������������������ɷ����	�������������̩����������������������������������������������������ǫ����������������������������������������	������������������������º�������Ƴ���������������������������������������������������Ǣ;D������	��������������������֢�֡������Ÿ�°������������֤�֥�������֧�֨}ԧ	�֩����֪�֫�������������֭�̨�������֯�ֱ�������֮�ְ�ֳ�H�	�ֲ�ִ�ֵ�ƽ�������ֶ�ֻ�ֹ�����������ָ����ַ��	����ּ����������ֽ����־���������������������C�	����������������������ֿ�����������������΅D�	�������������ֺ������������������������������������	�������������������������������������������������������������̦�������������ç���	 ܩ	������������������ġ����������������������������Ģ����������˹K X����	������������������������������Ȩ����ʾ�������ʿ�ǯ��������������������ͩ������ ��	�ģ���������������������Ź��������������������������������� <�	������������ϭ��������ס�פ�ץ�ף������ק�צ�ע�ר�ש�ת�׭�׫�׬�׮�������ׯ�������Ƕ�װ��!��	����ױ�Ϯ�ײ���׵�С�б������׶����Ĥ����׷�ʦ����������������������׸�׹�׿�������ĥ����׺�ɫ���S!0�	�׻����׼����׽�׾�������������״�׳�������ɧ�������ɷ�Ħ��������������������������ʕ!Ĭ������������������	����������Χ������������������������������������������������ħ����Ű�������!H�	����ɬ����Ǧ�������˺�˻�������������������ح����ǰ������������"ح�|�̔0���,�ԖT�ԗL�ĘL�Йh�Ěh��P�Ĝ$�l���(�l�����<����`����`����������X���ܤ�L������<�̧@����<���ԩP���4���(���@�Э4��<�	������������������������������������������������������������������["H�	����������������������������������������������������������������������©���������"��	�����ء����������ا������إ����أ�ؤ���آ����ͪ�������ئ�Ǻ����������ج�ذ����ة����خ�"4�	����د�������ث����ر�������������ت�ب������������ؽ�������ظ�ص�ض����ع�ؼ!#���ط���	�غ�ش�����ؾ�ؿ�������س�������������ػ�����������������������������c#4�	���������������������ز������������������������������������������θ��������������������������ݥ#��	�ͫ������������������������������ʰ�ƴ�������������������������#<�	�������������������������������������Ĩ������������������������)$����	����������������������������������������١����٢����٣�٤����٥�٦�٧����������˼k$�����٨	���������������٩����ʧ����٬�٪�٭�٫�ٮ�ʱ����������ٯ�ٲ����$�����	�ٰ�ٷ����ٱ�������ٳ�ٴ�ٸ����ٵ����������ȴ����������ڭ��������ٻ�������$��	����ô�پ������������������ټ����ٺ�������ٶ�ٹ���������������������������������������������������ٽ1%t�	�������������������ĩ������������������������������s%�	�ª����������������Ľ������������������������������DZ�%`����	����������������������������������Ϋ����õ���������������������������������������%�����	�·������������������ͬ������������������������������9&8�	����»���������������������������������������{&��	������Ŧ��������������������&�	�������������Dz����Ƶ�ű�����������������������ڥ���&�	����ڧ�ڣ�ڤ�������ڢ�ٿ�ڦ�ڡ�ګ�ڬ�ŧ�ڮ����ک����گ�ڨ�ڳ�ڲ�ڱ�ڴ�ڶ���A't��ڵ	�ڹ�ڷ�ڸ����ڻ�ں���ڼ�ڰ����ڽ�ھ���ڿ��������������'�	�������������������������������������������������������������Ũ�������'H�	�������ʸ����������������������������������������������������������������������(��	����������ι����������²������������������������ö������������������������I(0����	���������������������������������������������������������������������������������������ۦ�(��	����������������������������������������������������������������������������������(0�	��������������������������������������Ī�������������˽�ۢ���������)��	���ۡ������ۣ����ۤ������ۥ�ۧ�ۨ�۩����������۪�۫������������������������Q) ����	�������ͭ��������۬����Ŀ�ۭ�ϯ�˾�ī�ۮ����ۯ�۰����̤���������۲�������۴�۷�۶�������۳�)��	�۵�۸������������¼�������ۻ����۹�«�ۺ�������ۼ�۽����������������ۿ������������������������)(�	������۾��������������������������������������������������������������*��������	������ɢ�������˿�������������ͮ�����������������������������������������������Y*(�	��������������������������������������������������������ϛ*�����������������	�������������������������������������������ɰ���������������*�	�����������������������������������������������������������������������������+|�	����ܲ�������������������ܡ�ܣ�ܧ���ê����ܫ���ܨ�ܢ����ܬ����ܪ���a+������	�ܦ������̺������������ܥ����ܯ�������ܱ���ܰ�ܩ���ܭ�ܮ�ܿ����ܤ�ܻ�ܽ��أ+d�	������ܸ����ܾ����ܵ��������������������ܷ����ܺ�������ܼ����ܴ�ܶ�ܳ�ϰ����ܹ�+�	����������������ϱ���������������������������������������',`�	�����������������������������������������������������������������������i,��	���������������������������ɸ�����������������������������������������������î�,,�	��������������������������������������������������,�����	����������ݡ����������ݬ�ݨ����ݧ�ݦ�ݣ/-��	����ݥ�ݤ�ݪ�Ϧ�ݭ����ݩ�ݫ�������ȧ�ݮ�ݲ�ݯq-L�	����ݰ����ݳ�ݴ����ݶ����������������ݸ�ݷ�ݺ����������-��	�ݽ�ݼ�ݾ����÷�ݿ�������������������������������������������������������-�����	���������������������������������������������������������������������������7.d����	�����������������������������������������������y.��	�������̱����������������������ɹ��������ۻ.0���������	�����������������������������������������������������������.x�	���������������������������������������������������������ʨ���ޡ�������������?/��	�������������������ˡ���ޤ����ޢ���ˢ�������ť����ޥ�ޣ�������ˁ/d�	�������ް�ޯ����ެ����ƶ�ަ����������ީ����ޮ�ޭ�ި�ޫ����ު����/��	�ή�������޶�޴����ޱ�޳�������ϲ�������������������޵04�	�޺�������Ͱ�޷�޲�޸����������������������޾�����G0�����	�������޿����������������������������ø������������������������������ʥ�������޻����ź���0��	�������������޽�������޼�������������������������������������������¬�������������������������0l�	����̫�������������ù�������ͯ���������������������
1����	����Ȯ�������������ί����������������������������Ů������O1L�	������������������������������������������ũ�ߣ�������1��	����ɺ�������ϳ����ߢ��������������̡�����������ߡ���1�	����������߯�ߪ����������߳�߬�Ĭ�ߩ�������ߦ�ߥ�߮2h��ߨ�ߧ�߭	����ߤ����߰�߱����߶�ߵ�߷�ߺ����ߴ����߸W2��������߲�ǻ	�߹�߾�߼�߿����߻����Ǩ�޹����߽�������߫�����������ə2���,���,���4�������l��X���0���ض�l��@���(���(������ ��� ����t��\�ܿX���$����D�����\���(�p���\���,�����d���D����`����t��|�	���������������������������������������������������������������2��	�����������������������������3��	����ϧ�������������������ú��������������������_3$�	���������������������ˣ���3t�	����������������ʲ����̵����������3��	�����������������������������������������������������%4��	������������������������������Ǯ�����g4<�	����dz�����������������������������������������������������ࢩ4��	�������������������������������������������4����	��������������ĭ������������̶����ϴ����ʪ�������������-5H��������	��������������������������������o5��	�����������������������������������������������ì����ϵ���5��	���������������������������������ǭ����������ͱ�Ͳ�������5`�	���������������������������������������������56��	����Ψ������������������������w6����	��������������������������������������������������������6@�	������������ΰ�������������������������������������6��	�����������������������������������������������������=7��	�����������������������7T�	������������ɻ������������������������7��	�����������������������������ż����������������������������ͳ����������Ҵ�Į�����8��	��������������������Ȫ����α�����������ȫ�ɭ���ά���������������������������������������E8h�	����������������ɥ�������������������������������������������������������8��	���������������������������������������Ρ�������������������������������8l�	���������������������������������������9��	�����������������������������������������������ȯ���������ɴM9 ���	������Ū�������������������������������������������������������9��	���������������������������ݹ�������������������������ľ���������9�	���������������������������̲������������������į���:�����	���������������������������������������U:��	����������������������������Ʒ�����������������ڗ:$�	�������������̷�������������������û�������������:t�	�������������������������������ˤ���������;��	�������������β�������ȣ���������];�	��������������������������������������������������������;H�	�����������������������������������;��	������������������������������������#<�������	����������ʹ����������������������Ǫ����ɼ���������e<<�������	�Ͻ�����������ʡ������������������ǩ��������������ŧ<��������	��������������������������������������������<����	������������̭�ɣ���������������������������������������������+=d����	���������������������������������������������������������������m=��	���������������������������������������������������������=4�	�������������������Ω�������������������������ε�������������������Ƹ�������è�������ü�������ѿ����������=��	�������������������������ū�������������������������3>,�	���ɮ�Ȧ����������ȵ��������������������������������u>��	������������������̧����������������������ý����Ȣ���Ȥ�>�������	����������������������������������϶���������>d����	����������������������������������������������������;?�����	������������������������������������������������}?�	����������ʴ����̰����γ�������Ǵ����������������������������������������������������?p����	����������������������ʵ������������������������������@�����	����������������Ǽ�ɳ������������������ʶ����������������������������������������C@X�	���������������������������������������������������������������������帅@��	����������³����������������������������������������������������þ���������@d�	������������������������������������������������������������������	A��	������������������������������������������˥�����������������������������KAP�	��������������������������������������������������������������������������A��	���������������������Ż���������������A8�	�������B��	�����������������������������������������ȳ��������������SB��	����������������������������������������������������������B�	�������������������������������������������������������B�����l�����4�x���@�����X����8�����L�����`���d�������x����l����@�����4����\���,���$�����\����h���P���\���H���0�|�����|����������Ϸ	�������������������������������������������������������ÿ���C��	�������������������ʹ������������������������İ�������������ϸ���[CP�	����������ȥ���Ͼ�ȩ�������ɪ��������������������������������������������ٝC��	����������������������������˦��������������ƹ������ǽ�C,�	�������������̮�����������������æ�Ǿ�ı��!D��	���������������������������������������IJ�ʢ������cD����	����������������������ɨ���������������������������ǿ�D<���	����������������¡����������������������������������������������������D��	����������������ڪ����������������а�����������������������������������������������������)E ����	�����������������������������������������������������������kE��	����������������������������������������˧������������E�	���������������������������������������������������������������Ed�	������������������������������������������������������1F����	�������������������������������������sF<�	��������������������������������������ϵF��	������������������������������������������������ɩ�����������������F��	����ƺ�������˨��������������������������������������9GL�	����������Ϊ������������ơ����������������������Ǭ�����������{G��	���������������������������������������������������G�	�������������������������̬�������������˩�ϡ��������G\����	�������̢��������������������������¢���AH������	�������������������������������������Ƣ�����������鲃H���	��������������������������������������������������������Hl�	������������������ƣ��������������������I��	���������������ݱ�ݢ����������������II0�	�������������������κ���������������������Ix�	����������������������������������������I��	������������������������������������Ⱥ��������������������������J����	�˪�������������������������������̪������������������QJl�	����Ϲ�������������������������������ij�����J��	���ͻ������������������J$���	������������������������������K\�	����������������������������������������YK�����	�������������ާ�������������������������������ɽ�����������������������ޛK��	�������������������µ����������������������������������������Kl�	���������������΢����͵����������������Σ������������������������������L��	�������ʣ����������˫�������������������������aL<�	��������������������������������������������L��	������ʤ����������������������������������������������������L����	���������������������'M`����	�������������Ƥ�������������������������������ˬ��������������������������iM��	����������������������ɾ��������������������������������������������������˫M�	������������������ǧ����������Ͷ�������������������������������������ï�������������Ĵ�M��	���������������������������������ĵ���������������������������͡�����������������������/N����������	�ƥ������������������������������������������������ɵ���������qN��	������������������������������������������������������N���	�����������������������Nt�	�ë����7O��	���Ʀ���˭��������������������Ю�����ɿ����yO�	��������������������������������������������������������������������������������������Ž�����ǻO$��������Ϩ������	�������±��������������������������������������������������������������O��	����������£���������������������������?P@�	����������������������������������P��	����Ķ�������������­�������P��	�������������������������������������������ϩ�ķ��������Q�	����������Ƨ����������������GQP�	��������������������������������������Q��	�����������������������������������������Q�	�������������������������������ž���������������������
RD�	����������������������������������������������������������͢�����������OR��	�������������������Ų������������������������R�	����������������ҡ������������ä������������������é�R\�	�������������������������������������ų�����������������������S��H���$�����4�������\���4�����D����T�����d���(�p�����d����T�����d���4�����X����������l��������8�|����H����<����T������������	�ƨ�������������Ʃ�������������������������������®�¤������Ϣ���������������������ɯ��WS(�	���������������ͷ������������������ƻ�ã����������½��������������������Ŭ��������������������������������S�������������	����������͸����ˮ������������š�St�	�������Ϻ�������������������͹������T�	�������������Ţ������_T�	����������������������������������������������������������������T@�	����������������������Ȱ�������������������������������T��������	����������������Τ����������������������ţ������������������������������������������������������%U��	���������������������������������������������������gU�����	�Ŵ������������������������������������ȭ��������������������ȩU����	����Ƽ�������������������ĸ����������������UP	������˯����������������������������������������������������-V�	�����������������������������������������������ϣ������Ͽ������oV	������������������������������������������Vt	��������������������������������V�	����������ŭ�����������������������5W	��������������ƪ����������������������wWP	����������������������������������������������������������عW�	���W�	�Ĺ=X���	�������������������������������������������������������ȶ������������������������X$	�������������������������Ʈ������������X�	������������������������Y����	�����������������������������������������������������������ƫ���Φ������EY	����δ�������������������������������������������������������������������������Ȼ�Y�������	�ͺ������������������������������������Υ�������������ʷ���������������Y0���	���������������������������������������̸�������Ϫ����۱������������Z�	��������������������������������������������������������������������������������������MZ(	������������������������������������������������������Z�	����������������������ǣ�������������������Z	����ĺ�����������������������������������������������Ƭ����������������[L	����������������������������ſ���������������������U[�	����������[ 	�����������������������Ҭ�ݻ�������������˰����[D	�������������������������������������������������\�	�����������������������]\�	��������������������������������������ɟ\4		���������������������������������������������������������������\x		����������������������������ƭ������#]�	���	������������������������������������������������e]
	���������������]p
���	������������������������������������ȱ���ɦ�������������]�
	���������������������������ݵ�������+^	�����������̥�����������������ϥ��������m^T	�����������ʫ�����������������������������������^���	�������������������������������������������������������^���	���������������������������������������������������������������������������3_\	�������í���������������������u_�	�Ļ����ȷ����������˱�����з_
	�������ƾ������������������������������������������_@
	�������������������������̹������˲���������;`�
	�����������������������������}`�
	���������������������������������`<	����������a�	���������������Ca�	�������������������ϼ����������������������������������������������a�	�������������������������������������������������������������������������������a8	�������Ť����������������ɡ���	b�	����������������������������������������������Kb�	�ζ���������b@��l���8�������H��l��H������(� ��D�<��,	p	�	
h
�
�
L��T�
8
�
�
4���0��8\�bdc,�	������������������������������������������������������������������������3cl������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	uc��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�c����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�$�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�c<���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�@������������������������������������������������������������	;dL ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�c�"����������(48D � �!�"�#}d�#���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�($�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������4%���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	�c@&	��ƿdD'	���eX'	������������������������������������������������������������������������������������������������Cel'	�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'���������������������������������������������������������������������������������������������	�e)	�������������������e�)�,%8&<'P'd'�')�)�)	f�)<�Kf�)��)}f�)���ȅ��І$�4�<��t���@����� �\d $�)�)**�f*@BBJ$(!~�����	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^��	
��	

 !"#$%&'()*+,-./012345��	

 !"#$%&'()*+,-./0123456789:;<=>��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV��	

 !"#$%&'()*+,-./0��	

 !"#$%&'()*+,-./0123456789:;<=>?@AB��	

 ��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS��	

 !"#$%&'()*+,-./0123����	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[���������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

����	

������	

��������	

��	

������������	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456788889:;<8������	
��	
������	
��	

 !��	

��	

 !"#$��	

 !��	

��	

��	

��	

��	��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'��	

��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$%&��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	
��	

��	

 !"��	

 !"#$%&��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

 !"��	

��	

 !��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

 !��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	
��	

��	

 ��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	
����	

��	

 !"#��	

��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'()��	

��	

��	��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

������	

��	

��	
��	

��	

 !��	

��	

��	

��	

��	

��	

��	

����	

��	

��	
��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	
��	
��	

��	

��	

��	

������	

��	

��	
��	

����	

 !"#$%&'()*+,-./0123456789:;<=����	

��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!��	

��	

 !"#$%&'()*+,-./0123456789:;<=>>>��	

��	

������	

 !��	

                                 ����	
�����	




;T	�j��p�j����k����k���xl����l����l��Hm��hm��(zRx�$@j��0FJw�?:*3$"DHj�� \k��
pk�����k����k��!��k��~�,l�� �8l��<HoGNU� 	��! *l�5�g`�J0	0	@	�
�	�
* 8�5�g`�J0	0	
0
; t*�5�g`�J ;̄�5�g`�J������
Ъ!ت!���o`��
���!0��	���o���o����o�oz���o��!0@GA$3a1�GA$3p11130	GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0	:	GA+GLIBCXX_ASSERTIONSemoji_iso2022_kddi.so-3.4.4-3.el8.x86_64.debug��#��7zXZ�ִF!t/���O]?�E�h=��ڊ�2N�$D���q	�=�KB
�K�G�E�B� M�t0u2H��CzNԥn��uWgc��LjR�	50���/���/������%QZ���S�TڷAι?������{(ES�`~�1"͉�rKڬ��x���j��B8����D�a�Ry�/?՝��a�7�γt���s]��N�s��JG��(�ʚV�|���nw��R�-�-�P��+�q���t�	�4�*���%��)�h�9UʄU��C�i��Ѹ��6�[Ϗ�*S��r�Z�fٜg"�64Ҽ�3h�sF���A�����#�DTr�d@�We[k�]}�3㟔I+�����F��í{a5ڵ>���?�1�U��)�/�+M���Cx��C�Y@~��Կj�_�QY<������v��K�ř�[�}<k�Pä�����2�:vf� ?�M��{�M�����~�\�[��~�
y�U0�`~8�6�(b���^�V���詂=M��Uб�C�08��ѭ֩�I����s��Tf��3��:c���V��>�K�hSN��{�j(C!��A�{�X�l؝i'R�	,��ɿ��l-Fw����/�M�[�,*��rX�.��;(�������%n'EvD�*eYrR&�#=O����H�5��i`��?.M)�S�Ĵ��gz��M	ro���[�5��^*@���.�	�d�VƘ,���������qi.[f�nw��p��s*���G�>�,�����&�0��O�����n���}Ɇ���^c%��JfgÏ[c?�w.gG7?����"�@�h�!�0&:�Sڜg+�1d8�R9j�X�����C<��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ozzE���o�� T��^B��0h��c  0nPP wpp�}
�  F� �h�h�T����������� �Ъ!Ъ�ت!ت��!�� ���!�� ���!��H��!���a�H0�4d���"PK*J[Q:�p�p�lib64/ruby/enc/trans/korean.sonuȯ��ELF>p@p�@8	@ � � ЪЪ#Ъ#8 ����#��#  888$$���  S�td���  P�tdd�d�d�$$Q�tdR�tdЪЪ#Ъ#0GNU>3fR7��ei@z�]����X�@ A	BE���|�qX�� a , F"��#��#��#U0<__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_koreanrb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�Ъ# ت#��#�#�#��#��#�(�#���#���#���#�ȫ#�@�#�H�#�X�#�h�#��#��#���#��#�ȯ#Я#د#�#��#��#��H��H���#H��t��H����5��#�%��#��h�������h���������%]�#D���%U�#DH�=��#H���#H9�tH�>�#H��t	�����H�=Y�#H�5R�#H)�H��H��H��?H�H�tH�
�#H��t��fD�����=�#u+UH�=�#H��tH�=ޢ#�Y����d�����#]������w������H��H�=��#����H�=��#����H�=I�#��H�=��#H�������H��H���CP949UTF-8EUC-KR	������������������������������������������	����������������������Bd	������������������������	����������������		��������������J	�������������������������������������������������������������������������������D����	����������������	��������������������������������������������������������������������������������������������������$��������������������������������	��R��LL	���������������������������d	������	����������:�	����������������|�	�����������������������������������������������������	���������������������	����B���	������������������������������������������������	���������������L	������������x	��J�	��������������������������������������������������������������	�����������������������������������������������������0	�������������������������������������������������������������	��������������������������������������������������������������������������������������������������������R,������������������������	�	���������������������������������\����	�����������������	������������Z���	�������������������������	������Dp��(�$T��	H	�P	��������	�������������������������� �		������������������������������������������������������������������������������������������������������������������������������b
����������������������������������������	�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������	��	������������������������������(	���������������������������������������������������������������������������������������������������������������������������������b$
������������������������������	j	0����������������������������������������������������������	�	|	�����������������������������������������������������������	����������	����������������������������������������������������������������������������������������������������������������0
�����������������������	����������������r
��	��
(t�|���
�����	��ز��߲߾�����������ܰ������ӡ��
 	��Ҭ��޿��������������������߭��8�	կ�������������������������������������Ӣ��z����	�����˿���������������ֵ�����������X	���������������������ֶ������ʡ��	��ӣ������������������������ʢ��������@	�������������������������ٲ���������|	���������������������������������������|�P�t�8
@	ܱ����������������������ۧ�����������������H
p	��ʣ̧��������������������
���	�ۨ�ߡ�����������߿���
$	�������������������ʤ���h����	�������������������P����	�����������к������������Ү����������׿����ܲ�����������	���ٳ���ή٢�������֩��	�����������������������������������	������������֪���ܬ��ߢξ����������ʾX 	�����лշ����˧�����������������	��м�ױ�������ʥ֫���ҽ̤����	������������������������ٴ�������������в�ڨ0	��������������������ˡ�������`�ϡ�	���������س�������������ܦ�����������ʿհ��������	�������������������t	�����������������������ϢͯϣͰ�У���ʦ����������&�	�����������٣��������������������������������h$	����ͱ����Ͳګʧ����٤���	����Ϥ�������������������	������ʨ���������.	��������������������pT	������Ӻ��������	���������������������������Ӥ��	�����������������6	��ʩϥ�������xH	���������x	���ޭ��������	ҥ�������������ַͳ>�	��������������ӥ���Ф������	��г۩ӻ�����������������Ϧ���@	���������ϧ��	����������������������F���	��̱��˨����������������������	�������������������������������X	���������������������������	��Ӧ��������פ��������������������N�	����������������������������L	����ү��Х��������������������������ҳҿ������	����������������۪������� 	��ٵ���ʹ�������˩��������������VX 	������Ҧ���������ش������ 	ץ����������� 	��ڬ�� !	ʪ������������^@!	���������ޮ�p!��	����������ݡ������͵��������ݢ��������!	���������������������ί�������������������������ʫ�����$"��	��������Ϩݣ��������Ҽج���������һ�����ΰ�����������f�"	������������������������۫������Ͷ�ڭ���#��	�����������ܳ�צ��������ߣ����#	���˪���ˢ�����ھ��ֹ�,�#�	����������������n $	����������˫������X$	ڮ��չ������$	ϩ���������ֺ���4�$	��ص�����������������������������v�$	��������������������������ٶ���P%��	���۬��ح������������Ҵܴ�������������%	������������ݤ����ͷ������ˬ���<&	����֯��ϪΩ�����������������������~\&	ܧ��������������������������˭����&	��ˮگضӧ����������������ޯ�����ۭ�����'����	���������������������������������ڰ�������D|'	�����������������ҷ������'�`��|���(��l���L��@p���8���P��D� P � � !8!h!�!�!�"#|#�#$P$�$�$�$H%�%�%T&�&'t'�'((b0(	�����ֻ�����������̥�<)	�������������ο������������Ҹ������
|)	�����������������������������ڿ���L�)	����������������������������@*	�����������������������������������*	��������������ٷ��������طα�������������˯���*	���������޻�����������̨���������Ӽ��TX+	���������������������ϫ����+�	���������������н�������������ۮ�,���	���������������ݦ���� h,�	�̼������������������������\ �,	����ҹ������������������Ϭ���������������͸���� -	������������ظ��� |-	���������������������Һ��"!�-	���������������������������d!�-��	��Ц����������̩����ߺ�!H.	�������������������!�.	����ؤ�ٸٹ��*"�.	����߮�ҵ��������������ӵl"�.	������̪������ӽ�������պ�������������"@/��	����������ջ��͹������ۯ���"�/	ͺ��������ϭ�������ߤ������ͻ����ݧ��2#�/	ְ�����ް�����������������ݨ��������Ө۰���t#T0	۱�������ײ������ө���������������������#�0	���۲����٥����������ܵ������������������ܶ���#,1	������������������������������ع���������������:$�1	��ʬ���������������٦ͼ����ٺ������������|$ 2	��Ӿ���������������������������غ�����$�2��	������������������ѡѢ������ڱ����������������%�2	��ߴ�������������ѣ��������������������B%`3	����۳�����������ͽ���ʭʮϮ���%�3	ܷ��ٻ���������ϯ��ʯҰ�׳����������%4	�����������������̫�&|4�����	������������������J&�4	������������������������������ڲ�&5	ѥܸ�Ѥ�������о��������͡ߵ�ԡβ�&\5��	�������٧�����'�5	�������������������ڳ��������п�����R'�5	���۴�����״���'L6	;��ϰ������Ϊ��Ч�����'|6	������ק�������ټ�����������(�6	��������й��Ѧ����Z(7Ӫ	̬������������ޱ���(<7	Ԣ�����������(x7	ձ����ղռ������ѧ��γ )�7	����ʰ��ϱ��������������������b)�7	��������������ֱ޲��ӫ��߯����)<8	���ϲ��ٽ��Ը���������پ��ϳ�)�8	������Ѩ�޼���(*�8����ϴ	���ߥ������˰�����������ڡ̽ѩ��j*9	�Ѫ�����������������ک������������������Ϳ�����*p9	������������������������������������*�9	��֬����զ�����������������������0+L:	׵���޳����������ݩ���������r+�:	������������������������+�:��	�������ѫ�����ԣ�ר��ӿ�����������������������+8;	߶���������Ԥ����������������������ڴ���8,�;	��ڵ�Ӭ����������������������z,<	���׶ϵ٨��ݪ͢�������,p<	۵������������ԥ��������ػ�,�<	������ש������خ���ؼ��������@-=	��̾���������������������������-P=	߻������������������������Ӷ�-�=̭��ֲ��	��������Ԧ��ս����޴��.�=t)�)8*�*�*P+�+�+`,�,�,t-�-�-@.�.�.�.8/�/�/L0�0$1�12|2�2X3�34t4�4�4T5�5�5D6t6�6�647p7�7�748�8�89h9�9D:�:�:0;�;<h<�<�<H=�=�=H>bP>	����Թ���׷��޵��������������������ճH.\?	δ��������ؽ����϶����.�?	�����������������������ܹ������.�?	֭�����է���������/P@	�������������������P/�@	��֡������������߰����������������/�@	��������������������������/A	����������������������������ԧ�0`A��	����մ����������ݫ������X0�A��	����������Ժ���޶ٿ�����ڪ����̲�0B���	Ի��̳���0`B��	��������Ϸ�������������1�B	����������������������`1�B	��������Լ�����ִ�ӷ���1C	�����������ϸ��Ѭ������޷ּ�����1TC��	ʱ��ߦ�����������ը����������Ш���������&2�C	��Ϲ�����׸�����������ѭ��Ѯ�����ε������������h2D���	�����������������׹��������إ�����2�D	ѯ����֢������������Ѱ�����������������2�D	��������ζ�����������.3\E	̴ܺ��������ߧ�����������ˣ������p3�E	дͣ�������׺���������������������ѱ˱Ѳ�3F	˲�����������ߨ���������Ӹ���������3hF	ʲܻ������������������ئ����64�F��	����������׻�תx4G	���������������ͤ��ۡ�����4LG	���������������٩�4�G	���������������Ԩ����������������������>5�G	����ڶ����������������54H�	�����Խ����ԩ�����5tH	��٪ؾܭ��������̡Ϻ6�H	����������ϻӭ�����F6�H	�������������6$I	Щ����׼�������6TI	ѳ�������������ܡ�����ا7�I	�۶���ͥ��ب��Ѵ����N7�I	���������������7J��ѵ	Ѷѷ�����������������������Ѹ���70J	������������������Ԫ��������Ծ8�J���	ܼҶ��Ρ���������������V8�J��	���������������������������ԫʳͦ���8$K��	��������������������ϼ�������8�K	�������������������Ъ9�K	�Ы���ء����ܽ�����������Ӯ��������^9L	����������آݬ�ֽ��9xL	�������������������е������9�L	������ѹߩ���η�������$:M���	�����������Կ��f:DM	����ӯ����������ֳݭ�:|M	վ����������ڷ�:�M	���أ�����������������������,;�M	��������˳��ͧЬn;,NѺ	�����������ڢڣҡ���������������۷�������׫���������;\N	���������̿��թ�������������˴�̵Ͻ�;�N	������������˵�������ѻ�������4<<O	�����������Ӱ�������������֣��v<�O	���������������������׬�����<�O	�����������������̶ͨ���ͩ�<8P	������������տ<=�P	ݮ���~=�P	�θ�������������������=�P	�Ѽ��˶ڸ��־��������������>Q	�������ֿ��������������������D>`Q�?�?H@�@�@AXA�ABXB�B�BCLC�CD�D�DTE�E�E`F�FGDG�G�G,HlH�H�HILIxI�I�I(J�J�JK|K�KLpL�L�L<MtM�M�M$NTN�N4O�O�O0P�P�P�PQXQ�Qb�Q���	���ѽϾ�ұ�����Ѿ�������>�R	�����޽��ڤ֤��������������>S	����������ѿ����������̷۸���������
?XS	���������ˤ��������������L?�S	�������������������������ޡ�?T	���ݯݰ˷������������������?LT۹	̮����ݱد�������������������@�T��	ޢ�����������������������Ͽ�T@�T	�����������������˸��ۺ����������@@Uݲ	���������������������@�U	��������ݳ���߷���������������ۻ����������A�U	��������ʴ����������������\APV	�����ʵ����٫���������������A�V��	�����������������A�V	�������������ݴ�ذ��"B$W	��ι����ж΢�������������ޣ������dB`W	��Ԭ����������ؿ���ժ�B�W	���������������Э���B�W	�����ߪۼ��������*C,X��	٬��������������֥���lCdX	١����߸�׭���������������C�X	����������������������C�X	��ڹ�˹������߱������2D0Y	������������������������ΫtDtY	���������ܢ��յա�D�Y	��������������������D�Y	ڥ۽�������:E0Z	��ӱ�������������|EXZ��	������ޤ���E�Z	�����������������F�Z	����٭����բBF�Z	��������������F[	�������������FD[��	���������ʶ������������߹��Ҥ������Gp[	�ٱʷ����Ӳ���������JG�[	�֮��������������ޥ������գ��G\	����������������׮���G\\	˺���������H�\	�������̸Ю����̯ԭ��������RH�\κ	���������H]��	��ݵͪ���������������������۾������ʸ�����H0]	����������������������������������I�]	��Σ����������ͫ������������Τަ�����ZI�]	����������������������������������������I\^������	�ں������ۿ����˻�������׽�����I�^	��������������ާ��̹���� J$_�	ܨ����������bJl_	��ͬ�J�_	�������������������������J�_	���������ݶ��޸������λ�������������ި�����(K�_���������	�ʹ����޹�������������ݷ�Ԯ��ݸ����jKd`	��������������K�`	�������Яݹ���Ka	������������ݺ�0L0a	��ۢ�ʺ��������Υ��ԯrL`a	������������L�a	����԰�������������L�a	������������8Mb��	��������������ʻ��zM0b	�����������������������֦ܾ����������������Mlb	�������������M�b	����ո��ܩ�ܪ�����@Nc	��������ʼ������̦ڻ�����N@cSPS�S�SDT�T�T8U�U�UHV�V�VWXW�W�W$X\X�X�X(YlY�Y�Y(ZPZ�Z�Z�Z[<[h[�[\T\�\�\](]�]�]T^�^_d_�_�_�_\`�`�`(aXa�a�a�a(bdb�bc8c�cb�c�����Ա	���������������Բ������������������֧�����а������N�d	����������Φ����Գӹ�����������̺���������������ס����O e���������	��رܫդ����������������������HO�e	��������ݻά��Դ�Of	������ީ��ӳ�ODf	��������������ٮլ������߫Ppf	���������������ۣ����PP�f��	�����������������ݼ����������P�f	��̢��߼��з�����PTg˥	����������ۤ����Q�g��	���������ٯ����������XQ�g	����������˼�Qh	�������������������������Q,h	��֨ΧԵ��Ӵ�����Rxh	������������������`R�h	��������ׯ��R�h	�����������Ri	���������&S4i	�hS\iڦ	����������������˦������б��������Spi	����������μ��ܣ�S�i	ݽ����������.T�i��	��ݾװ��˽�����������������������Զ�����pT$j	����������̰ͭ������������������T�j����	��������������������������������ڧ�����������T�j��	���������������߬��ܤ�6Ulk	��������ުڼ�����������xU�k	��������������U�k	������Է��������U(l�������	���������������������������޺>VXl	Ψ���������׾��������V�l	��߽���V�l	����ޫ��������������������Wm	������������ܿνFW\m	����������������W�m	����������ة������������W�m	��������ʽݿ�����խ��Xn	޾�������������NXDn��	�����������������������Xxn	�����X�n	������ۥY�n	��ע���СVY�n	����ۦ������ت�����Yo	����������YPo	��������Zto	�������������^Z�o	˾ܮ��Z�o	�������ٰ���Z�o	���������$[p	̻��������f[(p	������[Pp	ͮ�����������[lp	�ն,\�p	�������n\�p	�������������ث���\�p	�������̣���������ڽ�\q	�ܯ����ެ4]@q	����������������v]hq	ף������]�qe�ef<fhf�f�fLg�g�g�g$hph�h�hi,iTihi�i�ij�j�jdk�k�k lPl�l�lmTm�m�mn<npn�n�n�noHolo�o�o�o�o pHpdp�p�p�p�p8q`q�q�q�]�q����	��������������������������������������������������������<^�r��	����������������������~^Ds����	�����������������������������������������������������^�s	������������������������������������������_t��	��������������������������������D_ht	�����������������������������������������_�t	���������������������_u����	������������������������
`Tu����	����������������������L`�u����	���������������������������������������������������`�u	�������������`\v��	������������������������������a�v	������������������������Ta�v	�����������������������aw��	�������������������aPw��	����������������������������b�w<s|s�s`t�tuLu�u�uTv|v�vwHw�w�w\b�w����	���������������b$x	�����������������������������bXx��	����������������������������������������������������"c�x	����������������������dcy	���������������������������������������������cXy����	�������������������������c�y��	����������������������*dz	��������������������������ldHz	�������������������������d�z	�����������������d�z	������������������������������������2e�z	��������������������������������������������������������teT{����	�����������������e�{	�������������������������������������e|����	��������������������:fd|	����������������������������������|f�|	�����������������f�|	������������������g(}��	����������������Bg\}��	�������������������������������g�}	�������������������������������g�}����	��������������������������h,~	����������������������������Jhx~��	�����������������h�~	���������������h�~	������i 	��������������Ri<	���������ih����	�������������������i�	����������������������������j���	������������������������������������������Zj�	�������������������jt�����	�������������������������������������j����	�������������������������� k�	����������bkP�����	���������������������������������kt�	�����������ḱ��	��������������������������������(l�	����������������������������jlD�	�����������������������������������������������������l������	�����������l���	����������������������������������������0m0�	������������������������������rm��	�����������m���	�����������������������������������m�	������������������������8n\�	����������������zn����	�����������������n̄��	�������������������������������������������������������n�����	����������������@o��	�����������������������������������������������o����	���������������������������o$�	����������������pl���	����������������Hp������	�������������������������������pІ	�����������������p$���	������������������qT�	������������������������������������������������Pq����	�������������������q��	���������������������q4�	����������������rl�����	����������Xr��	�����rȈ	�����������������r�Px�xyPy�yz@z�z�z�zL{�{|\|�|�| }T}�}�}$~p~�~�~4`���l����H�l�ā�<�����(���؃��T���Ą��x����d���Ȇ�L����,�d�����؈�b�	��s�	������������`s0�	���������������������������������������sX�����	�������������������������������������s����	��������������������������������������������&t���	����������������������������������ht��	�����������������������������������t؋	�����������������������������t,���	������������������������������������.ut�	����������������������������puЌ	���������������������������������u�	�������������������������������uh���	��������������������������6v��	��������������������xv��	�������v4���	�������������������������vP�	����������������>w��	�����������������wĎ��	���������w�	��������������x�����	������������������������FxD�	�������������������������������������������������������x����	�����������������������������������������x�	��������������������������������������������������������yl�����	����������������������������������������������Ny�����	���������������������������������y`���	�������������������������������������y������	����������������������������������z�	��������������������������������������Vzp���	�����������������������������������������������z̒	���������������������������������������������������������z<�����	��������������������{������	������������������������������������^{����	���������������������{\�����	�����������������������������{��	��������������������������$|���	��������������������f|,�	�����������������������|h�	�����������������|������	��������������¡¢£¤¥¦§¨©ª«¬­®¯°±²,}ԕ³	´µ¶·¸¹º»n}P�	¼½¾¿�������������}��	���������}����	����������������������4~�	������������v~ �	�����������������������~H�	�����~��	��������<��	������������������������áâã~��	äåæçèéêëìíîïðñò��	óôõö÷øùúûüýþÿ�h�	����������������D���	�����������������������������	����������������Ȁ$�	��������������������
�T�	��������������������L���	������������������ę	ġĢģĤĥĦħĨĩĪīĬĭĮЁ�	įİıIJijĴĵĶķĸĹĺĻļĽ�P�	ľĿ����������������T�������	��������������������������������ؚ	������������������������؂,���	�����������l�	�������������������\���(�P����x�Ћ$�l�Ȍ�`����,�H�������<����d��X����h�Ē4����T����$�`���̕H�|���ؖ�@�|������`���ؘ�L������H���К$�d���ěb̛�	����������؜	šŢţŤťŦŧŨũŪūŬŭŮ��	ůŰűŲųŴŵŶŷ"�T�ŸŹ	źŻżŽžſ����������������������d���	�������������������	������������������������������	������������������������*�`���	������l���	�����������������	���ơ���Ƣƣ	ƤƥƦƧƨƩƪƫƬƭƮƯưƱ2��Ʋ	ƳƴƵƶƷƸƹƺƻƼƽƾƿt�h���	��������������������������������������������������	����������$���	����������������������������������:�D�	���������������������|���	�ǡǢ���ǣ	ǤǥǦǧǨǩǪǫǬǭ��Ǯ	ǯǰDZDzdzǴǵB�@�	ǶǷǸǹǺǻǼǽǾǿ���p�	���������������ƈ����	�������������������������������������ܡ	��������������J�8�	������������������������������������d����	���������ȡȢȣȤȥΉ��Ȧ	ȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵ��	ȶȷȸȹȺȻȼȽȾȿ������R�X�	������������������������������������	����������������������������֊�	����������������������������������������8�	���������Z����L�����X�������`����<������8�h���ԡ0�\����P����0���Ĥ��̤����������έ�Ти�����������������������������������������������������ҢңҧҨҩҪҫҭҲҾ��������������������������������bX�����������������������������������������������������եիծָ����������ܥݥ������߳�����������������������������bd���������������������������������������������������������������������������������������������������bp������������������������������������������������������������������������������������������b|�������������������������	���	������������������������������������������������������������������������������������������������������������������������������bȩ��������������������������������������������������������������	��Ԫ	�������������`�\�h�t�����̪X���B���\����������\��<��DT\�	h4)T?�R�d�rx�МP�����ȫЫȌث 、。·‥…¨〃­―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬��X�⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®	�ܭ!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄���ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ����ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ	ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω��─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊	ߎ0�㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆	?�P�ÆÐªĦ	IJĿŁØŒºÞŦŊ㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞����æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄���ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん	����ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	_���АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюя��`��가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆����괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸���깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙����끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝���뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥����덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸���땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗����래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩���륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼����묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗��$�벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤����빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤��,�샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭����숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰��4�쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎����에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨��<�웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊����점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓��D�징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻����찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층��L�치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼����큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜��T�퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁����퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠��\�혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝����伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕��d�匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢����瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械��l�棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜����科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾��t�區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴����鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣��|�朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉���納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶����丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃���棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅����蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣���煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼����遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬���立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅����蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文�� �汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑����發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖��(�碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦����孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥��0�脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索���傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署��8胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬���聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁��@戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧���嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁��H沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額���	櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬��P旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒���簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳��X烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療���窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓��`運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜���濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼��h議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄���立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長��p障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱���煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖��x靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫���踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只���咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯��鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策��� 責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢��"椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃���#贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託��%鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑���&阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃��(品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航���)行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型��$+形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵���,禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆��,.爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰���/ԭ����(�H�������X�p�x�����������������$���,���4���<���D���L���T���\���d���l���t���|������������� ���(��0�8�@�	H�P�X�`�h�p�x�� "�#%�&(�)+�,$.�/,1�41�����A�B���C�D���������E�F�G�H�I�����������������J�����������K�L���M�N�O���P�Q�R�S�T�U�V�����W�������X�Y�Z�a�b�c�����d�e���f�g�hb�2���i�j�k�l�m�n�o�p�q�r���s���t�u�v�w�x�y���z������������������������������������������������������������������������������������b�3��������������������������������������������������������������������������������������������������������������������������������b�4��������������������������������������������������������������������������������������������������������������������������������b�5�����������������������������������������A�B�C�D���E�F�G���H�I�J���K�L�M�N�O�P�Q�R���S�T�����U�V�W�X�Y�Z�����a�b���c�d�e���f�g�hb�6�i�j�k�l�����m���n���o�p�q�r�s�t���u�v�w���x�y�z��������������������������������������������������������������������������������b�7��������������������������������������������������������������������������������������������������������������������������������b�8���������������������������������������������������������������������������������������������������������������������A�B���C�D��b:�����E�F�G�H�I�J�����K���L���M�N�O�P�Q�R���S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�����t�u���v�w�����x���y�z������b;��������������������������������������������������������������������������������������������������������������������������������b<��������������������������������������������������������������������������������������������������������������������������������b$=�����������������������������������������������������������������������������A�B���C�D���E���F�G�H�I�J�K���L�M�N���O�P�Q���R�S�Tb0>�U�V�W�X�Y�Z�a�����b�c�d�e���f�g���h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z��������������������������������������������������������b<?��������������������������������������������������������������������������������������������������������������������������������bH@�������������������������������������������������������������������������������������������������������������������������������AbTA���B�C�D�E�F�G�������H���I�����J�K�L�M�N���O�P�Q�R�S�T�U���V�W�X�Y�Z�a�b�c�d�e�f�����g�h�i�j�k�l�����m�n���o�p�q���r�s�t�u�v�w�xb`B�3�4�5�6�7�8�9;<=(>4?@@LAXBdC\blC�����y�z������������������������������������������������������������������������������������������������������������������������b�C��������������������������������������������������������������������������������������������������������������������������������b�D���������������������������������������������������������������������������A�B�C�����D�����������E���F�������G�H���I�J�K���L�M�Nb�E�O�P�Q�R�����S�������T�U�V�W�X�Y�����Z�a���b�c�d���e�f�g�h�i�j�k���l�m�n�o���p�q�r�s�t�u�v�w�x�y�z������������������������������b�F��������������������������������������������������������������������������������������������������������������������������������b�G��������������������������������������������������������������������������������������������������������������������������������b�H�������������������������������������������������������������A�B�C�D�E�F�G�H�I�J���K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�gbJ�h�i�j�k�l�m�n�o�p�q�r�s���t�u�v���w�x�y���z������������������������������������������������������������������������������������bK��������������������������������������������������������������������������������������������������������������������������������bL�����������������������������������������������������������������������������������������������A�B�C�D�E�����F�G�H�I�J�K���L�M�Nb(M�O�P�Q�R�����S�T�U���V�W�X�Y�Z�a�����b�c���d�e�f�������g�h�i�j�k�����l���m�����n�o�p���q���r�s�t���u�v�w���x�y�z����������������b4N��������������������������������������������������������������������������������������������������������������������������������b@O��������������������������������������������������������������������������������������������������������������������������������bLP�����������������������������������������������������������������������������A���B���C���D�E���F�����G�H���I�J�K���L�M�N�O�P�Q�RbXQ�����S�������T�U�V�W�X�Y���Z�a�b���c�d�e���f�g�h�i�j�k�l�m�n�o�p�����q�r�s�t�u�v���w�x�y���z������������������������������������bdR��������������������������������������������������������������������������������������������������������������������������������bpS��������������������������������������������������������������������������������������������������������������������������������b|T�����������A�B�C�D�E�F�G�H�I�J�K�����L�M���N�O�P���Q�R�S�T�U�V�W�����X���Y���Z�a�b�c�d�e���f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�xb�U���y�z��������������������������������������������������������������������������������������������������������������������������b�V��������������������������������������������������������������������������������������������������������������������������������b�W�������������������������������������������������������������A�B�C�D�E�F�����G���������H�I�J�K�L�����M�N���O�P�Q���R�S�T�U�V�W�Xb�X�����Y�������Z�a�b�c�d�������e�f���g�h�i���j�k�l�m�n�o�p�����q�������r�s�t�u�v�w�x�y�z������������������������������������������b�Y��������������������������������������������������������������������������������������������������������������������������������b�Z��������������������������������������������������������������������������������������������������������������������������������b�[�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�����Q�R���S�T�U���V�W�X�Y�Z�a�b�c�d�e�f�g���h�i�j�k�l�m���n�o�p�q�r�s�t���u�v�w�x�y�z����������b�\��������������������������������������������������������������������������������������������������������������������������������b�]��������������������������������������������������������������������������������������������������������������������������������b�^�������A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q���R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r���s�t�u���v�w�x���y�z����������b`��������������������������������������������������������������������������������������������������������������������������������ba��������������������������������������������������������������������������������������������������������������������������������bb���������������������������������������������������������������A���B�C�D�E�F�G�H�����I�������J�K�L�M�N�O�����P�Q���R�S�T�U�V�W�Xb$c�Y�Z�a�b�c�d�e���f���g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z��������������������������������������������������������������������b0d��������������������������������������������������������������������������������������������������������������������������������b<e��������������������������������������������������������������������������������������������������������������������������������bHf�����������A�B�C�D�E�F�G�H���I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h���i�j�k�l�m�n�o���p�q�r���s�t�u���v�w�x�y�z����bTg��������������������������������������������������������������������������������������������������������������������������������b`h��������������������������������������������������������������������������������������������������������������������������������bli�����������������������������������������������������A�B���C�D�E���F�G�H�I�J�K�L�����M���N���O�P�Q�R�S�T�����U�V���W�X�Y���Z�a�bbxj�c�d�e�f�����g���h�����i�j�����k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z������������������������������������������������������������������b�k��������������������������������������������������������������������������������������������������������������������������������b�l��������������������������������������������������������������������������������������������������������������������������������b�m���������������A�����B���C�����D�E�F�G�������H�I���J�K�L���M�N�O�P�Q�R�S�����T�������U�V�W�X�Y�Z�����a�b���c�d�e���f�g�h�i�j�k�lb�n�m�n�o�������p���q�r�s�t���u�v�w�x�y�z������������������������������������������������������������������������������������������b�o��������������������������������������������������������������������������������������������������������������������������������b�p���������������������������������������������������������������������������������A���B���C�D�E�F�G�H�I�J�������K���L�M���������Nb�q�O�P�Q�R�����S���T���U�V�W���X�����Y�Z�a���b�c�d���e�f�g�h�i�j�k�l���m���n�o�p�q�r�s�t�u���v�w�x�y�z����������������������������b�r��������������������������������������������������������������������������������������������������������������������������������b�s��������������������������������������������������������������������������������������������������������������������������������b�t�������A�B�C�D�E�����F�������G���H���I�J�����������K�L�����������M�N�O�P�����Q���R���S�T�U���V�W�����X�Y���Z�a�b���c�d�e�f�g�h�ib�u�����j�������k�l�m���n�o�����p�q���r�s�t�u�v�w�x�y�z����������������������������������������������������������������������������bw��������������������������������������������������������������������������������������������������������������������������������bx�����������������������������������������������������������������������������������������������������������������������������A�Bb y�C�D�E�F�����G���H���I�J�K�L�M�N���O�P�Q���R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f���g�h�i�j�k�l�m���n�o�p�q�r�s�t�u�v�w�x�y�z������������b,z��������������������������������������������������������������������������������������������������������������������������������b8{��������������������������������������������������������������������������������������������������������������������������������bD|�������������������������������������A�B�����C�D���E�F�G���H�I�J�K�L�M�N�O�P�Q�R�S���T�U�V�W�X�Y���Z�a�b���c�d�e���f�g�h�i�j�k�lbP}���m�n���o���p�q�r�s�t�u�����v�w���x�y�z����������������������������������������������������������������������������������������b\~��������������������������������������������������������������������������������������������������������������������������������bh�����������������������������������������������������������������������������������������������������������������A�B�C�D�E�F�G�Hbt��I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�����Y�Z���a�b�����c�d�e�f�g�h�i���j�k�������l�m�n�o�p�q���r�s�t�u�v�w�x�y�z��������������������b����������������������������������������������������������������������������������������������������������������������������������b����������������������������������������������������������������������������������������������������������������������������������b���������A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q���R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r���s�t�u�v�w�x�y�z��������������b����������������������������������������������������������������������������������������������������������������������������������b���D�E�F�G�H�IKL M,N8ODPPQ\RhStT�U�V�W�X�Y�Z�[�\�]�^�_abc(d4e@fLgXhdipj|k�l�m�n�o�p�q�r�s�t�uwxy$z0{<|H}T~`l�x�����������b����������������������������������������������������������������������������������������������������������������������������������bȇ�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q���R�S�T�U�V�W���X�Y�Z���a�b�c���d�e�f�g�h�i�j�����k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z������������bԈ��������������������������������������������������������������������������������������������������������������������������������b���������������������������������������������������������������������������������������������������������������������������������b������������������������������������������������������������������������������������������������������A�B�C�D���E�����F�G���H�I�Jb�����K�L�M�N�O�P�Q�����R�������S�T�U�V�W�X�����Y�Z���a�b�c���d�e�f�g�h�i�j�����k�������l�m�n�o�p�q���r�s�t���u�v�w���x�y�z��������b���������������������������������������������������������������������������������������������������������������������������������b���������������������������������������������������������������������������������������������������������������������������������b��������������������������������������������������������������������������A�B�C�D�����E���F���G���H�����I���J�K�L�M�N�O�P�Q�R�S�Tb(��U�V�W�X�Y�Z�a�b���c�d�e�f�g�h�i�����j�k���l�m�n���o�p�q�r�s�t�u���v�w�x�y���z��������������������������������������������������b4���������������������������������������������������������������������������������������������������������������������������������b@���������������������������������������������������������������������������������������������������������������������������������bL����������������������������������A�B�C�������D�E���F�G�H���I�J�K�L�M�N�O�����P�Q�����R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�mbX��n�o�p�q�r���s�t�u�v�w�x�y�z����������������������������������������������������������������������������������������������������bd���������������������������������������������������������������������������������������������������������������������������������bp��������������������������������������������������������A���B�C�����D���E�F�G�H�I�����J�K�L���M�N�O�P�Q�R�����S�T���U�V�W�X�Y�Z�ab|��b�c�d�e�f�g�h�i���j�k�l�m�n�o�p���q�r�s�t�u�v�w�x�y�z��������������������������������������������������������������������������b����������������������������������������������������������������������������������������������������������������������������������b���������������������������������������������������������������������������������������A�B�C�D�E�F�G�H�I�J�K�L�M�N���O�P�Q���R�S�Tb���U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z����������������������������������������������������������������b����������������������������������������������������������������������������������������������������������������������������������b����������������������������������������������������������������������������������������������������������������������������������bĝ���������������������������������������������A�����B�C�D���E�F�G���H�I�J�K�L�M�N�O���P�Q�R�S�T�U�V�W�X�Y�����Z�a�����b���������cbО�d�e�f�g���������������h���i���j�����k�l���m�n�o���p�q�r�s�t�u�v�����w���x���y�z������������������������������������������������bܟ��������������������������������������������������������������������������������������������������������������������������������b���������������������������������������������������������������������������������������������������������������������������������b����������������������������������������������������������������������������������A���B�C�D�E�F�G�����H�I���J�K�L�������M�N�O�P�Qb������R���S���T�U�V�W�X�Y�����Z�a���b�c�d���e�f�g�h�i�j�k�����l�m�����n�o�p�q�r�s�����t�u���v�w�x���y�z��������������������������b���������������������������������������������������������������������������������������������������������������������������������b���������������������������������������������������������������������������������������������������������������������������������b$������������������������������������������������������������������������������������������������������������������A�B�C�D�����E��b0������F�G�H�I�J�K�����L�M���N���O���P�Q�R�S�T�U�V���W�X�Y�Z���a�b�c�d�e�f���g�h�i���j�k�l���m�n�o�p�q�r�s�t�u�v�w�x�y�z����������b<���������������������������������������������������������������������������������������������������������������������������������bH���������������������������������������������������������������������������������������������������������������������������������bT����������������������������������������������������������������������������A�B�C���D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�����W�Xb`��Y�Z�a�b���c�d�e���f�g�h���i�j�k�l�m�n�o�����p���q���r�s�t�u�v�w�����x�y���z����������������������������������������������������bl����������������������������������A���B�C�D�E�F�G���H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z���a�b�c�d�e�f�g���h�i�j�k�l�m�n�o�p�q�rbx��s�t�u�v�w�x�y�z�����������������������������������������������������������������������������������A�B�C���D�E�F�G�H�I�J���K�L�Mb���N�O�P�Q�R�S�T�U�����V�W���X�Y�Z���a�b�c�d�e�f�g�����h���i���j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z����������������������������������b��������������������������������������������¡¢����£¤��¥¦�A�B§�C¨�D©�E�Fª�G�H�I�J«¬�K­®¯�L�M�N�O�P�Q°±�R�S²�T�U�Vb��³�W�X�Y�Z�a�b�c´µ�d¶·¸�e�f�g�h�i�j¹�k�l�mº�n�o�p�q�r�s�t�u�v�w�x�y�z������»��������������������������������������������b�����������������A�B�C�D�E¼½�F�G¾�H�I�J¿�K�L�M�N�O�P�Q���R�������S�T�U�V�W�X���Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r���s�tb���u�v�w�x���y�z�������������������������������������������������������������������A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�����U�Vb�����W�X�Y���Z�a�b�c�d�e�f�����g���h���i���j�k�l�m�����n�o�p�q�r�s���t�u�v�w�x�y�z������������������������������������������������b̴�����������������������A�B�C�D�E���F�G�H���I�J�K���L�M�N�O�P�Q�R�����S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�vbص�w���x�y�z���������������������������������������������������������������������������������A�B�C�D�E�F�G�H�I�J�K�����L�M�N�O�P�Qb��R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s���t�u�v�w�x�y�z��������������������������������������������������������b������������A�B�C�D�E�F�G�H�I�J�K�L�M�N�O���P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d���e�f���g���h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z������b����������������������������������������������������������������������������A�B����C�D��E��F��G�H�I�J�K�L�M���N�áâã�Ob��P�Q�R�Säå�T�Uæ�V�W�Xç�Y�Z�a�b�c�d�eèé�fêëì�g�h�i�j�k�lí�m�n�oî�pï�qð�r�s�t�u�v�w�xñ�y�z����ò��������������������b������������������������������������������A�B�C�Dóô�E�Fõ�G�H�Iö�J�K�L�M�N�O�P÷ø�Qùúû�R�S�T�U�V�Wüý�X�Yþ�Z�a�bÿ�c�d�eb ��f�g�h�i���j���k���l�m�n�o�p�q���r�s�t���u�v�w�x�y�z�����������������������������������������������������������������������A�Bb,��C���D�E�F�G�H�I�����J�K���L�M�N���O�P�Q�R�S�T�U�����V���W���X�Y�Z�a�b�c���d�e�f���g�h�i���j�k�l�m�n�o�p�q�r�s�t�u���v�w�x�y�z��b8��������������������������������������������������������������������A�B�C���D�E�F�G�H�I�J�����K���L���M�N�O�P�Q�R���S�T�U�V�W�X�YbD��Z�a�b�c�d�e�f�g���h�i�j�k�l�m�n�o�p�q�r�����s�t���u�v�w���x�y�z����������������������������������������������������������������bP��������������A�B�C�D�E�F���G�H�I���J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f���g�h�i���j�k�l���m�n�o�p�q�r�s�����t���u���v�wb\��x�y�z�����������������������������������������������������������������������������A�B�C�D���E��F��G�H�I�J�K�L�M�N�O�Pbh��Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�nġĢ�o�pģ�q�rĤĥĦ�s�t�u�v�w�xħĨ�yĩ�zĪ������������īĬ����ĭ������Į������bt���������įİ��ı��IJ������������ijĴ����ĵ������Ķ���A�B�C�D�E�Fķĸ�GĹĺĻ�H�I�J�K�L�MļĽ�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�eb���fľ�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z����������������������������Ŀ����������������������������������������������������b�������A�B���C�D�E���F�G�H�I�J�K�L�����M���N���O�P�Q�R�S�T���U�V�W���X�Y�Z���a�b�c�d�e�f�g�����h�������i�j�k�l�m�n���o�p�q�r�s�t�ub���v�w�x�y�z���������������������������������������������������������������������������������A�B�C�����D�E���F�G�H���I�J�K�L�M�N�Ob�����P�Q�R�S���T�U�V�W�X�Y���Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s���t�u�v�w�x�y���z��������������������������������������������b���������������������������A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�����U�V���W�X�Y���Z�a�b�c�d�e�f�����g���h���i�j�k�l�m�n��o�p�qb��̈؉������ �,�8�D�P�\�h�t�������������Ȟԟ�������(�4�@�L�X�d�p�|�����������Ĵеܶ�����$�0�<�H�T�`�l�x�������������b����r�s�t��u�v�w�x�y�z��������������������������������������������������������������������A�B�C�D�E�F���G�H��I�J�K��L�M�Nb���O�P�Q�RšŢ�Sţ�TŤ�U�V�W�X�Y�Zť�a�b�cŦ�d�e�fŧ�g�h�i�j�k�l�mŨ�n�o�p�q�r�s�t�u�v�w�xũŪ�y�zū������Ŭ��������������ŭŮ����b����ů���������������������������������������A�B�C�D�E�F�G�H�I�J�K�L�M�N�OŰű�P�QŲ�R�S�Tų�U�V�W�X�Y�Z�aŴŵ�bŶ�cŷ�d�e�f�g�h�ib��ŸŹ�j�kź�l�m�nŻż�o�p�q�r�s�tŽž�uſ���v�w�x�y�z��������������������������������������������������������������������������b�������������A�B�C�D�E�F�G�H���I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�����q�r���s�t�u���v���w�x�y�z��b����������������������������������������������������������������������������������������������A�B�C�D�E�F�G�H�I�J�K�L�M�N���O�P�Qb��R�S�T�U���V�W�X���Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�����v�w���x�y�z������������������������������������������������b����������������������������������A�B�C�D�E�F�G�H���I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i���j�k�l���m�n�o�p�q�r�sb(��t�u�v�w�x�y�z�����������������������������������������������������������������������A�B���C�D��E�F�G��H�I�J�K�L�M�N���O�b4��P��Q�R�S�T�U�V��W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o��p�q�r�s�t�u�vơ�w�x�y�z����������������������������������������������b@�Ƣƣ����Ƥ������ƥ���������A�B�CƦƧ�D�E�Fƨ�G�H�I�J�K�LƩ�M�N�Oƪ�P�Q�Rƫ�S�T�U�V�W�X�YƬ�Z�a�b�cƭ�d�e�f�g�h�iƮƯ�j�kư�l�mƱbL�Ʋ�nƳ�o�p�q�r�sƴƵ�tƶ�u�v�w�x�y�z����Ʒ������Ƹ������ƹ��������������ƺƻ��������������������Ƽƽ����ƾ������ƿ�����A�B�C�D�EbX����F���G���H�I�J�K�L�M�������N���O�P�Q���R���S�T�U�V�W�����X�������Y�Z�a���b�c�����d�e���f�g�h���i�j�k�l�m�n�o�����p�������q�rbd��s�t�u�v�����w�x�y�z�����������������������������������������������������������������A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�����S�Tbp����U�V�W���X�Y�Z�a�b�c�d�����e�������f�g�h�i�j�k�����l�m���n�o�p���q�r�s�t�u�v�w�����x���y���z����������������������������������b|������������������������������������������������A���B�C�D�E�F�G�H�I��J��K�L�M�N�O�P�Q�R���S�T��U�V�W��X�Y�Z�a�b�c�d���e�b���f��g�h�i�j�k�lǡ�m�n�o�p�q�r�s�t�u�v�w�x�y�z������������Ǣ�����������������������������������������������������A�B�C�D�E�F�G�Hb��ǣ�I�J�KǤ�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�g�hǥ�i�j�kǦ�l�m�nǧ�o�p�q�r�s�t�u�vǨ�wǩ�x�y�z����������Ǫǫ����Ǭ����ǭb��Ǯ��ǯ����������ǰDZ��Dz��dz������������Ǵ�������������������A�B�C�D�E�F�G�H�I�J�Kǵ�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�a�b�c�d�e�f�gb���h�i�j�k�l�m�n�o�p�q�r�sǶ�t�u�vǷ�w�x�yǸ�z������������ǹ����Ǻ����������������ǻ������Ǽ������ǽ��������������Ǿ����ǿ����A�Bb���C�D�E�F��G�H�I���J�K�L���M�N�O�P�Q�R�S�����T���U�V�W�X�Y�Z�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z����������������b���������������������������������������������������������������������������A���B�C�����D���E���F�G�H�I�J�K�����L�M���N�O�P���Q�R�Sb���T�U�V�W�����X�������Y�Z�a�b�c�d���e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x���y�z������������������������������������������������b�����������������������A�B���C�D�E���F���G�H�I�J�K�����L���M���N�O�P�Q�R�S�����T�U���V�W�X���Y�Z�a�b�c�d�e�����f���g���h�i�j�k�l�mb������n�o��p�q�r��s�t�u�v�w�x�y���z���‚ƒ„…†�‡ˆ‰�Š‹ŒȡŽ‘’“”Ȣ•–—˜™š›œžȣȤŸ ȥ�A�B�Cb��Ȧ�D�E�F�Gȧ�H�IȨȩ�JȪ�Kȫ�L�M�NȬ�O�PȭȮ�Q�Rȯ�S�T�UȰ�V�W�X�Y�Z�a�b�c�d�eȱ�fȲ�g�h�i�j�k�lȳȴ�m�nȵ�o�p�q�r�s�t�u�v�w�x�yb��zÁÂȶÃȷÄÅÆÇÈÉȸȹÊËȺÌÍÎȻÏÐÑÒÓÔÕÖȼ×ȽØȾÙÚÛÜÝÞȿßà�A��B�C�D��E�F�G�H�I�J�K�L���M���N�O�P�Qb��R�S�T�U�����V�W���X�Y�Z���a�b�c�d���e�f���g�h���i���j�k�l�m�n�o���p�q�r���s�t�u���v�w�x�y�zāĂ��㥹Ć��ćĈĉĊċČ����čĎb���ďĐđ��ĒēĔĕĖėĘęĚěĜĝ��ĞğĠ�A�B�C�����D�E���F�G�H���I�J�K�L�M�N�O�����P���Q���R�S�T�U�V�W�����X�Y���Z�a�b���c�d�eb$��f�g�h�i���j�k���l���m�n�o�p�q�r�����s�t���u���������v�w�x�y�zŁ����ł��Ń��ńŅņ��Ňň��ʼnŊŋ��ŌōŎ��ŏŐőŒœŔŕ���Ŗŗb0�Ř�řŚśŜŝŞ��şŠ��A�B�C��D�E�F�G�H�I�J���K��L��M�N�O�P�Q�R	��<����������� �,�8�D�P�\�h�t��������������������������(�4�������\��<��DT\�	h4)T?�R�d�r�C����`�����ȫЫȌh�갂갃갅갆갋갌갍갎갏갘갞갟갡갢갣갥갦갧갨갩갪갫갮갲갳갴갵갶갷갺갻갽갾갿걁걂걃걄걅걆걇걈걉걊걌걎걏걐걑걒걓걕걖걗걙걚걛걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯걲걳걵걶걹걻걼걽걾걿겂겇겈겍겎겏겑겒겓겕겖겗겘겙겚겛겞겢겣겤겥겦겧겫겭겮겱겲겳겴겵겶겷겺겾겿곀곂곃곅곆곇곉곊곋곍곎곏곐곑곒곓곔곖곘곙곚곛곜곝곞곟곢곣곥곦곩곫곭곮곲곴곷곸곹곺곻곾곿괁괂괃괅괇괈괉괊괋괎괐괒괓’��괔괕괖괗괙괚괛괝괞괟괡괢괣괤괥괦괧괨괪괫괮괯괰괱괲괳괶괷괹괺괻괽괾괿굀굁굂굃굆굈굊굋굌굍굎굏굑굒굓굕굖굗굙굚굛굜굝굞굟굠굢굤굥굦굧굨굩굪굫굮굯굱굲굷굸굹굺굾궀궃궄궅궆궇궊궋궍궎궏궑궒궓궔궕궖궗궘궙궚궛궞궟궠궡궢궣궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궸궹궺궻궼궽궾궿귂귃귅귆귇귉귊귋귌귍귎귏귒귔귕귖귗귘귙귚귛귝귞귟귡귢귣귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷’��귺귻귽귾긂긃긄긅긆긇긊긌긎긏긐긑긒긓긕긖긗긘긙긚긛긜긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯긲긳긵긶긹긻긼긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗깘깙깚깛깞깢깣깤깦깧깪깫깭깮깯깱깲깳깴깵깶깷깺깾깿꺀꺁꺂꺃꺆꺇꺈꺉꺊꺋꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺿껁껂껃껅껆껇껈껉껊껋껎껒껓껔껕껖껗껚껛껝껞껟껠껡껢껣껤껥’��껦껧껩껪껬껮껯껰껱껲껳껵껶껷껹껺껻껽껾껿꼀꼁꼂꼃꼄꼅꼆꼉꼊꼋꼌꼎꼏꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣꼤꼥꼦꼧꼨꼩꼪꼫꼮꼯꼱꼳꼵꼶꼷꼸꼹꼺꼻꼾꽀꽄꽅꽆꽇꽊꽋꽌꽍꽎꽏꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽞꽟꽠꽡꽢꽣꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽺꽻꽼꽽꽾꽿꾁꾂꾃꾅꾆꾇꾉꾊꾋꾌꾍꾎꾏꾒꾓꾔꾖꾗꾘꾙꾚꾛꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾺꾻꾽꾾’d�꾿꿁꿂꿃꿄꿅꿆꿊꿌꿏꿐꿑꿒꿓꿕꿖꿗꿘꿙꿚꿛꿝꿞꿟꿠꿡꿢꿣꿤꿥꿦꿧꿪꿫꿬꿭꿮꿯꿲꿳꿵꿶꿷꿹꿺꿻꿼꿽꿾꿿뀂뀃뀅뀆뀇뀈뀉뀊뀋뀍뀎뀏뀑뀒뀓뀕뀖뀗뀘뀙뀚뀛뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끾끿낁낂낃낅낆낇낈낉낊낋낎낐낒낓낔낕낖낗낛낝낞낣낤’8�낥낦낧낪낰낲낶낷낹낺낻낽낾낿냀냁냂냃냆냊냋냌냍냎냏냒냓냕냖냗냙냚냛냜냝냞냟냡냢냣냤냦냧냨냩냪냫냬냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇넊넍넎넏넑넔넕넖넗넚넞넟넠넡넢넦넧넩넪넫넭넮넯넰넱넲넳넶넺넻넼넽넾넿녂녃녅녆녇녉녊녋녌녍녎녏녒녓녖녗녙녚녛녝녞녟녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷녺녻녽녾녿놁놃놄놅놆놇놊놌놎놏놐놑놕놖놗놙놚놛놝’�놞놟놠놡놢놣놤놥놦놧놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇍뇎뇏뇑뇒뇓뇕뇖뇗뇘뇙뇚뇛뇞뇠뇡뇢뇣뇤뇥뇦뇧뇪뇫뇭뇮뇯뇱뇲뇳뇴뇵뇶뇷뇸뇺뇼뇾뇿눀눁눂눃눆눇눉눊눍눎눏눐눑눒눓눖눘눚눛눜눝눞눟눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눵눶눷눸눹눺눻눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉙뉚뉛뉝뉞뉟뉡뉢뉣뉤뉥뉦뉧뉪뉫뉬뉭뉮’�뉯뉰뉱뉲뉳뉶뉷뉸뉹뉺뉻뉽뉾뉿늀늁늂늃늆늇늈늊늋늌늍늎늏늒늓늕늖늗늛늜늝늞늟늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇닊닋닍닎닏닑닓닔닕닖닗닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉댊댋댌댍댎댏댒댖댗댘댙댚댛댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓덗덙덚덝덠덡덢덣’�덦덨덪덬덭덯덲덳덵덶덷덹덺덻덼덽덾덿뎂뎆뎇뎈뎉뎊뎋뎍뎎뎏뎑뎒뎓뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎢뎣뎤뎥뎦뎧뎩뎪뎫뎭뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됑됒됓됔됕됖됗됙됚됛됝됞됟됡됢됣됤됥됦됧됪됬됭됮됯됰됱됲됳됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄’�둅둆둇둈둉둊둋둌둍둎둏둒둓둕둖둗둙둚둛둜둝둞둟둢둤둦둧둨둩둪둫둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒁뒂뒃뒄뒅뒆뒇뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒞뒟뒠뒡뒢뒣뒥뒦뒧뒩뒪뒫뒭뒮뒯뒰뒱뒲뒳뒴뒶뒸뒺뒻뒼뒽뒾뒿듁듂듃듅듆듇듉듊듋듌듍듎듏듑듒듓듔듖듗듘듙듚듛듞듟듡듢듥듧듨듩듪듫듮듰듲듳듴듵듶듷듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓딖딗딙딚딝’\딞딟딠딡딢딣딦딫딬딭딮딯딲딳딵딶딷딹딺딻딼딽딾딿땂땆땇땈땉땊땎땏땑땒땓땕땖땗땘땙땚땛땞땢땣땤땥땦땧땨땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떢떣떥떦떧떩떬떭떮떯떲떶떷떸떹떺떾떿뗁뗂뗃뗅뗆뗇뗈뗉뗊뗋뗎뗒뗓뗔뗕뗖뗗뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿’0	똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏똒똓똕똖똗똙똚똛똜똝똞똟똠똡똢똣똤똦똧똨똩똪똫똭똮똯똰똱똲똳똵똶똷똸똹똺똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙥뙦뙧뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚞뚟뚡뚢뚣뚥뚦뚧뚨뚩뚪뚭뚮뚯뚰뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂’뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛱뛲뛳뛵뛶뛷뛹뛺뛻뛼뛽뛾뛿뜂뜃뜄뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜪뜫뜭뜮뜱뜲뜳뜴뜵뜶뜷뜺뜼뜽뜾뜿띀띁띂띃띅띆띇띉띊띋띍띎띏띐띑띒띓띖띗띘띙띚띛띜띝띞띟띡띢띣띥띦띧띩띪띫띬띭띮띯띲띴띶띷띸띹띺띻띾띿랁랂랃랅랆랇랈랉랊랋랎랓랔랕랚랛랝랞’�랟랡랢랣랤랥랦랧랪랮랯랰랱랲랳랶랷랹랺랻랼랽랾랿럀럁럂럃럄럅럆럈럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟럠럡럢럣럤럥럦럧럨럩럪럫럮럯럱럲럳럵럶럷럸럹럺럻럾렂렃렄렅렆렊렋렍렎렏렑렒렓렔렕렖렗렚렜렞렟렠렡렢렣렦렧렩렪렫렭렮렯렰렱렲렳렶렺렻렼렽렾렿롁롂롃롅롆롇롈롉롊롋롌롍롎롏롐롒롔롕롖롗롘롙롚롛롞롟롡롢롣롥롦롧롨롩롪롫롮롰롲롳롴롵롶롷롹롺롻롽롾롿뢀뢁뢂뢃뢄’�뢅뢆뢇뢈뢉뢊뢋뢌뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟뢠뢡뢢뢣뢤뢥뢦뢧뢩뢪뢫뢬뢭뢮뢯뢱뢲뢳뢵뢶뢷뢹뢺뢻뢼뢽뢾뢿룂룄룆룇룈룉룊룋룍룎룏룑룒룓룕룖룗룘룙룚룛룜룞룠룢룣룤룥룦룧룪룫룭룮룯룱룲룳룴룵룶룷룺룼룾룿뤀뤁뤂뤃뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤙뤚뤛뤜뤝뤞뤟뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤾뤿륁륂륃륅륆륇륈륉륊륋륍륎륐륒륓륔륕륖륗’�륚륛륝륞륟륡륢륣륤륥륦륧륪륬륮륯륰륱륲륳륶륷륹륺륻륽륾륿릀릁릂릃릆릈릋릌릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟릠릡릢릣릤릥릦릧릨릩릪릫릮릯릱릲릳릵릶릷릸릹릺릻릾맀맂맃맄맅맆맇맊맋맍맓맔맕맖맗맚맜맟맠맢맦맧맩맪맫맭맮맯맰맱맲맳맶맻맼맽맾맿먂먃먄먅먆먇먉먊먋먌먍먎먏먐먑먒먓먔먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷먺먻먽먾먿멁멃멄멅멆’T멇멊멌멏멐멑멒멖멗멙멚멛멝멞멟멠멡멢멣멦멪멫멬멭멮멯멲멳멵멶멷멹멺멻멼멽멾멿몀몁몂몆몈몉몊몋몍몎몏몐몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧몪몭몮몯몱몳몴몵몶몷몺몼몾몿뫀뫁뫂뫃뫅뫆뫇뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫽뫾뫿묁묂묃묅묆묇묈묉묊묋묌묎묐묒묓묔묕묖묗묙묚묛묝묞묟묡묢묣묤묥묦묧’(묨묪묬묭묮묯묰묱묲묳묷묹묺묿뭀뭁뭂뭃뭆뭈뭊뭋뭌뭎뭑뭒뭓뭕뭖뭗뭙뭚뭛뭜뭝뭞뭟뭠뭢뭤뭥뭦뭧뭨뭩뭪뭫뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮉뮊뮋뮍뮎뮏뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮥뮦뮧뮩뮪뮫뮭뮮뮯뮰뮱뮲뮳뮵뮶뮸뮹뮺뮻뮼뮽뮾뮿믁믂믃믅믆믇믉믊믋믌믍믎믏믑믒믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷믺믻믽믾밁’�밃밄밅밆밇밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵밶밷밹밺밻밼밽밾밿뱂뱆뱇뱈뱊뱋뱎뱏뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃벆벇벉벊벍벏벐벑벒벓벖벘벛벜벝벞벟벢벣벥벦벩벪벫벬벭벮벯벲벶벷벸벹벺벻벾벿볁볂볃볅볆볇볈볉볊볋볌볎볒볓볔볖볗볙볚볛볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳볷볹볺볻볽’�볾볿봀봁봂봃봆봈봊봋봌봍봎봏봑봒봓봕봖봗봘봙봚봛봜봝봞봟봠봡봢봣봥봦봧봨봩봪봫봭봮봯봰봱봲봳봴봵봶봷봸봹봺봻봼봽봾봿뵁뵂뵃뵄뵅뵆뵇뵊뵋뵍뵎뵏뵑뵒뵓뵔뵕뵖뵗뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵥뵦뵧뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿붂붃붅붆붋붌붍붎붏붒붔붖붗붘붛붝붞붟붠붡붢붣붥붦붧붨붩붪붫붬붭붮붯붱붲붳붴붵붶붷붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑’�"뷒뷓뷖뷗뷙뷚뷛뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷪뷫뷬뷭뷮뷯뷱뷲뷳뷵뷶뷷뷹뷺뷻뷼뷽뷾뷿븁븂븄븆븇븈븉븊븋븎븏븑븒븓븕븖븗븘븙븚븛븞븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃빆빇빉빊빋빍빏빐빑빒빓빖빘빜빝빞빟빢빣빥빦빧빩빫빬빭빮빯빲빶빷빸빹빺빾빿뺁뺂뺃뺅뺆뺇뺈뺉뺊뺋뺎뺒뺓뺔뺕뺖뺗뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷’x%뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻒뻓뻕뻖뻙뻚뻛뻜뻝뻞뻟뻡뻢뻦뻧뻨뻩뻪뻫뻭뻮뻯뻰뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼂뼃뼄뼅뼆뼇뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼚뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽂뽃뽅뽆뽇뽉뽊뽋뽌뽍뽎뽏뽒뽓뽔뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂’L(뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾱뾲뾳뾴뾵뾶뾷뾸뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿆뿇뿈뿉뿊뿋뿎뿏뿑뿒뿓뿕뿖뿗뿘뿙뿚뿛뿝뿞뿠뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀽쀾쀿’ +쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁒쁓쁔쁕쁖쁗쁙쁚쁛쁝쁞쁟쁡쁢쁣쁤쁥쁦쁧쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삒삓삕삖삗삙삚삛삜삝삞삟삢삤삦삧삨삩삪삫삮삱삲삷삸삹삺삻삾샂샃샄샆샇샊샋샍샎샏샑샒샓샔샕샖샗샚샞샟샠샡샢샣샦샧샩샪샫샭샮샯샰샱샲샳샶샸샺샻샼샽샾샿섁섂섃섅섆섇섉섊섋섌섍섎섏섑섒섓섔섖섗섘섙섚섛섡섢섥섨섩섪섫섮’�-섲섳섴섵섷섺섻섽섾섿셁셂셃셄셅셆셇셊셎셏셐셑셒셓셖셗셙셚셛셝셞셟셠셡셢셣셦셪셫셬셭셮셯셱셲셳셵셶셷셹셺셻셼셽셾셿솀솁솂솃솄솆솇솈솉솊솋솏솑솒솓솕솗솘솙솚솛솞솠솢솣솤솦솧솪솫솭솮솯솱솲솳솴솵솶솷솸솹솺솻솼솾솿쇀쇁쇂쇃쇅쇆쇇쇉쇊쇋쇍쇎쇏쇐쇑쇒쇓쇕쇖쇙쇚쇛쇜쇝쇞쇟쇡쇢쇣쇥쇦쇧쇩쇪쇫쇬쇭쇮쇯쇲쇴쇵쇶쇷쇸쇹쇺쇻쇾쇿숁숂숃숅숆숇숈숉숊숋숎숐숒숓숔숕숖숗숚숛숝숞숡숢숣’�0숤숥숦숧숪숬숮숰숳숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅쉆쉇쉉쉊쉋쉌쉍쉎쉏쉒쉓쉕쉖쉗쉙쉚쉛쉜쉝쉞쉟쉡쉢쉣쉤쉦쉧쉨쉩쉪쉫쉮쉯쉱쉲쉳쉵쉶쉷쉸쉹쉺쉻쉾슀슂슃슄슅슆슇슊슋슌슍슎슏슑슒슓슔슕슖슗슙슚슜슞슟슠슡슢슣슦슧슩슪슫슮슯슰슱슲슳슶슸슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛싞싟싡싢싥싦싧싨싩싪싮싰싲싳싴싵싷싺싽싾싿쌁쌂쌃쌄쌅쌆쌇쌊쌋쌎쌏’�3쌐쌑쌒쌖쌗쌙쌚쌛쌝쌞쌟쌠쌡쌢쌣쌦쌧쌪쌫쌬쌭쌮쌯쌰쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썆썇썈썉썊썋썌썍썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧썪썫썭썮썯썱썳썴썵썶썷썺썻썾썿쎀쎁쎂쎃쎅쎆쎇쎉쎊쎋쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏚’p6쏛쏝쏞쏡쏣쏤쏥쏦쏧쏪쏫쏬쏮쏯쏰쏱쏲쏳쏶쏷쏹쏺쏻쏼쏽쏾쏿쐀쐁쐂쐃쐄쐅쐆쐇쐉쐊쐋쐌쐍쐎쐏쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚쐛쐜쐝쐞쐟쐠쐡쐢쐣쐥쐦쐧쐨쐩쐪쐫쐭쐮쐯쐱쐲쐳쐵쐶쐷쐸쐹쐺쐻쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑦쑧쑩쑪쑫쑭쑮쑯쑰쑱쑲쑳쑶쑷쑸쑺쑻쑼쑽쑾쑿쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒕쒖쒗쒘쒙쒚쒛쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩’D9쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒹쒺쒻쒽쒾쒿쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟쓠쓡쓢쓣쓤쓥쓦쓧쓨쓪쓫쓬쓭쓮쓯쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂씃씄씅씆씇씈씉씊씋씍씎씏씑씒씓씕씖씗씘씙씚씛씝씞씟씠씡씢씣씤씥씦씧씪씫씭씮씯씱씲씳씴씵씶씷씺씼씾씿앀앁앂앃앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩앪앫앬앭앮앯앲앶앷앸앹앺앻앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔’<얖얙얚얛얝얞얟얡얢얣얤얥얦얧얨얪얫얬얭얮얯얰얱얲얳얶얷얺얿엀엁엂엃엋엍엏엒엓엕엖엗엙엚엛엜엝엞엟엢엤엦엧엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑옒옓옔옕옖옗옚옝옞옟옠옡옢옣옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉왊왋왌왍왎왏왒왖왗왘왙왚왛왞왟왡왢왣왤왥왦왧왨왩왪왫왭왮왰왲왳왴왵왶왷왺왻왽왾왿욁욂욃욄욅욆욇욊욌욎욏욐욑욒욓욖욗욙욚욛욝욞욟욠욡욢욣욦’�>욨욪욫욬욭욮욯욲욳욵욶욷욻욼욽욾욿웂웄웆웇웈웉웊웋웎웏웑웒웓웕웖웗웘웙웚웛웞웟웢웣웤웥웦웧웪웫웭웮웯웱웲웳웴웵웶웷웺웻웼웾웿윀윁윂윃윆윇윉윊윋윍윎윏윐윑윒윓윖윘윚윛윜윝윞윟윢윣윥윦윧윩윪윫윬윭윮윯윲윴윶윸윹윺윻윾윿읁읂읃읅읆읇읈읉읋읎읐읙읚읛읝읞읟읡읢읣읤읥읦읧읩읪읬읭읮읯읰읱읲읳읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛잜잝잞잟잢잧잨잩잪잫잮잯잱잲잳잵잶잷’�A잸잹잺잻잾쟂쟃쟄쟅쟆쟇쟊쟋쟍쟏쟑쟒쟓쟔쟕쟖쟗쟙쟚쟛쟜쟞쟟쟠쟡쟢쟣쟥쟦쟧쟩쟪쟫쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺쟻쟼쟽쟾쟿젂젃젅젆젇젉젋젌젍젎젏젒젔젗젘젙젚젛젞젟젡젢젣젥젦젧젨젩젪젫젮젰젲젳젴젵젶젷젹젺젻젽젾젿졁졂졃졄졅졆졇졊졋졎졏졐졑졒졓졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯졲졳졵졶졷졹졻졼졽졾졿좂좄좈좉좊좎좏좐좑좒좓좕좖좗좘좙좚좛좜좞좠좢좣좤’�D좥좦좧좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좾좿죀죁죂죃죅죆죇죉죊죋죍죎죏죐죑죒죓죖죘죚죛죜죝죞죟죢죣죥죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죶죷죸죹죺죻죾죿줁줂줃줇줈줉줊줋줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬’hG줐줒줓줔줕줖줗줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫줭줮줯줰줱줲줳줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇쥈쥉쥊쥋쥌쥍쥎쥏쥒쥓쥕쥖쥗쥙쥚쥛쥜쥝쥞쥟쥢쥤쥥쥦쥧쥨쥩쥪쥫쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®	��<J쥱쥲쥳쥵쥶쥷쥸쥹쥺쥻쥽쥾쥿즀즁즂즃즄즅즆즇즊즋즍즎즏즑즒즓즔즕즖즗즚즜즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿짂짃짅짆짉짋짌짍짎짏짒짔짗짘짛!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄’�L짞짟짡짣짥짦짨짩짪짫짮짲짳짴짵짶짷짺짻짽짾짿쨁쨂쨃쨄쨅쨆쨇쨊쨎쨏쨐쨑쨒쨓쨕쨖쨗쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥쨦쨧쨨쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ’�O쩇쩈쩉쩊쩋쩎쩏쩑쩒쩓쩕쩖쩗쩘쩙쩚쩛쩞쩢쩣쩤쩥쩦쩧쩩쩪쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩾쩿쪀쪁쪂쪃쪅쪆쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ	ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωB�`R쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪾쪿쫁쫂쫃쫅쫆쫇쫈쫉쫊쫋쫎쫐쫒쫔쫕쫖쫗쫚쫛쫜쫝쫞쫟쫡쫢쫣쫤쫥쫦쫧쫨쫩쫪쫫쫭쫮쫯쫰쫱쫲쫳쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊	��T쬋쬌쬍쬎쬏쬑쬒쬓쬕쬖쬗쬙쬚쬛쬜쬝쬞쬟쬢쬣쬤쬥쬦쬧쬨쬩쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭂쭃쭄쭅쭆쭇쭊쭋쭍쭎쭏쭑쭒쭓쭔쭕쭖쭗쭚쭛쭜쭞쭟쭠쭡쭢쭣쭥쭦쭧쭨쭩쭪쭫쭬㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆	•@W쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮝쮞쮟쮠쮡쮢쮣쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄ÆÐªĦ	IJĿŁØŒºÞŦŊ㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞���Y쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟쯠쯡쯢쯣쯥쯦쯨쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찎찏찑찒찓찕찖찗찘찙찚찛찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄’�\찥찦찪찫찭찯찱찲찳찴찵찶찷찺찿챀챁챂챃챆챇챉챊챋챍챎챏챐챑챒챓챖챚챛챜챝챞챟챡챢챣챥챧챩챪챫챬챭챮챯챱챲챳챴챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん	B�|_첔첕첖첗첚첛첝첞첟첡첢첣첤첥첦첧첪첮첯첰첱첲첳첶첷첹첺첻첽첾첿쳀쳁쳂쳃쳆쳈쳊쳋쳌쳍쳎쳏쳑쳒쳓쳕쳖쳗쳘쳙쳚쳛쳜쳝쳞쳟쳠쳡쳢쳣쳥쳦쳧쳨쳩쳪쳫쳭쳮쳯쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	�(b쳾쳿촀촂촃촄촅촆촇촊촋촍촎촏촑촒촓촔촕촖촗촚촜촞촟촠촡촢촣촥촦촧촩촪촫촭촮촯촰촱촲촳촴촵촶촷촸촺촻촼촽촾촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛쵝쵞쵟АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюя˜�d쵡쵢쵣쵥쵦쵧쵨쵩쵪쵫쵮쵰쵲쵳쵴쵵쵶쵷쵹쵺쵻쵼쵽쵾쵿춀춁춂춃춄춅춆춇춉춊춋춌춍춎춏춐춑춒춓춖춗춙춚춛춝춞춟춠춡춢춣춦춨춪춫춬춭춮춯춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췅	��Hg췆췇췈췉췊췋췍췎췏췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡췢췣췤췥췦췧췩췪췫췭췮췯췱췲췳췴췵췶췷췺췼췾췿츀츁츂츃츅츆츇츉츊츋츍츎츏츐츑츒츓츕츖츗츘츚츛츜츝츞츟츢츣츥츦츧츩츪츫	���h츬츭츮츯츲츴츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉칊칋칌칍칎칏칐칑칒칓칔칕칖칗칚칛칝칞칢칣칤칥칦칧칪칬칮칯칰칱칲칳칶칷칹칺칻칽칾칿캀캁캂캃캆캈캊캋캌캍캎캏캒캓캕캖캗캙	��j캚캛캜캝캞캟캢캦캧캨캩캪캫캮캯캰캱캲캳캴캵캶캷캸캹캺캻캼캽캾캿컀컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕컖컗컘컙컚컛컜컝컞컟컠컡컢컣컦컧컩컪컭컮컯컰컱컲컳컶컺컻컼컽컾컿가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆’hk켂켃켅켆켇켉켊켋켌켍켎켏켒켔켖켗켘켙켚켛켝켞켟켡켢켣켥켦켧켨켩켪켫켮켲켳켴켵켶켷켹켺켻켼켽켾켿콀콁콂콃콄콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓콖콗콙콚콛콝콞콟콠콡콢콣콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸’<n콭콮콯콲콳콵콶콷콹콺콻콼콽콾콿쾁쾂쾃쾄쾆쾇쾈쾉쾊쾋쾍쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾢쾣쾤쾥쾦쾧쾩쾪쾫쾬쾭쾮쾯쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿅쿆쿇쿈쿉쿊쿋깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙’q쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿢쿣쿥쿦쿧쿩쿪쿫쿬쿭쿮쿯쿲쿴쿶쿷쿸쿹쿺쿻쿽쿾쿿퀁퀂퀃퀅퀆퀇퀈퀉퀊퀋퀌퀍퀎퀏퀐퀒퀓퀔퀕퀖퀗퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝’�s퀮퀯퀰퀱퀲퀳퀶퀷퀹퀺퀻퀽퀾퀿큀큁큂큃큆큈큊큋큌큍큎큏큑큒큓큕큖큗큙큚큛큜큝큞큟큡큢큣큤큥큦큧큨큩큪큫큮큯큱큲큳큵큶큷큸큹큺큻큾큿킀킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥’�v킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣킦킧킩킪킫킭킮킯킰킱킲킳킶킸킺킻킼킽킾킿탂탃탅탆탇탊탋탌탍탎탏탒탖탗탘탙탚탛탞탟탡탢탣탥탦탧탨탩탪탫탮탲탳탴탵탶탷탹탺탻탼탽탾탿턀턁턂턃턄덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸’�y턅턆턇턈턉턊턋턌턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯턲턳턵턶턷턹턻턼턽턾턿텂텆텇텈텉텊텋텎텏텑텒텓텕텖텗텘텙텚텛텞텠텢텣텤텥텦텧텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗’`|텮텯텰텱텲텳텴텵텶텷텸텹텺텻텽텾텿톀톁톂톃톅톆톇톉톊톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟톢톣톥톦톧톩톪톫톬톭톮톯톲톴톶톷톸톹톻톽톾톿퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩’4퇐퇑퇒퇓퇔퇕퇖퇗퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪퇫퇬퇭퇮퇯퇰퇱퇲퇳퇵퇶퇷퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆툈툊툋툌툍툎툏툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼’�툪툫툮툯툱툲툳툵툶툷툸툹툺툻툾퉀퉂퉃퉄퉅퉆퉇퉉퉊퉋퉌퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉝퉞퉟퉠퉡퉢퉣퉥퉦퉧퉨퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗’܄튍튎튏튒튓튔튖튗튘튙튚튛튝튞튟튡튢튣튥튦튧튨튩튪튫튭튮튯튰튲튳튴튵튶튷튺튻튽튾틁틃틄틅틆틇틊틌틍틎틏틐틑틒틓틕틖틗틙틚틛틝틞틟틠틡틢틣틦틧틨틩틪틫틬틭틮틯틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤’��틻틼틽틾틿팂팄팆팇팈팉팊팋팏팑팒팓팕팗팘팙팚팛팞팢팣팤팦팧팪팫팭팮팯팱팲팳팴팵팶팷팺팾팿퍀퍁퍂퍃퍆퍇퍈퍉퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤’��퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍾퍿펁펂펃펅펆펇펈펉펊펋펎펒펓펔펕펖펗펚펛펝펞펟펡펢펣펤펥펦펧펪펬펮펯펰펱펲펳펵펶펷펹펺펻펽펾펿폀폁폂폃폆폇폊폋폌폍폎폏폑폒폓폔폕폖샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭’X�폗폙폚폛폜폝폞폟폠폢폤폥폦폧폨폩폪폫폮폯폱폲폳폵폶폷폸폹폺폻폾퐀퐂퐃퐄퐅퐆퐇퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖퐗퐘퐙퐚퐛퐜퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰’,�퐸퐹퐺퐻퐼퐽퐾퐿푁푂푃푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓푔푕푖푗푘푙푚푛푝푞푟푡푢푣푥푦푧푨푩푪푫푬푮푰푱푲푳푴푵푶푷푺푻푽푾풁풃풄풅풆풇풊풌풎풏풐풑풒풓풕풖풗풘풙풚풛풜풝쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎’�풞풟풠풡풢풣풤풥풦풧풨풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓍퓎퓏퓑퓒퓓퓕퓖퓗퓘퓙퓚퓛퓝퓞퓠퓡퓢퓣퓤퓥퓦퓧퓩퓪퓫퓭퓮퓯퓱퓲퓳퓴퓵퓶퓷퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨’ԕ퓾퓿픀픁픂픃픅픆픇픉픊픋픍픎픏픐픑픒픓픖픘픙픚픛픜픝픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷픸픹픺픻픾픿핁핂핃핅핆핇핈핉핊핋핎핐핒핓핔핕핖핗핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊’��핤핦핧핪핬핮핯핰핱핲핳핶핷핹핺핻핽핾핿햀햁햂햃햆햊햋햌햍햎햏햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤햦햧햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓’|�헊헋헍헎헏헑헓헔헕헖헗헚헜헞헟헠헡헢헣헦헧헩헪헫헭헮헯헰헱헲헳헶헸헺헻헼헽헾헿혂혃혅혆혇혉혊혋혌혍혎혏혒혖혗혘혙혚혛혝혞혟혡혢혣혥혦혧혨혩혪혫혬혮혯혰혱혲혳혴혵혶혷혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻’P�혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝홞홟홠홡홢홣홤홥홦홨홪홫홬홭홮홯홲홳홵홶홷홸홹홺홻홼홽홾홿횀횁횂횄횆횇횈횉횊횋횎횏횑횒횓횕횖횗횘횙횚횛횜횞횠횢횣횤횥횦횧횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층’$�횫횭횮횯횱횲횳횴횵횶횷횸횺횼횽횾횿훀훁훂훃훆훇훉훊훋훍훎훏훐훒훓훕훖훘훚훛훜훝훞훟훡훢훣훥훦훧훩훪훫훬훭훮훯훱훲훳훴훶훷훸훹훺훻훾훿휁휂휃휅휆휇휈휉휊휋휌휍휎휏휐휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼’��휕휖휗휚휛휝휞휟휡휢휣휤휥휦휧휪휬휮휯휰휱휲휳휶휷휹휺휻휽휾휿흀흁흂흃흅흆흈흊흋흌흍흎흏흒흓흕흚흛흜흝흞흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵흶흷흸흹흺흻흾흿힀힂힃힄힅힆힇힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜’̦힍힎힏힑힒힓힔힕힖힗힚힜힞힟힠힡힢힣	퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁B���	퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠�p�	혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝���›	伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕���	匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢��	瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械���	棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜� �	科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾���	區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴�0�	鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣���	朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉�@�	納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶�Ⱥ	丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃�P�	棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅�ؽ	蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣�`�	煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼��	遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬�p�	立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅���	蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文���	汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑��	發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖���	碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦��	孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥���	脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索�(�	傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署���	胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬�8�	聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁���	戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧�H�	嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁���	沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額�X�	櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬���	旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒�h�	簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳���	烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療�x�	窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓��	運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜���	濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼��	議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄���	立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長� �	障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱���	煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖�0�	靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫���	踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只�@�	咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯���	鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策�P�	責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢���	椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃�`�	贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託���	鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑�p�	阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃���	品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航���	行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型��	形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵���	禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆��	爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰�������\�0�����T(	���xL ���"p%D(+�-�0�3h6<9<�>�A�D`G4J�L�OXR�T8W�Y�\t_ b�d@g�hj`k4nq�s�v�yX|,�Ԅ��|�P�$���̕��t�H���Ħ��h��x���������(���8���H�нX��h���x������� ���0���@���P���`���p�����������(���8���H���X���h���x������� ���(���	

��	
��	��	
������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

������	��	

��	
����	

��������	

��	

��	

��	

 !"#$%&'()*+,-./0123456789��	




















































��	

��	
����	

��	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./01234567888888888��	

��	

��	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	
��	��	

��	
��	������	
��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

������	����	

��	

 ��	

 ��	

��	

��	

��	
��	
����	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	
����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	��	
��	

��	
��	
����	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	
��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	

��	

��	
��	
��	
��	����	

��	
��	��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	
��	
����	

��	��	

��	

��	

��	

��	

��	

��	����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	
��	

��	
��	
��	
��	

��	

��	
��	

��	

��	
��	
����	
����	
����	����	

��	
��	

��	
����	

����	

��	

��	

��	

��	

��	

������	

��	

��	

��	����	��	
����	
����	
��	

��	��	
��	

��	

 ��	

 ��	

��	����	

��	

��	

��	
��	
��	

����	

��	
��	
����������	

��	����	

��	

��	

��	

��	

����	��	

��	

����	

��	
��	
��	

��	
��	
��	

��������	
������������������������	
��	
����	
����	

 !"#$%&'()*+,-./0123456789:;<��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

����	

��	

��	
��	
��	

��	

��	
��	

��	

��	
��	

��	

��	

��	

��	

��	��	

��	

��	
��	

��	

��	

��	��	
��	
��	

��	

��	

��	

��	
����������	
��	

��	

��	
��	

��	

����	

����	

��	

��	

����	

��	

����	

��	

��	��	
��	

��	
��	

��	

��	��	
��	

��	��	
��	

��	
��	
��	������	������	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	��	������	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	
��	
��	��	

��	
��	
����	

����	
������	

��	

��	

��	
��	

��	��	
��	
��	

��	

��	

��	
��	

��	

����	
��	
��	

��	
��	

����	

��	

����	
����	

��	

��	

����	

��	

����	
��	��	
��	��	

����	

��	

��	

��	

��	

��	

��	

��	
��	

 ��	

                                 ����	�����	


��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHHHHHHHHHHHHHHHHHHHHHHH��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDE��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEEEEEEEEEEEEEEEEEEEEEEEEEE��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPPPPPPPPPPPPPPP��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTTTTTTTTTT��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWWWWWWW��	

 !"""""""""""""""#$%&'()*+,-./0123456789:;<=>?@ABC"""""""""""""���	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[��	

 !"#$%%%%%%%%%%%%%%%%%%%%%%%%%%%%A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_____`abcdefghi_______jklmnopqrstuvwxyz{|}~��________������������������������______A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZY[\]^_`abYcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������A�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvvvvvvvvvvvvvvvwxyz{|}~������������������������vvvvvvvvvvvvvA�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUA�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqA�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_A��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~J; �`��<�`��d�a��|zRx�$x`��0FJw�?:*3$"D�`�� \Ha��<HoGNU� ��#��$�����������������2�������P������x����
lЪ#ت#���o`��
���#0��(	���o���o����o�on���o��#0@GA$3a1yGA$3p11130lGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignkorean.so-3.4.4-3.el8.x86_64.debug��>X�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N�$������Ph�!h�մBM���W�9~�jf�1�iݽFZ33�qa��3�``�>"=��!��Sj����Ҏ�/�����1_��O��'�mSP*�&��~{ӡ���n�����!���>�"��`Hl��V8Ln�WT��+�o��?����v�,+����P;*�!�i����~qɣ>aPLa`(��T�f��G?���},LB�u�!��7�z*9&�/~Y���Y�1宠��6'�i�ޔF][�]L4N+^��
I�58ɛ`�kjh��W���3�SKd�InFV�;�;��zZ3�H}qp��nsu��lWCj��!~�c��(��23oI�%�x���Ǎ�q9�����Յ锖��v�;�,A	�^�pJ3#�i�e"E1H����n�L�mj��t)ZcI�����m~��`�C ��'=�l8�E�[d�]����(,x����Hm7����B�Æ:����&�Ń��^���G�:	8��N%�}��,�c�b��*b�8��X	azhG1��.���!-�g��S�kY�S�CE�zG�ߓ&
���W_�W��>Oί�``�ѫZ�����SX_�4~��D�N�*�~�:�@u�b�Z��F�m�x��O���HhQ�eU3��?��D$C׈-�W:��@3<2:��C	��Tts3�w& z��0�A�J��N<��F
̘��G�‚��1#��D:��;h��/{���J)8�A����+�$�Q���!rs���ŵ6��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T��(^B��0hc  0nPP wpp�}ll
���� �d�d�$�����t��� �Ъ#Ъ�ت#ت��#�� ���#�� ���#��H��#���c���(�@H�"PK*J[]G̟h�h�lib64/ruby/enc/trans/emoji.sonuȯ��ELF>p
@h�@8	@ЧЧ ее е 
8
 ���� ��   888$$������  S�td������  P�td���$$Q�tdR�tdее е 
0
GNU��E�������fr|_�`1�Q BE���|�qX
� ` , F"�� �� �� U0�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_emojirb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�е  ص �
� � � �� �� @j(�  �� ��� ��� @jȶ  @� �H� �X� @jh�  � �� ��� @j�  �� ��� ��� @j��   � �(� �8� @jH�  �� �ȹ �ع @j�  `� �h� �x� @j��  � �� �� @j(�  �� ��� ��� @jȻ  @� �H� �X� @jh�  � �� ��� @j�  ȿ п ؿ � �� �� ��H��H�ɵ H��t��H����5�� �%�� ��h�������h���������%]� D���%U� DH�=�� H��� H9�tH�>� H��t	�����H�=Y� H�5R� H)�H��H��H��?H�H�tH�
� H��t��fD�����=� u+UH�=� H��tH�=ު �Y����d����� ]������w������H��H�=�� ����H�=�� ����H�=I� ��H�=�� ���H�=� ����H�=E� ����H�=�� ����H�=� ���H�=A� ���H�=�� ���H�=� ���H�==� H�������H��H���UTF-8UTF8-SoftBankUTF8-KDDIUTF8-DoCoMoBd�0	�H	
L	L	t����@D��� ( [PP�P (HX`h�p��	��	��	X	�'Q)\�	����P�� (4X`h�<☀☁�l☔⛄⚡	♈♉♊♋♌♍♎♏♐♑♒♓⚾⛳⚽Ⓜ✈⛽���☕✂↗��	☎♥♠♦♣✌↘↖♿⛵↙✒0�	✉↩mQn�o�prQs�t�uwQx�y❤⤴♨r8	⤵	❢⁉‼〰✏⌚©™㊙♻®⚠↔↕��		-�	|�0	�	�	�	�	 (
X`h�
	o@
	Ѽ��
	��	<	~�	�
	�
	D	2�l	��		@	S	�	�	�	�	H	2
�	[
	�
�	Ѽ�
�	!�	c`�
x�
�
d�8��@����X��	�`	)�	kD�<��� (XX`h�	�
<	��(�	q�	�x	�H	7�	y`	��	��	?�	�'��	�$	X	�`	Gl 	�'�<!	��!	��
�!	O�"	��#��p@�X����PXd 4!�!�!�"�#�$��$	�%	�%	W&�%�%�&��& (%�&X`h��&	❇✴♿�'	⚠❢⛔⛄⚡☀❄⭐☔☁⛅♈♉♊♋♌♍♎♏♐♑♒♓✏���⚓✈⛵⚽⚾♨�4'	�㊙☝☺�'	✂✉Qn�o�prQs�t�uwQx◀▶▫▪ℹ◽◾◻◼⚪⚫✳⬆h�'⬇	⬜⬛↖↘™✖➡⬅↗↙✔©®↪↩⛽;⌚⌛�P(	   ❤☎☕⛳♠♦♣✌�y⛪��(	⛲⛺���Q^�`7�(	���㊗♥⭕�)	у�<)	☑✒��ј�Q���⤴⤵⁉‼P)	♻↔↕��)	m��)	⛲⛺���Q^�`���㊗♥�)	⭕M�)	у��ј�Q���⤴⤵⁉‼�*	♻↔�D*↕	m`*	❇✴♿⚠❢⛔⛄⚡☀❄⭐☔☁⛅♈♉♊♋♌♍♎♏♐♑♒♓✏���U|*	⚓✈⛵⚽⚾♨��+	㊙☝☺✂✉Qn�o�,+,'�'�'H(�(�()4)H)�)�)�)�)*<*X*t*�*$+T+�\+�prQs�t�uwQx	◀▶▫▪ℹ◽◾◻◼⚪⚫✳⬆⬇⬜⬛↖↘™✖➡⬅↗↙✔©®↪↩�+	⛽;⌚⌛   ❤☎☕⛳♠♦]`,♣	✌�y☑✒⛪��,X,�,�,��, (�+�,X`h��,	� -	#�-	e4.	��.	�/	+�/	m�/	�t0	��0	3412	uT1�-,.�./�/�/l0�0,1L1�1��1 (�1X`h��1��1	;�2	}H3	�D4	�4	C�5�6�7		P7	KX8	��8�2@3<4�4�5�57H7P8�8p9�x9 (�9X`h��9	☎☝✌⛳⚾⚽⛵✈❢❤⛪⛽��9	☕⛄☁☀☔ (:	⛲⛺♨〽���⚡S P:	���� |:	✴✳♿♥♦♠♣m���Qn�o�prQs�t�uwQx�y���⬆⬇➡⬅↗↖↘↙▶◀♈� �:♉♊♋♌♍♎♏♐♑♒♓	©®⚠!$;	㊗✂㊙⭐⭕[!p;�!�		☺�!�;!"�		�;у��ј�Q^�`Q���™c"�; :H:t:�:;h;�;�;�;�;�;�< (4<X`h�<<�"l<	�"�<)#�<	k#�<	�#�<�#�<	1$=s$,=	�$@=�$�		9%\={%�=�%�=Ѽ	�%>	A&8>	�&t>	�&�>'�>I'@=	�'�>�<�<�<�<=$=8=L=T=�=�=>0>l>�>�>�>�>�>�'�>	(D?	Q(\?T?l?�(t?�(@=)@=	Y)�?	�)�?�)@=	*�?a*@=	�*@	�*d@	'+�@	2i+ A	�+pA	�+�A	/,B	q,�B	�,�B�,C	7-0C	y-HC	�-�C�-D�?�?�?�?�?@@\@�@AhA�AB|B�BC(C@C�CD$D?.,D �D�.�D|< <?�?(�D`h�.�D�"�D�/�D)#Ek#(E�#@E�#pE�/�Es$�E.0�Ep0�E�0F{%4F�0�F61�Fx1�F�1<G	�1hG'�G>2�G�'�GE E8EhE�E�E�E�E�E,F�F�F�F4G`G�G�G�G�G�'�G�2@=Q(HH@HXH�(`H�(xH)�H�2�H	3�H	F3�H�3(I	�3@I4�I	N4�J�4�K	�4L	5�L	V5�M�5�N	�5xO�,4P	6HPt^6lP	�6LQ�-�Q�H�H�H�H�? I8I�I�J�KL�L�M�NpO,P@PdPDQ�Q�Q?.�Q 4R�.<R�D 8HpH(HR`h�.PR�"�R�6@=)#@=	k#�R	$7�Rf7@=	�7�Rs$S.0(S�7DS	�0`S	{%�S�%�S��61T	,8LT	n8�T	�8�T'�T>2�T�'U�R�R�R�R�RS S<SXS�S�STDT�T�T�T�TU$U�',U	(�UQ(�U�U�U�(�U�(�U�2�U	�8V	494V	�3tV	v9�V	�9�V	�9�W	<:8X	~:�X	�:<Y�'	;Z	D;�Z	�;P[�;�[	
<�[Q)	L<\	�<�\�-@]�U�?�U,V�?lV�V�V�W0X�X4YZ�ZH[�[�[\�\8]L]?.T] �]�.�]�R �U�U(�]`h�.�]����������	

 !"#$%&'()*+,-./0123456789:;<=>��	

 !"#$%&!!!!!!'!()!!!*!!!!!!+!!!!!��	

 !"#$%&'()*+,-.��	




 !"#$%&'()*+
,-./0123
4
56789��	

�������	��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&��	

 !"#$%&��	

 !"#$%&'()*��	

��	

��	

��	

#⃣1⃣2⃣3⃣4⃣5⃣6⃣7⃣8⃣9⃣0⃣��	

����	

��	

 !"#$%&'()*+,-./0123456��	

 !"""#��	

 !""#��	



��	

 !"#$%&'()*+��	

��	





��	

��	

��	


����	

��	

��	

��		

��	
��	

 !"#$%&'()*+,-,./01234��	

 !"#$%&'()*)+,-��	

 !"#$%%%��	

��	




��	

��	

 !"#$%&'''���			
��	

��	



 !"#$%&'()*+,-./01234
56789:;��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-.-.---.//01��			

��	

 !"#$%&'()��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./0123456789:;*<***��	

 !"#$%&'()��	


��	
















































��	

 !"#$%&'()*+,-./0123456789:;<=>?��	

 !"#$%&'()*+,-./0.............111��	

��	
��	

 !"#$%&'()*+,-./01232456789��	

 !"#$%&'()*+,-./01234356789��	

 !"#$%&'()*+,-./01234555��	








��	

��	

 !"#$%&'()*+,---����	

 ��🇯🇵��	

��	

🇺🇸��	

��🇪🇸🇷🇺����🇫🇷��	
🇩🇪🇮🇹🇺🇰🇨🇳🇰🇷������	
����	
������	

����			��	

 !"#$%&��	

����	


 !!!!!!!!!!!!"#
$%%&
'
()*+,-��	
	
��		
		
																								 !��	

��	

 !��	

��	

����	
















 !
"



#
$
����	
��	
��	

 !"############$%&'(()*+,-./012��	

��	

 !"#$%&''()*+ ,-./0123456  789:;<��	

��	

 !"#$%&'()*+,-./0123456789:��	









��	

 !"#$%&'(()*+,-./01234/56789:;<=>��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?��	

��	

 ! "#$%&'()*+,-./01234��	

��������	

 !��	

����������	

����������	��������������	

������	
������������	

����������������������	


��	


��	


��	

��	

��	

��	







��	



��	




������		




��	

����	

���	


����������	����	
��	

������������	
������	

 !��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./012��	

��	

 !"#$%&#'()*��	

  !"#$#$%&'()*+,-./01234567��	


 !"#$%&'()*+,-./01**2345678��	

 !"##$%&'()*+,,*,-./01,23,4567,,,��	

  !"##$#%&'()*+,����	


 !!!!!"#$%&'()*+,-./012345!��	

������������	

��	����	��	

��	


��	


 !"""#$



��	

 !"#$%&'$()��	


��	


 !"#��	

 !"#$%&'()*+,-./0123��	

 !"##$%&'()*))((+,-.//0��	


��	

��	

����	

	 !!!!!	
	"#$%%%&'(!��	

;$c��@@c��h d���zRx�$�b��0FJw�?:*3$"D�b�� \�c���H�GNU� �
� ���]@j�< ����R@j�< ����D@j�< ���d<@j�< ����9@j�< ����1@j�< ���-@j�< ���'@j�< ���4@j�< ���8
@j�< ���d@j�< ����@j�< �w�����	
�е ص ���o`��
��� 0�	�(	���o���o����o�ol���o3�� 0
@
GA$3a1�	�GA$3p11130�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignemoji.so-3.4.4-3.el8.x86_64.debug�]�7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N�$ �$�����Ph�!h�մBM���W�9�jz�*�Lج��+3ps���X+��Ab�H ,]Ru�����A>ʨ���]S|�����'�R�����z1Ƣg���#�[tr����ٸtC���z�S�X�\����{OF���J�0T�U�=	w.~�ǭg� ?X�R
6�)�{==|%��Մ�a�T�h����OT�[?��oǨ5*�j��q�i,�t}t��'��`x�(s<.}a��
�;��o�
H��{��ʥ��q��h3�$Q��h��R>Y�8 �3J��͞�I�)Ϭ��&���'H�7���NӢ_`YA��k�}a�6xb��Jž�~���H��/4�a���uZ���z���鴺�v�w����0�O���B���G���(=��,O"/guS��8�,O(BiR�AJ�Π�����'�q��b{}"'���.nî�Է�Px�4�)Q���
&����N
���}�a�_����]��/*�<��	���#|��u<!a8_�iA���yvDa.��	y��kf���=렎�a����fe&���۬�c<�ŀ��O�F!�4 ���“������@p��b�B(�ΌF|2�t^g.2Km�QV4�S��}��&��c~^��y�i�����wa����)��p��o��,�n�]H�����8Jr��>�J���t��,	��W`��0�"}Jq��k�Y׻J[k�FA�<�N��[c���wA��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ollE���o�� T��(^B�	�	0h�	�	c 
 
0nP
P
 wp
p
\}��
���0� ���$�8�8�t����� �е е�ص ص�� �� ��� �� ��� ��H�� ���`���(�<D�"PK*J[f��&p�p�lib64/ruby/enc/trans/chinese.sonuȯ��ELF>p@p�@8	@���� ����"��"8 ����"��"  888$$x�x�x�  S�tdx�x�x�  P�tdܻܻܻ$$Q�tdR�td����"��"0GNU�(c�A�%�0?��0^�uU�@�	BE���|�qX
x b , F"��"��"��"U0<__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_chineserb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	���" ��"���"��"�"��"��"�(�"���"���"���"���"�@�"�H�"�X�"�h�"���"���"���"��"���"��"��"��"��"��"��H��H���"H��t��H����5��"�%��"��h�������h���������%]�"D���%U�"DH�=��"H���"H9�tH�>�"H��t	�����H�=Y�"H�5R�"H)�H��H��H��?H�H�tH�
�"H��t��fD�����=�"u+UH�=��"H��tH�=��"�Y����d������"]������w������H��H�=��"����H�=��"����H�=I�"��H�=��"H�������H��H���UTF-8GB12345GB2312 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓	⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ`�!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん	�8ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	 �ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ	αβγδεζηθικλμνξοπρστυφχψω��АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюя��āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüê	ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ@�	─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋��		0啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥@薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖H场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮P怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二X贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹`埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖h弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件p健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻x 俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�!馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�#痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿%隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�&谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸(摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�)拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗+啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�,恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠.取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�/伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳$1省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�2恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔,4獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�5汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威47巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�8稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓<:小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�;选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶D=摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�>印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉L@浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�A铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政TC帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�D住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座	`\F亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�G佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼TI凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�J邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝\L堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�M荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺dO蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�P摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼lR唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�S帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺tU狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�V恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾|X洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑Z濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�[妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩]纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�^琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹`椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�a辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰c搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�d臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐 f怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�g睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪(i铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�j稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙0l瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�m颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒8o蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�p簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤@r酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�s觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋Hu鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�v|�0�����	(8�@�H�P�X�`�h�p �!x#�$�&(�)+�,.�/1�2$4�5,7�84:�;<=�>D@�ALC�DTF�GLI�JTL�M\O�PdR�SlU�VtX�Y|[]�^`�ac�df�g i�j(l�m0o�p8r�s@u�vHx�Px啊阿埃挨哎唉哀皚癌藹矮艾礙愛隘鞍氨安俺按暗岸胺案骯昂盎凹敖熬翱襖傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙壩霸罷爸白柏百擺佰敗拜稗斑班搬扳般頒板版扮拌伴瓣半辦絆邦幫梆榜膀綁棒磅蚌鎊傍謗苞胞包褒剥�y薄雹保堡飽寶抱報暴豹鮑爆杯碑悲卑北輩背貝鋇倍狽備憊焙被奔苯本笨崩綳甭泵蹦迸逼鼻比鄙筆彼碧蓖蔽畢斃毖幣庇痹閉敝弊必辟壁臂避陛鞭邊編貶扁便變卞辨辯辮遍標彪膘表鱉憋别癟彬斌瀕濱賓擯兵冰柄丙秉餅炳,{病并玻菠播撥鉢波博勃搏鉑箔伯帛舶脖膊渤泊駁捕卜哺補埠不布步簿部怖擦猜裁材才財睬踩采彩菜蔡餐參蠶殘慚慘燦蒼艙倉滄藏操糙槽曹草厠策側册測層蹭插叉茬茶查碴搽察岔差詫拆柴豺攙摻蟬饞讒纏鏟産闡顫昌猖�|場嘗常長償腸廠敞暢唱倡超抄鈔朝嘲潮巢吵炒車扯撤掣徹澈郴臣辰塵晨忱沉陳趁襯撑稱城橙成呈乘程懲澄誠承逞騁秤吃痴持匙池遲弛馳耻齒侈尺赤翅斥熾充衝蟲崇寵抽酬疇躊稠愁籌仇綢瞅醜臭初出橱厨躇鋤雛滁除楚4~礎儲矗搐觸處揣川穿椽傳船喘串瘡窗幢床闖創吹炊捶錘垂春椿醇唇淳純蠢戳綽疵茨磁雌辭慈瓷詞此刺賜次聰葱囱匆從叢凑粗醋簇促躥篡竄摧崔催脆瘁粹淬翠村存寸磋撮搓措挫錯搭達答瘩打大呆歹傣戴帶殆代貸袋待逮�怠耽擔丹單鄲撣膽旦氮但憚淡誕彈蛋當擋黨蕩檔刀搗蹈倒島禱導到稻悼道盗德得的蹬燈登等瞪凳鄧堤低滴迪敵笛狄滌翟嫡抵底地蒂第帝弟遞締顛掂滇碘點典靛墊電佃甸店惦奠澱殿碉叼雕凋刁掉吊釣調跌爹碟蝶迭諜疊<�丁盯叮釘頂鼎錠定訂丢東冬董懂動棟侗恫凍洞兜抖鬥陡豆逗痘都督毒犢獨讀堵睹賭杜鍍肚度渡妒端短鍛段斷緞堆兑隊對墩噸蹲敦頓囤鈍盾遁掇哆多奪垛躲朵跺舵剁惰墮蛾峨鵝俄額訛娥惡厄扼遏鄂餓恩而兒耳爾餌洱二��貳發罰筏伐乏閥法珐藩帆番翻樊礬釩繁凡煩反返範販犯飯泛坊芳方肪房防妨仿訪紡放菲非啡飛肥匪誹吠肺廢沸費芬酚吩氛分紛墳焚汾粉奮份忿憤糞豐封楓蜂峰鋒風瘋烽逢馮縫諷奉鳳佛否夫敷膚孵扶拂輻幅氟符伏俘服D�浮涪福袱弗甫撫輔俯釜斧脯腑府腐赴副覆賦復傅付阜父腹負富訃附婦縛咐噶嘎該改概鈣蓋溉幹甘杆柑竿肝趕感秆敢贛岡剛鋼缸肛綱崗港杠篙皋高膏羔糕搞鎬稿告哥歌擱戈鴿胳疙割革葛格蛤閣隔鉻個各給根跟耕更庚羹ȅ埂耿梗工攻功恭龔供躬公宫弓鞏汞拱貢共鈎勾溝苟狗垢構購够辜菇咕箍估沽孤姑鼓古蠱骨谷股故顧固雇刮瓜剮寡挂褂乖拐怪棺關官冠觀管館罐慣灌貫光廣逛瑰規圭硅歸龜閨軌鬼詭癸桂櫃跪貴劊輥滚棍鍋郭國果裹過哈L�骸孩海氦亥害駭酣憨邯韓含涵寒函喊罕翰撼捍旱憾悍焊汗漢夯杭航壕嚎豪毫郝好耗號浩呵喝荷菏核禾和何合盒貉閡河涸赫褐鶴賀嘿黑痕很狠恨哼亨横衡恒轟哄烘虹鴻洪宏弘紅喉侯猴吼厚候後呼乎忽瑚壺葫胡蝴狐糊湖Ј弧虎唬護互滬户花嘩華猾滑畫劃化話槐徊懷淮壞歡環桓還緩換患喚瘓豢煥渙宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍謊灰揮輝徽恢蛔回毁悔慧卉惠晦賄穢會燴匯諱誨繪葷昏婚魂渾混豁活伙火獲或惑霍貨禍擊圾基機畸稽積箕T�肌饑迹激譏鷄姬績緝吉極棘輯籍集及急疾汲即嫉級擠幾脊己薊技冀季伎祭劑悸濟寄寂計記既忌際妓繼紀嘉枷夾佳家加莢頰賈甲鉀假稼價架駕嫁殲監堅尖箋間煎兼肩艱奸緘繭檢柬碱鹼揀撿簡儉剪减薦檻鑒踐賤見鍵箭件؋健艦劍餞漸濺澗建僵姜將漿江疆蔣槳奬講匠醬降蕉椒礁焦膠交郊澆驕嬌嚼攪鉸矯僥脚狡角餃繳絞剿教酵轎較叫窖揭接皆秸街階截劫節桔杰捷睫竭潔結解姐戒藉芥界借介疥誡届巾筋斤金今津襟緊錦僅謹進靳晉禁近燼浸\�盡勁荆兢莖睛晶鯨京驚精粳經井警景頸靜境敬鏡徑痙靖竟競凈炯窘揪究糾玖韭久灸九酒厩救舊臼舅咎就疚鞠拘狙疽居駒菊局咀矩舉沮聚拒據巨具距踞鋸俱句懼炬劇捐鵑娟倦眷卷絹撅攫抉掘倔爵覺决訣絶均菌鈞軍君峻�俊竣浚郡駿喀咖卡咯開揩楷凱慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕顆科殻咳可渴克刻客課肯啃墾懇坑吭空恐孔控摳口扣寇枯哭窟苦酷庫褲誇垮挎跨胯塊筷儈快寬款匡筐狂框礦眶曠况虧盔巋窺葵奎魁傀d�饋愧潰坤昆捆困括擴廓闊垃拉喇蠟臘辣啦萊來賴藍婪欄攔籃闌蘭瀾讕攬覽懶纜爛濫琅榔狼廊郎朗浪撈勞牢老佬姥酪烙澇勒樂雷鐳蕾磊累儡壘擂肋類泪棱楞冷厘梨犁黎籬狸離灕理李裏鯉禮莉荔吏栗麗厲勵礫歷利傈例俐�痢立粒瀝隸力璃哩倆聯蓮連鐮廉憐漣簾斂臉鏈戀煉練糧凉梁粱良兩輛量晾亮諒撩聊僚療燎寥遼潦了撂鐐廖料列裂烈劣獵琳林磷霖臨鄰鱗淋凛賃吝拎玲菱零齡鈴伶羚凌靈陵嶺領另令溜琉榴硫餾留劉瘤流柳六龍聾嚨籠窿l�隆壟攏隴樓婁摟簍漏陋蘆盧顱廬爐擄滷虜魯麓碌露路賂鹿潞禄録陸戮驢吕鋁侣旅履屢縷慮氯律率濾緑巒攣孿灤卵亂掠略掄輪倫侖淪綸論蘿螺羅邏鑼籮騾裸落洛駱絡媽麻瑪碼螞馬駡嘛嗎埋買麥賣邁脉瞞饅蠻滿蔓曼慢漫�謾芒茫盲氓忙莽猫茅錨毛矛鉚卯茂冒帽貌貿麽玫枚梅酶霉煤没眉媒鎂每美昧寐妹媚門悶們萌蒙檬盟錳猛夢孟眯醚靡糜迷謎彌米秘覓泌蜜密幂棉眠綿冕免勉娩緬面苗描瞄藐秒渺廟妙蔑滅民抿皿敏憫閩明螟鳴銘名命謬摸t�摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌謀牟某拇牡畝姆母墓暮幕募慕木目睦牧穆拿哪呐鈉那娜納氖乃奶耐奈南男難囊撓腦惱鬧淖呢餒内嫩能妮霓倪泥尼擬你匿膩逆溺蔫拈年碾攆捻念娘釀鳥尿捏聶孽嚙鑷鎳涅您檸獰凝寧��擰濘牛扭鈕紐膿濃農弄奴努怒女暖虐瘧挪懦糯諾哦歐鷗毆藕嘔偶漚啪趴爬帕怕琶拍排牌徘湃派攀潘盤磐盼畔判叛乓龐旁耪胖抛咆刨炮袍跑泡呸胚培裴賠陪配佩沛噴盆砰抨烹澎彭蓬棚硼篷膨朋鵬捧碰坯砒霹批披劈琵毗|�啤脾疲皮匹痞僻屁譬篇偏片騙飄漂瓢票撇瞥拼頻貧品聘乒坪蘋萍平憑瓶評屏坡潑頗婆破魄迫粕剖撲鋪僕莆葡菩蒲埔樸圃普浦譜曝瀑期欺棲戚妻七凄漆柒沏其棋奇歧畦崎臍齊旗祈祁騎起豈乞企啓契砌器氣迄棄汽泣訖掐�恰洽牽扦釺鉛千遷簽仟謙乾黔錢鉗前潛遣淺譴塹嵌欠歉槍嗆腔羌墻薔强搶橇鍬敲悄橋瞧喬僑巧鞘撬翹峭俏竅切茄且怯竊欽侵親秦琴勤芹擒禽寢沁青輕氫傾卿清擎晴氰情頃請慶瓊窮秋丘邱球求囚酋泅趨區蛆曲軀屈驅渠��取娶齲趣去圈顴權醛泉全痊拳犬券勸缺炔瘸却鵲榷確雀裙群然燃冉染瓤壤攘嚷讓饒擾繞惹熱壬仁人忍韌任認刃妊紉扔仍日戎茸蓉榮融熔溶容絨冗揉柔肉茹蠕儒孺如辱乳汝入褥軟阮蕊瑞鋭閏潤若弱撒灑薩腮鰓塞賽三叁�傘散桑嗓喪搔騷掃嫂瑟色澀森僧莎砂殺刹沙紗傻啥煞篩曬珊苫杉山删煽衫閃陝擅贍膳善汕扇繕墒傷商賞晌上尚裳梢捎稍燒芍勺韶少哨邵紹奢賒蛇舌捨赦攝射懾涉社設砷申呻伸身深娠紳神沈審嬸甚腎慎滲聲生甥牲升繩��省盛剩勝聖師失獅施濕詩尸虱十石拾時什食蝕實識史矢使屎駛始式示士世柿事拭誓逝勢是嗜噬適仕侍釋飾氏市恃室視試收手首守壽授售受瘦獸蔬樞梳殊抒輸叔舒淑疏書贖孰熟薯暑曙署蜀黍鼠屬術述樹束戍竪墅庶數漱�恕刷耍摔衰甩帥栓拴霜雙爽誰水睡税吮瞬順舜説碩朔爍斯撕嘶思私司絲死肆寺嗣四伺似飼巳鬆聳慫頌送宋訟誦搜艘擻嗽蘇酥俗素速粟僳塑溯宿訴肅酸蒜算雖隋隨綏髓碎歲穗遂隧祟孫損笋蓑梭唆縮瑣索鎖所塌他它她塔��獺撻蹋踏胎苔抬臺泰酞太態汰坍攤貪癱灘壇檀痰潭譚談坦毯袒碳探嘆炭湯塘搪堂棠膛唐糖倘躺淌趟燙掏濤滔縧萄桃逃淘陶討套特藤騰疼謄梯剔踢銻提題蹄啼體替嚏惕涕剃屉天添填田甜恬舔腆挑條迢眺跳貼鐵帖廳聽烴�汀廷停亭庭挺艇通桐酮瞳同銅彤童桶捅筒統痛偷投頭透凸秃突圖徒途塗屠土吐兔湍團推頽腿蜕褪退吞屯臀拖托脱鴕陀馱駝橢妥拓唾挖哇蛙窪娃瓦襪歪外豌彎灣玩頑丸烷完碗挽晚皖惋宛婉萬腕汪王亡枉網往旺望忘妄威��巍微危韋違桅圍唯惟爲濰維葦萎委偉僞尾緯未蔚味畏胃喂魏位渭謂尉慰衛瘟温蚊文聞紋吻穩紊問嗡翁瓮撾蝸渦窩我斡卧握沃巫嗚鎢烏污誣屋無蕪梧吾吴毋武五捂午舞伍侮塢戊霧晤物勿務悟誤昔熙析西硒矽晰嘻吸錫犧 �稀息希悉膝夕惜熄烯溪汐犀檄襲席習媳喜銑洗系隙戲細瞎蝦匣霞轄暇峽俠狹下厦夏嚇掀鍁先仙鮮纖咸賢銜舷閑涎弦嫌顯險現獻縣腺餡羡憲陷限綫相厢鑲香箱襄湘鄉翔祥詳想響享項巷橡像向象蕭硝霄削哮囂銷消宵淆曉��小孝校肖嘯笑效楔些歇蝎鞋協挾携邪斜脅諧寫械卸蟹懈泄瀉謝屑薪芯鋅欣辛新忻心信釁星腥猩惺興刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅銹秀袖綉墟戌需虚嘘須徐許蓄酗叙旭序畜恤絮婿緒續軒喧宣懸旋玄(�選癬眩絢靴薛學穴雪血勛熏循旬詢尋馴巡殉汛訓訊遜迅壓押鴉鴨呀丫芽牙蚜崖衙涯雅啞亞訝焉咽閹烟淹鹽嚴研蜒岩延言顔閻炎沿奄掩眼衍演艷堰燕厭硯雁唁彦焰宴諺驗殃央鴦秧楊揚佯瘍羊洋陽氧仰癢養樣漾邀腰妖瑶��摇堯遥窑謡姚咬舀藥要耀椰噎耶爺野冶也頁掖業葉曳腋夜液一壹醫揖銥依伊衣頤夷遺移儀胰疑沂宜姨彝椅蟻倚已乙矣以藝抑易邑屹億役臆逸肄疫亦裔意毅憶義益溢詣議誼譯异翼翌繹茵蔭因殷音陰姻吟銀淫寅飲尹引隱0�印英櫻嬰鷹應纓瑩螢營熒蠅迎贏盈影穎硬映喲擁傭臃癰庸雍踴蛹咏泳涌永恿勇用幽優悠憂尤由郵鈾猶油游酉有友右佑釉誘又幼迂淤于盂榆虞愚輿餘俞逾魚愉渝漁隅予娱雨與嶼禹宇語羽玉域芋鬱吁遇喻峪御愈欲獄育譽��浴寓裕預豫馭鴛淵冤元垣袁原援轅園員圓猿源緣遠苑願怨院曰約越躍鑰岳粤月悦閲耘雲鄖匀隕允運藴醖暈韵孕匝砸雜栽哉灾宰載再在咱攢暫贊贜臟葬遭糟鑿藻棗早澡蚤躁噪造皂竈燥責擇則澤賊怎增憎曾贈扎喳渣札軋8�鍘閘眨栅榨咋乍炸詐摘齋宅窄債寨瞻氈詹粘沾盞斬輾嶄展蘸棧占戰站湛綻樟章彰漳張掌漲杖丈帳賬仗脹瘴障招昭找沼趙照罩兆肇召遮折哲蟄轍者鍺蔗這浙珍斟真甄砧臻貞針偵枕疹診震振鎮陣蒸掙睜征猙爭怔整拯正政��幀癥鄭證芝枝支吱蜘知肢脂汁之織職直植殖執值侄址指止趾衹旨紙志摯擲至致置幟峙制智秩稚質炙痔滯治窒中盅忠鐘衷終種腫重仲衆舟周州洲謅粥軸肘帚咒皺宙晝驟珠株蛛朱猪諸誅逐竹燭煮拄矚囑主著柱助蛀貯鑄築@�住注祝駐抓爪拽專磚轉撰賺篆樁莊裝妝撞壯狀椎錐追贅墜綴諄準捉拙卓桌琢茁酌啄着灼濁兹咨資姿滋淄孜紫仔籽滓子自漬字鬃棕踪宗綜總縱鄒走奏揍租足卒族祖詛阻組鑽纂嘴醉最罪尊遵昨左佐柞做作坐座	`Ĵ亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛嗇嘏仄厙厝厴厥厮靨贋匚叵匭匱匾賾卦卣刂刈刎剄刳劌剴剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞傴仳伢佤仵倀傖伉佇佞佧攸佚佝8�佟佗伲伽佶佴侑侉侃侏佾佻儕佼儂侔儔儼儷俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨僨偃偕偈偎偬僂儻儐儺傺僖儆僭僬僦僮儇儋仝氽佘僉俎龠汆糴兮巽黌馘囅夔勹匍訇匐鳬夙兕亠兖亳衮袤褻臠裒禀嬴蠃羸冫冱冽冼��凇冖冢冥訁訐訌訕謳詎訥詁訶詆詔詘詒誆誄詿詰詼詵詬詮諍諢詡誚誥誑誒諏諑諉諛諗諂誶諶諫謔謁諤諭諼諳諦諮諞謨讜謖謚謐謫謭譖譙譎讞譫讖卩卺阝阢阡阱阪阽阼陂陘陔陟隉陬陲陴隈隍隗隰邗邛鄺邙鄔邡邴邳邶鄴@�邸邰郟郅邾鄶郄郇鄆酈郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆芻奐勱劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巰坌堊垡塾墼壅壑圩圬圪圳壙圮圯壢圻坂坩壠坫壚坼坻坨坭坶坳埡垤垌塏埏垧堖垓垠埕塒堝塤埒垸埴埯埸埤埝ĺ堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑薌芙芫蕓芾芰藶苊苣芘芷芮莧萇蓯芩芴芡芪芟苄苧芤苡茉苷苤蘢茇苜苴苒苘茌苻苓蔦茚茆塋煢苠苕茜荑蕘蓽茈莒茼茴茱莛蕎茯荏荇荃薈荀茗薺茭茺茳犖滎H�蕁茛藎蕒蓀葒葤莰荸蒔萵莠莪莓莜莅荼薟莩荽蕕荻莘莞莨鶯蒓菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀縈菰菡葜葑葚葙葳蕆蒈葺蕢葸萼葆葩葶蔞蒎萱葭蓁蓍蓐驀蒽蓓蓊蒿蒺蘺蒡蒹蒴蒗鎣蕷蔌甍蔸蓰蘞蔟藺̽蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蘄蕻薤薨薇薏蕹藪薜薅薹薷薰蘚藁藜藿蘧蘅蘩蘖蘼廾弈夼奩耷奕奚奘匏尢尥尬尷扌捫摶抻拊拚拗拮撟拶挹捋捃掭揶捱捺掎摑捭掬掊捩掮摜揲揸揠撳揄揞揎摒揆掾攄摁搋搛搠搌搦搡摞攖摭撖P�摺擷擼撙攛擀擐擗擤擢攉攥攮弋忒甙弑卟叱嘰叩叨叻吒吖吆呋嘸囈呔嚦呃吡唄咼吣吲咂咔呷呱呤咚嚀咄呶呦噝哐咭哂咴噠咧咦嘵嗶呲咣噦咻咿哌噲哚嚌咩咪咤噥哏哞嘜哧嘮哽唔哳嗩唣唏唑唧唪嘖喏喵啉囀啁啕唿啐唼�唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟嘍嚳喔喙嗪嗷嗉嘟嗑囁嗬嗔嗦嗝嗄嗯嗥嗲噯嗌嗍嗨嗵嗤轡嘞嘈嘌嘁嚶嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙嚕噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡圇囫囹囿圄圊圉圜幃帙帔帑幬幘幗X�帷幄幔幛幞幡岌屺岍岐嶇岈峴岙岑嵐岜岵岢崬岬岫岱岣峁岷嶧峒嶠峋崢嶗崍崧崦崮崤崞崆崛嶸崾崴崽嵬嵛嵯嶁嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巔彳彷徂徇徉后徠徙徜徨徭徵徼衢彡犭犰犴獷獁狃狁狎狍狒狨獪狩猻狴狷猁狳獫狺��狻猗猓玀猊猞猝獼猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂飠餳飩餼飪飫飭飴餉餑余餛餷餿饃饈饉饊饌饢庀廡庋庖庥庠庹庵庾庳賡廒廑廛廨廪膺忄忉忖懺憮忮慪忡忤愾悵愴忪忭忸怙怵怦怛怏怍怩怫怊懌怡慟懨惻愷恂`�恪惲悖悚慳悝悃悒悌悛愜悻悱惝惘惆惚悴愠憒愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳閂閆闈閎閔閌闥閭閫鬮閬閾閶鬩閿閽閼闃闋闔闐闕闞丬爿戕氵汔汜汊灃沅沐沔沌汨汩汴汶沆潙泐泔沭瀧瀘泱泗沲泠泖濼泫泮沱泓泯涇��洹洧洌浹湞洇洄洙洎洫澮洮洵洚瀏滸潯洳涑浯淶潿浞涓涔浜浠浼浣渚淇淅淞瀆涿淠澠淦淝淙瀋涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄灧溱溘灄漭瀅溥溧溽溻溷潷溴滏溏滂溟潢瀠瀟漤漕滹漯漶瀲潴漪漉漩澉澍澌潸潲潼潺瀨h�濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灝灞宀宄宕宓宥宸甯騫搴寤寮褰寰蹇謇辶迓迕迥迮迤邇迦逕迨逅逄逋邐逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屨羼弳弩弭艴弼鬻屮妁妃妍嫵嫗妣��妗姊嬀妞妤姒妲妯姗妾婭嬈姝孌姣姘姹娌娉媧嫻娑娣娓婀婧婊婕娼婢嬋胬媪媛婷婺媾嫫媲嬡嬪媸嫠嫣嬙嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢駔駟駙騶驛駑駘驍驊駢驪騏騍騅驂騭騖驁騮騸驃驄驏驥驤糹紆紂紇紈纊p�紜紕紓紺紲紱縐紼絀紿絝絎絳綆綃綈綾綺緋緔緄綞綬綹綣綰緇緙緗緹緲繢緦緶緱縋緡縉縝縟縞縭縊縑繽縹縵縲繆繅纈繚繒繮繾繰繯纘幺畿巛甾邕玎璣瑋玢玟珏珂瓏玷玳珀珉珈珥珙頊琊珩珧珞璽琿璉琪瑛琦琥琨琰琮琬��琛琚瑁瑜瑗瑕瑙璦瑭瑾璜瓔璀璁璇璋璞璨璩璐璧瓚璺韙韞韜杌杓杞杈榪櫪枇杪杳枘梘杵棖樅梟枋杷杼柰櫛柘櫳柩枰櫨柙枵柚枳柝栀柃枸柢櫟柁檉栲栳椏橈桎楨桄榿梃栝桕樺桁檜桀欒桊桉栩梵梏桴桷梓桫欞楮棼櫝槧棹x�欏棰椋椁楗棣椐楱椹楠楂楝欖楫榀榘楸椴槌櫬櫚槎櫸楦楣楹榛榧榻榫榭槔榱槁槊檳榕櫧榍槿檣槭樗樘橥槲橄樾檠橐橛樵檎櫓樽樨橘櫞檑檐檩檗檫猷獒殁殂殤殄殞殮殍殫殛殯殪軔軛軲軻轤軹軼軫軤轢軺軾輊輇輅輒輦輞��輟輜輳轆轔軎戔戧戛戟戢戡戥戤戩臧甌瓴瓿甏甑甓攴旮旯旰昊曇杲昃昕昀炅曷昝昴昱昶昵耆晟曄晁晏暉晡晗晷暄暌曖暝暾曛曜曦曩賁貰貺貽贄貲賅贐賑賚賕賫賧賻覘覬覡覿覦覯覲覷牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰��搿擘耄毪毳毽毿毹氅氌氆氍氕氘氙氚氡氬氤氪氲攵敕敫牘牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷朧腖胩臚胛胂胄胙胍胗朐胝脛胱胴胭膾脎胲胼朕脒豚腡脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂臏滕膣膪臌朦臊膻�臁膦歟欷欹歃歆歙颮颯颶颼飆飈殳彀轂觳斐齏斕於旆旄旃旌旎旒旖煬煒炖熗炻烀炷炫炱燁烊焐焓燜焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬燾煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚禰祗祠禎祧祺禪禊禚禧禳忑忐��懟恝恚恧恁恙恣慤愆愍慝憩憝懋懣戇肀聿沓澩淼磯矸碭砉硨砘砑斫砭碸砝砹礪礱砟砼砥砬砣砩硎硭硤磽砦硐硇硌硪磧碓碚碇磣碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龕黹黻黼盱眄瞘盹眇眈眚眢眙眭眦眵眸睞瞼睇睃睚睨�睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨羆罱罹羈罾盍盥蠲釒釓釔釙釗釕釷釧釤鍆釵釹鈈鈦鉅鈑鈐鈁鈧鈄鈥鈀鈺鉦鈷鈳鉕鈽鈸鉞鉬鉭鈿鑠鈰鉉鉈鉍鈮鈹鐸銬銠鉺銪鋮鋏鐃鋣鐺銱銦鎧銖鋌銩鏵銓鉿��鎩銚錚銫銃鐋銨銣鐒錸鋱鏗鋥鋰鋯鋨銼鋝鋶鐦鐧鋃鋟鋦錒錆鍩錛鍀錁錕錮鍃錇錈錟錙鍥鍇鍶鍔鍤鎪鍰鎄鏤鏘鐨鎇鏌鎘鎸鎿鎦鎰鎵鑌鏢鏜鏝鏍鏞鏃鏇鏑鐔鐝鏷鑥鐓鑭鐠鑹鏹鐙鑊鐲鐿鑔鑣鍾矧矬雉秕秭秣秫稆嵇稃稂稞稔�稹稷穡黏馥穰皈皎皓皙皤瓞瓠甬鳩鳶鴇鴆鴣鶇鸕鴝鴟鷥鴯鷙鴰鵂鸞鵓鸝鵠鵒鷳鵜鵡鶓鵪鵯鶉鶘鶚鷀鶥鶩鷂鶼鸚鷓鷚鷯鷦鷲鷸鸌鷺鸛疒疔癤癘疝癧疣疳疴疸痄疱疰痃痂瘂痍痣癆痦痤癇痧瘃痱痼痿瘐瘀癉瘌瘞瘊瘥瘻瘕瘙��瘛瘼瘢瘠癀瘭瘰癭瘵癃癮瘳癍癩癔癜癖癲癯翊竦穸穹窀窆窈窕竇窠窬窨窶窳衤衩衲衽衿袂袢襠袷袼裉褳裎襝襇裱褚裼裨裾裰褡褙褓褸褊襤褫褶襁襦襻疋胥皸皴矜耒耔耖耜耠耮耥耦耬耩耨耱耋耵聃聆聹聒聵聱覃頇頎頏�頡頜潁頦頷顎顓顳顢顙顥顬顰虍虔虬蟣蠆虺虼虻蚨蚍蚋蜆蚝蚧蚣蚪蚓蚩蚶蛄蚵蠣蚰蚺蚱蚯蛉蟶蚴蛩蛺蟯蛭螄蛐蜓蛞蠐蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蟈蜴蜱蜩蜷蜿螂蜢蝽蠑蝻蝠蝰蝌蝮螋蝓蝣螻蝤蝙蝥螓螯蟎蟒��蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罌罄罅舐竺竽笈篤笄筧笊笫笏筇笸笪笙笮笱笠笥笤笳籩笞筘篳筅筵筌箏筠筮筻筢筲筱箐簀篋箸箬箝籜箅簞箜箢簫箴簣篁篌篝篚篥篦篪簌篾篼簏籪簋$�簟簪簦簸籟籀臾舁舂舄臬衄舡舢艤舭舯舨舫舸艫舳舴舾艄艉艋艏艚艟艨衾裊袈裘裟襞羝羥羧羯羰羲籼敉粑糲糶粞粢粲粼粽糝糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸縶綦綮繇纛麩麴赳趄趔趑趲赧赭豇豉酊酐酎酏酤��酢酡酰酩酯釅釃酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹺躉跫踅蹙蹩趵趿趼趺蹌跖跗跚躒跎跏跛跆跬蹺蹕跣躚躋跤踉跽踔踝踟躓踮踣躑踺蹀踹踵踽踱蹉蹁蹂躡蹣蹊蹰蹶蹼蹯蹴躅躪躔躐躦躞豸貂貊貅貘貔斛觖觴觚觜,�觥觫觶訾謦靚雩靂雯霆霽霈霏霎霪靄霰霾齔齟齙齠齜齦齬齪齷黽黿鼉隹隼隽雎雒瞿讎銎鑾鋈鏨鍪鏊鎏鐾鑫魷魴鮁鮃鮎鱸穌鮒鱟鮐鮭鮚鮪鮞鱭鮫鮝鱘鯁鱺鰱鰹鰣鰷鯀鯊鯇鯽鯖鯪鯫鯡鯤鯧鯝鯢鯰鯛鯴鯔鱝鰈鰐鰍鰒鰉鯿鰠��鰲鰭鰨鰥鰩鰳鰾鱈鰻鰵鱅鱖鱔鱒鱧靼鞅韃鞽鞔韉鞫鞣鞲鞴骱骰骷鶻骶骺骼髁髀髏髂髖髕髑魅魃魘魎魈魍魑饗饜餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬢鬟鬣么麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黷黧黥黲黯鼢鼬鼯鼹鼷鼽鼾齄4�襬闆錶彆蔔纔厂冲丑齣噹党淀鼕斗噁髮范丰複干穀颳广閤鬍划迴彙穫飢几傢价荐薑儘据捲剋夸睏蜡腊纍里曆帘瞭鹵囉黴濛懞矇瀰麵衊闢苹凭扑仆朴韆籤縴鞦麯确舍术松囌台颱檯罎涂糰万係繫鹹嚮鬚葯叶郁禦籲愿云髒��症隻只緻製种硃筑准	�<�|�0�����	(8${�|,~�4���<���D�ȈL�ЋT�؎\��d��l��t���|������������� ���(���0���8���0���8���@�ĽH��P���X���`���h���p���x�����������������$���,���4�h�!p�	������������"��	����������������������������d��	���������@�	�����`�*0	����������������l��	�������	�������������������������������������������������������������������������������������	��������������2t�	��������������������������������������������������������������������������������������������������t����������������������������������	���|�x����*��	����������������������	��	����\	$�	�������������������������	<�	���������	|�	��������������������������������������"
��	����������������d
��	�����
(�	���
@�	��������������������������������������������*T���������������������������������������������������������	l�����������������������������������������������������������������������������������������������������������������������������������<�������������������������	�H�	��������2��	����������t��	���������	������x�4�t����� �8�L���4�@�����������:
����������	��������������������������������|
L�	�������������������������������������������������������������������������������������������������������������������������������������������������������������������������	���������������������������������������������������������������
����������������������������������������������������������������������������������������������������������������	����	��������������������������������������������������������������������������B��	���������������������(�������|� �x�X��`�һ��	�����������آ����ؤ��ר��ا�����ҵ����˿ة������ɥح��Ѿ����������ؼ����Ϊ�����د��	����رô��֮��է������ƹ����������ؿ����Ҳϰ�����������ǬJH�	���������ء�������������ب��Щؽ���������������Ķ����ͤ����������������ʲ��������������	�����������������������������Ǫ���������������������������������l�	������������������������ɡΰ����������α�����٣����������٤ �	����λ��ס��������٢����������١��Ӷ���������������٦٥٬ٮ٫ʹR��	٩ֶ��٨����٪٧ٰ������������������٭ٯ���������H�	����ٴ��������ٸ����ٵٷ����ٹ��ٶٱٲ��ٳ��������ٽٺ�������x�@��d����@���8�@�	����ٿ����������������������ٻ��پ��ծֵ��Zp�	������ټ��ƫ���ͣ����ż͵����������	����������������������ɵ�(�	��������ɮ����������Ƨ l�	������������b��أ��	Ԫ������������������������������ȫ���������������������������������������	����Ƚ����ð��ڢ��д��ũ��ڣԩڤ��������������ұ�������l���	��׼ڡ���������������������ƾ����������͹������������(����������	��������ۻ�������������������ɾ������������������ˢȯɲ��������j|���������	���ǰ������������������ʣ������������	�����������Ȱ��������۽�����Ŭ��۾ۿ������������	������ѫ��������ļ������������0���	������������ذ��������������ϻ������ƥ�ҽ����r@�	ʮǧئ���������Э����׿������������߲ռ��¬��±�������شîӡΣ��ȴ����ж�������	���������ѹ������������ԭ����������������ȥ���\	�����������˫������ȡ��������������������߶ߵֻ����������̨߳ʷ����Ҷ��˾̾߷��ߴ8�	�����ߺ������ͬ���������߸���߹���������������������������˱��֨���������������z|ѽ	�������߻��߼߽߾Ż߿��Ա��Ǻ��������������ζ��������������8��	������զ����ӽ����������������������������������ҧ����������������������Ʒ��	������������������������������������������Ӵ��Ŷ����������������������@`	����������������������������������Ψ����������	����������������ơɶ���ž�������Х���������ι���	��������������ϲ��������������	�����������ɤ�����������������������������������Ht����	��������������������������������˻�������	����ҭ���������������ج���������������d	������������������	��������������ض����������԰����Χ��������ͼ��P�	����ԲȦ����ʥ���������������������������`ַ	��������̮�����������̳��������׹����̹����ƺ�����������������	����¢��������������������ԫ�������������������X	������������������������ܤ�������ܣX�ܥ	�����ܡܢǵ��ܧܦܩ�����������0		ܨ��������ܪ��ܫ����	ܯܬ	���ܭ��Ĺǽܮ���ī�����		���������ʿ��׳�����Ҽ`
	�����������Ϧ������ҹ��������̫��ز����ʧͷ�����������D
	��ۼ���������������������������������Ůū���������
	�����ױ����������������������������������&8	ķ�ʼ�������ί��Ҧ��������������h�	���¦��������������������������Ȣ���	������������Ӥ����������	ý�������ϱ������.�	��ɩ����������������������������p
	������������T
��	����������������������Т����������ѧ����ث������������|
��	��լ����������������������������ʵ����������������������������������6�
	���������������Ԣ��į�������կ��������Ѱ����x�	������ξ��С����������������������Ң������ʬ���������β�����ƨ��	���������ʺ���мչ����������������ɽ�������	�������������������������������������>	������Ͽ���������������	������������������������ո����������	�����Ƕ����������������8	��������Fx	��Ρ������Ѳ����������������������������������	������˧��ʦϣ��������������������֡ϯ��������ñ�	��������Ļ�������ƽ���������������� ���	ׯ����������®����Ӧ�����������������������ͥ�������ӹ����N �	����������������������͢����إ� p�������Ū	����߮ʽ߱������������������������������ǿ�� ��	������¼������������ͮ������������Ӱ����������!<����	������������������ͽ�������������ѭ��΢��������V!�	������������������߯��־�æ���������������������������������!(� �d����d��t��|��8���T�t0�Xx�l�\��X�P�(	x	�	�	<
�
0�|��L
t
�
����0p��|�h�4� �����̬����������	������ŭ�����������˼���������Թ�������������!�	������������ˡ��������������������Ϣǡ������������"T	���Ϥ��������������������������������^"�	�������������ϧ�Ω�������������������������������"\���	���������������������Ը�"�	��������Ľ������ο���$#0	�������������f#t	��и�������ų��ܲ�#�	�����������Ϸ�����������ս�����������¾�������������#����	�����������������������������Ǥִ����ɨ��Ť�����������������,$p��	����������ץͶ������������������������̧����Ĩ��Ѻ����n$	��������Ĵ��������������������������׾��������£��ӵ��š�������������ȭ˩����ƴקʰ���$�	����ָ���������ֿ����̢Ю�������������Ų�������ͦ���$D	����ͱ��׽�����������������������������������������4%���	�������������������Ҵ����̽�������������������°�����������v%8	����������������Ҿ����������������Ԯ���������%�����§	����������ɦ���������������Я����%0	��������ҡ��̯��ˤժ���Ħ��ġߡ<&�	�����Ʋ���˺�ߤײ����������׫��ߢߣߥ��~&�ߦ	��������ߧ��ߨ���ߪߩ���&T��	߫���߬��֧߭������������'�	��Ч���������������������ɢ�����������D'�	��ի������������б����������ն���˹�����ʩ�'L 	��������������������������ּ��Ѯ�������ʱ����'� �	���������������������ӳ���������������������
(8!	����������ɹ������������������������������������L(�!	����Ͼ����ů��������ĺ�������($"	������������Ի�ҷ�����������(l"��	������������˷����������ľδĩ��������������)�"ɱ	��Ȩ���ɼ���������������������������������������������T),#	���������������ö��֦�����������ǹ�������������������)�#	��������ij����Ⱦ�����������������������������������)<$��	դ��ջ�������������˨������У�������������������*�$����������Φ��	���������ͩɣ������������������������׮��Ͱ�\*0%	����÷�������������������е�����*�%��	������������������ɭ����������*&	����ֲ׵��������Ҭ������"+d&	�Ш����������������¥d+�&�	�������������������ե�����ȶ��+'	������������������������+h'	�������ģ������ӣ������*,�'	���������������������l,�'̴	ϭ�����������������,((	Ƿ������ŷ��������,`(	��ЪǸ���ֹ����������������2-�(	������������ѳ����������ֳ���������Ź������t-�(	�������ĸÿ��ع���������ëձ���̺�����-T)	������ص��å�����������������������������ˮ������-�)֭͡��	��������ϫ������Ѵ�������������������̭�����������:.L*	�����������������������ɳ����û��Ž����������ĭ������������������մ��|.�*	й�Ȫ����������������Ţ��������ע�����̩��Ӿ��������к������.p+	���������ϴ������������������������Ǣ��/,	���dz����������������Ũ������������������ԡ�����B/�,	Ϳ����ӿ���������������������������ɬ��������Һ�������/-��	���������������������������������������������/�-	��Ԩ������������������������������μ����������0.	����������������տ��������ʪJ0�.	����������Դ������������Ϫ�������������������0�.	��������������������������������������̲�����00/	Ư���©������Į����������������1�/	������Ϋ��DZº����̶��������R1�/	�������������������1D0��	�����������1�0L�T�(l��h��<�0�(��L��D � 0!�!"d"�"$#�#4$�$(%�%&\&�&�&`'�'�' (X(x��(�(L)�)D*�*h+,|,-�-.x.�.(/�/�/<0|0�0��0	�������2�1	��������������������������Z2�1�	�¯������Ȳ�����������̿����������ը���������282��˸���	����������������������������ϩ�������2�2	��������������������������Ȼ 33	����������ɷú����������������ɿb3\3	Ϩ��Ѭ��������������������3�3	ȼ�����������������3�3	������צ��������ү����سˬ��(4$4	Ƭ��������ţ��IJĵ������������ǣ�����j4p4Ϭ��	���������Ȯ��������״�������4�4	��������������������������������ʨ��������������445	�����������������������è������������Գ05�5	�������̡��r586	��������������������õ�����������������5l6��	������ɺ������������������������5�6	�������������������������������86 7	����������ɪ������z6�7��	�������������6�7	�����ư��ȿ������ƿ����68	��������߰�������˦�������������������������@7\8�	�������η������������������������7�8	�����������������������ű����������������������ƣ�����������������789	��������֢Ӹ��Ȭ�����������ʹƦ����������������̵����������8�9���	�����������������������̱������ȳ���H8T:�	��������Ѣ�����������8�:	�������������������Ƥ���������8(;	������ӯ�����յ��������������ʢ����Ŀ����äֱ��������9|;	ʡ������ü���������������գѣ������������P9�;���	�������˯�������������غ��9d<�	������Ϲ����ޫƳ�����˲�ͫ�հ����9�<	����ì��ʸ��֪������������ʯ�������:,=���ɰ	��������ש��������������������������������������X:�=��	�����������˶���������Ӳ��ȷ�����:>	����µ���������������������������������̼�������:p>	������������������ĥ����������;�>	������������ʾ������`;,?����	������������������ף�����������Ʊ���������;d?���	»���������خ�������;�?��˽	ͺ��������������������������������������&<@ϡ	�������˰����������������������h<�@	������Ѩ�����������<�@�ͻ	��խ����Ҥ��������������������������<(A	���վ��������ͯ�������������.=�A	��������������Ц����������������������������������������p=�A	���������������Ͳ��������ɸ��������������������ǩ�=dB��	�������������������������������������������=�B	��׭ƪ����¨������������������6>@C	��������������x>�C��	�������������>�C	����������ճ��������������������������������>D	������������������������������Ŵ��ϵ>?lD	������������?�D	����?�D	����@E	��F@E	�����@0E	��������������Լ��������γ����ɴ����������ֽ����Ŧ����@HE���������ϸ֯�����������������������	�����Ѥ�������ͳ�������������������������ά���������������A�E׺�������������	���������������������Ե����������������������������ӧ����������������������������ȱNA�F	���������������������������������A�G	���Ǽ�������������Ⱥ������������������A$H	���������������������������������������B�H�102�23T3�3�34h4�4,5�506d6�67�7�78T8�809�9L:�: ;t;�;\<�<$=�=>h>�>$?\?�?@�@�@ A�A�A\B�B8C�C�C�CdD�D�D�DEx�(E@E�E�F�GH|H�H��Hҫ��	�����������ˣ����������������������������������������Ү����������VB�I	��������ְ����Ƹ��������B�J�	��������������Ф��������������֫���������������������������������B�J��в��θ��	������̥����������ʤ������ط�������������������������������������CxK	֬�����������������ŧ���������������������Ƣ^C L	������Ҹ��������ǻ�������������������������������������C�L��	�����������Ĥϥ�����������CM�����ӷ	��������������������$D`MҨ��	����������������˴��������������������������������fD�M	�ͧ��������������ɫ���ܳ��ܴ��ܵ�DPN	��ܹ��ܷ����ܻܺܶâܼ��ܽ��֥��������«ܸ����ܾ������о���������ܿ��ѿ��D�N	����έ��������������Է����̦��������������������������ɻ��Ӣ����ƻ��,ETO	��ï����é�����������������������ݢ������ã���������������������nE�O�	�����������������������������������ӫݡݣݥ��ݤݦݧҩ��ݩݶݱݴ�E�P	ݰ����ɯ��ݮݷ��ݯݸݬݹݳݭĪݨ����ݪݫݲ��ݵӨݺݻç�E Q��ݼ	��������������ݿ����������ݾ����������������4F�Q	ݽ����������Ƽή���������өӪ�������������vFR	��������������������������������������FtR	��������������������������������������F�R	�������������������������������ޤޣ<G,S	������ε�������Ǿ���ޢ����~G�S	ެަ����ޡޥީިާޭ��޳ުޮ���G�S	��޶ޱ޲Ѧ޵ޯްн޴��޹޸޷H$T	޻������޺ź޼������޽DHlT	޿Ģ�޾�պ���H�T	���²Ű������������ʭ�������Ϻ��H�Tʴ����	��������������������������������
I4U�	�������������������������������������������������Ӽ��LI�U��	����������������������֩�������������������������������I,V	Ӭ������Ы�������������������������I�V	����������������������JW�	�����������з�TJdW	���������������J�WѪ	��������������������������������˥����������J�W	Ԭ�����������̻����������Ϯ������KXX	����װ���������ԣ��ȹ����������������������������\K�X	������������������������������K Y	��������������KlY	Ҫ���"L�Y	���������������������������������������������������dL�Y��	�����L,Z	�ղ�LHZ	�����*M`Z	���lM|Z	��Ʃ�M�Z	ڥ����������ڦڧ����ڨ�ѵ��Ѷ������کڪ��ګ���������������M�Z��֤ڬڭ���ʶ	թ����ڮ����ڰگ��ڱڲڳ��ڴʫڵڶ����ڷ����ڸڹ��ѯ��ں������ڻڼ������ڽ��ھ����ڿ˵��������ŵ����������2N0[��˭��������׻��̸	��ı��������г����ν��������������������������лҥ����ǫ����á�����̷������������Ǵ������tN4\	������������������ԥ���������N]	��������ò�����Nh]	������������������������̰ƶ����������������������ó��������������:O�]����¸����������������������������	��������׸��׬����������Ӯ����������������������|O,^	������Խ�������Ȥ���ſ��������ֺ���O�^	Ծ����������������������������������������·���������������P@_	����ӻ��̤��������������������������������BP�_������	���������̣�����������������������������P,`	��������������������������P�`	�Q�`	��������ת���������������������������������JQ�`	����������������������������ԯϽշ�������������������������������Qda	Ǩ���Ѹ���ӭ����������������ԶΥ��������������������������������׷�Qb�J�JpKL�LMXM�MHN�NLO�O|PQ�QRlR�R$S�S�STdT�T�T,U�U$V�VW\W�W�WPX�XYdY�Y�Y$Z@ZXZtZx��Z�Z([,\]`]�]$^�^8_�_$`�`�`�`\ab�bR�b��������������	ѡѷ����͸������;����ͨ����������������������������������RR�c	���������������������������Dzң���������������RLd�	�������������������������а�����ۢ�������ۡ�����ۥ�R�d	��ۧۤۨ����ۣۦ֣۩ۭۮ۬����۪۫����ۯ��۰������۱SDe	��۲��۴۳۵۷۶۸ZS�e	۹ۺ�������������������̪���������������ͪ������������ø�������������S�e	��������������������ȩ�������������������S�f	����������Ұ������ T�f	��bT(g	�����T<g	���TTg	��(Uhg	��jU|g	���U�g	�����U�g	��(U�g	��0V�g	������������������ǥ��������������������������������������Կ����������������ť����Ǯ��ǯ������������������������rV�g���������Ǧí	�������������������������������ͭ����ա�ϳ��������������ҿ�����������������V�h����������������п�����������������ê�	���������׶����������������������������������������������V�i��þ��	��������������������������������������������������������������������������������������8W�j	�����������������������������բ�����������zW�k��������������	��������������������������������������������������������������������W�k��	������½¤����ªİ��������������Ժ�����������������������W�l	��¡���������������϶������������������@X0mȸ��	������������Ӻ��������������ѩ�������������X�m����	�������ù����������˪ϼ������¶������X�m	������������������������ѥ����Y`n	��Ь������������������������HY�n	Τ����������������Y�n	ҳ�������˳�����������Y,o������Ԥ­���������	�����Ƶ���ӱ��������������������ȧZho	������Ʈ����ʳ���PZp	�������Z@p	�����������������������������������������Z\p����	�������������������������������ظ�����ܰ[�p	��Ԧ��ѱ�����¿��ʻ��������פ��������X[8q������	����������������������������ƭ��ɧ������������������������������������[�q������	�����������������������������[Dr	��������������ت���\�r	������������������κ��ħ`\�r	�����\s	³�����������������������������������������������������������������������������������������\(s	�����������������������������������������������&]�s	�������Ÿѻ�����Ѽ����ԧ������������h]\t	��������������ȵ��������������������������������������������ӥ������¹�]�t	����������´�����������������]xu	�����������ǭĬ������������������������������.^�u	������ؾ��ػܱ������������������p^,v	��������^|v��	����������������ȣ�������������^�vDd�d<e�e�e�f�f gx�4gLg`gtg�g�g�g�g�g�h�i�j�k�k�l(m�m�mXn�n�n$o`o�o8pTp�p0q�q<r�r�rs s�sTt�tpu�u$vtv�v�v6_�vx_��	��������������������������������������������������������������������������������������������������������������������������������w��������������������������������������������������������������	�_�x	���������_hyx��x`y�y`�y��``�y*�y�`�y��8�X�p�x�����l���t�������D���h���1�I�c�w�w�y�y�y�y�`�yһ��	�����������آ��ؤ����ا�����ة��حѾ��������ؼ�����د�a<z	����ر��֮է����ƹ��������ؿ����Ҳ���Ǭ�a�z	����������ء�����������بЩ��ؽ�����������������ͤ��������b${ʲ��������	���������������������������Ǫ����������������������������ab�{	����������������������٣����������٤�bH|	�����λ��ס������٢����������١���������������٦٥٬ٮ٫ʹ�b�|	٩ֶ����٨����٪٧ٰ�����������������'c4}	������ٴ��������ٸ����ٵٷ����ٹ���ٶ������ٽٺ����ic�}x��z{�{@|�|,}�}~~�	����������ٿ������������������������ٻ����پ��ֵ�c8~	������ΰټ��ƫ���ͣ��������ż͵�c�~��	�������ɡ��������Ӷ������ծ����ɵ��/d	����������������α����ɮ��������������Ƨqd\��	ٯ����������������ٱ٭����������ٳ����ٲ�d�أ��	Ԫ��������������������������������ȫ�������������������������d ���	����Ƚ����ð��ڢ����ڣԩڤ������������ұ����7e��	����ڡ���������������������������������͹��������ye$���������	�������������������ɾ����������������ˢȯɲ�����e��	�������������ǰ��������������ʣ�����������������e�	��������������������������������Ŭ��۾ۿ�?f��	��������������������ѫʤ��ļ������۽��Ȱ���������f���	������������ذ��������������ϻ��������ƥ�����f`��ʮ	ǧئ�����������׿Э��������߲ռ����������شîӡΣ��ȴ����ж����g̃	������������ԭ����������������������ȥGgd�	���������������ȡ������������������߶ߵ��������������߳ʷ������˾߷���g��	�����ߺ������ͬ���������߸�߹����������������������˱֨����������������g\�ѽ	�������߻��߾������������ζ�������������
h���	������զ����ӽ����������������������������ҧ��������������������Ohl���Ʒ��	����������������������Ա��Ŷ�����������������������h�	����������������������������Ψ����������h��	����������������������ơɶ��ž�������i����ι���	����������������ϲ����ɥ�����Ӵ����Wi\�	����Ǻ�����������ɤ���������������������������������������i�����	̾�����������Ż������������������������Хߴ������˻߼������it�	������ҭ���������������������ج������������������������j���	�����������������߿���������������_j�����	��߽�������������������ض�������������������j�	������Ȧ����Χ԰Բͼ���������������������������jX�ַ	��������̮���������̹����ƺ���������������%k̋	������������������ԫ�������gk8�	�����������������������ܤ��ִ�����ܣ�k��ܥ	���������ܡܢ��ܧ�ܦܩ������Ң���������k�	ܨ�������������Ϳ�����ܪ��ܫ��ǵ��-lH�ܯܬ	���ܭ����Ĺܮ׹���ī������ǽ����ol��	����̳��ѹ����������¢�������ʿ��׳Ҽ�����l�	�����Ϧ������ҹ����������̫��ز����ʧ���������lh�	������������ۼ�������������������������Ůū�������5m؎	����������������ױ����������������wmP�	����������������������Ȣ��m���¦	���������������������m�	ý��������ϱ��������=nX�	��ɩ�������������������������n���	����������������Ӥ��������n���	���������������������Т��������������ث��������ѧ�����o0��	��լ��������������������������������������������������Eo��	���������������Ԣį���������ʵ�կ��д�������������oD�	������רξ��Ѱ����С����������������������ʬ�������β���o����ƨ	���������ʺ���мչ������������������ɽ���p@�	�����������������������Mp��	�����������������Ͽ�p�	������������������������������������pP�	�����Ƕ�������������q��	����ո����������������Uq�	��Ρ����������Ѳ�������������������������������q,�	������ϣ�������������˧ʦϯ�������ñ�q��֡	���������Ļ����������������ƽ��������������������r����	���������������������������ͥ�������ӹ����]r��	����������������������������®�����͢����إ�r�	����Ū����߮ʽ߱������������������������ǿ��rX��	������������������������ͮ������������Ӱ��������#sė����	������������������ͽ�����������������ѭ��΢����������es8�	��������������߯��־�æ�����������������������������s���~�~T�����������X�ă\���T���d���|��T�؈l����܊P�ċ0�x�܌@�����`�ЎH����P���ܐ(���<���8����H����$����|��P���0���4��<�	������ŭ���������˼���������Թ���������sH�	����������ˡ��������������������Ϣǡ�+t��	���Ϥ��������������������������������mt�	�����������ϧ�Ω����������������������t�����	�����������������������������t�	���̬���Ľ��������������������ο������3uX�	���������ƾ����������������������uuĜ	����иӦ���������ų����������������ܲ�u(���	���������������������������������¾սϷ�������������u�����	�����������������������������ǤŤ���������������;v ���	����������ץͶ�����������̧����Ĩ��Ѻ����}v��	������Ĵ��������������������������׾���������������ȭ˩����ƴקʰ���v�	����ָ�����������Ų�������ͦ��Юw��	����ͱ��׽�������������������������������������Cw���	��ɨ�������������������Ҵ�����̽����������������������w`���	����������������Ҿ����������������������Ԯ�����w�	����������ɦ������������������Я���	xT�	��ҡ����ˤժ���§��Ħ�ֿ�����ġߡ��Kx��	����Ʋ�������˺�ߤײ������������������׫����̢�������x�ߦӵ��	°������������ߧ����ߨ�����ߪߩ������š�����ߢ����ߣ���x����	����߫£������ߥ������̯߬������֧߭������������y �	��Ч�������������������ɢ�������������Sy��	������������������б�����������ն˹�������ʩ�y�	����������������������ּ��Ѯ���������yt��	��������������������ӳ�����������������z�	��ʱ���������������������������������������[zP�	��Ͼ��������ů����������ĺ�������z��	����������������������ɹԻ�ҷ�������������z���	��������������˷������������ľδĩ�������������!{t�	���ɼ�����������������������������������������c{�	�����������ö��֦���������������{d�	��������ij����Ⱦ������������������������������{����	դ˨����У����������������)|(�����������Φ��	���������ͩɣ��������Ͱ�k|p�	����÷����������������������е�����|Ԩ	������������������������ջɭ������������|,�	����ֲ׵�����Ҭ������1}��	�����Ш������������ҵ��������s}ة�	���������������ե��������ȶ����}8�	�������ǹ����������������}��	׮������¥���������ģ����������������9~�	�������������������������{~@�̴	ϭ����������������������������������~��	���������������������ӣ�~�	��Ȩ�����Ƿ������������A(�	��ЪǸ��ŷ����ֹ���������������������t�	����������ѳ����ֳ�����������������������ɱ�����ج	����Ź��ĸÿ��ع�����ë���̺�����H�	��ձ����ص��å�����������������������������ˮ�����I���֭͡��	����ϫ������Ѵ������������������̭�������������8�	�����������������������ɳ��ûĭ������������������մ��̀��	й�Ȫ������������������������ע�����̩��Ӿ���0�	������ϴ����������������������Ǣ��Q���	�������������������ԡ���������	�������ӿ���������������Һ������Ձh���	���������������������������������������Ԩ�����dz����İ	�������������������������μ������������Y�L�	����������������տ������������	������Դ׼��������������Ϫ������������������݂��	���������������������������������±�����`�	��Ư���©����ŽĮ����������������������������a�Ȳ	���������DZº������̶����������������<�ɬ	��������������������������������������Ũ	�ʪŢ�������������Ϋ�������'��������P��� �����������X�ܠL�����������l�ܤH����l��\��� �h�̨$���Щ0���ت8�|�ث �l�Ь@���0���(����`���D����X���4�����\��d�	����к�����������������������������i�p�	���������̲����������������������Ե	�������Ȳ���������̿����������ը���(���	��������������ϩ�������/���	����������������������Ȼq�Ķ	�������������ɷ��ú���������������������ɿ���	Ϩ��Ѭӫ��������������������������l�	��ȼ��������������Ӫ��������������������7���	��˸¯������צ���Ϊ��������үسˬ����y� �	Ƭ��������ţ��IJĵ��������������ǣ������Ϭ��	�����������Ȯ�����������״��������	������������������������������?�8�	�������������������è�������������Գ����	���ʨ���������������������̡����Ç��	����������������õ�������������	������ɺ����������������������G�к	������������������������������ �	������������ɪ�Ө�������ˈ����	�������������������
�Ի	����������ư��ȿ�����ƿ���O�(�	���������߰���������˦�����������������������x��	�����η���������Ķ������������������Ӊ�	�����������������������������������ƣ�����������������\�	����������Ȭ����������ʹƦ����������̵����������W�ؽ�������	�����������������������ű��������ȳ����H��	���������������������֢���Ѣ���Ӹ̱�����������ۊԾ	�������������������Ƥ���������\�	������ӯ�����������ʢյ����������¬Ŀ����äֱ��������_���	ʡ������ü�������������գѣ��������������,���	���������˯�������������غ�����	������Ϲ������ޫƳ����˲���ͫ�հ����%��	�������ì��ʸ��֪������������ʯ��g�d�	ɰ����������������������������������������	���������������������Ӳ���������(�	����µ����������������������˶������̼�����ȷ����-�|�	������������������ש����ĥ�������������o���	��������������������������ʾ������T�����	������������������ף���������Ʊ���������	»��������������������خ����5����˽	ͺ��������������������������������w�`�ϡ	�������˰����������������������������	������ӱ����������Ѩ����������$��ͻ	խ��Ҥ��������������������������=�x�	�����������վ������ͯ�������������������	������������Ц��������������������������������@�	������������������Ͳ���������������������������	����������������������������������E������	��׭ƪ����������������ɸ���������d���	����¨���������������ǩ����ɐ���	����������������������������� �	����������ճ�����������������������M�p�	����������������������������������Ŵ�����������ϵ��������	�Լ�������������Ŧ����ɴֽ��������������ϸ���������ё@��	��������������Ѥ�����ͳ˿��������	����������������������ά��������׺����������U�,�	���������������������Ե�������γ��������������	������������������������������������������������ْ$�	����������֯���������������������������������	����������ӧ����������]��	���ȱ��@�	�������������������������������\�	������Ǽ�����������Ⱥ���������������������#���	���������ϰ������������������������������e�(�̵ �x�����d����x��0����|�Ⱥ�x�̻ �p��T�н@�̾T���$����\��� �t���L�����X����p���8����\����h���8���$��������8�x�T��� ������ҫ��	�����������ˣ����������������������������������������Ү������������	�����ʥƸ���������������ְ������0��	��������������Ф������������֫�������������������������+���	��θ������̥����������������ط���������������������������m��	֬в�����������������������������Ƣ����	������Ҹ���������ǻ�����������������������������������������������	������������Ĥϥ������������������ŧ3��������ӷ	�����������������������������̨�����u���Ҩ��	����������������������˴����������������������������h�	�ͧ��������������������ɫ���ܴܳ��ܵ���	ܹ��ܷ����ܻܺܶâ��֥ܽ��������ܸ����ܾ������о�����������ۻѿ�;�l�	����Է����̦����������������������������ɻ��Ӣ��������}��	��ï����é�������������ݢ����ã�����������������������|��	�������������������ݩݶݱݴ���	ݰ����ׯɯ��ݮ��ݷ��ݯݸݬ����ݹݳݭĪݨçC�H���ݼ	��������������ݿ����������ݾ����������������������	ݽ��������������Ƽή�����������ݫ������ǘ �	��Ҷ��ݦ�������������ݧέ������������������������	���	������ݻݪ�������������������������K���ݥ��	�������������������������ޤ��ޣ��L�	��������ε����������������ޢ��ϙ��	ݡެ��ަ������ݤܿݵޡ��ޥީ��ިާ�������޳ުޮ�����	��޶ޱ���ܼ޲��ǾѦ޵ݲޯ��ް�н��޹޸޷�S�l�	޻����ݣ����ź޼����ҩ��޴���������޽����	ޭ޿«��ƻĢ�޺���޾���պ������ך0�	���Ű�����²��������ʭ��������	�����������������������������[����	��������������������������������Ӽ������8���	���������������������֩������������������������������ߛ��	��Ы�ʴ��������Ϻ��������������!��	����������������ө����������c�t��	�������������������������з�������	�Ӭ����������������������������D�Ѫ	��������������������������������˥����ֻ�����)���	Ԭ��������̻��������������k��	��������������ԣ��ȹ��װ������������������������`�	��������������������������������������	��������������������������Ϯ���1�(�	Ҫ���������������������������������s�x���	���������������������������ڥ����	����Ѷڧ��ڦѵڨ�����������ګ��������ڭ�������	ڬڮ�ڪթڱگ�ڰ����ڼѯ����ʫ��ڸ��ڹڵ������ڷղڶڴ9���	ڳ��ڲ����ڿ�������ڽ����������ھ����˵˭����������{��	��׻̸����ں���������������ڻ����г��������������������ŵ����ı��ν	�����������������ǫ����лҥ���������ک��á���	֤������ʶ��̷������Ʃ����Ǵ���A�x���	��������������������	��Š��	����������������������ԥ����������	��������ò��������������ƶ����̰��������������������������óI�d�����¸������	��������������������������������������������׬�����������	��׸�������Ӯ��������͡��	�������������������	������Խ����������Ȥ����ſ������ֺ��Q���	������������������������������������·�������P�	����̤����������������������ӻ��������բ��������	���������̣��������������������������������	������������Ծ������������������������������Y����	����������������������������������	���������������������������������շ��ݣH�	�Ͻԯ�ת���������������	���������������������ũ�a���	���Ѹӭ����������������������������������׷��8�(������������`���d���t���@����x���D�����d���(�|���0����l���<����X��� �p�������x���p�����x��\���|�����H����|���@�����0����������	������������͸����;��������ͨ�������������������������������������	�������������������������Υ����ѷ��Զ��Dzң��������������Ǩѡ��������'�H���������	��������������������������а��ۢ�������ۡۥi���	��ۧۤۨ����ۭۮ۬��ۣ��۫��ۯ��۰������۱��l�	��۲۩���������۴۳۵��֣۷��۶���ۦ۸����	۹ۺ۪�����������������̪���������������ͪ����������ø������/�4�	����������������������ȩ��������ҽ��������������q�������	��������������Ұ������������������������������������ǥ��8�����	����������������ť��������������������������������������	������������ǯíǦ�����������������7�8��	�ͭ��ϳ���������ҿ���������������y���	��п�����������������������������������	������׶������������Ǯ��ê����¼�������t����	�����������ա���������������������?���	þ�����������������������������������@�	����������������������������������������è��	��������������������������������������	�������������������Կ�������������G�h�	��Š����	���������������������բ�������������������������������������	������������������������������˩\�	������������������������
�����	����ªİ����������������Ժ���������������������½��O���	��¡��������������������϶���������������¤������������d�ȸ��	������������Ӻ��������˫������������ѩ������������Ӫ����	�������ù����������˪ϼ������¶��������\�	������������������������������ѥ����W���	��Ь���������������������������	������Τ�����������������۫`�	ҳ������˳���������Ԥ���������������ͷ�����Ƶ�����	����������Ը���������������­�ȧ_�$�	��������������	Ʈ����ʳ����������������������	�������������������������������������%��	�����������������������������g�h�	��ظ�����ܰ��Ԧ������ѱ����	��פ������������ʻ����������������	������������ƭ���������ɧ����-�D�����������	���������������¿����o���	���������������������������	������������������������������������	������������������������������ت���5�|�	����������������κ��ħ����³����w��	����������������������������$�����	��������������������������������������h�	���������������������������������������=��	�����������������������������(�	�����������p�	��ѻ��ԧ�����Ѽ���������	������������������ȵE��	�������������ݺ�������� ���	������Ÿ��������������ӥ��ɱ\�	������������	����������¹M��	����������´������������������ô������	�����������ǭĬ��������������������������������������ѲL�	����ؾ����ػܱ��������������������	����ի�����������������������ȣ��U��	��������������l�@���d���,���0���0�����l���8�����`���x���T�����\���T����X����|����`����<�����t���`��� �h�����T�����D����d���ٳ����8�X�p�x�����l���t�������D���0~@�h��������w�y�y�y�y�`����	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTTTTTTTTTT��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWWWWWWW��	

 !"#$%&'()*+,-./01��	

 !"""""""""""""""#$%&'()*+,-./0123456789:;<=>?@ABC"""""""""""""��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM����	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZZZZZ�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS��	




















































































�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU����	

��������	����	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	
����	

����	

��	������	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	




















































����������	

��	

��	

 !"#$%&'()*+,-./01234��	

 !"#$%&'()*+,-./01234567888898888��	

 !"#$%&��	
����	

 !"#$%&'()*+,-��	

��	

 !"#$%��	
	
											 !			"	#$	%&'			(	)	*��	

 !��	

 !"#��	

��	

��	��	

��	

��	

��	
����	

 !"#$��	

 !��	

��	

 !"#$%��	

��	

��	

��	

��	

 !"#$%&'(��	

��	

 !"#$%&'()*��	

 !"#$%&'()*+,��	

 ��	

 !"#$��	

 !"#$%&'(��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

 !��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

����	

��	

 !"#$%&'()��	

��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

 ��	

��	

��	

��	

��	

 ��	

 !"��	

 !��	

��	

��	

��	

��	
��	
��	

 ��	

 !"��	

��	

 !"#$%&'()*+,��	

��	

��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

��	

��	
��	
��	
��	

��	

��	

��	

 !��	

��	

 !"#$%��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	
��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	
��	��	

��	

������������	

 ��	

 !"#$%&'()*+,-./0123456789:;<=��	

 !"#$%&'()*+,-./01234567��	

��	

��	

��	

 !"#$��	

��	

 !"#$%��	

 !"#$%&'��	

��	

��	

��	

��	

 !"#$��	

��	

 !"#$%&��	

 !"#��	

 !"#��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

������	

������������	

��	

 !"#$%&'()*+,-./0123456789:;<=>��	


 !"#$%&'()*+,-./01234567







��	

����	

 !"#��	

 !"#$%&'()*+,��	

��	

��	

��	

��	

����	

��	

 !"#$%&'��	

 !"#$��	

 !"#$%&'()*+,-./0123,456789:;,<=>��	

 !"#$%��	

��	

 ��	

��	
��	

 !"#$%&��	

��	
������������������	

 !"#$%&'()*+,-./0123456789��	

 !"#$%&'()*+,-./0123456789:��	

 !"#$%&'()*+,-./0123456789:;<��	

 !"#$%&'()*+,-./0��	

��	

 !"#$%&'()*��	

��	

��	

��	

��	

��	

��	
��	
��	

 !"#��	

����	

��	

��	

��	

 !"#$%&'()��	

��	
��	

����	

 !"#$%&'()*+,-.��	

��	

��	

 !"#$%&��	

��	

��	

����	

��	

		 !"#$%		&'()*			+,-				./01234	����	

                                 ���������	

��	

��	

��	

��	

 !"#$��	

��	

 !��	

��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$��	

 !"#$%&'��	

��	

 !"��	

��	

��	

��	

��	

 !"��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

 !"#��	

��	

 ��	

��	

��	

 !��	

��	

��	

 !"#��	

��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	

 ��	

 !"��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#��	

 !"#$��	

��	

��	

��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

����	

��	

��	
��	

������	

��	

��	

��	

����	

 !"#$%&'()*+,-./0123456789:;<; DK��<tK��dTL��|zRx�$K��0FJw�?:*3$"DK�� \�K��<HoGNU� ���"���������4z���������������y����y����
l��"��"���o`��
���"0��(	���o���o����o�on���o��"0@GA$3a1yGA$3p11130lGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignchinese.so-3.4.4-3.el8.x86_64.debug~6]�7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N�$������Ph�!h�մBM���W�9���ƺk�ql��Df��UmP�r���2���zq��;w����1���H�~�n�,2���dUQ���������|�P��-���h�u'�q�1��'ο
T��C��j�|���/�$�2�����1��.�%p7y|���G!D#���v�Ӭ���)�i����m�1���?Ǧ� ���ĕj�h�ׂ�&���	��
*M��.o�)��f1�:|c~"��G���`֡8��L�(P;�� 7#׿e���[�SoĽ���Y�:�'t��5��KM(�ni9Z�_����NH��v	�R�m[F�I��ژ�L�� ��7���ʲ�a�$"*�ڗ���	x���ZT��a�UH�a���҅�V�`��bh���#(Н��}`�wfv��VV�Z��M�Jw��U�g���Py�>��e黕�F>�=7%&�e&��ާL�:/�	�\� ��5���/�\��Dk]YZ����o[��~���D�ӣ���t����=Ƣ��[_5��rk)����"���r������Sթ9����/�<lj�W1!�&K8�MV��i
���
�Ƽ5,�=@�,��BZ�S�'!�s%�\.���\�g�B��~���1�|^ڕ.F�b��j�E����w�A�M�z��n��XV�LpS�HP�l���0Vl@��7~��
��5��3�o���,[����Ȉ���$���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T��(^B��0hc  0nPP wpp�}ll
���[� �ܻܻ$���t�x�x� ���"�����"�����"��� ���"�� ���"��H��"����b�����(�DL�"PK*J[L*U�H>H>!lib64/ruby/enc/trans/utf_16_32.sonuȯ��ELF> @H7@8	@H!H! �%�% �% 
8
 �-�- �-   888$$(!(!(!  S�td(!(!(!  P�td�����Q�tdR�td�%�% �% 
0
GNU6���]U�"6�q'�1�X�@ 	BE���|�qX��� d , F"�0 �0 �0 U �__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_utf_16_32rb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��% ��% ��% �% & �& �& �(&  P& �x& ��& ��& ��& ��&  �& �' �@' �H' �X' �h'  �' ��'  �' ��' ��' ��' �(  0( �H(  X( ��( ��( ��( ��(  �( � ) �() �8) �H)  �) �) ��) ��) ��)  8* `* �h* �x* ��*  �*  + �+ + �(+  x+ �+ �+ ��+ ��+  , @, �H, X, �h,  �, �
�, �, ��, �-  X- ��/ �/ �/ �/ �/ �/ ��H��H�$ H��t��H����5�# �%�# ��h�������h���������%�# D���%�# DH�=�# H��# H9�tH��# H��t	�����H�=�# H�5�# H)�H��H��H��?H�H�tH�]# H��t��fD�����=e# u+UH�=:# H��tH�=. �Y����d����=# ]������w���������u-�V��ym����	Ѓ���F��?�Ȁ�A��D<���ƒ���tF�������V����<��	ЃȀ�A�F��?�Ȁ�A�������V��������	Ѓ��������0����V����	ЃȀ�A�F�V������0��	��V��	ЃȀ�A�F��?�Ȁ�A���V���������������Ѓ��@���������~<�����@������	����������؈�F�~��@����<��	�	ˆQ�F������܈A�F�����F��	ЈA��f.����A�Ð�����������F��?	ЈA��fD@������ 	���F�V���ǍB�	��A��ff.�@���F��u,���ym����	Ѓ�����?�Ȁ�A��fD<���ƒ���tF������F�����<��	ЃȀ�A���?�Ȁ�A��@�������������	Ѓ��������0��������	ЃȀ�A��V������0��	��V��	ЃȀ�A�F��?�Ȁ�A�������ff.������������Ѓ��@���������~<�����@������	����������؈A�F�~��@����<��	�	ˆ�F������܈A�F�����F��	ЈA��f.��A���Ð�����A������F��?	Ј��fD@������ 	��Q�F�V���ǍB�	����ff.�@���F��ut�F��u,�V��������	Ѓ���F��?�Ȁ�A��<��������F�V����<��	ЃȀ�A�F��?�Ȁ�A��@������F�V������0	ЃȀ�A�F�V����<��	ЃȀ�A�F��?�Ȁ�A�������V�7����������x1�f�A��A�Ƀ������ƒ���tH�V��������	ЈA�F�V������	ЈA�F�����F��?	ЈA��f��A�F������� 	ЈA�F�V���ǍB�	��A�g���D�A������A������F��?	ЈA��ff.����F��ut�F��u,���������	Ѓ�����?�Ȁ�A��f�<��������F�����<��	ЃȀ�A���?�Ȁ�A��fD������F�V������0	ЃȀ�A�F�����<��	ЃȀ�A���?�Ȁ�A��D������7�������A���x1�f�A���Ƀ������ƒ���tH�V��������	ЈA�F�V������	ЈA�F�����F��?	Ј���A�F������� 	ЈA�F�V���ǍB�	���h���fD�A������A������F��?	Ј��ff.�@���1��fD���<t
<t1��fD�������ff.����<tu��tI<�u8�~u.�V��J���v���u�F��(<H�H��H���������uL�~u�~�u܀~�u���
�>�u��V��J���v����u��F�fD���u��~�u��~u��~u���
����<t
<t1��fD�������ff.����<t]��t1<u%�V��J(��w
���H���
H���fD��f������tC���u߀~�u���
�����J(��w����H�%�H�����~�u���
���?t�"���f������H��f�A������H���fD���?t����f����H������H���f���H��H�=� ���H�= ��H�=Y ��H�=� ��H�= ��H�=U ��H�=� ��H�=� �x�H�=Q �l�H�= �`�H�=� �T�H�=M H���D���H��H���UTF-8UTF-32UTF-16UTF-32LEUTF-32BEUTF-16LEUTF-16BE(0
<D
LD \Td2lt|���������2�����4��
�
 (G4�<G<�<L�\G\�\4DLTdlt|����������������;����������� (�48�H(�\�p�������������8��������8�����������8���$zRx�$(�0FJw�?:*3$"D0� \��p���������������������|���X�
T�%$p��8,���%LH����`���*t�'�����H�GNU����% ���� j������ j����,� j� ���� j� ����� j����� j���� j���� j ��� j�4� j��� j�
��� j�{�����
��% �% ���o`��
��/ 0���	���o���o����o�op���oE�- ��GA$3a1��GA$3p1113��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��
GA+GLIBCXX_ASSERTIONSutf_16_32.so-3.4.4-3.el8.x86_64.debug��v�7zXZ�ִF!t/��/�]?�E�h=��ڊ�2N�.��gD��J����o��՟n��\˦�+Q�%H��A�d�7����{�<r;�ӦŌmG"��t'O[����O�B��f��@V��ښ"�3��Z�����Ȱ���dQfl��Tػ�v3�!��M�RhV�	9ɌD��&<�M��G�1z(��t*G@�mUNe%@k,ڪ��.'�Q>��^��U�nU����|�>��C��y@N�omO�?Qu�%pk2ⷹ��7�&�Λ����뎆�7�[�:��e<6��i�Z��A��ZREE+5��M��崆�7gz6K�ԯt���K
&���R��NQiK�x�����lj��tb0�]TYfK��,Es�7=^9�Ҝ���ci-���W1A��t7A������.�����0Ӻ���)F]s@��]s�8e"�M� ]�vΎ�o�C�Ŧ/�L����^M6�}�@a�K�QT��4�-���N3�R��I�ν�~�-\�O�5�����@b��h;Q�$\�b��Nө��`��9
�wHR���tb��[eh;G��R���<cHo[>�"��GgT�.�<�-#Ѱ�3"�y�:o���3XG�*<8~��5��y��/��ZBGY�:��9�[����w����q�/G.$t���.�%�\����tK`��Yx�����$��P���۵��p���eK		-^�X��'���y�H��I�C��q�>�n�l3'�E���6#'��<^���,��3n*��r����ha��CL]��ݮkR	/�j�ƝI����e�[I�@5x�q�S������G�-���a�pߏ�TS+��ÂU ��[=N�	EvCV��Q|�����b>�$9�E�3Kj�c�je�� ��
���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���oppE���o�� T���^B��0h��c��0n w  �}��
��� ���������(!(! ��% �%��% �%��% �%� ��- �- ��/ �/H�0 �/�0`�/H02,\2�$6"PK*J[�
1{`�`�+lib64/ruby/enc/trans/emoji_sjis_softbank.sonuȯ��ELF>�@`�@8	@�� ��!�!�� ����!��!  888$$ннн  S�tdннн  P�td4�4�4�$$Q�tdR�td��!�!��GNU��P1?�#ї���hQ��@  	BE���|{-��qX n , F"��!��!U�$��!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_emoji_sjis_softbankrb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	��!p�!0 �! �!@�!�H�!�X�!�Rh�!���!���!���!�R�!���!��!��!��!��!��!��H��H�y�!H��t��H����52�!�%3�!��h�������h���������%
�!D���%�!DH�=9�!H�2�!H9�tH���!H��t	�����H�=	�!H�5�!H)�H��H��H��?H�H�tH���!H��t��fD�����=��!u+UH�=��!H��tH�=��!�Y����d������!]������w������H��H�=Q�!����H�=��!H�������H��H���UTF8-SoftBankSJIS-SoftBank 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓	∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯	0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん�\ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ	ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω~�АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ	абвгдеёжзийклмнопрстуфхцчшщъыьэюя─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂=�	�p①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ	㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪��	亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭z�	院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改9d魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄9`機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈9\掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向9X后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷9T察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周9P宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾9L拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線9H 繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只9D#叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓9@&邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入9<)如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美98,鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋94/法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒902諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯9,5蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕	弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲�(8僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨9|:咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩9x=奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏9t@廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛9pC戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼9lF曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣9hI檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌9dL漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱9`O瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬9\R磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆9XU紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋9TX隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈9P[蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞9L^襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊9Ha蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮9Dd錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰9@g顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈9<j鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙	�8m纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱9�n犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"v�q9�t9�w9�z9�}9��9��9��9��9��9��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯9��涖緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙9��髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑	5��T��hx�	\XTPLHD@ <#8&4)0,,/(2$5 8t:p=l@hCdF`I\LXO。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚TRPULXH[D^@a<d8g4j0m�n�q�t�w�z�}������������������Ԙ�ܘ	���N���}�L���	Ț	�~��5
�w
p	�������������������������������������������������������������������������������
�����	���������������
��	�F�@�A�B�C�D�E�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�p�q�r�s�t�u�w�x�y�z�{�|�}�~����=���������������������������������	�vĜ���w
�	�]�\�e�f�g�h�����d�c���������0�	��������%x�	�T�U�V�W�X�Y�Z�[�\�]����������������g��	�����������	��������	�����������������������a��������������������-
0�	��������������o
��	�������������
Ȟ	���
�	�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S5���������	����������������������������������������������������wd�	������	��������������	������������=,�	����T���	���������l�p������(��������\����$�L�d������@�A�B�V	�X�Y�Z�q�r�s�t�u�v�w�x�y�z�����k�l����E�	�������������������������������������������������������������������������������������������������������������������������������L�����������������������������������������	�J�K�T�U�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�X��_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������	�E�[�R�SD�	������M@�	�����������\�	�e�i�`�c�a�k�j�d�l�f�n���	�_�m�b�g�h�~��������	�r�s�o�p�q�uU�	�t����D�P�<�8��T�x�����(��0�����	�������O�����s�^���N���������u���������L�������������O������h�	���T�v�V�����R�h����������������������]���T	�������\�����������]�������j�i�����������S�������������������������l�T��Y�m��	�����w�����������e�d�����t���W�����M�������������������C�N���O��	�P�������������x�����`���������L�Q�f����#��	���A�������Z���C�����R���]���������C�����������������ge�	�������T���������S�V�����U���������D�������N�����d�	�W�����E�r�W���������������������M�������C���o�U���������Z�Ԩ��L��x��\�̨P�+X�	�����q���{�����|���������[�����Y���l���������������`����m���X	�^���\�����������������������]�����������U����	���T���_�P�������b���B�������X�p�	�C���@�A�������l�D�a���E�H�F�m�G�I�`�K�J��3���V�M�N	���L���Q�P�O���R���S�D���U�T�W�V�Xu$��Y��	���Z�[���������b���[���e���Z�\�}���]�c���S�_�`�����Z�a���������T������b	�c���~�f���e���g���h�`�i�j�k�����d���n�l���m�y�o�p�q�~�u�s�t�r���v�����w�e� �	���x�y�y���������z����{�}�����}���f�~���M���������o����;Ȭ��	�n���������������Y���g�����������������������������h��}H�	�������������O�����U���������������������������n�����ȭ	�c�����������������h�������i���w�������[���J�������N@��j��	�u���E���������������k�������������������M��������������C���l����	�����m�������������k�����x�������n�����������C�������@����\	���������������������������P���m�����T�����K�����o���p�����������į	�����p���������������~�X�}�����q������	\�	�Q�������y�F�o�����f���������r���b�p���������@�����������������j�E�����i��K��	���h�e���g���D�����@���f���N�����i���������������z�����������\���	�C����������������������������������������	�����u���a���������t���B�����v�@���]���P���D���CD����i�A	���������E���N�F�G�����L�K�N�M�J�wS��	�S���O�H���I���S�B���Y�X�O�����P	���U���R���[�V�W�T�Z�Q�`�e�a�`��\	�f�P�x�h�A�^���b�[�������c�_���i�g�r�i���d���c��	�m�k���p�j�n�l�k�o�r�w�u�t[�	�Q���q�s���R�v�������}�{�|�~�`�	�\�X�x�y�����������������������	���d���������X����������!���������	�����������d���l�����c�������}��������c0���	�������������������������y�������\�n�����������	�����V�������B�y�����z�R��������	�������^�����C�_�����{����)T���	�����}�|�������������W���u�������|����k���x	������������������������������g�����������	�����Y�����h�������������U�����o���m�T�	��������������n�����������������1��	�����d���������������������������m�p�s��������������������s�	������������[�O���g�������������V���v�������������������	�����������t���_��z������������������������D�������z�@�D��	�A�@�����D�J�W�d�����B�E����W�i�F�������9��	�G�o�n���������K�L�I�W���H���P�����p{�	�����Q�O���R�P�N�P�M�����V�W���L��S�K	�k�U���X�w�Y�T�����	�}�Z�Q�[�_�\A к	���^���]���k�d�a���`�b�c�e�f� ��	���h�g�i���l���d�j�m�n� @��q	�o�p�q�r�E�s������t�u�y�F���G���v�w�w���x���y�z�{�}!|��~	�����F�����v�����G���@���������X�����q�����G���{���Q���������e�hI!���	���������������x������������Q���@�����������J���R����������������������!��	�������������������q��������������������������A�������K���s���A�!0�����	�����������r�����������W���j���w���������R����"��	������������Z���������x�������������Q"4�	����������������������������s���"��	�������������R������������������"�	�������������������������#0�	������������������������������Y#x�	������������������B�����H���I�������������b���J���F���#ȿ	�s�z���������������������t�����A���������X�#D���	���������y�����������������������N�����K�������c�H����$��	���L�������������X�M�{���x�����������N�fa$(�	�����p�����L�����f�@�C�D�B�_���F�E�A�G�H�I�L�J�K�M�����N�����U�O���$��	���P�M�Q���T���������U�|�����V���O�o����������W�X�^��������Y�J�e�$�	�Z�K�[���\�]�_���`�a�b�S�R�c�`�F����V���j�d���e�e�f�����i'%�������h�g�a��	�m�k�j�������l�k�]���p�o�n�q���r���z�s��������O�t�Ji%4�	�S�K���E�u�u�Y�Z���z����w�����y�O�x�v���|�%���h����|����@���8���8���T���T�ܱ<����X����X����(�����L����L����������D���Ⱥ�8�t����(���,���ؾ(�p���<��� ������,��� ��(�	�������{���|�������v���}�}�������������������%4�	�����������������P����������~�������p�����������������b��/&��	�������������������������������I���x���Y�����{������������q& �	�������f�����������������y���S������z�������������&�����D	���������������������������������������������& �	�������������Q���T���������������������d�S�����������������c���|7'��	�J������������������������e��������������y'(�	���������������������������������������������'����	�����������^�����������������@���A���B�C�Y�D�E�F�������[�'�����G	����������H�������K�I�L�J�M�����}���N�Q��?(|��Z	�O�V���P�c�}�R�S�W���T�R���e����������������Z�����(��	�c�S�]�d�_�f�b�a���[���Y�����U�X�S�����`�q���g���@�h�m�i���n�A���E�\�(`�	���k�w�l���g�������j�����U�����p�})��	���J�q�s�o�����{�������~�����x�����PG)L��v	�|���{���u�z�r�t�@�|�|�����T�y���T�����[�w�d�f���}�~���)����	���������`�����K�g����������������h�)$�	�������������r�������������g��
*��	�����E�������������O*��	�����T�����Q����P�������d�B���o�h�����*�	�i������������^���������F���C���[�����������������*`���	�������������������x�������������U����+��	��������q�~�����s�����������U���h�������G�~��W+4�	�������|���k�������l�������������������a�f�z�V�������{�+��	���������������������������������U���|���{���������+��	�V��������������������������f��t����������G����������E,��	�����W�����W���N��������������A���������i��������q_,�	�����������������g�������������b����\�A��������,��	���@�����B���C�j���D�F�G�H���g�X�I�J�������J���]�\���,���	�����L�������K�����L�N�]���M���N�O�������{�D�Q���p�S�V�U�����R%-��	�T�W���������������Z�m�X���Y�����[�\�����a�Y�t�^�������n�f�`����g-�	�f���]�c�b�����������}�g�e���d�_���k�i���g�m�s���-������	���u�A�t���^�����_���M�p�o�q�n�v�l�j�r�h�������������`�-�	�������h�����I�x�Z���z�����}���j���i��-.���{���j����	�y���|�~���K�����j�������V���O����������o.��	�����~���������[���������������������B���������������.h�	�����H�����������_���������I�����������X���������.���o��	�����������A����������������������������������������5/P�	�k���������^�����������������������|�������������O�y��w/��	���T���|���P�����Y���������������������/L�	��������\�����������l���������������������������/��	�������������������W�����������������~���������������M=0�	�����������k���@������������������0���h	���������@�w�������K�G���F�E�B�0��	���D�C�I�E�L���H�J�������M�Q�N18�	���O���R�S�T�U���������~�W�V�Y�\����E1��	�\�[�]���V�^���`�_�a�b�c�~���������c�������d�e���f�1���g	�i�h�w�}���c�j�l�B�k�m�n�o�p�q�s�r�t���i�u�E�k�v�a�1P���	�B�w�x�������y���������z�|�{�~�}2��	�����������C���������X�i����M2����`��	�����������������]�r�����������������D���2d�	�������������������B���������v���������������������������2��	���������������@�����������A�g���D�����������j3P�	���m�����������������k�^���F�������������hU3��	�����������l�����Y�_�Q�\�������C�Z���3 �	�������O�����������������U�t�������3x���	�������������i�����������W���������������[���~�����������Y��4��	�����������a�k���������������n�������Q�������������`����������]4X�	�������������X�����N�����������p���4����	���������������a�������������n���M�����48�	�������������������������������H�B������#5��	���Y�����R���A�������������������Q�@��e5��	�������N�I�������R�K���H���k�E�D�M�5T��G�F�L	���C���O�P���U�T�V�Y�b�S���W�5�������Q�Z	�X�]�[�^�a�Z���G�����\�`���_�J����d�h+6���������� �����t���X���D����x�����X���,����������|���������`���H���D��������0�|���H����\���H����p���P���0�����L�����`��h�	�f�����b�c�g�e�m�m�j�i�l���n���������o�q�pm6t�	���r���s�����D�������6��	���F�����u�t���x�Y�{�v�z�y�_���F�6�	���}�G��~�|�w�B�37`�	���������������R��u7��	���������������������������7��	���F��o���n���M���7(�	��R������������z����W���C��������;8l�	���������������������u���}8���	�������v��������������S�q�����������84�����	����]������������@9��	������������_���������������K���T��C9��	���������������A�������L�������P�Q�����9L�	�����������b�������l���C�������9��	�������������������D	:����	�����E�X�����H�F�����G���]������J����K:,�	�������I�������K�M�L�N���������i�����:��	���������l���������O�����������������:��	���P���Q�������;@�	����Z�@�Z�A���B�C�D�F�G�E�r�I�HS;t�	�R�K�J�L�M�O�N���Q�P���r�[�R���Y���S�p���T��c�R�b�\�j�������U�;��	�V�[�Y�X���E�W���������\�Z�{�����L�^���l�_�]���`�a�S�����f�c���b�E�;T�	�i�d�e�h�g�D�a�`�^�j�k�l�n�m�u�v���p�r�t�]�u�s��<��	�o�q�a���x�w�y�������z���|���{������s���}�~[<X�	��������������<��	���������������������������o����S�<��	�T��I�F�c����H�����W�U�V�X���������M!=��	��u�~�m�v��������X����������������������c=��	���������������^�����������������=l���	�Z�������������r�����������=��	�������������u������������������)>�	�����������������m�����Z��������k>`�	�������������\�u���m�C�j�v�{�>��	���]���^���d�������_���>��	���������V�����O���q���������������m��1?4�	������������A�@������C�Bs?��	���D�b�F�E�G�����I�H�`�������?���J�V	�_�F���S�P�O�c�L�N�j�_�M�K�I���[�����Q�R�?(��h��	�\�T�S�������d�f�T���U�W�X�H�Y�Z�[������9@���G��	�\�H���b�]���d�`�a���`�^���_����{@���H	�b���c�����B�d�e�t���g�f���i���l�j���m�k�e�@P���	���m�s�o���n�����n�p�q���r�n�t�����u���v���@��	�������w�����y�{�x�z�A�|�E���q�~��M�AA �	������}������g����������������v����h�G�j��[����^�|�����A|�	�������������J��}�y�����������A�	��M������������}����������������B|�	�������������Z������k����\�������IB�����	������z��������������U�������BP���	�����������������������������������B����	��������������������������������C�	���H���������������e�S�l��������������������������������QC\���	�������W�������������f�����������n���C���I	�@���g��C���[�R���B���h�������A�f�a�������F�����G�a�I�����H�CD�	�I���g�D�J�m�E�o�M�Q���L�U�n�i�����R���O�P���N�K�G�����WD��	�T�V�S�p���X���e�p�a�[�_�����Z�b�f�j�����\�o�d�Y�]�^����YDP�	�]������������q�g���c�h�j���m�i���������l���k�D�	�����n�u�o�v�r�����t�q�w�p�c�D�k�s��{�~�|��z�`���D<�	���}�x�@�q�J�r�D�U������y������J�����E��	�[����@���Z�������aE$�	�����Ep�	��s����������������r�u�����l������E��	��������r��������t��Q�A�`�������H'F��	���������K���������������������|��iFp����X����� �d���,�����D�����$�����8�l���L���P����x���d����X�����,����� �����H����t��t���H����T���<���H��4����h�����h������s�V	�l���������������k�������������������^���F�	�����������������������������������E�����W���F<�	�����������]�������I���������������b�����m�n�����x/G��	�����_�w�������������E�������������E�\qG�	�������e������r�����E�]���B�Gx�	�A��t���D�C�o�r�T�H�I���G���F�J�����B���G��N	�O�K�L�M�p�U�Q�����G�P�S�R�c�V�W�V�X�Z�^�[�Y�^7H(��\	�]���d�_�`�a���c�b�e�f�g�b���h�����L���v�i�j�P�kyH��	�l�m�n�o�����p���q���r���s�����C�w���M�t�q�u����w�������v�D�H��x	���z�y�|�{�}��~�����������F������H��	����������H�����m�c���F�|�����?I��	����������c�����������������p������IP�	�v����������s��������������������I���	����t�`��r���w��������xJ(�	����������������������GJt�	�����y�e������������p����������H����z������J�	���������G��������������������������J8	���{�t���������������������������K��������
K�	�������N�����f���������|����������OK�	���~���u���W�������������D�H�@������KH��	�������������U��������������K���@	��������B���}�C����~����n������J�P�QL��D	���N�F�H�R�G�K�����L�O�E�E�I�F�d�O��������V�TWLX	�m�S���U�W�X�[�Y���Z���M���\�a���`�L�	�A�b�h�]�_�^�P�A�d�c����e�f�L	�g���s�i�|�������j�k���l����Md	���q�r�m�\�n�a�o�p�z�t�w�s_M�	�u�v���x�`�u�a�{�^��|����}�~�g����������M��	�I���������w����������MX	���X����I����������������%N�	��Z���������gN�	������������I�a��NH	�����������y����������N���	�����O�s�����p�X���q�����t�����\����������������-O�	�����U����������������������������������oOX	���������������T��������������������������������O�	�������������J���A�������������O(	��������������A�@�C�B�D�P�E�F�G��5P|	�v�H���e�I�J���K�K���`�L�o�M�O���N�e�P�Q�R���S�T�UwP��V	�p�W�X�Y���G�Z�[�\�PL��	���]�v�u�`���_��P�^���L�a�b�����c�K�������i�d��f�����P�	�e�h�i�����g���]�f���r�m�w�����l�l�k�F�l�b�Y����j=Q		�o�p�n���_���F�s���a�U�v�����r�w���t�u��q�����N�����b���Qx		�z�x�k�����y�z���_�{������������~�|�@����}���������Q�	�d�y��	��������������u����w����T����R�
	���������������x����c��������ER�
�	�]�����Q������R`	�J���R�	�����L����������������^��S�	�����e�����L�������v�n�����������������������M���������\���fMS�����G���d	���������G���o���^�����������������q�������w���S�	��������������������������S,
	�������q������������NTp
	�����z������������UT�
	�����������������������������H���H�����T�
	�����x��������H����T<	����@�D�A��B�C�J�E���G�I�F�L�R�K�MU|	�N�Q�P�O�S�R���U�T�V�W�Y�X�g�Z���[�]�^]U�	�_�\�`���a�O�R����b���]�c�f���e�d�y�g�U0	�r�i���h�q�k�m���j�l�p�n�P�o�r�y���S�s�A�u�t�x�`�U�	�w���v�{�z�y�Q�|�}�~���D���#V�	�h�������������C�J�_��������HeVH	�I���v�}���������������R��q���������V�4����p��� �������H��� �l��0��@��P�\��P�@��P� t�D|�p	�	|
�
X����$
h
�
�
4t�(��@������	����t�����������r�������������������A����T�i������N��V	�����x����V�^�����������B�����������k���y���K����������J�I�������+W�������	�����W���M�������@mW`	���x�Y���S�����s�X���s�W�	������A���W�	�����U���z�����������|���������V�����y���_3X,	�����������������X������������������uX�����	�������������d������������B������j����������t�������������X�	�����b����������n������������X��	�S�����������������������������z���g;Y���	�e���C�L����������������K��}Y<	���N������������s�e�����I���|��Y�	���K������@�B������A�C����d���B����^�E�D�FZ�	��B���t���K���b�G�H�L�J�����I��CZ`	���O���������Z�M�N���L�P�Z�	�V���Y�X�L�Q�R�U�W�����Z�T�S���Z�	�^�_�`�]�\�����[�d�b���c�a���e	[<	�f�h�������g���s�i�l�j�k�m�o�p�q�t�r�u�wK[�	�v�[�	���[���	�x�M�y���z�J�[�������{�|�}�~����t�}������{����\	���������������S\�	���������h�j���\���	������~����������@�w���������A�������������z�\	�����G���@��K���u������������B��������������������]�����	�Y���W���������G������������J�������_������d[]��	���k������������������������I���P���������]�	���������������������������������r���������v���x���C�������]	���������������������f�������������!^�	���������������B���������C��c^�	�����������{�����a�����������z�����j���o����p����^8	�����z�{����������^����������@�B�A�^�	���C�D�E�F)_	�H�G�I�����H�Q�J�K���Z���������O��k_0	�L���M�{�a�`�N���O�P�R�S�U�Q�T�����V�W�X�Y�_�	�Z�\�[�^�a�]�_�`�b���_�	���c�d�����e�]�n�f�g�y���h1` 	�����w�������m�����l�j�k�i�w�n�o�p�q�s�r�xs`d	�t�v�R�u�����x���y���z��`��}	�|�~�{����������������` 	�����[�9a\ �	���������������������E������{a� 	��������������T���S�a� 	�@����������������D������a@!	�����������������L���N������Ab�!�	��������������I�����������~���������b�!��	���������������k�����������������h�������������V���bH"	�����L��������������c�"	�������������P����Ic�"	�����������������������������������c,#	�����D�C�E�L�@�A�����B���Q�J���F�K�c�#	�H�G�{�L�M�N�I���O���S�T�Rd�#	�Q�W�P�U�V�Y�X�[�\�]�h�Z�����^Qd($	���_�`�a�dt$	�b���c�d���d�$	�e�f�g�h�k�i�[�j���l���m���n�p�q�o������������e�$	���s�o�t�u�v�����w�������x�z�y�{�|�}�~�������Ye$%	���C����l���@��e�%	��V��������������������e�%	�����s�f,&�X��$��x�4��X��4����������0�(|�\� T x � 8!�!�!@"�"�"$#�#�# $l$�$�$%�%�%$&H&afP&�f��@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���X'��������������������������������������������������������������������������������������������d(����������������������������������������������������������������������������������������������������������������@�A�B�C�p)�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������|*��A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����+���������������������������������������������������������������������������������������������������������@�A�B�C�D�E�F�G��,�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������-�������������������������������������������������������������������������.����������������������������������������������������������������������������������������������������������������������������������/�������������������������������������������������������g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������0�����������������������������������������������������������������������������1�����������������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O��2�P��������������������������������������������������������������������������������������������������������������������������������3�����������������������������������������������������������������������������������������������4���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�6�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������7���A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���8���������������������������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�$9�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~���������������������������������������������������0:���������������������������������������������������������������������������������������������������������������������������������<;�������������������������������������������������������������������������������������������������������������������������������[�H<�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������������������������������������������������������T=���������������������������������������������������������������������������������������������������������������������������������`>�����������������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�l?�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������������������������������������x@����������������������������������������������������������������������������������������������������������������������������������A���������������������������������������������������������@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c��B�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~����������������������������������������������������������������������������C����������������������������������������������������������������������������������������������������������������������������������D������������������������������������������������	�f�E\(h)t*�+�,�-�.�/�0�1�2�3�4�5789(:4;@<L=X>d?p@|A�B�C�D�EF�g$F	��Ig�F	���g�F	�s�~���������B�Y�a�b�c�e�i�l�u���������������������g�F	�I�����������i�j���{�C�|�D�^�O�P�Q�R�S�T�U�V�W�X�F�G�������H���`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�m�_�n�O�Q�dG�M�����������������������������������������������������o�b�p�`	�������������������������������hpH��������������������������������	QhxI	������P����hJ��F�F\GhHpIJ(J�h0J(�i\Jw
\JIi\J��������� �(�ؠ`���,�l��H'P'�FTJdJlJtJ[i|J@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmmmmmmmmmmmnopqrstummmmmmmmvwxyz{|mmmmmmmmmmm}~������������mmmmmmm��������mmmm�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWWWWWWWXYZ[\]^_`abcdefghijklmnoWWWWWWWWpqrstuvwxyz{|}~��������WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW@�	

 !"""""""""""""""#$%&'()*+,-./0123456789:;<=>?@ABC"""""""""""""DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@�@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	

 !"#$%&'()*+,-./0123444444444444444444444444444444444444444444456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee@�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������@�	
















































































































































































�	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx��������	

 !"#$%&'(��	
��	

 !"#$%&'()*+,-./012��	

����	

����	

������	

��������	

��	

������������	

��	

��	

 !"#$%&'()*+,-./0123456789:;<=>?@��	

 !"#$%&'()*+,-./012345678��	

 !"#$%&'()*+,-./0123456788889:;<8������	
��	
������	
��	

 !��	

��	

 !"#$��	

 !��	

��	

��	

��	

��	��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'��	

��	

��	

��	

��	

��	

��	

 !"#��	

��	

 !"#$%&��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
����	

��	
��	

��	

 !"��	

 !"#$%&��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"��	

 !"��	

��	

 !��	

��	

��	

��	

��	

��	

��	

 !��	

��	

��	

��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

 !��	

 !��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

 ��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	
��	

��	

 ��	

 !"��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

��	

��	

��	

��	

��	

��	

��	

��	

 ��	

��	

��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	

��	

��	
��	

��	

��	

��	

��	

��	

��	
����	

��	

 !"#��	

��	

��	
��	
��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

 !"#$��	

 !"#$%&'()��	

��	

��	��	

��	

��	

 !"#��	

��	

��	

��	

��	

��	

��	

��	

��	

��	

������	

��	

��	
��	

��	

 !��	

��	

��	

��	

��	

��	

��	

����	

��	

��	
��	

��	

��	

��	

����	

��	

��	

��	

��	

��	

��	
��	
��	

��	

��	

��	

������	

��	

��	
��	

����	

 !"#$%&'()*+,-./0123456789:;<=����	

��	

������	

 !��	

  !"#$%&'()*+,-./0123456789:;<=>?��	

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!���������	




; <I��<lI��dLJ��|zRx�$�H��0FJw�?:*3$"DI�� \�I��$HWGNU�p0 �!���J�RRj��R�����RRj��R�����H
��!�!���o`��
���!0�h	���o���o����o�oz���o��!��GA$3a1H�GA$3p1113��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignemoji_sjis_softbank.so-3.4.4-3.el8.x86_64.debug�a��7zXZ�ִF!t/��
��]?�E�h=��ڊ�2N���n ��,J��,"k.��iC�Gd�(���	�U���w�:gR�Ӥ�)rV��I�J��3{��qB�pQZ�~dd������P��"Ola��1\a	�K�g"���"�����s�����M^��;ݾ���0?.ƬvPs�Og�Z禈"0�=Y�Fi��p��Ś�iߞ�Q���z"E��+.�4���)T����(�ꠎ��bH9ntJ1˷�u,y��}�q�����C������d؝��|g���C������[is4��xy�;��C���,�ׂ��������?�`F��C�	�vȀ��w�uS՟�ԔR�2���
4hK���h
WO�ͬ�[>Wm}$.�{����F��K�ƞ$�Ԗ�:�W���B�����n6�
U��V�gO�J�O%#L�|�Pd�[���d��Cv�>�����F�|96�t��6 ����_6��:)%g	�FR ai�GC��mA�t�
�ܺ���UA��\� �,,�.Ղ{���j"I�l1���m�l����㷅��\�yaL��o=пP�&g{�y��L"�9l7[,���e�X�v��wX��b���~ʒ���
H#J�߅lRH��ɐ����Y쯈���R����Ps�HfZ���;�q�@�����٘�\ZK��,b�|�W��;_�o���Z�9n��q�c^�6��M"��1��kl�8y�M�����P����WDxq����d��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���ozzE���o�� T��h^B0hHHcpp0n�� w���}��
���r� �4�4�$�X�X�t�нн ��!���!�� �! �` ���!�� ���!��H��!����a�����4�(<�"PK*J[LtQC`>`>lib64/ruby/enc/trans/iso2022.sonuȯ��ELF>�@`7@8	@�� P(P( P( �� �-�- �-   888$$���  S�td���  P�td```��Q�tdR�tdP(P( P( ��GNU�����-�.I-���?_顪�B 	BE���
�_��|�qX b , F"�0 Ul�0 �0 __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_iso2022rb_register_transcoderlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�P( �X( ``( `( �( ��( ��( ��( `�( ��( ��( �) �) �) � ) �() �8) �H) `p) �x) ��)  
�) @�) ��) @�) ��) ��) ��) `* �* �(* �8* @`* �h* �x* ��* `�* ��* ��* ��* @+ �+ �+ �(+ `x+ 
�+ ��+ ��+ ��+ `, �@, �H, �X, �h, `�, ��, ��, p�, @�, ��, @�, ��, ��, �- `0- �8- �H- �
X- �/ �/ �/ �/ �/ �/ ��H��H�A$ H��t��H����5$ �%$ ��h�������h���������%�# D���%�# DH�=	$ H�$ H9�tH��# H��t	�����H�=�# H�5�# H)�H��H��H��?H�H�tH��# H��t��fD�����=�# u+UH�=j# H��tH�=� �Y����d����m# ]������w�������1��fD���?��HD��f.����F��F�A��f�������A�F�A��fD��D�H��tz�<�t;H��A��tA�$�ABH�QfD�������vH�BH)ȃ�@�r�f�H��H��A��t�(�AIH�Qf���6H�B��@�2H)���H��E��t�A�(�ABH�QfD�	H�B��6��@�2��ff.�����?�t���!<^H���9H���ff.�@���>t'�?���D����Ȁ�A�F�Ȁ�A��f��~(�T�t%��@t8��Bt1����1��f.���Bt1���Ju��1��fD�1��f����<t5���}<tI<u�����!��?H���H���fD��f���P߀�v]�Pи��DvP����B�<v>��-t9�Jи@��Dv܃�y��H���9H������_<?H���H���D�@�f����<ta<tA<t-���t
�x_@��>wl��uh����Ȁ�A��fD�1��f.��~(�T�u��It�Jt1���Bu8�1��fD��@t+��Bu)�1����Ȁ��F�Ȁ�A���1��f����?SI��t+H��u	�>���I��L���	���[I�L��L)��fD�G��t̓�L����GD�H�Mc�O�JI��tA�$�ABL�IfD��E�E�M�QE�[H����E�Y�s���fD�FD��P_��>v@<���A��t�(A�BII��fA�B���F��I��A�B�L��[H)��GÐH����H����-�H��H�H�BA��t�$A�BBI��fA�R���I��A�R��@A�B�L��[H)���>��8����^���t@����&�����J������A��L��E�YH)�[�f��GL��[H)�D�G��A��L��E�YH)�[�ff.����1���tH��t�(�ABH�Af��H)��@�G��t݃�H����!�H�H�BH��tA�$�FBH�VfD�����IH�B�J�?t�H���ff.�f���1��?u�@�(�FBf����ff.����H��tc�>�H��t;<tA�$�ABH�Q�fD���F����vH�BH)ȃ�@�r�f�<t޸$H�Q�A@f����DI�Ȅ�tA�(�ABL�AfD�	��I�@H)ȃ�A����H��H�=� ���H�= ���H�=i ���H�=� ���H�= �|���H�=e �p���H�= �d���H�=� H���T�����H��H���CP51932CP50220CP50221cp51932EUC-JPstateless-ISO-2022-JP!#!V!W!"!&%r%!%#%%%'%)%c%e%g%C!<%"%$%&%(%*%+%-%/%1%3%5%7%9%;%=%?%A%D%F%H%J%K%L%M%N%O%R%U%X%[%^%_%`%a%b%d%f%h%i%j%k%l%m%o%s!+!,
$,��H�PXY`XYt	�����	��H�����
���	H��@BBJ$(!~����BJ��;�@�p��P��`�����$��8��L��`0�t�������P��������������zRx�$��0FJw�?:*3$"D�� \`�
p\��h��t�����,�!�H�~����P�8��H�`
P�
IY
Gv
JG
KOLp����`��%t���������lH_GNU��``( ����`E����������`E�� 
@�@�����`E���@�����`E���@�����`E
�����`E���l��`E��p@�@��8��`E���
y�����
|P( X( ���o`��
��/ 0P��	���o���o����o�on���oC�- ��GA$3a1��GA$3p1113�|GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSiso2022.so-3.4.4-3.el8.x86_64.debugP%���7zXZ�ִF!t/��7�]?�E�h=��ڊ�2N�	 s���g"L+�X��IZ�-�
�D�["���D6���W�$i&��Řy2��O����pD�[rݫ���]��4��=��9���"�b��=�O�8�7��a����'�~)p^/�+�ڮ8����ܼ�Fi��1! ��
��C.�CʿQ���PG�ab�Ɯ2��[���D�69St*ɥi�uJ�~\b]*"g�z�!M��]�>�Њ����,J{��hѡ7�Y?�u&��m�ސys)�9ٍ9N�ٸg�}�'If��m�:�9o*iœ�q,s�X�ivxq�ʫH�ҷID��U�t�9�����Lt��YR�e
�:�:�t=b#�QʺHQ�h��;'��I�D�=(�Աd��sbm�t�O̪����-���X�b�'g����T�we���-�M��w���5��1��r2�����z��I1�GQN��RLC��/���[D����&��"����R��xCON���!��]�&m-i� �^.��"ˁ��x'�g��2�,���C��_2;<��
c�i����{�P��I}0� ���Aɼ�e��rÃU��]�Qd[�P�Pҽ^D���$��%�Q1O�%������$T��J�3��4+��)��kZ�؃x��sX~N�O��_�^9n.0N�7q��!PJ���c��Z��a.*v�&�U�<��Fwb\�Ćh[JjT�D�g�?�m��_�(}�W�f^�1S��-����X��YSL�����@��3��۔V}~����G���Z6Q���Hl����I7d!P+*3�RT��$8�/�U��@��H��+�T�YA���@<B��y�9�!�۲��z,E������4��I���$���E�*�ϑ���K�Ќu��@���	�99������-J��b�K �սMo���L��ٯ�7sgfq�?†�rG��� �6���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���onnE���o�� T���^BPP0h��c��0n�� w���}||
���� �``�������� �P( P(�X( X(�`( `(  ��- �- ��/ �/H�0 �/�0`�/H02(X2�<6"PK*J[NZ�0.0.lib64/ruby/enc/windows_1257.sonuȯ��ELF>�
@0'@8	@�� �� � 08 �� �   888$$���  S�td���  P�td```LLQ�tdR�td�� � 00GNU#Rd4��|�l2^�xň�@ BE���|�qX��� $U���� �Gg��, F"A  T  H  ��__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_windows_1257rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib647ui	Y� 0� �
� �   8 �@ pH @X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�	���x����ff.�f���AWD�H��AVAUATL�%�UH�-�SfDL�I9���L9���M�YH�XL�E�	E��A�����A����GE��F�lufA����A��@��E��E��A��A���A��I��I��G�4H��E��L��fDD�E���\���L�A���I9��U���[H)�]D�A\A]A^A_�A�� ��E���SL�XA��A������@sE��L���f�A��@tZA�� tQE��E��A��A���A��i��A����FA��A���I��A��H��E��L���0���I��E��H��A���L�������I��E��H��A�����A���L����f�A��u7I��E��H��A����A���L������f��@SE��L�������E���sA�sH��A���A�����DI��A��H��E��L��A������i���A�I�^���fDI��A��H��E��L��A�i�9���A������.���fDI��A�� H��E��L������I��E��H��A�IL�����f���H��I��I�ѺQH�5����!����H���@����I��I�ѿ!�H�5�����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5 H�=�I�����H��H���Windows-1257������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@���������4��4�����4������0���0��0�����0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;L����h��������������� @���4����HzRx�$ ���PFJw�?:*3$"DH���@\0���#DpL����F�H�B �B(�H0�H8��
0D(E BBBA����,HL W���"����B�@���GNU�0�
�  �p@@p'7e�	
� � ���o`��
{� `h	X	���o���o8���o�o���o	� 

 
0
GA$3a1�	GA$3p1113@GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSwindows_1257.so-3.4.4-3.el8.x86_64.debugiM3%�7zXZ�ִF!t/��S]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���L?��i�D����h�ܡ;�膁>bӠ̠�e��һ�
�H햚31��W}�#�en&��瘄����f������q�Up���B#r6���;��! �u��a-��c<��[�qe�yO��B�{��I�aUD��3��.7�_�<��9z���i���5=�p02��\̶��O��L[?X0�]�*Wfk;��wo���W���J��;"~��͖K���E!cB'�:�26��$��3cw�����'�>u��lGS�����aY��dz5W֟^`t_ �HK��w��:��� ��;xw��=z����a+>x��o�P�Ҽ)jb)y��Rl�%�saW}:���Z��n�!���G��]�V��v��Pg��=*r7����6��	��)�n��h��@�l˰XMiV8�4l�j�����Q�A�w�֚�������DIV=�ʿ��϶�D:Ƃ��s\]�
�Y�L�z���R��V����oY�犠©�.��X��i��U�nԘZrF�-����F�l<��� 5�ыa��/�� �9�
�Q�R����V�z>��-�`�g��g�_v�g�L�b�&O{�]/m�w���V/����D�ƾ��)8#C�֓���,��f"��$
l�n�K��л	Ǟ$�H�J���T�V�b���z���(��� D��R1fz̫%�}j^�o-�45�MJ">HS�;�i�w�-~�6
��PD�2���OMKϧ�!�؏�����:{q�嵙鲏�0/�񩜙iXu���m΋v�	^����Q����2�R��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��{8���o*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}
�  @ �``L������ �� ��� ��� �� �� � �� �X�   � ` HH"0x"�&"PK*J[�c�>�>lib64/ruby/enc/euc_jp.sonuȯ��ELF>p@�7@8	@� �  P,P, P, �� H-H- H-   888$$� � �   S�td� � �   P�td�����Q�tdR�tdP,P, P, ��GNU���F/@�ymg횡b�y$�F�@(BE���|�T5	�qXU gN^ +����, zF"�0 �0 B �0 __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeOnigEncodingASCIIonigenc_with_ascii_strnicmponigenc_minimum_property_name_to_ctypeonigenc_apply_all_case_fold_with_mapOnigEncAsciiToLowerCaseTableonigenc_ascii_get_case_fold_codes_by_stronig_is_in_code_rangeOnigEncAsciiCtypeTableInit_euc_jprb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�P,  X, �`, `, �, 0�, �, ��, ��, p�, P�, 0�, `�, ��, �,  
�, �- �- - - � - �
(-  0- �
�, 8- �/ �/ �/ �/ �/ 	�/ 
�/ �/ �/ �/ �/ 
�/ �/ �/ ��H��H�a% H��t��H����5�$ �%�$ ��h�������h��������h�������h�������h�������h�������h��������%u$ D���%m$ D���%e$ D���%]$ D���%U$ D���%M$ D���%E$ DH�=�$ H��$ H9�tH�6$ H��t	�����H�=Y$ H�5R$ H)�H��H��H��?H�H�tH�$ H��t��fD�����=$ u+UH�=�# H��tH�=^  �Y����d�����# ]������w�������H��
H�
��xIL�GL9�t`D�GH��H�J���x;L�GL9�tRH���OH�1��<
����������fD��������D��f���������D@��f�H�)
�����H�
���������I��I���Q���H�A�
��~/H9�v*H���f.�I9�vH���r����r)�9����f���I��L�NH����t�����L��L�N���t���(L��I��@�8L��L������M)�H�L9�u	D���DI�p�����ff.�@����Br<����~��	����D����v7������wH�� H��H�1���������f.�������f.���I��AWI��AVI)�AUE��I��ATI�F�UH��SH��H�����6�EH�
@��1H���D���wkL�
���M�$YE��xXH��I�A2$���uBH�=3! J�T5L��H���{�����u'C�<4u L�
YA�DYH��[]A\A]A^A_�@H��L��H��L��[]A\A]A^A_�T���@����I��I�ѿS1�H�5F�A���������v7�����w0��%����=���t�瀀���p��������E��f��øo����@��?\����v%��_Y����v��_X���G0��!C��f.��G �ff.����H�>���xH�3  ���H��UH��I��L��SH��L��H��������x���H��H����;���Hc�=p���t	I[]�����ff.����AUI��A��ATL��I��UL��SH��L��H��H���������H��L��H��A������D�ω���A��\����v5A��?Y����v)A��/X���� ��A9�uH��1�[]A\A]��A�Q�A9�tGA�D$�A�$A�D$H��[]A\A]�DH��I��L��H��D��[L��]A\A]�b���f�A�$�A�D$A�T$H��[]A\A]�fDA�Q��f���I��H��M��I9�vEA���_<]v��L9�sI��A���_<]v�H��L������H�L�I9�rM��I)�I��N�L���D����w��v2����t@1���t9Ã���wXH�� H��H���C���H�	 �����x���������w6��%����=���t"�瀀��1�������ø�����f.���1�����H�5� H�=.�����H��H���EUC-JP













































































































������
�"hanlatingreekhiraganakatakanacyrillic����ѧ�������ئAZaz��ڣ��������������������������ݎ����������£�ã�ģ�ţ�ƣ�ǣ�ȣ�ɣ�ʣ�ˣ�̣�ͣ�Σ�ϣ�У�ѣ�ң�ӣ�ԣ�գ��֣��ף��أ��٣��ڣ��������¦��æ��Ħ��Ŧ��Ʀ��Ǧ��Ȧ��ɦ��ʦ��˦��̦��ͦ��Φ��Ϧ��Ц��Ѧ��Ҧ��Ӧ��Ԧ��զ��֦��צ��ئ��ѧ��ҧ��ӧ��ԧ��է��֧��ק��ا��٧��ڧ��ۧ��ܧ��ݧ��ާ��ߧ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;���� ��P�����@���$��8 �L� �p�����0�@���@�zRx�$���FJw�?:*3$"DH�p\`��p��N�(�a������F\����I�E�E �H(�E0�D8�D@�
8A0A(B BBBED8J0A(B BBB L�4X�LH��4 \��ti�J�p
ADp��F�H�G �D(�M0Z
(C ABBHd
(A ABBFD
(M DBBG[
(A ABBG���[���GNU� �`, 0��pP0`� 
����
 �
�����X

8P, X, ���o`x�
h/ ��	��	���o���o����o�o|���oH- �
�
�
�
�
�
�
GA$3a1X
EGA$3p111307GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY0�GA+GLIBCXX_ASSERTIONSeuc_jp.so-3.4.4-3.el8.x86_64.debugvLd��7zXZ�ִF!t/����]?�E�h=��ڊ�2N�$#�@��`��m�Oǰ��)��;����ћ�4�������D4f��8���̧_V�\��޽M��SzU��~wK��U���+�2�VHi�&�/���
�$Nt/�3��RW���K9䙽��W��?Z�nI�(Ĕ�2���úKzf{^*Baضې�di��3HX�˧�"�b���/��"����a�/��Q	~N�޿�,{��| �v��
�Ur���n}�s�yܺ�e@}FTL��y�Y�x�V�g�
�03e���%��!���l�Ǵsƻ�
g�]3?}��NOY:5m�W���@��T�à�O�����yQO���.��y$��6�Q�N�ͦ��\��|�v&�,@���0���{)d_Qf1�%ው�(8ː��Et�|n��_�I�[fqjS��H�	躑�OR�.x�zя&y�oTxບ#�"a<2!xu�̑Fў�7z�q9	%���N��W����]u2P���5<�ɑ��T[��FX��|�}3�m\���AWR��<�-VF�q��b�I� 1K�w:sBAr+~Ձ�={�5�P{�o��6��P�Y���[�c=��J&���kj�� ���r�%��X&)�+�f�r��n��/邟�4��C}|Q�%���ͱ\��f�x{1Kg�����1�������<��_��J���4��͟��{�헢Y���ؼ/oBlX�V�����3	��9܎tt�5H�����i8_�NI;��|,J�4�q�z��]���ZR����&V=�u��-��6�z�I/���bY<�����َ�l�������!SǠ�J�cռ�t�w�&��#_�A�z����ƹio����ZJ������ 
���Mˡ��ݑ`�}k-U�4�-��{$�oX���@B��=��̔QwRZ�v�ecm5��\ �at�H'��,�P;w����Pt�u�n�L��]>��Sq��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0xx8���o||(E���o�� T���^B�	�	�hX
X
c�
�
�npwpp�}88
�``� �����pp0�� �  �P, P,�X, X,�`, `,� �H- H- �h/ h/��0 �/�0`�/H82(`2p6"PK*J[Ͼt�0.0.lib64/ruby/enc/windows_1253.sonuȯ��ELF>�
@0'@8	@�� �� � 08 �� �   888$$���  S�td���  P�td```LLQ�tdR�td�� � 00GNUp�k��L�/}[Pw <6��@  BE���|����qX $U���� �Gg��, F"A  T  ��
H  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_windows_1253rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib647ui	Y� 0� �
� �   8 @@ �
H �
X px � 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������H�H�����H��ff.�@��1����w��H�����x����ff.�f���H��D�L�AUATUH�-�SH��L9���fDI9���M�ZL�E�E��A�����A�����E��A���A���t:A����5E��F�$kfA��tUA��@tLF�T-A���H��D�P�E��A���A���EE�L�L9��_���[H)�]D�A\A]�f�A��@t�A�� t�A��A�����E��#���A����A��%�fDA�� t7A��A�����m���DA�� t?A��A�����M���DA��A���5���A��A���#���A�����A���
���A��A������A��������A��������A���tA��E�b�A�� A��EF����A��������f.���H��I��I��1�QH�5����"�|���H��������I��I�ѿ"1�H�5V�q������H�5 H�=�I�����H��H���Windows-1253��������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@���4���������������0�4��4�4�4��4��4�4�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~����������������������������������ܣ������������������ܷ��߻��������������������������������������������������������������;L����h����������@����@���p���$����8zRx�$ ���PFJw�?:*3$"DH���@\0���!pL���#4�h����O�B�A �H(��
 DEBC�0���)HI W�D����P���GNU�0�
�  @�
�
p�'7e�	
� � ���o`��
{� `h	X	���o���o8���o�o���o	� 

 
0
GA$3a1�	GA$3p1113@GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@aGA+GLIBCXX_ASSERTIONSwindows_1253.so-3.4.4-3.el8.x86_64.debugF�3�7zXZ�ִF!t/��Q]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz*Ѻ�ҙ���J�􀠋}�|h.j��Y�BP��,����3G`fp����������_��S��}�škh��>�"ߔ
�|������DH��Yz);7���:t�I���%فoNx��G�E�
]�I����!6<���_��L�2E��f3��]~)X�D4��
Q����ezp���aA\�{Q�������[�8d�{�;���DO�>���G�Ǩ��fսY�r�JڲCo�RdF~A(��qQB>���O|-v�ۿZ���m�EM����!�c���Z0����3�ɇ��x���j�А�����ū��ai�D��D�`�t2g	�tņ%d��]�O�-�$I
K9Bؑ�Q�����Z��/�H�n�A������q�mݰ�fI�K=_!.TN1#��`�P����N�w�Z�<7bBd�7&��#�.�����;�&��}�/=-�fO�cآU�&%�����Hz�s�{�G��׫FR�.\�Oݜ����+��Yd��Q��:���E`,�څ�x3��(�+�c�#&���5�#�z�.,�!cď�3�ظZ�}��zX��`�ںq6�$5�Mm�n|")[�4��R�o�eT�o`�a+C��������d}Ͱ�E�|��
�k<!s�eI����%�*�]n9�x����_��Y�d��.�S��d]�E��7�D�ƒ�Mm̄wJ"1ZvX�*=��u^*I�E�V��w�ײ�,�ظ$���5���S�\�Υ�%��w��OtY

�V���7q�A%
�@�1P���7c�LTQ?q�^dg����9�h��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��{8���o*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}
�  @ �``L������ �� ��� ��� �� �� � �� �X�   � ` HH"0x"�&"PK*J[i�rT�-�-lib64/ruby/enc/iso_8859_11.sonuȯ��ELF>�
@�&@8	@�� �� �  8 �� �   888$$xxx  S�tdxxx  P�td�
�
�
,,Q�tdR�td�� �  0GNU����l�qc�^��F��[����B BE���|�qXa���#� ���f� v�|1S�, F"~  �  �  Up__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_iso_8859_11rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_ascii_mbc_case_foldonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchonigenc_single_byte_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64tui	�� 0� �
� �  �X @ 
   ( 0 8 @ H P 
` h p x � � 	� � � � ��H��H�� H��t��H����5z �%{ ��h�������h���������%U D���%M DH�=y H�r H9�tH�6 H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�i���x����ff.�f���H�5� H�=������H��H���ISO-8859-11@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0;,p���H����p����������zRx�$ ���0FJw�?:*3$"D(��� \�#p���GNU�0�
� �@KZdt�

�� � ���o`��
�� 0�	�	���o���o����o�ox���o� @
P
GA$3a1
�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_11.so-3.4.4-3.el8.x86_64.debugx��7zXZ�ִF!t/��
�]?�E�h=��ڊ�2N����. �Ұ6��H԰v�#�F4{_(��%?)~��E|Ye�?L� ����8ˋ=�]p2t�����.��,3皙[Lc��E�RxU���_�Vx���O��Tʥ��̮BU\H�jzg�g��`�.��h��`���zг�ۘ(s�eTJ���W6# s|3FB!���/";��'哘([�b�g<����O�B�O!g�?粹��k�+*Zx@�l��@8]Lw;R�\���w{��ã��x�Vz
ָ5�}\�P�x���i�h�`�T�f�n]��0ji��7H��$��pom�1�4'M�"�97�!�����a?�n5$���p����\�-�"F`U4S=ۤ|�.�_��z�jQ��.,�,K��8�4��7���.lu���GB�]�f�P�Q�-����_Q�f̟�8��?+H��vb�NI�>kČ'g��C��P1�!�׎����^"Ha��e�P�/5$�=Ở%�F��ӊ!�^8|O�p#���0h���#(`y�+��;�:F����6X*�.�H��>�K��r��W&�x(��f�θ$���n�Q���������H��	�f�����y(���B�Mν!5�%]�R;T�N;�E��\Irj1y7��Zߍ���C
j�N�"��L�¥˛�y����t�.�˯j���Cꮼ����ާ���0�+�p���2b�!U�0�
�S൐����%{�N����
� ��i�lS[�~릵sC�!�M3
3�VK������\�2��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��(0���8���oxx.E���o�� T��^B�	�	0h

c0
0
0n`
`
 w�
�
}��
���  ��
�
,��
�
��xx �� ��� ��� �� �� � �� �H�  �� `�H8",d"P�%"PK*J[�ޱ�@.@.lib64/ruby/enc/utf_16be.sonuȯ��ELF>
@@'@8	@�� �� � 8X hh h   888$$���  S�td���  P�td0
0
0
ddQ�tdR�td�� � 8PGNU_�qC�7�N� LL��?}E��@ BE��4 ੻�|�qX ��� h���B, $F"U�  �
�  �  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_unicode_get_case_fold_codes_by_stronigenc_unicode_mbc_case_foldOnigEncAsciiToLowerCaseTableInit_utf_16berb_enc_registeronigenc_unicode_apply_all_case_foldonigenc_unicode_property_name_to_ctypeonigenc_unicode_is_code_ctypeonigenc_utf16_32_get_ctype_code_rangeonigenc_always_false_is_allowed_reverse_matchonigenc_unicode_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�� �
� p
� � � �� %
� 0 �
  ` P( 0H �  0 	8 @ 
P X � � � � � 
� � � 
� ��H��H�i H��t��H����5 �% ��h�������h��������h�������h��������%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�} H��t��fD�����=� u+UH�=Z H��tH�=. �I����d����] ]������w��������O�����Ȁ��t�D�W�O��
%���ʁ�	��ff.�f����������ff.�f�����L��I��H��H���������H�M���xx�8tI��H��H��L���H�����H�F �@��A�H�Ð����ƒ���tH)�1�H�������������<�u9H)������H��t0H��t5�����H��t"�G��<������D���fD������f����G��<��������D��H�W1�H9�v�
t�f.�1��?����������v4������
�����f��f��f�~f���f�f���f�>���H��H9�v.H��H)�H��H��?Hʃ�H)�H������H)������t�DH��H�P�H9�HG����H�5� H�=�����H��H���UTF-16BE;d@��������������������� ����p������$0���8����L���`zRx�$����PFJw�?:*3$"D��@\���Cp�����������O�X��������)��M�,���P�h���GNU��
p
� �%
0�
`P0�����P	

� � ���o``�
� `��(	���o���o����o�o|���oh �	�	�	�	GA$3a1P	%
GA$3p1113�

GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA+GLIBCXX_ASSERTIONS�

GA*FORTIFYutf_16be.so-3.4.4-3.el8.x86_64.debugҜ�/�7zXZ�ִF!t/��7{]?�E�h=��ڊ�2N�sdV�ٕ��1����!�6�tm�3C<�3�[������Щ��o�öa�c},`����·�/}�@��}n�U���|���$d�i��
)c��={Wư���d2>BB1���3׼?{�+�����	�Ň�T��C�ʐ�����"ιH�S��L�4�(��O}�E��k�vl�)Tҏ��3��:�P•?�#m�N�%Y�v���,�ۣ#j<��EQW���V��>�Ĕ�'-g�1_p��Q��	i���tq�-��QL������~�u��K�?-BB���-6�=O�q��������W;����J��?v.��I_&��
�L�ܘ�紀߰o1��F���F�
D��[�=��|^=�%E���F�H�O��2�UM���Cd/q�?,�@����2�
�3K�3�i��uW�����Bs���T����.��K�swO����SN
R�_A��:�,a��gE���Oƾ����D+�wj]bܫ$��A�R�0Ȟm��{�m|bei\��gvo��6u��
>��Z�Y,���H����HӰy�*2omJXld!2��VE�
��6)x;9�Z��|!��'����
ZE��c����paGN���4�UIQ�a�N��+����$M�伮���}3"���"y��IZ?�h�=�?�L��K��K�Ǻ�D�g=/K=lY��Bk���� :O�Fv}>Z���`�G+q��!v�	Ź�R�a�$��.�f������$[LzD��\D���������_P�#{�D%�����qW�	�'������ѻc��Ϗ��q&�r��'�Ѐ��
��ג5�
�W�b��U��۾n']ZV�l�����9�h���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0``8���o||&E���o�� T��(^B��`hP	P	cp	p	Pn�	�	@w

}


�2%
%
	�0
0
d��
�
��� �� ��� ��� �� �h h �� �`�  �� `�H0",\"�&"PK*J[yه�0.0.lib64/ruby/enc/iso_8859_15.sonuȯ��ELF>�
@0'@8	@xx �� � 08 �� �   888$$XXX  S�tdXXX  P�tdLLQ�tdR�td�� � 00GNUE�TE�U#s<�(	w����B  BE��d��߻�|�qX #U���� �Ff��, F"@  ��S  G  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_15rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib646ui	X� 0� �
� �  �8 @@ H �
X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�����x����ff.�f���AVD�H��AUL�-{ATL�%rUSL�L9���I9���M�YL�A�L�XA�ف�����݃��@���tB�����A��C�,tf��t
A��@���@tA�� �(�L��D��I�Á��H��E����c���A���L�L9��\���[H)�]D�A\A]A^ÐA�� t'E���SL�XA��A���t]�@sE��L��뮐A��uWM��D��I�Á��L��A�����|���f.�M��D��I�Á��L��A������U����@SE��L������D���sA�sH�����A��� ���fDD��L��G�L5I�Á��A��H�����@E��A���A��D�Ձ��tD���t%���tK���tZL��A�� I��E��H�����M��E��I��L��A��������M��E��I��L��A������{���M��E��I��L��A������d���M��E��I��L��A������M���ff.���H��I��I�ѺQH�5����"�9���H���@����I��I�ѿ"�H�5��.���ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5e H�=�����H��H���ISO-8859-15��������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@�������4��0��0����������4�0���0��0��4�0�4��4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;L�h@����@����p����������@���,����@zRx�$����PFJw�?:*3$"D����@\����#<p����eF�H�I �H(�A0��
(D EBBB����,HL W��"����B�H���GNU�0�
� �@�
@p
&6d�	
�� � ���o`��
z� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_15.so-3.4.4-3.el8.x86_64.debugO��7zXZ�ִF!t/��Q]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz��+Q=}�UE��6Iid���F���_�
�+PF�s�z��j3P�O-��/c��+7�'dp4;,dH�|�dD�f;���]x��t�L�L���
+�
�*�����3F�Y-��
&�8�`0�!:�&��<�1`�0������R��xT��
Lʲ[�����#�ύ�Z�;E	�J�Oi`�_ap�wA�hN���
�]�Z5�5	�a��2�0�Y���,���U���l�`m^g�xA��o*ʫO�P�
&�%>q(��‘�&La�Ij��129��PY�(��iew�|��šC>�
��9�>��C�g?]��1
-��g؄�6��O�p�OMd�T<]�N�@��<����7LQ;=W�#��pT�<��ྛ��>��J���
2�D?۽P{�ԡ��D���k�B��{yǎJ�ih)�Q�MGk˺��KvP�Gݦ��&N�G���5~{e���V�P�"I�n �7y���s���LP��,��a��R�TX��(1�N(�3vl>����tطL󧩸fu���镎i�H��D��$�o('I��(�那Q �qсxC��l���2좹Pn�8�Q�"���6_��>E��9�V����9뽾�i��ye� �2�K��{D ��q���M�֢��;A��	���_���F-��}�R�S�Ov�K�^��_1=*w�Y}򒪱�ٛ@~^w��I� f{w�ճ��dԞ?�S�X#V���i�����I���\��_}m�KW�p�3QNC�D�ӟ|�ۢ��e���b�Uر��9�h��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��z8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
'}��
���@ �L�PP�XX �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[jms��-�-lib64/ruby/enc/iso_8859_8.sonuȯ��ELF>�
@�&@8	@�� �� �  8 �� �   888$$xxx  S�tdxxx  P�td�
�
�
,,Q�tdR�td�� �  0GNU��7���]���H�߫���U�@ �BE���|6,\�qX"� ���e� u�{0R�, F"}  �  Up�  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeInit_iso_8859_8rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_ascii_mbc_case_foldonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchonigenc_single_byte_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64sui	�� 0� �
� �  �X @ 
   ( 0 8 @ H P 
` h p x � � 	� � � � ��H��H�� H��t��H����5z �%{ ��h�������h���������%U D���%M DH�=y H�r H9�tH�6 H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�i���x����ff.�f���H�5� H�=������H��H���ISO-8859-8@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@���������������������0�����������0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0;,p���H����p����������zRx�$ ���0FJw�?:*3$"D(��� \�#p���GNU�0�
� �@JYcs�

�� � ���o`��
�� 0�	�	���o���o����o�ox���o� @
P
GA$3a1
�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_8.so-3.4.4-3.el8.x86_64.debug�g��7zXZ�ִF!t/��
�
]?�E�h=��ڊ�2N����. ����I����a;�[�$���Il��@��g�&Q�1(@m����y�O��%�z�o�a������o�=���������*���c�:7<��)R��G�(!��������/(c3�QN���Dӭ���zUlT)"�
||�߼�좣 2Z��P�DpݏT�z8���Kl��ʦc���术�*��[h��LM[X�����ZQR��W��z1��"�J[�K����� ����$@�A�̡:v���6�Ny����d
�j����|���)�;`��Q�Qe�c�)��EBH`;K��j�!�}c�hsnl��w���P�#)>1J��^�s`���;c�x%����8��_5�EÃ�Z������s/;>�5�����~����9��QOb8vф�X|K+���8fl�@��o�
�R�U.�ޤB�j�� ����%(�t�K��]}~ߖ9�4]1&
'/4�O��V�*<�)I���'��9��,�{i�$n�����J]�m�O��&��6�W*jI�#DB�uM�AJvc�So���R���?K���\�߲��	#�MwW�h8���$�XU����_��ӤE
�AI���.*`���S�3(^/y�ܹ�x��� �.ׅ�Ð���m����")�IT�'�u`e���Y�qr�rj~������<,q�i���їuQ���H����(Mm�rOʯ��w�ys�]sgce�c���Hn;:�w4E&�V�K9@��f.�P����������g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��(0���8���oxx.E���o�� T��^B�	�	0h

c0
0
0n`
`
 w�
�
}��
���  ��
�
,��
�
��xx �� ��� ��� �� �� � �� �H�  �� `�H8",d"P�%"PK*J[�7q�@.@.lib64/ruby/enc/utf_32le.sonuȯ��ELF>
@@'@8	@HH �� � 8X hh h   888$$(((  S�td(((  P�td���ddQ�tdR�td�� � 8PGNU�8xSż;��+�_�n-��@ BE��<)᩻�|�qX ��� h���B, $F"U�  ���  �  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_unicode_get_case_fold_codes_by_stronigenc_unicode_mbc_case_foldOnigEncAsciiToLowerCaseTableInit_utf_32lerb_enc_registeronigenc_unicode_apply_all_case_foldonigenc_unicode_property_name_to_ctypeonigenc_unicode_is_code_ctypeonigenc_utf16_32_get_ctype_code_rangeonigenc_always_false_is_allowed_reverse_matchonigenc_unicode_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�� �
� p
� � � � �� � �
 �
  `( @H   0 	8 @ 
P X � � � � � 
� � � 
� ��H��H�i H��t��H����5 �% ��h�������h��������h�������h��������%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�} H��t��fD�����=� u+UH�=Z H��tH�=. �I����d����] ]������w�������G�W����W��������ff.�f�����fD���>��@��H��H9�vH��H)�H��H��?H��>Hʃ�H)�H)��fD����L��I��H��H���������H�A��L��D�E��x�xu�xu�xtI��H��H��D���'����H�) �AB��1�f�A�H��ff.���H�W1�H9�v�?
t��u��u�1�����f���H9�rWH)�H��~^�W�G����G���������(����� ��1���������D���f�������f.��F��ff.����H�5U H�=�9�����H��H���UTF-32LE;d�������������@����P����`������������$ ���8P���L���`zRx�$8���PFJw�?:*3$"D`���@\H���#pd���
�`����\���*�x��������b���.�����t�h���GNU��
p
� ���
�
`@����P	
�� � ���o``�
� `��(	���o���o����o�o|���oh �	�	�	�	GA$3a1P	�GA$3p1113�
�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA+GLIBCXX_ASSERTIONS�
�

GA*FORTIFYutf_32le.so-3.4.4-3.el8.x86_64.debug�-�7zXZ�ִF!t/��7z]?�E�h=��ڊ�2N�sdV�ٕ��1����!�6�tm�3C<�3�[:��Td��,.w��3���U�d����:��'Dw�b�n� bt]Yxİ8QD �����
�[.;Pl��l)e��9�
կe�Lz�G�1��-��3գz_�``�c`���03�
�as�"�
_�;bu�=<�Y�>�����
��.�60T�J-xK%]��<��Qڦ�F�����l��*1��a�4(�$G,�����\�V�/���>���Dk'5����6,w�mS�Bɼxl�R	���(��8�!���O�u3��k��K<"�H�,<�3$;Ⱥ2�v���HY��b-^�h"�͂MƜ�nyg�a�/���)3������57���d,�>1�,j���X�� D���6(��X���D��Cy�1��G:��$�Ʉ�S��z��6��H܃x:3���3k�l�)4l�ւ�q+�r\rl�A��Y���R��)IT5��=:l�#m��6b9��͋�r���؆��TP���]��!a�F&��=���w�I�5�N�>4m@���X�]q����[�CV�#�D�[�R���H�d&��,��]�N��l�t�r�R��?�j� ��g׾�WK#����5�|����y�݂�{�i�5�?����V����`�#�뻌�)��!(m��d����xQ0b�3�.A(��3W��D:9���kg��<��9��7x<Q���E�ڣT,���R�
�O�ǼD�u�^ث{Cm�p�s
O_4NHb$��ٱ��6u��):Z6�"7�p�t���;`X5��b�ނW�v�|�Ѫ�Vccz�Et���d@�k�o�i@�-�P[����4t��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0``8���o||&E���o�� T��(^B��`hP	P	cp	p	Pn�	�	@w

�}��
�2��	���d�

�(( �� ��� ��� �� �h h �� �`�  �� `�H0",\"�&"PK*J[Uj0.0.lib64/ruby/enc/iso_8859_10.sonuȯ��ELF>�
@0'@8	@88 �� � 08 �� �   888$$  S�td  P�td���LLQ�tdR�td�� � 00GNU�?̈�����ή�y�=1��B BE���|�qXa��� #U���� �Ff��, F"@  S  G  �__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_10rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib646ui	X� 0� �
� �  @8 �
@ �
H `
X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�i���x����ff.�f���AVD�H��AUATL�%9UH�-1SL�L9���I9���M�YL�E�	L�XD��A�����A����A���tvE��F�lufA����A��@��E��M��C�4I��A���A��L��DA�E���d���A���L�L9��]���[H)�]D�A\A]A^�f�M��E��I��A���L���A�� twE���SL�XA��A������@sE��L���DA��@t�A�� t�E��A��A���A��E��A��wxM�ك�I��E��L���<���@A��u/M��E��I�û���A���L������f��@SE��L���q����E���s�sH��A���A������fDM�ك� I��E��L������@��H��I��I�ѺQH�5����,���H���@����I��I�ѿ,�H�5����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5� H�=�)�����H��H���ISO-8859-10����������������������������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@��4�4�4�4�4�4��4�4�4�4�4��4�4��0�0�0�0�0�0��0�0�0�0�0��0�0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;L0���h��������������������������,P���@zRx�$����PFJw�?:*3$"D��@\���#<p���F�H�B �H(�H0��
(D EBBC�����,HL W�����"����B����GNU�0�
� @�
�
`
@p
&6d�	
(� � ���o`��
z� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	5GA$3p1113@'GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_10.so-3.4.4-3.el8.x86_64.debugI	$�7zXZ�ִF!t/��S]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz
���6>�>��%2��O�^�Mu�q-������{��ۼ2�3S��g��eő7 ���м1Uv��L�c�԰�\��f���Gj�&���]�V=nd�e��^�i��H���~�7�����E�7��ACf�tkC�hk�W���\� ���{�!��9⤱���?�VC����[�Y$�
�̈R��!�@;	h?����Y��ݝ'�Qx ���PDo��(f����f��;�%��*�=��%l*��~'�	T��SŦg�m����íq�bV�x$==ꈎ���U��|V�Oo~|��`�~w�Кx6���!�?���/
��q�&k&�a��A�“��쁍҆��wԁ$}q�X�y���N|�8j��b�
�*�n�,��by�X�e❹��G���/H�r+��ߕį��I1�ާ#[�0.2ad㐄X�>���p�*F�><��k��\y��>sl嬣�&�UF��ۻ��zػ�	YJ�0���B:���{9.�@���6`0�2��#�a,�׆N��J���Rt33�
�j�w�G2j��@dC����A	�o�]���c�Y�[�v�5�?@���~�;=��!K����f�F�˶���-k�P�\�5�P�d�Y�y����|BK��  �:/�1�xR�Sv C!���Q�Oh݁ٯ�L�6�������;G�.��;}#�y�jF�l�ͺa<P��}�)�5�ٴK���~�$>�|����z���s�"�"���X5�9
�v���[�;���+\bqm�q�>l4��@Jo����2�R��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��z8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}((
�@@� ���L�� �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[�#�0.0.lib64/ruby/enc/iso_8859_1.sonuȯ��ELF>P
@0'@8	@�� �� � 08 �� �   888$$hhh  S�tdhhh  P�td   LLQ�tdR�td�� � 00GNU��h�T0�聪ֳ��
�/�@ BE���|1,\�qX� ���� z�<\U�, F"6  I  ��=  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_apply_all_case_fold_with_mapOnigEncISO_8859_1_ToLowerCaseTableInit_iso_8859_1rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64,ui	N� � �
� �  8 �@ PH X �x � 
   ( 0 P ` h p � � � 	� � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h��������%� D���%� D���%� DH�=� H�� H9�tH�n H��t	�����H�=y H�5r H)�H��H��H��?H�H�tH�E H��t��fD�����=5 u+UH�=" H��tH�=� �Y����d����
 ]������w��������x�@��w8H�H���� �A�>SuH�FH9�v�F���<Stq���x�@��w'H�H���� �A�>st���fD�P@��v�P0��wH<���<�tLH�H���� �A��H��A�H�A��D�P ��v�P��v1��D<�t�H�H���� �A���H�ssH�H�yH�SSH�H�AH�yH�� H�A(H�A<H�SsH�AD�H�y0�ff.�@��1����w��H�����x����ff.�f���AUD�H��ATL�%[USf�L�L9�smI9�shM�YL�A�L�XA�ف������A�,lf��tOA��@tFA�� D��L��A��I�Á��H��E���t�A���L�L9�r�[H)�]D�A\A]�fDE��A���A���t+���t#���t��@tA�� t
A�� ��L��D��I�Á��H���@A�� t/E���SL�XA��A���tE�@sE��L���\���fDA��u7M��D��I�Á��L��A�����)���f.��@SE��L������D���sA�sH�����A�����ff.�����I��I�ѿ�H�5����ff.���H��<�tH�S ���H����@t޸ssf��H��ff.���H�5% H�=�9�����H��H���ISO-8859-1������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@�����������0�����������0�����0������4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�0;L����h������`���������0���`�������0zRx�$P���@FJw�?:*3$"Dh���0\@���ap����#4������F�H�H �A(�
 DEBG� ���"�<���B�x���GNU��
� �P��,Z�	
�� � ���o`��
p� Hx	P(	���o���o0���o�o���o	� �	

GA$3a1�	�GA$3p1113�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYqGA+GLIBCXX_ASSERTIONSiso_8859_1.so-3.4.4-3.el8.x86_64.debug)�p��7zXZ�ִF!t/��Q]?�E�h=��ڊ�2N�a�Ӈ�+M�!L4f�a��N�uy�g�w�
9�@��*����e�v{>S����?����g�A˒�Emo�Ï��ֹ)�)��pQ���I�ПI�0�?()��@����V�ԡ��F��j���O��
���ø��z!	�����O��l�`����(O�B�o��l��Dp3��NxRB�������"|��DX[�d�2��{|f���6���C��8|���+Q�`�[�>!ц�Mx��6�����
>#�v����u
p>ۀ"�7K�UN�q`��(4�tP�?�.i;�%vl4��7�i!x:���Ǽ�"�T��s�P�fc���Є@+K9H����:��kv҆2�������j͖���ǜ���m��nPh8P�l;d}�E0��^�|af�ww��@C�,��ʉl�Ja*�Z0Ue��vz��NUEF�4k�oRv�f�~o��A��dG��:P�+�^��ƀBPN��cfn�*�V�1���GC�xNեm)�6�~�I�����@a���̸Q��j&"ˑ������yq��9.(�F���@`9ڝ�(��0�wA��eF�5'V��.������j��K!�p�h����5%��z��1�h�+#�5|ߟ	���Ѓ\�[�-�NȺ�M�51;yו����ڭ�})��Ύ=����4	�-�H�l��
��O�,kr4n\z��S�$}\�2�r5~�p� L�[$�7ņq��%��g}�aѬ_d��u_7}t�F��wÛ{���Y1ͭ�w\o�Í�6�\��@o���:�B�aACS�V�g��?|�R;�aU����٭]-@vh\�岛����9�h��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��p8���o*E���o00 TPP(^Bx	x	Hh�	�	c�	�	@n 
 
0wP
P
�}��
�  �  L�pp��hh �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[!�UY(.(.lib64/ruby/enc/emacs_mule.sonuȯ��ELF>
@('@8	@88 �� � 8X hh h   888$$  S�td  P�td���\\Q�tdR�td�� � 8PGNUяw���^Ȃ���,�1�	�@ (BE��r_�e��|�qX Fro�� �U��, �F"�  � �  �  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeOnigEncAsciiToLowerCaseTableonigenc_mbclenOnigEncAsciiCtypeTableInit_emacs_mulerb_enc_registeronigenc_is_mbc_newline_0x0aonigenc_ascii_apply_all_case_foldonigenc_ascii_get_case_fold_codes_by_stronigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_always_true_is_allowed_reverse_matchonigenc_ascii_only_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	� �
� p
� � � �
� ` � @
 0 �8 �
H �
�   ( 0 
@ P X � � � � 	� 
� � � � ��H��H�A H��t��H����5� �%� ��h�������h��������h��������%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�} H��t��fD�����=� u+UH�=Z H��tH�=. �Y����d����] ]������w�������H��H�
��xiL�GL9��|D�GH��H�J���xWL�GL9���D�GH��H�J���xUL�GL9�t|H���OH�1��<
����D�����������D��f���������D@��f�H�
��������������������H��	��������H��	���������L�E�
E��x H�	 B���H���SH��H��L��H��L��I��������~%�H�1��DE�LH��E�H�zH9�u�L�Hc�I�L�[�@��UH��H��SH�^H�����t�����H��H�^���t�����H��H�����t���(H��H��@�8HcB9Bu!H9ݺHB�H��H)�H9�uH��[]�H��H������Hc���H�p��������UH��SH��H���r9ruH�H9�s3H�{��~*H9�v%H���
DH9�vH���J���ȍJ)�9��H��[]�fDH��������뱐�����v7��x.����������w�������%n������f���f.���H��H9�v�>�w�DH9�s	H���8�w��f�����wH�� �����x����f���x,����������w���1�������D��f.���H�5� H�=.�����H��H���Emacs-Mule������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;\
�xP�@�0�����P���@�T@�h��|zRx�$��@FJw�?:*3$"D��0\���p\�|q�J(���E�G�H f
AAD(�4�oE�D�G G
AAG�x�F���'��V �GNU��
p
� �
`�@
0��
�
����p	
8� � ���o`x�
%� H(	�@	���o���o����o�o����oh �	�	�	GA$3a1p	EGA$3p1113�
7GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�
�GA+GLIBCXX_ASSERTIONSemacs_mule.so-3.4.4-3.el8.x86_64.debug�q���7zXZ�ִF!t/���h]?�E�h=��ڊ�2N�sdV��y@q�lI=;�N�@Mh�
v�g����a�׭�)��)�w�ɾ��S&�C����I)�|�^׋ܴ�y��&�*�d��U�
��v��(�à�8A��\�챏jp��K��l�\�?`�	T��>��r �Dسkd���dR��ȧv�}��X��7�	h5��X����Jظ-�ѷ�� ��We=\��(��e/��W,[7�B�!r��p�wd���-l���t��"����U�q�xt�ה��G"�;��NJ�L���������an{m���}�H��б8+�b�ij�w��D��J'�qB^��H\��e�vu<o�1X�i��,Y��q=h��k�~��33�IX~�)�h%��aCA݄�mX'��k�2��$e"���0��Aw��&�S��}�CQ��L�����!Q�I���ky���l�a$t���������@������&-���`��`�uCe�|Ë4V�i�d���n�9>�Es��aƦ��E(����d2g�z%�R�v��v��W%J�4�l�-"��	m�P�gm�b
;sl5ܢ>ޕ�HǍ@&�]}����}37�����;�a�^	�0u���F\�%��:���d��@�f�g�As��E���$�p��_[�I�47�pa
���N�h�b�A涮��Qc:�M���
⁜�͑�$#�|O>6Z�u��(�N�V�nX��|���Y.����?�yp� �rS�޹bf�c3|��X�����3&��[v���GA8n���-���O4�v�(,�B�PЕH)%���ϱ	�k���P�!<�޷�'�!l�#$ ��~��Jo���v8&c��&�疱�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0xx%8���o��(E���o�� T��@^B(	(	Hhp	p	c�	�	@n�	�	0w

7}88
�``  ���\���4� �� ��� ��� �� �h h �� �`�  �� `�H0",\"�&"PK*J[eu�@.@.lib64/ruby/enc/utf_16le.sonuȯ��ELF>
@@'@8	@�� �� � 8X hh h   888$$hhh  S�tdhhh  P�td���ddQ�tdR�td�� � 8PGNU(����K#2D���w\����!��@ HBE���|!��qX ��� h���B, $F"U�  �  ���  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_unicode_get_case_fold_codes_by_stronigenc_unicode_mbc_case_foldOnigEncAsciiToLowerCaseTableInit_utf_16lerb_enc_registeronigenc_unicode_apply_all_case_foldonigenc_unicode_property_name_to_ctypeonigenc_unicode_is_code_ctypeonigenc_utf16_32_get_ctype_code_rangeonigenc_always_false_is_allowed_reverse_matchonigenc_unicode_case_maplibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib64�ui	�� �
� p
� � � �� ��  �
  0 P( 0H p  0 	8 @ 
P X � � � � � 
� � � 
� ��H��H�i H��t��H����5 �% ��h�������h��������h�������h��������%� D���%� D���%� D���%� DH�=� H�� H9�tH�� H��t	�����H�=� H�5� H)�H��H��H��?H�H�tH�} H��t��fD�����=� u+UH�=Z H��tH�=. �I����d����] ]������w�������G������Ȁ��t�D�W�O��
%���ʁ�	��ff.�f����������ff.�f�����L��I��H��H���������M��L�A���xA�xtI��H��H��L���D���@H�I �A���H��D��H)���~H�W��у���u&����u��~$�G��<������D��ø�����f.��F�ø�����fD��H�W1�H9�v�?
t�1�����ff.�������v$������
�����f�~f��Ðf�>�����H��H9�v/H��H)�H��H��?Hʃ�H)�H������H)��P����t�@H��H�P�H9�HG����H�5 H�=�����H��H���UTF-16LE;d������������� ����@����`�����������$@���8����L���`zRx�$����PFJw�?:*3$"D ���@\���CpD����P����\���K�����Z���"����9�,���P�h���GNU��
p
� ���
0P0p����P	
�� � ���o``�
� `��(	���o���o����o�o|���oh �	�	�	�	GA$3a1P	�GA$3p1113�
�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA+GLIBCXX_ASSERTIONS�

GA*FORTIFYutf_16le.so-3.4.4-3.el8.x86_64.debugW��R�7zXZ�ִF!t/��7]?�E�h=��ڊ�2N�sdV�ٕ��1����!�6�tm�3C<�3�[{i�^zU������8��Yޤ�3s����ܽ��C����V�[����yH��g�鉐M�%��ʞ�m_������Фl	l��0�{'wĬ�|�oX��Ap��ΗGŔ-g�v��w{U�0J��ٚ�E�LѼ�-4�K�����j_/��؟~��#�7��Ms����C߄��xf7�H�PX�U��3CwD՝tR:��f��`|���q8	Q1F�z�7�B�WEƦV�,���3��I?ޑ
�v�Nr(z�Ah����:������ j���hS#��mFЯ��	�;2}�+Ş���E�r�8^��4�ɷ?�L�y�-�@��i{��]D��X/���
�p�[�F�N&n��#�x�[���ɝ�+�bt�J�~�ϟ��sN�*"U�8��_�O��|�}6�2�c�`%�$G����K�UlZs�<S��˅�B�i�נ�<����~�q���›�׀���AG3��:�R&�Ͻwi[B���zqAYzX�gVz[<�/��߾�[F�Z5�!���x�cv������:�o�z�u&F��&ui~B��~}it��
��u�����"�@�A)U��q��ր���������1��-Е�q�-��{���AD���E��Cڶ�8>�洪K��V��,-�3�=
b�E�IŦ�0��р�l�)Kv�q'%f;��o��=�Z�~��O��7oy��Q��Amo-�b�FM%Ҝ�c�E�U[K`w%��qdk�>G�e�ܪ���5w���%���爢�1C ��L�P��I��	��+�g��u�*є��BH�ϸ}F?�6�!��p��xy�]{��-j�������h;|�� �I��?,9v��B�ȱ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0``8���o||&E���o�� T��(^B��`hP	P	cp	p	Pn�	�	@w

�}��
�2��	���d�X
X
�hh �� ��� ��� �� �h h �� �`�  �� `�H0",\"�&"PK*J[)��s0.0.lib64/ruby/enc/iso_8859_9.sonuȯ��ELF>�
@0'@8	@�� �� � 08 �� �   888$$```  S�td```  P�tdLLQ�tdR�td�� � 00GNUJ[)�Ը�S��y��ݥ���@ 	BE���|�qX9,\ "U���� �Ee��, F"?  R  F  ��__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_9rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib645ui	W� 0� �
� �  �8 P@  H �
X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�����x����ff.�f���AWD�H��AVAUL�-yATL�%pUSfDL�I9�svL9�sqM�YL�A�L�XA�ف�����݃��@�������������uJM��D��I�Á��L��A�����f�E���t�L�A���I9�r�[H)�]D�A\A]A^A_�f�A��C�,tf��t
A��@����@tA�� ��f�L��D��I�Á��H���@A�� t/E���SL�XA��A���tE�@sE��L���]���fDA��u7M��D��I�Á��L��A�����*���f.��@SE��L������D���sA�sH�����A�����fDE��D��A�������I�|L��G�L5I��E��H�����DE��D��A�������it���tjL��A�� I��E��H���{���M��A��I��E��L��A�����\���A�I�Q����M��A��I��E��L��A�i�1���A������&���M��E��I��L������H��I��I�ѺQH�5�����)���H���@����I��I�ѿ�H�5�����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5U H�=.�����H��H���ISO-8859-9����������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@�����������0�����������0�����0������4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�0	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������������������������������������������������������������������i�������������������������������;L�h@����@����p����� ��� P���4����HzRx�$����PFJw�?:*3$"D����@\����#Dp����xF�H�B �I(�H0�A8��
0D(E BBBJ���,HL W�����"����B�P���GNU�0�
� �P �
@p%5c�	
�� � ���o`��
y� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	�GA$3p1113@�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_9.so-3.4.4-3.el8.x86_64.debug]�ɂ�7zXZ�ִF!t/��Q]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lzȩ
Iؠݰ�l���k�o�4gfn~(sn�A��r���7�}����h'*1<�/S�U�O�G��-�2w�j�	���"�H��>��#E �N6Z����h�gJ��*(y��2r�4�ݮ�5du&G�F�k�}b����tI��!�ع�B��)�S����Y��.�"�#�~�S�i
"�S���5���~������
���ZM����l`+%r��ݬ~�^É#��h�hA$�a��`��9��^�z�B��v��
x��e{:.W?�{��W�M!g�'��%{�4rVƒ�4B1���QD�v��A>{��oCY�i^P���#Z�f��{2���#�K�ç5�m Yr���ء�>�� T[���EvS��g!��+%��r��4-ҡ^��gI�Lo��zyI"K�{)�S���s談_ቧ��#^i};bQkA,�d�i|�\U��L���E`D��/5�}Y�t�F9zH�}�͜ڂo��S(A�8�WL��-!�\���R��zs���<�����W"ȯZC!���k:})=9L��DO�K�摰)�͊��	~�Q}�>����Թ+V:+
��B'W��j���y�\̸�
)4��>��@ ���t-O�o��iS?�ըߠ�BV����Źՠ�Y���m��O"�%"
c&�
�r��`�3z5��Hb�}F����:i��K��NS���[>0�N�m���Y����}|�����%ˍ��vht�mT��2/T%3�����Fq�QEU2�-��v��?Ia<s�p�]A��V����9�h��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��y8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
7}��
���  �L�PP�`` �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[\F��0.0.lib64/ruby/enc/iso_8859_13.sonuȯ��ELF>�
@0'@8	@ �� � 08 �� �   888$$���  S�td���  P�td���LLQ�tdR�td�� � 00GNUD�s�1s�H��"x��qZ���B BE���|b����qX #U���� �Ff��, F"@  S  �0G  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeonigenc_get_case_fold_codes_by_str_with_maponigenc_apply_all_case_fold_with_mapInit_iso_8859_13rb_enc_registeronigenc_single_byte_mbc_enc_lenonigenc_is_mbc_newline_0x0aonigenc_single_byte_mbc_to_codeonigenc_single_byte_code_to_mbclenonigenc_single_byte_code_to_mbconigenc_minimum_property_name_to_ctypeonigenc_not_support_get_ctype_code_rangeonigenc_single_byte_left_adjust_char_headonigenc_always_true_is_allowed_reverse_matchlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby34/lib646ui	X� 0� �
� �  `8 �
@ �
H �
X @x p 
   ( 0 P ` h p � � 	� � � � � 
� ��H��H� H��t��H����5� �%� ��h�������h��������h�������h��������%u D���%m D���%e D���%] DH�=y H�r H9�tH�F H��t	�����H�=I H�5B H)�H��H��H��?H�H�tH� H��t��fD�����= u+UH�=� H��tH�=� �Y����d����� ]������w������1����w��H�I���x����ff.�f���AVD�H��AUL�-ATL�%USL�L9�svI9�sqM�ZL�A�L�XA�ځ����A��C�,tf��tVA��@tMD��L��G�T5I�Á��A��H��fDE���t�A���L�L9�r�[H)�]D�A\A]A^��������@��A�� ��E��A���D��E��A��A��A���������L��A�� I��E��H���p����A�� tGE���SL�XA��A���t}�@sE��L���=���fDL��D��I�Á��H�������A��uWM��D��I�Á��L��A������f.�M��D��I�Á��L��A����������@SE��L���Q����D���sA�sH�����A�����fDL��A��I��E��H���{�����H��I��I�ѺQH�5����!���H���@����I��I�ѿ!�H�5����ff.���H��<�tH�����H����@t޸ssf��H��ff.���H�5� H�=�	�����H��H���ISO-8859-13������������������������������������������������������������������@@@@@@@@@B	BBBB@@@@@@@@@@@@@@@@@@�B�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�x�x�x�x�x�x�x�x�x�x�A�A�A�A�A�A�A�|�|�|�|�|�|�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�A�A�A�A�Q�A�x�x�x�x�x�x�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�A�A�A�A@���������4��4�����4������0���0��0�����0�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4��4�4�4�4�4�4�4�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0��0�0�0�0�0�0�0�	

 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������;LP���h��������������������@���,����@zRx�$��PFJw�?:*3$"D���@\�#<p���
F�H�I �H(�A0�
(D EBBD����,HL W��"����B�H���GNU�0�
� `�
�
�
@p
&6d�	
H� � ���o`��
z� `h	X	���o���o8���o�o
���o	� 

 
0
GA$3a1�	UGA$3p1113@GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@cGA+GLIBCXX_ASSERTIONSiso_8859_13.so-3.4.4-3.el8.x86_64.debug����7zXZ�ִF!t/��T]?�E�h=��ڊ�2N����. ���x�'�'ܰ�%P<���Lz56}��!�7ÎUq�� ���F7/�xUI�ڐujm�΃f-b��G��ŀ�2"F�c�{�[�W1IX��]=�Xf�"��8��ׂ��Yث-r�h�?�O�<B^[�i5�=-_�_����P��Z���s"��F�
���(��LW���?�;ՙ	<��P���W<�wly�??"`>i�
B������#�ٕ�G5^jV�n��5G9�xʡM��}�����|�ȍ~O����ȋ�
>��Յ2P�\xj/N$(8���xǼ�b[�@E�0�Yڷ8z�o۱'�#%����n�m�:�?�s��l8�Q�V��!�T|2~\x�QY0����y�#�}jwk�$�_,�Ҟ݇�0L!/@��qzHlX40 #a��dX��D�&�='Y'��Ơ��r��� A��i
�0�vB 2;�k�ӎ�y�qص��K5b��}X@{���w�Q��=����r	��d�e�v���1]j��%C�
L�D�>�YsO�D�@/�|��ޒ'h�/ܗ�Q�(�����*���ɔ�'p�-\pa �l�y�= H;�8�B�2x#�}��z���ȼ���,�S��V�9&IU�����/$�:��^���+�����Nΐ����O����m��;������|�����uTQ:~;̽Z��K�G�a
�D���<�K `���X4�Ld8��?nї�im1�(��g�����z}qʘp}w������1��\0߾[r8u�k����]tgQ��v�i�6��r���$:~��?�w��t8:�D�Dʐ:�'Eu�;��մ ��e	V]M��|� ���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0��z8���o

*E���o88 TXX^Bh	h	`h�	�	c�	�	Pn@
@
@w�
�
�}HH
�``@ ���L������ �� ��� ��� �� �� � �� �X�   � ` HH",t"�&"PK*J[M6m�hNhNlib64/ruby/cgi/escape.sonuȯ��ELF>�@hG@8	@@2@2 H<H< H< �� `<`< `<   888$$ 2 2 2  S�td 2 2 2  P�td///||Q�tdR�tdH<H< H< ��GNU����e��L P���*,�R 0,./BE���|�qXL��U	-	�� C;�d�/�wQt��� �^u�"�
 �$���U�^, EF"���lN@ )(@ @ 5`#m��$3__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_to_encodingrb_enc_to_indexrb_str_catruby_digit36_to_number_tablerb_str_buf_newrb_enc_getrb_enc_associaterb_enc_get_indexrb_str_duprb_enc_associate_indexrb_enc_str_coderange__stack_chk_failrb_cFalseClassrb_cvar_getrb_cFloatrb_cIntegerrb_cNilClassrb_cTrueClassrb_cSymbolruby_hexdigitsrb_str_newrb_free_tmp_bufferrb_alloc_tmp_buffer_with_countruby_malloc_size_overflowrb_string_valuerb_enc_dummy_prb_call_superrb_error_aritystrcasecmpruby_scan_digitsInitVM_escaperb_cObjectrb_define_classrb_define_module_underrb_define_aliasrb_prepend_modulerb_extend_objectInit_escaperb_ext_ractor_saferb_intern2rb_define_methodlibruby.so.3.4libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.4GLIBC_2.2.5/opt/alt/ruby34/lib64ii
.ui	8H< �P< @X< X< �? �? �? �? �? 
�? �? �? �? �? $�? %�? &�? *�> �> �> �> /�> �> 	�> 
�> �> �> �> �> �> ? ? ? ?  ? (? 0? 8? @? H? P?  X? !`? "h? #p? &x? '�? (�? )�? +��H��H�0 H��t��H����5�. �%�. ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h�������%�, D���%�, D���%�, D���%�, D���%�, D���%�, D���%�, D���%�, D���%}, D���%u, D���%m, D���%e, D���%], D���%U, D���%M, D���%E, D���%=, D���%5, D���%-, D���%%, D���%, D���%, D���%
, D���%, D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ D���%�+ DH�=), H�", H9�tH��+ H��t	�����H�=�+ H�5�+ H)�H��H��H��?H�H�tH��+ H��t��fD�����=�+ u+UH�=�+ H��tH�=�' �����d�����+ ]������w����AWAVAUATUSH��L�sH��8H�|$H���$dH�%(H�D$(1����H���S���H�H�k�D$H�L$�� tL�sH���q1�1�L�l$'E1��X<+���$���D$' M��H����L��H��M�|$H)�L��7���L��H���'���L��L9���C�><%u�M�gI9���C�T>�Ѓ�0��	v
�ƒ�߃�A��w`C�|>����0��	v�׃�߃�A@��wBH�=�) �������
�D$'H���Y���H��H�t$����H�t$H���?���@I��L9��`���H��tfH��H��1�H)�L��c���H�|$���H��H���.���H�|$����A�ċD$D9�uPH�L$(dH3%(H���H��8[]A\A]A^A_�f�L�t$L���s���H��I�H�$�,$��0�fD��H�����H��������1�u�D��H���m�����t�H�Hc�H%���H	�H�+�j������ff.�f�H�5!) H��uH��( H�8�E���D@��u
H��1����H��t:H��tD@��u@��tHH��( H�8�	���f�H��( H�8�@H�i( H�8�@H�i( H�8�@H��( H�8�w����AWAVAUATUH�oSH��HL�oH�|$(dH�%(H�L$81�H��D$4�D$4%H�L$�� tH�oM���fH�D$41�E1�1�H�D$��L�%�
���D$DD�|L�rA�G�<Qw��Ic�L�>��f�H����L)�J�t
H���7���A�� �}�|$tv�H�5�H������M��L��M9�u�H����J�t
L)�H�����H�|$(���H��H�����H�L$8dH3%(H����H��H[]A\A]A^A_�D��H��& M��H���A��H�t$���D�D$5A�D��D$6�t���M��L��M9�����Y���L��L�L$ H�T$���L�L$ H�T$H�����@H�|$(���H���M��������UH��AUATSH��L�WdH�%(H�E�1�H�TUUUUUUI9��K�4RI��H�H�����H��H��H�E�H��H���H)�H���H9�tH��H��$�H9�u�%��aH�D$H�]�H���I�T$I�$ tI�T$N�I9��cI��L�
���A�I��I9�tOH���r�H��A�4�@��t�D��I�t�A����A����E��t�A�A���M�I9�u�I)�M9���L��H������L��I���s���L��H�����H���P���L��H�]�dH3%(��H�e�[A\A]]��H�I�D��H�|�I�|�I�xL��H��H)�H)�D���H��i���fDL������I���H�VH�]�H��H���|���M�T$���f�H)�H�L����f��A�D��t�A�t��
���f.�E1�����D���t�fA�t�����L�����������ATUS��H��dH�%(H�D$1��G�����H�H��H��I��H�$���H�<$�(����xuH�������t&H������H�L$dH3%(uHH��[]A\���uH�uH�<$��Y������L�����H���ܺ�������ff.�@��SH��H�\$H�t$H�����H�|$�{����xu%H�������uH�|$���H��[�f�H�޿����H��[�ff.�f���AWAVAUATUSH��xH�t$HH�\$HH��dH�%(H�D$h1��l���H�|$H���xuH���t�����t@H�޿�c���I��H�L$hdH3%(L���MH��x[]A\A]A^A_�f.�L�t$HL����H�5�H�XH�D$0H���K�H�D$����t#H�5H���/��H�%�H��H�D$M�fM�nI� tM�nM���=H�L$SE1�L�t$E1�H�$H�L$b1�M��H�L$8H�L$TH�L$H�L$XH�L$ fDA�TH�h�T$S��&��I��M)�I9���A�T-�T$S��g�G����#�h��aukH�hL��H)�H��~CI�T-�:pos;u=H�X�D$S'M����@L��L�\$(��L�\$(I���fDuI�T-f�:mp�nfDH��I9��<���M��L�t$M��t/L��K�tL��L)��l�L����L��H���9��$���@L����I��������l�'��qu�H�hL��H)�H��~�A�|uot;�{����D$S"H�XM���1���K�t5L��L�����H�4$�L�����H�CI���?���@H�hL��H)�H���$���fA�|t;����H�X�D$S>�H�hL��I�|-H)�H���H��~�ʃ�0��	����߀�X����H�XL��H)�H�������I�|��Ѓ�0��	v��߃�A<�����H�L$ L�D$�L�\$(��L�\$(H���TH�hL��H)�H���d���fA�|t;�V���H�X�D$S<����H�L$ L�D$�
L�\$(�g�L�\$(H���D$T������H;L$����H\$XA�|;�����M����K�t5L��L��H�L$(�y�H�L$(H�|$vYL�t$8H�D$0��H��L���P0L��L��Hc��F�L�sL�����f.��z;�����H�X�D$S&�����H�4$�L���L$S���f�L��H�L$@L�\$(��H�L$@L�\$(I���>��������SH��H�\$H�t$H����H�|$�;�xu%H�����uH�|$����H��[�@H�޿��H��[�ff.�f���SH��H�\$H�t$H���E�H�|$����xu%H���M��uH�|$1�����H��[��H�޿�#�H��[�ff.�f���ATUS��H��dH�%(H�D$1��G�����H�H��H��I��H�$��H�<$�8��xuH������t&H�����H�L$dH3%(uHH��[]A\���uH�uH�<$1��l���f.�L����H���ܺ�����ff.�@��H��H�9 H�=�H�0�B�H�5�H��H�� ���H�=� H�5�H�g ���H�=[ �H�����H�5�H�I ��H�=5 �H�����H�5Y���H�= �H����H�5I��H�=� H�6H�5D��H�=� �����H�Q���H�5��H�=� H��H�5	�[�H�=� �H�8���H�5�L�H�=� �����H�	���H�5��-�H�5f H�=g ��H�5S H�=\ H���#���H�������H�=���H� H������H��H���+UTF-8ISO-8859-1mp;CGIEscapeUtilunescapeHTMLunescapeURIComponentunescape_uri_componentunescape@@accept_charset�����������������������������������������������������������������������������������&quot;&amp;&#39;&lt;&gt;;|�����������$��8P�����p������\ ���`�����zRx�$ �FJw�?:*3$"D�H\��CB�B�B �B(�A0�A8�Kp�
8A0A(B BBBC����L�@��B�B�B �B(�A0�E8�D� 
8A0A(B BBBD(��MA�C
I���s
H08���F�A�A �F0j
 AABD$l��cE�D |
AJQAH����F�B�B �B(�A0�A8�D�i
8A0A(B BBBK(�L�cE�D A
AEQA$��cE�D ~
AHQA04��F�A�A �F0j
 AABDht�mH`���3HfGNU��@X< ���D�
%H< P< ���o`0�
Z�> � �	���o���o�
���o�o�
���o`< ��� 0@P`p�������� 0@P`p�����GA$3a1�%GA$3p1113�%GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GA+GLIBCXX_ASSERTIONSescape.so-3.4.4-3.el8.x86_64.debug��'Y�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�`w͞ ��ϯ�5;D���Tx�~�&כЯ�&�'�ܪ�&H��P^���Վ�TZ�\
��(�Z�:#���-1RJ�\�z�<�X럾�y�FJ��矺�WS؊d�!�k�y��BG��*���X���;���Kܬ~���	D�?�g�bd�'�smU��5|�0�d�>Os7���u�֧�ۯ1�L�n'pN9���S��D��@�*���]K��9V��	#޾�X�5���s�+B:x��4*CV�%G�B�M5����R4��H�4,��.�IJ]^0tJWЗqش�s�����|H�����魎����`�E��\\��j��c6PY倨�Yׯ�O>$�]rI̊�հHs���ZΔwc�����I�+���3��5T��צH��z�]�
"������Vg�y�ݍ4�溚�[.�)����J��q��p�j���~'+m2K��x	���d��4:6:�bO"c��;Z�DIt|߲�D
U�,��t���$m$PH�M�E���B6m�ŸR���MX'Y�$�J�y�V߾�C�j�m7K����a�qm�r{�9���p	sw�_TW:��7�5��0�G��|6�k�Wh���59�5����T��0V��c�a_�|��w�	�Y7��X+$�)|��X0U�z8�(shY�M�;Xr�1Ƈ��[*+?V��<�D�)$�d�ܪb���x�얾�,�mJ�"eQ���	�Z�h�4|�}�^�5|�"�=�:x�u�@e���8I���H=�����e�5��G@ ���-��7G]�	�j*5��!ߪ��Y���cP)���4���ǩ�>��O`�ަ�rZZ�^Ѷ�ܦoN����̎�T�3��nrP�#���22�w�,��/��$��E���'y���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(���000Z8���o�
�
bE���o�
�
0T  �^B��h��c��n��w��3}%%
� % %�	 �//|��/�/�� 2 2 �H< H<�P< P<�X< X<�`< `< ��> �>��@ @(�(@`@HHB(pB�DF"PK*J[tUlib64/pkgconfig/ruby.pcnu�[���MAJOR=3
MINOR=4
TEENY=4
ruby_version=3.4.0
ruby_version_dir_name=
RUBY_API_VERSION=${MAJOR}.${MINOR}
RUBY_PROGRAM_VERSION=${MAJOR}.${MINOR}.${TEENY}
arch=x86_64-linux
sitearch=${arch}

RUBY_BASE_NAME=ruby
RUBY_VERSION_NAME=${RUBY_BASE_NAME}-${ruby_version_dir_name}
RUBY_SO_NAME=${RUBY_BASE_NAME}
RUBY_INSTALL_NAME=${RUBY_BASE_NAME}
prefix=/opt/alt/ruby34
exec_prefix=/opt/alt/ruby34
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib64
includedir=${exec_prefix}/include
archlibdir=/opt/alt/ruby34/lib64
sitearchlibdir=${libdir}/${sitearch}
archincludedir=${includedir}/${arch}
sitearchincludedir=${includedir}/${sitearch}
ruby=${bindir}/${RUBY_INSTALL_NAME}
rubylibprefix=${exec_prefix}/share/ruby
rubyarchprefix=/opt/alt/ruby34/lib64/ruby
rubysitearchprefix=${sitearchlibdir}/${RUBY_BASE_NAME}
rubylibdir=${rubylibprefix}
vendordir=/opt/alt/ruby34/share/ruby/vendor_ruby
sitedir=/opt/alt/ruby34/share/ruby/site_ruby
vendorlibdir=${vendordir}
sitelibdir=${sitedir}
rubyarchdir=${rubyarchprefix}
vendorarchdir=/opt/alt/ruby34/lib64/ruby/vendor_ruby
sitearchdir=/opt/alt/ruby34/lib64/ruby/site_ruby
rubyhdrdir=/opt/alt/ruby34/include
vendorhdrdir=${rubyhdrdir}/vendor_ruby
sitehdrdir=${rubyhdrdir}/site_ruby
rubyarchhdrdir=/opt/alt/ruby34/include
vendorarchhdrdir=${vendorhdrdir}/${arch}
sitearchhdrdir=${sitehdrdir}/${arch}
MAINLIBS=-lz -lrt -lrt -lgmp -ldl -lcrypt -lm -lpthread 
SOEXT=so
LIBPATH=@LIBPATH@
LIBRUBY_A=lib${RUBY_SO_NAME}-static.a
LIBRUBY_SO=lib${RUBY_SO_NAME}.${SOEXT}.${RUBY_PROGRAM_VERSION}
LIBRUBY=${LIBRUBY_SO}
LIBRUBYARG_SHARED=-Wl,-rpath,${archlibdir} -L${archlibdir} -l${RUBY_SO_NAME}
LIBRUBYARG_STATIC=-Wl,-rpath,${archlibdir} -L${archlibdir} -l${RUBY_SO_NAME}-static ${MAINLIBS}
LIBRUBYARG=${LIBRUBYARG_SHARED}
LIBS=-lm -lpthread 
DLDFLAGS=-Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld

Name: Ruby
Description: Object Oriented Script Language
Version: ${RUBY_PROGRAM_VERSION}
URL: https://www.ruby-lang.org
Cflags: -I${rubyarchhdrdir} -I${rubyhdrdir}
Libs: ${DLDFLAGS} ${LIBRUBYARG_SHARED} ${LIBS}
Requires:
PK#J[߫i�bin/rakenuȯ��PK#J[SHجVVRbin/syntax_suggestnuȯ��PK#J[��A&&
�bin/rackupnuȯ��PK#J[*Z�Jbin/rinuȯ��PK#J[��	�	bin/rdocnuȯ��PK#J[ci��bin/gemnuȯ��PK#J[j$��#
bin/erbnuȯ��PK#J[���;;
nbin/bundlenuȯ��PK$J[g���==�bin/bundlernuȯ��PK$J[]�rH/H/[bin/rubynuȯ��PK$J[�O�!�!)�Cshare/systemtap/tapset/libruby.so.3.4.stpnu�[���PK$J[vP��
�
#
fshare/doc/alt-ruby34-libs/README.mdnu�[���PK$J[�b�e��!Htshare/doc/alt-ruby34-libs/NEWS.mdnu�[���PK$J[�Z������6share/rubygems/rubygems.rbnu�[���PK$J[kRF��*��share/rubygems/rubygems/target_rbconfig.rbnu�[���PK$J[�/��3?3?"<�share/rubygems/rubygems/command.rbnu�[���PK$J[�B!�share/rubygems/rubygems/errors.rbnu�[���PK$J[���r�	�	*-'share/rubygems/rubygems/yaml_serializer.rbnu�[���PK$J[��5i  (11share/rubygems/rubygems/specification.rbnu�[���PK$J[Gϝ��#�Eshare/rubygems/rubygems/defaults.rbnu�[���PK$J[<$��'�'/�cshare/rubygems/rubygems/dependency_installer.rbnu�[���PK$J[v4k��V�V#��share/rubygems/rubygems/security.rbnu�[���PK$J[�J�'""!��share/rubygems/rubygems/source.rbnu�[���PK$J[< n�WW%
�share/rubygems/rubygems/psych_tree.rbnu�[���PK$J[�9�BB%��share/rubygems/rubygems/shellwords.rbnu�[���PK$J[|�+�44*P�share/rubygems/rubygems/dependency_list.rbnu�[���PK$J[�TBB1�share/rubygems/rubygems/install_update_options.rbnu�[���PK$J[��Ȉ0�/share/rubygems/rubygems/ext/configure_builder.rbnu�[���PK$J[�HK~7
7
/�2share/rubygems/rubygems/ext/ext_conf_builder.rbnu�[���PK$J[�r�֛�,{=share/rubygems/rubygems/ext/cmake_builder.rbnu�[���PK$J[�ɧ�mm&r@share/rubygems/rubygems/ext/builder.rbnu�[���PK$J[���266+5]share/rubygems/rubygems/ext/rake_builder.rbnu�[���PK$J[\r]�e(e(,�ashare/rubygems/rubygems/ext/cargo_builder.rbnu�[���PK$J[�>���@��share/rubygems/rubygems/ext/cargo_builder/link_flag_converter.rbnu�[���PK$J[[�W���*�share/rubygems/rubygems/ext/build_error.rbnu�[���PK$J[Q�e��%�%)�share/rubygems/rubygems/remote_fetcher.rbnu�[���PK%J[L�����0ʹshare/rubygems/rubygems/commands/list_command.rbnu�[���PK%J[��d���:�share/rubygems/rubygems/commands/generate_index_command.rbnu�[���PK%J[�
���0e�share/rubygems/rubygems/commands/exec_command.rbnu�[���PK%J[�� ��3��share/rubygems/rubygems/commands/sources_command.rbnu�[���PK%J[N��X��2��share/rubygems/rubygems/commands/unpack_command.rbnu�[���PK%J[Xi�^3�share/rubygems/rubygems/commands/cleanup_command.rbnu�[���PK%J[��L�$�$0\share/rubygems/rubygems/commands/cert_command.rbnu�[���PK%J[�X9ll5D;share/rubygems/rubygems/commands/uninstall_command.rbnu�[���PK%J[�Q BB0Sshare/rubygems/rubygems/commands/info_command.rbnu�[���PK%J[D^dl�
�
1�Vshare/rubygems/rubygems/commands/fetch_command.rbnu�[���PK%J[G`SOGG1�ashare/rubygems/rubygems/commands/setup_command.rbnu�[���PK%J[D��p
p
15�share/rubygems/rubygems/commands/owner_command.rbnu�[���PK&J[bF葝�0�share/rubygems/rubygems/commands/open_command.rbnu�[���PK&J[�	U1��3�share/rubygems/rubygems/commands/signout_command.rbnu�[���PK&J[����2��share/rubygems/rubygems/commands/server_command.rbnu�[���PK&J[��4``4��share/rubygems/rubygems/commands/outdated_command.rbnu�[���PK&J[�ؿ�d	d	0��share/rubygems/rubygems/commands/yank_command.rbnu�[���PK&J[��Y���0[�share/rubygems/rubygems/commands/push_command.rbnu�[���PK&J[�v�(�(0��share/rubygems/rubygems/commands/help_command.rbnu�[���PK&J[�Z�!!3�	share/rubygems/rubygems/commands/rebuild_command.rbnu�[���PK&J[�V�-	-	1&'share/rubygems/rubygems/commands/check_command.rbnu�[���PK&J[�A��
�
0�0share/rubygems/rubygems/commands/lock_command.rbnu�[���PK&J[��r�2!2!2�;share/rubygems/rubygems/commands/update_command.rbnu�[���PK&J[
6}�VV6j]share/rubygems/rubygems/commands/dependency_command.rbnu�[���PK&J[ZAQ
��2&rshare/rubygems/rubygems/commands/search_command.rbnu�[���PK&J[9�:4��1Jvshare/rubygems/rubygems/commands/query_command.rbnu�[���PK&J[gpY��
�
9�{share/rubygems/rubygems/commands/specification_command.rbnu�[���PK'J[�m�a��4ʼnshare/rubygems/rubygems/commands/pristine_command.rbnu�[���PK'J[�])�[[1�share/rubygems/rubygems/commands/which_command.rbnu�[���PK'J[LT�b��2��share/rubygems/rubygems/commands/signin_command.rbnu�[���PK'J[U�+��7��share/rubygems/rubygems/commands/environment_command.rbnu�[���PK'J[K=@BB4��share/rubygems/rubygems/commands/contents_command.rbnu�[���PK'J[���&&3f�share/rubygems/rubygems/commands/install_command.rbnu�[���PK'J[��R���1�share/rubygems/rubygems/commands/stale_command.rbnu�[���PK'J[]h&<��1�share/rubygems/rubygems/commands/build_command.rbnu�[���PK'J[ߘ�|��0.share/rubygems/rubygems/commands/rdoc_command.rbnu�[���PK'J[��ss2\share/rubygems/rubygems/commands/mirror_command.rbnu�[���PK'J[�[!lkk,1share/rubygems/rubygems/update_suggestion.rbnu�[���PK'J[!�!���,�share/rubygems/rubygems/vendored_net_http.rbnu�[���PK'J[��{]]2=share/rubygems/rubygems/install_default_message.rbnu�[���PK'J[s!,ނ�&�share/rubygems/rubygems/requirement.rbnu�[���PK'J[�f����$�:share/rubygems/rubygems/util/list.rbnu�[���PK(J[�Ŝ��8�8(�=share/rubygems/rubygems/util/licenses.rbnu�[���PK(J[HJ8��
�
0Dwshare/rubygems/rubygems/safe_marshal/elements.rbnu�[���PK(J[��O%O%.t�share/rubygems/rubygems/safe_marshal/reader.rbnu�[���PK(J[�X�008!�share/rubygems/rubygems/safe_marshal/visitors/visitor.rbnu�[���PK(J[�I�m��?��share/rubygems/rubygems/safe_marshal/visitors/stream_printer.rbnu�[���PK(J[<VDs�.�.8�share/rubygems/rubygems/safe_marshal/visitors/to_ruby.rbnu�[���PK(J[""5�����share/rubygems/rubygems/rdoc.rbnu�[���PK(J[�t�
BB��share/rubygems/rubygems/text.rbnu�[���PK(J[0�VV�,�,.P�share/rubygems/rubygems/gemcutter_utilities.rbnu�[���PK(J[}y�S��%�share/rubygems/rubygems/exceptions.rbnu�[���PK(J[ovc���'�8share/rubygems/rubygems/spec_fetcher.rbnu�[���PK(J[��N��%�Wshare/rubygems/rubygems/gem_runner.rbnu�[���PK(J[���б�'s`share/rubygems/rubygems/safe_marshal.rbnu�[���PK(J[zN�g\>\>/{hshare/rubygems/rubygems/specification_policy.rbnu�[���PK(J[p��)46�share/rubygems/rubygems/defaults/operating_system.rbnu�[���PK(J[��{�6��share/rubygems/rubygems/installer_uninstaller_utils.rbnu�[���PK(J[�?���*�share/rubygems/rubygems/gemspec_helpers.rbnu�[���PK(J[#�Y��(�share/rubygems/rubygems/s3_uri_signer.rbnu�[���PK(J[[n65�!�!#�share/rubygems/rubygems/platform.rbnu�[���PK(J[��'�share/rubygems/rubygems/path_support.rbnu�[���PK(J[��I��
�
I~�share/rubygems/rubygems/gemcutter_utilities/webauthn_listener/response.rbnu�[���PK(J[0��

@�
	share/rubygems/rubygems/gemcutter_utilities/webauthn_listener.rbnu�[���PK(J[L]�
�
>
	share/rubygems/rubygems/gemcutter_utilities/webauthn_poller.rbnu�[���PK(J[��;}}"%	share/rubygems/rubygems/openssl.rbnu�[���PK(J[�2�<<*�%	share/rubygems/rubygems/security_option.rbnu�[���PK(J[�Gy�II)s*	share/rubygems/rubygems/vendored_tsort.rbnu�[���PK(J[ђSÛ�8+	share/rubygems/rubygems/unknown_command_spell_checker.rbnu�[���PK(J[]�Y(��)-	share/rubygems/rubygems/version_option.rbnu�[���PK(J[�䌸..,$6	share/rubygems/rubygems/package/io_source.rbnu�[���PK(J[k��{yy3�9	share/rubygems/rubygems/package/tar_reader/entry.rbnu�[���PK(J[�^x{HH)�K	share/rubygems/rubygems/package/source.rbnu�[���PK(J[�;��-+L	share/rubygems/rubygems/package/tar_header.rbnu�[���PK(J[|�@��-f	share/rubygems/rubygems/package/tar_reader.rbnu�[���PK(J[��c_MM,n	share/rubygems/rubygems/package/digest_io.rbnu�[���PK(J[bb.�s	share/rubygems/rubygems/package/file_source.rbnu�[���PK(J[��-�v	share/rubygems/rubygems/package/tar_writer.rbnu�[���PK(J[���&�	share/rubygems/rubygems/package/old.rbnu�[���PK(J[Fj�'''��	share/rubygems/rubygems/package_task.rbnu�[���PK(J[I��5�"�""?�	share/rubygems/rubygems/request.rbnu�[���PK(J[��d5d5"_�	share/rubygems/rubygems/version.rbnu�[���PK(J[�6
�!�!&
share/rubygems/rubygems/query_utils.rbnu�[���PK(J[$_l
/j.
share/rubygems/rubygems/request_set/lockfile.rbnu�[���PK(J[��D3�
�
9�C
share/rubygems/rubygems/request_set/lockfile/tokenizer.rbnu�[���PK(J[/W�2��6CO
share/rubygems/rubygems/request_set/lockfile/parser.rbnu�[���PK(J[�8~��V�V9�l
share/rubygems/rubygems/request_set/gem_dependency_api.rbnu�[���PK)J[�.�V
:
:1��
share/rubygems/rubygems/vendor/tsort/lib/tsort.rbnu�[���PK)J[7O��V	V	?C�
share/rubygems/rubygems/vendor/securerandom/lib/securerandom.rbnu�[���PK)J[1�`v]v]3share/rubygems/rubygems/vendor/resolv/lib/resolv.rbnu�[���PK)J[�?��pp@�eshare/rubygems/rubygems/vendor/molinillo/lib/molinillo/errors.rbnu�[���PK)J[����$$?�~share/rubygems/rubygems/vendor/molinillo/lib/molinillo/state.rbnu�[���PK)J[JT�܂���DT�share/rubygems/rubygems/vendor/molinillo/lib/molinillo/resolution.rbnu�[���PK)J[�
5bbZJ

share/rubygems/rubygems/vendor/molinillo/lib/molinillo/delegates/specification_provider.rbnu�[���PK)J[#:1V��T6
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rbnu�[���PK)J[���wwF�!
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rbnu�[���PK)J[�,�B�"
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/resolver.rbnu�[���PK)J[�E�D+)
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/modules/ui.rbnu�[���PK)J[�օSSXf0
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/modules/specification_provider.rbnu�[���PK)J[��]�SSVAA
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rbnu�[���PK)J[J�N��QF
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/action.rbnu�[���PK)J[�19�DDQ3J
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rbnu�[���PK)J[��?__U�^
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rbnu�[���PK)J[N�讟�N�e
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/tag.rbnu�[���PK)J[U�=�V�h
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rbnu�[���PK)J[f�gN�p
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/log.rbnu�[���PK)J[��8��^6
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rbnu�[���PK)J[N��kk_��
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rbnu�[���PK)J[�~R� � J��
share/rubygems/rubygems/vendor/molinillo/lib/molinillo/dependency_graph.rbnu�[���PK)J[�,��QQ9ۮ
share/rubygems/rubygems/vendor/molinillo/lib/molinillo.rbnu�[���PK)J[�Pyjj2��
share/rubygems/rubygems/vendor/uri/lib/uri/ldap.rbnu�[���PK)J[�_�3a�
share/rubygems/rubygems/vendor/uri/lib/uri/ldaps.rbnu�[���PK)J[g� |C�C�5��
share/rubygems/rubygems/vendor/uri/lib/uri/generic.rbnu�[���PK)J[l���qq<cshare/rubygems/rubygems/vendor/uri/lib/uri/rfc3986_parser.rbnu�[���PK)J[�
�BB3\|share/rubygems/rubygems/vendor/uri/lib/uri/https.rbnu�[���PK)J[�T�0��5share/rubygems/rubygems/vendor/uri/lib/uri/version.rbnu�[���PK)J[u�2��1�share/rubygems/rubygems/vendor/uri/lib/uri/ftp.rbnu�[���PK)J[0�xFF<+�share/rubygems/rubygems/vendor/uri/lib/uri/rfc2396_parser.rbnu�[���PK)J[�
���4��share/rubygems/rubygems/vendor/uri/lib/uri/mailto.rbnu�[���PK)J[H�)<''1�share/rubygems/rubygems/vendor/uri/lib/uri/wss.rbnu�[���PK)J[N�}d]	]	2nshare/rubygems/rubygems/vendor/uri/lib/uri/file.rbnu�[���PK)J[r��	;	;	0-share/rubygems/rubygems/vendor/uri/lib/uri/ws.rbnu�[���PK)J[���k�k4�share/rubygems/rubygems/vendor/uri/lib/uri/common.rbnu�[���PK)J[�����2�share/rubygems/rubygems/vendor/uri/lib/uri/http.rbnu�[���PK)J[k��&
&
-'�share/rubygems/rubygems/vendor/uri/lib/uri.rbnu�[���PK)J[%^��335��share/rubygems/rubygems/vendor/timeout/lib/timeout.rbnu�[���PK)J[L��;;;B�share/rubygems/rubygems/vendor/optparse/lib/optionparser.rbnu�[���PK)J[7��>�share/rubygems/rubygems/vendor/optparse/lib/optparse/kwargs.rbnu�[���PK)J[�ua���:'�share/rubygems/rubygems/vendor/optparse/lib/optparse/ac.rbnu�[���PK)J[O����<��share/rubygems/rubygems/vendor/optparse/lib/optparse/date.rbnu�[���PK)J["�j���B}�share/rubygems/rubygems/vendor/optparse/lib/optparse/shellwords.rbnu�[���PK)J[�.U��<��share/rubygems/rubygems/vendor/optparse/lib/optparse/time.rbnu�[���PK)J[�S�?��?��share/rubygems/rubygems/vendor/optparse/lib/optparse/version.rbnu�[���PK)J[l�V��;��share/rubygems/rubygems/vendor/optparse/lib/optparse/uri.rbnu�[���PK)J[:�V��7�share/rubygems/rubygems/vendor/optparse/lib/optparse.rbnu�[���PK)J[݌���>Q�share/rubygems/rubygems/vendor/net-http/lib/net/http/header.rbnu�[���PK)J[�!�.1.1G�Zshare/rubygems/rubygems/vendor/net-http/lib/net/http/generic_request.rbnu�[���PK)J[T,u`�N�N@e�share/rubygems/rubygems/vendor/net-http/lib/net/http/response.rbnu�[���PK)J[�q�^
8
8@��share/rubygems/rubygems/vendor/net-http/lib/net/http/requests.rbnu�[���PK)J[�sN�t�t�A3share/rubygems/rubygems/vendor/net-http/lib/net/http/responses.rbnu�[���PK)J[M?�iC�share/rubygems/rubygems/vendor/net-http/lib/net/http/proxy_delta.rbnu�[���PK)J[���TTB��share/rubygems/rubygems/vendor/net-http/lib/net/http/exceptions.rbnu�[���PK)J[`9d�
	
	>e�share/rubygems/rubygems/vendor/net-http/lib/net/http/status.rbnu�[���PK)J[���?��share/rubygems/rubygems/vendor/net-http/lib/net/http/request.rbnu�[���PK)J[�_k#""8R�share/rubygems/rubygems/vendor/net-http/lib/net/https.rbnu�[���PK)J[���_�_7��share/rubygems/rubygems/vendor/net-http/lib/net/http.rbnu�[���PK)J[^�ژY.Y.?:2share/rubygems/rubygems/vendor/net-protocol/lib/net/protocol.rbnu�[���PK)J[,8�e��1ashare/rubygems/rubygems/bundler_version_finder.rbnu�[���PK)J[���n�n$<ishare/rubygems/rubygems/installer.rbnu�[���PK)J[`���	�	%��share/rubygems/rubygems/name_tuple.rbnu�[���PK)J[JNBg�	�	b�share/rubygems/rubygems/uri.rbnu�[���PK)J[U���''$4�share/rubygems/rubygems/deprecate.rbnu�[���PK)J[5{�y&-&-&�share/rubygems/rubygems/request_set.rbnu�[���PK)J[O���!�!%+.share/rubygems/rubygems/dependency.rbnu�[���PK)J[]�B#��/LPshare/rubygems/rubygems/specification_record.rbnu�[���PK)J[�ǀ���eshare/rubygems/rubygems/ext.rbnu�[���PK)J[��@D�	�	-�gshare/rubygems/rubygems/security/trust_dir.rbnu�[���PK)J[ݯg���*rshare/rubygems/rubygems/security/signer.rbnu�[���PK)J[���T11*3�share/rubygems/rubygems/security/policy.rbnu�[���PK)J[�ҽ�??,��share/rubygems/rubygems/security/policies.rbnu�[���PK)J[�z�ʄ�!Y�share/rubygems/rubygems/doctor.rbnu�[���PK)J[��(++$.�share/rubygems/rubygems/safe_yaml.rbnu�[���PK)J[ދL�<A<A&��share/rubygems/rubygems/config_file.rbnu�[���PK)J[�^	1QKQK"?	share/rubygems/rubygems/package.rbnu�[���PK)J[t�<M��*�Tshare/rubygems/rubygems/command_manager.rbnu�[���PK)J[(��CC*�kshare/rubygems/rubygems/install_message.rbnu�[���PK)J[֖i=��$kmshare/rubygems/rubygems/validator.rbnu�[���PK)J[v����+D|share/rubygems/rubygems/vendored_timeout.rbnu�[���PK)J[
Y+�+�+&�}share/rubygems/rubygems/uninstaller.rbnu�[���PK)J[�H��-��share/rubygems/rubygems/stub_specification.rbnu�[���PK)J[Lת�%�%#��share/rubygems/rubygems/resolver.rbnu�[���PK)J[��':��(��share/rubygems/rubygems/compatibility.rbnu�[���PK)J[��	@,�share/rubygems/rubygems/request/http_pool.rbnu�[���PK)J[Z_���	�	3��share/rubygems/rubygems/request/connection_pools.rbnu�[���PK)J[fޟ���-o�share/rubygems/rubygems/request/https_pool.rbnu�[���PK)J[�,7�WW0��share/rubygems/rubygems/vendored_securerandom.rbnu�[���PK)J[�_N��&n�share/rubygems/rubygems/source/lock.rbnu�[���PK)J[~�}}��%P�share/rubygems/rubygems/source/git.rbnu�[���PK)J[¨y-'Xshare/rubygems/rubygems/source/local.rbnu�[���PK)J[_t'+��(�share/rubygems/rubygems/source/vendor.rbnu�[���PK)J[�Gc���+�share/rubygems/rubygems/source/installed.rbnu�[���PK)J[��z�/�"share/rubygems/rubygems/source/specific_file.rbnu�[���PK)J[����
�
5K)share/rubygems/rubygems/resolver/api_specification.rbnu�[���PK)J[V��å
�
1�4share/rubygems/rubygems/resolver/specification.rbnu�[���PK)J["�~��-�?share/rubygems/rubygems/resolver/index_set.rbnu�[���PK)J[�h��		6�Eshare/rubygems/rubygems/resolver/dependency_request.rbnu�[���PK)J[֚��.Oshare/rubygems/rubygems/resolver/vendor_set.rbnu�[���PK)J[�K�j��)Wshare/rubygems/rubygems/resolver/stats.rbnu�[���PK)J[����,)[share/rubygems/rubygems/resolver/lock_set.rbnu�[���PK)J[	��@��.$bshare/rubygems/rubygems/resolver/source_set.rbnu�[���PK)J[���0%fshare/rubygems/rubygems/resolver/composed_set.rbnu�[���PK)J[Qh9���;2kshare/rubygems/rubygems/resolver/installed_specification.rbnu�[���PK)J[q��XX4upshare/rubygems/rubygems/resolver/requirement_list.rbnu�[���PK)J[jaMG^^+1vshare/rubygems/rubygems/resolver/git_set.rbnu�[���PK)J[N��BB6�share/rubygems/rubygems/resolver/lock_specification.rbnu�[���PK)J[Mr����'��share/rubygems/rubygems/resolver/set.rbnu�[���PK)J[N��h��,Ύshare/rubygems/rubygems/resolver/conflict.rbnu�[���PK)J[޻ڢ��+�share/rubygems/rubygems/resolver/api_set.rbnu�[���PK)J[]�Z^^1�share/rubygems/rubygems/resolver/installer_set.rbnu�[���PK)J[e�h���6�share/rubygems/rubygems/resolver/spec_specification.rbnu�[���PK)J[��3=##7��share/rubygems/rubygems/resolver/local_specification.rbnu�[���PK)J[){Y%��,s�share/rubygems/rubygems/resolver/best_set.rbnu�[���PK)J[���Ϙ�6}�share/rubygems/rubygems/resolver/activation_request.rbnu�[���PK)J[��͞AA8{�share/rubygems/rubygems/resolver/vendor_specification.rbnu�[���PK)J[�^5$�share/rubygems/rubygems/resolver/git_specification.rbnu�[���PK)J[��w	w	7��share/rubygems/rubygems/resolver/index_specification.rbnu�[���PK)J[A�=��6z�share/rubygems/rubygems/resolver/api_set/gem_parser.rbnu�[���PK)J[F0T�/��share/rubygems/rubygems/resolver/current_set.rbnu�[���PK)J[�{G��	�	&�share/rubygems/rubygems/util.rbnu�[���PK)J[Fߺ̎�2L�share/rubygems/rubygems/core_ext/tcpsocket_init.rbnu�[���PK)J[�i���.<share/rubygems/rubygems/core_ext/kernel_gem.rbnu�[���PK)J[,f\���/^share/rubygems/rubygems/core_ext/kernel_warn.rbnu�[���PK)J[����SS2�share/rubygems/rubygems/core_ext/kernel_require.rbnu�[���PK)J[:>��	�	&F!share/rubygems/rubygems/source_list.rbnu�[���PK)J[a��i4i4+N+share/rubygems/rubygems/user_interaction.rbnu�[���PK)J[">O�QQ-`share/rubygems/rubygems/vendored_molinillo.rbnu�[���PK)J[�j�K[[/�`share/rubygems/rubygems/local_remote_options.rbnu�[���PK)J[�7�XOO,zoshare/rubygems/rubygems/vendored_optparse.rbnu�[���PK)J[C���(%pshare/rubygems/rubygems/available_set.rbnu�[���PK)J[���V(�|share/rubygems/rubygems/uri_formatter.rbnu�[���PK)J[<%�l� � .�share/rubygems/rubygems/basic_specification.rbnu�[���PK)J[�-�h��&Ϡshare/rubygems/rubygems/ci_detector.rbnu�[���PK)J[z�x
\\��share/man/man5/gemfile.5nu�[���PK)J[�=�ooFshare/man/man1/bundle-doctor.1nu�[���PK)J[$��$DDshare/man/man1/bundle-exec.1nu�[���PK)J[iI�rr�+share/man/man1/bundle-plugin.1nu�[���PK)J[�Wj	RRS4share/man/man1/bundle-env.1nu�[���PK)J[�(��5share/man/man1/bundle-info.1nu�[���PK)J[�w.od6d6H8share/man/man1/bundle-update.1nu�[���PK)J[!���nshare/man/man1/bundle-open.1nu�[���PK)J[�crshare/man/man1/bundle-issue.1nu�[���PK)J[w����wshare/man/man1/bundle-show.1nu�[���PK)J[�ǘD��{share/man/man1/bundle-console.1nu�[���PK)J[�����$�share/man/man1/rake.1nu�[���PK)J[?������share/man/man1/bundle-gem.1nu�[���PK)J[v�I��	�share/man/man1/bundle.1nu�[���PK)J[<�N77 �share/man/man1/bundle-licenses.1nu�[���PK)J[_�B]]��share/man/man1/ruby.1nu�[���PK)J[#��/�� �share/man/man1/bundle-platform.1nu�[���PK)J[nu#ZDD�share/man/man1/bundle-remove.1nu�[���PK)J[0���T!share/man/man1/erb.1nu�[���PK)J[������.share/man/man1/bundle-inject.1nu�[���PK)J[�s	vv �2share/man/man1/bundle-pristine.1nu�[���PK)J[.�
F�� �9share/man/man1/bundle-binstubs.1nu�[���PK)J[��TTx@share/man/man1/bundle-check.1nu�[���PK)J[X��fnnEshare/man/man1/bundle-fund.1nu�[���PK)J[�� YTYT�Gshare/man/man1/bundle-config.1nu�[���PK)J[>��.��z�share/man/man1/bundle-cache.1nu�[���PK)J[v�U��V�share/man/man1/bundle-list.1nu�[���PK)J[��}jjV�share/man/man1/bundle-version.1nu�[���PK)J[�h$u���share/man/man1/bundle-init.1nu�[���PK)J[��^����share/man/man1/bundle-viz.1nu�[���PK)J[�v|��(�share/man/man1/bundle-clean.1nu�[���PK)J[3�8:��K�share/man/man1/ri.1nu�[���PK)J[n�0�yByBq�share/man/man1/bundle-install.1nu�[���PK)J[�R���9share/man/man1/bundle-help.1nu�[���PK)J[�` ��
�
 Eshare/man/man1/bundle-outdated.1nu�[���PK)J[��l���+)share/man/man1/bundle-lock.1nu�[���PK)J[^F�((8share/man/man1/bundle-add.1nu�[���PK)J[L�Cshare/gems/extensions/x86_64-linux/3.4.0/bigdecimal-3.1.8/gem.build_completenu�[���PK)J[I��>>!�Cshare/gems/cache/rackup-2.1.0.gemnu�[���PK)J[�"����N�share/gems/cache/rack-3.0.8.gemnu�[���PK)J[�U.�*share/gems/specifications/rackup-2.1.0.gemspecnu�[���PK)J[�x-0share/gems/specifications/rdoc-6.10.0.gemspecnu�[���PK)J[�kɟMM6vGshare/gems/specifications/default/tmpdir-0.3.1.gemspecnu�[���PK)J[�'��3)Lshare/gems/specifications/default/erb-4.0.4.gemspecnu�[���PK)J[���w��4'Rshare/gems/specifications/default/zlib-3.2.1.gemspecnu�[���PK)J[&
�@@5aVshare/gems/specifications/default/prism-1.2.0.gemspecnu�[���PK)J[��??;_share/gems/specifications/default/io-nonblock-0.3.1.gemspecnu�[���PK)J[S�
2�cshare/gems/specifications/default/pp-0.6.2.gemspecnu�[���PK)J[�x�%4	4	>hshare/gems/specifications/default/syntax_suggest-2.0.2.gemspecnu�[���PK)J[�!�$??6�qshare/gems/specifications/default/resolv-0.6.0.gemspecnu�[���PK)J[#T���6`vshare/gems/specifications/default/pstore-0.1.4.gemspecnu�[���PK)J[��ɑ��<Mzshare/gems/specifications/default/securerandom-0.4.1.gemspecnu�[���PK)J[����8�~share/gems/specifications/default/open-uri-0.5.0.gemspecnu�[���PK)J[%~y''8��share/gems/specifications/default/optparse-0.6.0.gemspecnu�[���PK)J[����##8H�share/gems/specifications/default/stringio-3.1.2.gemspecnu�[���PK)J[����884ӎshare/gems/specifications/default/time-0.4.1.gemspecnu�[���PK)J[�r�-??7o�share/gems/specifications/default/ostruct-0.6.1.gemspecnu�[���PK)J[jwQQ7�share/gems/specifications/default/io-wait-0.3.1.gemspecnu�[���PK)J[$�t���9͛share/gems/specifications/default/benchmark-0.4.0.gemspecnu�[���PK)J[���o6�share/gems/specifications/default/logger-1.6.4.gemspecnu�[���PK)J[='�;x�share/gems/specifications/default/prettyprint-0.2.0.gemspecnu�[���PK)J[jLDz��4�share/gems/specifications/default/yaml-0.4.0.gemspecnu�[���PK)J[������6
�share/gems/specifications/default/reline-0.6.0.gemspecnu�[���PK)J[���__66�share/gems/specifications/default/digest-3.2.0.gemspecnu�[���PK)J[l2@��9��share/gems/specifications/default/fileutils-1.7.3.gemspecnu�[���PK)J[���7��share/gems/specifications/default/timeout-0.4.3.gemspecnu�[���PK)J[�����3x�share/gems/specifications/default/cgi-0.4.2.gemspecnu�[���PK)J[=���5��share/gems/specifications/default/tsort-0.2.0.gemspecnu�[���PK)J[&�x���7��share/gems/specifications/default/strscan-3.1.2.gemspecnu�[���PK)J[���?��share/gems/specifications/default/error_highlight-0.7.0.gemspecnu�[���PK)J[�?��7r�share/gems/specifications/default/english-0.8.0.gemspecnu�[���PK)J[h�����9��share/gems/specifications/default/singleton-0.3.0.gemspecnu�[���PK)J[�E����8��share/gems/specifications/default/pathname-0.4.0.gemspecnu�[���PK)J[7Z�ss<��share/gems/specifications/default/net-protocol-0.2.2.gemspecnu�[���PK)J[�ƻ:333��share/gems/specifications/default/set-1.1.1.gemspecnu�[���PK)J[��G���7L�share/gems/specifications/default/openssl-3.3.0.gemspecnu�[���PK)J[�iu߱�3��share/gems/specifications/default/etc-1.4.5.gemspecnu�[���PK)J[�pL��5��share/gems/specifications/default/open3-0.2.1.gemspecnu�[���PK)J[}\4�share/gems/specifications/default/date-3.4.1.gemspecnu�[���PK)J[͕�~��;3share/gems/specifications/default/forwardable-1.3.3.gemspecnu�[���PK)J[�Oή�2*share/gems/specifications/default/un-0.3.0.gemspecnu�[���PK)J[#N�V==8:share/gems/specifications/default/net-http-0.6.0.gemspecnu�[���PK)J[Pn����4�share/gems/specifications/default/find-0.2.0.gemspecnu�[���PK)J[�!��3
share/gems/specifications/default/uri-1.0.3.gemspecnu�[���PK)J[����:Xshare/gems/specifications/default/shellwords-0.2.2.gemspecnu�[���PK)J[��{(zz6�#share/gems/specifications/default/ipaddr-1.2.7.gemspecnu�[���PK)J[�&o҅�>�'share/gems/specifications/default/ruby2_keywords-0.0.5.gemspecnu�[���PK)J[�����7�+share/gems/specifications/default/weakref-0.1.3.gemspecnu�[���PK)J[�>���80share/gems/specifications/default/tempfile-0.3.1.gemspecnu�[���PK)J[-����5+4share/gems/specifications/default/fcntl-1.2.0.gemspecnu�[���PK)J[�Hv���<9share/gems/specifications/default/did_you_mean-2.0.0.gemspecnu�[���PK)J[�Q5e^^6�@share/gems/specifications/default/fiddle-1.1.6.gemspecnu�[���PK)J[u*���8FFshare/gems/specifications/default/delegate-0.4.0.gemspecnu�[���PK)J[��88�Jshare/gems/specifications/default/readline-0.0.4.gemspecnu�[���PK)J[MRS���+�Nshare/gems/specifications/drb-2.2.1.gemspecnu�[���PK)J[&���[[2�Rshare/gems/specifications/getoptlong-0.2.1.gemspecnu�[���PK)J[�)��DD2�Vshare/gems/specifications/io-console-0.8.0.gemspecnu�[���PK)J[�z�_s,s,/R[share/gems/specifications/bundler-2.6.7.gemspecnu�[���PK)J[��2L??-$�share/gems/specifications/rake-13.2.1.gemspecnu�[���PK)J[\]�’�,��share/gems/specifications/json-2.9.1.gemspecnu�[���PK)J[;
����2��share/gems/specifications/bigdecimal-3.1.8.gemspecnu�[���PK)J[MW�L��+��share/gems/specifications/csv-3.3.2.gemspecnu�[���PK)J[0i���
�
-��share/gems/specifications/psych-5.2.2.gemspecnu�[���PK)J[B�qR  ,��share/gems/specifications/rack-3.0.8.gemspecnu�[���PK)J[�L���7w�share/gems/gems/io-console-0.8.0/lib/io/console/size.rbnu�[���PK)J[�+��'��share/gems/gems/drb-2.2.1/lib/drb/gw.rbnu�[���PK)J[Ic�)��share/gems/gems/drb-2.2.1/lib/drb/unix.rbnu�[���PK)J[D[���0]�share/gems/gems/drb-2.2.1/lib/drb/timeridconv.rbnu�[���PK)J[��,�}}/b�share/gems/gems/drb-2.2.1/lib/drb/weakidconv.rbnu�[���PK)J[oS�)77->�share/gems/gems/drb-2.2.1/lib/drb/extservm.rbnu�[���PK)J[:5��HH,��share/gems/gems/drb-2.2.1/lib/drb/extserv.rbnu�[���PK)J[��4'v�share/gems/gems/drb-2.2.1/lib/drb/eq.rbnu�[���PK)J[Nw3�##,��share/gems/gems/drb-2.2.1/lib/drb/version.rbnu�[���PK)J[ы>�qq(_�share/gems/gems/drb-2.2.1/lib/drb/acl.rbnu�[���PK)J[��_�/�/((�share/gems/gems/drb-2.2.1/lib/drb/ssl.rbnu�[���PK)J[�K��-.share/gems/gems/drb-2.2.1/lib/drb/observer.rbnu�[���PK)J[*Y)		11share/gems/gems/drb-2.2.1/lib/drb/invokemethod.rbnu�[���PK)J[)��f����(v4share/gems/gems/drb-2.2.1/lib/drb/drb.rbnu�[���PK)J[�"�22$Q share/gems/gems/drb-2.2.1/lib/drb.rbnu�[���PK)J[�qo%� share/gems/gems/drb-2.2.1/LICENSE.txtnu�[���PK)J[;�ff7.! share/gems/gems/syntax_suggest-2.0.2/exe/syntax_suggestnuȯ��PK)J[��F�ll,�! share/gems/gems/getoptlong-0.2.1/bin/consolenu�[���PK)J[�t/;JJ*�" share/gems/gems/getoptlong-0.2.1/bin/setupnu�[���PK)J[y<���*g# share/gems/gems/getoptlong-0.2.1/README.mdnu�[���PK)J[�r�::(�, share/gems/gems/getoptlong-0.2.1/Gemfilenu�[���PK)J[���QQ2(- share/gems/gems/getoptlong-0.2.1/lib/getoptlong.rbnu�[���PK)J[�,��)�~ share/gems/gems/getoptlong-0.2.1/Rakefilenu�[���PK)J[��pM**=� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/permute.rbnu�[���PK)J[Ѐ�x��;L� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/types.rbnu�[���PK)J[�vR};;:�� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/each.rbnu�[���PK)J[jF��WWCI� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/require_order.rbnu�[���PK)J[���YYE� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/return_in_order.rbnu�[���PK)J[�p�g��<� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/abbrev.rbnu�[���PK)J[�)ճ��=� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/aliases.rbnu�[���PK)J[�j���<%� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/simple.rbnu�[���PK)J[��pM**:Z� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/argv.rbnu�[���PK)J[�uF���?� share/gems/gems/getoptlong-0.2.1/sample/getoptlong/fibonacci.rbnu�[���PK)J[�qo,� share/gems/gems/getoptlong-0.2.1/LICENSE.txtnu�[���PK)J[��idid(R� share/gems/gems/psych-5.2.2/lib/psych.rbnu�[���PK)J[��'K��*� share/gems/gems/psych-5.2.2/lib/psych/y.rbnu�[���PK)J[Ե���2+� share/gems/gems/psych-5.2.2/lib/psych/exception.rbnu�[���PK)J[E���7c!share/gems/gems/psych-5.2.2/lib/psych/scalar_scanner.rbnu�[���PK)J[u�>22.�!share/gems/gems/psych-5.2.2/lib/psych/coder.rbnu�[���PK)J[��,��0T!share/gems/gems/psych-5.2.2/lib/psych/handler.rbnu�[���PK)J[O�xf/}9!share/gems/gems/psych-5.2.2/lib/psych/parser.rbnu�[���PK)J[��R:��1�A!share/gems/gems/psych-5.2.2/lib/psych/visitors.rbnu�[���PK)J[�y2K��2WC!share/gems/gems/psych-5.2.2/lib/psych/streaming.rbnu�[���PK)J[r���/TF!share/gems/gems/psych-5.2.2/lib/psych/stream.rbnu�[���PK)J[�L5NJ!share/gems/gems/psych-5.2.2/lib/psych/tree_builder.rbnu�[���PK)J[.�^{{:�V!share/gems/gems/psych-5.2.2/lib/psych/handlers/recorder.rbnu�[���PK)J[:�A�Z!share/gems/gems/psych-5.2.2/lib/psych/handlers/document_stream.rbnu�[���PK)J[H��LL5)]!share/gems/gems/psych-5.2.2/lib/psych/syntax_error.rbnu�[���PK)J[��	��1�_!share/gems/gems/psych-5.2.2/lib/psych/versions.rbnu�[���PK)J[/��	�	.�`!share/gems/gems/psych-5.2.2/lib/psych/nodes.rbnu�[���PK)J[�����9�j!share/gems/gems/psych-5.2.2/lib/psych/json/ruby_events.rbnu�[���PK)J[��9%m!share/gems/gems/psych-5.2.2/lib/psych/json/yaml_events.rbnu�[���PK)J[��:���4�p!share/gems/gems/psych-5.2.2/lib/psych/json/stream.rbnu�[���PK)J[�Хcc:�r!share/gems/gems/psych-5.2.2/lib/psych/json/tree_builder.rbnu�[���PK)J[*JJ,\t!share/gems/gems/psych-5.2.2/lib/psych/set.rbnu�[���PK)J[���KK-u!share/gems/gems/psych-5.2.2/lib/psych/omap.rbnu�[���PK)J[�m��

5�u!share/gems/gems/psych-5.2.2/lib/psych/class_loader.rbnu�[���PK)J[�믍!!7~!share/gems/gems/psych-5.2.2/lib/psych/nodes/sequence.rbnu�[���PK)J[)��))6��!share/gems/gems/psych-5.2.2/lib/psych/nodes/mapping.rbnu�[���PK)J[�ɉ40�!share/gems/gems/psych-5.2.2/lib/psych/nodes/alias.rbnu�[���PK)J[Ϧ[5��!share/gems/gems/psych-5.2.2/lib/psych/nodes/stream.rbnu�[���PK)J[��AA7�!share/gems/gems/psych-5.2.2/lib/psych/nodes/document.rbnu�[���PK)J[�����5��!share/gems/gems/psych-5.2.2/lib/psych/nodes/scalar.rbnu�[���PK)J[���J��3��!share/gems/gems/psych-5.2.2/lib/psych/nodes/node.rbnu�[���PK)J[���Z��9��!share/gems/gems/psych-5.2.2/lib/psych/visitors/emitter.rbnu�[���PK)J[R��(rr=ݰ!share/gems/gems/psych-5.2.2/lib/psych/visitors/depth_first.rbnu�[���PK)J[��{>QQ;��!share/gems/gems/psych-5.2.2/lib/psych/visitors/json_tree.rbnu�[���PK)J[��LALA;x�!share/gems/gems/psych-5.2.2/lib/psych/visitors/yaml_tree.rbnu�[���PK)J[MA�+��9/�!share/gems/gems/psych-5.2.2/lib/psych/visitors/visitor.rbnu�[���PK)J[�MԓT1T19V�!share/gems/gems/psych-5.2.2/lib/psych/visitors/to_ruby.rbnu�[���PK)J[g��jj1-"share/gems/gems/psych-5.2.2/lib/psych/core_ext.rbnu�[���PK)J[\g�3�."share/gems/gems/csv-3.3.2/doc/csv/arguments/io.rdocnu�[���PK)J[K'�tWtW6\0"share/gems/gems/csv-3.3.2/doc/csv/recipes/parsing.rdocnu�[���PK)J[{�d��"�"86�"share/gems/gems/csv-3.3.2/doc/csv/recipes/filtering.rdocnu�[���PK)J[rDM��6^�"share/gems/gems/csv-3.3.2/doc/csv/recipes/recipes.rdocnu�[���PK)J[c%�73)3)9��"share/gems/gems/csv-3.3.2/doc/csv/recipes/generating.rdocnu�[���PK)J[7�B���=R�"share/gems/gems/csv-3.3.2/doc/csv/options/common/col_sep.rdocnu�[���PK)J[�[B�
�
=t�"share/gems/gems/csv-3.3.2/doc/csv/options/common/row_sep.rdocnu�[���PK)J[�E1�mm@��"share/gems/gems/csv-3.3.2/doc/csv/options/common/quote_char.rdocnu�[���PK)J[��jd��F��"share/gems/gems/csv-3.3.2/doc/csv/options/generating/force_quotes.rdocnu�[���PK)J[`a|]~~I��"share/gems/gems/csv-3.3.2/doc/csv/options/generating/write_nil_value.rdocnu�[���PK)J[>J0��K��"share/gems/gems/csv-3.3.2/doc/csv/options/generating/write_empty_value.rdocnu�[���PK)J[l|�^^E��"share/gems/gems/csv-3.3.2/doc/csv/options/generating/quote_empty.rdocnu�[���PK)J[�����G��"share/gems/gems/csv-3.3.2/doc/csv/options/generating/write_headers.rdocnu�[���PK)J[LH�yyJ��"share/gems/gems/csv-3.3.2/doc/csv/options/generating/write_converters.rdocnu�[���PK)J[�^;h__@��"share/gems/gems/csv-3.3.2/doc/csv/options/parsing/nil_value.rdocnu�[���PK)J[`ꐟ��I}�"share/gems/gems/csv-3.3.2/doc/csv/options/parsing/unconverted_fields.rdocnu�[���PK)J[��<<A�#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/skip_lines.rdocnu�[���PK)J[nj�n��>s#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/headers.rdocnu�[���PK)J[�����F�
#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/liberal_parsing.rdocnu�[���PK)J[����G#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/field_size_limit.rdocnu�[���PK)J[���88E4#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/return_headers.rdocnu�[���PK)J[J�>��B�#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/empty_value.rdocnu�[���PK)J[�9;�B�#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/skip_blanks.rdocnu�[���PK)J[��R{��Ae!#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/converters.rdocnu�[���PK)J[v�6��H�'#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/header_converters.rdocnu�[���PK)J[x*^kk<�-#share/gems/gems/csv-3.3.2/doc/csv/options/parsing/strip.rdocnu�[���PK)J[��R8VV#�/#share/gems/gems/csv-3.3.2/README.mdnu�[���PK)J[��&�XKXK!g6#share/gems/gems/csv-3.3.2/NEWS.mdnu�[���PK)J[Y[Nj��*�#share/gems/gems/csv-3.3.2/lib/csv/table.rbnu�[���PK)J[��g��+z$share/gems/gems/csv-3.3.2/lib/csv/parser.rbnu�[���PK)J[A��\�`�`(��$share/gems/gems/csv-3.3.2/lib/csv/row.rbnu�[���PK)J[�a��kk,�%share/gems/gems/csv-3.3.2/lib/csv/version.rbnu�[���PK)J[�mLa�
�
5�
%share/gems/gems/csv-3.3.2/lib/csv/fields_converter.rbnu�[���PK)J[��P�;�%share/gems/gems/csv-3.3.2/lib/csv/input_record_separator.rbnu�[���PK)J[r�z*>>+G%share/gems/gems/csv-3.3.2/lib/csv/writer.rbnu�[���PK)J[K~%\��4�1%share/gems/gems/csv-3.3.2/lib/csv/core_ext/string.rbnu�[���PK)J[�#����33%share/gems/gems/csv-3.3.2/lib/csv/core_ext/array.rbnu�[���PK)J[�'�P6�6�$,4%share/gems/gems/csv-3.3.2/lib/csv.rbnu�[���PK)J[w�srr%��&share/gems/gems/csv-3.3.2/LICENSE.txtnu�[���PK)J[���	�	(}�&share/gems/gems/bigdecimal-3.1.8/LICENSEnu�[���PK)J[�uS���2��&share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal.rbnu�[���PK)J[�Jmqq;��&share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/jacobian.rbnu�[���PK)J[�,���7]�&share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/math.rbnu�[���PK)J[ь��9]�&share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/ludcmp.rbnu�[���PK)J[h"A�ZZ9G�&share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/newton.rbnu�[���PK)J[ubB��7
�&share/gems/gems/bigdecimal-3.1.8/lib/bigdecimal/util.rbnu�[���PK)J[H �_\\1'share/gems/gems/bigdecimal-3.1.8/sample/linear.rbnu�[���PK)J[��SS2�'share/gems/gems/bigdecimal-3.1.8/sample/nlsolve.rbnu�[���PK)J[��1_}}-r'share/gems/gems/bigdecimal-3.1.8/sample/pi.rbnu�[���PK)J[��@u,u,(L'share/gems/gems/rake-13.2.1/doc/jamis.rbnu�[���PK)J[�A2��	�	/H'share/gems/gems/rake-13.2.1/doc/proto_rake.rdocnu�[���PK)J[�'S{��-FR'share/gems/gems/rake-13.2.1/doc/glossary.rdocnu�[���PK)J[v3�HH-�Y'share/gems/gems/rake-13.2.1/doc/rational.rdocnu�[���PK)J[����P�P-<r'share/gems/gems/rake-13.2.1/doc/rakefile.rdocnu�[���PK)J[�_�bgg.{�'share/gems/gems/rake-13.2.1/doc/example/main.cnu�[���PK)J[۸	���1@�'share/gems/gems/rake-13.2.1/doc/example/Rakefile1nu�[���PK)J[��AA+?�'share/gems/gems/rake-13.2.1/doc/example/b.cnu�[���PK)J["�;WW1��'share/gems/gems/rake-13.2.1/doc/example/Rakefile2nu�[���PK)J[Oq�AA+��'share/gems/gems/rake-13.2.1/doc/example/a.cnu�[���PK)J[�?qFF7/�'share/gems/gems/rake-13.2.1/doc/command_line_usage.rdocnu�[���PK)J[��@�WW'��'share/gems/gems/rake-13.2.1/README.rdocnu�[���PK)J[�
i��(��'share/gems/gems/rake-13.2.1/History.rdocnu�[���PK)J[����$t)share/gems/gems/rake-13.2.1/exe/rakenuȯ��PK)J[��K\��8m)share/gems/gems/rake-13.2.1/lib/rake/invocation_chain.rbnu�[���PK)J[�2��bb8�)share/gems/gems/rake-13.2.1/lib/rake/loaders/makefile.rbnu�[���PK)J[?�{Hrr2]!)share/gems/gems/rake-13.2.1/lib/rake/early_time.rbnu�[���PK)J[E��.��/1#)share/gems/gems/rake-13.2.1/lib/rake/tasklib.rbnu�[���PK)J[Ӭ�s~~E5$)share/gems/gems/rake-13.2.1/lib/rake/rule_recursion_overflow_error.rbnu�[���PK)J[�
�HH6(&)share/gems/gems/rake-13.2.1/lib/rake/dsl_definition.rbnu�[���PK)J[n�#��;�<)share/gems/gems/rake-13.2.1/lib/rake/task_argument_error.rbnu�[���PK)J[u����0�=)share/gems/gems/rake-13.2.1/lib/rake/ext/core.rbnu�[���PK)J[yOu�rr2�@)share/gems/gems/rake-13.2.1/lib/rake/ext/string.rbnu�[���PK)J[���^		/�X)share/gems/gems/rake-13.2.1/lib/rake/promise.rbnu�[���PK)J[��m��>$b)share/gems/gems/rake-13.2.1/lib/rake/thread_history_display.rbnu�[���PK)J[�g�n2g)share/gems/gems/rake-13.2.1/lib/rake/file_utils.rbnu�[���PK)J[�d���1�11�v)share/gems/gems/rake-13.2.1/lib/rake/file_list.rbnu�[���PK)J[���''1��)share/gems/gems/rake-13.2.1/lib/rake/late_time.rbnu�[���PK)J["]���g�g3<�)share/gems/gems/rake-13.2.1/lib/rake/application.rbnu�[���PK)J[�R��3+*share/gems/gems/rake-13.2.1/lib/rake/linked_list.rbnu�[���PK)J[~�y�	�	6�*share/gems/gems/rake-13.2.1/lib/rake/task_arguments.rbnu�[���PK)J[���YY2�'*share/gems/gems/rake-13.2.1/lib/rake/multi_task.rbnu�[���PK)J[QG�-g)*share/gems/gems/rake-13.2.1/lib/rake/clean.rbnu�[���PK)J[��l��:�1*share/gems/gems/rake-13.2.1/lib/rake/file_creation_task.rbnu�[���PK)J[�.*C}}-5*share/gems/gems/rake-13.2.1/lib/rake/phony.rbnu�[���PK)J[�l�??4�6*share/gems/gems/rake-13.2.1/lib/rake/trace_output.rbnu�[���PK)J[|��^��0�9*share/gems/gems/rake-13.2.1/lib/rake/testtask.rbnu�[���PK)J[�����/�N*share/gems/gems/rake-13.2.1/lib/rake/version.rbnu�[���PK)J[�((4�O*share/gems/gems/rake-13.2.1/lib/rake/task_manager.rbnu�[���PK)J[��M	M	3Rx*share/gems/gems/rake-13.2.1/lib/rake/cpu_counter.rbnu�[���PK)J[(��?,,1�*share/gems/gems/rake-13.2.1/lib/rake/file_task.rbnu�[���PK)J[��i		6��*share/gems/gems/rake-13.2.1/lib/rake/default_loader.rbnu�[���PK)J[�#&D��1��*share/gems/gems/rake-13.2.1/lib/rake/backtrace.rbnu�[���PK)J[ڔY�2�2,�*share/gems/gems/rake-13.2.1/lib/rake/task.rbnu�[���PK)J[�lD��2c�*share/gems/gems/rake-13.2.1/lib/rake/name_space.rbnu�[���PK)J[����B��*share/gems/gems/rake-13.2.1/lib/rake/invocation_exception_mixin.rbnu�[���PK)J[ʬZ3��*share/gems/gems/rake-13.2.1/lib/rake/packagetask.rbnu�[���PK)J[n����37�*share/gems/gems/rake-13.2.1/lib/rake/thread_pool.rbnu�[���PK)J[�j��-I�*share/gems/gems/rake-13.2.1/lib/rake/win32.rbnu�[���PK)J[�����-��*share/gems/gems/rake-13.2.1/lib/rake/scope.rbnu�[���PK)J[<9��8��*share/gems/gems/rake-13.2.1/lib/rake/rake_test_loader.rbnu�[���PK)J[�����1�*share/gems/gems/rake-13.2.1/lib/rake/cloneable.rbnu�[���PK)J[0Z�R��6�+share/gems/gems/rake-13.2.1/lib/rake/private_reader.rbnu�[���PK)J[��s�ZZ6�+share/gems/gems/rake-13.2.1/lib/rake/file_utils_ext.rbnu�[���PK)J[��K��5�+share/gems/gems/rake-13.2.1/lib/rake/pseudo_status.rbnu�[���PK)J[���Q��3�+share/gems/gems/rake-13.2.1/lib/rake/rake_module.rbnu�[���PK)J[h�>``'+share/gems/gems/rake-13.2.1/lib/rake.rbnu�[���PK)J[W��'�#+share/gems/gems/rake-13.2.1/MIT-LICENSEnu�[���PK)J[Ɇ�S��")(+share/gems/gems/rdoc-6.10.0/exe/rinuȯ��PK)J[��v��$>)+share/gems/gems/rdoc-6.10.0/exe/rdocnuȯ��PK)J[�`zC��'B-+share/gems/gems/rdoc-6.10.0/lib/rdoc.rbnu�[���PK)J[������4?G+share/gems/gems/rdoc-6.10.0/lib/rdoc/token_stream.rbnu�[���PK)J[<!�."�"�8QT+share/gems/gems/rdoc-6.10.0/lib/rdoc/rd/inline_parser.rbnu�[���PK)J[�U�����7�,share/gems/gems/rdoc-6.10.0/lib/rdoc/rd/block_parser.rbnu�[���PK)J[$翫��1�,share/gems/gems/rdoc-6.10.0/lib/rdoc/rd/inline.rbnu�[���PK)J[`�1�%�%3��,share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object.rbnu�[���PK)J[�'�vv*��,share/gems/gems/rdoc-6.10.0/lib/rdoc/ri.rbnu�[���PK)J['ខUU-��,share/gems/gems/rdoc-6.10.0/lib/rdoc/erbio.rbnu�[���PK)J[ѓ#R�)�)-]�,share/gems/gems/rdoc-6.10.0/lib/rdoc/stats.rbnu�[���PK)J[�z	^^.�-share/gems/gems/rdoc-6.10.0/lib/rdoc/markup.rbnu�[���PK)J[]a��@@.p:-share/gems/gems/rdoc-6.10.0/lib/rdoc/parser.rbnu�[���PK)J[S�2��1Y-share/gems/gems/rdoc-6.10.0/lib/rdoc/i18n/text.rbnu�[���PK)J[KzVf	f	3�d-share/gems/gems/rdoc-6.10.0/lib/rdoc/i18n/locale.rbnu�[���PK)J[4�}TT0�n-share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/store.rbnu�[���PK)J[��n�==/no-share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/task.rbnu�[���PK)J[�Ų^^0
u-share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/paths.rbnu�[���PK)J[V�nrr4Ȇ-share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/formatter.rbnu�[���PK)J[Us�����1��-share/gems/gems/rdoc-6.10.0/lib/rdoc/ri/driver.rbnu�[���PK)J[��"�7�7,�.share/gems/gems/rdoc-6.10.0/lib/rdoc/rdoc.rbnu�[���PK)J[
����,�S.share/gems/gems/rdoc-6.10.0/lib/rdoc/i18n.rbnu�[���PK)J[1�u6pp,�T.share/gems/gems/rdoc-6.10.0/lib/rdoc/text.rbnu�[���PK)J[�S�/�/�3�t.share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/ruby.rbnu�[���PK)J[���/223d/share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/text.rbnu�[���PK)J[N��D0�0�0�e/share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/c.rbnu�[���PK)J[˥~�
�
9>�/share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/ruby_tools.rbnu�[���PK)J[�-�L  ?+0share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/ripper_state_lex.rbnu�[���PK)J[�aF��1�"0share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/rd.rbnu�[���PK)J[q�����9�$0share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/prism_ruby.rbnu�[���PK)J[���U��50�0share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/simple.rbnu�[���PK)J[�s9��"�"8@�0share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/changelog.rbnu�[���PK)J[��q���70�0share/gems/gems/rdoc-6.10.0/lib/rdoc/parser/markdown.rbnu�[���PK)J[��5s�0�0/o�0share/gems/gems/rdoc-6.10.0/lib/rdoc/servlet.rbnu�[���PK)J[.;m�
�
5�
1share/gems/gems/rdoc-6.10.0/lib/rdoc/known_classes.rbnu�[���PK)J[���l'�'�/�1share/gems/gems/rdoc-6.10.0/lib/rdoc/options.rbnu�[���PK)J[����4l�1share/gems/gems/rdoc-6.10.0/lib/rdoc/code_objects.rbnu�[���PK)J[��6�5r�1share/gems/gems/rdoc-6.10.0/lib/rdoc/rubygems_hook.rbnu�[���PK)J[�Y��kk/�1share/gems/gems/rdoc-6.10.0/lib/rdoc/version.rbnu�[���PK)J[��?zz7��1share/gems/gems/rdoc-6.10.0/lib/rdoc/cross_reference.rbnu�[���PK)J[1��RR/��1share/gems/gems/rdoc-6.10.0/lib/rdoc/tom_doc.rbnu�[���PK)J[#�"�VV*G�1share/gems/gems/rdoc-6.10.0/lib/rdoc/rd.rbnu�[���PK)J[";\.��3�2share/gems/gems/rdoc-6.10.0/lib/rdoc/erb_partial.rbnu�[���PK)J[��_C\C\-�2share/gems/gems/rdoc-6.10.0/lib/rdoc/store.rbnu�[���PK)J[��KK1�c2share/gems/gems/rdoc-6.10.0/lib/rdoc/generator.rbnu�[���PK)J[���!�!,6k2share/gems/gems/rdoc-6.10.0/lib/rdoc/task.rbnu�[���PK)J[м���@"�2share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/single_class.rbnu�[���PK)J[���uu=��2share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/top_level.rbnu�[���PK)J[�Iyy;s�2share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/context.rbnu�[���PK)J[A�9�3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/mixin.rbnu�[���PK)J[ˡFi8\+3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/attr.rbnu�[���PK)J[���?�:3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/meta_method.rbnu�[���PK)J[U­2"2">�;3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/any_method.rbnu�[���PK)J[�;��A[^3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/normal_module.rbnu�[���PK)J[�n����;�d3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/require.rbnu�[���PK)J[{u:��C�h3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/context/section.rbnu�[���PK)J[:��ԫ�;�{3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/include.rbnu�[���PK)J[�tJ$��:�|3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/extend.rbnu�[���PK)J[b2�}}9~3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/alias.rbnu�[���PK)J[�!���>��3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/anon_class.rbnu�[���PK)J[�>�jDWDW@�3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/class_module.rbnu�[���PK)J[��oX��@��3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/ghost_method.rbnu�[���PK)J[-qw%w%?��3share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/method_attr.rbnu�[���PK)J[�f�c\\<�4share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/constant.rbnu�[���PK)J[tqB���@p4share/gems/gems/rdoc-6.10.0/lib/rdoc/code_object/normal_class.rbnu�[���PK)J[�(�??3e4share/gems/gems/rdoc-6.10.0/lib/rdoc/stats/quiet.rbnu�[���PK)J[�d)���5"4share/gems/gems/rdoc-6.10.0/lib/rdoc/stats/verbose.rbnu�[���PK)J[9)-$004^&4share/gems/gems/rdoc-6.10.0/lib/rdoc/stats/normal.rbnu�[���PK)J[x��**?�,4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_html_crossref.rbnu�[���PK)J[����xx4�F4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/table.rbnu�[���PK)J[L��5>gK4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_html_snippet.rbnu�[���PK)J[�Gr		9�a4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_tt_only.rbnu�[���PK)J[���ZZ7\k4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_label.rbnu�[���PK)J[��&���Cs4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_table_of_contents.rbnu�[���PK)J[���9�95lz4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/parser.rbnu�[���PK)J[���::3Ǵ4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/rule.rbnu�[���PK)J[)����6d�4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/heading.rbnu�[���PK)J[?V�eDD3��4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/list.rbnu�[���PK)J[��xd		4`�4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_bs.rbnu�[���PK)J[�I?�<<6��4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/include.rbnu�[���PK)J[[�Ba��>g�4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/regexp_handling.rbnu�[���PK)J[g�͗��6��4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_rdoc.rbnu�[���PK)J[e��X��8�4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attr_span.rbnu�[���PK)J[�sU��A	�4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/indented_paragraph.rbnu�[���PK)J[�0kk��8�4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/list_item.rbnu�[���PK)J[v�!��:D�4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/block_quote.rbnu�[���PK)J[,'3���7��4share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/document.rbnu�[���PK)J[z�	��6�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_test.rbnu�[���PK)J[7��	%	%:�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/pre_process.rbnu�[���PK)J[�-(-(@
75share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attribute_manager.rbnu�[���PK)J[���vv8�_5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/formatter.rbnu�[���PK)J[[�j^(^(6�v5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_html.rbnu�[���PK)J[�����2L�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/raw.rbnu�[���PK)J[�OO��8��5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/paragraph.rbnu�[���PK)J[i�7��B�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_joined_paragraph.rbnu�[���PK)J[�����;�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attr_changer.rbnu�[���PK)J[OF.W��9�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/blank_line.rbnu�[���PK)J[��4�556�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_ansi.rbnu�[���PK)J[����9~�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/attributes.rbnu�[���PK)J[-J���:�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/to_markdown.rbnu�[���PK)J[Y|�x��9��5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/hard_break.rbnu�[���PK)J[�K~�""7�5share/gems/gems/rdoc-6.10.0/lib/rdoc/markup/verbatim.rbnu�[���PK)J[��K���0��5share/gems/gems/rdoc-6.10.0/lib/rdoc/markdown.rbnu�[���PK)J[-��5��4��;share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/ri.rbnu�[���PK)J[zG��	
	
8��;share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/markup.rbnu�[���PK)J[��	���LT�;share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/class.rhtmlnu�[���PK)J[�3�^^N�<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_footer.rhtmlnu�[���PK)J[3����Wq<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtmlnu�[���PK)J[麮��L�<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_head.rhtmlnu�[���PK)J[�޹�Z�!<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtmlnu�[���PK)J[��w���X $<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtmlnu�[���PK)J[�TB��XN&<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtmlnu�[���PK)J[�Z�mmV�'<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/page_green.pngnu�[���PK)J[Os~���Oy*<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/add.pngnu�[���PK)J[��U�ttT�-<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/arrow_up.pngnu�[���PK)J[��bbR�/<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/wrench.pngnu�[���PK)J[#۸�PPP�2<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/ruby.pngnu�[���PK)J[�=V��_�5<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngnu�[���PK)J[0���Q�6<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/brick.pngnu�[���PK)J[(?�Y��X$9<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bullet_black.pngnu�[���PK)J[
�OOR:<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/plugin.pngnu�[���PK)J["�55\P=<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/page_white_width.pngnu�[���PK)J[=k��^?<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngnu�[���PK)J[h˟�eeUp@<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/tag_green.pngnu�[���PK)J[���(VV[ZC<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/page_white_text.pngnu�[���PK)J[��AaaW;E<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/transparent.pngnu�[���PK)J[��Q��\#F<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifnu�[���PK)J[�P��R�]<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/delete.pngnu�[���PK)J[�ErrP�`<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/date.pngnu�[���PK)J[���<XXT�c<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/tag_blue.pngnu�[���PK)J[7��P�k<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/zoom.pngnu�[���PK)J[J���P�n<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/find.pngnu�[���PK)J[�CCJUUSr<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/package.pngnu�[���PK)J[R�7���V�u<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/brick_link.pngnu�[���PK)J[>�)oHHYiy<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/wrench_orange.pngnu�[���PK)J[$V���W:|<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngnu�[���PK)J[�S�O�}<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/images/bug.pngnu�[���PK)J[�N�L/L/M�<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/css/rdoc.cssnu�[���PK)J[;9Iv��Nް<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/css/fonts.cssnu�[���PK)J[��I���`P�<share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfnu�[���PK)J[�՞�w�wW��>share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfnu�[���PK)J[��>�q�qU�`@share/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfnu�[���PK)J[^b��](�Ashare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfnu�[���PK)J[䍒�TtTt]��Cshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfnu�[���PK)J[Z��o�o[�dEshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfnu�[���PK)J[�����W1�Fshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtmlnu�[���PK)J[g:��XD�Fshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtmlnu�[���PK)J[�TS��K��Fshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/page.rhtmlnu�[���PK)J[�F�^^S��Fshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/servlet_root.rhtmlnu�[���PK)J[	O2]]Y��Fshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtmlnu�[���PK)J[�W��I
I
O��Fshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/js/darkfish.jsnu�[���PK)J[ ��vMk�Fshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/js/search.jsnu�[���PK)J[�h����V�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtmlnu�[���PK)J[�:v��V&Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtmlnu�[���PK)J[2+�D��a�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtmlnu�[���PK)J[Af�3DDX�
Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/table_of_contents.rhtmlnu�[���PK)J[e��U�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtmlnu�[���PK)J[��Jt��WGshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtmlnu�[���PK)J[�>y��V�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtmlnu�[���PK)J[��QCCX�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtmlnu�[���PK)J[5����X�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtmlnu�[���PK)J[2�llL�!Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/darkfish/index.rhtmlnu�[���PK)J[P�^���Q�$Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/json_index/js/searcher.jsnu�[���PK)J[Li��u
u
S�>Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/template/json_index/js/navigation.jsnu�[���PK)J[ئcHYVYV:�IGshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/darkfish.rbnu�[���PK)J[��8��Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot/po.rbnu�[���PK)J[L��G��Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot/message_extractor.rbnu�[���PK)J[(k�!��>R�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot/po_entry.rbnu�[���PK)J[����<��Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/json_index.rbnu�[���PK)J[��Q�		5��Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/generator/pot.rbnu�[���PK)J[诇

0�Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/encoding.rbnu�[���PK)J[�)��(�(9��Gshare/gems/gems/rdoc-6.10.0/lib/rdoc/markdown/literals.rbnu�[���PK)J[7��- � �9SHshare/gems/gems/rdoc-6.10.0/lib/rdoc/markdown/entities.rbnu�[���PK)J[�V����/��Hshare/gems/gems/rdoc-6.10.0/lib/rdoc/comment.rbnu�[���PK)J[r�,��(	Ishare/gems/gems/bundler-2.6.7/exe/bundlenuȯ��PK)J[��Q)cc)Ishare/gems/gems/bundler-2.6.7/exe/bundlernuȯ��PK)J[qʉz`z`,�Ishare/gems/gems/bundler-2.6.7/lib/bundler.rbnu�[���PK)J[)�8kk2�mIshare/gems/gems/bundler-2.6.7/lib/bundler/index.rbnu�[���PK)J[:5���9r�Ishare/gems/gems/bundler-2.6.7/lib/bundler/vendored_uri.rbnu�[���PK)J[KR�
$
$<˃Ishare/gems/gems/bundler-2.6.7/lib/bundler/lockfile_parser.rbnu�[���PK)J[�rb�

AD�Ishare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client.rbnu�[���PK)J[s�{T�"�"3ҵIshare/gems/gems/bundler-2.6.7/lib/bundler/errors.rbnu�[���PK)J[x���	�	<��Ishare/gems/gems/bundler-2.6.7/lib/bundler/yaml_serializer.rbnu�[���PK)J[<��,,?��Ishare/gems/gems/bundler-2.6.7/lib/bundler/settings/validator.rbnu�[���PK)J[���l��<y�Ishare/gems/gems/bundler-2.6.7/lib/bundler/friendly_errors.rbnu�[���PK)J[����0��Ishare/gems/gems/bundler-2.6.7/lib/bundler/env.rbnu�[���PK)J[Q*X���7�Jshare/gems/gems/bundler-2.6.7/lib/bundler/gem_helper.rbnu�[���PK)J[��w���B�.Jshare/gems/gems/bundler-2.6.7/lib/bundler/environment_preserver.rbnu�[���PK)J[�aKϩ1�1;�4Jshare/gems/gems/bundler-2.6.7/lib/bundler/shared_helpers.rbnu�[���PK)J[.��RQ#Q#5�fJshare/gems/gems/bundler-2.6.7/lib/bundler/spec_set.rbnu�[���PK)J[��/�**9��Jshare/gems/gems/bundler-2.6.7/lib/bundler/process_lock.rbnu�[���PK)J[��.�44I'�Jshare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/updater.rbnu�[���PK)J[�w���
�
HԜJshare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/parser.rbnu�[���PK)J[#uIG�Jshare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/cache.rbnu�[���PK)J[��$A��Ls�Jshare/gems/gems/bundler-2.6.7/lib/bundler/compact_index_client/cache_file.rbnu�[���PK)J[�o;q��8��Jshare/gems/gems/bundler-2.6.7/lib/bundler/gem_helpers.rbnu�[���PK)J[V�H9++3��Jshare/gems/gems/bundler-2.6.7/lib/bundler/source.rbnu�[���PK)J[t�{2hh3j�Jshare/gems/gems/bundler-2.6.7/lib/bundler/worker.rbnu�[���PK)J[)PY�\\@5�Jshare/gems/gems/bundler-2.6.7/lib/bundler/similarity_detector.rbnu�[���PK)J[;i6�4�Jshare/gems/gems/bundler-2.6.7/lib/bundler/cli/add.rbnu�[���PK)J[-��5m�Jshare/gems/gems/bundler-2.6.7/lib/bundler/cli/lock.rbnu�[���PK)J[�JSR��8�
Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/console.rbnu�[���PK)J[ux9�Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/binstubs.rbnu�[���PK)J[/Ԗ __7[Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/remove.rbnu�[���PK)J[�`3��7!Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/config.rbnu�[���PK)J[�^f5T1Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/list.rbnu�[���PK)J[����4A4A4�9Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/gem.rbnu�[���PK)J[��Aii7]{Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/inject.rbnu�[���PK)J[�i
^9-�Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/platform.rbnu�[���PK)J[��)``6��Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/clean.rbnu�[���PK)J[m$�C��7n�Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/update.rbnu�[���PK)J[!1..8`�Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/install.rbnu�[���PK)J[3��f$f$9��Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/outdated.rbnu�[���PK)J[�re��5��Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/info.rbnu�[���PK)J[�37��5��Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/show.rbnu�[���PK)J[_Zeff6��Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/cache.rbnu�[���PK)J[h$���5�Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/fund.rbnu�[���PK)J[�0�JJ4��Kshare/gems/gems/bundler-2.6.7/lib/bundler/cli/viz.rbnu�[���PK)J[�b.J9dLshare/gems/gems/bundler-2.6.7/lib/bundler/cli/pristine.rbnu�[���PK)J[I�LN]]7�Lshare/gems/gems/bundler-2.6.7/lib/bundler/cli/doctor.rbnu�[���PK)J[��~��	�	5�Lshare/gems/gems/bundler-2.6.7/lib/bundler/cli/exec.rbnu�[���PK)J[�	446�(Lshare/gems/gems/bundler-2.6.7/lib/bundler/cli/issue.rbnu�[���PK)J[�t��7V.Lshare/gems/gems/bundler-2.6.7/lib/bundler/cli/plugin.rbnu�[���PK)J[R4_Ǎ�5�5Lshare/gems/gems/bundler-2.6.7/lib/bundler/cli/open.rbnu�[���PK)J[��5�:Lshare/gems/gems/bundler-2.6.7/lib/bundler/cli/init.rbnu�[���PK)J[~q�EKK7@Lshare/gems/gems/bundler-2.6.7/lib/bundler/cli/common.rbnu�[���PK)J[�7=x��6�SLshare/gems/gems/bundler-2.6.7/lib/bundler/cli/check.rbnu�[���PK)J[q�^3YLshare/gems/gems/bundler-2.6.7/lib/bundler/mirror.rbnu�[���PK)J[����>>9xpLshare/gems/gems/bundler-2.6.7/lib/bundler/feature_flag.rbnu�[���PK)J[��M��>xLshare/gems/gems/bundler-2.6.7/lib/bundler/vendored_net_http.rbnu�[���PK)J[��:l{Lshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/index.rbnu�[���PK)J[	�
:55B�~Lshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/compact_index.rbnu�[���PK)J[k-�9��Lshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/base.rbnu�[���PK)J[�n|~~?�Lshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/downloader.rbnu�[���PK)J[���1�	�	?�Lshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/dependency.rbnu�[���PK)J[��`�IIG��Lshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher/gem_remote_fetcher.rbnu�[���PK)J[.d���1��Lshare/gems/gems/bundler-2.6.7/lib/bundler/vlad.rbnu�[���PK)J[�5-�8�89�Lshare/gems/gems/bundler-2.6.7/lib/bundler/rubygems_ext.rbnu�[���PK)J[�*�UU9>�Lshare/gems/gems/bundler-2.6.7/lib/bundler/safe_marshal.rbnu�[���PK)J[��z�[[0��Lshare/gems/gems/bundler-2.6.7/lib/bundler/dsl.rbnu�[���PK)J[�q�ʇ���0vEMshare/gems/gems/bundler-2.6.7/lib/bundler/cli.rbnu�[���PK)J[�
*��
�
3]�Mshare/gems/gems/bundler-2.6.7/lib/bundler/inline.rbnu�[���PK)J[�2����;��Mshare/gems/gems/bundler-2.6.7/lib/bundler/build_metadata.rbnu�[���PK)J[)�1���;�Mshare/gems/gems/bundler-2.6.7/lib/bundler/uri_normalizer.rbnu�[���PK)J[��Z�))C�Mshare/gems/gems/bundler-2.6.7/lib/bundler/uri_credentials_filter.rbnu�[���PK)J[HxQ@��2�Nshare/gems/gems/bundler-2.6.7/lib/bundler/graph.rbnu�[���PK)J[Htd]];�Nshare/gems/gems/bundler-2.6.7/lib/bundler/vendored_tsort.rbnu�[���PK)J[껽<�.�.4�Nshare/gems/gems/bundler-2.6.7/lib/bundler/fetcher.rbnu�[���PK)J[}m}cc>�HNshare/gems/gems/bundler-2.6.7/lib/bundler/vendored_pub_grub.rbnu�[���PK)J[p�"t�1�1AdINshare/gems/gems/bundler-2.6.7/lib/bundler/rubygems_integration.rbnu�[���PK)J[�R��9�{Nshare/gems/gems/bundler-2.6.7/lib/bundler/self_manager.rbnu�[���PK*J[�=�oo=��Nshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-doctor.1nu�[���PK*J[�'�+
+
;��Nshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle.1.ronnnu�[���PK*J[���3��D+�Nshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-platform.1.ronnnu�[���PK*J[#�c�KK@{�Nshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-lock.1.ronnnu�[���PK*J[$��$DD;6�Nshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-exec.1nu�[���PK*J[��|m33B��Nshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-update.1.ronnnu�[���PK*J[iI�rr=l
Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-plugin.1nu�[���PK*J[M�3�@KOshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-fund.1.ronnnu�[���PK*J[�Wj	RR:�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-env.1nu�[���PK*J[�(�;�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-info.1nu�[���PK*J[�w.od6d6=�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-update.1nu�[���PK*J[w���	�	?�POshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-add.1.ronnnu�[���PK*J[�K�VVB[Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-inject.1.ronnnu�[���PK*J[����@�^Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-exec.1.ronnnu�[���PK*J[���o��C"wOshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-version.1.ronnnu�[���PK*J[!��;nyOshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-open.1nu�[���PK*J[�<�|Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-issue.1nu�[���PK*J[l��
��Dy�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-pristine.1.ronnnu�[���PK*J[Cbܹ

D��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-outdated.1.ronnnu�[���PK*J[�G-���@P�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-list.1.ronnnu�[���PK*J[w���;��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-show.1nu�[���PK*J[�ǘD��>/�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-console.1nu�[���PK*J[?����:Z�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-gem.1nu�[���PK*J[v�I��6��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle.1nu�[���PK*J[<�N77?��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-licenses.1nu�[���PK*J[1�<o��?H�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-gem.1.ronnnu�[���PK*J[g�C��B��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-plugin.1.ronnnu�[���PK*J[��YD��B��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-remove.1.ronnnu�[���PK*J[#��/��?��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-platform.1nu�[���PK*J[nu#ZDD=��Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-remove.1nu�[���PK*J[����@o�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-open.1.ronnnu�[���PK*J[�����=e�Oshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-inject.1nu�[���PK*J[������D�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-licenses.1.ronnnu�[���PK*J[�=H��?�?C
Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-install.1.ronnnu�[���PK*J[�s	vv?&CPshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-pristine.1nu�[���PK*J[.�
F��?JPshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-binstubs.1nu�[���PK*J[��TT<QPshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-check.1nu�[���PK*J[X��fnn;�UPshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-fund.1nu�[���PK*J[�� YTYT=�XPshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-config.1nu�[���PK*J[�3�ppAv�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-clean.1.ronnnu�[���PK*J[����AW�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-issue.1.ronnnu�[���PK*J[>��.��<�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-cache.1nu�[���PK*J[�ōP��D��Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-binstubs.1.ronnnu�[���PK*J[v�U��;<�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-list.1nu�[���PK*J[���		@[�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-init.1.ronnnu�[���PK*J[��}jj>��Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-version.1nu�[���PK*J[�h$u��;��Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-init.1nu�[���PK*J[��^���:��Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-viz.1nu�[���PK*J[�v|��<�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-clean.1nu�[���PK*J[��K�ee?E�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-viz.1.ronnnu�[���PK*J[�\|O��B�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-doctor.1.ronnnu�[���PK*J[M�"��AX�Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-check.1.ronnnu�[���PK*J[�lr]]@��Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-help.1.ronnnu�[���PK*J[
6V�U�U<��Pshare/gems/gems/bundler-2.6.7/lib/bundler/man/gemfile.5.ronnnu�[���PK*J[n�0�yByB>�JQshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-install.1nu�[���PK*J[z�x
\\7�Qshare/gems/gems/bundler-2.6.7/lib/bundler/man/gemfile.5nu�[���PK*J[['VLLB��Qshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-config.1.ronnnu�[���PK*J[T��s��@_6Rshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-info.1.ronnnu�[���PK*J[߶A�8Rshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-cache.1.ronnnu�[���PK*J[���ʻ�@HRshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-show.1.ronnnu�[���PK*J[�R���;=KRshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-help.1nu�[���PK*J[�̃�?hMRshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-env.1.ronnnu�[���PK*J[�ئl��C�NRshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-console.1.ronnnu�[���PK*J[�` ��
�
?HTRshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-outdated.1nu�[���PK*J[��l���;MbRshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-lock.1nu�[���PK*J[^F�((:OqRshare/gems/gems/bundler-2.6.7/lib/bundler/man/bundle-add.1nu�[���PK*J[��4�|Rshare/gems/gems/bundler-2.6.7/lib/bundler/version.rbnu�[���PK*J[{��	�	?H~Rshare/gems/gems/bundler-2.6.7/lib/bundler/lockfile_generator.rbnu�[���PK*J[q�x�mm7f�Rshare/gems/gems/bundler-2.6.7/lib/bundler/capistrano.rbnu�[���PK*J[��n�{{5:�Rshare/gems/gems/bundler-2.6.7/lib/bundler/checksum.rbnu�[���PK*J[8[';�Rshare/gems/gems/bundler-2.6.7/lib/bundler/match_metadata.rbnu�[���PK*J[MK�X``6��Rshare/gems/gems/bundler-2.6.7/lib/bundler/ui/silent.rbnu�[���PK*J[�$k5L�Rshare/gems/gems/bundler-2.6.7/lib/bundler/ui/shell.rbnu�[���PK*J[B��008��Rshare/gems/gems/bundler-2.6.7/lib/bundler/ui/rg_proxy.rbnu�[���PK*J[���7]�Rshare/gems/gems/bundler-2.6.7/lib/bundler/source_map.rbnu�[���PK*J[�9�y77_p�Rshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rbnu�[���PK*J[T�||c6�Rshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rbnu�[���PK*J[{ �66_E�Rshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rbnu�[���PK*J[�18��W
�Rshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/connection_pool/lib/connection_pool.rbnu�[���PK*J[K���XSshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rbnu�[���PK*J[�A�KKR�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rbnu�[���PK*J[�N�n"n"We#Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rbnu�[���PK*J[׺��WWWZFSshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rbnu�[���PK*J[�FXXXX8VSshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rbnu�[���PK*J[�t��00QmSshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rbnu�[���PK*J[�^��	�	N�mSshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rbnu�[���PK*J[8K'��
�
Z�wSshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rbnu�[���PK*J[���bXXQ*�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rbnu�[���PK*J[�g�"
"
\�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rbnu�[���PK*J[�N�T��Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rbnu�[���PK*J[��9	]]R9�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rbnu�[���PK*J[ʒ���W�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rbnu�[���PK*J[��++^1�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rbnu�[���PK*J[;$�(��_�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rbnu�[���PK*J[&�pHHYY�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rbnu�[���PK*J[Sط"I*�Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/pub_grub/lib/pub_grub.rbnu�[���PK*J[9pۛ:�:C��Sshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/tsort/lib/tsort.rbnu�[���PK*J[��i	i	Q�Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/securerandom/lib/securerandom.rbnu�[���PK*J[��-�VVq�Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rbnu�[���PK*J[�X��ssd�Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rbnu�[���PK*J[���j�Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rbnu�[���PK*J[9���WqWq_!Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rbnu�[���PK*J[K)Ҽ��D�Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ldap.rbnu�[���PK*J[:)##E�Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ldaps.rbnu�[���PK*J[FoSg?�?�G��Tshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/generic.rbnu�[���PK*J[�����NYHUshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rbnu�[���PK*J[N9QERRE�aUshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/https.rbnu�[���PK*J[�䌝��GcdUshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/version.rbnu�[���PK*J[P�N�##CyeUshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ftp.rbnu�[���PK*J[�"�F�FN�Ushare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rbnu�[���PK*J[i7�* * FL�Ushare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/mailto.rbnu�[���PK*J[K�ӎ77C��Ushare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/wss.rbnu�[���PK*J[�����	�	D��Ushare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/file.rbnu�[���PK*J[+T�s	s	B��Ushare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/ws.rbnu�[���PK*J[#�6�m�mF�Vshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/common.rbnu�[���PK*J[�Oˣ22D�oVshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri/http.rbnu�[���PK*J[�
D��
�
?4Vshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/uri/lib/uri.rbnu�[���PK*J[5���;B;BKT�Vshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/fileutils/lib/fileutils.rbnu�[���PK*J[��KZTZTA
�Wshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor.rbnu�[���PK*J[[��2QQI�$Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/command.rbnu�[���PK*J[���Ϝ$�$G�9Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/group.rbnu�[���PK*J[�l��((H�^Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/runner.rbnu�[���PK*J[����H*�Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser.rbnu�[���PK*J[�dq=77V,�Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rbnu�[���PK*J[Y�t}}S�Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rbnu�[���PK*J[�\Õ//P�Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/nested_context.rbnu�[���PK*J[����)�)I��Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions.rbnu�[���PK*J[ڱ����R��Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/arguments.rbnu�[���PK*J[
X�;��O��Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/option.rbnu�[���PK*J[��X�]"]"Pr�Xshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/options.rbnu�[���PK*J[���;;QOYshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/parser/argument.rbnu�[���PK*J[�d�2o3o3[Yshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rbnu�[���PK*J[J
,{SEYshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/directory.rbnu�[���PK*J[`����Y�TYshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rbnu�[���PK*J[s	��mmUfYshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/create_link.rbnu�[���PK*J[U���UnYshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/create_file.rbnu�[���PK*J[޽1fZE{Yshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rbnu�[���PK*J[���p�q�qF�Yshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/base.rbnu�[���PK*J[��홇�M��Yshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/line_editor.rbnu�[���PK*J[���,,I�Yshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/version.rbnu�[���PK*J[td�.	.	G��Yshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell.rbnu�[���PK*J[/��ssLL	Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/html.rbnu�[���PK*J[���yMMM;Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/color.rbnu�[���PK*J[�D`P%Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/terminal.rbnu�[���PK*J[��dlV�)Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rbnu�[���PK*J[�_8���U--Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rbnu�[���PK*J[��[�..My9Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/basic.rbnu�[���PK*J[���

WhZshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rbnu�[���PK*J[qe��
�
G�lZshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/error.rbnu�[���PK*J[���M�wZshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/rake_compat.rbnu�[���PK*J[�S��#�#F�Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/util.rbnu�[���PK*J[0�o�Y	Y	gD�Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rbnu�[���PK*J[΅�FFL4�Zshare/gems/gems/bundler-2.6.7/lib/bundler/vendor/thor/lib/thor/invocation.rbnu�[���PK*J[�`d��%�%6��Zshare/gems/gems/bundler-2.6.7/lib/bundler/installer.rbnu�[���PK*J[W�|��/�Zshare/gems/gems/bundler-2.6.7/lib/bundler/ui.rbnu�[���PK*J[��̯��At�Zshare/gems/gems/bundler-2.6.7/lib/bundler/remote_specification.rbnu�[���PK*J[_'��)�)4��Zshare/gems/gems/bundler-2.6.7/lib/bundler/runtime.rbnu�[���PK*J[6�e$ll6�)[share/gems/gems/bundler-2.6.7/lib/bundler/deprecate.rbnu�[���PK*J[���7l-[share/gems/gems/bundler-2.6.7/lib/bundler/dependency.rbnu�[���PK*J[���xx<c:[share/gems/gems/bundler-2.6.7/lib/bundler/materialization.rbnu�[���PK*J[��Ǵ�:G@[share/gems/gems/bundler-2.6.7/lib/bundler/vendored_thor.rbnu�[���PK*J[��%``2eA[share/gems/gems/bundler-2.6.7/lib/bundler/retry.rbnu�[���PK*J[�*X��9'H[share/gems/gems/bundler-2.6.7/lib/bundler/ruby_version.rbnu�[���PK*J[�aS���@I[[share/gems/gems/bundler-2.6.7/lib/bundler/vendored_persistent.rbnu�[���PK*J[�$%���=~\[share/gems/gems/bundler-2.6.7/lib/bundler/vendored_timeout.rbnu�[���PK*J[I���
�
?�][share/gems/gems/bundler-2.6.7/lib/bundler/stub_specification.rbnu�[���PK*J[�D��sIsI5�k[share/gems/gems/bundler-2.6.7/lib/bundler/resolver.rbnu�[���PK*J[���Tqq2��[share/gems/gems/bundler-2.6.7/lib/bundler/setup.rbnu�[���PK*J[b�  ;��[share/gems/gems/bundler-2.6.7/lib/bundler/force_platform.rbnu�[���PK*J[0�ee?�[share/gems/gems/bundler-2.6.7/lib/bundler/vendored_fileutils.rbnu�[���PK*J[>��^��B�[share/gems/gems/bundler-2.6.7/lib/bundler/vendored_securerandom.rbnu�[���PK*J[���__B�[share/gems/gems/bundler-2.6.7/lib/bundler/match_remote_metadata.rbnu�[���PK*J[ov���?��[share/gems/gems/bundler-2.6.7/lib/bundler/lazy_specification.rbnu�[���PK*J[7|�/�/3�[share/gems/gems/bundler-2.6.7/lib/bundler/plugin.rbnu�[���PK*J[Iwy��	�	5n\share/gems/gems/bundler-2.6.7/lib/bundler/ruby_dsl.rbnu�[���PK*J[h����7h\share/gems/gems/bundler-2.6.7/lib/bundler/deployment.rbnu�[���PK*J[�ku��<�)\share/gems/gems/bundler-2.6.7/lib/bundler/source/metadata.rbnu�[���PK*J[8y-�0<0<<�0\share/gems/gems/bundler-2.6.7/lib/bundler/source/rubygems.rbnu�[���PK*J[�b�.�2�27-m\share/gems/gems/bundler-2.6.7/lib/bundler/source/git.rbnu�[���PK*J[���\\Fz�\share/gems/gems/bundler-2.6.7/lib/bundler/source/rubygems_aggregate.rbnu�[���PK*J[���ppCL�\share/gems/gems/bundler-2.6.7/lib/bundler/source/rubygems/remote.rbnu�[���PK*J[�+O?;/�\share/gems/gems/bundler-2.6.7/lib/bundler/source/gemspec.rbnu�[���PK*J[,�;�;A��\share/gems/gems/bundler-2.6.7/lib/bundler/source/git/git_proxy.rbnu�[���PK*J[8ב,,B��\share/gems/gems/bundler-2.6.7/lib/bundler/source/path/installer.rbnu�[���PK*J[e�G��8��\share/gems/gems/bundler-2.6.7/lib/bundler/source/path.rbnu�[���PK*J[2y�776�]share/gems/gems/bundler-2.6.7/lib/bundler/constants.rbnu�[���PK*J[A*W���I<]share/gems/gems/bundler-2.6.7/lib/bundler/templates/Executable.standalonenu�[���PK*J[��hhFa]share/gems/gems/bundler-2.6.7/lib/bundler/templates/Executable.bundlernu�[���PK*J[�lq55C?%]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/rspec.ttnu�[���PK*J[�S�
ooP�%]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.ttnu�[���PK*J[���QQI�;]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/LICENSE.txt.ttnu�[���PK*J[Դ�88I�@]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/bin/console.ttnu�[���PK*J[����GQB]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/bin/setup.ttnu�[���PK*J[<0��LKC]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/newgem.gemspec.ttnu�[���PK*J[I|\��QiL]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/circleci/config.yml.ttnu�[���PK*J[���G�O]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/gitignore.ttnu�[���PK*J[��LLU[Q]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.ttnu�[���PK*J[�?����Q,S]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/newgem.h.ttnu�[���PK*J[�5��X^T]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.ttnu�[���PK*J[8`�9QgU]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/newgem.c.ttnu�[���PK*J[����xxS�V]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.ttnu�[���PK*J[�8wf  S�X]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.ttnu�[���PK*J[*Q=tooF�Z]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/Rakefile.ttnu�[���PK*J[N��meeLwa]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/sig/newgem.rbs.ttnu�[���PK*J[!5��PPJXc]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/CHANGELOG.md.ttnu�[���PK*J[�:x�77W"d]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/github/workflows/main.yml.ttnu�[���PK*J[�$�(��I�g]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/rubocop.yml.ttnu�[���PK*J[���FFHEi]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/exe/newgem.ttnu�[���PK*J[��Sj]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/lib/newgem/version.rb.ttnu�[���PK*J[��Br==K�k]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/lib/newgem.rb.ttnu�[���PK*J[Ҧ+���QWn]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/spec/spec_helper.rb.ttnu�[���PK*J[32
���Qbp]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/spec/newgem_spec.rb.ttnu�[���PK*J[�M-n��Z�q]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/minitest/test_helper.rb.ttnu�[���PK*J[,��
Zs]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.ttnu�[���PK*J[G�>J��[�t]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.ttnu�[���PK*J[q��{33[�u]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.ttnu�[���PK*J[u�H�22G�w]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/README.md.ttnu�[���PK*J[�fn>E2�]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/Gemfile.ttnu�[���PK*J[2����H��]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/Cargo.toml.ttnu�[���PK*J[P�ߚ��K7�]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/gitlab-ci.yml.ttnu�[���PK*J[͌��Jl�]share/gems/gems/bundler-2.6.7/lib/bundler/templates/newgem/standard.yml.ttnu�[���PK*J[�>�{dd>��]share/gems/gems/bundler-2.6.7/lib/bundler/templates/Executablenu�[���PK*J[�SJLL;p�]share/gems/gems/bundler-2.6.7/lib/bundler/templates/Gemfilenu�[���PK*J[U�ߘ�:'�]share/gems/gems/bundler-2.6.7/lib/bundler/resolver/root.rbnu�[���PK*J[)����?)�]share/gems/gems/bundler-2.6.7/lib/bundler/resolver/candidate.rbnu�[���PK*J[�%(�  :P�]share/gems/gems/bundler-2.6.7/lib/bundler/resolver/base.rbnu�[���PK*J[�T";	;	=ڥ]share/gems/gems/bundler-2.6.7/lib/bundler/resolver/package.rbnu�[���PK*J[[ӭ�11>��]share/gems/gems/bundler-2.6.7/lib/bundler/resolver/strategy.rbnu�[���PK*J[����@!�]share/gems/gems/bundler-2.6.7/lib/bundler/resolver/spec_group.rbnu�[���PK*J[�"��Ec�]share/gems/gems/bundler-2.6.7/lib/bundler/resolver/incompatibility.rbnu�[���PK*J[;�Nڰ�Cj�]share/gems/gems/bundler-2.6.7/lib/bundler/rubygems_gem_installer.rbnu�[���PK*J[0��H�'�'5��]share/gems/gems/bundler-2.6.7/lib/bundler/injector.rbnu�[���PK*J[��ЋGG;�]share/gems/gems/bundler-2.6.7/lib/bundler/match_platform.rbnu�[���PK*J[Y�

9��]share/gems/gems/bundler-2.6.7/lib/bundler/current_ruby.rbnu�[���PK*J[x�qc��I^share/gems/gems/bundler-2.6.7/lib/bundler/installer/parallel_installer.rbnu�[���PK*J[b��



D*^share/gems/gems/bundler-2.6.7/lib/bundler/installer/gem_installer.rbnu�[���PK*J[jg�BBA�%^share/gems/gems/bundler-2.6.7/lib/bundler/installer/standalone.rbnu�[���PK*J[m��,aa8[2^share/gems/gems/bundler-2.6.7/lib/bundler/source_list.rbnu�[���PK*J[�8Nۢ�3$P^share/gems/gems/bundler-2.6.7/lib/bundler/digest.rbnu�[���PK*J[}X���6)Y^share/gems/gems/bundler-2.6.7/lib/bundler/gem_tasks.rbnu�[���PK*J[(�119Z^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/index.rbnu�[���PK*J[��}��:�q^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/events.rbnu�[���PK*J[Um//>�}^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/api/source.rbnu�[���PK*J["�x��7v�^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/dsl.rbnu�[���PK*J[�gl���=��^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer.rbnu�[���PK*J[$�&�&&F��^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer/rubygems.rbnu�[���PK*J[}[?n		A��^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer/git.rbnu�[���PK*J[��}}B�^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/installer/path.rbnu�[���PK*J[�~.�jj?��^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/source_list.rbnu�[���PK*J[�6�PP7��^share/gems/gems/bundler-2.6.7/lib/bundler/plugin/api.rbnu�[���PK*J["a
U����7�^share/gems/gems/bundler-2.6.7/lib/bundler/definition.rbnu�[���PK*J[hм�@@Ar~_share/gems/gems/bundler-2.6.7/lib/bundler/gem_version_promoter.rbnu�[���PK*J[�J����8#�_share/gems/gems/bundler-2.6.7/lib/bundler/ci_detector.rbnu�[���PK*J[q|TPq<q<5h�_share/gems/gems/bundler-2.6.7/lib/bundler/settings.rbnu�[���PK*J[Xݝ���C>�_share/gems/gems/bundler-2.6.7/lib/bundler/endpoint_specification.rbnu�[���PK*J[ǻ��ii'��_share/gems/gems/rackup-2.1.0/bin/rackupnuȯ��PK*J[e
�ee(j�_share/gems/gems/rackup-2.1.0/security.mdnu�[���PK*J[z����''�_share/gems/gems/rackup-2.1.0/license.mdnu�[���PK*J[�F��;;2!`share/gems/gems/rackup-2.1.0/lib/rackup/handler.rbnu�[���PK*J[���|��:�`share/gems/gems/rackup-2.1.0/lib/rackup/handler/webrick.rbnu�[���PK*J[���HH6"`share/gems/gems/rackup-2.1.0/lib/rackup/handler/cgi.rbnu�[���PK*J[lo|	��1�"`share/gems/gems/rackup-2.1.0/lib/rackup/stream.rbnu�[���PK*J[�����2�7`share/gems/gems/rackup-2.1.0/lib/rackup/lobster.rbnu�[���PK*J[�cϛ��2�@`share/gems/gems/rackup-2.1.0/lib/rackup/version.rbnu�[���PK*J[/�:�4�41�A`share/gems/gems/rackup-2.1.0/lib/rackup/server.rbnu�[���PK*J[��9�$$*w`share/gems/gems/rackup-2.1.0/lib/rackup.rbnu�[���PK*J[<�d��&�x`share/gems/gems/rackup-2.1.0/readme.mdnu�[���PK*J[�tz��,�,$�{`share/gems/gems/rack-3.0.8/README.mdnu�[���PK*J[���==$��`share/gems/gems/rack-3.0.8/SPEC.rdocnu�[���PK*J[��_***�`share/gems/gems/rack-3.0.8/CONTRIBUTING.mdnu�[���PK*J[�um�	�	&��`share/gems/gems/rack-3.0.8/lib/rack.rbnu�[���PK*J[�ʆ��6�66��`share/gems/gems/rack-3.0.8/lib/rack/show_exceptions.rbnu�[���PK*J[�d�P��-3ashare/gems/gems/rack-3.0.8/lib/rack/logger.rbnu�[���PK*J[K�bx/5ashare/gems/gems/rack-3.0.8/lib/rack/reloader.rbnu�[���PK*J[��||��6�Aashare/gems/gems/rack-3.0.8/lib/rack/conditional_get.rbnu�[���PK*J[>�==+�Mashare/gems/gems/rack-3.0.8/lib/rack/lock.rbnu�[���PK*J[��44-tPashare/gems/gems/rack-3.0.8/lib/rack/events.rbnu�[���PK*J[��;�~~7dashare/gems/gems/rack-3.0.8/lib/rack/rewindable_input.rbnu�[���PK*J[�ю	��-�pashare/gems/gems/rack-3.0.8/lib/rack/static.rbnu�[���PK*J[$����*�*/F�ashare/gems/gems/rack-3.0.8/lib/rack/response.rbnu�[���PK*J[_��l��2��ashare/gems/gems/rack-3.0.8/lib/rack/null_logger.rbnu�[���PK*J[VM�Vww+��ashare/gems/gems/rack-3.0.8/lib/rack/etag.rbnu�[���PK*J[[�J/{�ashare/gems/gems/rack-3.0.8/lib/rack/deflater.rbnu�[���PK*J[�i\��-��ashare/gems/gems/rack-3.0.8/lib/rack/config.rbnu�[���PK*J[:�}==-��ashare/gems/gems/rack-3.0.8/lib/rack/urlmap.rbnu�[���PK*J[?�6/����+q�ashare/gems/gems/rack-3.0.8/lib/rack/mime.rbnu�[���PK*J[����9�hbshare/gems/gems/rack-3.0.8/lib/rack/auth/digest/params.rbnu�[���PK*J[����6ibshare/gems/gems/rack-3.0.8/lib/rack/auth/digest/md5.rbnu�[���PK*J[����:�ibshare/gems/gems/rack-3.0.8/lib/rack/auth/digest/request.rbnu�[���PK*J[����8jbshare/gems/gems/rack-3.0.8/lib/rack/auth/digest/nonce.rbnu�[���PK*J[l��GRR<�jbshare/gems/gems/rack-3.0.8/lib/rack/auth/abstract/handler.rbnu�[���PK*J[,��UU<`nbshare/gems/gems/rack-3.0.8/lib/rack/auth/abstract/request.rbnu�[���PK*J[���

2!rbshare/gems/gems/rack-3.0.8/lib/rack/auth/digest.rbnu�[���PK*J[�����1��bshare/gems/gems/rack-3.0.8/lib/rack/auth/basic.rbnu�[���PK*J[�N�$$>��bshare/gems/gems/rack-3.0.8/lib/rack/multipart/uploaded_file.rbnu�[���PK*J[��&�4�471�bshare/gems/gems/rack-3.0.8/lib/rack/multipart/parser.rbnu�[���PK*J[��l�	�	:a�bshare/gems/gems/rack-3.0.8/lib/rack/multipart/generator.rbnu�[���PK*J[N4q���3��bshare/gems/gems/rack-3.0.8/lib/rack/content_type.rbnu�[���PK*J[��՝[�[�+��bshare/gems/gems/rack-3.0.8/lib/rack/lint.rbnuȯ��PK*J[�ӎ cTcT,ahcshare/gems/gems/rack-3.0.8/lib/rack/utils.rbnu�[���PK*J[>Sf?"?". �cshare/gems/gems/rack-3.0.8/lib/rack/builder.rbnu�[���PK*J[��A�0��cshare/gems/gems/rack-3.0.8/lib/rack/directory.rbnu�[���PK*J[�
C�xx45�cshare/gems/gems/rack-3.0.8/lib/rack/common_logger.rbnu�[���PK*J[ѝo�+dshare/gems/gems/rack-3.0.8/lib/rack/head.rbnu�[���PK*J[K?��331xdshare/gems/gems/rack-3.0.8/lib/rack/body_proxy.rbnu�[���PK*J[H��SGbGb.
dshare/gems/gems/rack-3.0.8/lib/rack/request.rbnu�[���PK*J[ɸHO��.�odshare/gems/gems/rack-3.0.8/lib/rack/version.rbnu�[���PK*J[O�i���.�sdshare/gems/gems/rack-3.0.8/lib/rack/headers.rbnu�[���PK*J[�|�Х�,�dshare/gems/gems/rack-3.0.8/lib/rack/files.rbnu�[���PK*J[�&�{!{!3�dshare/gems/gems/rack-3.0.8/lib/rack/query_parser.rbnu�[���PK*J[�/�{{3޸dshare/gems/gems/rack-3.0.8/lib/rack/mock_request.rbnu�[���PK*J[;�`�ff.��dshare/gems/gems/rack-3.0.8/lib/rack/runtime.rbnu�[���PK*J[iZ�&&5��dshare/gems/gems/rack-3.0.8/lib/rack/content_length.rbnu�[���PK*J[�R�

4�dshare/gems/gems/rack-3.0.8/lib/rack/mock_response.rbnu�[���PK*J[�gG��1��dshare/gems/gems/rack-3.0.8/lib/rack/media_type.rbnu�[���PK*J[��Y		.��dshare/gems/gems/rack-3.0.8/lib/rack/cascade.rbnu�[���PK*J[Y4��88/��dshare/gems/gems/rack-3.0.8/lib/rack/sendfile.rbnu�[���PK*J[M�}Y??+z	eshare/gems/gems/rack-3.0.8/lib/rack/mock.rbnu�[���PK*J[YY�d

6
eshare/gems/gems/rack-3.0.8/lib/rack/tempfile_reaper.rbnu�[���PK*J[@�j�	�	0�
eshare/gems/gems/rack-3.0.8/lib/rack/constants.rbnu�[���PK*J[U``"��0�eshare/gems/gems/rack-3.0.8/lib/rack/multipart.rbnu�[���PK*J[��3���6�eshare/gems/gems/rack-3.0.8/lib/rack/method_override.rbnu�[���PK*J[М}���+#eshare/gems/gems/rack-3.0.8/lib/rack/file.rbnu�[���PK*J[O�~�0$eshare/gems/gems/rack-3.0.8/lib/rack/recursive.rbnu�[���PK*J[���4
4
.�+eshare/gems/gems/rack-3.0.8/lib/rack/chunked.rbnu�[���PK*J[d�NN29eshare/gems/gems/rack-3.0.8/lib/rack/show_status.rbnu�[���PK*J[G�	TT&�Geshare/gems/gems/rack-3.0.8/MIT-LICENSEnu�[���PK*J[t2�����'mLeshare/gems/gems/rack-3.0.8/CHANGELOG.mdnu�[���PK*J[YM�!��%�fshare/gems/gems/erb-4.0.4/libexec/erbnuȯ��PK*J[�la6UU:�%fshare/gems/gems/json-2.9.1/lib/json/ext/generator/state.rbnu�[���PK*J[o/��CC4�4fshare/gems/gems/json-2.9.1/lib/json/add/date_time.rbnu�[���PK*J[`�D�YY1\;fshare/gems/gems/json-2.9.1/lib/json/add/regexp.rbnu�[���PK*J[D%D��1@fshare/gems/gems/json-2.9.1/lib/json/add/struct.rbnu�[���PK*J[�ۛ���4Ffshare/gems/gems/json-2.9.1/lib/json/add/exception.rbnu�[���PK*J[��

/:Kfshare/gems/gems/json-2.9.1/lib/json/add/date.rbnu�[���PK*J[t%A,/�Pfshare/gems/gems/json-2.9.1/lib/json/add/time.rbnu�[���PK*J[cW8�\\/Vfshare/gems/gems/json-2.9.1/lib/json/add/core.rbnu�[���PK*J[r����0�Wfshare/gems/gems/json-2.9.1/lib/json/add/range.rbnu�[���PK*J[��7��5�]fshare/gems/gems/json-2.9.1/lib/json/add/bigdecimal.rbnu�[���PK*J[5���3�dfshare/gems/gems/json-2.9.1/lib/json/add/rational.rbnu�[���PK*J[n˧�XX.�ifshare/gems/gems/json-2.9.1/lib/json/add/set.rbnu�[���PK*J[i��222�nfshare/gems/gems/json-2.9.1/lib/json/add/complex.rbnu�[���PK*J[A@ ��2tfshare/gems/gems/json-2.9.1/lib/json/add/ostruct.rbnu�[���PK*J[�4B�1"zfshare/gems/gems/json-2.9.1/lib/json/add/symbol.rbnu�[���PK*J[�B�**5�~fshare/gems/gems/json-2.9.1/lib/json/generic_object.rbnu�[���PK*J['47�CC.�fshare/gems/gems/json-2.9.1/lib/json/version.rbnu�[���PK*J[�A˦LL*��fshare/gems/gems/json-2.9.1/lib/json/ext.rbnu�[���PK*J[�o�9k9k-d�fshare/gems/gems/json-2.9.1/lib/json/common.rbnu�[���PK*J[�̹WNWN&��fshare/gems/gems/json-2.9.1/lib/json.rbnu�[���PK*J[�;Tww�Bgshare/ruby/tmpdir.rbnu�[���PK*J[hz���Y�YbYgshare/ruby/logger.rbnu�[���PK*J[g�V���>��gshare/ruby/syntax_suggest/capture/before_after_keyword_ends.rbnu�[���PK*J[�<�WW9��gshare/ruby/syntax_suggest/capture/falling_indent_lines.rbnu�[���PK*J[�$.l3l�gshare/ruby/syntax_suggest/display_invalid_blocks.rbnu�[���PK*J[��� <<1��gshare/ruby/syntax_suggest/left_right_lex_count.rbnu�[���PK*J[�4��'q�gshare/ruby/syntax_suggest/code_block.rbnu�[���PK*J[��:���&O�gshare/ruby/syntax_suggest/lex_value.rbnu�[���PK*J[��{��"�"+��gshare/ruby/syntax_suggest/clean_document.rbnu�[���PK*J[$0��)�
hshare/ruby/syntax_suggest/block_expand.rbnu�[���PK*J[�`���*�!hshare/ruby/syntax_suggest/ripper_errors.rbnu�[���PK*J[_���
�
+�%hshare/ruby/syntax_suggest/explain_syntax.rbnu�[���PK*J[�#�{��1�0hshare/ruby/syntax_suggest/capture_code_context.rbnu�[���PK*J[&����,	Lhshare/ruby/syntax_suggest/unvisited_lines.rbnu�[���PK*J[���AA(&Ohshare/ruby/syntax_suggest/code_search.rbnu�[���PK*J[�'�vv �^hshare/ruby/syntax_suggest/cli.rbnu�[���PK*J[Ŭ��;�khshare/ruby/syntax_suggest/display_code_with_line_numbers.rbnu�[���PK*J[��m):shshare/ruby/syntax_suggest/parse_blocks_from_indent_line.rbnu�[���PK*J[��M�LL$oyhshare/ruby/syntax_suggest/version.rbnu�[���PK*J[��~��2zhshare/ruby/syntax_suggest/pathname_from_message.rbnu�[���PK*J[Nc-��.!�hshare/ruby/syntax_suggest/around_block_scan.rbnu�[���PK*J[�D.���)�hshare/ruby/syntax_suggest/scan_history.rbnu�[���PK*J[�Y�Ө�$"�hshare/ruby/syntax_suggest/lex_all.rbnu�[���PK*J[>K���+�hshare/ruby/syntax_suggest/priority_queue.rbnu�[���PK*J[�:�D~~&w�hshare/ruby/syntax_suggest/code_line.rbnu�[���PK*J[�
�F2K�hshare/ruby/syntax_suggest/priority_engulf_queue.rbnu�[���PK*J[w���mm ��hshare/ruby/syntax_suggest/api.rbnu�[���PK*J[Q0��*y�hshare/ruby/syntax_suggest/mini_stringio.rbnu�[���PK*J[�z�
�
%��hshare/ruby/syntax_suggest/core_ext.rbnu�[���PK*J[��0tt*�hshare/ruby/syntax_suggest/code_frontier.rbnu�[���PK*J[�4�����ishare/ruby/objspace/trace.rbnu�[���PK*J[�f�8��zishare/ruby/timeout.rbnu�[���PK*J[���j�1ishare/ruby/yaml/dbm.rbnu�[���PK*J[��0�ee�Nishare/ruby/yaml/store.rbnu�[���PK*J[|�O���Wishare/ruby/readline.rbnu�[���PK*J[b7��:�:�Xishare/ruby/fiddle/struct.rbnu�[���PK*J[w���ishare/ruby/fiddle/function.rbnu�[���PK*J[������ishare/ruby/fiddle/types.rbnu�[���PK*J[�Б�;;�ishare/ruby/fiddle/pack.rbnu�[���PK*J[~��^C^C o�ishare/ruby/fiddle/ffi_backend.rbnu�[���PK*J[ӳ�&&�ishare/ruby/fiddle/version.rbnu�[���PK*J[�_�����ishare/ruby/fiddle/closure.rbnu�[���PK*J[xE�%%��ishare/ruby/fiddle/cparser.rbnu�[���PK*J[r�W�<<�jshare/ruby/fiddle/value.rbnu�[���PK*J[taeP#P#}*jshare/ruby/fiddle/import.rbnu�[���PK*J[ڮ�R��Njshare/ruby/ripper/core.rbnu�[���PK*J[��CppUjshare/ruby/ripper/filter.rbnu�[���PK*J[ty��&�&�]jshare/ruby/ripper/lexer.rbnu�[���PK*J[u&E,,�jshare/ruby/ripper/sexp.rbnu�[���PK*J[�w��pp_�jshare/ruby/coverage.rbnu�[���PK*J[L��;;�jshare/ruby/optionparser.rbnu�[���PK*J[�^C������jshare/ruby/socket.rbnu�[���PK*J[(�[D��ׇkshare/ruby/forwardable/impl.rbnu�[���PK*J[[���Ékshare/ruby/monitor.rbnu�[���PK*J[�[�����kshare/ruby/date.rbnu�[���PK*J[�5V^%%Ӫkshare/ruby/open3/version.rbnu�[���PK*J[��T�C�kshare/ruby/shellwords.rbnu�[���PK*J[+�uQuQ��kshare/ruby/pstore.rbnu�[���PK*J[Q�R��alshare/ruby/strscan/strscan.rbnu�[���PK*J[�'t��[�[�lshare/ruby/resolv.rbnu�[���PK*J[h���_�_lzmshare/ruby/time.rbnu�[���PK*J[%��mshare/gems/gems/psych-5.2.2/lib/psychnuȯ��PK*J[N.������mshare/ruby/expect.rbnu�[���PK*J[-
i�#:#:��mshare/ruby/erb.rbnu�[���PK*J[Wܢ��Y�YFnshare/ruby/ipaddr.rbnu�[���PK*J[��4+�r�r#xnshare/ruby/mkmf.rbnu�[���PK*J[7�ɴR�R��oshare/ruby/tempfile.rbnu�[���PK*J[Q�hV'V'�=pshare/ruby/cgi.rbnu�[���PK*J[X���?�?zepshare/ruby/prettyprint.rbnu�[���PK*J[Z�����y�pshare/ruby/net/http/header.rbnu�[���PK*J[Io�Dp0p0&�%qshare/ruby/net/http/generic_request.rbnu�[���PK*J[���f{L{L�Vqshare/ruby/net/http/response.rbnu�[���PK*J["=S�3�3f�qshare/ruby/net/http/requests.rbnu�[���PK*J[������ ��qshare/ruby/net/http/responses.rbnu�[���PK*J[	j��"�urshare/ruby/net/http/proxy_delta.rbnu�[���PK*J[�H�oEE!Swrshare/ruby/net/http/exceptions.rbnu�[���PK*J[:,�~���zrshare/ruby/net/http/status.rbnu�[���PK*J[�Z,s551�rshare/ruby/net/http/request.rbnu�[���PK*J[y�!�-�-��rshare/ruby/net/protocol.rbnu�[���PK*J[=u�=��rshare/ruby/net/https.rbnu�[���PK*J[���c9V9VR�rshare/ruby/net/http.rbnu�[���PK*J[����	�	�tshare/ruby/ripper.rbnu�[���PK*J[<� <<� tshare/ruby/openssl.rbnu�[���PK*J[��JJT%tshare/ruby/syntax_suggest.rbnu�[���PK*J[�brp$$�%tshare/ruby/forwardable.rbnu�[���PK*J[���߬,�,PJtshare/ruby/un.rbnu�[���PK*J[KU���;�;<wtshare/ruby/reline.rbnu�[���PK*J[��5�tshare/ruby/uri/ldap.rbnu�[���PK*J[җA����tshare/ruby/uri/ldaps.rbnu�[���PK*J[�B�4�4���tshare/ruby/uri/generic.rbnu�[���PK*J[�N ]aushare/ruby/uri/rfc3986_parser.rbnu�[���PK*J[���..�yushare/ruby/uri/https.rbnu�[���PK*J[�(�g��*|ushare/ruby/uri/version.rbnu�[���PK*J[\\�&&	}ushare/ruby/uri/ftp.rbnu�[���PK*J[J�؂*E*E t�ushare/ruby/uri/rfc2396_parser.rbnu�[���PK*J[���QQ��ushare/ruby/uri/mailto.rbnu�[���PK*J[�R���ushare/ruby/uri/wss.rbnu�[���PK*J[��q���vshare/ruby/uri/file.rbnu�[���PK*J[�K���
vshare/ruby/uri/ws.rbnu�[���PK*J[rR��AiAiSvshare/ruby/uri/common.rbnu�[���PK*J[��c~~�|vshare/ruby/uri/http.rbnu�[���PK*J[z�� ��vshare/ruby/bundled_gems.rbnu�[���PK*J[S�Q8�)�)	�vshare/ruby/openssl/buffering.rbnu�[���PK*J[��?U�.�.?�vshare/ruby/openssl/x509.rbnu�[���PK*J[͒����wshare/ruby/openssl/bn.rbnu�[���PK*J[�*eewshare/ruby/openssl/pkcs5.rbnu�[���PK*J[�a���wshare/ruby/openssl/asn1.rbnu�[���PK*J[�(*G;;/wshare/ruby/openssl/pkey.rbnu�[���PK*J[	�P�	�	�Zwshare/ruby/openssl/hmac.rbnu�[���PK*J[�ORFF�dwshare/ruby/openssl/version.rbnu�[���PK*J[�NRjLjL`ewshare/ruby/openssl/ssl.rbnu�[���PK*J[新�88�wshare/ruby/openssl/marshal.rbnu�[���PK*J[Kk�,,��wshare/ruby/openssl/digest.rbnu�[���PK*J[�����wshare/ruby/openssl/cipher.rbnu�[���PK*J[���p-p-,�wshare/ruby/erb/compiler.rbnu�[���PK*J[�I�����wshare/ruby/erb/def_method.rbnu�[���PK*J[��
�\\�wshare/ruby/erb/version.rbnu�[���PK*J[�H,ȧ���wshare/ruby/erb/util.rbnu�[���PK*J[m��0101��wshare/ruby/random/formatter.rbnu�[���PK*J[ϰ��D�D,xshare/ruby/pathname.rbnu�[���PK*J[���h

)qxshare/ruby/find.rbnu�[���PK*J[�6�		|{xshare/ruby/securerandom.rbnu�[���PK*J[#�xshare/gems/gems/json-2.9.1/lib/jsonnuȯ��PK*J[�<[���5�xshare/ruby/set/sorted_set.rbnu�[���PK*J[�:�D__F�xshare/ruby/uri.rbnu�[���PK*J[��
R�J�J�xshare/ruby/benchmark.rbnu�[���PK*J[�@|�dd��xshare/ruby/set.rbnu�[���PK*J[m�gD%9%9Byshare/ruby/tsort.rbnu�[���PK*J[�:i7�{yshare/ruby/digest/sha2.rbnu�[���PK*J[24�Z88 ފyshare/ruby/digest/sha2/loader.rbnu�[���PK*J[�JF�EEf�yshare/ruby/digest/version.rbnu�[���PK*J[�6�33��yshare/ruby/digest/loader.rbnu�[���PK*J[�v88 u�yshare/ruby/ruby_vm/rjit/block.rbnu�[���PK*J[�x2.�,�,"��yshare/ruby/ruby_vm/rjit/context.rbnu�[���PK*J[��		%�yshare/ruby/ruby_vm/rjit/code_block.rbnu�[���PK*J[�����%R�yshare/ruby/ruby_vm/rjit/invariants.rbnu�[���PK*J[ȍ�ҧ���&��yshare/ruby/ruby_vm/rjit/instruction.rbnu�[���PK*J[��f�� �szshare/ruby/ruby_vm/rjit/stats.rbnu�[���PK*J[�nD?�� t�zshare/ruby/ruby_vm/rjit/hooks.rbnu�[���PK*J[
�M��B�B#y�zshare/ruby/ruby_vm/rjit/compiler.rbnu�[���PK*J[gI����$��zshare/ruby/ruby_vm/rjit/jit_state.rbnu�[���PK*J["�F�oo&��zshare/ruby/ruby_vm/rjit/branch_stub.rbnu�[���PK*J[��kO��%��zshare/ruby/ruby_vm/rjit/entry_stub.rbnu�[���PK*J[nI�����zshare/ruby/ruby_vm/rjit/type.rbnu�[���PK*J[|���*�*$��zshare/ruby/ruby_vm/rjit/c_pointer.rbnu�[���PK*J[�.�=�
�
!�({share/ruby/ruby_vm/rjit/c_type.rbnu�[���PK*J[��XNN(�3{share/ruby/ruby_vm/rjit/exit_compiler.rbnu�[���PK*J[�<o@�@�$eG{share/ruby/ruby_vm/rjit/assembler.rbnu�[���PK*J[��:3:3(��{share/ruby/ruby_vm/rjit/insn_compiler.rbnu�[���PK*J[)�1����~share/ruby/objspace.rbnu�[���PK*J[P���]share/ruby/prism.rbnu�[���PK*J[p뢞']share/ruby/did_you_mean/jaro_winkler.rbnu�[���PK*J[>�(�"share/ruby/did_you_mean/spell_checker.rbnu�[���PK*J[+*�77=%(share/ruby/did_you_mean/spell_checkers/name_error_checkers.rbnu�[���PK*J[	���hh6�*share/ruby/did_you_mean/spell_checkers/null_checker.rbnu�[���PK*J[���MMS�+share/ruby/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rbnu�[���PK*J[�l'��Pg4share/ruby/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rbnu�[���PK*J[,����=�9share/ruby/did_you_mean/spell_checkers/method_name_checker.rbnu�[���PK*J[:mG���B�Bshare/ruby/did_you_mean/spell_checkers/pattern_key_name_checker.rbnu�[���PK*J[
5�ė�;CFshare/ruby/did_you_mean/spell_checkers/key_error_checker.rbnu�[���PK*J[!s����>EIshare/ruby/did_you_mean/spell_checkers/require_path_checker.rbnu�[���PK*J[(�9�99-�Nshare/ruby/did_you_mean/tree_spell_checker.rbnu�[���PK*J[��YV11"7Zshare/ruby/did_you_mean/version.rbnu�[���PK*J[a�~��5�Zshare/ruby/did_you_mean/formatters/plain_formatter.rbnu�[���PK*J[�z[a7�[share/ruby/did_you_mean/formatters/verbose_formatter.rbnu�[���PK*J[B�H�$0]share/ruby/did_you_mean/formatter.rbnu�[���PK*J[\Ն0��'�bshare/ruby/did_you_mean/experimental.rbnu�[���PK*J[��&�.~cshare/ruby/did_you_mean/core_ext/name_error.rbnu�[���PK*J[�x�J��"�hshare/ruby/did_you_mean/verbose.rbnu�[���PK*J[U1i__&�ishare/ruby/did_you_mean/levenshtein.rbnu�[���PK*J[n߷��|oshare/ruby/yaml.rbnu�[���PK*J[JU�\3;3;Fxshare/ruby/fileutils.rbnu�[���PK*J[��\ll���share/ruby/weakref.rbnu�[���PK*J[�QӴ.�.q��share/ruby/delegate.rbnu�[���PK*J[6B�((k�share/ruby/English.rbnu�[���PK*J[��!vmvm&��share/ruby/unicode_normalize/tables.rbnu�[���PK*J[���)�l�share/ruby/unicode_normalize/normalize.rbnu�[���PK*J[/��share/gems/gems/bigdecimal-3.1.8/lib/bigdecimalnuȯ��PK*J[����_��share/ruby/fiddle.rbnu�[���PK*J[��2]+o+o S��share/ruby/prism/parse_result.rbnu�[���PK*J[W��9�I�I��share/ruby/prism/ffi.rbnu�[���PK*J[���W��'�M�share/ruby/prism/parse_result/errors.rbnu�[���PK*J[<_���)V�share/ruby/prism/parse_result/newlines.rbnu�[���PK*J[d_֨��).f�share/ruby/prism/parse_result/comments.rbnu�[���PK*J[ �3�y'y'$I~�share/ruby/prism/desugar_compiler.rbnu�[���PK*J[���9�<�<��share/ruby/prism/compiler.rbnu�[���PK*J[�wkDD&�share/ruby/prism/polyfill/byteindex.rbnu�[���PK*J[<b{$��share/ruby/prism/polyfill/unpack1.rbnu�[���PK*J[��.�;�;%�share/ruby/prism/node_ext.rbnu�[���PK*J[�4�mm/#�share/ruby/prism/pack.rbnu�[���PK*J[!m������:�share/ruby/prism/dsl.rbnu�[���PK*J[T������share/ruby/prism/translation.rbnu�[���PK*J[��W�f<f<��share/ruby/prism/relocation.rbnu�[���PK*J[��N� � �[�share/ruby/prism/pattern.rbnu�[���PK*J[i�l�OTOT%c|�share/ruby/prism/mutation_compiler.rbnu�[���PK*J[!ۘ���+чshare/ruby/prism/translation/ripper/shim.rbnu�[���PK*J[<���//++҇share/ruby/prism/translation/ripper/sexp.rbnu�[���PK*J[}��}G/G/&�އshare/ruby/prism/translation/parser.rbnu�[���PK*J[���,��/R�share/ruby/prism/translation/parser/compiler.rbnu�[���PK*J[����B�B,V)�share/ruby/prism/translation/parser/lexer.rbnu�[���PK*J[O���VyVy&�l�share/ruby/prism/translation/ripper.rbnu�[���PK*J[��v��(I�share/ruby/prism/translation/parser34.rbnu�[���PK*J[�(��+��share/ruby/prism/translation/ruby_parser.rbnu�[���PK*J[��.���(��share/ruby/prism/translation/parser33.rbnu�[���PK*J[�b�r�rJ��share/ruby/prism/reflection.rbnu�[���PK*J[@c���h"�share/ruby/prism/dispatcher.rbnu�[���PK*J[���(�O�O�ߍshare/ruby/prism/serialize.rbnu�[���PK*J[`�ո�����/�share/ruby/prism/lex_compat.rbnu�[���PK*J[V�B�� ��share/ruby/prism/string_query.rbnu�[���PK*J[c!��=�=´�share/ruby/prism/visitor.rbnu�[���PK*J[�2��$	�$	��share/ruby/prism/node.rbnu�[���PK*J[�������#��share/ruby/prism/inspect_visitor.rbnu�[���PK*J[*�uD�\�\"�	�share/ruby/error_highlight/base.rbnu�[���PK*J[XH7�..%�f�share/ruby/error_highlight/version.rbnu�[���PK*J[�ޞ��	�	'g�share/ruby/error_highlight/formatter.rbnu�[���PK*J[��=��&Eq�share/ruby/error_highlight/core_ext.rbnu�[���PK*J[D4��8�8#w�share/ruby/ostruct.rbnu�[���PK*J[baA2��)E��share/ruby/reline/key_actor/vi_command.rbnu�[���PK*J[��Sgg(�ʛshare/ruby/reline/key_actor/vi_insert.rbnu�[���PK*J[�yx�DD(P�share/ruby/reline/key_actor/composite.rbnu�[���PK*J[`�X���#��share/ruby/reline/key_actor/base.rbnu�[���PK*J[��$�share/ruby/reline/key_actor/emacs.rbnu�[���PK*J[���+U+U-c�share/ruby/reline/unicode/east_asian_width.rbnu�[���PK*J[E��(�(�[�share/ruby/reline/config.rbnu�[���PK*J[��8/44؄�share/ruby/reline/unicode.rbnu�[���PK*J[lM'b�3�3 '��share/ruby/reline/line_editor.rbnu�[���PK*J[�|@�&&��share/ruby/reline/version.rbnu�[���PK*J[
M�$$m�share/ruby/reline/face.rbnu�[���PK*J[��'g}	}	��share/ruby/reline/kill_ring.rbnu�[���PK*J[��!����
�share/ruby/reline/history.rbnu�[���PK*J[B� �ii��share/ruby/reline/io.rbnu�[���PK*J[n�
��0�share/ruby/reline/key_stroke.rbnu�[���PK*J[��=���[$�share/ruby/reline/key_actor.rbnu�[���PK*J[����!�!w%�share/ruby/reline/io/ansi.rbnu�[���PK*J[L�r��vG�share/ruby/reline/io/dumb.rbnu�[���PK*J[1�n�B�B�N�share/ruby/reline/io/windows.rbnu�[���PK*J[�U�������share/ruby/open3.rbnu�[���PK*J[}h�����O�share/ruby/optparse/kwargs.rbnu�[���PK*J[�K���S�share/ruby/optparse/ac.rbnu�[���PK*J[����ppR[�share/ruby/optparse/date.rbnu�[���PK*J[�V����!
]�share/ruby/optparse/shellwords.rbnu�[���PK*J[����^�share/ruby/optparse/time.rbnu�[���PK*J[�)��4_�share/ruby/optparse/version.rbnu�[���PK*J[A��h�share/ruby/optparse/uri.rbnu�[���PK*J[�:���h�share/ruby/optparse.rbnu�[���PK*J[�g3�mImI�i�share/ruby/pp.rbnu�[���PK*J[R*����share/ruby/did_you_mean.rbnu�[���PK*J[~�֨�q�q�Šshare/ruby/open-uri.rbnu�[���PK*J[�7TT�7�share/ruby/error_highlight.rbnu�[���PK*J[�:��5
5
M8�share/ruby/digest.rbnu�[���PK*J[�;^���E�share/ruby/logger/errors.rbnu�[���PK*J[�;�DD�F�share/ruby/logger/version.rbnu�[���PK*J[b��nnnWG�share/ruby/logger/severity.rbnu�[���PK*J[����K�share/ruby/logger/formatter.rbnu�[���PK*J[=�/�88vN�share/ruby/logger/log_device.rbnu�[���PK*J[�N�r���g�share/ruby/logger/period.rbnu�[���PK*J['Fn�share/gems/gems/io-console-0.8.0/lib/ionuȯ��PK*J[v��y�n�share/ruby/singleton.rbnu�[���PK*J[\��	�������share/ruby/cgi/html.rbnu�[���PK*J[��8D�L�L�
�share/ruby/cgi/session.rbnu�[���PK*J[@��%u%u�Z�share/ruby/cgi/core.rbnu�[���PK*J[���҄
�
 1Тshare/ruby/cgi/session/pstore.rbnu�[���PK*J[����E E ۢshare/ruby/cgi/util.rbnu�[���PK*J[���NN���share/ruby/cgi/cookie.rbnu�[���PK*J[V�S&�share/licenses/alt-ruby34/BSDLnu�[���PK*J[�G{������share/licenses/alt-ruby34/LEGALnu�[���PK*J[��FN�F�Fvģshare/licenses/alt-ruby34/GPLnu�[���PK*J[Q�{	{	!o�share/licenses/alt-ruby34/COPYINGnu�[���PK*J[z]��	�	$;�share/licenses/alt-ruby34/COPYING.janu�[���PK*J[�G{�����$��share/licenses/alt-ruby34-libs/LEGALnu�[���PK*J[��FN�F�F"�Ȥshare/licenses/alt-ruby34-libs/GPLnu�[���PK*J[Q�{	{	&��share/licenses/alt-ruby34-libs/COPYINGnu�[���PK*J[z]��	�	)X�share/licenses/alt-ruby34-libs/COPYING.janu�[���PK*J[V�S$�#�share/licenses/alt-ruby34-devel/BSDLnu�[���PK*J[�G{�����%)�share/licenses/alt-ruby34-devel/LEGALnu�[���PK*J[��FN�F�F#ҥshare/licenses/alt-ruby34-devel/GPLnu�[���PK*J[Q�{	{	'
�share/licenses/alt-ruby34-devel/COPYINGnu�[���PK*J[z]��	�	*�"�share/licenses/alt-ruby34-devel/COPYING.janu�[���PK*J[7)�cc4-�include/ruby.hnu�[���PK*J[x�y0���2�include/ruby/re.hnu�[���PK*J[�������M�include/ruby/onigmo.hnu�[���PK*J["��^���include/ruby/version.hnu�[���PK*J[��l
~n~n��include/ruby/atomic.hnu�[���PK*J[G�o����include/ruby/st.hnu�[���PK*J[QS=���include/ruby/missing.hnu�[���PK*J[�1�:�:���include/ruby/ruby.hnu�[���PK*J[�}��A�A��include/ruby/fiber/scheduler.hnu�[���PK*J[)��Svv/6�include/ruby/backward.hnu�[���PK*J[w���&&�:�include/ruby/subst.hnu�[���PK*J[1+%1%1V>�include/ruby/thread.hnu�[���PK*J[�KCgg�o�include/ruby/digest.hnu�[���PK*J[2�-���l|�include/ruby/regex.hnu�[���PK*J[:T�++���include/ruby/memory_view.hnu�[���PK*J[�j�{��include/ruby/defines.hnu�[���PK*J[�넟�"�"W��include/ruby/ractor.hnu�[���PK*J[��s1  vڨinclude/ruby/encoding.hnu�[���PK*J[�$r��(�ߨinclude/ruby/internal/attr/forceinline.hnu�[���PK*J[�wq?��(�include/ruby/internal/attr/diagnose_if.hnu�[���PK*J[9�u ��!J�include/ruby/internal/attr/pure.hnu�[���PK*J[�m.LLL%l��include/ruby/internal/attr/restrict.hnu�[���PK*J[]ڲU��&
�include/ruby/internal/attr/flag_enum.hnu�[���PK*J[�܄ґ�)&�include/ruby/internal/attr/maybe_unused.hnu�[���PK*J[��\��/�include/ruby/internal/attr/enum_extensibility.hnu�[���PK*J[�>U�YY%,�include/ruby/internal/attr/noreturn.hnu�[���PK*J[��EGG*��include/ruby/internal/attr/packed_struct.hnu�[���PK*J[��rr${(�include/ruby/internal/attr/warning.hnu�[���PK*J[��-,A/�include/ruby/internal/attr/returns_nonnull.hnu�[���PK*J[Ϟ]bb"�6�include/ruby/internal/attr/error.hnu�[���PK*J[�Xa�%j=�include/ruby/internal/attr/noinline.hnu�[���PK*J[Þs�DD!�D�include/ruby/internal/attr/cold.hnu�[���PK*J[���
�
$TL�include/ruby/internal/attr/noalias.hnu�[���PK*J[���	�	'�Z�include/ruby/internal/attr/artificial.hnu�[���PK*J[z+�uu$xd�include/ruby/internal/attr/weakref.hnu�[���PK*J[��C��%Ak�include/ruby/internal/attr/noexcept.hnu�[���PK*J[��$��$D|�include/ruby/internal/attr/nonnull.hnu�[���PK*J[�2=���"v��include/ruby/internal/attr/const.hnu�[���PK*J[5�@[��&g��include/ruby/internal/attr/nodiscard.hnu�[���PK*J[B�-#g��include/ruby/internal/attr/format.hnu�[���PK*J[����<
<
'���include/ruby/internal/attr/deprecated.hnu�[���PK*J[�Z���'R��include/ruby/internal/attr/alloc_size.hnu�[���PK*J[.3\�
�
&9��include/ruby/internal/attr/constexpr.hnu�[���PK*J[0;�e-e-'O��include/ruby/internal/arithmetic/long.hnu�[���PK*J[8�QTT,�include/ruby/internal/arithmetic/long_long.hnu�[���PK*J[�{rff)��include/ruby/internal/arithmetic/mode_t.hnu�[���PK*J[)���+z�include/ruby/internal/arithmetic/intptr_t.hnu�[���PK*J[-S)���,��include/ruby/internal/arithmetic/st_data_t.hnu�[���PK*J[NP�4TT)# �include/ruby/internal/arithmetic/size_t.hnu�[���PK*J[��(�^^(�+�include/ruby/internal/arithmetic/uid_t.hnu�[���PK*J[�D�v�
�
)�3�include/ruby/internal/arithmetic/double.hnu�[���PK*J[n-o
^^(�>�include/ruby/internal/arithmetic/gid_t.hnu�[���PK*J[҃�W+
+
'�F�include/ruby/internal/arithmetic/char.hnu�[���PK*J[("ڟ^^(
T�include/ruby/internal/arithmetic/pid_t.hnu�[���PK*J[=nVt{{)�[�include/ruby/internal/arithmetic/fixnum.hnu�[���PK*J[���	�	(�g�include/ruby/internal/arithmetic/off_t.hnu�[���PK*J[���E E &�q�include/ruby/internal/arithmetic/int.hnu�[���PK*J[.���SS(N��include/ruby/internal/arithmetic/short.hnu�[���PK*J[<&xXRR���include/ruby/internal/core.hnu�[���PK*J[�E��ܗܗ���include/ruby/internal/anyargs.hnu�[���PK*J[��sD;/;/ �C�include/ruby/internal/variable.hnu�[���PK*J[�*UU Ms�include/ruby/internal/stdalign.hnu�[���PK*J[f���gg"�include/ruby/internal/constant_p.hnu�[���PK*J[���%���include/ruby/internal/static_assert.hnu�[���PK*J[��l]l]ך�include/ruby/internal/memory.hnu�[���PK*J[Q(bEE"���include/ruby/internal/arithmetic.hnu�[���PK*J[��H""!(�include/ruby/internal/intern/re.hnu�[���PK*J[d���%�#�include/ruby/internal/intern/signal.hnu�[���PK*J[²<1~%~%#v=�include/ruby/internal/intern/file.hnu�[���PK*J[*;wZieie$Gc�include/ruby/internal/intern/array.hnu�[���PK*J[�Y� ��&ɬinclude/ruby/internal/intern/marshal.hnu�[���PK*J[�z�$6$6#$߬include/ruby/internal/intern/proc.hnu�[���PK*J[�K��<S<S'��include/ruby/internal/intern/variable.hnu�[���PK*J[>LG��&.i�include/ruby/internal/intern/numeric.hnu�[���PK*J[�S�е-�-#|��include/ruby/internal/intern/cont.hnu�[���PK*J[(��  #���include/ruby/internal/intern/ruby.hnu�[���PK*J[ƀ_KK#���include/ruby/internal/intern/enum.hnu�[���PK*J[|Y�M��$�̭include/ruby/internal/intern/range.hnu�[���PK*J[��)')'$�ܭinclude/ruby/internal/intern/error.hnu�[���PK*J[���HH%M�include/ruby/internal/intern/thread.hnu�[���PK*J[�Ã�x.x.#�L�include/ruby/internal/intern/hash.hnu�[���PK*J[�:61-1-&�{�include/ruby/internal/intern/process.hnu�[���PK*J[�
Z���"��include/ruby/internal/intern/dir.hnu�[���PK*J[�n�{VV#���include/ruby/internal/intern/time.hnu�[���PK*J[]�� � &�ʮinclude/ruby/internal/intern/complex.hnu�[���PK*J[��:�

%��include/ruby/internal/intern/compar.hnu�[���PK*J[���RLRL%/��include/ruby/internal/intern/object.hnu�[���PK*J[T�A�$�$%�B�include/ruby/internal/intern/struct.hnu�[���PK*J[@n�4jj%�g�include/ruby/internal/intern/select.hnu�[���PK*J[G6e��
�
%�w�include/ruby/internal/intern/string.hnu�[���PK*J[ �i�!�!#���include/ruby/internal/intern/eval.hnu�[���PK*J[���dDD&姰include/ruby/internal/intern/sprintf.hnu�[���PK*J[��Ξ��/��include/ruby/internal/intern/select/largesize.hnu�[���PK*J[�7���+�ݰinclude/ruby/internal/intern/select/posix.hnu�[���PK*J[����[['��include/ruby/internal/intern/rational.hnu�[���PK*J[V3CL,x,x%��include/ruby/internal/intern/bignum.hnu�[���PK*J[��`���$1��include/ruby/internal/intern/parse.hnu�[���PK*J[>xu�)�)#;��include/ruby/internal/intern/load.hnu�[���PK*J[?��
�>�>$<ıinclude/ruby/internal/intern/class.hnu�[���PK*J[o*}00%]�include/ruby/internal/intern/random.hnu�[���PK*J[���A�A!��include/ruby/internal/intern/vm.hnu�[���PK*J[��Jii!�V�include/ruby/internal/intern/io.hnu�[���PK*J[{C	��0�0)9��include/ruby/internal/intern/enumerator.hnu�[���PK*J[�Ze��%�%#�include/ruby/internal/interpreter.hnu�[���PK*J[^�
[�S�S4�include/ruby/internal/error.hnu�[���PK*J[���z��2k�include/ruby/internal/stdbool.hnu�[���PK*J[(]hF��)/s�include/ruby/internal/compiler_is/apple.hnu�[���PK*J[����
�
*b{�include/ruby/internal/compiler_is/sunpro.hnu�[���PK*J[�
���	�	(O��include/ruby/internal/compiler_is/msvc.hnu�[���PK*J[�H		)���include/ruby/internal/compiler_is/intel.hnu�[���PK*J[�pq=)瘳include/ruby/internal/compiler_is/clang.hnu�[���PK*J[��,��'C��include/ruby/internal/compiler_is/gcc.hnu�[���PK*J[��%�
�
!g��include/ruby/internal/stdckdint.hnu�[���PK*J[èE�m��include/ruby/internal/value.hnu�[���PK*J[Qk۲		�ijinclude/ruby/internal/cast.hnu�[���PK*J[�`@<55(γinclude/ruby/internal/symbol.hnu�[���PK*J[�L���#��include/ruby/internal/encoding/re.hnu�[���PK*J[4�"��*��include/ruby/internal/encoding/coderange.hnu�[���PK*J[��YR��'�,�include/ruby/internal/encoding/symbol.hnu�[���PK*J[�1l�����)�>�include/ruby/internal/encoding/encoding.hnu�[���PK*J[��*�<�<'�δinclude/ruby/internal/encoding/string.hnu�[���PK*J[�j}��
�
(�include/ruby/internal/encoding/sprintf.hnu�[���PK*J[5x��WW&��include/ruby/internal/encoding/ctype.hnu�[���PK*J[�WF}d}d*�9�include/ruby/internal/encoding/transcode.hnu�[���PK*J[���)b��include/ruby/internal/encoding/pathname.hnu�[���PK*J[��Q���˹�include/ruby/internal/glob.hnu�[���PK*J[�/X��8�8"εinclude/ruby/internal/value_type.hnu�[���PK*J[M�"����1�include/ruby/internal/fl_type.hnu�[���PK*J[�J�22��include/ruby/internal/abi.hnu�[���PK*J[��CZZ���include/ruby/internal/newobj.hnu�[���PK*J[���
�
&(��include/ruby/internal/compiler_since.hnu�[���PK*J[\�и�"]��include/ruby/internal/core/rhash.hnu�[���PK*J[��kk$gǶinclude/ruby/internal/core/rstruct.hnu�[���PK*J[�A��BB$&ضinclude/ruby/internal/core/rstring.hnu�[���PK*J[Z2�$#��include/ruby/internal/core/rbasic.hnu�[���PK*J[�w�)[)['Z0�include/ruby/internal/core/rtypeddata.hnu�[���PK*J[SmC�$ڋ�include/ruby/internal/core/rregexp.hnu�[���PK*J[]]VV"0��include/ruby/internal/core/rfile.hnu�[���PK*J[8R�BB#ت�include/ruby/internal/core/rmatch.hnu�[���PK*J[�Y��
�
#m��include/ruby/internal/core/rclass.hnu�[���PK*J[H���$$$�ηinclude/ruby/internal/core/robject.hnu�[���PK*J[+��4�4#�include/ruby/internal/core/rarray.hnu�[���PK*J[�5�}��$=�include/ruby/internal/core/rbignum.hnu�[���PK*J[�v��^5^5"$�include/ruby/internal/core/rdata.hnu�[���PK*J[K�EpEp�Y�include/ruby/internal/gc.hnu�[���PK*J[���I�I!Uʸinclude/ruby/internal/scan_args.hnu�[���PK*J[q�c��H�H ��include/ruby/internal/iterator.hnu�[���PK*J[�D��H�H�]�include/ruby/internal/eval.hnu�[���PK*J[��������include/ruby/internal/event.hnu�[���PK*J[{mى࿹include/ruby/internal/config.hnu�[���PK*J[�{��uuGӹinclude/ruby/internal/module.hnu�[���PK*J[�PYB��#
�include/ruby/internal/has/builtin.hnu�[���PK*J[c��H!H!%C�include/ruby/internal/has/attribute.hnu�[���PK*J[��#�/�include/ruby/internal/has/warning.hnu�[���PK*J[m:��)I6�include/ruby/internal/has/cpp_attribute.hnu�[���PK*J[&AH"��'cH�include/ruby/internal/has/c_attribute.hnu�[���PK*J[(6�
�
.�Q�include/ruby/internal/has/declspec_attribute.hnu�[���PK*J[gG�R#]�include/ruby/internal/has/feature.hnu�[���PK*J[��i��%jc�include/ruby/internal/has/extension.hnu�[���PK*J[�J8^�/�/&aj�include/ruby/internal/special_consts.hnu�[���PK*J[(=G�8�8���include/ruby/internal/xmalloc.hnu�[���PK*J[#�(''�Ӻinclude/ruby/internal/globals.hnu�[���PK*J[*��9Z9Z�include/ruby/internal/ctype.hnu�[���PK*J[ؼVn��yU�include/ruby/internal/dosish.hnu�[���PK*J[M�&$99#ob�include/ruby/internal/compiler_is.hnu�[���PK*J[pC)..!�j�include/ruby/internal/dllexport.hnu�[���PK*J[�1�QQzw�include/ruby/internal/method.hnu�[���PK*J[�mo��$��include/ruby/internal/warning_push.hnu�[���PK*J[��b�����include/ruby/internal/assume.hnu�[���PK*J[��HI"I"��include/ruby/util.hnu�[���PK*J[v���99�׻include/ruby/config.hnu�[���PK*J[7�5	5	��include/ruby/intern.hnu�[���PK*J[�8�'#u#up�include/ruby/debug.hnu�[���PK*J[�L�-x-x$׏�include/ruby/backward/cxxanyargs.hppnu�[���PK*J[�*�?��#X�include/ruby/backward/2/long_long.hnu�[���PK*J[�z}��${�include/ruby/backward/2/attributes.hnu�[���PK*J[�x�WW"]*�include/ruby/backward/2/stdalign.hnu�[���PK*J[�_�mm+1�include/ruby/backward/2/gcc_version_since.hnu�[���PK*J[���!�8�include/ruby/backward/2/rmodule.hnu�[���PK*J[|ؗ�	�	 �@�include/ruby/backward/2/stdarg.hnu�[���PK*J[��'�))�J�include/ruby/backward/2/bool.hnu�[���PK*J[� �&&"Q�include/ruby/backward/2/inttypes.hnu�[���PK*J[������ }a�include/ruby/backward/2/limits.hnu�[���PK*J[B�xx �m�include/ruby/backward/2/r_cast.hnu�[���PK*J[�+�r

 �t�include/ruby/backward/2/assume.hnu�[���PK*J[K..�~�include/ruby/random.hnu�[���PK*J[�D�		(��include/ruby/vm.hnu�[���PK*J[��<�Q�Q�i��include/ruby/io.hnu�[���PK*J[n��^���I�include/ruby/io/buffer.hnu�[���PK*J[͔���'Z�include/ruby/thread_native.hnu�[���PK*J[���(�(%u�include/ruby/assert.hnu�[���PK*J[���g��include/ruby/oniguruma.hnu�[���PK*J[����ww���etc/locked_extensions.ininu�[���PK*J[���(��K��Ku��lib64/libruby.so.3.4.4nuȯ��PK*J[3;~
lib64/gems/ruby/io-console-0.8.0/gem.build_completenu�[���PK*J[6�]xpxp.�~
lib64/gems/ruby/io-console-0.8.0/io/console.sonuȯ��PK*J[.t�
lib64/gems/ruby/psych-5.2.2/gem.build_completenu�[���PK*J[���S����$��
lib64/gems/ruby/psych-5.2.2/psych.sonuȯ��PK*J[3�qlib64/gems/ruby/bigdecimal-3.1.8/gem.build_completenu�[���PK*J[���(�(�.9rlib64/gems/ruby/bigdecimal-3.1.8/bigdecimal.sonuȯ��PK*J[-�&
lib64/gems/ruby/json-2.9.1/gem.build_completenu�[���PK*J[G��h�h�0'
lib64/gems/ruby/json-2.9.1/json/ext/generator.sonuȯ��PK*J[�1@�@�-�
lib64/gems/ruby/json-2.9.1/json/ext/parser.sonuȯ��PK*J[
Q�`?`?�Ilib64/ruby/rbconfig/sizeof.sonuȯ��PK*J[%��hGhG.�lib64/ruby/openssl.sonuȯ��PK*J[X![Ā.�.��lib64/ruby/monitor.sonuȯ��PK*J[�Ä�������lib64/ruby/pathname.sonuȯ��PK*J[��7X-X-��lib64/ruby/date_core.sonuȯ��PK*J[4���X>X>E�lib64/ruby/pty.sonuȯ��PK*J[�A:w�L�L��lib64/ruby/socket.sonuȯ��PK*J[�߽�C�C�9lib64/ruby/rbconfig.rbnu�[���PK*J[��Ą0O0O�}lib64/ruby/digest.sonuȯ��PK*J[�f� o o8�lib64/ruby/etc.sonuȯ��PK*J[�]"������<lib64/ruby/objspace.sonuȯ��PK*J[���OO�lib64/ruby/coverage.sonuȯ��PK*J[Φ�����Olib64/ruby/stringio.sonuȯ��PK*J[3@������lib64/ruby/strscan.sonuȯ��PK*J[Yx�����blib64/ruby/fiddle.sonuȯ��PK*J[E&�ƨ��F lib64/ruby/continuation.sonuȯ��PK*J[Π5�-�-�d lib64/ruby/erb/escape.sonuȯ��PK*J[�r\����� lib64/ruby/ripper.sonuȯ��PK*J[�|&lib64/gems/ruby/json-2.9.1/jsonnuȯ��PK*J[G4�)�?�?A}&lib64/ruby/digest/rmd160.sonuȯ��PK*J[���O�OD�&lib64/ruby/digest/sha2.sonuȯ��PK*J[�ݧN�/�/U
'lib64/ruby/digest/md5.sonuȯ��PK*J[1'�?�?]='lib64/ruby/digest/sha1.sonuȯ��PK*J[
�%�..!f}'lib64/ruby/digest/bubblebabble.sonuȯ��PK*J[��U�xxϫ'lib64/ruby/fcntl.sonuȯ��PK*J[�G4����'lib64/ruby/zlib.sonuȯ��PK*J[�Ö` . .t�(lib64/ruby/io/nonblock.sonuȯ��PK*J[j���-�-�(lib64/ruby/io/wait.sonuȯ��PK*J[g�
�(.(.
+)lib64/ruby/enc/iso_8859_5.sonuȯ��PK*J[2��yX>X>~Y)lib64/ruby/enc/cesu_8.sonuȯ��PK*J[��%�@.@.�)lib64/ruby/enc/utf_32be.sonuȯ��PK*J[�L0.0.��)lib64/ruby/enc/iso_8859_16.sonuȯ��PK*J[AF.N0.0.%�)lib64/ruby/enc/iso_8859_2.sonuȯ��PK*J[���i0.0.�#*lib64/ruby/enc/iso_8859_4.sonuȯ��PK*J[Bn��@.@.R*lib64/ruby/enc/windows_1251.sonuȯ��PK*J[h<��>�>��*lib64/ruby/enc/windows_31j.sonuȯ��PK*J[]–��-�-��*lib64/ruby/enc/iso_8859_6.sonuȯ��PK*J[)�� . .��*lib64/ruby/enc/koi8_r.sonuȯ��PK*J[7[@�0.0.+lib64/ruby/enc/windows_1254.sonuȯ��PK*J[�xXx-x-�J+lib64/ruby/enc/encdb.sonuȯ��PK*J[���H.H.Yx+lib64/ruby/enc/cp949.sonuȯ��PK*J[{"
$ . .�+lib64/ruby/enc/koi8_u.sonuȯ��PK*J[���>H.H.P�+lib64/ruby/enc/euc_tw.sonuȯ��PK*J[��h>h>�,lib64/ruby/enc/big5.sonuȯ��PK*J[ٙ�P.P.�B,lib64/ruby/enc/euc_kr.sonuȯ��PK*J[6*H�@.@.&q,lib64/ruby/enc/gb18030.sonuȯ��PK*J[%7�@.@.��,lib64/ruby/enc/gbk.sonuȯ��PK*J[��P^@.@.4�,lib64/ruby/enc/windows_1250.sonuȯ��PK*J[���8.8.�,lib64/ruby/enc/windows_1252.sonuȯ��PK*J[�.a�0.0.H+-lib64/ruby/enc/iso_8859_14.sonuȯ��PK*J[,ͅ[0.0.�Y-lib64/ruby/enc/iso_8859_3.sonuȯ��PK*J[���A�-lib64/ruby/enc/gb2312.sonuȯ��PK*J[�qO�0.0.��-lib64/ruby/enc/iso_8859_7.sonuȯ��PK*J[/�p��>�>�-lib64/ruby/enc/shift_jis.sonuȯ��PK*J[�p�E�-�-�.lib64/ruby/enc/trans/cesu_8.sonuȯ��PK*J[�CIh-h-A.lib64/ruby/enc/trans/ebcdic.sonuȯ��PK*J[:m��-�-�n.lib64/ruby/enc/trans/escape.sonuȯ��PK*J[!��;x�x�#
�.lib64/ruby/enc/trans/single_byte.sonuȯ��PK*J[���up�p��j0lib64/ruby/enc/trans/big5.sonuȯ��PK*J[���&���H9lib64/ruby/enc/trans/gb18030.sonuȯ��PK*J[�u��h�h��<lib64/ruby/enc/trans/gbk.sonuȯ��PK*J[CR�>�-�- �?lib64/ruby/enc/trans/utf8_mac.sonuȯ��PK*J[���h�h�)�2Clib64/ruby/enc/trans/emoji_sjis_docomo.sonuȯ��PK*J[j�Z��-�- �Elib64/ruby/enc/trans/japanese.sonuȯ��PK*J[��N�}�}$�>Elib64/ruby/enc/trans/japanese_euc.sonuȯ��PK*J[��Kx=x=��Jlib64/ruby/enc/trans/transdb.sonuȯ��PK*J[�`x]x]%_�Jlib64/ruby/enc/trans/japanese_sjis.sonuȯ��PK*J[�a`�`�',XMlib64/ruby/enc/trans/emoji_sjis_kddi.sonuȯ��PK*J[����*�EOlib64/ruby/enc/trans/emoji_iso2022_kddi.sonuȯ��PK*J[Q:�p�p�UQlib64/ruby/enc/trans/korean.sonuȯ��PK*J[]G̟h�h��Tlib64/ruby/enc/trans/emoji.sonuȯ��PK*J[f��&p�p�ȏUlib64/ruby/enc/trans/chinese.sonuȯ��PK*J[L*U�H>H>!�mXlib64/ruby/enc/trans/utf_16_32.sonuȯ��PK*J[�
1{`�`�+ �Xlib64/ruby/enc/trans/emoji_sjis_softbank.sonuȯ��PK*J[LtQC`>`>ۉZlib64/ruby/enc/trans/iso2022.sonuȯ��PK*J[NZ�0.0.��Zlib64/ruby/enc/windows_1257.sonuȯ��PK*J[�c�>�>�Zlib64/ruby/enc/euc_jp.sonuȯ��PK*J[Ͼt�0.0.�5[lib64/ruby/enc/windows_1253.sonuȯ��PK*J[i�rT�-�-fd[lib64/ruby/enc/iso_8859_11.sonuȯ��PK*J[�ޱ�@.@.��[lib64/ruby/enc/utf_16be.sonuȯ��PK*J[yه�0.0.�[lib64/ruby/enc/iso_8859_15.sonuȯ��PK*J[jms��-�-��[lib64/ruby/enc/iso_8859_8.sonuȯ��PK*J[�7q�@.@.�\lib64/ruby/enc/utf_32le.sonuȯ��PK*J[Uj0.0.@L\lib64/ruby/enc/iso_8859_10.sonuȯ��PK*J[�#�0.0.�z\lib64/ruby/enc/iso_8859_1.sonuȯ��PK*J[!�UY(.(.9�\lib64/ruby/enc/emacs_mule.sonuȯ��PK*J[eu�@.@.��\lib64/ruby/enc/utf_16le.sonuȯ��PK*J[)��s0.0.7]lib64/ruby/enc/iso_8859_9.sonuȯ��PK*J[\F��0.0.�4]lib64/ruby/enc/iso_8859_13.sonuȯ��PK*J[M6m�hNhN0c]lib64/ruby/cgi/escape.sonuȯ��PK*J[tU�]lib64/pkgconfig/ruby.pcnu�[���PK��_�2�]